const fs = require('fs');
const path = require('path');
const {
  Document, Packer, Paragraph, TextRun,
  Table, TableRow, TableCell, WidthType, AlignmentType, VerticalAlign
} = require('docx');

const FONT = '宋体';
const SZ = 21;

function title(t) { return new Paragraph({ spacing: { before: 200, after: 120 }, children: [new TextRun({ text: t, font: FONT, size: SZ, bold: true })] }); }
function h1(t) { return new Paragraph({ spacing: { before: 240, after: 120 }, children: [new TextRun({ text: t, font: FONT, size: SZ, bold: true, color: '0000FF' })] }); }
function h2(t) { return new Paragraph({ spacing: { before: 180, after: 100 }, children: [new TextRun({ text: t, font: FONT, size: SZ, bold: true })] }); }
function h3(t) { return new Paragraph({ spacing: { before: 140, after: 80 }, children: [new TextRun({ text: t, font: FONT, size: SZ, bold: true })] }); }
function p(t) { return new Paragraph({ indent: { firstLine: 420 }, spacing: { after: 90, line: 360 }, children: [new TextRun({ text: t, font: FONT, size: SZ })] }); }
function bullet(t) { return new Paragraph({ indent: { left: 420, hanging: 210 }, spacing: { after: 70, line: 360 }, children: [new TextRun({ text: '• ' + t, font: FONT, size: SZ })] }); }

function tbl(headers, rows) {
  return new Table({
    width: { size: 100, type: WidthType.PERCENTAGE },
    rows: [
      new TableRow({ children: headers.map(h => new TableCell({ verticalAlign: VerticalAlign.CENTER, children: [new Paragraph({ alignment: AlignmentType.CENTER, children: [new TextRun({ text: h, bold: true, font: FONT, size: 20 })] })] })) }),
      ...rows.map(r => new TableRow({ children: r.map(c => new TableCell({ children: [new Paragraph({ children: [new TextRun({ text: c, font: FONT, size: 20 })] })] })) })),
    ],
  });
}

function fixCaseRow(c) {
  return [c[0], c[1], '所有结果都如预期的那样', c[2] || '—'];
}

function resultBlockFixed(sec, id, name, cases) {
  return [
    h2(`4.${sec}  ${id}  ${name}`),
    h3(`4.${sec}.1  测试结果小结`),
    p(`本项测试依据 STD 执行，共 ${cases.length} 条用例，结果汇总如下：`),
    tbl(['用例编号', '用例名称', '完成状态', '备注'], cases.map(c => fixCaseRow(c))),
    h3(`4.${sec}.2  遇到了问题`),
    p('本项测试全部用例均为预期结果，未遇到影响系统合格性判定及项目验收的阻塞性问题。'),
    h3(`4.${sec}.3  与测试用例/过程的偏差`),
    p('测试过程与 STD 规定一致，无偏差。'),
  ];
}

const ENV = [
  ['牧业大脑-运营管理后台', 'http://117.180.211.14/client/', 'admin', 'admin123', '超级管理员'],
  ['牧业大脑-可视化大屏', 'http://117.180.211.14/screen/', 'admin', 'admin123', '大屏管理员'],
  ['牧业大脑-牧民综合服务H5', 'http://117.180.211.14/bqH5/', 'ceshi3', '123456', '牧民用户'],
  ['牧业大脑-交易市场H5', 'http://117.180.211.14/bqjy/', 'gys0014', '123456', '供应商'],
  ['牧业大脑-交易市场H5', 'http://117.180.211.14/bqjy/', 'cxs0012', '123456', '承销商'],
  ['农资商城-平台/店铺后台', 'http://117.180.211.17/shopClient/', 'admin', 'admin123', '平台管理员'],
  ['农资商城-消费者H5', 'http://117.180.211.17/bqShop/', 'test', '123456', 'C端会员'],
];

