@sapui5/sap.fe.core 1.136.11 → 1.136.13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/src/sap/fe/core/.library +1 -1
- package/src/sap/fe/core/AppStateHandler.js +8 -2
- package/src/sap/fe/core/AppStateHandler.ts +9 -1
- package/src/sap/fe/core/TemplateComponent.js +1 -1
- package/src/sap/fe/core/TemplateComponent.ts +1 -3
- package/src/sap/fe/core/controllerextensions/EditFlow.js +73 -23
- package/src/sap/fe/core/controllerextensions/EditFlow.ts +113 -43
- package/src/sap/fe/core/controllerextensions/InternalRouting.js +7 -4
- package/src/sap/fe/core/controllerextensions/InternalRouting.ts +8 -5
- package/src/sap/fe/core/controllerextensions/MessageHandler.js +1 -1
- package/src/sap/fe/core/controllerextensions/MessageHandler.ts +1 -0
- package/src/sap/fe/core/controllerextensions/Routing.js +6 -2
- package/src/sap/fe/core/controllerextensions/Routing.ts +4 -1
- package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.js +8 -1
- package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.ts +8 -0
- package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataOperation.js +2 -1
- package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataOperation.ts +1 -0
- package/src/sap/fe/core/controllerextensions/routing/RouterProxy.js +6 -5
- package/src/sap/fe/core/controllerextensions/routing/RouterProxy.ts +15 -5
- package/src/sap/fe/core/controls/Recommendations/ConfirmRecommendationDialog.js +29 -1
- package/src/sap/fe/core/controls/Recommendations/ConfirmRecommendationDialog.tsx +32 -0
- package/src/sap/fe/core/converters/controls/Common/Action.js +3 -2
- package/src/sap/fe/core/converters/controls/Common/Action.ts +2 -1
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +31 -36
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +47 -57
- package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.js +4 -3
- package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.ts +3 -2
- package/src/sap/fe/core/formatters/FPMFormatter.js +2 -2
- package/src/sap/fe/core/formatters/FPMFormatter.ts +1 -1
- package/src/sap/fe/core/fpm/manifest.json +1 -1
- package/src/sap/fe/core/helpers/ModelHelper.js +4 -1
- package/src/sap/fe/core/helpers/ModelHelper.ts +4 -1
- package/src/sap/fe/core/library.js +1 -1
- package/src/sap/fe/core/messagebundle_da.properties +1 -1
- package/src/sap/fe/core/messagebundle_ko.properties +3 -3
- package/src/sap/fe/core/messagebundle_uk.properties +2 -2
- package/src/sap/fe/core/messagebundle_vi.properties +4 -4
- package/src/sap/fe/core/rootView/Fcl.controller.js +1 -1
- package/src/sap/fe/core/rootView/Fcl.controller.ts +6 -1
- package/src/sap/fe/core/services/CollaborationManagerServiceFactory.js +17 -29
- package/src/sap/fe/core/services/CollaborationManagerServiceFactory.ts +23 -26
- package/src/sap/fe/core/services/RoutingServiceFactory.js +9 -5
- package/src/sap/fe/core/services/RoutingServiceFactory.ts +12 -6
|
@@ -27,12 +27,11 @@ sap.ui.define(["sap/fe/base/BindingToolkit", "sap/fe/core/helpers/ModelHelper",
|
|
|
27
27
|
var not = BindingToolkit.not;
|
|
28
28
|
var lessOrEqual = BindingToolkit.lessOrEqual;
|
|
29
29
|
var length = BindingToolkit.length;
|
|
30
|
-
var isPathInModelExpression = BindingToolkit.isPathInModelExpression;
|
|
31
|
-
var isExpressionStaticallyResolvable = BindingToolkit.isExpressionStaticallyResolvable;
|
|
32
30
|
var isConstant = BindingToolkit.isConstant;
|
|
33
31
|
var ifElse = BindingToolkit.ifElse;
|
|
34
32
|
var greaterThan = BindingToolkit.greaterThan;
|
|
35
33
|
var greaterOrEqual = BindingToolkit.greaterOrEqual;
|
|
34
|
+
var getStaticallyResolvableExpression = BindingToolkit.getStaticallyResolvableExpression;
|
|
36
35
|
var getExpressionFromAnnotation = BindingToolkit.getExpressionFromAnnotation;
|
|
37
36
|
var formatResult = BindingToolkit.formatResult;
|
|
38
37
|
var equal = BindingToolkit.equal;
|
|
@@ -450,30 +449,22 @@ sap.ui.define(["sap/fe/base/BindingToolkit", "sap/fe/core/helpers/ModelHelper",
|
|
|
450
449
|
function getCreateVisibility(converterContext, standardActionsContext) {
|
|
451
450
|
let isForCreationRow = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
|
|
452
451
|
let isForPaste = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;
|
|
453
|
-
|
|
454
|
-
const isCreateHidden = hideCreateDeleteInAnalyticalTable(converterContext, standardActionsContext) || (isForCreationRow ? isActionAnnotatedHidden(converterContext, "CreateHidden", false) : standardActionsContext.hiddenAnnotation.create);
|
|
452
|
+
let isInsertable = standardActionsContext.restrictions.isInsertable.expression;
|
|
455
453
|
const newAction = standardActionsContext.newAction;
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
//
|
|
468
|
-
//
|
|
469
|
-
|
|
470
|
-
// - Otherwise
|
|
471
|
-
// - If we're on the list report ->
|
|
472
|
-
// - If UI.CreateHidden points to a property path -> provide a negated binding to this path
|
|
473
|
-
// - Otherwise, create is visible
|
|
474
|
-
// - Otherwise
|
|
475
|
-
// - This depends on the value of the UI.IsEditable
|
|
476
|
-
return ifElse(standardActionsContext.creationMode === CreationMode.External, and(not(isCreateHidden), or(converterContext.getTemplateType() === TemplateType.ListReport, UI.IsEditable)), ifElse(or(and(isConstant(newAction?.available), equal(newAction?.available, false)), and(isConstant(isInsertable), equal(isInsertable, false), !newAction), and(isConstant(isCreateHidden), equal(isCreateHidden, true)), and(standardActionsContext.creationMode === CreationMode.InlineCreationRows, standardActionsContext.tableManifestConfiguration?.type === "ResponsiveTable", ifElse(and(standardActionsContext?.tableManifestConfiguration?.inlineCreationRowsHiddenInEditMode === false, not(isForPaste)), true, UI.IsCreateMode))), false, ifElse(converterContext.getTemplateType() === TemplateType.ListReport, or(not(isPathInModelExpression(isCreateHidden)), not(isCreateHidden)), and(not(isCreateHidden), UI.IsEditable))));
|
|
454
|
+
if (newAction) {
|
|
455
|
+
// if there is a new action, we consider the action availability instead of insertable
|
|
456
|
+
isInsertable = newAction.available === undefined ? constant(true) : newAction.available;
|
|
457
|
+
}
|
|
458
|
+
isInsertable = getStaticallyResolvableExpression(isInsertable, constant(true));
|
|
459
|
+
const isCreateHidden = hideCreateDeleteInAnalyticalTable(converterContext, standardActionsContext) || (isForCreationRow ? isActionAnnotatedHidden(converterContext, "CreateHidden", false) : standardActionsContext.hiddenAnnotation.create);
|
|
460
|
+
if (standardActionsContext.creationMode === CreationMode.External) {
|
|
461
|
+
// if creation mode is external we do not consider insertable restrictions
|
|
462
|
+
return and(not(isCreateHidden), or(converterContext.getTemplateType() === TemplateType.ListReport, UI.IsEditable));
|
|
463
|
+
}
|
|
464
|
+
return ifElse(and(
|
|
465
|
+
//If InlineCreationRows mode and a Responsive table type, with the parameter inlineCreationRowsHiddenInEditMode to true while not in create mode
|
|
466
|
+
// when calculating paste button visibility, we force the condition to false with the isForPaste property
|
|
467
|
+
standardActionsContext.creationMode === CreationMode.InlineCreationRows, standardActionsContext.tableManifestConfiguration?.type === "ResponsiveTable", ifElse(and(standardActionsContext?.tableManifestConfiguration?.inlineCreationRowsHiddenInEditMode === false, not(isForPaste)), true, UI.IsCreateMode)), false, ifElse(converterContext.getTemplateType() === TemplateType.ListReport, and(not(isCreateHidden), isInsertable), and(not(isCreateHidden), isInsertable, UI.IsEditable)));
|
|
477
468
|
}
|
|
478
469
|
|
|
479
470
|
/**
|
|
@@ -487,12 +478,8 @@ sap.ui.define(["sap/fe/base/BindingToolkit", "sap/fe/core/helpers/ModelHelper",
|
|
|
487
478
|
let isDeleteHidden = standardActionsContext.hiddenAnnotation.delete;
|
|
488
479
|
let pathDeletableExpression = standardActionsContext.restrictions.isDeletable.expression;
|
|
489
480
|
//we check if there is no relative path dependent on the context
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
}
|
|
493
|
-
if (!isExpressionStaticallyResolvable(pathDeletableExpression)) {
|
|
494
|
-
pathDeletableExpression = constant(true);
|
|
495
|
-
}
|
|
481
|
+
isDeleteHidden = getStaticallyResolvableExpression(isDeleteHidden, constant(false));
|
|
482
|
+
pathDeletableExpression = getStaticallyResolvableExpression(pathDeletableExpression, constant(true));
|
|
496
483
|
return ifElse(converterContext.getTemplateType() === TemplateType.AnalyticalListPage || hideCreateDeleteInAnalyticalTable(converterContext, standardActionsContext), false, ifElse(converterContext.getTemplateType() !== TemplateType.ListReport, and(not(isDeleteHidden), pathDeletableExpression, UI.IsEditable), and(not(isDeleteHidden), pathDeletableExpression)));
|
|
497
484
|
}
|
|
498
485
|
|
|
@@ -587,9 +574,10 @@ sap.ui.define(["sap/fe/base/BindingToolkit", "sap/fe/core/helpers/ModelHelper",
|
|
|
587
574
|
let forContextMenu = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;
|
|
588
575
|
const conditions = [];
|
|
589
576
|
const contextPath = !forContextMenu ? "" : "contextmenu/";
|
|
577
|
+
const isDraftEnabled = ModelHelper.isObjectPathDraftSupported(converterContext.getDataModelObjectPath());
|
|
590
578
|
if (standardActionsContext.creationMode === CreationMode.InlineCreationRows) {
|
|
591
579
|
// for Inline creation rows create can be hidden via manifest and this should not impact its enablement
|
|
592
|
-
conditions.push(and(not(standardActionsContext.hiddenAnnotation.create), UI.IsEditable));
|
|
580
|
+
conditions.push(and(not(standardActionsContext.hiddenAnnotation.create), isDraftEnabled, UI.IsEditable, not(pathInModel("IsActiveEntity"))));
|
|
593
581
|
} else {
|
|
594
582
|
conditions.push(createVisibility);
|
|
595
583
|
}
|
|
@@ -649,14 +637,21 @@ sap.ui.define(["sap/fe/base/BindingToolkit", "sap/fe/core/helpers/ModelHelper",
|
|
|
649
637
|
function getPasteEnablement(pasteVisibility, standardActionsContext, forContextMenu) {
|
|
650
638
|
const selectedContextsPath = !forContextMenu ? "selectedContexts" : "contextmenu/selectedContexts";
|
|
651
639
|
const pasteEnablementPath = !forContextMenu ? "nodeUpdatesInfo/pasteEnablement" : "contextmenu/nodeUpdatesInfo/pasteEnablement";
|
|
652
|
-
|
|
653
|
-
|
|
640
|
+
let isInsertable = standardActionsContext.restrictions.isInsertable.expression;
|
|
641
|
+
const tableType = standardActionsContext.tableManifestConfiguration.type;
|
|
642
|
+
const hasCellSelector = ["ResponsiveTable", "GridTable", "TreeTable"].includes(tableType);
|
|
643
|
+
if (hasCellSelector) {
|
|
644
|
+
// If table is not insertable, we only enable the paste button when there is a selection (To edit data)
|
|
645
|
+
isInsertable = or(standardActionsContext.restrictions.isInsertable.expression, equal(pathInModel("cellSelectorHasSelection", "internal"), true));
|
|
646
|
+
}
|
|
647
|
+
if (tableType === "TreeTable") {
|
|
648
|
+
return and(pasteVisibility, or(standardActionsContext.restrictions.isUpdatable.navigationExpression._type === "Unresolvable", standardActionsContext.restrictions.isUpdatable.expression), isInsertable, ifElse(lessOrEqual(length(pathInModel(selectedContextsPath, "internal")), 1), equal(pathInModel(pasteEnablementPath, "internal"), true), false));
|
|
654
649
|
}
|
|
655
650
|
let updateOnNavigation = standardActionsContext.restrictions?.isUpdatable?.navigationExpression;
|
|
656
651
|
if (updateOnNavigation?._type === "Unresolvable") {
|
|
657
652
|
updateOnNavigation = constant(true);
|
|
658
653
|
}
|
|
659
|
-
return and(updateOnNavigation, pasteVisibility);
|
|
654
|
+
return and(updateOnNavigation, pasteVisibility, isInsertable);
|
|
660
655
|
}
|
|
661
656
|
|
|
662
657
|
/**
|
|
@@ -753,4 +748,4 @@ sap.ui.define(["sap/fe/base/BindingToolkit", "sap/fe/core/helpers/ModelHelper",
|
|
|
753
748
|
_exports.isInDisplayMode = isInDisplayMode;
|
|
754
749
|
return _exports;
|
|
755
750
|
}, false);
|
|
756
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJTdGFuZGFyZEFjdGlvbktleXMiLCJDdXQiLCJDb3B5IiwiQ3JlYXRlIiwiRGVsZXRlIiwiQ3JlYXRpb25Sb3ciLCJQYXN0ZSIsIk1hc3NFZGl0IiwiSW5zaWdodHMiLCJNb3ZlVXAiLCJNb3ZlRG93biIsIl9leHBvcnRzIiwiZ2VuZXJhdGVTdGFuZGFyZEFjdGlvbnNDb250ZXh0IiwiY29udmVydGVyQ29udGV4dCIsImNyZWF0aW9uTW9kZSIsInRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uIiwiY29sbGVjdGlvblBhdGgiLCJnZXRUYXJnZXRPYmplY3RQYXRoIiwiZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCIsImhpZGRlbkFubm90YXRpb24iLCJjcmVhdGUiLCJpc0FjdGlvbkFubm90YXRlZEhpZGRlbiIsImRlbGV0ZSIsInVwZGF0ZSIsImlzRHJhZnRPclN0aWNreVN1cHBvcnRlZCIsIm5ld0FjdGlvbiIsImdldE5ld0FjdGlvbiIsInJlc3RyaWN0aW9ucyIsImdldFJlc3RyaWN0aW9ucyIsImRhdGFNb2RlbE9iamVjdFBhdGgiLCJiSXNEcmFmdFN1cHBvcnRlZCIsIk1vZGVsSGVscGVyIiwiaXNPYmplY3RQYXRoRHJhZnRTdXBwb3J0ZWQiLCJiSXNTdGlja3lTZXNzaW9uU3VwcG9ydGVkIiwic3RhcnRpbmdFbnRpdHlTZXQiLCJhbm5vdGF0aW9ucyIsIlNlc3Npb24iLCJTdGlja3lTZXNzaW9uU3VwcG9ydGVkIiwiY3VycmVudEVudGl0eVNldCIsImdldEVudGl0eVNldCIsImlzRW50aXR5U2V0IiwiQ29tbW9uIiwiRHJhZnRSb290IiwiTmV3QWN0aW9uIiwidW5kZWZpbmVkIiwibmV3QWN0aW9uTmFtZSIsInRvU3RyaW5nIiwiYXZhaWxhYmxlUHJvcGVydHkiLCJnZXRFbnRpdHlUeXBlIiwiYWN0aW9ucyIsIkNvcmUiLCJPcGVyYXRpb25BdmFpbGFibGUiLCJuYW1lIiwiYXZhaWxhYmxlIiwiZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uIiwic0Fubm90YXRpb25UZXJtIiwiYldpdGhOYXZpZ2F0aW9uUGF0aCIsImFyZ3VtZW50cyIsImxlbmd0aCIsImFjdGlvbkFubm90YXRpb25WYWx1ZSIsImlzU2luZ2xldG9uIiwiVUkiLCJjb25zdGFudCIsInZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMiLCJnZXRSZWxhdGl2ZVBhdGhzIiwicGF0aCIsInNpbmdsZXRvblBhdGhWaXNpdG9yIiwiZ2V0Q29udmVydGVkVHlwZXMiLCJyZXN0cmljdGlvbnNEZWYiLCJrZXkiLCJmdW5jdGlvbiIsImlzUGF0aEluc2VydGFibGUiLCJpc1BhdGhVcGRhdGFibGUiLCJpc1BhdGhEZWxldGFibGUiLCJyZXN1bHQiLCJmb3JFYWNoIiwiZGVmIiwiZGVmRnVuY3Rpb24iLCJleHByZXNzaW9uIiwiYXBwbHkiLCJwYXRoVmlzaXRvciIsIm5hdmlnYXRpb25QYXRocyIsIm5hdmlnYXRpb25FeHByZXNzaW9uIiwiaWdub3JlVGFyZ2V0Q29sbGVjdGlvbiIsImF1dGhvcml6ZVVucmVzb2x2YWJsZSIsImdldEluc2VydFVwZGF0ZUFjdGlvbnNUZW1wbGF0aW5nIiwic3RhbmRhcmRBY3Rpb25zQ29udGV4dCIsImlzRHJhZnRPclN0aWNreSIsIkNyZWF0aW9uTW9kZSIsIkV4dGVybmFsIiwiZ2V0U3RhbmRhcmRBY3Rpb25DcmVhdGUiLCJjcmVhdGVWaXNpYmlsaXR5IiwiZ2V0Q3JlYXRlVmlzaWJpbGl0eSIsImlzVGVtcGxhdGVkIiwiY29tcGlsZUV4cHJlc3Npb24iLCJnZXRDcmVhdGVUZW1wbGF0aW5nIiwidmlzaWJsZSIsInZpc2libGVFeHByZXNzaW9uIiwiZW5hYmxlZCIsImdldENyZWF0ZUVuYWJsZW1lbnQiLCJlbmFibGVkRm9yQ29udGV4dE1lbnUiLCJ0eXBlIiwiQWN0aW9uVHlwZSIsIlN0YW5kYXJkIiwiZ2V0U3RhbmRhcmRBY3Rpb25DdXQiLCJjdXRWaXNpYmlsaXR5IiwiZ2V0Q3V0VmlzaWJpbGl0eSIsImdldERlZmF1bHRUZW1wbGF0aW5nIiwiZ2V0Q3V0RW5hYmxlbWVudCIsImdldFN0YW5kYXJkQWN0aW9uQ29weSIsImNvcHlWaXNpYmlsaXR5IiwiZ2V0Q29weVZpc2liaWxpdHkiLCJnZXRDb3B5RW5hYmxlbWVudCIsImdldFN0YW5kYXJkQWN0aW9uTW92ZVVwRG93biIsImZvclVwIiwiY2FuQ2hhbmdlU2libGluZyIsIkhpZXJhcmNoeSIsImhpZXJhcmNoeVF1YWxpZmllciIsIkNoYW5nZU5leHRTaWJsaW5nQWN0aW9uIiwibW92ZVZpc2liaWxpdHkiLCJhbmQiLCJnZXRNb3ZlVXBEb3duRW5hYmxlbWVudCIsImdldFN0YW5kYXJkQWN0aW9uRGVsZXRlIiwiZGVsZXRlVmlzaWJpbGl0eSIsImdldERlbGV0ZVZpc2liaWxpdHkiLCJnZXREZWxldGVFbmFibGVtZW50IiwiZ2V0Q3JlYXRpb25Sb3ciLCJjcmVhdGlvblJvd1Zpc2liaWxpdHkiLCJnZXRDcmVhdGlvblJvd0VuYWJsZW1lbnQiLCJwYXRoVXBkYXRhYmxlRXhwcmVzc2lvbiIsImlzVXBkYXRhYmxlIiwidGVtcGxhdGVCaW5kaW5nRXhwcmVzc2lvbiIsImdldFRlbXBsYXRlVHlwZSIsIlRlbXBsYXRlVHlwZSIsIkxpc3RSZXBvcnQiLCJJc0VkaXRhYmxlIiwiaWZFbHNlIiwiZXF1YWwiLCJpc0hpZXJhcmNoeVBhcmVudE5vZGVVcGRhdGFibGUiLCJub3QiLCJpc0NvbnN0YW50IiwiYXZhaWxhYmxlQ29weUFjdGlvbiIsIkNvcHlBY3Rpb24iLCJnZXRTdGFuZGFyZEFjdGlvblBhc3RlIiwiaXNJbnNlcnRVcGRhdGVBY3Rpb25zVGVtcGxhdGVkIiwicGFzdGVWaXNpYmlsaXR5IiwiZ2V0UGFzdGVWaXNpYmlsaXR5IiwicGFzdGVFbmFibGVtZW50IiwiZ2V0UGFzdGVFbmFibGVtZW50IiwicGFzdGVFbmFibGVtZW50Rm9yQ29udGV4dE1lbnUiLCJnZXRTdGFuZGFyZEFjdGlvbk1hc3NFZGl0IiwibWFzc0VkaXRWaXNpYmlsaXR5IiwiZ2V0TWFzc0VkaXRWaXNpYmlsaXR5IiwidmlzaWJsZUZvckNvbnRleHRNZW51IiwicGF0aEluTW9kZWwiLCJnZXRNYXNzRWRpdEVuYWJsZW1lbnQiLCJnZXRTdGFuZGFyZEFjdGlvbkluc2lnaHRzIiwidmlzdWFsaXphdGlvblBhdGgiLCJpbnNpZ2h0c1Zpc2liaWxpdHkiLCJnZXRJbnNpZ2h0c1Zpc2liaWxpdHkiLCJpbnNpZ2h0c0VuYWJsZW1lbnQiLCJnZXRJbnNpZ2h0c0VuYWJsZW1lbnQiLCJpc0ZvckNyZWF0aW9uUm93Iiwib3IiLCJhY3Rpb25WaXNpYmlsaXR5IiwiaGlkZUNyZWF0ZURlbGV0ZUluQW5hbHl0aWNhbFRhYmxlIiwiaXNGb3JQYXN0ZSIsImlzSW5zZXJ0YWJsZSIsImlzQ3JlYXRlSGlkZGVuIiwiSW5saW5lQ3JlYXRpb25Sb3dzIiwiaW5saW5lQ3JlYXRpb25Sb3dzSGlkZGVuSW5FZGl0TW9kZSIsIklzQ3JlYXRlTW9kZSIsImlzUGF0aEluTW9kZWxFeHByZXNzaW9uIiwiaXNEZWxldGVIaWRkZW4iLCJwYXRoRGVsZXRhYmxlRXhwcmVzc2lvbiIsImlzRGVsZXRhYmxlIiwiaXNFeHByZXNzaW9uU3RhdGljYWxseVJlc29sdmFibGUiLCJBbmFseXRpY2FsTGlzdFBhZ2UiLCJ1cGRhdGVPbk5hdmlnYXRpb24iLCJfdHlwZSIsIm5vdEVxdWFsIiwiZW5hYmxlUGFzdGUiLCJpbmNsdWRlcyIsImlzVXBkYXRlSGlkZGVuIiwibWFzc0VkaXRFbmFibGVkSW5NYW5pZmVzdCIsIm1hc3NFZGl0IiwiT2JqZWN0UGFnZSIsIkZyZWVTdHlsZVBhZ2UiLCJyZXN0cmljdGlvbnNJbnNlcnRhYmxlIiwiaW5kZXhPZiIsIm5hdmlnYXRpb25Qcm9wZXJ0aWVzIiwibGFzdE5hdiIsInBhcnRuZXIiLCJpc05hdmlnYXRpb25Qcm9wZXJ0eSIsImRpc2FibGVBZGRSb3dCdXR0b25Gb3JFbXB0eURhdGEiLCJmb3JtYXRSZXN1bHQiLCJ0YWJsZUZvcm1hdHRlcnMiLCJ2YWxpZGF0ZUNyZWF0aW9uUm93RmllbGRzIiwiZm9yQ29udGV4dE1lbnUiLCJjb25kaXRpb25zIiwiY29udGV4dFBhdGgiLCJwdXNoIiwiQ29sbGVjdGlvblR5cGUiLCJyZXNvbHZlQWJzb2x1dGVQYXRoIiwidGFyZ2V0IiwibGVzc09yRXF1YWwiLCJjcmVhdGVFbmFibGVtZW50IiwiZGVsZXRhYmxlQ29udGV4dHMiLCJ1blNhdmVkQ29udGV4dHMiLCJkcmFmdHNXaXRoRGVsZXRhYmxlQWN0aXZlIiwiZHJhZnRzV2l0aE5vbkRlbGV0YWJsZUFjdGl2ZSIsImdyZWF0ZXJUaGFuIiwic2VsZWN0ZWRDb250ZXh0c1BhdGgiLCJwYXN0ZUVuYWJsZW1lbnRQYXRoIiwiaXNPbmx5RHluYW1pY09uQ3VycmVudEVudGl0eSIsIm51bWJlck9mU2VsZWN0ZWRDb250ZXh0UHJvcGVydHkiLCJ1cGRhdGFibGVDb250ZXh0UHJvcGVydHkiLCJudW1iZXJPZlNlbGVjdGVkQ29udGV4dHMiLCJncmVhdGVyT3JFcXVhbCIsIm51bWJlck9mVXBkYXRhYmxlQ29udGV4dHMiLCJiRGlzcGxheU1vZGUiLCJpc0luRGlzcGxheU1vZGUiLCJydW50aW1lQmluZGluZyIsImN1dGFibGVDb250ZXh0c1BhdGgiLCJjb3B5YWJsZUNvbnRleHRzUGF0aCIsIm1vdmVVcERvd25WaXNpYmlsaXR5Iiwic2luZ2xlQ29udGV4dE1vdmFibGVVcCIsInNpbmdsZUNvbnRleHRNb3ZhYmxlRG93biIsImNoZWNrTXVsdGlwbGVWaXN1YWxpemF0aW9uIiwiZ2V0TWFuaWZlc3RXcmFwcGVyIiwiaGFzSW5saW5lRWRpdCIsInRlbXBsYXRlVHlwZSIsImhhc011bHRpcGxlVmlzdWFsaXphdGlvbnMiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIlN0YW5kYXJkQWN0aW9ucy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEJvb2xlYW4sIEVudGl0eVNldCB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlc1wiO1xuaW1wb3J0IHR5cGUgeyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24sIENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIH0gZnJvbSBcInNhcC9mZS9iYXNlL0JpbmRpbmdUb29sa2l0XCI7XG5pbXBvcnQge1xuXHRhbmQsXG5cdGNvbXBpbGVFeHByZXNzaW9uLFxuXHRjb25zdGFudCxcblx0ZXF1YWwsXG5cdGZvcm1hdFJlc3VsdCxcblx0Z2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uLFxuXHRncmVhdGVyT3JFcXVhbCxcblx0Z3JlYXRlclRoYW4sXG5cdGlmRWxzZSxcblx0aXNDb25zdGFudCxcblx0aXNFeHByZXNzaW9uU3RhdGljYWxseVJlc29sdmFibGUsXG5cdGlzUGF0aEluTW9kZWxFeHByZXNzaW9uLFxuXHRsZW5ndGgsXG5cdGxlc3NPckVxdWFsLFxuXHRub3QsXG5cdG5vdEVxdWFsLFxuXHRvcixcblx0cGF0aEluTW9kZWxcbn0gZnJvbSBcInNhcC9mZS9iYXNlL0JpbmRpbmdUb29sa2l0XCI7XG5pbXBvcnQgdHlwZSB7IFBhZ2VDb250ZXh0UGF0aFRhcmdldCB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL1RlbXBsYXRlQ29udmVydGVyXCI7XG5pbXBvcnQgdHlwZSB7IEJhc2VBY3Rpb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9Db21tb24vQWN0aW9uXCI7XG5pbXBvcnQgTW9kZWxIZWxwZXIgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvTW9kZWxIZWxwZXJcIjtcbmltcG9ydCB7IGlzRW50aXR5U2V0LCBpc05hdmlnYXRpb25Qcm9wZXJ0eSwgaXNTaW5nbGV0b24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9UeXBlR3VhcmRzXCI7XG5pbXBvcnQge1xuXHRnZXRSZWxhdGl2ZVBhdGhzLFxuXHRnZXRUYXJnZXRPYmplY3RQYXRoLFxuXHRpc1BhdGhEZWxldGFibGUsXG5cdGlzUGF0aEluc2VydGFibGUsXG5cdGlzUGF0aFVwZGF0YWJsZVxufSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9EYXRhTW9kZWxQYXRoSGVscGVyXCI7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXJlc3RyaWN0ZWQtaW1wb3J0c1xuaW1wb3J0IHRhYmxlRm9ybWF0dGVycyBmcm9tIFwic2FwL2ZlL21hY3Jvcy9mb3JtYXR0ZXJzL1RhYmxlRm9ybWF0dGVyXCI7XG5pbXBvcnQgeyBVSSwgc2luZ2xldG9uUGF0aFZpc2l0b3IgfSBmcm9tIFwiLi4vLi4vLi4vLi4vaGVscGVycy9CaW5kaW5nSGVscGVyXCI7XG5pbXBvcnQgdHlwZSBDb252ZXJ0ZXJDb250ZXh0IGZyb20gXCIuLi8uLi8uLi9Db252ZXJ0ZXJDb250ZXh0XCI7XG5pbXBvcnQgeyBBY3Rpb25UeXBlLCBDcmVhdGlvbk1vZGUsIFRlbXBsYXRlVHlwZSB9IGZyb20gXCIuLi8uLi8uLi9NYW5pZmVzdFNldHRpbmdzXCI7XG5pbXBvcnQgeyBnZXRJbnNpZ2h0c0VuYWJsZW1lbnQsIGdldEluc2lnaHRzVmlzaWJpbGl0eSB9IGZyb20gXCIuLi8uLi8uLi9oZWxwZXJzL0luc2lnaHRzSGVscGVyc1wiO1xuaW1wb3J0IHR5cGUgeyBUYWJsZUNvbnRyb2xDb25maWd1cmF0aW9uIH0gZnJvbSBcIi4uL1RhYmxlXCI7XG5cbmV4cG9ydCB0eXBlIFN0YW5kYXJkQWN0aW9uID0gQmFzZUFjdGlvbiAmIHtcblx0dHlwZTogQWN0aW9uVHlwZS5TdGFuZGFyZDtcblx0aXNUZW1wbGF0ZWQ/OiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjtcblx0dmlzaWJsZTogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb247XG5cdHZpc2libGVFeHByZXNzaW9uPzogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+O1xuXHRlbmFibGVkOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjtcblx0ZW5hYmxlZEZvckNvbnRleHRNZW51PzogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb247XG59O1xuXG50eXBlIEV4cHJlc3Npb25SZXN0cmljdGlvbnNUeXBlID0ge1xuXHRleHByZXNzaW9uOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj47XG5cdG5hdmlnYXRpb25FeHByZXNzaW9uOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj47XG59O1xudHlwZSBTdGFuZGFyZEFjdGlvbnNSZXN0cmljdGlvbnNUeXBlID0gUmVjb3JkPHN0cmluZywgRXhwcmVzc2lvblJlc3RyaWN0aW9uc1R5cGU+O1xuXG5leHBvcnQgdHlwZSBTdGFuZGFyZEFjdGlvbnNDb250ZXh0ID0ge1xuXHRjb2xsZWN0aW9uUGF0aDogc3RyaW5nO1xuXHRoaWRkZW5Bbm5vdGF0aW9uOiB7XG5cdFx0Y3JlYXRlOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj47XG5cdFx0ZGVsZXRlOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj47XG5cdFx0dXBkYXRlOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj47XG5cdH07XG5cdGNyZWF0aW9uTW9kZTogQ3JlYXRpb25Nb2RlO1xuXHRpc0RyYWZ0T3JTdGlja3lTdXBwb3J0ZWQ6IGJvb2xlYW47XG5cdG5ld0FjdGlvbj86IHtcblx0XHRuYW1lOiBzdHJpbmc7XG5cdFx0YXZhaWxhYmxlOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj47XG5cdH07XG5cdHRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uOiBUYWJsZUNvbnRyb2xDb25maWd1cmF0aW9uO1xuXHRyZXN0cmljdGlvbnM6IFN0YW5kYXJkQWN0aW9uc1Jlc3RyaWN0aW9uc1R5cGU7XG59O1xuXG5leHBvcnQgY29uc3QgU3RhbmRhcmRBY3Rpb25LZXlzID0ge1xuXHRDdXQ6IFwiU3RhbmRhcmRBY3Rpb246OkN1dFwiLFxuXHRDb3B5OiBcIlN0YW5kYXJkQWN0aW9uOjpDb3B5XCIsXG5cdENyZWF0ZTogXCJTdGFuZGFyZEFjdGlvbjo6Q3JlYXRlXCIsXG5cdERlbGV0ZTogXCJTdGFuZGFyZEFjdGlvbjo6RGVsZXRlXCIsXG5cdENyZWF0aW9uUm93OiBcIlN0YW5kYXJkQWN0aW9uOjpDcmVhdGlvblJvd1wiLFxuXHRQYXN0ZTogXCJTdGFuZGFyZEFjdGlvbjo6UGFzdGVcIixcblx0TWFzc0VkaXQ6IFwiU3RhbmRhcmRBY3Rpb246Ok1hc3NFZGl0XCIsXG5cdEluc2lnaHRzOiBcIlN0YW5kYXJkQWN0aW9uOjpJbnNpZ2h0c1wiLFxuXHRNb3ZlVXA6IFwiU3RhbmRhcmRBY3Rpb246Ok1vdmVVcFwiLFxuXHRNb3ZlRG93bjogXCJTdGFuZGFyZEFjdGlvbjo6TW92ZURvd25cIlxufTtcblxuLyoqXG4gKiBHZW5lcmF0ZXMgY29udGV4dCBmb3IgdGhlIHN0YW5kYXJkIGFjdGlvbnMuXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dFxuICogQHBhcmFtIGNyZWF0aW9uTW9kZVxuICogQHBhcmFtIHRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uXG4gKiBAcmV0dXJucyAgVGhlIGNvbnRleHQgZm9yIHRhYmxlIGFjdGlvbnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdlbmVyYXRlU3RhbmRhcmRBY3Rpb25zQ29udGV4dChcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+LFxuXHRjcmVhdGlvbk1vZGU6IENyZWF0aW9uTW9kZSxcblx0dGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb246IFRhYmxlQ29udHJvbENvbmZpZ3VyYXRpb25cbik6IFN0YW5kYXJkQWN0aW9uc0NvbnRleHQge1xuXHRyZXR1cm4ge1xuXHRcdGNvbGxlY3Rpb25QYXRoOiBnZXRUYXJnZXRPYmplY3RQYXRoKGNvbnZlcnRlckNvbnRleHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpKSxcblx0XHRoaWRkZW5Bbm5vdGF0aW9uOiB7XG5cdFx0XHRjcmVhdGU6IGlzQWN0aW9uQW5ub3RhdGVkSGlkZGVuKGNvbnZlcnRlckNvbnRleHQsIFwiQ3JlYXRlSGlkZGVuXCIpLFxuXHRcdFx0ZGVsZXRlOiBpc0FjdGlvbkFubm90YXRlZEhpZGRlbihjb252ZXJ0ZXJDb250ZXh0LCBcIkRlbGV0ZUhpZGRlblwiKSxcblx0XHRcdHVwZGF0ZTogaXNBY3Rpb25Bbm5vdGF0ZWRIaWRkZW4oY29udmVydGVyQ29udGV4dCwgXCJVcGRhdGVIaWRkZW5cIilcblx0XHR9LFxuXHRcdGNyZWF0aW9uTW9kZTogY3JlYXRpb25Nb2RlLFxuXHRcdGlzRHJhZnRPclN0aWNreVN1cHBvcnRlZDogaXNEcmFmdE9yU3RpY2t5U3VwcG9ydGVkKGNvbnZlcnRlckNvbnRleHQpLFxuXHRcdG5ld0FjdGlvbjogZ2V0TmV3QWN0aW9uKGNvbnZlcnRlckNvbnRleHQpLFxuXHRcdHRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uOiB0YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbixcblx0XHRyZXN0cmljdGlvbnM6IGdldFJlc3RyaWN0aW9ucyhjb252ZXJ0ZXJDb250ZXh0KVxuXHR9O1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiBzdGlja3kgb3IgZHJhZnQgaXMgc3VwcG9ydGVkLlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHRcbiAqIEByZXR1cm5zIGB0cnVlYCBpZiBpdCBpcyBzdXBwb3J0ZWRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzRHJhZnRPclN0aWNreVN1cHBvcnRlZChjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4pOiBib29sZWFuIHtcblx0Y29uc3QgZGF0YU1vZGVsT2JqZWN0UGF0aCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpO1xuXHRjb25zdCBiSXNEcmFmdFN1cHBvcnRlZCA9IE1vZGVsSGVscGVyLmlzT2JqZWN0UGF0aERyYWZ0U3VwcG9ydGVkKGRhdGFNb2RlbE9iamVjdFBhdGgpO1xuXHRjb25zdCBiSXNTdGlja3lTZXNzaW9uU3VwcG9ydGVkID0gKGRhdGFNb2RlbE9iamVjdFBhdGguc3RhcnRpbmdFbnRpdHlTZXQgYXMgRW50aXR5U2V0KT8uYW5ub3RhdGlvbnM/LlNlc3Npb24/LlN0aWNreVNlc3Npb25TdXBwb3J0ZWRcblx0XHQ/IHRydWVcblx0XHQ6IGZhbHNlO1xuXG5cdHJldHVybiBiSXNEcmFmdFN1cHBvcnRlZCB8fCBiSXNTdGlja3lTZXNzaW9uU3VwcG9ydGVkO1xufVxuXG4vKipcbiAqIEdldHMgdGhlIGNvbmZpZ3VyZWQgbmV3QWN0aW9uIGludG8gYW5ub3RhdGlvbi5cbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0XG4gKiBAcmV0dXJucyBUaGUgbmV3IGFjdGlvbiBpbmZvXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXROZXdBY3Rpb24oXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0PlxuKTogeyBuYW1lOiBzdHJpbmc7IGF2YWlsYWJsZTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+IH0gfCB1bmRlZmluZWQge1xuXHRjb25zdCBjdXJyZW50RW50aXR5U2V0ID0gY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXQoKTtcblx0Y29uc3QgbmV3QWN0aW9uID0gaXNFbnRpdHlTZXQoY3VycmVudEVudGl0eVNldClcblx0XHQ/IGN1cnJlbnRFbnRpdHlTZXQuYW5ub3RhdGlvbnMuQ29tbW9uPy5EcmFmdFJvb3Q/Lk5ld0FjdGlvbiA/P1xuXHRcdCAgY3VycmVudEVudGl0eVNldC5hbm5vdGF0aW9ucy5TZXNzaW9uPy5TdGlja3lTZXNzaW9uU3VwcG9ydGVkPy5OZXdBY3Rpb25cblx0XHQ6IHVuZGVmaW5lZDtcblx0Y29uc3QgbmV3QWN0aW9uTmFtZTogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24gPSBuZXdBY3Rpb24/LnRvU3RyaW5nKCk7XG5cdGlmIChuZXdBY3Rpb25OYW1lKSB7XG5cdFx0Y29uc3QgYXZhaWxhYmxlUHJvcGVydHkgPSBjb252ZXJ0ZXJDb250ZXh0Py5nZXRFbnRpdHlUeXBlKCkuYWN0aW9uc1tuZXdBY3Rpb25OYW1lXT8uYW5ub3RhdGlvbnM/LkNvcmU/Lk9wZXJhdGlvbkF2YWlsYWJsZTtcblx0XHRyZXR1cm4ge1xuXHRcdFx0bmFtZTogbmV3QWN0aW9uTmFtZSxcblx0XHRcdGF2YWlsYWJsZTogZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uPEJvb2xlYW4+KGF2YWlsYWJsZVByb3BlcnR5LCBbXSwgdHJ1ZSlcblx0XHR9O1xuXHR9XG5cdHJldHVybiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogR2V0cyB0aGUgYmluZGluZyBleHByZXNzaW9uIGZvciB0aGUgYWN0aW9uIHZpc2liaWxpdHkgY29uZmlndXJlZCBpbnRvIGFubm90YXRpb24uXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dFxuICogQHBhcmFtIHNBbm5vdGF0aW9uVGVybVxuICogQHBhcmFtIGJXaXRoTmF2aWdhdGlvblBhdGhcbiAqIEByZXR1cm5zIFRoZSBiaW5kaW5nIGV4cHJlc3Npb24gZm9yIHRoZSBhY3Rpb24gdmlzaWJpbGl0eVxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNBY3Rpb25Bbm5vdGF0ZWRIaWRkZW4oXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pixcblx0c0Fubm90YXRpb25UZXJtOiBcIkNyZWF0ZUhpZGRlblwiIHwgXCJVcGRhdGVIaWRkZW5cIiB8IFwiRGVsZXRlSGlkZGVuXCIsXG5cdGJXaXRoTmF2aWdhdGlvblBhdGggPSB0cnVlXG4pOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4ge1xuXHQvLyBUaGUgYW5ub3RhdGlvbnMgaW4gcXVlc3Rpb24gKENyZWF0ZUhpZGRlbiwgRGVsZXRlSGlkZGVuLCBVcGRhdGVIaWRkZW4pIG1vc3Qgc3BlY2lmaWNhbGx5IGNhbiBiZSBkZWZpbmVkIG9uIEVudGl0eVNldC5cblx0Ly8gSW4gc2V2ZXJhbCBjYXNlcywgZmFsbGJhY2sgdG8gRW50aXR5VHlwZSBuZWVkcyB0byBiZSBjaGVja2VkOlxuXHQvLyAtIEluIGNhc2Ugb2Ygc2luZ2xldG9uIChhbm5vdGF0aW9ucyBkbyBub3QgYXBwbHkpXG5cdC8vIC0gRW50aXR5U2V0IGNhbm5vdCBiZSBkZXRlcm1pbmVkIChjb250YWlubWVudCBvciBubyBuYXZpZ2F0aW9uUHJvcGVydHlCaW5kaW5nKVxuXHQvLyAtIEVudGl0eVNldCBjYW4gYmUgZGV0ZXJtaW5lZCwgYnV0IHRoZSBhbm5vdGF0aW9uIGlzIG5vdCBkZWZpbmVkIHRoZXJlXG5cblx0Y29uc3QgY3VycmVudEVudGl0eVNldCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0KCk7XG5cdGNvbnN0IGFjdGlvbkFubm90YXRpb25WYWx1ZSA9XG5cdFx0KCFpc1NpbmdsZXRvbihjdXJyZW50RW50aXR5U2V0KSAmJiBjdXJyZW50RW50aXR5U2V0Py5hbm5vdGF0aW9ucy5VST8uW3NBbm5vdGF0aW9uVGVybV0pIHx8XG5cdFx0Y29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlKCkuYW5ub3RhdGlvbnMuVUk/LltzQW5ub3RhdGlvblRlcm1dO1xuXG5cdGlmICghYWN0aW9uQW5ub3RhdGlvblZhbHVlKSB7XG5cdFx0cmV0dXJuIGNvbnN0YW50KGZhbHNlKTtcblx0fVxuXG5cdGNvbnN0IGRhdGFNb2RlbE9iamVjdFBhdGggPSBjb252ZXJ0ZXJDb250ZXh0LmdldERhdGFNb2RlbE9iamVjdFBhdGgoKTtcblx0Y29uc3QgdmlzaXRlZE5hdmlnYXRpb25QYXRocyA9IGdldFJlbGF0aXZlUGF0aHMoZGF0YU1vZGVsT2JqZWN0UGF0aCk7XG5cdHJldHVybiBnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24oYWN0aW9uQW5ub3RhdGlvblZhbHVlLCB2aXNpdGVkTmF2aWdhdGlvblBhdGhzLCB1bmRlZmluZWQsIChwYXRoOiBzdHJpbmcpID0+XG5cdFx0c2luZ2xldG9uUGF0aFZpc2l0b3IocGF0aCwgY29udmVydGVyQ29udGV4dC5nZXRDb252ZXJ0ZWRUeXBlcygpLCB2aXNpdGVkTmF2aWdhdGlvblBhdGhzKVxuXHQpO1xufVxuXG4vKipcbiAqIEdldHMgdGhlIGFubm90YXRlZCByZXN0cmljdGlvbnMgZm9yIHRoZSBhY3Rpb25zLlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHRcbiAqIEByZXR1cm5zIFRoZSByZXN0cmljdGlvbiBpbmZvcm1hdGlvblxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0UmVzdHJpY3Rpb25zKGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pik6IFN0YW5kYXJkQWN0aW9uc1Jlc3RyaWN0aW9uc1R5cGUge1xuXHRjb25zdCBkYXRhTW9kZWxPYmplY3RQYXRoID0gY29udmVydGVyQ29udGV4dC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCk7XG5cdGNvbnN0IHJlc3RyaWN0aW9uc0RlZiA9IFtcblx0XHR7XG5cdFx0XHRrZXk6IFwiaXNJbnNlcnRhYmxlXCIsXG5cdFx0XHRmdW5jdGlvbjogaXNQYXRoSW5zZXJ0YWJsZVxuXHRcdH0sXG5cdFx0e1xuXHRcdFx0a2V5OiBcImlzVXBkYXRhYmxlXCIsXG5cdFx0XHRmdW5jdGlvbjogaXNQYXRoVXBkYXRhYmxlXG5cdFx0fSxcblx0XHR7XG5cdFx0XHRrZXk6IFwiaXNEZWxldGFibGVcIixcblx0XHRcdGZ1bmN0aW9uOiBpc1BhdGhEZWxldGFibGVcblx0XHR9XG5cdF07XG5cdGNvbnN0IHJlc3VsdDogUmVjb3JkPHN0cmluZywgRXhwcmVzc2lvblJlc3RyaWN0aW9uc1R5cGU+ID0ge307XG5cdHJlc3RyaWN0aW9uc0RlZi5mb3JFYWNoKGZ1bmN0aW9uIChkZWYpIHtcblx0XHRjb25zdCBkZWZGdW5jdGlvbiA9IGRlZltcImZ1bmN0aW9uXCJdO1xuXHRcdHJlc3VsdFtkZWYua2V5XSA9IHtcblx0XHRcdGV4cHJlc3Npb246IGRlZkZ1bmN0aW9uLmFwcGx5KG51bGwsIFtcblx0XHRcdFx0ZGF0YU1vZGVsT2JqZWN0UGF0aCxcblx0XHRcdFx0e1xuXHRcdFx0XHRcdHBhdGhWaXNpdG9yOiAocGF0aDogc3RyaW5nLCBuYXZpZ2F0aW9uUGF0aHM6IHN0cmluZ1tdKSA9PlxuXHRcdFx0XHRcdFx0c2luZ2xldG9uUGF0aFZpc2l0b3IocGF0aCwgY29udmVydGVyQ29udGV4dC5nZXRDb252ZXJ0ZWRUeXBlcygpLCBuYXZpZ2F0aW9uUGF0aHMpXG5cdFx0XHRcdH1cblx0XHRcdF0pLFxuXHRcdFx0bmF2aWdhdGlvbkV4cHJlc3Npb246IGRlZkZ1bmN0aW9uLmFwcGx5KG51bGwsIFtcblx0XHRcdFx0ZGF0YU1vZGVsT2JqZWN0UGF0aCxcblx0XHRcdFx0e1xuXHRcdFx0XHRcdGlnbm9yZVRhcmdldENvbGxlY3Rpb246IHRydWUsXG5cdFx0XHRcdFx0YXV0aG9yaXplVW5yZXNvbHZhYmxlOiB0cnVlLFxuXHRcdFx0XHRcdHBhdGhWaXNpdG9yOiAocGF0aDogc3RyaW5nLCBuYXZpZ2F0aW9uUGF0aHM6IHN0cmluZ1tdKSA9PlxuXHRcdFx0XHRcdFx0c2luZ2xldG9uUGF0aFZpc2l0b3IocGF0aCwgY29udmVydGVyQ29udGV4dC5nZXRDb252ZXJ0ZWRUeXBlcygpLCBuYXZpZ2F0aW9uUGF0aHMpXG5cdFx0XHRcdH1cblx0XHRcdF0pXG5cdFx0fTtcblx0fSk7XG5cdHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIHRlbXBsYXRpbmcgZm9yIGluc2VydC91cGRhdGUgYWN0aW9ucyBpcyBtYW5kYXRvcnkuXG4gKiBAcGFyYW0gc3RhbmRhcmRBY3Rpb25zQ29udGV4dFxuICogQHBhcmFtIGlzRHJhZnRPclN0aWNreVxuICogQHJldHVybnMgVHJ1ZSBpZiB3ZSBuZWVkIHRvIHRlbXBsYXRlIGluc2VydCBvciB1cGRhdGUgYWN0aW9ucywgZmFsc2Ugb3RoZXJ3aXNlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRJbnNlcnRVcGRhdGVBY3Rpb25zVGVtcGxhdGluZyhzdGFuZGFyZEFjdGlvbnNDb250ZXh0OiBTdGFuZGFyZEFjdGlvbnNDb250ZXh0LCBpc0RyYWZ0T3JTdGlja3k6IGJvb2xlYW4pOiBib29sZWFuIHtcblx0cmV0dXJuIGlzRHJhZnRPclN0aWNreSB8fCBzdGFuZGFyZEFjdGlvbnNDb250ZXh0LmNyZWF0aW9uTW9kZSA9PT0gQ3JlYXRpb25Nb2RlLkV4dGVybmFsO1xufVxuXG4vKipcbiAqIEdldHMgdGhlIGJpbmRpbmcgZXhwcmVzc2lvbnMgZm9yIHRoZSBwcm9wZXJ0aWVzIG9mIHRoZSAnQ3JlYXRlJyBhY3Rpb24uXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dFxuICogQHBhcmFtIHN0YW5kYXJkQWN0aW9uc0NvbnRleHRcbiAqIEByZXR1cm5zIFRoZSBzdGFuZGFyZCBhY3Rpb24gaW5mb1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0U3RhbmRhcmRBY3Rpb25DcmVhdGUoXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pixcblx0c3RhbmRhcmRBY3Rpb25zQ29udGV4dDogU3RhbmRhcmRBY3Rpb25zQ29udGV4dFxuKTogU3RhbmRhcmRBY3Rpb24ge1xuXHRjb25zdCBjcmVhdGVWaXNpYmlsaXR5ID0gZ2V0Q3JlYXRlVmlzaWJpbGl0eShjb252ZXJ0ZXJDb250ZXh0LCBzdGFuZGFyZEFjdGlvbnNDb250ZXh0KTtcblx0cmV0dXJuIHtcblx0XHRpc1RlbXBsYXRlZDogY29tcGlsZUV4cHJlc3Npb24oZ2V0Q3JlYXRlVGVtcGxhdGluZyhzdGFuZGFyZEFjdGlvbnNDb250ZXh0LCBjcmVhdGVWaXNpYmlsaXR5KSksXG5cdFx0dmlzaWJsZTogY29tcGlsZUV4cHJlc3Npb24oY3JlYXRlVmlzaWJpbGl0eSksXG5cdFx0dmlzaWJsZUV4cHJlc3Npb246IGNyZWF0ZVZpc2liaWxpdHksXG5cdFx0ZW5hYmxlZDogY29tcGlsZUV4cHJlc3Npb24oZ2V0Q3JlYXRlRW5hYmxlbWVudChjb252ZXJ0ZXJDb250ZXh0LCBzdGFuZGFyZEFjdGlvbnNDb250ZXh0LCBjcmVhdGVWaXNpYmlsaXR5KSksXG5cdFx0ZW5hYmxlZEZvckNvbnRleHRNZW51OiBjb21waWxlRXhwcmVzc2lvbihnZXRDcmVhdGVFbmFibGVtZW50KGNvbnZlcnRlckNvbnRleHQsIHN0YW5kYXJkQWN0aW9uc0NvbnRleHQsIGNyZWF0ZVZpc2liaWxpdHksIHRydWUpKSxcblx0XHRrZXk6IFN0YW5kYXJkQWN0aW9uS2V5cy5DcmVhdGUsXG5cdFx0dHlwZTogQWN0aW9uVHlwZS5TdGFuZGFyZFxuXHR9O1xufVxuLyoqXG4gKiBHZXRzIHRoZSBiaW5kaW5nIGV4cHJlc3Npb25zIGZvciB0aGUgcHJvcGVydGllcyBvZiB0aGUgJ0N1dCcgYWN0aW9uLlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHRcbiAqIEBwYXJhbSBzdGFuZGFyZEFjdGlvbnNDb250ZXh0XG4gKiBAcmV0dXJucyBUaGUgc3RhbmRhcmQgYWN0aW9uIGluZm9cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFN0YW5kYXJkQWN0aW9uQ3V0KFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4sXG5cdHN0YW5kYXJkQWN0aW9uc0NvbnRleHQ6IFN0YW5kYXJkQWN0aW9uc0NvbnRleHRcbik6IFN0YW5kYXJkQWN0aW9uIHtcblx0Y29uc3QgY3V0VmlzaWJpbGl0eSA9IGdldEN1dFZpc2liaWxpdHkoY29udmVydGVyQ29udGV4dCwgc3RhbmRhcmRBY3Rpb25zQ29udGV4dCk7XG5cdHJldHVybiB7XG5cdFx0aXNUZW1wbGF0ZWQ6IGNvbXBpbGVFeHByZXNzaW9uKGdldERlZmF1bHRUZW1wbGF0aW5nKGN1dFZpc2liaWxpdHkpKSxcblx0XHR2aXNpYmxlOiBjb21waWxlRXhwcmVzc2lvbihjdXRWaXNpYmlsaXR5KSxcblx0XHRlbmFibGVkOiBjb21waWxlRXhwcmVzc2lvbihnZXRDdXRFbmFibGVtZW50KGN1dFZpc2liaWxpdHksIHN0YW5kYXJkQWN0aW9uc0NvbnRleHQsIGZhbHNlKSksXG5cdFx0ZW5hYmxlZEZvckNvbnRleHRNZW51OiBjb21waWxlRXhwcmVzc2lvbihnZXRDdXRFbmFibGVtZW50KGN1dFZpc2liaWxpdHksIHN0YW5kYXJkQWN0aW9uc0NvbnRleHQsIHRydWUpKSxcblx0XHRrZXk6IFN0YW5kYXJkQWN0aW9uS2V5cy5DdXQsXG5cdFx0dHlwZTogQWN0aW9uVHlwZS5TdGFuZGFyZFxuXHR9O1xufVxuXG4vKipcbiAqIEdldHMgdGhlIGJpbmRpbmcgZXhwcmVzc2lvbnMgZm9yIHRoZSBwcm9wZXJ0aWVzIG9mIHRoZSAnQ29weScgYWN0aW9uLlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHRcbiAqIEBwYXJhbSBzdGFuZGFyZEFjdGlvbnNDb250ZXh0XG4gKiBAcmV0dXJucyBUaGUgc3RhbmRhcmQgYWN0aW9uIGluZm9cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFN0YW5kYXJkQWN0aW9uQ29weShcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+LFxuXHRzdGFuZGFyZEFjdGlvbnNDb250ZXh0OiBTdGFuZGFyZEFjdGlvbnNDb250ZXh0XG4pOiBTdGFuZGFyZEFjdGlvbiB7XG5cdGNvbnN0IGNvcHlWaXNpYmlsaXR5ID0gZ2V0Q29weVZpc2liaWxpdHkoY29udmVydGVyQ29udGV4dCwgc3RhbmRhcmRBY3Rpb25zQ29udGV4dCk7XG5cdHJldHVybiB7XG5cdFx0aXNUZW1wbGF0ZWQ6IGNvbXBpbGVFeHByZXNzaW9uKGdldERlZmF1bHRUZW1wbGF0aW5nKGNvcHlWaXNpYmlsaXR5KSksXG5cdFx0dmlzaWJsZTogY29tcGlsZUV4cHJlc3Npb24oY29weVZpc2liaWxpdHkpLFxuXHRcdGVuYWJsZWQ6IGNvbXBpbGVFeHByZXNzaW9uKGdldENvcHlFbmFibGVtZW50KGNvcHlWaXNpYmlsaXR5LCBmYWxzZSkpLFxuXHRcdGVuYWJsZWRGb3JDb250ZXh0TWVudTogY29tcGlsZUV4cHJlc3Npb24oZ2V0Q29weUVuYWJsZW1lbnQoY29weVZpc2liaWxpdHksIHRydWUpKSxcblx0XHRrZXk6IFN0YW5kYXJkQWN0aW9uS2V5cy5Db3B5LFxuXHRcdHR5cGU6IEFjdGlvblR5cGUuU3RhbmRhcmRcblx0fTtcbn1cblxuLyoqXG4gKiBHZXRzIHRoZSBiaW5kaW5nIGV4cHJlc3Npb25zIGZvciB0aGUgcHJvcGVydGllcyBvZiB0aGUgJ01vdmUgdXAnIGFuZCAnTW92ZSBkb3duJyBhY3Rpb25zLlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHRcbiAqIEBwYXJhbSBzdGFuZGFyZEFjdGlvbnNDb250ZXh0XG4gKiBAcGFyYW0gZm9yVXBcbiAqIEByZXR1cm5zIFRoZSBzdGFuZGFyZCBhY3Rpb24gaW5mb1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0U3RhbmRhcmRBY3Rpb25Nb3ZlVXBEb3duKFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4sXG5cdHN0YW5kYXJkQWN0aW9uc0NvbnRleHQ6IFN0YW5kYXJkQWN0aW9uc0NvbnRleHQsXG5cdGZvclVwOiBib29sZWFuXG4pOiBTdGFuZGFyZEFjdGlvbiB7XG5cdGNvbnN0IGNhbkNoYW5nZVNpYmxpbmcgPVxuXHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZSgpLmFubm90YXRpb25zLkhpZXJhcmNoeT8uW1xuXHRcdFx0YFJlY3Vyc2l2ZUhpZXJhcmNoeUFjdGlvbnMjJHtzdGFuZGFyZEFjdGlvbnNDb250ZXh0LnRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uLmhpZXJhcmNoeVF1YWxpZmllciA/PyBcIlwifWBcblx0XHRdPy5DaGFuZ2VOZXh0U2libGluZ0FjdGlvbiAhPT0gdW5kZWZpbmVkO1xuXHRjb25zdCBtb3ZlVmlzaWJpbGl0eSA9IGFuZChnZXRDdXRWaXNpYmlsaXR5KGNvbnZlcnRlckNvbnRleHQsIHN0YW5kYXJkQWN0aW9uc0NvbnRleHQpLCBjYW5DaGFuZ2VTaWJsaW5nKTtcblx0cmV0dXJuIHtcblx0XHRpc1RlbXBsYXRlZDogY29tcGlsZUV4cHJlc3Npb24oZ2V0RGVmYXVsdFRlbXBsYXRpbmcobW92ZVZpc2liaWxpdHkpKSxcblx0XHR2aXNpYmxlOiBjb21waWxlRXhwcmVzc2lvbihtb3ZlVmlzaWJpbGl0eSksXG5cdFx0ZW5hYmxlZDogY29tcGlsZUV4cHJlc3Npb24oZ2V0TW92ZVVwRG93bkVuYWJsZW1lbnQobW92ZVZpc2liaWxpdHksIHN0YW5kYXJkQWN0aW9uc0NvbnRleHQsIGZvclVwKSksXG5cdFx0ZW5hYmxlZEZvckNvbnRleHRNZW51OiBjb21waWxlRXhwcmVzc2lvbihnZXRNb3ZlVXBEb3duRW5hYmxlbWVudChtb3ZlVmlzaWJpbGl0eSwgc3RhbmRhcmRBY3Rpb25zQ29udGV4dCwgZm9yVXAsIHRydWUpKSxcblx0XHRrZXk6IGZvclVwID8gU3RhbmRhcmRBY3Rpb25LZXlzLk1vdmVVcCA6IFN0YW5kYXJkQWN0aW9uS2V5cy5Nb3ZlRG93bixcblx0XHR0eXBlOiBBY3Rpb25UeXBlLlN0YW5kYXJkXG5cdH07XG59XG5cbi8qKlxuICogR2V0cyB0aGUgYmluZGluZyBleHByZXNzaW9ucyBmb3IgdGhlIHByb3BlcnRpZXMgb2YgdGhlICdEZWxldGUnIGFjdGlvbi5cbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0XG4gKiBAcGFyYW0gc3RhbmRhcmRBY3Rpb25zQ29udGV4dFxuICogQHJldHVybnMgVGhlIGJpbmRpbmcgZXhwcmVzc2lvbnMgZm9yIHRoZSBwcm9wZXJ0aWVzIG9mIHRoZSAnRGVsZXRlJyBhY3Rpb24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRTdGFuZGFyZEFjdGlvbkRlbGV0ZShcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+LFxuXHRzdGFuZGFyZEFjdGlvbnNDb250ZXh0OiBTdGFuZGFyZEFjdGlvbnNDb250ZXh0XG4pOiBTdGFuZGFyZEFjdGlvbiB7XG5cdGNvbnN0IGRlbGV0ZVZpc2liaWxpdHkgPSBnZXREZWxldGVWaXNpYmlsaXR5KGNvbnZlcnRlckNvbnRleHQsIHN0YW5kYXJkQWN0aW9uc0NvbnRleHQpO1xuXG5cdHJldHVybiB7XG5cdFx0aXNUZW1wbGF0ZWQ6IGNvbXBpbGVFeHByZXNzaW9uKGdldERlZmF1bHRUZW1wbGF0aW5nKGRlbGV0ZVZpc2liaWxpdHkpKSxcblx0XHR2aXNpYmxlOiBjb21waWxlRXhwcmVzc2lvbihkZWxldGVWaXNpYmlsaXR5KSxcblx0XHRlbmFibGVkOiBjb21waWxlRXhwcmVzc2lvbihnZXREZWxldGVFbmFibGVtZW50KGNvbnZlcnRlckNvbnRleHQsIHN0YW5kYXJkQWN0aW9uc0NvbnRleHQsIGRlbGV0ZVZpc2liaWxpdHksIGZhbHNlKSksXG5cdFx0ZW5hYmxlZEZvckNvbnRleHRNZW51OiBjb21waWxlRXhwcmVzc2lvbihnZXREZWxldGVFbmFibGVtZW50KGNvbnZlcnRlckNvbnRleHQsIHN0YW5kYXJkQWN0aW9uc0NvbnRleHQsIGRlbGV0ZVZpc2liaWxpdHksIHRydWUpKSxcblx0XHRrZXk6IFN0YW5kYXJkQWN0aW9uS2V5cy5EZWxldGUsXG5cdFx0dHlwZTogQWN0aW9uVHlwZS5TdGFuZGFyZFxuXHR9O1xufVxuXG4vKipcbiAqIEdldHMgdGhlIGJpbmRpbmcgZXhwcmVzc2lvbnMgZm9yIHRoZSBwcm9wZXJ0aWVzIG9mIHRoZSAnQ3JlYXRpb25Sb3cnIGFjdGlvbi5cbiAqXG4gKiBOb3RlIHRoYXQgdGhpcyBpcyBub3QgYWN0dWFsbHkgYW4gYWN0aW9uIHRoYXQgaXMgdGVtcGxhdGVkIGFzIGEgYnV0dG9uIGJ1dCBpdHMgcHJvcGVydGllcyBhcmUgdXNlZCB0byBjb25maWd1cmUgYW4gTURDIGZlYXR1cmUuXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dFxuICogQHBhcmFtIHN0YW5kYXJkQWN0aW9uc0NvbnRleHRcbiAqIEByZXR1cm5zIFN0YW5kYXJkQWN0aW9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRDcmVhdGlvblJvdyhcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+LFxuXHRzdGFuZGFyZEFjdGlvbnNDb250ZXh0OiBTdGFuZGFyZEFjdGlvbnNDb250ZXh0XG4pOiBTdGFuZGFyZEFjdGlvbiB7XG5cdGNvbnN0IGNyZWF0aW9uUm93VmlzaWJpbGl0eSA9IGdldENyZWF0ZVZpc2liaWxpdHkoY29udmVydGVyQ29udGV4dCwgc3RhbmRhcmRBY3Rpb25zQ29udGV4dCwgdHJ1ZSk7XG5cblx0cmV0dXJuIHtcblx0XHRpc1RlbXBsYXRlZDogY29tcGlsZUV4cHJlc3Npb24oZ2V0Q3JlYXRlVGVtcGxhdGluZyhzdGFuZGFyZEFjdGlvbnNDb250ZXh0LCBjcmVhdGlvblJvd1Zpc2liaWxpdHksIHRydWUpKSxcblx0XHR2aXNpYmxlOiBjb21waWxlRXhwcmVzc2lvbihjcmVhdGlvblJvd1Zpc2liaWxpdHkpLFxuXHRcdGVuYWJsZWQ6IGNvbXBpbGVFeHByZXNzaW9uKGdldENyZWF0aW9uUm93RW5hYmxlbWVudChjb252ZXJ0ZXJDb250ZXh0LCBzdGFuZGFyZEFjdGlvbnNDb250ZXh0LCBjcmVhdGlvblJvd1Zpc2liaWxpdHkpKSxcblx0XHRrZXk6IFN0YW5kYXJkQWN0aW9uS2V5cy5DcmVhdGlvblJvdyxcblx0XHR0eXBlOiBBY3Rpb25UeXBlLlN0YW5kYXJkXG5cdH07XG59XG5cbi8qKlxuICogR2V0cyB0aGUgYmluZGluZyBleHByZXNzaW9uIGZvciB0aGUgJ3Zpc2libGUnIHByb3BlcnR5IG9mIHRoZSAnQ3V0JyBhY3Rpb24uXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dFxuICogQHBhcmFtIHN0YW5kYXJkQWN0aW9uc0NvbnRleHRcbiAqIEByZXR1cm5zIFRoZSBiaW5kaW5nIGV4cHJlc3Npb24gZm9yIHRoZSAndmlzaWJsZScgcHJvcGVydHkgb2YgdGhlICdDdXQnIGFjdGlvbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEN1dFZpc2liaWxpdHkoXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pixcblx0c3RhbmRhcmRBY3Rpb25zQ29udGV4dDogU3RhbmRhcmRBY3Rpb25zQ29udGV4dFxuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+IHtcblx0Y29uc3QgcGF0aFVwZGF0YWJsZUV4cHJlc3Npb24gPSBzdGFuZGFyZEFjdGlvbnNDb250ZXh0LnJlc3RyaWN0aW9ucz8uaXNVcGRhdGFibGU/LmV4cHJlc3Npb247XG5cdGNvbnN0IHRlbXBsYXRlQmluZGluZ0V4cHJlc3Npb24gPVxuXHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0VGVtcGxhdGVUeXBlKCkgIT09IFRlbXBsYXRlVHlwZS5MaXN0UmVwb3J0XG5cdFx0XHQ/IFVJLklzRWRpdGFibGVcblx0XHRcdDogKGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0KCkgYXMgRW50aXR5U2V0KT8uYW5ub3RhdGlvbnMuQ29tbW9uPy5EcmFmdFJvb3QgIT09IHVuZGVmaW5lZDsgLy8gVG8gYWxsb3cgY3V0L3Bhc3RlIGZvciBhIGRyYWZ0IFRyZWVUYWJsZSBpbiBhIExpc3RSZXBvcnRcblx0cmV0dXJuIGlmRWxzZShcblx0XHRlcXVhbChzdGFuZGFyZEFjdGlvbnNDb250ZXh0LnRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uPy50eXBlLCBcIlRyZWVUYWJsZVwiKSxcblx0XHRhbmQoXG5cdFx0XHRzdGFuZGFyZEFjdGlvbnNDb250ZXh0LnRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uLmlzSGllcmFyY2h5UGFyZW50Tm9kZVVwZGF0YWJsZSEsXG5cdFx0XHRub3QoYW5kKGlzQ29uc3RhbnQocGF0aFVwZGF0YWJsZUV4cHJlc3Npb24pLCBlcXVhbChwYXRoVXBkYXRhYmxlRXhwcmVzc2lvbiwgZmFsc2UpKSksXG5cdFx0XHR0ZW1wbGF0ZUJpbmRpbmdFeHByZXNzaW9uXG5cdFx0KSxcblx0XHRmYWxzZVxuXHQpO1xufVxuXG4vKipcbiAqIEdldHMgdGhlIGJpbmRpbmcgZXhwcmVzc2lvbiBmb3IgdGhlICd2aXNpYmxlJyBwcm9wZXJ0eSBvZiB0aGUgJ0NvcHknIGFjdGlvbi5cbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0XG4gKiBAcGFyYW0gc3RhbmRhcmRBY3Rpb25zQ29udGV4dFxuICogQHJldHVybnMgVGhlIGJpbmRpbmcgZXhwcmVzc2lvbiBmb3IgdGhlICd2aXNpYmxlJyBwcm9wZXJ0eSBvZiB0aGUgJ0NvcHknIGFjdGlvbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldENvcHlWaXNpYmlsaXR5KFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4sXG5cdHN0YW5kYXJkQWN0aW9uc0NvbnRleHQ6IFN0YW5kYXJkQWN0aW9uc0NvbnRleHRcbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiB7XG5cdGNvbnN0IGF2YWlsYWJsZUNvcHlBY3Rpb24gPSBjb252ZXJ0ZXJDb250ZXh0Py5nZXRFbnRpdHlUeXBlKCkuYW5ub3RhdGlvbnMuSGllcmFyY2h5Py5bXG5cdFx0YFJlY3Vyc2l2ZUhpZXJhcmNoeUFjdGlvbnMjJHtzdGFuZGFyZEFjdGlvbnNDb250ZXh0LnRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uLmhpZXJhcmNoeVF1YWxpZmllciA/PyBcIlwifWBcblx0XT8uQ29weUFjdGlvbiBhcyBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cblx0aWYgKCFhdmFpbGFibGVDb3B5QWN0aW9uKSB7XG5cdFx0cmV0dXJuIGNvbnN0YW50KGZhbHNlKTtcblx0fVxuXG5cdGNvbnN0IHRlbXBsYXRlQmluZGluZ0V4cHJlc3Npb24gPVxuXHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0VGVtcGxhdGVUeXBlKCkgIT09IFRlbXBsYXRlVHlwZS5MaXN0UmVwb3J0XG5cdFx0XHQ/IFVJLklzRWRpdGFibGVcblx0XHRcdDogKGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0KCkgYXMgRW50aXR5U2V0KT8uYW5ub3RhdGlvbnMuQ29tbW9uPy5EcmFmdFJvb3QgIT09IHVuZGVmaW5lZDsgLy8gVG8gYWxsb3cgY3V0L3Bhc3RlIGZvciBhIGRyYWZ0IFRyZWVUYWJsZSBpbiBhIExpc3RSZXBvcnRcblx0cmV0dXJuIGlmRWxzZShlcXVhbChzdGFuZGFyZEFjdGlvbnNDb250ZXh0LnRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uPy50eXBlLCBcIlRyZWVUYWJsZVwiKSwgdGVtcGxhdGVCaW5kaW5nRXhwcmVzc2lvbiwgZmFsc2UpO1xufVxuXG4vKipcbiAqIEdldHMgdGhlIGJpbmRpbmcgZXhwcmVzc2lvbnMgZm9yIHRoZSBwcm9wZXJ0aWVzIG9mIHRoZSAnUGFzdGUnIGFjdGlvbi5cbiAqXG4gKiBOb3RlIHRoYXQgdGhpcyBpcyBub3QgYWN0dWFsbHkgYW4gYWN0aW9uIHRoYXQgaXMgZGlzcGxheWVkIGFzIGEgYnV0dG9uIGJ1dCBpdHMgcHJvcGVydGllcyBhcmUgdXNlZCB0byBjb25maWd1cmUgYW4gTURDIGZlYXR1cmUuXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dFxuICogQHBhcmFtIHN0YW5kYXJkQWN0aW9uc0NvbnRleHRcbiAqIEBwYXJhbSBpc0luc2VydFVwZGF0ZUFjdGlvbnNUZW1wbGF0ZWRcbiAqIEByZXR1cm5zIFRoZSBiaW5kaW5nIGV4cHJlc3Npb25zIGZvciB0aGUgcHJvcGVydGllcyBvZiB0aGUgJ1Bhc3RlJyBhY3Rpb24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRTdGFuZGFyZEFjdGlvblBhc3RlKFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4sXG5cdHN0YW5kYXJkQWN0aW9uc0NvbnRleHQ6IFN0YW5kYXJkQWN0aW9uc0NvbnRleHQsXG5cdGlzSW5zZXJ0VXBkYXRlQWN0aW9uc1RlbXBsYXRlZDogYm9vbGVhblxuKTogU3RhbmRhcmRBY3Rpb24ge1xuXHRjb25zdCBjdXRWaXNpYmlsaXR5ID0gZ2V0Q3V0VmlzaWJpbGl0eShjb252ZXJ0ZXJDb250ZXh0LCBzdGFuZGFyZEFjdGlvbnNDb250ZXh0KTtcblx0Y29uc3QgY29weVZpc2liaWxpdHkgPSBnZXRDb3B5VmlzaWJpbGl0eShjb252ZXJ0ZXJDb250ZXh0LCBzdGFuZGFyZEFjdGlvbnNDb250ZXh0KTtcblx0Y29uc3QgY3JlYXRlVmlzaWJpbGl0eSA9IGdldENyZWF0ZVZpc2liaWxpdHkoY29udmVydGVyQ29udGV4dCwgc3RhbmRhcmRBY3Rpb25zQ29udGV4dCwgZmFsc2UsIHRydWUpO1xuXHRjb25zdCBwYXN0ZVZpc2liaWxpdHkgPSBnZXRQYXN0ZVZpc2liaWxpdHkoXG5cdFx0Y29udmVydGVyQ29udGV4dCxcblx0XHRzdGFuZGFyZEFjdGlvbnNDb250ZXh0LFxuXHRcdGNyZWF0ZVZpc2liaWxpdHksXG5cdFx0Y3V0VmlzaWJpbGl0eSxcblx0XHRjb3B5VmlzaWJpbGl0eSxcblx0XHRpc0luc2VydFVwZGF0ZUFjdGlvbnNUZW1wbGF0ZWRcblx0KTtcblx0Y29uc3QgcGFzdGVFbmFibGVtZW50ID0gZ2V0UGFzdGVFbmFibGVtZW50KHBhc3RlVmlzaWJpbGl0eSwgc3RhbmRhcmRBY3Rpb25zQ29udGV4dCwgZmFsc2UpO1xuXHRjb25zdCBwYXN0ZUVuYWJsZW1lbnRGb3JDb250ZXh0TWVudSA9IGdldFBhc3RlRW5hYmxlbWVudChwYXN0ZVZpc2liaWxpdHksIHN0YW5kYXJkQWN0aW9uc0NvbnRleHQsIHRydWUpO1xuXHRyZXR1cm4ge1xuXHRcdHZpc2libGU6IGNvbXBpbGVFeHByZXNzaW9uKHBhc3RlVmlzaWJpbGl0eSksXG5cdFx0ZW5hYmxlZDogY29tcGlsZUV4cHJlc3Npb24ocGFzdGVFbmFibGVtZW50KSxcblx0XHRlbmFibGVkRm9yQ29udGV4dE1lbnU6IGNvbXBpbGVFeHByZXNzaW9uKHBhc3RlRW5hYmxlbWVudEZvckNvbnRleHRNZW51KSxcblx0XHRrZXk6IFN0YW5kYXJkQWN0aW9uS2V5cy5QYXN0ZSxcblx0XHR0eXBlOiBBY3Rpb25UeXBlLlN0YW5kYXJkXG5cdH07XG59XG5cbi8qKlxuICogR2V0cyB0aGUgYmluZGluZyBleHByZXNzaW9ucyBmb3IgdGhlIHByb3BlcnRpZXMgb2YgdGhlICdNYXNzRWRpdCcgYWN0aW9uLlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHRcbiAqIEBwYXJhbSBzdGFuZGFyZEFjdGlvbnNDb250ZXh0XG4gKiBAcmV0dXJucyBUaGUgYmluZGluZyBleHByZXNzaW9ucyBmb3IgdGhlIHByb3BlcnRpZXMgb2YgdGhlICdNYXNzRWRpdCcgYWN0aW9uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0U3RhbmRhcmRBY3Rpb25NYXNzRWRpdChcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+LFxuXHRzdGFuZGFyZEFjdGlvbnNDb250ZXh0OiBTdGFuZGFyZEFjdGlvbnNDb250ZXh0XG4pOiBTdGFuZGFyZEFjdGlvbiB7XG5cdGNvbnN0IG1hc3NFZGl0VmlzaWJpbGl0eSA9IGdldE1hc3NFZGl0VmlzaWJpbGl0eShjb252ZXJ0ZXJDb250ZXh0LCBzdGFuZGFyZEFjdGlvbnNDb250ZXh0KTtcblxuXHRyZXR1cm4ge1xuXHRcdGlzVGVtcGxhdGVkOiBjb21waWxlRXhwcmVzc2lvbihnZXREZWZhdWx0VGVtcGxhdGluZyhtYXNzRWRpdFZpc2liaWxpdHkpKSxcblx0XHR2aXNpYmxlOiBjb21waWxlRXhwcmVzc2lvbihtYXNzRWRpdFZpc2liaWxpdHkpLFxuXHRcdC8vIEZvciB0aGUgY29udGV4dCBtZW51LCB0aGUgdmlzaWJpbGl0eSBzaG91bGQgYWxzbyBjb25zaWRlciB0aGUgJ2luYWN0aXZlQ29udGV4dCcgcHJvcGVydHk6XG5cdFx0Ly8gb25seSB3aGVuIGF0IGxlYXN0IG9uZSBzZWxlY3RlZCBjb250ZXh0IGlzIGFjdGl2ZSAoaS5lLiBcImNvbnRleHRtZW51L2luYWN0aXZlQ29udGV4dFwiIGlzIGZhbHNlKSwgdGhlIGFjdGlvbiBzaG91bGQgYmUgdmlzaWJsZSBpbiB0aGUgY29udGV4dCBtZW51XG5cdFx0Ly8gVGhpcyBpcyBvbmx5IHJlbGV2YW50IHdoZW4gdGhlIHRhYmxlIG1hbmlmZXN0IHNldHRpbmcgXCJjcmVhdGlvbk1vZGVcIiBpcyBcIklubGluZUNyZWF0aW9uUm93c1wiXG5cdFx0dmlzaWJsZUZvckNvbnRleHRNZW51OiBjb21waWxlRXhwcmVzc2lvbihcblx0XHRcdGFuZChtYXNzRWRpdFZpc2liaWxpdHksIGVxdWFsKHBhdGhJbk1vZGVsKFwiY29udGV4dG1lbnUvaW5hY3RpdmVDb250ZXh0XCIsIFwiaW50ZXJuYWxcIiksIGZhbHNlKSlcblx0XHQpLFxuXHRcdGVuYWJsZWQ6IGNvbXBpbGVFeHByZXNzaW9uKGdldE1hc3NFZGl0RW5hYmxlbWVudChjb252ZXJ0ZXJDb250ZXh0LCBzdGFuZGFyZEFjdGlvbnNDb250ZXh0LCBtYXNzRWRpdFZpc2liaWxpdHkpKSxcblx0XHRlbmFibGVkRm9yQ29udGV4dE1lbnU6IGNvbXBpbGVFeHByZXNzaW9uKGdldE1hc3NFZGl0RW5hYmxlbWVudChjb252ZXJ0ZXJDb250ZXh0LCBzdGFuZGFyZEFjdGlvbnNDb250ZXh0LCBtYXNzRWRpdFZpc2liaWxpdHksIHRydWUpKSxcblx0XHRrZXk6IFN0YW5kYXJkQWN0aW9uS2V5cy5NYXNzRWRpdCxcblx0XHR0eXBlOiBBY3Rpb25UeXBlLlN0YW5kYXJkXG5cdH07XG59XG5cbi8qKlxuICogR2V0cyB0aGUgYmluZGluZyBleHByZXNzaW9ucyBmb3IgdGhlIHByb3BlcnRpZXMgb2YgdGhlICdBZGRDYXJkc1RvSW5zaWdodHMnIGFjdGlvbi5cbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0XG4gKiBAcGFyYW0gc3RhbmRhcmRBY3Rpb25zQ29udGV4dFxuICogQHBhcmFtIHZpc3VhbGl6YXRpb25QYXRoXG4gKiBAcmV0dXJucyBUaGUgYmluZGluZyBleHByZXNzaW9ucyBmb3IgdGhlIHByb3BlcnRpZXMgb2YgdGhlICdBZGRDYXJkc1RvSW5zaWdodHMnIGFjdGlvbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFN0YW5kYXJkQWN0aW9uSW5zaWdodHMoXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pixcblx0c3RhbmRhcmRBY3Rpb25zQ29udGV4dDogU3RhbmRhcmRBY3Rpb25zQ29udGV4dCxcblx0dmlzdWFsaXphdGlvblBhdGg6IHN0cmluZ1xuKTogU3RhbmRhcmRBY3Rpb24ge1xuXHRjb25zdCBpbnNpZ2h0c1Zpc2liaWxpdHkgPSBnZXRJbnNpZ2h0c1Zpc2liaWxpdHkoXCJUYWJsZVwiLCBjb252ZXJ0ZXJDb250ZXh0LCB2aXN1YWxpemF0aW9uUGF0aCwgc3RhbmRhcmRBY3Rpb25zQ29udGV4dCk7XG5cdGNvbnN0IGluc2lnaHRzRW5hYmxlbWVudCA9IGFuZChpbnNpZ2h0c1Zpc2liaWxpdHksIGdldEluc2lnaHRzRW5hYmxlbWVudCgpKTtcblx0cmV0dXJuIHtcblx0XHRpc1RlbXBsYXRlZDogY29tcGlsZUV4cHJlc3Npb24oZ2V0RGVmYXVsdFRlbXBsYXRpbmcoaW5zaWdodHNWaXNpYmlsaXR5KSksXG5cdFx0dmlzaWJsZTogY29tcGlsZUV4cHJlc3Npb24oaW5zaWdodHNWaXNpYmlsaXR5KSxcblx0XHRlbmFibGVkOiBjb21waWxlRXhwcmVzc2lvbihpbnNpZ2h0c0VuYWJsZW1lbnQpLFxuXHRcdGtleTogU3RhbmRhcmRBY3Rpb25LZXlzLkluc2lnaHRzLFxuXHRcdHR5cGU6IEFjdGlvblR5cGUuU3RhbmRhcmRcblx0fTtcbn1cblxuLyoqXG4gKiBHZXRzIHRoZSBiaW5kaW5nIGV4cHJlc3Npb24gZm9yIHRoZSB0ZW1wbGF0aW5nIG9mIHRoZSAnQ3JlYXRlJyBhY3Rpb24uXG4gKiBAcGFyYW0gc3RhbmRhcmRBY3Rpb25zQ29udGV4dFxuICogQHBhcmFtIGNyZWF0ZVZpc2liaWxpdHlcbiAqIEBwYXJhbSBpc0ZvckNyZWF0aW9uUm93XG4gKiBAcmV0dXJucyBUaGUgY3JlYXRlIGJpbmRpbmcgZXhwcmVzc2lvblxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q3JlYXRlVGVtcGxhdGluZyhcblx0c3RhbmRhcmRBY3Rpb25zQ29udGV4dDogU3RhbmRhcmRBY3Rpb25zQ29udGV4dCxcblx0Y3JlYXRlVmlzaWJpbGl0eTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+LFxuXHRpc0ZvckNyZWF0aW9uUm93ID0gZmFsc2Vcbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiB7XG5cdC8vVGVtcGxhdGluZyBvZiBDcmVhdGUgQnV0dG9uIGlzIG5vdCBkb25lOlxuXHQvLyBcdCAtIElmIEJ1dHRvbiBpcyBuZXZlciB2aXNpYmxlKGNvdmVyZWQgdGhlIEV4dGVybmFsIGNyZWF0ZSBidXR0b24sIG5ldyBBY3Rpb24pXG5cdC8vXHQgLSBvciBDcmVhdGlvbk1vZGUgaXMgb24gQ3JlYXRpb25Sb3cgZm9yIENyZWF0ZSBCdXR0b25cblx0Ly9cdCAtIG9yIENyZWF0aW9uTW9kZSBpcyBub3Qgb24gQ3JlYXRpb25Sb3cgZm9yIENyZWF0aW9uUm93IEJ1dHRvblxuXG5cdHJldHVybiBhbmQoXG5cdFx0Ly9YTk9SIGdhdGVcblx0XHRvcihcblx0XHRcdGFuZChpc0ZvckNyZWF0aW9uUm93LCBzdGFuZGFyZEFjdGlvbnNDb250ZXh0LmNyZWF0aW9uTW9kZSA9PT0gQ3JlYXRpb25Nb2RlLkNyZWF0aW9uUm93KSxcblx0XHRcdGFuZCghaXNGb3JDcmVhdGlvblJvdywgc3RhbmRhcmRBY3Rpb25zQ29udGV4dC5jcmVhdGlvbk1vZGUgIT09IENyZWF0aW9uTW9kZS5DcmVhdGlvblJvdylcblx0XHQpLFxuXHRcdG9yKG5vdChpc0NvbnN0YW50KGNyZWF0ZVZpc2liaWxpdHkpKSwgY3JlYXRlVmlzaWJpbGl0eSlcblx0KTtcbn1cblxuLyoqXG4gKiBHZXRzIHRoZSBiaW5kaW5nIGV4cHJlc3Npb24gZm9yIHRoZSB0ZW1wbGF0aW5nIG9mIHRoZSBub24tQ3JlYXRlIGFjdGlvbnMuXG4gKiBAcGFyYW0gYWN0aW9uVmlzaWJpbGl0eVxuICogQHJldHVybnMgVGhlIGJpbmRpbmcgZXhwcmVzc2lvbiBmb3IgdGhlIHRlbXBsYXRpbmcgb2YgdGhlIG5vbi1DcmVhdGUgYWN0aW9ucy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldERlZmF1bHRUZW1wbGF0aW5nKGFjdGlvblZpc2liaWxpdHk6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiB7XG5cdHJldHVybiBvcihub3QoaXNDb25zdGFudChhY3Rpb25WaXNpYmlsaXR5KSksIGFjdGlvblZpc2liaWxpdHkpO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiBDcmVhdGUvRGVsZXRlIGJ1dHRvbnMgc2hhbGwgYmUgaGlkZGVuIGluIGFuIGFuYWx5dGljYWwuXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dFxuICogQHBhcmFtIHN0YW5kYXJkQWN0aW9uc0NvbnRleHRcbiAqIEByZXR1cm5zIFRydWUgaWYgYnV0dG9ucyBzaGFsbCBiZSBoaWRkZW4sIGZhbHNlIG90aGVyd2lzZS5cbiAqL1xuZnVuY3Rpb24gaGlkZUNyZWF0ZURlbGV0ZUluQW5hbHl0aWNhbFRhYmxlKFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4sXG5cdHN0YW5kYXJkQWN0aW9uc0NvbnRleHQ6IFN0YW5kYXJkQWN0aW9uc0NvbnRleHRcbik6IGJvb2xlYW4ge1xuXHQvLyBXZSBzaG93IENyZWF0ZS9EZWxldGUgYnV0dG9ucyBpbiBBbmFseXRpY2FsIHRhYmxlcyBvbmx5IGluIGEgTGlzdFJlcG9ydC5cblx0cmV0dXJuIChcblx0XHRjb252ZXJ0ZXJDb250ZXh0LmdldFRlbXBsYXRlVHlwZSgpICE9PSBUZW1wbGF0ZVR5cGUuTGlzdFJlcG9ydCAmJlxuXHRcdHN0YW5kYXJkQWN0aW9uc0NvbnRleHQudGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24/LnR5cGUgPT09IFwiQW5hbHl0aWNhbFRhYmxlXCJcblx0KTtcbn1cblxuLyoqXG4gKiBHZXRzIHRoZSBiaW5kaW5nIGV4cHJlc3Npb24gZm9yIHRoZSAndmlzaWJsZScgcHJvcGVydHkgb2YgdGhlICdDcmVhdGUnIGFjdGlvbi5cbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0XG4gKiBAcGFyYW0gc3RhbmRhcmRBY3Rpb25zQ29udGV4dFxuICogQHBhcmFtIGlzRm9yQ3JlYXRpb25Sb3dcbiAqIEBwYXJhbSBpc0ZvclBhc3RlXG4gKiBAcmV0dXJucyBUaGUgYmluZGluZyBleHByZXNzaW9uIGZvciB0aGUgJ3Zpc2libGUnIHByb3BlcnR5IG9mIHRoZSAnQ3JlYXRlJyBhY3Rpb24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRDcmVhdGVWaXNpYmlsaXR5KFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4sXG5cdHN0YW5kYXJkQWN0aW9uc0NvbnRleHQ6IFN0YW5kYXJkQWN0aW9uc0NvbnRleHQsXG5cdGlzRm9yQ3JlYXRpb25Sb3cgPSBmYWxzZSxcblx0aXNGb3JQYXN0ZSA9IGZhbHNlXG4pOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4ge1xuXHRjb25zdCBpc0luc2VydGFibGUgPSBzdGFuZGFyZEFjdGlvbnNDb250ZXh0LnJlc3RyaWN0aW9ucy5pc0luc2VydGFibGUuZXhwcmVzc2lvbjtcblx0Y29uc3QgaXNDcmVhdGVIaWRkZW4gPVxuXHRcdGhpZGVDcmVhdGVEZWxldGVJbkFuYWx5dGljYWxUYWJsZShjb252ZXJ0ZXJDb250ZXh0LCBzdGFuZGFyZEFjdGlvbnNDb250ZXh0KSB8fFxuXHRcdChpc0ZvckNyZWF0aW9uUm93XG5cdFx0XHQ/IGlzQWN0aW9uQW5ub3RhdGVkSGlkZGVuKGNvbnZlcnRlckNvbnRleHQsIFwiQ3JlYXRlSGlkZGVuXCIsIGZhbHNlKVxuXHRcdFx0OiBzdGFuZGFyZEFjdGlvbnNDb250ZXh0LmhpZGRlbkFubm90YXRpb24uY3JlYXRlKTtcblx0Y29uc3QgbmV3QWN0aW9uID0gc3RhbmRhcmRBY3Rpb25zQ29udGV4dC5uZXdBY3Rpb247XG5cdC8vIENyZWF0ZSBCdXR0b24gaXMgdmlzaWJsZTpcblx0Ly8gXHQgLSBGb3IgYW5hbHl0aWNhbCB0YWJsZXM6IG9ubHkgaW4gYSBMaXN0UmVwb3J0XG5cdC8vIFx0IC0gSWYgdGhlIGNyZWF0aW9uIG1vZGUgaXMgZXh0ZXJuYWxcblx0Ly8gICAgICAtIElmIHdlJ3JlIG9uIHRoZSBsaXN0IHJlcG9ydCBhbmQgY3JlYXRlIGlzIG5vdCBoaWRkZW5cblx0Ly9cdFx0LSBPdGhlcndpc2UgdGhpcyBkZXBlbmRzIG9uIHRoZSB2YWx1ZSBvZiB0aGUgVUkuSXNFZGl0YWJsZVxuXHQvL1x0IC0gT3RoZXJ3aXNlXG5cdC8vXHRcdC0gSWYgYW55IG9mIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBpcyB2YWxpZCB0aGVuIGNyZWF0ZSBidXR0b24gaXNuJ3QgdmlzaWJsZVxuXHQvL1x0XHRcdC0gbm8gbmV3QWN0aW9uIGF2YWlsYWJsZVxuXHQvL1x0XHRcdC0gSXQncyBub3QgaW5zZXJ0YWJsZSBhbmQgdGhlcmUgaXMgbm90IGEgbmV3IGFjdGlvblxuXHQvL1x0XHRcdC0gY3JlYXRlIGlzIGhpZGRlblxuXHQvL1x0XHRcdC0gVGhlcmUgYXJlIG11bHRpcGxlIHZpc3VhbGl6YXRpb25zXG5cdC8vXHRcdFx0LSBJdCdzIGFuIEFuYWx5dGljYWwgTGlzdCBQYWdlXG5cdC8vXHRcdFx0LSBVc2VzIElubGluZUNyZWF0aW9uUm93cyBtb2RlIGFuZCBhIFJlc3BvbnNpdmUgdGFibGUgdHlwZSwgd2l0aCB0aGUgcGFyYW1ldGVyIGlubGluZUNyZWF0aW9uUm93c0hpZGRlbkluRWRpdE1vZGUgdG8gdHJ1ZSB3aGlsZSBub3QgaW4gY3JlYXRlIG1vZGVcblx0Ly8gICAgICAgICAgXHQtIHdoZW4gY2FsY3VsYXRpbmcgcGFzdGUgYnV0dG9uIHZpc2liaWxpdHksICB3ZSBmb3JjZSB0aGUgY29uZGl0aW9uIHRvIGZhbHNlIHdpdGggdGhlIGlzRm9yUGFzdGUgcHJvcGVydHlcblx0Ly8gICAtIE90aGVyd2lzZVxuXHQvLyBcdCBcdC0gSWYgd2UncmUgb24gdGhlIGxpc3QgcmVwb3J0IC0+XG5cdC8vIFx0IFx0XHQtIElmIFVJLkNyZWF0ZUhpZGRlbiBwb2ludHMgdG8gYSBwcm9wZXJ0eSBwYXRoIC0+IHByb3ZpZGUgYSBuZWdhdGVkIGJpbmRpbmcgdG8gdGhpcyBwYXRoXG5cdC8vIFx0IFx0XHQtIE90aGVyd2lzZSwgY3JlYXRlIGlzIHZpc2libGVcblx0Ly8gXHQgXHQtIE90aGVyd2lzZVxuXHQvLyBcdCAgXHQgLSBUaGlzIGRlcGVuZHMgb24gdGhlIHZhbHVlIG9mIHRoZSBVSS5Jc0VkaXRhYmxlXG5cdHJldHVybiBpZkVsc2UoXG5cdFx0c3RhbmRhcmRBY3Rpb25zQ29udGV4dC5jcmVhdGlvbk1vZGUgPT09IENyZWF0aW9uTW9kZS5FeHRlcm5hbCxcblx0XHRhbmQobm90KGlzQ3JlYXRlSGlkZGVuKSwgb3IoY29udmVydGVyQ29udGV4dC5nZXRUZW1wbGF0ZVR5cGUoKSA9PT0gVGVtcGxhdGVUeXBlLkxpc3RSZXBvcnQsIFVJLklzRWRpdGFibGUpKSxcblx0XHRpZkVsc2UoXG5cdFx0XHRvcihcblx0XHRcdFx0YW5kKGlzQ29uc3RhbnQobmV3QWN0aW9uPy5hdmFpbGFibGUpLCBlcXVhbChuZXdBY3Rpb24/LmF2YWlsYWJsZSwgZmFsc2UpKSxcblx0XHRcdFx0YW5kKGlzQ29uc3RhbnQoaXNJbnNlcnRhYmxlKSwgZXF1YWwoaXNJbnNlcnRhYmxlLCBmYWxzZSksICFuZXdBY3Rpb24pLFxuXHRcdFx0XHRhbmQoaXNDb25zdGFudChpc0NyZWF0ZUhpZGRlbiksIGVxdWFsKGlzQ3JlYXRlSGlkZGVuLCB0cnVlKSksXG5cdFx0XHRcdGFuZChcblx0XHRcdFx0XHRzdGFuZGFyZEFjdGlvbnNDb250ZXh0LmNyZWF0aW9uTW9kZSA9PT0gQ3JlYXRpb25Nb2RlLklubGluZUNyZWF0aW9uUm93cyxcblx0XHRcdFx0XHRzdGFuZGFyZEFjdGlvbnNDb250ZXh0LnRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uPy50eXBlID09PSBcIlJlc3BvbnNpdmVUYWJsZVwiLFxuXHRcdFx0XHRcdGlmRWxzZShcblx0XHRcdFx0XHRcdGFuZChcblx0XHRcdFx0XHRcdFx0c3RhbmRhcmRBY3Rpb25zQ29udGV4dD8udGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24/LmlubGluZUNyZWF0aW9uUm93c0hpZGRlbkluRWRpdE1vZGUgPT09IGZhbHNlLFxuXHRcdFx0XHRcdFx0XHRub3QoaXNGb3JQYXN0ZSlcblx0XHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0XHR0cnVlLFxuXHRcdFx0XHRcdFx0VUkuSXNDcmVhdGVNb2RlXG5cdFx0XHRcdFx0KVxuXHRcdFx0XHQpXG5cdFx0XHQpLFxuXHRcdFx0ZmFsc2UsXG5cdFx0XHRpZkVsc2UoXG5cdFx0XHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0VGVtcGxhdGVUeXBlKCkgPT09IFRlbXBsYXRlVHlwZS5MaXN0UmVwb3J0LFxuXHRcdFx0XHRvcihub3QoaXNQYXRoSW5Nb2RlbEV4cHJlc3Npb24oaXNDcmVhdGVIaWRkZW4pKSwgbm90KGlzQ3JlYXRlSGlkZGVuKSksXG5cdFx0XHRcdGFuZChub3QoaXNDcmVhdGVIaWRkZW4pLCBVSS5Jc0VkaXRhYmxlKVxuXHRcdFx0KVxuXHRcdClcblx0KTtcbn1cblxuLyoqXG4gKiBHZXRzIHRoZSBiaW5kaW5nIGV4cHJlc3Npb24gZm9yIHRoZSAndmlzaWJsZScgcHJvcGVydHkgb2YgdGhlICdEZWxldGUnIGFjdGlvbi5cbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0XG4gKiBAcGFyYW0gc3RhbmRhcmRBY3Rpb25zQ29udGV4dFxuICogQHJldHVybnMgVGhlIGJpbmRpbmcgZXhwcmVzc2lvbiBmb3IgdGhlICd2aXNpYmxlJyBwcm9wZXJ0eSBvZiB0aGUgJ0RlbGV0ZScgYWN0aW9uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGVsZXRlVmlzaWJpbGl0eShcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+LFxuXHRzdGFuZGFyZEFjdGlvbnNDb250ZXh0OiBTdGFuZGFyZEFjdGlvbnNDb250ZXh0XG4pOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4ge1xuXHRsZXQgaXNEZWxldGVIaWRkZW4gPSBzdGFuZGFyZEFjdGlvbnNDb250ZXh0LmhpZGRlbkFubm90YXRpb24uZGVsZXRlO1xuXHRsZXQgcGF0aERlbGV0YWJsZUV4cHJlc3Npb24gPSBzdGFuZGFyZEFjdGlvbnNDb250ZXh0LnJlc3RyaWN0aW9ucy5pc0RlbGV0YWJsZS5leHByZXNzaW9uO1xuXHQvL3dlIGNoZWNrIGlmIHRoZXJlIGlzIG5vIHJlbGF0aXZlIHBhdGggZGVwZW5kZW50IG9uIHRoZSBjb250ZXh0XG5cdGlmICghaXNFeHByZXNzaW9uU3RhdGljYWxseVJlc29sdmFibGUoaXNEZWxldGVIaWRkZW4pKSB7XG5cdFx0aXNEZWxldGVIaWRkZW4gPSBjb25zdGFudChmYWxzZSk7XG5cdH1cblx0aWYgKCFpc0V4cHJlc3Npb25TdGF0aWNhbGx5UmVzb2x2YWJsZShwYXRoRGVsZXRhYmxlRXhwcmVzc2lvbikpIHtcblx0XHRwYXRoRGVsZXRhYmxlRXhwcmVzc2lvbiA9IGNvbnN0YW50KHRydWUpO1xuXHR9XG5cdHJldHVybiBpZkVsc2UoXG5cdFx0Y29udmVydGVyQ29udGV4dC5nZXRUZW1wbGF0ZVR5cGUoKSA9PT0gVGVtcGxhdGVUeXBlLkFuYWx5dGljYWxMaXN0UGFnZSB8fFxuXHRcdFx0aGlkZUNyZWF0ZURlbGV0ZUluQW5hbHl0aWNhbFRhYmxlKGNvbnZlcnRlckNvbnRleHQsIHN0YW5kYXJkQWN0aW9uc0NvbnRleHQpLFxuXHRcdGZhbHNlLFxuXHRcdGlmRWxzZShcblx0XHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0VGVtcGxhdGVUeXBlKCkgIT09IFRlbXBsYXRlVHlwZS5MaXN0UmVwb3J0LFxuXHRcdFx0YW5kKG5vdChpc0RlbGV0ZUhpZGRlbiksIHBhdGhEZWxldGFibGVFeHByZXNzaW9uLCBVSS5Jc0VkaXRhYmxlKSxcblx0XHRcdGFuZChub3QoaXNEZWxldGVIaWRkZW4pLCBwYXRoRGVsZXRhYmxlRXhwcmVzc2lvbilcblx0XHQpXG5cdCk7XG59XG5cbi8qKlxuICogR2V0cyB0aGUgYmluZGluZyBleHByZXNzaW9uIGZvciB0aGUgJ3Zpc2libGUnIHByb3BlcnR5IG9mIHRoZSAnUGFzdGUnIGFjdGlvbi5cbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0XG4gKiBAcGFyYW0gc3RhbmRhcmRBY3Rpb25zQ29udGV4dFxuICogQHBhcmFtIGNyZWF0ZVZpc2liaWxpdHlcbiAqIEBwYXJhbSBjdXRWaXNpYmlsaXR5XG4gKiBAcGFyYW0gY29weVZpc2liaWxpdHlcbiAqIEBwYXJhbSBpc0luc2VydFVwZGF0ZUFjdGlvbnNUZW1wbGF0ZWRcbiAqIEByZXR1cm5zIFRoZSBiaW5kaW5nIGV4cHJlc3Npb24gZm9yIHRoZSAndmlzaWJsZScgcHJvcGVydHkgb2YgdGhlICdQYXN0ZScgYWN0aW9uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0UGFzdGVWaXNpYmlsaXR5KFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4sXG5cdHN0YW5kYXJkQWN0aW9uc0NvbnRleHQ6IFN0YW5kYXJkQWN0aW9uc0NvbnRleHQsXG5cdGNyZWF0ZVZpc2liaWxpdHk6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPixcblx0Y3V0VmlzaWJpbGl0eTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+LFxuXHRjb3B5VmlzaWJpbGl0eTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+LFxuXHRpc0luc2VydFVwZGF0ZUFjdGlvbnNUZW1wbGF0ZWQ6IGJvb2xlYW5cbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiB7XG5cdC8vSWYgaXQgaXNuJ3QgZGVhY3RpdmF0ZWQgd2l0aGluIHRoZSBtYW5pZmVzdCBhbmQgd2UncmUgb3BlcmF0aW5nIGluIE9QL2Jsb2NrcyBvdXRzaWRlIEZpb3JpIGVsZW1lbnRzIHRlbXBsYXRlcyxcblx0Ly90aGUgdHJlZVRhYmxlJ3MgdmlzaWJpbGl0eSByZWxpZXMgb24gdGhlIGN1dHZpc2liaWxpdHksXG5cdC8vd2hpbGUgdGhlIHZpc2liaWxpdHkgb2YgdGhlIG90aGVyIHRhYmxlIGlzIGRldGVybWluZWQgYnkgaW5zZXJ0YWJsZSByZXN0cmljdGlvbnMgYW5kIGNyZWF0ZSB2aXNpYmlsaXR5LlxuXHRsZXQgdXBkYXRlT25OYXZpZ2F0aW9uID0gc3RhbmRhcmRBY3Rpb25zQ29udGV4dC5yZXN0cmljdGlvbnM/LmlzVXBkYXRhYmxlPy5uYXZpZ2F0aW9uRXhwcmVzc2lvbjtcblx0aWYgKHVwZGF0ZU9uTmF2aWdhdGlvbj8uX3R5cGUgPT09IFwiVW5yZXNvbHZhYmxlXCIpIHtcblx0XHR1cGRhdGVPbk5hdmlnYXRpb24gPSBjb25zdGFudCh0cnVlKTtcblx0fVxuXHRyZXR1cm4gYW5kKFxuXHRcdHN0YW5kYXJkQWN0aW9uc0NvbnRleHQudGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24udHlwZSA9PT0gXCJUcmVlVGFibGVcIlxuXHRcdFx0PyBvcihjdXRWaXNpYmlsaXR5LCBjb3B5VmlzaWJpbGl0eSlcblx0XHRcdDogYW5kKFxuXHRcdFx0XHRcdG9yKFxuXHRcdFx0XHRcdFx0YW5kKGNyZWF0ZVZpc2liaWxpdHksIHN0YW5kYXJkQWN0aW9uc0NvbnRleHQucmVzdHJpY3Rpb25zLmlzSW5zZXJ0YWJsZS5leHByZXNzaW9uKSxcblx0XHRcdFx0XHRcdGFuZChVSS5Jc0VkaXRhYmxlLCB1cGRhdGVPbk5hdmlnYXRpb24pXG5cdFx0XHRcdFx0KSxcblx0XHRcdFx0XHRub3RFcXVhbChzdGFuZGFyZEFjdGlvbnNDb250ZXh0LnRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uLmVuYWJsZVBhc3RlLCBmYWxzZSksXG5cdFx0XHRcdFx0IVtUZW1wbGF0ZVR5cGUuTGlzdFJlcG9ydCwgVGVtcGxhdGVUeXBlLkFuYWx5dGljYWxMaXN0UGFnZV0uaW5jbHVkZXMoY29udmVydGVyQ29udGV4dC5nZXRUZW1wbGF0ZVR5cGUoKSlcblx0XHRcdCAgKSxcblx0XHRpc0luc2VydFVwZGF0ZUFjdGlvbnNUZW1wbGF0ZWRcblx0KTtcbn1cblxuLyoqXG4gKiBHZXRzIHRoZSBiaW5kaW5nIGV4cHJlc3Npb24gZm9yIHRoZSAndmlzaWJsZScgcHJvcGVydHkgb2YgdGhlICdNYXNzRWRpdCcgYWN0aW9uLlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHRcbiAqIEBwYXJhbSBzdGFuZGFyZEFjdGlvbnNDb250ZXh0XG4gKiBAcmV0dXJucyBUaGUgYmluZGluZyBleHByZXNzaW9uIGZvciB0aGUgJ3Zpc2libGUnIHByb3BlcnR5IG9mIHRoZSAnTWFzc0VkaXQnIGFjdGlvbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldE1hc3NFZGl0VmlzaWJpbGl0eShcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+LFxuXHRzdGFuZGFyZEFjdGlvbnNDb250ZXh0OiBTdGFuZGFyZEFjdGlvbnNDb250ZXh0XG4pOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4ge1xuXHRjb25zdCBpc1VwZGF0ZUhpZGRlbiA9IHN0YW5kYXJkQWN0aW9uc0NvbnRleHQuaGlkZGVuQW5ub3RhdGlvbi51cGRhdGUsXG5cdFx0cGF0aFVwZGF0YWJsZUV4cHJlc3Npb24gPSBzdGFuZGFyZEFjdGlvbnNDb250ZXh0LnJlc3RyaWN0aW9ucy5pc1VwZGF0YWJsZS5leHByZXNzaW9uLFxuXHRcdG1hc3NFZGl0RW5hYmxlZEluTWFuaWZlc3Q6IGJvb2xlYW4gPSBzdGFuZGFyZEFjdGlvbnNDb250ZXh0LnRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uPy5tYXNzRWRpdC5lbmFibGVkIHx8IGZhbHNlO1xuXHRjb25zdCB0ZW1wbGF0ZUJpbmRpbmdFeHByZXNzaW9uID1cblx0XHRjb252ZXJ0ZXJDb250ZXh0LmdldFRlbXBsYXRlVHlwZSgpID09PSBUZW1wbGF0ZVR5cGUuT2JqZWN0UGFnZVxuXHRcdFx0PyBVSS5Jc0VkaXRhYmxlXG5cdFx0XHQ6IFtUZW1wbGF0ZVR5cGUuTGlzdFJlcG9ydCwgVGVtcGxhdGVUeXBlLkZyZWVTdHlsZVBhZ2VdLmluY2x1ZGVzKGNvbnZlcnRlckNvbnRleHQuZ2V0VGVtcGxhdGVUeXBlKCkpO1xuXHQvL01hc3NFZGl0IGlzIHZpc2libGVcblx0Ly8gSWZcblx0Ly9cdFx0LSB0aGVyZSBpcyBubyBzdGF0aWMgcmVzdHJpY3Rpb25zIHNldCB0byBmYWxzZVxuXHQvL1x0XHQtIGFuZCBlbmFibGVNYXNzRWRpdCBpcyBub3Qgc2V0IHRvIGZhbHNlIGludG8gdGhlIG1hbmlmZXN0XG5cdC8vXHRcdC0gYW5kIHRoZSBzZWxlY3Rpb25Nb2RlIGlzIHJlbGV2YW50XG5cdC8vXHRUaGVuIE1hc3NFZGl0IGlzIGFsd2F5cyB2aXNpYmxlIGluIExSIG9yIGR5bmFtaWNhbGx5IHZpc2libGUgaW4gT1AgYWNjb3JkaW5nIHRvIHVpPkVkaXRhYmxlIGFuZCBoaWRkZW5Bbm5vdGF0aW9uXG5cdC8vICBCdXR0b24gaXMgaGlkZGVuIGZvciBhbGwgb3RoZXIgY2FzZXNcblx0cmV0dXJuIGFuZChcblx0XHRub3QoYW5kKGlzQ29uc3RhbnQocGF0aFVwZGF0YWJsZUV4cHJlc3Npb24pLCBlcXVhbChwYXRoVXBkYXRhYmxlRXhwcmVzc2lvbiwgZmFsc2UpKSksXG5cdFx0bWFzc0VkaXRFbmFibGVkSW5NYW5pZmVzdCxcblx0XHR0ZW1wbGF0ZUJpbmRpbmdFeHByZXNzaW9uLFxuXHRcdG5vdChpc1VwZGF0ZUhpZGRlbilcblx0KTtcbn1cblxuLyoqXG4gKiBHZXRzIHRoZSBiaW5kaW5nIGV4cHJlc3Npb24gZm9yIHRoZSAnZW5hYmxlZCcgcHJvcGVydHkgb2YgdGhlIGNyZWF0aW9uUm93LlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHRcbiAqIEBwYXJhbSBzdGFuZGFyZEFjdGlvbnNDb250ZXh0XG4gKiBAcGFyYW0gY3JlYXRpb25Sb3dWaXNpYmlsaXR5XG4gKiBAcmV0dXJucyBUaGUgYmluZGluZyBleHByZXNzaW9uIGZvciB0aGUgJ2VuYWJsZWQnIHByb3BlcnR5IG9mIHRoZSBjcmVhdGlvblJvdy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldENyZWF0aW9uUm93RW5hYmxlbWVudChcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+LFxuXHRzdGFuZGFyZEFjdGlvbnNDb250ZXh0OiBTdGFuZGFyZEFjdGlvbnNDb250ZXh0LFxuXHRjcmVhdGlvblJvd1Zpc2liaWxpdHk6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPlxuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+IHtcblx0Y29uc3QgcmVzdHJpY3Rpb25zSW5zZXJ0YWJsZSA9IGlzUGF0aEluc2VydGFibGUoY29udmVydGVyQ29udGV4dC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCksIHtcblx0XHRpZ25vcmVUYXJnZXRDb2xsZWN0aW9uOiB0cnVlLFxuXHRcdGF1dGhvcml6ZVVucmVzb2x2YWJsZTogdHJ1ZSxcblx0XHRwYXRoVmlzaXRvcjogKHBhdGg6IHN0cmluZywgbmF2aWdhdGlvblBhdGhzOiBzdHJpbmdbXSkgPT4ge1xuXHRcdFx0aWYgKHBhdGguaW5kZXhPZihcIi9cIikgPT09IDApIHtcblx0XHRcdFx0cGF0aCA9IHNpbmdsZXRvblBhdGhWaXNpdG9yKHBhdGgsIGNvbnZlcnRlckNvbnRleHQuZ2V0Q29udmVydGVkVHlwZXMoKSwgbmF2aWdhdGlvblBhdGhzKTtcblx0XHRcdFx0cmV0dXJuIHBhdGg7XG5cdFx0XHR9XG5cdFx0XHRjb25zdCBuYXZpZ2F0aW9uUHJvcGVydGllcyA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpLm5hdmlnYXRpb25Qcm9wZXJ0aWVzO1xuXHRcdFx0aWYgKG5hdmlnYXRpb25Qcm9wZXJ0aWVzKSB7XG5cdFx0XHRcdGNvbnN0IGxhc3ROYXYgPSBuYXZpZ2F0aW9uUHJvcGVydGllc1tuYXZpZ2F0aW9uUHJvcGVydGllcy5sZW5ndGggLSAxXTtcblx0XHRcdFx0Y29uc3QgcGFydG5lciA9IGlzTmF2aWdhdGlvblByb3BlcnR5KGxhc3ROYXYpICYmIGxhc3ROYXYucGFydG5lcjtcblx0XHRcdFx0aWYgKHBhcnRuZXIpIHtcblx0XHRcdFx0XHRwYXRoID0gYCR7cGFydG5lcn0vJHtwYXRofWA7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJldHVybiBwYXRoO1xuXHRcdH1cblx0fSk7XG5cdGNvbnN0IGlzSW5zZXJ0YWJsZSA9XG5cdFx0cmVzdHJpY3Rpb25zSW5zZXJ0YWJsZS5fdHlwZSA9PT0gXCJVbnJlc29sdmFibGVcIlxuXHRcdFx0PyBpc1BhdGhJbnNlcnRhYmxlKGNvbnZlcnRlckNvbnRleHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpLCB7XG5cdFx0XHRcdFx0cGF0aFZpc2l0b3I6IChwYXRoOiBzdHJpbmcpID0+IHNpbmdsZXRvblBhdGhWaXNpdG9yKHBhdGgsIGNvbnZlcnRlckNvbnRleHQuZ2V0Q29udmVydGVkVHlwZXMoKSwgW10pXG5cdFx0XHQgIH0pXG5cdFx0XHQ6IHJlc3RyaWN0aW9uc0luc2VydGFibGU7XG5cblx0cmV0dXJuIGFuZChcblx0XHRjcmVhdGlvblJvd1Zpc2liaWxpdHksXG5cdFx0aXNJbnNlcnRhYmxlLFxuXHRcdG9yKFxuXHRcdFx0IXN0YW5kYXJkQWN0aW9uc0NvbnRleHQudGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24uZGlzYWJsZUFkZFJvd0J1dHRvbkZvckVtcHR5RGF0YSxcblx0XHRcdGZvcm1hdFJlc3VsdChbcGF0aEluTW9kZWwoXCJjcmVhdGlvblJvd0ZpZWxkVmFsaWRpdHlcIiwgXCJpbnRlcm5hbFwiKV0sIHRhYmxlRm9ybWF0dGVycy52YWxpZGF0ZUNyZWF0aW9uUm93RmllbGRzKVxuXHRcdClcblx0KTtcbn1cblxuLyoqXG4gKiBHZXRzIHRoZSBiaW5kaW5nIGV4cHJlc3Npb24gZm9yIHRoZSAnZW5hYmxlZCcgcHJvcGVydHkgb2YgdGhlICdDcmVhdGUnIGFjdGlvbi5cbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0XG4gKiBAcGFyYW0gc3RhbmRhcmRBY3Rpb25zQ29udGV4dFxuICogQHBhcmFtIGNyZWF0ZVZpc2liaWxpdHlcbiAqIEBwYXJhbSBmb3JDb250ZXh0TWVudVxuICogQHJldHVybnMgVGhlIGJpbmRpbmcgZXhwcmVzc2lvbiBmb3IgdGhlICdlbmFibGVkJyBwcm9wZXJ0eSBvZiB0aGUgJ0NyZWF0ZScgYWN0aW9uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q3JlYXRlRW5hYmxlbWVudChcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+LFxuXHRzdGFuZGFyZEFjdGlvbnNDb250ZXh0OiBTdGFuZGFyZEFjdGlvbnNDb250ZXh0LFxuXHRjcmVhdGVWaXNpYmlsaXR5OiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4sXG5cdGZvckNvbnRleHRNZW51ID0gZmFsc2Vcbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiB7XG5cdGNvbnN0IGNvbmRpdGlvbnM6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPltdID0gW107XG5cdGNvbnN0IGNvbnRleHRQYXRoOiBzdHJpbmcgPSAhZm9yQ29udGV4dE1lbnUgPyBcIlwiIDogXCJjb250ZXh0bWVudS9cIjtcblxuXHRpZiAoc3RhbmRhcmRBY3Rpb25zQ29udGV4dC5jcmVhdGlvbk1vZGUgPT09IENyZWF0aW9uTW9kZS5JbmxpbmVDcmVhdGlvblJvd3MpIHtcblx0XHQvLyBmb3IgSW5saW5lIGNyZWF0aW9uIHJvd3MgY3JlYXRlIGNhbiBiZSBoaWRkZW4gdmlhIG1hbmlmZXN0IGFuZCB0aGlzIHNob3VsZCBub3QgaW1wYWN0IGl0cyBlbmFibGVtZW50XG5cdFx0Y29uZGl0aW9ucy5wdXNoKGFuZChub3Qoc3RhbmRhcmRBY3Rpb25zQ29udGV4dC5oaWRkZW5Bbm5vdGF0aW9uLmNyZWF0ZSksIFVJLklzRWRpdGFibGUpKTtcblx0fSBlbHNlIHtcblx0XHRjb25kaXRpb25zLnB1c2goY3JlYXRlVmlzaWJpbGl0eSk7XG5cdH1cblxuXHRjb25zdCBpc0luc2VydGFibGUgPSBzdGFuZGFyZEFjdGlvbnNDb250ZXh0LnJlc3RyaWN0aW9ucy5pc0luc2VydGFibGUuZXhwcmVzc2lvbjtcblx0Y29uc3QgQ29sbGVjdGlvblR5cGUgPSBjb252ZXJ0ZXJDb250ZXh0LnJlc29sdmVBYnNvbHV0ZVBhdGg8RW50aXR5U2V0PihzdGFuZGFyZEFjdGlvbnNDb250ZXh0LmNvbGxlY3Rpb25QYXRoKS50YXJnZXQ7XG5cdGNvbmRpdGlvbnMucHVzaChcblx0XHRvcihcblx0XHRcdGlzRW50aXR5U2V0KENvbGxlY3Rpb25UeXBlKSxcblx0XHRcdGFuZChpc0luc2VydGFibGUsIG9yKGNvbnZlcnRlckNvbnRleHQuZ2V0VGVtcGxhdGVUeXBlKCkgIT09IFRlbXBsYXRlVHlwZS5PYmplY3RQYWdlLCBVSS5Jc0VkaXRhYmxlKSlcblx0XHQpXG5cdCk7XG5cblx0aWYgKHN0YW5kYXJkQWN0aW9uc0NvbnRleHQudGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24udHlwZSA9PT0gXCJUcmVlVGFibGVcIikge1xuXHRcdC8vIEluIGNhc2Ugb2YgYSBUcmVlVGFibGUsIHRoZSBjcmVhdGUgYnV0dG9uIHNoYWxsIGJlIGFjdGl2ZSBvbmx5IGlmIDAgb3IgMSBpdGVtcyBhcmUgc2VsZWN0ZWQgKHBhcmVudCBub2RlKVxuXHRcdC8vIFdlIGRvIG5vdCBuZWVkIHRoaXMgY29uZGl0aW9uIG9uIHRoZSBDb250ZXh0TWVudSwgYXMgd2Ugb25seSBjcmVhdGUgb24gdGhlIHNlbGVjdGVkIG5vZGVcblx0XHRjb25kaXRpb25zLnB1c2gobGVzc09yRXF1YWwocGF0aEluTW9kZWwoY29udGV4dFBhdGggKyBcIm51bWJlck9mU2VsZWN0ZWRDb250ZXh0c1wiLCBcImludGVybmFsXCIpLCAxKSk7XG5cblx0XHRpZiAoc3RhbmRhcmRBY3Rpb25zQ29udGV4dC50YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbi5jcmVhdGVFbmFibGVtZW50KSB7XG5cdFx0XHQvLyBUaGVyZSdzIGEgY3JlYXRlRW5hYmxlbWVudCBjYWxsYmFjayBmdW5jdGlvbiBmb3IgYWRkaXRpb25uYWwgY29uZGl0aW9uc1xuXHRcdFx0Ly8gVGhlc2UgY29uZGl0aW9ucyB3aWxsIGJlIHJlZmxlY3RlZCBpbiB0aGUgaW50ZXJuYWwgbW9kZWxcblx0XHRcdGNvbmRpdGlvbnMucHVzaChub3RFcXVhbChwYXRoSW5Nb2RlbChjb250ZXh0UGF0aCArIFwiY3JlYXRlRW5hYmxlbWVudC9DcmVhdGVcIiwgXCJpbnRlcm5hbFwiKSwgZmFsc2UpKTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gYW5kKC4uLmNvbmRpdGlvbnMpO1xufVxuXG4vKipcbiAqIEdldHMgdGhlIGJpbmRpbmcgZXhwcmVzc2lvbiBmb3IgdGhlICdlbmFibGVkJyBwcm9wZXJ0eSBvZiB0aGUgJ0RlbGV0ZScgYWN0aW9uLlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHRcbiAqIEBwYXJhbSBzdGFuZGFyZEFjdGlvbnNDb250ZXh0XG4gKiBAcGFyYW0gZGVsZXRlVmlzaWJpbGl0eVxuICogQHBhcmFtIGZvckNvbnRleHRNZW51IEluZGljYXRlcyBpZiB0aGUgYWN0aW9uIGFwcGVhcnMgaW4gdGhlIGNvbnRleHQgbWVudS4gSWYgZmFsc2UsIHRoZSBhY3Rpb24gYXBwZWFycyBpbiB0aGUgdGFibGUgdG9vbGJhclxuICogQHJldHVybnMgVGhlIGJpbmRpbmcgZXhwcmVzc2lvbiBmb3IgdGhlICdlbmFibGVkJyBwcm9wZXJ0eSBvZiB0aGUgJ0RlbGV0ZScgYWN0aW9uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGVsZXRlRW5hYmxlbWVudChcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+LFxuXHRzdGFuZGFyZEFjdGlvbnNDb250ZXh0OiBTdGFuZGFyZEFjdGlvbnNDb250ZXh0LFxuXHRkZWxldGVWaXNpYmlsaXR5OiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4sXG5cdGZvckNvbnRleHRNZW51ID0gZmFsc2Vcbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiB7XG5cdC8vIFRoZSBmb2xsb3dpbmcgY29udGV4dHMgYXJlIGZpbGxlZCBhdCBydW50aW1lIHdoZW4gYSB1c2VyIHNlbGVjdHMgb25lIG9yIG1vcmUgaXRlbXMgZnJvbSBhIGxpc3QuXG5cdC8vIENoZWNrcyBhcmUgdGhlbiBtYWRlIGluIGZ1bmN0aW9uIHVwZGF0ZURlbGV0ZUluZm9Gb3JTZWxlY3RlZENvbnRleHRzIGluIGZpbGUgRGVsZXRlSGVscGVyIHRvIHNlZSBpZiB0aGVyZVxuXHQvLyBhcmUgaXRlbXMgdGhhdCBjYW4gYmUgZGVsZXRlZCwgdGh1cyB0aGUgZGVsZXRlIGJ1dHRvbiBzaG91bGQgYmUgZW5hYmxlZCBpbiB0aGVzZSBjYXNlcy5cblx0Y29uc3QgY29udGV4dFBhdGggPSAhZm9yQ29udGV4dE1lbnUgPyBcIlwiIDogXCJjb250ZXh0bWVudS9cIjtcblx0Y29uc3QgZGVsZXRhYmxlQ29udGV4dHMgPSBwYXRoSW5Nb2RlbChjb250ZXh0UGF0aCArIFwiZGVsZXRhYmxlQ29udGV4dHNcIiwgXCJpbnRlcm5hbFwiKTtcblx0Y29uc3QgdW5TYXZlZENvbnRleHRzID0gcGF0aEluTW9kZWwoY29udGV4dFBhdGggKyBcInVuU2F2ZWRDb250ZXh0c1wiLCBcImludGVybmFsXCIpO1xuXHRjb25zdCBkcmFmdHNXaXRoRGVsZXRhYmxlQWN0aXZlID0gcGF0aEluTW9kZWwoY29udGV4dFBhdGggKyBcImRyYWZ0c1dpdGhEZWxldGFibGVBY3RpdmVcIiwgXCJpbnRlcm5hbFwiKTtcblx0Y29uc3QgZHJhZnRzV2l0aE5vbkRlbGV0YWJsZUFjdGl2ZSA9IHBhdGhJbk1vZGVsKGNvbnRleHRQYXRoICsgXCJkcmFmdHNXaXRoTm9uRGVsZXRhYmxlQWN0aXZlXCIsIFwiaW50ZXJuYWxcIik7XG5cblx0Ly8gXCJVbnJlc29sdmFibGVcIiBpbiBuYXZpZ2F0aW9uRXhwcmVzc2lvbiBpcyBpbnRlcnByZXRlZCB0byBtZWFuIHRoYXQgdGhlcmUgYXJlIG5vIG5hdmlnYXRpb25FeHByZXNzaW9uc1xuXHQvLyBkZWZpbmVkLlxuXHQvLyBzdGFuZGFyZEFjdGlvbnNDb250ZXh0LnJlc3RyaWN0aW9ucy5pc0RlbGV0YWJsZS5leHByZXNzaW9uIGlzIGEgYmluZGluZyBleHByZXNzaW9uIHRoYXQgY29tZXNcblx0Ly8gZnJvbSB0aGUgRGVsZXRlIHJlc3RyaWN0aW9ucyBkZWZpbmVkIGluIE5hdmlnYXRpb25SZXN0cmljdGlvbnMgZm9yIHRoaXMgZW50aXR5LiBJbiBvcmRlciB0b1xuXHQvLyBiZSBkZWxldGFibGUsIHRoZSBpdGVtIG11c3QgYWxzbyBiZSBhbGxvd2VkIHRvIGJlIGRlbGV0YWJsZSBhY2NvcmRpbmcgdG8gdGhlIERlbGV0ZSBSZXN0cmljdGlvbnNcblx0Ly8gb24gdGhlIGVudGl0eSBpdHNlbGYuXG5cdHJldHVybiBhbmQoXG5cdFx0ZGVsZXRlVmlzaWJpbGl0eSxcblx0XHRvcihcblx0XHRcdHN0YW5kYXJkQWN0aW9uc0NvbnRleHQucmVzdHJpY3Rpb25zLmlzRGVsZXRhYmxlLm5hdmlnYXRpb25FeHByZXNzaW9uLl90eXBlID09PSBcIlVucmVzb2x2YWJsZVwiLFxuXHRcdFx0c3RhbmRhcmRBY3Rpb25zQ29udGV4dC5yZXN0cmljdGlvbnMuaXNEZWxldGFibGUuZXhwcmVzc2lvblxuXHRcdCksXG5cdFx0b3IoXG5cdFx0XHRncmVhdGVyVGhhbihsZW5ndGgoZGVsZXRhYmxlQ29udGV4dHMsIHRydWUpLCAwKSxcblx0XHRcdGdyZWF0ZXJUaGFuKGxlbmd0aChkcmFmdHNXaXRoRGVsZXRhYmxlQWN0aXZlLCB0cnVlKSwgMCksXG5cdFx0XHRncmVhdGVyVGhhbihsZW5ndGgoZHJhZnRzV2l0aE5vbkRlbGV0YWJsZUFjdGl2ZSwgdHJ1ZSksIDApLFxuXHRcdFx0Z3JlYXRlclRoYW4obGVuZ3RoKHVuU2F2ZWRDb250ZXh0cywgdHJ1ZSksIDApXG5cdFx0KVxuXHQpO1xufVxuXG4vKipcbiAqIEdldHMgdGhlIGJpbmRpbmcgZXhwcmVzc2lvbiBmb3IgdGhlICdlbmFibGVkJyBwcm9wZXJ0eSBvZiB0aGUgJ1Bhc3RlJyBhY3Rpb24uXG4gKiBAcGFyYW0gcGFzdGVWaXNpYmlsaXR5XG4gKiBAcGFyYW0gc3RhbmRhcmRBY3Rpb25zQ29udGV4dFxuICogQHBhcmFtIGZvckNvbnRleHRNZW51XG4gKiBAcmV0dXJucyBUaGUgYmluZGluZyBleHByZXNzaW9uIGZvciB0aGUgJ2VuYWJsZWQnIHByb3BlcnR5IG9mIHRoZSAnUGFzdGUnIGFjdGlvbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFBhc3RlRW5hYmxlbWVudChcblx0cGFzdGVWaXNpYmlsaXR5OiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4sXG5cdHN0YW5kYXJkQWN0aW9uc0NvbnRleHQ6IFN0YW5kYXJkQWN0aW9uc0NvbnRleHQsXG5cdGZvckNvbnRleHRNZW51OiBib29sZWFuXG4pOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4ge1xuXHRjb25zdCBzZWxlY3RlZENvbnRleHRzUGF0aCA9ICFmb3JDb250ZXh0TWVudSA/IFwic2VsZWN0ZWRDb250ZXh0c1wiIDogXCJjb250ZXh0bWVudS9zZWxlY3RlZENvbnRleHRzXCI7XG5cdGNvbnN0IHBhc3RlRW5hYmxlbWVudFBhdGggPSAhZm9yQ29udGV4dE1lbnUgPyBcIm5vZGVVcGRhdGVzSW5mby9wYXN0ZUVuYWJsZW1lbnRcIiA6IFwiY29udGV4dG1lbnUvbm9kZVVwZGF0ZXNJbmZvL3Bhc3RlRW5hYmxlbWVudFwiO1xuXHRpZiAoc3RhbmRhcmRBY3Rpb25zQ29udGV4dC50YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbi50eXBlID09PSBcIlRyZWVUYWJsZVwiKSB7XG5cdFx0cmV0dXJuIGFuZChcblx0XHRcdHBhc3RlVmlzaWJpbGl0eSxcblx0XHRcdG9yKFxuXHRcdFx0XHRzdGFuZGFyZEFjdGlvbnNDb250ZXh0LnJlc3RyaWN0aW9ucy5pc1VwZGF0YWJsZS5uYXZpZ2F0aW9uRXhwcmVzc2lvbi5fdHlwZSA9PT0gXCJVbnJlc29sdmFibGVcIixcblx0XHRcdFx0c3RhbmRhcmRBY3Rpb25zQ29udGV4dC5yZXN0cmljdGlvbnMuaXNVcGRhdGFibGUuZXhwcmVzc2lvblxuXHRcdFx0KSxcblx0XHRcdGlmRWxzZShcblx0XHRcdFx0bGVzc09yRXF1YWwobGVuZ3RoKHBhdGhJbk1vZGVsKHNlbGVjdGVkQ29udGV4dHNQYXRoLCBcImludGVybmFsXCIpKSwgMSksXG5cdFx0XHRcdGVxdWFsKHBhdGhJbk1vZGVsKHBhc3RlRW5hYmxlbWVudFBhdGgsIFwiaW50ZXJuYWxcIiksIHRydWUpLFxuXG5cdFx0XHRcdGZhbHNlXG5cdFx0XHQpXG5cdFx0KTtcblx0fVxuXHRsZXQgdXBkYXRlT25OYXZpZ2F0aW9uID0gc3RhbmRhcmRBY3Rpb25zQ29udGV4dC5yZXN0cmljdGlvbnM/LmlzVXBkYXRhYmxlPy5uYXZpZ2F0aW9uRXhwcmVzc2lvbjtcblx0aWYgKHVwZGF0ZU9uTmF2aWdhdGlvbj8uX3R5cGUgPT09IFwiVW5yZXNvbHZhYmxlXCIpIHtcblx0XHR1cGRhdGVPbk5hdmlnYXRpb24gPSBjb25zdGFudCh0cnVlKTtcblx0fVxuXHRyZXR1cm4gYW5kKHVwZGF0ZU9uTmF2aWdhdGlvbiwgcGFzdGVWaXNpYmlsaXR5KTtcbn1cblxuLyoqXG4gKiBHZXRzIHRoZSBiaW5kaW5nIGV4cHJlc3Npb24gZm9yIHRoZSAnZW5hYmxlZCcgcHJvcGVydHkgb2YgdGhlICdNYXNzRWRpdCcgYWN0aW9uLlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHRcbiAqIEBwYXJhbSBzdGFuZGFyZEFjdGlvbnNDb250ZXh0XG4gKiBAcGFyYW0gbWFzc0VkaXRWaXNpYmlsaXR5XG4gKiBAcGFyYW0gZm9yQ29udGV4dE1lbnUgSW5kaWNhdGVzIGlmIHRoZSBhY3Rpb24gYXBwZWFycyBpbiB0aGUgY29udGV4dCBtZW51LiBJZiBmYWxzZSwgdGhlIGFjdGlvbiBhcHBlYXJzIGluIHRoZSB0YWJsZSB0b29sYmFyXG4gKiBAcmV0dXJucyBUaGUgYmluZGluZyBleHByZXNzaW9uIGZvciB0aGUgJ2VuYWJsZWQnIHByb3BlcnR5IG9mIHRoZSAnTWFzc0VkaXQnIGFjdGlvbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldE1hc3NFZGl0RW5hYmxlbWVudChcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+LFxuXHRzdGFuZGFyZEFjdGlvbnNDb250ZXh0OiBTdGFuZGFyZEFjdGlvbnNDb250ZXh0LFxuXHRtYXNzRWRpdFZpc2liaWxpdHk6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPixcblx0Zm9yQ29udGV4dE1lbnUgPSBmYWxzZVxuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+IHtcblx0Y29uc3QgcGF0aFVwZGF0YWJsZUV4cHJlc3Npb24gPSBzdGFuZGFyZEFjdGlvbnNDb250ZXh0LnJlc3RyaWN0aW9ucy5pc1VwZGF0YWJsZS5leHByZXNzaW9uO1xuXHRjb25zdCBpc09ubHlEeW5hbWljT25DdXJyZW50RW50aXR5ID1cblx0XHQhaXNDb25zdGFudChwYXRoVXBkYXRhYmxlRXhwcmVzc2lvbikgJiZcblx0XHRzdGFuZGFyZEFjdGlvbnNDb250ZXh0LnJlc3RyaWN0aW9ucy5pc1VwZGF0YWJsZS5uYXZpZ2F0aW9uRXhwcmVzc2lvbi5fdHlwZSA9PT0gXCJVbnJlc29sdmFibGVcIjtcblx0Y29uc3QgbnVtYmVyT2ZTZWxlY3RlZENvbnRleHRQcm9wZXJ0eSA9ICFmb3JDb250ZXh0TWVudSA/IFwibnVtYmVyT2ZTZWxlY3RlZENvbnRleHRzXCIgOiBcImNvbnRleHRtZW51L251bWJlck9mU2VsZWN0ZWRDb250ZXh0c1wiO1xuXHRjb25zdCB1cGRhdGFibGVDb250ZXh0UHJvcGVydHkgPSAhZm9yQ29udGV4dE1lbnUgPyBcInVwZGF0YWJsZUNvbnRleHRzXCIgOiBcImNvbnRleHRtZW51L3VwZGF0YWJsZUNvbnRleHRzXCI7XG5cdGNvbnN0IG51bWJlck9mU2VsZWN0ZWRDb250ZXh0cyA9IGdyZWF0ZXJPckVxdWFsKHBhdGhJbk1vZGVsKG51bWJlck9mU2VsZWN0ZWRDb250ZXh0UHJvcGVydHksIFwiaW50ZXJuYWxcIiksIDEpO1xuXHRjb25zdCBudW1iZXJPZlVwZGF0YWJsZUNvbnRleHRzID0gZ3JlYXRlck9yRXF1YWwobGVuZ3RoKHBhdGhJbk1vZGVsKHVwZGF0YWJsZUNvbnRleHRQcm9wZXJ0eSwgXCJpbnRlcm5hbFwiKSksIDEpO1xuXHRjb25zdCBiSXNEcmFmdFN1cHBvcnRlZCA9IE1vZGVsSGVscGVyLmlzT2JqZWN0UGF0aERyYWZ0U3VwcG9ydGVkKGNvbnZlcnRlckNvbnRleHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpKTtcblx0Y29uc3QgYkRpc3BsYXlNb2RlID0gaXNJbkRpc3BsYXlNb2RlKGNvbnZlcnRlckNvbnRleHQpO1xuXG5cdC8vIG51bWJlck9mVXBkYXRhYmxlQ29udGV4dHMgbmVlZHMgdG8gYmUgYWRkZWQgdG8gdGhlIGJpbmRpbmcgaW4gY2FzZVxuXHQvLyAxLiBVcGRhdGUgaXMgZGVwZW5kZW50IG9uIGN1cnJlbnQgZW50aXR5IHByb3BlcnR5IChpc09ubHlEeW5hbWljT25DdXJyZW50RW50aXR5IGlzIHRydWUpLlxuXHQvLyAyLiBUaGUgdGFibGUgaXMgcmVhZCBvbmx5IGFuZCBkcmFmdCBlbmFibGVkKGxpa2UgTFIpLCBpbiB0aGlzIGNhc2Ugb25seSBhY3RpdmUgY29udGV4dHMgY2FuIGJlIG1hc3MgZWRpdGVkLlxuXHQvLyAgICBTbywgdXBkYXRlIGRlcGVuZHMgb24gJ0lzQWN0aXZlRW50aXR5JyB2YWx1ZSB3aGljaCBuZWVkcyB0byBiZSBjaGVja2VkIHJ1bnRpbWUuXG5cdGNvbnN0IHJ1bnRpbWVCaW5kaW5nID0gaWZFbHNlKFxuXHRcdG9yKGFuZChiRGlzcGxheU1vZGUsIGJJc0RyYWZ0U3VwcG9ydGVkKSwgaXNPbmx5RHluYW1pY09uQ3VycmVudEVudGl0eSksXG5cdFx0YW5kKG51bWJlck9mU2VsZWN0ZWRDb250ZXh0cywgbnVtYmVyT2ZVcGRhdGFibGVDb250ZXh0cyksXG5cdFx0YW5kKG51bWJlck9mU2VsZWN0ZWRDb250ZXh0cylcblx0KTtcblxuXHRyZXR1cm4gYW5kKG1hc3NFZGl0VmlzaWJpbGl0eSwgaWZFbHNlKGlzT25seUR5bmFtaWNPbkN1cnJlbnRFbnRpdHksIHJ1bnRpbWVCaW5kaW5nLCBhbmQocnVudGltZUJpbmRpbmcsIHBhdGhVcGRhdGFibGVFeHByZXNzaW9uKSkpO1xufVxuXG4vKipcbiAqIEdldHMgdGhlIGJpbmRpbmcgZXhwcmVzc2lvbiBmb3IgdGhlICdlbmFibGVkJyBwcm9wZXJ0eSBvZiB0aGUgJ0N1dCcgYWN0aW9uLlxuICogQHBhcmFtIGN1dFZpc2liaWxpdHlcbiAqIEBwYXJhbSBzdGFuZGFyZEFjdGlvbnNDb250ZXh0XG4gKiBAcGFyYW0gZm9yQ29udGV4dE1lbnVcbiAqIEByZXR1cm5zIFRoZSBiaW5kaW5nIGV4cHJlc3Npb24gZm9yIHRoZSAnZW5hYmxlZCcgcHJvcGVydHkgb2YgdGhlICdNYXNzRWRpdCcgYWN0aW9uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q3V0RW5hYmxlbWVudChcblx0Y3V0VmlzaWJpbGl0eTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+LFxuXHRzdGFuZGFyZEFjdGlvbnNDb250ZXh0OiBTdGFuZGFyZEFjdGlvbnNDb250ZXh0LFxuXHRmb3JDb250ZXh0TWVudTogYm9vbGVhblxuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+IHtcblx0Y29uc3QgY3V0YWJsZUNvbnRleHRzUGF0aCA9ICFmb3JDb250ZXh0TWVudSA/IFwibm9kZVVwZGF0ZXNJbmZvL2N1dEVuYWJsZW1lbnRcIiA6IFwiY29udGV4dG1lbnUvbm9kZVVwZGF0ZXNJbmZvL2N1dEVuYWJsZW1lbnRcIjtcblx0Y29uc3QgcnVudGltZUJpbmRpbmcgPSBwYXRoSW5Nb2RlbChjdXRhYmxlQ29udGV4dHNQYXRoLCBcImludGVybmFsXCIpO1xuXHRyZXR1cm4gYW5kKFxuXHRcdGN1dFZpc2liaWxpdHksXG5cdFx0b3IoXG5cdFx0XHRzdGFuZGFyZEFjdGlvbnNDb250ZXh0LnJlc3RyaWN0aW9ucy5pc1VwZGF0YWJsZS5uYXZpZ2F0aW9uRXhwcmVzc2lvbi5fdHlwZSA9PT0gXCJVbnJlc29sdmFibGVcIixcblx0XHRcdHN0YW5kYXJkQWN0aW9uc0NvbnRleHQucmVzdHJpY3Rpb25zLmlzVXBkYXRhYmxlLmV4cHJlc3Npb25cblx0XHQpLFxuXHRcdHJ1bnRpbWVCaW5kaW5nXG5cdCk7XG59XG5cbi8qKlxuICogR2V0cyB0aGUgYmluZGluZyBleHByZXNzaW9uIGZvciB0aGUgJ2VuYWJsZWQnIHByb3BlcnR5IG9mIHRoZSAnQ29weScgYWN0aW9uLlxuICogQHBhcmFtIGNvcHlWaXNpYmlsaXR5XG4gKiBAcGFyYW0gZm9yQ29udGV4dE1lbnVcbiAqIEByZXR1cm5zIFRoZSBiaW5kaW5nIGV4cHJlc3Npb24gZm9yIHRoZSAnZW5hYmxlZCcgcHJvcGVydHkgb2YgdGhlICdDb3B5JyBhY3Rpb24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRDb3B5RW5hYmxlbWVudChcblx0Y29weVZpc2liaWxpdHk6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPixcblx0Zm9yQ29udGV4dE1lbnU6IGJvb2xlYW5cbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiB7XG5cdGNvbnN0IGNvcHlhYmxlQ29udGV4dHNQYXRoID0gIWZvckNvbnRleHRNZW51ID8gXCJub2RlVXBkYXRlc0luZm8vY29weUVuYWJsZW1lbnRcIiA6IFwiY29udGV4dG1lbnUvbm9kZVVwZGF0ZXNJbmZvL2NvcHlFbmFibGVtZW50XCI7XG5cdGNvbnN0IHJ1bnRpbWVCaW5kaW5nID0gcGF0aEluTW9kZWwoY29weWFibGVDb250ZXh0c1BhdGgsIFwiaW50ZXJuYWxcIik7XG5cdHJldHVybiBhbmQoY29weVZpc2liaWxpdHksIHJ1bnRpbWVCaW5kaW5nKTtcbn1cblxuLyoqXG4gKiBHZXRzIHRoZSBiaW5kaW5nIGV4cHJlc3Npb24gZm9yIHRoZSAnZW5hYmxlZCcgcHJvcGVydHkgb2YgdGhlICdNb3ZlIHVwJyBhbmQgJ01vdmUgZG93bicgYWN0aW9ucy5cbiAqIEBwYXJhbSBtb3ZlVXBEb3duVmlzaWJpbGl0eVxuICogQHBhcmFtIHN0YW5kYXJkQWN0aW9uc0NvbnRleHRcbiAqIEBwYXJhbSBmb3JVcFxuICogQHBhcmFtIGZvckNvbnRleHRNZW51XG4gKiBAcmV0dXJucyBUaGUgYmluZGluZyBleHByZXNzaW9uXG4gKi9cbmZ1bmN0aW9uIGdldE1vdmVVcERvd25FbmFibGVtZW50KFxuXHRtb3ZlVXBEb3duVmlzaWJpbGl0eTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+LFxuXHRzdGFuZGFyZEFjdGlvbnNDb250ZXh0OiBTdGFuZGFyZEFjdGlvbnNDb250ZXh0LFxuXHRmb3JVcDogYm9vbGVhbixcblx0Zm9yQ29udGV4dE1lbnUgPSBmYWxzZVxuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+IHtcblx0Y29uc3Qgc2luZ2xlQ29udGV4dE1vdmFibGVVcCA9ICFmb3JDb250ZXh0TWVudSA/IFwic2luZ2xlQ29udGV4dE1vdmFibGVVcFwiIDogXCJjb250ZXh0bWVudS9zaW5nbGVDb250ZXh0TW92YWJsZVVwXCI7XG5cdGNvbnN0IHNpbmdsZUNvbnRleHRNb3ZhYmxlRG93biA9ICFmb3JDb250ZXh0TWVudSA/IFwic2luZ2xlQ29udGV4dE1vdmFibGVEb3duXCIgOiBcImNvbnRleHRtZW51L3NpbmdsZUNvbnRleHRNb3ZhYmxlRG93blwiO1xuXHRjb25zdCBydW50aW1lQmluZGluZyA9IGZvclVwXG5cdFx0PyBlcXVhbChwYXRoSW5Nb2RlbChzaW5nbGVDb250ZXh0TW92YWJsZVVwLCBcImludGVybmFsXCIpLCB0cnVlKVxuXHRcdDogZXF1YWwocGF0aEluTW9kZWwoc2luZ2xlQ29udGV4dE1vdmFibGVEb3duLCBcImludGVybmFsXCIpLCB0cnVlKTtcblx0cmV0dXJuIGFuZChcblx0XHRtb3ZlVXBEb3duVmlzaWJpbGl0eSxcblx0XHRvcihcblx0XHRcdHN0YW5kYXJkQWN0aW9uc0NvbnRleHQucmVzdHJpY3Rpb25zLmlzVXBkYXRhYmxlLm5hdmlnYXRpb25FeHByZXNzaW9uLl90eXBlID09PSBcIlVucmVzb2x2YWJsZVwiLFxuXHRcdFx0c3RhbmRhcmRBY3Rpb25zQ29udGV4dC5yZXN0cmljdGlvbnMuaXNVcGRhdGFibGUuZXhwcmVzc2lvblxuXHRcdCksXG5cdFx0cnVudGltZUJpbmRpbmdcblx0KTtcbn1cblxuLyoqXG4gKiBUZWxscyBpZiB0aGUgdGFibGUgaW4gdGVtcGxhdGUgaXMgaW4gZGlzcGxheSBtb2RlLlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHRcbiAqIEBwYXJhbSBjaGVja011bHRpcGxlVmlzdWFsaXphdGlvblxuICogQHJldHVybnMgYHRydWVgIGlmIHRoZSB0YWJsZSBpcyBpbiBkaXNwbGF5IG1vZGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzSW5EaXNwbGF5TW9kZShjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4sIGNoZWNrTXVsdGlwbGVWaXN1YWxpemF0aW9uID0gZmFsc2UpOiBib29sZWFuIHtcblx0aWYgKGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RXcmFwcGVyKCkuaGFzSW5saW5lRWRpdCgpKSB7XG5cdFx0Ly9pZiB0aGVyZSBpcyBpbmxpbmUgZWRpdCBpbiB0aGUgcGFnZSB3ZSBjYW5ub3QgZm9yY2UgdGhlIHRhYmxlIHRvIGRpc3BsYXkgYmFzZWQgb24gdGhlIHRlbXBsYXRlIHR5cGVcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblx0Y29uc3QgdGVtcGxhdGVUeXBlID0gY29udmVydGVyQ29udGV4dC5nZXRUZW1wbGF0ZVR5cGUoKTtcblx0aWYgKFxuXHRcdHRlbXBsYXRlVHlwZSA9PT0gVGVtcGxhdGVUeXBlLkxpc3RSZXBvcnQgfHxcblx0XHR0ZW1wbGF0ZVR5cGUgPT09IFRlbXBsYXRlVHlwZS5BbmFseXRpY2FsTGlzdFBhZ2UgfHxcblx0XHQoY2hlY2tNdWx0aXBsZVZpc3VhbGl6YXRpb24gJiYgY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdFdyYXBwZXIoKS5oYXNNdWx0aXBsZVZpc3VhbGl6YXRpb25zKCkpXG5cdCkge1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdC8vIHVwZGF0YWJsZSB3aWxsIGJlIGhhbmRsZWQgYXQgdGhlIHByb3BlcnR5IGxldmVsXG5cdHJldHVybiBmYWxzZTtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7RUFpQ0E7RUF3Q08sTUFBTUEsa0JBQWtCLEdBQUc7SUFDakNDLEdBQUcsRUFBRSxxQkFBcUI7SUFDMUJDLElBQUksRUFBRSxzQkFBc0I7SUFDNUJDLE1BQU0sRUFBRSx3QkFBd0I7SUFDaENDLE1BQU0sRUFBRSx3QkFBd0I7SUFDaENDLFdBQVcsRUFBRSw2QkFBNkI7SUFDMUNDLEtBQUssRUFBRSx1QkFBdUI7SUFDOUJDLFFBQVEsRUFBRSwwQkFBMEI7SUFDcENDLFFBQVEsRUFBRSwwQkFBMEI7SUFDcENDLE1BQU0sRUFBRSx3QkFBd0I7SUFDaENDLFFBQVEsRUFBRTtFQUNYLENBQUM7O0VBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFOQUMsUUFBQSxDQUFBWCxrQkFBQSxHQUFBQSxrQkFBQTtFQU9PLFNBQVNZ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QUFBLFFBQUFiLFNBQUEsR0FBQWEsU0FBQSxNQUFHLEtBQUs7SUFFdEIsTUFBTXlLLHNCQUFzQixHQUFHLENBQUM1QixjQUFjLEdBQUcsd0JBQXdCLEdBQUcsb0NBQW9DO0lBQ2hILE1BQU02Qix3QkFBd0IsR0FBRyxDQUFDN0IsY0FBYyxHQUFHLDBCQUEwQixHQUFHLHNDQUFzQztJQUN0SCxNQUFNd0IsY0FBYyxHQUFHNUcsS0FBSyxHQUN6QnVCLEtBQUssQ0FBQ2lCLFdBQVcsQ0FBQ3dFLHNCQUFzQixFQUFFLFVBQVUsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUM1RHpGLEtBQUssQ0FBQ2lCLFdBQVcsQ0FBQ3lFLHdCQUF3QixFQUFFLFVBQVUsQ0FBQyxFQUFFLElBQUksQ0FBQztJQUNqRSxPQUFPM0csR0FBRyxDQUNUeUcsb0JBQW9CLEVBQ3BCOUQsRUFBRSxDQUNEN0Usc0JBQXNCLENBQUMzRCxZQUFZLENBQUN1RyxXQUFXLENBQUNoRCxvQkFBb0IsQ0FBQ2lHLEtBQUssS0FBSyxjQUFjLEVBQzdGN0Ysc0JBQXNCLENBQUMzRCxZQUFZLENBQUN1RyxXQUFXLENBQUNwRCxVQUNqRCxDQUFDLEVBQ0RnSixjQUNELENBQUM7RUFDRjs7RUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDTyxTQUFTRCxlQUFlQSxDQUFDaE4sZ0JBQXlELEVBQStDO0lBQUEsSUFBN0N1TiwwQkFBMEIsR0FBQTNLLFNBQUEsQ0FBQUMsTUFBQSxRQUFBRCxTQUFBLFFBQUFiLFNBQUEsR0FBQWEsU0FBQSxNQUFHLEtBQUs7SUFDNUgsSUFBSTVDLGdCQUFnQixDQUFDd04sa0JBQWtCLENBQUMsQ0FBQyxDQUFDQyxhQUFhLENBQUMsQ0FBQyxFQUFFO01BQzFEO01BQ0EsT0FBTyxLQUFLO0lBQ2I7SUFDQSxNQUFNQyxZQUFZLEdBQUcxTixnQkFBZ0IsQ0FBQ3VILGVBQWUsQ0FBQyxDQUFDO0lBQ3ZELElBQ0NtRyxZQUFZLEtBQUtsRyxZQUFZLENBQUNDLFVBQVUsSUFDeENpRyxZQUFZLEtBQUtsRyxZQUFZLENBQUM0QyxrQkFBa0IsSUFDL0NtRCwwQkFBMEIsSUFBSXZOLGdCQUFnQixDQUFDd04sa0JBQWtCLENBQUMsQ0FBQyxDQUFDRyx5QkFBeUIsQ0FBQyxDQUFFLEVBQ2hHO01BQ0QsT0FBTyxJQUFJO0lBQ1o7SUFDQTtJQUNBLE9BQU8sS0FBSztFQUNiO0VBQUM3TixRQUFBLENBQUFrTixlQUFBLEdBQUFBLGVBQUE7RUFBQSxPQUFBbE4sUUFBQTtBQUFBIiwiaWdub3JlTGlzdCI6W119
|
|
751
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJTdGFuZGFyZEFjdGlvbktleXMiLCJDdXQiLCJDb3B5IiwiQ3JlYXRlIiwiRGVsZXRlIiwiQ3JlYXRpb25Sb3ciLCJQYXN0ZSIsIk1hc3NFZGl0IiwiSW5zaWdodHMiLCJNb3ZlVXAiLCJNb3ZlRG93biIsIl9leHBvcnRzIiwiZ2VuZXJhdGVTdGFuZGFyZEFjdGlvbnNDb250ZXh0IiwiY29udmVydGVyQ29udGV4dCIsImNyZWF0aW9uTW9kZSIsInRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uIiwiY29sbGVjdGlvblBhdGgiLCJnZXRUYXJnZXRPYmplY3RQYXRoIiwiZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCIsImhpZGRlbkFubm90YXRpb24iLCJjcmVhdGUiLCJpc0FjdGlvbkFubm90YXRlZEhpZGRlbiIsImRlbGV0ZSIsInVwZGF0ZSIsImlzRHJhZnRPclN0aWNreVN1cHBvcnRlZCIsIm5ld0FjdGlvbiIsImdldE5ld0FjdGlvbiIsInJlc3RyaWN0aW9ucyIsImdldFJlc3RyaWN0aW9ucyIsImRhdGFNb2RlbE9iamVjdFBhdGgiLCJiSXNEcmFmdFN1cHBvcnRlZCIsIk1vZGVsSGVscGVyIiwiaXNPYmplY3RQYXRoRHJhZnRTdXBwb3J0ZWQiLCJiSXNTdGlja3lTZXNzaW9uU3VwcG9ydGVkIiwic3RhcnRpbmdFbnRpdHlTZXQiLCJhbm5vdGF0aW9ucyIsIlNlc3Npb24iLCJTdGlja3lTZXNzaW9uU3VwcG9ydGVkIiwiY3VycmVudEVudGl0eVNldCIsImdldEVudGl0eVNldCIsImlzRW50aXR5U2V0IiwiQ29tbW9uIiwiRHJhZnRSb290IiwiTmV3QWN0aW9uIiwidW5kZWZpbmVkIiwibmV3QWN0aW9uTmFtZSIsInRvU3RyaW5nIiwiYXZhaWxhYmxlUHJvcGVydHkiLCJnZXRFbnRpdHlUeXBlIiwiYWN0aW9ucyIsIkNvcmUiLCJPcGVyYXRpb25BdmFpbGFibGUiLCJuYW1lIiwiYXZhaWxhYmxlIiwiZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uIiwic0Fubm90YXRpb25UZXJtIiwiYldpdGhOYXZpZ2F0aW9uUGF0aCIsImFyZ3VtZW50cyIsImxlbmd0aCIsImFjdGlvbkFubm90YXRpb25WYWx1ZSIsImlzU2luZ2xldG9uIiwiVUkiLCJjb25zdGFudCIsInZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMiLCJnZXRSZWxhdGl2ZVBhdGhzIiwicGF0aCIsInNpbmdsZXRvblBhdGhWaXNpdG9yIiwiZ2V0Q29udmVydGVkVHlwZXMiLCJyZXN0cmljdGlvbnNEZWYiLCJrZXkiLCJmdW5jdGlvbiIsImlzUGF0aEluc2VydGFibGUiLCJpc1BhdGhVcGRhdGFibGUiLCJpc1BhdGhEZWxldGFibGUiLCJyZXN1bHQiLCJmb3JFYWNoIiwiZGVmIiwiZGVmRnVuY3Rpb24iLCJleHByZXNzaW9uIiwiYXBwbHkiLCJwYXRoVmlzaXRvciIsIm5hdmlnYXRpb25QYXRocyIsIm5hdmlnYXRpb25FeHByZXNzaW9uIiwiaWdub3JlVGFyZ2V0Q29sbGVjdGlvbiIsImF1dGhvcml6ZVVucmVzb2x2YWJsZSIsImdldEluc2VydFVwZGF0ZUFjdGlvbnNUZW1wbGF0aW5nIiwic3RhbmRhcmRBY3Rpb25zQ29udGV4dCIsImlzRHJhZnRPclN0aWNreSIsIkNyZWF0aW9uTW9kZSIsIkV4dGVybmFsIiwiZ2V0U3RhbmRhcmRBY3Rpb25DcmVhdGUiLCJjcmVhdGVWaXNpYmlsaXR5IiwiZ2V0Q3JlYXRlVmlzaWJpbGl0eSIsImlzVGVtcGxhdGVkIiwiY29tcGlsZUV4cHJlc3Npb24iLCJnZXRDcmVhdGVUZW1wbGF0aW5nIiwidmlzaWJsZSIsInZpc2libGVFeHByZXNzaW9uIiwiZW5hYmxlZCIsImdldENyZWF0ZUVuYWJsZW1lbnQiLCJlbmFibGVkRm9yQ29udGV4dE1lbnUiLCJ0eXBlIiwiQWN0aW9uVHlwZSIsIlN0YW5kYXJkIiwiZ2V0U3RhbmRhcmRBY3Rpb25DdXQiLCJjdXRWaXNpYmlsaXR5IiwiZ2V0Q3V0VmlzaWJpbGl0eSIsImdldERlZmF1bHRUZW1wbGF0aW5nIiwiZ2V0Q3V0RW5hYmxlbWVudCIsImdldFN0YW5kYXJkQWN0aW9uQ29weSIsImNvcHlWaXNpYmlsaXR5IiwiZ2V0Q29weVZpc2liaWxpdHkiLCJnZXRDb3B5RW5hYmxlbWVudCIsImdldFN0YW5kYXJkQWN0aW9uTW92ZVVwRG93biIsImZvclVwIiwiY2FuQ2hhbmdlU2libGluZyIsIkhpZXJhcmNoeSIsImhpZXJhcmNoeVF1YWxpZmllciIsIkNoYW5nZU5leHRTaWJsaW5nQWN0aW9uIiwibW92ZVZpc2liaWxpdHkiLCJhbmQiLCJnZXRNb3ZlVXBEb3duRW5hYmxlbWVudCIsImdldFN0YW5kYXJkQWN0aW9uRGVsZXRlIiwiZGVsZXRlVmlzaWJpbGl0eSIsImdldERlbGV0ZVZpc2liaWxpdHkiLCJnZXREZWxldGVFbmFibGVtZW50IiwiZ2V0Q3JlYXRpb25Sb3ciLCJjcmVhdGlvblJvd1Zpc2liaWxpdHkiLCJnZXRDcmVhdGlvblJvd0VuYWJsZW1lbnQiLCJwYXRoVXBkYXRhYmxlRXhwcmVzc2lvbiIsImlzVXBkYXRhYmxlIiwidGVtcGxhdGVCaW5kaW5nRXhwcmVzc2lvbiIsImdldFRlbXBsYXRlVHlwZSIsIlRlbXBsYXRlVHlwZSIsIkxpc3RSZXBvcnQiLCJJc0VkaXRhYmxlIiwiaWZFbHNlIiwiZXF1YWwiLCJpc0hpZXJhcmNoeVBhcmVudE5vZGVVcGRhdGFibGUiLCJub3QiLCJpc0NvbnN0YW50IiwiYXZhaWxhYmxlQ29weUFjdGlvbiIsIkNvcHlBY3Rpb24iLCJnZXRTdGFuZGFyZEFjdGlvblBhc3RlIiwiaXNJbnNlcnRVcGRhdGVBY3Rpb25zVGVtcGxhdGVkIiwicGFzdGVWaXNpYmlsaXR5IiwiZ2V0UGFzdGVWaXNpYmlsaXR5IiwicGFzdGVFbmFibGVtZW50IiwiZ2V0UGFzdGVFbmFibGVtZW50IiwicGFzdGVFbmFibGVtZW50Rm9yQ29udGV4dE1lbnUiLCJnZXRTdGFuZGFyZEFjdGlvbk1hc3NFZGl0IiwibWFzc0VkaXRWaXNpYmlsaXR5IiwiZ2V0TWFzc0VkaXRWaXNpYmlsaXR5IiwidmlzaWJsZUZvckNvbnRleHRNZW51IiwicGF0aEluTW9kZWwiLCJnZXRNYXNzRWRpdEVuYWJsZW1lbnQiLCJnZXRTdGFuZGFyZEFjdGlvbkluc2lnaHRzIiwidmlzdWFsaXphdGlvblBhdGgiLCJpbnNpZ2h0c1Zpc2liaWxpdHkiLCJnZXRJbnNpZ2h0c1Zpc2liaWxpdHkiLCJpbnNpZ2h0c0VuYWJsZW1lbnQiLCJnZXRJbnNpZ2h0c0VuYWJsZW1lbnQiLCJpc0ZvckNyZWF0aW9uUm93Iiwib3IiLCJhY3Rpb25WaXNpYmlsaXR5IiwiaGlkZUNyZWF0ZURlbGV0ZUluQW5hbHl0aWNhbFRhYmxlIiwiaXNGb3JQYXN0ZSIsImlzSW5zZXJ0YWJsZSIsImdldFN0YXRpY2FsbHlSZXNvbHZhYmxlRXhwcmVzc2lvbiIsImlzQ3JlYXRlSGlkZGVuIiwiSW5saW5lQ3JlYXRpb25Sb3dzIiwiaW5saW5lQ3JlYXRpb25Sb3dzSGlkZGVuSW5FZGl0TW9kZSIsIklzQ3JlYXRlTW9kZSIsImlzRGVsZXRlSGlkZGVuIiwicGF0aERlbGV0YWJsZUV4cHJlc3Npb24iLCJpc0RlbGV0YWJsZSIsIkFuYWx5dGljYWxMaXN0UGFnZSIsInVwZGF0ZU9uTmF2aWdhdGlvbiIsIl90eXBlIiwibm90RXF1YWwiLCJlbmFibGVQYXN0ZSIsImluY2x1ZGVzIiwiaXNVcGRhdGVIaWRkZW4iLCJtYXNzRWRpdEVuYWJsZWRJbk1hbmlmZXN0IiwibWFzc0VkaXQiLCJPYmplY3RQYWdlIiwiRnJlZVN0eWxlUGFnZSIsInJlc3RyaWN0aW9uc0luc2VydGFibGUiLCJpbmRleE9mIiwibmF2aWdhdGlvblByb3BlcnRpZXMiLCJsYXN0TmF2IiwicGFydG5lciIsImlzTmF2aWdhdGlvblByb3BlcnR5IiwiZGlzYWJsZUFkZFJvd0J1dHRvbkZvckVtcHR5RGF0YSIsImZvcm1hdFJlc3VsdCIsInRhYmxlRm9ybWF0dGVycyIsInZhbGlkYXRlQ3JlYXRpb25Sb3dGaWVsZHMiLCJmb3JDb250ZXh0TWVudSIsImNvbmRpdGlvbnMiLCJjb250ZXh0UGF0aCIsImlzRHJhZnRFbmFibGVkIiwicHVzaCIsIkNvbGxlY3Rpb25UeXBlIiwicmVzb2x2ZUFic29sdXRlUGF0aCIsInRhcmdldCIsImxlc3NPckVxdWFsIiwiY3JlYXRlRW5hYmxlbWVudCIsImRlbGV0YWJsZUNvbnRleHRzIiwidW5TYXZlZENvbnRleHRzIiwiZHJhZnRzV2l0aERlbGV0YWJsZUFjdGl2ZSIsImRyYWZ0c1dpdGhOb25EZWxldGFibGVBY3RpdmUiLCJncmVhdGVyVGhhbiIsInNlbGVjdGVkQ29udGV4dHNQYXRoIiwicGFzdGVFbmFibGVtZW50UGF0aCIsInRhYmxlVHlwZSIsImhhc0NlbGxTZWxlY3RvciIsImlzT25seUR5bmFtaWNPbkN1cnJlbnRFbnRpdHkiLCJudW1iZXJPZlNlbGVjdGVkQ29udGV4dFByb3BlcnR5IiwidXBkYXRhYmxlQ29udGV4dFByb3BlcnR5IiwibnVtYmVyT2ZTZWxlY3RlZENvbnRleHRzIiwiZ3JlYXRlck9yRXF1YWwiLCJudW1iZXJPZlVwZGF0YWJsZUNvbnRleHRzIiwiYkRpc3BsYXlNb2RlIiwiaXNJbkRpc3BsYXlNb2RlIiwicnVudGltZUJpbmRpbmciLCJjdXRhYmxlQ29udGV4dHNQYXRoIiwiY29weWFibGVDb250ZXh0c1BhdGgiLCJtb3ZlVXBEb3duVmlzaWJpbGl0eSIsInNpbmdsZUNvbnRleHRNb3ZhYmxlVXAiLCJzaW5nbGVDb250ZXh0TW92YWJsZURvd24iLCJjaGVja011bHRpcGxlVmlzdWFsaXphdGlvbiIsImdldE1hbmlmZXN0V3JhcHBlciIsImhhc0lubGluZUVkaXQiLCJ0ZW1wbGF0ZVR5cGUiLCJoYXNNdWx0aXBsZVZpc3VhbGl6YXRpb25zIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJTdGFuZGFyZEFjdGlvbnMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBCb29sZWFuLCBFbnRpdHlTZXQgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXNcIjtcbmltcG9ydCB0eXBlIHsgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uLCBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB9IGZyb20gXCJzYXAvZmUvYmFzZS9CaW5kaW5nVG9vbGtpdFwiO1xuaW1wb3J0IHtcblx0YW5kLFxuXHRjb21waWxlRXhwcmVzc2lvbixcblx0Y29uc3RhbnQsXG5cdGVxdWFsLFxuXHRmb3JtYXRSZXN1bHQsXG5cdGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbixcblx0Z2V0U3RhdGljYWxseVJlc29sdmFibGVFeHByZXNzaW9uLFxuXHRncmVhdGVyT3JFcXVhbCxcblx0Z3JlYXRlclRoYW4sXG5cdGlmRWxzZSxcblx0aXNDb25zdGFudCxcblx0bGVuZ3RoLFxuXHRsZXNzT3JFcXVhbCxcblx0bm90LFxuXHRub3RFcXVhbCxcblx0b3IsXG5cdHBhdGhJbk1vZGVsXG59IGZyb20gXCJzYXAvZmUvYmFzZS9CaW5kaW5nVG9vbGtpdFwiO1xuaW1wb3J0IHR5cGUgeyBQYWdlQ29udGV4dFBhdGhUYXJnZXQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9UZW1wbGF0ZUNvbnZlcnRlclwiO1xuaW1wb3J0IHR5cGUgeyBCYXNlQWN0aW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvQ29tbW9uL0FjdGlvblwiO1xuaW1wb3J0IE1vZGVsSGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01vZGVsSGVscGVyXCI7XG5pbXBvcnQgeyBpc0VudGl0eVNldCwgaXNOYXZpZ2F0aW9uUHJvcGVydHksIGlzU2luZ2xldG9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvVHlwZUd1YXJkc1wiO1xuaW1wb3J0IHtcblx0Z2V0UmVsYXRpdmVQYXRocyxcblx0Z2V0VGFyZ2V0T2JqZWN0UGF0aCxcblx0aXNQYXRoRGVsZXRhYmxlLFxuXHRpc1BhdGhJbnNlcnRhYmxlLFxuXHRpc1BhdGhVcGRhdGFibGVcbn0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvRGF0YU1vZGVsUGF0aEhlbHBlclwiO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1yZXN0cmljdGVkLWltcG9ydHNcbmltcG9ydCB0YWJsZUZvcm1hdHRlcnMgZnJvbSBcInNhcC9mZS9tYWNyb3MvZm9ybWF0dGVycy9UYWJsZUZvcm1hdHRlclwiO1xuaW1wb3J0IHsgVUksIHNpbmdsZXRvblBhdGhWaXNpdG9yIH0gZnJvbSBcIi4uLy4uLy4uLy4uL2hlbHBlcnMvQmluZGluZ0hlbHBlclwiO1xuaW1wb3J0IHR5cGUgQ29udmVydGVyQ29udGV4dCBmcm9tIFwiLi4vLi4vLi4vQ29udmVydGVyQ29udGV4dFwiO1xuaW1wb3J0IHsgQWN0aW9uVHlwZSwgQ3JlYXRpb25Nb2RlLCBUZW1wbGF0ZVR5cGUgfSBmcm9tIFwiLi4vLi4vLi4vTWFuaWZlc3RTZXR0aW5nc1wiO1xuaW1wb3J0IHsgZ2V0SW5zaWdodHNFbmFibGVtZW50LCBnZXRJbnNpZ2h0c1Zpc2liaWxpdHkgfSBmcm9tIFwiLi4vLi4vLi4vaGVscGVycy9JbnNpZ2h0c0hlbHBlcnNcIjtcbmltcG9ydCB0eXBlIHsgVGFibGVDb250cm9sQ29uZmlndXJhdGlvbiB9IGZyb20gXCIuLi9UYWJsZVwiO1xuXG5leHBvcnQgdHlwZSBTdGFuZGFyZEFjdGlvbiA9IEJhc2VBY3Rpb24gJiB7XG5cdHR5cGU6IEFjdGlvblR5cGUuU3RhbmRhcmQ7XG5cdGlzVGVtcGxhdGVkPzogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb247XG5cdHZpc2libGU6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uO1xuXHR2aXNpYmxlRXhwcmVzc2lvbj86IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPjtcblx0ZW5hYmxlZDogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb247XG5cdGVuYWJsZWRGb3JDb250ZXh0TWVudT86IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uO1xufTtcblxudHlwZSBFeHByZXNzaW9uUmVzdHJpY3Rpb25zVHlwZSA9IHtcblx0ZXhwcmVzc2lvbjogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+O1xuXHRuYXZpZ2F0aW9uRXhwcmVzc2lvbjogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+O1xufTtcbnR5cGUgU3RhbmRhcmRBY3Rpb25zUmVzdHJpY3Rpb25zVHlwZSA9IFJlY29yZDxzdHJpbmcsIEV4cHJlc3Npb25SZXN0cmljdGlvbnNUeXBlPjtcblxuZXhwb3J0IHR5cGUgU3RhbmRhcmRBY3Rpb25zQ29udGV4dCA9IHtcblx0Y29sbGVjdGlvblBhdGg6IHN0cmluZztcblx0aGlkZGVuQW5ub3RhdGlvbjoge1xuXHRcdGNyZWF0ZTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+O1xuXHRcdGRlbGV0ZTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+O1xuXHRcdHVwZGF0ZTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+O1xuXHR9O1xuXHRjcmVhdGlvbk1vZGU6IENyZWF0aW9uTW9kZTtcblx0aXNEcmFmdE9yU3RpY2t5U3VwcG9ydGVkOiBib29sZWFuO1xuXHRuZXdBY3Rpb24/OiB7XG5cdFx0bmFtZTogc3RyaW5nO1xuXHRcdGF2YWlsYWJsZTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+O1xuXHR9O1xuXHR0YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbjogVGFibGVDb250cm9sQ29uZmlndXJhdGlvbjtcblx0cmVzdHJpY3Rpb25zOiBTdGFuZGFyZEFjdGlvbnNSZXN0cmljdGlvbnNUeXBlO1xufTtcblxuZXhwb3J0IGNvbnN0IFN0YW5kYXJkQWN0aW9uS2V5cyA9IHtcblx0Q3V0OiBcIlN0YW5kYXJkQWN0aW9uOjpDdXRcIixcblx0Q29weTogXCJTdGFuZGFyZEFjdGlvbjo6Q29weVwiLFxuXHRDcmVhdGU6IFwiU3RhbmRhcmRBY3Rpb246OkNyZWF0ZVwiLFxuXHREZWxldGU6IFwiU3RhbmRhcmRBY3Rpb246OkRlbGV0ZVwiLFxuXHRDcmVhdGlvblJvdzogXCJTdGFuZGFyZEFjdGlvbjo6Q3JlYXRpb25Sb3dcIixcblx0UGFzdGU6IFwiU3RhbmRhcmRBY3Rpb246OlBhc3RlXCIsXG5cdE1hc3NFZGl0OiBcIlN0YW5kYXJkQWN0aW9uOjpNYXNzRWRpdFwiLFxuXHRJbnNpZ2h0czogXCJTdGFuZGFyZEFjdGlvbjo6SW5zaWdodHNcIixcblx0TW92ZVVwOiBcIlN0YW5kYXJkQWN0aW9uOjpNb3ZlVXBcIixcblx0TW92ZURvd246IFwiU3RhbmRhcmRBY3Rpb246Ok1vdmVEb3duXCJcbn07XG5cbi8qKlxuICogR2VuZXJhdGVzIGNvbnRleHQgZm9yIHRoZSBzdGFuZGFyZCBhY3Rpb25zLlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHRcbiAqIEBwYXJhbSBjcmVhdGlvbk1vZGVcbiAqIEBwYXJhbSB0YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvblxuICogQHJldHVybnMgIFRoZSBjb250ZXh0IGZvciB0YWJsZSBhY3Rpb25zXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZW5lcmF0ZVN0YW5kYXJkQWN0aW9uc0NvbnRleHQoXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pixcblx0Y3JlYXRpb25Nb2RlOiBDcmVhdGlvbk1vZGUsXG5cdHRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uOiBUYWJsZUNvbnRyb2xDb25maWd1cmF0aW9uXG4pOiBTdGFuZGFyZEFjdGlvbnNDb250ZXh0IHtcblx0cmV0dXJuIHtcblx0XHRjb2xsZWN0aW9uUGF0aDogZ2V0VGFyZ2V0T2JqZWN0UGF0aChjb252ZXJ0ZXJDb250ZXh0LmdldERhdGFNb2RlbE9iamVjdFBhdGgoKSksXG5cdFx0aGlkZGVuQW5ub3RhdGlvbjoge1xuXHRcdFx0Y3JlYXRlOiBpc0FjdGlvbkFubm90YXRlZEhpZGRlbihjb252ZXJ0ZXJDb250ZXh0LCBcIkNyZWF0ZUhpZGRlblwiKSxcblx0XHRcdGRlbGV0ZTogaXNBY3Rpb25Bbm5vdGF0ZWRIaWRkZW4oY29udmVydGVyQ29udGV4dCwgXCJEZWxldGVIaWRkZW5cIiksXG5cdFx0XHR1cGRhdGU6IGlzQWN0aW9uQW5ub3RhdGVkSGlkZGVuKGNvbnZlcnRlckNvbnRleHQsIFwiVXBkYXRlSGlkZGVuXCIpXG5cdFx0fSxcblx0XHRjcmVhdGlvbk1vZGU6IGNyZWF0aW9uTW9kZSxcblx0XHRpc0RyYWZ0T3JTdGlja3lTdXBwb3J0ZWQ6IGlzRHJhZnRPclN0aWNreVN1cHBvcnRlZChjb252ZXJ0ZXJDb250ZXh0KSxcblx0XHRuZXdBY3Rpb246IGdldE5ld0FjdGlvbihjb252ZXJ0ZXJDb250ZXh0KSxcblx0XHR0YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbjogdGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24sXG5cdFx0cmVzdHJpY3Rpb25zOiBnZXRSZXN0cmljdGlvbnMoY29udmVydGVyQ29udGV4dClcblx0fTtcbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgc3RpY2t5IG9yIGRyYWZ0IGlzIHN1cHBvcnRlZC5cbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0XG4gKiBAcmV0dXJucyBgdHJ1ZWAgaWYgaXQgaXMgc3VwcG9ydGVkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0RyYWZ0T3JTdGlja3lTdXBwb3J0ZWQoY29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+KTogYm9vbGVhbiB7XG5cdGNvbnN0IGRhdGFNb2RlbE9iamVjdFBhdGggPSBjb252ZXJ0ZXJDb250ZXh0LmdldERhdGFNb2RlbE9iamVjdFBhdGgoKTtcblx0Y29uc3QgYklzRHJhZnRTdXBwb3J0ZWQgPSBNb2RlbEhlbHBlci5pc09iamVjdFBhdGhEcmFmdFN1cHBvcnRlZChkYXRhTW9kZWxPYmplY3RQYXRoKTtcblx0Y29uc3QgYklzU3RpY2t5U2Vzc2lvblN1cHBvcnRlZCA9IChkYXRhTW9kZWxPYmplY3RQYXRoLnN0YXJ0aW5nRW50aXR5U2V0IGFzIEVudGl0eVNldCk/LmFubm90YXRpb25zPy5TZXNzaW9uPy5TdGlja3lTZXNzaW9uU3VwcG9ydGVkXG5cdFx0PyB0cnVlXG5cdFx0OiBmYWxzZTtcblxuXHRyZXR1cm4gYklzRHJhZnRTdXBwb3J0ZWQgfHwgYklzU3RpY2t5U2Vzc2lvblN1cHBvcnRlZDtcbn1cblxuLyoqXG4gKiBHZXRzIHRoZSBjb25maWd1cmVkIG5ld0FjdGlvbiBpbnRvIGFubm90YXRpb24uXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dFxuICogQHJldHVybnMgVGhlIG5ldyBhY3Rpb24gaW5mb1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0TmV3QWN0aW9uKFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD5cbik6IHsgbmFtZTogc3RyaW5nOyBhdmFpbGFibGU6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiB9IHwgdW5kZWZpbmVkIHtcblx0Y29uc3QgY3VycmVudEVudGl0eVNldCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0KCk7XG5cdGNvbnN0IG5ld0FjdGlvbiA9IGlzRW50aXR5U2V0KGN1cnJlbnRFbnRpdHlTZXQpXG5cdFx0PyBjdXJyZW50RW50aXR5U2V0LmFubm90YXRpb25zLkNvbW1vbj8uRHJhZnRSb290Py5OZXdBY3Rpb24gPz9cblx0XHQgIGN1cnJlbnRFbnRpdHlTZXQuYW5ub3RhdGlvbnMuU2Vzc2lvbj8uU3RpY2t5U2Vzc2lvblN1cHBvcnRlZD8uTmV3QWN0aW9uXG5cdFx0OiB1bmRlZmluZWQ7XG5cdGNvbnN0IG5ld0FjdGlvbk5hbWU6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uID0gbmV3QWN0aW9uPy50b1N0cmluZygpO1xuXHRpZiAobmV3QWN0aW9uTmFtZSkge1xuXHRcdGNvbnN0IGF2YWlsYWJsZVByb3BlcnR5ID0gY29udmVydGVyQ29udGV4dD8uZ2V0RW50aXR5VHlwZSgpLmFjdGlvbnNbbmV3QWN0aW9uTmFtZV0/LmFubm90YXRpb25zPy5Db3JlPy5PcGVyYXRpb25BdmFpbGFibGU7XG5cdFx0cmV0dXJuIHtcblx0XHRcdG5hbWU6IG5ld0FjdGlvbk5hbWUsXG5cdFx0XHRhdmFpbGFibGU6IGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbjxCb29sZWFuPihhdmFpbGFibGVQcm9wZXJ0eSwgW10sIHRydWUpXG5cdFx0fTtcblx0fVxuXHRyZXR1cm4gdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIEdldHMgdGhlIGJpbmRpbmcgZXhwcmVzc2lvbiBmb3IgdGhlIGFjdGlvbiB2aXNpYmlsaXR5IGNvbmZpZ3VyZWQgaW50byBhbm5vdGF0aW9uLlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHRcbiAqIEBwYXJhbSBzQW5ub3RhdGlvblRlcm1cbiAqIEBwYXJhbSBiV2l0aE5hdmlnYXRpb25QYXRoXG4gKiBAcmV0dXJucyBUaGUgYmluZGluZyBleHByZXNzaW9uIGZvciB0aGUgYWN0aW9uIHZpc2liaWxpdHlcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzQWN0aW9uQW5ub3RhdGVkSGlkZGVuKFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4sXG5cdHNBbm5vdGF0aW9uVGVybTogXCJDcmVhdGVIaWRkZW5cIiB8IFwiVXBkYXRlSGlkZGVuXCIgfCBcIkRlbGV0ZUhpZGRlblwiLFxuXHRiV2l0aE5hdmlnYXRpb25QYXRoID0gdHJ1ZVxuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+IHtcblx0Ly8gVGhlIGFubm90YXRpb25zIGluIHF1ZXN0aW9uIChDcmVhdGVIaWRkZW4sIERlbGV0ZUhpZGRlbiwgVXBkYXRlSGlkZGVuKSBtb3N0IHNwZWNpZmljYWxseSBjYW4gYmUgZGVmaW5lZCBvbiBFbnRpdHlTZXQuXG5cdC8vIEluIHNldmVyYWwgY2FzZXMsIGZhbGxiYWNrIHRvIEVudGl0eVR5cGUgbmVlZHMgdG8gYmUgY2hlY2tlZDpcblx0Ly8gLSBJbiBjYXNlIG9mIHNpbmdsZXRvbiAoYW5ub3RhdGlvbnMgZG8gbm90IGFwcGx5KVxuXHQvLyAtIEVudGl0eVNldCBjYW5ub3QgYmUgZGV0ZXJtaW5lZCAoY29udGFpbm1lbnQgb3Igbm8gbmF2aWdhdGlvblByb3BlcnR5QmluZGluZylcblx0Ly8gLSBFbnRpdHlTZXQgY2FuIGJlIGRldGVybWluZWQsIGJ1dCB0aGUgYW5ub3RhdGlvbiBpcyBub3QgZGVmaW5lZCB0aGVyZVxuXG5cdGNvbnN0IGN1cnJlbnRFbnRpdHlTZXQgPSBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVNldCgpO1xuXHRjb25zdCBhY3Rpb25Bbm5vdGF0aW9uVmFsdWUgPVxuXHRcdCghaXNTaW5nbGV0b24oY3VycmVudEVudGl0eVNldCkgJiYgY3VycmVudEVudGl0eVNldD8uYW5ub3RhdGlvbnMuVUk/LltzQW5ub3RhdGlvblRlcm1dKSB8fFxuXHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZSgpLmFubm90YXRpb25zLlVJPy5bc0Fubm90YXRpb25UZXJtXTtcblxuXHRpZiAoIWFjdGlvbkFubm90YXRpb25WYWx1ZSkge1xuXHRcdHJldHVybiBjb25zdGFudChmYWxzZSk7XG5cdH1cblxuXHRjb25zdCBkYXRhTW9kZWxPYmplY3RQYXRoID0gY29udmVydGVyQ29udGV4dC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCk7XG5cdGNvbnN0IHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMgPSBnZXRSZWxhdGl2ZVBhdGhzKGRhdGFNb2RlbE9iamVjdFBhdGgpO1xuXHRyZXR1cm4gZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKGFjdGlvbkFubm90YXRpb25WYWx1ZSwgdmlzaXRlZE5hdmlnYXRpb25QYXRocywgdW5kZWZpbmVkLCAocGF0aDogc3RyaW5nKSA9PlxuXHRcdHNpbmdsZXRvblBhdGhWaXNpdG9yKHBhdGgsIGNvbnZlcnRlckNvbnRleHQuZ2V0Q29udmVydGVkVHlwZXMoKSwgdmlzaXRlZE5hdmlnYXRpb25QYXRocylcblx0KTtcbn1cblxuLyoqXG4gKiBHZXRzIHRoZSBhbm5vdGF0ZWQgcmVzdHJpY3Rpb25zIGZvciB0aGUgYWN0aW9ucy5cbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0XG4gKiBAcmV0dXJucyBUaGUgcmVzdHJpY3Rpb24gaW5mb3JtYXRpb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFJlc3RyaWN0aW9ucyhjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4pOiBTdGFuZGFyZEFjdGlvbnNSZXN0cmljdGlvbnNUeXBlIHtcblx0Y29uc3QgZGF0YU1vZGVsT2JqZWN0UGF0aCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpO1xuXHRjb25zdCByZXN0cmljdGlvbnNEZWYgPSBbXG5cdFx0e1xuXHRcdFx0a2V5OiBcImlzSW5zZXJ0YWJsZVwiLFxuXHRcdFx0ZnVuY3Rpb246IGlzUGF0aEluc2VydGFibGVcblx0XHR9LFxuXHRcdHtcblx0XHRcdGtleTogXCJpc1VwZGF0YWJsZVwiLFxuXHRcdFx0ZnVuY3Rpb246IGlzUGF0aFVwZGF0YWJsZVxuXHRcdH0sXG5cdFx0e1xuXHRcdFx0a2V5OiBcImlzRGVsZXRhYmxlXCIsXG5cdFx0XHRmdW5jdGlvbjogaXNQYXRoRGVsZXRhYmxlXG5cdFx0fVxuXHRdO1xuXHRjb25zdCByZXN1bHQ6IFJlY29yZDxzdHJpbmcsIEV4cHJlc3Npb25SZXN0cmljdGlvbnNUeXBlPiA9IHt9O1xuXHRyZXN0cmljdGlvbnNEZWYuZm9yRWFjaChmdW5jdGlvbiAoZGVmKSB7XG5cdFx0Y29uc3QgZGVmRnVuY3Rpb24gPSBkZWZbXCJmdW5jdGlvblwiXTtcblx0XHRyZXN1bHRbZGVmLmtleV0gPSB7XG5cdFx0XHRleHByZXNzaW9uOiBkZWZGdW5jdGlvbi5hcHBseShudWxsLCBbXG5cdFx0XHRcdGRhdGFNb2RlbE9iamVjdFBhdGgsXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRwYXRoVmlzaXRvcjogKHBhdGg6IHN0cmluZywgbmF2aWdhdGlvblBhdGhzOiBzdHJpbmdbXSkgPT5cblx0XHRcdFx0XHRcdHNpbmdsZXRvblBhdGhWaXNpdG9yKHBhdGgsIGNvbnZlcnRlckNvbnRleHQuZ2V0Q29udmVydGVkVHlwZXMoKSwgbmF2aWdhdGlvblBhdGhzKVxuXHRcdFx0XHR9XG5cdFx0XHRdKSxcblx0XHRcdG5hdmlnYXRpb25FeHByZXNzaW9uOiBkZWZGdW5jdGlvbi5hcHBseShudWxsLCBbXG5cdFx0XHRcdGRhdGFNb2RlbE9iamVjdFBhdGgsXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRpZ25vcmVUYXJnZXRDb2xsZWN0aW9uOiB0cnVlLFxuXHRcdFx0XHRcdGF1dGhvcml6ZVVucmVzb2x2YWJsZTogdHJ1ZSxcblx0XHRcdFx0XHRwYXRoVmlzaXRvcjogKHBhdGg6IHN0cmluZywgbmF2aWdhdGlvblBhdGhzOiBzdHJpbmdbXSkgPT5cblx0XHRcdFx0XHRcdHNpbmdsZXRvblBhdGhWaXNpdG9yKHBhdGgsIGNvbnZlcnRlckNvbnRleHQuZ2V0Q29udmVydGVkVHlwZXMoKSwgbmF2aWdhdGlvblBhdGhzKVxuXHRcdFx0XHR9XG5cdFx0XHRdKVxuXHRcdH07XG5cdH0pO1xuXHRyZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiB0ZW1wbGF0aW5nIGZvciBpbnNlcnQvdXBkYXRlIGFjdGlvbnMgaXMgbWFuZGF0b3J5LlxuICogQHBhcmFtIHN0YW5kYXJkQWN0aW9uc0NvbnRleHRcbiAqIEBwYXJhbSBpc0RyYWZ0T3JTdGlja3lcbiAqIEByZXR1cm5zIFRydWUgaWYgd2UgbmVlZCB0byB0ZW1wbGF0ZSBpbnNlcnQgb3IgdXBkYXRlIGFjdGlvbnMsIGZhbHNlIG90aGVyd2lzZVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0SW5zZXJ0VXBkYXRlQWN0aW9uc1RlbXBsYXRpbmcoc3RhbmRhcmRBY3Rpb25zQ29udGV4dDogU3RhbmRhcmRBY3Rpb25zQ29udGV4dCwgaXNEcmFmdE9yU3RpY2t5OiBib29sZWFuKTogYm9vbGVhbiB7XG5cdHJldHVybiBpc0RyYWZ0T3JTdGlja3kgfHwgc3RhbmRhcmRBY3Rpb25zQ29udGV4dC5jcmVhdGlvbk1vZGUgPT09IENyZWF0aW9uTW9kZS5FeHRlcm5hbDtcbn1cblxuLyoqXG4gKiBHZXRzIHRoZSBiaW5kaW5nIGV4cHJlc3Npb25zIGZvciB0aGUgcHJvcGVydGllcyBvZiB0aGUgJ0NyZWF0ZScgYWN0aW9uLlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHRcbiAqIEBwYXJhbSBzdGFuZGFyZEFjdGlvbnNDb250ZXh0XG4gKiBAcmV0dXJucyBUaGUgc3RhbmRhcmQgYWN0aW9uIGluZm9cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFN0YW5kYXJkQWN0aW9uQ3JlYXRlKFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4sXG5cdHN0YW5kYXJkQWN0aW9uc0NvbnRleHQ6IFN0YW5kYXJkQWN0aW9uc0NvbnRleHRcbik6IFN0YW5kYXJkQWN0aW9uIHtcblx0Y29uc3QgY3JlYXRlVmlzaWJpbGl0eSA9IGdldENyZWF0ZVZpc2liaWxpdHkoY29udmVydGVyQ29udGV4dCwgc3RhbmRhcmRBY3Rpb25zQ29udGV4dCk7XG5cdHJldHVybiB7XG5cdFx0aXNUZW1wbGF0ZWQ6IGNvbXBpbGVFeHByZXNzaW9uKGdldENyZWF0ZVRlbXBsYXRpbmcoc3RhbmRhcmRBY3Rpb25zQ29udGV4dCwgY3JlYXRlVmlzaWJpbGl0eSkpLFxuXHRcdHZpc2libGU6IGNvbXBpbGVFeHByZXNzaW9uKGNyZWF0ZVZpc2liaWxpdHkpLFxuXHRcdHZpc2libGVFeHByZXNzaW9uOiBjcmVhdGVWaXNpYmlsaXR5LFxuXHRcdGVuYWJsZWQ6IGNvbXBpbGVFeHByZXNzaW9uKGdldENyZWF0ZUVuYWJsZW1lbnQoY29udmVydGVyQ29udGV4dCwgc3RhbmRhcmRBY3Rpb25zQ29udGV4dCwgY3JlYXRlVmlzaWJpbGl0eSkpLFxuXHRcdGVuYWJsZWRGb3JDb250ZXh0TWVudTogY29tcGlsZUV4cHJlc3Npb24oZ2V0Q3JlYXRlRW5hYmxlbWVudChjb252ZXJ0ZXJDb250ZXh0LCBzdGFuZGFyZEFjdGlvbnNDb250ZXh0LCBjcmVhdGVWaXNpYmlsaXR5LCB0cnVlKSksXG5cdFx0a2V5OiBTdGFuZGFyZEFjdGlvbktleXMuQ3JlYXRlLFxuXHRcdHR5cGU6IEFjdGlvblR5cGUuU3RhbmRhcmRcblx0fTtcbn1cbi8qKlxuICogR2V0cyB0aGUgYmluZGluZyBleHByZXNzaW9ucyBmb3IgdGhlIHByb3BlcnRpZXMgb2YgdGhlICdDdXQnIGFjdGlvbi5cbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0XG4gKiBAcGFyYW0gc3RhbmRhcmRBY3Rpb25zQ29udGV4dFxuICogQHJldHVybnMgVGhlIHN0YW5kYXJkIGFjdGlvbiBpbmZvXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRTdGFuZGFyZEFjdGlvbkN1dChcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+LFxuXHRzdGFuZGFyZEFjdGlvbnNDb250ZXh0OiBTdGFuZGFyZEFjdGlvbnNDb250ZXh0XG4pOiBTdGFuZGFyZEFjdGlvbiB7XG5cdGNvbnN0IGN1dFZpc2liaWxpdHkgPSBnZXRDdXRWaXNpYmlsaXR5KGNvbnZlcnRlckNvbnRleHQsIHN0YW5kYXJkQWN0aW9uc0NvbnRleHQpO1xuXHRyZXR1cm4ge1xuXHRcdGlzVGVtcGxhdGVkOiBjb21waWxlRXhwcmVzc2lvbihnZXREZWZhdWx0VGVtcGxhdGluZyhjdXRWaXNpYmlsaXR5KSksXG5cdFx0dmlzaWJsZTogY29tcGlsZUV4cHJlc3Npb24oY3V0VmlzaWJpbGl0eSksXG5cdFx0ZW5hYmxlZDogY29tcGlsZUV4cHJlc3Npb24oZ2V0Q3V0RW5hYmxlbWVudChjdXRWaXNpYmlsaXR5LCBzdGFuZGFyZEFjdGlvbnNDb250ZXh0LCBmYWxzZSkpLFxuXHRcdGVuYWJsZWRGb3JDb250ZXh0TWVudTogY29tcGlsZUV4cHJlc3Npb24oZ2V0Q3V0RW5hYmxlbWVudChjdXRWaXNpYmlsaXR5LCBzdGFuZGFyZEFjdGlvbnNDb250ZXh0LCB0cnVlKSksXG5cdFx0a2V5OiBTdGFuZGFyZEFjdGlvbktleXMuQ3V0LFxuXHRcdHR5cGU6IEFjdGlvblR5cGUuU3RhbmRhcmRcblx0fTtcbn1cblxuLyoqXG4gKiBHZXRzIHRoZSBiaW5kaW5nIGV4cHJlc3Npb25zIGZvciB0aGUgcHJvcGVydGllcyBvZiB0aGUgJ0NvcHknIGFjdGlvbi5cbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0XG4gKiBAcGFyYW0gc3RhbmRhcmRBY3Rpb25zQ29udGV4dFxuICogQHJldHVybnMgVGhlIHN0YW5kYXJkIGFjdGlvbiBpbmZvXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRTdGFuZGFyZEFjdGlvbkNvcHkoXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pixcblx0c3RhbmRhcmRBY3Rpb25zQ29udGV4dDogU3RhbmRhcmRBY3Rpb25zQ29udGV4dFxuKTogU3RhbmRhcmRBY3Rpb24ge1xuXHRjb25zdCBjb3B5VmlzaWJpbGl0eSA9IGdldENvcHlWaXNpYmlsaXR5KGNvbnZlcnRlckNvbnRleHQsIHN0YW5kYXJkQWN0aW9uc0NvbnRleHQpO1xuXHRyZXR1cm4ge1xuXHRcdGlzVGVtcGxhdGVkOiBjb21waWxlRXhwcmVzc2lvbihnZXREZWZhdWx0VGVtcGxhdGluZyhjb3B5VmlzaWJpbGl0eSkpLFxuXHRcdHZpc2libGU6IGNvbXBpbGVFeHByZXNzaW9uKGNvcHlWaXNpYmlsaXR5KSxcblx0XHRlbmFibGVkOiBjb21waWxlRXhwcmVzc2lvbihnZXRDb3B5RW5hYmxlbWVudChjb3B5VmlzaWJpbGl0eSwgZmFsc2UpKSxcblx0XHRlbmFibGVkRm9yQ29udGV4dE1lbnU6IGNvbXBpbGVFeHByZXNzaW9uKGdldENvcHlFbmFibGVtZW50KGNvcHlWaXNpYmlsaXR5LCB0cnVlKSksXG5cdFx0a2V5OiBTdGFuZGFyZEFjdGlvbktleXMuQ29weSxcblx0XHR0eXBlOiBBY3Rpb25UeXBlLlN0YW5kYXJkXG5cdH07XG59XG5cbi8qKlxuICogR2V0cyB0aGUgYmluZGluZyBleHByZXNzaW9ucyBmb3IgdGhlIHByb3BlcnRpZXMgb2YgdGhlICdNb3ZlIHVwJyBhbmQgJ01vdmUgZG93bicgYWN0aW9ucy5cbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0XG4gKiBAcGFyYW0gc3RhbmRhcmRBY3Rpb25zQ29udGV4dFxuICogQHBhcmFtIGZvclVwXG4gKiBAcmV0dXJucyBUaGUgc3RhbmRhcmQgYWN0aW9uIGluZm9cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFN0YW5kYXJkQWN0aW9uTW92ZVVwRG93bihcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+LFxuXHRzdGFuZGFyZEFjdGlvbnNDb250ZXh0OiBTdGFuZGFyZEFjdGlvbnNDb250ZXh0LFxuXHRmb3JVcDogYm9vbGVhblxuKTogU3RhbmRhcmRBY3Rpb24ge1xuXHRjb25zdCBjYW5DaGFuZ2VTaWJsaW5nID1cblx0XHRjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGUoKS5hbm5vdGF0aW9ucy5IaWVyYXJjaHk/Lltcblx0XHRcdGBSZWN1cnNpdmVIaWVyYXJjaHlBY3Rpb25zIyR7c3RhbmRhcmRBY3Rpb25zQ29udGV4dC50YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbi5oaWVyYXJjaHlRdWFsaWZpZXIgPz8gXCJcIn1gXG5cdFx0XT8uQ2hhbmdlTmV4dFNpYmxpbmdBY3Rpb24gIT09IHVuZGVmaW5lZDtcblx0Y29uc3QgbW92ZVZpc2liaWxpdHkgPSBhbmQoZ2V0Q3V0VmlzaWJpbGl0eShjb252ZXJ0ZXJDb250ZXh0LCBzdGFuZGFyZEFjdGlvbnNDb250ZXh0KSwgY2FuQ2hhbmdlU2libGluZyk7XG5cdHJldHVybiB7XG5cdFx0aXNUZW1wbGF0ZWQ6IGNvbXBpbGVFeHByZXNzaW9uKGdldERlZmF1bHRUZW1wbGF0aW5nKG1vdmVWaXNpYmlsaXR5KSksXG5cdFx0dmlzaWJsZTogY29tcGlsZUV4cHJlc3Npb24obW92ZVZpc2liaWxpdHkpLFxuXHRcdGVuYWJsZWQ6IGNvbXBpbGVFeHByZXNzaW9uKGdldE1vdmVVcERvd25FbmFibGVtZW50KG1vdmVWaXNpYmlsaXR5LCBzdGFuZGFyZEFjdGlvbnNDb250ZXh0LCBmb3JVcCkpLFxuXHRcdGVuYWJsZWRGb3JDb250ZXh0TWVudTogY29tcGlsZUV4cHJlc3Npb24oZ2V0TW92ZVVwRG93bkVuYWJsZW1lbnQobW92ZVZpc2liaWxpdHksIHN0YW5kYXJkQWN0aW9uc0NvbnRleHQsIGZvclVwLCB0cnVlKSksXG5cdFx0a2V5OiBmb3JVcCA/IFN0YW5kYXJkQWN0aW9uS2V5cy5Nb3ZlVXAgOiBTdGFuZGFyZEFjdGlvbktleXMuTW92ZURvd24sXG5cdFx0dHlwZTogQWN0aW9uVHlwZS5TdGFuZGFyZFxuXHR9O1xufVxuXG4vKipcbiAqIEdldHMgdGhlIGJpbmRpbmcgZXhwcmVzc2lvbnMgZm9yIHRoZSBwcm9wZXJ0aWVzIG9mIHRoZSAnRGVsZXRlJyBhY3Rpb24uXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dFxuICogQHBhcmFtIHN0YW5kYXJkQWN0aW9uc0NvbnRleHRcbiAqIEByZXR1cm5zIFRoZSBiaW5kaW5nIGV4cHJlc3Npb25zIGZvciB0aGUgcHJvcGVydGllcyBvZiB0aGUgJ0RlbGV0ZScgYWN0aW9uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0U3RhbmRhcmRBY3Rpb25EZWxldGUoXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pixcblx0c3RhbmRhcmRBY3Rpb25zQ29udGV4dDogU3RhbmRhcmRBY3Rpb25zQ29udGV4dFxuKTogU3RhbmRhcmRBY3Rpb24ge1xuXHRjb25zdCBkZWxldGVWaXNpYmlsaXR5ID0gZ2V0RGVsZXRlVmlzaWJpbGl0eShjb252ZXJ0ZXJDb250ZXh0LCBzdGFuZGFyZEFjdGlvbnNDb250ZXh0KTtcblxuXHRyZXR1cm4ge1xuXHRcdGlzVGVtcGxhdGVkOiBjb21waWxlRXhwcmVzc2lvbihnZXREZWZhdWx0VGVtcGxhdGluZyhkZWxldGVWaXNpYmlsaXR5KSksXG5cdFx0dmlzaWJsZTogY29tcGlsZUV4cHJlc3Npb24oZGVsZXRlVmlzaWJpbGl0eSksXG5cdFx0ZW5hYmxlZDogY29tcGlsZUV4cHJlc3Npb24oZ2V0RGVsZXRlRW5hYmxlbWVudChjb252ZXJ0ZXJDb250ZXh0LCBzdGFuZGFyZEFjdGlvbnNDb250ZXh0LCBkZWxldGVWaXNpYmlsaXR5LCBmYWxzZSkpLFxuXHRcdGVuYWJsZWRGb3JDb250ZXh0TWVudTogY29tcGlsZUV4cHJlc3Npb24oZ2V0RGVsZXRlRW5hYmxlbWVudChjb252ZXJ0ZXJDb250ZXh0LCBzdGFuZGFyZEFjdGlvbnNDb250ZXh0LCBkZWxldGVWaXNpYmlsaXR5LCB0cnVlKSksXG5cdFx0a2V5OiBTdGFuZGFyZEFjdGlvbktleXMuRGVsZXRlLFxuXHRcdHR5cGU6IEFjdGlvblR5cGUuU3RhbmRhcmRcblx0fTtcbn1cblxuLyoqXG4gKiBHZXRzIHRoZSBiaW5kaW5nIGV4cHJlc3Npb25zIGZvciB0aGUgcHJvcGVydGllcyBvZiB0aGUgJ0NyZWF0aW9uUm93JyBhY3Rpb24uXG4gKlxuICogTm90ZSB0aGF0IHRoaXMgaXMgbm90IGFjdHVhbGx5IGFuIGFjdGlvbiB0aGF0IGlzIHRlbXBsYXRlZCBhcyBhIGJ1dHRvbiBidXQgaXRzIHByb3BlcnRpZXMgYXJlIHVzZWQgdG8gY29uZmlndXJlIGFuIE1EQyBmZWF0dXJlLlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHRcbiAqIEBwYXJhbSBzdGFuZGFyZEFjdGlvbnNDb250ZXh0XG4gKiBAcmV0dXJucyBTdGFuZGFyZEFjdGlvblxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q3JlYXRpb25Sb3coXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pixcblx0c3RhbmRhcmRBY3Rpb25zQ29udGV4dDogU3RhbmRhcmRBY3Rpb25zQ29udGV4dFxuKTogU3RhbmRhcmRBY3Rpb24ge1xuXHRjb25zdCBjcmVhdGlvblJvd1Zpc2liaWxpdHkgPSBnZXRDcmVhdGVWaXNpYmlsaXR5KGNvbnZlcnRlckNvbnRleHQsIHN0YW5kYXJkQWN0aW9uc0NvbnRleHQsIHRydWUpO1xuXG5cdHJldHVybiB7XG5cdFx0aXNUZW1wbGF0ZWQ6IGNvbXBpbGVFeHByZXNzaW9uKGdldENyZWF0ZVRlbXBsYXRpbmcoc3RhbmRhcmRBY3Rpb25zQ29udGV4dCwgY3JlYXRpb25Sb3dWaXNpYmlsaXR5LCB0cnVlKSksXG5cdFx0dmlzaWJsZTogY29tcGlsZUV4cHJlc3Npb24oY3JlYXRpb25Sb3dWaXNpYmlsaXR5KSxcblx0XHRlbmFibGVkOiBjb21waWxlRXhwcmVzc2lvbihnZXRDcmVhdGlvblJvd0VuYWJsZW1lbnQoY29udmVydGVyQ29udGV4dCwgc3RhbmRhcmRBY3Rpb25zQ29udGV4dCwgY3JlYXRpb25Sb3dWaXNpYmlsaXR5KSksXG5cdFx0a2V5OiBTdGFuZGFyZEFjdGlvbktleXMuQ3JlYXRpb25Sb3csXG5cdFx0dHlwZTogQWN0aW9uVHlwZS5TdGFuZGFyZFxuXHR9O1xufVxuXG4vKipcbiAqIEdldHMgdGhlIGJpbmRpbmcgZXhwcmVzc2lvbiBmb3IgdGhlICd2aXNpYmxlJyBwcm9wZXJ0eSBvZiB0aGUgJ0N1dCcgYWN0aW9uLlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHRcbiAqIEBwYXJhbSBzdGFuZGFyZEFjdGlvbnNDb250ZXh0XG4gKiBAcmV0dXJucyBUaGUgYmluZGluZyBleHByZXNzaW9uIGZvciB0aGUgJ3Zpc2libGUnIHByb3BlcnR5IG9mIHRoZSAnQ3V0JyBhY3Rpb24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRDdXRWaXNpYmlsaXR5KFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4sXG5cdHN0YW5kYXJkQWN0aW9uc0NvbnRleHQ6IFN0YW5kYXJkQWN0aW9uc0NvbnRleHRcbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiB7XG5cdGNvbnN0IHBhdGhVcGRhdGFibGVFeHByZXNzaW9uID0gc3RhbmRhcmRBY3Rpb25zQ29udGV4dC5yZXN0cmljdGlvbnM/LmlzVXBkYXRhYmxlPy5leHByZXNzaW9uO1xuXHRjb25zdCB0ZW1wbGF0ZUJpbmRpbmdFeHByZXNzaW9uID1cblx0XHRjb252ZXJ0ZXJDb250ZXh0LmdldFRlbXBsYXRlVHlwZSgpICE9PSBUZW1wbGF0ZVR5cGUuTGlzdFJlcG9ydFxuXHRcdFx0PyBVSS5Jc0VkaXRhYmxlXG5cdFx0XHQ6IChjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVNldCgpIGFzIEVudGl0eVNldCk/LmFubm90YXRpb25zLkNvbW1vbj8uRHJhZnRSb290ICE9PSB1bmRlZmluZWQ7IC8vIFRvIGFsbG93IGN1dC9wYXN0ZSBmb3IgYSBkcmFmdCBUcmVlVGFibGUgaW4gYSBMaXN0UmVwb3J0XG5cdHJldHVybiBpZkVsc2UoXG5cdFx0ZXF1YWwoc3RhbmRhcmRBY3Rpb25zQ29udGV4dC50YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbj8udHlwZSwgXCJUcmVlVGFibGVcIiksXG5cdFx0YW5kKFxuXHRcdFx0c3RhbmRhcmRBY3Rpb25zQ29udGV4dC50YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbi5pc0hpZXJhcmNoeVBhcmVudE5vZGVVcGRhdGFibGUhLFxuXHRcdFx0bm90KGFuZChpc0NvbnN0YW50KHBhdGhVcGRhdGFibGVFeHByZXNzaW9uKSwgZXF1YWwocGF0aFVwZGF0YWJsZUV4cHJlc3Npb24sIGZhbHNlKSkpLFxuXHRcdFx0dGVtcGxhdGVCaW5kaW5nRXhwcmVzc2lvblxuXHRcdCksXG5cdFx0ZmFsc2Vcblx0KTtcbn1cblxuLyoqXG4gKiBHZXRzIHRoZSBiaW5kaW5nIGV4cHJlc3Npb24gZm9yIHRoZSAndmlzaWJsZScgcHJvcGVydHkgb2YgdGhlICdDb3B5JyBhY3Rpb24uXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dFxuICogQHBhcmFtIHN0YW5kYXJkQWN0aW9uc0NvbnRleHRcbiAqIEByZXR1cm5zIFRoZSBiaW5kaW5nIGV4cHJlc3Npb24gZm9yIHRoZSAndmlzaWJsZScgcHJvcGVydHkgb2YgdGhlICdDb3B5JyBhY3Rpb24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRDb3B5VmlzaWJpbGl0eShcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+LFxuXHRzdGFuZGFyZEFjdGlvbnNDb250ZXh0OiBTdGFuZGFyZEFjdGlvbnNDb250ZXh0XG4pOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4ge1xuXHRjb25zdCBhdmFpbGFibGVDb3B5QWN0aW9uID0gY29udmVydGVyQ29udGV4dD8uZ2V0RW50aXR5VHlwZSgpLmFubm90YXRpb25zLkhpZXJhcmNoeT8uW1xuXHRcdGBSZWN1cnNpdmVIaWVyYXJjaHlBY3Rpb25zIyR7c3RhbmRhcmRBY3Rpb25zQ29udGV4dC50YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbi5oaWVyYXJjaHlRdWFsaWZpZXIgPz8gXCJcIn1gXG5cdF0/LkNvcHlBY3Rpb24gYXMgc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG5cdGlmICghYXZhaWxhYmxlQ29weUFjdGlvbikge1xuXHRcdHJldHVybiBjb25zdGFudChmYWxzZSk7XG5cdH1cblxuXHRjb25zdCB0ZW1wbGF0ZUJpbmRpbmdFeHByZXNzaW9uID1cblx0XHRjb252ZXJ0ZXJDb250ZXh0LmdldFRlbXBsYXRlVHlwZSgpICE9PSBUZW1wbGF0ZVR5cGUuTGlzdFJlcG9ydFxuXHRcdFx0PyBVSS5Jc0VkaXRhYmxlXG5cdFx0XHQ6IChjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVNldCgpIGFzIEVudGl0eVNldCk/LmFubm90YXRpb25zLkNvbW1vbj8uRHJhZnRSb290ICE9PSB1bmRlZmluZWQ7IC8vIFRvIGFsbG93IGN1dC9wYXN0ZSBmb3IgYSBkcmFmdCBUcmVlVGFibGUgaW4gYSBMaXN0UmVwb3J0XG5cdHJldHVybiBpZkVsc2UoZXF1YWwoc3RhbmRhcmRBY3Rpb25zQ29udGV4dC50YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbj8udHlwZSwgXCJUcmVlVGFibGVcIiksIHRlbXBsYXRlQmluZGluZ0V4cHJlc3Npb24sIGZhbHNlKTtcbn1cblxuLyoqXG4gKiBHZXRzIHRoZSBiaW5kaW5nIGV4cHJlc3Npb25zIGZvciB0aGUgcHJvcGVydGllcyBvZiB0aGUgJ1Bhc3RlJyBhY3Rpb24uXG4gKlxuICogTm90ZSB0aGF0IHRoaXMgaXMgbm90IGFjdHVhbGx5IGFuIGFjdGlvbiB0aGF0IGlzIGRpc3BsYXllZCBhcyBhIGJ1dHRvbiBidXQgaXRzIHByb3BlcnRpZXMgYXJlIHVzZWQgdG8gY29uZmlndXJlIGFuIE1EQyBmZWF0dXJlLlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHRcbiAqIEBwYXJhbSBzdGFuZGFyZEFjdGlvbnNDb250ZXh0XG4gKiBAcGFyYW0gaXNJbnNlcnRVcGRhdGVBY3Rpb25zVGVtcGxhdGVkXG4gKiBAcmV0dXJucyBUaGUgYmluZGluZyBleHByZXNzaW9ucyBmb3IgdGhlIHByb3BlcnRpZXMgb2YgdGhlICdQYXN0ZScgYWN0aW9uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0U3RhbmRhcmRBY3Rpb25QYXN0ZShcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+LFxuXHRzdGFuZGFyZEFjdGlvbnNDb250ZXh0OiBTdGFuZGFyZEFjdGlvbnNDb250ZXh0LFxuXHRpc0luc2VydFVwZGF0ZUFjdGlvbnNUZW1wbGF0ZWQ6IGJvb2xlYW5cbik6IFN0YW5kYXJkQWN0aW9uIHtcblx0Y29uc3QgY3V0VmlzaWJpbGl0eSA9IGdldEN1dFZpc2liaWxpdHkoY29udmVydGVyQ29udGV4dCwgc3RhbmRhcmRBY3Rpb25zQ29udGV4dCk7XG5cdGNvbnN0IGNvcHlWaXNpYmlsaXR5ID0gZ2V0Q29weVZpc2liaWxpdHkoY29udmVydGVyQ29udGV4dCwgc3RhbmRhcmRBY3Rpb25zQ29udGV4dCk7XG5cdGNvbnN0IGNyZWF0ZVZpc2liaWxpdHkgPSBnZXRDcmVhdGVWaXNpYmlsaXR5KGNvbnZlcnRlckNvbnRleHQsIHN0YW5kYXJkQWN0aW9uc0NvbnRleHQsIGZhbHNlLCB0cnVlKTtcblx0Y29uc3QgcGFzdGVWaXNpYmlsaXR5ID0gZ2V0UGFzdGVWaXNpYmlsaXR5KFxuXHRcdGNvbnZlcnRlckNvbnRleHQsXG5cdFx0c3RhbmRhcmRBY3Rpb25zQ29udGV4dCxcblx0XHRjcmVhdGVWaXNpYmlsaXR5LFxuXHRcdGN1dFZpc2liaWxpdHksXG5cdFx0Y29weVZpc2liaWxpdHksXG5cdFx0aXNJbnNlcnRVcGRhdGVBY3Rpb25zVGVtcGxhdGVkXG5cdCk7XG5cdGNvbnN0IHBhc3RlRW5hYmxlbWVudCA9IGdldFBhc3RlRW5hYmxlbWVudChwYXN0ZVZpc2liaWxpdHksIHN0YW5kYXJkQWN0aW9uc0NvbnRleHQsIGZhbHNlKTtcblx0Y29uc3QgcGFzdGVFbmFibGVtZW50Rm9yQ29udGV4dE1lbnUgPSBnZXRQYXN0ZUVuYWJsZW1lbnQocGFzdGVWaXNpYmlsaXR5LCBzdGFuZGFyZEFjdGlvbnNDb250ZXh0LCB0cnVlKTtcblx0cmV0dXJuIHtcblx0XHR2aXNpYmxlOiBjb21waWxlRXhwcmVzc2lvbihwYXN0ZVZpc2liaWxpdHkpLFxuXHRcdGVuYWJsZWQ6IGNvbXBpbGVFeHByZXNzaW9uKHBhc3RlRW5hYmxlbWVudCksXG5cdFx0ZW5hYmxlZEZvckNvbnRleHRNZW51OiBjb21waWxlRXhwcmVzc2lvbihwYXN0ZUVuYWJsZW1lbnRGb3JDb250ZXh0TWVudSksXG5cdFx0a2V5OiBTdGFuZGFyZEFjdGlvbktleXMuUGFzdGUsXG5cdFx0dHlwZTogQWN0aW9uVHlwZS5TdGFuZGFyZFxuXHR9O1xufVxuXG4vKipcbiAqIEdldHMgdGhlIGJpbmRpbmcgZXhwcmVzc2lvbnMgZm9yIHRoZSBwcm9wZXJ0aWVzIG9mIHRoZSAnTWFzc0VkaXQnIGFjdGlvbi5cbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0XG4gKiBAcGFyYW0gc3RhbmRhcmRBY3Rpb25zQ29udGV4dFxuICogQHJldHVybnMgVGhlIGJpbmRpbmcgZXhwcmVzc2lvbnMgZm9yIHRoZSBwcm9wZXJ0aWVzIG9mIHRoZSAnTWFzc0VkaXQnIGFjdGlvbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFN0YW5kYXJkQWN0aW9uTWFzc0VkaXQoXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pixcblx0c3RhbmRhcmRBY3Rpb25zQ29udGV4dDogU3RhbmRhcmRBY3Rpb25zQ29udGV4dFxuKTogU3RhbmRhcmRBY3Rpb24ge1xuXHRjb25zdCBtYXNzRWRpdFZpc2liaWxpdHkgPSBnZXRNYXNzRWRpdFZpc2liaWxpdHkoY29udmVydGVyQ29udGV4dCwgc3RhbmRhcmRBY3Rpb25zQ29udGV4dCk7XG5cblx0cmV0dXJuIHtcblx0XHRpc1RlbXBsYXRlZDogY29tcGlsZUV4cHJlc3Npb24oZ2V0RGVmYXVsdFRlbXBsYXRpbmcobWFzc0VkaXRWaXNpYmlsaXR5KSksXG5cdFx0dmlzaWJsZTogY29tcGlsZUV4cHJlc3Npb24obWFzc0VkaXRWaXNpYmlsaXR5KSxcblx0XHQvLyBGb3IgdGhlIGNvbnRleHQgbWVudSwgdGhlIHZpc2liaWxpdHkgc2hvdWxkIGFsc28gY29uc2lkZXIgdGhlICdpbmFjdGl2ZUNvbnRleHQnIHByb3BlcnR5OlxuXHRcdC8vIG9ubHkgd2hlbiBhdCBsZWFzdCBvbmUgc2VsZWN0ZWQgY29udGV4dCBpcyBhY3RpdmUgKGkuZS4gXCJjb250ZXh0bWVudS9pbmFjdGl2ZUNvbnRleHRcIiBpcyBmYWxzZSksIHRoZSBhY3Rpb24gc2hvdWxkIGJlIHZpc2libGUgaW4gdGhlIGNvbnRleHQgbWVudVxuXHRcdC8vIFRoaXMgaXMgb25seSByZWxldmFudCB3aGVuIHRoZSB0YWJsZSBtYW5pZmVzdCBzZXR0aW5nIFwiY3JlYXRpb25Nb2RlXCIgaXMgXCJJbmxpbmVDcmVhdGlvblJvd3NcIlxuXHRcdHZpc2libGVGb3JDb250ZXh0TWVudTogY29tcGlsZUV4cHJlc3Npb24oXG5cdFx0XHRhbmQobWFzc0VkaXRWaXNpYmlsaXR5LCBlcXVhbChwYXRoSW5Nb2RlbChcImNvbnRleHRtZW51L2luYWN0aXZlQ29udGV4dFwiLCBcImludGVybmFsXCIpLCBmYWxzZSkpXG5cdFx0KSxcblx0XHRlbmFibGVkOiBjb21waWxlRXhwcmVzc2lvbihnZXRNYXNzRWRpdEVuYWJsZW1lbnQoY29udmVydGVyQ29udGV4dCwgc3RhbmRhcmRBY3Rpb25zQ29udGV4dCwgbWFzc0VkaXRWaXNpYmlsaXR5KSksXG5cdFx0ZW5hYmxlZEZvckNvbnRleHRNZW51OiBjb21waWxlRXhwcmVzc2lvbihnZXRNYXNzRWRpdEVuYWJsZW1lbnQoY29udmVydGVyQ29udGV4dCwgc3RhbmRhcmRBY3Rpb25zQ29udGV4dCwgbWFzc0VkaXRWaXNpYmlsaXR5LCB0cnVlKSksXG5cdFx0a2V5OiBTdGFuZGFyZEFjdGlvbktleXMuTWFzc0VkaXQsXG5cdFx0dHlwZTogQWN0aW9uVHlwZS5TdGFuZGFyZFxuXHR9O1xufVxuXG4vKipcbiAqIEdldHMgdGhlIGJpbmRpbmcgZXhwcmVzc2lvbnMgZm9yIHRoZSBwcm9wZXJ0aWVzIG9mIHRoZSAnQWRkQ2FyZHNUb0luc2lnaHRzJyBhY3Rpb24uXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dFxuICogQHBhcmFtIHN0YW5kYXJkQWN0aW9uc0NvbnRleHRcbiAqIEBwYXJhbSB2aXN1YWxpemF0aW9uUGF0aFxuICogQHJldHVybnMgVGhlIGJpbmRpbmcgZXhwcmVzc2lvbnMgZm9yIHRoZSBwcm9wZXJ0aWVzIG9mIHRoZSAnQWRkQ2FyZHNUb0luc2lnaHRzJyBhY3Rpb24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRTdGFuZGFyZEFjdGlvbkluc2lnaHRzKFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4sXG5cdHN0YW5kYXJkQWN0aW9uc0NvbnRleHQ6IFN0YW5kYXJkQWN0aW9uc0NvbnRleHQsXG5cdHZpc3VhbGl6YXRpb25QYXRoOiBzdHJpbmdcbik6IFN0YW5kYXJkQWN0aW9uIHtcblx0Y29uc3QgaW5zaWdodHNWaXNpYmlsaXR5ID0gZ2V0SW5zaWdodHNWaXNpYmlsaXR5KFwiVGFibGVcIiwgY29udmVydGVyQ29udGV4dCwgdmlzdWFsaXphdGlvblBhdGgsIHN0YW5kYXJkQWN0aW9uc0NvbnRleHQpO1xuXHRjb25zdCBpbnNpZ2h0c0VuYWJsZW1lbnQgPSBhbmQoaW5zaWdodHNWaXNpYmlsaXR5LCBnZXRJbnNpZ2h0c0VuYWJsZW1lbnQoKSk7XG5cdHJldHVybiB7XG5cdFx0aXNUZW1wbGF0ZWQ6IGNvbXBpbGVFeHByZXNzaW9uKGdldERlZmF1bHRUZW1wbGF0aW5nKGluc2lnaHRzVmlzaWJpbGl0eSkpLFxuXHRcdHZpc2libGU6IGNvbXBpbGVFeHByZXNzaW9uKGluc2lnaHRzVmlzaWJpbGl0eSksXG5cdFx0ZW5hYmxlZDogY29tcGlsZUV4cHJlc3Npb24oaW5zaWdodHNFbmFibGVtZW50KSxcblx0XHRrZXk6IFN0YW5kYXJkQWN0aW9uS2V5cy5JbnNpZ2h0cyxcblx0XHR0eXBlOiBBY3Rpb25UeXBlLlN0YW5kYXJkXG5cdH07XG59XG5cbi8qKlxuICogR2V0cyB0aGUgYmluZGluZyBleHByZXNzaW9uIGZvciB0aGUgdGVtcGxhdGluZyBvZiB0aGUgJ0NyZWF0ZScgYWN0aW9uLlxuICogQHBhcmFtIHN0YW5kYXJkQWN0aW9uc0NvbnRleHRcbiAqIEBwYXJhbSBjcmVhdGVWaXNpYmlsaXR5XG4gKiBAcGFyYW0gaXNGb3JDcmVhdGlvblJvd1xuICogQHJldHVybnMgVGhlIGNyZWF0ZSBiaW5kaW5nIGV4cHJlc3Npb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldENyZWF0ZVRlbXBsYXRpbmcoXG5cdHN0YW5kYXJkQWN0aW9uc0NvbnRleHQ6IFN0YW5kYXJkQWN0aW9uc0NvbnRleHQsXG5cdGNyZWF0ZVZpc2liaWxpdHk6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPixcblx0aXNGb3JDcmVhdGlvblJvdyA9IGZhbHNlXG4pOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4ge1xuXHQvL1RlbXBsYXRpbmcgb2YgQ3JlYXRlIEJ1dHRvbiBpcyBub3QgZG9uZTpcblx0Ly8gXHQgLSBJZiBCdXR0b24gaXMgbmV2ZXIgdmlzaWJsZShjb3ZlcmVkIHRoZSBFeHRlcm5hbCBjcmVhdGUgYnV0dG9uLCBuZXcgQWN0aW9uKVxuXHQvL1x0IC0gb3IgQ3JlYXRpb25Nb2RlIGlzIG9uIENyZWF0aW9uUm93IGZvciBDcmVhdGUgQnV0dG9uXG5cdC8vXHQgLSBvciBDcmVhdGlvbk1vZGUgaXMgbm90IG9uIENyZWF0aW9uUm93IGZvciBDcmVhdGlvblJvdyBCdXR0b25cblxuXHRyZXR1cm4gYW5kKFxuXHRcdC8vWE5PUiBnYXRlXG5cdFx0b3IoXG5cdFx0XHRhbmQoaXNGb3JDcmVhdGlvblJvdywgc3RhbmRhcmRBY3Rpb25zQ29udGV4dC5jcmVhdGlvbk1vZGUgPT09IENyZWF0aW9uTW9kZS5DcmVhdGlvblJvdyksXG5cdFx0XHRhbmQoIWlzRm9yQ3JlYXRpb25Sb3csIHN0YW5kYXJkQWN0aW9uc0NvbnRleHQuY3JlYXRpb25Nb2RlICE9PSBDcmVhdGlvbk1vZGUuQ3JlYXRpb25Sb3cpXG5cdFx0KSxcblx0XHRvcihub3QoaXNDb25zdGFudChjcmVhdGVWaXNpYmlsaXR5KSksIGNyZWF0ZVZpc2liaWxpdHkpXG5cdCk7XG59XG5cbi8qKlxuICogR2V0cyB0aGUgYmluZGluZyBleHByZXNzaW9uIGZvciB0aGUgdGVtcGxhdGluZyBvZiB0aGUgbm9uLUNyZWF0ZSBhY3Rpb25zLlxuICogQHBhcmFtIGFjdGlvblZpc2liaWxpdHlcbiAqIEByZXR1cm5zIFRoZSBiaW5kaW5nIGV4cHJlc3Npb24gZm9yIHRoZSB0ZW1wbGF0aW5nIG9mIHRoZSBub24tQ3JlYXRlIGFjdGlvbnMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXREZWZhdWx0VGVtcGxhdGluZyhhY3Rpb25WaXNpYmlsaXR5OiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4pOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4ge1xuXHRyZXR1cm4gb3Iobm90KGlzQ29uc3RhbnQoYWN0aW9uVmlzaWJpbGl0eSkpLCBhY3Rpb25WaXNpYmlsaXR5KTtcbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgQ3JlYXRlL0RlbGV0ZSBidXR0b25zIHNoYWxsIGJlIGhpZGRlbiBpbiBhbiBhbmFseXRpY2FsLlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHRcbiAqIEBwYXJhbSBzdGFuZGFyZEFjdGlvbnNDb250ZXh0XG4gKiBAcmV0dXJucyBUcnVlIGlmIGJ1dHRvbnMgc2hhbGwgYmUgaGlkZGVuLCBmYWxzZSBvdGhlcndpc2UuXG4gKi9cbmZ1bmN0aW9uIGhpZGVDcmVhdGVEZWxldGVJbkFuYWx5dGljYWxUYWJsZShcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+LFxuXHRzdGFuZGFyZEFjdGlvbnNDb250ZXh0OiBTdGFuZGFyZEFjdGlvbnNDb250ZXh0XG4pOiBib29sZWFuIHtcblx0Ly8gV2Ugc2hvdyBDcmVhdGUvRGVsZXRlIGJ1dHRvbnMgaW4gQW5hbHl0aWNhbCB0YWJsZXMgb25seSBpbiBhIExpc3RSZXBvcnQuXG5cdHJldHVybiAoXG5cdFx0Y29udmVydGVyQ29udGV4dC5nZXRUZW1wbGF0ZVR5cGUoKSAhPT0gVGVtcGxhdGVUeXBlLkxpc3RSZXBvcnQgJiZcblx0XHRzdGFuZGFyZEFjdGlvbnNDb250ZXh0LnRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uPy50eXBlID09PSBcIkFuYWx5dGljYWxUYWJsZVwiXG5cdCk7XG59XG5cbi8qKlxuICogR2V0cyB0aGUgYmluZGluZyBleHByZXNzaW9uIGZvciB0aGUgJ3Zpc2libGUnIHByb3BlcnR5IG9mIHRoZSAnQ3JlYXRlJyBhY3Rpb24uXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dFxuICogQHBhcmFtIHN0YW5kYXJkQWN0aW9uc0NvbnRleHRcbiAqIEBwYXJhbSBpc0ZvckNyZWF0aW9uUm93XG4gKiBAcGFyYW0gaXNGb3JQYXN0ZVxuICogQHJldHVybnMgVGhlIGJpbmRpbmcgZXhwcmVzc2lvbiBmb3IgdGhlICd2aXNpYmxlJyBwcm9wZXJ0eSBvZiB0aGUgJ0NyZWF0ZScgYWN0aW9uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q3JlYXRlVmlzaWJpbGl0eShcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+LFxuXHRzdGFuZGFyZEFjdGlvbnNDb250ZXh0OiBTdGFuZGFyZEFjdGlvbnNDb250ZXh0LFxuXHRpc0ZvckNyZWF0aW9uUm93ID0gZmFsc2UsXG5cdGlzRm9yUGFzdGUgPSBmYWxzZVxuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+IHtcblx0bGV0IGlzSW5zZXJ0YWJsZSA9IHN0YW5kYXJkQWN0aW9uc0NvbnRleHQucmVzdHJpY3Rpb25zLmlzSW5zZXJ0YWJsZS5leHByZXNzaW9uO1xuXHRjb25zdCBuZXdBY3Rpb24gPSBzdGFuZGFyZEFjdGlvbnNDb250ZXh0Lm5ld0FjdGlvbjtcblx0aWYgKG5ld0FjdGlvbikge1xuXHRcdC8vIGlmIHRoZXJlIGlzIGEgbmV3IGFjdGlvbiwgd2UgY29uc2lkZXIgdGhlIGFjdGlvbiBhdmFpbGFiaWxpdHkgaW5zdGVhZCBvZiBpbnNlcnRhYmxlXG5cdFx0aXNJbnNlcnRhYmxlID0gbmV3QWN0aW9uLmF2YWlsYWJsZSA9PT0gdW5kZWZpbmVkID8gY29uc3RhbnQodHJ1ZSkgOiBuZXdBY3Rpb24uYXZhaWxhYmxlO1xuXHR9XG5cdGlzSW5zZXJ0YWJsZSA9IGdldFN0YXRpY2FsbHlSZXNvbHZhYmxlRXhwcmVzc2lvbihpc0luc2VydGFibGUsIGNvbnN0YW50KHRydWUpKTtcblx0Y29uc3QgaXNDcmVhdGVIaWRkZW4gPVxuXHRcdGhpZGVDcmVhdGVEZWxldGVJbkFuYWx5dGljYWxUYWJsZShjb252ZXJ0ZXJDb250ZXh0LCBzdGFuZGFyZEFjdGlvbnNDb250ZXh0KSB8fFxuXHRcdChpc0ZvckNyZWF0aW9uUm93XG5cdFx0XHQ/IGlzQWN0aW9uQW5ub3RhdGVkSGlkZGVuKGNvbnZlcnRlckNvbnRleHQsIFwiQ3JlYXRlSGlkZGVuXCIsIGZhbHNlKVxuXHRcdFx0OiBzdGFuZGFyZEFjdGlvbnNDb250ZXh0LmhpZGRlbkFubm90YXRpb24uY3JlYXRlKTtcblxuXHRpZiAoc3RhbmRhcmRBY3Rpb25zQ29udGV4dC5jcmVhdGlvbk1vZGUgPT09IENyZWF0aW9uTW9kZS5FeHRlcm5hbCkge1xuXHRcdC8vIGlmIGNyZWF0aW9uIG1vZGUgaXMgZXh0ZXJuYWwgd2UgZG8gbm90IGNvbnNpZGVyIGluc2VydGFibGUgcmVzdHJpY3Rpb25zXG5cdFx0cmV0dXJuIGFuZChub3QoaXNDcmVhdGVIaWRkZW4pLCBvcihjb252ZXJ0ZXJDb250ZXh0LmdldFRlbXBsYXRlVHlwZSgpID09PSBUZW1wbGF0ZVR5cGUuTGlzdFJlcG9ydCwgVUkuSXNFZGl0YWJsZSkpO1xuXHR9XG5cdHJldHVybiBpZkVsc2UoXG5cdFx0YW5kKFxuXHRcdFx0Ly9JZiBJbmxpbmVDcmVhdGlvblJvd3MgbW9kZSBhbmQgYSBSZXNwb25zaXZlIHRhYmxlIHR5cGUsIHdpdGggdGhlIHBhcmFtZXRlciBpbmxpbmVDcmVhdGlvblJvd3NIaWRkZW5JbkVkaXRNb2RlIHRvIHRydWUgd2hpbGUgbm90IGluIGNyZWF0ZSBtb2RlXG5cdFx0XHQvLyB3aGVuIGNhbGN1bGF0aW5nIHBhc3RlIGJ1dHRvbiB2aXNpYmlsaXR5LCAgd2UgZm9yY2UgdGhlIGNvbmRpdGlvbiB0byBmYWxzZSB3aXRoIHRoZSBpc0ZvclBhc3RlIHByb3BlcnR5XG5cdFx0XHRzdGFuZGFyZEFjdGlvbnNDb250ZXh0LmNyZWF0aW9uTW9kZSA9PT0gQ3JlYXRpb25Nb2RlLklubGluZUNyZWF0aW9uUm93cyxcblx0XHRcdHN0YW5kYXJkQWN0aW9uc0NvbnRleHQudGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24/LnR5cGUgPT09IFwiUmVzcG9uc2l2ZVRhYmxlXCIsXG5cdFx0XHRpZkVsc2UoXG5cdFx0XHRcdGFuZChzdGFuZGFyZEFjdGlvbnNDb250ZXh0Py50YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbj8uaW5saW5lQ3JlYXRpb25Sb3dzSGlkZGVuSW5FZGl0TW9kZSA9PT0gZmFsc2UsIG5vdChpc0ZvclBhc3RlKSksXG5cdFx0XHRcdHRydWUsXG5cdFx0XHRcdFVJLklzQ3JlYXRlTW9kZVxuXHRcdFx0KVxuXHRcdCksXG5cdFx0ZmFsc2UsXG5cdFx0aWZFbHNlKFxuXHRcdFx0Y29udmVydGVyQ29udGV4dC5nZXRUZW1wbGF0ZVR5cGUoKSA9PT0gVGVtcGxhdGVUeXBlLkxpc3RSZXBvcnQsXG5cdFx0XHRhbmQobm90KGlzQ3JlYXRlSGlkZGVuKSwgaXNJbnNlcnRhYmxlKSxcblx0XHRcdGFuZChub3QoaXNDcmVhdGVIaWRkZW4pLCBpc0luc2VydGFibGUsIFVJLklzRWRpdGFibGUpXG5cdFx0KVxuXHQpO1xufVxuXG4vKipcbiAqIEdldHMgdGhlIGJpbmRpbmcgZXhwcmVzc2lvbiBmb3IgdGhlICd2aXNpYmxlJyBwcm9wZXJ0eSBvZiB0aGUgJ0RlbGV0ZScgYWN0aW9uLlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHRcbiAqIEBwYXJhbSBzdGFuZGFyZEFjdGlvbnNDb250ZXh0XG4gKiBAcmV0dXJucyBUaGUgYmluZGluZyBleHByZXNzaW9uIGZvciB0aGUgJ3Zpc2libGUnIHByb3BlcnR5IG9mIHRoZSAnRGVsZXRlJyBhY3Rpb24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXREZWxldGVWaXNpYmlsaXR5KFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4sXG5cdHN0YW5kYXJkQWN0aW9uc0NvbnRleHQ6IFN0YW5kYXJkQWN0aW9uc0NvbnRleHRcbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiB7XG5cdGxldCBpc0RlbGV0ZUhpZGRlbiA9IHN0YW5kYXJkQWN0aW9uc0NvbnRleHQuaGlkZGVuQW5ub3RhdGlvbi5kZWxldGU7XG5cdGxldCBwYXRoRGVsZXRhYmxlRXhwcmVzc2lvbiA9IHN0YW5kYXJkQWN0aW9uc0NvbnRleHQucmVzdHJpY3Rpb25zLmlzRGVsZXRhYmxlLmV4cHJlc3Npb247XG5cdC8vd2UgY2hlY2sgaWYgdGhlcmUgaXMgbm8gcmVsYXRpdmUgcGF0aCBkZXBlbmRlbnQgb24gdGhlIGNvbnRleHRcblx0aXNEZWxldGVIaWRkZW4gPSBnZXRTdGF0aWNhbGx5UmVzb2x2YWJsZUV4cHJlc3Npb24oaXNEZWxldGVIaWRkZW4sIGNvbnN0YW50KGZhbHNlKSk7XG5cdHBhdGhEZWxldGFibGVFeHByZXNzaW9uID0gZ2V0U3RhdGljYWxseVJlc29sdmFibGVFeHByZXNzaW9uKHBhdGhEZWxldGFibGVFeHByZXNzaW9uLCBjb25zdGFudCh0cnVlKSk7XG5cdHJldHVybiBpZkVsc2UoXG5cdFx0Y29udmVydGVyQ29udGV4dC5nZXRUZW1wbGF0ZVR5cGUoKSA9PT0gVGVtcGxhdGVUeXBlLkFuYWx5dGljYWxMaXN0UGFnZSB8fFxuXHRcdFx0aGlkZUNyZWF0ZURlbGV0ZUluQW5hbHl0aWNhbFRhYmxlKGNvbnZlcnRlckNvbnRleHQsIHN0YW5kYXJkQWN0aW9uc0NvbnRleHQpLFxuXHRcdGZhbHNlLFxuXHRcdGlmRWxzZShcblx0XHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0VGVtcGxhdGVUeXBlKCkgIT09IFRlbXBsYXRlVHlwZS5MaXN0UmVwb3J0LFxuXHRcdFx0YW5kKG5vdChpc0RlbGV0ZUhpZGRlbiksIHBhdGhEZWxldGFibGVFeHByZXNzaW9uLCBVSS5Jc0VkaXRhYmxlKSxcblx0XHRcdGFuZChub3QoaXNEZWxldGVIaWRkZW4pLCBwYXRoRGVsZXRhYmxlRXhwcmVzc2lvbilcblx0XHQpXG5cdCk7XG59XG5cbi8qKlxuICogR2V0cyB0aGUgYmluZGluZyBleHByZXNzaW9uIGZvciB0aGUgJ3Zpc2libGUnIHByb3BlcnR5IG9mIHRoZSAnUGFzdGUnIGFjdGlvbi5cbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0XG4gKiBAcGFyYW0gc3RhbmRhcmRBY3Rpb25zQ29udGV4dFxuICogQHBhcmFtIGNyZWF0ZVZpc2liaWxpdHlcbiAqIEBwYXJhbSBjdXRWaXNpYmlsaXR5XG4gKiBAcGFyYW0gY29weVZpc2liaWxpdHlcbiAqIEBwYXJhbSBpc0luc2VydFVwZGF0ZUFjdGlvbnNUZW1wbGF0ZWRcbiAqIEByZXR1cm5zIFRoZSBiaW5kaW5nIGV4cHJlc3Npb24gZm9yIHRoZSAndmlzaWJsZScgcHJvcGVydHkgb2YgdGhlICdQYXN0ZScgYWN0aW9uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0UGFzdGVWaXNpYmlsaXR5KFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4sXG5cdHN0YW5kYXJkQWN0aW9uc0NvbnRleHQ6IFN0YW5kYXJkQWN0aW9uc0NvbnRleHQsXG5cdGNyZWF0ZVZpc2liaWxpdHk6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPixcblx0Y3V0VmlzaWJpbGl0eTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+LFxuXHRjb3B5VmlzaWJpbGl0eTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+LFxuXHRpc0luc2VydFVwZGF0ZUFjdGlvbnNUZW1wbGF0ZWQ6IGJvb2xlYW5cbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiB7XG5cdC8vSWYgaXQgaXNuJ3QgZGVhY3RpdmF0ZWQgd2l0aGluIHRoZSBtYW5pZmVzdCBhbmQgd2UncmUgb3BlcmF0aW5nIGluIE9QL2Jsb2NrcyBvdXRzaWRlIEZpb3JpIGVsZW1lbnRzIHRlbXBsYXRlcyxcblx0Ly90aGUgdHJlZVRhYmxlJ3MgdmlzaWJpbGl0eSByZWxpZXMgb24gdGhlIGN1dHZpc2liaWxpdHksXG5cdC8vd2hpbGUgdGhlIHZpc2liaWxpdHkgb2YgdGhlIG90aGVyIHRhYmxlIGlzIGRldGVybWluZWQgYnkgaW5zZXJ0YWJsZSByZXN0cmljdGlvbnMgYW5kIGNyZWF0ZSB2aXNpYmlsaXR5LlxuXHRsZXQgdXBkYXRlT25OYXZpZ2F0aW9uID0gc3RhbmRhcmRBY3Rpb25zQ29udGV4dC5yZXN0cmljdGlvbnM/LmlzVXBkYXRhYmxlPy5uYXZpZ2F0aW9uRXhwcmVzc2lvbjtcblx0aWYgKHVwZGF0ZU9uTmF2aWdhdGlvbj8uX3R5cGUgPT09IFwiVW5yZXNvbHZhYmxlXCIpIHtcblx0XHR1cGRhdGVPbk5hdmlnYXRpb24gPSBjb25zdGFudCh0cnVlKTtcblx0fVxuXHRyZXR1cm4gYW5kKFxuXHRcdHN0YW5kYXJkQWN0aW9uc0NvbnRleHQudGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24udHlwZSA9PT0gXCJUcmVlVGFibGVcIlxuXHRcdFx0PyBvcihjdXRWaXNpYmlsaXR5LCBjb3B5VmlzaWJpbGl0eSlcblx0XHRcdDogYW5kKFxuXHRcdFx0XHRcdG9yKFxuXHRcdFx0XHRcdFx0YW5kKGNyZWF0ZVZpc2liaWxpdHksIHN0YW5kYXJkQWN0aW9uc0NvbnRleHQucmVzdHJpY3Rpb25zLmlzSW5zZXJ0YWJsZS5leHByZXNzaW9uKSxcblx0XHRcdFx0XHRcdGFuZChVSS5Jc0VkaXRhYmxlLCB1cGRhdGVPbk5hdmlnYXRpb24pXG5cdFx0XHRcdFx0KSxcblx0XHRcdFx0XHRub3RFcXVhbChzdGFuZGFyZEFjdGlvbnNDb250ZXh0LnRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uLmVuYWJsZVBhc3RlLCBmYWxzZSksXG5cdFx0XHRcdFx0IVtUZW1wbGF0ZVR5cGUuTGlzdFJlcG9ydCwgVGVtcGxhdGVUeXBlLkFuYWx5dGljYWxMaXN0UGFnZV0uaW5jbHVkZXMoY29udmVydGVyQ29udGV4dC5nZXRUZW1wbGF0ZVR5cGUoKSlcblx0XHRcdCAgKSxcblx0XHRpc0luc2VydFVwZGF0ZUFjdGlvbnNUZW1wbGF0ZWRcblx0KTtcbn1cblxuLyoqXG4gKiBHZXRzIHRoZSBiaW5kaW5nIGV4cHJlc3Npb24gZm9yIHRoZSAndmlzaWJsZScgcHJvcGVydHkgb2YgdGhlICdNYXNzRWRpdCcgYWN0aW9uLlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHRcbiAqIEBwYXJhbSBzdGFuZGFyZEFjdGlvbnNDb250ZXh0XG4gKiBAcmV0dXJucyBUaGUgYmluZGluZyBleHByZXNzaW9uIGZvciB0aGUgJ3Zpc2libGUnIHByb3BlcnR5IG9mIHRoZSAnTWFzc0VkaXQnIGFjdGlvbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldE1hc3NFZGl0VmlzaWJpbGl0eShcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+LFxuXHRzdGFuZGFyZEFjdGlvbnNDb250ZXh0OiBTdGFuZGFyZEFjdGlvbnNDb250ZXh0XG4pOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4ge1xuXHRjb25zdCBpc1VwZGF0ZUhpZGRlbiA9IHN0YW5kYXJkQWN0aW9uc0NvbnRleHQuaGlkZGVuQW5ub3RhdGlvbi51cGRhdGUsXG5cdFx0cGF0aFVwZGF0YWJsZUV4cHJlc3Npb24gPSBzdGFuZGFyZEFjdGlvbnNDb250ZXh0LnJlc3RyaWN0aW9ucy5pc1VwZGF0YWJsZS5leHByZXNzaW9uLFxuXHRcdG1hc3NFZGl0RW5hYmxlZEluTWFuaWZlc3Q6IGJvb2xlYW4gPSBzdGFuZGFyZEFjdGlvbnNDb250ZXh0LnRhYmxlTWFuaWZlc3RDb25maWd1cmF0aW9uPy5tYXNzRWRpdC5lbmFibGVkIHx8IGZhbHNlO1xuXHRjb25zdCB0ZW1wbGF0ZUJpbmRpbmdFeHByZXNzaW9uID1cblx0XHRjb252ZXJ0ZXJDb250ZXh0LmdldFRlbXBsYXRlVHlwZSgpID09PSBUZW1wbGF0ZVR5cGUuT2JqZWN0UGFnZVxuXHRcdFx0PyBVSS5Jc0VkaXRhYmxlXG5cdFx0XHQ6IFtUZW1wbGF0ZVR5cGUuTGlzdFJlcG9ydCwgVGVtcGxhdGVUeXBlLkZyZWVTdHlsZVBhZ2VdLmluY2x1ZGVzKGNvbnZlcnRlckNvbnRleHQuZ2V0VGVtcGxhdGVUeXBlKCkpO1xuXHQvL01hc3NFZGl0IGlzIHZpc2libGVcblx0Ly8gSWZcblx0Ly9cdFx0LSB0aGVyZSBpcyBubyBzdGF0aWMgcmVzdHJpY3Rpb25zIHNldCB0byBmYWxzZVxuXHQvL1x0XHQtIGFuZCBlbmFibGVNYXNzRWRpdCBpcyBub3Qgc2V0IHRvIGZhbHNlIGludG8gdGhlIG1hbmlmZXN0XG5cdC8vXHRcdC0gYW5kIHRoZSBzZWxlY3Rpb25Nb2RlIGlzIHJlbGV2YW50XG5cdC8vXHRUaGVuIE1hc3NFZGl0IGlzIGFsd2F5cyB2aXNpYmxlIGluIExSIG9yIGR5bmFtaWNhbGx5IHZpc2libGUgaW4gT1AgYWNjb3JkaW5nIHRvIHVpPkVkaXRhYmxlIGFuZCBoaWRkZW5Bbm5vdGF0aW9uXG5cdC8vICBCdXR0b24gaXMgaGlkZGVuIGZvciBhbGwgb3RoZXIgY2FzZXNcblx0cmV0dXJuIGFuZChcblx0XHRub3QoYW5kKGlzQ29uc3RhbnQocGF0aFVwZGF0YWJsZUV4cHJlc3Npb24pLCBlcXVhbChwYXRoVXBkYXRhYmxlRXhwcmVzc2lvbiwgZmFsc2UpKSksXG5cdFx0bWFzc0VkaXRFbmFibGVkSW5NYW5pZmVzdCxcblx0XHR0ZW1wbGF0ZUJpbmRpbmdFeHByZXNzaW9uLFxuXHRcdG5vdChpc1VwZGF0ZUhpZGRlbilcblx0KTtcbn1cblxuLyoqXG4gKiBHZXRzIHRoZSBiaW5kaW5nIGV4cHJlc3Npb24gZm9yIHRoZSAnZW5hYmxlZCcgcHJvcGVydHkgb2YgdGhlIGNyZWF0aW9uUm93LlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHRcbiAqIEBwYXJhbSBzdGFuZGFyZEFjdGlvbnNDb250ZXh0XG4gKiBAcGFyYW0gY3JlYXRpb25Sb3dWaXNpYmlsaXR5XG4gKiBAcmV0dXJucyBUaGUgYmluZGluZyBleHByZXNzaW9uIGZvciB0aGUgJ2VuYWJsZWQnIHByb3BlcnR5IG9mIHRoZSBjcmVhdGlvblJvdy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldENyZWF0aW9uUm93RW5hYmxlbWVudChcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+LFxuXHRzdGFuZGFyZEFjdGlvbnNDb250ZXh0OiBTdGFuZGFyZEFjdGlvbnNDb250ZXh0LFxuXHRjcmVhdGlvblJvd1Zpc2liaWxpdHk6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPlxuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+IHtcblx0Y29uc3QgcmVzdHJpY3Rpb25zSW5zZXJ0YWJsZSA9IGlzUGF0aEluc2VydGFibGUoY29udmVydGVyQ29udGV4dC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCksIHtcblx0XHRpZ25vcmVUYXJnZXRDb2xsZWN0aW9uOiB0cnVlLFxuXHRcdGF1dGhvcml6ZVVucmVzb2x2YWJsZTogdHJ1ZSxcblx0XHRwYXRoVmlzaXRvcjogKHBhdGg6IHN0cmluZywgbmF2aWdhdGlvblBhdGhzOiBzdHJpbmdbXSkgPT4ge1xuXHRcdFx0aWYgKHBhdGguaW5kZXhPZihcIi9cIikgPT09IDApIHtcblx0XHRcdFx0cGF0aCA9IHNpbmdsZXRvblBhdGhWaXNpdG9yKHBhdGgsIGNvbnZlcnRlckNvbnRleHQuZ2V0Q29udmVydGVkVHlwZXMoKSwgbmF2aWdhdGlvblBhdGhzKTtcblx0XHRcdFx0cmV0dXJuIHBhdGg7XG5cdFx0XHR9XG5cdFx0XHRjb25zdCBuYXZpZ2F0aW9uUHJvcGVydGllcyA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpLm5hdmlnYXRpb25Qcm9wZXJ0aWVzO1xuXHRcdFx0aWYgKG5hdmlnYXRpb25Qcm9wZXJ0aWVzKSB7XG5cdFx0XHRcdGNvbnN0IGxhc3ROYXYgPSBuYXZpZ2F0aW9uUHJvcGVydGllc1tuYXZpZ2F0aW9uUHJvcGVydGllcy5sZW5ndGggLSAxXTtcblx0XHRcdFx0Y29uc3QgcGFydG5lciA9IGlzTmF2aWdhdGlvblByb3BlcnR5KGxhc3ROYXYpICYmIGxhc3ROYXYucGFydG5lcjtcblx0XHRcdFx0aWYgKHBhcnRuZXIpIHtcblx0XHRcdFx0XHRwYXRoID0gYCR7cGFydG5lcn0vJHtwYXRofWA7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJldHVybiBwYXRoO1xuXHRcdH1cblx0fSk7XG5cdGNvbnN0IGlzSW5zZXJ0YWJsZSA9XG5cdFx0cmVzdHJpY3Rpb25zSW5zZXJ0YWJsZS5fdHlwZSA9PT0gXCJVbnJlc29sdmFibGVcIlxuXHRcdFx0PyBpc1BhdGhJbnNlcnRhYmxlKGNvbnZlcnRlckNvbnRleHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpLCB7XG5cdFx0XHRcdFx0cGF0aFZpc2l0b3I6IChwYXRoOiBzdHJpbmcpID0+IHNpbmdsZXRvblBhdGhWaXNpdG9yKHBhdGgsIGNvbnZlcnRlckNvbnRleHQuZ2V0Q29udmVydGVkVHlwZXMoKSwgW10pXG5cdFx0XHQgIH0pXG5cdFx0XHQ6IHJlc3RyaWN0aW9uc0luc2VydGFibGU7XG5cblx0cmV0dXJuIGFuZChcblx0XHRjcmVhdGlvblJvd1Zpc2liaWxpdHksXG5cdFx0aXNJbnNlcnRhYmxlLFxuXHRcdG9yKFxuXHRcdFx0IXN0YW5kYXJkQWN0aW9uc0NvbnRleHQudGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24uZGlzYWJsZUFkZFJvd0J1dHRvbkZvckVtcHR5RGF0YSxcblx0XHRcdGZvcm1hdFJlc3VsdChbcGF0aEluTW9kZWwoXCJjcmVhdGlvblJvd0ZpZWxkVmFsaWRpdHlcIiwgXCJpbnRlcm5hbFwiKV0sIHRhYmxlRm9ybWF0dGVycy52YWxpZGF0ZUNyZWF0aW9uUm93RmllbGRzKVxuXHRcdClcblx0KTtcbn1cblxuLyoqXG4gKiBHZXRzIHRoZSBiaW5kaW5nIGV4cHJlc3Npb24gZm9yIHRoZSAnZW5hYmxlZCcgcHJvcGVydHkgb2YgdGhlICdDcmVhdGUnIGFjdGlvbi5cbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0XG4gKiBAcGFyYW0gc3RhbmRhcmRBY3Rpb25zQ29udGV4dFxuICogQHBhcmFtIGNyZWF0ZVZpc2liaWxpdHlcbiAqIEBwYXJhbSBmb3JDb250ZXh0TWVudVxuICogQHJldHVybnMgVGhlIGJpbmRpbmcgZXhwcmVzc2lvbiBmb3IgdGhlICdlbmFibGVkJyBwcm9wZXJ0eSBvZiB0aGUgJ0NyZWF0ZScgYWN0aW9uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q3JlYXRlRW5hYmxlbWVudChcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+LFxuXHRzdGFuZGFyZEFjdGlvbnNDb250ZXh0OiBTdGFuZGFyZEFjdGlvbnNDb250ZXh0LFxuXHRjcmVhdGVWaXNpYmlsaXR5OiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4sXG5cdGZvckNvbnRleHRNZW51ID0gZmFsc2Vcbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiB7XG5cdGNvbnN0IGNvbmRpdGlvbnM6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPltdID0gW107XG5cdGNvbnN0IGNvbnRleHRQYXRoOiBzdHJpbmcgPSAhZm9yQ29udGV4dE1lbnUgPyBcIlwiIDogXCJjb250ZXh0bWVudS9cIjtcblx0Y29uc3QgaXNEcmFmdEVuYWJsZWQgPSBNb2RlbEhlbHBlci5pc09iamVjdFBhdGhEcmFmdFN1cHBvcnRlZChjb252ZXJ0ZXJDb250ZXh0LmdldERhdGFNb2RlbE9iamVjdFBhdGgoKSk7XG5cblx0aWYgKHN0YW5kYXJkQWN0aW9uc0NvbnRleHQuY3JlYXRpb25Nb2RlID09PSBDcmVhdGlvbk1vZGUuSW5saW5lQ3JlYXRpb25Sb3dzKSB7XG5cdFx0Ly8gZm9yIElubGluZSBjcmVhdGlvbiByb3dzIGNyZWF0ZSBjYW4gYmUgaGlkZGVuIHZpYSBtYW5pZmVzdCBhbmQgdGhpcyBzaG91bGQgbm90IGltcGFjdCBpdHMgZW5hYmxlbWVudFxuXHRcdGNvbmRpdGlvbnMucHVzaChcblx0XHRcdGFuZChub3Qoc3RhbmRhcmRBY3Rpb25zQ29udGV4dC5oaWRkZW5Bbm5vdGF0aW9uLmNyZWF0ZSksIGlzRHJhZnRFbmFibGVkLCBVSS5Jc0VkaXRhYmxlLCBub3QocGF0aEluTW9kZWwoXCJJc0FjdGl2ZUVudGl0eVwiKSkpXG5cdFx0KTtcblx0fSBlbHNlIHtcblx0XHRjb25kaXRpb25zLnB1c2goY3JlYXRlVmlzaWJpbGl0eSk7XG5cdH1cblxuXHRjb25zdCBpc0luc2VydGFibGUgPSBzdGFuZGFyZEFjdGlvbnNDb250ZXh0LnJlc3RyaWN0aW9ucy5pc0luc2VydGFibGUuZXhwcmVzc2lvbjtcblx0Y29uc3QgQ29sbGVjdGlvblR5cGUgPSBjb252ZXJ0ZXJDb250ZXh0LnJlc29sdmVBYnNvbHV0ZVBhdGg8RW50aXR5U2V0PihzdGFuZGFyZEFjdGlvbnNDb250ZXh0LmNvbGxlY3Rpb25QYXRoKS50YXJnZXQ7XG5cdGNvbmRpdGlvbnMucHVzaChcblx0XHRvcihcblx0XHRcdGlzRW50aXR5U2V0KENvbGxlY3Rpb25UeXBlKSxcblx0XHRcdGFuZChpc0luc2VydGFibGUsIG9yKGNvbnZlcnRlckNvbnRleHQuZ2V0VGVtcGxhdGVUeXBlKCkgIT09IFRlbXBsYXRlVHlwZS5PYmplY3RQYWdlLCBVSS5Jc0VkaXRhYmxlKSlcblx0XHQpXG5cdCk7XG5cblx0aWYgKHN0YW5kYXJkQWN0aW9uc0NvbnRleHQudGFibGVNYW5pZmVzdENvbmZpZ3VyYXRpb24udHlwZSA9PT0gXCJUcmVlVGFibGVcIikge1xuXHRcdC8vIEluIGNhc2Ugb2YgYSBUcmVlVGFibGUsIHRoZSBjcmVhdGUgYnV0dG9uIHNoYWxsIGJlIGFjdGl2ZSBvbmx5IGlmIDAgb3IgMSBpdGVtcyBhcmUgc2VsZWN0ZWQgKHBhcmVudCBub2RlKVxuXHRcdC8vIFdlIGRvIG5vdCBuZWVkIHRoaXMgY29uZGl0aW9uIG9uIHRoZSBDb250ZXh0TWVudSwgYXMgd2Ugb25seSBjcmVhdGUgb24gdGhlIHNlbGVjdGVkIG5vZGVcblx0XHRjb25kaXRpb25zLnB1c2gobGVzc09yRXF1YWwocGF0aEluTW9kZWwoY29udGV4dFBhdGggKyBcIm51bWJlck9mU2VsZWN0ZWRDb250ZXh0c1wiLCBcImludGVybmFsXCIpLCAxKSk7XG5cblx0XHRpZiAoc3RhbmRhcmRBY3Rpb25zQ29udGV4dC50YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbi5jcmVhdGVFbmFibGVtZW50KSB7XG5cdFx0XHQvLyBUaGVyZSdzIGEgY3JlYXRlRW5hYmxlbWVudCBjYWxsYmFjayBmdW5jdGlvbiBmb3IgYWRkaXRpb25uYWwgY29uZGl0aW9uc1xuXHRcdFx0Ly8gVGhlc2UgY29uZGl0aW9ucyB3aWxsIGJlIHJlZmxlY3RlZCBpbiB0aGUgaW50ZXJuYWwgbW9kZWxcblx0XHRcdGNvbmRpdGlvbnMucHVzaChub3RFcXVhbChwYXRoSW5Nb2RlbChjb250ZXh0UGF0aCArIFwiY3JlYXRlRW5hYmxlbWVudC9DcmVhdGVcIiwgXCJpbnRlcm5hbFwiKSwgZmFsc2UpKTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gYW5kKC4uLmNvbmRpdGlvbnMpO1xufVxuXG4vKipcbiAqIEdldHMgdGhlIGJpbmRpbmcgZXhwcmVzc2lvbiBmb3IgdGhlICdlbmFibGVkJyBwcm9wZXJ0eSBvZiB0aGUgJ0RlbGV0ZScgYWN0aW9uLlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHRcbiAqIEBwYXJhbSBzdGFuZGFyZEFjdGlvbnNDb250ZXh0XG4gKiBAcGFyYW0gZGVsZXRlVmlzaWJpbGl0eVxuICogQHBhcmFtIGZvckNvbnRleHRNZW51IEluZGljYXRlcyBpZiB0aGUgYWN0aW9uIGFwcGVhcnMgaW4gdGhlIGNvbnRleHQgbWVudS4gSWYgZmFsc2UsIHRoZSBhY3Rpb24gYXBwZWFycyBpbiB0aGUgdGFibGUgdG9vbGJhclxuICogQHJldHVybnMgVGhlIGJpbmRpbmcgZXhwcmVzc2lvbiBmb3IgdGhlICdlbmFibGVkJyBwcm9wZXJ0eSBvZiB0aGUgJ0RlbGV0ZScgYWN0aW9uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGVsZXRlRW5hYmxlbWVudChcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+LFxuXHRzdGFuZGFyZEFjdGlvbnNDb250ZXh0OiBTdGFuZGFyZEFjdGlvbnNDb250ZXh0LFxuXHRkZWxldGVWaXNpYmlsaXR5OiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4sXG5cdGZvckNvbnRleHRNZW51ID0gZmFsc2Vcbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiB7XG5cdC8vIFRoZSBmb2xsb3dpbmcgY29udGV4dHMgYXJlIGZpbGxlZCBhdCBydW50aW1lIHdoZW4gYSB1c2VyIHNlbGVjdHMgb25lIG9yIG1vcmUgaXRlbXMgZnJvbSBhIGxpc3QuXG5cdC8vIENoZWNrcyBhcmUgdGhlbiBtYWRlIGluIGZ1bmN0aW9uIHVwZGF0ZURlbGV0ZUluZm9Gb3JTZWxlY3RlZENvbnRleHRzIGluIGZpbGUgRGVsZXRlSGVscGVyIHRvIHNlZSBpZiB0aGVyZVxuXHQvLyBhcmUgaXRlbXMgdGhhdCBjYW4gYmUgZGVsZXRlZCwgdGh1cyB0aGUgZGVsZXRlIGJ1dHRvbiBzaG91bGQgYmUgZW5hYmxlZCBpbiB0aGVzZSBjYXNlcy5cblx0Y29uc3QgY29udGV4dFBhdGggPSAhZm9yQ29udGV4dE1lbnUgPyBcIlwiIDogXCJjb250ZXh0bWVudS9cIjtcblx0Y29uc3QgZGVsZXRhYmxlQ29udGV4dHMgPSBwYXRoSW5Nb2RlbChjb250ZXh0UGF0aCArIFwiZGVsZXRhYmxlQ29udGV4dHNcIiwgXCJpbnRlcm5hbFwiKTtcblx0Y29uc3QgdW5TYXZlZENvbnRleHRzID0gcGF0aEluTW9kZWwoY29udGV4dFBhdGggKyBcInVuU2F2ZWRDb250ZXh0c1wiLCBcImludGVybmFsXCIpO1xuXHRjb25zdCBkcmFmdHNXaXRoRGVsZXRhYmxlQWN0aXZlID0gcGF0aEluTW9kZWwoY29udGV4dFBhdGggKyBcImRyYWZ0c1dpdGhEZWxldGFibGVBY3RpdmVcIiwgXCJpbnRlcm5hbFwiKTtcblx0Y29uc3QgZHJhZnRzV2l0aE5vbkRlbGV0YWJsZUFjdGl2ZSA9IHBhdGhJbk1vZGVsKGNvbnRleHRQYXRoICsgXCJkcmFmdHNXaXRoTm9uRGVsZXRhYmxlQWN0aXZlXCIsIFwiaW50ZXJuYWxcIik7XG5cblx0Ly8gXCJVbnJlc29sdmFibGVcIiBpbiBuYXZpZ2F0aW9uRXhwcmVzc2lvbiBpcyBpbnRlcnByZXRlZCB0byBtZWFuIHRoYXQgdGhlcmUgYXJlIG5vIG5hdmlnYXRpb25FeHByZXNzaW9uc1xuXHQvLyBkZWZpbmVkLlxuXHQvLyBzdGFuZGFyZEFjdGlvbnNDb250ZXh0LnJlc3RyaWN0aW9ucy5pc0RlbGV0YWJsZS5leHByZXNzaW9uIGlzIGEgYmluZGluZyBleHByZXNzaW9uIHRoYXQgY29tZXNcblx0Ly8gZnJvbSB0aGUgRGVsZXRlIHJlc3RyaWN0aW9ucyBkZWZpbmVkIGluIE5hdmlnYXRpb25SZXN0cmljdGlvbnMgZm9yIHRoaXMgZW50aXR5LiBJbiBvcmRlciB0b1xuXHQvLyBiZSBkZWxldGFibGUsIHRoZSBpdGVtIG11c3QgYWxzbyBiZSBhbGxvd2VkIHRvIGJlIGRlbGV0YWJsZSBhY2NvcmRpbmcgdG8gdGhlIERlbGV0ZSBSZXN0cmljdGlvbnNcblx0Ly8gb24gdGhlIGVudGl0eSBpdHNlbGYuXG5cdHJldHVybiBhbmQoXG5cdFx0ZGVsZXRlVmlzaWJpbGl0eSxcblx0XHRvcihcblx0XHRcdHN0YW5kYXJkQWN0aW9uc0NvbnRleHQucmVzdHJpY3Rpb25zLmlzRGVsZXRhYmxlLm5hdmlnYXRpb25FeHByZXNzaW9uLl90eXBlID09PSBcIlVucmVzb2x2YWJsZVwiLFxuXHRcdFx0c3RhbmRhcmRBY3Rpb25zQ29udGV4dC5yZXN0cmljdGlvbnMuaXNEZWxldGFibGUuZXhwcmVzc2lvblxuXHRcdCksXG5cdFx0b3IoXG5cdFx0XHRncmVhdGVyVGhhbihsZW5ndGgoZGVsZXRhYmxlQ29udGV4dHMsIHRydWUpLCAwKSxcblx0XHRcdGdyZWF0ZXJUaGFuKGxlbmd0aChkcmFmdHNXaXRoRGVsZXRhYmxlQWN0aXZlLCB0cnVlKSwgMCksXG5cdFx0XHRncmVhdGVyVGhhbihsZW5ndGgoZHJhZnRzV2l0aE5vbkRlbGV0YWJsZUFjdGl2ZSwgdHJ1ZSksIDApLFxuXHRcdFx0Z3JlYXRlclRoYW4obGVuZ3RoKHVuU2F2ZWRDb250ZXh0cywgdHJ1ZSksIDApXG5cdFx0KVxuXHQpO1xufVxuXG4vKipcbiAqIEdldHMgdGhlIGJpbmRpbmcgZXhwcmVzc2lvbiBmb3IgdGhlICdlbmFibGVkJyBwcm9wZXJ0eSBvZiB0aGUgJ1Bhc3RlJyBhY3Rpb24uXG4gKiBAcGFyYW0gcGFzdGVWaXNpYmlsaXR5XG4gKiBAcGFyYW0gc3RhbmRhcmRBY3Rpb25zQ29udGV4dFxuICogQHBhcmFtIGZvckNvbnRleHRNZW51XG4gKiBAcmV0dXJucyBUaGUgYmluZGluZyBleHByZXNzaW9uIGZvciB0aGUgJ2VuYWJsZWQnIHByb3BlcnR5IG9mIHRoZSAnUGFzdGUnIGFjdGlvbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFBhc3RlRW5hYmxlbWVudChcblx0cGFzdGVWaXNpYmlsaXR5OiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4sXG5cdHN0YW5kYXJkQWN0aW9uc0NvbnRleHQ6IFN0YW5kYXJkQWN0aW9uc0NvbnRleHQsXG5cdGZvckNvbnRleHRNZW51OiBib29sZWFuXG4pOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4ge1xuXHRjb25zdCBzZWxlY3RlZENvbnRleHRzUGF0aCA9ICFmb3JDb250ZXh0TWVudSA/IFwic2VsZWN0ZWRDb250ZXh0c1wiIDogXCJjb250ZXh0bWVudS9zZWxlY3RlZENvbnRleHRzXCI7XG5cdGNvbnN0IHBhc3RlRW5hYmxlbWVudFBhdGggPSAhZm9yQ29udGV4dE1lbnUgPyBcIm5vZGVVcGRhdGVzSW5mby9wYXN0ZUVuYWJsZW1lbnRcIiA6IFwiY29udGV4dG1lbnUvbm9kZVVwZGF0ZXNJbmZvL3Bhc3RlRW5hYmxlbWVudFwiO1xuXHRsZXQgaXNJbnNlcnRhYmxlOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4gPSBzdGFuZGFyZEFjdGlvbnNDb250ZXh0LnJlc3RyaWN0aW9ucy5pc0luc2VydGFibGUuZXhwcmVzc2lvbjtcblx0Y29uc3QgdGFibGVUeXBlID0gc3RhbmRhcmRBY3Rpb25zQ29udGV4dC50YWJsZU1hbmlmZXN0Q29uZmlndXJhdGlvbi50eXBlO1xuXHRjb25zdCBoYXNDZWxsU2VsZWN0b3IgPSBbXCJSZXNwb25zaXZlVGFibGVcIiwgXCJHcmlkVGFibGVcIiwgXCJUcmVlVGFibGVcIl0uaW5jbHVkZXModGFibGVUeXBlKTtcblx0aWYgKGhhc0NlbGxTZWxlY3Rvcikge1xuXHRcdC8vIElmIHRhYmxlIGlzIG5vdCBpbnNlcnRhYmxlLCB3ZSBvbmx5IGVuYWJsZSB0aGUgcGFzdGUgYnV0dG9uIHdoZW4gdGhlcmUgaXMgYSBzZWxlY3Rpb24gKFRvIGVkaXQgZGF0YSlcblx0XHRpc0luc2VydGFibGUgPSBvcihcblx0XHRcdHN0YW5kYXJkQWN0aW9uc0NvbnRleHQucmVzdHJpY3Rpb25zLmlzSW5zZXJ0YWJsZS5leHByZXNzaW9uLFxuXHRcdFx0ZXF1YWwocGF0aEluTW9kZWwoXCJjZWxsU2VsZWN0b3JIYXNTZWxlY3Rpb25cIiwgXCJpbnRlcm5hbFwiKSwgdHJ1ZSlcblx0XHQpO1xuXHR9XG5cblx0aWYgKHRhYmxlVHlwZSA9PT0gXCJUcmVlVGFibGVcIikge1xuXHRcdHJldHVybiBhbmQoXG5cdFx0XHRwYXN0ZVZpc2liaWxpdHksXG5cdFx0XHRvcihcblx0XHRcdFx0c3RhbmRhcmRBY3Rpb25zQ29udGV4dC5yZXN0cmljdGlvbnMuaXNVcGRhdGFibGUubmF2aWdhdGlvbkV4cHJlc3Npb24uX3R5cGUgPT09IFwiVW5yZXNvbHZhYmxlXCIsXG5cdFx0XHRcdHN0YW5kYXJkQWN0aW9uc0NvbnRleHQucmVzdHJpY3Rpb25zLmlzVXBkYXRhYmxlLmV4cHJlc3Npb25cblx0XHRcdCksXG5cdFx0XHRpc0luc2VydGFibGUsXG5cdFx0XHRpZkVsc2UoXG5cdFx0XHRcdGxlc3NPckVxdWFsKGxlbmd0aChwYXRoSW5Nb2RlbChzZWxlY3RlZENvbnRleHRzUGF0aCwgXCJpbnRlcm5hbFwiKSksIDEpLFxuXHRcdFx0XHRlcXVhbChwYXRoSW5Nb2RlbChwYXN0ZUVuYWJsZW1lbnRQYXRoLCBcImludGVybmFsXCIpLCB0cnVlKSxcblxuXHRcdFx0XHRmYWxzZVxuXHRcdFx0KVxuXHRcdCk7XG5cdH1cblx0bGV0IHVwZGF0ZU9uTmF2aWdhdGlvbiA9IHN0YW5kYXJkQWN0aW9uc0NvbnRleHQucmVzdHJpY3Rpb25zPy5pc1VwZGF0YWJsZT8ubmF2aWdhdGlvbkV4cHJlc3Npb247XG5cdGlmICh1cGRhdGVPbk5hdmlnYXRpb24/Ll90eXBlID09PSBcIlVucmVzb2x2YWJsZVwiKSB7XG5cdFx0dXBkYXRlT25OYXZpZ2F0aW9uID0gY29uc3RhbnQodHJ1ZSk7XG5cdH1cblx0cmV0dXJuIGFuZCh1cGRhdGVPbk5hdmlnYXRpb24sIHBhc3RlVmlzaWJpbGl0eSwgaXNJbnNlcnRhYmxlKTtcbn1cblxuLyoqXG4gKiBHZXRzIHRoZSBiaW5kaW5nIGV4cHJlc3Npb24gZm9yIHRoZSAnZW5hYmxlZCcgcHJvcGVydHkgb2YgdGhlICdNYXNzRWRpdCcgYWN0aW9uLlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHRcbiAqIEBwYXJhbSBzdGFuZGFyZEFjdGlvbnNDb250ZXh0XG4gKiBAcGFyYW0gbWFzc0VkaXRWaXNpYmlsaXR5XG4gKiBAcGFyYW0gZm9yQ29udGV4dE1lbnUgSW5kaWNhdGVzIGlmIHRoZSBhY3Rpb24gYXBwZWFycyBpbiB0aGUgY29udGV4dCBtZW51LiBJZiBmYWxzZSwgdGhlIGFjdGlvbiBhcHBlYXJzIGluIHRoZSB0YWJsZSB0b29sYmFyXG4gKiBAcmV0dXJucyBUaGUgYmluZGluZyBleHByZXNzaW9uIGZvciB0aGUgJ2VuYWJsZWQnIHByb3BlcnR5IG9mIHRoZSAnTWFzc0VkaXQnIGFjdGlvbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldE1hc3NFZGl0RW5hYmxlbWVudChcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+LFxuXHRzdGFuZGFyZEFjdGlvbnNDb250ZXh0OiBTdGFuZGFyZEFjdGlvbnNDb250ZXh0LFxuXHRtYXNzRWRpdFZpc2liaWxpdHk6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPixcblx0Zm9yQ29udGV4dE1lbnUgPSBmYWxzZVxuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+IHtcblx0Y29uc3QgcGF0aFVwZGF0YWJsZUV4cHJlc3Npb24gPSBzdGFuZGFyZEFjdGlvbnNDb250ZXh0LnJlc3RyaWN0aW9ucy5pc1VwZGF0YWJsZS5leHByZXNzaW9uO1xuXHRjb25zdCBpc09ubHlEeW5hbWljT25DdXJyZW50RW50aXR5ID1cblx0XHQhaXNDb25zdGFudChwYXRoVXBkYXRhYmxlRXhwcmVzc2lvbikgJiZcblx0XHRzdGFuZGFyZEFjdGlvbnNDb250ZXh0LnJlc3RyaWN0aW9ucy5pc1VwZGF0YWJsZS5uYXZpZ2F0aW9uRXhwcmVzc2lvbi5fdHlwZSA9PT0gXCJVbnJlc29sdmFibGVcIjtcblx0Y29uc3QgbnVtYmVyT2ZTZWxlY3RlZENvbnRleHRQcm9wZXJ0eSA9ICFmb3JDb250ZXh0TWVudSA/IFwibnVtYmVyT2ZTZWxlY3RlZENvbnRleHRzXCIgOiBcImNvbnRleHRtZW51L251bWJlck9mU2VsZWN0ZWRDb250ZXh0c1wiO1xuXHRjb25zdCB1cGRhdGFibGVDb250ZXh0UHJvcGVydHkgPSAhZm9yQ29udGV4dE1lbnUgPyBcInVwZGF0YWJsZUNvbnRleHRzXCIgOiBcImNvbnRleHRtZW51L3VwZGF0YWJsZUNvbnRleHRzXCI7XG5cdGNvbnN0IG51bWJlck9mU2VsZWN0ZWRDb250ZXh0cyA9IGdyZWF0ZXJPckVxdWFsKHBhdGhJbk1vZGVsKG51bWJlck9mU2VsZWN0ZWRDb250ZXh0UHJvcGVydHksIFwiaW50ZXJuYWxcIiksIDEpO1xuXHRjb25zdCBudW1iZXJPZlVwZGF0YWJsZUNvbnRleHRzID0gZ3JlYXRlck9yRXF1YWwobGVuZ3RoKHBhdGhJbk1vZGVsKHVwZGF0YWJsZUNvbnRleHRQcm9wZXJ0eSwgXCJpbnRlcm5hbFwiKSksIDEpO1xuXHRjb25zdCBiSXNEcmFmdFN1cHBvcnRlZCA9IE1vZGVsSGVscGVyLmlzT2JqZWN0UGF0aERyYWZ0U3VwcG9ydGVkKGNvbnZlcnRlckNvbnRleHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpKTtcblx0Y29uc3QgYkRpc3BsYXlNb2RlID0gaXNJbkRpc3BsYXlNb2RlKGNvbnZlcnRlckNvbnRleHQpO1xuXG5cdC8vIG51bWJlck9mVXBkYXRhYmxlQ29udGV4dHMgbmVlZHMgdG8gYmUgYWRkZWQgdG8gdGhlIGJpbmRpbmcgaW4gY2FzZVxuXHQvLyAxLiBVcGRhdGUgaXMgZGVwZW5kZW50IG9uIGN1cnJlbnQgZW50aXR5IHByb3BlcnR5IChpc09ubHlEeW5hbWljT25DdXJyZW50RW50aXR5IGlzIHRydWUpLlxuXHQvLyAyLiBUaGUgdGFibGUgaXMgcmVhZCBvbmx5IGFuZCBkcmFmdCBlbmFibGVkKGxpa2UgTFIpLCBpbiB0aGlzIGNhc2Ugb25seSBhY3RpdmUgY29udGV4dHMgY2FuIGJlIG1hc3MgZWRpdGVkLlxuXHQvLyAgICBTbywgdXBkYXRlIGRlcGVuZHMgb24gJ0lzQWN0aXZlRW50aXR5JyB2YWx1ZSB3aGljaCBuZWVkcyB0byBiZSBjaGVja2VkIHJ1bnRpbWUuXG5cdGNvbnN0IHJ1bnRpbWVCaW5kaW5nID0gaWZFbHNlKFxuXHRcdG9yKGFuZChiRGlzcGxheU1vZGUsIGJJc0RyYWZ0U3VwcG9ydGVkKSwgaXNPbmx5RHluYW1pY09uQ3VycmVudEVudGl0eSksXG5cdFx0YW5kKG51bWJlck9mU2VsZWN0ZWRDb250ZXh0cywgbnVtYmVyT2ZVcGRhdGFibGVDb250ZXh0cyksXG5cdFx0YW5kKG51bWJlck9mU2VsZWN0ZWRDb250ZXh0cylcblx0KTtcblxuXHRyZXR1cm4gYW5kKG1hc3NFZGl0VmlzaWJpbGl0eSwgaWZFbHNlKGlzT25seUR5bmFtaWNPbkN1cnJlbnRFbnRpdHksIHJ1bnRpbWVCaW5kaW5nLCBhbmQocnVudGltZUJpbmRpbmcsIHBhdGhVcGRhdGFibGVFeHByZXNzaW9uKSkpO1xufVxuXG4vKipcbiAqIEdldHMgdGhlIGJpbmRpbmcgZXhwcmVzc2lvbiBmb3IgdGhlICdlbmFibGVkJyBwcm9wZXJ0eSBvZiB0aGUgJ0N1dCcgYWN0aW9uLlxuICogQHBhcmFtIGN1dFZpc2liaWxpdHlcbiAqIEBwYXJhbSBzdGFuZGFyZEFjdGlvbnNDb250ZXh0XG4gKiBAcGFyYW0gZm9yQ29udGV4dE1lbnVcbiAqIEByZXR1cm5zIFRoZSBiaW5kaW5nIGV4cHJlc3Npb24gZm9yIHRoZSAnZW5hYmxlZCcgcHJvcGVydHkgb2YgdGhlICdNYXNzRWRpdCcgYWN0aW9uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q3V0RW5hYmxlbWVudChcblx0Y3V0VmlzaWJpbGl0eTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+LFxuXHRzdGFuZGFyZEFjdGlvbnNDb250ZXh0OiBTdGFuZGFyZEFjdGlvbnNDb250ZXh0LFxuXHRmb3JDb250ZXh0TWVudTogYm9vbGVhblxuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+IHtcblx0Y29uc3QgY3V0YWJsZUNvbnRleHRzUGF0aCA9ICFmb3JDb250ZXh0TWVudSA/IFwibm9kZVVwZGF0ZXNJbmZvL2N1dEVuYWJsZW1lbnRcIiA6IFwiY29udGV4dG1lbnUvbm9kZVVwZGF0ZXNJbmZvL2N1dEVuYWJsZW1lbnRcIjtcblx0Y29uc3QgcnVudGltZUJpbmRpbmcgPSBwYXRoSW5Nb2RlbChjdXRhYmxlQ29udGV4dHNQYXRoLCBcImludGVybmFsXCIpO1xuXHRyZXR1cm4gYW5kKFxuXHRcdGN1dFZpc2liaWxpdHksXG5cdFx0b3IoXG5cdFx0XHRzdGFuZGFyZEFjdGlvbnNDb250ZXh0LnJlc3RyaWN0aW9ucy5pc1VwZGF0YWJsZS5uYXZpZ2F0aW9uRXhwcmVzc2lvbi5fdHlwZSA9PT0gXCJVbnJlc29sdmFibGVcIixcblx0XHRcdHN0YW5kYXJkQWN0aW9uc0NvbnRleHQucmVzdHJpY3Rpb25zLmlzVXBkYXRhYmxlLmV4cHJlc3Npb25cblx0XHQpLFxuXHRcdHJ1bnRpbWVCaW5kaW5nXG5cdCk7XG59XG5cbi8qKlxuICogR2V0cyB0aGUgYmluZGluZyBleHByZXNzaW9uIGZvciB0aGUgJ2VuYWJsZWQnIHByb3BlcnR5IG9mIHRoZSAnQ29weScgYWN0aW9uLlxuICogQHBhcmFtIGNvcHlWaXNpYmlsaXR5XG4gKiBAcGFyYW0gZm9yQ29udGV4dE1lbnVcbiAqIEByZXR1cm5zIFRoZSBiaW5kaW5nIGV4cHJlc3Npb24gZm9yIHRoZSAnZW5hYmxlZCcgcHJvcGVydHkgb2YgdGhlICdDb3B5JyBhY3Rpb24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRDb3B5RW5hYmxlbWVudChcblx0Y29weVZpc2liaWxpdHk6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPixcblx0Zm9yQ29udGV4dE1lbnU6IGJvb2xlYW5cbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiB7XG5cdGNvbnN0IGNvcHlhYmxlQ29udGV4dHNQYXRoID0gIWZvckNvbnRleHRNZW51ID8gXCJub2RlVXBkYXRlc0luZm8vY29weUVuYWJsZW1lbnRcIiA6IFwiY29udGV4dG1lbnUvbm9kZVVwZGF0ZXNJbmZvL2NvcHlFbmFibGVtZW50XCI7XG5cdGNvbnN0IHJ1bnRpbWVCaW5kaW5nID0gcGF0aEluTW9kZWwoY29weWFibGVDb250ZXh0c1BhdGgsIFwiaW50ZXJuYWxcIik7XG5cdHJldHVybiBhbmQoY29weVZpc2liaWxpdHksIHJ1bnRpbWVCaW5kaW5nKTtcbn1cblxuLyoqXG4gKiBHZXRzIHRoZSBiaW5kaW5nIGV4cHJlc3Npb24gZm9yIHRoZSAnZW5hYmxlZCcgcHJvcGVydHkgb2YgdGhlICdNb3ZlIHVwJyBhbmQgJ01vdmUgZG93bicgYWN0aW9ucy5cbiAqIEBwYXJhbSBtb3ZlVXBEb3duVmlzaWJpbGl0eVxuICogQHBhcmFtIHN0YW5kYXJkQWN0aW9uc0NvbnRleHRcbiAqIEBwYXJhbSBmb3JVcFxuICogQHBhcmFtIGZvckNvbnRleHRNZW51XG4gKiBAcmV0dXJucyBUaGUgYmluZGluZyBleHByZXNzaW9uXG4gKi9cbmZ1bmN0aW9uIGdldE1vdmVVcERvd25FbmFibGVtZW50KFxuXHRtb3ZlVXBEb3duVmlzaWJpbGl0eTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+LFxuXHRzdGFuZGFyZEFjdGlvbnNDb250ZXh0OiBTdGFuZGFyZEFjdGlvbnNDb250ZXh0LFxuXHRmb3JVcDogYm9vbGVhbixcblx0Zm9yQ29udGV4dE1lbnUgPSBmYWxzZVxuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+IHtcblx0Y29uc3Qgc2luZ2xlQ29udGV4dE1vdmFibGVVcCA9ICFmb3JDb250ZXh0TWVudSA/IFwic2luZ2xlQ29udGV4dE1vdmFibGVVcFwiIDogXCJjb250ZXh0bWVudS9zaW5nbGVDb250ZXh0TW92YWJsZVVwXCI7XG5cdGNvbnN0IHNpbmdsZUNvbnRleHRNb3ZhYmxlRG93biA9ICFmb3JDb250ZXh0TWVudSA/IFwic2luZ2xlQ29udGV4dE1vdmFibGVEb3duXCIgOiBcImNvbnRleHRtZW51L3NpbmdsZUNvbnRleHRNb3ZhYmxlRG93blwiO1xuXHRjb25zdCBydW50aW1lQmluZGluZyA9IGZvclVwXG5cdFx0PyBlcXVhbChwYXRoSW5Nb2RlbChzaW5nbGVDb250ZXh0TW92YWJsZVVwLCBcImludGVybmFsXCIpLCB0cnVlKVxuXHRcdDogZXF1YWwocGF0aEluTW9kZWwoc2luZ2xlQ29udGV4dE1vdmFibGVEb3duLCBcImludGVybmFsXCIpLCB0cnVlKTtcblx0cmV0dXJuIGFuZChcblx0XHRtb3ZlVXBEb3duVmlzaWJpbGl0eSxcblx0XHRvcihcblx0XHRcdHN0YW5kYXJkQWN0aW9uc0NvbnRleHQucmVzdHJpY3Rpb25zLmlzVXBkYXRhYmxlLm5hdmlnYXRpb25FeHByZXNzaW9uLl90eXBlID09PSBcIlVucmVzb2x2YWJsZVwiLFxuXHRcdFx0c3RhbmRhcmRBY3Rpb25zQ29udGV4dC5yZXN0cmljdGlvbnMuaXNVcGRhdGFibGUuZXhwcmVzc2lvblxuXHRcdCksXG5cdFx0cnVudGltZUJpbmRpbmdcblx0KTtcbn1cblxuLyoqXG4gKiBUZWxscyBpZiB0aGUgdGFibGUgaW4gdGVtcGxhdGUgaXMgaW4gZGlzcGxheSBtb2RlLlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHRcbiAqIEBwYXJhbSBjaGVja011bHRpcGxlVmlzdWFsaXphdGlvblxuICogQHJldHVybnMgYHRydWVgIGlmIHRoZSB0YWJsZSBpcyBpbiBkaXNwbGF5IG1vZGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzSW5EaXNwbGF5TW9kZShjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4sIGNoZWNrTXVsdGlwbGVWaXN1YWxpemF0aW9uID0gZmFsc2UpOiBib29sZWFuIHtcblx0aWYgKGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RXcmFwcGVyKCkuaGFzSW5saW5lRWRpdCgpKSB7XG5cdFx0Ly9pZiB0aGVyZSBpcyBpbmxpbmUgZWRpdCBpbiB0aGUgcGFnZSB3ZSBjYW5ub3QgZm9yY2UgdGhlIHRhYmxlIHRvIGRpc3BsYXkgYmFzZWQgb24gdGhlIHRlbXBsYXRlIHR5cGVcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblx0Y29uc3QgdGVtcGxhdGVUeXBlID0gY29udmVydGVyQ29udGV4dC5nZXRUZW1wbGF0ZVR5cGUoKTtcblx0aWYgKFxuXHRcdHRlbXBsYXRlVHlwZSA9PT0gVGVtcGxhdGVUeXBlLkxpc3RSZXBvcnQgfHxcblx0XHR0ZW1wbGF0ZVR5cGUgPT09IFRlbXBsYXRlVHlwZS5BbmFseXRpY2FsTGlzdFBhZ2UgfHxcblx0XHQoY2hlY2tNdWx0aXBsZVZpc3VhbGl6YXRpb24gJiYgY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdFdyYXBwZXIoKS5oYXNNdWx0aXBsZVZpc3VhbGl6YXRpb25zKCkpXG5cdCkge1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdC8vIHVwZGF0YWJsZSB3aWxsIGJlIGhhbmRsZWQgYXQgdGhlIHByb3BlcnR5IGxldmVsXG5cdHJldHVybiBmYWxzZTtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztFQWdDQTtFQXdDTyxNQUFNQSxrQkFBa0IsR0FBRztJQUNqQ0MsR0FBRyxFQUFFLHFCQUFxQjtJQUMxQkMsSUFBSSxFQUFFLHNCQUFzQjtJQUM1QkMsTUFBTSxFQUFFLHdCQUF3QjtJQUNoQ0MsTUFBTSxFQUFFLHdCQUF3QjtJQUNoQ0MsV0FBVyxFQUFFLDZCQUE2QjtJQUMxQ0MsS0FBSyxFQUFFLHVCQUF1QjtJQUM5QkMsUUFBUSxFQUFFLDBCQUEwQjtJQUNwQ0MsUUFBUSxFQUFFLDBCQUEwQjtJQUNwQ0MsTUFBTSxFQUFFLHdCQUF3QjtJQUNoQ0MsUUFBUSxFQUFFO0VBQ1gsQ0FBQzs7RUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQU5BQyxRQUFBLENBQUFYLGtCQUFBLEdBQUFBLGtCQUFBO0VBT08sU0FBU1ksOEJBQThCQSxDQUM3Q0MsZ0JBQXlELEVBQ3pEQyxZQUEwQixFQUMxQkMsMEJBQXFELEVBQzVCO0lBQ3pCLE9BQU87TUFDTkMsY0FBYyxFQUFFQyxtQkFBbUIsQ0FBQ0osZ0JBQWdCLENBQUNLLHNCQUFzQixDQUFDLENBQUMsQ0FBQztNQUM5RUMsZ0JBQWdCLEVBQUU7UUFD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
|