UNPKG

@decaf-ts/fabric-weaver

Version:
113 lines 22.3 kB
import { Logging } from "@decaf-ts/logging"; import { style } from "styled-string-builder"; import slogans from "../assets/slogans.json"; const bannerBorder = "##########################################################################################"; const banner1 = []; const banner2 = []; const banner3 = []; function banner1Creation(log) { banner1.push("# #"); banner1.push("# ░▒▓████████▓▒░▒▓██████▓▒░░▒▓███████▓▒░░▒▓███████▓▒░░▒▓█▓▒░░▒▓██████▓▒░ #"); banner1.push("# ░▒▓█▓▒░ ░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░▒▓█▓▒░░▒▓█▓▒░ #"); banner1.push("# ░▒▓█▓▒░ ░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░▒▓█▓▒░ #"); banner1.push("# ░▒▓██████▓▒░░▒▓████████▓▒░▒▓███████▓▒░░▒▓███████▓▒░░▒▓█▓▒░▒▓█▓▒░ #"); banner1.push("# ░▒▓█▓▒░ ░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░▒▓█▓▒░ #"); banner1.push("# ░▒▓█▓▒░ ░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░▒▓█▓▒░░▒▓█▓▒░ #"); banner1.push("# ░▒▓█▓▒░ ░▒▓█▓▒░░▒▓█▓▒░▒▓███████▓▒░░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░░▒▓██████▓▒░ #"); banner1.push("# #"); banner1.push("# #"); banner1.forEach((line) => { log.info.bind(log)(style(line || "").raw(getColor()).text); }); } function banner2Creation(log) { banner2.push("# ░▒▓█▓▒░░▒▓█▓▒░░▒▓█▓▒░▒▓████████▓▒░░▒▓██████▓▒░░▒▓█▓▒░░▒▓█▓▒░▒▓████████▓▒░▒▓███████▓▒░ #"); banner2.push("# ░▒▓█▓▒░░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░ ░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░ ░▒▓█▓▒░░▒▓█▓▒░ #"); banner2.push("# ░▒▓█▓▒░░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░ ░▒▓█▓▒░░▒▓█▓▒░░▒▓█▓▒▒▓█▓▒░░▒▓█▓▒░ ░▒▓█▓▒░░▒▓█▓▒░ #"); banner2.push("# ░▒▓█▓▒░░▒▓█▓▒░░▒▓█▓▒░▒▓██████▓▒░ ░▒▓████████▓▒░░▒▓█▓▒▒▓█▓▒░░▒▓██████▓▒░ ░▒▓███████▓▒░ #"); banner2.push("# ░▒▓█▓▒░░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░ ░▒▓█▓▒░░▒▓█▓▒░ ░▒▓█▓▓█▓▒░ ░▒▓█▓▒░ ░▒▓█▓▒░░▒▓█▓▒░ #"); banner2.push("# ░▒▓█▓▒░░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░ ░▒▓█▓▒░░▒▓█▓▒░ ░▒▓█▓▓█▓▒░ ░▒▓█▓▒░ ░▒▓█▓▒░░▒▓█▓▒░ #"); banner2.push("# ░▒▓█████████████▓▒░░▒▓████████▓▒░▒▓█▓▒░░▒▓█▓▒░ ░▒▓██▓▒░ ░▒▓████████▓▒░▒▓█▓▒░░▒▓█▓▒░ #"); banner2.push("# #"); banner2.forEach((line) => { log.info.bind(log)(style(line || "").raw(getColor()).text); }); } function banner3Creation(log) { const message = getSlogan(); const maxLength = banner1.reduce((max, line) => Math.max(max, line.length), 0); banner3.push(`# ${message.Slogan.padStart(maxLength - 5)} #`); message.Tags = message.Tags.split(", ") .map((tag) => `#${tag.split(" ").join("")}`) .join(" "); banner3.push("# #"); banner3.push(`# ${message.Tags.padStart(maxLength - 5)} #`); banner3.push("# #"); banner3.forEach((line, index) => { log.info.bind(log)(style(line || "").raw(colors[index]).text); }); } const colors = [ "\x1b[38;5;215m", // soft orange "\x1b[38;5;209m", // coral "\x1b[38;5;205m", // pink "\x1b[38;5;210m", // peachy "\x1b[38;5;217m", // salmon "\x1b[38;5;216m", // light coral "\x1b[38;5;224m", // light peach "\x1b[38;5;230m", // soft cream "\x1b[38;5;230m", // soft cream ]; let counter = 0; function getColor() { counter++; if (counter >= colors.length) { counter = 0; } return colors[counter]; } export function getSlogan(i) { try { i = typeof i === "undefined" ? Math.floor(Math.random() * slogans.length) : i; return slogans[i]; } catch (error) { throw new Error(`Failed to retrieve slogans: ${error}`); } } export const border = bannerBorder .split("") .map((c) => { return style(c || "").raw(getColor()).text; }) .join(""); export function printBorder(skipBorder = false) { if (skipBorder) return; const log = Logging.for(printBorder); log.setConfig({ timestamp: false, style: false, context: false, logLevel: false, }); log.info(border); } export function printBanner(skipBanner = false) { if (skipBanner) return; const log = Logging.for(printBanner); log.setConfig({ timestamp: false, style: false, context: false, logLevel: false, }); printBorder(skipBanner); banner1Creation(log); banner2Creation(log); banner3Creation(log); printBorder(skipBanner); } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFubmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3V0aWxzLW9sZC9iYW5uZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFVLE9BQU8sRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUM5QyxPQUFPLE9BQU8sTUFBTSx3QkFBd0IsQ0FBQztBQUU3QyxNQUFNLFlBQVksR0FDaEIsNEZBQTRGLENBQUM7QUFDL0YsTUFBTSxPQUFPLEdBQWEsRUFBRSxDQUFDO0FBQzdCLE1BQU0sT0FBTyxHQUFhLEVBQUUsQ0FBQztBQUM3QixNQUFNLE9BQU8sR0FBYSxFQUFFLENBQUM7QUFFN0IsU0FBUyxlQUFlLENBQUMsR0FBVztJQUNsQyxPQUFPLENBQUMsSUFBSSxDQUNWLDRGQUE0RixDQUM3RixDQUFDO0lBRUYsT0FBTyxDQUFDLElBQUksQ0FDViw0RkFBNEYsQ0FDN0YsQ0FBQztJQUNGLE9BQU8sQ0FBQyxJQUFJLENBQ1YsNEZBQTRGLENBQzdGLENBQUM7SUFDRixPQUFPLENBQUMsSUFBSSxDQUNWLDRGQUE0RixDQUM3RixDQUFDO0lBQ0YsT0FBTyxDQUFDLElBQUksQ0FDViw0RkFBNEYsQ0FDN0YsQ0FBQztJQUNGLE9BQU8sQ0FBQyxJQUFJLENBQ1YsNEZBQTRGLENBQzdGLENBQUM7SUFDRixPQUFPLENBQUMsSUFBSSxDQUNWLDRGQUE0RixDQUM3RixDQUFDO0lBQ0YsT0FBTyxDQUFDLElBQUksQ0FDViw0RkFBNEYsQ0FDN0YsQ0FBQztJQUVGLE9BQU8sQ0FBQyxJQUFJLENBQ1YsNEZBQTRGLENBQzdGLENBQUM7SUFDRixPQUFPLENBQUMsSUFBSSxDQUNWLDRGQUE0RixDQUM3RixDQUFDO0lBRUYsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO1FBQ3ZCLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDN0QsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDO0FBRUQsU0FBUyxlQUFlLENBQUMsR0FBVztJQUNsQyxPQUFPLENBQUMsSUFBSSxDQUNWLDRGQUE0RixDQUM3RixDQUFDO0lBQ0YsT0FBTyxDQUFDLElBQUksQ0FDViw0RkFBNEYsQ0FDN0YsQ0FBQztJQUNGLE9BQU8sQ0FBQyxJQUFJLENBQ1YsNEZBQTRGLENBQzdGLENBQUM7SUFDRixPQUFPLENBQUMsSUFBSSxDQUNWLDRGQUE0RixDQUM3RixDQUFDO0lBQ0YsT0FBTyxDQUFDLElBQUksQ0FDViw0RkFBNEYsQ0FDN0YsQ0FBQztJQUNGLE9BQU8sQ0FBQyxJQUFJLENBQ1YsNEZBQTRGLENBQzdGLENBQUM7SUFDRixPQUFPLENBQUMsSUFBSSxDQUNWLDRGQUE0RixDQUM3RixDQUFDO0lBQ0YsT0FBTyxDQUFDLElBQUksQ0FDViw0RkFBNEYsQ0FDN0YsQ0FBQztJQUVGLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtRQUN2QixHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzdELENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQUVELFNBQVMsZUFBZSxDQUFDLEdBQVc7SUFDbEMsTUFBTSxPQUFPLEdBQUcsU0FBUyxFQUFFLENBQUM7SUFFNUIsTUFBTSxTQUFTLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FDOUIsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQ3pDLENBQUMsQ0FDRixDQUFDO0lBRUYsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLE9BQU8sQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7SUFFL0QsT0FBTyxDQUFDLElBQUksR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUM7U0FDcEMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7U0FDM0MsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBRWIsT0FBTyxDQUFDLElBQUksQ0FDViw0RkFBNEYsQ0FDN0YsQ0FBQztJQUVGLE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxPQUFPLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzdELE9BQU8sQ0FBQyxJQUFJLENBQ1YsNEZBQTRGLENBQzdGLENBQUM7SUFFRixPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFO1FBQzlCLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2hFLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQUVELE1BQU0sTUFBTSxHQUFHO0lBQ2IsZ0JBQWdCLEVBQUUsY0FBYztJQUNoQyxnQkFBZ0IsRUFBRSxRQUFRO0lBQzFCLGdCQUFnQixFQUFFLE9BQU87SUFDekIsZ0JBQWdCLEVBQUUsU0FBUztJQUMzQixnQkFBZ0IsRUFBRSxTQUFTO0lBQzNCLGdCQUFnQixFQUFFLGNBQWM7SUFDaEMsZ0JBQWdCLEVBQUUsY0FBYztJQUNoQyxnQkFBZ0IsRUFBRSxhQUFhO0lBQy9CLGdCQUFnQixFQUFFLGFBQWE7Q0FDaEMsQ0FBQztBQUVGLElBQUksT0FBTyxHQUFHLENBQUMsQ0FBQztBQUNoQixTQUFTLFFBQVE7SUFDZixPQUFPLEVBQUUsQ0FBQztJQUVWLElBQUksT0FBTyxJQUFJLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUM3QixPQUFPLEdBQUcsQ0FBQyxDQUFDO0lBQ2QsQ0FBQztJQUVELE9BQU8sTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQ3pCLENBQUM7QUFFRCxNQUFNLFVBQVUsU0FBUyxDQUFDLENBQVU7SUFDbEMsSUFBSSxDQUFDO1FBQ0gsQ0FBQztZQUNDLE9BQU8sQ0FBQyxLQUFLLFdBQVcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDNUUsT0FBTyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDcEIsQ0FBQztJQUFDLE9BQU8sS0FBYyxFQUFFLENBQUM7UUFDeEIsTUFBTSxJQUFJLEtBQUssQ0FBQywrQkFBK0IsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUMxRCxDQUFDO0FBQ0gsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLE1BQU0sR0FBRyxZQUFZO0tBQy9CLEtBQUssQ0FBQyxFQUFFLENBQUM7S0FDVCxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtJQUNULE9BQU8sS0FBSyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUM7QUFDN0MsQ0FBQyxDQUFDO0tBQ0QsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBRVosTUFBTSxVQUFVLFdBQVcsQ0FBQyxhQUFzQixLQUFLO0lBQ3JELElBQUksVUFBVTtRQUFFLE9BQU87SUFFdkIsTUFBTSxHQUFHLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUNyQyxHQUFHLENBQUMsU0FBUyxDQUFDO1FBQ1osU0FBUyxFQUFFLEtBQUs7UUFDaEIsS0FBSyxFQUFFLEtBQUs7UUFDWixPQUFPLEVBQUUsS0FBSztRQUNkLFFBQVEsRUFBRSxLQUFLO0tBQ2hCLENBQUMsQ0FBQztJQUVILEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDbkIsQ0FBQztBQUVELE1BQU0sVUFBVSxXQUFXLENBQUMsYUFBc0IsS0FBSztJQUNyRCxJQUFJLFVBQVU7UUFBRSxPQUFPO0lBRXZCLE1BQU0sR0FBRyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLENBQUM7SUFFckMsR0FBRyxDQUFDLFNBQVMsQ0FBQztRQUNaLFNBQVMsRUFBRSxLQUFLO1FBQ2hCLEtBQUssRUFBRSxLQUFLO1FBQ1osT0FBTyxFQUFFLEtBQUs7UUFDZCxRQUFRLEVBQUUsS0FBSztLQUNoQixDQUFDLENBQUM7SUFFSCxXQUFXLENBQUMsVUFBVSxDQUFDLENBQUM7SUFFeEIsZUFBZSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3JCLGVBQWUsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNyQixlQUFlLENBQUMsR0FBRyxDQUFDLENBQUM7SUFFckIsV0FBVyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0FBQzFCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBMb2dnZXIsIExvZ2dpbmcgfSBmcm9tIFwiQGRlY2FmLXRzL2xvZ2dpbmdcIjtcbmltcG9ydCB7IHN0eWxlIH0gZnJvbSBcInN0eWxlZC1zdHJpbmctYnVpbGRlclwiO1xuaW1wb3J0IHNsb2dhbnMgZnJvbSBcIi4uL2Fzc2V0cy9zbG9nYW5zLmpzb25cIjtcblxuY29uc3QgYmFubmVyQm9yZGVyOiBzdHJpbmcgPVxuICBcIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjI1wiO1xuY29uc3QgYmFubmVyMTogc3RyaW5nW10gPSBbXTtcbmNvbnN0IGJhbm5lcjI6IHN0cmluZ1tdID0gW107XG5jb25zdCBiYW5uZXIzOiBzdHJpbmdbXSA9IFtdO1xuXG5mdW5jdGlvbiBiYW5uZXIxQ3JlYXRpb24obG9nOiBMb2dnZXIpIHtcbiAgYmFubmVyMS5wdXNoKFxuICAgIFwiIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjXCJcbiAgKTtcblxuICBiYW5uZXIxLnB1c2goXG4gICAgXCIjIOKWkeKWkuKWk+KWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWk+KWkuKWkeKWkuKWk+KWiOKWiOKWiOKWiOKWiOKWiOKWk+KWkuKWkeKWkeKWkuKWk+KWiOKWiOKWiOKWiOKWiOKWiOKWiOKWk+KWkuKWkeKWkeKWkuKWk+KWiOKWiOKWiOKWiOKWiOKWiOKWiOKWk+KWkuKWkeKWkeKWkuKWk+KWiOKWk+KWkuKWkeKWkeKWkuKWk+KWiOKWiOKWiOKWiOKWiOKWiOKWk+KWkuKWkSAgICAgICAgICAgICAgICAgI1wiXG4gICk7XG4gIGJhbm5lcjEucHVzaChcbiAgICBcIiMg4paR4paS4paT4paI4paT4paS4paRICAgICDilpHilpLilpPilojilpPilpLilpHilpHilpLilpPilojilpPilpLilpHilpLilpPilojilpPilpLilpHilpHilpLilpPilojilpPilpLilpHilpLilpPilojilpPilpLilpHilpHilpLilpPilojilpPilpLilpHilpLilpPilojilpPilpLilpHilpLilpPilojilpPilpLilpHilpHilpLilpPilojilpPilpLilpEgICAgICAgICAgICAgICAgI1wiXG4gICk7XG4gIGJhbm5lcjEucHVzaChcbiAgICBcIiMg4paR4paS4paT4paI4paT4paS4paRICAgICDilpHilpLilpPilojilpPilpLilpHilpHilpLilpPilojilpPilpLilpHilpLilpPilojilpPilpLilpHilpHilpLilpPilojilpPilpLilpHilpLilpPilojilpPilpLilpHilpHilpLilpPilojilpPilpLilpHilpLilpPilojilpPilpLilpHilpLilpPilojilpPilpLilpEgICAgICAgICAgICAgICAgICAgICAgICNcIlxuICApO1xuICBiYW5uZXIxLnB1c2goXG4gICAgXCIjIOKWkeKWkuKWk+KWiOKWiOKWiOKWiOKWiOKWiOKWk+KWkuKWkeKWkeKWkuKWk+KWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWk+KWkuKWkeKWkuKWk+KWiOKWiOKWiOKWiOKWiOKWiOKWiOKWk+KWkuKWkeKWkeKWkuKWk+KWiOKWiOKWiOKWiOKWiOKWiOKWiOKWk+KWkuKWkeKWkeKWkuKWk+KWiOKWk+KWkuKWkeKWkuKWk+KWiOKWk+KWkuKWkSAgICAgICAgICAgICAgICAgICAgICAgI1wiXG4gICk7XG4gIGJhbm5lcjEucHVzaChcbiAgICBcIiMg4paR4paS4paT4paI4paT4paS4paRICAgICDilpHilpLilpPilojilpPilpLilpHilpHilpLilpPilojilpPilpLilpHilpLilpPilojilpPilpLilpHilpHilpLilpPilojilpPilpLilpHilpLilpPilojilpPilpLilpHilpHilpLilpPilojilpPilpLilpHilpLilpPilojilpPilpLilpHilpLilpPilojilpPilpLilpEgICAgICAgICAgICAgICAgICAgICAgICNcIlxuICApO1xuICBiYW5uZXIxLnB1c2goXG4gICAgXCIjIOKWkeKWkuKWk+KWiOKWk+KWkuKWkSAgICAg4paR4paS4paT4paI4paT4paS4paR4paR4paS4paT4paI4paT4paS4paR4paS4paT4paI4paT4paS4paR4paR4paS4paT4paI4paT4paS4paR4paS4paT4paI4paT4paS4paR4paR4paS4paT4paI4paT4paS4paR4paS4paT4paI4paT4paS4paR4paS4paT4paI4paT4paS4paR4paR4paS4paT4paI4paT4paS4paRICAgICAgICAgICAgICAgICNcIlxuICApO1xuICBiYW5uZXIxLnB1c2goXG4gICAgXCIjIOKWkeKWkuKWk+KWiOKWk+KWkuKWkSAgICAg4paR4paS4paT4paI4paT4paS4paR4paR4paS4paT4paI4paT4paS4paR4paS4paT4paI4paI4paI4paI4paI4paI4paI4paT4paS4paR4paR4paS4paT4paI4paT4paS4paR4paR4paS4paT4paI4paT4paS4paR4paS4paT4paI4paT4paS4paR4paR4paS4paT4paI4paI4paI4paI4paI4paI4paT4paS4paRICAgICAgICAgICAgICAgICAjXCJcbiAgKTtcblxuICBiYW5uZXIxLnB1c2goXG4gICAgXCIjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNcIlxuICApO1xuICBiYW5uZXIxLnB1c2goXG4gICAgXCIjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNcIlxuICApO1xuXG4gIGJhbm5lcjEuZm9yRWFjaCgobGluZSkgPT4ge1xuICAgIGxvZy5pbmZvLmJpbmQobG9nKShzdHlsZShsaW5lIHx8IFwiXCIpLnJhdyhnZXRDb2xvcigpKS50ZXh0KTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGJhbm5lcjJDcmVhdGlvbihsb2c6IExvZ2dlcikge1xuICBiYW5uZXIyLnB1c2goXG4gICAgXCIjIOKWkeKWkuKWk+KWiOKWk+KWkuKWkeKWkeKWkuKWk+KWiOKWk+KWkuKWkeKWkeKWkuKWk+KWiOKWk+KWkuKWkeKWkuKWk+KWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWk+KWkuKWkeKWkeKWkuKWk+KWiOKWiOKWiOKWiOKWiOKWiOKWk+KWkuKWkeKWkeKWkuKWk+KWiOKWk+KWkuKWkeKWkeKWkuKWk+KWiOKWk+KWkuKWkeKWkuKWk+KWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWk+KWkuKWkeKWkuKWk+KWiOKWiOKWiOKWiOKWiOKWiOKWiOKWk+KWkuKWkSAgI1wiXG4gICk7XG4gIGJhbm5lcjIucHVzaChcbiAgICBcIiMg4paR4paS4paT4paI4paT4paS4paR4paR4paS4paT4paI4paT4paS4paR4paR4paS4paT4paI4paT4paS4paR4paS4paT4paI4paT4paS4paRICAgICAg4paR4paS4paT4paI4paT4paS4paR4paR4paS4paT4paI4paT4paS4paR4paS4paT4paI4paT4paS4paR4paR4paS4paT4paI4paT4paS4paR4paS4paT4paI4paT4paS4paRICAgICAg4paR4paS4paT4paI4paT4paS4paR4paR4paS4paT4paI4paT4paS4paRICNcIlxuICApO1xuICBiYW5uZXIyLnB1c2goXG4gICAgXCIjIOKWkeKWkuKWk+KWiOKWk+KWkuKWkeKWkeKWkuKWk+KWiOKWk+KWkuKWkeKWkeKWkuKWk+KWiOKWk+KWkuKWkeKWkuKWk+KWiOKWk+KWkuKWkSAgICAgIOKWkeKWkuKWk+KWiOKWk+KWkuKWkeKWkeKWkuKWk+KWiOKWk+KWkuKWkeKWkeKWkuKWk+KWiOKWk+KWkuKWkuKWk+KWiOKWk+KWkuKWkeKWkeKWkuKWk+KWiOKWk+KWkuKWkSAgICAgIOKWkeKWkuKWk+KWiOKWk+KWkuKWkeKWkeKWkuKWk+KWiOKWk+KWkuKWkSAjXCJcbiAgKTtcbiAgYmFubmVyMi5wdXNoKFxuICAgIFwiIyDilpHilpLilpPilojilpPilpLilpHilpHilpLilpPilojilpPilpLilpHilpHilpLilpPilojilpPilpLilpHilpLilpPilojilojilojilojilojilojilpPilpLilpEg4paR4paS4paT4paI4paI4paI4paI4paI4paI4paI4paI4paT4paS4paR4paR4paS4paT4paI4paT4paS4paS4paT4paI4paT4paS4paR4paR4paS4paT4paI4paI4paI4paI4paI4paI4paT4paS4paRIOKWkeKWkuKWk+KWiOKWiOKWiOKWiOKWiOKWiOKWiOKWk+KWkuKWkSAgI1wiXG4gICk7XG4gIGJhbm5lcjIucHVzaChcbiAgICBcIiMg4paR4paS4paT4paI4paT4paS4paR4paR4paS4paT4paI4paT4paS4paR4paR4paS4paT4paI4paT4paS4paR4paS4paT4paI4paT4paS4paRICAgICAg4paR4paS4paT4paI4paT4paS4paR4paR4paS4paT4paI4paT4paS4paRIOKWkeKWkuKWk+KWiOKWk+KWk+KWiOKWk+KWkuKWkSDilpHilpLilpPilojilpPilpLilpEgICAgICDilpHilpLilpPilojilpPilpLilpHilpHilpLilpPilojilpPilpLilpEgI1wiXG4gICk7XG4gIGJhbm5lcjIucHVzaChcbiAgICBcIiMg4paR4paS4paT4paI4paT4paS4paR4paR4paS4paT4paI4paT4paS4paR4paR4paS4paT4paI4paT4paS4paR4paS4paT4paI4paT4paS4paRICAgICAg4paR4paS4paT4paI4paT4paS4paR4paR4paS4paT4paI4paT4paS4paRIOKWkeKWkuKWk+KWiOKWk+KWk+KWiOKWk+KWkuKWkSDilpHilpLilpPilojilpPilpLilpEgICAgICDilpHilpLilpPilojilpPilpLilpHilpHilpLilpPilojilpPilpLilpEgI1wiXG4gICk7XG4gIGJhbm5lcjIucHVzaChcbiAgICBcIiMgIOKWkeKWkuKWk+KWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWk+KWkuKWkeKWkeKWkuKWk+KWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWk+KWkuKWkeKWkuKWk+KWiOKWk+KWkuKWkeKWkeKWkuKWk+KWiOKWk+KWkuKWkSAg4paR4paS4paT4paI4paI4paT4paS4paRICDilpHilpLilpPilojilojilojilojilojilojilojilojilpPilpLilpHilpLilpPilojilpPilpLilpHilpHilpLilpPilojilpPilpLilpEgI1wiXG4gICk7XG4gIGJhbm5lcjIucHVzaChcbiAgICBcIiMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI1wiXG4gICk7XG5cbiAgYmFubmVyMi5mb3JFYWNoKChsaW5lKSA9PiB7XG4gICAgbG9nLmluZm8uYmluZChsb2cpKHN0eWxlKGxpbmUgfHwgXCJcIikucmF3KGdldENvbG9yKCkpLnRleHQpO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gYmFubmVyM0NyZWF0aW9uKGxvZzogTG9nZ2VyKSB7XG4gIGNvbnN0IG1lc3NhZ2UgPSBnZXRTbG9nYW4oKTtcblxuICBjb25zdCBtYXhMZW5ndGggPSBiYW5uZXIxLnJlZHVjZShcbiAgICAobWF4LCBsaW5lKSA9PiBNYXRoLm1heChtYXgsIGxpbmUubGVuZ3RoKSxcbiAgICAwXG4gICk7XG5cbiAgYmFubmVyMy5wdXNoKGAjICAke21lc3NhZ2UuU2xvZ2FuLnBhZFN0YXJ0KG1heExlbmd0aCAtIDUpfSAjYCk7XG5cbiAgbWVzc2FnZS5UYWdzID0gbWVzc2FnZS5UYWdzLnNwbGl0KFwiLCBcIilcbiAgICAubWFwKCh0YWcpID0+IGAjJHt0YWcuc3BsaXQoXCIgXCIpLmpvaW4oXCJcIil9YClcbiAgICAuam9pbihcIiBcIik7XG5cbiAgYmFubmVyMy5wdXNoKFxuICAgIFwiIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjXCJcbiAgKTtcblxuICBiYW5uZXIzLnB1c2goYCMgICR7bWVzc2FnZS5UYWdzLnBhZFN0YXJ0KG1heExlbmd0aCAtIDUpfSAjYCk7XG4gIGJhbm5lcjMucHVzaChcbiAgICBcIiMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI1wiXG4gICk7XG5cbiAgYmFubmVyMy5mb3JFYWNoKChsaW5lLCBpbmRleCkgPT4ge1xuICAgIGxvZy5pbmZvLmJpbmQobG9nKShzdHlsZShsaW5lIHx8IFwiXCIpLnJhdyhjb2xvcnNbaW5kZXhdKS50ZXh0KTtcbiAgfSk7XG59XG5cbmNvbnN0IGNvbG9ycyA9IFtcbiAgXCJcXHgxYlszODs1OzIxNW1cIiwgLy8gc29mdCBvcmFuZ2VcbiAgXCJcXHgxYlszODs1OzIwOW1cIiwgLy8gY29yYWxcbiAgXCJcXHgxYlszODs1OzIwNW1cIiwgLy8gcGlua1xuICBcIlxceDFiWzM4OzU7MjEwbVwiLCAvLyBwZWFjaHlcbiAgXCJcXHgxYlszODs1OzIxN21cIiwgLy8gc2FsbW9uXG4gIFwiXFx4MWJbMzg7NTsyMTZtXCIsIC8vIGxpZ2h0IGNvcmFsXG4gIFwiXFx4MWJbMzg7NTsyMjRtXCIsIC8vIGxpZ2h0IHBlYWNoXG4gIFwiXFx4MWJbMzg7NTsyMzBtXCIsIC8vIHNvZnQgY3JlYW1cbiAgXCJcXHgxYlszODs1OzIzMG1cIiwgLy8gc29mdCBjcmVhbVxuXTtcblxubGV0IGNvdW50ZXIgPSAwO1xuZnVuY3Rpb24gZ2V0Q29sb3IoKSB7XG4gIGNvdW50ZXIrKztcblxuICBpZiAoY291bnRlciA+PSBjb2xvcnMubGVuZ3RoKSB7XG4gICAgY291bnRlciA9IDA7XG4gIH1cblxuICByZXR1cm4gY29sb3JzW2NvdW50ZXJdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2xvZ2FuKGk/OiBudW1iZXIpOiB7IFNsb2dhbjogc3RyaW5nOyBUYWdzOiBzdHJpbmcgfSB7XG4gIHRyeSB7XG4gICAgaSA9XG4gICAgICB0eXBlb2YgaSA9PT0gXCJ1bmRlZmluZWRcIiA/IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIHNsb2dhbnMubGVuZ3RoKSA6IGk7XG4gICAgcmV0dXJuIHNsb2dhbnNbaV07XG4gIH0gY2F0Y2ggKGVycm9yOiB1bmtub3duKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gcmV0cmlldmUgc2xvZ2FuczogJHtlcnJvcn1gKTtcbiAgfVxufVxuXG5leHBvcnQgY29uc3QgYm9yZGVyID0gYmFubmVyQm9yZGVyXG4gIC5zcGxpdChcIlwiKVxuICAubWFwKChjKSA9PiB7XG4gICAgcmV0dXJuIHN0eWxlKGMgfHwgXCJcIikucmF3KGdldENvbG9yKCkpLnRleHQ7XG4gIH0pXG4gIC5qb2luKFwiXCIpO1xuXG5leHBvcnQgZnVuY3Rpb24gcHJpbnRCb3JkZXIoc2tpcEJvcmRlcjogYm9vbGVhbiA9IGZhbHNlKSB7XG4gIGlmIChza2lwQm9yZGVyKSByZXR1cm47XG5cbiAgY29uc3QgbG9nID0gTG9nZ2luZy5mb3IocHJpbnRCb3JkZXIpO1xuICBsb2cuc2V0Q29uZmlnKHtcbiAgICB0aW1lc3RhbXA6IGZhbHNlLFxuICAgIHN0eWxlOiBmYWxzZSxcbiAgICBjb250ZXh0OiBmYWxzZSxcbiAgICBsb2dMZXZlbDogZmFsc2UsXG4gIH0pO1xuXG4gIGxvZy5pbmZvKGJvcmRlcik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcmludEJhbm5lcihza2lwQmFubmVyOiBib29sZWFuID0gZmFsc2UpIHtcbiAgaWYgKHNraXBCYW5uZXIpIHJldHVybjtcblxuICBjb25zdCBsb2cgPSBMb2dnaW5nLmZvcihwcmludEJhbm5lcik7XG5cbiAgbG9nLnNldENvbmZpZyh7XG4gICAgdGltZXN0YW1wOiBmYWxzZSxcbiAgICBzdHlsZTogZmFsc2UsXG4gICAgY29udGV4dDogZmFsc2UsXG4gICAgbG9nTGV2ZWw6IGZhbHNlLFxuICB9KTtcblxuICBwcmludEJvcmRlcihza2lwQmFubmVyKTtcblxuICBiYW5uZXIxQ3JlYXRpb24obG9nKTtcbiAgYmFubmVyMkNyZWF0aW9uKGxvZyk7XG4gIGJhbm5lcjNDcmVhdGlvbihsb2cpO1xuXG4gIHByaW50Qm9yZGVyKHNraXBCYW5uZXIpO1xufVxuIl19