@mnaoumov/typescript-dev-toolkit 3.6.2 → 3.6.4
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.
|
@@ -401,8 +401,8 @@ function renderFunctionPage(lines, info, allTypes) {
|
|
|
401
401
|
}
|
|
402
402
|
lines.push("");
|
|
403
403
|
}
|
|
404
|
-
const returnDesc = $function.returnDescription ? ` \u2014 ${(0, import_api_doc_text_utils.
|
|
405
|
-
lines.push(`**Returns:** ${(0, import_api_doc_text_utils.escapeMdxAngleBrackets)((0, import_api_doc_link_rendering.renderTypeWithLinks)($function.returnType, allTypes, info.name, info.namespace))}${returnDesc}`, "");
|
|
404
|
+
const returnDesc = $function.returnDescription ? ` \u2014 ${(0, import_api_doc_text_utils.escapeMdxProse)((0, import_api_doc_link_rendering.resolveLinks)($function.returnDescription, allTypes, info.namespace))}` : "";
|
|
405
|
+
lines.push(`**Returns:** ${(0, import_api_doc_text_utils.escapeMdxBraces)((0, import_api_doc_text_utils.escapeMdxAngleBrackets)((0, import_api_doc_link_rendering.renderTypeWithLinks)($function.returnType, allTypes, info.name, info.namespace)))}${returnDesc}`, "");
|
|
406
406
|
for (const example of $function.examples) {
|
|
407
407
|
lines.push("**Example:**", "", (0, import_api_doc_link_rendering.renderExampleMdx)(example, allTypes, info.namespace), "");
|
|
408
408
|
}
|
|
@@ -558,4 +558,4 @@ function renderNamespaceTable(lines, heading, columnLabel, entries, allTypes, na
|
|
|
558
558
|
renderVariablePage,
|
|
559
559
|
sidebarTreeToEntries
|
|
560
560
|
});
|
|
561
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9kb2NzLXNpdGUvYXBpLWRvYy1wYWdlLWdlbmVyYXRpb24udHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIE1EWCBwYWdlICsgc2lkZWJhciBlbWlzc2lvbjogcmVuZGVycyBtb2R1bGUgaW5kZXggcGFnZXMsIHBlci10eXBlIG92ZXJ2aWV3IHBhZ2VzLCBwZXItbWVtYmVyIHBhZ2VzLFxuICogYmFja2xpbmtzLCBhbmQgdGhlIFN0YXJsaWdodCBzaWRlYmFyIEpTT04uXG4gKi9cblxuaW1wb3J0IHsgZ2V0TWFuZGF0b3J5TmFtZWRHcm91cCB9IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWxpYi9yZWctZXhwJztcbmltcG9ydCB7IGVuc3VyZU5vbk51bGxhYmxlIH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL3R5cGUtZ3VhcmRzJztcbmltcG9ydCB7IHdyaXRlRmlsZSB9IGZyb20gJ25vZGU6ZnMvcHJvbWlzZXMnO1xuaW1wb3J0IHsgam9pbiB9IGZyb20gJ25vZGU6cGF0aCc7XG5cbmltcG9ydCB0eXBlIHtcbiAgTWVtYmVySW5mbyxcbiAgUGFnZUNvbnRlbnQsXG4gIFBhZ2VGcm9udE1hdHRlcixcbiAgU2lkZWJhckVudHJ5LFxuICBTaWRlYmFyTGluayxcbiAgU2lkZWJhclRyZWVOb2RlLFxuICBUeXBlSW5mb1xufSBmcm9tICcuL2FwaS1kb2MtdHlwZXMudHMnO1xuXG5pbXBvcnQgeyBFVkVOVF9NRVRIT0RTIH0gZnJvbSAnLi9hcGktZG9jLWNvbnN0YW50cy50cyc7XG5pbXBvcnQge1xuICBsaW5rQmFzZVR5cGUsXG4gIG1hcmtkb3duVG9IdG1sLFxuICBtZW1iZXJIcmVmLFxuICByZW5kZXJFeGFtcGxlTWR4LFxuICByZW5kZXJNZHhQcm9zZSxcbiAgcmVuZGVyVHlwZVdpdGhMaW5rcyxcbiAgcmVzb2x2ZUxpbmtzLFxuICB0b1R5cGVGaWxlU2VnbWVudCxcbiAgdG9UeXBlUm91dGVTZWdtZW50LFxuICB0eXBlTGlua1xufSBmcm9tICcuL2FwaS1kb2MtbGluay1yZW5kZXJpbmcudHMnO1xuaW1wb3J0IHsgZ2V0QXBpRG9jU2V0dGluZ3MgfSBmcm9tICcuL2FwaS1kb2Mtc2V0dGluZ3MudHMnO1xuaW1wb3J0IHtcbiAgZW5zdXJlRGlyZWN0b3J5LFxuICBlc2NhcGVKc1N0cmluZyxcbiAgZXNjYXBlSnN4QXR0cmlidXRlLFxuICBlc2NhcGVNYXJrZG93bixcbiAgZXNjYXBlTWR4QW5nbGVCcmFja2V0cyxcbiAgZXNjYXBlTWR4QnJhY2VzLFxuICBlc2NhcGVZYW1sLFxuICBnZXREaXNwbGF5TmFtZSxcbiAgZ2V0SW1wb3J0U3RhdGVtZW50LFxuICBnZXROYW1lc3BhY2VEaXJlY3RvcnksXG4gIG1lbWJlclJvdXRlU2VnbWVudCxcbiAgbWVtYmVyU2x1ZyxcbiAgb3ZlcmxvYWRSb3V0ZVNlZ21lbnQsXG4gIG92ZXJsb2FkU2x1ZyxcbiAgc3RyaXBNYXJrZG93bixcbiAgdHJ1bmNhdGVTaWduYXR1cmVcbn0gZnJvbSAnLi9hcGktZG9jLXRleHQtdXRpbHMudHMnO1xuaW1wb3J0IHsgQVBJX0NPTVBPTkVOVFNfSU1QT1JUX1BSRUZJWCB9IGZyb20gJy4vZG9jcy1zaXRlLWFzc2V0cy50cyc7XG5cbmNvbnN0IEpTT05fSU5ERU5UID0gMjtcblxuLyoqXG4gKiBBcHBlbmQgYmFja2xpbmtzIHRvIG92ZXJ2aWV3IHBhZ2VzIGFuZCB3cml0ZSBhbGwgZmlsZXMuIEtleWVkIGJ5IHF1YWxpZmllZCBgJHtuYW1lc3BhY2V9IyR7bmFtZX1gLlxuICpcbiAqIEBwYXJhbSBwYWdlQ29udGVudHMgLSBFdmVyeSBvdmVydmlldyBwYWdlJ3MgY29udGVudCBhbmQgcGF0aCwga2V5ZWQgYnkgcXVhbGlmaWVkIGlkLlxuICogQHBhcmFtIGFsbFR5cGVzIC0gRXZlcnkgZG9jdW1lbnRlZCB0eXBlLCBrZXllZCBieSBgJHtuYW1lc3BhY2V9IyR7bmFtZX1gLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYXBwZW5kQmFja2xpbmtzQW5kV3JpdGUoXG4gIHBhZ2VDb250ZW50czogTWFwPHN0cmluZywgUGFnZUNvbnRlbnQ+LFxuICBhbGxUeXBlczogTWFwPHN0cmluZywgVHlwZUluZm8+XG4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgYmFja2xpbmtzID0gYnVpbGRCYWNrbGlua3NGcm9tQ29udGVudChwYWdlQ29udGVudHMsIGFsbFR5cGVzKTtcblxuICBmb3IgKGNvbnN0IFtrZXksIHsgY29udGVudCwgZmlsZVBhdGggfV0gb2YgcGFnZUNvbnRlbnRzKSB7XG4gICAgY29uc3QgdHlwZUJhY2tsaW5rcyA9IGJhY2tsaW5rcy5nZXQoa2V5KSA/PyBbXTtcbiAgICBjb25zdCBsaW5lcyA9IFtjb250ZW50XTtcbiAgICBpZiAodHlwZUJhY2tsaW5rcy5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBzb3J0ZWRCYWNrbGlua3MgPSBbLi4udHlwZUJhY2tsaW5rc10uc29ydCgoYSwgYikgPT4gYS5sb2NhbGVDb21wYXJlKGIpKTtcbiAgICAgIGxpbmVzLnB1c2goJycsICctLS0nLCAnJywgJyoqTGlua3MgdG8gdGhpcyBwYWdlOioqJywgJycpO1xuICAgICAgZm9yIChjb25zdCBibEtleSBvZiBzb3J0ZWRCYWNrbGlua3MpIHtcbiAgICAgICAgY29uc3QgYmxJbmZvID0gZW5zdXJlTm9uTnVsbGFibGUoYWxsVHlwZXMuZ2V0KGJsS2V5KSk7XG4gICAgICAgIGNvbnN0IGJsTnNEaXJlY3RvcnkgPSBnZXROYW1lc3BhY2VEaXJlY3RvcnkoYmxJbmZvLm5hbWVzcGFjZSk7XG4gICAgICAgIGxpbmVzLnB1c2goYC0gWyR7YmxJbmZvLm5hbWV9XSgke2dldEFwaURvY1NldHRpbmdzKCkuYmFzZVBhdGh9L2FwaS8ke2JsTnNEaXJlY3Rvcnl9LyR7dG9UeXBlUm91dGVTZWdtZW50KGJsSW5mby5uYW1lc3BhY2UsIGJsSW5mby5uYW1lKX0vKWApO1xuICAgICAgfVxuICAgIH1cbiAgICBhd2FpdCB3cml0ZUZpbGUoZmlsZVBhdGgsIGxpbmVzLmpvaW4oJ1xcbicpLCAndXRmLTgnKTtcbiAgfVxufVxuXG4vKipcbiAqIEJ1aWxkIGJhY2tsaW5rcyBieSBzY2FubmluZyBnZW5lcmF0ZWQgcGFnZSBjb250ZW50IGZvciBpbnRlcm5hbCBBUEkgbGlua3MuIEtleWVkIGJ5IHF1YWxpZmllZCBpZC5cbiAqXG4gKiBAcGFyYW0gcGFnZUNvbnRlbnRzIC0gRXZlcnkgb3ZlcnZpZXcgcGFnZSdzIGNvbnRlbnQgYW5kIHBhdGgsIGtleWVkIGJ5IHF1YWxpZmllZCBpZC5cbiAqIEBwYXJhbSBhbGxUeXBlcyAtIEV2ZXJ5IGRvY3VtZW50ZWQgdHlwZSwga2V5ZWQgYnkgYCR7bmFtZXNwYWNlfSMke25hbWV9YC5cbiAqIEByZXR1cm5zIEVhY2ggcmVmZXJlbmNlZCB0eXBlJ3MgcXVhbGlmaWVkIGlkIG1hcHBlZCB0byB0aGUgaWRzIG9mIHRoZSBwYWdlcyBsaW5raW5nIHRvIGl0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRCYWNrbGlua3NGcm9tQ29udGVudChcbiAgcGFnZUNvbnRlbnRzOiBNYXA8c3RyaW5nLCBQYWdlQ29udGVudD4sXG4gIGFsbFR5cGVzOiBNYXA8c3RyaW5nLCBUeXBlSW5mbz5cbik6IE1hcDxzdHJpbmcsIHN0cmluZ1tdPiB7XG4gIGNvbnN0IGJhY2tsaW5rcyA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmdbXT4oKTtcbiAgLy8gRW1pdHRlZCBVUkxzIGxvd2VyY2FzZSB0aGUgdHlwZSBzZWdtZW50IChzZWUgdG9Sb3V0ZVNlZ21lbnQpLCBzbyBtYXAgZWFjaCBsb3dlcmNhc2VkIHJvdXRlXG4gIC8vIGlkZW50aXR5IGJhY2sgdG8gaXRzIG9yaWdpbmFsIHF1YWxpZmllZCB0eXBlIGtleS5cbiAgY29uc3Qgcm91dGVLZXlUb1R5cGVLZXkgPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nPigpO1xuICBmb3IgKGNvbnN0IFt0eXBlS2V5LCBpbmZvXSBvZiBhbGxUeXBlcykge1xuICAgIHJvdXRlS2V5VG9UeXBlS2V5LnNldChgJHtnZXROYW1lc3BhY2VEaXJlY3RvcnkoaW5mby5uYW1lc3BhY2UpfSMke3RvVHlwZVJvdXRlU2VnbWVudChpbmZvLm5hbWVzcGFjZSwgaW5mby5uYW1lKX1gLCB0eXBlS2V5KTtcbiAgfVxuICBjb25zdCBlc2NhcGVkQmFzZSA9IGdldEFwaURvY1NldHRpbmdzKCkuYmFzZVBhdGgucmVwbGFjZUFsbCgvWy4qKz9eJHt9KCl8W1xcXVxcXFxdL2csIFN0cmluZy5yYXdgXFwkJmApO1xuICBjb25zdCBsaW5rUGF0dGVybiA9IG5ldyBSZWdFeHAoYCR7ZXNjYXBlZEJhc2V9L2FwaS8oPzxwYXRoPig/OlthLXpBLVowLTlfQC1dKy8pKylgLCAnZycpO1xuICBmb3IgKGNvbnN0IFtzb3VyY2VLZXksIHsgY29udGVudCB9XSBvZiBwYWdlQ29udGVudHMpIHtcbiAgICBjb25zdCByZWZlcmVuY2VkID0gbmV3IFNldDxzdHJpbmc+KCk7XG5cbiAgICBmb3IgKGNvbnN0IG1hdGNoIG9mIGNvbnRlbnQubWF0Y2hBbGwobGlua1BhdHRlcm4pKSB7XG4gICAgICAvLyBUaGUgcGF0dGVybiByZXF1aXJlcyBhdCBsZWFzdCBvbmUgc2VnbWVudC5cbiAgICAgIGNvbnN0IHNlZ21lbnRzID0gZ2V0TWFuZGF0b3J5TmFtZWRHcm91cChtYXRjaCwgJ3BhdGgnKS5zcGxpdCgnLycpLmZpbHRlcihCb29sZWFuKTtcbiAgICAgIGNvbnN0IHR5cGVOYW1lID0gZW5zdXJlTm9uTnVsbGFibGUoc2VnbWVudHMuYXQoLTEpKTtcbiAgICAgIGNvbnN0IG5hbWVzcGFjZSA9IHNlZ21lbnRzLnNsaWNlKDAsIC0xKS5qb2luKCcvJyk7XG4gICAgICBjb25zdCByb3V0ZUtleSA9IGAke25hbWVzcGFjZX0jJHt0eXBlTmFtZX1gO1xuICAgICAgY29uc3QgcmVzb2x2ZWRLZXkgPSByb3V0ZUtleVRvVHlwZUtleS5nZXQocm91dGVLZXkpO1xuICAgICAgaWYgKHJlc29sdmVkS2V5ICE9PSB1bmRlZmluZWQgJiYgcmVzb2x2ZWRLZXkgIT09IHNvdXJjZUtleSkge1xuICAgICAgICByZWZlcmVuY2VkLmFkZChyZXNvbHZlZEtleSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCByZWZlcmVuY2Ugb2YgcmVmZXJlbmNlZCkge1xuICAgICAgaWYgKCFiYWNrbGlua3MuaGFzKHJlZmVyZW5jZSkpIHtcbiAgICAgICAgYmFja2xpbmtzLnNldChyZWZlcmVuY2UsIFtdKTtcbiAgICAgIH1cbiAgICAgIGJhY2tsaW5rcy5nZXQocmVmZXJlbmNlKT8ucHVzaChzb3VyY2VLZXkpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBiYWNrbGlua3M7XG59XG5cbi8qKlxuICogQnVpbGRzIHRoZSBuYW1lc3BhY2UgdHJlZSB0aGUgc2lkZWJhciBpcyBnZW5lcmF0ZWQgZnJvbS5cbiAqXG4gKiBAcGFyYW0gdHlwZXMgLSBUaGUgZG9jdW1lbnRlZCB0eXBlcywga2V5ZWQgYnkgcXVhbGlmaWVkIGlkLlxuICogQHJldHVybnMgVGhlIHJvb3Qgb2YgdGhlIHRyZWUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBidWlsZFNpZGViYXJUcmVlKHR5cGVzOiBNYXA8c3RyaW5nLCBUeXBlSW5mbz4pOiBTaWRlYmFyVHJlZU5vZGUge1xuICBjb25zdCByb290OiBTaWRlYmFyVHJlZU5vZGUgPSB7IGNoaWxkcmVuOiBuZXcgTWFwKCksIHR5cGVzOiBbXSB9O1xuICBmb3IgKGNvbnN0IFssIGluZm9dIG9mIHR5cGVzKSB7XG4gICAgY29uc3QgcGFydHMgPSBpbmZvLm5hbWVzcGFjZS5zcGxpdCgnLycpO1xuICAgIGxldCBub2RlID0gcm9vdDtcbiAgICBmb3IgKGNvbnN0IHBhcnQgb2YgcGFydHMpIHtcbiAgICAgIGxldCBjaGlsZCA9IG5vZGUuY2hpbGRyZW4uZ2V0KHBhcnQpO1xuICAgICAgaWYgKCFjaGlsZCkge1xuICAgICAgICBjaGlsZCA9IHsgY2hpbGRyZW46IG5ldyBNYXAoKSwgdHlwZXM6IFtdIH07XG4gICAgICAgIG5vZGUuY2hpbGRyZW4uc2V0KHBhcnQsIGNoaWxkKTtcbiAgICAgIH1cbiAgICAgIG5vZGUgPSBjaGlsZDtcbiAgICB9XG4gICAgbm9kZS50eXBlcy5wdXNoKGluZm8pO1xuICB9XG4gIHJldHVybiByb290O1xufVxuXG4vKipcbiAqIFRoZSByYXcgY29kZSBzaWduYXR1cmUgc2hvd24gb24gYSB0eXBlLW92ZXJ2aWV3IHBhZ2UncyBPRyBjYXJkLCBmb3IgdGhlIGtpbmRzIHRoYXQgcmVuZGVyIGEgc2luZ2xlXG4gKiBzaWduYXR1cmUgbGluZSAoZnVuY3Rpb24gLyB0eXBlIGFsaWFzIC8gdmFyaWFibGUpLiBDbGFzc2VzLCBpbnRlcmZhY2VzIGFuZCBlbnVtcyByZW5kZXIgbWVtYmVyXG4gKiB0YWJsZXMgaW5zdGVhZCwgc28gdGhleSBnZXQgbm8gc2lnbmF0dXJlIGJsb2NrLlxuICpcbiAqIEBwYXJhbSBuYW1lIC0gVGhlIHR5cGUncyBuYW1lLlxuICogQHBhcmFtIGluZm8gLSBUaGUgZG9jdW1lbnRlZCB0eXBlLlxuICogQHJldHVybnMgVGhlIHNpZ25hdHVyZSwgb3IgYHVuZGVmaW5lZGAgZm9yIGEga2luZCB0aGF0IHJlbmRlcnMgbWVtYmVyIHRhYmxlcyBpbnN0ZWFkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY29tcHV0ZU92ZXJ2aWV3U2lnbmF0dXJlKG5hbWU6IHN0cmluZywgaW5mbzogVHlwZUluZm8pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBpZiAoaW5mby5raW5kID09PSAnZnVuY3Rpb24nKSB7XG4gICAgY29uc3QgJGZ1bmN0aW9uID0gaW5mby5tZXRob2RzWzBdO1xuICAgIHJldHVybiAkZnVuY3Rpb24gPyBgZnVuY3Rpb24gJHskZnVuY3Rpb24uc2lnbmF0dXJlfTogJHskZnVuY3Rpb24ucmV0dXJuVHlwZX1gIDogdW5kZWZpbmVkO1xuICB9XG4gIGlmIChpbmZvLmtpbmQgPT09ICd0eXBlJykge1xuICAgIHJldHVybiBgdHlwZSAke2dldERpc3BsYXlOYW1lKGluZm8ubmFtZSwgaW5mbyl9ID0gJHtpbmZvLnR5cGVBbGlhc1RleHQgPz8gJ3Vua25vd24nfWA7XG4gIH1cbiAgcmV0dXJuIGluZm8ua2luZCA9PT0gJ3ZhcmlhYmxlJyA/IGAke2luZm8udmFyaWFibGVLZXl3b3JkID8/ICdsZXQnfSAke25hbWV9OiAke2luZm8udmFyaWFibGVUeXBlID8/ICd1bmtub3duJ31gIDogdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIFdyaXRlcyBvbmUgcGFnZSBwZXIgb3duIHByb3BlcnR5IGFuZCBwZXIgb3duIG1ldGhvZCBvdmVybG9hZCBrZXkgb2YgYSBjbGFzcyBvciBpbnRlcmZhY2UuXG4gKlxuICogQHBhcmFtIG5hbWUgLSBUaGUgdHlwZSdzIG5hbWUuXG4gKiBAcGFyYW0gaW5mbyAtIFRoZSBkb2N1bWVudGVkIHR5cGUuXG4gKiBAcGFyYW0gYWxsVHlwZXMgLSBFdmVyeSBkb2N1bWVudGVkIHR5cGUsIGtleWVkIGJ5IGAke25hbWVzcGFjZX0jJHtuYW1lfWAuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZW5lcmF0ZU1lbWJlclBhZ2VzKG5hbWU6IHN0cmluZywgaW5mbzogVHlwZUluZm8sIGFsbFR5cGVzOiBNYXA8c3RyaW5nLCBUeXBlSW5mbz4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgbnNEaXJlY3RvcnkgPSBnZXROYW1lc3BhY2VEaXJlY3RvcnkoaW5mby5uYW1lc3BhY2UpO1xuICBjb25zdCB0eXBlRmlsZURpcmVjdG9yeSA9IHRvVHlwZUZpbGVTZWdtZW50KGluZm8ubmFtZXNwYWNlLCBuYW1lKTtcbiAgY29uc3QgdHlwZVJvdXRlRGlyZWN0b3J5ID0gdG9UeXBlUm91dGVTZWdtZW50KGluZm8ubmFtZXNwYWNlLCBuYW1lKTtcbiAgY29uc3QgY29tcG9uZW50SW1wb3J0cyA9IGdldENvbXBvbmVudEltcG9ydHMoWydNZW1iZXJEZXRhaWwnXSk7XG5cbiAgLy8gUHJvcGVydHkgcGFnZXMgKHNraXAgaW5oZXJpdGVkIOKAlCB0aGV5IGxpdmUgb24gdGhlIHBhcmVudCB0eXBlKVxuICBjb25zdCBwcm9wZXJ0aWVzID0gaW5mby5wcm9wZXJ0aWVzLmZpbHRlcigocCkgPT4gIXAuaW5oZXJpdGVkRnJvbSk7XG4gIGZvciAoY29uc3QgcHJvcGVydHkgb2YgcHJvcGVydGllcykge1xuICAgIGNvbnN0IGZpbGVQYXRoID0gam9pbihnZXRBcGlEb2NTZXR0aW5ncygpLm91dHB1dERpcmVjdG9yeSwgbnNEaXJlY3RvcnksIHR5cGVGaWxlRGlyZWN0b3J5LCBgJHttZW1iZXJTbHVnKHByb3BlcnR5Lm5hbWUpfS5tZHhgKTtcbiAgICBhd2FpdCBlbnN1cmVEaXJlY3RvcnkoZmlsZVBhdGgpO1xuXG4gICAgY29uc3QgcHJvcGVydHlUaXRsZSA9IGAke25hbWV9LiR7cHJvcGVydHkubmFtZX1gO1xuICAgIGNvbnN0IGxpbmVzOiBzdHJpbmdbXSA9IHJlbmRlckZyb250TWF0dGVyKHtcbiAgICAgIGRlc2NyaXB0aW9uOiBwcm9wZXJ0eS5kZXNjcmlwdGlvbixcbiAgICAgIHNpZGViYXJMYWJlbDogcHJvcGVydHlUaXRsZSxcbiAgICAgIHNpZ25hdHVyZTogYCR7cHJvcGVydHkuc2lnbmF0dXJlfTogJHtwcm9wZXJ0eS50eXBlfWAsXG4gICAgICBzbHVnOiBgYXBpLyR7bnNEaXJlY3Rvcnl9LyR7dHlwZVJvdXRlRGlyZWN0b3J5fS8ke21lbWJlclJvdXRlU2VnbWVudChwcm9wZXJ0eS5uYW1lKX1gLFxuICAgICAgdGl0bGU6IHByb3BlcnR5VGl0bGVcbiAgICB9KTtcbiAgICBsaW5lcy5wdXNoKFxuICAgICAgLi4uY29tcG9uZW50SW1wb3J0cyxcbiAgICAgICcnLFxuICAgICAgLy8gQnJlYWRjcnVtYlxuICAgICAgYFske25hbWV9XSgke2dldEFwaURvY1NldHRpbmdzKCkuYmFzZVBhdGh9L2FwaS8ke25zRGlyZWN0b3J5fS8ke3R5cGVSb3V0ZURpcmVjdG9yeX0vKSDigLogJHtwcm9wZXJ0eS5uYW1lfWAsXG4gICAgICAnJ1xuICAgICk7XG5cbiAgICBjb25zdCBzdGF0aWNBdHRyaWJ1dGUgPSBwcm9wZXJ0eS5pc1N0YXRpYyA/ICcgaXNTdGF0aWM9e3RydWV9JyA6ICcnO1xuICAgIGNvbnN0IHR5cGVBdHRyaWJ1dGUgPSBgIHR5cGU9XCIke2VzY2FwZUpzeEF0dHJpYnV0ZShtYXJrZG93blRvSHRtbChyZW5kZXJUeXBlV2l0aExpbmtzKHByb3BlcnR5LnR5cGUsIGFsbFR5cGVzLCBuYW1lLCBpbmZvLm5hbWVzcGFjZSkpKX1cImA7XG4gICAgY29uc3QgZGVzY0F0dHJpYnV0ZSA9IHByb3BlcnR5LmRlc2NyaXB0aW9uID8gYCBkZXNjcmlwdGlvbj1cIiR7ZXNjYXBlSnN4QXR0cmlidXRlKG1hcmtkb3duVG9IdG1sKHJlc29sdmVMaW5rcyhwcm9wZXJ0eS5kZXNjcmlwdGlvbiwgYWxsVHlwZXMsIGluZm8ubmFtZXNwYWNlKSkpfVwiYCA6ICcnO1xuICAgIGNvbnN0IHJlbWFya3NBdHRyaWJ1dGUgPSBwcm9wZXJ0eS5yZW1hcmtzID8gYCByZW1hcmtzPVwiJHtlc2NhcGVKc3hBdHRyaWJ1dGUobWFya2Rvd25Ub0h0bWwocmVzb2x2ZUxpbmtzKHByb3BlcnR5LnJlbWFya3MsIGFsbFR5cGVzLCBpbmZvLm5hbWVzcGFjZSkpKX1cImAgOiAnJztcbiAgICBjb25zdCBzaW5jZUF0dHJpYnV0ZSA9IHByb3BlcnR5LnNpbmNlID8gYCBzaW5jZT1cIiR7ZXNjYXBlSnN4QXR0cmlidXRlKHByb3BlcnR5LnNpbmNlKX1cImAgOiAnJztcbiAgICBjb25zdCBleGFtcGxlc0F0dHJpYnV0ZSA9IHByb3BlcnR5LmV4YW1wbGVzLmxlbmd0aCA+IDAgPyBgIGV4YW1wbGVzPXske0pTT04uc3RyaW5naWZ5KHByb3BlcnR5LmV4YW1wbGVzKX19YCA6ICcnO1xuXG4gICAgbGluZXMucHVzaChgPE1lbWJlckRldGFpbCR7c3RhdGljQXR0cmlidXRlfSR7dHlwZUF0dHJpYnV0ZX0ke2Rlc2NBdHRyaWJ1dGV9JHtyZW1hcmtzQXR0cmlidXRlfSR7c2luY2VBdHRyaWJ1dGV9JHtleGFtcGxlc0F0dHJpYnV0ZX0gLz5gLCAnJyk7XG5cbiAgICBhd2FpdCB3cml0ZUZpbGUoZmlsZVBhdGgsIGxpbmVzLmpvaW4oJ1xcbicpLCAndXRmLTgnKTtcbiAgfVxuXG4gIC8vIE1ldGhvZCBwYWdlcyDigJQgZWFjaCBvdmVybG9hZCBrZXkgZ2V0cyBpdHMgb3duIHBhZ2UgKHNraXAgaW5oZXJpdGVkKVxuICBjb25zdCBtZXRob2RzID0gaW5mby5tZXRob2RzLmZpbHRlcigobSkgPT4gIW0uaW5oZXJpdGVkRnJvbSk7XG4gIGNvbnN0IG92ZXJsb2FkR3JvdXBzID0gbmV3IE1hcDxzdHJpbmcsIE1lbWJlckluZm9bXT4oKTtcbiAgZm9yIChjb25zdCBtZXRob2Qgb2YgbWV0aG9kcykge1xuICAgIGNvbnN0IGtleSA9IG1ldGhvZC5vdmVybG9hZEtleTtcbiAgICBpZiAoIW92ZXJsb2FkR3JvdXBzLmhhcyhrZXkpKSB7XG4gICAgICBvdmVybG9hZEdyb3Vwcy5zZXQoa2V5LCBbXSk7XG4gICAgfVxuICAgIG92ZXJsb2FkR3JvdXBzLmdldChrZXkpPy5wdXNoKG1ldGhvZCk7XG4gIH1cblxuICBmb3IgKGNvbnN0IFtvdmVybG9hZEtleSwgb3ZlcmxvYWRzXSBvZiBvdmVybG9hZEdyb3Vwcykge1xuICAgIGNvbnN0IGZpbGVTbHVnID0gb3ZlcmxvYWRTbHVnKG92ZXJsb2FkS2V5KTtcbiAgICBjb25zdCBmaWxlUGF0aCA9IGpvaW4oZ2V0QXBpRG9jU2V0dGluZ3MoKS5vdXRwdXREaXJlY3RvcnksIG5zRGlyZWN0b3J5LCB0eXBlRmlsZURpcmVjdG9yeSwgYCR7ZmlsZVNsdWd9Lm1keGApO1xuICAgIGF3YWl0IGVuc3VyZURpcmVjdG9yeShmaWxlUGF0aCk7XG5cbiAgICBjb25zdCBkaXNwbGF5TmFtZSA9IGAke25hbWV9LiR7b3ZlcmxvYWRLZXl9IG1ldGhvZGA7XG4gICAgLy8gQSBncm91cCBpcyBjcmVhdGVkIGJ5IGl0cyBmaXJzdCBvdmVybG9hZC5cbiAgICBjb25zdCBmaXJzdE92ZXJsb2FkID0gZW5zdXJlTm9uTnVsbGFibGUob3ZlcmxvYWRzWzBdKTtcblxuICAgIGNvbnN0IGxpbmVzOiBzdHJpbmdbXSA9IHJlbmRlckZyb250TWF0dGVyKHtcbiAgICAgIGRlc2NyaXB0aW9uOiBmaXJzdE92ZXJsb2FkLmRlc2NyaXB0aW9uLFxuICAgICAgc2lkZWJhckxhYmVsOiBgJHtuYW1lfS4ke292ZXJsb2FkS2V5fWAsXG4gICAgICBzaWduYXR1cmU6IGAke2ZpcnN0T3ZlcmxvYWQuc2lnbmF0dXJlfTogJHtmaXJzdE92ZXJsb2FkLnJldHVyblR5cGV9YCxcbiAgICAgIHNsdWc6IGBhcGkvJHtuc0RpcmVjdG9yeX0vJHt0eXBlUm91dGVEaXJlY3Rvcnl9LyR7b3ZlcmxvYWRSb3V0ZVNlZ21lbnQob3ZlcmxvYWRLZXkpfWAsXG4gICAgICB0aXRsZTogZGlzcGxheU5hbWVcbiAgICB9KTtcbiAgICBsaW5lcy5wdXNoKFxuICAgICAgLi4uY29tcG9uZW50SW1wb3J0cyxcbiAgICAgICcnLFxuICAgICAgLy8gQnJlYWRjcnVtYlxuICAgICAgYFske25hbWV9XSgke2dldEFwaURvY1NldHRpbmdzKCkuYmFzZVBhdGh9L2FwaS8ke25zRGlyZWN0b3J5fS8ke3R5cGVSb3V0ZURpcmVjdG9yeX0vKSDigLogJHtvdmVybG9hZEtleX1gLFxuICAgICAgJydcbiAgICApO1xuXG4gICAgZm9yIChjb25zdCBvdmVybG9hZCBvZiBvdmVybG9hZHMpIHtcbiAgICAgIHJlbmRlck1ldGhvZE92ZXJsb2FkTWR4KGxpbmVzLCBvdmVybG9hZCwgbmFtZSwgaW5mby5uYW1lc3BhY2UsIGFsbFR5cGVzKTtcbiAgICAgIGlmIChvdmVybG9hZHMubGVuZ3RoID4gMSkge1xuICAgICAgICBsaW5lcy5wdXNoKCctLS0nLCAnJyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgYXdhaXQgd3JpdGVGaWxlKGZpbGVQYXRoLCBsaW5lcy5qb2luKCdcXG4nKSwgJ3V0Zi04Jyk7XG4gIH1cbn1cblxuLyoqXG4gKiBXcml0ZXMgZWFjaCBtb2R1bGUncyBpbmRleCBwYWdlIGFuZCB0aGUgcm9vdCBBUEkgaW5kZXguXG4gKlxuICogQHBhcmFtIHR5cGVzIC0gVGhlIGRvY3VtZW50ZWQgdHlwZXMsIGtleWVkIGJ5IHF1YWxpZmllZCBpZC5cbiAqIEBwYXJhbSBhbGxUeXBlcyAtIEV2ZXJ5IGRvY3VtZW50ZWQgdHlwZSwga2V5ZWQgYnkgYCR7bmFtZXNwYWNlfSMke25hbWV9YC5cbiAqIEBwYXJhbSBtb2R1bGVPdmVydmlld3MgLSBFYWNoIG5hbWVzcGFjZSdzIGBAZmlsZWAgb3ZlcnZpZXcuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZW5lcmF0ZU5hbWVzcGFjZUluZGV4UGFnZXMoXG4gIHR5cGVzOiBNYXA8c3RyaW5nLCBUeXBlSW5mbz4sXG4gIGFsbFR5cGVzOiBNYXA8c3RyaW5nLCBUeXBlSW5mbz4sXG4gIG1vZHVsZU92ZXJ2aWV3czogTWFwPHN0cmluZywgc3RyaW5nPlxuKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IG5hbWVzcGFjZXMgPSBuZXcgTWFwPHN0cmluZywgVHlwZUluZm9bXT4oKTtcbiAgZm9yIChjb25zdCBbLCBpbmZvXSBvZiB0eXBlcykge1xuICAgIGlmICghbmFtZXNwYWNlcy5oYXMoaW5mby5uYW1lc3BhY2UpKSB7XG4gICAgICBuYW1lc3BhY2VzLnNldChpbmZvLm5hbWVzcGFjZSwgW10pO1xuICAgIH1cbiAgICBuYW1lc3BhY2VzLmdldChpbmZvLm5hbWVzcGFjZSk/LnB1c2goaW5mbyk7XG4gIH1cblxuICBmb3IgKGNvbnN0IFtuYW1lc3BhY2UsIG5zVHlwZXNdIG9mIG5hbWVzcGFjZXMpIHtcbiAgICBjb25zdCBuc0RpcmVjdG9yeSA9IGdldE5hbWVzcGFjZURpcmVjdG9yeShuYW1lc3BhY2UpO1xuICAgIGNvbnN0IGZpbGVQYXRoID0gam9pbihnZXRBcGlEb2NTZXR0aW5ncygpLm91dHB1dERpcmVjdG9yeSwgbnNEaXJlY3RvcnksICdpbmRleC5tZHgnKTtcbiAgICBhd2FpdCBlbnN1cmVEaXJlY3RvcnkoZmlsZVBhdGgpO1xuXG4gICAgLy8gVGhlIG1vZHVsZSdzIGBAZmlsZWAgdGV4dCBkb3VibGVzIGFzIGl0cyBkZXNjcmlwdGlvbi5cbiAgICAvLyBXaXRob3V0IGl0IHRoZSBtb2R1bGUgY2FyZCB3YXMgdGl0bGUtb25seSB3aGlsZSBldmVyeSBtZW1iZXIgY2FyZCB1bmRlciBpdCBjYXJyaWVkIG9uZS5cbiAgICBjb25zdCBvdmVydmlldyA9IG1vZHVsZU92ZXJ2aWV3cy5nZXQobmFtZXNwYWNlKTtcbiAgICBjb25zdCBsaW5lczogc3RyaW5nW10gPSByZW5kZXJGcm9udE1hdHRlcih7XG4gICAgICBkZXNjcmlwdGlvbjogb3ZlcnZpZXcsXG4gICAgICBzaWRlYmFyTGFiZWw6IG5hbWVzcGFjZSxcbiAgICAgIHNsdWc6IGBhcGkvJHtuc0RpcmVjdG9yeX1gLFxuICAgICAgdGl0bGU6IG5hbWVzcGFjZVxuICAgIH0pO1xuXG4gICAgLy8gTW9kdWxlIEBmaWxlIG92ZXJ2aWV3IHRleHRcbiAgICBpZiAob3ZlcnZpZXcpIHtcbiAgICAgIGxpbmVzLnB1c2gocmVuZGVyTWR4UHJvc2Uob3ZlcnZpZXcsIGFsbFR5cGVzLCBuYW1lc3BhY2UpLCAnJyk7XG4gICAgfVxuXG4gICAgcmVuZGVyTmFtZXNwYWNlVGFibGUobGluZXMsICdDbGFzc2VzJywgJ0NsYXNzJywgbnNUeXBlcy5maWx0ZXIoKHQpID0+IHQua2luZCA9PT0gJ2NsYXNzJyksIGFsbFR5cGVzLCBuYW1lc3BhY2UpO1xuICAgIHJlbmRlck5hbWVzcGFjZVRhYmxlKGxpbmVzLCAnSW50ZXJmYWNlcycsICdJbnRlcmZhY2UnLCBuc1R5cGVzLmZpbHRlcigodCkgPT4gdC5raW5kID09PSAnaW50ZXJmYWNlJyksIGFsbFR5cGVzLCBuYW1lc3BhY2UpO1xuICAgIHJlbmRlck5hbWVzcGFjZVRhYmxlKGxpbmVzLCAnRnVuY3Rpb25zJywgJ0Z1bmN0aW9uJywgbnNUeXBlcy5maWx0ZXIoKHQpID0+IHQua2luZCA9PT0gJ2Z1bmN0aW9uJyksIGFsbFR5cGVzLCBuYW1lc3BhY2UpO1xuICAgIHJlbmRlck5hbWVzcGFjZVRhYmxlKGxpbmVzLCAnVHlwZXMnLCAnVHlwZScsIG5zVHlwZXMuZmlsdGVyKCh0KSA9PiB0LmtpbmQgPT09ICd0eXBlJyksIGFsbFR5cGVzLCBuYW1lc3BhY2UpO1xuICAgIHJlbmRlck5hbWVzcGFjZVRhYmxlKGxpbmVzLCAnRW51bXMnLCAnRW51bScsIG5zVHlwZXMuZmlsdGVyKCh0KSA9PiB0LmtpbmQgPT09ICdlbnVtJyksIGFsbFR5cGVzLCBuYW1lc3BhY2UpO1xuICAgIHJlbmRlck5hbWVzcGFjZVRhYmxlKGxpbmVzLCAnVmFyaWFibGVzJywgJ1ZhcmlhYmxlJywgbnNUeXBlcy5maWx0ZXIoKHQpID0+IHQua2luZCA9PT0gJ3ZhcmlhYmxlJyksIGFsbFR5cGVzLCBuYW1lc3BhY2UpO1xuXG4gICAgYXdhaXQgd3JpdGVGaWxlKGZpbGVQYXRoLCBsaW5lcy5qb2luKCdcXG4nKSwgJ3V0Zi04Jyk7XG4gIH1cblxuICAvLyBSb290IEFQSSBpbmRleCBwYWdlIGxpc3RpbmcgZXZlcnkgbW9kdWxlLlxuICBjb25zdCBzb3J0ZWROYW1lc3BhY2VzID0gWy4uLm5hbWVzcGFjZXMua2V5cygpXS5zb3J0KChhLCBiKSA9PiBhLmxvY2FsZUNvbXBhcmUoYikpO1xuICBjb25zdCBhcGlJbmRleEludHJvID0gZ2V0QXBpSW5kZXhJbnRybyhzb3J0ZWROYW1lc3BhY2VzKTtcbiAgY29uc3Qgcm9vdExpbmVzOiBzdHJpbmdbXSA9IHJlbmRlckZyb250TWF0dGVyKHtcbiAgICBkZXNjcmlwdGlvbjogYXBpSW5kZXhJbnRybyxcbiAgICBzaWRlYmFyTGFiZWw6ICdPdmVydmlldycsXG4gICAgc2x1ZzogJ2FwaScsXG4gICAgdGl0bGU6ICdBUEkgcmVmZXJlbmNlJ1xuICB9KTtcbiAgcm9vdExpbmVzLnB1c2goYXBpSW5kZXhJbnRybywgJycsICcjIyBNb2R1bGVzJywgJycpO1xuICBmb3IgKGNvbnN0IG5hbWVzcGFjZSBvZiBzb3J0ZWROYW1lc3BhY2VzKSB7XG4gICAgcm9vdExpbmVzLnB1c2goYC0gWyR7bmFtZXNwYWNlfV0oJHtnZXRBcGlEb2NTZXR0aW5ncygpLmJhc2VQYXRofS9hcGkvJHtnZXROYW1lc3BhY2VEaXJlY3RvcnkobmFtZXNwYWNlKX0vKWApO1xuICB9XG4gIHJvb3RMaW5lcy5wdXNoKCcnKTtcbiAgY29uc3Qgcm9vdEZpbGVQYXRoID0gam9pbihnZXRBcGlEb2NTZXR0aW5ncygpLm91dHB1dERpcmVjdG9yeSwgJ2luZGV4Lm1keCcpO1xuICBhd2FpdCBlbnN1cmVEaXJlY3Rvcnkocm9vdEZpbGVQYXRoKTtcbiAgYXdhaXQgd3JpdGVGaWxlKHJvb3RGaWxlUGF0aCwgcm9vdExpbmVzLmpvaW4oJ1xcbicpLCAndXRmLTgnKTtcbn1cblxuLyoqXG4gKiBSZW5kZXJzIGEgdHlwZSdzIG92ZXJ2aWV3IHBhZ2UuXG4gKlxuICogQHBhcmFtIG5hbWUgLSBUaGUgdHlwZSdzIG5hbWUuXG4gKiBAcGFyYW0gaW5mbyAtIFRoZSBkb2N1bWVudGVkIHR5cGUuXG4gKiBAcGFyYW0gYWxsVHlwZXMgLSBFdmVyeSBkb2N1bWVudGVkIHR5cGUsIGtleWVkIGJ5IGAke25hbWVzcGFjZX0jJHtuYW1lfWAuXG4gKiBAcmV0dXJucyBUaGUgcGFnZSdzIGNvbnRlbnQsIGJlZm9yZSBiYWNrbGlua3MsIGFuZCB0aGUgcGF0aCBpdCBpcyB3cml0dGVuIHRvLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2VuZXJhdGVPdmVydmlld1BhZ2UobmFtZTogc3RyaW5nLCBpbmZvOiBUeXBlSW5mbywgYWxsVHlwZXM6IE1hcDxzdHJpbmcsIFR5cGVJbmZvPik6IFByb21pc2U8UGFnZUNvbnRlbnQ+IHtcbiAgY29uc3QgbnNEaXJlY3RvcnkgPSBnZXROYW1lc3BhY2VEaXJlY3RvcnkoaW5mby5uYW1lc3BhY2UpO1xuICBjb25zdCB0eXBlRmlsZVNsdWcgPSB0b1R5cGVGaWxlU2VnbWVudChpbmZvLm5hbWVzcGFjZSwgbmFtZSk7XG4gIGNvbnN0IHR5cGVSb3V0ZVNsdWcgPSB0b1R5cGVSb3V0ZVNlZ21lbnQoaW5mby5uYW1lc3BhY2UsIG5hbWUpO1xuICBjb25zdCBmaWxlUGF0aCA9IGpvaW4oZ2V0QXBpRG9jU2V0dGluZ3MoKS5vdXRwdXREaXJlY3RvcnksIG5zRGlyZWN0b3J5LCB0eXBlRmlsZVNsdWcsICdpbmRleC5tZHgnKTtcbiAgYXdhaXQgZW5zdXJlRGlyZWN0b3J5KGZpbGVQYXRoKTtcblxuICAvLyBGcm9udG1hdHRlclxuICBjb25zdCBkaXNwbGF5TmFtZSA9IGdldERpc3BsYXlOYW1lKG5hbWUsIGluZm8pO1xuICBjb25zdCBsaW5lczogc3RyaW5nW10gPSByZW5kZXJGcm9udE1hdHRlcih7XG4gICAgZGVzY3JpcHRpb246IGluZm8uZGVzY3JpcHRpb24sXG4gICAgc2lkZWJhckxhYmVsOiBkaXNwbGF5TmFtZSxcbiAgICBzaWduYXR1cmU6IGNvbXB1dGVPdmVydmlld1NpZ25hdHVyZShuYW1lLCBpbmZvKSxcbiAgICBzbHVnOiBgYXBpLyR7bnNEaXJlY3Rvcnl9LyR7dHlwZVJvdXRlU2x1Z31gLFxuICAgIHRpdGxlOiBkaXNwbGF5TmFtZVxuICB9KTtcblxuICAvLyBDb21wb25lbnQgaW1wb3J0cyDigJQgY29tcHV0ZSByZWxhdGl2ZSBwYXRoIGZyb20gZ2VuZXJhdGVkIHBhZ2UgdG8gY29tcG9uZW50c1xuICBsaW5lcy5wdXNoKC4uLmdldENvbXBvbmVudEltcG9ydHMoWydDb25zdHJ1Y3RvckJsb2NrJywgJ0ltcG9ydFN0YXRlbWVudCcsICdNZXRob2RUYWJsZScsICdQcm9wZXJ0eVRhYmxlJywgJ1R5cGVTaWduYXR1cmUnXSksICcnKTtcblxuICAvLyBEZXNjcmlwdGlvblxuICBpZiAoaW5mby5kZXNjcmlwdGlvbikge1xuICAgIGxpbmVzLnB1c2gocmVuZGVyTWR4UHJvc2UoaW5mby5kZXNjcmlwdGlvbiwgYWxsVHlwZXMsIGluZm8ubmFtZXNwYWNlKSwgJycpO1xuICB9XG5cbiAgLy8gUmVtYXJrc1xuICBpZiAoaW5mby5yZW1hcmtzKSB7XG4gICAgY29uc3QgcmVtYXJrc0Jsb2NrID0gcmVuZGVyTWR4UHJvc2UoaW5mby5yZW1hcmtzLCBhbGxUeXBlcywgaW5mby5uYW1lc3BhY2UpO1xuICAgIGxpbmVzLnB1c2gocmVtYXJrc0Jsb2NrLnNwbGl0KCdcXG4nKS5tYXAoKGxpbmUpID0+IChsaW5lLmxlbmd0aCA+IDAgPyBgPiAke2xpbmV9YCA6ICc+JykpLmpvaW4oJ1xcbicpLCAnJyk7XG4gIH1cblxuICAvLyBJbXBvcnQgc3RhdGVtZW50XG4gIGxpbmVzLnB1c2goYDxJbXBvcnRTdGF0ZW1lbnQgdGV4dD1cIiR7ZXNjYXBlSnN4QXR0cmlidXRlKGdldEltcG9ydFN0YXRlbWVudChpbmZvKSl9XCIgLz5gLCAnJyk7XG5cbiAgLy8gRXhhbXBsZXNcbiAgZm9yIChjb25zdCBleGFtcGxlIG9mIGluZm8uZXhhbXBsZXMpIHtcbiAgICBsaW5lcy5wdXNoKCcqKkV4YW1wbGU6KionLCAnJywgcmVuZGVyRXhhbXBsZU1keChleGFtcGxlLCBhbGxUeXBlcywgaW5mby5uYW1lc3BhY2UpLCAnJyk7XG4gIH1cblxuICAvLyBGdW5jdGlvbnMgcmVuZGVyIGxpa2UgbWV0aG9kIGRldGFpbCBwYWdlcyDigJQgc2lnbmF0dXJlLCBwYXJhbXMsIHJldHVybnNcbiAgaWYgKGluZm8ua2luZCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJlbmRlckZ1bmN0aW9uUGFnZShsaW5lcywgaW5mbywgYWxsVHlwZXMpO1xuICAgIHJldHVybiB7IGNvbnRlbnQ6IGxpbmVzLmpvaW4oJ1xcbicpLCBmaWxlUGF0aCB9O1xuICB9XG5cbiAgLy8gVmFyaWFibGVzIHJlbmRlciB3aXRoIGRlY2xhcmF0aW9uIGtleXdvcmQgYW5kIHR5cGVcbiAgaWYgKGluZm8ua2luZCA9PT0gJ3ZhcmlhYmxlJykge1xuICAgIHJlbmRlclZhcmlhYmxlUGFnZShsaW5lcywgbmFtZSwgaW5mbywgYWxsVHlwZXMpO1xuICAgIHJldHVybiB7IGNvbnRlbnQ6IGxpbmVzLmpvaW4oJ1xcbicpLCBmaWxlUGF0aCB9O1xuICB9XG5cbiAgLy8gRW51bXMgcmVuZGVyIHRoZWlyIG1lbWJlcnMgbGlzdFxuICBpZiAoaW5mby5raW5kID09PSAnZW51bScpIHtcbiAgICByZW5kZXJFbnVtUGFnZShsaW5lcywgaW5mbywgYWxsVHlwZXMpO1xuICAgIHJldHVybiB7IGNvbnRlbnQ6IGxpbmVzLmpvaW4oJ1xcbicpLCBmaWxlUGF0aCB9O1xuICB9XG5cbiAgLy8gVHlwZSBhbGlhc2VzIHJlbmRlciB0aGVpciByaWdodC1oYW5kLXNpZGUgc2lnbmF0dXJlXG4gIGlmIChpbmZvLmtpbmQgPT09ICd0eXBlJykge1xuICAgIHJlbmRlclR5cGVBbGlhc1BhZ2UobGluZXMsIGluZm8sIGFsbFR5cGVzKTtcbiAgICByZXR1cm4geyBjb250ZW50OiBsaW5lcy5qb2luKCdcXG4nKSwgZmlsZVBhdGggfTtcbiAgfVxuXG4gIC8vIENsYXNzZXMgLyBpbnRlcmZhY2VzOiBzaWduYXR1cmUgKyBleHRlbmRzL2ltcGxlbWVudHMgKyBjb25zdHJ1Y3RvciArIG1lbWJlciB0YWJsZXNcbiAgY29uc3QgdHlwZVBhcmFtc0F0dHJpYnV0ZSA9IGluZm8udHlwZVBhcmFtZXRlcnMubGVuZ3RoID4gMCA/IGAgdHlwZVBhcmFtcz17JHtKU09OLnN0cmluZ2lmeShpbmZvLnR5cGVQYXJhbWV0ZXJzKX19YCA6ICcnO1xuICBjb25zdCBleHRlbmRzQXR0cmlidXRlID0gaW5mby5iYXNlVHlwZXMubGVuZ3RoID4gMCA/IGAgZXh0ZW5kcz17JHtKU09OLnN0cmluZ2lmeShpbmZvLmJhc2VUeXBlcyl9fWAgOiAnJztcbiAgY29uc3QgaW1wbGVtZW50c0F0dHJpYnV0ZSA9IGluZm8uaW1wbGVtZW50c1R5cGVzLmxlbmd0aCA+IDAgPyBgIGltcGxlbWVudHM9eyR7SlNPTi5zdHJpbmdpZnkoaW5mby5pbXBsZW1lbnRzVHlwZXMpfX1gIDogJyc7XG4gIGxpbmVzLnB1c2goYDxUeXBlU2lnbmF0dXJlIGtpbmQ9XCIke2luZm8ua2luZH1cIiBuYW1lPVwiJHtuYW1lfVwiJHt0eXBlUGFyYW1zQXR0cmlidXRlfSR7ZXh0ZW5kc0F0dHJpYnV0ZX0ke2ltcGxlbWVudHNBdHRyaWJ1dGV9IC8+YCwgJycpO1xuXG4gIGlmIChpbmZvLmJhc2VUeXBlcy5sZW5ndGggPiAwKSB7XG4gICAgY29uc3QgbGlua2VkVHlwZXMgPSBpbmZvLmJhc2VUeXBlcy5tYXAoKHQpID0+IGxpbmtCYXNlVHlwZSh0LCBhbGxUeXBlcywgaW5mby5uYW1lc3BhY2UpKTtcbiAgICBsaW5lcy5wdXNoKGAqKkV4dGVuZHM6KiogJHtsaW5rZWRUeXBlcy5qb2luKCcsICcpfWAsICcnKTtcbiAgfVxuXG4gIGlmIChpbmZvLmltcGxlbWVudHNUeXBlcy5sZW5ndGggPiAwKSB7XG4gICAgY29uc3QgbGlua2VkVHlwZXMgPSBpbmZvLmltcGxlbWVudHNUeXBlcy5tYXAoKHQpID0+IGxpbmtCYXNlVHlwZSh0LCBhbGxUeXBlcywgaW5mby5uYW1lc3BhY2UpKTtcbiAgICBsaW5lcy5wdXNoKGAqKkltcGxlbWVudHM6KiogJHtsaW5rZWRUeXBlcy5qb2luKCcsICcpfWAsICcnKTtcbiAgfVxuXG4gIHJlbmRlckNvbnN0cnVjdG9yTWR4KGxpbmVzLCBuYW1lLCBpbmZvLCBhbGxUeXBlcyk7XG4gIHJlbmRlclByb3BlcnR5VGFibGVNZHgobGluZXMsIGluZm8sIGFsbFR5cGVzKTtcbiAgcmVuZGVyTWV0aG9kVGFibGVNZHgobGluZXMsIGluZm8sIGFsbFR5cGVzKTtcblxuICByZXR1cm4geyBjb250ZW50OiBsaW5lcy5qb2luKCdcXG4nKSwgZmlsZVBhdGggfTtcbn1cblxuLyoqXG4gKiBXcml0ZXMgdGhlIFN0YXJsaWdodCBzaWRlYmFyIG9mIHRoZSBBUEkgcmVmZXJlbmNlLlxuICpcbiAqIEBwYXJhbSB0eXBlcyAtIFRoZSBkb2N1bWVudGVkIHR5cGVzLCBrZXllZCBieSBxdWFsaWZpZWQgaWQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZW5lcmF0ZVNpZGViYXJKc29uKHR5cGVzOiBNYXA8c3RyaW5nLCBUeXBlSW5mbz4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3Qgcm9vdCA9IGJ1aWxkU2lkZWJhclRyZWUodHlwZXMpO1xuXG4gIGNvbnN0IGdyb3VwczogU2lkZWJhckVudHJ5W10gPSBbXTtcbiAgY29uc3QgdG9wTGV2ZWxzID0gWy4uLnJvb3QuY2hpbGRyZW5dLnNvcnQoKFthXSwgW2JdKSA9PiBhLmxvY2FsZUNvbXBhcmUoYikpO1xuICBmb3IgKGNvbnN0IFt0b3BMZXZlbCwgY2hpbGRdIG9mIHRvcExldmVscykge1xuICAgIGdyb3Vwcy5wdXNoKHNpZGViYXJUcmVlVG9FbnRyaWVzKGNoaWxkLCB0b3BMZXZlbCkpO1xuICB9XG5cbiAgY29uc3Qgd3JhcHBlZFNpZGViYXI6IFNpZGViYXJFbnRyeVtdID0gW3tcbiAgICBjb2xsYXBzZWQ6IGZhbHNlLFxuICAgIGl0ZW1zOiBncm91cHMsXG4gICAgbGFiZWw6ICdBUEkgcmVmZXJlbmNlJ1xuICB9XTtcblxuICBhd2FpdCB3cml0ZUZpbGUoZ2V0QXBpRG9jU2V0dGluZ3MoKS5zaWRlYmFyRmlsZSwgSlNPTi5zdHJpbmdpZnkod3JhcHBlZFNpZGViYXIsIG51bGwsIEpTT05fSU5ERU5UKSwgJ3V0Zi04Jyk7XG4gIGNvbnNvbGUud2FybihgR2VuZXJhdGVkIHNpZGViYXIgd2l0aCAke1N0cmluZyhncm91cHMubGVuZ3RoKX0gdG9wLWxldmVsIG1vZHVsZSBncm91cHNgKTtcbn1cblxuLyoqXG4gKiBSZW5kZXJzIGEgY2xhc3MncyBjb25zdHJ1Y3RvciBibG9jay5cbiAqXG4gKiBAcGFyYW0gbGluZXMgLSBUaGUgcGFnZSBsaW5lcyB0byBhcHBlbmQgdG8uXG4gKiBAcGFyYW0gbmFtZSAtIFRoZSB0eXBlJ3MgbmFtZS5cbiAqIEBwYXJhbSBpbmZvIC0gVGhlIGRvY3VtZW50ZWQgdHlwZS5cbiAqIEBwYXJhbSBhbGxUeXBlcyAtIEV2ZXJ5IGRvY3VtZW50ZWQgdHlwZSwga2V5ZWQgYnkgYCR7bmFtZXNwYWNlfSMke25hbWV9YC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbmRlckNvbnN0cnVjdG9yTWR4KGxpbmVzOiBzdHJpbmdbXSwgbmFtZTogc3RyaW5nLCBpbmZvOiBUeXBlSW5mbywgYWxsVHlwZXM6IE1hcDxzdHJpbmcsIFR5cGVJbmZvPik6IHZvaWQge1xuICBjb25zdCBjb25zdHJ1Y3RvciA9IGluZm8uY29uc3RydWN0b3JJbmZvO1xuICBpZiAoIWNvbnN0cnVjdG9yKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGNvbnN0IGN0b3JTaWcgPSBgbmV3ICR7bmFtZX0ke2NvbnN0cnVjdG9yLnNpZ25hdHVyZX1gO1xuICBjb25zdCBjdG9yRGVzYyA9IGNvbnN0cnVjdG9yLmRlc2NyaXB0aW9uXG4gICAgPyBgIGRlc2NyaXB0aW9uPVwiJHtlc2NhcGVKc3hBdHRyaWJ1dGUobWFya2Rvd25Ub0h0bWwocmVzb2x2ZUxpbmtzKGNvbnN0cnVjdG9yLmRlc2NyaXB0aW9uLCBhbGxUeXBlcywgaW5mby5uYW1lc3BhY2UpKSl9XCJgXG4gICAgOiAnJztcbiAgbGluZXMucHVzaChgPENvbnN0cnVjdG9yQmxvY2sgc2lnbmF0dXJlPVwiJHtlc2NhcGVKc3hBdHRyaWJ1dGUoY3RvclNpZyl9XCIke2N0b3JEZXNjfSAvPmAsICcnKTtcbn1cblxuLyoqXG4gKiBSZW5kZXJzIGFuIGVudW0ncyBtZW1iZXJzLlxuICpcbiAqIEBwYXJhbSBsaW5lcyAtIFRoZSBwYWdlIGxpbmVzIHRvIGFwcGVuZCB0by5cbiAqIEBwYXJhbSBpbmZvIC0gVGhlIGRvY3VtZW50ZWQgdHlwZS5cbiAqIEBwYXJhbSBhbGxUeXBlcyAtIEV2ZXJ5IGRvY3VtZW50ZWQgdHlwZSwga2V5ZWQgYnkgYCR7bmFtZXNwYWNlfSMke25hbWV9YC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbmRlckVudW1QYWdlKGxpbmVzOiBzdHJpbmdbXSwgaW5mbzogVHlwZUluZm8sIGFsbFR5cGVzOiBNYXA8c3RyaW5nLCBUeXBlSW5mbz4pOiB2b2lkIHtcbiAgbGluZXMucHVzaChgPFR5cGVTaWduYXR1cmUga2luZD1cImVudW1cIiBuYW1lPVwiJHtpbmZvLm5hbWV9XCIgLz5gLCAnJyk7XG5cbiAgaWYgKGluZm8uZW51bU1lbWJlcnMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgbGluZXMucHVzaCgnKipNZW1iZXJzOioqJywgJycsICd8IE1lbWJlciB8IFZhbHVlIHwgRGVzY3JpcHRpb24gfCcsICd8IDotLSB8IDotLSB8IDotLSB8Jyk7XG4gIGZvciAoY29uc3QgbWVtYmVyIG9mIGluZm8uZW51bU1lbWJlcnMpIHtcbiAgICBjb25zdCB2YWx1ZSA9IG1lbWJlci52YWx1ZSA/IGBcXGAke2VzY2FwZU1hcmtkb3duKG1lbWJlci52YWx1ZSl9XFxgYCA6ICcnO1xuICAgIGxpbmVzLnB1c2goYHwgXFxgJHttZW1iZXIubmFtZX1cXGAgfCAke3ZhbHVlfSB8ICR7ZXNjYXBlTWFya2Rvd24ocmVzb2x2ZUxpbmtzKG1lbWJlci5kZXNjcmlwdGlvbiwgYWxsVHlwZXMsIGluZm8ubmFtZXNwYWNlKSl9IHxgKTtcbiAgfVxuICBsaW5lcy5wdXNoKCcnKTtcbn1cblxuLyoqXG4gKiBSZW5kZXIgdGhlIFN0YXJsaWdodCBmcm9udG1hdHRlciBibG9jayAodGhyb3VnaCB0aGUgY2xvc2luZyBgLS0tYCBhbmQgaXRzIGJsYW5rIGxpbmUpIHNoYXJlZCBieSBldmVyeVxuICogZ2VuZXJhdGVkIHBhZ2Uga2luZDogbW9kdWxlIGluZGV4LCB0eXBlIG92ZXJ2aWV3LCBwcm9wZXJ0eSwgYW5kIG1ldGhvZC5cbiAqXG4gKiBFdmVyeSBwYWdlIGtpbmQgZ29lcyB0aHJvdWdoIGhlcmUgc28gbm8gZmllbGQgY2FuIGJlIGVtaXR0ZWQgb24gc29tZSBraW5kcyBhbmQgc2lsZW50bHkgZHJvcHBlZCBvblxuICogb3RoZXJzLiBgZGVzY3JpcHRpb25gIGluIHBhcnRpY3VsYXIgaXMgbm90IGp1c3QgU0VPIG1ldGFkYXRhIOKAlCBpdCBpcyB0aGUgbGluZSB0aGUgT0cgY2FyZCByZW5kZXJzIHVuZGVyXG4gKiB0aGUgdGl0bGUsIHNvIGEgcGFnZSBraW5kIHRoYXQgc2tpcHBlZCBpdCBwcm9kdWNlZCBhIHRpdGxlLW9ubHkgY2FyZCBuZXh0IHRvIGZ1bGx5IHBvcHVsYXRlZCBvbmVzLlxuICpcbiAqIEBwYXJhbSBmcm9udE1hdHRlciAtIFRoZSBwYWdlJ3MgZnJvbnRtYXR0ZXIgZmllbGRzLlxuICogQHJldHVybnMgVGhlIGZyb250bWF0dGVyIGxpbmVzLCB0aHJvdWdoIHRoZSBjbG9zaW5nIGAtLS1gIGFuZCBpdHMgYmxhbmsgbGluZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbmRlckZyb250TWF0dGVyKGZyb250TWF0dGVyOiBQYWdlRnJvbnRNYXR0ZXIpOiBzdHJpbmdbXSB7XG4gIHJldHVybiBbXG4gICAgJy0tLScsXG4gICAgYHRpdGxlOiBcIiR7ZXNjYXBlWWFtbChmcm9udE1hdHRlci50aXRsZSl9XCJgLFxuICAgIGBzbHVnOiBcIiR7ZnJvbnRNYXR0ZXIuc2x1Z31cImAsXG4gICAgLi4uKGZyb250TWF0dGVyLmRlc2NyaXB0aW9uID8gW2BkZXNjcmlwdGlvbjogXCIke2VzY2FwZVlhbWwoc3RyaXBNYXJrZG93bihmcm9udE1hdHRlci5kZXNjcmlwdGlvbikpfVwiYF0gOiBbXSksXG4gICAgLi4uKGZyb250TWF0dGVyLnNpZ25hdHVyZSA/IFtgc2lnbmF0dXJlOiBcIiR7ZXNjYXBlWWFtbCh0cnVuY2F0ZVNpZ25hdHVyZShmcm9udE1hdHRlci5zaWduYXR1cmUpKX1cImBdIDogW10pLFxuICAgICdlZGl0VXJsOiBmYWxzZScsXG4gICAgJ3NpZGViYXI6JyxcbiAgICBgICBsYWJlbDogXCIke2VzY2FwZVlhbWwoZnJvbnRNYXR0ZXIuc2lkZWJhckxhYmVsKX1cImAsXG4gICAgJy0tLScsXG4gICAgJydcbiAgXTtcbn1cblxuLyoqXG4gKiBSZW5kZXJzIGEgZnVuY3Rpb24ncyBzaWduYXR1cmUsIHBhcmFtZXRlcnMsIHJldHVybiB2YWx1ZSBhbmQgZXhhbXBsZXMuXG4gKlxuICogQHBhcmFtIGxpbmVzIC0gVGhlIHBhZ2UgbGluZXMgdG8gYXBwZW5kIHRvLlxuICogQHBhcmFtIGluZm8gLSBUaGUgZG9jdW1lbnRlZCB0eXBlLlxuICogQHBhcmFtIGFsbFR5cGVzIC0gRXZlcnkgZG9jdW1lbnRlZCB0eXBlLCBrZXllZCBieSBgJHtuYW1lc3BhY2V9IyR7bmFtZX1gLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVuZGVyRnVuY3Rpb25QYWdlKGxpbmVzOiBzdHJpbmdbXSwgaW5mbzogVHlwZUluZm8sIGFsbFR5cGVzOiBNYXA8c3RyaW5nLCBUeXBlSW5mbz4pOiB2b2lkIHtcbiAgY29uc3QgJGZ1bmN0aW9uID0gaW5mby5tZXRob2RzWzBdO1xuICBpZiAoISRmdW5jdGlvbikge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGxpbmVzLnB1c2goJyoqU2lnbmF0dXJlOioqJywgJycsICdgYGB0cycsIGBmdW5jdGlvbiAkeyRmdW5jdGlvbi5zaWduYXR1cmV9OiAkeyRmdW5jdGlvbi5yZXR1cm5UeXBlfWAsICdgYGAnLCAnJyk7XG5cbiAgaWYgKCRmdW5jdGlvbi5wYXJhbWV0ZXJzLmxlbmd0aCA+IDApIHtcbiAgICBsaW5lcy5wdXNoKCcqKlBhcmFtZXRlcnM6KionLCAnJywgJ3wgUGFyYW1ldGVyIHwgVHlwZSB8IERlc2NyaXB0aW9uIHwnLCAnfCA6LS0gfCA6LS0gfCA6LS0gfCcpO1xuICAgIGZvciAoY29uc3QgcGFyYW1ldGVyIG9mICRmdW5jdGlvbi5wYXJhbWV0ZXJzKSB7XG4gICAgICBsaW5lcy5wdXNoKFxuICAgICAgICBgfCBcXGAke3BhcmFtZXRlci5uYW1lfVxcYCB8ICR7ZXNjYXBlTWFya2Rvd24oZXNjYXBlTWR4QW5nbGVCcmFja2V0cyhyZW5kZXJUeXBlV2l0aExpbmtzKHBhcmFtZXRlci50eXBlLCBhbGxUeXBlcywgaW5mby5uYW1lLCBpbmZvLm5hbWVzcGFjZSkpKX0gfCAke2VzY2FwZU1hcmtkb3duKHJlc29sdmVMaW5rcyhwYXJhbWV0ZXIuZGVzY3JpcHRpb24sIGFsbFR5cGVzLCBpbmZvLm5hbWVzcGFjZSkpfSB8YFxuICAgICAgKTtcbiAgICB9XG4gICAgbGluZXMucHVzaCgnJyk7XG4gIH1cblxuICBjb25zdCByZXR1cm5EZXNjID0gJGZ1bmN0aW9uLnJldHVybkRlc2NyaXB0aW9uID8gYCDigJQgJHtlc2NhcGVNZHhBbmdsZUJyYWNrZXRzKHJlc29sdmVMaW5rcygkZnVuY3Rpb24ucmV0dXJuRGVzY3JpcHRpb24sIGFsbFR5cGVzLCBpbmZvLm5hbWVzcGFjZSkpfWAgOiAnJztcbiAgbGluZXMucHVzaChgKipSZXR1cm5zOioqICR7ZXNjYXBlTWR4QW5nbGVCcmFja2V0cyhyZW5kZXJUeXBlV2l0aExpbmtzKCRmdW5jdGlvbi5yZXR1cm5UeXBlLCBhbGxUeXBlcywgaW5mby5uYW1lLCBpbmZvLm5hbWVzcGFjZSkpfSR7cmV0dXJuRGVzY31gLCAnJyk7XG5cbiAgZm9yIChjb25zdCBleGFtcGxlIG9mICRmdW5jdGlvbi5leGFtcGxlcykge1xuICAgIGxpbmVzLnB1c2goJyoqRXhhbXBsZToqKicsICcnLCByZW5kZXJFeGFtcGxlTWR4KGV4YW1wbGUsIGFsbFR5cGVzLCBpbmZvLm5hbWVzcGFjZSksICcnKTtcbiAgfVxufVxuXG4vKipcbiAqIFJlbmRlcnMgb25lIG1ldGhvZCBvdmVybG9hZC5cbiAqXG4gKiBAcGFyYW0gbGluZXMgLSBUaGUgcGFnZSBsaW5lcyB0byBhcHBlbmQgdG8uXG4gKiBAcGFyYW0gb3ZlcmxvYWQgLSBUaGUgb3ZlcmxvYWQuXG4gKiBAcGFyYW0gdHlwZU5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgdHlwZSB0aGUgbWV0aG9kIGJlbG9uZ3MgdG8uXG4gKiBAcGFyYW0gbmFtZXNwYWNlIC0gVGhlIG5hbWVzcGFjZSBvZiB0aGUgdHlwZSB0aGUgbWV0aG9kIGJlbG9uZ3MgdG8uXG4gKiBAcGFyYW0gYWxsVHlwZXMgLSBFdmVyeSBkb2N1bWVudGVkIHR5cGUsIGtleWVkIGJ5IGAke25hbWVzcGFjZX0jJHtuYW1lfWAuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZW5kZXJNZXRob2RPdmVybG9hZE1keChsaW5lczogc3RyaW5nW10sIG92ZXJsb2FkOiBNZW1iZXJJbmZvLCB0eXBlTmFtZTogc3RyaW5nLCBuYW1lc3BhY2U6IHN0cmluZywgYWxsVHlwZXM6IE1hcDxzdHJpbmcsIFR5cGVJbmZvPik6IHZvaWQge1xuICBjb25zdCBzaWcgPSBgJHtvdmVybG9hZC5zaWduYXR1cmV9OiAke292ZXJsb2FkLnJldHVyblR5cGV9YDtcbiAgY29uc3Qgc3RhdGljQXR0cmlidXRlID0gb3ZlcmxvYWQuaXNTdGF0aWMgPyAnIGlzU3RhdGljPXt0cnVlfScgOiAnJztcbiAgY29uc3QgZGVzY0F0dHJpYnV0ZSA9IG92ZXJsb2FkLmRlc2NyaXB0aW9uID8gYCBkZXNjcmlwdGlvbj1cIiR7ZXNjYXBlSnN4QXR0cmlidXRlKG1hcmtkb3duVG9IdG1sKHJlc29sdmVMaW5rcyhvdmVybG9hZC5kZXNjcmlwdGlvbiwgYWxsVHlwZXMsIG5hbWVzcGFjZSkpKX1cImAgOiAnJztcbiAgY29uc3QgcmVtYXJrc0F0dHJpYnV0ZSA9IG92ZXJsb2FkLnJlbWFya3MgPyBgIHJlbWFya3M9XCIke2VzY2FwZUpzeEF0dHJpYnV0ZShtYXJrZG93blRvSHRtbChyZXNvbHZlTGlua3Mob3ZlcmxvYWQucmVtYXJrcywgYWxsVHlwZXMsIG5hbWVzcGFjZSkpKX1cImAgOiAnJztcbiAgY29uc3Qgc2luY2VBdHRyaWJ1dGUgPSBvdmVybG9hZC5zaW5jZSA/IGAgc2luY2U9XCIke2VzY2FwZUpzeEF0dHJpYnV0ZShvdmVybG9hZC5zaW5jZSl9XCJgIDogJyc7XG4gIGNvbnN0IHJldHVyblR5cGVBdHRyaWJ1dGUgPSBgIHJldHVyblR5cGU9XCIke2VzY2FwZUpzeEF0dHJpYnV0ZShtYXJrZG93blRvSHRtbChyZW5kZXJUeXBlV2l0aExpbmtzKG92ZXJsb2FkLnJldHVyblR5cGUsIGFsbFR5cGVzLCB0eXBlTmFtZSwgbmFtZXNwYWNlKSkpfVwiYDtcbiAgY29uc3QgcmV0dXJuRGVzY0F0dHJpYnV0ZSA9IG92ZXJsb2FkLnJldHVybkRlc2NyaXB0aW9uXG4gICAgPyBgIHJldHVybkRlc2NyaXB0aW9uPVwiJHtlc2NhcGVKc3hBdHRyaWJ1dGUobWFya2Rvd25Ub0h0bWwocmVzb2x2ZUxpbmtzKG92ZXJsb2FkLnJldHVybkRlc2NyaXB0aW9uLCBhbGxUeXBlcywgbmFtZXNwYWNlKSkpfVwiYFxuICAgIDogJyc7XG4gIGNvbnN0IGV4YW1wbGVzQXR0cmlidXRlID0gb3ZlcmxvYWQuZXhhbXBsZXMubGVuZ3RoID4gMCA/IGAgZXhhbXBsZXM9eyR7SlNPTi5zdHJpbmdpZnkob3ZlcmxvYWQuZXhhbXBsZXMpfX1gIDogJyc7XG5cbiAgY29uc3QgcGFyYW1zID0gb3ZlcmxvYWQucGFyYW1ldGVycy5tYXAoKHApID0+ICh7XG4gICAgZGVzY3JpcHRpb246IG1hcmtkb3duVG9IdG1sKHAuZGVzY3JpcHRpb24gfHwgKHAubmFtZS5lbmRzV2l0aCgnPycpID8gJyooT3B0aW9uYWwpKicgOiAnJykpLFxuICAgIG5hbWU6IHAubmFtZSxcbiAgICB0eXBlOiBtYXJrZG93blRvSHRtbChyZW5kZXJUeXBlV2l0aExpbmtzKHAudHlwZSwgYWxsVHlwZXMsIHR5cGVOYW1lLCBuYW1lc3BhY2UpKVxuICB9KSk7XG4gIGNvbnN0IHBhcmFtc0F0dHJpYnV0ZSA9IHBhcmFtcy5sZW5ndGggPiAwID8gYCBwYXJhbWV0ZXJzPXske0pTT04uc3RyaW5naWZ5KHBhcmFtcyl9fWAgOiAnJztcblxuICBsaW5lcy5wdXNoKFxuICAgIGA8TWVtYmVyRGV0YWlsJHtzdGF0aWNBdHRyaWJ1dGV9IHNpZ25hdHVyZT1cIiR7ZXNjYXBlSnN4QXR0cmlidXRlKHNpZyl9XCIke2Rlc2NBdHRyaWJ1dGV9JHtyZW1hcmtzQXR0cmlidXRlfSR7c2luY2VBdHRyaWJ1dGV9JHtyZXR1cm5UeXBlQXR0cmlidXRlfSR7cmV0dXJuRGVzY0F0dHJpYnV0ZX0ke3BhcmFtc0F0dHJpYnV0ZX0ke2V4YW1wbGVzQXR0cmlidXRlfSAvPmAsXG4gICAgJydcbiAgKTtcbn1cblxuLyoqXG4gKiBSZW5kZXJzIGEgdHlwZSdzIG1ldGhvZCB0YWJsZS5cbiAqXG4gKiBAcGFyYW0gbGluZXMgLSBUaGUgcGFnZSBsaW5lcyB0byBhcHBlbmQgdG8uXG4gKiBAcGFyYW0gaW5mbyAtIFRoZSBkb2N1bWVudGVkIHR5cGUuXG4gKiBAcGFyYW0gYWxsVHlwZXMgLSBFdmVyeSBkb2N1bWVudGVkIHR5cGUsIGtleWVkIGJ5IGAke25hbWVzcGFjZX0jJHtuYW1lfWAuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZW5kZXJNZXRob2RUYWJsZU1keChsaW5lczogc3RyaW5nW10sIGluZm86IFR5cGVJbmZvLCBhbGxUeXBlczogTWFwPHN0cmluZywgVHlwZUluZm8+KTogdm9pZCB7XG4gIGNvbnN0IG1ldGhvZHMgPSBbLi4uaW5mby5tZXRob2RzXS5zb3J0KChhLCBiKSA9PiB7XG4gICAgaWYgKGEuaXNTdGF0aWMgIT09IGIuaXNTdGF0aWMpIHtcbiAgICAgIHJldHVybiBhLmlzU3RhdGljID8gMSA6IC0xO1xuICAgIH1cbiAgICByZXR1cm4gYS5uYW1lLmxvY2FsZUNvbXBhcmUoYi5uYW1lKTtcbiAgfSk7XG4gIGlmIChtZXRob2RzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybjtcbiAgfVxuICBsaW5lcy5wdXNoKCc8TWV0aG9kVGFibGUgcm93cz17WycpO1xuICBmb3IgKGNvbnN0IG1ldGhvZCBvZiBtZXRob2RzKSB7XG4gICAgY29uc3QgZGVzYyA9IGVzY2FwZUpzU3RyaW5nKG1hcmtkb3duVG9IdG1sKHJlc29sdmVMaW5rcyhtZXRob2QuZGVzY3JpcHRpb24sIGFsbFR5cGVzLCBpbmZvLm5hbWVzcGFjZSkpKTtcbiAgICBjb25zdCBzdGF0aWNQcmVmaXggPSBtZXRob2QuaXNTdGF0aWMgPyAnc3RhdGljICcgOiAnJztcbiAgICBjb25zdCBzaG9ydFBhcmFtcyA9IG1ldGhvZC5wYXJhbWV0ZXJzLm1hcCgocCwgaW5kZXgpID0+IHtcbiAgICAgIHJldHVybiBpbmRleCA9PT0gMCAmJiBFVkVOVF9NRVRIT0RTLmhhcyhtZXRob2QubmFtZSkgJiYgKHAudHlwZS5zdGFydHNXaXRoKCdcIicpIHx8IHAudHlwZS5zdGFydHNXaXRoKCdcXCcnKSkgPyBwLnR5cGUucmVwbGFjZUFsbCgnXCInLCAnXFwnJykgOiBwLm5hbWU7XG4gICAgfSkuam9pbignLCAnKTtcbiAgICBjb25zdCBzaG9ydFNpZyA9IGAke3N0YXRpY1ByZWZpeH0ke21ldGhvZC5uYW1lfSgke3Nob3J0UGFyYW1zfSlgO1xuICAgIGNvbnN0IHNpZyA9IGVzY2FwZUpzU3RyaW5nKHNob3J0U2lnKTtcbiAgICBjb25zdCBzbHVnID0gb3ZlcmxvYWRSb3V0ZVNlZ21lbnQobWV0aG9kLm92ZXJsb2FkS2V5KTtcbiAgICBjb25zdCByZXR1cm5UeXBlID0gbWFya2Rvd25Ub0h0bWwocmVuZGVyVHlwZVdpdGhMaW5rcyhtZXRob2QucmV0dXJuVHlwZSwgYWxsVHlwZXMsIGluZm8ubmFtZSwgaW5mby5uYW1lc3BhY2UpKTtcbiAgICBjb25zdCBpbmhlcml0ZWRBdHRyaWJ1dGUgPSBtZXRob2QuaW5oZXJpdGVkRnJvbVxuICAgICAgPyBgLCBpbmhlcml0ZWRGcm9tOiBcIiR7ZXNjYXBlSnNTdHJpbmcobWFya2Rvd25Ub0h0bWwodHlwZUxpbmsobWV0aG9kLmluaGVyaXRlZEZyb20sIGFsbFR5cGVzLCBpbmZvLm5hbWVzcGFjZSkpKX1cImBcbiAgICAgIDogJyc7XG4gICAgY29uc3QgaHJlZiA9IG1lbWJlckhyZWYoc2x1ZywgbWV0aG9kLmluaGVyaXRlZEZyb20sIGFsbFR5cGVzLCBpbmZvLm5hbWVzcGFjZSk7XG4gICAgbGluZXMucHVzaChcbiAgICAgIGAgIHsgc2lnbmF0dXJlOiBcIiR7c2lnfVwiLCBocmVmOiBcIiR7ZXNjYXBlSnNTdHJpbmcoaHJlZil9XCIsIHJldHVybnM6IFwiJHtlc2NhcGVKc1N0cmluZyhyZXR1cm5UeXBlKX1cIiwgZGVzY3JpcHRpb246IFwiJHtkZXNjfVwiJHtpbmhlcml0ZWRBdHRyaWJ1dGV9IH0sYFxuICAgICk7XG4gIH1cbiAgbGluZXMucHVzaCgnXX0gLz4nLCAnJyk7XG59XG5cbi8qKlxuICogUmVuZGVycyBhIHR5cGUncyBwcm9wZXJ0eSB0YWJsZS5cbiAqXG4gKiBAcGFyYW0gbGluZXMgLSBUaGUgcGFnZSBsaW5lcyB0byBhcHBlbmQgdG8uXG4gKiBAcGFyYW0gaW5mbyAtIFRoZSBkb2N1bWVudGVkIHR5cGUuXG4gKiBAcGFyYW0gYWxsVHlwZXMgLSBFdmVyeSBkb2N1bWVudGVkIHR5cGUsIGtleWVkIGJ5IGAke25hbWVzcGFjZX0jJHtuYW1lfWAuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZW5kZXJQcm9wZXJ0eVRhYmxlTWR4KGxpbmVzOiBzdHJpbmdbXSwgaW5mbzogVHlwZUluZm8sIGFsbFR5cGVzOiBNYXA8c3RyaW5nLCBUeXBlSW5mbz4pOiB2b2lkIHtcbiAgY29uc3QgcHJvcGVydGllcyA9IGluZm8ucHJvcGVydGllcztcbiAgaWYgKHByb3BlcnRpZXMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGxpbmVzLnB1c2goJzxQcm9wZXJ0eVRhYmxlIHJvd3M9e1snKTtcbiAgZm9yIChjb25zdCBwcm9wZXJ0eSBvZiBwcm9wZXJ0aWVzKSB7XG4gICAgY29uc3QgZGVzYyA9IGVzY2FwZUpzU3RyaW5nKG1hcmtkb3duVG9IdG1sKHJlc29sdmVMaW5rcyhwcm9wZXJ0eS5kZXNjcmlwdGlvbiwgYWxsVHlwZXMsIGluZm8ubmFtZXNwYWNlKSkpO1xuICAgIGNvbnN0IHR5cGUgPSBtYXJrZG93blRvSHRtbChyZW5kZXJUeXBlV2l0aExpbmtzKHByb3BlcnR5LnR5cGUsIGFsbFR5cGVzLCBpbmZvLm5hbWUsIGluZm8ubmFtZXNwYWNlKSk7XG4gICAgY29uc3QgaW5oZXJpdGVkQXR0cmlidXRlID0gcHJvcGVydHkuaW5oZXJpdGVkRnJvbVxuICAgICAgPyBgLCBpbmhlcml0ZWRGcm9tOiBcIiR7ZXNjYXBlSnNTdHJpbmcobWFya2Rvd25Ub0h0bWwodHlwZUxpbmsocHJvcGVydHkuaW5oZXJpdGVkRnJvbSwgYWxsVHlwZXMsIGluZm8ubmFtZXNwYWNlKSkpfVwiYFxuICAgICAgOiAnJztcbiAgICBjb25zdCBocmVmID0gbWVtYmVySHJlZihtZW1iZXJSb3V0ZVNlZ21lbnQocHJvcGVydHkubmFtZSksIHByb3BlcnR5LmluaGVyaXRlZEZyb20sIGFsbFR5cGVzLCBpbmZvLm5hbWVzcGFjZSk7XG4gICAgbGluZXMucHVzaChcbiAgICAgIGAgIHsgbmFtZTogXCIke2VzY2FwZUpzU3RyaW5nKHByb3BlcnR5Lm5hbWUpfVwiLCBocmVmOiBcIiR7ZXNjYXBlSnNTdHJpbmcoaHJlZil9XCIsIHR5cGU6IFwiJHtlc2NhcGVKc1N0cmluZyh0eXBlKX1cIiwgZGVzY3JpcHRpb246IFwiJHtkZXNjfVwiJHtpbmhlcml0ZWRBdHRyaWJ1dGV9IH0sYFxuICAgICk7XG4gIH1cbiAgbGluZXMucHVzaCgnXX0gLz4nLCAnJyk7XG59XG5cbi8qKlxuICogUmVuZGVycyBhIHR5cGUgYWxpYXMncyBzaWduYXR1cmUuXG4gKlxuICogQHBhcmFtIGxpbmVzIC0gVGhlIHBhZ2UgbGluZXMgdG8gYXBwZW5kIHRvLlxuICogQHBhcmFtIGluZm8gLSBUaGUgZG9jdW1lbnRlZCB0eXBlLlxuICogQHBhcmFtIGFsbFR5cGVzIC0gRXZlcnkgZG9jdW1lbnRlZCB0eXBlLCBrZXllZCBieSBgJHtuYW1lc3BhY2V9IyR7bmFtZX1gLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVuZGVyVHlwZUFsaWFzUGFnZShsaW5lczogc3RyaW5nW10sIGluZm86IFR5cGVJbmZvLCBhbGxUeXBlczogTWFwPHN0cmluZywgVHlwZUluZm8+KTogdm9pZCB7XG4gIGNvbnN0IHR5cGVQYXJhbXNBdHRyaWJ1dGUgPSBpbmZvLnR5cGVQYXJhbWV0ZXJzLmxlbmd0aCA+IDAgPyBgIHR5cGVQYXJhbXM9eyR7SlNPTi5zdHJpbmdpZnkoaW5mby50eXBlUGFyYW1ldGVycyl9fWAgOiAnJztcbiAgbGluZXMucHVzaChgPFR5cGVTaWduYXR1cmUga2luZD1cInR5cGVcIiBuYW1lPVwiJHtpbmZvLm5hbWV9XCIke3R5cGVQYXJhbXNBdHRyaWJ1dGV9IC8+YCwgJycpO1xuXG4gIGNvbnN0IHJocyA9IGluZm8udHlwZUFsaWFzVGV4dCA/PyAndW5rbm93bic7XG4gIGxpbmVzLnB1c2goXG4gICAgJyoqU2lnbmF0dXJlOioqJyxcbiAgICAnJyxcbiAgICAnYGBgdHMnLFxuICAgIGB0eXBlICR7Z2V0RGlzcGxheU5hbWUoaW5mby5uYW1lLCBpbmZvKX0gPSAke3Joc31gLFxuICAgICdgYGAnLFxuICAgICcnLFxuICAgIGAqKlR5cGU6KiogJHtlc2NhcGVNZHhCcmFjZXMoZXNjYXBlTWR4QW5nbGVCcmFja2V0cyhyZW5kZXJUeXBlV2l0aExpbmtzKHJocywgYWxsVHlwZXMsIGluZm8ubmFtZSwgaW5mby5uYW1lc3BhY2UpKSl9YCxcbiAgICAnJ1xuICApO1xufVxuXG4vKipcbiAqIFJlbmRlcnMgYSB2YXJpYWJsZSdzIGRlY2xhcmF0aW9uIGFuZCB0eXBlLlxuICpcbiAqIEBwYXJhbSBsaW5lcyAtIFRoZSBwYWdlIGxpbmVzIHRvIGFwcGVuZCB0by5cbiAqIEBwYXJhbSBuYW1lIC0gVGhlIHR5cGUncyBuYW1lLlxuICogQHBhcmFtIGluZm8gLSBUaGUgZG9jdW1lbnRlZCB0eXBlLlxuICogQHBhcmFtIGFsbFR5cGVzIC0gRXZlcnkgZG9jdW1lbnRlZCB0eXBlLCBrZXllZCBieSBgJHtuYW1lc3BhY2V9IyR7bmFtZX1gLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVuZGVyVmFyaWFibGVQYWdlKGxpbmVzOiBzdHJpbmdbXSwgbmFtZTogc3RyaW5nLCBpbmZvOiBUeXBlSW5mbywgYWxsVHlwZXM6IE1hcDxzdHJpbmcsIFR5cGVJbmZvPik6IHZvaWQge1xuICBjb25zdCBrZXl3b3JkID0gaW5mby52YXJpYWJsZUtleXdvcmQgPz8gJ2xldCc7XG4gIGNvbnN0IHZhcmlhYmxlVHlwZSA9IGluZm8udmFyaWFibGVUeXBlID8/ICd1bmtub3duJztcbiAgbGluZXMucHVzaChcbiAgICAnKipTaWduYXR1cmU6KionLFxuICAgICcnLFxuICAgICdgYGB0cycsXG4gICAgYCR7a2V5d29yZH0gJHtuYW1lfTogJHt2YXJpYWJsZVR5cGV9YCxcbiAgICAnYGBgJyxcbiAgICAnJyxcbiAgICBgKipUeXBlOioqICR7ZXNjYXBlTWR4QnJhY2VzKGVzY2FwZU1keEFuZ2xlQnJhY2tldHMocmVuZGVyVHlwZVdpdGhMaW5rcyh2YXJpYWJsZVR5cGUsIGFsbFR5cGVzLCBuYW1lLCBpbmZvLm5hbWVzcGFjZSkpKX1gLFxuICAgICcnXG4gICk7XG59XG5cbi8qKlxuICogQ29udmVydHMgYSBuYW1lc3BhY2UgdHJlZSBub2RlIGludG8gYSBzaWRlYmFyIGdyb3VwLlxuICpcbiAqIEBwYXJhbSBub2RlIC0gVGhlIG5vZGUuXG4gKiBAcGFyYW0gbGFiZWwgLSBUaGUgZ3JvdXAncyBsYWJlbC5cbiAqIEByZXR1cm5zIFRoZSBzaWRlYmFyIGdyb3VwLlxuICovXG5leHBvcnQgZnVuY3Rpb24gc2lkZWJhclRyZWVUb0VudHJpZXMobm9kZTogU2lkZWJhclRyZWVOb2RlLCBsYWJlbDogc3RyaW5nKTogU2lkZWJhckVudHJ5IHtcbiAgY29uc3QgaXRlbXM6IChTaWRlYmFyRW50cnkgfCBTaWRlYmFyTGluaylbXSA9IFtdO1xuXG4gIC8vIENoaWxkIGRpcmVjdG9yeSBncm91cHMgZmlyc3QgKGJlZm9yZSB0aGlzIG1vZHVsZSdzIG93biBwYWdlcylcbiAgY29uc3Qgc29ydGVkQ2hpbGRyZW4gPSBbLi4ubm9kZS5jaGlsZHJlbl0uc29ydCgoW2FdLCBbYl0pID0+IGEubG9jYWxlQ29tcGFyZShiKSk7XG4gIGZvciAoY29uc3QgW2NoaWxkTmFtZSwgY2hpbGRdIG9mIHNvcnRlZENoaWxkcmVuKSB7XG4gICAgaXRlbXMucHVzaChzaWRlYmFyVHJlZVRvRW50cmllcyhjaGlsZCwgY2hpbGROYW1lKSk7XG4gIH1cblxuICAvLyBUaGlzIG1vZHVsZSdzIG93biBvdmVydmlldyBwYWdlICsgdHlwZS9mdW5jdGlvbiBwYWdlcyAoaW5kaXZpZHVhbCBtZW1iZXJzIGFyZSBub3QgbGlzdGVkKS5cbiAgLy8gU2lkZWJhciBgbGlua2AgZmllbGRzIG11c3QgTk9UIGVtYmVkIEJBU0VfUEFUSDogU3RhcmxpZ2h0IHByZXBlbmRzIHRoZSBjb25maWcgYGJhc2VgIHRvIGV2ZXJ5XG4gIC8vIHNpZGViYXIgbGluayBpdHNlbGYsIHNvIGluY2x1ZGluZyBpdCBoZXJlIHdvdWxkIGRvdWJsZSB0aGUgYmFzZSAoZS5nLiBgL2Jhc2UvYmFzZS9hcGkvLi4uYCDihpIgNDA0KS5cbiAgLy8gVGhpcyBkaWZmZXJzIGZyb20gaW4tY29udGVudCBsaW5rcywgd2hpY2ggYXJlIHJhdyBhbmNob3JzIHRoYXQgU3RhcmxpZ2h0IGRvZXMgbm90IGJhc2UtcHJlcGVuZC5cbiAgaWYgKG5vZGUudHlwZXMubGVuZ3RoID4gMCkge1xuICAgIGNvbnN0IHsgbmFtZXNwYWNlIH0gPSBlbnN1cmVOb25OdWxsYWJsZShub2RlLnR5cGVzWzBdKTtcbiAgICBpdGVtcy5wdXNoKHsgbGFiZWw6ICdPdmVydmlldycsIGxpbms6IGAvYXBpLyR7bmFtZXNwYWNlfS9gIH0pO1xuICAgIGNvbnN0IHNvcnRlZFR5cGVzID0gWy4uLm5vZGUudHlwZXNdLnNvcnQoKGEsIGIpID0+IGEubmFtZS5sb2NhbGVDb21wYXJlKGIubmFtZSkpO1xuICAgIGZvciAoY29uc3QgdCBvZiBzb3J0ZWRUeXBlcykge1xuICAgICAgaXRlbXMucHVzaCh7IGxhYmVsOiB0Lm5hbWUsIGxpbms6IGAvYXBpLyR7dC5uYW1lc3BhY2V9LyR7dG9UeXBlUm91dGVTZWdtZW50KHQubmFtZXNwYWNlLCB0Lm5hbWUpfS9gIH0pO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7IGNvbGxhcHNlZDogdHJ1ZSwgaXRlbXMsIGxhYmVsIH07XG59XG5cbi8vIFNlcnZlcyBib3RoIGFzIHRoZSByb290IEFQSSBwYWdlJ3MgcHJvc2UgYW5kIChzdHJpcHBlZCkgYXMgaXRzIGBkZXNjcmlwdGlvbmAgZnJvbnRtYXR0ZXIuXG4vLyBTaGFyaW5nIG9uZSBmdW5jdGlvbiBrZWVwcyB0aGUgcGFnZSBhbmQgaXRzIE9HIGNhcmQgZnJvbSBkcmlmdGluZyBhcGFydC5cbmZ1bmN0aW9uIGdldEFwaUluZGV4SW50cm8obmFtZXNwYWNlczogcmVhZG9ubHkgc3RyaW5nW10pOiBzdHJpbmcge1xuICBjb25zdCB7IHBhY2thZ2VOYW1lIH0gPSBnZXRBcGlEb2NTZXR0aW5ncygpO1xuICBjb25zdCBbZXhhbXBsZU5hbWVzcGFjZSA9ICdtb2R1bGUnXSA9IG5hbWVzcGFjZXM7XG4gIHJldHVybiBgVGhlIGNvbXBsZXRlIEFQSSByZWZlcmVuY2UgZm9yIFxcYCR7cGFja2FnZU5hbWV9XFxgLCBnZW5lcmF0ZWQgZnJvbSBpdHMgVFNEb2MuIGBcbiAgICArIGBFYWNoIG1vZHVsZSBiZWxvdyBtYXBzIHRvIGFuIGltcG9ydCBzdWJwYXRoIChlLmcuIHRoZSBcXGAke2V4YW1wbGVOYW1lc3BhY2V9XFxgIG1vZHVsZSBpcyBcXGAke3BhY2thZ2VOYW1lfS8ke2V4YW1wbGVOYW1lc3BhY2V9XFxgKS5gO1xufVxuXG5mdW5jdGlvbiBnZXRDb21wb25lbnRJbXBvcnRzKGNvbXBvbmVudE5hbWVzOiByZWFkb25seSBzdHJpbmdbXSk6IHN0cmluZ1tdIHtcbiAgcmV0dXJuIGNvbXBvbmVudE5hbWVzLm1hcCgoY29tcG9uZW50TmFtZSkgPT4gYGltcG9ydCAke2NvbXBvbmVudE5hbWV9IGZyb20gXCIke0FQSV9DT01QT05FTlRTX0lNUE9SVF9QUkVGSVh9LyR7Y29tcG9uZW50TmFtZX0uYXN0cm9cIjtgKTtcbn1cblxuZnVuY3Rpb24gcmVuZGVyTmFtZXNwYWNlVGFibGUoXG4gIGxpbmVzOiBzdHJpbmdbXSxcbiAgaGVhZGluZzogc3RyaW5nLFxuICBjb2x1bW5MYWJlbDogc3RyaW5nLFxuICBlbnRyaWVzOiBUeXBlSW5mb1tdLFxuICBhbGxUeXBlczogTWFwPHN0cmluZywgVHlwZUluZm8+LFxuICBuYW1lc3BhY2U6IHN0cmluZ1xuKTogdm9pZCB7XG4gIGlmIChlbnRyaWVzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybjtcbiAgfVxuICBjb25zdCBzb3J0ZWQgPSBbLi4uZW50cmllc10uc29ydCgoYSwgYikgPT4gYS5uYW1lLmxvY2FsZUNvbXBhcmUoYi5uYW1lKSk7XG4gIGxpbmVzLnB1c2goYCMjICR7aGVhZGluZ31gLCAnJywgYHwgJHtjb2x1bW5MYWJlbH0gfCBEZXNjcmlwdGlvbiB8YCwgJ3wgOi0tIHwgOi0tIHwnKTtcbiAgZm9yIChjb25zdCBlbnRyeSBvZiBzb3J0ZWQpIHtcbiAgICBsaW5lcy5wdXNoKGB8IFske2VudHJ5Lm5hbWV9XSguLyR7dG9UeXBlUm91dGVTZWdtZW50KGVudHJ5Lm5hbWVzcGFjZSwgZW50cnkubmFtZSl9LykgfCAke2VzY2FwZU1hcmtkb3duKHJlc29sdmVMaW5rcyhlbnRyeS5kZXNjcmlwdGlvbiwgYWxsVHlwZXMsIG5hbWVzcGFjZSkpfSB8YCk7XG4gIH1cbiAgbGluZXMucHVzaCgnJyk7XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFPQSxxQkFBdUM7QUFDdkMseUJBQWtDO0FBQ2xDLHNCQUEwQjtBQUMxQix1QkFBcUI7QUFZckIsK0JBQThCO0FBQzlCLG9DQVdPO0FBQ1AsOEJBQWtDO0FBQ2xDLGdDQWlCTztBQUNQLDhCQUE2QztBQUU3QyxNQUFNLGNBQWM7QUFRcEIsZUFBc0Isd0JBQ3BCLGNBQ0EsVUFDZTtBQUNmLFFBQU0sWUFBWSwwQkFBMEIsY0FBYyxRQUFRO0FBRWxFLGFBQVcsQ0FBQyxLQUFLLEVBQUUsU0FBUyxTQUFTLENBQUMsS0FBSyxjQUFjO0FBQ3ZELFVBQU0sZ0JBQWdCLFVBQVUsSUFBSSxHQUFHLEtBQUssQ0FBQztBQUM3QyxVQUFNLFFBQVEsQ0FBQyxPQUFP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
|
|
561
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9kb2NzLXNpdGUvYXBpLWRvYy1wYWdlLWdlbmVyYXRpb24udHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIE1EWCBwYWdlICsgc2lkZWJhciBlbWlzc2lvbjogcmVuZGVycyBtb2R1bGUgaW5kZXggcGFnZXMsIHBlci10eXBlIG92ZXJ2aWV3IHBhZ2VzLCBwZXItbWVtYmVyIHBhZ2VzLFxuICogYmFja2xpbmtzLCBhbmQgdGhlIFN0YXJsaWdodCBzaWRlYmFyIEpTT04uXG4gKi9cblxuaW1wb3J0IHsgZ2V0TWFuZGF0b3J5TmFtZWRHcm91cCB9IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWxpYi9yZWctZXhwJztcbmltcG9ydCB7IGVuc3VyZU5vbk51bGxhYmxlIH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL3R5cGUtZ3VhcmRzJztcbmltcG9ydCB7IHdyaXRlRmlsZSB9IGZyb20gJ25vZGU6ZnMvcHJvbWlzZXMnO1xuaW1wb3J0IHsgam9pbiB9IGZyb20gJ25vZGU6cGF0aCc7XG5cbmltcG9ydCB0eXBlIHtcbiAgTWVtYmVySW5mbyxcbiAgUGFnZUNvbnRlbnQsXG4gIFBhZ2VGcm9udE1hdHRlcixcbiAgU2lkZWJhckVudHJ5LFxuICBTaWRlYmFyTGluayxcbiAgU2lkZWJhclRyZWVOb2RlLFxuICBUeXBlSW5mb1xufSBmcm9tICcuL2FwaS1kb2MtdHlwZXMudHMnO1xuXG5pbXBvcnQgeyBFVkVOVF9NRVRIT0RTIH0gZnJvbSAnLi9hcGktZG9jLWNvbnN0YW50cy50cyc7XG5pbXBvcnQge1xuICBsaW5rQmFzZVR5cGUsXG4gIG1hcmtkb3duVG9IdG1sLFxuICBtZW1iZXJIcmVmLFxuICByZW5kZXJFeGFtcGxlTWR4LFxuICByZW5kZXJNZHhQcm9zZSxcbiAgcmVuZGVyVHlwZVdpdGhMaW5rcyxcbiAgcmVzb2x2ZUxpbmtzLFxuICB0b1R5cGVGaWxlU2VnbWVudCxcbiAgdG9UeXBlUm91dGVTZWdtZW50LFxuICB0eXBlTGlua1xufSBmcm9tICcuL2FwaS1kb2MtbGluay1yZW5kZXJpbmcudHMnO1xuaW1wb3J0IHsgZ2V0QXBpRG9jU2V0dGluZ3MgfSBmcm9tICcuL2FwaS1kb2Mtc2V0dGluZ3MudHMnO1xuaW1wb3J0IHtcbiAgZW5zdXJlRGlyZWN0b3J5LFxuICBlc2NhcGVKc1N0cmluZyxcbiAgZXNjYXBlSnN4QXR0cmlidXRlLFxuICBlc2NhcGVNYXJrZG93bixcbiAgZXNjYXBlTWR4QW5nbGVCcmFja2V0cyxcbiAgZXNjYXBlTWR4QnJhY2VzLFxuICBlc2NhcGVNZHhQcm9zZSxcbiAgZXNjYXBlWWFtbCxcbiAgZ2V0RGlzcGxheU5hbWUsXG4gIGdldEltcG9ydFN0YXRlbWVudCxcbiAgZ2V0TmFtZXNwYWNlRGlyZWN0b3J5LFxuICBtZW1iZXJSb3V0ZVNlZ21lbnQsXG4gIG1lbWJlclNsdWcsXG4gIG92ZXJsb2FkUm91dGVTZWdtZW50LFxuICBvdmVybG9hZFNsdWcsXG4gIHN0cmlwTWFya2Rvd24sXG4gIHRydW5jYXRlU2lnbmF0dXJlXG59IGZyb20gJy4vYXBpLWRvYy10ZXh0LXV0aWxzLnRzJztcbmltcG9ydCB7IEFQSV9DT01QT05FTlRTX0lNUE9SVF9QUkVGSVggfSBmcm9tICcuL2RvY3Mtc2l0ZS1hc3NldHMudHMnO1xuXG5jb25zdCBKU09OX0lOREVOVCA9IDI7XG5cbi8qKlxuICogQXBwZW5kIGJhY2tsaW5rcyB0byBvdmVydmlldyBwYWdlcyBhbmQgd3JpdGUgYWxsIGZpbGVzLiBLZXllZCBieSBxdWFsaWZpZWQgYCR7bmFtZXNwYWNlfSMke25hbWV9YC5cbiAqXG4gKiBAcGFyYW0gcGFnZUNvbnRlbnRzIC0gRXZlcnkgb3ZlcnZpZXcgcGFnZSdzIGNvbnRlbnQgYW5kIHBhdGgsIGtleWVkIGJ5IHF1YWxpZmllZCBpZC5cbiAqIEBwYXJhbSBhbGxUeXBlcyAtIEV2ZXJ5IGRvY3VtZW50ZWQgdHlwZSwga2V5ZWQgYnkgYCR7bmFtZXNwYWNlfSMke25hbWV9YC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGFwcGVuZEJhY2tsaW5rc0FuZFdyaXRlKFxuICBwYWdlQ29udGVudHM6IE1hcDxzdHJpbmcsIFBhZ2VDb250ZW50PixcbiAgYWxsVHlwZXM6IE1hcDxzdHJpbmcsIFR5cGVJbmZvPlxuKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IGJhY2tsaW5rcyA9IGJ1aWxkQmFja2xpbmtzRnJvbUNvbnRlbnQocGFnZUNvbnRlbnRzLCBhbGxUeXBlcyk7XG5cbiAgZm9yIChjb25zdCBba2V5LCB7IGNvbnRlbnQsIGZpbGVQYXRoIH1dIG9mIHBhZ2VDb250ZW50cykge1xuICAgIGNvbnN0IHR5cGVCYWNrbGlua3MgPSBiYWNrbGlua3MuZ2V0KGtleSkgPz8gW107XG4gICAgY29uc3QgbGluZXMgPSBbY29udGVudF07XG4gICAgaWYgKHR5cGVCYWNrbGlua3MubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3Qgc29ydGVkQmFja2xpbmtzID0gWy4uLnR5cGVCYWNrbGlua3NdLnNvcnQoKGEsIGIpID0+IGEubG9jYWxlQ29tcGFyZShiKSk7XG4gICAgICBsaW5lcy5wdXNoKCcnLCAnLS0tJywgJycsICcqKkxpbmtzIHRvIHRoaXMgcGFnZToqKicsICcnKTtcbiAgICAgIGZvciAoY29uc3QgYmxLZXkgb2Ygc29ydGVkQmFja2xpbmtzKSB7XG4gICAgICAgIGNvbnN0IGJsSW5mbyA9IGVuc3VyZU5vbk51bGxhYmxlKGFsbFR5cGVzLmdldChibEtleSkpO1xuICAgICAgICBjb25zdCBibE5zRGlyZWN0b3J5ID0gZ2V0TmFtZXNwYWNlRGlyZWN0b3J5KGJsSW5mby5uYW1lc3BhY2UpO1xuICAgICAgICBsaW5lcy5wdXNoKGAtIFske2JsSW5mby5uYW1lfV0oJHtnZXRBcGlEb2NTZXR0aW5ncygpLmJhc2VQYXRofS9hcGkvJHtibE5zRGlyZWN0b3J5fS8ke3RvVHlwZVJvdXRlU2VnbWVudChibEluZm8ubmFtZXNwYWNlLCBibEluZm8ubmFtZSl9LylgKTtcbiAgICAgIH1cbiAgICB9XG4gICAgYXdhaXQgd3JpdGVGaWxlKGZpbGVQYXRoLCBsaW5lcy5qb2luKCdcXG4nKSwgJ3V0Zi04Jyk7XG4gIH1cbn1cblxuLyoqXG4gKiBCdWlsZCBiYWNrbGlua3MgYnkgc2Nhbm5pbmcgZ2VuZXJhdGVkIHBhZ2UgY29udGVudCBmb3IgaW50ZXJuYWwgQVBJIGxpbmtzLiBLZXllZCBieSBxdWFsaWZpZWQgaWQuXG4gKlxuICogQHBhcmFtIHBhZ2VDb250ZW50cyAtIEV2ZXJ5IG92ZXJ2aWV3IHBhZ2UncyBjb250ZW50IGFuZCBwYXRoLCBrZXllZCBieSBxdWFsaWZpZWQgaWQuXG4gKiBAcGFyYW0gYWxsVHlwZXMgLSBFdmVyeSBkb2N1bWVudGVkIHR5cGUsIGtleWVkIGJ5IGAke25hbWVzcGFjZX0jJHtuYW1lfWAuXG4gKiBAcmV0dXJucyBFYWNoIHJlZmVyZW5jZWQgdHlwZSdzIHF1YWxpZmllZCBpZCBtYXBwZWQgdG8gdGhlIGlkcyBvZiB0aGUgcGFnZXMgbGlua2luZyB0byBpdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkQmFja2xpbmtzRnJvbUNvbnRlbnQoXG4gIHBhZ2VDb250ZW50czogTWFwPHN0cmluZywgUGFnZUNvbnRlbnQ+LFxuICBhbGxUeXBlczogTWFwPHN0cmluZywgVHlwZUluZm8+XG4pOiBNYXA8c3RyaW5nLCBzdHJpbmdbXT4ge1xuICBjb25zdCBiYWNrbGlua3MgPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nW10+KCk7XG4gIC8vIEVtaXR0ZWQgVVJMcyBsb3dlcmNhc2UgdGhlIHR5cGUgc2VnbWVudCAoc2VlIHRvUm91dGVTZWdtZW50KSwgc28gbWFwIGVhY2ggbG93ZXJjYXNlZCByb3V0ZVxuICAvLyBpZGVudGl0eSBiYWNrIHRvIGl0cyBvcmlnaW5hbCBxdWFsaWZpZWQgdHlwZSBrZXkuXG4gIGNvbnN0IHJvdXRlS2V5VG9UeXBlS2V5ID0gbmV3IE1hcDxzdHJpbmcsIHN0cmluZz4oKTtcbiAgZm9yIChjb25zdCBbdHlwZUtleSwgaW5mb10gb2YgYWxsVHlwZXMpIHtcbiAgICByb3V0ZUtleVRvVHlwZUtleS5zZXQoYCR7Z2V0TmFtZXNwYWNlRGlyZWN0b3J5KGluZm8ubmFtZXNwYWNlKX0jJHt0b1R5cGVSb3V0ZVNlZ21lbnQoaW5mby5uYW1lc3BhY2UsIGluZm8ubmFtZSl9YCwgdHlwZUtleSk7XG4gIH1cbiAgY29uc3QgZXNjYXBlZEJhc2UgPSBnZXRBcGlEb2NTZXR0aW5ncygpLmJhc2VQYXRoLnJlcGxhY2VBbGwoL1suKis/XiR7fSgpfFtcXF1cXFxcXS9nLCBTdHJpbmcucmF3YFxcJCZgKTtcbiAgY29uc3QgbGlua1BhdHRlcm4gPSBuZXcgUmVnRXhwKGAke2VzY2FwZWRCYXNlfS9hcGkvKD88cGF0aD4oPzpbYS16QS1aMC05X0AtXSsvKSspYCwgJ2cnKTtcbiAgZm9yIChjb25zdCBbc291cmNlS2V5LCB7IGNvbnRlbnQgfV0gb2YgcGFnZUNvbnRlbnRzKSB7XG4gICAgY29uc3QgcmVmZXJlbmNlZCA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuXG4gICAgZm9yIChjb25zdCBtYXRjaCBvZiBjb250ZW50Lm1hdGNoQWxsKGxpbmtQYXR0ZXJuKSkge1xuICAgICAgLy8gVGhlIHBhdHRlcm4gcmVxdWlyZXMgYXQgbGVhc3Qgb25lIHNlZ21lbnQuXG4gICAgICBjb25zdCBzZWdtZW50cyA9IGdldE1hbmRhdG9yeU5hbWVkR3JvdXAobWF0Y2gsICdwYXRoJykuc3BsaXQoJy8nKS5maWx0ZXIoQm9vbGVhbik7XG4gICAgICBjb25zdCB0eXBlTmFtZSA9IGVuc3VyZU5vbk51bGxhYmxlKHNlZ21lbnRzLmF0KC0xKSk7XG4gICAgICBjb25zdCBuYW1lc3BhY2UgPSBzZWdtZW50cy5zbGljZSgwLCAtMSkuam9pbignLycpO1xuICAgICAgY29uc3Qgcm91dGVLZXkgPSBgJHtuYW1lc3BhY2V9IyR7dHlwZU5hbWV9YDtcbiAgICAgIGNvbnN0IHJlc29sdmVkS2V5ID0gcm91dGVLZXlUb1R5cGVLZXkuZ2V0KHJvdXRlS2V5KTtcbiAgICAgIGlmIChyZXNvbHZlZEtleSAhPT0gdW5kZWZpbmVkICYmIHJlc29sdmVkS2V5ICE9PSBzb3VyY2VLZXkpIHtcbiAgICAgICAgcmVmZXJlbmNlZC5hZGQocmVzb2x2ZWRLZXkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZvciAoY29uc3QgcmVmZXJlbmNlIG9mIHJlZmVyZW5jZWQpIHtcbiAgICAgIGlmICghYmFja2xpbmtzLmhhcyhyZWZlcmVuY2UpKSB7XG4gICAgICAgIGJhY2tsaW5rcy5zZXQocmVmZXJlbmNlLCBbXSk7XG4gICAgICB9XG4gICAgICBiYWNrbGlua3MuZ2V0KHJlZmVyZW5jZSk/LnB1c2goc291cmNlS2V5KTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gYmFja2xpbmtzO1xufVxuXG4vKipcbiAqIEJ1aWxkcyB0aGUgbmFtZXNwYWNlIHRyZWUgdGhlIHNpZGViYXIgaXMgZ2VuZXJhdGVkIGZyb20uXG4gKlxuICogQHBhcmFtIHR5cGVzIC0gVGhlIGRvY3VtZW50ZWQgdHlwZXMsIGtleWVkIGJ5IHF1YWxpZmllZCBpZC5cbiAqIEByZXR1cm5zIFRoZSByb290IG9mIHRoZSB0cmVlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRTaWRlYmFyVHJlZSh0eXBlczogTWFwPHN0cmluZywgVHlwZUluZm8+KTogU2lkZWJhclRyZWVOb2RlIHtcbiAgY29uc3Qgcm9vdDogU2lkZWJhclRyZWVOb2RlID0geyBjaGlsZHJlbjogbmV3IE1hcCgpLCB0eXBlczogW10gfTtcbiAgZm9yIChjb25zdCBbLCBpbmZvXSBvZiB0eXBlcykge1xuICAgIGNvbnN0IHBhcnRzID0gaW5mby5uYW1lc3BhY2Uuc3BsaXQoJy8nKTtcbiAgICBsZXQgbm9kZSA9IHJvb3Q7XG4gICAgZm9yIChjb25zdCBwYXJ0IG9mIHBhcnRzKSB7XG4gICAgICBsZXQgY2hpbGQgPSBub2RlLmNoaWxkcmVuLmdldChwYXJ0KTtcbiAgICAgIGlmICghY2hpbGQpIHtcbiAgICAgICAgY2hpbGQgPSB7IGNoaWxkcmVuOiBuZXcgTWFwKCksIHR5cGVzOiBbXSB9O1xuICAgICAgICBub2RlLmNoaWxkcmVuLnNldChwYXJ0LCBjaGlsZCk7XG4gICAgICB9XG4gICAgICBub2RlID0gY2hpbGQ7XG4gICAgfVxuICAgIG5vZGUudHlwZXMucHVzaChpbmZvKTtcbiAgfVxuICByZXR1cm4gcm9vdDtcbn1cblxuLyoqXG4gKiBUaGUgcmF3IGNvZGUgc2lnbmF0dXJlIHNob3duIG9uIGEgdHlwZS1vdmVydmlldyBwYWdlJ3MgT0cgY2FyZCwgZm9yIHRoZSBraW5kcyB0aGF0IHJlbmRlciBhIHNpbmdsZVxuICogc2lnbmF0dXJlIGxpbmUgKGZ1bmN0aW9uIC8gdHlwZSBhbGlhcyAvIHZhcmlhYmxlKS4gQ2xhc3NlcywgaW50ZXJmYWNlcyBhbmQgZW51bXMgcmVuZGVyIG1lbWJlclxuICogdGFibGVzIGluc3RlYWQsIHNvIHRoZXkgZ2V0IG5vIHNpZ25hdHVyZSBibG9jay5cbiAqXG4gKiBAcGFyYW0gbmFtZSAtIFRoZSB0eXBlJ3MgbmFtZS5cbiAqIEBwYXJhbSBpbmZvIC0gVGhlIGRvY3VtZW50ZWQgdHlwZS5cbiAqIEByZXR1cm5zIFRoZSBzaWduYXR1cmUsIG9yIGB1bmRlZmluZWRgIGZvciBhIGtpbmQgdGhhdCByZW5kZXJzIG1lbWJlciB0YWJsZXMgaW5zdGVhZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbXB1dGVPdmVydmlld1NpZ25hdHVyZShuYW1lOiBzdHJpbmcsIGluZm86IFR5cGVJbmZvKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgaWYgKGluZm8ua2luZCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGNvbnN0ICRmdW5jdGlvbiA9IGluZm8ubWV0aG9kc1swXTtcbiAgICByZXR1cm4gJGZ1bmN0aW9uID8gYGZ1bmN0aW9uICR7JGZ1bmN0aW9uLnNpZ25hdHVyZX06ICR7JGZ1bmN0aW9uLnJldHVyblR5cGV9YCA6IHVuZGVmaW5lZDtcbiAgfVxuICBpZiAoaW5mby5raW5kID09PSAndHlwZScpIHtcbiAgICByZXR1cm4gYHR5cGUgJHtnZXREaXNwbGF5TmFtZShpbmZvLm5hbWUsIGluZm8pfSA9ICR7aW5mby50eXBlQWxpYXNUZXh0ID8/ICd1bmtub3duJ31gO1xuICB9XG4gIHJldHVybiBpbmZvLmtpbmQgPT09ICd2YXJpYWJsZScgPyBgJHtpbmZvLnZhcmlhYmxlS2V5d29yZCA/PyAnbGV0J30gJHtuYW1lfTogJHtpbmZvLnZhcmlhYmxlVHlwZSA/PyAndW5rbm93bid9YCA6IHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBXcml0ZXMgb25lIHBhZ2UgcGVyIG93biBwcm9wZXJ0eSBhbmQgcGVyIG93biBtZXRob2Qgb3ZlcmxvYWQga2V5IG9mIGEgY2xhc3Mgb3IgaW50ZXJmYWNlLlxuICpcbiAqIEBwYXJhbSBuYW1lIC0gVGhlIHR5cGUncyBuYW1lLlxuICogQHBhcmFtIGluZm8gLSBUaGUgZG9jdW1lbnRlZCB0eXBlLlxuICogQHBhcmFtIGFsbFR5cGVzIC0gRXZlcnkgZG9jdW1lbnRlZCB0eXBlLCBrZXllZCBieSBgJHtuYW1lc3BhY2V9IyR7bmFtZX1gLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2VuZXJhdGVNZW1iZXJQYWdlcyhuYW1lOiBzdHJpbmcsIGluZm86IFR5cGVJbmZvLCBhbGxUeXBlczogTWFwPHN0cmluZywgVHlwZUluZm8+KTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IG5zRGlyZWN0b3J5ID0gZ2V0TmFtZXNwYWNlRGlyZWN0b3J5KGluZm8ubmFtZXNwYWNlKTtcbiAgY29uc3QgdHlwZUZpbGVEaXJlY3RvcnkgPSB0b1R5cGVGaWxlU2VnbWVudChpbmZvLm5hbWVzcGFjZSwgbmFtZSk7XG4gIGNvbnN0IHR5cGVSb3V0ZURpcmVjdG9yeSA9IHRvVHlwZVJvdXRlU2VnbWVudChpbmZvLm5hbWVzcGFjZSwgbmFtZSk7XG4gIGNvbnN0IGNvbXBvbmVudEltcG9ydHMgPSBnZXRDb21wb25lbnRJbXBvcnRzKFsnTWVtYmVyRGV0YWlsJ10pO1xuXG4gIC8vIFByb3BlcnR5IHBhZ2VzIChza2lwIGluaGVyaXRlZCDigJQgdGhleSBsaXZlIG9uIHRoZSBwYXJlbnQgdHlwZSlcbiAgY29uc3QgcHJvcGVydGllcyA9IGluZm8ucHJvcGVydGllcy5maWx0ZXIoKHApID0+ICFwLmluaGVyaXRlZEZyb20pO1xuICBmb3IgKGNvbnN0IHByb3BlcnR5IG9mIHByb3BlcnRpZXMpIHtcbiAgICBjb25zdCBmaWxlUGF0aCA9IGpvaW4oZ2V0QXBpRG9jU2V0dGluZ3MoKS5vdXRwdXREaXJlY3RvcnksIG5zRGlyZWN0b3J5LCB0eXBlRmlsZURpcmVjdG9yeSwgYCR7bWVtYmVyU2x1Zyhwcm9wZXJ0eS5uYW1lKX0ubWR4YCk7XG4gICAgYXdhaXQgZW5zdXJlRGlyZWN0b3J5KGZpbGVQYXRoKTtcblxuICAgIGNvbnN0IHByb3BlcnR5VGl0bGUgPSBgJHtuYW1lfS4ke3Byb3BlcnR5Lm5hbWV9YDtcbiAgICBjb25zdCBsaW5lczogc3RyaW5nW10gPSByZW5kZXJGcm9udE1hdHRlcih7XG4gICAgICBkZXNjcmlwdGlvbjogcHJvcGVydHkuZGVzY3JpcHRpb24sXG4gICAgICBzaWRlYmFyTGFiZWw6IHByb3BlcnR5VGl0bGUsXG4gICAgICBzaWduYXR1cmU6IGAke3Byb3BlcnR5LnNpZ25hdHVyZX06ICR7cHJvcGVydHkudHlwZX1gLFxuICAgICAgc2x1ZzogYGFwaS8ke25zRGlyZWN0b3J5fS8ke3R5cGVSb3V0ZURpcmVjdG9yeX0vJHttZW1iZXJSb3V0ZVNlZ21lbnQocHJvcGVydHkubmFtZSl9YCxcbiAgICAgIHRpdGxlOiBwcm9wZXJ0eVRpdGxlXG4gICAgfSk7XG4gICAgbGluZXMucHVzaChcbiAgICAgIC4uLmNvbXBvbmVudEltcG9ydHMsXG4gICAgICAnJyxcbiAgICAgIC8vIEJyZWFkY3J1bWJcbiAgICAgIGBbJHtuYW1lfV0oJHtnZXRBcGlEb2NTZXR0aW5ncygpLmJhc2VQYXRofS9hcGkvJHtuc0RpcmVjdG9yeX0vJHt0eXBlUm91dGVEaXJlY3Rvcnl9Lykg4oC6ICR7cHJvcGVydHkubmFtZX1gLFxuICAgICAgJydcbiAgICApO1xuXG4gICAgY29uc3Qgc3RhdGljQXR0cmlidXRlID0gcHJvcGVydHkuaXNTdGF0aWMgPyAnIGlzU3RhdGljPXt0cnVlfScgOiAnJztcbiAgICBjb25zdCB0eXBlQXR0cmlidXRlID0gYCB0eXBlPVwiJHtlc2NhcGVKc3hBdHRyaWJ1dGUobWFya2Rvd25Ub0h0bWwocmVuZGVyVHlwZVdpdGhMaW5rcyhwcm9wZXJ0eS50eXBlLCBhbGxUeXBlcywgbmFtZSwgaW5mby5uYW1lc3BhY2UpKSl9XCJgO1xuICAgIGNvbnN0IGRlc2NBdHRyaWJ1dGUgPSBwcm9wZXJ0eS5kZXNjcmlwdGlvbiA/IGAgZGVzY3JpcHRpb249XCIke2VzY2FwZUpzeEF0dHJpYnV0ZShtYXJrZG93blRvSHRtbChyZXNvbHZlTGlua3MocHJvcGVydHkuZGVzY3JpcHRpb24sIGFsbFR5cGVzLCBpbmZvLm5hbWVzcGFjZSkpKX1cImAgOiAnJztcbiAgICBjb25zdCByZW1hcmtzQXR0cmlidXRlID0gcHJvcGVydHkucmVtYXJrcyA/IGAgcmVtYXJrcz1cIiR7ZXNjYXBlSnN4QXR0cmlidXRlKG1hcmtkb3duVG9IdG1sKHJlc29sdmVMaW5rcyhwcm9wZXJ0eS5yZW1hcmtzLCBhbGxUeXBlcywgaW5mby5uYW1lc3BhY2UpKSl9XCJgIDogJyc7XG4gICAgY29uc3Qgc2luY2VBdHRyaWJ1dGUgPSBwcm9wZXJ0eS5zaW5jZSA/IGAgc2luY2U9XCIke2VzY2FwZUpzeEF0dHJpYnV0ZShwcm9wZXJ0eS5zaW5jZSl9XCJgIDogJyc7XG4gICAgY29uc3QgZXhhbXBsZXNBdHRyaWJ1dGUgPSBwcm9wZXJ0eS5leGFtcGxlcy5sZW5ndGggPiAwID8gYCBleGFtcGxlcz17JHtKU09OLnN0cmluZ2lmeShwcm9wZXJ0eS5leGFtcGxlcyl9fWAgOiAnJztcblxuICAgIGxpbmVzLnB1c2goYDxNZW1iZXJEZXRhaWwke3N0YXRpY0F0dHJpYnV0ZX0ke3R5cGVBdHRyaWJ1dGV9JHtkZXNjQXR0cmlidXRlfSR7cmVtYXJrc0F0dHJpYnV0ZX0ke3NpbmNlQXR0cmlidXRlfSR7ZXhhbXBsZXNBdHRyaWJ1dGV9IC8+YCwgJycpO1xuXG4gICAgYXdhaXQgd3JpdGVGaWxlKGZpbGVQYXRoLCBsaW5lcy5qb2luKCdcXG4nKSwgJ3V0Zi04Jyk7XG4gIH1cblxuICAvLyBNZXRob2QgcGFnZXMg4oCUIGVhY2ggb3ZlcmxvYWQga2V5IGdldHMgaXRzIG93biBwYWdlIChza2lwIGluaGVyaXRlZClcbiAgY29uc3QgbWV0aG9kcyA9IGluZm8ubWV0aG9kcy5maWx0ZXIoKG0pID0+ICFtLmluaGVyaXRlZEZyb20pO1xuICBjb25zdCBvdmVybG9hZEdyb3VwcyA9IG5ldyBNYXA8c3RyaW5nLCBNZW1iZXJJbmZvW10+KCk7XG4gIGZvciAoY29uc3QgbWV0aG9kIG9mIG1ldGhvZHMpIHtcbiAgICBjb25zdCBrZXkgPSBtZXRob2Qub3ZlcmxvYWRLZXk7XG4gICAgaWYgKCFvdmVybG9hZEdyb3Vwcy5oYXMoa2V5KSkge1xuICAgICAgb3ZlcmxvYWRHcm91cHMuc2V0KGtleSwgW10pO1xuICAgIH1cbiAgICBvdmVybG9hZEdyb3Vwcy5nZXQoa2V5KT8ucHVzaChtZXRob2QpO1xuICB9XG5cbiAgZm9yIChjb25zdCBbb3ZlcmxvYWRLZXksIG92ZXJsb2Fkc10gb2Ygb3ZlcmxvYWRHcm91cHMpIHtcbiAgICBjb25zdCBmaWxlU2x1ZyA9IG92ZXJsb2FkU2x1ZyhvdmVybG9hZEtleSk7XG4gICAgY29uc3QgZmlsZVBhdGggPSBqb2luKGdldEFwaURvY1NldHRpbmdzKCkub3V0cHV0RGlyZWN0b3J5LCBuc0RpcmVjdG9yeSwgdHlwZUZpbGVEaXJlY3RvcnksIGAke2ZpbGVTbHVnfS5tZHhgKTtcbiAgICBhd2FpdCBlbnN1cmVEaXJlY3RvcnkoZmlsZVBhdGgpO1xuXG4gICAgY29uc3QgZGlzcGxheU5hbWUgPSBgJHtuYW1lfS4ke292ZXJsb2FkS2V5fSBtZXRob2RgO1xuICAgIC8vIEEgZ3JvdXAgaXMgY3JlYXRlZCBieSBpdHMgZmlyc3Qgb3ZlcmxvYWQuXG4gICAgY29uc3QgZmlyc3RPdmVybG9hZCA9IGVuc3VyZU5vbk51bGxhYmxlKG92ZXJsb2Fkc1swXSk7XG5cbiAgICBjb25zdCBsaW5lczogc3RyaW5nW10gPSByZW5kZXJGcm9udE1hdHRlcih7XG4gICAgICBkZXNjcmlwdGlvbjogZmlyc3RPdmVybG9hZC5kZXNjcmlwdGlvbixcbiAgICAgIHNpZGViYXJMYWJlbDogYCR7bmFtZX0uJHtvdmVybG9hZEtleX1gLFxuICAgICAgc2lnbmF0dXJlOiBgJHtmaXJzdE92ZXJsb2FkLnNpZ25hdHVyZX06ICR7Zmlyc3RPdmVybG9hZC5yZXR1cm5UeXBlfWAsXG4gICAgICBzbHVnOiBgYXBpLyR7bnNEaXJlY3Rvcnl9LyR7dHlwZVJvdXRlRGlyZWN0b3J5fS8ke292ZXJsb2FkUm91dGVTZWdtZW50KG92ZXJsb2FkS2V5KX1gLFxuICAgICAgdGl0bGU6IGRpc3BsYXlOYW1lXG4gICAgfSk7XG4gICAgbGluZXMucHVzaChcbiAgICAgIC4uLmNvbXBvbmVudEltcG9ydHMsXG4gICAgICAnJyxcbiAgICAgIC8vIEJyZWFkY3J1bWJcbiAgICAgIGBbJHtuYW1lfV0oJHtnZXRBcGlEb2NTZXR0aW5ncygpLmJhc2VQYXRofS9hcGkvJHtuc0RpcmVjdG9yeX0vJHt0eXBlUm91dGVEaXJlY3Rvcnl9Lykg4oC6ICR7b3ZlcmxvYWRLZXl9YCxcbiAgICAgICcnXG4gICAgKTtcblxuICAgIGZvciAoY29uc3Qgb3ZlcmxvYWQgb2Ygb3ZlcmxvYWRzKSB7XG4gICAgICByZW5kZXJNZXRob2RPdmVybG9hZE1keChsaW5lcywgb3ZlcmxvYWQsIG5hbWUsIGluZm8ubmFtZXNwYWNlLCBhbGxUeXBlcyk7XG4gICAgICBpZiAob3ZlcmxvYWRzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgbGluZXMucHVzaCgnLS0tJywgJycpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGF3YWl0IHdyaXRlRmlsZShmaWxlUGF0aCwgbGluZXMuam9pbignXFxuJyksICd1dGYtOCcpO1xuICB9XG59XG5cbi8qKlxuICogV3JpdGVzIGVhY2ggbW9kdWxlJ3MgaW5kZXggcGFnZSBhbmQgdGhlIHJvb3QgQVBJIGluZGV4LlxuICpcbiAqIEBwYXJhbSB0eXBlcyAtIFRoZSBkb2N1bWVudGVkIHR5cGVzLCBrZXllZCBieSBxdWFsaWZpZWQgaWQuXG4gKiBAcGFyYW0gYWxsVHlwZXMgLSBFdmVyeSBkb2N1bWVudGVkIHR5cGUsIGtleWVkIGJ5IGAke25hbWVzcGFjZX0jJHtuYW1lfWAuXG4gKiBAcGFyYW0gbW9kdWxlT3ZlcnZpZXdzIC0gRWFjaCBuYW1lc3BhY2UncyBgQGZpbGVgIG92ZXJ2aWV3LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2VuZXJhdGVOYW1lc3BhY2VJbmRleFBhZ2VzKFxuICB0eXBlczogTWFwPHN0cmluZywgVHlwZUluZm8+LFxuICBhbGxUeXBlczogTWFwPHN0cmluZywgVHlwZUluZm8+LFxuICBtb2R1bGVPdmVydmlld3M6IE1hcDxzdHJpbmcsIHN0cmluZz5cbik6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBuYW1lc3BhY2VzID0gbmV3IE1hcDxzdHJpbmcsIFR5cGVJbmZvW10+KCk7XG4gIGZvciAoY29uc3QgWywgaW5mb10gb2YgdHlwZXMpIHtcbiAgICBpZiAoIW5hbWVzcGFjZXMuaGFzKGluZm8ubmFtZXNwYWNlKSkge1xuICAgICAgbmFtZXNwYWNlcy5zZXQoaW5mby5uYW1lc3BhY2UsIFtdKTtcbiAgICB9XG4gICAgbmFtZXNwYWNlcy5nZXQoaW5mby5uYW1lc3BhY2UpPy5wdXNoKGluZm8pO1xuICB9XG5cbiAgZm9yIChjb25zdCBbbmFtZXNwYWNlLCBuc1R5cGVzXSBvZiBuYW1lc3BhY2VzKSB7XG4gICAgY29uc3QgbnNEaXJlY3RvcnkgPSBnZXROYW1lc3BhY2VEaXJlY3RvcnkobmFtZXNwYWNlKTtcbiAgICBjb25zdCBmaWxlUGF0aCA9IGpvaW4oZ2V0QXBpRG9jU2V0dGluZ3MoKS5vdXRwdXREaXJlY3RvcnksIG5zRGlyZWN0b3J5LCAnaW5kZXgubWR4Jyk7XG4gICAgYXdhaXQgZW5zdXJlRGlyZWN0b3J5KGZpbGVQYXRoKTtcblxuICAgIC8vIFRoZSBtb2R1bGUncyBgQGZpbGVgIHRleHQgZG91YmxlcyBhcyBpdHMgZGVzY3JpcHRpb24uXG4gICAgLy8gV2l0aG91dCBpdCB0aGUgbW9kdWxlIGNhcmQgd2FzIHRpdGxlLW9ubHkgd2hpbGUgZXZlcnkgbWVtYmVyIGNhcmQgdW5kZXIgaXQgY2FycmllZCBvbmUuXG4gICAgY29uc3Qgb3ZlcnZpZXcgPSBtb2R1bGVPdmVydmlld3MuZ2V0KG5hbWVzcGFjZSk7XG4gICAgY29uc3QgbGluZXM6IHN0cmluZ1tdID0gcmVuZGVyRnJvbnRNYXR0ZXIoe1xuICAgICAgZGVzY3JpcHRpb246IG92ZXJ2aWV3LFxuICAgICAgc2lkZWJhckxhYmVsOiBuYW1lc3BhY2UsXG4gICAgICBzbHVnOiBgYXBpLyR7bnNEaXJlY3Rvcnl9YCxcbiAgICAgIHRpdGxlOiBuYW1lc3BhY2VcbiAgICB9KTtcblxuICAgIC8vIE1vZHVsZSBAZmlsZSBvdmVydmlldyB0ZXh0XG4gICAgaWYgKG92ZXJ2aWV3KSB7XG4gICAgICBsaW5lcy5wdXNoKHJlbmRlck1keFByb3NlKG92ZXJ2aWV3LCBhbGxUeXBlcywgbmFtZXNwYWNlKSwgJycpO1xuICAgIH1cblxuICAgIHJlbmRlck5hbWVzcGFjZVRhYmxlKGxpbmVzLCAnQ2xhc3NlcycsICdDbGFzcycsIG5zVHlwZXMuZmlsdGVyKCh0KSA9PiB0LmtpbmQgPT09ICdjbGFzcycpLCBhbGxUeXBlcywgbmFtZXNwYWNlKTtcbiAgICByZW5kZXJOYW1lc3BhY2VUYWJsZShsaW5lcywgJ0ludGVyZmFjZXMnLCAnSW50ZXJmYWNlJywgbnNUeXBlcy5maWx0ZXIoKHQpID0+IHQua2luZCA9PT0gJ2ludGVyZmFjZScpLCBhbGxUeXBlcywgbmFtZXNwYWNlKTtcbiAgICByZW5kZXJOYW1lc3BhY2VUYWJsZShsaW5lcywgJ0Z1bmN0aW9ucycsICdGdW5jdGlvbicsIG5zVHlwZXMuZmlsdGVyKCh0KSA9PiB0LmtpbmQgPT09ICdmdW5jdGlvbicpLCBhbGxUeXBlcywgbmFtZXNwYWNlKTtcbiAgICByZW5kZXJOYW1lc3BhY2VUYWJsZShsaW5lcywgJ1R5cGVzJywgJ1R5cGUnLCBuc1R5cGVzLmZpbHRlcigodCkgPT4gdC5raW5kID09PSAndHlwZScpLCBhbGxUeXBlcywgbmFtZXNwYWNlKTtcbiAgICByZW5kZXJOYW1lc3BhY2VUYWJsZShsaW5lcywgJ0VudW1zJywgJ0VudW0nLCBuc1R5cGVzLmZpbHRlcigodCkgPT4gdC5raW5kID09PSAnZW51bScpLCBhbGxUeXBlcywgbmFtZXNwYWNlKTtcbiAgICByZW5kZXJOYW1lc3BhY2VUYWJsZShsaW5lcywgJ1ZhcmlhYmxlcycsICdWYXJpYWJsZScsIG5zVHlwZXMuZmlsdGVyKCh0KSA9PiB0LmtpbmQgPT09ICd2YXJpYWJsZScpLCBhbGxUeXBlcywgbmFtZXNwYWNlKTtcblxuICAgIGF3YWl0IHdyaXRlRmlsZShmaWxlUGF0aCwgbGluZXMuam9pbignXFxuJyksICd1dGYtOCcpO1xuICB9XG5cbiAgLy8gUm9vdCBBUEkgaW5kZXggcGFnZSBsaXN0aW5nIGV2ZXJ5IG1vZHVsZS5cbiAgY29uc3Qgc29ydGVkTmFtZXNwYWNlcyA9IFsuLi5uYW1lc3BhY2VzLmtleXMoKV0uc29ydCgoYSwgYikgPT4gYS5sb2NhbGVDb21wYXJlKGIpKTtcbiAgY29uc3QgYXBpSW5kZXhJbnRybyA9IGdldEFwaUluZGV4SW50cm8oc29ydGVkTmFtZXNwYWNlcyk7XG4gIGNvbnN0IHJvb3RMaW5lczogc3RyaW5nW10gPSByZW5kZXJGcm9udE1hdHRlcih7XG4gICAgZGVzY3JpcHRpb246IGFwaUluZGV4SW50cm8sXG4gICAgc2lkZWJhckxhYmVsOiAnT3ZlcnZpZXcnLFxuICAgIHNsdWc6ICdhcGknLFxuICAgIHRpdGxlOiAnQVBJIHJlZmVyZW5jZSdcbiAgfSk7XG4gIHJvb3RMaW5lcy5wdXNoKGFwaUluZGV4SW50cm8sICcnLCAnIyMgTW9kdWxlcycsICcnKTtcbiAgZm9yIChjb25zdCBuYW1lc3BhY2Ugb2Ygc29ydGVkTmFtZXNwYWNlcykge1xuICAgIHJvb3RMaW5lcy5wdXNoKGAtIFske25hbWVzcGFjZX1dKCR7Z2V0QXBpRG9jU2V0dGluZ3MoKS5iYXNlUGF0aH0vYXBpLyR7Z2V0TmFtZXNwYWNlRGlyZWN0b3J5KG5hbWVzcGFjZSl9LylgKTtcbiAgfVxuICByb290TGluZXMucHVzaCgnJyk7XG4gIGNvbnN0IHJvb3RGaWxlUGF0aCA9IGpvaW4oZ2V0QXBpRG9jU2V0dGluZ3MoKS5vdXRwdXREaXJlY3RvcnksICdpbmRleC5tZHgnKTtcbiAgYXdhaXQgZW5zdXJlRGlyZWN0b3J5KHJvb3RGaWxlUGF0aCk7XG4gIGF3YWl0IHdyaXRlRmlsZShyb290RmlsZVBhdGgsIHJvb3RMaW5lcy5qb2luKCdcXG4nKSwgJ3V0Zi04Jyk7XG59XG5cbi8qKlxuICogUmVuZGVycyBhIHR5cGUncyBvdmVydmlldyBwYWdlLlxuICpcbiAqIEBwYXJhbSBuYW1lIC0gVGhlIHR5cGUncyBuYW1lLlxuICogQHBhcmFtIGluZm8gLSBUaGUgZG9jdW1lbnRlZCB0eXBlLlxuICogQHBhcmFtIGFsbFR5cGVzIC0gRXZlcnkgZG9jdW1lbnRlZCB0eXBlLCBrZXllZCBieSBgJHtuYW1lc3BhY2V9IyR7bmFtZX1gLlxuICogQHJldHVybnMgVGhlIHBhZ2UncyBjb250ZW50LCBiZWZvcmUgYmFja2xpbmtzLCBhbmQgdGhlIHBhdGggaXQgaXMgd3JpdHRlbiB0by5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdlbmVyYXRlT3ZlcnZpZXdQYWdlKG5hbWU6IHN0cmluZywgaW5mbzogVHlwZUluZm8sIGFsbFR5cGVzOiBNYXA8c3RyaW5nLCBUeXBlSW5mbz4pOiBQcm9taXNlPFBhZ2VDb250ZW50PiB7XG4gIGNvbnN0IG5zRGlyZWN0b3J5ID0gZ2V0TmFtZXNwYWNlRGlyZWN0b3J5KGluZm8ubmFtZXNwYWNlKTtcbiAgY29uc3QgdHlwZUZpbGVTbHVnID0gdG9UeXBlRmlsZVNlZ21lbnQoaW5mby5uYW1lc3BhY2UsIG5hbWUpO1xuICBjb25zdCB0eXBlUm91dGVTbHVnID0gdG9UeXBlUm91dGVTZWdtZW50KGluZm8ubmFtZXNwYWNlLCBuYW1lKTtcbiAgY29uc3QgZmlsZVBhdGggPSBqb2luKGdldEFwaURvY1NldHRpbmdzKCkub3V0cHV0RGlyZWN0b3J5LCBuc0RpcmVjdG9yeSwgdHlwZUZpbGVTbHVnLCAnaW5kZXgubWR4Jyk7XG4gIGF3YWl0IGVuc3VyZURpcmVjdG9yeShmaWxlUGF0aCk7XG5cbiAgLy8gRnJvbnRtYXR0ZXJcbiAgY29uc3QgZGlzcGxheU5hbWUgPSBnZXREaXNwbGF5TmFtZShuYW1lLCBpbmZvKTtcbiAgY29uc3QgbGluZXM6IHN0cmluZ1tdID0gcmVuZGVyRnJvbnRNYXR0ZXIoe1xuICAgIGRlc2NyaXB0aW9uOiBpbmZvLmRlc2NyaXB0aW9uLFxuICAgIHNpZGViYXJMYWJlbDogZGlzcGxheU5hbWUsXG4gICAgc2lnbmF0dXJlOiBjb21wdXRlT3ZlcnZpZXdTaWduYXR1cmUobmFtZSwgaW5mbyksXG4gICAgc2x1ZzogYGFwaS8ke25zRGlyZWN0b3J5fS8ke3R5cGVSb3V0ZVNsdWd9YCxcbiAgICB0aXRsZTogZGlzcGxheU5hbWVcbiAgfSk7XG5cbiAgLy8gQ29tcG9uZW50IGltcG9ydHMg4oCUIGNvbXB1dGUgcmVsYXRpdmUgcGF0aCBmcm9tIGdlbmVyYXRlZCBwYWdlIHRvIGNvbXBvbmVudHNcbiAgbGluZXMucHVzaCguLi5nZXRDb21wb25lbnRJbXBvcnRzKFsnQ29uc3RydWN0b3JCbG9jaycsICdJbXBvcnRTdGF0ZW1lbnQnLCAnTWV0aG9kVGFibGUnLCAnUHJvcGVydHlUYWJsZScsICdUeXBlU2lnbmF0dXJlJ10pLCAnJyk7XG5cbiAgLy8gRGVzY3JpcHRpb25cbiAgaWYgKGluZm8uZGVzY3JpcHRpb24pIHtcbiAgICBsaW5lcy5wdXNoKHJlbmRlck1keFByb3NlKGluZm8uZGVzY3JpcHRpb24sIGFsbFR5cGVzLCBpbmZvLm5hbWVzcGFjZSksICcnKTtcbiAgfVxuXG4gIC8vIFJlbWFya3NcbiAgaWYgKGluZm8ucmVtYXJrcykge1xuICAgIGNvbnN0IHJlbWFya3NCbG9jayA9IHJlbmRlck1keFByb3NlKGluZm8ucmVtYXJrcywgYWxsVHlwZXMsIGluZm8ubmFtZXNwYWNlKTtcbiAgICBsaW5lcy5wdXNoKHJlbWFya3NCbG9jay5zcGxpdCgnXFxuJykubWFwKChsaW5lKSA9PiAobGluZS5sZW5ndGggPiAwID8gYD4gJHtsaW5lfWAgOiAnPicpKS5qb2luKCdcXG4nKSwgJycpO1xuICB9XG5cbiAgLy8gSW1wb3J0IHN0YXRlbWVudFxuICBsaW5lcy5wdXNoKGA8SW1wb3J0U3RhdGVtZW50IHRleHQ9XCIke2VzY2FwZUpzeEF0dHJpYnV0ZShnZXRJbXBvcnRTdGF0ZW1lbnQoaW5mbykpfVwiIC8+YCwgJycpO1xuXG4gIC8vIEV4YW1wbGVzXG4gIGZvciAoY29uc3QgZXhhbXBsZSBvZiBpbmZvLmV4YW1wbGVzKSB7XG4gICAgbGluZXMucHVzaCgnKipFeGFtcGxlOioqJywgJycsIHJlbmRlckV4YW1wbGVNZHgoZXhhbXBsZSwgYWxsVHlwZXMsIGluZm8ubmFtZXNwYWNlKSwgJycpO1xuICB9XG5cbiAgLy8gRnVuY3Rpb25zIHJlbmRlciBsaWtlIG1ldGhvZCBkZXRhaWwgcGFnZXMg4oCUIHNpZ25hdHVyZSwgcGFyYW1zLCByZXR1cm5zXG4gIGlmIChpbmZvLmtpbmQgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZW5kZXJGdW5jdGlvblBhZ2UobGluZXMsIGluZm8sIGFsbFR5cGVzKTtcbiAgICByZXR1cm4geyBjb250ZW50OiBsaW5lcy5qb2luKCdcXG4nKSwgZmlsZVBhdGggfTtcbiAgfVxuXG4gIC8vIFZhcmlhYmxlcyByZW5kZXIgd2l0aCBkZWNsYXJhdGlvbiBrZXl3b3JkIGFuZCB0eXBlXG4gIGlmIChpbmZvLmtpbmQgPT09ICd2YXJpYWJsZScpIHtcbiAgICByZW5kZXJWYXJpYWJsZVBhZ2UobGluZXMsIG5hbWUsIGluZm8sIGFsbFR5cGVzKTtcbiAgICByZXR1cm4geyBjb250ZW50OiBsaW5lcy5qb2luKCdcXG4nKSwgZmlsZVBhdGggfTtcbiAgfVxuXG4gIC8vIEVudW1zIHJlbmRlciB0aGVpciBtZW1iZXJzIGxpc3RcbiAgaWYgKGluZm8ua2luZCA9PT0gJ2VudW0nKSB7XG4gICAgcmVuZGVyRW51bVBhZ2UobGluZXMsIGluZm8sIGFsbFR5cGVzKTtcbiAgICByZXR1cm4geyBjb250ZW50OiBsaW5lcy5qb2luKCdcXG4nKSwgZmlsZVBhdGggfTtcbiAgfVxuXG4gIC8vIFR5cGUgYWxpYXNlcyByZW5kZXIgdGhlaXIgcmlnaHQtaGFuZC1zaWRlIHNpZ25hdHVyZVxuICBpZiAoaW5mby5raW5kID09PSAndHlwZScpIHtcbiAgICByZW5kZXJUeXBlQWxpYXNQYWdlKGxpbmVzLCBpbmZvLCBhbGxUeXBlcyk7XG4gICAgcmV0dXJuIHsgY29udGVudDogbGluZXMuam9pbignXFxuJyksIGZpbGVQYXRoIH07XG4gIH1cblxuICAvLyBDbGFzc2VzIC8gaW50ZXJmYWNlczogc2lnbmF0dXJlICsgZXh0ZW5kcy9pbXBsZW1lbnRzICsgY29uc3RydWN0b3IgKyBtZW1iZXIgdGFibGVzXG4gIGNvbnN0IHR5cGVQYXJhbXNBdHRyaWJ1dGUgPSBpbmZvLnR5cGVQYXJhbWV0ZXJzLmxlbmd0aCA+IDAgPyBgIHR5cGVQYXJhbXM9eyR7SlNPTi5zdHJpbmdpZnkoaW5mby50eXBlUGFyYW1ldGVycyl9fWAgOiAnJztcbiAgY29uc3QgZXh0ZW5kc0F0dHJpYnV0ZSA9IGluZm8uYmFzZVR5cGVzLmxlbmd0aCA+IDAgPyBgIGV4dGVuZHM9eyR7SlNPTi5zdHJpbmdpZnkoaW5mby5iYXNlVHlwZXMpfX1gIDogJyc7XG4gIGNvbnN0IGltcGxlbWVudHNBdHRyaWJ1dGUgPSBpbmZvLmltcGxlbWVudHNUeXBlcy5sZW5ndGggPiAwID8gYCBpbXBsZW1lbnRzPXske0pTT04uc3RyaW5naWZ5KGluZm8uaW1wbGVtZW50c1R5cGVzKX19YCA6ICcnO1xuICBsaW5lcy5wdXNoKGA8VHlwZVNpZ25hdHVyZSBraW5kPVwiJHtpbmZvLmtpbmR9XCIgbmFtZT1cIiR7bmFtZX1cIiR7dHlwZVBhcmFtc0F0dHJpYnV0ZX0ke2V4dGVuZHNBdHRyaWJ1dGV9JHtpbXBsZW1lbnRzQXR0cmlidXRlfSAvPmAsICcnKTtcblxuICBpZiAoaW5mby5iYXNlVHlwZXMubGVuZ3RoID4gMCkge1xuICAgIGNvbnN0IGxpbmtlZFR5cGVzID0gaW5mby5iYXNlVHlwZXMubWFwKCh0KSA9PiBsaW5rQmFzZVR5cGUodCwgYWxsVHlwZXMsIGluZm8ubmFtZXNwYWNlKSk7XG4gICAgbGluZXMucHVzaChgKipFeHRlbmRzOioqICR7bGlua2VkVHlwZXMuam9pbignLCAnKX1gLCAnJyk7XG4gIH1cblxuICBpZiAoaW5mby5pbXBsZW1lbnRzVHlwZXMubGVuZ3RoID4gMCkge1xuICAgIGNvbnN0IGxpbmtlZFR5cGVzID0gaW5mby5pbXBsZW1lbnRzVHlwZXMubWFwKCh0KSA9PiBsaW5rQmFzZVR5cGUodCwgYWxsVHlwZXMsIGluZm8ubmFtZXNwYWNlKSk7XG4gICAgbGluZXMucHVzaChgKipJbXBsZW1lbnRzOioqICR7bGlua2VkVHlwZXMuam9pbignLCAnKX1gLCAnJyk7XG4gIH1cblxuICByZW5kZXJDb25zdHJ1Y3Rvck1keChsaW5lcywgbmFtZSwgaW5mbywgYWxsVHlwZXMpO1xuICByZW5kZXJQcm9wZXJ0eVRhYmxlTWR4KGxpbmVzLCBpbmZvLCBhbGxUeXBlcyk7XG4gIHJlbmRlck1ldGhvZFRhYmxlTWR4KGxpbmVzLCBpbmZvLCBhbGxUeXBlcyk7XG5cbiAgcmV0dXJuIHsgY29udGVudDogbGluZXMuam9pbignXFxuJyksIGZpbGVQYXRoIH07XG59XG5cbi8qKlxuICogV3JpdGVzIHRoZSBTdGFybGlnaHQgc2lkZWJhciBvZiB0aGUgQVBJIHJlZmVyZW5jZS5cbiAqXG4gKiBAcGFyYW0gdHlwZXMgLSBUaGUgZG9jdW1lbnRlZCB0eXBlcywga2V5ZWQgYnkgcXVhbGlmaWVkIGlkLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2VuZXJhdGVTaWRlYmFySnNvbih0eXBlczogTWFwPHN0cmluZywgVHlwZUluZm8+KTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHJvb3QgPSBidWlsZFNpZGViYXJUcmVlKHR5cGVzKTtcblxuICBjb25zdCBncm91cHM6IFNpZGViYXJFbnRyeVtdID0gW107XG4gIGNvbnN0IHRvcExldmVscyA9IFsuLi5yb290LmNoaWxkcmVuXS5zb3J0KChbYV0sIFtiXSkgPT4gYS5sb2NhbGVDb21wYXJlKGIpKTtcbiAgZm9yIChjb25zdCBbdG9wTGV2ZWwsIGNoaWxkXSBvZiB0b3BMZXZlbHMpIHtcbiAgICBncm91cHMucHVzaChzaWRlYmFyVHJlZVRvRW50cmllcyhjaGlsZCwgdG9wTGV2ZWwpKTtcbiAgfVxuXG4gIGNvbnN0IHdyYXBwZWRTaWRlYmFyOiBTaWRlYmFyRW50cnlbXSA9IFt7XG4gICAgY29sbGFwc2VkOiBmYWxzZSxcbiAgICBpdGVtczogZ3JvdXBzLFxuICAgIGxhYmVsOiAnQVBJIHJlZmVyZW5jZSdcbiAgfV07XG5cbiAgYXdhaXQgd3JpdGVGaWxlKGdldEFwaURvY1NldHRpbmdzKCkuc2lkZWJhckZpbGUsIEpTT04uc3RyaW5naWZ5KHdyYXBwZWRTaWRlYmFyLCBudWxsLCBKU09OX0lOREVOVCksICd1dGYtOCcpO1xuICBjb25zb2xlLndhcm4oYEdlbmVyYXRlZCBzaWRlYmFyIHdpdGggJHtTdHJpbmcoZ3JvdXBzLmxlbmd0aCl9IHRvcC1sZXZlbCBtb2R1bGUgZ3JvdXBzYCk7XG59XG5cbi8qKlxuICogUmVuZGVycyBhIGNsYXNzJ3MgY29uc3RydWN0b3IgYmxvY2suXG4gKlxuICogQHBhcmFtIGxpbmVzIC0gVGhlIHBhZ2UgbGluZXMgdG8gYXBwZW5kIHRvLlxuICogQHBhcmFtIG5hbWUgLSBUaGUgdHlwZSdzIG5hbWUuXG4gKiBAcGFyYW0gaW5mbyAtIFRoZSBkb2N1bWVudGVkIHR5cGUuXG4gKiBAcGFyYW0gYWxsVHlwZXMgLSBFdmVyeSBkb2N1bWVudGVkIHR5cGUsIGtleWVkIGJ5IGAke25hbWVzcGFjZX0jJHtuYW1lfWAuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZW5kZXJDb25zdHJ1Y3Rvck1keChsaW5lczogc3RyaW5nW10sIG5hbWU6IHN0cmluZywgaW5mbzogVHlwZUluZm8sIGFsbFR5cGVzOiBNYXA8c3RyaW5nLCBUeXBlSW5mbz4pOiB2b2lkIHtcbiAgY29uc3QgY29uc3RydWN0b3IgPSBpbmZvLmNvbnN0cnVjdG9ySW5mbztcbiAgaWYgKCFjb25zdHJ1Y3Rvcikge1xuICAgIHJldHVybjtcbiAgfVxuICBjb25zdCBjdG9yU2lnID0gYG5ldyAke25hbWV9JHtjb25zdHJ1Y3Rvci5zaWduYXR1cmV9YDtcbiAgY29uc3QgY3RvckRlc2MgPSBjb25zdHJ1Y3Rvci5kZXNjcmlwdGlvblxuICAgID8gYCBkZXNjcmlwdGlvbj1cIiR7ZXNjYXBlSnN4QXR0cmlidXRlKG1hcmtkb3duVG9IdG1sKHJlc29sdmVMaW5rcyhjb25zdHJ1Y3Rvci5kZXNjcmlwdGlvbiwgYWxsVHlwZXMsIGluZm8ubmFtZXNwYWNlKSkpfVwiYFxuICAgIDogJyc7XG4gIGxpbmVzLnB1c2goYDxDb25zdHJ1Y3RvckJsb2NrIHNpZ25hdHVyZT1cIiR7ZXNjYXBlSnN4QXR0cmlidXRlKGN0b3JTaWcpfVwiJHtjdG9yRGVzY30gLz5gLCAnJyk7XG59XG5cbi8qKlxuICogUmVuZGVycyBhbiBlbnVtJ3MgbWVtYmVycy5cbiAqXG4gKiBAcGFyYW0gbGluZXMgLSBUaGUgcGFnZSBsaW5lcyB0byBhcHBlbmQgdG8uXG4gKiBAcGFyYW0gaW5mbyAtIFRoZSBkb2N1bWVudGVkIHR5cGUuXG4gKiBAcGFyYW0gYWxsVHlwZXMgLSBFdmVyeSBkb2N1bWVudGVkIHR5cGUsIGtleWVkIGJ5IGAke25hbWVzcGFjZX0jJHtuYW1lfWAuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZW5kZXJFbnVtUGFnZShsaW5lczogc3RyaW5nW10sIGluZm86IFR5cGVJbmZvLCBhbGxUeXBlczogTWFwPHN0cmluZywgVHlwZUluZm8+KTogdm9pZCB7XG4gIGxpbmVzLnB1c2goYDxUeXBlU2lnbmF0dXJlIGtpbmQ9XCJlbnVtXCIgbmFtZT1cIiR7aW5mby5uYW1lfVwiIC8+YCwgJycpO1xuXG4gIGlmIChpbmZvLmVudW1NZW1iZXJzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGxpbmVzLnB1c2goJyoqTWVtYmVyczoqKicsICcnLCAnfCBNZW1iZXIgfCBWYWx1ZSB8IERlc2NyaXB0aW9uIHwnLCAnfCA6LS0gfCA6LS0gfCA6LS0gfCcpO1xuICBmb3IgKGNvbnN0IG1lbWJlciBvZiBpbmZvLmVudW1NZW1iZXJzKSB7XG4gICAgY29uc3QgdmFsdWUgPSBtZW1iZXIudmFsdWUgPyBgXFxgJHtlc2NhcGVNYXJrZG93bihtZW1iZXIudmFsdWUpfVxcYGAgOiAnJztcbiAgICBsaW5lcy5wdXNoKGB8IFxcYCR7bWVtYmVyLm5hbWV9XFxgIHwgJHt2YWx1ZX0gfCAke2VzY2FwZU1hcmtkb3duKHJlc29sdmVMaW5rcyhtZW1iZXIuZGVzY3JpcHRpb24sIGFsbFR5cGVzLCBpbmZvLm5hbWVzcGFjZSkpfSB8YCk7XG4gIH1cbiAgbGluZXMucHVzaCgnJyk7XG59XG5cbi8qKlxuICogUmVuZGVyIHRoZSBTdGFybGlnaHQgZnJvbnRtYXR0ZXIgYmxvY2sgKHRocm91Z2ggdGhlIGNsb3NpbmcgYC0tLWAgYW5kIGl0cyBibGFuayBsaW5lKSBzaGFyZWQgYnkgZXZlcnlcbiAqIGdlbmVyYXRlZCBwYWdlIGtpbmQ6IG1vZHVsZSBpbmRleCwgdHlwZSBvdmVydmlldywgcHJvcGVydHksIGFuZCBtZXRob2QuXG4gKlxuICogRXZlcnkgcGFnZSBraW5kIGdvZXMgdGhyb3VnaCBoZXJlIHNvIG5vIGZpZWxkIGNhbiBiZSBlbWl0dGVkIG9uIHNvbWUga2luZHMgYW5kIHNpbGVudGx5IGRyb3BwZWQgb25cbiAqIG90aGVycy4gYGRlc2NyaXB0aW9uYCBpbiBwYXJ0aWN1bGFyIGlzIG5vdCBqdXN0IFNFTyBtZXRhZGF0YSDigJQgaXQgaXMgdGhlIGxpbmUgdGhlIE9HIGNhcmQgcmVuZGVycyB1bmRlclxuICogdGhlIHRpdGxlLCBzbyBhIHBhZ2Uga2luZCB0aGF0IHNraXBwZWQgaXQgcHJvZHVjZWQgYSB0aXRsZS1vbmx5IGNhcmQgbmV4dCB0byBmdWxseSBwb3B1bGF0ZWQgb25lcy5cbiAqXG4gKiBAcGFyYW0gZnJvbnRNYXR0ZXIgLSBUaGUgcGFnZSdzIGZyb250bWF0dGVyIGZpZWxkcy5cbiAqIEByZXR1cm5zIFRoZSBmcm9udG1hdHRlciBsaW5lcywgdGhyb3VnaCB0aGUgY2xvc2luZyBgLS0tYCBhbmQgaXRzIGJsYW5rIGxpbmUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZW5kZXJGcm9udE1hdHRlcihmcm9udE1hdHRlcjogUGFnZUZyb250TWF0dGVyKTogc3RyaW5nW10ge1xuICByZXR1cm4gW1xuICAgICctLS0nLFxuICAgIGB0aXRsZTogXCIke2VzY2FwZVlhbWwoZnJvbnRNYXR0ZXIudGl0bGUpfVwiYCxcbiAgICBgc2x1ZzogXCIke2Zyb250TWF0dGVyLnNsdWd9XCJgLFxuICAgIC4uLihmcm9udE1hdHRlci5kZXNjcmlwdGlvbiA/IFtgZGVzY3JpcHRpb246IFwiJHtlc2NhcGVZYW1sKHN0cmlwTWFya2Rvd24oZnJvbnRNYXR0ZXIuZGVzY3JpcHRpb24pKX1cImBdIDogW10pLFxuICAgIC4uLihmcm9udE1hdHRlci5zaWduYXR1cmUgPyBbYHNpZ25hdHVyZTogXCIke2VzY2FwZVlhbWwodHJ1bmNhdGVTaWduYXR1cmUoZnJvbnRNYXR0ZXIuc2lnbmF0dXJlKSl9XCJgXSA6IFtdKSxcbiAgICAnZWRpdFVybDogZmFsc2UnLFxuICAgICdzaWRlYmFyOicsXG4gICAgYCAgbGFiZWw6IFwiJHtlc2NhcGVZYW1sKGZyb250TWF0dGVyLnNpZGViYXJMYWJlbCl9XCJgLFxuICAgICctLS0nLFxuICAgICcnXG4gIF07XG59XG5cbi8qKlxuICogUmVuZGVycyBhIGZ1bmN0aW9uJ3Mgc2lnbmF0dXJlLCBwYXJhbWV0ZXJzLCByZXR1cm4gdmFsdWUgYW5kIGV4YW1wbGVzLlxuICpcbiAqIEBwYXJhbSBsaW5lcyAtIFRoZSBwYWdlIGxpbmVzIHRvIGFwcGVuZCB0by5cbiAqIEBwYXJhbSBpbmZvIC0gVGhlIGRvY3VtZW50ZWQgdHlwZS5cbiAqIEBwYXJhbSBhbGxUeXBlcyAtIEV2ZXJ5IGRvY3VtZW50ZWQgdHlwZSwga2V5ZWQgYnkgYCR7bmFtZXNwYWNlfSMke25hbWV9YC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbmRlckZ1bmN0aW9uUGFnZShsaW5lczogc3RyaW5nW10sIGluZm86IFR5cGVJbmZvLCBhbGxUeXBlczogTWFwPHN0cmluZywgVHlwZUluZm8+KTogdm9pZCB7XG4gIGNvbnN0ICRmdW5jdGlvbiA9IGluZm8ubWV0aG9kc1swXTtcbiAgaWYgKCEkZnVuY3Rpb24pIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBsaW5lcy5wdXNoKCcqKlNpZ25hdHVyZToqKicsICcnLCAnYGBgdHMnLCBgZnVuY3Rpb24gJHskZnVuY3Rpb24uc2lnbmF0dXJlfTogJHskZnVuY3Rpb24ucmV0dXJuVHlwZX1gLCAnYGBgJywgJycpO1xuXG4gIGlmICgkZnVuY3Rpb24ucGFyYW1ldGVycy5sZW5ndGggPiAwKSB7XG4gICAgbGluZXMucHVzaCgnKipQYXJhbWV0ZXJzOioqJywgJycsICd8IFBhcmFtZXRlciB8IFR5cGUgfCBEZXNjcmlwdGlvbiB8JywgJ3wgOi0tIHwgOi0tIHwgOi0tIHwnKTtcbiAgICBmb3IgKGNvbnN0IHBhcmFtZXRlciBvZiAkZnVuY3Rpb24ucGFyYW1ldGVycykge1xuICAgICAgbGluZXMucHVzaChcbiAgICAgICAgYHwgXFxgJHtwYXJhbWV0ZXIubmFtZX1cXGAgfCAke2VzY2FwZU1hcmtkb3duKGVzY2FwZU1keEFuZ2xlQnJhY2tldHMocmVuZGVyVHlwZVdpdGhMaW5rcyhwYXJhbWV0ZXIudHlwZSwgYWxsVHlwZXMsIGluZm8ubmFtZSwgaW5mby5uYW1lc3BhY2UpKSl9IHwgJHtlc2NhcGVNYXJrZG93bihyZXNvbHZlTGlua3MocGFyYW1ldGVyLmRlc2NyaXB0aW9uLCBhbGxUeXBlcywgaW5mby5uYW1lc3BhY2UpKX0gfGBcbiAgICAgICk7XG4gICAgfVxuICAgIGxpbmVzLnB1c2goJycpO1xuICB9XG5cbiAgY29uc3QgcmV0dXJuRGVzYyA9ICRmdW5jdGlvbi5yZXR1cm5EZXNjcmlwdGlvbiA/IGAg4oCUICR7ZXNjYXBlTWR4UHJvc2UocmVzb2x2ZUxpbmtzKCRmdW5jdGlvbi5yZXR1cm5EZXNjcmlwdGlvbiwgYWxsVHlwZXMsIGluZm8ubmFtZXNwYWNlKSl9YCA6ICcnO1xuICBsaW5lcy5wdXNoKGAqKlJldHVybnM6KiogJHtlc2NhcGVNZHhCcmFjZXMoZXNjYXBlTWR4QW5nbGVCcmFja2V0cyhyZW5kZXJUeXBlV2l0aExpbmtzKCRmdW5jdGlvbi5yZXR1cm5UeXBlLCBhbGxUeXBlcywgaW5mby5uYW1lLCBpbmZvLm5hbWVzcGFjZSkpKX0ke3JldHVybkRlc2N9YCwgJycpO1xuXG4gIGZvciAoY29uc3QgZXhhbXBsZSBvZiAkZnVuY3Rpb24uZXhhbXBsZXMpIHtcbiAgICBsaW5lcy5wdXNoKCcqKkV4YW1wbGU6KionLCAnJywgcmVuZGVyRXhhbXBsZU1keChleGFtcGxlLCBhbGxUeXBlcywgaW5mby5uYW1lc3BhY2UpLCAnJyk7XG4gIH1cbn1cblxuLyoqXG4gKiBSZW5kZXJzIG9uZSBtZXRob2Qgb3ZlcmxvYWQuXG4gKlxuICogQHBhcmFtIGxpbmVzIC0gVGhlIHBhZ2UgbGluZXMgdG8gYXBwZW5kIHRvLlxuICogQHBhcmFtIG92ZXJsb2FkIC0gVGhlIG92ZXJsb2FkLlxuICogQHBhcmFtIHR5cGVOYW1lIC0gVGhlIG5hbWUgb2YgdGhlIHR5cGUgdGhlIG1ldGhvZCBiZWxvbmdzIHRvLlxuICogQHBhcmFtIG5hbWVzcGFjZSAtIFRoZSBuYW1lc3BhY2Ugb2YgdGhlIHR5cGUgdGhlIG1ldGhvZCBiZWxvbmdzIHRvLlxuICogQHBhcmFtIGFsbFR5cGVzIC0gRXZlcnkgZG9jdW1lbnRlZCB0eXBlLCBrZXllZCBieSBgJHtuYW1lc3BhY2V9IyR7bmFtZX1gLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVuZGVyTWV0aG9kT3ZlcmxvYWRNZHgobGluZXM6IHN0cmluZ1tdLCBvdmVybG9hZDogTWVtYmVySW5mbywgdHlwZU5hbWU6IHN0cmluZywgbmFtZXNwYWNlOiBzdHJpbmcsIGFsbFR5cGVzOiBNYXA8c3RyaW5nLCBUeXBlSW5mbz4pOiB2b2lkIHtcbiAgY29uc3Qgc2lnID0gYCR7b3ZlcmxvYWQuc2lnbmF0dXJlfTogJHtvdmVybG9hZC5yZXR1cm5UeXBlfWA7XG4gIGNvbnN0IHN0YXRpY0F0dHJpYnV0ZSA9IG92ZXJsb2FkLmlzU3RhdGljID8gJyBpc1N0YXRpYz17dHJ1ZX0nIDogJyc7XG4gIGNvbnN0IGRlc2NBdHRyaWJ1dGUgPSBvdmVybG9hZC5kZXNjcmlwdGlvbiA/IGAgZGVzY3JpcHRpb249XCIke2VzY2FwZUpzeEF0dHJpYnV0ZShtYXJrZG93blRvSHRtbChyZXNvbHZlTGlua3Mob3ZlcmxvYWQuZGVzY3JpcHRpb24sIGFsbFR5cGVzLCBuYW1lc3BhY2UpKSl9XCJgIDogJyc7XG4gIGNvbnN0IHJlbWFya3NBdHRyaWJ1dGUgPSBvdmVybG9hZC5yZW1hcmtzID8gYCByZW1hcmtzPVwiJHtlc2NhcGVKc3hBdHRyaWJ1dGUobWFya2Rvd25Ub0h0bWwocmVzb2x2ZUxpbmtzKG92ZXJsb2FkLnJlbWFya3MsIGFsbFR5cGVzLCBuYW1lc3BhY2UpKSl9XCJgIDogJyc7XG4gIGNvbnN0IHNpbmNlQXR0cmlidXRlID0gb3ZlcmxvYWQuc2luY2UgPyBgIHNpbmNlPVwiJHtlc2NhcGVKc3hBdHRyaWJ1dGUob3ZlcmxvYWQuc2luY2UpfVwiYCA6ICcnO1xuICBjb25zdCByZXR1cm5UeXBlQXR0cmlidXRlID0gYCByZXR1cm5UeXBlPVwiJHtlc2NhcGVKc3hBdHRyaWJ1dGUobWFya2Rvd25Ub0h0bWwocmVuZGVyVHlwZVdpdGhMaW5rcyhvdmVybG9hZC5yZXR1cm5UeXBlLCBhbGxUeXBlcywgdHlwZU5hbWUsIG5hbWVzcGFjZSkpKX1cImA7XG4gIGNvbnN0IHJldHVybkRlc2NBdHRyaWJ1dGUgPSBvdmVybG9hZC5yZXR1cm5EZXNjcmlwdGlvblxuICAgID8gYCByZXR1cm5EZXNjcmlwdGlvbj1cIiR7ZXNjYXBlSnN4QXR0cmlidXRlKG1hcmtkb3duVG9IdG1sKHJlc29sdmVMaW5rcyhvdmVybG9hZC5yZXR1cm5EZXNjcmlwdGlvbiwgYWxsVHlwZXMsIG5hbWVzcGFjZSkpKX1cImBcbiAgICA6ICcnO1xuICBjb25zdCBleGFtcGxlc0F0dHJpYnV0ZSA9IG92ZXJsb2FkLmV4YW1wbGVzLmxlbmd0aCA+IDAgPyBgIGV4YW1wbGVzPXske0pTT04uc3RyaW5naWZ5KG92ZXJsb2FkLmV4YW1wbGVzKX19YCA6ICcnO1xuXG4gIGNvbnN0IHBhcmFtcyA9IG92ZXJsb2FkLnBhcmFtZXRlcnMubWFwKChwKSA9PiAoe1xuICAgIGRlc2NyaXB0aW9uOiBtYXJrZG93blRvSHRtbChwLmRlc2NyaXB0aW9uIHx8IChwLm5hbWUuZW5kc1dpdGgoJz8nKSA/ICcqKE9wdGlvbmFsKSonIDogJycpKSxcbiAgICBuYW1lOiBwLm5hbWUsXG4gICAgdHlwZTogbWFya2Rvd25Ub0h0bWwocmVuZGVyVHlwZVdpdGhMaW5rcyhwLnR5cGUsIGFsbFR5cGVzLCB0eXBlTmFtZSwgbmFtZXNwYWNlKSlcbiAgfSkpO1xuICBjb25zdCBwYXJhbXNBdHRyaWJ1dGUgPSBwYXJhbXMubGVuZ3RoID4gMCA/IGAgcGFyYW1ldGVycz17JHtKU09OLnN0cmluZ2lmeShwYXJhbXMpfX1gIDogJyc7XG5cbiAgbGluZXMucHVzaChcbiAgICBgPE1lbWJlckRldGFpbCR7c3RhdGljQXR0cmlidXRlfSBzaWduYXR1cmU9XCIke2VzY2FwZUpzeEF0dHJpYnV0ZShzaWcpfVwiJHtkZXNjQXR0cmlidXRlfSR7cmVtYXJrc0F0dHJpYnV0ZX0ke3NpbmNlQXR0cmlidXRlfSR7cmV0dXJuVHlwZUF0dHJpYnV0ZX0ke3JldHVybkRlc2NBdHRyaWJ1dGV9JHtwYXJhbXNBdHRyaWJ1dGV9JHtleGFtcGxlc0F0dHJpYnV0ZX0gLz5gLFxuICAgICcnXG4gICk7XG59XG5cbi8qKlxuICogUmVuZGVycyBhIHR5cGUncyBtZXRob2QgdGFibGUuXG4gKlxuICogQHBhcmFtIGxpbmVzIC0gVGhlIHBhZ2UgbGluZXMgdG8gYXBwZW5kIHRvLlxuICogQHBhcmFtIGluZm8gLSBUaGUgZG9jdW1lbnRlZCB0eXBlLlxuICogQHBhcmFtIGFsbFR5cGVzIC0gRXZlcnkgZG9jdW1lbnRlZCB0eXBlLCBrZXllZCBieSBgJHtuYW1lc3BhY2V9IyR7bmFtZX1gLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVuZGVyTWV0aG9kVGFibGVNZHgobGluZXM6IHN0cmluZ1tdLCBpbmZvOiBUeXBlSW5mbywgYWxsVHlwZXM6IE1hcDxzdHJpbmcsIFR5cGVJbmZvPik6IHZvaWQge1xuICBjb25zdCBtZXRob2RzID0gWy4uLmluZm8ubWV0aG9kc10uc29ydCgoYSwgYikgPT4ge1xuICAgIGlmIChhLmlzU3RhdGljICE9PSBiLmlzU3RhdGljKSB7XG4gICAgICByZXR1cm4gYS5pc1N0YXRpYyA/IDEgOiAtMTtcbiAgICB9XG4gICAgcmV0dXJuIGEubmFtZS5sb2NhbGVDb21wYXJlKGIubmFtZSk7XG4gIH0pO1xuICBpZiAobWV0aG9kcy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm47XG4gIH1cbiAgbGluZXMucHVzaCgnPE1ldGhvZFRhYmxlIHJvd3M9e1snKTtcbiAgZm9yIChjb25zdCBtZXRob2Qgb2YgbWV0aG9kcykge1xuICAgIGNvbnN0IGRlc2MgPSBlc2NhcGVKc1N0cmluZyhtYXJrZG93blRvSHRtbChyZXNvbHZlTGlua3MobWV0aG9kLmRlc2NyaXB0aW9uLCBhbGxUeXBlcywgaW5mby5uYW1lc3BhY2UpKSk7XG4gICAgY29uc3Qgc3RhdGljUHJlZml4ID0gbWV0aG9kLmlzU3RhdGljID8gJ3N0YXRpYyAnIDogJyc7XG4gICAgY29uc3Qgc2hvcnRQYXJhbXMgPSBtZXRob2QucGFyYW1ldGVycy5tYXAoKHAsIGluZGV4KSA9PiB7XG4gICAgICByZXR1cm4gaW5kZXggPT09IDAgJiYgRVZFTlRfTUVUSE9EUy5oYXMobWV0aG9kLm5hbWUpICYmIChwLnR5cGUuc3RhcnRzV2l0aCgnXCInKSB8fCBwLnR5cGUuc3RhcnRzV2l0aCgnXFwnJykpID8gcC50eXBlLnJlcGxhY2VBbGwoJ1wiJywgJ1xcJycpIDogcC5uYW1lO1xuICAgIH0pLmpvaW4oJywgJyk7XG4gICAgY29uc3Qgc2hvcnRTaWcgPSBgJHtzdGF0aWNQcmVmaXh9JHttZXRob2QubmFtZX0oJHtzaG9ydFBhcmFtc30pYDtcbiAgICBjb25zdCBzaWcgPSBlc2NhcGVKc1N0cmluZyhzaG9ydFNpZyk7XG4gICAgY29uc3Qgc2x1ZyA9IG92ZXJsb2FkUm91dGVTZWdtZW50KG1ldGhvZC5vdmVybG9hZEtleSk7XG4gICAgY29uc3QgcmV0dXJuVHlwZSA9IG1hcmtkb3duVG9IdG1sKHJlbmRlclR5cGVXaXRoTGlua3MobWV0aG9kLnJldHVyblR5cGUsIGFsbFR5cGVzLCBpbmZvLm5hbWUsIGluZm8ubmFtZXNwYWNlKSk7XG4gICAgY29uc3QgaW5oZXJpdGVkQXR0cmlidXRlID0gbWV0aG9kLmluaGVyaXRlZEZyb21cbiAgICAgID8gYCwgaW5oZXJpdGVkRnJvbTogXCIke2VzY2FwZUpzU3RyaW5nKG1hcmtkb3duVG9IdG1sKHR5cGVMaW5rKG1ldGhvZC5pbmhlcml0ZWRGcm9tLCBhbGxUeXBlcywgaW5mby5uYW1lc3BhY2UpKSl9XCJgXG4gICAgICA6ICcnO1xuICAgIGNvbnN0IGhyZWYgPSBtZW1iZXJIcmVmKHNsdWcsIG1ldGhvZC5pbmhlcml0ZWRGcm9tLCBhbGxUeXBlcywgaW5mby5uYW1lc3BhY2UpO1xuICAgIGxpbmVzLnB1c2goXG4gICAgICBgICB7IHNpZ25hdHVyZTogXCIke3NpZ31cIiwgaHJlZjogXCIke2VzY2FwZUpzU3RyaW5nKGhyZWYpfVwiLCByZXR1cm5zOiBcIiR7ZXNjYXBlSnNTdHJpbmcocmV0dXJuVHlwZSl9XCIsIGRlc2NyaXB0aW9uOiBcIiR7ZGVzY31cIiR7aW5oZXJpdGVkQXR0cmlidXRlfSB9LGBcbiAgICApO1xuICB9XG4gIGxpbmVzLnB1c2goJ119IC8+JywgJycpO1xufVxuXG4vKipcbiAqIFJlbmRlcnMgYSB0eXBlJ3MgcHJvcGVydHkgdGFibGUuXG4gKlxuICogQHBhcmFtIGxpbmVzIC0gVGhlIHBhZ2UgbGluZXMgdG8gYXBwZW5kIHRvLlxuICogQHBhcmFtIGluZm8gLSBUaGUgZG9jdW1lbnRlZCB0eXBlLlxuICogQHBhcmFtIGFsbFR5cGVzIC0gRXZlcnkgZG9jdW1lbnRlZCB0eXBlLCBrZXllZCBieSBgJHtuYW1lc3BhY2V9IyR7bmFtZX1gLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVuZGVyUHJvcGVydHlUYWJsZU1keChsaW5lczogc3RyaW5nW10sIGluZm86IFR5cGVJbmZvLCBhbGxUeXBlczogTWFwPHN0cmluZywgVHlwZUluZm8+KTogdm9pZCB7XG4gIGNvbnN0IHByb3BlcnRpZXMgPSBpbmZvLnByb3BlcnRpZXM7XG4gIGlmIChwcm9wZXJ0aWVzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybjtcbiAgfVxuICBsaW5lcy5wdXNoKCc8UHJvcGVydHlUYWJsZSByb3dzPXtbJyk7XG4gIGZvciAoY29uc3QgcHJvcGVydHkgb2YgcHJvcGVydGllcykge1xuICAgIGNvbnN0IGRlc2MgPSBlc2NhcGVKc1N0cmluZyhtYXJrZG93blRvSHRtbChyZXNvbHZlTGlua3MocHJvcGVydHkuZGVzY3JpcHRpb24sIGFsbFR5cGVzLCBpbmZvLm5hbWVzcGFjZSkpKTtcbiAgICBjb25zdCB0eXBlID0gbWFya2Rvd25Ub0h0bWwocmVuZGVyVHlwZVdpdGhMaW5rcyhwcm9wZXJ0eS50eXBlLCBhbGxUeXBlcywgaW5mby5uYW1lLCBpbmZvLm5hbWVzcGFjZSkpO1xuICAgIGNvbnN0IGluaGVyaXRlZEF0dHJpYnV0ZSA9IHByb3BlcnR5LmluaGVyaXRlZEZyb21cbiAgICAgID8gYCwgaW5oZXJpdGVkRnJvbTogXCIke2VzY2FwZUpzU3RyaW5nKG1hcmtkb3duVG9IdG1sKHR5cGVMaW5rKHByb3BlcnR5LmluaGVyaXRlZEZyb20sIGFsbFR5cGVzLCBpbmZvLm5hbWVzcGFjZSkpKX1cImBcbiAgICAgIDogJyc7XG4gICAgY29uc3QgaHJlZiA9IG1lbWJlckhyZWYobWVtYmVyUm91dGVTZWdtZW50KHByb3BlcnR5Lm5hbWUpLCBwcm9wZXJ0eS5pbmhlcml0ZWRGcm9tLCBhbGxUeXBlcywgaW5mby5uYW1lc3BhY2UpO1xuICAgIGxpbmVzLnB1c2goXG4gICAgICBgICB7IG5hbWU6IFwiJHtlc2NhcGVKc1N0cmluZyhwcm9wZXJ0eS5uYW1lKX1cIiwgaHJlZjogXCIke2VzY2FwZUpzU3RyaW5nKGhyZWYpfVwiLCB0eXBlOiBcIiR7ZXNjYXBlSnNTdHJpbmcodHlwZSl9XCIsIGRlc2NyaXB0aW9uOiBcIiR7ZGVzY31cIiR7aW5oZXJpdGVkQXR0cmlidXRlfSB9LGBcbiAgICApO1xuICB9XG4gIGxpbmVzLnB1c2goJ119IC8+JywgJycpO1xufVxuXG4vKipcbiAqIFJlbmRlcnMgYSB0eXBlIGFsaWFzJ3Mgc2lnbmF0dXJlLlxuICpcbiAqIEBwYXJhbSBsaW5lcyAtIFRoZSBwYWdlIGxpbmVzIHRvIGFwcGVuZCB0by5cbiAqIEBwYXJhbSBpbmZvIC0gVGhlIGRvY3VtZW50ZWQgdHlwZS5cbiAqIEBwYXJhbSBhbGxUeXBlcyAtIEV2ZXJ5IGRvY3VtZW50ZWQgdHlwZSwga2V5ZWQgYnkgYCR7bmFtZXNwYWNlfSMke25hbWV9YC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbmRlclR5cGVBbGlhc1BhZ2UobGluZXM6IHN0cmluZ1tdLCBpbmZvOiBUeXBlSW5mbywgYWxsVHlwZXM6IE1hcDxzdHJpbmcsIFR5cGVJbmZvPik6IHZvaWQge1xuICBjb25zdCB0eXBlUGFyYW1zQXR0cmlidXRlID0gaW5mby50eXBlUGFyYW1ldGVycy5sZW5ndGggPiAwID8gYCB0eXBlUGFyYW1zPXske0pTT04uc3RyaW5naWZ5KGluZm8udHlwZVBhcmFtZXRlcnMpfX1gIDogJyc7XG4gIGxpbmVzLnB1c2goYDxUeXBlU2lnbmF0dXJlIGtpbmQ9XCJ0eXBlXCIgbmFtZT1cIiR7aW5mby5uYW1lfVwiJHt0eXBlUGFyYW1zQXR0cmlidXRlfSAvPmAsICcnKTtcblxuICBjb25zdCByaHMgPSBpbmZvLnR5cGVBbGlhc1RleHQgPz8gJ3Vua25vd24nO1xuICBsaW5lcy5wdXNoKFxuICAgICcqKlNpZ25hdHVyZToqKicsXG4gICAgJycsXG4gICAgJ2BgYHRzJyxcbiAgICBgdHlwZSAke2dldERpc3BsYXlOYW1lKGluZm8ubmFtZSwgaW5mbyl9ID0gJHtyaHN9YCxcbiAgICAnYGBgJyxcbiAgICAnJyxcbiAgICBgKipUeXBlOioqICR7ZXNjYXBlTWR4QnJhY2VzKGVzY2FwZU1keEFuZ2xlQnJhY2tldHMocmVuZGVyVHlwZVdpdGhMaW5rcyhyaHMsIGFsbFR5cGVzLCBpbmZvLm5hbWUsIGluZm8ubmFtZXNwYWNlKSkpfWAsXG4gICAgJydcbiAgKTtcbn1cblxuLyoqXG4gKiBSZW5kZXJzIGEgdmFyaWFibGUncyBkZWNsYXJhdGlvbiBhbmQgdHlwZS5cbiAqXG4gKiBAcGFyYW0gbGluZXMgLSBUaGUgcGFnZSBsaW5lcyB0byBhcHBlbmQgdG8uXG4gKiBAcGFyYW0gbmFtZSAtIFRoZSB0eXBlJ3MgbmFtZS5cbiAqIEBwYXJhbSBpbmZvIC0gVGhlIGRvY3VtZW50ZWQgdHlwZS5cbiAqIEBwYXJhbSBhbGxUeXBlcyAtIEV2ZXJ5IGRvY3VtZW50ZWQgdHlwZSwga2V5ZWQgYnkgYCR7bmFtZXNwYWNlfSMke25hbWV9YC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbmRlclZhcmlhYmxlUGFnZShsaW5lczogc3RyaW5nW10sIG5hbWU6IHN0cmluZywgaW5mbzogVHlwZUluZm8sIGFsbFR5cGVzOiBNYXA8c3RyaW5nLCBUeXBlSW5mbz4pOiB2b2lkIHtcbiAgY29uc3Qga2V5d29yZCA9IGluZm8udmFyaWFibGVLZXl3b3JkID8/ICdsZXQnO1xuICBjb25zdCB2YXJpYWJsZVR5cGUgPSBpbmZvLnZhcmlhYmxlVHlwZSA/PyAndW5rbm93bic7XG4gIGxpbmVzLnB1c2goXG4gICAgJyoqU2lnbmF0dXJlOioqJyxcbiAgICAnJyxcbiAgICAnYGBgdHMnLFxuICAgIGAke2tleXdvcmR9ICR7bmFtZX06ICR7dmFyaWFibGVUeXBlfWAsXG4gICAgJ2BgYCcsXG4gICAgJycsXG4gICAgYCoqVHlwZToqKiAke2VzY2FwZU1keEJyYWNlcyhlc2NhcGVNZHhBbmdsZUJyYWNrZXRzKHJlbmRlclR5cGVXaXRoTGlua3ModmFyaWFibGVUeXBlLCBhbGxUeXBlcywgbmFtZSwgaW5mby5uYW1lc3BhY2UpKSl9YCxcbiAgICAnJ1xuICApO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGEgbmFtZXNwYWNlIHRyZWUgbm9kZSBpbnRvIGEgc2lkZWJhciBncm91cC5cbiAqXG4gKiBAcGFyYW0gbm9kZSAtIFRoZSBub2RlLlxuICogQHBhcmFtIGxhYmVsIC0gVGhlIGdyb3VwJ3MgbGFiZWwuXG4gKiBAcmV0dXJucyBUaGUgc2lkZWJhciBncm91cC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNpZGViYXJUcmVlVG9FbnRyaWVzKG5vZGU6IFNpZGViYXJUcmVlTm9kZSwgbGFiZWw6IHN0cmluZyk6IFNpZGViYXJFbnRyeSB7XG4gIGNvbnN0IGl0ZW1zOiAoU2lkZWJhckVudHJ5IHwgU2lkZWJhckxpbmspW10gPSBbXTtcblxuICAvLyBDaGlsZCBkaXJlY3RvcnkgZ3JvdXBzIGZpcnN0IChiZWZvcmUgdGhpcyBtb2R1bGUncyBvd24gcGFnZXMpXG4gIGNvbnN0IHNvcnRlZENoaWxkcmVuID0gWy4uLm5vZGUuY2hpbGRyZW5dLnNvcnQoKFthXSwgW2JdKSA9PiBhLmxvY2FsZUNvbXBhcmUoYikpO1xuICBmb3IgKGNvbnN0IFtjaGlsZE5hbWUsIGNoaWxkXSBvZiBzb3J0ZWRDaGlsZHJlbikge1xuICAgIGl0ZW1zLnB1c2goc2lkZWJhclRyZWVUb0VudHJpZXMoY2hpbGQsIGNoaWxkTmFtZSkpO1xuICB9XG5cbiAgLy8gVGhpcyBtb2R1bGUncyBvd24gb3ZlcnZpZXcgcGFnZSArIHR5cGUvZnVuY3Rpb24gcGFnZXMgKGluZGl2aWR1YWwgbWVtYmVycyBhcmUgbm90IGxpc3RlZCkuXG4gIC8vIFNpZGViYXIgYGxpbmtgIGZpZWxkcyBtdXN0IE5PVCBlbWJlZCBCQVNFX1BBVEg6IFN0YXJsaWdodCBwcmVwZW5kcyB0aGUgY29uZmlnIGBiYXNlYCB0byBldmVyeVxuICAvLyBzaWRlYmFyIGxpbmsgaXRzZWxmLCBzbyBpbmNsdWRpbmcgaXQgaGVyZSB3b3VsZCBkb3VibGUgdGhlIGJhc2UgKGUuZy4gYC9iYXNlL2Jhc2UvYXBpLy4uLmAg4oaSIDQwNCkuXG4gIC8vIFRoaXMgZGlmZmVycyBmcm9tIGluLWNvbnRlbnQgbGlua3MsIHdoaWNoIGFyZSByYXcgYW5jaG9ycyB0aGF0IFN0YXJsaWdodCBkb2VzIG5vdCBiYXNlLXByZXBlbmQuXG4gIGlmIChub2RlLnR5cGVzLmxlbmd0aCA+IDApIHtcbiAgICBjb25zdCB7IG5hbWVzcGFjZSB9ID0gZW5zdXJlTm9uTnVsbGFibGUobm9kZS50eXBlc1swXSk7XG4gICAgaXRlbXMucHVzaCh7IGxhYmVsOiAnT3ZlcnZpZXcnLCBsaW5rOiBgL2FwaS8ke25hbWVzcGFjZX0vYCB9KTtcbiAgICBjb25zdCBzb3J0ZWRUeXBlcyA9IFsuLi5ub2RlLnR5cGVzXS5zb3J0KChhLCBiKSA9PiBhLm5hbWUubG9jYWxlQ29tcGFyZShiLm5hbWUpKTtcbiAgICBmb3IgKGNvbnN0IHQgb2Ygc29ydGVkVHlwZXMpIHtcbiAgICAgIGl0ZW1zLnB1c2goeyBsYWJlbDogdC5uYW1lLCBsaW5rOiBgL2FwaS8ke3QubmFtZXNwYWNlfS8ke3RvVHlwZVJvdXRlU2VnbWVudCh0Lm5hbWVzcGFjZSwgdC5uYW1lKX0vYCB9KTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4geyBjb2xsYXBzZWQ6IHRydWUsIGl0ZW1zLCBsYWJlbCB9O1xufVxuXG4vLyBTZXJ2ZXMgYm90aCBhcyB0aGUgcm9vdCBBUEkgcGFnZSdzIHByb3NlIGFuZCAoc3RyaXBwZWQpIGFzIGl0cyBgZGVzY3JpcHRpb25gIGZyb250bWF0dGVyLlxuLy8gU2hhcmluZyBvbmUgZnVuY3Rpb24ga2VlcHMgdGhlIHBhZ2UgYW5kIGl0cyBPRyBjYXJkIGZyb20gZHJpZnRpbmcgYXBhcnQuXG5mdW5jdGlvbiBnZXRBcGlJbmRleEludHJvKG5hbWVzcGFjZXM6IHJlYWRvbmx5IHN0cmluZ1tdKTogc3RyaW5nIHtcbiAgY29uc3QgeyBwYWNrYWdlTmFtZSB9ID0gZ2V0QXBpRG9jU2V0dGluZ3MoKTtcbiAgY29uc3QgW2V4YW1wbGVOYW1lc3BhY2UgPSAnbW9kdWxlJ10gPSBuYW1lc3BhY2VzO1xuICByZXR1cm4gYFRoZSBjb21wbGV0ZSBBUEkgcmVmZXJlbmNlIGZvciBcXGAke3BhY2thZ2VOYW1lfVxcYCwgZ2VuZXJhdGVkIGZyb20gaXRzIFRTRG9jLiBgXG4gICAgKyBgRWFjaCBtb2R1bGUgYmVsb3cgbWFwcyB0byBhbiBpbXBvcnQgc3VicGF0aCAoZS5nLiB0aGUgXFxgJHtleGFtcGxlTmFtZXNwYWNlfVxcYCBtb2R1bGUgaXMgXFxgJHtwYWNrYWdlTmFtZX0vJHtleGFtcGxlTmFtZXNwYWNlfVxcYCkuYDtcbn1cblxuZnVuY3Rpb24gZ2V0Q29tcG9uZW50SW1wb3J0cyhjb21wb25lbnROYW1lczogcmVhZG9ubHkgc3RyaW5nW10pOiBzdHJpbmdbXSB7XG4gIHJldHVybiBjb21wb25lbnROYW1lcy5tYXAoKGNvbXBvbmVudE5hbWUpID0+IGBpbXBvcnQgJHtjb21wb25lbnROYW1lfSBmcm9tIFwiJHtBUElfQ09NUE9ORU5UU19JTVBPUlRfUFJFRklYfS8ke2NvbXBvbmVudE5hbWV9LmFzdHJvXCI7YCk7XG59XG5cbmZ1bmN0aW9uIHJlbmRlck5hbWVzcGFjZVRhYmxlKFxuICBsaW5lczogc3RyaW5nW10sXG4gIGhlYWRpbmc6IHN0cmluZyxcbiAgY29sdW1uTGFiZWw6IHN0cmluZyxcbiAgZW50cmllczogVHlwZUluZm9bXSxcbiAgYWxsVHlwZXM6IE1hcDxzdHJpbmcsIFR5cGVJbmZvPixcbiAgbmFtZXNwYWNlOiBzdHJpbmdcbik6IHZvaWQge1xuICBpZiAoZW50cmllcy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm47XG4gIH1cbiAgY29uc3Qgc29ydGVkID0gWy4uLmVudHJpZXNdLnNvcnQoKGEsIGIpID0+IGEubmFtZS5sb2NhbGVDb21wYXJlKGIubmFtZSkpO1xuICBsaW5lcy5wdXNoKGAjIyAke2hlYWRpbmd9YCwgJycsIGB8ICR7Y29sdW1uTGFiZWx9IHwgRGVzY3JpcHRpb24gfGAsICd8IDotLSB8IDotLSB8Jyk7XG4gIGZvciAoY29uc3QgZW50cnkgb2Ygc29ydGVkKSB7XG4gICAgbGluZXMucHVzaChgfCBbJHtlbnRyeS5uYW1lfV0oLi8ke3RvVHlwZVJvdXRlU2VnbWVudChlbnRyeS5uYW1lc3BhY2UsIGVudHJ5Lm5hbWUpfS8pIHwgJHtlc2NhcGVNYXJrZG93bihyZXNvbHZlTGlua3MoZW50cnkuZGVzY3JpcHRpb24sIGFsbFR5cGVzLCBuYW1lc3BhY2UpKX0gfGApO1xuICB9XG4gIGxpbmVzLnB1c2goJycpO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBT0EscUJBQXVDO0FBQ3ZDLHlCQUFrQztBQUNsQyxzQkFBMEI7QUFDMUIsdUJBQXFCO0FBWXJCLCtCQUE4QjtBQUM5QixvQ0FXTztBQUNQLDhCQUFrQztBQUNsQyxnQ0FrQk87QUFDUCw4QkFBNkM7QUFFN0MsTUFBTSxjQUFjO0FBUXBCLGVBQXNCLHdCQUNwQixjQUNBLFVBQ2U7QUFDZixRQUFNLFlBQVksMEJBQTBCLGNBQWMsUUFBUTtBQUVsRSxhQUFXLENBQUMsS0FBSyxFQUFFLFNBQVMsU0FBUyxDQUFDLEtBQUssY0FBYztBQUN2RCxVQUFNLGdCQUFnQixVQUFVLElBQUksR0FBRyxLQUFLLENB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QixVQUFNLEVBQUUsVUFBVSxRQUFJLHNDQUFrQixLQUFLLE1BQU0sQ0FBQyxDQUFDO0FBQ3JELFVBQU0sS0FBSyxFQUFFLE9BQU8sWUFBWSxNQUFNLFFBQVEsU0FBUyxJQUFJLENBQUM7QUFDNUQsVUFBTSxjQUFjLENBQUMsR0FBRyxLQUFLLEtBQUssRUFBRSxLQUFLLENBQUMsR0FBRyxNQUFNLEVBQUUsS0FBSyxjQUFjLEVBQUUsSUFBSSxDQUFDO0FBQy9FLGVBQVcsS0FBSyxhQUFhO0FBQzNCLFlBQU0sS0FBSyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sUUFBUSxFQUFFLFNBQVMsUUFBSSxrREFBbUIsRUFBRSxXQUFXLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQztBQUFBLElBQ3ZHO0FBQUEsRUFDRjtBQUVBLFNBQU8sRUFBRSxXQUFXLE1BQU0sT0FBTyxNQUFNO0FBQ3pDO0FBSUEsU0FBUyxpQkFBaUIsWUFBdUM7QUFDL0QsUUFBTSxFQUFFLFlBQVksUUFBSSwyQ0FBa0I7QUFDMUMsUUFBTSxDQUFDLG1CQUFtQixRQUFRLElBQUk7QUFDdEMsU0FBTyxvQ0FBb0MsV0FBVyx5RkFDUyxnQkFBZ0Isa0JBQWtCLFdBQVcsSUFBSSxnQkFBZ0I7QUFDbEk7QUFFQSxTQUFTLG9CQUFvQixnQkFBNkM7QUFDeEUsU0FBTyxlQUFlLElBQUksQ0FBQyxrQkFBa0IsVUFBVSxhQUFhLFVBQVUsb0RBQTRCLElBQUksYUFBYSxVQUFVO0FBQ3ZJO0FBRUEsU0FBUyxxQkFDUCxPQUNBLFNBQ0EsYUFDQSxTQUNBLFVBQ0EsV0FDTTtBQUNOLE1BQUksUUFBUSxXQUFXLEdBQUc7QUFDeEI7QUFBQSxFQUNGO0FBQ0EsUUFBTSxTQUFTLENBQUMsR0FBRyxPQUFPLEVBQUUsS0FBSyxDQUFDLEdBQUcsTUFBTSxFQUFFLEtBQUssY0FBYyxFQUFFLElBQUksQ0FBQztBQUN2RSxRQUFNLEtBQUssTUFBTSxPQUFPLElBQUksSUFBSSxLQUFLLFdBQVcsb0JBQW9CLGVBQWU7QUFDbkYsYUFBVyxTQUFTLFFBQVE7QUFDMUIsVUFBTSxLQUFLLE1BQU0sTUFBTSxJQUFJLFdBQU8sa0RBQW1CLE1BQU0sV0FBVyxNQUFNLElBQUksQ0FBQyxZQUFRLDhDQUFlLDRDQUFhLE1BQU0sYUFBYSxVQUFVLFNBQVMsQ0FBQyxDQUFDLElBQUk7QUFBQSxFQUNuSztBQUNBLFFBQU0sS0FBSyxFQUFFO0FBQ2Y7IiwibmFtZXMiOltdfQ==
|
|
@@ -241,7 +241,11 @@ function slugifyOverloadKey(overloadKey) {
|
|
|
241
241
|
}
|
|
242
242
|
const OG_DESCRIPTION_MAX_LENGTH = 160;
|
|
243
243
|
function stripMarkdown(text) {
|
|
244
|
-
const plain = replaceRegExpMatches(
|
|
244
|
+
const plain = replaceRegExpMatches(
|
|
245
|
+
text,
|
|
246
|
+
/\{@link\s+(?<target>[^|}]+?)(?:\s*\|\s*(?<display>[^}]+?))?\s*\}/g,
|
|
247
|
+
(match) => (0, import_reg_exp.getOptionalNamedGroup)(match, "display") ?? (0, import_reg_exp.getMandatoryNamedGroup)(match, "target")
|
|
248
|
+
).replaceAll(/\[(?<text>[^\]]+)\]\([^)]+\)/g, "$<text>").replaceAll(/[`*_~]/g, "").replaceAll(/\s+/g, " ").trim();
|
|
245
249
|
if (plain.length <= OG_DESCRIPTION_MAX_LENGTH) {
|
|
246
250
|
return plain;
|
|
247
251
|
}
|
|
@@ -278,4 +282,4 @@ function escapeMdxProseChars(chunk) {
|
|
|
278
282
|
stripMarkdown,
|
|
279
283
|
truncateSignature
|
|
280
284
|
});
|
|
281
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9kb2NzLXNpdGUvYXBpLWRvYy10ZXh0LXV0aWxzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBUZXh0L21hcmtkb3duL2VzY2FwaW5nIHV0aWxpdGllcyBhbmQgaWRlbnRpZmllciBoZWxwZXJzIGZvciB0aGUgQVBJIGRvY3VtZW50YXRpb24gZ2VuZXJhdG9yLlxuICovXG5cbmltcG9ydCB7XG4gIGdldE1hbmRhdG9yeU5hbWVkR3JvdXAsXG4gIGdldE9wdGlvbmFsTmFtZWRHcm91cFxufSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvcmVnLWV4cCc7XG5pbXBvcnQgeyBta2RpciB9IGZyb20gJ25vZGU6ZnMvcHJvbWlzZXMnO1xuaW1wb3J0IHsgZGlybmFtZSB9IGZyb20gJ25vZGU6cGF0aCc7XG5cbmltcG9ydCB0eXBlIHtcbiAgTWFya2Rvd25TZWdtZW50LFxuICBNZW1iZXJJbmZvLFxuICBUeXBlSW5mb1xufSBmcm9tICcuL2FwaS1kb2MtdHlwZXMudHMnO1xuXG5pbXBvcnQgeyBFVkVOVF9NRVRIT0RTIH0gZnJvbSAnLi9hcGktZG9jLWNvbnN0YW50cy50cyc7XG5pbXBvcnQgeyByZWdpc3RlclBhY2thZ2VEZWNsYXJhdGlvbiB9IGZyb20gJy4vYXBpLWRvYy1wYWNrYWdlLXNpdGVzLnRzJztcbmltcG9ydCB7IHRvUm91dGVTZWdtZW50IH0gZnJvbSAnLi9hcGktZG9jLXJvdXRlLXNlZ21lbnRzLnRzJztcbmltcG9ydCB7IGdldEFwaURvY1NldHRpbmdzIH0gZnJvbSAnLi9hcGktZG9jLXNldHRpbmdzLnRzJztcblxuaW50ZXJmYWNlIE9wZW5GZW5jZSB7XG4gIHJlYWRvbmx5IGNsb3NlUmU6IFJlZ0V4cDtcbiAgcmVhZG9ubHkgbGFuZzogc3RyaW5nO1xufVxuXG4vKipcbiAqIENvbXB1dGUgYW4gb3ZlcmxvYWQga2V5IGZvciBtZXRob2RzIHdpdGggZGlzdGluZ3Vpc2hpbmcgZmlyc3QgcGFyYW0gKGUuZy4gb24oJ2NoYW5nZWQnLC4uLikpXG4gKlxuICogQHBhcmFtIG1ldGhvZCAtIFRoZSBtZXRob2QuXG4gKiBAcmV0dXJucyBUaGUgb3ZlcmxvYWQga2V5LlxuICovXG5leHBvcnQgZnVuY3Rpb24gY29tcHV0ZU92ZXJsb2FkS2V5KG1ldGhvZDogTWVtYmVySW5mbyk6IHN0cmluZyB7XG4gIGlmIChFVkVOVF9NRVRIT0RTLmhhcyhtZXRob2QubmFtZSkgJiYgbWV0aG9kLnBhcmFtZXRlcnMubGVuZ3RoID4gMCkge1xuICAgIGNvbnN0IGZpcnN0UGFyYW1ldGVyID0gbWV0aG9kLnBhcmFtZXRlcnNbMF07XG4gICAgaWYgKGZpcnN0UGFyYW1ldGVyPy50eXBlLnN0YXJ0c1dpdGgoJ1wiJykgfHwgZmlyc3RQYXJhbWV0ZXI/LnR5cGUuc3RhcnRzV2l0aCgnXFwnJykpIHtcbiAgICAgIGNvbnN0IG5vcm1hbGl6ZWRUeXBlID0gZmlyc3RQYXJhbWV0ZXIudHlwZS5yZXBsYWNlQWxsKCdcIicsICdcXCcnKTtcbiAgICAgIHJldHVybiBgJHttZXRob2QubmFtZX0oJHtub3JtYWxpemVkVHlwZX0pYDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG1ldGhvZC5uYW1lO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgdGhlIGZvbGRlciBhIGZpbGUgaXMgYWJvdXQgdG8gYmUgd3JpdHRlbiB0by5cbiAqXG4gKiBAcGFyYW0gZmlsZVBhdGggLSBUaGUgcGF0aCBvZiB0aGUgZmlsZSBhYm91dCB0byBiZSB3cml0dGVuLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZW5zdXJlRGlyZWN0b3J5KGZpbGVQYXRoOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgYXdhaXQgbWtkaXIoZGlybmFtZShmaWxlUGF0aCksIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xufVxuXG4vKipcbiAqIEVzY2FwZSB0ZXh0IGZvciB1c2UgaW5zaWRlIGEgSlMgc3RyaW5nIHdpdGhpbiBhIEpTWCBleHByZXNzaW9uOiB7Li4ue2tleTogXCIuLi5cIn19XG4gKlxuICogQHBhcmFtIHRleHQgLSBUaGUgdGV4dCB0byBlc2NhcGUuXG4gKiBAcmV0dXJucyBUaGUgZXNjYXBlZCB0ZXh0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gZXNjYXBlSnNTdHJpbmcodGV4dDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHRleHQucmVwbGFjZUFsbCgnXFxcXCcsICdcXFxcXFxcXCcpLnJlcGxhY2VBbGwoJ1wiJywgU3RyaW5nLnJhd2BcXFwiYCkucmVwbGFjZUFsbCgnXFxuJywgJyAnKTtcbn1cblxuLyoqXG4gKiBFc2NhcGUgdGV4dCBmb3IgdXNlIGluc2lkZSBhIEpTWCBhdHRyaWJ1dGU6IGF0dHI9XCIuLi5cIiAoTURYIHVzZXMgSFRNTC1zdHlsZSBwYXJzaW5nKVxuICpcbiAqIEBwYXJhbSB0ZXh0IC0gVGhlIHRleHQgdG8gZXNjYXBlLlxuICogQHJldHVybnMgVGhlIGVzY2FwZWQgdGV4dC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVzY2FwZUpzeEF0dHJpYnV0ZSh0ZXh0OiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gdGV4dC5yZXBsYWNlQWxsKCcmJywgJyZhbXA7JykucmVwbGFjZUFsbCgnXCInLCAnJnF1b3Q7JykucmVwbGFjZUFsbCgnXFxuJywgJyAnKTtcbn1cblxuLyoqXG4gKiBFc2NhcGUgdGV4dCBmb3IgYSBtYXJrZG93biB0YWJsZSBjZWxsLlxuICpcbiAqIEBwYXJhbSB0ZXh0IC0gVGhlIHRleHQgdG8gZXNjYXBlLlxuICogQHJldHVybnMgVGhlIGVzY2FwZWQgdGV4dC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVzY2FwZU1hcmtkb3duKHRleHQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiB0ZXh0LnJlcGxhY2VBbGwoJ3wnLCBTdHJpbmcucmF3YFxcfGApLnJlcGxhY2VBbGwoJ1xcbicsICcgJykucmVwbGFjZUFsbCgneycsIFN0cmluZy5yYXdgXFx7YCkucmVwbGFjZUFsbCgnfScsIFN0cmluZy5yYXdgXFx9YCk7XG59XG5cbi8qKlxuICogRXNjYXBlIGFuZ2xlIGJyYWNrZXRzIHNvIE1EWCBkb2VzIG5vdCByZWFkIHRoZW0gYXMgSlNYLlxuICpcbiAqIEBwYXJhbSB0ZXh0IC0gVGhlIHRleHQgdG8gZXNjYXBlLlxuICogQHJldHVybnMgVGhlIGVzY2FwZWQgdGV4dC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVzY2FwZU1keEFuZ2xlQnJhY2tldHModGV4dDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHRleHQucmVwbGFjZUFsbCgnPCcsIFN0cmluZy5yYXdgXFw8YCkucmVwbGFjZUFsbCgnPicsIFN0cmluZy5yYXdgXFw+YCk7XG59XG5cbi8qKlxuICogRXNjYXBlIGN1cmx5IGJyYWNlcyBpbiBNRFggbWFya2Rvd24gY29udGVudCB0byBwcmV2ZW50IEpTWCBleHByZXNzaW9uIHBhcnNpbmdcbiAqXG4gKiBAcGFyYW0gdGV4dCAtIFRoZSB0ZXh0IHRvIGVzY2FwZS5cbiAqIEByZXR1cm5zIFRoZSBlc2NhcGVkIHRleHQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlc2NhcGVNZHhCcmFjZXModGV4dDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHRleHQucmVwbGFjZUFsbCgneycsIFN0cmluZy5yYXdgXFx7YCkucmVwbGFjZUFsbCgnfScsIFN0cmluZy5yYXdgXFx9YCk7XG59XG5cbi8qKlxuICogRXNjYXBlIHRleHQgZm9yIGEgZG91YmxlLXF1b3RlZCBZQU1MIHZhbHVlLlxuICpcbiAqIEBwYXJhbSB0ZXh0IC0gVGhlIHRleHQgdG8gZXNjYXBlLlxuICogQHJldHVybnMgVGhlIGVzY2FwZWQgdGV4dC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVzY2FwZVlhbWwodGV4dDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHRleHQucmVwbGFjZUFsbCgnXCInLCBTdHJpbmcucmF3YFxcXCJgKTtcbn1cblxuY29uc3QgU0lHTkFUVVJFX01BWF9MRU5HVEggPSAxNjA7XG5jb25zdCBJTVBPUlRfUVVBTElGSUVSX1JFR19FWFAgPSAvaW1wb3J0XFwoKD88UXVvdGU+W1wiJ10pW15cIiddK1xcazxRdW90ZT5cXClcXC4vZztcbmNvbnN0IElNUE9SVF9UWVBFX1JFR19FWFAgPSAvaW1wb3J0XFwoKD88UXVvdGU+W1wiJ10pKD88UGF0aD5bXlwiJ10rKVxcazxRdW90ZT5cXClcXC4oPzxOYW1lPltBLVphLXpfJF1bXFx3JF0qKS9nO1xuXG4vKipcbiAqIEVzY2FwZSBNRFgtdW5zYWZlIGNoYXJhY3RlcnMgKGA8YCwgYHtgLCBgfWApIGluIHByb3NlIHRleHQsIHdoaWxlIGxlYXZpbmcgaW5saW5lIGNvZGUgc3BhbnNcbiAqIChgYCBgY29kZWAgYGApIGFuZCBtYXJrZG93biBsaW5rcyAoYFt0ZXh0XSh1cmwpYCkgdW50b3VjaGVkLiBNRFggcGFyc2VzIGJhcmUgYDxgL2B7YCBpbiBwcm9zZSBhc1xuICogSlNYL2V4cHJlc3Npb25zLCBzbyB0aGV5IG11c3QgYmUgYmFja3NsYXNoLWVzY2FwZWQgdG8gcmVuZGVyIGFzIGxpdGVyYWwgdGV4dC5cbiAqXG4gKiBAcGFyYW0gdGV4dCAtIFRoZSBwcm9zZSB0byBlc2NhcGUuXG4gKiBAcmV0dXJucyBUaGUgZXNjYXBlZCBwcm9zZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVzY2FwZU1keFByb3NlKHRleHQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IHByb3RlY3RlZFBhdHRlcm4gPSAvYFteYF0qYHxcXFtbXlxcXV0qXFxdXFwoW14pXSpcXCkvZztcbiAgbGV0IHJlc3VsdCA9ICcnO1xuICBsZXQgbGFzdEluZGV4ID0gMDtcbiAgZm9yIChjb25zdCBtYXRjaCBvZiB0ZXh0Lm1hdGNoQWxsKHByb3RlY3RlZFBhdHRlcm4pKSB7XG4gICAgY29uc3QgaW5kZXggPSBtYXRjaC5pbmRleDtcbiAgICByZXN1bHQgKz0gZXNjYXBlTWR4UHJvc2VDaGFycyh0ZXh0LnNsaWNlKGxhc3RJbmRleCwgaW5kZXgpKTtcbiAgICByZXN1bHQgKz0gbWF0Y2hbMF07XG4gICAgbGFzdEluZGV4ID0gaW5kZXggKyBtYXRjaFswXS5sZW5ndGg7XG4gIH1cbiAgcmVzdWx0ICs9IGVzY2FwZU1keFByb3NlQ2hhcnModGV4dC5zbGljZShsYXN0SW5kZXgpKTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBDb2xsYXBzZSBzaW5nbGUgbmV3bGluZXMgd2l0aGluIHBhcmFncmFwaHMgdG8gc3BhY2VzLCBwcmVzZXJ2ZSBkb3VibGUgbmV3bGluZXMgYXMgcGFyYWdyYXBoIGJyZWFrcy5cbiAqIEZlbmNlZCBjb2RlIGJsb2NrcyAoYmFja3RpY2sgb3IgdGlsZGUgZmVuY2VzKSBhcmUgcHJlc2VydmVkIHZlcmJhdGltIOKAlCB0aGVpciBpbnRlcm5hbCBuZXdsaW5lcyBhcmUgTk9UIGZvbGRlZCxcbiAqIHNvIGVtYmVkZGVkIGNvZGUgc3Vydml2ZXMgdG8gYmUgcmUtZW1pdHRlZCBhcyBhIHJlYWwgY29kZSBmZW5jZSBkb3duc3RyZWFtLlxuICpcbiAqIEBwYXJhbSB0ZXh0IC0gVGhlIHRleHQuXG4gKiBAcmV0dXJucyBUaGUgZm9sZGVkIHRleHQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmb2xkVHNEb2NQYXJhZ3JhcGhzKHRleHQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IHNlZ21lbnRzID0gc2VnbWVudE1hcmtkb3duKHRleHQpO1xuICByZXR1cm4gc2VnbWVudHNcbiAgICAubWFwKChzZWcpID0+IHtcbiAgICAgIHJldHVybiBzZWcudHlwZSA9PT0gJ2NvZGUnXG4gICAgICAgID8gYFxcYFxcYFxcYCR7c2VnLmxhbmd9XFxuJHtzZWcudGV4dH1cXG5cXGBcXGBcXGBgXG4gICAgICAgIDogc2VnLnRleHRcbiAgICAgICAgICAuc3BsaXQoL1xcbnsyLH0vKVxuICAgICAgICAgIC5tYXAoKHBhcmFncmFwaCkgPT4gcGFyYWdyYXBoLnJlcGxhY2VBbGwoJ1xcbicsICcgJykpXG4gICAgICAgICAgLmpvaW4oJ1xcblxcbicpO1xuICAgIH0pXG4gICAgLm1hcCgoc2VnbWVudCkgPT4gc2VnbWVudC50cmltKCkpXG4gICAgLmZpbHRlcihCb29sZWFuKVxuICAgIC5qb2luKCdcXG5cXG4nKTtcbn1cblxuLyoqXG4gKiBUaGUgdHlwZSdzIG5hbWUgd2l0aCBpdHMgdHlwZSBwYXJhbWV0ZXJzLCB3aXRob3V0IHRoZWlyIGNvbnN0cmFpbnRzLlxuICpcbiAqIEBwYXJhbSBuYW1lIC0gVGhlIHR5cGUncyBuYW1lLlxuICogQHBhcmFtIGluZm8gLSBUaGUgZG9jdW1lbnRlZCB0eXBlLlxuICogQHJldHVybnMgVGhlIG5hbWUgd2l0aCBpdHMgYmFyZSB0eXBlIHBhcmFtZXRlcnMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXREaXNwbGF5TmFtZShuYW1lOiBzdHJpbmcsIGluZm86IFR5cGVJbmZvKTogc3RyaW5nIHtcbiAgaWYgKGluZm8udHlwZVBhcmFtZXRlcnMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIG5hbWU7XG4gIH1cbiAgY29uc3QgYmFyZVBhcmFtcyA9IGluZm8udHlwZVBhcmFtZXRlcnMubWFwKCh0cCkgPT4gdHAucmVwbGFjZSgvXFxzK2V4dGVuZHNcXHMrLiokLywgJycpKTtcbiAgcmV0dXJuIGAke25hbWV9PCR7YmFyZVBhcmFtcy5qb2luKCcsICcpfT5gO1xufVxuXG4vKipcbiAqIEVtaXQgdGhlIGltcG9ydCBzdGF0ZW1lbnQgZm9yIGEgZG9jdW1lbnRlZCBleHBvcnQuXG4gKlxuICogVGhlIHN1YnBhdGggZXF1YWxzIHRoZSB0eXBlJ3MgbmFtZXNwYWNlIChpdHMgc291cmNlIHBhdGggcmVsYXRpdmUgdG8gYHNyY2ApLCBzbyBgc3JjL3N0cmluZy50c2Agb2ZcbiAqIGBAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWJgIGlzIGBAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvc3RyaW5nYC5cbiAqXG4gKiBJbnRlcmZhY2VzIC8gdHlwZSBhbGlhc2VzIC8gZW51bXMgYXJlIGltcG9ydGVkIHdpdGggYGltcG9ydCB0eXBlYDsgY2xhc3NlcyAvIGZ1bmN0aW9ucyAvXG4gKiB2YXJpYWJsZXMgd2l0aCBhIHZhbHVlIGBpbXBvcnRgLlxuICpcbiAqIEBwYXJhbSBpbmZvIC0gVGhlIGRvY3VtZW50ZWQgdHlwZS5cbiAqIEByZXR1cm5zIFRoZSBpbXBvcnQgc3RhdGVtZW50LlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0SW1wb3J0U3RhdGVtZW50KGluZm86IFR5cGVJbmZvKTogc3RyaW5nIHtcbiAgY29uc3QgaXNUeXBlT25seSA9IFsnZW51bScsICdpbnRlcmZhY2UnLCAndHlwZSddLmluY2x1ZGVzKGluZm8ua2luZCk7XG4gIGNvbnN0IGltcG9ydEtleXdvcmQgPSBpc1R5cGVPbmx5ID8gJ2ltcG9ydCB0eXBlJyA6ICdpbXBvcnQnO1xuICByZXR1cm4gYCR7aW1wb3J0S2V5d29yZH0geyAke2luZm8ubmFtZX0gfSBmcm9tICcke2dldEFwaURvY1NldHRpbmdzKCkucGFja2FnZU5hbWV9LyR7aW5mby5uYW1lc3BhY2V9JztgO1xufVxuXG4vKipcbiAqIFRoZSBmb2xkZXIgYSBuYW1lc3BhY2UncyBwYWdlcyBhcmUgd3JpdHRlbiB0by5cbiAqXG4gKiBAcGFyYW0gbmFtZXNwYWNlIC0gVGhlIHR5cGUncyBuYW1lc3BhY2UuXG4gKiBAcmV0dXJucyBUaGUgZm9sZGVyLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0TmFtZXNwYWNlRGlyZWN0b3J5KG5hbWVzcGFjZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIG5hbWVzcGFjZTtcbn1cblxuLyoqXG4gKiBTYW5pdGl6ZSBhIG1lbWJlciBuYW1lIGZvciB1c2UgaW4gYSBjYXNlLVBSRVNFUlZFRCBVUkwvcm91dGUgc2VnbWVudCAoZS5nLiBgc2hvd05vdGljZWApLlxuICpcbiAqIEBwYXJhbSBuYW1lIC0gVGhlIG1lbWJlcidzIG5hbWUuXG4gKiBAcmV0dXJucyBUaGUgY2FzZS1wcmVzZXJ2ZWQgc2VnbWVudC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1lbWJlclJvdXRlU2VnbWVudChuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gc2x1Z2lmeU1lbWJlck5hbWUobmFtZSk7XG59XG5cbi8qKlxuICogU2FuaXRpemUgYSBtZW1iZXIgbmFtZSBmb3IgdXNlIGFzIGFuIG9uLWRpc2sgRklMRU5BTUUgKGxvd2VyY2FzZWQsIGNvbGxpc2lvbi1zYWZlKS5cbiAqXG4gKiBAcGFyYW0gbmFtZSAtIFRoZSBtZW1iZXIncyBuYW1lLlxuICogQHJldHVybnMgVGhlIGxvd2VyY2FzZWQgZmlsZSBuYW1lIHNlZ21lbnQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtZW1iZXJTbHVnKG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiB0b1JvdXRlU2VnbWVudChzbHVnaWZ5TWVtYmVyTmFtZShuYW1lKSk7XG59XG5cbi8qKlxuICogU2x1Z2lmeSBhbiBvdmVybG9hZCBrZXkgZm9yIGEgY2FzZS1QUkVTRVJWRUQgVVJML3JvdXRlIHNlZ21lbnQ6IG9uKFwiY2hhbmdlZFwiKSAtPiBvbi1jaGFuZ2VkLlxuICpcbiAqIEBwYXJhbSBvdmVybG9hZEtleSAtIFRoZSBvdmVybG9hZCBrZXksIGUuZy4gYG9uKCdjaGFuZ2VkJylgLlxuICogQHJldHVybnMgVGhlIGNhc2UtcHJlc2VydmVkIHNlZ21lbnQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBvdmVybG9hZFJvdXRlU2VnbWVudChvdmVybG9hZEtleTogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHNsdWdpZnlPdmVybG9hZEtleShvdmVybG9hZEtleSk7XG59XG5cbi8qKlxuICogU2x1Z2lmeSBhbiBvdmVybG9hZCBrZXkgZm9yIGFuIG9uLWRpc2sgRklMRU5BTUU6IG9uKFwiY2hhbmdlZFwiKSAtPiBvbi1jaGFuZ2VkIChsb3dlcmNhc2VkKS5cbiAqXG4gKiBAcGFyYW0gb3ZlcmxvYWRLZXkgLSBUaGUgb3ZlcmxvYWQga2V5LCBlLmcuIGBvbignY2hhbmdlZCcpYC5cbiAqIEByZXR1cm5zIFRoZSBsb3dlcmNhc2VkIGZpbGUgbmFtZSBzZWdtZW50LlxuICovXG5leHBvcnQgZnVuY3Rpb24gb3ZlcmxvYWRTbHVnKG92ZXJsb2FkS2V5OiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gdG9Sb3V0ZVNlZ21lbnQoc2x1Z2lmeU92ZXJsb2FkS2V5KG92ZXJsb2FkS2V5KSk7XG59XG5cbi8qKlxuICogUmVwbGFjZSBldmVyeSBtYXRjaCBvZiBhIGdsb2JhbCByZWd1bGFyIGV4cHJlc3Npb24gd2l0aCB3aGF0IGEgcmVwbGFjZXIgYnVpbGRzIGZyb20gdGhlIG1hdGNoLiBUaGUgdHlwZWRcbiAqIGNvdW50ZXJwYXJ0IG9mIGBTdHJpbmcucHJvdG90eXBlLnJlcGxhY2VBbGxgIHdpdGggYSBjYWxsYmFjaywgd2hvc2UgYXJndW1lbnRzIGFyZSB0eXBlZCBvbmx5IHBvc2l0aW9uYWxseS5cbiAqXG4gKiBAcGFyYW0gdGV4dCAtIFRoZSB0ZXh0LlxuICogQHBhcmFtIHJlZ0V4cCAtIFRoZSByZWd1bGFyIGV4cHJlc3Npb247IGl0IG11c3QgY2FycnkgdGhlIGBnYCBmbGFnLlxuICogQHBhcmFtIHJlcGxhY2VyIC0gQnVpbGRzIHRoZSByZXBsYWNlbWVudCBvZiBvbmUgbWF0Y2guXG4gKiBAcmV0dXJucyBUaGUgdGV4dCB3aXRoIGV2ZXJ5IG1hdGNoIHJlcGxhY2VkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVwbGFjZVJlZ0V4cE1hdGNoZXModGV4dDogc3RyaW5nLCByZWdFeHA6IFJlZ0V4cCwgcmVwbGFjZXI6IChtYXRjaDogUmVnRXhwTWF0Y2hBcnJheSkgPT4gc3RyaW5nKTogc3RyaW5nIHtcbiAgbGV0IHJlc3VsdCA9ICcnO1xuICBsZXQgbGFzdEluZGV4ID0gMDtcbiAgZm9yIChjb25zdCBtYXRjaCBvZiB0ZXh0Lm1hdGNoQWxsKHJlZ0V4cCkpIHtcbiAgICByZXN1bHQgKz0gdGV4dC5zbGljZShsYXN0SW5kZXgsIG1hdGNoLmluZGV4KSArIHJlcGxhY2VyKG1hdGNoKTtcbiAgICBsYXN0SW5kZXggPSBtYXRjaC5pbmRleCArIG1hdGNoWzBdLmxlbmd0aDtcbiAgfVxuICByZXR1cm4gcmVzdWx0ICsgdGV4dC5zbGljZShsYXN0SW5kZXgpO1xufVxuXG4vKipcbiAqIFNwbGl0IG1hcmtkb3duIHRleHQgaW50byBhbiBvcmRlcmVkIGxpc3Qgb2YgcHJvc2UgYW5kIGZlbmNlZC1jb2RlIHNlZ21lbnRzLlxuICogQSBmZW5jZWQtY29kZSBzZWdtZW50IGlzIGRlbGltaXRlZCBieSBhIGxpbmUgb2YgMysgYmFja3RpY2tzIG9yIHRpbGRlczsgaXRzIGNvbnRlbnQgaXMgY2FwdHVyZWRcbiAqIHJhdyAobmV2ZXIgZXNjYXBlZCkgc28gaXQgY2FuIGJlIHJlLWVtaXR0ZWQgYXMgYSBsaXRlcmFsIE1EWCBjb2RlIGZlbmNlLlxuICpcbiAqIEBwYXJhbSB0ZXh0IC0gVGhlIHRleHQuXG4gKiBAcmV0dXJucyBUaGUgc2VnbWVudHMsIGluIG9yZGVyLlxuICovXG5leHBvcnQgZnVuY3Rpb24gc2VnbWVudE1hcmtkb3duKHRleHQ6IHN0cmluZyk6IE1hcmtkb3duU2VnbWVudFtdIHtcbiAgY29uc3QgbGluZXMgPSB0ZXh0LnNwbGl0KCdcXG4nKTtcbiAgY29uc3Qgc2VnbWVudHM6IE1hcmtkb3duU2VnbWVudFtdID0gW107XG4gIGxldCBwcm9zZUJ1ZmZlcjogc3RyaW5nW10gPSBbXTtcbiAgbGV0IGNvZGVMaW5lczogc3RyaW5nW10gPSBbXTtcbiAgbGV0IG9wZW5GZW5jZTogbnVsbCB8IE9wZW5GZW5jZSA9IG51bGw7XG4gIGZvciAoY29uc3QgbGluZSBvZiBsaW5lcykge1xuICAgIGlmIChvcGVuRmVuY2UpIHtcbiAgICAgIGlmIChvcGVuRmVuY2UuY2xvc2VSZS50ZXN0KGxpbmUpKSB7XG4gICAgICAgIHNlZ21lbnRzLnB1c2goeyBsYW5nOiBvcGVuRmVuY2UubGFuZywgdGV4dDogY29kZUxpbmVzLmpvaW4oJ1xcbicpLCB0eXBlOiAnY29kZScgfSk7XG4gICAgICAgIG9wZW5GZW5jZSA9IG51bGw7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb2RlTGluZXMucHVzaChsaW5lKTtcbiAgICAgIH1cbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGNvbnN0IG9wZW5NYXRjaCA9IC9eXFxzKig/PGZlbmNlPig/PGZlbmNlQ2hhcj5bYH5dKVxcazxmZW5jZUNoYXI+ezIsfSkoPzxsYW5nPi4qKSQvLmV4ZWMobGluZSk7XG4gICAgaWYgKG9wZW5NYXRjaCkge1xuICAgICAgY29uc3QgZmVuY2VDaGFycyA9IGdldE1hbmRhdG9yeU5hbWVkR3JvdXAob3Blbk1hdGNoLCAnZmVuY2UnKTtcbiAgICAgIGNvbnN0IGZlbmNlQ2hhciA9IGdldE1hbmRhdG9yeU5hbWVkR3JvdXAob3Blbk1hdGNoLCAnZmVuY2VDaGFyJyk7XG4gICAgICBmbHVzaFByb3NlKCk7XG4gICAgICBjb2RlTGluZXMgPSBbXTtcbiAgICAgIG9wZW5GZW5jZSA9IHtcbiAgICAgICAgY2xvc2VSZTogbmV3IFJlZ0V4cChgXlxcXFxzKlxcXFwke2ZlbmNlQ2hhcn17JHtTdHJpbmcoZmVuY2VDaGFycy5sZW5ndGgpfSx9XFxcXHMqJGApLFxuICAgICAgICBsYW5nOiBnZXRNYW5kYXRvcnlOYW1lZEdyb3VwKG9wZW5NYXRjaCwgJ2xhbmcnKS50cmltKClcbiAgICAgIH07XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgcHJvc2VCdWZmZXIucHVzaChsaW5lKTtcbiAgfVxuICAvLyBBbiB1bmNsb3NlZCBmZW5jZSBydW5zIHRvIHRoZSBlbmQgb2YgdGhlIHRleHQuXG4gIGlmIChvcGVuRmVuY2UpIHtcbiAgICBzZWdtZW50cy5wdXNoKHsgbGFuZzogb3BlbkZlbmNlLmxhbmcsIHRleHQ6IGNvZGVMaW5lcy5qb2luKCdcXG4nKSwgdHlwZTogJ2NvZGUnIH0pO1xuICB9XG4gIGZsdXNoUHJvc2UoKTtcbiAgcmV0dXJuIHNlZ21lbnRzO1xuXG4gIGZ1bmN0aW9uIGZsdXNoUHJvc2UoKTogdm9pZCB7XG4gICAgaWYgKHByb3NlQnVmZmVyLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHNlZ21lbnRzLnB1c2goeyB0ZXh0OiBwcm9zZUJ1ZmZlci5qb2luKCdcXG4nKSwgdHlwZTogJ3Byb3NlJyB9KTtcbiAgICBwcm9zZUJ1ZmZlciA9IFtdO1xuICB9XG59XG5cbi8qKlxuICogU3RyaXAgdGhlIGBpbXBvcnQoXCLigKZcIilgIHF1YWxpZmllcnMgdHMtbW9ycGggcHJpbnRzIGJlZm9yZSBhIHR5cGUgdGhhdCBpcyBub3QgaW4gc2NvcGUsIHJlY29yZGluZyBlYWNoIG9uZSdzXG4gKiBkZWNsYXJhdGlvbiBmaWxlIGZpcnN0LCBzaW5jZSBpdCBpcyB0aGUgb25lIHBsYWNlIGEgcHJpbnRlZCB0eXBlIG5hbWVzIHdoZXJlIGl0IHdhcyBkZWNsYXJlZC5cbiAqXG4gKiBAcGFyYW0gdHlwZVRleHQgLSBUaGUgcHJpbnRlZCB0eXBlLlxuICogQHJldHVybnMgVGhlIHR5cGUgd2l0aG91dCBpdHMgaW1wb3J0IHF1YWxpZmllcnMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzaW1wbGlmeVR5cGUodHlwZVRleHQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIGZvciAoY29uc3QgbWF0Y2ggb2YgdHlwZVRleHQubWF0Y2hBbGwoSU1QT1JUX1RZUEVfUkVHX0VYUCkpIHtcbiAgICByZWdpc3RlclBhY2thZ2VEZWNsYXJhdGlvbihnZXRNYW5kYXRvcnlOYW1lZEdyb3VwKG1hdGNoLCAnTmFtZScpLCBnZXRNYW5kYXRvcnlOYW1lZEdyb3VwKG1hdGNoLCAnUGF0aCcpKTtcbiAgfVxuXG4gIHJldHVybiB0eXBlVGV4dC5yZXBsYWNlQWxsKElNUE9SVF9RVUFMSUZJRVJfUkVHX0VYUCwgJycpO1xufVxuXG4vKipcbiAqIE5vcm1hbGl6ZSBhIGNvZGUgc2lnbmF0dXJlIGZvciB0aGUgYHNpZ25hdHVyZTpgIGZyb250bWF0dGVyIC8gT0cgY2FyZDogY29sbGFwc2Ugd2hpdGVzcGFjZSB0b1xuICogc2luZ2xlIHNwYWNlcyBhbmQgdHJ1bmNhdGUgdG8gYSBjYXJkLWZyaWVuZGx5IGxlbmd0aCB3aXRoIGFuIGVsbGlwc2lzLlxuICpcbiAqIEBwYXJhbSBzaWduYXR1cmUgLSBUaGUgc2lnbmF0dXJlLlxuICogQHJldHVybnMgVGhlIG5vcm1hbGl6ZWQgc2lnbmF0dXJlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdHJ1bmNhdGVTaWduYXR1cmUoc2lnbmF0dXJlOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBjb2xsYXBzZWQgPSBzaWduYXR1cmUucmVwbGFjZUFsbCgvXFxzKy9nLCAnICcpLnRyaW0oKTtcbiAgcmV0dXJuIGNvbGxhcHNlZC5sZW5ndGggPD0gU0lHTkFUVVJFX01BWF9MRU5HVEggPyBjb2xsYXBzZWQgOiBgJHtjb2xsYXBzZWQuc2xpY2UoMCwgU0lHTkFUVVJFX01BWF9MRU5HVEggLSAxKS50cmltRW5kKCl94oCmYDtcbn1cblxuZnVuY3Rpb24gc2x1Z2lmeU1lbWJlck5hbWUobmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgY2xlYW5lZCA9IG5hbWVcbiAgICAucmVwbGFjZUFsbCgvXltcIiddfFtcIiddJC9nLCAnJylcbiAgICAucmVwbGFjZUFsbCgvW15hLXpBLVowLTldL2csICctJylcbiAgICAucmVwbGFjZUFsbCgvLSsvZywgJy0nKVxuICAgIC5yZXBsYWNlQWxsKC9eLXwtJC9nLCAnJyk7XG4gIC8vIEEgbWVtYmVyIGxpdGVyYWxseSBuYW1lZCBgaW5kZXhgIHdvdWxkIHdyaXRlIGBpbmRleC5tZHhgLCBjb2xsaWRpbmcgd2l0aCB0aGUgdHlwZS1vdmVydmlld1xuICAvLyBgaW5kZXgubWR4YCBpbiB0aGUgc2FtZSBkaXJlY3RvcnkgKG9uZSBzaWxlbnRseSBvdmVyd3JpdGVzIHRoZSBvdGhlciwgNDA0LWluZyB0aGUgbG9zZXIpLlxuICByZXR1cm4gY2xlYW5lZCA9PT0gJ2luZGV4JyA/ICdpbmRleC1tZW1iZXInIDogKGNsZWFuZWQgfHwgJ3VubmFtZWQnKTtcbn1cblxuZnVuY3Rpb24gc2x1Z2lmeU92ZXJsb2FkS2V5KG92ZXJsb2FkS2V5OiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBzbHVnID0gb3ZlcmxvYWRLZXlcbiAgICAucmVwbGFjZUFsbCgvW1wiJygpXS9nLCAnICcpXG4gICAgLnJlcGxhY2VBbGwoL1teYS16QS1aMC05XFxzXS9nLCAnJylcbiAgICAudHJpbSgpXG4gICAgLnJlcGxhY2VBbGwoL1xccysvZywgJy0nKTtcbiAgLy8gQSBtZXRob2QgbmFtZWQgYGluZGV4YCB3b3VsZCB3cml0ZSBgaW5kZXgubWR4YCBvdmVyIHRoZSB0eXBlLW92ZXJ2aWV3IHBhZ2UsIGV4YWN0bHkgYXMgYSBwcm9wZXJ0eSB3b3VsZC5cbiAgcmV0dXJuIHNsdWcgPT09ICdpbmRleCcgPyAnaW5kZXgtbWVtYmVyJyA6IHNsdWc7XG59XG5cbmNvbnN0IE9HX0RFU0NSSVBUSU9OX01BWF9MRU5HVEggPSAxNjA7XG5cbi8qKlxuICogU3RyaXAgbWFya2Rvd24gZm9ybWF0dGluZyB0byBwbGFpbiB0ZXh0IGZvciB1c2UgaW4gbWV0YSBkZXNjcmlwdGlvbnNcbiAqXG4gKiBAcGFyYW0gdGV4dCAtIFRoZSB0ZXh0LlxuICogQHJldHVybnMgVGhlIHBsYWluIHRleHQsIGF0IG1vc3QgMTYwIGNoYXJhY3RlcnMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdHJpcE1hcmtkb3duKHRleHQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IHBsYWluID0gcmVwbGFjZVJlZ0V4cE1hdGNoZXModGV4dCwgL1xce0BsaW5rXFxzKyg/OltefH1dKz8pKD86XFxzKlxcfFxccyooPzxkaXNwbGF5PltefV0rPykpP1xcfS9nLCAobWF0Y2gpID0+IGdldE9wdGlvbmFsTmFtZWRHcm91cChtYXRjaCwgJ2Rpc3BsYXknKSA/PyAnJylcbiAgICAucmVwbGFjZUFsbCgvXFxbKD88dGV4dD5bXlxcXV0rKVxcXVxcKFteKV0rXFwpL2csICckPHRleHQ+JylcbiAgICAucmVwbGFjZUFsbCgvW2AqX35dL2csICcnKVxuICAgIC5yZXBsYWNlQWxsKC9cXHMrL2csICcgJylcbiAgICAudHJpbSgpO1xuXG4gIGlmIChwbGFpbi5sZW5ndGggPD0gT0dfREVTQ1JJUFRJT05fTUFYX0xFTkdUSCkge1xuICAgIHJldHVybiBwbGFpbjtcbiAgfVxuXG4gIC8vIEN1dCBiYWNrIHRvIGEgd29yZCBib3VuZGFyeTogYSByYXcgc2xpY2UgZW5kcyBkZXNjcmlwdGlvbnMgbWlkLXdvcmQgKGDigKYgdGhlIHN0cmluZyBtb2R1bGUgaXMgb2JgKS5cbiAgLy8gVGhhdCBmcmFnbWVudCBpcyB3aGF0IHJlYWRlcnMgc2VlIG9uIHRoZSBPRyBjYXJkIGFuZCBpbiBzZWFyY2ggcmVzdWx0cy5cbiAgY29uc3QgY2xpcHBlZCA9IHBsYWluLnNsaWNlKDAsIE9HX0RFU0NSSVBUSU9OX01BWF9MRU5HVEggLSAxKTtcbiAgY29uc3QgbGFzdFNwYWNlSW5kZXggPSBjbGlwcGVkLmxhc3RJbmRleE9mKCcgJyk7XG4gIGNvbnN0IHRydW5jYXRlZCA9IGxhc3RTcGFjZUluZGV4ID4gMCA/IGNsaXBwZWQuc2xpY2UoMCwgbGFzdFNwYWNlSW5kZXgpIDogY2xpcHBlZDtcbiAgcmV0dXJuIGAke3RydW5jYXRlZC5yZXBsYWNlKC9bLDs6Llxcc10rJC8sICcnKX3igKZgO1xufVxuXG5mdW5jdGlvbiBlc2NhcGVNZHhQcm9zZUNoYXJzKGNodW5rOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gY2h1bmsucmVwbGFjZUFsbCgvWzx7fV0vZywgKGNoYXIpID0+IGBcXFxcJHtjaGFyfWApO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFNQSxxQkFHTztBQUNQLHNCQUFzQjtBQUN0Qix1QkFBd0I7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
|
|
285
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9kb2NzLXNpdGUvYXBpLWRvYy10ZXh0LXV0aWxzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBUZXh0L21hcmtkb3duL2VzY2FwaW5nIHV0aWxpdGllcyBhbmQgaWRlbnRpZmllciBoZWxwZXJzIGZvciB0aGUgQVBJIGRvY3VtZW50YXRpb24gZ2VuZXJhdG9yLlxuICovXG5cbmltcG9ydCB7XG4gIGdldE1hbmRhdG9yeU5hbWVkR3JvdXAsXG4gIGdldE9wdGlvbmFsTmFtZWRHcm91cFxufSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvcmVnLWV4cCc7XG5pbXBvcnQgeyBta2RpciB9IGZyb20gJ25vZGU6ZnMvcHJvbWlzZXMnO1xuaW1wb3J0IHsgZGlybmFtZSB9IGZyb20gJ25vZGU6cGF0aCc7XG5cbmltcG9ydCB0eXBlIHtcbiAgTWFya2Rvd25TZWdtZW50LFxuICBNZW1iZXJJbmZvLFxuICBUeXBlSW5mb1xufSBmcm9tICcuL2FwaS1kb2MtdHlwZXMudHMnO1xuXG5pbXBvcnQgeyBFVkVOVF9NRVRIT0RTIH0gZnJvbSAnLi9hcGktZG9jLWNvbnN0YW50cy50cyc7XG5pbXBvcnQgeyByZWdpc3RlclBhY2thZ2VEZWNsYXJhdGlvbiB9IGZyb20gJy4vYXBpLWRvYy1wYWNrYWdlLXNpdGVzLnRzJztcbmltcG9ydCB7IHRvUm91dGVTZWdtZW50IH0gZnJvbSAnLi9hcGktZG9jLXJvdXRlLXNlZ21lbnRzLnRzJztcbmltcG9ydCB7IGdldEFwaURvY1NldHRpbmdzIH0gZnJvbSAnLi9hcGktZG9jLXNldHRpbmdzLnRzJztcblxuaW50ZXJmYWNlIE9wZW5GZW5jZSB7XG4gIHJlYWRvbmx5IGNsb3NlUmU6IFJlZ0V4cDtcbiAgcmVhZG9ubHkgbGFuZzogc3RyaW5nO1xufVxuXG4vKipcbiAqIENvbXB1dGUgYW4gb3ZlcmxvYWQga2V5IGZvciBtZXRob2RzIHdpdGggZGlzdGluZ3Vpc2hpbmcgZmlyc3QgcGFyYW0gKGUuZy4gb24oJ2NoYW5nZWQnLC4uLikpXG4gKlxuICogQHBhcmFtIG1ldGhvZCAtIFRoZSBtZXRob2QuXG4gKiBAcmV0dXJucyBUaGUgb3ZlcmxvYWQga2V5LlxuICovXG5leHBvcnQgZnVuY3Rpb24gY29tcHV0ZU92ZXJsb2FkS2V5KG1ldGhvZDogTWVtYmVySW5mbyk6IHN0cmluZyB7XG4gIGlmIChFVkVOVF9NRVRIT0RTLmhhcyhtZXRob2QubmFtZSkgJiYgbWV0aG9kLnBhcmFtZXRlcnMubGVuZ3RoID4gMCkge1xuICAgIGNvbnN0IGZpcnN0UGFyYW1ldGVyID0gbWV0aG9kLnBhcmFtZXRlcnNbMF07XG4gICAgaWYgKGZpcnN0UGFyYW1ldGVyPy50eXBlLnN0YXJ0c1dpdGgoJ1wiJykgfHwgZmlyc3RQYXJhbWV0ZXI/LnR5cGUuc3RhcnRzV2l0aCgnXFwnJykpIHtcbiAgICAgIGNvbnN0IG5vcm1hbGl6ZWRUeXBlID0gZmlyc3RQYXJhbWV0ZXIudHlwZS5yZXBsYWNlQWxsKCdcIicsICdcXCcnKTtcbiAgICAgIHJldHVybiBgJHttZXRob2QubmFtZX0oJHtub3JtYWxpemVkVHlwZX0pYDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG1ldGhvZC5uYW1lO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgdGhlIGZvbGRlciBhIGZpbGUgaXMgYWJvdXQgdG8gYmUgd3JpdHRlbiB0by5cbiAqXG4gKiBAcGFyYW0gZmlsZVBhdGggLSBUaGUgcGF0aCBvZiB0aGUgZmlsZSBhYm91dCB0byBiZSB3cml0dGVuLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZW5zdXJlRGlyZWN0b3J5KGZpbGVQYXRoOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgYXdhaXQgbWtkaXIoZGlybmFtZShmaWxlUGF0aCksIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xufVxuXG4vKipcbiAqIEVzY2FwZSB0ZXh0IGZvciB1c2UgaW5zaWRlIGEgSlMgc3RyaW5nIHdpdGhpbiBhIEpTWCBleHByZXNzaW9uOiB7Li4ue2tleTogXCIuLi5cIn19XG4gKlxuICogQHBhcmFtIHRleHQgLSBUaGUgdGV4dCB0byBlc2NhcGUuXG4gKiBAcmV0dXJucyBUaGUgZXNjYXBlZCB0ZXh0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gZXNjYXBlSnNTdHJpbmcodGV4dDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHRleHQucmVwbGFjZUFsbCgnXFxcXCcsICdcXFxcXFxcXCcpLnJlcGxhY2VBbGwoJ1wiJywgU3RyaW5nLnJhd2BcXFwiYCkucmVwbGFjZUFsbCgnXFxuJywgJyAnKTtcbn1cblxuLyoqXG4gKiBFc2NhcGUgdGV4dCBmb3IgdXNlIGluc2lkZSBhIEpTWCBhdHRyaWJ1dGU6IGF0dHI9XCIuLi5cIiAoTURYIHVzZXMgSFRNTC1zdHlsZSBwYXJzaW5nKVxuICpcbiAqIEBwYXJhbSB0ZXh0IC0gVGhlIHRleHQgdG8gZXNjYXBlLlxuICogQHJldHVybnMgVGhlIGVzY2FwZWQgdGV4dC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVzY2FwZUpzeEF0dHJpYnV0ZSh0ZXh0OiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gdGV4dC5yZXBsYWNlQWxsKCcmJywgJyZhbXA7JykucmVwbGFjZUFsbCgnXCInLCAnJnF1b3Q7JykucmVwbGFjZUFsbCgnXFxuJywgJyAnKTtcbn1cblxuLyoqXG4gKiBFc2NhcGUgdGV4dCBmb3IgYSBtYXJrZG93biB0YWJsZSBjZWxsLlxuICpcbiAqIEBwYXJhbSB0ZXh0IC0gVGhlIHRleHQgdG8gZXNjYXBlLlxuICogQHJldHVybnMgVGhlIGVzY2FwZWQgdGV4dC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVzY2FwZU1hcmtkb3duKHRleHQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiB0ZXh0LnJlcGxhY2VBbGwoJ3wnLCBTdHJpbmcucmF3YFxcfGApLnJlcGxhY2VBbGwoJ1xcbicsICcgJykucmVwbGFjZUFsbCgneycsIFN0cmluZy5yYXdgXFx7YCkucmVwbGFjZUFsbCgnfScsIFN0cmluZy5yYXdgXFx9YCk7XG59XG5cbi8qKlxuICogRXNjYXBlIGFuZ2xlIGJyYWNrZXRzIHNvIE1EWCBkb2VzIG5vdCByZWFkIHRoZW0gYXMgSlNYLlxuICpcbiAqIEBwYXJhbSB0ZXh0IC0gVGhlIHRleHQgdG8gZXNjYXBlLlxuICogQHJldHVybnMgVGhlIGVzY2FwZWQgdGV4dC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVzY2FwZU1keEFuZ2xlQnJhY2tldHModGV4dDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHRleHQucmVwbGFjZUFsbCgnPCcsIFN0cmluZy5yYXdgXFw8YCkucmVwbGFjZUFsbCgnPicsIFN0cmluZy5yYXdgXFw+YCk7XG59XG5cbi8qKlxuICogRXNjYXBlIGN1cmx5IGJyYWNlcyBpbiBNRFggbWFya2Rvd24gY29udGVudCB0byBwcmV2ZW50IEpTWCBleHByZXNzaW9uIHBhcnNpbmdcbiAqXG4gKiBAcGFyYW0gdGV4dCAtIFRoZSB0ZXh0IHRvIGVzY2FwZS5cbiAqIEByZXR1cm5zIFRoZSBlc2NhcGVkIHRleHQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlc2NhcGVNZHhCcmFjZXModGV4dDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHRleHQucmVwbGFjZUFsbCgneycsIFN0cmluZy5yYXdgXFx7YCkucmVwbGFjZUFsbCgnfScsIFN0cmluZy5yYXdgXFx9YCk7XG59XG5cbi8qKlxuICogRXNjYXBlIHRleHQgZm9yIGEgZG91YmxlLXF1b3RlZCBZQU1MIHZhbHVlLlxuICpcbiAqIEBwYXJhbSB0ZXh0IC0gVGhlIHRleHQgdG8gZXNjYXBlLlxuICogQHJldHVybnMgVGhlIGVzY2FwZWQgdGV4dC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVzY2FwZVlhbWwodGV4dDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHRleHQucmVwbGFjZUFsbCgnXCInLCBTdHJpbmcucmF3YFxcXCJgKTtcbn1cblxuY29uc3QgU0lHTkFUVVJFX01BWF9MRU5HVEggPSAxNjA7XG5jb25zdCBJTVBPUlRfUVVBTElGSUVSX1JFR19FWFAgPSAvaW1wb3J0XFwoKD88UXVvdGU+W1wiJ10pW15cIiddK1xcazxRdW90ZT5cXClcXC4vZztcbmNvbnN0IElNUE9SVF9UWVBFX1JFR19FWFAgPSAvaW1wb3J0XFwoKD88UXVvdGU+W1wiJ10pKD88UGF0aD5bXlwiJ10rKVxcazxRdW90ZT5cXClcXC4oPzxOYW1lPltBLVphLXpfJF1bXFx3JF0qKS9nO1xuXG4vKipcbiAqIEVzY2FwZSBNRFgtdW5zYWZlIGNoYXJhY3RlcnMgKGA8YCwgYHtgLCBgfWApIGluIHByb3NlIHRleHQsIHdoaWxlIGxlYXZpbmcgaW5saW5lIGNvZGUgc3BhbnNcbiAqIChgYCBgY29kZWAgYGApIGFuZCBtYXJrZG93biBsaW5rcyAoYFt0ZXh0XSh1cmwpYCkgdW50b3VjaGVkLiBNRFggcGFyc2VzIGJhcmUgYDxgL2B7YCBpbiBwcm9zZSBhc1xuICogSlNYL2V4cHJlc3Npb25zLCBzbyB0aGV5IG11c3QgYmUgYmFja3NsYXNoLWVzY2FwZWQgdG8gcmVuZGVyIGFzIGxpdGVyYWwgdGV4dC5cbiAqXG4gKiBAcGFyYW0gdGV4dCAtIFRoZSBwcm9zZSB0byBlc2NhcGUuXG4gKiBAcmV0dXJucyBUaGUgZXNjYXBlZCBwcm9zZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVzY2FwZU1keFByb3NlKHRleHQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IHByb3RlY3RlZFBhdHRlcm4gPSAvYFteYF0qYHxcXFtbXlxcXV0qXFxdXFwoW14pXSpcXCkvZztcbiAgbGV0IHJlc3VsdCA9ICcnO1xuICBsZXQgbGFzdEluZGV4ID0gMDtcbiAgZm9yIChjb25zdCBtYXRjaCBvZiB0ZXh0Lm1hdGNoQWxsKHByb3RlY3RlZFBhdHRlcm4pKSB7XG4gICAgY29uc3QgaW5kZXggPSBtYXRjaC5pbmRleDtcbiAgICByZXN1bHQgKz0gZXNjYXBlTWR4UHJvc2VDaGFycyh0ZXh0LnNsaWNlKGxhc3RJbmRleCwgaW5kZXgpKTtcbiAgICByZXN1bHQgKz0gbWF0Y2hbMF07XG4gICAgbGFzdEluZGV4ID0gaW5kZXggKyBtYXRjaFswXS5sZW5ndGg7XG4gIH1cbiAgcmVzdWx0ICs9IGVzY2FwZU1keFByb3NlQ2hhcnModGV4dC5zbGljZShsYXN0SW5kZXgpKTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBDb2xsYXBzZSBzaW5nbGUgbmV3bGluZXMgd2l0aGluIHBhcmFncmFwaHMgdG8gc3BhY2VzLCBwcmVzZXJ2ZSBkb3VibGUgbmV3bGluZXMgYXMgcGFyYWdyYXBoIGJyZWFrcy5cbiAqIEZlbmNlZCBjb2RlIGJsb2NrcyAoYmFja3RpY2sgb3IgdGlsZGUgZmVuY2VzKSBhcmUgcHJlc2VydmVkIHZlcmJhdGltIOKAlCB0aGVpciBpbnRlcm5hbCBuZXdsaW5lcyBhcmUgTk9UIGZvbGRlZCxcbiAqIHNvIGVtYmVkZGVkIGNvZGUgc3Vydml2ZXMgdG8gYmUgcmUtZW1pdHRlZCBhcyBhIHJlYWwgY29kZSBmZW5jZSBkb3duc3RyZWFtLlxuICpcbiAqIEBwYXJhbSB0ZXh0IC0gVGhlIHRleHQuXG4gKiBAcmV0dXJucyBUaGUgZm9sZGVkIHRleHQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmb2xkVHNEb2NQYXJhZ3JhcGhzKHRleHQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IHNlZ21lbnRzID0gc2VnbWVudE1hcmtkb3duKHRleHQpO1xuICByZXR1cm4gc2VnbWVudHNcbiAgICAubWFwKChzZWcpID0+IHtcbiAgICAgIHJldHVybiBzZWcudHlwZSA9PT0gJ2NvZGUnXG4gICAgICAgID8gYFxcYFxcYFxcYCR7c2VnLmxhbmd9XFxuJHtzZWcudGV4dH1cXG5cXGBcXGBcXGBgXG4gICAgICAgIDogc2VnLnRleHRcbiAgICAgICAgICAuc3BsaXQoL1xcbnsyLH0vKVxuICAgICAgICAgIC5tYXAoKHBhcmFncmFwaCkgPT4gcGFyYWdyYXBoLnJlcGxhY2VBbGwoJ1xcbicsICcgJykpXG4gICAgICAgICAgLmpvaW4oJ1xcblxcbicpO1xuICAgIH0pXG4gICAgLm1hcCgoc2VnbWVudCkgPT4gc2VnbWVudC50cmltKCkpXG4gICAgLmZpbHRlcihCb29sZWFuKVxuICAgIC5qb2luKCdcXG5cXG4nKTtcbn1cblxuLyoqXG4gKiBUaGUgdHlwZSdzIG5hbWUgd2l0aCBpdHMgdHlwZSBwYXJhbWV0ZXJzLCB3aXRob3V0IHRoZWlyIGNvbnN0cmFpbnRzLlxuICpcbiAqIEBwYXJhbSBuYW1lIC0gVGhlIHR5cGUncyBuYW1lLlxuICogQHBhcmFtIGluZm8gLSBUaGUgZG9jdW1lbnRlZCB0eXBlLlxuICogQHJldHVybnMgVGhlIG5hbWUgd2l0aCBpdHMgYmFyZSB0eXBlIHBhcmFtZXRlcnMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXREaXNwbGF5TmFtZShuYW1lOiBzdHJpbmcsIGluZm86IFR5cGVJbmZvKTogc3RyaW5nIHtcbiAgaWYgKGluZm8udHlwZVBhcmFtZXRlcnMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIG5hbWU7XG4gIH1cbiAgY29uc3QgYmFyZVBhcmFtcyA9IGluZm8udHlwZVBhcmFtZXRlcnMubWFwKCh0cCkgPT4gdHAucmVwbGFjZSgvXFxzK2V4dGVuZHNcXHMrLiokLywgJycpKTtcbiAgcmV0dXJuIGAke25hbWV9PCR7YmFyZVBhcmFtcy5qb2luKCcsICcpfT5gO1xufVxuXG4vKipcbiAqIEVtaXQgdGhlIGltcG9ydCBzdGF0ZW1lbnQgZm9yIGEgZG9jdW1lbnRlZCBleHBvcnQuXG4gKlxuICogVGhlIHN1YnBhdGggZXF1YWxzIHRoZSB0eXBlJ3MgbmFtZXNwYWNlIChpdHMgc291cmNlIHBhdGggcmVsYXRpdmUgdG8gYHNyY2ApLCBzbyBgc3JjL3N0cmluZy50c2Agb2ZcbiAqIGBAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWJgIGlzIGBAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvc3RyaW5nYC5cbiAqXG4gKiBJbnRlcmZhY2VzIC8gdHlwZSBhbGlhc2VzIC8gZW51bXMgYXJlIGltcG9ydGVkIHdpdGggYGltcG9ydCB0eXBlYDsgY2xhc3NlcyAvIGZ1bmN0aW9ucyAvXG4gKiB2YXJpYWJsZXMgd2l0aCBhIHZhbHVlIGBpbXBvcnRgLlxuICpcbiAqIEBwYXJhbSBpbmZvIC0gVGhlIGRvY3VtZW50ZWQgdHlwZS5cbiAqIEByZXR1cm5zIFRoZSBpbXBvcnQgc3RhdGVtZW50LlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0SW1wb3J0U3RhdGVtZW50KGluZm86IFR5cGVJbmZvKTogc3RyaW5nIHtcbiAgY29uc3QgaXNUeXBlT25seSA9IFsnZW51bScsICdpbnRlcmZhY2UnLCAndHlwZSddLmluY2x1ZGVzKGluZm8ua2luZCk7XG4gIGNvbnN0IGltcG9ydEtleXdvcmQgPSBpc1R5cGVPbmx5ID8gJ2ltcG9ydCB0eXBlJyA6ICdpbXBvcnQnO1xuICByZXR1cm4gYCR7aW1wb3J0S2V5d29yZH0geyAke2luZm8ubmFtZX0gfSBmcm9tICcke2dldEFwaURvY1NldHRpbmdzKCkucGFja2FnZU5hbWV9LyR7aW5mby5uYW1lc3BhY2V9JztgO1xufVxuXG4vKipcbiAqIFRoZSBmb2xkZXIgYSBuYW1lc3BhY2UncyBwYWdlcyBhcmUgd3JpdHRlbiB0by5cbiAqXG4gKiBAcGFyYW0gbmFtZXNwYWNlIC0gVGhlIHR5cGUncyBuYW1lc3BhY2UuXG4gKiBAcmV0dXJucyBUaGUgZm9sZGVyLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0TmFtZXNwYWNlRGlyZWN0b3J5KG5hbWVzcGFjZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIG5hbWVzcGFjZTtcbn1cblxuLyoqXG4gKiBTYW5pdGl6ZSBhIG1lbWJlciBuYW1lIGZvciB1c2UgaW4gYSBjYXNlLVBSRVNFUlZFRCBVUkwvcm91dGUgc2VnbWVudCAoZS5nLiBgc2hvd05vdGljZWApLlxuICpcbiAqIEBwYXJhbSBuYW1lIC0gVGhlIG1lbWJlcidzIG5hbWUuXG4gKiBAcmV0dXJucyBUaGUgY2FzZS1wcmVzZXJ2ZWQgc2VnbWVudC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1lbWJlclJvdXRlU2VnbWVudChuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gc2x1Z2lmeU1lbWJlck5hbWUobmFtZSk7XG59XG5cbi8qKlxuICogU2FuaXRpemUgYSBtZW1iZXIgbmFtZSBmb3IgdXNlIGFzIGFuIG9uLWRpc2sgRklMRU5BTUUgKGxvd2VyY2FzZWQsIGNvbGxpc2lvbi1zYWZlKS5cbiAqXG4gKiBAcGFyYW0gbmFtZSAtIFRoZSBtZW1iZXIncyBuYW1lLlxuICogQHJldHVybnMgVGhlIGxvd2VyY2FzZWQgZmlsZSBuYW1lIHNlZ21lbnQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtZW1iZXJTbHVnKG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiB0b1JvdXRlU2VnbWVudChzbHVnaWZ5TWVtYmVyTmFtZShuYW1lKSk7XG59XG5cbi8qKlxuICogU2x1Z2lmeSBhbiBvdmVybG9hZCBrZXkgZm9yIGEgY2FzZS1QUkVTRVJWRUQgVVJML3JvdXRlIHNlZ21lbnQ6IG9uKFwiY2hhbmdlZFwiKSAtPiBvbi1jaGFuZ2VkLlxuICpcbiAqIEBwYXJhbSBvdmVybG9hZEtleSAtIFRoZSBvdmVybG9hZCBrZXksIGUuZy4gYG9uKCdjaGFuZ2VkJylgLlxuICogQHJldHVybnMgVGhlIGNhc2UtcHJlc2VydmVkIHNlZ21lbnQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBvdmVybG9hZFJvdXRlU2VnbWVudChvdmVybG9hZEtleTogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHNsdWdpZnlPdmVybG9hZEtleShvdmVybG9hZEtleSk7XG59XG5cbi8qKlxuICogU2x1Z2lmeSBhbiBvdmVybG9hZCBrZXkgZm9yIGFuIG9uLWRpc2sgRklMRU5BTUU6IG9uKFwiY2hhbmdlZFwiKSAtPiBvbi1jaGFuZ2VkIChsb3dlcmNhc2VkKS5cbiAqXG4gKiBAcGFyYW0gb3ZlcmxvYWRLZXkgLSBUaGUgb3ZlcmxvYWQga2V5LCBlLmcuIGBvbignY2hhbmdlZCcpYC5cbiAqIEByZXR1cm5zIFRoZSBsb3dlcmNhc2VkIGZpbGUgbmFtZSBzZWdtZW50LlxuICovXG5leHBvcnQgZnVuY3Rpb24gb3ZlcmxvYWRTbHVnKG92ZXJsb2FkS2V5OiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gdG9Sb3V0ZVNlZ21lbnQoc2x1Z2lmeU92ZXJsb2FkS2V5KG92ZXJsb2FkS2V5KSk7XG59XG5cbi8qKlxuICogUmVwbGFjZSBldmVyeSBtYXRjaCBvZiBhIGdsb2JhbCByZWd1bGFyIGV4cHJlc3Npb24gd2l0aCB3aGF0IGEgcmVwbGFjZXIgYnVpbGRzIGZyb20gdGhlIG1hdGNoLiBUaGUgdHlwZWRcbiAqIGNvdW50ZXJwYXJ0IG9mIGBTdHJpbmcucHJvdG90eXBlLnJlcGxhY2VBbGxgIHdpdGggYSBjYWxsYmFjaywgd2hvc2UgYXJndW1lbnRzIGFyZSB0eXBlZCBvbmx5IHBvc2l0aW9uYWxseS5cbiAqXG4gKiBAcGFyYW0gdGV4dCAtIFRoZSB0ZXh0LlxuICogQHBhcmFtIHJlZ0V4cCAtIFRoZSByZWd1bGFyIGV4cHJlc3Npb247IGl0IG11c3QgY2FycnkgdGhlIGBnYCBmbGFnLlxuICogQHBhcmFtIHJlcGxhY2VyIC0gQnVpbGRzIHRoZSByZXBsYWNlbWVudCBvZiBvbmUgbWF0Y2guXG4gKiBAcmV0dXJucyBUaGUgdGV4dCB3aXRoIGV2ZXJ5IG1hdGNoIHJlcGxhY2VkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVwbGFjZVJlZ0V4cE1hdGNoZXModGV4dDogc3RyaW5nLCByZWdFeHA6IFJlZ0V4cCwgcmVwbGFjZXI6IChtYXRjaDogUmVnRXhwTWF0Y2hBcnJheSkgPT4gc3RyaW5nKTogc3RyaW5nIHtcbiAgbGV0IHJlc3VsdCA9ICcnO1xuICBsZXQgbGFzdEluZGV4ID0gMDtcbiAgZm9yIChjb25zdCBtYXRjaCBvZiB0ZXh0Lm1hdGNoQWxsKHJlZ0V4cCkpIHtcbiAgICByZXN1bHQgKz0gdGV4dC5zbGljZShsYXN0SW5kZXgsIG1hdGNoLmluZGV4KSArIHJlcGxhY2VyKG1hdGNoKTtcbiAgICBsYXN0SW5kZXggPSBtYXRjaC5pbmRleCArIG1hdGNoWzBdLmxlbmd0aDtcbiAgfVxuICByZXR1cm4gcmVzdWx0ICsgdGV4dC5zbGljZShsYXN0SW5kZXgpO1xufVxuXG4vKipcbiAqIFNwbGl0IG1hcmtkb3duIHRleHQgaW50byBhbiBvcmRlcmVkIGxpc3Qgb2YgcHJvc2UgYW5kIGZlbmNlZC1jb2RlIHNlZ21lbnRzLlxuICogQSBmZW5jZWQtY29kZSBzZWdtZW50IGlzIGRlbGltaXRlZCBieSBhIGxpbmUgb2YgMysgYmFja3RpY2tzIG9yIHRpbGRlczsgaXRzIGNvbnRlbnQgaXMgY2FwdHVyZWRcbiAqIHJhdyAobmV2ZXIgZXNjYXBlZCkgc28gaXQgY2FuIGJlIHJlLWVtaXR0ZWQgYXMgYSBsaXRlcmFsIE1EWCBjb2RlIGZlbmNlLlxuICpcbiAqIEBwYXJhbSB0ZXh0IC0gVGhlIHRleHQuXG4gKiBAcmV0dXJucyBUaGUgc2VnbWVudHMsIGluIG9yZGVyLlxuICovXG5leHBvcnQgZnVuY3Rpb24gc2VnbWVudE1hcmtkb3duKHRleHQ6IHN0cmluZyk6IE1hcmtkb3duU2VnbWVudFtdIHtcbiAgY29uc3QgbGluZXMgPSB0ZXh0LnNwbGl0KCdcXG4nKTtcbiAgY29uc3Qgc2VnbWVudHM6IE1hcmtkb3duU2VnbWVudFtdID0gW107XG4gIGxldCBwcm9zZUJ1ZmZlcjogc3RyaW5nW10gPSBbXTtcbiAgbGV0IGNvZGVMaW5lczogc3RyaW5nW10gPSBbXTtcbiAgbGV0IG9wZW5GZW5jZTogbnVsbCB8IE9wZW5GZW5jZSA9IG51bGw7XG4gIGZvciAoY29uc3QgbGluZSBvZiBsaW5lcykge1xuICAgIGlmIChvcGVuRmVuY2UpIHtcbiAgICAgIGlmIChvcGVuRmVuY2UuY2xvc2VSZS50ZXN0KGxpbmUpKSB7XG4gICAgICAgIHNlZ21lbnRzLnB1c2goeyBsYW5nOiBvcGVuRmVuY2UubGFuZywgdGV4dDogY29kZUxpbmVzLmpvaW4oJ1xcbicpLCB0eXBlOiAnY29kZScgfSk7XG4gICAgICAgIG9wZW5GZW5jZSA9IG51bGw7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb2RlTGluZXMucHVzaChsaW5lKTtcbiAgICAgIH1cbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGNvbnN0IG9wZW5NYXRjaCA9IC9eXFxzKig/PGZlbmNlPig/PGZlbmNlQ2hhcj5bYH5dKVxcazxmZW5jZUNoYXI+ezIsfSkoPzxsYW5nPi4qKSQvLmV4ZWMobGluZSk7XG4gICAgaWYgKG9wZW5NYXRjaCkge1xuICAgICAgY29uc3QgZmVuY2VDaGFycyA9IGdldE1hbmRhdG9yeU5hbWVkR3JvdXAob3Blbk1hdGNoLCAnZmVuY2UnKTtcbiAgICAgIGNvbnN0IGZlbmNlQ2hhciA9IGdldE1hbmRhdG9yeU5hbWVkR3JvdXAob3Blbk1hdGNoLCAnZmVuY2VDaGFyJyk7XG4gICAgICBmbHVzaFByb3NlKCk7XG4gICAgICBjb2RlTGluZXMgPSBbXTtcbiAgICAgIG9wZW5GZW5jZSA9IHtcbiAgICAgICAgY2xvc2VSZTogbmV3IFJlZ0V4cChgXlxcXFxzKlxcXFwke2ZlbmNlQ2hhcn17JHtTdHJpbmcoZmVuY2VDaGFycy5sZW5ndGgpfSx9XFxcXHMqJGApLFxuICAgICAgICBsYW5nOiBnZXRNYW5kYXRvcnlOYW1lZEdyb3VwKG9wZW5NYXRjaCwgJ2xhbmcnKS50cmltKClcbiAgICAgIH07XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgcHJvc2VCdWZmZXIucHVzaChsaW5lKTtcbiAgfVxuICAvLyBBbiB1bmNsb3NlZCBmZW5jZSBydW5zIHRvIHRoZSBlbmQgb2YgdGhlIHRleHQuXG4gIGlmIChvcGVuRmVuY2UpIHtcbiAgICBzZWdtZW50cy5wdXNoKHsgbGFuZzogb3BlbkZlbmNlLmxhbmcsIHRleHQ6IGNvZGVMaW5lcy5qb2luKCdcXG4nKSwgdHlwZTogJ2NvZGUnIH0pO1xuICB9XG4gIGZsdXNoUHJvc2UoKTtcbiAgcmV0dXJuIHNlZ21lbnRzO1xuXG4gIGZ1bmN0aW9uIGZsdXNoUHJvc2UoKTogdm9pZCB7XG4gICAgaWYgKHByb3NlQnVmZmVyLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHNlZ21lbnRzLnB1c2goeyB0ZXh0OiBwcm9zZUJ1ZmZlci5qb2luKCdcXG4nKSwgdHlwZTogJ3Byb3NlJyB9KTtcbiAgICBwcm9zZUJ1ZmZlciA9IFtdO1xuICB9XG59XG5cbi8qKlxuICogU3RyaXAgdGhlIGBpbXBvcnQoXCLigKZcIilgIHF1YWxpZmllcnMgdHMtbW9ycGggcHJpbnRzIGJlZm9yZSBhIHR5cGUgdGhhdCBpcyBub3QgaW4gc2NvcGUsIHJlY29yZGluZyBlYWNoIG9uZSdzXG4gKiBkZWNsYXJhdGlvbiBmaWxlIGZpcnN0LCBzaW5jZSBpdCBpcyB0aGUgb25lIHBsYWNlIGEgcHJpbnRlZCB0eXBlIG5hbWVzIHdoZXJlIGl0IHdhcyBkZWNsYXJlZC5cbiAqXG4gKiBAcGFyYW0gdHlwZVRleHQgLSBUaGUgcHJpbnRlZCB0eXBlLlxuICogQHJldHVybnMgVGhlIHR5cGUgd2l0aG91dCBpdHMgaW1wb3J0IHF1YWxpZmllcnMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzaW1wbGlmeVR5cGUodHlwZVRleHQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIGZvciAoY29uc3QgbWF0Y2ggb2YgdHlwZVRleHQubWF0Y2hBbGwoSU1QT1JUX1RZUEVfUkVHX0VYUCkpIHtcbiAgICByZWdpc3RlclBhY2thZ2VEZWNsYXJhdGlvbihnZXRNYW5kYXRvcnlOYW1lZEdyb3VwKG1hdGNoLCAnTmFtZScpLCBnZXRNYW5kYXRvcnlOYW1lZEdyb3VwKG1hdGNoLCAnUGF0aCcpKTtcbiAgfVxuXG4gIHJldHVybiB0eXBlVGV4dC5yZXBsYWNlQWxsKElNUE9SVF9RVUFMSUZJRVJfUkVHX0VYUCwgJycpO1xufVxuXG4vKipcbiAqIE5vcm1hbGl6ZSBhIGNvZGUgc2lnbmF0dXJlIGZvciB0aGUgYHNpZ25hdHVyZTpgIGZyb250bWF0dGVyIC8gT0cgY2FyZDogY29sbGFwc2Ugd2hpdGVzcGFjZSB0b1xuICogc2luZ2xlIHNwYWNlcyBhbmQgdHJ1bmNhdGUgdG8gYSBjYXJkLWZyaWVuZGx5IGxlbmd0aCB3aXRoIGFuIGVsbGlwc2lzLlxuICpcbiAqIEBwYXJhbSBzaWduYXR1cmUgLSBUaGUgc2lnbmF0dXJlLlxuICogQHJldHVybnMgVGhlIG5vcm1hbGl6ZWQgc2lnbmF0dXJlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdHJ1bmNhdGVTaWduYXR1cmUoc2lnbmF0dXJlOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBjb2xsYXBzZWQgPSBzaWduYXR1cmUucmVwbGFjZUFsbCgvXFxzKy9nLCAnICcpLnRyaW0oKTtcbiAgcmV0dXJuIGNvbGxhcHNlZC5sZW5ndGggPD0gU0lHTkFUVVJFX01BWF9MRU5HVEggPyBjb2xsYXBzZWQgOiBgJHtjb2xsYXBzZWQuc2xpY2UoMCwgU0lHTkFUVVJFX01BWF9MRU5HVEggLSAxKS50cmltRW5kKCl94oCmYDtcbn1cblxuZnVuY3Rpb24gc2x1Z2lmeU1lbWJlck5hbWUobmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgY2xlYW5lZCA9IG5hbWVcbiAgICAucmVwbGFjZUFsbCgvXltcIiddfFtcIiddJC9nLCAnJylcbiAgICAucmVwbGFjZUFsbCgvW15hLXpBLVowLTldL2csICctJylcbiAgICAucmVwbGFjZUFsbCgvLSsvZywgJy0nKVxuICAgIC5yZXBsYWNlQWxsKC9eLXwtJC9nLCAnJyk7XG4gIC8vIEEgbWVtYmVyIGxpdGVyYWxseSBuYW1lZCBgaW5kZXhgIHdvdWxkIHdyaXRlIGBpbmRleC5tZHhgLCBjb2xsaWRpbmcgd2l0aCB0aGUgdHlwZS1vdmVydmlld1xuICAvLyBgaW5kZXgubWR4YCBpbiB0aGUgc2FtZSBkaXJlY3RvcnkgKG9uZSBzaWxlbnRseSBvdmVyd3JpdGVzIHRoZSBvdGhlciwgNDA0LWluZyB0aGUgbG9zZXIpLlxuICByZXR1cm4gY2xlYW5lZCA9PT0gJ2luZGV4JyA/ICdpbmRleC1tZW1iZXInIDogKGNsZWFuZWQgfHwgJ3VubmFtZWQnKTtcbn1cblxuZnVuY3Rpb24gc2x1Z2lmeU92ZXJsb2FkS2V5KG92ZXJsb2FkS2V5OiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBzbHVnID0gb3ZlcmxvYWRLZXlcbiAgICAucmVwbGFjZUFsbCgvW1wiJygpXS9nLCAnICcpXG4gICAgLnJlcGxhY2VBbGwoL1teYS16QS1aMC05XFxzXS9nLCAnJylcbiAgICAudHJpbSgpXG4gICAgLnJlcGxhY2VBbGwoL1xccysvZywgJy0nKTtcbiAgLy8gQSBtZXRob2QgbmFtZWQgYGluZGV4YCB3b3VsZCB3cml0ZSBgaW5kZXgubWR4YCBvdmVyIHRoZSB0eXBlLW92ZXJ2aWV3IHBhZ2UsIGV4YWN0bHkgYXMgYSBwcm9wZXJ0eSB3b3VsZC5cbiAgcmV0dXJuIHNsdWcgPT09ICdpbmRleCcgPyAnaW5kZXgtbWVtYmVyJyA6IHNsdWc7XG59XG5cbmNvbnN0IE9HX0RFU0NSSVBUSU9OX01BWF9MRU5HVEggPSAxNjA7XG5cbi8qKlxuICogU3RyaXAgbWFya2Rvd24gZm9ybWF0dGluZyB0byBwbGFpbiB0ZXh0IGZvciB1c2UgaW4gbWV0YSBkZXNjcmlwdGlvbnNcbiAqXG4gKiBAcGFyYW0gdGV4dCAtIFRoZSB0ZXh0LlxuICogQHJldHVybnMgVGhlIHBsYWluIHRleHQsIGF0IG1vc3QgMTYwIGNoYXJhY3RlcnMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdHJpcE1hcmtkb3duKHRleHQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIC8vIEEgYmFyZSBge0BsaW5rIFRhcmdldH1gIHJlYWRzIGFzIGl0cyB0YXJnZXQsIGFzIGByZXNvbHZlTGlua3NgIHJlbmRlcnMgaXQ7IGRyb3BwaW5nIGl0IGxlYXZlcyBhIGhvbGUgaW4gdGhlIHNlbnRlbmNlLlxuICBjb25zdCBwbGFpbiA9IHJlcGxhY2VSZWdFeHBNYXRjaGVzKFxuICAgIHRleHQsXG4gICAgL1xce0BsaW5rXFxzKyg/PHRhcmdldD5bXnx9XSs/KSg/OlxccypcXHxcXHMqKD88ZGlzcGxheT5bXn1dKz8pKT9cXHMqXFx9L2csXG4gICAgKG1hdGNoKSA9PiBnZXRPcHRpb25hbE5hbWVkR3JvdXAobWF0Y2gsICdkaXNwbGF5JykgPz8gZ2V0TWFuZGF0b3J5TmFtZWRHcm91cChtYXRjaCwgJ3RhcmdldCcpXG4gIClcbiAgICAucmVwbGFjZUFsbCgvXFxbKD88dGV4dD5bXlxcXV0rKVxcXVxcKFteKV0rXFwpL2csICckPHRleHQ+JylcbiAgICAucmVwbGFjZUFsbCgvW2AqX35dL2csICcnKVxuICAgIC5yZXBsYWNlQWxsKC9cXHMrL2csICcgJylcbiAgICAudHJpbSgpO1xuXG4gIGlmIChwbGFpbi5sZW5ndGggPD0gT0dfREVTQ1JJUFRJT05fTUFYX0xFTkdUSCkge1xuICAgIHJldHVybiBwbGFpbjtcbiAgfVxuXG4gIC8vIEN1dCBiYWNrIHRvIGEgd29yZCBib3VuZGFyeTogYSByYXcgc2xpY2UgZW5kcyBkZXNjcmlwdGlvbnMgbWlkLXdvcmQgKGDigKYgdGhlIHN0cmluZyBtb2R1bGUgaXMgb2JgKS5cbiAgLy8gVGhhdCBmcmFnbWVudCBpcyB3aGF0IHJlYWRlcnMgc2VlIG9uIHRoZSBPRyBjYXJkIGFuZCBpbiBzZWFyY2ggcmVzdWx0cy5cbiAgY29uc3QgY2xpcHBlZCA9IHBsYWluLnNsaWNlKDAsIE9HX0RFU0NSSVBUSU9OX01BWF9MRU5HVEggLSAxKTtcbiAgY29uc3QgbGFzdFNwYWNlSW5kZXggPSBjbGlwcGVkLmxhc3RJbmRleE9mKCcgJyk7XG4gIGNvbnN0IHRydW5jYXRlZCA9IGxhc3RTcGFjZUluZGV4ID4gMCA/IGNsaXBwZWQuc2xpY2UoMCwgbGFzdFNwYWNlSW5kZXgpIDogY2xpcHBlZDtcbiAgcmV0dXJuIGAke3RydW5jYXRlZC5yZXBsYWNlKC9bLDs6Llxcc10rJC8sICcnKX3igKZgO1xufVxuXG5mdW5jdGlvbiBlc2NhcGVNZHhQcm9zZUNoYXJzKGNodW5rOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gY2h1bmsucmVwbGFjZUFsbCgvWzx7fV0vZywgKGNoYXIpID0+IGBcXFxcJHtjaGFyfWApO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7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
|
|
@@ -61,6 +61,7 @@ import {
|
|
|
61
61
|
escapeMarkdown,
|
|
62
62
|
escapeMdxAngleBrackets,
|
|
63
63
|
escapeMdxBraces,
|
|
64
|
+
escapeMdxProse,
|
|
64
65
|
escapeYaml,
|
|
65
66
|
getDisplayName,
|
|
66
67
|
getImportStatement,
|
|
@@ -389,8 +390,8 @@ function renderFunctionPage(lines, info, allTypes) {
|
|
|
389
390
|
}
|
|
390
391
|
lines.push("");
|
|
391
392
|
}
|
|
392
|
-
const returnDesc = $function.returnDescription ? ` \u2014 ${
|
|
393
|
-
lines.push(`**Returns:** ${escapeMdxAngleBrackets(renderTypeWithLinks($function.returnType, allTypes, info.name, info.namespace))}${returnDesc}`, "");
|
|
393
|
+
const returnDesc = $function.returnDescription ? ` \u2014 ${escapeMdxProse(resolveLinks($function.returnDescription, allTypes, info.namespace))}` : "";
|
|
394
|
+
lines.push(`**Returns:** ${escapeMdxBraces(escapeMdxAngleBrackets(renderTypeWithLinks($function.returnType, allTypes, info.name, info.namespace)))}${returnDesc}`, "");
|
|
394
395
|
for (const example of $function.examples) {
|
|
395
396
|
lines.push("**Example:**", "", renderExampleMdx(example, allTypes, info.namespace), "");
|
|
396
397
|
}
|
|
@@ -545,4 +546,4 @@ export {
|
|
|
545
546
|
renderVariablePage,
|
|
546
547
|
sidebarTreeToEntries
|
|
547
548
|
};
|
|
548
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9kb2NzLXNpdGUvYXBpLWRvYy1wYWdlLWdlbmVyYXRpb24udHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIE1EWCBwYWdlICsgc2lkZWJhciBlbWlzc2lvbjogcmVuZGVycyBtb2R1bGUgaW5kZXggcGFnZXMsIHBlci10eXBlIG92ZXJ2aWV3IHBhZ2VzLCBwZXItbWVtYmVyIHBhZ2VzLFxuICogYmFja2xpbmtzLCBhbmQgdGhlIFN0YXJsaWdodCBzaWRlYmFyIEpTT04uXG4gKi9cblxuaW1wb3J0IHsgZ2V0TWFuZGF0b3J5TmFtZWRHcm91cCB9IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWxpYi9yZWctZXhwJztcbmltcG9ydCB7IGVuc3VyZU5vbk51bGxhYmxlIH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL3R5cGUtZ3VhcmRzJztcbmltcG9ydCB7IHdyaXRlRmlsZSB9IGZyb20gJ25vZGU6ZnMvcHJvbWlzZXMnO1xuaW1wb3J0IHsgam9pbiB9IGZyb20gJ25vZGU6cGF0aCc7XG5cbmltcG9ydCB0eXBlIHtcbiAgTWVtYmVySW5mbyxcbiAgUGFnZUNvbnRlbnQsXG4gIFBhZ2VGcm9udE1hdHRlcixcbiAgU2lkZWJhckVudHJ5LFxuICBTaWRlYmFyTGluayxcbiAgU2lkZWJhclRyZWVOb2RlLFxuICBUeXBlSW5mb1xufSBmcm9tICcuL2FwaS1kb2MtdHlwZXMudHMnO1xuXG5pbXBvcnQgeyBFVkVOVF9NRVRIT0RTIH0gZnJvbSAnLi9hcGktZG9jLWNvbnN0YW50cy50cyc7XG5pbXBvcnQge1xuICBsaW5rQmFzZVR5cGUsXG4gIG1hcmtkb3duVG9IdG1sLFxuICBtZW1iZXJIcmVmLFxuICByZW5kZXJFeGFtcGxlTWR4LFxuICByZW5kZXJNZHhQcm9zZSxcbiAgcmVuZGVyVHlwZVdpdGhMaW5rcyxcbiAgcmVzb2x2ZUxpbmtzLFxuICB0b1R5cGVGaWxlU2VnbWVudCxcbiAgdG9UeXBlUm91dGVTZWdtZW50LFxuICB0eXBlTGlua1xufSBmcm9tICcuL2FwaS1kb2MtbGluay1yZW5kZXJpbmcudHMnO1xuaW1wb3J0IHsgZ2V0QXBpRG9jU2V0dGluZ3MgfSBmcm9tICcuL2FwaS1kb2Mtc2V0dGluZ3MudHMnO1xuaW1wb3J0IHtcbiAgZW5zdXJlRGlyZWN0b3J5LFxuICBlc2NhcGVKc1N0cmluZyxcbiAgZXNjYXBlSnN4QXR0cmlidXRlLFxuICBlc2NhcGVNYXJrZG93bixcbiAgZXNjYXBlTWR4QW5nbGVCcmFja2V0cyxcbiAgZXNjYXBlTWR4QnJhY2VzLFxuICBlc2NhcGVZYW1sLFxuICBnZXREaXNwbGF5TmFtZSxcbiAgZ2V0SW1wb3J0U3RhdGVtZW50LFxuICBnZXROYW1lc3BhY2VEaXJlY3RvcnksXG4gIG1lbWJlclJvdXRlU2VnbWVudCxcbiAgbWVtYmVyU2x1ZyxcbiAgb3ZlcmxvYWRSb3V0ZVNlZ21lbnQsXG4gIG92ZXJsb2FkU2x1ZyxcbiAgc3RyaXBNYXJrZG93bixcbiAgdHJ1bmNhdGVTaWduYXR1cmVcbn0gZnJvbSAnLi9hcGktZG9jLXRleHQtdXRpbHMudHMnO1xuaW1wb3J0IHsgQVBJX0NPTVBPTkVOVFNfSU1QT1JUX1BSRUZJWCB9IGZyb20gJy4vZG9jcy1zaXRlLWFzc2V0cy50cyc7XG5cbmNvbnN0IEpTT05fSU5ERU5UID0gMjtcblxuLyoqXG4gKiBBcHBlbmQgYmFja2xpbmtzIHRvIG92ZXJ2aWV3IHBhZ2VzIGFuZCB3cml0ZSBhbGwgZmlsZXMuIEtleWVkIGJ5IHF1YWxpZmllZCBgJHtuYW1lc3BhY2V9IyR7bmFtZX1gLlxuICpcbiAqIEBwYXJhbSBwYWdlQ29udGVudHMgLSBFdmVyeSBvdmVydmlldyBwYWdlJ3MgY29udGVudCBhbmQgcGF0aCwga2V5ZWQgYnkgcXVhbGlmaWVkIGlkLlxuICogQHBhcmFtIGFsbFR5cGVzIC0gRXZlcnkgZG9jdW1lbnRlZCB0eXBlLCBrZXllZCBieSBgJHtuYW1lc3BhY2V9IyR7bmFtZX1gLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYXBwZW5kQmFja2xpbmtzQW5kV3JpdGUoXG4gIHBhZ2VDb250ZW50czogTWFwPHN0cmluZywgUGFnZUNvbnRlbnQ+LFxuICBhbGxUeXBlczogTWFwPHN0cmluZywgVHlwZUluZm8+XG4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgYmFja2xpbmtzID0gYnVpbGRCYWNrbGlua3NGcm9tQ29udGVudChwYWdlQ29udGVudHMsIGFsbFR5cGVzKTtcblxuICBmb3IgKGNvbnN0IFtrZXksIHsgY29udGVudCwgZmlsZVBhdGggfV0gb2YgcGFnZUNvbnRlbnRzKSB7XG4gICAgY29uc3QgdHlwZUJhY2tsaW5rcyA9IGJhY2tsaW5rcy5nZXQoa2V5KSA/PyBbXTtcbiAgICBjb25zdCBsaW5lcyA9IFtjb250ZW50XTtcbiAgICBpZiAodHlwZUJhY2tsaW5rcy5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBzb3J0ZWRCYWNrbGlua3MgPSBbLi4udHlwZUJhY2tsaW5rc10uc29ydCgoYSwgYikgPT4gYS5sb2NhbGVDb21wYXJlKGIpKTtcbiAgICAgIGxpbmVzLnB1c2goJycsICctLS0nLCAnJywgJyoqTGlua3MgdG8gdGhpcyBwYWdlOioqJywgJycpO1xuICAgICAgZm9yIChjb25zdCBibEtleSBvZiBzb3J0ZWRCYWNrbGlua3MpIHtcbiAgICAgICAgY29uc3QgYmxJbmZvID0gZW5zdXJlTm9uTnVsbGFibGUoYWxsVHlwZXMuZ2V0KGJsS2V5KSk7XG4gICAgICAgIGNvbnN0IGJsTnNEaXJlY3RvcnkgPSBnZXROYW1lc3BhY2VEaXJlY3RvcnkoYmxJbmZvLm5hbWVzcGFjZSk7XG4gICAgICAgIGxpbmVzLnB1c2goYC0gWyR7YmxJbmZvLm5hbWV9XSgke2dldEFwaURvY1NldHRpbmdzKCkuYmFzZVBhdGh9L2FwaS8ke2JsTnNEaXJlY3Rvcnl9LyR7dG9UeXBlUm91dGVTZWdtZW50KGJsSW5mby5uYW1lc3BhY2UsIGJsSW5mby5uYW1lKX0vKWApO1xuICAgICAgfVxuICAgIH1cbiAgICBhd2FpdCB3cml0ZUZpbGUoZmlsZVBhdGgsIGxpbmVzLmpvaW4oJ1xcbicpLCAndXRmLTgnKTtcbiAgfVxufVxuXG4vKipcbiAqIEJ1aWxkIGJhY2tsaW5rcyBieSBzY2FubmluZyBnZW5lcmF0ZWQgcGFnZSBjb250ZW50IGZvciBpbnRlcm5hbCBBUEkgbGlua3MuIEtleWVkIGJ5IHF1YWxpZmllZCBpZC5cbiAqXG4gKiBAcGFyYW0gcGFnZUNvbnRlbnRzIC0gRXZlcnkgb3ZlcnZpZXcgcGFnZSdzIGNvbnRlbnQgYW5kIHBhdGgsIGtleWVkIGJ5IHF1YWxpZmllZCBpZC5cbiAqIEBwYXJhbSBhbGxUeXBlcyAtIEV2ZXJ5IGRvY3VtZW50ZWQgdHlwZSwga2V5ZWQgYnkgYCR7bmFtZXNwYWNlfSMke25hbWV9YC5cbiAqIEByZXR1cm5zIEVhY2ggcmVmZXJlbmNlZCB0eXBlJ3MgcXVhbGlmaWVkIGlkIG1hcHBlZCB0byB0aGUgaWRzIG9mIHRoZSBwYWdlcyBsaW5raW5nIHRvIGl0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRCYWNrbGlua3NGcm9tQ29udGVudChcbiAgcGFnZUNvbnRlbnRzOiBNYXA8c3RyaW5nLCBQYWdlQ29udGVudD4sXG4gIGFsbFR5cGVzOiBNYXA8c3RyaW5nLCBUeXBlSW5mbz5cbik6IE1hcDxzdHJpbmcsIHN0cmluZ1tdPiB7XG4gIGNvbnN0IGJhY2tsaW5rcyA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmdbXT4oKTtcbiAgLy8gRW1pdHRlZCBVUkxzIGxvd2VyY2FzZSB0aGUgdHlwZSBzZWdtZW50IChzZWUgdG9Sb3V0ZVNlZ21lbnQpLCBzbyBtYXAgZWFjaCBsb3dlcmNhc2VkIHJvdXRlXG4gIC8vIGlkZW50aXR5IGJhY2sgdG8gaXRzIG9yaWdpbmFsIHF1YWxpZmllZCB0eXBlIGtleS5cbiAgY29uc3Qgcm91dGVLZXlUb1R5cGVLZXkgPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nPigpO1xuICBmb3IgKGNvbnN0IFt0eXBlS2V5LCBpbmZvXSBvZiBhbGxUeXBlcykge1xuICAgIHJvdXRlS2V5VG9UeXBlS2V5LnNldChgJHtnZXROYW1lc3BhY2VEaXJlY3RvcnkoaW5mby5uYW1lc3BhY2UpfSMke3RvVHlwZVJvdXRlU2VnbWVudChpbmZvLm5hbWVzcGFjZSwgaW5mby5uYW1lKX1gLCB0eXBlS2V5KTtcbiAgfVxuICBjb25zdCBlc2NhcGVkQmFzZSA9IGdldEFwaURvY1NldHRpbmdzKCkuYmFzZVBhdGgucmVwbGFjZUFsbCgvWy4qKz9eJHt9KCl8W1xcXVxcXFxdL2csIFN0cmluZy5yYXdgXFwkJmApO1xuICBjb25zdCBsaW5rUGF0dGVybiA9IG5ldyBSZWdFeHAoYCR7ZXNjYXBlZEJhc2V9L2FwaS8oPzxwYXRoPig/OlthLXpBLVowLTlfQC1dKy8pKylgLCAnZycpO1xuICBmb3IgKGNvbnN0IFtzb3VyY2VLZXksIHsgY29udGVudCB9XSBvZiBwYWdlQ29udGVudHMpIHtcbiAgICBjb25zdCByZWZlcmVuY2VkID0gbmV3IFNldDxzdHJpbmc+KCk7XG5cbiAgICBmb3IgKGNvbnN0IG1hdGNoIG9mIGNvbnRlbnQubWF0Y2hBbGwobGlua1BhdHRlcm4pKSB7XG4gICAgICAvLyBUaGUgcGF0dGVybiByZXF1aXJlcyBhdCBsZWFzdCBvbmUgc2VnbWVudC5cbiAgICAgIGNvbnN0IHNlZ21lbnRzID0gZ2V0TWFuZGF0b3J5TmFtZWRHcm91cChtYXRjaCwgJ3BhdGgnKS5zcGxpdCgnLycpLmZpbHRlcihCb29sZWFuKTtcbiAgICAgIGNvbnN0IHR5cGVOYW1lID0gZW5zdXJlTm9uTnVsbGFibGUoc2VnbWVudHMuYXQoLTEpKTtcbiAgICAgIGNvbnN0IG5hbWVzcGFjZSA9IHNlZ21lbnRzLnNsaWNlKDAsIC0xKS5qb2luKCcvJyk7XG4gICAgICBjb25zdCByb3V0ZUtleSA9IGAke25hbWVzcGFjZX0jJHt0eXBlTmFtZX1gO1xuICAgICAgY29uc3QgcmVzb2x2ZWRLZXkgPSByb3V0ZUtleVRvVHlwZUtleS5nZXQocm91dGVLZXkpO1xuICAgICAgaWYgKHJlc29sdmVkS2V5ICE9PSB1bmRlZmluZWQgJiYgcmVzb2x2ZWRLZXkgIT09IHNvdXJjZUtleSkge1xuICAgICAgICByZWZlcmVuY2VkLmFkZChyZXNvbHZlZEtleSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCByZWZlcmVuY2Ugb2YgcmVmZXJlbmNlZCkge1xuICAgICAgaWYgKCFiYWNrbGlua3MuaGFzKHJlZmVyZW5jZSkpIHtcbiAgICAgICAgYmFja2xpbmtzLnNldChyZWZlcmVuY2UsIFtdKTtcbiAgICAgIH1cbiAgICAgIGJhY2tsaW5rcy5nZXQocmVmZXJlbmNlKT8ucHVzaChzb3VyY2VLZXkpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBiYWNrbGlua3M7XG59XG5cbi8qKlxuICogQnVpbGRzIHRoZSBuYW1lc3BhY2UgdHJlZSB0aGUgc2lkZWJhciBpcyBnZW5lcmF0ZWQgZnJvbS5cbiAqXG4gKiBAcGFyYW0gdHlwZXMgLSBUaGUgZG9jdW1lbnRlZCB0eXBlcywga2V5ZWQgYnkgcXVhbGlmaWVkIGlkLlxuICogQHJldHVybnMgVGhlIHJvb3Qgb2YgdGhlIHRyZWUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBidWlsZFNpZGViYXJUcmVlKHR5cGVzOiBNYXA8c3RyaW5nLCBUeXBlSW5mbz4pOiBTaWRlYmFyVHJlZU5vZGUge1xuICBjb25zdCByb290OiBTaWRlYmFyVHJlZU5vZGUgPSB7IGNoaWxkcmVuOiBuZXcgTWFwKCksIHR5cGVzOiBbXSB9O1xuICBmb3IgKGNvbnN0IFssIGluZm9dIG9mIHR5cGVzKSB7XG4gICAgY29uc3QgcGFydHMgPSBpbmZvLm5hbWVzcGFjZS5zcGxpdCgnLycpO1xuICAgIGxldCBub2RlID0gcm9vdDtcbiAgICBmb3IgKGNvbnN0IHBhcnQgb2YgcGFydHMpIHtcbiAgICAgIGxldCBjaGlsZCA9IG5vZGUuY2hpbGRyZW4uZ2V0KHBhcnQpO1xuICAgICAgaWYgKCFjaGlsZCkge1xuICAgICAgICBjaGlsZCA9IHsgY2hpbGRyZW46IG5ldyBNYXAoKSwgdHlwZXM6IFtdIH07XG4gICAgICAgIG5vZGUuY2hpbGRyZW4uc2V0KHBhcnQsIGNoaWxkKTtcbiAgICAgIH1cbiAgICAgIG5vZGUgPSBjaGlsZDtcbiAgICB9XG4gICAgbm9kZS50eXBlcy5wdXNoKGluZm8pO1xuICB9XG4gIHJldHVybiByb290O1xufVxuXG4vKipcbiAqIFRoZSByYXcgY29kZSBzaWduYXR1cmUgc2hvd24gb24gYSB0eXBlLW92ZXJ2aWV3IHBhZ2UncyBPRyBjYXJkLCBmb3IgdGhlIGtpbmRzIHRoYXQgcmVuZGVyIGEgc2luZ2xlXG4gKiBzaWduYXR1cmUgbGluZSAoZnVuY3Rpb24gLyB0eXBlIGFsaWFzIC8gdmFyaWFibGUpLiBDbGFzc2VzLCBpbnRlcmZhY2VzIGFuZCBlbnVtcyByZW5kZXIgbWVtYmVyXG4gKiB0YWJsZXMgaW5zdGVhZCwgc28gdGhleSBnZXQgbm8gc2lnbmF0dXJlIGJsb2NrLlxuICpcbiAqIEBwYXJhbSBuYW1lIC0gVGhlIHR5cGUncyBuYW1lLlxuICogQHBhcmFtIGluZm8gLSBUaGUgZG9jdW1lbnRlZCB0eXBlLlxuICogQHJldHVybnMgVGhlIHNpZ25hdHVyZSwgb3IgYHVuZGVmaW5lZGAgZm9yIGEga2luZCB0aGF0IHJlbmRlcnMgbWVtYmVyIHRhYmxlcyBpbnN0ZWFkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY29tcHV0ZU92ZXJ2aWV3U2lnbmF0dXJlKG5hbWU6IHN0cmluZywgaW5mbzogVHlwZUluZm8pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBpZiAoaW5mby5raW5kID09PSAnZnVuY3Rpb24nKSB7XG4gICAgY29uc3QgJGZ1bmN0aW9uID0gaW5mby5tZXRob2RzWzBdO1xuICAgIHJldHVybiAkZnVuY3Rpb24gPyBgZnVuY3Rpb24gJHskZnVuY3Rpb24uc2lnbmF0dXJlfTogJHskZnVuY3Rpb24ucmV0dXJuVHlwZX1gIDogdW5kZWZpbmVkO1xuICB9XG4gIGlmIChpbmZvLmtpbmQgPT09ICd0eXBlJykge1xuICAgIHJldHVybiBgdHlwZSAke2dldERpc3BsYXlOYW1lKGluZm8ubmFtZSwgaW5mbyl9ID0gJHtpbmZvLnR5cGVBbGlhc1RleHQgPz8gJ3Vua25vd24nfWA7XG4gIH1cbiAgcmV0dXJuIGluZm8ua2luZCA9PT0gJ3ZhcmlhYmxlJyA/IGAke2luZm8udmFyaWFibGVLZXl3b3JkID8/ICdsZXQnfSAke25hbWV9OiAke2luZm8udmFyaWFibGVUeXBlID8/ICd1bmtub3duJ31gIDogdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIFdyaXRlcyBvbmUgcGFnZSBwZXIgb3duIHByb3BlcnR5IGFuZCBwZXIgb3duIG1ldGhvZCBvdmVybG9hZCBrZXkgb2YgYSBjbGFzcyBvciBpbnRlcmZhY2UuXG4gKlxuICogQHBhcmFtIG5hbWUgLSBUaGUgdHlwZSdzIG5hbWUuXG4gKiBAcGFyYW0gaW5mbyAtIFRoZSBkb2N1bWVudGVkIHR5cGUuXG4gKiBAcGFyYW0gYWxsVHlwZXMgLSBFdmVyeSBkb2N1bWVudGVkIHR5cGUsIGtleWVkIGJ5IGAke25hbWVzcGFjZX0jJHtuYW1lfWAuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZW5lcmF0ZU1lbWJlclBhZ2VzKG5hbWU6IHN0cmluZywgaW5mbzogVHlwZUluZm8sIGFsbFR5cGVzOiBNYXA8c3RyaW5nLCBUeXBlSW5mbz4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgbnNEaXJlY3RvcnkgPSBnZXROYW1lc3BhY2VEaXJlY3RvcnkoaW5mby5uYW1lc3BhY2UpO1xuICBjb25zdCB0eXBlRmlsZURpcmVjdG9yeSA9IHRvVHlwZUZpbGVTZWdtZW50KGluZm8ubmFtZXNwYWNlLCBuYW1lKTtcbiAgY29uc3QgdHlwZVJvdXRlRGlyZWN0b3J5ID0gdG9UeXBlUm91dGVTZWdtZW50KGluZm8ubmFtZXNwYWNlLCBuYW1lKTtcbiAgY29uc3QgY29tcG9uZW50SW1wb3J0cyA9IGdldENvbXBvbmVudEltcG9ydHMoWydNZW1iZXJEZXRhaWwnXSk7XG5cbiAgLy8gUHJvcGVydHkgcGFnZXMgKHNraXAgaW5oZXJpdGVkIOKAlCB0aGV5IGxpdmUgb24gdGhlIHBhcmVudCB0eXBlKVxuICBjb25zdCBwcm9wZXJ0aWVzID0gaW5mby5wcm9wZXJ0aWVzLmZpbHRlcigocCkgPT4gIXAuaW5oZXJpdGVkRnJvbSk7XG4gIGZvciAoY29uc3QgcHJvcGVydHkgb2YgcHJvcGVydGllcykge1xuICAgIGNvbnN0IGZpbGVQYXRoID0gam9pbihnZXRBcGlEb2NTZXR0aW5ncygpLm91dHB1dERpcmVjdG9yeSwgbnNEaXJlY3RvcnksIHR5cGVGaWxlRGlyZWN0b3J5LCBgJHttZW1iZXJTbHVnKHByb3BlcnR5Lm5hbWUpfS5tZHhgKTtcbiAgICBhd2FpdCBlbnN1cmVEaXJlY3RvcnkoZmlsZVBhdGgpO1xuXG4gICAgY29uc3QgcHJvcGVydHlUaXRsZSA9IGAke25hbWV9LiR7cHJvcGVydHkubmFtZX1gO1xuICAgIGNvbnN0IGxpbmVzOiBzdHJpbmdbXSA9IHJlbmRlckZyb250TWF0dGVyKHtcbiAgICAgIGRlc2NyaXB0aW9uOiBwcm9wZXJ0eS5kZXNjcmlwdGlvbixcbiAgICAgIHNpZGViYXJMYWJlbDogcHJvcGVydHlUaXRsZSxcbiAgICAgIHNpZ25hdHVyZTogYCR7cHJvcGVydHkuc2lnbmF0dXJlfTogJHtwcm9wZXJ0eS50eXBlfWAsXG4gICAgICBzbHVnOiBgYXBpLyR7bnNEaXJlY3Rvcnl9LyR7dHlwZVJvdXRlRGlyZWN0b3J5fS8ke21lbWJlclJvdXRlU2VnbWVudChwcm9wZXJ0eS5uYW1lKX1gLFxuICAgICAgdGl0bGU6IHByb3BlcnR5VGl0bGVcbiAgICB9KTtcbiAgICBsaW5lcy5wdXNoKFxuICAgICAgLi4uY29tcG9uZW50SW1wb3J0cyxcbiAgICAgICcnLFxuICAgICAgLy8gQnJlYWRjcnVtYlxuICAgICAgYFske25hbWV9XSgke2dldEFwaURvY1NldHRpbmdzKCkuYmFzZVBhdGh9L2FwaS8ke25zRGlyZWN0b3J5fS8ke3R5cGVSb3V0ZURpcmVjdG9yeX0vKSDigLogJHtwcm9wZXJ0eS5uYW1lfWAsXG4gICAgICAnJ1xuICAgICk7XG5cbiAgICBjb25zdCBzdGF0aWNBdHRyaWJ1dGUgPSBwcm9wZXJ0eS5pc1N0YXRpYyA/ICcgaXNTdGF0aWM9e3RydWV9JyA6ICcnO1xuICAgIGNvbnN0IHR5cGVBdHRyaWJ1dGUgPSBgIHR5cGU9XCIke2VzY2FwZUpzeEF0dHJpYnV0ZShtYXJrZG93blRvSHRtbChyZW5kZXJUeXBlV2l0aExpbmtzKHByb3BlcnR5LnR5cGUsIGFsbFR5cGVzLCBuYW1lLCBpbmZvLm5hbWVzcGFjZSkpKX1cImA7XG4gICAgY29uc3QgZGVzY0F0dHJpYnV0ZSA9IHByb3BlcnR5LmRlc2NyaXB0aW9uID8gYCBkZXNjcmlwdGlvbj1cIiR7ZXNjYXBlSnN4QXR0cmlidXRlKG1hcmtkb3duVG9IdG1sKHJlc29sdmVMaW5rcyhwcm9wZXJ0eS5kZXNjcmlwdGlvbiwgYWxsVHlwZXMsIGluZm8ubmFtZXNwYWNlKSkpfVwiYCA6ICcnO1xuICAgIGNvbnN0IHJlbWFya3NBdHRyaWJ1dGUgPSBwcm9wZXJ0eS5yZW1hcmtzID8gYCByZW1hcmtzPVwiJHtlc2NhcGVKc3hBdHRyaWJ1dGUobWFya2Rvd25Ub0h0bWwocmVzb2x2ZUxpbmtzKHByb3BlcnR5LnJlbWFya3MsIGFsbFR5cGVzLCBpbmZvLm5hbWVzcGFjZSkpKX1cImAgOiAnJztcbiAgICBjb25zdCBzaW5jZUF0dHJpYnV0ZSA9IHByb3BlcnR5LnNpbmNlID8gYCBzaW5jZT1cIiR7ZXNjYXBlSnN4QXR0cmlidXRlKHByb3BlcnR5LnNpbmNlKX1cImAgOiAnJztcbiAgICBjb25zdCBleGFtcGxlc0F0dHJpYnV0ZSA9IHByb3BlcnR5LmV4YW1wbGVzLmxlbmd0aCA+IDAgPyBgIGV4YW1wbGVzPXske0pTT04uc3RyaW5naWZ5KHByb3BlcnR5LmV4YW1wbGVzKX19YCA6ICcnO1xuXG4gICAgbGluZXMucHVzaChgPE1lbWJlckRldGFpbCR7c3RhdGljQXR0cmlidXRlfSR7dHlwZUF0dHJpYnV0ZX0ke2Rlc2NBdHRyaWJ1dGV9JHtyZW1hcmtzQXR0cmlidXRlfSR7c2luY2VBdHRyaWJ1dGV9JHtleGFtcGxlc0F0dHJpYnV0ZX0gLz5gLCAnJyk7XG5cbiAgICBhd2FpdCB3cml0ZUZpbGUoZmlsZVBhdGgsIGxpbmVzLmpvaW4oJ1xcbicpLCAndXRmLTgnKTtcbiAgfVxuXG4gIC8vIE1ldGhvZCBwYWdlcyDigJQgZWFjaCBvdmVybG9hZCBrZXkgZ2V0cyBpdHMgb3duIHBhZ2UgKHNraXAgaW5oZXJpdGVkKVxuICBjb25zdCBtZXRob2RzID0gaW5mby5tZXRob2RzLmZpbHRlcigobSkgPT4gIW0uaW5oZXJpdGVkRnJvbSk7XG4gIGNvbnN0IG92ZXJsb2FkR3JvdXBzID0gbmV3IE1hcDxzdHJpbmcsIE1lbWJlckluZm9bXT4oKTtcbiAgZm9yIChjb25zdCBtZXRob2Qgb2YgbWV0aG9kcykge1xuICAgIGNvbnN0IGtleSA9IG1ldGhvZC5vdmVybG9hZEtleTtcbiAgICBpZiAoIW92ZXJsb2FkR3JvdXBzLmhhcyhrZXkpKSB7XG4gICAgICBvdmVybG9hZEdyb3Vwcy5zZXQoa2V5LCBbXSk7XG4gICAgfVxuICAgIG92ZXJsb2FkR3JvdXBzLmdldChrZXkpPy5wdXNoKG1ldGhvZCk7XG4gIH1cblxuICBmb3IgKGNvbnN0IFtvdmVybG9hZEtleSwgb3ZlcmxvYWRzXSBvZiBvdmVybG9hZEdyb3Vwcykge1xuICAgIGNvbnN0IGZpbGVTbHVnID0gb3ZlcmxvYWRTbHVnKG92ZXJsb2FkS2V5KTtcbiAgICBjb25zdCBmaWxlUGF0aCA9IGpvaW4oZ2V0QXBpRG9jU2V0dGluZ3MoKS5vdXRwdXREaXJlY3RvcnksIG5zRGlyZWN0b3J5LCB0eXBlRmlsZURpcmVjdG9yeSwgYCR7ZmlsZVNsdWd9Lm1keGApO1xuICAgIGF3YWl0IGVuc3VyZURpcmVjdG9yeShmaWxlUGF0aCk7XG5cbiAgICBjb25zdCBkaXNwbGF5TmFtZSA9IGAke25hbWV9LiR7b3ZlcmxvYWRLZXl9IG1ldGhvZGA7XG4gICAgLy8gQSBncm91cCBpcyBjcmVhdGVkIGJ5IGl0cyBmaXJzdCBvdmVybG9hZC5cbiAgICBjb25zdCBmaXJzdE92ZXJsb2FkID0gZW5zdXJlTm9uTnVsbGFibGUob3ZlcmxvYWRzWzBdKTtcblxuICAgIGNvbnN0IGxpbmVzOiBzdHJpbmdbXSA9IHJlbmRlckZyb250TWF0dGVyKHtcbiAgICAgIGRlc2NyaXB0aW9uOiBmaXJzdE92ZXJsb2FkLmRlc2NyaXB0aW9uLFxuICAgICAgc2lkZWJhckxhYmVsOiBgJHtuYW1lfS4ke292ZXJsb2FkS2V5fWAsXG4gICAgICBzaWduYXR1cmU6IGAke2ZpcnN0T3ZlcmxvYWQuc2lnbmF0dXJlfTogJHtmaXJzdE92ZXJsb2FkLnJldHVyblR5cGV9YCxcbiAgICAgIHNsdWc6IGBhcGkvJHtuc0RpcmVjdG9yeX0vJHt0eXBlUm91dGVEaXJlY3Rvcnl9LyR7b3ZlcmxvYWRSb3V0ZVNlZ21lbnQob3ZlcmxvYWRLZXkpfWAsXG4gICAgICB0aXRsZTogZGlzcGxheU5hbWVcbiAgICB9KTtcbiAgICBsaW5lcy5wdXNoKFxuICAgICAgLi4uY29tcG9uZW50SW1wb3J0cyxcbiAgICAgICcnLFxuICAgICAgLy8gQnJlYWRjcnVtYlxuICAgICAgYFske25hbWV9XSgke2dldEFwaURvY1NldHRpbmdzKCkuYmFzZVBhdGh9L2FwaS8ke25zRGlyZWN0b3J5fS8ke3R5cGVSb3V0ZURpcmVjdG9yeX0vKSDigLogJHtvdmVybG9hZEtleX1gLFxuICAgICAgJydcbiAgICApO1xuXG4gICAgZm9yIChjb25zdCBvdmVybG9hZCBvZiBvdmVybG9hZHMpIHtcbiAgICAgIHJlbmRlck1ldGhvZE92ZXJsb2FkTWR4KGxpbmVzLCBvdmVybG9hZCwgbmFtZSwgaW5mby5uYW1lc3BhY2UsIGFsbFR5cGVzKTtcbiAgICAgIGlmIChvdmVybG9hZHMubGVuZ3RoID4gMSkge1xuICAgICAgICBsaW5lcy5wdXNoKCctLS0nLCAnJyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgYXdhaXQgd3JpdGVGaWxlKGZpbGVQYXRoLCBsaW5lcy5qb2luKCdcXG4nKSwgJ3V0Zi04Jyk7XG4gIH1cbn1cblxuLyoqXG4gKiBXcml0ZXMgZWFjaCBtb2R1bGUncyBpbmRleCBwYWdlIGFuZCB0aGUgcm9vdCBBUEkgaW5kZXguXG4gKlxuICogQHBhcmFtIHR5cGVzIC0gVGhlIGRvY3VtZW50ZWQgdHlwZXMsIGtleWVkIGJ5IHF1YWxpZmllZCBpZC5cbiAqIEBwYXJhbSBhbGxUeXBlcyAtIEV2ZXJ5IGRvY3VtZW50ZWQgdHlwZSwga2V5ZWQgYnkgYCR7bmFtZXNwYWNlfSMke25hbWV9YC5cbiAqIEBwYXJhbSBtb2R1bGVPdmVydmlld3MgLSBFYWNoIG5hbWVzcGFjZSdzIGBAZmlsZWAgb3ZlcnZpZXcuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZW5lcmF0ZU5hbWVzcGFjZUluZGV4UGFnZXMoXG4gIHR5cGVzOiBNYXA8c3RyaW5nLCBUeXBlSW5mbz4sXG4gIGFsbFR5cGVzOiBNYXA8c3RyaW5nLCBUeXBlSW5mbz4sXG4gIG1vZHVsZU92ZXJ2aWV3czogTWFwPHN0cmluZywgc3RyaW5nPlxuKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IG5hbWVzcGFjZXMgPSBuZXcgTWFwPHN0cmluZywgVHlwZUluZm9bXT4oKTtcbiAgZm9yIChjb25zdCBbLCBpbmZvXSBvZiB0eXBlcykge1xuICAgIGlmICghbmFtZXNwYWNlcy5oYXMoaW5mby5uYW1lc3BhY2UpKSB7XG4gICAgICBuYW1lc3BhY2VzLnNldChpbmZvLm5hbWVzcGFjZSwgW10pO1xuICAgIH1cbiAgICBuYW1lc3BhY2VzLmdldChpbmZvLm5hbWVzcGFjZSk/LnB1c2goaW5mbyk7XG4gIH1cblxuICBmb3IgKGNvbnN0IFtuYW1lc3BhY2UsIG5zVHlwZXNdIG9mIG5hbWVzcGFjZXMpIHtcbiAgICBjb25zdCBuc0RpcmVjdG9yeSA9IGdldE5hbWVzcGFjZURpcmVjdG9yeShuYW1lc3BhY2UpO1xuICAgIGNvbnN0IGZpbGVQYXRoID0gam9pbihnZXRBcGlEb2NTZXR0aW5ncygpLm91dHB1dERpcmVjdG9yeSwgbnNEaXJlY3RvcnksICdpbmRleC5tZHgnKTtcbiAgICBhd2FpdCBlbnN1cmVEaXJlY3RvcnkoZmlsZVBhdGgpO1xuXG4gICAgLy8gVGhlIG1vZHVsZSdzIGBAZmlsZWAgdGV4dCBkb3VibGVzIGFzIGl0cyBkZXNjcmlwdGlvbi5cbiAgICAvLyBXaXRob3V0IGl0IHRoZSBtb2R1bGUgY2FyZCB3YXMgdGl0bGUtb25seSB3aGlsZSBldmVyeSBtZW1iZXIgY2FyZCB1bmRlciBpdCBjYXJyaWVkIG9uZS5cbiAgICBjb25zdCBvdmVydmlldyA9IG1vZHVsZU92ZXJ2aWV3cy5nZXQobmFtZXNwYWNlKTtcbiAgICBjb25zdCBsaW5lczogc3RyaW5nW10gPSByZW5kZXJGcm9udE1hdHRlcih7XG4gICAgICBkZXNjcmlwdGlvbjogb3ZlcnZpZXcsXG4gICAgICBzaWRlYmFyTGFiZWw6IG5hbWVzcGFjZSxcbiAgICAgIHNsdWc6IGBhcGkvJHtuc0RpcmVjdG9yeX1gLFxuICAgICAgdGl0bGU6IG5hbWVzcGFjZVxuICAgIH0pO1xuXG4gICAgLy8gTW9kdWxlIEBmaWxlIG92ZXJ2aWV3IHRleHRcbiAgICBpZiAob3ZlcnZpZXcpIHtcbiAgICAgIGxpbmVzLnB1c2gocmVuZGVyTWR4UHJvc2Uob3ZlcnZpZXcsIGFsbFR5cGVzLCBuYW1lc3BhY2UpLCAnJyk7XG4gICAgfVxuXG4gICAgcmVuZGVyTmFtZXNwYWNlVGFibGUobGluZXMsICdDbGFzc2VzJywgJ0NsYXNzJywgbnNUeXBlcy5maWx0ZXIoKHQpID0+IHQua2luZCA9PT0gJ2NsYXNzJyksIGFsbFR5cGVzLCBuYW1lc3BhY2UpO1xuICAgIHJlbmRlck5hbWVzcGFjZVRhYmxlKGxpbmVzLCAnSW50ZXJmYWNlcycsICdJbnRlcmZhY2UnLCBuc1R5cGVzLmZpbHRlcigodCkgPT4gdC5raW5kID09PSAnaW50ZXJmYWNlJyksIGFsbFR5cGVzLCBuYW1lc3BhY2UpO1xuICAgIHJlbmRlck5hbWVzcGFjZVRhYmxlKGxpbmVzLCAnRnVuY3Rpb25zJywgJ0Z1bmN0aW9uJywgbnNUeXBlcy5maWx0ZXIoKHQpID0+IHQua2luZCA9PT0gJ2Z1bmN0aW9uJyksIGFsbFR5cGVzLCBuYW1lc3BhY2UpO1xuICAgIHJlbmRlck5hbWVzcGFjZVRhYmxlKGxpbmVzLCAnVHlwZXMnLCAnVHlwZScsIG5zVHlwZXMuZmlsdGVyKCh0KSA9PiB0LmtpbmQgPT09ICd0eXBlJyksIGFsbFR5cGVzLCBuYW1lc3BhY2UpO1xuICAgIHJlbmRlck5hbWVzcGFjZVRhYmxlKGxpbmVzLCAnRW51bXMnLCAnRW51bScsIG5zVHlwZXMuZmlsdGVyKCh0KSA9PiB0LmtpbmQgPT09ICdlbnVtJyksIGFsbFR5cGVzLCBuYW1lc3BhY2UpO1xuICAgIHJlbmRlck5hbWVzcGFjZVRhYmxlKGxpbmVzLCAnVmFyaWFibGVzJywgJ1ZhcmlhYmxlJywgbnNUeXBlcy5maWx0ZXIoKHQpID0+IHQua2luZCA9PT0gJ3ZhcmlhYmxlJyksIGFsbFR5cGVzLCBuYW1lc3BhY2UpO1xuXG4gICAgYXdhaXQgd3JpdGVGaWxlKGZpbGVQYXRoLCBsaW5lcy5qb2luKCdcXG4nKSwgJ3V0Zi04Jyk7XG4gIH1cblxuICAvLyBSb290IEFQSSBpbmRleCBwYWdlIGxpc3RpbmcgZXZlcnkgbW9kdWxlLlxuICBjb25zdCBzb3J0ZWROYW1lc3BhY2VzID0gWy4uLm5hbWVzcGFjZXMua2V5cygpXS5zb3J0KChhLCBiKSA9PiBhLmxvY2FsZUNvbXBhcmUoYikpO1xuICBjb25zdCBhcGlJbmRleEludHJvID0gZ2V0QXBpSW5kZXhJbnRybyhzb3J0ZWROYW1lc3BhY2VzKTtcbiAgY29uc3Qgcm9vdExpbmVzOiBzdHJpbmdbXSA9IHJlbmRlckZyb250TWF0dGVyKHtcbiAgICBkZXNjcmlwdGlvbjogYXBpSW5kZXhJbnRybyxcbiAgICBzaWRlYmFyTGFiZWw6ICdPdmVydmlldycsXG4gICAgc2x1ZzogJ2FwaScsXG4gICAgdGl0bGU6ICdBUEkgcmVmZXJlbmNlJ1xuICB9KTtcbiAgcm9vdExpbmVzLnB1c2goYXBpSW5kZXhJbnRybywgJycsICcjIyBNb2R1bGVzJywgJycpO1xuICBmb3IgKGNvbnN0IG5hbWVzcGFjZSBvZiBzb3J0ZWROYW1lc3BhY2VzKSB7XG4gICAgcm9vdExpbmVzLnB1c2goYC0gWyR7bmFtZXNwYWNlfV0oJHtnZXRBcGlEb2NTZXR0aW5ncygpLmJhc2VQYXRofS9hcGkvJHtnZXROYW1lc3BhY2VEaXJlY3RvcnkobmFtZXNwYWNlKX0vKWApO1xuICB9XG4gIHJvb3RMaW5lcy5wdXNoKCcnKTtcbiAgY29uc3Qgcm9vdEZpbGVQYXRoID0gam9pbihnZXRBcGlEb2NTZXR0aW5ncygpLm91dHB1dERpcmVjdG9yeSwgJ2luZGV4Lm1keCcpO1xuICBhd2FpdCBlbnN1cmVEaXJlY3Rvcnkocm9vdEZpbGVQYXRoKTtcbiAgYXdhaXQgd3JpdGVGaWxlKHJvb3RGaWxlUGF0aCwgcm9vdExpbmVzLmpvaW4oJ1xcbicpLCAndXRmLTgnKTtcbn1cblxuLyoqXG4gKiBSZW5kZXJzIGEgdHlwZSdzIG92ZXJ2aWV3IHBhZ2UuXG4gKlxuICogQHBhcmFtIG5hbWUgLSBUaGUgdHlwZSdzIG5hbWUuXG4gKiBAcGFyYW0gaW5mbyAtIFRoZSBkb2N1bWVudGVkIHR5cGUuXG4gKiBAcGFyYW0gYWxsVHlwZXMgLSBFdmVyeSBkb2N1bWVudGVkIHR5cGUsIGtleWVkIGJ5IGAke25hbWVzcGFjZX0jJHtuYW1lfWAuXG4gKiBAcmV0dXJucyBUaGUgcGFnZSdzIGNvbnRlbnQsIGJlZm9yZSBiYWNrbGlua3MsIGFuZCB0aGUgcGF0aCBpdCBpcyB3cml0dGVuIHRvLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2VuZXJhdGVPdmVydmlld1BhZ2UobmFtZTogc3RyaW5nLCBpbmZvOiBUeXBlSW5mbywgYWxsVHlwZXM6IE1hcDxzdHJpbmcsIFR5cGVJbmZvPik6IFByb21pc2U8UGFnZUNvbnRlbnQ+IHtcbiAgY29uc3QgbnNEaXJlY3RvcnkgPSBnZXROYW1lc3BhY2VEaXJlY3RvcnkoaW5mby5uYW1lc3BhY2UpO1xuICBjb25zdCB0eXBlRmlsZVNsdWcgPSB0b1R5cGVGaWxlU2VnbWVudChpbmZvLm5hbWVzcGFjZSwgbmFtZSk7XG4gIGNvbnN0IHR5cGVSb3V0ZVNsdWcgPSB0b1R5cGVSb3V0ZVNlZ21lbnQoaW5mby5uYW1lc3BhY2UsIG5hbWUpO1xuICBjb25zdCBmaWxlUGF0aCA9IGpvaW4oZ2V0QXBpRG9jU2V0dGluZ3MoKS5vdXRwdXREaXJlY3RvcnksIG5zRGlyZWN0b3J5LCB0eXBlRmlsZVNsdWcsICdpbmRleC5tZHgnKTtcbiAgYXdhaXQgZW5zdXJlRGlyZWN0b3J5KGZpbGVQYXRoKTtcblxuICAvLyBGcm9udG1hdHRlclxuICBjb25zdCBkaXNwbGF5TmFtZSA9IGdldERpc3BsYXlOYW1lKG5hbWUsIGluZm8pO1xuICBjb25zdCBsaW5lczogc3RyaW5nW10gPSByZW5kZXJGcm9udE1hdHRlcih7XG4gICAgZGVzY3JpcHRpb246IGluZm8uZGVzY3JpcHRpb24sXG4gICAgc2lkZWJhckxhYmVsOiBkaXNwbGF5TmFtZSxcbiAgICBzaWduYXR1cmU6IGNvbXB1dGVPdmVydmlld1NpZ25hdHVyZShuYW1lLCBpbmZvKSxcbiAgICBzbHVnOiBgYXBpLyR7bnNEaXJlY3Rvcnl9LyR7dHlwZVJvdXRlU2x1Z31gLFxuICAgIHRpdGxlOiBkaXNwbGF5TmFtZVxuICB9KTtcblxuICAvLyBDb21wb25lbnQgaW1wb3J0cyDigJQgY29tcHV0ZSByZWxhdGl2ZSBwYXRoIGZyb20gZ2VuZXJhdGVkIHBhZ2UgdG8gY29tcG9uZW50c1xuICBsaW5lcy5wdXNoKC4uLmdldENvbXBvbmVudEltcG9ydHMoWydDb25zdHJ1Y3RvckJsb2NrJywgJ0ltcG9ydFN0YXRlbWVudCcsICdNZXRob2RUYWJsZScsICdQcm9wZXJ0eVRhYmxlJywgJ1R5cGVTaWduYXR1cmUnXSksICcnKTtcblxuICAvLyBEZXNjcmlwdGlvblxuICBpZiAoaW5mby5kZXNjcmlwdGlvbikge1xuICAgIGxpbmVzLnB1c2gocmVuZGVyTWR4UHJvc2UoaW5mby5kZXNjcmlwdGlvbiwgYWxsVHlwZXMsIGluZm8ubmFtZXNwYWNlKSwgJycpO1xuICB9XG5cbiAgLy8gUmVtYXJrc1xuICBpZiAoaW5mby5yZW1hcmtzKSB7XG4gICAgY29uc3QgcmVtYXJrc0Jsb2NrID0gcmVuZGVyTWR4UHJvc2UoaW5mby5yZW1hcmtzLCBhbGxUeXBlcywgaW5mby5uYW1lc3BhY2UpO1xuICAgIGxpbmVzLnB1c2gocmVtYXJrc0Jsb2NrLnNwbGl0KCdcXG4nKS5tYXAoKGxpbmUpID0+IChsaW5lLmxlbmd0aCA+IDAgPyBgPiAke2xpbmV9YCA6ICc+JykpLmpvaW4oJ1xcbicpLCAnJyk7XG4gIH1cblxuICAvLyBJbXBvcnQgc3RhdGVtZW50XG4gIGxpbmVzLnB1c2goYDxJbXBvcnRTdGF0ZW1lbnQgdGV4dD1cIiR7ZXNjYXBlSnN4QXR0cmlidXRlKGdldEltcG9ydFN0YXRlbWVudChpbmZvKSl9XCIgLz5gLCAnJyk7XG5cbiAgLy8gRXhhbXBsZXNcbiAgZm9yIChjb25zdCBleGFtcGxlIG9mIGluZm8uZXhhbXBsZXMpIHtcbiAgICBsaW5lcy5wdXNoKCcqKkV4YW1wbGU6KionLCAnJywgcmVuZGVyRXhhbXBsZU1keChleGFtcGxlLCBhbGxUeXBlcywgaW5mby5uYW1lc3BhY2UpLCAnJyk7XG4gIH1cblxuICAvLyBGdW5jdGlvbnMgcmVuZGVyIGxpa2UgbWV0aG9kIGRldGFpbCBwYWdlcyDigJQgc2lnbmF0dXJlLCBwYXJhbXMsIHJldHVybnNcbiAgaWYgKGluZm8ua2luZCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJlbmRlckZ1bmN0aW9uUGFnZShsaW5lcywgaW5mbywgYWxsVHlwZXMpO1xuICAgIHJldHVybiB7IGNvbnRlbnQ6IGxpbmVzLmpvaW4oJ1xcbicpLCBmaWxlUGF0aCB9O1xuICB9XG5cbiAgLy8gVmFyaWFibGVzIHJlbmRlciB3aXRoIGRlY2xhcmF0aW9uIGtleXdvcmQgYW5kIHR5cGVcbiAgaWYgKGluZm8ua2luZCA9PT0gJ3ZhcmlhYmxlJykge1xuICAgIHJlbmRlclZhcmlhYmxlUGFnZShsaW5lcywgbmFtZSwgaW5mbywgYWxsVHlwZXMpO1xuICAgIHJldHVybiB7IGNvbnRlbnQ6IGxpbmVzLmpvaW4oJ1xcbicpLCBmaWxlUGF0aCB9O1xuICB9XG5cbiAgLy8gRW51bXMgcmVuZGVyIHRoZWlyIG1lbWJlcnMgbGlzdFxuICBpZiAoaW5mby5raW5kID09PSAnZW51bScpIHtcbiAgICByZW5kZXJFbnVtUGFnZShsaW5lcywgaW5mbywgYWxsVHlwZXMpO1xuICAgIHJldHVybiB7IGNvbnRlbnQ6IGxpbmVzLmpvaW4oJ1xcbicpLCBmaWxlUGF0aCB9O1xuICB9XG5cbiAgLy8gVHlwZSBhbGlhc2VzIHJlbmRlciB0aGVpciByaWdodC1oYW5kLXNpZGUgc2lnbmF0dXJlXG4gIGlmIChpbmZvLmtpbmQgPT09ICd0eXBlJykge1xuICAgIHJlbmRlclR5cGVBbGlhc1BhZ2UobGluZXMsIGluZm8sIGFsbFR5cGVzKTtcbiAgICByZXR1cm4geyBjb250ZW50OiBsaW5lcy5qb2luKCdcXG4nKSwgZmlsZVBhdGggfTtcbiAgfVxuXG4gIC8vIENsYXNzZXMgLyBpbnRlcmZhY2VzOiBzaWduYXR1cmUgKyBleHRlbmRzL2ltcGxlbWVudHMgKyBjb25zdHJ1Y3RvciArIG1lbWJlciB0YWJsZXNcbiAgY29uc3QgdHlwZVBhcmFtc0F0dHJpYnV0ZSA9IGluZm8udHlwZVBhcmFtZXRlcnMubGVuZ3RoID4gMCA/IGAgdHlwZVBhcmFtcz17JHtKU09OLnN0cmluZ2lmeShpbmZvLnR5cGVQYXJhbWV0ZXJzKX19YCA6ICcnO1xuICBjb25zdCBleHRlbmRzQXR0cmlidXRlID0gaW5mby5iYXNlVHlwZXMubGVuZ3RoID4gMCA/IGAgZXh0ZW5kcz17JHtKU09OLnN0cmluZ2lmeShpbmZvLmJhc2VUeXBlcyl9fWAgOiAnJztcbiAgY29uc3QgaW1wbGVtZW50c0F0dHJpYnV0ZSA9IGluZm8uaW1wbGVtZW50c1R5cGVzLmxlbmd0aCA+IDAgPyBgIGltcGxlbWVudHM9eyR7SlNPTi5zdHJpbmdpZnkoaW5mby5pbXBsZW1lbnRzVHlwZXMpfX1gIDogJyc7XG4gIGxpbmVzLnB1c2goYDxUeXBlU2lnbmF0dXJlIGtpbmQ9XCIke2luZm8ua2luZH1cIiBuYW1lPVwiJHtuYW1lfVwiJHt0eXBlUGFyYW1zQXR0cmlidXRlfSR7ZXh0ZW5kc0F0dHJpYnV0ZX0ke2ltcGxlbWVudHNBdHRyaWJ1dGV9IC8+YCwgJycpO1xuXG4gIGlmIChpbmZvLmJhc2VUeXBlcy5sZW5ndGggPiAwKSB7XG4gICAgY29uc3QgbGlua2VkVHlwZXMgPSBpbmZvLmJhc2VUeXBlcy5tYXAoKHQpID0+IGxpbmtCYXNlVHlwZSh0LCBhbGxUeXBlcywgaW5mby5uYW1lc3BhY2UpKTtcbiAgICBsaW5lcy5wdXNoKGAqKkV4dGVuZHM6KiogJHtsaW5rZWRUeXBlcy5qb2luKCcsICcpfWAsICcnKTtcbiAgfVxuXG4gIGlmIChpbmZvLmltcGxlbWVudHNUeXBlcy5sZW5ndGggPiAwKSB7XG4gICAgY29uc3QgbGlua2VkVHlwZXMgPSBpbmZvLmltcGxlbWVudHNUeXBlcy5tYXAoKHQpID0+IGxpbmtCYXNlVHlwZSh0LCBhbGxUeXBlcywgaW5mby5uYW1lc3BhY2UpKTtcbiAgICBsaW5lcy5wdXNoKGAqKkltcGxlbWVudHM6KiogJHtsaW5rZWRUeXBlcy5qb2luKCcsICcpfWAsICcnKTtcbiAgfVxuXG4gIHJlbmRlckNvbnN0cnVjdG9yTWR4KGxpbmVzLCBuYW1lLCBpbmZvLCBhbGxUeXBlcyk7XG4gIHJlbmRlclByb3BlcnR5VGFibGVNZHgobGluZXMsIGluZm8sIGFsbFR5cGVzKTtcbiAgcmVuZGVyTWV0aG9kVGFibGVNZHgobGluZXMsIGluZm8sIGFsbFR5cGVzKTtcblxuICByZXR1cm4geyBjb250ZW50OiBsaW5lcy5qb2luKCdcXG4nKSwgZmlsZVBhdGggfTtcbn1cblxuLyoqXG4gKiBXcml0ZXMgdGhlIFN0YXJsaWdodCBzaWRlYmFyIG9mIHRoZSBBUEkgcmVmZXJlbmNlLlxuICpcbiAqIEBwYXJhbSB0eXBlcyAtIFRoZSBkb2N1bWVudGVkIHR5cGVzLCBrZXllZCBieSBxdWFsaWZpZWQgaWQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZW5lcmF0ZVNpZGViYXJKc29uKHR5cGVzOiBNYXA8c3RyaW5nLCBUeXBlSW5mbz4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3Qgcm9vdCA9IGJ1aWxkU2lkZWJhclRyZWUodHlwZXMpO1xuXG4gIGNvbnN0IGdyb3VwczogU2lkZWJhckVudHJ5W10gPSBbXTtcbiAgY29uc3QgdG9wTGV2ZWxzID0gWy4uLnJvb3QuY2hpbGRyZW5dLnNvcnQoKFthXSwgW2JdKSA9PiBhLmxvY2FsZUNvbXBhcmUoYikpO1xuICBmb3IgKGNvbnN0IFt0b3BMZXZlbCwgY2hpbGRdIG9mIHRvcExldmVscykge1xuICAgIGdyb3Vwcy5wdXNoKHNpZGViYXJUcmVlVG9FbnRyaWVzKGNoaWxkLCB0b3BMZXZlbCkpO1xuICB9XG5cbiAgY29uc3Qgd3JhcHBlZFNpZGViYXI6IFNpZGViYXJFbnRyeVtdID0gW3tcbiAgICBjb2xsYXBzZWQ6IGZhbHNlLFxuICAgIGl0ZW1zOiBncm91cHMsXG4gICAgbGFiZWw6ICdBUEkgcmVmZXJlbmNlJ1xuICB9XTtcblxuICBhd2FpdCB3cml0ZUZpbGUoZ2V0QXBpRG9jU2V0dGluZ3MoKS5zaWRlYmFyRmlsZSwgSlNPTi5zdHJpbmdpZnkod3JhcHBlZFNpZGViYXIsIG51bGwsIEpTT05fSU5ERU5UKSwgJ3V0Zi04Jyk7XG4gIGNvbnNvbGUud2FybihgR2VuZXJhdGVkIHNpZGViYXIgd2l0aCAke1N0cmluZyhncm91cHMubGVuZ3RoKX0gdG9wLWxldmVsIG1vZHVsZSBncm91cHNgKTtcbn1cblxuLyoqXG4gKiBSZW5kZXJzIGEgY2xhc3MncyBjb25zdHJ1Y3RvciBibG9jay5cbiAqXG4gKiBAcGFyYW0gbGluZXMgLSBUaGUgcGFnZSBsaW5lcyB0byBhcHBlbmQgdG8uXG4gKiBAcGFyYW0gbmFtZSAtIFRoZSB0eXBlJ3MgbmFtZS5cbiAqIEBwYXJhbSBpbmZvIC0gVGhlIGRvY3VtZW50ZWQgdHlwZS5cbiAqIEBwYXJhbSBhbGxUeXBlcyAtIEV2ZXJ5IGRvY3VtZW50ZWQgdHlwZSwga2V5ZWQgYnkgYCR7bmFtZXNwYWNlfSMke25hbWV9YC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbmRlckNvbnN0cnVjdG9yTWR4KGxpbmVzOiBzdHJpbmdbXSwgbmFtZTogc3RyaW5nLCBpbmZvOiBUeXBlSW5mbywgYWxsVHlwZXM6IE1hcDxzdHJpbmcsIFR5cGVJbmZvPik6IHZvaWQge1xuICBjb25zdCBjb25zdHJ1Y3RvciA9IGluZm8uY29uc3RydWN0b3JJbmZvO1xuICBpZiAoIWNvbnN0cnVjdG9yKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGNvbnN0IGN0b3JTaWcgPSBgbmV3ICR7bmFtZX0ke2NvbnN0cnVjdG9yLnNpZ25hdHVyZX1gO1xuICBjb25zdCBjdG9yRGVzYyA9IGNvbnN0cnVjdG9yLmRlc2NyaXB0aW9uXG4gICAgPyBgIGRlc2NyaXB0aW9uPVwiJHtlc2NhcGVKc3hBdHRyaWJ1dGUobWFya2Rvd25Ub0h0bWwocmVzb2x2ZUxpbmtzKGNvbnN0cnVjdG9yLmRlc2NyaXB0aW9uLCBhbGxUeXBlcywgaW5mby5uYW1lc3BhY2UpKSl9XCJgXG4gICAgOiAnJztcbiAgbGluZXMucHVzaChgPENvbnN0cnVjdG9yQmxvY2sgc2lnbmF0dXJlPVwiJHtlc2NhcGVKc3hBdHRyaWJ1dGUoY3RvclNpZyl9XCIke2N0b3JEZXNjfSAvPmAsICcnKTtcbn1cblxuLyoqXG4gKiBSZW5kZXJzIGFuIGVudW0ncyBtZW1iZXJzLlxuICpcbiAqIEBwYXJhbSBsaW5lcyAtIFRoZSBwYWdlIGxpbmVzIHRvIGFwcGVuZCB0by5cbiAqIEBwYXJhbSBpbmZvIC0gVGhlIGRvY3VtZW50ZWQgdHlwZS5cbiAqIEBwYXJhbSBhbGxUeXBlcyAtIEV2ZXJ5IGRvY3VtZW50ZWQgdHlwZSwga2V5ZWQgYnkgYCR7bmFtZXNwYWNlfSMke25hbWV9YC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbmRlckVudW1QYWdlKGxpbmVzOiBzdHJpbmdbXSwgaW5mbzogVHlwZUluZm8sIGFsbFR5cGVzOiBNYXA8c3RyaW5nLCBUeXBlSW5mbz4pOiB2b2lkIHtcbiAgbGluZXMucHVzaChgPFR5cGVTaWduYXR1cmUga2luZD1cImVudW1cIiBuYW1lPVwiJHtpbmZvLm5hbWV9XCIgLz5gLCAnJyk7XG5cbiAgaWYgKGluZm8uZW51bU1lbWJlcnMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgbGluZXMucHVzaCgnKipNZW1iZXJzOioqJywgJycsICd8IE1lbWJlciB8IFZhbHVlIHwgRGVzY3JpcHRpb24gfCcsICd8IDotLSB8IDotLSB8IDotLSB8Jyk7XG4gIGZvciAoY29uc3QgbWVtYmVyIG9mIGluZm8uZW51bU1lbWJlcnMpIHtcbiAgICBjb25zdCB2YWx1ZSA9IG1lbWJlci52YWx1ZSA/IGBcXGAke2VzY2FwZU1hcmtkb3duKG1lbWJlci52YWx1ZSl9XFxgYCA6ICcnO1xuICAgIGxpbmVzLnB1c2goYHwgXFxgJHttZW1iZXIubmFtZX1cXGAgfCAke3ZhbHVlfSB8ICR7ZXNjYXBlTWFya2Rvd24ocmVzb2x2ZUxpbmtzKG1lbWJlci5kZXNjcmlwdGlvbiwgYWxsVHlwZXMsIGluZm8ubmFtZXNwYWNlKSl9IHxgKTtcbiAgfVxuICBsaW5lcy5wdXNoKCcnKTtcbn1cblxuLyoqXG4gKiBSZW5kZXIgdGhlIFN0YXJsaWdodCBmcm9udG1hdHRlciBibG9jayAodGhyb3VnaCB0aGUgY2xvc2luZyBgLS0tYCBhbmQgaXRzIGJsYW5rIGxpbmUpIHNoYXJlZCBieSBldmVyeVxuICogZ2VuZXJhdGVkIHBhZ2Uga2luZDogbW9kdWxlIGluZGV4LCB0eXBlIG92ZXJ2aWV3LCBwcm9wZXJ0eSwgYW5kIG1ldGhvZC5cbiAqXG4gKiBFdmVyeSBwYWdlIGtpbmQgZ29lcyB0aHJvdWdoIGhlcmUgc28gbm8gZmllbGQgY2FuIGJlIGVtaXR0ZWQgb24gc29tZSBraW5kcyBhbmQgc2lsZW50bHkgZHJvcHBlZCBvblxuICogb3RoZXJzLiBgZGVzY3JpcHRpb25gIGluIHBhcnRpY3VsYXIgaXMgbm90IGp1c3QgU0VPIG1ldGFkYXRhIOKAlCBpdCBpcyB0aGUgbGluZSB0aGUgT0cgY2FyZCByZW5kZXJzIHVuZGVyXG4gKiB0aGUgdGl0bGUsIHNvIGEgcGFnZSBraW5kIHRoYXQgc2tpcHBlZCBpdCBwcm9kdWNlZCBhIHRpdGxlLW9ubHkgY2FyZCBuZXh0IHRvIGZ1bGx5IHBvcHVsYXRlZCBvbmVzLlxuICpcbiAqIEBwYXJhbSBmcm9udE1hdHRlciAtIFRoZSBwYWdlJ3MgZnJvbnRtYXR0ZXIgZmllbGRzLlxuICogQHJldHVybnMgVGhlIGZyb250bWF0dGVyIGxpbmVzLCB0aHJvdWdoIHRoZSBjbG9zaW5nIGAtLS1gIGFuZCBpdHMgYmxhbmsgbGluZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbmRlckZyb250TWF0dGVyKGZyb250TWF0dGVyOiBQYWdlRnJvbnRNYXR0ZXIpOiBzdHJpbmdbXSB7XG4gIHJldHVybiBbXG4gICAgJy0tLScsXG4gICAgYHRpdGxlOiBcIiR7ZXNjYXBlWWFtbChmcm9udE1hdHRlci50aXRsZSl9XCJgLFxuICAgIGBzbHVnOiBcIiR7ZnJvbnRNYXR0ZXIuc2x1Z31cImAsXG4gICAgLi4uKGZyb250TWF0dGVyLmRlc2NyaXB0aW9uID8gW2BkZXNjcmlwdGlvbjogXCIke2VzY2FwZVlhbWwoc3RyaXBNYXJrZG93bihmcm9udE1hdHRlci5kZXNjcmlwdGlvbikpfVwiYF0gOiBbXSksXG4gICAgLi4uKGZyb250TWF0dGVyLnNpZ25hdHVyZSA/IFtgc2lnbmF0dXJlOiBcIiR7ZXNjYXBlWWFtbCh0cnVuY2F0ZVNpZ25hdHVyZShmcm9udE1hdHRlci5zaWduYXR1cmUpKX1cImBdIDogW10pLFxuICAgICdlZGl0VXJsOiBmYWxzZScsXG4gICAgJ3NpZGViYXI6JyxcbiAgICBgICBsYWJlbDogXCIke2VzY2FwZVlhbWwoZnJvbnRNYXR0ZXIuc2lkZWJhckxhYmVsKX1cImAsXG4gICAgJy0tLScsXG4gICAgJydcbiAgXTtcbn1cblxuLyoqXG4gKiBSZW5kZXJzIGEgZnVuY3Rpb24ncyBzaWduYXR1cmUsIHBhcmFtZXRlcnMsIHJldHVybiB2YWx1ZSBhbmQgZXhhbXBsZXMuXG4gKlxuICogQHBhcmFtIGxpbmVzIC0gVGhlIHBhZ2UgbGluZXMgdG8gYXBwZW5kIHRvLlxuICogQHBhcmFtIGluZm8gLSBUaGUgZG9jdW1lbnRlZCB0eXBlLlxuICogQHBhcmFtIGFsbFR5cGVzIC0gRXZlcnkgZG9jdW1lbnRlZCB0eXBlLCBrZXllZCBieSBgJHtuYW1lc3BhY2V9IyR7bmFtZX1gLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVuZGVyRnVuY3Rpb25QYWdlKGxpbmVzOiBzdHJpbmdbXSwgaW5mbzogVHlwZUluZm8sIGFsbFR5cGVzOiBNYXA8c3RyaW5nLCBUeXBlSW5mbz4pOiB2b2lkIHtcbiAgY29uc3QgJGZ1bmN0aW9uID0gaW5mby5tZXRob2RzWzBdO1xuICBpZiAoISRmdW5jdGlvbikge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGxpbmVzLnB1c2goJyoqU2lnbmF0dXJlOioqJywgJycsICdgYGB0cycsIGBmdW5jdGlvbiAkeyRmdW5jdGlvbi5zaWduYXR1cmV9OiAkeyRmdW5jdGlvbi5yZXR1cm5UeXBlfWAsICdgYGAnLCAnJyk7XG5cbiAgaWYgKCRmdW5jdGlvbi5wYXJhbWV0ZXJzLmxlbmd0aCA+IDApIHtcbiAgICBsaW5lcy5wdXNoKCcqKlBhcmFtZXRlcnM6KionLCAnJywgJ3wgUGFyYW1ldGVyIHwgVHlwZSB8IERlc2NyaXB0aW9uIHwnLCAnfCA6LS0gfCA6LS0gfCA6LS0gfCcpO1xuICAgIGZvciAoY29uc3QgcGFyYW1ldGVyIG9mICRmdW5jdGlvbi5wYXJhbWV0ZXJzKSB7XG4gICAgICBsaW5lcy5wdXNoKFxuICAgICAgICBgfCBcXGAke3BhcmFtZXRlci5uYW1lfVxcYCB8ICR7ZXNjYXBlTWFya2Rvd24oZXNjYXBlTWR4QW5nbGVCcmFja2V0cyhyZW5kZXJUeXBlV2l0aExpbmtzKHBhcmFtZXRlci50eXBlLCBhbGxUeXBlcywgaW5mby5uYW1lLCBpbmZvLm5hbWVzcGFjZSkpKX0gfCAke2VzY2FwZU1hcmtkb3duKHJlc29sdmVMaW5rcyhwYXJhbWV0ZXIuZGVzY3JpcHRpb24sIGFsbFR5cGVzLCBpbmZvLm5hbWVzcGFjZSkpfSB8YFxuICAgICAgKTtcbiAgICB9XG4gICAgbGluZXMucHVzaCgnJyk7XG4gIH1cblxuICBjb25zdCByZXR1cm5EZXNjID0gJGZ1bmN0aW9uLnJldHVybkRlc2NyaXB0aW9uID8gYCDigJQgJHtlc2NhcGVNZHhBbmdsZUJyYWNrZXRzKHJlc29sdmVMaW5rcygkZnVuY3Rpb24ucmV0dXJuRGVzY3JpcHRpb24sIGFsbFR5cGVzLCBpbmZvLm5hbWVzcGFjZSkpfWAgOiAnJztcbiAgbGluZXMucHVzaChgKipSZXR1cm5zOioqICR7ZXNjYXBlTWR4QW5nbGVCcmFja2V0cyhyZW5kZXJUeXBlV2l0aExpbmtzKCRmdW5jdGlvbi5yZXR1cm5UeXBlLCBhbGxUeXBlcywgaW5mby5uYW1lLCBpbmZvLm5hbWVzcGFjZSkpfSR7cmV0dXJuRGVzY31gLCAnJyk7XG5cbiAgZm9yIChjb25zdCBleGFtcGxlIG9mICRmdW5jdGlvbi5leGFtcGxlcykge1xuICAgIGxpbmVzLnB1c2goJyoqRXhhbXBsZToqKicsICcnLCByZW5kZXJFeGFtcGxlTWR4KGV4YW1wbGUsIGFsbFR5cGVzLCBpbmZvLm5hbWVzcGFjZSksICcnKTtcbiAgfVxufVxuXG4vKipcbiAqIFJlbmRlcnMgb25lIG1ldGhvZCBvdmVybG9hZC5cbiAqXG4gKiBAcGFyYW0gbGluZXMgLSBUaGUgcGFnZSBsaW5lcyB0byBhcHBlbmQgdG8uXG4gKiBAcGFyYW0gb3ZlcmxvYWQgLSBUaGUgb3ZlcmxvYWQuXG4gKiBAcGFyYW0gdHlwZU5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgdHlwZSB0aGUgbWV0aG9kIGJlbG9uZ3MgdG8uXG4gKiBAcGFyYW0gbmFtZXNwYWNlIC0gVGhlIG5hbWVzcGFjZSBvZiB0aGUgdHlwZSB0aGUgbWV0aG9kIGJlbG9uZ3MgdG8uXG4gKiBAcGFyYW0gYWxsVHlwZXMgLSBFdmVyeSBkb2N1bWVudGVkIHR5cGUsIGtleWVkIGJ5IGAke25hbWVzcGFjZX0jJHtuYW1lfWAuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZW5kZXJNZXRob2RPdmVybG9hZE1keChsaW5lczogc3RyaW5nW10sIG92ZXJsb2FkOiBNZW1iZXJJbmZvLCB0eXBlTmFtZTogc3RyaW5nLCBuYW1lc3BhY2U6IHN0cmluZywgYWxsVHlwZXM6IE1hcDxzdHJpbmcsIFR5cGVJbmZvPik6IHZvaWQge1xuICBjb25zdCBzaWcgPSBgJHtvdmVybG9hZC5zaWduYXR1cmV9OiAke292ZXJsb2FkLnJldHVyblR5cGV9YDtcbiAgY29uc3Qgc3RhdGljQXR0cmlidXRlID0gb3ZlcmxvYWQuaXNTdGF0aWMgPyAnIGlzU3RhdGljPXt0cnVlfScgOiAnJztcbiAgY29uc3QgZGVzY0F0dHJpYnV0ZSA9IG92ZXJsb2FkLmRlc2NyaXB0aW9uID8gYCBkZXNjcmlwdGlvbj1cIiR7ZXNjYXBlSnN4QXR0cmlidXRlKG1hcmtkb3duVG9IdG1sKHJlc29sdmVMaW5rcyhvdmVybG9hZC5kZXNjcmlwdGlvbiwgYWxsVHlwZXMsIG5hbWVzcGFjZSkpKX1cImAgOiAnJztcbiAgY29uc3QgcmVtYXJrc0F0dHJpYnV0ZSA9IG92ZXJsb2FkLnJlbWFya3MgPyBgIHJlbWFya3M9XCIke2VzY2FwZUpzeEF0dHJpYnV0ZShtYXJrZG93blRvSHRtbChyZXNvbHZlTGlua3Mob3ZlcmxvYWQucmVtYXJrcywgYWxsVHlwZXMsIG5hbWVzcGFjZSkpKX1cImAgOiAnJztcbiAgY29uc3Qgc2luY2VBdHRyaWJ1dGUgPSBvdmVybG9hZC5zaW5jZSA/IGAgc2luY2U9XCIke2VzY2FwZUpzeEF0dHJpYnV0ZShvdmVybG9hZC5zaW5jZSl9XCJgIDogJyc7XG4gIGNvbnN0IHJldHVyblR5cGVBdHRyaWJ1dGUgPSBgIHJldHVyblR5cGU9XCIke2VzY2FwZUpzeEF0dHJpYnV0ZShtYXJrZG93blRvSHRtbChyZW5kZXJUeXBlV2l0aExpbmtzKG92ZXJsb2FkLnJldHVyblR5cGUsIGFsbFR5cGVzLCB0eXBlTmFtZSwgbmFtZXNwYWNlKSkpfVwiYDtcbiAgY29uc3QgcmV0dXJuRGVzY0F0dHJpYnV0ZSA9IG92ZXJsb2FkLnJldHVybkRlc2NyaXB0aW9uXG4gICAgPyBgIHJldHVybkRlc2NyaXB0aW9uPVwiJHtlc2NhcGVKc3hBdHRyaWJ1dGUobWFya2Rvd25Ub0h0bWwocmVzb2x2ZUxpbmtzKG92ZXJsb2FkLnJldHVybkRlc2NyaXB0aW9uLCBhbGxUeXBlcywgbmFtZXNwYWNlKSkpfVwiYFxuICAgIDogJyc7XG4gIGNvbnN0IGV4YW1wbGVzQXR0cmlidXRlID0gb3ZlcmxvYWQuZXhhbXBsZXMubGVuZ3RoID4gMCA/IGAgZXhhbXBsZXM9eyR7SlNPTi5zdHJpbmdpZnkob3ZlcmxvYWQuZXhhbXBsZXMpfX1gIDogJyc7XG5cbiAgY29uc3QgcGFyYW1zID0gb3ZlcmxvYWQucGFyYW1ldGVycy5tYXAoKHApID0+ICh7XG4gICAgZGVzY3JpcHRpb246IG1hcmtkb3duVG9IdG1sKHAuZGVzY3JpcHRpb24gfHwgKHAubmFtZS5lbmRzV2l0aCgnPycpID8gJyooT3B0aW9uYWwpKicgOiAnJykpLFxuICAgIG5hbWU6IHAubmFtZSxcbiAgICB0eXBlOiBtYXJrZG93blRvSHRtbChyZW5kZXJUeXBlV2l0aExpbmtzKHAudHlwZSwgYWxsVHlwZXMsIHR5cGVOYW1lLCBuYW1lc3BhY2UpKVxuICB9KSk7XG4gIGNvbnN0IHBhcmFtc0F0dHJpYnV0ZSA9IHBhcmFtcy5sZW5ndGggPiAwID8gYCBwYXJhbWV0ZXJzPXske0pTT04uc3RyaW5naWZ5KHBhcmFtcyl9fWAgOiAnJztcblxuICBsaW5lcy5wdXNoKFxuICAgIGA8TWVtYmVyRGV0YWlsJHtzdGF0aWNBdHRyaWJ1dGV9IHNpZ25hdHVyZT1cIiR7ZXNjYXBlSnN4QXR0cmlidXRlKHNpZyl9XCIke2Rlc2NBdHRyaWJ1dGV9JHtyZW1hcmtzQXR0cmlidXRlfSR7c2luY2VBdHRyaWJ1dGV9JHtyZXR1cm5UeXBlQXR0cmlidXRlfSR7cmV0dXJuRGVzY0F0dHJpYnV0ZX0ke3BhcmFtc0F0dHJpYnV0ZX0ke2V4YW1wbGVzQXR0cmlidXRlfSAvPmAsXG4gICAgJydcbiAgKTtcbn1cblxuLyoqXG4gKiBSZW5kZXJzIGEgdHlwZSdzIG1ldGhvZCB0YWJsZS5cbiAqXG4gKiBAcGFyYW0gbGluZXMgLSBUaGUgcGFnZSBsaW5lcyB0byBhcHBlbmQgdG8uXG4gKiBAcGFyYW0gaW5mbyAtIFRoZSBkb2N1bWVudGVkIHR5cGUuXG4gKiBAcGFyYW0gYWxsVHlwZXMgLSBFdmVyeSBkb2N1bWVudGVkIHR5cGUsIGtleWVkIGJ5IGAke25hbWVzcGFjZX0jJHtuYW1lfWAuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZW5kZXJNZXRob2RUYWJsZU1keChsaW5lczogc3RyaW5nW10sIGluZm86IFR5cGVJbmZvLCBhbGxUeXBlczogTWFwPHN0cmluZywgVHlwZUluZm8+KTogdm9pZCB7XG4gIGNvbnN0IG1ldGhvZHMgPSBbLi4uaW5mby5tZXRob2RzXS5zb3J0KChhLCBiKSA9PiB7XG4gICAgaWYgKGEuaXNTdGF0aWMgIT09IGIuaXNTdGF0aWMpIHtcbiAgICAgIHJldHVybiBhLmlzU3RhdGljID8gMSA6IC0xO1xuICAgIH1cbiAgICByZXR1cm4gYS5uYW1lLmxvY2FsZUNvbXBhcmUoYi5uYW1lKTtcbiAgfSk7XG4gIGlmIChtZXRob2RzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybjtcbiAgfVxuICBsaW5lcy5wdXNoKCc8TWV0aG9kVGFibGUgcm93cz17WycpO1xuICBmb3IgKGNvbnN0IG1ldGhvZCBvZiBtZXRob2RzKSB7XG4gICAgY29uc3QgZGVzYyA9IGVzY2FwZUpzU3RyaW5nKG1hcmtkb3duVG9IdG1sKHJlc29sdmVMaW5rcyhtZXRob2QuZGVzY3JpcHRpb24sIGFsbFR5cGVzLCBpbmZvLm5hbWVzcGFjZSkpKTtcbiAgICBjb25zdCBzdGF0aWNQcmVmaXggPSBtZXRob2QuaXNTdGF0aWMgPyAnc3RhdGljICcgOiAnJztcbiAgICBjb25zdCBzaG9ydFBhcmFtcyA9IG1ldGhvZC5wYXJhbWV0ZXJzLm1hcCgocCwgaW5kZXgpID0+IHtcbiAgICAgIHJldHVybiBpbmRleCA9PT0gMCAmJiBFVkVOVF9NRVRIT0RTLmhhcyhtZXRob2QubmFtZSkgJiYgKHAudHlwZS5zdGFydHNXaXRoKCdcIicpIHx8IHAudHlwZS5zdGFydHNXaXRoKCdcXCcnKSkgPyBwLnR5cGUucmVwbGFjZUFsbCgnXCInLCAnXFwnJykgOiBwLm5hbWU7XG4gICAgfSkuam9pbignLCAnKTtcbiAgICBjb25zdCBzaG9ydFNpZyA9IGAke3N0YXRpY1ByZWZpeH0ke21ldGhvZC5uYW1lfSgke3Nob3J0UGFyYW1zfSlgO1xuICAgIGNvbnN0IHNpZyA9IGVzY2FwZUpzU3RyaW5nKHNob3J0U2lnKTtcbiAgICBjb25zdCBzbHVnID0gb3ZlcmxvYWRSb3V0ZVNlZ21lbnQobWV0aG9kLm92ZXJsb2FkS2V5KTtcbiAgICBjb25zdCByZXR1cm5UeXBlID0gbWFya2Rvd25Ub0h0bWwocmVuZGVyVHlwZVdpdGhMaW5rcyhtZXRob2QucmV0dXJuVHlwZSwgYWxsVHlwZXMsIGluZm8ubmFtZSwgaW5mby5uYW1lc3BhY2UpKTtcbiAgICBjb25zdCBpbmhlcml0ZWRBdHRyaWJ1dGUgPSBtZXRob2QuaW5oZXJpdGVkRnJvbVxuICAgICAgPyBgLCBpbmhlcml0ZWRGcm9tOiBcIiR7ZXNjYXBlSnNTdHJpbmcobWFya2Rvd25Ub0h0bWwodHlwZUxpbmsobWV0aG9kLmluaGVyaXRlZEZyb20sIGFsbFR5cGVzLCBpbmZvLm5hbWVzcGFjZSkpKX1cImBcbiAgICAgIDogJyc7XG4gICAgY29uc3QgaHJlZiA9IG1lbWJlckhyZWYoc2x1ZywgbWV0aG9kLmluaGVyaXRlZEZyb20sIGFsbFR5cGVzLCBpbmZvLm5hbWVzcGFjZSk7XG4gICAgbGluZXMucHVzaChcbiAgICAgIGAgIHsgc2lnbmF0dXJlOiBcIiR7c2lnfVwiLCBocmVmOiBcIiR7ZXNjYXBlSnNTdHJpbmcoaHJlZil9XCIsIHJldHVybnM6IFwiJHtlc2NhcGVKc1N0cmluZyhyZXR1cm5UeXBlKX1cIiwgZGVzY3JpcHRpb246IFwiJHtkZXNjfVwiJHtpbmhlcml0ZWRBdHRyaWJ1dGV9IH0sYFxuICAgICk7XG4gIH1cbiAgbGluZXMucHVzaCgnXX0gLz4nLCAnJyk7XG59XG5cbi8qKlxuICogUmVuZGVycyBhIHR5cGUncyBwcm9wZXJ0eSB0YWJsZS5cbiAqXG4gKiBAcGFyYW0gbGluZXMgLSBUaGUgcGFnZSBsaW5lcyB0byBhcHBlbmQgdG8uXG4gKiBAcGFyYW0gaW5mbyAtIFRoZSBkb2N1bWVudGVkIHR5cGUuXG4gKiBAcGFyYW0gYWxsVHlwZXMgLSBFdmVyeSBkb2N1bWVudGVkIHR5cGUsIGtleWVkIGJ5IGAke25hbWVzcGFjZX0jJHtuYW1lfWAuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZW5kZXJQcm9wZXJ0eVRhYmxlTWR4KGxpbmVzOiBzdHJpbmdbXSwgaW5mbzogVHlwZUluZm8sIGFsbFR5cGVzOiBNYXA8c3RyaW5nLCBUeXBlSW5mbz4pOiB2b2lkIHtcbiAgY29uc3QgcHJvcGVydGllcyA9IGluZm8ucHJvcGVydGllcztcbiAgaWYgKHByb3BlcnRpZXMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGxpbmVzLnB1c2goJzxQcm9wZXJ0eVRhYmxlIHJvd3M9e1snKTtcbiAgZm9yIChjb25zdCBwcm9wZXJ0eSBvZiBwcm9wZXJ0aWVzKSB7XG4gICAgY29uc3QgZGVzYyA9IGVzY2FwZUpzU3RyaW5nKG1hcmtkb3duVG9IdG1sKHJlc29sdmVMaW5rcyhwcm9wZXJ0eS5kZXNjcmlwdGlvbiwgYWxsVHlwZXMsIGluZm8ubmFtZXNwYWNlKSkpO1xuICAgIGNvbnN0IHR5cGUgPSBtYXJrZG93blRvSHRtbChyZW5kZXJUeXBlV2l0aExpbmtzKHByb3BlcnR5LnR5cGUsIGFsbFR5cGVzLCBpbmZvLm5hbWUsIGluZm8ubmFtZXNwYWNlKSk7XG4gICAgY29uc3QgaW5oZXJpdGVkQXR0cmlidXRlID0gcHJvcGVydHkuaW5oZXJpdGVkRnJvbVxuICAgICAgPyBgLCBpbmhlcml0ZWRGcm9tOiBcIiR7ZXNjYXBlSnNTdHJpbmcobWFya2Rvd25Ub0h0bWwodHlwZUxpbmsocHJvcGVydHkuaW5oZXJpdGVkRnJvbSwgYWxsVHlwZXMsIGluZm8ubmFtZXNwYWNlKSkpfVwiYFxuICAgICAgOiAnJztcbiAgICBjb25zdCBocmVmID0gbWVtYmVySHJlZihtZW1iZXJSb3V0ZVNlZ21lbnQocHJvcGVydHkubmFtZSksIHByb3BlcnR5LmluaGVyaXRlZEZyb20sIGFsbFR5cGVzLCBpbmZvLm5hbWVzcGFjZSk7XG4gICAgbGluZXMucHVzaChcbiAgICAgIGAgIHsgbmFtZTogXCIke2VzY2FwZUpzU3RyaW5nKHByb3BlcnR5Lm5hbWUpfVwiLCBocmVmOiBcIiR7ZXNjYXBlSnNTdHJpbmcoaHJlZil9XCIsIHR5cGU6IFwiJHtlc2NhcGVKc1N0cmluZyh0eXBlKX1cIiwgZGVzY3JpcHRpb246IFwiJHtkZXNjfVwiJHtpbmhlcml0ZWRBdHRyaWJ1dGV9IH0sYFxuICAgICk7XG4gIH1cbiAgbGluZXMucHVzaCgnXX0gLz4nLCAnJyk7XG59XG5cbi8qKlxuICogUmVuZGVycyBhIHR5cGUgYWxpYXMncyBzaWduYXR1cmUuXG4gKlxuICogQHBhcmFtIGxpbmVzIC0gVGhlIHBhZ2UgbGluZXMgdG8gYXBwZW5kIHRvLlxuICogQHBhcmFtIGluZm8gLSBUaGUgZG9jdW1lbnRlZCB0eXBlLlxuICogQHBhcmFtIGFsbFR5cGVzIC0gRXZlcnkgZG9jdW1lbnRlZCB0eXBlLCBrZXllZCBieSBgJHtuYW1lc3BhY2V9IyR7bmFtZX1gLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVuZGVyVHlwZUFsaWFzUGFnZShsaW5lczogc3RyaW5nW10sIGluZm86IFR5cGVJbmZvLCBhbGxUeXBlczogTWFwPHN0cmluZywgVHlwZUluZm8+KTogdm9pZCB7XG4gIGNvbnN0IHR5cGVQYXJhbXNBdHRyaWJ1dGUgPSBpbmZvLnR5cGVQYXJhbWV0ZXJzLmxlbmd0aCA+IDAgPyBgIHR5cGVQYXJhbXM9eyR7SlNPTi5zdHJpbmdpZnkoaW5mby50eXBlUGFyYW1ldGVycyl9fWAgOiAnJztcbiAgbGluZXMucHVzaChgPFR5cGVTaWduYXR1cmUga2luZD1cInR5cGVcIiBuYW1lPVwiJHtpbmZvLm5hbWV9XCIke3R5cGVQYXJhbXNBdHRyaWJ1dGV9IC8+YCwgJycpO1xuXG4gIGNvbnN0IHJocyA9IGluZm8udHlwZUFsaWFzVGV4dCA/PyAndW5rbm93bic7XG4gIGxpbmVzLnB1c2goXG4gICAgJyoqU2lnbmF0dXJlOioqJyxcbiAgICAnJyxcbiAgICAnYGBgdHMnLFxuICAgIGB0eXBlICR7Z2V0RGlzcGxheU5hbWUoaW5mby5uYW1lLCBpbmZvKX0gPSAke3Joc31gLFxuICAgICdgYGAnLFxuICAgICcnLFxuICAgIGAqKlR5cGU6KiogJHtlc2NhcGVNZHhCcmFjZXMoZXNjYXBlTWR4QW5nbGVCcmFja2V0cyhyZW5kZXJUeXBlV2l0aExpbmtzKHJocywgYWxsVHlwZXMsIGluZm8ubmFtZSwgaW5mby5uYW1lc3BhY2UpKSl9YCxcbiAgICAnJ1xuICApO1xufVxuXG4vKipcbiAqIFJlbmRlcnMgYSB2YXJpYWJsZSdzIGRlY2xhcmF0aW9uIGFuZCB0eXBlLlxuICpcbiAqIEBwYXJhbSBsaW5lcyAtIFRoZSBwYWdlIGxpbmVzIHRvIGFwcGVuZCB0by5cbiAqIEBwYXJhbSBuYW1lIC0gVGhlIHR5cGUncyBuYW1lLlxuICogQHBhcmFtIGluZm8gLSBUaGUgZG9jdW1lbnRlZCB0eXBlLlxuICogQHBhcmFtIGFsbFR5cGVzIC0gRXZlcnkgZG9jdW1lbnRlZCB0eXBlLCBrZXllZCBieSBgJHtuYW1lc3BhY2V9IyR7bmFtZX1gLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVuZGVyVmFyaWFibGVQYWdlKGxpbmVzOiBzdHJpbmdbXSwgbmFtZTogc3RyaW5nLCBpbmZvOiBUeXBlSW5mbywgYWxsVHlwZXM6IE1hcDxzdHJpbmcsIFR5cGVJbmZvPik6IHZvaWQge1xuICBjb25zdCBrZXl3b3JkID0gaW5mby52YXJpYWJsZUtleXdvcmQgPz8gJ2xldCc7XG4gIGNvbnN0IHZhcmlhYmxlVHlwZSA9IGluZm8udmFyaWFibGVUeXBlID8/ICd1bmtub3duJztcbiAgbGluZXMucHVzaChcbiAgICAnKipTaWduYXR1cmU6KionLFxuICAgICcnLFxuICAgICdgYGB0cycsXG4gICAgYCR7a2V5d29yZH0gJHtuYW1lfTogJHt2YXJpYWJsZVR5cGV9YCxcbiAgICAnYGBgJyxcbiAgICAnJyxcbiAgICBgKipUeXBlOioqICR7ZXNjYXBlTWR4QnJhY2VzKGVzY2FwZU1keEFuZ2xlQnJhY2tldHMocmVuZGVyVHlwZVdpdGhMaW5rcyh2YXJpYWJsZVR5cGUsIGFsbFR5cGVzLCBuYW1lLCBpbmZvLm5hbWVzcGFjZSkpKX1gLFxuICAgICcnXG4gICk7XG59XG5cbi8qKlxuICogQ29udmVydHMgYSBuYW1lc3BhY2UgdHJlZSBub2RlIGludG8gYSBzaWRlYmFyIGdyb3VwLlxuICpcbiAqIEBwYXJhbSBub2RlIC0gVGhlIG5vZGUuXG4gKiBAcGFyYW0gbGFiZWwgLSBUaGUgZ3JvdXAncyBsYWJlbC5cbiAqIEByZXR1cm5zIFRoZSBzaWRlYmFyIGdyb3VwLlxuICovXG5leHBvcnQgZnVuY3Rpb24gc2lkZWJhclRyZWVUb0VudHJpZXMobm9kZTogU2lkZWJhclRyZWVOb2RlLCBsYWJlbDogc3RyaW5nKTogU2lkZWJhckVudHJ5IHtcbiAgY29uc3QgaXRlbXM6IChTaWRlYmFyRW50cnkgfCBTaWRlYmFyTGluaylbXSA9IFtdO1xuXG4gIC8vIENoaWxkIGRpcmVjdG9yeSBncm91cHMgZmlyc3QgKGJlZm9yZSB0aGlzIG1vZHVsZSdzIG93biBwYWdlcylcbiAgY29uc3Qgc29ydGVkQ2hpbGRyZW4gPSBbLi4ubm9kZS5jaGlsZHJlbl0uc29ydCgoW2FdLCBbYl0pID0+IGEubG9jYWxlQ29tcGFyZShiKSk7XG4gIGZvciAoY29uc3QgW2NoaWxkTmFtZSwgY2hpbGRdIG9mIHNvcnRlZENoaWxkcmVuKSB7XG4gICAgaXRlbXMucHVzaChzaWRlYmFyVHJlZVRvRW50cmllcyhjaGlsZCwgY2hpbGROYW1lKSk7XG4gIH1cblxuICAvLyBUaGlzIG1vZHVsZSdzIG93biBvdmVydmlldyBwYWdlICsgdHlwZS9mdW5jdGlvbiBwYWdlcyAoaW5kaXZpZHVhbCBtZW1iZXJzIGFyZSBub3QgbGlzdGVkKS5cbiAgLy8gU2lkZWJhciBgbGlua2AgZmllbGRzIG11c3QgTk9UIGVtYmVkIEJBU0VfUEFUSDogU3RhcmxpZ2h0IHByZXBlbmRzIHRoZSBjb25maWcgYGJhc2VgIHRvIGV2ZXJ5XG4gIC8vIHNpZGViYXIgbGluayBpdHNlbGYsIHNvIGluY2x1ZGluZyBpdCBoZXJlIHdvdWxkIGRvdWJsZSB0aGUgYmFzZSAoZS5nLiBgL2Jhc2UvYmFzZS9hcGkvLi4uYCDihpIgNDA0KS5cbiAgLy8gVGhpcyBkaWZmZXJzIGZyb20gaW4tY29udGVudCBsaW5rcywgd2hpY2ggYXJlIHJhdyBhbmNob3JzIHRoYXQgU3RhcmxpZ2h0IGRvZXMgbm90IGJhc2UtcHJlcGVuZC5cbiAgaWYgKG5vZGUudHlwZXMubGVuZ3RoID4gMCkge1xuICAgIGNvbnN0IHsgbmFtZXNwYWNlIH0gPSBlbnN1cmVOb25OdWxsYWJsZShub2RlLnR5cGVzWzBdKTtcbiAgICBpdGVtcy5wdXNoKHsgbGFiZWw6ICdPdmVydmlldycsIGxpbms6IGAvYXBpLyR7bmFtZXNwYWNlfS9gIH0pO1xuICAgIGNvbnN0IHNvcnRlZFR5cGVzID0gWy4uLm5vZGUudHlwZXNdLnNvcnQoKGEsIGIpID0+IGEubmFtZS5sb2NhbGVDb21wYXJlKGIubmFtZSkpO1xuICAgIGZvciAoY29uc3QgdCBvZiBzb3J0ZWRUeXBlcykge1xuICAgICAgaXRlbXMucHVzaCh7IGxhYmVsOiB0Lm5hbWUsIGxpbms6IGAvYXBpLyR7dC5uYW1lc3BhY2V9LyR7dG9UeXBlUm91dGVTZWdtZW50KHQubmFtZXNwYWNlLCB0Lm5hbWUpfS9gIH0pO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7IGNvbGxhcHNlZDogdHJ1ZSwgaXRlbXMsIGxhYmVsIH07XG59XG5cbi8vIFNlcnZlcyBib3RoIGFzIHRoZSByb290IEFQSSBwYWdlJ3MgcHJvc2UgYW5kIChzdHJpcHBlZCkgYXMgaXRzIGBkZXNjcmlwdGlvbmAgZnJvbnRtYXR0ZXIuXG4vLyBTaGFyaW5nIG9uZSBmdW5jdGlvbiBrZWVwcyB0aGUgcGFnZSBhbmQgaXRzIE9HIGNhcmQgZnJvbSBkcmlmdGluZyBhcGFydC5cbmZ1bmN0aW9uIGdldEFwaUluZGV4SW50cm8obmFtZXNwYWNlczogcmVhZG9ubHkgc3RyaW5nW10pOiBzdHJpbmcge1xuICBjb25zdCB7IHBhY2thZ2VOYW1lIH0gPSBnZXRBcGlEb2NTZXR0aW5ncygpO1xuICBjb25zdCBbZXhhbXBsZU5hbWVzcGFjZSA9ICdtb2R1bGUnXSA9IG5hbWVzcGFjZXM7XG4gIHJldHVybiBgVGhlIGNvbXBsZXRlIEFQSSByZWZlcmVuY2UgZm9yIFxcYCR7cGFja2FnZU5hbWV9XFxgLCBnZW5lcmF0ZWQgZnJvbSBpdHMgVFNEb2MuIGBcbiAgICArIGBFYWNoIG1vZHVsZSBiZWxvdyBtYXBzIHRvIGFuIGltcG9ydCBzdWJwYXRoIChlLmcuIHRoZSBcXGAke2V4YW1wbGVOYW1lc3BhY2V9XFxgIG1vZHVsZSBpcyBcXGAke3BhY2thZ2VOYW1lfS8ke2V4YW1wbGVOYW1lc3BhY2V9XFxgKS5gO1xufVxuXG5mdW5jdGlvbiBnZXRDb21wb25lbnRJbXBvcnRzKGNvbXBvbmVudE5hbWVzOiByZWFkb25seSBzdHJpbmdbXSk6IHN0cmluZ1tdIHtcbiAgcmV0dXJuIGNvbXBvbmVudE5hbWVzLm1hcCgoY29tcG9uZW50TmFtZSkgPT4gYGltcG9ydCAke2NvbXBvbmVudE5hbWV9IGZyb20gXCIke0FQSV9DT01QT05FTlRTX0lNUE9SVF9QUkVGSVh9LyR7Y29tcG9uZW50TmFtZX0uYXN0cm9cIjtgKTtcbn1cblxuZnVuY3Rpb24gcmVuZGVyTmFtZXNwYWNlVGFibGUoXG4gIGxpbmVzOiBzdHJpbmdbXSxcbiAgaGVhZGluZzogc3RyaW5nLFxuICBjb2x1bW5MYWJlbDogc3RyaW5nLFxuICBlbnRyaWVzOiBUeXBlSW5mb1tdLFxuICBhbGxUeXBlczogTWFwPHN0cmluZywgVHlwZUluZm8+LFxuICBuYW1lc3BhY2U6IHN0cmluZ1xuKTogdm9pZCB7XG4gIGlmIChlbnRyaWVzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybjtcbiAgfVxuICBjb25zdCBzb3J0ZWQgPSBbLi4uZW50cmllc10uc29ydCgoYSwgYikgPT4gYS5uYW1lLmxvY2FsZUNvbXBhcmUoYi5uYW1lKSk7XG4gIGxpbmVzLnB1c2goYCMjICR7aGVhZGluZ31gLCAnJywgYHwgJHtjb2x1bW5MYWJlbH0gfCBEZXNjcmlwdGlvbiB8YCwgJ3wgOi0tIHwgOi0tIHwnKTtcbiAgZm9yIChjb25zdCBlbnRyeSBvZiBzb3J0ZWQpIHtcbiAgICBsaW5lcy5wdXNoKGB8IFske2VudHJ5Lm5hbWV9XSguLyR7dG9UeXBlUm91dGVTZWdtZW50KGVudHJ5Lm5hbWVzcGFjZSwgZW50cnkubmFtZSl9LykgfCAke2VzY2FwZU1hcmtkb3duKHJlc29sdmVMaW5rcyhlbnRyeS5kZXNjcmlwdGlvbiwgYWxsVHlwZXMsIG5hbWVzcGFjZSkpfSB8YCk7XG4gIH1cbiAgbGluZXMucHVzaCgnJyk7XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBT0EsU0FBUyw4QkFBOEI7QUFDdkMsU0FBUyx5QkFBeUI7QUFDbEMsU0FBUyxpQkFBaUI7QUFDMUIsU0FBUyxZQUFZO0FBWXJCLFNBQVMscUJBQXFCO0FBQzlCO0FBQUEsRUFDRTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFDUCxTQUFTLHlCQUF5QjtBQUNsQztBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBQ1AsU0FBUyxvQ0FBb0M7QUFFN0MsTUFBTSxjQUFjO0FBUXBCLGVB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
|
|
549
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9kb2NzLXNpdGUvYXBpLWRvYy1wYWdlLWdlbmVyYXRpb24udHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIE1EWCBwYWdlICsgc2lkZWJhciBlbWlzc2lvbjogcmVuZGVycyBtb2R1bGUgaW5kZXggcGFnZXMsIHBlci10eXBlIG92ZXJ2aWV3IHBhZ2VzLCBwZXItbWVtYmVyIHBhZ2VzLFxuICogYmFja2xpbmtzLCBhbmQgdGhlIFN0YXJsaWdodCBzaWRlYmFyIEpTT04uXG4gKi9cblxuaW1wb3J0IHsgZ2V0TWFuZGF0b3J5TmFtZWRHcm91cCB9IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWxpYi9yZWctZXhwJztcbmltcG9ydCB7IGVuc3VyZU5vbk51bGxhYmxlIH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL3R5cGUtZ3VhcmRzJztcbmltcG9ydCB7IHdyaXRlRmlsZSB9IGZyb20gJ25vZGU6ZnMvcHJvbWlzZXMnO1xuaW1wb3J0IHsgam9pbiB9IGZyb20gJ25vZGU6cGF0aCc7XG5cbmltcG9ydCB0eXBlIHtcbiAgTWVtYmVySW5mbyxcbiAgUGFnZUNvbnRlbnQsXG4gIFBhZ2VGcm9udE1hdHRlcixcbiAgU2lkZWJhckVudHJ5LFxuICBTaWRlYmFyTGluayxcbiAgU2lkZWJhclRyZWVOb2RlLFxuICBUeXBlSW5mb1xufSBmcm9tICcuL2FwaS1kb2MtdHlwZXMudHMnO1xuXG5pbXBvcnQgeyBFVkVOVF9NRVRIT0RTIH0gZnJvbSAnLi9hcGktZG9jLWNvbnN0YW50cy50cyc7XG5pbXBvcnQge1xuICBsaW5rQmFzZVR5cGUsXG4gIG1hcmtkb3duVG9IdG1sLFxuICBtZW1iZXJIcmVmLFxuICByZW5kZXJFeGFtcGxlTWR4LFxuICByZW5kZXJNZHhQcm9zZSxcbiAgcmVuZGVyVHlwZVdpdGhMaW5rcyxcbiAgcmVzb2x2ZUxpbmtzLFxuICB0b1R5cGVGaWxlU2VnbWVudCxcbiAgdG9UeXBlUm91dGVTZWdtZW50LFxuICB0eXBlTGlua1xufSBmcm9tICcuL2FwaS1kb2MtbGluay1yZW5kZXJpbmcudHMnO1xuaW1wb3J0IHsgZ2V0QXBpRG9jU2V0dGluZ3MgfSBmcm9tICcuL2FwaS1kb2Mtc2V0dGluZ3MudHMnO1xuaW1wb3J0IHtcbiAgZW5zdXJlRGlyZWN0b3J5LFxuICBlc2NhcGVKc1N0cmluZyxcbiAgZXNjYXBlSnN4QXR0cmlidXRlLFxuICBlc2NhcGVNYXJrZG93bixcbiAgZXNjYXBlTWR4QW5nbGVCcmFja2V0cyxcbiAgZXNjYXBlTWR4QnJhY2VzLFxuICBlc2NhcGVNZHhQcm9zZSxcbiAgZXNjYXBlWWFtbCxcbiAgZ2V0RGlzcGxheU5hbWUsXG4gIGdldEltcG9ydFN0YXRlbWVudCxcbiAgZ2V0TmFtZXNwYWNlRGlyZWN0b3J5LFxuICBtZW1iZXJSb3V0ZVNlZ21lbnQsXG4gIG1lbWJlclNsdWcsXG4gIG92ZXJsb2FkUm91dGVTZWdtZW50LFxuICBvdmVybG9hZFNsdWcsXG4gIHN0cmlwTWFya2Rvd24sXG4gIHRydW5jYXRlU2lnbmF0dXJlXG59IGZyb20gJy4vYXBpLWRvYy10ZXh0LXV0aWxzLnRzJztcbmltcG9ydCB7IEFQSV9DT01QT05FTlRTX0lNUE9SVF9QUkVGSVggfSBmcm9tICcuL2RvY3Mtc2l0ZS1hc3NldHMudHMnO1xuXG5jb25zdCBKU09OX0lOREVOVCA9IDI7XG5cbi8qKlxuICogQXBwZW5kIGJhY2tsaW5rcyB0byBvdmVydmlldyBwYWdlcyBhbmQgd3JpdGUgYWxsIGZpbGVzLiBLZXllZCBieSBxdWFsaWZpZWQgYCR7bmFtZXNwYWNlfSMke25hbWV9YC5cbiAqXG4gKiBAcGFyYW0gcGFnZUNvbnRlbnRzIC0gRXZlcnkgb3ZlcnZpZXcgcGFnZSdzIGNvbnRlbnQgYW5kIHBhdGgsIGtleWVkIGJ5IHF1YWxpZmllZCBpZC5cbiAqIEBwYXJhbSBhbGxUeXBlcyAtIEV2ZXJ5IGRvY3VtZW50ZWQgdHlwZSwga2V5ZWQgYnkgYCR7bmFtZXNwYWNlfSMke25hbWV9YC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGFwcGVuZEJhY2tsaW5rc0FuZFdyaXRlKFxuICBwYWdlQ29udGVudHM6IE1hcDxzdHJpbmcsIFBhZ2VDb250ZW50PixcbiAgYWxsVHlwZXM6IE1hcDxzdHJpbmcsIFR5cGVJbmZvPlxuKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IGJhY2tsaW5rcyA9IGJ1aWxkQmFja2xpbmtzRnJvbUNvbnRlbnQocGFnZUNvbnRlbnRzLCBhbGxUeXBlcyk7XG5cbiAgZm9yIChjb25zdCBba2V5LCB7IGNvbnRlbnQsIGZpbGVQYXRoIH1dIG9mIHBhZ2VDb250ZW50cykge1xuICAgIGNvbnN0IHR5cGVCYWNrbGlua3MgPSBiYWNrbGlua3MuZ2V0KGtleSkgPz8gW107XG4gICAgY29uc3QgbGluZXMgPSBbY29udGVudF07XG4gICAgaWYgKHR5cGVCYWNrbGlua3MubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3Qgc29ydGVkQmFja2xpbmtzID0gWy4uLnR5cGVCYWNrbGlua3NdLnNvcnQoKGEsIGIpID0+IGEubG9jYWxlQ29tcGFyZShiKSk7XG4gICAgICBsaW5lcy5wdXNoKCcnLCAnLS0tJywgJycsICcqKkxpbmtzIHRvIHRoaXMgcGFnZToqKicsICcnKTtcbiAgICAgIGZvciAoY29uc3QgYmxLZXkgb2Ygc29ydGVkQmFja2xpbmtzKSB7XG4gICAgICAgIGNvbnN0IGJsSW5mbyA9IGVuc3VyZU5vbk51bGxhYmxlKGFsbFR5cGVzLmdldChibEtleSkpO1xuICAgICAgICBjb25zdCBibE5zRGlyZWN0b3J5ID0gZ2V0TmFtZXNwYWNlRGlyZWN0b3J5KGJsSW5mby5uYW1lc3BhY2UpO1xuICAgICAgICBsaW5lcy5wdXNoKGAtIFske2JsSW5mby5uYW1lfV0oJHtnZXRBcGlEb2NTZXR0aW5ncygpLmJhc2VQYXRofS9hcGkvJHtibE5zRGlyZWN0b3J5fS8ke3RvVHlwZVJvdXRlU2VnbWVudChibEluZm8ubmFtZXNwYWNlLCBibEluZm8ubmFtZSl9LylgKTtcbiAgICAgIH1cbiAgICB9XG4gICAgYXdhaXQgd3JpdGVGaWxlKGZpbGVQYXRoLCBsaW5lcy5qb2luKCdcXG4nKSwgJ3V0Zi04Jyk7XG4gIH1cbn1cblxuLyoqXG4gKiBCdWlsZCBiYWNrbGlua3MgYnkgc2Nhbm5pbmcgZ2VuZXJhdGVkIHBhZ2UgY29udGVudCBmb3IgaW50ZXJuYWwgQVBJIGxpbmtzLiBLZXllZCBieSBxdWFsaWZpZWQgaWQuXG4gKlxuICogQHBhcmFtIHBhZ2VDb250ZW50cyAtIEV2ZXJ5IG92ZXJ2aWV3IHBhZ2UncyBjb250ZW50IGFuZCBwYXRoLCBrZXllZCBieSBxdWFsaWZpZWQgaWQuXG4gKiBAcGFyYW0gYWxsVHlwZXMgLSBFdmVyeSBkb2N1bWVudGVkIHR5cGUsIGtleWVkIGJ5IGAke25hbWVzcGFjZX0jJHtuYW1lfWAuXG4gKiBAcmV0dXJucyBFYWNoIHJlZmVyZW5jZWQgdHlwZSdzIHF1YWxpZmllZCBpZCBtYXBwZWQgdG8gdGhlIGlkcyBvZiB0aGUgcGFnZXMgbGlua2luZyB0byBpdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkQmFja2xpbmtzRnJvbUNvbnRlbnQoXG4gIHBhZ2VDb250ZW50czogTWFwPHN0cmluZywgUGFnZUNvbnRlbnQ+LFxuICBhbGxUeXBlczogTWFwPHN0cmluZywgVHlwZUluZm8+XG4pOiBNYXA8c3RyaW5nLCBzdHJpbmdbXT4ge1xuICBjb25zdCBiYWNrbGlua3MgPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nW10+KCk7XG4gIC8vIEVtaXR0ZWQgVVJMcyBsb3dlcmNhc2UgdGhlIHR5cGUgc2VnbWVudCAoc2VlIHRvUm91dGVTZWdtZW50KSwgc28gbWFwIGVhY2ggbG93ZXJjYXNlZCByb3V0ZVxuICAvLyBpZGVudGl0eSBiYWNrIHRvIGl0cyBvcmlnaW5hbCBxdWFsaWZpZWQgdHlwZSBrZXkuXG4gIGNvbnN0IHJvdXRlS2V5VG9UeXBlS2V5ID0gbmV3IE1hcDxzdHJpbmcsIHN0cmluZz4oKTtcbiAgZm9yIChjb25zdCBbdHlwZUtleSwgaW5mb10gb2YgYWxsVHlwZXMpIHtcbiAgICByb3V0ZUtleVRvVHlwZUtleS5zZXQoYCR7Z2V0TmFtZXNwYWNlRGlyZWN0b3J5KGluZm8ubmFtZXNwYWNlKX0jJHt0b1R5cGVSb3V0ZVNlZ21lbnQoaW5mby5uYW1lc3BhY2UsIGluZm8ubmFtZSl9YCwgdHlwZUtleSk7XG4gIH1cbiAgY29uc3QgZXNjYXBlZEJhc2UgPSBnZXRBcGlEb2NTZXR0aW5ncygpLmJhc2VQYXRoLnJlcGxhY2VBbGwoL1suKis/XiR7fSgpfFtcXF1cXFxcXS9nLCBTdHJpbmcucmF3YFxcJCZgKTtcbiAgY29uc3QgbGlua1BhdHRlcm4gPSBuZXcgUmVnRXhwKGAke2VzY2FwZWRCYXNlfS9hcGkvKD88cGF0aD4oPzpbYS16QS1aMC05X0AtXSsvKSspYCwgJ2cnKTtcbiAgZm9yIChjb25zdCBbc291cmNlS2V5LCB7IGNvbnRlbnQgfV0gb2YgcGFnZUNvbnRlbnRzKSB7XG4gICAgY29uc3QgcmVmZXJlbmNlZCA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuXG4gICAgZm9yIChjb25zdCBtYXRjaCBvZiBjb250ZW50Lm1hdGNoQWxsKGxpbmtQYXR0ZXJuKSkge1xuICAgICAgLy8gVGhlIHBhdHRlcm4gcmVxdWlyZXMgYXQgbGVhc3Qgb25lIHNlZ21lbnQuXG4gICAgICBjb25zdCBzZWdtZW50cyA9IGdldE1hbmRhdG9yeU5hbWVkR3JvdXAobWF0Y2gsICdwYXRoJykuc3BsaXQoJy8nKS5maWx0ZXIoQm9vbGVhbik7XG4gICAgICBjb25zdCB0eXBlTmFtZSA9IGVuc3VyZU5vbk51bGxhYmxlKHNlZ21lbnRzLmF0KC0xKSk7XG4gICAgICBjb25zdCBuYW1lc3BhY2UgPSBzZWdtZW50cy5zbGljZSgwLCAtMSkuam9pbignLycpO1xuICAgICAgY29uc3Qgcm91dGVLZXkgPSBgJHtuYW1lc3BhY2V9IyR7dHlwZU5hbWV9YDtcbiAgICAgIGNvbnN0IHJlc29sdmVkS2V5ID0gcm91dGVLZXlUb1R5cGVLZXkuZ2V0KHJvdXRlS2V5KTtcbiAgICAgIGlmIChyZXNvbHZlZEtleSAhPT0gdW5kZWZpbmVkICYmIHJlc29sdmVkS2V5ICE9PSBzb3VyY2VLZXkpIHtcbiAgICAgICAgcmVmZXJlbmNlZC5hZGQocmVzb2x2ZWRLZXkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZvciAoY29uc3QgcmVmZXJlbmNlIG9mIHJlZmVyZW5jZWQpIHtcbiAgICAgIGlmICghYmFja2xpbmtzLmhhcyhyZWZlcmVuY2UpKSB7XG4gICAgICAgIGJhY2tsaW5rcy5zZXQocmVmZXJlbmNlLCBbXSk7XG4gICAgICB9XG4gICAgICBiYWNrbGlua3MuZ2V0KHJlZmVyZW5jZSk/LnB1c2goc291cmNlS2V5KTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gYmFja2xpbmtzO1xufVxuXG4vKipcbiAqIEJ1aWxkcyB0aGUgbmFtZXNwYWNlIHRyZWUgdGhlIHNpZGViYXIgaXMgZ2VuZXJhdGVkIGZyb20uXG4gKlxuICogQHBhcmFtIHR5cGVzIC0gVGhlIGRvY3VtZW50ZWQgdHlwZXMsIGtleWVkIGJ5IHF1YWxpZmllZCBpZC5cbiAqIEByZXR1cm5zIFRoZSByb290IG9mIHRoZSB0cmVlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRTaWRlYmFyVHJlZSh0eXBlczogTWFwPHN0cmluZywgVHlwZUluZm8+KTogU2lkZWJhclRyZWVOb2RlIHtcbiAgY29uc3Qgcm9vdDogU2lkZWJhclRyZWVOb2RlID0geyBjaGlsZHJlbjogbmV3IE1hcCgpLCB0eXBlczogW10gfTtcbiAgZm9yIChjb25zdCBbLCBpbmZvXSBvZiB0eXBlcykge1xuICAgIGNvbnN0IHBhcnRzID0gaW5mby5uYW1lc3BhY2Uuc3BsaXQoJy8nKTtcbiAgICBsZXQgbm9kZSA9IHJvb3Q7XG4gICAgZm9yIChjb25zdCBwYXJ0IG9mIHBhcnRzKSB7XG4gICAgICBsZXQgY2hpbGQgPSBub2RlLmNoaWxkcmVuLmdldChwYXJ0KTtcbiAgICAgIGlmICghY2hpbGQpIHtcbiAgICAgICAgY2hpbGQgPSB7IGNoaWxkcmVuOiBuZXcgTWFwKCksIHR5cGVzOiBbXSB9O1xuICAgICAgICBub2RlLmNoaWxkcmVuLnNldChwYXJ0LCBjaGlsZCk7XG4gICAgICB9XG4gICAgICBub2RlID0gY2hpbGQ7XG4gICAgfVxuICAgIG5vZGUudHlwZXMucHVzaChpbmZvKTtcbiAgfVxuICByZXR1cm4gcm9vdDtcbn1cblxuLyoqXG4gKiBUaGUgcmF3IGNvZGUgc2lnbmF0dXJlIHNob3duIG9uIGEgdHlwZS1vdmVydmlldyBwYWdlJ3MgT0cgY2FyZCwgZm9yIHRoZSBraW5kcyB0aGF0IHJlbmRlciBhIHNpbmdsZVxuICogc2lnbmF0dXJlIGxpbmUgKGZ1bmN0aW9uIC8gdHlwZSBhbGlhcyAvIHZhcmlhYmxlKS4gQ2xhc3NlcywgaW50ZXJmYWNlcyBhbmQgZW51bXMgcmVuZGVyIG1lbWJlclxuICogdGFibGVzIGluc3RlYWQsIHNvIHRoZXkgZ2V0IG5vIHNpZ25hdHVyZSBibG9jay5cbiAqXG4gKiBAcGFyYW0gbmFtZSAtIFRoZSB0eXBlJ3MgbmFtZS5cbiAqIEBwYXJhbSBpbmZvIC0gVGhlIGRvY3VtZW50ZWQgdHlwZS5cbiAqIEByZXR1cm5zIFRoZSBzaWduYXR1cmUsIG9yIGB1bmRlZmluZWRgIGZvciBhIGtpbmQgdGhhdCByZW5kZXJzIG1lbWJlciB0YWJsZXMgaW5zdGVhZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbXB1dGVPdmVydmlld1NpZ25hdHVyZShuYW1lOiBzdHJpbmcsIGluZm86IFR5cGVJbmZvKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgaWYgKGluZm8ua2luZCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGNvbnN0ICRmdW5jdGlvbiA9IGluZm8ubWV0aG9kc1swXTtcbiAgICByZXR1cm4gJGZ1bmN0aW9uID8gYGZ1bmN0aW9uICR7JGZ1bmN0aW9uLnNpZ25hdHVyZX06ICR7JGZ1bmN0aW9uLnJldHVyblR5cGV9YCA6IHVuZGVmaW5lZDtcbiAgfVxuICBpZiAoaW5mby5raW5kID09PSAndHlwZScpIHtcbiAgICByZXR1cm4gYHR5cGUgJHtnZXREaXNwbGF5TmFtZShpbmZvLm5hbWUsIGluZm8pfSA9ICR7aW5mby50eXBlQWxpYXNUZXh0ID8/ICd1bmtub3duJ31gO1xuICB9XG4gIHJldHVybiBpbmZvLmtpbmQgPT09ICd2YXJpYWJsZScgPyBgJHtpbmZvLnZhcmlhYmxlS2V5d29yZCA/PyAnbGV0J30gJHtuYW1lfTogJHtpbmZvLnZhcmlhYmxlVHlwZSA/PyAndW5rbm93bid9YCA6IHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBXcml0ZXMgb25lIHBhZ2UgcGVyIG93biBwcm9wZXJ0eSBhbmQgcGVyIG93biBtZXRob2Qgb3ZlcmxvYWQga2V5IG9mIGEgY2xhc3Mgb3IgaW50ZXJmYWNlLlxuICpcbiAqIEBwYXJhbSBuYW1lIC0gVGhlIHR5cGUncyBuYW1lLlxuICogQHBhcmFtIGluZm8gLSBUaGUgZG9jdW1lbnRlZCB0eXBlLlxuICogQHBhcmFtIGFsbFR5cGVzIC0gRXZlcnkgZG9jdW1lbnRlZCB0eXBlLCBrZXllZCBieSBgJHtuYW1lc3BhY2V9IyR7bmFtZX1gLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2VuZXJhdGVNZW1iZXJQYWdlcyhuYW1lOiBzdHJpbmcsIGluZm86IFR5cGVJbmZvLCBhbGxUeXBlczogTWFwPHN0cmluZywgVHlwZUluZm8+KTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IG5zRGlyZWN0b3J5ID0gZ2V0TmFtZXNwYWNlRGlyZWN0b3J5KGluZm8ubmFtZXNwYWNlKTtcbiAgY29uc3QgdHlwZUZpbGVEaXJlY3RvcnkgPSB0b1R5cGVGaWxlU2VnbWVudChpbmZvLm5hbWVzcGFjZSwgbmFtZSk7XG4gIGNvbnN0IHR5cGVSb3V0ZURpcmVjdG9yeSA9IHRvVHlwZVJvdXRlU2VnbWVudChpbmZvLm5hbWVzcGFjZSwgbmFtZSk7XG4gIGNvbnN0IGNvbXBvbmVudEltcG9ydHMgPSBnZXRDb21wb25lbnRJbXBvcnRzKFsnTWVtYmVyRGV0YWlsJ10pO1xuXG4gIC8vIFByb3BlcnR5IHBhZ2VzIChza2lwIGluaGVyaXRlZCDigJQgdGhleSBsaXZlIG9uIHRoZSBwYXJlbnQgdHlwZSlcbiAgY29uc3QgcHJvcGVydGllcyA9IGluZm8ucHJvcGVydGllcy5maWx0ZXIoKHApID0+ICFwLmluaGVyaXRlZEZyb20pO1xuICBmb3IgKGNvbnN0IHByb3BlcnR5IG9mIHByb3BlcnRpZXMpIHtcbiAgICBjb25zdCBmaWxlUGF0aCA9IGpvaW4oZ2V0QXBpRG9jU2V0dGluZ3MoKS5vdXRwdXREaXJlY3RvcnksIG5zRGlyZWN0b3J5LCB0eXBlRmlsZURpcmVjdG9yeSwgYCR7bWVtYmVyU2x1Zyhwcm9wZXJ0eS5uYW1lKX0ubWR4YCk7XG4gICAgYXdhaXQgZW5zdXJlRGlyZWN0b3J5KGZpbGVQYXRoKTtcblxuICAgIGNvbnN0IHByb3BlcnR5VGl0bGUgPSBgJHtuYW1lfS4ke3Byb3BlcnR5Lm5hbWV9YDtcbiAgICBjb25zdCBsaW5lczogc3RyaW5nW10gPSByZW5kZXJGcm9udE1hdHRlcih7XG4gICAgICBkZXNjcmlwdGlvbjogcHJvcGVydHkuZGVzY3JpcHRpb24sXG4gICAgICBzaWRlYmFyTGFiZWw6IHByb3BlcnR5VGl0bGUsXG4gICAgICBzaWduYXR1cmU6IGAke3Byb3BlcnR5LnNpZ25hdHVyZX06ICR7cHJvcGVydHkudHlwZX1gLFxuICAgICAgc2x1ZzogYGFwaS8ke25zRGlyZWN0b3J5fS8ke3R5cGVSb3V0ZURpcmVjdG9yeX0vJHttZW1iZXJSb3V0ZVNlZ21lbnQocHJvcGVydHkubmFtZSl9YCxcbiAgICAgIHRpdGxlOiBwcm9wZXJ0eVRpdGxlXG4gICAgfSk7XG4gICAgbGluZXMucHVzaChcbiAgICAgIC4uLmNvbXBvbmVudEltcG9ydHMsXG4gICAgICAnJyxcbiAgICAgIC8vIEJyZWFkY3J1bWJcbiAgICAgIGBbJHtuYW1lfV0oJHtnZXRBcGlEb2NTZXR0aW5ncygpLmJhc2VQYXRofS9hcGkvJHtuc0RpcmVjdG9yeX0vJHt0eXBlUm91dGVEaXJlY3Rvcnl9Lykg4oC6ICR7cHJvcGVydHkubmFtZX1gLFxuICAgICAgJydcbiAgICApO1xuXG4gICAgY29uc3Qgc3RhdGljQXR0cmlidXRlID0gcHJvcGVydHkuaXNTdGF0aWMgPyAnIGlzU3RhdGljPXt0cnVlfScgOiAnJztcbiAgICBjb25zdCB0eXBlQXR0cmlidXRlID0gYCB0eXBlPVwiJHtlc2NhcGVKc3hBdHRyaWJ1dGUobWFya2Rvd25Ub0h0bWwocmVuZGVyVHlwZVdpdGhMaW5rcyhwcm9wZXJ0eS50eXBlLCBhbGxUeXBlcywgbmFtZSwgaW5mby5uYW1lc3BhY2UpKSl9XCJgO1xuICAgIGNvbnN0IGRlc2NBdHRyaWJ1dGUgPSBwcm9wZXJ0eS5kZXNjcmlwdGlvbiA/IGAgZGVzY3JpcHRpb249XCIke2VzY2FwZUpzeEF0dHJpYnV0ZShtYXJrZG93blRvSHRtbChyZXNvbHZlTGlua3MocHJvcGVydHkuZGVzY3JpcHRpb24sIGFsbFR5cGVzLCBpbmZvLm5hbWVzcGFjZSkpKX1cImAgOiAnJztcbiAgICBjb25zdCByZW1hcmtzQXR0cmlidXRlID0gcHJvcGVydHkucmVtYXJrcyA/IGAgcmVtYXJrcz1cIiR7ZXNjYXBlSnN4QXR0cmlidXRlKG1hcmtkb3duVG9IdG1sKHJlc29sdmVMaW5rcyhwcm9wZXJ0eS5yZW1hcmtzLCBhbGxUeXBlcywgaW5mby5uYW1lc3BhY2UpKSl9XCJgIDogJyc7XG4gICAgY29uc3Qgc2luY2VBdHRyaWJ1dGUgPSBwcm9wZXJ0eS5zaW5jZSA/IGAgc2luY2U9XCIke2VzY2FwZUpzeEF0dHJpYnV0ZShwcm9wZXJ0eS5zaW5jZSl9XCJgIDogJyc7XG4gICAgY29uc3QgZXhhbXBsZXNBdHRyaWJ1dGUgPSBwcm9wZXJ0eS5leGFtcGxlcy5sZW5ndGggPiAwID8gYCBleGFtcGxlcz17JHtKU09OLnN0cmluZ2lmeShwcm9wZXJ0eS5leGFtcGxlcyl9fWAgOiAnJztcblxuICAgIGxpbmVzLnB1c2goYDxNZW1iZXJEZXRhaWwke3N0YXRpY0F0dHJpYnV0ZX0ke3R5cGVBdHRyaWJ1dGV9JHtkZXNjQXR0cmlidXRlfSR7cmVtYXJrc0F0dHJpYnV0ZX0ke3NpbmNlQXR0cmlidXRlfSR7ZXhhbXBsZXNBdHRyaWJ1dGV9IC8+YCwgJycpO1xuXG4gICAgYXdhaXQgd3JpdGVGaWxlKGZpbGVQYXRoLCBsaW5lcy5qb2luKCdcXG4nKSwgJ3V0Zi04Jyk7XG4gIH1cblxuICAvLyBNZXRob2QgcGFnZXMg4oCUIGVhY2ggb3ZlcmxvYWQga2V5IGdldHMgaXRzIG93biBwYWdlIChza2lwIGluaGVyaXRlZClcbiAgY29uc3QgbWV0aG9kcyA9IGluZm8ubWV0aG9kcy5maWx0ZXIoKG0pID0+ICFtLmluaGVyaXRlZEZyb20pO1xuICBjb25zdCBvdmVybG9hZEdyb3VwcyA9IG5ldyBNYXA8c3RyaW5nLCBNZW1iZXJJbmZvW10+KCk7XG4gIGZvciAoY29uc3QgbWV0aG9kIG9mIG1ldGhvZHMpIHtcbiAgICBjb25zdCBrZXkgPSBtZXRob2Qub3ZlcmxvYWRLZXk7XG4gICAgaWYgKCFvdmVybG9hZEdyb3Vwcy5oYXMoa2V5KSkge1xuICAgICAgb3ZlcmxvYWRHcm91cHMuc2V0KGtleSwgW10pO1xuICAgIH1cbiAgICBvdmVybG9hZEdyb3Vwcy5nZXQoa2V5KT8ucHVzaChtZXRob2QpO1xuICB9XG5cbiAgZm9yIChjb25zdCBbb3ZlcmxvYWRLZXksIG92ZXJsb2Fkc10gb2Ygb3ZlcmxvYWRHcm91cHMpIHtcbiAgICBjb25zdCBmaWxlU2x1ZyA9IG92ZXJsb2FkU2x1ZyhvdmVybG9hZEtleSk7XG4gICAgY29uc3QgZmlsZVBhdGggPSBqb2luKGdldEFwaURvY1NldHRpbmdzKCkub3V0cHV0RGlyZWN0b3J5LCBuc0RpcmVjdG9yeSwgdHlwZUZpbGVEaXJlY3RvcnksIGAke2ZpbGVTbHVnfS5tZHhgKTtcbiAgICBhd2FpdCBlbnN1cmVEaXJlY3RvcnkoZmlsZVBhdGgpO1xuXG4gICAgY29uc3QgZGlzcGxheU5hbWUgPSBgJHtuYW1lfS4ke292ZXJsb2FkS2V5fSBtZXRob2RgO1xuICAgIC8vIEEgZ3JvdXAgaXMgY3JlYXRlZCBieSBpdHMgZmlyc3Qgb3ZlcmxvYWQuXG4gICAgY29uc3QgZmlyc3RPdmVybG9hZCA9IGVuc3VyZU5vbk51bGxhYmxlKG92ZXJsb2Fkc1swXSk7XG5cbiAgICBjb25zdCBsaW5lczogc3RyaW5nW10gPSByZW5kZXJGcm9udE1hdHRlcih7XG4gICAgICBkZXNjcmlwdGlvbjogZmlyc3RPdmVybG9hZC5kZXNjcmlwdGlvbixcbiAgICAgIHNpZGViYXJMYWJlbDogYCR7bmFtZX0uJHtvdmVybG9hZEtleX1gLFxuICAgICAgc2lnbmF0dXJlOiBgJHtmaXJzdE92ZXJsb2FkLnNpZ25hdHVyZX06ICR7Zmlyc3RPdmVybG9hZC5yZXR1cm5UeXBlfWAsXG4gICAgICBzbHVnOiBgYXBpLyR7bnNEaXJlY3Rvcnl9LyR7dHlwZVJvdXRlRGlyZWN0b3J5fS8ke292ZXJsb2FkUm91dGVTZWdtZW50KG92ZXJsb2FkS2V5KX1gLFxuICAgICAgdGl0bGU6IGRpc3BsYXlOYW1lXG4gICAgfSk7XG4gICAgbGluZXMucHVzaChcbiAgICAgIC4uLmNvbXBvbmVudEltcG9ydHMsXG4gICAgICAnJyxcbiAgICAgIC8vIEJyZWFkY3J1bWJcbiAgICAgIGBbJHtuYW1lfV0oJHtnZXRBcGlEb2NTZXR0aW5ncygpLmJhc2VQYXRofS9hcGkvJHtuc0RpcmVjdG9yeX0vJHt0eXBlUm91dGVEaXJlY3Rvcnl9Lykg4oC6ICR7b3ZlcmxvYWRLZXl9YCxcbiAgICAgICcnXG4gICAgKTtcblxuICAgIGZvciAoY29uc3Qgb3ZlcmxvYWQgb2Ygb3ZlcmxvYWRzKSB7XG4gICAgICByZW5kZXJNZXRob2RPdmVybG9hZE1keChsaW5lcywgb3ZlcmxvYWQsIG5hbWUsIGluZm8ubmFtZXNwYWNlLCBhbGxUeXBlcyk7XG4gICAgICBpZiAob3ZlcmxvYWRzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgbGluZXMucHVzaCgnLS0tJywgJycpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGF3YWl0IHdyaXRlRmlsZShmaWxlUGF0aCwgbGluZXMuam9pbignXFxuJyksICd1dGYtOCcpO1xuICB9XG59XG5cbi8qKlxuICogV3JpdGVzIGVhY2ggbW9kdWxlJ3MgaW5kZXggcGFnZSBhbmQgdGhlIHJvb3QgQVBJIGluZGV4LlxuICpcbiAqIEBwYXJhbSB0eXBlcyAtIFRoZSBkb2N1bWVudGVkIHR5cGVzLCBrZXllZCBieSBxdWFsaWZpZWQgaWQuXG4gKiBAcGFyYW0gYWxsVHlwZXMgLSBFdmVyeSBkb2N1bWVudGVkIHR5cGUsIGtleWVkIGJ5IGAke25hbWVzcGFjZX0jJHtuYW1lfWAuXG4gKiBAcGFyYW0gbW9kdWxlT3ZlcnZpZXdzIC0gRWFjaCBuYW1lc3BhY2UncyBgQGZpbGVgIG92ZXJ2aWV3LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2VuZXJhdGVOYW1lc3BhY2VJbmRleFBhZ2VzKFxuICB0eXBlczogTWFwPHN0cmluZywgVHlwZUluZm8+LFxuICBhbGxUeXBlczogTWFwPHN0cmluZywgVHlwZUluZm8+LFxuICBtb2R1bGVPdmVydmlld3M6IE1hcDxzdHJpbmcsIHN0cmluZz5cbik6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBuYW1lc3BhY2VzID0gbmV3IE1hcDxzdHJpbmcsIFR5cGVJbmZvW10+KCk7XG4gIGZvciAoY29uc3QgWywgaW5mb10gb2YgdHlwZXMpIHtcbiAgICBpZiAoIW5hbWVzcGFjZXMuaGFzKGluZm8ubmFtZXNwYWNlKSkge1xuICAgICAgbmFtZXNwYWNlcy5zZXQoaW5mby5uYW1lc3BhY2UsIFtdKTtcbiAgICB9XG4gICAgbmFtZXNwYWNlcy5nZXQoaW5mby5uYW1lc3BhY2UpPy5wdXNoKGluZm8pO1xuICB9XG5cbiAgZm9yIChjb25zdCBbbmFtZXNwYWNlLCBuc1R5cGVzXSBvZiBuYW1lc3BhY2VzKSB7XG4gICAgY29uc3QgbnNEaXJlY3RvcnkgPSBnZXROYW1lc3BhY2VEaXJlY3RvcnkobmFtZXNwYWNlKTtcbiAgICBjb25zdCBmaWxlUGF0aCA9IGpvaW4oZ2V0QXBpRG9jU2V0dGluZ3MoKS5vdXRwdXREaXJlY3RvcnksIG5zRGlyZWN0b3J5LCAnaW5kZXgubWR4Jyk7XG4gICAgYXdhaXQgZW5zdXJlRGlyZWN0b3J5KGZpbGVQYXRoKTtcblxuICAgIC8vIFRoZSBtb2R1bGUncyBgQGZpbGVgIHRleHQgZG91YmxlcyBhcyBpdHMgZGVzY3JpcHRpb24uXG4gICAgLy8gV2l0aG91dCBpdCB0aGUgbW9kdWxlIGNhcmQgd2FzIHRpdGxlLW9ubHkgd2hpbGUgZXZlcnkgbWVtYmVyIGNhcmQgdW5kZXIgaXQgY2FycmllZCBvbmUuXG4gICAgY29uc3Qgb3ZlcnZpZXcgPSBtb2R1bGVPdmVydmlld3MuZ2V0KG5hbWVzcGFjZSk7XG4gICAgY29uc3QgbGluZXM6IHN0cmluZ1tdID0gcmVuZGVyRnJvbnRNYXR0ZXIoe1xuICAgICAgZGVzY3JpcHRpb246IG92ZXJ2aWV3LFxuICAgICAgc2lkZWJhckxhYmVsOiBuYW1lc3BhY2UsXG4gICAgICBzbHVnOiBgYXBpLyR7bnNEaXJlY3Rvcnl9YCxcbiAgICAgIHRpdGxlOiBuYW1lc3BhY2VcbiAgICB9KTtcblxuICAgIC8vIE1vZHVsZSBAZmlsZSBvdmVydmlldyB0ZXh0XG4gICAgaWYgKG92ZXJ2aWV3KSB7XG4gICAgICBsaW5lcy5wdXNoKHJlbmRlck1keFByb3NlKG92ZXJ2aWV3LCBhbGxUeXBlcywgbmFtZXNwYWNlKSwgJycpO1xuICAgIH1cblxuICAgIHJlbmRlck5hbWVzcGFjZVRhYmxlKGxpbmVzLCAnQ2xhc3NlcycsICdDbGFzcycsIG5zVHlwZXMuZmlsdGVyKCh0KSA9PiB0LmtpbmQgPT09ICdjbGFzcycpLCBhbGxUeXBlcywgbmFtZXNwYWNlKTtcbiAgICByZW5kZXJOYW1lc3BhY2VUYWJsZShsaW5lcywgJ0ludGVyZmFjZXMnLCAnSW50ZXJmYWNlJywgbnNUeXBlcy5maWx0ZXIoKHQpID0+IHQua2luZCA9PT0gJ2ludGVyZmFjZScpLCBhbGxUeXBlcywgbmFtZXNwYWNlKTtcbiAgICByZW5kZXJOYW1lc3BhY2VUYWJsZShsaW5lcywgJ0Z1bmN0aW9ucycsICdGdW5jdGlvbicsIG5zVHlwZXMuZmlsdGVyKCh0KSA9PiB0LmtpbmQgPT09ICdmdW5jdGlvbicpLCBhbGxUeXBlcywgbmFtZXNwYWNlKTtcbiAgICByZW5kZXJOYW1lc3BhY2VUYWJsZShsaW5lcywgJ1R5cGVzJywgJ1R5cGUnLCBuc1R5cGVzLmZpbHRlcigodCkgPT4gdC5raW5kID09PSAndHlwZScpLCBhbGxUeXBlcywgbmFtZXNwYWNlKTtcbiAgICByZW5kZXJOYW1lc3BhY2VUYWJsZShsaW5lcywgJ0VudW1zJywgJ0VudW0nLCBuc1R5cGVzLmZpbHRlcigodCkgPT4gdC5raW5kID09PSAnZW51bScpLCBhbGxUeXBlcywgbmFtZXNwYWNlKTtcbiAgICByZW5kZXJOYW1lc3BhY2VUYWJsZShsaW5lcywgJ1ZhcmlhYmxlcycsICdWYXJpYWJsZScsIG5zVHlwZXMuZmlsdGVyKCh0KSA9PiB0LmtpbmQgPT09ICd2YXJpYWJsZScpLCBhbGxUeXBlcywgbmFtZXNwYWNlKTtcblxuICAgIGF3YWl0IHdyaXRlRmlsZShmaWxlUGF0aCwgbGluZXMuam9pbignXFxuJyksICd1dGYtOCcpO1xuICB9XG5cbiAgLy8gUm9vdCBBUEkgaW5kZXggcGFnZSBsaXN0aW5nIGV2ZXJ5IG1vZHVsZS5cbiAgY29uc3Qgc29ydGVkTmFtZXNwYWNlcyA9IFsuLi5uYW1lc3BhY2VzLmtleXMoKV0uc29ydCgoYSwgYikgPT4gYS5sb2NhbGVDb21wYXJlKGIpKTtcbiAgY29uc3QgYXBpSW5kZXhJbnRybyA9IGdldEFwaUluZGV4SW50cm8oc29ydGVkTmFtZXNwYWNlcyk7XG4gIGNvbnN0IHJvb3RMaW5lczogc3RyaW5nW10gPSByZW5kZXJGcm9udE1hdHRlcih7XG4gICAgZGVzY3JpcHRpb246IGFwaUluZGV4SW50cm8sXG4gICAgc2lkZWJhckxhYmVsOiAnT3ZlcnZpZXcnLFxuICAgIHNsdWc6ICdhcGknLFxuICAgIHRpdGxlOiAnQVBJIHJlZmVyZW5jZSdcbiAgfSk7XG4gIHJvb3RMaW5lcy5wdXNoKGFwaUluZGV4SW50cm8sICcnLCAnIyMgTW9kdWxlcycsICcnKTtcbiAgZm9yIChjb25zdCBuYW1lc3BhY2Ugb2Ygc29ydGVkTmFtZXNwYWNlcykge1xuICAgIHJvb3RMaW5lcy5wdXNoKGAtIFske25hbWVzcGFjZX1dKCR7Z2V0QXBpRG9jU2V0dGluZ3MoKS5iYXNlUGF0aH0vYXBpLyR7Z2V0TmFtZXNwYWNlRGlyZWN0b3J5KG5hbWVzcGFjZSl9LylgKTtcbiAgfVxuICByb290TGluZXMucHVzaCgnJyk7XG4gIGNvbnN0IHJvb3RGaWxlUGF0aCA9IGpvaW4oZ2V0QXBpRG9jU2V0dGluZ3MoKS5vdXRwdXREaXJlY3RvcnksICdpbmRleC5tZHgnKTtcbiAgYXdhaXQgZW5zdXJlRGlyZWN0b3J5KHJvb3RGaWxlUGF0aCk7XG4gIGF3YWl0IHdyaXRlRmlsZShyb290RmlsZVBhdGgsIHJvb3RMaW5lcy5qb2luKCdcXG4nKSwgJ3V0Zi04Jyk7XG59XG5cbi8qKlxuICogUmVuZGVycyBhIHR5cGUncyBvdmVydmlldyBwYWdlLlxuICpcbiAqIEBwYXJhbSBuYW1lIC0gVGhlIHR5cGUncyBuYW1lLlxuICogQHBhcmFtIGluZm8gLSBUaGUgZG9jdW1lbnRlZCB0eXBlLlxuICogQHBhcmFtIGFsbFR5cGVzIC0gRXZlcnkgZG9jdW1lbnRlZCB0eXBlLCBrZXllZCBieSBgJHtuYW1lc3BhY2V9IyR7bmFtZX1gLlxuICogQHJldHVybnMgVGhlIHBhZ2UncyBjb250ZW50LCBiZWZvcmUgYmFja2xpbmtzLCBhbmQgdGhlIHBhdGggaXQgaXMgd3JpdHRlbiB0by5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdlbmVyYXRlT3ZlcnZpZXdQYWdlKG5hbWU6IHN0cmluZywgaW5mbzogVHlwZUluZm8sIGFsbFR5cGVzOiBNYXA8c3RyaW5nLCBUeXBlSW5mbz4pOiBQcm9taXNlPFBhZ2VDb250ZW50PiB7XG4gIGNvbnN0IG5zRGlyZWN0b3J5ID0gZ2V0TmFtZXNwYWNlRGlyZWN0b3J5KGluZm8ubmFtZXNwYWNlKTtcbiAgY29uc3QgdHlwZUZpbGVTbHVnID0gdG9UeXBlRmlsZVNlZ21lbnQoaW5mby5uYW1lc3BhY2UsIG5hbWUpO1xuICBjb25zdCB0eXBlUm91dGVTbHVnID0gdG9UeXBlUm91dGVTZWdtZW50KGluZm8ubmFtZXNwYWNlLCBuYW1lKTtcbiAgY29uc3QgZmlsZVBhdGggPSBqb2luKGdldEFwaURvY1NldHRpbmdzKCkub3V0cHV0RGlyZWN0b3J5LCBuc0RpcmVjdG9yeSwgdHlwZUZpbGVTbHVnLCAnaW5kZXgubWR4Jyk7XG4gIGF3YWl0IGVuc3VyZURpcmVjdG9yeShmaWxlUGF0aCk7XG5cbiAgLy8gRnJvbnRtYXR0ZXJcbiAgY29uc3QgZGlzcGxheU5hbWUgPSBnZXREaXNwbGF5TmFtZShuYW1lLCBpbmZvKTtcbiAgY29uc3QgbGluZXM6IHN0cmluZ1tdID0gcmVuZGVyRnJvbnRNYXR0ZXIoe1xuICAgIGRlc2NyaXB0aW9uOiBpbmZvLmRlc2NyaXB0aW9uLFxuICAgIHNpZGViYXJMYWJlbDogZGlzcGxheU5hbWUsXG4gICAgc2lnbmF0dXJlOiBjb21wdXRlT3ZlcnZpZXdTaWduYXR1cmUobmFtZSwgaW5mbyksXG4gICAgc2x1ZzogYGFwaS8ke25zRGlyZWN0b3J5fS8ke3R5cGVSb3V0ZVNsdWd9YCxcbiAgICB0aXRsZTogZGlzcGxheU5hbWVcbiAgfSk7XG5cbiAgLy8gQ29tcG9uZW50IGltcG9ydHMg4oCUIGNvbXB1dGUgcmVsYXRpdmUgcGF0aCBmcm9tIGdlbmVyYXRlZCBwYWdlIHRvIGNvbXBvbmVudHNcbiAgbGluZXMucHVzaCguLi5nZXRDb21wb25lbnRJbXBvcnRzKFsnQ29uc3RydWN0b3JCbG9jaycsICdJbXBvcnRTdGF0ZW1lbnQnLCAnTWV0aG9kVGFibGUnLCAnUHJvcGVydHlUYWJsZScsICdUeXBlU2lnbmF0dXJlJ10pLCAnJyk7XG5cbiAgLy8gRGVzY3JpcHRpb25cbiAgaWYgKGluZm8uZGVzY3JpcHRpb24pIHtcbiAgICBsaW5lcy5wdXNoKHJlbmRlck1keFByb3NlKGluZm8uZGVzY3JpcHRpb24sIGFsbFR5cGVzLCBpbmZvLm5hbWVzcGFjZSksICcnKTtcbiAgfVxuXG4gIC8vIFJlbWFya3NcbiAgaWYgKGluZm8ucmVtYXJrcykge1xuICAgIGNvbnN0IHJlbWFya3NCbG9jayA9IHJlbmRlck1keFByb3NlKGluZm8ucmVtYXJrcywgYWxsVHlwZXMsIGluZm8ubmFtZXNwYWNlKTtcbiAgICBsaW5lcy5wdXNoKHJlbWFya3NCbG9jay5zcGxpdCgnXFxuJykubWFwKChsaW5lKSA9PiAobGluZS5sZW5ndGggPiAwID8gYD4gJHtsaW5lfWAgOiAnPicpKS5qb2luKCdcXG4nKSwgJycpO1xuICB9XG5cbiAgLy8gSW1wb3J0IHN0YXRlbWVudFxuICBsaW5lcy5wdXNoKGA8SW1wb3J0U3RhdGVtZW50IHRleHQ9XCIke2VzY2FwZUpzeEF0dHJpYnV0ZShnZXRJbXBvcnRTdGF0ZW1lbnQoaW5mbykpfVwiIC8+YCwgJycpO1xuXG4gIC8vIEV4YW1wbGVzXG4gIGZvciAoY29uc3QgZXhhbXBsZSBvZiBpbmZvLmV4YW1wbGVzKSB7XG4gICAgbGluZXMucHVzaCgnKipFeGFtcGxlOioqJywgJycsIHJlbmRlckV4YW1wbGVNZHgoZXhhbXBsZSwgYWxsVHlwZXMsIGluZm8ubmFtZXNwYWNlKSwgJycpO1xuICB9XG5cbiAgLy8gRnVuY3Rpb25zIHJlbmRlciBsaWtlIG1ldGhvZCBkZXRhaWwgcGFnZXMg4oCUIHNpZ25hdHVyZSwgcGFyYW1zLCByZXR1cm5zXG4gIGlmIChpbmZvLmtpbmQgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZW5kZXJGdW5jdGlvblBhZ2UobGluZXMsIGluZm8sIGFsbFR5cGVzKTtcbiAgICByZXR1cm4geyBjb250ZW50OiBsaW5lcy5qb2luKCdcXG4nKSwgZmlsZVBhdGggfTtcbiAgfVxuXG4gIC8vIFZhcmlhYmxlcyByZW5kZXIgd2l0aCBkZWNsYXJhdGlvbiBrZXl3b3JkIGFuZCB0eXBlXG4gIGlmIChpbmZvLmtpbmQgPT09ICd2YXJpYWJsZScpIHtcbiAgICByZW5kZXJWYXJpYWJsZVBhZ2UobGluZXMsIG5hbWUsIGluZm8sIGFsbFR5cGVzKTtcbiAgICByZXR1cm4geyBjb250ZW50OiBsaW5lcy5qb2luKCdcXG4nKSwgZmlsZVBhdGggfTtcbiAgfVxuXG4gIC8vIEVudW1zIHJlbmRlciB0aGVpciBtZW1iZXJzIGxpc3RcbiAgaWYgKGluZm8ua2luZCA9PT0gJ2VudW0nKSB7XG4gICAgcmVuZGVyRW51bVBhZ2UobGluZXMsIGluZm8sIGFsbFR5cGVzKTtcbiAgICByZXR1cm4geyBjb250ZW50OiBsaW5lcy5qb2luKCdcXG4nKSwgZmlsZVBhdGggfTtcbiAgfVxuXG4gIC8vIFR5cGUgYWxpYXNlcyByZW5kZXIgdGhlaXIgcmlnaHQtaGFuZC1zaWRlIHNpZ25hdHVyZVxuICBpZiAoaW5mby5raW5kID09PSAndHlwZScpIHtcbiAgICByZW5kZXJUeXBlQWxpYXNQYWdlKGxpbmVzLCBpbmZvLCBhbGxUeXBlcyk7XG4gICAgcmV0dXJuIHsgY29udGVudDogbGluZXMuam9pbignXFxuJyksIGZpbGVQYXRoIH07XG4gIH1cblxuICAvLyBDbGFzc2VzIC8gaW50ZXJmYWNlczogc2lnbmF0dXJlICsgZXh0ZW5kcy9pbXBsZW1lbnRzICsgY29uc3RydWN0b3IgKyBtZW1iZXIgdGFibGVzXG4gIGNvbnN0IHR5cGVQYXJhbXNBdHRyaWJ1dGUgPSBpbmZvLnR5cGVQYXJhbWV0ZXJzLmxlbmd0aCA+IDAgPyBgIHR5cGVQYXJhbXM9eyR7SlNPTi5zdHJpbmdpZnkoaW5mby50eXBlUGFyYW1ldGVycyl9fWAgOiAnJztcbiAgY29uc3QgZXh0ZW5kc0F0dHJpYnV0ZSA9IGluZm8uYmFzZVR5cGVzLmxlbmd0aCA+IDAgPyBgIGV4dGVuZHM9eyR7SlNPTi5zdHJpbmdpZnkoaW5mby5iYXNlVHlwZXMpfX1gIDogJyc7XG4gIGNvbnN0IGltcGxlbWVudHNBdHRyaWJ1dGUgPSBpbmZvLmltcGxlbWVudHNUeXBlcy5sZW5ndGggPiAwID8gYCBpbXBsZW1lbnRzPXske0pTT04uc3RyaW5naWZ5KGluZm8uaW1wbGVtZW50c1R5cGVzKX19YCA6ICcnO1xuICBsaW5lcy5wdXNoKGA8VHlwZVNpZ25hdHVyZSBraW5kPVwiJHtpbmZvLmtpbmR9XCIgbmFtZT1cIiR7bmFtZX1cIiR7dHlwZVBhcmFtc0F0dHJpYnV0ZX0ke2V4dGVuZHNBdHRyaWJ1dGV9JHtpbXBsZW1lbnRzQXR0cmlidXRlfSAvPmAsICcnKTtcblxuICBpZiAoaW5mby5iYXNlVHlwZXMubGVuZ3RoID4gMCkge1xuICAgIGNvbnN0IGxpbmtlZFR5cGVzID0gaW5mby5iYXNlVHlwZXMubWFwKCh0KSA9PiBsaW5rQmFzZVR5cGUodCwgYWxsVHlwZXMsIGluZm8ubmFtZXNwYWNlKSk7XG4gICAgbGluZXMucHVzaChgKipFeHRlbmRzOioqICR7bGlua2VkVHlwZXMuam9pbignLCAnKX1gLCAnJyk7XG4gIH1cblxuICBpZiAoaW5mby5pbXBsZW1lbnRzVHlwZXMubGVuZ3RoID4gMCkge1xuICAgIGNvbnN0IGxpbmtlZFR5cGVzID0gaW5mby5pbXBsZW1lbnRzVHlwZXMubWFwKCh0KSA9PiBsaW5rQmFzZVR5cGUodCwgYWxsVHlwZXMsIGluZm8ubmFtZXNwYWNlKSk7XG4gICAgbGluZXMucHVzaChgKipJbXBsZW1lbnRzOioqICR7bGlua2VkVHlwZXMuam9pbignLCAnKX1gLCAnJyk7XG4gIH1cblxuICByZW5kZXJDb25zdHJ1Y3Rvck1keChsaW5lcywgbmFtZSwgaW5mbywgYWxsVHlwZXMpO1xuICByZW5kZXJQcm9wZXJ0eVRhYmxlTWR4KGxpbmVzLCBpbmZvLCBhbGxUeXBlcyk7XG4gIHJlbmRlck1ldGhvZFRhYmxlTWR4KGxpbmVzLCBpbmZvLCBhbGxUeXBlcyk7XG5cbiAgcmV0dXJuIHsgY29udGVudDogbGluZXMuam9pbignXFxuJyksIGZpbGVQYXRoIH07XG59XG5cbi8qKlxuICogV3JpdGVzIHRoZSBTdGFybGlnaHQgc2lkZWJhciBvZiB0aGUgQVBJIHJlZmVyZW5jZS5cbiAqXG4gKiBAcGFyYW0gdHlwZXMgLSBUaGUgZG9jdW1lbnRlZCB0eXBlcywga2V5ZWQgYnkgcXVhbGlmaWVkIGlkLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2VuZXJhdGVTaWRlYmFySnNvbih0eXBlczogTWFwPHN0cmluZywgVHlwZUluZm8+KTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHJvb3QgPSBidWlsZFNpZGViYXJUcmVlKHR5cGVzKTtcblxuICBjb25zdCBncm91cHM6IFNpZGViYXJFbnRyeVtdID0gW107XG4gIGNvbnN0IHRvcExldmVscyA9IFsuLi5yb290LmNoaWxkcmVuXS5zb3J0KChbYV0sIFtiXSkgPT4gYS5sb2NhbGVDb21wYXJlKGIpKTtcbiAgZm9yIChjb25zdCBbdG9wTGV2ZWwsIGNoaWxkXSBvZiB0b3BMZXZlbHMpIHtcbiAgICBncm91cHMucHVzaChzaWRlYmFyVHJlZVRvRW50cmllcyhjaGlsZCwgdG9wTGV2ZWwpKTtcbiAgfVxuXG4gIGNvbnN0IHdyYXBwZWRTaWRlYmFyOiBTaWRlYmFyRW50cnlbXSA9IFt7XG4gICAgY29sbGFwc2VkOiBmYWxzZSxcbiAgICBpdGVtczogZ3JvdXBzLFxuICAgIGxhYmVsOiAnQVBJIHJlZmVyZW5jZSdcbiAgfV07XG5cbiAgYXdhaXQgd3JpdGVGaWxlKGdldEFwaURvY1NldHRpbmdzKCkuc2lkZWJhckZpbGUsIEpTT04uc3RyaW5naWZ5KHdyYXBwZWRTaWRlYmFyLCBudWxsLCBKU09OX0lOREVOVCksICd1dGYtOCcpO1xuICBjb25zb2xlLndhcm4oYEdlbmVyYXRlZCBzaWRlYmFyIHdpdGggJHtTdHJpbmcoZ3JvdXBzLmxlbmd0aCl9IHRvcC1sZXZlbCBtb2R1bGUgZ3JvdXBzYCk7XG59XG5cbi8qKlxuICogUmVuZGVycyBhIGNsYXNzJ3MgY29uc3RydWN0b3IgYmxvY2suXG4gKlxuICogQHBhcmFtIGxpbmVzIC0gVGhlIHBhZ2UgbGluZXMgdG8gYXBwZW5kIHRvLlxuICogQHBhcmFtIG5hbWUgLSBUaGUgdHlwZSdzIG5hbWUuXG4gKiBAcGFyYW0gaW5mbyAtIFRoZSBkb2N1bWVudGVkIHR5cGUuXG4gKiBAcGFyYW0gYWxsVHlwZXMgLSBFdmVyeSBkb2N1bWVudGVkIHR5cGUsIGtleWVkIGJ5IGAke25hbWVzcGFjZX0jJHtuYW1lfWAuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZW5kZXJDb25zdHJ1Y3Rvck1keChsaW5lczogc3RyaW5nW10sIG5hbWU6IHN0cmluZywgaW5mbzogVHlwZUluZm8sIGFsbFR5cGVzOiBNYXA8c3RyaW5nLCBUeXBlSW5mbz4pOiB2b2lkIHtcbiAgY29uc3QgY29uc3RydWN0b3IgPSBpbmZvLmNvbnN0cnVjdG9ySW5mbztcbiAgaWYgKCFjb25zdHJ1Y3Rvcikge1xuICAgIHJldHVybjtcbiAgfVxuICBjb25zdCBjdG9yU2lnID0gYG5ldyAke25hbWV9JHtjb25zdHJ1Y3Rvci5zaWduYXR1cmV9YDtcbiAgY29uc3QgY3RvckRlc2MgPSBjb25zdHJ1Y3Rvci5kZXNjcmlwdGlvblxuICAgID8gYCBkZXNjcmlwdGlvbj1cIiR7ZXNjYXBlSnN4QXR0cmlidXRlKG1hcmtkb3duVG9IdG1sKHJlc29sdmVMaW5rcyhjb25zdHJ1Y3Rvci5kZXNjcmlwdGlvbiwgYWxsVHlwZXMsIGluZm8ubmFtZXNwYWNlKSkpfVwiYFxuICAgIDogJyc7XG4gIGxpbmVzLnB1c2goYDxDb25zdHJ1Y3RvckJsb2NrIHNpZ25hdHVyZT1cIiR7ZXNjYXBlSnN4QXR0cmlidXRlKGN0b3JTaWcpfVwiJHtjdG9yRGVzY30gLz5gLCAnJyk7XG59XG5cbi8qKlxuICogUmVuZGVycyBhbiBlbnVtJ3MgbWVtYmVycy5cbiAqXG4gKiBAcGFyYW0gbGluZXMgLSBUaGUgcGFnZSBsaW5lcyB0byBhcHBlbmQgdG8uXG4gKiBAcGFyYW0gaW5mbyAtIFRoZSBkb2N1bWVudGVkIHR5cGUuXG4gKiBAcGFyYW0gYWxsVHlwZXMgLSBFdmVyeSBkb2N1bWVudGVkIHR5cGUsIGtleWVkIGJ5IGAke25hbWVzcGFjZX0jJHtuYW1lfWAuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZW5kZXJFbnVtUGFnZShsaW5lczogc3RyaW5nW10sIGluZm86IFR5cGVJbmZvLCBhbGxUeXBlczogTWFwPHN0cmluZywgVHlwZUluZm8+KTogdm9pZCB7XG4gIGxpbmVzLnB1c2goYDxUeXBlU2lnbmF0dXJlIGtpbmQ9XCJlbnVtXCIgbmFtZT1cIiR7aW5mby5uYW1lfVwiIC8+YCwgJycpO1xuXG4gIGlmIChpbmZvLmVudW1NZW1iZXJzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGxpbmVzLnB1c2goJyoqTWVtYmVyczoqKicsICcnLCAnfCBNZW1iZXIgfCBWYWx1ZSB8IERlc2NyaXB0aW9uIHwnLCAnfCA6LS0gfCA6LS0gfCA6LS0gfCcpO1xuICBmb3IgKGNvbnN0IG1lbWJlciBvZiBpbmZvLmVudW1NZW1iZXJzKSB7XG4gICAgY29uc3QgdmFsdWUgPSBtZW1iZXIudmFsdWUgPyBgXFxgJHtlc2NhcGVNYXJrZG93bihtZW1iZXIudmFsdWUpfVxcYGAgOiAnJztcbiAgICBsaW5lcy5wdXNoKGB8IFxcYCR7bWVtYmVyLm5hbWV9XFxgIHwgJHt2YWx1ZX0gfCAke2VzY2FwZU1hcmtkb3duKHJlc29sdmVMaW5rcyhtZW1iZXIuZGVzY3JpcHRpb24sIGFsbFR5cGVzLCBpbmZvLm5hbWVzcGFjZSkpfSB8YCk7XG4gIH1cbiAgbGluZXMucHVzaCgnJyk7XG59XG5cbi8qKlxuICogUmVuZGVyIHRoZSBTdGFybGlnaHQgZnJvbnRtYXR0ZXIgYmxvY2sgKHRocm91Z2ggdGhlIGNsb3NpbmcgYC0tLWAgYW5kIGl0cyBibGFuayBsaW5lKSBzaGFyZWQgYnkgZXZlcnlcbiAqIGdlbmVyYXRlZCBwYWdlIGtpbmQ6IG1vZHVsZSBpbmRleCwgdHlwZSBvdmVydmlldywgcHJvcGVydHksIGFuZCBtZXRob2QuXG4gKlxuICogRXZlcnkgcGFnZSBraW5kIGdvZXMgdGhyb3VnaCBoZXJlIHNvIG5vIGZpZWxkIGNhbiBiZSBlbWl0dGVkIG9uIHNvbWUga2luZHMgYW5kIHNpbGVudGx5IGRyb3BwZWQgb25cbiAqIG90aGVycy4gYGRlc2NyaXB0aW9uYCBpbiBwYXJ0aWN1bGFyIGlzIG5vdCBqdXN0IFNFTyBtZXRhZGF0YSDigJQgaXQgaXMgdGhlIGxpbmUgdGhlIE9HIGNhcmQgcmVuZGVycyB1bmRlclxuICogdGhlIHRpdGxlLCBzbyBhIHBhZ2Uga2luZCB0aGF0IHNraXBwZWQgaXQgcHJvZHVjZWQgYSB0aXRsZS1vbmx5IGNhcmQgbmV4dCB0byBmdWxseSBwb3B1bGF0ZWQgb25lcy5cbiAqXG4gKiBAcGFyYW0gZnJvbnRNYXR0ZXIgLSBUaGUgcGFnZSdzIGZyb250bWF0dGVyIGZpZWxkcy5cbiAqIEByZXR1cm5zIFRoZSBmcm9udG1hdHRlciBsaW5lcywgdGhyb3VnaCB0aGUgY2xvc2luZyBgLS0tYCBhbmQgaXRzIGJsYW5rIGxpbmUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZW5kZXJGcm9udE1hdHRlcihmcm9udE1hdHRlcjogUGFnZUZyb250TWF0dGVyKTogc3RyaW5nW10ge1xuICByZXR1cm4gW1xuICAgICctLS0nLFxuICAgIGB0aXRsZTogXCIke2VzY2FwZVlhbWwoZnJvbnRNYXR0ZXIudGl0bGUpfVwiYCxcbiAgICBgc2x1ZzogXCIke2Zyb250TWF0dGVyLnNsdWd9XCJgLFxuICAgIC4uLihmcm9udE1hdHRlci5kZXNjcmlwdGlvbiA/IFtgZGVzY3JpcHRpb246IFwiJHtlc2NhcGVZYW1sKHN0cmlwTWFya2Rvd24oZnJvbnRNYXR0ZXIuZGVzY3JpcHRpb24pKX1cImBdIDogW10pLFxuICAgIC4uLihmcm9udE1hdHRlci5zaWduYXR1cmUgPyBbYHNpZ25hdHVyZTogXCIke2VzY2FwZVlhbWwodHJ1bmNhdGVTaWduYXR1cmUoZnJvbnRNYXR0ZXIuc2lnbmF0dXJlKSl9XCJgXSA6IFtdKSxcbiAgICAnZWRpdFVybDogZmFsc2UnLFxuICAgICdzaWRlYmFyOicsXG4gICAgYCAgbGFiZWw6IFwiJHtlc2NhcGVZYW1sKGZyb250TWF0dGVyLnNpZGViYXJMYWJlbCl9XCJgLFxuICAgICctLS0nLFxuICAgICcnXG4gIF07XG59XG5cbi8qKlxuICogUmVuZGVycyBhIGZ1bmN0aW9uJ3Mgc2lnbmF0dXJlLCBwYXJhbWV0ZXJzLCByZXR1cm4gdmFsdWUgYW5kIGV4YW1wbGVzLlxuICpcbiAqIEBwYXJhbSBsaW5lcyAtIFRoZSBwYWdlIGxpbmVzIHRvIGFwcGVuZCB0by5cbiAqIEBwYXJhbSBpbmZvIC0gVGhlIGRvY3VtZW50ZWQgdHlwZS5cbiAqIEBwYXJhbSBhbGxUeXBlcyAtIEV2ZXJ5IGRvY3VtZW50ZWQgdHlwZSwga2V5ZWQgYnkgYCR7bmFtZXNwYWNlfSMke25hbWV9YC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbmRlckZ1bmN0aW9uUGFnZShsaW5lczogc3RyaW5nW10sIGluZm86IFR5cGVJbmZvLCBhbGxUeXBlczogTWFwPHN0cmluZywgVHlwZUluZm8+KTogdm9pZCB7XG4gIGNvbnN0ICRmdW5jdGlvbiA9IGluZm8ubWV0aG9kc1swXTtcbiAgaWYgKCEkZnVuY3Rpb24pIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBsaW5lcy5wdXNoKCcqKlNpZ25hdHVyZToqKicsICcnLCAnYGBgdHMnLCBgZnVuY3Rpb24gJHskZnVuY3Rpb24uc2lnbmF0dXJlfTogJHskZnVuY3Rpb24ucmV0dXJuVHlwZX1gLCAnYGBgJywgJycpO1xuXG4gIGlmICgkZnVuY3Rpb24ucGFyYW1ldGVycy5sZW5ndGggPiAwKSB7XG4gICAgbGluZXMucHVzaCgnKipQYXJhbWV0ZXJzOioqJywgJycsICd8IFBhcmFtZXRlciB8IFR5cGUgfCBEZXNjcmlwdGlvbiB8JywgJ3wgOi0tIHwgOi0tIHwgOi0tIHwnKTtcbiAgICBmb3IgKGNvbnN0IHBhcmFtZXRlciBvZiAkZnVuY3Rpb24ucGFyYW1ldGVycykge1xuICAgICAgbGluZXMucHVzaChcbiAgICAgICAgYHwgXFxgJHtwYXJhbWV0ZXIubmFtZX1cXGAgfCAke2VzY2FwZU1hcmtkb3duKGVzY2FwZU1keEFuZ2xlQnJhY2tldHMocmVuZGVyVHlwZVdpdGhMaW5rcyhwYXJhbWV0ZXIudHlwZSwgYWxsVHlwZXMsIGluZm8ubmFtZSwgaW5mby5uYW1lc3BhY2UpKSl9IHwgJHtlc2NhcGVNYXJrZG93bihyZXNvbHZlTGlua3MocGFyYW1ldGVyLmRlc2NyaXB0aW9uLCBhbGxUeXBlcywgaW5mby5uYW1lc3BhY2UpKX0gfGBcbiAgICAgICk7XG4gICAgfVxuICAgIGxpbmVzLnB1c2goJycpO1xuICB9XG5cbiAgY29uc3QgcmV0dXJuRGVzYyA9ICRmdW5jdGlvbi5yZXR1cm5EZXNjcmlwdGlvbiA/IGAg4oCUICR7ZXNjYXBlTWR4UHJvc2UocmVzb2x2ZUxpbmtzKCRmdW5jdGlvbi5yZXR1cm5EZXNjcmlwdGlvbiwgYWxsVHlwZXMsIGluZm8ubmFtZXNwYWNlKSl9YCA6ICcnO1xuICBsaW5lcy5wdXNoKGAqKlJldHVybnM6KiogJHtlc2NhcGVNZHhCcmFjZXMoZXNjYXBlTWR4QW5nbGVCcmFja2V0cyhyZW5kZXJUeXBlV2l0aExpbmtzKCRmdW5jdGlvbi5yZXR1cm5UeXBlLCBhbGxUeXBlcywgaW5mby5uYW1lLCBpbmZvLm5hbWVzcGFjZSkpKX0ke3JldHVybkRlc2N9YCwgJycpO1xuXG4gIGZvciAoY29uc3QgZXhhbXBsZSBvZiAkZnVuY3Rpb24uZXhhbXBsZXMpIHtcbiAgICBsaW5lcy5wdXNoKCcqKkV4YW1wbGU6KionLCAnJywgcmVuZGVyRXhhbXBsZU1keChleGFtcGxlLCBhbGxUeXBlcywgaW5mby5uYW1lc3BhY2UpLCAnJyk7XG4gIH1cbn1cblxuLyoqXG4gKiBSZW5kZXJzIG9uZSBtZXRob2Qgb3ZlcmxvYWQuXG4gKlxuICogQHBhcmFtIGxpbmVzIC0gVGhlIHBhZ2UgbGluZXMgdG8gYXBwZW5kIHRvLlxuICogQHBhcmFtIG92ZXJsb2FkIC0gVGhlIG92ZXJsb2FkLlxuICogQHBhcmFtIHR5cGVOYW1lIC0gVGhlIG5hbWUgb2YgdGhlIHR5cGUgdGhlIG1ldGhvZCBiZWxvbmdzIHRvLlxuICogQHBhcmFtIG5hbWVzcGFjZSAtIFRoZSBuYW1lc3BhY2Ugb2YgdGhlIHR5cGUgdGhlIG1ldGhvZCBiZWxvbmdzIHRvLlxuICogQHBhcmFtIGFsbFR5cGVzIC0gRXZlcnkgZG9jdW1lbnRlZCB0eXBlLCBrZXllZCBieSBgJHtuYW1lc3BhY2V9IyR7bmFtZX1gLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVuZGVyTWV0aG9kT3ZlcmxvYWRNZHgobGluZXM6IHN0cmluZ1tdLCBvdmVybG9hZDogTWVtYmVySW5mbywgdHlwZU5hbWU6IHN0cmluZywgbmFtZXNwYWNlOiBzdHJpbmcsIGFsbFR5cGVzOiBNYXA8c3RyaW5nLCBUeXBlSW5mbz4pOiB2b2lkIHtcbiAgY29uc3Qgc2lnID0gYCR7b3ZlcmxvYWQuc2lnbmF0dXJlfTogJHtvdmVybG9hZC5yZXR1cm5UeXBlfWA7XG4gIGNvbnN0IHN0YXRpY0F0dHJpYnV0ZSA9IG92ZXJsb2FkLmlzU3RhdGljID8gJyBpc1N0YXRpYz17dHJ1ZX0nIDogJyc7XG4gIGNvbnN0IGRlc2NBdHRyaWJ1dGUgPSBvdmVybG9hZC5kZXNjcmlwdGlvbiA/IGAgZGVzY3JpcHRpb249XCIke2VzY2FwZUpzeEF0dHJpYnV0ZShtYXJrZG93blRvSHRtbChyZXNvbHZlTGlua3Mob3ZlcmxvYWQuZGVzY3JpcHRpb24sIGFsbFR5cGVzLCBuYW1lc3BhY2UpKSl9XCJgIDogJyc7XG4gIGNvbnN0IHJlbWFya3NBdHRyaWJ1dGUgPSBvdmVybG9hZC5yZW1hcmtzID8gYCByZW1hcmtzPVwiJHtlc2NhcGVKc3hBdHRyaWJ1dGUobWFya2Rvd25Ub0h0bWwocmVzb2x2ZUxpbmtzKG92ZXJsb2FkLnJlbWFya3MsIGFsbFR5cGVzLCBuYW1lc3BhY2UpKSl9XCJgIDogJyc7XG4gIGNvbnN0IHNpbmNlQXR0cmlidXRlID0gb3ZlcmxvYWQuc2luY2UgPyBgIHNpbmNlPVwiJHtlc2NhcGVKc3hBdHRyaWJ1dGUob3ZlcmxvYWQuc2luY2UpfVwiYCA6ICcnO1xuICBjb25zdCByZXR1cm5UeXBlQXR0cmlidXRlID0gYCByZXR1cm5UeXBlPVwiJHtlc2NhcGVKc3hBdHRyaWJ1dGUobWFya2Rvd25Ub0h0bWwocmVuZGVyVHlwZVdpdGhMaW5rcyhvdmVybG9hZC5yZXR1cm5UeXBlLCBhbGxUeXBlcywgdHlwZU5hbWUsIG5hbWVzcGFjZSkpKX1cImA7XG4gIGNvbnN0IHJldHVybkRlc2NBdHRyaWJ1dGUgPSBvdmVybG9hZC5yZXR1cm5EZXNjcmlwdGlvblxuICAgID8gYCByZXR1cm5EZXNjcmlwdGlvbj1cIiR7ZXNjYXBlSnN4QXR0cmlidXRlKG1hcmtkb3duVG9IdG1sKHJlc29sdmVMaW5rcyhvdmVybG9hZC5yZXR1cm5EZXNjcmlwdGlvbiwgYWxsVHlwZXMsIG5hbWVzcGFjZSkpKX1cImBcbiAgICA6ICcnO1xuICBjb25zdCBleGFtcGxlc0F0dHJpYnV0ZSA9IG92ZXJsb2FkLmV4YW1wbGVzLmxlbmd0aCA+IDAgPyBgIGV4YW1wbGVzPXske0pTT04uc3RyaW5naWZ5KG92ZXJsb2FkLmV4YW1wbGVzKX19YCA6ICcnO1xuXG4gIGNvbnN0IHBhcmFtcyA9IG92ZXJsb2FkLnBhcmFtZXRlcnMubWFwKChwKSA9PiAoe1xuICAgIGRlc2NyaXB0aW9uOiBtYXJrZG93blRvSHRtbChwLmRlc2NyaXB0aW9uIHx8IChwLm5hbWUuZW5kc1dpdGgoJz8nKSA/ICcqKE9wdGlvbmFsKSonIDogJycpKSxcbiAgICBuYW1lOiBwLm5hbWUsXG4gICAgdHlwZTogbWFya2Rvd25Ub0h0bWwocmVuZGVyVHlwZVdpdGhMaW5rcyhwLnR5cGUsIGFsbFR5cGVzLCB0eXBlTmFtZSwgbmFtZXNwYWNlKSlcbiAgfSkpO1xuICBjb25zdCBwYXJhbXNBdHRyaWJ1dGUgPSBwYXJhbXMubGVuZ3RoID4gMCA/IGAgcGFyYW1ldGVycz17JHtKU09OLnN0cmluZ2lmeShwYXJhbXMpfX1gIDogJyc7XG5cbiAgbGluZXMucHVzaChcbiAgICBgPE1lbWJlckRldGFpbCR7c3RhdGljQXR0cmlidXRlfSBzaWduYXR1cmU9XCIke2VzY2FwZUpzeEF0dHJpYnV0ZShzaWcpfVwiJHtkZXNjQXR0cmlidXRlfSR7cmVtYXJrc0F0dHJpYnV0ZX0ke3NpbmNlQXR0cmlidXRlfSR7cmV0dXJuVHlwZUF0dHJpYnV0ZX0ke3JldHVybkRlc2NBdHRyaWJ1dGV9JHtwYXJhbXNBdHRyaWJ1dGV9JHtleGFtcGxlc0F0dHJpYnV0ZX0gLz5gLFxuICAgICcnXG4gICk7XG59XG5cbi8qKlxuICogUmVuZGVycyBhIHR5cGUncyBtZXRob2QgdGFibGUuXG4gKlxuICogQHBhcmFtIGxpbmVzIC0gVGhlIHBhZ2UgbGluZXMgdG8gYXBwZW5kIHRvLlxuICogQHBhcmFtIGluZm8gLSBUaGUgZG9jdW1lbnRlZCB0eXBlLlxuICogQHBhcmFtIGFsbFR5cGVzIC0gRXZlcnkgZG9jdW1lbnRlZCB0eXBlLCBrZXllZCBieSBgJHtuYW1lc3BhY2V9IyR7bmFtZX1gLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVuZGVyTWV0aG9kVGFibGVNZHgobGluZXM6IHN0cmluZ1tdLCBpbmZvOiBUeXBlSW5mbywgYWxsVHlwZXM6IE1hcDxzdHJpbmcsIFR5cGVJbmZvPik6IHZvaWQge1xuICBjb25zdCBtZXRob2RzID0gWy4uLmluZm8ubWV0aG9kc10uc29ydCgoYSwgYikgPT4ge1xuICAgIGlmIChhLmlzU3RhdGljICE9PSBiLmlzU3RhdGljKSB7XG4gICAgICByZXR1cm4gYS5pc1N0YXRpYyA/IDEgOiAtMTtcbiAgICB9XG4gICAgcmV0dXJuIGEubmFtZS5sb2NhbGVDb21wYXJlKGIubmFtZSk7XG4gIH0pO1xuICBpZiAobWV0aG9kcy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm47XG4gIH1cbiAgbGluZXMucHVzaCgnPE1ldGhvZFRhYmxlIHJvd3M9e1snKTtcbiAgZm9yIChjb25zdCBtZXRob2Qgb2YgbWV0aG9kcykge1xuICAgIGNvbnN0IGRlc2MgPSBlc2NhcGVKc1N0cmluZyhtYXJrZG93blRvSHRtbChyZXNvbHZlTGlua3MobWV0aG9kLmRlc2NyaXB0aW9uLCBhbGxUeXBlcywgaW5mby5uYW1lc3BhY2UpKSk7XG4gICAgY29uc3Qgc3RhdGljUHJlZml4ID0gbWV0aG9kLmlzU3RhdGljID8gJ3N0YXRpYyAnIDogJyc7XG4gICAgY29uc3Qgc2hvcnRQYXJhbXMgPSBtZXRob2QucGFyYW1ldGVycy5tYXAoKHAsIGluZGV4KSA9PiB7XG4gICAgICByZXR1cm4gaW5kZXggPT09IDAgJiYgRVZFTlRfTUVUSE9EUy5oYXMobWV0aG9kLm5hbWUpICYmIChwLnR5cGUuc3RhcnRzV2l0aCgnXCInKSB8fCBwLnR5cGUuc3RhcnRzV2l0aCgnXFwnJykpID8gcC50eXBlLnJlcGxhY2VBbGwoJ1wiJywgJ1xcJycpIDogcC5uYW1lO1xuICAgIH0pLmpvaW4oJywgJyk7XG4gICAgY29uc3Qgc2hvcnRTaWcgPSBgJHtzdGF0aWNQcmVmaXh9JHttZXRob2QubmFtZX0oJHtzaG9ydFBhcmFtc30pYDtcbiAgICBjb25zdCBzaWcgPSBlc2NhcGVKc1N0cmluZyhzaG9ydFNpZyk7XG4gICAgY29uc3Qgc2x1ZyA9IG92ZXJsb2FkUm91dGVTZWdtZW50KG1ldGhvZC5vdmVybG9hZEtleSk7XG4gICAgY29uc3QgcmV0dXJuVHlwZSA9IG1hcmtkb3duVG9IdG1sKHJlbmRlclR5cGVXaXRoTGlua3MobWV0aG9kLnJldHVyblR5cGUsIGFsbFR5cGVzLCBpbmZvLm5hbWUsIGluZm8ubmFtZXNwYWNlKSk7XG4gICAgY29uc3QgaW5oZXJpdGVkQXR0cmlidXRlID0gbWV0aG9kLmluaGVyaXRlZEZyb21cbiAgICAgID8gYCwgaW5oZXJpdGVkRnJvbTogXCIke2VzY2FwZUpzU3RyaW5nKG1hcmtkb3duVG9IdG1sKHR5cGVMaW5rKG1ldGhvZC5pbmhlcml0ZWRGcm9tLCBhbGxUeXBlcywgaW5mby5uYW1lc3BhY2UpKSl9XCJgXG4gICAgICA6ICcnO1xuICAgIGNvbnN0IGhyZWYgPSBtZW1iZXJIcmVmKHNsdWcsIG1ldGhvZC5pbmhlcml0ZWRGcm9tLCBhbGxUeXBlcywgaW5mby5uYW1lc3BhY2UpO1xuICAgIGxpbmVzLnB1c2goXG4gICAgICBgICB7IHNpZ25hdHVyZTogXCIke3NpZ31cIiwgaHJlZjogXCIke2VzY2FwZUpzU3RyaW5nKGhyZWYpfVwiLCByZXR1cm5zOiBcIiR7ZXNjYXBlSnNTdHJpbmcocmV0dXJuVHlwZSl9XCIsIGRlc2NyaXB0aW9uOiBcIiR7ZGVzY31cIiR7aW5oZXJpdGVkQXR0cmlidXRlfSB9LGBcbiAgICApO1xuICB9XG4gIGxpbmVzLnB1c2goJ119IC8+JywgJycpO1xufVxuXG4vKipcbiAqIFJlbmRlcnMgYSB0eXBlJ3MgcHJvcGVydHkgdGFibGUuXG4gKlxuICogQHBhcmFtIGxpbmVzIC0gVGhlIHBhZ2UgbGluZXMgdG8gYXBwZW5kIHRvLlxuICogQHBhcmFtIGluZm8gLSBUaGUgZG9jdW1lbnRlZCB0eXBlLlxuICogQHBhcmFtIGFsbFR5cGVzIC0gRXZlcnkgZG9jdW1lbnRlZCB0eXBlLCBrZXllZCBieSBgJHtuYW1lc3BhY2V9IyR7bmFtZX1gLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVuZGVyUHJvcGVydHlUYWJsZU1keChsaW5lczogc3RyaW5nW10sIGluZm86IFR5cGVJbmZvLCBhbGxUeXBlczogTWFwPHN0cmluZywgVHlwZUluZm8+KTogdm9pZCB7XG4gIGNvbnN0IHByb3BlcnRpZXMgPSBpbmZvLnByb3BlcnRpZXM7XG4gIGlmIChwcm9wZXJ0aWVzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybjtcbiAgfVxuICBsaW5lcy5wdXNoKCc8UHJvcGVydHlUYWJsZSByb3dzPXtbJyk7XG4gIGZvciAoY29uc3QgcHJvcGVydHkgb2YgcHJvcGVydGllcykge1xuICAgIGNvbnN0IGRlc2MgPSBlc2NhcGVKc1N0cmluZyhtYXJrZG93blRvSHRtbChyZXNvbHZlTGlua3MocHJvcGVydHkuZGVzY3JpcHRpb24sIGFsbFR5cGVzLCBpbmZvLm5hbWVzcGFjZSkpKTtcbiAgICBjb25zdCB0eXBlID0gbWFya2Rvd25Ub0h0bWwocmVuZGVyVHlwZVdpdGhMaW5rcyhwcm9wZXJ0eS50eXBlLCBhbGxUeXBlcywgaW5mby5uYW1lLCBpbmZvLm5hbWVzcGFjZSkpO1xuICAgIGNvbnN0IGluaGVyaXRlZEF0dHJpYnV0ZSA9IHByb3BlcnR5LmluaGVyaXRlZEZyb21cbiAgICAgID8gYCwgaW5oZXJpdGVkRnJvbTogXCIke2VzY2FwZUpzU3RyaW5nKG1hcmtkb3duVG9IdG1sKHR5cGVMaW5rKHByb3BlcnR5LmluaGVyaXRlZEZyb20sIGFsbFR5cGVzLCBpbmZvLm5hbWVzcGFjZSkpKX1cImBcbiAgICAgIDogJyc7XG4gICAgY29uc3QgaHJlZiA9IG1lbWJlckhyZWYobWVtYmVyUm91dGVTZWdtZW50KHByb3BlcnR5Lm5hbWUpLCBwcm9wZXJ0eS5pbmhlcml0ZWRGcm9tLCBhbGxUeXBlcywgaW5mby5uYW1lc3BhY2UpO1xuICAgIGxpbmVzLnB1c2goXG4gICAgICBgICB7IG5hbWU6IFwiJHtlc2NhcGVKc1N0cmluZyhwcm9wZXJ0eS5uYW1lKX1cIiwgaHJlZjogXCIke2VzY2FwZUpzU3RyaW5nKGhyZWYpfVwiLCB0eXBlOiBcIiR7ZXNjYXBlSnNTdHJpbmcodHlwZSl9XCIsIGRlc2NyaXB0aW9uOiBcIiR7ZGVzY31cIiR7aW5oZXJpdGVkQXR0cmlidXRlfSB9LGBcbiAgICApO1xuICB9XG4gIGxpbmVzLnB1c2goJ119IC8+JywgJycpO1xufVxuXG4vKipcbiAqIFJlbmRlcnMgYSB0eXBlIGFsaWFzJ3Mgc2lnbmF0dXJlLlxuICpcbiAqIEBwYXJhbSBsaW5lcyAtIFRoZSBwYWdlIGxpbmVzIHRvIGFwcGVuZCB0by5cbiAqIEBwYXJhbSBpbmZvIC0gVGhlIGRvY3VtZW50ZWQgdHlwZS5cbiAqIEBwYXJhbSBhbGxUeXBlcyAtIEV2ZXJ5IGRvY3VtZW50ZWQgdHlwZSwga2V5ZWQgYnkgYCR7bmFtZXNwYWNlfSMke25hbWV9YC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbmRlclR5cGVBbGlhc1BhZ2UobGluZXM6IHN0cmluZ1tdLCBpbmZvOiBUeXBlSW5mbywgYWxsVHlwZXM6IE1hcDxzdHJpbmcsIFR5cGVJbmZvPik6IHZvaWQge1xuICBjb25zdCB0eXBlUGFyYW1zQXR0cmlidXRlID0gaW5mby50eXBlUGFyYW1ldGVycy5sZW5ndGggPiAwID8gYCB0eXBlUGFyYW1zPXske0pTT04uc3RyaW5naWZ5KGluZm8udHlwZVBhcmFtZXRlcnMpfX1gIDogJyc7XG4gIGxpbmVzLnB1c2goYDxUeXBlU2lnbmF0dXJlIGtpbmQ9XCJ0eXBlXCIgbmFtZT1cIiR7aW5mby5uYW1lfVwiJHt0eXBlUGFyYW1zQXR0cmlidXRlfSAvPmAsICcnKTtcblxuICBjb25zdCByaHMgPSBpbmZvLnR5cGVBbGlhc1RleHQgPz8gJ3Vua25vd24nO1xuICBsaW5lcy5wdXNoKFxuICAgICcqKlNpZ25hdHVyZToqKicsXG4gICAgJycsXG4gICAgJ2BgYHRzJyxcbiAgICBgdHlwZSAke2dldERpc3BsYXlOYW1lKGluZm8ubmFtZSwgaW5mbyl9ID0gJHtyaHN9YCxcbiAgICAnYGBgJyxcbiAgICAnJyxcbiAgICBgKipUeXBlOioqICR7ZXNjYXBlTWR4QnJhY2VzKGVzY2FwZU1keEFuZ2xlQnJhY2tldHMocmVuZGVyVHlwZVdpdGhMaW5rcyhyaHMsIGFsbFR5cGVzLCBpbmZvLm5hbWUsIGluZm8ubmFtZXNwYWNlKSkpfWAsXG4gICAgJydcbiAgKTtcbn1cblxuLyoqXG4gKiBSZW5kZXJzIGEgdmFyaWFibGUncyBkZWNsYXJhdGlvbiBhbmQgdHlwZS5cbiAqXG4gKiBAcGFyYW0gbGluZXMgLSBUaGUgcGFnZSBsaW5lcyB0byBhcHBlbmQgdG8uXG4gKiBAcGFyYW0gbmFtZSAtIFRoZSB0eXBlJ3MgbmFtZS5cbiAqIEBwYXJhbSBpbmZvIC0gVGhlIGRvY3VtZW50ZWQgdHlwZS5cbiAqIEBwYXJhbSBhbGxUeXBlcyAtIEV2ZXJ5IGRvY3VtZW50ZWQgdHlwZSwga2V5ZWQgYnkgYCR7bmFtZXNwYWNlfSMke25hbWV9YC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbmRlclZhcmlhYmxlUGFnZShsaW5lczogc3RyaW5nW10sIG5hbWU6IHN0cmluZywgaW5mbzogVHlwZUluZm8sIGFsbFR5cGVzOiBNYXA8c3RyaW5nLCBUeXBlSW5mbz4pOiB2b2lkIHtcbiAgY29uc3Qga2V5d29yZCA9IGluZm8udmFyaWFibGVLZXl3b3JkID8/ICdsZXQnO1xuICBjb25zdCB2YXJpYWJsZVR5cGUgPSBpbmZvLnZhcmlhYmxlVHlwZSA/PyAndW5rbm93bic7XG4gIGxpbmVzLnB1c2goXG4gICAgJyoqU2lnbmF0dXJlOioqJyxcbiAgICAnJyxcbiAgICAnYGBgdHMnLFxuICAgIGAke2tleXdvcmR9ICR7bmFtZX06ICR7dmFyaWFibGVUeXBlfWAsXG4gICAgJ2BgYCcsXG4gICAgJycsXG4gICAgYCoqVHlwZToqKiAke2VzY2FwZU1keEJyYWNlcyhlc2NhcGVNZHhBbmdsZUJyYWNrZXRzKHJlbmRlclR5cGVXaXRoTGlua3ModmFyaWFibGVUeXBlLCBhbGxUeXBlcywgbmFtZSwgaW5mby5uYW1lc3BhY2UpKSl9YCxcbiAgICAnJ1xuICApO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGEgbmFtZXNwYWNlIHRyZWUgbm9kZSBpbnRvIGEgc2lkZWJhciBncm91cC5cbiAqXG4gKiBAcGFyYW0gbm9kZSAtIFRoZSBub2RlLlxuICogQHBhcmFtIGxhYmVsIC0gVGhlIGdyb3VwJ3MgbGFiZWwuXG4gKiBAcmV0dXJucyBUaGUgc2lkZWJhciBncm91cC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNpZGViYXJUcmVlVG9FbnRyaWVzKG5vZGU6IFNpZGViYXJUcmVlTm9kZSwgbGFiZWw6IHN0cmluZyk6IFNpZGViYXJFbnRyeSB7XG4gIGNvbnN0IGl0ZW1zOiAoU2lkZWJhckVudHJ5IHwgU2lkZWJhckxpbmspW10gPSBbXTtcblxuICAvLyBDaGlsZCBkaXJlY3RvcnkgZ3JvdXBzIGZpcnN0IChiZWZvcmUgdGhpcyBtb2R1bGUncyBvd24gcGFnZXMpXG4gIGNvbnN0IHNvcnRlZENoaWxkcmVuID0gWy4uLm5vZGUuY2hpbGRyZW5dLnNvcnQoKFthXSwgW2JdKSA9PiBhLmxvY2FsZUNvbXBhcmUoYikpO1xuICBmb3IgKGNvbnN0IFtjaGlsZE5hbWUsIGNoaWxkXSBvZiBzb3J0ZWRDaGlsZHJlbikge1xuICAgIGl0ZW1zLnB1c2goc2lkZWJhclRyZWVUb0VudHJpZXMoY2hpbGQsIGNoaWxkTmFtZSkpO1xuICB9XG5cbiAgLy8gVGhpcyBtb2R1bGUncyBvd24gb3ZlcnZpZXcgcGFnZSArIHR5cGUvZnVuY3Rpb24gcGFnZXMgKGluZGl2aWR1YWwgbWVtYmVycyBhcmUgbm90IGxpc3RlZCkuXG4gIC8vIFNpZGViYXIgYGxpbmtgIGZpZWxkcyBtdXN0IE5PVCBlbWJlZCBCQVNFX1BBVEg6IFN0YXJsaWdodCBwcmVwZW5kcyB0aGUgY29uZmlnIGBiYXNlYCB0byBldmVyeVxuICAvLyBzaWRlYmFyIGxpbmsgaXRzZWxmLCBzbyBpbmNsdWRpbmcgaXQgaGVyZSB3b3VsZCBkb3VibGUgdGhlIGJhc2UgKGUuZy4gYC9iYXNlL2Jhc2UvYXBpLy4uLmAg4oaSIDQwNCkuXG4gIC8vIFRoaXMgZGlmZmVycyBmcm9tIGluLWNvbnRlbnQgbGlua3MsIHdoaWNoIGFyZSByYXcgYW5jaG9ycyB0aGF0IFN0YXJsaWdodCBkb2VzIG5vdCBiYXNlLXByZXBlbmQuXG4gIGlmIChub2RlLnR5cGVzLmxlbmd0aCA+IDApIHtcbiAgICBjb25zdCB7IG5hbWVzcGFjZSB9ID0gZW5zdXJlTm9uTnVsbGFibGUobm9kZS50eXBlc1swXSk7XG4gICAgaXRlbXMucHVzaCh7IGxhYmVsOiAnT3ZlcnZpZXcnLCBsaW5rOiBgL2FwaS8ke25hbWVzcGFjZX0vYCB9KTtcbiAgICBjb25zdCBzb3J0ZWRUeXBlcyA9IFsuLi5ub2RlLnR5cGVzXS5zb3J0KChhLCBiKSA9PiBhLm5hbWUubG9jYWxlQ29tcGFyZShiLm5hbWUpKTtcbiAgICBmb3IgKGNvbnN0IHQgb2Ygc29ydGVkVHlwZXMpIHtcbiAgICAgIGl0ZW1zLnB1c2goeyBsYWJlbDogdC5uYW1lLCBsaW5rOiBgL2FwaS8ke3QubmFtZXNwYWNlfS8ke3RvVHlwZVJvdXRlU2VnbWVudCh0Lm5hbWVzcGFjZSwgdC5uYW1lKX0vYCB9KTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4geyBjb2xsYXBzZWQ6IHRydWUsIGl0ZW1zLCBsYWJlbCB9O1xufVxuXG4vLyBTZXJ2ZXMgYm90aCBhcyB0aGUgcm9vdCBBUEkgcGFnZSdzIHByb3NlIGFuZCAoc3RyaXBwZWQpIGFzIGl0cyBgZGVzY3JpcHRpb25gIGZyb250bWF0dGVyLlxuLy8gU2hhcmluZyBvbmUgZnVuY3Rpb24ga2VlcHMgdGhlIHBhZ2UgYW5kIGl0cyBPRyBjYXJkIGZyb20gZHJpZnRpbmcgYXBhcnQuXG5mdW5jdGlvbiBnZXRBcGlJbmRleEludHJvKG5hbWVzcGFjZXM6IHJlYWRvbmx5IHN0cmluZ1tdKTogc3RyaW5nIHtcbiAgY29uc3QgeyBwYWNrYWdlTmFtZSB9ID0gZ2V0QXBpRG9jU2V0dGluZ3MoKTtcbiAgY29uc3QgW2V4YW1wbGVOYW1lc3BhY2UgPSAnbW9kdWxlJ10gPSBuYW1lc3BhY2VzO1xuICByZXR1cm4gYFRoZSBjb21wbGV0ZSBBUEkgcmVmZXJlbmNlIGZvciBcXGAke3BhY2thZ2VOYW1lfVxcYCwgZ2VuZXJhdGVkIGZyb20gaXRzIFRTRG9jLiBgXG4gICAgKyBgRWFjaCBtb2R1bGUgYmVsb3cgbWFwcyB0byBhbiBpbXBvcnQgc3VicGF0aCAoZS5nLiB0aGUgXFxgJHtleGFtcGxlTmFtZXNwYWNlfVxcYCBtb2R1bGUgaXMgXFxgJHtwYWNrYWdlTmFtZX0vJHtleGFtcGxlTmFtZXNwYWNlfVxcYCkuYDtcbn1cblxuZnVuY3Rpb24gZ2V0Q29tcG9uZW50SW1wb3J0cyhjb21wb25lbnROYW1lczogcmVhZG9ubHkgc3RyaW5nW10pOiBzdHJpbmdbXSB7XG4gIHJldHVybiBjb21wb25lbnROYW1lcy5tYXAoKGNvbXBvbmVudE5hbWUpID0+IGBpbXBvcnQgJHtjb21wb25lbnROYW1lfSBmcm9tIFwiJHtBUElfQ09NUE9ORU5UU19JTVBPUlRfUFJFRklYfS8ke2NvbXBvbmVudE5hbWV9LmFzdHJvXCI7YCk7XG59XG5cbmZ1bmN0aW9uIHJlbmRlck5hbWVzcGFjZVRhYmxlKFxuICBsaW5lczogc3RyaW5nW10sXG4gIGhlYWRpbmc6IHN0cmluZyxcbiAgY29sdW1uTGFiZWw6IHN0cmluZyxcbiAgZW50cmllczogVHlwZUluZm9bXSxcbiAgYWxsVHlwZXM6IE1hcDxzdHJpbmcsIFR5cGVJbmZvPixcbiAgbmFtZXNwYWNlOiBzdHJpbmdcbik6IHZvaWQge1xuICBpZiAoZW50cmllcy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm47XG4gIH1cbiAgY29uc3Qgc29ydGVkID0gWy4uLmVudHJpZXNdLnNvcnQoKGEsIGIpID0+IGEubmFtZS5sb2NhbGVDb21wYXJlKGIubmFtZSkpO1xuICBsaW5lcy5wdXNoKGAjIyAke2hlYWRpbmd9YCwgJycsIGB8ICR7Y29sdW1uTGFiZWx9IHwgRGVzY3JpcHRpb24gfGAsICd8IDotLSB8IDotLSB8Jyk7XG4gIGZvciAoY29uc3QgZW50cnkgb2Ygc29ydGVkKSB7XG4gICAgbGluZXMucHVzaChgfCBbJHtlbnRyeS5uYW1lfV0oLi8ke3RvVHlwZVJvdXRlU2VnbWVudChlbnRyeS5uYW1lc3BhY2UsIGVudHJ5Lm5hbWUpfS8pIHwgJHtlc2NhcGVNYXJrZG93bihyZXNvbHZlTGlua3MoZW50cnkuZGVzY3JpcHRpb24sIGFsbFR5cGVzLCBuYW1lc3BhY2UpKX0gfGApO1xuICB9XG4gIGxpbmVzLnB1c2goJycpO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQU9BLFNBQVMsOEJBQThCO0FBQ3ZDLFNBQVMseUJBQXlCO0FBQ2xDLFNBQVMsaUJBQWlCO0FBQzFCLFNBQVMsWUFBWTtBQVlyQixTQUFTLHFCQUFxQjtBQUM5QjtBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBQ1AsU0FBUyx5QkFBeUI7QUFDbEM7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFD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
|
|
@@ -200,7 +200,11 @@ function slugifyOverloadKey(overloadKey) {
|
|
|
200
200
|
}
|
|
201
201
|
const OG_DESCRIPTION_MAX_LENGTH = 160;
|
|
202
202
|
function stripMarkdown(text) {
|
|
203
|
-
const plain = replaceRegExpMatches(
|
|
203
|
+
const plain = replaceRegExpMatches(
|
|
204
|
+
text,
|
|
205
|
+
/\{@link\s+(?<target>[^|}]+?)(?:\s*\|\s*(?<display>[^}]+?))?\s*\}/g,
|
|
206
|
+
(match) => getOptionalNamedGroup(match, "display") ?? getMandatoryNamedGroup(match, "target")
|
|
207
|
+
).replaceAll(/\[(?<text>[^\]]+)\]\([^)]+\)/g, "$<text>").replaceAll(/[`*_~]/g, "").replaceAll(/\s+/g, " ").trim();
|
|
204
208
|
if (plain.length <= OG_DESCRIPTION_MAX_LENGTH) {
|
|
205
209
|
return plain;
|
|
206
210
|
}
|
|
@@ -236,4 +240,4 @@ export {
|
|
|
236
240
|
stripMarkdown,
|
|
237
241
|
truncateSignature
|
|
238
242
|
};
|
|
239
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9kb2NzLXNpdGUvYXBpLWRvYy10ZXh0LXV0aWxzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBUZXh0L21hcmtkb3duL2VzY2FwaW5nIHV0aWxpdGllcyBhbmQgaWRlbnRpZmllciBoZWxwZXJzIGZvciB0aGUgQVBJIGRvY3VtZW50YXRpb24gZ2VuZXJhdG9yLlxuICovXG5cbmltcG9ydCB7XG4gIGdldE1hbmRhdG9yeU5hbWVkR3JvdXAsXG4gIGdldE9wdGlvbmFsTmFtZWRHcm91cFxufSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvcmVnLWV4cCc7XG5pbXBvcnQgeyBta2RpciB9IGZyb20gJ25vZGU6ZnMvcHJvbWlzZXMnO1xuaW1wb3J0IHsgZGlybmFtZSB9IGZyb20gJ25vZGU6cGF0aCc7XG5cbmltcG9ydCB0eXBlIHtcbiAgTWFya2Rvd25TZWdtZW50LFxuICBNZW1iZXJJbmZvLFxuICBUeXBlSW5mb1xufSBmcm9tICcuL2FwaS1kb2MtdHlwZXMudHMnO1xuXG5pbXBvcnQgeyBFVkVOVF9NRVRIT0RTIH0gZnJvbSAnLi9hcGktZG9jLWNvbnN0YW50cy50cyc7XG5pbXBvcnQgeyByZWdpc3RlclBhY2thZ2VEZWNsYXJhdGlvbiB9IGZyb20gJy4vYXBpLWRvYy1wYWNrYWdlLXNpdGVzLnRzJztcbmltcG9ydCB7IHRvUm91dGVTZWdtZW50IH0gZnJvbSAnLi9hcGktZG9jLXJvdXRlLXNlZ21lbnRzLnRzJztcbmltcG9ydCB7IGdldEFwaURvY1NldHRpbmdzIH0gZnJvbSAnLi9hcGktZG9jLXNldHRpbmdzLnRzJztcblxuaW50ZXJmYWNlIE9wZW5GZW5jZSB7XG4gIHJlYWRvbmx5IGNsb3NlUmU6IFJlZ0V4cDtcbiAgcmVhZG9ubHkgbGFuZzogc3RyaW5nO1xufVxuXG4vKipcbiAqIENvbXB1dGUgYW4gb3ZlcmxvYWQga2V5IGZvciBtZXRob2RzIHdpdGggZGlzdGluZ3Vpc2hpbmcgZmlyc3QgcGFyYW0gKGUuZy4gb24oJ2NoYW5nZWQnLC4uLikpXG4gKlxuICogQHBhcmFtIG1ldGhvZCAtIFRoZSBtZXRob2QuXG4gKiBAcmV0dXJucyBUaGUgb3ZlcmxvYWQga2V5LlxuICovXG5leHBvcnQgZnVuY3Rpb24gY29tcHV0ZU92ZXJsb2FkS2V5KG1ldGhvZDogTWVtYmVySW5mbyk6IHN0cmluZyB7XG4gIGlmIChFVkVOVF9NRVRIT0RTLmhhcyhtZXRob2QubmFtZSkgJiYgbWV0aG9kLnBhcmFtZXRlcnMubGVuZ3RoID4gMCkge1xuICAgIGNvbnN0IGZpcnN0UGFyYW1ldGVyID0gbWV0aG9kLnBhcmFtZXRlcnNbMF07XG4gICAgaWYgKGZpcnN0UGFyYW1ldGVyPy50eXBlLnN0YXJ0c1dpdGgoJ1wiJykgfHwgZmlyc3RQYXJhbWV0ZXI/LnR5cGUuc3RhcnRzV2l0aCgnXFwnJykpIHtcbiAgICAgIGNvbnN0IG5vcm1hbGl6ZWRUeXBlID0gZmlyc3RQYXJhbWV0ZXIudHlwZS5yZXBsYWNlQWxsKCdcIicsICdcXCcnKTtcbiAgICAgIHJldHVybiBgJHttZXRob2QubmFtZX0oJHtub3JtYWxpemVkVHlwZX0pYDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG1ldGhvZC5uYW1lO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgdGhlIGZvbGRlciBhIGZpbGUgaXMgYWJvdXQgdG8gYmUgd3JpdHRlbiB0by5cbiAqXG4gKiBAcGFyYW0gZmlsZVBhdGggLSBUaGUgcGF0aCBvZiB0aGUgZmlsZSBhYm91dCB0byBiZSB3cml0dGVuLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZW5zdXJlRGlyZWN0b3J5KGZpbGVQYXRoOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgYXdhaXQgbWtkaXIoZGlybmFtZShmaWxlUGF0aCksIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xufVxuXG4vKipcbiAqIEVzY2FwZSB0ZXh0IGZvciB1c2UgaW5zaWRlIGEgSlMgc3RyaW5nIHdpdGhpbiBhIEpTWCBleHByZXNzaW9uOiB7Li4ue2tleTogXCIuLi5cIn19XG4gKlxuICogQHBhcmFtIHRleHQgLSBUaGUgdGV4dCB0byBlc2NhcGUuXG4gKiBAcmV0dXJucyBUaGUgZXNjYXBlZCB0ZXh0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gZXNjYXBlSnNTdHJpbmcodGV4dDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHRleHQucmVwbGFjZUFsbCgnXFxcXCcsICdcXFxcXFxcXCcpLnJlcGxhY2VBbGwoJ1wiJywgU3RyaW5nLnJhd2BcXFwiYCkucmVwbGFjZUFsbCgnXFxuJywgJyAnKTtcbn1cblxuLyoqXG4gKiBFc2NhcGUgdGV4dCBmb3IgdXNlIGluc2lkZSBhIEpTWCBhdHRyaWJ1dGU6IGF0dHI9XCIuLi5cIiAoTURYIHVzZXMgSFRNTC1zdHlsZSBwYXJzaW5nKVxuICpcbiAqIEBwYXJhbSB0ZXh0IC0gVGhlIHRleHQgdG8gZXNjYXBlLlxuICogQHJldHVybnMgVGhlIGVzY2FwZWQgdGV4dC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVzY2FwZUpzeEF0dHJpYnV0ZSh0ZXh0OiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gdGV4dC5yZXBsYWNlQWxsKCcmJywgJyZhbXA7JykucmVwbGFjZUFsbCgnXCInLCAnJnF1b3Q7JykucmVwbGFjZUFsbCgnXFxuJywgJyAnKTtcbn1cblxuLyoqXG4gKiBFc2NhcGUgdGV4dCBmb3IgYSBtYXJrZG93biB0YWJsZSBjZWxsLlxuICpcbiAqIEBwYXJhbSB0ZXh0IC0gVGhlIHRleHQgdG8gZXNjYXBlLlxuICogQHJldHVybnMgVGhlIGVzY2FwZWQgdGV4dC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVzY2FwZU1hcmtkb3duKHRleHQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiB0ZXh0LnJlcGxhY2VBbGwoJ3wnLCBTdHJpbmcucmF3YFxcfGApLnJlcGxhY2VBbGwoJ1xcbicsICcgJykucmVwbGFjZUFsbCgneycsIFN0cmluZy5yYXdgXFx7YCkucmVwbGFjZUFsbCgnfScsIFN0cmluZy5yYXdgXFx9YCk7XG59XG5cbi8qKlxuICogRXNjYXBlIGFuZ2xlIGJyYWNrZXRzIHNvIE1EWCBkb2VzIG5vdCByZWFkIHRoZW0gYXMgSlNYLlxuICpcbiAqIEBwYXJhbSB0ZXh0IC0gVGhlIHRleHQgdG8gZXNjYXBlLlxuICogQHJldHVybnMgVGhlIGVzY2FwZWQgdGV4dC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVzY2FwZU1keEFuZ2xlQnJhY2tldHModGV4dDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHRleHQucmVwbGFjZUFsbCgnPCcsIFN0cmluZy5yYXdgXFw8YCkucmVwbGFjZUFsbCgnPicsIFN0cmluZy5yYXdgXFw+YCk7XG59XG5cbi8qKlxuICogRXNjYXBlIGN1cmx5IGJyYWNlcyBpbiBNRFggbWFya2Rvd24gY29udGVudCB0byBwcmV2ZW50IEpTWCBleHByZXNzaW9uIHBhcnNpbmdcbiAqXG4gKiBAcGFyYW0gdGV4dCAtIFRoZSB0ZXh0IHRvIGVzY2FwZS5cbiAqIEByZXR1cm5zIFRoZSBlc2NhcGVkIHRleHQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlc2NhcGVNZHhCcmFjZXModGV4dDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHRleHQucmVwbGFjZUFsbCgneycsIFN0cmluZy5yYXdgXFx7YCkucmVwbGFjZUFsbCgnfScsIFN0cmluZy5yYXdgXFx9YCk7XG59XG5cbi8qKlxuICogRXNjYXBlIHRleHQgZm9yIGEgZG91YmxlLXF1b3RlZCBZQU1MIHZhbHVlLlxuICpcbiAqIEBwYXJhbSB0ZXh0IC0gVGhlIHRleHQgdG8gZXNjYXBlLlxuICogQHJldHVybnMgVGhlIGVzY2FwZWQgdGV4dC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVzY2FwZVlhbWwodGV4dDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHRleHQucmVwbGFjZUFsbCgnXCInLCBTdHJpbmcucmF3YFxcXCJgKTtcbn1cblxuY29uc3QgU0lHTkFUVVJFX01BWF9MRU5HVEggPSAxNjA7XG5jb25zdCBJTVBPUlRfUVVBTElGSUVSX1JFR19FWFAgPSAvaW1wb3J0XFwoKD88UXVvdGU+W1wiJ10pW15cIiddK1xcazxRdW90ZT5cXClcXC4vZztcbmNvbnN0IElNUE9SVF9UWVBFX1JFR19FWFAgPSAvaW1wb3J0XFwoKD88UXVvdGU+W1wiJ10pKD88UGF0aD5bXlwiJ10rKVxcazxRdW90ZT5cXClcXC4oPzxOYW1lPltBLVphLXpfJF1bXFx3JF0qKS9nO1xuXG4vKipcbiAqIEVzY2FwZSBNRFgtdW5zYWZlIGNoYXJhY3RlcnMgKGA8YCwgYHtgLCBgfWApIGluIHByb3NlIHRleHQsIHdoaWxlIGxlYXZpbmcgaW5saW5lIGNvZGUgc3BhbnNcbiAqIChgYCBgY29kZWAgYGApIGFuZCBtYXJrZG93biBsaW5rcyAoYFt0ZXh0XSh1cmwpYCkgdW50b3VjaGVkLiBNRFggcGFyc2VzIGJhcmUgYDxgL2B7YCBpbiBwcm9zZSBhc1xuICogSlNYL2V4cHJlc3Npb25zLCBzbyB0aGV5IG11c3QgYmUgYmFja3NsYXNoLWVzY2FwZWQgdG8gcmVuZGVyIGFzIGxpdGVyYWwgdGV4dC5cbiAqXG4gKiBAcGFyYW0gdGV4dCAtIFRoZSBwcm9zZSB0byBlc2NhcGUuXG4gKiBAcmV0dXJucyBUaGUgZXNjYXBlZCBwcm9zZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVzY2FwZU1keFByb3NlKHRleHQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IHByb3RlY3RlZFBhdHRlcm4gPSAvYFteYF0qYHxcXFtbXlxcXV0qXFxdXFwoW14pXSpcXCkvZztcbiAgbGV0IHJlc3VsdCA9ICcnO1xuICBsZXQgbGFzdEluZGV4ID0gMDtcbiAgZm9yIChjb25zdCBtYXRjaCBvZiB0ZXh0Lm1hdGNoQWxsKHByb3RlY3RlZFBhdHRlcm4pKSB7XG4gICAgY29uc3QgaW5kZXggPSBtYXRjaC5pbmRleDtcbiAgICByZXN1bHQgKz0gZXNjYXBlTWR4UHJvc2VDaGFycyh0ZXh0LnNsaWNlKGxhc3RJbmRleCwgaW5kZXgpKTtcbiAgICByZXN1bHQgKz0gbWF0Y2hbMF07XG4gICAgbGFzdEluZGV4ID0gaW5kZXggKyBtYXRjaFswXS5sZW5ndGg7XG4gIH1cbiAgcmVzdWx0ICs9IGVzY2FwZU1keFByb3NlQ2hhcnModGV4dC5zbGljZShsYXN0SW5kZXgpKTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBDb2xsYXBzZSBzaW5nbGUgbmV3bGluZXMgd2l0aGluIHBhcmFncmFwaHMgdG8gc3BhY2VzLCBwcmVzZXJ2ZSBkb3VibGUgbmV3bGluZXMgYXMgcGFyYWdyYXBoIGJyZWFrcy5cbiAqIEZlbmNlZCBjb2RlIGJsb2NrcyAoYmFja3RpY2sgb3IgdGlsZGUgZmVuY2VzKSBhcmUgcHJlc2VydmVkIHZlcmJhdGltIOKAlCB0aGVpciBpbnRlcm5hbCBuZXdsaW5lcyBhcmUgTk9UIGZvbGRlZCxcbiAqIHNvIGVtYmVkZGVkIGNvZGUgc3Vydml2ZXMgdG8gYmUgcmUtZW1pdHRlZCBhcyBhIHJlYWwgY29kZSBmZW5jZSBkb3duc3RyZWFtLlxuICpcbiAqIEBwYXJhbSB0ZXh0IC0gVGhlIHRleHQuXG4gKiBAcmV0dXJucyBUaGUgZm9sZGVkIHRleHQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmb2xkVHNEb2NQYXJhZ3JhcGhzKHRleHQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IHNlZ21lbnRzID0gc2VnbWVudE1hcmtkb3duKHRleHQpO1xuICByZXR1cm4gc2VnbWVudHNcbiAgICAubWFwKChzZWcpID0+IHtcbiAgICAgIHJldHVybiBzZWcudHlwZSA9PT0gJ2NvZGUnXG4gICAgICAgID8gYFxcYFxcYFxcYCR7c2VnLmxhbmd9XFxuJHtzZWcudGV4dH1cXG5cXGBcXGBcXGBgXG4gICAgICAgIDogc2VnLnRleHRcbiAgICAgICAgICAuc3BsaXQoL1xcbnsyLH0vKVxuICAgICAgICAgIC5tYXAoKHBhcmFncmFwaCkgPT4gcGFyYWdyYXBoLnJlcGxhY2VBbGwoJ1xcbicsICcgJykpXG4gICAgICAgICAgLmpvaW4oJ1xcblxcbicpO1xuICAgIH0pXG4gICAgLm1hcCgoc2VnbWVudCkgPT4gc2VnbWVudC50cmltKCkpXG4gICAgLmZpbHRlcihCb29sZWFuKVxuICAgIC5qb2luKCdcXG5cXG4nKTtcbn1cblxuLyoqXG4gKiBUaGUgdHlwZSdzIG5hbWUgd2l0aCBpdHMgdHlwZSBwYXJhbWV0ZXJzLCB3aXRob3V0IHRoZWlyIGNvbnN0cmFpbnRzLlxuICpcbiAqIEBwYXJhbSBuYW1lIC0gVGhlIHR5cGUncyBuYW1lLlxuICogQHBhcmFtIGluZm8gLSBUaGUgZG9jdW1lbnRlZCB0eXBlLlxuICogQHJldHVybnMgVGhlIG5hbWUgd2l0aCBpdHMgYmFyZSB0eXBlIHBhcmFtZXRlcnMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXREaXNwbGF5TmFtZShuYW1lOiBzdHJpbmcsIGluZm86IFR5cGVJbmZvKTogc3RyaW5nIHtcbiAgaWYgKGluZm8udHlwZVBhcmFtZXRlcnMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIG5hbWU7XG4gIH1cbiAgY29uc3QgYmFyZVBhcmFtcyA9IGluZm8udHlwZVBhcmFtZXRlcnMubWFwKCh0cCkgPT4gdHAucmVwbGFjZSgvXFxzK2V4dGVuZHNcXHMrLiokLywgJycpKTtcbiAgcmV0dXJuIGAke25hbWV9PCR7YmFyZVBhcmFtcy5qb2luKCcsICcpfT5gO1xufVxuXG4vKipcbiAqIEVtaXQgdGhlIGltcG9ydCBzdGF0ZW1lbnQgZm9yIGEgZG9jdW1lbnRlZCBleHBvcnQuXG4gKlxuICogVGhlIHN1YnBhdGggZXF1YWxzIHRoZSB0eXBlJ3MgbmFtZXNwYWNlIChpdHMgc291cmNlIHBhdGggcmVsYXRpdmUgdG8gYHNyY2ApLCBzbyBgc3JjL3N0cmluZy50c2Agb2ZcbiAqIGBAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWJgIGlzIGBAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvc3RyaW5nYC5cbiAqXG4gKiBJbnRlcmZhY2VzIC8gdHlwZSBhbGlhc2VzIC8gZW51bXMgYXJlIGltcG9ydGVkIHdpdGggYGltcG9ydCB0eXBlYDsgY2xhc3NlcyAvIGZ1bmN0aW9ucyAvXG4gKiB2YXJpYWJsZXMgd2l0aCBhIHZhbHVlIGBpbXBvcnRgLlxuICpcbiAqIEBwYXJhbSBpbmZvIC0gVGhlIGRvY3VtZW50ZWQgdHlwZS5cbiAqIEByZXR1cm5zIFRoZSBpbXBvcnQgc3RhdGVtZW50LlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0SW1wb3J0U3RhdGVtZW50KGluZm86IFR5cGVJbmZvKTogc3RyaW5nIHtcbiAgY29uc3QgaXNUeXBlT25seSA9IFsnZW51bScsICdpbnRlcmZhY2UnLCAndHlwZSddLmluY2x1ZGVzKGluZm8ua2luZCk7XG4gIGNvbnN0IGltcG9ydEtleXdvcmQgPSBpc1R5cGVPbmx5ID8gJ2ltcG9ydCB0eXBlJyA6ICdpbXBvcnQnO1xuICByZXR1cm4gYCR7aW1wb3J0S2V5d29yZH0geyAke2luZm8ubmFtZX0gfSBmcm9tICcke2dldEFwaURvY1NldHRpbmdzKCkucGFja2FnZU5hbWV9LyR7aW5mby5uYW1lc3BhY2V9JztgO1xufVxuXG4vKipcbiAqIFRoZSBmb2xkZXIgYSBuYW1lc3BhY2UncyBwYWdlcyBhcmUgd3JpdHRlbiB0by5cbiAqXG4gKiBAcGFyYW0gbmFtZXNwYWNlIC0gVGhlIHR5cGUncyBuYW1lc3BhY2UuXG4gKiBAcmV0dXJucyBUaGUgZm9sZGVyLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0TmFtZXNwYWNlRGlyZWN0b3J5KG5hbWVzcGFjZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIG5hbWVzcGFjZTtcbn1cblxuLyoqXG4gKiBTYW5pdGl6ZSBhIG1lbWJlciBuYW1lIGZvciB1c2UgaW4gYSBjYXNlLVBSRVNFUlZFRCBVUkwvcm91dGUgc2VnbWVudCAoZS5nLiBgc2hvd05vdGljZWApLlxuICpcbiAqIEBwYXJhbSBuYW1lIC0gVGhlIG1lbWJlcidzIG5hbWUuXG4gKiBAcmV0dXJucyBUaGUgY2FzZS1wcmVzZXJ2ZWQgc2VnbWVudC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1lbWJlclJvdXRlU2VnbWVudChuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gc2x1Z2lmeU1lbWJlck5hbWUobmFtZSk7XG59XG5cbi8qKlxuICogU2FuaXRpemUgYSBtZW1iZXIgbmFtZSBmb3IgdXNlIGFzIGFuIG9uLWRpc2sgRklMRU5BTUUgKGxvd2VyY2FzZWQsIGNvbGxpc2lvbi1zYWZlKS5cbiAqXG4gKiBAcGFyYW0gbmFtZSAtIFRoZSBtZW1iZXIncyBuYW1lLlxuICogQHJldHVybnMgVGhlIGxvd2VyY2FzZWQgZmlsZSBuYW1lIHNlZ21lbnQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtZW1iZXJTbHVnKG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiB0b1JvdXRlU2VnbWVudChzbHVnaWZ5TWVtYmVyTmFtZShuYW1lKSk7XG59XG5cbi8qKlxuICogU2x1Z2lmeSBhbiBvdmVybG9hZCBrZXkgZm9yIGEgY2FzZS1QUkVTRVJWRUQgVVJML3JvdXRlIHNlZ21lbnQ6IG9uKFwiY2hhbmdlZFwiKSAtPiBvbi1jaGFuZ2VkLlxuICpcbiAqIEBwYXJhbSBvdmVybG9hZEtleSAtIFRoZSBvdmVybG9hZCBrZXksIGUuZy4gYG9uKCdjaGFuZ2VkJylgLlxuICogQHJldHVybnMgVGhlIGNhc2UtcHJlc2VydmVkIHNlZ21lbnQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBvdmVybG9hZFJvdXRlU2VnbWVudChvdmVybG9hZEtleTogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHNsdWdpZnlPdmVybG9hZEtleShvdmVybG9hZEtleSk7XG59XG5cbi8qKlxuICogU2x1Z2lmeSBhbiBvdmVybG9hZCBrZXkgZm9yIGFuIG9uLWRpc2sgRklMRU5BTUU6IG9uKFwiY2hhbmdlZFwiKSAtPiBvbi1jaGFuZ2VkIChsb3dlcmNhc2VkKS5cbiAqXG4gKiBAcGFyYW0gb3ZlcmxvYWRLZXkgLSBUaGUgb3ZlcmxvYWQga2V5LCBlLmcuIGBvbignY2hhbmdlZCcpYC5cbiAqIEByZXR1cm5zIFRoZSBsb3dlcmNhc2VkIGZpbGUgbmFtZSBzZWdtZW50LlxuICovXG5leHBvcnQgZnVuY3Rpb24gb3ZlcmxvYWRTbHVnKG92ZXJsb2FkS2V5OiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gdG9Sb3V0ZVNlZ21lbnQoc2x1Z2lmeU92ZXJsb2FkS2V5KG92ZXJsb2FkS2V5KSk7XG59XG5cbi8qKlxuICogUmVwbGFjZSBldmVyeSBtYXRjaCBvZiBhIGdsb2JhbCByZWd1bGFyIGV4cHJlc3Npb24gd2l0aCB3aGF0IGEgcmVwbGFjZXIgYnVpbGRzIGZyb20gdGhlIG1hdGNoLiBUaGUgdHlwZWRcbiAqIGNvdW50ZXJwYXJ0IG9mIGBTdHJpbmcucHJvdG90eXBlLnJlcGxhY2VBbGxgIHdpdGggYSBjYWxsYmFjaywgd2hvc2UgYXJndW1lbnRzIGFyZSB0eXBlZCBvbmx5IHBvc2l0aW9uYWxseS5cbiAqXG4gKiBAcGFyYW0gdGV4dCAtIFRoZSB0ZXh0LlxuICogQHBhcmFtIHJlZ0V4cCAtIFRoZSByZWd1bGFyIGV4cHJlc3Npb247IGl0IG11c3QgY2FycnkgdGhlIGBnYCBmbGFnLlxuICogQHBhcmFtIHJlcGxhY2VyIC0gQnVpbGRzIHRoZSByZXBsYWNlbWVudCBvZiBvbmUgbWF0Y2guXG4gKiBAcmV0dXJucyBUaGUgdGV4dCB3aXRoIGV2ZXJ5IG1hdGNoIHJlcGxhY2VkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVwbGFjZVJlZ0V4cE1hdGNoZXModGV4dDogc3RyaW5nLCByZWdFeHA6IFJlZ0V4cCwgcmVwbGFjZXI6IChtYXRjaDogUmVnRXhwTWF0Y2hBcnJheSkgPT4gc3RyaW5nKTogc3RyaW5nIHtcbiAgbGV0IHJlc3VsdCA9ICcnO1xuICBsZXQgbGFzdEluZGV4ID0gMDtcbiAgZm9yIChjb25zdCBtYXRjaCBvZiB0ZXh0Lm1hdGNoQWxsKHJlZ0V4cCkpIHtcbiAgICByZXN1bHQgKz0gdGV4dC5zbGljZShsYXN0SW5kZXgsIG1hdGNoLmluZGV4KSArIHJlcGxhY2VyKG1hdGNoKTtcbiAgICBsYXN0SW5kZXggPSBtYXRjaC5pbmRleCArIG1hdGNoWzBdLmxlbmd0aDtcbiAgfVxuICByZXR1cm4gcmVzdWx0ICsgdGV4dC5zbGljZShsYXN0SW5kZXgpO1xufVxuXG4vKipcbiAqIFNwbGl0IG1hcmtkb3duIHRleHQgaW50byBhbiBvcmRlcmVkIGxpc3Qgb2YgcHJvc2UgYW5kIGZlbmNlZC1jb2RlIHNlZ21lbnRzLlxuICogQSBmZW5jZWQtY29kZSBzZWdtZW50IGlzIGRlbGltaXRlZCBieSBhIGxpbmUgb2YgMysgYmFja3RpY2tzIG9yIHRpbGRlczsgaXRzIGNvbnRlbnQgaXMgY2FwdHVyZWRcbiAqIHJhdyAobmV2ZXIgZXNjYXBlZCkgc28gaXQgY2FuIGJlIHJlLWVtaXR0ZWQgYXMgYSBsaXRlcmFsIE1EWCBjb2RlIGZlbmNlLlxuICpcbiAqIEBwYXJhbSB0ZXh0IC0gVGhlIHRleHQuXG4gKiBAcmV0dXJucyBUaGUgc2VnbWVudHMsIGluIG9yZGVyLlxuICovXG5leHBvcnQgZnVuY3Rpb24gc2VnbWVudE1hcmtkb3duKHRleHQ6IHN0cmluZyk6IE1hcmtkb3duU2VnbWVudFtdIHtcbiAgY29uc3QgbGluZXMgPSB0ZXh0LnNwbGl0KCdcXG4nKTtcbiAgY29uc3Qgc2VnbWVudHM6IE1hcmtkb3duU2VnbWVudFtdID0gW107XG4gIGxldCBwcm9zZUJ1ZmZlcjogc3RyaW5nW10gPSBbXTtcbiAgbGV0IGNvZGVMaW5lczogc3RyaW5nW10gPSBbXTtcbiAgbGV0IG9wZW5GZW5jZTogbnVsbCB8IE9wZW5GZW5jZSA9IG51bGw7XG4gIGZvciAoY29uc3QgbGluZSBvZiBsaW5lcykge1xuICAgIGlmIChvcGVuRmVuY2UpIHtcbiAgICAgIGlmIChvcGVuRmVuY2UuY2xvc2VSZS50ZXN0KGxpbmUpKSB7XG4gICAgICAgIHNlZ21lbnRzLnB1c2goeyBsYW5nOiBvcGVuRmVuY2UubGFuZywgdGV4dDogY29kZUxpbmVzLmpvaW4oJ1xcbicpLCB0eXBlOiAnY29kZScgfSk7XG4gICAgICAgIG9wZW5GZW5jZSA9IG51bGw7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb2RlTGluZXMucHVzaChsaW5lKTtcbiAgICAgIH1cbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGNvbnN0IG9wZW5NYXRjaCA9IC9eXFxzKig/PGZlbmNlPig/PGZlbmNlQ2hhcj5bYH5dKVxcazxmZW5jZUNoYXI+ezIsfSkoPzxsYW5nPi4qKSQvLmV4ZWMobGluZSk7XG4gICAgaWYgKG9wZW5NYXRjaCkge1xuICAgICAgY29uc3QgZmVuY2VDaGFycyA9IGdldE1hbmRhdG9yeU5hbWVkR3JvdXAob3Blbk1hdGNoLCAnZmVuY2UnKTtcbiAgICAgIGNvbnN0IGZlbmNlQ2hhciA9IGdldE1hbmRhdG9yeU5hbWVkR3JvdXAob3Blbk1hdGNoLCAnZmVuY2VDaGFyJyk7XG4gICAgICBmbHVzaFByb3NlKCk7XG4gICAgICBjb2RlTGluZXMgPSBbXTtcbiAgICAgIG9wZW5GZW5jZSA9IHtcbiAgICAgICAgY2xvc2VSZTogbmV3IFJlZ0V4cChgXlxcXFxzKlxcXFwke2ZlbmNlQ2hhcn17JHtTdHJpbmcoZmVuY2VDaGFycy5sZW5ndGgpfSx9XFxcXHMqJGApLFxuICAgICAgICBsYW5nOiBnZXRNYW5kYXRvcnlOYW1lZEdyb3VwKG9wZW5NYXRjaCwgJ2xhbmcnKS50cmltKClcbiAgICAgIH07XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgcHJvc2VCdWZmZXIucHVzaChsaW5lKTtcbiAgfVxuICAvLyBBbiB1bmNsb3NlZCBmZW5jZSBydW5zIHRvIHRoZSBlbmQgb2YgdGhlIHRleHQuXG4gIGlmIChvcGVuRmVuY2UpIHtcbiAgICBzZWdtZW50cy5wdXNoKHsgbGFuZzogb3BlbkZlbmNlLmxhbmcsIHRleHQ6IGNvZGVMaW5lcy5qb2luKCdcXG4nKSwgdHlwZTogJ2NvZGUnIH0pO1xuICB9XG4gIGZsdXNoUHJvc2UoKTtcbiAgcmV0dXJuIHNlZ21lbnRzO1xuXG4gIGZ1bmN0aW9uIGZsdXNoUHJvc2UoKTogdm9pZCB7XG4gICAgaWYgKHByb3NlQnVmZmVyLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHNlZ21lbnRzLnB1c2goeyB0ZXh0OiBwcm9zZUJ1ZmZlci5qb2luKCdcXG4nKSwgdHlwZTogJ3Byb3NlJyB9KTtcbiAgICBwcm9zZUJ1ZmZlciA9IFtdO1xuICB9XG59XG5cbi8qKlxuICogU3RyaXAgdGhlIGBpbXBvcnQoXCLigKZcIilgIHF1YWxpZmllcnMgdHMtbW9ycGggcHJpbnRzIGJlZm9yZSBhIHR5cGUgdGhhdCBpcyBub3QgaW4gc2NvcGUsIHJlY29yZGluZyBlYWNoIG9uZSdzXG4gKiBkZWNsYXJhdGlvbiBmaWxlIGZpcnN0LCBzaW5jZSBpdCBpcyB0aGUgb25lIHBsYWNlIGEgcHJpbnRlZCB0eXBlIG5hbWVzIHdoZXJlIGl0IHdhcyBkZWNsYXJlZC5cbiAqXG4gKiBAcGFyYW0gdHlwZVRleHQgLSBUaGUgcHJpbnRlZCB0eXBlLlxuICogQHJldHVybnMgVGhlIHR5cGUgd2l0aG91dCBpdHMgaW1wb3J0IHF1YWxpZmllcnMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzaW1wbGlmeVR5cGUodHlwZVRleHQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIGZvciAoY29uc3QgbWF0Y2ggb2YgdHlwZVRleHQubWF0Y2hBbGwoSU1QT1JUX1RZUEVfUkVHX0VYUCkpIHtcbiAgICByZWdpc3RlclBhY2thZ2VEZWNsYXJhdGlvbihnZXRNYW5kYXRvcnlOYW1lZEdyb3VwKG1hdGNoLCAnTmFtZScpLCBnZXRNYW5kYXRvcnlOYW1lZEdyb3VwKG1hdGNoLCAnUGF0aCcpKTtcbiAgfVxuXG4gIHJldHVybiB0eXBlVGV4dC5yZXBsYWNlQWxsKElNUE9SVF9RVUFMSUZJRVJfUkVHX0VYUCwgJycpO1xufVxuXG4vKipcbiAqIE5vcm1hbGl6ZSBhIGNvZGUgc2lnbmF0dXJlIGZvciB0aGUgYHNpZ25hdHVyZTpgIGZyb250bWF0dGVyIC8gT0cgY2FyZDogY29sbGFwc2Ugd2hpdGVzcGFjZSB0b1xuICogc2luZ2xlIHNwYWNlcyBhbmQgdHJ1bmNhdGUgdG8gYSBjYXJkLWZyaWVuZGx5IGxlbmd0aCB3aXRoIGFuIGVsbGlwc2lzLlxuICpcbiAqIEBwYXJhbSBzaWduYXR1cmUgLSBUaGUgc2lnbmF0dXJlLlxuICogQHJldHVybnMgVGhlIG5vcm1hbGl6ZWQgc2lnbmF0dXJlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdHJ1bmNhdGVTaWduYXR1cmUoc2lnbmF0dXJlOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBjb2xsYXBzZWQgPSBzaWduYXR1cmUucmVwbGFjZUFsbCgvXFxzKy9nLCAnICcpLnRyaW0oKTtcbiAgcmV0dXJuIGNvbGxhcHNlZC5sZW5ndGggPD0gU0lHTkFUVVJFX01BWF9MRU5HVEggPyBjb2xsYXBzZWQgOiBgJHtjb2xsYXBzZWQuc2xpY2UoMCwgU0lHTkFUVVJFX01BWF9MRU5HVEggLSAxKS50cmltRW5kKCl94oCmYDtcbn1cblxuZnVuY3Rpb24gc2x1Z2lmeU1lbWJlck5hbWUobmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgY2xlYW5lZCA9IG5hbWVcbiAgICAucmVwbGFjZUFsbCgvXltcIiddfFtcIiddJC9nLCAnJylcbiAgICAucmVwbGFjZUFsbCgvW15hLXpBLVowLTldL2csICctJylcbiAgICAucmVwbGFjZUFsbCgvLSsvZywgJy0nKVxuICAgIC5yZXBsYWNlQWxsKC9eLXwtJC9nLCAnJyk7XG4gIC8vIEEgbWVtYmVyIGxpdGVyYWxseSBuYW1lZCBgaW5kZXhgIHdvdWxkIHdyaXRlIGBpbmRleC5tZHhgLCBjb2xsaWRpbmcgd2l0aCB0aGUgdHlwZS1vdmVydmlld1xuICAvLyBgaW5kZXgubWR4YCBpbiB0aGUgc2FtZSBkaXJlY3RvcnkgKG9uZSBzaWxlbnRseSBvdmVyd3JpdGVzIHRoZSBvdGhlciwgNDA0LWluZyB0aGUgbG9zZXIpLlxuICByZXR1cm4gY2xlYW5lZCA9PT0gJ2luZGV4JyA/ICdpbmRleC1tZW1iZXInIDogKGNsZWFuZWQgfHwgJ3VubmFtZWQnKTtcbn1cblxuZnVuY3Rpb24gc2x1Z2lmeU92ZXJsb2FkS2V5KG92ZXJsb2FkS2V5OiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBzbHVnID0gb3ZlcmxvYWRLZXlcbiAgICAucmVwbGFjZUFsbCgvW1wiJygpXS9nLCAnICcpXG4gICAgLnJlcGxhY2VBbGwoL1teYS16QS1aMC05XFxzXS9nLCAnJylcbiAgICAudHJpbSgpXG4gICAgLnJlcGxhY2VBbGwoL1xccysvZywgJy0nKTtcbiAgLy8gQSBtZXRob2QgbmFtZWQgYGluZGV4YCB3b3VsZCB3cml0ZSBgaW5kZXgubWR4YCBvdmVyIHRoZSB0eXBlLW92ZXJ2aWV3IHBhZ2UsIGV4YWN0bHkgYXMgYSBwcm9wZXJ0eSB3b3VsZC5cbiAgcmV0dXJuIHNsdWcgPT09ICdpbmRleCcgPyAnaW5kZXgtbWVtYmVyJyA6IHNsdWc7XG59XG5cbmNvbnN0IE9HX0RFU0NSSVBUSU9OX01BWF9MRU5HVEggPSAxNjA7XG5cbi8qKlxuICogU3RyaXAgbWFya2Rvd24gZm9ybWF0dGluZyB0byBwbGFpbiB0ZXh0IGZvciB1c2UgaW4gbWV0YSBkZXNjcmlwdGlvbnNcbiAqXG4gKiBAcGFyYW0gdGV4dCAtIFRoZSB0ZXh0LlxuICogQHJldHVybnMgVGhlIHBsYWluIHRleHQsIGF0IG1vc3QgMTYwIGNoYXJhY3RlcnMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdHJpcE1hcmtkb3duKHRleHQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IHBsYWluID0gcmVwbGFjZVJlZ0V4cE1hdGNoZXModGV4dCwgL1xce0BsaW5rXFxzKyg/OltefH1dKz8pKD86XFxzKlxcfFxccyooPzxkaXNwbGF5PltefV0rPykpP1xcfS9nLCAobWF0Y2gpID0+IGdldE9wdGlvbmFsTmFtZWRHcm91cChtYXRjaCwgJ2Rpc3BsYXknKSA/PyAnJylcbiAgICAucmVwbGFjZUFsbCgvXFxbKD88dGV4dD5bXlxcXV0rKVxcXVxcKFteKV0rXFwpL2csICckPHRleHQ+JylcbiAgICAucmVwbGFjZUFsbCgvW2AqX35dL2csICcnKVxuICAgIC5yZXBsYWNlQWxsKC9cXHMrL2csICcgJylcbiAgICAudHJpbSgpO1xuXG4gIGlmIChwbGFpbi5sZW5ndGggPD0gT0dfREVTQ1JJUFRJT05fTUFYX0xFTkdUSCkge1xuICAgIHJldHVybiBwbGFpbjtcbiAgfVxuXG4gIC8vIEN1dCBiYWNrIHRvIGEgd29yZCBib3VuZGFyeTogYSByYXcgc2xpY2UgZW5kcyBkZXNjcmlwdGlvbnMgbWlkLXdvcmQgKGDigKYgdGhlIHN0cmluZyBtb2R1bGUgaXMgb2JgKS5cbiAgLy8gVGhhdCBmcmFnbWVudCBpcyB3aGF0IHJlYWRlcnMgc2VlIG9uIHRoZSBPRyBjYXJkIGFuZCBpbiBzZWFyY2ggcmVzdWx0cy5cbiAgY29uc3QgY2xpcHBlZCA9IHBsYWluLnNsaWNlKDAsIE9HX0RFU0NSSVBUSU9OX01BWF9MRU5HVEggLSAxKTtcbiAgY29uc3QgbGFzdFNwYWNlSW5kZXggPSBjbGlwcGVkLmxhc3RJbmRleE9mKCcgJyk7XG4gIGNvbnN0IHRydW5jYXRlZCA9IGxhc3RTcGFjZUluZGV4ID4gMCA/IGNsaXBwZWQuc2xpY2UoMCwgbGFzdFNwYWNlSW5kZXgpIDogY2xpcHBlZDtcbiAgcmV0dXJuIGAke3RydW5jYXRlZC5yZXBsYWNlKC9bLDs6Llxcc10rJC8sICcnKX3igKZgO1xufVxuXG5mdW5jdGlvbiBlc2NhcGVNZHhQcm9zZUNoYXJzKGNodW5rOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gY2h1bmsucmVwbGFjZUFsbCgvWzx7fV0vZywgKGNoYXIpID0+IGBcXFxcJHtjaGFyfWApO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQU1BO0FBQUEsRUFDRTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBQ1AsU0FBUyxhQUFhO0FBQ3RCLFNBQVMsZUFBZTtBQVF4QixTQUFTLHFCQUFxQjtBQUM5QixTQUFTLGtDQUFrQztBQUMzQyxTQUFTLHNCQUFzQjtBQUMvQixTQUFTLHlCQUF5QjtBQWEzQixTQUFTLG1CQUFtQixRQUE0QjtBQUM3RCxNQUFJLGNBQWMsSUFBSSxP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
|
|
243
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9kb2NzLXNpdGUvYXBpLWRvYy10ZXh0LXV0aWxzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBUZXh0L21hcmtkb3duL2VzY2FwaW5nIHV0aWxpdGllcyBhbmQgaWRlbnRpZmllciBoZWxwZXJzIGZvciB0aGUgQVBJIGRvY3VtZW50YXRpb24gZ2VuZXJhdG9yLlxuICovXG5cbmltcG9ydCB7XG4gIGdldE1hbmRhdG9yeU5hbWVkR3JvdXAsXG4gIGdldE9wdGlvbmFsTmFtZWRHcm91cFxufSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvcmVnLWV4cCc7XG5pbXBvcnQgeyBta2RpciB9IGZyb20gJ25vZGU6ZnMvcHJvbWlzZXMnO1xuaW1wb3J0IHsgZGlybmFtZSB9IGZyb20gJ25vZGU6cGF0aCc7XG5cbmltcG9ydCB0eXBlIHtcbiAgTWFya2Rvd25TZWdtZW50LFxuICBNZW1iZXJJbmZvLFxuICBUeXBlSW5mb1xufSBmcm9tICcuL2FwaS1kb2MtdHlwZXMudHMnO1xuXG5pbXBvcnQgeyBFVkVOVF9NRVRIT0RTIH0gZnJvbSAnLi9hcGktZG9jLWNvbnN0YW50cy50cyc7XG5pbXBvcnQgeyByZWdpc3RlclBhY2thZ2VEZWNsYXJhdGlvbiB9IGZyb20gJy4vYXBpLWRvYy1wYWNrYWdlLXNpdGVzLnRzJztcbmltcG9ydCB7IHRvUm91dGVTZWdtZW50IH0gZnJvbSAnLi9hcGktZG9jLXJvdXRlLXNlZ21lbnRzLnRzJztcbmltcG9ydCB7IGdldEFwaURvY1NldHRpbmdzIH0gZnJvbSAnLi9hcGktZG9jLXNldHRpbmdzLnRzJztcblxuaW50ZXJmYWNlIE9wZW5GZW5jZSB7XG4gIHJlYWRvbmx5IGNsb3NlUmU6IFJlZ0V4cDtcbiAgcmVhZG9ubHkgbGFuZzogc3RyaW5nO1xufVxuXG4vKipcbiAqIENvbXB1dGUgYW4gb3ZlcmxvYWQga2V5IGZvciBtZXRob2RzIHdpdGggZGlzdGluZ3Vpc2hpbmcgZmlyc3QgcGFyYW0gKGUuZy4gb24oJ2NoYW5nZWQnLC4uLikpXG4gKlxuICogQHBhcmFtIG1ldGhvZCAtIFRoZSBtZXRob2QuXG4gKiBAcmV0dXJucyBUaGUgb3ZlcmxvYWQga2V5LlxuICovXG5leHBvcnQgZnVuY3Rpb24gY29tcHV0ZU92ZXJsb2FkS2V5KG1ldGhvZDogTWVtYmVySW5mbyk6IHN0cmluZyB7XG4gIGlmIChFVkVOVF9NRVRIT0RTLmhhcyhtZXRob2QubmFtZSkgJiYgbWV0aG9kLnBhcmFtZXRlcnMubGVuZ3RoID4gMCkge1xuICAgIGNvbnN0IGZpcnN0UGFyYW1ldGVyID0gbWV0aG9kLnBhcmFtZXRlcnNbMF07XG4gICAgaWYgKGZpcnN0UGFyYW1ldGVyPy50eXBlLnN0YXJ0c1dpdGgoJ1wiJykgfHwgZmlyc3RQYXJhbWV0ZXI/LnR5cGUuc3RhcnRzV2l0aCgnXFwnJykpIHtcbiAgICAgIGNvbnN0IG5vcm1hbGl6ZWRUeXBlID0gZmlyc3RQYXJhbWV0ZXIudHlwZS5yZXBsYWNlQWxsKCdcIicsICdcXCcnKTtcbiAgICAgIHJldHVybiBgJHttZXRob2QubmFtZX0oJHtub3JtYWxpemVkVHlwZX0pYDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG1ldGhvZC5uYW1lO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgdGhlIGZvbGRlciBhIGZpbGUgaXMgYWJvdXQgdG8gYmUgd3JpdHRlbiB0by5cbiAqXG4gKiBAcGFyYW0gZmlsZVBhdGggLSBUaGUgcGF0aCBvZiB0aGUgZmlsZSBhYm91dCB0byBiZSB3cml0dGVuLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZW5zdXJlRGlyZWN0b3J5KGZpbGVQYXRoOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgYXdhaXQgbWtkaXIoZGlybmFtZShmaWxlUGF0aCksIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xufVxuXG4vKipcbiAqIEVzY2FwZSB0ZXh0IGZvciB1c2UgaW5zaWRlIGEgSlMgc3RyaW5nIHdpdGhpbiBhIEpTWCBleHByZXNzaW9uOiB7Li4ue2tleTogXCIuLi5cIn19XG4gKlxuICogQHBhcmFtIHRleHQgLSBUaGUgdGV4dCB0byBlc2NhcGUuXG4gKiBAcmV0dXJucyBUaGUgZXNjYXBlZCB0ZXh0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gZXNjYXBlSnNTdHJpbmcodGV4dDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHRleHQucmVwbGFjZUFsbCgnXFxcXCcsICdcXFxcXFxcXCcpLnJlcGxhY2VBbGwoJ1wiJywgU3RyaW5nLnJhd2BcXFwiYCkucmVwbGFjZUFsbCgnXFxuJywgJyAnKTtcbn1cblxuLyoqXG4gKiBFc2NhcGUgdGV4dCBmb3IgdXNlIGluc2lkZSBhIEpTWCBhdHRyaWJ1dGU6IGF0dHI9XCIuLi5cIiAoTURYIHVzZXMgSFRNTC1zdHlsZSBwYXJzaW5nKVxuICpcbiAqIEBwYXJhbSB0ZXh0IC0gVGhlIHRleHQgdG8gZXNjYXBlLlxuICogQHJldHVybnMgVGhlIGVzY2FwZWQgdGV4dC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVzY2FwZUpzeEF0dHJpYnV0ZSh0ZXh0OiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gdGV4dC5yZXBsYWNlQWxsKCcmJywgJyZhbXA7JykucmVwbGFjZUFsbCgnXCInLCAnJnF1b3Q7JykucmVwbGFjZUFsbCgnXFxuJywgJyAnKTtcbn1cblxuLyoqXG4gKiBFc2NhcGUgdGV4dCBmb3IgYSBtYXJrZG93biB0YWJsZSBjZWxsLlxuICpcbiAqIEBwYXJhbSB0ZXh0IC0gVGhlIHRleHQgdG8gZXNjYXBlLlxuICogQHJldHVybnMgVGhlIGVzY2FwZWQgdGV4dC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVzY2FwZU1hcmtkb3duKHRleHQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiB0ZXh0LnJlcGxhY2VBbGwoJ3wnLCBTdHJpbmcucmF3YFxcfGApLnJlcGxhY2VBbGwoJ1xcbicsICcgJykucmVwbGFjZUFsbCgneycsIFN0cmluZy5yYXdgXFx7YCkucmVwbGFjZUFsbCgnfScsIFN0cmluZy5yYXdgXFx9YCk7XG59XG5cbi8qKlxuICogRXNjYXBlIGFuZ2xlIGJyYWNrZXRzIHNvIE1EWCBkb2VzIG5vdCByZWFkIHRoZW0gYXMgSlNYLlxuICpcbiAqIEBwYXJhbSB0ZXh0IC0gVGhlIHRleHQgdG8gZXNjYXBlLlxuICogQHJldHVybnMgVGhlIGVzY2FwZWQgdGV4dC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVzY2FwZU1keEFuZ2xlQnJhY2tldHModGV4dDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHRleHQucmVwbGFjZUFsbCgnPCcsIFN0cmluZy5yYXdgXFw8YCkucmVwbGFjZUFsbCgnPicsIFN0cmluZy5yYXdgXFw+YCk7XG59XG5cbi8qKlxuICogRXNjYXBlIGN1cmx5IGJyYWNlcyBpbiBNRFggbWFya2Rvd24gY29udGVudCB0byBwcmV2ZW50IEpTWCBleHByZXNzaW9uIHBhcnNpbmdcbiAqXG4gKiBAcGFyYW0gdGV4dCAtIFRoZSB0ZXh0IHRvIGVzY2FwZS5cbiAqIEByZXR1cm5zIFRoZSBlc2NhcGVkIHRleHQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlc2NhcGVNZHhCcmFjZXModGV4dDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHRleHQucmVwbGFjZUFsbCgneycsIFN0cmluZy5yYXdgXFx7YCkucmVwbGFjZUFsbCgnfScsIFN0cmluZy5yYXdgXFx9YCk7XG59XG5cbi8qKlxuICogRXNjYXBlIHRleHQgZm9yIGEgZG91YmxlLXF1b3RlZCBZQU1MIHZhbHVlLlxuICpcbiAqIEBwYXJhbSB0ZXh0IC0gVGhlIHRleHQgdG8gZXNjYXBlLlxuICogQHJldHVybnMgVGhlIGVzY2FwZWQgdGV4dC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVzY2FwZVlhbWwodGV4dDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHRleHQucmVwbGFjZUFsbCgnXCInLCBTdHJpbmcucmF3YFxcXCJgKTtcbn1cblxuY29uc3QgU0lHTkFUVVJFX01BWF9MRU5HVEggPSAxNjA7XG5jb25zdCBJTVBPUlRfUVVBTElGSUVSX1JFR19FWFAgPSAvaW1wb3J0XFwoKD88UXVvdGU+W1wiJ10pW15cIiddK1xcazxRdW90ZT5cXClcXC4vZztcbmNvbnN0IElNUE9SVF9UWVBFX1JFR19FWFAgPSAvaW1wb3J0XFwoKD88UXVvdGU+W1wiJ10pKD88UGF0aD5bXlwiJ10rKVxcazxRdW90ZT5cXClcXC4oPzxOYW1lPltBLVphLXpfJF1bXFx3JF0qKS9nO1xuXG4vKipcbiAqIEVzY2FwZSBNRFgtdW5zYWZlIGNoYXJhY3RlcnMgKGA8YCwgYHtgLCBgfWApIGluIHByb3NlIHRleHQsIHdoaWxlIGxlYXZpbmcgaW5saW5lIGNvZGUgc3BhbnNcbiAqIChgYCBgY29kZWAgYGApIGFuZCBtYXJrZG93biBsaW5rcyAoYFt0ZXh0XSh1cmwpYCkgdW50b3VjaGVkLiBNRFggcGFyc2VzIGJhcmUgYDxgL2B7YCBpbiBwcm9zZSBhc1xuICogSlNYL2V4cHJlc3Npb25zLCBzbyB0aGV5IG11c3QgYmUgYmFja3NsYXNoLWVzY2FwZWQgdG8gcmVuZGVyIGFzIGxpdGVyYWwgdGV4dC5cbiAqXG4gKiBAcGFyYW0gdGV4dCAtIFRoZSBwcm9zZSB0byBlc2NhcGUuXG4gKiBAcmV0dXJucyBUaGUgZXNjYXBlZCBwcm9zZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVzY2FwZU1keFByb3NlKHRleHQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IHByb3RlY3RlZFBhdHRlcm4gPSAvYFteYF0qYHxcXFtbXlxcXV0qXFxdXFwoW14pXSpcXCkvZztcbiAgbGV0IHJlc3VsdCA9ICcnO1xuICBsZXQgbGFzdEluZGV4ID0gMDtcbiAgZm9yIChjb25zdCBtYXRjaCBvZiB0ZXh0Lm1hdGNoQWxsKHByb3RlY3RlZFBhdHRlcm4pKSB7XG4gICAgY29uc3QgaW5kZXggPSBtYXRjaC5pbmRleDtcbiAgICByZXN1bHQgKz0gZXNjYXBlTWR4UHJvc2VDaGFycyh0ZXh0LnNsaWNlKGxhc3RJbmRleCwgaW5kZXgpKTtcbiAgICByZXN1bHQgKz0gbWF0Y2hbMF07XG4gICAgbGFzdEluZGV4ID0gaW5kZXggKyBtYXRjaFswXS5sZW5ndGg7XG4gIH1cbiAgcmVzdWx0ICs9IGVzY2FwZU1keFByb3NlQ2hhcnModGV4dC5zbGljZShsYXN0SW5kZXgpKTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBDb2xsYXBzZSBzaW5nbGUgbmV3bGluZXMgd2l0aGluIHBhcmFncmFwaHMgdG8gc3BhY2VzLCBwcmVzZXJ2ZSBkb3VibGUgbmV3bGluZXMgYXMgcGFyYWdyYXBoIGJyZWFrcy5cbiAqIEZlbmNlZCBjb2RlIGJsb2NrcyAoYmFja3RpY2sgb3IgdGlsZGUgZmVuY2VzKSBhcmUgcHJlc2VydmVkIHZlcmJhdGltIOKAlCB0aGVpciBpbnRlcm5hbCBuZXdsaW5lcyBhcmUgTk9UIGZvbGRlZCxcbiAqIHNvIGVtYmVkZGVkIGNvZGUgc3Vydml2ZXMgdG8gYmUgcmUtZW1pdHRlZCBhcyBhIHJlYWwgY29kZSBmZW5jZSBkb3duc3RyZWFtLlxuICpcbiAqIEBwYXJhbSB0ZXh0IC0gVGhlIHRleHQuXG4gKiBAcmV0dXJucyBUaGUgZm9sZGVkIHRleHQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmb2xkVHNEb2NQYXJhZ3JhcGhzKHRleHQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IHNlZ21lbnRzID0gc2VnbWVudE1hcmtkb3duKHRleHQpO1xuICByZXR1cm4gc2VnbWVudHNcbiAgICAubWFwKChzZWcpID0+IHtcbiAgICAgIHJldHVybiBzZWcudHlwZSA9PT0gJ2NvZGUnXG4gICAgICAgID8gYFxcYFxcYFxcYCR7c2VnLmxhbmd9XFxuJHtzZWcudGV4dH1cXG5cXGBcXGBcXGBgXG4gICAgICAgIDogc2VnLnRleHRcbiAgICAgICAgICAuc3BsaXQoL1xcbnsyLH0vKVxuICAgICAgICAgIC5tYXAoKHBhcmFncmFwaCkgPT4gcGFyYWdyYXBoLnJlcGxhY2VBbGwoJ1xcbicsICcgJykpXG4gICAgICAgICAgLmpvaW4oJ1xcblxcbicpO1xuICAgIH0pXG4gICAgLm1hcCgoc2VnbWVudCkgPT4gc2VnbWVudC50cmltKCkpXG4gICAgLmZpbHRlcihCb29sZWFuKVxuICAgIC5qb2luKCdcXG5cXG4nKTtcbn1cblxuLyoqXG4gKiBUaGUgdHlwZSdzIG5hbWUgd2l0aCBpdHMgdHlwZSBwYXJhbWV0ZXJzLCB3aXRob3V0IHRoZWlyIGNvbnN0cmFpbnRzLlxuICpcbiAqIEBwYXJhbSBuYW1lIC0gVGhlIHR5cGUncyBuYW1lLlxuICogQHBhcmFtIGluZm8gLSBUaGUgZG9jdW1lbnRlZCB0eXBlLlxuICogQHJldHVybnMgVGhlIG5hbWUgd2l0aCBpdHMgYmFyZSB0eXBlIHBhcmFtZXRlcnMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXREaXNwbGF5TmFtZShuYW1lOiBzdHJpbmcsIGluZm86IFR5cGVJbmZvKTogc3RyaW5nIHtcbiAgaWYgKGluZm8udHlwZVBhcmFtZXRlcnMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIG5hbWU7XG4gIH1cbiAgY29uc3QgYmFyZVBhcmFtcyA9IGluZm8udHlwZVBhcmFtZXRlcnMubWFwKCh0cCkgPT4gdHAucmVwbGFjZSgvXFxzK2V4dGVuZHNcXHMrLiokLywgJycpKTtcbiAgcmV0dXJuIGAke25hbWV9PCR7YmFyZVBhcmFtcy5qb2luKCcsICcpfT5gO1xufVxuXG4vKipcbiAqIEVtaXQgdGhlIGltcG9ydCBzdGF0ZW1lbnQgZm9yIGEgZG9jdW1lbnRlZCBleHBvcnQuXG4gKlxuICogVGhlIHN1YnBhdGggZXF1YWxzIHRoZSB0eXBlJ3MgbmFtZXNwYWNlIChpdHMgc291cmNlIHBhdGggcmVsYXRpdmUgdG8gYHNyY2ApLCBzbyBgc3JjL3N0cmluZy50c2Agb2ZcbiAqIGBAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWJgIGlzIGBAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvc3RyaW5nYC5cbiAqXG4gKiBJbnRlcmZhY2VzIC8gdHlwZSBhbGlhc2VzIC8gZW51bXMgYXJlIGltcG9ydGVkIHdpdGggYGltcG9ydCB0eXBlYDsgY2xhc3NlcyAvIGZ1bmN0aW9ucyAvXG4gKiB2YXJpYWJsZXMgd2l0aCBhIHZhbHVlIGBpbXBvcnRgLlxuICpcbiAqIEBwYXJhbSBpbmZvIC0gVGhlIGRvY3VtZW50ZWQgdHlwZS5cbiAqIEByZXR1cm5zIFRoZSBpbXBvcnQgc3RhdGVtZW50LlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0SW1wb3J0U3RhdGVtZW50KGluZm86IFR5cGVJbmZvKTogc3RyaW5nIHtcbiAgY29uc3QgaXNUeXBlT25seSA9IFsnZW51bScsICdpbnRlcmZhY2UnLCAndHlwZSddLmluY2x1ZGVzKGluZm8ua2luZCk7XG4gIGNvbnN0IGltcG9ydEtleXdvcmQgPSBpc1R5cGVPbmx5ID8gJ2ltcG9ydCB0eXBlJyA6ICdpbXBvcnQnO1xuICByZXR1cm4gYCR7aW1wb3J0S2V5d29yZH0geyAke2luZm8ubmFtZX0gfSBmcm9tICcke2dldEFwaURvY1NldHRpbmdzKCkucGFja2FnZU5hbWV9LyR7aW5mby5uYW1lc3BhY2V9JztgO1xufVxuXG4vKipcbiAqIFRoZSBmb2xkZXIgYSBuYW1lc3BhY2UncyBwYWdlcyBhcmUgd3JpdHRlbiB0by5cbiAqXG4gKiBAcGFyYW0gbmFtZXNwYWNlIC0gVGhlIHR5cGUncyBuYW1lc3BhY2UuXG4gKiBAcmV0dXJucyBUaGUgZm9sZGVyLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0TmFtZXNwYWNlRGlyZWN0b3J5KG5hbWVzcGFjZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIG5hbWVzcGFjZTtcbn1cblxuLyoqXG4gKiBTYW5pdGl6ZSBhIG1lbWJlciBuYW1lIGZvciB1c2UgaW4gYSBjYXNlLVBSRVNFUlZFRCBVUkwvcm91dGUgc2VnbWVudCAoZS5nLiBgc2hvd05vdGljZWApLlxuICpcbiAqIEBwYXJhbSBuYW1lIC0gVGhlIG1lbWJlcidzIG5hbWUuXG4gKiBAcmV0dXJucyBUaGUgY2FzZS1wcmVzZXJ2ZWQgc2VnbWVudC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1lbWJlclJvdXRlU2VnbWVudChuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gc2x1Z2lmeU1lbWJlck5hbWUobmFtZSk7XG59XG5cbi8qKlxuICogU2FuaXRpemUgYSBtZW1iZXIgbmFtZSBmb3IgdXNlIGFzIGFuIG9uLWRpc2sgRklMRU5BTUUgKGxvd2VyY2FzZWQsIGNvbGxpc2lvbi1zYWZlKS5cbiAqXG4gKiBAcGFyYW0gbmFtZSAtIFRoZSBtZW1iZXIncyBuYW1lLlxuICogQHJldHVybnMgVGhlIGxvd2VyY2FzZWQgZmlsZSBuYW1lIHNlZ21lbnQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtZW1iZXJTbHVnKG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiB0b1JvdXRlU2VnbWVudChzbHVnaWZ5TWVtYmVyTmFtZShuYW1lKSk7XG59XG5cbi8qKlxuICogU2x1Z2lmeSBhbiBvdmVybG9hZCBrZXkgZm9yIGEgY2FzZS1QUkVTRVJWRUQgVVJML3JvdXRlIHNlZ21lbnQ6IG9uKFwiY2hhbmdlZFwiKSAtPiBvbi1jaGFuZ2VkLlxuICpcbiAqIEBwYXJhbSBvdmVybG9hZEtleSAtIFRoZSBvdmVybG9hZCBrZXksIGUuZy4gYG9uKCdjaGFuZ2VkJylgLlxuICogQHJldHVybnMgVGhlIGNhc2UtcHJlc2VydmVkIHNlZ21lbnQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBvdmVybG9hZFJvdXRlU2VnbWVudChvdmVybG9hZEtleTogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHNsdWdpZnlPdmVybG9hZEtleShvdmVybG9hZEtleSk7XG59XG5cbi8qKlxuICogU2x1Z2lmeSBhbiBvdmVybG9hZCBrZXkgZm9yIGFuIG9uLWRpc2sgRklMRU5BTUU6IG9uKFwiY2hhbmdlZFwiKSAtPiBvbi1jaGFuZ2VkIChsb3dlcmNhc2VkKS5cbiAqXG4gKiBAcGFyYW0gb3ZlcmxvYWRLZXkgLSBUaGUgb3ZlcmxvYWQga2V5LCBlLmcuIGBvbignY2hhbmdlZCcpYC5cbiAqIEByZXR1cm5zIFRoZSBsb3dlcmNhc2VkIGZpbGUgbmFtZSBzZWdtZW50LlxuICovXG5leHBvcnQgZnVuY3Rpb24gb3ZlcmxvYWRTbHVnKG92ZXJsb2FkS2V5OiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gdG9Sb3V0ZVNlZ21lbnQoc2x1Z2lmeU92ZXJsb2FkS2V5KG92ZXJsb2FkS2V5KSk7XG59XG5cbi8qKlxuICogUmVwbGFjZSBldmVyeSBtYXRjaCBvZiBhIGdsb2JhbCByZWd1bGFyIGV4cHJlc3Npb24gd2l0aCB3aGF0IGEgcmVwbGFjZXIgYnVpbGRzIGZyb20gdGhlIG1hdGNoLiBUaGUgdHlwZWRcbiAqIGNvdW50ZXJwYXJ0IG9mIGBTdHJpbmcucHJvdG90eXBlLnJlcGxhY2VBbGxgIHdpdGggYSBjYWxsYmFjaywgd2hvc2UgYXJndW1lbnRzIGFyZSB0eXBlZCBvbmx5IHBvc2l0aW9uYWxseS5cbiAqXG4gKiBAcGFyYW0gdGV4dCAtIFRoZSB0ZXh0LlxuICogQHBhcmFtIHJlZ0V4cCAtIFRoZSByZWd1bGFyIGV4cHJlc3Npb247IGl0IG11c3QgY2FycnkgdGhlIGBnYCBmbGFnLlxuICogQHBhcmFtIHJlcGxhY2VyIC0gQnVpbGRzIHRoZSByZXBsYWNlbWVudCBvZiBvbmUgbWF0Y2guXG4gKiBAcmV0dXJucyBUaGUgdGV4dCB3aXRoIGV2ZXJ5IG1hdGNoIHJlcGxhY2VkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVwbGFjZVJlZ0V4cE1hdGNoZXModGV4dDogc3RyaW5nLCByZWdFeHA6IFJlZ0V4cCwgcmVwbGFjZXI6IChtYXRjaDogUmVnRXhwTWF0Y2hBcnJheSkgPT4gc3RyaW5nKTogc3RyaW5nIHtcbiAgbGV0IHJlc3VsdCA9ICcnO1xuICBsZXQgbGFzdEluZGV4ID0gMDtcbiAgZm9yIChjb25zdCBtYXRjaCBvZiB0ZXh0Lm1hdGNoQWxsKHJlZ0V4cCkpIHtcbiAgICByZXN1bHQgKz0gdGV4dC5zbGljZShsYXN0SW5kZXgsIG1hdGNoLmluZGV4KSArIHJlcGxhY2VyKG1hdGNoKTtcbiAgICBsYXN0SW5kZXggPSBtYXRjaC5pbmRleCArIG1hdGNoWzBdLmxlbmd0aDtcbiAgfVxuICByZXR1cm4gcmVzdWx0ICsgdGV4dC5zbGljZShsYXN0SW5kZXgpO1xufVxuXG4vKipcbiAqIFNwbGl0IG1hcmtkb3duIHRleHQgaW50byBhbiBvcmRlcmVkIGxpc3Qgb2YgcHJvc2UgYW5kIGZlbmNlZC1jb2RlIHNlZ21lbnRzLlxuICogQSBmZW5jZWQtY29kZSBzZWdtZW50IGlzIGRlbGltaXRlZCBieSBhIGxpbmUgb2YgMysgYmFja3RpY2tzIG9yIHRpbGRlczsgaXRzIGNvbnRlbnQgaXMgY2FwdHVyZWRcbiAqIHJhdyAobmV2ZXIgZXNjYXBlZCkgc28gaXQgY2FuIGJlIHJlLWVtaXR0ZWQgYXMgYSBsaXRlcmFsIE1EWCBjb2RlIGZlbmNlLlxuICpcbiAqIEBwYXJhbSB0ZXh0IC0gVGhlIHRleHQuXG4gKiBAcmV0dXJucyBUaGUgc2VnbWVudHMsIGluIG9yZGVyLlxuICovXG5leHBvcnQgZnVuY3Rpb24gc2VnbWVudE1hcmtkb3duKHRleHQ6IHN0cmluZyk6IE1hcmtkb3duU2VnbWVudFtdIHtcbiAgY29uc3QgbGluZXMgPSB0ZXh0LnNwbGl0KCdcXG4nKTtcbiAgY29uc3Qgc2VnbWVudHM6IE1hcmtkb3duU2VnbWVudFtdID0gW107XG4gIGxldCBwcm9zZUJ1ZmZlcjogc3RyaW5nW10gPSBbXTtcbiAgbGV0IGNvZGVMaW5lczogc3RyaW5nW10gPSBbXTtcbiAgbGV0IG9wZW5GZW5jZTogbnVsbCB8IE9wZW5GZW5jZSA9IG51bGw7XG4gIGZvciAoY29uc3QgbGluZSBvZiBsaW5lcykge1xuICAgIGlmIChvcGVuRmVuY2UpIHtcbiAgICAgIGlmIChvcGVuRmVuY2UuY2xvc2VSZS50ZXN0KGxpbmUpKSB7XG4gICAgICAgIHNlZ21lbnRzLnB1c2goeyBsYW5nOiBvcGVuRmVuY2UubGFuZywgdGV4dDogY29kZUxpbmVzLmpvaW4oJ1xcbicpLCB0eXBlOiAnY29kZScgfSk7XG4gICAgICAgIG9wZW5GZW5jZSA9IG51bGw7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb2RlTGluZXMucHVzaChsaW5lKTtcbiAgICAgIH1cbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGNvbnN0IG9wZW5NYXRjaCA9IC9eXFxzKig/PGZlbmNlPig/PGZlbmNlQ2hhcj5bYH5dKVxcazxmZW5jZUNoYXI+ezIsfSkoPzxsYW5nPi4qKSQvLmV4ZWMobGluZSk7XG4gICAgaWYgKG9wZW5NYXRjaCkge1xuICAgICAgY29uc3QgZmVuY2VDaGFycyA9IGdldE1hbmRhdG9yeU5hbWVkR3JvdXAob3Blbk1hdGNoLCAnZmVuY2UnKTtcbiAgICAgIGNvbnN0IGZlbmNlQ2hhciA9IGdldE1hbmRhdG9yeU5hbWVkR3JvdXAob3Blbk1hdGNoLCAnZmVuY2VDaGFyJyk7XG4gICAgICBmbHVzaFByb3NlKCk7XG4gICAgICBjb2RlTGluZXMgPSBbXTtcbiAgICAgIG9wZW5GZW5jZSA9IHtcbiAgICAgICAgY2xvc2VSZTogbmV3IFJlZ0V4cChgXlxcXFxzKlxcXFwke2ZlbmNlQ2hhcn17JHtTdHJpbmcoZmVuY2VDaGFycy5sZW5ndGgpfSx9XFxcXHMqJGApLFxuICAgICAgICBsYW5nOiBnZXRNYW5kYXRvcnlOYW1lZEdyb3VwKG9wZW5NYXRjaCwgJ2xhbmcnKS50cmltKClcbiAgICAgIH07XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgcHJvc2VCdWZmZXIucHVzaChsaW5lKTtcbiAgfVxuICAvLyBBbiB1bmNsb3NlZCBmZW5jZSBydW5zIHRvIHRoZSBlbmQgb2YgdGhlIHRleHQuXG4gIGlmIChvcGVuRmVuY2UpIHtcbiAgICBzZWdtZW50cy5wdXNoKHsgbGFuZzogb3BlbkZlbmNlLmxhbmcsIHRleHQ6IGNvZGVMaW5lcy5qb2luKCdcXG4nKSwgdHlwZTogJ2NvZGUnIH0pO1xuICB9XG4gIGZsdXNoUHJvc2UoKTtcbiAgcmV0dXJuIHNlZ21lbnRzO1xuXG4gIGZ1bmN0aW9uIGZsdXNoUHJvc2UoKTogdm9pZCB7XG4gICAgaWYgKHByb3NlQnVmZmVyLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHNlZ21lbnRzLnB1c2goeyB0ZXh0OiBwcm9zZUJ1ZmZlci5qb2luKCdcXG4nKSwgdHlwZTogJ3Byb3NlJyB9KTtcbiAgICBwcm9zZUJ1ZmZlciA9IFtdO1xuICB9XG59XG5cbi8qKlxuICogU3RyaXAgdGhlIGBpbXBvcnQoXCLigKZcIilgIHF1YWxpZmllcnMgdHMtbW9ycGggcHJpbnRzIGJlZm9yZSBhIHR5cGUgdGhhdCBpcyBub3QgaW4gc2NvcGUsIHJlY29yZGluZyBlYWNoIG9uZSdzXG4gKiBkZWNsYXJhdGlvbiBmaWxlIGZpcnN0LCBzaW5jZSBpdCBpcyB0aGUgb25lIHBsYWNlIGEgcHJpbnRlZCB0eXBlIG5hbWVzIHdoZXJlIGl0IHdhcyBkZWNsYXJlZC5cbiAqXG4gKiBAcGFyYW0gdHlwZVRleHQgLSBUaGUgcHJpbnRlZCB0eXBlLlxuICogQHJldHVybnMgVGhlIHR5cGUgd2l0aG91dCBpdHMgaW1wb3J0IHF1YWxpZmllcnMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzaW1wbGlmeVR5cGUodHlwZVRleHQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIGZvciAoY29uc3QgbWF0Y2ggb2YgdHlwZVRleHQubWF0Y2hBbGwoSU1QT1JUX1RZUEVfUkVHX0VYUCkpIHtcbiAgICByZWdpc3RlclBhY2thZ2VEZWNsYXJhdGlvbihnZXRNYW5kYXRvcnlOYW1lZEdyb3VwKG1hdGNoLCAnTmFtZScpLCBnZXRNYW5kYXRvcnlOYW1lZEdyb3VwKG1hdGNoLCAnUGF0aCcpKTtcbiAgfVxuXG4gIHJldHVybiB0eXBlVGV4dC5yZXBsYWNlQWxsKElNUE9SVF9RVUFMSUZJRVJfUkVHX0VYUCwgJycpO1xufVxuXG4vKipcbiAqIE5vcm1hbGl6ZSBhIGNvZGUgc2lnbmF0dXJlIGZvciB0aGUgYHNpZ25hdHVyZTpgIGZyb250bWF0dGVyIC8gT0cgY2FyZDogY29sbGFwc2Ugd2hpdGVzcGFjZSB0b1xuICogc2luZ2xlIHNwYWNlcyBhbmQgdHJ1bmNhdGUgdG8gYSBjYXJkLWZyaWVuZGx5IGxlbmd0aCB3aXRoIGFuIGVsbGlwc2lzLlxuICpcbiAqIEBwYXJhbSBzaWduYXR1cmUgLSBUaGUgc2lnbmF0dXJlLlxuICogQHJldHVybnMgVGhlIG5vcm1hbGl6ZWQgc2lnbmF0dXJlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdHJ1bmNhdGVTaWduYXR1cmUoc2lnbmF0dXJlOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBjb2xsYXBzZWQgPSBzaWduYXR1cmUucmVwbGFjZUFsbCgvXFxzKy9nLCAnICcpLnRyaW0oKTtcbiAgcmV0dXJuIGNvbGxhcHNlZC5sZW5ndGggPD0gU0lHTkFUVVJFX01BWF9MRU5HVEggPyBjb2xsYXBzZWQgOiBgJHtjb2xsYXBzZWQuc2xpY2UoMCwgU0lHTkFUVVJFX01BWF9MRU5HVEggLSAxKS50cmltRW5kKCl94oCmYDtcbn1cblxuZnVuY3Rpb24gc2x1Z2lmeU1lbWJlck5hbWUobmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgY2xlYW5lZCA9IG5hbWVcbiAgICAucmVwbGFjZUFsbCgvXltcIiddfFtcIiddJC9nLCAnJylcbiAgICAucmVwbGFjZUFsbCgvW15hLXpBLVowLTldL2csICctJylcbiAgICAucmVwbGFjZUFsbCgvLSsvZywgJy0nKVxuICAgIC5yZXBsYWNlQWxsKC9eLXwtJC9nLCAnJyk7XG4gIC8vIEEgbWVtYmVyIGxpdGVyYWxseSBuYW1lZCBgaW5kZXhgIHdvdWxkIHdyaXRlIGBpbmRleC5tZHhgLCBjb2xsaWRpbmcgd2l0aCB0aGUgdHlwZS1vdmVydmlld1xuICAvLyBgaW5kZXgubWR4YCBpbiB0aGUgc2FtZSBkaXJlY3RvcnkgKG9uZSBzaWxlbnRseSBvdmVyd3JpdGVzIHRoZSBvdGhlciwgNDA0LWluZyB0aGUgbG9zZXIpLlxuICByZXR1cm4gY2xlYW5lZCA9PT0gJ2luZGV4JyA/ICdpbmRleC1tZW1iZXInIDogKGNsZWFuZWQgfHwgJ3VubmFtZWQnKTtcbn1cblxuZnVuY3Rpb24gc2x1Z2lmeU92ZXJsb2FkS2V5KG92ZXJsb2FkS2V5OiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBzbHVnID0gb3ZlcmxvYWRLZXlcbiAgICAucmVwbGFjZUFsbCgvW1wiJygpXS9nLCAnICcpXG4gICAgLnJlcGxhY2VBbGwoL1teYS16QS1aMC05XFxzXS9nLCAnJylcbiAgICAudHJpbSgpXG4gICAgLnJlcGxhY2VBbGwoL1xccysvZywgJy0nKTtcbiAgLy8gQSBtZXRob2QgbmFtZWQgYGluZGV4YCB3b3VsZCB3cml0ZSBgaW5kZXgubWR4YCBvdmVyIHRoZSB0eXBlLW92ZXJ2aWV3IHBhZ2UsIGV4YWN0bHkgYXMgYSBwcm9wZXJ0eSB3b3VsZC5cbiAgcmV0dXJuIHNsdWcgPT09ICdpbmRleCcgPyAnaW5kZXgtbWVtYmVyJyA6IHNsdWc7XG59XG5cbmNvbnN0IE9HX0RFU0NSSVBUSU9OX01BWF9MRU5HVEggPSAxNjA7XG5cbi8qKlxuICogU3RyaXAgbWFya2Rvd24gZm9ybWF0dGluZyB0byBwbGFpbiB0ZXh0IGZvciB1c2UgaW4gbWV0YSBkZXNjcmlwdGlvbnNcbiAqXG4gKiBAcGFyYW0gdGV4dCAtIFRoZSB0ZXh0LlxuICogQHJldHVybnMgVGhlIHBsYWluIHRleHQsIGF0IG1vc3QgMTYwIGNoYXJhY3RlcnMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdHJpcE1hcmtkb3duKHRleHQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIC8vIEEgYmFyZSBge0BsaW5rIFRhcmdldH1gIHJlYWRzIGFzIGl0cyB0YXJnZXQsIGFzIGByZXNvbHZlTGlua3NgIHJlbmRlcnMgaXQ7IGRyb3BwaW5nIGl0IGxlYXZlcyBhIGhvbGUgaW4gdGhlIHNlbnRlbmNlLlxuICBjb25zdCBwbGFpbiA9IHJlcGxhY2VSZWdFeHBNYXRjaGVzKFxuICAgIHRleHQsXG4gICAgL1xce0BsaW5rXFxzKyg/PHRhcmdldD5bXnx9XSs/KSg/OlxccypcXHxcXHMqKD88ZGlzcGxheT5bXn1dKz8pKT9cXHMqXFx9L2csXG4gICAgKG1hdGNoKSA9PiBnZXRPcHRpb25hbE5hbWVkR3JvdXAobWF0Y2gsICdkaXNwbGF5JykgPz8gZ2V0TWFuZGF0b3J5TmFtZWRHcm91cChtYXRjaCwgJ3RhcmdldCcpXG4gIClcbiAgICAucmVwbGFjZUFsbCgvXFxbKD88dGV4dD5bXlxcXV0rKVxcXVxcKFteKV0rXFwpL2csICckPHRleHQ+JylcbiAgICAucmVwbGFjZUFsbCgvW2AqX35dL2csICcnKVxuICAgIC5yZXBsYWNlQWxsKC9cXHMrL2csICcgJylcbiAgICAudHJpbSgpO1xuXG4gIGlmIChwbGFpbi5sZW5ndGggPD0gT0dfREVTQ1JJUFRJT05fTUFYX0xFTkdUSCkge1xuICAgIHJldHVybiBwbGFpbjtcbiAgfVxuXG4gIC8vIEN1dCBiYWNrIHRvIGEgd29yZCBib3VuZGFyeTogYSByYXcgc2xpY2UgZW5kcyBkZXNjcmlwdGlvbnMgbWlkLXdvcmQgKGDigKYgdGhlIHN0cmluZyBtb2R1bGUgaXMgb2JgKS5cbiAgLy8gVGhhdCBmcmFnbWVudCBpcyB3aGF0IHJlYWRlcnMgc2VlIG9uIHRoZSBPRyBjYXJkIGFuZCBpbiBzZWFyY2ggcmVzdWx0cy5cbiAgY29uc3QgY2xpcHBlZCA9IHBsYWluLnNsaWNlKDAsIE9HX0RFU0NSSVBUSU9OX01BWF9MRU5HVEggLSAxKTtcbiAgY29uc3QgbGFzdFNwYWNlSW5kZXggPSBjbGlwcGVkLmxhc3RJbmRleE9mKCcgJyk7XG4gIGNvbnN0IHRydW5jYXRlZCA9IGxhc3RTcGFjZUluZGV4ID4gMCA/IGNsaXBwZWQuc2xpY2UoMCwgbGFzdFNwYWNlSW5kZXgpIDogY2xpcHBlZDtcbiAgcmV0dXJuIGAke3RydW5jYXRlZC5yZXBsYWNlKC9bLDs6Llxcc10rJC8sICcnKX3igKZgO1xufVxuXG5mdW5jdGlvbiBlc2NhcGVNZHhQcm9zZUNoYXJzKGNodW5rOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gY2h1bmsucmVwbGFjZUFsbCgvWzx7fV0vZywgKGNoYXIpID0+IGBcXFxcJHtjaGFyfWApO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7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
|
package/package.json
CHANGED