UNPKG

jsii-docgen

Version:

generates api docs for jsii modules

123 lines 18.1 kB
"use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || (function () { var ownKeys = function(o) { ownKeys = Object.getOwnPropertyNames || function (o) { var ar = []; for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k; return ar; }; return ownKeys(o); }; return function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]); __setModuleDefault(result, mod); return result; }; })(); Object.defineProperty(exports, "__esModule", { value: true }); exports.main = main; const fs = __importStar(require("fs/promises")); const path = __importStar(require("node:path")); const yargs = __importStar(require("yargs")); const transpile_1 = require("./docgen/transpile/transpile"); const index_1 = require("./index"); async function generateForLanguage(docs, options) { const { format, output } = options; // e.g. API.typescript as name const splitByLanguage = output.endsWith(`.${options.language.name}`); const submoduleSuffix = splitByLanguage ? `${options.language.name}.${format}` : format; // Ensure the output path exists const outputPath = path.dirname(output); await fs.mkdir(outputPath, { recursive: true }); if (options.splitBySubmodules) { if (format !== 'md') { throw new Error('split-by-submodule is only supported for markdown'); } const submodules = await docs.listSubmodules(); for (const submodule of submodules) { const content = await docs.toMarkdown({ ...options, submodule: submodule.fqn, allSubmodules: false, header: { title: `\`${(0, transpile_1.submoduleRelName)(submodule)}\` Submodule`, id: submodule.fqn }, }); await fs.writeFile(path.join(outputPath, `${(0, transpile_1.submoduleRelName)(submodule)}.${submoduleSuffix}`), content.render()); } await fs.writeFile(`${output}.${format}`, await (await docs.toIndexMarkdown(submoduleSuffix, options)).render()); } else { const content = await (format === 'md' ? docs.toMarkdown(options) : docs.toJson(options)); await fs.writeFile(`${output}.${format}`, content.render()); } } async function main() { const args = await yargs .usage('Usage: $0') .option('output', { alias: 'o', type: 'string', required: false, desc: 'Output filename, the file type is automatically added. Defaults to API.md if format is markdown (-f md) or API.json if format is JSON (-f json). If more than one language is passed, then the language will be included in the filename e.g. API.typescript.md' }) .option('format', { alias: 'f', default: 'md', choices: ['md', 'json'], desc: 'Output format, markdown or json' }) .option('language', { array: true, alias: 'l', default: ['typescript'], choices: transpile_1.Language.values().map(x => x.toString()), desc: 'Output language' }) .option('package', { alias: 'p', type: 'string', required: false, desc: 'The name@version of an NPM package to document', defaultDescription: 'The package in the current directory' }) .option('readme', { alias: 'r', type: 'boolean', required: false, desc: 'Include the user defined README.md in the documentation.' }) .option('submodule', { alias: 's', type: 'string', required: false, desc: 'Generate docs for a specific submodule (or "root")' }) .option('split-by-submodule', { type: 'boolean', required: false, desc: 'Generate a separate file for each submodule' }) .example('$0', 'Generate documentation for the current module as a single file (auto-resolves node dependencies)') .argv; const submodule = args.submodule === 'root' ? undefined : args.submodule; const allSubmodules = !args.submodule; const readme = args.readme; const splitBySubmodules = args['split-by-submodule']; const docs = await (args.package ? index_1.Documentation.forPackage(args.package) : index_1.Documentation.forProject(process.cwd())); const options = (lang, output = 'API', includeLanguageInOutputName = false) => { const format = args.format === 'md' ? 'md' : 'json'; // Clean the user provided output of a possible file ending let outputFileName = output.endsWith(`.${format}`) ? output.slice(0, -(format.length + 1)) : output; // for multi language docs, include the language in the filename if (includeLanguageInOutputName) { outputFileName = `${outputFileName}.${lang}`; } return ({ readme, language: transpile_1.Language.fromString(lang), submodule, allSubmodules, splitBySubmodules, format, output: outputFileName, }); }; if (args.language.length <= 1) { await generateForLanguage(docs, options(args.language[0], args.output)); } else { for (const lang of args.language) { await generateForLanguage(docs, options(lang, args.output, true)); } } } main().catch(e => { console.error(e); process.exit(1); }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2NsaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQW1EQSxvQkFvREM7QUF2R0QsZ0RBQWtDO0FBQ2xDLGdEQUFrQztBQUNsQyw2Q0FBK0I7QUFDL0IsNERBQTBFO0FBQzFFLG1DQUF3QztBQVl4QyxLQUFLLFVBQVUsbUJBQW1CLENBQUMsSUFBbUIsRUFBRSxPQUF3QjtJQUM5RSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxHQUFHLE9BQU8sQ0FBQztJQUNuQyw4QkFBOEI7SUFDOUIsTUFBTSxlQUFlLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUNyRSxNQUFNLGVBQWUsR0FBRyxlQUFlLENBQUMsQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLElBQUksTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztJQUV4RixnQ0FBZ0M7SUFDaEMsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUN4QyxNQUFNLEVBQUUsQ0FBQyxLQUFLLENBQUMsVUFBVSxFQUFFLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7SUFFaEQsSUFBSSxPQUFPLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztRQUM5QixJQUFJLE1BQU0sS0FBSyxJQUFJLEVBQUUsQ0FBQztZQUNwQixNQUFNLElBQUksS0FBSyxDQUFDLG1EQUFtRCxDQUFDLENBQUM7UUFDdkUsQ0FBQztRQUVELE1BQU0sVUFBVSxHQUFHLE1BQU0sSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQy9DLEtBQUssTUFBTSxTQUFTLElBQUksVUFBVSxFQUFFLENBQUM7WUFDbkMsTUFBTSxPQUFPLEdBQUcs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QUNoQyxjQUFjLEdBQUcsR0FBRyxjQUFjLElBQUksSUFBSSxFQUFFLENBQUM7UUFDL0MsQ0FBQztRQUVELE9BQU8sQ0FBQztZQUNOLE1BQU07WUFDTixRQUFRLEVBQUUsb0JBQVEsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDO1lBQ25DLFNBQVM7WUFDVCxhQUFhO1lBQ2IsaUJBQWlCO1lBQ2pCLE1BQU07WUFDTixNQUFNLEVBQUUsY0FBYztTQUN2QixDQUFDLENBQUM7SUFDTCxDQUFDLENBQUM7SUFFRixJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxJQUFJLENBQUMsRUFBRSxDQUFDO1FBQzlCLE1BQU0sbUJBQW1CLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQzFFLENBQUM7U0FBTSxDQUFDO1FBQ04sS0FBSyxNQUFNLElBQUksSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDakMsTUFBTSxtQkFBbUIsQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDcEUsQ0FBQztJQUNILENBQUM7QUFDSCxDQUFDO0FBRUQsSUFBSSxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFO0lBQ2YsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNqQixPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2xCLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgZnMgZnJvbSAnZnMvcHJvbWlzZXMnO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdub2RlOnBhdGgnO1xuaW1wb3J0ICogYXMgeWFyZ3MgZnJvbSAneWFyZ3MnO1xuaW1wb3J0IHsgTGFuZ3VhZ2UsIHN1Ym1vZHVsZVJlbE5hbWUgfSBmcm9tICcuL2RvY2dlbi90cmFuc3BpbGUvdHJhbnNwaWxlJztcbmltcG9ydCB7IERvY3VtZW50YXRpb24gfSBmcm9tICcuL2luZGV4JztcblxudHlwZSBHZW5lcmF0ZU9wdGlvbnMgPSB7XG4gIHJlYWRtZT86IGJvb2xlYW47XG4gIGxhbmd1YWdlOiBMYW5ndWFnZTtcbiAgc3VibW9kdWxlPzogc3RyaW5nO1xuICBhbGxTdWJtb2R1bGVzPzogYm9vbGVhbjtcbiAgc3BsaXRCeVN1Ym1vZHVsZXM/OiBib29sZWFuO1xuICBmb3JtYXQ6ICdtZCcgfCAnanNvbic7XG4gIG91dHB1dDogc3RyaW5nO1xufVxuXG5hc3luYyBmdW5jdGlvbiBnZW5lcmF0ZUZvckxhbmd1YWdlKGRvY3M6IERvY3VtZW50YXRpb24sIG9wdGlvbnM6IEdlbmVyYXRlT3B0aW9ucykge1xuICBjb25zdCB7IGZvcm1hdCwgb3V0cHV0IH0gPSBvcHRpb25zO1xuICAvLyBlLmcuIEFQSS50eXBlc2NyaXB0IGFzIG5hbWVcbiAgY29uc3Qgc3BsaXRCeUxhbmd1YWdlID0gb3V0cHV0LmVuZHNXaXRoKGAuJHtvcHRpb25zLmxhbmd1YWdlLm5hbWV9YCk7XG4gIGNvbnN0IHN1Ym1vZHVsZVN1ZmZpeCA9IHNwbGl0QnlMYW5ndWFnZSA/IGAke29wdGlvbnMubGFuZ3VhZ2UubmFtZX0uJHtmb3JtYXR9YCA6IGZvcm1hdDtcblxuICAvLyBFbnN1cmUgdGhlIG91dHB1dCBwYXRoIGV4aXN0c1xuICBjb25zdCBvdXRwdXRQYXRoID0gcGF0aC5kaXJuYW1lKG91dHB1dCk7XG4gIGF3YWl0IGZzLm1rZGlyKG91dHB1dFBhdGgsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuXG4gIGlmIChvcHRpb25zLnNwbGl0QnlTdWJtb2R1bGVzKSB7XG4gICAgaWYgKGZvcm1hdCAhPT0gJ21kJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdzcGxpdC1ieS1zdWJtb2R1bGUgaXMgb25seSBzdXBwb3J0ZWQgZm9yIG1hcmtkb3duJyk7XG4gICAgfVxuXG4gICAgY29uc3Qgc3VibW9kdWxlcyA9IGF3YWl0IGRvY3MubGlzdFN1Ym1vZHVsZXMoKTtcbiAgICBmb3IgKGNvbnN0IHN1Ym1vZHVsZSBvZiBzdWJtb2R1bGVzKSB7XG4gICAgICBjb25zdCBjb250ZW50ID0gYXdhaXQgZG9jcy50b01hcmtkb3duKHtcbiAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgc3VibW9kdWxlOiBzdWJtb2R1bGUuZnFuLFxuICAgICAgICBhbGxTdWJtb2R1bGVzOiBmYWxzZSxcbiAgICAgICAgaGVhZGVyOiB7IHRpdGxlOiBgXFxgJHtzdWJtb2R1bGVSZWxOYW1lKHN1Ym1vZHVsZSl9XFxgIFN1Ym1vZHVsZWAsIGlkOiBzdWJtb2R1bGUuZnFuIH0sXG4gICAgICB9KTtcblxuICAgICAgYXdhaXQgZnMud3JpdGVGaWxlKHBhdGguam9pbihvdXRwdXRQYXRoLCBgJHtzdWJtb2R1bGVSZWxOYW1lKHN1Ym1vZHVsZSl9LiR7c3VibW9kdWxlU3VmZml4fWApLCBjb250ZW50LnJlbmRlcigpKTtcbiAgICB9XG5cbiAgICBhd2FpdCBmcy53cml0ZUZpbGUoYCR7b3V0cHV0fS4ke2Zvcm1hdH1gLCBhd2FpdCAoYXdhaXQgZG9jcy50b0luZGV4TWFya2Rvd24oc3VibW9kdWxlU3VmZml4LCBvcHRpb25zKSkucmVuZGVyKCkpO1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IGNvbnRlbnQgPSBhd2FpdCAoZm9ybWF0ID09PSAnbWQnID8gZG9jcy50b01hcmtkb3duKG9wdGlvbnMpIDogZG9jcy50b0pzb24ob3B0aW9ucykpO1xuICAgIGF3YWl0IGZzLndyaXRlRmlsZShgJHtvdXRwdXR9LiR7Zm9ybWF0fWAsIGNvbnRlbnQucmVuZGVyKCkpO1xuICB9XG59XG5cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIG1haW4oKSB7XG4gIGNvbnN0IGFyZ3MgPSBhd2FpdCB5YXJnc1xuICAgIC51c2FnZSgnVXNhZ2U6ICQwJylcbiAgICAub3B0aW9uKCdvdXRwdXQnLCB7IGFsaWFzOiAnbycsIHR5cGU6ICdzdHJpbmcnLCByZXF1aXJlZDogZmFsc2UsIGRlc2M6ICdPdXRwdXQgZmlsZW5hbWUsIHRoZSBmaWxlIHR5cGUgaXMgYXV0b21hdGljYWxseSBhZGRlZC4gRGVmYXVsdHMgdG8gQVBJLm1kIGlmIGZvcm1hdCBpcyBtYXJrZG93biAoLWYgbWQpIG9yIEFQSS5qc29uIGlmIGZvcm1hdCBpcyBKU09OICgtZiBqc29uKS4gSWYgbW9yZSB0aGFuIG9uZSBsYW5ndWFnZSBpcyBwYXNzZWQsIHRoZW4gdGhlIGxhbmd1YWdlIHdpbGwgYmUgaW5jbHVkZWQgaW4gdGhlIGZpbGVuYW1lIGUuZy4gQVBJLnR5cGVzY3JpcHQubWQnIH0pXG4gICAgLm9wdGlvbignZm9ybWF0JywgeyBhbGlhczogJ2YnLCBkZWZhdWx0OiAnbWQnLCBjaG9pY2VzOiBbJ21kJywgJ2pzb24nXSwgZGVzYzogJ091dHB1dCBmb3JtYXQsIG1hcmtkb3duIG9yIGpzb24nIH0pXG4gICAgLm9wdGlvbignbGFuZ3VhZ2UnLCB7IGFycmF5OiB0cnVlLCBhbGlhczogJ2wnLCBkZWZhdWx0OiBbJ3R5cGVzY3JpcHQnXSwgY2hvaWNlczogTGFuZ3VhZ2UudmFsdWVzKCkubWFwKHggPT4geC50b1N0cmluZygpKSwgZGVzYzogJ091dHB1dCBsYW5ndWFnZScgfSlcbiAgICAub3B0aW9uKCdwYWNrYWdlJywgeyBhbGlhczogJ3AnLCB0eXBlOiAnc3RyaW5nJywgcmVxdWlyZWQ6IGZhbHNlLCBkZXNjOiAnVGhlIG5hbWVAdmVyc2lvbiBvZiBhbiBOUE0gcGFja2FnZSB0byBkb2N1bWVudCcsIGRlZmF1bHREZXNjcmlwdGlvbjogJ1RoZSBwYWNrYWdlIGluIHRoZSBjdXJyZW50IGRpcmVjdG9yeScgfSlcbiAgICAub3B0aW9uKCdyZWFkbWUnLCB7IGFsaWFzOiAncicsIHR5cGU6ICdib29sZWFuJywgcmVxdWlyZWQ6IGZhbHNlLCBkZXNjOiAnSW5jbHVkZSB0aGUgdXNlciBkZWZpbmVkIFJFQURNRS5tZCBpbiB0aGUgZG9jdW1lbnRhdGlvbi4nIH0pXG4gICAgLm9wdGlvbignc3VibW9kdWxlJywgeyBhbGlhczogJ3MnLCB0eXBlOiAnc3RyaW5nJywgcmVxdWlyZWQ6IGZhbHNlLCBkZXNjOiAnR2VuZXJhdGUgZG9jcyBmb3IgYSBzcGVjaWZpYyBzdWJtb2R1bGUgKG9yIFwicm9vdFwiKScgfSlcbiAgICAub3B0aW9uKCdzcGxpdC1ieS1zdWJtb2R1bGUnLCB7IHR5cGU6ICdib29sZWFuJywgcmVxdWlyZWQ6IGZhbHNlLCBkZXNjOiAnR2VuZXJhdGUgYSBzZXBhcmF0ZSBmaWxlIGZvciBlYWNoIHN1Ym1vZHVsZScgfSlcbiAgICAuZXhhbXBsZSgnJDAnLCAnR2VuZXJhdGUgZG9jdW1lbnRhdGlvbiBmb3IgdGhlIGN1cnJlbnQgbW9kdWxlIGFzIGEgc2luZ2xlIGZpbGUgKGF1dG8tcmVzb2x2ZXMgbm9kZSBkZXBlbmRlbmNpZXMpJylcbiAgICAuYXJndjtcblxuICBjb25zdCBzdWJtb2R1bGUgPSBhcmdzLnN1Ym1vZHVsZSA9PT0gJ3Jvb3QnID8gdW5kZWZpbmVkIDogYXJncy5zdWJtb2R1bGU7XG4gIGNvbnN0IGFsbFN1Ym1vZHVsZXMgPSAhYXJncy5zdWJtb2R1bGU7XG4gIGNvbnN0IHJlYWRtZSA9IGFyZ3MucmVhZG1lO1xuICBjb25zdCBzcGxpdEJ5U3VibW9kdWxlcyA9IGFyZ3NbJ3NwbGl0LWJ5LXN1Ym1vZHVsZSddO1xuICBjb25zdCBkb2NzID0gYXdhaXQgKGFyZ3MucGFja2FnZVxuICAgID8gRG9jdW1lbnRhdGlvbi5mb3JQYWNrYWdlKGFyZ3MucGFja2FnZSlcbiAgICA6IERvY3VtZW50YXRpb24uZm9yUHJvamVjdChwcm9jZXNzLmN3ZCgpKSk7XG5cbiAgY29uc3Qgb3B0aW9ucyA9IChsYW5nOiBzdHJpbmcsIG91dHB1dDogc3RyaW5nID0gJ0FQSScsIGluY2x1ZGVMYW5ndWFnZUluT3V0cHV0TmFtZSA9IGZhbHNlKTogR2VuZXJhdGVPcHRpb25zID0+IHtcbiAgICBjb25zdCBmb3JtYXQgPSBhcmdzLmZvcm1hdCA9PT0gJ21kJyA/ICdtZCcgOiAnanNvbic7XG5cbiAgICAvLyBDbGVhbiB0aGUgdXNlciBwcm92aWRlZCBvdXRwdXQgb2YgYSBwb3NzaWJsZSBmaWxlIGVuZGluZ1xuICAgIGxldCBvdXRwdXRGaWxlTmFtZSA9IG91dHB1dC5lbmRzV2l0aChgLiR7Zm9ybWF0fWApXG4gICAgICA/IG91dHB1dC5zbGljZSgwLCAtKGZvcm1hdC5sZW5ndGggKyAxKSlcbiAgICAgIDogb3V0cHV0O1xuXG4gICAgLy8gZm9yIG11bHRpIGxhbmd1YWdlIGRvY3MsIGluY2x1ZGUgdGhlIGxhbmd1YWdlIGluIHRoZSBmaWxlbmFtZVxuICAgIGlmIChpbmNsdWRlTGFuZ3VhZ2VJbk91dHB1dE5hbWUpIHtcbiAgICAgIG91dHB1dEZpbGVOYW1lID0gYCR7b3V0cHV0RmlsZU5hbWV9LiR7bGFuZ31gO1xuICAgIH1cblxuICAgIHJldHVybiAoe1xuICAgICAgcmVhZG1lLFxuICAgICAgbGFuZ3VhZ2U6IExhbmd1YWdlLmZyb21TdHJpbmcobGFuZyksXG4gICAgICBzdWJtb2R1bGUsXG4gICAgICBhbGxTdWJtb2R1bGVzLFxuICAgICAgc3BsaXRCeVN1Ym1vZHVsZXMsXG4gICAgICBmb3JtYXQsXG4gICAgICBvdXRwdXQ6IG91dHB1dEZpbGVOYW1lLFxuICAgIH0pO1xuICB9O1xuXG4gIGlmIChhcmdzLmxhbmd1YWdlLmxlbmd0aCA8PSAxKSB7XG4gICAgYXdhaXQgZ2VuZXJhdGVGb3JMYW5ndWFnZShkb2NzLCBvcHRpb25zKGFyZ3MubGFuZ3VhZ2VbMF0sIGFyZ3Mub3V0cHV0KSk7XG4gIH0gZWxzZSB7XG4gICAgZm9yIChjb25zdCBsYW5nIG9mIGFyZ3MubGFuZ3VhZ2UpIHtcbiAgICAgIGF3YWl0IGdlbmVyYXRlRm9yTGFuZ3VhZ2UoZG9jcywgb3B0aW9ucyhsYW5nLCBhcmdzLm91dHB1dCwgdHJ1ZSkpO1xuICAgIH1cbiAgfVxufVxuXG5tYWluKCkuY2F0Y2goZSA9PiB7XG4gIGNvbnNvbGUuZXJyb3IoZSk7XG4gIHByb2Nlc3MuZXhpdCgxKTtcbn0pO1xuXG4iXX0=