@sapui5/sap.fe.base 1.140.0 → 1.141.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/src/sap/fe/base/.library +1 -1
- package/src/sap/fe/base/BindingToolkit.js +10 -7
- package/src/sap/fe/base/BindingToolkit.ts +11 -6
- package/src/sap/fe/base/BuildingBlockBase.js +7 -5
- package/src/sap/fe/base/BuildingBlockBase.ts +8 -5
- package/src/sap/fe/base/ClassSupport.js +7 -4
- package/src/sap/fe/base/ClassSupport.ts +10 -3
- package/src/sap/fe/base/HookSupport.js +7 -5
- package/src/sap/fe/base/HookSupport.ts +10 -4
- package/src/sap/fe/base/jsx-runtime/jsx-control.js +5 -3
- package/src/sap/fe/base/jsx-runtime/jsx-control.ts +3 -2
- package/src/sap/fe/base/jsx-runtime/jsx.js +9 -2
- package/src/sap/fe/base/jsx-runtime/jsx.ts +10 -1
- package/src/sap/fe/base/library.js +1 -1
|
@@ -1056,14 +1056,14 @@ sap.ui.define(["sap/fe/base/AnnotationEnum"], function (AnnotationEnum) {
|
|
|
1056
1056
|
}
|
|
1057
1057
|
if (isComplexTypeExpression(condition) || isComplexTypeExpression(onTrue) || isComplexTypeExpression(onFalse)) {
|
|
1058
1058
|
let pathIdx = 0;
|
|
1059
|
-
const myIfElseExpression = formatResult([condition, onTrue, onFalse], "
|
|
1059
|
+
const myIfElseExpression = formatResult([condition, onTrue, onFalse], "._formatters.StandardFormatter#ifElse");
|
|
1060
1060
|
const allParts = [];
|
|
1061
1061
|
transformRecursively(myIfElseExpression, "PathInModel", constantPath => {
|
|
1062
1062
|
allParts.push(constantPath);
|
|
1063
1063
|
return pathInModel(`$${pathIdx++}`, "$");
|
|
1064
1064
|
}, true);
|
|
1065
1065
|
allParts.unshift(constant(JSON.stringify(myIfElseExpression)));
|
|
1066
|
-
return formatResult(allParts, "
|
|
1066
|
+
return formatResult(allParts, "._formatters.StandardFormatter.bind($control)#evaluateComplexExpression", undefined, true);
|
|
1067
1067
|
}
|
|
1068
1068
|
return {
|
|
1069
1069
|
_type: "IfElse",
|
|
@@ -1162,7 +1162,7 @@ sap.ui.define(["sap/fe/base/AnnotationEnum"], function (AnnotationEnum) {
|
|
|
1162
1162
|
return pathInModel(`$${pathIdx++}`, "$");
|
|
1163
1163
|
}, true);
|
|
1164
1164
|
allParts.unshift(constant(JSON.stringify(myFormatExpression)));
|
|
1165
|
-
return formatResult(allParts, "
|
|
1165
|
+
return formatResult(allParts, "._formatters.StandardFormatter.bind($control)#evaluateComplexExpression", undefined, true);
|
|
1166
1166
|
} else if (!!formatterName && formatterName.length > 0) {
|
|
1167
1167
|
parameterExpressions.unshift(constant(formatterName));
|
|
1168
1168
|
}
|
|
@@ -1326,7 +1326,10 @@ sap.ui.define(["sap/fe/base/AnnotationEnum"], function (AnnotationEnum) {
|
|
|
1326
1326
|
currencyPath.targetType = "any";
|
|
1327
1327
|
currencyPath.mode = "OneTime";
|
|
1328
1328
|
oFormatOptions ??= {};
|
|
1329
|
-
|
|
1329
|
+
if (oConstraintOptions?.skipDecimalsValidation === true) {
|
|
1330
|
+
oFormatOptions.decimals = 99; // setting to 99 to avoid rounding in currency conversion
|
|
1331
|
+
}
|
|
1332
|
+
oFormatOptions.preserveDecimals = oConstraintOptions?.skipDecimalsValidation ?? false; // default value since we don't have a CLDR
|
|
1330
1333
|
parameterExpressions.push(currencyPath);
|
|
1331
1334
|
}
|
|
1332
1335
|
return {
|
|
@@ -1435,14 +1438,14 @@ sap.ui.define(["sap/fe/base/AnnotationEnum"], function (AnnotationEnum) {
|
|
|
1435
1438
|
}, ""));
|
|
1436
1439
|
} else if (expressions.some(isComplexTypeExpression)) {
|
|
1437
1440
|
let pathIdx = 0;
|
|
1438
|
-
const myConcatExpression = formatResult(expressions, "
|
|
1441
|
+
const myConcatExpression = formatResult(expressions, "._formatters.StandardFormatter#concat", undefined, true);
|
|
1439
1442
|
const allParts = [];
|
|
1440
1443
|
transformRecursively(myConcatExpression, "PathInModel", constantPath => {
|
|
1441
1444
|
allParts.push(constantPath);
|
|
1442
1445
|
return pathInModel(`$${pathIdx++}`, "$");
|
|
1443
1446
|
});
|
|
1444
1447
|
allParts.unshift(constant(JSON.stringify(myConcatExpression)));
|
|
1445
|
-
return formatResult(allParts, "
|
|
1448
|
+
return formatResult(allParts, "._formatters.StandardFormatter.bind($control)#evaluateComplexExpression", undefined, true);
|
|
1446
1449
|
}
|
|
1447
1450
|
return {
|
|
1448
1451
|
_type: "Concat",
|
|
@@ -1826,4 +1829,4 @@ sap.ui.define(["sap/fe/base/AnnotationEnum"], function (AnnotationEnum) {
|
|
|
1826
1829
|
}
|
|
1827
1830
|
return _exports;
|
|
1828
1831
|
}, false);
|
|
1829
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJpc1Byb3BlcnR5Iiwic2VydmljZU9iamVjdCIsIl90eXBlIiwiX2V4cG9ydHMiLCJFRE1fVFlQRV9NQVBQSU5HIiwidHlwZSIsImNvbnN0cmFpbnRzIiwiJFByZWNpc2lvbiIsIiRWNCIsIiRTY2FsZSIsIiRNYXhMZW5ndGgiLCIkTnVsbGFibGUiLCJ1bnJlc29sdmFibGVFeHByZXNzaW9uIiwiZXNjYXBlWG1sQXR0cmlidXRlIiwiaW5wdXRTdHJpbmciLCJyZXBsYWNlIiwiaGFzVW5yZXNvbHZhYmxlRXhwcmVzc2lvbiIsIl9sZW4iLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJleHByZXNzaW9ucyIsIkFycmF5IiwiX2tleSIsImZpbmQiLCJleHByIiwidW5kZWZpbmVkIiwiX2NoZWNrRXhwcmVzc2lvbnNBcmVFcXVhbCIsImEiLCJiIiwidmFsdWUiLCJvcGVyYW5kIiwib3BlcmF0b3IiLCJvcGVyYW5kcyIsImV2ZXJ5IiwiZXhwcmVzc2lvbiIsInNvbWUiLCJvdGhlckV4cHJlc3Npb24iLCJjb25kaXRpb24iLCJvblRydWUiLCJvbkZhbHNlIiwib3BlcmFuZDEiLCJvcGVyYW5kMiIsImFFeHByZXNzaW9ucyIsImJFeHByZXNzaW9ucyIsImluZGV4IiwicGF0aEluTW9kZWwiLCJtb2RlbE5hbWUiLCJwYXRoIiwidGFyZ2V0RW50aXR5U2V0IiwiZm4iLCJwYXJhbWV0ZXJzIiwiYmluZGluZ1BhcmFtZXRlcnMiLCJvdGhlckZ1bmN0aW9uIiwib2JqIiwicmVmIiwiZmxhdHRlblNldEV4cHJlc3Npb24iLCJyZWR1Y2UiLCJyZXN1bHQiLCJjYW5kaWRhdGVzRm9yRmxhdHRlbmluZyIsImZvckVhY2giLCJjYW5kaWRhdGUiLCJlIiwicHVzaCIsImhhc09wcG9zaXRlRXhwcmVzc2lvbnMiLCJuZWdhdGVkRXhwcmVzc2lvbnMiLCJtYXAiLCJub3QiLCJpIiwiYW5kIiwiX2xlbjIiLCJfa2V5MiIsIndyYXBQcmltaXRpdmUiLCJpc1N0YXRpY0ZhbHNlIiwibm9uVHJpdmlhbEV4cHJlc3Npb24iLCJmaWx0ZXIiLCJpc0ZhbHNlIiwiaXNDb25zdGFudCIsImNvbnN0YW50IiwiaXNWYWxpZCIsImlzVHJ1ZSIsIm9yIiwiX2xlbjMiLCJfa2V5MyIsImlzU3RhdGljVHJ1ZSIsImlzQ29tcGFyaXNvbiIsImlzVHJ1dGh5IiwiYmluZGluZ0V4cHJlc3Npb24iLCJ2aXNpdGVkTmF2aWdhdGlvblBhdGhzIiwicGF0aFZpc2l0b3IiLCJ0YXJnZXRQYXRoIiwibG9jYWxQYXRoIiwiY29uY2F0Iiwiam9pbiIsImNvbnN0YW50VmFsdWUiLCJpc0FycmF5IiwiaXNQcmltaXRpdmVPYmplY3QiLCJ2YWx1ZU9mIiwiT2JqZWN0IiwiZW50cmllcyIsInBsYWluRXhwcmVzc2lvbiIsIl9yZWYiLCJrZXkiLCJ2YWwiLCJ3cmFwcGVkVmFsdWUiLCJyZXNvbHZlQmluZGluZ1N0cmluZyIsInRhcmdldFR5cGUiLCJzdGFydHNXaXRoIiwicGF0aEluTW9kZWxSZWdleCIsInBhdGhJbk1vZGVsUmVnZXhNYXRjaCIsImV4ZWMiLCJpc05hTiIsIk51bWJlciIsInJlZmVyZW5jZSIsImJpbmRTdGF0ZSIsInN0YXRlT2JqZWN0UHJvcCIsIl9fYmluZGluZ0luZm8iLCJ0b1N0cmluZyIsIm1vZGVsIiwic29tZXRoaW5nIiwiaXNCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24iLCJtYXliZUNvbnN0YW50IiwiaXNQYXRoSW5Nb2RlbEV4cHJlc3Npb24iLCJtYXliZUJpbmRpbmciLCJpc0NvbXBsZXhUeXBlRXhwcmVzc2lvbiIsImlzQ29uY2F0RXhwcmVzc2lvbiIsImlzSWZFbHNlRXhwcmVzc2lvbiIsImlzVW5kZWZpbmVkRXhwcmVzc2lvbiIsImV4cHJlc3Npb25Bc0V4cHJlc3Npb24iLCJvYmplY3RUeXBlIiwiY29uc3RydWN0b3IiLCJuYW1lIiwiaXNDb21wbGV4QW5ub3RhdGlvbkV4cHJlc3Npb24iLCJhbm5vdGF0aW9uVmFsdWUiLCJnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24iLCJkZWZhdWx0VmFsdWUiLCJhbm5vdGF0aW9uSWZFeHByZXNzaW9uIiwiJElmIiwicGFyc2VBbm5vdGF0aW9uQ29uZGl0aW9uIiwiJE5vdCIsImVxdWFsIiwiJEVxIiwibm90RXF1YWwiLCIkTmUiLCJncmVhdGVyVGhhbiIsIiRHdCIsImdyZWF0ZXJPckVxdWFsIiwiJEdlIiwibGVzc1RoYW4iLCIkTHQiLCJsZXNzT3JFcXVhbCIsIiRMZSIsIiRPciIsIm9yQ29uZGl0aW9uIiwiJEFuZCIsImFuZENvbmRpdGlvbiIsImFubm90YXRpb25BcHBseUV4cHJlc3Npb24iLCJoYXNPd25Qcm9wZXJ0eSIsIiRQYXRoIiwiJEZ1bmN0aW9uIiwiJEFwcGx5IiwicmVzb2x2ZUVudW1WYWx1ZSIsIiRFbnVtTWVtYmVyIiwiaWZFbHNlIiwiY29udmVydFN1YkFwcGx5UGFyYW1ldGVycyIsImFwcGx5UGFyYW0iLCJhcHBseVBhcmFtQ29udmVydGVkIiwiYXBwbHlFeHByZXNzaW9uIiwicGFyYW1ldGVyIiwidGVtcGxhdGUiLCJ0ZW1wbGF0ZVBhcmFtcyIsInNsaWNlIiwidGFyZ2V0T2JqZWN0IiwiJE5hbWUiLCIkTGFiZWxlZEVsZW1lbnQiLCJjb21wYXJpc29uIiwibGVmdE9wZXJhbmQiLCJyaWdodE9wZXJhbmQiLCJsZWZ0RXhwcmVzc2lvbiIsInJpZ2h0RXhwcmVzc2lvbiIsImNoZWNrVW5kZWZpbmVkIiwibGVmdCIsInJpZ2h0IiwicmVkdWNlZCIsImNvbmRpdGlvbkV4cHJlc3Npb24iLCJvblRydWVFeHByZXNzaW9uIiwib25GYWxzZUV4cHJlc3Npb24iLCJwYXRoSWR4IiwibXlJZkVsc2VFeHByZXNzaW9uIiwiZm9ybWF0UmVzdWx0IiwiYWxsUGFydHMiLCJ0cmFuc2Zvcm1SZWN1cnNpdmVseSIsImNvbnN0YW50UGF0aCIsInVuc2hpZnQiLCJKU09OIiwic3RyaW5naWZ5IiwiaGFzUmVmZXJlbmNlVG9EZWZhdWx0Q29udGV4dCIsImZvcm1hdHRlckZ1bmN0aW9uIiwiY29udGV4dEVudGl0eVR5cGUiLCJpZ25vcmVDb21wbGV4VHlwZSIsInBhcmFtZXRlckV4cHJlc3Npb25zIiwia2V5cyIsImZ1bmN0aW9uTmFtZSIsIl9fZnVuY3Rpb25OYW1lIiwiZm9ybWF0dGVyQ2xhc3MiLCJmb3JtYXR0ZXJOYW1lIiwic3BsaXQiLCJteUZvcm1hdEV4cHJlc3Npb24iLCJzZXRVcENvbnN0cmFpbnRzIiwidGFyZ2V0TWFwcGluZyIsInByb3BlcnR5Iiwic2NhbGUiLCJwcmVjaXNpb24iLCJtYXhMZW5ndGgiLCJudWxsYWJsZSIsImFubm90YXRpb25zIiwiVmFsaWRhdGlvbiIsIk1pbmltdW0iLCJtaW5pbXVtIiwiTWF4aW11bSIsIm1heGltdW0iLCJDb21tb24iLCJJc0RpZ2l0U2VxdWVuY2UiLCJpc0RpZ2l0U2VxdWVuY2UiLCJWNCIsImZvcm1hdFdpdGhUeXBlSW5mb3JtYXRpb24iLCJwcm9wZXJ0eUJpbmRpbmdFeHByZXNzaW9uIiwiaWdub3JlQ29uc3RyYWludHMiLCJvdXRFeHByZXNzaW9uIiwiZm9ybWF0T3B0aW9ucyIsImluZGV4T2YiLCJhc3NpZ24iLCJwYXJzZUFzU3RyaW5nIiwicGFyc2VLZWVwc0VtcHR5U3RyaW5nIiwiZmlzY2FsVHlwZSIsImdldEZpc2NhbFR5cGUiLCJ0eXBlc1N1cHBvcnRpbmdQYXJzZUVtcHR5VmFsdWVUb1plcm8iLCJpbmNsdWRlcyIsInBhcnNlRW1wdHlWYWx1ZVRvWmVybyIsImVtcHR5U3RyaW5nIiwiSXNGaXNjYWxZZWFyIiwiSXNGaXNjYWxQZXJpb2QiLCJJc0Zpc2NhbFllYXJQZXJpb2QiLCJJc0Zpc2NhbFF1YXJ0ZXIiLCJJc0Zpc2NhbFllYXJRdWFydGVyIiwiSXNGaXNjYWxXZWVrIiwiSXNGaXNjYWxZZWFyV2VlayIsIklzRGF5T2ZGaXNjYWxZZWFyIiwiYWRkVHlwZUluZm9ybWF0aW9uIiwib0Zvcm1hdE9wdGlvbnMiLCJvQ29uc3RyYWludE9wdGlvbnMiLCJfZ2V0Q29tcGxleFR5cGVGb3JtYXRPcHRpb25zRnJvbUZpcnN0UGFyYW0iLCJ1b21QYXRoIiwibW9kZSIsInByZXNlcnZlRGVjaW1hbHMiLCJza2lwRGVjaW1hbHNWYWxpZGF0aW9uIiwiY3VycmVuY3lQYXRoIiwicGFyYW0iLCJzaG93TnVtYmVyIiwic2hvd01lYXN1cmUiLCJkZWNpbWFsUGFkZGluZyIsImZ1bmMiLCJvbiIsImlzRm9ybWF0dGluZ0ZuIiwiaXNFbXB0eSIsImFCaW5kaW5ncyIsImZpbmFsRXhwcmVzc2lvbiIsImFsd2F5c0tlZXBUYXJnZXRUeXBlIiwiX2xlbjQiLCJpbkV4cHJlc3Npb25zIiwiX2tleTQiLCJjb25jYXRlbmF0ZWQiLCJteUNvbmNhdEV4cHJlc3Npb24iLCJpbkV4cHJlc3Npb24iLCJleHByZXNzaW9uVHlwZSIsInRyYW5zZm9ybUZ1bmN0aW9uIiwiaW5jbHVkZUFsbEV4cHJlc3Npb24iLCJzdWJFeHByZXNzaW9uIiwiYmluZGluZ1BhcmFtZXRlciIsIm5lZWRQYXJlbnRoZXNpcyIsImNvbXBpbGVDb25zdGFudE9iamVjdCIsImlzTnVsbGFibGUiLCJvYmplY3RzIiwicHJvcGVydGllcyIsImNoaWxkUmVzdWx0IiwiY29tcGlsZUV4cHJlc3Npb24iLCJjb21waWxlQ29uc3RhbnQiLCJlbWJlZGRlZEluQmluZGluZyIsImRvTm90U3RyaW5naWZ5IiwiY29tcGlsZVBhdGhJbk1vZGVsRXhwcmVzc2lvbiIsImV4cHJlc3Npb25Gb3JCaW5kaW5nIiwiZW1iZWRkZWRTZXBhcmF0b3IiLCJjb21wbGV4QmluZGluZ0RlZmluaXRpb24iLCJjb21waWxlUGF0aEluTW9kZWwiLCJvdXRCaW5kaW5nIiwic2VwYXJhdG9yIiwiY29tcGlsZUNvbXBsZXhUeXBlRXhwcmVzc2lvbiIsImNvbXBpbGVQYXRoUGFyYW1ldGVyIiwib3V0cHV0RW5kIiwiaGFzRWxlbWVudHMiLCJ3cmFwQmluZGluZ0V4cHJlc3Npb24iLCJwYXJlbnRoZXNpc1JlcXVpcmVkIiwia2VlcFRhcmdldFR5cGUiLCJoYXNFbWJlZGRlZEZ1bmN0aW9uQ2FsbE9yQmluZGluZyIsInN1YkZuIiwic3ViU3ViRm4iLCJhcmd1bWVudFN0cmluZyIsImFyZyIsImZuQ2FsbCIsInN1YnN0cmluZyIsImNvbXBhcmlzb25FeHByZXNzaW9uIiwiY29tcGlsZUNvbXBhcmlzb25FeHByZXNzaW9uIiwiaWZFbHNlRXhwcmVzc2lvbiIsInNldEV4cHJlc3Npb24iLCJjb25jYXRFeHByZXNzaW9uIiwibmVzdGVkRXhwcmVzc2lvbiIsImxlbmd0aEV4cHJlc3Npb24iLCJub3RFeHByZXNzaW9uIiwidHJ1dGh5RXhwcmVzc2lvbiIsImZvcm1hdHRlckV4cHJlc3Npb24iLCJjb21waWxlRm9ybWF0dGVyRXhwcmVzc2lvbiIsImNvbXBsZXhUeXBlRXhwcmVzc2lvbiIsImNvbXBpbGVPcGVyYW5kIiwiY29tcGlsZWRPcGVyYW5kIiwicGFydHMiLCJzaW5nbGVQYXRoIiwib3V0VmFsdWUiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIkJpbmRpbmdUb29sa2l0LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHtcblx0QWN0aW9uUGFyYW1ldGVyLFxuXHRBbmRBbm5vdGF0aW9uRXhwcmVzc2lvbixcblx0QW5kQ29uZGl0aW9uYWxFeHByZXNzaW9uLFxuXHRBcHBseUFubm90YXRpb25FeHByZXNzaW9uLFxuXHRCb29sZWFuLFxuXHRDb25kaXRpb25hbENoZWNrT3JWYWx1ZSxcblx0RW50aXR5U2V0LFxuXHRFbnRpdHlUeXBlLFxuXHRFcUFubm90YXRpb25FeHByZXNzaW9uLFxuXHRFcUNvbmRpdGlvbmFsRXhwcmVzc2lvbixcblx0R2VBbm5vdGF0aW9uRXhwcmVzc2lvbixcblx0R2VDb25kaXRpb25hbEV4cHJlc3Npb24sXG5cdEd0QW5ub3RhdGlvbkV4cHJlc3Npb24sXG5cdEd0Q29uZGl0aW9uYWxFeHByZXNzaW9uLFxuXHRJZkFubm90YXRpb25FeHByZXNzaW9uLFxuXHRJZkFubm90YXRpb25FeHByZXNzaW9uVmFsdWUsXG5cdExlQW5ub3RhdGlvbkV4cHJlc3Npb24sXG5cdExlQ29uZGl0aW9uYWxFeHByZXNzaW9uLFxuXHRMdEFubm90YXRpb25FeHByZXNzaW9uLFxuXHRMdENvbmRpdGlvbmFsRXhwcmVzc2lvbixcblx0TmVBbm5vdGF0aW9uRXhwcmVzc2lvbixcblx0TmVDb25kaXRpb25hbEV4cHJlc3Npb24sXG5cdE5vdEFubm90YXRpb25FeHByZXNzaW9uLFxuXHROb3RDb25kaXRpb25hbEV4cHJlc3Npb24sXG5cdE9yQW5ub3RhdGlvbkV4cHJlc3Npb24sXG5cdE9yQ29uZGl0aW9uYWxFeHByZXNzaW9uLFxuXHRQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24sXG5cdFBhdGhDb25kaXRpb25FeHByZXNzaW9uLFxuXHRQcm9wZXJ0eSxcblx0UHJvcGVydHlBbm5vdGF0aW9uVmFsdWUsXG5cdENvbnN0YW50RXhwcmVzc2lvbiBhcyBWb2NhYkNvbnN0YW50RXhwcmVzc2lvblxufSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXNcIjtcbmltcG9ydCB7IENvbW1vbkFubm90YXRpb25UZXJtcyB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvQ29tbW9uXCI7XG5pbXBvcnQgeyByZXNvbHZlRW51bVZhbHVlIH0gZnJvbSBcInNhcC9mZS9iYXNlL0Fubm90YXRpb25FbnVtXCI7XG5pbXBvcnQgdHlwZSB7IEJpbmRpbmdJbmZvSG9sZGVyIH0gZnJvbSBcInNhcC9mZS9iYXNlL0NsYXNzU3VwcG9ydFwiO1xuXG5leHBvcnQgdHlwZSBQcmltaXRpdmVUeXBlID0gc3RyaW5nIHwgbnVtYmVyIHwgYmlnaW50IHwgYm9vbGVhbiB8IG9iamVjdCB8IG51bGwgfCB1bmRlZmluZWQ7XG50eXBlIERlZmluZWRQcmltaXRpdmVUeXBlID0gc3RyaW5nIHwgbnVtYmVyIHwgYmlnaW50IHwgYm9vbGVhbiB8IG9iamVjdDtcbnR5cGUgUHJpbWl0aXZlVHlwZUNhc3Q8UD4gPSBQIGV4dGVuZHMgU3RyaW5nID8gc3RyaW5nIDogUCBleHRlbmRzIEJvb2xlYW4gPyBib29sZWFuIDogUCBleHRlbmRzIE51bWJlciA/IG51bWJlciA6IFA7XG50eXBlIEJhc2VFeHByZXNzaW9uPF9UPiA9IHtcblx0X3R5cGU6IHN0cmluZztcbn07XG5cbmV4cG9ydCB0eXBlIEZvcm1hdE9wdGlvbnMgPSBQYXJ0aWFsPHtcblx0Y3VzdG9tVW5pdHM6IFJlY29yZDxzdHJpbmcsIG9iamVjdD47XG5cdGN1c3RvbUN1cnJlbmNpZXM6IFJlY29yZDxzdHJpbmcsIG9iamVjdD47XG5cdGRlY2ltYWxzOiBudW1iZXI7XG5cdGVtcHR5U3RyaW5nOiBudWxsIHwgbnVtYmVyIHwgc3RyaW5nO1xuXHRmaXNjYWxUeXBlOiBzdHJpbmc7XG5cdGdyb3VwaW5nRW5hYmxlZDogYm9vbGVhbjtcblx0bWF4RnJhY3Rpb25EaWdpdHM6IG51bWJlcjtcblx0bWF4SW50ZWdlckRpZ2l0czogbnVtYmVyO1xuXHRtaW5GcmFjdGlvbkRpZ2l0czogbnVtYmVyO1xuXHRtaW5JbnRlZ2VyRGlnaXRzOiBudW1iZXI7XG5cdHBhcnNlQXNTdHJpbmc6IGJvb2xlYW47XG5cdHBhcnNlS2VlcHNFbXB0eVN0cmluZzogYm9vbGVhbjtcblx0cGF0dGVybjogc3RyaW5nO1xuXHRwcmVjaXNpb246IG51bWJlcjtcblx0cHJlc2VydmVEZWNpbWFsczogYm9vbGVhbjtcblx0c2hvcnREZWNpbWFsczogbnVtYmVyO1xuXHRzaG9ydFJlZk51bWJlcjogbnVtYmVyO1xuXHRzaG93TWVhc3VyZTogYm9vbGVhbjtcblx0c2hvd051bWJlcjogYm9vbGVhbjtcblx0c2hvd1NjYWxlOiBib29sZWFuO1xuXHRzdHlsZTogc3RyaW5nO1xufT47XG5cbmV4cG9ydCB0eXBlIENvbnN0YW50RXhwcmVzc2lvbjxUPiA9IEJhc2VFeHByZXNzaW9uPFQ+ICYge1xuXHRfdHlwZTogXCJDb25zdGFudFwiO1xuXHR2YWx1ZTogVDtcbn07XG5cbnR5cGUgU2V0T3BlcmF0b3IgPSBcIiYmXCIgfCBcInx8XCI7XG5leHBvcnQgdHlwZSBTZXRFeHByZXNzaW9uID0gQmFzZUV4cHJlc3Npb248Ym9vbGVhbj4gJiB7XG5cdF90eXBlOiBcIlNldFwiO1xuXHRvcGVyYXRvcjogU2V0T3BlcmF0b3I7XG5cdG9wZXJhbmRzOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj5bXTtcbn07XG5cbmV4cG9ydCB0eXBlIE5vdEV4cHJlc3Npb24gPSBCYXNlRXhwcmVzc2lvbjxib29sZWFuPiAmIHtcblx0X3R5cGU6IFwiTm90XCI7XG5cdG9wZXJhbmQ6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPjtcbn07XG5cbmV4cG9ydCB0eXBlIFRydXRoeUV4cHJlc3Npb24gPSBCYXNlRXhwcmVzc2lvbjxib29sZWFuPiAmIHtcblx0X3R5cGU6IFwiVHJ1dGh5XCI7XG5cdG9wZXJhbmQ6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxzdHJpbmc+O1xufTtcblxuZXhwb3J0IHR5cGUgUmVmZXJlbmNlRXhwcmVzc2lvbiA9IEJhc2VFeHByZXNzaW9uPG9iamVjdD4gJiB7XG5cdF90eXBlOiBcIlJlZlwiO1xuXHRyZWY6IHN0cmluZyB8IG51bGw7XG59O1xuXG5leHBvcnQgdHlwZSBGb3JtYXR0ZXJFeHByZXNzaW9uPFQ+ID0gQmFzZUV4cHJlc3Npb248VD4gJiB7XG5cdF90eXBlOiBcIkZvcm1hdHRlclwiO1xuXHRmbjogc3RyaW5nO1xuXHRwYXJhbWV0ZXJzOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248dW5rbm93bj5bXTtcbn07XG5cbnR5cGUgQ29tcGxleFR5cGVFeHByZXNzaW9uPFQ+ID0gQmFzZUV4cHJlc3Npb248VD4gJiB7XG5cdF90eXBlOiBcIkNvbXBsZXhUeXBlXCI7XG5cdHR5cGU6IHN0cmluZztcblx0Zm9ybWF0T3B0aW9uczogRm9ybWF0T3B0aW9ucztcblx0Y29uc3RyYWludHM6IG9iamVjdDtcblx0cGFyYW1ldGVyczogb2JqZWN0O1xuXHRiaW5kaW5nUGFyYW1ldGVyczogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHVua25vd24+W107XG59O1xuXG5leHBvcnQgdHlwZSBGdW5jdGlvbkV4cHJlc3Npb248VD4gPSBCYXNlRXhwcmVzc2lvbjxUPiAmIHtcblx0X3R5cGU6IFwiRnVuY3Rpb25cIjtcblx0b2JqPzogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPG9iamVjdD47XG5cdGZuOiBzdHJpbmc7XG5cdGlzRm9ybWF0dGluZ0ZuOiBib29sZWFuO1xuXHRwYXJhbWV0ZXJzOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248dW5rbm93bj5bXTtcbn07XG5cbmV4cG9ydCB0eXBlIENvbmNhdEV4cHJlc3Npb24gPSBCYXNlRXhwcmVzc2lvbjxzdHJpbmc+ICYge1xuXHRfdHlwZTogXCJDb25jYXRcIjtcblx0ZXhwcmVzc2lvbnM6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxzdHJpbmc+W107XG59O1xuXG5leHBvcnQgdHlwZSBMZW5ndGhFeHByZXNzaW9uID0gQmFzZUV4cHJlc3Npb248c3RyaW5nPiAmIHtcblx0X3R5cGU6IFwiTGVuZ3RoXCI7XG5cdHBhdGhJbk1vZGVsOiBQYXRoSW5Nb2RlbEV4cHJlc3Npb248dW5rbm93bj47XG59O1xuXG50eXBlIFVucmVzb2x2YWJsZVBhdGhFeHByZXNzaW9uID0gQmFzZUV4cHJlc3Npb248c3RyaW5nPiAmIHtcblx0X3R5cGU6IFwiVW5yZXNvbHZhYmxlXCI7XG59O1xuXG4vKipcbiAqIEB0eXBlZGVmIFBhdGhJbk1vZGVsRXhwcmVzc2lvblxuICovXG5leHBvcnQgdHlwZSBQYXRoSW5Nb2RlbEV4cHJlc3Npb248VD4gPSBCYXNlRXhwcmVzc2lvbjxUPiAmIHtcblx0X3R5cGU6IFwiUGF0aEluTW9kZWxcIjtcblx0bW9kZWxOYW1lPzogc3RyaW5nO1xuXHRwYXRoOiBzdHJpbmc7XG5cdHRhcmdldEVudGl0eVNldD86IEVudGl0eVNldDtcblx0dHlwZT86IHN0cmluZztcblx0Y29uc3RyYWludHM/OiBCaW5kaW5nQ29uc3RyYWludHM7XG5cdHBhcmFtZXRlcnM/OiBvYmplY3Q7XG5cdHRhcmdldFR5cGU/OiBzdHJpbmc7XG5cdG1vZGU/OiBzdHJpbmc7XG5cdGZvcm1hdE9wdGlvbnM/OiBGb3JtYXRPcHRpb25zO1xuXHRhbHdheXNLZWVwVGFyZ2V0VHlwZT86IGJvb2xlYW47XG59O1xuXG5leHBvcnQgdHlwZSBFbWJlZGRlZFVJNUJpbmRpbmdFeHByZXNzaW9uPFQ+ID0gQmFzZUV4cHJlc3Npb248VD4gJiB7XG5cdF90eXBlOiBcIkVtYmVkZGVkQmluZGluZ1wiO1xuXHR2YWx1ZTogc3RyaW5nO1xufTtcblxuZXhwb3J0IHR5cGUgRW1iZWRkZWRVSTVFeHByZXNzaW9uQmluZGluZ0V4cHJlc3Npb248VD4gPSBCYXNlRXhwcmVzc2lvbjxUPiAmIHtcblx0X3R5cGU6IFwiRW1iZWRkZWRFeHByZXNzaW9uQmluZGluZ1wiO1xuXHR2YWx1ZTogc3RyaW5nO1xufTtcblxuZXhwb3J0IHR5cGUgQ29tcGFyaXNvbk9wZXJhdG9yID0gXCI9PT1cIiB8IFwiIT09XCIgfCBcIj49XCIgfCBcIj5cIiB8IFwiPD1cIiB8IFwiPFwiO1xuZXhwb3J0IHR5cGUgQ29tcGFyaXNvbkV4cHJlc3Npb24gPSBCYXNlRXhwcmVzc2lvbjxib29sZWFuPiAmIHtcblx0X3R5cGU6IFwiQ29tcGFyaXNvblwiO1xuXHRvcGVyYXRvcjogQ29tcGFyaXNvbk9wZXJhdG9yO1xuXHRvcGVyYW5kMTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHVua25vd24+O1xuXHRvcGVyYW5kMjogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHVua25vd24+O1xufTtcblxuZXhwb3J0IHR5cGUgSWZFbHNlRXhwcmVzc2lvbjxUPiA9IEJhc2VFeHByZXNzaW9uPFQ+ICYge1xuXHRfdHlwZTogXCJJZkVsc2VcIjtcblx0Y29uZGl0aW9uOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj47XG5cdG9uVHJ1ZTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFQ+O1xuXHRvbkZhbHNlOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248VD47XG59O1xuZXhwb3J0IGZ1bmN0aW9uIGlzUHJvcGVydHkoc2VydmljZU9iamVjdDogdW5rbm93bik6IHNlcnZpY2VPYmplY3QgaXMgUHJvcGVydHkge1xuXHRyZXR1cm4gKHNlcnZpY2VPYmplY3QgYXMgUHJvcGVydHkpPy5fdHlwZSA9PT0gXCJQcm9wZXJ0eVwiO1xufVxuXG4vKipcbiAqIEFuIGV4cHJlc3Npb24gdGhhdCBldmFsdWF0ZXMgdG8gdHlwZSBULlxuICogQHR5cGVkZWYgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uXG4gKi9cbmV4cG9ydCB0eXBlIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxUPiA9XG5cdHwgVW5yZXNvbHZhYmxlUGF0aEV4cHJlc3Npb25cblx0fCBDb25zdGFudEV4cHJlc3Npb248VD5cblx0fCBTZXRFeHByZXNzaW9uXG5cdHwgTm90RXhwcmVzc2lvblxuXHR8IFRydXRoeUV4cHJlc3Npb25cblx0fCBDb25jYXRFeHByZXNzaW9uXG5cdHwgTGVuZ3RoRXhwcmVzc2lvblxuXHR8IFBhdGhJbk1vZGVsRXhwcmVzc2lvbjxUPlxuXHR8IEVtYmVkZGVkVUk1QmluZGluZ0V4cHJlc3Npb248VD5cblx0fCBFbWJlZGRlZFVJNUV4cHJlc3Npb25CaW5kaW5nRXhwcmVzc2lvbjxUPlxuXHR8IENvbXBhcmlzb25FeHByZXNzaW9uXG5cdHwgSWZFbHNlRXhwcmVzc2lvbjxUPlxuXHR8IEZvcm1hdHRlckV4cHJlc3Npb248VD5cblx0fCBDb21wbGV4VHlwZUV4cHJlc3Npb248VD5cblx0fCBSZWZlcmVuY2VFeHByZXNzaW9uXG5cdHwgRnVuY3Rpb25FeHByZXNzaW9uPFQ+O1xuXG50eXBlIFR5cGVNYXBwaW5nRGVmaW5pdGlvbiA9IHtcblx0dHlwZTogc3RyaW5nO1xuXHRjb25zdHJhaW50cz86IHtcblx0XHQkUHJlY2lzaW9uPzogc3RyaW5nO1xuXHRcdCRWND86IHN0cmluZztcblx0XHQkU2NhbGU/OiBzdHJpbmc7XG5cdFx0JE1heExlbmd0aD86IHN0cmluZztcblx0XHQkTnVsbGFibGU/OiBzdHJpbmc7XG5cdFx0XCJAT3JnLk9EYXRhLlZhbGlkYXRpb24uVjEuTWluaW11bS8kRGVjaW1hbFwiPzogc3RyaW5nO1xuXHRcdFwiQE9yZy5PRGF0YS5WYWxpZGF0aW9uLlYxLk1pbmltdW1AT3JnLk9EYXRhLlZhbGlkYXRpb24uVjEuRXhjbHVzaXZlXCI/OiBzdHJpbmc7XG5cdFx0XCJAT3JnLk9EYXRhLlZhbGlkYXRpb24uVjEuTWF4aW11bS8kRGVjaW1hbFwiPzogc3RyaW5nO1xuXHRcdFwiQE9yZy5PRGF0YS5WYWxpZGF0aW9uLlYxLk1heGltdW1AT3JnLk9EYXRhLlZhbGlkYXRpb24uVjEuRXhjbHVzaXZlXCI/OiBzdHJpbmc7XG5cdFx0XCJAY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLklzRGlnaXRTZXF1ZW5jZVwiPzogc3RyaW5nO1xuXHR9O1xufTtcbmV4cG9ydCBjb25zdCBFRE1fVFlQRV9NQVBQSU5HOiBSZWNvcmQ8c3RyaW5nLCBUeXBlTWFwcGluZ0RlZmluaXRpb24+ID0ge1xuXHRcIkVkbS5Cb29sZWFuXCI6IHsgdHlwZTogXCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5Cb29sZWFuXCIgfSxcblx0XCJFZG0uQnl0ZVwiOiB7IHR5cGU6IFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuQnl0ZVwiIH0sXG5cdFwiRWRtLkRhdGVcIjogeyB0eXBlOiBcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLkRhdGVcIiB9LFxuXHRcIkVkbS5EYXRlVGltZU9mZnNldFwiOiB7XG5cdFx0Y29uc3RyYWludHM6IHtcblx0XHRcdCRQcmVjaXNpb246IFwicHJlY2lzaW9uXCIsXG5cdFx0XHQkVjQ6IFwiVjRcIlxuXHRcdH0sXG5cdFx0dHlwZTogXCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5EYXRlVGltZU9mZnNldFwiXG5cdH0sXG5cdFwiRWRtLkRlY2ltYWxcIjoge1xuXHRcdGNvbnN0cmFpbnRzOiB7XG5cdFx0XHRcIkBPcmcuT0RhdGEuVmFsaWRhdGlvbi5WMS5NaW5pbXVtLyREZWNpbWFsXCI6IFwibWluaW11bVwiLFxuXHRcdFx0XCJAT3JnLk9EYXRhLlZhbGlkYXRpb24uVjEuTWluaW11bUBPcmcuT0RhdGEuVmFsaWRhdGlvbi5WMS5FeGNsdXNpdmVcIjogXCJtaW5pbXVtRXhjbHVzaXZlXCIsXG5cdFx0XHRcIkBPcmcuT0RhdGEuVmFsaWRhdGlvbi5WMS5NYXhpbXVtLyREZWNpbWFsXCI6IFwibWF4aW11bVwiLFxuXHRcdFx0XCJAT3JnLk9EYXRhLlZhbGlkYXRpb24uVjEuTWF4aW11bUBPcmcuT0RhdGEuVmFsaWRhdGlvbi5WMS5FeGNsdXNpdmVcIjogXCJtYXhpbXVtRXhjbHVzaXZlXCIsXG5cdFx0XHQkUHJlY2lzaW9uOiBcInByZWNpc2lvblwiLFxuXHRcdFx0JFNjYWxlOiBcInNjYWxlXCJcblx0XHR9LFxuXHRcdHR5cGU6IFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuRGVjaW1hbFwiXG5cdH0sXG5cdFwiRWRtLkRvdWJsZVwiOiB7IHR5cGU6IFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuRG91YmxlXCIgfSxcblx0XCJFZG0uR3VpZFwiOiB7IHR5cGU6IFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuR3VpZFwiIH0sXG5cdFwiRWRtLkludDE2XCI6IHsgdHlwZTogXCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5JbnQxNlwiIH0sXG5cdFwiRWRtLkludDMyXCI6IHsgdHlwZTogXCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5JbnQzMlwiIH0sXG5cdFwiRWRtLkludDY0XCI6IHsgdHlwZTogXCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5JbnQ2NFwiIH0sXG5cdFwiRWRtLlNCeXRlXCI6IHsgdHlwZTogXCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5TQnl0ZVwiIH0sXG5cdFwiRWRtLlNpbmdsZVwiOiB7IHR5cGU6IFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuU2luZ2xlXCIgfSxcblx0XCJFZG0uU3RyZWFtXCI6IHsgdHlwZTogXCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5TdHJlYW1cIiB9LFxuXHRcIkVkbS5CaW5hcnlcIjogeyB0eXBlOiBcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLlN0cmVhbVwiIH0sXG5cdFwiRWRtLlN0cmluZ1wiOiB7XG5cdFx0Y29uc3RyYWludHM6IHtcblx0XHRcdFwiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5Jc0RpZ2l0U2VxdWVuY2VcIjogXCJpc0RpZ2l0U2VxdWVuY2VcIixcblx0XHRcdCRNYXhMZW5ndGg6IFwibWF4TGVuZ3RoXCIsXG5cdFx0XHQkTnVsbGFibGU6IFwibnVsbGFibGVcIlxuXHRcdH0sXG5cdFx0dHlwZTogXCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5TdHJpbmdcIlxuXHR9LFxuXHRcIkVkbS5UaW1lT2ZEYXlcIjoge1xuXHRcdGNvbnN0cmFpbnRzOiB7XG5cdFx0XHQkUHJlY2lzaW9uOiBcInByZWNpc2lvblwiXG5cdFx0fSxcblx0XHR0eXBlOiBcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLlRpbWVPZkRheVwiXG5cdH1cbn07XG5cbi8qKlxuICogQW4gZXhwcmVzc2lvbiB0aGF0IGV2YWx1YXRlcyB0byB0eXBlIFQsIG9yIGEgY29uc3RhbnQgdmFsdWUgb2YgdHlwZSBUXG4gKi9cbmV4cG9ydCB0eXBlIEV4cHJlc3Npb25PclByaW1pdGl2ZTxUIGV4dGVuZHMgUHJpbWl0aXZlVHlwZT4gPSBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248VD4gfCBUO1xuXG5leHBvcnQgY29uc3QgdW5yZXNvbHZhYmxlRXhwcmVzc2lvbjogVW5yZXNvbHZhYmxlUGF0aEV4cHJlc3Npb24gPSB7XG5cdF90eXBlOiBcIlVucmVzb2x2YWJsZVwiXG59O1xuXG5leHBvcnQgZnVuY3Rpb24gZXNjYXBlWG1sQXR0cmlidXRlKGlucHV0U3RyaW5nOiBzdHJpbmcpOiBzdHJpbmcge1xuXHRyZXR1cm4gaW5wdXRTdHJpbmcucmVwbGFjZSgvJy9nLCBcIlxcXFwnXCIpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaGFzVW5yZXNvbHZhYmxlRXhwcmVzc2lvbiguLi5leHByZXNzaW9uczogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHVua25vd24+W10pOiBib29sZWFuIHtcblx0cmV0dXJuIGV4cHJlc3Npb25zLmZpbmQoKGV4cHIpID0+IGV4cHIuX3R5cGUgPT09IFwiVW5yZXNvbHZhYmxlXCIpICE9PSB1bmRlZmluZWQ7XG59XG4vKipcbiAqIENoZWNrIHR3byBleHByZXNzaW9ucyBmb3IgKGRlZXApIGVxdWFsaXR5LlxuICogQHBhcmFtIGFcbiAqIEBwYXJhbSBiXG4gKiBAcmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHR3byBleHByZXNzaW9ucyBhcmUgZXF1YWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIF9jaGVja0V4cHJlc3Npb25zQXJlRXF1YWw8VD4oYTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFQ+LCBiOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248VD4pOiBib29sZWFuIHtcblx0aWYgKGEuX3R5cGUgIT09IGIuX3R5cGUpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHRzd2l0Y2ggKGEuX3R5cGUpIHtcblx0XHRjYXNlIFwiVW5yZXNvbHZhYmxlXCI6XG5cdFx0XHRyZXR1cm4gZmFsc2U7IC8vIFVucmVzb2x2YWJsZSBpcyBuZXZlciBlcXVhbCB0byBhbnl0aGluZyBldmVuIGl0c2VsZlxuXHRcdGNhc2UgXCJDb25zdGFudFwiOlxuXHRcdGNhc2UgXCJFbWJlZGRlZEJpbmRpbmdcIjpcblx0XHRjYXNlIFwiRW1iZWRkZWRFeHByZXNzaW9uQmluZGluZ1wiOlxuXHRcdFx0cmV0dXJuIGEudmFsdWUgPT09IChiIGFzIENvbnN0YW50RXhwcmVzc2lvbjxUPikudmFsdWU7XG5cblx0XHRjYXNlIFwiTm90XCI6XG5cdFx0XHRyZXR1cm4gX2NoZWNrRXhwcmVzc2lvbnNBcmVFcXVhbChhLm9wZXJhbmQsIChiIGFzIE5vdEV4cHJlc3Npb24pLm9wZXJhbmQpO1xuXHRcdGNhc2UgXCJUcnV0aHlcIjpcblx0XHRcdHJldHVybiBfY2hlY2tFeHByZXNzaW9uc0FyZUVxdWFsKGEub3BlcmFuZCwgKGIgYXMgVHJ1dGh5RXhwcmVzc2lvbikub3BlcmFuZCk7XG5cdFx0Y2FzZSBcIlNldFwiOlxuXHRcdFx0cmV0dXJuIChcblx0XHRcdFx0YS5vcGVyYXRvciA9PT0gKGIgYXMgU2V0RXhwcmVzc2lvbikub3BlcmF0b3IgJiZcblx0XHRcdFx0YS5vcGVyYW5kcy5sZW5ndGggPT09IChiIGFzIFNldEV4cHJlc3Npb24pLm9wZXJhbmRzLmxlbmd0aCAmJlxuXHRcdFx0XHRhLm9wZXJhbmRzLmV2ZXJ5KChleHByZXNzaW9uKSA9PlxuXHRcdFx0XHRcdChiIGFzIFNldEV4cHJlc3Npb24pLm9wZXJhbmRzLnNvbWUoKG90aGVyRXhwcmVzc2lvbikgPT4gX2NoZWNrRXhwcmVzc2lvbnNBcmVFcXVhbChleHByZXNzaW9uLCBvdGhlckV4cHJlc3Npb24pKVxuXHRcdFx0XHQpXG5cdFx0XHQpO1xuXG5cdFx0Y2FzZSBcIklmRWxzZVwiOlxuXHRcdFx0cmV0dXJuIChcblx0XHRcdFx0X2NoZWNrRXhwcmVzc2lvbnNBcmVFcXVhbChhLmNvbmRpdGlvbiwgKGIgYXMgSWZFbHNlRXhwcmVzc2lvbjxUPikuY29uZGl0aW9uKSAmJlxuXHRcdFx0XHRfY2hlY2tFeHByZXNzaW9uc0FyZUVxdWFsKGEub25UcnVlLCAoYiBhcyBJZkVsc2VFeHByZXNzaW9uPFQ+KS5vblRydWUpICYmXG5cdFx0XHRcdF9jaGVja0V4cHJlc3Npb25zQXJlRXF1YWwoYS5vbkZhbHNlLCAoYiBhcyBJZkVsc2VFeHByZXNzaW9uPFQ+KS5vbkZhbHNlKVxuXHRcdFx0KTtcblxuXHRcdGNhc2UgXCJDb21wYXJpc29uXCI6XG5cdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRhLm9wZXJhdG9yID09PSAoYiBhcyBDb21wYXJpc29uRXhwcmVzc2lvbikub3BlcmF0b3IgJiZcblx0XHRcdFx0X2NoZWNrRXhwcmVzc2lvbnNBcmVFcXVhbChhLm9wZXJhbmQxLCAoYiBhcyBDb21wYXJpc29uRXhwcmVzc2lvbikub3BlcmFuZDEpICYmXG5cdFx0XHRcdF9jaGVja0V4cHJlc3Npb25zQXJlRXF1YWwoYS5vcGVyYW5kMiwgKGIgYXMgQ29tcGFyaXNvbkV4cHJlc3Npb24pLm9wZXJhbmQyKVxuXHRcdFx0KTtcblxuXHRcdGNhc2UgXCJDb25jYXRcIjpcblx0XHRcdGNvbnN0IGFFeHByZXNzaW9ucyA9IGEuZXhwcmVzc2lvbnM7XG5cdFx0XHRjb25zdCBiRXhwcmVzc2lvbnMgPSAoYiBhcyBDb25jYXRFeHByZXNzaW9uKS5leHByZXNzaW9ucztcblx0XHRcdGlmIChhRXhwcmVzc2lvbnMubGVuZ3RoICE9PSBiRXhwcmVzc2lvbnMubGVuZ3RoKSB7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBhRXhwcmVzc2lvbnMuZXZlcnkoKGV4cHJlc3Npb24sIGluZGV4KSA9PiB7XG5cdFx0XHRcdHJldHVybiBfY2hlY2tFeHByZXNzaW9uc0FyZUVxdWFsKGV4cHJlc3Npb24sIGJFeHByZXNzaW9uc1tpbmRleF0pO1xuXHRcdFx0fSk7XG5cblx0XHRjYXNlIFwiTGVuZ3RoXCI6XG5cdFx0XHRyZXR1cm4gX2NoZWNrRXhwcmVzc2lvbnNBcmVFcXVhbChhLnBhdGhJbk1vZGVsLCAoYiBhcyBMZW5ndGhFeHByZXNzaW9uKS5wYXRoSW5Nb2RlbCk7XG5cblx0XHRjYXNlIFwiUGF0aEluTW9kZWxcIjpcblx0XHRcdHJldHVybiAoXG5cdFx0XHRcdGEubW9kZWxOYW1lID09PSAoYiBhcyBQYXRoSW5Nb2RlbEV4cHJlc3Npb248VD4pLm1vZGVsTmFtZSAmJlxuXHRcdFx0XHRhLnBhdGggPT09IChiIGFzIFBhdGhJbk1vZGVsRXhwcmVzc2lvbjxUPikucGF0aCAmJlxuXHRcdFx0XHRhLnRhcmdldEVudGl0eVNldCA9PT0gKGIgYXMgUGF0aEluTW9kZWxFeHByZXNzaW9uPFQ+KS50YXJnZXRFbnRpdHlTZXRcblx0XHRcdCk7XG5cblx0XHRjYXNlIFwiRm9ybWF0dGVyXCI6XG5cdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRhLmZuID09PSAoYiBhcyBGb3JtYXR0ZXJFeHByZXNzaW9uPFQ+KS5mbiAmJlxuXHRcdFx0XHRhLnBhcmFtZXRlcnMubGVuZ3RoID09PSAoYiBhcyBGb3JtYXR0ZXJFeHByZXNzaW9uPFQ+KS5wYXJhbWV0ZXJzLmxlbmd0aCAmJlxuXHRcdFx0XHRhLnBhcmFtZXRlcnMuZXZlcnkoKHZhbHVlLCBpbmRleCkgPT4gX2NoZWNrRXhwcmVzc2lvbnNBcmVFcXVhbCgoYiBhcyBGb3JtYXR0ZXJFeHByZXNzaW9uPFQ+KS5wYXJhbWV0ZXJzW2luZGV4XSwgdmFsdWUpKVxuXHRcdFx0KTtcblx0XHRjYXNlIFwiQ29tcGxleFR5cGVcIjpcblx0XHRcdHJldHVybiAoXG5cdFx0XHRcdGEudHlwZSA9PT0gKGIgYXMgQ29tcGxleFR5cGVFeHByZXNzaW9uPFQ+KS50eXBlICYmXG5cdFx0XHRcdGEuYmluZGluZ1BhcmFtZXRlcnMubGVuZ3RoID09PSAoYiBhcyBDb21wbGV4VHlwZUV4cHJlc3Npb248VD4pLmJpbmRpbmdQYXJhbWV0ZXJzLmxlbmd0aCAmJlxuXHRcdFx0XHRhLmJpbmRpbmdQYXJhbWV0ZXJzLmV2ZXJ5KCh2YWx1ZSwgaW5kZXgpID0+XG5cdFx0XHRcdFx0X2NoZWNrRXhwcmVzc2lvbnNBcmVFcXVhbCgoYiBhcyBDb21wbGV4VHlwZUV4cHJlc3Npb248VD4pLmJpbmRpbmdQYXJhbWV0ZXJzW2luZGV4XSwgdmFsdWUpXG5cdFx0XHRcdClcblx0XHRcdCk7XG5cdFx0Y2FzZSBcIkZ1bmN0aW9uXCI6XG5cdFx0XHRjb25zdCBvdGhlckZ1bmN0aW9uID0gYiBhcyBGdW5jdGlvbkV4cHJlc3Npb248VD47XG5cdFx0XHRpZiAoYS5vYmogPT09IHVuZGVmaW5lZCB8fCBvdGhlckZ1bmN0aW9uLm9iaiA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdHJldHVybiBhLm9iaiA9PT0gb3RoZXJGdW5jdGlvbjtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIChcblx0XHRcdFx0YS5mbiA9PT0gb3RoZXJGdW5jdGlvbi5mbiAmJlxuXHRcdFx0XHRfY2hlY2tFeHByZXNzaW9uc0FyZUVxdWFsKGEub2JqLCBvdGhlckZ1bmN0aW9uLm9iaikgJiZcblx0XHRcdFx0YS5wYXJhbWV0ZXJzLmxlbmd0aCA9PT0gb3RoZXJGdW5jdGlvbi5wYXJhbWV0ZXJzLmxlbmd0aCAmJlxuXHRcdFx0XHRhLnBhcmFtZXRlcnMuZXZlcnkoKHZhbHVlLCBpbmRleCkgPT4gX2NoZWNrRXhwcmVzc2lvbnNBcmVFcXVhbChvdGhlckZ1bmN0aW9uLnBhcmFtZXRlcnNbaW5kZXhdLCB2YWx1ZSkpXG5cdFx0XHQpO1xuXG5cdFx0Y2FzZSBcIlJlZlwiOlxuXHRcdFx0cmV0dXJuIGEucmVmID09PSAoYiBhcyBSZWZlcmVuY2VFeHByZXNzaW9uKS5yZWY7XG5cdH1cblx0cmV0dXJuIGZhbHNlO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGEgbmVzdGVkIFNldEV4cHJlc3Npb24gYnkgaW5saW5pbmcgb3BlcmFuZHMgb2YgdHlwZSBTZXRFeHByZXNzaW9uIHdpdGggdGhlIHNhbWUgb3BlcmF0b3IuXG4gKiBAcGFyYW0gZXhwcmVzc2lvbiBUaGUgZXhwcmVzc2lvbiB0byBmbGF0dGVuXG4gKiBAcmV0dXJucyBBIG5ldyBTZXRFeHByZXNzaW9uIHdpdGggdGhlIHNhbWUgb3BlcmF0b3JcbiAqL1xuZnVuY3Rpb24gZmxhdHRlblNldEV4cHJlc3Npb24oZXhwcmVzc2lvbjogU2V0RXhwcmVzc2lvbik6IFNldEV4cHJlc3Npb24ge1xuXHRyZXR1cm4gZXhwcmVzc2lvbi5vcGVyYW5kcy5yZWR1Y2UoXG5cdFx0KHJlc3VsdDogU2V0RXhwcmVzc2lvbiwgb3BlcmFuZCkgPT4ge1xuXHRcdFx0Y29uc3QgY2FuZGlkYXRlc0ZvckZsYXR0ZW5pbmcgPVxuXHRcdFx0XHRvcGVyYW5kLl90eXBlID09PSBcIlNldFwiICYmIG9wZXJhbmQub3BlcmF0b3IgPT09IGV4cHJlc3Npb24ub3BlcmF0b3IgPyBvcGVyYW5kLm9wZXJhbmRzIDogW29wZXJhbmRdO1xuXHRcdFx0Y2FuZGlkYXRlc0ZvckZsYXR0ZW5pbmcuZm9yRWFjaCgoY2FuZGlkYXRlKSA9PiB7XG5cdFx0XHRcdGlmIChyZXN1bHQub3BlcmFuZHMuZXZlcnkoKGUpID0+ICFfY2hlY2tFeHByZXNzaW9uc0FyZUVxdWFsKGUsIGNhbmRpZGF0ZSkpKSB7XG5cdFx0XHRcdFx0cmVzdWx0Lm9wZXJhbmRzLnB1c2goY2FuZGlkYXRlKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0XHRyZXR1cm4gcmVzdWx0O1xuXHRcdH0sXG5cdFx0eyBfdHlwZTogXCJTZXRcIiwgb3BlcmF0b3I6IGV4cHJlc3Npb24ub3BlcmF0b3IsIG9wZXJhbmRzOiBbXSB9XG5cdCk7XG59XG5cbi8qKlxuICogRGV0ZWN0cyB3aGV0aGVyIGFuIGFycmF5IG9mIGJvb2xlYW4gZXhwcmVzc2lvbnMgY29udGFpbnMgYW4gZXhwcmVzc2lvbiBhbmQgaXRzIG5lZ2F0aW9uLlxuICogQHBhcmFtIGV4cHJlc3Npb25zIEFycmF5IG9mIGV4cHJlc3Npb25zXG4gKiBAcmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHNldCBvZiBleHByZXNzaW9ucyBjb250YWlucyBhbiBleHByZXNzaW9uIGFuZCBpdHMgbmVnYXRpb25cbiAqL1xuZnVuY3Rpb24gaGFzT3Bwb3NpdGVFeHByZXNzaW9ucyhleHByZXNzaW9uczogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+W10pOiBib29sZWFuIHtcblx0Y29uc3QgbmVnYXRlZEV4cHJlc3Npb25zID0gZXhwcmVzc2lvbnMubWFwKG5vdCk7XG5cdHJldHVybiBleHByZXNzaW9ucy5zb21lKChleHByZXNzaW9uLCBpbmRleCkgPT4ge1xuXHRcdGZvciAobGV0IGkgPSBpbmRleCArIDE7IGkgPCBuZWdhdGVkRXhwcmVzc2lvbnMubGVuZ3RoOyBpKyspIHtcblx0XHRcdGlmIChfY2hlY2tFeHByZXNzaW9uc0FyZUVxdWFsKGV4cHJlc3Npb24sIG5lZ2F0ZWRFeHByZXNzaW9uc1tpXSkpIHtcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBmYWxzZTtcblx0fSk7XG59XG5cbi8qKlxuICogTG9naWNhbCBgYW5kYCBleHByZXNzaW9uLlxuICpcbiAqIFRoZSBleHByZXNzaW9uIGlzIHNpbXBsaWZpZWQgdG8gZmFsc2UgaWYgdGhpcyBjYW4gYmUgZGVjaWRlZCBzdGF0aWNhbGx5ICh0aGF0IGlzLCBpZiBvbmUgb3BlcmFuZCBpcyBhIGNvbnN0YW50XG4gKiBmYWxzZSBvciBpZiB0aGUgZXhwcmVzc2lvbiBjb250YWlucyBhbiBvcGVyYW5kIGFuZCBpdHMgbmVnYXRpb24pLlxuICogQHBhcmFtIG9wZXJhbmRzIEV4cHJlc3Npb25zIHRvIGNvbm5lY3QgYnkgYGFuZGBcbiAqIEByZXR1cm5zIEV4cHJlc3Npb24gZXZhbHVhdGluZyB0byBib29sZWFuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhbmQoLi4ub3BlcmFuZHM6IEV4cHJlc3Npb25PclByaW1pdGl2ZTxib29sZWFuPltdKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+IHtcblx0Y29uc3QgZXhwcmVzc2lvbnMgPSBmbGF0dGVuU2V0RXhwcmVzc2lvbih7XG5cdFx0X3R5cGU6IFwiU2V0XCIsXG5cdFx0b3BlcmF0b3I6IFwiJiZcIixcblx0XHRvcGVyYW5kczogb3BlcmFuZHMubWFwKHdyYXBQcmltaXRpdmUpXG5cdH0pLm9wZXJhbmRzO1xuXG5cdGlmIChoYXNVbnJlc29sdmFibGVFeHByZXNzaW9uKC4uLmV4cHJlc3Npb25zKSkge1xuXHRcdHJldHVybiB1bnJlc29sdmFibGVFeHByZXNzaW9uO1xuXHR9XG5cdGxldCBpc1N0YXRpY0ZhbHNlID0gZmFsc2U7XG5cdGNvbnN0IG5vblRyaXZpYWxFeHByZXNzaW9uID0gZXhwcmVzc2lvbnMuZmlsdGVyKChleHByZXNzaW9uKSA9PiB7XG5cdFx0aWYgKGlzRmFsc2UoZXhwcmVzc2lvbikpIHtcblx0XHRcdGlzU3RhdGljRmFsc2UgPSB0cnVlO1xuXHRcdH1cblx0XHRyZXR1cm4gIWlzQ29uc3RhbnQoZXhwcmVzc2lvbik7XG5cdH0pO1xuXHRpZiAoaXNTdGF0aWNGYWxzZSkge1xuXHRcdHJldHVybiBjb25zdGFudChmYWxzZSk7XG5cdH0gZWxzZSBpZiAobm9uVHJpdmlhbEV4cHJlc3Npb24ubGVuZ3RoID09PSAwKSB7XG5cdFx0Ly8gUmVzb2x2ZSB0aGUgY29uc3RhbnQgdGhlblxuXHRcdGNvbnN0IGlzVmFsaWQgPSBleHByZXNzaW9ucy5yZWR1Y2UoKHJlc3VsdCwgZXhwcmVzc2lvbikgPT4gcmVzdWx0ICYmIGlzVHJ1ZShleHByZXNzaW9uKSwgdHJ1ZSk7XG5cdFx0cmV0dXJuIGNvbnN0YW50KGlzVmFsaWQpO1xuXHR9IGVsc2UgaWYgKG5vblRyaXZpYWxFeHByZXNzaW9uLmxlbmd0aCA9PT0gMSkge1xuXHRcdHJldHVybiBub25Ucml2aWFsRXhwcmVzc2lvblswXTtcblx0fSBlbHNlIGlmIChoYXNPcHBvc2l0ZUV4cHJlc3Npb25zKG5vblRyaXZpYWxFeHByZXNzaW9uKSkge1xuXHRcdHJldHVybiBjb25zdGFudChmYWxzZSk7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdF90eXBlOiBcIlNldFwiLFxuXHRcdFx0b3BlcmF0b3I6IFwiJiZcIixcblx0XHRcdG9wZXJhbmRzOiBub25Ucml2aWFsRXhwcmVzc2lvblxuXHRcdH07XG5cdH1cbn1cblxuLyoqXG4gKiBMb2dpY2FsIGBvcmAgZXhwcmVzc2lvbi5cbiAqXG4gKiBUaGUgZXhwcmVzc2lvbiBpcyBzaW1wbGlmaWVkIHRvIHRydWUgaWYgdGhpcyBjYW4gYmUgZGVjaWRlZCBzdGF0aWNhbGx5ICh0aGF0IGlzLCBpZiBvbmUgb3BlcmFuZCBpcyBhIGNvbnN0YW50XG4gKiB0cnVlIG9yIGlmIHRoZSBleHByZXNzaW9uIGNvbnRhaW5zIGFuIG9wZXJhbmQgYW5kIGl0cyBuZWdhdGlvbikuXG4gKiBAcGFyYW0gb3BlcmFuZHMgRXhwcmVzc2lvbnMgdG8gY29ubmVjdCBieSBgb3JgXG4gKiBAcmV0dXJucyBFeHByZXNzaW9uIGV2YWx1YXRpbmcgdG8gYm9vbGVhblxuICovXG5leHBvcnQgZnVuY3Rpb24gb3IoLi4ub3BlcmFuZHM6IEV4cHJlc3Npb25PclByaW1pdGl2ZTxib29sZWFuPltdKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+IHtcblx0Y29uc3QgZXhwcmVzc2lvbnMgPSBmbGF0dGVuU2V0RXhwcmVzc2lvbih7XG5cdFx0X3R5cGU6IFwiU2V0XCIsXG5cdFx0b3BlcmF0b3I6IFwifHxcIixcblx0XHRvcGVyYW5kczogb3BlcmFuZHMubWFwKHdyYXBQcmltaXRpdmUpXG5cdH0pLm9wZXJhbmRzO1xuXHRpZiAoaGFzVW5yZXNvbHZhYmxlRXhwcmVzc2lvbiguLi5leHByZXNzaW9ucykpIHtcblx0XHRyZXR1cm4gdW5yZXNvbHZhYmxlRXhwcmVzc2lvbjtcblx0fVxuXHRsZXQgaXNTdGF0aWNUcnVlID0gZmFsc2U7XG5cdGNvbnN0IG5vblRyaXZpYWxFeHByZXNzaW9uID0gZXhwcmVzc2lvbnMuZmlsdGVyKChleHByZXNzaW9uKSA9PiB7XG5cdFx0aWYgKGlzVHJ1ZShleHByZXNzaW9uKSkge1xuXHRcdFx0aXNTdGF0aWNUcnVlID0gdHJ1ZTtcblx0XHR9XG5cdFx0cmV0dXJuICFpc0NvbnN0YW50KGV4cHJlc3Npb24pIHx8IGV4cHJlc3Npb24udmFsdWU7XG5cdH0pO1xuXHRpZiAoaXNTdGF0aWNUcnVlKSB7XG5cdFx0cmV0dXJuIGNvbnN0YW50KHRydWUpO1xuXHR9IGVsc2UgaWYgKG5vblRyaXZpYWxFeHByZXNzaW9uLmxlbmd0aCA9PT0gMCkge1xuXHRcdC8vIFJlc29sdmUgdGhlIGNvbnN0YW50IHRoZW5cblx0XHRjb25zdCBpc1ZhbGlkID0gZXhwcmVzc2lvbnMucmVkdWNlKChyZXN1bHQsIGV4cHJlc3Npb24pID0+IHJlc3VsdCAmJiBpc1RydWUoZXhwcmVzc2lvbiksIHRydWUpO1xuXHRcdHJldHVybiBjb25zdGFudChpc1ZhbGlkKTtcblx0fSBlbHNlIGlmIChub25Ucml2aWFsRXhwcmVzc2lvbi5sZW5ndGggPT09IDEpIHtcblx0XHRyZXR1cm4gbm9uVHJpdmlhbEV4cHJlc3Npb25bMF07XG5cdH0gZWxzZSBpZiAoaGFzT3Bwb3NpdGVFeHByZXNzaW9ucyhub25Ucml2aWFsRXhwcmVzc2lvbikpIHtcblx0XHRyZXR1cm4gY29uc3RhbnQodHJ1ZSk7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdF90eXBlOiBcIlNldFwiLFxuXHRcdFx0b3BlcmF0b3I6IFwifHxcIixcblx0XHRcdG9wZXJhbmRzOiBub25Ucml2aWFsRXhwcmVzc2lvblxuXHRcdH07XG5cdH1cbn1cblxuLyoqXG4gKiBMb2dpY2FsIGBub3RgIG9wZXJhdG9yLlxuICogQHBhcmFtIG9wZXJhbmQgVGhlIGV4cHJlc3Npb24gdG8gcmV2ZXJzZVxuICogQHJldHVybnMgVGhlIHJlc3VsdGluZyBleHByZXNzaW9uIHRoYXQgZXZhbHVhdGVzIHRvIGJvb2xlYW5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG5vdChvcGVyYW5kOiBFeHByZXNzaW9uT3JQcmltaXRpdmU8Ym9vbGVhbj4pOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4ge1xuXHRvcGVyYW5kID0gd3JhcFByaW1pdGl2ZShvcGVyYW5kKTtcblx0aWYgKGhhc1VucmVzb2x2YWJsZUV4cHJlc3Npb24ob3BlcmFuZCkpIHtcblx0XHRyZXR1cm4gdW5yZXNvbHZhYmxlRXhwcmVzc2lvbjtcblx0fSBlbHNlIGlmIChpc0NvbnN0YW50KG9wZXJhbmQpKSB7XG5cdFx0cmV0dXJuIGNvbnN0YW50KCFvcGVyYW5kLnZhbHVlKTtcblx0fSBlbHNlIGlmIChcblx0XHR0eXBlb2Ygb3BlcmFuZCA9PT0gXCJvYmplY3RcIiAmJlxuXHRcdG9wZXJhbmQuX3R5cGUgPT09IFwiU2V0XCIgJiZcblx0XHRvcGVyYW5kLm9wZXJhdG9yID09PSBcInx8XCIgJiZcblx0XHRvcGVyYW5kLm9wZXJhbmRzLmV2ZXJ5KChleHByZXNzaW9uKSA9PiBpc0NvbnN0YW50KGV4cHJlc3Npb24pIHx8IGlzQ29tcGFyaXNvbihleHByZXNzaW9uKSlcblx0KSB7XG5cdFx0cmV0dXJuIGFuZCguLi5vcGVyYW5kLm9wZXJhbmRzLm1hcCgoZXhwcmVzc2lvbikgPT4gbm90KGV4cHJlc3Npb24pKSk7XG5cdH0gZWxzZSBpZiAoXG5cdFx0dHlwZW9mIG9wZXJhbmQgPT09IFwib2JqZWN0XCIgJiZcblx0XHRvcGVyYW5kLl90eXBlID09PSBcIlNldFwiICYmXG5cdFx0b3BlcmFuZC5vcGVyYXRvciA9PT0gXCImJlwiICYmXG5cdFx0b3BlcmFuZC5vcGVyYW5kcy5ldmVyeSgoZXhwcmVzc2lvbikgPT4gaXNDb25zdGFudChleHByZXNzaW9uKSB8fCBpc0NvbXBhcmlzb24oZXhwcmVzc2lvbikpXG5cdCkge1xuXHRcdHJldHVybiBvciguLi5vcGVyYW5kLm9wZXJhbmRzLm1hcCgoZXhwcmVzc2lvbikgPT4gbm90KGV4cHJlc3Npb24pKSk7XG5cdH0gZWxzZSBpZiAoaXNDb21wYXJpc29uKG9wZXJhbmQpKSB7XG5cdFx0Ly8gQ3JlYXRlIHRoZSByZXZlcnNlIGNvbXBhcmlzb25cblx0XHRzd2l0Y2ggKG9wZXJhbmQub3BlcmF0b3IpIHtcblx0XHRcdGNhc2UgXCIhPT1cIjpcblx0XHRcdFx0cmV0dXJuIHsgLi4ub3BlcmFuZCwgb3BlcmF0b3I6IFwiPT09XCIgfTtcblx0XHRcdGNhc2UgXCI8XCI6XG5cdFx0XHRcdHJldHVybiB7IC4uLm9wZXJhbmQsIG9wZXJhdG9yOiBcIj49XCIgfTtcblx0XHRcdGNhc2UgXCI8PVwiOlxuXHRcdFx0XHRyZXR1cm4geyAuLi5vcGVyYW5kLCBvcGVyYXRvcjogXCI+XCIgfTtcblx0XHRcdGNhc2UgXCI9PT1cIjpcblx0XHRcdFx0cmV0dXJuIHsgLi4ub3BlcmFuZCwgb3BlcmF0b3I6IFwiIT09XCIgfTtcblx0XHRcdGNhc2UgXCI+XCI6XG5cdFx0XHRcdHJldHVybiB7IC4uLm9wZXJhbmQsIG9wZXJhdG9yOiBcIjw9XCIgfTtcblx0XHRcdGNhc2UgXCI+PVwiOlxuXHRcdFx0XHRyZXR1cm4geyAuLi5vcGVyYW5kLCBvcGVyYXRvcjogXCI8XCIgfTtcblx0XHR9XG5cdH0gZWxzZSBpZiAob3BlcmFuZC5fdHlwZSA9PT0gXCJOb3RcIikge1xuXHRcdHJldHVybiBvcGVyYW5kLm9wZXJhbmQ7XG5cdH1cblxuXHRyZXR1cm4ge1xuXHRcdF90eXBlOiBcIk5vdFwiLFxuXHRcdG9wZXJhbmQ6IG9wZXJhbmRcblx0fTtcbn1cblxuLyoqXG4gKiBFdmFsdWF0ZXMgd2hldGhlciBhIGJpbmRpbmcgZXhwcmVzc2lvbiBpcyBlcXVhbCB0byB0cnVlIHdpdGggYSBsb29zZSBlcXVhbGl0eS5cbiAqIEBwYXJhbSBvcGVyYW5kIFRoZSBleHByZXNzaW9uIHRvIGNoZWNrXG4gKiBAcmV0dXJucyBUaGUgcmVzdWx0aW5nIGV4cHJlc3Npb24gdGhhdCBldmFsdWF0ZXMgdG8gYm9vbGVhblxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNUcnV0aHkob3BlcmFuZDogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHN0cmluZz4pOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4ge1xuXHRpZiAoaXNDb25zdGFudChvcGVyYW5kKSkge1xuXHRcdHJldHVybiBjb25zdGFudCghIW9wZXJhbmQudmFsdWUpO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiB7XG5cdFx0XHRfdHlwZTogXCJUcnV0aHlcIixcblx0XHRcdG9wZXJhbmQ6IG9wZXJhbmRcblx0XHR9O1xuXHR9XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIGJpbmRpbmcgZXhwcmVzc2lvbiB0aGF0IHdpbGwgYmUgZXZhbHVhdGVkIGJ5IHRoZSBjb3JyZXNwb25kaW5nIG1vZGVsLlxuICogQHBhcmFtIHBhdGhcbiAqIEBwYXJhbSBtb2RlbE5hbWVcbiAqIEBwYXJhbSB2aXNpdGVkTmF2aWdhdGlvblBhdGhzXG4gKiBAcGFyYW0gcGF0aFZpc2l0b3JcbiAqIEByZXR1cm5zIEFuIGV4cHJlc3Npb24gcmVwcmVzZW50YXRpbmcgdGhhdCBwYXRoIGluIHRoZSBtb2RlbFxuICogQGRlcHJlY2F0ZWQgdXNlIHBhdGhJbk1vZGVsIGluc3RlYWRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJpbmRpbmdFeHByZXNzaW9uPFRhcmdldFR5cGUgZXh0ZW5kcyBQcmltaXRpdmVUeXBlPihcblx0cGF0aDogc3RyaW5nLFxuXHRtb2RlbE5hbWU/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+XG5cdHwgTGVBbm5vdGF0aW9uRXhwcmVzc2lvbjxQPlxuXHR8IEx0QW5ub3RhdGlvbkV4cHJlc3Npb248UD5cblx0fCBWb2NhYkNvbnN0YW50RXhwcmVzc2lvbjxQPjtcblxuZnVuY3Rpb24gaXNQcmltaXRpdmVPYmplY3Qob2JqZWN0VHlwZTogb2JqZWN0KTogYm9vbGVhbiB7XG5cdHN3aXRjaCAob2JqZWN0VHlwZS5jb25zdHJ1Y3Rvci5uYW1lKSB7XG5cdFx0Y2FzZSBcIlN0cmluZ1wiOlxuXHRcdGNhc2UgXCJOdW1iZXJcIjpcblx0XHRjYXNlIFwiQm9vbGVhblwiOlxuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0ZGVmYXVsdDpcblx0XHRcdHJldHVybiBmYWxzZTtcblx0fVxufVxuLyoqXG4gKiBDaGVjayBpZiB0aGUgcGFzc2VkIGFubm90YXRpb24gYW5ub3RhdGlvblZhbHVlIGlzIGEgQ29tcGxleEFubm90YXRpb25FeHByZXNzaW9uLlxuICogQHRlbXBsYXRlIFQgVGhlIHRhcmdldCB0eXBlXG4gKiBAcGFyYW0gIGFubm90YXRpb25WYWx1ZSBUaGUgYW5ub3RhdGlvbiBhbm5vdGF0aW9uVmFsdWUgdG8gZXZhbHVhdGVcbiAqIEByZXR1cm5zIGB0cnVlYCBpZiB0aGUgb2JqZWN0IGlzIGEge0NvbXBsZXhBbm5vdGF0aW9uRXhwcmVzc2lvbn1cbiAqL1xuZnVuY3Rpb24gaXNDb21wbGV4QW5ub3RhdGlvbkV4cHJlc3Npb248VD4oYW5ub3RhdGlvblZhbHVlOiBQcm9wZXJ0eUFubm90YXRpb25WYWx1ZTxUPik6IGFubm90YXRpb25WYWx1ZSBpcyBDb21wbGV4QW5ub3RhdGlvbkV4cHJlc3Npb248VD4ge1xuXHRyZXR1cm4gdHlwZW9mIGFubm90YXRpb25WYWx1ZSA9PT0gXCJvYmplY3RcIiAmJiAhaXNQcmltaXRpdmVPYmplY3QoYW5ub3RhdGlvblZhbHVlIGFzIG9iamVjdCk7XG59XG5cbi8qKlxuICogR2VuZXJhdGUgdGhlIGNvcnJlc3BvbmRpbmcgYW5ub3RhdGlvblZhbHVlIGZvciBhIGdpdmVuIGFubm90YXRpb24gYW5ub3RhdGlvblZhbHVlLlxuICogQHRlbXBsYXRlIFQgVGhlIHRhcmdldCB0eXBlXG4gKiBAcGFyYW0gYW5ub3RhdGlvblZhbHVlIFRoZSBzb3VyY2UgYW5ub3RhdGlvbiBhbm5vdGF0aW9uVmFsdWVcbiAqIEBwYXJhbSB2aXNpdGVkTmF2aWdhdGlvblBhdGhzIFRoZSBwYXRoIGZyb20gdGhlIHJvb3QgZW50aXR5IHNldFxuICogQHBhcmFtIGRlZmF1bHRWYWx1ZSBEZWZhdWx0IHZhbHVlIGlmIHRoZSBhbm5vdGF0aW9uVmFsdWUgaXMgdW5kZWZpbmVkXG4gKiBAcGFyYW0gcGF0aFZpc2l0b3IgQSBmdW5jdGlvbiB0byBtb2RpZnkgdGhlIHJlc3VsdGluZyBwYXRoXG4gKiBAcmV0dXJucyBUaGUgYW5ub3RhdGlvblZhbHVlIGVxdWl2YWxlbnQgdG8gdGhhdCBhbm5vdGF0aW9uIGFubm90YXRpb25WYWx1ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uPFQgZXh0ZW5kcyBQcmltaXRpdmVUeXBlPihcblx0YW5ub3RhdGlvblZhbHVlOiBQcm9wZXJ0eUFubm90YXRpb25WYWx1ZTxUPiB8IHVuZGVmaW5lZCxcblx0dmlzaXRlZE5hdmlnYXRpb25QYXRoczogc3RyaW5nW10gPSBbXSxcblx0ZGVmYXVsdFZhbHVlPzogRXhwcmVzc2lvbk9yUHJpbWl0aXZlPFQ+LFxuXHRwYXRoVmlzaXRvcj86IEZ1bmN0aW9uXG4pOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248UHJpbWl0aXZlVHlwZUNhc3Q8VD4+IHtcblx0aWYgKGFubm90YXRpb25WYWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0cmV0dXJuIHdyYXBQcmltaXRpdmUoZGVmYXVsdFZhbHVlIGFzIFByaW1pdGl2ZVR5cGVDYXN0PFQ+KTtcblx0fVxuXHRhbm5vdGF0aW9uVmFsdWUgPSBhbm5vdGF0aW9uVmFsdWU/LnZhbHVlT2YoKSBhcyBQcm9wZXJ0eUFubm90YXRpb25WYWx1ZTxUPjtcblx0aWYgKCFpc0NvbXBsZXhBbm5vdGF0aW9uRXhwcmVzc2lvbihhbm5vdGF0aW9uVmFsdWUpKSB7XG5cdFx0cmV0dXJuIGNvbnN0YW50KGFubm90YXRpb25WYWx1ZSk7XG5cdH1cblxuXHRzd2l0Y2ggKGFubm90YXRpb25WYWx1ZS50eXBlKSB7XG5cdFx0Y2FzZSBcIlBhdGhcIjpcblx0XHRcdHJldHVybiBwYXRoSW5Nb2RlbChhbm5vdGF0aW9uVmFsdWUucGF0aCwgdW5kZWZpbmVkLCB2aXNpdGVkTmF2aWdhdGlvblBhdGhzLCBwYXRoVmlzaXRvcik7XG5cdFx0Y2FzZSBcIklmXCI6XG5cdFx0XHRyZXR1cm4gYW5ub3RhdGlvbklmRXhwcmVzc2lvbihhbm5vdGF0aW9uVmFsdWUuJElmLCB2aXNpdGVkTmF2aWdhdGlvblBhdGhzLCBwYXRoVmlzaXRvcikgYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFxuXHRcdFx0XHRQcmltaXRpdmVUeXBlQ2FzdDxUPlxuXHRcdFx0Pjtcblx0XHRjYXNlIFwiTm90XCI6XG5cdFx0XHRyZXR1cm4gbm90KHBhcnNlQW5ub3RhdGlvbkNvbmRpdGlvbihhbm5vdGF0aW9uVmFsdWUuJE5vdCwgdmlzaXRlZE5hdmlnYXRpb25QYXRocywgcGF0aFZpc2l0b3IpKSBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248XG5cdFx0XHRcdFByaW1pdGl2ZVR5cGVDYXN0PFQ+XG5cdFx0XHQ+O1xuXHRcdGNhc2UgXCJFcVwiOlxuXHRcdFx0cmV0dXJuIGVxdWFsKFxuXHRcdFx0XHRwYXJzZUFubm90YXRpb25Db25kaXRpb24oYW5ub3RhdGlvblZhbHVlLiRFcVswXSwgdmlzaXRlZE5hdmlnYXRpb25QYXRocywgcGF0aFZpc2l0b3IpLFxuXHRcdFx0XHRwYXJzZUFubm90YXRpb25Db25kaXRpb24oYW5ub3RhdGlvblZhbHVlLiRFcVsxXSwgdmlzaXRlZE5hdmlnYXRpb25QYXRocywgcGF0aFZpc2l0b3IpXG5cdFx0XHQpIGFzIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxQcmltaXRpdmVUeXBlQ2FzdDxUPj47XG5cdFx0Y2FzZSBcIk5lXCI6XG5cdFx0XHRyZXR1cm4gbm90RXF1YWwoXG5cdFx0XHRcdHBhcnNlQW5ub3RhdGlvbkNvbmRpdGlvbihhbm5vdGF0aW9uVmFsdWUuJE5lWzBdLCB2aXNpdGVkTmF2aWdhdGlvblBhdGhzLCBwYXRoVmlzaXRvciksXG5cdFx0XHRcdHBhcnNlQW5ub3RhdGlvbkNvbmRpdGlvbihhbm5vdGF0aW9uVmFsdWUuJE5lWzFdLCB2aXNpdGVkTmF2aWdhdGlvblBhdGhzLCBwYXRoVmlzaXRvcilcblx0XHRcdCkgYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFByaW1pdGl2ZVR5cGVDYXN0PFQ+Pjtcblx0XHRjYXNlIFwiR3RcIjpcblx0XHRcdHJldHVybiBncmVhdGVyVGhhbihcblx0XHRcdFx0cGFyc2VBbm5vdGF0aW9uQ29uZGl0aW9uKGFubm90YXRpb25WYWx1ZS4kR3RbMF0sIHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMsIHBhdGhWaXNpdG9yKSxcblx0XHRcdFx0cGFyc2VBbm5vdGF0aW9uQ29uZGl0aW9uKGFubm90YXRpb25WYWx1ZS4kR3RbMV0sIHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMsIHBhdGhWaXNpdG9yKVxuXHRcdFx0KSBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248UHJpbWl0aXZlVHlwZUNhc3Q8VD4+O1xuXHRcdGNhc2UgXCJHZVwiOlxuXHRcdFx0cmV0dXJuIGdyZWF0ZXJPckVxdWFsKFxuXHRcdFx0XHRwYXJzZUFubm90YXRpb25Db25kaXRpb24oYW5ub3RhdGlvblZhbHVlLiRHZVswXSwgdmlzaXRlZE5hdmlnYXRpb25QYXRocywgcGF0aFZpc2l0b3IpLFxuXHRcdFx0XHRwYXJzZUFubm90YXRpb25Db25kaXRpb24oYW5ub3RhdGlvblZhbHVlLiRHZVsxXSwgdmlzaXRlZE5hdmlnYXRpb25QYXRocywgcGF0aFZpc2l0b3IpXG5cdFx0XHQpIGFzIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxQcmltaXRpdmVUeXBlQ2FzdDxUPj47XG5cdFx0Y2FzZSBcIkx0XCI6XG5cdFx0XHRyZXR1cm4gbGVzc1RoYW4oXG5cdFx0XHRcdHBhcnNlQW5ub3RhdGlvbkNvbmRpdGlvbihhbm5vdGF0aW9uVmFsdWUuJEx0WzBdLCB2aXNpdGVkTmF2aWdhdGlvblBhdGhzLCBwYXRoVmlzaXRvciksXG5cdFx0XHRcdHBhcnNlQW5ub3RhdGlvbkNvbmRpdGlvbihhbm5vdGF0aW9uVmFsdWUuJEx0WzFdLCB2aXNpdGVkTmF2aWdhdGlvblBhdGhzLCBwYXRoVmlzaXRvcilcblx0XHRcdCkgYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFByaW1pdGl2ZVR5cGVDYXN0PFQ+Pjtcblx0XHRjYXNlIFwiTGVcIjpcblx0XHRcdHJldHVybiBsZXNzT3JFcXVhbChcblx0XHRcdFx0cGFyc2VBbm5vdGF0aW9uQ29uZGl0aW9uKGFubm90YXRpb25WYWx1ZS4kTGVbMF0sIHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMsIHBhdGhWaXNpdG9yKSxcblx0XHRcdFx0cGFyc2VBbm5vdGF0aW9uQ29uZGl0aW9uKGFubm90YXRpb25WYWx1ZS4kTGVbMV0sIHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMsIHBhdGhWaXNpdG9yKVxuXHRcdFx0KSBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248UHJpbWl0aXZlVHlwZUNhc3Q8VD4+O1xuXHRcdGNhc2UgXCJPclwiOlxuXHRcdFx0cmV0dXJuIG9yKFxuXHRcdFx0XHQuLi5hbm5vdGF0aW9uVmFsdWUuJE9yLm1hcChmdW5jdGlvbiAob3JDb25kaXRpb24pIHtcblx0XHRcdFx0XHRyZXR1cm4gcGFyc2VBbm5vdGF0aW9uQ29uZGl0aW9uPGJvb2xlYW4+KG9yQ29uZGl0aW9uLCB2aXNpdGVkTmF2aWdhdGlvblBhdGhzLCBwYXRoVmlzaXRvcik7XG5cdFx0XHRcdH0pXG5cdFx0XHQpIGFzIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxQcmltaXRpdmVUeXBlQ2FzdDxUPj47XG5cdFx0Y2FzZSBcIkFuZFwiOlxuXHRcdFx0cmV0dXJuIGFuZChcblx0XHRcdFx0Li4uYW5ub3RhdGlvblZhbHVlLiRBbmQubWFwKGZ1bmN0aW9uIChhbmRDb25kaXRpb24pIHtcblx0XHRcdFx0XHRyZXR1cm4gcGFyc2VBbm5vdGF0aW9uQ29uZGl0aW9uPGJvb2xlYW4+KGFuZENvbmRpdGlvbiwgdmlzaXRlZE5hdmlnYXRpb25QYXRocywgcGF0aFZpc2l0b3IpO1xuXHRcdFx0XHR9KVxuXHRcdFx0KSBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248UHJpbWl0aXZlVHlwZUNhc3Q8VD4+O1xuXHRcdGNhc2UgXCJBcHBseVwiOlxuXHRcdFx0cmV0dXJuIGFubm90YXRpb25BcHBseUV4cHJlc3Npb24oXG5cdFx0XHRcdGFubm90YXRpb25WYWx1ZSBhcyBBcHBseUFubm90YXRpb25FeHByZXNzaW9uPHN0cmluZz4sXG5cdFx0XHRcdHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMsXG5cdFx0XHRcdHBhdGhWaXNpdG9yXG5cdFx0XHQpIGFzIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxQcmltaXRpdmVUeXBlQ2FzdDxUPj47XG5cdFx0Y2FzZSBcIkNvbnN0YW50XCI6XG5cdFx0XHQvLyBOb3QgYSByZWFsIGNhc2UgYnV0IHRoZSB0eXBlIHN5c3RlbSBuZWVkcyBpdFxuXHRcdFx0cmV0dXJuIGNvbnN0YW50KGFubm90YXRpb25WYWx1ZS52YWx1ZSBhcyBQcmltaXRpdmVUeXBlQ2FzdDxUPik7XG5cdH1cblx0cmV0dXJuIHVucmVzb2x2YWJsZUV4cHJlc3Npb247XG59XG5cbi8qKlxuICogUGFyc2UgdGhlIGFubm90YXRpb24gY29uZGl0aW9uIGludG8gYW4gZXhwcmVzc2lvbi5cbiAqIEB0ZW1wbGF0ZSBUIFRoZSB0YXJnZXQgdHlwZVxuICogQHBhcmFtIGFubm90YXRpb25WYWx1ZSBUaGUgY29uZGl0aW9uIG9yIHZhbHVlIGZyb20gdGhlIGFubm90YXRpb25cbiAqIEBwYXJhbSB2aXNpdGVkTmF2aWdhdGlvblBhdGhzIFRoZSBwYXRoIGZyb20gdGhlIHJvb3QgZW50aXR5IHNldFxuICogQHBhcmFtIHBhdGhWaXNpdG9yIEEgZnVuY3Rpb24gdG8gbW9kaWZ5IHRoZSByZXN1bHRpbmcgcGF0aFxuICogQHJldHVybnMgQW4gZXF1aXZhbGVudCBleHByZXNzaW9uXG4gKi9cbmZ1bmN0aW9uIHBhcnNlQW5ub3RhdGlvbkNvbmRpdGlvbjxUIGV4dGVuZHMgUHJpbWl0aXZlVHlwZT4oXG5cdGFubm90YXRpb25WYWx1ZTogQ29uZGl0aW9uYWxDaGVja09yVmFsdWUsXG5cdHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHM6IHN0cmluZ1tdID0gW10sXG5cdHBhdGhWaXNpdG9yPzogRnVuY3Rpb25cbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxUPiB7XG5cdGlmIChhbm5vdGF0aW9uVmFsdWUgPT09IG51bGwgfHwgdHlwZW9mIGFubm90YXRpb25WYWx1ZSAhPT0gXCJvYmplY3RcIikge1xuXHRcdHJldHVybiBjb25zdGFudChhbm5vdGF0aW9uVmFsdWUgYXMgVCk7XG5cdH0gZWxzZSBpZiAoYW5ub3RhdGlvblZhbHVlLmhhc093blByb3BlcnR5KFwiJE9yXCIpKSB7XG5cdFx0cmV0dXJuIG9yKFxuXHRcdFx0Li4uKChhbm5vdGF0aW9uVmFsdWUgYXMgT3JDb25kaXRpb25hbEV4cHJlc3Npb24pLiRPci5tYXAoZnVuY3Rpb24gKG9yQ29uZGl0aW9uKSB7XG5cdFx0XHRcdHJldHVybiBwYXJzZUFubm90YXRpb25Db25kaXRpb24ob3JDb25kaXRpb24sIHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMsIHBhdGhWaXNpdG9yKTtcblx0XHRcdH0pIGFzIHVua25vd24gYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+W10pXG5cdFx0KSBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248VD47XG5cdH0gZWxzZSBpZiAoYW5ub3RhdGlvblZhbHVlLmhhc093blByb3BlcnR5KFwiJEFuZFwiKSkge1xuXHRcdHJldHVybiBhbmQoXG5cdFx0XHQuLi4oKGFubm90YXRpb25WYWx1ZSBhcyBBbmRDb25kaXRpb25hbEV4cHJlc3Npb24pLiRBbmQubWFwKGZ1bmN0aW9uIChhbmRDb25kaXRpb24pIHtcblx0XHRcdFx0cmV0dXJuIHBhcnNlQW5ub3RhdGlvbkNvbmRpdGlvbihhbmRDb25kaXRpb24sIHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMsIHBhdGhWaXNpdG9yKTtcblx0XHRcdH0pIGFzIHVua25vd24gYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+W10pXG5cdFx0KSBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248VD47XG5cdH0gZWxzZSBpZiAoYW5ub3RhdGlvblZhbHVlLmhhc093blByb3BlcnR5KFwiJE5vdFwiKSkge1xuXHRcdHJldHVybiBub3QoXG5cdFx0XHRwYXJzZUFubm90YXRpb25Db25kaXRpb24oKGFubm90YXRpb25WYWx1ZSBhcyBOb3RDb25kaXRpb25hbEV4cHJlc3Npb24pLiROb3QsIHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMsIHBhdGhWaXNpdG9yKVxuXHRcdCkgYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFQ+O1xuXHR9IGVsc2UgaWYgKGFubm90YXRpb25WYWx1ZS5oYXNPd25Qcm9wZXJ0eShcIiRFcVwiKSkge1xuXHRcdHJldHVybiBlcXVhbChcblx0XHRcdHBhcnNlQW5ub3RhdGlvbkNvbmRpdGlvbigoYW5ub3RhdGlvblZhbHVlIGFzIEVxQ29uZGl0aW9uYWxFeHByZXNzaW9uKS4kRXFbMF0sIHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMsIHBhdGhWaXNpdG9yKSxcblx0XHRcdHBhcnNlQW5ub3RhdGlvbkNvbmRpdGlvbigoYW5ub3RhdGlvblZhbHVlIGFzIEVxQ29uZGl0aW9uYWxFeHByZXNzaW9uKS4kRXFbMV0sIHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMsIHBhdGhWaXNpdG9yKVxuXHRcdCkgYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFQ+O1xuXHR9IGVsc2UgaWYgKGFubm90YXRpb25WYWx1ZS5oYXNPd25Qcm9wZXJ0eShcIiROZVwiKSkge1xuXHRcdHJldHVybiBub3RFcXVhbChcblx0XHRcdHBhcnNlQW5ub3RhdGlvbkNvbmRpdGlvbigoYW5ub3RhdGlvblZhbHVlIGFzIE5lQ29uZGl0aW9uYWxFeHByZXNzaW9uKS4kTmVbMF0sIHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMsIHBhdGhWaXNpdG9yKSxcblx0XHRcdHBhcnNlQW5ub3RhdGlvbkNvbmRpdGlvbigoYW5ub3RhdGlvblZhbHVlIGFzIE5lQ29uZGl0aW9uYWxFeHByZXNzaW9uKS4kTmVbMV0sIHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMsIHBhdGhWaXNpdG9yKVxuXHRcdCkgYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFQ+O1xuXHR9IGVsc2UgaWYgKGFubm90YXRpb25WYWx1ZS5oYXNPd25Qcm9wZXJ0eShcIiRHdFwiKSkge1xuXHRcdHJldHVybiBncmVhdGVyVGhhbihcblx0XHRcdHBhcnNlQW5ub3RhdGlvbkNvbmRpdGlvbigoYW5ub3RhdGlvblZhbHVlIGFzIEd0Q29uZGl0aW9uYWxFeHByZXNzaW9uKS4kR3RbMF0sIHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMsIHBhdGhWaXNpdG9yKSxcblx0XHRcdHBhcnNlQW5ub3RhdGlvbkNvbmRpdGlvbigoYW5ub3RhdGlvblZhbHVlIGFzIEd0Q29uZGl0aW9uYWxFeHByZXNzaW9uKS4kR3RbMV0sIHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMsIHBhdGhWaXNpdG9yKVxuXHRcdCkgYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFQ+O1xuXHR9IGVsc2UgaWYgKGFubm90YXRpb25WYWx1ZS5oYXNPd25Qcm9wZXJ0eShcIiRHZVwiKSkge1xuXHRcdHJldHVybiBncmVhdGVyT3JFcXVhbChcblx0XHRcdHBhcnNlQW5ub3RhdGlvbkNvbmRpdGlvbigoYW5ub3RhdGlvblZhbHVlIGFzIEdlQ29uZGl0aW9uYWxFeHByZXNzaW9uKS4kR2VbMF0sIHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMsIHBhdGhWaXNpdG9yKSxcblx0XHRcdHBhcnNlQW5ub3RhdGlvbkNvbmRpdGlvbigoYW5ub3RhdGlvblZhbHVlIGFzIEdlQ29uZGl0aW9uYWxFeHByZXNzaW9uKS4kR2VbMV0sIHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMsIHBhdGhWaXNpdG9yKVxuXHRcdCkgYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFQ+O1xuXHR9IGVsc2UgaWYgKGFubm90YXRpb25WYWx1ZS5oYXNPd25Qcm9wZXJ0eShcIiRMdFwiKSkge1xuXHRcdHJldHVybiBsZXNzVGhhbihcblx0XHRcdHBhcnNlQW5ub3RhdGlvbkNvbmRpdGlvbigoYW5ub3RhdGlvblZhbHVlIGFzIEx0Q29uZGl0aW9uYWxFeHByZXNzaW9uKS4kTHRbMF0sIHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMsIHBhdGhWaXNpdG9yKSxcblx0XHRcdHBhcnNlQW5ub3RhdGlvbkNvbmRpdGlvbigoYW5ub3RhdGlvblZhbHVlIGFzIEx0Q29uZGl0aW9uYWxFeHByZXNzaW9uKS4kTHRbMV0sIHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMsIHBhdGhWaXNpdG9yKVxuXHRcdCkgYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFQ+O1xuXHR9IGVsc2UgaWYgKGFubm90YXRpb25WYWx1ZS5oYXNPd25Qcm9wZXJ0eShcIiRMZVwiKSkge1xuXHRcdHJldHVybiBsZXNzT3JFcXVhbChcblx0XHRcdHBhcnNlQW5ub3RhdGlvbkNvbmRpdGlvbigoYW5ub3RhdGlvblZhbHVlIGFzIExlQ29uZGl0aW9uYWxFeHByZXNzaW9uKS4kTGVbMF0sIHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMsIHBhdGhWaXNpdG9yKSxcblx0XHRcdHBhcnNlQW5ub3RhdGlvbkNvbmRpdGlvbigoYW5ub3RhdGlvblZhbHVlIGFzIExlQ29uZGl0aW9uYWxFeHByZXNzaW9uKS4kTGVbMV0sIHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMsIHBhdGhWaXNpdG9yKVxuXHRcdCkgYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFQ+O1xuXHR9IGVsc2UgaWYgKGFubm90YXRpb25WYWx1ZS5oYXNPd25Qcm9wZXJ0eShcIiRQYXRoXCIpKSB7XG5cdFx0cmV0dXJuIHBhdGhJbk1vZGVsKChhbm5vdGF0aW9uVmFsdWUgYXMgUGF0aENvbmRpdGlvbkV4cHJlc3Npb248VD4pLiRQYXRoLCB1bmRlZmluZWQsIHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMsIHBhdGhWaXNpdG9yKTtcblx0fSBlbHNlIGlmIChhbm5vdGF0aW9uVmFsdWUuaGFzT3duUHJvcGVydHkoXCIkQXBwbHlcIikpIHtcblx0XHRyZXR1cm4gZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKFxuXHRcdFx0e1xuXHRcdFx0XHR0eXBlOiBcIkFwcGx5XCIsXG5cdFx0XHRcdCRGdW5jdGlvbjogKGFubm90YXRpb25WYWx1ZSBhcyB7ICRGdW5jdGlvbj86IHN0cmluZyB9KS4kRnVuY3Rpb24sXG5cdFx0XHRcdCRBcHBseTogKGFubm90YXRpb25WYWx1ZSBhcyB7ICRBcHBseT86IHVua25vd24gfSkuJEFwcGx5XG5cdFx0XHR9IGFzIEFwcGx5QW5ub3RhdGlvbkV4cHJlc3Npb248VD4sXG5cdFx0XHR2aXNpdGVkTmF2aWdhdGlvblBhdGhzLFxuXHRcdFx0dW5kZWZpbmVkLFxuXHRcdFx0cGF0aFZpc2l0b3Jcblx0XHQpIGFzIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxUPjtcblx0fSBlbHNlIGlmIChhbm5vdGF0aW9uVmFsdWUuaGFzT3duUHJvcGVydHkoXCIkSWZcIikpIHtcblx0XHRyZXR1cm4gZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKFxuXHRcdFx0e1xuXHRcdFx0XHR0eXBlOiBcIklmXCIsXG5cdFx0XHRcdCRJZjogKGFubm90YXRpb25WYWx1ZSBhcyB7ICRJZj86IHVua25vd24gfSkuJElmXG5cdFx0XHR9IGFzIElmQW5ub3RhdGlvbkV4cHJlc3Npb248VD4sXG5cdFx0XHR2aXNpdGVkTmF2aWdhdGlvblBhdGhzLFxuXHRcdFx0dW5kZWZpbmVkLFxuXHRcdFx0cGF0aFZpc2l0b3Jcblx0XHQpIGFzIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxUPjtcblx0fSBlbHNlIGlmIChhbm5vdGF0aW9uVmFsdWUuaGFzT3duUHJvcGVydHkoXCIkRW51bU1lbWJlclwiKSkge1xuXHRcdHJldHVybiBjb25zdGFudChyZXNvbHZlRW51bVZhbHVlKChhbm5vdGF0aW9uVmFsdWUgYXMgeyAkRW51bU1lbWJlcj86IHN0cmluZyB9KS4kRW51bU1lbWJlcikgYXMgVCk7XG5cdH1cblx0cmV0dXJuIGNvbnN0YW50KGZhbHNlIGFzIFQpO1xufVxuXG4vKipcbiAqIFByb2Nlc3MgdGhlIHtJZkFubm90YXRpb25FeHByZXNzaW9uVmFsdWV9IGludG8gYW4gZXhwcmVzc2lvbi5cbiAqIEB0ZW1wbGF0ZSBUIFRoZSB0YXJnZXQgdHlwZVxuICogQHBhcmFtIGFubm90YXRpb25WYWx1ZSBBbiBJZiBleHByZXNzaW9uIHJldHVybmluZyB0aGUgdHlwZSBUXG4gKiBAcGFyYW0gdmlzaXRlZE5hdmlnYXRpb25QYXRocyBUaGUgcGF0aCBmcm9tIHRoZSByb290IGVudGl0eSBzZXRcbiAqIEBwYXJhbSBwYXRoVmlzaXRvciBBIGZ1bmN0aW9uIHRvIG1vZGlmeSB0aGUgcmVzdWx0aW5nIHBhdGhcbiAqIEByZXR1cm5zIFRoZSBlcXVpdmFsZW50IGlmRWxzZSBleHByZXNzaW9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhbm5vdGF0aW9uSWZFeHByZXNzaW9uPFQgZXh0ZW5kcyBQcmltaXRpdmVUeXBlPihcblx0YW5ub3RhdGlvblZhbHVlOiBJZkFubm90YXRpb25FeHByZXNzaW9uVmFsdWU8VD4sXG5cdHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHM6IHN0cmluZ1tdID0gW10sXG5cdHBhdGhWaXNpdG9yPzogRnVuY3Rpb25cbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxUPiB7XG5cdHJldHVybiBpZkVsc2UoXG5cdFx0cGFyc2VBbm5vdGF0aW9uQ29uZGl0aW9uKGFubm90YXRpb25WYWx1ZVswXSwgdmlzaXRlZE5hdmlnYXRpb25QYXRocywgcGF0aFZpc2l0b3IpLFxuXHRcdHBhcnNlQW5ub3RhdGlvbkNvbmRpdGlvbihhbm5vdGF0aW9uVmFsdWVbMV0gYXMgQ29uZGl0aW9uYWxDaGVja09yVmFsdWUsIHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMsIHBhdGhWaXNpdG9yKSxcblx0XHRwYXJzZUFubm90YXRpb25Db25kaXRpb24oYW5ub3RhdGlvblZhbHVlWzJdIGFzIENvbmRpdGlvbmFsQ2hlY2tPclZhbHVlLCB2aXNpdGVkTmF2aWdhdGlvblBhdGhzLCBwYXRoVmlzaXRvcilcblx0KTtcbn1cbi8vIFRoaXMgdHlwZSBpcyBub3QgcmVjdXJzaXZlbHkgdHJhbnNmb3JtZWQgZnJvbSB0aGUgbWV0YW1vZGVsIGNvbnRlbnQsIGFzIHN1Y2ggd2UgaGF2ZSBzb21lIHVnbHkgdGhpbmdzIHRoZXJlXG50eXBlIFN1YkFwcGx5RXhwcmVzc2lvbkZyb21NZXRhbW9kZWwgPSBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbmZ1bmN0aW9uIGNvbnZlcnRTdWJBcHBseVBhcmFtZXRlcnMoYXBwbHlQYXJhbTogU3ViQXBwbHlFeHByZXNzaW9uRnJvbU1ldGFtb2RlbCk6IFN1YkFwcGx5RXhwcmVzc2lvbkZyb21NZXRhbW9kZWwgfCBQcmltaXRpdmVUeXBlIHtcblx0bGV0IGFwcGx5UGFyYW1Db252ZXJ0ZWQgPSBhcHBseVBhcmFtO1xuXHRpZiAoYXBwbHlQYXJhbS5oYXNPd25Qcm9wZXJ0eShcIiRQYXRoXCIpKSB7XG5cdFx0YXBwbHlQYXJhbUNvbnZlcnRlZCA9IHtcblx0XHRcdHR5cGU6IFwiUGF0aFwiLFxuXHRcdFx0cGF0aDogYXBwbHlQYXJhbS4kUGF0aFxuXHRcdH0gYXMgUGF0aEFubm90YXRpb25FeHByZXNzaW9uPHN0cmluZz47XG5cdH0gZWxzZSBpZiAoYXBwbHlQYXJhbS5oYXNPd25Qcm9wZXJ0eShcIiRJZlwiKSkge1xuXHRcdGFwcGx5UGFyYW1Db252ZXJ0ZWQgPSB7XG5cdFx0XHR0eXBlOiBcIklmXCIsXG5cdFx0XHQkSWY6IGFwcGx5UGFyYW0uJElmXG5cdFx0fSBhcyBJZkFubm90YXRpb25FeHByZXNzaW9uPHN0cmluZz47XG5cdH0gZWxzZSBpZiAoYXBwbHlQYXJhbS5oYXNPd25Qcm9wZXJ0eShcIiRBcHBseVwiKSkge1xuXHRcdGFwcGx5UGFyYW1Db252ZXJ0ZWQgPSB7XG5cdFx0XHR0eXBlOiBcIkFwcGx5XCIsXG5cdFx0XHQkRnVuY3Rpb246IGFwcGx5UGFyYW0uJEZ1bmN0aW9uLFxuXHRcdFx0JEFwcGx5OiBhcHBseVBhcmFtLiRBcHBseVxuXHRcdH0gYXMgQXBwbHlBbm5vdGF0aW9uRXhwcmVzc2lvbjxzdHJpbmc+O1xuXHR9XG5cdHJldHVybiBhcHBseVBhcmFtQ29udmVydGVkO1xufVxuXG50eXBlIE9EYXRhRnVuY3Rpb24gPSBcIm9kYXRhLmNvbmNhdFwiIHwgXCJvZGF0YS5maWxsVXJpVGVtcGxhdGVcIiB8IFwib2RhdGEudXJpRW5jb2RlXCI7XG5leHBvcnQgZnVuY3Rpb24gYW5ub3RhdGlvbkFwcGx5RXhwcmVzc2lvbihcblx0YXBwbHlFeHByZXNzaW9uOiBBcHBseUFubm90YXRpb25FeHByZXNzaW9uPHN0cmluZz4sXG5cdHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHM6IHN0cmluZ1tdID0gW10sXG5cdHBhdGhWaXNpdG9yPzogRnVuY3Rpb25cbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxzdHJpbmc+IHtcblx0c3dpdGNoIChhcHBseUV4cHJlc3Npb24uJEZ1bmN0aW9uIGFzIE9EYXRhRnVuY3Rpb24pIHtcblx0XHRjYXNlIFwib2RhdGEuY29uY2F0XCI6XG5cdFx0XHRyZXR1cm4gY29uY2F0KFxuXHRcdFx0XHQuLi5hcHBseUV4cHJlc3Npb24uJEFwcGx5Lm1hcCgoYXBwbHlQYXJhbSkgPT4ge1xuXHRcdFx0XHRcdHJldHVybiBnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24oXG5cdFx0XHRcdFx0XHRjb252ZXJ0U3ViQXBwbHlQYXJhbWV0ZXJzKGFwcGx5UGFyYW0pIGFzIFByb3BlcnR5QW5ub3RhdGlvblZhbHVlPHN0cmluZz4sXG5cdFx0XHRcdFx0XHR2aXNpdGVkTmF2aWdhdGlvblBhdGhzLFxuXHRcdFx0XHRcdFx0dW5kZWZpbmVkLFxuXHRcdFx0XHRcdFx0cGF0aFZpc2l0b3Jcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9KVxuXHRcdFx0KTtcblx0XHRjYXNlIFwib2RhdGEudXJpRW5jb2RlXCI6XG5cdFx0XHRjb25zdCBwYXJhbWV0ZXIgPSBnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24oXG5cdFx0XHRcdGNvbnZlcnRTdWJBcHBseVBhcmFtZXRlcnMoXG5cdFx0XHRcdFx0YXBwbHlFeHByZXNzaW9uLiRBcHBseVswXSBhcyB1bmtub3duIGFzIFN1YkFwcGx5RXhwcmVzc2lvbkZyb21NZXRhbW9kZWxcblx0XHRcdFx0KSBhcyBQcm9wZXJ0eUFubm90YXRpb25WYWx1ZTxzdHJpbmc+LFxuXHRcdFx0XHR2aXNpdGVkTmF2aWdhdGlvblBhdGhzLFxuXHRcdFx0XHR1bmRlZmluZWQsXG5cdFx0XHRcdHBhdGhWaXNpdG9yXG5cdFx0XHQpO1xuXHRcdFx0Ly8gVGhlIHNlY29uZCBwYXJhbWV0ZXIgZm9yIHVyaUVuY29kZSBpcyBhbHdheXMgYSBzdHJpbmcgc2luY2UgdGhlIHRhcmdldCBldmFsdWF0aW9uIGlzIGFnYWluc3QgYSBmb3JtYXRWYWx1ZSBjYWxsIGluIE9EYXRhVXRpbHMgd2hpY2ggZXhwZWN0IHRoZSB0YXJnZXQgdHlwZSBhcyBzZWNvbmQgcGFyYW1ldGVyXG5cdFx0XHRyZXR1cm4gZm4oXCJvZGF0YS51cmlFbmNvZGVcIiwgW3BhcmFtZXRlciwgXCJFZG0uU3RyaW5nXCJdLCB1bmRlZmluZWQsIHRydWUpO1xuXHRcdGNhc2UgXCJvZGF0YS5maWxsVXJpVGVtcGxhdGVcIjpcblx0XHRcdGNvbnN0IHRlbXBsYXRlID0gYXBwbHlFeHByZXNzaW9uLiRBcHBseVswXTtcblx0XHRcdGNvbnN0IHRlbXBsYXRlUGFyYW1zID0gYXBwbHlFeHByZXNzaW9uLiRBcHBseS5zbGljZSgxKSBhcyB1bmtub3duIGFzIFN1YkFwcGx5RXhwcmVzc2lvbkZyb21NZXRhbW9kZWxbXTtcblx0XHRcdGNvbnN0IHRhcmdldE9iamVjdDogUmVjb3JkPHN0cmluZywgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHVua25vd24+PiA9IHt9O1xuXHRcdFx0dGVtcGxhdGVQYXJhbXMuZm9yRWFjaCgoYXBwbHlQYXJhbSkgPT4ge1xuXHRcdFx0XHR0YXJnZXRPYmplY3RbYXBwbHlQYXJhbS4kTmFtZSBhcyBzdHJpbmddID0gZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKFxuXHRcdFx0XHRcdGNvbnZlcnRTdWJBcHBseVBhcmFtZXRlcnMoXG5cdFx0XHRcdFx0XHRhcHBseVBhcmFtLiRMYWJlbGVkRWxlbWVudCBhcyBTdWJBcHBseUV4cHJlc3Npb25Gcm9tTWV0YW1vZGVsXG5cdFx0XHRcdFx0KSBhcyBQcm9wZXJ0eUFubm90YXRpb25WYWx1ZTxzdHJpbmc+LFxuXHRcdFx0XHRcdHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMsXG5cdFx0XHRcdFx0dW5kZWZpbmVkLFxuXHRcdFx0XHRcdHBhdGhWaXNpdG9yXG5cdFx0XHRcdCk7XG5cdFx0XHR9KTtcblx0XHRcdHJldHVybiBmbihcIm9kYXRhLmZpbGxVcmlUZW1wbGF0ZVwiLCBbdGVtcGxhdGUsIHRhcmdldE9iamVjdF0sIHVuZGVmaW5lZCwgdHJ1ZSk7XG5cdH1cblx0cmV0dXJuIHVucmVzb2x2YWJsZUV4cHJlc3Npb247XG59XG5cbi8qKlxuICogR2VuZXJpYyBoZWxwZXIgZm9yIHRoZSBjb21wYXJpc29uIG9wZXJhdGlvbnMgKGVxdWFsLCBub3RFcXVhbCwgLi4uKS5cbiAqIEB0ZW1wbGF0ZSBUIFRoZSB0YXJnZXQgdHlwZVxuICogQHBhcmFtIG9wZXJhdG9yIFRoZSBvcGVyYXRvciB0byBhcHBseVxuICogQHBhcmFtIGxlZnRPcGVyYW5kIFRoZSBvcGVyYW5kIG9uIHRoZSBsZWZ0IHNpZGUgb2YgdGhlIG9wZXJhdG9yXG4gKiBAcGFyYW0gcmlnaHRPcGVyYW5kIFRoZSBvcGVyYW5kIG9uIHRoZSByaWdodCBzaWRlIG9mIHRoZSBvcGVyYXRvclxuICogQHJldHVybnMgQW4gZXhwcmVzc2lvbiByZXByZXNlbnRpbmcgdGhlIGNvbXBhcmlzb25cbiAqL1xuZnVuY3Rpb24gY29tcGFyaXNvbjxUIGV4dGVuZHMgUHJpbWl0aXZlVHlwZT4oXG5cdG9wZXJhdG9yOiBDb21wYXJpc29uT3BlcmF0b3IsXG5cdGxlZnRPcGVyYW5kOiBFeHByZXNzaW9uT3JQcmltaXRpdmU8VD4sXG5cdHJpZ2h0T3BlcmFuZDogRXhwcmVzc2lvbk9yUHJpbWl0aXZlPFQ+XG4pOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4ge1xuXHRjb25zdCBsZWZ0RXhwcmVzc2lvbiA9IHdyYXBQcmltaXRpdmUobGVmdE9wZXJhbmQpO1xuXHRjb25zdCByaWdodEV4cHJlc3Npb24gPSB3cmFwUHJpbWl0aXZlKHJpZ2h0T3BlcmFuZCk7XG5cdGlmIChoYXNVbnJlc29sdmFibGVFeHByZXNzaW9uKGxlZnRFeHByZXNzaW9uLCByaWdodEV4cHJlc3Npb24pKSB7XG5cdFx0cmV0dXJuIHVucmVzb2x2YWJsZUV4cHJlc3Npb247XG5cdH1cblx0aWYgKGlzQ29uc3RhbnQobGVmdEV4cHJlc3Npb24pICYmIGlzQ29uc3RhbnQocmlnaHRFeHByZXNzaW9uKSkge1xuXHRcdHN3aXRjaCAob3BlcmF0b3IpIHtcblx0XHRcdGNhc2UgXCIhPT1cIjpcblx0XHRcdFx0cmV0dXJuIGNvbnN0YW50KGxlZnRFeHByZXNzaW9uLnZhbHVlICE9PSByaWdodEV4cHJlc3Npb24udmFsdWUpO1xuXHRcdFx0Y2FzZSBcIj09PVwiOlxuXHRcdFx0XHRyZXR1cm4gY29uc3RhbnQobGVmdEV4cHJlc3Npb24udmFsdWUgPT09IHJpZ2h0RXhwcmVzc2lvbi52YWx1ZSk7XG5cdFx0XHRjYXNlIFwiPFwiOlxuXHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0bGVmdEV4cHJlc3Npb24udmFsdWUgPT09IG51bGwgfHxcblx0XHRcdFx0XHRsZWZ0RXhwcmVzc2lvbi52YWx1ZSA9PT0gdW5kZWZpbmVkIHx8XG5cdFx0XHRcdFx0cmlnaHRFeHByZXNzaW9uLnZhbHVlID09PSBudWxsIHx8XG5cdFx0XHRcdFx0cmlnaHRFeHByZXNzaW9uLnZhbHVlID09PSB1bmRlZmluZWRcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0cmV0dXJuIGNvbnN0YW50KGZhbHNlKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gY29uc3RhbnQobGVmdEV4cHJlc3Npb24udmFsdWUgPCByaWdodEV4cHJlc3Npb24udmFsdWUpO1xuXHRcdFx0Y2FzZSBcIjw9XCI6XG5cdFx0XHRcdGlmIChcblx0XHRcdFx0XHRsZWZ0RXhwcmVzc2lvbi52YWx1ZSA9PT0gbnVsbCB8fFxuXHRcdFx0XHRcdGxlZnRFeHByZXNzaW9uLnZhbHVlID09PSB1bmRlZmluZWQgfHxcblx0XHRcdFx0XHRyaWdodEV4cHJlc3Npb24udmFsdWUgPT09IG51bGwgfHxcblx0XHRcdFx0XHRyaWdodEV4cHJlc3Npb24udmFsdWUgPT09IHVuZGVmaW5lZFxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHRyZXR1cm4gY29uc3RhbnQoZmFsc2UpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBjb25zdGFudChsZWZ0RXhwcmVzc2lvbi52YWx1ZSA8PSByaWdodEV4cHJlc3Npb24udmFsdWUpO1xuXHRcdFx0Y2FzZSBcIj5cIjpcblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdGxlZnRFeHByZXNzaW9uLnZhbHVlID09PSBudWxsIHx8XG5cdFx0XHRcdFx0bGVmdEV4cHJlc3Npb24udmFsdWUgPT09IHVuZGVmaW5lZCB8fFxuXHRcdFx0XHRcdHJpZ2h0RXhwcmVzc2lvbi52YWx1ZSA9PT0gbnVsbCB8fFxuXHRcdFx0XHRcdHJpZ2h0RXhwcmVzc2lvbi52YWx1ZSA9PT0gdW5kZWZpbmVkXG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdHJldHVybiBjb25zdGFudChmYWxzZSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIGNvbnN0YW50KGxlZnRFeHByZXNzaW9uLnZhbHVlID4gcmlnaHRFeHByZXNzaW9uLnZhbHVlKTtcblx0XHRcdGNhc2UgXCI+PVwiOlxuXHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0bGVmdEV4cHJlc3Npb24udmFsdWUgPT09IG51bGwgfHxcblx0XHRcdFx0XHRsZWZ0RXhwcmVzc2lvbi52YWx1ZSA9PT0gdW5kZWZpbmVkIHx8XG5cdFx0XHRcdFx0cmlnaHRFeHByZXNzaW9uLnZhbHVlID09PSBudWxsIHx8XG5cdFx0XHRcdFx0cmlnaHRFeHByZXNzaW9uLnZhbHVlID09PSB1bmRlZmluZWRcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0cmV0dXJuIGNvbnN0YW50KGZhbHNlKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gY29uc3RhbnQobGVmdEV4cHJlc3Npb24udmFsdWUgPj0gcmlnaHRFeHByZXNzaW9uLnZhbHVlKTtcblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdF90eXBlOiBcIkNvbXBhcmlzb25cIixcblx0XHRcdG9wZXJhdG9yOiBvcGVyYXRvcixcblx0XHRcdG9wZXJhbmQxOiBsZWZ0RXhwcmVzc2lvbixcblx0XHRcdG9wZXJhbmQyOiByaWdodEV4cHJlc3Npb25cblx0XHR9O1xuXHR9XG59XG5cbi8qKlxuICogR2VuZXJpYyBoZWxwZXIgZm9yIHRoZSBsZW5ndGggb2YgYW4gZXhwcmVzc2lvbi5cbiAqIEBwYXJhbSBleHByZXNzaW9uIFRoZSBpbnB1dCBleHByZXNzaW9uIHBvaW50aW5nIHRvIGFuIGFycmF5XG4gKiBAcGFyYW0gY2hlY2tVbmRlZmluZWQgSXMgdGhlIGFycmF5IHBvdGVudGlhbGx5IHVuZGVmaW5lZFxuICogQHJldHVybnMgQW4gZXhwcmVzc2lvbiByZXByZXNlbnRpbmcgdGhlIGxlbmd0aFxuICovXG5leHBvcnQgZnVuY3Rpb24gbGVuZ3RoKFxuXHRleHByZXNzaW9uOiBQYXRoSW5Nb2RlbEV4cHJlc3Npb248dW5rbm93bj4gfCBVbnJlc29sdmFibGVQYXRoRXhwcmVzc2lvbixcblx0Y2hlY2tVbmRlZmluZWQgPSBmYWxzZVxuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPG51bWJlcj4ge1xuXHRpZiAoZXhwcmVzc2lvbi5fdHlwZSA9PT0gXCJVbnJlc29sdmFibGVcIikge1xuXHRcdHJldHVybiBleHByZXNzaW9uO1xuXHR9XG5cdGlmICghY2hlY2tVbmRlZmluZWQpIHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0X3R5cGU6IFwiTGVuZ3RoXCIsXG5cdFx0XHRwYXRoSW5Nb2RlbDogZXhwcmVzc2lvblxuXHRcdH07XG5cdH1cblx0cmV0dXJuIGlmRWxzZShlcXVhbChleHByZXNzaW9uLCB1bmRlZmluZWQpLCAtMSwgbGVuZ3RoKGV4cHJlc3Npb24pKTtcbn1cblxuLyoqXG4gKiBDb21wYXJpc29uOiBcImVxdWFsXCIgKD09PSkuXG4gKiBAdGVtcGxhdGUgVCBUaGUgdGFyZ2V0IHR5cGVcbiAqIEBwYXJhbSBsZWZ0T3BlcmFuZCBUaGUgb3BlcmFuZCBvbiB0aGUgbGVmdCBzaWRlXG4gKiBAcGFyYW0gcmlnaHRPcGVyYW5kIFRoZSBvcGVyYW5kIG9uIHRoZSByaWdodCBzaWRlIG9mIHRoZSBjb21wYXJpc29uXG4gKiBAcmV0dXJucyBBbiBleHByZXNzaW9uIHJlcHJlc2VudGluZyB0aGUgY29tcGFyaXNvblxuICovXG5leHBvcnQgZnVuY3Rpb24gZXF1YWw8VCBleHRlbmRzIFByaW1pdGl2ZVR5cGU+KFxuXHRsZWZ0T3BlcmFuZDogRXhwcmVzc2lvbk9yUHJpbWl0aXZlPFQ+LFxuXHRyaWdodE9wZXJhbmQ6IEV4cHJlc3Npb25PclByaW1pdGl2ZTxUPlxuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+IHtcblx0Y29uc3QgbGVmdEV4cHJlc3Npb24gPSB3cmFwUHJpbWl0aXZlKGxlZnRPcGVyYW5kKTtcblx0Y29uc3QgcmlnaHRFeHByZXNzaW9uID0gd3JhcFByaW1pdGl2ZShyaWdodE9wZXJhbmQpO1xuXHRpZiAoaGFzVW5yZXNvbHZhYmxlRXhwcmVzc2lvbihsZWZ0RXhwcmVzc2lvbiwgcmlnaHRFeHByZXNzaW9uKSkge1xuXHRcdHJldHVybiB1bnJlc29sdmFibGVFeHByZXNzaW9uO1xuXHR9XG5cdGlmIChfY2hlY2tFeHByZXNzaW9uc0FyZUVxdWFsKGxlZnRFeHByZXNzaW9uLCByaWdodEV4cHJlc3Npb24pKSB7XG5cdFx0cmV0dXJuIGNvbnN0YW50KHRydWUpO1xuXHR9XG5cblx0ZnVuY3Rpb24gcmVkdWNlKGxlZnQ6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxUPiwgcmlnaHQ6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxUPik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiB8IHVuZGVmaW5lZCB7XG5cdFx0aWYgKGxlZnQuX3R5cGUgPT09IFwiQ29tcGFyaXNvblwiICYmIGlzVHJ1ZShyaWdodCkpIHtcblx0XHRcdC8vIGNvbXBhcmUoYSwgYikgPT09IHRydWUgfn4+IGNvbXBhcmUoYSwgYilcblx0XHRcdHJldHVybiBsZWZ0O1xuXHRcdH0gZWxzZSBpZiAobGVmdC5fdHlwZSA9PT0gXCJDb21wYXJpc29uXCIgJiYgaXNGYWxzZShyaWdodCkpIHtcblx0XHRcdC8vIGNvbXBhcmUoYSwgYikgPT09IGZhbHNlIH5+PiAhY29tcGFyZShhLCBiKVxuXHRcdFx0cmV0dXJuIG5vdChsZWZ0KTtcblx0XHR9IGVsc2UgaWYgKGxlZnQuX3R5cGUgPT09IFwiSWZFbHNlXCIgJiYgX2NoZWNrRXhwcmVzc2lvbnNBcmVFcXVhbChsZWZ0Lm9uVHJ1ZSwgcmlnaHQpKSB7XG5cdFx0XHQvLyAoaWYgKHgpIHsgYSB9IGVsc2UgeyBiIH0pID09PSBhIH5+PiB4IHx8IChiID09PSBhKVxuXHRcdFx0cmV0dXJuIG9yKGxlZnQuY29uZGl0aW9uLCBlcXVhbChsZWZ0Lm9uRmFsc2UsIHJpZ2h0KSk7XG5cdFx0fSBlbHNlIGlmIChsZWZ0Ll90eXBlID09PSBcIklmRWxzZVwiICYmIF9jaGVja0V4cHJlc3Npb25zQXJlRXF1YWwobGVmdC5vbkZhbHNlLCByaWdodCkpIHtcblx0XHRcdC8vIChpZiAoeCkgeyBhIH0gZWxzZSB7IGIgfSkgPT09IGIgfn4+ICF4IHx8IChhID09PSBiKVxuXHRcdFx0cmV0dXJuIG9yKG5vdChsZWZ0LmNvbmRpdGlvbiksIGVxdWFsKGxlZnQub25UcnVlLCByaWdodCkpO1xuXHRcdH0gZWxzZSBpZiAoXG5cdFx0XHRsZWZ0Ll90eXBlID09PSBcIklmRWxzZVwiICYmXG5cdFx0XHRpc0NvbnN0YW50KGxlZnQub25UcnVlKSAmJlxuXHRcdFx0aXNDb25zdGFudChsZWZ0Lm9uRmFsc2UpICYmXG5cdFx0XHRpc0NvbnN0YW50KHJpZ2h0KSAmJlxuXHRcdFx0IV9jaGVja0V4cHJlc3Npb25zQXJlRXF1YWwobGVmdC5vblRydWUsIHJpZ2h0KSAmJlxuXHRcdFx0IV9jaGVja0V4cHJlc3Npb25zQXJlRXF1YWwobGVmdC5vbkZhbHNlLCByaWdodClcblx0XHQpIHtcblx0XHRcdHJldHVybiBjb25zdGFudChmYWxzZSk7XG5cdFx0fVxuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cblxuXHQvLyBleHBsb2l0IHN5bW1ldHJ5OiBhID09PSBiIDx+PiBiID09PSBhXG5cdGNvbnN0IHJlZHVjZWQgPSByZWR1Y2UobGVmdEV4cHJlc3Npb24sIHJpZ2h0RXhwcmVzc2lvbikgPz8gcmVkdWNlKHJpZ2h0RXhwcmVzc2lvbiwgbGVmdEV4cHJlc3Npb24pO1xuXHRyZXR1cm4gcmVkdWNlZCA/PyBjb21wYXJpc29uKFwiPT09XCIsIGxlZnRFeHByZXNzaW9uLCByaWdodEV4cHJlc3Npb24pO1xufVxuXG4vKipcbiAqIENvbXBhcmlzb246IFwibm90IGVxdWFsXCIgKCE9PSkuXG4gKiBAdGVtcGxhdGUgVCBUaGUgdGFyZ2V0IHR5cGVcbiAqIEBwYXJhbSBsZWZ0T3BlcmFuZCBUaGUgb3BlcmFuZCBvbiB0aGUgbGVmdCBzaWRlXG4gKiBAcGFyYW0gcmlnaHRPcGVyYW5kIFRoZSBvcGVyYW5kIG9uIHRoZSByaWdodCBzaWRlIG9mIHRoZSBjb21wYXJpc29uXG4gKiBAcmV0dXJucyBBbiBleHByZXNzaW9uIHJlcHJlc2VudGluZyB0aGUgY29tcGFyaXNvblxuICovXG5leHBvcnQgZnVuY3Rpb24gbm90RXF1YWw8VCBleHRlbmRzIFByaW1pdGl2ZVR5cGU+KFxuXHRsZWZ0T3BlcmFuZDogRXhwcmVzc2lvbk9yUHJpbWl0aXZlPFQ+LFxuXHRyaWdodE9wZXJhbmQ6IEV4cHJlc3Npb25PclByaW1pdGl2ZTxUPlxuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+IHtcblx0cmV0dXJuIG5vdChlcXVhbChsZWZ0T3BlcmFuZCwgcmlnaHRPcGVyYW5kKSk7XG59XG5cbi8qKlxuICogQ29tcGFyaXNvbjogXCJncmVhdGVyIG9yIGVxdWFsXCIgKD49KS5cbiAqIEB0ZW1wbGF0ZSBUIFRoZSB0YXJnZXQgdHlwZVxuICogQHBhcmFtIGxlZnRPcGVyYW5kIFRoZSBvcGVyYW5kIG9uIHRoZSBsZWZ0IHNpZGVcbiAqIEBwYXJhbSByaWdodE9wZXJhbmQgVGhlIG9wZXJhbmQgb24gdGhlIHJpZ2h0IHNpZGUgb2YgdGhlIGNvbXBhcmlzb25cbiAqIEByZXR1cm5zIEFuIGV4cHJlc3Npb24gcmVwcmVzZW50aW5nIHRoZSBjb21wYXJpc29uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBncmVhdGVyT3JFcXVhbDxUIGV4dGVuZHMgRGVmaW5lZFByaW1pdGl2ZVR5cGU+KFxuXHRsZWZ0T3BlcmFuZDogRXhwcmVzc2lvbk9yUHJpbWl0aXZlPFQ+LFxuXHRyaWdodE9wZXJhbmQ6IEV4cHJlc3Npb25PclByaW1pdGl2ZTxUPlxuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+IHtcblx0cmV0dXJuIGNvbXBhcmlzb24oXCI+PVwiLCBsZWZ0T3BlcmFuZCwgcmlnaHRPcGVyYW5kKTtcbn1cblxuLyoqXG4gKiBDb21wYXJpc29uOiBcImdyZWF0ZXIgdGhhblwiICg+KS5cbiAqIEB0ZW1wbGF0ZSBUIFRoZSB0YXJnZXQgdHlwZVxuICogQHBhcmFtIGxlZnRPcGVyYW5kIFRoZSBvcGVyYW5kIG9uIHRoZSBsZWZ0IHNpZGVcbiAqIEBwYXJhbSByaWdodE9wZXJhbmQgVGhlIG9wZXJhbmQgb24gdGhlIHJpZ2h0IHNpZGUgb2YgdGhlIGNvbXBhcmlzb25cbiAqIEByZXR1cm5zIEFuIGV4cHJlc3Npb24gcmVwcmVzZW50aW5nIHRoZSBjb21wYXJpc29uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBncmVhdGVyVGhhbjxUIGV4dGVuZHMgRGVmaW5lZFByaW1pdGl2ZVR5cGU+KFxuXHRsZWZ0T3BlcmFuZDogRXhwcmVzc2lvbk9yUHJpbWl0aXZlPFQ+LFxuXHRyaWdodE9wZXJhbmQ6IEV4cHJlc3Npb25PclByaW1pdGl2ZTxUPlxuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+IHtcblx0cmV0dXJuIGNvbXBhcmlzb24oXCI+XCIsIGxlZnRPcGVyYW5kLCByaWdodE9wZXJhbmQpO1xufVxuXG4vKipcbiAqIENvbXBhcmlzb246IFwibGVzcyBvciBlcXVhbFwiICg8PSkuXG4gKiBAdGVtcGxhdGUgVCBUaGUgdGFyZ2V0IHR5cGVcbiAqIEBwYXJhbSBsZWZ0T3BlcmFuZCBUaGUgb3BlcmFuZCBvbiB0aGUgbGVmdCBzaWRlXG4gKiBAcGFyYW0gcmlnaHRPcGVyYW5kIFRoZSBvcGVyYW5kIG9uIHRoZSByaWdodCBzaWRlIG9mIHRoZSBjb21wYXJpc29uXG4gKiBAcmV0dXJucyBBbiBleHByZXNzaW9uIHJlcHJlc2VudGluZyB0aGUgY29tcGFyaXNvblxuICovXG5leHBvcnQgZnVuY3Rpb24gbGVzc09yRXF1YWw8VCBleHRlbmRzIERlZmluZWRQcmltaXRpdmVUeXBlPihcblx0bGVmdE9wZXJhbmQ6IEV4cHJlc3Npb25PclByaW1pdGl2ZTxUPixcblx0cmlnaHRPcGVyYW5kOiBFeHByZXNzaW9uT3JQcmltaXRpdmU8VD5cbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiB7XG5cdHJldHVybiBjb21wYXJpc29uKFwiPD1cIiwgbGVmdE9wZXJhbmQsIHJpZ2h0T3BlcmFuZCk7XG59XG5cbi8qKlxuICogQ29tcGFyaXNvbjogXCJsZXNzIHRoYW5cIiAoPCkuXG4gKiBAdGVtcGxhdGUgVCBUaGUgdGFyZ2V0IHR5cGVcbiAqIEBwYXJhbSBsZWZ0T3BlcmFuZCBUaGUgb3BlcmFuZCBvbiB0aGUgbGVmdCBzaWRlXG4gKiBAcGFyYW0gcmlnaHRPcGVyYW5kIFRoZSBvcGVyYW5kIG9uIHRoZSByaWdodCBzaWRlIG9mIHRoZSBjb21wYXJpc29uXG4gKiBAcmV0dXJucyBBbiBleHByZXNzaW9uIHJlcHJlc2VudGluZyB0aGUgY29tcGFyaXNvblxuICovXG5leHBvcnQgZnVuY3Rpb24gbGVzc1RoYW48VCBleHRlbmRzIERlZmluZWRQcmltaXRpdmVUeXBlPihcblx0bGVmdE9wZXJhbmQ6IEV4cHJlc3Npb25PclByaW1pdGl2ZTxUPixcblx0cmlnaHRPcGVyYW5kOiBFeHByZXNzaW9uT3JQcmltaXRpdmU8VD5cbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiB7XG5cdHJldHVybiBjb21wYXJpc29uKFwiPFwiLCBsZWZ0T3BlcmFuZCwgcmlnaHRPcGVyYW5kKTtcbn1cblxuLyoqXG4gKiBJZi10aGVuLWVsc2UgZXhwcmVzc2lvbi5cbiAqXG4gKiBFdmFsdWF0ZXMgdG8gb25UcnVlIGlmIHRoZSBjb25kaXRpb24gZXZhbHVhdGVzIHRvIHRydWUsIGVsc2UgZXZhbHVhdGVzIHRvIG9uRmFsc2UuXG4gKiBAdGVtcGxhdGUgVCBUaGUgdGFyZ2V0IHR5cGVcbiAqIEBwYXJhbSBjb25kaXRpb24gVGhlIGNvbmRpdGlvbiB0byBldmFsdWF0ZVxuICogQHBhcmFtIG9uVHJ1ZSBFeHByZXNzaW9uIHJlc3VsdCBpZiB0aGUgY29uZGl0aW9uIGV2YWx1YXRlcyB0byB0cnVlXG4gKiBAcGFyYW0gb25GYWxzZSBFeHByZXNzaW9uIHJlc3VsdCBpZiB0aGUgY29uZGl0aW9uIGV2YWx1YXRlcyB0byBmYWxzZVxuICogQHJldHVybnMgVGhlIGV4cHJlc3Npb24gdGhhdCByZXByZXNlbnRzIHRoaXMgY29uZGl0aW9uYWwgY2hlY2tcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlmRWxzZTxUIGV4dGVuZHMgUHJpbWl0aXZlVHlwZT4oXG5cdGNvbmRpdGlvbjogRXhwcmVzc2lvbk9yUHJpbWl0aXZlPGJvb2xlYW4+LFxuXHRvblRydWU6IEV4cHJlc3Npb25PclByaW1pdGl2ZTxUPixcblx0b25GYWxzZTogRXhwcmVzc2lvbk9yUHJpbWl0aXZlPFQ+XG4pOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248VD4ge1xuXHRsZXQgY29uZGl0aW9uRXhwcmVzc2lvbiA9IHdyYXBQcmltaXRpdmUoY29uZGl0aW9uKTtcblx0bGV0IG9uVHJ1ZUV4cHJlc3Npb24gPSB3cmFwUHJpbWl0aXZlKG9uVHJ1ZSk7XG5cdGxldCBvbkZhbHNlRXhwcmVzc2lvbiA9IHdyYXBQcmltaXRpdmUob25GYWxzZSk7XG5cblx0Ly8gc3dhcCBicmFuY2hlcyBpZiB0aGUgY29uZGl0aW9uIGlzIGEgbmVnYXRpb25cblx0aWYgKGNvbmRpdGlvbkV4cHJlc3Npb24uX3R5cGUgPT09IFwiTm90XCIpIHtcblx0XHQvLyBpZkVsc2Uobm90KFgpLCBhLCBiKSAtLT4gaWZFbHNlKFgsIGIsIGEpXG5cdFx0W29uVHJ1ZUV4cHJlc3Npb24sIG9uRmFsc2VFeHByZXNzaW9uXSA9IFtvbkZhbHNlRXhwcmVzc2lvbiwgb25UcnVlRXhwcmVzc2lvbl07XG5cdFx0Y29uZGl0aW9uRXhwcmVzc2lvbiA9IG5vdChjb25kaXRpb25FeHByZXNzaW9uKTtcblx0fVxuXG5cdC8vIGlubGluZSBuZXN0ZWQgaWYtZWxzZSBleHByZXNzaW9uczogb25UcnVlIGJyYW5jaFxuXHQvLyBpZkVsc2UoWCwgaWZFbHNlKFgsIGEsIGIpLCBjKSA9PT4gaWZFbHNlKFgsIGEsIGMpXG5cdGlmIChvblRydWVFeHByZXNzaW9uLl90eXBlID09PSBcIklmRWxzZVwiICYmIF9jaGVja0V4cHJlc3Npb25zQXJlRXF1YWwoY29uZGl0aW9uRXhwcmVzc2lvbiwgb25UcnVlRXhwcmVzc2lvbi5jb25kaXRpb24pKSB7XG5cdFx0b25UcnVlRXhwcmVzc2lvbiA9IG9uVHJ1ZUV4cHJlc3Npb24ub25UcnVlO1xuXHR9XG5cblx0Ly8gaW5saW5lIG5lc3RlZCBpZi1lbHNlIGV4cHJlc3Npb25zOiBvbkZhbHNlIGJyYW5jaFxuXHQvLyBpZkVsc2UoWCwgYSwgaWZFbHNlKFgsIGIsIGMpKSA9PT4gaWZFbHNlKFgsIGEsIGMpXG5cdGlmIChvbkZhbHNlRXhwcmVzc2lvbi5fdHlwZSA9PT0gXCJJZkVsc2VcIiAmJiBfY2hlY2tFeHByZXNzaW9uc0FyZUVxdWFsKGNvbmRpdGlvbkV4cHJlc3Npb24sIG9uRmFsc2VFeHByZXNzaW9uLmNvbmRpdGlvbikpIHtcblx0XHRvbkZhbHNlRXhwcmVzc2lvbiA9IG9uRmFsc2VFeHByZXNzaW9uLm9uRmFsc2U7XG5cdH1cblxuXHQvLyAoaWYgdHJ1ZSB0aGVuIGEgZWxzZSBiKSAgfn4+IGFcblx0Ly8gKGlmIGZhbHNlIHRoZW4gYSBlbHNlIGIpIH5+PiBiXG5cdGlmIChpc0NvbnN0YW50KGNvbmRpdGlvbkV4cHJlc3Npb24pKSB7XG5cdFx0cmV0dXJuIGNvbmRpdGlvbkV4cHJlc3Npb24udmFsdWUgPyBvblRydWVFeHByZXNzaW9uIDogb25GYWxzZUV4cHJlc3Npb247XG5cdH1cblxuXHQvLyBpZiAoaXNDb25zdGFudEJvb2xlYW4ob25UcnVlRXhwcmVzc2lvbikgfHwgaXNDb25zdGFudEJvb2xlYW4ob25GYWxzZUV4cHJlc3Npb24pKSB7XG5cdC8vIFx0cmV0dXJuIG9yKGFuZChjb25kaXRpb24sIG9uVHJ1ZUV4cHJlc3Npb24gYXMgRXhwcmVzc2lvbjxib29sZWFuPiksIGFuZChub3QoY29uZGl0aW9uKSwgb25GYWxzZUV4cHJlc3Npb24gYXMgRXhwcmVzc2lvbjxib29sZWFuPikpIGFzIEV4cHJlc3Npb248VD5cblx0Ly8gfVxuXG5cdC8vIChpZiBYIHRoZW4gYSBlbHNlIGEpIH5+PiBhXG5cdGlmIChfY2hlY2tFeHByZXNzaW9uc0FyZUVxdWFsKG9uVHJ1ZUV4cHJlc3Npb24sIG9uRmFsc2VFeHByZXNzaW9uKSkge1xuXHRcdHJldHVybiBvblRydWVFeHByZXNzaW9uO1xuXHR9XG5cblx0Ly8gaWYgWCB0aGVuIGEgZWxzZSBmYWxzZSB+fj4gWCAmJiBhXG5cdGlmIChpc0ZhbHNlKG9uRmFsc2VFeHByZXNzaW9uKSkge1xuXHRcdHJldHVybiBhbmQoY29uZGl0aW9uRXhwcmVzc2lvbiwgb25UcnVlRXhwcmVzc2lvbiBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4pIGFzIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxUPjtcblx0fVxuXG5cdC8vIGlmIFggdGhlbiBhIGVsc2UgdHJ1ZSB+fj4gIVggfHwgYVxuXHRpZiAoaXNUcnVlKG9uRmFsc2VFeHByZXNzaW9uKSkge1xuXHRcdHJldHVybiBvcihub3QoY29uZGl0aW9uRXhwcmVzc2lvbiksIG9uVHJ1ZUV4cHJlc3Npb24gYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+KSBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248VD47XG5cdH1cblxuXHQvLyBpZiBYIHRoZW4gZmFsc2UgZWxzZSBhIH5+PiAhWCAmJiBhXG5cdGlmIChpc0ZhbHNlKG9uVHJ1ZUV4cHJlc3Npb24pKSB7XG5cdFx0cmV0dXJuIGFuZChub3QoY29uZGl0aW9uRXhwcmVzc2lvbiksIG9uRmFsc2VFeHByZXNzaW9uIGFzIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPikgYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFQ+O1xuXHR9XG5cblx0Ly8gaWYgWCB0aGVuIHRydWUgZWxzZSBhIH5+PiBYIHx8IGFcblx0aWYgKGlzVHJ1ZShvblRydWVFeHByZXNzaW9uKSkge1xuXHRcdHJldHVybiBvcihjb25kaXRpb25FeHByZXNzaW9uLCBvbkZhbHNlRXhwcmVzc2lvbiBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4pIGFzIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxUPjtcblx0fVxuXHRpZiAoaGFzVW5yZXNvbHZhYmxlRXhwcmVzc2lvbihjb25kaXRpb25FeHByZXNzaW9uLCBvblRydWVFeHByZXNzaW9uLCBvbkZhbHNlRXhwcmVzc2lvbikpIHtcblx0XHRyZXR1cm4gdW5yZXNvbHZhYmxlRXhwcmVzc2lvbjtcblx0fVxuXHRpZiAoaXNDb21wbGV4VHlwZUV4cHJlc3Npb24oY29uZGl0aW9uKSB8fCBpc0NvbXBsZXhUeXBlRXhwcmVzc2lvbihvblRydWUpIHx8IGlzQ29tcGxleFR5cGVFeHByZXNzaW9uKG9uRmFsc2UpKSB7XG5cdFx0bGV0IHBhdGhJZHggPSAwO1xuXHRcdGNvbnN0IG15SWZFbHNlRXhwcmVzc2lvbiA9IGZvcm1hdFJlc3VsdChbY29uZGl0aW9uLCBvblRydWUsIG9uRmFsc2VdLCBcInNhcC5mZS5jb3JlLmZvcm1hdHRlcnMuU3RhbmRhcmRGb3JtYXR0ZXIjaWZFbHNlXCIpO1xuXHRcdGNvbnN0IGFsbFBhcnRzID0gW107XG5cdFx0dHJhbnNmb3JtUmVjdXJzaXZlbHkoXG5cdFx0XHRteUlmRWxzZUV4cHJlc3Npb24sXG5cdFx0XHRcIlBhdGhJbk1vZGVsXCIsXG5cdFx0XHQoY29uc3RhbnRQYXRoOiBQYXRoSW5Nb2RlbEV4cHJlc3Npb248dW5rbm93bj4pID0+IHtcblx0XHRcdFx0YWxsUGFydHMucHVzaChjb25zdGFudFBhdGgpO1xuXHRcdFx0XHRyZXR1cm4gcGF0aEluTW9kZWwoYCQke3BhdGhJZHgrK31gLCBcIiRcIik7XG5cdFx0XHR9LFxuXHRcdFx0dHJ1ZVxuXHRcdCk7XG5cdFx0YWxsUGFydHMudW5zaGlmdChjb25zdGFudChKU09OLnN0cmluZ2lmeShteUlmRWxzZUV4cHJlc3Npb24pKSk7XG5cdFx0cmV0dXJuIGZvcm1hdFJlc3VsdChhbGxQYXJ0cywgXCJzYXAuZmUuY29yZS5mb3JtYXR0ZXJzLlN0YW5kYXJkRm9ybWF0dGVyI2V2YWx1YXRlQ29tcGxleEV4cHJlc3Npb25cIiwgdW5kZWZpbmVkLCB0cnVlKTtcblx0fVxuXHRyZXR1cm4ge1xuXHRcdF90eXBlOiBcIklmRWxzZVwiLFxuXHRcdGNvbmRpdGlvbjogY29uZGl0aW9uRXhwcmVzc2lvbixcblx0XHRvblRydWU6IG9uVHJ1ZUV4cHJlc3Npb24sXG5cdFx0b25GYWxzZTogb25GYWxzZUV4cHJlc3Npb25cblx0fTtcbn1cblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciB0aGUgY3VycmVudCBleHByZXNzaW9uIGhhcyBhIHJlZmVyZW5jZSB0byB0aGUgZGVmYXVsdCBtb2RlbCAodW5kZWZpbmVkKS5cbiAqIEBwYXJhbSBleHByZXNzaW9uIFRoZSBleHByZXNzaW9uIHRvIGV2YWx1YXRlXG4gKiBAcmV0dXJucyBgdHJ1ZWAgaWYgdGhlcmUgaXMgYSByZWZlcmVuY2UgdG8gdGhlIGRlZmF1bHQgY29udGV4dFxuICovXG5mdW5jdGlvbiBoYXNSZWZlcmVuY2VUb0RlZmF1bHRDb250ZXh0KGV4cHJlc3Npb246IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjx1bmtub3duPik6IGJvb2xlYW4ge1xuXHRzd2l0Y2ggKGV4cHJlc3Npb24uX3R5cGUpIHtcblx0XHRjYXNlIFwiQ29uc3RhbnRcIjpcblx0XHRjYXNlIFwiRm9ybWF0dGVyXCI6XG5cdFx0Y2FzZSBcIkNvbXBsZXhUeXBlXCI6XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0Y2FzZSBcIlNldFwiOlxuXHRcdFx0cmV0dXJuIGV4cHJlc3Npb24ub3BlcmFuZHMuc29tZShoYXNSZWZlcmVuY2VUb0RlZmF1bHRDb250ZXh0KTtcblx0XHRjYXNlIFwiUGF0aEluTW9kZWxcIjpcblx0XHRcdHJldHVybiBleHByZXNzaW9uLm1vZGVsTmFtZSA9PT0gdW5kZWZpbmVkO1xuXHRcdGNhc2UgXCJDb21wYXJpc29uXCI6XG5cdFx0XHRyZXR1cm4gaGFzUmVmZXJlbmNlVG9EZWZhdWx0Q29udGV4dChleHByZXNzaW9uLm9wZXJhbmQxKSB8fCBoYXNSZWZlcmVuY2VUb0RlZmF1bHRDb250ZXh0KGV4cHJlc3Npb24ub3BlcmFuZDIpO1xuXHRcdGNhc2UgXCJJZkVsc2VcIjpcblx0XHRcdHJldHVybiAoXG5cdFx0XHRcdGhhc1JlZmVyZW5jZVRvRGVmYXVsdENvbnRleHQoZXhwcmVzc2lvbi5jb25kaXRpb24pIHx8XG5cdFx0XHRcdGhhc1JlZmVyZW5jZVRvRGVmYXVsdENvbnRleHQoZXhwcmVzc2lvbi5vblRydWUpIHx8XG5cdFx0XHRcdGhhc1JlZmVyZW5jZVRvRGVmYXVsdENvbnRleHQoZXhwcmVzc2lvbi5vbkZhbHNlKVxuXHRcdFx0KTtcblx0XHRjYXNlIFwiTm90XCI6XG5cdFx0Y2FzZSBcIlRydXRoeVwiOlxuXHRcdFx0cmV0dXJuIGhhc1JlZmVyZW5jZVRvRGVmYXVsdENvbnRleHQoZXhwcmVzc2lvbi5vcGVyYW5kKTtcblx0XHRkZWZhdWx0OlxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG59XG5cbi8vIFRoaXMgaXMgb25lIGNhc2Ugd2hlcmUgYW55IGRvZXMgbWFrZSBzZW5zZS4uLlxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbmV4cG9ydCB0eXBlIEZuPFQ+ID0gKCguLi5wYXJhbXM6IGFueSkgPT4gVCB8IFByb21pc2U8VD4pICYge1xuXHRfX2Z1bmN0aW9uTmFtZTogc3RyaW5nO1xufTtcblxuLyoqXG4gKiBAdHlwZWRlZiBXcmFwcGVkVHVwbGVcbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudFxuLy8gQHRzLWlnbm9yZVxudHlwZSBXcmFwcGVkVHVwbGU8VD4gPSB7IFtLIGluIGtleW9mIFRdOiBXcmFwcGVkVHVwbGU8VFtLXT4gfCBFeHByZXNzaW9uT3JQcmltaXRpdmU8VFtLXT4gfCB1bmRlZmluZWQgfTtcblxuLy8gU28sIHRoaXMgd29ya3MgYnV0IEkgY2Fubm90IGdldCBpdCB0byBjb21waWxlIDpELCBidXQgaXQgc3RpbGwgZG9lcyB3aGF0IGlzIGV4cGVjdGVkLi4uXG5cbi8qKlxuICogQSBmdW5jdGlvbiByZWZlcmVuY2Ugb3IgYSBmdW5jdGlvbiBuYW1lLlxuICovXG50eXBlIEZ1bmN0aW9uT3JOYW1lPFQ+ID0gRm48VD4gfCBzdHJpbmc7XG5cbi8qKlxuICogRnVuY3Rpb24gcGFyYW1ldGVycywgZWl0aGVyIGRlcml2ZWQgZnJvbSB0aGUgZnVuY3Rpb24gb3IgYW4gdW50eXBlZCBhcnJheS5cbiAqL1xudHlwZSBGdW5jdGlvblBhcmFtZXRlcnM8VCwgRiBleHRlbmRzIEZ1bmN0aW9uT3JOYW1lPFQ+PiA9IEYgZXh0ZW5kcyBGbjxUPiA/IFBhcmFtZXRlcnM8Rj4gOiB1bmtub3duW107XG5cbi8qKlxuICogQ2FsbHMgYSBmb3JtYXR0ZXIgZnVuY3Rpb24gdG8gcHJvY2VzcyB0aGUgcGFyYW1ldGVycy5cbiAqIElmIHJlcXVpcmVDb250ZXh0IGlzIHNldCB0byB0cnVlIGFuZCBubyBjb250ZXh0IGlzIHBhc3NlZCBhIGRlZmF1bHQgY29udGV4dCB3aWxsIGJlIGFkZGVkIGF1dG9tYXRpY2FsbHkuXG4gKiBAdGVtcGxhdGUgVFxuICogQHRlbXBsYXRlIFVcbiAqIEBwYXJhbSBwYXJhbWV0ZXJzIFRoZSBsaXN0IG9mIHBhcmFtZXRlciB0aGF0IHNob3VsZCBtYXRjaCB0aGUgdHlwZSBhbmQgbnVtYmVyIG9mIHRoZSBmb3JtYXR0ZXIgZnVuY3Rpb25cbiAqIEBwYXJhbSBmb3JtYXR0ZXJGdW5jdGlvbiBUaGUgZnVuY3Rpb24gdG8gY2FsbFxuICogQHBhcmFtIFtjb250ZXh0RW50aXR5VHlwZV0gSWYgbm8gcGFyYW1ldGVyIHJlZmVycyB0byB0aGUgY29udGV4dCB0aGVuIHdlIHVzZSB0aGlzIGluZm9ybWF0aW9uIHRvIGFkZCBhIHJlZmVyZW5jZSB0byB0aGUga2V5cyBmcm9tIHRoZSBlbnRpdHkgdHlwZS5cbiAqIEBwYXJhbSBbaWdub3JlQ29tcGxleFR5cGVdIFdoZXRoZXIgdG8gaWdub3JlIHRoZSB0cmFuc2dmb3JtYXRpb24gdG8gdGhlIFN0YW5kYXJkRm9ybWF0dGVyIG9yIG5vdFxuICogQHJldHVybnMgVGhlIGNvcnJlc3BvbmRpbmcgZXhwcmVzc2lvblxuICovXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0UmVzdWx0PFQsIFUgZXh0ZW5kcyBGbjxUPj4oXG5cdHBhcmFtZXRlcnM6IFdyYXBwZWRUdXBsZTxQYXJhbWV0ZXJzPFU+Pixcblx0Zm9ybWF0dGVyRnVuY3Rpb246IFUgfCBzdHJpbmcsXG5cdGNvbnRleHRFbnRpdHlUeXBlPzogRW50aXR5VHlwZSxcblx0aWdub3JlQ29tcGxleFR5cGUgPSBmYWxzZVxuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFQ+IHtcblx0Y29uc3QgcGFyYW1ldGVyRXhwcmVzc2lvbnMgPSAocGFyYW1ldGVycyBhcyBFeHByZXNzaW9uT3JQcmltaXRpdmU8UHJpbWl0aXZlVHlwZT5bXSkubWFwKHdyYXBQcmltaXRpdmUpO1xuXG5cdGlmIChoYXNVbnJlc29sdmFibGVFeHByZXNzaW9uKC4uLnBhcmFtZXRlckV4cHJlc3Npb25zKSkge1xuXHRcdHJldHVybiB1bnJlc29sdmFibGVFeHByZXNzaW9uO1xuXHR9XG5cdGlmIChjb250ZXh0RW50aXR5VHlwZSkge1xuXHRcdC8vIE90aGVyd2lzZSwgaWYgdGhlIGNvbnRleHQgaXMgcmVxdWlyZWQgYW5kIG5vIGNvbnRleHQgaXMgcHJvdmlkZWQgbWFrZSBzdXJlIHRvIGFkZCB0aGUgZGVmYXVsdCBiaW5kaW5nXG5cdFx0aWYgKCFwYXJhbWV0ZXJFeHByZXNzaW9ucy5zb21lKGhhc1JlZmVyZW5jZVRvRGVmYXVsdENvbnRleHQpKSB7XG5cdFx0XHRjb250ZXh0RW50aXR5VHlwZS5rZXlzLmZvckVhY2goKGtleSkgPT4gcGFyYW1ldGVyRXhwcmVzc2lvbnMucHVzaChwYXRoSW5Nb2RlbChrZXkubmFtZSwgXCJcIikpKTtcblx0XHR9XG5cdH1cblx0bGV0IGZ1bmN0aW9uTmFtZSA9IFwiXCI7XG5cdGlmICh0eXBlb2YgZm9ybWF0dGVyRnVuY3Rpb24gPT09IFwic3RyaW5nXCIpIHtcblx0XHRmdW5jdGlvbk5hbWUgPSBmb3JtYXR0ZXJGdW5jdGlvbjtcblx0fSBlbHNlIHtcblx0XHRmdW5jdGlvbk5hbWUgPSBmb3JtYXR0ZXJGdW5jdGlvbi5fX2Z1bmN0aW9uTmFtZTtcblx0fVxuXHQvLyBGb3JtYXR0ZXJOYW1lIGNhbiBiZSBvZiBmb3JtYXQgc2FwLmZlLmNvcmUueHh4I21ldGhvZE5hbWUgdG8gaGF2ZSBtdWx0aXBsZSBmb3JtYXR0ZXIgaW4gb25lIGNsYXNzXG5cdGNvbnN0IFtmb3JtYXR0ZXJDbGFzcywgZm9ybWF0dGVyTmFtZV0gPSBmdW5jdGlvbk5hbWUuc3BsaXQoXCIjXCIpO1xuXG5cdC8vIEluIHNvbWUgY2FzZSB3ZSBhbHNvIGNhbm5vdCBjYWxsIGRpcmVjdGx5IGEgZnVuY3Rpb24gYmVjYXVzZSBvZiB0b28gY29tcGxleCBpbnB1dCwgaW4gdGhhdCBjYXNlIHdlIG5lZWQgdG8gY29udmVydCB0byBhIHNpbXBsZXIgZnVuY3Rpb24gY2FsbFxuXHRpZiAoXG5cdFx0IWlnbm9yZUNvbXBsZXhUeXBlICYmXG5cdFx0KHBhcmFtZXRlckV4cHJlc3Npb25zLnNvbWUoaXNDb21wbGV4VHlwZUV4cHJlc3Npb24pIHx8XG5cdFx0XHRwYXJhbWV0ZXJFeHByZXNzaW9ucy5zb21lKGlzQ29uY2F0RXhwcmVzc2lvbikgfHxcblx0XHRcdHBhcmFtZXRlckV4cHJlc3Npb25zLnNvbWUoaXNJZkVsc2VFeHByZXNzaW9uKSlcblx0KSB7XG5cdFx0bGV0IHBhdGhJZHggPSAwO1xuXHRcdGNvbnN0IG15Rm9ybWF0RXhwcmVzc2lvbiA9IGZvcm1hdFJlc3VsdChwYXJhbWV0ZXJFeHByZXNzaW9ucywgZnVuY3Rpb25OYW1lLCB1bmRlZmluZWQsIHRydWUpO1xuXHRcdGNvbnN0IGFsbFBhcnRzID0gW107XG5cdFx0dHJhbnNmb3JtUmVjdXJzaXZlbHkoXG5cdFx0XHRteUZvcm1hdEV4cHJlc3Npb24sXG5cdFx0XHRcIlBhdGhJbk1vZGVsXCIsXG5cdFx0XHQoY29uc3RhbnRQYXRoOiBQYXRoSW5Nb2RlbEV4cHJlc3Npb248dW5rbm93bj4pID0+IHtcblx0XHRcdFx0YWxsUGFydHMucHVzaChjb25zdGFudFBhdGgpO1xuXHRcdFx0XHRyZXR1cm4gcGF0aEluTW9kZWwoYCQke3BhdGhJZHgrK31gLCBcIiRcIik7XG5cdFx0XHR9LFxuXHRcdFx0dHJ1ZVxuXHRcdCk7XG5cdFx0YWxsUGFydHMudW5zaGlmdChjb25zdGFudChKU09OLnN0cmluZ2lmeShteUZvcm1hdEV4cHJlc3Npb24pKSk7XG5cdFx0cmV0dXJuIGZvcm1hdFJlc3VsdChhbGxQYXJ0cywgXCJzYXAuZmUuY29yZS5mb3JtYXR0ZXJzLlN0YW5kYXJkRm9ybWF0dGVyI2V2YWx1YXRlQ29tcGxleEV4cHJlc3Npb25cIiwgdW5kZWZpbmVkLCB0cnVlKTtcblx0fSBlbHNlIGlmICghIWZvcm1hdHRlck5hbWUgJiYgZm9ybWF0dGVyTmFtZS5sZW5ndGggPiAwKSB7XG5cdFx0cGFyYW1ldGVyRXhwcmVzc2lvbnMudW5zaGlmdChjb25zdGFudChmb3JtYXR0ZXJOYW1lKSk7XG5cdH1cblxuXHRyZXR1cm4ge1xuXHRcdF90eXBlOiBcIkZvcm1hdHRlclwiLFxuXHRcdGZuOiBmb3JtYXR0ZXJDbGFzcyxcblx0XHRwYXJhbWV0ZXJzOiBwYXJhbWV0ZXJFeHByZXNzaW9uc1xuXHR9O1xufVxuXG50eXBlIEJpbmRpbmdDb25zdHJhaW50cyA9IHtcblx0c2NhbGU/OiBudW1iZXI7XG5cdHByZWNpc2lvbj86IG51bWJlcjtcblx0bWF4TGVuZ3RoPzogbnVtYmVyO1xuXHRudWxsYWJsZT86IGJvb2xlYW47XG5cdG1pbmltdW0/OiBzdHJpbmc7XG5cdG1heGltdW0/OiBzdHJpbmc7XG5cdGlzRGlnaXRTZXF1ZW5jZT86IGJvb2xlYW47XG5cdFY0PzogYm9vbGVhbjtcbn07XG5leHBvcnQgZnVuY3Rpb24gc2V0VXBDb25zdHJhaW50cyh0YXJnZXRNYXBwaW5nOiBUeXBlTWFwcGluZ0RlZmluaXRpb24sIHByb3BlcnR5OiBQcm9wZXJ0eSB8IEFjdGlvblBhcmFtZXRlcik6IEJpbmRpbmdDb25zdHJhaW50cyB7XG5cdGNvbnN0IGNvbnN0cmFpbnRzOiBCaW5kaW5nQ29uc3RyYWludHMgPSB7fTtcblx0aWYgKHRhcmdldE1hcHBpbmc/LmNvbnN0cmFpbnRzPy4kU2NhbGUgJiYgcHJvcGVydHkuc2NhbGUgIT09IHVuZGVmaW5lZCkge1xuXHRcdGNvbnN0cmFpbnRzLnNjYWxlID0gcHJvcGVydHkuc2NhbGU7XG5cdH1cblx0aWYgKHRhcmdldE1hcHBpbmc/LmNvbnN0cmFpbnRzPy4kUHJlY2lzaW9uICYmIHByb3BlcnR5LnByZWNpc2lvbiAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0Y29uc3RyYWludHMucHJlY2lzaW9uID0gcHJvcGVydHkucHJlY2lzaW9uO1xuXHR9XG5cdGlmICh0YXJnZXRNYXBwaW5nPy5jb25zdHJhaW50cz8uJE1heExlbmd0aCAmJiBwcm9wZXJ0eS5tYXhMZW5ndGggIT09IHVuZGVmaW5lZCkge1xuXHRcdGNvbnN0cmFpbnRzLm1heExlbmd0aCA9IHByb3BlcnR5Lm1heExlbmd0aDtcblx0fVxuXHRpZiAocHJvcGVydHkubnVsbGFibGUgPT09IGZhbHNlKSB7XG5cdFx0Y29uc3RyYWludHMubnVsbGFibGUgPSBmYWxzZTtcblx0fVxuXHRpZiAodGFyZ2V0TWFwcGluZz8uY29uc3RyYWludHM/LltcIkBPcmcuT0RhdGEuVmFsaWRhdGlvbi5WMS5NaW5pbXVtLyREZWNpbWFsXCJdICYmICFpc05hTihwcm9wZXJ0eS5hbm5vdGF0aW9ucz8uVmFsaWRhdGlvbj8uTWluaW11bSkpIHtcblx0XHRjb25zdHJhaW50cy5taW5pbXVtID0gYCR7cHJvcGVydHkuYW5ub3RhdGlvbnM/LlZhbGlkYXRpb24/Lk1pbmltdW19YDtcblx0fVxuXHRpZiAodGFyZ2V0TWFwcGluZz8uY29uc3RyYWludHM/LltcIkBPcmcuT0RhdGEuVmFsaWRhdGlvbi5WMS5NYXhpbXVtLyREZWNpbWFsXCJdICYmICFpc05hTihwcm9wZXJ0eS5hbm5vdGF0aW9ucz8uVmFsaWRhdGlvbj8uTWF4aW11bSkpIHtcblx0XHRjb25zdHJhaW50cy5tYXhpbXVtID0gYCR7cHJvcGVydHkuYW5ub3RhdGlvbnM/LlZhbGlkYXRpb24/Lk1heGltdW19YDtcblx0fVxuXHRpZiAoXG5cdFx0cHJvcGVydHkuYW5ub3RhdGlvbnM/LkNvbW1vbj8uSXNEaWdpdFNlcXVlbmNlICYmXG5cdFx0dGFyZ2V0TWFwcGluZy50eXBlID09PSBcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLlN0cmluZ1wiICYmXG5cdFx0dGFyZ2V0TWFwcGluZz8uY29uc3RyYWludHM/LltcIkBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuSXNEaWdpdFNlcXVlbmNlXCJdXG5cdCkge1xuXHRcdGNvbnN0cmFpbnRzLmlzRGlnaXRTZXF1ZW5jZSA9IHRydWU7XG5cdH1cblx0aWYgKHRhcmdldE1hcHBpbmc/LmNvbnN0cmFpbnRzPy4kVjQpIHtcblx0XHRjb25zdHJhaW50cy5WNCA9IHRydWU7XG5cdH1cblx0cmV0dXJuIGNvbnN0cmFpbnRzO1xufVxuXG4vKipcbiAqIEdlbmVyYXRlcyB0aGUgYmluZGluZyBleHByZXNzaW9uIGZvciB0aGUgcHJvcGVydHksIGFuZCBzZXRzIHVwIHRoZSBmb3JtYXRPcHRpb25zIGFuZCBjb25zdHJhaW50cy5cbiAqIEBwYXJhbSBwcm9wZXJ0eSBUaGUgUHJvcGVydHkgZm9yIHdoaWNoIHdlIGFyZSBzZXR0aW5nIHVwIHRoZSBiaW5kaW5nXG4gKiBAcGFyYW0gcHJvcGVydHlCaW5kaW5nRXhwcmVzc2lvbiBUaGUgQmluZGluZ0V4cHJlc3Npb24gb2YgdGhlIHByb3BlcnR5IGFib3ZlLiBTZXJ2ZXMgYXMgdGhlIGJhc2lzIHRvIHdoaWNoIGluZm9ybWF0aW9uIGNhbiBiZSBhZGRlZFxuICogQHBhcmFtIGlnbm9yZUNvbnN0cmFpbnRzIElnbm9yZSBjb25zdHJhaW50cyBvZiB0aGUgcHJvcGVydHlcbiAqIEByZXR1cm5zIFRoZSBiaW5kaW5nIGV4cHJlc3Npb24gZm9yIHRoZSBwcm9wZXJ0eSB3aXRoIGZvcm1hdE9wdGlvbnMgYW5kIGNvbnN0cmFpbnRzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXRXaXRoVHlwZUluZm9ybWF0aW9uPFQ+KFxuXHRwcm9wZXJ0eTogUHJvcGVydHkgfCBBY3Rpb25QYXJhbWV0ZXIsXG5cdHByb3BlcnR5QmluZGluZ0V4cHJlc3Npb246IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxzdHJpbmc+LFxuXHRpZ25vcmVDb25zdHJhaW50cyA9IGZhbHNlXG4pOiBQYXRoSW5Nb2RlbEV4cHJlc3Npb248VD4ge1xuXHRjb25zdCBvdXRFeHByZXNzaW9uOiBQYXRoSW5Nb2RlbEV4cHJlc3Npb248dW5rbm93bj4gPSBwcm9wZXJ0eUJpbmRpbmdFeHByZXNzaW9uIGFzIFBhdGhJbk1vZGVsRXhwcmVzc2lvbjx1bmtub3duPjtcblx0aWYgKHByb3BlcnR5Ll90eXBlICE9PSBcIlByb3BlcnR5XCIgJiYgcHJvcGVydHkuX3R5cGUgIT09IFwiQWN0aW9uUGFyYW1ldGVyXCIpIHtcblx0XHRyZXR1cm4gb3V0RXhwcmVzc2lvbjtcblx0fVxuXHRjb25zdCB0YXJnZXRNYXBwaW5nID0gRURNX1RZUEVfTUFQUElOR1twcm9wZXJ0eS50eXBlXTtcblx0aWYgKCF0YXJnZXRNYXBwaW5nKSB7XG5cdFx0cmV0dXJuIG91dEV4cHJlc3Npb247XG5cdH1cblx0aWYgKCFvdXRFeHByZXNzaW9uLmZvcm1hdE9wdGlvbnMpIHtcblx0XHRvdXRFeHByZXNzaW9uLmZvcm1hdE9wdGlvbnMgPSB7fTtcblx0fVxuXHRvdXRFeHByZXNzaW9uLmNvbnN0cmFpbnRzID0ge307XG5cblx0b3V0RXhwcmVzc2lvbi50eXBlID0gdGFyZ2V0TWFwcGluZy50eXBlO1xuXHRpZiAoIWlnbm9yZUNvbnN0cmFpbnRzKSB7XG5cdFx0b3V0RXhwcmVzc2lvbi5jb25zdHJhaW50cyA9IHNldFVwQ29uc3RyYWludHModGFyZ2V0TWFwcGluZywgcHJvcGVydHkpO1xuXHR9XG5cblx0aWYgKFxuXHRcdChvdXRFeHByZXNzaW9uPy50eXBlPy5pbmRleE9mKFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuSW50XCIpID09PSAwICYmIG91dEV4cHJlc3Npb24/LnR5cGUgIT09IFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuSW50NjRcIikgfHxcblx0XHRvdXRFeHByZXNzaW9uPy50eXBlID09PSBcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLkRvdWJsZVwiXG5cdCkge1xuXHRcdG91dEV4cHJlc3Npb24uZm9ybWF0T3B0aW9ucyA9IE9iamVjdC5hc3NpZ24ob3V0RXhwcmVzc2lvbi5mb3JtYXRPcHRpb25zLCB7XG5cdFx0XHRwYXJzZUFzU3RyaW5nOiBmYWxzZVxuXHRcdH0pO1xuXHR9XG5cdGlmIChvdXRFeHByZXNzaW9uLnR5cGUgPT09IFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuU3RyaW5nXCIgJiYgaXNQcm9wZXJ0eShwcm9wZXJ0eSkpIHtcblx0XHRpZiAob3V0RXhwcmVzc2lvbi5jb25zdHJhaW50cz8uaXNEaWdpdFNlcXVlbmNlIHx8IChvdXRFeHByZXNzaW9uLmNvbnN0cmFpbnRzPy5udWxsYWJsZSAhPT0gZmFsc2UgJiYgcHJvcGVydHkubnVsbGFibGUgPT09IHRydWUpKSB7XG5cdFx0XHRvdXRFeHByZXNzaW9uLmZvcm1hdE9wdGlvbnMucGFyc2VLZWVwc0VtcHR5U3RyaW5nID0gZmFsc2U7XG5cdFx0fSBlbHNlIHtcblx0XHRcdG91dEV4cHJlc3Npb24uZm9ybWF0T3B0aW9ucy5wYXJzZUtlZXBzRW1wdHlTdHJpbmcgPSB0cnVlO1xuXHRcdH1cblx0XHRjb25zdCBmaXNjYWxUeXBlID0gZ2V0RmlzY2FsVHlwZShwcm9wZXJ0eSk7XG5cdFx0aWYgKGZpc2NhbFR5cGUpIHtcblx0XHRcdG91dEV4cHJlc3Npb24uZm9ybWF0T3B0aW9ucy5maXNjYWxUeXBlID0gZmlzY2FsVHlwZTtcblx0XHRcdG91dEV4cHJlc3Npb24udHlwZSA9IFwic2FwLmZlLmNvcmUudHlwZS5GaXNjYWxEYXRlXCI7XG5cdFx0fVxuXHR9XG5cdGNvbnN0IHR5cGVzU3VwcG9ydGluZ1BhcnNlRW1wdHlWYWx1ZVRvWmVybyA9IFtcblx0XHRcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLkludDE2XCIsXG5cdFx0XCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5JbnQzMlwiLFxuXHRcdFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuSW50NjRcIixcblx0XHRcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLlNpbmdsZVwiLFxuXHRcdFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuRG91YmxlXCIsXG5cdFx0XCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5EZWNpbWFsXCIsXG5cdFx0XCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5CeXRlXCIsXG5cdFx0XCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5TQnl0ZVwiXG5cdF07XG5cdGlmIChcblx0XHRvdXRFeHByZXNzaW9uLmNvbnN0cmFpbnRzPy5udWxsYWJsZSA9PT0gZmFsc2UgJiZcblx0XHRvdXRFeHByZXNzaW9uLnR5cGUgJiZcblx0XHR0eXBlc1N1cHBvcnRpbmdQYXJzZUVtcHR5VmFsdWVUb1plcm8uaW5jbHVkZXMob3V0RXhwcmVzc2lvbi50eXBlKVxuXHQpIHtcblx0XHRvdXRFeHByZXNzaW9uLmZvcm1hdE9wdGlvbnMgPSBPYmplY3QuYXNzaWduKG91dEV4cHJlc3Npb24uZm9ybWF0T3B0aW9ucywge1xuXHRcdFx0cGFyc2VFbXB0eVZhbHVlVG9aZXJvOiB0cnVlXG5cdFx0fSk7XG5cdH1cblx0aWYgKFxuXHRcdG91dEV4cHJlc3Npb24uY29uc3RyYWludHM/Lm51bGxhYmxlICE9PSBmYWxzZSAmJlxuXHRcdChvdXRFeHByZXNzaW9uLnR5cGUgPT09IFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuSW50NjRcIiB8fCBvdXRFeHByZXNzaW9uLnR5cGUgPT09IFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuRGVjaW1hbFwiKVxuXHQpIHtcblx0XHRvdXRFeHByZXNzaW9uLmZvcm1hdE9wdGlvbnMgPSBPYmplY3QuYXNzaWduKG91dEV4cHJlc3Npb24uZm9ybWF0T3B0aW9ucywge1xuXHRcdFx0ZW1wdHlTdHJpbmc6IFwiXCJcblx0XHR9KTtcblx0fVxuXG5cdHJldHVybiBvdXRFeHByZXNzaW9uO1xufVxuXG5leHBvcnQgY29uc3QgZ2V0RmlzY2FsVHlwZSA9IGZ1bmN0aW9uIChwcm9wZXJ0eTogUHJvcGVydHkpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRpZiAocHJvcGVydHkuYW5ub3RhdGlvbnM/LkNvbW1vbj8uSXNGaXNjYWxZZWFyKSB7XG5cdFx0cmV0dXJuIENvbW1vbkFubm90YXRpb25UZXJtcy5Jc0Zpc2NhbFllYXI7XG5cdH1cblx0aWYgKHByb3BlcnR5LmFubm90YXRpb25zPy5Db21tb24/LklzRmlzY2FsUGVyaW9kKSB7XG5cdFx0cmV0dXJuIENvbW1vbkFubm90YXRpb25UZXJtcy5Jc0Zpc2NhbFBlcmlvZDtcblx0fVxuXHRpZiAocHJvcGVydHkuYW5ub3RhdGlvbnM/LkNvbW1vbj8uSXNGaXNjYWxZZWFyUGVyaW9kKSB7XG5cdFx0cmV0dXJuIENvbW1vbkFubm90YXRpb25UZXJtcy5Jc0Zpc2NhbFllYXJQZXJpb2Q7XG5cdH1cblx0aWYgKHByb3BlcnR5LmFubm90YXRpb25zPy5Db21tb24/LklzRmlzY2FsUXVhcnRlcikge1xuXHRcdHJldHVybiBDb21tb25Bbm5vdGF0aW9uVGVybXMuSXNGaXNjYWxRdWFydGVyO1xuXHR9XG5cdGlmIChwcm9wZXJ0eS5hbm5vdGF0aW9ucz8uQ29tbW9uPy5Jc0Zpc2NhbFllYXJRdWFydGVyKSB7XG5cdFx0cmV0dXJuIENvbW1vbkFubm90YXRpb25UZXJtcy5Jc0Zpc2NhbFllYXJRdWFydGVyO1xuXHR9XG5cdGlmIChwcm9wZXJ0eS5hbm5vdGF0aW9ucz8uQ29tbW9uPy5Jc0Zpc2NhbFdlZWspIHtcblx0XHRyZXR1cm4gQ29tbW9uQW5ub3RhdGlvblRlcm1zLklzRmlzY2FsV2Vlaztcblx0fVxuXHRpZiAocHJvcGVydHkuYW5ub3RhdGlvbnM/LkNvbW1vbj8uSXNGaXNjYWxZZWFyV2Vlaykge1xuXHRcdHJldHVybiBDb21tb25Bbm5vdGF0aW9uVGVybXMuSXNGaXNjYWxZZWFyV2Vlaztcblx0fVxuXHRpZiAocHJvcGVydHkuYW5ub3RhdGlvbnM/LkNvbW1vbj8uSXNEYXlPZkZpc2NhbFllYXIpIHtcblx0XHRyZXR1cm4gQ29tbW9uQW5ub3RhdGlvblRlcm1zLklzRGF5T2ZGaXNjYWxZZWFyO1xuXHR9XG59O1xuXG4vKipcbiAqIENhbGxzIGEgY29tcGxleCB0eXBlIHRvIHByb2Nlc3MgdGhlIHBhcmFtZXRlcnMuXG4gKiBJZiByZXF1aXJlQ29udGV4dCBpcyBzZXQgdG8gdHJ1ZSBhbmQgbm8gY29udGV4dCBpcyBwYXNzZWQsIGEgZGVmYXVsdCBjb250ZXh0IHdpbGwgYmUgYWRkZWQgYXV0b21hdGljYWxseS5cbiAqIEB0ZW1wbGF0ZSBUXG4gKiBAdGVtcGxhdGUgVVxuICogQHBhcmFtIHBhcmFtZXRlcnMgVGhlIGxpc3Qgb2YgcGFyYW1ldGVycyB0aGF0IHNob3VsZCBtYXRjaCB0aGUgdHlwZSBmb3IgdGhlIGNvbXBsZXggdHlwZT1cbiAqIEBwYXJhbSB0eXBlIFRoZSBjb21wbGV4IHR5cGUgdG8gdXNlXG4gKiBAcGFyYW0gW2NvbnRleHRFbnRpdHlUeXBlXSBUaGUgY29udGV4dCBlbnRpdHkgdHlwZSB0byBjb25zaWRlclxuICogQHBhcmFtIG9Gb3JtYXRPcHRpb25zXG4gKiBAcGFyYW0gb0NvbnN0cmFpbnRPcHRpb25zXG4gKiBAcmV0dXJucyBUaGUgY29ycmVzcG9uZGluZyBleHByZXNzaW9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhZGRUeXBlSW5mb3JtYXRpb248VCwgVSBleHRlbmRzIEZuPFQ+Pihcblx0cGFyYW1ldGVyczogV3JhcHBlZFR1cGxlPFBhcmFtZXRlcnM8VT4+LFxuXHR0eXBlOiBzdHJpbmcsXG5cdGNvbnRleHRFbnRpdHlUeXBlPzogRW50aXR5VHlwZSxcblx0b0Zvcm1hdE9wdGlvbnM/OiBDb21wbGV4VHlwZUZvcm1hdE9wdGlvbnMsXG5cdG9Db25zdHJhaW50T3B0aW9ucz86IENvbXBsZXhUeXBlQ29uc3RyYWludE9wdGlvbnNcbik6IFVucmVzb2x2YWJsZVBhdGhFeHByZXNzaW9uIHwgQ29tcGxleFR5cGVFeHByZXNzaW9uPFQ+IHwgQ29uc3RhbnRFeHByZXNzaW9uPFQ+IHtcblx0Y29uc3QgcGFyYW1ldGVyRXhwcmVzc2lvbnMgPSAocGFyYW1ldGVycyBhcyBFeHByZXNzaW9uT3JQcmltaXRpdmU8UHJpbWl0aXZlVHlwZT5bXSkubWFwKHdyYXBQcmltaXRpdmUpO1xuXHRpZiAoaGFzVW5yZXNvbHZhYmxlRXhwcmVzc2lvbiguLi5wYXJhbWV0ZXJFeHByZXNzaW9ucykpIHtcblx0XHRyZXR1cm4gdW5yZXNvbHZhYmxlRXhwcmVzc2lvbjtcblx0fVxuXHQvLyBJZiB0aGVyZSBpcyBvbmx5IG9uZSBwYXJhbWV0ZXIgYW5kIGl0IGlzIGEgY29uc3RhbnQgYW5kIHdlIGRvbid0IGV4cGVjdCB0aGUgY29udGV4dCB0aGVuIHJldHVybiB0aGUgY29uc3RhbnRcblx0aWYgKHBhcmFtZXRlckV4cHJlc3Npb25zLmxlbmd0aCA9PT0gMSAmJiBpc0NvbnN0YW50KHBhcmFtZXRlckV4cHJlc3Npb25zWzBdKSAmJiAhY29udGV4dEVudGl0eVR5cGUpIHtcblx0XHRyZXR1cm4gcGFyYW1ldGVyRXhwcmVzc2lvbnNbMF0gYXMgQ29uc3RhbnRFeHByZXNzaW9uPFQ+O1xuXHR9IGVsc2UgaWYgKGNvbnRleHRFbnRpdHlUeXBlKSB7XG5cdFx0Ly8gT3RoZXJ3aXNlLCBpZiB0aGUgY29udGV4dCBpcyByZXF1aXJlZCBhbmQgbm8gY29udGV4dCBpcyBwcm92aWRlZCBtYWtlIHN1cmUgdG8gYWRkIHRoZSBkZWZhdWx0IGJpbmRpbmdcblx0XHRpZiAoIXBhcmFtZXRlckV4cHJlc3Npb25zLnNvbWUoaGFzUmVmZXJlbmNlVG9EZWZhdWx0Q29udGV4dCkpIHtcblx0XHRcdGNvbnRleHRFbnRpdHlUeXBlLmtleXMuZm9yRWFjaCgoa2V5KSA9PiBwYXJhbWV0ZXJFeHByZXNzaW9ucy5wdXNoKHBhdGhJbk1vZGVsKGtleS5uYW1lLCBcIlwiKSkpO1xuXHRcdH1cblx0fVxuXHRvRm9ybWF0T3B0aW9ucyA9IF9nZXRDb21wbGV4VHlwZUZvcm1hdE9wdGlvbnNGcm9tRmlyc3RQYXJhbShwYXJhbWV0ZXJzWzBdLCBvRm9ybWF0T3B0aW9ucyk7XG5cblx0aWYgKHR5cGUgPT09IFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuVW5pdFwiKSB7XG5cdFx0Y29uc3QgdW9tUGF0aCA9IHBhdGhJbk1vZGVsKFwiLyMjQEByZXF1ZXN0VW5pdHNPZk1lYXN1cmVcIik7XG5cdFx0dW9tUGF0aC50YXJnZXRUeXBlID0gXCJhbnlcIjtcblx0XHR1b21QYXRoLm1vZGUgPSBcIk9uZVRpbWVcIjtcblx0XHRvRm9ybWF0T3B0aW9ucyA/Pz0ge307XG5cdFx0b0Zvcm1hdE9wdGlvbnMucHJlc2VydmVEZWNpbWFscyA9IG9Db25zdHJhaW50T3B0aW9ucz8uc2tpcERlY2ltYWxzVmFsaWRhdGlvbiA/PyBmYWxzZTtcblx0XHRwYXJhbWV0ZXJFeHByZXNzaW9ucy5wdXNoKHVvbVBhdGgpO1xuXHR9IGVsc2UgaWYgKHR5cGUgPT09IFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuQ3VycmVuY3lcIikge1xuXHRcdGNvbnN0IGN1cnJlbmN5UGF0aCA9IHBhdGhJbk1vZGVsKFwiLyMjQEByZXF1ZXN0Q3VycmVuY3lDb2Rlc1wiKTtcblx0XHRjdXJyZW5jeVBhdGgudGFyZ2V0VHlwZSA9IFwiYW55XCI7XG5cdFx0Y3VycmVuY3lQYXRoLm1vZGUgPSBcIk9uZVRpbWVcIjtcblx0XHRvRm9ybWF0T3B0aW9ucyA/Pz0ge307XG5cdFx0b0Zvcm1hdE9wdGlvbnMucHJlc2VydmVEZWNpbWFscyA9IGZhbHNlOyAvLyBkZWZhdWx0IHZhbHVlIHNpbmNlIHdlIGRvbid0IGhhdmUgYSBDTERSXG5cdFx0cGFyYW1ldGVyRXhwcmVzc2lvbnMucHVzaChjdXJyZW5jeVBhdGgpO1xuXHR9XG5cblx0cmV0dXJuIHtcblx0XHRfdHlwZTogXCJDb21wbGV4VHlwZVwiLFxuXHRcdHR5cGU6IHR5cGUsXG5cdFx0Zm9ybWF0T3B0aW9uczogb0Zvcm1hdE9wdGlvbnMgfHwge30sXG5cdFx0Y29uc3RyYWludHM6IG9Db25zdHJhaW50T3B0aW9ucyB8fCB7fSxcblx0XHRwYXJhbWV0ZXJzOiB7fSxcblx0XHRiaW5kaW5nUGFyYW1ldGVyczogcGFyYW1ldGVyRXhwcmVzc2lvbnNcblx0fTtcbn1cblxudHlwZSBDb21wbGV4VHlwZUZvcm1hdE9wdGlvbnMgPSB7XG5cdHNob3dOdW1iZXI/OiBib29sZWFuO1xuXHRzaG93TWVhc3VyZT86IGJvb2xlYW47XG5cdHBhcnNlQXNTdHJpbmc/OiBib29sZWFuO1xuXHRwYXJzZUtlZXBzRW1wdHlTdHJpbmc/OiBib29sZWFuO1xuXHRlbXB0eVN0cmluZz86IHN0cmluZyB8IG51bWJlciB8IG51bGw7XG5cdHNob3dUaW1lPzogYm9vbGVhbjtcblx0c2hvd0RhdGU/OiBib29sZWFuO1xuXHRzaG93VGltZXpvbmU/OiBib29sZWFuO1xuXHRwcmVzZXJ2ZURlY2ltYWxzPzogYm9vbGVhbjtcblx0ZGVjaW1hbFBhZGRpbmc/OiBudW1iZXI7XG59O1xuXG5leHBvcnQgdHlwZSBDb21wbGV4VHlwZUNvbnN0cmFpbnRPcHRpb25zID0ge1xuXHRza2lwRGVjaW1hbHNWYWxpZGF0aW9uPzogYm9vbGVhbjtcbn07XG5cbi8qKlxuICogUHJvY2VzcyB0aGUgZm9ybWF0T3B0aW9ucyBmb3IgYSBjb21wbGV4VHlwZSBiYXNlZCBvbiB0aGUgZmlyc3QgcGFyYW1ldGVyLlxuICogQHBhcmFtIHBhcmFtIFRoZSBmaXJzdCBwYXJhbWV0ZXIgb2YgdGhlIGNvbXBsZXggdHlwZVxuICogQHBhcmFtIGZvcm1hdE9wdGlvbnMgSW5pdGlhbCBmb3JtYXRPcHRpb25zXG4gKiBAcmV0dXJucyBUaGUgbW9kaWZpZWQgZm9ybWF0T3B0aW9uc1xuICovXG5mdW5jdGlvbiBfZ2V0Q29tcGxleFR5cGVGb3JtYXRPcHRpb25zRnJvbUZpcnN0UGFyYW08VCwgVSBleHRlbmRzIEZuPFQ+Pihcblx0cGFyYW06IFBhcmFtZXRlcnM8VT4sXG5cdGZvcm1hdE9wdGlvbnM6IHVuZGVmaW5lZCB8IENvbXBsZXhUeXBlRm9ybWF0T3B0aW9uc1xuKTogQ29tcGxleFR5cGVGb3JtYXRPcHRpb25zIHwgdW5kZWZpbmVkIHtcblx0Ly8gaWYgc2hvd01lYXN1cmUgaXMgc2V0IHRvIGZhbHNlIHdlIHdhbnQgdG8gbm90IHBhcnNlIGFzIHN0cmluZyB0byBzZWUgdGhlIDBcblx0Ly8gd2UgZG8gdGhhdCBhbHNvIGZvciBhbGwgYmluZGluZ3MgYmVjYXVzZSBvdGhlcndpc2UgdGhlIG1kYyBGaWVsZCBpc24ndCBlZGl0YWJsZVxuXHRpZiAoXG5cdFx0IShmb3JtYXRPcHRpb25zICYmIGZvcm1hdE9wdGlvbnMuc2hvd051bWJlciA9PT0gZmFsc2UpICYmXG5cdFx0KHBhcmFtPy50eXBlPy5pbmRleE9mKFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuSW50XCIpID09PSAwIHx8XG5cdFx0XHRwYXJhbT8udHlwZSA9PT0gXCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5EZWNpbWFsXCIgfHxcblx0XHRcdHBhcmFtPy50eXBlID09PSBcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLkRvdWJsZVwiKVxuXHQpIHtcblx0XHRpZiAocGFyYW0/LnR5cGUgPT09IFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuSW50NjRcIiB8fCBwYXJhbT8udHlwZSA9PT0gXCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5EZWNpbWFsXCIpIHtcblx0XHRcdC8vc2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuSW50NjQgZG8gbm90IHN1cHBvcnQgcGFyc2VBc1N0cmluZyBmYWxzZVxuXHRcdFx0Zm9ybWF0T3B0aW9ucyA9XG5cdFx0XHRcdGZvcm1hdE9wdGlvbnM/LnNob3dNZWFzdXJlID09PSBmYWxzZVxuXHRcdFx0XHRcdD8geyBzaG93TWVhc3VyZTogZmFsc2UsIGRlY2ltYWxQYWRkaW5nOiBmb3JtYXRPcHRpb25zLmRlY2ltYWxQYWRkaW5nLCBlbXB0eVN0cmluZzogZm9ybWF0T3B0aW9ucz8uZW1wdHlTdHJpbmcgfVxuXHRcdFx0XHRcdDogeyBkZWNpbWFsUGFkZGluZzogZm9ybWF0T3B0aW9ucz8uZGVjaW1hbFBhZGRpbmcsIGVtcHR5U3RyaW5nOiBmb3JtYXRPcHRpb25zPy5lbXB0eVN0cmluZyB9O1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRmb3JtYXRPcHRpb25zID1cblx0XHRcdFx0Zm9ybWF0T3B0aW9ucz8uc2hvd01lYXN1cmUgPT09IGZhbHNlXG5cdFx0XHRcdFx0PyB7XG5cdFx0XHRcdFx0XHRcdHBhcnNlQXNTdHJpbmc6IGZhbHNlLFxuXHRcdFx0XHRcdFx0XHRzaG93TWVhc3VyZTogZmFsc2UsXG5cdFx0XHRcdFx0XHRcdGRlY2ltYWxQYWRkaW5nOiBmb3JtYXRPcHRpb25zLmRlY2ltYWxQYWRkaW5nLFxuXHRcdFx0XHRcdFx0XHRlbXB0eVN0cmluZzogZm9ybWF0T3B0aW9ucz8uZW1wdHlTdHJpbmdcblx0XHRcdFx0XHQgIH1cblx0XHRcdFx0XHQ6IHsgcGFyc2VBc1N0cmluZzogZmFsc2UsIGRlY2ltYWxQYWRkaW5nOiBmb3JtYXRPcHRpb25zPy5kZWNpbWFsUGFkZGluZywgZW1wdHlTdHJpbmc6IGZvcm1hdE9wdGlvbnM/LmVtcHR5U3RyaW5nIH07XG5cdFx0fVxuXHRcdGlmIChwYXJhbT8uY29uc3RyYWludHM/Lm51bGxhYmxlICE9PSBmYWxzZSkge1xuXHRcdFx0Zm9ybWF0T3B0aW9ucy5lbXB0eVN0cmluZyA9IG51bGw7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGZvcm1hdE9wdGlvbnMuZW1wdHlTdHJpbmcgPz89IDA7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBmb3JtYXRPcHRpb25zO1xufVxuLyoqXG4gKiBGdW5jdGlvbiBjYWxsLCBvcHRpb25hbGx5IHdpdGggYXJndW1lbnRzLlxuICogQHBhcmFtIGZ1bmMgRnVuY3Rpb24gbmFtZSBvciByZWZlcmVuY2UgdG8gZnVuY3Rpb25cbiAqIEBwYXJhbSBwYXJhbWV0ZXJzIEFyZ3VtZW50c1xuICogQHBhcmFtIG9uIE9iamVjdCB0byBjYWxsIHRoZSBmdW5jdGlvbiBvblxuICogQHBhcmFtIGlzRm9ybWF0dGluZ0ZuXG4gKiBAcmV0dXJucyBFeHByZXNzaW9uIHJlcHJlc2VudGluZyB0aGUgZnVuY3Rpb24gY2FsbCAobm90IHRoZSByZXN1bHQgb2YgdGhlIGZ1bmN0aW9uIGNhbGwhKVxuICovXG5leHBvcnQgZnVuY3Rpb24gZm48VCwgVSBleHRlbmRzIEZ1bmN0aW9uT3JOYW1lPFQ+Pihcblx0ZnVuYzogVSxcblx0cGFyYW1ldGVyczogV3JhcHBlZFR1cGxlPEZ1bmN0aW9uUGFyYW1ldGVyczxULCBVPj4sXG5cdG9uPzogRXhwcmVzc2lvbk9yUHJpbWl0aXZlPG9iamVjdD4sXG5cdGlzRm9ybWF0dGluZ0ZuID0gZmFsc2Vcbik6IEZ1bmN0aW9uRXhwcmVzc2lvbjxUPiB7XG5cdGNvbnN0IGZ1bmN0aW9uTmFtZSA9IHR5cGVvZiBmdW5jID09PSBcInN0cmluZ1wiID8gZnVuYyA6IGZ1bmMuX19mdW5jdGlvbk5hbWU7XG5cdHJldHVybiB7XG5cdFx0X3R5cGU6IFwiRnVuY3Rpb25cIixcblx0XHRvYmo6IG9uICE9PSB1bmRlZmluZWQgPyB3cmFwUHJpbWl0aXZlKG9uKSA6IHVuZGVmaW5lZCxcblx0XHRmbjogZnVuY3Rpb25OYW1lLFxuXHRcdGlzRm9ybWF0dGluZ0ZuOiBpc0Zvcm1hdHRpbmdGbixcblx0XHRwYXJhbWV0ZXJzOiAocGFyYW1ldGVycyBhcyBFeHByZXNzaW9uT3JQcmltaXRpdmU8UHJpbWl0aXZlVHlwZT5bXSkubWFwKHdyYXBQcmltaXRpdmUpXG5cdH07XG59XG5cbi8qKlxuICogU2hvcnRjdXQgZnVuY3Rpb24gdG8gZGV0ZXJtaW5lIGlmIGEgYmluZGluZyB2YWx1ZSBpcyBudWxsLCB1bmRlZmluZWQgb3IgZW1wdHkuXG4gKiBAcGFyYW0gZXhwcmVzc2lvblxuICogQHJldHVybnMgQSBCb29sZWFuIGV4cHJlc3Npb24gZXZhbHVhdGluZyB0aGUgZmFjdCB0aGF0IHRoZSBjdXJyZW50IGVsZW1lbnQgaXMgZW1wdHlcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzRW1wdHkoZXhwcmVzc2lvbjogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHN0cmluZz4pOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4ge1xuXHRjb25zdCBhQmluZGluZ3M6IEV4cHJlc3Npb25PclByaW1pdGl2ZTxib29sZWFuPltdID0gW107XG5cdHRyYW5zZm9ybVJlY3Vyc2l2ZWx5KGV4cHJlc3Npb24sIFwiUGF0aEluTW9kZWxcIiwgKGV4cHIpID0+IHtcblx0XHRjb25zdCBmaW5hbEV4cHJlc3Npb24gPSB7IC4uLmV4cHIsIGFsd2F5c0tlZXBUYXJnZXRUeXBlOiB0cnVlIH0gYXMgUGF0aEluTW9kZWxFeHByZXNzaW9uPHN0cmluZz47XG5cdFx0YUJpbmRpbmdzLnB1c2gob3IoZXF1YWwoZmluYWxFeHByZXNzaW9uLCBcIlwiKSwgZXF1YWwoZXhwciwgdW5kZWZpbmVkKSwgZXF1YWwoZXhwciwgbnVsbCkpKTtcblx0XHRyZXR1cm4gZXhwcjtcblx0fSk7XG5cdHJldHVybiBhbmQoLi4uYUJpbmRpbmdzKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbmNhdCguLi5pbkV4cHJlc3Npb25zOiBFeHByZXNzaW9uT3JQcmltaXRpdmU8c3RyaW5nPltdKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHN0cmluZz4ge1xuXHRjb25zdCBleHByZXNzaW9ucyA9IGluRXhwcmVzc2lvbnMubWFwKHdyYXBQcmltaXRpdmUpO1xuXHRpZiAoaGFzVW5yZXNvbHZhYmxlRXhwcmVzc2lvbiguLi5leHByZXNzaW9ucykpIHtcblx0XHRyZXR1cm4gdW5yZXNvbHZhYmxlRXhwcmVzc2lvbjtcblx0fVxuXHRpZiAoZXhwcmVzc2lvbnMuZXZlcnkoaXNDb25zdGFudCkpIHtcblx0XHRyZXR1cm4gY29uc3RhbnQoXG5cdFx0XHRleHByZXNzaW9ucy5yZWR1Y2UoKGNvbmNhdGVuYXRlZDogc3RyaW5nLCB2YWx1ZSkgPT4ge1xuXHRcdFx0XHRpZiAodmFsdWUudmFsdWUgIT09IHVuZGVmaW5lZCAmJiB2YWx1ZS52YWx1ZSAhPT0gbnVsbCkge1xuXHRcdFx0XHRcdHJldHVybiBjb25jYXRlbmF0ZWQgKyB2YWx1ZS52YWx1ZS50b1N0cmluZygpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBjb25jYXRlbmF0ZWQ7XG5cdFx0XHR9LCBcIlwiKVxuXHRcdCk7XG5cdH0gZWxzZSBpZiAoZXhwcmVzc2lvbnMuc29tZShpc0NvbXBsZXhUeXBlRXhwcmVzc2lvbikpIHtcblx0XHRsZXQgcGF0aElkeCA9IDA7XG5cdFx0Y29uc3QgbXlDb25jYXRFeHByZXNzaW9uID0gZm9ybWF0UmVzdWx0KGV4cHJlc3Npb25zLCBcInNhcC5mZS5jb3JlLmZvcm1hdHRlcnMuU3RhbmRhcmRGb3JtYXR0ZXIjY29uY2F0XCIsIHVuZGVmaW5lZCwgdHJ1ZSk7XG5cdFx0Y29uc3QgYWxsUGFydHMgPSBbXTtcblx0XHR0cmFuc2Zvcm1SZWN1cnNpdmVseShteUNvbmNhdEV4cHJlc3Npb24sIFwiUGF0aEluTW9kZWxcIiwgKGNvbnN0YW50UGF0aDogUGF0aEluTW9kZWxFeHByZXNzaW9uPHVua25vd24+KSA9PiB7XG5cdFx0XHRhbGxQYXJ0cy5wdXNoKGNvbnN0YW50UGF0aCk7XG5cdFx0XHRyZXR1cm4gcGF0aEluTW9kZWwoYCQke3BhdGhJZHgrK31gLCBcIiRcIik7XG5cdFx0fSk7XG5cdFx0YWxsUGFydHMudW5zaGlmdChjb25zdGFudChKU09OLnN0cmluZ2lmeShteUNvbmNhdEV4cHJlc3Npb24pKSk7XG5cdFx0cmV0dXJuIGZvcm1hdFJlc3VsdChhbGxQYXJ0cywgXCJzYXAuZmUuY29yZS5mb3JtYXR0ZXJzLlN0YW5kYXJkRm9ybWF0dGVyI2V2YWx1YXRlQ29tcGxleEV4cHJlc3Npb25cIiwgdW5kZWZpbmVkLCB0cnVlKTtcblx0fVxuXHRyZXR1cm4ge1xuXHRcdF90eXBlOiBcIkNvbmNhdFwiLFxuXHRcdGV4cHJlc3Npb25zOiBleHByZXNzaW9uc1xuXHR9O1xufVxuXG50eXBlIEV4cHJlc3Npb25UeXBlVG9FeHByZXNzaW9uPFQgZXh0ZW5kcyBFeHByZXNzaW9uVHlwZSwgVj4gPSBUIGV4dGVuZHMgXCJDb25zdGFudFwiXG5cdD8gQ29uc3RhbnRFeHByZXNzaW9uPFY+XG5cdDogVCBleHRlbmRzIFwiUGF0aEluTW9kZWxcIlxuXHQ/IFBhdGhJbk1vZGVsRXhwcmVzc2lvbjxWPlxuXHQ6IFQgZXh0ZW5kcyBcIkZ1bmN0aW9uXCJcblx0PyBGdW5jdGlvbkV4cHJlc3Npb248Vj5cblx0OiBUIGV4dGVuZHMgXCJVbnJlc29sdmFibGVcIlxuXHQ/IFVucmVzb2x2YWJsZVBhdGhFeHByZXNzaW9uXG5cdDogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFY+O1xuXG5leHBvcnQgdHlwZSBUcmFuc2Zvcm1GdW5jdGlvbjxULCBWPiA9IChleHByZXNzaW9uUGFydDogVCkgPT4gQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFY+O1xuZXhwb3J0IHR5cGUgRXhwcmVzc2lvblR5cGUgPSBQaWNrPEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjx1bmtub3duPiwgXCJfdHlwZVwiPltcIl90eXBlXCJdO1xuZXhwb3J0IGZ1bmN0aW9uIHRyYW5zZm9ybVJlY3Vyc2l2ZWx5PFQgZXh0ZW5kcyBQcmltaXRpdmVUeXBlIHwgdW5rbm93biwgRVQgZXh0ZW5kcyBFeHByZXNzaW9uVHlwZT4oXG5cdGluRXhwcmVzc2lvbjogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFQ+LFxuXHRleHByZXNzaW9uVHlwZTogRVQsXG5cdHRyYW5zZm9ybUZ1bmN0aW9uOiBUcmFuc2Zvcm1GdW5jdGlvbjxFeHByZXNzaW9uVHlwZVRvRXhwcmVzc2lvbjxFVCwgVD4sIFQ+LFxuXHRpbmNsdWRlQWxsRXhwcmVzc2lvbiA9IGZhbHNlXG4pOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248VD4ge1xuXHRsZXQgZXhwcmVzc2lvbjogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFQ+ID0gaW5FeHByZXNzaW9uO1xuXHRzd2l0Y2ggKGV4cHJlc3Npb24uX3R5cGUpIHtcblx0XHRjYXNlIFwiRnVuY3Rpb25cIjpcblx0XHRjYXNlIFwiRm9ybWF0dGVyXCI6XG5cdFx0XHRleHByZXNzaW9uLnBhcmFtZXRlcnMgPSBleHByZXNzaW9uLnBhcmFtZXRlcnMubWFwKChwYXJhbWV0ZXIpID0+XG5cdFx0XHRcdHRyYW5zZm9ybVJlY3Vyc2l2ZWx5KHBhcmFtZXRlciBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248VD4sIGV4cHJlc3Npb25UeXBlLCB0cmFuc2Zvcm1GdW5jdGlvbiwgaW5jbHVkZUFsbEV4cHJlc3Npb24pXG5cdFx0XHQpO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBcIkNvbmNhdFwiOlxuXHRcdFx0ZXhwcmVzc2lvbi5leHByZXNzaW9ucyA9IGV4cHJlc3Npb24uZXhwcmVzc2lvbnMubWFwKChzdWJFeHByZXNzaW9uKSA9PlxuXHRcdFx0XHR0cmFuc2Zvcm1SZWN1cnNpdmVseShcblx0XHRcdFx0XHRzdWJFeHByZXNzaW9uLFxuXHRcdFx0XHRcdGV4cHJlc3Npb25UeXBlLFxuXHRcdFx0XHRcdHRyYW5zZm9ybUZ1bmN0aW9uIGFzIHVua25vd24gYXMgVHJhbnNmb3JtRnVuY3Rpb248RXhwcmVzc2lvblR5cGVUb0V4cHJlc3Npb248RVQsIHN0cmluZz4sIHN0cmluZz4sXG5cdFx0XHRcdFx0aW5jbHVkZUFsbEV4cHJlc3Npb25cblx0XHRcdFx0KVxuXHRcdFx0KTtcblx0XHRcdGV4cHJlc3Npb24gPSBjb25jYXQoLi4uZXhwcmVzc2lvbi5leHByZXNzaW9ucykgYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFQ+O1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBcIkNvbXBsZXhUeXBlXCI6XG5cdFx0XHRleHByZXNzaW9uLmJpbmRpbmdQYXJhbWV0ZXJzID0gZXhwcmVzc2lvbi5iaW5kaW5nUGFyYW1ldGVycy5tYXAoKGJpbmRpbmdQYXJhbWV0ZXIpID0+XG5cdFx0XHRcdHRyYW5zZm9ybVJlY3Vyc2l2ZWx5KFxuXHRcdFx0XHRcdGJpbmRpbmdQYXJhbWV0ZXIgYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFQ+LFxuXHRcdFx0XHRcdGV4cHJlc3Npb25UeXBlLFxuXHRcdFx0XHRcdHRyYW5zZm9ybUZ1bmN0aW9uLFxuXHRcdFx0XHRcdGluY2x1ZGVBbGxFeHByZXNzaW9uXG5cdFx0XHRcdClcblx0XHRcdCk7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFwiSWZFbHNlXCI6XG5cdFx0XHRjb25zdCBvblRydWUgPSB0cmFuc2Zvcm1SZWN1cnNpdmVseShcblx0XHRcdFx0ZXhwcmVzc2lvbi5vblRydWUsXG5cdFx0XHRcdGV4cHJlc3Npb25UeXBlLFxuXHRcdFx0XHR0cmFuc2Zvcm1GdW5jdGlvbiBhcyB1bmtub3duIGFzIFRyYW5zZm9ybUZ1bmN0aW9uPEV4cHJlc3Npb25UeXBlVG9FeHByZXNzaW9uPEVULCB1bmtub3duPiwgdW5rbm93bj4sXG5cdFx0XHRcdGluY2x1ZGVBbGxFeHByZXNzaW9uXG5cdFx0XHQpO1xuXHRcdFx0Y29uc3Qgb25GYWxzZSA9IHRyYW5zZm9ybVJlY3Vyc2l2ZWx5KFxuXHRcdFx0XHRleHByZXNzaW9uLm9uRmFsc2UsXG5cdFx0XHRcdGV4cHJlc3Npb25UeXBlLFxuXHRcdFx0XHR0cmFuc2Zvcm1GdW5jdGlvbiBhcyB1bmtub3duIGFzIFRyYW5zZm9ybUZ1bmN0aW9uPEV4cHJlc3Npb25UeXBlVG9FeHByZXNzaW9uPEVULCB1bmtub3duPiwgdW5rbm93bj4sXG5cdFx0XHRcdGluY2x1ZGVBbGxFeHByZXNzaW9uXG5cdFx0XHQpO1xuXHRcdFx0bGV0IGNvbmRpdGlvbiA9IGV4cHJlc3Npb24uY29uZGl0aW9uO1xuXHRcdFx0aWYgKGluY2x1ZGVBbGxFeHByZXNzaW9uKSB7XG5cdFx0XHRcdGNvbmRpdGlvbiA9IHRyYW5zZm9ybVJlY3Vyc2l2ZWx5KFxuXHRcdFx0XHRcdGV4cHJlc3Npb24uY29uZGl0aW9uLFxuXHRcdFx0XHRcdGV4cHJlc3Npb25UeXBlLFxuXHRcdFx0XHRcdHRyYW5zZm9ybUZ1bmN0aW9uIGFzIHVua25vd24gYXMgVHJhbnNmb3JtRnVuY3Rpb248RXhwcmVzc2lvblR5cGVUb0V4cHJlc3Npb248RVQsIGJvb2xlYW4+LCBib29sZWFuPixcblx0XHRcdFx0XHRpbmNsdWRlQWxsRXhwcmVzc2lvblxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdFx0ZXhwcmVzc2lvbiA9IGlmRWxzZShjb25kaXRpb24sIG9uVHJ1ZSwgb25GYWxzZSkgYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFQ+O1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBcIk5vdFwiOlxuXHRcdFx0aWYgKGluY2x1ZGVBbGxFeHByZXNzaW9uKSB7XG5cdFx0XHRcdGNvbnN0IG9wZXJhbmQgPSB0cmFuc2Zvcm1SZWN1cnNpdmVseShcblx0XHRcdFx0XHRleHByZXNzaW9uLm9wZXJhbmQsXG5cdFx0XHRcdFx0ZXhwcmVzc2lvblR5cGUsXG5cdFx0XHRcdFx0dHJhbnNmb3JtRnVuY3Rpb24gYXMgdW5rbm93biBhcyBUcmFuc2Zvcm1GdW5jdGlvbjxFeHByZXNzaW9uVHlwZVRvRXhwcmVzc2lvbjxFVCwgYm9vbGVhbj4sIGJvb2xlYW4+LFxuXHRcdFx0XHRcdGluY2x1ZGVBbGxFeHByZXNzaW9uXG5cdFx0XHRcdCk7XG5cdFx0XHRcdGV4cHJlc3Npb24gPSBub3Qob3BlcmFuZCkgYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFQ+O1xuXHRcdFx0fVxuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBcIlRydXRoeVwiOlxuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBcIlNldFwiOlxuXHRcdFx0aWYgKGluY2x1ZGVBbGxFeHByZXNzaW9uKSB7XG5cdFx0XHRcdGNvbnN0IG9wZXJhbmRzID0gZXhwcmVzc2lvbi5vcGVyYW5kcy5tYXAoKG9wZXJhbmQpID0+XG5cdFx0XHRcdFx0dHJhbnNmb3JtUmVjdXJzaXZlbHkoXG5cdFx0XHRcdFx0XHRvcGVyYW5kLFxuXHRcdFx0XHRcdFx0ZXhwcmVzc2lvblR5cGUsXG5cdFx0XHRcdFx0XHR0cmFuc2Zvcm1GdW5jdGlvbiBhcyB1bmtub3duIGFzIFRyYW5zZm9ybUZ1bmN0aW9uPEV4cHJlc3Npb25UeXBlVG9FeHByZXNzaW9uPEVULCBib29sZWFuPiwgYm9vbGVhbj4sXG5cdFx0XHRcdFx0XHRpbmNsdWRlQWxsRXhwcmVzc2lvblxuXHRcdFx0XHRcdClcblx0XHRcdFx0KTtcblx0XHRcdFx0ZXhwcmVzc2lvbiA9XG5cdFx0XHRcdFx0ZXhwcmVzc2lvbi5vcGVyYXRvciA9PT0gXCJ8fFwiXG5cdFx0XHRcdFx0XHQ/IChvciguLi5vcGVyYW5kcykgYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFQ+KVxuXHRcdFx0XHRcdFx0OiAoYW5kKC4uLm9wZXJhbmRzKSBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248VD4pO1xuXHRcdFx0fVxuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBcIkNvbXBhcmlzb25cIjpcblx0XHRcdGlmIChpbmNsdWRlQWxsRXhwcmVzc2lvbikge1xuXHRcdFx0XHRjb25zdCBvcGVyYW5kMSA9IHRyYW5zZm9ybVJlY3Vyc2l2ZWx5KFxuXHRcdFx0XHRcdGV4cHJlc3Npb24ub3BlcmFuZDEgYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFQ+LFxuXHRcdFx0XHRcdGV4cHJlc3Npb25UeXBlLFxuXHRcdFx0XHRcdHRyYW5zZm9ybUZ1bmN0aW9uLFxuXHRcdFx0XHRcdGluY2x1ZGVBbGxFeHByZXNzaW9uXG5cdFx0XHRcdCk7XG5cdFx0XHRcdGNvbnN0IG9wZXJhbmQyID0gdHJhbnNmb3JtUmVjdXJzaXZlbHkoXG5cdFx0XHRcdFx0ZXhwcmVzc2lvbi5vcGVyYW5kMiBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248VD4sXG5cdFx0XHRcdFx0ZXhwcmVzc2lvblR5cGUsXG5cdFx0XHRcdFx0dHJhbnNmb3JtRnVuY3Rpb24sXG5cdFx0XHRcdFx0aW5jbHVkZUFsbEV4cHJlc3Npb25cblx0XHRcdFx0KTtcblx0XHRcdFx0ZXhwcmVzc2lvbiA9IGNvbXBhcmlzb24oZXhwcmVzc2lvbi5vcGVyYXRvciwgb3BlcmFuZDEsIG9wZXJhbmQyKSBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248VD47XG5cdFx0XHR9XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFwiQ29uc3RhbnRcIjpcblx0XHRcdGNvbnN0IGNvbnN0YW50VmFsdWU6IFJlY29yZDxzdHJpbmcsIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjx1bmtub3duPj4gPSBleHByZXNzaW9uLnZhbHVlIGFzIFJlY29yZDxcblx0XHRcdFx0c3RyaW5nLFxuXHRcdFx0XHRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248dW5rbm93bj5cblx0XHRcdD47XG5cdFx0XHRpZiAodHlwZW9mIGNvbnN0YW50VmFsdWUgPT09IFwib2JqZWN0XCIgJiYgY29uc3RhbnRWYWx1ZSkge1xuXHRcdFx0XHRPYmplY3Qua2V5cyhjb25zdGFudFZhbHVlKS5mb3JFYWNoKChrZXkpID0+IHtcblx0XHRcdFx0XHRjb25zdGFudFZhbHVlW2tleV0gPSB0cmFuc2Zvcm1SZWN1cnNpdmVseShcblx0XHRcdFx0XHRcdGNvbnN0YW50VmFsdWVba2V5XSxcblx0XHRcdFx0XHRcdGV4cHJlc3Npb25UeXBlLFxuXHRcdFx0XHRcdFx0dHJhbnNmb3JtRnVuY3Rpb24gYXMgdW5rbm93biBhcyBUcmFuc2Zvcm1GdW5jdGlvbjxFeHByZXNzaW9uVHlwZVRvRXhwcmVzc2lvbjxFVCwgdW5rbm93bj4sIHVua25vd24+LFxuXHRcdFx0XHRcdFx0aW5jbHVkZUFsbEV4cHJlc3Npb25cblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgXCJSZWZcIjpcblx0XHRjYXNlIFwiTGVuZ3RoXCI6XG5cdFx0Y2FzZSBcIlBhdGhJbk1vZGVsXCI6XG5cdFx0Y2FzZSBcIkVtYmVkZGVkQmluZGluZ1wiOlxuXHRcdGNhc2UgXCJFbWJlZGRlZEV4cHJlc3Npb25CaW5kaW5nXCI6XG5cdFx0Y2FzZSBcIlVucmVzb2x2YWJsZVwiOlxuXHRcdFx0Ly8gRG8gbm90aGluZ1xuXHRcdFx0YnJlYWs7XG5cdH1cblx0aWYgKGV4cHJlc3Npb25UeXBlID09PSBleHByZXNzaW9uLl90eXBlKSB7XG5cdFx0ZXhwcmVzc2lvbiA9IHRyYW5zZm9ybUZ1bmN0aW9uKGluRXhwcmVzc2lvbiBhcyBFeHByZXNzaW9uVHlwZVRvRXhwcmVzc2lvbjxFVCwgVD4pO1xuXHR9XG5cdHJldHVybiBleHByZXNzaW9uO1xufVxuXG5leHBvcnQgdHlwZSBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiA9IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuY29uc3QgbmVlZFBhcmVudGhlc2lzID0gZnVuY3Rpb24gPFQgZXh0ZW5kcyBQcmltaXRpdmVUeXBlPihleHByOiBFeHByZXNzaW9uT3JQcmltaXRpdmU8VD4pOiBib29sZWFuIHtcblx0cmV0dXJuIChcblx0XHQhaXNDb25zdGFudChleHByKSAmJlxuXHRcdCFpc1BhdGhJbk1vZGVsRXhwcmVzc2lvbihleHByKSAmJlxuXHRcdGlzQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uKGV4cHIpICYmXG5cdFx0ZXhwci5fdHlwZSAhPT0gXCJJZkVsc2VcIiAmJlxuXHRcdGV4cHIuX3R5cGUgIT09IFwiRnVuY3Rpb25cIlxuXHQpO1xufTtcblxuLyoqXG4gKiBDb21waWxlcyBhIGNvbnN0YW50IG9iamVjdCB0byBhIHN0cmluZy5cbiAqIEBwYXJhbSBleHByXG4gKiBAcGFyYW0gaXNOdWxsYWJsZVxuICogQHJldHVybnMgVGhlIGNvbXBpbGVkIHN0cmluZ1xuICovXG5mdW5jdGlvbiBjb21waWxlQ29uc3RhbnRPYmplY3QoZXhwcjogQ29uc3RhbnRFeHByZXNzaW9uPG9iamVjdD4sIGlzTnVsbGFibGUgPSBmYWxzZSk6IHN0cmluZyB7XG5cdGlmIChpc051bGxhYmxlICYmIE9iamVjdC5rZXlzKGV4cHIudmFsdWUpLmxlbmd0aCA9PT0gMCkge1xuXHRcdHJldHVybiBcIlwiO1xuXHR9XG5cdGNvbnN0IG9iamVjdHMgPSBleHByLnZhbHVlIGFzIFBsYWluRXhwcmVzc2lvbk9iamVjdDtcblx0Y29uc3QgcHJvcGVydGllczogc3RyaW5nW10gPSBbXTtcblx0T2JqZWN0LmtleXMob2JqZWN0cykuZm9yRWFjaCgoa2V5KSA9PiB7XG5cdFx0Y29uc3QgdmFsdWUgPSBvYmplY3RzW2tleV07XG5cdFx0Y29uc3QgY2hpbGRSZXN1bHQgPSBjb21waWxlRXhwcmVzc2lvbih2YWx1ZSwgdHJ1ZSwgZmFsc2UsIGlzTnVsbGFibGUpO1xuXHRcdGlmIChjaGlsZFJlc3VsdCAmJiBjaGlsZFJlc3VsdC5sZW5ndGggPiAwKSB7XG5cdFx0XHRwcm9wZXJ0aWVzLnB1c2goYCR7a2V5fTogJHtjaGlsZFJlc3VsdH1gKTtcblx0XHR9XG5cdH0pO1xuXHRyZXR1cm4gYHske3Byb3BlcnRpZXMuam9pbihcIiwgXCIpfX1gO1xufVxuXG4vKipcbiAqIENvbXBpbGVzIGEgQ29uc3RhbnQgQmluZGluZyBFeHByZXNzaW9uLlxuICogQHBhcmFtIGV4cHJcbiAqIEBwYXJhbSBlbWJlZGRlZEluQmluZGluZ1xuICogQHBhcmFtIGlzTnVsbGFibGVcbiAqIEBwYXJhbSBkb05vdFN0cmluZ2lmeVxuICogQHJldHVybnMgVGhlIGNvbXBpbGVkIHN0cmluZ1xuICovXG5leHBvcnQgZnVuY3Rpb24gY29tcGlsZUNvbnN0YW50PFQgZXh0ZW5kcyBQcmltaXRpdmVUeXBlPihcblx0ZXhwcjogQ29uc3RhbnRFeHByZXNzaW9uPFQ+LFxuXHRlbWJlZGRlZEluQmluZGluZzogYm9vbGVhbixcblx0aXNOdWxsYWJsZT86IGJvb2xlYW4sXG5cdGRvTm90U3RyaW5naWZ5PzogZmFsc2Vcbik6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uO1xuZXhwb3J0IGZ1bmN0aW9uIGNvbXBpbGVDb25zdGFudDxUIGV4dGVuZHMgUHJpbWl0aXZlVHlwZT4oXG5cdGV4cHI6IENvbnN0YW50RXhwcmVzc2lvbjxUPixcblx0ZW1iZWRkZWRJbkJpbmRpbmc6IGJvb2xlYW4sXG5cdGlzTnVsbGFibGU/OiBib29sZWFuLFxuXHRkb05vdFN0cmluZ2lmeT86IHRydWVcbik6IFByaW1pdGl2ZVR5cGU7XG5leHBvcnQgZnVuY3Rpb24gY29tcGlsZUNvbnN0YW50PFQgZXh0ZW5kcyBQcmltaXRpdmVUeXBlPihcblx0ZXhwcjogQ29uc3RhbnRFeHByZXNzaW9uPFQ+LFxuXHRlbWJlZGRlZEluQmluZGluZzogYm9vbGVhbixcblx0aXNOdWxsYWJsZSA9IGZhbHNlLFxuXHRkb05vdFN0cmluZ2lmeSA9IGZhbHNlXG4pOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB8IFByaW1pdGl2ZVR5cGUge1xuXHRpZiAoZXhwci52YWx1ZSA9PT0gbnVsbCkge1xuXHRcdHJldHVybiBkb05vdFN0cmluZ2lmeSA/IG51bGwgOiBcIm51bGxcIjtcblx0fVxuXHRpZiAoZXhwci52YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0cmV0dXJuIGRvTm90U3RyaW5naWZ5ID8gdW5kZWZpbmVkIDogXCJ1bmRlZmluZWRcIjtcblx0fVxuXHRpZiAodHlwZW9mIGV4cHIudmFsdWUgPT09IFwib2JqZWN0XCIpIHtcblx0XHRpZiAoQXJyYXkuaXNBcnJheShleHByLnZhbHVlKSkge1xuXHRcdFx0Y29uc3QgZW50cmllcyA9IGV4cHIudmFsdWUubWFwKChleHByZXNzaW9uKSA9PiBjb21waWxlRXhwcmVzc2lvbihleHByZXNzaW9uLCB0cnVlKSk7XG5cdFx0XHRyZXR1cm4gYFske2VudHJpZXMuam9pbihcIiwgXCIpfV1gO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gY29tcGlsZUNvbnN0YW50T2JqZWN0KGV4cHIgYXMgQ29uc3RhbnRFeHByZXNzaW9uPG9iamVjdD4sIGlzTnVsbGFibGUpO1xuXHRcdH1cblx0fVxuXG5cdGlmIChlbWJlZGRlZEluQmluZGluZykge1xuXHRcdHN3aXRjaCAodHlwZW9mIGV4cHIudmFsdWUpIHtcblx0XHRcdGNhc2UgXCJudW1iZXJcIjpcblx0XHRcdGNhc2UgXCJiaWdpbnRcIjpcblx0XHRcdGNhc2UgXCJib29sZWFuXCI6XG5cdFx0XHRcdHJldHVybiBleHByLnZhbHVlLnRvU3RyaW5nKCk7XG5cdFx0XHRjYXNlIFwic3RyaW5nXCI6XG5cdFx0XHRcdHJldHVybiBgJyR7ZXNjYXBlWG1sQXR0cmlidXRlKGV4cHIudmFsdWUudG9TdHJpbmcoKSl9J2A7XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRyZXR1cm4gXCJcIjtcblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIGRvTm90U3RyaW5naWZ5ID8gZXhwci52YWx1ZSA6IGV4cHIudmFsdWUudG9TdHJpbmcoKTtcblx0fVxufVxuXG4vKipcbiAqIEdlbmVyYXRlcyB0aGUgYmluZGluZyBzdHJpbmcgZm9yIGEgQmluZGluZyBleHByZXNzaW9uLlxuICogQHBhcmFtIGV4cHJlc3Npb25Gb3JCaW5kaW5nIFRoZSBleHByZXNzaW9uIHRvIGNvbXBpbGVcbiAqIEBwYXJhbSBlbWJlZGRlZEluQmluZGluZyBXaGV0aGVyIHRoZSBleHByZXNzaW9uIHRvIGNvbXBpbGUgaXMgZW1iZWRkZWQgaW50byBhbm90aGVyIGV4cHJlc3Npb25cbiAqIEBwYXJhbSBlbWJlZGRlZFNlcGFyYXRvciBUaGUgYmluZGluZyB2YWx1ZSBldmFsdWF0b3IgKCQgb3IgJSBkZXBlbmRpbmcgb24gd2hldGhlciB3ZSB3YW50IHRvIGZvcmNlIHRoZSB0eXBlIG9yIG5vdClcbiAqIEByZXR1cm5zIFRoZSBjb3JyZXNwb25kaW5nIGV4cHJlc3Npb24gYmluZGluZ1xuICovXG5mdW5jdGlvbiBjb21waWxlUGF0aEluTW9kZWxFeHByZXNzaW9uPFQgZXh0ZW5kcyBQcmltaXRpdmVUeXBlPihcblx0ZXhwcmVzc2lvbkZvckJpbmRpbmc6IFBhdGhJbk1vZGVsRXhwcmVzc2lvbjxUPixcblx0ZW1iZWRkZWRJbkJpbmRpbmc6IGJvb2xlYW4sXG5cdGVtYmVkZGVkU2VwYXJhdG9yOiBzdHJpbmdcbik6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIHtcblx0aWYgKFxuXHRcdGV4cHJlc3Npb25Gb3JCaW5kaW5nLnR5cGUgfHxcblx0XHRleHByZXNzaW9uRm9yQmluZGluZy5wYXJhbWV0ZXJzIHx8XG5cdFx0ZXhwcmVzc2lvbkZvckJpbmRpbmcudGFyZ2V0VHlwZSB8fFxuXHRcdGV4cHJlc3Npb25Gb3JCaW5kaW5nLmZvcm1hdE9wdGlvbnMgfHxcblx0XHRleHByZXNzaW9uRm9yQmluZGluZy5jb25zdHJhaW50c1xuXHQpIHtcblx0XHQvLyBUaGlzIGlzIG5vdyBhIGNvbXBsZXggYmluZGluZyBkZWZpbml0aW9uLCBsZXQncyBwcmVwYXJlIGZvciBpdFxuXHRcdGNvbnN0IGNvbXBsZXhCaW5kaW5nRGVmaW5pdGlvbiA9IHtcblx0XHRcdHBhdGg6IGNvbXBpbGVQYXRoSW5Nb2RlbChleHByZXNzaW9uRm9yQmluZGluZyksXG5cdFx0XHR0eXBlOiBleHByZXNzaW9uRm9yQmluZGluZy50eXBlLFxuXHRcdFx0dGFyZ2V0VHlwZTogZXhwcmVzc2lvbkZvckJpbmRpbmcudGFyZ2V0VHlwZSxcblx0XHRcdHBhcmFtZXRlcnM6IGV4cHJlc3Npb25Gb3JCaW5kaW5nLnBhcmFtZXRlcnMsXG5cdFx0XHRmb3JtYXRPcHRpb25zOiBleHByZXNzaW9uRm9yQmluZGluZy5mb3JtYXRPcHRpb25zLFxuXHRcdFx0Y29uc3RyYWludHM6IGV4cHJlc3Npb25Gb3JCaW5kaW5nLmNvbnN0cmFpbnRzXG5cdFx0fTtcblx0XHRjb25zdCBvdXRCaW5kaW5nID0gY29tcGlsZUV4cHJlc3Npb24oY29tcGxleEJpbmRpbmdEZWZpbml0aW9uLCBmYWxzZSwgZmFsc2UsIHRydWUpO1xuXHRcdGlmIChlbWJlZGRlZEluQmluZGluZykge1xuXHRcdFx0Y29uc3Qgc2VwYXJhdG9yID0gZXhwcmVzc2lvbkZvckJpbmRpbmcuYWx3YXlzS2VlcFRhcmdldFR5cGUgPyBcIiRcIiA6IGVtYmVkZGVkU2VwYXJhdG9yO1xuXHRcdFx0cmV0dXJuIGAke3NlcGFyYXRvcn0ke291dEJpbmRpbmd9YDtcblx0XHR9XG5cdFx0cmV0dXJuIG91dEJpbmRpbmc7XG5cdH0gZWxzZSBpZiAoZW1iZWRkZWRJbkJpbmRpbmcpIHtcblx0XHRyZXR1cm4gYCR7ZW1iZWRkZWRTZXBhcmF0b3J9eyR7Y29tcGlsZVBhdGhJbk1vZGVsKGV4cHJlc3Npb25Gb3JCaW5kaW5nKX19YDtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gYHske2NvbXBpbGVQYXRoSW5Nb2RlbChleHByZXNzaW9uRm9yQmluZGluZyl9fWA7XG5cdH1cbn1cblxuZnVuY3Rpb24gY29tcGlsZUNvbXBsZXhUeXBlRXhwcmVzc2lvbjxUIGV4dGVuZHMgUHJpbWl0aXZlVHlwZT4oZXhwcmVzc2lvbjogQ29tcGxleFR5cGVFeHByZXNzaW9uPFQ+KTogc3RyaW5nIHtcblx0aWYgKGV4cHJlc3Npb24uYmluZGluZ1BhcmFtZXRlcnMubGVuZ3RoID09PSAxKSB7XG5cdFx0cmV0dXJuIGB7JHtjb21waWxlUGF0aFBhcmFtZXRlcihleHByZXNzaW9uLmJpbmRpbmdQYXJhbWV0ZXJzWzBdIGFzIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxQcmltaXRpdmVUeXBlPiwgdHJ1ZSl9LCB0eXBlOiAnJHtcblx0XHRcdGV4cHJlc3Npb24udHlwZVxuXHRcdH0nfWA7XG5cdH1cblxuXHRsZXQgb3V0cHV0RW5kID0gYF0sIHR5cGU6ICcke2V4cHJlc3Npb24udHlwZX0nYDtcblx0aWYgKGhhc0VsZW1lbnRzKGV4cHJlc3Npb24uZm9ybWF0T3B0aW9ucykpIHtcblx0XHRvdXRwdXRFbmQgKz0gYCwgZm9ybWF0T3B0aW9uczogJHtjb21waWxlRXhwcmVzc2lvbihleHByZXNzaW9uLmZvcm1hdE9wdGlvbnMpfWA7XG5cdH1cblx0aWYgKGhhc0VsZW1lbnRzKGV4cHJlc3Npb24uY29uc3RyYWludHMpKSB7XG5cdFx0b3V0cHV0RW5kICs9IGAsIGNvbnN0cmFpbnRzOiAke2NvbXBpbGVFeHByZXNzaW9uKGV4cHJlc3Npb24uY29uc3RyYWludHMpfWA7XG5cdH1cblx0aWYgKGhhc0VsZW1lbnRzKGV4cHJlc3Npb24ucGFyYW1ldGVycykpIHtcblx0XHRvdXRwdXRFbmQgKz0gYCwgcGFyYW1ldGVyczogJHtjb21waWxlRXhwcmVzc2lvbihleHByZXNzaW9uLnBhcmFtZXRlcnMpfWA7XG5cdH1cblx0b3V0cHV0RW5kICs9IFwifVwiO1xuXG5cdHJldHVybiBge21vZGU6J1R3b1dheScsIHBhcnRzOlske2V4cHJlc3Npb24uYmluZGluZ1BhcmFtZXRlcnNcblx0XHQubWFwKChwYXJhbSkgPT4gY29tcGlsZVBhdGhQYXJhbWV0ZXIocGFyYW0gYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFByaW1pdGl2ZVR5cGU+KSlcblx0XHQuam9pbihcIixcIil9JHtvdXRwdXRFbmR9YDtcbn1cblxuLyoqXG4gKiBXcmFwIHRoZSBjb21waWxlZCBiaW5kaW5nIHN0cmluZyBhcyByZXF1aXJlZCBkZXBlbmRpbmcgb24gaXRzIGNvbnRleHQuXG4gKiBAcGFyYW0gZXhwcmVzc2lvbiBUaGUgY29tcGlsZWQgZXhwcmVzc2lvblxuICogQHBhcmFtIGVtYmVkZGVkSW5CaW5kaW5nIFRydWUgaWYgdGhlIGNvbXBpbGVkIGV4cHJlc3Npb24gaXMgdG8gYmUgZW1iZWRkZWQgaW4gYSBiaW5kaW5nXG4gKiBAcGFyYW0gcGFyZW50aGVzaXNSZXF1aXJlZCBUcnVlIGlmIHRoZSBlbWJlZGRlZCBiaW5kaW5nIG5lZWRzIHRvIGJlIHdyYXBwZWQgaW4gcGFyZXRoZXNpcyBzbyB0aGF0IGl0IGlzIGV2YWx1YXRlZCBhcyBvbmVcbiAqIEByZXR1cm5zIEZpbmFsaXplZCBjb21waWxlZCBleHByZXNzaW9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB3cmFwQmluZGluZ0V4cHJlc3Npb24oXG5cdGV4cHJlc3Npb246IHN0cmluZyxcblx0ZW1iZWRkZWRJbkJpbmRpbmc6IGJvb2xlYW4sXG5cdHBhcmVudGhlc2lzUmVxdWlyZWQgPSBmYWxzZVxuKTogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24ge1xuXHRpZiAoZW1iZWRkZWRJbkJpbmRpbmcpIHtcblx0XHRpZiAocGFyZW50aGVzaXNSZXF1aXJlZCkge1xuXHRcdFx0cmV0dXJuIGAoJHtleHByZXNzaW9ufSlgO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gZXhwcmVzc2lvbjtcblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIGB7PSAke2V4cHJlc3Npb259fWA7XG5cdH1cbn1cblxuLyoqXG4gKiBDb21waWxlIGFuIGV4cHJlc3Npb24gaW50byBhbiBleHByZXNzaW9uIGJpbmRpbmcuXG4gKiBAdGVtcGxhdGUgVCBUaGUgdGFyZ2V0IHR5cGVcbiAqIEBwYXJhbSBleHByZXNzaW9uIFRoZSBleHByZXNzaW9uIHRvIGNvbXBpbGVcbiAqIEBwYXJhbSBlbWJlZGRlZEluQmluZGluZyBXaGV0aGVyIHRoZSBleHByZXNzaW9uIHRvIGNvbXBpbGUgaXMgZW1iZWRkZWQgaW50byBhbm90aGVyIGV4cHJlc3Npb25cbiAqIEBwYXJhbSBrZWVwVGFyZ2V0VHlwZSBLZWVwIHRoZSB0YXJnZXQgdHlwZSBvZiB0aGUgZW1iZWRkZWQgYmluZGluZ3MgaW5zdGVhZCBvZiBjYXN0aW5nIHRoZW0gdG8gYW55XG4gKiBAcGFyYW0gaXNOdWxsYWJsZSBXaGV0aGVyIGJpbmRpbmcgZXhwcmVzc2lvbiBjYW4gcmVzb2x2ZSB0byBlbXB0eSBzdHJpbmcgb3Igbm90XG4gKiBAcmV0dXJucyBUaGUgY29ycmVzcG9uZGluZyBleHByZXNzaW9uIGJpbmRpbmdcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbXBpbGVFeHByZXNzaW9uPFQgZXh0ZW5kcyBQcmltaXRpdmVUeXBlPihcblx0ZXhwcmVzc2lvbjogRXhwcmVzc2lvbk9yUHJpbWl0aXZlPFQ+LFxuXHRlbWJlZGRlZEluQmluZGluZyA9IGZhbHNlLFxuXHRrZWVwVGFyZ2V0VHlwZSA9IGZhbHNlLFxuXHRpc051bGxhYmxlID0gZmFsc2Vcbik6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIHtcblx0Y29uc3QgZXhwciA9IHdyYXBQcmltaXRpdmUoZXhwcmVzc2lvbik7XG5cdGNvbnN0IGVtYmVkZGVkU2VwYXJhdG9yID0ga2VlcFRhcmdldFR5cGUgPyBcIiRcIiA6IFwiJVwiO1xuXG5cdHN3aXRjaCAoZXhwci5fdHlwZSkge1xuXHRcdGNhc2UgXCJVbnJlc29sdmFibGVcIjpcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cblx0XHRjYXNlIFwiQ29uc3RhbnRcIjpcblx0XHRcdHJldHVybiBjb21waWxlQ29uc3RhbnQoZXhwciwgZW1iZWRkZWRJbkJpbmRpbmcsIGlzTnVsbGFibGUpO1xuXG5cdFx0Y2FzZSBcIlJlZlwiOlxuXHRcdFx0cmV0dXJuIGV4cHIucmVmIHx8IFwibnVsbFwiO1xuXG5cdFx0Y2FzZSBcIkZ1bmN0aW9uXCI6XG5cdFx0XHRsZXQgaGFzRW1iZWRkZWRGdW5jdGlvbkNhbGxPckJpbmRpbmcgPSBmYWxzZTtcblx0XHRcdGlmIChleHByLmlzRm9ybWF0dGluZ0ZuKSB7XG5cdFx0XHRcdHRyYW5zZm9ybVJlY3Vyc2l2ZWx5KFxuXHRcdFx0XHRcdGV4cHIsXG5cdFx0XHRcdFx0XCJGdW5jdGlvblwiLFxuXHRcdFx0XHRcdChzdWJGbikgPT4ge1xuXHRcdFx0XHRcdFx0aWYgKHN1YkZuICE9PSBleHByICYmIHN1YkZuLm9iaiA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0XHRcdGhhc0VtYmVkZGVkRnVuY3Rpb25DYWxsT3JCaW5kaW5nID0gdHJ1ZTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdHJldHVybiBzdWJGbjtcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdHRydWVcblx0XHRcdFx0KTtcblx0XHRcdFx0dHJhbnNmb3JtUmVjdXJzaXZlbHkoXG5cdFx0XHRcdFx0ZXhwcixcblx0XHRcdFx0XHRcIkNvbnN0YW50XCIsXG5cdFx0XHRcdFx0KHN1YkZuOiBDb25zdGFudEV4cHJlc3Npb248VD4pID0+IHtcblx0XHRcdFx0XHRcdGlmICgoc3ViRm4gYXMgdW5rbm93bikgIT09IGV4cHIgJiYgdHlwZW9mIHN1YkZuLnZhbHVlID09PSBcIm9iamVjdFwiKSB7XG5cdFx0XHRcdFx0XHRcdHRyYW5zZm9ybVJlY3Vyc2l2ZWx5KHN1YkZuLCBcIlBhdGhJbk1vZGVsXCIsIChzdWJTdWJGbikgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdGhhc0VtYmVkZGVkRnVuY3Rpb25DYWxsT3JCaW5kaW5nID0gdHJ1ZTtcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gc3ViU3ViRm47XG5cdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRyZXR1cm4gc3ViRm47XG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHR0cnVlXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0XHRjb25zdCBhcmd1bWVudFN0cmluZyA9IGAke2V4cHIucGFyYW1ldGVycy5tYXAoKGFyZykgPT4gY29tcGlsZUV4cHJlc3Npb24oYXJnLCB0cnVlKSkuam9pbihcIiwgXCIpfWA7XG5cdFx0XHRsZXQgZm5DYWxsID1cblx0XHRcdFx0ZXhwci5vYmogPT09IHVuZGVmaW5lZFxuXHRcdFx0XHRcdD8gYCR7ZXhwci5mbn0oJHthcmd1bWVudFN0cmluZ30pYFxuXHRcdFx0XHRcdDogYCR7Y29tcGlsZUV4cHJlc3Npb24oZXhwci5vYmosIHRydWUpfS4ke2V4cHIuZm59KCR7YXJndW1lbnRTdHJpbmd9KWA7XG5cdFx0XHRpZiAoIWVtYmVkZGVkSW5CaW5kaW5nICYmIGhhc0VtYmVkZGVkRnVuY3Rpb25DYWxsT3JCaW5kaW5nKSB7XG5cdFx0XHRcdGZuQ2FsbCA9IGB7PSAke2ZuQ2FsbH19YDtcblx0XHRcdH1cblx0XHRcdHJldHVybiBmbkNhbGw7XG5cblx0XHRjYXNlIFwiRW1iZWRkZWRFeHByZXNzaW9uQmluZGluZ1wiOlxuXHRcdFx0cmV0dXJuIGVtYmVkZGVkSW5CaW5kaW5nID8gYCgke2V4cHIudmFsdWUuc3Vic3RyaW5nKDIsIGV4cHIudmFsdWUubGVuZ3RoIC0gMSl9KWAgOiBgJHtleHByLnZhbHVlfWA7XG5cblx0XHRjYXNlIFwiRW1iZWRkZWRCaW5kaW5nXCI6XG5cdFx0XHRyZXR1cm4gZW1iZWRkZWRJbkJpbmRpbmcgPyBgJHtlbWJlZGRlZFNlcGFyYXRvcn0ke2V4cHIudmFsdWV9YCA6IGAke2V4cHIudmFsdWV9YDtcblxuXHRcdGNhc2UgXCJQYXRoSW5Nb2RlbFwiOlxuXHRcdFx0cmV0dXJuIGNvbXBpbGVQYXRoSW5Nb2RlbEV4cHJlc3Npb24oZXhwciwgZW1iZWRkZWRJbkJpbmRpbmcsIGVtYmVkZGVkU2VwYXJhdG9yKTtcblxuXHRcdGNhc2UgXCJDb21wYXJpc29uXCI6XG5cdFx0XHRjb25zdCBjb21wYXJpc29uRXhwcmVzc2lvbiA9IGNvbXBpbGVDb21wYXJpc29uRXhwcmVzc2lvbihleHByKTtcblx0XHRcdHJldHVybiB3cmFwQmluZGluZ0V4cHJlc3Npb24oY29tcGFyaXNvbkV4cHJlc3Npb24sIGVtYmVkZGVkSW5CaW5kaW5nKTtcblxuXHRcdGNhc2UgXCJJZkVsc2VcIjpcblx0XHRcdGNvbnN0IGlmRWxzZUV4cHJlc3Npb24gPSBgJHtjb21waWxlRXhwcmVzc2lvbihleHByLmNvbmRpdGlvbiwgdHJ1ZSl9ID8gJHtjb21waWxlRXhwcmVzc2lvbihcblx0XHRcdFx0ZXhwci5vblRydWUsXG5cdFx0XHRcdHRydWUsXG5cdFx0XHRcdGtlZXBUYXJnZXRUeXBlXG5cdFx0XHQpfSA6ICR7Y29tcGlsZUV4cHJlc3Npb24oZXhwci5vbkZhbHNlLCB0cnVlLCBrZWVwVGFyZ2V0VHlwZSl9YDtcblx0XHRcdHJldHVybiB3cmFwQmluZGluZ0V4cHJlc3Npb24oaWZFbHNlRXhwcmVzc2lvbiwgZW1iZWRkZWRJbkJpbmRpbmcsIHRydWUpO1xuXG5cdFx0Y2FzZSBcIlNldFwiOlxuXHRcdFx0Y29uc3Qgc2V0RXhwcmVzc2lvbiA9IGV4cHIub3BlcmFuZHMubWFwKChvcGVyYW5kKSA9PiBjb21waWxlRXhwcmVzc2lvbihvcGVyYW5kLCB0cnVlKSkuam9pbihgICR7ZXhwci5vcGVyYXRvcn0gYCk7XG5cdFx0XHRyZXR1cm4gd3JhcEJpbmRpbmdFeHByZXNzaW9uKHNldEV4cHJlc3Npb24sIGVtYmVkZGVkSW5CaW5kaW5nLCB0cnVlKTtcblxuXHRcdGNhc2UgXCJDb25jYXRcIjpcblx0XHRcdGNvbnN0IGNvbmNhdEV4cHJlc3Npb24gPSBleHByLmV4cHJlc3Npb25zXG5cdFx0XHRcdC5tYXAoKG5lc3RlZEV4cHJlc3Npb24pID0+IGNvbXBpbGVFeHByZXNzaW9uKG5lc3RlZEV4cHJlc3Npb24sIHRydWUsIHRydWUpKVxuXHRcdFx0XHQuam9pbihcIiArIFwiKTtcblx0XHRcdHJldHVybiB3cmFwQmluZGluZ0V4cHJlc3Npb24oY29uY2F0RXhwcmVzc2lvbiwgZW1iZWRkZWRJbkJpbmRpbmcpO1xuXG5cdFx0Y2FzZSBcIkxlbmd0aFwiOlxuXHRcdFx0Y29uc3QgbGVuZ3RoRXhwcmVzc2lvbiA9IGAke2NvbXBpbGVFeHByZXNzaW9uKGV4cHIucGF0aEluTW9kZWwsIHRydWUpfS5sZW5ndGhgO1xuXHRcdFx0cmV0dXJuIHdyYXBCaW5kaW5nRXhwcmVzc2lvbihsZW5ndGhFeHByZXNzaW9uLCBlbWJlZGRlZEluQmluZGluZyk7XG5cblx0XHRjYXNlIFwiTm90XCI6XG5cdFx0XHRjb25zdCBub3RFeHByZXNzaW9uID0gYCEke2NvbXBpbGVFeHByZXNzaW9uKGV4cHIub3BlcmFuZCwgdHJ1ZSl9YDtcblx0XHRcdHJldHVybiB3cmFwQmluZGluZ0V4cHJlc3Npb24obm90RXhwcmVzc2lvbiwgZW1iZWRkZWRJbkJpbmRpbmcpO1xuXG5cdFx0Y2FzZSBcIlRydXRoeVwiOlxuXHRcdFx0Y29uc3QgdHJ1dGh5RXhwcmVzc2lvbiA9IGAhISR7Y29tcGlsZUV4cHJlc3Npb24oZXhwci5vcGVyYW5kLCB0cnVlKX1gO1xuXHRcdFx0cmV0dXJuIHdyYXBCaW5kaW5nRXhwcmVzc2lvbih0cnV0aHlFeHByZXNzaW9uLCBlbWJlZGRlZEluQmluZGluZyk7XG5cblx0XHRjYXNlIFwiRm9ybWF0dGVyXCI6XG5cdFx0XHRjb25zdCBmb3JtYXR0ZXJFeHByZXNzaW9uID0gY29tcGlsZUZvcm1hdHRlckV4cHJlc3Npb24oZXhwcik7XG5cdFx0XHRyZXR1cm4gZW1iZWRkZWRJbkJpbmRpbmcgPyBgJCR7Zm9ybWF0dGVyRXhwcmVzc2lvbn1gIDogZm9ybWF0dGVyRXhwcmVzc2lvbjtcblxuXHRcdGNhc2UgXCJDb21wbGV4VHlwZVwiOlxuXHRcdFx0Y29uc3QgY29tcGxleFR5cGVFeHByZXNzaW9uID0gY29tcGlsZUNvbXBsZXhUeXBlRXhwcmVzc2lvbihleHByKTtcblx0XHRcdHJldHVybiBlbWJlZGRlZEluQmluZGluZyA/IGAkJHtjb21wbGV4VHlwZUV4cHJlc3Npb259YCA6IGNvbXBsZXhUeXBlRXhwcmVzc2lvbjtcblxuXHRcdGRlZmF1bHQ6XG5cdFx0XHRyZXR1cm4gXCJcIjtcblx0fVxufVxuXG4vKipcbiAqIENvbXBpbGUgYSBjb21wYXJpc29uIGV4cHJlc3Npb24uXG4gKiBAcGFyYW0gZXhwcmVzc2lvbiBUaGUgY29tcGFyaXNvbiBleHByZXNzaW9uLlxuICogQHJldHVybnMgVGhlIGNvbXBpbGVkIGV4cHJlc3Npb24uIE5lZWRzIHdyYXBwaW5nIGJlZm9yZSBpdCBjYW4gYmUgdXNlZCBhcyBhbiBleHByZXNzaW9uIGJpbmRpbmcuXG4gKi9cbmZ1bmN0aW9uIGNvbXBpbGVDb21wYXJpc29uRXhwcmVzc2lvbihleHByZXNzaW9uOiBDb21wYXJpc29uRXhwcmVzc2lvbik6IHN0cmluZyB7XG5cdGZ1bmN0aW9uIGNvbXBpbGVPcGVyYW5kKG9wZXJhbmQ6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjx1bmtub3duPik6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIHtcblx0XHRjb25zdCBjb21waWxlZE9wZXJhbmQgPSBjb21waWxlRXhwcmVzc2lvbihvcGVyYW5kLCB0cnVlKSA/PyBcInVuZGVmaW5lZFwiO1xuXHRcdHJldHVybiB3cmFwQmluZGluZ0V4cHJlc3Npb24oY29tcGlsZWRPcGVyYW5kLCB0cnVlLCBuZWVkUGFyZW50aGVzaXMob3BlcmFuZCkpO1xuXHR9XG5cblx0cmV0dXJuIGAke2NvbXBpbGVPcGVyYW5kKGV4cHJlc3Npb24ub3BlcmFuZDEpfSAke2V4cHJlc3Npb24ub3BlcmF0b3J9ICR7Y29tcGlsZU9wZXJhbmQoZXhwcmVzc2lvbi5vcGVyYW5kMil9YDtcbn1cblxuLyoqXG4gKiBDb21waWxlIGEgZm9ybWF0dGVyIGV4cHJlc3Npb24uXG4gKiBAcGFyYW0gZXhwcmVzc2lvbiBUaGUgZm9ybWF0dGVyIGV4cHJlc3Npb24uXG4gKiBAcmV0dXJucyBUaGUgY29tcGlsZWQgZXhwcmVzc2lvbi5cbiAqL1xuZnVuY3Rpb24gY29tcGlsZUZvcm1hdHRlckV4cHJlc3Npb248VCBleHRlbmRzIFByaW1pdGl2ZVR5cGU+KGV4cHJlc3Npb246IEZvcm1hdHRlckV4cHJlc3Npb248VD4pOiBzdHJpbmcge1xuXHRpZiAoZXhwcmVzc2lvbi5wYXJhbWV0ZXJzLmxlbmd0aCA9PT0gMSkge1xuXHRcdHJldHVybiBgeyR7Y29tcGlsZVBhdGhQYXJhbWV0ZXIoZXhwcmVzc2lvbi5wYXJhbWV0ZXJzWzBdIGFzIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxQcmltaXRpdmVUeXBlPiwgdHJ1ZSl9LCBmb3JtYXR0ZXI6ICcke1xuXHRcdFx0ZXhwcmVzc2lvbi5mblxuXHRcdH0nfWA7XG5cdH0gZWxzZSB7XG5cdFx0Y29uc3QgcGFydHMgPSBleHByZXNzaW9uLnBhcmFtZXRlcnMubWFwKChwYXJhbSkgPT4ge1xuXHRcdFx0aWYgKHBhcmFtLl90eXBlID09PSBcIkNvbXBsZXhUeXBlXCIpIHtcblx0XHRcdFx0cmV0dXJuIGNvbXBpbGVDb21wbGV4VHlwZUV4cHJlc3Npb24ocGFyYW0pO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cmV0dXJuIGNvbXBpbGVQYXRoUGFyYW1ldGVyKHBhcmFtIGFzIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxQcmltaXRpdmVUeXBlPik7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0cmV0dXJuIGB7cGFydHM6IFske3BhcnRzLmpvaW4oXCIsIFwiKX1dLCBmb3JtYXR0ZXI6ICcke2V4cHJlc3Npb24uZm59J31gO1xuXHR9XG59XG5cbi8qKlxuICogQ29tcGlsZSB0aGUgcGF0aCBwYXJhbWV0ZXIgb2YgYSBmb3JtYXR0ZXIgY2FsbC5cbiAqIEBwYXJhbSBleHByZXNzaW9uIFRoZSBiaW5kaW5nIHBhcnQgdG8gZXZhbHVhdGVcbiAqIEBwYXJhbSBzaW5nbGVQYXRoIFdoZXRoZXIgdGhlcmUgaXMgb25lIG9yIG11bHRpcGxlIHBhdGggdG8gY29uc2lkZXJcbiAqIEByZXR1cm5zIFRoZSBzdHJpbmcgc25pcHBldCB0byBpbmNsdWRlIGluIHRoZSBvdmVyYWxsIGJpbmRpbmcgZGVmaW5pdGlvblxuICovXG5mdW5jdGlvbiBjb21waWxlUGF0aFBhcmFtZXRlcihleHByZXNzaW9uOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248UHJpbWl0aXZlVHlwZT4sIHNpbmdsZVBhdGggPSBmYWxzZSk6IHN0cmluZyB7XG5cdGxldCBvdXRWYWx1ZSA9IFwiXCI7XG5cdGlmIChleHByZXNzaW9uLl90eXBlID09PSBcIkNvbnN0YW50XCIpIHtcblx0XHRpZiAoZXhwcmVzc2lvbi52YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHQvLyBTcGVjaWFsIGNhc2Ugb3RoZXJ3aXNlIHRoZSBKU1Rva2VuaXplciBjb21wbGFpbnMgYWJvdXQgaW5jb3JyZWN0IGNvbnRlbnRcblx0XHRcdG91dFZhbHVlID0gYHZhbHVlOiAndW5kZWZpbmVkJ2A7XG5cdFx0fSBlbHNlIHtcblx0XHRcdG91dFZhbHVlID0gYHZhbHVlOiAke2NvbXBpbGVDb25zdGFudChleHByZXNzaW9uLCB0cnVlKX1gO1xuXHRcdH1cblx0fSBlbHNlIGlmIChleHByZXNzaW9uLl90eXBlID09PSBcIlBhdGhJbk1vZGVsXCIpIHtcblx0XHRvdXRWYWx1ZSA9IGBwYXRoOiAnJHtjb21waWxlUGF0aEluTW9kZWwoZXhwcmVzc2lvbil9J2A7XG5cblx0XHRvdXRWYWx1ZSArPSBleHByZXNzaW9uLnR5cGUgPyBgLCB0eXBlOiAnJHtleHByZXNzaW9uLnR5cGV9J2AgOiBgLCB0YXJnZXRUeXBlOiAnYW55J2A7XG5cdFx0aWYgKGV4cHJlc3Npb24ubW9kZSkge1xuXHRcdFx0b3V0VmFsdWUgKz0gYCwgbW9kZTogJyR7Y29tcGlsZUV4cHJlc3Npb24oZXhwcmVzc2lvbi5tb2RlKX0nYDtcblx0XHR9XG5cdFx0aWYgKGhhc0VsZW1lbnRzKGV4cHJlc3Npb24uY29uc3RyYWludHMpKSB7XG5cdFx0XHRvdXRWYWx1ZSArPSBgLCBjb25zdHJhaW50czogJHtjb21waWxlRXhwcmVzc2lvbihleHByZXNzaW9uLmNvbnN0cmFpbnRzKX1gO1xuXHRcdH1cblx0XHRpZiAoaGFzRWxlbWVudHMoZXhwcmVzc2lvbi5mb3JtYXRPcHRpb25zKSkge1xuXHRcdFx0b3V0VmFsdWUgKz0gYCwgZm9ybWF0T3B0aW9uczogJHtjb21waWxlRXhwcmVzc2lvbihleHByZXNzaW9uLmZvcm1hdE9wdGlvbnMpfWA7XG5cdFx0fVxuXHRcdGlmIChoYXNFbGVtZW50cyhleHByZXNzaW9uLnBhcmFtZXRlcnMpKSB7XG5cdFx0XHRvdXRWYWx1ZSArPSBgLCBwYXJhbWV0ZXJzOiAke2NvbXBpbGVFeHByZXNzaW9uKGV4cHJlc3Npb24ucGFyYW1ldGVycyl9YDtcblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIFwiXCI7XG5cdH1cblx0cmV0dXJuIHNpbmdsZVBhdGggPyBvdXRWYWx1ZSA6IGB7JHtvdXRWYWx1ZX19YDtcbn1cblxuZnVuY3Rpb24gaGFzRWxlbWVudHMob2JqOiBvYmplY3QgfCB1bmRlZmluZWQpOiBib29sZWFuIHtcblx0cmV0dXJuICEhb2JqICYmIE9iamVjdC5rZXlzKG9iaikubGVuZ3RoID4gMDtcbn1cblxuLyoqXG4gKiBDb21waWxlIGEgYmluZGluZyBleHByZXNzaW9uIHBhdGguXG4gKiBAcGFyYW0gZXhwcmVzc2lvbiBUaGUgZXhwcmVzc2lvbiB0byBjb21waWxlLlxuICogQHJldHVybnMgVGhlIGNvbXBpbGVkIHBhdGguXG4gKi9cbmZ1bmN0aW9uIGNvbXBpbGVQYXRoSW5Nb2RlbDxUIGV4dGVuZHMgUHJpbWl0aXZlVHlwZT4oZXhwcmVzc2lvbjogUGF0aEluTW9kZWxFeHByZXNzaW9uPFQ+KTogc3RyaW5nIHtcblx0cmV0dXJuIGAke2V4cHJlc3Npb24ubW9kZWxOYW1lID8gZXhwcmVzc2lvbi5tb2RlbE5hbWUgKyBcIj5cIiA6IFwiXCJ9JHtleHByZXNzaW9uLnBhdGh9YDtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0VBb0lBO0FBQ0E7QUFDQTs7RUF1Q08sU0FBU0EsVUFBVUEsQ0FBQ0MsYUFBc0IsRUFBNkI7SUFDN0UsT0FBUUEsYUFBYSxFQUFlQyxLQUFLLEtBQUssVUFBVTtFQUN6RDs7RUFFQTtBQUNBO0FBQ0E7QUFDQTtFQUhBQyxRQUFBLENBQUFILFVBQUEsR0FBQUEsVUFBQTtFQXFDTyxNQUFNSSxnQkFBdUQsR0FBRztJQUN0RSxhQUFhLEVBQUU7TUFBRUMsSUFBSSxFQUFFO0lBQWtDLENBQUM7SUFDMUQsVUFBVSxFQUFFO01BQUVBLElBQUksRUFBRTtJQUErQixDQUFDO0lBQ3BELFVBQVUsRUFBRTtNQUFFQSxJQUFJLEVBQUU7SUFBK0IsQ0FBQztJQUNwRCxvQkFBb0IsRUFBRTtNQUNyQkMsV0FBVyxFQUFFO1FBQ1pDLFVBQVUsRUFBRSxXQUFXO1FBQ3ZCQyxHQUFHLEVBQUU7TUFDTixDQUFDO01BQ0RILElBQUksRUFBRTtJQUNQLENBQUM7SUFDRCxhQUFhLEVBQUU7TUFDZEMsV0FBVyxFQUFFO1FBQ1osMkNBQTJDLEVBQUUsU0FBUztRQUN0RCxvRUFBb0UsRUFBRSxrQkFBa0I7UUFDeEYsMkNBQTJDLEVBQUUsU0FBUztRQUN0RCxvRUFBb0UsRUFBRSxrQkFBa0I7UUFDeEZDLFVBQVUsRUFBRSxXQUFXO1FBQ3ZCRSxNQUFNLEVBQUU7TUFDVCxDQUFDO01BQ0RKLElBQUksRUFBRTtJQUNQLENBQUM7SUFDRCxZQUFZLEVBQUU7TUFBRUEsSUFBSSxFQUFFO0lBQWlDLENBQUM7SUFDeEQsVUFBVSxFQUFFO01BQUVBLElBQUksRUFBRTtJQUErQixDQUFDO0lBQ3BELFdBQVcsRUFBRTtNQUFFQSxJ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
|
|
1832
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJpc1Byb3BlcnR5Iiwic2VydmljZU9iamVjdCIsIl90eXBlIiwiX2V4cG9ydHMiLCJFRE1fVFlQRV9NQVBQSU5HIiwidHlwZSIsImNvbnN0cmFpbnRzIiwiJFByZWNpc2lvbiIsIiRWNCIsIiRTY2FsZSIsIiRNYXhMZW5ndGgiLCIkTnVsbGFibGUiLCJ1bnJlc29sdmFibGVFeHByZXNzaW9uIiwiZXNjYXBlWG1sQXR0cmlidXRlIiwiaW5wdXRTdHJpbmciLCJyZXBsYWNlIiwiaGFzVW5yZXNvbHZhYmxlRXhwcmVzc2lvbiIsIl9sZW4iLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJleHByZXNzaW9ucyIsIkFycmF5IiwiX2tleSIsImZpbmQiLCJleHByIiwidW5kZWZpbmVkIiwiX2NoZWNrRXhwcmVzc2lvbnNBcmVFcXVhbCIsImEiLCJiIiwidmFsdWUiLCJvcGVyYW5kIiwib3BlcmF0b3IiLCJvcGVyYW5kcyIsImV2ZXJ5IiwiZXhwcmVzc2lvbiIsInNvbWUiLCJvdGhlckV4cHJlc3Npb24iLCJjb25kaXRpb24iLCJvblRydWUiLCJvbkZhbHNlIiwib3BlcmFuZDEiLCJvcGVyYW5kMiIsImFFeHByZXNzaW9ucyIsImJFeHByZXNzaW9ucyIsImluZGV4IiwicGF0aEluTW9kZWwiLCJtb2RlbE5hbWUiLCJwYXRoIiwidGFyZ2V0RW50aXR5U2V0IiwiZm4iLCJwYXJhbWV0ZXJzIiwiYmluZGluZ1BhcmFtZXRlcnMiLCJvdGhlckZ1bmN0aW9uIiwib2JqIiwicmVmIiwiZmxhdHRlblNldEV4cHJlc3Npb24iLCJyZWR1Y2UiLCJyZXN1bHQiLCJjYW5kaWRhdGVzRm9yRmxhdHRlbmluZyIsImZvckVhY2giLCJjYW5kaWRhdGUiLCJlIiwicHVzaCIsImhhc09wcG9zaXRlRXhwcmVzc2lvbnMiLCJuZWdhdGVkRXhwcmVzc2lvbnMiLCJtYXAiLCJub3QiLCJpIiwiYW5kIiwiX2xlbjIiLCJfa2V5MiIsIndyYXBQcmltaXRpdmUiLCJpc1N0YXRpY0ZhbHNlIiwibm9uVHJpdmlhbEV4cHJlc3Npb24iLCJmaWx0ZXIiLCJpc0ZhbHNlIiwiaXNDb25zdGFudCIsImNvbnN0YW50IiwiaXNWYWxpZCIsImlzVHJ1ZSIsIm9yIiwiX2xlbjMiLCJfa2V5MyIsImlzU3RhdGljVHJ1ZSIsImlzQ29tcGFyaXNvbiIsImlzVHJ1dGh5IiwiYmluZGluZ0V4cHJlc3Npb24iLCJ2aXNpdGVkTmF2aWdhdGlvblBhdGhzIiwicGF0aFZpc2l0b3IiLCJ0YXJnZXRQYXRoIiwibG9jYWxQYXRoIiwiY29uY2F0Iiwiam9pbiIsImNvbnN0YW50VmFsdWUiLCJpc0FycmF5IiwiaXNQcmltaXRpdmVPYmplY3QiLCJ2YWx1ZU9mIiwiT2JqZWN0IiwiZW50cmllcyIsInBsYWluRXhwcmVzc2lvbiIsIl9yZWYiLCJrZXkiLCJ2YWwiLCJ3cmFwcGVkVmFsdWUiLCJyZXNvbHZlQmluZGluZ1N0cmluZyIsInRhcmdldFR5cGUiLCJzdGFydHNXaXRoIiwicGF0aEluTW9kZWxSZWdleCIsInBhdGhJbk1vZGVsUmVnZXhNYXRjaCIsImV4ZWMiLCJpc05hTiIsIk51bWJlciIsInJlZmVyZW5jZSIsImJpbmRTdGF0ZSIsInN0YXRlT2JqZWN0UHJvcCIsIl9fYmluZGluZ0luZm8iLCJ0b1N0cmluZyIsIm1vZGVsIiwic29tZXRoaW5nIiwiaXNCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24iLCJtYXliZUNvbnN0YW50IiwiaXNQYXRoSW5Nb2RlbEV4cHJlc3Npb24iLCJtYXliZUJpbmRpbmciLCJpc0NvbXBsZXhUeXBlRXhwcmVzc2lvbiIsImlzQ29uY2F0RXhwcmVzc2lvbiIsImlzSWZFbHNlRXhwcmVzc2lvbiIsImlzVW5kZWZpbmVkRXhwcmVzc2lvbiIsImV4cHJlc3Npb25Bc0V4cHJlc3Npb24iLCJvYmplY3RUeXBlIiwiY29uc3RydWN0b3IiLCJuYW1lIiwiaXNDb21wbGV4QW5ub3RhdGlvbkV4cHJlc3Npb24iLCJhbm5vdGF0aW9uVmFsdWUiLCJnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24iLCJkZWZhdWx0VmFsdWUiLCJhbm5vdGF0aW9uSWZFeHByZXNzaW9uIiwiJElmIiwicGFyc2VBbm5vdGF0aW9uQ29uZGl0aW9uIiwiJE5vdCIsImVxdWFsIiwiJEVxIiwibm90RXF1YWwiLCIkTmUiLCJncmVhdGVyVGhhbiIsIiRHdCIsImdyZWF0ZXJPckVxdWFsIiwiJEdlIiwibGVzc1RoYW4iLCIkTHQiLCJsZXNzT3JFcXVhbCIsIiRMZSIsIiRPciIsIm9yQ29uZGl0aW9uIiwiJEFuZCIsImFuZENvbmRpdGlvbiIsImFubm90YXRpb25BcHBseUV4cHJlc3Npb24iLCJoYXNPd25Qcm9wZXJ0eSIsIiRQYXRoIiwiJEZ1bmN0aW9uIiwiJEFwcGx5IiwicmVzb2x2ZUVudW1WYWx1ZSIsIiRFbnVtTWVtYmVyIiwiaWZFbHNlIiwiY29udmVydFN1YkFwcGx5UGFyYW1ldGVycyIsImFwcGx5UGFyYW0iLCJhcHBseVBhcmFtQ29udmVydGVkIiwiYXBwbHlFeHByZXNzaW9uIiwicGFyYW1ldGVyIiwidGVtcGxhdGUiLCJ0ZW1wbGF0ZVBhcmFtcyIsInNsaWNlIiwidGFyZ2V0T2JqZWN0IiwiJE5hbWUiLCIkTGFiZWxlZEVsZW1lbnQiLCJjb21wYXJpc29uIiwibGVmdE9wZXJhbmQiLCJyaWdodE9wZXJhbmQiLCJsZWZ0RXhwcmVzc2lvbiIsInJpZ2h0RXhwcmVzc2lvbiIsImNoZWNrVW5kZWZpbmVkIiwibGVmdCIsInJpZ2h0IiwicmVkdWNlZCIsImNvbmRpdGlvbkV4cHJlc3Npb24iLCJvblRydWVFeHByZXNzaW9uIiwib25GYWxzZUV4cHJlc3Npb24iLCJwYXRoSWR4IiwibXlJZkVsc2VFeHByZXNzaW9uIiwiZm9ybWF0UmVzdWx0IiwiYWxsUGFydHMiLCJ0cmFuc2Zvcm1SZWN1cnNpdmVseSIsImNvbnN0YW50UGF0aCIsInVuc2hpZnQiLCJKU09OIiwic3RyaW5naWZ5IiwiaGFzUmVmZXJlbmNlVG9EZWZhdWx0Q29udGV4dCIsImZvcm1hdHRlckZ1bmN0aW9uIiwiY29udGV4dEVudGl0eVR5cGUiLCJpZ25vcmVDb21wbGV4VHlwZSIsInBhcmFtZXRlckV4cHJlc3Npb25zIiwia2V5cyIsImZ1bmN0aW9uTmFtZSIsIl9fZnVuY3Rpb25OYW1lIiwiZm9ybWF0dGVyQ2xhc3MiLCJmb3JtYXR0ZXJOYW1lIiwic3BsaXQiLCJteUZvcm1hdEV4cHJlc3Npb24iLCJzZXRVcENvbnN0cmFpbnRzIiwidGFyZ2V0TWFwcGluZyIsInByb3BlcnR5Iiwic2NhbGUiLCJwcmVjaXNpb24iLCJtYXhMZW5ndGgiLCJudWxsYWJsZSIsImFubm90YXRpb25zIiwiVmFsaWRhdGlvbiIsIk1pbmltdW0iLCJtaW5pbXVtIiwiTWF4aW11bSIsIm1heGltdW0iLCJDb21tb24iLCJJc0RpZ2l0U2VxdWVuY2UiLCJpc0RpZ2l0U2VxdWVuY2UiLCJWNCIsImZvcm1hdFdpdGhUeXBlSW5mb3JtYXRpb24iLCJwcm9wZXJ0eUJpbmRpbmdFeHByZXNzaW9uIiwiaWdub3JlQ29uc3RyYWludHMiLCJvdXRFeHByZXNzaW9uIiwiZm9ybWF0T3B0aW9ucyIsImluZGV4T2YiLCJhc3NpZ24iLCJwYXJzZUFzU3RyaW5nIiwicGFyc2VLZWVwc0VtcHR5U3RyaW5nIiwiZmlzY2FsVHlwZSIsImdldEZpc2NhbFR5cGUiLCJ0eXBlc1N1cHBvcnRpbmdQYXJzZUVtcHR5VmFsdWVUb1plcm8iLCJpbmNsdWRlcyIsInBhcnNlRW1wdHlWYWx1ZVRvWmVybyIsImVtcHR5U3RyaW5nIiwiSXNGaXNjYWxZZWFyIiwiSXNGaXNjYWxQZXJpb2QiLCJJc0Zpc2NhbFllYXJQZXJpb2QiLCJJc0Zpc2NhbFF1YXJ0ZXIiLCJJc0Zpc2NhbFllYXJRdWFydGVyIiwiSXNGaXNjYWxXZWVrIiwiSXNGaXNjYWxZZWFyV2VlayIsIklzRGF5T2ZGaXNjYWxZZWFyIiwiYWRkVHlwZUluZm9ybWF0aW9uIiwib0Zvcm1hdE9wdGlvbnMiLCJvQ29uc3RyYWludE9wdGlvbnMiLCJfZ2V0Q29tcGxleFR5cGVGb3JtYXRPcHRpb25zRnJvbUZpcnN0UGFyYW0iLCJ1b21QYXRoIiwibW9kZSIsInByZXNlcnZlRGVjaW1hbHMiLCJza2lwRGVjaW1hbHNWYWxpZGF0aW9uIiwiY3VycmVuY3lQYXRoIiwiZGVjaW1hbHMiLCJwYXJhbSIsInNob3dOdW1iZXIiLCJzaG93TWVhc3VyZSIsImRlY2ltYWxQYWRkaW5nIiwiZnVuYyIsIm9uIiwiaXNGb3JtYXR0aW5nRm4iLCJpc0VtcHR5IiwiYUJpbmRpbmdzIiwiZmluYWxFeHByZXNzaW9uIiwiYWx3YXlzS2VlcFRhcmdldFR5cGUiLCJfbGVuNCIsImluRXhwcmVzc2lvbnMiLCJfa2V5NCIsImNvbmNhdGVuYXRlZCIsIm15Q29uY2F0RXhwcmVzc2lvbiIsImluRXhwcmVzc2lvbiIsImV4cHJlc3Npb25UeXBlIiwidHJhbnNmb3JtRnVuY3Rpb24iLCJpbmNsdWRlQWxsRXhwcmVzc2lvbiIsInN1YkV4cHJlc3Npb24iLCJiaW5kaW5nUGFyYW1ldGVyIiwibmVlZFBhcmVudGhlc2lzIiwiY29tcGlsZUNvbnN0YW50T2JqZWN0IiwiaXNOdWxsYWJsZSIsIm9iamVjdHMiLCJwcm9wZXJ0aWVzIiwiY2hpbGRSZXN1bHQiLCJjb21waWxlRXhwcmVzc2lvbiIsImNvbXBpbGVDb25zdGFudCIsImVtYmVkZGVkSW5CaW5kaW5nIiwiZG9Ob3RTdHJpbmdpZnkiLCJjb21waWxlUGF0aEluTW9kZWxFeHByZXNzaW9uIiwiZXhwcmVzc2lvbkZvckJpbmRpbmciLCJlbWJlZGRlZFNlcGFyYXRvciIsImNvbXBsZXhCaW5kaW5nRGVmaW5pdGlvbiIsImNvbXBpbGVQYXRoSW5Nb2RlbCIsIm91dEJpbmRpbmciLCJzZXBhcmF0b3IiLCJjb21waWxlQ29tcGxleFR5cGVFeHByZXNzaW9uIiwiY29tcGlsZVBhdGhQYXJhbWV0ZXIiLCJvdXRwdXRFbmQiLCJoYXNFbGVtZW50cyIsIndyYXBCaW5kaW5nRXhwcmVzc2lvbiIsInBhcmVudGhlc2lzUmVxdWlyZWQiLCJrZWVwVGFyZ2V0VHlwZSIsImhhc0VtYmVkZGVkRnVuY3Rpb25DYWxsT3JCaW5kaW5nIiwic3ViRm4iLCJzdWJTdWJGbiIsImFyZ3VtZW50U3RyaW5nIiwiYXJnIiwiZm5DYWxsIiwic3Vic3RyaW5nIiwiY29tcGFyaXNvbkV4cHJlc3Npb24iLCJjb21waWxlQ29tcGFyaXNvbkV4cHJlc3Npb24iLCJpZkVsc2VFeHByZXNzaW9uIiwic2V0RXhwcmVzc2lvbiIsImNvbmNhdEV4cHJlc3Npb24iLCJuZXN0ZWRFeHByZXNzaW9uIiwibGVuZ3RoRXhwcmVzc2lvbiIsIm5vdEV4cHJlc3Npb24iLCJ0cnV0aHlFeHByZXNzaW9uIiwiZm9ybWF0dGVyRXhwcmVzc2lvbiIsImNvbXBpbGVGb3JtYXR0ZXJFeHByZXNzaW9uIiwiY29tcGxleFR5cGVFeHByZXNzaW9uIiwiY29tcGlsZU9wZXJhbmQiLCJjb21waWxlZE9wZXJhbmQiLCJwYXJ0cyIsInNpbmdsZVBhdGgiLCJvdXRWYWx1ZSJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiQmluZGluZ1Rvb2xraXQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUge1xuXHRBY3Rpb25QYXJhbWV0ZXIsXG5cdEFuZEFubm90YXRpb25FeHByZXNzaW9uLFxuXHRBbmRDb25kaXRpb25hbEV4cHJlc3Npb24sXG5cdEFwcGx5QW5ub3RhdGlvbkV4cHJlc3Npb24sXG5cdEJvb2xlYW4sXG5cdENvbmRpdGlvbmFsQ2hlY2tPclZhbHVlLFxuXHRFbnRpdHlTZXQsXG5cdEVudGl0eVR5cGUsXG5cdEVxQW5ub3RhdGlvbkV4cHJlc3Npb24sXG5cdEVxQ29uZGl0aW9uYWxFeHByZXNzaW9uLFxuXHRHZUFubm90YXRpb25FeHByZXNzaW9uLFxuXHRHZUNvbmRpdGlvbmFsRXhwcmVzc2lvbixcblx0R3RBbm5vdGF0aW9uRXhwcmVzc2lvbixcblx0R3RDb25kaXRpb25hbEV4cHJlc3Npb24sXG5cdElmQW5ub3RhdGlvbkV4cHJlc3Npb24sXG5cdElmQW5ub3RhdGlvbkV4cHJlc3Npb25WYWx1ZSxcblx0TGVBbm5vdGF0aW9uRXhwcmVzc2lvbixcblx0TGVDb25kaXRpb25hbEV4cHJlc3Npb24sXG5cdEx0QW5ub3RhdGlvbkV4cHJlc3Npb24sXG5cdEx0Q29uZGl0aW9uYWxFeHByZXNzaW9uLFxuXHROZUFubm90YXRpb25FeHByZXNzaW9uLFxuXHROZUNvbmRpdGlvbmFsRXhwcmVzc2lvbixcblx0Tm90QW5ub3RhdGlvbkV4cHJlc3Npb24sXG5cdE5vdENvbmRpdGlvbmFsRXhwcmVzc2lvbixcblx0T3JBbm5vdGF0aW9uRXhwcmVzc2lvbixcblx0T3JDb25kaXRpb25hbEV4cHJlc3Npb24sXG5cdFBhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbixcblx0UGF0aENvbmRpdGlvbkV4cHJlc3Npb24sXG5cdFByb3BlcnR5LFxuXHRQcm9wZXJ0eUFubm90YXRpb25WYWx1ZSxcblx0Q29uc3RhbnRFeHByZXNzaW9uIGFzIFZvY2FiQ29uc3RhbnRFeHByZXNzaW9uXG59IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlc1wiO1xuaW1wb3J0IHsgQ29tbW9uQW5ub3RhdGlvblRlcm1zIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9Db21tb25cIjtcbmltcG9ydCB7IHJlc29sdmVFbnVtVmFsdWUgfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQW5ub3RhdGlvbkVudW1cIjtcbmltcG9ydCB0eXBlIHsgQmluZGluZ0luZm9Ib2xkZXIgfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQ2xhc3NTdXBwb3J0XCI7XG5cbmV4cG9ydCB0eXBlIFByaW1pdGl2ZVR5cGUgPSBzdHJpbmcgfCBudW1iZXIgfCBiaWdpbnQgfCBib29sZWFuIHwgb2JqZWN0IHwgbnVsbCB8IHVuZGVmaW5lZDtcbnR5cGUgRGVmaW5lZFByaW1pdGl2ZVR5cGUgPSBzdHJpbmcgfCBudW1iZXIgfCBiaWdpbnQgfCBib29sZWFuIHwgb2JqZWN0O1xudHlwZSBQcmltaXRpdmVUeXBlQ2FzdDxQPiA9IFAgZXh0ZW5kcyBTdHJpbmcgPyBzdHJpbmcgOiBQIGV4dGVuZHMgQm9vbGVhbiA/IGJvb2xlYW4gOiBQIGV4dGVuZHMgTnVtYmVyID8gbnVtYmVyIDogUDtcbnR5cGUgQmFzZUV4cHJlc3Npb248X1Q+ID0ge1xuXHRfdHlwZTogc3RyaW5nO1xufTtcblxuZXhwb3J0IHR5cGUgRm9ybWF0T3B0aW9ucyA9IFBhcnRpYWw8e1xuXHRjdXN0b21Vbml0czogUmVjb3JkPHN0cmluZywgb2JqZWN0Pjtcblx0Y3VzdG9tQ3VycmVuY2llczogUmVjb3JkPHN0cmluZywgb2JqZWN0Pjtcblx0ZGVjaW1hbHM6IG51bWJlcjtcblx0ZW1wdHlTdHJpbmc6IG51bGwgfCBudW1iZXIgfCBzdHJpbmc7XG5cdGZpc2NhbFR5cGU6IHN0cmluZztcblx0Z3JvdXBpbmdFbmFibGVkOiBib29sZWFuO1xuXHRtYXhGcmFjdGlvbkRpZ2l0czogbnVtYmVyO1xuXHRtYXhJbnRlZ2VyRGlnaXRzOiBudW1iZXI7XG5cdG1pbkZyYWN0aW9uRGlnaXRzOiBudW1iZXI7XG5cdG1pbkludGVnZXJEaWdpdHM6IG51bWJlcjtcblx0cGFyc2VBc1N0cmluZzogYm9vbGVhbjtcblx0cGFyc2VLZWVwc0VtcHR5U3RyaW5nOiBib29sZWFuO1xuXHRwYXR0ZXJuOiBzdHJpbmc7XG5cdHByZWNpc2lvbjogbnVtYmVyO1xuXHRwcmVzZXJ2ZURlY2ltYWxzOiBib29sZWFuO1xuXHRzaG9ydERlY2ltYWxzOiBudW1iZXI7XG5cdHNob3J0UmVmTnVtYmVyOiBudW1iZXI7XG5cdHNob3dNZWFzdXJlOiBib29sZWFuO1xuXHRzaG93TnVtYmVyOiBib29sZWFuO1xuXHRzaG93U2NhbGU6IGJvb2xlYW47XG5cdHN0eWxlOiBzdHJpbmc7XG59PjtcblxuZXhwb3J0IHR5cGUgQ29uc3RhbnRFeHByZXNzaW9uPFQ+ID0gQmFzZUV4cHJlc3Npb248VD4gJiB7XG5cdF90eXBlOiBcIkNvbnN0YW50XCI7XG5cdHZhbHVlOiBUO1xufTtcblxudHlwZSBTZXRPcGVyYXRvciA9IFwiJiZcIiB8IFwifHxcIjtcbmV4cG9ydCB0eXBlIFNldEV4cHJlc3Npb24gPSBCYXNlRXhwcmVzc2lvbjxib29sZWFuPiAmIHtcblx0X3R5cGU6IFwiU2V0XCI7XG5cdG9wZXJhdG9yOiBTZXRPcGVyYXRvcjtcblx0b3BlcmFuZHM6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPltdO1xufTtcblxuZXhwb3J0IHR5cGUgTm90RXhwcmVzc2lvbiA9IEJhc2VFeHByZXNzaW9uPGJvb2xlYW4+ICYge1xuXHRfdHlwZTogXCJOb3RcIjtcblx0b3BlcmFuZDogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+O1xufTtcblxuZXhwb3J0IHR5cGUgVHJ1dGh5RXhwcmVzc2lvbiA9IEJhc2VFeHByZXNzaW9uPGJvb2xlYW4+ICYge1xuXHRfdHlwZTogXCJUcnV0aHlcIjtcblx0b3BlcmFuZDogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHN0cmluZz47XG59O1xuXG5leHBvcnQgdHlwZSBSZWZlcmVuY2VFeHByZXNzaW9uID0gQmFzZUV4cHJlc3Npb248b2JqZWN0PiAmIHtcblx0X3R5cGU6IFwiUmVmXCI7XG5cdHJlZjogc3RyaW5nIHwgbnVsbDtcbn07XG5cbmV4cG9ydCB0eXBlIEZvcm1hdHRlckV4cHJlc3Npb248VD4gPSBCYXNlRXhwcmVzc2lvbjxUPiAmIHtcblx0X3R5cGU6IFwiRm9ybWF0dGVyXCI7XG5cdGZuOiBzdHJpbmc7XG5cdHBhcmFtZXRlcnM6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjx1bmtub3duPltdO1xufTtcblxudHlwZSBDb21wbGV4VHlwZUV4cHJlc3Npb248VD4gPSBCYXNlRXhwcmVzc2lvbjxUPiAmIHtcblx0X3R5cGU6IFwiQ29tcGxleFR5cGVcIjtcblx0dHlwZTogc3RyaW5nO1xuXHRmb3JtYXRPcHRpb25zOiBGb3JtYXRPcHRpb25zO1xuXHRjb25zdHJhaW50czogb2JqZWN0O1xuXHRwYXJhbWV0ZXJzOiBvYmplY3Q7XG5cdGJpbmRpbmdQYXJhbWV0ZXJzOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248dW5rbm93bj5bXTtcbn07XG5cbmV4cG9ydCB0eXBlIEZ1bmN0aW9uRXhwcmVzc2lvbjxUPiA9IEJhc2VFeHByZXNzaW9uPFQ+ICYge1xuXHRfdHlwZTogXCJGdW5jdGlvblwiO1xuXHRvYmo/OiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248b2JqZWN0Pjtcblx0Zm46IHN0cmluZztcblx0aXNGb3JtYXR0aW5nRm46IGJvb2xlYW47XG5cdHBhcmFtZXRlcnM6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjx1bmtub3duPltdO1xufTtcblxuZXhwb3J0IHR5cGUgQ29uY2F0RXhwcmVzc2lvbiA9IEJhc2VFeHByZXNzaW9uPHN0cmluZz4gJiB7XG5cdF90eXBlOiBcIkNvbmNhdFwiO1xuXHRleHByZXNzaW9uczogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHN0cmluZz5bXTtcbn07XG5cbmV4cG9ydCB0eXBlIExlbmd0aEV4cHJlc3Npb24gPSBCYXNlRXhwcmVzc2lvbjxzdHJpbmc+ICYge1xuXHRfdHlwZTogXCJMZW5ndGhcIjtcblx0cGF0aEluTW9kZWw6IFBhdGhJbk1vZGVsRXhwcmVzc2lvbjx1bmtub3duPjtcbn07XG5cbnR5cGUgVW5yZXNvbHZhYmxlUGF0aEV4cHJlc3Npb24gPSBCYXNlRXhwcmVzc2lvbjxzdHJpbmc+ICYge1xuXHRfdHlwZTogXCJVbnJlc29sdmFibGVcIjtcbn07XG5cbi8qKlxuICogQHR5cGVkZWYgUGF0aEluTW9kZWxFeHByZXNzaW9uXG4gKi9cbmV4cG9ydCB0eXBlIFBhdGhJbk1vZGVsRXhwcmVzc2lvbjxUPiA9IEJhc2VFeHByZXNzaW9uPFQ+ICYge1xuXHRfdHlwZTogXCJQYXRoSW5Nb2RlbFwiO1xuXHRtb2RlbE5hbWU/OiBzdHJpbmc7XG5cdHBhdGg6IHN0cmluZztcblx0dGFyZ2V0RW50aXR5U2V0PzogRW50aXR5U2V0O1xuXHR0eXBlPzogc3RyaW5nO1xuXHRjb25zdHJhaW50cz86IEJpbmRpbmdDb25zdHJhaW50cztcblx0cGFyYW1ldGVycz86IG9iamVjdDtcblx0dGFyZ2V0VHlwZT86IHN0cmluZztcblx0bW9kZT86IHN0cmluZztcblx0Zm9ybWF0T3B0aW9ucz86IEZvcm1hdE9wdGlvbnM7XG5cdGFsd2F5c0tlZXBUYXJnZXRUeXBlPzogYm9vbGVhbjtcbn07XG5cbmV4cG9ydCB0eXBlIEVtYmVkZGVkVUk1QmluZGluZ0V4cHJlc3Npb248VD4gPSBCYXNlRXhwcmVzc2lvbjxUPiAmIHtcblx0X3R5cGU6IFwiRW1iZWRkZWRCaW5kaW5nXCI7XG5cdHZhbHVlOiBzdHJpbmc7XG59O1xuXG5leHBvcnQgdHlwZSBFbWJlZGRlZFVJNUV4cHJlc3Npb25CaW5kaW5nRXhwcmVzc2lvbjxUPiA9IEJhc2VFeHByZXNzaW9uPFQ+ICYge1xuXHRfdHlwZTogXCJFbWJlZGRlZEV4cHJlc3Npb25CaW5kaW5nXCI7XG5cdHZhbHVlOiBzdHJpbmc7XG59O1xuXG5leHBvcnQgdHlwZSBDb21wYXJpc29uT3BlcmF0b3IgPSBcIj09PVwiIHwgXCIhPT1cIiB8IFwiPj1cIiB8IFwiPlwiIHwgXCI8PVwiIHwgXCI8XCI7XG5leHBvcnQgdHlwZSBDb21wYXJpc29uRXhwcmVzc2lvbiA9IEJhc2VFeHByZXNzaW9uPGJvb2xlYW4+ICYge1xuXHRfdHlwZTogXCJDb21wYXJpc29uXCI7XG5cdG9wZXJhdG9yOiBDb21wYXJpc29uT3BlcmF0b3I7XG5cdG9wZXJhbmQxOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248dW5rbm93bj47XG5cdG9wZXJhbmQyOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248dW5rbm93bj47XG59O1xuXG5leHBvcnQgdHlwZSBJZkVsc2VFeHByZXNzaW9uPFQ+ID0gQmFzZUV4cHJlc3Npb248VD4gJiB7XG5cdF90eXBlOiBcIklmRWxzZVwiO1xuXHRjb25kaXRpb246IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPjtcblx0b25UcnVlOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248VD47XG5cdG9uRmFsc2U6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxUPjtcbn07XG5leHBvcnQgZnVuY3Rpb24gaXNQcm9wZXJ0eShzZXJ2aWNlT2JqZWN0OiB1bmtub3duKTogc2VydmljZU9iamVjdCBpcyBQcm9wZXJ0eSB7XG5cdHJldHVybiAoc2VydmljZU9iamVjdCBhcyBQcm9wZXJ0eSk/Ll90eXBlID09PSBcIlByb3BlcnR5XCI7XG59XG5cbi8qKlxuICogQW4gZXhwcmVzc2lvbiB0aGF0IGV2YWx1YXRlcyB0byB0eXBlIFQuXG4gKiBAdHlwZWRlZiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb25cbiAqL1xuZXhwb3J0IHR5cGUgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFQ+ID1cblx0fCBVbnJlc29sdmFibGVQYXRoRXhwcmVzc2lvblxuXHR8IENvbnN0YW50RXhwcmVzc2lvbjxUPlxuXHR8IFNldEV4cHJlc3Npb25cblx0fCBOb3RFeHByZXNzaW9uXG5cdHwgVHJ1dGh5RXhwcmVzc2lvblxuXHR8IENvbmNhdEV4cHJlc3Npb25cblx0fCBMZW5ndGhFeHByZXNzaW9uXG5cdHwgUGF0aEluTW9kZWxFeHByZXNzaW9uPFQ+XG5cdHwgRW1iZWRkZWRVSTVCaW5kaW5nRXhwcmVzc2lvbjxUPlxuXHR8IEVtYmVkZGVkVUk1RXhwcmVzc2lvbkJpbmRpbmdFeHByZXNzaW9uPFQ+XG5cdHwgQ29tcGFyaXNvbkV4cHJlc3Npb25cblx0fCBJZkVsc2VFeHByZXNzaW9uPFQ+XG5cdHwgRm9ybWF0dGVyRXhwcmVzc2lvbjxUPlxuXHR8IENvbXBsZXhUeXBlRXhwcmVzc2lvbjxUPlxuXHR8IFJlZmVyZW5jZUV4cHJlc3Npb25cblx0fCBGdW5jdGlvbkV4cHJlc3Npb248VD47XG5cbnR5cGUgVHlwZU1hcHBpbmdEZWZpbml0aW9uID0ge1xuXHR0eXBlOiBzdHJpbmc7XG5cdGNvbnN0cmFpbnRzPzoge1xuXHRcdCRQcmVjaXNpb24/OiBzdHJpbmc7XG5cdFx0JFY0Pzogc3RyaW5nO1xuXHRcdCRTY2FsZT86IHN0cmluZztcblx0XHQkTWF4TGVuZ3RoPzogc3RyaW5nO1xuXHRcdCROdWxsYWJsZT86IHN0cmluZztcblx0XHRcIkBPcmcuT0RhdGEuVmFsaWRhdGlvbi5WMS5NaW5pbXVtLyREZWNpbWFsXCI/OiBzdHJpbmc7XG5cdFx0XCJAT3JnLk9EYXRhLlZhbGlkYXRpb24uVjEuTWluaW11bUBPcmcuT0RhdGEuVmFsaWRhdGlvbi5WMS5FeGNsdXNpdmVcIj86IHN0cmluZztcblx0XHRcIkBPcmcuT0RhdGEuVmFsaWRhdGlvbi5WMS5NYXhpbXVtLyREZWNpbWFsXCI/OiBzdHJpbmc7XG5cdFx0XCJAT3JnLk9EYXRhLlZhbGlkYXRpb24uVjEuTWF4aW11bUBPcmcuT0RhdGEuVmFsaWRhdGlvbi5WMS5FeGNsdXNpdmVcIj86IHN0cmluZztcblx0XHRcIkBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuSXNEaWdpdFNlcXVlbmNlXCI/OiBzdHJpbmc7XG5cdH07XG59O1xuZXhwb3J0IGNvbnN0IEVETV9UWVBFX01BUFBJTkc6IFJlY29yZDxzdHJpbmcsIFR5cGVNYXBwaW5nRGVmaW5pdGlvbj4gPSB7XG5cdFwiRWRtLkJvb2xlYW5cIjogeyB0eXBlOiBcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLkJvb2xlYW5cIiB9LFxuXHRcIkVkbS5CeXRlXCI6IHsgdHlwZTogXCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5CeXRlXCIgfSxcblx0XCJFZG0uRGF0ZVwiOiB7IHR5cGU6IFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuRGF0ZVwiIH0sXG5cdFwiRWRtLkRhdGVUaW1lT2Zmc2V0XCI6IHtcblx0XHRjb25zdHJhaW50czoge1xuXHRcdFx0JFByZWNpc2lvbjogXCJwcmVjaXNpb25cIixcblx0XHRcdCRWNDogXCJWNFwiXG5cdFx0fSxcblx0XHR0eXBlOiBcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLkRhdGVUaW1lT2Zmc2V0XCJcblx0fSxcblx0XCJFZG0uRGVjaW1hbFwiOiB7XG5cdFx0Y29uc3RyYWludHM6IHtcblx0XHRcdFwiQE9yZy5PRGF0YS5WYWxpZGF0aW9uLlYxLk1pbmltdW0vJERlY2ltYWxcIjogXCJtaW5pbXVtXCIsXG5cdFx0XHRcIkBPcmcuT0RhdGEuVmFsaWRhdGlvbi5WMS5NaW5pbXVtQE9yZy5PRGF0YS5WYWxpZGF0aW9uLlYxLkV4Y2x1c2l2ZVwiOiBcIm1pbmltdW1FeGNsdXNpdmVcIixcblx0XHRcdFwiQE9yZy5PRGF0YS5WYWxpZGF0aW9uLlYxLk1heGltdW0vJERlY2ltYWxcIjogXCJtYXhpbXVtXCIsXG5cdFx0XHRcIkBPcmcuT0RhdGEuVmFsaWRhdGlvbi5WMS5NYXhpbXVtQE9yZy5PRGF0YS5WYWxpZGF0aW9uLlYxLkV4Y2x1c2l2ZVwiOiBcIm1heGltdW1FeGNsdXNpdmVcIixcblx0XHRcdCRQcmVjaXNpb246IFwicHJlY2lzaW9uXCIsXG5cdFx0XHQkU2NhbGU6IFwic2NhbGVcIlxuXHRcdH0sXG5cdFx0dHlwZTogXCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5EZWNpbWFsXCJcblx0fSxcblx0XCJFZG0uRG91YmxlXCI6IHsgdHlwZTogXCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5Eb3VibGVcIiB9LFxuXHRcIkVkbS5HdWlkXCI6IHsgdHlwZTogXCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5HdWlkXCIgfSxcblx0XCJFZG0uSW50MTZcIjogeyB0eXBlOiBcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLkludDE2XCIgfSxcblx0XCJFZG0uSW50MzJcIjogeyB0eXBlOiBcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLkludDMyXCIgfSxcblx0XCJFZG0uSW50NjRcIjogeyB0eXBlOiBcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLkludDY0XCIgfSxcblx0XCJFZG0uU0J5dGVcIjogeyB0eXBlOiBcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLlNCeXRlXCIgfSxcblx0XCJFZG0uU2luZ2xlXCI6IHsgdHlwZTogXCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5TaW5nbGVcIiB9LFxuXHRcIkVkbS5TdHJlYW1cIjogeyB0eXBlOiBcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLlN0cmVhbVwiIH0sXG5cdFwiRWRtLkJpbmFyeVwiOiB7IHR5cGU6IFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuU3RyZWFtXCIgfSxcblx0XCJFZG0uU3RyaW5nXCI6IHtcblx0XHRjb25zdHJhaW50czoge1xuXHRcdFx0XCJAY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLklzRGlnaXRTZXF1ZW5jZVwiOiBcImlzRGlnaXRTZXF1ZW5jZVwiLFxuXHRcdFx0JE1heExlbmd0aDogXCJtYXhMZW5ndGhcIixcblx0XHRcdCROdWxsYWJsZTogXCJudWxsYWJsZVwiXG5cdFx0fSxcblx0XHR0eXBlOiBcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLlN0cmluZ1wiXG5cdH0sXG5cdFwiRWRtLlRpbWVPZkRheVwiOiB7XG5cdFx0Y29uc3RyYWludHM6IHtcblx0XHRcdCRQcmVjaXNpb246IFwicHJlY2lzaW9uXCJcblx0XHR9LFxuXHRcdHR5cGU6IFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuVGltZU9mRGF5XCJcblx0fVxufTtcblxuLyoqXG4gKiBBbiBleHByZXNzaW9uIHRoYXQgZXZhbHVhdGVzIHRvIHR5cGUgVCwgb3IgYSBjb25zdGFudCB2YWx1ZSBvZiB0eXBlIFRcbiAqL1xuZXhwb3J0IHR5cGUgRXhwcmVzc2lvbk9yUHJpbWl0aXZlPFQgZXh0ZW5kcyBQcmltaXRpdmVUeXBlPiA9IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxUPiB8IFQ7XG5cbmV4cG9ydCBjb25zdCB1bnJlc29sdmFibGVFeHByZXNzaW9uOiBVbnJlc29sdmFibGVQYXRoRXhwcmVzc2lvbiA9IHtcblx0X3R5cGU6IFwiVW5yZXNvbHZhYmxlXCJcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBlc2NhcGVYbWxBdHRyaWJ1dGUoaW5wdXRTdHJpbmc6IHN0cmluZyk6IHN0cmluZyB7XG5cdHJldHVybiBpbnB1dFN0cmluZy5yZXBsYWNlKC8nL2csIFwiXFxcXCdcIik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoYXNVbnJlc29sdmFibGVFeHByZXNzaW9uKC4uLmV4cHJlc3Npb25zOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248dW5rbm93bj5bXSk6IGJvb2xlYW4ge1xuXHRyZXR1cm4gZXhwcmVzc2lvbnMuZmluZCgoZXhwcikgPT4gZXhwci5fdHlwZSA9PT0gXCJVbnJlc29sdmFibGVcIikgIT09IHVuZGVmaW5lZDtcbn1cbi8qKlxuICogQ2hlY2sgdHdvIGV4cHJlc3Npb25zIGZvciAoZGVlcCkgZXF1YWxpdHkuXG4gKiBAcGFyYW0gYVxuICogQHBhcmFtIGJcbiAqIEByZXR1cm5zIGB0cnVlYCBpZiB0aGUgdHdvIGV4cHJlc3Npb25zIGFyZSBlcXVhbFxuICovXG5leHBvcnQgZnVuY3Rpb24gX2NoZWNrRXhwcmVzc2lvbnNBcmVFcXVhbDxUPihhOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248VD4sIGI6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxUPik6IGJvb2xlYW4ge1xuXHRpZiAoYS5fdHlwZSAhPT0gYi5fdHlwZSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdHN3aXRjaCAoYS5fdHlwZSkge1xuXHRcdGNhc2UgXCJVbnJlc29sdmFibGVcIjpcblx0XHRcdHJldHVybiBmYWxzZTsgLy8gVW5yZXNvbHZhYmxlIGlzIG5ldmVyIGVxdWFsIHRvIGFueXRoaW5nIGV2ZW4gaXRzZWxmXG5cdFx0Y2FzZSBcIkNvbnN0YW50XCI6XG5cdFx0Y2FzZSBcIkVtYmVkZGVkQmluZGluZ1wiOlxuXHRcdGNhc2UgXCJFbWJlZGRlZEV4cHJlc3Npb25CaW5kaW5nXCI6XG5cdFx0XHRyZXR1cm4gYS52YWx1ZSA9PT0gKGIgYXMgQ29uc3RhbnRFeHByZXNzaW9uPFQ+KS52YWx1ZTtcblxuXHRcdGNhc2UgXCJOb3RcIjpcblx0XHRcdHJldHVybiBfY2hlY2tFeHByZXNzaW9uc0FyZUVxdWFsKGEub3BlcmFuZCwgKGIgYXMgTm90RXhwcmVzc2lvbikub3BlcmFuZCk7XG5cdFx0Y2FzZSBcIlRydXRoeVwiOlxuXHRcdFx0cmV0dXJuIF9jaGVja0V4cHJlc3Npb25zQXJlRXF1YWwoYS5vcGVyYW5kLCAoYiBhcyBUcnV0aHlFeHByZXNzaW9uKS5vcGVyYW5kKTtcblx0XHRjYXNlIFwiU2V0XCI6XG5cdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRhLm9wZXJhdG9yID09PSAoYiBhcyBTZXRFeHByZXNzaW9uKS5vcGVyYXRvciAmJlxuXHRcdFx0XHRhLm9wZXJhbmRzLmxlbmd0aCA9PT0gKGIgYXMgU2V0RXhwcmVzc2lvbikub3BlcmFuZHMubGVuZ3RoICYmXG5cdFx0XHRcdGEub3BlcmFuZHMuZXZlcnkoKGV4cHJlc3Npb24pID0+XG5cdFx0XHRcdFx0KGIgYXMgU2V0RXhwcmVzc2lvbikub3BlcmFuZHMuc29tZSgob3RoZXJFeHByZXNzaW9uKSA9PiBfY2hlY2tFeHByZXNzaW9uc0FyZUVxdWFsKGV4cHJlc3Npb24sIG90aGVyRXhwcmVzc2lvbikpXG5cdFx0XHRcdClcblx0XHRcdCk7XG5cblx0XHRjYXNlIFwiSWZFbHNlXCI6XG5cdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRfY2hlY2tFeHByZXNzaW9uc0FyZUVxdWFsKGEuY29uZGl0aW9uLCAoYiBhcyBJZkVsc2VFeHByZXNzaW9uPFQ+KS5jb25kaXRpb24pICYmXG5cdFx0XHRcdF9jaGVja0V4cHJlc3Npb25zQXJlRXF1YWwoYS5vblRydWUsIChiIGFzIElmRWxzZUV4cHJlc3Npb248VD4pLm9uVHJ1ZSkgJiZcblx0XHRcdFx0X2NoZWNrRXhwcmVzc2lvbnNBcmVFcXVhbChhLm9uRmFsc2UsIChiIGFzIElmRWxzZUV4cHJlc3Npb248VD4pLm9uRmFsc2UpXG5cdFx0XHQpO1xuXG5cdFx0Y2FzZSBcIkNvbXBhcmlzb25cIjpcblx0XHRcdHJldHVybiAoXG5cdFx0XHRcdGEub3BlcmF0b3IgPT09IChiIGFzIENvbXBhcmlzb25FeHByZXNzaW9uKS5vcGVyYXRvciAmJlxuXHRcdFx0XHRfY2hlY2tFeHByZXNzaW9uc0FyZUVxdWFsKGEub3BlcmFuZDEsIChiIGFzIENvbXBhcmlzb25FeHByZXNzaW9uKS5vcGVyYW5kMSkgJiZcblx0XHRcdFx0X2NoZWNrRXhwcmVzc2lvbnNBcmVFcXVhbChhLm9wZXJhbmQyLCAoYiBhcyBDb21wYXJpc29uRXhwcmVzc2lvbikub3BlcmFuZDIpXG5cdFx0XHQpO1xuXG5cdFx0Y2FzZSBcIkNvbmNhdFwiOlxuXHRcdFx0Y29uc3QgYUV4cHJlc3Npb25zID0gYS5leHByZXNzaW9ucztcblx0XHRcdGNvbnN0IGJFeHByZXNzaW9ucyA9IChiIGFzIENvbmNhdEV4cHJlc3Npb24pLmV4cHJlc3Npb25zO1xuXHRcdFx0aWYgKGFFeHByZXNzaW9ucy5sZW5ndGggIT09IGJFeHByZXNzaW9ucy5sZW5ndGgpIHtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIGFFeHByZXNzaW9ucy5ldmVyeSgoZXhwcmVzc2lvbiwgaW5kZXgpID0+IHtcblx0XHRcdFx0cmV0dXJuIF9jaGVja0V4cHJlc3Npb25zQXJlRXF1YWwoZXhwcmVzc2lvbiwgYkV4cHJlc3Npb25zW2luZGV4XSk7XG5cdFx0XHR9KTtcblxuXHRcdGNhc2UgXCJMZW5ndGhcIjpcblx0XHRcdHJldHVybiBfY2hlY2tFeHByZXNzaW9uc0FyZUVxdWFsKGEucGF0aEluTW9kZWwsIChiIGFzIExlbmd0aEV4cHJlc3Npb24pLnBhdGhJbk1vZGVsKTtcblxuXHRcdGNhc2UgXCJQYXRoSW5Nb2RlbFwiOlxuXHRcdFx0cmV0dXJuIChcblx0XHRcdFx0YS5tb2RlbE5hbWUgPT09IChiIGFzIFBhdGhJbk1vZGVsRXhwcmVzc2lvbjxUPikubW9kZWxOYW1lICYmXG5cdFx0XHRcdGEucGF0aCA9PT0gKGIgYXMgUGF0aEluTW9kZWxFeHByZXNzaW9uPFQ+KS5wYXRoICYmXG5cdFx0XHRcdGEudGFyZ2V0RW50aXR5U2V0ID09PSAoYiBhcyBQYXRoSW5Nb2RlbEV4cHJlc3Npb248VD4pLnRhcmdldEVudGl0eVNldFxuXHRcdFx0KTtcblxuXHRcdGNhc2UgXCJGb3JtYXR0ZXJcIjpcblx0XHRcdHJldHVybiAoXG5cdFx0XHRcdGEuZm4gPT09IChiIGFzIEZvcm1hdHRlckV4cHJlc3Npb248VD4pLmZuICYmXG5cdFx0XHRcdGEucGFyYW1ldGVycy5sZW5ndGggPT09IChiIGFzIEZvcm1hdHRlckV4cHJlc3Npb248VD4pLnBhcmFtZXRlcnMubGVuZ3RoICYmXG5cdFx0XHRcdGEucGFyYW1ldGVycy5ldmVyeSgodmFsdWUsIGluZGV4KSA9PiBfY2hlY2tFeHByZXNzaW9uc0FyZUVxdWFsKChiIGFzIEZvcm1hdHRlckV4cHJlc3Npb248VD4pLnBhcmFtZXRlcnNbaW5kZXhdLCB2YWx1ZSkpXG5cdFx0XHQpO1xuXHRcdGNhc2UgXCJDb21wbGV4VHlwZVwiOlxuXHRcdFx0cmV0dXJuIChcblx0XHRcdFx0YS50eXBlID09PSAoYiBhcyBDb21wbGV4VHlwZUV4cHJlc3Npb248VD4pLnR5cGUgJiZcblx0XHRcdFx0YS5iaW5kaW5nUGFyYW1ldGVycy5sZW5ndGggPT09IChiIGFzIENvbXBsZXhUeXBlRXhwcmVzc2lvbjxUPikuYmluZGluZ1BhcmFtZXRlcnMubGVuZ3RoICYmXG5cdFx0XHRcdGEuYmluZGluZ1BhcmFtZXRlcnMuZXZlcnkoKHZhbHVlLCBpbmRleCkgPT5cblx0XHRcdFx0XHRfY2hlY2tFeHByZXNzaW9uc0FyZUVxdWFsKChiIGFzIENvbXBsZXhUeXBlRXhwcmVzc2lvbjxUPikuYmluZGluZ1BhcmFtZXRlcnNbaW5kZXhdLCB2YWx1ZSlcblx0XHRcdFx0KVxuXHRcdFx0KTtcblx0XHRjYXNlIFwiRnVuY3Rpb25cIjpcblx0XHRcdGNvbnN0IG90aGVyRnVuY3Rpb24gPSBiIGFzIEZ1bmN0aW9uRXhwcmVzc2lvbjxUPjtcblx0XHRcdGlmIChhLm9iaiA9PT0gdW5kZWZpbmVkIHx8IG90aGVyRnVuY3Rpb24ub2JqID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0cmV0dXJuIGEub2JqID09PSBvdGhlckZ1bmN0aW9uO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRhLmZuID09PSBvdGhlckZ1bmN0aW9uLmZuICYmXG5cdFx0XHRcdF9jaGVja0V4cHJlc3Npb25zQXJlRXF1YWwoYS5vYmosIG90aGVyRnVuY3Rpb24ub2JqKSAmJlxuXHRcdFx0XHRhLnBhcmFtZXRlcnMubGVuZ3RoID09PSBvdGhlckZ1bmN0aW9uLnBhcmFtZXRlcnMubGVuZ3RoICYmXG5cdFx0XHRcdGEucGFyYW1ldGVycy5ldmVyeSgodmFsdWUsIGluZGV4KSA9PiBfY2hlY2tFeHByZXNzaW9uc0FyZUVxdWFsKG90aGVyRnVuY3Rpb24ucGFyYW1ldGVyc1tpbmRleF0sIHZhbHVlKSlcblx0XHRcdCk7XG5cblx0XHRjYXNlIFwiUmVmXCI6XG5cdFx0XHRyZXR1cm4gYS5yZWYgPT09IChiIGFzIFJlZmVyZW5jZUV4cHJlc3Npb24pLnJlZjtcblx0fVxuXHRyZXR1cm4gZmFsc2U7XG59XG5cbi8qKlxuICogQ29udmVydHMgYSBuZXN0ZWQgU2V0RXhwcmVzc2lvbiBieSBpbmxpbmluZyBvcGVyYW5kcyBvZiB0eXBlIFNldEV4cHJlc3Npb24gd2l0aCB0aGUgc2FtZSBvcGVyYXRvci5cbiAqIEBwYXJhbSBleHByZXNzaW9uIFRoZSBleHByZXNzaW9uIHRvIGZsYXR0ZW5cbiAqIEByZXR1cm5zIEEgbmV3IFNldEV4cHJlc3Npb24gd2l0aCB0aGUgc2FtZSBvcGVyYXRvclxuICovXG5mdW5jdGlvbiBmbGF0dGVuU2V0RXhwcmVzc2lvbihleHByZXNzaW9uOiBTZXRFeHByZXNzaW9uKTogU2V0RXhwcmVzc2lvbiB7XG5cdHJldHVybiBleHByZXNzaW9uLm9wZXJhbmRzLnJlZHVjZShcblx0XHQocmVzdWx0OiBTZXRFeHByZXNzaW9uLCBvcGVyYW5kKSA9PiB7XG5cdFx0XHRjb25zdCBjYW5kaWRhdGVzRm9yRmxhdHRlbmluZyA9XG5cdFx0XHRcdG9wZXJhbmQuX3R5cGUgPT09IFwiU2V0XCIgJiYgb3BlcmFuZC5vcGVyYXRvciA9PT0gZXhwcmVzc2lvbi5vcGVyYXRvciA/IG9wZXJhbmQub3BlcmFuZHMgOiBbb3BlcmFuZF07XG5cdFx0XHRjYW5kaWRhdGVzRm9yRmxhdHRlbmluZy5mb3JFYWNoKChjYW5kaWRhdGUpID0+IHtcblx0XHRcdFx0aWYgKHJlc3VsdC5vcGVyYW5kcy5ldmVyeSgoZSkgPT4gIV9jaGVja0V4cHJlc3Npb25zQXJlRXF1YWwoZSwgY2FuZGlkYXRlKSkpIHtcblx0XHRcdFx0XHRyZXN1bHQub3BlcmFuZHMucHVzaChjYW5kaWRhdGUpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHRcdHJldHVybiByZXN1bHQ7XG5cdFx0fSxcblx0XHR7IF90eXBlOiBcIlNldFwiLCBvcGVyYXRvcjogZXhwcmVzc2lvbi5vcGVyYXRvciwgb3BlcmFuZHM6IFtdIH1cblx0KTtcbn1cblxuLyoqXG4gKiBEZXRlY3RzIHdoZXRoZXIgYW4gYXJyYXkgb2YgYm9vbGVhbiBleHByZXNzaW9ucyBjb250YWlucyBhbiBleHByZXNzaW9uIGFuZCBpdHMgbmVnYXRpb24uXG4gKiBAcGFyYW0gZXhwcmVzc2lvbnMgQXJyYXkgb2YgZXhwcmVzc2lvbnNcbiAqIEByZXR1cm5zIGB0cnVlYCBpZiB0aGUgc2V0IG9mIGV4cHJlc3Npb25zIGNvbnRhaW5zIGFuIGV4cHJlc3Npb24gYW5kIGl0cyBuZWdhdGlvblxuICovXG5mdW5jdGlvbiBoYXNPcHBvc2l0ZUV4cHJlc3Npb25zKGV4cHJlc3Npb25zOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj5bXSk6IGJvb2xlYW4ge1xuXHRjb25zdCBuZWdhdGVkRXhwcmVzc2lvbnMgPSBleHByZXNzaW9ucy5tYXAobm90KTtcblx0cmV0dXJuIGV4cHJlc3Npb25zLnNvbWUoKGV4cHJlc3Npb24sIGluZGV4KSA9PiB7XG5cdFx0Zm9yIChsZXQgaSA9IGluZGV4ICsgMTsgaSA8IG5lZ2F0ZWRFeHByZXNzaW9ucy5sZW5ndGg7IGkrKykge1xuXHRcdFx0aWYgKF9jaGVja0V4cHJlc3Npb25zQXJlRXF1YWwoZXhwcmVzc2lvbiwgbmVnYXRlZEV4cHJlc3Npb25zW2ldKSkge1xuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9KTtcbn1cblxuLyoqXG4gKiBMb2dpY2FsIGBhbmRgIGV4cHJlc3Npb24uXG4gKlxuICogVGhlIGV4cHJlc3Npb24gaXMgc2ltcGxpZmllZCB0byBmYWxzZSBpZiB0aGlzIGNhbiBiZSBkZWNpZGVkIHN0YXRpY2FsbHkgKHRoYXQgaXMsIGlmIG9uZSBvcGVyYW5kIGlzIGEgY29uc3RhbnRcbiAqIGZhbHNlIG9yIGlmIHRoZSBleHByZXNzaW9uIGNvbnRhaW5zIGFuIG9wZXJhbmQgYW5kIGl0cyBuZWdhdGlvbikuXG4gKiBAcGFyYW0gb3BlcmFuZHMgRXhwcmVzc2lvbnMgdG8gY29ubmVjdCBieSBgYW5kYFxuICogQHJldHVybnMgRXhwcmVzc2lvbiBldmFsdWF0aW5nIHRvIGJvb2xlYW5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFuZCguLi5vcGVyYW5kczogRXhwcmVzc2lvbk9yUHJpbWl0aXZlPGJvb2xlYW4+W10pOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4ge1xuXHRjb25zdCBleHByZXNzaW9ucyA9IGZsYXR0ZW5TZXRFeHByZXNzaW9uKHtcblx0XHRfdHlwZTogXCJTZXRcIixcblx0XHRvcGVyYXRvcjogXCImJlwiLFxuXHRcdG9wZXJhbmRzOiBvcGVyYW5kcy5tYXAod3JhcFByaW1pdGl2ZSlcblx0fSkub3BlcmFuZHM7XG5cblx0aWYgKGhhc1VucmVzb2x2YWJsZUV4cHJlc3Npb24oLi4uZXhwcmVzc2lvbnMpKSB7XG5cdFx0cmV0dXJuIHVucmVzb2x2YWJsZUV4cHJlc3Npb247XG5cdH1cblx0bGV0IGlzU3RhdGljRmFsc2UgPSBmYWxzZTtcblx0Y29uc3Qgbm9uVHJpdmlhbEV4cHJlc3Npb24gPSBleHByZXNzaW9ucy5maWx0ZXIoKGV4cHJlc3Npb24pID0+IHtcblx0XHRpZiAoaXNGYWxzZShleHByZXNzaW9uKSkge1xuXHRcdFx0aXNTdGF0aWNGYWxzZSA9IHRydWU7XG5cdFx0fVxuXHRcdHJldHVybiAhaXNDb25zdGFudChleHByZXNzaW9uKTtcblx0fSk7XG5cdGlmIChpc1N0YXRpY0ZhbHNlKSB7XG5cdFx0cmV0dXJuIGNvbnN0YW50KGZhbHNlKTtcblx0fSBlbHNlIGlmIChub25Ucml2aWFsRXhwcmVzc2lvbi5sZW5ndGggPT09IDApIHtcblx0XHQvLyBSZXNvbHZlIHRoZSBjb25zdGFudCB0aGVuXG5cdFx0Y29uc3QgaXNWYWxpZCA9IGV4cHJlc3Npb25zLnJlZHVjZSgocmVzdWx0LCBleHByZXNzaW9uKSA9PiByZXN1bHQgJiYgaXNUcnVlKGV4cHJlc3Npb24pLCB0cnVlKTtcblx0XHRyZXR1cm4gY29uc3RhbnQoaXNWYWxpZCk7XG5cdH0gZWxzZSBpZiAobm9uVHJpdmlhbEV4cHJlc3Npb24ubGVuZ3RoID09PSAxKSB7XG5cdFx0cmV0dXJuIG5vblRyaXZpYWxFeHByZXNzaW9uWzBdO1xuXHR9IGVsc2UgaWYgKGhhc09wcG9zaXRlRXhwcmVzc2lvbnMobm9uVHJpdmlhbEV4cHJlc3Npb24pKSB7XG5cdFx0cmV0dXJuIGNvbnN0YW50KGZhbHNlKTtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0X3R5cGU6IFwiU2V0XCIsXG5cdFx0XHRvcGVyYXRvcjogXCImJlwiLFxuXHRcdFx0b3BlcmFuZHM6IG5vblRyaXZpYWxFeHByZXNzaW9uXG5cdFx0fTtcblx0fVxufVxuXG4vKipcbiAqIExvZ2ljYWwgYG9yYCBleHByZXNzaW9uLlxuICpcbiAqIFRoZSBleHByZXNzaW9uIGlzIHNpbXBsaWZpZWQgdG8gdHJ1ZSBpZiB0aGlzIGNhbiBiZSBkZWNpZGVkIHN0YXRpY2FsbHkgKHRoYXQgaXMsIGlmIG9uZSBvcGVyYW5kIGlzIGEgY29uc3RhbnRcbiAqIHRydWUgb3IgaWYgdGhlIGV4cHJlc3Npb24gY29udGFpbnMgYW4gb3BlcmFuZCBhbmQgaXRzIG5lZ2F0aW9uKS5cbiAqIEBwYXJhbSBvcGVyYW5kcyBFeHByZXNzaW9ucyB0byBjb25uZWN0IGJ5IGBvcmBcbiAqIEByZXR1cm5zIEV4cHJlc3Npb24gZXZhbHVhdGluZyB0byBib29sZWFuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBvciguLi5vcGVyYW5kczogRXhwcmVzc2lvbk9yUHJpbWl0aXZlPGJvb2xlYW4+W10pOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4ge1xuXHRjb25zdCBleHByZXNzaW9ucyA9IGZsYXR0ZW5TZXRFeHByZXNzaW9uKHtcblx0XHRfdHlwZTogXCJTZXRcIixcblx0XHRvcGVyYXRvcjogXCJ8fFwiLFxuXHRcdG9wZXJhbmRzOiBvcGVyYW5kcy5tYXAod3JhcFByaW1pdGl2ZSlcblx0fSkub3BlcmFuZHM7XG5cdGlmIChoYXNVbnJlc29sdmFibGVFeHByZXNzaW9uKC4uLmV4cHJlc3Npb25zKSkge1xuXHRcdHJldHVybiB1bnJlc29sdmFibGVFeHByZXNzaW9uO1xuXHR9XG5cdGxldCBpc1N0YXRpY1RydWUgPSBmYWxzZTtcblx0Y29uc3Qgbm9uVHJpdmlhbEV4cHJlc3Npb24gPSBleHByZXNzaW9ucy5maWx0ZXIoKGV4cHJlc3Npb24pID0+IHtcblx0XHRpZiAoaXNUcnVlKGV4cHJlc3Npb24pKSB7XG5cdFx0XHRpc1N0YXRpY1RydWUgPSB0cnVlO1xuXHRcdH1cblx0XHRyZXR1cm4gIWlzQ29uc3RhbnQoZXhwcmVzc2lvbikgfHwgZXhwcmVzc2lvbi52YWx1ZTtcblx0fSk7XG5cdGlmIChpc1N0YXRpY1RydWUpIHtcblx0XHRyZXR1cm4gY29uc3RhbnQodHJ1ZSk7XG5cdH0gZWxzZSBpZiAobm9uVHJpdmlhbEV4cHJlc3Npb24ubGVuZ3RoID09PSAwKSB7XG5cdFx0Ly8gUmVzb2x2ZSB0aGUgY29uc3RhbnQgdGhlblxuXHRcdGNvbnN0IGlzVmFsaWQgPSBleHByZXNzaW9ucy5yZWR1Y2UoKHJlc3VsdCwgZXhwcmVzc2lvbikgPT4gcmVzdWx0ICYmIGlzVHJ1ZShleHByZXNzaW9uKSwgdHJ1ZSk7XG5cdFx0cmV0dXJuIGNvbnN0YW50KGlzVmFsaWQpO1xuXHR9IGVsc2UgaWYgKG5vblRyaXZpYWxFeHByZXNzaW9uLmxlbmd0aCA9PT0gMSkge1xuXHRcdHJldHVybiBub25Ucml2aWFsRXhwcmVzc2lvblswXTtcblx0fSBlbHNlIGlmIChoYXNPcHBvc2l0ZUV4cHJlc3Npb25zKG5vblRyaXZpYWxFeHByZXNzaW9uKSkge1xuXHRcdHJldHVybiBjb25zdGFudCh0cnVlKTtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0X3R5cGU6IFwiU2V0XCIsXG5cdFx0XHRvcGVyYXRvcjogXCJ8fFwiLFxuXHRcdFx0b3BlcmFuZHM6IG5vblRyaXZpYWxFeHByZXNzaW9uXG5cdFx0fTtcblx0fVxufVxuXG4vKipcbiAqIExvZ2ljYWwgYG5vdGAgb3BlcmF0b3IuXG4gKiBAcGFyYW0gb3BlcmFuZCBUaGUgZXhwcmVzc2lvbiB0byByZXZlcnNlXG4gKiBAcmV0dXJucyBUaGUgcmVzdWx0aW5nIGV4cHJlc3Npb24gdGhhdCBldmFsdWF0ZXMgdG8gYm9vbGVhblxuICovXG5leHBvcnQgZnVuY3Rpb24gbm90KG9wZXJhbmQ6IEV4cHJlc3Npb25PclByaW1pdGl2ZTxib29sZWFuPik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiB7XG5cdG9wZXJhbmQgPSB3cmFwUHJpbWl0aXZlKG9wZXJhbmQpO1xuXHRpZiAoaGFzVW5yZXNvbHZhYmxlRXhwcmVzc2lvbihvcGVyYW5kKSkge1xuXHRcdHJldHVybiB1bnJlc29sdmFibGVFeHByZXNzaW9uO1xuXHR9IGVsc2UgaWYgKGlzQ29uc3RhbnQob3BlcmFuZCkpIHtcblx0XHRyZXR1cm4gY29uc3RhbnQoIW9wZXJhbmQudmFsdWUpO1xuXHR9IGVsc2UgaWYgKFxuXHRcdHR5cGVvZiBvcGVyYW5kID09PSBcIm9iamVjdFwiICYmXG5cdFx0b3BlcmFuZC5fdHlwZSA9PT0gXCJTZXRcIiAmJlxuXHRcdG9wZXJhbmQub3BlcmF0b3IgPT09IFwifHxcIiAmJlxuXHRcdG9wZXJhbmQub3BlcmFuZHMuZXZlcnkoKGV4cHJlc3Npb24pID0+IGlzQ29uc3RhbnQoZXhwcmVzc2lvbikgfHwgaXNDb21wYXJpc29uKGV4cHJlc3Npb24pKVxuXHQpIHtcblx0XHRyZXR1cm4gYW5kKC4uLm9wZXJhbmQub3BlcmFuZHMubWFwKChleHByZXNzaW9uKSA9PiBub3QoZXhwcmVzc2lvbikpKTtcblx0fSBlbHNlIGlmIChcblx0XHR0eXBlb2Ygb3BlcmFuZCA9PT0gXCJvYmplY3RcIiAmJlxuXHRcdG9wZXJhbmQuX3R5cGUgPT09IFwiU2V0XCIgJiZcblx0XHRvcGVyYW5kLm9wZXJhdG9yID09PSBcIiYmXCIgJiZcblx0XHRvcGVyYW5kLm9wZXJhbmRzLmV2ZXJ5KChleHByZXNzaW9uKSA9PiBpc0NvbnN0YW50KGV4cHJlc3Npb24pIHx8IGlzQ29tcGFyaXNvbihleHByZXNzaW9uKSlcblx0KSB7XG5cdFx0cmV0dXJuIG9yKC4uLm9wZXJhbmQub3BlcmFuZHMubWFwKChleHByZXNzaW9uKSA9PiBub3QoZXhwcmVzc2lvbikpKTtcblx0fSBlbHNlIGlmIChpc0NvbXBhcmlzb24ob3BlcmFuZCkpIHtcblx0XHQvLyBDcmVhdGUgdGhlIHJldmVyc2UgY29tcGFyaXNvblxuXHRcdHN3aXRjaCAob3BlcmFuZC5vcGVyYXRvcikge1xuXHRcdFx0Y2FzZSBcIiE9PVwiOlxuXHRcdFx0XHRyZXR1cm4geyAuLi5vcGVyYW5kLCBvcGVyYXRvcjogXCI9PT1cIiB9O1xuXHRcdFx0Y2FzZSBcIjxcIjpcblx0XHRcdFx0cmV0dXJuIHsgLi4ub3BlcmFuZCwgb3BlcmF0b3I6IFwiPj1cIiB9O1xuXHRcdFx0Y2FzZSBcIjw9XCI6XG5cdFx0XHRcdHJldHVybiB7IC4uLm9wZXJhbmQsIG9wZXJhdG9yOiBcIj5cIiB9O1xuXHRcdFx0Y2FzZSBcIj09PVwiOlxuXHRcdFx0XHRyZXR1cm4geyAuLi5vcGVyYW5kLCBvcGVyYXRvcjogXCIhPT1cIiB9O1xuXHRcdFx0Y2FzZSBcIj5cIjpcblx0XHRcdFx0cmV0dXJuIHsgLi4ub3BlcmFuZCwgb3BlcmF0b3I6IFwiPD1cIiB9O1xuXHRcdFx0Y2FzZSBcIj49XCI6XG5cdFx0XHRcdHJldHVybiB7IC4uLm9wZXJhbmQsIG9wZXJhdG9yOiBcIjxcIiB9O1xuXHRcdH1cblx0fSBlbHNlIGlmIChvcGVyYW5kLl90eXBlID09PSBcIk5vdFwiKSB7XG5cdFx0cmV0dXJuIG9wZXJhbmQub3BlcmFuZDtcblx0fVxuXG5cdHJldHVybiB7XG5cdFx0X3R5cGU6IFwiTm90XCIsXG5cdFx0b3BlcmFuZDogb3BlcmFuZFxuXHR9O1xufVxuXG4vKipcbiAqIEV2YWx1YXRlcyB3aGV0aGVyIGEgYmluZGluZyBleHByZXNzaW9uIGlzIGVxdWFsIHRvIHRydWUgd2l0aCBhIGxvb3NlIGVxdWFsaXR5LlxuICogQHBhcmFtIG9wZXJhbmQgVGhlIGV4cHJlc3Npb24gdG8gY2hlY2tcbiAqIEByZXR1cm5zIFRoZSByZXN1bHRpbmcgZXhwcmVzc2lvbiB0aGF0IGV2YWx1YXRlcyB0byBib29sZWFuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1RydXRoeShvcGVyYW5kOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248c3RyaW5nPik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiB7XG5cdGlmIChpc0NvbnN0YW50KG9wZXJhbmQpKSB7XG5cdFx0cmV0dXJuIGNvbnN0YW50KCEhb3BlcmFuZC52YWx1ZSk7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdF90eXBlOiBcIlRydXRoeVwiLFxuXHRcdFx0b3BlcmFuZDogb3BlcmFuZFxuXHRcdH07XG5cdH1cbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgYmluZGluZyBleHByZXNzaW9uIHRoYXQgd2lsbCBiZSBldmFsdWF0ZWQgYnkgdGhlIGNvcnJlc3BvbmRpbmcgbW9kZWwuXG4gKiBAcGFyYW0gcGF0aFxuICogQHBhcmFtIG1vZGVsTmFtZVxuICogQHBhcmFtIHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHNcbiAqIEBwYXJhbSBwYXRoVmlzaXRvclxuICogQHJldHVybnMgQW4gZXhwcmVzc2lvbiByZXByZXNlbnRhdGluZyB0aGF0IHBhdGggaW4gdGhlIG1vZGVsXG4gKiBAZGVwcmVjYXRlZCB1c2UgcGF0aEluTW9kZWwgaW5zdGVhZFxuICovXG5leHBvcnQgZnVuY3Rpb24gYmluZGluZ0V4cHJlc3Npb248VGFyZ2V0VHlwZSBleHRlbmRzIFByaW1pdGl2ZVR5cGU+KFxuXHRwYXRoOiBzdHJpbmcsXG5cdG1vZGVsTmFtZT86IHN0cmluZyxcblx0dmlzaXRlZE5hdmlnYXRpb25QYXRoczogc3RyaW5nW10gPSBbXSxcblx0cGF0aFZpc2l0b3I/OiBGdW5jdGlvblxuKTogUGF0aEluTW9kZWxFeHByZXNzaW9uPFRhcmdldFR5cGU+IHwgVW5yZXNvbHZhYmxlUGF0aEV4cHJlc3Npb24ge1xuXHRyZXR1cm4gcGF0aEluTW9kZWwocGF0aCwgbW9kZWxOYW1lLCB2aXNpdGVkTmF2aWdhdGlvblBhdGhzLCBwYXRoVmlzaXRvcik7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIGJpbmRpbmcgZXhwcmVzc2lvbiB0aGF0IHdpbGwgYmUgZXZhbHVhdGVkIGJ5IHRoZSBjb3JyZXNwb25kaW5nIG1vZGVsLlxuICogQHRlbXBsYXRlIFRhcmdldFR5cGVcbiAqIEBwYXJhbSBwYXRoIFRoZSBwYXRoIG9uIHRoZSBtb2RlbFxuICogQHBhcmFtIFttb2RlbE5hbWVdIFRoZSBuYW1lIG9mIHRoZSBtb2RlbFxuICogQHBhcmFtIFt2aXNpdGVkTmF2aWdhdGlvblBhdGhzXSBUaGUgcGF0aHMgZnJvbSB0aGUgcm9vdCBlbnRpdHlTZXRcbiAqIEBwYXJhbSBbcGF0aFZpc2l0b3JdIEEgZnVuY3Rpb24gdG8gbW9kaWZ5IHRoZSByZXN1bHRpbmcgcGF0aFxuICogQHJldHVybnMgQW4gZXhwcmVzc2lvbiByZXByZXNlbnRhdGluZyB0aGF0IHBhdGggaW4gdGhlIG1vZGVsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXRoSW5Nb2RlbChcblx0cGF0aDogdW5kZWZpbmVkLFxuXHRtb2RlbE5hbWU/OiBzdHJpbmcsXG5cdHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHM/OiBzdHJpbmdbXSxcblx0cGF0aFZpc2l0b3I/OiBGdW5jdGlvblxuKTogVW5yZXNvbHZhYmxlUGF0aEV4cHJlc3Npb247XG5leHBvcnQgZnVuY3Rpb24gcGF0aEluTW9kZWw8VGFyZ2V0VHlwZSBleHRlbmRzIFByaW1pdGl2ZVR5cGU+KFxuXHRwYXRoOiBzdHJpbmcsXG5cdG1vZGVsTmFtZT86IHN0cmluZyxcblx0dmlzaXRlZE5hdmlnYXRpb25QYXRocz86IHN0cmluZ1tdLFxuXHRwYXRoVmlzaXRvcj86IHVuZGVmaW5lZFxuKTogUGF0aEluTW9kZWxFeHByZXNzaW9uPFRhcmdldFR5cGU+O1xuZXhwb3J0IGZ1bmN0aW9uIHBhdGhJbk1vZGVsPFRhcmdldFR5cGUgZXh0ZW5kcyBQcmltaXRpdmVUeXBlPihcblx0cGF0aDogc3RyaW5nIHwgdW5kZWZpbmVkLFxuXHRtb2RlbE5hbWU/OiBzdHJpbmcsXG5cdHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHM/OiBzdHJpbmdbXSxcblx0cGF0aFZpc2l0b3I/OiBGdW5jdGlvblxuKTogVW5yZXNvbHZhYmxlUGF0aEV4cHJlc3Npb24gfCBQYXRoSW5Nb2RlbEV4cHJlc3Npb248VGFyZ2V0VHlwZT47XG5leHBvcnQgZnVuY3Rpb24gcGF0aEluTW9kZWw8VGFyZ2V0VHlwZSBleHRlbmRzIFByaW1pdGl2ZVR5cGU+KFxuXHRwYXRoOiBzdHJpbmcgfCB1bmRlZmluZWQsXG5cdG1vZGVsTmFtZT86IHN0cmluZyxcblx0dmlzaXRlZE5hdmlnYXRpb25QYXRoczogc3RyaW5nW10gPSBbXSxcblx0cGF0aFZpc2l0b3I/OiBGdW5jdGlvblxuKTogVW5yZXNvbHZhYmxlUGF0aEV4cHJlc3Npb24gfCBQYXRoSW5Nb2RlbEV4cHJlc3Npb248VGFyZ2V0VHlwZT4ge1xuXHRpZiAocGF0aCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0cmV0dXJuIHVucmVzb2x2YWJsZUV4cHJlc3Npb247XG5cdH1cblx0bGV0IHRhcmdldFBhdGg7XG5cdGlmIChwYXRoVmlzaXRvcikge1xuXHRcdHRhcmdldFBhdGggPSBwYXRoVmlzaXRvcihwYXRoKTtcblx0XHRpZiAodGFyZ2V0UGF0aCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRyZXR1cm4gdW5yZXNvbHZhYmxlRXhwcmVzc2lvbjtcblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0Y29uc3QgbG9jYWxQYXRoID0gdmlzaXRlZE5hdmlnYXRpb25QYXRocy5jb25jYXQoKTtcblx0XHRsb2NhbFBhdGgucHVzaChwYXRoKTtcblx0XHR0YXJnZXRQYXRoID0gbG9jYWxQYXRoLmpvaW4oXCIvXCIpO1xuXHR9XG5cdHJldHVybiB7XG5cdFx0X3R5cGU6IFwiUGF0aEluTW9kZWxcIixcblx0XHRtb2RlbE5hbWU6IG1vZGVsTmFtZSxcblx0XHRwYXRoOiB0YXJnZXRQYXRoXG5cdH07XG59XG5cbnR5cGUgUGxhaW5FeHByZXNzaW9uT2JqZWN0ID0geyBbaW5kZXg6IHN0cmluZ106IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjx1bmtub3duPiB9O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBjb25zdGFudCBleHByZXNzaW9uIGJhc2VkIG9uIGEgcHJpbWl0aXZlIHZhbHVlLlxuICogQHRlbXBsYXRlIFRcbiAqIEBwYXJhbSB2YWx1ZSBUaGUgY29uc3RhbnQgdG8gd3JhcCBpbiBhbiBleHByZXNzaW9uXG4gKiBAcmV0dXJucyBUaGUgY29uc3RhbnQgZXhwcmVzc2lvblxuICovXG5leHBvcnQgZnVuY3Rpb24gY29uc3RhbnQ8VCBleHRlbmRzIFByaW1pdGl2ZVR5cGU+KHZhbHVlOiBUKTogQ29uc3RhbnRFeHByZXNzaW9uPFQ+IHtcblx0bGV0IGNvbnN0YW50VmFsdWU6IFQ7XG5cblx0aWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJvYmplY3RcIiAmJiB2YWx1ZSAhPT0gbnVsbCAmJiB2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0aWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG5cdFx0XHRjb25zdGFudFZhbHVlID0gdmFsdWUubWFwKHdyYXBQcmltaXRpdmUpIGFzIFQ7XG5cdFx0fSBlbHNlIGlmIChpc1ByaW1pdGl2ZU9iamVjdCh2YWx1ZSkpIHtcblx0XHRcdGNvbnN0YW50VmFsdWUgPSB2YWx1ZS52YWx1ZU9mKCkgYXMgVDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Y29uc3RhbnRWYWx1ZSA9IE9iamVjdC5lbnRyaWVzKHZhbHVlKS5yZWR1Y2UoKHBsYWluRXhwcmVzc2lvbiwgW2tleSwgdmFsXSkgPT4ge1xuXHRcdFx0XHRjb25zdCB3cmFwcGVkVmFsdWUgPSB3cmFwUHJpbWl0aXZlKHZhbCk7XG5cdFx0XHRcdGlmICh3cmFwcGVkVmFsdWUuX3R5cGUgIT09IFwiQ29uc3RhbnRcIiB8fCB3cmFwcGVkVmFsdWUudmFsdWUgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdHBsYWluRXhwcmVzc2lvbltrZXldID0gd3JhcHBlZFZhbHVlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBwbGFpbkV4cHJlc3Npb247XG5cdFx0XHR9LCB7fSBhcyBQbGFpbkV4cHJlc3Npb25PYmplY3QpIGFzIFQ7XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdGNvbnN0YW50VmFsdWUgPSB2YWx1ZTtcblx0fVxuXG5cdHJldHVybiB7IF90eXBlOiBcIkNvbnN0YW50XCIsIHZhbHVlOiBjb25zdGFudFZhbHVlIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlQmluZGluZ1N0cmluZzxUIGV4dGVuZHMgUHJpbWl0aXZlVHlwZT4oXG5cdHZhbHVlOiBzdHJpbmcgfCBib29sZWFuIHwgbnVtYmVyLFxuXHR0YXJnZXRUeXBlPzogc3RyaW5nXG4pOiBDb25zdGFudEV4cHJlc3Npb248VD4gfCBQYXRoSW5Nb2RlbEV4cHJlc3Npb248VD4gfCBFbWJlZGRlZFVJNUJpbmRpbmdFeHByZXNzaW9uPFQ+IHwgRW1iZWRkZWRVSTVFeHByZXNzaW9uQmluZGluZ0V4cHJlc3Npb248VD4ge1xuXHRpZiAodmFsdWUgIT09IHVuZGVmaW5lZCAmJiB0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIgJiYgdmFsdWUuc3RhcnRzV2l0aChcIntcIikpIHtcblx0XHRjb25zdCBwYXRoSW5Nb2RlbFJlZ2V4ID0gL157KC4qKT4oLispfSQvOyAvLyBNYXRjaGVzIG1vZGVsIHBhdGhzIGxpa2UgXCJtb2RlbD5wYXRoXCIgb3IgXCI+cGF0aFwiIChkZWZhdWx0IG1vZGVsKVxuXHRcdGNvbnN0IHBhdGhJbk1vZGVsUmVnZXhNYXRjaCA9IHBhdGhJbk1vZGVsUmVnZXguZXhlYyh2YWx1ZSk7XG5cblx0XHRpZiAodmFsdWUuc3RhcnRzV2l0aChcIns9XCIpKSB7XG5cdFx0XHQvLyBFeHByZXNzaW9uIGJpbmRpbmcsIHdlIGNhbiBqdXN0IHJlbW92ZSB0aGUgb3V0ZXIgYmluZGluZyB0aGluZ3Ncblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdF90eXBlOiBcIkVtYmVkZGVkRXhwcmVzc2lvbkJpbmRpbmdcIixcblx0XHRcdFx0dmFsdWU6IHZhbHVlXG5cdFx0XHR9O1xuXHRcdH0gZWxzZSBpZiAocGF0aEluTW9kZWxSZWdleE1hdGNoKSB7XG5cdFx0XHRyZXR1cm4gcGF0aEluTW9kZWwocGF0aEluTW9kZWxSZWdleE1hdGNoWzJdIHx8IFwiXCIsIHBhdGhJbk1vZGVsUmVnZXhNYXRjaFsxXSB8fCB1bmRlZmluZWQpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRfdHlwZTogXCJFbWJlZGRlZEJpbmRpbmdcIixcblx0XHRcdFx0dmFsdWU6IHZhbHVlXG5cdFx0XHR9O1xuXHRcdH1cblx0fSBlbHNlIGlmICh0YXJnZXRUeXBlID09PSBcImJvb2xlYW5cIiAmJiB0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIgJiYgKHZhbHVlID09PSBcInRydWVcIiB8fCB2YWx1ZSA9PT0gXCJmYWxzZVwiKSkge1xuXHRcdHJldHVybiBjb25zdGFudCh2YWx1ZSA9PT0gXCJ0cnVlXCIpIGFzIENvbnN0YW50RXhwcmVzc2lvbjxUPjtcblx0fSBlbHNlIGlmICh0YXJnZXRUeXBlID09PSBcIm51bWJlclwiICYmIHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIiAmJiAoIWlzTmFOKE51bWJlcih2YWx1ZSkpIHx8IHZhbHVlID09PSBcIk5hTlwiKSkge1xuXHRcdHJldHVybiBjb25zdGFudChOdW1iZXIodmFsdWUpKSBhcyBDb25zdGFudEV4cHJlc3Npb248VD47XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIGNvbnN0YW50KHZhbHVlKSBhcyBDb25zdGFudEV4cHJlc3Npb248VD47XG5cdH1cbn1cblxuLyoqXG4gKiBBIG5hbWVkIHJlZmVyZW5jZS5cbiAqIEBzZWUgZm5cbiAqIEBwYXJhbSByZWZlcmVuY2UgUmVmZXJlbmNlXG4gKiBAcmV0dXJucyBUaGUgb2JqZWN0IHJlZmVyZW5jZSBiaW5kaW5nIHBhcnRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlZihyZWZlcmVuY2U6IHN0cmluZyB8IG51bGwpOiBSZWZlcmVuY2VFeHByZXNzaW9uIHtcblx0cmV0dXJuIHsgX3R5cGU6IFwiUmVmXCIsIHJlZjogcmVmZXJlbmNlIH07XG59XG5cbi8qKlxuICogV3JhcCBhIHN0YXRlIG9iamVjdCBpbnRvIGEgcGF0aCBpbiBtb2RlbCBleHByZXNzaW9uLlxuICogQHRlbXBsYXRlIFRcbiAqIEBwYXJhbSBzdGF0ZU9iamVjdFByb3AgVGhlIG9iamVjdCB0byBldmFsdWF0ZSwgaWYgaXQncyBhIGNvbnN0YW50IGl0IHdpbGwgYmUgd3JhcHBlZCBpbiBhIGNvbnN0YW50IGV4cHJlc3Npb24sIGlmIGl0J3MgYSBzdGF0ZSBwcm9wZXJ0eSBpdCB3aWxsIGJlIGJvdW5kXG4gKiBAcGFyYW0ga2V5IFRoZSBrZXkgb2YgdGhlIHN0YXRlIG9iamVjdCB0byBiaW5kXG4gKiBAcmV0dXJucyBUaGUgY29ycmVjdCBiaW5kaW5nIHRvb2xraXQgZXhwcmVzc2lvblxuICovXG5leHBvcnQgZnVuY3Rpb24gYmluZFN0YXRlPFQgZXh0ZW5kcyBvYmplY3QsIEsgZXh0ZW5kcyBQcmltaXRpdmVUeXBlPihcblx0c3RhdGVPYmplY3RQcm9wOiBULFxuXHRrZXk6IGtleW9mIFRcbik6IFBhdGhJbk1vZGVsRXhwcmVzc2lvbjxLPiB8IENvbnN0YW50RXhwcmVzc2lvbjxLPiB7XG5cdGlmICh0eXBlb2Ygc3RhdGVPYmplY3RQcm9wID09PSBcIm9iamVjdFwiICYmIChzdGF0ZU9iamVjdFByb3AgYXMgQmluZGluZ0luZm9Ib2xkZXI8VD4pLl9fYmluZGluZ0luZm8pIHtcblx0XHRyZXR1cm4gcGF0aEluTW9kZWwoXCIvXCIgKyBrZXkudG9TdHJpbmcoKSwgKHN0YXRlT2JqZWN0UHJvcCBhcyBCaW5kaW5nSW5mb0hvbGRlcjxUPikuX19iaW5kaW5nSW5mby5tb2RlbCk7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIGNvbnN0YW50KHN0YXRlT2JqZWN0UHJvcCkgYXMgdW5rbm93biBhcyBDb25zdGFudEV4cHJlc3Npb248Sz47XG5cdH1cbn1cbi8qKlxuICogV3JhcCBhIHByaW1pdGl2ZSBpbnRvIGEgY29uc3RhbnQgZXhwcmVzc2lvbiBpZiBpdCBpcyBub3QgYWxyZWFkeSBhbiBleHByZXNzaW9uLlxuICogQHRlbXBsYXRlIFRcbiAqIEBwYXJhbSBzb21ldGhpbmcgVGhlIG9iamVjdCB0byB3cmFwIGluIGEgQ29uc3RhbnQgZXhwcmVzc2lvblxuICogQHJldHVybnMgRWl0aGVyIHRoZSBvcmlnaW5hbCBvYmplY3Qgb3IgdGhlIHdyYXBwZWQgb25lIGRlcGVuZGluZyBvbiB0aGUgY2FzZVxuICovXG5leHBvcnQgZnVuY3Rpb24gd3JhcFByaW1pdGl2ZTxUIGV4dGVuZHMgUHJpbWl0aXZlVHlwZT4oc29tZXRoaW5nOiBFeHByZXNzaW9uT3JQcmltaXRpdmU8VD4pOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248VD4ge1xuXHRpZiAoaXNCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24oc29tZXRoaW5nKSkge1xuXHRcdHJldHVybiBzb21ldGhpbmcgYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFQ+O1xuXHR9XG5cblx0cmV0dXJuIGNvbnN0YW50KHNvbWV0aGluZyk7XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIHRoZSBleHByZXNzaW9uIG9yIHZhbHVlIHByb3ZpZGVkIGlzIGEgYmluZGluZyB0b29saW5nIGV4cHJlc3Npb24gb3Igbm90LlxuICpcbiAqIEV2ZXJ5IG9iamVjdCBoYXZpbmcgYSBwcm9wZXJ0eSBuYW1lZCBgX3R5cGVgIG9mIHNvbWUgdmFsdWUgaXMgY29uc2lkZXJlZCBhbiBleHByZXNzaW9uLCBldmVuIGlmIHRoZXJlIGlzIGFjdHVhbGx5XG4gKiBubyBzdWNoIGV4cHJlc3Npb24gdHlwZSBzdXBwb3J0ZWQuXG4gKiBAcGFyYW0gZXhwcmVzc2lvblxuICogQHJldHVybnMgYHRydWVgIGlmIHRoZSBleHByZXNzaW9uIGlzIGEgYmluZGluZyB0b29sa2l0IGV4cHJlc3Npb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uKFxuXHRleHByZXNzaW9uOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248dW5rbm93bj4gfCB1bmtub3duXG4pOiBleHByZXNzaW9uIGlzIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjx1bmtub3duPiB7XG5cdHJldHVybiAoZXhwcmVzc2lvbiBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248dW5rbm93bj4pPy5fdHlwZSAhPT0gdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiB0aGUgZXhwcmVzc2lvbiBvciB2YWx1ZSBwcm92aWRlZCBpcyBjb25zdGFudCBvciBub3QuXG4gKiBAdGVtcGxhdGUgVCBUaGUgdGFyZ2V0IHR5cGVcbiAqIEBwYXJhbSAgbWF5YmVDb25zdGFudCBUaGUgZXhwcmVzc2lvbiBvciBwcmltaXRpdmUgdmFsdWUgdGhhdCBpcyB0byBiZSBjaGVja2VkXG4gKiBAcmV0dXJucyBgdHJ1ZWAgaWYgaXQgaXMgY29uc3RhbnRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzQ29uc3RhbnQ8VCBleHRlbmRzIFByaW1pdGl2ZVR5cGU+KG1heWJlQ29uc3RhbnQ6IEV4cHJlc3Npb25PclByaW1pdGl2ZTxUPik6IG1heWJlQ29uc3RhbnQgaXMgQ29uc3RhbnRFeHByZXNzaW9uPFQ+IHtcblx0cmV0dXJuIHR5cGVvZiBtYXliZUNvbnN0YW50ICE9PSBcIm9iamVjdFwiIHx8IChtYXliZUNvbnN0YW50IGFzIEJhc2VFeHByZXNzaW9uPFQ+KS5fdHlwZSA9PT0gXCJDb25zdGFudFwiO1xufVxuXG5mdW5jdGlvbiBpc1RydWUoZXhwcmVzc2lvbjogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFByaW1pdGl2ZVR5cGU+KTogYm9vbGVhbiB7XG5cdHJldHVybiBpc0NvbnN0YW50KGV4cHJlc3Npb24pICYmIGV4cHJlc3Npb24udmFsdWUgPT09IHRydWU7XG59XG5cbmZ1bmN0aW9uIGlzRmFsc2UoZXhwcmVzc2lvbjogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFByaW1pdGl2ZVR5cGU+KTogYm9vbGVhbiB7XG5cdHJldHVybiBpc0NvbnN0YW50KGV4cHJlc3Npb24pICYmIGV4cHJlc3Npb24udmFsdWUgPT09IGZhbHNlO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiB0aGUgZXhwcmVzc2lvbiBvciB2YWx1ZSBwcm92aWRlZCBpcyBhIHBhdGggaW4gbW9kZWwgZXhwcmVzc2lvbiBvciBub3QuXG4gKiBAdGVtcGxhdGUgVCBUaGUgdGFyZ2V0IHR5cGVcbiAqIEBwYXJhbSAgbWF5YmVCaW5kaW5nIFRoZSBleHByZXNzaW9uIG9yIHByaW1pdGl2ZSB2YWx1ZSB0aGF0IGlzIHRvIGJlIGNoZWNrZWRcbiAqIEByZXR1cm5zIGB0cnVlYCBpZiBpdCBpcyBhIHBhdGggaW4gbW9kZWwgZXhwcmVzc2lvblxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNQYXRoSW5Nb2RlbEV4cHJlc3Npb248VCBleHRlbmRzIFByaW1pdGl2ZVR5cGU+KFxuXHRtYXliZUJpbmRpbmc6IEV4cHJlc3Npb25PclByaW1pdGl2ZTxUPlxuKTogbWF5YmVCaW5kaW5nIGlzIFBhdGhJbk1vZGVsRXhwcmVzc2lvbjxUPiB7XG5cdHJldHVybiAobWF5YmVCaW5kaW5nIGFzIEJhc2VFeHByZXNzaW9uPFQ+KT8uX3R5cGUgPT09IFwiUGF0aEluTW9kZWxcIjtcbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgdGhlIGV4cHJlc3Npb24gb3IgdmFsdWUgcHJvdmlkZWQgaXMgYSBjb21wbGV4IHR5cGUgZXhwcmVzc2lvbi5cbiAqIEB0ZW1wbGF0ZSBUIFRoZSB0YXJnZXQgdHlwZVxuICogQHBhcmFtICBtYXliZUJpbmRpbmcgVGhlIGV4cHJlc3Npb24gb3IgcHJpbWl0aXZlIHZhbHVlIHRoYXQgaXMgdG8gYmUgY2hlY2tlZFxuICogQHJldHVybnMgYHRydWVgIGlmIGl0IGlzIGEgcGF0aCBpbiBtb2RlbCBleHByZXNzaW9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0NvbXBsZXhUeXBlRXhwcmVzc2lvbjxUIGV4dGVuZHMgUHJpbWl0aXZlVHlwZT4oXG5cdG1heWJlQmluZGluZzogRXhwcmVzc2lvbk9yUHJpbWl0aXZlPFQ+XG4pOiBtYXliZUJpbmRpbmcgaXMgQ29tcGxleFR5cGVFeHByZXNzaW9uPFQ+IHtcblx0cmV0dXJuIChtYXliZUJpbmRpbmcgYXMgQmFzZUV4cHJlc3Npb248VD4pPy5fdHlwZSA9PT0gXCJDb21wbGV4VHlwZVwiO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiB0aGUgZXhwcmVzc2lvbiBvciB2YWx1ZSBwcm92aWRlZCBpcyBhIGNvbmNhdCBleHByZXNzaW9uIG9yIG5vdC5cbiAqIEBwYXJhbSBleHByZXNzaW9uXG4gKiBAcmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGV4cHJlc3Npb24gaXMgYSBDb25jYXRFeHByZXNzaW9uXG4gKi9cbmZ1bmN0aW9uIGlzQ29uY2F0RXhwcmVzc2lvbihleHByZXNzaW9uOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248UHJpbWl0aXZlVHlwZT4pOiBleHByZXNzaW9uIGlzIENvbmNhdEV4cHJlc3Npb24ge1xuXHRyZXR1cm4gKGV4cHJlc3Npb24gYXMgQmFzZUV4cHJlc3Npb248UHJpbWl0aXZlVHlwZT4pPy5fdHlwZSA9PT0gXCJDb25jYXRcIjtcbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgdGhlIGV4cHJlc3Npb24gb3IgdmFsdWUgcHJvdmlkZWQgaXMgYSBJZkVsc2UgZXhwcmVzc2lvbiBvciBub3QuXG4gKiBAcGFyYW0gZXhwcmVzc2lvblxuICogQHJldHVybnMgYHRydWVgIGlmIHRoZSBleHByZXNzaW9uIGlzIGEgSWZFbHNlRXhwcmVzc2lvblxuICovXG5mdW5jdGlvbiBpc0lmRWxzZUV4cHJlc3Npb24oZXhwcmVzc2lvbjogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFByaW1pdGl2ZVR5cGU+KTogZXhwcmVzc2lvbiBpcyBDb25jYXRFeHByZXNzaW9uIHtcblx0cmV0dXJuIChleHByZXNzaW9uIGFzIEJhc2VFeHByZXNzaW9uPFByaW1pdGl2ZVR5cGU+KT8uX3R5cGUgPT09IFwiSWZFbHNlXCI7XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIHRoZSBleHByZXNzaW9uIHByb3ZpZGVkIGlzIGEgY29tcGFyaXNvbiBvciBub3QuXG4gKiBAdGVtcGxhdGUgVCBUaGUgdGFyZ2V0IHR5cGVcbiAqIEBwYXJhbSBleHByZXNzaW9uIFRoZSBleHByZXNzaW9uXG4gKiBAcmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGV4cHJlc3Npb24gaXMgYSBDb21wYXJpc29uRXhwcmVzc2lvblxuICovXG5mdW5jdGlvbiBpc0NvbXBhcmlzb248VCBleHRlbmRzIFByaW1pdGl2ZVR5cGU+KGV4cHJlc3Npb246IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxUPik6IGV4cHJlc3Npb24gaXMgQ29tcGFyaXNvbkV4cHJlc3Npb24ge1xuXHRyZXR1cm4gZXhwcmVzc2lvbi5fdHlwZSA9PT0gXCJDb21wYXJpc29uXCI7XG59XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgdGhlIGlucHV0IHBhcmFtZXRlciBpcyBhIGNvbnN0YW50IGV4cHJlc3Npb24gb2YgdHlwZSB1bmRlZmluZWQuXG4gKiBAcGFyYW0gZXhwcmVzc2lvbiBUaGUgaW5wdXQgZXhwcmVzc2lvbiBvciBvYmplY3QgaW4gZ2VuZXJhbFxuICogQHJldHVybnMgYHRydWVgIGlmIHRoZSBpbnB1dCBpcyBjb25zdGFudCB3aGljaCBoYXMgdW5kZWZpbmVkIGZvciB2YWx1ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNVbmRlZmluZWRFeHByZXNzaW9uKGV4cHJlc3Npb246IHVua25vd24pOiBleHByZXNzaW9uIGlzIENvbnN0YW50RXhwcmVzc2lvbjx1bmRlZmluZWQ+IHtcblx0Y29uc3QgZXhwcmVzc2lvbkFzRXhwcmVzc2lvbiA9IGV4cHJlc3Npb24gYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHVua25vd24+O1xuXHRyZXR1cm4gZXhwcmVzc2lvbkFzRXhwcmVzc2lvbj8uX3R5cGUgPT09IFwiQ29uc3RhbnRcIiAmJiBleHByZXNzaW9uQXNFeHByZXNzaW9uPy52YWx1ZSA9PT0gdW5kZWZpbmVkO1xufVxuXG50eXBlIENvbXBsZXhBbm5vdGF0aW9uRXhwcmVzc2lvbjxQPiA9XG5cdHwgUGF0aEFubm90YXRpb25FeHByZXNzaW9uPFA+XG5cdHwgQXBwbHlBbm5vdGF0aW9uRXhwcmVzc2lvbjxQPlxuXHR8IElmQW5ub3RhdGlvbkV4cHJlc3Npb248UD5cblx0fCBPckFubm90YXRpb25FeHByZXNzaW9uPFA+XG5cdHwgQW5kQW5ub3RhdGlvbkV4cHJlc3Npb248UD5cblx0fCBOZUFubm90YXRpb25FeHByZXNzaW9uPFA+XG5cdHwgRXFBbm5vdGF0aW9uRXhwcmVzc2lvbjxQPlxuXHR8IE5vdEFubm90YXRpb25FeHByZXNzaW9uPFA+XG5cdHwgR3RBbm5vdGF0aW9uRXhwcmVzc2lvbjxQPlxuXHR8IEdlQW5ub3RhdGlvbkV4cHJlc3Npb248UD5cblx0fCBMZUFubm90YXRpb25FeHByZXNzaW9uPFA+XG5cdHwgTHRBbm5vdGF0aW9uRXhwcmVzc2lvbjxQPlxuXHR8IFZvY2FiQ29uc3RhbnRFeHByZXNzaW9uPFA+O1xuXG5mdW5jdGlvbiBpc1ByaW1pdGl2ZU9iamVjdChvYmplY3RUeXBlOiBvYmplY3QpOiBib29sZWFuIHtcblx0c3dpdGNoIChvYmplY3RUeXBlLmNvbnN0cnVjdG9yLm5hbWUpIHtcblx0XHRjYXNlIFwiU3RyaW5nXCI6XG5cdFx0Y2FzZSBcIk51bWJlclwiOlxuXHRcdGNhc2UgXCJCb29sZWFuXCI6XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRkZWZhdWx0OlxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG59XG4vKipcbiAqIENoZWNrIGlmIHRoZSBwYXNzZWQgYW5ub3RhdGlvbiBhbm5vdGF0aW9uVmFsdWUgaXMgYSBDb21wbGV4QW5ub3RhdGlvbkV4cHJlc3Npb24uXG4gKiBAdGVtcGxhdGUgVCBUaGUgdGFyZ2V0IHR5cGVcbiAqIEBwYXJhbSAgYW5ub3RhdGlvblZhbHVlIFRoZSBhbm5vdGF0aW9uIGFubm90YXRpb25WYWx1ZSB0byBldmFsdWF0ZVxuICogQHJldHVybnMgYHRydWVgIGlmIHRoZSBvYmplY3QgaXMgYSB7Q29tcGxleEFubm90YXRpb25FeHByZXNzaW9ufVxuICovXG5mdW5jdGlvbiBpc0NvbXBsZXhBbm5vdGF0aW9uRXhwcmVzc2lvbjxUPihhbm5vdGF0aW9uVmFsdWU6IFByb3BlcnR5QW5ub3RhdGlvblZhbHVlPFQ+KTogYW5ub3RhdGlvblZhbHVlIGlzIENvbXBsZXhBbm5vdGF0aW9uRXhwcmVzc2lvbjxUPiB7XG5cdHJldHVybiB0eXBlb2YgYW5ub3RhdGlvblZhbHVlID09PSBcIm9iamVjdFwiICYmICFpc1ByaW1pdGl2ZU9iamVjdChhbm5vdGF0aW9uVmFsdWUgYXMgb2JqZWN0KTtcbn1cblxuLyoqXG4gKiBHZW5lcmF0ZSB0aGUgY29ycmVzcG9uZGluZyBhbm5vdGF0aW9uVmFsdWUgZm9yIGEgZ2l2ZW4gYW5ub3RhdGlvbiBhbm5vdGF0aW9uVmFsdWUuXG4gKiBAdGVtcGxhdGUgVCBUaGUgdGFyZ2V0IHR5cGVcbiAqIEBwYXJhbSBhbm5vdGF0aW9uVmFsdWUgVGhlIHNvdXJjZSBhbm5vdGF0aW9uIGFubm90YXRpb25WYWx1ZVxuICogQHBhcmFtIHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMgVGhlIHBhdGggZnJvbSB0aGUgcm9vdCBlbnRpdHkgc2V0XG4gKiBAcGFyYW0gZGVmYXVsdFZhbHVlIERlZmF1bHQgdmFsdWUgaWYgdGhlIGFubm90YXRpb25WYWx1ZSBpcyB1bmRlZmluZWRcbiAqIEBwYXJhbSBwYXRoVmlzaXRvciBBIGZ1bmN0aW9uIHRvIG1vZGlmeSB0aGUgcmVzdWx0aW5nIHBhdGhcbiAqIEByZXR1cm5zIFRoZSBhbm5vdGF0aW9uVmFsdWUgZXF1aXZhbGVudCB0byB0aGF0IGFubm90YXRpb24gYW5ub3RhdGlvblZhbHVlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb248VCBleHRlbmRzIFByaW1pdGl2ZVR5cGU+KFxuXHRhbm5vdGF0aW9uVmFsdWU6IFByb3BlcnR5QW5ub3RhdGlvblZhbHVlPFQ+IHwgdW5kZWZpbmVkLFxuXHR2aXNpdGVkTmF2aWdhdGlvblBhdGhzOiBzdHJpbmdbXSA9IFtdLFxuXHRkZWZhdWx0VmFsdWU/OiBFeHByZXNzaW9uT3JQcmltaXRpdmU8VD4sXG5cdHBhdGhWaXNpdG9yPzogRnVuY3Rpb25cbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxQcmltaXRpdmVUeXBlQ2FzdDxUPj4ge1xuXHRpZiAoYW5ub3RhdGlvblZhbHVlID09PSB1bmRlZmluZWQpIHtcblx0XHRyZXR1cm4gd3JhcFByaW1pdGl2ZShkZWZhdWx0VmFsdWUgYXMgUHJpbWl0aXZlVHlwZUNhc3Q8VD4pO1xuXHR9XG5cdGFubm90YXRpb25WYWx1ZSA9IGFubm90YXRpb25WYWx1ZT8udmFsdWVPZigpIGFzIFByb3BlcnR5QW5ub3RhdGlvblZhbHVlPFQ+O1xuXHRpZiAoIWlzQ29tcGxleEFubm90YXRpb25FeHByZXNzaW9uKGFubm90YXRpb25WYWx1ZSkpIHtcblx0XHRyZXR1cm4gY29uc3RhbnQoYW5ub3RhdGlvblZhbHVlKTtcblx0fVxuXG5cdHN3aXRjaCAoYW5ub3RhdGlvblZhbHVlLnR5cGUpIHtcblx0XHRjYXNlIFwiUGF0aFwiOlxuXHRcdFx0cmV0dXJuIHBhdGhJbk1vZGVsKGFubm90YXRpb25WYWx1ZS5wYXRoLCB1bmRlZmluZWQsIHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMsIHBhdGhWaXNpdG9yKTtcblx0XHRjYXNlIFwiSWZcIjpcblx0XHRcdHJldHVybiBhbm5vdGF0aW9uSWZFeHByZXNzaW9uKGFubm90YXRpb25WYWx1ZS4kSWYsIHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMsIHBhdGhWaXNpdG9yKSBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248XG5cdFx0XHRcdFByaW1pdGl2ZVR5cGVDYXN0PFQ+XG5cdFx0XHQ+O1xuXHRcdGNhc2UgXCJOb3RcIjpcblx0XHRcdHJldHVybiBub3QocGFyc2VBbm5vdGF0aW9uQ29uZGl0aW9uKGFubm90YXRpb25WYWx1ZS4kTm90LCB2aXNpdGVkTmF2aWdhdGlvblBhdGhzLCBwYXRoVmlzaXRvcikpIGFzIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxcblx0XHRcdFx0UHJpbWl0aXZlVHlwZUNhc3Q8VD5cblx0XHRcdD47XG5cdFx0Y2FzZSBcIkVxXCI6XG5cdFx0XHRyZXR1cm4gZXF1YWwoXG5cdFx0XHRcdHBhcnNlQW5ub3RhdGlvbkNvbmRpdGlvbihhbm5vdGF0aW9uVmFsdWUuJEVxWzBdLCB2aXNpdGVkTmF2aWdhdGlvblBhdGhzLCBwYXRoVmlzaXRvciksXG5cdFx0XHRcdHBhcnNlQW5ub3RhdGlvbkNvbmRpdGlvbihhbm5vdGF0aW9uVmFsdWUuJEVxWzFdLCB2aXNpdGVkTmF2aWdhdGlvblBhdGhzLCBwYXRoVmlzaXRvcilcblx0XHRcdCkgYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFByaW1pdGl2ZVR5cGVDYXN0PFQ+Pjtcblx0XHRjYXNlIFwiTmVcIjpcblx0XHRcdHJldHVybiBub3RFcXVhbChcblx0XHRcdFx0cGFyc2VBbm5vdGF0aW9uQ29uZGl0aW9uKGFubm90YXRpb25WYWx1ZS4kTmVbMF0sIHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMsIHBhdGhWaXNpdG9yKSxcblx0XHRcdFx0cGFyc2VBbm5vdGF0aW9uQ29uZGl0aW9uKGFubm90YXRpb25WYWx1ZS4kTmVbMV0sIHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMsIHBhdGhWaXNpdG9yKVxuXHRcdFx0KSBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248UHJpbWl0aXZlVHlwZUNhc3Q8VD4+O1xuXHRcdGNhc2UgXCJHdFwiOlxuXHRcdFx0cmV0dXJuIGdyZWF0ZXJUaGFuKFxuXHRcdFx0XHRwYXJzZUFubm90YXRpb25Db25kaXRpb24oYW5ub3RhdGlvblZhbHVlLiRHdFswXSwgdmlzaXRlZE5hdmlnYXRpb25QYXRocywgcGF0aFZpc2l0b3IpLFxuXHRcdFx0XHRwYXJzZUFubm90YXRpb25Db25kaXRpb24oYW5ub3RhdGlvblZhbHVlLiRHdFsxXSwgdmlzaXRlZE5hdmlnYXRpb25QYXRocywgcGF0aFZpc2l0b3IpXG5cdFx0XHQpIGFzIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxQcmltaXRpdmVUeXBlQ2FzdDxUPj47XG5cdFx0Y2FzZSBcIkdlXCI6XG5cdFx0XHRyZXR1cm4gZ3JlYXRlck9yRXF1YWwoXG5cdFx0XHRcdHBhcnNlQW5ub3RhdGlvbkNvbmRpdGlvbihhbm5vdGF0aW9uVmFsdWUuJEdlWzBdLCB2aXNpdGVkTmF2aWdhdGlvblBhdGhzLCBwYXRoVmlzaXRvciksXG5cdFx0XHRcdHBhcnNlQW5ub3RhdGlvbkNvbmRpdGlvbihhbm5vdGF0aW9uVmFsdWUuJEdlWzFdLCB2aXNpdGVkTmF2aWdhdGlvblBhdGhzLCBwYXRoVmlzaXRvcilcblx0XHRcdCkgYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFByaW1pdGl2ZVR5cGVDYXN0PFQ+Pjtcblx0XHRjYXNlIFwiTHRcIjpcblx0XHRcdHJldHVybiBsZXNzVGhhbihcblx0XHRcdFx0cGFyc2VBbm5vdGF0aW9uQ29uZGl0aW9uKGFubm90YXRpb25WYWx1ZS4kTHRbMF0sIHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMsIHBhdGhWaXNpdG9yKSxcblx0XHRcdFx0cGFyc2VBbm5vdGF0aW9uQ29uZGl0aW9uKGFubm90YXRpb25WYWx1ZS4kTHRbMV0sIHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMsIHBhdGhWaXNpdG9yKVxuXHRcdFx0KSBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248UHJpbWl0aXZlVHlwZUNhc3Q8VD4+O1xuXHRcdGNhc2UgXCJMZVwiOlxuXHRcdFx0cmV0dXJuIGxlc3NPckVxdWFsKFxuXHRcdFx0XHRwYXJzZUFubm90YXRpb25Db25kaXRpb24oYW5ub3RhdGlvblZhbHVlLiRMZVswXSwgdmlzaXRlZE5hdmlnYXRpb25QYXRocywgcGF0aFZpc2l0b3IpLFxuXHRcdFx0XHRwYXJzZUFubm90YXRpb25Db25kaXRpb24oYW5ub3RhdGlvblZhbHVlLiRMZVsxXSwgdmlzaXRlZE5hdmlnYXRpb25QYXRocywgcGF0aFZpc2l0b3IpXG5cdFx0XHQpIGFzIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxQcmltaXRpdmVUeXBlQ2FzdDxUPj47XG5cdFx0Y2FzZSBcIk9yXCI6XG5cdFx0XHRyZXR1cm4gb3IoXG5cdFx0XHRcdC4uLmFubm90YXRpb25WYWx1ZS4kT3IubWFwKGZ1bmN0aW9uIChvckNvbmRpdGlvbikge1xuXHRcdFx0XHRcdHJldHVybiBwYXJzZUFubm90YXRpb25Db25kaXRpb248Ym9vbGVhbj4ob3JDb25kaXRpb24sIHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMsIHBhdGhWaXNpdG9yKTtcblx0XHRcdFx0fSlcblx0XHRcdCkgYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFByaW1pdGl2ZVR5cGVDYXN0PFQ+Pjtcblx0XHRjYXNlIFwiQW5kXCI6XG5cdFx0XHRyZXR1cm4gYW5kKFxuXHRcdFx0XHQuLi5hbm5vdGF0aW9uVmFsdWUuJEFuZC5tYXAoZnVuY3Rpb24gKGFuZENvbmRpdGlvbikge1xuXHRcdFx0XHRcdHJldHVybiBwYXJzZUFubm90YXRpb25Db25kaXRpb248Ym9vbGVhbj4oYW5kQ29uZGl0aW9uLCB2aXNpdGVkTmF2aWdhdGlvblBhdGhzLCBwYXRoVmlzaXRvcik7XG5cdFx0XHRcdH0pXG5cdFx0XHQpIGFzIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxQcmltaXRpdmVUeXBlQ2FzdDxUPj47XG5cdFx0Y2FzZSBcIkFwcGx5XCI6XG5cdFx0XHRyZXR1cm4gYW5ub3RhdGlvbkFwcGx5RXhwcmVzc2lvbihcblx0XHRcdFx0YW5ub3RhdGlvblZhbHVlIGFzIEFwcGx5QW5ub3RhdGlvbkV4cHJlc3Npb248c3RyaW5nPixcblx0XHRcdFx0dmlzaXRlZE5hdmlnYXRpb25QYXRocyxcblx0XHRcdFx0cGF0aFZpc2l0b3Jcblx0XHRcdCkgYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFByaW1pdGl2ZVR5cGVDYXN0PFQ+Pjtcblx0XHRjYXNlIFwiQ29uc3RhbnRcIjpcblx0XHRcdC8vIE5vdCBhIHJlYWwgY2FzZSBidXQgdGhlIHR5cGUgc3lzdGVtIG5lZWRzIGl0XG5cdFx0XHRyZXR1cm4gY29uc3RhbnQoYW5ub3RhdGlvblZhbHVlLnZhbHVlIGFzIFByaW1pdGl2ZVR5cGVDYXN0PFQ+KTtcblx0fVxuXHRyZXR1cm4gdW5yZXNvbHZhYmxlRXhwcmVzc2lvbjtcbn1cblxuLyoqXG4gKiBQYXJzZSB0aGUgYW5ub3RhdGlvbiBjb25kaXRpb24gaW50byBhbiBleHByZXNzaW9uLlxuICogQHRlbXBsYXRlIFQgVGhlIHRhcmdldCB0eXBlXG4gKiBAcGFyYW0gYW5ub3RhdGlvblZhbHVlIFRoZSBjb25kaXRpb24gb3IgdmFsdWUgZnJvbSB0aGUgYW5ub3RhdGlvblxuICogQHBhcmFtIHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMgVGhlIHBhdGggZnJvbSB0aGUgcm9vdCBlbnRpdHkgc2V0XG4gKiBAcGFyYW0gcGF0aFZpc2l0b3IgQSBmdW5jdGlvbiB0byBtb2RpZnkgdGhlIHJlc3VsdGluZyBwYXRoXG4gKiBAcmV0dXJucyBBbiBlcXVpdmFsZW50IGV4cHJlc3Npb25cbiAqL1xuZnVuY3Rpb24gcGFyc2VBbm5vdGF0aW9uQ29uZGl0aW9uPFQgZXh0ZW5kcyBQcmltaXRpdmVUeXBlPihcblx0YW5ub3RhdGlvblZhbHVlOiBDb25kaXRpb25hbENoZWNrT3JWYWx1ZSxcblx0dmlzaXRlZE5hdmlnYXRpb25QYXRoczogc3RyaW5nW10gPSBbXSxcblx0cGF0aFZpc2l0b3I/OiBGdW5jdGlvblxuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFQ+IHtcblx0aWYgKGFubm90YXRpb25WYWx1ZSA9PT0gbnVsbCB8fCB0eXBlb2YgYW5ub3RhdGlvblZhbHVlICE9PSBcIm9iamVjdFwiKSB7XG5cdFx0cmV0dXJuIGNvbnN0YW50KGFubm90YXRpb25WYWx1ZSBhcyBUKTtcblx0fSBlbHNlIGlmIChhbm5vdGF0aW9uVmFsdWUuaGFzT3duUHJvcGVydHkoXCIkT3JcIikpIHtcblx0XHRyZXR1cm4gb3IoXG5cdFx0XHQuLi4oKGFubm90YXRpb25WYWx1ZSBhcyBPckNvbmRpdGlvbmFsRXhwcmVzc2lvbikuJE9yLm1hcChmdW5jdGlvbiAob3JDb25kaXRpb24pIHtcblx0XHRcdFx0cmV0dXJuIHBhcnNlQW5ub3RhdGlvbkNvbmRpdGlvbihvckNvbmRpdGlvbiwgdmlzaXRlZE5hdmlnYXRpb25QYXRocywgcGF0aFZpc2l0b3IpO1xuXHRcdFx0fSkgYXMgdW5rbm93biBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj5bXSlcblx0XHQpIGFzIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxUPjtcblx0fSBlbHNlIGlmIChhbm5vdGF0aW9uVmFsdWUuaGFzT3duUHJvcGVydHkoXCIkQW5kXCIpKSB7XG5cdFx0cmV0dXJuIGFuZChcblx0XHRcdC4uLigoYW5ub3RhdGlvblZhbHVlIGFzIEFuZENvbmRpdGlvbmFsRXhwcmVzc2lvbikuJEFuZC5tYXAoZnVuY3Rpb24gKGFuZENvbmRpdGlvbikge1xuXHRcdFx0XHRyZXR1cm4gcGFyc2VBbm5vdGF0aW9uQ29uZGl0aW9uKGFuZENvbmRpdGlvbiwgdmlzaXRlZE5hdmlnYXRpb25QYXRocywgcGF0aFZpc2l0b3IpO1xuXHRcdFx0fSkgYXMgdW5rbm93biBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj5bXSlcblx0XHQpIGFzIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxUPjtcblx0fSBlbHNlIGlmIChhbm5vdGF0aW9uVmFsdWUuaGFzT3duUHJvcGVydHkoXCIkTm90XCIpKSB7XG5cdFx0cmV0dXJuIG5vdChcblx0XHRcdHBhcnNlQW5ub3RhdGlvbkNvbmRpdGlvbigoYW5ub3RhdGlvblZhbHVlIGFzIE5vdENvbmRpdGlvbmFsRXhwcmVzc2lvbikuJE5vdCwgdmlzaXRlZE5hdmlnYXRpb25QYXRocywgcGF0aFZpc2l0b3IpXG5cdFx0KSBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248VD47XG5cdH0gZWxzZSBpZiAoYW5ub3RhdGlvblZhbHVlLmhhc093blByb3BlcnR5KFwiJEVxXCIpKSB7XG5cdFx0cmV0dXJuIGVxdWFsKFxuXHRcdFx0cGFyc2VBbm5vdGF0aW9uQ29uZGl0aW9uKChhbm5vdGF0aW9uVmFsdWUgYXMgRXFDb25kaXRpb25hbEV4cHJlc3Npb24pLiRFcVswXSwgdmlzaXRlZE5hdmlnYXRpb25QYXRocywgcGF0aFZpc2l0b3IpLFxuXHRcdFx0cGFyc2VBbm5vdGF0aW9uQ29uZGl0aW9uKChhbm5vdGF0aW9uVmFsdWUgYXMgRXFDb25kaXRpb25hbEV4cHJlc3Npb24pLiRFcVsxXSwgdmlzaXRlZE5hdmlnYXRpb25QYXRocywgcGF0aFZpc2l0b3IpXG5cdFx0KSBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248VD47XG5cdH0gZWxzZSBpZiAoYW5ub3RhdGlvblZhbHVlLmhhc093blByb3BlcnR5KFwiJE5lXCIpKSB7XG5cdFx0cmV0dXJuIG5vdEVxdWFsKFxuXHRcdFx0cGFyc2VBbm5vdGF0aW9uQ29uZGl0aW9uKChhbm5vdGF0aW9uVmFsdWUgYXMgTmVDb25kaXRpb25hbEV4cHJlc3Npb24pLiROZVswXSwgdmlzaXRlZE5hdmlnYXRpb25QYXRocywgcGF0aFZpc2l0b3IpLFxuXHRcdFx0cGFyc2VBbm5vdGF0aW9uQ29uZGl0aW9uKChhbm5vdGF0aW9uVmFsdWUgYXMgTmVDb25kaXRpb25hbEV4cHJlc3Npb24pLiROZVsxXSwgdmlzaXRlZE5hdmlnYXRpb25QYXRocywgcGF0aFZpc2l0b3IpXG5cdFx0KSBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248VD47XG5cdH0gZWxzZSBpZiAoYW5ub3RhdGlvblZhbHVlLmhhc093blByb3BlcnR5KFwiJEd0XCIpKSB7XG5cdFx0cmV0dXJuIGdyZWF0ZXJUaGFuKFxuXHRcdFx0cGFyc2VBbm5vdGF0aW9uQ29uZGl0aW9uKChhbm5vdGF0aW9uVmFsdWUgYXMgR3RDb25kaXRpb25hbEV4cHJlc3Npb24pLiRHdFswXSwgdmlzaXRlZE5hdmlnYXRpb25QYXRocywgcGF0aFZpc2l0b3IpLFxuXHRcdFx0cGFyc2VBbm5vdGF0aW9uQ29uZGl0aW9uKChhbm5vdGF0aW9uVmFsdWUgYXMgR3RDb25kaXRpb25hbEV4cHJlc3Npb24pLiRHdFsxXSwgdmlzaXRlZE5hdmlnYXRpb25QYXRocywgcGF0aFZpc2l0b3IpXG5cdFx0KSBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248VD47XG5cdH0gZWxzZSBpZiAoYW5ub3RhdGlvblZhbHVlLmhhc093blByb3BlcnR5KFwiJEdlXCIpKSB7XG5cdFx0cmV0dXJuIGdyZWF0ZXJPckVxdWFsKFxuXHRcdFx0cGFyc2VBbm5vdGF0aW9uQ29uZGl0aW9uKChhbm5vdGF0aW9uVmFsdWUgYXMgR2VDb25kaXRpb25hbEV4cHJlc3Npb24pLiRHZVswXSwgdmlzaXRlZE5hdmlnYXRpb25QYXRocywgcGF0aFZpc2l0b3IpLFxuXHRcdFx0cGFyc2VBbm5vdGF0aW9uQ29uZGl0aW9uKChhbm5vdGF0aW9uVmFsdWUgYXMgR2VDb25kaXRpb25hbEV4cHJlc3Npb24pLiRHZVsxXSwgdmlzaXRlZE5hdmlnYXRpb25QYXRocywgcGF0aFZpc2l0b3IpXG5cdFx0KSBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248VD47XG5cdH0gZWxzZSBpZiAoYW5ub3RhdGlvblZhbHVlLmhhc093blByb3BlcnR5KFwiJEx0XCIpKSB7XG5cdFx0cmV0dXJuIGxlc3NUaGFuKFxuXHRcdFx0cGFyc2VBbm5vdGF0aW9uQ29uZGl0aW9uKChhbm5vdGF0aW9uVmFsdWUgYXMgTHRDb25kaXRpb25hbEV4cHJlc3Npb24pLiRMdFswXSwgdmlzaXRlZE5hdmlnYXRpb25QYXRocywgcGF0aFZpc2l0b3IpLFxuXHRcdFx0cGFyc2VBbm5vdGF0aW9uQ29uZGl0aW9uKChhbm5vdGF0aW9uVmFsdWUgYXMgTHRDb25kaXRpb25hbEV4cHJlc3Npb24pLiRMdFsxXSwgdmlzaXRlZE5hdmlnYXRpb25QYXRocywgcGF0aFZpc2l0b3IpXG5cdFx0KSBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248VD47XG5cdH0gZWxzZSBpZiAoYW5ub3RhdGlvblZhbHVlLmhhc093blByb3BlcnR5KFwiJExlXCIpKSB7XG5cdFx0cmV0dXJuIGxlc3NPckVxdWFsKFxuXHRcdFx0cGFyc2VBbm5vdGF0aW9uQ29uZGl0aW9uKChhbm5vdGF0aW9uVmFsdWUgYXMgTGVDb25kaXRpb25hbEV4cHJlc3Npb24pLiRMZVswXSwgdmlzaXRlZE5hdmlnYXRpb25QYXRocywgcGF0aFZpc2l0b3IpLFxuXHRcdFx0cGFyc2VBbm5vdGF0aW9uQ29uZGl0aW9uKChhbm5vdGF0aW9uVmFsdWUgYXMgTGVDb25kaXRpb25hbEV4cHJlc3Npb24pLiRMZVsxXSwgdmlzaXRlZE5hdmlnYXRpb25QYXRocywgcGF0aFZpc2l0b3IpXG5cdFx0KSBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248VD47XG5cdH0gZWxzZSBpZiAoYW5ub3RhdGlvblZhbHVlLmhhc093blByb3BlcnR5KFwiJFBhdGhcIikpIHtcblx0XHRyZXR1cm4gcGF0aEluTW9kZWwoKGFubm90YXRpb25WYWx1ZSBhcyBQYXRoQ29uZGl0aW9uRXhwcmVzc2lvbjxUPikuJFBhdGgsIHVuZGVmaW5lZCwgdmlzaXRlZE5hdmlnYXRpb25QYXRocywgcGF0aFZpc2l0b3IpO1xuXHR9IGVsc2UgaWYgKGFubm90YXRpb25WYWx1ZS5oYXNPd25Qcm9wZXJ0eShcIiRBcHBseVwiKSkge1xuXHRcdHJldHVybiBnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24oXG5cdFx0XHR7XG5cdFx0XHRcdHR5cGU6IFwiQXBwbHlcIixcblx0XHRcdFx0JEZ1bmN0aW9uOiAoYW5ub3RhdGlvblZhbHVlIGFzIHsgJEZ1bmN0aW9uPzogc3RyaW5nIH0pLiRGdW5jdGlvbixcblx0XHRcdFx0JEFwcGx5OiAoYW5ub3RhdGlvblZhbHVlIGFzIHsgJEFwcGx5PzogdW5rbm93biB9KS4kQXBwbHlcblx0XHRcdH0gYXMgQXBwbHlBbm5vdGF0aW9uRXhwcmVzc2lvbjxUPixcblx0XHRcdHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMsXG5cdFx0XHR1bmRlZmluZWQsXG5cdFx0XHRwYXRoVmlzaXRvclxuXHRcdCkgYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFQ+O1xuXHR9IGVsc2UgaWYgKGFubm90YXRpb25WYWx1ZS5oYXNPd25Qcm9wZXJ0eShcIiRJZlwiKSkge1xuXHRcdHJldHVybiBnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24oXG5cdFx0XHR7XG5cdFx0XHRcdHR5cGU6IFwiSWZcIixcblx0XHRcdFx0JElmOiAoYW5ub3RhdGlvblZhbHVlIGFzIHsgJElmPzogdW5rbm93biB9KS4kSWZcblx0XHRcdH0gYXMgSWZBbm5vdGF0aW9uRXhwcmVzc2lvbjxUPixcblx0XHRcdHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMsXG5cdFx0XHR1bmRlZmluZWQsXG5cdFx0XHRwYXRoVmlzaXRvclxuXHRcdCkgYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFQ+O1xuXHR9IGVsc2UgaWYgKGFubm90YXRpb25WYWx1ZS5oYXNPd25Qcm9wZXJ0eShcIiRFbnVtTWVtYmVyXCIpKSB7XG5cdFx0cmV0dXJuIGNvbnN0YW50KHJlc29sdmVFbnVtVmFsdWUoKGFubm90YXRpb25WYWx1ZSBhcyB7ICRFbnVtTWVtYmVyPzogc3RyaW5nIH0pLiRFbnVtTWVtYmVyKSBhcyBUKTtcblx0fVxuXHRyZXR1cm4gY29uc3RhbnQoZmFsc2UgYXMgVCk7XG59XG5cbi8qKlxuICogUHJvY2VzcyB0aGUge0lmQW5ub3RhdGlvbkV4cHJlc3Npb25WYWx1ZX0gaW50byBhbiBleHByZXNzaW9uLlxuICogQHRlbXBsYXRlIFQgVGhlIHRhcmdldCB0eXBlXG4gKiBAcGFyYW0gYW5ub3RhdGlvblZhbHVlIEFuIElmIGV4cHJlc3Npb24gcmV0dXJuaW5nIHRoZSB0eXBlIFRcbiAqIEBwYXJhbSB2aXNpdGVkTmF2aWdhdGlvblBhdGhzIFRoZSBwYXRoIGZyb20gdGhlIHJvb3QgZW50aXR5IHNldFxuICogQHBhcmFtIHBhdGhWaXNpdG9yIEEgZnVuY3Rpb24gdG8gbW9kaWZ5IHRoZSByZXN1bHRpbmcgcGF0aFxuICogQHJldHVybnMgVGhlIGVxdWl2YWxlbnQgaWZFbHNlIGV4cHJlc3Npb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFubm90YXRpb25JZkV4cHJlc3Npb248VCBleHRlbmRzIFByaW1pdGl2ZVR5cGU+KFxuXHRhbm5vdGF0aW9uVmFsdWU6IElmQW5ub3RhdGlvbkV4cHJlc3Npb25WYWx1ZTxUPixcblx0dmlzaXRlZE5hdmlnYXRpb25QYXRoczogc3RyaW5nW10gPSBbXSxcblx0cGF0aFZpc2l0b3I/OiBGdW5jdGlvblxuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFQ+IHtcblx0cmV0dXJuIGlmRWxzZShcblx0XHRwYXJzZUFubm90YXRpb25Db25kaXRpb24oYW5ub3RhdGlvblZhbHVlWzBdLCB2aXNpdGVkTmF2aWdhdGlvblBhdGhzLCBwYXRoVmlzaXRvciksXG5cdFx0cGFyc2VBbm5vdGF0aW9uQ29uZGl0aW9uKGFubm90YXRpb25WYWx1ZVsxXSBhcyBDb25kaXRpb25hbENoZWNrT3JWYWx1ZSwgdmlzaXRlZE5hdmlnYXRpb25QYXRocywgcGF0aFZpc2l0b3IpLFxuXHRcdHBhcnNlQW5ub3RhdGlvbkNvbmRpdGlvbihhbm5vdGF0aW9uVmFsdWVbMl0gYXMgQ29uZGl0aW9uYWxDaGVja09yVmFsdWUsIHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMsIHBhdGhWaXNpdG9yKVxuXHQpO1xufVxuLy8gVGhpcyB0eXBlIGlzIG5vdCByZWN1cnNpdmVseSB0cmFuc2Zvcm1lZCBmcm9tIHRoZSBtZXRhbW9kZWwgY29udGVudCwgYXMgc3VjaCB3ZSBoYXZlIHNvbWUgdWdseSB0aGluZ3MgdGhlcmVcbnR5cGUgU3ViQXBwbHlFeHByZXNzaW9uRnJvbU1ldGFtb2RlbCA9IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuZnVuY3Rpb24gY29udmVydFN1YkFwcGx5UGFyYW1ldGVycyhhcHBseVBhcmFtOiBTdWJBcHBseUV4cHJlc3Npb25Gcm9tTWV0YW1vZGVsKTogU3ViQXBwbHlFeHByZXNzaW9uRnJvbU1ldGFtb2RlbCB8IFByaW1pdGl2ZVR5cGUge1xuXHRsZXQgYXBwbHlQYXJhbUNvbnZlcnRlZCA9IGFwcGx5UGFyYW07XG5cdGlmIChhcHBseVBhcmFtLmhhc093blByb3BlcnR5KFwiJFBhdGhcIikpIHtcblx0XHRhcHBseVBhcmFtQ29udmVydGVkID0ge1xuXHRcdFx0dHlwZTogXCJQYXRoXCIsXG5cdFx0XHRwYXRoOiBhcHBseVBhcmFtLiRQYXRoXG5cdFx0fSBhcyBQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb248c3RyaW5nPjtcblx0fSBlbHNlIGlmIChhcHBseVBhcmFtLmhhc093blByb3BlcnR5KFwiJElmXCIpKSB7XG5cdFx0YXBwbHlQYXJhbUNvbnZlcnRlZCA9IHtcblx0XHRcdHR5cGU6IFwiSWZcIixcblx0XHRcdCRJZjogYXBwbHlQYXJhbS4kSWZcblx0XHR9IGFzIElmQW5ub3RhdGlvbkV4cHJlc3Npb248c3RyaW5nPjtcblx0fSBlbHNlIGlmIChhcHBseVBhcmFtLmhhc093blByb3BlcnR5KFwiJEFwcGx5XCIpKSB7XG5cdFx0YXBwbHlQYXJhbUNvbnZlcnRlZCA9IHtcblx0XHRcdHR5cGU6IFwiQXBwbHlcIixcblx0XHRcdCRGdW5jdGlvbjogYXBwbHlQYXJhbS4kRnVuY3Rpb24sXG5cdFx0XHQkQXBwbHk6IGFwcGx5UGFyYW0uJEFwcGx5XG5cdFx0fSBhcyBBcHBseUFubm90YXRpb25FeHByZXNzaW9uPHN0cmluZz47XG5cdH1cblx0cmV0dXJuIGFwcGx5UGFyYW1Db252ZXJ0ZWQ7XG59XG5cbnR5cGUgT0RhdGFGdW5jdGlvbiA9IFwib2RhdGEuY29uY2F0XCIgfCBcIm9kYXRhLmZpbGxVcmlUZW1wbGF0ZVwiIHwgXCJvZGF0YS51cmlFbmNvZGVcIjtcbmV4cG9ydCBmdW5jdGlvbiBhbm5vdGF0aW9uQXBwbHlFeHByZXNzaW9uKFxuXHRhcHBseUV4cHJlc3Npb246IEFwcGx5QW5ub3RhdGlvbkV4cHJlc3Npb248c3RyaW5nPixcblx0dmlzaXRlZE5hdmlnYXRpb25QYXRoczogc3RyaW5nW10gPSBbXSxcblx0cGF0aFZpc2l0b3I/OiBGdW5jdGlvblxuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHN0cmluZz4ge1xuXHRzd2l0Y2ggKGFwcGx5RXhwcmVzc2lvbi4kRnVuY3Rpb24gYXMgT0RhdGFGdW5jdGlvbikge1xuXHRcdGNhc2UgXCJvZGF0YS5jb25jYXRcIjpcblx0XHRcdHJldHVybiBjb25jYXQoXG5cdFx0XHRcdC4uLmFwcGx5RXhwcmVzc2lvbi4kQXBwbHkubWFwKChhcHBseVBhcmFtKSA9PiB7XG5cdFx0XHRcdFx0cmV0dXJuIGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihcblx0XHRcdFx0XHRcdGNvbnZlcnRTdWJBcHBseVBhcmFtZXRlcnMoYXBwbHlQYXJhbSkgYXMgUHJvcGVydHlBbm5vdGF0aW9uVmFsdWU8c3RyaW5nPixcblx0XHRcdFx0XHRcdHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMsXG5cdFx0XHRcdFx0XHR1bmRlZmluZWQsXG5cdFx0XHRcdFx0XHRwYXRoVmlzaXRvclxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH0pXG5cdFx0XHQpO1xuXHRcdGNhc2UgXCJvZGF0YS51cmlFbmNvZGVcIjpcblx0XHRcdGNvbnN0IHBhcmFtZXRlciA9IGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihcblx0XHRcdFx0Y29udmVydFN1YkFwcGx5UGFyYW1ldGVycyhcblx0XHRcdFx0XHRhcHBseUV4cHJlc3Npb24uJEFwcGx5WzBdIGFzIHVua25vd24gYXMgU3ViQXBwbHlFeHByZXNzaW9uRnJvbU1ldGFtb2RlbFxuXHRcdFx0XHQpIGFzIFByb3BlcnR5QW5ub3RhdGlvblZhbHVlPHN0cmluZz4sXG5cdFx0XHRcdHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMsXG5cdFx0XHRcdHVuZGVmaW5lZCxcblx0XHRcdFx0cGF0aFZpc2l0b3Jcblx0XHRcdCk7XG5cdFx0XHQvLyBUaGUgc2Vjb25kIHBhcmFtZXRlciBmb3IgdXJpRW5jb2RlIGlzIGFsd2F5cyBhIHN0cmluZyBzaW5jZSB0aGUgdGFyZ2V0IGV2YWx1YXRpb24gaXMgYWdhaW5zdCBhIGZvcm1hdFZhbHVlIGNhbGwgaW4gT0RhdGFVdGlscyB3aGljaCBleHBlY3QgdGhlIHRhcmdldCB0eXBlIGFzIHNlY29uZCBwYXJhbWV0ZXJcblx0XHRcdHJldHVybiBmbihcIm9kYXRhLnVyaUVuY29kZVwiLCBbcGFyYW1ldGVyLCBcIkVkbS5TdHJpbmdcIl0sIHVuZGVmaW5lZCwgdHJ1ZSk7XG5cdFx0Y2FzZSBcIm9kYXRhLmZpbGxVcmlUZW1wbGF0ZVwiOlxuXHRcdFx0Y29uc3QgdGVtcGxhdGUgPSBhcHBseUV4cHJlc3Npb24uJEFwcGx5WzBdO1xuXHRcdFx0Y29uc3QgdGVtcGxhdGVQYXJhbXMgPSBhcHBseUV4cHJlc3Npb24uJEFwcGx5LnNsaWNlKDEpIGFzIHVua25vd24gYXMgU3ViQXBwbHlFeHByZXNzaW9uRnJvbU1ldGFtb2RlbFtdO1xuXHRcdFx0Y29uc3QgdGFyZ2V0T2JqZWN0OiBSZWNvcmQ8c3RyaW5nLCBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248dW5rbm93bj4+ID0ge307XG5cdFx0XHR0ZW1wbGF0ZVBhcmFtcy5mb3JFYWNoKChhcHBseVBhcmFtKSA9PiB7XG5cdFx0XHRcdHRhcmdldE9iamVjdFthcHBseVBhcmFtLiROYW1lIGFzIHN0cmluZ10gPSBnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24oXG5cdFx0XHRcdFx0Y29udmVydFN1YkFwcGx5UGFyYW1ldGVycyhcblx0XHRcdFx0XHRcdGFwcGx5UGFyYW0uJExhYmVsZWRFbGVtZW50IGFzIFN1YkFwcGx5RXhwcmVzc2lvbkZyb21NZXRhbW9kZWxcblx0XHRcdFx0XHQpIGFzIFByb3BlcnR5QW5ub3RhdGlvblZhbHVlPHN0cmluZz4sXG5cdFx0XHRcdFx0dmlzaXRlZE5hdmlnYXRpb25QYXRocyxcblx0XHRcdFx0XHR1bmRlZmluZWQsXG5cdFx0XHRcdFx0cGF0aFZpc2l0b3Jcblx0XHRcdFx0KTtcblx0XHRcdH0pO1xuXHRcdFx0cmV0dXJuIGZuKFwib2RhdGEuZmlsbFVyaVRlbXBsYXRlXCIsIFt0ZW1wbGF0ZSwgdGFyZ2V0T2JqZWN0XSwgdW5kZWZpbmVkLCB0cnVlKTtcblx0fVxuXHRyZXR1cm4gdW5yZXNvbHZhYmxlRXhwcmVzc2lvbjtcbn1cblxuLyoqXG4gKiBHZW5lcmljIGhlbHBlciBmb3IgdGhlIGNvbXBhcmlzb24gb3BlcmF0aW9ucyAoZXF1YWwsIG5vdEVxdWFsLCAuLi4pLlxuICogQHRlbXBsYXRlIFQgVGhlIHRhcmdldCB0eXBlXG4gKiBAcGFyYW0gb3BlcmF0b3IgVGhlIG9wZXJhdG9yIHRvIGFwcGx5XG4gKiBAcGFyYW0gbGVmdE9wZXJhbmQgVGhlIG9wZXJhbmQgb24gdGhlIGxlZnQgc2lkZSBvZiB0aGUgb3BlcmF0b3JcbiAqIEBwYXJhbSByaWdodE9wZXJhbmQgVGhlIG9wZXJhbmQgb24gdGhlIHJpZ2h0IHNpZGUgb2YgdGhlIG9wZXJhdG9yXG4gKiBAcmV0dXJucyBBbiBleHByZXNzaW9uIHJlcHJlc2VudGluZyB0aGUgY29tcGFyaXNvblxuICovXG5mdW5jdGlvbiBjb21wYXJpc29uPFQgZXh0ZW5kcyBQcmltaXRpdmVUeXBlPihcblx0b3BlcmF0b3I6IENvbXBhcmlzb25PcGVyYXRvcixcblx0bGVmdE9wZXJhbmQ6IEV4cHJlc3Npb25PclByaW1pdGl2ZTxUPixcblx0cmlnaHRPcGVyYW5kOiBFeHByZXNzaW9uT3JQcmltaXRpdmU8VD5cbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiB7XG5cdGNvbnN0IGxlZnRFeHByZXNzaW9uID0gd3JhcFByaW1pdGl2ZShsZWZ0T3BlcmFuZCk7XG5cdGNvbnN0IHJpZ2h0RXhwcmVzc2lvbiA9IHdyYXBQcmltaXRpdmUocmlnaHRPcGVyYW5kKTtcblx0aWYgKGhhc1VucmVzb2x2YWJsZUV4cHJlc3Npb24obGVmdEV4cHJlc3Npb24sIHJpZ2h0RXhwcmVzc2lvbikpIHtcblx0XHRyZXR1cm4gdW5yZXNvbHZhYmxlRXhwcmVzc2lvbjtcblx0fVxuXHRpZiAoaXNDb25zdGFudChsZWZ0RXhwcmVzc2lvbikgJiYgaXNDb25zdGFudChyaWdodEV4cHJlc3Npb24pKSB7XG5cdFx0c3dpdGNoIChvcGVyYXRvcikge1xuXHRcdFx0Y2FzZSBcIiE9PVwiOlxuXHRcdFx0XHRyZXR1cm4gY29uc3RhbnQobGVmdEV4cHJlc3Npb24udmFsdWUgIT09IHJpZ2h0RXhwcmVzc2lvbi52YWx1ZSk7XG5cdFx0XHRjYXNlIFwiPT09XCI6XG5cdFx0XHRcdHJldHVybiBjb25zdGFudChsZWZ0RXhwcmVzc2lvbi52YWx1ZSA9PT0gcmlnaHRFeHByZXNzaW9uLnZhbHVlKTtcblx0XHRcdGNhc2UgXCI8XCI6XG5cdFx0XHRcdGlmIChcblx0XHRcdFx0XHRsZWZ0RXhwcmVzc2lvbi52YWx1ZSA9PT0gbnVsbCB8fFxuXHRcdFx0XHRcdGxlZnRFeHByZXNzaW9uLnZhbHVlID09PSB1bmRlZmluZWQgfHxcblx0XHRcdFx0XHRyaWdodEV4cHJlc3Npb24udmFsdWUgPT09IG51bGwgfHxcblx0XHRcdFx0XHRyaWdodEV4cHJlc3Npb24udmFsdWUgPT09IHVuZGVmaW5lZFxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHRyZXR1cm4gY29uc3RhbnQoZmFsc2UpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBjb25zdGFudChsZWZ0RXhwcmVzc2lvbi52YWx1ZSA8IHJpZ2h0RXhwcmVzc2lvbi52YWx1ZSk7XG5cdFx0XHRjYXNlIFwiPD1cIjpcblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdGxlZnRFeHByZXNzaW9uLnZhbHVlID09PSBudWxsIHx8XG5cdFx0XHRcdFx0bGVmdEV4cHJlc3Npb24udmFsdWUgPT09IHVuZGVmaW5lZCB8fFxuXHRcdFx0XHRcdHJpZ2h0RXhwcmVzc2lvbi52YWx1ZSA9PT0gbnVsbCB8fFxuXHRcdFx0XHRcdHJpZ2h0RXhwcmVzc2lvbi52YWx1ZSA9PT0gdW5kZWZpbmVkXG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdHJldHVybiBjb25zdGFudChmYWxzZSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIGNvbnN0YW50KGxlZnRFeHByZXNzaW9uLnZhbHVlIDw9IHJpZ2h0RXhwcmVzc2lvbi52YWx1ZSk7XG5cdFx0XHRjYXNlIFwiPlwiOlxuXHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0bGVmdEV4cHJlc3Npb24udmFsdWUgPT09IG51bGwgfHxcblx0XHRcdFx0XHRsZWZ0RXhwcmVzc2lvbi52YWx1ZSA9PT0gdW5kZWZpbmVkIHx8XG5cdFx0XHRcdFx0cmlnaHRFeHByZXNzaW9uLnZhbHVlID09PSBudWxsIHx8XG5cdFx0XHRcdFx0cmlnaHRFeHByZXNzaW9uLnZhbHVlID09PSB1bmRlZmluZWRcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0cmV0dXJuIGNvbnN0YW50KGZhbHNlKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gY29uc3RhbnQobGVmdEV4cHJlc3Npb24udmFsdWUgPiByaWdodEV4cHJlc3Npb24udmFsdWUpO1xuXHRcdFx0Y2FzZSBcIj49XCI6XG5cdFx0XHRcdGlmIChcblx0XHRcdFx0XHRsZWZ0RXhwcmVzc2lvbi52YWx1ZSA9PT0gbnVsbCB8fFxuXHRcdFx0XHRcdGxlZnRFeHByZXNzaW9uLnZhbHVlID09PSB1bmRlZmluZWQgfHxcblx0XHRcdFx0XHRyaWdodEV4cHJlc3Npb24udmFsdWUgPT09IG51bGwgfHxcblx0XHRcdFx0XHRyaWdodEV4cHJlc3Npb24udmFsdWUgPT09IHVuZGVmaW5lZFxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHRyZXR1cm4gY29uc3RhbnQoZmFsc2UpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBjb25zdGFudChsZWZ0RXhwcmVzc2lvbi52YWx1ZSA+PSByaWdodEV4cHJlc3Npb24udmFsdWUpO1xuXHRcdH1cblx0fSBlbHNlIHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0X3R5cGU6IFwiQ29tcGFyaXNvblwiLFxuXHRcdFx0b3BlcmF0b3I6IG9wZXJhdG9yLFxuXHRcdFx0b3BlcmFuZDE6IGxlZnRFeHByZXNzaW9uLFxuXHRcdFx0b3BlcmFuZDI6IHJpZ2h0RXhwcmVzc2lvblxuXHRcdH07XG5cdH1cbn1cblxuLyoqXG4gKiBHZW5lcmljIGhlbHBlciBmb3IgdGhlIGxlbmd0aCBvZiBhbiBleHByZXNzaW9uLlxuICogQHBhcmFtIGV4cHJlc3Npb24gVGhlIGlucHV0IGV4cHJlc3Npb24gcG9pbnRpbmcgdG8gYW4gYXJyYXlcbiAqIEBwYXJhbSBjaGVja1VuZGVmaW5lZCBJcyB0aGUgYXJyYXkgcG90ZW50aWFsbHkgdW5kZWZpbmVkXG4gKiBAcmV0dXJucyBBbiBleHByZXNzaW9uIHJlcHJlc2VudGluZyB0aGUgbGVuZ3RoXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsZW5ndGgoXG5cdGV4cHJlc3Npb246IFBhdGhJbk1vZGVsRXhwcmVzc2lvbjx1bmtub3duPiB8IFVucmVzb2x2YWJsZVBhdGhFeHByZXNzaW9uLFxuXHRjaGVja1VuZGVmaW5lZCA9IGZhbHNlXG4pOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248bnVtYmVyPiB7XG5cdGlmIChleHByZXNzaW9uLl90eXBlID09PSBcIlVucmVzb2x2YWJsZVwiKSB7XG5cdFx0cmV0dXJuIGV4cHJlc3Npb247XG5cdH1cblx0aWYgKCFjaGVja1VuZGVmaW5lZCkge1xuXHRcdHJldHVybiB7XG5cdFx0XHRfdHlwZTogXCJMZW5ndGhcIixcblx0XHRcdHBhdGhJbk1vZGVsOiBleHByZXNzaW9uXG5cdFx0fTtcblx0fVxuXHRyZXR1cm4gaWZFbHNlKGVxdWFsKGV4cHJlc3Npb24sIHVuZGVmaW5lZCksIC0xLCBsZW5ndGgoZXhwcmVzc2lvbikpO1xufVxuXG4vKipcbiAqIENvbXBhcmlzb246IFwiZXF1YWxcIiAoPT09KS5cbiAqIEB0ZW1wbGF0ZSBUIFRoZSB0YXJnZXQgdHlwZVxuICogQHBhcmFtIGxlZnRPcGVyYW5kIFRoZSBvcGVyYW5kIG9uIHRoZSBsZWZ0IHNpZGVcbiAqIEBwYXJhbSByaWdodE9wZXJhbmQgVGhlIG9wZXJhbmQgb24gdGhlIHJpZ2h0IHNpZGUgb2YgdGhlIGNvbXBhcmlzb25cbiAqIEByZXR1cm5zIEFuIGV4cHJlc3Npb24gcmVwcmVzZW50aW5nIHRoZSBjb21wYXJpc29uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlcXVhbDxUIGV4dGVuZHMgUHJpbWl0aXZlVHlwZT4oXG5cdGxlZnRPcGVyYW5kOiBFeHByZXNzaW9uT3JQcmltaXRpdmU8VD4sXG5cdHJpZ2h0T3BlcmFuZDogRXhwcmVzc2lvbk9yUHJpbWl0aXZlPFQ+XG4pOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4ge1xuXHRjb25zdCBsZWZ0RXhwcmVzc2lvbiA9IHdyYXBQcmltaXRpdmUobGVmdE9wZXJhbmQpO1xuXHRjb25zdCByaWdodEV4cHJlc3Npb24gPSB3cmFwUHJpbWl0aXZlKHJpZ2h0T3BlcmFuZCk7XG5cdGlmIChoYXNVbnJlc29sdmFibGVFeHByZXNzaW9uKGxlZnRFeHByZXNzaW9uLCByaWdodEV4cHJlc3Npb24pKSB7XG5cdFx0cmV0dXJuIHVucmVzb2x2YWJsZUV4cHJlc3Npb247XG5cdH1cblx0aWYgKF9jaGVja0V4cHJlc3Npb25zQXJlRXF1YWwobGVmdEV4cHJlc3Npb24sIHJpZ2h0RXhwcmVzc2lvbikpIHtcblx0XHRyZXR1cm4gY29uc3RhbnQodHJ1ZSk7XG5cdH1cblxuXHRmdW5jdGlvbiByZWR1Y2UobGVmdDogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFQ+LCByaWdodDogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFQ+KTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+IHwgdW5kZWZpbmVkIHtcblx0XHRpZiAobGVmdC5fdHlwZSA9PT0gXCJDb21wYXJpc29uXCIgJiYgaXNUcnVlKHJpZ2h0KSkge1xuXHRcdFx0Ly8gY29tcGFyZShhLCBiKSA9PT0gdHJ1ZSB+fj4gY29tcGFyZShhLCBiKVxuXHRcdFx0cmV0dXJuIGxlZnQ7XG5cdFx0fSBlbHNlIGlmIChsZWZ0Ll90eXBlID09PSBcIkNvbXBhcmlzb25cIiAmJiBpc0ZhbHNlKHJpZ2h0KSkge1xuXHRcdFx0Ly8gY29tcGFyZShhLCBiKSA9PT0gZmFsc2Ugfn4+ICFjb21wYXJlKGEsIGIpXG5cdFx0XHRyZXR1cm4gbm90KGxlZnQpO1xuXHRcdH0gZWxzZSBpZiAobGVmdC5fdHlwZSA9PT0gXCJJZkVsc2VcIiAmJiBfY2hlY2tFeHByZXNzaW9uc0FyZUVxdWFsKGxlZnQub25UcnVlLCByaWdodCkpIHtcblx0XHRcdC8vIChpZiAoeCkgeyBhIH0gZWxzZSB7IGIgfSkgPT09IGEgfn4+IHggfHwgKGIgPT09IGEpXG5cdFx0XHRyZXR1cm4gb3IobGVmdC5jb25kaXRpb24sIGVxdWFsKGxlZnQub25GYWxzZSwgcmlnaHQpKTtcblx0XHR9IGVsc2UgaWYgKGxlZnQuX3R5cGUgPT09IFwiSWZFbHNlXCIgJiYgX2NoZWNrRXhwcmVzc2lvbnNBcmVFcXVhbChsZWZ0Lm9uRmFsc2UsIHJpZ2h0KSkge1xuXHRcdFx0Ly8gKGlmICh4KSB7IGEgfSBlbHNlIHsgYiB9KSA9PT0gYiB+fj4gIXggfHwgKGEgPT09IGIpXG5cdFx0XHRyZXR1cm4gb3Iobm90KGxlZnQuY29uZGl0aW9uKSwgZXF1YWwobGVmdC5vblRydWUsIHJpZ2h0KSk7XG5cdFx0fSBlbHNlIGlmIChcblx0XHRcdGxlZnQuX3R5cGUgPT09IFwiSWZFbHNlXCIgJiZcblx0XHRcdGlzQ29uc3RhbnQobGVmdC5vblRydWUpICYmXG5cdFx0XHRpc0NvbnN0YW50KGxlZnQub25GYWxzZSkgJiZcblx0XHRcdGlzQ29uc3RhbnQocmlnaHQpICYmXG5cdFx0XHQhX2NoZWNrRXhwcmVzc2lvbnNBcmVFcXVhbChsZWZ0Lm9uVHJ1ZSwgcmlnaHQpICYmXG5cdFx0XHQhX2NoZWNrRXhwcmVzc2lvbnNBcmVFcXVhbChsZWZ0Lm9uRmFsc2UsIHJpZ2h0KVxuXHRcdCkge1xuXHRcdFx0cmV0dXJuIGNvbnN0YW50KGZhbHNlKTtcblx0XHR9XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxuXG5cdC8vIGV4cGxvaXQgc3ltbWV0cnk6IGEgPT09IGIgPH4+IGIgPT09IGFcblx0Y29uc3QgcmVkdWNlZCA9IHJlZHVjZShsZWZ0RXhwcmVzc2lvbiwgcmlnaHRFeHByZXNzaW9uKSA/PyByZWR1Y2UocmlnaHRFeHByZXNzaW9uLCBsZWZ0RXhwcmVzc2lvbik7XG5cdHJldHVybiByZWR1Y2VkID8/IGNvbXBhcmlzb24oXCI9PT1cIiwgbGVmdEV4cHJlc3Npb24sIHJpZ2h0RXhwcmVzc2lvbik7XG59XG5cbi8qKlxuICogQ29tcGFyaXNvbjogXCJub3QgZXF1YWxcIiAoIT09KS5cbiAqIEB0ZW1wbGF0ZSBUIFRoZSB0YXJnZXQgdHlwZVxuICogQHBhcmFtIGxlZnRPcGVyYW5kIFRoZSBvcGVyYW5kIG9uIHRoZSBsZWZ0IHNpZGVcbiAqIEBwYXJhbSByaWdodE9wZXJhbmQgVGhlIG9wZXJhbmQgb24gdGhlIHJpZ2h0IHNpZGUgb2YgdGhlIGNvbXBhcmlzb25cbiAqIEByZXR1cm5zIEFuIGV4cHJlc3Npb24gcmVwcmVzZW50aW5nIHRoZSBjb21wYXJpc29uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBub3RFcXVhbDxUIGV4dGVuZHMgUHJpbWl0aXZlVHlwZT4oXG5cdGxlZnRPcGVyYW5kOiBFeHByZXNzaW9uT3JQcmltaXRpdmU8VD4sXG5cdHJpZ2h0T3BlcmFuZDogRXhwcmVzc2lvbk9yUHJpbWl0aXZlPFQ+XG4pOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4ge1xuXHRyZXR1cm4gbm90KGVxdWFsKGxlZnRPcGVyYW5kLCByaWdodE9wZXJhbmQpKTtcbn1cblxuLyoqXG4gKiBDb21wYXJpc29uOiBcImdyZWF0ZXIgb3IgZXF1YWxcIiAoPj0pLlxuICogQHRlbXBsYXRlIFQgVGhlIHRhcmdldCB0eXBlXG4gKiBAcGFyYW0gbGVmdE9wZXJhbmQgVGhlIG9wZXJhbmQgb24gdGhlIGxlZnQgc2lkZVxuICogQHBhcmFtIHJpZ2h0T3BlcmFuZCBUaGUgb3BlcmFuZCBvbiB0aGUgcmlnaHQgc2lkZSBvZiB0aGUgY29tcGFyaXNvblxuICogQHJldHVybnMgQW4gZXhwcmVzc2lvbiByZXByZXNlbnRpbmcgdGhlIGNvbXBhcmlzb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdyZWF0ZXJPckVxdWFsPFQgZXh0ZW5kcyBEZWZpbmVkUHJpbWl0aXZlVHlwZT4oXG5cdGxlZnRPcGVyYW5kOiBFeHByZXNzaW9uT3JQcmltaXRpdmU8VD4sXG5cdHJpZ2h0T3BlcmFuZDogRXhwcmVzc2lvbk9yUHJpbWl0aXZlPFQ+XG4pOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4ge1xuXHRyZXR1cm4gY29tcGFyaXNvbihcIj49XCIsIGxlZnRPcGVyYW5kLCByaWdodE9wZXJhbmQpO1xufVxuXG4vKipcbiAqIENvbXBhcmlzb246IFwiZ3JlYXRlciB0aGFuXCIgKD4pLlxuICogQHRlbXBsYXRlIFQgVGhlIHRhcmdldCB0eXBlXG4gKiBAcGFyYW0gbGVmdE9wZXJhbmQgVGhlIG9wZXJhbmQgb24gdGhlIGxlZnQgc2lkZVxuICogQHBhcmFtIHJpZ2h0T3BlcmFuZCBUaGUgb3BlcmFuZCBvbiB0aGUgcmlnaHQgc2lkZSBvZiB0aGUgY29tcGFyaXNvblxuICogQHJldHVybnMgQW4gZXhwcmVzc2lvbiByZXByZXNlbnRpbmcgdGhlIGNvbXBhcmlzb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdyZWF0ZXJUaGFuPFQgZXh0ZW5kcyBEZWZpbmVkUHJpbWl0aXZlVHlwZT4oXG5cdGxlZnRPcGVyYW5kOiBFeHByZXNzaW9uT3JQcmltaXRpdmU8VD4sXG5cdHJpZ2h0T3BlcmFuZDogRXhwcmVzc2lvbk9yUHJpbWl0aXZlPFQ+XG4pOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4ge1xuXHRyZXR1cm4gY29tcGFyaXNvbihcIj5cIiwgbGVmdE9wZXJhbmQsIHJpZ2h0T3BlcmFuZCk7XG59XG5cbi8qKlxuICogQ29tcGFyaXNvbjogXCJsZXNzIG9yIGVxdWFsXCIgKDw9KS5cbiAqIEB0ZW1wbGF0ZSBUIFRoZSB0YXJnZXQgdHlwZVxuICogQHBhcmFtIGxlZnRPcGVyYW5kIFRoZSBvcGVyYW5kIG9uIHRoZSBsZWZ0IHNpZGVcbiAqIEBwYXJhbSByaWdodE9wZXJhbmQgVGhlIG9wZXJhbmQgb24gdGhlIHJpZ2h0IHNpZGUgb2YgdGhlIGNvbXBhcmlzb25cbiAqIEByZXR1cm5zIEFuIGV4cHJlc3Npb24gcmVwcmVzZW50aW5nIHRoZSBjb21wYXJpc29uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsZXNzT3JFcXVhbDxUIGV4dGVuZHMgRGVmaW5lZFByaW1pdGl2ZVR5cGU+KFxuXHRsZWZ0T3BlcmFuZDogRXhwcmVzc2lvbk9yUHJpbWl0aXZlPFQ+LFxuXHRyaWdodE9wZXJhbmQ6IEV4cHJlc3Npb25PclByaW1pdGl2ZTxUPlxuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+IHtcblx0cmV0dXJuIGNvbXBhcmlzb24oXCI8PVwiLCBsZWZ0T3BlcmFuZCwgcmlnaHRPcGVyYW5kKTtcbn1cblxuLyoqXG4gKiBDb21wYXJpc29uOiBcImxlc3MgdGhhblwiICg8KS5cbiAqIEB0ZW1wbGF0ZSBUIFRoZSB0YXJnZXQgdHlwZVxuICogQHBhcmFtIGxlZnRPcGVyYW5kIFRoZSBvcGVyYW5kIG9uIHRoZSBsZWZ0IHNpZGVcbiAqIEBwYXJhbSByaWdodE9wZXJhbmQgVGhlIG9wZXJhbmQgb24gdGhlIHJpZ2h0IHNpZGUgb2YgdGhlIGNvbXBhcmlzb25cbiAqIEByZXR1cm5zIEFuIGV4cHJlc3Npb24gcmVwcmVzZW50aW5nIHRoZSBjb21wYXJpc29uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsZXNzVGhhbjxUIGV4dGVuZHMgRGVmaW5lZFByaW1pdGl2ZVR5cGU+KFxuXHRsZWZ0T3BlcmFuZDogRXhwcmVzc2lvbk9yUHJpbWl0aXZlPFQ+LFxuXHRyaWdodE9wZXJhbmQ6IEV4cHJlc3Npb25PclByaW1pdGl2ZTxUPlxuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+IHtcblx0cmV0dXJuIGNvbXBhcmlzb24oXCI8XCIsIGxlZnRPcGVyYW5kLCByaWdodE9wZXJhbmQpO1xufVxuXG4vKipcbiAqIElmLXRoZW4tZWxzZSBleHByZXNzaW9uLlxuICpcbiAqIEV2YWx1YXRlcyB0byBvblRydWUgaWYgdGhlIGNvbmRpdGlvbiBldmFsdWF0ZXMgdG8gdHJ1ZSwgZWxzZSBldmFsdWF0ZXMgdG8gb25GYWxzZS5cbiAqIEB0ZW1wbGF0ZSBUIFRoZSB0YXJnZXQgdHlwZVxuICogQHBhcmFtIGNvbmRpdGlvbiBUaGUgY29uZGl0aW9uIHRvIGV2YWx1YXRlXG4gKiBAcGFyYW0gb25UcnVlIEV4cHJlc3Npb24gcmVzdWx0IGlmIHRoZSBjb25kaXRpb24gZXZhbHVhdGVzIHRvIHRydWVcbiAqIEBwYXJhbSBvbkZhbHNlIEV4cHJlc3Npb24gcmVzdWx0IGlmIHRoZSBjb25kaXRpb24gZXZhbHVhdGVzIHRvIGZhbHNlXG4gKiBAcmV0dXJucyBUaGUgZXhwcmVzc2lvbiB0aGF0IHJlcHJlc2VudHMgdGhpcyBjb25kaXRpb25hbCBjaGVja1xuICovXG5leHBvcnQgZnVuY3Rpb24gaWZFbHNlPFQgZXh0ZW5kcyBQcmltaXRpdmVUeXBlPihcblx0Y29uZGl0aW9uOiBFeHByZXNzaW9uT3JQcmltaXRpdmU8Ym9vbGVhbj4sXG5cdG9uVHJ1ZTogRXhwcmVzc2lvbk9yUHJpbWl0aXZlPFQ+LFxuXHRvbkZhbHNlOiBFeHByZXNzaW9uT3JQcmltaXRpdmU8VD5cbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxUPiB7XG5cdGxldCBjb25kaXRpb25FeHByZXNzaW9uID0gd3JhcFByaW1pdGl2ZShjb25kaXRpb24pO1xuXHRsZXQgb25UcnVlRXhwcmVzc2lvbiA9IHdyYXBQcmltaXRpdmUob25UcnVlKTtcblx0bGV0IG9uRmFsc2VFeHByZXNzaW9uID0gd3JhcFByaW1pdGl2ZShvbkZhbHNlKTtcblxuXHQvLyBzd2FwIGJyYW5jaGVzIGlmIHRoZSBjb25kaXRpb24gaXMgYSBuZWdhdGlvblxuXHRpZiAoY29uZGl0aW9uRXhwcmVzc2lvbi5fdHlwZSA9PT0gXCJOb3RcIikge1xuXHRcdC8vIGlmRWxzZShub3QoWCksIGEsIGIpIC0tPiBpZkVsc2UoWCwgYiwgYSlcblx0XHRbb25UcnVlRXhwcmVzc2lvbiwgb25GYWxzZUV4cHJlc3Npb25dID0gW29uRmFsc2VFeHByZXNzaW9uLCBvblRydWVFeHByZXNzaW9uXTtcblx0XHRjb25kaXRpb25FeHByZXNzaW9uID0gbm90KGNvbmRpdGlvbkV4cHJlc3Npb24pO1xuXHR9XG5cblx0Ly8gaW5saW5lIG5lc3RlZCBpZi1lbHNlIGV4cHJlc3Npb25zOiBvblRydWUgYnJhbmNoXG5cdC8vIGlmRWxzZShYLCBpZkVsc2UoWCwgYSwgYiksIGMpID09PiBpZkVsc2UoWCwgYSwgYylcblx0aWYgKG9uVHJ1ZUV4cHJlc3Npb24uX3R5cGUgPT09IFwiSWZFbHNlXCIgJiYgX2NoZWNrRXhwcmVzc2lvbnNBcmVFcXVhbChjb25kaXRpb25FeHByZXNzaW9uLCBvblRydWVFeHByZXNzaW9uLmNvbmRpdGlvbikpIHtcblx0XHRvblRydWVFeHByZXNzaW9uID0gb25UcnVlRXhwcmVzc2lvbi5vblRydWU7XG5cdH1cblxuXHQvLyBpbmxpbmUgbmVzdGVkIGlmLWVsc2UgZXhwcmVzc2lvbnM6IG9uRmFsc2UgYnJhbmNoXG5cdC8vIGlmRWxzZShYLCBhLCBpZkVsc2UoWCwgYiwgYykpID09PiBpZkVsc2UoWCwgYSwgYylcblx0aWYgKG9uRmFsc2VFeHByZXNzaW9uLl90eXBlID09PSBcIklmRWxzZVwiICYmIF9jaGVja0V4cHJlc3Npb25zQXJlRXF1YWwoY29uZGl0aW9uRXhwcmVzc2lvbiwgb25GYWxzZUV4cHJlc3Npb24uY29uZGl0aW9uKSkge1xuXHRcdG9uRmFsc2VFeHByZXNzaW9uID0gb25GYWxzZUV4cHJlc3Npb24ub25GYWxzZTtcblx0fVxuXG5cdC8vIChpZiB0cnVlIHRoZW4gYSBlbHNlIGIpICB+fj4gYVxuXHQvLyAoaWYgZmFsc2UgdGhlbiBhIGVsc2UgYikgfn4+IGJcblx0aWYgKGlzQ29uc3RhbnQoY29uZGl0aW9uRXhwcmVzc2lvbikpIHtcblx0XHRyZXR1cm4gY29uZGl0aW9uRXhwcmVzc2lvbi52YWx1ZSA/IG9uVHJ1ZUV4cHJlc3Npb24gOiBvbkZhbHNlRXhwcmVzc2lvbjtcblx0fVxuXG5cdC8vIGlmIChpc0NvbnN0YW50Qm9vbGVhbihvblRydWVFeHByZXNzaW9uKSB8fCBpc0NvbnN0YW50Qm9vbGVhbihvbkZhbHNlRXhwcmVzc2lvbikpIHtcblx0Ly8gXHRyZXR1cm4gb3IoYW5kKGNvbmRpdGlvbiwgb25UcnVlRXhwcmVzc2lvbiBhcyBFeHByZXNzaW9uPGJvb2xlYW4+KSwgYW5kKG5vdChjb25kaXRpb24pLCBvbkZhbHNlRXhwcmVzc2lvbiBhcyBFeHByZXNzaW9uPGJvb2xlYW4+KSkgYXMgRXhwcmVzc2lvbjxUPlxuXHQvLyB9XG5cblx0Ly8gKGlmIFggdGhlbiBhIGVsc2UgYSkgfn4+IGFcblx0aWYgKF9jaGVja0V4cHJlc3Npb25zQXJlRXF1YWwob25UcnVlRXhwcmVzc2lvbiwgb25GYWxzZUV4cHJlc3Npb24pKSB7XG5cdFx0cmV0dXJuIG9uVHJ1ZUV4cHJlc3Npb247XG5cdH1cblxuXHQvLyBpZiBYIHRoZW4gYSBlbHNlIGZhbHNlIH5+PiBYICYmIGFcblx0aWYgKGlzRmFsc2Uob25GYWxzZUV4cHJlc3Npb24pKSB7XG5cdFx0cmV0dXJuIGFuZChjb25kaXRpb25FeHByZXNzaW9uLCBvblRydWVFeHByZXNzaW9uIGFzIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPikgYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFQ+O1xuXHR9XG5cblx0Ly8gaWYgWCB0aGVuIGEgZWxzZSB0cnVlIH5+PiAhWCB8fCBhXG5cdGlmIChpc1RydWUob25GYWxzZUV4cHJlc3Npb24pKSB7XG5cdFx0cmV0dXJuIG9yKG5vdChjb25kaXRpb25FeHByZXNzaW9uKSwgb25UcnVlRXhwcmVzc2lvbiBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4pIGFzIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxUPjtcblx0fVxuXG5cdC8vIGlmIFggdGhlbiBmYWxzZSBlbHNlIGEgfn4+ICFYICYmIGFcblx0aWYgKGlzRmFsc2Uob25UcnVlRXhwcmVzc2lvbikpIHtcblx0XHRyZXR1cm4gYW5kKG5vdChjb25kaXRpb25FeHByZXNzaW9uKSwgb25GYWxzZUV4cHJlc3Npb24gYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+KSBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248VD47XG5cdH1cblxuXHQvLyBpZiBYIHRoZW4gdHJ1ZSBlbHNlIGEgfn4+IFggfHwgYVxuXHRpZiAoaXNUcnVlKG9uVHJ1ZUV4cHJlc3Npb24pKSB7XG5cdFx0cmV0dXJuIG9yKGNvbmRpdGlvbkV4cHJlc3Npb24sIG9uRmFsc2VFeHByZXNzaW9uIGFzIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPikgYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFQ+O1xuXHR9XG5cdGlmIChoYXNVbnJlc29sdmFibGVFeHByZXNzaW9uKGNvbmRpdGlvbkV4cHJlc3Npb24sIG9uVHJ1ZUV4cHJlc3Npb24sIG9uRmFsc2VFeHByZXNzaW9uKSkge1xuXHRcdHJldHVybiB1bnJlc29sdmFibGVFeHByZXNzaW9uO1xuXHR9XG5cdGlmIChpc0NvbXBsZXhUeXBlRXhwcmVzc2lvbihjb25kaXRpb24pIHx8IGlzQ29tcGxleFR5cGVFeHByZXNzaW9uKG9uVHJ1ZSkgfHwgaXNDb21wbGV4VHlwZUV4cHJlc3Npb24ob25GYWxzZSkpIHtcblx0XHRsZXQgcGF0aElkeCA9IDA7XG5cdFx0Y29uc3QgbXlJZkVsc2VFeHByZXNzaW9uID0gZm9ybWF0UmVzdWx0KFtjb25kaXRpb24sIG9uVHJ1ZSwgb25GYWxzZV0sIFwiLl9mb3JtYXR0ZXJzLlN0YW5kYXJkRm9ybWF0dGVyI2lmRWxzZVwiKTtcblx0XHRjb25zdCBhbGxQYXJ0cyA9IFtdO1xuXHRcdHRyYW5zZm9ybVJlY3Vyc2l2ZWx5KFxuXHRcdFx0bXlJZkVsc2VFeHByZXNzaW9uLFxuXHRcdFx0XCJQYXRoSW5Nb2RlbFwiLFxuXHRcdFx0KGNvbnN0YW50UGF0aDogUGF0aEluTW9kZWxFeHByZXNzaW9uPHVua25vd24+KSA9PiB7XG5cdFx0XHRcdGFsbFBhcnRzLnB1c2goY29uc3RhbnRQYXRoKTtcblx0XHRcdFx0cmV0dXJuIHBhdGhJbk1vZGVsKGAkJHtwYXRoSWR4Kyt9YCwgXCIkXCIpO1xuXHRcdFx0fSxcblx0XHRcdHRydWVcblx0XHQpO1xuXHRcdGFsbFBhcnRzLnVuc2hpZnQoY29uc3RhbnQoSlNPTi5zdHJpbmdpZnkobXlJZkVsc2VFeHByZXNzaW9uKSkpO1xuXHRcdHJldHVybiBmb3JtYXRSZXN1bHQoYWxsUGFydHMsIFwiLl9mb3JtYXR0ZXJzLlN0YW5kYXJkRm9ybWF0dGVyLmJpbmQoJGNvbnRyb2wpI2V2YWx1YXRlQ29tcGxleEV4cHJlc3Npb25cIiwgdW5kZWZpbmVkLCB0cnVlKTtcblx0fVxuXHRyZXR1cm4ge1xuXHRcdF90eXBlOiBcIklmRWxzZVwiLFxuXHRcdGNvbmRpdGlvbjogY29uZGl0aW9uRXhwcmVzc2lvbixcblx0XHRvblRydWU6IG9uVHJ1ZUV4cHJlc3Npb24sXG5cdFx0b25GYWxzZTogb25GYWxzZUV4cHJlc3Npb25cblx0fTtcbn1cblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciB0aGUgY3VycmVudCBleHByZXNzaW9uIGhhcyBhIHJlZmVyZW5jZSB0byB0aGUgZGVmYXVsdCBtb2RlbCAodW5kZWZpbmVkKS5cbiAqIEBwYXJhbSBleHByZXNzaW9uIFRoZSBleHByZXNzaW9uIHRvIGV2YWx1YXRlXG4gKiBAcmV0dXJucyBgdHJ1ZWAgaWYgdGhlcmUgaXMgYSByZWZlcmVuY2UgdG8gdGhlIGRlZmF1bHQgY29udGV4dFxuICovXG5mdW5jdGlvbiBoYXNSZWZlcmVuY2VUb0RlZmF1bHRDb250ZXh0KGV4cHJlc3Npb246IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjx1bmtub3duPik6IGJvb2xlYW4ge1xuXHRzd2l0Y2ggKGV4cHJlc3Npb24uX3R5cGUpIHtcblx0XHRjYXNlIFwiQ29uc3RhbnRcIjpcblx0XHRjYXNlIFwiRm9ybWF0dGVyXCI6XG5cdFx0Y2FzZSBcIkNvbXBsZXhUeXBlXCI6XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0Y2FzZSBcIlNldFwiOlxuXHRcdFx0cmV0dXJuIGV4cHJlc3Npb24ub3BlcmFuZHMuc29tZShoYXNSZWZlcmVuY2VUb0RlZmF1bHRDb250ZXh0KTtcblx0XHRjYXNlIFwiUGF0aEluTW9kZWxcIjpcblx0XHRcdHJldHVybiBleHByZXNzaW9uLm1vZGVsTmFtZSA9PT0gdW5kZWZpbmVkO1xuXHRcdGNhc2UgXCJDb21wYXJpc29uXCI6XG5cdFx0XHRyZXR1cm4gaGFzUmVmZXJlbmNlVG9EZWZhdWx0Q29udGV4dChleHByZXNzaW9uLm9wZXJhbmQxKSB8fCBoYXNSZWZlcmVuY2VUb0RlZmF1bHRDb250ZXh0KGV4cHJlc3Npb24ub3BlcmFuZDIpO1xuXHRcdGNhc2UgXCJJZkVsc2VcIjpcblx0XHRcdHJldHVybiAoXG5cdFx0XHRcdGhhc1JlZmVyZW5jZVRvRGVmYXVsdENvbnRleHQoZXhwcmVzc2lvbi5jb25kaXRpb24pIHx8XG5cdFx0XHRcdGhhc1JlZmVyZW5jZVRvRGVmYXVsdENvbnRleHQoZXhwcmVzc2lvbi5vblRydWUpIHx8XG5cdFx0XHRcdGhhc1JlZmVyZW5jZVRvRGVmYXVsdENvbnRleHQoZXhwcmVzc2lvbi5vbkZhbHNlKVxuXHRcdFx0KTtcblx0XHRjYXNlIFwiTm90XCI6XG5cdFx0Y2FzZSBcIlRydXRoeVwiOlxuXHRcdFx0cmV0dXJuIGhhc1JlZmVyZW5jZVRvRGVmYXVsdENvbnRleHQoZXhwcmVzc2lvbi5vcGVyYW5kKTtcblx0XHRkZWZhdWx0OlxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG59XG5cbi8vIFRoaXMgaXMgb25lIGNhc2Ugd2hlcmUgYW55IGRvZXMgbWFrZSBzZW5zZS4uLlxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbmV4cG9ydCB0eXBlIEZuPFQ+ID0gKCguLi5wYXJhbXM6IGFueSkgPT4gVCB8IFByb21pc2U8VD4pICYge1xuXHRfX2Z1bmN0aW9uTmFtZTogc3RyaW5nO1xufTtcblxuLyoqXG4gKiBAdHlwZWRlZiBXcmFwcGVkVHVwbGVcbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudFxuLy8gQHRzLWlnbm9yZVxudHlwZSBXcmFwcGVkVHVwbGU8VD4gPSB7IFtLIGluIGtleW9mIFRdOiBXcmFwcGVkVHVwbGU8VFtLXT4gfCBFeHByZXNzaW9uT3JQcmltaXRpdmU8VFtLXT4gfCB1bmRlZmluZWQgfTtcblxuLy8gU28sIHRoaXMgd29ya3MgYnV0IEkgY2Fubm90IGdldCBpdCB0byBjb21waWxlIDpELCBidXQgaXQgc3RpbGwgZG9lcyB3aGF0IGlzIGV4cGVjdGVkLi4uXG5cbi8qKlxuICogQSBmdW5jdGlvbiByZWZlcmVuY2Ugb3IgYSBmdW5jdGlvbiBuYW1lLlxuICovXG50eXBlIEZ1bmN0aW9uT3JOYW1lPFQ+ID0gRm48VD4gfCBzdHJpbmc7XG5cbi8qKlxuICogRnVuY3Rpb24gcGFyYW1ldGVycywgZWl0aGVyIGRlcml2ZWQgZnJvbSB0aGUgZnVuY3Rpb24gb3IgYW4gdW50eXBlZCBhcnJheS5cbiAqL1xudHlwZSBGdW5jdGlvblBhcmFtZXRlcnM8VCwgRiBleHRlbmRzIEZ1bmN0aW9uT3JOYW1lPFQ+PiA9IEYgZXh0ZW5kcyBGbjxUPiA/IFBhcmFtZXRlcnM8Rj4gOiB1bmtub3duW107XG5cbi8qKlxuICogQ2FsbHMgYSBmb3JtYXR0ZXIgZnVuY3Rpb24gdG8gcHJvY2VzcyB0aGUgcGFyYW1ldGVycy5cbiAqIElmIHJlcXVpcmVDb250ZXh0IGlzIHNldCB0byB0cnVlIGFuZCBubyBjb250ZXh0IGlzIHBhc3NlZCBhIGRlZmF1bHQgY29udGV4dCB3aWxsIGJlIGFkZGVkIGF1dG9tYXRpY2FsbHkuXG4gKiBAdGVtcGxhdGUgVFxuICogQHRlbXBsYXRlIFVcbiAqIEBwYXJhbSBwYXJhbWV0ZXJzIFRoZSBsaXN0IG9mIHBhcmFtZXRlciB0aGF0IHNob3VsZCBtYXRjaCB0aGUgdHlwZSBhbmQgbnVtYmVyIG9mIHRoZSBmb3JtYXR0ZXIgZnVuY3Rpb25cbiAqIEBwYXJhbSBmb3JtYXR0ZXJGdW5jdGlvbiBUaGUgZnVuY3Rpb24gdG8gY2FsbFxuICogQHBhcmFtIFtjb250ZXh0RW50aXR5VHlwZV0gSWYgbm8gcGFyYW1ldGVyIHJlZmVycyB0byB0aGUgY29udGV4dCB0aGVuIHdlIHVzZSB0aGlzIGluZm9ybWF0aW9uIHRvIGFkZCBhIHJlZmVyZW5jZSB0byB0aGUga2V5cyBmcm9tIHRoZSBlbnRpdHkgdHlwZS5cbiAqIEBwYXJhbSBbaWdub3JlQ29tcGxleFR5cGVdIFdoZXRoZXIgdG8gaWdub3JlIHRoZSB0cmFuc2dmb3JtYXRpb24gdG8gdGhlIFN0YW5kYXJkRm9ybWF0dGVyIG9yIG5vdFxuICogQHJldHVybnMgVGhlIGNvcnJlc3BvbmRpbmcgZXhwcmVzc2lvblxuICovXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0UmVzdWx0PFQsIFUgZXh0ZW5kcyBGbjxUPj4oXG5cdHBhcmFtZXRlcnM6IFdyYXBwZWRUdXBsZTxQYXJhbWV0ZXJzPFU+Pixcblx0Zm9ybWF0dGVyRnVuY3Rpb246IFUgfCBzdHJpbmcsXG5cdGNvbnRleHRFbnRpdHlUeXBlPzogRW50aXR5VHlwZSxcblx0aWdub3JlQ29tcGxleFR5cGUgPSBmYWxzZVxuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFQ+IHtcblx0Y29uc3QgcGFyYW1ldGVyRXhwcmVzc2lvbnMgPSAocGFyYW1ldGVycyBhcyBFeHByZXNzaW9uT3JQcmltaXRpdmU8UHJpbWl0aXZlVHlwZT5bXSkubWFwKHdyYXBQcmltaXRpdmUpO1xuXG5cdGlmIChoYXNVbnJlc29sdmFibGVFeHByZXNzaW9uKC4uLnBhcmFtZXRlckV4cHJlc3Npb25zKSkge1xuXHRcdHJldHVybiB1bnJlc29sdmFibGVFeHByZXNzaW9uO1xuXHR9XG5cdGlmIChjb250ZXh0RW50aXR5VHlwZSkge1xuXHRcdC8vIE90aGVyd2lzZSwgaWYgdGhlIGNvbnRleHQgaXMgcmVxdWlyZWQgYW5kIG5vIGNvbnRleHQgaXMgcHJvdmlkZWQgbWFrZSBzdXJlIHRvIGFkZCB0aGUgZGVmYXVsdCBiaW5kaW5nXG5cdFx0aWYgKCFwYXJhbWV0ZXJFeHByZXNzaW9ucy5zb21lKGhhc1JlZmVyZW5jZVRvRGVmYXVsdENvbnRleHQpKSB7XG5cdFx0XHRjb250ZXh0RW50aXR5VHlwZS5rZXlzLmZvckVhY2goKGtleSkgPT4gcGFyYW1ldGVyRXhwcmVzc2lvbnMucHVzaChwYXRoSW5Nb2RlbChrZXkubmFtZSwgXCJcIikpKTtcblx0XHR9XG5cdH1cblx0bGV0IGZ1bmN0aW9uTmFtZSA9IFwiXCI7XG5cdGlmICh0eXBlb2YgZm9ybWF0dGVyRnVuY3Rpb24gPT09IFwic3RyaW5nXCIpIHtcblx0XHRmdW5jdGlvbk5hbWUgPSBmb3JtYXR0ZXJGdW5jdGlvbjtcblx0fSBlbHNlIHtcblx0XHRmdW5jdGlvbk5hbWUgPSBmb3JtYXR0ZXJGdW5jdGlvbi5fX2Z1bmN0aW9uTmFtZTtcblx0fVxuXHQvLyBGb3JtYXR0ZXJOYW1lIGNhbiBiZSBvZiBmb3JtYXQgc2FwLmZlLmNvcmUueHh4I21ldGhvZE5hbWUgdG8gaGF2ZSBtdWx0aXBsZSBmb3JtYXR0ZXIgaW4gb25lIGNsYXNzXG5cdGNvbnN0IFtmb3JtYXR0ZXJDbGFzcywgZm9ybWF0dGVyTmFtZV0gPSBmdW5jdGlvbk5hbWUuc3BsaXQoXCIjXCIpO1xuXG5cdC8vIEluIHNvbWUgY2FzZSB3ZSBhbHNvIGNhbm5vdCBjYWxsIGRpcmVjdGx5IGEgZnVuY3Rpb24gYmVjYXVzZSBvZiB0b28gY29tcGxleCBpbnB1dCwgaW4gdGhhdCBjYXNlIHdlIG5lZWQgdG8gY29udmVydCB0byBhIHNpbXBsZXIgZnVuY3Rpb24gY2FsbFxuXHRpZiAoXG5cdFx0IWlnbm9yZUNvbXBsZXhUeXBlICYmXG5cdFx0KHBhcmFtZXRlckV4cHJlc3Npb25zLnNvbWUoaXNDb21wbGV4VHlwZUV4cHJlc3Npb24pIHx8XG5cdFx0XHRwYXJhbWV0ZXJFeHByZXNzaW9ucy5zb21lKGlzQ29uY2F0RXhwcmVzc2lvbikgfHxcblx0XHRcdHBhcmFtZXRlckV4cHJlc3Npb25zLnNvbWUoaXNJZkVsc2VFeHByZXNzaW9uKSlcblx0KSB7XG5cdFx0bGV0IHBhdGhJZHggPSAwO1xuXHRcdGNvbnN0IG15Rm9ybWF0RXhwcmVzc2lvbiA9IGZvcm1hdFJlc3VsdChwYXJhbWV0ZXJFeHByZXNzaW9ucywgZnVuY3Rpb25OYW1lLCB1bmRlZmluZWQsIHRydWUpO1xuXHRcdGNvbnN0IGFsbFBhcnRzID0gW107XG5cdFx0dHJhbnNmb3JtUmVjdXJzaXZlbHkoXG5cdFx0XHRteUZvcm1hdEV4cHJlc3Npb24sXG5cdFx0XHRcIlBhdGhJbk1vZGVsXCIsXG5cdFx0XHQoY29uc3RhbnRQYXRoOiBQYXRoSW5Nb2RlbEV4cHJlc3Npb248dW5rbm93bj4pID0+IHtcblx0XHRcdFx0YWxsUGFydHMucHVzaChjb25zdGFudFBhdGgpO1xuXHRcdFx0XHRyZXR1cm4gcGF0aEluTW9kZWwoYCQke3BhdGhJZHgrK31gLCBcIiRcIik7XG5cdFx0XHR9LFxuXHRcdFx0dHJ1ZVxuXHRcdCk7XG5cdFx0YWxsUGFydHMudW5zaGlmdChjb25zdGFudChKU09OLnN0cmluZ2lmeShteUZvcm1hdEV4cHJlc3Npb24pKSk7XG5cdFx0cmV0dXJuIGZvcm1hdFJlc3VsdChhbGxQYXJ0cywgXCIuX2Zvcm1hdHRlcnMuU3RhbmRhcmRGb3JtYXR0ZXIuYmluZCgkY29udHJvbCkjZXZhbHVhdGVDb21wbGV4RXhwcmVzc2lvblwiLCB1bmRlZmluZWQsIHRydWUpO1xuXHR9IGVsc2UgaWYgKCEhZm9ybWF0dGVyTmFtZSAmJiBmb3JtYXR0ZXJOYW1lLmxlbmd0aCA+IDApIHtcblx0XHRwYXJhbWV0ZXJFeHByZXNzaW9ucy51bnNoaWZ0KGNvbnN0YW50KGZvcm1hdHRlck5hbWUpKTtcblx0fVxuXG5cdHJldHVybiB7XG5cdFx0X3R5cGU6IFwiRm9ybWF0dGVyXCIsXG5cdFx0Zm46IGZvcm1hdHRlckNsYXNzLFxuXHRcdHBhcmFtZXRlcnM6IHBhcmFtZXRlckV4cHJlc3Npb25zXG5cdH07XG59XG5cbnR5cGUgQmluZGluZ0NvbnN0cmFpbnRzID0ge1xuXHRzY2FsZT86IG51bWJlcjtcblx0cHJlY2lzaW9uPzogbnVtYmVyO1xuXHRtYXhMZW5ndGg/OiBudW1iZXI7XG5cdG51bGxhYmxlPzogYm9vbGVhbjtcblx0bWluaW11bT86IHN0cmluZztcblx0bWF4aW11bT86IHN0cmluZztcblx0aXNEaWdpdFNlcXVlbmNlPzogYm9vbGVhbjtcblx0VjQ/OiBib29sZWFuO1xufTtcbmV4cG9ydCBmdW5jdGlvbiBzZXRVcENvbnN0cmFpbnRzKHRhcmdldE1hcHBpbmc6IFR5cGVNYXBwaW5nRGVmaW5pdGlvbiwgcHJvcGVydHk6IFByb3BlcnR5IHwgQWN0aW9uUGFyYW1ldGVyKTogQmluZGluZ0NvbnN0cmFpbnRzIHtcblx0Y29uc3QgY29uc3RyYWludHM6IEJpbmRpbmdDb25zdHJhaW50cyA9IHt9O1xuXHRpZiAodGFyZ2V0TWFwcGluZz8uY29uc3RyYWludHM/LiRTY2FsZSAmJiBwcm9wZXJ0eS5zY2FsZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0Y29uc3RyYWludHMuc2NhbGUgPSBwcm9wZXJ0eS5zY2FsZTtcblx0fVxuXHRpZiAodGFyZ2V0TWFwcGluZz8uY29uc3RyYWludHM/LiRQcmVjaXNpb24gJiYgcHJvcGVydHkucHJlY2lzaW9uICE9PSB1bmRlZmluZWQpIHtcblx0XHRjb25zdHJhaW50cy5wcmVjaXNpb24gPSBwcm9wZXJ0eS5wcmVjaXNpb247XG5cdH1cblx0aWYgKHRhcmdldE1hcHBpbmc/LmNvbnN0cmFpbnRzPy4kTWF4TGVuZ3RoICYmIHByb3BlcnR5Lm1heExlbmd0aCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0Y29uc3RyYWludHMubWF4TGVuZ3RoID0gcHJvcGVydHkubWF4TGVuZ3RoO1xuXHR9XG5cdGlmIChwcm9wZXJ0eS5udWxsYWJsZSA9PT0gZmFsc2UpIHtcblx0XHRjb25zdHJhaW50cy5udWxsYWJsZSA9IGZhbHNlO1xuXHR9XG5cdGlmICh0YXJnZXRNYXBwaW5nPy5jb25zdHJhaW50cz8uW1wiQE9yZy5PRGF0YS5WYWxpZGF0aW9uLlYxLk1pbmltdW0vJERlY2ltYWxcIl0gJiYgIWlzTmFOKHByb3BlcnR5LmFubm90YXRpb25zPy5WYWxpZGF0aW9uPy5NaW5pbXVtKSkge1xuXHRcdGNvbnN0cmFpbnRzLm1pbmltdW0gPSBgJHtwcm9wZXJ0eS5hbm5vdGF0aW9ucz8uVmFsaWRhdGlvbj8uTWluaW11bX1gO1xuXHR9XG5cdGlmICh0YXJnZXRNYXBwaW5nPy5jb25zdHJhaW50cz8uW1wiQE9yZy5PRGF0YS5WYWxpZGF0aW9uLlYxLk1heGltdW0vJERlY2ltYWxcIl0gJiYgIWlzTmFOKHByb3BlcnR5LmFubm90YXRpb25zPy5WYWxpZGF0aW9uPy5NYXhpbXVtKSkge1xuXHRcdGNvbnN0cmFpbnRzLm1heGltdW0gPSBgJHtwcm9wZXJ0eS5hbm5vdGF0aW9ucz8uVmFsaWRhdGlvbj8uTWF4aW11bX1gO1xuXHR9XG5cdGlmIChcblx0XHRwcm9wZXJ0eS5hbm5vdGF0aW9ucz8uQ29tbW9uPy5Jc0RpZ2l0U2VxdWVuY2UgJiZcblx0XHR0YXJnZXRNYXBwaW5nLnR5cGUgPT09IFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuU3RyaW5nXCIgJiZcblx0XHR0YXJnZXRNYXBwaW5nPy5jb25zdHJhaW50cz8uW1wiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5Jc0RpZ2l0U2VxdWVuY2VcIl1cblx0KSB7XG5cdFx0Y29uc3RyYWludHMuaXNEaWdpdFNlcXVlbmNlID0gdHJ1ZTtcblx0fVxuXHRpZiAodGFyZ2V0TWFwcGluZz8uY29uc3RyYWludHM/LiRWNCkge1xuXHRcdGNvbnN0cmFpbnRzLlY0ID0gdHJ1ZTtcblx0fVxuXHRyZXR1cm4gY29uc3RyYWludHM7XG59XG5cbi8qKlxuICogR2VuZXJhdGVzIHRoZSBiaW5kaW5nIGV4cHJlc3Npb24gZm9yIHRoZSBwcm9wZXJ0eSwgYW5kIHNldHMgdXAgdGhlIGZvcm1hdE9wdGlvbnMgYW5kIGNvbnN0cmFpbnRzLlxuICogQHBhcmFtIHByb3BlcnR5IFRoZSBQcm9wZXJ0eSBmb3Igd2hpY2ggd2UgYXJlIHNldHRpbmcgdXAgdGhlIGJpbmRpbmdcbiAqIEBwYXJhbSBwcm9wZXJ0eUJpbmRpbmdFeHByZXNzaW9uIFRoZSBCaW5kaW5nRXhwcmVzc2lvbiBvZiB0aGUgcHJvcGVydHkgYWJvdmUuIFNlcnZlcyBhcyB0aGUgYmFzaXMgdG8gd2hpY2ggaW5mb3JtYXRpb24gY2FuIGJlIGFkZGVkXG4gKiBAcGFyYW0gaWdub3JlQ29uc3RyYWludHMgSWdub3JlIGNvbnN0cmFpbnRzIG9mIHRoZSBwcm9wZXJ0eVxuICogQHJldHVybnMgVGhlIGJpbmRpbmcgZXhwcmVzc2lvbiBmb3IgdGhlIHByb3BlcnR5IHdpdGggZm9ybWF0T3B0aW9ucyBhbmQgY29uc3RyYWludHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdFdpdGhUeXBlSW5mb3JtYXRpb248VD4oXG5cdHByb3BlcnR5OiBQcm9wZXJ0eSB8IEFjdGlvblBhcmFtZXRlcixcblx0cHJvcGVydHlCaW5kaW5nRXhwcmVzc2lvbjogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHN0cmluZz4sXG5cdGlnbm9yZUNvbnN0cmFpbnRzID0gZmFsc2Vcbik6IFBhdGhJbk1vZGVsRXhwcmVzc2lvbjxUPiB7XG5cdGNvbnN0IG91dEV4cHJlc3Npb246IFBhdGhJbk1vZGVsRXhwcmVzc2lvbjx1bmtub3duPiA9IHByb3BlcnR5QmluZGluZ0V4cHJlc3Npb24gYXMgUGF0aEluTW9kZWxFeHByZXNzaW9uPHVua25vd24+O1xuXHRpZiAocHJvcGVydHkuX3R5cGUgIT09IFwiUHJvcGVydHlcIiAmJiBwcm9wZXJ0eS5fdHlwZSAhPT0gXCJBY3Rpb25QYXJhbWV0ZXJcIikge1xuXHRcdHJldHVybiBvdXRFeHByZXNzaW9uO1xuXHR9XG5cdGNvbnN0IHRhcmdldE1hcHBpbmcgPSBFRE1fVFlQRV9NQVBQSU5HW3Byb3BlcnR5LnR5cGVdO1xuXHRpZiAoIXRhcmdldE1hcHBpbmcpIHtcblx0XHRyZXR1cm4gb3V0RXhwcmVzc2lvbjtcblx0fVxuXHRpZiAoIW91dEV4cHJlc3Npb24uZm9ybWF0T3B0aW9ucykge1xuXHRcdG91dEV4cHJlc3Npb24uZm9ybWF0T3B0aW9ucyA9IHt9O1xuXHR9XG5cdG91dEV4cHJlc3Npb24uY29uc3RyYWludHMgPSB7fTtcblxuXHRvdXRFeHByZXNzaW9uLnR5cGUgPSB0YXJnZXRNYXBwaW5nLnR5cGU7XG5cdGlmICghaWdub3JlQ29uc3RyYWludHMpIHtcblx0XHRvdXRFeHByZXNzaW9uLmNvbnN0cmFpbnRzID0gc2V0VXBDb25zdHJhaW50cyh0YXJnZXRNYXBwaW5nLCBwcm9wZXJ0eSk7XG5cdH1cblxuXHRpZiAoXG5cdFx0KG91dEV4cHJlc3Npb24/LnR5cGU/LmluZGV4T2YoXCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5JbnRcIikgPT09IDAgJiYgb3V0RXhwcmVzc2lvbj8udHlwZSAhPT0gXCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5JbnQ2NFwiKSB8fFxuXHRcdG91dEV4cHJlc3Npb24/LnR5cGUgPT09IFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuRG91YmxlXCJcblx0KSB7XG5cdFx0b3V0RXhwcmVzc2lvbi5mb3JtYXRPcHRpb25zID0gT2JqZWN0LmFzc2lnbihvdXRFeHByZXNzaW9uLmZvcm1hdE9wdGlvbnMsIHtcblx0XHRcdHBhcnNlQXNTdHJpbmc6IGZhbHNlXG5cdFx0fSk7XG5cdH1cblx0aWYgKG91dEV4cHJlc3Npb24udHlwZSA9PT0gXCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5TdHJpbmdcIiAmJiBpc1Byb3BlcnR5KHByb3BlcnR5KSkge1xuXHRcdGlmIChvdXRFeHByZXNzaW9uLmNvbnN0cmFpbnRzPy5pc0RpZ2l0U2VxdWVuY2UgfHwgKG91dEV4cHJlc3Npb24uY29uc3RyYWludHM/Lm51bGxhYmxlICE9PSBmYWxzZSAmJiBwcm9wZXJ0eS5udWxsYWJsZSA9PT0gdHJ1ZSkpIHtcblx0XHRcdG91dEV4cHJlc3Npb24uZm9ybWF0T3B0aW9ucy5wYXJzZUtlZXBzRW1wdHlTdHJpbmcgPSBmYWxzZTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0b3V0RXhwcmVzc2lvbi5mb3JtYXRPcHRpb25zLnBhcnNlS2VlcHNFbXB0eVN0cmluZyA9IHRydWU7XG5cdFx0fVxuXHRcdGNvbnN0IGZpc2NhbFR5cGUgPSBnZXRGaXNjYWxUeXBlKHByb3BlcnR5KTtcblx0XHRpZiAoZmlzY2FsVHlwZSkge1xuXHRcdFx0b3V0RXhwcmVzc2lvbi5mb3JtYXRPcHRpb25zLmZpc2NhbFR5cGUgPSBmaXNjYWxUeXBlO1xuXHRcdFx0b3V0RXhwcmVzc2lvbi50eXBlID0gXCJzYXAuZmUuY29yZS50eXBlLkZpc2NhbERhdGVcIjtcblx0XHR9XG5cdH1cblx0Y29uc3QgdHlwZXNTdXBwb3J0aW5nUGFyc2VFbXB0eVZhbHVlVG9aZXJvID0gW1xuXHRcdFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuSW50MTZcIixcblx0XHRcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLkludDMyXCIsXG5cdFx0XCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5JbnQ2NFwiLFxuXHRcdFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuU2luZ2xlXCIsXG5cdFx0XCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5Eb3VibGVcIixcblx0XHRcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLkRlY2ltYWxcIixcblx0XHRcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLkJ5dGVcIixcblx0XHRcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLlNCeXRlXCJcblx0XTtcblx0aWYgKFxuXHRcdG91dEV4cHJlc3Npb24uY29uc3RyYWludHM/Lm51bGxhYmxlID09PSBmYWxzZSAmJlxuXHRcdG91dEV4cHJlc3Npb24udHlwZSAmJlxuXHRcdHR5cGVzU3VwcG9ydGluZ1BhcnNlRW1wdHlWYWx1ZVRvWmVyby5pbmNsdWRlcyhvdXRFeHByZXNzaW9uLnR5cGUpXG5cdCkge1xuXHRcdG91dEV4cHJlc3Npb24uZm9ybWF0T3B0aW9ucyA9IE9iamVjdC5hc3NpZ24ob3V0RXhwcmVzc2lvbi5mb3JtYXRPcHRpb25zLCB7XG5cdFx0XHRwYXJzZUVtcHR5VmFsdWVUb1plcm86IHRydWVcblx0XHR9KTtcblx0fVxuXHRpZiAoXG5cdFx0b3V0RXhwcmVzc2lvbi5jb25zdHJhaW50cz8ubnVsbGFibGUgIT09IGZhbHNlICYmXG5cdFx0KG91dEV4cHJlc3Npb24udHlwZSA9PT0gXCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5JbnQ2NFwiIHx8IG91dEV4cHJlc3Npb24udHlwZSA9PT0gXCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5EZWNpbWFsXCIpXG5cdCkge1xuXHRcdG91dEV4cHJlc3Npb24uZm9ybWF0T3B0aW9ucyA9IE9iamVjdC5hc3NpZ24ob3V0RXhwcmVzc2lvbi5mb3JtYXRPcHRpb25zLCB7XG5cdFx0XHRlbXB0eVN0cmluZzogXCJcIlxuXHRcdH0pO1xuXHR9XG5cblx0cmV0dXJuIG91dEV4cHJlc3Npb247XG59XG5cbmV4cG9ydCBjb25zdCBnZXRGaXNjYWxUeXBlID0gZnVuY3Rpb24gKHByb3BlcnR5OiBQcm9wZXJ0eSk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdGlmIChwcm9wZXJ0eS5hbm5vdGF0aW9ucz8uQ29tbW9uPy5Jc0Zpc2NhbFllYXIpIHtcblx0XHRyZXR1cm4gQ29tbW9uQW5ub3RhdGlvblRlcm1zLklzRmlzY2FsWWVhcjtcblx0fVxuXHRpZiAocHJvcGVydHkuYW5ub3RhdGlvbnM/LkNvbW1vbj8uSXNGaXNjYWxQZXJpb2QpIHtcblx0XHRyZXR1cm4gQ29tbW9uQW5ub3RhdGlvblRlcm1zLklzRmlzY2FsUGVyaW9kO1xuXHR9XG5cdGlmIChwcm9wZXJ0eS5hbm5vdGF0aW9ucz8uQ29tbW9uPy5Jc0Zpc2NhbFllYXJQZXJpb2QpIHtcblx0XHRyZXR1cm4gQ29tbW9uQW5ub3RhdGlvblRlcm1zLklzRmlzY2FsWWVhclBlcmlvZDtcblx0fVxuXHRpZiAocHJvcGVydHkuYW5ub3RhdGlvbnM/LkNvbW1vbj8uSXNGaXNjYWxRdWFydGVyKSB7XG5cdFx0cmV0dXJuIENvbW1vbkFubm90YXRpb25UZXJtcy5Jc0Zpc2NhbFF1YXJ0ZXI7XG5cdH1cblx0aWYgKHByb3BlcnR5LmFubm90YXRpb25zPy5Db21tb24/LklzRmlzY2FsWWVhclF1YXJ0ZXIpIHtcblx0XHRyZXR1cm4gQ29tbW9uQW5ub3RhdGlvblRlcm1zLklzRmlzY2FsWWVhclF1YXJ0ZXI7XG5cdH1cblx0aWYgKHByb3BlcnR5LmFubm90YXRpb25zPy5Db21tb24/LklzRmlzY2FsV2Vlaykge1xuXHRcdHJldHVybiBDb21tb25Bbm5vdGF0aW9uVGVybXMuSXNGaXNjYWxXZWVrO1xuXHR9XG5cdGlmIChwcm9wZXJ0eS5hbm5vdGF0aW9ucz8uQ29tbW9uPy5Jc0Zpc2NhbFllYXJXZWVrKSB7XG5cdFx0cmV0dXJuIENvbW1vbkFubm90YXRpb25UZXJtcy5Jc0Zpc2NhbFllYXJXZWVrO1xuXHR9XG5cdGlmIChwcm9wZXJ0eS5hbm5vdGF0aW9ucz8uQ29tbW9uPy5Jc0RheU9mRmlzY2FsWWVhcikge1xuXHRcdHJldHVybiBDb21tb25Bbm5vdGF0aW9uVGVybXMuSXNEYXlPZkZpc2NhbFllYXI7XG5cdH1cbn07XG5cbi8qKlxuICogQ2FsbHMgYSBjb21wbGV4IHR5cGUgdG8gcHJvY2VzcyB0aGUgcGFyYW1ldGVycy5cbiAqIElmIHJlcXVpcmVDb250ZXh0IGlzIHNldCB0byB0cnVlIGFuZCBubyBjb250ZXh0IGlzIHBhc3NlZCwgYSBkZWZhdWx0IGNvbnRleHQgd2lsbCBiZSBhZGRlZCBhdXRvbWF0aWNhbGx5LlxuICogQHRlbXBsYXRlIFRcbiAqIEB0ZW1wbGF0ZSBVXG4gKiBAcGFyYW0gcGFyYW1ldGVycyBUaGUgbGlzdCBvZiBwYXJhbWV0ZXJzIHRoYXQgc2hvdWxkIG1hdGNoIHRoZSB0eXBlIGZvciB0aGUgY29tcGxleCB0eXBlPVxuICogQHBhcmFtIHR5cGUgVGhlIGNvbXBsZXggdHlwZSB0byB1c2VcbiAqIEBwYXJhbSBbY29udGV4dEVudGl0eVR5cGVdIFRoZSBjb250ZXh0IGVudGl0eSB0eXBlIHRvIGNvbnNpZGVyXG4gKiBAcGFyYW0gb0Zvcm1hdE9wdGlvbnNcbiAqIEBwYXJhbSBvQ29uc3RyYWludE9wdGlvbnNcbiAqIEByZXR1cm5zIFRoZSBjb3JyZXNwb25kaW5nIGV4cHJlc3Npb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFkZFR5cGVJbmZvcm1hdGlvbjxULCBVIGV4dGVuZHMgRm48VD4+KFxuXHRwYXJhbWV0ZXJzOiBXcmFwcGVkVHVwbGU8UGFyYW1ldGVyczxVPj4sXG5cdHR5cGU6IHN0cmluZyxcblx0Y29udGV4dEVudGl0eVR5cGU/OiBFbnRpdHlUeXBlLFxuXHRvRm9ybWF0T3B0aW9ucz86IENvbXBsZXhUeXBlRm9ybWF0T3B0aW9ucyxcblx0b0NvbnN0cmFpbnRPcHRpb25zPzogQ29tcGxleFR5cGVDb25zdHJhaW50T3B0aW9uc1xuKTogVW5yZXNvbHZhYmxlUGF0aEV4cHJlc3Npb24gfCBDb21wbGV4VHlwZUV4cHJlc3Npb248VD4gfCBDb25zdGFudEV4cHJlc3Npb248VD4ge1xuXHRjb25zdCBwYXJhbWV0ZXJFeHByZXNzaW9ucyA9IChwYXJhbWV0ZXJzIGFzIEV4cHJlc3Npb25PclByaW1pdGl2ZTxQcmltaXRpdmVUeXBlPltdKS5tYXAod3JhcFByaW1pdGl2ZSk7XG5cdGlmIChoYXNVbnJlc29sdmFibGVFeHByZXNzaW9uKC4uLnBhcmFtZXRlckV4cHJlc3Npb25zKSkge1xuXHRcdHJldHVybiB1bnJlc29sdmFibGVFeHByZXNzaW9uO1xuXHR9XG5cdC8vIElmIHRoZXJlIGlzIG9ubHkgb25lIHBhcmFtZXRlciBhbmQgaXQgaXMgYSBjb25zdGFudCBhbmQgd2UgZG9uJ3QgZXhwZWN0IHRoZSBjb250ZXh0IHRoZW4gcmV0dXJuIHRoZSBjb25zdGFudFxuXHRpZiAocGFyYW1ldGVyRXhwcmVzc2lvbnMubGVuZ3RoID09PSAxICYmIGlzQ29uc3RhbnQocGFyYW1ldGVyRXhwcmVzc2lvbnNbMF0pICYmICFjb250ZXh0RW50aXR5VHlwZSkge1xuXHRcdHJldHVybiBwYXJhbWV0ZXJFeHByZXNzaW9uc1swXSBhcyBDb25zdGFudEV4cHJlc3Npb248VD47XG5cdH0gZWxzZSBpZiAoY29udGV4dEVudGl0eVR5cGUpIHtcblx0XHQvLyBPdGhlcndpc2UsIGlmIHRoZSBjb250ZXh0IGlzIHJlcXVpcmVkIGFuZCBubyBjb250ZXh0IGlzIHByb3ZpZGVkIG1ha2Ugc3VyZSB0byBhZGQgdGhlIGRlZmF1bHQgYmluZGluZ1xuXHRcdGlmICghcGFyYW1ldGVyRXhwcmVzc2lvbnMuc29tZShoYXNSZWZlcmVuY2VUb0RlZmF1bHRDb250ZXh0KSkge1xuXHRcdFx0Y29udGV4dEVudGl0eVR5cGUua2V5cy5mb3JFYWNoKChrZXkpID0+IHBhcmFtZXRlckV4cHJlc3Npb25zLnB1c2gocGF0aEluTW9kZWwoa2V5Lm5hbWUsIFwiXCIpKSk7XG5cdFx0fVxuXHR9XG5cdG9Gb3JtYXRPcHRpb25zID0gX2dldENvbXBsZXhUeXBlRm9ybWF0T3B0aW9uc0Zyb21GaXJzdFBhcmFtKHBhcmFtZXRlcnNbMF0sIG9Gb3JtYXRPcHRpb25zKTtcblxuXHRpZiAodHlwZSA9PT0gXCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5Vbml0XCIpIHtcblx0XHRjb25zdCB1b21QYXRoID0gcGF0aEluTW9kZWwoXCIvIyNAQHJlcXVlc3RVbml0c09mTWVhc3VyZVwiKTtcblx0XHR1b21QYXRoLnRhcmdldFR5cGUgPSBcImFueVwiO1xuXHRcdHVvbVBhdGgubW9kZSA9IFwiT25lVGltZVwiO1xuXHRcdG9Gb3JtYXRPcHRpb25zID8/PSB7fTtcblx0XHRvRm9ybWF0T3B0aW9ucy5wcmVzZXJ2ZURlY2ltYWxzID0gb0NvbnN0cmFpbnRPcHRpb25zPy5za2lwRGVjaW1hbHNWYWxpZGF0aW9uID8/IGZhbHNlO1xuXHRcdHBhcmFtZXRlckV4cHJlc3Npb25zLnB1c2godW9tUGF0aCk7XG5cdH0gZWxzZSBpZiAodHlwZSA9PT0gXCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5DdXJyZW5jeVwiKSB7XG5cdFx0Y29uc3QgY3VycmVuY3lQYXRoID0gcGF0aEluTW9kZWwoXCIvIyNAQHJlcXVlc3RDdXJyZW5jeUNvZGVzXCIpO1xuXHRcdGN1cnJlbmN5UGF0aC50YXJnZXRUeXBlID0gXCJhbnlcIjtcblx0XHRjdXJyZW5jeVBhdGgubW9kZSA9IFwiT25lVGltZVwiO1xuXHRcdG9Gb3JtYXRPcHRpb25zID8/PSB7fTtcblx0XHRpZiAob0NvbnN0cmFpbnRPcHRpb25zPy5za2lwRGVjaW1hbHNWYWxpZGF0aW9uID09PSB0cnVlKSB7XG5cdFx0XHRvRm9ybWF0T3B0aW9ucy5kZWNpbWFscyA9IDk5OyAvLyBzZXR0aW5nIHRvIDk5IHRvIGF2b2lkIHJvdW5kaW5nIGluIGN1cnJlbmN5IGNvbnZlcnNpb25cblx0XHR9XG5cblx0XHRvRm9ybWF0T3B0aW9ucy5wcmVzZXJ2ZURlY2ltYWxzID0gb0NvbnN0cmFpbnRPcHRpb25zPy5za2lwRGVjaW1hbHNWYWxpZGF0aW9uID8/IGZhbHNlOyAvLyBkZWZhdWx0IHZhbHVlIHNpbmNlIHdlIGRvbid0IGhhdmUgYSBDTERSXG5cdFx0cGFyYW1ldGVyRXhwcmVzc2lvbnMucHVzaChjdXJyZW5jeVBhdGgpO1xuXHR9XG5cblx0cmV0dXJuIHtcblx0XHRfdHlwZTogXCJDb21wbGV4VHlwZVwiLFxuXHRcdHR5cGU6IHR5cGUsXG5cdFx0Zm9ybWF0T3B0aW9uczogb0Zvcm1hdE9wdGlvbnMgfHwge30sXG5cdFx0Y29uc3RyYWludHM6IG9Db25zdHJhaW50T3B0aW9ucyB8fCB7fSxcblx0XHRwYXJhbWV0ZXJzOiB7fSxcblx0XHRiaW5kaW5nUGFyYW1ldGVyczogcGFyYW1ldGVyRXhwcmVzc2lvbnNcblx0fTtcbn1cblxudHlwZSBDb21wbGV4VHlwZUZvcm1hdE9wdGlvbnMgPSB7XG5cdGRlY2ltYWxzPzogbnVtYmVyO1xuXHRzaG93TnVtYmVyPzogYm9vbGVhbjtcblx0c2hvd01lYXN1cmU/OiBib29sZWFuO1xuXHRwYXJzZUFzU3RyaW5nPzogYm9vbGVhbjtcblx0cGFyc2VLZWVwc0VtcHR5U3RyaW5nPzogYm9vbGVhbjtcblx0ZW1wdHlTdHJpbmc/OiBzdHJpbmcgfCBudW1iZXIgfCBudWxsO1xuXHRzaG93VGltZT86IGJvb2xlYW47XG5cdHNob3dEYXRlPzogYm9vbGVhbjtcblx0c2hvd1RpbWV6b25lPzogYm9vbGVhbjtcblx0cHJlc2VydmVEZWNpbWFscz86IGJvb2xlYW47XG5cdGRlY2ltYWxQYWRkaW5nPzogbnVtYmVyO1xufTtcblxuZXhwb3J0IHR5cGUgQ29tcGxleFR5cGVDb25zdHJhaW50T3B0aW9ucyA9IHtcblx0c2tpcERlY2ltYWxzVmFsaWRhdGlvbj86IGJvb2xlYW47XG59O1xuXG4vKipcbiAqIFByb2Nlc3MgdGhlIGZvcm1hdE9wdGlvbnMgZm9yIGEgY29tcGxleFR5cGUgYmFzZWQgb24gdGhlIGZpcnN0IHBhcmFtZXRlci5cbiAqIEBwYXJhbSBwYXJhbSBUaGUgZmlyc3QgcGFyYW1ldGVyIG9mIHRoZSBjb21wbGV4IHR5cGVcbiAqIEBwYXJhbSBmb3JtYXRPcHRpb25zIEluaXRpYWwgZm9ybWF0T3B0aW9uc1xuICogQHJldHVybnMgVGhlIG1vZGlmaWVkIGZvcm1hdE9wdGlvbnNcbiAqL1xuZnVuY3Rpb24gX2dldENvbXBsZXhUeXBlRm9ybWF0T3B0aW9uc0Zyb21GaXJzdFBhcmFtPFQsIFUgZXh0ZW5kcyBGbjxUPj4oXG5cdHBhcmFtOiBQYXJhbWV0ZXJzPFU+LFxuXHRmb3JtYXRPcHRpb25zOiB1bmRlZmluZWQgfCBDb21wbGV4VHlwZUZvcm1hdE9wdGlvbnNcbik6IENvbXBsZXhUeXBlRm9ybWF0T3B0aW9ucyB8IHVuZGVmaW5lZCB7XG5cdC8vIGlmIHNob3dNZWFzdXJlIGlzIHNldCB0byBmYWxzZSB3ZSB3YW50IHRvIG5vdCBwYXJzZSBhcyBzdHJpbmcgdG8gc2VlIHRoZSAwXG5cdC8vIHdlIGRvIHRoYXQgYWxzbyBmb3IgYWxsIGJpbmRpbmdzIGJlY2F1c2Ugb3RoZXJ3aXNlIHRoZSBtZGMgRmllbGQgaXNuJ3QgZWRpdGFibGVcblx0aWYgKFxuXHRcdCEoZm9ybWF0T3B0aW9ucyAmJiBmb3JtYXRPcHRpb25zLnNob3dOdW1iZXIgPT09IGZhbHNlKSAmJlxuXHRcdChwYXJhbT8udHlwZT8uaW5kZXhPZihcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLkludFwiKSA9PT0gMCB8fFxuXHRcdFx0cGFyYW0/LnR5cGUgPT09IFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuRGVjaW1hbFwiIHx8XG5cdFx0XHRwYXJhbT8udHlwZSA9PT0gXCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5Eb3VibGVcIilcblx0KSB7XG5cdFx0aWYgKHBhcmFtPy50eXBlID09PSBcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLkludDY0XCIgfHwgcGFyYW0/LnR5cGUgPT09IFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuRGVjaW1hbFwiKSB7XG5cdFx0XHQvL3NhcC51aS5tb2RlbC5vZGF0YS50eXBlLkludDY0IGRvIG5vdCBzdXBwb3J0IHBhcnNlQXNTdHJpbmcgZmFsc2Vcblx0XHRcdGZvcm1hdE9wdGlvbnMgPVxuXHRcdFx0XHRmb3JtYXRPcHRpb25zPy5zaG93TWVhc3VyZSA9PT0gZmFsc2Vcblx0XHRcdFx0XHQ/IHsgc2hvd01lYXN1cmU6IGZhbHNlLCBkZWNpbWFsUGFkZGluZzogZm9ybWF0T3B0aW9ucy5kZWNpbWFsUGFkZGluZywgZW1wdHlTdHJpbmc6IGZvcm1hdE9wdGlvbnM/LmVtcHR5U3RyaW5nIH1cblx0XHRcdFx0XHQ6IHsgZGVjaW1hbFBhZGRpbmc6IGZvcm1hdE9wdGlvbnM/LmRlY2ltYWxQYWRkaW5nLCBlbXB0eVN0cmluZzogZm9ybWF0T3B0aW9ucz8uZW1wdHlTdHJpbmcgfTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Zm9ybWF0T3B0aW9ucyA9XG5cdFx0XHRcdGZvcm1hdE9wdGlvbnM/LnNob3dNZWFzdXJlID09PSBmYWxzZVxuXHRcdFx0XHRcdD8ge1xuXHRcdFx0XHRcdFx0XHRwYXJzZUFzU3RyaW5nOiBmYWxzZSxcblx0XHRcdFx0XHRcdFx0c2hvd01lYXN1cmU6IGZhbHNlLFxuXHRcdFx0XHRcdFx0XHRkZWNpbWFsUGFkZGluZzogZm9ybWF0T3B0aW9ucy5kZWNpbWFsUGFkZGluZyxcblx0XHRcdFx0XHRcdFx0ZW1wdHlTdHJpbmc6IGZvcm1hdE9wdGlvbnM/LmVtcHR5U3RyaW5nXG5cdFx0XHRcdFx0ICB9XG5cdFx0XHRcdFx0OiB7IHBhcnNlQXNTdHJpbmc6IGZhbHNlLCBkZWNpbWFsUGFkZGluZzogZm9ybWF0T3B0aW9ucz8uZGVjaW1hbFBhZGRpbmcsIGVtcHR5U3RyaW5nOiBmb3JtYXRPcHRpb25zPy5lbXB0eVN0cmluZyB9O1xuXHRcdH1cblx0XHRpZiAocGFyYW0/LmNvbnN0cmFpbnRzPy5udWxsYWJsZSAhPT0gZmFsc2UpIHtcblx0XHRcdGZvcm1hdE9wdGlvbnMuZW1wdHlTdHJpbmcgPSBudWxsO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRmb3JtYXRPcHRpb25zLmVtcHR5U3RyaW5nID8/PSAwO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gZm9ybWF0T3B0aW9ucztcbn1cbi8qKlxuICogRnVuY3Rpb24gY2FsbCwgb3B0aW9uYWxseSB3aXRoIGFyZ3VtZW50cy5cbiAqIEBwYXJhbSBmdW5jIEZ1bmN0aW9uIG5hbWUgb3IgcmVmZXJlbmNlIHRvIGZ1bmN0aW9uXG4gKiBAcGFyYW0gcGFyYW1ldGVycyBBcmd1bWVudHNcbiAqIEBwYXJhbSBvbiBPYmplY3QgdG8gY2FsbCB0aGUgZnVuY3Rpb24gb25cbiAqIEBwYXJhbSBpc0Zvcm1hdHRpbmdGblxuICogQHJldHVybnMgRXhwcmVzc2lvbiByZXByZXNlbnRpbmcgdGhlIGZ1bmN0aW9uIGNhbGwgKG5vdCB0aGUgcmVzdWx0IG9mIHRoZSBmdW5jdGlvbiBjYWxsISlcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZuPFQsIFUgZXh0ZW5kcyBGdW5jdGlvbk9yTmFtZTxUPj4oXG5cdGZ1bmM6IFUsXG5cdHBhcmFtZXRlcnM6IFdyYXBwZWRUdXBsZTxGdW5jdGlvblBhcmFtZXRlcnM8VCwgVT4+LFxuXHRvbj86IEV4cHJlc3Npb25PclByaW1pdGl2ZTxvYmplY3Q+LFxuXHRpc0Zvcm1hdHRpbmdGbiA9IGZhbHNlXG4pOiBGdW5jdGlvbkV4cHJlc3Npb248VD4ge1xuXHRjb25zdCBmdW5jdGlvbk5hbWUgPSB0eXBlb2YgZnVuYyA9PT0gXCJzdHJpbmdcIiA/IGZ1bmMgOiBmdW5jLl9fZnVuY3Rpb25OYW1lO1xuXHRyZXR1cm4ge1xuXHRcdF90eXBlOiBcIkZ1bmN0aW9uXCIsXG5cdFx0b2JqOiBvbiAhPT0gdW5kZWZpbmVkID8gd3JhcFByaW1pdGl2ZShvbikgOiB1bmRlZmluZWQsXG5cdFx0Zm46IGZ1bmN0aW9uTmFtZSxcblx0XHRpc0Zvcm1hdHRpbmdGbjogaXNGb3JtYXR0aW5nRm4sXG5cdFx0cGFyYW1ldGVyczogKHBhcmFtZXRlcnMgYXMgRXhwcmVzc2lvbk9yUHJpbWl0aXZlPFByaW1pdGl2ZVR5cGU+W10pLm1hcCh3cmFwUHJpbWl0aXZlKVxuXHR9O1xufVxuXG4vKipcbiAqIFNob3J0Y3V0IGZ1bmN0aW9uIHRvIGRldGVybWluZSBpZiBhIGJpbmRpbmcgdmFsdWUgaXMgbnVsbCwgdW5kZWZpbmVkIG9yIGVtcHR5LlxuICogQHBhcmFtIGV4cHJlc3Npb25cbiAqIEByZXR1cm5zIEEgQm9vbGVhbiBleHByZXNzaW9uIGV2YWx1YXRpbmcgdGhlIGZhY3QgdGhhdCB0aGUgY3VycmVudCBlbGVtZW50IGlzIGVtcHR5XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0VtcHR5KGV4cHJlc3Npb246IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxzdHJpbmc+KTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+IHtcblx0Y29uc3QgYUJpbmRpbmdzOiBFeHByZXNzaW9uT3JQcmltaXRpdmU8Ym9vbGVhbj5bXSA9IFtdO1xuXHR0cmFuc2Zvcm1SZWN1cnNpdmVseShleHByZXNzaW9uLCBcIlBhdGhJbk1vZGVsXCIsIChleHByKSA9PiB7XG5cdFx0Y29uc3QgZmluYWxFeHByZXNzaW9uID0geyAuLi5leHByLCBhbHdheXNLZWVwVGFyZ2V0VHlwZTogdHJ1ZSB9IGFzIFBhdGhJbk1vZGVsRXhwcmVzc2lvbjxzdHJpbmc+O1xuXHRcdGFCaW5kaW5ncy5wdXNoKG9yKGVxdWFsKGZpbmFsRXhwcmVzc2lvbiwgXCJcIiksIGVxdWFsKGV4cHIsIHVuZGVmaW5lZCksIGVxdWFsKGV4cHIsIG51bGwpKSk7XG5cdFx0cmV0dXJuIGV4cHI7XG5cdH0pO1xuXHRyZXR1cm4gYW5kKC4uLmFCaW5kaW5ncyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb25jYXQoLi4uaW5FeHByZXNzaW9uczogRXhwcmVzc2lvbk9yUHJpbWl0aXZlPHN0cmluZz5bXSk6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxzdHJpbmc+IHtcblx0Y29uc3QgZXhwcmVzc2lvbnMgPSBpbkV4cHJlc3Npb25zLm1hcCh3cmFwUHJpbWl0aXZlKTtcblx0aWYgKGhhc1VucmVzb2x2YWJsZUV4cHJlc3Npb24oLi4uZXhwcmVzc2lvbnMpKSB7XG5cdFx0cmV0dXJuIHVucmVzb2x2YWJsZUV4cHJlc3Npb247XG5cdH1cblx0aWYgKGV4cHJlc3Npb25zLmV2ZXJ5KGlzQ29uc3RhbnQpKSB7XG5cdFx0cmV0dXJuIGNvbnN0YW50KFxuXHRcdFx0ZXhwcmVzc2lvbnMucmVkdWNlKChjb25jYXRlbmF0ZWQ6IHN0cmluZywgdmFsdWUpID0+IHtcblx0XHRcdFx0aWYgKHZhbHVlLnZhbHVlICE9PSB1bmRlZmluZWQgJiYgdmFsdWUudmFsdWUgIT09IG51bGwpIHtcblx0XHRcdFx0XHRyZXR1cm4gY29uY2F0ZW5hdGVkICsgdmFsdWUudmFsdWUudG9TdHJpbmcoKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gY29uY2F0ZW5hdGVkO1xuXHRcdFx0fSwgXCJcIilcblx0XHQpO1xuXHR9IGVsc2UgaWYgKGV4cHJlc3Npb25zLnNvbWUoaXNDb21wbGV4VHlwZUV4cHJlc3Npb24pKSB7XG5cdFx0bGV0IHBhdGhJZHggPSAwO1xuXHRcdGNvbnN0IG15Q29uY2F0RXhwcmVzc2lvbiA9IGZvcm1hdFJlc3VsdChleHByZXNzaW9ucywgXCIuX2Zvcm1hdHRlcnMuU3RhbmRhcmRGb3JtYXR0ZXIjY29uY2F0XCIsIHVuZGVmaW5lZCwgdHJ1ZSk7XG5cdFx0Y29uc3QgYWxsUGFydHMgPSBbXTtcblx0XHR0cmFuc2Zvcm1SZWN1cnNpdmVseShteUNvbmNhdEV4cHJlc3Npb24sIFwiUGF0aEluTW9kZWxcIiwgKGNvbnN0YW50UGF0aDogUGF0aEluTW9kZWxFeHByZXNzaW9uPHVua25vd24+KSA9PiB7XG5cdFx0XHRhbGxQYXJ0cy5wdXNoKGNvbnN0YW50UGF0aCk7XG5cdFx0XHRyZXR1cm4gcGF0aEluTW9kZWwoYCQke3BhdGhJZHgrK31gLCBcIiRcIik7XG5cdFx0fSk7XG5cdFx0YWxsUGFydHMudW5zaGlmdChjb25zdGFudChKU09OLnN0cmluZ2lmeShteUNvbmNhdEV4cHJlc3Npb24pKSk7XG5cdFx0cmV0dXJuIGZvcm1hdFJlc3VsdChhbGxQYXJ0cywgXCIuX2Zvcm1hdHRlcnMuU3RhbmRhcmRGb3JtYXR0ZXIuYmluZCgkY29udHJvbCkjZXZhbHVhdGVDb21wbGV4RXhwcmVzc2lvblwiLCB1bmRlZmluZWQsIHRydWUpO1xuXHR9XG5cdHJldHVybiB7XG5cdFx0X3R5cGU6IFwiQ29uY2F0XCIsXG5cdFx0ZXhwcmVzc2lvbnM6IGV4cHJlc3Npb25zXG5cdH07XG59XG5cbnR5cGUgRXhwcmVzc2lvblR5cGVUb0V4cHJlc3Npb248VCBleHRlbmRzIEV4cHJlc3Npb25UeXBlLCBWPiA9IFQgZXh0ZW5kcyBcIkNvbnN0YW50XCJcblx0PyBDb25zdGFudEV4cHJlc3Npb248Vj5cblx0OiBUIGV4dGVuZHMgXCJQYXRoSW5Nb2RlbFwiXG5cdD8gUGF0aEluTW9kZWxFeHByZXNzaW9uPFY+XG5cdDogVCBleHRlbmRzIFwiRnVuY3Rpb25cIlxuXHQ/IEZ1bmN0aW9uRXhwcmVzc2lvbjxWPlxuXHQ6IFQgZXh0ZW5kcyBcIlVucmVzb2x2YWJsZVwiXG5cdD8gVW5yZXNvbHZhYmxlUGF0aEV4cHJlc3Npb25cblx0OiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Vj47XG5cbmV4cG9ydCB0eXBlIFRyYW5zZm9ybUZ1bmN0aW9uPFQsIFY+ID0gKGV4cHJlc3Npb25QYXJ0OiBUKSA9PiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Vj47XG5leHBvcnQgdHlwZSBFeHByZXNzaW9uVHlwZSA9IFBpY2s8QmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHVua25vd24+LCBcIl90eXBlXCI+W1wiX3R5cGVcIl07XG5leHBvcnQgZnVuY3Rpb24gdHJhbnNmb3JtUmVjdXJzaXZlbHk8VCBleHRlbmRzIFByaW1pdGl2ZVR5cGUgfCB1bmtub3duLCBFVCBleHRlbmRzIEV4cHJlc3Npb25UeXBlPihcblx0aW5FeHByZXNzaW9uOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248VD4sXG5cdGV4cHJlc3Npb25UeXBlOiBFVCxcblx0dHJhbnNmb3JtRnVuY3Rpb246IFRyYW5zZm9ybUZ1bmN0aW9uPEV4cHJlc3Npb25UeXBlVG9FeHByZXNzaW9uPEVULCBUPiwgVD4sXG5cdGluY2x1ZGVBbGxFeHByZXNzaW9uID0gZmFsc2Vcbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxUPiB7XG5cdGxldCBleHByZXNzaW9uOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248VD4gPSBpbkV4cHJlc3Npb247XG5cdHN3aXRjaCAoZXhwcmVzc2lvbi5fdHlwZSkge1xuXHRcdGNhc2UgXCJGdW5jdGlvblwiOlxuXHRcdGNhc2UgXCJGb3JtYXR0ZXJcIjpcblx0XHRcdGV4cHJlc3Npb24ucGFyYW1ldGVycyA9IGV4cHJlc3Npb24ucGFyYW1ldGVycy5tYXAoKHBhcmFtZXRlcikgPT5cblx0XHRcdFx0dHJhbnNmb3JtUmVjdXJzaXZlbHkocGFyYW1ldGVyIGFzIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxUPiwgZXhwcmVzc2lvblR5cGUsIHRyYW5zZm9ybUZ1bmN0aW9uLCBpbmNsdWRlQWxsRXhwcmVzc2lvbilcblx0XHRcdCk7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFwiQ29uY2F0XCI6XG5cdFx0XHRleHByZXNzaW9uLmV4cHJlc3Npb25zID0gZXhwcmVzc2lvbi5leHByZXNzaW9ucy5tYXAoKHN1YkV4cHJlc3Npb24pID0+XG5cdFx0XHRcdHRyYW5zZm9ybVJlY3Vyc2l2ZWx5KFxuXHRcdFx0XHRcdHN1YkV4cHJlc3Npb24sXG5cdFx0XHRcdFx0ZXhwcmVzc2lvblR5cGUsXG5cdFx0XHRcdFx0dHJhbnNmb3JtRnVuY3Rpb24gYXMgdW5rbm93biBhcyBUcmFuc2Zvcm1GdW5jdGlvbjxFeHByZXNzaW9uVHlwZVRvRXhwcmVzc2lvbjxFVCwgc3RyaW5nPiwgc3RyaW5nPixcblx0XHRcdFx0XHRpbmNsdWRlQWxsRXhwcmVzc2lvblxuXHRcdFx0XHQpXG5cdFx0XHQpO1xuXHRcdFx0ZXhwcmVzc2lvbiA9IGNvbmNhdCguLi5leHByZXNzaW9uLmV4cHJlc3Npb25zKSBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248VD47XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFwiQ29tcGxleFR5cGVcIjpcblx0XHRcdGV4cHJlc3Npb24uYmluZGluZ1BhcmFtZXRlcnMgPSBleHByZXNzaW9uLmJpbmRpbmdQYXJhbWV0ZXJzLm1hcCgoYmluZGluZ1BhcmFtZXRlcikgPT5cblx0XHRcdFx0dHJhbnNmb3JtUmVjdXJzaXZlbHkoXG5cdFx0XHRcdFx0YmluZGluZ1BhcmFtZXRlciBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248VD4sXG5cdFx0XHRcdFx0ZXhwcmVzc2lvblR5cGUsXG5cdFx0XHRcdFx0dHJhbnNmb3JtRnVuY3Rpb24sXG5cdFx0XHRcdFx0aW5jbHVkZUFsbEV4cHJlc3Npb25cblx0XHRcdFx0KVxuXHRcdFx0KTtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgXCJJZkVsc2VcIjpcblx0XHRcdGNvbnN0IG9uVHJ1ZSA9IHRyYW5zZm9ybVJlY3Vyc2l2ZWx5KFxuXHRcdFx0XHRleHByZXNzaW9uLm9uVHJ1ZSxcblx0XHRcdFx0ZXhwcmVzc2lvblR5cGUsXG5cdFx0XHRcdHRyYW5zZm9ybUZ1bmN0aW9uIGFzIHVua25vd24gYXMgVHJhbnNmb3JtRnVuY3Rpb248RXhwcmVzc2lvblR5cGVUb0V4cHJlc3Npb248RVQsIHVua25vd24+LCB1bmtub3duPixcblx0XHRcdFx0aW5jbHVkZUFsbEV4cHJlc3Npb25cblx0XHRcdCk7XG5cdFx0XHRjb25zdCBvbkZhbHNlID0gdHJhbnNmb3JtUmVjdXJzaXZlbHkoXG5cdFx0XHRcdGV4cHJlc3Npb24ub25GYWxzZSxcblx0XHRcdFx0ZXhwcmVzc2lvblR5cGUsXG5cdFx0XHRcdHRyYW5zZm9ybUZ1bmN0aW9uIGFzIHVua25vd24gYXMgVHJhbnNmb3JtRnVuY3Rpb248RXhwcmVzc2lvblR5cGVUb0V4cHJlc3Npb248RVQsIHVua25vd24+LCB1bmtub3duPixcblx0XHRcdFx0aW5jbHVkZUFsbEV4cHJlc3Npb25cblx0XHRcdCk7XG5cdFx0XHRsZXQgY29uZGl0aW9uID0gZXhwcmVzc2lvbi5jb25kaXRpb247XG5cdFx0XHRpZiAoaW5jbHVkZUFsbEV4cHJlc3Npb24pIHtcblx0XHRcdFx0Y29uZGl0aW9uID0gdHJhbnNmb3JtUmVjdXJzaXZlbHkoXG5cdFx0XHRcdFx0ZXhwcmVzc2lvbi5jb25kaXRpb24sXG5cdFx0XHRcdFx0ZXhwcmVzc2lvblR5cGUsXG5cdFx0XHRcdFx0dHJhbnNmb3JtRnVuY3Rpb24gYXMgdW5rbm93biBhcyBUcmFuc2Zvcm1GdW5jdGlvbjxFeHByZXNzaW9uVHlwZVRvRXhwcmVzc2lvbjxFVCwgYm9vbGVhbj4sIGJvb2xlYW4+LFxuXHRcdFx0XHRcdGluY2x1ZGVBbGxFeHByZXNzaW9uXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0XHRleHByZXNzaW9uID0gaWZFbHNlKGNvbmRpdGlvbiwgb25UcnVlLCBvbkZhbHNlKSBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248VD47XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFwiTm90XCI6XG5cdFx0XHRpZiAoaW5jbHVkZUFsbEV4cHJlc3Npb24pIHtcblx0XHRcdFx0Y29uc3Qgb3BlcmFuZCA9IHRyYW5zZm9ybVJlY3Vyc2l2ZWx5KFxuXHRcdFx0XHRcdGV4cHJlc3Npb24ub3BlcmFuZCxcblx0XHRcdFx0XHRleHByZXNzaW9uVHlwZSxcblx0XHRcdFx0XHR0cmFuc2Zvcm1GdW5jdGlvbiBhcyB1bmtub3duIGFzIFRyYW5zZm9ybUZ1bmN0aW9uPEV4cHJlc3Npb25UeXBlVG9FeHByZXNzaW9uPEVULCBib29sZWFuPiwgYm9vbGVhbj4sXG5cdFx0XHRcdFx0aW5jbHVkZUFsbEV4cHJlc3Npb25cblx0XHRcdFx0KTtcblx0XHRcdFx0ZXhwcmVzc2lvbiA9IG5vdChvcGVyYW5kKSBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248VD47XG5cdFx0XHR9XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFwiVHJ1dGh5XCI6XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFwiU2V0XCI6XG5cdFx0XHRpZiAoaW5jbHVkZUFsbEV4cHJlc3Npb24pIHtcblx0XHRcdFx0Y29uc3Qgb3BlcmFuZHMgPSBleHByZXNzaW9uLm9wZXJhbmRzLm1hcCgob3BlcmFuZCkgPT5cblx0XHRcdFx0XHR0cmFuc2Zvcm1SZWN1cnNpdmVseShcblx0XHRcdFx0XHRcdG9wZXJhbmQsXG5cdFx0XHRcdFx0XHRleHByZXNzaW9uVHlwZSxcblx0XHRcdFx0XHRcdHRyYW5zZm9ybUZ1bmN0aW9uIGFzIHVua25vd24gYXMgVHJhbnNmb3JtRnVuY3Rpb248RXhwcmVzc2lvblR5cGVUb0V4cHJlc3Npb248RVQsIGJvb2xlYW4+LCBib29sZWFuPixcblx0XHRcdFx0XHRcdGluY2x1ZGVBbGxFeHByZXNzaW9uXG5cdFx0XHRcdFx0KVxuXHRcdFx0XHQpO1xuXHRcdFx0XHRleHByZXNzaW9uID1cblx0XHRcdFx0XHRleHByZXNzaW9uLm9wZXJhdG9yID09PSBcInx8XCJcblx0XHRcdFx0XHRcdD8gKG9yKC4uLm9wZXJhbmRzKSBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248VD4pXG5cdFx0XHRcdFx0XHQ6IChhbmQoLi4ub3BlcmFuZHMpIGFzIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxUPik7XG5cdFx0XHR9XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFwiQ29tcGFyaXNvblwiOlxuXHRcdFx0aWYgKGluY2x1ZGVBbGxFeHByZXNzaW9uKSB7XG5cdFx0XHRcdGNvbnN0IG9wZXJhbmQxID0gdHJhbnNmb3JtUmVjdXJzaXZlbHkoXG5cdFx0XHRcdFx0ZXhwcmVzc2lvbi5vcGVyYW5kMSBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248VD4sXG5cdFx0XHRcdFx0ZXhwcmVzc2lvblR5cGUsXG5cdFx0XHRcdFx0dHJhbnNmb3JtRnVuY3Rpb24sXG5cdFx0XHRcdFx0aW5jbHVkZUFsbEV4cHJlc3Npb25cblx0XHRcdFx0KTtcblx0XHRcdFx0Y29uc3Qgb3BlcmFuZDIgPSB0cmFuc2Zvcm1SZWN1cnNpdmVseShcblx0XHRcdFx0XHRleHByZXNzaW9uLm9wZXJhbmQyIGFzIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxUPixcblx0XHRcdFx0XHRleHByZXNzaW9uVHlwZSxcblx0XHRcdFx0XHR0cmFuc2Zvcm1GdW5jdGlvbixcblx0XHRcdFx0XHRpbmNsdWRlQWxsRXhwcmVzc2lvblxuXHRcdFx0XHQpO1xuXHRcdFx0XHRleHByZXNzaW9uID0gY29tcGFyaXNvbihleHByZXNzaW9uLm9wZXJhdG9yLCBvcGVyYW5kMSwgb3BlcmFuZDIpIGFzIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxUPjtcblx0XHRcdH1cblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgXCJDb25zdGFudFwiOlxuXHRcdFx0Y29uc3QgY29uc3RhbnRWYWx1ZTogUmVjb3JkPHN0cmluZywgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHVua25vd24+PiA9IGV4cHJlc3Npb24udmFsdWUgYXMgUmVjb3JkPFxuXHRcdFx0XHRzdHJpbmcsXG5cdFx0XHRcdEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjx1bmtub3duPlxuXHRcdFx0Pjtcblx0XHRcdGlmICh0eXBlb2YgY29uc3RhbnRWYWx1ZSA9PT0gXCJvYmplY3RcIiAmJiBjb25zdGFudFZhbHVlKSB7XG5cdFx0XHRcdE9iamVjdC5rZXlzKGNvbnN0YW50VmFsdWUpLmZvckVhY2goKGtleSkgPT4ge1xuXHRcdFx0XHRcdGNvbnN0YW50VmFsdWVba2V5XSA9IHRyYW5zZm9ybVJlY3Vyc2l2ZWx5KFxuXHRcdFx0XHRcdFx0Y29uc3RhbnRWYWx1ZVtrZXldLFxuXHRcdFx0XHRcdFx0ZXhwcmVzc2lvblR5cGUsXG5cdFx0XHRcdFx0XHR0cmFuc2Zvcm1GdW5jdGlvbiBhcyB1bmtub3duIGFzIFRyYW5zZm9ybUZ1bmN0aW9uPEV4cHJlc3Npb25UeXBlVG9FeHByZXNzaW9uPEVULCB1bmtub3duPiwgdW5rbm93bj4sXG5cdFx0XHRcdFx0XHRpbmNsdWRlQWxsRXhwcmVzc2lvblxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBcIlJlZlwiOlxuXHRcdGNhc2UgXCJMZW5ndGhcIjpcblx0XHRjYXNlIFwiUGF0aEluTW9kZWxcIjpcblx0XHRjYXNlIFwiRW1iZWRkZWRCaW5kaW5nXCI6XG5cdFx0Y2FzZSBcIkVtYmVkZGVkRXhwcmVzc2lvbkJpbmRpbmdcIjpcblx0XHRjYXNlIFwiVW5yZXNvbHZhYmxlXCI6XG5cdFx0XHQvLyBEbyBub3RoaW5nXG5cdFx0XHRicmVhaztcblx0fVxuXHRpZiAoZXhwcmVzc2lvblR5cGUgPT09IGV4cHJlc3Npb24uX3R5cGUpIHtcblx0XHRleHByZXNzaW9uID0gdHJhbnNmb3JtRnVuY3Rpb24oaW5FeHByZXNzaW9uIGFzIEV4cHJlc3Npb25UeXBlVG9FeHByZXNzaW9uPEVULCBUPik7XG5cdH1cblx0cmV0dXJuIGV4cHJlc3Npb247XG59XG5cbmV4cG9ydCB0eXBlIENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uID0gc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG5jb25zdCBuZWVkUGFyZW50aGVzaXMgPSBmdW5jdGlvbiA8VCBleHRlbmRzIFByaW1pdGl2ZVR5cGU+KGV4cHI6IEV4cHJlc3Npb25PclByaW1pdGl2ZTxUPik6IGJvb2xlYW4ge1xuXHRyZXR1cm4gKFxuXHRcdCFpc0NvbnN0YW50KGV4cHIpICYmXG5cdFx0IWlzUGF0aEluTW9kZWxFeHByZXNzaW9uKGV4cHIpICYmXG5cdFx0aXNCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24oZXhwcikgJiZcblx0XHRleHByLl90eXBlICE9PSBcIklmRWxzZVwiICYmXG5cdFx0ZXhwci5fdHlwZSAhPT0gXCJGdW5jdGlvblwiXG5cdCk7XG59O1xuXG4vKipcbiAqIENvbXBpbGVzIGEgY29uc3RhbnQgb2JqZWN0IHRvIGEgc3RyaW5nLlxuICogQHBhcmFtIGV4cHJcbiAqIEBwYXJhbSBpc051bGxhYmxlXG4gKiBAcmV0dXJucyBUaGUgY29tcGlsZWQgc3RyaW5nXG4gKi9cbmZ1bmN0aW9uIGNvbXBpbGVDb25zdGFudE9iamVjdChleHByOiBDb25zdGFudEV4cHJlc3Npb248b2JqZWN0PiwgaXNOdWxsYWJsZSA9IGZhbHNlKTogc3RyaW5nIHtcblx0aWYgKGlzTnVsbGFibGUgJiYgT2JqZWN0LmtleXMoZXhwci52YWx1ZSkubGVuZ3RoID09PSAwKSB7XG5cdFx0cmV0dXJuIFwiXCI7XG5cdH1cblx0Y29uc3Qgb2JqZWN0cyA9IGV4cHIudmFsdWUgYXMgUGxhaW5FeHByZXNzaW9uT2JqZWN0O1xuXHRjb25zdCBwcm9wZXJ0aWVzOiBzdHJpbmdbXSA9IFtdO1xuXHRPYmplY3Qua2V5cyhvYmplY3RzKS5mb3JFYWNoKChrZXkpID0+IHtcblx0XHRjb25zdCB2YWx1ZSA9IG9iamVjdHNba2V5XTtcblx0XHRjb25zdCBjaGlsZFJlc3VsdCA9IGNvbXBpbGVFeHByZXNzaW9uKHZhbHVlLCB0cnVlLCBmYWxzZSwgaXNOdWxsYWJsZSk7XG5cdFx0aWYgKGNoaWxkUmVzdWx0ICYmIGNoaWxkUmVzdWx0Lmxlbmd0aCA+IDApIHtcblx0XHRcdHByb3BlcnRpZXMucHVzaChgJHtrZXl9OiAke2NoaWxkUmVzdWx0fWApO1xuXHRcdH1cblx0fSk7XG5cdHJldHVybiBgeyR7cHJvcGVydGllcy5qb2luKFwiLCBcIil9fWA7XG59XG5cbi8qKlxuICogQ29tcGlsZXMgYSBDb25zdGFudCBCaW5kaW5nIEV4cHJlc3Npb24uXG4gKiBAcGFyYW0gZXhwclxuICogQHBhcmFtIGVtYmVkZGVkSW5CaW5kaW5nXG4gKiBAcGFyYW0gaXNOdWxsYWJsZVxuICogQHBhcmFtIGRvTm90U3RyaW5naWZ5XG4gKiBAcmV0dXJucyBUaGUgY29tcGlsZWQgc3RyaW5nXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb21waWxlQ29uc3RhbnQ8VCBleHRlbmRzIFByaW1pdGl2ZVR5cGU+KFxuXHRleHByOiBDb25zdGFudEV4cHJlc3Npb248VD4sXG5cdGVtYmVkZGVkSW5CaW5kaW5nOiBib29sZWFuLFxuXHRpc051bGxhYmxlPzogYm9vbGVhbixcblx0ZG9Ob3RTdHJpbmdpZnk/OiBmYWxzZVxuKTogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb247XG5leHBvcnQgZnVuY3Rpb24gY29tcGlsZUNvbnN0YW50PFQgZXh0ZW5kcyBQcmltaXRpdmVUeXBlPihcblx0ZXhwcjogQ29uc3RhbnRFeHByZXNzaW9uPFQ+LFxuXHRlbWJlZGRlZEluQmluZGluZzogYm9vbGVhbixcblx0aXNOdWxsYWJsZT86IGJvb2xlYW4sXG5cdGRvTm90U3RyaW5naWZ5PzogdHJ1ZVxuKTogUHJpbWl0aXZlVHlwZTtcbmV4cG9ydCBmdW5jdGlvbiBjb21waWxlQ29uc3RhbnQ8VCBleHRlbmRzIFByaW1pdGl2ZVR5cGU+KFxuXHRleHByOiBDb25zdGFudEV4cHJlc3Npb248VD4sXG5cdGVtYmVkZGVkSW5CaW5kaW5nOiBib29sZWFuLFxuXHRpc051bGxhYmxlID0gZmFsc2UsXG5cdGRvTm90U3RyaW5naWZ5ID0gZmFsc2Vcbik6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIHwgUHJpbWl0aXZlVHlwZSB7XG5cdGlmIChleHByLnZhbHVlID09PSBudWxsKSB7XG5cdFx0cmV0dXJuIGRvTm90U3RyaW5naWZ5ID8gbnVsbCA6IFwibnVsbFwiO1xuXHR9XG5cdGlmIChleHByLnZhbHVlID09PSB1bmRlZmluZWQpIHtcblx0XHRyZXR1cm4gZG9Ob3RTdHJpbmdpZnkgPyB1bmRlZmluZWQgOiBcInVuZGVmaW5lZFwiO1xuXHR9XG5cdGlmICh0eXBlb2YgZXhwci52YWx1ZSA9PT0gXCJvYmplY3RcIikge1xuXHRcdGlmIChBcnJheS5pc0FycmF5KGV4cHIudmFsdWUpKSB7XG5cdFx0XHRjb25zdCBlbnRyaWVzID0gZXhwci52YWx1ZS5tYXAoKGV4cHJlc3Npb24pID0+IGNvbXBpbGVFeHByZXNzaW9uKGV4cHJlc3Npb24sIHRydWUpKTtcblx0XHRcdHJldHVybiBgWyR7ZW50cmllcy5qb2luKFwiLCBcIil9XWA7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiBjb21waWxlQ29uc3RhbnRPYmplY3QoZXhwciBhcyBDb25zdGFudEV4cHJlc3Npb248b2JqZWN0PiwgaXNOdWxsYWJsZSk7XG5cdFx0fVxuXHR9XG5cblx0aWYgKGVtYmVkZGVkSW5CaW5kaW5nKSB7XG5cdFx0c3dpdGNoICh0eXBlb2YgZXhwci52YWx1ZSkge1xuXHRcdFx0Y2FzZSBcIm51bWJlclwiOlxuXHRcdFx0Y2FzZSBcImJpZ2ludFwiOlxuXHRcdFx0Y2FzZSBcImJvb2xlYW5cIjpcblx0XHRcdFx0cmV0dXJuIGV4cHIudmFsdWUudG9TdHJpbmcoKTtcblx0XHRcdGNhc2UgXCJzdHJpbmdcIjpcblx0XHRcdFx0cmV0dXJuIGAnJHtlc2NhcGVYbWxBdHRyaWJ1dGUoZXhwci52YWx1ZS50b1N0cmluZygpKX0nYDtcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdHJldHVybiBcIlwiO1xuXHRcdH1cblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gZG9Ob3RTdHJpbmdpZnkgPyBleHByLnZhbHVlIDogZXhwci52YWx1ZS50b1N0cmluZygpO1xuXHR9XG59XG5cbi8qKlxuICogR2VuZXJhdGVzIHRoZSBiaW5kaW5nIHN0cmluZyBmb3IgYSBCaW5kaW5nIGV4cHJlc3Npb24uXG4gKiBAcGFyYW0gZXhwcmVzc2lvbkZvckJpbmRpbmcgVGhlIGV4cHJlc3Npb24gdG8gY29tcGlsZVxuICogQHBhcmFtIGVtYmVkZGVkSW5CaW5kaW5nIFdoZXRoZXIgdGhlIGV4cHJlc3Npb24gdG8gY29tcGlsZSBpcyBlbWJlZGRlZCBpbnRvIGFub3RoZXIgZXhwcmVzc2lvblxuICogQHBhcmFtIGVtYmVkZGVkU2VwYXJhdG9yIFRoZSBiaW5kaW5nIHZhbHVlIGV2YWx1YXRvciAoJCBvciAlIGRlcGVuZGluZyBvbiB3aGV0aGVyIHdlIHdhbnQgdG8gZm9yY2UgdGhlIHR5cGUgb3Igbm90KVxuICogQHJldHVybnMgVGhlIGNvcnJlc3BvbmRpbmcgZXhwcmVzc2lvbiBiaW5kaW5nXG4gKi9cbmZ1bmN0aW9uIGNvbXBpbGVQYXRoSW5Nb2RlbEV4cHJlc3Npb248VCBleHRlbmRzIFByaW1pdGl2ZVR5cGU+KFxuXHRleHByZXNzaW9uRm9yQmluZGluZzogUGF0aEluTW9kZWxFeHByZXNzaW9uPFQ+LFxuXHRlbWJlZGRlZEluQmluZGluZzogYm9vbGVhbixcblx0ZW1iZWRkZWRTZXBhcmF0b3I6IHN0cmluZ1xuKTogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24ge1xuXHRpZiAoXG5cdFx0ZXhwcmVzc2lvbkZvckJpbmRpbmcudHlwZSB8fFxuXHRcdGV4cHJlc3Npb25Gb3JCaW5kaW5nLnBhcmFtZXRlcnMgfHxcblx0XHRleHByZXNzaW9uRm9yQmluZGluZy50YXJnZXRUeXBlIHx8XG5cdFx0ZXhwcmVzc2lvbkZvckJpbmRpbmcuZm9ybWF0T3B0aW9ucyB8fFxuXHRcdGV4cHJlc3Npb25Gb3JCaW5kaW5nLmNvbnN0cmFpbnRzXG5cdCkge1xuXHRcdC8vIFRoaXMgaXMgbm93IGEgY29tcGxleCBiaW5kaW5nIGRlZmluaXRpb24sIGxldCdzIHByZXBhcmUgZm9yIGl0XG5cdFx0Y29uc3QgY29tcGxleEJpbmRpbmdEZWZpbml0aW9uID0ge1xuXHRcdFx0cGF0aDogY29tcGlsZVBhdGhJbk1vZGVsKGV4cHJlc3Npb25Gb3JCaW5kaW5nKSxcblx0XHRcdHR5cGU6IGV4cHJlc3Npb25Gb3JCaW5kaW5nLnR5cGUsXG5cdFx0XHR0YXJnZXRUeXBlOiBleHByZXNzaW9uRm9yQmluZGluZy50YXJnZXRUeXBlLFxuXHRcdFx0cGFyYW1ldGVyczogZXhwcmVzc2lvbkZvckJpbmRpbmcucGFyYW1ldGVycyxcblx0XHRcdGZvcm1hdE9wdGlvbnM6IGV4cHJlc3Npb25Gb3JCaW5kaW5nLmZvcm1hdE9wdGlvbnMsXG5cdFx0XHRjb25zdHJhaW50czogZXhwcmVzc2lvbkZvckJpbmRpbmcuY29uc3RyYWludHNcblx0XHR9O1xuXHRcdGNvbnN0IG91dEJpbmRpbmcgPSBjb21waWxlRXhwcmVzc2lvbihjb21wbGV4QmluZGluZ0RlZmluaXRpb24sIGZhbHNlLCBmYWxzZSwgdHJ1ZSk7XG5cdFx0aWYgKGVtYmVkZGVkSW5CaW5kaW5nKSB7XG5cdFx0XHRjb25zdCBzZXBhcmF0b3IgPSBleHByZXNzaW9uRm9yQmluZGluZy5hbHdheXNLZWVwVGFyZ2V0VHlwZSA/IFwiJFwiIDogZW1iZWRkZWRTZXBhcmF0b3I7XG5cdFx0XHRyZXR1cm4gYCR7c2VwYXJhdG9yfSR7b3V0QmluZGluZ31gO1xuXHRcdH1cblx0XHRyZXR1cm4gb3V0QmluZGluZztcblx0fSBlbHNlIGlmIChlbWJlZGRlZEluQmluZGluZykge1xuXHRcdHJldHVybiBgJHtlbWJlZGRlZFNlcGFyYXRvcn17JHtjb21waWxlUGF0aEluTW9kZWwoZXhwcmVzc2lvbkZvckJpbmRpbmcpfX1gO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiBgeyR7Y29tcGlsZVBhdGhJbk1vZGVsKGV4cHJlc3Npb25Gb3JCaW5kaW5nKX19YDtcblx0fVxufVxuXG5mdW5jdGlvbiBjb21waWxlQ29tcGxleFR5cGVFeHByZXNzaW9uPFQgZXh0ZW5kcyBQcmltaXRpdmVUeXBlPihleHByZXNzaW9uOiBDb21wbGV4VHlwZUV4cHJlc3Npb248VD4pOiBzdHJpbmcge1xuXHRpZiAoZXhwcmVzc2lvbi5iaW5kaW5nUGFyYW1ldGVycy5sZW5ndGggPT09IDEpIHtcblx0XHRyZXR1cm4gYHske2NvbXBpbGVQYXRoUGFyYW1ldGVyKGV4cHJlc3Npb24uYmluZGluZ1BhcmFtZXRlcnNbMF0gYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFByaW1pdGl2ZVR5cGU+LCB0cnVlKX0sIHR5cGU6ICcke1xuXHRcdFx0ZXhwcmVzc2lvbi50eXBlXG5cdFx0fSd9YDtcblx0fVxuXG5cdGxldCBvdXRwdXRFbmQgPSBgXSwgdHlwZTogJyR7ZXhwcmVzc2lvbi50eXBlfSdgO1xuXHRpZiAoaGFzRWxlbWVudHMoZXhwcmVzc2lvbi5mb3JtYXRPcHRpb25zKSkge1xuXHRcdG91dHB1dEVuZCArPSBgLCBmb3JtYXRPcHRpb25zOiAke2NvbXBpbGVFeHByZXNzaW9uKGV4cHJlc3Npb24uZm9ybWF0T3B0aW9ucyl9YDtcblx0fVxuXHRpZiAoaGFzRWxlbWVudHMoZXhwcmVzc2lvbi5jb25zdHJhaW50cykpIHtcblx0XHRvdXRwdXRFbmQgKz0gYCwgY29uc3RyYWludHM6ICR7Y29tcGlsZUV4cHJlc3Npb24oZXhwcmVzc2lvbi5jb25zdHJhaW50cyl9YDtcblx0fVxuXHRpZiAoaGFzRWxlbWVudHMoZXhwcmVzc2lvbi5wYXJhbWV0ZXJzKSkge1xuXHRcdG91dHB1dEVuZCArPSBgLCBwYXJhbWV0ZXJzOiAke2NvbXBpbGVFeHByZXNzaW9uKGV4cHJlc3Npb24ucGFyYW1ldGVycyl9YDtcblx0fVxuXHRvdXRwdXRFbmQgKz0gXCJ9XCI7XG5cblx0cmV0dXJuIGB7bW9kZTonVHdvV2F5JywgcGFydHM6WyR7ZXhwcmVzc2lvbi5iaW5kaW5nUGFyYW1ldGVyc1xuXHRcdC5tYXAoKHBhcmFtKSA9PiBjb21waWxlUGF0aFBhcmFtZXRlcihwYXJhbSBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248UHJpbWl0aXZlVHlwZT4pKVxuXHRcdC5qb2luKFwiLFwiKX0ke291dHB1dEVuZH1gO1xufVxuXG4vKipcbiAqIFdyYXAgdGhlIGNvbXBpbGVkIGJpbmRpbmcgc3RyaW5nIGFzIHJlcXVpcmVkIGRlcGVuZGluZyBvbiBpdHMgY29udGV4dC5cbiAqIEBwYXJhbSBleHByZXNzaW9uIFRoZSBjb21waWxlZCBleHByZXNzaW9uXG4gKiBAcGFyYW0gZW1iZWRkZWRJbkJpbmRpbmcgVHJ1ZSBpZiB0aGUgY29tcGlsZWQgZXhwcmVzc2lvbiBpcyB0byBiZSBlbWJlZGRlZCBpbiBhIGJpbmRpbmdcbiAqIEBwYXJhbSBwYXJlbnRoZXNpc1JlcXVpcmVkIFRydWUgaWYgdGhlIGVtYmVkZGVkIGJpbmRpbmcgbmVlZHMgdG8gYmUgd3JhcHBlZCBpbiBwYXJldGhlc2lzIHNvIHRoYXQgaXQgaXMgZXZhbHVhdGVkIGFzIG9uZVxuICogQHJldHVybnMgRmluYWxpemVkIGNvbXBpbGVkIGV4cHJlc3Npb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHdyYXBCaW5kaW5nRXhwcmVzc2lvbihcblx0ZXhwcmVzc2lvbjogc3RyaW5nLFxuXHRlbWJlZGRlZEluQmluZGluZzogYm9vbGVhbixcblx0cGFyZW50aGVzaXNSZXF1aXJlZCA9IGZhbHNlXG4pOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB7XG5cdGlmIChlbWJlZGRlZEluQmluZGluZykge1xuXHRcdGlmIChwYXJlbnRoZXNpc1JlcXVpcmVkKSB7XG5cdFx0XHRyZXR1cm4gYCgke2V4cHJlc3Npb259KWA7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiBleHByZXNzaW9uO1xuXHRcdH1cblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gYHs9ICR7ZXhwcmVzc2lvbn19YDtcblx0fVxufVxuXG4vKipcbiAqIENvbXBpbGUgYW4gZXhwcmVzc2lvbiBpbnRvIGFuIGV4cHJlc3Npb24gYmluZGluZy5cbiAqIEB0ZW1wbGF0ZSBUIFRoZSB0YXJnZXQgdHlwZVxuICogQHBhcmFtIGV4cHJlc3Npb24gVGhlIGV4cHJlc3Npb24gdG8gY29tcGlsZVxuICogQHBhcmFtIGVtYmVkZGVkSW5CaW5kaW5nIFdoZXRoZXIgdGhlIGV4cHJlc3Npb24gdG8gY29tcGlsZSBpcyBlbWJlZGRlZCBpbnRvIGFub3RoZXIgZXhwcmVzc2lvblxuICogQHBhcmFtIGtlZXBUYXJnZXRUeXBlIEtlZXAgdGhlIHRhcmdldCB0eXBlIG9mIHRoZSBlbWJlZGRlZCBiaW5kaW5ncyBpbnN0ZWFkIG9mIGNhc3RpbmcgdGhlbSB0byBhbnlcbiAqIEBwYXJhbSBpc051bGxhYmxlIFdoZXRoZXIgYmluZGluZyBleHByZXNzaW9uIGNhbiByZXNvbHZlIHRvIGVtcHR5IHN0cmluZyBvciBub3RcbiAqIEByZXR1cm5zIFRoZSBjb3JyZXNwb25kaW5nIGV4cHJlc3Npb24gYmluZGluZ1xuICovXG5leHBvcnQgZnVuY3Rpb24gY29tcGlsZUV4cHJlc3Npb248VCBleHRlbmRzIFByaW1pdGl2ZVR5cGU+KFxuXHRleHByZXNzaW9uOiBFeHByZXNzaW9uT3JQcmltaXRpdmU8VD4sXG5cdGVtYmVkZGVkSW5CaW5kaW5nID0gZmFsc2UsXG5cdGtlZXBUYXJnZXRUeXBlID0gZmFsc2UsXG5cdGlzTnVsbGFibGUgPSBmYWxzZVxuKTogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24ge1xuXHRjb25zdCBleHByID0gd3JhcFByaW1pdGl2ZShleHByZXNzaW9uKTtcblx0Y29uc3QgZW1iZWRkZWRTZXBhcmF0b3IgPSBrZWVwVGFyZ2V0VHlwZSA/IFwiJFwiIDogXCIlXCI7XG5cblx0c3dpdGNoIChleHByLl90eXBlKSB7XG5cdFx0Y2FzZSBcIlVucmVzb2x2YWJsZVwiOlxuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblxuXHRcdGNhc2UgXCJDb25zdGFudFwiOlxuXHRcdFx0cmV0dXJuIGNvbXBpbGVDb25zdGFudChleHByLCBlbWJlZGRlZEluQmluZGluZywgaXNOdWxsYWJsZSk7XG5cblx0XHRjYXNlIFwiUmVmXCI6XG5cdFx0XHRyZXR1cm4gZXhwci5yZWYgfHwgXCJudWxsXCI7XG5cblx0XHRjYXNlIFwiRnVuY3Rpb25cIjpcblx0XHRcdGxldCBoYXNFbWJlZGRlZEZ1bmN0aW9uQ2FsbE9yQmluZGluZyA9IGZhbHNlO1xuXHRcdFx0aWYgKGV4cHIuaXNGb3JtYXR0aW5nRm4pIHtcblx0XHRcdFx0dHJhbnNmb3JtUmVjdXJzaXZlbHkoXG5cdFx0XHRcdFx0ZXhwcixcblx0XHRcdFx0XHRcIkZ1bmN0aW9uXCIsXG5cdFx0XHRcdFx0KHN1YkZuKSA9PiB7XG5cdFx0XHRcdFx0XHRpZiAoc3ViRm4gIT09IGV4cHIgJiYgc3ViRm4ub2JqID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRcdFx0aGFzRW1iZWRkZWRGdW5jdGlvbkNhbGxPckJpbmRpbmcgPSB0cnVlO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0cmV0dXJuIHN1YkZuO1xuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0dHJ1ZVxuXHRcdFx0XHQpO1xuXHRcdFx0XHR0cmFuc2Zvcm1SZWN1cnNpdmVseShcblx0XHRcdFx0XHRleHByLFxuXHRcdFx0XHRcdFwiQ29uc3RhbnRcIixcblx0XHRcdFx0XHQoc3ViRm46IENvbnN0YW50RXhwcmVzc2lvbjxUPikgPT4ge1xuXHRcdFx0XHRcdFx0aWYgKChzdWJGbiBhcyB1bmtub3duKSAhPT0gZXhwciAmJiB0eXBlb2Ygc3ViRm4udmFsdWUgPT09IFwib2JqZWN0XCIpIHtcblx0XHRcdFx0XHRcdFx0dHJhbnNmb3JtUmVjdXJzaXZlbHkoc3ViRm4sIFwiUGF0aEluTW9kZWxcIiwgKHN1YlN1YkZuKSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0aGFzRW1iZWRkZWRGdW5jdGlvbkNhbGxPckJpbmRpbmcgPSB0cnVlO1xuXHRcdFx0XHRcdFx0XHRcdHJldHVybiBzdWJTdWJGbjtcblx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdHJldHVybiBzdWJGbjtcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdHRydWVcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHRcdGNvbnN0IGFyZ3VtZW50U3RyaW5nID0gYCR7ZXhwci5wYXJhbWV0ZXJzLm1hcCgoYXJnKSA9PiBjb21waWxlRXhwcmVzc2lvbihhcmcsIHRydWUpKS5qb2luKFwiLCBcIil9YDtcblx0XHRcdGxldCBmbkNhbGwgPVxuXHRcdFx0XHRleHByLm9iaiA9PT0gdW5kZWZpbmVkXG5cdFx0XHRcdFx0PyBgJHtleHByLmZufSgke2FyZ3VtZW50U3RyaW5nfSlgXG5cdFx0XHRcdFx0OiBgJHtjb21waWxlRXhwcmVzc2lvbihleHByLm9iaiwgdHJ1ZSl9LiR7ZXhwci5mbn0oJHthcmd1bWVudFN0cmluZ30pYDtcblx0XHRcdGlmICghZW1iZWRkZWRJbkJpbmRpbmcgJiYgaGFzRW1iZWRkZWRGdW5jdGlvbkNhbGxPckJpbmRpbmcpIHtcblx0XHRcdFx0Zm5DYWxsID0gYHs9ICR7Zm5DYWxsfX1gO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIGZuQ2FsbDtcblxuXHRcdGNhc2UgXCJFbWJlZGRlZEV4cHJlc3Npb25CaW5kaW5nXCI6XG5cdFx0XHRyZXR1cm4gZW1iZWRkZWRJbkJpbmRpbmcgPyBgKCR7ZXhwci52YWx1ZS5zdWJzdHJpbmcoMiwgZXhwci52YWx1ZS5sZW5ndGggLSAxKX0pYCA6IGAke2V4cHIudmFsdWV9YDtcblxuXHRcdGNhc2UgXCJFbWJlZGRlZEJpbmRpbmdcIjpcblx0XHRcdHJldHVybiBlbWJlZGRlZEluQmluZGluZyA/IGAke2VtYmVkZGVkU2VwYXJhdG9yfSR7ZXhwci52YWx1ZX1gIDogYCR7ZXhwci52YWx1ZX1gO1xuXG5cdFx0Y2FzZSBcIlBhdGhJbk1vZGVsXCI6XG5cdFx0XHRyZXR1cm4gY29tcGlsZVBhdGhJbk1vZGVsRXhwcmVzc2lvbihleHByLCBlbWJlZGRlZEluQmluZGluZywgZW1iZWRkZWRTZXBhcmF0b3IpO1xuXG5cdFx0Y2FzZSBcIkNvbXBhcmlzb25cIjpcblx0XHRcdGNvbnN0IGNvbXBhcmlzb25FeHByZXNzaW9uID0gY29tcGlsZUNvbXBhcmlzb25FeHByZXNzaW9uKGV4cHIpO1xuXHRcdFx0cmV0dXJuIHdyYXBCaW5kaW5nRXhwcmVzc2lvbihjb21wYXJpc29uRXhwcmVzc2lvbiwgZW1iZWRkZWRJbkJpbmRpbmcpO1xuXG5cdFx0Y2FzZSBcIklmRWxzZVwiOlxuXHRcdFx0Y29uc3QgaWZFbHNlRXhwcmVzc2lvbiA9IGAke2NvbXBpbGVFeHByZXNzaW9uKGV4cHIuY29uZGl0aW9uLCB0cnVlKX0gPyAke2NvbXBpbGVFeHByZXNzaW9uKFxuXHRcdFx0XHRleHByLm9uVHJ1ZSxcblx0XHRcdFx0dHJ1ZSxcblx0XHRcdFx0a2VlcFRhcmdldFR5cGVcblx0XHRcdCl9IDogJHtjb21waWxlRXhwcmVzc2lvbihleHByLm9uRmFsc2UsIHRydWUsIGtlZXBUYXJnZXRUeXBlKX1gO1xuXHRcdFx0cmV0dXJuIHdyYXBCaW5kaW5nRXhwcmVzc2lvbihpZkVsc2VFeHByZXNzaW9uLCBlbWJlZGRlZEluQmluZGluZywgdHJ1ZSk7XG5cblx0XHRjYXNlIFwiU2V0XCI6XG5cdFx0XHRjb25zdCBzZXRFeHByZXNzaW9uID0gZXhwci5vcGVyYW5kcy5tYXAoKG9wZXJhbmQpID0+IGNvbXBpbGVFeHByZXNzaW9uKG9wZXJhbmQsIHRydWUpKS5qb2luKGAgJHtleHByLm9wZXJhdG9yfSBgKTtcblx0XHRcdHJldHVybiB3cmFwQmluZGluZ0V4cHJlc3Npb24oc2V0RXhwcmVzc2lvbiwgZW1iZWRkZWRJbkJpbmRpbmcsIHRydWUpO1xuXG5cdFx0Y2FzZSBcIkNvbmNhdFwiOlxuXHRcdFx0Y29uc3QgY29uY2F0RXhwcmVzc2lvbiA9IGV4cHIuZXhwcmVzc2lvbnNcblx0XHRcdFx0Lm1hcCgobmVzdGVkRXhwcmVzc2lvbikgPT4gY29tcGlsZUV4cHJlc3Npb24obmVzdGVkRXhwcmVzc2lvbiwgdHJ1ZSwgdHJ1ZSkpXG5cdFx0XHRcdC5qb2luKFwiICsgXCIpO1xuXHRcdFx0cmV0dXJuIHdyYXBCaW5kaW5nRXhwcmVzc2lvbihjb25jYXRFeHByZXNzaW9uLCBlbWJlZGRlZEluQmluZGluZyk7XG5cblx0XHRjYXNlIFwiTGVuZ3RoXCI6XG5cdFx0XHRjb25zdCBsZW5ndGhFeHByZXNzaW9uID0gYCR7Y29tcGlsZUV4cHJlc3Npb24oZXhwci5wYXRoSW5Nb2RlbCwgdHJ1ZSl9Lmxlbmd0aGA7XG5cdFx0XHRyZXR1cm4gd3JhcEJpbmRpbmdFeHByZXNzaW9uKGxlbmd0aEV4cHJlc3Npb24sIGVtYmVkZGVkSW5CaW5kaW5nKTtcblxuXHRcdGNhc2UgXCJOb3RcIjpcblx0XHRcdGNvbnN0IG5vdEV4cHJlc3Npb24gPSBgISR7Y29tcGlsZUV4cHJlc3Npb24oZXhwci5vcGVyYW5kLCB0cnVlKX1gO1xuXHRcdFx0cmV0dXJuIHdyYXBCaW5kaW5nRXhwcmVzc2lvbihub3RFeHByZXNzaW9uLCBlbWJlZGRlZEluQmluZGluZyk7XG5cblx0XHRjYXNlIFwiVHJ1dGh5XCI6XG5cdFx0XHRjb25zdCB0cnV0aHlFeHByZXNzaW9uID0gYCEhJHtjb21waWxlRXhwcmVzc2lvbihleHByLm9wZXJhbmQsIHRydWUpfWA7XG5cdFx0XHRyZXR1cm4gd3JhcEJpbmRpbmdFeHByZXNzaW9uKHRydXRoeUV4cHJlc3Npb24sIGVtYmVkZGVkSW5CaW5kaW5nKTtcblxuXHRcdGNhc2UgXCJGb3JtYXR0ZXJcIjpcblx0XHRcdGNvbnN0IGZvcm1hdHRlckV4cHJlc3Npb24gPSBjb21waWxlRm9ybWF0dGVyRXhwcmVzc2lvbihleHByKTtcblx0XHRcdHJldHVybiBlbWJlZGRlZEluQmluZGluZyA/IGAkJHtmb3JtYXR0ZXJFeHByZXNzaW9ufWAgOiBmb3JtYXR0ZXJFeHByZXNzaW9uO1xuXG5cdFx0Y2FzZSBcIkNvbXBsZXhUeXBlXCI6XG5cdFx0XHRjb25zdCBjb21wbGV4VHlwZUV4cHJlc3Npb24gPSBjb21waWxlQ29tcGxleFR5cGVFeHByZXNzaW9uKGV4cHIpO1xuXHRcdFx0cmV0dXJuIGVtYmVkZGVkSW5CaW5kaW5nID8gYCQke2NvbXBsZXhUeXBlRXhwcmVzc2lvbn1gIDogY29tcGxleFR5cGVFeHByZXNzaW9uO1xuXG5cdFx0ZGVmYXVsdDpcblx0XHRcdHJldHVybiBcIlwiO1xuXHR9XG59XG5cbi8qKlxuICogQ29tcGlsZSBhIGNvbXBhcmlzb24gZXhwcmVzc2lvbi5cbiAqIEBwYXJhbSBleHByZXNzaW9uIFRoZSBjb21wYXJpc29uIGV4cHJlc3Npb24uXG4gKiBAcmV0dXJucyBUaGUgY29tcGlsZWQgZXhwcmVzc2lvbi4gTmVlZHMgd3JhcHBpbmcgYmVmb3JlIGl0IGNhbiBiZSB1c2VkIGFzIGFuIGV4cHJlc3Npb24gYmluZGluZy5cbiAqL1xuZnVuY3Rpb24gY29tcGlsZUNvbXBhcmlzb25FeHByZXNzaW9uKGV4cHJlc3Npb246IENvbXBhcmlzb25FeHByZXNzaW9uKTogc3RyaW5nIHtcblx0ZnVuY3Rpb24gY29tcGlsZU9wZXJhbmQob3BlcmFuZDogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHVua25vd24+KTogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24ge1xuXHRcdGNvbnN0IGNvbXBpbGVkT3BlcmFuZCA9IGNvbXBpbGVFeHByZXNzaW9uKG9wZXJhbmQsIHRydWUpID8/IFwidW5kZWZpbmVkXCI7XG5cdFx0cmV0dXJuIHdyYXBCaW5kaW5nRXhwcmVzc2lvbihjb21waWxlZE9wZXJhbmQsIHRydWUsIG5lZWRQYXJlbnRoZXNpcyhvcGVyYW5kKSk7XG5cdH1cblxuXHRyZXR1cm4gYCR7Y29tcGlsZU9wZXJhbmQoZXhwcmVzc2lvbi5vcGVyYW5kMSl9ICR7ZXhwcmVzc2lvbi5vcGVyYXRvcn0gJHtjb21waWxlT3BlcmFuZChleHByZXNzaW9uLm9wZXJhbmQyKX1gO1xufVxuXG4vKipcbiAqIENvbXBpbGUgYSBmb3JtYXR0ZXIgZXhwcmVzc2lvbi5cbiAqIEBwYXJhbSBleHByZXNzaW9uIFRoZSBmb3JtYXR0ZXIgZXhwcmVzc2lvbi5cbiAqIEByZXR1cm5zIFRoZSBjb21waWxlZCBleHByZXNzaW9uLlxuICovXG5mdW5jdGlvbiBjb21waWxlRm9ybWF0dGVyRXhwcmVzc2lvbjxUIGV4dGVuZHMgUHJpbWl0aXZlVHlwZT4oZXhwcmVzc2lvbjogRm9ybWF0dGVyRXhwcmVzc2lvbjxUPik6IHN0cmluZyB7XG5cdGlmIChleHByZXNzaW9uLnBhcmFtZXRlcnMubGVuZ3RoID09PSAxKSB7XG5cdFx0cmV0dXJuIGB7JHtjb21waWxlUGF0aFBhcmFtZXRlcihleHByZXNzaW9uLnBhcmFtZXRlcnNbMF0gYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFByaW1pdGl2ZVR5cGU+LCB0cnVlKX0sIGZvcm1hdHRlcjogJyR7XG5cdFx0XHRleHByZXNzaW9uLmZuXG5cdFx0fSd9YDtcblx0fSBlbHNlIHtcblx0XHRjb25zdCBwYXJ0cyA9IGV4cHJlc3Npb24ucGFyYW1ldGVycy5tYXAoKHBhcmFtKSA9PiB7XG5cdFx0XHRpZiAocGFyYW0uX3R5cGUgPT09IFwiQ29tcGxleFR5cGVcIikge1xuXHRcdFx0XHRyZXR1cm4gY29tcGlsZUNvbXBsZXhUeXBlRXhwcmVzc2lvbihwYXJhbSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRyZXR1cm4gY29tcGlsZVBhdGhQYXJhbWV0ZXIocGFyYW0gYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFByaW1pdGl2ZVR5cGU+KTtcblx0XHRcdH1cblx0XHR9KTtcblx0XHRyZXR1cm4gYHtwYXJ0czogWyR7cGFydHMuam9pbihcIiwgXCIpfV0sIGZvcm1hdHRlcjogJyR7ZXhwcmVzc2lvbi5mbn0nfWA7XG5cdH1cbn1cblxuLyoqXG4gKiBDb21waWxlIHRoZSBwYXRoIHBhcmFtZXRlciBvZiBhIGZvcm1hdHRlciBjYWxsLlxuICogQHBhcmFtIGV4cHJlc3Npb24gVGhlIGJpbmRpbmcgcGFydCB0byBldmFsdWF0ZVxuICogQHBhcmFtIHNpbmdsZVBhdGggV2hldGhlciB0aGVyZSBpcyBvbmUgb3IgbXVsdGlwbGUgcGF0aCB0byBjb25zaWRlclxuICogQHJldHVybnMgVGhlIHN0cmluZyBzbmlwcGV0IHRvIGluY2x1ZGUgaW4gdGhlIG92ZXJhbGwgYmluZGluZyBkZWZpbml0aW9uXG4gKi9cbmZ1bmN0aW9uIGNvbXBpbGVQYXRoUGFyYW1ldGVyKGV4cHJlc3Npb246IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxQcmltaXRpdmVUeXBlPiwgc2luZ2xlUGF0aCA9IGZhbHNlKTogc3RyaW5nIHtcblx0bGV0IG91dFZhbHVlID0gXCJcIjtcblx0aWYgKGV4cHJlc3Npb24uX3R5cGUgPT09IFwiQ29uc3RhbnRcIikge1xuXHRcdGlmIChleHByZXNzaW9uLnZhbHVlID09PSB1bmRlZmluZWQpIHtcblx0XHRcdC8vIFNwZWNpYWwgY2FzZSBvdGhlcndpc2UgdGhlIEpTVG9rZW5pemVyIGNvbXBsYWlucyBhYm91dCBpbmNvcnJlY3QgY29udGVudFxuXHRcdFx0b3V0VmFsdWUgPSBgdmFsdWU6ICd1bmRlZmluZWQnYDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0b3V0VmFsdWUgPSBgdmFsdWU6ICR7Y29tcGlsZUNvbnN0YW50KGV4cHJlc3Npb24sIHRydWUpfWA7XG5cdFx0fVxuXHR9IGVsc2UgaWYgKGV4cHJlc3Npb24uX3R5cGUgPT09IFwiUGF0aEluTW9kZWxcIikge1xuXHRcdG91dFZhbHVlID0gYHBhdGg6ICcke2NvbXBpbGVQYXRoSW5Nb2RlbChleHByZXNzaW9uKX0nYDtcblxuXHRcdG91dFZhbHVlICs9IGV4cHJlc3Npb24udHlwZSA/IGAsIHR5cGU6ICcke2V4cHJlc3Npb24udHlwZX0nYCA6IGAsIHRhcmdldFR5cGU6ICdhbnknYDtcblx0XHRpZiAoZXhwcmVzc2lvbi5tb2RlKSB7XG5cdFx0XHRvdXRWYWx1ZSArPSBgLCBtb2RlOiAnJHtjb21waWxlRXhwcmVzc2lvbihleHByZXNzaW9uLm1vZGUpfSdgO1xuXHRcdH1cblx0XHRpZiAoaGFzRWxlbWVudHMoZXhwcmVzc2lvbi5jb25zdHJhaW50cykpIHtcblx0XHRcdG91dFZhbHVlICs9IGAsIGNvbnN0cmFpbnRzOiAke2NvbXBpbGVFeHByZXNzaW9uKGV4cHJlc3Npb24uY29uc3RyYWludHMpfWA7XG5cdFx0fVxuXHRcdGlmIChoYXNFbGVtZW50cyhleHByZXNzaW9uLmZvcm1hdE9wdGlvbnMpKSB7XG5cdFx0XHRvdXRWYWx1ZSArPSBgLCBmb3JtYXRPcHRpb25zOiAke2NvbXBpbGVFeHByZXNzaW9uKGV4cHJlc3Npb24uZm9ybWF0T3B0aW9ucyl9YDtcblx0XHR9XG5cdFx0aWYgKGhhc0VsZW1lbnRzKGV4cHJlc3Npb24ucGFyYW1ldGVycykpIHtcblx0XHRcdG91dFZhbHVlICs9IGAsIHBhcmFtZXRlcnM6ICR7Y29tcGlsZUV4cHJlc3Npb24oZXhwcmVzc2lvbi5wYXJhbWV0ZXJzKX1gO1xuXHRcdH1cblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gXCJcIjtcblx0fVxuXHRyZXR1cm4gc2luZ2xlUGF0aCA/IG91dFZhbHVlIDogYHske291dFZhbHVlfX1gO1xufVxuXG5mdW5jdGlvbiBoYXNFbGVtZW50cyhvYmo6IG9iamVjdCB8IHVuZGVmaW5lZCk6IGJvb2xlYW4ge1xuXHRyZXR1cm4gISFvYmogJiYgT2JqZWN0LmtleXMob2JqKS5sZW5ndGggPiAwO1xufVxuXG4vKipcbiAqIENvbXBpbGUgYSBiaW5kaW5nIGV4cHJlc3Npb24gcGF0aC5cbiAqIEBwYXJhbSBleHByZXNzaW9uIFRoZSBleHByZXNzaW9uIHRvIGNvbXBpbGUuXG4gKiBAcmV0dXJucyBUaGUgY29tcGlsZWQgcGF0aC5cbiAqL1xuZnVuY3Rpb24gY29tcGlsZVBhdGhJbk1vZGVsPFQgZXh0ZW5kcyBQcmltaXRpdmVUeXBlPihleHByZXNzaW9uOiBQYXRoSW5Nb2RlbEV4cHJlc3Npb248VD4pOiBzdHJpbmcge1xuXHRyZXR1cm4gYCR7ZXhwcmVzc2lvbi5tb2RlbE5hbWUgPyBleHByZXNzaW9uLm1vZGVsTmFtZSArIFwiPlwiIDogXCJcIn0ke2V4cHJlc3Npb24ucGF0aH1gO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7RUFvSUE7QUFDQTtBQUNBOztFQXVDTyxTQUFTQSxVQUFVQSxDQUFDQyxhQUFzQixFQUE2QjtJQUM3RSxPQUFRQSxhQUFhLEVBQWVDLEtBQUssS0FBSyxVQUFVO0VBQ3pEOztFQUVBO0FBQ0E7QUFDQTtBQUNBO0VBSEFDLFFBQUEsQ0FBQUgsVUFBQSxHQUFBQSxVQUFBO0VBcUNPLE1BQU1JLGdCQUF1RCxHQUFHO0lBQ3RFLGFBQWEsRUFBRTtNQUFFQyxJQUFJLEVBQUU7SUFBa0MsQ0FBQztJQUMxRCxVQUFVLEVBQUU7TUFBRUEsSUFBSSxFQUFFO0lBQStCLENBQUM7SUFDcEQsVUFBVSxFQUFFO01BQUVBLElBQUksRUFBRTtJQUErQixDQUFDO0lBQ3BELG9CQUFvQixFQUFFO01BQ3JCQyxXQUFXLEVBQUU7UUFDWkMsVUFBVSxFQUFFLFdBQVc7UUFDdkJDLEdBQUcsRUFBRTtNQUNOLENBQUM7TUFDREgsSUFBSSxFQUFFO0lBQ1AsQ0FBQztJQUNELGFBQWEsRUFBRTtNQUNkQyxXQUFXLEVBQUU7UUFDWiwyQ0FBMkMsRUFBRSxTQUFTO1FBQ3RELG9FQUFvRSxF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
|