@sapui5/sap.fe.base 1.149.0 → 1.151.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/src/sap/fe/base/.library +1 -1
- package/src/sap/fe/base/BindingToolkit.js +141 -6
- package/src/sap/fe/base/BindingToolkit.ts +173 -4
- package/src/sap/fe/base/BuildingBlockBase.js +12 -9
- package/src/sap/fe/base/BuildingBlockBase.ts +11 -8
- package/src/sap/fe/base/ClassSupport.js +1 -31
- package/src/sap/fe/base/ClassSupport.ts +0 -30
- package/src/sap/fe/base/HookSupport.js +1 -1
- package/src/sap/fe/base/HookSupport.ts +3 -0
- package/src/sap/fe/base/library.js +1 -1
|
@@ -13,9 +13,7 @@ sap.ui.define(["sap/fe/base/AnnotationEnum"], function (AnnotationEnum) {
|
|
|
13
13
|
|
|
14
14
|
/**
|
|
15
15
|
* Collection of functions to support the manipulation of UI5 bindings
|
|
16
|
-
* @public
|
|
17
16
|
* @namespace
|
|
18
|
-
* @ui5-experimental-since 1.145.0
|
|
19
17
|
*/
|
|
20
18
|
const bindingToolkitNamespace = "sap.fe.base.BindingToolkit";
|
|
21
19
|
|
|
@@ -33,8 +31,6 @@ sap.ui.define(["sap/fe/base/AnnotationEnum"], function (AnnotationEnum) {
|
|
|
33
31
|
|
|
34
32
|
/**
|
|
35
33
|
* A binding expression that evaluates to type T.
|
|
36
|
-
* @public
|
|
37
|
-
* @ui5-experimental-since 1.145.0
|
|
38
34
|
*/
|
|
39
35
|
|
|
40
36
|
const EDM_TYPE_MAPPING = {
|
|
@@ -534,7 +530,69 @@ sap.ui.define(["sap/fe/base/AnnotationEnum"], function (AnnotationEnum) {
|
|
|
534
530
|
path: targetPath
|
|
535
531
|
};
|
|
536
532
|
}
|
|
533
|
+
|
|
534
|
+
/**
|
|
535
|
+
* Transforms a binding path from a navigation property context to its parent context.
|
|
536
|
+
*
|
|
537
|
+
* This is used to transform a binding made for a NavProp context /MainObject/NavProp1/NavProp2
|
|
538
|
+
* into a binding on the previous context /MainObject/NavProp1.
|
|
539
|
+
* @param path The path string to transform
|
|
540
|
+
* @param partnerPath The optional partner navigation property name to check against
|
|
541
|
+
* @returns A binding expression for the upper context, or unresolvableExpression if the path cannot be transformed
|
|
542
|
+
*/
|
|
537
543
|
_exports.pathInModel = pathInModel;
|
|
544
|
+
function getBindingPathExpressionFromPartnerNavigation(path, partnerPath) {
|
|
545
|
+
if (path.startsWith("/")) {
|
|
546
|
+
// path is absolute it can be resolved from anywhere
|
|
547
|
+
return pathInModel(path);
|
|
548
|
+
}
|
|
549
|
+
if (partnerPath && path.startsWith(partnerPath + "/")) {
|
|
550
|
+
// Remove the partner navigation path prefix
|
|
551
|
+
return pathInModel(path.substring(partnerPath.length + 1));
|
|
552
|
+
} else {
|
|
553
|
+
return unresolvableExpression;
|
|
554
|
+
}
|
|
555
|
+
}
|
|
556
|
+
|
|
557
|
+
/**
|
|
558
|
+
* Recursively transforms an expression from a navigation property context to its parent context.
|
|
559
|
+
*
|
|
560
|
+
* This function walks through the expression tree and transforms all PathInModel expressions
|
|
561
|
+
* that reference relative paths (non-absolute, default model) using the partner navigation property.
|
|
562
|
+
* If the resulting expression contains unresolvable parts, the fallback value is returned instead.
|
|
563
|
+
* @template T The type of the binding expression
|
|
564
|
+
* @param expression The initial binding expression to transform
|
|
565
|
+
* @param partnerNavigationPropertyName The partner navigation property name to use for transformation
|
|
566
|
+
* @param fallbackValue The value to return if the expression becomes unresolvable
|
|
567
|
+
* @returns The transformed expression or the fallback value if unresolvable
|
|
568
|
+
*/
|
|
569
|
+
_exports.getBindingPathExpressionFromPartnerNavigation = getBindingPathExpressionFromPartnerNavigation;
|
|
570
|
+
function getBindingExpressionFromUpperContext(expression, partnerNavigationPropertyName, fallbackValue) {
|
|
571
|
+
if (expression._type === "Set") {
|
|
572
|
+
const newOperands = expression.operands.map(operand => getBindingExpressionFromUpperContext(operand, partnerNavigationPropertyName, fallbackValue));
|
|
573
|
+
if (expression.operator === "||") {
|
|
574
|
+
return or(...newOperands);
|
|
575
|
+
} else {
|
|
576
|
+
return and(...newOperands);
|
|
577
|
+
}
|
|
578
|
+
}
|
|
579
|
+
// Transform PathInModel expressions using the partner navigation
|
|
580
|
+
const transformedExpression = transformRecursively(expression, "PathInModel", pathExpression => {
|
|
581
|
+
// Only transform relative paths in the default model (modelName is undefined or empty)
|
|
582
|
+
if (!pathExpression.modelName || pathExpression.modelName === "") {
|
|
583
|
+
return getBindingPathExpressionFromPartnerNavigation(pathExpression.path, partnerNavigationPropertyName);
|
|
584
|
+
}
|
|
585
|
+
return pathExpression;
|
|
586
|
+
}, true // includeAllExpression - transform all expression types in the tree
|
|
587
|
+
);
|
|
588
|
+
|
|
589
|
+
// Check if the transformed expression contains unresolvable parts
|
|
590
|
+
if (hasUnresolvableExpression(transformedExpression)) {
|
|
591
|
+
return fallbackValue;
|
|
592
|
+
}
|
|
593
|
+
return transformedExpression;
|
|
594
|
+
}
|
|
595
|
+
_exports.getBindingExpressionFromUpperContext = getBindingExpressionFromUpperContext;
|
|
538
596
|
/**
|
|
539
597
|
* Creates a constant expression based on a primitive value.
|
|
540
598
|
* @template T
|
|
@@ -1678,7 +1736,56 @@ sap.ui.define(["sap/fe/base/AnnotationEnum"], function (AnnotationEnum) {
|
|
|
1678
1736
|
expressions: expressions
|
|
1679
1737
|
};
|
|
1680
1738
|
}
|
|
1739
|
+
|
|
1740
|
+
/**
|
|
1741
|
+
* Concatenate multiple expressions with a separator.
|
|
1742
|
+
* @param separator The separator to insert between expressions
|
|
1743
|
+
* @param inExpressions Expressions to concatenate
|
|
1744
|
+
* @returns The concatenated expression
|
|
1745
|
+
*/
|
|
1681
1746
|
_exports.concat = concat;
|
|
1747
|
+
function concatWithSeparator(separator, ...inExpressions) {
|
|
1748
|
+
const expressions = inExpressions.map(wrapPrimitive);
|
|
1749
|
+
if (hasUnresolvableExpression(...expressions)) {
|
|
1750
|
+
return unresolvableExpression;
|
|
1751
|
+
}
|
|
1752
|
+
const separatorConstant = constant(separator);
|
|
1753
|
+
if (expressions.every(isConstant)) {
|
|
1754
|
+
return constant(expressions.reduce((concatenated, value, index) => {
|
|
1755
|
+
const constantValue = value;
|
|
1756
|
+
if (constantValue.value !== undefined && constantValue.value !== null) {
|
|
1757
|
+
const prefix = index > 0 ? separator : "";
|
|
1758
|
+
return concatenated + prefix + constantValue.value.toString();
|
|
1759
|
+
}
|
|
1760
|
+
return concatenated;
|
|
1761
|
+
}, ""));
|
|
1762
|
+
}
|
|
1763
|
+
|
|
1764
|
+
// Interleave separator constants between expressions
|
|
1765
|
+
const expressionsWithSeparators = [];
|
|
1766
|
+
expressions.forEach((expr, index) => {
|
|
1767
|
+
if (index > 0) {
|
|
1768
|
+
expressionsWithSeparators.push(separatorConstant);
|
|
1769
|
+
}
|
|
1770
|
+
expressionsWithSeparators.push(expr);
|
|
1771
|
+
});
|
|
1772
|
+
if (expressionsWithSeparators.some(isComplexTypeExpression)) {
|
|
1773
|
+
let pathIdx = 0;
|
|
1774
|
+
const myConcatExpression = formatResult(expressionsWithSeparators, "._formatters.StandardFormatter#concat", undefined, true);
|
|
1775
|
+
const allParts = [];
|
|
1776
|
+
transformRecursively(myConcatExpression, "PathInModel", constantPath => {
|
|
1777
|
+
allParts.push(constantPath);
|
|
1778
|
+
return pathInModel(`$${pathIdx++}`, "$");
|
|
1779
|
+
});
|
|
1780
|
+
allParts.unshift(constant(JSON.stringify(myConcatExpression)));
|
|
1781
|
+
return formatResult(allParts, "._formatters.StandardFormatter.bind($control)#evaluateComplexExpression", undefined, true);
|
|
1782
|
+
}
|
|
1783
|
+
return {
|
|
1784
|
+
_type: "Concat",
|
|
1785
|
+
expressions: expressionsWithSeparators
|
|
1786
|
+
};
|
|
1787
|
+
}
|
|
1788
|
+
_exports.concatWithSeparator = concatWithSeparator;
|
|
1682
1789
|
function transformRecursively(inExpression, expressionType, transformFunction, includeAllExpression = false) {
|
|
1683
1790
|
let expression = inExpression;
|
|
1684
1791
|
switch (expression._type) {
|
|
@@ -1890,6 +1997,34 @@ sap.ui.define(["sap/fe/base/AnnotationEnum"], function (AnnotationEnum) {
|
|
|
1890
1997
|
}
|
|
1891
1998
|
}
|
|
1892
1999
|
|
|
2000
|
+
/**
|
|
2001
|
+
* Resolves a binding expression by substituting path values from preloaded data.
|
|
2002
|
+
* Uses transformRecursively to replace PathInModel expressions with constants where values are available.
|
|
2003
|
+
* Only resolves paths from the default (empty) model name.
|
|
2004
|
+
* @template T The target type
|
|
2005
|
+
* @param expression The binding toolkit expression to resolve
|
|
2006
|
+
* @param preloadedValues A flat object with property paths as keys and their values
|
|
2007
|
+
* @returns The resolved expression with PathInModel expressions replaced by constants where possible
|
|
2008
|
+
*/
|
|
2009
|
+
_exports.wrapBindingExpression = wrapBindingExpression;
|
|
2010
|
+
function resolveWithPreloadedValues(expression, preloadedValues) {
|
|
2011
|
+
const expr = wrapPrimitive(expression);
|
|
2012
|
+
return transformRecursively(expr, "PathInModel", pathExpression => {
|
|
2013
|
+
// Only resolve paths from the default model (empty model name)
|
|
2014
|
+
if (pathExpression.modelName && pathExpression.modelName !== "") {
|
|
2015
|
+
return pathExpression;
|
|
2016
|
+
}
|
|
2017
|
+
|
|
2018
|
+
// Check if this path is in preloaded values
|
|
2019
|
+
if (preloadedValues.hasOwnProperty(pathExpression.path)) {
|
|
2020
|
+
return constant(preloadedValues[pathExpression.path]);
|
|
2021
|
+
}
|
|
2022
|
+
|
|
2023
|
+
// Path not in preloaded values, return as-is
|
|
2024
|
+
return pathExpression;
|
|
2025
|
+
}, true);
|
|
2026
|
+
}
|
|
2027
|
+
|
|
1893
2028
|
/**
|
|
1894
2029
|
* Compile an expression into an expression binding.
|
|
1895
2030
|
* @template T The target type
|
|
@@ -1899,7 +2034,7 @@ sap.ui.define(["sap/fe/base/AnnotationEnum"], function (AnnotationEnum) {
|
|
|
1899
2034
|
* @param isNullable Whether binding expression can resolve to empty string or not
|
|
1900
2035
|
* @returns The corresponding expression binding
|
|
1901
2036
|
*/
|
|
1902
|
-
_exports.
|
|
2037
|
+
_exports.resolveWithPreloadedValues = resolveWithPreloadedValues;
|
|
1903
2038
|
function compileExpression(expression, embeddedInBinding = false, keepTargetType = false, isNullable = false) {
|
|
1904
2039
|
const expr = wrapPrimitive(expression);
|
|
1905
2040
|
const embeddedSeparator = keepTargetType ? "$" : "%";
|
|
@@ -2097,4 +2232,4 @@ sap.ui.define(["sap/fe/base/AnnotationEnum"], function (AnnotationEnum) {
|
|
|
2097
2232
|
}
|
|
2098
2233
|
return _exports;
|
|
2099
2234
|
}, false);
|
|
2100
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJiaW5kaW5nVG9vbGtpdE5hbWVzcGFjZSIsIl9leHBvcnRzIiwiaXNQcm9wZXJ0eSIsInNlcnZpY2VPYmplY3QiLCJfdHlwZSIsImlzQWN0aW9uUGFyYW1ldGVyIiwiRURNX1RZUEVfTUFQUElORyIsInR5cGUiLCJjb25zdHJhaW50cyIsIiRQcmVjaXNpb24iLCIkVjQiLCIkU2NhbGUiLCIkTWF4TGVuZ3RoIiwiJE51bGxhYmxlIiwidW5yZXNvbHZhYmxlRXhwcmVzc2lvbiIsImVzY2FwZVhtbEF0dHJpYnV0ZSIsImlucHV0U3RyaW5nIiwicmVwbGFjZSIsImhhc1VucmVzb2x2YWJsZUV4cHJlc3Npb24iLCJleHByZXNzaW9ucyIsImZpbmQiLCJleHByIiwidW5kZWZpbmVkIiwiX2NoZWNrRXhwcmVzc2lvbnNBcmVFcXVhbCIsImEiLCJiIiwidmFsdWUiLCJvcGVyYXRvciIsIm9wZXJhbmQxIiwib3BlcmFuZDIiLCJvcGVyYW5kIiwib3BlcmFuZHMiLCJsZW5ndGgiLCJldmVyeSIsImV4cHJlc3Npb24iLCJzb21lIiwib3RoZXJFeHByZXNzaW9uIiwiY29uZGl0aW9uIiwib25UcnVlIiwib25GYWxzZSIsImFFeHByZXNzaW9ucyIsImJFeHByZXNzaW9ucyIsImluZGV4IiwicGF0aEluTW9kZWwiLCJtb2RlbE5hbWUiLCJwYXRoIiwidGFyZ2V0RW50aXR5U2V0IiwiZm4iLCJwYXJhbWV0ZXJzIiwiYmluZGluZ1BhcmFtZXRlcnMiLCJvdGhlckZ1bmN0aW9uIiwib2JqIiwicmVmIiwiZmxhdHRlblNldEV4cHJlc3Npb24iLCJyZWR1Y2UiLCJyZXN1bHQiLCJjYW5kaWRhdGVzRm9yRmxhdHRlbmluZyIsImZvckVhY2giLCJjYW5kaWRhdGUiLCJlIiwicHVzaCIsImhhc09wcG9zaXRlRXhwcmVzc2lvbnMiLCJuZWdhdGVkRXhwcmVzc2lvbnMiLCJtYXAiLCJub3QiLCJpIiwiYW5kIiwid3JhcFByaW1pdGl2ZSIsImlzU3RhdGljRmFsc2UiLCJub25Ucml2aWFsRXhwcmVzc2lvbiIsImZpbHRlciIsImlzRmFsc2UiLCJpc0NvbnN0YW50IiwiY29uc3RhbnQiLCJpc1ZhbGlkIiwiaXNUcnVlIiwib3IiLCJpc1N0YXRpY1RydWUiLCJhZGQiLCJsZWZ0T3BlcmFuZCIsInJpZ2h0T3BlcmFuZCIsImFyaXRobWV0aWMiLCJzdWJ0cmFjdCIsIm11bHRpcGx5IiwiZGl2aWRlIiwibW9kdWxvIiwibmVnYXRlIiwiZmxvb3IiLCJsZWZ0RXhwcmVzc2lvbiIsInJpZ2h0RXhwcmVzc2lvbiIsInN1bSIsImRpZmYiLCJkaXYiLCJtb2QiLCJNYXRoIiwibXVsdCIsImlzQ29tcGFyaXNvbiIsImlzVHJ1dGh5IiwiYmluZGluZ0V4cHJlc3Npb24iLCJ2aXNpdGVkTmF2aWdhdGlvblBhdGhzIiwicGF0aFZpc2l0b3IiLCJ0YXJnZXRQYXRoIiwibG9jYWxQYXRoIiwiY29uY2F0Iiwiam9pbiIsImNvbnN0YW50VmFsdWUiLCJBcnJheSIsImlzQXJyYXkiLCJpc1ByaW1pdGl2ZU9iamVjdCIsInZhbHVlT2YiLCJPYmplY3QiLCJlbnRyaWVzIiwicGxhaW5FeHByZXNzaW9uIiwia2V5IiwidmFsIiwid3JhcHBlZFZhbHVlIiwicmVzb2x2ZUJpbmRpbmdTdHJpbmciLCJ0YXJnZXRUeXBlIiwic3RhcnRzV2l0aCIsInBhdGhJbk1vZGVsUmVnZXgiLCJwYXRoSW5Nb2RlbFJlZ2V4TWF0Y2giLCJleGVjIiwiaXNOYU4iLCJOdW1iZXIiLCJyZWZlcmVuY2UiLCJiaW5kU3RhdGUiLCJzdGF0ZU9iamVjdFByb3AiLCJfX2JpbmRpbmdJbmZvIiwidG9TdHJpbmciLCJtb2RlbCIsInNvbWV0aGluZyIsImlzQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIiwibWF5YmVDb25zdGFudCIsImlzUGF0aEluTW9kZWxFeHByZXNzaW9uIiwibWF5YmVCaW5kaW5nIiwiaXNDb21wbGV4VHlwZUV4cHJlc3Npb24iLCJpc0NvbmNhdEV4cHJlc3Npb24iLCJpc0lmRWxzZUV4cHJlc3Npb24iLCJpc1VuZGVmaW5lZEV4cHJlc3Npb24iLCJleHByZXNzaW9uQXNFeHByZXNzaW9uIiwib2JqZWN0VHlwZSIsImNvbnN0cnVjdG9yIiwibmFtZSIsImlzQ29tcGxleEFubm90YXRpb25FeHByZXNzaW9uIiwiYW5ub3RhdGlvblZhbHVlIiwiQ09OVkVSVEVSX1JPT1RfU1lNQk9MIiwic2V0Q29udmVydGVyUm9vdFN5bWJvbCIsImNvbnZlcnRlclJvb3RTeW1ib2wiLCJnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24iLCJkZWZhdWx0VmFsdWUiLCJjb252ZXJ0ZXJSb290IiwiYW5ub3RhdGlvbklmRXhwcmVzc2lvbiIsIiRJZiIsInBhcnNlQW5ub3RhdGlvbkNvbmRpdGlvbiIsIiROb3QiLCJlcXVhbCIsIiRFcSIsIm5vdEVxdWFsIiwiJE5lIiwiZ3JlYXRlclRoYW4iLCIkR3QiLCJncmVhdGVyT3JFcXVhbCIsIiRHZSIsImxlc3NUaGFuIiwiJEx0IiwibGVzc09yRXF1YWwiLCIkTGUiLCIkT3IiLCJvckNvbmRpdGlvbiIsIiRBbmQiLCJhbmRDb25kaXRpb24iLCJjb21wYXJpc29uIiwiJEluIiwiJEhhcyIsIiRBZGQiLCIkU3ViIiwiJE11bCIsIiREaXYiLCIkRGl2QnkiLCIkTW9kIiwiJE5lZyIsImFubm90YXRpb25BcHBseUV4cHJlc3Npb24iLCJoYXNPd25Qcm9wZXJ0eSIsIiRQYXRoIiwiJEZ1bmN0aW9uIiwiJEFwcGx5IiwicmVzb2x2ZUVudW1WYWx1ZSIsIiRFbnVtTWVtYmVyIiwiaWZFbHNlIiwiY29udmVydFN1YkFwcGx5UGFyYW1ldGVycyIsImFwcGx5UGFyYW0iLCJhcHBseVBhcmFtQ29udmVydGVkIiwiYXBwbHlFeHByZXNzaW9uIiwicGFyYW1ldGVyIiwidGVtcGxhdGUiLCJ0ZW1wbGF0ZVBhcmFtcyIsInNsaWNlIiwidGFyZ2V0T2JqZWN0IiwiJE5hbWUiLCIkTGFiZWxlZEVsZW1lbnQiLCJsZWZ0VmFsdWVJbnQiLCJyaWdodFZhbHVlSW50IiwiYWxsQ2hpbGRyZW5Db25zdGFudHMiLCJpdGVtIiwicmlnaHRWYWx1ZXMiLCJpbmNsdWRlcyIsImNoZWNrVW5kZWZpbmVkIiwibGVmdCIsInJpZ2h0IiwicmVkdWNlZCIsImNvbmRpdGlvbkV4cHJlc3Npb24iLCJvblRydWVFeHByZXNzaW9uIiwib25GYWxzZUV4cHJlc3Npb24iLCJwYXRoSWR4IiwibXlJZkVsc2VFeHByZXNzaW9uIiwiZm9ybWF0UmVzdWx0IiwiYWxsUGFydHMiLCJ0cmFuc2Zvcm1SZWN1cnNpdmVseSIsImNvbnN0YW50UGF0aCIsInVuc2hpZnQiLCJKU09OIiwic3RyaW5naWZ5IiwiaGFzUmVmZXJlbmNlVG9EZWZhdWx0Q29udGV4dCIsImZvcm1hdHRlckZ1bmN0aW9uIiwiY29udGV4dEVudGl0eVR5cGUiLCJpZ25vcmVDb21wbGV4VHlwZSIsInBhcmFtZXRlckV4cHJlc3Npb25zIiwia2V5cyIsImZ1bmN0aW9uTmFtZSIsIl9fZnVuY3Rpb25OYW1lIiwiZm9ybWF0dGVyQ2xhc3MiLCJmb3JtYXR0ZXJOYW1lIiwic3BsaXQiLCJteUZvcm1hdEV4cHJlc3Npb24iLCJzZXRVcENvbnN0cmFpbnRzIiwidGFyZ2V0TWFwcGluZyIsInByb3BlcnR5Iiwic2NhbGUiLCJwcmVjaXNpb24iLCJtYXhMZW5ndGgiLCJudWxsYWJsZSIsImFubm90YXRpb25zIiwiVmFsaWRhdGlvbiIsIk1pbmltdW0iLCJtaW5pbXVtIiwiTWF4aW11bSIsIm1heGltdW0iLCJDb21tb24iLCJJc0RpZ2l0U2VxdWVuY2UiLCJpc0RpZ2l0U2VxdWVuY2UiLCJWNCIsImZvcm1hdFdpdGhUeXBlSW5mb3JtYXRpb24iLCJwcm9wZXJ0eUJpbmRpbmdFeHByZXNzaW9uIiwiaWdub3JlQ29uc3RyYWludHMiLCJvdXRFeHByZXNzaW9uIiwiZm9ybWF0T3B0aW9ucyIsImluZGV4T2YiLCJhc3NpZ24iLCJwYXJzZUFzU3RyaW5nIiwicGFyc2VLZWVwc0VtcHR5U3RyaW5nIiwiZmlzY2FsVHlwZSIsImdldEZpc2NhbFR5cGUiLCJ0eXBlc1N1cHBvcnRpbmdQYXJzZUVtcHR5VmFsdWVUb1plcm8iLCJwYXJzZUVtcHR5VmFsdWVUb1plcm8iLCJlbXB0eVN0cmluZyIsIklzRmlzY2FsWWVhciIsIklzRmlzY2FsUGVyaW9kIiwiSXNGaXNjYWxZZWFyUGVyaW9kIiwiSXNGaXNjYWxRdWFydGVyIiwiSXNGaXNjYWxZZWFyUXVhcnRlciIsIklzRmlzY2FsV2VlayIsIklzRmlzY2FsWWVhcldlZWsiLCJJc0RheU9mRmlzY2FsWWVhciIsImFkZFR5cGVJbmZvcm1hdGlvbiIsIm9Gb3JtYXRPcHRpb25zIiwib0NvbnN0cmFpbnRPcHRpb25zIiwiX2dldENvbXBsZXhUeXBlRm9ybWF0T3B0aW9uc0Zyb21GaXJzdFBhcmFtIiwidW9tUGF0aCIsIm1vZGUiLCJwcmVzZXJ2ZURlY2ltYWxzIiwic2tpcERlY2ltYWxzVmFsaWRhdGlvbiIsImN1cnJlbmN5UGF0aCIsIm1heEZyYWN0aW9uRGlnaXRzIiwicGFyYW0iLCJzaG93TnVtYmVyIiwic2hvd01lYXN1cmUiLCJkZWNpbWFsUGFkZGluZyIsImZ1bmMiLCJvbiIsImlzRm9ybWF0dGluZ0ZuIiwiaXNFbXB0eSIsImFCaW5kaW5ncyIsImZpbmFsRXhwcmVzc2lvbiIsImFsd2F5c0tlZXBUYXJnZXRUeXBlIiwiaXNFeHByZXNzaW9uU3RhdGljYWxseVJlc29sdmFibGUiLCJleHAiLCJyZWZlcmVuY2VkUGF0aHMiLCJwYXRoRXhwIiwicCIsImdldFN0YXRpY2FsbHlSZXNvbHZhYmxlRXhwcmVzc2lvbiIsIm5ld09wZXJhbmRzIiwiaW5FeHByZXNzaW9ucyIsImNvbmNhdGVuYXRlZCIsIm15Q29uY2F0RXhwcmVzc2lvbiIsImluRXhwcmVzc2lvbiIsImV4cHJlc3Npb25UeXBlIiwidHJhbnNmb3JtRnVuY3Rpb24iLCJpbmNsdWRlQWxsRXhwcmVzc2lvbiIsInN1YkV4cHJlc3Npb24iLCJiaW5kaW5nUGFyYW1ldGVyIiwibmVlZFBhcmVudGhlc2lzIiwiY29tcGlsZUNvbnN0YW50T2JqZWN0IiwiaXNOdWxsYWJsZSIsIm9iamVjdHMiLCJwcm9wZXJ0aWVzIiwiY2hpbGRSZXN1bHQiLCJjb21waWxlRXhwcmVzc2lvbiIsImNvbXBpbGVDb25zdGFudCIsImVtYmVkZGVkSW5CaW5kaW5nIiwiZG9Ob3RTdHJpbmdpZnkiLCJjb21waWxlUGF0aEluTW9kZWxFeHByZXNzaW9uIiwiZXhwcmVzc2lvbkZvckJpbmRpbmciLCJlbWJlZGRlZFNlcGFyYXRvciIsImNvbXBsZXhCaW5kaW5nRGVmaW5pdGlvbiIsImNvbXBpbGVQYXRoSW5Nb2RlbCIsIm91dEJpbmRpbmciLCJzZXBhcmF0b3IiLCJjb21waWxlQ29tcGxleFR5cGVFeHByZXNzaW9uIiwiY29tcGlsZVBhdGhQYXJhbWV0ZXIiLCJvdXRwdXRFbmQiLCJoYXNFbGVtZW50cyIsIndyYXBCaW5kaW5nRXhwcmVzc2lvbiIsInBhcmVudGhlc2lzUmVxdWlyZWQiLCJrZWVwVGFyZ2V0VHlwZSIsImhhc0VtYmVkZGVkRnVuY3Rpb25DYWxsT3JCaW5kaW5nIiwic3ViRm4iLCJzdWJTdWJGbiIsImFyZ3VtZW50U3RyaW5nIiwiYXJnIiwiZm5DYWxsIiwic3Vic3RyaW5nIiwiY29tcGFyaXNvbkV4cHJlc3Npb24iLCJjb21waWxlQ29tcGFyaXNvbkV4cHJlc3Npb24iLCJpZkVsc2VFeHByZXNzaW9uIiwic2V0RXhwcmVzc2lvbiIsImNvbmNhdEV4cHJlc3Npb24iLCJuZXN0ZWRFeHByZXNzaW9uIiwibGVuZ3RoRXhwcmVzc2lvbiIsIm5vdEV4cHJlc3Npb24iLCJhcml0aG1ldGljRXhwcmVzc2lvbiIsImNvbXBpbGVBcml0aG1ldGljRXhwcmVzc2lvbiIsInRydXRoeUV4cHJlc3Npb24iLCJmb3JtYXR0ZXJFeHByZXNzaW9uIiwiY29tcGlsZUZvcm1hdHRlckV4cHJlc3Npb24iLCJjb21wbGV4VHlwZUV4cHJlc3Npb24iLCJjb21waWxlT3BlcmFuZCIsImNvbXBpbGVkT3BlcmFuZCIsImNvbGxlY3Rpb24iLCJmbGFncyIsInBhcnRzIiwic2luZ2xlUGF0aCIsIm91dFZhbHVlIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJCaW5kaW5nVG9vbGtpdC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7XG5cdEFjdGlvblBhcmFtZXRlcixcblx0QWRkQW5ub3RhdGlvbkV4cHJlc3Npb24sXG5cdEFkZENvbmRpdGlvbmFsRXhwcmVzc2lvbixcblx0QW5kQW5ub3RhdGlvbkV4cHJlc3Npb24sXG5cdEFuZENvbmRpdGlvbmFsRXhwcmVzc2lvbixcblx0QXBwbHlBbm5vdGF0aW9uRXhwcmVzc2lvbixcblx0Qm9vbGVhbixcblx0Q29uZGl0aW9uYWxDaGVja09yVmFsdWUsXG5cdENvbnZlcnRlZE1ldGFkYXRhLFxuXHREaXZBbm5vdGF0aW9uRXhwcmVzc2lvbixcblx0RGl2QnlBbm5vdGF0aW9uRXhwcmVzc2lvbixcblx0RGl2QnlDb25kaXRpb25hbEV4cHJlc3Npb24sXG5cdERpdkNvbmRpdGlvbmFsRXhwcmVzc2lvbixcblx0RW50aXR5U2V0LFxuXHRFbnRpdHlUeXBlLFxuXHRFcUFubm90YXRpb25FeHByZXNzaW9uLFxuXHRFcUNvbmRpdGlvbmFsRXhwcmVzc2lvbixcblx0R2VBbm5vdGF0aW9uRXhwcmVzc2lvbixcblx0R2VDb25kaXRpb25hbEV4cHJlc3Npb24sXG5cdEd0QW5ub3RhdGlvbkV4cHJlc3Npb24sXG5cdEd0Q29uZGl0aW9uYWxFeHByZXNzaW9uLFxuXHRIYXNBbm5vdGF0aW9uRXhwcmVzc2lvbixcblx0SGFzQ29uZGl0aW9uYWxFeHByZXNzaW9uLFxuXHRJZkFubm90YXRpb25FeHByZXNzaW9uLFxuXHRJZkFubm90YXRpb25FeHByZXNzaW9uVmFsdWUsXG5cdEluQW5ub3RhdGlvbkV4cHJlc3Npb24sXG5cdEluQ29uZGl0aW9uYWxFeHByZXNzaW9uLFxuXHRMZUFubm90YXRpb25FeHByZXNzaW9uLFxuXHRMZUNvbmRpdGlvbmFsRXhwcmVzc2lvbixcblx0THRBbm5vdGF0aW9uRXhwcmVzc2lvbixcblx0THRDb25kaXRpb25hbEV4cHJlc3Npb24sXG5cdE1vZEFubm90YXRpb25FeHByZXNzaW9uLFxuXHRNb2RDb25kaXRpb25hbEV4cHJlc3Npb24sXG5cdE11bEFubm90YXRpb25FeHByZXNzaW9uLFxuXHRNdWxDb25kaXRpb25hbEV4cHJlc3Npb24sXG5cdE5lQW5ub3RhdGlvbkV4cHJlc3Npb24sXG5cdE5lQ29uZGl0aW9uYWxFeHByZXNzaW9uLFxuXHROZWdBbm5vdGF0aW9uRXhwcmVzc2lvbixcblx0TmVnQ29uZGl0aW9uYWxFeHByZXNzaW9uLFxuXHROb3RBbm5vdGF0aW9uRXhwcmVzc2lvbixcblx0Tm90Q29uZGl0aW9uYWxFeHByZXNzaW9uLFxuXHRPckFubm90YXRpb25FeHByZXNzaW9uLFxuXHRPckNvbmRpdGlvbmFsRXhwcmVzc2lvbixcblx0UGF0aEFubm90YXRpb25FeHByZXNzaW9uLFxuXHRQYXRoQ29uZGl0aW9uRXhwcmVzc2lvbixcblx0UHJvcGVydHksXG5cdFByb3BlcnR5QW5ub3RhdGlvblZhbHVlLFxuXHRTdWJBbm5vdGF0aW9uRXhwcmVzc2lvbixcblx0U3ViQ29uZGl0aW9uYWxFeHByZXNzaW9uLFxuXHRDb25zdGFudEV4cHJlc3Npb24gYXMgVm9jYWJDb25zdGFudEV4cHJlc3Npb25cbn0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzXCI7XG5pbXBvcnQgeyBDb21tb25Bbm5vdGF0aW9uVGVybXMgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL0NvbW1vblwiO1xuaW1wb3J0IHsgcmVzb2x2ZUVudW1WYWx1ZSB9IGZyb20gXCJzYXAvZmUvYmFzZS9Bbm5vdGF0aW9uRW51bVwiO1xuaW1wb3J0IHR5cGUgeyBCaW5kaW5nSW5mb0hvbGRlciB9IGZyb20gXCJzYXAvZmUvYmFzZS9DbGFzc1N1cHBvcnRcIjtcblxuZXhwb3J0IHR5cGUgUHJpbWl0aXZlVHlwZSA9IHN0cmluZyB8IG51bWJlciB8IGJpZ2ludCB8IGJvb2xlYW4gfCBvYmplY3QgfCBudWxsIHwgdW5kZWZpbmVkO1xudHlwZSBEZWZpbmVkUHJpbWl0aXZlVHlwZSA9IHN0cmluZyB8IG51bWJlciB8IGJpZ2ludCB8IGJvb2xlYW4gfCBvYmplY3Q7XG4vKipcbiAqIFJldHVybnMgZWl0aGVyIHRoZSB2YWx1ZSBvZiB0aGUgb2JqZWN0IG9yIHRoZSBvYmplY3QgaXRzZWxmIGlmIGl0IGlzIG5vdCBhIHByaW1pdGl2ZSBvYmplY3QuXG4gKi9cbnR5cGUgUHJpbWl0aXZlVHlwZUNhc3Q8UD4gPSBQIGV4dGVuZHMgU3RyaW5nID8gc3RyaW5nIDogUCBleHRlbmRzIEJvb2xlYW4gPyBib29sZWFuIDogUCBleHRlbmRzIE51bWJlciA/IG51bWJlciA6IFA7XG50eXBlIEJhc2VFeHByZXNzaW9uPF9UPiA9IHtcblx0X3R5cGU6IHN0cmluZztcbn07XG5cbi8qKlxuICogQ29sbGVjdGlvbiBvZiBmdW5jdGlvbnMgdG8gc3VwcG9ydCB0aGUgbWFuaXB1bGF0aW9uIG9mIFVJNSBiaW5kaW5nc1xuICogQHB1YmxpY1xuICogQG5hbWVzcGFjZVxuICogQHVpNS1leHBlcmltZW50YWwtc2luY2UgMS4xNDUuMFxuICovXG5leHBvcnQgY29uc3QgYmluZGluZ1Rvb2xraXROYW1lc3BhY2UgPSBcInNhcC5mZS5iYXNlLkJpbmRpbmdUb29sa2l0XCI7XG5cbmV4cG9ydCB0eXBlIEZvcm1hdE9wdGlvbnMgPSBQYXJ0aWFsPHtcblx0Y3VzdG9tVW5pdHM6IFJlY29yZDxzdHJpbmcsIG9iamVjdD47XG5cdGN1c3RvbUN1cnJlbmNpZXM6IFJlY29yZDxzdHJpbmcsIG9iamVjdD47XG5cdGRlY2ltYWxzOiBudW1iZXI7XG5cdGVtcHR5U3RyaW5nOiBudWxsIHwgbnVtYmVyIHwgc3RyaW5nO1xuXHRmaXNjYWxUeXBlOiBzdHJpbmc7XG5cdGdyb3VwaW5nRW5hYmxlZDogYm9vbGVhbjtcblx0bWF4RnJhY3Rpb25EaWdpdHM6IG51bWJlcjtcblx0bWF4SW50ZWdlckRpZ2l0czogbnVtYmVyO1xuXHRtaW5GcmFjdGlvbkRpZ2l0czogbnVtYmVyO1xuXHRtaW5JbnRlZ2VyRGlnaXRzOiBudW1iZXI7XG5cdHBhcnNlQXNTdHJpbmc6IGJvb2xlYW47XG5cdHBhcnNlS2VlcHNFbXB0eVN0cmluZzogYm9vbGVhbjtcblx0cGF0dGVybjogc3RyaW5nO1xuXHRwcmVjaXNpb246IG51bWJlcjtcblx0cHJlc2VydmVEZWNpbWFsczogYm9vbGVhbjtcblx0c2hvcnREZWNpbWFsczogbnVtYmVyO1xuXHRzaG9ydFJlZk51bWJlcjogbnVtYmVyO1xuXHRzaG93TWVhc3VyZTogYm9vbGVhbjtcblx0c2hvd051bWJlcjogYm9vbGVhbjtcblx0c2hvd1NjYWxlOiBib29sZWFuO1xuXHRzdHlsZTogc3RyaW5nO1xufT47XG5cbmV4cG9ydCB0eXBlIENvbnN0YW50RXhwcmVzc2lvbjxUPiA9IEJhc2VFeHByZXNzaW9uPFQ+ICYge1xuXHRfdHlwZTogXCJDb25zdGFudFwiO1xuXHR2YWx1ZTogVDtcbn07XG5cbnR5cGUgU2V0T3BlcmF0b3IgPSBcIiYmXCIgfCBcInx8XCI7XG5leHBvcnQgdHlwZSBTZXRFeHByZXNzaW9uID0gQmFzZUV4cHJlc3Npb248Ym9vbGVhbj4gJiB7XG5cdF90eXBlOiBcIlNldFwiO1xuXHRvcGVyYXRvcjogU2V0T3BlcmF0b3I7XG5cdG9wZXJhbmRzOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj5bXTtcbn07XG5cbmV4cG9ydCB0eXBlIE5vdEV4cHJlc3Npb24gPSBCYXNlRXhwcmVzc2lvbjxib29sZWFuPiAmIHtcblx0X3R5cGU6IFwiTm90XCI7XG5cdG9wZXJhbmQ6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPjtcbn07XG5cbmV4cG9ydCB0eXBlIFRydXRoeUV4cHJlc3Npb24gPSBCYXNlRXhwcmVzc2lvbjxib29sZWFuPiAmIHtcblx0X3R5cGU6IFwiVHJ1dGh5XCI7XG5cdG9wZXJhbmQ6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxzdHJpbmc+O1xufTtcblxuZXhwb3J0IHR5cGUgUmVmZXJlbmNlRXhwcmVzc2lvbiA9IEJhc2VFeHByZXNzaW9uPG9iamVjdD4gJiB7XG5cdF90eXBlOiBcIlJlZlwiO1xuXHRyZWY6IHN0cmluZyB8IG51bGw7XG59O1xuXG5leHBvcnQgdHlwZSBGb3JtYXR0ZXJFeHByZXNzaW9uPFQ+ID0gQmFzZUV4cHJlc3Npb248VD4gJiB7XG5cdF90eXBlOiBcIkZvcm1hdHRlclwiO1xuXHRmbjogc3RyaW5nO1xuXHRwYXJhbWV0ZXJzOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248dW5rbm93bj5bXTtcbn07XG5cbnR5cGUgQ29tcGxleFR5cGVFeHByZXNzaW9uPFQ+ID0gQmFzZUV4cHJlc3Npb248VD4gJiB7XG5cdF90eXBlOiBcIkNvbXBsZXhUeXBlXCI7XG5cdHR5cGU6IHN0cmluZztcblx0Zm9ybWF0T3B0aW9uczogRm9ybWF0T3B0aW9ucztcblx0Y29uc3RyYWludHM6IG9iamVjdDtcblx0cGFyYW1ldGVyczogb2JqZWN0O1xuXHRiaW5kaW5nUGFyYW1ldGVyczogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHVua25vd24+W107XG59O1xuXG5leHBvcnQgdHlwZSBGdW5jdGlvbkV4cHJlc3Npb248VD4gPSBCYXNlRXhwcmVzc2lvbjxUPiAmIHtcblx0X3R5cGU6IFwiRnVuY3Rpb25cIjtcblx0b2JqPzogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPG9iamVjdD47XG5cdGZuOiBzdHJpbmc7XG5cdGlzRm9ybWF0dGluZ0ZuOiBib29sZWFuO1xuXHRwYXJhbWV0ZXJzOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248dW5rbm93bj5bXTtcbn07XG5cbmV4cG9ydCB0eXBlIENvbmNhdEV4cHJlc3Npb24gPSBCYXNlRXhwcmVzc2lvbjxzdHJpbmc+ICYge1xuXHRfdHlwZTogXCJDb25jYXRcIjtcblx0ZXhwcmVzc2lvbnM6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxzdHJpbmc+W107XG59O1xuXG5leHBvcnQgdHlwZSBMZW5ndGhFeHByZXNzaW9uID0gQmFzZUV4cHJlc3Npb248c3RyaW5nPiAmIHtcblx0X3R5cGU6IFwiTGVuZ3RoXCI7XG5cdHBhdGhJbk1vZGVsOiBQYXRoSW5Nb2RlbEV4cHJlc3Npb248dW5rbm93bj47XG59O1xuXG50eXBlIFVucmVzb2x2YWJsZVBhdGhFeHByZXNzaW9uID0gQmFzZUV4cHJlc3Npb248c3RyaW5nPiAmIHtcblx0X3R5cGU6IFwiVW5yZXNvbHZhYmxlXCI7XG59O1xuXG4vKipcbiAqIEB0eXBlZGVmIFBhdGhJbk1vZGVsRXhwcmVzc2lvblxuICovXG5leHBvcnQgdHlwZSBQYXRoSW5Nb2RlbEV4cHJlc3Npb248VD4gPSBCYXNlRXhwcmVzc2lvbjxUPiAmIHtcblx0X3R5cGU6IFwiUGF0aEluTW9kZWxcIjtcblx0bW9kZWxOYW1lPzogc3RyaW5nO1xuXHRwYXRoOiBzdHJpbmc7XG5cdHRhcmdldEVudGl0eVNldD86IEVudGl0eVNldDtcblx0dHlwZT86IHN0cmluZztcblx0Y29uc3RyYWludHM/OiBCaW5kaW5nQ29uc3RyYWludHM7XG5cdHBhcmFtZXRlcnM/OiBvYmplY3Q7XG5cdHRhcmdldFR5cGU/OiBzdHJpbmc7XG5cdG1vZGU/OiBzdHJpbmc7XG5cdGZvcm1hdE9wdGlvbnM/OiBGb3JtYXRPcHRpb25zO1xuXHRhbHdheXNLZWVwVGFyZ2V0VHlwZT86IGJvb2xlYW47XG59O1xuXG5leHBvcnQgdHlwZSBFbWJlZGRlZFVJNUJpbmRpbmdFeHByZXNzaW9uPFQ+ID0gQmFzZUV4cHJlc3Npb248VD4gJiB7XG5cdF90eXBlOiBcIkVtYmVkZGVkQmluZGluZ1wiO1xuXHR2YWx1ZTogc3RyaW5nO1xufTtcblxuZXhwb3J0IHR5cGUgRW1iZWRkZWRVSTVFeHByZXNzaW9uQmluZGluZ0V4cHJlc3Npb248VD4gPSBCYXNlRXhwcmVzc2lvbjxUPiAmIHtcblx0X3R5cGU6IFwiRW1iZWRkZWRFeHByZXNzaW9uQmluZGluZ1wiO1xuXHR2YWx1ZTogc3RyaW5nO1xufTtcblxuZXhwb3J0IHR5cGUgQ29tcGFyaXNvbk9wZXJhdG9yID0gXCI9PT1cIiB8IFwiIT09XCIgfCBcIj49XCIgfCBcIj5cIiB8IFwiPD1cIiB8IFwiPFwiIHwgXCJIYXNcIiB8IFwiSW5cIjtcbmV4cG9ydCB0eXBlIENvbXBhcmlzb25FeHByZXNzaW9uID0gQmFzZUV4cHJlc3Npb248Ym9vbGVhbj4gJiB7XG5cdF90eXBlOiBcIkNvbXBhcmlzb25cIjtcblx0b3BlcmF0b3I6IENvbXBhcmlzb25PcGVyYXRvcjtcblx0b3BlcmFuZDE6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjx1bmtub3duPjtcblx0b3BlcmFuZDI6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjx1bmtub3duPjtcbn07XG5cbmV4cG9ydCB0eXBlIEFyaXRobWV0aWNPcGVyYXRvciA9IFwiK1wiIHwgXCItXCIgfCBcIipcIiB8IFwiL1wiIHwgXCIlXCIgfCBcIk5lZ1wiIHwgXCJGbG9vclwiO1xuZXhwb3J0IHR5cGUgQXJpdGhtZXRpY0V4cHJlc3Npb24gPSBCYXNlRXhwcmVzc2lvbjxudW1iZXI+ICYge1xuXHRfdHlwZTogXCJBcml0aG1ldGljXCI7XG5cdG9wZXJhdG9yOiBBcml0aG1ldGljT3BlcmF0b3I7XG5cdG9wZXJhbmQxOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248dW5rbm93bj47XG5cdG9wZXJhbmQyOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248dW5rbm93bj47XG59O1xuZXhwb3J0IHR5cGUgSWZFbHNlRXhwcmVzc2lvbjxUPiA9IEJhc2VFeHByZXNzaW9uPFQ+ICYge1xuXHRfdHlwZTogXCJJZkVsc2VcIjtcblx0Y29uZGl0aW9uOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj47XG5cdG9uVHJ1ZTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFQ+O1xuXHRvbkZhbHNlOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248VD47XG59O1xuZXhwb3J0IGZ1bmN0aW9uIGlzUHJvcGVydHkoc2VydmljZU9iamVjdDogdW5rbm93bik6IHNlcnZpY2VPYmplY3QgaXMgUHJvcGVydHkge1xuXHRyZXR1cm4gKHNlcnZpY2VPYmplY3QgYXMgUHJvcGVydHkpPy5fdHlwZSA9PT0gXCJQcm9wZXJ0eVwiO1xufVxuZnVuY3Rpb24gaXNBY3Rpb25QYXJhbWV0ZXIoc2VydmljZU9iamVjdDogdW5rbm93bik6IHNlcnZpY2VPYmplY3QgaXMgQWN0aW9uUGFyYW1ldGVyIHtcblx0cmV0dXJuIChzZXJ2aWNlT2JqZWN0IGFzIEFjdGlvblBhcmFtZXRlcik/Ll90eXBlID09PSBcIkFjdGlvblBhcmFtZXRlclwiO1xufVxuXG4vKipcbiAqIEEgYmluZGluZyBleHByZXNzaW9uIHRoYXQgZXZhbHVhdGVzIHRvIHR5cGUgVC5cbiAqIEBwdWJsaWNcbiAqIEB1aTUtZXhwZXJpbWVudGFsLXNpbmNlIDEuMTQ1LjBcbiAqL1xuZXhwb3J0IHR5cGUgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFQ+ID1cblx0fCBVbnJlc29sdmFibGVQYXRoRXhwcmVzc2lvblxuXHR8IENvbnN0YW50RXhwcmVzc2lvbjxUPlxuXHR8IFNldEV4cHJlc3Npb25cblx0fCBOb3RFeHByZXNzaW9uXG5cdHwgVHJ1dGh5RXhwcmVzc2lvblxuXHR8IENvbmNhdEV4cHJlc3Npb25cblx0fCBMZW5ndGhFeHByZXNzaW9uXG5cdHwgUGF0aEluTW9kZWxFeHByZXNzaW9uPFQ+XG5cdHwgRW1iZWRkZWRVSTVCaW5kaW5nRXhwcmVzc2lvbjxUPlxuXHR8IEVtYmVkZGVkVUk1RXhwcmVzc2lvbkJpbmRpbmdFeHByZXNzaW9uPFQ+XG5cdHwgQ29tcGFyaXNvbkV4cHJlc3Npb25cblx0fCBJZkVsc2VFeHByZXNzaW9uPFQ+XG5cdHwgRm9ybWF0dGVyRXhwcmVzc2lvbjxUPlxuXHR8IENvbXBsZXhUeXBlRXhwcmVzc2lvbjxUPlxuXHR8IFJlZmVyZW5jZUV4cHJlc3Npb25cblx0fCBGdW5jdGlvbkV4cHJlc3Npb248VD5cblx0fCBBcml0aG1ldGljRXhwcmVzc2lvbjtcblxudHlwZSBUeXBlTWFwcGluZ0RlZmluaXRpb24gPSB7XG5cdHR5cGU6IHN0cmluZztcblx0Y29uc3RyYWludHM/OiB7XG5cdFx0JFByZWNpc2lvbj86IHN0cmluZztcblx0XHQkVjQ/OiBzdHJpbmc7XG5cdFx0JFNjYWxlPzogc3RyaW5nO1xuXHRcdCRNYXhMZW5ndGg/OiBzdHJpbmc7XG5cdFx0JE51bGxhYmxlPzogc3RyaW5nO1xuXHRcdFwiQE9yZy5PRGF0YS5WYWxpZGF0aW9uLlYxLk1pbmltdW0vJERlY2ltYWxcIj86IHN0cmluZztcblx0XHRcIkBPcmcuT0RhdGEuVmFsaWRhdGlvbi5WMS5NaW5pbXVtQE9yZy5PRGF0YS5WYWxpZGF0aW9uLlYxLkV4Y2x1c2l2ZVwiPzogc3RyaW5nO1xuXHRcdFwiQE9yZy5PRGF0YS5WYWxpZGF0aW9uLlYxLk1heGltdW0vJERlY2ltYWxcIj86IHN0cmluZztcblx0XHRcIkBPcmcuT0RhdGEuVmFsaWRhdGlvbi5WMS5NYXhpbXVtQE9yZy5PRGF0YS5WYWxpZGF0aW9uLlYxLkV4Y2x1c2l2ZVwiPzogc3RyaW5nO1xuXHRcdFwiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5Jc0RpZ2l0U2VxdWVuY2VcIj86IHN0cmluZztcblx0fTtcbn07XG5leHBvcnQgY29uc3QgRURNX1RZUEVfTUFQUElORzogUmVjb3JkPHN0cmluZywgVHlwZU1hcHBpbmdEZWZpbml0aW9uPiA9IHtcblx0XCJFZG0uQm9vbGVhblwiOiB7IHR5cGU6IFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuQm9vbGVhblwiIH0sXG5cdFwiRWRtLkJ5dGVcIjogeyB0eXBlOiBcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLkJ5dGVcIiB9LFxuXHRcIkVkbS5EYXRlXCI6IHsgdHlwZTogXCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5EYXRlXCIgfSxcblx0XCJFZG0uRGF0ZVRpbWVPZmZzZXRcIjoge1xuXHRcdGNvbnN0cmFpbnRzOiB7XG5cdFx0XHQkUHJlY2lzaW9uOiBcInByZWNpc2lvblwiLFxuXHRcdFx0JFY0OiBcIlY0XCJcblx0XHR9LFxuXHRcdHR5cGU6IFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuRGF0ZVRpbWVPZmZzZXRcIlxuXHR9LFxuXHRcIkVkbS5EZWNpbWFsXCI6IHtcblx0XHRjb25zdHJhaW50czoge1xuXHRcdFx0XCJAT3JnLk9EYXRhLlZhbGlkYXRpb24uVjEuTWluaW11bS8kRGVjaW1hbFwiOiBcIm1pbmltdW1cIixcblx0XHRcdFwiQE9yZy5PRGF0YS5WYWxpZGF0aW9uLlYxLk1pbmltdW1AT3JnLk9EYXRhLlZhbGlkYXRpb24uVjEuRXhjbHVzaXZlXCI6IFwibWluaW11bUV4Y2x1c2l2ZVwiLFxuXHRcdFx0XCJAT3JnLk9EYXRhLlZhbGlkYXRpb24uVjEuTWF4aW11bS8kRGVjaW1hbFwiOiBcIm1heGltdW1cIixcblx0XHRcdFwiQE9yZy5PRGF0YS5WYWxpZGF0aW9uLlYxLk1heGltdW1AT3JnLk9EYXRhLlZhbGlkYXRpb24uVjEuRXhjbHVzaXZlXCI6IFwibWF4aW11bUV4Y2x1c2l2ZVwiLFxuXHRcdFx0JFByZWNpc2lvbjogXCJwcmVjaXNpb25cIixcblx0XHRcdCRTY2FsZTogXCJzY2FsZVwiXG5cdFx0fSxcblx0XHR0eXBlOiBcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLkRlY2ltYWxcIlxuXHR9LFxuXHRcIkVkbS5Eb3VibGVcIjogeyB0eXBlOiBcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLkRvdWJsZVwiIH0sXG5cdFwiRWRtLkd1aWRcIjogeyB0eXBlOiBcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLkd1aWRcIiB9LFxuXHRcIkVkbS5JbnQxNlwiOiB7IHR5cGU6IFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuSW50MTZcIiB9LFxuXHRcIkVkbS5JbnQzMlwiOiB7IHR5cGU6IFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuSW50MzJcIiB9LFxuXHRcIkVkbS5JbnQ2NFwiOiB7IHR5cGU6IFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuSW50NjRcIiB9LFxuXHRcIkVkbS5TQnl0ZVwiOiB7IHR5cGU6IFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuU0J5dGVcIiB9LFxuXHRcIkVkbS5TaW5nbGVcIjogeyB0eXBlOiBcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLlNpbmdsZVwiIH0sXG5cdFwiRWRtLlN0cmVhbVwiOiB7IHR5cGU6IFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuU3RyZWFtXCIgfSxcblx0XCJFZG0uQmluYXJ5XCI6IHsgdHlwZTogXCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5TdHJlYW1cIiB9LFxuXHRcIkVkbS5TdHJpbmdcIjoge1xuXHRcdGNvbnN0cmFpbnRzOiB7XG5cdFx0XHRcIkBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuSXNEaWdpdFNlcXVlbmNlXCI6IFwiaXNEaWdpdFNlcXVlbmNlXCIsXG5cdFx0XHQkTWF4TGVuZ3RoOiBcIm1heExlbmd0aFwiLFxuXHRcdFx0JE51bGxhYmxlOiBcIm51bGxhYmxlXCJcblx0XHR9LFxuXHRcdHR5cGU6IFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuU3RyaW5nXCJcblx0fSxcblx0XCJFZG0uVGltZU9mRGF5XCI6IHtcblx0XHRjb25zdHJhaW50czoge1xuXHRcdFx0JFByZWNpc2lvbjogXCJwcmVjaXNpb25cIlxuXHRcdH0sXG5cdFx0dHlwZTogXCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5UaW1lT2ZEYXlcIlxuXHR9XG59O1xuXG4vKipcbiAqIEFuIGV4cHJlc3Npb24gdGhhdCBldmFsdWF0ZXMgdG8gdHlwZSBULCBvciBhIGNvbnN0YW50IHZhbHVlIG9mIHR5cGUgVFxuICovXG5leHBvcnQgdHlwZSBFeHByZXNzaW9uT3JQcmltaXRpdmU8VCBleHRlbmRzIFByaW1pdGl2ZVR5cGU+ID0gQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFQ+IHwgVDtcblxuZXhwb3J0IGNvbnN0IHVucmVzb2x2YWJsZUV4cHJlc3Npb246IFVucmVzb2x2YWJsZVBhdGhFeHByZXNzaW9uID0ge1xuXHRfdHlwZTogXCJVbnJlc29sdmFibGVcIlxufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGVzY2FwZVhtbEF0dHJpYnV0ZShpbnB1dFN0cmluZzogc3RyaW5nKTogc3RyaW5nIHtcblx0cmV0dXJuIGlucHV0U3RyaW5nLnJlcGxhY2UoLycvZywgXCJcXFxcJ1wiKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGhhc1VucmVzb2x2YWJsZUV4cHJlc3Npb24oLi4uZXhwcmVzc2lvbnM6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjx1bmtub3duPltdKTogYm9vbGVhbiB7XG5cdHJldHVybiBleHByZXNzaW9ucy5maW5kKChleHByKSA9PiBleHByLl90eXBlID09PSBcIlVucmVzb2x2YWJsZVwiKSAhPT0gdW5kZWZpbmVkO1xufVxuLyoqXG4gKiBDaGVjayB0d28gZXhwcmVzc2lvbnMgZm9yIChkZWVwKSBlcXVhbGl0eS5cbiAqIEBwYXJhbSBhXG4gKiBAcGFyYW0gYlxuICogQHJldHVybnMgYHRydWVgIGlmIHRoZSB0d28gZXhwcmVzc2lvbnMgYXJlIGVxdWFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBfY2hlY2tFeHByZXNzaW9uc0FyZUVxdWFsPFQ+KGE6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxUPiwgYjogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFQ+KTogYm9vbGVhbiB7XG5cdGlmIChhLl90eXBlICE9PSBiLl90eXBlKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0c3dpdGNoIChhLl90eXBlKSB7XG5cdFx0Y2FzZSBcIlVucmVzb2x2YWJsZVwiOlxuXHRcdFx0cmV0dXJuIGZhbHNlOyAvLyBVbnJlc29sdmFibGUgaXMgbmV2ZXIgZXF1YWwgdG8gYW55dGhpbmcgZXZlbiBpdHNlbGZcblx0XHRjYXNlIFwiQ29uc3RhbnRcIjpcblx0XHRjYXNlIFwiRW1iZWRkZWRCaW5kaW5nXCI6XG5cdFx0Y2FzZSBcIkVtYmVkZGVkRXhwcmVzc2lvbkJpbmRpbmdcIjpcblx0XHRcdHJldHVybiBhLnZhbHVlID09PSAoYiBhcyBDb25zdGFudEV4cHJlc3Npb248VD4pLnZhbHVlO1xuXHRcdGNhc2UgXCJBcml0aG1ldGljXCI6XG5cdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRhLm9wZXJhdG9yID09PSAoYiBhcyBBcml0aG1ldGljRXhwcmVzc2lvbikub3BlcmF0b3IgJiZcblx0XHRcdFx0X2NoZWNrRXhwcmVzc2lvbnNBcmVFcXVhbChhLm9wZXJhbmQxLCAoYiBhcyBBcml0aG1ldGljRXhwcmVzc2lvbikub3BlcmFuZDEpICYmXG5cdFx0XHRcdF9jaGVja0V4cHJlc3Npb25zQXJlRXF1YWwoYS5vcGVyYW5kMiwgKGIgYXMgQXJpdGhtZXRpY0V4cHJlc3Npb24pLm9wZXJhbmQyKVxuXHRcdFx0KTtcblx0XHRjYXNlIFwiTm90XCI6XG5cdFx0XHRyZXR1cm4gX2NoZWNrRXhwcmVzc2lvbnNBcmVFcXVhbChhLm9wZXJhbmQsIChiIGFzIE5vdEV4cHJlc3Npb24pLm9wZXJhbmQpO1xuXHRcdGNhc2UgXCJUcnV0aHlcIjpcblx0XHRcdHJldHVybiBfY2hlY2tFeHByZXNzaW9uc0FyZUVxdWFsKGEub3BlcmFuZCwgKGIgYXMgVHJ1dGh5RXhwcmVzc2lvbikub3BlcmFuZCk7XG5cdFx0Y2FzZSBcIlNldFwiOlxuXHRcdFx0cmV0dXJuIChcblx0XHRcdFx0YS5vcGVyYXRvciA9PT0gKGIgYXMgU2V0RXhwcmVzc2lvbikub3BlcmF0b3IgJiZcblx0XHRcdFx0YS5vcGVyYW5kcy5sZW5ndGggPT09IChiIGFzIFNldEV4cHJlc3Npb24pLm9wZXJhbmRzLmxlbmd0aCAmJlxuXHRcdFx0XHRhLm9wZXJhbmRzLmV2ZXJ5KChleHByZXNzaW9uKSA9PlxuXHRcdFx0XHRcdChiIGFzIFNldEV4cHJlc3Npb24pLm9wZXJhbmRzLnNvbWUoKG90aGVyRXhwcmVzc2lvbikgPT4gX2NoZWNrRXhwcmVzc2lvbnNBcmVFcXVhbChleHByZXNzaW9uLCBvdGhlckV4cHJlc3Npb24pKVxuXHRcdFx0XHQpXG5cdFx0XHQpO1xuXG5cdFx0Y2FzZSBcIklmRWxzZVwiOlxuXHRcdFx0cmV0dXJuIChcblx0XHRcdFx0X2NoZWNrRXhwcmVzc2lvbnNBcmVFcXVhbChhLmNvbmRpdGlvbiwgKGIgYXMgSWZFbHNlRXhwcmVzc2lvbjxUPikuY29uZGl0aW9uKSAmJlxuXHRcdFx0XHRfY2hlY2tFeHByZXNzaW9uc0FyZUVxdWFsKGEub25UcnVlLCAoYiBhcyBJZkVsc2VFeHByZXNzaW9uPFQ+KS5vblRydWUpICYmXG5cdFx0XHRcdF9jaGVja0V4cHJlc3Npb25zQXJlRXF1YWwoYS5vbkZhbHNlLCAoYiBhcyBJZkVsc2VFeHByZXNzaW9uPFQ+KS5vbkZhbHNlKVxuXHRcdFx0KTtcblxuXHRcdGNhc2UgXCJDb21wYXJpc29uXCI6XG5cdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRhLm9wZXJhdG9yID09PSAoYiBhcyBDb21wYXJpc29uRXhwcmVzc2lvbikub3BlcmF0b3IgJiZcblx0XHRcdFx0X2NoZWNrRXhwcmVzc2lvbnNBcmVFcXVhbChhLm9wZXJhbmQxLCAoYiBhcyBDb21wYXJpc29uRXhwcmVzc2lvbikub3BlcmFuZDEpICYmXG5cdFx0XHRcdF9jaGVja0V4cHJlc3Npb25zQXJlRXF1YWwoYS5vcGVyYW5kMiwgKGIgYXMgQ29tcGFyaXNvbkV4cHJlc3Npb24pLm9wZXJhbmQyKVxuXHRcdFx0KTtcblxuXHRcdGNhc2UgXCJDb25jYXRcIjpcblx0XHRcdGNvbnN0IGFFeHByZXNzaW9ucyA9IGEuZXhwcmVzc2lvbnM7XG5cdFx0XHRjb25zdCBiRXhwcmVzc2lvbnMgPSAoYiBhcyBDb25jYXRFeHByZXNzaW9uKS5leHByZXNzaW9ucztcblx0XHRcdGlmIChhRXhwcmVzc2lvbnMubGVuZ3RoICE9PSBiRXhwcmVzc2lvbnMubGVuZ3RoKSB7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBhRXhwcmVzc2lvbnMuZXZlcnkoKGV4cHJlc3Npb24sIGluZGV4KSA9PiB7XG5cdFx0XHRcdHJldHVybiBfY2hlY2tFeHByZXNzaW9uc0FyZUVxdWFsKGV4cHJlc3Npb24sIGJFeHByZXNzaW9uc1tpbmRleF0pO1xuXHRcdFx0fSk7XG5cblx0XHRjYXNlIFwiTGVuZ3RoXCI6XG5cdFx0XHRyZXR1cm4gX2NoZWNrRXhwcmVzc2lvbnNBcmVFcXVhbChhLnBhdGhJbk1vZGVsLCAoYiBhcyBMZW5ndGhFeHByZXNzaW9uKS5wYXRoSW5Nb2RlbCk7XG5cblx0XHRjYXNlIFwiUGF0aEluTW9kZWxcIjpcblx0XHRcdHJldHVybiAoXG5cdFx0XHRcdGEubW9kZWxOYW1lID09PSAoYiBhcyBQYXRoSW5Nb2RlbEV4cHJlc3Npb248VD4pLm1vZGVsTmFtZSAmJlxuXHRcdFx0XHRhLnBhdGggPT09IChiIGFzIFBhdGhJbk1vZGVsRXhwcmVzc2lvbjxUPikucGF0aCAmJlxuXHRcdFx0XHRhLnRhcmdldEVudGl0eVNldCA9PT0gKGIgYXMgUGF0aEluTW9kZWxFeHByZXNzaW9uPFQ+KS50YXJnZXRFbnRpdHlTZXRcblx0XHRcdCk7XG5cblx0XHRjYXNlIFwiRm9ybWF0dGVyXCI6XG5cdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRhLmZuID09PSAoYiBhcyBGb3JtYXR0ZXJFeHByZXNzaW9uPFQ+KS5mbiAmJlxuXHRcdFx0XHRhLnBhcmFtZXRlcnMubGVuZ3RoID09PSAoYiBhcyBGb3JtYXR0ZXJFeHByZXNzaW9uPFQ+KS5wYXJhbWV0ZXJzLmxlbmd0aCAmJlxuXHRcdFx0XHRhLnBhcmFtZXRlcnMuZXZlcnkoKHZhbHVlLCBpbmRleCkgPT4gX2NoZWNrRXhwcmVzc2lvbnNBcmVFcXVhbCgoYiBhcyBGb3JtYXR0ZXJFeHByZXNzaW9uPFQ+KS5wYXJhbWV0ZXJzW2luZGV4XSwgdmFsdWUpKVxuXHRcdFx0KTtcblx0XHRjYXNlIFwiQ29tcGxleFR5cGVcIjpcblx0XHRcdHJldHVybiAoXG5cdFx0XHRcdGEudHlwZSA9PT0gKGIgYXMgQ29tcGxleFR5cGVFeHByZXNzaW9uPFQ+KS50eXBlICYmXG5cdFx0XHRcdGEuYmluZGluZ1BhcmFtZXRlcnMubGVuZ3RoID09PSAoYiBhcyBDb21wbGV4VHlwZUV4cHJlc3Npb248VD4pLmJpbmRpbmdQYXJhbWV0ZXJzLmxlbmd0aCAmJlxuXHRcdFx0XHRhLmJpbmRpbmdQYXJhbWV0ZXJzLmV2ZXJ5KCh2YWx1ZSwgaW5kZXgpID0+XG5cdFx0XHRcdFx0X2NoZWNrRXhwcmVzc2lvbnNBcmVFcXVhbCgoYiBhcyBDb21wbGV4VHlwZUV4cHJlc3Npb248VD4pLmJpbmRpbmdQYXJhbWV0ZXJzW2luZGV4XSwgdmFsdWUpXG5cdFx0XHRcdClcblx0XHRcdCk7XG5cdFx0Y2FzZSBcIkZ1bmN0aW9uXCI6XG5cdFx0XHRjb25zdCBvdGhlckZ1bmN0aW9uID0gYiBhcyBGdW5jdGlvbkV4cHJlc3Npb248VD47XG5cdFx0XHRpZiAoYS5vYmogPT09IHVuZGVmaW5lZCB8fCBvdGhlckZ1bmN0aW9uLm9iaiA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdHJldHVybiBhLm9iaiA9PT0gb3RoZXJGdW5jdGlvbjtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIChcblx0XHRcdFx0YS5mbiA9PT0gb3RoZXJGdW5jdGlvbi5mbiAmJlxuXHRcdFx0XHRfY2hlY2tFeHByZXNzaW9uc0FyZUVxdWFsKGEub2JqLCBvdGhlckZ1bmN0aW9uLm9iaikgJiZcblx0XHRcdFx0YS5wYXJhbWV0ZXJzLmxlbmd0aCA9PT0gb3RoZXJGdW5jdGlvbi5wYXJhbWV0ZXJzLmxlbmd0aCAmJlxuXHRcdFx0XHRhLnBhcmFtZXRlcnMuZXZlcnkoKHZhbHVlLCBpbmRleCkgPT4gX2NoZWNrRXhwcmVzc2lvbnNBcmVFcXVhbChvdGhlckZ1bmN0aW9uLnBhcmFtZXRlcnNbaW5kZXhdLCB2YWx1ZSkpXG5cdFx0XHQpO1xuXG5cdFx0Y2FzZSBcIlJlZlwiOlxuXHRcdFx0cmV0dXJuIGEucmVmID09PSAoYiBhcyBSZWZlcmVuY2VFeHByZXNzaW9uKS5yZWY7XG5cdH1cblx0cmV0dXJuIGZhbHNlO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGEgbmVzdGVkIFNldEV4cHJlc3Npb24gYnkgaW5saW5pbmcgb3BlcmFuZHMgb2YgdHlwZSBTZXRFeHByZXNzaW9uIHdpdGggdGhlIHNhbWUgb3BlcmF0b3IuXG4gKiBAcGFyYW0gZXhwcmVzc2lvbiBUaGUgZXhwcmVzc2lvbiB0byBmbGF0dGVuXG4gKiBAcmV0dXJucyBBIG5ldyBTZXRFeHByZXNzaW9uIHdpdGggdGhlIHNhbWUgb3BlcmF0b3JcbiAqL1xuZnVuY3Rpb24gZmxhdHRlblNldEV4cHJlc3Npb24oZXhwcmVzc2lvbjogU2V0RXhwcmVzc2lvbik6IFNldEV4cHJlc3Npb24ge1xuXHRyZXR1cm4gZXhwcmVzc2lvbi5vcGVyYW5kcy5yZWR1Y2UoXG5cdFx0KHJlc3VsdDogU2V0RXhwcmVzc2lvbiwgb3BlcmFuZCkgPT4ge1xuXHRcdFx0Y29uc3QgY2FuZGlkYXRlc0ZvckZsYXR0ZW5pbmcgPVxuXHRcdFx0XHRvcGVyYW5kLl90eXBlID09PSBcIlNldFwiICYmIG9wZXJhbmQub3BlcmF0b3IgPT09IGV4cHJlc3Npb24ub3BlcmF0b3IgPyBvcGVyYW5kLm9wZXJhbmRzIDogW29wZXJhbmRdO1xuXHRcdFx0Y2FuZGlkYXRlc0ZvckZsYXR0ZW5pbmcuZm9yRWFjaCgoY2FuZGlkYXRlKSA9PiB7XG5cdFx0XHRcdGlmIChyZXN1bHQub3BlcmFuZHMuZXZlcnkoKGUpID0+ICFfY2hlY2tFeHByZXNzaW9uc0FyZUVxdWFsKGUsIGNhbmRpZGF0ZSkpKSB7XG5cdFx0XHRcdFx0cmVzdWx0Lm9wZXJhbmRzLnB1c2goY2FuZGlkYXRlKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0XHRyZXR1cm4gcmVzdWx0O1xuXHRcdH0sXG5cdFx0eyBfdHlwZTogXCJTZXRcIiwgb3BlcmF0b3I6IGV4cHJlc3Npb24ub3BlcmF0b3IsIG9wZXJhbmRzOiBbXSB9XG5cdCk7XG59XG5cbi8qKlxuICogRGV0ZWN0cyB3aGV0aGVyIGFuIGFycmF5IG9mIGJvb2xlYW4gZXhwcmVzc2lvbnMgY29udGFpbnMgYW4gZXhwcmVzc2lvbiBhbmQgaXRzIG5lZ2F0aW9uLlxuICogQHBhcmFtIGV4cHJlc3Npb25zIEFycmF5IG9mIGV4cHJlc3Npb25zXG4gKiBAcmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHNldCBvZiBleHByZXNzaW9ucyBjb250YWlucyBhbiBleHByZXNzaW9uIGFuZCBpdHMgbmVnYXRpb25cbiAqL1xuZnVuY3Rpb24gaGFzT3Bwb3NpdGVFeHByZXNzaW9ucyhleHByZXNzaW9uczogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+W10pOiBib29sZWFuIHtcblx0Y29uc3QgbmVnYXRlZEV4cHJlc3Npb25zID0gZXhwcmVzc2lvbnMubWFwKG5vdCk7XG5cdHJldHVybiBleHByZXNzaW9ucy5zb21lKChleHByZXNzaW9uLCBpbmRleCkgPT4ge1xuXHRcdGZvciAobGV0IGkgPSBpbmRleCArIDE7IGkgPCBuZWdhdGVkRXhwcmVzc2lvbnMubGVuZ3RoOyBpKyspIHtcblx0XHRcdGlmIChfY2hlY2tFeHByZXNzaW9uc0FyZUVxdWFsKGV4cHJlc3Npb24sIG5lZ2F0ZWRFeHByZXNzaW9uc1tpXSkpIHtcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBmYWxzZTtcblx0fSk7XG59XG5cbi8qKlxuICogTG9naWNhbCBgYW5kYCBleHByZXNzaW9uLlxuICpcbiAqIFRoZSBleHByZXNzaW9uIGlzIHNpbXBsaWZpZWQgdG8gZmFsc2UgaWYgdGhpcyBjYW4gYmUgZGVjaWRlZCBzdGF0aWNhbGx5ICh0aGF0IGlzLCBpZiBvbmUgb3BlcmFuZCBpcyBhIGNvbnN0YW50XG4gKiBmYWxzZSBvciBpZiB0aGUgZXhwcmVzc2lvbiBjb250YWlucyBhbiBvcGVyYW5kIGFuZCBpdHMgbmVnYXRpb24pLlxuICogQHBhcmFtIG9wZXJhbmRzIEV4cHJlc3Npb25zIHRvIGNvbm5lY3QgYnkgYGFuZGBcbiAqIEByZXR1cm5zIEV4cHJlc3Npb24gZXZhbHVhdGluZyB0byBib29sZWFuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhbmQoLi4ub3BlcmFuZHM6IEV4cHJlc3Npb25PclByaW1pdGl2ZTxib29sZWFuPltdKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+IHtcblx0Y29uc3QgZXhwcmVzc2lvbnMgPSBmbGF0dGVuU2V0RXhwcmVzc2lvbih7XG5cdFx0X3R5cGU6IFwiU2V0XCIsXG5cdFx0b3BlcmF0b3I6IFwiJiZcIixcblx0XHRvcGVyYW5kczogb3BlcmFuZHMubWFwKHdyYXBQcmltaXRpdmUpXG5cdH0pLm9wZXJhbmRzO1xuXG5cdGlmIChoYXNVbnJlc29sdmFibGVFeHByZXNzaW9uKC4uLmV4cHJlc3Npb25zKSkge1xuXHRcdHJldHVybiB1bnJlc29sdmFibGVFeHByZXNzaW9uO1xuXHR9XG5cdGxldCBpc1N0YXRpY0ZhbHNlID0gZmFsc2U7XG5cdGNvbnN0IG5vblRyaXZpYWxFeHByZXNzaW9uID0gZXhwcmVzc2lvbnMuZmlsdGVyKChleHByZXNzaW9uKSA9PiB7XG5cdFx0aWYgKGlzRmFsc2UoZXhwcmVzc2lvbikpIHtcblx0XHRcdGlzU3RhdGljRmFsc2UgPSB0cnVlO1xuXHRcdH1cblx0XHRyZXR1cm4gIWlzQ29uc3RhbnQoZXhwcmVzc2lvbik7XG5cdH0pO1xuXHRpZiAoaXNTdGF0aWNGYWxzZSkge1xuXHRcdHJldHVybiBjb25zdGFudChmYWxzZSk7XG5cdH0gZWxzZSBpZiAobm9uVHJpdmlhbEV4cHJlc3Npb24ubGVuZ3RoID09PSAwKSB7XG5cdFx0Ly8gUmVzb2x2ZSB0aGUgY29uc3RhbnQgdGhlblxuXHRcdGNvbnN0IGlzVmFsaWQgPSBleHByZXNzaW9ucy5yZWR1Y2UoKHJlc3VsdCwgZXhwcmVzc2lvbikgPT4gcmVzdWx0ICYmIGlzVHJ1ZShleHByZXNzaW9uKSwgdHJ1ZSk7XG5cdFx0cmV0dXJuIGNvbnN0YW50KGlzVmFsaWQpO1xuXHR9IGVsc2UgaWYgKG5vblRyaXZpYWxFeHByZXNzaW9uLmxlbmd0aCA9PT0gMSkge1xuXHRcdHJldHVybiBub25Ucml2aWFsRXhwcmVzc2lvblswXTtcblx0fSBlbHNlIGlmIChoYXNPcHBvc2l0ZUV4cHJlc3Npb25zKG5vblRyaXZpYWxFeHByZXNzaW9uKSkge1xuXHRcdHJldHVybiBjb25zdGFudChmYWxzZSk7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdF90eXBlOiBcIlNldFwiLFxuXHRcdFx0b3BlcmF0b3I6IFwiJiZcIixcblx0XHRcdG9wZXJhbmRzOiBub25Ucml2aWFsRXhwcmVzc2lvblxuXHRcdH07XG5cdH1cbn1cblxuLyoqXG4gKiBMb2dpY2FsIGBvcmAgZXhwcmVzc2lvbi5cbiAqXG4gKiBUaGUgZXhwcmVzc2lvbiBpcyBzaW1wbGlmaWVkIHRvIHRydWUgaWYgdGhpcyBjYW4gYmUgZGVjaWRlZCBzdGF0aWNhbGx5ICh0aGF0IGlzLCBpZiBvbmUgb3BlcmFuZCBpcyBhIGNvbnN0YW50XG4gKiB0cnVlIG9yIGlmIHRoZSBleHByZXNzaW9uIGNvbnRhaW5zIGFuIG9wZXJhbmQgYW5kIGl0cyBuZWdhdGlvbikuXG4gKiBAcGFyYW0gb3BlcmFuZHMgRXhwcmVzc2lvbnMgdG8gY29ubmVjdCBieSBgb3JgXG4gKiBAcmV0dXJucyBFeHByZXNzaW9uIGV2YWx1YXRpbmcgdG8gYm9vbGVhblxuICovXG5leHBvcnQgZnVuY3Rpb24gb3IoLi4ub3BlcmFuZHM6IEV4cHJlc3Npb25PclByaW1pdGl2ZTxib29sZWFuPltdKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+IHtcblx0Y29uc3QgZXhwcmVzc2lvbnMgPSBmbGF0dGVuU2V0RXhwcmVzc2lvbih7XG5cdFx0X3R5cGU6IFwiU2V0XCIsXG5cdFx0b3BlcmF0b3I6IFwifHxcIixcblx0XHRvcGVyYW5kczogb3BlcmFuZHMubWFwKHdyYXBQcmltaXRpdmUpXG5cdH0pLm9wZXJhbmRzO1xuXHRpZiAoaGFzVW5yZXNvbHZhYmxlRXhwcmVzc2lvbiguLi5leHByZXNzaW9ucykpIHtcblx0XHRyZXR1cm4gdW5yZXNvbHZhYmxlRXhwcmVzc2lvbjtcblx0fVxuXHRsZXQgaXNTdGF0aWNUcnVlID0gZmFsc2U7XG5cdGNvbnN0IG5vblRyaXZpYWxFeHByZXNzaW9uID0gZXhwcmVzc2lvbnMuZmlsdGVyKChleHByZXNzaW9uKSA9PiB7XG5cdFx0aWYgKGlzVHJ1ZShleHByZXNzaW9uKSkge1xuXHRcdFx0aXNTdGF0aWNUcnVlID0gdHJ1ZTtcblx0XHR9XG5cdFx0cmV0dXJuICFpc0NvbnN0YW50KGV4cHJlc3Npb24pIHx8IGV4cHJlc3Npb24udmFsdWU7XG5cdH0pO1xuXHRpZiAoaXNTdGF0aWNUcnVlKSB7XG5cdFx0cmV0dXJuIGNvbnN0YW50KHRydWUpO1xuXHR9IGVsc2UgaWYgKG5vblRyaXZpYWxFeHByZXNzaW9uLmxlbmd0aCA9PT0gMCkge1xuXHRcdC8vIFJlc29sdmUgdGhlIGNvbnN0YW50IHRoZW5cblx0XHRjb25zdCBpc1ZhbGlkID0gZXhwcmVzc2lvbnMucmVkdWNlKChyZXN1bHQsIGV4cHJlc3Npb24pID0+IHJlc3VsdCAmJiBpc1RydWUoZXhwcmVzc2lvbiksIHRydWUpO1xuXHRcdHJldHVybiBjb25zdGFudChpc1ZhbGlkKTtcblx0fSBlbHNlIGlmIChub25Ucml2aWFsRXhwcmVzc2lvbi5sZW5ndGggPT09IDEpIHtcblx0XHRyZXR1cm4gbm9uVHJpdmlhbEV4cHJlc3Npb25bMF07XG5cdH0gZWxzZSBpZiAoaGFzT3Bwb3NpdGVFeHByZXNzaW9ucyhub25Ucml2aWFsRXhwcmVzc2lvbikpIHtcblx0XHRyZXR1cm4gY29uc3RhbnQodHJ1ZSk7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdF90eXBlOiBcIlNldFwiLFxuXHRcdFx0b3BlcmF0b3I6IFwifHxcIixcblx0XHRcdG9wZXJhbmRzOiBub25Ucml2aWFsRXhwcmVzc2lvblxuXHRcdH07XG5cdH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFkZDxUIGV4dGVuZHMgUHJpbWl0aXZlVHlwZT4oXG5cdGxlZnRPcGVyYW5kOiBFeHByZXNzaW9uT3JQcmltaXRpdmU8VD4sXG5cdHJpZ2h0T3BlcmFuZDogRXhwcmVzc2lvbk9yUHJpbWl0aXZlPFQ+XG4pOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248bnVtYmVyPiB7XG5cdHJldHVybiBhcml0aG1ldGljKFwiK1wiLCBsZWZ0T3BlcmFuZCwgcmlnaHRPcGVyYW5kKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN1YnRyYWN0PFQgZXh0ZW5kcyBQcmltaXRpdmVUeXBlPihcblx0bGVmdE9wZXJhbmQ6IEV4cHJlc3Npb25PclByaW1pdGl2ZTxUPixcblx0cmlnaHRPcGVyYW5kOiBFeHByZXNzaW9uT3JQcmltaXRpdmU8VD5cbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxudW1iZXI+IHtcblx0cmV0dXJuIGFyaXRobWV0aWMoXCItXCIsIGxlZnRPcGVyYW5kLCByaWdodE9wZXJhbmQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbXVsdGlwbHk8VCBleHRlbmRzIFByaW1pdGl2ZVR5cGU+KFxuXHRsZWZ0T3BlcmFuZDogRXhwcmVzc2lvbk9yUHJpbWl0aXZlPFQ+LFxuXHRyaWdodE9wZXJhbmQ6IEV4cHJlc3Npb25PclByaW1pdGl2ZTxUPlxuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPG51bWJlcj4ge1xuXHRyZXR1cm4gYXJpdGhtZXRpYyhcIipcIiwgbGVmdE9wZXJhbmQsIHJpZ2h0T3BlcmFuZCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkaXZpZGU8VCBleHRlbmRzIFByaW1pdGl2ZVR5cGU+KFxuXHRsZWZ0T3BlcmFuZDogRXhwcmVzc2lvbk9yUHJpbWl0aXZlPFQ+LFxuXHRyaWdodE9wZXJhbmQ6IEV4cHJlc3Npb25PclByaW1pdGl2ZTxUPlxuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPG51bWJlcj4ge1xuXHRyZXR1cm4gYXJpdGhtZXRpYyhcIi9cIiwgbGVmdE9wZXJhbmQsIHJpZ2h0T3BlcmFuZCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtb2R1bG88VCBleHRlbmRzIFByaW1pdGl2ZVR5cGU+KFxuXHRsZWZ0T3BlcmFuZDogRXhwcmVzc2lvbk9yUHJpbWl0aXZlPFQ+LFxuXHRyaWdodE9wZXJhbmQ6IEV4cHJlc3Npb25PclByaW1pdGl2ZTxUPlxuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPG51bWJlcj4ge1xuXHRyZXR1cm4gYXJpdGhtZXRpYyhcIiVcIiwgbGVmdE9wZXJhbmQsIHJpZ2h0T3BlcmFuZCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBuZWdhdGU8VCBleHRlbmRzIFByaW1pdGl2ZVR5cGU+KG9wZXJhbmQ6IEV4cHJlc3Npb25PclByaW1pdGl2ZTxUPik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxudW1iZXI+IHtcblx0cmV0dXJuIGFyaXRobWV0aWMoXCJOZWdcIiwgb3BlcmFuZCwgbnVsbCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmbG9vcjxUIGV4dGVuZHMgUHJpbWl0aXZlVHlwZT4ob3BlcmFuZDogRXhwcmVzc2lvbk9yUHJpbWl0aXZlPFQ+KTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPG51bWJlcj4ge1xuXHRyZXR1cm4gYXJpdGhtZXRpYyhcIkZsb29yXCIsIG9wZXJhbmQsIG51bGwpO1xufVxuXG4vKipcbiAqIEFyaXRobWV0aWMgZXhwcmVzc2lvbi5cbiAqIEBwYXJhbSBvcGVyYXRvclxuICogQHBhcmFtIGxlZnRPcGVyYW5kXG4gKiBAcGFyYW0gcmlnaHRPcGVyYW5kXG4gKiBAcmV0dXJucyBFeHByZXNzaW9uIGV2YWx1YXRpbmcgdG8gbnVtYmVyXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhcml0aG1ldGljPFQgZXh0ZW5kcyBQcmltaXRpdmVUeXBlPihcblx0b3BlcmF0b3I6IEFyaXRobWV0aWNPcGVyYXRvcixcblx0bGVmdE9wZXJhbmQ6IEV4cHJlc3Npb25PclByaW1pdGl2ZTxUPixcblx0cmlnaHRPcGVyYW5kOiBFeHByZXNzaW9uT3JQcmltaXRpdmU8VD5cbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxudW1iZXI+IHtcblx0Y29uc3QgbGVmdEV4cHJlc3Npb24gPSB3cmFwUHJpbWl0aXZlKGxlZnRPcGVyYW5kKTtcblx0Y29uc3QgcmlnaHRFeHByZXNzaW9uID0gd3JhcFByaW1pdGl2ZShyaWdodE9wZXJhbmQpO1xuXHRpZiAoaGFzVW5yZXNvbHZhYmxlRXhwcmVzc2lvbihsZWZ0RXhwcmVzc2lvbiwgcmlnaHRFeHByZXNzaW9uKSkge1xuXHRcdHJldHVybiB1bnJlc29sdmFibGVFeHByZXNzaW9uO1xuXHR9XG5cdGlmIChpc0NvbnN0YW50KGxlZnRFeHByZXNzaW9uKSAmJiBpc0NvbnN0YW50KHJpZ2h0RXhwcmVzc2lvbikpIHtcblx0XHRzd2l0Y2ggKG9wZXJhdG9yKSB7XG5cdFx0XHRjYXNlIFwiK1wiOlxuXHRcdFx0XHRpZiAobGVmdEV4cHJlc3Npb24udmFsdWUgPT09IG51bGwgfHwgbGVmdEV4cHJlc3Npb24udmFsdWUgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdHJldHVybiBjb25zdGFudChyaWdodEV4cHJlc3Npb24udmFsdWUgYXMgbnVtYmVyKTtcblx0XHRcdFx0fSBlbHNlIGlmIChyaWdodEV4cHJlc3Npb24udmFsdWUgPT09IG51bGwgfHwgcmlnaHRFeHByZXNzaW9uLnZhbHVlID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRyZXR1cm4gY29uc3RhbnQobGVmdEV4cHJlc3Npb24udmFsdWUgYXMgbnVtYmVyKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRjb25zdCBzdW0gPSAobGVmdEV4cHJlc3Npb24udmFsdWUgYXMgbnVtYmVyKSArIChyaWdodEV4cHJlc3Npb24udmFsdWUgYXMgbnVtYmVyKTtcblx0XHRcdFx0cmV0dXJuIGNvbnN0YW50KHN1bSk7XG5cdFx0XHRjYXNlIFwiLVwiOlxuXHRcdFx0XHRpZiAobGVmdEV4cHJlc3Npb24udmFsdWUgPT09IG51bGwgfHwgbGVmdEV4cHJlc3Npb24udmFsdWUgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdHJldHVybiBjb25zdGFudChyaWdodEV4cHJlc3Npb24udmFsdWUgYXMgbnVtYmVyKTtcblx0XHRcdFx0fSBlbHNlIGlmIChyaWdodEV4cHJlc3Npb24udmFsdWUgPT09IG51bGwgfHwgcmlnaHRFeHByZXNzaW9uLnZhbHVlID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRyZXR1cm4gY29uc3RhbnQobGVmdEV4cHJlc3Npb24udmFsdWUgYXMgbnVtYmVyKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRjb25zdCBkaWZmID0gKGxlZnRFeHByZXNzaW9uLnZhbHVlIGFzIG51bWJlcikgLSAocmlnaHRFeHByZXNzaW9uLnZhbHVlIGFzIG51bWJlcik7XG5cdFx0XHRcdHJldHVybiBjb25zdGFudChkaWZmKTtcblx0XHRcdGNhc2UgXCIvXCI6XG5cdFx0XHRcdGlmIChcblx0XHRcdFx0XHRsZWZ0RXhwcmVzc2lvbi52YWx1ZSA9PT0gbnVsbCB8fFxuXHRcdFx0XHRcdGxlZnRFeHByZXNzaW9uLnZhbHVlID09PSB1bmRlZmluZWQgfHxcblx0XHRcdFx0XHRyaWdodEV4cHJlc3Npb24udmFsdWUgPT09IG51bGwgfHxcblx0XHRcdFx0XHRyaWdodEV4cHJlc3Npb24udmFsdWUgPT09IHVuZGVmaW5lZFxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHRyZXR1cm4gY29uc3RhbnQoMCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y29uc3QgZGl2ID0gKGxlZnRFeHByZXNzaW9uLnZhbHVlIGFzIG51bWJlcikgLyAocmlnaHRFeHByZXNzaW9uLnZhbHVlIGFzIG51bWJlcik7XG5cdFx0XHRcdHJldHVybiBjb25zdGFudChkaXYpO1xuXHRcdFx0Y2FzZSBcIk5lZ1wiOlxuXHRcdFx0XHRpZiAobGVmdEV4cHJlc3Npb24udmFsdWUgPT09IG51bGwgfHwgbGVmdEV4cHJlc3Npb24udmFsdWUgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdHJldHVybiBjb25zdGFudCgwKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gY29uc3RhbnQoLWxlZnRFeHByZXNzaW9uLnZhbHVlKTtcblx0XHRcdGNhc2UgXCIlXCI6XG5cdFx0XHRcdGlmIChcblx0XHRcdFx0XHRsZWZ0RXhwcmVzc2lvbi52YWx1ZSA9PT0gbnVsbCB8fFxuXHRcdFx0XHRcdGxlZnRFeHByZXNzaW9uLnZhbHVlID09PSB1bmRlZmluZWQgfHxcblx0XHRcdFx0XHRyaWdodEV4cHJlc3Npb24udmFsdWUgPT09IG51bGwgfHxcblx0XHRcdFx0XHRyaWdodEV4cHJlc3Npb24udmFsdWUgPT09IHVuZGVmaW5lZFxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHRyZXR1cm4gY29uc3RhbnQoMCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y29uc3QgbW9kID0gKGxlZnRFeHByZXNzaW9uLnZhbHVlIGFzIG51bWJlcikgJSAocmlnaHRFeHByZXNzaW9uLnZhbHVlIGFzIG51bWJlcik7XG5cdFx0XHRcdHJldHVybiBjb25zdGFudChtb2QpO1xuXHRcdFx0Y2FzZSBcIkZsb29yXCI6XG5cdFx0XHRcdGlmIChsZWZ0RXhwcmVzc2lvbi52YWx1ZSA9PT0gbnVsbCB8fCBsZWZ0RXhwcmVzc2lvbi52YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGNvbnN0YW50KDApO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBjb25zdGFudChNYXRoLmZsb29yKGxlZnRFeHByZXNzaW9uLnZhbHVlIGFzIG51bWJlcikpO1xuXHRcdFx0Y2FzZSBcIipcIjpcblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdGxlZnRFeHByZXNzaW9uLnZhbHVlID09PSBudWxsIHx8XG5cdFx0XHRcdFx0bGVmdEV4cHJlc3Npb24udmFsdWUgPT09IHVuZGVmaW5lZCB8fFxuXHRcdFx0XHRcdHJpZ2h0RXhwcmVzc2lvbi52YWx1ZSA9PT0gbnVsbCB8fFxuXHRcdFx0XHRcdHJpZ2h0RXhwcmVzc2lvbi52YWx1ZSA9PT0gdW5kZWZpbmVkXG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdHJldHVybiBjb25zdGFudCgwKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRjb25zdCBtdWx0ID0gKGxlZnRFeHByZXNzaW9uLnZhbHVlIGFzIG51bWJlcikgKiAocmlnaHRFeHByZXNzaW9uLnZhbHVlIGFzIG51bWJlcik7XG5cdFx0XHRcdHJldHVybiBjb25zdGFudChtdWx0KTtcblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdF90eXBlOiBcIkFyaXRobWV0aWNcIixcblx0XHRcdG9wZXJhdG9yOiBvcGVyYXRvcixcblx0XHRcdG9wZXJhbmQxOiBsZWZ0RXhwcmVzc2lvbixcblx0XHRcdG9wZXJhbmQyOiByaWdodEV4cHJlc3Npb25cblx0XHR9O1xuXHR9XG59XG5cbi8qKlxuICogTG9naWNhbCBgbm90YCBvcGVyYXRvci5cbiAqIEBwYXJhbSBvcGVyYW5kIFRoZSBleHByZXNzaW9uIHRvIHJldmVyc2VcbiAqIEByZXR1cm5zIFRoZSByZXN1bHRpbmcgZXhwcmVzc2lvbiB0aGF0IGV2YWx1YXRlcyB0byBib29sZWFuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBub3Qob3BlcmFuZDogRXhwcmVzc2lvbk9yUHJpbWl0aXZlPGJvb2xlYW4+KTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+IHtcblx0b3BlcmFuZCA9IHdyYXBQcmltaXRpdmUob3BlcmFuZCk7XG5cdGlmIChoYXNVbnJlc29sdmFibGVFeHByZXNzaW9uKG9wZXJhbmQpKSB7XG5cdFx0cmV0dXJuIHVucmVzb2x2YWJsZUV4cHJlc3Npb247XG5cdH0gZWxzZSBpZiAoaXNDb25zdGFudChvcGVyYW5kKSkge1xuXHRcdHJldHVybiBjb25zdGFudCghb3BlcmFuZC52YWx1ZSk7XG5cdH0gZWxzZSBpZiAoXG5cdFx0dHlwZW9mIG9wZXJhbmQgPT09IFwib2JqZWN0XCIgJiZcblx0XHRvcGVyYW5kLl90eXBlID09PSBcIlNldFwiICYmXG5cdFx0b3BlcmFuZC5vcGVyYXRvciA9PT0gXCJ8fFwiICYmXG5cdFx0b3BlcmFuZC5vcGVyYW5kcy5ldmVyeSgoZXhwcmVzc2lvbikgPT4gaXNDb25zdGFudChleHByZXNzaW9uKSB8fCBpc0NvbXBhcmlzb24oZXhwcmVzc2lvbikpXG5cdCkge1xuXHRcdHJldHVybiBhbmQoLi4ub3BlcmFuZC5vcGVyYW5kcy5tYXAoKGV4cHJlc3Npb24pID0+IG5vdChleHByZXNzaW9uKSkpO1xuXHR9IGVsc2UgaWYgKFxuXHRcdHR5cGVvZiBvcGVyYW5kID09PSBcIm9iamVjdFwiICYmXG5cdFx0b3BlcmFuZC5fdHlwZSA9PT0gXCJTZXRcIiAmJlxuXHRcdG9wZXJhbmQub3BlcmF0b3IgPT09IFwiJiZcIiAmJlxuXHRcdG9wZXJhbmQub3BlcmFuZHMuZXZlcnkoKGV4cHJlc3Npb24pID0+IGlzQ29uc3RhbnQoZXhwcmVzc2lvbikgfHwgaXNDb21wYXJpc29uKGV4cHJlc3Npb24pKVxuXHQpIHtcblx0XHRyZXR1cm4gb3IoLi4ub3BlcmFuZC5vcGVyYW5kcy5tYXAoKGV4cHJlc3Npb24pID0+IG5vdChleHByZXNzaW9uKSkpO1xuXHR9IGVsc2UgaWYgKGlzQ29tcGFyaXNvbihvcGVyYW5kKSkge1xuXHRcdC8vIENyZWF0ZSB0aGUgcmV2ZXJzZSBjb21wYXJpc29uXG5cdFx0c3dpdGNoIChvcGVyYW5kLm9wZXJhdG9yKSB7XG5cdFx0XHRjYXNlIFwiIT09XCI6XG5cdFx0XHRcdHJldHVybiB7IC4uLm9wZXJhbmQsIG9wZXJhdG9yOiBcIj09PVwiIH07XG5cdFx0XHRjYXNlIFwiPFwiOlxuXHRcdFx0XHRyZXR1cm4geyAuLi5vcGVyYW5kLCBvcGVyYXRvcjogXCI+PVwiIH07XG5cdFx0XHRjYXNlIFwiPD1cIjpcblx0XHRcdFx0cmV0dXJuIHsgLi4ub3BlcmFuZCwgb3BlcmF0b3I6IFwiPlwiIH07XG5cdFx0XHRjYXNlIFwiPT09XCI6XG5cdFx0XHRcdHJldHVybiB7IC4uLm9wZXJhbmQsIG9wZXJhdG9yOiBcIiE9PVwiIH07XG5cdFx0XHRjYXNlIFwiPlwiOlxuXHRcdFx0XHRyZXR1cm4geyAuLi5vcGVyYW5kLCBvcGVyYXRvcjogXCI8PVwiIH07XG5cdFx0XHRjYXNlIFwiPj1cIjpcblx0XHRcdFx0cmV0dXJuIHsgLi4ub3BlcmFuZCwgb3BlcmF0b3I6IFwiPFwiIH07XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdF90eXBlOiBcIk5vdFwiLFxuXHRcdFx0XHRcdG9wZXJhbmQ6IG9wZXJhbmRcblx0XHRcdFx0fTtcblx0XHR9XG5cdH0gZWxzZSBpZiAob3BlcmFuZC5fdHlwZSA9PT0gXCJOb3RcIikge1xuXHRcdHJldHVybiBvcGVyYW5kLm9wZXJhbmQ7XG5cdH1cblxuXHRyZXR1cm4ge1xuXHRcdF90eXBlOiBcIk5vdFwiLFxuXHRcdG9wZXJhbmQ6IG9wZXJhbmRcblx0fTtcbn1cblxuLyoqXG4gKiBFdmFsdWF0ZXMgd2hldGhlciBhIGJpbmRpbmcgZXhwcmVzc2lvbiBpcyBlcXVhbCB0byB0cnVlIHdpdGggYSBsb29zZSBlcXVhbGl0eS5cbiAqIEBwYXJhbSBvcGVyYW5kIFRoZSBleHByZXNzaW9uIHRvIGNoZWNrXG4gKiBAcmV0dXJucyBUaGUgcmVzdWx0aW5nIGV4cHJlc3Npb24gdGhhdCBldmFsdWF0ZXMgdG8gYm9vbGVhblxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNUcnV0aHkob3BlcmFuZDogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHN0cmluZz4pOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4ge1xuXHRpZiAoaXNDb25zdGFudChvcGVyYW5kKSkge1xuXHRcdHJldHVybiBjb25zdGFudCghIW9wZXJhbmQudmFsdWUpO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiB7XG5cdFx0XHRfdHlwZTogXCJUcnV0aHlcIixcblx0XHRcdG9wZXJhbmQ6IG9wZXJhbmRcblx0XHR9O1xuXHR9XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIGJpbmRpbmcgZXhwcmVzc2lvbiB0aGF0IHdpbGwgYmUgZXZhbHVhdGVkIGJ5IHRoZSBjb3JyZXNwb25kaW5nIG1vZGVsLlxuICogQHBhcmFtIHBhdGhcbiAqIEBwYXJhbSBtb2RlbE5hbWVcbiAqIEBwYXJhbSB2aXNpdGVkTmF2aWdhdGlvblBhdGhzXG4gKiBAcGFyYW0gcGF0aFZpc2l0b3JcbiAqIEByZXR1cm5zIEFuIGV4cHJlc3Npb24gcmVwcmVzZW50YXRpbmcgdGhhdCBwYXRoIGluIHRoZSBtb2RlbFxuICogQGRlcHJlY2F0ZWQgdXNlIHBhdGhJbk1vZGVsIGluc3RlYWRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJpbmRpbmdFeHByZXNzaW9uPFRhcmdldFR5cGUgZXh0ZW5kcyBQcmltaXRpdmVUeXBlPihcblx0cGF0aDogc3RyaW5nLFxuXHRtb2RlbE5hbWU/OiBzdHJpbmcsXG5cdHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHM6IHN0cmluZ1tdID0gW10sXG5cdHBhdGhWaXNpdG9yPzogRnVuY3Rpb25cbik6IFBhdGhJbk1vZGVsRXhwcmVzc2lvbjxUYXJnZXRUeXBlPiB8IFVucmVzb2x2YWJsZVBhdGhFeHByZXNzaW9uIHtcblx0cmV0dXJuIHBhdGhJbk1vZGVsKHBhdGgsIG1vZGVsTmFtZSwgdmlzaXRlZE5hdmlnYXRpb25QYXRocywgcGF0aFZpc2l0b3IpO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBiaW5kaW5nIGV4cHJlc3Npb24gdGhhdCB3aWxsIGJlIGV2YWx1YXRlZCBieSB0aGUgY29ycmVzcG9uZGluZyBtb2RlbC5cbiAqIEB0ZW1wbGF0ZSBUYXJnZXRUeXBlXG4gKiBAcGFyYW0gcGF0aCBUaGUgcGF0aCBvbiB0aGUgbW9kZWxcbiAqIEBwYXJhbSBbbW9kZWxOYW1lXSBUaGUgbmFtZSBvZiB0aGUgbW9kZWxcbiAqIEBwYXJhbSBbdmlzaXRlZE5hdmlnYXRpb25QYXRoc10gVGhlIHBhdGhzIGZyb20gdGhlIHJvb3QgZW50aXR5U2V0XG4gKiBAcGFyYW0gW3BhdGhWaXNpdG9yXSBBIGZ1bmN0aW9uIHRvIG1vZGlmeSB0aGUgcmVzdWx0aW5nIHBhdGhcbiAqIEByZXR1cm5zIEFuIGV4cHJlc3Npb24gcmVwcmVzZW50YXRpbmcgdGhhdCBwYXRoIGluIHRoZSBtb2RlbFxuICovXG5leHBvcnQgZnVuY3Rpb24gcGF0aEluTW9kZWwoXG5cdHBhdGg6IHVuZGVmaW5lZCxcblx0bW9kZWxOYW1lPzogc3RyaW5nLFxuXHR2aXNpdGVkTmF2aWdhdGlvblBhdGhzPzogc3RyaW5nW10sXG5cdHBhdGhWaXNpdG9yPzogRnVuY3Rpb25cbik6IFVucmVzb2x2YWJsZVBhdGhFeHByZXNzaW9uO1xuZXhwb3J0IGZ1bmN0aW9uIHBhdGhJbk1vZGVsPFRhcmdldFR5cGUgZXh0ZW5kcyBQcmltaXRpdmVUeXBlPihcblx0cGF0aDogc3RyaW5nLFxuXHRtb2RlbE5hbWU/OiBzdHJpbmcsXG5cdHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHM/OiBzdHJpbmdbXSxcblx0cGF0aFZpc2l0b3I/OiB1bmRlZmluZWRcbik6IFBhdGhJbk1vZGVsRXhwcmVzc2lvbjxUYXJnZXRUeXBlPjtcbmV4cG9ydCBmdW5jdGlvbiBwYXRoSW5Nb2RlbDxUYXJnZXRUeXBlIGV4dGVuZHMgUHJpbWl0aXZlVHlwZT4oXG5cdHBhdGg6IHN0cmluZyB8IHVuZGVmaW5lZCxcblx0bW9kZWxOYW1lPzogc3RyaW5nLFxuXHR2aXNpdGVkTmF2aWdhdGlvblBhdGhzPzogc3RyaW5nW10sXG5cdHBhdGhWaXNpdG9yPzogRnVuY3Rpb25cbik6IFVucmVzb2x2YWJsZVBhdGhFeHByZXNzaW9uIHwgUGF0aEluTW9kZWxFeHByZXNzaW9uPFRhcmdldFR5cGU+O1xuZXhwb3J0IGZ1bmN0aW9uIHBhdGhJbk1vZGVsPFRhcmdldFR5cGUgZXh0ZW5kcyBQcmltaXRpdmVUeXBlPihcblx0cGF0aDogc3RyaW5nIHwgdW5kZWZpbmVkLFxuXHRtb2RlbE5hbWU/OiBzdHJpbmcsXG5cdHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHM6IHN0cmluZ1tdID0gW10sXG5cdHBhdGhWaXNpdG9yPzogRnVuY3Rpb25cbik6IFVucmVzb2x2YWJsZVBhdGhFeHByZXNzaW9uIHwgUGF0aEluTW9kZWxFeHByZXNzaW9uPFRhcmdldFR5cGU+IHtcblx0aWYgKHBhdGggPT09IHVuZGVmaW5lZCkge1xuXHRcdHJldHVybiB1bnJlc29sdmFibGVFeHByZXNzaW9uO1xuXHR9XG5cdGxldCB0YXJnZXRQYXRoO1xuXHRpZiAocGF0aFZpc2l0b3IpIHtcblx0XHR0YXJnZXRQYXRoID0gcGF0aFZpc2l0b3IocGF0aCk7XG5cdFx0aWYgKHRhcmdldFBhdGggPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0cmV0dXJuIHVucmVzb2x2YWJsZUV4cHJlc3Npb247XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdGNvbnN0IGxvY2FsUGF0aCA9IHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMuY29uY2F0KCk7XG5cdFx0bG9jYWxQYXRoLnB1c2gocGF0aCk7XG5cdFx0dGFyZ2V0UGF0aCA9IGxvY2FsUGF0aC5qb2luKFwiL1wiKTtcblx0fVxuXHRyZXR1cm4ge1xuXHRcdF90eXBlOiBcIlBhdGhJbk1vZGVsXCIsXG5cdFx0bW9kZWxOYW1lOiBtb2RlbE5hbWUsXG5cdFx0cGF0aDogdGFyZ2V0UGF0aFxuXHR9O1xufVxuXG50eXBlIFBsYWluRXhwcmVzc2lvbk9iamVjdCA9IHsgW2luZGV4OiBzdHJpbmddOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248dW5rbm93bj4gfTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgY29uc3RhbnQgZXhwcmVzc2lvbiBiYXNlZCBvbiBhIHByaW1pdGl2ZSB2YWx1ZS5cbiAqIEB0ZW1wbGF0ZSBUXG4gKiBAcGFyYW0gdmFsdWUgVGhlIGNvbnN0YW50IHRvIHdyYXAgaW4gYW4gZXhwcmVzc2lvblxuICogQHJldHVybnMgVGhlIGNvbnN0YW50IGV4cHJlc3Npb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbnN0YW50PFQgZXh0ZW5kcyBQcmltaXRpdmVUeXBlPih2YWx1ZTogVCk6IENvbnN0YW50RXhwcmVzc2lvbjxUPiB7XG5cdGxldCBjb25zdGFudFZhbHVlOiBUO1xuXG5cdGlmICh0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIgJiYgdmFsdWUgIT09IG51bGwgJiYgdmFsdWUgIT09IHVuZGVmaW5lZCkge1xuXHRcdGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuXHRcdFx0Y29uc3RhbnRWYWx1ZSA9IHZhbHVlLm1hcCh3cmFwUHJpbWl0aXZlKSBhcyBUO1xuXHRcdH0gZWxzZSBpZiAoaXNQcmltaXRpdmVPYmplY3QodmFsdWUpKSB7XG5cdFx0XHRjb25zdGFudFZhbHVlID0gdmFsdWUudmFsdWVPZigpIGFzIFQ7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNvbnN0YW50VmFsdWUgPSBPYmplY3QuZW50cmllcyh2YWx1ZSkucmVkdWNlKChwbGFpbkV4cHJlc3Npb24sIFtrZXksIHZhbF0pID0+IHtcblx0XHRcdFx0Y29uc3Qgd3JhcHBlZFZhbHVlID0gd3JhcFByaW1pdGl2ZSh2YWwpO1xuXHRcdFx0XHRpZiAod3JhcHBlZFZhbHVlLl90eXBlICE9PSBcIkNvbnN0YW50XCIgfHwgd3JhcHBlZFZhbHVlLnZhbHVlICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRwbGFpbkV4cHJlc3Npb25ba2V5XSA9IHdyYXBwZWRWYWx1ZTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gcGxhaW5FeHByZXNzaW9uO1xuXHRcdFx0fSwge30gYXMgUGxhaW5FeHByZXNzaW9uT2JqZWN0KSBhcyBUO1xuXHRcdH1cblx0fSBlbHNlIHtcblx0XHRjb25zdGFudFZhbHVlID0gdmFsdWU7XG5cdH1cblxuXHRyZXR1cm4geyBfdHlwZTogXCJDb25zdGFudFwiLCB2YWx1ZTogY29uc3RhbnRWYWx1ZSB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZUJpbmRpbmdTdHJpbmc8VCBleHRlbmRzIFByaW1pdGl2ZVR5cGU+KFxuXHR2YWx1ZTogc3RyaW5nIHwgYm9vbGVhbiB8IG51bWJlcixcblx0dGFyZ2V0VHlwZT86IHN0cmluZ1xuKTogQ29uc3RhbnRFeHByZXNzaW9uPFQ+IHwgUGF0aEluTW9kZWxFeHByZXNzaW9uPFQ+IHwgRW1iZWRkZWRVSTVCaW5kaW5nRXhwcmVzc2lvbjxUPiB8IEVtYmVkZGVkVUk1RXhwcmVzc2lvbkJpbmRpbmdFeHByZXNzaW9uPFQ+IHtcblx0aWYgKHZhbHVlICE9PSB1bmRlZmluZWQgJiYgdHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiICYmIHZhbHVlLnN0YXJ0c1dpdGgoXCJ7XCIpKSB7XG5cdFx0Y29uc3QgcGF0aEluTW9kZWxSZWdleCA9IC9eeyguKik+KC4rKX0kLzsgLy8gTWF0Y2hlcyBtb2RlbCBwYXRocyBsaWtlIFwibW9kZWw+cGF0aFwiIG9yIFwiPnBhdGhcIiAoZGVmYXVsdCBtb2RlbClcblx0XHRjb25zdCBwYXRoSW5Nb2RlbFJlZ2V4TWF0Y2ggPSBwYXRoSW5Nb2RlbFJlZ2V4LmV4ZWModmFsdWUpO1xuXG5cdFx0aWYgKHZhbHVlLnN0YXJ0c1dpdGgoXCJ7PVwiKSkge1xuXHRcdFx0Ly8gRXhwcmVzc2lvbiBiaW5kaW5nLCB3ZSBjYW4ganVzdCByZW1vdmUgdGhlIG91dGVyIGJpbmRpbmcgdGhpbmdzXG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRfdHlwZTogXCJFbWJlZGRlZEV4cHJlc3Npb25CaW5kaW5nXCIsXG5cdFx0XHRcdHZhbHVlOiB2YWx1ZVxuXHRcdFx0fTtcblx0XHR9IGVsc2UgaWYgKHBhdGhJbk1vZGVsUmVnZXhNYXRjaCkge1xuXHRcdFx0cmV0dXJuIHBhdGhJbk1vZGVsKHBhdGhJbk1vZGVsUmVnZXhNYXRjaFsyXSB8fCBcIlwiLCBwYXRoSW5Nb2RlbFJlZ2V4TWF0Y2hbMV0gfHwgdW5kZWZpbmVkKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0X3R5cGU6IFwiRW1iZWRkZWRCaW5kaW5nXCIsXG5cdFx0XHRcdHZhbHVlOiB2YWx1ZVxuXHRcdFx0fTtcblx0XHR9XG5cdH0gZWxzZSBpZiAodGFyZ2V0VHlwZSA9PT0gXCJib29sZWFuXCIgJiYgdHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiICYmICh2YWx1ZSA9PT0gXCJ0cnVlXCIgfHwgdmFsdWUgPT09IFwiZmFsc2VcIikpIHtcblx0XHRyZXR1cm4gY29uc3RhbnQodmFsdWUgPT09IFwidHJ1ZVwiKSBhcyBDb25zdGFudEV4cHJlc3Npb248VD47XG5cdH0gZWxzZSBpZiAodGFyZ2V0VHlwZSA9PT0gXCJudW1iZXJcIiAmJiB0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIgJiYgKCFpc05hTihOdW1iZXIodmFsdWUpKSB8fCB2YWx1ZSA9PT0gXCJOYU5cIikpIHtcblx0XHRyZXR1cm4gY29uc3RhbnQoTnVtYmVyKHZhbHVlKSkgYXMgQ29uc3RhbnRFeHByZXNzaW9uPFQ+O1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiBjb25zdGFudCh2YWx1ZSkgYXMgQ29uc3RhbnRFeHByZXNzaW9uPFQ+O1xuXHR9XG59XG5cbi8qKlxuICogQSBuYW1lZCByZWZlcmVuY2UuXG4gKiBAc2VlIGZuXG4gKiBAcGFyYW0gcmVmZXJlbmNlIFJlZmVyZW5jZVxuICogQHJldHVybnMgVGhlIG9iamVjdCByZWZlcmVuY2UgYmluZGluZyBwYXJ0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZWYocmVmZXJlbmNlOiBzdHJpbmcgfCBudWxsKTogUmVmZXJlbmNlRXhwcmVzc2lvbiB7XG5cdHJldHVybiB7IF90eXBlOiBcIlJlZlwiLCByZWY6IHJlZmVyZW5jZSB9O1xufVxuXG4vKipcbiAqIFdyYXAgYSBzdGF0ZSBvYmplY3QgaW50byBhIHBhdGggaW4gbW9kZWwgZXhwcmVzc2lvbi5cbiAqIEB0ZW1wbGF0ZSBUXG4gKiBAcGFyYW0gc3RhdGVPYmplY3RQcm9wIFRoZSBvYmplY3QgdG8gZXZhbHVhdGUsIGlmIGl0J3MgYSBjb25zdGFudCBpdCB3aWxsIGJlIHdyYXBwZWQgaW4gYSBjb25zdGFudCBleHByZXNzaW9uLCBpZiBpdCdzIGEgc3RhdGUgcHJvcGVydHkgaXQgd2lsbCBiZSBib3VuZFxuICogQHBhcmFtIGtleSBUaGUga2V5IG9mIHRoZSBzdGF0ZSBvYmplY3QgdG8gYmluZFxuICogQHJldHVybnMgVGhlIGNvcnJlY3QgYmluZGluZyB0b29sa2l0IGV4cHJlc3Npb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJpbmRTdGF0ZTxUIGV4dGVuZHMgb2JqZWN0LCBLIGV4dGVuZHMgUHJpbWl0aXZlVHlwZT4oXG5cdHN0YXRlT2JqZWN0UHJvcDogVCxcblx0a2V5OiBrZXlvZiBUXG4pOiBQYXRoSW5Nb2RlbEV4cHJlc3Npb248Sz4gfCBDb25zdGFudEV4cHJlc3Npb248Sz4ge1xuXHRpZiAodHlwZW9mIHN0YXRlT2JqZWN0UHJvcCA9PT0gXCJvYmplY3RcIiAmJiAoc3RhdGVPYmplY3RQcm9wIGFzIEJpbmRpbmdJbmZvSG9sZGVyPFQ+KS5fX2JpbmRpbmdJbmZvKSB7XG5cdFx0cmV0dXJuIHBhdGhJbk1vZGVsKFwiL1wiICsga2V5LnRvU3RyaW5nKCksIChzdGF0ZU9iamVjdFByb3AgYXMgQmluZGluZ0luZm9Ib2xkZXI8VD4pLl9fYmluZGluZ0luZm8ubW9kZWwpO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiBjb25zdGFudChzdGF0ZU9iamVjdFByb3ApIGFzIHVua25vd24gYXMgQ29uc3RhbnRFeHByZXNzaW9uPEs+O1xuXHR9XG59XG4vKipcbiAqIFdyYXAgYSBwcmltaXRpdmUgaW50byBhIGNvbnN0YW50IGV4cHJlc3Npb24gaWYgaXQgaXMgbm90IGFscmVhZHkgYW4gZXhwcmVzc2lvbi5cbiAqIEB0ZW1wbGF0ZSBUXG4gKiBAcGFyYW0gc29tZXRoaW5nIFRoZSBvYmplY3QgdG8gd3JhcCBpbiBhIENvbnN0YW50IGV4cHJlc3Npb25cbiAqIEByZXR1cm5zIEVpdGhlciB0aGUgb3JpZ2luYWwgb2JqZWN0IG9yIHRoZSB3cmFwcGVkIG9uZSBkZXBlbmRpbmcgb24gdGhlIGNhc2VcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHdyYXBQcmltaXRpdmU8VCBleHRlbmRzIFByaW1pdGl2ZVR5cGU+KHNvbWV0aGluZzogRXhwcmVzc2lvbk9yUHJpbWl0aXZlPFQ+KTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFQ+IHtcblx0aWYgKGlzQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uKHNvbWV0aGluZykpIHtcblx0XHRyZXR1cm4gc29tZXRoaW5nIGFzIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxUPjtcblx0fVxuXG5cdHJldHVybiBjb25zdGFudChzb21ldGhpbmcpO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiB0aGUgZXhwcmVzc2lvbiBvciB2YWx1ZSBwcm92aWRlZCBpcyBhIGJpbmRpbmcgdG9vbGluZyBleHByZXNzaW9uIG9yIG5vdC5cbiAqXG4gKiBFdmVyeSBvYmplY3QgaGF2aW5nIGEgcHJvcGVydHkgbmFtZWQgYF90eXBlYCBvZiBzb21lIHZhbHVlIGlzIGNvbnNpZGVyZWQgYW4gZXhwcmVzc2lvbiwgZXZlbiBpZiB0aGVyZSBpcyBhY3R1YWxseVxuICogbm8gc3VjaCBleHByZXNzaW9uIHR5cGUgc3VwcG9ydGVkLlxuICogQHBhcmFtIGV4cHJlc3Npb25cbiAqIEByZXR1cm5zIGB0cnVlYCBpZiB0aGUgZXhwcmVzc2lvbiBpcyBhIGJpbmRpbmcgdG9vbGtpdCBleHByZXNzaW9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0JpbmRpbmdUb29sa2l0RXhwcmVzc2lvbihcblx0ZXhwcmVzc2lvbjogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHVua25vd24+IHwgdW5rbm93blxuKTogZXhwcmVzc2lvbiBpcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248dW5rbm93bj4ge1xuXHRyZXR1cm4gKGV4cHJlc3Npb24gYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHVua25vd24+KT8uX3R5cGUgIT09IHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgdGhlIGV4cHJlc3Npb24gb3IgdmFsdWUgcHJvdmlkZWQgaXMgY29uc3RhbnQgb3Igbm90LlxuICogQHRlbXBsYXRlIFQgVGhlIHRhcmdldCB0eXBlXG4gKiBAcGFyYW0gIG1heWJlQ29uc3RhbnQgVGhlIGV4cHJlc3Npb24gb3IgcHJpbWl0aXZlIHZhbHVlIHRoYXQgaXMgdG8gYmUgY2hlY2tlZFxuICogQHJldHVybnMgYHRydWVgIGlmIGl0IGlzIGNvbnN0YW50XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0NvbnN0YW50PFQgZXh0ZW5kcyBQcmltaXRpdmVUeXBlPihtYXliZUNvbnN0YW50OiBFeHByZXNzaW9uT3JQcmltaXRpdmU8VD4pOiBtYXliZUNvbnN0YW50IGlzIENvbnN0YW50RXhwcmVzc2lvbjxUPiB7XG5cdHJldHVybiB0eXBlb2YgbWF5YmVDb25zdGFudCAhPT0gXCJvYmplY3RcIiB8fCAobWF5YmVDb25zdGFudCBhcyBCYXNlRXhwcmVzc2lvbjxUPikuX3R5cGUgPT09IFwiQ29uc3RhbnRcIjtcbn1cblxuZnVuY3Rpb24gaXNUcnVlKGV4cHJlc3Npb246IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxQcmltaXRpdmVUeXBlPik6IGJvb2xlYW4ge1xuXHRyZXR1cm4gaXNDb25zdGFudChleHByZXNzaW9uKSAmJiBleHByZXNzaW9uLnZhbHVlID09PSB0cnVlO1xufVxuXG5mdW5jdGlvbiBpc0ZhbHNlKGV4cHJlc3Npb246IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxQcmltaXRpdmVUeXBlPik6IGJvb2xlYW4ge1xuXHRyZXR1cm4gaXNDb25zdGFudChleHByZXNzaW9uKSAmJiBleHByZXNzaW9uLnZhbHVlID09PSBmYWxzZTtcbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgdGhlIGV4cHJlc3Npb24gb3IgdmFsdWUgcHJvdmlkZWQgaXMgYSBwYXRoIGluIG1vZGVsIGV4cHJlc3Npb24gb3Igbm90LlxuICogQHRlbXBsYXRlIFQgVGhlIHRhcmdldCB0eXBlXG4gKiBAcGFyYW0gIG1heWJlQmluZGluZyBUaGUgZXhwcmVzc2lvbiBvciBwcmltaXRpdmUgdmFsdWUgdGhhdCBpcyB0byBiZSBjaGVja2VkXG4gKiBAcmV0dXJucyBgdHJ1ZWAgaWYgaXQgaXMgYSBwYXRoIGluIG1vZGVsIGV4cHJlc3Npb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzUGF0aEluTW9kZWxFeHByZXNzaW9uPFQgZXh0ZW5kcyBQcmltaXRpdmVUeXBlPihcblx0bWF5YmVCaW5kaW5nOiBFeHByZXNzaW9uT3JQcmltaXRpdmU8VD5cbik6IG1heWJlQmluZGluZyBpcyBQYXRoSW5Nb2RlbEV4cHJlc3Npb248VD4ge1xuXHRyZXR1cm4gKG1heWJlQmluZGluZyBhcyBCYXNlRXhwcmVzc2lvbjxUPik/Ll90eXBlID09PSBcIlBhdGhJbk1vZGVsXCI7XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIHRoZSBleHByZXNzaW9uIG9yIHZhbHVlIHByb3ZpZGVkIGlzIGEgY29tcGxleCB0eXBlIGV4cHJlc3Npb24uXG4gKiBAdGVtcGxhdGUgVCBUaGUgdGFyZ2V0IHR5cGVcbiAqIEBwYXJhbSAgbWF5YmVCaW5kaW5nIFRoZSBleHByZXNzaW9uIG9yIHByaW1pdGl2ZSB2YWx1ZSB0aGF0IGlzIHRvIGJlIGNoZWNrZWRcbiAqIEByZXR1cm5zIGB0cnVlYCBpZiBpdCBpcyBhIHBhdGggaW4gbW9kZWwgZXhwcmVzc2lvblxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNDb21wbGV4VHlwZUV4cHJlc3Npb248VCBleHRlbmRzIFByaW1pdGl2ZVR5cGU+KFxuXHRtYXliZUJpbmRpbmc6IEV4cHJlc3Npb25PclByaW1pdGl2ZTxUPlxuKTogbWF5YmVCaW5kaW5nIGlzIENvbXBsZXhUeXBlRXhwcmVzc2lvbjxUPiB7XG5cdHJldHVybiAobWF5YmVCaW5kaW5nIGFzIEJhc2VFeHByZXNzaW9uPFQ+KT8uX3R5cGUgPT09IFwiQ29tcGxleFR5cGVcIjtcbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgdGhlIGV4cHJlc3Npb24gb3IgdmFsdWUgcHJvdmlkZWQgaXMgYSBjb25jYXQgZXhwcmVzc2lvbiBvciBub3QuXG4gKiBAcGFyYW0gZXhwcmVzc2lvblxuICogQHJldHVybnMgYHRydWVgIGlmIHRoZSBleHByZXNzaW9uIGlzIGEgQ29uY2F0RXhwcmVzc2lvblxuICovXG5mdW5jdGlvbiBpc0NvbmNhdEV4cHJlc3Npb24oZXhwcmVzc2lvbjogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFByaW1pdGl2ZVR5cGU+KTogZXhwcmVzc2lvbiBpcyBDb25jYXRFeHByZXNzaW9uIHtcblx0cmV0dXJuIChleHByZXNzaW9uIGFzIEJhc2VFeHByZXNzaW9uPFByaW1pdGl2ZVR5cGU+KT8uX3R5cGUgPT09IFwiQ29uY2F0XCI7XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIHRoZSBleHByZXNzaW9uIG9yIHZhbHVlIHByb3ZpZGVkIGlzIGEgSWZFbHNlIGV4cHJlc3Npb24gb3Igbm90LlxuICogQHBhcmFtIGV4cHJlc3Npb25cbiAqIEByZXR1cm5zIGB0cnVlYCBpZiB0aGUgZXhwcmVzc2lvbiBpcyBhIElmRWxzZUV4cHJlc3Npb25cbiAqL1xuZnVuY3Rpb24gaXNJZkVsc2VFeHByZXNzaW9uKGV4cHJlc3Npb246IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxQcmltaXRpdmVUeXBlPik6IGV4cHJlc3Npb24gaXMgQ29uY2F0RXhwcmVzc2lvbiB7XG5cdHJldHVybiAoZXhwcmVzc2lvbiBhcyBCYXNlRXhwcmVzc2lvbjxQcmltaXRpdmVUeXBlPik/Ll90eXBlID09PSBcIklmRWxzZVwiO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiB0aGUgZXhwcmVzc2lvbiBwcm92aWRlZCBpcyBhIGNvbXBhcmlzb24gb3Igbm90LlxuICogQHRlbXBsYXRlIFQgVGhlIHRhcmdldCB0eXBlXG4gKiBAcGFyYW0gZXhwcmVzc2lvbiBUaGUgZXhwcmVzc2lvblxuICogQHJldHVybnMgYHRydWVgIGlmIHRoZSBleHByZXNzaW9uIGlzIGEgQ29tcGFyaXNvbkV4cHJlc3Npb25cbiAqL1xuZnVuY3Rpb24gaXNDb21wYXJpc29uPFQgZXh0ZW5kcyBQcmltaXRpdmVUeXBlPihleHByZXNzaW9uOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248VD4pOiBleHByZXNzaW9uIGlzIENvbXBhcmlzb25FeHByZXNzaW9uIHtcblx0cmV0dXJuIGV4cHJlc3Npb24uX3R5cGUgPT09IFwiQ29tcGFyaXNvblwiO1xufVxuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIHRoZSBpbnB1dCBwYXJhbWV0ZXIgaXMgYSBjb25zdGFudCBleHByZXNzaW9uIG9mIHR5cGUgdW5kZWZpbmVkLlxuICogQHBhcmFtIGV4cHJlc3Npb24gVGhlIGlucHV0IGV4cHJlc3Npb24gb3Igb2JqZWN0IGluIGdlbmVyYWxcbiAqIEByZXR1cm5zIGB0cnVlYCBpZiB0aGUgaW5wdXQgaXMgY29uc3RhbnQgd2hpY2ggaGFzIHVuZGVmaW5lZCBmb3IgdmFsdWVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzVW5kZWZpbmVkRXhwcmVzc2lvbihleHByZXNzaW9uOiB1bmtub3duKTogZXhwcmVzc2lvbiBpcyBDb25zdGFudEV4cHJlc3Npb248dW5kZWZpbmVkPiB7XG5cdGNvbnN0IGV4cHJlc3Npb25Bc0V4cHJlc3Npb24gPSBleHByZXNzaW9uIGFzIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjx1bmtub3duPjtcblx0cmV0dXJuIGV4cHJlc3Npb25Bc0V4cHJlc3Npb24/Ll90eXBlID09PSBcIkNvbnN0YW50XCIgJiYgZXhwcmVzc2lvbkFzRXhwcmVzc2lvbj8udmFsdWUgPT09IHVuZGVmaW5lZDtcbn1cblxudHlwZSBDb21wbGV4QW5ub3RhdGlvbkV4cHJlc3Npb248UD4gPVxuXHR8IFBhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbjxQPlxuXHR8IEFwcGx5QW5ub3RhdGlvbkV4cHJlc3Npb248UD5cblx0fCBJZkFubm90YXRpb25FeHByZXNzaW9uPFA+XG5cdHwgT3JBbm5vdGF0aW9uRXhwcmVzc2lvbjxQPlxuXHR8IEFuZEFubm90YXRpb25FeHByZXNzaW9uPFA+XG5cdHwgTmVBbm5vdGF0aW9uRXhwcmVzc2lvbjxQPlxuXHR8IEVxQW5ub3RhdGlvbkV4cHJlc3Npb248UD5cblx0fCBOb3RBbm5vdGF0aW9uRXhwcmVzc2lvbjxQPlxuXHR8IEd0QW5ub3RhdGlvbkV4cHJlc3Npb248UD5cblx0fCBHZUFubm90YXRpb25FeHByZXNzaW9uPFA+XG5cdHwgTGVBbm5vdGF0aW9uRXhwcmVzc2lvbjxQPlxuXHR8IEx0QW5ub3RhdGlvbkV4cHJlc3Npb248UD5cblx0fCBIYXNBbm5vdGF0aW9uRXhwcmVzc2lvbjxQPlxuXHR8IEluQW5ub3RhdGlvbkV4cHJlc3Npb248UD5cblx0fCBBZGRBbm5vdGF0aW9uRXhwcmVzc2lvbjxQPlxuXHR8IFN1YkFubm90YXRpb25FeHByZXNzaW9uPFA+XG5cdHwgTXVsQW5ub3RhdGlvbkV4cHJlc3Npb248UD5cblx0fCBEaXZBbm5vdGF0aW9uRXhwcmVzc2lvbjxQPlxuXHR8IE1vZEFubm90YXRpb25FeHByZXNzaW9uPFA+XG5cdHwgRGl2QnlBbm5vdGF0aW9uRXhwcmVzc2lvbjxQPlxuXHR8IE5lZ0Fubm90YXRpb25FeHByZXNzaW9uPFA+XG5cdHwgVm9jYWJDb25zdGFudEV4cHJlc3Npb248UD47XG5cbmZ1bmN0aW9uIGlzUHJpbWl0aXZlT2JqZWN0KG9iamVjdFR5cGU6IG9iamVjdCk6IGJvb2xlYW4ge1xuXHRzd2l0Y2ggKG9iamVjdFR5cGUuY29uc3RydWN0b3IubmFtZSkge1xuXHRcdGNhc2UgXCJTdHJpbmdcIjpcblx0XHRjYXNlIFwiTnVtYmVyXCI6XG5cdFx0Y2FzZSBcIkJvb2xlYW5cIjpcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdGRlZmF1bHQ6XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cbn1cbi8qKlxuICogQ2hlY2sgaWYgdGhlIHBhc3NlZCBhbm5vdGF0aW9uIGFubm90YXRpb25WYWx1ZSBpcyBhIENvbXBsZXhBbm5vdGF0aW9uRXhwcmVzc2lvbi5cbiAqIEB0ZW1wbGF0ZSBUIFRoZSB0YXJnZXQgdHlwZVxuICogQHBhcmFtICBhbm5vdGF0aW9uVmFsdWUgVGhlIGFubm90YXRpb24gYW5ub3RhdGlvblZhbHVlIHRvIGV2YWx1YXRlXG4gKiBAcmV0dXJucyBgdHJ1ZWAgaWYgdGhlIG9iamVjdCBpcyBhIHtDb21wbGV4QW5ub3RhdGlvbkV4cHJlc3Npb259XG4gKi9cbmZ1bmN0aW9uIGlzQ29tcGxleEFubm90YXRpb25FeHByZXNzaW9uPFQ+KGFubm90YXRpb25WYWx1ZTogUHJvcGVydHlBbm5vdGF0aW9uVmFsdWU8VD4pOiBhbm5vdGF0aW9uVmFsdWUgaXMgQ29tcGxleEFubm90YXRpb25FeHByZXNzaW9uPFQ+IHtcblx0cmV0dXJuIHR5cGVvZiBhbm5vdGF0aW9uVmFsdWUgPT09IFwib2JqZWN0XCIgJiYgIWlzUHJpbWl0aXZlT2JqZWN0KGFubm90YXRpb25WYWx1ZSBhcyBvYmplY3QpO1xufVxuXG5sZXQgQ09OVkVSVEVSX1JPT1RfU1lNQk9MOiBzeW1ib2wgfCB1bmRlZmluZWQ7XG5leHBvcnQgZnVuY3Rpb24gc2V0Q29udmVydGVyUm9vdFN5bWJvbChjb252ZXJ0ZXJSb290U3ltYm9sOiBzeW1ib2wpOiB2b2lkIHtcblx0Q09OVkVSVEVSX1JPT1RfU1lNQk9MID0gY29udmVydGVyUm9vdFN5bWJvbDtcbn1cblxuLyoqXG4gKiBHZW5lcmF0ZSB0aGUgY29ycmVzcG9uZGluZyBhbm5vdGF0aW9uVmFsdWUgZm9yIGEgZ2l2ZW4gYW5ub3RhdGlvbiBhbm5vdGF0aW9uVmFsdWUuXG4gKiBAdGVtcGxhdGUgVCBUaGUgdGFyZ2V0IHR5cGVcbiAqIEBwYXJhbSBhbm5vdGF0aW9uVmFsdWUgVGhlIHNvdXJjZSBhbm5vdGF0aW9uIGFubm90YXRpb25WYWx1ZVxuICogQHBhcmFtIHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMgVGhlIHBhdGggZnJvbSB0aGUgcm9vdCBlbnRpdHkgc2V0XG4gKiBAcGFyYW0gZGVmYXVsdFZhbHVlIERlZmF1bHQgdmFsdWUgaWYgdGhlIGFubm90YXRpb25WYWx1ZSBpcyB1bmRlZmluZWRcbiAqIEBwYXJhbSBwYXRoVmlzaXRvciBBIGZ1bmN0aW9uIHRvIG1vZGlmeSB0aGUgcmVzdWx0aW5nIHBhdGhcbiAqIEByZXR1cm5zIFRoZSBhbm5vdGF0aW9uVmFsdWUgZXF1aXZhbGVudCB0byB0aGF0IGFubm90YXRpb24gYW5ub3RhdGlvblZhbHVlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb248VCBleHRlbmRzIFByaW1pdGl2ZVR5cGU+KFxuXHRhbm5vdGF0aW9uVmFsdWU6IFByb3BlcnR5QW5ub3RhdGlvblZhbHVlPFQ+IHwgdW5kZWZpbmVkLFxuXHR2aXNpdGVkTmF2aWdhdGlvblBhdGhzOiBzdHJpbmdbXSA9IFtdLFxuXHRkZWZhdWx0VmFsdWU/OiBFeHByZXNzaW9uT3JQcmltaXRpdmU8VD4sXG5cdHBhdGhWaXNpdG9yPzogRnVuY3Rpb25cbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxQcmltaXRpdmVUeXBlQ2FzdDxUPj4ge1xuXHRsZXQgY29udmVydGVyUm9vdDogQ29udmVydGVkTWV0YWRhdGEgfCB1bmRlZmluZWQ7XG5cdGlmIChDT05WRVJURVJfUk9PVF9TWU1CT0wpIHtcblx0XHRjb252ZXJ0ZXJSb290ID0gKGFubm90YXRpb25WYWx1ZT8uW0NPTlZFUlRFUl9ST09UX1NZTUJPTCBhcyBuZXZlcl0gYXMgdW5rbm93biBhcyBGdW5jdGlvbik/LigpIGFzIENvbnZlcnRlZE1ldGFkYXRhIHwgdW5kZWZpbmVkO1xuXHR9XG5cblx0aWYgKGFubm90YXRpb25WYWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0cmV0dXJuIHdyYXBQcmltaXRpdmUoZGVmYXVsdFZhbHVlIGFzIFByaW1pdGl2ZVR5cGVDYXN0PFQ+KTtcblx0fVxuXHRhbm5vdGF0aW9uVmFsdWUgPSBhbm5vdGF0aW9uVmFsdWU/LnZhbHVlT2YoKSBhcyBQcm9wZXJ0eUFubm90YXRpb25WYWx1ZTxUPjtcblx0aWYgKCFpc0NvbXBsZXhBbm5vdGF0aW9uRXhwcmVzc2lvbihhbm5vdGF0aW9uVmFsdWUpKSB7XG5cdFx0cmV0dXJuIGNvbnN0YW50KGFubm90YXRpb25WYWx1ZSk7XG5cdH1cblxuXHRzd2l0Y2ggKGFubm90YXRpb25WYWx1ZS50eXBlKSB7XG5cdFx0Y2FzZSBcIlBhdGhcIjpcblx0XHRcdHJldHVybiBwYXRoSW5Nb2RlbChhbm5vdGF0aW9uVmFsdWUucGF0aCwgdW5kZWZpbmVkLCB2aXNpdGVkTmF2aWdhdGlvblBhdGhzLCBwYXRoVmlzaXRvcik7XG5cdFx0Y2FzZSBcIklmXCI6XG5cdFx0XHRyZXR1cm4gYW5ub3RhdGlvbklmRXhwcmVzc2lvbihcblx0XHRcdFx0YW5ub3RhdGlvblZhbHVlLiRJZixcblx0XHRcdFx0dmlzaXRlZE5hdmlnYXRpb25QYXRocyxcblx0XHRcdFx0cGF0aFZpc2l0b3IsXG5cdFx0XHRcdGNvbnZlcnRlclJvb3Rcblx0XHRcdCkgYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFByaW1pdGl2ZVR5cGVDYXN0PFQ+Pjtcblx0XHRjYXNlIFwiTm90XCI6XG5cdFx0XHRyZXR1cm4gbm90KFxuXHRcdFx0XHRwYXJzZUFubm90YXRpb25Db25kaXRpb24oYW5ub3RhdGlvblZhbHVlLiROb3QsIHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMsIHBhdGhWaXNpdG9yLCBjb252ZXJ0ZXJSb290KVxuXHRcdFx0KSBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248UHJpbWl0aXZlVHlwZUNhc3Q8VD4+O1xuXHRcdGNhc2UgXCJFcVwiOlxuXHRcdFx0cmV0dXJuIGVxdWFsKFxuXHRcdFx0XHRwYXJzZUFubm90YXRpb25Db25kaXRpb24oYW5ub3RhdGlvblZhbHVlLiRFcVswXSwgdmlzaXRlZE5hdmlnYXRpb25QYXRocywgcGF0aFZpc2l0b3IsIGNvbnZlcnRlclJvb3QpLFxuXHRcdFx0XHRwYXJzZUFubm90YXRpb25Db25kaXRpb24oYW5ub3RhdGlvblZhbHVlLiRFcVsxXSwgdmlzaXRlZE5hdmlnYXRpb25QYXRocywgcGF0aFZpc2l0b3IsIGNvbnZlcnRlclJvb3QpXG5cdFx0XHQpIGFzIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxQcmltaXRpdmVUeXBlQ2FzdDxUPj47XG5cdFx0Y2FzZSBcIk5lXCI6XG5cdFx0XHRyZXR1cm4gbm90RXF1YWwoXG5cdFx0XHRcdHBhcnNlQW5ub3RhdGlvbkNvbmRpdGlvbihhbm5vdGF0aW9uVmFsdWUuJE5lWzBdLCB2aXNpdGVkTmF2aWdhdGlvblBhdGhzLCBwYXRoVmlzaXRvciwgY29udmVydGVyUm9vdCksXG5cdFx0XHRcdHBhcnNlQW5ub3RhdGlvbkNvbmRpdGlvbihhbm5vdGF0aW9uVmFsdWUuJE5lWzFdLCB2aXNpdGVkTmF2aWdhdGlvblBhdGhzLCBwYXRoVmlzaXRvciwgY29udmVydGVyUm9vdClcblx0XHRcdCkgYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFByaW1pdGl2ZVR5cGVDYXN0PFQ+Pjtcblx0XHRjYXNlIFwiR3RcIjpcblx0XHRcdHJldHVybiBncmVhdGVyVGhhbihcblx0XHRcdFx0cGFyc2VBbm5vdGF0aW9uQ29uZGl0aW9uKGFubm90YXRpb25WYWx1ZS4kR3RbMF0sIHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMsIHBhdGhWaXNpdG9yLCBjb252ZXJ0ZXJSb290KSxcblx0XHRcdFx0cGFyc2VBbm5vdGF0aW9uQ29uZGl0aW9uKGFubm90YXRpb25WYWx1ZS4kR3RbMV0sIHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMsIHBhdGhWaXNpdG9yLCBjb252ZXJ0ZXJSb290KVxuXHRcdFx0KSBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248UHJpbWl0aXZlVHlwZUNhc3Q8VD4+O1xuXHRcdGNhc2UgXCJHZVwiOlxuXHRcdFx0cmV0dXJuIGdyZWF0ZXJPckVxdWFsKFxuXHRcdFx0XHRwYXJzZUFubm90YXRpb25Db25kaXRpb24oYW5ub3RhdGlvblZhbHVlLiRHZVswXSwgdmlzaXRlZE5hdmlnYXRpb25QYXRocywgcGF0aFZpc2l0b3IsIGNvbnZlcnRlclJvb3QpLFxuXHRcdFx0XHRwYXJzZUFubm90YXRpb25Db25kaXRpb24oYW5ub3RhdGlvblZhbHVlLiRHZVsxXSwgdmlzaXRlZE5hdmlnYXRpb25QYXRocywgcGF0aFZpc2l0b3IsIGNvbnZlcnRlclJvb3QpXG5cdFx0XHQpIGFzIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxQcmltaXRpdmVUeXBlQ2FzdDxUPj47XG5cdFx0Y2FzZSBcIkx0XCI6XG5cdFx0XHRyZXR1cm4gbGVzc1RoYW4oXG5cdFx0XHRcdHBhcnNlQW5ub3RhdGlvbkNvbmRpdGlvbihhbm5vdGF0aW9uVmFsdWUuJEx0WzBdLCB2aXNpdGVkTmF2aWdhdGlvblBhdGhzLCBwYXRoVmlzaXRvciwgY29udmVydGVyUm9vdCksXG5cdFx0XHRcdHBhcnNlQW5ub3RhdGlvbkNvbmRpdGlvbihhbm5vdGF0aW9uVmFsdWUuJEx0WzFdLCB2aXNpdGVkTmF2aWdhdGlvblBhdGhzLCBwYXRoVmlzaXRvciwgY29udmVydGVyUm9vdClcblx0XHRcdCkgYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFByaW1pdGl2ZVR5cGVDYXN0PFQ+Pjtcblx0XHRjYXNlIFwiTGVcIjpcblx0XHRcdHJldHVybiBsZXNzT3JFcXVhbChcblx0XHRcdFx0cGFyc2VBbm5vdGF0aW9uQ29uZGl0aW9uKGFubm90YXRpb25WYWx1ZS4kTGVbMF0sIHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMsIHBhdGhWaXNpdG9yLCBjb252ZXJ0ZXJSb290KSxcblx0XHRcdFx0cGFyc2VBbm5vdGF0aW9uQ29uZGl0aW9uKGFubm90YXRpb25WYWx1ZS4kTGVbMV0sIHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMsIHBhdGhWaXNpdG9yLCBjb252ZXJ0ZXJSb290KVxuXHRcdFx0KSBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248UHJpbWl0aXZlVHlwZUNhc3Q8VD4+O1xuXHRcdGNhc2UgXCJPclwiOlxuXHRcdFx0cmV0dXJuIG9yKFxuXHRcdFx0XHQuLi5hbm5vdGF0aW9uVmFsdWUuJE9yLm1hcChmdW5jdGlvbiAob3JDb25kaXRpb24pIHtcblx0XHRcdFx0XHRyZXR1cm4gcGFyc2VBbm5vdGF0aW9uQ29uZGl0aW9uPGJvb2xlYW4+KG9yQ29uZGl0aW9uLCB2aXNpdGVkTmF2aWdhdGlvblBhdGhzLCBwYXRoVmlzaXRvciwgY29udmVydGVyUm9vdCk7XG5cdFx0XHRcdH0pXG5cdFx0XHQpIGFzIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxQcmltaXRpdmVUeXBlQ2FzdDxUPj47XG5cdFx0Y2FzZSBcIkFuZFwiOlxuXHRcdFx0cmV0dXJuIGFuZChcblx0XHRcdFx0Li4uYW5ub3RhdGlvblZhbHVlLiRBbmQubWFwKGZ1bmN0aW9uIChhbmRDb25kaXRpb24pIHtcblx0XHRcdFx0XHRyZXR1cm4gcGFyc2VBbm5vdGF0aW9uQ29uZGl0aW9uPGJvb2xlYW4+KGFuZENvbmRpdGlvbiwgdmlzaXRlZE5hdmlnYXRpb25QYXRocywgcGF0aFZpc2l0b3IsIGNvbnZlcnRlclJvb3QpO1xuXHRcdFx0XHR9KVxuXHRcdFx0KSBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248UHJpbWl0aXZlVHlwZUNhc3Q8VD4+O1xuXHRcdGNhc2UgXCJJblwiOlxuXHRcdFx0cmV0dXJuIGNvbXBhcmlzb24oXG5cdFx0XHRcdFwiSW5cIixcblx0XHRcdFx0cGFyc2VBbm5vdGF0aW9uQ29uZGl0aW9uKGFubm90YXRpb25WYWx1ZS4kSW5bMF0sIHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMsIHBhdGhWaXNpdG9yLCBjb252ZXJ0ZXJSb290KSxcblx0XHRcdFx0cGFyc2VBbm5vdGF0aW9uQ29uZGl0aW9uKGFubm90YXRpb25WYWx1ZS4kSW5bMV0sIHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMsIHBhdGhWaXNpdG9yLCBjb252ZXJ0ZXJSb290KVxuXHRcdFx0KSBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248UHJpbWl0aXZlVHlwZUNhc3Q8VD4+O1xuXHRcdGNhc2UgXCJIYXNcIjpcblx0XHRcdHJldHVybiBjb21wYXJpc29uKFxuXHRcdFx0XHRcIkhhc1wiLFxuXHRcdFx0XHRwYXJzZUFubm90YXRpb25Db25kaXRpb24oYW5ub3RhdGlvblZhbHVlLiRIYXNbMF0sIHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMsIHBhdGhWaXNpdG9yLCBjb252ZXJ0ZXJSb290KSxcblx0XHRcdFx0cGFyc2VBbm5vdGF0aW9uQ29uZGl0aW9uKGFubm90YXRpb25WYWx1ZS4kSGFzWzFdLCB2aXNpdGVkTmF2aWdhdGlvblBhdGhzLCBwYXRoVmlzaXRvciwgY29udmVydGVyUm9vdClcblx0XHRcdCkgYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFByaW1pdGl2ZVR5cGVDYXN0PFQ+Pjtcblx0XHRjYXNlIFwiQWRkXCI6XG5cdFx0XHRyZXR1cm4gYWRkKFxuXHRcdFx0XHRwYXJzZUFubm90YXRpb25Db25kaXRpb24oYW5ub3RhdGlvblZhbHVlLiRBZGRbMF0sIHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMsIHBhdGhWaXNpdG9yLCBjb252ZXJ0ZXJSb290KSxcblx0XHRcdFx0cGFyc2VBbm5vdGF0aW9uQ29uZGl0aW9uKGFubm90YXRpb25WYWx1ZS4kQWRkWzFdLCB2aXNpdGVkTmF2aWdhdGlvblBhdGhzLCBwYXRoVmlzaXRvciwgY29udmVydGVyUm9vdClcblx0XHRcdCkgYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFByaW1pdGl2ZVR5cGVDYXN0PFQ+Pjtcblx0XHRjYXNlIFwiU3ViXCI6XG5cdFx0XHRyZXR1cm4gc3VidHJhY3QoXG5cdFx0XHRcdHBhcnNlQW5ub3RhdGlvbkNvbmRpdGlvbihhbm5vdGF0aW9uVmFsdWUuJFN1YlswXSwgdmlzaXRlZE5hdmlnYXRpb25QYXRocywgcGF0aFZpc2l0b3IsIGNvbnZlcnRlclJvb3QpLFxuXHRcdFx0XHRwYXJzZUFubm90YXRpb25Db25kaXRpb24oYW5ub3RhdGlvblZhbHVlLiRTdWJbMV0sIHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMsIHBhdGhWaXNpdG9yLCBjb252ZXJ0ZXJSb290KVxuXHRcdFx0KSBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248UHJpbWl0aXZlVHlwZUNhc3Q8VD4+O1xuXHRcdGNhc2UgXCJNdWxcIjpcblx0XHRcdHJldHVybiBtdWx0aXBseShcblx0XHRcdFx0cGFyc2VBbm5vdGF0aW9uQ29uZGl0aW9uKGFubm90YXRpb25WYWx1ZS4kTXVsWzBdLCB2aXNpdGVkTmF2aWdhdGlvblBhdGhzLCBwYXRoVmlzaXRvciwgY29udmVydGVyUm9vdCksXG5cdFx0XHRcdHBhcnNlQW5ub3RhdGlvbkNvbmRpdGlvbihhbm5vdGF0aW9uVmFsdWUuJE11bFsxXSwgdmlzaXRlZE5hdmlnYXRpb25QYXRocywgcGF0aFZpc2l0b3IsIGNvbnZlcnRlclJvb3QpXG5cdFx0XHQpIGFzIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxQcmltaXRpdmVUeXBlQ2FzdDxUPj47XG5cdFx0Y2FzZSBcIkRpdlwiOlxuXHRcdFx0cmV0dXJuIGZsb29yKFxuXHRcdFx0XHRkaXZpZGUoXG5cdFx0XHRcdFx0cGFyc2VBbm5vdGF0aW9uQ29uZGl0aW9uKGFubm90YXRpb25WYWx1ZS4kRGl2WzBdLCB2aXNpdGVkTmF2aWdhdGlvblBhdGhzLCBwYXRoVmlzaXRvciwgY29udmVydGVyUm9vdCksXG5cdFx0XHRcdFx0cGFyc2VBbm5vdGF0aW9uQ29uZGl0aW9uKGFubm90YXRpb25WYWx1ZS4kRGl2WzFdLCB2aXNpdGVkTmF2aWdhdGlvblBhdGhzLCBwYXRoVmlzaXRvciwgY29udmVydGVyUm9vdClcblx0XHRcdFx0KVxuXHRcdFx0KSBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248UHJpbWl0aXZlVHlwZUNhc3Q8VD4+O1xuXHRcdGNhc2UgXCJEaXZCeVwiOlxuXHRcdFx0cmV0dXJuIGRpdmlkZShcblx0XHRcdFx0cGFyc2VBbm5vdGF0aW9uQ29uZGl0aW9uKGFubm90YXRpb25WYWx1ZS4kRGl2QnlbMF0sIHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMsIHBhdGhWaXNpdG9yLCBjb252ZXJ0ZXJSb290KSxcblx0XHRcdFx0cGFyc2VBbm5vdGF0aW9uQ29uZGl0aW9uKGFubm90YXRpb25WYWx1ZS4kRGl2QnlbMV0sIHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMsIHBhdGhWaXNpdG9yLCBjb252ZXJ0ZXJSb290KVxuXHRcdFx0KSBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248UHJpbWl0aXZlVHlwZUNhc3Q8VD4+O1xuXHRcdGNhc2UgXCJNb2RcIjpcblx0XHRcdHJldHVybiBtb2R1bG8oXG5cdFx0XHRcdHBhcnNlQW5ub3RhdGlvbkNvbmRpdGlvbihhbm5vdGF0aW9uVmFsdWUuJE1vZFswXSwgdmlzaXRlZE5hdmlnYXRpb25QYXRocywgcGF0aFZpc2l0b3IsIGNvbnZlcnRlclJvb3QpLFxuXHRcdFx0XHRwYXJzZUFubm90YXRpb25Db25kaXRpb24oYW5ub3RhdGlvblZhbHVlLiRNb2RbMV0sIHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMsIHBhdGhWaXNpdG9yLCBjb252ZXJ0ZXJSb290KVxuXHRcdFx0KSBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248UHJpbWl0aXZlVHlwZUNhc3Q8VD4+O1xuXHRcdGNhc2UgXCJOZWdcIjpcblx0XHRcdHJldHVybiBuZWdhdGUoXG5cdFx0XHRcdHBhcnNlQW5ub3RhdGlvbkNvbmRpdGlvbihhbm5vdGF0aW9uVmFsdWUuJE5lZ1swXSwgdmlzaXRlZE5hdmlnYXRpb25QYXRocywgcGF0aFZpc2l0b3IsIGNvbnZlcnRlclJvb3QpXG5cdFx0XHQpIGFzIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxQcmltaXRpdmVUeXBlQ2FzdDxUPj47XG5cdFx0Y2FzZSBcIkFwcGx5XCI6XG5cdFx0XHRyZXR1cm4gYW5ub3RhdGlvbkFwcGx5RXhwcmVzc2lvbihcblx0XHRcdFx0YW5ub3RhdGlvblZhbHVlIGFzIEFwcGx5QW5ub3RhdGlvbkV4cHJlc3Npb248c3RyaW5nPixcblx0XHRcdFx0dmlzaXRlZE5hdmlnYXRpb25QYXRocyxcblx0XHRcdFx0cGF0aFZpc2l0b3Jcblx0XHRcdCkgYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFByaW1pdGl2ZVR5cGVDYXN0PFQ+Pjtcblx0XHRjYXNlIFwiQ29uc3RhbnRcIjpcblx0XHRcdC8vIE5vdCBhIHJlYWwgY2FzZSBidXQgdGhlIHR5cGUgc3lzdGVtIG5lZWRzIGl0XG5cdFx0XHRyZXR1cm4gY29uc3RhbnQoYW5ub3RhdGlvblZhbHVlLnZhbHVlIGFzIFByaW1pdGl2ZVR5cGVDYXN0PFQ+KTtcblx0fVxuXHRyZXR1cm4gdW5yZXNvbHZhYmxlRXhwcmVzc2lvbjtcbn1cblxuLyoqXG4gKiBQYXJzZSB0aGUgYW5ub3RhdGlvbiBjb25kaXRpb24gaW50byBhbiBleHByZXNzaW9uLlxuICogQHRlbXBsYXRlIFQgVGhlIHRhcmdldCB0eXBlXG4gKiBAcGFyYW0gYW5ub3RhdGlvblZhbHVlIFRoZSBjb25kaXRpb24gb3IgdmFsdWUgZnJvbSB0aGUgYW5ub3RhdGlvblxuICogQHBhcmFtIHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMgVGhlIHBhdGggZnJvbSB0aGUgcm9vdCBlbnRpdHkgc2V0XG4gKiBAcGFyYW0gcGF0aFZpc2l0b3IgQSBmdW5jdGlvbiB0byBtb2RpZnkgdGhlIHJlc3VsdGluZyBwYXRoXG4gKiBAcGFyYW0gY29udmVydGVyUm9vdCBUaGUgcm9vdCBjb252ZXJ0ZWQgbWV0YWRhdGFcbiAqIEByZXR1cm5zIEFuIGVxdWl2YWxlbnQgZXhwcmVzc2lvblxuICovXG5mdW5jdGlvbiBwYXJzZUFubm90YXRpb25Db25kaXRpb248VCBleHRlbmRzIFByaW1pdGl2ZVR5cGU+KFxuXHRhbm5vdGF0aW9uVmFsdWU6IENvbmRpdGlvbmFsQ2hlY2tPclZhbHVlLFxuXHR2aXNpdGVkTmF2aWdhdGlvblBhdGhzOiBzdHJpbmdbXSA9IFtdLFxuXHRwYXRoVmlzaXRvcj86IEZ1bmN0aW9uLFxuXHRjb252ZXJ0ZXJSb290PzogQ29udmVydGVkTWV0YWRhdGFcbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxUPiB7XG5cdGlmIChhbm5vdGF0aW9uVmFsdWUgPT09IG51bGwgfHwgdHlwZW9mIGFubm90YXRpb25WYWx1ZSAhPT0gXCJvYmplY3RcIikge1xuXHRcdHJldHVybiBjb25zdGFudChhbm5vdGF0aW9uVmFsdWUgYXMgVCk7XG5cdH0gZWxzZSBpZiAoYW5ub3RhdGlvblZhbHVlLmhhc093blByb3BlcnR5KFwiJE9yXCIpKSB7XG5cdFx0cmV0dXJuIG9yKFxuXHRcdFx0Li4uKChhbm5vdGF0aW9uVmFsdWUgYXMgT3JDb25kaXRpb25hbEV4cHJlc3Npb24pLiRPci5tYXAoZnVuY3Rpb24gKG9yQ29uZGl0aW9uKSB7XG5cdFx0XHRcdHJldHVybiBwYXJzZUFubm90YXRpb25Db25kaXRpb24ob3JDb25kaXRpb24sIHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMsIHBhdGhWaXNpdG9yLCBjb252ZXJ0ZXJSb290KTtcblx0XHRcdH0pIGFzIHVua25vd24gYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+W10pXG5cdFx0KSBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248VD47XG5cdH0gZWxzZSBpZiAoYW5ub3RhdGlvblZhbHVlLmhhc093blByb3BlcnR5KFwiJEFuZFwiKSkge1xuXHRcdHJldHVybiBhbmQoXG5cdFx0XHQuLi4oKGFubm90YXRpb25WYWx1ZSBhcyBBbmRDb25kaXRpb25hbEV4cHJlc3Npb24pLiRBbmQubWFwKGZ1bmN0aW9uIChhbmRDb25kaXRpb24pIHtcblx0XHRcdFx0cmV0dXJuIHBhcnNlQW5ub3RhdGlvbkNvbmRpdGlvbihhbmRDb25kaXRpb24sIHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMsIHBhdGhWaXNpdG9yLCBjb252ZXJ0ZXJSb290KTtcblx0XHRcdH0pIGFzIHVua25vd24gYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+W10pXG5cdFx0KSBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248VD47XG5cdH0gZWxzZSBpZiAoYW5ub3RhdGlvblZhbHVlLmhhc093blByb3BlcnR5KFwiJE5vdFwiKSkge1xuXHRcdHJldHVybiBub3QoXG5cdFx0XHRwYXJzZUFubm90YXRpb25Db25kaXRpb24oKGFubm90YXRpb25WYWx1ZSBhcyBOb3RDb25kaXRpb25hbEV4cHJlc3Npb24pLiROb3QsIHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMsIHBhdGhWaXNpdG9yLCBjb252ZXJ0ZXJSb290KVxuXHRcdCkgYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFQ+O1xuXHR9IGVsc2UgaWYgKGFubm90YXRpb25WYWx1ZS5oYXNPd25Qcm9wZXJ0eShcIiRFcVwiKSkge1xuXHRcdHJldHVybiBlcXVhbChcblx0XHRcdHBhcnNlQW5ub3RhdGlvbkNvbmRpdGlvbihcblx0XHRcdFx0KGFubm90YXRpb25WYWx1ZSBhcyBFcUNvbmRpdGlvbmFsRXhwcmVzc2lvbikuJEVxWzBdLFxuXHRcdFx0XHR2aXNpdGVkTmF2aWdhdGlvblBhdGhzLFxuXHRcdFx0XHRwYXRoVmlzaXRvcixcblx0XHRcdFx0Y29udmVydGVyUm9vdFxuXHRcdFx0KSxcblx0XHRcdHBhcnNlQW5ub3RhdGlvbkNvbmRpdGlvbihcblx0XHRcdFx0KGFubm90YXRpb25WYWx1ZSBhcyBFcUNvbmRpdGlvbmFsRXhwcmVzc2lvbikuJEVxWzFdLFxuXHRcdFx0XHR2aXNpdGVkTmF2aWdhdGlvblBhdGhzLFxuXHRcdFx0XHRwYXRoVmlzaXRvcixcblx0XHRcdFx0Y29udmVydGVyUm9vdFxuXHRcdFx0KVxuXHRcdCkgYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFQ+O1xuXHR9IGVsc2UgaWYgKGFubm90YXRpb25WYWx1ZS5oYXNPd25Qcm9wZXJ0eShcIiROZVwiKSkge1xuXHRcdHJldHVybiBub3RFcXVhbChcblx0XHRcdHBhcnNlQW5ub3RhdGlvbkNvbmRpdGlvbihcblx0XHRcdFx0KGFubm90YXRpb25WYWx1ZSBhcyBOZUNvbmRpdGlvbmFsRXhwcmVzc2lvbikuJE5lWzBdLFxuXHRcdFx0XHR2aXNpdGVkTmF2aWdhdGlvblBhdGhzLFxuXHRcdFx0XHRwYXRoVmlzaXRvcixcblx0XHRcdFx0Y29udmVydGVyUm9vdFxuXHRcdFx0KSxcblx0XHRcdHBhcnNlQW5ub3RhdGlvbkNvbmRpdGlvbihcblx0XHRcdFx0KGFubm90YXRpb25WYWx1ZSBhcyBOZUNvbmRpdGlvbmFsRXhwcmVzc2lvbikuJE5lWzFdLFxuXHRcdFx0XHR2aXNpdGVkTmF2aWdhdGlvblBhdGhzLFxuXHRcdFx0XHRwYXRoVmlzaXRvcixcblx0XHRcdFx0Y29udmVydGVyUm9vdFxuXHRcdFx0KVxuXHRcdCkgYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFQ+O1xuXHR9IGVsc2UgaWYgKGFubm90YXRpb25WYWx1ZS5oYXNPd25Qcm9wZXJ0eShcIiRHdFwiKSkge1xuXHRcdHJldHVybiBncmVhdGVyVGhhbihcblx0XHRcdHBhcnNlQW5ub3RhdGlvbkNvbmRpdGlvbihcblx0XHRcdFx0KGFubm90YXRpb25WYWx1ZSBhcyBHdENvbmRpdGlvbmFsRXhwcmVzc2lvbikuJEd0WzBdLFxuXHRcdFx0XHR2aXNpdGVkTmF2aWdhdGlvblBhdGhzLFxuXHRcdFx0XHRwYXRoVmlzaXRvcixcblx0XHRcdFx0Y29udmVydGVyUm9vdFxuXHRcdFx0KSxcblx0XHRcdHBhcnNlQW5ub3RhdGlvbkNvbmRpdGlvbihcblx0XHRcdFx0KGFubm90YXRpb25WYWx1ZSBhcyBHdENvbmRpdGlvbmFsRXhwcmVzc2lvbikuJEd0WzFdLFxuXHRcdFx0XHR2aXNpdGVkTmF2aWdhdGlvblBhdGhzLFxuXHRcdFx0XHRwYXRoVmlzaXRvcixcblx0XHRcdFx0Y29udmVydGVyUm9vdFxuXHRcdFx0KVxuXHRcdCkgYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFQ+O1xuXHR9IGVsc2UgaWYgKGFubm90YXRpb25WYWx1ZS5oYXNPd25Qcm9wZXJ0eShcIiRHZVwiKSkge1xuXHRcdHJldHVybiBncmVhdGVyT3JFcXVhbChcblx0XHRcdHBhcnNlQW5ub3RhdGlvbkNvbmRpdGlvbihcblx0XHRcdFx0KGFubm90YXRpb25WYWx1ZSBhcyBHZUNvbmRpdGlvbmFsRXhwcmVzc2lvbikuJEdlWzBdLFxuXHRcdFx0XHR2aXNpdGVkTmF2aWdhdGlvblBhdGhzLFxuXHRcdFx0XHRwYXRoVmlzaXRvcixcblx0XHRcdFx0Y29udmVydGVyUm9vdFxuXHRcdFx0KSxcblx0XHRcdHBhcnNlQW5ub3RhdGlvbkNvbmRpdGlvbihcblx0XHRcdFx0KGFubm90YXRpb25WYWx1ZSBhcyBHZUNvbmRpdGlvbmFsRXhwcmVzc2lvbikuJEdlWzFdLFxuXHRcdFx0XHR2aXNpdGVkTmF2aWdhdGlvblBhdGhzLFxuXHRcdFx0XHRwYXRoVmlzaXRvcixcblx0XHRcdFx0Y29udmVydGVyUm9vdFxuXHRcdFx0KVxuXHRcdCkgYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFQ+O1xuXHR9IGVsc2UgaWYgKGFubm90YXRpb25WYWx1ZS5oYXNPd25Qcm9wZXJ0eShcIiRMdFwiKSkge1xuXHRcdHJldHVybiBsZXNzVGhhbihcblx0XHRcdHBhcnNlQW5ub3RhdGlvbkNvbmRpdGlvbihcblx0XHRcdFx0KGFubm90YXRpb25WYWx1ZSBhcyBMdENvbmRpdGlvbmFsRXhwcmVzc2lvbikuJEx0WzBdLFxuXHRcdFx0XHR2aXNpdGVkTmF2aWdhdGlvblBhdGhzLFxuXHRcdFx0XHRwYXRoVmlzaXRvcixcblx0XHRcdFx0Y29udmVydGVyUm9vdFxuXHRcdFx0KSxcblx0XHRcdHBhcnNlQW5ub3RhdGlvbkNvbmRpdGlvbihcblx0XHRcdFx0KGFubm90YXRpb25WYWx1ZSBhcyBMdENvbmRpdGlvbmFsRXhwcmVzc2lvbikuJEx0WzFdLFxuXHRcdFx0XHR2aXNpdGVkTmF2aWdhdGlvblBhdGhzLFxuXHRcdFx0XHRwYXRoVmlzaXRvcixcblx0XHRcdFx0Y29udmVydGVyUm9vdFxuXHRcdFx0KVxuXHRcdCkgYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFQ+O1xuXHR9IGVsc2UgaWYgKGFubm90YXRpb25WYWx1ZS5oYXNPd25Qcm9wZXJ0eShcIiRMZVwiKSkge1xuXHRcdHJldHVybiBsZXNzT3JFcXVhbChcblx0XHRcdHBhcnNlQW5ub3RhdGlvbkNvbmRpdGlvbihcblx0XHRcdFx0KGFubm90YXRpb25WYWx1ZSBhcyBMZUNvbmRpdGlvbmFsRXhwcmVzc2lvbikuJExlWzBdLFxuXHRcdFx0XHR2aXNpdGVkTmF2aWdhdGlvblBhdGhzLFxuXHRcdFx0XHRwYXRoVmlzaXRvcixcblx0XHRcdFx0Y29udmVydGVyUm9vdFxuXHRcdFx0KSxcblx0XHRcdHBhcnNlQW5ub3RhdGlvbkNvbmRpdGlvbihcblx0XHRcdFx0KGFubm90YXRpb25WYWx1ZSBhcyBMZUNvbmRpdGlvbmFsRXhwcmVzc2lvbikuJExlWzFdLFxuXHRcdFx0XHR2aXNpdGVkTmF2aWdhdGlvblBhdGhzLFxuXHRcdFx0XHRwYXRoVmlzaXRvcixcblx0XHRcdFx0Y29udmVydGVyUm9vdFxuXHRcdFx0KVxuXHRcdCkgYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFQ+O1xuXHR9IGVsc2UgaWYgKGFubm90YXRpb25WYWx1ZS5oYXNPd25Qcm9wZXJ0eShcIiRQYXRoXCIpKSB7XG5cdFx0cmV0dXJuIHBhdGhJbk1vZGVsKChhbm5vdGF0aW9uVmFsdWUgYXMgUGF0aENvbmRpdGlvbkV4cHJlc3Npb248VD4pLiRQYXRoLCB1bmRlZmluZWQsIHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMsIHBhdGhWaXNpdG9yKTtcblx0fSBlbHNlIGlmIChhbm5vdGF0aW9uVmFsdWUuaGFzT3duUHJvcGVydHkoXCIkQXBwbHlcIikpIHtcblx0XHRyZXR1cm4gZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKFxuXHRcdFx0e1xuXHRcdFx0XHR0eXBlOiBcIkFwcGx5XCIsXG5cdFx0XHRcdCRGdW5jdGlvbjogKGFubm90YXRpb25WYWx1ZSBhcyB7ICRGdW5jdGlvbj86IHN0cmluZyB9KS4kRnVuY3Rpb24sXG5cdFx0XHRcdCRBcHBseTogKGFubm90YXRpb25WYWx1ZSBhcyB7ICRBcHBseT86IHVua25vd24gfSkuJEFwcGx5XG5cdFx0XHR9IGFzIEFwcGx5QW5ub3RhdGlvbkV4cHJlc3Npb248VD4sXG5cdFx0XHR2aXNpdGVkTmF2aWdhdGlvblBhdGhzLFxuXHRcdFx0dW5kZWZpbmVkLFxuXHRcdFx0cGF0aFZpc2l0b3Jcblx0XHQpIGFzIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxUPjtcblx0fSBlbHNlIGlmIChhbm5vdGF0aW9uVmFsdWUuaGFzT3duUHJvcGVydHkoXCIkSWZcIikpIHtcblx0XHRyZXR1cm4gZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKFxuXHRcdFx0e1xuXHRcdFx0XHR0eXBlOiBcIklmXCIsXG5cdFx0XHRcdCRJZjogKGFubm90YXRpb25WYWx1ZSBhcyB7ICRJZj86IHVua25vd24gfSkuJElmXG5cdFx0XHR9IGFzIElmQW5ub3RhdGlvbkV4cHJlc3Npb248VD4sXG5cdFx0XHR2aXNpdGVkTmF2aWdhdGlvblBhdGhzLFxuXHRcdFx0dW5kZWZpbmVkLFxuXHRcdFx0cGF0aFZpc2l0b3Jcblx0XHQpIGFzIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxUPjtcblx0fSBlbHNlIGlmIChhbm5vdGF0aW9uVmFsdWUuaGFzT3duUHJvcGVydHkoXCIkRW51bU1lbWJlclwiKSkge1xuXHRcdHJldHVybiBjb25zdGFudChyZXNvbHZlRW51bVZhbHVlKChhbm5vdGF0aW9uVmFsdWUgYXMgeyAkRW51bU1lbWJlcj86IHN0cmluZyB9KS4kRW51bU1lbWJlciwgY29udmVydGVyUm9vdCkgYXMgVCk7XG5cdH0gZWxzZSBpZiAoYW5ub3RhdGlvblZhbHVlLmhhc093blByb3BlcnR5KFwiJEluXCIpKSB7XG5cdFx0cmV0dXJuIGNvbXBhcmlzb24oXG5cdFx0XHRcIkluXCIsXG5cdFx0XHRwYXJzZUFubm90YXRpb25Db25kaXRpb24oXG5cdFx0XHRcdChhbm5vdGF0aW9uVmFsdWUgYXMgSW5Db25kaXRpb25hbEV4cHJlc3Npb24pLiRJblswXSxcblx0XHRcdFx0dmlzaXRlZE5hdmlnYXRpb25QYXRocyxcblx0XHRcdFx0cGF0aFZpc2l0b3IsXG5cdFx0XHRcdGNvbnZlcnRlclJvb3Rcblx0XHRcdCksXG5cdFx0XHRwYXJzZUFubm90YXRpb25Db25kaXRpb24oXG5cdFx0XHRcdChhbm5vdGF0aW9uVmFsdWUgYXMgSW5Db25kaXRpb25hbEV4cHJlc3Npb24pLiRJblsxXSxcblx0XHRcdFx0dmlzaXRlZE5hdmlnYXRpb25QYXRocyxcblx0XHRcdFx0cGF0aFZpc2l0b3IsXG5cdFx0XHRcdGNvbnZlcnRlclJvb3Rcblx0XHRcdClcblx0XHQpIGFzIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxUPjtcblx0fSBlbHNlIGlmIChhbm5vdGF0aW9uVmFsdWUuaGFzT3duUHJvcGVydHkoXCIkSGFzXCIpKSB7XG5cdFx0cmV0dXJuIGNvbXBhcmlzb24oXG5cdFx0XHRcIkhhc1wiLFxuXHRcdFx0cGFyc2VBbm5vdGF0aW9uQ29uZGl0aW9uKFxuXHRcdFx0XHQoYW5ub3RhdGlvblZhbHVlIGFzIEhhc0NvbmRpdGlvbmFsRXhwcmVzc2lvbikuJEhhc1swXSxcblx0XHRcdFx0dmlzaXRlZE5hdmlnYXRpb25QYXRocyxcblx0XHRcdFx0cGF0aFZpc2l0b3IsXG5cdFx0XHRcdGNvbnZlcnRlclJvb3Rcblx0XHRcdCksXG5cdFx0XHRwYXJzZUFubm90YXRpb25Db25kaXRpb24oXG5cdFx0XHRcdChhbm5vdGF0aW9uVmFsdWUgYXMgSGFzQ29uZGl0aW9uYWxFeHByZXNzaW9uKS4kSGFzWzFdLFxuXHRcdFx0XHR2aXNpdGVkTmF2aWdhdGlvblBhdGhzLFxuXHRcdFx0XHRwYXRoVmlzaXRvcixcblx0XHRcdFx0Y29udmVydGVyUm9vdFxuXHRcdFx0KVxuXHRcdCkgYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFQ+O1xuXHR9IGVsc2UgaWYgKGFubm90YXRpb25WYWx1ZS5oYXNPd25Qcm9wZXJ0eShcIiRBZGRcIikpIHtcblx0XHRyZXR1cm4gYWRkKFxuXHRcdFx0cGFyc2VBbm5vdGF0aW9uQ29uZGl0aW9uKFxuXHRcdFx0XHQoYW5ub3RhdGlvblZhbHVlIGFzIEFkZENvbmRpdGlvbmFsRXhwcmVzc2lvbikuJEFkZFswXSxcblx0XHRcdFx0dmlzaXRlZE5hdmlnYXRpb25QYXRocyxcblx0XHRcdFx0cGF0aFZpc2l0b3IsXG5cdFx0XHRcdGNvbnZlcnRlclJvb3Rcblx0XHRcdCksXG5cdFx0XHRwYXJzZUFubm90YXRpb25Db25kaXRpb24oXG5cdFx0XHRcdChhbm5vdGF0aW9uVmFsdWUgYXMgQWRkQ29uZGl0aW9uYWxFeHByZXNzaW9uKS4kQWRkWzFdLFxuXHRcdFx0XHR2aXNpdGVkTmF2aWdhdGlvblBhdGhzLFxuXHRcdFx0XHRwYXRoVmlzaXRvcixcblx0XHRcdFx0Y29udmVydGVyUm9vdFxuXHRcdFx0KVxuXHRcdCkgYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFQ+O1xuXHR9IGVsc2UgaWYgKGFubm90YXRpb25WYWx1ZS5oYXNPd25Qcm9wZXJ0eShcIiRTdWJcIikpIHtcblx0XHRyZXR1cm4gc3VidHJhY3QoXG5cdFx0XHRwYXJzZUFubm90YXRpb25Db25kaXRpb24oXG5cdFx0XHRcdChhbm5vdGF0aW9uVmFsdWUgYXMgU3ViQ29uZGl0aW9uYWxFeHByZXNzaW9uKS4kU3ViWzBdLFxuXHRcdFx0XHR2aXNpdGVkTmF2aWdhdGlvblBhdGhzLFxuXHRcdFx0XHRwYXRoVmlzaXRvcixcblx0XHRcdFx0Y29udmVydGVyUm9vdFxuXHRcdFx0KSxcblx0XHRcdHBhcnNlQW5ub3RhdGlvbkNvbmRpdGlvbihcblx0XHRcdFx0KGFubm90YXRpb25WYWx1ZSBhcyBTdWJDb25kaXRpb25hbEV4cHJlc3Npb24pLiRTdWJbMV0sXG5cdFx0XHRcdHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMsXG5cdFx0XHRcdHBhdGhWaXNpdG9yLFxuXHRcdFx0XHRjb252ZXJ0ZXJSb290XG5cdFx0XHQpXG5cdFx0KSBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248VD47XG5cdH0gZWxzZSBpZiAoYW5ub3RhdGlvblZhbHVlLmhhc093blByb3BlcnR5KFwiJE11bFwiKSkge1xuXHRcdHJldHVybiBtdWx0aXBseShcblx0XHRcdHBhcnNlQW5ub3RhdGlvbkNvbmRpdGlvbihcblx0XHRcdFx0KGFubm90YXRpb25WYWx1ZSBhcyBNdWxDb25kaXRpb25hbEV4cHJlc3Npb24pLiRNdWxbMF0sXG5cdFx0XHRcdHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMsXG5cdFx0XHRcdHBhdGhWaXNpdG9yLFxuXHRcdFx0XHRjb252ZXJ0ZXJSb290XG5cdFx0XHQpLFxuXHRcdFx0cGFyc2VBbm5vdGF0aW9uQ29uZGl0aW9uKFxuXHRcdFx0XHQoYW5ub3RhdGlvblZhbHVlIGFzIE11bENvbmRpdGlvbmFsRXhwcmVzc2lvbikuJE11bFsxXSxcblx0XHRcdFx0dmlzaXRlZE5hdmlnYXRpb25QYXRocyxcblx0XHRcdFx0cGF0aFZpc2l0b3IsXG5cdFx0XHRcdGNvbnZlcnRlclJvb3Rcblx0XHRcdClcblx0XHQpIGFzIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxUPjtcblx0fSBlbHNlIGlmIChhbm5vdGF0aW9uVmFsdWUuaGFzT3duUHJvcGVydHkoXCIkRGl2XCIpKSB7XG5cdFx0cmV0dXJuIGZsb29yKFxuXHRcdFx0ZGl2aWRlKFxuXHRcdFx0XHRwYXJzZUFubm90YXRpb25Db25kaXRpb24oXG5cdFx0XHRcdFx0KGFubm90YXRpb25WYWx1ZSBhcyBEaXZDb25kaXRpb25hbEV4cHJlc3Npb24pLiREaXZbMF0sXG5cdFx0XHRcdFx0dmlzaXRlZE5hdmlnYXRpb25QYXRocyxcblx0XHRcdFx0XHRwYXRoVmlzaXRvcixcblx0XHRcdFx0XHRjb252ZXJ0ZXJSb290XG5cdFx0XHRcdCksXG5cdFx0XHRcdHBhcnNlQW5ub3RhdGlvbkNvbmRpdGlvbihcblx0XHRcdFx0XHQoYW5ub3RhdGlvblZhbHVlIGFzIERpdkNvbmRpdGlvbmFsRXhwcmVzc2lvbikuJERpdlsxXSxcblx0XHRcdFx0XHR2aXNpdGVkTmF2aWdhdGlvblBhdGhzLFxuXHRcdFx0XHRcdHBhdGhWaXNpdG9yLFxuXHRcdFx0XHRcdGNvbnZlcnRlclJvb3Rcblx0XHRcdFx0KVxuXHRcdFx0KVxuXHRcdCkgYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFQ+O1xuXHR9IGVsc2UgaWYgKGFubm90YXRpb25WYWx1ZS5oYXNPd25Qcm9wZXJ0eShcIiREaXZCeVwiKSkge1xuXHRcdHJldHVybiBkaXZpZGUoXG5cdFx0XHRwYXJzZUFubm90YXRpb25Db25kaXRpb24oXG5cdFx0XHRcdChhbm5vdGF0aW9uVmFsdWUgYXMgRGl2QnlDb25kaXRpb25hbEV4cHJlc3Npb24pLiREaXZCeVswXSxcblx0XHRcdFx0dmlzaXRlZE5hdmlnYXRpb25QYXRocyxcblx0XHRcdFx0cGF0aFZpc2l0b3IsXG5cdFx0XHRcdGNvbnZlcnRlclJvb3Rcblx0XHRcdCksXG5cdFx0XHRwYXJzZUFubm90YXRpb25Db25kaXRpb24oXG5cdFx0XHRcdChhbm5vdGF0aW9uVmFsdWUgYXMgRGl2QnlDb25kaXRpb25hbEV4cHJlc3Npb24pLiREaXZCeVsxXSxcblx0XHRcdFx0dmlzaXRlZE5hdmlnYXRpb25QYXRocyxcblx0XHRcdFx0cGF0aFZpc2l0b3IsXG5cdFx0XHRcdGNvbnZlcnRlclJvb3Rcblx0XHRcdClcblx0XHQpIGFzIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxUPjtcblx0fSBlbHNlIGlmIChhbm5vdGF0aW9uVmFsdWUuaGFzT3duUHJvcGVydHkoXCIkTW9kXCIpKSB7XG5cdFx0cmV0dXJuIG1vZHVsbyhcblx0XHRcdHBhcnNlQW5ub3RhdGlvbkNvbmRpdGlvbihcblx0XHRcdFx0KGFubm90YXRpb25WYWx1ZSBhcyBNb2RDb25kaXRpb25hbEV4cHJlc3Npb24pLiRNb2RbMF0sXG5cdFx0XHRcdHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMsXG5cdFx0XHRcdHBhdGhWaXNpdG9yLFxuXHRcdFx0XHRjb252ZXJ0ZXJSb290XG5cdFx0XHQpLFxuXHRcdFx0cGFyc2VBbm5vdGF0aW9uQ29uZGl0aW9uKFxuXHRcdFx0XHQoYW5ub3RhdGlvblZhbHVlIGFzIE1vZENvbmRpdGlvbmFsRXhwcmVzc2lvbikuJE1vZFsxXSxcblx0XHRcdFx0dmlzaXRlZE5hdmlnYXRpb25QYXRocyxcblx0XHRcdFx0cGF0aFZpc2l0b3IsXG5cdFx0XHRcdGNvbnZlcnRlclJvb3Rcblx0XHRcdClcblx0XHQpIGFzIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxUPjtcblx0fSBlbHNlIGlmIChhbm5vdGF0aW9uVmFsdWUuaGFzT3duUHJvcGVydHkoXCIkTmVnXCIpKSB7XG5cdFx0cmV0dXJuIG5lZ2F0ZShcblx0XHRcdHBhcnNlQW5ub3RhdGlvbkNvbmRpdGlvbigoYW5ub3RhdGlvblZhbHVlIGFzIE5lZ0NvbmRpdGlvbmFsRXhwcmVzc2lvbikuJE5lZywgdmlzaXRlZE5hdmlnYXRpb25QYXRocywgcGF0aFZpc2l0b3IsIGNvbnZlcnRlclJvb3QpXG5cdFx0KSBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248VD47XG5cdH1cblx0cmV0dXJuIGNvbnN0YW50KGFubm90YXRpb25WYWx1ZSBhcyBUKTtcbn1cblxuLyoqXG4gKiBQcm9jZXNzIHRoZSB7SWZBbm5vdGF0aW9uRXhwcmVzc2lvblZhbHVlfSBpbnRvIGFuIGV4cHJlc3Npb24uXG4gKiBAdGVtcGxhdGUgVCBUaGUgdGFyZ2V0IHR5cGVcbiAqIEBwYXJhbSBhbm5vdGF0aW9uVmFsdWUgQW4gSWYgZXhwcmVzc2lvbiByZXR1cm5pbmcgdGhlIHR5cGUgVFxuICogQHBhcmFtIHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMgVGhlIHBhdGggZnJvbSB0aGUgcm9vdCBlbnRpdHkgc2V0XG4gKiBAcGFyYW0gcGF0aFZpc2l0b3IgQSBmdW5jdGlvbiB0byBtb2RpZnkgdGhlIHJlc3VsdGluZyBwYXRoXG4gKiBAcGFyYW0gY29udmVydGVyUm9vdCBUaGUgcm9vdCBjb252ZXJ0ZWQgbWV0YWRhdGFcbiAqIEByZXR1cm5zIFRoZSBlcXVpdmFsZW50IGlmRWxzZSBleHByZXNzaW9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhbm5vdGF0aW9uSWZFeHByZXNzaW9uPFQgZXh0ZW5kcyBQcmltaXRpdmVUeXBlPihcblx0YW5ub3RhdGlvblZhbHVlOiBJZkFubm90YXRpb25FeHByZXNzaW9uVmFsdWU8VD4sXG5cdHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHM6IHN0cmluZ1tdID0gW10sXG5cdHBhdGhWaXNpdG9yPzogRnVuY3Rpb24sXG5cdGNvbnZlcnRlclJvb3Q/OiBDb252ZXJ0ZWRNZXRhZGF0YVxuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFQ+IHtcblx0cmV0dXJuIGlmRWxzZShcblx0XHRwYXJzZUFubm90YXRpb25Db25kaXRpb24oYW5ub3RhdGlvblZhbHVlWzBdLCB2aXNpdGVkTmF2aWdhdGlvblBhdGhzLCBwYXRoVmlzaXRvciwgY29udmVydGVyUm9vdCksXG5cdFx0cGFyc2VBbm5vdGF0aW9uQ29uZGl0aW9uKGFubm90YXRpb25WYWx1ZVsxXSBhcyBDb25kaXRpb25hbENoZWNrT3JWYWx1ZSwgdmlzaXRlZE5hdmlnYXRpb25QYXRocywgcGF0aFZpc2l0b3IsIGNvbnZlcnRlclJvb3QpLFxuXHRcdHBhcnNlQW5ub3RhdGlvbkNvbmRpdGlvbihhbm5vdGF0aW9uVmFsdWVbMl0gYXMgQ29uZGl0aW9uYWxDaGVja09yVmFsdWUsIHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMsIHBhdGhWaXNpdG9yLCBjb252ZXJ0ZXJSb290KVxuXHQpO1xufVxuLy8gVGhpcyB0eXBlIGlzIG5vdCByZWN1cnNpdmVseSB0cmFuc2Zvcm1lZCBmcm9tIHRoZSBtZXRhbW9kZWwgY29udGVudCwgYXMgc3VjaCB3ZSBoYXZlIHNvbWUgdWdseSB0aGluZ3MgdGhlcmVcbnR5cGUgU3ViQXBwbHlFeHByZXNzaW9uRnJvbU1ldGFtb2RlbCA9IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuZnVuY3Rpb24gY29udmVydFN1YkFwcGx5UGFyYW1ldGVycyhhcHBseVBhcmFtOiBTdWJBcHBseUV4cHJlc3Npb25Gcm9tTWV0YW1vZGVsKTogU3ViQXBwbHlFeHByZXNzaW9uRnJvbU1ldGFtb2RlbCB8IFByaW1pdGl2ZVR5cGUge1xuXHRsZXQgYXBwbHlQYXJhbUNvbnZlcnRlZCA9IGFwcGx5UGFyYW07XG5cdGlmIChhcHBseVBhcmFtLmhhc093blByb3BlcnR5KFwiJFBhdGhcIikpIHtcblx0XHRhcHBseVBhcmFtQ29udmVydGVkID0ge1xuXHRcdFx0dHlwZTogXCJQYXRoXCIsXG5cdFx0XHRwYXRoOiBhcHBseVBhcmFtLiRQYXRoXG5cdFx0fSBhcyBQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb248c3RyaW5nPjtcblx0fSBlbHNlIGlmIChhcHBseVBhcmFtLmhhc093blByb3BlcnR5KFwiJElmXCIpKSB7XG5cdFx0YXBwbHlQYXJhbUNvbnZlcnRlZCA9IHtcblx0XHRcdHR5cGU6IFwiSWZcIixcblx0XHRcdCRJZjogYXBwbHlQYXJhbS4kSWZcblx0XHR9IGFzIElmQW5ub3RhdGlvbkV4cHJlc3Npb248c3RyaW5nPjtcblx0fSBlbHNlIGlmIChhcHBseVBhcmFtLmhhc093blByb3BlcnR5KFwiJEFwcGx5XCIpKSB7XG5cdFx0YXBwbHlQYXJhbUNvbnZlcnRlZCA9IHtcblx0XHRcdHR5cGU6IFwiQXBwbHlcIixcblx0XHRcdCRGdW5jdGlvbjogYXBwbHlQYXJhbS4kRnVuY3Rpb24sXG5cdFx0XHQkQXBwbHk6IGFwcGx5UGFyYW0uJEFwcGx5XG5cdFx0fSBhcyBBcHBseUFubm90YXRpb25FeHByZXNzaW9uPHN0cmluZz47XG5cdH1cblx0cmV0dXJuIGFwcGx5UGFyYW1Db252ZXJ0ZWQ7XG59XG5cbnR5cGUgT0RhdGFGdW5jdGlvbiA9IFwib2RhdGEuY29uY2F0XCIgfCBcIm9kYXRhLmZpbGxVcmlUZW1wbGF0ZVwiIHwgXCJvZGF0YS51cmlFbmNvZGVcIjtcbmV4cG9ydCBmdW5jdGlvbiBhbm5vdGF0aW9uQXBwbHlFeHByZXNzaW9uKFxuXHRhcHBseUV4cHJlc3Npb246IEFwcGx5QW5ub3RhdGlvbkV4cHJlc3Npb248c3RyaW5nPixcblx0dmlzaXRlZE5hdmlnYXRpb25QYXRoczogc3RyaW5nW10gPSBbXSxcblx0cGF0aFZpc2l0b3I/OiBGdW5jdGlvblxuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHN0cmluZz4ge1xuXHRzd2l0Y2ggKGFwcGx5RXhwcmVzc2lvbi4kRnVuY3Rpb24gYXMgT0RhdGFGdW5jdGlvbikge1xuXHRcdGNhc2UgXCJvZGF0YS5jb25jYXRcIjpcblx0XHRcdHJldHVybiBjb25jYXQoXG5cdFx0XHRcdC4uLmFwcGx5RXhwcmVzc2lvbi4kQXBwbHkubWFwKChhcHBseVBhcmFtKSA9PiB7XG5cdFx0XHRcdFx0cmV0dXJuIGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihcblx0XHRcdFx0XHRcdGNvbnZlcnRTdWJBcHBseVBhcmFtZXRlcnMoYXBwbHlQYXJhbSkgYXMgUHJvcGVydHlBbm5vdGF0aW9uVmFsdWU8c3RyaW5nPixcblx0XHRcdFx0XHRcdHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMsXG5cdFx0XHRcdFx0XHR1bmRlZmluZWQsXG5cdFx0XHRcdFx0XHRwYXRoVmlzaXRvclxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH0pXG5cdFx0XHQpO1xuXHRcdGNhc2UgXCJvZGF0YS51cmlFbmNvZGVcIjpcblx0XHRcdGNvbnN0IHBhcmFtZXRlciA9IGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihcblx0XHRcdFx0Y29udmVydFN1YkFwcGx5UGFyYW1ldGVycyhcblx0XHRcdFx0XHRhcHBseUV4cHJlc3Npb24uJEFwcGx5WzBdIGFzIHVua25vd24gYXMgU3ViQXBwbHlFeHByZXNzaW9uRnJvbU1ldGFtb2RlbFxuXHRcdFx0XHQpIGFzIFByb3BlcnR5QW5ub3RhdGlvblZhbHVlPHN0cmluZz4sXG5cdFx0XHRcdHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMsXG5cdFx0XHRcdHVuZGVmaW5lZCxcblx0XHRcdFx0cGF0aFZpc2l0b3Jcblx0XHRcdCk7XG5cdFx0XHQvLyBUaGUgc2Vjb25kIHBhcmFtZXRlciBmb3IgdXJpRW5jb2RlIGlzIGFsd2F5cyBhIHN0cmluZyBzaW5jZSB0aGUgdGFyZ2V0IGV2YWx1YXRpb24gaXMgYWdhaW5zdCBhIGZvcm1hdFZhbHVlIGNhbGwgaW4gT0RhdGFVdGlscyB3aGljaCBleHBlY3QgdGhlIHRhcmdldCB0eXBlIGFzIHNlY29uZCBwYXJhbWV0ZXJcblx0XHRcdHJldHVybiBmbihcIm9kYXRhLnVyaUVuY29kZVwiLCBbcGFyYW1ldGVyLCBcIkVkbS5TdHJpbmdcIl0sIHVuZGVmaW5lZCwgdHJ1ZSk7XG5cdFx0Y2FzZSBcIm9kYXRhLmZpbGxVcmlUZW1wbGF0ZVwiOlxuXHRcdFx0Y29uc3QgdGVtcGxhdGUgPSBhcHBseUV4cHJlc3Npb24uJEFwcGx5WzBdO1xuXHRcdFx0Y29uc3QgdGVtcGxhdGVQYXJhbXMgPSBhcHBseUV4cHJlc3Npb24uJEFwcGx5LnNsaWNlKDEpIGFzIHVua25vd24gYXMgU3ViQXBwbHlFeHByZXNzaW9uRnJvbU1ldGFtb2RlbFtdO1xuXHRcdFx0Y29uc3QgdGFyZ2V0T2JqZWN0OiBSZWNvcmQ8c3RyaW5nLCBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248dW5rbm93bj4+ID0ge307XG5cdFx0XHR0ZW1wbGF0ZVBhcmFtcy5mb3JFYWNoKChhcHBseVBhcmFtKSA9PiB7XG5cdFx0XHRcdHRhcmdldE9iamVjdFthcHBseVBhcmFtLiROYW1lIGFzIHN0cmluZ10gPSBnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24oXG5cdFx0XHRcdFx0Y29udmVydFN1YkFwcGx5UGFyYW1ldGVycyhcblx0XHRcdFx0XHRcdGFwcGx5UGFyYW0uJExhYmVsZWRFbGVtZW50IGFzIFN1YkFwcGx5RXhwcmVzc2lvbkZyb21NZXRhbW9kZWxcblx0XHRcdFx0XHQpIGFzIFByb3BlcnR5QW5ub3RhdGlvblZhbHVlPHN0cmluZz4sXG5cdFx0XHRcdFx0dmlzaXRlZE5hdmlnYXRpb25QYXRocyxcblx0XHRcdFx0XHR1bmRlZmluZWQsXG5cdFx0XHRcdFx0cGF0aFZpc2l0b3Jcblx0XHRcdFx0KTtcblx0XHRcdH0pO1xuXHRcdFx0cmV0dXJuIGZuKFwib2RhdGEuZmlsbFVyaVRlbXBsYXRlXCIsIFt0ZW1wbGF0ZSwgdGFyZ2V0T2JqZWN0XSwgdW5kZWZpbmVkLCB0cnVlKTtcblx0fVxuXHRyZXR1cm4gdW5yZXNvbHZhYmxlRXhwcmVzc2lvbjtcbn1cblxuLyoqXG4gKiBHZW5lcmljIGhlbHBlciBmb3IgdGhlIGNvbXBhcmlzb24gb3BlcmF0aW9ucyAoZXF1YWwsIG5vdEVxdWFsLCAuLi4pLlxuICogQHRlbXBsYXRlIFQgVGhlIHRhcmdldCB0eXBlXG4gKiBAcGFyYW0gb3BlcmF0b3IgVGhlIG9wZXJhdG9yIHRvIGFwcGx5XG4gKiBAcGFyYW0gbGVmdE9wZXJhbmQgVGhlIG9wZXJhbmQgb24gdGhlIGxlZnQgc2lkZSBvZiB0aGUgb3BlcmF0b3JcbiAqIEBwYXJhbSByaWdodE9wZXJhbmQgVGhlIG9wZXJhbmQgb24gdGhlIHJpZ2h0IHNpZGUgb2YgdGhlIG9wZXJhdG9yXG4gKiBAcmV0dXJucyBBbiBleHByZXNzaW9uIHJlcHJlc2VudGluZyB0aGUgY29tcGFyaXNvblxuICovXG5mdW5jdGlvbiBjb21wYXJpc29uPFQgZXh0ZW5kcyBQcmltaXRpdmVUeXBlPihcblx0b3BlcmF0b3I6IENvbXBhcmlzb25PcGVyYXRvcixcblx0bGVmdE9wZXJhbmQ6IEV4cHJlc3Npb25PclByaW1pdGl2ZTxUPixcblx0cmlnaHRPcGVyYW5kOiBFeHByZXNzaW9uT3JQcmltaXRpdmU8VD5cbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiB7XG5cdGNvbnN0IGxlZnRFeHByZXNzaW9uID0gd3JhcFByaW1pdGl2ZShsZWZ0T3BlcmFuZCk7XG5cdGNvbnN0IHJpZ2h0RXhwcmVzc2lvbiA9IHdyYXBQcmltaXRpdmUocmlnaHRPcGVyYW5kKTtcblx0aWYgKGhhc1VucmVzb2x2YWJsZUV4cHJlc3Npb24obGVmdEV4cHJlc3Npb24sIHJpZ2h0RXhwcmVzc2lvbikpIHtcblx0XHRyZXR1cm4gdW5yZXNvbHZhYmxlRXhwcmVzc2lvbjtcblx0fVxuXHRpZiAoaXNDb25zdGFudChsZWZ0RXhwcmVzc2lvbikgJiYgaXNDb25zdGFudChyaWdodEV4cHJlc3Npb24pKSB7XG5cdFx0c3dpdGNoIChvcGVyYXRvcikge1xuXHRcdFx0Y2FzZSBcIiE9PVwiOlxuXHRcdFx0XHRyZXR1cm4gY29uc3RhbnQobGVmdEV4cHJlc3Npb24udmFsdWUgIT09IHJpZ2h0RXhwcmVzc2lvbi52YWx1ZSk7XG5cdFx0XHRjYXNlIFwiPT09XCI6XG5cdFx0XHRcdHJldHVybiBjb25zdGFudChsZWZ0RXhwcmVzc2lvbi52YWx1ZSA9PT0gcmlnaHRFeHByZXNzaW9uLnZhbHVlKTtcblx0XHRcdGNhc2UgXCI8XCI6XG5cdFx0XHRcdGlmIChcblx0XHRcdFx0XHRsZWZ0RXhwcmVzc2lvbi52YWx1ZSA9PT0gbnVsbCB8fFxuXHRcdFx0XHRcdGxlZnRFeHByZXNzaW9uLnZhbHVlID09PSB1bmRlZmluZWQgfHxcblx0XHRcdFx0XHRyaWdodEV4cHJlc3Npb24udmFsdWUgPT09IG51bGwgfHxcblx0XHRcdFx0XHRyaWdodEV4cHJlc3Npb24udmFsdWUgPT09IHVuZGVmaW5lZFxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHRyZXR1cm4gY29uc3RhbnQoZmFsc2UpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBjb25zdGFudChsZWZ0RXhwcmVzc2lvbi52YWx1ZSA8IHJpZ2h0RXhwcmVzc2lvbi52YWx1ZSk7XG5cdFx0XHRjYXNlIFwiPD1cIjpcblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdGxlZnRFeHByZXNzaW9uLnZhbHVlID09PSBudWxsIHx8XG5cdFx0XHRcdFx0bGVmdEV4cHJlc3Npb24udmFsdWUgPT09IHVuZGVmaW5lZCB8fFxuXHRcdFx0XHRcdHJpZ2h0RXhwcmVzc2lvbi52YWx1ZSA9PT0gbnVsbCB8fFxuXHRcdFx0XHRcdHJpZ2h0RXhwcmVzc2lvbi52YWx1ZSA9PT0gdW5kZWZpbmVkXG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdHJldHVybiBjb25zdGFudChmYWxzZSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIGNvbnN0YW50KGxlZnRFeHByZXNzaW9uLnZhbHVlIDw9IHJpZ2h0RXhwcmVzc2lvbi52YWx1ZSk7XG5cdFx0XHRjYXNlIFwiPlwiOlxuXHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0bGVmdEV4cHJlc3Npb24udmFsdWUgPT09IG51bGwgfHxcblx0XHRcdFx0XHRsZWZ0RXhwcmVzc2lvbi52YWx1ZSA9PT0gdW5kZWZpbmVkIHx8XG5cdFx0XHRcdFx0cmlnaHRFeHByZXNzaW9uLnZhbHVlID09PSBudWxsIHx8XG5cdFx0XHRcdFx0cmlnaHRFeHByZXNzaW9uLnZhbHVlID09PSB1bmRlZmluZWRcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0cmV0dXJuIGNvbnN0YW50KGZhbHNlKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gY29uc3RhbnQobGVmdEV4cHJlc3Npb24udmFsdWUgPiByaWdodEV4cHJlc3Npb24udmFsdWUpO1xuXHRcdFx0Y2FzZSBcIj49XCI6XG5cdFx0XHRcdGlmIChcblx0XHRcdFx0XHRsZWZ0RXhwcmVzc2lvbi52YWx1ZSA9PT0gbnVsbCB8fFxuXHRcdFx0XHRcdGxlZnRFeHByZXNzaW9uLnZhbHVlID09PSB1bmRlZmluZWQgfHxcblx0XHRcdFx0XHRyaWdodEV4cHJlc3Npb24udmFsdWUgPT09IG51bGwgfHxcblx0XHRcdFx0XHRyaWdodEV4cHJlc3Npb24udmFsdWUgPT09IHVuZGVmaW5lZFxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHRyZXR1cm4gY29uc3RhbnQoZmFsc2UpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBjb25zdGFudChsZWZ0RXhwcmVzc2lvbi52YWx1ZSA+PSByaWdodEV4cHJlc3Npb24udmFsdWUpO1xuXG5cdFx0XHRjYXNlIFwiSGFzXCI6IHtcblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdGxlZnRFeHByZXNzaW9uLnZhbHVlID09PSBudWxsIHx8XG5cdFx0XHRcdFx0bGVmdEV4cHJlc3Npb24udmFsdWUgPT09IHVuZGVmaW5lZCB8fFxuXHRcdFx0XHRcdHJpZ2h0RXhwcmVzc2lvbi52YWx1ZSA9PT0gbnVsbCB8fFxuXHRcdFx0XHRcdHJpZ2h0RXhwcmVzc2lvbi52YWx1ZSA9PT0gdW5kZWZpbmVkXG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdHJldHVybiBjb25zdGFudChmYWxzZSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y29uc3QgbGVmdFZhbHVlSW50ID0gbGVmdEV4cHJlc3Npb24udmFsdWUgYXMgbnVtYmVyO1xuXHRcdFx0XHRjb25zdCByaWdodFZhbHVlSW50ID0gcmlnaHRFeHByZXNzaW9uLnZhbHVlIGFzIG51bWJlcjtcblx0XHRcdFx0cmV0dXJuIGNvbnN0YW50KCEhKGxlZnRWYWx1ZUludCAmIHJpZ2h0VmFsdWVJbnQpKTtcblx0XHRcdH1cblx0XHRcdGNhc2UgXCJJblwiOiB7XG5cdFx0XHRcdGlmIChcblx0XHRcdFx0XHRsZWZ0RXhwcmVzc2lvbi52YWx1ZSA9PT0gbnVsbCB8fFxuXHRcdFx0XHRcdGxlZnRFeHByZXNzaW9uLnZhbHVlID09PSB1bmRlZmluZWQgfHxcblx0XHRcdFx0XHRyaWdodEV4cHJlc3Npb24udmFsdWUgPT09IG51bGwgfHxcblx0XHRcdFx0XHRyaWdodEV4cHJlc3Npb24udmFsdWUgPT09IHVuZGVmaW5lZFxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHRyZXR1cm4gY29uc3RhbnQoZmFsc2UpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdC8vIENoZWNrIGFsbCB0aGUgY2hpbGRyZW4gb2YgdGhlIHJpZ2h0IGV4cHJlc3Npb24gYXJlIGNvbnN0YW50c1xuXHRcdFx0XHRjb25zdCBhbGxDaGlsZHJlbkNvbnN0YW50cyA9IChyaWdodEV4cHJlc3Npb24udmFsdWUgYXMgVFtdKS5ldmVyeSgoaXRlbSkgPT4gaXNDb25zdGFudChpdGVtKSk7XG5cdFx0XHRcdGlmIChhbGxDaGlsZHJlbkNvbnN0YW50cykge1xuXHRcdFx0XHRcdGNvbnN0IHJpZ2h0VmFsdWVzID0gKHJpZ2h0RXhwcmVzc2lvbi52YWx1ZSBhcyBDb25zdGFudEV4cHJlc3Npb248VD5bXSkubWFwKChpdGVtKSA9PiBpdGVtLnZhbHVlKTtcblx0XHRcdFx0XHRyZXR1cm4gY29uc3RhbnQocmlnaHRWYWx1ZXMuaW5jbHVkZXMobGVmdEV4cHJlc3Npb24udmFsdWUpKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdFx0X3R5cGU6IFwiQ29tcGFyaXNvblwiLFxuXHRcdFx0XHRcdFx0b3BlcmF0b3I6IG9wZXJhdG9yLFxuXHRcdFx0XHRcdFx0b3BlcmFuZDE6IGxlZnRFeHByZXNzaW9uLFxuXHRcdFx0XHRcdFx0b3BlcmFuZDI6IHJpZ2h0RXhwcmVzc2lvblxuXHRcdFx0XHRcdH07XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdF90eXBlOiBcIkNvbXBhcmlzb25cIixcblx0XHRcdG9wZXJhdG9yOiBvcGVyYXRvcixcblx0XHRcdG9wZXJhbmQxOiBsZWZ0RXhwcmVzc2lvbixcblx0XHRcdG9wZXJhbmQyOiByaWdodEV4cHJlc3Npb25cblx0XHR9O1xuXHR9XG59XG5cbi8qKlxuICogR2VuZXJpYyBoZWxwZXIgZm9yIHRoZSBsZW5ndGggb2YgYW4gZXhwcmVzc2lvbi5cbiAqIEBwYXJhbSBleHByZXNzaW9uIFRoZSBpbnB1dCBleHByZXNzaW9uIHBvaW50aW5nIHRvIGFuIGFycmF5XG4gKiBAcGFyYW0gY2hlY2tVbmRlZmluZWQgSXMgdGhlIGFycmF5IHBvdGVudGlhbGx5IHVuZGVmaW5lZFxuICogQHJldHVybnMgQW4gZXhwcmVzc2lvbiByZXByZXNlbnRpbmcgdGhlIGxlbmd0aFxuICovXG5leHBvcnQgZnVuY3Rpb24gbGVuZ3RoKFxuXHRleHByZXNzaW9uOiBQYXRoSW5Nb2RlbEV4cHJlc3Npb248dW5rbm93bj4gfCBVbnJlc29sdmFibGVQYXRoRXhwcmVzc2lvbixcblx0Y2hlY2tVbmRlZmluZWQgPSBmYWxzZVxuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPG51bWJlcj4ge1xuXHRpZiAoZXhwcmVzc2lvbi5fdHlwZSA9PT0gXCJVbnJlc29sdmFibGVcIikge1xuXHRcdHJldHVybiBleHByZXNzaW9uO1xuXHR9XG5cdGlmICghY2hlY2tVbmRlZmluZWQpIHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0X3R5cGU6IFwiTGVuZ3RoXCIsXG5cdFx0XHRwYXRoSW5Nb2RlbDogZXhwcmVzc2lvblxuXHRcdH07XG5cdH1cblx0cmV0dXJuIGlmRWxzZShlcXVhbChleHByZXNzaW9uLCB1bmRlZmluZWQpLCAtMSwgbGVuZ3RoKGV4cHJlc3Npb24pKTtcbn1cblxuLyoqXG4gKiBDb21wYXJpc29uOiBcImVxdWFsXCIgKD09PSkuXG4gKiBAdGVtcGxhdGUgVCBUaGUgdGFyZ2V0IHR5cGVcbiAqIEBwYXJhbSBsZWZ0T3BlcmFuZCBUaGUgb3BlcmFuZCBvbiB0aGUgbGVmdCBzaWRlXG4gKiBAcGFyYW0gcmlnaHRPcGVyYW5kIFRoZSBvcGVyYW5kIG9uIHRoZSByaWdodCBzaWRlIG9mIHRoZSBjb21wYXJpc29uXG4gKiBAcmV0dXJucyBBbiBleHByZXNzaW9uIHJlcHJlc2VudGluZyB0aGUgY29tcGFyaXNvblxuICovXG5leHBvcnQgZnVuY3Rpb24gZXF1YWw8VCBleHRlbmRzIFByaW1pdGl2ZVR5cGU+KFxuXHRsZWZ0T3BlcmFuZDogRXhwcmVzc2lvbk9yUHJpbWl0aXZlPFQ+LFxuXHRyaWdodE9wZXJhbmQ6IEV4cHJlc3Npb25PclByaW1pdGl2ZTxUPlxuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+IHtcblx0Y29uc3QgbGVmdEV4cHJlc3Npb24gPSB3cmFwUHJpbWl0aXZlKGxlZnRPcGVyYW5kKTtcblx0Y29uc3QgcmlnaHRFeHByZXNzaW9uID0gd3JhcFByaW1pdGl2ZShyaWdodE9wZXJhbmQpO1xuXHRpZiAoaGFzVW5yZXNvbHZhYmxlRXhwcmVzc2lvbihsZWZ0RXhwcmVzc2lvbiwgcmlnaHRFeHByZXNzaW9uKSkge1xuXHRcdHJldHVybiB1bnJlc29sdmFibGVFeHByZXNzaW9uO1xuXHR9XG5cdGlmIChfY2hlY2tFeHByZXNzaW9uc0FyZUVxdWFsKGxlZnRFeHByZXNzaW9uLCByaWdodEV4cHJlc3Npb24pKSB7XG5cdFx0cmV0dXJuIGNvbnN0YW50KHRydWUpO1xuXHR9XG5cblx0ZnVuY3Rpb24gcmVkdWNlKGxlZnQ6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxUPiwgcmlnaHQ6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxUPik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiB8IHVuZGVmaW5lZCB7XG5cdFx0aWYgKGxlZnQuX3R5cGUgPT09IFwiQ29tcGFyaXNvblwiICYmIGlzVHJ1ZShyaWdodCkpIHtcblx0XHRcdC8vIGNvbXBhcmUoYSwgYikgPT09IHRydWUgfn4+IGNvbXBhcmUoYSwgYilcblx0XHRcdHJldHVybiBsZWZ0O1xuXHRcdH0gZWxzZSBpZiAobGVmdC5fdHlwZSA9PT0gXCJDb21wYXJpc29uXCIgJiYgaXNGYWxzZShyaWdodCkpIHtcblx0XHRcdC8vIGNvbXBhcmUoYSwgYikgPT09IGZhbHNlIH5+PiAhY29tcGFyZShhLCBiKVxuXHRcdFx0cmV0dXJuIG5vdChsZWZ0KTtcblx0XHR9IGVsc2UgaWYgKGxlZnQuX3R5cGUgPT09IFwiSWZFbHNlXCIgJiYgX2NoZWNrRXhwcmVzc2lvbnNBcmVFcXVhbChsZWZ0Lm9uVHJ1ZSwgcmlnaHQpKSB7XG5cdFx0XHQvLyAoaWYgKHgpIHsgYSB9IGVsc2UgeyBiIH0pID09PSBhIH5+PiB4IHx8IChiID09PSBhKVxuXHRcdFx0cmV0dXJuIG9yKGxlZnQuY29uZGl0aW9uLCBlcXVhbChsZWZ0Lm9uRmFsc2UsIHJpZ2h0KSk7XG5cdFx0fSBlbHNlIGlmIChsZWZ0Ll90eXBlID09PSBcIklmRWxzZVwiICYmIF9jaGVja0V4cHJlc3Npb25zQXJlRXF1YWwobGVmdC5vbkZhbHNlLCByaWdodCkpIHtcblx0XHRcdC8vIChpZiAoeCkgeyBhIH0gZWxzZSB7IGIgfSkgPT09IGIgfn4+ICF4IHx8IChhID09PSBiKVxuXHRcdFx0cmV0dXJuIG9yKG5vdChsZWZ0LmNvbmRpdGlvbiksIGVxdWFsKGxlZnQub25UcnVlLCByaWdodCkpO1xuXHRcdH0gZWxzZSBpZiAoXG5cdFx0XHRsZWZ0Ll90eXBlID09PSBcIklmRWxzZVwiICYmXG5cdFx0XHRpc0NvbnN0YW50KGxlZnQub25UcnVlKSAmJlxuXHRcdFx0aXNDb25zdGFudChsZWZ0Lm9uRmFsc2UpICYmXG5cdFx0XHRpc0NvbnN0YW50KHJpZ2h0KSAmJlxuXHRcdFx0IV9jaGVja0V4cHJlc3Npb25zQXJlRXF1YWwobGVmdC5vblRydWUsIHJpZ2h0KSAmJlxuXHRcdFx0IV9jaGVja0V4cHJlc3Npb25zQXJlRXF1YWwobGVmdC5vbkZhbHNlLCByaWdodClcblx0XHQpIHtcblx0XHRcdHJldHVybiBjb25zdGFudChmYWxzZSk7XG5cdFx0fVxuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cblxuXHQvLyBleHBsb2l0IHN5bW1ldHJ5OiBhID09PSBiIDx+PiBiID09PSBhXG5cdGNvbnN0IHJlZHVjZWQgPSByZWR1Y2UobGVmdEV4cHJlc3Npb24sIHJpZ2h0RXhwcmVzc2lvbikgPz8gcmVkdWNlKHJpZ2h0RXhwcmVzc2lvbiwgbGVmdEV4cHJlc3Npb24pO1xuXHRyZXR1cm4gcmVkdWNlZCA/PyBjb21wYXJpc29uKFwiPT09XCIsIGxlZnRFeHByZXNzaW9uLCByaWdodEV4cHJlc3Npb24pO1xufVxuXG4vKipcbiAqIENvbXBhcmlzb246IFwibm90IGVxdWFsXCIgKCE9PSkuXG4gKiBAdGVtcGxhdGUgVCBUaGUgdGFyZ2V0IHR5cGVcbiAqIEBwYXJhbSBsZWZ0T3BlcmFuZCBUaGUgb3BlcmFuZCBvbiB0aGUgbGVmdCBzaWRlXG4gKiBAcGFyYW0gcmlnaHRPcGVyYW5kIFRoZSBvcGVyYW5kIG9uIHRoZSByaWdodCBzaWRlIG9mIHRoZSBjb21wYXJpc29uXG4gKiBAcmV0dXJucyBBbiBleHByZXNzaW9uIHJlcHJlc2VudGluZyB0aGUgY29tcGFyaXNvblxuICovXG5leHBvcnQgZnVuY3Rpb24gbm90RXF1YWw8VCBleHRlbmRzIFByaW1pdGl2ZVR5cGU+KFxuXHRsZWZ0T3BlcmFuZDogRXhwcmVzc2lvbk9yUHJpbWl0aXZlPFQ+LFxuXHRyaWdodE9wZXJhbmQ6IEV4cHJlc3Npb25PclByaW1pdGl2ZTxUPlxuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+IHtcblx0cmV0dXJuIG5vdChlcXVhbChsZWZ0T3BlcmFuZCwgcmlnaHRPcGVyYW5kKSk7XG59XG5cbi8qKlxuICogQ29tcGFyaXNvbjogXCJncmVhdGVyIG9yIGVxdWFsXCIgKD49KS5cbiAqIEB0ZW1wbGF0ZSBUIFRoZSB0YXJnZXQgdHlwZVxuICogQHBhcmFtIGxlZnRPcGVyYW5kIFRoZSBvcGVyYW5kIG9uIHRoZSBsZWZ0IHNpZGVcbiAqIEBwYXJhbSByaWdodE9wZXJhbmQgVGhlIG9wZXJhbmQgb24gdGhlIHJpZ2h0IHNpZGUgb2YgdGhlIGNvbXBhcmlzb25cbiAqIEByZXR1cm5zIEFuIGV4cHJlc3Npb24gcmVwcmVzZW50aW5nIHRoZSBjb21wYXJpc29uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBncmVhdGVyT3JFcXVhbDxUIGV4dGVuZHMgRGVmaW5lZFByaW1pdGl2ZVR5cGU+KFxuXHRsZWZ0T3BlcmFuZDogRXhwcmVzc2lvbk9yUHJpbWl0aXZlPFQ+LFxuXHRyaWdodE9wZXJhbmQ6IEV4cHJlc3Npb25PclByaW1pdGl2ZTxUPlxuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+IHtcblx0cmV0dXJuIGNvbXBhcmlzb24oXCI+PVwiLCBsZWZ0T3BlcmFuZCwgcmlnaHRPcGVyYW5kKTtcbn1cblxuLyoqXG4gKiBDb21wYXJpc29uOiBcImdyZWF0ZXIgdGhhblwiICg+KS5cbiAqIEB0ZW1wbGF0ZSBUIFRoZSB0YXJnZXQgdHlwZVxuICogQHBhcmFtIGxlZnRPcGVyYW5kIFRoZSBvcGVyYW5kIG9uIHRoZSBsZWZ0IHNpZGVcbiAqIEBwYXJhbSByaWdodE9wZXJhbmQgVGhlIG9wZXJhbmQgb24gdGhlIHJpZ2h0IHNpZGUgb2YgdGhlIGNvbXBhcmlzb25cbiAqIEByZXR1cm5zIEFuIGV4cHJlc3Npb24gcmVwcmVzZW50aW5nIHRoZSBjb21wYXJpc29uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBncmVhdGVyVGhhbjxUIGV4dGVuZHMgRGVmaW5lZFByaW1pdGl2ZVR5cGU+KFxuXHRsZWZ0T3BlcmFuZDogRXhwcmVzc2lvbk9yUHJpbWl0aXZlPFQ+LFxuXHRyaWdodE9wZXJhbmQ6IEV4cHJlc3Npb25PclByaW1pdGl2ZTxUPlxuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+IHtcblx0cmV0dXJuIGNvbXBhcmlzb24oXCI+XCIsIGxlZnRPcGVyYW5kLCByaWdodE9wZXJhbmQpO1xufVxuXG4vKipcbiAqIENvbXBhcmlzb246IFwibGVzcyBvciBlcXVhbFwiICg8PSkuXG4gKiBAdGVtcGxhdGUgVCBUaGUgdGFyZ2V0IHR5cGVcbiAqIEBwYXJhbSBsZWZ0T3BlcmFuZCBUaGUgb3BlcmFuZCBvbiB0aGUgbGVmdCBzaWRlXG4gKiBAcGFyYW0gcmlnaHRPcGVyYW5kIFRoZSBvcGVyYW5kIG9uIHRoZSByaWdodCBzaWRlIG9mIHRoZSBjb21wYXJpc29uXG4gKiBAcmV0dXJucyBBbiBleHByZXNzaW9uIHJlcHJlc2VudGluZyB0aGUgY29tcGFyaXNvblxuICovXG5leHBvcnQgZnVuY3Rpb24gbGVzc09yRXF1YWw8VCBleHRlbmRzIERlZmluZWRQcmltaXRpdmVUeXBlPihcblx0bGVmdE9wZXJhbmQ6IEV4cHJlc3Npb25PclByaW1pdGl2ZTxUPixcblx0cmlnaHRPcGVyYW5kOiBFeHByZXNzaW9uT3JQcmltaXRpdmU8VD5cbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiB7XG5cdHJldHVybiBjb21wYXJpc29uKFwiPD1cIiwgbGVmdE9wZXJhbmQsIHJpZ2h0T3BlcmFuZCk7XG59XG5cbi8qKlxuICogQ29tcGFyaXNvbjogXCJsZXNzIHRoYW5cIiAoPCkuXG4gKiBAdGVtcGxhdGUgVCBUaGUgdGFyZ2V0IHR5cGVcbiAqIEBwYXJhbSBsZWZ0T3BlcmFuZCBUaGUgb3BlcmFuZCBvbiB0aGUgbGVmdCBzaWRlXG4gKiBAcGFyYW0gcmlnaHRPcGVyYW5kIFRoZSBvcGVyYW5kIG9uIHRoZSByaWdodCBzaWRlIG9mIHRoZSBjb21wYXJpc29uXG4gKiBAcmV0dXJucyBBbiBleHByZXNzaW9uIHJlcHJlc2VudGluZyB0aGUgY29tcGFyaXNvblxuICovXG5leHBvcnQgZnVuY3Rpb24gbGVzc1RoYW48VCBleHRlbmRzIERlZmluZWRQcmltaXRpdmVUeXBlPihcblx0bGVmdE9wZXJhbmQ6IEV4cHJlc3Npb25PclByaW1pdGl2ZTxUPixcblx0cmlnaHRPcGVyYW5kOiBFeHByZXNzaW9uT3JQcmltaXRpdmU8VD5cbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiB7XG5cdHJldHVybiBjb21wYXJpc29uKFwiPFwiLCBsZWZ0T3BlcmFuZCwgcmlnaHRPcGVyYW5kKTtcbn1cblxuLyoqXG4gKiBDb21wYXJpc29uOiBcIkluY2x1ZGVcIiAoSW4pLlxuICogQHRlbXBsYXRlIFQgVGhlIHRhcmdldCB0eXBlXG4gKiBAcGFyYW0gbGVmdE9wZXJhbmQgVGhlIG9wZXJhbmQgb24gdGhlIGxlZnQgc2lkZVxuICogQHBhcmFtIHJpZ2h0T3BlcmFuZCBUaGUgb3BlcmFuZCBvbiB0aGUgcmlnaHQgc2lkZSBvZiB0aGUgY29tcGFyaXNvblxuICogQHJldHVybnMgQW4gZXhwcmVzc2lvbiByZXByZXNlbnRpbmcgdGhlIGNvbXBhcmlzb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGluY2x1ZGVzPFQgZXh0ZW5kcyBEZWZpbmVkUHJpbWl0aXZlVHlwZT4oXG5cdGxlZnRPcGVyYW5kOiBFeHByZXNzaW9uT3JQcmltaXRpdmU8VD4sXG5cdHJpZ2h0T3BlcmFuZDogRXhwcmVzc2lvbk9yUHJpbWl0aXZlPFRbXT5cbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiB7XG5cdHJldHVybiBjb21wYXJpc29uKFwiSW5cIiwgbGVmdE9wZXJhbmQsIHJpZ2h0T3BlcmFuZCBhcyBFeHByZXNzaW9uT3JQcmltaXRpdmU8VD4pO1xufVxuXG4vKipcbiAqIElmLXRoZW4tZWxzZSBleHByZXNzaW9uLlxuICpcbiAqIEV2YWx1YXRlcyB0byBvblRydWUgaWYgdGhlIGNvbmRpdGlvbiBldmFsdWF0ZXMgdG8gdHJ1ZSwgZWxzZSBldmFsdWF0ZXMgdG8gb25GYWxzZS5cbiAqIEB0ZW1wbGF0ZSBUIFRoZSB0YXJnZXQgdHlwZVxuICogQHBhcmFtIGNvbmRpdGlvbiBUaGUgY29uZGl0aW9uIHRvIGV2YWx1YXRlXG4gKiBAcGFyYW0gb25UcnVlIEV4cHJlc3Npb24gcmVzdWx0IGlmIHRoZSBjb25kaXRpb24gZXZhbHVhdGVzIHRvIHRydWVcbiAqIEBwYXJhbSBvbkZhbHNlIEV4cHJlc3Npb24gcmVzdWx0IGlmIHRoZSBjb25kaXRpb24gZXZhbHVhdGVzIHRvIGZhbHNlXG4gKiBAcmV0dXJucyBUaGUgZXhwcmVzc2lvbiB0aGF0IHJlcHJlc2VudHMgdGhpcyBjb25kaXRpb25hbCBjaGVja1xuICovXG5leHBvcnQgZnVuY3Rpb24gaWZFbHNlPFQgZXh0ZW5kcyBQcmltaXRpdmVUeXBlPihcblx0Y29uZGl0aW9uOiBFeHByZXNzaW9uT3JQcmltaXRpdmU8Ym9vbGVhbj4sXG5cdG9uVHJ1ZTogRXhwcmVzc2lvbk9yUHJpbWl0aXZlPFQ+LFxuXHRvbkZhbHNlOiBFeHByZXNzaW9uT3JQcmltaXRpdmU8VD5cbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxUPiB7XG5cdGxldCBjb25kaXRpb25FeHByZXNzaW9uID0gd3JhcFByaW1pdGl2ZShjb25kaXRpb24pO1xuXHRsZXQgb25UcnVlRXhwcmVzc2lvbiA9IHdyYXBQcmltaXRpdmUob25UcnVlKTtcblx0bGV0IG9uRmFsc2VFeHByZXNzaW9uID0gd3JhcFByaW1pdGl2ZShvbkZhbHNlKTtcblxuXHQvLyBzd2FwIGJyYW5jaGVzIGlmIHRoZSBjb25kaXRpb24gaXMgYSBuZWdhdGlvblxuXHRpZiAoY29uZGl0aW9uRXhwcmVzc2lvbi5fdHlwZSA9PT0gXCJOb3RcIikge1xuXHRcdC8vIGlmRWxzZShub3QoWCksIGEsIGIpIC0tPiBpZkVsc2UoWCwgYiwgYSlcblx0XHRbb25UcnVlRXhwcmVzc2lvbiwgb25GYWxzZUV4cHJlc3Npb25dID0gW29uRmFsc2VFeHByZXNzaW9uLCBvblRydWVFeHByZXNzaW9uXTtcblx0XHRjb25kaXRpb25FeHByZXNzaW9uID0gbm90KGNvbmRpdGlvbkV4cHJlc3Npb24pO1xuXHR9XG5cblx0Ly8gaW5saW5lIG5lc3RlZCBpZi1lbHNlIGV4cHJlc3Npb25zOiBvblRydWUgYnJhbmNoXG5cdC8vIGlmRWxzZShYLCBpZkVsc2UoWCwgYSwgYiksIGMpID09PiBpZkVsc2UoWCwgYSwgYylcblx0aWYgKG9uVHJ1ZUV4cHJlc3Npb24uX3R5cGUgPT09IFwiSWZFbHNlXCIgJiYgX2NoZWNrRXhwcmVzc2lvbnNBcmVFcXVhbChjb25kaXRpb25FeHByZXNzaW9uLCBvblRydWVFeHByZXNzaW9uLmNvbmRpdGlvbikpIHtcblx0XHRvblRydWVFeHByZXNzaW9uID0gb25UcnVlRXhwcmVzc2lvbi5vblRydWU7XG5cdH1cblxuXHQvLyBpbmxpbmUgbmVzdGVkIGlmLWVsc2UgZXhwcmVzc2lvbnM6IG9uRmFsc2UgYnJhbmNoXG5cdC8vIGlmRWxzZShYLCBhLCBpZkVsc2UoWCwgYiwgYykpID09PiBpZkVsc2UoWCwgYSwgYylcblx0aWYgKG9uRmFsc2VFeHByZXNzaW9uLl90eXBlID09PSBcIklmRWxzZVwiICYmIF9jaGVja0V4cHJlc3Npb25zQXJlRXF1YWwoY29uZGl0aW9uRXhwcmVzc2lvbiwgb25GYWxzZUV4cHJlc3Npb24uY29uZGl0aW9uKSkge1xuXHRcdG9uRmFsc2VFeHByZXNzaW9uID0gb25GYWxzZUV4cHJlc3Npb24ub25GYWxzZTtcblx0fVxuXG5cdC8vIChpZiB0cnVlIHRoZW4gYSBlbHNlIGIpICB+fj4gYVxuXHQvLyAoaWYgZmFsc2UgdGhlbiBhIGVsc2UgYikgfn4+IGJcblx0aWYgKGlzQ29uc3RhbnQoY29uZGl0aW9uRXhwcmVzc2lvbikpIHtcblx0XHRyZXR1cm4gY29uZGl0aW9uRXhwcmVzc2lvbi52YWx1ZSA/IG9uVHJ1ZUV4cHJlc3Npb24gOiBvbkZhbHNlRXhwcmVzc2lvbjtcblx0fVxuXG5cdC8vIGlmIChpc0NvbnN0YW50Qm9vbGVhbihvblRydWVFeHByZXNzaW9uKSB8fCBpc0NvbnN0YW50Qm9vbGVhbihvbkZhbHNlRXhwcmVzc2lvbikpIHtcblx0Ly8gXHRyZXR1cm4gb3IoYW5kKGNvbmRpdGlvbiwgb25UcnVlRXhwcmVzc2lvbiBhcyBFeHByZXNzaW9uPGJvb2xlYW4+KSwgYW5kKG5vdChjb25kaXRpb24pLCBvbkZhbHNlRXhwcmVzc2lvbiBhcyBFeHByZXNzaW9uPGJvb2xlYW4+KSkgYXMgRXhwcmVzc2lvbjxUPlxuXHQvLyB9XG5cblx0Ly8gKGlmIFggdGhlbiBhIGVsc2UgYSkgfn4+IGFcblx0aWYgKF9jaGVja0V4cHJlc3Npb25zQXJlRXF1YWwob25UcnVlRXhwcmVzc2lvbiwgb25GYWxzZUV4cHJlc3Npb24pKSB7XG5cdFx0cmV0dXJuIG9uVHJ1ZUV4cHJlc3Npb247XG5cdH1cblxuXHQvLyBpZiBYIHRoZW4gYSBlbHNlIGZhbHNlIH5+PiBYICYmIGFcblx0aWYgKGlzRmFsc2Uob25GYWxzZUV4cHJlc3Npb24pKSB7XG5cdFx0cmV0dXJuIGFuZChjb25kaXRpb25FeHByZXNzaW9uLCBvblRydWVFeHByZXNzaW9uIGFzIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPikgYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFQ+O1xuXHR9XG5cblx0Ly8gaWYgWCB0aGVuIGEgZWxzZSB0cnVlIH5+PiAhWCB8fCBhXG5cdGlmIChpc1RydWUob25GYWxzZUV4cHJlc3Npb24pKSB7XG5cdFx0cmV0dXJuIG9yKG5vdChjb25kaXRpb25FeHByZXNzaW9uKSwgb25UcnVlRXhwcmVzc2lvbiBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4pIGFzIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxUPjtcblx0fVxuXG5cdC8vIGlmIFggdGhlbiBmYWxzZSBlbHNlIGEgfn4+ICFYICYmIGFcblx0aWYgKGlzRmFsc2Uob25UcnVlRXhwcmVzc2lvbikpIHtcblx0XHRyZXR1cm4gYW5kKG5vdChjb25kaXRpb25FeHByZXNzaW9uKSwgb25GYWxzZUV4cHJlc3Npb24gYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+KSBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248VD47XG5cdH1cblxuXHQvLyBpZiBYIHRoZW4gdHJ1ZSBlbHNlIGEgfn4+IFggfHwgYVxuXHRpZiAoaXNUcnVlKG9uVHJ1ZUV4cHJlc3Npb24pKSB7XG5cdFx0cmV0dXJuIG9yKGNvbmRpdGlvbkV4cHJlc3Npb24sIG9uRmFsc2VFeHByZXNzaW9uIGFzIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPikgYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFQ+O1xuXHR9XG5cdGlmIChoYXNVbnJlc29sdmFibGVFeHByZXNzaW9uKGNvbmRpdGlvbkV4cHJlc3Npb24sIG9uVHJ1ZUV4cHJlc3Npb24sIG9uRmFsc2VFeHByZXNzaW9uKSkge1xuXHRcdHJldHVybiB1bnJlc29sdmFibGVFeHByZXNzaW9uO1xuXHR9XG5cdGlmIChpc0NvbXBsZXhUeXBlRXhwcmVzc2lvbihjb25kaXRpb24pIHx8IGlzQ29tcGxleFR5cGVFeHByZXNzaW9uKG9uVHJ1ZSkgfHwgaXNDb21wbGV4VHlwZUV4cHJlc3Npb24ob25GYWxzZSkpIHtcblx0XHRsZXQgcGF0aElkeCA9IDA7XG5cdFx0Y29uc3QgbXlJZkVsc2VFeHByZXNzaW9uID0gZm9ybWF0UmVzdWx0KFtjb25kaXRpb24sIG9uVHJ1ZSwgb25GYWxzZV0sIFwiLl9mb3JtYXR0ZXJzLlN0YW5kYXJkRm9ybWF0dGVyI2lmRWxzZVwiKTtcblx0XHRjb25zdCBhbGxQYXJ0cyA9IFtdO1xuXHRcdHRyYW5zZm9ybVJlY3Vyc2l2ZWx5KFxuXHRcdFx0bXlJZkVsc2VFeHByZXNzaW9uLFxuXHRcdFx0XCJQYXRoSW5Nb2RlbFwiLFxuXHRcdFx0KGNvbnN0YW50UGF0aDogUGF0aEluTW9kZWxFeHByZXNzaW9uPHVua25vd24+KSA9PiB7XG5cdFx0XHRcdGFsbFBhcnRzLnB1c2goY29uc3RhbnRQYXRoKTtcblx0XHRcdFx0cmV0dXJuIHBhdGhJbk1vZGVsKGAkJHtwYXRoSWR4Kyt9YCwgXCIkXCIpO1xuXHRcdFx0fSxcblx0XHRcdHRydWVcblx0XHQpO1xuXHRcdGFsbFBhcnRzLnVuc2hpZnQoY29uc3RhbnQoSlNPTi5zdHJpbmdpZnkobXlJZkVsc2VFeHByZXNzaW9uKSkpO1xuXHRcdHJldHVybiBmb3JtYXRSZXN1bHQoYWxsUGFydHMsIFwiLl9mb3JtYXR0ZXJzLlN0YW5kYXJkRm9ybWF0dGVyLmJpbmQoJGNvbnRyb2wpI2V2YWx1YXRlQ29tcGxleEV4cHJlc3Npb25cIiwgdW5kZWZpbmVkLCB0cnVlKTtcblx0fVxuXHRyZXR1cm4ge1xuXHRcdF90eXBlOiBcIklmRWxzZVwiLFxuXHRcdGNvbmRpdGlvbjogY29uZGl0aW9uRXhwcmVzc2lvbixcblx0XHRvblRydWU6IG9uVHJ1ZUV4cHJlc3Npb24sXG5cdFx0b25GYWxzZTogb25GYWxzZUV4cHJlc3Npb25cblx0fTtcbn1cblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciB0aGUgY3VycmVudCBleHByZXNzaW9uIGhhcyBhIHJlZmVyZW5jZSB0byB0aGUgZGVmYXVsdCBtb2RlbCAodW5kZWZpbmVkKS5cbiAqIEBwYXJhbSBleHByZXNzaW9uIFRoZSBleHByZXNzaW9uIHRvIGV2YWx1YXRlXG4gKiBAcmV0dXJucyBgdHJ1ZWAgaWYgdGhlcmUgaXMgYSByZWZlcmVuY2UgdG8gdGhlIGRlZmF1bHQgY29udGV4dFxuICovXG5mdW5jdGlvbiBoYXNSZWZlcmVuY2VUb0RlZmF1bHRDb250ZXh0KGV4cHJlc3Npb246IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjx1bmtub3duPik6IGJvb2xlYW4ge1xuXHRzd2l0Y2ggKGV4cHJlc3Npb24uX3R5cGUpIHtcblx0XHRjYXNlIFwiQ29uc3RhbnRcIjpcblx0XHRjYXNlIFwiRm9ybWF0dGVyXCI6XG5cdFx0Y2FzZSBcIkNvbXBsZXhUeXBlXCI6XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0Y2FzZSBcIlNldFwiOlxuXHRcdFx0cmV0dXJuIGV4cHJlc3Npb24ub3BlcmFuZHMuc29tZShoYXNSZWZlcmVuY2VUb0RlZmF1bHRDb250ZXh0KTtcblx0XHRjYXNlIFwiUGF0aEluTW9kZWxcIjpcblx0XHRcdHJldHVybiBleHByZXNzaW9uLm1vZGVsTmFtZSA9PT0gdW5kZWZpbmVkO1xuXHRcdGNhc2UgXCJDb21wYXJpc29uXCI6XG5cdFx0XHRyZXR1cm4gaGFzUmVmZXJlbmNlVG9EZWZhdWx0Q29udGV4dChleHByZXNzaW9uLm9wZXJhbmQxKSB8fCBoYXNSZWZlcmVuY2VUb0RlZmF1bHRDb250ZXh0KGV4cHJlc3Npb24ub3BlcmFuZDIpO1xuXHRcdGNhc2UgXCJJZkVsc2VcIjpcblx0XHRcdHJldHVybiAoXG5cdFx0XHRcdGhhc1JlZmVyZW5jZVRvRGVmYXVsdENvbnRleHQoZXhwcmVzc2lvbi5jb25kaXRpb24pIHx8XG5cdFx0XHRcdGhhc1JlZmVyZW5jZVRvRGVmYXVsdENvbnRleHQoZXhwcmVzc2lvbi5vblRydWUpIHx8XG5cdFx0XHRcdGhhc1JlZmVyZW5jZVRvRGVmYXVsdENvbnRleHQoZXhwcmVzc2lvbi5vbkZhbHNlKVxuXHRcdFx0KTtcblx0XHRjYXNlIFwiTm90XCI6XG5cdFx0Y2FzZSBcIlRydXRoeVwiOlxuXHRcdFx0cmV0dXJuIGhhc1JlZmVyZW5jZVRvRGVmYXVsdENvbnRleHQoZXhwcmVzc2lvbi5vcGVyYW5kKTtcblx0XHRkZWZhdWx0OlxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG59XG5cbi8vIFRoaXMgaXMgb25lIGNhc2Ugd2hlcmUgYW55IGRvZXMgbWFrZSBzZW5zZS4uLlxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbmV4cG9ydCB0eXBlIEZuPFQ+ID0gKCguLi5wYXJhbXM6IGFueSkgPT4gVCB8IFByb21pc2U8VD4pICYge1xuXHRfX2Z1bmN0aW9uTmFtZTogc3RyaW5nO1xufTtcblxuLyoqXG4gKiBAdHlwZWRlZiBXcmFwcGVkVHVwbGVcbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudFxuLy8gQHRzLWlnbm9yZVxudHlwZSBXcmFwcGVkVHVwbGU8VD4gPSB7IFtLIGluIGtleW9mIFRdOiBXcmFwcGVkVHVwbGU8VFtLXT4gfCBFeHByZXNzaW9uT3JQcmltaXRpdmU8VFtLXT4gfCB1bmRlZmluZWQgfTtcblxuLy8gU28sIHRoaXMgd29ya3MgYnV0IEkgY2Fubm90IGdldCBpdCB0byBjb21waWxlIDpELCBidXQgaXQgc3RpbGwgZG9lcyB3aGF0IGlzIGV4cGVjdGVkLi4uXG5cbi8qKlxuICogQSBmdW5jdGlvbiByZWZlcmVuY2Ugb3IgYSBmdW5jdGlvbiBuYW1lLlxuICovXG50eXBlIEZ1bmN0aW9uT3JOYW1lPFQ+ID0gRm48VD4gfCBzdHJpbmc7XG5cbi8qKlxuICogRnVuY3Rpb24gcGFyYW1ldGVycywgZWl0aGVyIGRlcml2ZWQgZnJvbSB0aGUgZnVuY3Rpb24gb3IgYW4gdW50eXBlZCBhcnJheS5cbiAqL1xudHlwZSBGdW5jdGlvblBhcmFtZXRlcnM8VCwgRiBleHRlbmRzIEZ1bmN0aW9uT3JOYW1lPFQ+PiA9IEYgZXh0ZW5kcyBGbjxUPiA/IFBhcmFtZXRlcnM8Rj4gOiB1bmtub3duW107XG5cbi8qKlxuICogQ2FsbHMgYSBmb3JtYXR0ZXIgZnVuY3Rpb24gdG8gcHJvY2VzcyB0aGUgcGFyYW1ldGVycy5cbiAqIElmIHJlcXVpcmVDb250ZXh0IGlzIHNldCB0byB0cnVlIGFuZCBubyBjb250ZXh0IGlzIHBhc3NlZCBhIGRlZmF1bHQgY29udGV4dCB3aWxsIGJlIGFkZGVkIGF1dG9tYXRpY2FsbHkuXG4gKiBAdGVtcGxhdGUgVFxuICogQHRlbXBsYXRlIFVcbiAqIEBwYXJhbSBwYXJhbWV0ZXJzIFRoZSBsaXN0IG9mIHBhcmFtZXRlciB0aGF0IHNob3VsZCBtYXRjaCB0aGUgdHlwZSBhbmQgbnVtYmVyIG9mIHRoZSBmb3JtYXR0ZXIgZnVuY3Rpb25cbiAqIEBwYXJhbSBmb3JtYXR0ZXJGdW5jdGlvbiBUaGUgZnVuY3Rpb24gdG8gY2FsbFxuICogQHBhcmFtIFtjb250ZXh0RW50aXR5VHlwZV0gSWYgbm8gcGFyYW1ldGVyIHJlZmVycyB0byB0aGUgY29udGV4dCB0aGVuIHdlIHVzZSB0aGlzIGluZm9ybWF0aW9uIHRvIGFkZCBhIHJlZmVyZW5jZSB0byB0aGUga2V5cyBmcm9tIHRoZSBlbnRpdHkgdHlwZS5cbiAqIEBwYXJhbSBbaWdub3JlQ29tcGxleFR5cGVdIFdoZXRoZXIgdG8gaWdub3JlIHRoZSB0cmFuc2dmb3JtYXRpb24gdG8gdGhlIFN0YW5kYXJkRm9ybWF0dGVyIG9yIG5vdFxuICogQHJldHVybnMgVGhlIGNvcnJlc3BvbmRpbmcgZXhwcmVzc2lvblxuICovXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0UmVzdWx0PFQsIFUgZXh0ZW5kcyBGbjxUPj4oXG5cdHBhcmFtZXRlcnM6IFdyYXBwZWRUdXBsZTxQYXJhbWV0ZXJzPFU+Pixcblx0Zm9ybWF0dGVyRnVuY3Rpb246IFUgfCBzdHJpbmcsXG5cdGNvbnRleHRFbnRpdHlUeXBlPzogRW50aXR5VHlwZSxcblx0aWdub3JlQ29tcGxleFR5cGUgPSBmYWxzZVxuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFQ+IHtcblx0Y29uc3QgcGFyYW1ldGVyRXhwcmVzc2lvbnMgPSAocGFyYW1ldGVycyBhcyBFeHByZXNzaW9uT3JQcmltaXRpdmU8UHJpbWl0aXZlVHlwZT5bXSkubWFwKHdyYXBQcmltaXRpdmUpO1xuXG5cdGlmIChoYXNVbnJlc29sdmFibGVFeHByZXNzaW9uKC4uLnBhcmFtZXRlckV4cHJlc3Npb25zKSkge1xuXHRcdHJldHVybiB1bnJlc29sdmFibGVFeHByZXNzaW9uO1xuXHR9XG5cdGlmIChjb250ZXh0RW50aXR5VHlwZSkge1xuXHRcdC8vIE90aGVyd2lzZSwgaWYgdGhlIGNvbnRleHQgaXMgcmVxdWlyZWQgYW5kIG5vIGNvbnRleHQgaXMgcHJvdmlkZWQgbWFrZSBzdXJlIHRvIGFkZCB0aGUgZGVmYXVsdCBiaW5kaW5nXG5cdFx0aWYgKCFwYXJhbWV0ZXJFeHByZXNzaW9ucy5zb21lKGhhc1JlZmVyZW5jZVRvRGVmYXVsdENvbnRleHQpKSB7XG5cdFx0XHRjb250ZXh0RW50aXR5VHlwZS5rZXlzLmZvckVhY2goKGtleSkgPT4gcGFyYW1ldGVyRXhwcmVzc2lvbnMucHVzaChwYXRoSW5Nb2RlbChrZXkubmFtZSwgXCJcIikpKTtcblx0XHR9XG5cdH1cblx0bGV0IGZ1bmN0aW9uTmFtZSA9IFwiXCI7XG5cdGlmICh0eXBlb2YgZm9ybWF0dGVyRnVuY3Rpb24gPT09IFwic3RyaW5nXCIpIHtcblx0XHRmdW5jdGlvbk5hbWUgPSBmb3JtYXR0ZXJGdW5jdGlvbjtcblx0fSBlbHNlIHtcblx0XHRmdW5jdGlvbk5hbWUgPSBmb3JtYXR0ZXJGdW5jdGlvbi5fX2Z1bmN0aW9uTmFtZTtcblx0fVxuXHQvLyBGb3JtYXR0ZXJOYW1lIGNhbiBiZSBvZiBmb3JtYXQgc2FwLmZlLmNvcmUueHh4I21ldGhvZE5hbWUgdG8gaGF2ZSBtdWx0aXBsZSBmb3JtYXR0ZXIgaW4gb25lIGNsYXNzXG5cdGNvbnN0IFtmb3JtYXR0ZXJDbGFzcywgZm9ybWF0dGVyTmFtZV0gPSBmdW5jdGlvbk5hbWUuc3BsaXQoXCIjXCIpO1xuXG5cdC8vIEluIHNvbWUgY2FzZSB3ZSBhbHNvIGNhbm5vdCBjYWxsIGRpcmVjdGx5IGEgZnVuY3Rpb24gYmVjYXVzZSBvZiB0b28gY29tcGxleCBpbnB1dCwgaW4gdGhhdCBjYXNlIHdlIG5lZWQgdG8gY29udmVydCB0byBhIHNpbXBsZXIgZnVuY3Rpb24gY2FsbFxuXHRpZiAoXG5cdFx0IWlnbm9yZUNvbXBsZXhUeXBlICYmXG5cdFx0KHBhcmFtZXRlckV4cHJlc3Npb25zLnNvbWUoaXNDb21wbGV4VHlwZUV4cHJlc3Npb24pIHx8XG5cdFx0XHRwYXJhbWV0ZXJFeHByZXNzaW9ucy5zb21lKGlzQ29uY2F0RXhwcmVzc2lvbikgfHxcblx0XHRcdHBhcmFtZXRlckV4cHJlc3Npb25zLnNvbWUoaXNJZkVsc2VFeHByZXNzaW9uKSlcblx0KSB7XG5cdFx0bGV0IHBhdGhJZHggPSAwO1xuXHRcdGNvbnN0IG15Rm9ybWF0RXhwcmVzc2lvbiA9IGZvcm1hdFJlc3VsdChwYXJhbWV0ZXJFeHByZXNzaW9ucywgZnVuY3Rpb25OYW1lLCB1bmRlZmluZWQsIHRydWUpO1xuXHRcdGNvbnN0IGFsbFBhcnRzID0gW107XG5cdFx0dHJhbnNmb3JtUmVjdXJzaXZlbHkoXG5cdFx0XHRteUZvcm1hdEV4cHJlc3Npb24sXG5cdFx0XHRcIlBhdGhJbk1vZGVsXCIsXG5cdFx0XHQoY29uc3RhbnRQYXRoOiBQYXRoSW5Nb2RlbEV4cHJlc3Npb248dW5rbm93bj4pID0+IHtcblx0XHRcdFx0YWxsUGFydHMucHVzaChjb25zdGFudFBhdGgpO1xuXHRcdFx0XHRyZXR1cm4gcGF0aEluTW9kZWwoYCQke3BhdGhJZHgrK31gLCBcIiRcIik7XG5cdFx0XHR9LFxuXHRcdFx0dHJ1ZVxuXHRcdCk7XG5cdFx0YWxsUGFydHMudW5zaGlmdChjb25zdGFudChKU09OLnN0cmluZ2lmeShteUZvcm1hdEV4cHJlc3Npb24pKSk7XG5cdFx0cmV0dXJuIGZvcm1hdFJlc3VsdChhbGxQYXJ0cywgXCIuX2Zvcm1hdHRlcnMuU3RhbmRhcmRGb3JtYXR0ZXIuYmluZCgkY29udHJvbCkjZXZhbHVhdGVDb21wbGV4RXhwcmVzc2lvblwiLCB1bmRlZmluZWQsIHRydWUpO1xuXHR9IGVsc2UgaWYgKCEhZm9ybWF0dGVyTmFtZSAmJiBmb3JtYXR0ZXJOYW1lLmxlbmd0aCA+IDApIHtcblx0XHRwYXJhbWV0ZXJFeHByZXNzaW9ucy51bnNoaWZ0KGNvbnN0YW50KGZvcm1hdHRlck5hbWUpKTtcblx0fVxuXG5cdHJldHVybiB7XG5cdFx0X3R5cGU6IFwiRm9ybWF0dGVyXCIsXG5cdFx0Zm46IGZvcm1hdHRlckNsYXNzLFxuXHRcdHBhcmFtZXRlcnM6IHBhcmFtZXRlckV4cHJlc3Npb25zXG5cdH07XG59XG5cbnR5cGUgQmluZGluZ0NvbnN0cmFpbnRzID0ge1xuXHRzY2FsZT86IG51bWJlciB8IHN0cmluZztcblx0cHJlY2lzaW9uPzogbnVtYmVyO1xuXHRtYXhMZW5ndGg/OiBudW1iZXI7XG5cdG51bGxhYmxlPzogYm9vbGVhbjtcblx0bWluaW11bT86IHN0cmluZztcblx0bWF4aW11bT86IHN0cmluZztcblx0aXNEaWdpdFNlcXVlbmNlPzogYm9vbGVhbjtcblx0VjQ/OiBib29sZWFuO1xufTtcbmV4cG9ydCBmdW5jdGlvbiBzZXRVcENvbnN0cmFpbnRzKHRhcmdldE1hcHBpbmc6IFR5cGVNYXBwaW5nRGVmaW5pdGlvbiwgcHJvcGVydHk6IFByb3BlcnR5IHwgQWN0aW9uUGFyYW1ldGVyKTogQmluZGluZ0NvbnN0cmFpbnRzIHtcblx0Y29uc3QgY29uc3RyYWludHM6IEJpbmRpbmdDb25zdHJhaW50cyA9IHt9O1xuXHRpZiAodGFyZ2V0TWFwcGluZz8uY29uc3RyYWludHM/LiRTY2FsZSAmJiBwcm9wZXJ0eS5zY2FsZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0Y29uc3RyYWludHMuc2NhbGUgPSBwcm9wZXJ0eS5zY2FsZTtcblx0fVxuXHRpZiAodGFyZ2V0TWFwcGluZz8uY29uc3RyYWludHM/LiRQcmVjaXNpb24gJiYgcHJvcGVydHkucHJlY2lzaW9uICE9PSB1bmRlZmluZWQpIHtcblx0XHRjb25zdHJhaW50cy5wcmVjaXNpb24gPSBwcm9wZXJ0eS5wcmVjaXNpb247XG5cdH1cblx0aWYgKHRhcmdldE1hcHBpbmc/LmNvbnN0cmFpbnRzPy4kTWF4TGVuZ3RoICYmIHByb3BlcnR5Lm1heExlbmd0aCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0Y29uc3RyYWludHMubWF4TGVuZ3RoID0gcHJvcGVydHkubWF4TGVuZ3RoO1xuXHR9XG5cdGlmIChwcm9wZXJ0eS5udWxsYWJsZSA9PT0gZmFsc2UpIHtcblx0XHRjb25zdHJhaW50cy5udWxsYWJsZSA9IGZhbHNlO1xuXHR9XG5cdGlmICh0YXJnZXRNYXBwaW5nPy5jb25zdHJhaW50cz8uW1wiQE9yZy5PRGF0YS5WYWxpZGF0aW9uLlYxLk1pbmltdW0vJERlY2ltYWxcIl0gJiYgIWlzTmFOKHByb3BlcnR5LmFubm90YXRpb25zPy5WYWxpZGF0aW9uPy5NaW5pbXVtKSkge1xuXHRcdGNvbnN0cmFpbnRzLm1pbmltdW0gPSBgJHtwcm9wZXJ0eS5hbm5vdGF0aW9ucz8uVmFsaWRhdGlvbj8uTWluaW11bX1gO1xuXHR9XG5cdGlmICh0YXJnZXRNYXBwaW5nPy5jb25zdHJhaW50cz8uW1wiQE9yZy5PRGF0YS5WYWxpZGF0aW9uLlYxLk1heGltdW0vJERlY2ltYWxcIl0gJiYgIWlzTmFOKHByb3BlcnR5LmFubm90YXRpb25zPy5WYWxpZGF0aW9uPy5NYXhpbXVtKSkge1xuXHRcdGNvbnN0cmFpbnRzLm1heGltdW0gPSBgJHtwcm9wZXJ0eS5hbm5vdGF0aW9ucz8uVmFsaWRhdGlvbj8uTWF4aW11bX1gO1xuXHR9XG5cdGlmIChcblx0XHRwcm9wZXJ0eS5hbm5vdGF0aW9ucz8uQ29tbW9uPy5Jc0RpZ2l0U2VxdWVuY2UgJiZcblx0XHR0YXJnZXRNYXBwaW5nLnR5cGUgPT09IFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuU3RyaW5nXCIgJiZcblx0XHR0YXJnZXRNYXBwaW5nPy5jb25zdHJhaW50cz8uW1wiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5Jc0RpZ2l0U2VxdWVuY2VcIl1cblx0KSB7XG5cdFx0Y29uc3RyYWludHMuaXNEaWdpdFNlcXVlbmNlID0gdHJ1ZTtcblx0fVxuXHRpZiAodGFyZ2V0TWFwcGluZz8uY29uc3RyYWludHM/LiRWNCkge1xuXHRcdGNvbnN0cmFpbnRzLlY0ID0gdHJ1ZTtcblx0fVxuXHRyZXR1cm4gY29uc3RyYWludHM7XG59XG5cbi8qKlxuICogR2VuZXJhdGVzIHRoZSBiaW5kaW5nIGV4cHJlc3Npb24gZm9yIHRoZSBwcm9wZXJ0eSwgYW5kIHNldHMgdXAgdGhlIGZvcm1hdE9wdGlvbnMgYW5kIGNvbnN0cmFpbnRzLlxuICogQHBhcmFtIHByb3BlcnR5IFRoZSBQcm9wZXJ0eSBmb3Igd2hpY2ggd2UgYXJlIHNldHRpbmcgdXAgdGhlIGJpbmRpbmdcbiAqIEBwYXJhbSBwcm9wZXJ0eUJpbmRpbmdFeHByZXNzaW9uIFRoZSBCaW5kaW5nRXhwcmVzc2lvbiBvZiB0aGUgcHJvcGVydHkgYWJvdmUuIFNlcnZlcyBhcyB0aGUgYmFzaXMgdG8gd2hpY2ggaW5mb3JtYXRpb24gY2FuIGJlIGFkZGVkXG4gKiBAcGFyYW0gaWdub3JlQ29uc3RyYWludHMgSWdub3JlIGNvbnN0cmFpbnRzIG9mIHRoZSBwcm9wZXJ0eVxuICogQHJldHVybnMgVGhlIGJpbmRpbmcgZXhwcmVzc2lvbiBmb3IgdGhlIHByb3BlcnR5IHdpdGggZm9ybWF0T3B0aW9ucyBhbmQgY29uc3RyYWludHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdFdpdGhUeXBlSW5mb3JtYXRpb248VD4oXG5cdHByb3BlcnR5OiBQcm9wZXJ0eSB8IEFjdGlvblBhcmFtZXRlcixcblx0cHJvcGVydHlCaW5kaW5nRXhwcmVzc2lvbjogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHN0cmluZz4sXG5cdGlnbm9yZUNvbnN0cmFpbnRzID0gZmFsc2Vcbik6IFBhdGhJbk1vZGVsRXhwcmVzc2lvbjxUPiB7XG5cdGNvbnN0IG91dEV4cHJlc3Npb246IFBhdGhJbk1vZGVsRXhwcmVzc2lvbjx1bmtub3duPiA9IHByb3BlcnR5QmluZGluZ0V4cHJlc3Npb24gYXMgUGF0aEluTW9kZWxFeHByZXNzaW9uPHVua25vd24+O1xuXHRpZiAocHJvcGVydHkuX3R5cGUgIT09IFwiUHJvcGVydHlcIiAmJiBwcm9wZXJ0eS5fdHlwZSAhPT0gXCJBY3Rpb25QYXJhbWV0ZXJcIikge1xuXHRcdHJldHVybiBvdXRFeHByZXNzaW9uO1xuXHR9XG5cdGNvbnN0IHRhcmdldE1hcHBpbmcgPSBFRE1fVFlQRV9NQVBQSU5HW3Byb3BlcnR5LnR5cGVdO1xuXHRpZiAoIXRhcmdldE1hcHBpbmcpIHtcblx0XHRyZXR1cm4gb3V0RXhwcmVzc2lvbjtcblx0fVxuXHRpZiAoIW91dEV4cHJlc3Npb24uZm9ybWF0T3B0aW9ucykge1xuXHRcdG91dEV4cHJlc3Npb24uZm9ybWF0T3B0aW9ucyA9IHt9O1xuXHR9XG5cdG91dEV4cHJlc3Npb24uY29uc3RyYWludHMgPSB7fTtcblxuXHRvdXRFeHByZXNzaW9uLnR5cGUgPSB0YXJnZXRNYXBwaW5nLnR5cGU7XG5cdGlmICghaWdub3JlQ29uc3RyYWludHMpIHtcblx0XHRvdXRFeHByZXNzaW9uLmNvbnN0cmFpbnRzID0gc2V0VXBDb25zdHJhaW50cyh0YXJnZXRNYXBwaW5nLCBwcm9wZXJ0eSk7XG5cdH1cblxuXHRpZiAoXG5cdFx0KG91dEV4cHJlc3Npb24/LnR5cGU/LmluZGV4T2YoXCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5JbnRcIikgPT09IDAgJiYgb3V0RXhwcmVzc2lvbj8udHlwZSAhPT0gXCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5JbnQ2NFwiKSB8fFxuXHRcdG91dEV4cHJlc3Npb24/LnR5cGUgPT09IFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuRG91YmxlXCJcblx0KSB7XG5cdFx0b3V0RXhwcmVzc2lvbi5mb3JtYXRPcHRpb25zID0gT2JqZWN0LmFzc2lnbihvdXRFeHByZXNzaW9uLmZvcm1hdE9wdGlvbnMsIHtcblx0XHRcdHBhcnNlQXNTdHJpbmc6IGZhbHNlXG5cdFx0fSk7XG5cdH1cblx0aWYgKG91dEV4cHJlc3Npb24udHlwZSA9PT0gXCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5TdHJpbmdcIiAmJiAoaXNQcm9wZXJ0eShwcm9wZXJ0eSkgfHwgaXNBY3Rpb25QYXJhbWV0ZXIocHJvcGVydHkpKSkge1xuXHRcdGlmIChvdXRFeHByZXNzaW9uLmNvbnN0cmFpbnRzPy5pc0RpZ2l0U2VxdWVuY2UgfHwgKG91dEV4cHJlc3Npb24uY29uc3RyYWludHM/Lm51bGxhYmxlICE9PSBmYWxzZSAmJiBwcm9wZXJ0eS5udWxsYWJsZSA9PT0gdHJ1ZSkpIHtcblx0XHRcdG91dEV4cHJlc3Npb24uZm9ybWF0T3B0aW9ucy5wYXJzZUtlZXBzRW1wdHlTdHJpbmcgPSBmYWxzZTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0b3V0RXhwcmVzc2lvbi5mb3JtYXRPcHRpb25zLnBhcnNlS2VlcHNFbXB0eVN0cmluZyA9IHRydWU7XG5cdFx0fVxuXHRcdGlmIChpc1Byb3BlcnR5KHByb3BlcnR5KSkge1xuXHRcdFx0Y29uc3QgZmlzY2FsVHlwZSA9IGdldEZpc2NhbFR5cGUocHJvcGVydHkpO1xuXHRcdFx0aWYgKGZpc2NhbFR5cGUpIHtcblx0XHRcdFx0b3V0RXhwcmVzc2lvbi5mb3JtYXRPcHRpb25zLmZpc2NhbFR5cGUgPSBmaXNjYWxUeXBlO1xuXHRcdFx0XHRvdXRFeHByZXNzaW9uLnR5cGUgPSBcInNhcC5mZS5jb3JlLnR5cGUuRmlzY2FsRGF0ZVwiO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHRjb25zdCB0eXBlc1N1cHBvcnRpbmdQYXJzZUVtcHR5VmFsdWVUb1plcm8gPSBbXG5cdFx0XCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5JbnQxNlwiLFxuXHRcdFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuSW50MzJcIixcblx0XHRcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLkludDY0XCIsXG5cdFx0XCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5TaW5nbGVcIixcblx0XHRcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLkRvdWJsZVwiLFxuXHRcdFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuRGVjaW1hbFwiLFxuXHRcdFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuQnl0ZVwiLFxuXHRcdFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuU0J5dGVcIlxuXHRdO1xuXHRpZiAoXG5cdFx0b3V0RXhwcmVzc2lvbi5jb25zdHJhaW50cz8ubnVsbGFibGUgPT09IGZhbHNlICYmXG5cdFx0b3V0RXhwcmVzc2lvbi50eXBlICYmXG5cdFx0dHlwZXNTdXBwb3J0aW5nUGFyc2VFbXB0eVZhbHVlVG9aZXJvLmluY2x1ZGVzKG91dEV4cHJlc3Npb24udHlwZSlcblx0KSB7XG5cdFx0b3V0RXhwcmVzc2lvbi5mb3JtYXRPcHRpb25zID0gT2JqZWN0LmFzc2lnbihvdXRFeHByZXNzaW9uLmZvcm1hdE9wdGlvbnMsIHtcblx0XHRcdHBhcnNlRW1wdHlWYWx1ZVRvWmVybzogdHJ1ZVxuXHRcdH0pO1xuXHR9XG5cdGlmIChcblx0XHRvdXRFeHByZXNzaW9uLmNvbnN0cmFpbnRzPy5udWxsYWJsZSAhPT0gZmFsc2UgJiZcblx0XHQob3V0RXhwcmVzc2lvbi50eXBlID09PSBcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLkludDY0XCIgfHwgb3V0RXhwcmVzc2lvbi50eXBlID09PSBcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLkRlY2ltYWxcIilcblx0KSB7XG5cdFx0b3V0RXhwcmVzc2lvbi5mb3JtYXRPcHRpb25zID0gT2JqZWN0LmFzc2lnbihvdXRFeHByZXNzaW9uLmZvcm1hdE9wdGlvbnMsIHtcblx0XHRcdGVtcHR5U3RyaW5nOiBcIlwiXG5cdFx0fSk7XG5cdH1cblxuXHRyZXR1cm4gb3V0RXhwcmVzc2lvbjtcbn1cblxuZXhwb3J0IGNvbnN0IGdldEZpc2NhbFR5cGUgPSBmdW5jdGlvbiAocHJvcGVydHk6IFByb3BlcnR5KTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0aWYgKHByb3BlcnR5LmFubm90YXRpb25zPy5Db21tb24/LklzRmlzY2FsWWVhcikge1xuXHRcdHJldHVybiBDb21tb25Bbm5vdGF0aW9uVGVybXMuSXNGaXNjYWxZZWFyO1xuXHR9XG5cdGlmIChwcm9wZXJ0eS5hbm5vdGF0aW9ucz8uQ29tbW9uPy5Jc0Zpc2NhbFBlcmlvZCkge1xuXHRcdHJldHVybiBDb21tb25Bbm5vdGF0aW9uVGVybXMuSXNGaXNjYWxQZXJpb2Q7XG5cdH1cblx0aWYgKHByb3BlcnR5LmFubm90YXRpb25zPy5Db21tb24/LklzRmlzY2FsWWVhclBlcmlvZCkge1xuXHRcdHJldHVybiBDb21tb25Bbm5vdGF0aW9uVGVybXMuSXNGaXNjYWxZZWFyUGVyaW9kO1xuXHR9XG5cdGlmIChwcm9wZXJ0eS5hbm5vdGF0aW9ucz8uQ29tbW9uPy5Jc0Zpc2NhbFF1YXJ0ZXIpIHtcblx0XHRyZXR1cm4gQ29tbW9uQW5ub3RhdGlvblRlcm1zLklzRmlzY2FsUXVhcnRlcjtcblx0fVxuXHRpZiAocHJvcGVydHkuYW5ub3RhdGlvbnM/LkNvbW1vbj8uSXNGaXNjYWxZZWFyUXVhcnRlcikge1xuXHRcdHJldHVybiBDb21tb25Bbm5vdGF0aW9uVGVybXMuSXNGaXNjYWxZZWFyUXVhcnRlcjtcblx0fVxuXHRpZiAocHJvcGVydHkuYW5ub3RhdGlvbnM/LkNvbW1vbj8uSXNGaXNjYWxXZWVrKSB7XG5cdFx0cmV0dXJuIENvbW1vbkFubm90YXRpb25UZXJtcy5Jc0Zpc2NhbFdlZWs7XG5cdH1cblx0aWYgKHByb3BlcnR5LmFubm90YXRpb25zPy5Db21tb24/LklzRmlzY2FsWWVhcldlZWspIHtcblx0XHRyZXR1cm4gQ29tbW9uQW5ub3RhdGlvblRlcm1zLklzRmlzY2FsWWVhcldlZWs7XG5cdH1cblx0aWYgKHByb3BlcnR5LmFubm90YXRpb25zPy5Db21tb24/LklzRGF5T2ZGaXNjYWxZZWFyKSB7XG5cdFx0cmV0dXJuIENvbW1vbkFubm90YXRpb25UZXJtcy5Jc0RheU9mRmlzY2FsWWVhcjtcblx0fVxufTtcblxuLyoqXG4gKiBDYWxscyBhIGNvbXBsZXggdHlwZSB0byBwcm9jZXNzIHRoZSBwYXJhbWV0ZXJzLlxuICogSWYgcmVxdWlyZUNvbnRleHQgaXMgc2V0IHRvIHRydWUgYW5kIG5vIGNvbnRleHQgaXMgcGFzc2VkLCBhIGRlZmF1bHQgY29udGV4dCB3aWxsIGJlIGFkZGVkIGF1dG9tYXRpY2FsbHkuXG4gKiBAdGVtcGxhdGUgVFxuICogQHRlbXBsYXRlIFVcbiAqIEBwYXJhbSBwYXJhbWV0ZXJzIFRoZSBsaXN0IG9mIHBhcmFtZXRlcnMgdGhhdCBzaG91bGQgbWF0Y2ggdGhlIHR5cGUgZm9yIHRoZSBjb21wbGV4IHR5cGU9XG4gKiBAcGFyYW0gdHlwZSBUaGUgY29tcGxleCB0eXBlIHRvIHVzZVxuICogQHBhcmFtIFtjb250ZXh0RW50aXR5VHlwZV0gVGhlIGNvbnRleHQgZW50aXR5IHR5cGUgdG8gY29uc2lkZXJcbiAqIEBwYXJhbSBvRm9ybWF0T3B0aW9uc1xuICogQHBhcmFtIG9Db25zdHJhaW50T3B0aW9uc1xuICogQHJldHVybnMgVGhlIGNvcnJlc3BvbmRpbmcgZXhwcmVzc2lvblxuICovXG5leHBvcnQgZnVuY3Rpb24gYWRkVHlwZUluZm9ybWF0aW9uPFQsIFUgZXh0ZW5kcyBGbjxUPj4oXG5cdHBhcmFtZXRlcnM6IFdyYXBwZWRUdXBsZTxQYXJhbWV0ZXJzPFU+Pixcblx0dHlwZTogc3RyaW5nLFxuXHRjb250ZXh0RW50aXR5VHlwZT86IEVudGl0eVR5cGUsXG5cdG9Gb3JtYXRPcHRpb25zPzogQ29tcGxleFR5cGVGb3JtYXRPcHRpb25zLFxuXHRvQ29uc3RyYWludE9wdGlvbnM/OiBDb21wbGV4VHlwZUNvbnN0cmFpbnRPcHRpb25zXG4pOiBVbnJlc29sdmFibGVQYXRoRXhwcmVzc2lvbiB8IENvbXBsZXhUeXBlRXhwcmVzc2lvbjxUPiB8IENvbnN0YW50RXhwcmVzc2lvbjxUPiB7XG5cdGNvbnN0IHBhcmFtZXRlckV4cHJlc3Npb25zID0gKHBhcmFtZXRlcnMgYXMgRXhwcmVzc2lvbk9yUHJpbWl0aXZlPFByaW1pdGl2ZVR5cGU+W10pLm1hcCh3cmFwUHJpbWl0aXZlKTtcblx0aWYgKGhhc1VucmVzb2x2YWJsZUV4cHJlc3Npb24oLi4ucGFyYW1ldGVyRXhwcmVzc2lvbnMpKSB7XG5cdFx0cmV0dXJuIHVucmVzb2x2YWJsZUV4cHJlc3Npb247XG5cdH1cblx0Ly8gSWYgdGhlcmUgaXMgb25seSBvbmUgcGFyYW1ldGVyIGFuZCBpdCBpcyBhIGNvbnN0YW50IGFuZCB3ZSBkb24ndCBleHBlY3QgdGhlIGNvbnRleHQgdGhlbiByZXR1cm4gdGhlIGNvbnN0YW50XG5cdGlmIChwYXJhbWV0ZXJFeHByZXNzaW9ucy5sZW5ndGggPT09IDEgJiYgaXNDb25zdGFudChwYXJhbWV0ZXJFeHByZXNzaW9uc1swXSkgJiYgIWNvbnRleHRFbnRpdHlUeXBlKSB7XG5cdFx0cmV0dXJuIHBhcmFtZXRlckV4cHJlc3Npb25zWzBdIGFzIENvbnN0YW50RXhwcmVzc2lvbjxUPjtcblx0fSBlbHNlIGlmIChjb250ZXh0RW50aXR5VHlwZSkge1xuXHRcdC8vIE90aGVyd2lzZSwgaWYgdGhlIGNvbnRleHQgaXMgcmVxdWlyZWQgYW5kIG5vIGNvbnRleHQgaXMgcHJvdmlkZWQgbWFrZSBzdXJlIHRvIGFkZCB0aGUgZGVmYXVsdCBiaW5kaW5nXG5cdFx0aWYgKCFwYXJhbWV0ZXJFeHByZXNzaW9ucy5zb21lKGhhc1JlZmVyZW5jZVRvRGVmYXVsdENvbnRleHQpKSB7XG5cdFx0XHRjb250ZXh0RW50aXR5VHlwZS5rZXlzLmZvckVhY2goKGtleSkgPT4gcGFyYW1ldGVyRXhwcmVzc2lvbnMucHVzaChwYXRoSW5Nb2RlbChrZXkubmFtZSwgXCJcIikpKTtcblx0XHR9XG5cdH1cblx0b0Zvcm1hdE9wdGlvbnMgPSBfZ2V0Q29tcGxleFR5cGVGb3JtYXRPcHRpb25zRnJvbUZpcnN0UGFyYW0ocGFyYW1ldGVyc1swXSwgb0Zvcm1hdE9wdGlvbnMpO1xuXG5cdGlmICh0eXBlID09PSBcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLlVuaXRcIikge1xuXHRcdGNvbnN0IHVvbVBhdGggPSBwYXRoSW5Nb2RlbChcIi8jI0BAcmVxdWVzdFVuaXRzT2ZNZWFzdXJlXCIpO1xuXHRcdHVvbVBhdGgudGFyZ2V0VHlwZSA9IFwiYW55XCI7XG5cdFx0dW9tUGF0aC5tb2RlID0gXCJPbmVUaW1lXCI7XG5cdFx0b0Zvcm1hdE9wdGlvbnMgPz89IHt9O1xuXHRcdG9Gb3JtYXRPcHRpb25zLnByZXNlcnZlRGVjaW1hbHMgPSBvQ29uc3RyYWludE9wdGlvbnM/LnNraXBEZWNpbWFsc1ZhbGlkYXRpb24gPz8gZmFsc2U7XG5cdFx0cGFyYW1ldGVyRXhwcmVzc2lvbnMucHVzaCh1b21QYXRoKTtcblx0fSBlbHNlIGlmICh0eXBlID09PSBcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLkN1cnJlbmN5XCIgfHwgdHlwZSA9PT0gXCJzYXAuZmUuY29yZS50eXBlLkR5bmFtaWNDdXJyZW5jeVwiKSB7XG5cdFx0Y29uc3QgY3VycmVuY3lQYXRoID0gcGF0aEluTW9kZWwoXCIvIyNAQHJlcXVlc3RDdXJyZW5jeUNvZGVzXCIpO1xuXHRcdGN1cnJlbmN5UGF0aC50YXJnZXRUeXBlID0gXCJhbnlcIjtcblx0XHRjdXJyZW5jeVBhdGgubW9kZSA9IFwiT25lVGltZVwiO1xuXHRcdG9Gb3JtYXRPcHRpb25zID8/PSB7fTtcblx0XHRpZiAob0NvbnN0cmFpbnRPcHRpb25zPy5za2lwRGVjaW1hbHNWYWxpZGF0aW9uID09PSB0cnVlKSB7XG5cdFx0XHQvLyBUaGlzIGRvZXNuJ3QgZG8gYW55dGhpbmcgYmVjYXVzZSBpdCBnZXRzIG92ZXJ3cml0dGVuIGJ5IHRoZSBgZGVjaW1hbHNgIGZyb20gdGhlIGN1cnJlbmN5IGNvZGUgbGlzdFxuXHRcdFx0b0Zvcm1hdE9wdGlvbnMubWF4RnJhY3Rpb25EaWdpdHMgPSA5OTsgLy8gc2V0dGluZyB0byA5OSB0byBhdm9pZCByb3VuZGluZyBpbiBjdXJyZW5jeSBjb252ZXJzaW9uXG5cdFx0fVxuXG5cdFx0b0Zvcm1hdE9wdGlvbnMucHJlc2VydmVEZWNpbWFscyA9IG9Db25zdHJhaW50T3B0aW9ucz8uc2tpcERlY2ltYWxzVmFsaWRhdGlvbiA/PyBmYWxzZTsgLy8gZGVmYXVsdCB2YWx1ZSBzaW5jZSB3ZSBkb24ndCBoYXZlIGEgQ0xEUlxuXHRcdHBhcmFtZXRlckV4cHJlc3Npb25zLnB1c2goY3VycmVuY3lQYXRoKTtcblx0fVxuXG5cdHJldHVybiB7XG5cdFx0X3R5cGU6IFwiQ29tcGxleFR5cGVcIixcblx0XHR0eXBlOiB0eXBlLFxuXHRcdGZvcm1hdE9wdGlvbnM6IG9Gb3JtYXRPcHRpb25zIHx8IHt9LFxuXHRcdGNvbnN0cmFpbnRzOiBvQ29uc3RyYWludE9wdGlvbnMgfHwge30sXG5cdFx0cGFyYW1ldGVyczoge30sXG5cdFx0YmluZGluZ1BhcmFtZXRlcnM6IHBhcmFtZXRlckV4cHJlc3Npb25zXG5cdH07XG59XG5cbnR5cGUgQ29tcGxleFR5cGVGb3JtYXRPcHRpb25zID0ge1xuXHRkZWNpbWFscz86IG51bWJlcjtcblx0bWF4RnJhY3Rpb25EaWdpdHM/OiBudW1iZXI7XG5cdHNob3dOdW1iZXI/OiBib29sZWFuO1xuXHRzaG93TWVhc3VyZT86IGJvb2xlYW47XG5cdHBhcnNlQXNTdHJpbmc/OiBib29sZWFuO1xuXHRwYXJzZUtlZXBzRW1wdHlTdHJpbmc/OiBib29sZWFuO1xuXHRlbXB0eVN0cmluZz86IHN0cmluZyB8IG51bWJlciB8IG51bGw7XG5cdHNob3dUaW1lPzogYm9vbGVhbjtcblx0c2hvd0RhdGU/OiBib29sZWFuO1xuXHRzaG93VGltZXpvbmU/OiBib29sZWFuO1xuXHRwcmVzZXJ2ZURlY2ltYWxzPzogYm9vbGVhbjtcblx0ZGVjaW1hbFBhZGRpbmc/OiBudW1iZXI7XG59O1xuXG5leHBvcnQgdHlwZSBDb21wbGV4VHlwZUNvbnN0cmFpbnRPcHRpb25zID0ge1xuXHRza2lwRGVjaW1hbHNWYWxpZGF0aW9uPzogYm9vbGVhbjtcbn07XG5cbi8qKlxuICogUHJvY2VzcyB0aGUgZm9ybWF0T3B0aW9ucyBmb3IgYSBjb21wbGV4VHlwZSBiYXNlZCBvbiB0aGUgZmlyc3QgcGFyYW1ldGVyLlxuICogQHBhcmFtIHBhcmFtIFRoZSBmaXJzdCBwYXJhbWV0ZXIgb2YgdGhlIGNvbXBsZXggdHlwZVxuICogQHBhcmFtIGZvcm1hdE9wdGlvbnMgSW5pdGlhbCBmb3JtYXRPcHRpb25zXG4gKiBAcmV0dXJucyBUaGUgbW9kaWZpZWQgZm9ybWF0T3B0aW9uc1xuICovXG5mdW5jdGlvbiBfZ2V0Q29tcGxleFR5cGVGb3JtYXRPcHRpb25zRnJvbUZpcnN0UGFyYW0oXG5cdHBhcmFtOiBQYXRoSW5Nb2RlbEV4cHJlc3Npb248UHJpbWl0aXZlVHlwZT4sXG5cdGZvcm1hdE9wdGlvbnM6IHVuZGVmaW5lZCB8IENvbXBsZXhUeXBlRm9ybWF0T3B0aW9uc1xuKTogQ29tcGxleFR5cGVGb3JtYXRPcHRpb25zIHwgdW5kZWZpbmVkIHtcblx0Ly8gaWYgc2hvd01lYXN1cmUgaXMgc2V0IHRvIGZhbHNlIHdlIHdhbnQgdG8gbm90IHBhcnNlIGFzIHN0cmluZyB0byBzZWUgdGhlIDBcblx0Ly8gd2UgZG8gdGhhdCBhbHNvIGZvciBhbGwgYmluZGluZ3MgYmVjYXVzZSBvdGhlcndpc2UgdGhlIG1kYyBGaWVsZCBpc24ndCBlZGl0YWJsZVxuXHRpZiAoXG5cdFx0IShmb3JtYXRPcHRpb25zICYmIGZvcm1hdE9wdGlvbnMuc2hvd051bWJlciA9PT0gZmFsc2UpICYmXG5cdFx0KHBhcmFtPy50eXBlPy5pbmRleE9mKFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuSW50XCIpID09PSAwIHx8XG5cdFx0XHRwYXJhbT8udHlwZSA9PT0gXCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5EZWNpbWFsXCIgfHxcblx0XHRcdHBhcmFtPy50eXBlID09PSBcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLkRvdWJsZVwiKVxuXHQpIHtcblx0XHRpZiAocGFyYW0/LnR5cGUgPT09IFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuSW50NjRcIiB8fCBwYXJhbT8udHlwZSA9PT0gXCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5EZWNpbWFsXCIpIHtcblx0XHRcdC8vc2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuSW50NjQgZG8gbm90IHN1cHBvcnQgcGFyc2VBc1N0cmluZyBmYWxzZVxuXHRcdFx0Zm9ybWF0T3B0aW9ucyA9XG5cdFx0XHRcdGZvcm1hdE9wdGlvbnM/LnNob3dNZWFzdXJlID09PSBmYWxzZVxuXHRcdFx0XHRcdD8ge1xuXHRcdFx0XHRcdFx0XHRzaG93TWVhc3VyZTogZmFsc2UsXG5cdFx0XHRcdFx0XHRcdGRlY2ltYWxQYWRkaW5nOiBmb3JtYXRPcHRpb25zLmRlY2ltYWxQYWRkaW5nLFxuXHRcdFx0XHRcdFx0XHRlbXB0eVN0cmluZzogZm9ybWF0T3B0aW9ucz8uZW1wdHlTdHJpbmdcblx0XHRcdFx0XHQgIH1cblx0XHRcdFx0XHQ6IHtcblx0XHRcdFx0XHRcdFx0ZGVjaW1hbFBhZGRpbmc6IGZvcm1hdE9wdGlvbnM/LmRlY2ltYWxQYWRkaW5nLFxuXHRcdFx0XHRcdFx0XHRlbXB0eVN0cmluZzogZm9ybWF0T3B0aW9ucz8uZW1wdHlTdHJpbmdcblx0XHRcdFx0XHQgIH07XG5cdFx0fSBlbHNlIHtcblx0XHRcdGZvcm1hdE9wdGlvbnMgPVxuXHRcdFx0XHRmb3JtYXRPcHRpb25zPy5zaG93TWVhc3VyZSA9PT0gZmFsc2Vcblx0XHRcdFx0XHQ/IHtcblx0XHRcdFx0XHRcdFx0cGFyc2VBc1N0cmluZzogZmFsc2UsXG5cdFx0XHRcdFx0XHRcdHNob3dNZWFzdXJlOiBmYWxzZSxcblx0XHRcdFx0XHRcdFx0ZGVjaW1hbFBhZGRpbmc6IGZvcm1hdE9wdGlvbnMuZGVjaW1hbFBhZGRpbmcsXG5cdFx0XHRcdFx0XHRcdGVtcHR5U3RyaW5nOiBmb3JtYXRPcHRpb25zPy5lbXB0eVN0cmluZ1xuXHRcdFx0XHRcdCAgfVxuXHRcdFx0XHRcdDoge1xuXHRcdFx0XHRcdFx0XHRwYXJzZUFzU3RyaW5nOiBmYWxzZSxcblx0XHRcdFx0XHRcdFx0ZGVjaW1hbFBhZGRpbmc6IGZvcm1hdE9wdGlvbnM/LmRlY2ltYWxQYWRkaW5nLFxuXHRcdFx0XHRcdFx0XHRlbXB0eVN0cmluZzogZm9ybWF0T3B0aW9ucz8uZW1wdHlTdHJpbmdcblx0XHRcdFx0XHQgIH07XG5cdFx0fVxuXHRcdGlmIChwYXJhbT8uY29uc3RyYWludHM/Lm51bGxhYmxlICE9PSBmYWxzZSkge1xuXHRcdFx0Zm9ybWF0T3B0aW9ucy5lbXB0eVN0cmluZyA9IG51bGw7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGZvcm1hdE9wdGlvbnMuZW1wdHlTdHJpbmcgPz89IDA7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBmb3JtYXRPcHRpb25zO1xufVxuLyoqXG4gKiBGdW5jdGlvbiBjYWxsLCBvcHRpb25hbGx5IHdpdGggYXJndW1lbnRzLlxuICogQHBhcmFtIGZ1bmMgRnVuY3Rpb24gbmFtZSBvciByZWZlcmVuY2UgdG8gZnVuY3Rpb25cbiAqIEBwYXJhbSBwYXJhbWV0ZXJzIEFyZ3VtZW50c1xuICogQHBhcmFtIG9uIE9iamVjdCB0byBjYWxsIHRoZSBmdW5jdGlvbiBvblxuICogQHBhcmFtIGlzRm9ybWF0dGluZ0ZuXG4gKiBAcmV0dXJucyBFeHByZXNzaW9uIHJlcHJlc2VudGluZyB0aGUgZnVuY3Rpb24gY2FsbCAobm90IHRoZSByZXN1bHQgb2YgdGhlIGZ1bmN0aW9uIGNhbGwhKVxuICovXG5leHBvcnQgZnVuY3Rpb24gZm48VCwgVSBleHRlbmRzIEZ1bmN0aW9uT3JOYW1lPFQ+Pihcblx0ZnVuYzogVSxcblx0cGFyYW1ldGVyczogV3JhcHBlZFR1cGxlPEZ1bmN0aW9uUGFyYW1ldGVyczxULCBVPj4sXG5cdG9uPzogRXhwcmVzc2lvbk9yUHJpbWl0aXZlPG9iamVjdD4sXG5cdGlzRm9ybWF0dGluZ0ZuID0gZmFsc2Vcbik6IEZ1bmN0aW9uRXhwcmVzc2lvbjxUPiB7XG5cdGNvbnN0IGZ1bmN0aW9uTmFtZSA9IHR5cGVvZiBmdW5jID09PSBcInN0cmluZ1wiID8gZnVuYyA6IGZ1bmMuX19mdW5jdGlvbk5hbWU7XG5cdHJldHVybiB7XG5cdFx0X3R5cGU6IFwiRnVuY3Rpb25cIixcblx0XHRvYmo6IG9uICE9PSB1bmRlZmluZWQgPyB3cmFwUHJpbWl0aXZlKG9uKSA6IHVuZGVmaW5lZCxcblx0XHRmbjogZnVuY3Rpb25OYW1lLFxuXHRcdGlzRm9ybWF0dGluZ0ZuOiBpc0Zvcm1hdHRpbmdGbixcblx0XHRwYXJhbWV0ZXJzOiAocGFyYW1ldGVycyBhcyBFeHByZXNzaW9uT3JQcmltaXRpdmU8UHJpbWl0aXZlVHlwZT5bXSkubWFwKHdyYXBQcmltaXRpdmUpXG5cdH07XG59XG5cbi8qKlxuICogU2hvcnRjdXQgZnVuY3Rpb24gdG8gZGV0ZXJtaW5lIGlmIGEgYmluZGluZyB2YWx1ZSBpcyBudWxsLCB1bmRlZmluZWQgb3IgZW1wdHkuXG4gKiBAcGFyYW0gZXhwcmVzc2lvblxuICogQHJldHVybnMgQSBCb29sZWFuIGV4cHJlc3Npb24gZXZhbHVhdGluZyB0aGUgZmFjdCB0aGF0IHRoZSBjdXJyZW50IGVsZW1lbnQgaXMgZW1wdHlcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzRW1wdHkoZXhwcmVzc2lvbjogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHN0cmluZz4pOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4ge1xuXHRjb25zdCBhQmluZGluZ3M6IEV4cHJlc3Npb25PclByaW1pdGl2ZTxib29sZWFuPltdID0gW107XG5cdHRyYW5zZm9ybVJlY3Vyc2l2ZWx5KGV4cHJlc3Npb24sIFwiUGF0aEluTW9kZWxcIiwgKGV4cHIpID0+IHtcblx0XHRjb25zdCBmaW5hbEV4cHJlc3Npb24gPSB7IC4uLmV4cHIsIGFsd2F5c0tlZXBUYXJnZXRUeXBlOiB0cnVlIH0gYXMgUGF0aEluTW9kZWxFeHByZXNzaW9uPHN0cmluZz47XG5cdFx0YUJpbmRpbmdzLnB1c2gob3IoZXF1YWwoZmluYWxFeHByZXNzaW9uLCBcIlwiKSwgZXF1YWwoZXhwciwgdW5kZWZpbmVkKSwgZXF1YWwoZXhwciwgbnVsbCkpKTtcblx0XHRyZXR1cm4gZXhwcjtcblx0fSk7XG5cdHJldHVybiBhbmQoLi4uYUJpbmRpbmdzKTtcbn1cbi8qKlxuICogU2hvcnRjdXQgZnVuY3Rpb24gdG8gZGV0ZXJtaW5lIGlmIGEgYmluZGluZyBjYW4gYmUgc3RhdGljYWxseSByZXNvbHZhYmxlLlxuICogQHBhcmFtIGV4cCBUaGUgZXhwcmVzc2lvbiB0byBldmFsdWF0ZVxuICogQHJldHVybnMgQSBCb29sZWFuIGV2YWx1YXRpbmcgaWYgdGhlcmUgaXMgbm8gcmVsYXRpdmUgcGF0aCBkZXBlbmRlbnQgb24gdGhlIGN1cnJlbnQgY29udGV4dFxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNFeHByZXNzaW9uU3RhdGljYWxseVJlc29sdmFibGU8VCBleHRlbmRzIFByaW1pdGl2ZVR5cGU+KGV4cDogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFQ+KTogYm9vbGVhbiB7XG5cdGNvbnN0IHJlZmVyZW5jZWRQYXRoczogc3RyaW5nW10gPSBbXTtcblx0dHJhbnNmb3JtUmVjdXJzaXZlbHkoXG5cdFx0ZXhwLFxuXHRcdFwiUGF0aEluTW9kZWxcIixcblx0XHQocGF0aEV4cCkgPT4ge1xuXHRcdFx0aWYgKHBhdGhFeHAubW9kZWxOYW1lID09PSB1bmRlZmluZWQgJiYgdHlwZW9mIHBhdGhFeHAucGF0aCA9PT0gXCJzdHJpbmdcIikge1xuXHRcdFx0XHRyZWZlcmVuY2VkUGF0aHMucHVzaChwYXRoRXhwLnBhdGgpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHBhdGhFeHA7XG5cdFx0fSxcblx0XHR0cnVlXG5cdCk7XG5cdGlmIChyZWZlcmVuY2VkUGF0aHMubGVuZ3RoID09PSAwKSB7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblx0cmV0dXJuIHJlZmVyZW5jZWRQYXRocy5ldmVyeSgocCkgPT4gcC5zdGFydHNXaXRoKFwiL1wiKSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRTdGF0aWNhbGx5UmVzb2x2YWJsZUV4cHJlc3Npb248VCBleHRlbmRzIFByaW1pdGl2ZVR5cGU+KFxuXHRleHA6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxUPixcblx0ZGVmYXVsdFZhbHVlOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248VD5cbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxUPiB7XG5cdGlmIChleHAuX3R5cGUgPT09IFwiU2V0XCIpIHtcblx0XHRjb25zdCBuZXdPcGVyYW5kcyA9IGV4cC5vcGVyYW5kcy5tYXAoKG9wZXJhbmQ6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPikgPT4ge1xuXHRcdFx0aWYgKGlzRXhwcmVzc2lvblN0YXRpY2FsbHlSZXNvbHZhYmxlKG9wZXJhbmQpIHx8IGlzQ29uc3RhbnQob3BlcmFuZCkpIHtcblx0XHRcdFx0cmV0dXJuIG9wZXJhbmQ7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRyZXR1cm4gZGVmYXVsdFZhbHVlO1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0aWYgKGV4cC5vcGVyYXRvciA9PT0gXCJ8fFwiKSB7XG5cdFx0XHRyZXR1cm4gb3IoLi4uKG5ld09wZXJhbmRzIGFzIHVua25vd24gYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+W10pKSBhcyB1bmtub3duIGFzIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxUPjtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIGFuZCguLi4obmV3T3BlcmFuZHMgYXMgdW5rbm93biBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj5bXSkpIGFzIHVua25vd24gYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFQ+O1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gaXNFeHByZXNzaW9uU3RhdGljYWxseVJlc29sdmFibGUoZXhwKSA/IGV4cCA6IGRlZmF1bHRWYWx1ZTtcbn1cblxuLyoqXG4gKiBGdW5jdGlvbiB1c2VkIHRvIGNvbmNhdGVuYXRlIG11bHRpcGxlIGV4cHJlc3Npb25zLlxuICogQHBhcmFtIGluRXhwcmVzc2lvbnMgVGhlIGV4cHJlc3Npb25zIHRvIGNvbmNhdGVuYXRlXG4gKiBAcmV0dXJucyBUaGUgY29uY2F0ZW5hdGVkIGV4cHJlc3Npb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbmNhdCguLi5pbkV4cHJlc3Npb25zOiBFeHByZXNzaW9uT3JQcmltaXRpdmU8c3RyaW5nPltdKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHN0cmluZz4ge1xuXHRjb25zdCBleHByZXNzaW9ucyA9IGluRXhwcmVzc2lvbnMubWFwKHdyYXBQcmltaXRpdmUpO1xuXHRpZiAoaGFzVW5yZXNvbHZhYmxlRXhwcmVzc2lvbiguLi5leHByZXNzaW9ucykpIHtcblx0XHRyZXR1cm4gdW5yZXNvbHZhYmxlRXhwcmVzc2lvbjtcblx0fVxuXHRpZiAoZXhwcmVzc2lvbnMuZXZlcnkoaXNDb25zdGFudCkpIHtcblx0XHRyZXR1cm4gY29uc3RhbnQoXG5cdFx0XHRleHByZXNzaW9ucy5yZWR1Y2UoKGNvbmNhdGVuYXRlZDogc3RyaW5nLCB2YWx1ZSkgPT4ge1xuXHRcdFx0XHRpZiAodmFsdWUudmFsdWUgIT09IHVuZGVmaW5lZCAmJiB2YWx1ZS52YWx1ZSAhPT0gbnVsbCkge1xuXHRcdFx0XHRcdHJldHVybiBjb25jYXRlbmF0ZWQgKyB2YWx1ZS52YWx1ZS50b1N0cmluZygpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBjb25jYXRlbmF0ZWQ7XG5cdFx0XHR9LCBcIlwiKVxuXHRcdCk7XG5cdH0gZWxzZSBpZiAoZXhwcmVzc2lvbnMuc29tZShpc0NvbXBsZXhUeXBlRXhwcmVzc2lvbikpIHtcblx0XHRsZXQgcGF0aElkeCA9IDA7XG5cdFx0Y29uc3QgbXlDb25jYXRFeHByZXNzaW9uID0gZm9ybWF0UmVzdWx0KGV4cHJlc3Npb25zLCBcIi5fZm9ybWF0dGVycy5TdGFuZGFyZEZvcm1hdHRlciNjb25jYXRcIiwgdW5kZWZpbmVkLCB0cnVlKTtcblx0XHRjb25zdCBhbGxQYXJ0cyA9IFtdO1xuXHRcdHRyYW5zZm9ybVJlY3Vyc2l2ZWx5KG15Q29uY2F0RXhwcmVzc2lvbiwgXCJQYXRoSW5Nb2RlbFwiLCAoY29uc3RhbnRQYXRoOiBQYXRoSW5Nb2RlbEV4cHJlc3Npb248dW5rbm93bj4pID0+IHtcblx0XHRcdGFsbFBhcnRzLnB1c2goY29uc3RhbnRQYXRoKTtcblx0XHRcdHJldHVybiBwYXRoSW5Nb2RlbChgJCR7cGF0aElkeCsrfWAsIFwiJFwiKTtcblx0XHR9KTtcblx0XHRhbGxQYXJ0cy51bnNoaWZ0KGNvbnN0YW50KEpTT04uc3RyaW5naWZ5KG15Q29uY2F0RXhwcmVzc2lvbikpKTtcblx0XHRyZXR1cm4gZm9ybWF0UmVzdWx0KGFsbFBhcnRzLCBcIi5fZm9ybWF0dGVycy5TdGFuZGFyZEZvcm1hdHRlci5iaW5kKCRjb250cm9sKSNldmFsdWF0ZUNvbXBsZXhFeHByZXNzaW9uXCIsIHVuZGVmaW5lZCwgdHJ1ZSk7XG5cdH1cblx0cmV0dXJuIHtcblx0XHRfdHlwZTogXCJDb25jYXRcIixcblx0XHRleHByZXNzaW9uczogZXhwcmVzc2lvbnNcblx0fTtcbn1cblxudHlwZSBFeHByZXNzaW9uVHlwZVRvRXhwcmVzc2lvbjxUIGV4dGVuZHMgRXhwcmVzc2lvblR5cGUsIFY+ID0gVCBleHRlbmRzIFwiQ29uc3RhbnRcIlxuXHQ/IENvbnN0YW50RXhwcmVzc2lvbjxWPlxuXHQ6IFQgZXh0ZW5kcyBcIlBhdGhJbk1vZGVsXCJcblx0PyBQYXRoSW5Nb2RlbEV4cHJlc3Npb248Vj5cblx0OiBUIGV4dGVuZHMgXCJGdW5jdGlvblwiXG5cdD8gRnVuY3Rpb25FeHByZXNzaW9uPFY+XG5cdDogVCBleHRlbmRzIFwiVW5yZXNvbHZhYmxlXCJcblx0PyBVbnJlc29sdmFibGVQYXRoRXhwcmVzc2lvblxuXHQ6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxWPjtcblxuZXhwb3J0IHR5cGUgVHJhbnNmb3JtRnVuY3Rpb248VCwgVj4gPSAoZXhwcmVzc2lvblBhcnQ6IFQpID0+IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxWPjtcbmV4cG9ydCB0eXBlIEV4cHJlc3Npb25UeXBlID0gUGljazxCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248dW5rbm93bj4sIFwiX3R5cGVcIj5bXCJfdHlwZVwiXTtcblxuZXhwb3J0IGZ1bmN0aW9uIHRyYW5zZm9ybVJlY3Vyc2l2ZWx5PFQgZXh0ZW5kcyBQcmltaXRpdmVUeXBlIHwgdW5rbm93biwgRVQgZXh0ZW5kcyBFeHByZXNzaW9uVHlwZT4oXG5cdGluRXhwcmVzc2lvbjogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFQ+LFxuXHRleHByZXNzaW9uVHlwZTogRVQsXG5cdHRyYW5zZm9ybUZ1bmN0aW9uOiBUcmFuc2Zvcm1GdW5jdGlvbjxFeHByZXNzaW9uVHlwZVRvRXhwcmVzc2lvbjxFVCwgVD4sIFQ+LFxuXHRpbmNsdWRlQWxsRXhwcmVzc2lvbiA9IGZhbHNlXG4pOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248VD4ge1xuXHRsZXQgZXhwcmVzc2lvbjogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFQ+ID0gaW5FeHByZXNzaW9uO1xuXHRzd2l0Y2ggKGV4cHJlc3Npb24uX3R5cGUpIHtcblx0XHRjYXNlIFwiRnVuY3Rpb25cIjpcblx0XHRjYXNlIFwiRm9ybWF0dGVyXCI6XG5cdFx0XHRleHByZXNzaW9uLnBhcmFtZXRlcnMgPSBleHByZXNzaW9uLnBhcmFtZXRlcnMubWFwKChwYXJhbWV0ZXIpID0+XG5cdFx0XHRcdHRyYW5zZm9ybVJlY3Vyc2l2ZWx5KHBhcmFtZXRlciBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248VD4sIGV4cHJlc3Npb25UeXBlLCB0cmFuc2Zvcm1GdW5jdGlvbiwgaW5jbHVkZUFsbEV4cHJlc3Npb24pXG5cdFx0XHQpO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBcIkNvbmNhdFwiOlxuXHRcdFx0ZXhwcmVzc2lvbi5leHByZXNzaW9ucyA9IGV4cHJlc3Npb24uZXhwcmVzc2lvbnMubWFwKChzdWJFeHByZXNzaW9uKSA9PlxuXHRcdFx0XHR0cmFuc2Zvcm1SZWN1cnNpdmVseShcblx0XHRcdFx0XHRzdWJFeHByZXNzaW9uLFxuXHRcdFx0XHRcdGV4cHJlc3Npb25UeXBlLFxuXHRcdFx0XHRcdHRyYW5zZm9ybUZ1bmN0aW9uIGFzIHVua25vd24gYXMgVHJhbnNmb3JtRnVuY3Rpb248RXhwcmVzc2lvblR5cGVUb0V4cHJlc3Npb248RVQsIHN0cmluZz4sIHN0cmluZz4sXG5cdFx0XHRcdFx0aW5jbHVkZUFsbEV4cHJlc3Npb25cblx0XHRcdFx0KVxuXHRcdFx0KTtcblx0XHRcdGV4cHJlc3Npb24gPSBjb25jYXQoLi4uZXhwcmVzc2lvbi5leHByZXNzaW9ucykgYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFQ+O1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBcIkNvbXBsZXhUeXBlXCI6XG5cdFx0XHRleHByZXNzaW9uLmJpbmRpbmdQYXJhbWV0ZXJzID0gZXhwcmVzc2lvbi5iaW5kaW5nUGFyYW1ldGVycy5tYXAoKGJpbmRpbmdQYXJhbWV0ZXIpID0+XG5cdFx0XHRcdHRyYW5zZm9ybVJlY3Vyc2l2ZWx5KFxuXHRcdFx0XHRcdGJpbmRpbmdQYXJhbWV0ZXIgYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFQ+LFxuXHRcdFx0XHRcdGV4cHJlc3Npb25UeXBlLFxuXHRcdFx0XHRcdHRyYW5zZm9ybUZ1bmN0aW9uLFxuXHRcdFx0XHRcdGluY2x1ZGVBbGxFeHByZXNzaW9uXG5cdFx0XHRcdClcblx0XHRcdCk7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFwiSWZFbHNlXCI6XG5cdFx0XHRjb25zdCBvblRydWUgPSB0cmFuc2Zvcm1SZWN1cnNpdmVseShcblx0XHRcdFx0ZXhwcmVzc2lvbi5vblRydWUsXG5cdFx0XHRcdGV4cHJlc3Npb25UeXBlLFxuXHRcdFx0XHR0cmFuc2Zvcm1GdW5jdGlvbiBhcyB1bmtub3duIGFzIFRyYW5zZm9ybUZ1bmN0aW9uPEV4cHJlc3Npb25UeXBlVG9FeHByZXNzaW9uPEVULCB1bmtub3duPiwgdW5rbm93bj4sXG5cdFx0XHRcdGluY2x1ZGVBbGxFeHByZXNzaW9uXG5cdFx0XHQpO1xuXHRcdFx0Y29uc3Qgb25GYWxzZSA9IHRyYW5zZm9ybVJlY3Vyc2l2ZWx5KFxuXHRcdFx0XHRleHByZXNzaW9uLm9uRmFsc2UsXG5cdFx0XHRcdGV4cHJlc3Npb25UeXBlLFxuXHRcdFx0XHR0cmFuc2Zvcm1GdW5jdGlvbiBhcyB1bmtub3duIGFzIFRyYW5zZm9ybUZ1bmN0aW9uPEV4cHJlc3Npb25UeXBlVG9FeHByZXNzaW9uPEVULCB1bmtub3duPiwgdW5rbm93bj4sXG5cdFx0XHRcdGluY2x1ZGVBbGxFeHByZXNzaW9uXG5cdFx0XHQpO1xuXHRcdFx0bGV0IGNvbmRpdGlvbiA9IGV4cHJlc3Npb24uY29uZGl0aW9uO1xuXHRcdFx0aWYgKGluY2x1ZGVBbGxFeHByZXNzaW9uKSB7XG5cdFx0XHRcdGNvbmRpdGlvbiA9IHRyYW5zZm9ybVJlY3Vyc2l2ZWx5KFxuXHRcdFx0XHRcdGV4cHJlc3Npb24uY29uZGl0aW9uLFxuXHRcdFx0XHRcdGV4cHJlc3Npb25UeXBlLFxuXHRcdFx0XHRcdHRyYW5zZm9ybUZ1bmN0aW9uIGFzIHVua25vd24gYXMgVHJhbnNmb3JtRnVuY3Rpb248RXhwcmVzc2lvblR5cGVUb0V4cHJlc3Npb248RVQsIGJvb2xlYW4+LCBib29sZWFuPixcblx0XHRcdFx0XHRpbmNsdWRlQWxsRXhwcmVzc2lvblxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdFx0ZXhwcmVzc2lvbiA9IGlmRWxzZShjb25kaXRpb24sIG9uVHJ1ZSwgb25GYWxzZSkgYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFQ+O1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBcIk5vdFwiOlxuXHRcdFx0aWYgKGluY2x1ZGVBbGxFeHByZXNzaW9uKSB7XG5cdFx0XHRcdGNvbnN0IG9wZXJhbmQgPSB0cmFuc2Zvcm1SZWN1cnNpdmVseShcblx0XHRcdFx0XHRleHByZXNzaW9uLm9wZXJhbmQsXG5cdFx0XHRcdFx0ZXhwcmVzc2lvblR5cGUsXG5cdFx0XHRcdFx0dHJhbnNmb3JtRnVuY3Rpb24gYXMgdW5rbm93biBhcyBUcmFuc2Zvcm1GdW5jdGlvbjxFeHByZXNzaW9uVHlwZVRvRXhwcmVzc2lvbjxFVCwgYm9vbGVhbj4sIGJvb2xlYW4+LFxuXHRcdFx0XHRcdGluY2x1ZGVBbGxFeHByZXNzaW9uXG5cdFx0XHRcdCk7XG5cdFx0XHRcdGV4cHJlc3Npb24gPSBub3Qob3BlcmFuZCkgYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFQ+O1xuXHRcdFx0fVxuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBcIlRydXRoeVwiOlxuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBcIlNldFwiOlxuXHRcdFx0aWYgKGluY2x1ZGVBbGxFeHByZXNzaW9uKSB7XG5cdFx0XHRcdGNvbnN0IG9wZXJhbmRzID0gZXhwcmVzc2lvbi5vcGVyYW5kcy5tYXAoKG9wZXJhbmQpID0+XG5cdFx0XHRcdFx0dHJhbnNmb3JtUmVjdXJzaXZlbHkoXG5cdFx0XHRcdFx0XHRvcGVyYW5kLFxuXHRcdFx0XHRcdFx0ZXhwcmVzc2lvblR5cGUsXG5cdFx0XHRcdFx0XHR0cmFuc2Zvcm1GdW5jdGlvbiBhcyB1bmtub3duIGFzIFRyYW5zZm9ybUZ1bmN0aW9uPEV4cHJlc3Npb25UeXBlVG9FeHByZXNzaW9uPEVULCBib29sZWFuPiwgYm9vbGVhbj4sXG5cdFx0XHRcdFx0XHRpbmNsdWRlQWxsRXhwcmVzc2lvblxuXHRcdFx0XHRcdClcblx0XHRcdFx0KTtcblx0XHRcdFx0ZXhwcmVzc2lvbiA9XG5cdFx0XHRcdFx0ZXhwcmVzc2lvbi5vcGVyYXRvciA9PT0gXCJ8fFwiXG5cdFx0XHRcdFx0XHQ/IChvciguLi5vcGVyYW5kcykgYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFQ+KVxuXHRcdFx0XHRcdFx0OiAoYW5kKC4uLm9wZXJhbmRzKSBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248VD4pO1xuXHRcdFx0fVxuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBcIkNvbXBhcmlzb25cIjpcblx0XHRcdGlmIChpbmNsdWRlQWxsRXhwcmVzc2lvbikge1xuXHRcdFx0XHRjb25zdCBvcGVyYW5kMSA9IHRyYW5zZm9ybVJlY3Vyc2l2ZWx5KFxuXHRcdFx0XHRcdGV4cHJlc3Npb24ub3BlcmFuZDEgYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFQ+LFxuXHRcdFx0XHRcdGV4cHJlc3Npb25UeXBlLFxuXHRcdFx0XHRcdHRyYW5zZm9ybUZ1bmN0aW9uLFxuXHRcdFx0XHRcdGluY2x1ZGVBbGxFeHByZXNzaW9uXG5cdFx0XHRcdCk7XG5cdFx0XHRcdGNvbnN0IG9wZXJhbmQyID0gdHJhbnNmb3JtUmVjdXJzaXZlbHkoXG5cdFx0XHRcdFx0ZXhwcmVzc2lvbi5vcGVyYW5kMiBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248VD4sXG5cdFx0XHRcdFx0ZXhwcmVzc2lvblR5cGUsXG5cdFx0XHRcdFx0dHJhbnNmb3JtRnVuY3Rpb24sXG5cdFx0XHRcdFx0aW5jbHVkZUFsbEV4cHJlc3Npb25cblx0XHRcdFx0KTtcblx0XHRcdFx0ZXhwcmVzc2lvbiA9IGNvbXBhcmlzb24oZXhwcmVzc2lvbi5vcGVyYXRvciwgb3BlcmFuZDEsIG9wZXJhbmQyKSBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248VD47XG5cdFx0XHR9XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFwiQXJpdGhtZXRpY1wiOlxuXHRcdFx0Y29uc3Qgb3BlcmFuZDEgPSB0cmFuc2Zvcm1SZWN1cnNpdmVseShcblx0XHRcdFx0ZXhwcmVzc2lvbi5vcGVyYW5kMSBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248VD4sXG5cdFx0XHRcdGV4cHJlc3Npb25UeXBlLFxuXHRcdFx0XHR0cmFuc2Zvcm1GdW5jdGlvbixcblx0XHRcdFx0aW5jbHVkZUFsbEV4cHJlc3Npb25cblx0XHRcdCk7XG5cdFx0XHRjb25zdCBvcGVyYW5kMiA9IHRyYW5zZm9ybVJlY3Vyc2l2ZWx5KFxuXHRcdFx0XHRleHByZXNzaW9uLm9wZXJhbmQyIGFzIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxUPixcblx0XHRcdFx0ZXhwcmVzc2lvblR5cGUsXG5cdFx0XHRcdHRyYW5zZm9ybUZ1bmN0aW9uLFxuXHRcdFx0XHRpbmNsdWRlQWxsRXhwcmVzc2lvblxuXHRcdFx0KTtcblx0XHRcdGV4cHJlc3Npb24gPSBhcml0aG1ldGljKGV4cHJlc3Npb24ub3BlcmF0b3IsIG9wZXJhbmQxLCBvcGVyYW5kMikgYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFQ+O1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBcIkNvbnN0YW50XCI6XG5cdFx0XHRjb25zdCBjb25zdGFudFZhbHVlOiBSZWNvcmQ8c3RyaW5nLCBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248dW5rbm93bj4+ID0gZXhwcmVzc2lvbi52YWx1ZSBhcyBSZWNvcmQ8XG5cdFx0XHRcdHN0cmluZyxcblx0XHRcdFx0QmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHVua25vd24+XG5cdFx0XHQ+O1xuXHRcdFx0aWYgKHR5cGVvZiBjb25zdGFudFZhbHVlID09PSBcIm9iamVjdFwiICYmIGNvbnN0YW50VmFsdWUpIHtcblx0XHRcdFx0T2JqZWN0LmtleXMoY29uc3RhbnRWYWx1ZSkuZm9yRWFjaCgoa2V5KSA9PiB7XG5cdFx0XHRcdFx0Y29uc3RhbnRWYWx1ZVtrZXldID0gdHJhbnNmb3JtUmVjdXJzaXZlbHkoXG5cdFx0XHRcdFx0XHRjb25zdGFudFZhbHVlW2tleV0sXG5cdFx0XHRcdFx0XHRleHByZXNzaW9uVHlwZSxcblx0XHRcdFx0XHRcdHRyYW5zZm9ybUZ1bmN0aW9uIGFzIHVua25vd24gYXMgVHJhbnNmb3JtRnVuY3Rpb248RXhwcmVzc2lvblR5cGVUb0V4cHJlc3Npb248RVQsIHVua25vd24+LCB1bmtub3duPixcblx0XHRcdFx0XHRcdGluY2x1ZGVBbGxFeHByZXNzaW9uXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFwiUmVmXCI6XG5cdFx0Y2FzZSBcIkxlbmd0aFwiOlxuXHRcdGNhc2UgXCJQYXRoSW5Nb2RlbFwiOlxuXHRcdGNhc2UgXCJFbWJlZGRlZEJpbmRpbmdcIjpcblx0XHRjYXNlIFwiRW1iZWRkZWRFeHByZXNzaW9uQmluZGluZ1wiOlxuXHRcdGNhc2UgXCJVbnJlc29sdmFibGVcIjpcblx0XHRcdC8vIERvIG5vdGhpbmdcblx0XHRcdGJyZWFrO1xuXHR9XG5cdGlmIChleHByZXNzaW9uVHlwZSA9PT0gZXhwcmVzc2lvbi5fdHlwZSkge1xuXHRcdGV4cHJlc3Npb24gPSB0cmFuc2Zvcm1GdW5jdGlvbihpbkV4cHJlc3Npb24gYXMgRXhwcmVzc2lvblR5cGVUb0V4cHJlc3Npb248RVQsIFQ+KTtcblx0fVxuXHRyZXR1cm4gZXhwcmVzc2lvbjtcbn1cblxuLyoqXG4gKiBDb21waWxlZCBCaW5kaW5nIFRvb2xraXQgRXhwcmVzc2lvblxuICogVGhpcyBpcyBhIHR5cGUgcmVwcmVzZW50aW5nIHRoZSBjb21waWxlZCBmb3JtIG9mIGEgQmluZGluZyBUb29sa2l0IGV4cHJlc3Npb24gYXMgYSBiaW5kaW5nIHN0cmluZy5cbiAqL1xuZXhwb3J0IHR5cGUgQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24gPSBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbmNvbnN0IG5lZWRQYXJlbnRoZXNpcyA9IGZ1bmN0aW9uIDxUIGV4dGVuZHMgUHJpbWl0aXZlVHlwZT4oZXhwcjogRXhwcmVzc2lvbk9yUHJpbWl0aXZlPFQ+KTogYm9vbGVhbiB7XG5cdHJldHVybiAoXG5cdFx0IWlzQ29uc3RhbnQoZXhwcikgJiZcblx0XHQhaXNQYXRoSW5Nb2RlbEV4cHJlc3Npb24oZXhwcikgJiZcblx0XHRpc0JpbmRpbmdUb29sa2l0RXhwcmVzc2lvbihleHByKSAmJlxuXHRcdGV4cHIuX3R5cGUgIT09IFwiSWZFbHNlXCIgJiZcblx0XHRleHByLl90eXBlICE9PSBcIkZ1bmN0aW9uXCJcblx0KTtcbn07XG5cbi8qKlxuICogQ29tcGlsZXMgYSBjb25zdGFudCBvYmplY3QgdG8gYSBzdHJpbmcuXG4gKiBAcGFyYW0gZXhwclxuICogQHBhcmFtIGlzTnVsbGFibGVcbiAqIEByZXR1cm5zIFRoZSBjb21waWxlZCBzdHJpbmdcbiAqL1xuZnVuY3Rpb24gY29tcGlsZUNvbnN0YW50T2JqZWN0KGV4cHI6IENvbnN0YW50RXhwcmVzc2lvbjxvYmplY3Q+LCBpc051bGxhYmxlID0gZmFsc2UpOiBzdHJpbmcge1xuXHRpZiAoaXNOdWxsYWJsZSAmJiBPYmplY3Qua2V5cyhleHByLnZhbHVlKS5sZW5ndGggPT09IDApIHtcblx0XHRyZXR1cm4gXCJcIjtcblx0fVxuXHRjb25zdCBvYmplY3RzID0gZXhwci52YWx1ZSBhcyBQbGFpbkV4cHJlc3Npb25PYmplY3Q7XG5cdGNvbnN0IHByb3BlcnRpZXM6IHN0cmluZ1tdID0gW107XG5cdE9iamVjdC5rZXlzKG9iamVjdHMpLmZvckVhY2goKGtleSkgPT4ge1xuXHRcdGNvbnN0IHZhbHVlID0gb2JqZWN0c1trZXldO1xuXHRcdGNvbnN0IGNoaWxkUmVzdWx0ID0gY29tcGlsZUV4cHJlc3Npb24odmFsdWUsIHRydWUsIGZhbHNlLCBpc051bGxhYmxlKTtcblx0XHRpZiAoY2hpbGRSZXN1bHQgJiYgY2hpbGRSZXN1bHQubGVuZ3RoID4gMCkge1xuXHRcdFx0cHJvcGVydGllcy5wdXNoKGAke2tleX06ICR7Y2hpbGRSZXN1bHR9YCk7XG5cdFx0fVxuXHR9KTtcblx0cmV0dXJuIGB7JHtwcm9wZXJ0aWVzLmpvaW4oXCIsIFwiKX19YDtcbn1cblxuLyoqXG4gKiBDb21waWxlcyBhIENvbnN0YW50IEJpbmRpbmcgRXhwcmVzc2lvbi5cbiAqIEBwYXJhbSBleHByXG4gKiBAcGFyYW0gZW1iZWRkZWRJbkJpbmRpbmdcbiAqIEBwYXJhbSBpc051bGxhYmxlXG4gKiBAcGFyYW0gZG9Ob3RTdHJpbmdpZnlcbiAqIEByZXR1cm5zIFRoZSBjb21waWxlZCBzdHJpbmdcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbXBpbGVDb25zdGFudDxUIGV4dGVuZHMgUHJpbWl0aXZlVHlwZT4oXG5cdGV4cHI6IENvbnN0YW50RXhwcmVzc2lvbjxUPixcblx0ZW1iZWRkZWRJbkJpbmRpbmc6IGJvb2xlYW4sXG5cdGlzTnVsbGFibGU/OiBib29sZWFuLFxuXHRkb05vdFN0cmluZ2lmeT86IGZhbHNlXG4pOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjtcbmV4cG9ydCBmdW5jdGlvbiBjb21waWxlQ29uc3RhbnQ8VCBleHRlbmRzIFByaW1pdGl2ZVR5cGU+KFxuXHRleHByOiBDb25zdGFudEV4cHJlc3Npb248VD4sXG5cdGVtYmVkZGVkSW5CaW5kaW5nOiBib29sZWFuLFxuXHRpc051bGxhYmxlPzogYm9vbGVhbixcblx0ZG9Ob3RTdHJpbmdpZnk/OiB0cnVlXG4pOiBQcmltaXRpdmVUeXBlO1xuZXhwb3J0IGZ1bmN0aW9uIGNvbXBpbGVDb25zdGFudDxUIGV4dGVuZHMgUHJpbWl0aXZlVHlwZT4oXG5cdGV4cHI6IENvbnN0YW50RXhwcmVzc2lvbjxUPixcblx0ZW1iZWRkZWRJbkJpbmRpbmc6IGJvb2xlYW4sXG5cdGlzTnVsbGFibGUgPSBmYWxzZSxcblx0ZG9Ob3RTdHJpbmdpZnkgPSBmYWxzZVxuKTogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24gfCBQcmltaXRpdmVUeXBlIHtcblx0aWYgKGV4cHIudmFsdWUgPT09IG51bGwpIHtcblx0XHRyZXR1cm4gZG9Ob3RTdHJpbmdpZnkgPyBudWxsIDogXCJudWxsXCI7XG5cdH1cblx0aWYgKGV4cHIudmFsdWUgPT09IHVuZGVmaW5lZCkge1xuXHRcdHJldHVybiBkb05vdFN0cmluZ2lmeSA/IHVuZGVmaW5lZCA6IFwidW5kZWZpbmVkXCI7XG5cdH1cblx0aWYgKHR5cGVvZiBleHByLnZhbHVlID09PSBcIm9iamVjdFwiKSB7XG5cdFx0aWYgKEFycmF5LmlzQXJyYXkoZXhwci52YWx1ZSkpIHtcblx0XHRcdGNvbnN0IGVudHJpZXMgPSBleHByLnZhbHVlLm1hcCgoZXhwcmVzc2lvbikgPT4gY29tcGlsZUV4cHJlc3Npb24oZXhwcmVzc2lvbiwgdHJ1ZSkpO1xuXHRcdFx0cmV0dXJuIGBbJHtlbnRyaWVzLmpvaW4oXCIsIFwiKX1dYDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIGNvbXBpbGVDb25zdGFudE9iamVjdChleHByIGFzIENvbnN0YW50RXhwcmVzc2lvbjxvYmplY3Q+LCBpc051bGxhYmxlKTtcblx0XHR9XG5cdH1cblxuXHRpZiAoZW1iZWRkZWRJbkJpbmRpbmcpIHtcblx0XHRzd2l0Y2ggKHR5cGVvZiBleHByLnZhbHVlKSB7XG5cdFx0XHRjYXNlIFwibnVtYmVyXCI6XG5cdFx0XHRjYXNlIFwiYmlnaW50XCI6XG5cdFx0XHRjYXNlIFwiYm9vbGVhblwiOlxuXHRcdFx0XHRyZXR1cm4gZXhwci52YWx1ZS50b1N0cmluZygpO1xuXHRcdFx0Y2FzZSBcInN0cmluZ1wiOlxuXHRcdFx0XHRyZXR1cm4gYCcke2VzY2FwZVhtbEF0dHJpYnV0ZShleHByLnZhbHVlLnRvU3RyaW5nKCkpfSdgO1xuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0cmV0dXJuIFwiXCI7XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdHJldHVybiBkb05vdFN0cmluZ2lmeSA/IGV4cHIudmFsdWUgOiBleHByLnZhbHVlLnRvU3RyaW5nKCk7XG5cdH1cbn1cblxuLyoqXG4gKiBHZW5lcmF0ZXMgdGhlIGJpbmRpbmcgc3RyaW5nIGZvciBhIEJpbmRpbmcgZXhwcmVzc2lvbi5cbiAqIEBwYXJhbSBleHByZXNzaW9uRm9yQmluZGluZyBUaGUgZXhwcmVzc2lvbiB0byBjb21waWxlXG4gKiBAcGFyYW0gZW1iZWRkZWRJbkJpbmRpbmcgV2hldGhlciB0aGUgZXhwcmVzc2lvbiB0byBjb21waWxlIGlzIGVtYmVkZGVkIGludG8gYW5vdGhlciBleHByZXNzaW9uXG4gKiBAcGFyYW0gZW1iZWRkZWRTZXBhcmF0b3IgVGhlIGJpbmRpbmcgdmFsdWUgZXZhbHVhdG9yICgkIG9yICUgZGVwZW5kaW5nIG9uIHdoZXRoZXIgd2Ugd2FudCB0byBmb3JjZSB0aGUgdHlwZSBvciBub3QpXG4gKiBAcmV0dXJucyBUaGUgY29ycmVzcG9uZGluZyBleHByZXNzaW9uIGJpbmRpbmdcbiAqL1xuZnVuY3Rpb24gY29tcGlsZVBhdGhJbk1vZGVsRXhwcmVzc2lvbjxUIGV4dGVuZHMgUHJpbWl0aXZlVHlwZT4oXG5cdGV4cHJlc3Npb25Gb3JCaW5kaW5nOiBQYXRoSW5Nb2RlbEV4cHJlc3Npb248VD4sXG5cdGVtYmVkZGVkSW5CaW5kaW5nOiBib29sZWFuLFxuXHRlbWJlZGRlZFNlcGFyYXRvcjogc3RyaW5nXG4pOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB7XG5cdGlmIChcblx0XHRleHByZXNzaW9uRm9yQmluZGluZy50eXBlIHx8XG5cdFx0ZXhwcmVzc2lvbkZvckJpbmRpbmcucGFyYW1ldGVycyB8fFxuXHRcdGV4cHJlc3Npb25Gb3JCaW5kaW5nLnRhcmdldFR5cGUgfHxcblx0XHRleHByZXNzaW9uRm9yQmluZGluZy5mb3JtYXRPcHRpb25zIHx8XG5cdFx0ZXhwcmVzc2lvbkZvckJpbmRpbmcuY29uc3RyYWludHNcblx0KSB7XG5cdFx0Ly8gVGhpcyBpcyBub3cgYSBjb21wbGV4IGJpbmRpbmcgZGVmaW5pdGlvbiwgbGV0J3MgcHJlcGFyZSBmb3IgaXRcblx0XHRjb25zdCBjb21wbGV4QmluZGluZ0RlZmluaXRpb24gPSB7XG5cdFx0XHRwYXRoOiBjb21waWxlUGF0aEluTW9kZWwoZXhwcmVzc2lvbkZvckJpbmRpbmcpLFxuXHRcdFx0dHlwZTogZXhwcmVzc2lvbkZvckJpbmRpbmcudHlwZSxcblx0XHRcdHRhcmdldFR5cGU6IGV4cHJlc3Npb25Gb3JCaW5kaW5nLnRhcmdldFR5cGUsXG5cdFx0XHRwYXJhbWV0ZXJzOiBleHByZXNzaW9uRm9yQmluZGluZy5wYXJhbWV0ZXJzLFxuXHRcdFx0Zm9ybWF0T3B0aW9uczogZXhwcmVzc2lvbkZvckJpbmRpbmcuZm9ybWF0T3B0aW9ucyxcblx0XHRcdGNvbnN0cmFpbnRzOiBleHByZXNzaW9uRm9yQmluZGluZy5jb25zdHJhaW50c1xuXHRcdH07XG5cdFx0Y29uc3Qgb3V0QmluZGluZyA9IGNvbXBpbGVFeHByZXNzaW9uKGNvbXBsZXhCaW5kaW5nRGVmaW5pdGlvbiwgZmFsc2UsIGZhbHNlLCB0cnVlKTtcblx0XHRpZiAoZW1iZWRkZWRJbkJpbmRpbmcpIHtcblx0XHRcdGNvbnN0IHNlcGFyYXRvciA9IGV4cHJlc3Npb25Gb3JCaW5kaW5nLmFsd2F5c0tlZXBUYXJnZXRUeXBlID8gXCIkXCIgOiBlbWJlZGRlZFNlcGFyYXRvcjtcblx0XHRcdHJldHVybiBgJHtzZXBhcmF0b3J9JHtvdXRCaW5kaW5nfWA7XG5cdFx0fVxuXHRcdHJldHVybiBvdXRCaW5kaW5nO1xuXHR9IGVsc2UgaWYgKGVtYmVkZGVkSW5CaW5kaW5nKSB7XG5cdFx0cmV0dXJuIGAke2VtYmVkZGVkU2VwYXJhdG9yfXske2NvbXBpbGVQYXRoSW5Nb2RlbChleHByZXNzaW9uRm9yQmluZGluZyl9fWA7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIGB7JHtjb21waWxlUGF0aEluTW9kZWwoZXhwcmVzc2lvbkZvckJpbmRpbmcpfX1gO1xuXHR9XG59XG5cbmZ1bmN0aW9uIGNvbXBpbGVDb21wbGV4VHlwZUV4cHJlc3Npb248VCBleHRlbmRzIFByaW1pdGl2ZVR5cGU+KGV4cHJlc3Npb246IENvbXBsZXhUeXBlRXhwcmVzc2lvbjxUPik6IHN0cmluZyB7XG5cdGlmIChleHByZXNzaW9uLmJpbmRpbmdQYXJhbWV0ZXJzLmxlbmd0aCA9PT0gMSkge1xuXHRcdHJldHVybiBgeyR7Y29tcGlsZVBhdGhQYXJhbWV0ZXIoZXhwcmVzc2lvbi5iaW5kaW5nUGFyYW1ldGVyc1swXSBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248UHJpbWl0aXZlVHlwZT4sIHRydWUpfSwgdHlwZTogJyR7XG5cdFx0XHRleHByZXNzaW9uLnR5cGVcblx0XHR9J31gO1xuXHR9XG5cblx0bGV0IG91dHB1dEVuZCA9IGBdLCB0eXBlOiAnJHtleHByZXNzaW9uLnR5cGV9J2A7XG5cdGlmIChoYXNFbGVtZW50cyhleHByZXNzaW9uLmZvcm1hdE9wdGlvbnMpKSB7XG5cdFx0b3V0cHV0RW5kICs9IGAsIGZvcm1hdE9wdGlvbnM6ICR7Y29tcGlsZUV4cHJlc3Npb24oZXhwcmVzc2lvbi5mb3JtYXRPcHRpb25zKX1gO1xuXHR9XG5cdGlmIChoYXNFbGVtZW50cyhleHByZXNzaW9uLmNvbnN0cmFpbnRzKSkge1xuXHRcdG91dHB1dEVuZCArPSBgLCBjb25zdHJhaW50czogJHtjb21waWxlRXhwcmVzc2lvbihleHByZXNzaW9uLmNvbnN0cmFpbnRzKX1gO1xuXHR9XG5cdGlmIChoYXNFbGVtZW50cyhleHByZXNzaW9uLnBhcmFtZXRlcnMpKSB7XG5cdFx0b3V0cHV0RW5kICs9IGAsIHBhcmFtZXRlcnM6ICR7Y29tcGlsZUV4cHJlc3Npb24oZXhwcmVzc2lvbi5wYXJhbWV0ZXJzKX1gO1xuXHR9XG5cdG91dHB1dEVuZCArPSBcIn1cIjtcblxuXHRyZXR1cm4gYHttb2RlOidUd29XYXknLCBwYXJ0czpbJHtleHByZXNzaW9uLmJpbmRpbmdQYXJhbWV0ZXJzXG5cdFx0Lm1hcCgocGFyYW0pID0+IGNvbXBpbGVQYXRoUGFyYW1ldGVyKHBhcmFtIGFzIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxQcmltaXRpdmVUeXBlPikpXG5cdFx0LmpvaW4oXCIsXCIpfSR7b3V0cHV0RW5kfWA7XG59XG5cbi8qKlxuICogV3JhcCB0aGUgY29tcGlsZWQgYmluZGluZyBzdHJpbmcgYXMgcmVxdWlyZWQgZGVwZW5kaW5nIG9uIGl0cyBjb250ZXh0LlxuICogQHBhcmFtIGV4cHJlc3Npb24gVGhlIGNvbXBpbGVkIGV4cHJlc3Npb25cbiAqIEBwYXJhbSBlbWJlZGRlZEluQmluZGluZyBUcnVlIGlmIHRoZSBjb21waWxlZCBleHByZXNzaW9uIGlzIHRvIGJlIGVtYmVkZGVkIGluIGEgYmluZGluZ1xuICogQHBhcmFtIHBhcmVudGhlc2lzUmVxdWlyZWQgVHJ1ZSBpZiB0aGUgZW1iZWRkZWQgYmluZGluZyBuZWVkcyB0byBiZSB3cmFwcGVkIGluIHBhcmV0aGVzaXMgc28gdGhhdCBpdCBpcyBldmFsdWF0ZWQgYXMgb25lXG4gKiBAcmV0dXJucyBGaW5hbGl6ZWQgY29tcGlsZWQgZXhwcmVzc2lvblxuICovXG5leHBvcnQgZnVuY3Rpb24gd3JhcEJpbmRpbmdFeHByZXNzaW9uKFxuXHRleHByZXNzaW9uOiBzdHJpbmcsXG5cdGVtYmVkZGVkSW5CaW5kaW5nOiBib29sZWFuLFxuXHRwYXJlbnRoZXNpc1JlcXVpcmVkID0gZmFsc2Vcbik6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIHtcblx0aWYgKGVtYmVkZGVkSW5CaW5kaW5nKSB7XG5cdFx0aWYgKHBhcmVudGhlc2lzUmVxdWlyZWQpIHtcblx0XHRcdHJldHVybiBgKCR7ZXhwcmVzc2lvbn0pYDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIGV4cHJlc3Npb247XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdHJldHVybiBgez0gJHtleHByZXNzaW9ufX1gO1xuXHR9XG59XG5cbi8qKlxuICogQ29tcGlsZSBhbiBleHByZXNzaW9uIGludG8gYW4gZXhwcmVzc2lvbiBiaW5kaW5nLlxuICogQHRlbXBsYXRlIFQgVGhlIHRhcmdldCB0eXBlXG4gKiBAcGFyYW0gZXhwcmVzc2lvbiBUaGUgZXhwcmVzc2lvbiB0byBjb21waWxlXG4gKiBAcGFyYW0gZW1iZWRkZWRJbkJpbmRpbmcgV2hldGhlciB0aGUgZXhwcmVzc2lvbiB0byBjb21waWxlIGlzIGVtYmVkZGVkIGludG8gYW5vdGhlciBleHByZXNzaW9uXG4gKiBAcGFyYW0ga2VlcFRhcmdldFR5cGUgS2VlcCB0aGUgdGFyZ2V0IHR5cGUgb2YgdGhlIGVtYmVkZGVkIGJpbmRpbmdzIGluc3RlYWQgb2YgY2FzdGluZyB0aGVtIHRvIGFueVxuICogQHBhcmFtIGlzTnVsbGFibGUgV2hldGhlciBiaW5kaW5nIGV4cHJlc3Npb24gY2FuIHJlc29sdmUgdG8gZW1wdHkgc3RyaW5nIG9yIG5vdFxuICogQHJldHVybnMgVGhlIGNvcnJlc3BvbmRpbmcgZXhwcmVzc2lvbiBiaW5kaW5nXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb21waWxlRXhwcmVzc2lvbjxUIGV4dGVuZHMgUHJpbWl0aXZlVHlwZT4oXG5cdGV4cHJlc3Npb246IEV4cHJlc3Npb25PclByaW1pdGl2ZTxUPixcblx0ZW1iZWRkZWRJbkJpbmRpbmcgPSBmYWxzZSxcblx0a2VlcFRhcmdldFR5cGUgPSBmYWxzZSxcblx0aXNOdWxsYWJsZSA9IGZhbHNlXG4pOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB7XG5cdGNvbnN0IGV4cHIgPSB3cmFwUHJpbWl0aXZlKGV4cHJlc3Npb24pO1xuXHRjb25zdCBlbWJlZGRlZFNlcGFyYXRvciA9IGtlZXBUYXJnZXRUeXBlID8gXCIkXCIgOiBcIiVcIjtcblxuXHRzd2l0Y2ggKGV4cHIuX3R5cGUpIHtcblx0XHRjYXNlIFwiVW5yZXNvbHZhYmxlXCI6XG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXG5cdFx0Y2FzZSBcIkNvbnN0YW50XCI6XG5cdFx0XHRyZXR1cm4gY29tcGlsZUNvbnN0YW50KGV4cHIsIGVtYmVkZGVkSW5CaW5kaW5nLCBpc051bGxhYmxlKTtcblxuXHRcdGNhc2UgXCJSZWZcIjpcblx0XHRcdHJldHVybiBleHByLnJlZiB8fCBcIm51bGxcIjtcblxuXHRcdGNhc2UgXCJGdW5jdGlvblwiOlxuXHRcdFx0bGV0IGhhc0VtYmVkZGVkRnVuY3Rpb25DYWxsT3JCaW5kaW5nID0gZmFsc2U7XG5cdFx0XHRpZiAoZXhwci5pc0Zvcm1hdHRpbmdGbikge1xuXHRcdFx0XHR0cmFuc2Zvcm1SZWN1cnNpdmVseShcblx0XHRcdFx0XHRleHByLFxuXHRcdFx0XHRcdFwiRnVuY3Rpb25cIixcblx0XHRcdFx0XHQoc3ViRm4pID0+IHtcblx0XHRcdFx0XHRcdGlmIChzdWJGbiAhPT0gZXhwciAmJiBzdWJGbi5vYmogPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdFx0XHRoYXNFbWJlZGRlZEZ1bmN0aW9uQ2FsbE9yQmluZGluZyA9IHRydWU7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRyZXR1cm4gc3ViRm47XG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHR0cnVlXG5cdFx0XHRcdCk7XG5cdFx0XHRcdHRyYW5zZm9ybVJlY3Vyc2l2ZWx5KFxuXHRcdFx0XHRcdGV4cHIsXG5cdFx0XHRcdFx0XCJDb25zdGFudFwiLFxuXHRcdFx0XHRcdChzdWJGbjogQ29uc3RhbnRFeHByZXNzaW9uPFQ+KSA9PiB7XG5cdFx0XHRcdFx0XHRpZiAoKHN1YkZuIGFzIHVua25vd24pICE9PSBleHByICYmIHR5cGVvZiBzdWJGbi52YWx1ZSA9PT0gXCJvYmplY3RcIikge1xuXHRcdFx0XHRcdFx0XHR0cmFuc2Zvcm1SZWN1cnNpdmVseShzdWJGbiwgXCJQYXRoSW5Nb2RlbFwiLCAoc3ViU3ViRm4pID0+IHtcblx0XHRcdFx0XHRcdFx0XHRoYXNFbWJlZGRlZEZ1bmN0aW9uQ2FsbE9yQmluZGluZyA9IHRydWU7XG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuIHN1YlN1YkZuO1xuXHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0cmV0dXJuIHN1YkZuO1xuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0dHJ1ZVxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdFx0Y29uc3QgYXJndW1lbnRTdHJpbmcgPSBgJHtleHByLnBhcmFtZXRlcnMubWFwKChhcmcpID0+IGNvbXBpbGVFeHByZXNzaW9uKGFyZywgdHJ1ZSkpLmpvaW4oXCIsIFwiKX1gO1xuXHRcdFx0bGV0IGZuQ2FsbCA9XG5cdFx0XHRcdGV4cHIub2JqID09PSB1bmRlZmluZWRcblx0XHRcdFx0XHQ/IGAke2V4cHIuZm59KCR7YXJndW1lbnRTdHJpbmd9KWBcblx0XHRcdFx0XHQ6IGAke2NvbXBpbGVFeHByZXNzaW9uKGV4cHIub2JqLCB0cnVlKX0uJHtleHByLmZufSgke2FyZ3VtZW50U3RyaW5nfSlgO1xuXHRcdFx0aWYgKCFlbWJlZGRlZEluQmluZGluZyAmJiBoYXNFbWJlZGRlZEZ1bmN0aW9uQ2FsbE9yQmluZGluZykge1xuXHRcdFx0XHRmbkNhbGwgPSBgez0gJHtmbkNhbGx9fWA7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gZm5DYWxsO1xuXG5cdFx0Y2FzZSBcIkVtYmVkZGVkRXhwcmVzc2lvbkJpbmRpbmdcIjpcblx0XHRcdHJldHVybiBlbWJlZGRlZEluQmluZGluZyA/IGAoJHtleHByLnZhbHVlLnN1YnN0cmluZygyLCBleHByLnZhbHVlLmxlbmd0aCAtIDEpfSlgIDogYCR7ZXhwci52YWx1ZX1gO1xuXG5cdFx0Y2FzZSBcIkVtYmVkZGVkQmluZGluZ1wiOlxuXHRcdFx0cmV0dXJuIGVtYmVkZGVkSW5CaW5kaW5nID8gYCR7ZW1iZWRkZWRTZXBhcmF0b3J9JHtleHByLnZhbHVlfWAgOiBgJHtleHByLnZhbHVlfWA7XG5cblx0XHRjYXNlIFwiUGF0aEluTW9kZWxcIjpcblx0XHRcdHJldHVybiBjb21waWxlUGF0aEluTW9kZWxFeHByZXNzaW9uKGV4cHIsIGVtYmVkZGVkSW5CaW5kaW5nLCBlbWJlZGRlZFNlcGFyYXRvcik7XG5cblx0XHRjYXNlIFwiQ29tcGFyaXNvblwiOlxuXHRcdFx0Y29uc3QgY29tcGFyaXNvbkV4cHJlc3Npb24gPSBjb21waWxlQ29tcGFyaXNvbkV4cHJlc3Npb24oZXhwcik7XG5cdFx0XHRyZXR1cm4gd3JhcEJpbmRpbmdFeHByZXNzaW9uKGNvbXBhcmlzb25FeHByZXNzaW9uLCBlbWJlZGRlZEluQmluZGluZyk7XG5cblx0XHRjYXNlIFwiSWZFbHNlXCI6XG5cdFx0XHRjb25zdCBpZkVsc2VFeHByZXNzaW9uID0gYCR7Y29tcGlsZUV4cHJlc3Npb24oZXhwci5jb25kaXRpb24sIHRydWUpfSA/ICR7Y29tcGlsZUV4cHJlc3Npb24oXG5cdFx0XHRcdGV4cHIub25UcnVlLFxuXHRcdFx0XHR0cnVlLFxuXHRcdFx0XHRrZWVwVGFyZ2V0VHlwZVxuXHRcdFx0KX0gOiAke2NvbXBpbGVFeHByZXNzaW9uKGV4cHIub25GYWxzZSwgdHJ1ZSwga2VlcFRhcmdldFR5cGUpfWA7XG5cdFx0XHRyZXR1cm4gd3JhcEJpbmRpbmdFeHByZXNzaW9uKGlmRWxzZUV4cHJlc3Npb24sIGVtYmVkZGVkSW5CaW5kaW5nLCB0cnVlKTtcblxuXHRcdGNhc2UgXCJTZXRcIjpcblx0XHRcdGNvbnN0IHNldEV4cHJlc3Npb24gPSBleHByLm9wZXJhbmRzLm1hcCgob3BlcmFuZCkgPT4gY29tcGlsZUV4cHJlc3Npb24ob3BlcmFuZCwgdHJ1ZSkpLmpvaW4oYCAke2V4cHIub3BlcmF0b3J9IGApO1xuXHRcdFx0cmV0dXJuIHdyYXBCaW5kaW5nRXhwcmVzc2lvbihzZXRFeHByZXNzaW9uLCBlbWJlZGRlZEluQmluZGluZywgdHJ1ZSk7XG5cblx0XHRjYXNlIFwiQ29uY2F0XCI6XG5cdFx0XHRjb25zdCBjb25jYXRFeHByZXNzaW9uID0gZXhwci5leHByZXNzaW9uc1xuXHRcdFx0XHQubWFwKChuZXN0ZWRFeHByZXNzaW9uKSA9PiBjb21waWxlRXhwcmVzc2lvbihuZXN0ZWRFeHByZXNzaW9uLCB0cnVlLCB0cnVlKSlcblx0XHRcdFx0LmpvaW4oXCIgKyBcIik7XG5cdFx0XHRyZXR1cm4gd3JhcEJpbmRpbmdFeHByZXNzaW9uKGNvbmNhdEV4cHJlc3Npb24sIGVtYmVkZGVkSW5CaW5kaW5nKTtcblxuXHRcdGNhc2UgXCJMZW5ndGhcIjpcblx0XHRcdGNvbnN0IGxlbmd0aEV4cHJlc3Npb24gPSBgJHtjb21waWxlRXhwcmVzc2lvbihleHByLnBhdGhJbk1vZGVsLCB0cnVlKX0ubGVuZ3RoYDtcblx0XHRcdHJldHVybiB3cmFwQmluZGluZ0V4cHJlc3Npb24obGVuZ3RoRXhwcmVzc2lvbiwgZW1iZWRkZWRJbkJpbmRpbmcpO1xuXG5cdFx0Y2FzZSBcIk5vdFwiOlxuXHRcdFx0Y29uc3Qgbm90RXhwcmVzc2lvbiA9IGAhJHtjb21waWxlRXhwcmVzc2lvbihleHByLm9wZXJhbmQsIHRydWUpfWA7XG5cdFx0XHRyZXR1cm4gd3JhcEJpbmRpbmdFeHByZXNzaW9uKG5vdEV4cHJlc3Npb24sIGVtYmVkZGVkSW5CaW5kaW5nKTtcblx0XHRjYXNlIFwiQXJpdGhtZXRpY1wiOlxuXHRcdFx0Y29uc3QgYXJpdGhtZXRpY0V4cHJlc3Npb24gPSBjb21waWxlQXJpdGhtZXRpY0V4cHJlc3Npb24oZXhwcik7XG5cdFx0XHRyZXR1cm4gd3JhcEJpbmRpbmdFeHByZXNzaW9uKGFyaXRobWV0aWNFeHByZXNzaW9uLCBlbWJlZGRlZEluQmluZGluZyk7XG5cblx0XHRjYXNlIFwiVHJ1dGh5XCI6XG5cdFx0XHRjb25zdCB0cnV0aHlFeHByZXNzaW9uID0gYCEhJHtjb21waWxlRXhwcmVzc2lvbihleHByLm9wZXJhbmQsIHRydWUpfWA7XG5cdFx0XHRyZXR1cm4gd3JhcEJpbmRpbmdFeHByZXNzaW9uKHRydXRoeUV4cHJlc3Npb24sIGVtYmVkZGVkSW5CaW5kaW5nKTtcblxuXHRcdGNhc2UgXCJGb3JtYXR0ZXJcIjpcblx0XHRcdGNvbnN0IGZvcm1hdHRlckV4cHJlc3Npb24gPSBjb21waWxlRm9ybWF0dGVyRXhwcmVzc2lvbihleHByKTtcblx0XHRcdHJldHVybiBlbWJlZGRlZEluQmluZGluZyA/IGAkJHtmb3JtYXR0ZXJFeHByZXNzaW9ufWAgOiBmb3JtYXR0ZXJFeHByZXNzaW9uO1xuXG5cdFx0Y2FzZSBcIkNvbXBsZXhUeXBlXCI6XG5cdFx0XHRjb25zdCBjb21wbGV4VHlwZUV4cHJlc3Npb24gPSBjb21waWxlQ29tcGxleFR5cGVFeHByZXNzaW9uKGV4cHIpO1xuXHRcdFx0cmV0dXJuIGVtYmVkZGVkSW5CaW5kaW5nID8gYCQke2NvbXBsZXhUeXBlRXhwcmVzc2lvbn1gIDogY29tcGxleFR5cGVFeHByZXNzaW9uO1xuXG5cdFx0ZGVmYXVsdDpcblx0XHRcdHJldHVybiBcIlwiO1xuXHR9XG59XG5cbmZ1bmN0aW9uIGNvbXBpbGVBcml0aG1ldGljRXhwcmVzc2lvbihleHByZXNzaW9uOiBBcml0aG1ldGljRXhwcmVzc2lvbik6IHN0cmluZyB7XG5cdGZ1bmN0aW9uIGNvbXBpbGVPcGVyYW5kKG9wZXJhbmQ6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjx1bmtub3duPik6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIHtcblx0XHRjb25zdCBjb21waWxlZE9wZXJhbmQgPSBjb21waWxlRXhwcmVzc2lvbihvcGVyYW5kLCB0cnVlKSA/PyBcInVuZGVmaW5lZFwiO1xuXHRcdHJldHVybiB3cmFwQmluZGluZ0V4cHJlc3Npb24oY29tcGlsZWRPcGVyYW5kLCB0cnVlLCBuZWVkUGFyZW50aGVzaXMob3BlcmFuZCkpO1xuXHR9XG5cdHN3aXRjaCAoZXhwcmVzc2lvbi5vcGVyYXRvcikge1xuXHRcdGNhc2UgXCJOZWdcIjpcblx0XHRcdHJldHVybiBgLSgke2NvbXBpbGVPcGVyYW5kKGV4cHJlc3Npb24ub3BlcmFuZDEpfSlgO1xuXHRcdGNhc2UgXCJGbG9vclwiOlxuXHRcdFx0cmV0dXJuIGBNYXRoLmZsb29yKCR7Y29tcGlsZU9wZXJhbmQoZXhwcmVzc2lvbi5vcGVyYW5kMSl9KWA7XG5cdFx0Y2FzZSBcIiVcIjpcblx0XHRjYXNlIFwiL1wiOlxuXHRcdGNhc2UgXCIqXCI6XG5cdFx0Y2FzZSBcIitcIjpcblx0XHRjYXNlIFwiLVwiOlxuXHRcdFx0cmV0dXJuIGAke2NvbXBpbGVPcGVyYW5kKGV4cHJlc3Npb24ub3BlcmFuZDEpfSAke2V4cHJlc3Npb24ub3BlcmF0b3J9ICR7Y29tcGlsZU9wZXJhbmQoZXhwcmVzc2lvbi5vcGVyYW5kMil9YDtcblx0fVxufVxuXG4vKipcbiAqIENvbXBpbGUgYSBjb21wYXJpc29uIGV4cHJlc3Npb24uXG4gKiBAcGFyYW0gZXhwcmVzc2lvbiBUaGUgY29tcGFyaXNvbiBleHByZXNzaW9uLlxuICogQHJldHVybnMgVGhlIGNvbXBpbGVkIGV4cHJlc3Npb24uIE5lZWRzIHdyYXBwaW5nIGJlZm9yZSBpdCBjYW4gYmUgdXNlZCBhcyBhbiBleHByZXNzaW9uIGJpbmRpbmcuXG4gKi9cbmZ1bmN0aW9uIGNvbXBpbGVDb21wYXJpc29uRXhwcmVzc2lvbihleHByZXNzaW9uOiBDb21wYXJpc29uRXhwcmVzc2lvbik6IHN0cmluZyB7XG5cdGZ1bmN0aW9uIGNvbXBpbGVPcGVyYW5kKG9wZXJhbmQ6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjx1bmtub3duPik6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIHtcblx0XHRjb25zdCBjb21waWxlZE9wZXJhbmQgPSBjb21waWxlRXhwcmVzc2lvbihvcGVyYW5kLCB0cnVlKSA/PyBcInVuZGVmaW5lZFwiO1xuXHRcdHJldHVybiB3cmFwQmluZGluZ0V4cHJlc3Npb24oY29tcGlsZWRPcGVyYW5kLCB0cnVlLCBuZWVkUGFyZW50aGVzaXMob3BlcmFuZCkpO1xuXHR9XG5cdHN3aXRjaCAoZXhwcmVzc2lvbi5vcGVyYXRvcikge1xuXHRcdGNhc2UgXCJJblwiOiB7XG5cdFx0XHRjb25zdCBwYXRoID0gY29tcGlsZU9wZXJhbmQoZXhwcmVzc2lvbi5vcGVyYW5kMSk7XG5cdFx0XHRjb25zdCBjb2xsZWN0aW9uID0gY29tcGlsZU9wZXJhbmQoZXhwcmVzc2lvbi5vcGVyYW5kMikgPz8gW107XG5cdFx0XHRyZXR1cm4gYCR7Y29sbGVjdGlvbn0uaW5jbHVkZXMoJHtwYXRofSlgO1xuXHRcdH1cblx0XHRjYXNlIFwiSGFzXCI6IHtcblx0XHRcdGNvbnN0IHBhdGggPSBjb21waWxlT3BlcmFuZChleHByZXNzaW9uLm9wZXJhbmQxKTtcblx0XHRcdGNvbnN0IGZsYWdzID0gY29tcGlsZU9wZXJhbmQoZXhwcmVzc2lvbi5vcGVyYW5kMikgPz8gW107XG5cdFx0XHRyZXR1cm4gYCgke3BhdGh9ICYgJHtmbGFnc30pID4gMGA7XG5cdFx0fVxuXHRcdGNhc2UgXCI9PT1cIjpcblx0XHRjYXNlIFwiIT09XCI6XG5cdFx0Y2FzZSBcIj49XCI6XG5cdFx0Y2FzZSBcIj5cIjpcblx0XHRjYXNlIFwiPD1cIjpcblx0XHRjYXNlIFwiPFwiOlxuXHRcdFx0cmV0dXJuIGAke2NvbXBpbGVPcGVyYW5kKGV4cHJlc3Npb24ub3BlcmFuZDEpfSAke2V4cHJlc3Npb24ub3BlcmF0b3J9ICR7Y29tcGlsZU9wZXJhbmQoZXhwcmVzc2lvbi5vcGVyYW5kMil9YDtcblx0fVxufVxuXG4vKipcbiAqIENvbXBpbGUgYSBmb3JtYXR0ZXIgZXhwcmVzc2lvbi5cbiAqIEBwYXJhbSBleHByZXNzaW9uIFRoZSBmb3JtYXR0ZXIgZXhwcmVzc2lvbi5cbiAqIEByZXR1cm5zIFRoZSBjb21waWxlZCBleHByZXNzaW9uLlxuICovXG5mdW5jdGlvbiBjb21waWxlRm9ybWF0dGVyRXhwcmVzc2lvbjxUIGV4dGVuZHMgUHJpbWl0aXZlVHlwZT4oZXhwcmVzc2lvbjogRm9ybWF0dGVyRXhwcmVzc2lvbjxUPik6IHN0cmluZyB7XG5cdGlmIChleHByZXNzaW9uLnBhcmFtZXRlcnMubGVuZ3RoID09PSAxKSB7XG5cdFx0cmV0dXJuIGB7JHtjb21waWxlUGF0aFBhcmFtZXRlcihleHByZXNzaW9uLnBhcmFtZXRlcnNbMF0gYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFByaW1pdGl2ZVR5cGU+LCB0cnVlKX0sIGZvcm1hdHRlcjogJyR7XG5cdFx0XHRleHByZXNzaW9uLmZuXG5cdFx0fSd9YDtcblx0fSBlbHNlIHtcblx0XHRjb25zdCBwYXJ0cyA9IGV4cHJlc3Npb24ucGFyYW1ldGVycy5tYXAoKHBhcmFtKSA9PiB7XG5cdFx0XHRpZiAocGFyYW0uX3R5cGUgPT09IFwiQ29tcGxleFR5cGVcIikge1xuXHRcdFx0XHRyZXR1cm4gY29tcGlsZUNvbXBsZXhUeXBlRXhwcmVzc2lvbihwYXJhbSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRyZXR1cm4gY29tcGlsZVBhdGhQYXJhbWV0ZXIocGFyYW0gYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFByaW1pdGl2ZVR5cGU+KTtcblx0XHRcdH1cblx0XHR9KTtcblx0XHRyZXR1cm4gYHtwYXJ0czogWyR7cGFydHMuam9pbihcIiwgXCIpfV0sIGZvcm1hdHRlcjogJyR7ZXhwcmVzc2lvbi5mbn0nfWA7XG5cdH1cbn1cblxuLyoqXG4gKiBDb21waWxlIHRoZSBwYXRoIHBhcmFtZXRlciBvZiBhIGZvcm1hdHRlciBjYWxsLlxuICogQHBhcmFtIGV4cHJlc3Npb24gVGhlIGJpbmRpbmcgcGFydCB0byBldmFsdWF0ZVxuICogQHBhcmFtIHNpbmdsZVBhdGggV2hldGhlciB0aGVyZSBpcyBvbmUgb3IgbXVsdGlwbGUgcGF0aCB0byBjb25zaWRlclxuICogQHJldHVybnMgVGhlIHN0cmluZyBzbmlwcGV0IHRvIGluY2x1ZGUgaW4gdGhlIG92ZXJhbGwgYmluZGluZyBkZWZpbml0aW9uXG4gKi9cbmZ1bmN0aW9uIGNvbXBpbGVQYXRoUGFyYW1ldGVyKGV4cHJlc3Npb246IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxQcmltaXRpdmVUeXBlPiwgc2luZ2xlUGF0aCA9IGZhbHNlKTogc3RyaW5nIHtcblx0bGV0IG91dFZhbHVlID0gXCJcIjtcblx0aWYgKGV4cHJlc3Npb24uX3R5cGUgPT09IFwiQ29uc3RhbnRcIikge1xuXHRcdGlmIChleHByZXNzaW9uLnZhbHVlID09PSB1bmRlZmluZWQpIHtcblx0XHRcdC8vIFNwZWNpYWwgY2FzZSBvdGhlcndpc2UgdGhlIEpTVG9rZW5pemVyIGNvbXBsYWlucyBhYm91dCBpbmNvcnJlY3QgY29udGVudFxuXHRcdFx0b3V0VmFsdWUgPSBgdmFsdWU6ICd1bmRlZmluZWQnYDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0b3V0VmFsdWUgPSBgdmFsdWU6ICR7Y29tcGlsZUNvbnN0YW50KGV4cHJlc3Npb24sIHRydWUpfWA7XG5cdFx0fVxuXHR9IGVsc2UgaWYgKGV4cHJlc3Npb24uX3R5cGUgPT09IFwiUGF0aEluTW9kZWxcIikge1xuXHRcdG91dFZhbHVlID0gYHBhdGg6ICcke2NvbXBpbGVQYXRoSW5Nb2RlbChleHByZXNzaW9uKX0nYDtcblxuXHRcdG91dFZhbHVlICs9IGV4cHJlc3Npb24udHlwZSA/IGAsIHR5cGU6ICcke2V4cHJlc3Npb24udHlwZX0nYCA6IGAsIHRhcmdldFR5cGU6ICdhbnknYDtcblx0XHRpZiAoZXhwcmVzc2lvbi5tb2RlKSB7XG5cdFx0XHRvdXRWYWx1ZSArPSBgLCBtb2RlOiAnJHtjb21waWxlRXhwcmVzc2lvbihleHByZXNzaW9uLm1vZGUpfSdgO1xuXHRcdH1cblx0XHRpZiAoaGFzRWxlbWVudHMoZXhwcmVzc2lvbi5jb25zdHJhaW50cykpIHtcblx0XHRcdG91dFZhbHVlICs9IGAsIGNvbnN0cmFpbnRzOiAke2NvbXBpbGVFeHByZXNzaW9uKGV4cHJlc3Npb24uY29uc3RyYWludHMpfWA7XG5cdFx0fVxuXHRcdGlmIChoYXNFbGVtZW50cyhleHByZXNzaW9uLmZvcm1hdE9wdGlvbnMpKSB7XG5cdFx0XHRvdXRWYWx1ZSArPSBgLCBmb3JtYXRPcHRpb25zOiAke2NvbXBpbGVFeHByZXNzaW9uKGV4cHJlc3Npb24uZm9ybWF0T3B0aW9ucyl9YDtcblx0XHR9XG5cdFx0aWYgKGhhc0VsZW1lbnRzKGV4cHJlc3Npb24ucGFyYW1ldGVycykpIHtcblx0XHRcdG91dFZhbHVlICs9IGAsIHBhcmFtZXRlcnM6ICR7Y29tcGlsZUV4cHJlc3Npb24oZXhwcmVzc2lvbi5wYXJhbWV0ZXJzKX1gO1xuXHRcdH1cblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gXCJcIjtcblx0fVxuXHRyZXR1cm4gc2luZ2xlUGF0aCA/IG91dFZhbHVlIDogYHske291dFZhbHVlfX1gO1xufVxuXG5mdW5jdGlvbiBoYXNFbGVtZW50cyhvYmo6IG9iamVjdCB8IHVuZGVmaW5lZCk6IGJvb2xlYW4ge1xuXHRyZXR1cm4gISFvYmogJiYgT2JqZWN0LmtleXMob2JqKS5sZW5ndGggPiAwO1xufVxuXG4vKipcbiAqIENvbXBpbGUgYSBiaW5kaW5nIGV4cHJlc3Npb24gcGF0aC5cbiAqIEBwYXJhbSBleHByZXNzaW9uIFRoZSBleHByZXNzaW9uIHRvIGNvbXBpbGUuXG4gKiBAcmV0dXJucyBUaGUgY29tcGlsZWQgcGF0aC5cbiAqL1xuZnVuY3Rpb24gY29tcGlsZVBhdGhJbk1vZGVsPFQgZXh0ZW5kcyBQcmltaXRpdmVUeXBlPihleHByZXNzaW9uOiBQYXRoSW5Nb2RlbEV4cHJlc3Npb248VD4pOiBzdHJpbmcge1xuXHRyZXR1cm4gYCR7ZXhwcmVzc2lvbi5tb2RlbE5hbWUgPyBleHByZXNzaW9uLm1vZGVsTmFtZSArIFwiPlwiIDogXCJcIn0ke2V4cHJlc3Npb24ucGF0aH1gO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7RUEwREE7QUFDQTtBQUNBOztFQU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNPLE1BQU1BLHVCQUF1QixHQUFHLDRCQUE0Qjs7RUEwRm5FO0FBQ0E7QUFDQTtFQUZBQyxRQUFBLENBQUFELHVCQUFBLEdBQUFBLHVCQUFBO0VBZ0RPLFNBQVNFLFVBQVVBLENBQUNDLGFBQXNCLEVBQTZCO0lBQzdFLE9BQVFBLGFBQWEsRUFBZUMsS0FBSyxLQUFLLFVBQVU7RUFDekQ7RUFBQ0gsUUFBQSxDQUFBQyxVQUFBLEdBQUFBLFVBQUE7RUFDRCxTQUFTRyxpQkFBaUJBLENBQUNGLGFBQXNCLEVBQW9DO0lBQ3BGLE9BQVFBLGFBQWEsRUFBc0JDLEtBQUssS0FBSyxpQkFBaUI7RUFDdkU7O0VBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7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
|
|
2235
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJiaW5kaW5nVG9vbGtpdE5hbWVzcGFjZSIsIl9leHBvcnRzIiwiaXNQcm9wZXJ0eSIsInNlcnZpY2VPYmplY3QiLCJfdHlwZSIsImlzQWN0aW9uUGFyYW1ldGVyIiwiRURNX1RZUEVfTUFQUElORyIsInR5cGUiLCJjb25zdHJhaW50cyIsIiRQcmVjaXNpb24iLCIkVjQiLCIkU2NhbGUiLCIkTWF4TGVuZ3RoIiwiJE51bGxhYmxlIiwidW5yZXNvbHZhYmxlRXhwcmVzc2lvbiIsImVzY2FwZVhtbEF0dHJpYnV0ZSIsImlucHV0U3RyaW5nIiwicmVwbGFjZSIsImhhc1VucmVzb2x2YWJsZUV4cHJlc3Npb24iLCJleHByZXNzaW9ucyIsImZpbmQiLCJleHByIiwidW5kZWZpbmVkIiwiX2NoZWNrRXhwcmVzc2lvbnNBcmVFcXVhbCIsImEiLCJiIiwidmFsdWUiLCJvcGVyYXRvciIsIm9wZXJhbmQxIiwib3BlcmFuZDIiLCJvcGVyYW5kIiwib3BlcmFuZHMiLCJsZW5ndGgiLCJldmVyeSIsImV4cHJlc3Npb24iLCJzb21lIiwib3RoZXJFeHByZXNzaW9uIiwiY29uZGl0aW9uIiwib25UcnVlIiwib25GYWxzZSIsImFFeHByZXNzaW9ucyIsImJFeHByZXNzaW9ucyIsImluZGV4IiwicGF0aEluTW9kZWwiLCJtb2RlbE5hbWUiLCJwYXRoIiwidGFyZ2V0RW50aXR5U2V0IiwiZm4iLCJwYXJhbWV0ZXJzIiwiYmluZGluZ1BhcmFtZXRlcnMiLCJvdGhlckZ1bmN0aW9uIiwib2JqIiwicmVmIiwiZmxhdHRlblNldEV4cHJlc3Npb24iLCJyZWR1Y2UiLCJyZXN1bHQiLCJjYW5kaWRhdGVzRm9yRmxhdHRlbmluZyIsImZvckVhY2giLCJjYW5kaWRhdGUiLCJlIiwicHVzaCIsImhhc09wcG9zaXRlRXhwcmVzc2lvbnMiLCJuZWdhdGVkRXhwcmVzc2lvbnMiLCJtYXAiLCJub3QiLCJpIiwiYW5kIiwid3JhcFByaW1pdGl2ZSIsImlzU3RhdGljRmFsc2UiLCJub25Ucml2aWFsRXhwcmVzc2lvbiIsImZpbHRlciIsImlzRmFsc2UiLCJpc0NvbnN0YW50IiwiY29uc3RhbnQiLCJpc1ZhbGlkIiwiaXNUcnVlIiwib3IiLCJpc1N0YXRpY1RydWUiLCJhZGQiLCJsZWZ0T3BlcmFuZCIsInJpZ2h0T3BlcmFuZCIsImFyaXRobWV0aWMiLCJzdWJ0cmFjdCIsIm11bHRpcGx5IiwiZGl2aWRlIiwibW9kdWxvIiwibmVnYXRlIiwiZmxvb3IiLCJsZWZ0RXhwcmVzc2lvbiIsInJpZ2h0RXhwcmVzc2lvbiIsInN1bSIsImRpZmYiLCJkaXYiLCJtb2QiLCJNYXRoIiwibXVsdCIsImlzQ29tcGFyaXNvbiIsImlzVHJ1dGh5IiwiYmluZGluZ0V4cHJlc3Npb24iLCJ2aXNpdGVkTmF2aWdhdGlvblBhdGhzIiwicGF0aFZpc2l0b3IiLCJ0YXJnZXRQYXRoIiwibG9jYWxQYXRoIiwiY29uY2F0Iiwiam9pbiIsImdldEJpbmRpbmdQYXRoRXhwcmVzc2lvbkZyb21QYXJ0bmVyTmF2aWdhdGlvbiIsInBhcnRuZXJQYXRoIiwic3RhcnRzV2l0aCIsInN1YnN0cmluZyIsImdldEJpbmRpbmdFeHByZXNzaW9uRnJvbVVwcGVyQ29udGV4dCIsInBhcnRuZXJOYXZpZ2F0aW9uUHJvcGVydHlOYW1lIiwiZmFsbGJhY2tWYWx1ZSIsIm5ld09wZXJhbmRzIiwidHJhbnNmb3JtZWRFeHByZXNzaW9uIiwidHJhbnNmb3JtUmVjdXJzaXZlbHkiLCJwYXRoRXhwcmVzc2lvbiIsImNvbnN0YW50VmFsdWUiLCJBcnJheSIsImlzQXJyYXkiLCJpc1ByaW1pdGl2ZU9iamVjdCIsInZhbHVlT2YiLCJPYmplY3QiLCJlbnRyaWVzIiwicGxhaW5FeHByZXNzaW9uIiwia2V5IiwidmFsIiwid3JhcHBlZFZhbHVlIiwicmVzb2x2ZUJpbmRpbmdTdHJpbmciLCJ0YXJnZXRUeXBlIiwicGF0aEluTW9kZWxSZWdleCIsInBhdGhJbk1vZGVsUmVnZXhNYXRjaCIsImV4ZWMiLCJpc05hTiIsIk51bWJlciIsInJlZmVyZW5jZSIsImJpbmRTdGF0ZSIsInN0YXRlT2JqZWN0UHJvcCIsIl9fYmluZGluZ0luZm8iLCJ0b1N0cmluZyIsIm1vZGVsIiwic29tZXRoaW5nIiwiaXNCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24iLCJtYXliZUNvbnN0YW50IiwiaXNQYXRoSW5Nb2RlbEV4cHJlc3Npb24iLCJtYXliZUJpbmRpbmciLCJpc0NvbXBsZXhUeXBlRXhwcmVzc2lvbiIsImlzQ29uY2F0RXhwcmVzc2lvbiIsImlzSWZFbHNlRXhwcmVzc2lvbiIsImlzVW5kZWZpbmVkRXhwcmVzc2lvbiIsImV4cHJlc3Npb25Bc0V4cHJlc3Npb24iLCJvYmplY3RUeXBlIiwiY29uc3RydWN0b3IiLCJuYW1lIiwiaXNDb21wbGV4QW5ub3RhdGlvbkV4cHJlc3Npb24iLCJhbm5vdGF0aW9uVmFsdWUiLCJDT05WRVJURVJfUk9PVF9TWU1CT0wiLCJzZXRDb252ZXJ0ZXJSb290U3ltYm9sIiwiY29udmVydGVyUm9vdFN5bWJvbCIsImdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbiIsImRlZmF1bHRWYWx1ZSIsImNvbnZlcnRlclJvb3QiLCJhbm5vdGF0aW9uSWZFeHByZXNzaW9uIiwiJElmIiwicGFyc2VBbm5vdGF0aW9uQ29uZGl0aW9uIiwiJE5vdCIsImVxdWFsIiwiJEVxIiwibm90RXF1YWwiLCIkTmUiLCJncmVhdGVyVGhhbiIsIiRHdCIsImdyZWF0ZXJPckVxdWFsIiwiJEdlIiwibGVzc1RoYW4iLCIkTHQiLCJsZXNzT3JFcXVhbCIsIiRMZSIsIiRPciIsIm9yQ29uZGl0aW9uIiwiJEFuZCIsImFuZENvbmRpdGlvbiIsImNvbXBhcmlzb24iLCIkSW4iLCIkSGFzIiwiJEFkZCIsIiRTdWIiLCIkTXVsIiwiJERpdiIsIiREaXZCeSIsIiRNb2QiLCIkTmVnIiwiYW5ub3RhdGlvbkFwcGx5RXhwcmVzc2lvbiIsImhhc093blByb3BlcnR5IiwiJFBhdGgiLCIkRnVuY3Rpb24iLCIkQXBwbHkiLCJyZXNvbHZlRW51bVZhbHVlIiwiJEVudW1NZW1iZXIiLCJpZkVsc2UiLCJjb252ZXJ0U3ViQXBwbHlQYXJhbWV0ZXJzIiwiYXBwbHlQYXJhbSIsImFwcGx5UGFyYW1Db252ZXJ0ZWQiLCJhcHBseUV4cHJlc3Npb24iLCJwYXJhbWV0ZXIiLCJ0ZW1wbGF0ZSIsInRlbXBsYXRlUGFyYW1zIiwic2xpY2UiLCJ0YXJnZXRPYmplY3QiLCIkTmFtZSIsIiRMYWJlbGVkRWxlbWVudCIsImxlZnRWYWx1ZUludCIsInJpZ2h0VmFsdWVJbnQiLCJhbGxDaGlsZHJlbkNvbnN0YW50cyIsIml0ZW0iLCJyaWdodFZhbHVlcyIsImluY2x1ZGVzIiwiY2hlY2tVbmRlZmluZWQiLCJsZWZ0IiwicmlnaHQiLCJyZWR1Y2VkIiwiY29uZGl0aW9uRXhwcmVzc2lvbiIsIm9uVHJ1ZUV4cHJlc3Npb24iLCJvbkZhbHNlRXhwcmVzc2lvbiIsInBhdGhJZHgiLCJteUlmRWxzZUV4cHJlc3Npb24iLCJmb3JtYXRSZXN1bHQiLCJhbGxQYXJ0cyIsImNvbnN0YW50UGF0aCIsInVuc2hpZnQiLCJKU09OIiwic3RyaW5naWZ5IiwiaGFzUmVmZXJlbmNlVG9EZWZhdWx0Q29udGV4dCIsImZvcm1hdHRlckZ1bmN0aW9uIiwiY29udGV4dEVudGl0eVR5cGUiLCJpZ25vcmVDb21wbGV4VHlwZSIsInBhcmFtZXRlckV4cHJlc3Npb25zIiwia2V5cyIsImZ1bmN0aW9uTmFtZSIsIl9fZnVuY3Rpb25OYW1lIiwiZm9ybWF0dGVyQ2xhc3MiLCJmb3JtYXR0ZXJOYW1lIiwic3BsaXQiLCJteUZvcm1hdEV4cHJlc3Npb24iLCJzZXRVcENvbnN0cmFpbnRzIiwidGFyZ2V0TWFwcGluZyIsInByb3BlcnR5Iiwic2NhbGUiLCJwcmVjaXNpb24iLCJtYXhMZW5ndGgiLCJudWxsYWJsZSIsImFubm90YXRpb25zIiwiVmFsaWRhdGlvbiIsIk1pbmltdW0iLCJtaW5pbXVtIiwiTWF4aW11bSIsIm1heGltdW0iLCJDb21tb24iLCJJc0RpZ2l0U2VxdWVuY2UiLCJpc0RpZ2l0U2VxdWVuY2UiLCJWNCIsImZvcm1hdFdpdGhUeXBlSW5mb3JtYXRpb24iLCJwcm9wZXJ0eUJpbmRpbmdFeHByZXNzaW9uIiwiaWdub3JlQ29uc3RyYWludHMiLCJvdXRFeHByZXNzaW9uIiwiZm9ybWF0T3B0aW9ucyIsImluZGV4T2YiLCJhc3NpZ24iLCJwYXJzZUFzU3RyaW5nIiwicGFyc2VLZWVwc0VtcHR5U3RyaW5nIiwiZmlzY2FsVHlwZSIsImdldEZpc2NhbFR5cGUiLCJ0eXBlc1N1cHBvcnRpbmdQYXJzZUVtcHR5VmFsdWVUb1plcm8iLCJwYXJzZUVtcHR5VmFsdWVUb1plcm8iLCJlbXB0eVN0cmluZyIsIklzRmlzY2FsWWVhciIsIklzRmlzY2FsUGVyaW9kIiwiSXNGaXNjYWxZZWFyUGVyaW9kIiwiSXNGaXNjYWxRdWFydGVyIiwiSXNGaXNjYWxZZWFyUXVhcnRlciIsIklzRmlzY2FsV2VlayIsIklzRmlzY2FsWWVhcldlZWsiLCJJc0RheU9mRmlzY2FsWWVhciIsImFkZFR5cGVJbmZvcm1hdGlvbiIsIm9Gb3JtYXRPcHRpb25zIiwib0NvbnN0cmFpbnRPcHRpb25zIiwiX2dldENvbXBsZXhUeXBlRm9ybWF0T3B0aW9uc0Zyb21GaXJzdFBhcmFtIiwidW9tUGF0aCIsIm1vZGUiLCJwcmVzZXJ2ZURlY2ltYWxzIiwic2tpcERlY2ltYWxzVmFsaWRhdGlvbiIsImN1cnJlbmN5UGF0aCIsIm1heEZyYWN0aW9uRGlnaXRzIiwicGFyYW0iLCJzaG93TnVtYmVyIiwic2hvd01lYXN1cmUiLCJkZWNpbWFsUGFkZGluZyIsImZ1bmMiLCJvbiIsImlzRm9ybWF0dGluZ0ZuIiwiaXNFbXB0eSIsImFCaW5kaW5ncyIsImZpbmFsRXhwcmVzc2lvbiIsImFsd2F5c0tlZXBUYXJnZXRUeXBlIiwiaXNFeHByZXNzaW9uU3RhdGljYWxseVJlc29sdmFibGUiLCJleHAiLCJyZWZlcmVuY2VkUGF0aHMiLCJwYXRoRXhwIiwicCIsImdldFN0YXRpY2FsbHlSZXNvbHZhYmxlRXhwcmVzc2lvbiIsImluRXhwcmVzc2lvbnMiLCJjb25jYXRlbmF0ZWQiLCJteUNvbmNhdEV4cHJlc3Npb24iLCJjb25jYXRXaXRoU2VwYXJhdG9yIiwic2VwYXJhdG9yIiwic2VwYXJhdG9yQ29uc3RhbnQiLCJwcmVmaXgiLCJleHByZXNzaW9uc1dpdGhTZXBhcmF0b3JzIiwiaW5FeHByZXNzaW9uIiwiZXhwcmVzc2lvblR5cGUiLCJ0cmFuc2Zvcm1GdW5jdGlvbiIsImluY2x1ZGVBbGxFeHByZXNzaW9uIiwic3ViRXhwcmVzc2lvbiIsImJpbmRpbmdQYXJhbWV0ZXIiLCJuZWVkUGFyZW50aGVzaXMiLCJjb21waWxlQ29uc3RhbnRPYmplY3QiLCJpc051bGxhYmxlIiwib2JqZWN0cyIsInByb3BlcnRpZXMiLCJjaGlsZFJlc3VsdCIsImNvbXBpbGVFeHByZXNzaW9uIiwiY29tcGlsZUNvbnN0YW50IiwiZW1iZWRkZWRJbkJpbmRpbmciLCJkb05vdFN0cmluZ2lmeSIsImNvbXBpbGVQYXRoSW5Nb2RlbEV4cHJlc3Npb24iLCJleHByZXNzaW9uRm9yQmluZGluZyIsImVtYmVkZGVkU2VwYXJhdG9yIiwiY29tcGxleEJpbmRpbmdEZWZpbml0aW9uIiwiY29tcGlsZVBhdGhJbk1vZGVsIiwib3V0QmluZGluZyIsImNvbXBpbGVDb21wbGV4VHlwZUV4cHJlc3Npb24iLCJjb21waWxlUGF0aFBhcmFtZXRlciIsIm91dHB1dEVuZCIsImhhc0VsZW1lbnRzIiwid3JhcEJpbmRpbmdFeHByZXNzaW9uIiwicGFyZW50aGVzaXNSZXF1aXJlZCIsInJlc29sdmVXaXRoUHJlbG9hZGVkVmFsdWVzIiwicHJlbG9hZGVkVmFsdWVzIiwia2VlcFRhcmdldFR5cGUiLCJoYXNFbWJlZGRlZEZ1bmN0aW9uQ2FsbE9yQmluZGluZyIsInN1YkZuIiwic3ViU3ViRm4iLCJhcmd1bWVudFN0cmluZyIsImFyZyIsImZuQ2FsbCIsImNvbXBhcmlzb25FeHByZXNzaW9uIiwiY29tcGlsZUNvbXBhcmlzb25FeHByZXNzaW9uIiwiaWZFbHNlRXhwcmVzc2lvbiIsInNldEV4cHJlc3Npb24iLCJjb25jYXRFeHByZXNzaW9uIiwibmVzdGVkRXhwcmVzc2lvbiIsImxlbmd0aEV4cHJlc3Npb24iLCJub3RFeHByZXNzaW9uIiwiYXJpdGhtZXRpY0V4cHJlc3Npb24iLCJjb21waWxlQXJpdGhtZXRpY0V4cHJlc3Npb24iLCJ0cnV0aHlFeHByZXNzaW9uIiwiZm9ybWF0dGVyRXhwcmVzc2lvbiIsImNvbXBpbGVGb3JtYXR0ZXJFeHByZXNzaW9uIiwiY29tcGxleFR5cGVFeHByZXNzaW9uIiwiY29tcGlsZU9wZXJhbmQiLCJjb21waWxlZE9wZXJhbmQiLCJjb2xsZWN0aW9uIiwiZmxhZ3MiLCJwYXJ0cyIsInNpbmdsZVBhdGgiLCJvdXRWYWx1ZSJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiQmluZGluZ1Rvb2xraXQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUge1xuXHRBY3Rpb25QYXJhbWV0ZXIsXG5cdEFkZEFubm90YXRpb25FeHByZXNzaW9uLFxuXHRBZGRDb25kaXRpb25hbEV4cHJlc3Npb24sXG5cdEFuZEFubm90YXRpb25FeHByZXNzaW9uLFxuXHRBbmRDb25kaXRpb25hbEV4cHJlc3Npb24sXG5cdEFwcGx5QW5ub3RhdGlvbkV4cHJlc3Npb24sXG5cdEJvb2xlYW4sXG5cdENvbmRpdGlvbmFsQ2hlY2tPclZhbHVlLFxuXHRDb252ZXJ0ZWRNZXRhZGF0YSxcblx0RGl2QW5ub3RhdGlvbkV4cHJlc3Npb24sXG5cdERpdkJ5QW5ub3RhdGlvbkV4cHJlc3Npb24sXG5cdERpdkJ5Q29uZGl0aW9uYWxFeHByZXNzaW9uLFxuXHREaXZDb25kaXRpb25hbEV4cHJlc3Npb24sXG5cdEVudGl0eVNldCxcblx0RW50aXR5VHlwZSxcblx0RXFBbm5vdGF0aW9uRXhwcmVzc2lvbixcblx0RXFDb25kaXRpb25hbEV4cHJlc3Npb24sXG5cdEdlQW5ub3RhdGlvbkV4cHJlc3Npb24sXG5cdEdlQ29uZGl0aW9uYWxFeHByZXNzaW9uLFxuXHRHdEFubm90YXRpb25FeHByZXNzaW9uLFxuXHRHdENvbmRpdGlvbmFsRXhwcmVzc2lvbixcblx0SGFzQW5ub3RhdGlvbkV4cHJlc3Npb24sXG5cdEhhc0NvbmRpdGlvbmFsRXhwcmVzc2lvbixcblx0SWZBbm5vdGF0aW9uRXhwcmVzc2lvbixcblx0SWZBbm5vdGF0aW9uRXhwcmVzc2lvblZhbHVlLFxuXHRJbkFubm90YXRpb25FeHByZXNzaW9uLFxuXHRJbkNvbmRpdGlvbmFsRXhwcmVzc2lvbixcblx0TGVBbm5vdGF0aW9uRXhwcmVzc2lvbixcblx0TGVDb25kaXRpb25hbEV4cHJlc3Npb24sXG5cdEx0QW5ub3RhdGlvbkV4cHJlc3Npb24sXG5cdEx0Q29uZGl0aW9uYWxFeHByZXNzaW9uLFxuXHRNb2RBbm5vdGF0aW9uRXhwcmVzc2lvbixcblx0TW9kQ29uZGl0aW9uYWxFeHByZXNzaW9uLFxuXHRNdWxBbm5vdGF0aW9uRXhwcmVzc2lvbixcblx0TXVsQ29uZGl0aW9uYWxFeHByZXNzaW9uLFxuXHROZUFubm90YXRpb25FeHByZXNzaW9uLFxuXHROZUNvbmRpdGlvbmFsRXhwcmVzc2lvbixcblx0TmVnQW5ub3RhdGlvbkV4cHJlc3Npb24sXG5cdE5lZ0NvbmRpdGlvbmFsRXhwcmVzc2lvbixcblx0Tm90QW5ub3RhdGlvbkV4cHJlc3Npb24sXG5cdE5vdENvbmRpdGlvbmFsRXhwcmVzc2lvbixcblx0T3JBbm5vdGF0aW9uRXhwcmVzc2lvbixcblx0T3JDb25kaXRpb25hbEV4cHJlc3Npb24sXG5cdFBhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbixcblx0UGF0aENvbmRpdGlvbkV4cHJlc3Npb24sXG5cdFByb3BlcnR5LFxuXHRQcm9wZXJ0eUFubm90YXRpb25WYWx1ZSxcblx0U3ViQW5ub3RhdGlvbkV4cHJlc3Npb24sXG5cdFN1YkNvbmRpdGlvbmFsRXhwcmVzc2lvbixcblx0Q29uc3RhbnRFeHByZXNzaW9uIGFzIFZvY2FiQ29uc3RhbnRFeHByZXNzaW9uXG59IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlc1wiO1xuaW1wb3J0IHsgQ29tbW9uQW5ub3RhdGlvblRlcm1zIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9Db21tb25cIjtcbmltcG9ydCB7IHJlc29sdmVFbnVtVmFsdWUgfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQW5ub3RhdGlvbkVudW1cIjtcbmltcG9ydCB0eXBlIHsgQmluZGluZ0luZm9Ib2xkZXIgfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQ2xhc3NTdXBwb3J0XCI7XG5cbmV4cG9ydCB0eXBlIFByaW1pdGl2ZVR5cGUgPSBzdHJpbmcgfCBudW1iZXIgfCBiaWdpbnQgfCBib29sZWFuIHwgb2JqZWN0IHwgbnVsbCB8IHVuZGVmaW5lZDtcbnR5cGUgRGVmaW5lZFByaW1pdGl2ZVR5cGUgPSBzdHJpbmcgfCBudW1iZXIgfCBiaWdpbnQgfCBib29sZWFuIHwgb2JqZWN0O1xuLyoqXG4gKiBSZXR1cm5zIGVpdGhlciB0aGUgdmFsdWUgb2YgdGhlIG9iamVjdCBvciB0aGUgb2JqZWN0IGl0c2VsZiBpZiBpdCBpcyBub3QgYSBwcmltaXRpdmUgb2JqZWN0LlxuICovXG50eXBlIFByaW1pdGl2ZVR5cGVDYXN0PFA+ID0gUCBleHRlbmRzIFN0cmluZyA/IHN0cmluZyA6IFAgZXh0ZW5kcyBCb29sZWFuID8gYm9vbGVhbiA6IFAgZXh0ZW5kcyBOdW1iZXIgPyBudW1iZXIgOiBQO1xudHlwZSBCYXNlRXhwcmVzc2lvbjxfVD4gPSB7XG5cdF90eXBlOiBzdHJpbmc7XG59O1xuXG4vKipcbiAqIENvbGxlY3Rpb24gb2YgZnVuY3Rpb25zIHRvIHN1cHBvcnQgdGhlIG1hbmlwdWxhdGlvbiBvZiBVSTUgYmluZGluZ3NcbiAqIEBuYW1lc3BhY2VcbiAqL1xuZXhwb3J0IGNvbnN0IGJpbmRpbmdUb29sa2l0TmFtZXNwYWNlID0gXCJzYXAuZmUuYmFzZS5CaW5kaW5nVG9vbGtpdFwiO1xuXG5leHBvcnQgdHlwZSBGb3JtYXRPcHRpb25zID0gUGFydGlhbDx7XG5cdGN1c3RvbVVuaXRzOiBSZWNvcmQ8c3RyaW5nLCBvYmplY3Q+O1xuXHRjdXN0b21DdXJyZW5jaWVzOiBSZWNvcmQ8c3RyaW5nLCBvYmplY3Q+O1xuXHRkZWNpbWFsczogbnVtYmVyO1xuXHRlbXB0eVN0cmluZzogbnVsbCB8IG51bWJlciB8IHN0cmluZztcblx0ZmlzY2FsVHlwZTogc3RyaW5nO1xuXHRncm91cGluZ0VuYWJsZWQ6IGJvb2xlYW47XG5cdG1heEZyYWN0aW9uRGlnaXRzOiBudW1iZXI7XG5cdG1heEludGVnZXJEaWdpdHM6IG51bWJlcjtcblx0bWluRnJhY3Rpb25EaWdpdHM6IG51bWJlcjtcblx0bWluSW50ZWdlckRpZ2l0czogbnVtYmVyO1xuXHRwYXJzZUFzU3RyaW5nOiBib29sZWFuO1xuXHRwYXJzZUtlZXBzRW1wdHlTdHJpbmc6IGJvb2xlYW47XG5cdHBhdHRlcm46IHN0cmluZztcblx0cHJlY2lzaW9uOiBudW1iZXI7XG5cdHByZXNlcnZlRGVjaW1hbHM6IGJvb2xlYW47XG5cdHNob3J0RGVjaW1hbHM6IG51bWJlcjtcblx0c2hvcnRSZWZOdW1iZXI6IG51bWJlcjtcblx0c2hvd01lYXN1cmU6IGJvb2xlYW47XG5cdHNob3dOdW1iZXI6IGJvb2xlYW47XG5cdHNob3dTY2FsZTogYm9vbGVhbjtcblx0c3R5bGU6IHN0cmluZztcbn0+O1xuXG5leHBvcnQgdHlwZSBDb25zdGFudEV4cHJlc3Npb248VD4gPSBCYXNlRXhwcmVzc2lvbjxUPiAmIHtcblx0X3R5cGU6IFwiQ29uc3RhbnRcIjtcblx0dmFsdWU6IFQ7XG59O1xuXG50eXBlIFNldE9wZXJhdG9yID0gXCImJlwiIHwgXCJ8fFwiO1xuZXhwb3J0IHR5cGUgU2V0RXhwcmVzc2lvbiA9IEJhc2VFeHByZXNzaW9uPGJvb2xlYW4+ICYge1xuXHRfdHlwZTogXCJTZXRcIjtcblx0b3BlcmF0b3I6IFNldE9wZXJhdG9yO1xuXHRvcGVyYW5kczogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+W107XG59O1xuXG5leHBvcnQgdHlwZSBOb3RFeHByZXNzaW9uID0gQmFzZUV4cHJlc3Npb248Ym9vbGVhbj4gJiB7XG5cdF90eXBlOiBcIk5vdFwiO1xuXHRvcGVyYW5kOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj47XG59O1xuXG5leHBvcnQgdHlwZSBUcnV0aHlFeHByZXNzaW9uID0gQmFzZUV4cHJlc3Npb248Ym9vbGVhbj4gJiB7XG5cdF90eXBlOiBcIlRydXRoeVwiO1xuXHRvcGVyYW5kOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248c3RyaW5nPjtcbn07XG5cbmV4cG9ydCB0eXBlIFJlZmVyZW5jZUV4cHJlc3Npb24gPSBCYXNlRXhwcmVzc2lvbjxvYmplY3Q+ICYge1xuXHRfdHlwZTogXCJSZWZcIjtcblx0cmVmOiBzdHJpbmcgfCBudWxsO1xufTtcblxuZXhwb3J0IHR5cGUgRm9ybWF0dGVyRXhwcmVzc2lvbjxUPiA9IEJhc2VFeHByZXNzaW9uPFQ+ICYge1xuXHRfdHlwZTogXCJGb3JtYXR0ZXJcIjtcblx0Zm46IHN0cmluZztcblx0cGFyYW1ldGVyczogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHVua25vd24+W107XG59O1xuXG50eXBlIENvbXBsZXhUeXBlRXhwcmVzc2lvbjxUPiA9IEJhc2VFeHByZXNzaW9uPFQ+ICYge1xuXHRfdHlwZTogXCJDb21wbGV4VHlwZVwiO1xuXHR0eXBlOiBzdHJpbmc7XG5cdGZvcm1hdE9wdGlvbnM6IEZvcm1hdE9wdGlvbnM7XG5cdGNvbnN0cmFpbnRzOiBvYmplY3Q7XG5cdHBhcmFtZXRlcnM6IG9iamVjdDtcblx0YmluZGluZ1BhcmFtZXRlcnM6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjx1bmtub3duPltdO1xufTtcblxuZXhwb3J0IHR5cGUgRnVuY3Rpb25FeHByZXNzaW9uPFQ+ID0gQmFzZUV4cHJlc3Npb248VD4gJiB7XG5cdF90eXBlOiBcIkZ1bmN0aW9uXCI7XG5cdG9iaj86IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxvYmplY3Q+O1xuXHRmbjogc3RyaW5nO1xuXHRpc0Zvcm1hdHRpbmdGbjogYm9vbGVhbjtcblx0cGFyYW1ldGVyczogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHVua25vd24+W107XG59O1xuXG5leHBvcnQgdHlwZSBDb25jYXRFeHByZXNzaW9uID0gQmFzZUV4cHJlc3Npb248c3RyaW5nPiAmIHtcblx0X3R5cGU6IFwiQ29uY2F0XCI7XG5cdGV4cHJlc3Npb25zOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248c3RyaW5nPltdO1xufTtcblxuZXhwb3J0IHR5cGUgTGVuZ3RoRXhwcmVzc2lvbiA9IEJhc2VFeHByZXNzaW9uPHN0cmluZz4gJiB7XG5cdF90eXBlOiBcIkxlbmd0aFwiO1xuXHRwYXRoSW5Nb2RlbDogUGF0aEluTW9kZWxFeHByZXNzaW9uPHVua25vd24+O1xufTtcblxudHlwZSBVbnJlc29sdmFibGVQYXRoRXhwcmVzc2lvbiA9IEJhc2VFeHByZXNzaW9uPHN0cmluZz4gJiB7XG5cdF90eXBlOiBcIlVucmVzb2x2YWJsZVwiO1xufTtcblxuLyoqXG4gKiBAdHlwZWRlZiBQYXRoSW5Nb2RlbEV4cHJlc3Npb25cbiAqL1xuZXhwb3J0IHR5cGUgUGF0aEluTW9kZWxFeHByZXNzaW9uPFQ+ID0gQmFzZUV4cHJlc3Npb248VD4gJiB7XG5cdF90eXBlOiBcIlBhdGhJbk1vZGVsXCI7XG5cdG1vZGVsTmFtZT86IHN0cmluZztcblx0cGF0aDogc3RyaW5nO1xuXHR0YXJnZXRFbnRpdHlTZXQ/OiBFbnRpdHlTZXQ7XG5cdHR5cGU/OiBzdHJpbmc7XG5cdGNvbnN0cmFpbnRzPzogQmluZGluZ0NvbnN0cmFpbnRzO1xuXHRwYXJhbWV0ZXJzPzogb2JqZWN0O1xuXHR0YXJnZXRUeXBlPzogc3RyaW5nO1xuXHRtb2RlPzogc3RyaW5nO1xuXHRmb3JtYXRPcHRpb25zPzogRm9ybWF0T3B0aW9ucztcblx0YWx3YXlzS2VlcFRhcmdldFR5cGU/OiBib29sZWFuO1xufTtcblxuZXhwb3J0IHR5cGUgRW1iZWRkZWRVSTVCaW5kaW5nRXhwcmVzc2lvbjxUPiA9IEJhc2VFeHByZXNzaW9uPFQ+ICYge1xuXHRfdHlwZTogXCJFbWJlZGRlZEJpbmRpbmdcIjtcblx0dmFsdWU6IHN0cmluZztcbn07XG5cbmV4cG9ydCB0eXBlIEVtYmVkZGVkVUk1RXhwcmVzc2lvbkJpbmRpbmdFeHByZXNzaW9uPFQ+ID0gQmFzZUV4cHJlc3Npb248VD4gJiB7XG5cdF90eXBlOiBcIkVtYmVkZGVkRXhwcmVzc2lvbkJpbmRpbmdcIjtcblx0dmFsdWU6IHN0cmluZztcbn07XG5cbmV4cG9ydCB0eXBlIENvbXBhcmlzb25PcGVyYXRvciA9IFwiPT09XCIgfCBcIiE9PVwiIHwgXCI+PVwiIHwgXCI+XCIgfCBcIjw9XCIgfCBcIjxcIiB8IFwiSGFzXCIgfCBcIkluXCI7XG5leHBvcnQgdHlwZSBDb21wYXJpc29uRXhwcmVzc2lvbiA9IEJhc2VFeHByZXNzaW9uPGJvb2xlYW4+ICYge1xuXHRfdHlwZTogXCJDb21wYXJpc29uXCI7XG5cdG9wZXJhdG9yOiBDb21wYXJpc29uT3BlcmF0b3I7XG5cdG9wZXJhbmQxOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248dW5rbm93bj47XG5cdG9wZXJhbmQyOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248dW5rbm93bj47XG59O1xuXG5leHBvcnQgdHlwZSBBcml0aG1ldGljT3BlcmF0b3IgPSBcIitcIiB8IFwiLVwiIHwgXCIqXCIgfCBcIi9cIiB8IFwiJVwiIHwgXCJOZWdcIiB8IFwiRmxvb3JcIjtcbmV4cG9ydCB0eXBlIEFyaXRobWV0aWNFeHByZXNzaW9uID0gQmFzZUV4cHJlc3Npb248bnVtYmVyPiAmIHtcblx0X3R5cGU6IFwiQXJpdGhtZXRpY1wiO1xuXHRvcGVyYXRvcjogQXJpdGhtZXRpY09wZXJhdG9yO1xuXHRvcGVyYW5kMTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHVua25vd24+O1xuXHRvcGVyYW5kMjogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHVua25vd24+O1xufTtcbmV4cG9ydCB0eXBlIElmRWxzZUV4cHJlc3Npb248VD4gPSBCYXNlRXhwcmVzc2lvbjxUPiAmIHtcblx0X3R5cGU6IFwiSWZFbHNlXCI7XG5cdGNvbmRpdGlvbjogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+O1xuXHRvblRydWU6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxUPjtcblx0b25GYWxzZTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFQ+O1xufTtcbmV4cG9ydCBmdW5jdGlvbiBpc1Byb3BlcnR5KHNlcnZpY2VPYmplY3Q6IHVua25vd24pOiBzZXJ2aWNlT2JqZWN0IGlzIFByb3BlcnR5IHtcblx0cmV0dXJuIChzZXJ2aWNlT2JqZWN0IGFzIFByb3BlcnR5KT8uX3R5cGUgPT09IFwiUHJvcGVydHlcIjtcbn1cbmZ1bmN0aW9uIGlzQWN0aW9uUGFyYW1ldGVyKHNlcnZpY2VPYmplY3Q6IHVua25vd24pOiBzZXJ2aWNlT2JqZWN0IGlzIEFjdGlvblBhcmFtZXRlciB7XG5cdHJldHVybiAoc2VydmljZU9iamVjdCBhcyBBY3Rpb25QYXJhbWV0ZXIpPy5fdHlwZSA9PT0gXCJBY3Rpb25QYXJhbWV0ZXJcIjtcbn1cblxuLyoqXG4gKiBBIGJpbmRpbmcgZXhwcmVzc2lvbiB0aGF0IGV2YWx1YXRlcyB0byB0eXBlIFQuXG4gKi9cbmV4cG9ydCB0eXBlIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxUPiA9XG5cdHwgVW5yZXNvbHZhYmxlUGF0aEV4cHJlc3Npb25cblx0fCBDb25zdGFudEV4cHJlc3Npb248VD5cblx0fCBTZXRFeHByZXNzaW9uXG5cdHwgTm90RXhwcmVzc2lvblxuXHR8IFRydXRoeUV4cHJlc3Npb25cblx0fCBDb25jYXRFeHByZXNzaW9uXG5cdHwgTGVuZ3RoRXhwcmVzc2lvblxuXHR8IFBhdGhJbk1vZGVsRXhwcmVzc2lvbjxUPlxuXHR8IEVtYmVkZGVkVUk1QmluZGluZ0V4cHJlc3Npb248VD5cblx0fCBFbWJlZGRlZFVJNUV4cHJlc3Npb25CaW5kaW5nRXhwcmVzc2lvbjxUPlxuXHR8IENvbXBhcmlzb25FeHByZXNzaW9uXG5cdHwgSWZFbHNlRXhwcmVzc2lvbjxUPlxuXHR8IEZvcm1hdHRlckV4cHJlc3Npb248VD5cblx0fCBDb21wbGV4VHlwZUV4cHJlc3Npb248VD5cblx0fCBSZWZlcmVuY2VFeHByZXNzaW9uXG5cdHwgRnVuY3Rpb25FeHByZXNzaW9uPFQ+XG5cdHwgQXJpdGhtZXRpY0V4cHJlc3Npb247XG5cbnR5cGUgVHlwZU1hcHBpbmdEZWZpbml0aW9uID0ge1xuXHR0eXBlOiBzdHJpbmc7XG5cdGNvbnN0cmFpbnRzPzoge1xuXHRcdCRQcmVjaXNpb24/OiBzdHJpbmc7XG5cdFx0JFY0Pzogc3RyaW5nO1xuXHRcdCRTY2FsZT86IHN0cmluZztcblx0XHQkTWF4TGVuZ3RoPzogc3RyaW5nO1xuXHRcdCROdWxsYWJsZT86IHN0cmluZztcblx0XHRcIkBPcmcuT0RhdGEuVmFsaWRhdGlvbi5WMS5NaW5pbXVtLyREZWNpbWFsXCI/OiBzdHJpbmc7XG5cdFx0XCJAT3JnLk9EYXRhLlZhbGlkYXRpb24uVjEuTWluaW11bUBPcmcuT0RhdGEuVmFsaWRhdGlvbi5WMS5FeGNsdXNpdmVcIj86IHN0cmluZztcblx0XHRcIkBPcmcuT0RhdGEuVmFsaWRhdGlvbi5WMS5NYXhpbXVtLyREZWNpbWFsXCI/OiBzdHJpbmc7XG5cdFx0XCJAT3JnLk9EYXRhLlZhbGlkYXRpb24uVjEuTWF4aW11bUBPcmcuT0RhdGEuVmFsaWRhdGlvbi5WMS5FeGNsdXNpdmVcIj86IHN0cmluZztcblx0XHRcIkBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuSXNEaWdpdFNlcXVlbmNlXCI/OiBzdHJpbmc7XG5cdH07XG59O1xuZXhwb3J0IGNvbnN0IEVETV9UWVBFX01BUFBJTkc6IFJlY29yZDxzdHJpbmcsIFR5cGVNYXBwaW5nRGVmaW5pdGlvbj4gPSB7XG5cdFwiRWRtLkJvb2xlYW5cIjogeyB0eXBlOiBcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLkJvb2xlYW5cIiB9LFxuXHRcIkVkbS5CeXRlXCI6IHsgdHlwZTogXCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5CeXRlXCIgfSxcblx0XCJFZG0uRGF0ZVwiOiB7IHR5cGU6IFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuRGF0ZVwiIH0sXG5cdFwiRWRtLkRhdGVUaW1lT2Zmc2V0XCI6IHtcblx0XHRjb25zdHJhaW50czoge1xuXHRcdFx0JFByZWNpc2lvbjogXCJwcmVjaXNpb25cIixcblx0XHRcdCRWNDogXCJWNFwiXG5cdFx0fSxcblx0XHR0eXBlOiBcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLkRhdGVUaW1lT2Zmc2V0XCJcblx0fSxcblx0XCJFZG0uRGVjaW1hbFwiOiB7XG5cdFx0Y29uc3RyYWludHM6IHtcblx0XHRcdFwiQE9yZy5PRGF0YS5WYWxpZGF0aW9uLlYxLk1pbmltdW0vJERlY2ltYWxcIjogXCJtaW5pbXVtXCIsXG5cdFx0XHRcIkBPcmcuT0RhdGEuVmFsaWRhdGlvbi5WMS5NaW5pbXVtQE9yZy5PRGF0YS5WYWxpZGF0aW9uLlYxLkV4Y2x1c2l2ZVwiOiBcIm1pbmltdW1FeGNsdXNpdmVcIixcblx0XHRcdFwiQE9yZy5PRGF0YS5WYWxpZGF0aW9uLlYxLk1heGltdW0vJERlY2ltYWxcIjogXCJtYXhpbXVtXCIsXG5cdFx0XHRcIkBPcmcuT0RhdGEuVmFsaWRhdGlvbi5WMS5NYXhpbXVtQE9yZy5PRGF0YS5WYWxpZGF0aW9uLlYxLkV4Y2x1c2l2ZVwiOiBcIm1heGltdW1FeGNsdXNpdmVcIixcblx0XHRcdCRQcmVjaXNpb246IFwicHJlY2lzaW9uXCIsXG5cdFx0XHQkU2NhbGU6IFwic2NhbGVcIlxuXHRcdH0sXG5cdFx0dHlwZTogXCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5EZWNpbWFsXCJcblx0fSxcblx0XCJFZG0uRG91YmxlXCI6IHsgdHlwZTogXCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5Eb3VibGVcIiB9LFxuXHRcIkVkbS5HdWlkXCI6IHsgdHlwZTogXCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5HdWlkXCIgfSxcblx0XCJFZG0uSW50MTZcIjogeyB0eXBlOiBcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLkludDE2XCIgfSxcblx0XCJFZG0uSW50MzJcIjogeyB0eXBlOiBcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLkludDMyXCIgfSxcblx0XCJFZG0uSW50NjRcIjogeyB0eXBlOiBcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLkludDY0XCIgfSxcblx0XCJFZG0uU0J5dGVcIjogeyB0eXBlOiBcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLlNCeXRlXCIgfSxcblx0XCJFZG0uU2luZ2xlXCI6IHsgdHlwZTogXCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5TaW5nbGVcIiB9LFxuXHRcIkVkbS5TdHJlYW1cIjogeyB0eXBlOiBcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLlN0cmVhbVwiIH0sXG5cdFwiRWRtLkJpbmFyeVwiOiB7IHR5cGU6IFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuU3RyZWFtXCIgfSxcblx0XCJFZG0uU3RyaW5nXCI6IHtcblx0XHRjb25zdHJhaW50czoge1xuXHRcdFx0XCJAY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLklzRGlnaXRTZXF1ZW5jZVwiOiBcImlzRGlnaXRTZXF1ZW5jZVwiLFxuXHRcdFx0JE1heExlbmd0aDogXCJtYXhMZW5ndGhcIixcblx0XHRcdCROdWxsYWJsZTogXCJudWxsYWJsZVwiXG5cdFx0fSxcblx0XHR0eXBlOiBcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLlN0cmluZ1wiXG5cdH0sXG5cdFwiRWRtLlRpbWVPZkRheVwiOiB7XG5cdFx0Y29uc3RyYWludHM6IHtcblx0XHRcdCRQcmVjaXNpb246IFwicHJlY2lzaW9uXCJcblx0XHR9LFxuXHRcdHR5cGU6IFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuVGltZU9mRGF5XCJcblx0fVxufTtcblxuLyoqXG4gKiBBbiBleHByZXNzaW9uIHRoYXQgZXZhbHVhdGVzIHRvIHR5cGUgVCwgb3IgYSBjb25zdGFudCB2YWx1ZSBvZiB0eXBlIFRcbiAqL1xuZXhwb3J0IHR5cGUgRXhwcmVzc2lvbk9yUHJpbWl0aXZlPFQgZXh0ZW5kcyBQcmltaXRpdmVUeXBlPiA9IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxUPiB8IFQ7XG5cbmV4cG9ydCBjb25zdCB1bnJlc29sdmFibGVFeHByZXNzaW9uOiBVbnJlc29sdmFibGVQYXRoRXhwcmVzc2lvbiA9IHtcblx0X3R5cGU6IFwiVW5yZXNvbHZhYmxlXCJcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBlc2NhcGVYbWxBdHRyaWJ1dGUoaW5wdXRTdHJpbmc6IHN0cmluZyk6IHN0cmluZyB7XG5cdHJldHVybiBpbnB1dFN0cmluZy5yZXBsYWNlKC8nL2csIFwiXFxcXCdcIik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoYXNVbnJlc29sdmFibGVFeHByZXNzaW9uKC4uLmV4cHJlc3Npb25zOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248dW5rbm93bj5bXSk6IGJvb2xlYW4ge1xuXHRyZXR1cm4gZXhwcmVzc2lvbnMuZmluZCgoZXhwcikgPT4gZXhwci5fdHlwZSA9PT0gXCJVbnJlc29sdmFibGVcIikgIT09IHVuZGVmaW5lZDtcbn1cbi8qKlxuICogQ2hlY2sgdHdvIGV4cHJlc3Npb25zIGZvciAoZGVlcCkgZXF1YWxpdHkuXG4gKiBAcGFyYW0gYVxuICogQHBhcmFtIGJcbiAqIEByZXR1cm5zIGB0cnVlYCBpZiB0aGUgdHdvIGV4cHJlc3Npb25zIGFyZSBlcXVhbFxuICovXG5leHBvcnQgZnVuY3Rpb24gX2NoZWNrRXhwcmVzc2lvbnNBcmVFcXVhbDxUPihhOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248VD4sIGI6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxUPik6IGJvb2xlYW4ge1xuXHRpZiAoYS5fdHlwZSAhPT0gYi5fdHlwZSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdHN3aXRjaCAoYS5fdHlwZSkge1xuXHRcdGNhc2UgXCJVbnJlc29sdmFibGVcIjpcblx0XHRcdHJldHVybiBmYWxzZTsgLy8gVW5yZXNvbHZhYmxlIGlzIG5ldmVyIGVxdWFsIHRvIGFueXRoaW5nIGV2ZW4gaXRzZWxmXG5cdFx0Y2FzZSBcIkNvbnN0YW50XCI6XG5cdFx0Y2FzZSBcIkVtYmVkZGVkQmluZGluZ1wiOlxuXHRcdGNhc2UgXCJFbWJlZGRlZEV4cHJlc3Npb25CaW5kaW5nXCI6XG5cdFx0XHRyZXR1cm4gYS52YWx1ZSA9PT0gKGIgYXMgQ29uc3RhbnRFeHByZXNzaW9uPFQ+KS52YWx1ZTtcblx0XHRjYXNlIFwiQXJpdGhtZXRpY1wiOlxuXHRcdFx0cmV0dXJuIChcblx0XHRcdFx0YS5vcGVyYXRvciA9PT0gKGIgYXMgQXJpdGhtZXRpY0V4cHJlc3Npb24pLm9wZXJhdG9yICYmXG5cdFx0XHRcdF9jaGVja0V4cHJlc3Npb25zQXJlRXF1YWwoYS5vcGVyYW5kMSwgKGIgYXMgQXJpdGhtZXRpY0V4cHJlc3Npb24pLm9wZXJhbmQxKSAmJlxuXHRcdFx0XHRfY2hlY2tFeHByZXNzaW9uc0FyZUVxdWFsKGEub3BlcmFuZDIsIChiIGFzIEFyaXRobWV0aWNFeHByZXNzaW9uKS5vcGVyYW5kMilcblx0XHRcdCk7XG5cdFx0Y2FzZSBcIk5vdFwiOlxuXHRcdFx0cmV0dXJuIF9jaGVja0V4cHJlc3Npb25zQXJlRXF1YWwoYS5vcGVyYW5kLCAoYiBhcyBOb3RFeHByZXNzaW9uKS5vcGVyYW5kKTtcblx0XHRjYXNlIFwiVHJ1dGh5XCI6XG5cdFx0XHRyZXR1cm4gX2NoZWNrRXhwcmVzc2lvbnNBcmVFcXVhbChhLm9wZXJhbmQsIChiIGFzIFRydXRoeUV4cHJlc3Npb24pLm9wZXJhbmQpO1xuXHRcdGNhc2UgXCJTZXRcIjpcblx0XHRcdHJldHVybiAoXG5cdFx0XHRcdGEub3BlcmF0b3IgPT09IChiIGFzIFNldEV4cHJlc3Npb24pLm9wZXJhdG9yICYmXG5cdFx0XHRcdGEub3BlcmFuZHMubGVuZ3RoID09PSAoYiBhcyBTZXRFeHByZXNzaW9uKS5vcGVyYW5kcy5sZW5ndGggJiZcblx0XHRcdFx0YS5vcGVyYW5kcy5ldmVyeSgoZXhwcmVzc2lvbikgPT5cblx0XHRcdFx0XHQoYiBhcyBTZXRFeHByZXNzaW9uKS5vcGVyYW5kcy5zb21lKChvdGhlckV4cHJlc3Npb24pID0+IF9jaGVja0V4cHJlc3Npb25zQXJlRXF1YWwoZXhwcmVzc2lvbiwgb3RoZXJFeHByZXNzaW9uKSlcblx0XHRcdFx0KVxuXHRcdFx0KTtcblxuXHRcdGNhc2UgXCJJZkVsc2VcIjpcblx0XHRcdHJldHVybiAoXG5cdFx0XHRcdF9jaGVja0V4cHJlc3Npb25zQXJlRXF1YWwoYS5jb25kaXRpb24sIChiIGFzIElmRWxzZUV4cHJlc3Npb248VD4pLmNvbmRpdGlvbikgJiZcblx0XHRcdFx0X2NoZWNrRXhwcmVzc2lvbnNBcmVFcXVhbChhLm9uVHJ1ZSwgKGIgYXMgSWZFbHNlRXhwcmVzc2lvbjxUPikub25UcnVlKSAmJlxuXHRcdFx0XHRfY2hlY2tFeHByZXNzaW9uc0FyZUVxdWFsKGEub25GYWxzZSwgKGIgYXMgSWZFbHNlRXhwcmVzc2lvbjxUPikub25GYWxzZSlcblx0XHRcdCk7XG5cblx0XHRjYXNlIFwiQ29tcGFyaXNvblwiOlxuXHRcdFx0cmV0dXJuIChcblx0XHRcdFx0YS5vcGVyYXRvciA9PT0gKGIgYXMgQ29tcGFyaXNvbkV4cHJlc3Npb24pLm9wZXJhdG9yICYmXG5cdFx0XHRcdF9jaGVja0V4cHJlc3Npb25zQXJlRXF1YWwoYS5vcGVyYW5kMSwgKGIgYXMgQ29tcGFyaXNvbkV4cHJlc3Npb24pLm9wZXJhbmQxKSAmJlxuXHRcdFx0XHRfY2hlY2tFeHByZXNzaW9uc0FyZUVxdWFsKGEub3BlcmFuZDIsIChiIGFzIENvbXBhcmlzb25FeHByZXNzaW9uKS5vcGVyYW5kMilcblx0XHRcdCk7XG5cblx0XHRjYXNlIFwiQ29uY2F0XCI6XG5cdFx0XHRjb25zdCBhRXhwcmVzc2lvbnMgPSBhLmV4cHJlc3Npb25zO1xuXHRcdFx0Y29uc3QgYkV4cHJlc3Npb25zID0gKGIgYXMgQ29uY2F0RXhwcmVzc2lvbikuZXhwcmVzc2lvbnM7XG5cdFx0XHRpZiAoYUV4cHJlc3Npb25zLmxlbmd0aCAhPT0gYkV4cHJlc3Npb25zLmxlbmd0aCkge1xuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gYUV4cHJlc3Npb25zLmV2ZXJ5KChleHByZXNzaW9uLCBpbmRleCkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gX2NoZWNrRXhwcmVzc2lvbnNBcmVFcXVhbChleHByZXNzaW9uLCBiRXhwcmVzc2lvbnNbaW5kZXhdKTtcblx0XHRcdH0pO1xuXG5cdFx0Y2FzZSBcIkxlbmd0aFwiOlxuXHRcdFx0cmV0dXJuIF9jaGVja0V4cHJlc3Npb25zQXJlRXF1YWwoYS5wYXRoSW5Nb2RlbCwgKGIgYXMgTGVuZ3RoRXhwcmVzc2lvbikucGF0aEluTW9kZWwpO1xuXG5cdFx0Y2FzZSBcIlBhdGhJbk1vZGVsXCI6XG5cdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRhLm1vZGVsTmFtZSA9PT0gKGIgYXMgUGF0aEluTW9kZWxFeHByZXNzaW9uPFQ+KS5tb2RlbE5hbWUgJiZcblx0XHRcdFx0YS5wYXRoID09PSAoYiBhcyBQYXRoSW5Nb2RlbEV4cHJlc3Npb248VD4pLnBhdGggJiZcblx0XHRcdFx0YS50YXJnZXRFbnRpdHlTZXQgPT09IChiIGFzIFBhdGhJbk1vZGVsRXhwcmVzc2lvbjxUPikudGFyZ2V0RW50aXR5U2V0XG5cdFx0XHQpO1xuXG5cdFx0Y2FzZSBcIkZvcm1hdHRlclwiOlxuXHRcdFx0cmV0dXJuIChcblx0XHRcdFx0YS5mbiA9PT0gKGIgYXMgRm9ybWF0dGVyRXhwcmVzc2lvbjxUPikuZm4gJiZcblx0XHRcdFx0YS5wYXJhbWV0ZXJzLmxlbmd0aCA9PT0gKGIgYXMgRm9ybWF0dGVyRXhwcmVzc2lvbjxUPikucGFyYW1ldGVycy5sZW5ndGggJiZcblx0XHRcdFx0YS5wYXJhbWV0ZXJzLmV2ZXJ5KCh2YWx1ZSwgaW5kZXgpID0+IF9jaGVja0V4cHJlc3Npb25zQXJlRXF1YWwoKGIgYXMgRm9ybWF0dGVyRXhwcmVzc2lvbjxUPikucGFyYW1ldGVyc1tpbmRleF0sIHZhbHVlKSlcblx0XHRcdCk7XG5cdFx0Y2FzZSBcIkNvbXBsZXhUeXBlXCI6XG5cdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRhLnR5cGUgPT09IChiIGFzIENvbXBsZXhUeXBlRXhwcmVzc2lvbjxUPikudHlwZSAmJlxuXHRcdFx0XHRhLmJpbmRpbmdQYXJhbWV0ZXJzLmxlbmd0aCA9PT0gKGIgYXMgQ29tcGxleFR5cGVFeHByZXNzaW9uPFQ+KS5iaW5kaW5nUGFyYW1ldGVycy5sZW5ndGggJiZcblx0XHRcdFx0YS5iaW5kaW5nUGFyYW1ldGVycy5ldmVyeSgodmFsdWUsIGluZGV4KSA9PlxuXHRcdFx0XHRcdF9jaGVja0V4cHJlc3Npb25zQXJlRXF1YWwoKGIgYXMgQ29tcGxleFR5cGVFeHByZXNzaW9uPFQ+KS5iaW5kaW5nUGFyYW1ldGVyc1tpbmRleF0sIHZhbHVlKVxuXHRcdFx0XHQpXG5cdFx0XHQpO1xuXHRcdGNhc2UgXCJGdW5jdGlvblwiOlxuXHRcdFx0Y29uc3Qgb3RoZXJGdW5jdGlvbiA9IGIgYXMgRnVuY3Rpb25FeHByZXNzaW9uPFQ+O1xuXHRcdFx0aWYgKGEub2JqID09PSB1bmRlZmluZWQgfHwgb3RoZXJGdW5jdGlvbi5vYmogPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRyZXR1cm4gYS5vYmogPT09IG90aGVyRnVuY3Rpb247XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiAoXG5cdFx0XHRcdGEuZm4gPT09IG90aGVyRnVuY3Rpb24uZm4gJiZcblx0XHRcdFx0X2NoZWNrRXhwcmVzc2lvbnNBcmVFcXVhbChhLm9iaiwgb3RoZXJGdW5jdGlvbi5vYmopICYmXG5cdFx0XHRcdGEucGFyYW1ldGVycy5sZW5ndGggPT09IG90aGVyRnVuY3Rpb24ucGFyYW1ldGVycy5sZW5ndGggJiZcblx0XHRcdFx0YS5wYXJhbWV0ZXJzLmV2ZXJ5KCh2YWx1ZSwgaW5kZXgpID0+IF9jaGVja0V4cHJlc3Npb25zQXJlRXF1YWwob3RoZXJGdW5jdGlvbi5wYXJhbWV0ZXJzW2luZGV4XSwgdmFsdWUpKVxuXHRcdFx0KTtcblxuXHRcdGNhc2UgXCJSZWZcIjpcblx0XHRcdHJldHVybiBhLnJlZiA9PT0gKGIgYXMgUmVmZXJlbmNlRXhwcmVzc2lvbikucmVmO1xuXHR9XG5cdHJldHVybiBmYWxzZTtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhIG5lc3RlZCBTZXRFeHByZXNzaW9uIGJ5IGlubGluaW5nIG9wZXJhbmRzIG9mIHR5cGUgU2V0RXhwcmVzc2lvbiB3aXRoIHRoZSBzYW1lIG9wZXJhdG9yLlxuICogQHBhcmFtIGV4cHJlc3Npb24gVGhlIGV4cHJlc3Npb24gdG8gZmxhdHRlblxuICogQHJldHVybnMgQSBuZXcgU2V0RXhwcmVzc2lvbiB3aXRoIHRoZSBzYW1lIG9wZXJhdG9yXG4gKi9cbmZ1bmN0aW9uIGZsYXR0ZW5TZXRFeHByZXNzaW9uKGV4cHJlc3Npb246IFNldEV4cHJlc3Npb24pOiBTZXRFeHByZXNzaW9uIHtcblx0cmV0dXJuIGV4cHJlc3Npb24ub3BlcmFuZHMucmVkdWNlKFxuXHRcdChyZXN1bHQ6IFNldEV4cHJlc3Npb24sIG9wZXJhbmQpID0+IHtcblx0XHRcdGNvbnN0IGNhbmRpZGF0ZXNGb3JGbGF0dGVuaW5nID1cblx0XHRcdFx0b3BlcmFuZC5fdHlwZSA9PT0gXCJTZXRcIiAmJiBvcGVyYW5kLm9wZXJhdG9yID09PSBleHByZXNzaW9uLm9wZXJhdG9yID8gb3BlcmFuZC5vcGVyYW5kcyA6IFtvcGVyYW5kXTtcblx0XHRcdGNhbmRpZGF0ZXNGb3JGbGF0dGVuaW5nLmZvckVhY2goKGNhbmRpZGF0ZSkgPT4ge1xuXHRcdFx0XHRpZiAocmVzdWx0Lm9wZXJhbmRzLmV2ZXJ5KChlKSA9PiAhX2NoZWNrRXhwcmVzc2lvbnNBcmVFcXVhbChlLCBjYW5kaWRhdGUpKSkge1xuXHRcdFx0XHRcdHJlc3VsdC5vcGVyYW5kcy5wdXNoKGNhbmRpZGF0ZSk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdFx0cmV0dXJuIHJlc3VsdDtcblx0XHR9LFxuXHRcdHsgX3R5cGU6IFwiU2V0XCIsIG9wZXJhdG9yOiBleHByZXNzaW9uLm9wZXJhdG9yLCBvcGVyYW5kczogW10gfVxuXHQpO1xufVxuXG4vKipcbiAqIERldGVjdHMgd2hldGhlciBhbiBhcnJheSBvZiBib29sZWFuIGV4cHJlc3Npb25zIGNvbnRhaW5zIGFuIGV4cHJlc3Npb24gYW5kIGl0cyBuZWdhdGlvbi5cbiAqIEBwYXJhbSBleHByZXNzaW9ucyBBcnJheSBvZiBleHByZXNzaW9uc1xuICogQHJldHVybnMgYHRydWVgIGlmIHRoZSBzZXQgb2YgZXhwcmVzc2lvbnMgY29udGFpbnMgYW4gZXhwcmVzc2lvbiBhbmQgaXRzIG5lZ2F0aW9uXG4gKi9cbmZ1bmN0aW9uIGhhc09wcG9zaXRlRXhwcmVzc2lvbnMoZXhwcmVzc2lvbnM6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPltdKTogYm9vbGVhbiB7XG5cdGNvbnN0IG5lZ2F0ZWRFeHByZXNzaW9ucyA9IGV4cHJlc3Npb25zLm1hcChub3QpO1xuXHRyZXR1cm4gZXhwcmVzc2lvbnMuc29tZSgoZXhwcmVzc2lvbiwgaW5kZXgpID0+IHtcblx0XHRmb3IgKGxldCBpID0gaW5kZXggKyAxOyBpIDwgbmVnYXRlZEV4cHJlc3Npb25zLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRpZiAoX2NoZWNrRXhwcmVzc2lvbnNBcmVFcXVhbChleHByZXNzaW9uLCBuZWdhdGVkRXhwcmVzc2lvbnNbaV0pKSB7XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH0pO1xufVxuXG4vKipcbiAqIExvZ2ljYWwgYGFuZGAgZXhwcmVzc2lvbi5cbiAqXG4gKiBUaGUgZXhwcmVzc2lvbiBpcyBzaW1wbGlmaWVkIHRvIGZhbHNlIGlmIHRoaXMgY2FuIGJlIGRlY2lkZWQgc3RhdGljYWxseSAodGhhdCBpcywgaWYgb25lIG9wZXJhbmQgaXMgYSBjb25zdGFudFxuICogZmFsc2Ugb3IgaWYgdGhlIGV4cHJlc3Npb24gY29udGFpbnMgYW4gb3BlcmFuZCBhbmQgaXRzIG5lZ2F0aW9uKS5cbiAqIEBwYXJhbSBvcGVyYW5kcyBFeHByZXNzaW9ucyB0byBjb25uZWN0IGJ5IGBhbmRgXG4gKiBAcmV0dXJucyBFeHByZXNzaW9uIGV2YWx1YXRpbmcgdG8gYm9vbGVhblxuICovXG5leHBvcnQgZnVuY3Rpb24gYW5kKC4uLm9wZXJhbmRzOiBFeHByZXNzaW9uT3JQcmltaXRpdmU8Ym9vbGVhbj5bXSk6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiB7XG5cdGNvbnN0IGV4cHJlc3Npb25zID0gZmxhdHRlblNldEV4cHJlc3Npb24oe1xuXHRcdF90eXBlOiBcIlNldFwiLFxuXHRcdG9wZXJhdG9yOiBcIiYmXCIsXG5cdFx0b3BlcmFuZHM6IG9wZXJhbmRzLm1hcCh3cmFwUHJpbWl0aXZlKVxuXHR9KS5vcGVyYW5kcztcblxuXHRpZiAoaGFzVW5yZXNvbHZhYmxlRXhwcmVzc2lvbiguLi5leHByZXNzaW9ucykpIHtcblx0XHRyZXR1cm4gdW5yZXNvbHZhYmxlRXhwcmVzc2lvbjtcblx0fVxuXHRsZXQgaXNTdGF0aWNGYWxzZSA9IGZhbHNlO1xuXHRjb25zdCBub25Ucml2aWFsRXhwcmVzc2lvbiA9IGV4cHJlc3Npb25zLmZpbHRlcigoZXhwcmVzc2lvbikgPT4ge1xuXHRcdGlmIChpc0ZhbHNlKGV4cHJlc3Npb24pKSB7XG5cdFx0XHRpc1N0YXRpY0ZhbHNlID0gdHJ1ZTtcblx0XHR9XG5cdFx0cmV0dXJuICFpc0NvbnN0YW50KGV4cHJlc3Npb24pO1xuXHR9KTtcblx0aWYgKGlzU3RhdGljRmFsc2UpIHtcblx0XHRyZXR1cm4gY29uc3RhbnQoZmFsc2UpO1xuXHR9IGVsc2UgaWYgKG5vblRyaXZpYWxFeHByZXNzaW9uLmxlbmd0aCA9PT0gMCkge1xuXHRcdC8vIFJlc29sdmUgdGhlIGNvbnN0YW50IHRoZW5cblx0XHRjb25zdCBpc1ZhbGlkID0gZXhwcmVzc2lvbnMucmVkdWNlKChyZXN1bHQsIGV4cHJlc3Npb24pID0+IHJlc3VsdCAmJiBpc1RydWUoZXhwcmVzc2lvbiksIHRydWUpO1xuXHRcdHJldHVybiBjb25zdGFudChpc1ZhbGlkKTtcblx0fSBlbHNlIGlmIChub25Ucml2aWFsRXhwcmVzc2lvbi5sZW5ndGggPT09IDEpIHtcblx0XHRyZXR1cm4gbm9uVHJpdmlhbEV4cHJlc3Npb25bMF07XG5cdH0gZWxzZSBpZiAoaGFzT3Bwb3NpdGVFeHByZXNzaW9ucyhub25Ucml2aWFsRXhwcmVzc2lvbikpIHtcblx0XHRyZXR1cm4gY29uc3RhbnQoZmFsc2UpO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiB7XG5cdFx0XHRfdHlwZTogXCJTZXRcIixcblx0XHRcdG9wZXJhdG9yOiBcIiYmXCIsXG5cdFx0XHRvcGVyYW5kczogbm9uVHJpdmlhbEV4cHJlc3Npb25cblx0XHR9O1xuXHR9XG59XG5cbi8qKlxuICogTG9naWNhbCBgb3JgIGV4cHJlc3Npb24uXG4gKlxuICogVGhlIGV4cHJlc3Npb24gaXMgc2ltcGxpZmllZCB0byB0cnVlIGlmIHRoaXMgY2FuIGJlIGRlY2lkZWQgc3RhdGljYWxseSAodGhhdCBpcywgaWYgb25lIG9wZXJhbmQgaXMgYSBjb25zdGFudFxuICogdHJ1ZSBvciBpZiB0aGUgZXhwcmVzc2lvbiBjb250YWlucyBhbiBvcGVyYW5kIGFuZCBpdHMgbmVnYXRpb24pLlxuICogQHBhcmFtIG9wZXJhbmRzIEV4cHJlc3Npb25zIHRvIGNvbm5lY3QgYnkgYG9yYFxuICogQHJldHVybnMgRXhwcmVzc2lvbiBldmFsdWF0aW5nIHRvIGJvb2xlYW5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG9yKC4uLm9wZXJhbmRzOiBFeHByZXNzaW9uT3JQcmltaXRpdmU8Ym9vbGVhbj5bXSk6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiB7XG5cdGNvbnN0IGV4cHJlc3Npb25zID0gZmxhdHRlblNldEV4cHJlc3Npb24oe1xuXHRcdF90eXBlOiBcIlNldFwiLFxuXHRcdG9wZXJhdG9yOiBcInx8XCIsXG5cdFx0b3BlcmFuZHM6IG9wZXJhbmRzLm1hcCh3cmFwUHJpbWl0aXZlKVxuXHR9KS5vcGVyYW5kcztcblx0aWYgKGhhc1VucmVzb2x2YWJsZUV4cHJlc3Npb24oLi4uZXhwcmVzc2lvbnMpKSB7XG5cdFx0cmV0dXJuIHVucmVzb2x2YWJsZUV4cHJlc3Npb247XG5cdH1cblx0bGV0IGlzU3RhdGljVHJ1ZSA9IGZhbHNlO1xuXHRjb25zdCBub25Ucml2aWFsRXhwcmVzc2lvbiA9IGV4cHJlc3Npb25zLmZpbHRlcigoZXhwcmVzc2lvbikgPT4ge1xuXHRcdGlmIChpc1RydWUoZXhwcmVzc2lvbikpIHtcblx0XHRcdGlzU3RhdGljVHJ1ZSA9IHRydWU7XG5cdFx0fVxuXHRcdHJldHVybiAhaXNDb25zdGFudChleHByZXNzaW9uKSB8fCBleHByZXNzaW9uLnZhbHVlO1xuXHR9KTtcblx0aWYgKGlzU3RhdGljVHJ1ZSkge1xuXHRcdHJldHVybiBjb25zdGFudCh0cnVlKTtcblx0fSBlbHNlIGlmIChub25Ucml2aWFsRXhwcmVzc2lvbi5sZW5ndGggPT09IDApIHtcblx0XHQvLyBSZXNvbHZlIHRoZSBjb25zdGFudCB0aGVuXG5cdFx0Y29uc3QgaXNWYWxpZCA9IGV4cHJlc3Npb25zLnJlZHVjZSgocmVzdWx0LCBleHByZXNzaW9uKSA9PiByZXN1bHQgJiYgaXNUcnVlKGV4cHJlc3Npb24pLCB0cnVlKTtcblx0XHRyZXR1cm4gY29uc3RhbnQoaXNWYWxpZCk7XG5cdH0gZWxzZSBpZiAobm9uVHJpdmlhbEV4cHJlc3Npb24ubGVuZ3RoID09PSAxKSB7XG5cdFx0cmV0dXJuIG5vblRyaXZpYWxFeHByZXNzaW9uWzBdO1xuXHR9IGVsc2UgaWYgKGhhc09wcG9zaXRlRXhwcmVzc2lvbnMobm9uVHJpdmlhbEV4cHJlc3Npb24pKSB7XG5cdFx0cmV0dXJuIGNvbnN0YW50KHRydWUpO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiB7XG5cdFx0XHRfdHlwZTogXCJTZXRcIixcblx0XHRcdG9wZXJhdG9yOiBcInx8XCIsXG5cdFx0XHRvcGVyYW5kczogbm9uVHJpdmlhbEV4cHJlc3Npb25cblx0XHR9O1xuXHR9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhZGQ8VCBleHRlbmRzIFByaW1pdGl2ZVR5cGU+KFxuXHRsZWZ0T3BlcmFuZDogRXhwcmVzc2lvbk9yUHJpbWl0aXZlPFQ+LFxuXHRyaWdodE9wZXJhbmQ6IEV4cHJlc3Npb25PclByaW1pdGl2ZTxUPlxuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPG51bWJlcj4ge1xuXHRyZXR1cm4gYXJpdGhtZXRpYyhcIitcIiwgbGVmdE9wZXJhbmQsIHJpZ2h0T3BlcmFuZCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdWJ0cmFjdDxUIGV4dGVuZHMgUHJpbWl0aXZlVHlwZT4oXG5cdGxlZnRPcGVyYW5kOiBFeHByZXNzaW9uT3JQcmltaXRpdmU8VD4sXG5cdHJpZ2h0T3BlcmFuZDogRXhwcmVzc2lvbk9yUHJpbWl0aXZlPFQ+XG4pOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248bnVtYmVyPiB7XG5cdHJldHVybiBhcml0aG1ldGljKFwiLVwiLCBsZWZ0T3BlcmFuZCwgcmlnaHRPcGVyYW5kKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG11bHRpcGx5PFQgZXh0ZW5kcyBQcmltaXRpdmVUeXBlPihcblx0bGVmdE9wZXJhbmQ6IEV4cHJlc3Npb25PclByaW1pdGl2ZTxUPixcblx0cmlnaHRPcGVyYW5kOiBFeHByZXNzaW9uT3JQcmltaXRpdmU8VD5cbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxudW1iZXI+IHtcblx0cmV0dXJuIGFyaXRobWV0aWMoXCIqXCIsIGxlZnRPcGVyYW5kLCByaWdodE9wZXJhbmQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGl2aWRlPFQgZXh0ZW5kcyBQcmltaXRpdmVUeXBlPihcblx0bGVmdE9wZXJhbmQ6IEV4cHJlc3Npb25PclByaW1pdGl2ZTxUPixcblx0cmlnaHRPcGVyYW5kOiBFeHByZXNzaW9uT3JQcmltaXRpdmU8VD5cbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxudW1iZXI+IHtcblx0cmV0dXJuIGFyaXRobWV0aWMoXCIvXCIsIGxlZnRPcGVyYW5kLCByaWdodE9wZXJhbmQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbW9kdWxvPFQgZXh0ZW5kcyBQcmltaXRpdmVUeXBlPihcblx0bGVmdE9wZXJhbmQ6IEV4cHJlc3Npb25PclByaW1pdGl2ZTxUPixcblx0cmlnaHRPcGVyYW5kOiBFeHByZXNzaW9uT3JQcmltaXRpdmU8VD5cbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxudW1iZXI+IHtcblx0cmV0dXJuIGFyaXRobWV0aWMoXCIlXCIsIGxlZnRPcGVyYW5kLCByaWdodE9wZXJhbmQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbmVnYXRlPFQgZXh0ZW5kcyBQcmltaXRpdmVUeXBlPihvcGVyYW5kOiBFeHByZXNzaW9uT3JQcmltaXRpdmU8VD4pOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248bnVtYmVyPiB7XG5cdHJldHVybiBhcml0aG1ldGljKFwiTmVnXCIsIG9wZXJhbmQsIG51bGwpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZmxvb3I8VCBleHRlbmRzIFByaW1pdGl2ZVR5cGU+KG9wZXJhbmQ6IEV4cHJlc3Npb25PclByaW1pdGl2ZTxUPik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxudW1iZXI+IHtcblx0cmV0dXJuIGFyaXRobWV0aWMoXCJGbG9vclwiLCBvcGVyYW5kLCBudWxsKTtcbn1cblxuLyoqXG4gKiBBcml0aG1ldGljIGV4cHJlc3Npb24uXG4gKiBAcGFyYW0gb3BlcmF0b3JcbiAqIEBwYXJhbSBsZWZ0T3BlcmFuZFxuICogQHBhcmFtIHJpZ2h0T3BlcmFuZFxuICogQHJldHVybnMgRXhwcmVzc2lvbiBldmFsdWF0aW5nIHRvIG51bWJlclxuICovXG5leHBvcnQgZnVuY3Rpb24gYXJpdGhtZXRpYzxUIGV4dGVuZHMgUHJpbWl0aXZlVHlwZT4oXG5cdG9wZXJhdG9yOiBBcml0aG1ldGljT3BlcmF0b3IsXG5cdGxlZnRPcGVyYW5kOiBFeHByZXNzaW9uT3JQcmltaXRpdmU8VD4sXG5cdHJpZ2h0T3BlcmFuZDogRXhwcmVzc2lvbk9yUHJpbWl0aXZlPFQ+XG4pOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248bnVtYmVyPiB7XG5cdGNvbnN0IGxlZnRFeHByZXNzaW9uID0gd3JhcFByaW1pdGl2ZShsZWZ0T3BlcmFuZCk7XG5cdGNvbnN0IHJpZ2h0RXhwcmVzc2lvbiA9IHdyYXBQcmltaXRpdmUocmlnaHRPcGVyYW5kKTtcblx0aWYgKGhhc1VucmVzb2x2YWJsZUV4cHJlc3Npb24obGVmdEV4cHJlc3Npb24sIHJpZ2h0RXhwcmVzc2lvbikpIHtcblx0XHRyZXR1cm4gdW5yZXNvbHZhYmxlRXhwcmVzc2lvbjtcblx0fVxuXHRpZiAoaXNDb25zdGFudChsZWZ0RXhwcmVzc2lvbikgJiYgaXNDb25zdGFudChyaWdodEV4cHJlc3Npb24pKSB7XG5cdFx0c3dpdGNoIChvcGVyYXRvcikge1xuXHRcdFx0Y2FzZSBcIitcIjpcblx0XHRcdFx0aWYgKGxlZnRFeHByZXNzaW9uLnZhbHVlID09PSBudWxsIHx8IGxlZnRFeHByZXNzaW9uLnZhbHVlID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRyZXR1cm4gY29uc3RhbnQocmlnaHRFeHByZXNzaW9uLnZhbHVlIGFzIG51bWJlcik7XG5cdFx0XHRcdH0gZWxzZSBpZiAocmlnaHRFeHByZXNzaW9uLnZhbHVlID09PSBudWxsIHx8IHJpZ2h0RXhwcmVzc2lvbi52YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGNvbnN0YW50KGxlZnRFeHByZXNzaW9uLnZhbHVlIGFzIG51bWJlcik7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y29uc3Qgc3VtID0gKGxlZnRFeHByZXNzaW9uLnZhbHVlIGFzIG51bWJlcikgKyAocmlnaHRFeHByZXNzaW9uLnZhbHVlIGFzIG51bWJlcik7XG5cdFx0XHRcdHJldHVybiBjb25zdGFudChzdW0pO1xuXHRcdFx0Y2FzZSBcIi1cIjpcblx0XHRcdFx0aWYgKGxlZnRFeHByZXNzaW9uLnZhbHVlID09PSBudWxsIHx8IGxlZnRFeHByZXNzaW9uLnZhbHVlID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRyZXR1cm4gY29uc3RhbnQocmlnaHRFeHByZXNzaW9uLnZhbHVlIGFzIG51bWJlcik7XG5cdFx0XHRcdH0gZWxzZSBpZiAocmlnaHRFeHByZXNzaW9uLnZhbHVlID09PSBudWxsIHx8IHJpZ2h0RXhwcmVzc2lvbi52YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGNvbnN0YW50KGxlZnRFeHByZXNzaW9uLnZhbHVlIGFzIG51bWJlcik7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y29uc3QgZGlmZiA9IChsZWZ0RXhwcmVzc2lvbi52YWx1ZSBhcyBudW1iZXIpIC0gKHJpZ2h0RXhwcmVzc2lvbi52YWx1ZSBhcyBudW1iZXIpO1xuXHRcdFx0XHRyZXR1cm4gY29uc3RhbnQoZGlmZik7XG5cdFx0XHRjYXNlIFwiL1wiOlxuXHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0bGVmdEV4cHJlc3Npb24udmFsdWUgPT09IG51bGwgfHxcblx0XHRcdFx0XHRsZWZ0RXhwcmVzc2lvbi52YWx1ZSA9PT0gdW5kZWZpbmVkIHx8XG5cdFx0XHRcdFx0cmlnaHRFeHByZXNzaW9uLnZhbHVlID09PSBudWxsIHx8XG5cdFx0XHRcdFx0cmlnaHRFeHByZXNzaW9uLnZhbHVlID09PSB1bmRlZmluZWRcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0cmV0dXJuIGNvbnN0YW50KDApO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNvbnN0IGRpdiA9IChsZWZ0RXhwcmVzc2lvbi52YWx1ZSBhcyBudW1iZXIpIC8gKHJpZ2h0RXhwcmVzc2lvbi52YWx1ZSBhcyBudW1iZXIpO1xuXHRcdFx0XHRyZXR1cm4gY29uc3RhbnQoZGl2KTtcblx0XHRcdGNhc2UgXCJOZWdcIjpcblx0XHRcdFx0aWYgKGxlZnRFeHByZXNzaW9uLnZhbHVlID09PSBudWxsIHx8IGxlZnRFeHByZXNzaW9uLnZhbHVlID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRyZXR1cm4gY29uc3RhbnQoMCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIGNvbnN0YW50KC1sZWZ0RXhwcmVzc2lvbi52YWx1ZSk7XG5cdFx0XHRjYXNlIFwiJVwiOlxuXHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0bGVmdEV4cHJlc3Npb24udmFsdWUgPT09IG51bGwgfHxcblx0XHRcdFx0XHRsZWZ0RXhwcmVzc2lvbi52YWx1ZSA9PT0gdW5kZWZpbmVkIHx8XG5cdFx0XHRcdFx0cmlnaHRFeHByZXNzaW9uLnZhbHVlID09PSBudWxsIHx8XG5cdFx0XHRcdFx0cmlnaHRFeHByZXNzaW9uLnZhbHVlID09PSB1bmRlZmluZWRcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0cmV0dXJuIGNvbnN0YW50KDApO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNvbnN0IG1vZCA9IChsZWZ0RXhwcmVzc2lvbi52YWx1ZSBhcyBudW1iZXIpICUgKHJpZ2h0RXhwcmVzc2lvbi52YWx1ZSBhcyBudW1iZXIpO1xuXHRcdFx0XHRyZXR1cm4gY29uc3RhbnQobW9kKTtcblx0XHRcdGNhc2UgXCJGbG9vclwiOlxuXHRcdFx0XHRpZiAobGVmdEV4cHJlc3Npb24udmFsdWUgPT09IG51bGwgfHwgbGVmdEV4cHJlc3Npb24udmFsdWUgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdHJldHVybiBjb25zdGFudCgwKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gY29uc3RhbnQoTWF0aC5mbG9vcihsZWZ0RXhwcmVzc2lvbi52YWx1ZSBhcyBudW1iZXIpKTtcblx0XHRcdGNhc2UgXCIqXCI6XG5cdFx0XHRcdGlmIChcblx0XHRcdFx0XHRsZWZ0RXhwcmVzc2lvbi52YWx1ZSA9PT0gbnVsbCB8fFxuXHRcdFx0XHRcdGxlZnRFeHByZXNzaW9uLnZhbHVlID09PSB1bmRlZmluZWQgfHxcblx0XHRcdFx0XHRyaWdodEV4cHJlc3Npb24udmFsdWUgPT09IG51bGwgfHxcblx0XHRcdFx0XHRyaWdodEV4cHJlc3Npb24udmFsdWUgPT09IHVuZGVmaW5lZFxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHRyZXR1cm4gY29uc3RhbnQoMCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y29uc3QgbXVsdCA9IChsZWZ0RXhwcmVzc2lvbi52YWx1ZSBhcyBudW1iZXIpICogKHJpZ2h0RXhwcmVzc2lvbi52YWx1ZSBhcyBudW1iZXIpO1xuXHRcdFx0XHRyZXR1cm4gY29uc3RhbnQobXVsdCk7XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdHJldHVybiB7XG5cdFx0XHRfdHlwZTogXCJBcml0aG1ldGljXCIsXG5cdFx0XHRvcGVyYXRvcjogb3BlcmF0b3IsXG5cdFx0XHRvcGVyYW5kMTogbGVmdEV4cHJlc3Npb24sXG5cdFx0XHRvcGVyYW5kMjogcmlnaHRFeHByZXNzaW9uXG5cdFx0fTtcblx0fVxufVxuXG4vKipcbiAqIExvZ2ljYWwgYG5vdGAgb3BlcmF0b3IuXG4gKiBAcGFyYW0gb3BlcmFuZCBUaGUgZXhwcmVzc2lvbiB0byByZXZlcnNlXG4gKiBAcmV0dXJucyBUaGUgcmVzdWx0aW5nIGV4cHJlc3Npb24gdGhhdCBldmFsdWF0ZXMgdG8gYm9vbGVhblxuICovXG5leHBvcnQgZnVuY3Rpb24gbm90KG9wZXJhbmQ6IEV4cHJlc3Npb25PclByaW1pdGl2ZTxib29sZWFuPik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiB7XG5cdG9wZXJhbmQgPSB3cmFwUHJpbWl0aXZlKG9wZXJhbmQpO1xuXHRpZiAoaGFzVW5yZXNvbHZhYmxlRXhwcmVzc2lvbihvcGVyYW5kKSkge1xuXHRcdHJldHVybiB1bnJlc29sdmFibGVFeHByZXNzaW9uO1xuXHR9IGVsc2UgaWYgKGlzQ29uc3RhbnQob3BlcmFuZCkpIHtcblx0XHRyZXR1cm4gY29uc3RhbnQoIW9wZXJhbmQudmFsdWUpO1xuXHR9IGVsc2UgaWYgKFxuXHRcdHR5cGVvZiBvcGVyYW5kID09PSBcIm9iamVjdFwiICYmXG5cdFx0b3BlcmFuZC5fdHlwZSA9PT0gXCJTZXRcIiAmJlxuXHRcdG9wZXJhbmQub3BlcmF0b3IgPT09IFwifHxcIiAmJlxuXHRcdG9wZXJhbmQub3BlcmFuZHMuZXZlcnkoKGV4cHJlc3Npb24pID0+IGlzQ29uc3RhbnQoZXhwcmVzc2lvbikgfHwgaXNDb21wYXJpc29uKGV4cHJlc3Npb24pKVxuXHQpIHtcblx0XHRyZXR1cm4gYW5kKC4uLm9wZXJhbmQub3BlcmFuZHMubWFwKChleHByZXNzaW9uKSA9PiBub3QoZXhwcmVzc2lvbikpKTtcblx0fSBlbHNlIGlmIChcblx0XHR0eXBlb2Ygb3BlcmFuZCA9PT0gXCJvYmplY3RcIiAmJlxuXHRcdG9wZXJhbmQuX3R5cGUgPT09IFwiU2V0XCIgJiZcblx0XHRvcGVyYW5kLm9wZXJhdG9yID09PSBcIiYmXCIgJiZcblx0XHRvcGVyYW5kLm9wZXJhbmRzLmV2ZXJ5KChleHByZXNzaW9uKSA9PiBpc0NvbnN0YW50KGV4cHJlc3Npb24pIHx8IGlzQ29tcGFyaXNvbihleHByZXNzaW9uKSlcblx0KSB7XG5cdFx0cmV0dXJuIG9yKC4uLm9wZXJhbmQub3BlcmFuZHMubWFwKChleHByZXNzaW9uKSA9PiBub3QoZXhwcmVzc2lvbikpKTtcblx0fSBlbHNlIGlmIChpc0NvbXBhcmlzb24ob3BlcmFuZCkpIHtcblx0XHQvLyBDcmVhdGUgdGhlIHJldmVyc2UgY29tcGFyaXNvblxuXHRcdHN3aXRjaCAob3BlcmFuZC5vcGVyYXRvcikge1xuXHRcdFx0Y2FzZSBcIiE9PVwiOlxuXHRcdFx0XHRyZXR1cm4geyAuLi5vcGVyYW5kLCBvcGVyYXRvcjogXCI9PT1cIiB9O1xuXHRcdFx0Y2FzZSBcIjxcIjpcblx0XHRcdFx0cmV0dXJuIHsgLi4ub3BlcmFuZCwgb3BlcmF0b3I6IFwiPj1cIiB9O1xuXHRcdFx0Y2FzZSBcIjw9XCI6XG5cdFx0XHRcdHJldHVybiB7IC4uLm9wZXJhbmQsIG9wZXJhdG9yOiBcIj5cIiB9O1xuXHRcdFx0Y2FzZSBcIj09PVwiOlxuXHRcdFx0XHRyZXR1cm4geyAuLi5vcGVyYW5kLCBvcGVyYXRvcjogXCIhPT1cIiB9O1xuXHRcdFx0Y2FzZSBcIj5cIjpcblx0XHRcdFx0cmV0dXJuIHsgLi4ub3BlcmFuZCwgb3BlcmF0b3I6IFwiPD1cIiB9O1xuXHRcdFx0Y2FzZSBcIj49XCI6XG5cdFx0XHRcdHJldHVybiB7IC4uLm9wZXJhbmQsIG9wZXJhdG9yOiBcIjxcIiB9O1xuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0XHRfdHlwZTogXCJOb3RcIixcblx0XHRcdFx0XHRvcGVyYW5kOiBvcGVyYW5kXG5cdFx0XHRcdH07XG5cdFx0fVxuXHR9IGVsc2UgaWYgKG9wZXJhbmQuX3R5cGUgPT09IFwiTm90XCIpIHtcblx0XHRyZXR1cm4gb3BlcmFuZC5vcGVyYW5kO1xuXHR9XG5cblx0cmV0dXJuIHtcblx0XHRfdHlwZTogXCJOb3RcIixcblx0XHRvcGVyYW5kOiBvcGVyYW5kXG5cdH07XG59XG5cbi8qKlxuICogRXZhbHVhdGVzIHdoZXRoZXIgYSBiaW5kaW5nIGV4cHJlc3Npb24gaXMgZXF1YWwgdG8gdHJ1ZSB3aXRoIGEgbG9vc2UgZXF1YWxpdHkuXG4gKiBAcGFyYW0gb3BlcmFuZCBUaGUgZXhwcmVzc2lvbiB0byBjaGVja1xuICogQHJldHVybnMgVGhlIHJlc3VsdGluZyBleHByZXNzaW9uIHRoYXQgZXZhbHVhdGVzIHRvIGJvb2xlYW5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzVHJ1dGh5KG9wZXJhbmQ6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxzdHJpbmc+KTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+IHtcblx0aWYgKGlzQ29uc3RhbnQob3BlcmFuZCkpIHtcblx0XHRyZXR1cm4gY29uc3RhbnQoISFvcGVyYW5kLnZhbHVlKTtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0X3R5cGU6IFwiVHJ1dGh5XCIsXG5cdFx0XHRvcGVyYW5kOiBvcGVyYW5kXG5cdFx0fTtcblx0fVxufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBiaW5kaW5nIGV4cHJlc3Npb24gdGhhdCB3aWxsIGJlIGV2YWx1YXRlZCBieSB0aGUgY29ycmVzcG9uZGluZyBtb2RlbC5cbiAqIEBwYXJhbSBwYXRoXG4gKiBAcGFyYW0gbW9kZWxOYW1lXG4gKiBAcGFyYW0gdmlzaXRlZE5hdmlnYXRpb25QYXRoc1xuICogQHBhcmFtIHBhdGhWaXNpdG9yXG4gKiBAcmV0dXJucyBBbiBleHByZXNzaW9uIHJlcHJlc2VudGF0aW5nIHRoYXQgcGF0aCBpbiB0aGUgbW9kZWxcbiAqIEBkZXByZWNhdGVkIHVzZSBwYXRoSW5Nb2RlbCBpbnN0ZWFkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBiaW5kaW5nRXhwcmVzc2lvbjxUYXJnZXRUeXBlIGV4dGVuZHMgUHJpbWl0aXZlVHlwZT4oXG5cdHBhdGg6IHN0cmluZyxcblx0bW9kZWxOYW1lPzogc3RyaW5nLFxuXHR2aXNpdGVkTmF2aWdhdGlvblBhdGhzOiBzdHJpbmdbXSA9IFtdLFxuXHRwYXRoVmlzaXRvcj86IEZ1bmN0aW9uXG4pOiBQYXRoSW5Nb2RlbEV4cHJlc3Npb248VGFyZ2V0VHlwZT4gfCBVbnJlc29sdmFibGVQYXRoRXhwcmVzc2lvbiB7XG5cdHJldHVybiBwYXRoSW5Nb2RlbChwYXRoLCBtb2RlbE5hbWUsIHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMsIHBhdGhWaXNpdG9yKTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgYmluZGluZyBleHByZXNzaW9uIHRoYXQgd2lsbCBiZSBldmFsdWF0ZWQgYnkgdGhlIGNvcnJlc3BvbmRpbmcgbW9kZWwuXG4gKiBAdGVtcGxhdGUgVGFyZ2V0VHlwZVxuICogQHBhcmFtIHBhdGggVGhlIHBhdGggb24gdGhlIG1vZGVsXG4gKiBAcGFyYW0gW21vZGVsTmFtZV0gVGhlIG5hbWUgb2YgdGhlIG1vZGVsXG4gKiBAcGFyYW0gW3Zpc2l0ZWROYXZpZ2F0aW9uUGF0aHNdIFRoZSBwYXRocyBmcm9tIHRoZSByb290IGVudGl0eVNldFxuICogQHBhcmFtIFtwYXRoVmlzaXRvcl0gQSBmdW5jdGlvbiB0byBtb2RpZnkgdGhlIHJlc3VsdGluZyBwYXRoXG4gKiBAcmV0dXJucyBBbiBleHByZXNzaW9uIHJlcHJlc2VudGF0aW5nIHRoYXQgcGF0aCBpbiB0aGUgbW9kZWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhdGhJbk1vZGVsKFxuXHRwYXRoOiB1bmRlZmluZWQsXG5cdG1vZGVsTmFtZT86IHN0cmluZyxcblx0dmlzaXRlZE5hdmlnYXRpb25QYXRocz86IHN0cmluZ1tdLFxuXHRwYXRoVmlzaXRvcj86IEZ1bmN0aW9uXG4pOiBVbnJlc29sdmFibGVQYXRoRXhwcmVzc2lvbjtcbmV4cG9ydCBmdW5jdGlvbiBwYXRoSW5Nb2RlbDxUYXJnZXRUeXBlIGV4dGVuZHMgUHJpbWl0aXZlVHlwZT4oXG5cdHBhdGg6IHN0cmluZyxcblx0bW9kZWxOYW1lPzogc3RyaW5nLFxuXHR2aXNpdGVkTmF2aWdhdGlvblBhdGhzPzogc3RyaW5nW10sXG5cdHBhdGhWaXNpdG9yPzogdW5kZWZpbmVkXG4pOiBQYXRoSW5Nb2RlbEV4cHJlc3Npb248VGFyZ2V0VHlwZT47XG5leHBvcnQgZnVuY3Rpb24gcGF0aEluTW9kZWw8VGFyZ2V0VHlwZSBleHRlbmRzIFByaW1pdGl2ZVR5cGU+KFxuXHRwYXRoOiBzdHJpbmcgfCB1bmRlZmluZWQsXG5cdG1vZGVsTmFtZT86IHN0cmluZyxcblx0dmlzaXRlZE5hdmlnYXRpb25QYXRocz86IHN0cmluZ1tdLFxuXHRwYXRoVmlzaXRvcj86IEZ1bmN0aW9uXG4pOiBVbnJlc29sdmFibGVQYXRoRXhwcmVzc2lvbiB8IFBhdGhJbk1vZGVsRXhwcmVzc2lvbjxUYXJnZXRUeXBlPjtcbmV4cG9ydCBmdW5jdGlvbiBwYXRoSW5Nb2RlbDxUYXJnZXRUeXBlIGV4dGVuZHMgUHJpbWl0aXZlVHlwZT4oXG5cdHBhdGg6IHN0cmluZyB8IHVuZGVmaW5lZCxcblx0bW9kZWxOYW1lPzogc3RyaW5nLFxuXHR2aXNpdGVkTmF2aWdhdGlvblBhdGhzOiBzdHJpbmdbXSA9IFtdLFxuXHRwYXRoVmlzaXRvcj86IEZ1bmN0aW9uXG4pOiBVbnJlc29sdmFibGVQYXRoRXhwcmVzc2lvbiB8IFBhdGhJbk1vZGVsRXhwcmVzc2lvbjxUYXJnZXRUeXBlPiB7XG5cdGlmIChwYXRoID09PSB1bmRlZmluZWQpIHtcblx0XHRyZXR1cm4gdW5yZXNvbHZhYmxlRXhwcmVzc2lvbjtcblx0fVxuXHRsZXQgdGFyZ2V0UGF0aDtcblx0aWYgKHBhdGhWaXNpdG9yKSB7XG5cdFx0dGFyZ2V0UGF0aCA9IHBhdGhWaXNpdG9yKHBhdGgpO1xuXHRcdGlmICh0YXJnZXRQYXRoID09PSB1bmRlZmluZWQpIHtcblx0XHRcdHJldHVybiB1bnJlc29sdmFibGVFeHByZXNzaW9uO1xuXHRcdH1cblx0fSBlbHNlIHtcblx0XHRjb25zdCBsb2NhbFBhdGggPSB2aXNpdGVkTmF2aWdhdGlvblBhdGhzLmNvbmNhdCgpO1xuXHRcdGxvY2FsUGF0aC5wdXNoKHBhdGgpO1xuXHRcdHRhcmdldFBhdGggPSBsb2NhbFBhdGguam9pbihcIi9cIik7XG5cdH1cblx0cmV0dXJuIHtcblx0XHRfdHlwZTogXCJQYXRoSW5Nb2RlbFwiLFxuXHRcdG1vZGVsTmFtZTogbW9kZWxOYW1lLFxuXHRcdHBhdGg6IHRhcmdldFBhdGhcblx0fTtcbn1cblxuLyoqXG4gKiBUcmFuc2Zvcm1zIGEgYmluZGluZyBwYXRoIGZyb20gYSBuYXZpZ2F0aW9uIHByb3BlcnR5IGNvbnRleHQgdG8gaXRzIHBhcmVudCBjb250ZXh0LlxuICpcbiAqIFRoaXMgaXMgdXNlZCB0byB0cmFuc2Zvcm0gYSBiaW5kaW5nIG1hZGUgZm9yIGEgTmF2UHJvcCBjb250ZXh0IC9NYWluT2JqZWN0L05hdlByb3AxL05hdlByb3AyXG4gKiBpbnRvIGEgYmluZGluZyBvbiB0aGUgcHJldmlvdXMgY29udGV4dCAvTWFpbk9iamVjdC9OYXZQcm9wMS5cbiAqIEBwYXJhbSBwYXRoIFRoZSBwYXRoIHN0cmluZyB0byB0cmFuc2Zvcm1cbiAqIEBwYXJhbSBwYXJ0bmVyUGF0aCBUaGUgb3B0aW9uYWwgcGFydG5lciBuYXZpZ2F0aW9uIHByb3BlcnR5IG5hbWUgdG8gY2hlY2sgYWdhaW5zdFxuICogQHJldHVybnMgQSBiaW5kaW5nIGV4cHJlc3Npb24gZm9yIHRoZSB1cHBlciBjb250ZXh0LCBvciB1bnJlc29sdmFibGVFeHByZXNzaW9uIGlmIHRoZSBwYXRoIGNhbm5vdCBiZSB0cmFuc2Zvcm1lZFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0QmluZGluZ1BhdGhFeHByZXNzaW9uRnJvbVBhcnRuZXJOYXZpZ2F0aW9uKHBhdGg6IHN0cmluZywgcGFydG5lclBhdGg/OiBzdHJpbmcpOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248dW5rbm93bj4ge1xuXHRpZiAocGF0aC5zdGFydHNXaXRoKFwiL1wiKSkge1xuXHRcdC8vIHBhdGggaXMgYWJzb2x1dGUgaXQgY2FuIGJlIHJlc29sdmVkIGZyb20gYW55d2hlcmVcblx0XHRyZXR1cm4gcGF0aEluTW9kZWwocGF0aCk7XG5cdH1cblxuXHRpZiAocGFydG5lclBhdGggJiYgcGF0aC5zdGFydHNXaXRoKHBhcnRuZXJQYXRoICsgXCIvXCIpKSB7XG5cdFx0Ly8gUmVtb3ZlIHRoZSBwYXJ0bmVyIG5hdmlnYXRpb24gcGF0aCBwcmVmaXhcblx0XHRyZXR1cm4gcGF0aEluTW9kZWwocGF0aC5zdWJzdHJpbmcocGFydG5lclBhdGgubGVuZ3RoICsgMSkpO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiB1bnJlc29sdmFibGVFeHByZXNzaW9uO1xuXHR9XG59XG5cbi8qKlxuICogUmVjdXJzaXZlbHkgdHJhbnNmb3JtcyBhbiBleHByZXNzaW9uIGZyb20gYSBuYXZpZ2F0aW9uIHByb3BlcnR5IGNvbnRleHQgdG8gaXRzIHBhcmVudCBjb250ZXh0LlxuICpcbiAqIFRoaXMgZnVuY3Rpb24gd2Fsa3MgdGhyb3VnaCB0aGUgZXhwcmVzc2lvbiB0cmVlIGFuZCB0cmFuc2Zvcm1zIGFsbCBQYXRoSW5Nb2RlbCBleHByZXNzaW9uc1xuICogdGhhdCByZWZlcmVuY2UgcmVsYXRpdmUgcGF0aHMgKG5vbi1hYnNvbHV0ZSwgZGVmYXVsdCBtb2RlbCkgdXNpbmcgdGhlIHBhcnRuZXIgbmF2aWdhdGlvbiBwcm9wZXJ0eS5cbiAqIElmIHRoZSByZXN1bHRpbmcgZXhwcmVzc2lvbiBjb250YWlucyB1bnJlc29sdmFibGUgcGFydHMsIHRoZSBmYWxsYmFjayB2YWx1ZSBpcyByZXR1cm5lZCBpbnN0ZWFkLlxuICogQHRlbXBsYXRlIFQgVGhlIHR5cGUgb2YgdGhlIGJpbmRpbmcgZXhwcmVzc2lvblxuICogQHBhcmFtIGV4cHJlc3Npb24gVGhlIGluaXRpYWwgYmluZGluZyBleHByZXNzaW9uIHRvIHRyYW5zZm9ybVxuICogQHBhcmFtIHBhcnRuZXJOYXZpZ2F0aW9uUHJvcGVydHlOYW1lIFRoZSBwYXJ0bmVyIG5hdmlnYXRpb24gcHJvcGVydHkgbmFtZSB0byB1c2UgZm9yIHRyYW5zZm9ybWF0aW9uXG4gKiBAcGFyYW0gZmFsbGJhY2tWYWx1ZSBUaGUgdmFsdWUgdG8gcmV0dXJuIGlmIHRoZSBleHByZXNzaW9uIGJlY29tZXMgdW5yZXNvbHZhYmxlXG4gKiBAcmV0dXJucyBUaGUgdHJhbnNmb3JtZWQgZXhwcmVzc2lvbiBvciB0aGUgZmFsbGJhY2sgdmFsdWUgaWYgdW5yZXNvbHZhYmxlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRCaW5kaW5nRXhwcmVzc2lvbkZyb21VcHBlckNvbnRleHQ8VCBleHRlbmRzIFByaW1pdGl2ZVR5cGU+KFxuXHRleHByZXNzaW9uOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248VD4sXG5cdHBhcnRuZXJOYXZpZ2F0aW9uUHJvcGVydHlOYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQsXG5cdGZhbGxiYWNrVmFsdWU6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxUPlxuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFQ+IHtcblx0aWYgKGV4cHJlc3Npb24uX3R5cGUgPT09IFwiU2V0XCIpIHtcblx0XHRjb25zdCBuZXdPcGVyYW5kcyA9IGV4cHJlc3Npb24ub3BlcmFuZHMubWFwKChvcGVyYW5kOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4pID0+XG5cdFx0XHRnZXRCaW5kaW5nRXhwcmVzc2lvbkZyb21VcHBlckNvbnRleHQoXG5cdFx0XHRcdG9wZXJhbmQsXG5cdFx0XHRcdHBhcnRuZXJOYXZpZ2F0aW9uUHJvcGVydHlOYW1lLFxuXHRcdFx0XHRmYWxsYmFja1ZhbHVlIGFzIHVua25vd24gYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+XG5cdFx0XHQpXG5cdFx0KTtcblxuXHRcdGlmIChleHByZXNzaW9uLm9wZXJhdG9yID09PSBcInx8XCIpIHtcblx0XHRcdHJldHVybiBvciguLi4obmV3T3BlcmFuZHMgYXMgdW5rbm93biBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj5bXSkpIGFzIHVua25vd24gYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFQ+O1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gYW5kKC4uLihuZXdPcGVyYW5kcyBhcyB1bmtub3duIGFzIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPltdKSkgYXMgdW5rbm93biBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248VD47XG5cdFx0fVxuXHR9XG5cdC8vIFRyYW5zZm9ybSBQYXRoSW5Nb2RlbCBleHByZXNzaW9ucyB1c2luZyB0aGUgcGFydG5lciBuYXZpZ2F0aW9uXG5cdGNvbnN0IHRyYW5zZm9ybWVkRXhwcmVzc2lvbiA9IHRyYW5zZm9ybVJlY3Vyc2l2ZWx5PFQsIFwiUGF0aEluTW9kZWxcIj4oXG5cdFx0ZXhwcmVzc2lvbixcblx0XHRcIlBhdGhJbk1vZGVsXCIsXG5cdFx0KHBhdGhFeHByZXNzaW9uOiBQYXRoSW5Nb2RlbEV4cHJlc3Npb248VD4pID0+IHtcblx0XHRcdC8vIE9ubHkgdHJhbnNmb3JtIHJlbGF0aXZlIHBhdGhzIGluIHRoZSBkZWZhdWx0IG1vZGVsIChtb2RlbE5hbWUgaXMgdW5kZWZpbmVkIG9yIGVtcHR5KVxuXHRcdFx0aWYgKCFwYXRoRXhwcmVzc2lvbi5tb2RlbE5hbWUgfHwgcGF0aEV4cHJlc3Npb24ubW9kZWxOYW1lID09PSBcIlwiKSB7XG5cdFx0XHRcdHJldHVybiBnZXRCaW5kaW5nUGF0aEV4cHJlc3Npb25Gcm9tUGFydG5lck5hdmlnYXRpb24oXG5cdFx0XHRcdFx0cGF0aEV4cHJlc3Npb24ucGF0aCxcblx0XHRcdFx0XHRwYXJ0bmVyTmF2aWdhdGlvblByb3BlcnR5TmFtZVxuXHRcdFx0XHQpIGFzIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxUPjtcblx0XHRcdH1cblx0XHRcdHJldHVybiBwYXRoRXhwcmVzc2lvbjtcblx0XHR9LFxuXHRcdHRydWUgLy8gaW5jbHVkZUFsbEV4cHJlc3Npb24gLSB0cmFuc2Zvcm0gYWxsIGV4cHJlc3Npb24gdHlwZXMgaW4gdGhlIHRyZWVcblx0KTtcblxuXHQvLyBDaGVjayBpZiB0aGUgdHJhbnNmb3JtZWQgZXhwcmVzc2lvbiBjb250YWlucyB1bnJlc29sdmFibGUgcGFydHNcblx0aWYgKGhhc1VucmVzb2x2YWJsZUV4cHJlc3Npb24odHJhbnNmb3JtZWRFeHByZXNzaW9uKSkge1xuXHRcdHJldHVybiBmYWxsYmFja1ZhbHVlO1xuXHR9XG5cblx0cmV0dXJuIHRyYW5zZm9ybWVkRXhwcmVzc2lvbjtcbn1cblxudHlwZSBQbGFpbkV4cHJlc3Npb25PYmplY3QgPSB7IFtpbmRleDogc3RyaW5nXTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHVua25vd24+IH07XG5cbi8qKlxuICogQ3JlYXRlcyBhIGNvbnN0YW50IGV4cHJlc3Npb24gYmFzZWQgb24gYSBwcmltaXRpdmUgdmFsdWUuXG4gKiBAdGVtcGxhdGUgVFxuICogQHBhcmFtIHZhbHVlIFRoZSBjb25zdGFudCB0byB3cmFwIGluIGFuIGV4cHJlc3Npb25cbiAqIEByZXR1cm5zIFRoZSBjb25zdGFudCBleHByZXNzaW9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb25zdGFudDxUIGV4dGVuZHMgUHJpbWl0aXZlVHlwZT4odmFsdWU6IFQpOiBDb25zdGFudEV4cHJlc3Npb248VD4ge1xuXHRsZXQgY29uc3RhbnRWYWx1ZTogVDtcblxuXHRpZiAodHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiICYmIHZhbHVlICE9PSBudWxsICYmIHZhbHVlICE9PSB1bmRlZmluZWQpIHtcblx0XHRpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcblx0XHRcdGNvbnN0YW50VmFsdWUgPSB2YWx1ZS5tYXAod3JhcFByaW1pdGl2ZSkgYXMgVDtcblx0XHR9IGVsc2UgaWYgKGlzUHJpbWl0aXZlT2JqZWN0KHZhbHVlKSkge1xuXHRcdFx0Y29uc3RhbnRWYWx1ZSA9IHZhbHVlLnZhbHVlT2YoKSBhcyBUO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRjb25zdGFudFZhbHVlID0gT2JqZWN0LmVudHJpZXModmFsdWUpLnJlZHVjZSgocGxhaW5FeHByZXNzaW9uLCBba2V5LCB2YWxdKSA9PiB7XG5cdFx0XHRcdGNvbnN0IHdyYXBwZWRWYWx1ZSA9IHdyYXBQcmltaXRpdmUodmFsKTtcblx0XHRcdFx0aWYgKHdyYXBwZWRWYWx1ZS5fdHlwZSAhPT0gXCJDb25zdGFudFwiIHx8IHdyYXBwZWRWYWx1ZS52YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0cGxhaW5FeHByZXNzaW9uW2tleV0gPSB3cmFwcGVkVmFsdWU7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIHBsYWluRXhwcmVzc2lvbjtcblx0XHRcdH0sIHt9IGFzIFBsYWluRXhwcmVzc2lvbk9iamVjdCkgYXMgVDtcblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0Y29uc3RhbnRWYWx1ZSA9IHZhbHVlO1xuXHR9XG5cblx0cmV0dXJuIHsgX3R5cGU6IFwiQ29uc3RhbnRcIiwgdmFsdWU6IGNvbnN0YW50VmFsdWUgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVCaW5kaW5nU3RyaW5nPFQgZXh0ZW5kcyBQcmltaXRpdmVUeXBlPihcblx0dmFsdWU6IHN0cmluZyB8IGJvb2xlYW4gfCBudW1iZXIsXG5cdHRhcmdldFR5cGU/OiBzdHJpbmdcbik6IENvbnN0YW50RXhwcmVzc2lvbjxUPiB8IFBhdGhJbk1vZGVsRXhwcmVzc2lvbjxUPiB8IEVtYmVkZGVkVUk1QmluZGluZ0V4cHJlc3Npb248VD4gfCBFbWJlZGRlZFVJNUV4cHJlc3Npb25CaW5kaW5nRXhwcmVzc2lvbjxUPiB7XG5cdGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkICYmIHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIiAmJiB2YWx1ZS5zdGFydHNXaXRoKFwie1wiKSkge1xuXHRcdGNvbnN0IHBhdGhJbk1vZGVsUmVnZXggPSAvXnsoLiopPiguKyl9JC87IC8vIE1hdGNoZXMgbW9kZWwgcGF0aHMgbGlrZSBcIm1vZGVsPnBhdGhcIiBvciBcIj5wYXRoXCIgKGRlZmF1bHQgbW9kZWwpXG5cdFx0Y29uc3QgcGF0aEluTW9kZWxSZWdleE1hdGNoID0gcGF0aEluTW9kZWxSZWdleC5leGVjKHZhbHVlKTtcblxuXHRcdGlmICh2YWx1ZS5zdGFydHNXaXRoKFwiez1cIikpIHtcblx0XHRcdC8vIEV4cHJlc3Npb24gYmluZGluZywgd2UgY2FuIGp1c3QgcmVtb3ZlIHRoZSBvdXRlciBiaW5kaW5nIHRoaW5nc1xuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0X3R5cGU6IFwiRW1iZWRkZWRFeHByZXNzaW9uQmluZGluZ1wiLFxuXHRcdFx0XHR2YWx1ZTogdmFsdWVcblx0XHRcdH07XG5cdFx0fSBlbHNlIGlmIChwYXRoSW5Nb2RlbFJlZ2V4TWF0Y2gpIHtcblx0XHRcdHJldHVybiBwYXRoSW5Nb2RlbChwYXRoSW5Nb2RlbFJlZ2V4TWF0Y2hbMl0gfHwgXCJcIiwgcGF0aEluTW9kZWxSZWdleE1hdGNoWzFdIHx8IHVuZGVmaW5lZCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdF90eXBlOiBcIkVtYmVkZGVkQmluZGluZ1wiLFxuXHRcdFx0XHR2YWx1ZTogdmFsdWVcblx0XHRcdH07XG5cdFx0fVxuXHR9IGVsc2UgaWYgKHRhcmdldFR5cGUgPT09IFwiYm9vbGVhblwiICYmIHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIiAmJiAodmFsdWUgPT09IFwidHJ1ZVwiIHx8IHZhbHVlID09PSBcImZhbHNlXCIpKSB7XG5cdFx0cmV0dXJuIGNvbnN0YW50KHZhbHVlID09PSBcInRydWVcIikgYXMgQ29uc3RhbnRFeHByZXNzaW9uPFQ+O1xuXHR9IGVsc2UgaWYgKHRhcmdldFR5cGUgPT09IFwibnVtYmVyXCIgJiYgdHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiICYmICghaXNOYU4oTnVtYmVyKHZhbHVlKSkgfHwgdmFsdWUgPT09IFwiTmFOXCIpKSB7XG5cdFx0cmV0dXJuIGNvbnN0YW50KE51bWJlcih2YWx1ZSkpIGFzIENvbnN0YW50RXhwcmVzc2lvbjxUPjtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gY29uc3RhbnQodmFsdWUpIGFzIENvbnN0YW50RXhwcmVzc2lvbjxUPjtcblx0fVxufVxuXG4vKipcbiAqIEEgbmFtZWQgcmVmZXJlbmNlLlxuICogQHNlZSBmblxuICogQHBhcmFtIHJlZmVyZW5jZSBSZWZlcmVuY2VcbiAqIEByZXR1cm5zIFRoZSBvYmplY3QgcmVmZXJlbmNlIGJpbmRpbmcgcGFydFxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVmKHJlZmVyZW5jZTogc3RyaW5nIHwgbnVsbCk6IFJlZmVyZW5jZUV4cHJlc3Npb24ge1xuXHRyZXR1cm4geyBfdHlwZTogXCJSZWZcIiwgcmVmOiByZWZlcmVuY2UgfTtcbn1cblxuLyoqXG4gKiBXcmFwIGEgc3RhdGUgb2JqZWN0IGludG8gYSBwYXRoIGluIG1vZGVsIGV4cHJlc3Npb24uXG4gKiBAdGVtcGxhdGUgVFxuICogQHBhcmFtIHN0YXRlT2JqZWN0UHJvcCBUaGUgb2JqZWN0IHRvIGV2YWx1YXRlLCBpZiBpdCdzIGEgY29uc3RhbnQgaXQgd2lsbCBiZSB3cmFwcGVkIGluIGEgY29uc3RhbnQgZXhwcmVzc2lvbiwgaWYgaXQncyBhIHN0YXRlIHByb3BlcnR5IGl0IHdpbGwgYmUgYm91bmRcbiAqIEBwYXJhbSBrZXkgVGhlIGtleSBvZiB0aGUgc3RhdGUgb2JqZWN0IHRvIGJpbmRcbiAqIEByZXR1cm5zIFRoZSBjb3JyZWN0IGJpbmRpbmcgdG9vbGtpdCBleHByZXNzaW9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBiaW5kU3RhdGU8VCBleHRlbmRzIG9iamVjdCwgSyBleHRlbmRzIFByaW1pdGl2ZVR5cGU+KFxuXHRzdGF0ZU9iamVjdFByb3A6IFQsXG5cdGtleToga2V5b2YgVFxuKTogUGF0aEluTW9kZWxFeHByZXNzaW9uPEs+IHwgQ29uc3RhbnRFeHByZXNzaW9uPEs+IHtcblx0aWYgKHR5cGVvZiBzdGF0ZU9iamVjdFByb3AgPT09IFwib2JqZWN0XCIgJiYgKHN0YXRlT2JqZWN0UHJvcCBhcyBCaW5kaW5nSW5mb0hvbGRlcjxUPikuX19iaW5kaW5nSW5mbykge1xuXHRcdHJldHVybiBwYXRoSW5Nb2RlbChcIi9cIiArIGtleS50b1N0cmluZygpLCAoc3RhdGVPYmplY3RQcm9wIGFzIEJpbmRpbmdJbmZvSG9sZGVyPFQ+KS5fX2JpbmRpbmdJbmZvLm1vZGVsKTtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gY29uc3RhbnQoc3RhdGVPYmplY3RQcm9wKSBhcyB1bmtub3duIGFzIENvbnN0YW50RXhwcmVzc2lvbjxLPjtcblx0fVxufVxuLyoqXG4gKiBXcmFwIGEgcHJpbWl0aXZlIGludG8gYSBjb25zdGFudCBleHByZXNzaW9uIGlmIGl0IGlzIG5vdCBhbHJlYWR5IGFuIGV4cHJlc3Npb24uXG4gKiBAdGVtcGxhdGUgVFxuICogQHBhcmFtIHNvbWV0aGluZyBUaGUgb2JqZWN0IHRvIHdyYXAgaW4gYSBDb25zdGFudCBleHByZXNzaW9uXG4gKiBAcmV0dXJucyBFaXRoZXIgdGhlIG9yaWdpbmFsIG9iamVjdCBvciB0aGUgd3JhcHBlZCBvbmUgZGVwZW5kaW5nIG9uIHRoZSBjYXNlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB3cmFwUHJpbWl0aXZlPFQgZXh0ZW5kcyBQcmltaXRpdmVUeXBlPihzb21ldGhpbmc6IEV4cHJlc3Npb25PclByaW1pdGl2ZTxUPik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxUPiB7XG5cdGlmIChpc0JpbmRpbmdUb29sa2l0RXhwcmVzc2lvbihzb21ldGhpbmcpKSB7XG5cdFx0cmV0dXJuIHNvbWV0aGluZyBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248VD47XG5cdH1cblxuXHRyZXR1cm4gY29uc3RhbnQoc29tZXRoaW5nKTtcbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgdGhlIGV4cHJlc3Npb24gb3IgdmFsdWUgcHJvdmlkZWQgaXMgYSBiaW5kaW5nIHRvb2xpbmcgZXhwcmVzc2lvbiBvciBub3QuXG4gKlxuICogRXZlcnkgb2JqZWN0IGhhdmluZyBhIHByb3BlcnR5IG5hbWVkIGBfdHlwZWAgb2Ygc29tZSB2YWx1ZSBpcyBjb25zaWRlcmVkIGFuIGV4cHJlc3Npb24sIGV2ZW4gaWYgdGhlcmUgaXMgYWN0dWFsbHlcbiAqIG5vIHN1Y2ggZXhwcmVzc2lvbiB0eXBlIHN1cHBvcnRlZC5cbiAqIEBwYXJhbSBleHByZXNzaW9uXG4gKiBAcmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGV4cHJlc3Npb24gaXMgYSBiaW5kaW5nIHRvb2xraXQgZXhwcmVzc2lvblxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24oXG5cdGV4cHJlc3Npb246IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjx1bmtub3duPiB8IHVua25vd25cbik6IGV4cHJlc3Npb24gaXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHVua25vd24+IHtcblx0cmV0dXJuIChleHByZXNzaW9uIGFzIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjx1bmtub3duPik/Ll90eXBlICE9PSB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIHRoZSBleHByZXNzaW9uIG9yIHZhbHVlIHByb3ZpZGVkIGlzIGNvbnN0YW50IG9yIG5vdC5cbiAqIEB0ZW1wbGF0ZSBUIFRoZSB0YXJnZXQgdHlwZVxuICogQHBhcmFtICBtYXliZUNvbnN0YW50IFRoZSBleHByZXNzaW9uIG9yIHByaW1pdGl2ZSB2YWx1ZSB0aGF0IGlzIHRvIGJlIGNoZWNrZWRcbiAqIEByZXR1cm5zIGB0cnVlYCBpZiBpdCBpcyBjb25zdGFudFxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNDb25zdGFudDxUIGV4dGVuZHMgUHJpbWl0aXZlVHlwZT4obWF5YmVDb25zdGFudDogRXhwcmVzc2lvbk9yUHJpbWl0aXZlPFQ+KTogbWF5YmVDb25zdGFudCBpcyBDb25zdGFudEV4cHJlc3Npb248VD4ge1xuXHRyZXR1cm4gdHlwZW9mIG1heWJlQ29uc3RhbnQgIT09IFwib2JqZWN0XCIgfHwgKG1heWJlQ29uc3RhbnQgYXMgQmFzZUV4cHJlc3Npb248VD4pLl90eXBlID09PSBcIkNvbnN0YW50XCI7XG59XG5cbmZ1bmN0aW9uIGlzVHJ1ZShleHByZXNzaW9uOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248UHJpbWl0aXZlVHlwZT4pOiBib29sZWFuIHtcblx0cmV0dXJuIGlzQ29uc3RhbnQoZXhwcmVzc2lvbikgJiYgZXhwcmVzc2lvbi52YWx1ZSA9PT0gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gaXNGYWxzZShleHByZXNzaW9uOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248UHJpbWl0aXZlVHlwZT4pOiBib29sZWFuIHtcblx0cmV0dXJuIGlzQ29uc3RhbnQoZXhwcmVzc2lvbikgJiYgZXhwcmVzc2lvbi52YWx1ZSA9PT0gZmFsc2U7XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIHRoZSBleHByZXNzaW9uIG9yIHZhbHVlIHByb3ZpZGVkIGlzIGEgcGF0aCBpbiBtb2RlbCBleHByZXNzaW9uIG9yIG5vdC5cbiAqIEB0ZW1wbGF0ZSBUIFRoZSB0YXJnZXQgdHlwZVxuICogQHBhcmFtICBtYXliZUJpbmRpbmcgVGhlIGV4cHJlc3Npb24gb3IgcHJpbWl0aXZlIHZhbHVlIHRoYXQgaXMgdG8gYmUgY2hlY2tlZFxuICogQHJldHVybnMgYHRydWVgIGlmIGl0IGlzIGEgcGF0aCBpbiBtb2RlbCBleHByZXNzaW9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1BhdGhJbk1vZGVsRXhwcmVzc2lvbjxUIGV4dGVuZHMgUHJpbWl0aXZlVHlwZT4oXG5cdG1heWJlQmluZGluZzogRXhwcmVzc2lvbk9yUHJpbWl0aXZlPFQ+XG4pOiBtYXliZUJpbmRpbmcgaXMgUGF0aEluTW9kZWxFeHByZXNzaW9uPFQ+IHtcblx0cmV0dXJuIChtYXliZUJpbmRpbmcgYXMgQmFzZUV4cHJlc3Npb248VD4pPy5fdHlwZSA9PT0gXCJQYXRoSW5Nb2RlbFwiO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiB0aGUgZXhwcmVzc2lvbiBvciB2YWx1ZSBwcm92aWRlZCBpcyBhIGNvbXBsZXggdHlwZSBleHByZXNzaW9uLlxuICogQHRlbXBsYXRlIFQgVGhlIHRhcmdldCB0eXBlXG4gKiBAcGFyYW0gIG1heWJlQmluZGluZyBUaGUgZXhwcmVzc2lvbiBvciBwcmltaXRpdmUgdmFsdWUgdGhhdCBpcyB0byBiZSBjaGVja2VkXG4gKiBAcmV0dXJucyBgdHJ1ZWAgaWYgaXQgaXMgYSBwYXRoIGluIG1vZGVsIGV4cHJlc3Npb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzQ29tcGxleFR5cGVFeHByZXNzaW9uPFQgZXh0ZW5kcyBQcmltaXRpdmVUeXBlPihcblx0bWF5YmVCaW5kaW5nOiBFeHByZXNzaW9uT3JQcmltaXRpdmU8VD5cbik6IG1heWJlQmluZGluZyBpcyBDb21wbGV4VHlwZUV4cHJlc3Npb248VD4ge1xuXHRyZXR1cm4gKG1heWJlQmluZGluZyBhcyBCYXNlRXhwcmVzc2lvbjxUPik/Ll90eXBlID09PSBcIkNvbXBsZXhUeXBlXCI7XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIHRoZSBleHByZXNzaW9uIG9yIHZhbHVlIHByb3ZpZGVkIGlzIGEgY29uY2F0IGV4cHJlc3Npb24gb3Igbm90LlxuICogQHBhcmFtIGV4cHJlc3Npb25cbiAqIEByZXR1cm5zIGB0cnVlYCBpZiB0aGUgZXhwcmVzc2lvbiBpcyBhIENvbmNhdEV4cHJlc3Npb25cbiAqL1xuZnVuY3Rpb24gaXNDb25jYXRFeHByZXNzaW9uKGV4cHJlc3Npb246IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxQcmltaXRpdmVUeXBlPik6IGV4cHJlc3Npb24gaXMgQ29uY2F0RXhwcmVzc2lvbiB7XG5cdHJldHVybiAoZXhwcmVzc2lvbiBhcyBCYXNlRXhwcmVzc2lvbjxQcmltaXRpdmVUeXBlPik/Ll90eXBlID09PSBcIkNvbmNhdFwiO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiB0aGUgZXhwcmVzc2lvbiBvciB2YWx1ZSBwcm92aWRlZCBpcyBhIElmRWxzZSBleHByZXNzaW9uIG9yIG5vdC5cbiAqIEBwYXJhbSBleHByZXNzaW9uXG4gKiBAcmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGV4cHJlc3Npb24gaXMgYSBJZkVsc2VFeHByZXNzaW9uXG4gKi9cbmZ1bmN0aW9uIGlzSWZFbHNlRXhwcmVzc2lvbihleHByZXNzaW9uOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248UHJpbWl0aXZlVHlwZT4pOiBleHByZXNzaW9uIGlzIENvbmNhdEV4cHJlc3Npb24ge1xuXHRyZXR1cm4gKGV4cHJlc3Npb24gYXMgQmFzZUV4cHJlc3Npb248UHJpbWl0aXZlVHlwZT4pPy5fdHlwZSA9PT0gXCJJZkVsc2VcIjtcbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgdGhlIGV4cHJlc3Npb24gcHJvdmlkZWQgaXMgYSBjb21wYXJpc29uIG9yIG5vdC5cbiAqIEB0ZW1wbGF0ZSBUIFRoZSB0YXJnZXQgdHlwZVxuICogQHBhcmFtIGV4cHJlc3Npb24gVGhlIGV4cHJlc3Npb25cbiAqIEByZXR1cm5zIGB0cnVlYCBpZiB0aGUgZXhwcmVzc2lvbiBpcyBhIENvbXBhcmlzb25FeHByZXNzaW9uXG4gKi9cbmZ1bmN0aW9uIGlzQ29tcGFyaXNvbjxUIGV4dGVuZHMgUHJpbWl0aXZlVHlwZT4oZXhwcmVzc2lvbjogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFQ+KTogZXhwcmVzc2lvbiBpcyBDb21wYXJpc29uRXhwcmVzc2lvbiB7XG5cdHJldHVybiBleHByZXNzaW9uLl90eXBlID09PSBcIkNvbXBhcmlzb25cIjtcbn1cblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciB0aGUgaW5wdXQgcGFyYW1ldGVyIGlzIGEgY29uc3RhbnQgZXhwcmVzc2lvbiBvZiB0eXBlIHVuZGVmaW5lZC5cbiAqIEBwYXJhbSBleHByZXNzaW9uIFRoZSBpbnB1dCBleHByZXNzaW9uIG9yIG9iamVjdCBpbiBnZW5lcmFsXG4gKiBAcmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGlucHV0IGlzIGNvbnN0YW50IHdoaWNoIGhhcyB1bmRlZmluZWQgZm9yIHZhbHVlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1VuZGVmaW5lZEV4cHJlc3Npb24oZXhwcmVzc2lvbjogdW5rbm93bik6IGV4cHJlc3Npb24gaXMgQ29uc3RhbnRFeHByZXNzaW9uPHVuZGVmaW5lZD4ge1xuXHRjb25zdCBleHByZXNzaW9uQXNFeHByZXNzaW9uID0gZXhwcmVzc2lvbiBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248dW5rbm93bj47XG5cdHJldHVybiBleHByZXNzaW9uQXNFeHByZXNzaW9uPy5fdHlwZSA9PT0gXCJDb25zdGFudFwiICYmIGV4cHJlc3Npb25Bc0V4cHJlc3Npb24/LnZhbHVlID09PSB1bmRlZmluZWQ7XG59XG5cbnR5cGUgQ29tcGxleEFubm90YXRpb25FeHByZXNzaW9uPFA+ID1cblx0fCBQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb248UD5cblx0fCBBcHBseUFubm90YXRpb25FeHByZXNzaW9uPFA+XG5cdHwgSWZBbm5vdGF0aW9uRXhwcmVzc2lvbjxQPlxuXHR8IE9yQW5ub3RhdGlvbkV4cHJlc3Npb248UD5cblx0fCBBbmRBbm5vdGF0aW9uRXhwcmVzc2lvbjxQPlxuXHR8IE5lQW5ub3RhdGlvbkV4cHJlc3Npb248UD5cblx0fCBFcUFubm90YXRpb25FeHByZXNzaW9uPFA+XG5cdHwgTm90QW5ub3RhdGlvbkV4cHJlc3Npb248UD5cblx0fCBHdEFubm90YXRpb25FeHByZXNzaW9uPFA+XG5cdHwgR2VBbm5vdGF0aW9uRXhwcmVzc2lvbjxQPlxuXHR8IExlQW5ub3RhdGlvbkV4cHJlc3Npb248UD5cblx0fCBMdEFubm90YXRpb25FeHByZXNzaW9uPFA+XG5cdHwgSGFzQW5ub3RhdGlvbkV4cHJlc3Npb248UD5cblx0fCBJbkFubm90YXRpb25FeHByZXNzaW9uPFA+XG5cdHwgQWRkQW5ub3RhdGlvbkV4cHJlc3Npb248UD5cblx0fCBTdWJBbm5vdGF0aW9uRXhwcmVzc2lvbjxQPlxuXHR8IE11bEFubm90YXRpb25FeHByZXNzaW9uPFA+XG5cdHwgRGl2QW5ub3RhdGlvbkV4cHJlc3Npb248UD5cblx0fCBNb2RBbm5vdGF0aW9uRXhwcmVzc2lvbjxQPlxuXHR8IERpdkJ5QW5ub3RhdGlvbkV4cHJlc3Npb248UD5cblx0fCBOZWdBbm5vdGF0aW9uRXhwcmVzc2lvbjxQPlxuXHR8IFZvY2FiQ29uc3RhbnRFeHByZXNzaW9uPFA+O1xuXG5mdW5jdGlvbiBpc1ByaW1pdGl2ZU9iamVjdChvYmplY3RUeXBlOiBvYmplY3QpOiBib29sZWFuIHtcblx0c3dpdGNoIChvYmplY3RUeXBlLmNvbnN0cnVjdG9yLm5hbWUpIHtcblx0XHRjYXNlIFwiU3RyaW5nXCI6XG5cdFx0Y2FzZSBcIk51bWJlclwiOlxuXHRcdGNhc2UgXCJCb29sZWFuXCI6XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRkZWZhdWx0OlxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG59XG4vKipcbiAqIENoZWNrIGlmIHRoZSBwYXNzZWQgYW5ub3RhdGlvbiBhbm5vdGF0aW9uVmFsdWUgaXMgYSBDb21wbGV4QW5ub3RhdGlvbkV4cHJlc3Npb24uXG4gKiBAdGVtcGxhdGUgVCBUaGUgdGFyZ2V0IHR5cGVcbiAqIEBwYXJhbSAgYW5ub3RhdGlvblZhbHVlIFRoZSBhbm5vdGF0aW9uIGFubm90YXRpb25WYWx1ZSB0byBldmFsdWF0ZVxuICogQHJldHVybnMgYHRydWVgIGlmIHRoZSBvYmplY3QgaXMgYSB7Q29tcGxleEFubm90YXRpb25FeHByZXNzaW9ufVxuICovXG5mdW5jdGlvbiBpc0NvbXBsZXhBbm5vdGF0aW9uRXhwcmVzc2lvbjxUPihhbm5vdGF0aW9uVmFsdWU6IFByb3BlcnR5QW5ub3RhdGlvblZhbHVlPFQ+KTogYW5ub3RhdGlvblZhbHVlIGlzIENvbXBsZXhBbm5vdGF0aW9uRXhwcmVzc2lvbjxUPiB7XG5cdHJldHVybiB0eXBlb2YgYW5ub3RhdGlvblZhbHVlID09PSBcIm9iamVjdFwiICYmICFpc1ByaW1pdGl2ZU9iamVjdChhbm5vdGF0aW9uVmFsdWUgYXMgb2JqZWN0KTtcbn1cblxubGV0IENPTlZFUlRFUl9ST09UX1NZTUJPTDogc3ltYm9sIHwgdW5kZWZpbmVkO1xuZXhwb3J0IGZ1bmN0aW9uIHNldENvbnZlcnRlclJvb3RTeW1ib2woY29udmVydGVyUm9vdFN5bWJvbDogc3ltYm9sKTogdm9pZCB7XG5cdENPTlZFUlRFUl9ST09UX1NZTUJPTCA9IGNvbnZlcnRlclJvb3RTeW1ib2w7XG59XG5cbi8qKlxuICogR2VuZXJhdGUgdGhlIGNvcnJlc3BvbmRpbmcgYW5ub3RhdGlvblZhbHVlIGZvciBhIGdpdmVuIGFubm90YXRpb24gYW5ub3RhdGlvblZhbHVlLlxuICogQHRlbXBsYXRlIFQgVGhlIHRhcmdldCB0eXBlXG4gKiBAcGFyYW0gYW5ub3RhdGlvblZhbHVlIFRoZSBzb3VyY2UgYW5ub3RhdGlvbiBhbm5vdGF0aW9uVmFsdWVcbiAqIEBwYXJhbSB2aXNpdGVkTmF2aWdhdGlvblBhdGhzIFRoZSBwYXRoIGZyb20gdGhlIHJvb3QgZW50aXR5IHNldFxuICogQHBhcmFtIGRlZmF1bHRWYWx1ZSBEZWZhdWx0IHZhbHVlIGlmIHRoZSBhbm5vdGF0aW9uVmFsdWUgaXMgdW5kZWZpbmVkXG4gKiBAcGFyYW0gcGF0aFZpc2l0b3IgQSBmdW5jdGlvbiB0byBtb2RpZnkgdGhlIHJlc3VsdGluZyBwYXRoXG4gKiBAcmV0dXJucyBUaGUgYW5ub3RhdGlvblZhbHVlIGVxdWl2YWxlbnQgdG8gdGhhdCBhbm5vdGF0aW9uIGFubm90YXRpb25WYWx1ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uPFQgZXh0ZW5kcyBQcmltaXRpdmVUeXBlPihcblx0YW5ub3RhdGlvblZhbHVlOiBQcm9wZXJ0eUFubm90YXRpb25WYWx1ZTxUPiB8IHVuZGVmaW5lZCxcblx0dmlzaXRlZE5hdmlnYXRpb25QYXRoczogc3RyaW5nW10gPSBbXSxcblx0ZGVmYXVsdFZhbHVlPzogRXhwcmVzc2lvbk9yUHJpbWl0aXZlPFQ+LFxuXHRwYXRoVmlzaXRvcj86IEZ1bmN0aW9uXG4pOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248UHJpbWl0aXZlVHlwZUNhc3Q8VD4+IHtcblx0bGV0IGNvbnZlcnRlclJvb3Q6IENvbnZlcnRlZE1ldGFkYXRhIHwgdW5kZWZpbmVkO1xuXHRpZiAoQ09OVkVSVEVSX1JPT1RfU1lNQk9MKSB7XG5cdFx0Y29udmVydGVyUm9vdCA9IChhbm5vdGF0aW9uVmFsdWU/LltDT05WRVJURVJfUk9PVF9TWU1CT0wgYXMgbmV2ZXJdIGFzIHVua25vd24gYXMgRnVuY3Rpb24pPy4oKSBhcyBDb252ZXJ0ZWRNZXRhZGF0YSB8IHVuZGVmaW5lZDtcblx0fVxuXG5cdGlmIChhbm5vdGF0aW9uVmFsdWUgPT09IHVuZGVmaW5lZCkge1xuXHRcdHJldHVybiB3cmFwUHJpbWl0aXZlKGRlZmF1bHRWYWx1ZSBhcyBQcmltaXRpdmVUeXBlQ2FzdDxUPik7XG5cdH1cblx0YW5ub3RhdGlvblZhbHVlID0gYW5ub3RhdGlvblZhbHVlPy52YWx1ZU9mKCkgYXMgUHJvcGVydHlBbm5vdGF0aW9uVmFsdWU8VD47XG5cdGlmICghaXNDb21wbGV4QW5ub3RhdGlvbkV4cHJlc3Npb24oYW5ub3RhdGlvblZhbHVlKSkge1xuXHRcdHJldHVybiBjb25zdGFudChhbm5vdGF0aW9uVmFsdWUpO1xuXHR9XG5cblx0c3dpdGNoIChhbm5vdGF0aW9uVmFsdWUudHlwZSkge1xuXHRcdGNhc2UgXCJQYXRoXCI6XG5cdFx0XHRyZXR1cm4gcGF0aEluTW9kZWwoYW5ub3RhdGlvblZhbHVlLnBhdGgsIHVuZGVmaW5lZCwgdmlzaXRlZE5hdmlnYXRpb25QYXRocywgcGF0aFZpc2l0b3IpO1xuXHRcdGNhc2UgXCJJZlwiOlxuXHRcdFx0cmV0dXJuIGFubm90YXRpb25JZkV4cHJlc3Npb24oXG5cdFx0XHRcdGFubm90YXRpb25WYWx1ZS4kSWYsXG5cdFx0XHRcdHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMsXG5cdFx0XHRcdHBhdGhWaXNpdG9yLFxuXHRcdFx0XHRjb252ZXJ0ZXJSb290XG5cdFx0XHQpIGFzIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxQcmltaXRpdmVUeXBlQ2FzdDxUPj47XG5cdFx0Y2FzZSBcIk5vdFwiOlxuXHRcdFx0cmV0dXJuIG5vdChcblx0XHRcdFx0cGFyc2VBbm5vdGF0aW9uQ29uZGl0aW9uKGFubm90YXRpb25WYWx1ZS4kTm90LCB2aXNpdGVkTmF2aWdhdGlvblBhdGhzLCBwYXRoVmlzaXRvciwgY29udmVydGVyUm9vdClcblx0XHRcdCkgYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFByaW1pdGl2ZVR5cGVDYXN0PFQ+Pjtcblx0XHRjYXNlIFwiRXFcIjpcblx0XHRcdHJldHVybiBlcXVhbChcblx0XHRcdFx0cGFyc2VBbm5vdGF0aW9uQ29uZGl0aW9uKGFubm90YXRpb25WYWx1ZS4kRXFbMF0sIHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMsIHBhdGhWaXNpdG9yLCBjb252ZXJ0ZXJSb290KSxcblx0XHRcdFx0cGFyc2VBbm5vdGF0aW9uQ29uZGl0aW9uKGFubm90YXRpb25WYWx1ZS4kRXFbMV0sIHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMsIHBhdGhWaXNpdG9yLCBjb252ZXJ0ZXJSb290KVxuXHRcdFx0KSBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248UHJpbWl0aXZlVHlwZUNhc3Q8VD4+O1xuXHRcdGNhc2UgXCJOZVwiOlxuXHRcdFx0cmV0dXJuIG5vdEVxdWFsKFxuXHRcdFx0XHRwYXJzZUFubm90YXRpb25Db25kaXRpb24oYW5ub3RhdGlvblZhbHVlLiROZVswXSwgdmlzaXRlZE5hdmlnYXRpb25QYXRocywgcGF0aFZpc2l0b3IsIGNvbnZlcnRlclJvb3QpLFxuXHRcdFx0XHRwYXJzZUFubm90YXRpb25Db25kaXRpb24oYW5ub3RhdGlvblZhbHVlLiROZVsxXSwgdmlzaXRlZE5hdmlnYXRpb25QYXRocywgcGF0aFZpc2l0b3IsIGNvbnZlcnRlclJvb3QpXG5cdFx0XHQpIGFzIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxQcmltaXRpdmVUeXBlQ2FzdDxUPj47XG5cdFx0Y2FzZSBcIkd0XCI6XG5cdFx0XHRyZXR1cm4gZ3JlYXRlclRoYW4oXG5cdFx0XHRcdHBhcnNlQW5ub3RhdGlvbkNvbmRpdGlvbihhbm5vdGF0aW9uVmFsdWUuJEd0WzBdLCB2aXNpdGVkTmF2aWdhdGlvblBhdGhzLCBwYXRoVmlzaXRvciwgY29udmVydGVyUm9vdCksXG5cdFx0XHRcdHBhcnNlQW5ub3RhdGlvbkNvbmRpdGlvbihhbm5vdGF0aW9uVmFsdWUuJEd0WzFdLCB2aXNpdGVkTmF2aWdhdGlvblBhdGhzLCBwYXRoVmlzaXRvciwgY29udmVydGVyUm9vdClcblx0XHRcdCkgYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFByaW1pdGl2ZVR5cGVDYXN0PFQ+Pjtcblx0XHRjYXNlIFwiR2VcIjpcblx0XHRcdHJldHVybiBncmVhdGVyT3JFcXVhbChcblx0XHRcdFx0cGFyc2VBbm5vdGF0aW9uQ29uZGl0aW9uKGFubm90YXRpb25WYWx1ZS4kR2VbMF0sIHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMsIHBhdGhWaXNpdG9yLCBjb252ZXJ0ZXJSb290KSxcblx0XHRcdFx0cGFyc2VBbm5vdGF0aW9uQ29uZGl0aW9uKGFubm90YXRpb25WYWx1ZS4kR2VbMV0sIHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMsIHBhdGhWaXNpdG9yLCBjb252ZXJ0ZXJSb290KVxuXHRcdFx0KSBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248UHJpbWl0aXZlVHlwZUNhc3Q8VD4+O1xuXHRcdGNhc2UgXCJMdFwiOlxuXHRcdFx0cmV0dXJuIGxlc3NUaGFuKFxuXHRcdFx0XHRwYXJzZUFubm90YXRpb25Db25kaXRpb24oYW5ub3RhdGlvblZhbHVlLiRMdFswXSwgdmlzaXRlZE5hdmlnYXRpb25QYXRocywgcGF0aFZpc2l0b3IsIGNvbnZlcnRlclJvb3QpLFxuXHRcdFx0XHRwYXJzZUFubm90YXRpb25Db25kaXRpb24oYW5ub3RhdGlvblZhbHVlLiRMdFsxXSwgdmlzaXRlZE5hdmlnYXRpb25QYXRocywgcGF0aFZpc2l0b3IsIGNvbnZlcnRlclJvb3QpXG5cdFx0XHQpIGFzIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxQcmltaXRpdmVUeXBlQ2FzdDxUPj47XG5cdFx0Y2FzZSBcIkxlXCI6XG5cdFx0XHRyZXR1cm4gbGVzc09yRXF1YWwoXG5cdFx0XHRcdHBhcnNlQW5ub3RhdGlvbkNvbmRpdGlvbihhbm5vdGF0aW9uVmFsdWUuJExlWzBdLCB2aXNpdGVkTmF2aWdhdGlvblBhdGhzLCBwYXRoVmlzaXRvciwgY29udmVydGVyUm9vdCksXG5cdFx0XHRcdHBhcnNlQW5ub3RhdGlvbkNvbmRpdGlvbihhbm5vdGF0aW9uVmFsdWUuJExlWzFdLCB2aXNpdGVkTmF2aWdhdGlvblBhdGhzLCBwYXRoVmlzaXRvciwgY29udmVydGVyUm9vdClcblx0XHRcdCkgYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFByaW1pdGl2ZVR5cGVDYXN0PFQ+Pjtcblx0XHRjYXNlIFwiT3JcIjpcblx0XHRcdHJldHVybiBvcihcblx0XHRcdFx0Li4uYW5ub3RhdGlvblZhbHVlLiRPci5tYXAoZnVuY3Rpb24gKG9yQ29uZGl0aW9uKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHBhcnNlQW5ub3RhdGlvbkNvbmRpdGlvbjxib29sZWFuPihvckNvbmRpdGlvbiwgdmlzaXRlZE5hdmlnYXRpb25QYXRocywgcGF0aFZpc2l0b3IsIGNvbnZlcnRlclJvb3QpO1xuXHRcdFx0XHR9KVxuXHRcdFx0KSBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248UHJpbWl0aXZlVHlwZUNhc3Q8VD4+O1xuXHRcdGNhc2UgXCJBbmRcIjpcblx0XHRcdHJldHVybiBhbmQoXG5cdFx0XHRcdC4uLmFubm90YXRpb25WYWx1ZS4kQW5kLm1hcChmdW5jdGlvbiAoYW5kQ29uZGl0aW9uKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHBhcnNlQW5ub3RhdGlvbkNvbmRpdGlvbjxib29sZWFuPihhbmRDb25kaXRpb24sIHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMsIHBhdGhWaXNpdG9yLCBjb252ZXJ0ZXJSb290KTtcblx0XHRcdFx0fSlcblx0XHRcdCkgYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFByaW1pdGl2ZVR5cGVDYXN0PFQ+Pjtcblx0XHRjYXNlIFwiSW5cIjpcblx0XHRcdHJldHVybiBjb21wYXJpc29uKFxuXHRcdFx0XHRcIkluXCIsXG5cdFx0XHRcdHBhcnNlQW5ub3RhdGlvbkNvbmRpdGlvbihhbm5vdGF0aW9uVmFsdWUuJEluWzBdLCB2aXNpdGVkTmF2aWdhdGlvblBhdGhzLCBwYXRoVmlzaXRvciwgY29udmVydGVyUm9vdCksXG5cdFx0XHRcdHBhcnNlQW5ub3RhdGlvbkNvbmRpdGlvbihhbm5vdGF0aW9uVmFsdWUuJEluWzFdLCB2aXNpdGVkTmF2aWdhdGlvblBhdGhzLCBwYXRoVmlzaXRvciwgY29udmVydGVyUm9vdClcblx0XHRcdCkgYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFByaW1pdGl2ZVR5cGVDYXN0PFQ+Pjtcblx0XHRjYXNlIFwiSGFzXCI6XG5cdFx0XHRyZXR1cm4gY29tcGFyaXNvbihcblx0XHRcdFx0XCJIYXNcIixcblx0XHRcdFx0cGFyc2VBbm5vdGF0aW9uQ29uZGl0aW9uKGFubm90YXRpb25WYWx1ZS4kSGFzWzBdLCB2aXNpdGVkTmF2aWdhdGlvblBhdGhzLCBwYXRoVmlzaXRvciwgY29udmVydGVyUm9vdCksXG5cdFx0XHRcdHBhcnNlQW5ub3RhdGlvbkNvbmRpdGlvbihhbm5vdGF0aW9uVmFsdWUuJEhhc1sxXSwgdmlzaXRlZE5hdmlnYXRpb25QYXRocywgcGF0aFZpc2l0b3IsIGNvbnZlcnRlclJvb3QpXG5cdFx0XHQpIGFzIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxQcmltaXRpdmVUeXBlQ2FzdDxUPj47XG5cdFx0Y2FzZSBcIkFkZFwiOlxuXHRcdFx0cmV0dXJuIGFkZChcblx0XHRcdFx0cGFyc2VBbm5vdGF0aW9uQ29uZGl0aW9uKGFubm90YXRpb25WYWx1ZS4kQWRkWzBdLCB2aXNpdGVkTmF2aWdhdGlvblBhdGhzLCBwYXRoVmlzaXRvciwgY29udmVydGVyUm9vdCksXG5cdFx0XHRcdHBhcnNlQW5ub3RhdGlvbkNvbmRpdGlvbihhbm5vdGF0aW9uVmFsdWUuJEFkZFsxXSwgdmlzaXRlZE5hdmlnYXRpb25QYXRocywgcGF0aFZpc2l0b3IsIGNvbnZlcnRlclJvb3QpXG5cdFx0XHQpIGFzIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxQcmltaXRpdmVUeXBlQ2FzdDxUPj47XG5cdFx0Y2FzZSBcIlN1YlwiOlxuXHRcdFx0cmV0dXJuIHN1YnRyYWN0KFxuXHRcdFx0XHRwYXJzZUFubm90YXRpb25Db25kaXRpb24oYW5ub3RhdGlvblZhbHVlLiRTdWJbMF0sIHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMsIHBhdGhWaXNpdG9yLCBjb252ZXJ0ZXJSb290KSxcblx0XHRcdFx0cGFyc2VBbm5vdGF0aW9uQ29uZGl0aW9uKGFubm90YXRpb25WYWx1ZS4kU3ViWzFdLCB2aXNpdGVkTmF2aWdhdGlvblBhdGhzLCBwYXRoVmlzaXRvciwgY29udmVydGVyUm9vdClcblx0XHRcdCkgYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFByaW1pdGl2ZVR5cGVDYXN0PFQ+Pjtcblx0XHRjYXNlIFwiTXVsXCI6XG5cdFx0XHRyZXR1cm4gbXVsdGlwbHkoXG5cdFx0XHRcdHBhcnNlQW5ub3RhdGlvbkNvbmRpdGlvbihhbm5vdGF0aW9uVmFsdWUuJE11bFswXSwgdmlzaXRlZE5hdmlnYXRpb25QYXRocywgcGF0aFZpc2l0b3IsIGNvbnZlcnRlclJvb3QpLFxuXHRcdFx0XHRwYXJzZUFubm90YXRpb25Db25kaXRpb24oYW5ub3RhdGlvblZhbHVlLiRNdWxbMV0sIHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMsIHBhdGhWaXNpdG9yLCBjb252ZXJ0ZXJSb290KVxuXHRcdFx0KSBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248UHJpbWl0aXZlVHlwZUNhc3Q8VD4+O1xuXHRcdGNhc2UgXCJEaXZcIjpcblx0XHRcdHJldHVybiBmbG9vcihcblx0XHRcdFx0ZGl2aWRlKFxuXHRcdFx0XHRcdHBhcnNlQW5ub3RhdGlvbkNvbmRpdGlvbihhbm5vdGF0aW9uVmFsdWUuJERpdlswXSwgdmlzaXRlZE5hdmlnYXRpb25QYXRocywgcGF0aFZpc2l0b3IsIGNvbnZlcnRlclJvb3QpLFxuXHRcdFx0XHRcdHBhcnNlQW5ub3RhdGlvbkNvbmRpdGlvbihhbm5vdGF0aW9uVmFsdWUuJERpdlsxXSwgdmlzaXRlZE5hdmlnYXRpb25QYXRocywgcGF0aFZpc2l0b3IsIGNvbnZlcnRlclJvb3QpXG5cdFx0XHRcdClcblx0XHRcdCkgYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFByaW1pdGl2ZVR5cGVDYXN0PFQ+Pjtcblx0XHRjYXNlIFwiRGl2QnlcIjpcblx0XHRcdHJldHVybiBkaXZpZGUoXG5cdFx0XHRcdHBhcnNlQW5ub3RhdGlvbkNvbmRpdGlvbihhbm5vdGF0aW9uVmFsdWUuJERpdkJ5WzBdLCB2aXNpdGVkTmF2aWdhdGlvblBhdGhzLCBwYXRoVmlzaXRvciwgY29udmVydGVyUm9vdCksXG5cdFx0XHRcdHBhcnNlQW5ub3RhdGlvbkNvbmRpdGlvbihhbm5vdGF0aW9uVmFsdWUuJERpdkJ5WzFdLCB2aXNpdGVkTmF2aWdhdGlvblBhdGhzLCBwYXRoVmlzaXRvciwgY29udmVydGVyUm9vdClcblx0XHRcdCkgYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFByaW1pdGl2ZVR5cGVDYXN0PFQ+Pjtcblx0XHRjYXNlIFwiTW9kXCI6XG5cdFx0XHRyZXR1cm4gbW9kdWxvKFxuXHRcdFx0XHRwYXJzZUFubm90YXRpb25Db25kaXRpb24oYW5ub3RhdGlvblZhbHVlLiRNb2RbMF0sIHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMsIHBhdGhWaXNpdG9yLCBjb252ZXJ0ZXJSb290KSxcblx0XHRcdFx0cGFyc2VBbm5vdGF0aW9uQ29uZGl0aW9uKGFubm90YXRpb25WYWx1ZS4kTW9kWzFdLCB2aXNpdGVkTmF2aWdhdGlvblBhdGhzLCBwYXRoVmlzaXRvciwgY29udmVydGVyUm9vdClcblx0XHRcdCkgYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFByaW1pdGl2ZVR5cGVDYXN0PFQ+Pjtcblx0XHRjYXNlIFwiTmVnXCI6XG5cdFx0XHRyZXR1cm4gbmVnYXRlKFxuXHRcdFx0XHRwYXJzZUFubm90YXRpb25Db25kaXRpb24oYW5ub3RhdGlvblZhbHVlLiROZWdbMF0sIHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMsIHBhdGhWaXNpdG9yLCBjb252ZXJ0ZXJSb290KVxuXHRcdFx0KSBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248UHJpbWl0aXZlVHlwZUNhc3Q8VD4+O1xuXHRcdGNhc2UgXCJBcHBseVwiOlxuXHRcdFx0cmV0dXJuIGFubm90YXRpb25BcHBseUV4cHJlc3Npb24oXG5cdFx0XHRcdGFubm90YXRpb25WYWx1ZSBhcyBBcHBseUFubm90YXRpb25FeHByZXNzaW9uPHN0cmluZz4sXG5cdFx0XHRcdHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMsXG5cdFx0XHRcdHBhdGhWaXNpdG9yXG5cdFx0XHQpIGFzIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxQcmltaXRpdmVUeXBlQ2FzdDxUPj47XG5cdFx0Y2FzZSBcIkNvbnN0YW50XCI6XG5cdFx0XHQvLyBOb3QgYSByZWFsIGNhc2UgYnV0IHRoZSB0eXBlIHN5c3RlbSBuZWVkcyBpdFxuXHRcdFx0cmV0dXJuIGNvbnN0YW50KGFubm90YXRpb25WYWx1ZS52YWx1ZSBhcyBQcmltaXRpdmVUeXBlQ2FzdDxUPik7XG5cdH1cblx0cmV0dXJuIHVucmVzb2x2YWJsZUV4cHJlc3Npb247XG59XG5cbi8qKlxuICogUGFyc2UgdGhlIGFubm90YXRpb24gY29uZGl0aW9uIGludG8gYW4gZXhwcmVzc2lvbi5cbiAqIEB0ZW1wbGF0ZSBUIFRoZSB0YXJnZXQgdHlwZVxuICogQHBhcmFtIGFubm90YXRpb25WYWx1ZSBUaGUgY29uZGl0aW9uIG9yIHZhbHVlIGZyb20gdGhlIGFubm90YXRpb25cbiAqIEBwYXJhbSB2aXNpdGVkTmF2aWdhdGlvblBhdGhzIFRoZSBwYXRoIGZyb20gdGhlIHJvb3QgZW50aXR5IHNldFxuICogQHBhcmFtIHBhdGhWaXNpdG9yIEEgZnVuY3Rpb24gdG8gbW9kaWZ5IHRoZSByZXN1bHRpbmcgcGF0aFxuICogQHBhcmFtIGNvbnZlcnRlclJvb3QgVGhlIHJvb3QgY29udmVydGVkIG1ldGFkYXRhXG4gKiBAcmV0dXJucyBBbiBlcXVpdmFsZW50IGV4cHJlc3Npb25cbiAqL1xuZnVuY3Rpb24gcGFyc2VBbm5vdGF0aW9uQ29uZGl0aW9uPFQgZXh0ZW5kcyBQcmltaXRpdmVUeXBlPihcblx0YW5ub3RhdGlvblZhbHVlOiBDb25kaXRpb25hbENoZWNrT3JWYWx1ZSxcblx0dmlzaXRlZE5hdmlnYXRpb25QYXRoczogc3RyaW5nW10gPSBbXSxcblx0cGF0aFZpc2l0b3I/OiBGdW5jdGlvbixcblx0Y29udmVydGVyUm9vdD86IENvbnZlcnRlZE1ldGFkYXRhXG4pOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248VD4ge1xuXHRpZiAoYW5ub3RhdGlvblZhbHVlID09PSBudWxsIHx8IHR5cGVvZiBhbm5vdGF0aW9uVmFsdWUgIT09IFwib2JqZWN0XCIpIHtcblx0XHRyZXR1cm4gY29uc3RhbnQoYW5ub3RhdGlvblZhbHVlIGFzIFQpO1xuXHR9IGVsc2UgaWYgKGFubm90YXRpb25WYWx1ZS5oYXNPd25Qcm9wZXJ0eShcIiRPclwiKSkge1xuXHRcdHJldHVybiBvcihcblx0XHRcdC4uLigoYW5ub3RhdGlvblZhbHVlIGFzIE9yQ29uZGl0aW9uYWxFeHByZXNzaW9uKS4kT3IubWFwKGZ1bmN0aW9uIChvckNvbmRpdGlvbikge1xuXHRcdFx0XHRyZXR1cm4gcGFyc2VBbm5vdGF0aW9uQ29uZGl0aW9uKG9yQ29uZGl0aW9uLCB2aXNpdGVkTmF2aWdhdGlvblBhdGhzLCBwYXRoVmlzaXRvciwgY29udmVydGVyUm9vdCk7XG5cdFx0XHR9KSBhcyB1bmtub3duIGFzIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPltdKVxuXHRcdCkgYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFQ+O1xuXHR9IGVsc2UgaWYgKGFubm90YXRpb25WYWx1ZS5oYXNPd25Qcm9wZXJ0eShcIiRBbmRcIikpIHtcblx0XHRyZXR1cm4gYW5kKFxuXHRcdFx0Li4uKChhbm5vdGF0aW9uVmFsdWUgYXMgQW5kQ29uZGl0aW9uYWxFeHByZXNzaW9uKS4kQW5kLm1hcChmdW5jdGlvbiAoYW5kQ29uZGl0aW9uKSB7XG5cdFx0XHRcdHJldHVybiBwYXJzZUFubm90YXRpb25Db25kaXRpb24oYW5kQ29uZGl0aW9uLCB2aXNpdGVkTmF2aWdhdGlvblBhdGhzLCBwYXRoVmlzaXRvciwgY29udmVydGVyUm9vdCk7XG5cdFx0XHR9KSBhcyB1bmtub3duIGFzIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPltdKVxuXHRcdCkgYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFQ+O1xuXHR9IGVsc2UgaWYgKGFubm90YXRpb25WYWx1ZS5oYXNPd25Qcm9wZXJ0eShcIiROb3RcIikpIHtcblx0XHRyZXR1cm4gbm90KFxuXHRcdFx0cGFyc2VBbm5vdGF0aW9uQ29uZGl0aW9uKChhbm5vdGF0aW9uVmFsdWUgYXMgTm90Q29uZGl0aW9uYWxFeHByZXNzaW9uKS4kTm90LCB2aXNpdGVkTmF2aWdhdGlvblBhdGhzLCBwYXRoVmlzaXRvciwgY29udmVydGVyUm9vdClcblx0XHQpIGFzIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxUPjtcblx0fSBlbHNlIGlmIChhbm5vdGF0aW9uVmFsdWUuaGFzT3duUHJvcGVydHkoXCIkRXFcIikpIHtcblx0XHRyZXR1cm4gZXF1YWwoXG5cdFx0XHRwYXJzZUFubm90YXRpb25Db25kaXRpb24oXG5cdFx0XHRcdChhbm5vdGF0aW9uVmFsdWUgYXMgRXFDb25kaXRpb25hbEV4cHJlc3Npb24pLiRFcVswXSxcblx0XHRcdFx0dmlzaXRlZE5hdmlnYXRpb25QYXRocyxcblx0XHRcdFx0cGF0aFZpc2l0b3IsXG5cdFx0XHRcdGNvbnZlcnRlclJvb3Rcblx0XHRcdCksXG5cdFx0XHRwYXJzZUFubm90YXRpb25Db25kaXRpb24oXG5cdFx0XHRcdChhbm5vdGF0aW9uVmFsdWUgYXMgRXFDb25kaXRpb25hbEV4cHJlc3Npb24pLiRFcVsxXSxcblx0XHRcdFx0dmlzaXRlZE5hdmlnYXRpb25QYXRocyxcblx0XHRcdFx0cGF0aFZpc2l0b3IsXG5cdFx0XHRcdGNvbnZlcnRlclJvb3Rcblx0XHRcdClcblx0XHQpIGFzIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxUPjtcblx0fSBlbHNlIGlmIChhbm5vdGF0aW9uVmFsdWUuaGFzT3duUHJvcGVydHkoXCIkTmVcIikpIHtcblx0XHRyZXR1cm4gbm90RXF1YWwoXG5cdFx0XHRwYXJzZUFubm90YXRpb25Db25kaXRpb24oXG5cdFx0XHRcdChhbm5vdGF0aW9uVmFsdWUgYXMgTmVDb25kaXRpb25hbEV4cHJlc3Npb24pLiROZVswXSxcblx0XHRcdFx0dmlzaXRlZE5hdmlnYXRpb25QYXRocyxcblx0XHRcdFx0cGF0aFZpc2l0b3IsXG5cdFx0XHRcdGNvbnZlcnRlclJvb3Rcblx0XHRcdCksXG5cdFx0XHRwYXJzZUFubm90YXRpb25Db25kaXRpb24oXG5cdFx0XHRcdChhbm5vdGF0aW9uVmFsdWUgYXMgTmVDb25kaXRpb25hbEV4cHJlc3Npb24pLiROZVsxXSxcblx0XHRcdFx0dmlzaXRlZE5hdmlnYXRpb25QYXRocyxcblx0XHRcdFx0cGF0aFZpc2l0b3IsXG5cdFx0XHRcdGNvbnZlcnRlclJvb3Rcblx0XHRcdClcblx0XHQpIGFzIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxUPjtcblx0fSBlbHNlIGlmIChhbm5vdGF0aW9uVmFsdWUuaGFzT3duUHJvcGVydHkoXCIkR3RcIikpIHtcblx0XHRyZXR1cm4gZ3JlYXRlclRoYW4oXG5cdFx0XHRwYXJzZUFubm90YXRpb25Db25kaXRpb24oXG5cdFx0XHRcdChhbm5vdGF0aW9uVmFsdWUgYXMgR3RDb25kaXRpb25hbEV4cHJlc3Npb24pLiRHdFswXSxcblx0XHRcdFx0dmlzaXRlZE5hdmlnYXRpb25QYXRocyxcblx0XHRcdFx0cGF0aFZpc2l0b3IsXG5cdFx0XHRcdGNvbnZlcnRlclJvb3Rcblx0XHRcdCksXG5cdFx0XHRwYXJzZUFubm90YXRpb25Db25kaXRpb24oXG5cdFx0XHRcdChhbm5vdGF0aW9uVmFsdWUgYXMgR3RDb25kaXRpb25hbEV4cHJlc3Npb24pLiRHdFsxXSxcblx0XHRcdFx0dmlzaXRlZE5hdmlnYXRpb25QYXRocyxcblx0XHRcdFx0cGF0aFZpc2l0b3IsXG5cdFx0XHRcdGNvbnZlcnRlclJvb3Rcblx0XHRcdClcblx0XHQpIGFzIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxUPjtcblx0fSBlbHNlIGlmIChhbm5vdGF0aW9uVmFsdWUuaGFzT3duUHJvcGVydHkoXCIkR2VcIikpIHtcblx0XHRyZXR1cm4gZ3JlYXRlck9yRXF1YWwoXG5cdFx0XHRwYXJzZUFubm90YXRpb25Db25kaXRpb24oXG5cdFx0XHRcdChhbm5vdGF0aW9uVmFsdWUgYXMgR2VDb25kaXRpb25hbEV4cHJlc3Npb24pLiRHZVswXSxcblx0XHRcdFx0dmlzaXRlZE5hdmlnYXRpb25QYXRocyxcblx0XHRcdFx0cGF0aFZpc2l0b3IsXG5cdFx0XHRcdGNvbnZlcnRlclJvb3Rcblx0XHRcdCksXG5cdFx0XHRwYXJzZUFubm90YXRpb25Db25kaXRpb24oXG5cdFx0XHRcdChhbm5vdGF0aW9uVmFsdWUgYXMgR2VDb25kaXRpb25hbEV4cHJlc3Npb24pLiRHZVsxXSxcblx0XHRcdFx0dmlzaXRlZE5hdmlnYXRpb25QYXRocyxcblx0XHRcdFx0cGF0aFZpc2l0b3IsXG5cdFx0XHRcdGNvbnZlcnRlclJvb3Rcblx0XHRcdClcblx0XHQpIGFzIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxUPjtcblx0fSBlbHNlIGlmIChhbm5vdGF0aW9uVmFsdWUuaGFzT3duUHJvcGVydHkoXCIkTHRcIikpIHtcblx0XHRyZXR1cm4gbGVzc1RoYW4oXG5cdFx0XHRwYXJzZUFubm90YXRpb25Db25kaXRpb24oXG5cdFx0XHRcdChhbm5vdGF0aW9uVmFsdWUgYXMgTHRDb25kaXRpb25hbEV4cHJlc3Npb24pLiRMdFswXSxcblx0XHRcdFx0dmlzaXRlZE5hdmlnYXRpb25QYXRocyxcblx0XHRcdFx0cGF0aFZpc2l0b3IsXG5cdFx0XHRcdGNvbnZlcnRlclJvb3Rcblx0XHRcdCksXG5cdFx0XHRwYXJzZUFubm90YXRpb25Db25kaXRpb24oXG5cdFx0XHRcdChhbm5vdGF0aW9uVmFsdWUgYXMgTHRDb25kaXRpb25hbEV4cHJlc3Npb24pLiRMdFsxXSxcblx0XHRcdFx0dmlzaXRlZE5hdmlnYXRpb25QYXRocyxcblx0XHRcdFx0cGF0aFZpc2l0b3IsXG5cdFx0XHRcdGNvbnZlcnRlclJvb3Rcblx0XHRcdClcblx0XHQpIGFzIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxUPjtcblx0fSBlbHNlIGlmIChhbm5vdGF0aW9uVmFsdWUuaGFzT3duUHJvcGVydHkoXCIkTGVcIikpIHtcblx0XHRyZXR1cm4gbGVzc09yRXF1YWwoXG5cdFx0XHRwYXJzZUFubm90YXRpb25Db25kaXRpb24oXG5cdFx0XHRcdChhbm5vdGF0aW9uVmFsdWUgYXMgTGVDb25kaXRpb25hbEV4cHJlc3Npb24pLiRMZVswXSxcblx0XHRcdFx0dmlzaXRlZE5hdmlnYXRpb25QYXRocyxcblx0XHRcdFx0cGF0aFZpc2l0b3IsXG5cdFx0XHRcdGNvbnZlcnRlclJvb3Rcblx0XHRcdCksXG5cdFx0XHRwYXJzZUFubm90YXRpb25Db25kaXRpb24oXG5cdFx0XHRcdChhbm5vdGF0aW9uVmFsdWUgYXMgTGVDb25kaXRpb25hbEV4cHJlc3Npb24pLiRMZVsxXSxcblx0XHRcdFx0dmlzaXRlZE5hdmlnYXRpb25QYXRocyxcblx0XHRcdFx0cGF0aFZpc2l0b3IsXG5cdFx0XHRcdGNvbnZlcnRlclJvb3Rcblx0XHRcdClcblx0XHQpIGFzIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxUPjtcblx0fSBlbHNlIGlmIChhbm5vdGF0aW9uVmFsdWUuaGFzT3duUHJvcGVydHkoXCIkUGF0aFwiKSkge1xuXHRcdHJldHVybiBwYXRoSW5Nb2RlbCgoYW5ub3RhdGlvblZhbHVlIGFzIFBhdGhDb25kaXRpb25FeHByZXNzaW9uPFQ+KS4kUGF0aCwgdW5kZWZpbmVkLCB2aXNpdGVkTmF2aWdhdGlvblBhdGhzLCBwYXRoVmlzaXRvcik7XG5cdH0gZWxzZSBpZiAoYW5ub3RhdGlvblZhbHVlLmhhc093blByb3BlcnR5KFwiJEFwcGx5XCIpKSB7XG5cdFx0cmV0dXJuIGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihcblx0XHRcdHtcblx0XHRcdFx0dHlwZTogXCJBcHBseVwiLFxuXHRcdFx0XHQkRnVuY3Rpb246IChhbm5vdGF0aW9uVmFsdWUgYXMgeyAkRnVuY3Rpb24/OiBzdHJpbmcgfSkuJEZ1bmN0aW9uLFxuXHRcdFx0XHQkQXBwbHk6IChhbm5vdGF0aW9uVmFsdWUgYXMgeyAkQXBwbHk/OiB1bmtub3duIH0pLiRBcHBseVxuXHRcdFx0fSBhcyBBcHBseUFubm90YXRpb25FeHByZXNzaW9uPFQ+LFxuXHRcdFx0dmlzaXRlZE5hdmlnYXRpb25QYXRocyxcblx0XHRcdHVuZGVmaW5lZCxcblx0XHRcdHBhdGhWaXNpdG9yXG5cdFx0KSBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248VD47XG5cdH0gZWxzZSBpZiAoYW5ub3RhdGlvblZhbHVlLmhhc093blByb3BlcnR5KFwiJElmXCIpKSB7XG5cdFx0cmV0dXJuIGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihcblx0XHRcdHtcblx0XHRcdFx0dHlwZTogXCJJZlwiLFxuXHRcdFx0XHQkSWY6IChhbm5vdGF0aW9uVmFsdWUgYXMgeyAkSWY/OiB1bmtub3duIH0pLiRJZlxuXHRcdFx0fSBhcyBJZkFubm90YXRpb25FeHByZXNzaW9uPFQ+LFxuXHRcdFx0dmlzaXRlZE5hdmlnYXRpb25QYXRocyxcblx0XHRcdHVuZGVmaW5lZCxcblx0XHRcdHBhdGhWaXNpdG9yXG5cdFx0KSBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248VD47XG5cdH0gZWxzZSBpZiAoYW5ub3RhdGlvblZhbHVlLmhhc093blByb3BlcnR5KFwiJEVudW1NZW1iZXJcIikpIHtcblx0XHRyZXR1cm4gY29uc3RhbnQocmVzb2x2ZUVudW1WYWx1ZSgoYW5ub3RhdGlvblZhbHVlIGFzIHsgJEVudW1NZW1iZXI/OiBzdHJpbmcgfSkuJEVudW1NZW1iZXIsIGNvbnZlcnRlclJvb3QpIGFzIFQpO1xuXHR9IGVsc2UgaWYgKGFubm90YXRpb25WYWx1ZS5oYXNPd25Qcm9wZXJ0eShcIiRJblwiKSkge1xuXHRcdHJldHVybiBjb21wYXJpc29uKFxuXHRcdFx0XCJJblwiLFxuXHRcdFx0cGFyc2VBbm5vdGF0aW9uQ29uZGl0aW9uKFxuXHRcdFx0XHQoYW5ub3RhdGlvblZhbHVlIGFzIEluQ29uZGl0aW9uYWxFeHByZXNzaW9uKS4kSW5bMF0sXG5cdFx0XHRcdHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMsXG5cdFx0XHRcdHBhdGhWaXNpdG9yLFxuXHRcdFx0XHRjb252ZXJ0ZXJSb290XG5cdFx0XHQpLFxuXHRcdFx0cGFyc2VBbm5vdGF0aW9uQ29uZGl0aW9uKFxuXHRcdFx0XHQoYW5ub3RhdGlvblZhbHVlIGFzIEluQ29uZGl0aW9uYWxFeHByZXNzaW9uKS4kSW5bMV0sXG5cdFx0XHRcdHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMsXG5cdFx0XHRcdHBhdGhWaXNpdG9yLFxuXHRcdFx0XHRjb252ZXJ0ZXJSb290XG5cdFx0XHQpXG5cdFx0KSBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248VD47XG5cdH0gZWxzZSBpZiAoYW5ub3RhdGlvblZhbHVlLmhhc093blByb3BlcnR5KFwiJEhhc1wiKSkge1xuXHRcdHJldHVybiBjb21wYXJpc29uKFxuXHRcdFx0XCJIYXNcIixcblx0XHRcdHBhcnNlQW5ub3RhdGlvbkNvbmRpdGlvbihcblx0XHRcdFx0KGFubm90YXRpb25WYWx1ZSBhcyBIYXNDb25kaXRpb25hbEV4cHJlc3Npb24pLiRIYXNbMF0sXG5cdFx0XHRcdHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMsXG5cdFx0XHRcdHBhdGhWaXNpdG9yLFxuXHRcdFx0XHRjb252ZXJ0ZXJSb290XG5cdFx0XHQpLFxuXHRcdFx0cGFyc2VBbm5vdGF0aW9uQ29uZGl0aW9uKFxuXHRcdFx0XHQoYW5ub3RhdGlvblZhbHVlIGFzIEhhc0NvbmRpdGlvbmFsRXhwcmVzc2lvbikuJEhhc1sxXSxcblx0XHRcdFx0dmlzaXRlZE5hdmlnYXRpb25QYXRocyxcblx0XHRcdFx0cGF0aFZpc2l0b3IsXG5cdFx0XHRcdGNvbnZlcnRlclJvb3Rcblx0XHRcdClcblx0XHQpIGFzIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxUPjtcblx0fSBlbHNlIGlmIChhbm5vdGF0aW9uVmFsdWUuaGFzT3duUHJvcGVydHkoXCIkQWRkXCIpKSB7XG5cdFx0cmV0dXJuIGFkZChcblx0XHRcdHBhcnNlQW5ub3RhdGlvbkNvbmRpdGlvbihcblx0XHRcdFx0KGFubm90YXRpb25WYWx1ZSBhcyBBZGRDb25kaXRpb25hbEV4cHJlc3Npb24pLiRBZGRbMF0sXG5cdFx0XHRcdHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMsXG5cdFx0XHRcdHBhdGhWaXNpdG9yLFxuXHRcdFx0XHRjb252ZXJ0ZXJSb290XG5cdFx0XHQpLFxuXHRcdFx0cGFyc2VBbm5vdGF0aW9uQ29uZGl0aW9uKFxuXHRcdFx0XHQoYW5ub3RhdGlvblZhbHVlIGFzIEFkZENvbmRpdGlvbmFsRXhwcmVzc2lvbikuJEFkZFsxXSxcblx0XHRcdFx0dmlzaXRlZE5hdmlnYXRpb25QYXRocyxcblx0XHRcdFx0cGF0aFZpc2l0b3IsXG5cdFx0XHRcdGNvbnZlcnRlclJvb3Rcblx0XHRcdClcblx0XHQpIGFzIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxUPjtcblx0fSBlbHNlIGlmIChhbm5vdGF0aW9uVmFsdWUuaGFzT3duUHJvcGVydHkoXCIkU3ViXCIpKSB7XG5cdFx0cmV0dXJuIHN1YnRyYWN0KFxuXHRcdFx0cGFyc2VBbm5vdGF0aW9uQ29uZGl0aW9uKFxuXHRcdFx0XHQoYW5ub3RhdGlvblZhbHVlIGFzIFN1YkNvbmRpdGlvbmFsRXhwcmVzc2lvbikuJFN1YlswXSxcblx0XHRcdFx0dmlzaXRlZE5hdmlnYXRpb25QYXRocyxcblx0XHRcdFx0cGF0aFZpc2l0b3IsXG5cdFx0XHRcdGNvbnZlcnRlclJvb3Rcblx0XHRcdCksXG5cdFx0XHRwYXJzZUFubm90YXRpb25Db25kaXRpb24oXG5cdFx0XHRcdChhbm5vdGF0aW9uVmFsdWUgYXMgU3ViQ29uZGl0aW9uYWxFeHByZXNzaW9uKS4kU3ViWzFdLFxuXHRcdFx0XHR2aXNpdGVkTmF2aWdhdGlvblBhdGhzLFxuXHRcdFx0XHRwYXRoVmlzaXRvcixcblx0XHRcdFx0Y29udmVydGVyUm9vdFxuXHRcdFx0KVxuXHRcdCkgYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFQ+O1xuXHR9IGVsc2UgaWYgKGFubm90YXRpb25WYWx1ZS5oYXNPd25Qcm9wZXJ0eShcIiRNdWxcIikpIHtcblx0XHRyZXR1cm4gbXVsdGlwbHkoXG5cdFx0XHRwYXJzZUFubm90YXRpb25Db25kaXRpb24oXG5cdFx0XHRcdChhbm5vdGF0aW9uVmFsdWUgYXMgTXVsQ29uZGl0aW9uYWxFeHByZXNzaW9uKS4kTXVsWzBdLFxuXHRcdFx0XHR2aXNpdGVkTmF2aWdhdGlvblBhdGhzLFxuXHRcdFx0XHRwYXRoVmlzaXRvcixcblx0XHRcdFx0Y29udmVydGVyUm9vdFxuXHRcdFx0KSxcblx0XHRcdHBhcnNlQW5ub3RhdGlvbkNvbmRpdGlvbihcblx0XHRcdFx0KGFubm90YXRpb25WYWx1ZSBhcyBNdWxDb25kaXRpb25hbEV4cHJlc3Npb24pLiRNdWxbMV0sXG5cdFx0XHRcdHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMsXG5cdFx0XHRcdHBhdGhWaXNpdG9yLFxuXHRcdFx0XHRjb252ZXJ0ZXJSb290XG5cdFx0XHQpXG5cdFx0KSBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248VD47XG5cdH0gZWxzZSBpZiAoYW5ub3RhdGlvblZhbHVlLmhhc093blByb3BlcnR5KFwiJERpdlwiKSkge1xuXHRcdHJldHVybiBmbG9vcihcblx0XHRcdGRpdmlkZShcblx0XHRcdFx0cGFyc2VBbm5vdGF0aW9uQ29uZGl0aW9uKFxuXHRcdFx0XHRcdChhbm5vdGF0aW9uVmFsdWUgYXMgRGl2Q29uZGl0aW9uYWxFeHByZXNzaW9uKS4kRGl2WzBdLFxuXHRcdFx0XHRcdHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMsXG5cdFx0XHRcdFx0cGF0aFZpc2l0b3IsXG5cdFx0XHRcdFx0Y29udmVydGVyUm9vdFxuXHRcdFx0XHQpLFxuXHRcdFx0XHRwYXJzZUFubm90YXRpb25Db25kaXRpb24oXG5cdFx0XHRcdFx0KGFubm90YXRpb25WYWx1ZSBhcyBEaXZDb25kaXRpb25hbEV4cHJlc3Npb24pLiREaXZbMV0sXG5cdFx0XHRcdFx0dmlzaXRlZE5hdmlnYXRpb25QYXRocyxcblx0XHRcdFx0XHRwYXRoVmlzaXRvcixcblx0XHRcdFx0XHRjb252ZXJ0ZXJSb290XG5cdFx0XHRcdClcblx0XHRcdClcblx0XHQpIGFzIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxUPjtcblx0fSBlbHNlIGlmIChhbm5vdGF0aW9uVmFsdWUuaGFzT3duUHJvcGVydHkoXCIkRGl2QnlcIikpIHtcblx0XHRyZXR1cm4gZGl2aWRlKFxuXHRcdFx0cGFyc2VBbm5vdGF0aW9uQ29uZGl0aW9uKFxuXHRcdFx0XHQoYW5ub3RhdGlvblZhbHVlIGFzIERpdkJ5Q29uZGl0aW9uYWxFeHByZXNzaW9uKS4kRGl2QnlbMF0sXG5cdFx0XHRcdHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMsXG5cdFx0XHRcdHBhdGhWaXNpdG9yLFxuXHRcdFx0XHRjb252ZXJ0ZXJSb290XG5cdFx0XHQpLFxuXHRcdFx0cGFyc2VBbm5vdGF0aW9uQ29uZGl0aW9uKFxuXHRcdFx0XHQoYW5ub3RhdGlvblZhbHVlIGFzIERpdkJ5Q29uZGl0aW9uYWxFeHByZXNzaW9uKS4kRGl2QnlbMV0sXG5cdFx0XHRcdHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMsXG5cdFx0XHRcdHBhdGhWaXNpdG9yLFxuXHRcdFx0XHRjb252ZXJ0ZXJSb290XG5cdFx0XHQpXG5cdFx0KSBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248VD47XG5cdH0gZWxzZSBpZiAoYW5ub3RhdGlvblZhbHVlLmhhc093blByb3BlcnR5KFwiJE1vZFwiKSkge1xuXHRcdHJldHVybiBtb2R1bG8oXG5cdFx0XHRwYXJzZUFubm90YXRpb25Db25kaXRpb24oXG5cdFx0XHRcdChhbm5vdGF0aW9uVmFsdWUgYXMgTW9kQ29uZGl0aW9uYWxFeHByZXNzaW9uKS4kTW9kWzBdLFxuXHRcdFx0XHR2aXNpdGVkTmF2aWdhdGlvblBhdGhzLFxuXHRcdFx0XHRwYXRoVmlzaXRvcixcblx0XHRcdFx0Y29udmVydGVyUm9vdFxuXHRcdFx0KSxcblx0XHRcdHBhcnNlQW5ub3RhdGlvbkNvbmRpdGlvbihcblx0XHRcdFx0KGFubm90YXRpb25WYWx1ZSBhcyBNb2RDb25kaXRpb25hbEV4cHJlc3Npb24pLiRNb2RbMV0sXG5cdFx0XHRcdHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMsXG5cdFx0XHRcdHBhdGhWaXNpdG9yLFxuXHRcdFx0XHRjb252ZXJ0ZXJSb290XG5cdFx0XHQpXG5cdFx0KSBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248VD47XG5cdH0gZWxzZSBpZiAoYW5ub3RhdGlvblZhbHVlLmhhc093blByb3BlcnR5KFwiJE5lZ1wiKSkge1xuXHRcdHJldHVybiBuZWdhdGUoXG5cdFx0XHRwYXJzZUFubm90YXRpb25Db25kaXRpb24oKGFubm90YXRpb25WYWx1ZSBhcyBOZWdDb25kaXRpb25hbEV4cHJlc3Npb24pLiROZWcsIHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMsIHBhdGhWaXNpdG9yLCBjb252ZXJ0ZXJSb290KVxuXHRcdCkgYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFQ+O1xuXHR9XG5cdHJldHVybiBjb25zdGFudChhbm5vdGF0aW9uVmFsdWUgYXMgVCk7XG59XG5cbi8qKlxuICogUHJvY2VzcyB0aGUge0lmQW5ub3RhdGlvbkV4cHJlc3Npb25WYWx1ZX0gaW50byBhbiBleHByZXNzaW9uLlxuICogQHRlbXBsYXRlIFQgVGhlIHRhcmdldCB0eXBlXG4gKiBAcGFyYW0gYW5ub3RhdGlvblZhbHVlIEFuIElmIGV4cHJlc3Npb24gcmV0dXJuaW5nIHRoZSB0eXBlIFRcbiAqIEBwYXJhbSB2aXNpdGVkTmF2aWdhdGlvblBhdGhzIFRoZSBwYXRoIGZyb20gdGhlIHJvb3QgZW50aXR5IHNldFxuICogQHBhcmFtIHBhdGhWaXNpdG9yIEEgZnVuY3Rpb24gdG8gbW9kaWZ5IHRoZSByZXN1bHRpbmcgcGF0aFxuICogQHBhcmFtIGNvbnZlcnRlclJvb3QgVGhlIHJvb3QgY29udmVydGVkIG1ldGFkYXRhXG4gKiBAcmV0dXJucyBUaGUgZXF1aXZhbGVudCBpZkVsc2UgZXhwcmVzc2lvblxuICovXG5leHBvcnQgZnVuY3Rpb24gYW5ub3RhdGlvbklmRXhwcmVzc2lvbjxUIGV4dGVuZHMgUHJpbWl0aXZlVHlwZT4oXG5cdGFubm90YXRpb25WYWx1ZTogSWZBbm5vdGF0aW9uRXhwcmVzc2lvblZhbHVlPFQ+LFxuXHR2aXNpdGVkTmF2aWdhdGlvblBhdGhzOiBzdHJpbmdbXSA9IFtdLFxuXHRwYXRoVmlzaXRvcj86IEZ1bmN0aW9uLFxuXHRjb252ZXJ0ZXJSb290PzogQ29udmVydGVkTWV0YWRhdGFcbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxUPiB7XG5cdHJldHVybiBpZkVsc2UoXG5cdFx0cGFyc2VBbm5vdGF0aW9uQ29uZGl0aW9uKGFubm90YXRpb25WYWx1ZVswXSwgdmlzaXRlZE5hdmlnYXRpb25QYXRocywgcGF0aFZpc2l0b3IsIGNvbnZlcnRlclJvb3QpLFxuXHRcdHBhcnNlQW5ub3RhdGlvbkNvbmRpdGlvbihhbm5vdGF0aW9uVmFsdWVbMV0gYXMgQ29uZGl0aW9uYWxDaGVja09yVmFsdWUsIHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMsIHBhdGhWaXNpdG9yLCBjb252ZXJ0ZXJSb290KSxcblx0XHRwYXJzZUFubm90YXRpb25Db25kaXRpb24oYW5ub3RhdGlvblZhbHVlWzJdIGFzIENvbmRpdGlvbmFsQ2hlY2tPclZhbHVlLCB2aXNpdGVkTmF2aWdhdGlvblBhdGhzLCBwYXRoVmlzaXRvciwgY29udmVydGVyUm9vdClcblx0KTtcbn1cbi8vIFRoaXMgdHlwZSBpcyBub3QgcmVjdXJzaXZlbHkgdHJhbnNmb3JtZWQgZnJvbSB0aGUgbWV0YW1vZGVsIGNvbnRlbnQsIGFzIHN1Y2ggd2UgaGF2ZSBzb21lIHVnbHkgdGhpbmdzIHRoZXJlXG50eXBlIFN1YkFwcGx5RXhwcmVzc2lvbkZyb21NZXRhbW9kZWwgPSBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbmZ1bmN0aW9uIGNvbnZlcnRTdWJBcHBseVBhcmFtZXRlcnMoYXBwbHlQYXJhbTogU3ViQXBwbHlFeHByZXNzaW9uRnJvbU1ldGFtb2RlbCk6IFN1YkFwcGx5RXhwcmVzc2lvbkZyb21NZXRhbW9kZWwgfCBQcmltaXRpdmVUeXBlIHtcblx0bGV0IGFwcGx5UGFyYW1Db252ZXJ0ZWQgPSBhcHBseVBhcmFtO1xuXHRpZiAoYXBwbHlQYXJhbS5oYXNPd25Qcm9wZXJ0eShcIiRQYXRoXCIpKSB7XG5cdFx0YXBwbHlQYXJhbUNvbnZlcnRlZCA9IHtcblx0XHRcdHR5cGU6IFwiUGF0aFwiLFxuXHRcdFx0cGF0aDogYXBwbHlQYXJhbS4kUGF0aFxuXHRcdH0gYXMgUGF0aEFubm90YXRpb25FeHByZXNzaW9uPHN0cmluZz47XG5cdH0gZWxzZSBpZiAoYXBwbHlQYXJhbS5oYXNPd25Qcm9wZXJ0eShcIiRJZlwiKSkge1xuXHRcdGFwcGx5UGFyYW1Db252ZXJ0ZWQgPSB7XG5cdFx0XHR0eXBlOiBcIklmXCIsXG5cdFx0XHQkSWY6IGFwcGx5UGFyYW0uJElmXG5cdFx0fSBhcyBJZkFubm90YXRpb25FeHByZXNzaW9uPHN0cmluZz47XG5cdH0gZWxzZSBpZiAoYXBwbHlQYXJhbS5oYXNPd25Qcm9wZXJ0eShcIiRBcHBseVwiKSkge1xuXHRcdGFwcGx5UGFyYW1Db252ZXJ0ZWQgPSB7XG5cdFx0XHR0eXBlOiBcIkFwcGx5XCIsXG5cdFx0XHQkRnVuY3Rpb246IGFwcGx5UGFyYW0uJEZ1bmN0aW9uLFxuXHRcdFx0JEFwcGx5OiBhcHBseVBhcmFtLiRBcHBseVxuXHRcdH0gYXMgQXBwbHlBbm5vdGF0aW9uRXhwcmVzc2lvbjxzdHJpbmc+O1xuXHR9XG5cdHJldHVybiBhcHBseVBhcmFtQ29udmVydGVkO1xufVxuXG50eXBlIE9EYXRhRnVuY3Rpb24gPSBcIm9kYXRhLmNvbmNhdFwiIHwgXCJvZGF0YS5maWxsVXJpVGVtcGxhdGVcIiB8IFwib2RhdGEudXJpRW5jb2RlXCI7XG5leHBvcnQgZnVuY3Rpb24gYW5ub3RhdGlvbkFwcGx5RXhwcmVzc2lvbihcblx0YXBwbHlFeHByZXNzaW9uOiBBcHBseUFubm90YXRpb25FeHByZXNzaW9uPHN0cmluZz4sXG5cdHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHM6IHN0cmluZ1tdID0gW10sXG5cdHBhdGhWaXNpdG9yPzogRnVuY3Rpb25cbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxzdHJpbmc+IHtcblx0c3dpdGNoIChhcHBseUV4cHJlc3Npb24uJEZ1bmN0aW9uIGFzIE9EYXRhRnVuY3Rpb24pIHtcblx0XHRjYXNlIFwib2RhdGEuY29uY2F0XCI6XG5cdFx0XHRyZXR1cm4gY29uY2F0KFxuXHRcdFx0XHQuLi5hcHBseUV4cHJlc3Npb24uJEFwcGx5Lm1hcCgoYXBwbHlQYXJhbSkgPT4ge1xuXHRcdFx0XHRcdHJldHVybiBnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24oXG5cdFx0XHRcdFx0XHRjb252ZXJ0U3ViQXBwbHlQYXJhbWV0ZXJzKGFwcGx5UGFyYW0pIGFzIFByb3BlcnR5QW5ub3RhdGlvblZhbHVlPHN0cmluZz4sXG5cdFx0XHRcdFx0XHR2aXNpdGVkTmF2aWdhdGlvblBhdGhzLFxuXHRcdFx0XHRcdFx0dW5kZWZpbmVkLFxuXHRcdFx0XHRcdFx0cGF0aFZpc2l0b3Jcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9KVxuXHRcdFx0KTtcblx0XHRjYXNlIFwib2RhdGEudXJpRW5jb2RlXCI6XG5cdFx0XHRjb25zdCBwYXJhbWV0ZXIgPSBnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24oXG5cdFx0XHRcdGNvbnZlcnRTdWJBcHBseVBhcmFtZXRlcnMoXG5cdFx0XHRcdFx0YXBwbHlFeHByZXNzaW9uLiRBcHBseVswXSBhcyB1bmtub3duIGFzIFN1YkFwcGx5RXhwcmVzc2lvbkZyb21NZXRhbW9kZWxcblx0XHRcdFx0KSBhcyBQcm9wZXJ0eUFubm90YXRpb25WYWx1ZTxzdHJpbmc+LFxuXHRcdFx0XHR2aXNpdGVkTmF2aWdhdGlvblBhdGhzLFxuXHRcdFx0XHR1bmRlZmluZWQsXG5cdFx0XHRcdHBhdGhWaXNpdG9yXG5cdFx0XHQpO1xuXHRcdFx0Ly8gVGhlIHNlY29uZCBwYXJhbWV0ZXIgZm9yIHVyaUVuY29kZSBpcyBhbHdheXMgYSBzdHJpbmcgc2luY2UgdGhlIHRhcmdldCBldmFsdWF0aW9uIGlzIGFnYWluc3QgYSBmb3JtYXRWYWx1ZSBjYWxsIGluIE9EYXRhVXRpbHMgd2hpY2ggZXhwZWN0IHRoZSB0YXJnZXQgdHlwZSBhcyBzZWNvbmQgcGFyYW1ldGVyXG5cdFx0XHRyZXR1cm4gZm4oXCJvZGF0YS51cmlFbmNvZGVcIiwgW3BhcmFtZXRlciwgXCJFZG0uU3RyaW5nXCJdLCB1bmRlZmluZWQsIHRydWUpO1xuXHRcdGNhc2UgXCJvZGF0YS5maWxsVXJpVGVtcGxhdGVcIjpcblx0XHRcdGNvbnN0IHRlbXBsYXRlID0gYXBwbHlFeHByZXNzaW9uLiRBcHBseVswXTtcblx0XHRcdGNvbnN0IHRlbXBsYXRlUGFyYW1zID0gYXBwbHlFeHByZXNzaW9uLiRBcHBseS5zbGljZSgxKSBhcyB1bmtub3duIGFzIFN1YkFwcGx5RXhwcmVzc2lvbkZyb21NZXRhbW9kZWxbXTtcblx0XHRcdGNvbnN0IHRhcmdldE9iamVjdDogUmVjb3JkPHN0cmluZywgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHVua25vd24+PiA9IHt9O1xuXHRcdFx0dGVtcGxhdGVQYXJhbXMuZm9yRWFjaCgoYXBwbHlQYXJhbSkgPT4ge1xuXHRcdFx0XHR0YXJnZXRPYmplY3RbYXBwbHlQYXJhbS4kTmFtZSBhcyBzdHJpbmddID0gZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKFxuXHRcdFx0XHRcdGNvbnZlcnRTdWJBcHBseVBhcmFtZXRlcnMoXG5cdFx0XHRcdFx0XHRhcHBseVBhcmFtLiRMYWJlbGVkRWxlbWVudCBhcyBTdWJBcHBseUV4cHJlc3Npb25Gcm9tTWV0YW1vZGVsXG5cdFx0XHRcdFx0KSBhcyBQcm9wZXJ0eUFubm90YXRpb25WYWx1ZTxzdHJpbmc+LFxuXHRcdFx0XHRcdHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMsXG5cdFx0XHRcdFx0dW5kZWZpbmVkLFxuXHRcdFx0XHRcdHBhdGhWaXNpdG9yXG5cdFx0XHRcdCk7XG5cdFx0XHR9KTtcblx0XHRcdHJldHVybiBmbihcIm9kYXRhLmZpbGxVcmlUZW1wbGF0ZVwiLCBbdGVtcGxhdGUsIHRhcmdldE9iamVjdF0sIHVuZGVmaW5lZCwgdHJ1ZSk7XG5cdH1cblx0cmV0dXJuIHVucmVzb2x2YWJsZUV4cHJlc3Npb247XG59XG5cbi8qKlxuICogR2VuZXJpYyBoZWxwZXIgZm9yIHRoZSBjb21wYXJpc29uIG9wZXJhdGlvbnMgKGVxdWFsLCBub3RFcXVhbCwgLi4uKS5cbiAqIEB0ZW1wbGF0ZSBUIFRoZSB0YXJnZXQgdHlwZVxuICogQHBhcmFtIG9wZXJhdG9yIFRoZSBvcGVyYXRvciB0byBhcHBseVxuICogQHBhcmFtIGxlZnRPcGVyYW5kIFRoZSBvcGVyYW5kIG9uIHRoZSBsZWZ0IHNpZGUgb2YgdGhlIG9wZXJhdG9yXG4gKiBAcGFyYW0gcmlnaHRPcGVyYW5kIFRoZSBvcGVyYW5kIG9uIHRoZSByaWdodCBzaWRlIG9mIHRoZSBvcGVyYXRvclxuICogQHJldHVybnMgQW4gZXhwcmVzc2lvbiByZXByZXNlbnRpbmcgdGhlIGNvbXBhcmlzb25cbiAqL1xuZnVuY3Rpb24gY29tcGFyaXNvbjxUIGV4dGVuZHMgUHJpbWl0aXZlVHlwZT4oXG5cdG9wZXJhdG9yOiBDb21wYXJpc29uT3BlcmF0b3IsXG5cdGxlZnRPcGVyYW5kOiBFeHByZXNzaW9uT3JQcmltaXRpdmU8VD4sXG5cdHJpZ2h0T3BlcmFuZDogRXhwcmVzc2lvbk9yUHJpbWl0aXZlPFQ+XG4pOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4ge1xuXHRjb25zdCBsZWZ0RXhwcmVzc2lvbiA9IHdyYXBQcmltaXRpdmUobGVmdE9wZXJhbmQpO1xuXHRjb25zdCByaWdodEV4cHJlc3Npb24gPSB3cmFwUHJpbWl0aXZlKHJpZ2h0T3BlcmFuZCk7XG5cdGlmIChoYXNVbnJlc29sdmFibGVFeHByZXNzaW9uKGxlZnRFeHByZXNzaW9uLCByaWdodEV4cHJlc3Npb24pKSB7XG5cdFx0cmV0dXJuIHVucmVzb2x2YWJsZUV4cHJlc3Npb247XG5cdH1cblx0aWYgKGlzQ29uc3RhbnQobGVmdEV4cHJlc3Npb24pICYmIGlzQ29uc3RhbnQocmlnaHRFeHByZXNzaW9uKSkge1xuXHRcdHN3aXRjaCAob3BlcmF0b3IpIHtcblx0XHRcdGNhc2UgXCIhPT1cIjpcblx0XHRcdFx0cmV0dXJuIGNvbnN0YW50KGxlZnRFeHByZXNzaW9uLnZhbHVlICE9PSByaWdodEV4cHJlc3Npb24udmFsdWUpO1xuXHRcdFx0Y2FzZSBcIj09PVwiOlxuXHRcdFx0XHRyZXR1cm4gY29uc3RhbnQobGVmdEV4cHJlc3Npb24udmFsdWUgPT09IHJpZ2h0RXhwcmVzc2lvbi52YWx1ZSk7XG5cdFx0XHRjYXNlIFwiPFwiOlxuXHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0bGVmdEV4cHJlc3Npb24udmFsdWUgPT09IG51bGwgfHxcblx0XHRcdFx0XHRsZWZ0RXhwcmVzc2lvbi52YWx1ZSA9PT0gdW5kZWZpbmVkIHx8XG5cdFx0XHRcdFx0cmlnaHRFeHByZXNzaW9uLnZhbHVlID09PSBudWxsIHx8XG5cdFx0XHRcdFx0cmlnaHRFeHByZXNzaW9uLnZhbHVlID09PSB1bmRlZmluZWRcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0cmV0dXJuIGNvbnN0YW50KGZhbHNlKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gY29uc3RhbnQobGVmdEV4cHJlc3Npb24udmFsdWUgPCByaWdodEV4cHJlc3Npb24udmFsdWUpO1xuXHRcdFx0Y2FzZSBcIjw9XCI6XG5cdFx0XHRcdGlmIChcblx0XHRcdFx0XHRsZWZ0RXhwcmVzc2lvbi52YWx1ZSA9PT0gbnVsbCB8fFxuXHRcdFx0XHRcdGxlZnRFeHByZXNzaW9uLnZhbHVlID09PSB1bmRlZmluZWQgfHxcblx0XHRcdFx0XHRyaWdodEV4cHJlc3Npb24udmFsdWUgPT09IG51bGwgfHxcblx0XHRcdFx0XHRyaWdodEV4cHJlc3Npb24udmFsdWUgPT09IHVuZGVmaW5lZFxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHRyZXR1cm4gY29uc3RhbnQoZmFsc2UpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBjb25zdGFudChsZWZ0RXhwcmVzc2lvbi52YWx1ZSA8PSByaWdodEV4cHJlc3Npb24udmFsdWUpO1xuXHRcdFx0Y2FzZSBcIj5cIjpcblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdGxlZnRFeHByZXNzaW9uLnZhbHVlID09PSBudWxsIHx8XG5cdFx0XHRcdFx0bGVmdEV4cHJlc3Npb24udmFsdWUgPT09IHVuZGVmaW5lZCB8fFxuXHRcdFx0XHRcdHJpZ2h0RXhwcmVzc2lvbi52YWx1ZSA9PT0gbnVsbCB8fFxuXHRcdFx0XHRcdHJpZ2h0RXhwcmVzc2lvbi52YWx1ZSA9PT0gdW5kZWZpbmVkXG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdHJldHVybiBjb25zdGFudChmYWxzZSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIGNvbnN0YW50KGxlZnRFeHByZXNzaW9uLnZhbHVlID4gcmlnaHRFeHByZXNzaW9uLnZhbHVlKTtcblx0XHRcdGNhc2UgXCI+PVwiOlxuXHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0bGVmdEV4cHJlc3Npb24udmFsdWUgPT09IG51bGwgfHxcblx0XHRcdFx0XHRsZWZ0RXhwcmVzc2lvbi52YWx1ZSA9PT0gdW5kZWZpbmVkIHx8XG5cdFx0XHRcdFx0cmlnaHRFeHByZXNzaW9uLnZhbHVlID09PSBudWxsIHx8XG5cdFx0XHRcdFx0cmlnaHRFeHByZXNzaW9uLnZhbHVlID09PSB1bmRlZmluZWRcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0cmV0dXJuIGNvbnN0YW50KGZhbHNlKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gY29uc3RhbnQobGVmdEV4cHJlc3Npb24udmFsdWUgPj0gcmlnaHRFeHByZXNzaW9uLnZhbHVlKTtcblxuXHRcdFx0Y2FzZSBcIkhhc1wiOiB7XG5cdFx0XHRcdGlmIChcblx0XHRcdFx0XHRsZWZ0RXhwcmVzc2lvbi52YWx1ZSA9PT0gbnVsbCB8fFxuXHRcdFx0XHRcdGxlZnRFeHByZXNzaW9uLnZhbHVlID09PSB1bmRlZmluZWQgfHxcblx0XHRcdFx0XHRyaWdodEV4cHJlc3Npb24udmFsdWUgPT09IG51bGwgfHxcblx0XHRcdFx0XHRyaWdodEV4cHJlc3Npb24udmFsdWUgPT09IHVuZGVmaW5lZFxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHRyZXR1cm4gY29uc3RhbnQoZmFsc2UpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNvbnN0IGxlZnRWYWx1ZUludCA9IGxlZnRFeHByZXNzaW9uLnZhbHVlIGFzIG51bWJlcjtcblx0XHRcdFx0Y29uc3QgcmlnaHRWYWx1ZUludCA9IHJpZ2h0RXhwcmVzc2lvbi52YWx1ZSBhcyBudW1iZXI7XG5cdFx0XHRcdHJldHVybiBjb25zdGFudCghIShsZWZ0VmFsdWVJbnQgJiByaWdodFZhbHVlSW50KSk7XG5cdFx0XHR9XG5cdFx0XHRjYXNlIFwiSW5cIjoge1xuXHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0bGVmdEV4cHJlc3Npb24udmFsdWUgPT09IG51bGwgfHxcblx0XHRcdFx0XHRsZWZ0RXhwcmVzc2lvbi52YWx1ZSA9PT0gdW5kZWZpbmVkIHx8XG5cdFx0XHRcdFx0cmlnaHRFeHByZXNzaW9uLnZhbHVlID09PSBudWxsIHx8XG5cdFx0XHRcdFx0cmlnaHRFeHByZXNzaW9uLnZhbHVlID09PSB1bmRlZmluZWRcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0cmV0dXJuIGNvbnN0YW50KGZhbHNlKTtcblx0XHRcdFx0fVxuXHRcdFx0XHQvLyBDaGVjayBhbGwgdGhlIGNoaWxkcmVuIG9mIHRoZSByaWdodCBleHByZXNzaW9uIGFyZSBjb25zdGFudHNcblx0XHRcdFx0Y29uc3QgYWxsQ2hpbGRyZW5Db25zdGFudHMgPSAocmlnaHRFeHByZXNzaW9uLnZhbHVlIGFzIFRbXSkuZXZlcnkoKGl0ZW0pID0+IGlzQ29uc3RhbnQoaXRlbSkpO1xuXHRcdFx0XHRpZiAoYWxsQ2hpbGRyZW5Db25zdGFudHMpIHtcblx0XHRcdFx0XHRjb25zdCByaWdodFZhbHVlcyA9IChyaWdodEV4cHJlc3Npb24udmFsdWUgYXMgQ29uc3RhbnRFeHByZXNzaW9uPFQ+W10pLm1hcCgoaXRlbSkgPT4gaXRlbS52YWx1ZSk7XG5cdFx0XHRcdFx0cmV0dXJuIGNvbnN0YW50KHJpZ2h0VmFsdWVzLmluY2x1ZGVzKGxlZnRFeHByZXNzaW9uLnZhbHVlKSk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0XHRcdF90eXBlOiBcIkNvbXBhcmlzb25cIixcblx0XHRcdFx0XHRcdG9wZXJhdG9yOiBvcGVyYXRvcixcblx0XHRcdFx0XHRcdG9wZXJhbmQxOiBsZWZ0RXhwcmVzc2lvbixcblx0XHRcdFx0XHRcdG9wZXJhbmQyOiByaWdodEV4cHJlc3Npb25cblx0XHRcdFx0XHR9O1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdHJldHVybiB7XG5cdFx0XHRfdHlwZTogXCJDb21wYXJpc29uXCIsXG5cdFx0XHRvcGVyYXRvcjogb3BlcmF0b3IsXG5cdFx0XHRvcGVyYW5kMTogbGVmdEV4cHJlc3Npb24sXG5cdFx0XHRvcGVyYW5kMjogcmlnaHRFeHByZXNzaW9uXG5cdFx0fTtcblx0fVxufVxuXG4vKipcbiAqIEdlbmVyaWMgaGVscGVyIGZvciB0aGUgbGVuZ3RoIG9mIGFuIGV4cHJlc3Npb24uXG4gKiBAcGFyYW0gZXhwcmVzc2lvbiBUaGUgaW5wdXQgZXhwcmVzc2lvbiBwb2ludGluZyB0byBhbiBhcnJheVxuICogQHBhcmFtIGNoZWNrVW5kZWZpbmVkIElzIHRoZSBhcnJheSBwb3RlbnRpYWxseSB1bmRlZmluZWRcbiAqIEByZXR1cm5zIEFuIGV4cHJlc3Npb24gcmVwcmVzZW50aW5nIHRoZSBsZW5ndGhcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxlbmd0aChcblx0ZXhwcmVzc2lvbjogUGF0aEluTW9kZWxFeHByZXNzaW9uPHVua25vd24+IHwgVW5yZXNvbHZhYmxlUGF0aEV4cHJlc3Npb24sXG5cdGNoZWNrVW5kZWZpbmVkID0gZmFsc2Vcbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxudW1iZXI+IHtcblx0aWYgKGV4cHJlc3Npb24uX3R5cGUgPT09IFwiVW5yZXNvbHZhYmxlXCIpIHtcblx0XHRyZXR1cm4gZXhwcmVzc2lvbjtcblx0fVxuXHRpZiAoIWNoZWNrVW5kZWZpbmVkKSB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdF90eXBlOiBcIkxlbmd0aFwiLFxuXHRcdFx0cGF0aEluTW9kZWw6IGV4cHJlc3Npb25cblx0XHR9O1xuXHR9XG5cdHJldHVybiBpZkVsc2UoZXF1YWwoZXhwcmVzc2lvbiwgdW5kZWZpbmVkKSwgLTEsIGxlbmd0aChleHByZXNzaW9uKSk7XG59XG5cbi8qKlxuICogQ29tcGFyaXNvbjogXCJlcXVhbFwiICg9PT0pLlxuICogQHRlbXBsYXRlIFQgVGhlIHRhcmdldCB0eXBlXG4gKiBAcGFyYW0gbGVmdE9wZXJhbmQgVGhlIG9wZXJhbmQgb24gdGhlIGxlZnQgc2lkZVxuICogQHBhcmFtIHJpZ2h0T3BlcmFuZCBUaGUgb3BlcmFuZCBvbiB0aGUgcmlnaHQgc2lkZSBvZiB0aGUgY29tcGFyaXNvblxuICogQHJldHVybnMgQW4gZXhwcmVzc2lvbiByZXByZXNlbnRpbmcgdGhlIGNvbXBhcmlzb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVxdWFsPFQgZXh0ZW5kcyBQcmltaXRpdmVUeXBlPihcblx0bGVmdE9wZXJhbmQ6IEV4cHJlc3Npb25PclByaW1pdGl2ZTxUPixcblx0cmlnaHRPcGVyYW5kOiBFeHByZXNzaW9uT3JQcmltaXRpdmU8VD5cbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiB7XG5cdGNvbnN0IGxlZnRFeHByZXNzaW9uID0gd3JhcFByaW1pdGl2ZShsZWZ0T3BlcmFuZCk7XG5cdGNvbnN0IHJpZ2h0RXhwcmVzc2lvbiA9IHdyYXBQcmltaXRpdmUocmlnaHRPcGVyYW5kKTtcblx0aWYgKGhhc1VucmVzb2x2YWJsZUV4cHJlc3Npb24obGVmdEV4cHJlc3Npb24sIHJpZ2h0RXhwcmVzc2lvbikpIHtcblx0XHRyZXR1cm4gdW5yZXNvbHZhYmxlRXhwcmVzc2lvbjtcblx0fVxuXHRpZiAoX2NoZWNrRXhwcmVzc2lvbnNBcmVFcXVhbChsZWZ0RXhwcmVzc2lvbiwgcmlnaHRFeHByZXNzaW9uKSkge1xuXHRcdHJldHVybiBjb25zdGFudCh0cnVlKTtcblx0fVxuXG5cdGZ1bmN0aW9uIHJlZHVjZShsZWZ0OiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248VD4sIHJpZ2h0OiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248VD4pOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4gfCB1bmRlZmluZWQge1xuXHRcdGlmIChsZWZ0Ll90eXBlID09PSBcIkNvbXBhcmlzb25cIiAmJiBpc1RydWUocmlnaHQpKSB7XG5cdFx0XHQvLyBjb21wYXJlKGEsIGIpID09PSB0cnVlIH5+PiBjb21wYXJlKGEsIGIpXG5cdFx0XHRyZXR1cm4gbGVmdDtcblx0XHR9IGVsc2UgaWYgKGxlZnQuX3R5cGUgPT09IFwiQ29tcGFyaXNvblwiICYmIGlzRmFsc2UocmlnaHQpKSB7XG5cdFx0XHQvLyBjb21wYXJlKGEsIGIpID09PSBmYWxzZSB+fj4gIWNvbXBhcmUoYSwgYilcblx0XHRcdHJldHVybiBub3QobGVmdCk7XG5cdFx0fSBlbHNlIGlmIChsZWZ0Ll90eXBlID09PSBcIklmRWxzZVwiICYmIF9jaGVja0V4cHJlc3Npb25zQXJlRXF1YWwobGVmdC5vblRydWUsIHJpZ2h0KSkge1xuXHRcdFx0Ly8gKGlmICh4KSB7IGEgfSBlbHNlIHsgYiB9KSA9PT0gYSB+fj4geCB8fCAoYiA9PT0gYSlcblx0XHRcdHJldHVybiBvcihsZWZ0LmNvbmRpdGlvbiwgZXF1YWwobGVmdC5vbkZhbHNlLCByaWdodCkpO1xuXHRcdH0gZWxzZSBpZiAobGVmdC5fdHlwZSA9PT0gXCJJZkVsc2VcIiAmJiBfY2hlY2tFeHByZXNzaW9uc0FyZUVxdWFsKGxlZnQub25GYWxzZSwgcmlnaHQpKSB7XG5cdFx0XHQvLyAoaWYgKHgpIHsgYSB9IGVsc2UgeyBiIH0pID09PSBiIH5+PiAheCB8fCAoYSA9PT0gYilcblx0XHRcdHJldHVybiBvcihub3QobGVmdC5jb25kaXRpb24pLCBlcXVhbChsZWZ0Lm9uVHJ1ZSwgcmlnaHQpKTtcblx0XHR9IGVsc2UgaWYgKFxuXHRcdFx0bGVmdC5fdHlwZSA9PT0gXCJJZkVsc2VcIiAmJlxuXHRcdFx0aXNDb25zdGFudChsZWZ0Lm9uVHJ1ZSkgJiZcblx0XHRcdGlzQ29uc3RhbnQobGVmdC5vbkZhbHNlKSAmJlxuXHRcdFx0aXNDb25zdGFudChyaWdodCkgJiZcblx0XHRcdCFfY2hlY2tFeHByZXNzaW9uc0FyZUVxdWFsKGxlZnQub25UcnVlLCByaWdodCkgJiZcblx0XHRcdCFfY2hlY2tFeHByZXNzaW9uc0FyZUVxdWFsKGxlZnQub25GYWxzZSwgcmlnaHQpXG5cdFx0KSB7XG5cdFx0XHRyZXR1cm4gY29uc3RhbnQoZmFsc2UpO1xuXHRcdH1cblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG5cblx0Ly8gZXhwbG9pdCBzeW1tZXRyeTogYSA9PT0gYiA8fj4gYiA9PT0gYVxuXHRjb25zdCByZWR1Y2VkID0gcmVkdWNlKGxlZnRFeHByZXNzaW9uLCByaWdodEV4cHJlc3Npb24pID8/IHJlZHVjZShyaWdodEV4cHJlc3Npb24sIGxlZnRFeHByZXNzaW9uKTtcblx0cmV0dXJuIHJlZHVjZWQgPz8gY29tcGFyaXNvbihcIj09PVwiLCBsZWZ0RXhwcmVzc2lvbiwgcmlnaHRFeHByZXNzaW9uKTtcbn1cblxuLyoqXG4gKiBDb21wYXJpc29uOiBcIm5vdCBlcXVhbFwiICghPT0pLlxuICogQHRlbXBsYXRlIFQgVGhlIHRhcmdldCB0eXBlXG4gKiBAcGFyYW0gbGVmdE9wZXJhbmQgVGhlIG9wZXJhbmQgb24gdGhlIGxlZnQgc2lkZVxuICogQHBhcmFtIHJpZ2h0T3BlcmFuZCBUaGUgb3BlcmFuZCBvbiB0aGUgcmlnaHQgc2lkZSBvZiB0aGUgY29tcGFyaXNvblxuICogQHJldHVybnMgQW4gZXhwcmVzc2lvbiByZXByZXNlbnRpbmcgdGhlIGNvbXBhcmlzb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG5vdEVxdWFsPFQgZXh0ZW5kcyBQcmltaXRpdmVUeXBlPihcblx0bGVmdE9wZXJhbmQ6IEV4cHJlc3Npb25PclByaW1pdGl2ZTxUPixcblx0cmlnaHRPcGVyYW5kOiBFeHByZXNzaW9uT3JQcmltaXRpdmU8VD5cbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiB7XG5cdHJldHVybiBub3QoZXF1YWwobGVmdE9wZXJhbmQsIHJpZ2h0T3BlcmFuZCkpO1xufVxuXG4vKipcbiAqIENvbXBhcmlzb246IFwiZ3JlYXRlciBvciBlcXVhbFwiICg+PSkuXG4gKiBAdGVtcGxhdGUgVCBUaGUgdGFyZ2V0IHR5cGVcbiAqIEBwYXJhbSBsZWZ0T3BlcmFuZCBUaGUgb3BlcmFuZCBvbiB0aGUgbGVmdCBzaWRlXG4gKiBAcGFyYW0gcmlnaHRPcGVyYW5kIFRoZSBvcGVyYW5kIG9uIHRoZSByaWdodCBzaWRlIG9mIHRoZSBjb21wYXJpc29uXG4gKiBAcmV0dXJucyBBbiBleHByZXNzaW9uIHJlcHJlc2VudGluZyB0aGUgY29tcGFyaXNvblxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3JlYXRlck9yRXF1YWw8VCBleHRlbmRzIERlZmluZWRQcmltaXRpdmVUeXBlPihcblx0bGVmdE9wZXJhbmQ6IEV4cHJlc3Npb25PclByaW1pdGl2ZTxUPixcblx0cmlnaHRPcGVyYW5kOiBFeHByZXNzaW9uT3JQcmltaXRpdmU8VD5cbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiB7XG5cdHJldHVybiBjb21wYXJpc29uKFwiPj1cIiwgbGVmdE9wZXJhbmQsIHJpZ2h0T3BlcmFuZCk7XG59XG5cbi8qKlxuICogQ29tcGFyaXNvbjogXCJncmVhdGVyIHRoYW5cIiAoPikuXG4gKiBAdGVtcGxhdGUgVCBUaGUgdGFyZ2V0IHR5cGVcbiAqIEBwYXJhbSBsZWZ0T3BlcmFuZCBUaGUgb3BlcmFuZCBvbiB0aGUgbGVmdCBzaWRlXG4gKiBAcGFyYW0gcmlnaHRPcGVyYW5kIFRoZSBvcGVyYW5kIG9uIHRoZSByaWdodCBzaWRlIG9mIHRoZSBjb21wYXJpc29uXG4gKiBAcmV0dXJucyBBbiBleHByZXNzaW9uIHJlcHJlc2VudGluZyB0aGUgY29tcGFyaXNvblxuICovXG5leHBvcnQgZnVuY3Rpb24gZ3JlYXRlclRoYW48VCBleHRlbmRzIERlZmluZWRQcmltaXRpdmVUeXBlPihcblx0bGVmdE9wZXJhbmQ6IEV4cHJlc3Npb25PclByaW1pdGl2ZTxUPixcblx0cmlnaHRPcGVyYW5kOiBFeHByZXNzaW9uT3JQcmltaXRpdmU8VD5cbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiB7XG5cdHJldHVybiBjb21wYXJpc29uKFwiPlwiLCBsZWZ0T3BlcmFuZCwgcmlnaHRPcGVyYW5kKTtcbn1cblxuLyoqXG4gKiBDb21wYXJpc29uOiBcImxlc3Mgb3IgZXF1YWxcIiAoPD0pLlxuICogQHRlbXBsYXRlIFQgVGhlIHRhcmdldCB0eXBlXG4gKiBAcGFyYW0gbGVmdE9wZXJhbmQgVGhlIG9wZXJhbmQgb24gdGhlIGxlZnQgc2lkZVxuICogQHBhcmFtIHJpZ2h0T3BlcmFuZCBUaGUgb3BlcmFuZCBvbiB0aGUgcmlnaHQgc2lkZSBvZiB0aGUgY29tcGFyaXNvblxuICogQHJldHVybnMgQW4gZXhwcmVzc2lvbiByZXByZXNlbnRpbmcgdGhlIGNvbXBhcmlzb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxlc3NPckVxdWFsPFQgZXh0ZW5kcyBEZWZpbmVkUHJpbWl0aXZlVHlwZT4oXG5cdGxlZnRPcGVyYW5kOiBFeHByZXNzaW9uT3JQcmltaXRpdmU8VD4sXG5cdHJpZ2h0T3BlcmFuZDogRXhwcmVzc2lvbk9yUHJpbWl0aXZlPFQ+XG4pOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4ge1xuXHRyZXR1cm4gY29tcGFyaXNvbihcIjw9XCIsIGxlZnRPcGVyYW5kLCByaWdodE9wZXJhbmQpO1xufVxuXG4vKipcbiAqIENvbXBhcmlzb246IFwibGVzcyB0aGFuXCIgKDwpLlxuICogQHRlbXBsYXRlIFQgVGhlIHRhcmdldCB0eXBlXG4gKiBAcGFyYW0gbGVmdE9wZXJhbmQgVGhlIG9wZXJhbmQgb24gdGhlIGxlZnQgc2lkZVxuICogQHBhcmFtIHJpZ2h0T3BlcmFuZCBUaGUgb3BlcmFuZCBvbiB0aGUgcmlnaHQgc2lkZSBvZiB0aGUgY29tcGFyaXNvblxuICogQHJldHVybnMgQW4gZXhwcmVzc2lvbiByZXByZXNlbnRpbmcgdGhlIGNvbXBhcmlzb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxlc3NUaGFuPFQgZXh0ZW5kcyBEZWZpbmVkUHJpbWl0aXZlVHlwZT4oXG5cdGxlZnRPcGVyYW5kOiBFeHByZXNzaW9uT3JQcmltaXRpdmU8VD4sXG5cdHJpZ2h0T3BlcmFuZDogRXhwcmVzc2lvbk9yUHJpbWl0aXZlPFQ+XG4pOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4ge1xuXHRyZXR1cm4gY29tcGFyaXNvbihcIjxcIiwgbGVmdE9wZXJhbmQsIHJpZ2h0T3BlcmFuZCk7XG59XG5cbi8qKlxuICogQ29tcGFyaXNvbjogXCJJbmNsdWRlXCIgKEluKS5cbiAqIEB0ZW1wbGF0ZSBUIFRoZSB0YXJnZXQgdHlwZVxuICogQHBhcmFtIGxlZnRPcGVyYW5kIFRoZSBvcGVyYW5kIG9uIHRoZSBsZWZ0IHNpZGVcbiAqIEBwYXJhbSByaWdodE9wZXJhbmQgVGhlIG9wZXJhbmQgb24gdGhlIHJpZ2h0IHNpZGUgb2YgdGhlIGNvbXBhcmlzb25cbiAqIEByZXR1cm5zIEFuIGV4cHJlc3Npb24gcmVwcmVzZW50aW5nIHRoZSBjb21wYXJpc29uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpbmNsdWRlczxUIGV4dGVuZHMgRGVmaW5lZFByaW1pdGl2ZVR5cGU+KFxuXHRsZWZ0T3BlcmFuZDogRXhwcmVzc2lvbk9yUHJpbWl0aXZlPFQ+LFxuXHRyaWdodE9wZXJhbmQ6IEV4cHJlc3Npb25PclByaW1pdGl2ZTxUW10+XG4pOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4ge1xuXHRyZXR1cm4gY29tcGFyaXNvbihcIkluXCIsIGxlZnRPcGVyYW5kLCByaWdodE9wZXJhbmQgYXMgRXhwcmVzc2lvbk9yUHJpbWl0aXZlPFQ+KTtcbn1cblxuLyoqXG4gKiBJZi10aGVuLWVsc2UgZXhwcmVzc2lvbi5cbiAqXG4gKiBFdmFsdWF0ZXMgdG8gb25UcnVlIGlmIHRoZSBjb25kaXRpb24gZXZhbHVhdGVzIHRvIHRydWUsIGVsc2UgZXZhbHVhdGVzIHRvIG9uRmFsc2UuXG4gKiBAdGVtcGxhdGUgVCBUaGUgdGFyZ2V0IHR5cGVcbiAqIEBwYXJhbSBjb25kaXRpb24gVGhlIGNvbmRpdGlvbiB0byBldmFsdWF0ZVxuICogQHBhcmFtIG9uVHJ1ZSBFeHByZXNzaW9uIHJlc3VsdCBpZiB0aGUgY29uZGl0aW9uIGV2YWx1YXRlcyB0byB0cnVlXG4gKiBAcGFyYW0gb25GYWxzZSBFeHByZXNzaW9uIHJlc3VsdCBpZiB0aGUgY29uZGl0aW9uIGV2YWx1YXRlcyB0byBmYWxzZVxuICogQHJldHVybnMgVGhlIGV4cHJlc3Npb24gdGhhdCByZXByZXNlbnRzIHRoaXMgY29uZGl0aW9uYWwgY2hlY2tcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlmRWxzZTxUIGV4dGVuZHMgUHJpbWl0aXZlVHlwZT4oXG5cdGNvbmRpdGlvbjogRXhwcmVzc2lvbk9yUHJpbWl0aXZlPGJvb2xlYW4+LFxuXHRvblRydWU6IEV4cHJlc3Npb25PclByaW1pdGl2ZTxUPixcblx0b25GYWxzZTogRXhwcmVzc2lvbk9yUHJpbWl0aXZlPFQ+XG4pOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248VD4ge1xuXHRsZXQgY29uZGl0aW9uRXhwcmVzc2lvbiA9IHdyYXBQcmltaXRpdmUoY29uZGl0aW9uKTtcblx0bGV0IG9uVHJ1ZUV4cHJlc3Npb24gPSB3cmFwUHJpbWl0aXZlKG9uVHJ1ZSk7XG5cdGxldCBvbkZhbHNlRXhwcmVzc2lvbiA9IHdyYXBQcmltaXRpdmUob25GYWxzZSk7XG5cblx0Ly8gc3dhcCBicmFuY2hlcyBpZiB0aGUgY29uZGl0aW9uIGlzIGEgbmVnYXRpb25cblx0aWYgKGNvbmRpdGlvbkV4cHJlc3Npb24uX3R5cGUgPT09IFwiTm90XCIpIHtcblx0XHQvLyBpZkVsc2Uobm90KFgpLCBhLCBiKSAtLT4gaWZFbHNlKFgsIGIsIGEpXG5cdFx0W29uVHJ1ZUV4cHJlc3Npb24sIG9uRmFsc2VFeHByZXNzaW9uXSA9IFtvbkZhbHNlRXhwcmVzc2lvbiwgb25UcnVlRXhwcmVzc2lvbl07XG5cdFx0Y29uZGl0aW9uRXhwcmVzc2lvbiA9IG5vdChjb25kaXRpb25FeHByZXNzaW9uKTtcblx0fVxuXG5cdC8vIGlubGluZSBuZXN0ZWQgaWYtZWxzZSBleHByZXNzaW9uczogb25UcnVlIGJyYW5jaFxuXHQvLyBpZkVsc2UoWCwgaWZFbHNlKFgsIGEsIGIpLCBjKSA9PT4gaWZFbHNlKFgsIGEsIGMpXG5cdGlmIChvblRydWVFeHByZXNzaW9uLl90eXBlID09PSBcIklmRWxzZVwiICYmIF9jaGVja0V4cHJlc3Npb25zQXJlRXF1YWwoY29uZGl0aW9uRXhwcmVzc2lvbiwgb25UcnVlRXhwcmVzc2lvbi5jb25kaXRpb24pKSB7XG5cdFx0b25UcnVlRXhwcmVzc2lvbiA9IG9uVHJ1ZUV4cHJlc3Npb24ub25UcnVlO1xuXHR9XG5cblx0Ly8gaW5saW5lIG5lc3RlZCBpZi1lbHNlIGV4cHJlc3Npb25zOiBvbkZhbHNlIGJyYW5jaFxuXHQvLyBpZkVsc2UoWCwgYSwgaWZFbHNlKFgsIGIsIGMpKSA9PT4gaWZFbHNlKFgsIGEsIGMpXG5cdGlmIChvbkZhbHNlRXhwcmVzc2lvbi5fdHlwZSA9PT0gXCJJZkVsc2VcIiAmJiBfY2hlY2tFeHByZXNzaW9uc0FyZUVxdWFsKGNvbmRpdGlvbkV4cHJlc3Npb24sIG9uRmFsc2VFeHByZXNzaW9uLmNvbmRpdGlvbikpIHtcblx0XHRvbkZhbHNlRXhwcmVzc2lvbiA9IG9uRmFsc2VFeHByZXNzaW9uLm9uRmFsc2U7XG5cdH1cblxuXHQvLyAoaWYgdHJ1ZSB0aGVuIGEgZWxzZSBiKSAgfn4+IGFcblx0Ly8gKGlmIGZhbHNlIHRoZW4gYSBlbHNlIGIpIH5+PiBiXG5cdGlmIChpc0NvbnN0YW50KGNvbmRpdGlvbkV4cHJlc3Npb24pKSB7XG5cdFx0cmV0dXJuIGNvbmRpdGlvbkV4cHJlc3Npb24udmFsdWUgPyBvblRydWVFeHByZXNzaW9uIDogb25GYWxzZUV4cHJlc3Npb247XG5cdH1cblxuXHQvLyBpZiAoaXNDb25zdGFudEJvb2xlYW4ob25UcnVlRXhwcmVzc2lvbikgfHwgaXNDb25zdGFudEJvb2xlYW4ob25GYWxzZUV4cHJlc3Npb24pKSB7XG5cdC8vIFx0cmV0dXJuIG9yKGFuZChjb25kaXRpb24sIG9uVHJ1ZUV4cHJlc3Npb24gYXMgRXhwcmVzc2lvbjxib29sZWFuPiksIGFuZChub3QoY29uZGl0aW9uKSwgb25GYWxzZUV4cHJlc3Npb24gYXMgRXhwcmVzc2lvbjxib29sZWFuPikpIGFzIEV4cHJlc3Npb248VD5cblx0Ly8gfVxuXG5cdC8vIChpZiBYIHRoZW4gYSBlbHNlIGEpIH5+PiBhXG5cdGlmIChfY2hlY2tFeHByZXNzaW9uc0FyZUVxdWFsKG9uVHJ1ZUV4cHJlc3Npb24sIG9uRmFsc2VFeHByZXNzaW9uKSkge1xuXHRcdHJldHVybiBvblRydWVFeHByZXNzaW9uO1xuXHR9XG5cblx0Ly8gaWYgWCB0aGVuIGEgZWxzZSBmYWxzZSB+fj4gWCAmJiBhXG5cdGlmIChpc0ZhbHNlKG9uRmFsc2VFeHByZXNzaW9uKSkge1xuXHRcdHJldHVybiBhbmQoY29uZGl0aW9uRXhwcmVzc2lvbiwgb25UcnVlRXhwcmVzc2lvbiBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4pIGFzIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxUPjtcblx0fVxuXG5cdC8vIGlmIFggdGhlbiBhIGVsc2UgdHJ1ZSB+fj4gIVggfHwgYVxuXHRpZiAoaXNUcnVlKG9uRmFsc2VFeHByZXNzaW9uKSkge1xuXHRcdHJldHVybiBvcihub3QoY29uZGl0aW9uRXhwcmVzc2lvbiksIG9uVHJ1ZUV4cHJlc3Npb24gYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+KSBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248VD47XG5cdH1cblxuXHQvLyBpZiBYIHRoZW4gZmFsc2UgZWxzZSBhIH5+PiAhWCAmJiBhXG5cdGlmIChpc0ZhbHNlKG9uVHJ1ZUV4cHJlc3Npb24pKSB7XG5cdFx0cmV0dXJuIGFuZChub3QoY29uZGl0aW9uRXhwcmVzc2lvbiksIG9uRmFsc2VFeHByZXNzaW9uIGFzIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPikgYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFQ+O1xuXHR9XG5cblx0Ly8gaWYgWCB0aGVuIHRydWUgZWxzZSBhIH5+PiBYIHx8IGFcblx0aWYgKGlzVHJ1ZShvblRydWVFeHByZXNzaW9uKSkge1xuXHRcdHJldHVybiBvcihjb25kaXRpb25FeHByZXNzaW9uLCBvbkZhbHNlRXhwcmVzc2lvbiBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4pIGFzIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxUPjtcblx0fVxuXHRpZiAoaGFzVW5yZXNvbHZhYmxlRXhwcmVzc2lvbihjb25kaXRpb25FeHByZXNzaW9uLCBvblRydWVFeHByZXNzaW9uLCBvbkZhbHNlRXhwcmVzc2lvbikpIHtcblx0XHRyZXR1cm4gdW5yZXNvbHZhYmxlRXhwcmVzc2lvbjtcblx0fVxuXHRpZiAoaXNDb21wbGV4VHlwZUV4cHJlc3Npb24oY29uZGl0aW9uKSB8fCBpc0NvbXBsZXhUeXBlRXhwcmVzc2lvbihvblRydWUpIHx8IGlzQ29tcGxleFR5cGVFeHByZXNzaW9uKG9uRmFsc2UpKSB7XG5cdFx0bGV0IHBhdGhJZHggPSAwO1xuXHRcdGNvbnN0IG15SWZFbHNlRXhwcmVzc2lvbiA9IGZvcm1hdFJlc3VsdChbY29uZGl0aW9uLCBvblRydWUsIG9uRmFsc2VdLCBcIi5fZm9ybWF0dGVycy5TdGFuZGFyZEZvcm1hdHRlciNpZkVsc2VcIik7XG5cdFx0Y29uc3QgYWxsUGFydHMgPSBbXTtcblx0XHR0cmFuc2Zvcm1SZWN1cnNpdmVseShcblx0XHRcdG15SWZFbHNlRXhwcmVzc2lvbixcblx0XHRcdFwiUGF0aEluTW9kZWxcIixcblx0XHRcdChjb25zdGFudFBhdGg6IFBhdGhJbk1vZGVsRXhwcmVzc2lvbjx1bmtub3duPikgPT4ge1xuXHRcdFx0XHRhbGxQYXJ0cy5wdXNoKGNvbnN0YW50UGF0aCk7XG5cdFx0XHRcdHJldHVybiBwYXRoSW5Nb2RlbChgJCR7cGF0aElkeCsrfWAsIFwiJFwiKTtcblx0XHRcdH0sXG5cdFx0XHR0cnVlXG5cdFx0KTtcblx0XHRhbGxQYXJ0cy51bnNoaWZ0KGNvbnN0YW50KEpTT04uc3RyaW5naWZ5KG15SWZFbHNlRXhwcmVzc2lvbikpKTtcblx0XHRyZXR1cm4gZm9ybWF0UmVzdWx0KGFsbFBhcnRzLCBcIi5fZm9ybWF0dGVycy5TdGFuZGFyZEZvcm1hdHRlci5iaW5kKCRjb250cm9sKSNldmFsdWF0ZUNvbXBsZXhFeHByZXNzaW9uXCIsIHVuZGVmaW5lZCwgdHJ1ZSk7XG5cdH1cblx0cmV0dXJuIHtcblx0XHRfdHlwZTogXCJJZkVsc2VcIixcblx0XHRjb25kaXRpb246IGNvbmRpdGlvbkV4cHJlc3Npb24sXG5cdFx0b25UcnVlOiBvblRydWVFeHByZXNzaW9uLFxuXHRcdG9uRmFsc2U6IG9uRmFsc2VFeHByZXNzaW9uXG5cdH07XG59XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgdGhlIGN1cnJlbnQgZXhwcmVzc2lvbiBoYXMgYSByZWZlcmVuY2UgdG8gdGhlIGRlZmF1bHQgbW9kZWwgKHVuZGVmaW5lZCkuXG4gKiBAcGFyYW0gZXhwcmVzc2lvbiBUaGUgZXhwcmVzc2lvbiB0byBldmFsdWF0ZVxuICogQHJldHVybnMgYHRydWVgIGlmIHRoZXJlIGlzIGEgcmVmZXJlbmNlIHRvIHRoZSBkZWZhdWx0IGNvbnRleHRcbiAqL1xuZnVuY3Rpb24gaGFzUmVmZXJlbmNlVG9EZWZhdWx0Q29udGV4dChleHByZXNzaW9uOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248dW5rbm93bj4pOiBib29sZWFuIHtcblx0c3dpdGNoIChleHByZXNzaW9uLl90eXBlKSB7XG5cdFx0Y2FzZSBcIkNvbnN0YW50XCI6XG5cdFx0Y2FzZSBcIkZvcm1hdHRlclwiOlxuXHRcdGNhc2UgXCJDb21wbGV4VHlwZVwiOlxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdGNhc2UgXCJTZXRcIjpcblx0XHRcdHJldHVybiBleHByZXNzaW9uLm9wZXJhbmRzLnNvbWUoaGFzUmVmZXJlbmNlVG9EZWZhdWx0Q29udGV4dCk7XG5cdFx0Y2FzZSBcIlBhdGhJbk1vZGVsXCI6XG5cdFx0XHRyZXR1cm4gZXhwcmVzc2lvbi5tb2RlbE5hbWUgPT09IHVuZGVmaW5lZDtcblx0XHRjYXNlIFwiQ29tcGFyaXNvblwiOlxuXHRcdFx0cmV0dXJuIGhhc1JlZmVyZW5jZVRvRGVmYXVsdENvbnRleHQoZXhwcmVzc2lvbi5vcGVyYW5kMSkgfHwgaGFzUmVmZXJlbmNlVG9EZWZhdWx0Q29udGV4dChleHByZXNzaW9uLm9wZXJhbmQyKTtcblx0XHRjYXNlIFwiSWZFbHNlXCI6XG5cdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRoYXNSZWZlcmVuY2VUb0RlZmF1bHRDb250ZXh0KGV4cHJlc3Npb24uY29uZGl0aW9uKSB8fFxuXHRcdFx0XHRoYXNSZWZlcmVuY2VUb0RlZmF1bHRDb250ZXh0KGV4cHJlc3Npb24ub25UcnVlKSB8fFxuXHRcdFx0XHRoYXNSZWZlcmVuY2VUb0RlZmF1bHRDb250ZXh0KGV4cHJlc3Npb24ub25GYWxzZSlcblx0XHRcdCk7XG5cdFx0Y2FzZSBcIk5vdFwiOlxuXHRcdGNhc2UgXCJUcnV0aHlcIjpcblx0XHRcdHJldHVybiBoYXNSZWZlcmVuY2VUb0RlZmF1bHRDb250ZXh0KGV4cHJlc3Npb24ub3BlcmFuZCk7XG5cdFx0ZGVmYXVsdDpcblx0XHRcdHJldHVybiBmYWxzZTtcblx0fVxufVxuXG4vLyBUaGlzIGlzIG9uZSBjYXNlIHdoZXJlIGFueSBkb2VzIG1ha2Ugc2Vuc2UuLi5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG5leHBvcnQgdHlwZSBGbjxUPiA9ICgoLi4ucGFyYW1zOiBhbnkpID0+IFQgfCBQcm9taXNlPFQ+KSAmIHtcblx0X19mdW5jdGlvbk5hbWU6IHN0cmluZztcbn07XG5cbi8qKlxuICogQHR5cGVkZWYgV3JhcHBlZFR1cGxlXG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWNvbW1lbnRcbi8vIEB0cy1pZ25vcmVcbnR5cGUgV3JhcHBlZFR1cGxlPFQ+ID0geyBbSyBpbiBrZXlvZiBUXTogV3JhcHBlZFR1cGxlPFRbS10+IHwgRXhwcmVzc2lvbk9yUHJpbWl0aXZlPFRbS10+IHwgdW5kZWZpbmVkIH07XG5cbi8vIFNvLCB0aGlzIHdvcmtzIGJ1dCBJIGNhbm5vdCBnZXQgaXQgdG8gY29tcGlsZSA6RCwgYnV0IGl0IHN0aWxsIGRvZXMgd2hhdCBpcyBleHBlY3RlZC4uLlxuXG4vKipcbiAqIEEgZnVuY3Rpb24gcmVmZXJlbmNlIG9yIGEgZnVuY3Rpb24gbmFtZS5cbiAqL1xudHlwZSBGdW5jdGlvbk9yTmFtZTxUPiA9IEZuPFQ+IHwgc3RyaW5nO1xuXG4vKipcbiAqIEZ1bmN0aW9uIHBhcmFtZXRlcnMsIGVpdGhlciBkZXJpdmVkIGZyb20gdGhlIGZ1bmN0aW9uIG9yIGFuIHVudHlwZWQgYXJyYXkuXG4gKi9cbnR5cGUgRnVuY3Rpb25QYXJhbWV0ZXJzPFQsIEYgZXh0ZW5kcyBGdW5jdGlvbk9yTmFtZTxUPj4gPSBGIGV4dGVuZHMgRm48VD4gPyBQYXJhbWV0ZXJzPEY+IDogdW5rbm93bltdO1xuXG4vKipcbiAqIENhbGxzIGEgZm9ybWF0dGVyIGZ1bmN0aW9uIHRvIHByb2Nlc3MgdGhlIHBhcmFtZXRlcnMuXG4gKiBJZiByZXF1aXJlQ29udGV4dCBpcyBzZXQgdG8gdHJ1ZSBhbmQgbm8gY29udGV4dCBpcyBwYXNzZWQgYSBkZWZhdWx0IGNvbnRleHQgd2lsbCBiZSBhZGRlZCBhdXRvbWF0aWNhbGx5LlxuICogQHRlbXBsYXRlIFRcbiAqIEB0ZW1wbGF0ZSBVXG4gKiBAcGFyYW0gcGFyYW1ldGVycyBUaGUgbGlzdCBvZiBwYXJhbWV0ZXIgdGhhdCBzaG91bGQgbWF0Y2ggdGhlIHR5cGUgYW5kIG51bWJlciBvZiB0aGUgZm9ybWF0dGVyIGZ1bmN0aW9uXG4gKiBAcGFyYW0gZm9ybWF0dGVyRnVuY3Rpb24gVGhlIGZ1bmN0aW9uIHRvIGNhbGxcbiAqIEBwYXJhbSBbY29udGV4dEVudGl0eVR5cGVdIElmIG5vIHBhcmFtZXRlciByZWZlcnMgdG8gdGhlIGNvbnRleHQgdGhlbiB3ZSB1c2UgdGhpcyBpbmZvcm1hdGlvbiB0byBhZGQgYSByZWZlcmVuY2UgdG8gdGhlIGtleXMgZnJvbSB0aGUgZW50aXR5IHR5cGUuXG4gKiBAcGFyYW0gW2lnbm9yZUNvbXBsZXhUeXBlXSBXaGV0aGVyIHRvIGlnbm9yZSB0aGUgdHJhbnNnZm9ybWF0aW9uIHRvIHRoZSBTdGFuZGFyZEZvcm1hdHRlciBvciBub3RcbiAqIEByZXR1cm5zIFRoZSBjb3JyZXNwb25kaW5nIGV4cHJlc3Npb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdFJlc3VsdDxULCBVIGV4dGVuZHMgRm48VD4+KFxuXHRwYXJhbWV0ZXJzOiBXcmFwcGVkVHVwbGU8UGFyYW1ldGVyczxVPj4sXG5cdGZvcm1hdHRlckZ1bmN0aW9uOiBVIHwgc3RyaW5nLFxuXHRjb250ZXh0RW50aXR5VHlwZT86IEVudGl0eVR5cGUsXG5cdGlnbm9yZUNvbXBsZXhUeXBlID0gZmFsc2Vcbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxUPiB7XG5cdGNvbnN0IHBhcmFtZXRlckV4cHJlc3Npb25zID0gKHBhcmFtZXRlcnMgYXMgRXhwcmVzc2lvbk9yUHJpbWl0aXZlPFByaW1pdGl2ZVR5cGU+W10pLm1hcCh3cmFwUHJpbWl0aXZlKTtcblxuXHRpZiAoaGFzVW5yZXNvbHZhYmxlRXhwcmVzc2lvbiguLi5wYXJhbWV0ZXJFeHByZXNzaW9ucykpIHtcblx0XHRyZXR1cm4gdW5yZXNvbHZhYmxlRXhwcmVzc2lvbjtcblx0fVxuXHRpZiAoY29udGV4dEVudGl0eVR5cGUpIHtcblx0XHQvLyBPdGhlcndpc2UsIGlmIHRoZSBjb250ZXh0IGlzIHJlcXVpcmVkIGFuZCBubyBjb250ZXh0IGlzIHByb3ZpZGVkIG1ha2Ugc3VyZSB0byBhZGQgdGhlIGRlZmF1bHQgYmluZGluZ1xuXHRcdGlmICghcGFyYW1ldGVyRXhwcmVzc2lvbnMuc29tZShoYXNSZWZlcmVuY2VUb0RlZmF1bHRDb250ZXh0KSkge1xuXHRcdFx0Y29udGV4dEVudGl0eVR5cGUua2V5cy5mb3JFYWNoKChrZXkpID0+IHBhcmFtZXRlckV4cHJlc3Npb25zLnB1c2gocGF0aEluTW9kZWwoa2V5Lm5hbWUsIFwiXCIpKSk7XG5cdFx0fVxuXHR9XG5cdGxldCBmdW5jdGlvbk5hbWUgPSBcIlwiO1xuXHRpZiAodHlwZW9mIGZvcm1hdHRlckZ1bmN0aW9uID09PSBcInN0cmluZ1wiKSB7XG5cdFx0ZnVuY3Rpb25OYW1lID0gZm9ybWF0dGVyRnVuY3Rpb247XG5cdH0gZWxzZSB7XG5cdFx0ZnVuY3Rpb25OYW1lID0gZm9ybWF0dGVyRnVuY3Rpb24uX19mdW5jdGlvbk5hbWU7XG5cdH1cblx0Ly8gRm9ybWF0dGVyTmFtZSBjYW4gYmUgb2YgZm9ybWF0IHNhcC5mZS5jb3JlLnh4eCNtZXRob2ROYW1lIHRvIGhhdmUgbXVsdGlwbGUgZm9ybWF0dGVyIGluIG9uZSBjbGFzc1xuXHRjb25zdCBbZm9ybWF0dGVyQ2xhc3MsIGZvcm1hdHRlck5hbWVdID0gZnVuY3Rpb25OYW1lLnNwbGl0KFwiI1wiKTtcblxuXHQvLyBJbiBzb21lIGNhc2Ugd2UgYWxzbyBjYW5ub3QgY2FsbCBkaXJlY3RseSBhIGZ1bmN0aW9uIGJlY2F1c2Ugb2YgdG9vIGNvbXBsZXggaW5wdXQsIGluIHRoYXQgY2FzZSB3ZSBuZWVkIHRvIGNvbnZlcnQgdG8gYSBzaW1wbGVyIGZ1bmN0aW9uIGNhbGxcblx0aWYgKFxuXHRcdCFpZ25vcmVDb21wbGV4VHlwZSAmJlxuXHRcdChwYXJhbWV0ZXJFeHByZXNzaW9ucy5zb21lKGlzQ29tcGxleFR5cGVFeHByZXNzaW9uKSB8fFxuXHRcdFx0cGFyYW1ldGVyRXhwcmVzc2lvbnMuc29tZShpc0NvbmNhdEV4cHJlc3Npb24pIHx8XG5cdFx0XHRwYXJhbWV0ZXJFeHByZXNzaW9ucy5zb21lKGlzSWZFbHNlRXhwcmVzc2lvbikpXG5cdCkge1xuXHRcdGxldCBwYXRoSWR4ID0gMDtcblx0XHRjb25zdCBteUZvcm1hdEV4cHJlc3Npb24gPSBmb3JtYXRSZXN1bHQocGFyYW1ldGVyRXhwcmVzc2lvbnMsIGZ1bmN0aW9uTmFtZSwgdW5kZWZpbmVkLCB0cnVlKTtcblx0XHRjb25zdCBhbGxQYXJ0cyA9IFtdO1xuXHRcdHRyYW5zZm9ybVJlY3Vyc2l2ZWx5KFxuXHRcdFx0bXlGb3JtYXRFeHByZXNzaW9uLFxuXHRcdFx0XCJQYXRoSW5Nb2RlbFwiLFxuXHRcdFx0KGNvbnN0YW50UGF0aDogUGF0aEluTW9kZWxFeHByZXNzaW9uPHVua25vd24+KSA9PiB7XG5cdFx0XHRcdGFsbFBhcnRzLnB1c2goY29uc3RhbnRQYXRoKTtcblx0XHRcdFx0cmV0dXJuIHBhdGhJbk1vZGVsKGAkJHtwYXRoSWR4Kyt9YCwgXCIkXCIpO1xuXHRcdFx0fSxcblx0XHRcdHRydWVcblx0XHQpO1xuXHRcdGFsbFBhcnRzLnVuc2hpZnQoY29uc3RhbnQoSlNPTi5zdHJpbmdpZnkobXlGb3JtYXRFeHByZXNzaW9uKSkpO1xuXHRcdHJldHVybiBmb3JtYXRSZXN1bHQoYWxsUGFydHMsIFwiLl9mb3JtYXR0ZXJzLlN0YW5kYXJkRm9ybWF0dGVyLmJpbmQoJGNvbnRyb2wpI2V2YWx1YXRlQ29tcGxleEV4cHJlc3Npb25cIiwgdW5kZWZpbmVkLCB0cnVlKTtcblx0fSBlbHNlIGlmICghIWZvcm1hdHRlck5hbWUgJiYgZm9ybWF0dGVyTmFtZS5sZW5ndGggPiAwKSB7XG5cdFx0cGFyYW1ldGVyRXhwcmVzc2lvbnMudW5zaGlmdChjb25zdGFudChmb3JtYXR0ZXJOYW1lKSk7XG5cdH1cblxuXHRyZXR1cm4ge1xuXHRcdF90eXBlOiBcIkZvcm1hdHRlclwiLFxuXHRcdGZuOiBmb3JtYXR0ZXJDbGFzcyxcblx0XHRwYXJhbWV0ZXJzOiBwYXJhbWV0ZXJFeHByZXNzaW9uc1xuXHR9O1xufVxuXG50eXBlIEJpbmRpbmdDb25zdHJhaW50cyA9IHtcblx0c2NhbGU/OiBudW1iZXIgfCBzdHJpbmc7XG5cdHByZWNpc2lvbj86IG51bWJlcjtcblx0bWF4TGVuZ3RoPzogbnVtYmVyO1xuXHRudWxsYWJsZT86IGJvb2xlYW47XG5cdG1pbmltdW0/OiBzdHJpbmc7XG5cdG1heGltdW0/OiBzdHJpbmc7XG5cdGlzRGlnaXRTZXF1ZW5jZT86IGJvb2xlYW47XG5cdFY0PzogYm9vbGVhbjtcbn07XG5leHBvcnQgZnVuY3Rpb24gc2V0VXBDb25zdHJhaW50cyh0YXJnZXRNYXBwaW5nOiBUeXBlTWFwcGluZ0RlZmluaXRpb24sIHByb3BlcnR5OiBQcm9wZXJ0eSB8IEFjdGlvblBhcmFtZXRlcik6IEJpbmRpbmdDb25zdHJhaW50cyB7XG5cdGNvbnN0IGNvbnN0cmFpbnRzOiBCaW5kaW5nQ29uc3RyYWludHMgPSB7fTtcblx0aWYgKHRhcmdldE1hcHBpbmc/LmNvbnN0cmFpbnRzPy4kU2NhbGUgJiYgcHJvcGVydHkuc2NhbGUgIT09IHVuZGVmaW5lZCkge1xuXHRcdGNvbnN0cmFpbnRzLnNjYWxlID0gcHJvcGVydHkuc2NhbGU7XG5cdH1cblx0aWYgKHRhcmdldE1hcHBpbmc/LmNvbnN0cmFpbnRzPy4kUHJlY2lzaW9uICYmIHByb3BlcnR5LnByZWNpc2lvbiAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0Y29uc3RyYWludHMucHJlY2lzaW9uID0gcHJvcGVydHkucHJlY2lzaW9uO1xuXHR9XG5cdGlmICh0YXJnZXRNYXBwaW5nPy5jb25zdHJhaW50cz8uJE1heExlbmd0aCAmJiBwcm9wZXJ0eS5tYXhMZW5ndGggIT09IHVuZGVmaW5lZCkge1xuXHRcdGNvbnN0cmFpbnRzLm1heExlbmd0aCA9IHByb3BlcnR5Lm1heExlbmd0aDtcblx0fVxuXHRpZiAocHJvcGVydHkubnVsbGFibGUgPT09IGZhbHNlKSB7XG5cdFx0Y29uc3RyYWludHMubnVsbGFibGUgPSBmYWxzZTtcblx0fVxuXHRpZiAodGFyZ2V0TWFwcGluZz8uY29uc3RyYWludHM/LltcIkBPcmcuT0RhdGEuVmFsaWRhdGlvbi5WMS5NaW5pbXVtLyREZWNpbWFsXCJdICYmICFpc05hTihwcm9wZXJ0eS5hbm5vdGF0aW9ucz8uVmFsaWRhdGlvbj8uTWluaW11bSkpIHtcblx0XHRjb25zdHJhaW50cy5taW5pbXVtID0gYCR7cHJvcGVydHkuYW5ub3RhdGlvbnM/LlZhbGlkYXRpb24/Lk1pbmltdW19YDtcblx0fVxuXHRpZiAodGFyZ2V0TWFwcGluZz8uY29uc3RyYWludHM/LltcIkBPcmcuT0RhdGEuVmFsaWRhdGlvbi5WMS5NYXhpbXVtLyREZWNpbWFsXCJdICYmICFpc05hTihwcm9wZXJ0eS5hbm5vdGF0aW9ucz8uVmFsaWRhdGlvbj8uTWF4aW11bSkpIHtcblx0XHRjb25zdHJhaW50cy5tYXhpbXVtID0gYCR7cHJvcGVydHkuYW5ub3RhdGlvbnM/LlZhbGlkYXRpb24/Lk1heGltdW19YDtcblx0fVxuXHRpZiAoXG5cdFx0cHJvcGVydHkuYW5ub3RhdGlvbnM/LkNvbW1vbj8uSXNEaWdpdFNlcXVlbmNlICYmXG5cdFx0dGFyZ2V0TWFwcGluZy50eXBlID09PSBcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLlN0cmluZ1wiICYmXG5cdFx0dGFyZ2V0TWFwcGluZz8uY29uc3RyYWludHM/LltcIkBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuSXNEaWdpdFNlcXVlbmNlXCJdXG5cdCkge1xuXHRcdGNvbnN0cmFpbnRzLmlzRGlnaXRTZXF1ZW5jZSA9IHRydWU7XG5cdH1cblx0aWYgKHRhcmdldE1hcHBpbmc/LmNvbnN0cmFpbnRzPy4kVjQpIHtcblx0XHRjb25zdHJhaW50cy5WNCA9IHRydWU7XG5cdH1cblx0cmV0dXJuIGNvbnN0cmFpbnRzO1xufVxuXG4vKipcbiAqIEdlbmVyYXRlcyB0aGUgYmluZGluZyBleHByZXNzaW9uIGZvciB0aGUgcHJvcGVydHksIGFuZCBzZXRzIHVwIHRoZSBmb3JtYXRPcHRpb25zIGFuZCBjb25zdHJhaW50cy5cbiAqIEBwYXJhbSBwcm9wZXJ0eSBUaGUgUHJvcGVydHkgZm9yIHdoaWNoIHdlIGFyZSBzZXR0aW5nIHVwIHRoZSBiaW5kaW5nXG4gKiBAcGFyYW0gcHJvcGVydHlCaW5kaW5nRXhwcmVzc2lvbiBUaGUgQmluZGluZ0V4cHJlc3Npb24gb2YgdGhlIHByb3BlcnR5IGFib3ZlLiBTZXJ2ZXMgYXMgdGhlIGJhc2lzIHRvIHdoaWNoIGluZm9ybWF0aW9uIGNhbiBiZSBhZGRlZFxuICogQHBhcmFtIGlnbm9yZUNvbnN0cmFpbnRzIElnbm9yZSBjb25zdHJhaW50cyBvZiB0aGUgcHJvcGVydHlcbiAqIEByZXR1cm5zIFRoZSBiaW5kaW5nIGV4cHJlc3Npb24gZm9yIHRoZSBwcm9wZXJ0eSB3aXRoIGZvcm1hdE9wdGlvbnMgYW5kIGNvbnN0cmFpbnRzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXRXaXRoVHlwZUluZm9ybWF0aW9uPFQ+KFxuXHRwcm9wZXJ0eTogUHJvcGVydHkgfCBBY3Rpb25QYXJhbWV0ZXIsXG5cdHByb3BlcnR5QmluZGluZ0V4cHJlc3Npb246IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxzdHJpbmc+LFxuXHRpZ25vcmVDb25zdHJhaW50cyA9IGZhbHNlXG4pOiBQYXRoSW5Nb2RlbEV4cHJlc3Npb248VD4ge1xuXHRjb25zdCBvdXRFeHByZXNzaW9uOiBQYXRoSW5Nb2RlbEV4cHJlc3Npb248dW5rbm93bj4gPSBwcm9wZXJ0eUJpbmRpbmdFeHByZXNzaW9uIGFzIFBhdGhJbk1vZGVsRXhwcmVzc2lvbjx1bmtub3duPjtcblx0aWYgKHByb3BlcnR5Ll90eXBlICE9PSBcIlByb3BlcnR5XCIgJiYgcHJvcGVydHkuX3R5cGUgIT09IFwiQWN0aW9uUGFyYW1ldGVyXCIpIHtcblx0XHRyZXR1cm4gb3V0RXhwcmVzc2lvbjtcblx0fVxuXHRjb25zdCB0YXJnZXRNYXBwaW5nID0gRURNX1RZUEVfTUFQUElOR1twcm9wZXJ0eS50eXBlXTtcblx0aWYgKCF0YXJnZXRNYXBwaW5nKSB7XG5cdFx0cmV0dXJuIG91dEV4cHJlc3Npb247XG5cdH1cblx0aWYgKCFvdXRFeHByZXNzaW9uLmZvcm1hdE9wdGlvbnMpIHtcblx0XHRvdXRFeHByZXNzaW9uLmZvcm1hdE9wdGlvbnMgPSB7fTtcblx0fVxuXHRvdXRFeHByZXNzaW9uLmNvbnN0cmFpbnRzID0ge307XG5cblx0b3V0RXhwcmVzc2lvbi50eXBlID0gdGFyZ2V0TWFwcGluZy50eXBlO1xuXHRpZiAoIWlnbm9yZUNvbnN0cmFpbnRzKSB7XG5cdFx0b3V0RXhwcmVzc2lvbi5jb25zdHJhaW50cyA9IHNldFVwQ29uc3RyYWludHModGFyZ2V0TWFwcGluZywgcHJvcGVydHkpO1xuXHR9XG5cblx0aWYgKFxuXHRcdChvdXRFeHByZXNzaW9uPy50eXBlPy5pbmRleE9mKFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuSW50XCIpID09PSAwICYmIG91dEV4cHJlc3Npb24/LnR5cGUgIT09IFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuSW50NjRcIikgfHxcblx0XHRvdXRFeHByZXNzaW9uPy50eXBlID09PSBcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLkRvdWJsZVwiXG5cdCkge1xuXHRcdG91dEV4cHJlc3Npb24uZm9ybWF0T3B0aW9ucyA9IE9iamVjdC5hc3NpZ24ob3V0RXhwcmVzc2lvbi5mb3JtYXRPcHRpb25zLCB7XG5cdFx0XHRwYXJzZUFzU3RyaW5nOiBmYWxzZVxuXHRcdH0pO1xuXHR9XG5cdGlmIChvdXRFeHByZXNzaW9uLnR5cGUgPT09IFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuU3RyaW5nXCIgJiYgKGlzUHJvcGVydHkocHJvcGVydHkpIHx8IGlzQWN0aW9uUGFyYW1ldGVyKHByb3BlcnR5KSkpIHtcblx0XHRpZiAob3V0RXhwcmVzc2lvbi5jb25zdHJhaW50cz8uaXNEaWdpdFNlcXVlbmNlIHx8IChvdXRFeHByZXNzaW9uLmNvbnN0cmFpbnRzPy5udWxsYWJsZSAhPT0gZmFsc2UgJiYgcHJvcGVydHkubnVsbGFibGUgPT09IHRydWUpKSB7XG5cdFx0XHRvdXRFeHByZXNzaW9uLmZvcm1hdE9wdGlvbnMucGFyc2VLZWVwc0VtcHR5U3RyaW5nID0gZmFsc2U7XG5cdFx0fSBlbHNlIHtcblx0XHRcdG91dEV4cHJlc3Npb24uZm9ybWF0T3B0aW9ucy5wYXJzZUtlZXBzRW1wdHlTdHJpbmcgPSB0cnVlO1xuXHRcdH1cblx0XHRpZiAoaXNQcm9wZXJ0eShwcm9wZXJ0eSkpIHtcblx0XHRcdGNvbnN0IGZpc2NhbFR5cGUgPSBnZXRGaXNjYWxUeXBlKHByb3BlcnR5KTtcblx0XHRcdGlmIChmaXNjYWxUeXBlKSB7XG5cdFx0XHRcdG91dEV4cHJlc3Npb24uZm9ybWF0T3B0aW9ucy5maXNjYWxUeXBlID0gZmlzY2FsVHlwZTtcblx0XHRcdFx0b3V0RXhwcmVzc2lvbi50eXBlID0gXCJzYXAuZmUuY29yZS50eXBlLkZpc2NhbERhdGVcIjtcblx0XHRcdH1cblx0XHR9XG5cdH1cblx0Y29uc3QgdHlwZXNTdXBwb3J0aW5nUGFyc2VFbXB0eVZhbHVlVG9aZXJvID0gW1xuXHRcdFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuSW50MTZcIixcblx0XHRcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLkludDMyXCIsXG5cdFx0XCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5JbnQ2NFwiLFxuXHRcdFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuU2luZ2xlXCIsXG5cdFx0XCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5Eb3VibGVcIixcblx0XHRcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLkRlY2ltYWxcIixcblx0XHRcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLkJ5dGVcIixcblx0XHRcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLlNCeXRlXCJcblx0XTtcblx0aWYgKFxuXHRcdG91dEV4cHJlc3Npb24uY29uc3RyYWludHM/Lm51bGxhYmxlID09PSBmYWxzZSAmJlxuXHRcdG91dEV4cHJlc3Npb24udHlwZSAmJlxuXHRcdHR5cGVzU3VwcG9ydGluZ1BhcnNlRW1wdHlWYWx1ZVRvWmVyby5pbmNsdWRlcyhvdXRFeHByZXNzaW9uLnR5cGUpXG5cdCkge1xuXHRcdG91dEV4cHJlc3Npb24uZm9ybWF0T3B0aW9ucyA9IE9iamVjdC5hc3NpZ24ob3V0RXhwcmVzc2lvbi5mb3JtYXRPcHRpb25zLCB7XG5cdFx0XHRwYXJzZUVtcHR5VmFsdWVUb1plcm86IHRydWVcblx0XHR9KTtcblx0fVxuXHRpZiAoXG5cdFx0b3V0RXhwcmVzc2lvbi5jb25zdHJhaW50cz8ubnVsbGFibGUgIT09IGZhbHNlICYmXG5cdFx0KG91dEV4cHJlc3Npb24udHlwZSA9PT0gXCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5JbnQ2NFwiIHx8IG91dEV4cHJlc3Npb24udHlwZSA9PT0gXCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5EZWNpbWFsXCIpXG5cdCkge1xuXHRcdG91dEV4cHJlc3Npb24uZm9ybWF0T3B0aW9ucyA9IE9iamVjdC5hc3NpZ24ob3V0RXhwcmVzc2lvbi5mb3JtYXRPcHRpb25zLCB7XG5cdFx0XHRlbXB0eVN0cmluZzogXCJcIlxuXHRcdH0pO1xuXHR9XG5cblx0cmV0dXJuIG91dEV4cHJlc3Npb247XG59XG5cbmV4cG9ydCBjb25zdCBnZXRGaXNjYWxUeXBlID0gZnVuY3Rpb24gKHByb3BlcnR5OiBQcm9wZXJ0eSk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdGlmIChwcm9wZXJ0eS5hbm5vdGF0aW9ucz8uQ29tbW9uPy5Jc0Zpc2NhbFllYXIpIHtcblx0XHRyZXR1cm4gQ29tbW9uQW5ub3RhdGlvblRlcm1zLklzRmlzY2FsWWVhcjtcblx0fVxuXHRpZiAocHJvcGVydHkuYW5ub3RhdGlvbnM/LkNvbW1vbj8uSXNGaXNjYWxQZXJpb2QpIHtcblx0XHRyZXR1cm4gQ29tbW9uQW5ub3RhdGlvblRlcm1zLklzRmlzY2FsUGVyaW9kO1xuXHR9XG5cdGlmIChwcm9wZXJ0eS5hbm5vdGF0aW9ucz8uQ29tbW9uPy5Jc0Zpc2NhbFllYXJQZXJpb2QpIHtcblx0XHRyZXR1cm4gQ29tbW9uQW5ub3RhdGlvblRlcm1zLklzRmlzY2FsWWVhclBlcmlvZDtcblx0fVxuXHRpZiAocHJvcGVydHkuYW5ub3RhdGlvbnM/LkNvbW1vbj8uSXNGaXNjYWxRdWFydGVyKSB7XG5cdFx0cmV0dXJuIENvbW1vbkFubm90YXRpb25UZXJtcy5Jc0Zpc2NhbFF1YXJ0ZXI7XG5cdH1cblx0aWYgKHByb3BlcnR5LmFubm90YXRpb25zPy5Db21tb24/LklzRmlzY2FsWWVhclF1YXJ0ZXIpIHtcblx0XHRyZXR1cm4gQ29tbW9uQW5ub3RhdGlvblRlcm1zLklzRmlzY2FsWWVhclF1YXJ0ZXI7XG5cdH1cblx0aWYgKHByb3BlcnR5LmFubm90YXRpb25zPy5Db21tb24/LklzRmlzY2FsV2Vlaykge1xuXHRcdHJldHVybiBDb21tb25Bbm5vdGF0aW9uVGVybXMuSXNGaXNjYWxXZWVrO1xuXHR9XG5cdGlmIChwcm9wZXJ0eS5hbm5vdGF0aW9ucz8uQ29tbW9uPy5Jc0Zpc2NhbFllYXJXZWVrKSB7XG5cdFx0cmV0dXJuIENvbW1vbkFubm90YXRpb25UZXJtcy5Jc0Zpc2NhbFllYXJXZWVrO1xuXHR9XG5cdGlmIChwcm9wZXJ0eS5hbm5vdGF0aW9ucz8uQ29tbW9uPy5Jc0RheU9mRmlzY2FsWWVhcikge1xuXHRcdHJldHVybiBDb21tb25Bbm5vdGF0aW9uVGVybXMuSXNEYXlPZkZpc2NhbFllYXI7XG5cdH1cbn07XG5cbi8qKlxuICogQ2FsbHMgYSBjb21wbGV4IHR5cGUgdG8gcHJvY2VzcyB0aGUgcGFyYW1ldGVycy5cbiAqIElmIHJlcXVpcmVDb250ZXh0IGlzIHNldCB0byB0cnVlIGFuZCBubyBjb250ZXh0IGlzIHBhc3NlZCwgYSBkZWZhdWx0IGNvbnRleHQgd2lsbCBiZSBhZGRlZCBhdXRvbWF0aWNhbGx5LlxuICogQHRlbXBsYXRlIFRcbiAqIEB0ZW1wbGF0ZSBVXG4gKiBAcGFyYW0gcGFyYW1ldGVycyBUaGUgbGlzdCBvZiBwYXJhbWV0ZXJzIHRoYXQgc2hvdWxkIG1hdGNoIHRoZSB0eXBlIGZvciB0aGUgY29tcGxleCB0eXBlPVxuICogQHBhcmFtIHR5cGUgVGhlIGNvbXBsZXggdHlwZSB0byB1c2VcbiAqIEBwYXJhbSBbY29udGV4dEVudGl0eVR5cGVdIFRoZSBjb250ZXh0IGVudGl0eSB0eXBlIHRvIGNvbnNpZGVyXG4gKiBAcGFyYW0gb0Zvcm1hdE9wdGlvbnNcbiAqIEBwYXJhbSBvQ29uc3RyYWludE9wdGlvbnNcbiAqIEByZXR1cm5zIFRoZSBjb3JyZXNwb25kaW5nIGV4cHJlc3Npb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFkZFR5cGVJbmZvcm1hdGlvbjxULCBVIGV4dGVuZHMgRm48VD4+KFxuXHRwYXJhbWV0ZXJzOiBXcmFwcGVkVHVwbGU8UGFyYW1ldGVyczxVPj4sXG5cdHR5cGU6IHN0cmluZyxcblx0Y29udGV4dEVudGl0eVR5cGU/OiBFbnRpdHlUeXBlLFxuXHRvRm9ybWF0T3B0aW9ucz86IENvbXBsZXhUeXBlRm9ybWF0T3B0aW9ucyxcblx0b0NvbnN0cmFpbnRPcHRpb25zPzogQ29tcGxleFR5cGVDb25zdHJhaW50T3B0aW9uc1xuKTogVW5yZXNvbHZhYmxlUGF0aEV4cHJlc3Npb24gfCBDb21wbGV4VHlwZUV4cHJlc3Npb248VD4gfCBDb25zdGFudEV4cHJlc3Npb248VD4ge1xuXHRjb25zdCBwYXJhbWV0ZXJFeHByZXNzaW9ucyA9IChwYXJhbWV0ZXJzIGFzIEV4cHJlc3Npb25PclByaW1pdGl2ZTxQcmltaXRpdmVUeXBlPltdKS5tYXAod3JhcFByaW1pdGl2ZSk7XG5cdGlmIChoYXNVbnJlc29sdmFibGVFeHByZXNzaW9uKC4uLnBhcmFtZXRlckV4cHJlc3Npb25zKSkge1xuXHRcdHJldHVybiB1bnJlc29sdmFibGVFeHByZXNzaW9uO1xuXHR9XG5cdC8vIElmIHRoZXJlIGlzIG9ubHkgb25lIHBhcmFtZXRlciBhbmQgaXQgaXMgYSBjb25zdGFudCBhbmQgd2UgZG9uJ3QgZXhwZWN0IHRoZSBjb250ZXh0IHRoZW4gcmV0dXJuIHRoZSBjb25zdGFudFxuXHRpZiAocGFyYW1ldGVyRXhwcmVzc2lvbnMubGVuZ3RoID09PSAxICYmIGlzQ29uc3RhbnQocGFyYW1ldGVyRXhwcmVzc2lvbnNbMF0pICYmICFjb250ZXh0RW50aXR5VHlwZSkge1xuXHRcdHJldHVybiBwYXJhbWV0ZXJFeHByZXNzaW9uc1swXSBhcyBDb25zdGFudEV4cHJlc3Npb248VD47XG5cdH0gZWxzZSBpZiAoY29udGV4dEVudGl0eVR5cGUpIHtcblx0XHQvLyBPdGhlcndpc2UsIGlmIHRoZSBjb250ZXh0IGlzIHJlcXVpcmVkIGFuZCBubyBjb250ZXh0IGlzIHByb3ZpZGVkIG1ha2Ugc3VyZSB0byBhZGQgdGhlIGRlZmF1bHQgYmluZGluZ1xuXHRcdGlmICghcGFyYW1ldGVyRXhwcmVzc2lvbnMuc29tZShoYXNSZWZlcmVuY2VUb0RlZmF1bHRDb250ZXh0KSkge1xuXHRcdFx0Y29udGV4dEVudGl0eVR5cGUua2V5cy5mb3JFYWNoKChrZXkpID0+IHBhcmFtZXRlckV4cHJlc3Npb25zLnB1c2gocGF0aEluTW9kZWwoa2V5Lm5hbWUsIFwiXCIpKSk7XG5cdFx0fVxuXHR9XG5cdG9Gb3JtYXRPcHRpb25zID0gX2dldENvbXBsZXhUeXBlRm9ybWF0T3B0aW9uc0Zyb21GaXJzdFBhcmFtKHBhcmFtZXRlcnNbMF0sIG9Gb3JtYXRPcHRpb25zKTtcblxuXHRpZiAodHlwZSA9PT0gXCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5Vbml0XCIpIHtcblx0XHRjb25zdCB1b21QYXRoID0gcGF0aEluTW9kZWwoXCIvIyNAQHJlcXVlc3RVbml0c09mTWVhc3VyZVwiKTtcblx0XHR1b21QYXRoLnRhcmdldFR5cGUgPSBcImFueVwiO1xuXHRcdHVvbVBhdGgubW9kZSA9IFwiT25lVGltZVwiO1xuXHRcdG9Gb3JtYXRPcHRpb25zID8/PSB7fTtcblx0XHRvRm9ybWF0T3B0aW9ucy5wcmVzZXJ2ZURlY2ltYWxzID0gb0NvbnN0cmFpbnRPcHRpb25zPy5za2lwRGVjaW1hbHNWYWxpZGF0aW9uID8/IGZhbHNlO1xuXHRcdHBhcmFtZXRlckV4cHJlc3Npb25zLnB1c2godW9tUGF0aCk7XG5cdH0gZWxzZSBpZiAodHlwZSA9PT0gXCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5DdXJyZW5jeVwiIHx8IHR5cGUgPT09IFwic2FwLmZlLmNvcmUudHlwZS5EeW5hbWljQ3VycmVuY3lcIikge1xuXHRcdGNvbnN0IGN1cnJlbmN5UGF0aCA9IHBhdGhJbk1vZGVsKFwiLyMjQEByZXF1ZXN0Q3VycmVuY3lDb2Rlc1wiKTtcblx0XHRjdXJyZW5jeVBhdGgudGFyZ2V0VHlwZSA9IFwiYW55XCI7XG5cdFx0Y3VycmVuY3lQYXRoLm1vZGUgPSBcIk9uZVRpbWVcIjtcblx0XHRvRm9ybWF0T3B0aW9ucyA/Pz0ge307XG5cdFx0aWYgKG9Db25zdHJhaW50T3B0aW9ucz8uc2tpcERlY2ltYWxzVmFsaWRhdGlvbiA9PT0gdHJ1ZSkge1xuXHRcdFx0Ly8gVGhpcyBkb2Vzbid0IGRvIGFueXRoaW5nIGJlY2F1c2UgaXQgZ2V0cyBvdmVyd3JpdHRlbiBieSB0aGUgYGRlY2ltYWxzYCBmcm9tIHRoZSBjdXJyZW5jeSBjb2RlIGxpc3Rcblx0XHRcdG9Gb3JtYXRPcHRpb25zLm1heEZyYWN0aW9uRGlnaXRzID0gOTk7IC8vIHNldHRpbmcgdG8gOTkgdG8gYXZvaWQgcm91bmRpbmcgaW4gY3VycmVuY3kgY29udmVyc2lvblxuXHRcdH1cblxuXHRcdG9Gb3JtYXRPcHRpb25zLnByZXNlcnZlRGVjaW1hbHMgPSBvQ29uc3RyYWludE9wdGlvbnM/LnNraXBEZWNpbWFsc1ZhbGlkYXRpb24gPz8gZmFsc2U7IC8vIGRlZmF1bHQgdmFsdWUgc2luY2Ugd2UgZG9uJ3QgaGF2ZSBhIENMRFJcblx0XHRwYXJhbWV0ZXJFeHByZXNzaW9ucy5wdXNoKGN1cnJlbmN5UGF0aCk7XG5cdH1cblxuXHRyZXR1cm4ge1xuXHRcdF90eXBlOiBcIkNvbXBsZXhUeXBlXCIsXG5cdFx0dHlwZTogdHlwZSxcblx0XHRmb3JtYXRPcHRpb25zOiBvRm9ybWF0T3B0aW9ucyB8fCB7fSxcblx0XHRjb25zdHJhaW50czogb0NvbnN0cmFpbnRPcHRpb25zIHx8IHt9LFxuXHRcdHBhcmFtZXRlcnM6IHt9LFxuXHRcdGJpbmRpbmdQYXJhbWV0ZXJzOiBwYXJhbWV0ZXJFeHByZXNzaW9uc1xuXHR9O1xufVxuXG50eXBlIENvbXBsZXhUeXBlRm9ybWF0T3B0aW9ucyA9IHtcblx0ZGVjaW1hbHM/OiBudW1iZXI7XG5cdG1heEZyYWN0aW9uRGlnaXRzPzogbnVtYmVyO1xuXHRzaG93TnVtYmVyPzogYm9vbGVhbjtcblx0c2hvd01lYXN1cmU/OiBib29sZWFuO1xuXHRwYXJzZUFzU3RyaW5nPzogYm9vbGVhbjtcblx0cGFyc2VLZWVwc0VtcHR5U3RyaW5nPzogYm9vbGVhbjtcblx0ZW1wdHlTdHJpbmc/OiBzdHJpbmcgfCBudW1iZXIgfCBudWxsO1xuXHRzaG93VGltZT86IGJvb2xlYW47XG5cdHNob3dEYXRlPzogYm9vbGVhbjtcblx0c2hvd1RpbWV6b25lPzogYm9vbGVhbjtcblx0cHJlc2VydmVEZWNpbWFscz86IGJvb2xlYW47XG5cdGRlY2ltYWxQYWRkaW5nPzogbnVtYmVyO1xufTtcblxuZXhwb3J0IHR5cGUgQ29tcGxleFR5cGVDb25zdHJhaW50T3B0aW9ucyA9IHtcblx0c2tpcERlY2ltYWxzVmFsaWRhdGlvbj86IGJvb2xlYW47XG59O1xuXG4vKipcbiAqIFByb2Nlc3MgdGhlIGZvcm1hdE9wdGlvbnMgZm9yIGEgY29tcGxleFR5cGUgYmFzZWQgb24gdGhlIGZpcnN0IHBhcmFtZXRlci5cbiAqIEBwYXJhbSBwYXJhbSBUaGUgZmlyc3QgcGFyYW1ldGVyIG9mIHRoZSBjb21wbGV4IHR5cGVcbiAqIEBwYXJhbSBmb3JtYXRPcHRpb25zIEluaXRpYWwgZm9ybWF0T3B0aW9uc1xuICogQHJldHVybnMgVGhlIG1vZGlmaWVkIGZvcm1hdE9wdGlvbnNcbiAqL1xuZnVuY3Rpb24gX2dldENvbXBsZXhUeXBlRm9ybWF0T3B0aW9uc0Zyb21GaXJzdFBhcmFtKFxuXHRwYXJhbTogUGF0aEluTW9kZWxFeHByZXNzaW9uPFByaW1pdGl2ZVR5cGU+LFxuXHRmb3JtYXRPcHRpb25zOiB1bmRlZmluZWQgfCBDb21wbGV4VHlwZUZvcm1hdE9wdGlvbnNcbik6IENvbXBsZXhUeXBlRm9ybWF0T3B0aW9ucyB8IHVuZGVmaW5lZCB7XG5cdC8vIGlmIHNob3dNZWFzdXJlIGlzIHNldCB0byBmYWxzZSB3ZSB3YW50IHRvIG5vdCBwYXJzZSBhcyBzdHJpbmcgdG8gc2VlIHRoZSAwXG5cdC8vIHdlIGRvIHRoYXQgYWxzbyBmb3IgYWxsIGJpbmRpbmdzIGJlY2F1c2Ugb3RoZXJ3aXNlIHRoZSBtZGMgRmllbGQgaXNuJ3QgZWRpdGFibGVcblx0aWYgKFxuXHRcdCEoZm9ybWF0T3B0aW9ucyAmJiBmb3JtYXRPcHRpb25zLnNob3dOdW1iZXIgPT09IGZhbHNlKSAmJlxuXHRcdChwYXJhbT8udHlwZT8uaW5kZXhPZihcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLkludFwiKSA9PT0gMCB8fFxuXHRcdFx0cGFyYW0/LnR5cGUgPT09IFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuRGVjaW1hbFwiIHx8XG5cdFx0XHRwYXJhbT8udHlwZSA9PT0gXCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5Eb3VibGVcIilcblx0KSB7XG5cdFx0aWYgKHBhcmFtPy50eXBlID09PSBcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLkludDY0XCIgfHwgcGFyYW0/LnR5cGUgPT09IFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuRGVjaW1hbFwiKSB7XG5cdFx0XHQvL3NhcC51aS5tb2RlbC5vZGF0YS50eXBlLkludDY0IGRvIG5vdCBzdXBwb3J0IHBhcnNlQXNTdHJpbmcgZmFsc2Vcblx0XHRcdGZvcm1hdE9wdGlvbnMgPVxuXHRcdFx0XHRmb3JtYXRPcHRpb25zPy5zaG93TWVhc3VyZSA9PT0gZmFsc2Vcblx0XHRcdFx0XHQ/IHtcblx0XHRcdFx0XHRcdFx0c2hvd01lYXN1cmU6IGZhbHNlLFxuXHRcdFx0XHRcdFx0XHRkZWNpbWFsUGFkZGluZzogZm9ybWF0T3B0aW9ucy5kZWNpbWFsUGFkZGluZyxcblx0XHRcdFx0XHRcdFx0ZW1wdHlTdHJpbmc6IGZvcm1hdE9wdGlvbnM/LmVtcHR5U3RyaW5nXG5cdFx0XHRcdFx0ICB9XG5cdFx0XHRcdFx0OiB7XG5cdFx0XHRcdFx0XHRcdGRlY2ltYWxQYWRkaW5nOiBmb3JtYXRPcHRpb25zPy5kZWNpbWFsUGFkZGluZyxcblx0XHRcdFx0XHRcdFx0ZW1wdHlTdHJpbmc6IGZvcm1hdE9wdGlvbnM/LmVtcHR5U3RyaW5nXG5cdFx0XHRcdFx0ICB9O1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRmb3JtYXRPcHRpb25zID1cblx0XHRcdFx0Zm9ybWF0T3B0aW9ucz8uc2hvd01lYXN1cmUgPT09IGZhbHNlXG5cdFx0XHRcdFx0PyB7XG5cdFx0XHRcdFx0XHRcdHBhcnNlQXNTdHJpbmc6IGZhbHNlLFxuXHRcdFx0XHRcdFx0XHRzaG93TWVhc3VyZTogZmFsc2UsXG5cdFx0XHRcdFx0XHRcdGRlY2ltYWxQYWRkaW5nOiBmb3JtYXRPcHRpb25zLmRlY2ltYWxQYWRkaW5nLFxuXHRcdFx0XHRcdFx0XHRlbXB0eVN0cmluZzogZm9ybWF0T3B0aW9ucz8uZW1wdHlTdHJpbmdcblx0XHRcdFx0XHQgIH1cblx0XHRcdFx0XHQ6IHtcblx0XHRcdFx0XHRcdFx0cGFyc2VBc1N0cmluZzogZmFsc2UsXG5cdFx0XHRcdFx0XHRcdGRlY2ltYWxQYWRkaW5nOiBmb3JtYXRPcHRpb25zPy5kZWNpbWFsUGFkZGluZyxcblx0XHRcdFx0XHRcdFx0ZW1wdHlTdHJpbmc6IGZvcm1hdE9wdGlvbnM/LmVtcHR5U3RyaW5nXG5cdFx0XHRcdFx0ICB9O1xuXHRcdH1cblx0XHRpZiAocGFyYW0/LmNvbnN0cmFpbnRzPy5udWxsYWJsZSAhPT0gZmFsc2UpIHtcblx0XHRcdGZvcm1hdE9wdGlvbnMuZW1wdHlTdHJpbmcgPSBudWxsO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRmb3JtYXRPcHRpb25zLmVtcHR5U3RyaW5nID8/PSAwO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gZm9ybWF0T3B0aW9ucztcbn1cbi8qKlxuICogRnVuY3Rpb24gY2FsbCwgb3B0aW9uYWxseSB3aXRoIGFyZ3VtZW50cy5cbiAqIEBwYXJhbSBmdW5jIEZ1bmN0aW9uIG5hbWUgb3IgcmVmZXJlbmNlIHRvIGZ1bmN0aW9uXG4gKiBAcGFyYW0gcGFyYW1ldGVycyBBcmd1bWVudHNcbiAqIEBwYXJhbSBvbiBPYmplY3QgdG8gY2FsbCB0aGUgZnVuY3Rpb24gb25cbiAqIEBwYXJhbSBpc0Zvcm1hdHRpbmdGblxuICogQHJldHVybnMgRXhwcmVzc2lvbiByZXByZXNlbnRpbmcgdGhlIGZ1bmN0aW9uIGNhbGwgKG5vdCB0aGUgcmVzdWx0IG9mIHRoZSBmdW5jdGlvbiBjYWxsISlcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZuPFQsIFUgZXh0ZW5kcyBGdW5jdGlvbk9yTmFtZTxUPj4oXG5cdGZ1bmM6IFUsXG5cdHBhcmFtZXRlcnM6IFdyYXBwZWRUdXBsZTxGdW5jdGlvblBhcmFtZXRlcnM8VCwgVT4+LFxuXHRvbj86IEV4cHJlc3Npb25PclByaW1pdGl2ZTxvYmplY3Q+LFxuXHRpc0Zvcm1hdHRpbmdGbiA9IGZhbHNlXG4pOiBGdW5jdGlvbkV4cHJlc3Npb248VD4ge1xuXHRjb25zdCBmdW5jdGlvbk5hbWUgPSB0eXBlb2YgZnVuYyA9PT0gXCJzdHJpbmdcIiA/IGZ1bmMgOiBmdW5jLl9fZnVuY3Rpb25OYW1lO1xuXHRyZXR1cm4ge1xuXHRcdF90eXBlOiBcIkZ1bmN0aW9uXCIsXG5cdFx0b2JqOiBvbiAhPT0gdW5kZWZpbmVkID8gd3JhcFByaW1pdGl2ZShvbikgOiB1bmRlZmluZWQsXG5cdFx0Zm46IGZ1bmN0aW9uTmFtZSxcblx0XHRpc0Zvcm1hdHRpbmdGbjogaXNGb3JtYXR0aW5nRm4sXG5cdFx0cGFyYW1ldGVyczogKHBhcmFtZXRlcnMgYXMgRXhwcmVzc2lvbk9yUHJpbWl0aXZlPFByaW1pdGl2ZVR5cGU+W10pLm1hcCh3cmFwUHJpbWl0aXZlKVxuXHR9O1xufVxuXG4vKipcbiAqIFNob3J0Y3V0IGZ1bmN0aW9uIHRvIGRldGVybWluZSBpZiBhIGJpbmRpbmcgdmFsdWUgaXMgbnVsbCwgdW5kZWZpbmVkIG9yIGVtcHR5LlxuICogQHBhcmFtIGV4cHJlc3Npb25cbiAqIEByZXR1cm5zIEEgQm9vbGVhbiBleHByZXNzaW9uIGV2YWx1YXRpbmcgdGhlIGZhY3QgdGhhdCB0aGUgY3VycmVudCBlbGVtZW50IGlzIGVtcHR5XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0VtcHR5KGV4cHJlc3Npb246IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxzdHJpbmc+KTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+IHtcblx0Y29uc3QgYUJpbmRpbmdzOiBFeHByZXNzaW9uT3JQcmltaXRpdmU8Ym9vbGVhbj5bXSA9IFtdO1xuXHR0cmFuc2Zvcm1SZWN1cnNpdmVseShleHByZXNzaW9uLCBcIlBhdGhJbk1vZGVsXCIsIChleHByKSA9PiB7XG5cdFx0Y29uc3QgZmluYWxFeHByZXNzaW9uID0geyAuLi5leHByLCBhbHdheXNLZWVwVGFyZ2V0VHlwZTogdHJ1ZSB9IGFzIFBhdGhJbk1vZGVsRXhwcmVzc2lvbjxzdHJpbmc+O1xuXHRcdGFCaW5kaW5ncy5wdXNoKG9yKGVxdWFsKGZpbmFsRXhwcmVzc2lvbiwgXCJcIiksIGVxdWFsKGV4cHIsIHVuZGVmaW5lZCksIGVxdWFsKGV4cHIsIG51bGwpKSk7XG5cdFx0cmV0dXJuIGV4cHI7XG5cdH0pO1xuXHRyZXR1cm4gYW5kKC4uLmFCaW5kaW5ncyk7XG59XG4vKipcbiAqIFNob3J0Y3V0IGZ1bmN0aW9uIHRvIGRldGVybWluZSBpZiBhIGJpbmRpbmcgY2FuIGJlIHN0YXRpY2FsbHkgcmVzb2x2YWJsZS5cbiAqIEBwYXJhbSBleHAgVGhlIGV4cHJlc3Npb24gdG8gZXZhbHVhdGVcbiAqIEByZXR1cm5zIEEgQm9vbGVhbiBldmFsdWF0aW5nIGlmIHRoZXJlIGlzIG5vIHJlbGF0aXZlIHBhdGggZGVwZW5kZW50IG9uIHRoZSBjdXJyZW50IGNvbnRleHRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzRXhwcmVzc2lvblN0YXRpY2FsbHlSZXNvbHZhYmxlPFQgZXh0ZW5kcyBQcmltaXRpdmVUeXBlPihleHA6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxUPik6IGJvb2xlYW4ge1xuXHRjb25zdCByZWZlcmVuY2VkUGF0aHM6IHN0cmluZ1tdID0gW107XG5cdHRyYW5zZm9ybVJlY3Vyc2l2ZWx5KFxuXHRcdGV4cCxcblx0XHRcIlBhdGhJbk1vZGVsXCIsXG5cdFx0KHBhdGhFeHApID0+IHtcblx0XHRcdGlmIChwYXRoRXhwLm1vZGVsTmFtZSA9PT0gdW5kZWZpbmVkICYmIHR5cGVvZiBwYXRoRXhwLnBhdGggPT09IFwic3RyaW5nXCIpIHtcblx0XHRcdFx0cmVmZXJlbmNlZFBhdGhzLnB1c2gocGF0aEV4cC5wYXRoKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBwYXRoRXhwO1xuXHRcdH0sXG5cdFx0dHJ1ZVxuXHQpO1xuXHRpZiAocmVmZXJlbmNlZFBhdGhzLmxlbmd0aCA9PT0gMCkge1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdHJldHVybiByZWZlcmVuY2VkUGF0aHMuZXZlcnkoKHApID0+IHAuc3RhcnRzV2l0aChcIi9cIikpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0U3RhdGljYWxseVJlc29sdmFibGVFeHByZXNzaW9uPFQgZXh0ZW5kcyBQcmltaXRpdmVUeXBlPihcblx0ZXhwOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248VD4sXG5cdGRlZmF1bHRWYWx1ZTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFQ+XG4pOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248VD4ge1xuXHRpZiAoZXhwLl90eXBlID09PSBcIlNldFwiKSB7XG5cdFx0Y29uc3QgbmV3T3BlcmFuZHMgPSBleHAub3BlcmFuZHMubWFwKChvcGVyYW5kOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4pID0+IHtcblx0XHRcdGlmIChpc0V4cHJlc3Npb25TdGF0aWNhbGx5UmVzb2x2YWJsZShvcGVyYW5kKSB8fCBpc0NvbnN0YW50KG9wZXJhbmQpKSB7XG5cdFx0XHRcdHJldHVybiBvcGVyYW5kO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cmV0dXJuIGRlZmF1bHRWYWx1ZTtcblx0XHRcdH1cblx0XHR9KTtcblxuXHRcdGlmIChleHAub3BlcmF0b3IgPT09IFwifHxcIikge1xuXHRcdFx0cmV0dXJuIG9yKC4uLihuZXdPcGVyYW5kcyBhcyB1bmtub3duIGFzIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPltdKSkgYXMgdW5rbm93biBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248VD47XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiBhbmQoLi4uKG5ld09wZXJhbmRzIGFzIHVua25vd24gYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+W10pKSBhcyB1bmtub3duIGFzIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxUPjtcblx0XHR9XG5cdH1cblx0cmV0dXJuIGlzRXhwcmVzc2lvblN0YXRpY2FsbHlSZXNvbHZhYmxlKGV4cCkgPyBleHAgOiBkZWZhdWx0VmFsdWU7XG59XG5cbi8qKlxuICogRnVuY3Rpb24gdXNlZCB0byBjb25jYXRlbmF0ZSBtdWx0aXBsZSBleHByZXNzaW9ucy5cbiAqIEBwYXJhbSBpbkV4cHJlc3Npb25zIFRoZSBleHByZXNzaW9ucyB0byBjb25jYXRlbmF0ZVxuICogQHJldHVybnMgVGhlIGNvbmNhdGVuYXRlZCBleHByZXNzaW9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb25jYXQoLi4uaW5FeHByZXNzaW9uczogRXhwcmVzc2lvbk9yUHJpbWl0aXZlPHN0cmluZz5bXSk6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxzdHJpbmc+IHtcblx0Y29uc3QgZXhwcmVzc2lvbnMgPSBpbkV4cHJlc3Npb25zLm1hcCh3cmFwUHJpbWl0aXZlKTtcblx0aWYgKGhhc1VucmVzb2x2YWJsZUV4cHJlc3Npb24oLi4uZXhwcmVzc2lvbnMpKSB7XG5cdFx0cmV0dXJuIHVucmVzb2x2YWJsZUV4cHJlc3Npb247XG5cdH1cblx0aWYgKGV4cHJlc3Npb25zLmV2ZXJ5KGlzQ29uc3RhbnQpKSB7XG5cdFx0cmV0dXJuIGNvbnN0YW50KFxuXHRcdFx0ZXhwcmVzc2lvbnMucmVkdWNlKChjb25jYXRlbmF0ZWQ6IHN0cmluZywgdmFsdWUpID0+IHtcblx0XHRcdFx0aWYgKHZhbHVlLnZhbHVlICE9PSB1bmRlZmluZWQgJiYgdmFsdWUudmFsdWUgIT09IG51bGwpIHtcblx0XHRcdFx0XHRyZXR1cm4gY29uY2F0ZW5hdGVkICsgdmFsdWUudmFsdWUudG9TdHJpbmcoKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gY29uY2F0ZW5hdGVkO1xuXHRcdFx0fSwgXCJcIilcblx0XHQpO1xuXHR9IGVsc2UgaWYgKGV4cHJlc3Npb25zLnNvbWUoaXNDb21wbGV4VHlwZUV4cHJlc3Npb24pKSB7XG5cdFx0bGV0IHBhdGhJZHggPSAwO1xuXHRcdGNvbnN0IG15Q29uY2F0RXhwcmVzc2lvbiA9IGZvcm1hdFJlc3VsdChleHByZXNzaW9ucywgXCIuX2Zvcm1hdHRlcnMuU3RhbmRhcmRGb3JtYXR0ZXIjY29uY2F0XCIsIHVuZGVmaW5lZCwgdHJ1ZSk7XG5cdFx0Y29uc3QgYWxsUGFydHMgPSBbXTtcblx0XHR0cmFuc2Zvcm1SZWN1cnNpdmVseShteUNvbmNhdEV4cHJlc3Npb24sIFwiUGF0aEluTW9kZWxcIiwgKGNvbnN0YW50UGF0aDogUGF0aEluTW9kZWxFeHByZXNzaW9uPHVua25vd24+KSA9PiB7XG5cdFx0XHRhbGxQYXJ0cy5wdXNoKGNvbnN0YW50UGF0aCk7XG5cdFx0XHRyZXR1cm4gcGF0aEluTW9kZWwoYCQke3BhdGhJZHgrK31gLCBcIiRcIik7XG5cdFx0fSk7XG5cdFx0YWxsUGFydHMudW5zaGlmdChjb25zdGFudChKU09OLnN0cmluZ2lmeShteUNvbmNhdEV4cHJlc3Npb24pKSk7XG5cdFx0cmV0dXJuIGZvcm1hdFJlc3VsdChhbGxQYXJ0cywgXCIuX2Zvcm1hdHRlcnMuU3RhbmRhcmRGb3JtYXR0ZXIuYmluZCgkY29udHJvbCkjZXZhbHVhdGVDb21wbGV4RXhwcmVzc2lvblwiLCB1bmRlZmluZWQsIHRydWUpO1xuXHR9XG5cdHJldHVybiB7XG5cdFx0X3R5cGU6IFwiQ29uY2F0XCIsXG5cdFx0ZXhwcmVzc2lvbnM6IGV4cHJlc3Npb25zXG5cdH07XG59XG5cbi8qKlxuICogQ29uY2F0ZW5hdGUgbXVsdGlwbGUgZXhwcmVzc2lvbnMgd2l0aCBhIHNlcGFyYXRvci5cbiAqIEBwYXJhbSBzZXBhcmF0b3IgVGhlIHNlcGFyYXRvciB0byBpbnNlcnQgYmV0d2VlbiBleHByZXNzaW9uc1xuICogQHBhcmFtIGluRXhwcmVzc2lvbnMgRXhwcmVzc2lvbnMgdG8gY29uY2F0ZW5hdGVcbiAqIEByZXR1cm5zIFRoZSBjb25jYXRlbmF0ZWQgZXhwcmVzc2lvblxuICovXG5leHBvcnQgZnVuY3Rpb24gY29uY2F0V2l0aFNlcGFyYXRvcihcblx0c2VwYXJhdG9yOiBzdHJpbmcsXG5cdC4uLmluRXhwcmVzc2lvbnM6IEV4cHJlc3Npb25PclByaW1pdGl2ZTxzdHJpbmc+W11cbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxzdHJpbmc+IHtcblx0Y29uc3QgZXhwcmVzc2lvbnMgPSBpbkV4cHJlc3Npb25zLm1hcCh3cmFwUHJpbWl0aXZlKTtcblx0aWYgKGhhc1VucmVzb2x2YWJsZUV4cHJlc3Npb24oLi4uZXhwcmVzc2lvbnMpKSB7XG5cdFx0cmV0dXJuIHVucmVzb2x2YWJsZUV4cHJlc3Npb247XG5cdH1cblxuXHRjb25zdCBzZXBhcmF0b3JDb25zdGFudCA9IGNvbnN0YW50KHNlcGFyYXRvcik7XG5cblx0aWYgKGV4cHJlc3Npb25zLmV2ZXJ5KGlzQ29uc3RhbnQpKSB7XG5cdFx0cmV0dXJuIGNvbnN0YW50KFxuXHRcdFx0ZXhwcmVzc2lvbnMucmVkdWNlKChjb25jYXRlbmF0ZWQ6IHN0cmluZywgdmFsdWUsIGluZGV4KSA9PiB7XG5cdFx0XHRcdGNvbnN0IGNvbnN0YW50VmFsdWUgPSB2YWx1ZTtcblx0XHRcdFx0aWYgKGNvbnN0YW50VmFsdWUudmFsdWUgIT09IHVuZGVmaW5lZCAmJiBjb25zdGFudFZhbHVlLnZhbHVlICE9PSBudWxsKSB7XG5cdFx0XHRcdFx0Y29uc3QgcHJlZml4ID0gaW5kZXggPiAwID8gc2VwYXJhdG9yIDogXCJcIjtcblx0XHRcdFx0XHRyZXR1cm4gY29uY2F0ZW5hdGVkICsgcHJlZml4ICsgY29uc3RhbnRWYWx1ZS52YWx1ZS50b1N0cmluZygpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBjb25jYXRlbmF0ZWQ7XG5cdFx0XHR9LCBcIlwiKVxuXHRcdCk7XG5cdH1cblxuXHQvLyBJbnRlcmxlYXZlIHNlcGFyYXRvciBjb25zdGFudHMgYmV0d2VlbiBleHByZXNzaW9uc1xuXHRjb25zdCBleHByZXNzaW9uc1dpdGhTZXBhcmF0b3JzOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248c3RyaW5nPltdID0gW107XG5cdGV4cHJlc3Npb25zLmZvckVhY2goKGV4cHIsIGluZGV4KSA9PiB7XG5cdFx0aWYgKGluZGV4ID4gMCkge1xuXHRcdFx0ZXhwcmVzc2lvbnNXaXRoU2VwYXJhdG9ycy5wdXNoKHNlcGFyYXRvckNvbnN0YW50KTtcblx0XHR9XG5cdFx0ZXhwcmVzc2lvbnNXaXRoU2VwYXJhdG9ycy5wdXNoKGV4cHIpO1xuXHR9KTtcblxuXHRpZiAoZXhwcmVzc2lvbnNXaXRoU2VwYXJhdG9ycy5zb21lKGlzQ29tcGxleFR5cGVFeHByZXNzaW9uKSkge1xuXHRcdGxldCBwYXRoSWR4ID0gMDtcblx0XHRjb25zdCBteUNvbmNhdEV4cHJlc3Npb24gPSBmb3JtYXRSZXN1bHQoZXhwcmVzc2lvbnNXaXRoU2VwYXJhdG9ycywgXCIuX2Zvcm1hdHRlcnMuU3RhbmRhcmRGb3JtYXR0ZXIjY29uY2F0XCIsIHVuZGVmaW5lZCwgdHJ1ZSk7XG5cdFx0Y29uc3QgYWxsUGFydHMgPSBbXTtcblx0XHR0cmFuc2Zvcm1SZWN1cnNpdmVseShteUNvbmNhdEV4cHJlc3Npb24sIFwiUGF0aEluTW9kZWxcIiwgKGNvbnN0YW50UGF0aDogUGF0aEluTW9kZWxFeHByZXNzaW9uPHVua25vd24+KSA9PiB7XG5cdFx0XHRhbGxQYXJ0cy5wdXNoKGNvbnN0YW50UGF0aCk7XG5cdFx0XHRyZXR1cm4gcGF0aEluTW9kZWwoYCQke3BhdGhJZHgrK31gLCBcIiRcIik7XG5cdFx0fSk7XG5cdFx0YWxsUGFydHMudW5zaGlmdChjb25zdGFudChKU09OLnN0cmluZ2lmeShteUNvbmNhdEV4cHJlc3Npb24pKSk7XG5cdFx0cmV0dXJuIGZvcm1hdFJlc3VsdChhbGxQYXJ0cywgXCIuX2Zvcm1hdHRlcnMuU3RhbmRhcmRGb3JtYXR0ZXIuYmluZCgkY29udHJvbCkjZXZhbHVhdGVDb21wbGV4RXhwcmVzc2lvblwiLCB1bmRlZmluZWQsIHRydWUpO1xuXHR9XG5cblx0cmV0dXJuIHtcblx0XHRfdHlwZTogXCJDb25jYXRcIixcblx0XHRleHByZXNzaW9uczogZXhwcmVzc2lvbnNXaXRoU2VwYXJhdG9yc1xuXHR9O1xufVxuXG50eXBlIEV4cHJlc3Npb25UeXBlVG9FeHByZXNzaW9uPFQgZXh0ZW5kcyBFeHByZXNzaW9uVHlwZSwgVj4gPSBUIGV4dGVuZHMgXCJDb25zdGFudFwiXG5cdD8gQ29uc3RhbnRFeHByZXNzaW9uPFY+XG5cdDogVCBleHRlbmRzIFwiUGF0aEluTW9kZWxcIlxuXHQ/IFBhdGhJbk1vZGVsRXhwcmVzc2lvbjxWPlxuXHQ6IFQgZXh0ZW5kcyBcIkZ1bmN0aW9uXCJcblx0PyBGdW5jdGlvbkV4cHJlc3Npb248Vj5cblx0OiBUIGV4dGVuZHMgXCJVbnJlc29sdmFibGVcIlxuXHQ/IFVucmVzb2x2YWJsZVBhdGhFeHByZXNzaW9uXG5cdDogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFY+O1xuXG5leHBvcnQgdHlwZSBUcmFuc2Zvcm1GdW5jdGlvbjxULCBWPiA9IChleHByZXNzaW9uUGFydDogVCkgPT4gQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFY+O1xuZXhwb3J0IHR5cGUgRXhwcmVzc2lvblR5cGUgPSBQaWNrPEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjx1bmtub3duPiwgXCJfdHlwZVwiPltcIl90eXBlXCJdO1xuXG5leHBvcnQgZnVuY3Rpb24gdHJhbnNmb3JtUmVjdXJzaXZlbHk8VCBleHRlbmRzIFByaW1pdGl2ZVR5cGUgfCB1bmtub3duLCBFVCBleHRlbmRzIEV4cHJlc3Npb25UeXBlPihcblx0aW5FeHByZXNzaW9uOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248VD4sXG5cdGV4cHJlc3Npb25UeXBlOiBFVCxcblx0dHJhbnNmb3JtRnVuY3Rpb246IFRyYW5zZm9ybUZ1bmN0aW9uPEV4cHJlc3Npb25UeXBlVG9FeHByZXNzaW9uPEVULCBUPiwgVD4sXG5cdGluY2x1ZGVBbGxFeHByZXNzaW9uID0gZmFsc2Vcbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxUPiB7XG5cdGxldCBleHByZXNzaW9uOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248VD4gPSBpbkV4cHJlc3Npb247XG5cdHN3aXRjaCAoZXhwcmVzc2lvbi5fdHlwZSkge1xuXHRcdGNhc2UgXCJGdW5jdGlvblwiOlxuXHRcdGNhc2UgXCJGb3JtYXR0ZXJcIjpcblx0XHRcdGV4cHJlc3Npb24ucGFyYW1ldGVycyA9IGV4cHJlc3Npb24ucGFyYW1ldGVycy5tYXAoKHBhcmFtZXRlcikgPT5cblx0XHRcdFx0dHJhbnNmb3JtUmVjdXJzaXZlbHkocGFyYW1ldGVyIGFzIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxUPiwgZXhwcmVzc2lvblR5cGUsIHRyYW5zZm9ybUZ1bmN0aW9uLCBpbmNsdWRlQWxsRXhwcmVzc2lvbilcblx0XHRcdCk7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFwiQ29uY2F0XCI6XG5cdFx0XHRleHByZXNzaW9uLmV4cHJlc3Npb25zID0gZXhwcmVzc2lvbi5leHByZXNzaW9ucy5tYXAoKHN1YkV4cHJlc3Npb24pID0+XG5cdFx0XHRcdHRyYW5zZm9ybVJlY3Vyc2l2ZWx5KFxuXHRcdFx0XHRcdHN1YkV4cHJlc3Npb24sXG5cdFx0XHRcdFx0ZXhwcmVzc2lvblR5cGUsXG5cdFx0XHRcdFx0dHJhbnNmb3JtRnVuY3Rpb24gYXMgdW5rbm93biBhcyBUcmFuc2Zvcm1GdW5jdGlvbjxFeHByZXNzaW9uVHlwZVRvRXhwcmVzc2lvbjxFVCwgc3RyaW5nPiwgc3RyaW5nPixcblx0XHRcdFx0XHRpbmNsdWRlQWxsRXhwcmVzc2lvblxuXHRcdFx0XHQpXG5cdFx0XHQpO1xuXHRcdFx0ZXhwcmVzc2lvbiA9IGNvbmNhdCguLi5leHByZXNzaW9uLmV4cHJlc3Npb25zKSBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248VD47XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFwiQ29tcGxleFR5cGVcIjpcblx0XHRcdGV4cHJlc3Npb24uYmluZGluZ1BhcmFtZXRlcnMgPSBleHByZXNzaW9uLmJpbmRpbmdQYXJhbWV0ZXJzLm1hcCgoYmluZGluZ1BhcmFtZXRlcikgPT5cblx0XHRcdFx0dHJhbnNmb3JtUmVjdXJzaXZlbHkoXG5cdFx0XHRcdFx0YmluZGluZ1BhcmFtZXRlciBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248VD4sXG5cdFx0XHRcdFx0ZXhwcmVzc2lvblR5cGUsXG5cdFx0XHRcdFx0dHJhbnNmb3JtRnVuY3Rpb24sXG5cdFx0XHRcdFx0aW5jbHVkZUFsbEV4cHJlc3Npb25cblx0XHRcdFx0KVxuXHRcdFx0KTtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgXCJJZkVsc2VcIjpcblx0XHRcdGNvbnN0IG9uVHJ1ZSA9IHRyYW5zZm9ybVJlY3Vyc2l2ZWx5KFxuXHRcdFx0XHRleHByZXNzaW9uLm9uVHJ1ZSxcblx0XHRcdFx0ZXhwcmVzc2lvblR5cGUsXG5cdFx0XHRcdHRyYW5zZm9ybUZ1bmN0aW9uIGFzIHVua25vd24gYXMgVHJhbnNmb3JtRnVuY3Rpb248RXhwcmVzc2lvblR5cGVUb0V4cHJlc3Npb248RVQsIHVua25vd24+LCB1bmtub3duPixcblx0XHRcdFx0aW5jbHVkZUFsbEV4cHJlc3Npb25cblx0XHRcdCk7XG5cdFx0XHRjb25zdCBvbkZhbHNlID0gdHJhbnNmb3JtUmVjdXJzaXZlbHkoXG5cdFx0XHRcdGV4cHJlc3Npb24ub25GYWxzZSxcblx0XHRcdFx0ZXhwcmVzc2lvblR5cGUsXG5cdFx0XHRcdHRyYW5zZm9ybUZ1bmN0aW9uIGFzIHVua25vd24gYXMgVHJhbnNmb3JtRnVuY3Rpb248RXhwcmVzc2lvblR5cGVUb0V4cHJlc3Npb248RVQsIHVua25vd24+LCB1bmtub3duPixcblx0XHRcdFx0aW5jbHVkZUFsbEV4cHJlc3Npb25cblx0XHRcdCk7XG5cdFx0XHRsZXQgY29uZGl0aW9uID0gZXhwcmVzc2lvbi5jb25kaXRpb247XG5cdFx0XHRpZiAoaW5jbHVkZUFsbEV4cHJlc3Npb24pIHtcblx0XHRcdFx0Y29uZGl0aW9uID0gdHJhbnNmb3JtUmVjdXJzaXZlbHkoXG5cdFx0XHRcdFx0ZXhwcmVzc2lvbi5jb25kaXRpb24sXG5cdFx0XHRcdFx0ZXhwcmVzc2lvblR5cGUsXG5cdFx0XHRcdFx0dHJhbnNmb3JtRnVuY3Rpb24gYXMgdW5rbm93biBhcyBUcmFuc2Zvcm1GdW5jdGlvbjxFeHByZXNzaW9uVHlwZVRvRXhwcmVzc2lvbjxFVCwgYm9vbGVhbj4sIGJvb2xlYW4+LFxuXHRcdFx0XHRcdGluY2x1ZGVBbGxFeHByZXNzaW9uXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0XHRleHByZXNzaW9uID0gaWZFbHNlKGNvbmRpdGlvbiwgb25UcnVlLCBvbkZhbHNlKSBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248VD47XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFwiTm90XCI6XG5cdFx0XHRpZiAoaW5jbHVkZUFsbEV4cHJlc3Npb24pIHtcblx0XHRcdFx0Y29uc3Qgb3BlcmFuZCA9IHRyYW5zZm9ybVJlY3Vyc2l2ZWx5KFxuXHRcdFx0XHRcdGV4cHJlc3Npb24ub3BlcmFuZCxcblx0XHRcdFx0XHRleHByZXNzaW9uVHlwZSxcblx0XHRcdFx0XHR0cmFuc2Zvcm1GdW5jdGlvbiBhcyB1bmtub3duIGFzIFRyYW5zZm9ybUZ1bmN0aW9uPEV4cHJlc3Npb25UeXBlVG9FeHByZXNzaW9uPEVULCBib29sZWFuPiwgYm9vbGVhbj4sXG5cdFx0XHRcdFx0aW5jbHVkZUFsbEV4cHJlc3Npb25cblx0XHRcdFx0KTtcblx0XHRcdFx0ZXhwcmVzc2lvbiA9IG5vdChvcGVyYW5kKSBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248VD47XG5cdFx0XHR9XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFwiVHJ1dGh5XCI6XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFwiU2V0XCI6XG5cdFx0XHRpZiAoaW5jbHVkZUFsbEV4cHJlc3Npb24pIHtcblx0XHRcdFx0Y29uc3Qgb3BlcmFuZHMgPSBleHByZXNzaW9uLm9wZXJhbmRzLm1hcCgob3BlcmFuZCkgPT5cblx0XHRcdFx0XHR0cmFuc2Zvcm1SZWN1cnNpdmVseShcblx0XHRcdFx0XHRcdG9wZXJhbmQsXG5cdFx0XHRcdFx0XHRleHByZXNzaW9uVHlwZSxcblx0XHRcdFx0XHRcdHRyYW5zZm9ybUZ1bmN0aW9uIGFzIHVua25vd24gYXMgVHJhbnNmb3JtRnVuY3Rpb248RXhwcmVzc2lvblR5cGVUb0V4cHJlc3Npb248RVQsIGJvb2xlYW4+LCBib29sZWFuPixcblx0XHRcdFx0XHRcdGluY2x1ZGVBbGxFeHByZXNzaW9uXG5cdFx0XHRcdFx0KVxuXHRcdFx0XHQpO1xuXHRcdFx0XHRleHByZXNzaW9uID1cblx0XHRcdFx0XHRleHByZXNzaW9uLm9wZXJhdG9yID09PSBcInx8XCJcblx0XHRcdFx0XHRcdD8gKG9yKC4uLm9wZXJhbmRzKSBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248VD4pXG5cdFx0XHRcdFx0XHQ6IChhbmQoLi4ub3BlcmFuZHMpIGFzIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxUPik7XG5cdFx0XHR9XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFwiQ29tcGFyaXNvblwiOlxuXHRcdFx0aWYgKGluY2x1ZGVBbGxFeHByZXNzaW9uKSB7XG5cdFx0XHRcdGNvbnN0IG9wZXJhbmQxID0gdHJhbnNmb3JtUmVjdXJzaXZlbHkoXG5cdFx0XHRcdFx0ZXhwcmVzc2lvbi5vcGVyYW5kMSBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248VD4sXG5cdFx0XHRcdFx0ZXhwcmVzc2lvblR5cGUsXG5cdFx0XHRcdFx0dHJhbnNmb3JtRnVuY3Rpb24sXG5cdFx0XHRcdFx0aW5jbHVkZUFsbEV4cHJlc3Npb25cblx0XHRcdFx0KTtcblx0XHRcdFx0Y29uc3Qgb3BlcmFuZDIgPSB0cmFuc2Zvcm1SZWN1cnNpdmVseShcblx0XHRcdFx0XHRleHByZXNzaW9uLm9wZXJhbmQyIGFzIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxUPixcblx0XHRcdFx0XHRleHByZXNzaW9uVHlwZSxcblx0XHRcdFx0XHR0cmFuc2Zvcm1GdW5jdGlvbixcblx0XHRcdFx0XHRpbmNsdWRlQWxsRXhwcmVzc2lvblxuXHRcdFx0XHQpO1xuXHRcdFx0XHRleHByZXNzaW9uID0gY29tcGFyaXNvbihleHByZXNzaW9uLm9wZXJhdG9yLCBvcGVyYW5kMSwgb3BlcmFuZDIpIGFzIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxUPjtcblx0XHRcdH1cblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgXCJBcml0aG1ldGljXCI6XG5cdFx0XHRjb25zdCBvcGVyYW5kMSA9IHRyYW5zZm9ybVJlY3Vyc2l2ZWx5KFxuXHRcdFx0XHRleHByZXNzaW9uLm9wZXJhbmQxIGFzIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxUPixcblx0XHRcdFx0ZXhwcmVzc2lvblR5cGUsXG5cdFx0XHRcdHRyYW5zZm9ybUZ1bmN0aW9uLFxuXHRcdFx0XHRpbmNsdWRlQWxsRXhwcmVzc2lvblxuXHRcdFx0KTtcblx0XHRcdGNvbnN0IG9wZXJhbmQyID0gdHJhbnNmb3JtUmVjdXJzaXZlbHkoXG5cdFx0XHRcdGV4cHJlc3Npb24ub3BlcmFuZDIgYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFQ+LFxuXHRcdFx0XHRleHByZXNzaW9uVHlwZSxcblx0XHRcdFx0dHJhbnNmb3JtRnVuY3Rpb24sXG5cdFx0XHRcdGluY2x1ZGVBbGxFeHByZXNzaW9uXG5cdFx0XHQpO1xuXHRcdFx0ZXhwcmVzc2lvbiA9IGFyaXRobWV0aWMoZXhwcmVzc2lvbi5vcGVyYXRvciwgb3BlcmFuZDEsIG9wZXJhbmQyKSBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248VD47XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFwiQ29uc3RhbnRcIjpcblx0XHRcdGNvbnN0IGNvbnN0YW50VmFsdWU6IFJlY29yZDxzdHJpbmcsIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjx1bmtub3duPj4gPSBleHByZXNzaW9uLnZhbHVlIGFzIFJlY29yZDxcblx0XHRcdFx0c3RyaW5nLFxuXHRcdFx0XHRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248dW5rbm93bj5cblx0XHRcdD47XG5cdFx0XHRpZiAodHlwZW9mIGNvbnN0YW50VmFsdWUgPT09IFwib2JqZWN0XCIgJiYgY29uc3RhbnRWYWx1ZSkge1xuXHRcdFx0XHRPYmplY3Qua2V5cyhjb25zdGFudFZhbHVlKS5mb3JFYWNoKChrZXkpID0+IHtcblx0XHRcdFx0XHRjb25zdGFudFZhbHVlW2tleV0gPSB0cmFuc2Zvcm1SZWN1cnNpdmVseShcblx0XHRcdFx0XHRcdGNvbnN0YW50VmFsdWVba2V5XSxcblx0XHRcdFx0XHRcdGV4cHJlc3Npb25UeXBlLFxuXHRcdFx0XHRcdFx0dHJhbnNmb3JtRnVuY3Rpb24gYXMgdW5rbm93biBhcyBUcmFuc2Zvcm1GdW5jdGlvbjxFeHByZXNzaW9uVHlwZVRvRXhwcmVzc2lvbjxFVCwgdW5rbm93bj4sIHVua25vd24+LFxuXHRcdFx0XHRcdFx0aW5jbHVkZUFsbEV4cHJlc3Npb25cblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgXCJSZWZcIjpcblx0XHRjYXNlIFwiTGVuZ3RoXCI6XG5cdFx0Y2FzZSBcIlBhdGhJbk1vZGVsXCI6XG5cdFx0Y2FzZSBcIkVtYmVkZGVkQmluZGluZ1wiOlxuXHRcdGNhc2UgXCJFbWJlZGRlZEV4cHJlc3Npb25CaW5kaW5nXCI6XG5cdFx0Y2FzZSBcIlVucmVzb2x2YWJsZVwiOlxuXHRcdFx0Ly8gRG8gbm90aGluZ1xuXHRcdFx0YnJlYWs7XG5cdH1cblx0aWYgKGV4cHJlc3Npb25UeXBlID09PSBleHByZXNzaW9uLl90eXBlKSB7XG5cdFx0ZXhwcmVzc2lvbiA9IHRyYW5zZm9ybUZ1bmN0aW9uKGluRXhwcmVzc2lvbiBhcyBFeHByZXNzaW9uVHlwZVRvRXhwcmVzc2lvbjxFVCwgVD4pO1xuXHR9XG5cdHJldHVybiBleHByZXNzaW9uO1xufVxuXG4vKipcbiAqIENvbXBpbGVkIEJpbmRpbmcgVG9vbGtpdCBFeHByZXNzaW9uXG4gKiBUaGlzIGlzIGEgdHlwZSByZXByZXNlbnRpbmcgdGhlIGNvbXBpbGVkIGZvcm0gb2YgYSBCaW5kaW5nIFRvb2xraXQgZXhwcmVzc2lvbiBhcyBhIGJpbmRpbmcgc3RyaW5nLlxuICovXG5leHBvcnQgdHlwZSBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiA9IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuY29uc3QgbmVlZFBhcmVudGhlc2lzID0gZnVuY3Rpb24gPFQgZXh0ZW5kcyBQcmltaXRpdmVUeXBlPihleHByOiBFeHByZXNzaW9uT3JQcmltaXRpdmU8VD4pOiBib29sZWFuIHtcblx0cmV0dXJuIChcblx0XHQhaXNDb25zdGFudChleHByKSAmJlxuXHRcdCFpc1BhdGhJbk1vZGVsRXhwcmVzc2lvbihleHByKSAmJlxuXHRcdGlzQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uKGV4cHIpICYmXG5cdFx0ZXhwci5fdHlwZSAhPT0gXCJJZkVsc2VcIiAmJlxuXHRcdGV4cHIuX3R5cGUgIT09IFwiRnVuY3Rpb25cIlxuXHQpO1xufTtcblxuLyoqXG4gKiBDb21waWxlcyBhIGNvbnN0YW50IG9iamVjdCB0byBhIHN0cmluZy5cbiAqIEBwYXJhbSBleHByXG4gKiBAcGFyYW0gaXNOdWxsYWJsZVxuICogQHJldHVybnMgVGhlIGNvbXBpbGVkIHN0cmluZ1xuICovXG5mdW5jdGlvbiBjb21waWxlQ29uc3RhbnRPYmplY3QoZXhwcjogQ29uc3RhbnRFeHByZXNzaW9uPG9iamVjdD4sIGlzTnVsbGFibGUgPSBmYWxzZSk6IHN0cmluZyB7XG5cdGlmIChpc051bGxhYmxlICYmIE9iamVjdC5rZXlzKGV4cHIudmFsdWUpLmxlbmd0aCA9PT0gMCkge1xuXHRcdHJldHVybiBcIlwiO1xuXHR9XG5cdGNvbnN0IG9iamVjdHMgPSBleHByLnZhbHVlIGFzIFBsYWluRXhwcmVzc2lvbk9iamVjdDtcblx0Y29uc3QgcHJvcGVydGllczogc3RyaW5nW10gPSBbXTtcblx0T2JqZWN0LmtleXMob2JqZWN0cykuZm9yRWFjaCgoa2V5KSA9PiB7XG5cdFx0Y29uc3QgdmFsdWUgPSBvYmplY3RzW2tleV07XG5cdFx0Y29uc3QgY2hpbGRSZXN1bHQgPSBjb21waWxlRXhwcmVzc2lvbih2YWx1ZSwgdHJ1ZSwgZmFsc2UsIGlzTnVsbGFibGUpO1xuXHRcdGlmIChjaGlsZFJlc3VsdCAmJiBjaGlsZFJlc3VsdC5sZW5ndGggPiAwKSB7XG5cdFx0XHRwcm9wZXJ0aWVzLnB1c2goYCR7a2V5fTogJHtjaGlsZFJlc3VsdH1gKTtcblx0XHR9XG5cdH0pO1xuXHRyZXR1cm4gYHske3Byb3BlcnRpZXMuam9pbihcIiwgXCIpfX1gO1xufVxuXG4vKipcbiAqIENvbXBpbGVzIGEgQ29uc3RhbnQgQmluZGluZyBFeHByZXNzaW9uLlxuICogQHBhcmFtIGV4cHJcbiAqIEBwYXJhbSBlbWJlZGRlZEluQmluZGluZ1xuICogQHBhcmFtIGlzTnVsbGFibGVcbiAqIEBwYXJhbSBkb05vdFN0cmluZ2lmeVxuICogQHJldHVybnMgVGhlIGNvbXBpbGVkIHN0cmluZ1xuICovXG5leHBvcnQgZnVuY3Rpb24gY29tcGlsZUNvbnN0YW50PFQgZXh0ZW5kcyBQcmltaXRpdmVUeXBlPihcblx0ZXhwcjogQ29uc3RhbnRFeHByZXNzaW9uPFQ+LFxuXHRlbWJlZGRlZEluQmluZGluZzogYm9vbGVhbixcblx0aXNOdWxsYWJsZT86IGJvb2xlYW4sXG5cdGRvTm90U3RyaW5naWZ5PzogZmFsc2Vcbik6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uO1xuZXhwb3J0IGZ1bmN0aW9uIGNvbXBpbGVDb25zdGFudDxUIGV4dGVuZHMgUHJpbWl0aXZlVHlwZT4oXG5cdGV4cHI6IENvbnN0YW50RXhwcmVzc2lvbjxUPixcblx0ZW1iZWRkZWRJbkJpbmRpbmc6IGJvb2xlYW4sXG5cdGlzTnVsbGFibGU/OiBib29sZWFuLFxuXHRkb05vdFN0cmluZ2lmeT86IHRydWVcbik6IFByaW1pdGl2ZVR5cGU7XG5leHBvcnQgZnVuY3Rpb24gY29tcGlsZUNvbnN0YW50PFQgZXh0ZW5kcyBQcmltaXRpdmVUeXBlPihcblx0ZXhwcjogQ29uc3RhbnRFeHByZXNzaW9uPFQ+LFxuXHRlbWJlZGRlZEluQmluZGluZzogYm9vbGVhbixcblx0aXNOdWxsYWJsZSA9IGZhbHNlLFxuXHRkb05vdFN0cmluZ2lmeSA9IGZhbHNlXG4pOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB8IFByaW1pdGl2ZVR5cGUge1xuXHRpZiAoZXhwci52YWx1ZSA9PT0gbnVsbCkge1xuXHRcdHJldHVybiBkb05vdFN0cmluZ2lmeSA/IG51bGwgOiBcIm51bGxcIjtcblx0fVxuXHRpZiAoZXhwci52YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0cmV0dXJuIGRvTm90U3RyaW5naWZ5ID8gdW5kZWZpbmVkIDogXCJ1bmRlZmluZWRcIjtcblx0fVxuXHRpZiAodHlwZW9mIGV4cHIudmFsdWUgPT09IFwib2JqZWN0XCIpIHtcblx0XHRpZiAoQXJyYXkuaXNBcnJheShleHByLnZhbHVlKSkge1xuXHRcdFx0Y29uc3QgZW50cmllcyA9IGV4cHIudmFsdWUubWFwKChleHByZXNzaW9uKSA9PiBjb21waWxlRXhwcmVzc2lvbihleHByZXNzaW9uLCB0cnVlKSk7XG5cdFx0XHRyZXR1cm4gYFske2VudHJpZXMuam9pbihcIiwgXCIpfV1gO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gY29tcGlsZUNvbnN0YW50T2JqZWN0KGV4cHIgYXMgQ29uc3RhbnRFeHByZXNzaW9uPG9iamVjdD4sIGlzTnVsbGFibGUpO1xuXHRcdH1cblx0fVxuXG5cdGlmIChlbWJlZGRlZEluQmluZGluZykge1xuXHRcdHN3aXRjaCAodHlwZW9mIGV4cHIudmFsdWUpIHtcblx0XHRcdGNhc2UgXCJudW1iZXJcIjpcblx0XHRcdGNhc2UgXCJiaWdpbnRcIjpcblx0XHRcdGNhc2UgXCJib29sZWFuXCI6XG5cdFx0XHRcdHJldHVybiBleHByLnZhbHVlLnRvU3RyaW5nKCk7XG5cdFx0XHRjYXNlIFwic3RyaW5nXCI6XG5cdFx0XHRcdHJldHVybiBgJyR7ZXNjYXBlWG1sQXR0cmlidXRlKGV4cHIudmFsdWUudG9TdHJpbmcoKSl9J2A7XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRyZXR1cm4gXCJcIjtcblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIGRvTm90U3RyaW5naWZ5ID8gZXhwci52YWx1ZSA6IGV4cHIudmFsdWUudG9TdHJpbmcoKTtcblx0fVxufVxuXG4vKipcbiAqIEdlbmVyYXRlcyB0aGUgYmluZGluZyBzdHJpbmcgZm9yIGEgQmluZGluZyBleHByZXNzaW9uLlxuICogQHBhcmFtIGV4cHJlc3Npb25Gb3JCaW5kaW5nIFRoZSBleHByZXNzaW9uIHRvIGNvbXBpbGVcbiAqIEBwYXJhbSBlbWJlZGRlZEluQmluZGluZyBXaGV0aGVyIHRoZSBleHByZXNzaW9uIHRvIGNvbXBpbGUgaXMgZW1iZWRkZWQgaW50byBhbm90aGVyIGV4cHJlc3Npb25cbiAqIEBwYXJhbSBlbWJlZGRlZFNlcGFyYXRvciBUaGUgYmluZGluZyB2YWx1ZSBldmFsdWF0b3IgKCQgb3IgJSBkZXBlbmRpbmcgb24gd2hldGhlciB3ZSB3YW50IHRvIGZvcmNlIHRoZSB0eXBlIG9yIG5vdClcbiAqIEByZXR1cm5zIFRoZSBjb3JyZXNwb25kaW5nIGV4cHJlc3Npb24gYmluZGluZ1xuICovXG5mdW5jdGlvbiBjb21waWxlUGF0aEluTW9kZWxFeHByZXNzaW9uPFQgZXh0ZW5kcyBQcmltaXRpdmVUeXBlPihcblx0ZXhwcmVzc2lvbkZvckJpbmRpbmc6IFBhdGhJbk1vZGVsRXhwcmVzc2lvbjxUPixcblx0ZW1iZWRkZWRJbkJpbmRpbmc6IGJvb2xlYW4sXG5cdGVtYmVkZGVkU2VwYXJhdG9yOiBzdHJpbmdcbik6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIHtcblx0aWYgKFxuXHRcdGV4cHJlc3Npb25Gb3JCaW5kaW5nLnR5cGUgfHxcblx0XHRleHByZXNzaW9uRm9yQmluZGluZy5wYXJhbWV0ZXJzIHx8XG5cdFx0ZXhwcmVzc2lvbkZvckJpbmRpbmcudGFyZ2V0VHlwZSB8fFxuXHRcdGV4cHJlc3Npb25Gb3JCaW5kaW5nLmZvcm1hdE9wdGlvbnMgfHxcblx0XHRleHByZXNzaW9uRm9yQmluZGluZy5jb25zdHJhaW50c1xuXHQpIHtcblx0XHQvLyBUaGlzIGlzIG5vdyBhIGNvbXBsZXggYmluZGluZyBkZWZpbml0aW9uLCBsZXQncyBwcmVwYXJlIGZvciBpdFxuXHRcdGNvbnN0IGNvbXBsZXhCaW5kaW5nRGVmaW5pdGlvbiA9IHtcblx0XHRcdHBhdGg6IGNvbXBpbGVQYXRoSW5Nb2RlbChleHByZXNzaW9uRm9yQmluZGluZyksXG5cdFx0XHR0eXBlOiBleHByZXNzaW9uRm9yQmluZGluZy50eXBlLFxuXHRcdFx0dGFyZ2V0VHlwZTogZXhwcmVzc2lvbkZvckJpbmRpbmcudGFyZ2V0VHlwZSxcblx0XHRcdHBhcmFtZXRlcnM6IGV4cHJlc3Npb25Gb3JCaW5kaW5nLnBhcmFtZXRlcnMsXG5cdFx0XHRmb3JtYXRPcHRpb25zOiBleHByZXNzaW9uRm9yQmluZGluZy5mb3JtYXRPcHRpb25zLFxuXHRcdFx0Y29uc3RyYWludHM6IGV4cHJlc3Npb25Gb3JCaW5kaW5nLmNvbnN0cmFpbnRzXG5cdFx0fTtcblx0XHRjb25zdCBvdXRCaW5kaW5nID0gY29tcGlsZUV4cHJlc3Npb24oY29tcGxleEJpbmRpbmdEZWZpbml0aW9uLCBmYWxzZSwgZmFsc2UsIHRydWUpO1xuXHRcdGlmIChlbWJlZGRlZEluQmluZGluZykge1xuXHRcdFx0Y29uc3Qgc2VwYXJhdG9yID0gZXhwcmVzc2lvbkZvckJpbmRpbmcuYWx3YXlzS2VlcFRhcmdldFR5cGUgPyBcIiRcIiA6IGVtYmVkZGVkU2VwYXJhdG9yO1xuXHRcdFx0cmV0dXJuIGAke3NlcGFyYXRvcn0ke291dEJpbmRpbmd9YDtcblx0XHR9XG5cdFx0cmV0dXJuIG91dEJpbmRpbmc7XG5cdH0gZWxzZSBpZiAoZW1iZWRkZWRJbkJpbmRpbmcpIHtcblx0XHRyZXR1cm4gYCR7ZW1iZWRkZWRTZXBhcmF0b3J9eyR7Y29tcGlsZVBhdGhJbk1vZGVsKGV4cHJlc3Npb25Gb3JCaW5kaW5nKX19YDtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gYHske2NvbXBpbGVQYXRoSW5Nb2RlbChleHByZXNzaW9uRm9yQmluZGluZyl9fWA7XG5cdH1cbn1cblxuZnVuY3Rpb24gY29tcGlsZUNvbXBsZXhUeXBlRXhwcmVzc2lvbjxUIGV4dGVuZHMgUHJpbWl0aXZlVHlwZT4oZXhwcmVzc2lvbjogQ29tcGxleFR5cGVFeHByZXNzaW9uPFQ+KTogc3RyaW5nIHtcblx0aWYgKGV4cHJlc3Npb24uYmluZGluZ1BhcmFtZXRlcnMubGVuZ3RoID09PSAxKSB7XG5cdFx0cmV0dXJuIGB7JHtjb21waWxlUGF0aFBhcmFtZXRlcihleHByZXNzaW9uLmJpbmRpbmdQYXJhbWV0ZXJzWzBdIGFzIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxQcmltaXRpdmVUeXBlPiwgdHJ1ZSl9LCB0eXBlOiAnJHtcblx0XHRcdGV4cHJlc3Npb24udHlwZVxuXHRcdH0nfWA7XG5cdH1cblxuXHRsZXQgb3V0cHV0RW5kID0gYF0sIHR5cGU6ICcke2V4cHJlc3Npb24udHlwZX0nYDtcblx0aWYgKGhhc0VsZW1lbnRzKGV4cHJlc3Npb24uZm9ybWF0T3B0aW9ucykpIHtcblx0XHRvdXRwdXRFbmQgKz0gYCwgZm9ybWF0T3B0aW9uczogJHtjb21waWxlRXhwcmVzc2lvbihleHByZXNzaW9uLmZvcm1hdE9wdGlvbnMpfWA7XG5cdH1cblx0aWYgKGhhc0VsZW1lbnRzKGV4cHJlc3Npb24uY29uc3RyYWludHMpKSB7XG5cdFx0b3V0cHV0RW5kICs9IGAsIGNvbnN0cmFpbnRzOiAke2NvbXBpbGVFeHByZXNzaW9uKGV4cHJlc3Npb24uY29uc3RyYWludHMpfWA7XG5cdH1cblx0aWYgKGhhc0VsZW1lbnRzKGV4cHJlc3Npb24ucGFyYW1ldGVycykpIHtcblx0XHRvdXRwdXRFbmQgKz0gYCwgcGFyYW1ldGVyczogJHtjb21waWxlRXhwcmVzc2lvbihleHByZXNzaW9uLnBhcmFtZXRlcnMpfWA7XG5cdH1cblx0b3V0cHV0RW5kICs9IFwifVwiO1xuXG5cdHJldHVybiBge21vZGU6J1R3b1dheScsIHBhcnRzOlske2V4cHJlc3Npb24uYmluZGluZ1BhcmFtZXRlcnNcblx0XHQubWFwKChwYXJhbSkgPT4gY29tcGlsZVBhdGhQYXJhbWV0ZXIocGFyYW0gYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFByaW1pdGl2ZVR5cGU+KSlcblx0XHQuam9pbihcIixcIil9JHtvdXRwdXRFbmR9YDtcbn1cblxuLyoqXG4gKiBXcmFwIHRoZSBjb21waWxlZCBiaW5kaW5nIHN0cmluZyBhcyByZXF1aXJlZCBkZXBlbmRpbmcgb24gaXRzIGNvbnRleHQuXG4gKiBAcGFyYW0gZXhwcmVzc2lvbiBUaGUgY29tcGlsZWQgZXhwcmVzc2lvblxuICogQHBhcmFtIGVtYmVkZGVkSW5CaW5kaW5nIFRydWUgaWYgdGhlIGNvbXBpbGVkIGV4cHJlc3Npb24gaXMgdG8gYmUgZW1iZWRkZWQgaW4gYSBiaW5kaW5nXG4gKiBAcGFyYW0gcGFyZW50aGVzaXNSZXF1aXJlZCBUcnVlIGlmIHRoZSBlbWJlZGRlZCBiaW5kaW5nIG5lZWRzIHRvIGJlIHdyYXBwZWQgaW4gcGFyZXRoZXNpcyBzbyB0aGF0IGl0IGlzIGV2YWx1YXRlZCBhcyBvbmVcbiAqIEByZXR1cm5zIEZpbmFsaXplZCBjb21waWxlZCBleHByZXNzaW9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB3cmFwQmluZGluZ0V4cHJlc3Npb24oXG5cdGV4cHJlc3Npb246IHN0cmluZyxcblx0ZW1iZWRkZWRJbkJpbmRpbmc6IGJvb2xlYW4sXG5cdHBhcmVudGhlc2lzUmVxdWlyZWQgPSBmYWxzZVxuKTogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24ge1xuXHRpZiAoZW1iZWRkZWRJbkJpbmRpbmcpIHtcblx0XHRpZiAocGFyZW50aGVzaXNSZXF1aXJlZCkge1xuXHRcdFx0cmV0dXJuIGAoJHtleHByZXNzaW9ufSlgO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gZXhwcmVzc2lvbjtcblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIGB7PSAke2V4cHJlc3Npb259fWA7XG5cdH1cbn1cblxuLyoqXG4gKiBSZXNvbHZlcyBhIGJpbmRpbmcgZXhwcmVzc2lvbiBieSBzdWJzdGl0dXRpbmcgcGF0aCB2YWx1ZXMgZnJvbSBwcmVsb2FkZWQgZGF0YS5cbiAqIFVzZXMgdHJhbnNmb3JtUmVjdXJzaXZlbHkgdG8gcmVwbGFjZSBQYXRoSW5Nb2RlbCBleHByZXNzaW9ucyB3aXRoIGNvbnN0YW50cyB3aGVyZSB2YWx1ZXMgYXJlIGF2YWlsYWJsZS5cbiAqIE9ubHkgcmVzb2x2ZXMgcGF0aHMgZnJvbSB0aGUgZGVmYXVsdCAoZW1wdHkpIG1vZGVsIG5hbWUuXG4gKiBAdGVtcGxhdGUgVCBUaGUgdGFyZ2V0IHR5cGVcbiAqIEBwYXJhbSBleHByZXNzaW9uIFRoZSBiaW5kaW5nIHRvb2xraXQgZXhwcmVzc2lvbiB0byByZXNvbHZlXG4gKiBAcGFyYW0gcHJlbG9hZGVkVmFsdWVzIEEgZmxhdCBvYmplY3Qgd2l0aCBwcm9wZXJ0eSBwYXRocyBhcyBrZXlzIGFuZCB0aGVpciB2YWx1ZXNcbiAqIEByZXR1cm5zIFRoZSByZXNvbHZlZCBleHByZXNzaW9uIHdpdGggUGF0aEluTW9kZWwgZXhwcmVzc2lvbnMgcmVwbGFjZWQgYnkgY29uc3RhbnRzIHdoZXJlIHBvc3NpYmxlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlV2l0aFByZWxvYWRlZFZhbHVlczxUIGV4dGVuZHMgUHJpbWl0aXZlVHlwZT4oXG5cdGV4cHJlc3Npb246IEV4cHJlc3Npb25PclByaW1pdGl2ZTxUPixcblx0cHJlbG9hZGVkVmFsdWVzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFQ+IHtcblx0Y29uc3QgZXhwciA9IHdyYXBQcmltaXRpdmUoZXhwcmVzc2lvbik7XG5cblx0cmV0dXJuIHRyYW5zZm9ybVJlY3Vyc2l2ZWx5KFxuXHRcdGV4cHIsXG5cdFx0XCJQYXRoSW5Nb2RlbFwiLFxuXHRcdChwYXRoRXhwcmVzc2lvbjogUGF0aEluTW9kZWxFeHByZXNzaW9uPHVua25vd24+KSA9PiB7XG5cdFx0XHQvLyBPbmx5IHJlc29sdmUgcGF0aHMgZnJvbSB0aGUgZGVmYXVsdCBtb2RlbCAoZW1wdHkgbW9kZWwgbmFtZSlcblx0XHRcdGlmIChwYXRoRXhwcmVzc2lvbi5tb2RlbE5hbWUgJiYgcGF0aEV4cHJlc3Npb24ubW9kZWxOYW1lICE9PSBcIlwiKSB7XG5cdFx0XHRcdHJldHVybiBwYXRoRXhwcmVzc2lvbjtcblx0XHRcdH1cblxuXHRcdFx0Ly8gQ2hlY2sgaWYgdGhpcyBwYXRoIGlzIGluIHByZWxvYWRlZCB2YWx1ZXNcblx0XHRcdGlmIChwcmVsb2FkZWRWYWx1ZXMuaGFzT3duUHJvcGVydHkocGF0aEV4cHJlc3Npb24ucGF0aCkpIHtcblx0XHRcdFx0cmV0dXJuIGNvbnN0YW50KHByZWxvYWRlZFZhbHVlc1twYXRoRXhwcmVzc2lvbi5wYXRoXSBhcyBUKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gUGF0aCBub3QgaW4gcHJlbG9hZGVkIHZhbHVlcywgcmV0dXJuIGFzLWlzXG5cdFx0XHRyZXR1cm4gcGF0aEV4cHJlc3Npb247XG5cdFx0fSxcblx0XHR0cnVlXG5cdCkgYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFQ+O1xufVxuXG4vKipcbiAqIENvbXBpbGUgYW4gZXhwcmVzc2lvbiBpbnRvIGFuIGV4cHJlc3Npb24gYmluZGluZy5cbiAqIEB0ZW1wbGF0ZSBUIFRoZSB0YXJnZXQgdHlwZVxuICogQHBhcmFtIGV4cHJlc3Npb24gVGhlIGV4cHJlc3Npb24gdG8gY29tcGlsZVxuICogQHBhcmFtIGVtYmVkZGVkSW5CaW5kaW5nIFdoZXRoZXIgdGhlIGV4cHJlc3Npb24gdG8gY29tcGlsZSBpcyBlbWJlZGRlZCBpbnRvIGFub3RoZXIgZXhwcmVzc2lvblxuICogQHBhcmFtIGtlZXBUYXJnZXRUeXBlIEtlZXAgdGhlIHRhcmdldCB0eXBlIG9mIHRoZSBlbWJlZGRlZCBiaW5kaW5ncyBpbnN0ZWFkIG9mIGNhc3RpbmcgdGhlbSB0byBhbnlcbiAqIEBwYXJhbSBpc051bGxhYmxlIFdoZXRoZXIgYmluZGluZyBleHByZXNzaW9uIGNhbiByZXNvbHZlIHRvIGVtcHR5IHN0cmluZyBvciBub3RcbiAqIEByZXR1cm5zIFRoZSBjb3JyZXNwb25kaW5nIGV4cHJlc3Npb24gYmluZGluZ1xuICovXG5leHBvcnQgZnVuY3Rpb24gY29tcGlsZUV4cHJlc3Npb248VCBleHRlbmRzIFByaW1pdGl2ZVR5cGU+KFxuXHRleHByZXNzaW9uOiBFeHByZXNzaW9uT3JQcmltaXRpdmU8VD4sXG5cdGVtYmVkZGVkSW5CaW5kaW5nID0gZmFsc2UsXG5cdGtlZXBUYXJnZXRUeXBlID0gZmFsc2UsXG5cdGlzTnVsbGFibGUgPSBmYWxzZVxuKTogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24ge1xuXHRjb25zdCBleHByID0gd3JhcFByaW1pdGl2ZShleHByZXNzaW9uKTtcblx0Y29uc3QgZW1iZWRkZWRTZXBhcmF0b3IgPSBrZWVwVGFyZ2V0VHlwZSA/IFwiJFwiIDogXCIlXCI7XG5cblx0c3dpdGNoIChleHByLl90eXBlKSB7XG5cdFx0Y2FzZSBcIlVucmVzb2x2YWJsZVwiOlxuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblxuXHRcdGNhc2UgXCJDb25zdGFudFwiOlxuXHRcdFx0cmV0dXJuIGNvbXBpbGVDb25zdGFudChleHByLCBlbWJlZGRlZEluQmluZGluZywgaXNOdWxsYWJsZSk7XG5cblx0XHRjYXNlIFwiUmVmXCI6XG5cdFx0XHRyZXR1cm4gZXhwci5yZWYgfHwgXCJudWxsXCI7XG5cblx0XHRjYXNlIFwiRnVuY3Rpb25cIjpcblx0XHRcdGxldCBoYXNFbWJlZGRlZEZ1bmN0aW9uQ2FsbE9yQmluZGluZyA9IGZhbHNlO1xuXHRcdFx0aWYgKGV4cHIuaXNGb3JtYXR0aW5nRm4pIHtcblx0XHRcdFx0dHJhbnNmb3JtUmVjdXJzaXZlbHkoXG5cdFx0XHRcdFx0ZXhwcixcblx0XHRcdFx0XHRcIkZ1bmN0aW9uXCIsXG5cdFx0XHRcdFx0KHN1YkZuKSA9PiB7XG5cdFx0XHRcdFx0XHRpZiAoc3ViRm4gIT09IGV4cHIgJiYgc3ViRm4ub2JqID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRcdFx0aGFzRW1iZWRkZWRGdW5jdGlvbkNhbGxPckJpbmRpbmcgPSB0cnVlO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0cmV0dXJuIHN1YkZuO1xuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0dHJ1ZVxuXHRcdFx0XHQpO1xuXHRcdFx0XHR0cmFuc2Zvcm1SZWN1cnNpdmVseShcblx0XHRcdFx0XHRleHByLFxuXHRcdFx0XHRcdFwiQ29uc3RhbnRcIixcblx0XHRcdFx0XHQoc3ViRm46IENvbnN0YW50RXhwcmVzc2lvbjxUPikgPT4ge1xuXHRcdFx0XHRcdFx0aWYgKChzdWJGbiBhcyB1bmtub3duKSAhPT0gZXhwciAmJiB0eXBlb2Ygc3ViRm4udmFsdWUgPT09IFwib2JqZWN0XCIpIHtcblx0XHRcdFx0XHRcdFx0dHJhbnNmb3JtUmVjdXJzaXZlbHkoc3ViRm4sIFwiUGF0aEluTW9kZWxcIiwgKHN1YlN1YkZuKSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0aGFzRW1iZWRkZWRGdW5jdGlvbkNhbGxPckJpbmRpbmcgPSB0cnVlO1xuXHRcdFx0XHRcdFx0XHRcdHJldHVybiBzdWJTdWJGbjtcblx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdHJldHVybiBzdWJGbjtcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdHRydWVcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHRcdGNvbnN0IGFyZ3VtZW50U3RyaW5nID0gYCR7ZXhwci5wYXJhbWV0ZXJzLm1hcCgoYXJnKSA9PiBjb21waWxlRXhwcmVzc2lvbihhcmcsIHRydWUpKS5qb2luKFwiLCBcIil9YDtcblx0XHRcdGxldCBmbkNhbGwgPVxuXHRcdFx0XHRleHByLm9iaiA9PT0gdW5kZWZpbmVkXG5cdFx0XHRcdFx0PyBgJHtleHByLmZufSgke2FyZ3VtZW50U3RyaW5nfSlgXG5cdFx0XHRcdFx0OiBgJHtjb21waWxlRXhwcmVzc2lvbihleHByLm9iaiwgdHJ1ZSl9LiR7ZXhwci5mbn0oJHthcmd1bWVudFN0cmluZ30pYDtcblx0XHRcdGlmICghZW1iZWRkZWRJbkJpbmRpbmcgJiYgaGFzRW1iZWRkZWRGdW5jdGlvbkNhbGxPckJpbmRpbmcpIHtcblx0XHRcdFx0Zm5DYWxsID0gYHs9ICR7Zm5DYWxsfX1gO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIGZuQ2FsbDtcblxuXHRcdGNhc2UgXCJFbWJlZGRlZEV4cHJlc3Npb25CaW5kaW5nXCI6XG5cdFx0XHRyZXR1cm4gZW1iZWRkZWRJbkJpbmRpbmcgPyBgKCR7ZXhwci52YWx1ZS5zdWJzdHJpbmcoMiwgZXhwci52YWx1ZS5sZW5ndGggLSAxKX0pYCA6IGAke2V4cHIudmFsdWV9YDtcblxuXHRcdGNhc2UgXCJFbWJlZGRlZEJpbmRpbmdcIjpcblx0XHRcdHJldHVybiBlbWJlZGRlZEluQmluZGluZyA/IGAke2VtYmVkZGVkU2VwYXJhdG9yfSR7ZXhwci52YWx1ZX1gIDogYCR7ZXhwci52YWx1ZX1gO1xuXG5cdFx0Y2FzZSBcIlBhdGhJbk1vZGVsXCI6XG5cdFx0XHRyZXR1cm4gY29tcGlsZVBhdGhJbk1vZGVsRXhwcmVzc2lvbihleHByLCBlbWJlZGRlZEluQmluZGluZywgZW1iZWRkZWRTZXBhcmF0b3IpO1xuXG5cdFx0Y2FzZSBcIkNvbXBhcmlzb25cIjpcblx0XHRcdGNvbnN0IGNvbXBhcmlzb25FeHByZXNzaW9uID0gY29tcGlsZUNvbXBhcmlzb25FeHByZXNzaW9uKGV4cHIpO1xuXHRcdFx0cmV0dXJuIHdyYXBCaW5kaW5nRXhwcmVzc2lvbihjb21wYXJpc29uRXhwcmVzc2lvbiwgZW1iZWRkZWRJbkJpbmRpbmcpO1xuXG5cdFx0Y2FzZSBcIklmRWxzZVwiOlxuXHRcdFx0Y29uc3QgaWZFbHNlRXhwcmVzc2lvbiA9IGAke2NvbXBpbGVFeHByZXNzaW9uKGV4cHIuY29uZGl0aW9uLCB0cnVlKX0gPyAke2NvbXBpbGVFeHByZXNzaW9uKFxuXHRcdFx0XHRleHByLm9uVHJ1ZSxcblx0XHRcdFx0dHJ1ZSxcblx0XHRcdFx0a2VlcFRhcmdldFR5cGVcblx0XHRcdCl9IDogJHtjb21waWxlRXhwcmVzc2lvbihleHByLm9uRmFsc2UsIHRydWUsIGtlZXBUYXJnZXRUeXBlKX1gO1xuXHRcdFx0cmV0dXJuIHdyYXBCaW5kaW5nRXhwcmVzc2lvbihpZkVsc2VFeHByZXNzaW9uLCBlbWJlZGRlZEluQmluZGluZywgdHJ1ZSk7XG5cblx0XHRjYXNlIFwiU2V0XCI6XG5cdFx0XHRjb25zdCBzZXRFeHByZXNzaW9uID0gZXhwci5vcGVyYW5kcy5tYXAoKG9wZXJhbmQpID0+IGNvbXBpbGVFeHByZXNzaW9uKG9wZXJhbmQsIHRydWUpKS5qb2luKGAgJHtleHByLm9wZXJhdG9yfSBgKTtcblx0XHRcdHJldHVybiB3cmFwQmluZGluZ0V4cHJlc3Npb24oc2V0RXhwcmVzc2lvbiwgZW1iZWRkZWRJbkJpbmRpbmcsIHRydWUpO1xuXG5cdFx0Y2FzZSBcIkNvbmNhdFwiOlxuXHRcdFx0Y29uc3QgY29uY2F0RXhwcmVzc2lvbiA9IGV4cHIuZXhwcmVzc2lvbnNcblx0XHRcdFx0Lm1hcCgobmVzdGVkRXhwcmVzc2lvbikgPT4gY29tcGlsZUV4cHJlc3Npb24obmVzdGVkRXhwcmVzc2lvbiwgdHJ1ZSwgdHJ1ZSkpXG5cdFx0XHRcdC5qb2luKFwiICsgXCIpO1xuXHRcdFx0cmV0dXJuIHdyYXBCaW5kaW5nRXhwcmVzc2lvbihjb25jYXRFeHByZXNzaW9uLCBlbWJlZGRlZEluQmluZGluZyk7XG5cblx0XHRjYXNlIFwiTGVuZ3RoXCI6XG5cdFx0XHRjb25zdCBsZW5ndGhFeHByZXNzaW9uID0gYCR7Y29tcGlsZUV4cHJlc3Npb24oZXhwci5wYXRoSW5Nb2RlbCwgdHJ1ZSl9Lmxlbmd0aGA7XG5cdFx0XHRyZXR1cm4gd3JhcEJpbmRpbmdFeHByZXNzaW9uKGxlbmd0aEV4cHJlc3Npb24sIGVtYmVkZGVkSW5CaW5kaW5nKTtcblxuXHRcdGNhc2UgXCJOb3RcIjpcblx0XHRcdGNvbnN0IG5vdEV4cHJlc3Npb24gPSBgISR7Y29tcGlsZUV4cHJlc3Npb24oZXhwci5vcGVyYW5kLCB0cnVlKX1gO1xuXHRcdFx0cmV0dXJuIHdyYXBCaW5kaW5nRXhwcmVzc2lvbihub3RFeHByZXNzaW9uLCBlbWJlZGRlZEluQmluZGluZyk7XG5cdFx0Y2FzZSBcIkFyaXRobWV0aWNcIjpcblx0XHRcdGNvbnN0IGFyaXRobWV0aWNFeHByZXNzaW9uID0gY29tcGlsZUFyaXRobWV0aWNFeHByZXNzaW9uKGV4cHIpO1xuXHRcdFx0cmV0dXJuIHdyYXBCaW5kaW5nRXhwcmVzc2lvbihhcml0aG1ldGljRXhwcmVzc2lvbiwgZW1iZWRkZWRJbkJpbmRpbmcpO1xuXG5cdFx0Y2FzZSBcIlRydXRoeVwiOlxuXHRcdFx0Y29uc3QgdHJ1dGh5RXhwcmVzc2lvbiA9IGAhISR7Y29tcGlsZUV4cHJlc3Npb24oZXhwci5vcGVyYW5kLCB0cnVlKX1gO1xuXHRcdFx0cmV0dXJuIHdyYXBCaW5kaW5nRXhwcmVzc2lvbih0cnV0aHlFeHByZXNzaW9uLCBlbWJlZGRlZEluQmluZGluZyk7XG5cblx0XHRjYXNlIFwiRm9ybWF0dGVyXCI6XG5cdFx0XHRjb25zdCBmb3JtYXR0ZXJFeHByZXNzaW9uID0gY29tcGlsZUZvcm1hdHRlckV4cHJlc3Npb24oZXhwcik7XG5cdFx0XHRyZXR1cm4gZW1iZWRkZWRJbkJpbmRpbmcgPyBgJCR7Zm9ybWF0dGVyRXhwcmVzc2lvbn1gIDogZm9ybWF0dGVyRXhwcmVzc2lvbjtcblxuXHRcdGNhc2UgXCJDb21wbGV4VHlwZVwiOlxuXHRcdFx0Y29uc3QgY29tcGxleFR5cGVFeHByZXNzaW9uID0gY29tcGlsZUNvbXBsZXhUeXBlRXhwcmVzc2lvbihleHByKTtcblx0XHRcdHJldHVybiBlbWJlZGRlZEluQmluZGluZyA/IGAkJHtjb21wbGV4VHlwZUV4cHJlc3Npb259YCA6IGNvbXBsZXhUeXBlRXhwcmVzc2lvbjtcblxuXHRcdGRlZmF1bHQ6XG5cdFx0XHRyZXR1cm4gXCJcIjtcblx0fVxufVxuXG5mdW5jdGlvbiBjb21waWxlQXJpdGhtZXRpY0V4cHJlc3Npb24oZXhwcmVzc2lvbjogQXJpdGhtZXRpY0V4cHJlc3Npb24pOiBzdHJpbmcge1xuXHRmdW5jdGlvbiBjb21waWxlT3BlcmFuZChvcGVyYW5kOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248dW5rbm93bj4pOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB7XG5cdFx0Y29uc3QgY29tcGlsZWRPcGVyYW5kID0gY29tcGlsZUV4cHJlc3Npb24ob3BlcmFuZCwgdHJ1ZSkgPz8gXCJ1bmRlZmluZWRcIjtcblx0XHRyZXR1cm4gd3JhcEJpbmRpbmdFeHByZXNzaW9uKGNvbXBpbGVkT3BlcmFuZCwgdHJ1ZSwgbmVlZFBhcmVudGhlc2lzKG9wZXJhbmQpKTtcblx0fVxuXHRzd2l0Y2ggKGV4cHJlc3Npb24ub3BlcmF0b3IpIHtcblx0XHRjYXNlIFwiTmVnXCI6XG5cdFx0XHRyZXR1cm4gYC0oJHtjb21waWxlT3BlcmFuZChleHByZXNzaW9uLm9wZXJhbmQxKX0pYDtcblx0XHRjYXNlIFwiRmxvb3JcIjpcblx0XHRcdHJldHVybiBgTWF0aC5mbG9vcigke2NvbXBpbGVPcGVyYW5kKGV4cHJlc3Npb24ub3BlcmFuZDEpfSlgO1xuXHRcdGNhc2UgXCIlXCI6XG5cdFx0Y2FzZSBcIi9cIjpcblx0XHRjYXNlIFwiKlwiOlxuXHRcdGNhc2UgXCIrXCI6XG5cdFx0Y2FzZSBcIi1cIjpcblx0XHRcdHJldHVybiBgJHtjb21waWxlT3BlcmFuZChleHByZXNzaW9uLm9wZXJhbmQxKX0gJHtleHByZXNzaW9uLm9wZXJhdG9yfSAke2NvbXBpbGVPcGVyYW5kKGV4cHJlc3Npb24ub3BlcmFuZDIpfWA7XG5cdH1cbn1cblxuLyoqXG4gKiBDb21waWxlIGEgY29tcGFyaXNvbiBleHByZXNzaW9uLlxuICogQHBhcmFtIGV4cHJlc3Npb24gVGhlIGNvbXBhcmlzb24gZXhwcmVzc2lvbi5cbiAqIEByZXR1cm5zIFRoZSBjb21waWxlZCBleHByZXNzaW9uLiBOZWVkcyB3cmFwcGluZyBiZWZvcmUgaXQgY2FuIGJlIHVzZWQgYXMgYW4gZXhwcmVzc2lvbiBiaW5kaW5nLlxuICovXG5mdW5jdGlvbiBjb21waWxlQ29tcGFyaXNvbkV4cHJlc3Npb24oZXhwcmVzc2lvbjogQ29tcGFyaXNvbkV4cHJlc3Npb24pOiBzdHJpbmcge1xuXHRmdW5jdGlvbiBjb21waWxlT3BlcmFuZChvcGVyYW5kOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248dW5rbm93bj4pOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB7XG5cdFx0Y29uc3QgY29tcGlsZWRPcGVyYW5kID0gY29tcGlsZUV4cHJlc3Npb24ob3BlcmFuZCwgdHJ1ZSkgPz8gXCJ1bmRlZmluZWRcIjtcblx0XHRyZXR1cm4gd3JhcEJpbmRpbmdFeHByZXNzaW9uKGNvbXBpbGVkT3BlcmFuZCwgdHJ1ZSwgbmVlZFBhcmVudGhlc2lzKG9wZXJhbmQpKTtcblx0fVxuXHRzd2l0Y2ggKGV4cHJlc3Npb24ub3BlcmF0b3IpIHtcblx0XHRjYXNlIFwiSW5cIjoge1xuXHRcdFx0Y29uc3QgcGF0aCA9IGNvbXBpbGVPcGVyYW5kKGV4cHJlc3Npb24ub3BlcmFuZDEpO1xuXHRcdFx0Y29uc3QgY29sbGVjdGlvbiA9IGNvbXBpbGVPcGVyYW5kKGV4cHJlc3Npb24ub3BlcmFuZDIpID8/IFtdO1xuXHRcdFx0cmV0dXJuIGAke2NvbGxlY3Rpb259LmluY2x1ZGVzKCR7cGF0aH0pYDtcblx0XHR9XG5cdFx0Y2FzZSBcIkhhc1wiOiB7XG5cdFx0XHRjb25zdCBwYXRoID0gY29tcGlsZU9wZXJhbmQoZXhwcmVzc2lvbi5vcGVyYW5kMSk7XG5cdFx0XHRjb25zdCBmbGFncyA9IGNvbXBpbGVPcGVyYW5kKGV4cHJlc3Npb24ub3BlcmFuZDIpID8/IFtdO1xuXHRcdFx0cmV0dXJuIGAoJHtwYXRofSAmICR7ZmxhZ3N9KSA+IDBgO1xuXHRcdH1cblx0XHRjYXNlIFwiPT09XCI6XG5cdFx0Y2FzZSBcIiE9PVwiOlxuXHRcdGNhc2UgXCI+PVwiOlxuXHRcdGNhc2UgXCI+XCI6XG5cdFx0Y2FzZSBcIjw9XCI6XG5cdFx0Y2FzZSBcIjxcIjpcblx0XHRcdHJldHVybiBgJHtjb21waWxlT3BlcmFuZChleHByZXNzaW9uLm9wZXJhbmQxKX0gJHtleHByZXNzaW9uLm9wZXJhdG9yfSAke2NvbXBpbGVPcGVyYW5kKGV4cHJlc3Npb24ub3BlcmFuZDIpfWA7XG5cdH1cbn1cblxuLyoqXG4gKiBDb21waWxlIGEgZm9ybWF0dGVyIGV4cHJlc3Npb24uXG4gKiBAcGFyYW0gZXhwcmVzc2lvbiBUaGUgZm9ybWF0dGVyIGV4cHJlc3Npb24uXG4gKiBAcmV0dXJucyBUaGUgY29tcGlsZWQgZXhwcmVzc2lvbi5cbiAqL1xuZnVuY3Rpb24gY29tcGlsZUZvcm1hdHRlckV4cHJlc3Npb248VCBleHRlbmRzIFByaW1pdGl2ZVR5cGU+KGV4cHJlc3Npb246IEZvcm1hdHRlckV4cHJlc3Npb248VD4pOiBzdHJpbmcge1xuXHRpZiAoZXhwcmVzc2lvbi5wYXJhbWV0ZXJzLmxlbmd0aCA9PT0gMSkge1xuXHRcdHJldHVybiBgeyR7Y29tcGlsZVBhdGhQYXJhbWV0ZXIoZXhwcmVzc2lvbi5wYXJhbWV0ZXJzWzBdIGFzIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxQcmltaXRpdmVUeXBlPiwgdHJ1ZSl9LCBmb3JtYXR0ZXI6ICcke1xuXHRcdFx0ZXhwcmVzc2lvbi5mblxuXHRcdH0nfWA7XG5cdH0gZWxzZSB7XG5cdFx0Y29uc3QgcGFydHMgPSBleHByZXNzaW9uLnBhcmFtZXRlcnMubWFwKChwYXJhbSkgPT4ge1xuXHRcdFx0aWYgKHBhcmFtLl90eXBlID09PSBcIkNvbXBsZXhUeXBlXCIpIHtcblx0XHRcdFx0cmV0dXJuIGNvbXBpbGVDb21wbGV4VHlwZUV4cHJlc3Npb24ocGFyYW0pO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cmV0dXJuIGNvbXBpbGVQYXRoUGFyYW1ldGVyKHBhcmFtIGFzIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxQcmltaXRpdmVUeXBlPik7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0cmV0dXJuIGB7cGFydHM6IFske3BhcnRzLmpvaW4oXCIsIFwiKX1dLCBmb3JtYXR0ZXI6ICcke2V4cHJlc3Npb24uZm59J31gO1xuXHR9XG59XG5cbi8qKlxuICogQ29tcGlsZSB0aGUgcGF0aCBwYXJhbWV0ZXIgb2YgYSBmb3JtYXR0ZXIgY2FsbC5cbiAqIEBwYXJhbSBleHByZXNzaW9uIFRoZSBiaW5kaW5nIHBhcnQgdG8gZXZhbHVhdGVcbiAqIEBwYXJhbSBzaW5nbGVQYXRoIFdoZXRoZXIgdGhlcmUgaXMgb25lIG9yIG11bHRpcGxlIHBhdGggdG8gY29uc2lkZXJcbiAqIEByZXR1cm5zIFRoZSBzdHJpbmcgc25pcHBldCB0byBpbmNsdWRlIGluIHRoZSBvdmVyYWxsIGJpbmRpbmcgZGVmaW5pdGlvblxuICovXG5mdW5jdGlvbiBjb21waWxlUGF0aFBhcmFtZXRlcihleHByZXNzaW9uOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248UHJpbWl0aXZlVHlwZT4sIHNpbmdsZVBhdGggPSBmYWxzZSk6IHN0cmluZyB7XG5cdGxldCBvdXRWYWx1ZSA9IFwiXCI7XG5cdGlmIChleHByZXNzaW9uLl90eXBlID09PSBcIkNvbnN0YW50XCIpIHtcblx0XHRpZiAoZXhwcmVzc2lvbi52YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHQvLyBTcGVjaWFsIGNhc2Ugb3RoZXJ3aXNlIHRoZSBKU1Rva2VuaXplciBjb21wbGFpbnMgYWJvdXQgaW5jb3JyZWN0IGNvbnRlbnRcblx0XHRcdG91dFZhbHVlID0gYHZhbHVlOiAndW5kZWZpbmVkJ2A7XG5cdFx0fSBlbHNlIHtcblx0XHRcdG91dFZhbHVlID0gYHZhbHVlOiAke2NvbXBpbGVDb25zdGFudChleHByZXNzaW9uLCB0cnVlKX1gO1xuXHRcdH1cblx0fSBlbHNlIGlmIChleHByZXNzaW9uLl90eXBlID09PSBcIlBhdGhJbk1vZGVsXCIpIHtcblx0XHRvdXRWYWx1ZSA9IGBwYXRoOiAnJHtjb21waWxlUGF0aEluTW9kZWwoZXhwcmVzc2lvbil9J2A7XG5cblx0XHRvdXRWYWx1ZSArPSBleHByZXNzaW9uLnR5cGUgPyBgLCB0eXBlOiAnJHtleHByZXNzaW9uLnR5cGV9J2AgOiBgLCB0YXJnZXRUeXBlOiAnYW55J2A7XG5cdFx0aWYgKGV4cHJlc3Npb24ubW9kZSkge1xuXHRcdFx0b3V0VmFsdWUgKz0gYCwgbW9kZTogJyR7Y29tcGlsZUV4cHJlc3Npb24oZXhwcmVzc2lvbi5tb2RlKX0nYDtcblx0XHR9XG5cdFx0aWYgKGhhc0VsZW1lbnRzKGV4cHJlc3Npb24uY29uc3RyYWludHMpKSB7XG5cdFx0XHRvdXRWYWx1ZSArPSBgLCBjb25zdHJhaW50czogJHtjb21waWxlRXhwcmVzc2lvbihleHByZXNzaW9uLmNvbnN0cmFpbnRzKX1gO1xuXHRcdH1cblx0XHRpZiAoaGFzRWxlbWVudHMoZXhwcmVzc2lvbi5mb3JtYXRPcHRpb25zKSkge1xuXHRcdFx0b3V0VmFsdWUgKz0gYCwgZm9ybWF0T3B0aW9uczogJHtjb21waWxlRXhwcmVzc2lvbihleHByZXNzaW9uLmZvcm1hdE9wdGlvbnMpfWA7XG5cdFx0fVxuXHRcdGlmIChoYXNFbGVtZW50cyhleHByZXNzaW9uLnBhcmFtZXRlcnMpKSB7XG5cdFx0XHRvdXRWYWx1ZSArPSBgLCBwYXJhbWV0ZXJzOiAke2NvbXBpbGVFeHByZXNzaW9uKGV4cHJlc3Npb24ucGFyYW1ldGVycyl9YDtcblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIFwiXCI7XG5cdH1cblx0cmV0dXJuIHNpbmdsZVBhdGggPyBvdXRWYWx1ZSA6IGB7JHtvdXRWYWx1ZX19YDtcbn1cblxuZnVuY3Rpb24gaGFzRWxlbWVudHMob2JqOiBvYmplY3QgfCB1bmRlZmluZWQpOiBib29sZWFuIHtcblx0cmV0dXJuICEhb2JqICYmIE9iamVjdC5rZXlzKG9iaikubGVuZ3RoID4gMDtcbn1cblxuLyoqXG4gKiBDb21waWxlIGEgYmluZGluZyBleHByZXNzaW9uIHBhdGguXG4gKiBAcGFyYW0gZXhwcmVzc2lvbiBUaGUgZXhwcmVzc2lvbiB0byBjb21waWxlLlxuICogQHJldHVybnMgVGhlIGNvbXBpbGVkIHBhdGguXG4gKi9cbmZ1bmN0aW9uIGNvbXBpbGVQYXRoSW5Nb2RlbDxUIGV4dGVuZHMgUHJpbWl0aXZlVHlwZT4oZXhwcmVzc2lvbjogUGF0aEluTW9kZWxFeHByZXNzaW9uPFQ+KTogc3RyaW5nIHtcblx0cmV0dXJuIGAke2V4cHJlc3Npb24ubW9kZWxOYW1lID8gZXhwcmVzc2lvbi5tb2RlbE5hbWUgKyBcIj5cIiA6IFwiXCJ9JHtleHByZXNzaW9uLnBhdGh9YDtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0VBMERBO0FBQ0E7QUFDQTs7RUFNQTtBQUNBO0FBQ0E7QUFDQTtFQUNPLE1BQU1BLHVCQUF1QixHQUFHLDRCQUE0Qjs7RUEwRm5FO0FBQ0E7QUFDQTtFQUZBQyxRQUFBLENBQUFELHVCQUFBLEdBQUFBLHVCQUFBO0VBZ0RPLFNBQVNFLFVBQVVBLENBQUNDLGFBQXNCLEVBQTZC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
|