@kontur.candy/tools 2.138.0 → 2.140.0-debug
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/CHANGELOG.md +79 -0
- package/distr/Common/CandyApiClient/CandyApiClient.js +80 -9
- package/distr/Common/CandyApiClient/FakeCandyApiClient.js +26 -4
- package/distr/Common/CandyApiClient/Types/GetInner/ServerRawResponse.js +11 -0
- package/distr/Common/CandyApiClient/Types/MassActions/MassActionParameters.js +6 -0
- package/distr/Common/CandyApiClient/Types/Print/PrintResponse.js +6 -0
- package/distr/Common/CandyApiClient/Types/Print/PrintType.js +14 -0
- package/distr/Common/CandyApiClient/Types/Staff/ImportEmployeesOptions.js +6 -0
- package/distr/Common/HttpClient/HttpClient.js +5 -2
- package/distr/Common/IterableUtils.js +26 -1
- package/distr/Common/KCLangRuntimeUtils.js +10 -2
- package/distr/Common/ModelPath/BuildIterationSequence.js +3 -2
- package/distr/Common/ModelPath/ModelPath.js +15 -4
- package/distr/Common/StringArrayKey.js +4 -12
- package/distr/Common/UseShowOnce.js +88 -0
- package/distr/Common/hashUtils.js +17 -0
- package/distr/Tools/src/BuildTasks/Form/CompileForm.js +10 -4
- package/distr/Tools/src/BuildTasks/Generator/GeneratorWorker/GeneratorRequireUtils.js +45 -2
- package/distr/Tools/src/BuildTasks/Generator/GeneratorWorker/ReadSourcesAndProcessSugarWorker.js +3 -1
- package/distr/Tools/src/BuildTasks/ResolveFormInfo.js +1 -1
- package/distr/Tools/src/CLICommands/BuildForms/RunBuildForms.js +6 -6
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerBackendResourcesController.js +46 -4
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerBackendResourcesUpdatesController.js +2 -2
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/BuildFormDevServer.js +12 -6
- package/distr/Tools/src/CLICommands/DevBuild/RunDevBuild.js +2 -2
- package/distr/Tools/src/CLICommands/UpgradeForm/RunUpgradeForm.js +5 -2
- package/distr/Tools/src/Commons/ApiClient/ToolsApiClient.js +37 -0
- package/distr/Tools/src/FormWebpackConfiguration/CacheAssetsPlugin.js +9 -7
- package/distr/Tools/src/FormWebpackConfiguration/createFormWebpackConfiguration.js +5 -3
- package/distr/Tools/src/LocalServerFrontEndDist/enhancedClient.js +1 -1
- package/distr/Tools/src/LocalServerFrontEndDist/index.js +1 -1
- package/distr/Tools/src/LocalServerFrontEndDist/index.js.map +1 -1
- package/distr/Tools/src/StaticFilesForProductionResourcesDir/client.js +151 -57
- package/distr/Tools/src/StaticFilesForProductionResourcesDir/client.js.map +1 -1
- package/distr/Tools/src/StaticFilesForProductionResourcesDir/client.min.js +226 -137
- package/distr/Tools/src/StaticFilesForProductionResourcesDir/client.min.js.map +1 -1
- package/package.json +1 -1
|
@@ -122,6 +122,14 @@ class KCLangRuntimeUtils {
|
|
|
122
122
|
return undefined;
|
|
123
123
|
}
|
|
124
124
|
|
|
125
|
+
floor(value) {
|
|
126
|
+
if (isBigSource(value)) {
|
|
127
|
+
return (0, _AutocalcCommonFunctions.wrapDecimalOperand)((0, _AutocalcCommonFunctions.wrapDecimalOperand)(value).round(undefined, 0));
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
return undefined;
|
|
131
|
+
}
|
|
132
|
+
|
|
125
133
|
sum(left, right) {
|
|
126
134
|
if (!isBigOrNumber(left) && !isBigOrNumber(right)) {
|
|
127
135
|
return undefined;
|
|
@@ -239,11 +247,11 @@ class KCLangRuntimeUtils {
|
|
|
239
247
|
}
|
|
240
248
|
|
|
241
249
|
dateNow() {
|
|
242
|
-
return new Date().
|
|
250
|
+
return new Date().toLocaleDateString("ru-RU");
|
|
243
251
|
}
|
|
244
252
|
|
|
245
253
|
}
|
|
246
254
|
|
|
247
255
|
exports.KCLangRuntimeUtils = KCLangRuntimeUtils;
|
|
248
256
|
KCLangRuntimeUtils.kcLangUtilsName = "kcLangUtils";
|
|
249
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL0NvbW1vbi9LQ0xhbmdSdW50aW1lVXRpbHMudHMiXSwibmFtZXMiOlsiaXNCaWdTb3VyY2UiLCJ2YWx1ZSIsIkJpZyIsImlzQmlnT3JOdW1iZXIiLCJLQ0xhbmdSdW50aW1lVXRpbHMiLCJhbmQiLCJsZWZ0IiwicmlnaHQiLCJ1bmRlZmluZWQiLCJkaXZpc2lvbiIsImRpdiIsImVxIiwiY21wIiwiZ2UiLCJndGUiLCJndCIsImxlIiwibHRlIiwibHQiLCJtaW51cyIsImFyZ3VtZW50IiwibXVsIiwibXVsdGlwbHkiLCJub3QiLCJub3RlcSIsIm9yIiwicm91bmQiLCJmcmFjdGlvbkRpZ2l0cyIsInN1bSIsImFkZCIsImFicyIsInhhYnMiLCJsZW5ndGgiLCJleGlzdHMiLCJ2YWx1ZVNlbGVjdG9yIiwicGF0aCIsImNvbnZlcnRUb0RlY2ltYWwiLCJjb252ZXJ0VG9TdHJpbmciLCJ0b1N0cmluZyIsInJlZ2V4TWF0Y2giLCJwYXR0ZXJuIiwiUmVnRXhwIiwidGVzdCIsIm9uZW9mIiwidmFsdWVzIiwiaW5kZXhPZiIsInZhbHVlQXNCaWciLCJzb21lIiwiaXRlbSIsInN1YnN0cmluZyIsInN0ciIsInN0YXJ0IiwiZW5kIiwiZGF0ZU5vdyIsIkRhdGUiLCJ0b0xvY2FsZVN0cmluZyIsInJlcGxhY2UiLCJrY0xhbmdVdGlsc05hbWUiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFBOztBQUVBOztBQUVBLE1BQU1BLFdBQVcsR0FBSUMsS0FBRCxJQUErQjtBQUMvQyxNQUFJLE9BQU9BLEtBQVAsS0FBaUIsUUFBakIsSUFBNkIsT0FBT0EsS0FBUCxLQUFpQixRQUE5QyxJQUEwREEsS0FBSyxZQUFZQyxZQUEvRSxFQUFvRjtBQUNoRixXQUFPLElBQVA7QUFDSDs7QUFDRCxTQUFPLEtBQVA7QUFDSCxDQUxEOztBQU9BLE1BQU1DLGFBQWEsR0FBSUYsS0FBRCxJQUNsQixPQUFPQSxLQUFQLEtBQWlCLFFBQWpCLElBQTZCQSxLQUFLLFlBQVlDLFlBRGxE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QSxhQUFPMkMsTUFBTSxDQUFDRyxJQUFQLENBQVlDLElBQUksSUFBSTdDLGFBQWEsQ0FBQzZDLElBQUQsQ0FBYixJQUF1QkYsVUFBVSxDQUFDbkMsRUFBWCxDQUFjcUMsSUFBZCxDQUEzQyxDQUFQO0FBQ0g7O0FBRUQsV0FBTyxLQUFQO0FBQ0g7O0FBRU1DLEVBQUFBLFNBQVMsQ0FDWkMsR0FEWSxFQUVaQyxLQUZZLEVBR1puQixNQUhZLEVBSU07QUFDbEIsUUFBSWtCLEdBQUcsSUFBSTFDLFNBQVAsSUFBb0IyQyxLQUFLLElBQUkzQyxTQUE3QixJQUEwQ3dCLE1BQU0sSUFBSXhCLFNBQXhELEVBQW1FO0FBQy9ELGFBQU9BLFNBQVA7QUFDSDs7QUFDRCxRQUFJd0IsTUFBTSxJQUFJLENBQWQsRUFBaUI7QUFDYixhQUFPLEVBQVA7QUFDSDs7QUFDRCxVQUFNb0IsR0FBRyxHQUFHRCxLQUFLLEdBQUduQixNQUFwQjtBQUVBLFdBQU9rQixHQUFHLENBQUNELFNBQUosQ0FBY0UsS0FBZCxFQUFxQkMsR0FBckIsQ0FBUDtBQUNIOztBQUNNQyxFQUFBQSxPQUFPLEdBQXVCO0FBQ2pDLFdBQU8sSUFBSUMsSUFBSixHQUFXQyxjQUFYLENBQTBCLE9BQTFCLEVBQW1DQyxPQUFuQyxDQUEyQyxHQUEzQyxFQUFnRCxFQUFoRCxDQUFQO0FBQ0g7O0FBNU0yQjs7O0FBQW5CcEQsa0IsQ0FDS3FELGUsR0FBa0IsYSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBCaWcsIHsgQmlnU291cmNlIH0gZnJvbSBcImJpZy5qc1wiO1xuXG5pbXBvcnQgeyB3cmFwRGVjaW1hbE9wZXJhbmQgfSBmcm9tIFwiLi4vRW5naW5lL3NyYy9IZWxwZXJzL0F1dG9jYWxjQ29tbW9uRnVuY3Rpb25zXCI7XG5cbmNvbnN0IGlzQmlnU291cmNlID0gKHZhbHVlOiBCaWdTb3VyY2UpOiBib29sZWFuID0+IHtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSBcIm51bWJlclwiIHx8IHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIiB8fCB2YWx1ZSBpbnN0YW5jZW9mIEJpZykge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufTtcblxuY29uc3QgaXNCaWdPck51bWJlciA9ICh2YWx1ZTogQmlnIHwgbnVtYmVyIHwgdW5kZWZpbmVkIHwgbnVsbCB8IHVua25vd24pID0+XG4gICAgdHlwZW9mIHZhbHVlID09PSBcIm51bWJlclwiIHx8IHZhbHVlIGluc3RhbmNlb2YgQmlnO1xuXG5leHBvcnQgY2xhc3MgS0NMYW5nUnVudGltZVV0aWxzIHtcbiAgICBwdWJsaWMgc3RhdGljIGtjTGFuZ1V0aWxzTmFtZSA9IFwia2NMYW5nVXRpbHNcIjtcblxuICAgIHB1YmxpYyBhbmQobGVmdDogYm9vbGVhbiB8IHVuZGVmaW5lZCwgcmlnaHQ6IGJvb2xlYW4gfCB1bmRlZmluZWQpOiBib29sZWFuIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgaWYgKGxlZnQgPT0gdW5kZWZpbmVkIHx8IHJpZ2h0ID09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbGVmdCAmJiByaWdodDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZGl2aXNpb24obGVmdDogQmlnU291cmNlLCByaWdodDogQmlnU291cmNlKTogQmlnIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgaWYgKGlzQmlnU291cmNlKGxlZnQpICYmIGlzQmlnU291cmNlKHJpZ2h0KSkge1xuICAgICAgICAgICAgcmV0dXJuIHdyYXBEZWNpbWFsT3BlcmFuZChsZWZ0KS5kaXYocmlnaHQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgcHVibGljIGVxKGxlZnQ6IEJpZ1NvdXJjZSwgcmlnaHQ6IEJpZ1NvdXJjZSk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAodHlwZW9mIGxlZnQgPT09IFwic3RyaW5nXCIgJiYgdHlwZW9mIHJpZ2h0ID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICByZXR1cm4gbGVmdCA9PT0gcmlnaHQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzQmlnU291cmNlKGxlZnQpICYmIGlzQmlnU291cmNlKHJpZ2h0KSkge1xuICAgICAgICAgICAgcmV0dXJuIHdyYXBEZWNpbWFsT3BlcmFuZChsZWZ0KS5jbXAocmlnaHQpID09PSAwO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2UobGVmdDogQmlnU291cmNlLCByaWdodDogQmlnU291cmNlKTogYm9vbGVhbiB7XG4gICAgICAgIGlmIChpc0JpZ1NvdXJjZShsZWZ0KSAmJiBpc0JpZ1NvdXJjZShyaWdodCkpIHtcbiAgICAgICAgICAgIHJldHVybiB3cmFwRGVjaW1hbE9wZXJhbmQobGVmdCkuZ3RlKHJpZ2h0KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcHVibGljIGd0KGxlZnQ6IEJpZ1NvdXJjZSwgcmlnaHQ6IEJpZ1NvdXJjZSk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAoaXNCaWdTb3VyY2UobGVmdCkgJiYgaXNCaWdTb3VyY2UocmlnaHQpKSB7XG4gICAgICAgICAgICByZXR1cm4gd3JhcERlY2ltYWxPcGVyYW5kKGxlZnQpLmd0KHJpZ2h0KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcHVibGljIGxlKGxlZnQ6IEJpZ1NvdXJjZSwgcmlnaHQ6IEJpZ1NvdXJjZSk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAoaXNCaWdTb3VyY2UobGVmdCkgJiYgaXNCaWdTb3VyY2UocmlnaHQpKSB7XG4gICAgICAgICAgICByZXR1cm4gd3JhcERlY2ltYWxPcGVyYW5kKGxlZnQpLmx0ZShyaWdodCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHB1YmxpYyBsdChsZWZ0OiBCaWdTb3VyY2UsIHJpZ2h0OiBCaWdTb3VyY2UpOiBib29sZWFuIHtcbiAgICAgICAgaWYgKGlzQmlnU291cmNlKGxlZnQpICYmIGlzQmlnU291cmNlKHJpZ2h0KSkge1xuICAgICAgICAgICAgcmV0dXJuIHdyYXBEZWNpbWFsT3BlcmFuZChsZWZ0KS5sdChyaWdodCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHB1YmxpYyBtaW51cyhhcmd1bWVudDogQmlnU291cmNlKTogdW5rbm93biB7XG4gICAgICAgIGlmIChpc0JpZ1NvdXJjZShhcmd1bWVudCkpIHtcbiAgICAgICAgICAgIHJldHVybiB3cmFwRGVjaW1hbE9wZXJhbmQoYXJndW1lbnQpLm11bCgtMSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBwdWJsaWMgbXVsdGlwbHkobGVmdDogQmlnU291cmNlLCByaWdodDogQmlnU291cmNlKTogdW5rbm93biB7XG4gICAgICAgIGlmIChpc0JpZ1NvdXJjZShsZWZ0KSAmJiBpc0JpZ1NvdXJjZShyaWdodCkpIHtcbiAgICAgICAgICAgIHJldHVybiB3cmFwRGVjaW1hbE9wZXJhbmQobGVmdCkubXVsKHJpZ2h0KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIHB1YmxpYyBub3QobGVmdD86IGJvb2xlYW4pOiBib29sZWFuIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgcmV0dXJuIGxlZnQgIT0gdW5kZWZpbmVkID8gIWxlZnQgOiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgcHVibGljIG5vdGVxKGxlZnQ6IEJpZ1NvdXJjZSwgcmlnaHQ6IEJpZ1NvdXJjZSk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gIXRoaXMuZXEobGVmdCwgcmlnaHQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBvcihsZWZ0OiBib29sZWFuIHwgdW5kZWZpbmVkLCByaWdodDogYm9vbGVhbiB8IHVuZGVmaW5lZCk6IGJvb2xlYW4gfCB1bmRlZmluZWQge1xuICAgICAgICBpZiAodHlwZW9mIGxlZnQgPT0gXCJib29sZWFuXCIgfHwgdHlwZW9mIHJpZ2h0ID09IFwiYm9vbGVhblwiKSB7XG4gICAgICAgICAgICByZXR1cm4gbGVmdCB8fCByaWdodDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIHB1YmxpYyByb3VuZCh2YWx1ZTogQmlnU291cmNlLCBmcmFjdGlvbkRpZ2l0cz86IG51bWJlcik6IEJpZyB8IHVuZGVmaW5lZCB7XG4gICAgICAgIGlmIChpc0JpZ1NvdXJjZSh2YWx1ZSkpIHtcbiAgICAgICAgICAgIHJldHVybiB3cmFwRGVjaW1hbE9wZXJhbmQodmFsdWUpLnJvdW5kKGZyYWN0aW9uRGlnaXRzKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdW0obGVmdDogQmlnU291cmNlLCByaWdodDogQmlnU291cmNlKTogQmlnIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgaWYgKCFpc0JpZ09yTnVtYmVyKGxlZnQpICYmICFpc0JpZ09yTnVtYmVyKHJpZ2h0KSkge1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpc0JpZ1NvdXJjZShsZWZ0KSAmJiBpc0JpZ1NvdXJjZShyaWdodCkpIHtcbiAgICAgICAgICAgIHJldHVybiB3cmFwRGVjaW1hbE9wZXJhbmQobGVmdCkuYWRkKHJpZ2h0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpc0JpZ1NvdXJjZShsZWZ0KSkge1xuICAgICAgICAgICAgcmV0dXJuIHdyYXBEZWNpbWFsT3BlcmFuZChsZWZ0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpc0JpZ1NvdXJjZShyaWdodCkpIHtcbiAgICAgICAgICAgIHJldHVybiB3cmFwRGVjaW1hbE9wZXJhbmQocmlnaHQpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBwdWJsaWMgYWJzKGFyZ3VtZW50OiBCaWdTb3VyY2UpOiBCaWcgfCB1bmRlZmluZWQge1xuICAgICAgICBpZiAoaXNCaWdTb3VyY2UoYXJndW1lbnQpKSB7XG4gICAgICAgICAgICByZXR1cm4gd3JhcERlY2ltYWxPcGVyYW5kKGFyZ3VtZW50KS5hYnMoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIHB1YmxpYyB4YWJzKGFyZ3VtZW50OiBCaWdTb3VyY2UpOiBCaWcgfCB1bmRlZmluZWQge1xuICAgICAgICBpZiAoaXNCaWdTb3VyY2UoYXJndW1lbnQpKSB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IHdyYXBEZWNpbWFsT3BlcmFuZChhcmd1bWVudCk7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWUubHQoMCkgPyBuZXcgQmlnKDApIDogdmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBwdWJsaWMgbGVuZ3RoKGFyZ3VtZW50OiBzdHJpbmcgfCB1bmRlZmluZWQgfCBudWxsKTogbnVtYmVyIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgaWYgKHR5cGVvZiBhcmd1bWVudCA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgcmV0dXJuIGFyZ3VtZW50Lmxlbmd0aDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIHB1YmxpYyBleGlzdHModmFsdWVTZWxlY3RvcjogKHBhdGg6IHN0cmluZykgPT4gdW5rbm93biwgcGF0aDogc3RyaW5nKTogYm9vbGVhbiB8IHVuZGVmaW5lZCB7XG4gICAgICAgIGlmICh2YWx1ZVNlbGVjdG9yID09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB2YWx1ZSA9IHZhbHVlU2VsZWN0b3IocGF0aCk7XG4gICAgICAgIHJldHVybiB2YWx1ZSAhPSB1bmRlZmluZWQgJiYgdmFsdWUgIT0gXCJcIjtcbiAgICB9XG5cbiAgICBwdWJsaWMgY29udmVydFRvRGVjaW1hbChhcmd1bWVudDogQmlnU291cmNlIHwgc3RyaW5nIHwgdW5kZWZpbmVkKTogQmlnIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgcmV0dXJuIHdyYXBEZWNpbWFsT3BlcmFuZChhcmd1bWVudCk7XG4gICAgfVxuXG4gICAgcHVibGljIGNvbnZlcnRUb1N0cmluZyhhcmd1bWVudDogQmlnU291cmNlIHwgdW5kZWZpbmVkIHwgbnVsbCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgICAgIGlmICh0eXBlb2YgYXJndW1lbnQgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIHJldHVybiBhcmd1bWVudDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlb2YgYXJndW1lbnQgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICAgIHJldHVybiBhcmd1bWVudC50b1N0cmluZygpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGFyZ3VtZW50IGluc3RhbmNlb2YgQmlnKSB7XG4gICAgICAgICAgICByZXR1cm4gYXJndW1lbnQudG9TdHJpbmcoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgcHVibGljIHJlZ2V4TWF0Y2gocGF0dGVybjogc3RyaW5nIHwgdW5kZWZpbmVkLCB2YWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkKTogYm9vbGVhbiB8IHVuZGVmaW5lZCB7XG4gICAgICAgIGlmIChwYXR0ZXJuID09IHVuZGVmaW5lZCB8fCB2YWx1ZSA9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBSZWdFeHAocGF0dGVybikudGVzdCh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25lb2YodmFsdWVzOiBBcnJheTxzdHJpbmcgfCBudW1iZXIgfCBCaWc+LCB2YWx1ZTogc3RyaW5nIHwgbnVtYmVyIHwgQmlnKTogYm9vbGVhbiB8IHVuZGVmaW5lZCB7XG4gICAgICAgIGlmICh2YWx1ZXMgPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZXMuaW5kZXhPZih2YWx1ZSkgIT09IC0xO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGlzQmlnT3JOdW1iZXIodmFsdWUpKSB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZUFzQmlnID0gbmV3IEJpZyh2YWx1ZSk7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWVzLnNvbWUoaXRlbSA9PiBpc0JpZ09yTnVtYmVyKGl0ZW0pICYmIHZhbHVlQXNCaWcuZXEoaXRlbSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdWJzdHJpbmcoXG4gICAgICAgIHN0cjogc3RyaW5nIHwgdW5kZWZpbmVkLFxuICAgICAgICBzdGFydDogbnVtYmVyIHwgdW5kZWZpbmVkLFxuICAgICAgICBsZW5ndGg6IG51bWJlciB8IHVuZGVmaW5lZFxuICAgICk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgICAgIGlmIChzdHIgPT0gdW5kZWZpbmVkIHx8IHN0YXJ0ID09IHVuZGVmaW5lZCB8fCBsZW5ndGggPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIGlmIChsZW5ndGggPD0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIFwiXCI7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZW5kID0gc3RhcnQgKyBsZW5ndGg7XG5cbiAgICAgICAgcmV0dXJuIHN0ci5zdWJzdHJpbmcoc3RhcnQsIGVuZCk7XG4gICAgfVxuICAgIHB1YmxpYyBkYXRlTm93KCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgICAgIHJldHVybiBuZXcgRGF0ZSgpLnRvTG9jYWxlU3RyaW5nKFwiZW4tR0JcIikucmVwbGFjZShcIixcIiwgXCJcIik7XG4gICAgfVxufVxuIl19
|
|
257
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL0NvbW1vbi9LQ0xhbmdSdW50aW1lVXRpbHMudHMiXSwibmFtZXMiOlsiaXNCaWdTb3VyY2UiLCJ2YWx1ZSIsIkJpZyIsImlzQmlnT3JOdW1iZXIiLCJLQ0xhbmdSdW50aW1lVXRpbHMiLCJhbmQiLCJsZWZ0IiwicmlnaHQiLCJ1bmRlZmluZWQiLCJkaXZpc2lvbiIsImRpdiIsImVxIiwiY21wIiwiZ2UiLCJndGUiLCJndCIsImxlIiwibHRlIiwibHQiLCJtaW51cyIsImFyZ3VtZW50IiwibXVsIiwibXVsdGlwbHkiLCJub3QiLCJub3RlcSIsIm9yIiwicm91bmQiLCJmcmFjdGlvbkRpZ2l0cyIsImZsb29yIiwic3VtIiwiYWRkIiwiYWJzIiwieGFicyIsImxlbmd0aCIsImV4aXN0cyIsInZhbHVlU2VsZWN0b3IiLCJwYXRoIiwiY29udmVydFRvRGVjaW1hbCIsImNvbnZlcnRUb1N0cmluZyIsInRvU3RyaW5nIiwicmVnZXhNYXRjaCIsInBhdHRlcm4iLCJSZWdFeHAiLCJ0ZXN0Iiwib25lb2YiLCJ2YWx1ZXMiLCJpbmRleE9mIiwidmFsdWVBc0JpZyIsInNvbWUiLCJpdGVtIiwic3Vic3RyaW5nIiwic3RyIiwic3RhcnQiLCJlbmQiLCJkYXRlTm93IiwiRGF0ZSIsInRvTG9jYWxlRGF0ZVN0cmluZyIsImtjTGFuZ1V0aWxzTmFtZSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUE7O0FBRUE7O0FBRUEsTUFBTUEsV0FBVyxHQUFJQyxLQUFELElBQStCO0FBQy9DLE1BQUksT0FBT0EsS0FBUCxLQUFpQixRQUFqQixJQUE2QixPQUFPQSxLQUFQLEtBQWlCLFFBQTlDLElBQTBEQSxLQUFLLFlBQVlDLFlBQS9FLEVBQW9GO0FBQ2hGLFdBQU8sSUFBUDtBQUNIOztBQUNELFNBQU8sS0FBUDtBQUNILENBTEQ7O0FBT0EsTUFBTUMsYUFBYSxHQUFJRixLQUFELElBQ2xCLE9BQU9BLEtBQVAsS0FBaUIsUUFBakIsSUFBNkJBLEtBQUssWUFBWUMsWUFE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LE9BQU9QLEtBQVAsS0FBaUIsUUFBckIsRUFBK0I7QUFDM0IsYUFBTzRDLE1BQU0sQ0FBQ0MsT0FBUCxDQUFlN0MsS0FBZixNQUEwQixDQUFDLENBQWxDO0FBQ0g7O0FBRUQsUUFBSUUsYUFBYSxDQUFDRixLQUFELENBQWpCLEVBQTBCO0FBQ3RCLFlBQU04QyxVQUFVLEdBQUcsSUFBSTdDLFlBQUosQ0FBUUQsS0FBUixDQUFuQjtBQUNBLGFBQU80QyxNQUFNLENBQUNHLElBQVAsQ0FBWUMsSUFBSSxJQUFJOUMsYUFBYSxDQUFDOEMsSUFBRCxDQUFiLElBQXVCRixVQUFVLENBQUNwQyxFQUFYLENBQWNzQyxJQUFkLENBQTNDLENBQVA7QUFDSDs7QUFFRCxXQUFPLEtBQVA7QUFDSDs7QUFFTUMsRUFBQUEsU0FBUyxDQUNaQyxHQURZLEVBRVpDLEtBRlksRUFHWm5CLE1BSFksRUFJTTtBQUNsQixRQUFJa0IsR0FBRyxJQUFJM0MsU0FBUCxJQUFvQjRDLEtBQUssSUFBSTVDLFNBQTdCLElBQTBDeUIsTUFBTSxJQUFJekIsU0FBeEQsRUFBbUU7QUFDL0QsYUFBT0EsU0FBUDtBQUNIOztBQUNELFFBQUl5QixNQUFNLElBQUksQ0FBZCxFQUFpQjtBQUNiLGFBQU8sRUFBUDtBQUNIOztBQUNELFVBQU1vQixHQUFHLEdBQUdELEtBQUssR0FBR25CLE1BQXBCO0FBRUEsV0FBT2tCLEdBQUcsQ0FBQ0QsU0FBSixDQUFjRSxLQUFkLEVBQXFCQyxHQUFyQixDQUFQO0FBQ0g7O0FBRU1DLEVBQUFBLE9BQU8sR0FBdUI7QUFDakMsV0FBTyxJQUFJQyxJQUFKLEdBQVdDLGtCQUFYLENBQThCLE9BQTlCLENBQVA7QUFDSDs7QUFwTjJCOzs7QUFBbkJwRCxrQixDQUNLcUQsZSxHQUFrQixhIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IEJpZywgeyBCaWdTb3VyY2UgfSBmcm9tIFwiYmlnLmpzXCI7XG5cbmltcG9ydCB7IHdyYXBEZWNpbWFsT3BlcmFuZCB9IGZyb20gXCIuLi9FbmdpbmUvc3JjL0hlbHBlcnMvQXV0b2NhbGNDb21tb25GdW5jdGlvbnNcIjtcblxuY29uc3QgaXNCaWdTb3VyY2UgPSAodmFsdWU6IEJpZ1NvdXJjZSk6IGJvb2xlYW4gPT4ge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwibnVtYmVyXCIgfHwgdHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiIHx8IHZhbHVlIGluc3RhbmNlb2YgQmlnKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59O1xuXG5jb25zdCBpc0JpZ09yTnVtYmVyID0gKHZhbHVlOiBCaWcgfCBudW1iZXIgfCB1bmRlZmluZWQgfCBudWxsIHwgdW5rbm93bikgPT5cbiAgICB0eXBlb2YgdmFsdWUgPT09IFwibnVtYmVyXCIgfHwgdmFsdWUgaW5zdGFuY2VvZiBCaWc7XG5cbmV4cG9ydCBjbGFzcyBLQ0xhbmdSdW50aW1lVXRpbHMge1xuICAgIHB1YmxpYyBzdGF0aWMga2NMYW5nVXRpbHNOYW1lID0gXCJrY0xhbmdVdGlsc1wiO1xuXG4gICAgcHVibGljIGFuZChsZWZ0OiBib29sZWFuIHwgdW5kZWZpbmVkLCByaWdodDogYm9vbGVhbiB8IHVuZGVmaW5lZCk6IGJvb2xlYW4gfCB1bmRlZmluZWQge1xuICAgICAgICBpZiAobGVmdCA9PSB1bmRlZmluZWQgfHwgcmlnaHQgPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBsZWZ0ICYmIHJpZ2h0O1xuICAgIH1cblxuICAgIHB1YmxpYyBkaXZpc2lvbihsZWZ0OiBCaWdTb3VyY2UsIHJpZ2h0OiBCaWdTb3VyY2UpOiBCaWcgfCB1bmRlZmluZWQge1xuICAgICAgICBpZiAoaXNCaWdTb3VyY2UobGVmdCkgJiYgaXNCaWdTb3VyY2UocmlnaHQpKSB7XG4gICAgICAgICAgICByZXR1cm4gd3JhcERlY2ltYWxPcGVyYW5kKGxlZnQpLmRpdihyaWdodCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZXEobGVmdDogQmlnU291cmNlLCByaWdodDogQmlnU291cmNlKTogYm9vbGVhbiB7XG4gICAgICAgIGlmICh0eXBlb2YgbGVmdCA9PT0gXCJzdHJpbmdcIiAmJiB0eXBlb2YgcmlnaHQgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIHJldHVybiBsZWZ0ID09PSByaWdodDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNCaWdTb3VyY2UobGVmdCkgJiYgaXNCaWdTb3VyY2UocmlnaHQpKSB7XG4gICAgICAgICAgICByZXR1cm4gd3JhcERlY2ltYWxPcGVyYW5kKGxlZnQpLmNtcChyaWdodCkgPT09IDA7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZShsZWZ0OiBCaWdTb3VyY2UsIHJpZ2h0OiBCaWdTb3VyY2UpOiBib29sZWFuIHtcbiAgICAgICAgaWYgKGlzQmlnU291cmNlKGxlZnQpICYmIGlzQmlnU291cmNlKHJpZ2h0KSkge1xuICAgICAgICAgICAgcmV0dXJuIHdyYXBEZWNpbWFsT3BlcmFuZChsZWZ0KS5ndGUocmlnaHQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ3QobGVmdDogQmlnU291cmNlLCByaWdodDogQmlnU291cmNlKTogYm9vbGVhbiB7XG4gICAgICAgIGlmIChpc0JpZ1NvdXJjZShsZWZ0KSAmJiBpc0JpZ1NvdXJjZShyaWdodCkpIHtcbiAgICAgICAgICAgIHJldHVybiB3cmFwRGVjaW1hbE9wZXJhbmQobGVmdCkuZ3QocmlnaHQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgbGUobGVmdDogQmlnU291cmNlLCByaWdodDogQmlnU291cmNlKTogYm9vbGVhbiB7XG4gICAgICAgIGlmIChpc0JpZ1NvdXJjZShsZWZ0KSAmJiBpc0JpZ1NvdXJjZShyaWdodCkpIHtcbiAgICAgICAgICAgIHJldHVybiB3cmFwRGVjaW1hbE9wZXJhbmQobGVmdCkubHRlKHJpZ2h0KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcHVibGljIGx0KGxlZnQ6IEJpZ1NvdXJjZSwgcmlnaHQ6IEJpZ1NvdXJjZSk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAoaXNCaWdTb3VyY2UobGVmdCkgJiYgaXNCaWdTb3VyY2UocmlnaHQpKSB7XG4gICAgICAgICAgICByZXR1cm4gd3JhcERlY2ltYWxPcGVyYW5kKGxlZnQpLmx0KHJpZ2h0KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcHVibGljIG1pbnVzKGFyZ3VtZW50OiBCaWdTb3VyY2UpOiB1bmtub3duIHtcbiAgICAgICAgaWYgKGlzQmlnU291cmNlKGFyZ3VtZW50KSkge1xuICAgICAgICAgICAgcmV0dXJuIHdyYXBEZWNpbWFsT3BlcmFuZChhcmd1bWVudCkubXVsKC0xKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIHB1YmxpYyBtdWx0aXBseShsZWZ0OiBCaWdTb3VyY2UsIHJpZ2h0OiBCaWdTb3VyY2UpOiB1bmtub3duIHtcbiAgICAgICAgaWYgKGlzQmlnU291cmNlKGxlZnQpICYmIGlzQmlnU291cmNlKHJpZ2h0KSkge1xuICAgICAgICAgICAgcmV0dXJuIHdyYXBEZWNpbWFsT3BlcmFuZChsZWZ0KS5tdWwocmlnaHQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgcHVibGljIG5vdChsZWZ0PzogYm9vbGVhbik6IGJvb2xlYW4gfCB1bmRlZmluZWQge1xuICAgICAgICByZXR1cm4gbGVmdCAhPSB1bmRlZmluZWQgPyAhbGVmdCA6IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBwdWJsaWMgbm90ZXEobGVmdDogQmlnU291cmNlLCByaWdodDogQmlnU291cmNlKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAhdGhpcy5lcShsZWZ0LCByaWdodCk7XG4gICAgfVxuXG4gICAgcHVibGljIG9yKGxlZnQ6IGJvb2xlYW4gfCB1bmRlZmluZWQsIHJpZ2h0OiBib29sZWFuIHwgdW5kZWZpbmVkKTogYm9vbGVhbiB8IHVuZGVmaW5lZCB7XG4gICAgICAgIGlmICh0eXBlb2YgbGVmdCA9PSBcImJvb2xlYW5cIiB8fCB0eXBlb2YgcmlnaHQgPT0gXCJib29sZWFuXCIpIHtcbiAgICAgICAgICAgIHJldHVybiBsZWZ0IHx8IHJpZ2h0O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgcHVibGljIHJvdW5kKHZhbHVlOiBCaWdTb3VyY2UsIGZyYWN0aW9uRGlnaXRzPzogbnVtYmVyKTogQmlnIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgaWYgKGlzQmlnU291cmNlKHZhbHVlKSkge1xuICAgICAgICAgICAgcmV0dXJuIHdyYXBEZWNpbWFsT3BlcmFuZCh2YWx1ZSkucm91bmQoZnJhY3Rpb25EaWdpdHMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgcHVibGljIGZsb29yKHZhbHVlOiBCaWdTb3VyY2UpOiBCaWcgfCB1bmRlZmluZWQge1xuICAgICAgICBpZiAoaXNCaWdTb3VyY2UodmFsdWUpKSB7XG4gICAgICAgICAgICByZXR1cm4gd3JhcERlY2ltYWxPcGVyYW5kKHdyYXBEZWNpbWFsT3BlcmFuZCh2YWx1ZSkucm91bmQodW5kZWZpbmVkLCAwKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3VtKGxlZnQ6IEJpZ1NvdXJjZSwgcmlnaHQ6IEJpZ1NvdXJjZSk6IEJpZyB8IHVuZGVmaW5lZCB7XG4gICAgICAgIGlmICghaXNCaWdPck51bWJlcihsZWZ0KSAmJiAhaXNCaWdPck51bWJlcihyaWdodCkpIHtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXNCaWdTb3VyY2UobGVmdCkgJiYgaXNCaWdTb3VyY2UocmlnaHQpKSB7XG4gICAgICAgICAgICByZXR1cm4gd3JhcERlY2ltYWxPcGVyYW5kKGxlZnQpLmFkZChyaWdodCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXNCaWdTb3VyY2UobGVmdCkpIHtcbiAgICAgICAgICAgIHJldHVybiB3cmFwRGVjaW1hbE9wZXJhbmQobGVmdCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXNCaWdTb3VyY2UocmlnaHQpKSB7XG4gICAgICAgICAgICByZXR1cm4gd3JhcERlY2ltYWxPcGVyYW5kKHJpZ2h0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgcHVibGljIGFicyhhcmd1bWVudDogQmlnU291cmNlKTogQmlnIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgaWYgKGlzQmlnU291cmNlKGFyZ3VtZW50KSkge1xuICAgICAgICAgICAgcmV0dXJuIHdyYXBEZWNpbWFsT3BlcmFuZChhcmd1bWVudCkuYWJzKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBwdWJsaWMgeGFicyhhcmd1bWVudDogQmlnU291cmNlKTogQmlnIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgaWYgKGlzQmlnU291cmNlKGFyZ3VtZW50KSkge1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSB3cmFwRGVjaW1hbE9wZXJhbmQoYXJndW1lbnQpO1xuICAgICAgICAgICAgcmV0dXJuIHZhbHVlLmx0KDApID8gbmV3IEJpZygwKSA6IHZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgcHVibGljIGxlbmd0aChhcmd1bWVudDogc3RyaW5nIHwgdW5kZWZpbmVkIHwgbnVsbCk6IG51bWJlciB8IHVuZGVmaW5lZCB7XG4gICAgICAgIGlmICh0eXBlb2YgYXJndW1lbnQgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIHJldHVybiBhcmd1bWVudC5sZW5ndGg7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZXhpc3RzKHZhbHVlU2VsZWN0b3I6IChwYXRoOiBzdHJpbmcpID0+IHVua25vd24sIHBhdGg6IHN0cmluZyk6IGJvb2xlYW4gfCB1bmRlZmluZWQge1xuICAgICAgICBpZiAodmFsdWVTZWxlY3RvciA9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdmFsdWUgPSB2YWx1ZVNlbGVjdG9yKHBhdGgpO1xuICAgICAgICByZXR1cm4gdmFsdWUgIT0gdW5kZWZpbmVkICYmIHZhbHVlICE9IFwiXCI7XG4gICAgfVxuXG4gICAgcHVibGljIGNvbnZlcnRUb0RlY2ltYWwoYXJndW1lbnQ6IEJpZ1NvdXJjZSB8IHN0cmluZyB8IHVuZGVmaW5lZCk6IEJpZyB8IHVuZGVmaW5lZCB7XG4gICAgICAgIHJldHVybiB3cmFwRGVjaW1hbE9wZXJhbmQoYXJndW1lbnQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBjb252ZXJ0VG9TdHJpbmcoYXJndW1lbnQ6IEJpZ1NvdXJjZSB8IHVuZGVmaW5lZCB8IG51bGwpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgICAgICBpZiAodHlwZW9mIGFyZ3VtZW50ID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICByZXR1cm4gYXJndW1lbnQ7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZW9mIGFyZ3VtZW50ID09PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICByZXR1cm4gYXJndW1lbnQudG9TdHJpbmcoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChhcmd1bWVudCBpbnN0YW5jZW9mIEJpZykge1xuICAgICAgICAgICAgcmV0dXJuIGFyZ3VtZW50LnRvU3RyaW5nKCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIHB1YmxpYyByZWdleE1hdGNoKHBhdHRlcm46IHN0cmluZyB8IHVuZGVmaW5lZCwgdmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZCk6IGJvb2xlYW4gfCB1bmRlZmluZWQge1xuICAgICAgICBpZiAocGF0dGVybiA9PSB1bmRlZmluZWQgfHwgdmFsdWUgPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgUmVnRXhwKHBhdHRlcm4pLnRlc3QodmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgcHVibGljIG9uZW9mKHZhbHVlczogQXJyYXk8c3RyaW5nIHwgbnVtYmVyIHwgQmlnPiwgdmFsdWU6IHN0cmluZyB8IG51bWJlciB8IEJpZyk6IGJvb2xlYW4gfCB1bmRlZmluZWQge1xuICAgICAgICBpZiAodmFsdWVzID09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWVzLmluZGV4T2YodmFsdWUpICE9PSAtMTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpc0JpZ09yTnVtYmVyKHZhbHVlKSkge1xuICAgICAgICAgICAgY29uc3QgdmFsdWVBc0JpZyA9IG5ldyBCaWcodmFsdWUpO1xuICAgICAgICAgICAgcmV0dXJuIHZhbHVlcy5zb21lKGl0ZW0gPT4gaXNCaWdPck51bWJlcihpdGVtKSAmJiB2YWx1ZUFzQmlnLmVxKGl0ZW0pKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3Vic3RyaW5nKFxuICAgICAgICBzdHI6IHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgICAgICAgc3RhcnQ6IG51bWJlciB8IHVuZGVmaW5lZCxcbiAgICAgICAgbGVuZ3RoOiBudW1iZXIgfCB1bmRlZmluZWRcbiAgICApOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgICAgICBpZiAoc3RyID09IHVuZGVmaW5lZCB8fCBzdGFydCA9PSB1bmRlZmluZWQgfHwgbGVuZ3RoID09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICBpZiAobGVuZ3RoIDw9IDApIHtcbiAgICAgICAgICAgIHJldHVybiBcIlwiO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGVuZCA9IHN0YXJ0ICsgbGVuZ3RoO1xuXG4gICAgICAgIHJldHVybiBzdHIuc3Vic3RyaW5nKHN0YXJ0LCBlbmQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBkYXRlTm93KCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgICAgIHJldHVybiBuZXcgRGF0ZSgpLnRvTG9jYWxlRGF0ZVN0cmluZyhcInJ1LVJVXCIpO1xuICAgIH1cbn1cbiJdfQ==
|
|
@@ -10,11 +10,12 @@ var _ModelPath = require("./ModelPath");
|
|
|
10
10
|
function buildIterationSequence(modelPath) {
|
|
11
11
|
const result = [];
|
|
12
12
|
const tokens = modelPath.getPathPartsAsArray();
|
|
13
|
+
const createPathFunc = modelPath.isAbsolute() ? _ModelPath.createAbsoluteFromTokens : _ModelPath.createRelativeFromTokens;
|
|
13
14
|
|
|
14
15
|
for (let i = 0; i < tokens.length; i++) {
|
|
15
16
|
if (tokens[i] === _ModelPath.PathTokens.each) {
|
|
16
17
|
result.push({
|
|
17
|
-
iterable: (
|
|
18
|
+
iterable: createPathFunc(tokens.slice(0, i)),
|
|
18
19
|
suffix: (0, _ModelPath.createRelativeFromTokens)(tokens.slice(i + 1))
|
|
19
20
|
});
|
|
20
21
|
}
|
|
@@ -22,4 +23,4 @@ function buildIterationSequence(modelPath) {
|
|
|
22
23
|
|
|
23
24
|
return result;
|
|
24
25
|
}
|
|
25
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
26
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL0NvbW1vbi9Nb2RlbFBhdGgvQnVpbGRJdGVyYXRpb25TZXF1ZW5jZS50cyJdLCJuYW1lcyI6WyJidWlsZEl0ZXJhdGlvblNlcXVlbmNlIiwibW9kZWxQYXRoIiwicmVzdWx0IiwidG9rZW5zIiwiZ2V0UGF0aFBhcnRzQXNBcnJheSIsImNyZWF0ZVBhdGhGdW5jIiwiaXNBYnNvbHV0ZSIsImNyZWF0ZUFic29sdXRlRnJvbVRva2VucyIsImNyZWF0ZVJlbGF0aXZlRnJvbVRva2VucyIsImkiLCJsZW5ndGgiLCJQYXRoVG9rZW5zIiwiZWFjaCIsInB1c2giLCJpdGVyYWJsZSIsInNsaWNlIiwic3VmZml4Il0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQUE7O0FBYU8sU0FBU0Esc0JBQVQsQ0FDSEMsU0FERyxFQUU4QjtBQUNqQyxRQUFNQyxNQUF5QyxHQUFHLEVBQWxEO0FBQ0EsUUFBTUMsTUFBTSxHQUFHRixTQUFTLENBQUNHLG1CQUFWLEVBQWY7QUFDQSxRQUFNQyxjQUFjLEdBQUdKLFNBQVMsQ0FBQ0ssVUFBVixLQUF5QkMsbUNBQXpCLEdBQW9EQyxtQ0FBM0U7O0FBQ0EsT0FBSyxJQUFJQyxDQUFDLEdBQUcsQ0FBYixFQUFnQkEsQ0FBQyxHQUFHTixNQUFNLENBQUNPLE1BQTNCLEVBQW1DRCxDQUFDLEVBQXBDLEVBQXdDO0FBQ3BDLFFBQUlOLE1BQU0sQ0FBQ00sQ0FBRCxDQUFOLEtBQWNFLHNCQUFXQyxJQUE3QixFQUFtQztBQUMvQlYsTUFBQUEsTUFBTSxDQUFDVyxJQUFQLENBQVk7QUFDUkMsUUFBQUEsUUFBUSxFQUFFVCxjQUFjLENBQUNGLE1BQU0sQ0FBQ1ksS0FBUCxDQUFhLENBQWIsRUFBZ0JOLENBQWhCLENBQUQsQ0FEaEI7QUFFUk8sUUFBQUEsTUFBTSxFQUFFLHlDQUF5QmIsTUFBTSxDQUFDWSxLQUFQLENBQWFOLENBQUMsR0FBRyxDQUFqQixDQUF6QjtBQUZBLE9BQVo7QUFJSDtBQUNKOztBQUNELFNBQU9QLE1BQVA7QUFDSCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgY3JlYXRlQWJzb2x1dGVGcm9tVG9rZW5zLFxuICAgIGNyZWF0ZVJlbGF0aXZlRnJvbVRva2VucyxcbiAgICBNb2RlbFBhdGgsXG4gICAgUGF0aFRva2VucyxcbiAgICBSZWxhdGl2ZU1vZGVsUGF0aCxcbn0gZnJvbSBcIi4vTW9kZWxQYXRoXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSXRlcmF0aW9uRW50cnk8VE1vZGVsUGF0aCBleHRlbmRzIE1vZGVsUGF0aD4ge1xuICAgIGl0ZXJhYmxlOiBUTW9kZWxQYXRoO1xuICAgIHN1ZmZpeDogUmVsYXRpdmVNb2RlbFBhdGg7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBidWlsZEl0ZXJhdGlvblNlcXVlbmNlPFRNb2RlbFBhdGggZXh0ZW5kcyBNb2RlbFBhdGg+KFxuICAgIG1vZGVsUGF0aDogVE1vZGVsUGF0aFxuKTogQXJyYXk8SXRlcmF0aW9uRW50cnk8VE1vZGVsUGF0aD4+IHtcbiAgICBjb25zdCByZXN1bHQ6IEFycmF5PEl0ZXJhdGlvbkVudHJ5PFRNb2RlbFBhdGg+PiA9IFtdO1xuICAgIGNvbnN0IHRva2VucyA9IG1vZGVsUGF0aC5nZXRQYXRoUGFydHNBc0FycmF5KCk7XG4gICAgY29uc3QgY3JlYXRlUGF0aEZ1bmMgPSBtb2RlbFBhdGguaXNBYnNvbHV0ZSgpID8gY3JlYXRlQWJzb2x1dGVGcm9tVG9rZW5zIDogY3JlYXRlUmVsYXRpdmVGcm9tVG9rZW5zO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdG9rZW5zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmICh0b2tlbnNbaV0gPT09IFBhdGhUb2tlbnMuZWFjaCkge1xuICAgICAgICAgICAgcmVzdWx0LnB1c2goe1xuICAgICAgICAgICAgICAgIGl0ZXJhYmxlOiBjcmVhdGVQYXRoRnVuYyh0b2tlbnMuc2xpY2UoMCwgaSkpIGFzIFRNb2RlbFBhdGgsXG4gICAgICAgICAgICAgICAgc3VmZml4OiBjcmVhdGVSZWxhdGl2ZUZyb21Ub2tlbnModG9rZW5zLnNsaWNlKGkgKyAxKSksXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xufVxuIl19
|
|
@@ -4,7 +4,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.PathTokens = exports.ModelPathImpl = exports.AbsoluteModelFieldPath = void 0;
|
|
7
|
-
exports.
|
|
7
|
+
exports.convertToAbsoluteModelPath = convertToAbsoluteModelPath;
|
|
8
8
|
exports.convertToLegacyPath = convertToLegacyPath;
|
|
9
9
|
exports.createAbsolute = createAbsolute;
|
|
10
10
|
exports.createAbsoluteFromMask = createAbsoluteFromMask;
|
|
@@ -23,6 +23,8 @@ var _IterableUtils = require("../IterableUtils");
|
|
|
23
23
|
|
|
24
24
|
var _TypingUtils = require("../TypingUtils");
|
|
25
25
|
|
|
26
|
+
var _hashUtils = require("../hashUtils");
|
|
27
|
+
|
|
26
28
|
var _EachCurrentCollision = require("./EachCurrentCollision");
|
|
27
29
|
|
|
28
30
|
var _ModelPathBuilder = require("./ModelPathBuilder");
|
|
@@ -59,7 +61,7 @@ function convertToLegacyPath(path) {
|
|
|
59
61
|
return isModelPath(path) ? path.toLegacyPath() : path;
|
|
60
62
|
}
|
|
61
63
|
|
|
62
|
-
function
|
|
64
|
+
function convertToAbsoluteModelPath(path) {
|
|
63
65
|
return isModelPath(path) ? path : createAbsoluteFromMask(path, PathTokens.each);
|
|
64
66
|
}
|
|
65
67
|
|
|
@@ -186,6 +188,10 @@ class AbsoluteModelFieldPath {
|
|
|
186
188
|
this.field = fieldName;
|
|
187
189
|
}
|
|
188
190
|
|
|
191
|
+
getHash() {
|
|
192
|
+
return this.path.getHash() + (0, _hashUtils.getSimpleHashByString)(this.field);
|
|
193
|
+
}
|
|
194
|
+
|
|
189
195
|
isEquals(modelPath, eachCurrentCollision = _EachCurrentCollision.EachCurrentCollision.AreSame) {
|
|
190
196
|
return this.path.isEquals(modelPath.path, eachCurrentCollision) && this.field === modelPath.field;
|
|
191
197
|
}
|
|
@@ -282,7 +288,6 @@ class ModelPathImpl {
|
|
|
282
288
|
|
|
283
289
|
isResolved() {
|
|
284
290
|
return isAllTokensResolved(this.tokens);
|
|
285
|
-
return this.tokens.every(PathTokens.isSimpleToken);
|
|
286
291
|
}
|
|
287
292
|
|
|
288
293
|
resolveAll(instance) {
|
|
@@ -315,6 +320,12 @@ class ModelPathImpl {
|
|
|
315
320
|
return this.tokens.slice(0, lastIterationIndex);
|
|
316
321
|
}
|
|
317
322
|
|
|
323
|
+
isEndsWithIteration() {
|
|
324
|
+
const lastItem = _IterableUtils.IterUtils.last(this.tokens);
|
|
325
|
+
|
|
326
|
+
return lastItem == PathTokens.each;
|
|
327
|
+
}
|
|
328
|
+
|
|
318
329
|
isAbsolute() {
|
|
319
330
|
return this.absolute;
|
|
320
331
|
}
|
|
@@ -595,4 +606,4 @@ class ModelPathImpl {
|
|
|
595
606
|
}
|
|
596
607
|
|
|
597
608
|
exports.ModelPathImpl = ModelPathImpl;
|
|
598
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL0NvbW1vbi9Nb2RlbFBhdGgvTW9kZWxQYXRoLnRzIl0sIm5hbWVzIjpbIkVhY2hTeW1ib2wiLCJTeW1ib2wiLCJmb3IiLCJDdXJyZW50U3ltYm9sIiwiUGF0aFRva2VucyIsImlzTXVsdGlUb2tlbiIsInBhcnQiLCJlYWNoIiwiY3VycmVudCIsImlzU2ltcGxlVG9rZW4iLCJpc0luc3RhbmNlVG9rZW4iLCJ0ZXN0IiwiaXNNb2RlbFBhdGgiLCJwYXRoIiwiTW9kZWxQYXRoSW1wbCIsImNvbnZlcnRUb0xlZ2FjeVBhdGgiLCJ0b0xlZ2FjeVBhdGgiLCJjb252ZXJ0VG9BYnNvbHV0TW9kZWxQYXRoIiwiY3JlYXRlQWJzb2x1dGVGcm9tTWFzayIsImVtcHR5TW9kZWxQYXRoIiwiZW1wdHlBYnNvbHV0ZU1vZGVsUGF0aCIsImNyZWF0ZU1vZGVsUGF0aCIsImFic29sdXRlIiwicGFydFBhcnRTdHJpbmdzIiwic3BsaXQiLCJlbnN1cmVQbGFpblBhdGhQYXJ0c0RvZXNOb3RDb250YWluTXVsdGlwbGljaXR5Iiwic3RhcnRzV2l0aCIsInNsaWNlIiwiY3JlYXRlRnJvbU1hc2siLCJtdWx0aXBsaWNpdHlTeW1ib2wiLCJtYXAiLCJ4IiwicGFydHMiLCJzb21lIiwiRXJyb3IiLCJjcmVhdGVBYnNvbHV0ZSIsImNyZWF0ZVJlbGF0aXZlUmVzb2x2ZWRNb2RlbFBhdGgiLCJjcmVhdGVBYnNvbHV0ZUZyb21Ub2tlbnMiLCJ0b2tlbnMiLCJjcmVhdGVBYnNvbHV0ZVJlc29sdmVkRnJvbVRva2VucyIsImNyZWF0ZVJlbGF0aXZlRnJvbVRva2VucyIsImpvaW5Nb2RlbFBhdGhzIiwicmVzdWx0UGFydHMiLCJqb2luSXRlbSIsInB1c2giLCJpc0Fic29sdXRlIiwiZ2V0UGF0aFBhcnRzQXNBcnJheSIsIkFycmF5IiwiaXNBcnJheSIsIkFic29sdXRlTW9kZWxGaWVsZFBhdGgiLCJjb25zdHJ1Y3RvciIsImZpZWxkTmFtZSIsImZpZWxkIiwiaXNFcXVhbHMiLCJtb2RlbFBhdGgiLCJlYWNoQ3VycmVudENvbGxpc2lvbiIsIkVhY2hDdXJyZW50Q29sbGlzaW9uIiwiQXJlU2FtZSIsImNyZWF0ZUZyb21TdHJpbmciLCJwYXRoV2l0aEZpZWxkTmFtZSIsImVuZHNXaXRoIiwicmVwbGFjZSIsImlzQWxsVG9rZW5zUmVzb2x2ZWQiLCJldmVyeSIsInBhdGhQYXJ0cyIsImxlZ2FjeVBhdGgiLCJmaWx0ZXIiLCJyZXNvbHZlZCIsImdldFBhdGhQYXJ0cyIsImdldFNpbXBsZVRva2Vuc1N0cmljdCIsInRva2VuIiwiZ2V0U2ltcGxlVG9rZW5zQXNBcnJheVN0cmljdCIsImpvaW5XaXRoIiwiaXNSZXNvbHZlZCIsInJlc29sdmVBbGwiLCJpbnN0YW5jZSIsImlzQ29udGFpbkl0ZXJhdGlvbiIsImlzQ29udGFpbkN1cnJlbnRJdGVyYXRpb24iLCJnZXRMYXN0TGlzdFBhdGgiLCJsYXN0SXRlcmF0aW9uSW5kZXgiLCJsYXN0SW5kZXhPZiIsInRvU3RyaW5nIiwibGVuZ3RoIiwicGF0aFBhcnRUb1N0cmluZyIsImpvaW4iLCJJdGVyYXRvciIsImZyb20iLCJJdGVyVXRpbHMiLCJ6aXAiLCJ0MSIsInQyIiwiZ2V0SGFzaCIsImhhc2giLCJjdXJyZW50U3RyIiwiQXJlRGlmZmVyZW50Iiwic3RyaW5nSW5kZXgiLCJjaGFyQ29kZUF0IiwiaXNJbmNsdWRlcyIsInRhcmdldFRva2VucyIsImkiLCJsZWZ0UGFydCIsInJpZ2h0UGFydCIsImlzRmluaXRlIiwiTnVtYmVyIiwiZ2V0SXRlcmF0aW9uUmFuayIsImlzRW1wdHkiLCJtYXRjaEZvciIsIlBhdGhNYXRjaGVyIiwibWF0Y2giLCJzcGxpdEJ5TXVsdGlwbGljaXR5IiwibGFzdFNpbXBsZVBhcnRzIiwiTW9kZWxQYXRoQnVpbGRlciIsImFwcGVuZCIsImVtcHR5IiwidG9SZXNvbHZlZFBhdGgiLCJub3JtYWxpemUiLCJyZXN1bHRUb2tlbnMiLCJwYXRoUGFydCIsInBvcCIsInRvQ3VycmVudEl0ZXJhdGlvbiIsInRvRWFjaEl0ZXJhdGlvbiIsInRvQWJzb2x1dGUiLCJnZXRBbGxQYXJlbnRQYXRocyIsInJlc3VsdCIsInNraXBMYXN0IiwidG9QYXRoIiwidHJpbUxhc3RTdGFySWZMYXN0VG9rZW4iLCJsYXN0SXRlbSIsImxhc3QiLCJ1bmRlZmluZWQiLCJnZXRQYXJlbnRQYXRoIiwiYXBwbHlJbnN0YW5jZXNEaXJ0eSIsImluc3RhbmNlcyIsImluc3RhbmNlQ291bnRlciJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQ0E7O0FBQ0E7O0FBRUE7O0FBQ0E7O0FBQ0E7O0FBR0EsTUFBTUEsVUFBVSxHQUFHQyxNQUFNLENBQUNDLEdBQVAsQ0FBVyxVQUFYLENBQW5CO0FBQ0EsTUFBTUMsYUFBYSxHQUFHRixNQUFNLENBQUNDLEdBQVAsQ0FBVyxhQUFYLENBQXRCOztBQUVPLE1BQU1FLFVBQU4sQ0FBaUI7QUFJTSxTQUFaQyxZQUFZLENBQUNDLElBQUQsRUFBZ0Y7QUFDdEcsV0FBT0EsSUFBSSxLQUFLRixVQUFVLENBQUNHLElBQXBCLElBQTRCRCxJQUFJLEtBQUtGLFVBQVUsQ0FBQ0ksT0FBdkQ7QUFDSDs7QUFFMEIsU0FBYkMsYUFBYSxDQUFDSCxJQUFELEVBQThDO0FBQ3JFLFdBQU8sT0FBT0EsSUFBUCxLQUFnQixRQUF2QjtBQUNIOztBQUU0QixTQUFmSSxlQUFlLENBQUNKLElBQUQsRUFBOEM7QUFDdkUsV0FBTyxPQUFPQSxJQUFQLEtBQWdCLFFBQWhCLElBQTRCLFNBQVNLLElBQVQsQ0FBY0wsSUFBZCxDQUFuQztBQUNIOztBQWRtQjs7O0FBQVhGLFUsQ0FDS0csSSxHQUEwQlAsVTtBQUQvQkksVSxDQUVLSSxPLEdBQWdDTCxhOztBQW1CM0MsU0FBU1MsV0FBVCxDQUFxQkMsSUFBckIsRUFBaUY7QUFDcEYsU0FBTyxPQUFPQSxJQUFQLEtBQWdCLFFBQWhCLElBQTRCQSxJQUFJLFlBQVlDLGFBQW5EO0FBQ0g7O0FBRU0sU0FBU0MsbUJBQVQsQ0FBNkJGLElBQTdCLEVBQXlFO0FBQzVFLFNBQU9ELFdBQVcs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QUFDckMsVUFBSWhFLFVBQVUsQ0FBQ0MsWUFBWCxDQUF3QmlFLEtBQXhCLEtBQWtDK0QsZUFBZSxHQUFHRCxTQUFTLENBQUNsRCxNQUFsRSxFQUEwRTtBQUFBOztBQUN0RXlDLFFBQUFBLE1BQU0sQ0FBQ1gsTUFBUCwwQkFBY29CLFNBQVMsQ0FBQ0MsZUFBRCxDQUF2Qix5RUFBNEMsMEJBQTVDO0FBQ0FBLFFBQUFBLGVBQWU7QUFDbEIsT0FIRCxNQUdPO0FBQ0hWLFFBQUFBLE1BQU0sQ0FBQ1gsTUFBUCxDQUFjMUMsS0FBZDtBQUNIO0FBQ0osS0Fic0YsQ0FjdkY7QUFDQTs7O0FBQ0EsV0FBT3FELE1BQU0sQ0FBQ0UsTUFBUCxFQUFQO0FBQ0g7O0FBRU8xQyxFQUFBQSxnQkFBZ0IsQ0FBQ2tDLFFBQUQsRUFBOEI7QUFDbEQsUUFBSSxPQUFPQSxRQUFQLEtBQW9CLFFBQXhCLEVBQWtDO0FBQzlCLGFBQU9BLFFBQVA7QUFDSDs7QUFDRCxRQUFJQSxRQUFRLEtBQUtqSCxVQUFVLENBQUNHLElBQTVCLEVBQWtDO0FBQzlCLGFBQU8sR0FBUDtBQUNIOztBQUNELFFBQUk4RyxRQUFRLEtBQUtqSCxVQUFVLENBQUNJLE9BQTVCLEVBQXFDO0FBQ2pDLGFBQU8sR0FBUDtBQUNIOztBQUNELFVBQU0sSUFBSTBCLEtBQUosQ0FBVyxnQ0FBK0IscUNBQW1CbUYsUUFBbkIsQ0FBNkIsRUFBdkUsQ0FBTjtBQUNIOztBQS9VTCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJpbmRpbmdQYXRoLCBWaWV3TW9kZWxGaWVsZE5hbWUgfSBmcm9tIFwiLi4vLi4vRW5naW5lL3NyYy9FbmdpbmUvQ29yZS9Db3JlVHlwZXNcIjtcbmltcG9ydCB7IGNvdW50LCBJdGVyVXRpbHMsIHJldmVyc2VBcnJheSB9IGZyb20gXCIuLi9JdGVyYWJsZVV0aWxzXCI7XG5pbXBvcnQgeyBlbnN1cmVBbmRHZXRTdHJpbmcsIHJlamVjdCB9IGZyb20gXCIuLi9UeXBpbmdVdGlsc1wiO1xuXG5pbXBvcnQgeyBFYWNoQ3VycmVudENvbGxpc2lvbiB9IGZyb20gXCIuL0VhY2hDdXJyZW50Q29sbGlzaW9uXCI7XG5pbXBvcnQgeyBNb2RlbFBhdGhCdWlsZGVyIH0gZnJvbSBcIi4vTW9kZWxQYXRoQnVpbGRlclwiO1xuaW1wb3J0IHsgUGF0aE1hdGNoZXIsIFBhdGhNYXRjaGluZyB9IGZyb20gXCIuL1BhdGhNYXRjaGVyXCI7XG5pbXBvcnQgeyBJRXF1YXRhYmxlIH0gZnJvbSBcIi4vSUVxdWF0YWJsZVwiO1xuXG5jb25zdCBFYWNoU3ltYm9sID0gU3ltYm9sLmZvcihcIl9fRUFDSF9fXCIpO1xuY29uc3QgQ3VycmVudFN5bWJvbCA9IFN5bWJvbC5mb3IoXCJfX0NVUlJFTlRfX1wiKTtcblxuZXhwb3J0IGNsYXNzIFBhdGhUb2tlbnMge1xuICAgIHB1YmxpYyBzdGF0aWMgZWFjaDogdHlwZW9mIEVhY2hTeW1ib2wgPSBFYWNoU3ltYm9sO1xuICAgIHB1YmxpYyBzdGF0aWMgY3VycmVudDogdHlwZW9mIEN1cnJlbnRTeW1ib2wgPSBDdXJyZW50U3ltYm9sO1xuXG4gICAgcHVibGljIHN0YXRpYyBpc011bHRpVG9rZW4ocGFydDogdW5kZWZpbmVkIHwgUGF0aFRva2VuKTogcGFydCBpcyB0eXBlb2YgRWFjaFN5bWJvbCB8IHR5cGVvZiBDdXJyZW50U3ltYm9sIHtcbiAgICAgICAgcmV0dXJuIHBhcnQgPT09IFBhdGhUb2tlbnMuZWFjaCB8fCBwYXJ0ID09PSBQYXRoVG9rZW5zLmN1cnJlbnQ7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBpc1NpbXBsZVRva2VuKHBhcnQ6IHVuZGVmaW5lZCB8IFBhdGhUb2tlbik6IHBhcnQgaXMgc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHR5cGVvZiBwYXJ0ID09PSBcInN0cmluZ1wiO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgaXNJbnN0YW5jZVRva2VuKHBhcnQ6IHVuZGVmaW5lZCB8IFBhdGhUb2tlbik6IHBhcnQgaXMgc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHR5cGVvZiBwYXJ0ID09PSBcInN0cmluZ1wiICYmIC9eXFxkKyQvaS50ZXN0KHBhcnQpO1xuICAgIH1cbn1cblxuZXhwb3J0IHR5cGUgU2ltcGxlUGF0aFRva2VuID0gc3RyaW5nO1xuXG5leHBvcnQgdHlwZSBQYXRoVG9rZW4gPSBTaW1wbGVQYXRoVG9rZW4gfCB0eXBlb2YgRWFjaFN5bWJvbCB8IHR5cGVvZiBDdXJyZW50U3ltYm9sO1xuXG5leHBvcnQgZnVuY3Rpb24gaXNNb2RlbFBhdGgocGF0aDogQmluZGluZ1BhdGggfCBNb2RlbFBhdGggfCB1bmtub3duKTogcGF0aCBpcyBNb2RlbFBhdGgge1xuICAgIHJldHVybiB0eXBlb2YgcGF0aCAhPT0gXCJzdHJpbmdcIiAmJiBwYXRoIGluc3RhbmNlb2YgTW9kZWxQYXRoSW1wbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbnZlcnRUb0xlZ2FjeVBhdGgocGF0aDogQmluZGluZ1BhdGggfCBNb2RlbFBhdGgpOiBCaW5kaW5nUGF0aCB7XG4gICAgcmV0dXJuIGlzTW9kZWxQYXRoKHBhdGgpID8gcGF0aC50b0xlZ2FjeVBhdGgoKSA6IHBhdGg7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb252ZXJ0VG9BYnNvbHV0TW9kZWxQYXRoPFIgZXh0ZW5kcyBib29sZWFuLCBBIGV4dGVuZHMgYm9vbGVhbj4oXG4gICAgcGF0aDogQmluZGluZ1BhdGggfCBJTW9kZWxQYXRoPFIsIEE+XG4pOiBJTW9kZWxQYXRoPFIsIHRydWU+O1xuZXhwb3J0IGZ1bmN0aW9uIGNvbnZlcnRUb0Fic29sdXRNb2RlbFBhdGgocGF0aDogQmluZGluZ1BhdGggfCBBYnNvbHV0ZU1vZGVsUGF0aCk6IEFic29sdXRlTW9kZWxQYXRoIHtcbiAgICByZXR1cm4gaXNNb2RlbFBhdGgocGF0aCkgPyBwYXRoIDogY3JlYXRlQWJzb2x1dGVGcm9tTWFzayhwYXRoLCBQYXRoVG9rZW5zLmVhY2gpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZW1wdHlNb2RlbFBhdGgoKTogUmVsYXRpdmVSZXNvbHZlZE1vZGVsUGF0aCB7XG4gICAgcmV0dXJuIG5ldyBNb2RlbFBhdGhJbXBsPHRydWUsIGZhbHNlPihbXSwgZmFsc2UpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZW1wdHlBYnNvbHV0ZU1vZGVsUGF0aCgpOiBBYnNvbHV0ZVJlc29sdmVkTW9kZWxQYXRoIHtcbiAgICByZXR1cm4gbmV3IE1vZGVsUGF0aEltcGw8dHJ1ZSwgdHJ1ZT4oW10sIHRydWUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlTW9kZWxQYXRoKHBhdGg6IHN0cmluZywgYWJzb2x1dGU6IHRydWUpOiBBYnNvbHV0ZVJlc29sdmVkTW9kZWxQYXRoO1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZU1vZGVsUGF0aChwYXRoOiBzdHJpbmcsIGFic29sdXRlOiBmYWxzZSk6IFJlbGF0aXZlUmVzb2x2ZWRNb2RlbFBhdGg7XG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlTW9kZWxQYXRoKHBhdGg6IHN0cmluZywgYWJzb2x1dGU6IFwiYXV0b1wiKTogUmVzb2x2ZWRNb2RlbFBhdGg7XG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlTW9kZWxQYXRoKHBhdGg6IHN0cmluZywgYWJzb2x1dGU6IGJvb2xlYW4gfCBcImF1dG9cIik6IFJlc29sdmVkTW9kZWxQYXRoIHtcbiAgICBjb25zdCBwYXJ0UGFydFN0cmluZ3MgPSBwYXRoLnNwbGl0KFwiL1wiKTtcbiAgICBlbnN1cmVQbGFpblBhdGhQYXJ0c0RvZXNOb3RDb250YWluTXVsdGlwbGljaXR5KHBhcnRQYXJ0U3RyaW5ncyk7XG4gICAgaWYgKGFic29sdXRlID09PSBcImF1dG9cIikge1xuICAgICAgICBpZiAocGF0aC5zdGFydHNXaXRoKFwiL1wiKSkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBNb2RlbFBhdGhJbXBsPHRydWUsIHRydWU+KHBhcnRQYXJ0U3RyaW5ncy5zbGljZSgxKSwgdHJ1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IE1vZGVsUGF0aEltcGw8dHJ1ZSwgZmFsc2U+KHBhcnRQYXJ0U3RyaW5ncywgZmFsc2UpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChhYnNvbHV0ZSAmJiBwYXRoLnN0YXJ0c1dpdGgoXCIvXCIpKSB7XG4gICAgICAgIHJldHVybiBuZXcgTW9kZWxQYXRoSW1wbDx0cnVlLCB0cnVlPihwYXJ0UGFydFN0cmluZ3Muc2xpY2UoMSksIHRydWUpO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IE1vZGVsUGF0aEltcGw8dHJ1ZSwgYm9vbGVhbj4ocGFydFBhcnRTdHJpbmdzLCBhYnNvbHV0ZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVGcm9tTWFzayhwYXRoOiBzdHJpbmcsIGFic29sdXRlOiB0cnVlLCBtdWx0aXBsaWNpdHlTeW1ib2w6IFBhdGhUb2tlbik6IEFic29sdXRlTW9kZWxQYXRoO1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUZyb21NYXNrKHBhdGg6IHN0cmluZywgYWJzb2x1dGU6IGZhbHNlLCBtdWx0aXBsaWNpdHlTeW1ib2w6IFBhdGhUb2tlbik6IFJlc29sdmVkTW9kZWxQYXRoO1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUZyb21NYXNrKHBhdGg6IHN0cmluZywgYWJzb2x1dGU6IFwiYXV0b1wiLCBtdWx0aXBsaWNpdHlTeW1ib2w6IFBhdGhUb2tlbik6IE1vZGVsUGF0aDtcbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVGcm9tTWFzayhwYXRoOiBzdHJpbmcsIGFic29sdXRlOiBib29sZWFuIHwgXCJhdXRvXCIsIG11bHRpcGxpY2l0eVN5bWJvbDogUGF0aFRva2VuKTogTW9kZWxQYXRoIHtcbiAgICBjb25zdCBwYXJ0UGFydFN0cmluZ3MgPSBwYXRoLnNwbGl0KFwiL1wiKS5tYXAoeCA9PiAoeCA9PT0gXCIqXCIgPyBtdWx0aXBsaWNpdHlTeW1ib2wgOiB4KSk7XG4gICAgaWYgKGFic29sdXRlID09PSBcImF1dG9cIikge1xuICAgICAgICBpZiAocGF0aC5zdGFydHNXaXRoKFwiL1wiKSkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBNb2RlbFBhdGhJbXBsKHBhcnRQYXJ0U3RyaW5ncy5zbGljZSgxKSwgdHJ1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IE1vZGVsUGF0aEltcGwocGFydFBhcnRTdHJpbmdzLCBmYWxzZSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKGFic29sdXRlICYmIHBhdGguc3RhcnRzV2l0aChcIi9cIikpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBNb2RlbFBhdGhJbXBsKHBhcnRQYXJ0U3RyaW5ncy5zbGljZSgxKSwgdHJ1ZSk7XG4gICAgfVxuICAgIHJldHVybiBuZXcgTW9kZWxQYXRoSW1wbChwYXJ0UGFydFN0cmluZ3MsIGFic29sdXRlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUFic29sdXRlRnJvbU1hc2socGF0aDogc3RyaW5nLCBtdWx0aXBsaWNpdHlTeW1ib2w6IFBhdGhUb2tlbik6IEFic29sdXRlTW9kZWxQYXRoIHtcbiAgICBjb25zdCBwYXJ0UGFydFN0cmluZ3MgPSBwYXRoLnNwbGl0KFwiL1wiKS5tYXAoeCA9PiAoeCA9PT0gXCIqXCIgPyBtdWx0aXBsaWNpdHlTeW1ib2wgOiB4KSk7XG4gICAgaWYgKHBhdGguc3RhcnRzV2l0aChcIi9cIikpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBNb2RlbFBhdGhJbXBsKHBhcnRQYXJ0U3RyaW5ncy5zbGljZSgxKSwgdHJ1ZSk7XG4gICAgfVxuICAgIHJldHVybiBuZXcgTW9kZWxQYXRoSW1wbChwYXJ0UGFydFN0cmluZ3MsIHRydWUpO1xufVxuXG5mdW5jdGlvbiBlbnN1cmVQbGFpblBhdGhQYXJ0c0RvZXNOb3RDb250YWluTXVsdGlwbGljaXR5KHBhcnRzOiBzdHJpbmdbXSk6IHZvaWQge1xuICAgIGlmIChwYXJ0cy5zb21lKHggPT4geCA9PT0gXCIqXCIpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIlBhdGggbXVzdCBub3QgY29udGFpbiAqIHN5bWJvbFwiKTtcbiAgICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVBYnNvbHV0ZShwYXRoOiBzdHJpbmcpOiBBYnNvbHV0ZVJlc29sdmVkTW9kZWxQYXRoIHtcbiAgICBjb25zdCBwYXJ0UGFydFN0cmluZ3MgPSBwYXRoLnNwbGl0KFwiL1wiKTtcbiAgICBlbnN1cmVQbGFpblBhdGhQYXJ0c0RvZXNOb3RDb250YWluTXVsdGlwbGljaXR5KHBhcnRQYXJ0U3RyaW5ncyk7XG4gICAgaWYgKHBhdGguc3RhcnRzV2l0aChcIi9cIikpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBNb2RlbFBhdGhJbXBsPHRydWUsIHRydWU+KHBhcnRQYXJ0U3RyaW5ncy5zbGljZSgxKSwgdHJ1ZSk7XG4gICAgfVxuICAgIHJldHVybiBuZXcgTW9kZWxQYXRoSW1wbDx0cnVlLCB0cnVlPihwYXJ0UGFydFN0cmluZ3MsIHRydWUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUmVsYXRpdmVSZXNvbHZlZE1vZGVsUGF0aChwYXRoOiBzdHJpbmcpOiBSZWxhdGl2ZVJlc29sdmVkTW9kZWxQYXRoIHtcbiAgICBjb25zdCBwYXJ0UGFydFN0cmluZ3MgPSBwYXRoLnNwbGl0KFwiL1wiKTtcbiAgICBlbnN1cmVQbGFpblBhdGhQYXJ0c0RvZXNOb3RDb250YWluTXVsdGlwbGljaXR5KHBhcnRQYXJ0U3RyaW5ncyk7XG4gICAgcmV0dXJuIG5ldyBNb2RlbFBhdGhJbXBsPHRydWUsIGZhbHNlPihwYXJ0UGFydFN0cmluZ3MsIGZhbHNlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUFic29sdXRlRnJvbVRva2Vucyh0b2tlbnM6IFBhdGhUb2tlbltdKTogQWJzb2x1dGVNb2RlbFBhdGgge1xuICAgIHJldHVybiBuZXcgTW9kZWxQYXRoSW1wbDxmYWxzZSwgdHJ1ZT4odG9rZW5zLCB0cnVlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUFic29sdXRlUmVzb2x2ZWRGcm9tVG9rZW5zKHRva2Vuczogc3RyaW5nW10pOiBBYnNvbHV0ZVJlc29sdmVkTW9kZWxQYXRoIHtcbiAgICBlbnN1cmVQbGFpblBhdGhQYXJ0c0RvZXNOb3RDb250YWluTXVsdGlwbGljaXR5KHRva2Vucyk7XG4gICAgcmV0dXJuIG5ldyBNb2RlbFBhdGhJbXBsPHRydWUsIHRydWU+KHRva2VucywgdHJ1ZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVSZWxhdGl2ZUZyb21Ub2tlbnModG9rZW5zOiByZWFkb25seSBzdHJpbmdbXSk6IFJlbGF0aXZlUmVzb2x2ZWRNb2RlbFBhdGg7XG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUmVsYXRpdmVGcm9tVG9rZW5zKHRva2VuczogcmVhZG9ubHkgUGF0aFRva2VuW10pOiBSZWxhdGl2ZU1vZGVsUGF0aDtcbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVSZWxhdGl2ZUZyb21Ub2tlbnModG9rZW5zOiByZWFkb25seSBQYXRoVG9rZW5bXSk6IFJlbGF0aXZlTW9kZWxQYXRoIHtcbiAgICByZXR1cm4gbmV3IE1vZGVsUGF0aEltcGw8ZmFsc2UsIGZhbHNlPih0b2tlbnMsIGZhbHNlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGpvaW5Nb2RlbFBhdGhzKC4uLnBhcnRzOiBBcnJheTxNb2RlbFBhdGggfCBQYXRoVG9rZW4gfCBQYXRoVG9rZW5bXT4pOiBNb2RlbFBhdGgge1xuICAgIGxldCBhYnNvbHV0ZSA9IGZhbHNlO1xuICAgIGxldCByZXN1bHRQYXJ0czogUGF0aFRva2VuW10gPSBbXTtcbiAgICBmb3IgKGNvbnN0IGpvaW5JdGVtIG9mIHBhcnRzKSB7XG4gICAgICAgIGlmICh0eXBlb2Ygam9pbkl0ZW0gPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIHJlc3VsdFBhcnRzLnB1c2goam9pbkl0ZW0pO1xuICAgICAgICB9IGVsc2UgaWYgKGlzTW9kZWxQYXRoKGpvaW5JdGVtKSkge1xuICAgICAgICAgICAgaWYgKGpvaW5JdGVtLmlzQWJzb2x1dGUoKSkge1xuICAgICAgICAgICAgICAgIGFic29sdXRlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICByZXN1bHRQYXJ0cyA9IFsuLi5qb2luSXRlbS5nZXRQYXRoUGFydHNBc0FycmF5KCldO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXN1bHRQYXJ0cy5wdXNoKC4uLmpvaW5JdGVtLmdldFBhdGhQYXJ0c0FzQXJyYXkoKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShqb2luSXRlbSkpIHtcbiAgICAgICAgICAgIHJlc3VsdFBhcnRzLnB1c2goLi4uam9pbkl0ZW0pO1xuICAgICAgICB9IGVsc2UgaWYgKFBhdGhUb2tlbnMuaXNNdWx0aVRva2VuKGpvaW5JdGVtKSkge1xuICAgICAgICAgICAgcmVzdWx0UGFydHMucHVzaChqb2luSXRlbSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IE1vZGVsUGF0aEltcGwocmVzdWx0UGFydHMsIGFic29sdXRlKTtcbn1cblxuZXhwb3J0IGNsYXNzIEFic29sdXRlTW9kZWxGaWVsZFBhdGgge1xuICAgIHB1YmxpYyByZWFkb25seSBwYXRoOiBBYnNvbHV0ZU1vZGVsUGF0aDtcbiAgICBwdWJsaWMgcmVhZG9ubHkgZmllbGQ6IFZpZXdNb2RlbEZpZWxkTmFtZSB8IFwiJGVycm9yQ291bnRcIiB8IFwiJHdhcm5pbmdDb3VudFwiO1xuXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKHBhdGg6IEFic29sdXRlTW9kZWxQYXRoLCBmaWVsZE5hbWU6IFZpZXdNb2RlbEZpZWxkTmFtZSB8IFwiJGVycm9yQ291bnRcIiB8IFwiJHdhcm5pbmdDb3VudFwiKSB7XG4gICAgICAgIHRoaXMucGF0aCA9IHBhdGg7XG4gICAgICAgIHRoaXMuZmllbGQgPSBmaWVsZE5hbWU7XG4gICAgfVxuXG4gICAgcHVibGljIGlzRXF1YWxzKFxuICAgICAgICBtb2RlbFBhdGg6IEFic29sdXRlTW9kZWxGaWVsZFBhdGgsXG4gICAgICAgIGVhY2hDdXJyZW50Q29sbGlzaW9uOiBFYWNoQ3VycmVudENvbGxpc2lvbiA9IEVhY2hDdXJyZW50Q29sbGlzaW9uLkFyZVNhbWVcbiAgICApOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucGF0aC5pc0VxdWFscyhtb2RlbFBhdGgucGF0aCwgZWFjaEN1cnJlbnRDb2xsaXNpb24pICYmIHRoaXMuZmllbGQgPT09IG1vZGVsUGF0aC5maWVsZDtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGNyZWF0ZUZyb21TdHJpbmcocGF0aFdpdGhGaWVsZE5hbWU6IHN0cmluZyk6IEFic29sdXRlTW9kZWxGaWVsZFBhdGgge1xuICAgICAgICBpZiAocGF0aFdpdGhGaWVsZE5hbWUuZW5kc1dpdGgoXCIuJGVycm9yQ291bnRcIikpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgQWJzb2x1dGVNb2RlbEZpZWxkUGF0aChcbiAgICAgICAgICAgICAgICBjcmVhdGVBYnNvbHV0ZShwYXRoV2l0aEZpZWxkTmFtZS5yZXBsYWNlKFwiLiRlcnJvckNvdW50XCIsIFwiXCIpKSxcbiAgICAgICAgICAgICAgICBcIiRlcnJvckNvdW50XCJcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBhdGhXaXRoRmllbGROYW1lLmVuZHNXaXRoKFwiLiR3YXJuaW5nQ291bnRcIikpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgQWJzb2x1dGVNb2RlbEZpZWxkUGF0aChcbiAgICAgICAgICAgICAgICBjcmVhdGVBYnNvbHV0ZShwYXRoV2l0aEZpZWxkTmFtZS5yZXBsYWNlKFwiLiR3YXJuaW5nQ291bnRcIiwgXCJcIikpLFxuICAgICAgICAgICAgICAgIFwiJHdhcm5pbmdDb3VudFwiXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXcgQWJzb2x1dGVNb2RlbEZpZWxkUGF0aChjcmVhdGVBYnNvbHV0ZShwYXRoV2l0aEZpZWxkTmFtZSksIFwidmFsdWVcIik7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBjcmVhdGVGcm9tTWFzayhwYXRoV2l0aEZpZWxkTmFtZTogc3RyaW5nLCBtdWx0aXBsaWNpdHlTeW1ib2w6IFBhdGhUb2tlbik6IEFic29sdXRlTW9kZWxGaWVsZFBhdGgge1xuICAgICAgICBpZiAocGF0aFdpdGhGaWVsZE5hbWUuZW5kc1dpdGgoXCIuJGVycm9yQ291bnRcIikpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgQWJzb2x1dGVNb2RlbEZpZWxkUGF0aChcbiAgICAgICAgICAgICAgICBjcmVhdGVBYnNvbHV0ZUZyb21NYXNrKHBhdGhXaXRoRmllbGROYW1lLnJlcGxhY2UoXCIuJGVycm9yQ291bnRcIiwgXCJcIiksIG11bHRpcGxpY2l0eVN5bWJvbCksXG4gICAgICAgICAgICAgICAgXCIkZXJyb3JDb3VudFwiXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwYXRoV2l0aEZpZWxkTmFtZS5lbmRzV2l0aChcIi4kd2FybmluZ0NvdW50XCIpKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IEFic29sdXRlTW9kZWxGaWVsZFBhdGgoXG4gICAgICAgICAgICAgICAgY3JlYXRlQWJzb2x1dGVGcm9tTWFzayhwYXRoV2l0aEZpZWxkTmFtZS5yZXBsYWNlKFwiLiR3YXJuaW5nQ291bnRcIiwgXCJcIiksIG11bHRpcGxpY2l0eVN5bWJvbCksXG4gICAgICAgICAgICAgICAgXCIkd2FybmluZ0NvdW50XCJcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBhdGhXaXRoRmllbGROYW1lLmVuZHNXaXRoKFwiLmVycm9yc0NvdW50XCIpKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IEFic29sdXRlTW9kZWxGaWVsZFBhdGgoXG4gICAgICAgICAgICAgICAgY3JlYXRlQWJzb2x1dGVGcm9tTWFzayhwYXRoV2l0aEZpZWxkTmFtZS5yZXBsYWNlKFwiLmVycm9yc0NvdW50XCIsIFwiXCIpLCBtdWx0aXBsaWNpdHlTeW1ib2wpLFxuICAgICAgICAgICAgICAgIFwiZXJyb3JzQ291bnRcIlxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocGF0aFdpdGhGaWVsZE5hbWUuZW5kc1dpdGgoXCIud2FybmluZ3NDb3VudFwiKSkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBBYnNvbHV0ZU1vZGVsRmllbGRQYXRoKFxuICAgICAgICAgICAgICAgIGNyZWF0ZUFic29sdXRlRnJvbU1hc2socGF0aFdpdGhGaWVsZE5hbWUucmVwbGFjZShcIi53YXJuaW5nc0NvdW50XCIsIFwiXCIpLCBtdWx0aXBsaWNpdHlTeW1ib2wpLFxuICAgICAgICAgICAgICAgIFwid2FybmluZ3NDb3VudFwiXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXcgQWJzb2x1dGVNb2RlbEZpZWxkUGF0aChjcmVhdGVBYnNvbHV0ZUZyb21NYXNrKHBhdGhXaXRoRmllbGROYW1lLCBtdWx0aXBsaWNpdHlTeW1ib2wpLCBcInZhbHVlXCIpO1xuICAgIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBJTW9kZWxQYXRoPFRSZXNvbHZlZCBleHRlbmRzIGJvb2xlYW4sIFRBYnNvbHV0ZSBleHRlbmRzIGJvb2xlYW4+XG4gICAgZXh0ZW5kcyBJRXF1YXRhYmxlPElNb2RlbFBhdGg8Ym9vbGVhbiwgYm9vbGVhbj4+IHtcbiAgICByZWFkb25seSByZXNvbHZlZDogVFJlc29sdmVkO1xuICAgIHJlYWRvbmx5IGFic29sdXRlOiBUQWJzb2x1dGU7XG5cbiAgICBpc0VxdWFscyhtb2RlbFBhdGg6IE1vZGVsUGF0aCwgZWFjaEN1cnJlbnRDb2xsaXNpb24/OiBFYWNoQ3VycmVudENvbGxpc2lvbik6IGJvb2xlYW47XG4gICAgZ2V0SGFzaChlYWNoQ3VycmVudENvbGxpc2lvbj86IEVhY2hDdXJyZW50Q29sbGlzaW9uKTogbnVtYmVyO1xuXG4gICAgaXNSZXNvbHZlZCgpOiB0aGlzIGlzIElNb2RlbFBhdGg8dHJ1ZSwgVEFic29sdXRlPjtcbiAgICBpc0Fic29sdXRlKCk6IHRoaXMgaXMgSU1vZGVsUGF0aDxUUmVzb2x2ZWQsIHRydWU+O1xuICAgIHRvQWJzb2x1dGUoKTogSU1vZGVsUGF0aDxUUmVzb2x2ZWQsIHRydWU+O1xuXG4gICAgam9pbldpdGgoLi4ucGF0aDogc3RyaW5nW10pOiBJTW9kZWxQYXRoPFRSZXNvbHZlZCwgVEFic29sdXRlPjtcbiAgICBqb2luV2l0aCguLi5wYXRoOiBQYXRoVG9rZW5bXSk6IElNb2RlbFBhdGg8Ym9vbGVhbiwgVEFic29sdXRlPjtcbiAgICBqb2luV2l0aCguLi5wYXRoOiBBcnJheTxSZXNvbHZlZE1vZGVsUGF0aCB8IHN0cmluZz4pOiBJTW9kZWxQYXRoPFRSZXNvbHZlZCwgVEFic29sdXRlPjtcbiAgICBqb2luV2l0aCguLi5wYXRoOiBBcnJheTxBYnNvbHV0ZVJlc29sdmVkTW9kZWxQYXRoIHwgc3RyaW5nPik6IElNb2RlbFBhdGg8VFJlc29sdmVkLCB0cnVlPjtcbiAgICBqb2luV2l0aCguLi5wYXRoOiBBcnJheTxNb2RlbFBhdGggfCBQYXRoVG9rZW4+KTogSU1vZGVsUGF0aDxib29sZWFuLCBUQWJzb2x1dGU+O1xuXG4gICAgZ2V0UGF0aFBhcnRzKCk6IEl0ZXJhYmxlPFBhdGhUb2tlblNwZWM8VFJlc29sdmVkPj47XG4gICAgZ2V0UGF0aFBhcnRzQXNBcnJheSgpOiBSZWFkb25seUFycmF5PFBhdGhUb2tlblNwZWM8VFJlc29sdmVkPj47XG4gICAgZ2V0U2ltcGxlVG9rZW5zU3RyaWN0KCk6IEl0ZXJhYmxlPFNpbXBsZVBhdGhUb2tlbj47XG4gICAgZ2V0U2ltcGxlVG9rZW5zQXNBcnJheVN0cmljdCgpOiByZWFkb25seSBTaW1wbGVQYXRoVG9rZW5bXTtcblxuICAgIHJlc29sdmVBbGwoaW5zdGFuY2U6IHN0cmluZyk6IE1vZGVsUGF0aDtcbiAgICBpc0NvbnRhaW5JdGVyYXRpb24oKTogYm9vbGVhbjtcbiAgICBpc0NvbnRhaW5DdXJyZW50SXRlcmF0aW9uKCk6IGJvb2xlYW47XG4gICAgZ2V0TGFzdExpc3RQYXRoKCk6IFBhdGhUb2tlbltdO1xuICAgIGlzSW5jbHVkZXMobW9kZWxQYXRoOiBNb2RlbFBhdGgpOiBib29sZWFuO1xuICAgIGdldEl0ZXJhdGlvblJhbmsoKTogbnVtYmVyO1xuICAgIGlzRW1wdHkoKTogYm9vbGVhbjtcbiAgICBtYXRjaEZvcihtb2RlbFBhdGg6IE1vZGVsUGF0aCk6IFBhdGhNYXRjaGluZztcbiAgICBzcGxpdEJ5TXVsdGlwbGljaXR5KCk6IEl0ZXJhYmxlPFJlc29sdmVkTW9kZWxQYXRoIHwgdHlwZW9mIEVhY2hTeW1ib2wgfCB0eXBlb2YgQ3VycmVudFN5bWJvbD47XG4gICAgbm9ybWFsaXplKCk6IElNb2RlbFBhdGg8VFJlc29sdmVkLCBUQWJzb2x1dGU+O1xuICAgIHRvQ3VycmVudEl0ZXJhdGlvbigpOiBJTW9kZWxQYXRoPFRSZXNvbHZlZCwgVEFic29sdXRlPjtcbiAgICB0b0VhY2hJdGVyYXRpb24oKTogSU1vZGVsUGF0aDxUUmVzb2x2ZWQsIFRBYnNvbHV0ZT47XG4gICAgZ2V0QWxsUGFyZW50UGF0aHMoKTogSXRlcmFibGU8TW9kZWxQYXRoPjtcbiAgICB0cmltTGFzdFN0YXJJZkxhc3RUb2tlbigpOiBJTW9kZWxQYXRoPFRSZXNvbHZlZCwgVEFic29sdXRlPjtcbiAgICBnZXRQYXJlbnRQYXRoKCk6IElNb2RlbFBhdGg8VFJlc29sdmVkLCBUQWJzb2x1dGU+O1xuICAgIGFwcGx5SW5zdGFuY2VzRGlydHkoaW5zdGFuY2VzOiBTaW1wbGVQYXRoVG9rZW5bXSk6IElNb2RlbFBhdGg8VFJlc29sdmVkLCBUQWJzb2x1dGU+O1xuXG4gICAgdG9TdHJpbmcoKTogc3RyaW5nO1xuICAgIHRvTGVnYWN5UGF0aCgpOiBzdHJpbmc7XG59XG5cbmV4cG9ydCB0eXBlIE1vZGVsUGF0aCA9IElNb2RlbFBhdGg8Ym9vbGVhbiwgYm9vbGVhbj47XG5leHBvcnQgdHlwZSBSZXNvbHZlZE1vZGVsUGF0aCA9IElNb2RlbFBhdGg8dHJ1ZSwgYm9vbGVhbj47XG5leHBvcnQgdHlwZSBBYnNvbHV0ZU1vZGVsUGF0aCA9IElNb2RlbFBhdGg8Ym9vbGVhbiwgdHJ1ZT47XG5leHBvcnQgdHlwZSBBYnNvbHV0ZVJlc29sdmVkTW9kZWxQYXRoID0gSU1vZGVsUGF0aDx0cnVlLCB0cnVlPjtcblxuZXhwb3J0IHR5cGUgUmVsYXRpdmVNb2RlbFBhdGggPSBJTW9kZWxQYXRoPGJvb2xlYW4sIGZhbHNlPjtcbmV4cG9ydCB0eXBlIFJlbGF0aXZlUmVzb2x2ZWRNb2RlbFBhdGggPSBJTW9kZWxQYXRoPHRydWUsIGZhbHNlPjtcblxudHlwZSBQYXRoVG9rZW5TcGVjPFRSZXNvbHZlZCBleHRlbmRzIGJvb2xlYW4+ID0gVFJlc29sdmVkIGV4dGVuZHMgdHJ1ZSA/IHN0cmluZyA6IFBhdGhUb2tlbjtcblxudHlwZSBQYXRoVG9rZW5zU3BlYzxUUmVzb2x2ZWQgZXh0ZW5kcyBib29sZWFuPiA9IEFycmF5PFBhdGhUb2tlblNwZWM8VFJlc29sdmVkPj47XG5cbnR5cGUgUmVhZG9ubHlQYXRoVG9rZW5zU3BlYzxUUmVzb2x2ZWQgZXh0ZW5kcyBib29sZWFuPiA9IFJlYWRvbmx5QXJyYXk8UGF0aFRva2VuU3BlYzxUUmVzb2x2ZWQ+PjtcblxuZnVuY3Rpb24gaXNBbGxUb2tlbnNSZXNvbHZlZDxUUmVzb2x2ZWQgZXh0ZW5kcyBib29sZWFuPih0b2tlbnM6IFJlYWRvbmx5UGF0aFRva2Vuc1NwZWM8VFJlc29sdmVkPik6IFRSZXNvbHZlZCB7XG4gICAgLy8g0K8g0YfRgtC+LdGC0L4g0L3QtdC80L7Qs9GDINGB0L7QvtCx0YDQsNC30LjRgtGMINC60LDQuiDRgtGD0YIg0LLRgdGRINGB0YLRgNC+0LPQviDQvdCw0L/QuNGB0LDRgtGMLi4uXG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvclxuICAgIHJldHVybiB0b2tlbnMuZXZlcnkoUGF0aFRva2Vucy5pc1NpbXBsZVRva2VuKTtcbn1cblxuZXhwb3J0IGNsYXNzIE1vZGVsUGF0aEltcGw8VFJlc29sdmVkIGV4dGVuZHMgYm9vbGVhbiwgVEFic29sdXRlIGV4dGVuZHMgYm9vbGVhbj5cbiAgICBpbXBsZW1lbnRzIElFcXVhdGFibGU8TW9kZWxQYXRoPiwgSU1vZGVsUGF0aDxUUmVzb2x2ZWQsIFRBYnNvbHV0ZT5cbntcbiAgICBwcml2YXRlIHJlYWRvbmx5IHRva2VuczogUmVhZG9ubHlQYXRoVG9rZW5zU3BlYzxUUmVzb2x2ZWQ+O1xuICAgIHB1YmxpYyByZWFkb25seSBhYnNvbHV0ZTogVEFic29sdXRlO1xuICAgIHByaXZhdGUgbGVnYWN5UGF0aDogdW5kZWZpbmVkIHwgc3RyaW5nO1xuXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKHBhdGhQYXJ0czogUmVhZG9ubHlQYXRoVG9rZW5zU3BlYzxUUmVzb2x2ZWQ+LCBhYnNvbHV0ZTogVEFic29sdXRlKSB7XG4gICAgICAgIHRoaXMudG9rZW5zID0gcGF0aFBhcnRzLmZpbHRlcih4ID0+IHggIT09IFwiXCIpO1xuICAgICAgICB0aGlzLmFic29sdXRlID0gYWJzb2x1dGU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCByZXNvbHZlZCgpOiBUUmVzb2x2ZWQge1xuICAgICAgICByZXR1cm4gaXNBbGxUb2tlbnNSZXNvbHZlZCh0aGlzLnRva2Vucyk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldFBhdGhQYXJ0cygpOiBJdGVyYWJsZTxQYXRoVG9rZW5TcGVjPFRSZXNvbHZlZD4+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMudG9rZW5zO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRQYXRoUGFydHNBc0FycmF5KCk6IFJlYWRvbmx5QXJyYXk8UGF0aFRva2VuU3BlYzxUUmVzb2x2ZWQ+PiB7XG4gICAgICAgIHJldHVybiB0aGlzLnRva2VucztcbiAgICB9XG5cbiAgICBwdWJsaWMgKmdldFNpbXBsZVRva2Vuc1N0cmljdCgpOiBJdGVyYWJsZTxTaW1wbGVQYXRoVG9rZW4+IHtcbiAgICAgICAgZm9yIChjb25zdCB0b2tlbiBvZiB0aGlzLnRva2Vucykge1xuICAgICAgICAgICAgaWYgKCFQYXRoVG9rZW5zLmlzU2ltcGxlVG9rZW4odG9rZW4pKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUGF0aCBtdXN0IG5vdCBjb250YWluIHNwZWMgdG9rZW5zXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgeWllbGQgdG9rZW47XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0U2ltcGxlVG9rZW5zQXNBcnJheVN0cmljdCgpOiByZWFkb25seSBTaW1wbGVQYXRoVG9rZW5bXSB7XG4gICAgICAgIGZvciAoY29uc3QgdG9rZW4gb2YgdGhpcy50b2tlbnMpIHtcbiAgICAgICAgICAgIGlmICghUGF0aFRva2Vucy5pc1NpbXBsZVRva2VuKHRva2VuKSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlBhdGggbXVzdCBub3QgY29udGFpbiBzcGVjIHRva2Vuc1wiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyDQn9GA0L7QstC10YDQutCwINCy0YvRiNC1INCz0LDRgNCw0LXQvdGC0LjRgNGD0LXRgiDRh9GC0L4g0LHRg9C00YPRgiDRgtC+0LvRjNC60L4gU2ltcGxlUGF0aFRva2VuLlxuICAgICAgICAvLyDQktGB0LUgbWFwINC4IGZpbHRlciDRg9Cx0YDQsNC90Ysg0LTQu9GPINC/0YDQvtC40LfQstC+0LTQuNGC0LXQu9GM0L3QvtGB0YLQuFxuICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgIHJldHVybiB0aGlzLnRva2VucztcbiAgICB9XG5cbiAgICBwdWJsaWMgam9pbldpdGgoLi4ucGF0aDogc3RyaW5nW10pOiBJTW9kZWxQYXRoPFRSZXNvbHZlZCwgVEFic29sdXRlPjtcbiAgICBwdWJsaWMgam9pbldpdGgoLi4ucGF0aDogUGF0aFRva2VuW10pOiBJTW9kZWxQYXRoPGJvb2xlYW4sIFRBYnNvbHV0ZT47XG4gICAgcHVibGljIGpvaW5XaXRoKC4uLnBhdGg6IEFycmF5PFJlc29sdmVkTW9kZWxQYXRoIHwgc3RyaW5nPik6IElNb2RlbFBhdGg8VFJlc29sdmVkLCBUQWJzb2x1dGU+O1xuICAgIHB1YmxpYyBqb2luV2l0aCguLi5wYXRoOiBBcnJheTxBYnNvbHV0ZVJlc29sdmVkTW9kZWxQYXRoIHwgc3RyaW5nPik6IElNb2RlbFBhdGg8VFJlc29sdmVkLCB0cnVlPjtcbiAgICBwdWJsaWMgam9pbldpdGgoLi4ucGF0aDogQXJyYXk8TW9kZWxQYXRoIHwgUGF0aFRva2VuPik6IElNb2RlbFBhdGg8Ym9vbGVhbiwgVEFic29sdXRlPjtcbiAgICBwdWJsaWMgam9pbldpdGgoLi4ucGF0aDogQXJyYXk8TW9kZWxQYXRoIHwgUGF0aFRva2VuPik6IElNb2RlbFBhdGg8Ym9vbGVhbiwgYm9vbGVhbj4ge1xuICAgICAgICByZXR1cm4gam9pbk1vZGVsUGF0aHModGhpcywgLi4ucGF0aCk7XG4gICAgfVxuXG4gICAgcHVibGljIGlzUmVzb2x2ZWQoKTogdGhpcyBpcyBJTW9kZWxQYXRoPHRydWUsIFRBYnNvbHV0ZT4ge1xuICAgICAgICByZXR1cm4gaXNBbGxUb2tlbnNSZXNvbHZlZCh0aGlzLnRva2Vucyk7XG4gICAgICAgIHJldHVybiB0aGlzLnRva2Vucy5ldmVyeShQYXRoVG9rZW5zLmlzU2ltcGxlVG9rZW4pO1xuICAgIH1cblxuICAgIHB1YmxpYyByZXNvbHZlQWxsKGluc3RhbmNlOiBzdHJpbmcpOiBNb2RlbFBhdGgge1xuICAgICAgICBjb25zdCB0b2tlbnMgPSB0aGlzLnRva2Vucy5tYXAodG9rZW4gPT4ge1xuICAgICAgICAgICAgaWYgKFBhdGhUb2tlbnMuaXNTaW1wbGVUb2tlbih0b2tlbikpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdG9rZW47XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBpbnN0YW5jZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIG5ldyBNb2RlbFBhdGhJbXBsKHRva2VucywgdGhpcy5hYnNvbHV0ZSk7XG4gICAgfVxuXG4gICAgcHVibGljIGlzQ29udGFpbkl0ZXJhdGlvbigpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudG9rZW5zLnNvbWUoeCA9PiB4ID09PSBQYXRoVG9rZW5zLmVhY2gpO1xuICAgIH1cblxuICAgIHB1YmxpYyBpc0NvbnRhaW5DdXJyZW50SXRlcmF0aW9uKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy50b2tlbnMuc29tZSh4ID0+IHggPT09IFBhdGhUb2tlbnMuY3VycmVudCk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldExhc3RMaXN0UGF0aCgpOiBQYXRoVG9rZW5bXSB7XG4gICAgICAgIGlmICghdGhpcy5pc0NvbnRhaW5JdGVyYXRpb24oKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUGF0aCBtdXN0IGNvbnRhaW4gaXRlcmF0aW9uXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8g0J/RgNC+0LLQtdGA0LrQsCDQstGL0YjQtSDQs9Cw0YDQsNC90YLQuNGA0YPQtdGCLCDRh9GC0L4g0LHRg9C00LXRgiBQYXRoVG9rZW5zLmVhY2hcbiAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICBjb25zdCBsYXN0SXRlcmF0aW9uSW5kZXggPSB0aGlzLnRva2Vucy5sYXN0SW5kZXhPZihQYXRoVG9rZW5zLmVhY2gpO1xuICAgICAgICByZXR1cm4gdGhpcy50b2tlbnMuc2xpY2UoMCwgbGFzdEl0ZXJhdGlvbkluZGV4KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgaXNBYnNvbHV0ZSgpOiB0aGlzIGlzIElNb2RlbFBhdGg8VFJlc29sdmVkLCB0cnVlPiB7XG4gICAgICAgIHJldHVybiB0aGlzLmFic29sdXRlO1xuICAgIH1cblxuICAgIHB1YmxpYyB0b1N0cmluZygpOiBzdHJpbmcge1xuICAgICAgICBpZiAodGhpcy50b2tlbnMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gXCJcIjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gKHRoaXMuYWJzb2x1dGUgPyBcIi9cIiA6IFwiXCIpICsgdGhpcy50b2tlbnMubWFwKHggPT4gdGhpcy5wYXRoUGFydFRvU3RyaW5nKHgpKS5qb2luKFwiL1wiKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgdG9MZWdhY3lQYXRoKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLmxlZ2FjeVBhdGggPz8gKHRoaXMubGVnYWN5UGF0aCA9IHRoaXMudG9rZW5zLm1hcCh4ID0+IHRoaXMucGF0aFBhcnRUb1N0cmluZyh4KSkuam9pbihcIi9cIikpO1xuICAgIH1cblxuICAgIHB1YmxpYyBpc0VxdWFscyhcbiAgICAgICAgbW9kZWxQYXRoOiBNb2RlbFBhdGgsXG4gICAgICAgIGVhY2hDdXJyZW50Q29sbGlzaW9uOiBFYWNoQ3VycmVudENvbGxpc2lvbiA9IEVhY2hDdXJyZW50Q29sbGlzaW9uLkFyZVNhbWVcbiAgICApOiBib29sZWFuIHtcbiAgICAgICAgaWYgKGVhY2hDdXJyZW50Q29sbGlzaW9uID09PSBFYWNoQ3VycmVudENvbGxpc2lvbi5BcmVTYW1lKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy50b0xlZ2FjeVBhdGgoKSA9PT0gbW9kZWxQYXRoLnRvTGVnYWN5UGF0aCgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICB0aGlzLmlzQWJzb2x1dGUoKSA9PT0gbW9kZWxQYXRoLmlzQWJzb2x1dGUoKSAmJlxuICAgICAgICAgICAgICAgIEl0ZXJhdG9yLmZyb20oSXRlclV0aWxzLnppcCh0aGlzLmdldFBhdGhQYXJ0cygpLCBtb2RlbFBhdGguZ2V0UGF0aFBhcnRzKCkpKS5ldmVyeShcbiAgICAgICAgICAgICAgICAgICAgKFt0MSwgdDJdKSA9PiB0MSA9PT0gdDJcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog0JLRgdC10LPQtNCwINGG0LXQu9C+0LUg0L/QvtC70L7QttC40YLQtdC70YzQvdC+0LUg0LHQtdC30LfQvdCw0LrQvtCy0L7QtSAzMi3QsdC40YLQvdC+0LUg0YfQuNGB0LvQvlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRIYXNoKGVhY2hDdXJyZW50Q29sbGlzaW9uOiBFYWNoQ3VycmVudENvbGxpc2lvbiA9IEVhY2hDdXJyZW50Q29sbGlzaW9uLkFyZVNhbWUpOiBudW1iZXIge1xuICAgICAgICBsZXQgaGFzaCA9IDUzODE7XG4gICAgICAgIGZvciAoY29uc3QgdG9rZW4gb2YgcmV2ZXJzZUFycmF5KHRoaXMudG9rZW5zKSkge1xuICAgICAgICAgICAgbGV0IGN1cnJlbnRTdHI6IHN0cmluZztcbiAgICAgICAgICAgIGlmIChQYXRoVG9rZW5zLmlzU2ltcGxlVG9rZW4odG9rZW4pKSB7XG4gICAgICAgICAgICAgICAgY3VycmVudFN0ciA9IHRva2VuO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoZWFjaEN1cnJlbnRDb2xsaXNpb24gPT09IEVhY2hDdXJyZW50Q29sbGlzaW9uLkFyZURpZmZlcmVudCkge1xuICAgICAgICAgICAgICAgICAgICBjdXJyZW50U3RyID0gdG9rZW4gPT09IFBhdGhUb2tlbnMuZWFjaCA/IFwiKlwiIDogXCIhXCI7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFN0ciA9IFwiKlwiO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxldCBzdHJpbmdJbmRleCA9IGN1cnJlbnRTdHIubGVuZ3RoO1xuICAgICAgICAgICAgd2hpbGUgKHN0cmluZ0luZGV4KSB7XG4gICAgICAgICAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLWJpdHdpc2VcbiAgICAgICAgICAgICAgICBoYXNoID0gKGhhc2ggKiAzMykgXiBjdXJyZW50U3RyLmNoYXJDb2RlQXQoLS1zdHJpbmdJbmRleCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvKlxuICAgICAgICAgICAgdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLWJpdHdpc2VcbiAgICAgICAgICAgIEphdmFTY3JpcHQgZG9lcyBiaXR3aXNlIG9wZXJhdGlvbnMgKGxpa2UgWE9SLCBhYm92ZSkgb24gMzItYml0IHNpZ25lZFxuICAgICAgICAgICAgaW50ZWdlcnMuIFNpbmNlIHdlIHdhbnQgdGhlIHJlc3VsdHMgdG8gYmUgYWx3YXlzIHBvc2l0aXZlLCBjb252ZXJ0IHRoZVxuICAgICAgICAgICAgc2lnbmVkIGludCB0byBhbiB1bnNpZ25lZCBieSBkb2luZyBhbiB1bnNpZ25lZCBiaXRzaGlmdC5cbiAgICAgICovXG4gICAgICAgIHJldHVybiBoYXNoID4+PiAwO1xuICAgIH1cblxuICAgIHB1YmxpYyBpc0luY2x1ZGVzKG1vZGVsUGF0aDogTW9kZWxQYXRoKTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IHRhcmdldFRva2VucyA9IG1vZGVsUGF0aC5nZXRQYXRoUGFydHNBc0FycmF5KCk7XG4gICAgICAgIGlmICh0aGlzLnRva2Vucy5sZW5ndGggIT09IHRhcmdldFRva2Vucy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMudG9rZW5zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBsZWZ0UGFydCA9IHRoaXMudG9rZW5zW2ldO1xuICAgICAgICAgICAgY29uc3QgcmlnaHRQYXJ0ID0gdGFyZ2V0VG9rZW5zW2ldO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBsZWZ0UGFydCA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgcmlnaHRQYXJ0ID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChsZWZ0UGFydCAhPT0gcmlnaHRQYXJ0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAobGVmdFBhcnQgPT09IFBhdGhUb2tlbnMuY3VycmVudCB8fCBsZWZ0UGFydCA9PT0gUGF0aFRva2Vucy5lYWNoKSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiByaWdodFBhcnQgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFpc0Zpbml0ZShOdW1iZXIocmlnaHRQYXJ0KSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBpZiAocmlnaHRQYXJ0ICE9PSBQYXRoVG9rZW5zLmN1cnJlbnQgJiYgcmlnaHRQYXJ0ICE9PSBQYXRoVG9rZW5zLmVhY2gpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldEl0ZXJhdGlvblJhbmsoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIGNvdW50KEl0ZXJhdG9yLmZyb20odGhpcy50b2tlbnMpLmZpbHRlcih4ID0+IHggPT09IFBhdGhUb2tlbnMuZWFjaCkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBpc0VtcHR5KCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy50b2tlbnMubGVuZ3RoID09PSAwO1xuICAgIH1cblxuICAgIHB1YmxpYyBtYXRjaEZvcihtb2RlbFBhdGg6IE1vZGVsUGF0aCk6IFBhdGhNYXRjaGluZyB7XG4gICAgICAgIGlmICghdGhpcy5pc0Fic29sdXRlKCkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IG1hdGNoIG5vbiBhYnNvbHV0ZSBwYXRoICcke3RoaXMudG9TdHJpbmcoKX0nYCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFtb2RlbFBhdGguaXNBYnNvbHV0ZSgpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBtYXRjaCBub24gYWJzb2x1dGUgcGF0aCAnJHttb2RlbFBhdGgudG9TdHJpbmcoKX0nYCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFBhdGhNYXRjaGVyLm1hdGNoKHRoaXMudG9rZW5zLCBtb2RlbFBhdGguZ2V0UGF0aFBhcnRzQXNBcnJheSgpKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgKnNwbGl0QnlNdWx0aXBsaWNpdHkoKTogSXRlcmFibGU8UmVzb2x2ZWRNb2RlbFBhdGggfCB0eXBlb2YgRWFjaFN5bWJvbCB8IHR5cGVvZiBDdXJyZW50U3ltYm9sPiB7XG4gICAgICAgIGxldCBsYXN0U2ltcGxlUGFydHMgPSBuZXcgTW9kZWxQYXRoQnVpbGRlcih0aGlzLmlzQWJzb2x1dGUoKSk7XG4gICAgICAgIGZvciAoY29uc3QgdG9rZW4gb2YgdGhpcy50b2tlbnMpIHtcbiAgICAgICAgICAgIGlmIChQYXRoVG9rZW5zLmlzU2ltcGxlVG9rZW4odG9rZW4pKSB7XG4gICAgICAgICAgICAgICAgbGFzdFNpbXBsZVBhcnRzLmFwcGVuZCh0b2tlbik7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmICghbGFzdFNpbXBsZVBhcnRzLmVtcHR5KSB7XG4gICAgICAgICAgICAgICAgICAgIHlpZWxkIGxhc3RTaW1wbGVQYXJ0cy50b1Jlc29sdmVkUGF0aCgpO1xuICAgICAgICAgICAgICAgICAgICBsYXN0U2ltcGxlUGFydHMgPSBuZXcgTW9kZWxQYXRoQnVpbGRlcihmYWxzZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHlpZWxkIHRva2VuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICghbGFzdFNpbXBsZVBhcnRzLmVtcHR5KSB7XG4gICAgICAgICAgICB5aWVsZCBsYXN0U2ltcGxlUGFydHMudG9SZXNvbHZlZFBhdGgoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBub3JtYWxpemUoKTogSU1vZGVsUGF0aDxUUmVzb2x2ZWQsIFRBYnNvbHV0ZT4ge1xuICAgICAgICBjb25zdCByZXN1bHRUb2tlbnM6IFBhdGhUb2tlbnNTcGVjPFRSZXNvbHZlZD4gPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBwYXRoUGFydCBvZiB0aGlzLnRva2Vucykge1xuICAgICAgICAgICAgaWYgKHBhdGhQYXJ0ID09PSBcIi4uXCIpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXJlc3VsdFRva2Vucy5wb3AoKSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5pc0Fic29sdXRlKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgUGF0aCBpcyBpbnZhbGlkICcke3RoaXMudG9TdHJpbmcoKX0nYCk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRUb2tlbnMucHVzaChcIi4uXCIpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAocGF0aFBhcnQgPT09IFwiLlwiKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXN1bHRUb2tlbnMucHVzaChwYXRoUGFydCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBNb2RlbFBhdGhJbXBsPFRSZXNvbHZlZCwgVEFic29sdXRlPihyZXN1bHRUb2tlbnMsIHRoaXMuYWJzb2x1dGUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBzdW1tYXJ5INCh0L/QtdGG0LjRhNC40LrQsNGC0L7RgNGLINC80L3QvtC20LXRgdGC0LLQtdC90L3QvtGB0YLQuCBFYWNoINC30LDQvNC10L3Rj9C10YIg0L3QsCBDdXJyZW50XG4gICAgICovXG4gICAgcHVibGljIHRvQ3VycmVudEl0ZXJhdGlvbigpOiBJTW9kZWxQYXRoPFRSZXNvbHZlZCwgVEFic29sdXRlPiB7XG4gICAgICAgIGlmICh0aGlzLmlzUmVzb2x2ZWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBOT1RFINCi0YPRgiDQvdC1INC/0L7Qu9GD0YfQsNC10YLRgdGPINC90LDQu9C+0LbQuNGC0Ywg0LTQuNGB0LrRgNC40LzQuNC90LDRgtC+0YBcbiAgICAgICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgICAgICAgICAgIGNvbnN0IHBhdGhQYXJ0czogUGF0aFRva2Vuc1NwZWM8VFJlc29sdmVkPiA9IHRoaXMudG9rZW5zLm1hcCh4ID0+XG4gICAgICAgICAgICAgICAgeCA9PT0gUGF0aFRva2Vucy5lYWNoID8gUGF0aFRva2Vucy5jdXJyZW50IDogeFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHJldHVybiBuZXcgTW9kZWxQYXRoSW1wbDxUUmVzb2x2ZWQsIFRBYnNvbHV0ZT4ocGF0aFBhcnRzLCB0aGlzLmFic29sdXRlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyB0b0VhY2hJdGVyYXRpb24oKTogSU1vZGVsUGF0aDxUUmVzb2x2ZWQsIFRBYnNvbHV0ZT4ge1xuICAgICAgICBpZiAodGhpcy5pc1Jlc29sdmVkKCkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gTk9URSDQotGD0YIg0L3QtSDQv9C+0LvRg9GH0LDQtdGC0YHRjyDQvdCw0LvQvtC20LjRgtGMINC00LjRgdC60YDQuNC80LjQvdCw0YLQvtGAXG4gICAgICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gICAgICAgICAgICBjb25zdCBwYXRoUGFydHM6IFBhdGhUb2tlbnNTcGVjPFRSZXNvbHZlZD4gPSB0aGlzLnRva2Vucy5tYXAoeCA9PlxuICAgICAgICAgICAgICAgIHggPT09IFBhdGhUb2tlbnMuY3VycmVudCA/IFBhdGhUb2tlbnMuZWFjaCA6IHhcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICByZXR1cm4gbmV3IE1vZGVsUGF0aEltcGw8VFJlc29sdmVkLCBUQWJzb2x1dGU+KHBhdGhQYXJ0cywgdGhpcy5hYnNvbHV0ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgdG9BYnNvbHV0ZSgpOiBJTW9kZWxQYXRoPFRSZXNvbHZlZCwgdHJ1ZT4ge1xuICAgICAgICBpZiAoIXRoaXMuYWJzb2x1dGUpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgUGF0aCAnJHt0aGlzLnRvTGVnYWN5UGF0aCgpfSBpcyBub3QgYWJzb2x1dGUnYCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBNb2RlbFBhdGhJbXBsPFRSZXNvbHZlZCwgdHJ1ZT4odGhpcy50b2tlbnMsIHRydWUpO1xuICAgIH1cblxuICAgIHB1YmxpYyAqZ2V0QWxsUGFyZW50UGF0aHMoKTogSXRlcmFibGU8TW9kZWxQYXRoPiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IG5ldyBNb2RlbFBhdGhCdWlsZGVyKHRoaXMuaXNBYnNvbHV0ZSgpKTtcbiAgICAgICAgZm9yIChjb25zdCB0b2tlbiBvZiBJdGVyVXRpbHMuc2tpcExhc3QodGhpcy5nZXRQYXRoUGFydHMoKSwgMSkpIHtcbiAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQodG9rZW4pO1xuICAgICAgICAgICAgeWllbGQgcmVzdWx0LnRvUGF0aCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHRyaW1MYXN0U3RhcklmTGFzdFRva2VuKCk6IElNb2RlbFBhdGg8VFJlc29sdmVkLCBUQWJzb2x1dGU+IHtcbiAgICAgICAgY29uc3QgbGFzdEl0ZW0gPSBJdGVyVXRpbHMubGFzdCh0aGlzLnRva2Vucyk7XG4gICAgICAgIGlmIChsYXN0SXRlbSAhPSB1bmRlZmluZWQgJiYgUGF0aFRva2Vucy5pc011bHRpVG9rZW4obGFzdEl0ZW0pKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IE1vZGVsUGF0aEltcGwodGhpcy50b2tlbnMuc2xpY2UoMCwgLTEpLCB0aGlzLmFic29sdXRlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0UGFyZW50UGF0aCgpOiBJTW9kZWxQYXRoPFRSZXNvbHZlZCwgVEFic29sdXRlPiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IG5ldyBNb2RlbFBhdGhCdWlsZGVyKHRoaXMuYWJzb2x1dGUpO1xuICAgICAgICBmb3IgKGNvbnN0IHRva2VuIG9mIEl0ZXJVdGlscy5za2lwTGFzdCh0aGlzLmdldFBhdGhQYXJ0cygpLCAxKSkge1xuICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCh0b2tlbik7XG4gICAgICAgIH1cbiAgICAgICAgLy8g0KLRg9GCINC/0L7Qu9GD0YfQsNC10YLRgdGPINGC0LDQuiwg0YfRgtC+INC/0L4g0LTRgNGD0LPQvtC80YMg0L3QuNC60LDQulxuICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gICAgICAgIHJldHVybiByZXN1bHQudG9QYXRoKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFwcGx5SW5zdGFuY2VzRGlydHkoaW5zdGFuY2VzOiBTaW1wbGVQYXRoVG9rZW5bXSk6IElNb2RlbFBhdGg8VFJlc29sdmVkLCBUQWJzb2x1dGU+IHtcbiAgICAgICAgaWYgKHRoaXMuaXNSZXNvbHZlZCgpIHx8IGluc3RhbmNlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG4gICAgICAgIGxldCBpbnN0YW5jZUNvdW50ZXIgPSAwO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBuZXcgTW9kZWxQYXRoQnVpbGRlcih0cnVlKTtcbiAgICAgICAgZm9yIChjb25zdCB0b2tlbiBvZiB0aGlzLmdldFBhdGhQYXJ0cygpKSB7XG4gICAgICAgICAgICBpZiAoUGF0aFRva2Vucy5pc011bHRpVG9rZW4odG9rZW4pICYmIGluc3RhbmNlQ291bnRlciA8IGluc3RhbmNlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKGluc3RhbmNlc1tpbnN0YW5jZUNvdW50ZXJdID8/IHJlamVjdCgpKTtcbiAgICAgICAgICAgICAgICBpbnN0YW5jZUNvdW50ZXIrKztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCh0b2tlbik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8g0KLRg9GCINC/0L7Qu9GD0YfQsNC10YLRgdGPINGC0LDQuiwg0YfRgtC+INC/0L4g0LTRgNGD0LPQvtC80YMg0L3QuNC60LDQulxuICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gICAgICAgIHJldHVybiByZXN1bHQudG9QYXRoKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBwYXRoUGFydFRvU3RyaW5nKHBhdGhQYXJ0OiBQYXRoVG9rZW4pOiBzdHJpbmcge1xuICAgICAgICBpZiAodHlwZW9mIHBhdGhQYXJ0ID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICByZXR1cm4gcGF0aFBhcnQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBhdGhQYXJ0ID09PSBQYXRoVG9rZW5zLmVhY2gpIHtcbiAgICAgICAgICAgIHJldHVybiBcIipcIjtcbiAgICAgICAgfVxuICAgICAgICBpZiAocGF0aFBhcnQgPT09IFBhdGhUb2tlbnMuY3VycmVudCkge1xuICAgICAgICAgICAgcmV0dXJuIFwiKlwiO1xuICAgICAgICB9XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5rbm93biBwYXRoIHBhcnQgc3BlY2lmaWVkOiAke2Vuc3VyZUFuZEdldFN0cmluZyhwYXRoUGFydCl9YCk7XG4gICAgfVxufVxuIl19
|
|
609
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL0NvbW1vbi9Nb2RlbFBhdGgvTW9kZWxQYXRoLnRzIl0sIm5hbWVzIjpbIkVhY2hTeW1ib2wiLCJTeW1ib2wiLCJmb3IiLCJDdXJyZW50U3ltYm9sIiwiUGF0aFRva2VucyIsImlzTXVsdGlUb2tlbiIsInBhcnQiLCJlYWNoIiwiY3VycmVudCIsImlzU2ltcGxlVG9rZW4iLCJpc0luc3RhbmNlVG9rZW4iLCJ0ZXN0IiwiaXNNb2RlbFBhdGgiLCJwYXRoIiwiTW9kZWxQYXRoSW1wbCIsImNvbnZlcnRUb0xlZ2FjeVBhdGgiLCJ0b0xlZ2FjeVBhdGgiLCJjb252ZXJ0VG9BYnNvbHV0ZU1vZGVsUGF0aCIsImNyZWF0ZUFic29sdXRlRnJvbU1hc2siLCJlbXB0eU1vZGVsUGF0aCIsImVtcHR5QWJzb2x1dGVNb2RlbFBhdGgiLCJjcmVhdGVNb2RlbFBhdGgiLCJhYnNvbHV0ZSIsInBhcnRQYXJ0U3RyaW5ncyIsInNwbGl0IiwiZW5zdXJlUGxhaW5QYXRoUGFydHNEb2VzTm90Q29udGFpbk11bHRpcGxpY2l0eSIsInN0YXJ0c1dpdGgiLCJzbGljZSIsImNyZWF0ZUZyb21NYXNrIiwibXVsdGlwbGljaXR5U3ltYm9sIiwibWFwIiwieCIsInBhcnRzIiwic29tZSIsIkVycm9yIiwiY3JlYXRlQWJzb2x1dGUiLCJjcmVhdGVSZWxhdGl2ZVJlc29sdmVkTW9kZWxQYXRoIiwiY3JlYXRlQWJzb2x1dGVGcm9tVG9rZW5zIiwidG9rZW5zIiwiY3JlYXRlQWJzb2x1dGVSZXNvbHZlZEZyb21Ub2tlbnMiLCJjcmVhdGVSZWxhdGl2ZUZyb21Ub2tlbnMiLCJqb2luTW9kZWxQYXRocyIsInJlc3VsdFBhcnRzIiwiam9pbkl0ZW0iLCJwdXNoIiwiaXNBYnNvbHV0ZSIsImdldFBhdGhQYXJ0c0FzQXJyYXkiLCJBcnJheSIsImlzQXJyYXkiLCJBYnNvbHV0ZU1vZGVsRmllbGRQYXRoIiwiY29uc3RydWN0b3IiLCJmaWVsZE5hbWUiLCJmaWVsZCIsImdldEhhc2giLCJpc0VxdWFscyIsIm1vZGVsUGF0aCIsImVhY2hDdXJyZW50Q29sbGlzaW9uIiwiRWFjaEN1cnJlbnRDb2xsaXNpb24iLCJBcmVTYW1lIiwiY3JlYXRlRnJvbVN0cmluZyIsInBhdGhXaXRoRmllbGROYW1lIiwiZW5kc1dpdGgiLCJyZXBsYWNlIiwiaXNBbGxUb2tlbnNSZXNvbHZlZCIsImV2ZXJ5IiwicGF0aFBhcnRzIiwibGVnYWN5UGF0aCIsImZpbHRlciIsInJlc29sdmVkIiwiZ2V0UGF0aFBhcnRzIiwiZ2V0U2ltcGxlVG9rZW5zU3RyaWN0IiwidG9rZW4iLCJnZXRTaW1wbGVUb2tlbnNBc0FycmF5U3RyaWN0Iiwiam9pbldpdGgiLCJpc1Jlc29sdmVkIiwicmVzb2x2ZUFsbCIsImluc3RhbmNlIiwiaXNDb250YWluSXRlcmF0aW9uIiwiaXNDb250YWluQ3VycmVudEl0ZXJhdGlvbiIsImdldExhc3RMaXN0UGF0aCIsImxhc3RJdGVyYXRpb25JbmRleCIsImxhc3RJbmRleE9mIiwiaXNFbmRzV2l0aEl0ZXJhdGlvbiIsImxhc3RJdGVtIiwiSXRlclV0aWxzIiwibGFzdCIsInRvU3RyaW5nIiwibGVuZ3RoIiwicGF0aFBhcnRUb1N0cmluZyIsImpvaW4iLCJJdGVyYXRvciIsImZyb20iLCJ6aXAiLCJ0MSIsInQyIiwiaGFzaCIsImN1cnJlbnRTdHIiLCJBcmVEaWZmZXJlbnQiLCJzdHJpbmdJbmRleCIsImNoYXJDb2RlQXQiLCJpc0luY2x1ZGVzIiwidGFyZ2V0VG9rZW5zIiwiaSIsImxlZnRQYXJ0IiwicmlnaHRQYXJ0IiwiaXNGaW5pdGUiLCJOdW1iZXIiLCJnZXRJdGVyYXRpb25SYW5rIiwiaXNFbXB0eSIsIm1hdGNoRm9yIiwiUGF0aE1hdGNoZXIiLCJtYXRjaCIsInNwbGl0QnlNdWx0aXBsaWNpdHkiLCJsYXN0U2ltcGxlUGFydHMiLCJNb2RlbFBhdGhCdWlsZGVyIiwiYXBwZW5kIiwiZW1wdHkiLCJ0b1Jlc29sdmVkUGF0aCIsIm5vcm1hbGl6ZSIsInJlc3VsdFRva2VucyIsInBhdGhQYXJ0IiwicG9wIiwidG9DdXJyZW50SXRlcmF0aW9uIiwidG9FYWNoSXRlcmF0aW9uIiwidG9BYnNvbHV0ZSIsImdldEFsbFBhcmVudFBhdGhzIiwicmVzdWx0Iiwic2tpcExhc3QiLCJ0b1BhdGgiLCJ0cmltTGFzdFN0YXJJZkxhc3RUb2tlbiIsInVuZGVmaW5lZCIsImdldFBhcmVudFBhdGgiLCJhcHBseUluc3RhbmNlc0RpcnR5IiwiaW5zdGFuY2VzIiwiaW5zdGFuY2VDb3VudGVyIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFDQTs7QUFDQTs7QUFDQTs7QUFFQTs7QUFDQTs7QUFDQTs7QUFHQSxNQUFNQSxVQUFVLEdBQUdDLE1BQU0sQ0FBQ0MsR0FBUCxDQUFXLFVBQVgsQ0FBbkI7QUFDQSxNQUFNQyxhQUFhLEdBQUdGLE1BQU0sQ0FBQ0MsR0FBUCxDQUFXLGFBQVgsQ0FBdEI7O0FBRU8sTUFBTUUsVUFBTixDQUFpQjtBQUlNLFNBQVpDLFlBQVksQ0FBQ0MsSUFBRCxFQUFnRjtBQUN0RyxXQUFPQSxJQUFJLEtBQUtGLFVBQVUsQ0FBQ0csSUFBcEIsSUFBNEJELElBQUksS0FBS0YsVUFBVSxDQUFDSSxPQUF2RDtBQUNIOztBQUUwQixTQUFiQyxhQUFhLENBQUNILElBQUQsRUFBOEM7QUFDckUsV0FBTyxPQUFPQSxJQUFQLEtBQWdCLFFBQXZCO0FBQ0g7O0FBRTRCLFNBQWZJLGVBQWUsQ0FBQ0osSUFBRCxFQUE4QztBQUN2RSxXQUFPLE9BQU9BLElBQVAsS0FBZ0IsUUFBaEIsSUFBNEIsU0FBU0ssSUFBVCxDQUFjTCxJQUFkLENBQW5DO0FBQ0g7O0FBZG1COzs7QUFBWEYsVSxDQUNLRyxJLEdBQTBCUCxVO0FBRC9CSSxVLENBRUtJLE8sR0FBZ0NMLGE7O0FBbUIzQyxTQUFTUyxXQUFULENBQXFCQyxJQUFyQixFQUFpRjtBQUNwRixTQUFPLE9BQU9BLElBQVAsS0FBZ0IsUUFBaEIsSUFBNEJBLElBQUksWUFBWUMsYUFBbkQ7QUFDSDs7QUFFTSxTQUFTQyxtQkFBVCxDQUE2QkYs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QVMsQ0FBQzlDLE1BQVYsS0FBcUIsQ0FBOUMsRUFBaUQ7QUFDN0MsYUFBTyxJQUFQO0FBQ0g7O0FBQ0QsUUFBSStDLGVBQWUsR0FBRyxDQUF0QjtBQUNBLFVBQU1SLE1BQU0sR0FBRyxJQUFJWixrQ0FBSixDQUFxQixJQUFyQixDQUFmOztBQUNBLFNBQUssTUFBTTNDLEtBQVgsSUFBb0IsS0FBS0YsWUFBTCxFQUFwQixFQUF5QztBQUNyQyxVQUFJakUsVUFBVSxDQUFDQyxZQUFYLENBQXdCa0UsS0FBeEIsS0FBa0MrRCxlQUFlLEdBQUdELFNBQVMsQ0FBQzlDLE1BQWxFLEVBQTBFO0FBQUE7O0FBQ3RFdUMsUUFBQUEsTUFBTSxDQUFDWCxNQUFQLDBCQUFja0IsU0FBUyxDQUFDQyxlQUFELENBQXZCLHlFQUE0QywwQkFBNUM7QUFDQUEsUUFBQUEsZUFBZTtBQUNsQixPQUhELE1BR087QUFDSFIsUUFBQUEsTUFBTSxDQUFDWCxNQUFQLENBQWM1QyxLQUFkO0FBQ0g7QUFDSixLQWJzRixDQWN2RjtBQUNBOzs7QUFDQSxXQUFPdUQsTUFBTSxDQUFDRSxNQUFQLEVBQVA7QUFDSDs7QUFFT3hDLEVBQUFBLGdCQUFnQixDQUFDZ0MsUUFBRCxFQUE4QjtBQUNsRCxRQUFJLE9BQU9BLFFBQVAsS0FBb0IsUUFBeEIsRUFBa0M7QUFDOUIsYUFBT0EsUUFBUDtBQUNIOztBQUNELFFBQUlBLFFBQVEsS0FBS3BILFVBQVUsQ0FBQ0csSUFBNUIsRUFBa0M7QUFDOUIsYUFBTyxHQUFQO0FBQ0g7O0FBQ0QsUUFBSWlILFFBQVEsS0FBS3BILFVBQVUsQ0FBQ0ksT0FBNUIsRUFBcUM7QUFDakMsYUFBTyxHQUFQO0FBQ0g7O0FBQ0QsVUFBTSxJQUFJMEIsS0FBSixDQUFXLGdDQUErQixxQ0FBbUJzRixRQUFuQixDQUE2QixFQUF2RSxDQUFOO0FBQ0g7O0FBblZMIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQmluZGluZ1BhdGgsIFZpZXdNb2RlbEZpZWxkTmFtZSB9IGZyb20gXCIuLi8uLi9FbmdpbmUvc3JjL0VuZ2luZS9Db3JlL0NvcmVUeXBlc1wiO1xuaW1wb3J0IHsgY291bnQsIEl0ZXJVdGlscywgcmV2ZXJzZUFycmF5IH0gZnJvbSBcIi4uL0l0ZXJhYmxlVXRpbHNcIjtcbmltcG9ydCB7IGVuc3VyZUFuZEdldFN0cmluZywgcmVqZWN0IH0gZnJvbSBcIi4uL1R5cGluZ1V0aWxzXCI7XG5pbXBvcnQgeyBnZXRTaW1wbGVIYXNoQnlTdHJpbmcgfSBmcm9tIFwiLi4vaGFzaFV0aWxzXCI7XG5cbmltcG9ydCB7IEVhY2hDdXJyZW50Q29sbGlzaW9uIH0gZnJvbSBcIi4vRWFjaEN1cnJlbnRDb2xsaXNpb25cIjtcbmltcG9ydCB7IE1vZGVsUGF0aEJ1aWxkZXIgfSBmcm9tIFwiLi9Nb2RlbFBhdGhCdWlsZGVyXCI7XG5pbXBvcnQgeyBQYXRoTWF0Y2hlciwgUGF0aE1hdGNoaW5nIH0gZnJvbSBcIi4vUGF0aE1hdGNoZXJcIjtcbmltcG9ydCB7IElFcXVhdGFibGUgfSBmcm9tIFwiLi9JRXF1YXRhYmxlXCI7XG5cbmNvbnN0IEVhY2hTeW1ib2wgPSBTeW1ib2wuZm9yKFwiX19FQUNIX19cIik7XG5jb25zdCBDdXJyZW50U3ltYm9sID0gU3ltYm9sLmZvcihcIl9fQ1VSUkVOVF9fXCIpO1xuXG5leHBvcnQgY2xhc3MgUGF0aFRva2VucyB7XG4gICAgcHVibGljIHN0YXRpYyBlYWNoOiB0eXBlb2YgRWFjaFN5bWJvbCA9IEVhY2hTeW1ib2w7XG4gICAgcHVibGljIHN0YXRpYyBjdXJyZW50OiB0eXBlb2YgQ3VycmVudFN5bWJvbCA9IEN1cnJlbnRTeW1ib2w7XG5cbiAgICBwdWJsaWMgc3RhdGljIGlzTXVsdGlUb2tlbihwYXJ0OiB1bmRlZmluZWQgfCBQYXRoVG9rZW4pOiBwYXJ0IGlzIHR5cGVvZiBFYWNoU3ltYm9sIHwgdHlwZW9mIEN1cnJlbnRTeW1ib2wge1xuICAgICAgICByZXR1cm4gcGFydCA9PT0gUGF0aFRva2Vucy5lYWNoIHx8IHBhcnQgPT09IFBhdGhUb2tlbnMuY3VycmVudDtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGlzU2ltcGxlVG9rZW4ocGFydDogdW5kZWZpbmVkIHwgUGF0aFRva2VuKTogcGFydCBpcyBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdHlwZW9mIHBhcnQgPT09IFwic3RyaW5nXCI7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBpc0luc3RhbmNlVG9rZW4ocGFydDogdW5kZWZpbmVkIHwgUGF0aFRva2VuKTogcGFydCBpcyBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdHlwZW9mIHBhcnQgPT09IFwic3RyaW5nXCIgJiYgL15cXGQrJC9pLnRlc3QocGFydCk7XG4gICAgfVxufVxuXG5leHBvcnQgdHlwZSBTaW1wbGVQYXRoVG9rZW4gPSBzdHJpbmc7XG5cbmV4cG9ydCB0eXBlIFBhdGhUb2tlbiA9IFNpbXBsZVBhdGhUb2tlbiB8IHR5cGVvZiBFYWNoU3ltYm9sIHwgdHlwZW9mIEN1cnJlbnRTeW1ib2w7XG5cbmV4cG9ydCBmdW5jdGlvbiBpc01vZGVsUGF0aChwYXRoOiBCaW5kaW5nUGF0aCB8IE1vZGVsUGF0aCB8IHVua25vd24pOiBwYXRoIGlzIE1vZGVsUGF0aCB7XG4gICAgcmV0dXJuIHR5cGVvZiBwYXRoICE9PSBcInN0cmluZ1wiICYmIHBhdGggaW5zdGFuY2VvZiBNb2RlbFBhdGhJbXBsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29udmVydFRvTGVnYWN5UGF0aChwYXRoOiBCaW5kaW5nUGF0aCB8IE1vZGVsUGF0aCk6IEJpbmRpbmdQYXRoIHtcbiAgICByZXR1cm4gaXNNb2RlbFBhdGgocGF0aCkgPyBwYXRoLnRvTGVnYWN5UGF0aCgpIDogcGF0aDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbnZlcnRUb0Fic29sdXRlTW9kZWxQYXRoPFIgZXh0ZW5kcyBib29sZWFuLCBBIGV4dGVuZHMgYm9vbGVhbj4oXG4gICAgcGF0aDogQmluZGluZ1BhdGggfCBJTW9kZWxQYXRoPFIsIEE+XG4pOiBJTW9kZWxQYXRoPFIsIHRydWU+O1xuZXhwb3J0IGZ1bmN0aW9uIGNvbnZlcnRUb0Fic29sdXRlTW9kZWxQYXRoKHBhdGg6IEJpbmRpbmdQYXRoIHwgQWJzb2x1dGVNb2RlbFBhdGgpOiBBYnNvbHV0ZU1vZGVsUGF0aCB7XG4gICAgcmV0dXJuIGlzTW9kZWxQYXRoKHBhdGgpID8gcGF0aCA6IGNyZWF0ZUFic29sdXRlRnJvbU1hc2socGF0aCwgUGF0aFRva2Vucy5lYWNoKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVtcHR5TW9kZWxQYXRoKCk6IFJlbGF0aXZlUmVzb2x2ZWRNb2RlbFBhdGgge1xuICAgIHJldHVybiBuZXcgTW9kZWxQYXRoSW1wbDx0cnVlLCBmYWxzZT4oW10sIGZhbHNlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVtcHR5QWJzb2x1dGVNb2RlbFBhdGgoKTogQWJzb2x1dGVSZXNvbHZlZE1vZGVsUGF0aCB7XG4gICAgcmV0dXJuIG5ldyBNb2RlbFBhdGhJbXBsPHRydWUsIHRydWU+KFtdLCB0cnVlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZU1vZGVsUGF0aChwYXRoOiBzdHJpbmcsIGFic29sdXRlOiB0cnVlKTogQWJzb2x1dGVSZXNvbHZlZE1vZGVsUGF0aDtcbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVNb2RlbFBhdGgocGF0aDogc3RyaW5nLCBhYnNvbHV0ZTogZmFsc2UpOiBSZWxhdGl2ZVJlc29sdmVkTW9kZWxQYXRoO1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZU1vZGVsUGF0aChwYXRoOiBzdHJpbmcsIGFic29sdXRlOiBcImF1dG9cIik6IFJlc29sdmVkTW9kZWxQYXRoO1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZU1vZGVsUGF0aChwYXRoOiBzdHJpbmcsIGFic29sdXRlOiBib29sZWFuIHwgXCJhdXRvXCIpOiBSZXNvbHZlZE1vZGVsUGF0aCB7XG4gICAgY29uc3QgcGFydFBhcnRTdHJpbmdzID0gcGF0aC5zcGxpdChcIi9cIik7XG4gICAgZW5zdXJlUGxhaW5QYXRoUGFydHNEb2VzTm90Q29udGFpbk11bHRpcGxpY2l0eShwYXJ0UGFydFN0cmluZ3MpO1xuICAgIGlmIChhYnNvbHV0ZSA9PT0gXCJhdXRvXCIpIHtcbiAgICAgICAgaWYgKHBhdGguc3RhcnRzV2l0aChcIi9cIikpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgTW9kZWxQYXRoSW1wbDx0cnVlLCB0cnVlPihwYXJ0UGFydFN0cmluZ3Muc2xpY2UoMSksIHRydWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBNb2RlbFBhdGhJbXBsPHRydWUsIGZhbHNlPihwYXJ0UGFydFN0cmluZ3MsIGZhbHNlKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAoYWJzb2x1dGUgJiYgcGF0aC5zdGFydHNXaXRoKFwiL1wiKSkge1xuICAgICAgICByZXR1cm4gbmV3IE1vZGVsUGF0aEltcGw8dHJ1ZSwgdHJ1ZT4ocGFydFBhcnRTdHJpbmdzLnNsaWNlKDEpLCB0cnVlKTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBNb2RlbFBhdGhJbXBsPHRydWUsIGJvb2xlYW4+KHBhcnRQYXJ0U3RyaW5ncywgYWJzb2x1dGUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlRnJvbU1hc2socGF0aDogc3RyaW5nLCBhYnNvbHV0ZTogdHJ1ZSwgbXVsdGlwbGljaXR5U3ltYm9sOiBQYXRoVG9rZW4pOiBBYnNvbHV0ZU1vZGVsUGF0aDtcbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVGcm9tTWFzayhwYXRoOiBzdHJpbmcsIGFic29sdXRlOiBmYWxzZSwgbXVsdGlwbGljaXR5U3ltYm9sOiBQYXRoVG9rZW4pOiBSZXNvbHZlZE1vZGVsUGF0aDtcbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVGcm9tTWFzayhwYXRoOiBzdHJpbmcsIGFic29sdXRlOiBcImF1dG9cIiwgbXVsdGlwbGljaXR5U3ltYm9sOiBQYXRoVG9rZW4pOiBNb2RlbFBhdGg7XG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlRnJvbU1hc2socGF0aDogc3RyaW5nLCBhYnNvbHV0ZTogYm9vbGVhbiB8IFwiYXV0b1wiLCBtdWx0aXBsaWNpdHlTeW1ib2w6IFBhdGhUb2tlbik6IE1vZGVsUGF0aCB7XG4gICAgY29uc3QgcGFydFBhcnRTdHJpbmdzID0gcGF0aC5zcGxpdChcIi9cIikubWFwKHggPT4gKHggPT09IFwiKlwiID8gbXVsdGlwbGljaXR5U3ltYm9sIDogeCkpO1xuICAgIGlmIChhYnNvbHV0ZSA9PT0gXCJhdXRvXCIpIHtcbiAgICAgICAgaWYgKHBhdGguc3RhcnRzV2l0aChcIi9cIikpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgTW9kZWxQYXRoSW1wbChwYXJ0UGFydFN0cmluZ3Muc2xpY2UoMSksIHRydWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBNb2RlbFBhdGhJbXBsKHBhcnRQYXJ0U3RyaW5ncywgZmFsc2UpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChhYnNvbHV0ZSAmJiBwYXRoLnN0YXJ0c1dpdGgoXCIvXCIpKSB7XG4gICAgICAgIHJldHVybiBuZXcgTW9kZWxQYXRoSW1wbChwYXJ0UGFydFN0cmluZ3Muc2xpY2UoMSksIHRydWUpO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IE1vZGVsUGF0aEltcGwocGFydFBhcnRTdHJpbmdzLCBhYnNvbHV0ZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVBYnNvbHV0ZUZyb21NYXNrKHBhdGg6IHN0cmluZywgbXVsdGlwbGljaXR5U3ltYm9sOiBQYXRoVG9rZW4pOiBBYnNvbHV0ZU1vZGVsUGF0aCB7XG4gICAgY29uc3QgcGFydFBhcnRTdHJpbmdzID0gcGF0aC5zcGxpdChcIi9cIikubWFwKHggPT4gKHggPT09IFwiKlwiID8gbXVsdGlwbGljaXR5U3ltYm9sIDogeCkpO1xuICAgIGlmIChwYXRoLnN0YXJ0c1dpdGgoXCIvXCIpKSB7XG4gICAgICAgIHJldHVybiBuZXcgTW9kZWxQYXRoSW1wbChwYXJ0UGFydFN0cmluZ3Muc2xpY2UoMSksIHRydWUpO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IE1vZGVsUGF0aEltcGwocGFydFBhcnRTdHJpbmdzLCB0cnVlKTtcbn1cblxuZnVuY3Rpb24gZW5zdXJlUGxhaW5QYXRoUGFydHNEb2VzTm90Q29udGFpbk11bHRpcGxpY2l0eShwYXJ0czogc3RyaW5nW10pOiB2b2lkIHtcbiAgICBpZiAocGFydHMuc29tZSh4ID0+IHggPT09IFwiKlwiKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJQYXRoIG11c3Qgbm90IGNvbnRhaW4gKiBzeW1ib2xcIik7XG4gICAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQWJzb2x1dGUocGF0aDogc3RyaW5nKTogQWJzb2x1dGVSZXNvbHZlZE1vZGVsUGF0aCB7XG4gICAgY29uc3QgcGFydFBhcnRTdHJpbmdzID0gcGF0aC5zcGxpdChcIi9cIik7XG4gICAgZW5zdXJlUGxhaW5QYXRoUGFydHNEb2VzTm90Q29udGFpbk11bHRpcGxpY2l0eShwYXJ0UGFydFN0cmluZ3MpO1xuICAgIGlmIChwYXRoLnN0YXJ0c1dpdGgoXCIvXCIpKSB7XG4gICAgICAgIHJldHVybiBuZXcgTW9kZWxQYXRoSW1wbDx0cnVlLCB0cnVlPihwYXJ0UGFydFN0cmluZ3Muc2xpY2UoMSksIHRydWUpO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IE1vZGVsUGF0aEltcGw8dHJ1ZSwgdHJ1ZT4ocGFydFBhcnRTdHJpbmdzLCB0cnVlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVJlbGF0aXZlUmVzb2x2ZWRNb2RlbFBhdGgocGF0aDogc3RyaW5nKTogUmVsYXRpdmVSZXNvbHZlZE1vZGVsUGF0aCB7XG4gICAgY29uc3QgcGFydFBhcnRTdHJpbmdzID0gcGF0aC5zcGxpdChcIi9cIik7XG4gICAgZW5zdXJlUGxhaW5QYXRoUGFydHNEb2VzTm90Q29udGFpbk11bHRpcGxpY2l0eShwYXJ0UGFydFN0cmluZ3MpO1xuICAgIHJldHVybiBuZXcgTW9kZWxQYXRoSW1wbDx0cnVlLCBmYWxzZT4ocGFydFBhcnRTdHJpbmdzLCBmYWxzZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVBYnNvbHV0ZUZyb21Ub2tlbnModG9rZW5zOiBQYXRoVG9rZW5bXSk6IEFic29sdXRlTW9kZWxQYXRoIHtcbiAgICByZXR1cm4gbmV3IE1vZGVsUGF0aEltcGw8ZmFsc2UsIHRydWU+KHRva2VucywgdHJ1ZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVBYnNvbHV0ZVJlc29sdmVkRnJvbVRva2Vucyh0b2tlbnM6IHN0cmluZ1tdKTogQWJzb2x1dGVSZXNvbHZlZE1vZGVsUGF0aCB7XG4gICAgZW5zdXJlUGxhaW5QYXRoUGFydHNEb2VzTm90Q29udGFpbk11bHRpcGxpY2l0eSh0b2tlbnMpO1xuICAgIHJldHVybiBuZXcgTW9kZWxQYXRoSW1wbDx0cnVlLCB0cnVlPih0b2tlbnMsIHRydWUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUmVsYXRpdmVGcm9tVG9rZW5zKHRva2VuczogcmVhZG9ubHkgc3RyaW5nW10pOiBSZWxhdGl2ZVJlc29sdmVkTW9kZWxQYXRoO1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVJlbGF0aXZlRnJvbVRva2Vucyh0b2tlbnM6IHJlYWRvbmx5IFBhdGhUb2tlbltdKTogUmVsYXRpdmVNb2RlbFBhdGg7XG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUmVsYXRpdmVGcm9tVG9rZW5zKHRva2VuczogcmVhZG9ubHkgUGF0aFRva2VuW10pOiBSZWxhdGl2ZU1vZGVsUGF0aCB7XG4gICAgcmV0dXJuIG5ldyBNb2RlbFBhdGhJbXBsPGZhbHNlLCBmYWxzZT4odG9rZW5zLCBmYWxzZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBqb2luTW9kZWxQYXRocyguLi5wYXJ0czogQXJyYXk8TW9kZWxQYXRoIHwgUGF0aFRva2VuIHwgUGF0aFRva2VuW10+KTogTW9kZWxQYXRoIHtcbiAgICBsZXQgYWJzb2x1dGUgPSBmYWxzZTtcbiAgICBsZXQgcmVzdWx0UGFydHM6IFBhdGhUb2tlbltdID0gW107XG4gICAgZm9yIChjb25zdCBqb2luSXRlbSBvZiBwYXJ0cykge1xuICAgICAgICBpZiAodHlwZW9mIGpvaW5JdGVtID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICByZXN1bHRQYXJ0cy5wdXNoKGpvaW5JdGVtKTtcbiAgICAgICAgfSBlbHNlIGlmIChpc01vZGVsUGF0aChqb2luSXRlbSkpIHtcbiAgICAgICAgICAgIGlmIChqb2luSXRlbS5pc0Fic29sdXRlKCkpIHtcbiAgICAgICAgICAgICAgICBhYnNvbHV0ZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgcmVzdWx0UGFydHMgPSBbLi4uam9pbkl0ZW0uZ2V0UGF0aFBhcnRzQXNBcnJheSgpXTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0UGFydHMucHVzaCguLi5qb2luSXRlbS5nZXRQYXRoUGFydHNBc0FycmF5KCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoam9pbkl0ZW0pKSB7XG4gICAgICAgICAgICByZXN1bHRQYXJ0cy5wdXNoKC4uLmpvaW5JdGVtKTtcbiAgICAgICAgfSBlbHNlIGlmIChQYXRoVG9rZW5zLmlzTXVsdGlUb2tlbihqb2luSXRlbSkpIHtcbiAgICAgICAgICAgIHJlc3VsdFBhcnRzLnB1c2goam9pbkl0ZW0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBNb2RlbFBhdGhJbXBsKHJlc3VsdFBhcnRzLCBhYnNvbHV0ZSk7XG59XG5cbmV4cG9ydCBjbGFzcyBBYnNvbHV0ZU1vZGVsRmllbGRQYXRoIGltcGxlbWVudHMgSUVxdWF0YWJsZTxBYnNvbHV0ZU1vZGVsRmllbGRQYXRoPiB7XG4gICAgcHVibGljIHJlYWRvbmx5IHBhdGg6IEFic29sdXRlTW9kZWxQYXRoO1xuICAgIHB1YmxpYyByZWFkb25seSBmaWVsZDogVmlld01vZGVsRmllbGROYW1lIHwgXCIkZXJyb3JDb3VudFwiIHwgXCIkd2FybmluZ0NvdW50XCI7XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IocGF0aDogQWJzb2x1dGVNb2RlbFBhdGgsIGZpZWxkTmFtZTogVmlld01vZGVsRmllbGROYW1lIHwgXCIkZXJyb3JDb3VudFwiIHwgXCIkd2FybmluZ0NvdW50XCIpIHtcbiAgICAgICAgdGhpcy5wYXRoID0gcGF0aDtcbiAgICAgICAgdGhpcy5maWVsZCA9IGZpZWxkTmFtZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0SGFzaCgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5wYXRoLmdldEhhc2goKSArIGdldFNpbXBsZUhhc2hCeVN0cmluZyh0aGlzLmZpZWxkKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgaXNFcXVhbHMoXG4gICAgICAgIG1vZGVsUGF0aDogQWJzb2x1dGVNb2RlbEZpZWxkUGF0aCxcbiAgICAgICAgZWFjaEN1cnJlbnRDb2xsaXNpb246IEVhY2hDdXJyZW50Q29sbGlzaW9uID0gRWFjaEN1cnJlbnRDb2xsaXNpb24uQXJlU2FtZVxuICAgICk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5wYXRoLmlzRXF1YWxzKG1vZGVsUGF0aC5wYXRoLCBlYWNoQ3VycmVudENvbGxpc2lvbikgJiYgdGhpcy5maWVsZCA9PT0gbW9kZWxQYXRoLmZpZWxkO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgY3JlYXRlRnJvbVN0cmluZyhwYXRoV2l0aEZpZWxkTmFtZTogc3RyaW5nKTogQWJzb2x1dGVNb2RlbEZpZWxkUGF0aCB7XG4gICAgICAgIGlmIChwYXRoV2l0aEZpZWxkTmFtZS5lbmRzV2l0aChcIi4kZXJyb3JDb3VudFwiKSkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBBYnNvbHV0ZU1vZGVsRmllbGRQYXRoKFxuICAgICAgICAgICAgICAgIGNyZWF0ZUFic29sdXRlKHBhdGhXaXRoRmllbGROYW1lLnJlcGxhY2UoXCIuJGVycm9yQ291bnRcIiwgXCJcIikpLFxuICAgICAgICAgICAgICAgIFwiJGVycm9yQ291bnRcIlxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocGF0aFdpdGhGaWVsZE5hbWUuZW5kc1dpdGgoXCIuJHdhcm5pbmdDb3VudFwiKSkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBBYnNvbHV0ZU1vZGVsRmllbGRQYXRoKFxuICAgICAgICAgICAgICAgIGNyZWF0ZUFic29sdXRlKHBhdGhXaXRoRmllbGROYW1lLnJlcGxhY2UoXCIuJHdhcm5pbmdDb3VudFwiLCBcIlwiKSksXG4gICAgICAgICAgICAgICAgXCIkd2FybmluZ0NvdW50XCJcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBBYnNvbHV0ZU1vZGVsRmllbGRQYXRoKGNyZWF0ZUFic29sdXRlKHBhdGhXaXRoRmllbGROYW1lKSwgXCJ2YWx1ZVwiKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGNyZWF0ZUZyb21NYXNrKHBhdGhXaXRoRmllbGROYW1lOiBzdHJpbmcsIG11bHRpcGxpY2l0eVN5bWJvbDogUGF0aFRva2VuKTogQWJzb2x1dGVNb2RlbEZpZWxkUGF0aCB7XG4gICAgICAgIGlmIChwYXRoV2l0aEZpZWxkTmFtZS5lbmRzV2l0aChcIi4kZXJyb3JDb3VudFwiKSkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBBYnNvbHV0ZU1vZGVsRmllbGRQYXRoKFxuICAgICAgICAgICAgICAgIGNyZWF0ZUFic29sdXRlRnJvbU1hc2socGF0aFdpdGhGaWVsZE5hbWUucmVwbGFjZShcIi4kZXJyb3JDb3VudFwiLCBcIlwiKSwgbXVsdGlwbGljaXR5U3ltYm9sKSxcbiAgICAgICAgICAgICAgICBcIiRlcnJvckNvdW50XCJcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBhdGhXaXRoRmllbGROYW1lLmVuZHNXaXRoKFwiLiR3YXJuaW5nQ291bnRcIikpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgQWJzb2x1dGVNb2RlbEZpZWxkUGF0aChcbiAgICAgICAgICAgICAgICBjcmVhdGVBYnNvbHV0ZUZyb21NYXNrKHBhdGhXaXRoRmllbGROYW1lLnJlcGxhY2UoXCIuJHdhcm5pbmdDb3VudFwiLCBcIlwiKSwgbXVsdGlwbGljaXR5U3ltYm9sKSxcbiAgICAgICAgICAgICAgICBcIiR3YXJuaW5nQ291bnRcIlxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocGF0aFdpdGhGaWVsZE5hbWUuZW5kc1dpdGgoXCIuZXJyb3JzQ291bnRcIikpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgQWJzb2x1dGVNb2RlbEZpZWxkUGF0aChcbiAgICAgICAgICAgICAgICBjcmVhdGVBYnNvbHV0ZUZyb21NYXNrKHBhdGhXaXRoRmllbGROYW1lLnJlcGxhY2UoXCIuZXJyb3JzQ291bnRcIiwgXCJcIiksIG11bHRpcGxpY2l0eVN5bWJvbCksXG4gICAgICAgICAgICAgICAgXCJlcnJvcnNDb3VudFwiXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwYXRoV2l0aEZpZWxkTmFtZS5lbmRzV2l0aChcIi53YXJuaW5nc0NvdW50XCIpKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IEFic29sdXRlTW9kZWxGaWVsZFBhdGgoXG4gICAgICAgICAgICAgICAgY3JlYXRlQWJzb2x1dGVGcm9tTWFzayhwYXRoV2l0aEZpZWxkTmFtZS5yZXBsYWNlKFwiLndhcm5pbmdzQ291bnRcIiwgXCJcIiksIG11bHRpcGxpY2l0eVN5bWJvbCksXG4gICAgICAgICAgICAgICAgXCJ3YXJuaW5nc0NvdW50XCJcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBBYnNvbHV0ZU1vZGVsRmllbGRQYXRoKGNyZWF0ZUFic29sdXRlRnJvbU1hc2socGF0aFdpdGhGaWVsZE5hbWUsIG11bHRpcGxpY2l0eVN5bWJvbCksIFwidmFsdWVcIik7XG4gICAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIElNb2RlbFBhdGg8VFJlc29sdmVkIGV4dGVuZHMgYm9vbGVhbiwgVEFic29sdXRlIGV4dGVuZHMgYm9vbGVhbj5cbiAgICBleHRlbmRzIElFcXVhdGFibGU8SU1vZGVsUGF0aDxib29sZWFuLCBib29sZWFuPj4ge1xuICAgIHJlYWRvbmx5IHJlc29sdmVkOiBUUmVzb2x2ZWQ7XG4gICAgcmVhZG9ubHkgYWJzb2x1dGU6IFRBYnNvbHV0ZTtcblxuICAgIGlzRXF1YWxzKG1vZGVsUGF0aDogTW9kZWxQYXRoLCBlYWNoQ3VycmVudENvbGxpc2lvbj86IEVhY2hDdXJyZW50Q29sbGlzaW9uKTogYm9vbGVhbjtcbiAgICBnZXRIYXNoKGVhY2hDdXJyZW50Q29sbGlzaW9uPzogRWFjaEN1cnJlbnRDb2xsaXNpb24pOiBudW1iZXI7XG5cbiAgICBpc1Jlc29sdmVkKCk6IHRoaXMgaXMgSU1vZGVsUGF0aDx0cnVlLCBUQWJzb2x1dGU+O1xuICAgIGlzQWJzb2x1dGUoKTogdGhpcyBpcyBJTW9kZWxQYXRoPFRSZXNvbHZlZCwgdHJ1ZT47XG4gICAgdG9BYnNvbHV0ZSgpOiBJTW9kZWxQYXRoPFRSZXNvbHZlZCwgdHJ1ZT47XG5cbiAgICBqb2luV2l0aCguLi5wYXRoOiBzdHJpbmdbXSk6IElNb2RlbFBhdGg8VFJlc29sdmVkLCBUQWJzb2x1dGU+O1xuICAgIGpvaW5XaXRoKC4uLnBhdGg6IFBhdGhUb2tlbltdKTogSU1vZGVsUGF0aDxib29sZWFuLCBUQWJzb2x1dGU+O1xuICAgIGpvaW5XaXRoKC4uLnBhdGg6IEFycmF5PFJlc29sdmVkTW9kZWxQYXRoIHwgc3RyaW5nPik6IElNb2RlbFBhdGg8VFJlc29sdmVkLCBUQWJzb2x1dGU+O1xuICAgIGpvaW5XaXRoKC4uLnBhdGg6IEFycmF5PEFic29sdXRlUmVzb2x2ZWRNb2RlbFBhdGggfCBzdHJpbmc+KTogSU1vZGVsUGF0aDxUUmVzb2x2ZWQsIHRydWU+O1xuICAgIGpvaW5XaXRoKC4uLnBhdGg6IEFycmF5PE1vZGVsUGF0aCB8IFBhdGhUb2tlbj4pOiBJTW9kZWxQYXRoPGJvb2xlYW4sIFRBYnNvbHV0ZT47XG5cbiAgICBnZXRQYXRoUGFydHMoKTogSXRlcmFibGU8UGF0aFRva2VuU3BlYzxUUmVzb2x2ZWQ+PjtcbiAgICBnZXRQYXRoUGFydHNBc0FycmF5KCk6IFJlYWRvbmx5QXJyYXk8UGF0aFRva2VuU3BlYzxUUmVzb2x2ZWQ+PjtcbiAgICBnZXRTaW1wbGVUb2tlbnNTdHJpY3QoKTogSXRlcmFibGU8U2ltcGxlUGF0aFRva2VuPjtcbiAgICBnZXRTaW1wbGVUb2tlbnNBc0FycmF5U3RyaWN0KCk6IHJlYWRvbmx5IFNpbXBsZVBhdGhUb2tlbltdO1xuXG4gICAgcmVzb2x2ZUFsbChpbnN0YW5jZTogc3RyaW5nKTogTW9kZWxQYXRoO1xuICAgIGlzQ29udGFpbkl0ZXJhdGlvbigpOiBib29sZWFuO1xuICAgIGlzQ29udGFpbkN1cnJlbnRJdGVyYXRpb24oKTogYm9vbGVhbjtcbiAgICBnZXRMYXN0TGlzdFBhdGgoKTogUGF0aFRva2VuW107XG4gICAgaXNFbmRzV2l0aEl0ZXJhdGlvbigpOiBib29sZWFuO1xuICAgIGlzSW5jbHVkZXMobW9kZWxQYXRoOiBNb2RlbFBhdGgpOiBib29sZWFuO1xuICAgIGdldEl0ZXJhdGlvblJhbmsoKTogbnVtYmVyO1xuICAgIGlzRW1wdHkoKTogYm9vbGVhbjtcbiAgICBtYXRjaEZvcihtb2RlbFBhdGg6IE1vZGVsUGF0aCk6IFBhdGhNYXRjaGluZztcbiAgICBzcGxpdEJ5TXVsdGlwbGljaXR5KCk6IEl0ZXJhYmxlPFJlc29sdmVkTW9kZWxQYXRoIHwgdHlwZW9mIEVhY2hTeW1ib2wgfCB0eXBlb2YgQ3VycmVudFN5bWJvbD47XG4gICAgbm9ybWFsaXplKCk6IElNb2RlbFBhdGg8VFJlc29sdmVkLCBUQWJzb2x1dGU+O1xuICAgIHRvQ3VycmVudEl0ZXJhdGlvbigpOiBJTW9kZWxQYXRoPFRSZXNvbHZlZCwgVEFic29sdXRlPjtcbiAgICB0b0VhY2hJdGVyYXRpb24oKTogSU1vZGVsUGF0aDxUUmVzb2x2ZWQsIFRBYnNvbHV0ZT47XG4gICAgZ2V0QWxsUGFyZW50UGF0aHMoKTogSXRlcmFibGU8TW9kZWxQYXRoPjtcbiAgICB0cmltTGFzdFN0YXJJZkxhc3RUb2tlbigpOiBJTW9kZWxQYXRoPFRSZXNvbHZlZCwgVEFic29sdXRlPjtcbiAgICBnZXRQYXJlbnRQYXRoKCk6IElNb2RlbFBhdGg8VFJlc29sdmVkLCBUQWJzb2x1dGU+O1xuICAgIGFwcGx5SW5zdGFuY2VzRGlydHkoaW5zdGFuY2VzOiBTaW1wbGVQYXRoVG9rZW5bXSk6IElNb2RlbFBhdGg8VFJlc29sdmVkLCBUQWJzb2x1dGU+O1xuXG4gICAgdG9TdHJpbmcoKTogc3RyaW5nO1xuICAgIHRvTGVnYWN5UGF0aCgpOiBzdHJpbmc7XG59XG5cbmV4cG9ydCB0eXBlIE1vZGVsUGF0aCA9IElNb2RlbFBhdGg8Ym9vbGVhbiwgYm9vbGVhbj47XG5leHBvcnQgdHlwZSBSZXNvbHZlZE1vZGVsUGF0aCA9IElNb2RlbFBhdGg8dHJ1ZSwgYm9vbGVhbj47XG5leHBvcnQgdHlwZSBBYnNvbHV0ZU1vZGVsUGF0aCA9IElNb2RlbFBhdGg8Ym9vbGVhbiwgdHJ1ZT47XG5leHBvcnQgdHlwZSBBYnNvbHV0ZVJlc29sdmVkTW9kZWxQYXRoID0gSU1vZGVsUGF0aDx0cnVlLCB0cnVlPjtcblxuZXhwb3J0IHR5cGUgUmVsYXRpdmVNb2RlbFBhdGggPSBJTW9kZWxQYXRoPGJvb2xlYW4sIGZhbHNlPjtcbmV4cG9ydCB0eXBlIFJlbGF0aXZlUmVzb2x2ZWRNb2RlbFBhdGggPSBJTW9kZWxQYXRoPHRydWUsIGZhbHNlPjtcblxudHlwZSBQYXRoVG9rZW5TcGVjPFRSZXNvbHZlZCBleHRlbmRzIGJvb2xlYW4+ID0gVFJlc29sdmVkIGV4dGVuZHMgdHJ1ZSA/IHN0cmluZyA6IFBhdGhUb2tlbjtcblxudHlwZSBQYXRoVG9rZW5zU3BlYzxUUmVzb2x2ZWQgZXh0ZW5kcyBib29sZWFuPiA9IEFycmF5PFBhdGhUb2tlblNwZWM8VFJlc29sdmVkPj47XG5cbnR5cGUgUmVhZG9ubHlQYXRoVG9rZW5zU3BlYzxUUmVzb2x2ZWQgZXh0ZW5kcyBib29sZWFuPiA9IFJlYWRvbmx5QXJyYXk8UGF0aFRva2VuU3BlYzxUUmVzb2x2ZWQ+PjtcblxuZnVuY3Rpb24gaXNBbGxUb2tlbnNSZXNvbHZlZDxUUmVzb2x2ZWQgZXh0ZW5kcyBib29sZWFuPih0b2tlbnM6IFJlYWRvbmx5UGF0aFRva2Vuc1NwZWM8VFJlc29sdmVkPik6IFRSZXNvbHZlZCB7XG4gICAgLy8g0K8g0YfRgtC+LdGC0L4g0L3QtdC80L7Qs9GDINGB0L7QvtCx0YDQsNC30LjRgtGMINC60LDQuiDRgtGD0YIg0LLRgdGRINGB0YLRgNC+0LPQviDQvdCw0L/QuNGB0LDRgtGMLi4uXG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvclxuICAgIHJldHVybiB0b2tlbnMuZXZlcnkoUGF0aFRva2Vucy5pc1NpbXBsZVRva2VuKTtcbn1cblxuZXhwb3J0IGNsYXNzIE1vZGVsUGF0aEltcGw8VFJlc29sdmVkIGV4dGVuZHMgYm9vbGVhbiwgVEFic29sdXRlIGV4dGVuZHMgYm9vbGVhbj5cbiAgICBpbXBsZW1lbnRzIElFcXVhdGFibGU8TW9kZWxQYXRoPiwgSU1vZGVsUGF0aDxUUmVzb2x2ZWQsIFRBYnNvbHV0ZT5cbntcbiAgICBwcml2YXRlIHJlYWRvbmx5IHRva2VuczogUmVhZG9ubHlQYXRoVG9rZW5zU3BlYzxUUmVzb2x2ZWQ+O1xuICAgIHB1YmxpYyByZWFkb25seSBhYnNvbHV0ZTogVEFic29sdXRlO1xuICAgIHByaXZhdGUgbGVnYWN5UGF0aDogdW5kZWZpbmVkIHwgc3RyaW5nO1xuXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKHBhdGhQYXJ0czogUmVhZG9ubHlQYXRoVG9rZW5zU3BlYzxUUmVzb2x2ZWQ+LCBhYnNvbHV0ZTogVEFic29sdXRlKSB7XG4gICAgICAgIHRoaXMudG9rZW5zID0gcGF0aFBhcnRzLmZpbHRlcih4ID0+IHggIT09IFwiXCIpO1xuICAgICAgICB0aGlzLmFic29sdXRlID0gYWJzb2x1dGU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCByZXNvbHZlZCgpOiBUUmVzb2x2ZWQge1xuICAgICAgICByZXR1cm4gaXNBbGxUb2tlbnNSZXNvbHZlZCh0aGlzLnRva2Vucyk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldFBhdGhQYXJ0cygpOiBJdGVyYWJsZTxQYXRoVG9rZW5TcGVjPFRSZXNvbHZlZD4+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMudG9rZW5zO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRQYXRoUGFydHNBc0FycmF5KCk6IFJlYWRvbmx5QXJyYXk8UGF0aFRva2VuU3BlYzxUUmVzb2x2ZWQ+PiB7XG4gICAgICAgIHJldHVybiB0aGlzLnRva2VucztcbiAgICB9XG5cbiAgICBwdWJsaWMgKmdldFNpbXBsZVRva2Vuc1N0cmljdCgpOiBJdGVyYWJsZTxTaW1wbGVQYXRoVG9rZW4+IHtcbiAgICAgICAgZm9yIChjb25zdCB0b2tlbiBvZiB0aGlzLnRva2Vucykge1xuICAgICAgICAgICAgaWYgKCFQYXRoVG9rZW5zLmlzU2ltcGxlVG9rZW4odG9rZW4pKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUGF0aCBtdXN0IG5vdCBjb250YWluIHNwZWMgdG9rZW5zXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgeWllbGQgdG9rZW47XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0U2ltcGxlVG9rZW5zQXNBcnJheVN0cmljdCgpOiByZWFkb25seSBTaW1wbGVQYXRoVG9rZW5bXSB7XG4gICAgICAgIGZvciAoY29uc3QgdG9rZW4gb2YgdGhpcy50b2tlbnMpIHtcbiAgICAgICAgICAgIGlmICghUGF0aFRva2Vucy5pc1NpbXBsZVRva2VuKHRva2VuKSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlBhdGggbXVzdCBub3QgY29udGFpbiBzcGVjIHRva2Vuc1wiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyDQn9GA0L7QstC10YDQutCwINCy0YvRiNC1INCz0LDRgNCw0LXQvdGC0LjRgNGD0LXRgiDRh9GC0L4g0LHRg9C00YPRgiDRgtC+0LvRjNC60L4gU2ltcGxlUGF0aFRva2VuLlxuICAgICAgICAvLyDQktGB0LUgbWFwINC4IGZpbHRlciDRg9Cx0YDQsNC90Ysg0LTQu9GPINC/0YDQvtC40LfQstC+0LTQuNGC0LXQu9GM0L3QvtGB0YLQuFxuICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgIHJldHVybiB0aGlzLnRva2VucztcbiAgICB9XG5cbiAgICBwdWJsaWMgam9pbldpdGgoLi4ucGF0aDogc3RyaW5nW10pOiBJTW9kZWxQYXRoPFRSZXNvbHZlZCwgVEFic29sdXRlPjtcbiAgICBwdWJsaWMgam9pbldpdGgoLi4ucGF0aDogUGF0aFRva2VuW10pOiBJTW9kZWxQYXRoPGJvb2xlYW4sIFRBYnNvbHV0ZT47XG4gICAgcHVibGljIGpvaW5XaXRoKC4uLnBhdGg6IEFycmF5PFJlc29sdmVkTW9kZWxQYXRoIHwgc3RyaW5nPik6IElNb2RlbFBhdGg8VFJlc29sdmVkLCBUQWJzb2x1dGU+O1xuICAgIHB1YmxpYyBqb2luV2l0aCguLi5wYXRoOiBBcnJheTxBYnNvbHV0ZVJlc29sdmVkTW9kZWxQYXRoIHwgc3RyaW5nPik6IElNb2RlbFBhdGg8VFJlc29sdmVkLCB0cnVlPjtcbiAgICBwdWJsaWMgam9pbldpdGgoLi4ucGF0aDogQXJyYXk8TW9kZWxQYXRoIHwgUGF0aFRva2VuPik6IElNb2RlbFBhdGg8Ym9vbGVhbiwgVEFic29sdXRlPjtcbiAgICBwdWJsaWMgam9pbldpdGgoLi4ucGF0aDogQXJyYXk8TW9kZWxQYXRoIHwgUGF0aFRva2VuPik6IElNb2RlbFBhdGg8Ym9vbGVhbiwgYm9vbGVhbj4ge1xuICAgICAgICByZXR1cm4gam9pbk1vZGVsUGF0aHModGhpcywgLi4ucGF0aCk7XG4gICAgfVxuXG4gICAgcHVibGljIGlzUmVzb2x2ZWQoKTogdGhpcyBpcyBJTW9kZWxQYXRoPHRydWUsIFRBYnNvbHV0ZT4ge1xuICAgICAgICByZXR1cm4gaXNBbGxUb2tlbnNSZXNvbHZlZCh0aGlzLnRva2Vucyk7XG4gICAgfVxuXG4gICAgcHVibGljIHJlc29sdmVBbGwoaW5zdGFuY2U6IHN0cmluZyk6IE1vZGVsUGF0aCB7XG4gICAgICAgIGNvbnN0IHRva2VucyA9IHRoaXMudG9rZW5zLm1hcCh0b2tlbiA9PiB7XG4gICAgICAgICAgICBpZiAoUGF0aFRva2Vucy5pc1NpbXBsZVRva2VuKHRva2VuKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0b2tlbjtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGluc3RhbmNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gbmV3IE1vZGVsUGF0aEltcGwodG9rZW5zLCB0aGlzLmFic29sdXRlKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgaXNDb250YWluSXRlcmF0aW9uKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy50b2tlbnMuc29tZSh4ID0+IHggPT09IFBhdGhUb2tlbnMuZWFjaCk7XG4gICAgfVxuXG4gICAgcHVibGljIGlzQ29udGFpbkN1cnJlbnRJdGVyYXRpb24oKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLnRva2Vucy5zb21lKHggPT4geCA9PT0gUGF0aFRva2Vucy5jdXJyZW50KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0TGFzdExpc3RQYXRoKCk6IFBhdGhUb2tlbltdIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzQ29udGFpbkl0ZXJhdGlvbigpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJQYXRoIG11c3QgY29udGFpbiBpdGVyYXRpb25cIik7XG4gICAgICAgIH1cblxuICAgICAgICAvLyDQn9GA0L7QstC10YDQutCwINCy0YvRiNC1INCz0LDRgNCw0L3RgtC40YDRg9C10YIsINGH0YLQviDQsdGD0LTQtdGCIFBhdGhUb2tlbnMuZWFjaFxuICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgIGNvbnN0IGxhc3RJdGVyYXRpb25JbmRleCA9IHRoaXMudG9rZW5zLmxhc3RJbmRleE9mKFBhdGhUb2tlbnMuZWFjaCk7XG4gICAgICAgIHJldHVybiB0aGlzLnRva2Vucy5zbGljZSgwLCBsYXN0SXRlcmF0aW9uSW5kZXgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBpc0VuZHNXaXRoSXRlcmF0aW9uKCk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCBsYXN0SXRlbSA9IEl0ZXJVdGlscy5sYXN0KHRoaXMudG9rZW5zKTtcbiAgICAgICAgcmV0dXJuIGxhc3RJdGVtID09IFBhdGhUb2tlbnMuZWFjaDtcbiAgICB9XG5cbiAgICBwdWJsaWMgaXNBYnNvbHV0ZSgpOiB0aGlzIGlzIElNb2RlbFBhdGg8VFJlc29sdmVkLCB0cnVlPiB7XG4gICAgICAgIHJldHVybiB0aGlzLmFic29sdXRlO1xuICAgIH1cblxuICAgIHB1YmxpYyB0b1N0cmluZygpOiBzdHJpbmcge1xuICAgICAgICBpZiAodGhpcy50b2tlbnMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gXCJcIjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gKHRoaXMuYWJzb2x1dGUgPyBcIi9cIiA6IFwiXCIpICsgdGhpcy50b2tlbnMubWFwKHggPT4gdGhpcy5wYXRoUGFydFRvU3RyaW5nKHgpKS5qb2luKFwiL1wiKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgdG9MZWdhY3lQYXRoKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLmxlZ2FjeVBhdGggPz8gKHRoaXMubGVnYWN5UGF0aCA9IHRoaXMudG9rZW5zLm1hcCh4ID0+IHRoaXMucGF0aFBhcnRUb1N0cmluZyh4KSkuam9pbihcIi9cIikpO1xuICAgIH1cblxuICAgIHB1YmxpYyBpc0VxdWFscyhcbiAgICAgICAgbW9kZWxQYXRoOiBNb2RlbFBhdGgsXG4gICAgICAgIGVhY2hDdXJyZW50Q29sbGlzaW9uOiBFYWNoQ3VycmVudENvbGxpc2lvbiA9IEVhY2hDdXJyZW50Q29sbGlzaW9uLkFyZVNhbWVcbiAgICApOiBib29sZWFuIHtcbiAgICAgICAgaWYgKGVhY2hDdXJyZW50Q29sbGlzaW9uID09PSBFYWNoQ3VycmVudENvbGxpc2lvbi5BcmVTYW1lKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy50b0xlZ2FjeVBhdGgoKSA9PT0gbW9kZWxQYXRoLnRvTGVnYWN5UGF0aCgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICB0aGlzLmlzQWJzb2x1dGUoKSA9PT0gbW9kZWxQYXRoLmlzQWJzb2x1dGUoKSAmJlxuICAgICAgICAgICAgICAgIEl0ZXJhdG9yLmZyb20oSXRlclV0aWxzLnppcCh0aGlzLmdldFBhdGhQYXJ0cygpLCBtb2RlbFBhdGguZ2V0UGF0aFBhcnRzKCkpKS5ldmVyeShcbiAgICAgICAgICAgICAgICAgICAgKFt0MSwgdDJdKSA9PiB0MSA9PT0gdDJcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog0JLRgdC10LPQtNCwINGG0LXQu9C+0LUg0L/QvtC70L7QttC40YLQtdC70YzQvdC+0LUg0LHQtdC30LfQvdCw0LrQvtCy0L7QtSAzMi3QsdC40YLQvdC+0LUg0YfQuNGB0LvQvlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRIYXNoKGVhY2hDdXJyZW50Q29sbGlzaW9uOiBFYWNoQ3VycmVudENvbGxpc2lvbiA9IEVhY2hDdXJyZW50Q29sbGlzaW9uLkFyZVNhbWUpOiBudW1iZXIge1xuICAgICAgICBsZXQgaGFzaCA9IDUzODE7XG4gICAgICAgIGZvciAoY29uc3QgdG9rZW4gb2YgcmV2ZXJzZUFycmF5KHRoaXMudG9rZW5zKSkge1xuICAgICAgICAgICAgbGV0IGN1cnJlbnRTdHI6IHN0cmluZztcbiAgICAgICAgICAgIGlmIChQYXRoVG9rZW5zLmlzU2ltcGxlVG9rZW4odG9rZW4pKSB7XG4gICAgICAgICAgICAgICAgY3VycmVudFN0ciA9IHRva2VuO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoZWFjaEN1cnJlbnRDb2xsaXNpb24gPT09IEVhY2hDdXJyZW50Q29sbGlzaW9uLkFyZURpZmZlcmVudCkge1xuICAgICAgICAgICAgICAgICAgICBjdXJyZW50U3RyID0gdG9rZW4gPT09IFBhdGhUb2tlbnMuZWFjaCA/IFwiKlwiIDogXCIhXCI7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFN0ciA9IFwiKlwiO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxldCBzdHJpbmdJbmRleCA9IGN1cnJlbnRTdHIubGVuZ3RoO1xuICAgICAgICAgICAgd2hpbGUgKHN0cmluZ0luZGV4KSB7XG4gICAgICAgICAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLWJpdHdpc2VcbiAgICAgICAgICAgICAgICBoYXNoID0gKGhhc2ggKiAzMykgXiBjdXJyZW50U3RyLmNoYXJDb2RlQXQoLS1zdHJpbmdJbmRleCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvKlxuICAgICAgICAgICAgdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLWJpdHdpc2VcbiAgICAgICAgICAgIEphdmFTY3JpcHQgZG9lcyBiaXR3aXNlIG9wZXJhdGlvbnMgKGxpa2UgWE9SLCBhYm92ZSkgb24gMzItYml0IHNpZ25lZFxuICAgICAgICAgICAgaW50ZWdlcnMuIFNpbmNlIHdlIHdhbnQgdGhlIHJlc3VsdHMgdG8gYmUgYWx3YXlzIHBvc2l0aXZlLCBjb252ZXJ0IHRoZVxuICAgICAgICAgICAgc2lnbmVkIGludCB0byBhbiB1bnNpZ25lZCBieSBkb2luZyBhbiB1bnNpZ25lZCBiaXRzaGlmdC5cbiAgICAgICovXG4gICAgICAgIHJldHVybiBoYXNoID4+PiAwO1xuICAgIH1cblxuICAgIHB1YmxpYyBpc0luY2x1ZGVzKG1vZGVsUGF0aDogTW9kZWxQYXRoKTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IHRhcmdldFRva2VucyA9IG1vZGVsUGF0aC5nZXRQYXRoUGFydHNBc0FycmF5KCk7XG4gICAgICAgIGlmICh0aGlzLnRva2Vucy5sZW5ndGggIT09IHRhcmdldFRva2Vucy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMudG9rZW5zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBsZWZ0UGFydCA9IHRoaXMudG9rZW5zW2ldO1xuICAgICAgICAgICAgY29uc3QgcmlnaHRQYXJ0ID0gdGFyZ2V0VG9rZW5zW2ldO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBsZWZ0UGFydCA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgcmlnaHRQYXJ0ID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChsZWZ0UGFydCAhPT0gcmlnaHRQYXJ0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAobGVmdFBhcnQgPT09IFBhdGhUb2tlbnMuY3VycmVudCB8fCBsZWZ0UGFydCA9PT0gUGF0aFRva2Vucy5lYWNoKSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiByaWdodFBhcnQgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFpc0Zpbml0ZShOdW1iZXIocmlnaHRQYXJ0KSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBpZiAocmlnaHRQYXJ0ICE9PSBQYXRoVG9rZW5zLmN1cnJlbnQgJiYgcmlnaHRQYXJ0ICE9PSBQYXRoVG9rZW5zLmVhY2gpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldEl0ZXJhdGlvblJhbmsoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIGNvdW50KEl0ZXJhdG9yLmZyb20odGhpcy50b2tlbnMpLmZpbHRlcih4ID0+IHggPT09IFBhdGhUb2tlbnMuZWFjaCkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBpc0VtcHR5KCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy50b2tlbnMubGVuZ3RoID09PSAwO1xuICAgIH1cblxuICAgIHB1YmxpYyBtYXRjaEZvcihtb2RlbFBhdGg6IE1vZGVsUGF0aCk6IFBhdGhNYXRjaGluZyB7XG4gICAgICAgIGlmICghdGhpcy5pc0Fic29sdXRlKCkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IG1hdGNoIG5vbiBhYnNvbHV0ZSBwYXRoICcke3RoaXMudG9TdHJpbmcoKX0nYCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFtb2RlbFBhdGguaXNBYnNvbHV0ZSgpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBtYXRjaCBub24gYWJzb2x1dGUgcGF0aCAnJHttb2RlbFBhdGgudG9TdHJpbmcoKX0nYCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFBhdGhNYXRjaGVyLm1hdGNoKHRoaXMudG9rZW5zLCBtb2RlbFBhdGguZ2V0UGF0aFBhcnRzQXNBcnJheSgpKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgKnNwbGl0QnlNdWx0aXBsaWNpdHkoKTogSXRlcmFibGU8UmVzb2x2ZWRNb2RlbFBhdGggfCB0eXBlb2YgRWFjaFN5bWJvbCB8IHR5cGVvZiBDdXJyZW50U3ltYm9sPiB7XG4gICAgICAgIGxldCBsYXN0U2ltcGxlUGFydHMgPSBuZXcgTW9kZWxQYXRoQnVpbGRlcih0aGlzLmlzQWJzb2x1dGUoKSk7XG4gICAgICAgIGZvciAoY29uc3QgdG9rZW4gb2YgdGhpcy50b2tlbnMpIHtcbiAgICAgICAgICAgIGlmIChQYXRoVG9rZW5zLmlzU2ltcGxlVG9rZW4odG9rZW4pKSB7XG4gICAgICAgICAgICAgICAgbGFzdFNpbXBsZVBhcnRzLmFwcGVuZCh0b2tlbik7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmICghbGFzdFNpbXBsZVBhcnRzLmVtcHR5KSB7XG4gICAgICAgICAgICAgICAgICAgIHlpZWxkIGxhc3RTaW1wbGVQYXJ0cy50b1Jlc29sdmVkUGF0aCgpO1xuICAgICAgICAgICAgICAgICAgICBsYXN0U2ltcGxlUGFydHMgPSBuZXcgTW9kZWxQYXRoQnVpbGRlcihmYWxzZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHlpZWxkIHRva2VuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICghbGFzdFNpbXBsZVBhcnRzLmVtcHR5KSB7XG4gICAgICAgICAgICB5aWVsZCBsYXN0U2ltcGxlUGFydHMudG9SZXNvbHZlZFBhdGgoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBub3JtYWxpemUoKTogSU1vZGVsUGF0aDxUUmVzb2x2ZWQsIFRBYnNvbHV0ZT4ge1xuICAgICAgICBjb25zdCByZXN1bHRUb2tlbnM6IFBhdGhUb2tlbnNTcGVjPFRSZXNvbHZlZD4gPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBwYXRoUGFydCBvZiB0aGlzLnRva2Vucykge1xuICAgICAgICAgICAgaWYgKHBhdGhQYXJ0ID09PSBcIi4uXCIpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXJlc3VsdFRva2Vucy5wb3AoKSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5pc0Fic29sdXRlKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgUGF0aCBpcyBpbnZhbGlkICcke3RoaXMudG9TdHJpbmcoKX0nYCk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRUb2tlbnMucHVzaChcIi4uXCIpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAocGF0aFBhcnQgPT09IFwiLlwiKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXN1bHRUb2tlbnMucHVzaChwYXRoUGFydCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBNb2RlbFBhdGhJbXBsPFRSZXNvbHZlZCwgVEFic29sdXRlPihyZXN1bHRUb2tlbnMsIHRoaXMuYWJzb2x1dGUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBzdW1tYXJ5INCh0L/QtdGG0LjRhNC40LrQsNGC0L7RgNGLINC80L3QvtC20LXRgdGC0LLQtdC90L3QvtGB0YLQuCBFYWNoINC30LDQvNC10L3Rj9C10YIg0L3QsCBDdXJyZW50XG4gICAgICovXG4gICAgcHVibGljIHRvQ3VycmVudEl0ZXJhdGlvbigpOiBJTW9kZWxQYXRoPFRSZXNvbHZlZCwgVEFic29sdXRlPiB7XG4gICAgICAgIGlmICh0aGlzLmlzUmVzb2x2ZWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBOT1RFINCi0YPRgiDQvdC1INC/0L7Qu9GD0YfQsNC10YLRgdGPINC90LDQu9C+0LbQuNGC0Ywg0LTQuNGB0LrRgNC40LzQuNC90LDRgtC+0YBcbiAgICAgICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgICAgICAgICAgIGNvbnN0IHBhdGhQYXJ0czogUGF0aFRva2Vuc1NwZWM8VFJlc29sdmVkPiA9IHRoaXMudG9rZW5zLm1hcCh4ID0+XG4gICAgICAgICAgICAgICAgeCA9PT0gUGF0aFRva2Vucy5lYWNoID8gUGF0aFRva2Vucy5jdXJyZW50IDogeFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHJldHVybiBuZXcgTW9kZWxQYXRoSW1wbDxUUmVzb2x2ZWQsIFRBYnNvbHV0ZT4ocGF0aFBhcnRzLCB0aGlzLmFic29sdXRlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyB0b0VhY2hJdGVyYXRpb24oKTogSU1vZGVsUGF0aDxUUmVzb2x2ZWQsIFRBYnNvbHV0ZT4ge1xuICAgICAgICBpZiAodGhpcy5pc1Jlc29sdmVkKCkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gTk9URSDQotGD0YIg0L3QtSDQv9C+0LvRg9GH0LDQtdGC0YHRjyDQvdCw0LvQvtC20LjRgtGMINC00LjRgdC60YDQuNC80LjQvdCw0YLQvtGAXG4gICAgICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gICAgICAgICAgICBjb25zdCBwYXRoUGFydHM6IFBhdGhUb2tlbnNTcGVjPFRSZXNvbHZlZD4gPSB0aGlzLnRva2Vucy5tYXAoeCA9PlxuICAgICAgICAgICAgICAgIHggPT09IFBhdGhUb2tlbnMuY3VycmVudCA/IFBhdGhUb2tlbnMuZWFjaCA6IHhcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICByZXR1cm4gbmV3IE1vZGVsUGF0aEltcGw8VFJlc29sdmVkLCBUQWJzb2x1dGU+KHBhdGhQYXJ0cywgdGhpcy5hYnNvbHV0ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgdG9BYnNvbHV0ZSgpOiBJTW9kZWxQYXRoPFRSZXNvbHZlZCwgdHJ1ZT4ge1xuICAgICAgICBpZiAoIXRoaXMuYWJzb2x1dGUpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgUGF0aCAnJHt0aGlzLnRvTGVnYWN5UGF0aCgpfSBpcyBub3QgYWJzb2x1dGUnYCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBNb2RlbFBhdGhJbXBsPFRSZXNvbHZlZCwgdHJ1ZT4odGhpcy50b2tlbnMsIHRydWUpO1xuICAgIH1cblxuICAgIHB1YmxpYyAqZ2V0QWxsUGFyZW50UGF0aHMoKTogSXRlcmFibGU8TW9kZWxQYXRoPiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IG5ldyBNb2RlbFBhdGhCdWlsZGVyKHRoaXMuaXNBYnNvbHV0ZSgpKTtcbiAgICAgICAgZm9yIChjb25zdCB0b2tlbiBvZiBJdGVyVXRpbHMuc2tpcExhc3QodGhpcy5nZXRQYXRoUGFydHMoKSwgMSkpIHtcbiAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQodG9rZW4pO1xuICAgICAgICAgICAgeWllbGQgcmVzdWx0LnRvUGF0aCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHRyaW1MYXN0U3RhcklmTGFzdFRva2VuKCk6IElNb2RlbFBhdGg8VFJlc29sdmVkLCBUQWJzb2x1dGU+IHtcbiAgICAgICAgY29uc3QgbGFzdEl0ZW0gPSBJdGVyVXRpbHMubGFzdCh0aGlzLnRva2Vucyk7XG4gICAgICAgIGlmIChsYXN0SXRlbSAhPSB1bmRlZmluZWQgJiYgUGF0aFRva2Vucy5pc011bHRpVG9rZW4obGFzdEl0ZW0pKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IE1vZGVsUGF0aEltcGwodGhpcy50b2tlbnMuc2xpY2UoMCwgLTEpLCB0aGlzLmFic29sdXRlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0UGFyZW50UGF0aCgpOiBJTW9kZWxQYXRoPFRSZXNvbHZlZCwgVEFic29sdXRlPiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IG5ldyBNb2RlbFBhdGhCdWlsZGVyKHRoaXMuYWJzb2x1dGUpO1xuICAgICAgICBmb3IgKGNvbnN0IHRva2VuIG9mIEl0ZXJVdGlscy5za2lwTGFzdCh0aGlzLmdldFBhdGhQYXJ0cygpLCAxKSkge1xuICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCh0b2tlbik7XG4gICAgICAgIH1cbiAgICAgICAgLy8g0KLRg9GCINC/0L7Qu9GD0YfQsNC10YLRgdGPINGC0LDQuiwg0YfRgtC+INC/0L4g0LTRgNGD0LPQvtC80YMg0L3QuNC60LDQulxuICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gICAgICAgIHJldHVybiByZXN1bHQudG9QYXRoKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFwcGx5SW5zdGFuY2VzRGlydHkoaW5zdGFuY2VzOiBTaW1wbGVQYXRoVG9rZW5bXSk6IElNb2RlbFBhdGg8VFJlc29sdmVkLCBUQWJzb2x1dGU+IHtcbiAgICAgICAgaWYgKHRoaXMuaXNSZXNvbHZlZCgpIHx8IGluc3RhbmNlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG4gICAgICAgIGxldCBpbnN0YW5jZUNvdW50ZXIgPSAwO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBuZXcgTW9kZWxQYXRoQnVpbGRlcih0cnVlKTtcbiAgICAgICAgZm9yIChjb25zdCB0b2tlbiBvZiB0aGlzLmdldFBhdGhQYXJ0cygpKSB7XG4gICAgICAgICAgICBpZiAoUGF0aFRva2Vucy5pc011bHRpVG9rZW4odG9rZW4pICYmIGluc3RhbmNlQ291bnRlciA8IGluc3RhbmNlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKGluc3RhbmNlc1tpbnN0YW5jZUNvdW50ZXJdID8/IHJlamVjdCgpKTtcbiAgICAgICAgICAgICAgICBpbnN0YW5jZUNvdW50ZXIrKztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCh0b2tlbik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8g0KLRg9GCINC/0L7Qu9GD0YfQsNC10YLRgdGPINGC0LDQuiwg0YfRgtC+INC/0L4g0LTRgNGD0LPQvtC80YMg0L3QuNC60LDQulxuICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gICAgICAgIHJldHVybiByZXN1bHQudG9QYXRoKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBwYXRoUGFydFRvU3RyaW5nKHBhdGhQYXJ0OiBQYXRoVG9rZW4pOiBzdHJpbmcge1xuICAgICAgICBpZiAodHlwZW9mIHBhdGhQYXJ0ID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICByZXR1cm4gcGF0aFBhcnQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBhdGhQYXJ0ID09PSBQYXRoVG9rZW5zLmVhY2gpIHtcbiAgICAgICAgICAgIHJldHVybiBcIipcIjtcbiAgICAgICAgfVxuICAgICAgICBpZiAocGF0aFBhcnQgPT09IFBhdGhUb2tlbnMuY3VycmVudCkge1xuICAgICAgICAgICAgcmV0dXJuIFwiKlwiO1xuICAgICAgICB9XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5rbm93biBwYXRoIHBhcnQgc3BlY2lmaWVkOiAke2Vuc3VyZUFuZEdldFN0cmluZyhwYXRoUGFydCl9YCk7XG4gICAgfVxufVxuIl19
|
|
@@ -5,24 +5,16 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
});
|
|
6
6
|
exports.StringArrayKey = void 0;
|
|
7
7
|
|
|
8
|
+
var _hashUtils = require("./hashUtils");
|
|
9
|
+
|
|
8
10
|
class StringArrayKey {
|
|
9
11
|
constructor(items) {
|
|
10
12
|
this.items = void 0;
|
|
11
13
|
this.items = items;
|
|
12
14
|
}
|
|
13
15
|
|
|
14
|
-
getSimpleHashByString(source) {
|
|
15
|
-
let result = 0;
|
|
16
|
-
|
|
17
|
-
for (let index = 0; index < source.length; index++) {
|
|
18
|
-
result = (result << 5) - result + source.charCodeAt(index) | 0;
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
return result;
|
|
22
|
-
}
|
|
23
|
-
|
|
24
16
|
getHash() {
|
|
25
|
-
return this.items.reduce((acc, current) => acc +
|
|
17
|
+
return this.items.reduce((acc, current) => acc + (0, _hashUtils.getSimpleHashByString)(current), 0);
|
|
26
18
|
}
|
|
27
19
|
|
|
28
20
|
isEquals(right) {
|
|
@@ -36,4 +28,4 @@ class StringArrayKey {
|
|
|
36
28
|
}
|
|
37
29
|
|
|
38
30
|
exports.StringArrayKey = StringArrayKey;
|
|
39
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
31
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL0NvbW1vbi9TdHJpbmdBcnJheUtleS50cyJdLCJuYW1lcyI6WyJTdHJpbmdBcnJheUtleSIsImNvbnN0cnVjdG9yIiwiaXRlbXMiLCJnZXRIYXNoIiwicmVkdWNlIiwiYWNjIiwiY3VycmVudCIsImlzRXF1YWxzIiwicmlnaHQiLCJsZW5ndGgiLCJldmVyeSIsIml0ZW0iLCJpbmRleCJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUNBOztBQUVPLE1BQU1BLGNBQU4sQ0FBMkQ7QUFHdkRDLEVBQUFBLFdBQVcsQ0FBQ0MsS0FBRCxFQUFrQjtBQUFBLFNBRm5CQSxLQUVtQjtBQUNoQyxTQUFLQSxLQUFMLEdBQWFBLEtBQWI7QUFDSDs7QUFFTUMsRUFBQUEsT0FBTyxHQUFXO0FBQ3JCLFdBQU8sS0FBS0QsS0FBTCxDQUFXRSxNQUFYLENBQWtCLENBQUNDLEdBQUQsRUFBTUMsT0FBTixLQUFrQkQsR0FBRyxHQUFHLHNDQUFzQkMsT0FBdEIsQ0FBMUMsRUFBMEUsQ0FBMUUsQ0FBUDtBQUNIOztBQUVNQyxFQUFBQSxRQUFRLENBQUNDLEtBQUQsRUFBaUM7QUFDNUMsUUFBSSxLQUFLTixLQUFMLENBQVdPLE1BQVgsSUFBcUJELEtBQUssQ0FBQ04sS0FBTixDQUFZTyxNQUFyQyxFQUE2QztBQUN6QyxhQUFPLEtBQVA7QUFDSDs7QUFDRCxXQUFPLEtBQUtQLEtBQUwsQ0FBV1EsS0FBWCxDQUFpQixDQUFDQyxJQUFELEVBQU9DLEtBQVAsS0FBaUJELElBQUksS0FBS0gsS0FBSyxDQUFDTixLQUFOLENBQVlVLEtBQVosQ0FBM0MsQ0FBUDtBQUNIOztBQWhCNkQiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJRXF1YXRhYmxlIH0gZnJvbSBcIi4vTW9kZWxQYXRoL0lFcXVhdGFibGVcIjtcbmltcG9ydCB7IGdldFNpbXBsZUhhc2hCeVN0cmluZyB9IGZyb20gXCIuL2hhc2hVdGlsc1wiO1xuXG5leHBvcnQgY2xhc3MgU3RyaW5nQXJyYXlLZXkgaW1wbGVtZW50cyBJRXF1YXRhYmxlPFN0cmluZ0FycmF5S2V5PiB7XG4gICAgcHJpdmF0ZSByZWFkb25seSBpdGVtczogc3RyaW5nW107XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IoaXRlbXM6IHN0cmluZ1tdKSB7XG4gICAgICAgIHRoaXMuaXRlbXMgPSBpdGVtcztcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0SGFzaCgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5pdGVtcy5yZWR1Y2UoKGFjYywgY3VycmVudCkgPT4gYWNjICsgZ2V0U2ltcGxlSGFzaEJ5U3RyaW5nKGN1cnJlbnQpLCAwKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgaXNFcXVhbHMocmlnaHQ6IFN0cmluZ0FycmF5S2V5KTogYm9vbGVhbiB7XG4gICAgICAgIGlmICh0aGlzLml0ZW1zLmxlbmd0aCAhPSByaWdodC5pdGVtcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5pdGVtcy5ldmVyeSgoaXRlbSwgaW5kZXgpID0+IGl0ZW0gPT09IHJpZ2h0Lml0ZW1zW2luZGV4XSk7XG4gICAgfVxufVxuIl19
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
|
|
5
|
+
Object.defineProperty(exports, "__esModule", {
|
|
6
|
+
value: true
|
|
7
|
+
});
|
|
8
|
+
exports.useShowOnce = void 0;
|
|
9
|
+
|
|
10
|
+
var _react = _interopRequireDefault(require("react"));
|
|
11
|
+
|
|
12
|
+
var _MetricsProviderContext = require("../Engine/src/Controls/Internals/Metrics/MetricsProviderContext");
|
|
13
|
+
|
|
14
|
+
var _UseAsyncEffect = require("./UseAsyncEffect");
|
|
15
|
+
|
|
16
|
+
var _NidusClientContext = require("./NidusClient/NidusClientContext");
|
|
17
|
+
|
|
18
|
+
const useShowOnce = props => {
|
|
19
|
+
const [isOpen, setIsOpen] = _react.default.useState(false);
|
|
20
|
+
|
|
21
|
+
const [isSaveInNidus, setIsSaveInNidus] = _react.default.useState(false);
|
|
22
|
+
|
|
23
|
+
const nidus = (0, _NidusClientContext.useNidusClient)();
|
|
24
|
+
const track = (0, _MetricsProviderContext.useMetrics)();
|
|
25
|
+
const nidusName = props.nidusName;
|
|
26
|
+
const nidusKey = props.nidusKey;
|
|
27
|
+
const info = {
|
|
28
|
+
name: props.infoName,
|
|
29
|
+
date: new Date().toUTCString()
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
async function addToNidus() {
|
|
33
|
+
track(props.metricsName, {
|
|
34
|
+
from: props.metricsInfo
|
|
35
|
+
});
|
|
36
|
+
|
|
37
|
+
if (isSaveInNidus) {
|
|
38
|
+
await nidus.insert(nidusName, nidusKey, info);
|
|
39
|
+
setIsSaveInNidus(false);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
async function searchInNidusById(id) {
|
|
44
|
+
const result = await nidus.search(nidusName, nidusKey, id);
|
|
45
|
+
|
|
46
|
+
if (result.totalSuitableCount === 0) {
|
|
47
|
+
setIsSaveInNidus(true);
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
return result;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
(0, _UseAsyncEffect.useAsyncEffect)(async () => {
|
|
54
|
+
await searchInNidusById(info.name).then(result => {
|
|
55
|
+
const itemsCount = result.items.length;
|
|
56
|
+
|
|
57
|
+
if (itemsCount === 0) {
|
|
58
|
+
setIsOpen(true);
|
|
59
|
+
}
|
|
60
|
+
});
|
|
61
|
+
}, []);
|
|
62
|
+
|
|
63
|
+
async function addToNidusFromLink() {
|
|
64
|
+
if (isSaveInNidus) {
|
|
65
|
+
await nidus.insert(nidusName, nidusKey, info);
|
|
66
|
+
setIsSaveInNidus(false);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
(0, _UseAsyncEffect.useAsyncEffect)(async () => {
|
|
71
|
+
if (props.openFromLink) {
|
|
72
|
+
await addToNidusFromLink();
|
|
73
|
+
}
|
|
74
|
+
}, [props.openFromLink]);
|
|
75
|
+
|
|
76
|
+
if (props.openFromLink) {
|
|
77
|
+
setIsOpen(isOpen && !props.openFromLink);
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
return {
|
|
81
|
+
isOpen: isOpen,
|
|
82
|
+
setIsOpen: setIsOpen,
|
|
83
|
+
addToNidus: addToNidus
|
|
84
|
+
};
|
|
85
|
+
};
|
|
86
|
+
|
|
87
|
+
exports.useShowOnce = useShowOnce;
|
|
88
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL0NvbW1vbi9Vc2VTaG93T25jZS50cyJdLCJuYW1lcyI6WyJ1c2VTaG93T25jZSIsInByb3BzIiwiaXNPcGVuIiwic2V0SXNPcGVuIiwiUmVhY3QiLCJ1c2VTdGF0ZSIsImlzU2F2ZUluTmlkdXMiLCJzZXRJc1NhdmVJbk5pZHVzIiwibmlkdXMiLCJ0cmFjayIsIm5pZHVzTmFtZSIsIm5pZHVzS2V5IiwiaW5mbyIsIm5hbWUiLCJpbmZvTmFtZSIsImRhdGUiLCJEYXRlIiwidG9VVENTdHJpbmciLCJhZGRUb05pZHVzIiwibWV0cmljc05hbWUiLCJmcm9tIiwibWV0cmljc0luZm8iLCJpbnNlcnQiLCJzZWFyY2hJbk5pZHVzQnlJZCIsImlkIiwicmVzdWx0Iiwic2VhcmNoIiwidG90YWxTdWl0YWJsZUNvdW50IiwidGhlbiIsIml0ZW1zQ291bnQiLCJpdGVtcyIsImxlbmd0aCIsImFkZFRvTmlkdXNGcm9tTGluayIsIm9wZW5Gcm9tTGluayJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUE7O0FBRUE7O0FBRUE7O0FBQ0E7O0FBaUJPLE1BQU1BLFdBQVcsR0FBSUMsS0FBRCxJQUE2QjtBQUNwRCxRQUFNLENBQUNDLE1BQUQsRUFBU0MsU0FBVCxJQUFzQkMsZUFBTUMsUUFBTixDQUF3QixLQUF4QixDQUE1Qjs7QUFDQSxRQUFNLENBQUNDLGFBQUQsRUFBZ0JDLGdCQUFoQixJQUFvQ0gsZUFBTUMsUUFBTixDQUF3QixLQUF4QixDQUExQzs7QUFDQSxRQUFNRyxLQUFLLEdBQUcseUNBQWQ7QUFDQSxRQUFNQyxLQUFLLEdBQUcseUNBQWQ7QUFFQSxRQUFNQyxTQUFTLEdBQUdULEtBQUssQ0FBQ1MsU0FBeEI7QUFDQSxRQUFNQyxRQUFRLEdBQUdWLEtBQUssQ0FBQ1UsUUFBdkI7QUFDQSxRQUFNQyxJQUFVLEdBQUc7QUFDZkMsSUFBQUEsSUFBSSxFQUFFWixLQUFLLENBQUNhLFFBREc7QUFFZkMsSUFBQUEsSUFBSSxFQUFFLElBQUlDLElBQUosR0FBV0MsV0FBWDtBQUZTLEdBQW5COztBQUtBLGlCQUFlQyxVQUFmLEdBQTRCO0FBQ3hCVCxJQUFBQSxLQUFLLENBQUNSLEtBQUssQ0FBQ2tCLFdBQVAsRUFBb0I7QUFDckJDLE1BQUFBLElBQUksRUFBRW5CLEtBQUssQ0FBQ29CO0FBRFMsS0FBcEIsQ0FBTDs7QUFJQSxRQUFJZixhQUFKLEVBQW1CO0FBQ2YsWUFBTUUsS0FBSyxDQUFDYyxNQUFOLENBQWFaLFNBQWIsRUFBd0JDLFFBQXhCLEVBQWtDQyxJQUFsQyxDQUFOO0FBQ0FMLE1BQUFBLGdCQUFnQixDQUFDLEtBQUQsQ0FBaEI7QUFDSDtBQUNKOztBQUVELGlCQUFlZ0IsaUJBQWYsQ0FBaUNDLEVBQWpDLEVBQTZDO0FBQ3pDLFVBQU1DLE1BQU0sR0FBRyxNQUFNakIsS0FBSyxDQUFDa0IsTUFBTixDQUFhaEIsU0FBYixFQUF3QkMsUUFBeEIsRUFBa0NhLEVBQWxDLENBQXJCOztBQUNBLFFBQUlDLE1BQU0sQ0FBQ0Usa0JBQVAsS0FBOEIsQ0FBbEMsRUFBcUM7QUFDakNwQixNQUFBQSxnQkFBZ0IsQ0FBQyxJQUFELENBQWhCO0FBQ0g7O0FBQ0QsV0FBT2tCLE1BQVA7QUFDSDs7QUFFRCxzQ0FBZSxZQUFZO0FBQ3ZCLFVBQU1GLGlCQUFpQixDQUFDWCxJQUFJLENBQUNDLElBQU4sQ0FBakIsQ0FBNkJlLElBQTdCLENBQWtDSCxNQUFNLElBQUk7QUFDOUMsWUFBTUksVUFBVSxHQUFHSixNQUFNLENBQUNLLEtBQVAsQ0FBYUMsTUFBaEM7O0FBQ0EsVUFBSUYsVUFBVSxLQUFLLENBQW5CLEVBQXNCO0FBQ2xCMUIsUUFBQUEsU0FBUyxDQUFDLElBQUQsQ0FBVDtBQUNIO0FBQ0osS0FMSyxDQUFOO0FBTUgsR0FQRCxFQU9HLEVBUEg7O0FBU0EsaUJBQWU2QixrQkFBZixHQUFvQztBQUNoQyxRQUFJMUIsYUFBSixFQUFtQjtBQUNmLFlBQU1FLEtBQUssQ0FBQ2MsTUFBTixDQUFhWixTQUFiLEVBQXdCQyxRQUF4QixFQUFrQ0MsSUFBbEMsQ0FBTjtBQUNBTCxNQUFBQSxnQkFBZ0IsQ0FBQyxLQUFELENBQWhCO0FBQ0g7QUFDSjs7QUFFRCxzQ0FBZSxZQUFZO0FBQ3ZCLFFBQUlOLEtBQUssQ0FBQ2dDLFlBQVYsRUFBd0I7QUFDcEIsWUFBTUQsa0JBQWtCLEVBQXhCO0FBQ0g7QUFDSixHQUpELEVBSUcsQ0FBQy9CLEtBQUssQ0FBQ2dDLFlBQVAsQ0FKSDs7QUFNQSxNQUFJaEMsS0FBSyxDQUFDZ0MsWUFBVixFQUF3QjtBQUNwQjlCLElBQUFBLFNBQVMsQ0FBQ0QsTUFBTSxJQUFJLENBQUNELEtBQUssQ0FBQ2dDLFlBQWxCLENBQVQ7QUFDSDs7QUFFRCxTQUFPO0FBQUUvQixJQUFBQSxNQUFNLEVBQUVBLE1BQVY7QUFBa0JDLElBQUFBLFNBQVMsRUFBRUEsU0FBN0I7QUFBd0NlLElBQUFBLFVBQVUsRUFBRUE7QUFBcEQsR0FBUDtBQUNILENBM0RNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuXG5pbXBvcnQgeyB1c2VNZXRyaWNzIH0gZnJvbSBcIi4uL0VuZ2luZS9zcmMvQ29udHJvbHMvSW50ZXJuYWxzL01ldHJpY3MvTWV0cmljc1Byb3ZpZGVyQ29udGV4dFwiO1xuXG5pbXBvcnQgeyB1c2VBc3luY0VmZmVjdCB9IGZyb20gXCIuL1VzZUFzeW5jRWZmZWN0XCI7XG5pbXBvcnQgeyB1c2VOaWR1c0NsaWVudCB9IGZyb20gXCIuL05pZHVzQ2xpZW50L05pZHVzQ2xpZW50Q29udGV4dFwiO1xuaW1wb3J0IHsgTmlkdXNFbnRyeURhdGEgfSBmcm9tIFwiLi9OaWR1c0NsaWVudC9JTmlkdXNDbGllbnRcIjtcblxuZXhwb3J0IGludGVyZmFjZSB1c2VTaG93T25jZVByb3BzIHtcbiAgICBuaWR1c05hbWU6IHN0cmluZztcbiAgICBuaWR1c0tleTogc3RyaW5nO1xuICAgIGluZm9OYW1lOiBzdHJpbmc7XG4gICAgbWV0cmljc05hbWU6IHN0cmluZztcbiAgICBtZXRyaWNzSW5mbzogc3RyaW5nO1xuICAgIG9wZW5Gcm9tTGluaz86IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSW5mbyBleHRlbmRzIE5pZHVzRW50cnlEYXRhIHtcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgZGF0ZTogc3RyaW5nO1xufVxuXG5leHBvcnQgY29uc3QgdXNlU2hvd09uY2UgPSAocHJvcHM6IHVzZVNob3dPbmNlUHJvcHMpID0+IHtcbiAgICBjb25zdCBbaXNPcGVuLCBzZXRJc09wZW5dID0gUmVhY3QudXNlU3RhdGU8Ym9vbGVhbj4oZmFsc2UpO1xuICAgIGNvbnN0IFtpc1NhdmVJbk5pZHVzLCBzZXRJc1NhdmVJbk5pZHVzXSA9IFJlYWN0LnVzZVN0YXRlPGJvb2xlYW4+KGZhbHNlKTtcbiAgICBjb25zdCBuaWR1cyA9IHVzZU5pZHVzQ2xpZW50KCk7XG4gICAgY29uc3QgdHJhY2sgPSB1c2VNZXRyaWNzKCk7XG5cbiAgICBjb25zdCBuaWR1c05hbWUgPSBwcm9wcy5uaWR1c05hbWU7XG4gICAgY29uc3QgbmlkdXNLZXkgPSBwcm9wcy5uaWR1c0tleTtcbiAgICBjb25zdCBpbmZvOiBJbmZvID0ge1xuICAgICAgICBuYW1lOiBwcm9wcy5pbmZvTmFtZSxcbiAgICAgICAgZGF0ZTogbmV3IERhdGUoKS50b1VUQ1N0cmluZygpLFxuICAgIH07XG5cbiAgICBhc3luYyBmdW5jdGlvbiBhZGRUb05pZHVzKCkge1xuICAgICAgICB0cmFjayhwcm9wcy5tZXRyaWNzTmFtZSwge1xuICAgICAgICAgICAgZnJvbTogcHJvcHMubWV0cmljc0luZm8sXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmIChpc1NhdmVJbk5pZHVzKSB7XG4gICAgICAgICAgICBhd2FpdCBuaWR1cy5pbnNlcnQobmlkdXNOYW1lLCBuaWR1c0tleSwgaW5mbyk7XG4gICAgICAgICAgICBzZXRJc1NhdmVJbk5pZHVzKGZhbHNlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGFzeW5jIGZ1bmN0aW9uIHNlYXJjaEluTmlkdXNCeUlkKGlkOiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgbmlkdXMuc2VhcmNoKG5pZHVzTmFtZSwgbmlkdXNLZXksIGlkKTtcbiAgICAgICAgaWYgKHJlc3VsdC50b3RhbFN1aXRhYmxlQ291bnQgPT09IDApIHtcbiAgICAgICAgICAgIHNldElzU2F2ZUluTmlkdXModHJ1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICB1c2VBc3luY0VmZmVjdChhc3luYyAoKSA9PiB7XG4gICAgICAgIGF3YWl0IHNlYXJjaEluTmlkdXNCeUlkKGluZm8ubmFtZSkudGhlbihyZXN1bHQgPT4ge1xuICAgICAgICAgICAgY29uc3QgaXRlbXNDb3VudCA9IHJlc3VsdC5pdGVtcy5sZW5ndGg7XG4gICAgICAgICAgICBpZiAoaXRlbXNDb3VudCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHNldElzT3Blbih0cnVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSwgW10pO1xuXG4gICAgYXN5bmMgZnVuY3Rpb24gYWRkVG9OaWR1c0Zyb21MaW5rKCkge1xuICAgICAgICBpZiAoaXNTYXZlSW5OaWR1cykge1xuICAgICAgICAgICAgYXdhaXQgbmlkdXMuaW5zZXJ0KG5pZHVzTmFtZSwgbmlkdXNLZXksIGluZm8pO1xuICAgICAgICAgICAgc2V0SXNTYXZlSW5OaWR1cyhmYWxzZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB1c2VBc3luY0VmZmVjdChhc3luYyAoKSA9PiB7XG4gICAgICAgIGlmIChwcm9wcy5vcGVuRnJvbUxpbmspIHtcbiAgICAgICAgICAgIGF3YWl0IGFkZFRvTmlkdXNGcm9tTGluaygpO1xuICAgICAgICB9XG4gICAgfSwgW3Byb3BzLm9wZW5Gcm9tTGlua10pO1xuXG4gICAgaWYgKHByb3BzLm9wZW5Gcm9tTGluaykge1xuICAgICAgICBzZXRJc09wZW4oaXNPcGVuICYmICFwcm9wcy5vcGVuRnJvbUxpbmspO1xuICAgIH1cblxuICAgIHJldHVybiB7IGlzT3BlbjogaXNPcGVuLCBzZXRJc09wZW46IHNldElzT3BlbiwgYWRkVG9OaWR1czogYWRkVG9OaWR1cyB9O1xufTtcbiJdfQ==
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.getSimpleHashByString = getSimpleHashByString;
|
|
7
|
+
|
|
8
|
+
function getSimpleHashByString(source) {
|
|
9
|
+
let result = 0;
|
|
10
|
+
|
|
11
|
+
for (let index = 0; index < source.length; index++) {
|
|
12
|
+
result = (result << 5) - result + source.charCodeAt(index) | 0;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
return result;
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL0NvbW1vbi9oYXNoVXRpbHMudHMiXSwibmFtZXMiOlsiZ2V0U2ltcGxlSGFzaEJ5U3RyaW5nIiwic291cmNlIiwicmVzdWx0IiwiaW5kZXgiLCJsZW5ndGgiLCJjaGFyQ29kZUF0Il0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQU8sU0FBU0EscUJBQVQsQ0FBK0JDLE1BQS9CLEVBQXVEO0FBQzFELE1BQUlDLE1BQU0sR0FBRyxDQUFiOztBQUNBLE9BQUssSUFBSUMsS0FBSyxHQUFHLENBQWpCLEVBQW9CQSxLQUFLLEdBQUdGLE1BQU0sQ0FBQ0csTUFBbkMsRUFBMkNELEtBQUssRUFBaEQsRUFBb0Q7QUFDaERELElBQUFBLE1BQU0sR0FBSSxDQUFDQSxNQUFNLElBQUksQ0FBWCxJQUFnQkEsTUFBaEIsR0FBeUJELE1BQU0sQ0FBQ0ksVUFBUCxDQUFrQkYsS0FBbEIsQ0FBMUIsR0FBc0QsQ0FBL0Q7QUFDSDs7QUFDRCxTQUFPRCxNQUFQO0FBQ0giLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZnVuY3Rpb24gZ2V0U2ltcGxlSGFzaEJ5U3RyaW5nKHNvdXJjZTogc3RyaW5nKTogbnVtYmVyIHtcbiAgICBsZXQgcmVzdWx0ID0gMDtcbiAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgc291cmNlLmxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgICByZXN1bHQgPSAoKHJlc3VsdCA8PCA1KSAtIHJlc3VsdCArIHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4KSkgfCAwO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xufVxuIl19
|