[
  {
    "path": ".eslintrc.js",
    "content": "module.exports = {\n    env: {\n        es2021: true,\n        node: true,\n    },\n    extends: [\n        'standard'\n    ],\n    parser: '@typescript-eslint/parser',\n    parserOptions: {\n        ecmaVersion: 12,\n        sourceType: 'module',\n    },\n    plugins: [\n        '@typescript-eslint'\n    ],\n    rules: {\n        'padded-blocks': 'off',\n        'one-var': 'off',\n        'no-multiple-empty-lines': 'off',\n        'space-before-function-paren': ['error', {\n            'anonymous': 'always',\n            'named': 'never',\n            'asyncArrow': 'never',\n        }],\n        'indent': ['error', 4, {\n            'SwitchCase': 1,\n        }],\n        'semi': ['error', 'always'],\n        'quote-props': ['error', 'consistent'],\n        'comma-dangle': ['error', {\n            'arrays': 'never',\n            'objects': 'always-multiline',\n            'imports': 'never',\n            'exports': 'never',\n            'functions': 'never',\n        }],\n    },\n};\n"
  },
  {
    "path": ".gitignore",
    "content": "/output/*.bmp\n/dist/\n/node_modules/"
  },
  {
    "path": ".vscode/launch.json",
    "content": "{\n    // 使用 IntelliSense 了解相关属性。 \n    // 悬停以查看现有属性的描述。\n    // 欲了解更多信息，请访问: https://go.microsoft.com/fwlink/?linkid=830387\n    \"version\": \"0.2.0\",\n    \"configurations\": [\n        {\n            \"type\": \"node\",\n            \"request\": \"launch\",\n            \"name\": \"启动程序\",\n            \"skipFiles\": [\n                \"<node_internals>/**\"\n            ],\n            \"program\": \"${workspaceFolder}/src/demo/font.ts\",\n            \"outFiles\": [\n                \"${workspaceFolder}/**/*.js\"\n            ],\n        },\n    ]\n}"
  },
  {
    "path": "LICENSE",
    "content": "MIT License\n\nCopyright (c) 2017 \n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n"
  },
  {
    "path": "README.md",
    "content": "<a href=\"https://996.icu\"><img src=\"https://img.shields.io/badge/link-996.icu-red.svg\" alt=\"996.icu\" /></a>\n\n\n# node-gd-bmp\nlight and high speed and 100% js implement graphical library, it can running in any platform,\nBUT only support bmp 24bit format, internal contains 3 fonts\n# demo\n\n请看 src/demo，里面有关于如何做验证码、如何做图像处理的案例\n\n# API\n**获得对象的两种方式：**\n* 构造函数，创建指定宽高的图片对象(初始化为一张全黑的图片)\n```javascript\nimport { BMP24 } from 'gd-bmp';\nconst BMP24 = require('gd-bmp').BMP24;\nconst img = new BMP24(w, h);\n```\n* 从文件加载bmp (注意！必需确保文件是24位bmp)\n```javascript\nconst img = await BMP24.loadFromFile(file);\n```\n\n**获取BMP文件数据**\n```js\nobj.getFileData()\n```\n\n**Data Url**\n```js\nconst img = makeImg();\nconst dataUrl = img.getDataUrl();\nres.setHeader('Content-Type', 'text/html');\nres.end(`<img src=\"${dataUrl}\"/>`);\n```\n\n**API**\n```js\n// 画点, RGB颜色值（例如红色0xff0000）\nobj.drawPoint(x, y, rgb)\n\n// 画点, rgb:{ blue:number, green:number, red:number }， 注意颜色值要保证在0-255之间（包含0和255）\nobj.drawPointRGB(x, y, rgb)\n\n// 获取像素点颜色, 返回 rgb: { blue:number, green:number, red:number } ，如果xy坐标超出图片范围将抛出错误\nobj.getPointRGB(x, y)\n\n// 画线\nobj.drawLine(x1, y1, x2, y2, rgb)\n\n// 画矩形\nobj.drawRect(x, y, w, h, rgb)\n\n// 实心矩形\nobj.fillRect(x, y, w, h, rgb)\n\n// 画圆\nobj.drawCircle(x, y, r, rgb)\n\n//画字符&字符串，font参数为字库，color为RGB颜色值（例如红色0xff0000）\nobj.drawChar(ch, x, y, font, color)\nobj.drawString(str, x, y, font, color)\n```\n\n# 关于字体和颜色\n已经内置了三种规格的字体（仅包含大小写英文字母和数字），可以通过：BMP24.font8x16、BMP24.font12x24和BMP24.font16x32得到\n\n另外你也可以参考demo自己生成和定义字体\n\ndemo内包含一个支持中文的字库文件，支持65535个字符，需要占用2M内存\n\n颜色采用数值的方式，按RGB排列，例如：红色0xff0000，绿色0x00ff00，蓝色0x0000ff\n\n# 只支持24位bmp\n\n推荐用windows自带的画图工具转码bmp\n\n# License\nMIT\n"
  },
  {
    "path": "output/.gitkeep",
    "content": ""
  },
  {
    "path": "package.json",
    "content": "{\n    \"name\": \"gd-bmp\",\n    \"version\": \"2.0.1\",\n    \"description\": \"light and high speed and 100% js implement graphical library, it can running in any platform\",\n    \"main\": \"dist/BMP24.js\",\n    \"typings\": \"dist/BMP24.d.ts\",\n    \"files\": [\n        \"dist/*\"\n    ],\n    \"scripts\": {\n        \"compile\": \"rm -rf dist && tsc\",\n        \"lint\": \"eslint --fix ./src/**/*.ts\",\n        \"test\": \"npm run compile && node ./dist/demo/filter\",\n        \"test2\": \"npm run compile && node ./dist/demo/test\",\n        \"prepublish\": \"npm run lint && npm run compile\"\n    },\n    \"keywords\": [\n        \"gd\",\n        \"bmp\"\n    ],\n    \"author\": \"zengming\",\n    \"license\": \"MIT\",\n    \"repository\": {\n        \"type\": \"git\",\n        \"url\": \"git+https://github.com/zengming00/node-gd-bmp.git\"\n    },\n    \"bugs\": {\n        \"url\": \"https://github.com/zengming00/node-gd-bmp/issues\"\n    },\n    \"homepage\": \"https://github.com/zengming00/node-gd-bmp#readme\",\n    \"dependencies\": {\n        \"@types/node\": \"^14.14.3\"\n    },\n    \"devDependencies\": {\n        \"@typescript-eslint/eslint-plugin\": \"^4.5.0\",\n        \"@typescript-eslint/parser\": \"^4.5.0\",\n        \"eslint\": \"^7.12.0\",\n        \"eslint-config-standard\": \"^15.0.0\",\n        \"eslint-plugin-import\": \"^2.22.1\",\n        \"eslint-plugin-node\": \"^11.1.0\",\n        \"eslint-plugin-promise\": \"^4.2.1\",\n        \"eslint-plugin-standard\": \"^4.0.2\",\n        \"typescript\": \"^4.0.3\"\n    }\n}\n"
  },
  {
    "path": "src/BMP24.ts",
    "content": "// 初始版本确定于：20161103 18:31\nimport * as fs from 'fs';\nimport { IFont, font12x24, font16x32, font8x16 } from './font';\nexport { IFont };\n\nconsole.log(\"The '996' working schedule is inhumane.\");\nconsole.log('为了您的身体健康，为了国内的软件行业健康发展，请拒绝接受违法的996工作制');\n\nexport interface IRGB {\n    red: number;\n    green: number;\n    blue: number;\n}\n\nfunction makeHeader(buf: Buffer, fileLen: number, dataLen: number, w: number, h: number) {\n    const header = buf;\n    header.write('BM');\n    header.writeInt32LE(fileLen, 2); //  BMP文件大小\n    header.writeInt8(122, 6); //  特殊标识\n    header.writeInt32LE(54, 10);\n    header.writeInt32LE(40, 14);\n    header.writeInt32LE(w, 18); // w\n    header.writeInt32LE(h, 22); // h\n    header.writeInt16LE(1, 26);\n    header.writeInt16LE(24, 28);\n    header.writeInt32LE(dataLen, 34); // 数据大小\n}\n\nexport class BMP24 {\n    public static font8x16 = font8x16;\n    public static font12x24 = font12x24;\n    public static font16x32 = font16x32;\n\n    public w: number;\n    public h: number;\n    public fileLen: number;\n    protected _lineByteNum: number;\n    protected _data: Buffer;\n\n    constructor(w: number, h: number) {\n        /*\n           BMP数据的每一行必需能被4整除\n           例如宽度=10则一行的实际字节数=32=Math.ceil(10*3/4)*4，补了2字节的0\n           例如宽度=11则一行的实际字节数=36=Math.ceil(11*3/4)*4，补了3字节的0\n           算法： Math.ceil(宽度*每个像素占用的字节/4)*4\n        */\n        const lineByteNum = Math.ceil(w * 3 / 4) * 4; // 每行数据的实际字节数\n        const dataLen = lineByteNum * h;\n\n        this.w = w;\n        this.h = h;\n        this.fileLen = dataLen + 54;\n        this._lineByteNum = lineByteNum;\n        this._data = Buffer.alloc(this.fileLen);\n        // BMP文件头初始化\n        makeHeader(this._data, this.fileLen, dataLen, w, h);\n    }\n\n    // 获取BMP整个文件数据\n    public getFileData() {\n        return this._data;\n    }\n\n    public getDataUrl() {\n        return `data:image/bmp;base64,${this._data.toString('base64')}`;\n    }\n\n    // 获取BMP图像数据\n    public getData() {\n        return this._data.slice(54);\n    }\n\n    // 画点\n    public drawPoint(x: number, y: number, rgb: number) {\n        this.drawPointRGB(x, y, {\n            red: (rgb >> 16) & 0xFF,\n            green: (rgb >> 8) & 0xFF,\n            blue: rgb & 0xFF,\n        });\n    }\n\n    // 画点\n    public drawPointRGB(x: number, y: number, rgb: IRGB) {\n        if (x >= this.w || y >= this.h || x < 0 || y < 0) {\n            return;\n        }\n        // 数据第一行为图像的最底一行，颜色数据在十六进制编辑器中的排列是蓝绿红\n        const line = this.h - y - 1; // 因为data的第一行是图片的最后一行，所以要反过来\n        const pos = 54 + (x * 3) + (this._lineByteNum * line);\n\n        this._data.writeUInt8(rgb.blue, pos); // 蓝\n        this._data.writeUInt8(rgb.green, pos + 1); // 绿\n        this._data.writeUInt8(rgb.red, pos + 2); // 红\n    }\n\n    /**\n     * 获取像素点颜色, 返回 { blue:number, green:number, red:number }\n     */\n    public getPointRGB(x: number, y: number): IRGB {\n        if (x >= this.w || y >= this.h || x < 0 || y < 0) {\n            throw new Error('out of range');\n        }\n        // 数据第一行为图像的最底一行，颜色数据在十六进制编辑器中的排列是蓝绿红\n        const line = this.h - y - 1; // 因为data的第一行是图片的最后一行，所以要反过来\n        const pos = 54 + (x * 3) + (this._lineByteNum * line);\n        return {\n            blue: this._data.readUInt8(pos),\n            green: this._data.readUInt8(pos + 1),\n            red: this._data.readUInt8(pos + 2),\n        };\n    }\n\n    // 画水平线\n    public drawLineH(x1: number, x2: number, y: number, rgb: number) {\n        if (x1 > x2) {\n            const tmp = x2;\n            x2 = x1;\n            x1 = tmp;\n        }\n        for (; x1 <= x2; x1++) {\n            this.drawPoint(x1, y, rgb);\n        }\n    }\n\n    // 画垂直线\n    public drawLineV(y1: number, y2: number, x: number, rgb: number) {\n        if (y1 > y2) {\n            const tmp = y2;\n            y2 = y1;\n            y1 = tmp;\n        }\n        for (; y1 <= y2; y1++) {\n            this.drawPoint(x, y1, rgb);\n        }\n    }\n\n    public drawLine(x1: number, y1: number, x2: number, y2: number, rgb: number) {\n        let x = x1;\n        let y = y1;\n        let dx = x2 > x1 ? (x2 - x1) : (x1 - x2);\n        let dy = y2 > y1 ? (y2 - y1) : (y1 - y2);\n        let interchange = false;\n\n        const s1 = x2 > x1 ? 1 : -1;\n        const s2 = y2 > y1 ? 1 : -1;\n\n        if (dy > dx) {\n            const temp = dx;\n            dx = dy;\n            dy = temp;\n            interchange = true;\n        }\n\n        let p = (dy << 1) - dx;\n        for (let i = 0; i <= dx; i++) {\n            this.drawPoint(x, y, rgb);\n            if (p >= 0) {\n                if (interchange) {\n                    x += s1;\n                } else {\n                    y += s2;\n                }\n                p -= (dx << 1);\n            }\n            if (interchange) {\n                y += s2;\n            } else {\n                x += s1;\n            }\n            p += (dy << 1);\n        }\n    }\n\n    // 画空心矩形\n    public drawRect(x: number, y: number, w: number, h: number, rgb: number) {\n        const x2 = x + w - 1;\n        const y2 = y + h - 1;\n        this.drawLineH(x, x2, y, rgb);\n        this.drawLineH(x, x2, y2, rgb);\n        this.drawLineV(y, y2, x, rgb);\n        this.drawLineV(y, y2, x2, rgb);\n    }\n\n    // 画实心矩形\n    public fillRect(x: number, y: number, w: number, h: number, rgb: number) {\n        let x2 = x + w - 1;\n        let y2 = y + h - 1;\n        if (x > x2) {\n            const tmp = x2;\n            x2 = x;\n            x = tmp;\n        }\n        if (y > y2) {\n            const tmp = y2;\n            y2 = y;\n            y = tmp;\n        }\n        for (; y <= y2; y++) {\n            for (let xx = x; xx <= x2; xx++) {\n                this.drawPoint(xx, y, rgb);\n            }\n        }\n    }\n\n    // 画圆，xy为中心点位置\n    public drawCircle(x: number, y: number, r: number, rgb: number) {\n        let a = 0;\n        let b = r;\n        //   c = 1.25 - r;\n        let c = 3 - 2 * r;\n        while (a < b) {\n            this.drawPoint(x + a, y + b, rgb);\n            this.drawPoint(x - a, y + b, rgb);\n            this.drawPoint(x + a, y - b, rgb);\n            this.drawPoint(x - a, y - b, rgb);\n            this.drawPoint(x + b, y + a, rgb);\n            this.drawPoint(x - b, y + a, rgb);\n            this.drawPoint(x + b, y - a, rgb);\n            this.drawPoint(x - b, y - a, rgb);\n            if (c < 0) {\n                c = c + 4 * a + 6;\n            } else {\n                c = c + 4 * (a - b) + 10;\n                b -= 1;\n            }\n            a += 1;\n        }\n        if (a === b) {\n            this.drawPoint(x + a, y + b, rgb);\n            this.drawPoint(x - a, y + b, rgb);\n            this.drawPoint(x + a, y - b, rgb);\n            this.drawPoint(x - a, y + b, rgb);\n            this.drawPoint(x + b, y + a, rgb);\n            this.drawPoint(x - b, y + a, rgb);\n            this.drawPoint(x + b, y - a, rgb);\n            this.drawPoint(x - b, y - a, rgb);\n        }\n    }\n\n    public drawChar(ch: string, x: number, y: number, font: IFont, color: number) {\n        const index = font.fonts.indexOf(ch);\n        if (index < 0) {\n            return;\n        }\n        const fontData = font.data[index];\n        let y0 = y;\n        let x0 = x;\n        for (const data of fontData) {\n            x0 = x;\n            for (let b = data; b > 0; b <<= 1) {\n                if (b & 0x80) {\n                    this.drawPoint(x0, y0, color);\n                }\n                x0++;\n            }\n            y0++;\n            if ((y0 - y) >= font.h) {\n                y0 = y;\n                x += 8;\n            }\n        }\n    }\n\n    public drawString(str: string, x: number, y: number, font: IFont, color: number) {\n        for (const c of str) {\n            this.drawChar(c, x, y, font, color);\n            x += font.w;\n        }\n    }\n\n    // 从文件加载bmp, 注意！必需确保文件是24位bmp\n    public static async loadFromFile(filename: string) {\n        return new Promise<BMP24>(function (resolve, reject) {\n            fs.readFile(filename, (err, data) => {\n                if (err) {\n                    return reject(err);\n                }\n                //  简单的判断是否是支持的格式\n                if (data.readInt32LE(10) !== 54) {\n                    return reject(new Error('unsupported format: headlen !== 54'));\n                } if (data.readInt32LE(14) !== 40) {\n                    return reject(new Error('unsupported format: bitmapInfoHead.length !== 40'));\n                } if (data.readInt32LE(28) !== 24) {\n                    return reject(new Error('unsupported format: only support 24bit bmp'));\n                }\n                const img = new BMP24(0, 0);\n                img.w = data.readInt32LE(18);\n                img.h = data.readInt32LE(22);\n                img.fileLen = data.length;\n                img._lineByteNum = Math.ceil(img.w * 3 / 4) * 4;\n                img._data = data;\n                resolve(img);\n            });\n        });\n    }\n}\n\n// /////////////////////////// Copyright zengming 2010-2020 /////////////////////////////////////\n"
  },
  {
    "path": "src/demo/filter.ts",
    "content": "import * as fs from 'fs';\nimport * as path from 'path';\nimport { BMP24 } from '../BMP24'; // gd-bmp\n\n/**\n * 高斯模糊\n * @param  {Array} pixes  pix array\n * @param  {Number} width 图片的宽度\n * @param  {Number} height 图片的高度\n * @param  {Number} radius 取样区域半径, 正数, 可选, 默认为 3.0\n * @param  {Number} sigma 标准方差, 可选, 默认取值为 radius / 3\n * @return {Array}\n */\nfunction gaussBlur(img: BMP24, radius: number, sigma?: number) {\n    const width = img.w;\n    const height = img.h;\n    const gaussMatrix = [];\n    let gaussSum = 0;\n    let x, y;\n    let r, g, b, a;\n    let i, j, k, len;\n\n    const mradius = Math.floor(radius || 3);\n    const msigma = sigma || radius / 3;\n\n    a = 1 / (Math.sqrt(2 * Math.PI) * msigma);\n    b = -1 / (2 * msigma * msigma);\n    // 生成高斯矩阵\n    for (i = 0, x = -mradius; x <= mradius; x++, i++) {\n        g = a * Math.exp(b * x * x);\n        gaussMatrix[i] = g;\n        gaussSum += g;\n    }\n    // 归一化, 保证高斯矩阵的值在[0,1]之间\n    for (i = 0, len = gaussMatrix.length; i < len; i++) {\n        gaussMatrix[i] /= gaussSum;\n    }\n    // x 方向一维高斯运算\n    for (y = 0; y < height; y++) {\n        for (x = 0; x < width; x++) {\n            r = g = b = a = 0;\n            gaussSum = 0;\n            for (j = -mradius; j <= mradius; j++) {\n                k = x + j;\n                if (k >= 0 && k < width) { // 确保 k 没超出 x 的范围\n                    // r,g,b,a 四个一组\n                    // i = (y * width + k) * 4;\n                    const c = img.getPointRGB(k, y);\n                    r += c.red * gaussMatrix[j + mradius];\n                    g += c.green * gaussMatrix[j + mradius];\n                    b += c.blue * gaussMatrix[j + mradius];\n                    // a += pixes[i + 3] * gaussMatrix[j];\n                    gaussSum += gaussMatrix[j + mradius];\n                }\n            }\n            // i = (y * width + x) * 4;\n            // 除以 gaussSum 是为了消除处于边缘的像素, 高斯运算不足的问题\n            // console.log(gaussSum)\n            img.drawPointRGB(x, y, {\n                red: r / gaussSum,\n                green: g / gaussSum,\n                blue: b / gaussSum,\n            });\n            // pixes[i + 3] = a ;\n        }\n    }\n    //  y 方向一维高斯运算\n    for (x = 0; x < width; x++) {\n        for (y = 0; y < height; y++) {\n            r = g = b = a = 0;\n            gaussSum = 0;\n            for (j = -mradius; j <= mradius; j++) {\n                k = y + j;\n                if (k >= 0 && k < height) { // 确保 k 没超出 y 的范围\n                    // i = (k * width + x) * 4;\n                    const c = img.getPointRGB(x, k);\n                    r += c.red * gaussMatrix[j + mradius];\n                    g += c.green * gaussMatrix[j + mradius];\n                    b += c.blue * gaussMatrix[j + mradius];\n                    // a += pixes[i + 3] * gaussMatrix[j];\n                    gaussSum += gaussMatrix[j + mradius];\n                }\n            }\n            // i = (y * width + x) * 4;\n            img.drawPointRGB(x, y, {\n                red: r / gaussSum,\n                green: g / gaussSum,\n                blue: b / gaussSum,\n            });\n            // pixes[i] = r ;\n            // pixes[i + 1] = g ;\n            // pixes[i + 2] = b ;\n            // pixes[i + 3] = a ;\n        }\n    }\n}\n\n// 锐化\nfunction sharp(img: BMP24, arg: number) {\n    const lamta = arg || 0.6;\n    const width = img.w;\n    const height = img.h;\n\n    // 根据像素点的左上角、上边和左边像素进行运算\n    // col    0    1   2 3 4\n    // row\n    // 0:    a:0  b:1  2 3 4\n    // 1:    e:5  c:6  7 8 9\n\n    function calculateColor(a: number, b: number, e: number, c: number) {\n        const delta = c - (b + e + a) / 3;\n        let r = c + delta * lamta;\n        // 颜色值边界检查\n        r = r > 255 ? 255 : r < 0 ? 0 : r;\n        return r;\n    }\n\n    for (let y = 1; y < height; y++) {\n        for (let x = 1; x < width; x++) {\n            const a = img.getPointRGB(x - 1, y - 1);\n            const b = img.getPointRGB(x, y - 1);\n            const e = img.getPointRGB(x - 1, y);\n            const c = img.getPointRGB(x, y);\n            const color = {\n                red: calculateColor(a.red, b.red, e.red, c.red),\n                green: calculateColor(a.green, b.green, e.green, c.green),\n                blue: calculateColor(a.blue, b.blue, e.blue, c.blue),\n            };\n            img.drawPointRGB(x, y, color);\n        }\n    }\n}\n\nconst srcFile = path.resolve(__dirname, '../../res/lena.bmp');\nconst sharpFile = path.resolve(__dirname, '../../output/sharp.bmp');\nconst gaussBlurFile = path.resolve(__dirname, '../../output/gaussBlur.bmp');\n\nasync function test() {\n    const img = await BMP24.loadFromFile(srcFile);\n    console.log('w=%d, h=%d', img.w, img.h);\n    console.time('time');\n\n    sharp(img, 1);\n    fs.writeFileSync(sharpFile, img.getFileData());\n\n    gaussBlur(img, 30);\n    fs.writeFileSync(gaussBlurFile, img.getFileData());\n\n    console.log('done.');\n    console.timeEnd('time');\n}\n\ntest().catch(function (err) {\n    console.log(err);\n});\n\n\n\n\n\n\n\n"
  },
  {
    "path": "src/demo/gb16Font.ts",
    "content": "import * as fs from 'fs';\nimport * as http from 'http';\nimport * as querystring from 'querystring';\nimport * as path from 'path';\nimport { BMP24 } from '../BMP24';\n\nconst CHAR_H = 16;\nconst EN_CHAR_W = 8;\nconst CN_CHAR_W = 16;\n\n// 字库，支持中文，总共65536个字符\nconst fontPath = path.join(__dirname, '../../res/gb16.uc2');\nconst fontBuffer = fs.readFileSync(fontPath);\n\nfunction getCharWidthHeight(char: number | string) {\n    const o = { width: CN_CHAR_W, height: CHAR_H };\n    if (typeof char === 'string') {\n        char = char.charCodeAt(0);\n    }\n    if (char < 128) {\n        o.width = EN_CHAR_W;\n    }\n    return o;\n}\n\nfunction drawChar(img: BMP24, char: number | string, x: number, y: number, color: number) {\n    if (typeof char === 'string') {\n        char = char.charCodeAt(0);\n    }\n    const offset = char * 32; // 一行两字节，高度16，所以2*16=32字节\n    const charData = fontBuffer.slice(offset, offset + 32);\n    for (let iy = 0; iy < CHAR_H; iy++) {\n        let data = charData.readUInt16BE(iy * 2);\n        for (let ix = 0; data > 0; ix++) {\n            if (data & (1 << 16)) {\n                img.drawPoint(ix + x, iy + y, color);\n            }\n            data <<= 1;\n        }\n    }\n}\n\nfunction drawString(img: BMP24, str: string, x: number, y: number, color: number) {\n    for (const c of str) {\n        drawChar(img, c, x, y, color);\n        x += getCharWidthHeight(c).width;\n    }\n}\n\nhttp.createServer((req, res) => {\n    switch (req.url) {\n        case '/favicon.ico':\n            res.end();\n            break;\n        default: {\n            if (req.url) {\n                let str = req.url;\n                str = str.substring(str.indexOf('?') + 1);\n                const o = querystring.parse(str);\n                if (typeof o.str === 'string') {\n                    const img = new BMP24(100, 40);\n                    drawString(img, o.str, 0, 0, 0xff0000);\n                    res.setHeader('Content-Type', 'image/bmp');\n                    res.end(img.getFileData());\n\n                } else if ((typeof o.start === 'string') && (typeof o.len === 'string')) {\n                    console.time('printCharCode');\n                    const img = new BMP24(800, 800);\n                    img.fillRect(0, 0, img.w, img.h, 0xffffff);\n                    const start = parseInt(o.start, 10);\n                    const stop = start + parseInt(o.len, 10);\n                    let x = 0, y = 0;\n                    for (let i = start; i < stop; i++) {\n                        if (x >= (img.w - getCharWidthHeight(i).width)) {\n                            y += CHAR_H;\n                            x = 0;\n                        }\n                        drawChar(img, i, x, y, 0xff0000);\n                        x += getCharWidthHeight(i).width;\n                    }\n                    console.timeEnd('printCharCode');\n                    res.setHeader('Content-Type', 'image/bmp');\n                    res.end(img.getFileData());\n                }\n            }\n            res.end();\n        }\n    }\n}).listen(3000);\nconsole.log('localhost:3000');\nconsole.log('http://localhost:3000/?str=中国');\nconsole.log('http://localhost:3000/?start=0&len=2000');\n\n\n\n\n"
  },
  {
    "path": "src/demo/test.ts",
    "content": "import * as http from 'http';\nimport { BMP24 } from '../BMP24'; // gd-bmp\nimport * as font from '../font';\n\n/*\n 用PCtoLCD2002取字模\n 行列式扫描，正向取模（高位在前）\n */\nconst cnfonts: font.IFont = { // 自定义字模\n    w: 16,\n    h: 16,\n    fonts: '中国',\n    data: [\n        [0x01, 0x01, 0x01, 0x01, 0x3F, 0x21, 0x21, 0x21, 0x21, 0x21, 0x3F, 0x21, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x08, 0x08, 0x08, 0x08, 0x08, 0xF8, 0x08, 0x00, 0x00, 0x00, 0x00], /* \"中\",0 */\n        [0x00, 0x7F, 0x40, 0x40, 0x5F, 0x41, 0x41, 0x4F, 0x41, 0x41, 0x41, 0x5F, 0x40, 0x40, 0x7F, 0x40, 0x00, 0xFC, 0x04, 0x04, 0xF4, 0x04, 0x04, 0xE4, 0x04, 0x44, 0x24, 0xF4, 0x04, 0x04, 0xFC, 0x04] /* \"国\",1 */\n    ],\n};\n\n// 测试字库\nfunction makeImg2() {\n    const img = new BMP24(300, 140);\n    img.drawString('helloworld', 20, 10, BMP24.font8x16, 0xff0000);\n    img.drawString('helloworld', 20, 25, BMP24.font12x24, 0x00ff00);\n    img.drawString('helloworld', 20, 50, BMP24.font16x32, 0x0000ff);\n    img.drawString('中国', 20, 85, cnfonts, 0xffffff);\n    return img;\n}\n\nfunction rand(min: number, max: number) {\n    return ~~(Math.random() * (max - min) + min);\n}\n\n// 制造验证码图片\nfunction makeCapcha() {\n    const img = new BMP24(100, 40);\n    img.drawRect(0, 0, img.w, img.h, rand(0, 0xffffff));\n    img.fillRect(1, 1, img.w - 2, img.h - 2, 0xffffff);\n\n    img.drawCircle(rand(0, 100), rand(0, 40), rand(10, 40), rand(0, 0xffffff));\n    img.fillRect(rand(0, 100), rand(0, 40), rand(10, 35), rand(10, 35), rand(0, 0xffffff));\n    img.drawLine(rand(0, 100), rand(0, 40), rand(0, 100), rand(0, 40), rand(0, 0xffffff));\n\n    // 画曲线\n    const w = img.w / 2;\n    const h = img.h;\n    const color = rand(0, 0xffffff);\n    const y1 = rand(-5, 5);\n    const w2 = rand(10, 15);\n    const h3 = rand(4, 6);\n    const bl = rand(1, 5);\n    for (let i = -w; i < w; i += 0.1) {\n        const yy = Math.floor(h / h3 * Math.sin(i / w2) + h / 2 + y1);\n        const xx = Math.floor(i + w);\n        for (let j = 0; j < bl; j++) {\n            img.drawPoint(xx, yy + j, color);\n        }\n    }\n\n    const p = 'ABCDEFGHKMNPQRSTUVWXYZ3456789';\n    let str = '';\n    for (let a = 0; a < 5; a++) {\n        str += p.charAt(Math.random() * p.length | 0);\n    }\n\n    const fonts = [BMP24.font8x16, BMP24.font12x24, BMP24.font16x32];\n    // eslint-disable-next-line one-var\n    let x = 15, y = 8;\n    for (const ch of str) {\n        const f = fonts[Math.random() * fonts.length | 0];\n        y = 8 + rand(-10, 10);\n        img.drawChar(ch, x, y, f, rand(0, 0xffffff));\n        x += f.w + rand(2, 8);\n    }\n    return img;\n}\n\n// 测试生成验证码的效率\nconst start = Date.now();\nlet n = 0;\nwhile ((Date.now() - start) < 1000) {\n    makeCapcha();\n    // makeImg2();\n    n++;\n}\nconsole.log(`1秒钟生成：${n}`);\n\nhttp.createServer((req, res) => {\n    switch (req.url) {\n        case '/favicon.ico':\n            res.end();\n            break;\n        case '/img2': {\n            console.time('makeImg2');\n            const img = makeImg2();\n            console.timeEnd('makeImg2');\n            res.setHeader('Content-Type', 'image/bmp');\n            res.end(img.getFileData());\n            break;\n        }\n        case '/data': {\n            const img = makeImg2();\n            const dataUrl = img.getDataUrl();\n            res.setHeader('Content-Type', 'text/html');\n            res.end(`<img src=\"${dataUrl}\"/>`);\n            break;\n        }\n        case '/':\n        default: {\n            console.time('makeCapcha');\n            const img = makeCapcha();\n            console.timeEnd('makeCapcha');\n            res.setHeader('Content-Type', 'image/bmp');\n            res.end(img.getFileData());\n        }\n    }\n}).listen(3000);\n\nconsole.log('localhost:3000');\n"
  },
  {
    "path": "src/font.ts",
    "content": "/*\n用PCtoLCD2002取字模\n行列式扫描，正向取模（高位在前）\n*/\nconst fonts = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';\nconst font8x16Data = [\n    [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3C, 0x42, 0x1E, 0x22, 0x42, 0x42, 0x3F, 0x00, 0x00], /* \"a\",0 */\n    [0x00, 0x00, 0x00, 0xC0, 0x40, 0x40, 0x40, 0x58, 0x64, 0x42, 0x42, 0x42, 0x64, 0x58, 0x00, 0x00], /* \"b\",1 */\n    [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x22, 0x40, 0x40, 0x40, 0x22, 0x1C, 0x00, 0x00], /* \"c\",2 */\n    [0x00, 0x00, 0x00, 0x06, 0x02, 0x02, 0x02, 0x1E, 0x22, 0x42, 0x42, 0x42, 0x26, 0x1B, 0x00, 0x00], /* \"d\",3 */\n    [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3C, 0x42, 0x7E, 0x40, 0x40, 0x42, 0x3C, 0x00, 0x00], /* \"e\",4 */\n    [0x00, 0x00, 0x00, 0x0F, 0x11, 0x10, 0x10, 0x7E, 0x10, 0x10, 0x10, 0x10, 0x10, 0x7C, 0x00, 0x00], /* \"f\",5 */\n    [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3E, 0x44, 0x44, 0x38, 0x40, 0x3C, 0x42, 0x42, 0x3C], /* \"g\",6 */\n    [0x00, 0x00, 0x00, 0xC0, 0x40, 0x40, 0x40, 0x5C, 0x62, 0x42, 0x42, 0x42, 0x42, 0xE7, 0x00, 0x00], /* \"h\",7 */\n    [0x00, 0x00, 0x00, 0x30, 0x30, 0x00, 0x00, 0x70, 0x10, 0x10, 0x10, 0x10, 0x10, 0x7C, 0x00, 0x00], /* \"i\",8 */\n    [0x00, 0x00, 0x00, 0x0C, 0x0C, 0x00, 0x00, 0x1C, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x44, 0x78], /* \"j\",9 */\n    [0x00, 0x00, 0x00, 0xC0, 0x40, 0x40, 0x40, 0x4E, 0x48, 0x50, 0x68, 0x48, 0x44, 0xEE, 0x00, 0x00], /* \"k\",10 */\n    [0x00, 0x00, 0x00, 0x70, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x7C, 0x00, 0x00], /* \"l\",11 */\n    [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x49, 0x49, 0x49, 0x49, 0x49, 0xED, 0x00, 0x00], /* \"m\",12 */\n    [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xDC, 0x62, 0x42, 0x42, 0x42, 0x42, 0xE7, 0x00, 0x00], /* \"n\",13 */\n    [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3C, 0x42, 0x42, 0x42, 0x42, 0x42, 0x3C, 0x00, 0x00], /* \"o\",14 */\n    [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD8, 0x64, 0x42, 0x42, 0x42, 0x44, 0x78, 0x40, 0xE0], /* \"p\",15 */\n    [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1E, 0x22, 0x42, 0x42, 0x42, 0x22, 0x1E, 0x02, 0x07], /* \"q\",16 */\n    [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xEE, 0x32, 0x20, 0x20, 0x20, 0x20, 0xF8, 0x00, 0x00], /* \"r\",17 */\n    [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3E, 0x42, 0x40, 0x3C, 0x02, 0x42, 0x7C, 0x00, 0x00], /* \"s\",18 */\n    [0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x7C, 0x10, 0x10, 0x10, 0x10, 0x10, 0x0C, 0x00, 0x00], /* \"t\",19 */\n    [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC6, 0x42, 0x42, 0x42, 0x42, 0x46, 0x3B, 0x00, 0x00], /* \"u\",20 */\n    [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE7, 0x42, 0x24, 0x24, 0x28, 0x10, 0x10, 0x00, 0x00], /* \"v\",21 */\n    [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD7, 0x92, 0x92, 0xAA, 0xAA, 0x44, 0x44, 0x00, 0x00], /* \"w\",22 */\n    [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6E, 0x24, 0x18, 0x18, 0x18, 0x24, 0x76, 0x00, 0x00], /* \"x\",23 */\n    [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE7, 0x42, 0x24, 0x24, 0x28, 0x18, 0x10, 0x10, 0xE0], /* \"y\",24 */\n    [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7E, 0x44, 0x08, 0x10, 0x10, 0x22, 0x7E, 0x00, 0x00], /* \"z\",25 */\n    [0x00, 0x00, 0x00, 0x10, 0x10, 0x18, 0x28, 0x28, 0x24, 0x3C, 0x44, 0x42, 0x42, 0xE7, 0x00, 0x00], /* \"A\",26 */\n    [0x00, 0x00, 0x00, 0xF8, 0x44, 0x44, 0x44, 0x78, 0x44, 0x42, 0x42, 0x42, 0x44, 0xF8, 0x00, 0x00], /* \"B\",27 */\n    [0x00, 0x00, 0x00, 0x3E, 0x42, 0x42, 0x80, 0x80, 0x80, 0x80, 0x80, 0x42, 0x44, 0x38, 0x00, 0x00], /* \"C\",28 */\n    [0x00, 0x00, 0x00, 0xF8, 0x44, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x44, 0xF8, 0x00, 0x00], /* \"D\",29 */\n    [0x00, 0x00, 0x00, 0xFC, 0x42, 0x48, 0x48, 0x78, 0x48, 0x48, 0x40, 0x42, 0x42, 0xFC, 0x00, 0x00], /* \"E\",30 */\n    [0x00, 0x00, 0x00, 0xFC, 0x42, 0x48, 0x48, 0x78, 0x48, 0x48, 0x40, 0x40, 0x40, 0xE0, 0x00, 0x00], /* \"F\",31 */\n    [0x00, 0x00, 0x00, 0x3C, 0x44, 0x44, 0x80, 0x80, 0x80, 0x8E, 0x84, 0x44, 0x44, 0x38, 0x00, 0x00], /* \"G\",32 */\n    [0x00, 0x00, 0x00, 0xE7, 0x42, 0x42, 0x42, 0x42, 0x7E, 0x42, 0x42, 0x42, 0x42, 0xE7, 0x00, 0x00], /* \"H\",33 */\n    [0x00, 0x00, 0x00, 0x7C, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x7C, 0x00, 0x00], /* \"I\",34 */\n    [0x00, 0x00, 0x00, 0x3E, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x88, 0xF0], /* \"J\",35 */\n    [0x00, 0x00, 0x00, 0xEE, 0x44, 0x48, 0x50, 0x70, 0x50, 0x48, 0x48, 0x44, 0x44, 0xEE, 0x00, 0x00], /* \"K\",36 */\n    [0x00, 0x00, 0x00, 0xE0, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x42, 0xFE, 0x00, 0x00], /* \"L\",37 */\n    [0x00, 0x00, 0x00, 0xEE, 0x6C, 0x6C, 0x6C, 0x6C, 0x54, 0x54, 0x54, 0x54, 0x54, 0xD6, 0x00, 0x00], /* \"M\",38 */\n    [0x00, 0x00, 0x00, 0xC7, 0x62, 0x62, 0x52, 0x52, 0x4A, 0x4A, 0x4A, 0x46, 0x46, 0xE2, 0x00, 0x00], /* \"N\",39 */\n    [0x00, 0x00, 0x00, 0x38, 0x44, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x44, 0x38, 0x00, 0x00], /* \"O\",40 */\n    [0x00, 0x00, 0x00, 0xFC, 0x42, 0x42, 0x42, 0x42, 0x7C, 0x40, 0x40, 0x40, 0x40, 0xE0, 0x00, 0x00], /* \"P\",41 */\n    [0x00, 0x00, 0x00, 0x38, 0x44, 0x82, 0x82, 0x82, 0x82, 0x82, 0xB2, 0xCA, 0x4C, 0x38, 0x06, 0x00], /* \"Q\",42 */\n    [0x00, 0x00, 0x00, 0xFC, 0x42, 0x42, 0x42, 0x7C, 0x48, 0x48, 0x44, 0x44, 0x42, 0xE3, 0x00, 0x00], /* \"R\",43 */\n    [0x00, 0x00, 0x00, 0x3E, 0x42, 0x42, 0x40, 0x20, 0x18, 0x04, 0x02, 0x42, 0x42, 0x7C, 0x00, 0x00], /* \"S\",44 */\n    [0x00, 0x00, 0x00, 0xFE, 0x92, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x38, 0x00, 0x00], /* \"T\",45 */\n    [0x00, 0x00, 0x00, 0xE7, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x3C, 0x00, 0x00], /* \"U\",46 */\n    [0x00, 0x00, 0x00, 0xE7, 0x42, 0x42, 0x44, 0x24, 0x24, 0x28, 0x28, 0x18, 0x10, 0x10, 0x00, 0x00], /* \"V\",47 */\n    [0x00, 0x00, 0x00, 0xD6, 0x92, 0x92, 0x92, 0x92, 0xAA, 0xAA, 0x6C, 0x44, 0x44, 0x44, 0x00, 0x00], /* \"W\",48 */\n    [0x00, 0x00, 0x00, 0xE7, 0x42, 0x24, 0x24, 0x18, 0x18, 0x18, 0x24, 0x24, 0x42, 0xE7, 0x00, 0x00], /* \"X\",49 */\n    [0x00, 0x00, 0x00, 0xEE, 0x44, 0x44, 0x28, 0x28, 0x10, 0x10, 0x10, 0x10, 0x10, 0x38, 0x00, 0x00], /* \"Y\",50 */\n    [0x00, 0x00, 0x00, 0x7E, 0x84, 0x04, 0x08, 0x08, 0x10, 0x20, 0x20, 0x42, 0x42, 0xFC, 0x00, 0x00], /* \"Z\",51 */\n    [0x00, 0x00, 0x00, 0x18, 0x24, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x24, 0x18, 0x00, 0x00], /* \"0\",52 */\n    [0x00, 0x00, 0x00, 0x10, 0x70, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x7C, 0x00, 0x00], /* \"1\",53 */\n    [0x00, 0x00, 0x00, 0x3C, 0x42, 0x42, 0x42, 0x04, 0x04, 0x08, 0x10, 0x20, 0x42, 0x7E, 0x00, 0x00], /* \"2\",54 */\n    [0x00, 0x00, 0x00, 0x3C, 0x42, 0x42, 0x04, 0x18, 0x04, 0x02, 0x02, 0x42, 0x44, 0x38, 0x00, 0x00], /* \"3\",55 */\n    [0x00, 0x00, 0x00, 0x04, 0x0C, 0x14, 0x24, 0x24, 0x44, 0x44, 0x7E, 0x04, 0x04, 0x1E, 0x00, 0x00], /* \"4\",56 */\n    [0x00, 0x00, 0x00, 0x7E, 0x40, 0x40, 0x40, 0x58, 0x64, 0x02, 0x02, 0x42, 0x44, 0x38, 0x00, 0x00], /* \"5\",57 */\n    [0x00, 0x00, 0x00, 0x1C, 0x24, 0x40, 0x40, 0x58, 0x64, 0x42, 0x42, 0x42, 0x24, 0x18, 0x00, 0x00], /* \"6\",58 */\n    [0x00, 0x00, 0x00, 0x7E, 0x44, 0x44, 0x08, 0x08, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00], /* \"7\",59 */\n    [0x00, 0x00, 0x00, 0x3C, 0x42, 0x42, 0x42, 0x24, 0x18, 0x24, 0x42, 0x42, 0x42, 0x3C, 0x00, 0x00], /* \"8\",60 */\n    [0x00, 0x00, 0x00, 0x18, 0x24, 0x42, 0x42, 0x42, 0x26, 0x1A, 0x02, 0x02, 0x24, 0x38, 0x00, 0x00] /* \"9\",61 */\n];\n\nconst font12x24Data = [\n    [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x30, 0x30, 0x07, 0x1C, 0x30, 0x60, 0x60, 0x60, 0x71, 0x3E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n        0x00, 0x00, 0x80, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xD0, 0xF0, 0x00, 0x00, 0x00], /* \"a\",0 */\n    [0x00, 0x00, 0x00, 0x00, 0x10, 0x70, 0x30, 0x30, 0x30, 0x30, 0x33, 0x3C, 0x38, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x38, 0x2F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n        0x00, 0x00, 0x80, 0xC0, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x40, 0xC0, 0x80, 0x00, 0x00, 0x00], /* \"b\",1 */\n    [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x31, 0x31, 0x61, 0x60, 0x60, 0x60, 0x60, 0x30, 0x30, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n        0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x40, 0x40, 0x80, 0x00, 0x00, 0x00, 0x00], /* \"c\",2 */\n    [0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x1E, 0x31, 0x30, 0x60, 0x60, 0x60, 0x60, 0x60, 0x20, 0x31, 0x1E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0xC0, 0xC0, 0xC0,\n        0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xE0, 0x80, 0x00, 0x00, 0x00], /* \"d\",3 */\n    [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x18, 0x10, 0x30, 0x3F, 0x30, 0x30, 0x30, 0x18, 0x1C, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n        0x00, 0x00, 0x80, 0xC0, 0x60, 0x60, 0xE0, 0x00, 0x00, 0x00, 0x20, 0x40, 0x80, 0x00, 0x00, 0x00], /* \"e\",4 */\n    [0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x06, 0x0C, 0x0C, 0x0C, 0x7F, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x60, 0x60,\n        0x00, 0x00, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00], /* \"f\",5 */\n    [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x19, 0x30, 0x30, 0x30, 0x19, 0x1F, 0x30, 0x3E, 0x1F, 0x60, 0x60, 0x70, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n        0x00, 0x00, 0x70, 0x90, 0xC0, 0xC0, 0xC0, 0x80, 0x00, 0x00, 0x00, 0xC0, 0x60, 0x60, 0xE0, 0x80], /* \"g\",6 */\n    [0x00, 0x00, 0x00, 0x00, 0x10, 0x70, 0x30, 0x30, 0x30, 0x30, 0x37, 0x38, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x79, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n        0x00, 0x00, 0x80, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xE0, 0x00, 0x00, 0x00], /* \"h\",7 */\n    [0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x06, 0x00, 0x00, 0x00, 0x3E, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x00, 0x00, 0x00], /* \"i\",8 */\n    [0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x0F, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x33, 0x3E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x00,\n        0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00], /* \"j\",9 */\n    [0x00, 0x00, 0x00, 0x00, 0x10, 0x70, 0x30, 0x30, 0x30, 0x30, 0x33, 0x31, 0x33, 0x32, 0x36, 0x3E, 0x3B, 0x33, 0x31, 0x31, 0x79, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n        0x00, 0x00, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xE0, 0x00, 0x00, 0x00], /* \"k\",10 */\n    [0x00, 0x00, 0x00, 0x00, 0x02, 0x3E, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x00, 0x00, 0x00], /* \"l\",11 */\n    [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xEE, 0x77, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0xF7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n        0x00, 0x00, 0xE0, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x70, 0x00, 0x00, 0x00], /* \"m\",12 */\n    [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x73, 0x3C, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x79, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n        0x00, 0x00, 0x80, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xE0, 0x00, 0x00, 0x00], /* \"n\",13 */\n    [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x19, 0x30, 0x60, 0x60, 0x60, 0x60, 0x60, 0x30, 0x30, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n        0x00, 0x00, 0x00, 0x80, 0xC0, 0x60, 0x60, 0x60, 0x60, 0x60, 0xC0, 0xC0, 0x00, 0x00, 0x00, 0x00], /* \"o\",14 */\n    [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x77, 0x38, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x38, 0x37, 0x30, 0x30, 0x7C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n        0x00, 0x00, 0x80, 0xC0, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0xC0, 0xC0, 0x80, 0x00, 0x00, 0x00], /* \"p\",15 */\n    [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1E, 0x31, 0x30, 0x60, 0x60, 0x60, 0x60, 0x60, 0x20, 0x31, 0x1E, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n        0x00, 0x00, 0x40, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xE0], /* \"q\",16 */\n    [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF9, 0x1A, 0x1C, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n        0x00, 0x00, 0xE0, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], /* \"r\",17 */\n    [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x18, 0x30, 0x30, 0x1C, 0x0F, 0x01, 0x20, 0x20, 0x30, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n        0x00, 0x00, 0xE0, 0x60, 0x20, 0x00, 0x00, 0x80, 0xC0, 0x60, 0x60, 0xC0, 0x80, 0x00, 0x00, 0x00], /* \"s\",18 */\n    [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x04, 0x0C, 0x0C, 0x7F, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n        0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x40, 0x80, 0x00, 0x00, 0x00], /* \"t\",19 */\n    [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x71, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x39, 0x1E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n        0x00, 0x40, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xE0, 0x80, 0x00, 0x00, 0x00], /* \"u\",20 */\n    [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7C, 0x38, 0x18, 0x18, 0x0C, 0x0C, 0x0C, 0x07, 0x07, 0x07, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n        0x00, 0x00, 0xF0, 0x60, 0x40, 0x40, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], /* \"v\",21 */\n    [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF7, 0x63, 0x63, 0x67, 0x37, 0x35, 0x39, 0x39, 0x39, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n        0x00, 0x00, 0xB0, 0x20, 0x20, 0x20, 0x20, 0xC0, 0xC0, 0xC0, 0xC0, 0x80, 0x80, 0x00, 0x00, 0x00], /* \"w\",22 */\n    [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7D, 0x18, 0x19, 0x0D, 0x0E, 0x06, 0x07, 0x0B, 0x19, 0x11, 0x7B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n        0x00, 0x00, 0xE0, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xC0, 0xE0, 0x00, 0x00, 0x00], /* \"x\",23 */\n    [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7D, 0x38, 0x18, 0x18, 0x0D, 0x0D, 0x0D, 0x06, 0x06, 0x02, 0x04, 0x04, 0x28, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n        0x00, 0x00, 0xE0, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], /* \"y\",24 */\n    [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x21, 0x23, 0x03, 0x07, 0x06, 0x0E, 0x0C, 0x1C, 0x18, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n        0x00, 0x00, 0xC0, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x20, 0x20, 0x60, 0xC0, 0x00, 0x00, 0x00], /* \"z\",25 */\n    [0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x06, 0x0E, 0x0B, 0x0B, 0x13, 0x11, 0x11, 0x11, 0x1F, 0x20, 0x20, 0x20, 0x20, 0x60, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n        0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0xC0, 0xC0, 0xC0, 0x60, 0x60, 0xF0, 0x00, 0x00, 0x00], /* \"A\",26 */\n    [0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x61, 0x60, 0x60, 0x60, 0x60, 0x61, 0x7F, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xC0,\n        0xC0, 0xC0, 0xC0, 0x80, 0x00, 0xC0, 0x40, 0x60, 0x60, 0x60, 0x60, 0xC0, 0x80, 0x00, 0x00, 0x00], /* \"B\",27 */\n    [0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x18, 0x30, 0x30, 0x20, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x30, 0x30, 0x18, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x60, 0x20,\n        0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x20, 0x40, 0x80, 0x00, 0x00, 0x00, 0x00], /* \"C\",28 */\n    [0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x61, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x63, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xC0,\n        0xC0, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0xC0, 0xC0, 0x80, 0x00, 0x00, 0x00, 0x00], /* \"D\",29 */\n    [0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x60, 0x60, 0x60, 0x60, 0x61, 0x61, 0x7F, 0x61, 0x61, 0x60, 0x60, 0x60, 0x60, 0x60, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x40, 0x20,\n        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x20, 0x40, 0xC0, 0x00, 0x00, 0x00], /* \"E\",30 */\n    [0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x60, 0x60, 0x60, 0x60, 0x61, 0x61, 0x7F, 0x61, 0x61, 0x60, 0x60, 0x60, 0x60, 0x60, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xC0, 0x20,\n        0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], /* \"F\",31 */\n    [0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x18, 0x30, 0x30, 0x20, 0x60, 0x60, 0x60, 0x60, 0x63, 0x60, 0x60, 0x30, 0x30, 0x18, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0xC0, 0x40,\n        0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0x00, 0x00, 0x00, 0x00], /* \"G\",32 */\n    [0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x7F, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x60, 0x60,\n        0x60, 0x60, 0x60, 0x60, 0xE0, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0xF0, 0x00, 0x00, 0x00], /* \"H\",33 */\n    [0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x00, 0x00,\n        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x00, 0x00, 0x00], /* \"I\",34 */\n    [0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x61, 0x63, 0x3E, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x80, 0x80,\n        0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00], /* \"J\",35 */\n    [0x00, 0x00, 0x00, 0x00, 0x00, 0xF3, 0x60, 0x61, 0x62, 0x62, 0x64, 0x6C, 0x7C, 0x76, 0x67, 0x63, 0x63, 0x61, 0x60, 0x60, 0xF1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x80, 0x00,\n        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xC0, 0xE0, 0xF0, 0x00, 0x00, 0x00], /* \"K\",36 */\n    [0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x20, 0x40, 0xC0, 0x00, 0x00, 0x00], /* \"L\",37 */\n    [0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x70, 0x70, 0x70, 0x59, 0x59, 0x59, 0x59, 0x5A, 0x4E, 0x4E, 0x4E, 0x4E, 0x44, 0x44, 0xE4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0xE0, 0xE0,\n        0xE0, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0xF0, 0x00, 0x00, 0x00], /* \"M\",38 */\n    [0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x70, 0x70, 0x58, 0x58, 0x4C, 0x46, 0x46, 0x43, 0x43, 0x41, 0x40, 0x40, 0x40, 0x40, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x20, 0x20,\n        0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0xA0, 0xE0, 0xE0, 0x60, 0x60, 0x20, 0x00, 0x00, 0x00], /* \"N\",39 */\n    [0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x19, 0x30, 0x30, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x30, 0x30, 0x19, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xC0,\n        0x40, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x40, 0xC0, 0x80, 0x00, 0x00, 0x00, 0x00], /* \"O\",40 */\n    [0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x7F, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xC0, 0x60,\n        0x60, 0x60, 0x60, 0x60, 0xC0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], /* \"P\",41 */\n    [0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x19, 0x30, 0x30, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x6E, 0x32, 0x31, 0x11, 0x0F, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xC0,\n        0x40, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x40, 0xC0, 0x80, 0x80, 0xE0, 0xC0, 0x00], /* \"Q\",42 */\n    [0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x7F, 0x66, 0x63, 0x63, 0x61, 0x61, 0x60, 0x60, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xC0, 0x60,\n        0x60, 0x60, 0x60, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xC0, 0xC0, 0x70, 0x00, 0x00, 0x00], /* \"R\",43 */\n    [0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x30, 0x60, 0x60, 0x60, 0x70, 0x3C, 0x0F, 0x03, 0x00, 0x00, 0x40, 0x40, 0x60, 0x70, 0x4F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0xE0, 0x20,\n        0x20, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xC0, 0x60, 0x60, 0x60, 0x60, 0xC0, 0x80, 0x00, 0x00, 0x00], /* \"S\",44 */\n    [0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x46, 0x86, 0x86, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x20, 0x10,\n        0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], /* \"T\",45 */\n    [0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x30, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x20, 0x20,\n        0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x40, 0x80, 0x00, 0x00, 0x00], /* \"U\",46 */\n    [0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x70, 0x30, 0x30, 0x30, 0x30, 0x18, 0x18, 0x18, 0x18, 0x0D, 0x0D, 0x0D, 0x0F, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x60, 0x40,\n        0x40, 0x40, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], /* \"V\",47 */\n    [0x00, 0x00, 0x00, 0x00, 0x00, 0xF7, 0x66, 0x66, 0x66, 0x66, 0x67, 0x37, 0x37, 0x3B, 0x3B, 0x3B, 0x3B, 0x39, 0x11, 0x11, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x20, 0x20,\n        0x40, 0x40, 0x40, 0x40, 0x40, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], /* \"W\",48 */\n    [0x00, 0x00, 0x00, 0x00, 0x00, 0x79, 0x30, 0x18, 0x18, 0x19, 0x0D, 0x0E, 0x06, 0x06, 0x07, 0x0B, 0x0B, 0x19, 0x11, 0x30, 0x79, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xC0, 0x80,\n        0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0xC0, 0xE0, 0x00, 0x00, 0x00], /* \"X\",49 */\n    [0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x70, 0x30, 0x30, 0x18, 0x18, 0x0D, 0x0D, 0x0E, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x60, 0x40,\n        0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00], /* \"Y\",50 */\n    [0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x20, 0x41, 0x01, 0x03, 0x03, 0x03, 0x06, 0x06, 0x0C, 0x0C, 0x18, 0x18, 0x38, 0x30, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xC0, 0xC0,\n        0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x20, 0x40, 0xC0, 0x00, 0x00, 0x00], /* \"Z\",51 */\n    [0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x19, 0x30, 0x30, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x30, 0x30, 0x19, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xC0,\n        0xC0, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0xC0, 0xC0, 0x80, 0x00, 0x00, 0x00, 0x00], /* \"0\",52 */\n    [0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x06, 0x3E, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x00, 0x00, 0x00], /* \"1\",53 */\n    [0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x21, 0x40, 0x60, 0x60, 0x00, 0x01, 0x01, 0x03, 0x04, 0x08, 0x10, 0x20, 0x40, 0x7F, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xC0,\n        0xC0, 0xC0, 0xC0, 0x80, 0x80, 0x00, 0x00, 0x00, 0x40, 0x40, 0x40, 0xC0, 0xC0, 0x00, 0x00, 0x00], /* \"2\",54 */\n    [0x00, 0x00, 0x00, 0x00, 0x00, 0x1E, 0x23, 0x61, 0x61, 0x61, 0x01, 0x03, 0x0E, 0x01, 0x00, 0x00, 0x60, 0x60, 0x60, 0x21, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80,\n        0x80, 0x80, 0x80, 0x00, 0x00, 0x80, 0x80, 0xC0, 0xC0, 0xC0, 0xC0, 0x80, 0x00, 0x00, 0x00, 0x00], /* \"3\",55 */\n    [0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x03, 0x05, 0x09, 0x09, 0x11, 0x21, 0x21, 0x41, 0x7F, 0x01, 0x01, 0x01, 0x01, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80,\n        0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0xE0, 0x80, 0x80, 0x80, 0x80, 0xE0, 0x00, 0x00, 0x00], /* \"4\",56 */\n    [0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x3F, 0x20, 0x20, 0x20, 0x20, 0x2F, 0x31, 0x20, 0x00, 0x00, 0x60, 0x60, 0x41, 0x21, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xC0, 0x00,\n        0x00, 0x00, 0x00, 0x00, 0x80, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00], /* \"5\",57 */\n    [0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x18, 0x30, 0x30, 0x20, 0x60, 0x67, 0x68, 0x70, 0x60, 0x60, 0x60, 0x20, 0x30, 0x18, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xC0, 0xC0,\n        0x00, 0x00, 0x00, 0x80, 0xC0, 0x60, 0x60, 0x60, 0x60, 0x60, 0x40, 0xC0, 0x00, 0x00, 0x00, 0x00], /* \"6\",58 */\n    [0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x3F, 0x30, 0x20, 0x20, 0x00, 0x01, 0x01, 0x02, 0x02, 0x02, 0x06, 0x06, 0x06, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xE0, 0x40,\n        0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], /* \"7\",59 */\n    [0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x30, 0x60, 0x60, 0x60, 0x70, 0x3C, 0x0F, 0x33, 0x20, 0x60, 0x60, 0x60, 0x60, 0x30, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xC0, 0x60,\n        0x60, 0x60, 0x40, 0xC0, 0x00, 0x80, 0xC0, 0x60, 0x60, 0x60, 0x60, 0xC0, 0x80, 0x00, 0x00, 0x00], /* \"8\",60 */\n    [0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x30, 0x30, 0x60, 0x60, 0x60, 0x60, 0x60, 0x31, 0x1E, 0x00, 0x00, 0x00, 0x30, 0x31, 0x1E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xC0,\n        0x40, 0x60, 0x60, 0x60, 0xE0, 0x60, 0x60, 0x60, 0xC0, 0xC0, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00] /* \"9\",61 */\n];\n\nconst font16x32Data = [\n    [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x18, 0x30, 0x30, 0x00, 0x01, 0x0E, 0x38, 0x30, 0x60, 0x60, 0x60, 0x30, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00,\n        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x60, 0x30, 0x30, 0x30, 0xF0, 0x30, 0x30, 0x30, 0x30, 0x30, 0x32, 0xF2, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x00], /* \"a\",0 */\n    [0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x78, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x1B, 0x1C, 0x1C, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x1C, 0x1E, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00,\n        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x18, 0x0C, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x04, 0x0C, 0x18, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00], /* \"b\",1 */\n    [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x0E, 0x18, 0x18, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x18, 0x18, 0x0C, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00,\n        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x30, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x04, 0x04, 0x08, 0x10, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00], /* \"c\",2 */\n    [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x0C, 0x18, 0x18, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x10, 0x18, 0x0C, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00,\n        0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x78, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xD8, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x38, 0x5E, 0x90, 0x00, 0x00, 0x00, 0x00, 0x00], /* \"d\",3 */\n    [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x0C, 0x18, 0x10, 0x30, 0x30, 0x3F, 0x30, 0x30, 0x30, 0x18, 0x18, 0x0E, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00,\n        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x30, 0x18, 0x08, 0x0C, 0x0C, 0xFC, 0x00, 0x00, 0x00, 0x04, 0x08, 0x18, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00], /* \"e\",4 */\n    [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x03, 0x03, 0x03, 0x03, 0x3F, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00,\n        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7C, 0xC3, 0x03, 0x03, 0x00, 0x00, 0x00, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00], /* \"f\",5 */\n    [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x0C, 0x08, 0x18, 0x18, 0x18, 0x08, 0x0C, 0x0F, 0x18, 0x18, 0x0F, 0x0F, 0x10, 0x30, 0x30, 0x30, 0x1C, 0x07,\n        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xEE, 0x36, 0x18, 0x18, 0x18, 0x18, 0x18, 0x30, 0xE0, 0x00, 0x00, 0xF0, 0xFC, 0x0E, 0x06, 0x06, 0x06, 0x1C, 0xF0], /* \"g\",6 */\n    [0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x78, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x19, 0x1B, 0x1C, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x7E, 0x00, 0x00, 0x00, 0x00, 0x00,\n        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x18, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00], /* \"h\",7 */\n    [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00,\n        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xC0, 0xC0, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00], /* \"i\",8 */\n    [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x0F,\n        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x1C, 0x1C, 0x00, 0x00, 0x00, 0x08, 0xF8, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x30, 0x60, 0xC0], /* \"j\",9 */\n    [0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x78, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x19, 0x1B, 0x1C, 0x18, 0x18, 0x18, 0x18, 0x18, 0x7E, 0x00, 0x00, 0x00, 0x00, 0x00,\n        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7C, 0x30, 0x60, 0xC0, 0x80, 0x80, 0x80, 0xC0, 0xE0, 0x60, 0x30, 0x38, 0x18, 0x3E, 0x00, 0x00, 0x00, 0x00, 0x00], /* \"k\",10 */\n    [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00,\n        0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00], /* \"l\",11 */\n    [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x77, 0x39, 0x31, 0x31, 0x31, 0x31, 0x31, 0x31, 0x31, 0x31, 0x31, 0x31, 0x31, 0x7B, 0x00, 0x00, 0x00, 0x00, 0x00,\n        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0xCC, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0xDE, 0x00, 0x00, 0x00, 0x00, 0x00], /* \"m\",12 */\n    [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x78, 0x1B, 0x1C, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x7E, 0x00, 0x00, 0x00, 0x00, 0x00,\n        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x18, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00], /* \"n\",13 */\n    [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x0E, 0x08, 0x18, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x18, 0x18, 0x0C, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00,\n        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x38, 0x0C, 0x0C, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x0C, 0x0C, 0x18, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00], /* \"o\",14 */\n    [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x79, 0x1A, 0x1C, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x1C, 0x1E, 0x19, 0x18, 0x18, 0x18, 0x18, 0x7E,\n        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x18, 0x0C, 0x04, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x0C, 0x0C, 0x18, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00], /* \"p\",15 */\n    [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x0C, 0x18, 0x18, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x10, 0x18, 0x0C, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00,\n        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC4, 0x3C, 0x1C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x1C, 0x3C, 0xCC, 0x0C, 0x0C, 0x0C, 0x0C, 0x3F], /* \"q\",16 */\n    [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x7E, 0x06, 0x06, 0x07, 0x07, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00,\n        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3C, 0x66, 0x86, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00], /* \"r\",17 */\n    [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x0C, 0x18, 0x18, 0x18, 0x0E, 0x07, 0x01, 0x00, 0x20, 0x20, 0x30, 0x38, 0x37, 0x00, 0x00, 0x00, 0x00, 0x00,\n        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE4, 0x1C, 0x0C, 0x04, 0x00, 0x00, 0xC0, 0xF0, 0x38, 0x0C, 0x0C, 0x0C, 0x18, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00], /* \"s\",18 */\n    [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x03, 0x07, 0x3F, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x04, 0x88, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00], /* \"t\",19 */\n    [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x78, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x0C, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00,\n        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x3C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x1C, 0x2F, 0xC8, 0x00, 0x00, 0x00, 0x00, 0x00], /* \"u\",20 */\n    [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7E, 0x18, 0x18, 0x1C, 0x0C, 0x0C, 0x0E, 0x06, 0x06, 0x07, 0x03, 0x03, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,\n        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3C, 0x18, 0x10, 0x10, 0x20, 0x20, 0x40, 0x40, 0x40, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], /* \"v\",21 */\n    [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFB, 0x71, 0x30, 0x31, 0x31, 0x19, 0x19, 0x1A, 0x1A, 0x0E, 0x0E, 0x0E, 0x04, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00,\n        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xEF, 0xC6, 0xC4, 0xC4, 0xC4, 0xC8, 0xC8, 0x68, 0x68, 0x70, 0x70, 0x70, 0x20, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00], /* \"w\",22 */\n    [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x0E, 0x0E, 0x07, 0x03, 0x03, 0x01, 0x01, 0x02, 0x06, 0x04, 0x08, 0x18, 0x7C, 0x00, 0x00, 0x00, 0x00, 0x00,\n        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7C, 0x10, 0x20, 0x20, 0x40, 0x80, 0xC0, 0xC0, 0xE0, 0x60, 0x30, 0x30, 0x18, 0x7E, 0x00, 0x00, 0x00, 0x00, 0x00], /* \"x\",23 */\n    [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7E, 0x18, 0x18, 0x0C, 0x0C, 0x0C, 0x06, 0x06, 0x03, 0x03, 0x03, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x32, 0x3C,\n        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3E, 0x18, 0x10, 0x10, 0x10, 0x20, 0x20, 0x20, 0x40, 0x40, 0x40, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00], /* \"y\",24 */\n    [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x30, 0x20, 0x20, 0x00, 0x01, 0x01, 0x03, 0x07, 0x0E, 0x0C, 0x1C, 0x38, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00,\n        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x30, 0x70, 0x60, 0xC0, 0xC0, 0x80, 0x00, 0x00, 0x04, 0x04, 0x0C, 0x18, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00], /* \"z\",25 */\n    [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, 0x03, 0x02, 0x06, 0x04, 0x04, 0x04, 0x0C, 0x08, 0x08, 0x08, 0x1F, 0x10, 0x10, 0x10, 0x30, 0x20, 0x20, 0x60, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00,\n        0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0xC0, 0xC0, 0xC0, 0xC0, 0x60, 0x60, 0x60, 0x60, 0xF0, 0x30, 0x30, 0x30, 0x30, 0x18, 0x18, 0x18, 0x3E, 0x00, 0x00, 0x00, 0x00, 0x00], /* \"A\",26 */\n    [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x1F, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00,\n        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x38, 0x1C, 0x0C, 0x0C, 0x0C, 0x0C, 0x18, 0x30, 0xE0, 0x18, 0x0C, 0x04, 0x06, 0x06, 0x06, 0x06, 0x06, 0x0C, 0x18, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00], /* \"B\",27 */\n    [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x06, 0x08, 0x18, 0x30, 0x30, 0x20, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x30, 0x30, 0x30, 0x18, 0x0C, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00,\n        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE4, 0x1C, 0x0C, 0x04, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x04, 0x0C, 0x18, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00], /* \"C\",28 */\n    [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00,\n        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x70, 0x18, 0x0C, 0x0C, 0x0C, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x0C, 0x0C, 0x08, 0x18, 0x70, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00], /* \"D\",29 */\n    [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x1F, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00,\n        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x0C, 0x04, 0x06, 0x02, 0x00, 0x10, 0x10, 0x30, 0xF0, 0x30, 0x10, 0x10, 0x00, 0x00, 0x00, 0x02, 0x02, 0x04, 0x0C, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00], /* \"E\",30 */\n    [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x1F, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x7E, 0x00, 0x00, 0x00, 0x00, 0x00,\n        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x0E, 0x02, 0x03, 0x01, 0x00, 0x08, 0x08, 0x18, 0xF8, 0x18, 0x08, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], /* \"F\",31 */\n    [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x0E, 0x08, 0x18, 0x30, 0x30, 0x20, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x30, 0x30, 0x18, 0x18, 0x0C, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00,\n        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC8, 0x38, 0x08, 0x08, 0x04, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x10, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00], /* \"G\",32 */\n    [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x3F, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00,\n        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7E, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xF8, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x7E, 0x00, 0x00, 0x00, 0x00, 0x00], /* \"H\",33 */\n    [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00,\n        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00], /* \"I\",34 */\n    [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x70, 0x71, 0x3F,\n        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0xC0, 0x80, 0x00], /* \"J\",35 */\n    [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7E, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x19, 0x19, 0x1B, 0x1D, 0x1C, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x7E, 0x00, 0x00, 0x00, 0x00, 0x00,\n        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3E, 0x18, 0x10, 0x20, 0x60, 0x40, 0x80, 0x80, 0x80, 0x80, 0xC0, 0xC0, 0xE0, 0x60, 0x70, 0x30, 0x38, 0x18, 0x0C, 0x0C, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00], /* \"K\",36 */\n    [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7E, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00,\n        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x04, 0x0C, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00], /* \"L\",37 */\n    [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x38, 0x38, 0x38, 0x38, 0x2C, 0x2C, 0x2C, 0x2C, 0x2E, 0x26, 0x26, 0x26, 0x26, 0x23, 0x23, 0x23, 0x23, 0x23, 0x21, 0xF9, 0x00, 0x00, 0x00, 0x00, 0x00,\n        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x1C, 0x1C, 0x1C, 0x3C, 0x2C, 0x2C, 0x2C, 0x6C, 0x4C, 0x4C, 0x4C, 0x4C, 0x8C, 0x8C, 0x8C, 0x8C, 0x0C, 0x0C, 0x0C, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00], /* \"M\",38 */\n    [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x38, 0x3C, 0x2C, 0x2C, 0x2E, 0x26, 0x27, 0x23, 0x23, 0x21, 0x21, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00,\n        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3E, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x88, 0x88, 0xC8, 0xC8, 0xE8, 0x68, 0x78, 0x38, 0x38, 0x38, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00], /* \"N\",39 */\n    [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x0C, 0x18, 0x10, 0x30, 0x30, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x30, 0x30, 0x10, 0x18, 0x0C, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00,\n        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x30, 0x18, 0x08, 0x0C, 0x0C, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x04, 0x0C, 0x08, 0x18, 0x30, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00], /* \"O\",40 */\n    [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x1F, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x7E, 0x00, 0x00, 0x00, 0x00, 0x00,\n        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x18, 0x0C, 0x06, 0x06, 0x06, 0x06, 0x06, 0x0C, 0x18, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], /* \"P\",41 */\n    [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x0C, 0x18, 0x30, 0x30, 0x30, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x27, 0x34, 0x38, 0x18, 0x0C, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00,\n        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x30, 0x18, 0x08, 0x0C, 0x04, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x86, 0xCC, 0x4C, 0x68, 0x70, 0xE0, 0x32, 0x3E, 0x1C, 0x00, 0x00], /* \"Q\",42 */\n    [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x1F, 0x19, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x7E, 0x00, 0x00, 0x00, 0x00, 0x00,\n        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x38, 0x1C, 0x0C, 0x0C, 0x0C, 0x0C, 0x18, 0x30, 0xE0, 0xC0, 0xC0, 0xE0, 0x60, 0x60, 0x70, 0x30, 0x30, 0x38, 0x18, 0x1E, 0x00, 0x00, 0x00, 0x00, 0x00], /* \"R\",43 */\n    [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x0C, 0x18, 0x30, 0x30, 0x30, 0x30, 0x18, 0x1E, 0x07, 0x01, 0x00, 0x00, 0x00, 0x00, 0x20, 0x20, 0x10, 0x18, 0x1C, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00,\n        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE4, 0x1C, 0x0C, 0x04, 0x04, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xF0, 0x78, 0x1C, 0x0E, 0x06, 0x06, 0x06, 0x06, 0x0C, 0x18, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00], /* \"S\",44 */\n    [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x31, 0x21, 0x41, 0x41, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00,\n        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x84, 0x86, 0x82, 0x82, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00], /* \"T\",45 */\n    [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x10, 0x1C, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00,\n        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3E, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x10, 0x20, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00], /* \"U\",46 */\n    [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7C, 0x18, 0x18, 0x18, 0x0C, 0x0C, 0x0C, 0x0C, 0x06, 0x06, 0x06, 0x07, 0x03, 0x03, 0x03, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x04, 0x04, 0x04, 0x08, 0x08, 0x08, 0x08, 0x10, 0x10, 0x10, 0x30, 0x20, 0x20, 0x20, 0xC0, 0xC0, 0xC0, 0xC0, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00], /* \"V\",47 */\n    [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFB, 0x61, 0x61, 0x61, 0x31, 0x30, 0x31, 0x31, 0x31, 0x31, 0x32, 0x1A, 0x1A, 0x1A, 0x1C, 0x1C, 0x1C, 0x0C, 0x08, 0x08, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00,\n        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xCF, 0x86, 0x84, 0x84, 0x84, 0x84, 0xC4, 0xC8, 0xC8, 0xC8, 0xC8, 0x48, 0x68, 0x70, 0x70, 0x70, 0x70, 0x30, 0x20, 0x20, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00], /* \"W\",48 */\n    [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7E, 0x18, 0x1C, 0x0C, 0x0C, 0x0E, 0x06, 0x07, 0x03, 0x03, 0x01, 0x01, 0x02, 0x02, 0x04, 0x04, 0x08, 0x08, 0x10, 0x10, 0x7C, 0x00, 0x00, 0x00, 0x00, 0x00,\n        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7C, 0x10, 0x10, 0x20, 0x20, 0x40, 0x40, 0x80, 0x80, 0x80, 0x80, 0xC0, 0xC0, 0xE0, 0x60, 0x60, 0x30, 0x30, 0x18, 0x18, 0x3E, 0x00, 0x00, 0x00, 0x00, 0x00], /* \"X\",49 */\n    [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7E, 0x38, 0x18, 0x18, 0x0C, 0x0C, 0x0E, 0x06, 0x06, 0x03, 0x03, 0x03, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00,\n        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3E, 0x08, 0x08, 0x10, 0x10, 0x30, 0x20, 0x20, 0x40, 0x40, 0x40, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00], /* \"Y\",50 */\n    [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x18, 0x10, 0x20, 0x20, 0x00, 0x00, 0x00, 0x01, 0x01, 0x03, 0x03, 0x07, 0x06, 0x0E, 0x0C, 0x1C, 0x18, 0x38, 0x30, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00,\n        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x18, 0x18, 0x30, 0x70, 0x60, 0xE0, 0xC0, 0xC0, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x04, 0x08, 0x18, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00], /* \"Z\",51 */\n    [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x06, 0x0C, 0x18, 0x18, 0x18, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x18, 0x18, 0x18, 0x0C, 0x06, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00,\n        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x30, 0x18, 0x0C, 0x0C, 0x04, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x04, 0x0C, 0x0C, 0x18, 0x30, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00], /* \"0\",52 */\n    [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x1F, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x03, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00,\n        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0xC0, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00], /* \"1\",53 */\n    [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x08, 0x10, 0x20, 0x20, 0x30, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00,\n        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x38, 0x18, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x18, 0x10, 0x20, 0x40, 0x80, 0x00, 0x00, 0x04, 0x04, 0x04, 0x0C, 0xF8, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00], /* \"2\",54 */\n    [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x18, 0x30, 0x30, 0x30, 0x30, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x30, 0x30, 0x30, 0x18, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00,\n        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x70, 0x30, 0x18, 0x18, 0x18, 0x18, 0x30, 0x60, 0xC0, 0x70, 0x18, 0x08, 0x0C, 0x0C, 0x0C, 0x0C, 0x08, 0x18, 0x30, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00], /* \"3\",55 */\n    [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x02, 0x06, 0x04, 0x08, 0x08, 0x10, 0x20, 0x20, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00,\n        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x70, 0x70, 0xF0, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0xFE, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0xFE, 0x00, 0x00, 0x00, 0x00], /* \"4\",56 */\n    [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x0F, 0x08, 0x08, 0x08, 0x10, 0x10, 0x13, 0x14, 0x18, 0x10, 0x00, 0x00, 0x00, 0x00, 0x30, 0x30, 0x20, 0x20, 0x10, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00,\n        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x30, 0x18, 0x08, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x18, 0x18, 0x30, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00], /* \"5\",57 */\n    [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x04, 0x08, 0x18, 0x18, 0x10, 0x30, 0x31, 0x36, 0x3C, 0x38, 0x30, 0x30, 0x30, 0x30, 0x18, 0x18, 0x0C, 0x06, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00,\n        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x08, 0x0C, 0x0C, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x18, 0x0C, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x04, 0x0C, 0x18, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00], /* \"6\",58 */\n    [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x1F, 0x38, 0x30, 0x20, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00,\n        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFC, 0x08, 0x10, 0x10, 0x20, 0x20, 0x40, 0x40, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], /* \"7\",59 */\n    [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x0C, 0x18, 0x30, 0x30, 0x30, 0x38, 0x1C, 0x0E, 0x07, 0x0D, 0x18, 0x30, 0x60, 0x60, 0x60, 0x60, 0x60, 0x30, 0x18, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00,\n        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x30, 0x18, 0x0C, 0x0C, 0x0C, 0x0C, 0x18, 0x10, 0xE0, 0xE0, 0x70, 0x38, 0x1C, 0x0C, 0x0C, 0x0C, 0x0C, 0x18, 0x30, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00], /* \"8\",60 */\n    [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x18, 0x30, 0x30, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x30, 0x18, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x30, 0x30, 0x30, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00,\n        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x20, 0x10, 0x18, 0x08, 0x0C, 0x0C, 0x0C, 0x0C, 0x1C, 0x3C, 0x6C, 0x8C, 0x0C, 0x18, 0x18, 0x18, 0x30, 0x60, 0xC0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00] /* \"9\",61 */\n];\n\nexport interface IFont {\n    w: number;\n    h: number;\n    fonts: string;\n    data: number[][];\n}\n\nexport const font8x16: IFont = {\n    w: 8,\n    h: 16,\n    fonts,\n    data: font8x16Data,\n};\n\nexport const font12x24: IFont = {\n    w: 12,\n    h: 24,\n    fonts,\n    data: font12x24Data,\n};\n\nexport const font16x32: IFont = {\n    w: 16,\n    h: 32,\n    fonts,\n    data: font16x32Data,\n};\n"
  },
  {
    "path": "tsconfig.json",
    "content": "{\n  \"compilerOptions\": {\n    /* Basic Options */                       \n    \"target\": \"es5\",                          /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', or 'ESNEXT'. */\n    \"module\": \"commonjs\",                     /* Specify module code generation: 'commonjs', 'amd', 'system', 'umd' or 'es2015'. */\n    // \"lib\": [],                             /* Specify library files to be included in the compilation:  */\n    // \"allowJs\": true,                       /* Allow javascript files to be compiled. */\n    // \"checkJs\": true,                       /* Report errors in .js files. */\n    // \"jsx\": \"preserve\",                     /* Specify JSX code generation: 'preserve', 'react-native', or 'react'. */\n    \"declaration\": true,                   /* Generates corresponding '.d.ts' file. */\n    \"sourceMap\": true,                     /* Generates corresponding '.map' file. */\n    // \"outFile\": \"./\",                       /* Concatenate and emit output to single file. */\n    \"outDir\": \"./dist/\",                        /* Redirect output structure to the directory. */\n    \"rootDir\": \"./src/\",                       /* Specify the root directory of input files. Use to control the output directory structure with --outDir. */\n    // \"removeComments\": true,                /* Do not emit comments to output. */\n    // \"noEmit\": true,                        /* Do not emit outputs. */\n    // \"importHelpers\": true,                 /* Import emit helpers from 'tslib'. */\n    // \"downlevelIteration\": true,            /* Provide full support for iterables in 'for-of', spread, and destructuring when targeting 'ES5' or 'ES3'. */\n    // \"isolatedModules\": true,               /* Transpile each file as a separate module (similar to 'ts.transpileModule'). */\n                                              \n    /* Strict Type-Checking Options */        \n    \"strict\": true,                            /* Enable all strict type-checking options. */\n    \"noImplicitAny\": true,                 /* Raise error on expressions and declarations with an implied 'any' type. */\n    \"strictNullChecks\": true,              /* Enable strict null checks. */\n    \"noImplicitThis\": true,                /* Raise error on 'this' expressions with an implied 'any' type. */\n    \"alwaysStrict\": true,                  /* Parse in strict mode and emit \"use strict\" for each source file. */\n                                              \n    /* Additional Checks */                   \n    \"noUnusedLocals\": true,                /* Report errors on unused locals. */\n    // \"noUnusedParameters\": true,            /* Report errors on unused parameters. */\n    \"noImplicitReturns\": true,             /* Report error when not all code paths in function return a value. */\n    \"noFallthroughCasesInSwitch\": true    /* Report errors for fallthrough cases in switch statement. */\n                                              \n    /* Module Resolution Options */           \n    // \"moduleResolution\": \"node\",            /* Specify module resolution strategy: 'node' (Node.js) or 'classic' (TypeScript pre-1.6). */\n    // \"baseUrl\": \"./\",                       /* Base directory to resolve non-absolute module names. */\n    // \"paths\": {},                           /* A series of entries which re-map imports to lookup locations relative to the 'baseUrl'. */\n    // \"rootDirs\": [],                        /* List of root folders whose combined content represents the structure of the project at runtime. */\n    // \"typeRoots\": [],                       /* List of folders to include type definitions from. */\n    // \"types\": [],                           /* Type declaration files to be included in compilation. */\n    // \"allowSyntheticDefaultImports\": true,  /* Allow default imports from modules with no default export. This does not affect code emit, just typechecking. */\n                                              \n    /* Source Map Options */                  \n    // \"sourceRoot\": \"./\",                    /* Specify the location where debugger should locate TypeScript files instead of source locations. */\n    // \"mapRoot\": \"./\",                       /* Specify the location where debugger should locate map files instead of generated locations. */\n    // \"inlineSourceMap\": true,               /* Emit a single file with source maps instead of having a separate file. */\n    // \"inlineSources\": true,                 /* Emit the source alongside the sourcemaps within a single file; requires '--inlineSourceMap' or '--sourceMap' to be set. */\n                                              \n    /* Experimental Options */                \n    // \"experimentalDecorators\": true,        /* Enables experimental support for ES7 decorators. */\n    // \"emitDecoratorMetadata\": true,         /* Enables experimental support for emitting type metadata for decorators. */\n  }\n}"
  }
]