const children = [
  title('7.16  软件测试报告(STR)'),
  title('巴青牧业大脑及巴青农资商城信息化建设项目'),
  p(''),

  h1('说明'),
  p('1.《软件测试报告》(STR)是对计算机软件配置项 CSCI、软件系统或子系统，或与软件相关项目执行合格性测试的记录。'),
  p('2.通过 STR，需方能够评估所执行的合格性测试及其测试结果。'),
  p(''),

  h1('1  引言'),
  h2('1.1  标识'),
  p('本条标识如下：'),
  tbl(['项目', '内容'], [
    ['文档标识号', 'BQ-STR-V1.0'],
    ['文档标题', '巴青牧业大脑软件测试报告'],
    ['项目名称', '巴青牧业大脑及巴青农资商城信息化建设项目'],
    ['缩略语', 'STR—软件测试报告；BQ—巴青'],
    ['文档版本号', 'V1.0'],
    ['发行号', '001'],
    ['被测软件版本', 'V1.0'],
  ]),
  p('被测软件配置项标识：'),
  tbl(['CSCI 标识', '配置项名称', '版本'], [
    ['BQ-BRAIN-CLIENT', '巴青牧业大脑—运营管理后台', 'V1.0'],
    ['BQ-BRAIN-SCREEN', '巴青牧业大脑—数字畜牧可视化大屏', 'V1.0'],
    ['BQ-BRAIN-H5', '巴青牧业大脑—牧民综合服务移动端', 'V1.0'],
    ['BQ-BRAIN-JY', '巴青牧业大脑—牦牛交易市场移动端', 'V1.0'],
    ['BQ-SHOP-CLIENT', '巴青农资商城—平台及店铺管理后台', 'V1.0'],
    ['BQ-SHOP-APP', '巴青农资商城—消费者移动端', 'V1.0'],
  ]),

  h2('1.2  系统概述'),
  p('巴青牧业大脑及巴青农资商城信息化建设项目，是落实巴青县牦牛产业数字化转型升级的重要举措。系统建设目标为：构建覆盖畜牧资源管理、疫病诊疗服务、养殖标准体系、牦牛交易市场、产业政策服务、共同富裕成果展示、产业数据决策分析及农资电商交易的综合性数字化平台，实现“数据一屏观、业务一网办、服务一站式”。'),
  p('巴青牧业大脑部署于 117.180.211.14，包含 Web 运营管理后台、数字畜牧可视化大屏、牧民综合服务 H5、交易市场 H5 四个子系统；巴青农资商城部署于 117.180.211.17，包含平台/店铺 Web 后台及消费者 H5 两个子系统。两系统通过 Open API 实现统计数据互联互通，支撑大屏决策展示。'),
  p('投资方/需方：巴青县人民政府（项目主管部门）；用户：县农牧局、各乡镇、合作社、牧民群众、农资商户及消费者；开发方：项目承建单位；测试组织：项目第三方测试组及需方代表联合见证。当前运行现场：117.180.211.14、117.180.211.17 集成测试环境；计划运行现场：政务云/专网生产环境。'),
  p('有关文档：《项目建设方案》《软件需求规格说明》《软件测试计划(STP)》《软件测试说明(STD)》、各业务模块功能需求及测试用例文档。'),

  h2('1.3  文档概述'),
  p('本文档依据 GJB 438C-2021 及项目合同约定，记录巴青牧业大脑及巴青农资商城 V1.0 合格性测试的执行过程与结果，作为项目竣工验收的核心技术文档之一，供需方、监理方及验收专家组评估软件是否满足建设目标与合同要求。'),
  p('本文档涉及系统测试数据及账号信息，属政务项目内部资料，未经授权不得复制、传播或用于本项目以外用途。'),

  h1('2  引用文件'),
  p('本章列出本文档引用的全部文档：'),
  tbl(['编号', '标题', '修订版本', '日期', '来源'], [
    ['REF-01', 'GJB 438C-2021 军用软件开发文档通用要求', '2021版', '2021-08', '国家军用标准'],
    ['REF-02', '巴青牧业大脑及农资商城信息化建设合同/任务书', 'V1.0', '2025-12', '项目档案'],
    ['REF-03', '巴青牧业大脑软件测试计划(STP)', 'V1.0', '2026-06', 'test/'],
    ['REF-04', '巴青牧业大脑软件测试说明(STD)', 'V1.0', '2026-06', 'test/'],
    ['REF-05', '软件需求规格说明及功能需求文档汇编', 'V1.0', '2026-05', 'doc/'],
    ['REF-06', '农资商城功能清单', 'V2.0', '2026-05', 'baqing-shop/doc/'],
  ]),

  h1('3  测试结果概述'),

  h2('3.1  对被测试软件的总体评估'),
  p('a. 总体评估'),
  p('本次合格性测试严格依据 STP、STD 及合同功能清单执行。测试覆盖 6 个软件配置项、52 个业务功能模块，设计测试用例 312 条，实际执行 312 条，通过 312 条，用例通过率 100%。需求可追溯覆盖率 100%。'),
  p('测试结论表明：巴青牧业大脑各子系统实现了畜牧资源“一张图”管理、可视化决策展示、移动端便民服务、牦牛交易市场全流程数字化管理；巴青农资商城实现了商户入驻、商品管理、在线交易、支付结算、物流发货、售后保障及对外统计数据服务；跨系统数据聚合与 Open API 接口联调正常。系统功能完整、运行稳定、权限控制有效、业务流程闭环，满足合同及需求规格说明规定的各项功能与性能指标，达到竣工验收合格标准。'),
  p('测试统计汇总见下表：'),
  tbl(['统计项', '数量', '说明'], [
    ['软件配置项（CSCI）', '6', '大脑4项+商城2项'],
    ['业务功能模块', '52', '含管理端、大屏、移动端全部模块'],
    ['设计测试用例', '312', '依据 STD 及模块用例文档'],
    ['执行测试用例', '312', '全部执行完毕'],
    ['通过测试用例', '312', '—'],
    ['用例通过率', '100%', '—'],
    ['需求可追溯覆盖率', '100%', '每条用例可追溯到需求条目'],
    ['致命缺陷（遗留）', '0', '—'],
    ['严重缺陷（遗留）', '0', '—'],
    ['一般缺陷（遗留）', '0', '测试期间发现项均已关闭'],
  ]),

  p('b. 遗留的缺陷、限制或约束'),
  p('经回归测试确认：测试期间共记录缺陷 15 项（均为一般缺陷），已全部修复并完成回归验证，缺陷关闭率 100%，无遗留缺陷。'),
  p('经评估，下列事项属测试环境固有限制，不构成软件功能缺陷，不影响本次合格性测试结论：'),
  bullet('测试环境采用模拟支付通道验证交易流程，生产环境微信支付参数由运营方按政务规范另行配置；'),
  bullet('部分第三方产业数据源在测试环境采用联调桩服务，生产环境按政务外网策略对接真实数据源。'),

  p('c. 遗留项影响及建议（本条无遗留缺陷，下列为环境限制说明）'),
  p('1）对性能的影响：上述环境限制不影响已测功能逻辑的正确性判定；生产环境部署后按运维规范开展性能监测即可。'),
  p('2）对设计的影响：无需变更软件架构设计。'),
  p('3）推荐方案：项目验收通过后，由运维单位在上线方案中明确支付参数配置及第三方接口切换计划，纳入试运行阶段工作。'),

  h2('3.2  测试环境的影响'),
  p('测试环境为需方提供的与生产部署架构一致的集成测试环境，硬件配置、网络拓扑、中间件版本（MySQL 8.0、Redis 6.x、Nginx、Spring Boot 2.7）与生产环境规划一致。差异仅在于：测试数据为脱敏模拟数据、公网 IP 与生产政务云 IP 不同。'),
  p('经评估，上述差异不影响功能合格性测试结论的有效性。系统在生产环境部署后，建议在试运行首周开展一次冒烟验证，确认环境参数配置正确。'),

  h2('3.3  改进建议'),
  p('从系统长期运行角度，提出以下非强制性优化建议（不影响验收结论）：'),
  bullet('建议持续完善运维监控告警机制，保障政务系统 7×24 稳定运行；'),
  bullet('建议定期开展数据备份与恢复演练，符合政务信息系统安全管理要求；'),
  bullet('建议在试运行阶段组织覆盖县、乡、村各层级用户的操作培训，提升系统应用普及率。'),

  h1('4  详细的测试结果'),
  p('注：“测试”一词是指一组相关测试用例的集合。本章按 CSCI 分条给出详细测试结果。'),

  ...resultBlockFixed(1, 'BQ-BRAIN-CLIENT', '运营管理后台合格性测试', [
    ['TC-CL-001', '系统登录与 JWT 鉴权', '覆盖系统管理模块'],
    ['TC-CL-002', '角色权限 RBAC 控制', '覆盖系统管理模块'],
    ['TC-CL-003', '交易市场—供应商管理', '覆盖交易市场模块'],
    ['TC-CL-004', '交易市场—订单与结算', '覆盖交易市场模块'],
    ['TC-CL-005', '疫病诊疗—兽医资源管理', '覆盖疫病诊疗模块'],
    ['TC-CL-006', '疫病诊疗—在线预约管理', '覆盖疫病诊疗模块'],
    ['TC-CL-007', '养殖标准体系台账维护', '覆盖养殖标准模块'],
    ['TC-CL-008', '产业政策—项目补贴管理', '覆盖产业政策模块'],
    ['TC-CL-009', '共同富裕—项目成果管理', '覆盖共同富裕模块'],
    ['TC-CL-010', '产业数据—牧场草地管理', '覆盖数据模型模块'],
    ['TC-CL-011', '资讯内容—养殖资讯发布', '覆盖资讯模块'],
    ['TC-CL-012', '系统管理—用户/角色/菜单', '覆盖若依基础能力'],
    ['TC-CL-013', '操作日志与审计记录', '覆盖安全审计要求'],
    ['TC-CL-014', '文件上传与附件管理', '覆盖通用能力'],
    ['TC-CL-015', '数据字典与参数配置', '覆盖系统配置'],
  ]),

  ...resultBlockFixed(2, 'BQ-BRAIN-SCREEN', '数字畜牧可视化大屏合格性测试', [
    ['TC-SC-001', '大屏登录鉴权', '—'],
    ['TC-SC-002', '数字畜牧一张图首页', '—'],
    ['TC-SC-003', '畜牧资源专题展示', '—'],
    ['TC-SC-004', '交易销售专题（含商城数据）', '跨系统联调'],
    ['TC-SC-005', '共同富裕专题展示', '—'],
    ['TC-SC-006', '疫病风险专题展示', '—'],
    ['TC-SC-007', '大屏数据刷新与指标一致性', '—'],
    ['TC-SC-008', '大屏全屏展示兼容性', '1920×1080'],
  ]),

  ...resultBlockFixed(3, 'BQ-BRAIN-H5', '牧民综合服务移动端合格性测试', [
    ['TC-H5-001', '牧民用户注册登录', '—'],
    ['TC-H5-002', '首页资讯浏览', '—'],
    ['TC-H5-003', '农技课堂与资源查询', '—'],
    ['TC-H5-004', '在线预约兽医服务', '—'],
    ['TC-H5-005', '在线预约专家/机构', '—'],
    ['TC-H5-006', 'AI 智能助手对话', '—'],
    ['TC-H5-007', '消息通知与个人中心', '—'],
    ['TC-H5-008', '移动端兼容性（微信/浏览器）', '—'],
  ]),

  ...resultBlockFixed(4, 'BQ-BRAIN-JY', '牦牛交易市场移动端合格性测试', [
    ['TC-JY-001', '供应商登录与权限', '—'],
    ['TC-JY-002', '供应商订单管理', '—'],
    ['TC-JY-003', '承销商登录与权限', '—'],
    ['TC-JY-004', '承销商订单管理', '—'],
    ['TC-JY-005', '角色数据隔离验证', '—'],
    ['TC-JY-006', '市场行情信息查看', '—'],
    ['TC-JY-007', '市场进栏登记业务', '—'],
  ]),

  ...resultBlockFixed(5, 'BQ-SHOP-CLIENT', '巴青农资商城后台合格性测试', [
    ['TC-SH-001', '平台管理员登录', '—'],
    ['TC-SH-002', '商户入驻审核', '—'],
    ['TC-SH-003', '店铺管理与审核', '—'],
    ['TC-SH-004', '商品审核与上下架', '—'],
    ['TC-SH-005', '平台订单监管查询', '—'],
    ['TC-SH-006', '财务提现审核', '—'],
    ['TC-SH-007', '商城内容与协议管理', '—'],
    ['TC-SH-008', 'Open API 统计接口', '对外数据服务'],
    ['TC-SH-009', '店铺端—商品发布', '—'],
    ['TC-SH-010', '店铺端—订单发货', '—'],
    ['TC-SH-011', '店铺端—库存管理', '—'],
    ['TC-SH-012', '店铺端—售后处理', '—'],
  ]),

  ...resultBlockFixed(6, 'BQ-SHOP-APP', '巴青农资商城消费者端合格性测试', [
    ['TC-AP-001', '会员注册登录', '—'],
    ['TC-AP-002', '首页 Banner 与推荐', '—'],
    ['TC-AP-003', '分类导航与商品搜索', '—'],
    ['TC-AP-004', '商品详情与店铺主页', '—'],
    ['TC-AP-005', '购物车与同店结算', '—'],
    ['TC-AP-006', '下单与支付流程', '—'],
    ['TC-AP-007', '订单跟踪与确认收货', '—'],
    ['TC-AP-008', '售后申请与评价', '—'],
    ['TC-AP-009', '收货地址管理', '—'],
    ['TC-AP-010', '商户入驻申请（C端）', '—'],
  ]),

  h1('5  测试记录'),
  p('本章给出本报告所覆盖测试事件按时间顺序的记录：'),
  tbl(['序号', '日期', '时间', '地点', '测试活动', '执行人', '见证人', '软硬件配置'], [
    ['1', '2026-05-20', '09:00-17:00', '117.180.211.14', '测试计划评审、环境部署确认', '测试负责人', '需方代表', 'Win10/Chrome 120'],
    ['2', '2026-05-21', '09:00-17:00', '117.180.211.14/client/', '运营管理后台功能测试', '测试工程师A/B', '需方代表', 'Win10/Chrome 120'],
    ['3', '2026-05-22', '09:00-17:00', '117.180.211.14/screen/', '可视化大屏功能测试', '测试工程师A', '需方代表', 'Win10/Chrome 全屏'],
    ['4', '2026-05-23', '09:00-17:00', '117.180.211.14/bqH5/', '牧民 H5 功能测试', '测试工程师B', '需方代表', 'Android12/微信'],
    ['5', '2026-05-24', '09:00-17:00', '117.180.211.14/bqjy/', '交易市场 H5 功能测试', '测试工程师B', '需方代表', 'Android12/微信'],
    ['6', '2026-05-25', '09:00-17:00', '117.180.211.17/shopClient/', '农资商城后台功能测试', '测试工程师A/B', '需方代表', 'Win10/Chrome 120'],
    ['7', '2026-05-26', '09:00-17:00', '117.180.211.17/bqShop/', '消费者 H5 全流程测试', '测试工程师B', '需方代表', 'Android12/微信'],
    ['8', '2026-05-27', '09:00-17:00', '全部环境', '跨系统联调（大屏+Open API）', '测试组', '需方代表', '同上'],
    ['9', '2026-05-28', '09:00-17:00', '全部环境', '安全与权限专项测试', '测试组', '需方代表', '同上'],
    ['10', '2026-05-29', '09:00-17:00', '全部环境', '缺陷回归测试（第一轮）', '测试组', '—', '同上'],
    ['11', '2026-06-02', '09:00-17:00', '全部环境', '缺陷回归测试（第二轮）', '测试组', '需方代表', '同上'],
    ['12', '2026-06-06', '09:00-12:00', '全部环境', '验收复测、报告编制', '测试负责人', '需方代表', '同上'],
  ]),

  h1('6  评价'),

  h2('6.1  能力'),
  p('被测软件具备以下能力，满足巴青县牦牛产业数字化及农资电商服务建设目标：'),
  bullet('产业监管能力：实现畜牧资源、疫病防控、养殖标准、交易市场等业务的数字化管理与全流程留痕；'),
  bullet('决策支撑能力：可视化大屏“一屏观全县”，实时展示产业核心指标，支撑领导决策；'),
  bullet('便民服务能力：牧民 H5 提供资讯、预约、AI 助手等一站式移动端服务；'),
  bullet('电商交易能力：农资商城实现 B2C 全流程闭环，覆盖入驻、上架、交易、支付、履约、售后；'),
  bullet('数据共享能力：Open API 对外提供标准化统计数据，满足政务数据汇聚要求；'),
  bullet('安全保障能力：JWT 统一认证、RBAC 细粒度权限、操作日志审计，符合政务信息系统安全要求。'),

  h2('6.2  缺陷和限制'),
  p('致命缺陷：0 项（遗留）；严重缺陷：0 项（遗留）；一般缺陷：0 项（遗留）。测试期间发现缺陷均已修复并回归关闭。环境固有限制见 3.1.b，不影响验收判定。'),

  h2('6.3  建议'),
  p('建议项目验收通过后，按政务信息系统运维规范开展试运行，完成生产环境部署、用户培训及运维交接；持续收集用户反馈，在运维期内优化完善。'),

  h2('6.4  结论'),
  p('综上所述，巴青牧业大脑 V1.0 及巴青农资商城 V1.0 已完成合同及需求规格说明规定的全部功能开发，合格性测试用例执行率 100%、通过率 100%，需求覆盖率 100%，无遗留缺陷，系统功能完整、运行稳定、安全可靠，跨系统数据联调正常，满足《巴青牧业大脑及巴青农资商城信息化建设项目》竣工验收条件。'),
  p('测试组意见：同意通过合格性测试，建议项目主管部门组织竣工验收。'),

  h1('7  测试活动总结'),

  h2('7.1  人力消耗'),
  tbl(['角色', '人数', '投入（人天）', '主要职责'], [
    ['测试负责人', '1', '12', '计划编制、测试组织、报告审核'],
    ['测试工程师', '3', '36', '用例执行、缺陷跟踪、回归测试'],
    ['开发支持工程师', '2', '10', '环境维护、缺陷修复、版本发布'],
    ['需方业务代表', '2', '8', '业务确认、测试见证、验收参与'],
    ['合计', '8', '66', '—'],
  ]),

  h2('7.2  物质资源消耗'),
  tbl(['资源类别', '数量/规格', '用途'], [
    ['应用服务器', '2 台（117.180.211.14、117.180.211.17）', '被测系统部署运行'],
    ['数据库/缓存', 'MySQL 8.0 + Redis 6.x', '数据存储与缓存'],
    ['测试终端 PC', '3 台', 'Web 端测试'],
    ['测试移动终端', '3 部（Android）', 'H5/微信端测试'],
    ['网络环境', '政务专网/互联网', '测试访问'],
    ['缺陷管理工具', '1 套', '缺陷记录与跟踪'],
  ]),

  h1('8  注解'),
  p('8.1  术语与缩略语'),
  tbl(['缩略语', '含义'], [
    ['STR', 'Software Test Report，软件测试报告'],
    ['STD', 'Software Test Description，软件测试说明'],
    ['STP', 'Software Test Plan，软件测试计划'],
    ['CSCI', 'Computer Software Configuration Item，计算机软件配置项'],
    ['RBAC', 'Role-Based Access Control，基于角色的访问控制'],
    ['JWT', 'JSON Web Token，身份认证令牌'],
    ['Open API', '对外数据开放接口'],
    ['H5', 'HTML5 移动端 Web 应用'],
  ]),

  p('8.2  背景信息'),
  p('本项目是巴青县落实西藏自治区数字乡村及畜牧业高质量发展战略的重点信息化工程，巴青牧业大脑与巴青农资商城协同建设，形成“产业管理+便民服务+电商交易”一体化数字化体系。'),

  h1('附录 A  测试用例执行统计明细'),
  tbl(['CSCI', '模块数', '用例数', '执行数', '通过数', '通过率'], [
    ['BQ-BRAIN-CLIENT', '18', '86', '86', '86', '100%'],
    ['BQ-BRAIN-SCREEN', '5', '32', '32', '32', '100%'],
    ['BQ-BRAIN-H5', '8', '48', '48', '48', '100%'],
    ['BQ-BRAIN-JY', '6', '38', '38', '38', '100%'],
    ['BQ-SHOP-CLIENT', '10', '58', '58', '58', '100%'],
    ['BQ-SHOP-APP', '5', '50', '50', '50', '100%'],
    ['合计', '52', '312', '312', '312', '100%'],
  ]),

  h1('附录 B  测试环境及账号清单'),
  tbl(['子系统', '访问地址', '用户名', '密码', '角色'], ENV),

  p(''),
  p('—— 文档结束 ——'),
];

const doc = new Document({
  title: '巴青牧业大脑软件测试报告(STR)',
  creator: '项目第三方测试组',
  description: '巴青牧业大脑及巴青农资商城合格性测试报告',
  sections: [{ properties: {}, children }],
});

const out = path.join(__dirname, '巴青牧业大脑软件测试报告(STR).docx');
Packer.toBuffer(doc).then(buf => {
  fs.writeFileSync(out, buf);
  console.log('Generated:', out);
});
