diff --git a/apps/cpu-name.krk b/apps/cpu-name.krk new file mode 100644 index 00000000..507eb54e --- /dev/null +++ b/apps/cpu-name.krk @@ -0,0 +1,22 @@ +#!/bin/kuroko + +import fileio + +let lines +let cpus = {0: {}} +let current = 0 + +with fileio.open('/proc/cpuinfo','r') as f: + lines = f.readlines() + +for line in lines: + if line == '\n': + current++ + cpus[current] = {} + continue + line = line.strip() + if ': ' in line: + let key, value = line.split(': ') + cpus[current][key] = value + +print(cpus[0]['Model name']) diff --git a/apps/font-tool.c b/apps/font-tool.c new file mode 100644 index 00000000..bd0723ca --- /dev/null +++ b/apps/font-tool.c @@ -0,0 +1,83 @@ +/** + * @file apps/font-tool.c + * @brief Print information about TrueType fonts. + * + * @copyright + * This file is part of ToaruOS and is released under the terms + * of the NCSA / University of Illinois License - see LICENSE.md + * Copyright (C) 2021 K. Lange + */ +#include +#include + +#include +#include + +static void usage(char * argv[]) { + printf( + "usage: %s [-n] [FONT]\n" + "Print information about TrueType fonts. If FONT is not specified,\n" + "the system monospace font will be used.\n" + "\n" + " -n --name \033[3mPrint the stored name of the font.\033[0m\n" + " -h --help \033[3mShow this help message.\033[0m\n" + "\n", + argv[0]); +} + +#define SHOW_NAME (1 << 0) + +int main(int argc, char * argv[]) { + static struct option long_opts[] = { + {"name", no_argument, 0, 'n'}, + {"help", no_argument, 0, 'h'}, + {0,0,0,0} + }; + + int flags = 0; + + /* Read some arguments */ + int index, c; + while ((c = getopt_long(argc, argv, "nh", long_opts, &index)) != -1) { + if (!c) { + if (long_opts[index].flag == 0) { + c = long_opts[index].val; + } + } + switch (c) { + case 'h': + usage(argv); + return 0; + break; + case 'n': + flags |= SHOW_NAME; + break; + default: + break; + } + } + + struct TT_Font * my_font; + + if (optind < argc) { + my_font = tt_font_from_file(argv[optind]); + if (!my_font) { + fprintf(stderr, "%s: %s: Could not load font.\n", argv[0], argv[optind]); + return 1; + } + } else { + my_font = tt_font_from_shm("monospace"); + if (!my_font) { + fprintf(stderr, "Unknown.\n"); + return 1; + } + } + + if (flags & SHOW_NAME) { + extern char * tt_get_name_string(struct TT_Font * font, int identifier); + fprintf(stdout, "%s\n", tt_get_name_string(my_font, 4)); + } + + return 0; +} + diff --git a/apps/sysinfo.c b/apps/sysinfo.c index f3ddbfe6..ffbc25ff 100644 --- a/apps/sysinfo.c +++ b/apps/sysinfo.c @@ -73,6 +73,12 @@ int main(int argc, char * argv[]) { /* from environment */ sprintf(data_lines[i++], C_A "WM Theme: " C_O "%s", wm_theme); + prog_lines[i] = "font-tool -n"; + sprintf(data_lines[i++], C_A "Font: " C_O); + + prog_lines[i] = "cpu-name.krk"; + sprintf(data_lines[i++], C_A "CPU: " C_O); + prog_lines[i] = "free -ut"; sprintf(data_lines[i++], C_A "RAM: " C_O); diff --git a/apps/toaru_logo.h b/apps/toaru_logo.h index 89454823..39230afa 100644 --- a/apps/toaru_logo.h +++ b/apps/toaru_logo.h @@ -13,98 +13,75 @@ static const struct { unsigned int width; unsigned int height; unsigned int bytes_per_pixel; /* 2:RGB16, 3:RGB, 4:RGBA */ - unsigned char pixel_data[36 * 19 * 4 + 1]; + unsigned char pixel_data[23 * 23 * 4 + 1]; } gimp_image = { - 36, 19, 4, - "\0x\306\1\2u\306C\5r\307\357\6p\310\370\4s\307\261\0w\306\37\0\0\0\0\0\0" + 23, 23, 4, + "\0\260\377\377\0\260\377\377\0\0\0\0\0\260\377\377\0\260\377\377\0\0\0\0" + "\0\260\377\377\0\260\377\377\0\0\0\0\0\260\377\377\0\260\377\377\0\0\0\0" + "\0\260\377\377\0\260\377\377\0\0\0\0\0\260\377\377\0\260\377\377\0\0\0\0" + "\0\260\377\377\0\260\377\377\0\0\0\0\0\260\377\377\0\260\377\377\0\253\377" + "\377\0\253\377\377\0\0\0\0\0\253\377\377\0\253\377\377\0\0\0\0\0\253\377" + "\377\0\253\377\377\0\0\0\0\0\253\377\377\0\253\377\377\0\0\0\0\0\253\377" + "\377\0\253\377\377\0\0\0\0\0\253\377\377\0\253\377\377\0\0\0\0\0\253\377" + "\377\0\253\377\377\0\0\0\0\0\253\377\377\0\253\377\377\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0w\306" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0~\312\2\0\211\321\0\0" - "\0\0\0\0w\306\0\0y\305\1\2u\307D\7p\310\353\16g\311\377\14h\310\377\5p\307" - "v\0\177\305\5\0\0\0\0\0\0\0\0\0w\306\0\0\0\0\0\0\0\0\0\0w\306\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\7f\273\0\0y\310\10\0~\312\12\0\206\316\7\0}\311\17" - "\4h\276\33\3l\300W\1r\303\37\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0y\306$\11m" - "\310\345\16f\311\377\6p\307\213\0}\305\12\0\0\0\0\0w\306\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0w\306\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\206\315\4\2p\303d\4" - "j\300\223\5e\275|\4i\276\262\5e\274\370\12R\261\377\4i\276\320\0\0\0\0\0" - "\0\0\0\0w\306\0\0\0\0\0\0|\305\40\10n\310\301\15g\311\377\6p\307\203\0}\305" - "\10\0\0\0\0\0\0\0\0\0\203\310\1\3r\305!\2s\305O\0{\307\27\0\0\0\0\0\0\0\0" - "\0w\306\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0w\306\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\234\331\5\5g\276|\7]\271\377\11W\266\376\10\\\267\375" - "\11Y\265\377\12Q\261\377\6b\272\266\0\224\326\15\0\0\0\0\0\0\0\0\0\0\0\0" - "\0~\305\22\10n\310\243\14h\310\377\6o\307\216\0|\305\12\0\0\0\0\0\0\0\0\0" - "\0\0\0\3r\305Z\6l\304\377\6l\303\254\1u\305\"\0\0\0\0\0\0\0\0\0z\307\1\2" - "s\305#\3p\304i\0{\310)\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0w\306\0\0" - "\0\0\0\0{\307\32\3i\276g\0t\305\225\4g\275\352\10X\265\376\4g\275\222\0\214" - "\322\34\0\0\0\0\0w\306\0\0\0\0\0\0\0\0\0\0\224\300\3\7o\310\205\14i\310\377" - "\6p\307\237\0|\305\16\0\0\0\0\0\0\0\0\0~\307%\4p\305\252\14a\301\377\14_" - "\300\377\4n\304\211\0~\310\12\0\0\0\0\0\0\0\0\2s\304E\6i\301\377\10d\277" - "\255\0\207\314\25\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0w\306\0\2p\303\0\0\0\0" - "\0\0\220\324\35\7`\271\265\7^\270\371\1p\302\220\0\234\333\27\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\5r\307f\14i\310\377\7o\307\275\0|\305" - "\11\0\221\310\10\1v\306~\11i\304\326\15`\302\375\16\\\301\377\11e\302\377" - "\3p\304~\0\217\315\2\1u\305L\0z\306I\0\213\315\14\6h\300\327\11a\275\342" - "\0z\310\217\7d\276\267\4m\302\252\3q\303\6\0w\306\0\12Z\270\0\0\0\0\0\0\202" - "\315$\6d\274\276\7`\272\377\5c\273\377\6`\271\333\10[\266\320\5a\272\265" - "\0}\312O\0\0\0\0\0\0\0\0\0w\306\0\0\0\0\0\0y\306C\13i\307\347\10m\307\351" - "\0y\306v\6n\305\323\15b\304\366\16`\303\377\12f\303\377\4n\305\314\2r\305" - "T\1s\305\16\0\0\0\0\2t\305\232\10e\300\365\6h\301\326\11b\276\364\14X\272" - "\375\11]\274\370\7d\276\377\2q\303\246\1u\305\5\5g\276\0\0\0\0\0\0~\312!" - "\6d\274\303\13S\263\377\6a\272\377\3n\301\300\2o\302\217\2n\301\250\5`\271" - "\376\11R\261\352\1s\303i\0\0\0\0\0w\306\0\0\0\0\0\0\177\305\32\11l\310\274" - "\13i\307\377\14f\306\370\17b\305\377\11i\305\377\3q\306\277\1t\305E\1s\306" - "\10\0\203\310\2\0\0\0\0\0\0\0\0\1u\305\16\2s\305\221\4m\302\332\7f\277\377" - "\6j\301\346\3q\303\357\2r\304\234\0\204\314\13\0\0\0\0\0\0\0\0\0w\306\25" - "\5f\276\304\13R\263\377\6e\275\312\0w\3063\0\227\323\2\0\177\312\4\0{\310" - "\11\4i\275?\7Z\265\377\7Z\265\335\0\0\0\0\0\0\0\0\0\177\306\2\0w\306Z\10" - "m\307\351\17d\307\377\11i\306\377\2t\306\257\0w\3061\0\0\0\0\0\0\0\0\0w\306" - "\0\0w\306\0\0\0\0\0\0w\306\0\0\0\0\0\0\0\0\0\4n\302&\6i\300\375\6g\300\370" - "\11`\275\366\13[\272\377\6g\277\360\0t\305\222\0y\307\12\5g\275&\7`\272\377" - "\7c\273\341\2p\302\317\6c\273\373\4k\300\322\0v\3058\0\0\0\0\2o\302\32\6" - "\\\267\336\10W\264\376\0\0\0\0\0x\306\13\3s\307~\11l\310\377\15h\310\377" - "\4r\306\312\0y\306:\0\0\0\0\0\0\0\0\0w\306\0\0\0\0\0\0\0\0\0\0\0\0\0\0w\306" - "\0\0\0\0\0\0}\310\4\2s\305c\5j\301\372\13\\\274\377\5j\301\346\6g\277\352" - "\7d\276\367\5k\301\322\12Z\270\377\4k\300\334\0{\311\35\0w\307r\3n\301\237" - "\6c\274\370\3k\300\311\12U\264\364\7`\272\377\0y\3073\4h\276F\7Y\264\377" - "\6\\\266\316\0w\306\6\4s\307\200\12l\311\377\12k\311\357\2u\306\201\0\222" - "\304\5\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\2r\305\200\10d\300\377\7f\277\343\5j\301\372\4n\302\320\11_\274\352" - "\5i\300\247\0\0\0\0\1u\305\240\14R\264\377\1v\306\210\0\0\0\0\4i\277R\6c" - "\274\376\6e\275\221\1t\304\265\15F\253\377\4i\276\341\5_\271\365\12Q\261" - "\355\1v\304^\2v\307K\11n\311\377\12l\312\347\0w\306Z\0\0\0\0\0\0\0\0\0w\306" - "\0\0w\306\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0w\306\0\0\0\0\0\0x\306K\11c" - "\300\377\6j\302\321\0w\3065\6h\300\377\10c\276\377\6g\277\347\1r\3043\0\0" - "\0\0\0|\311>\12X\267\377\5k\300\272\0\0\0\0\0\212\322\22\5f\274\216\10Z\267" - "\357\7_\272\376\12S\262\374\12Q\261\364\10U\263\321\1v\306i\0\0\0\0\4t\310" - "\311\15j\313\373\1v\305|\0\0\0\0\0\0\0\0\0w\306\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\4o\303\276\12a\277\377\0\177\311" - ">\3q\303>\10c\276\377\11`\275\354\3o\303\\\0\0\0\0\0\0\0\0\0y\307o\14S\265" - "\377\2p\303\242\0\0\0\0\0\0\0\0\0\307\364\4\0|\310F\3k\300w\3j\277~\0u\305" - "f\0\212\321&\0\0\0\0\0\0\0\0\6r\311\370\13l\313\350\0~\303-\0\0\0\0\0w\306" - "\0\0w\306\0\0\0\0\0\0\0\0\0\0\0\0\0\0w\306\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\5j\302\337\11c\300\377\4l\302\211\7f\300\330\11a\275\377\10c\276\264" - "\0\271\340\10\0\0\0\0\0}\310A\7a\274\337\11]\272\375\0}\311?\0\0\0\0\0w\306" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0w\306\0\0w\306\0\5s\310" - "\333\16j\314\371\1v\306\206\0\361\245\2\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\240\316\7\0\177\3103\0\214\314\27\2q\304\215\7f" - "\301\377\5k\302\377\5l\303\300\5j\301\360\5i\301\305\0x\306c\6g\277\240\7" - "c\275\355\6d\275\377\2p\303m\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\2u\307a\12m\312\377\15i\312" - "\365\7o\310\311\2s\307\236\1v\306\202\0y\306r\0z\306n\0w\306|\2t\305\216" - "\5o\305\266\7j\304\322\12d\301\337\10e\301\341\2s\305|\5l\303>\5l\3024\0" - "z\310\35\1s\304:\3q\304\223\4m\302\370\4l\301\343\4l\301\225\3o\3027\0\214" - "\320\5\0\0\0\0\0w\306\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0w\306\10\3t\307t\7o\310\377\15i\311\377\17e\310\377" - "\16d\307\372\16c\306\366\16b\305\365\16a\304\367\16`\303\372\16^\302\377" - "\16\\\301\377\16Z\277\377\14_\277\377\3p\304\267\0~\310\4\0\0\0\0\0\0\0\0" - "\0\0\0\0\2t\305\21\4l\302\40\4o\302\26\0|\310\12\0\0\0\0\0\0\0\0\0w\306\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\241\377\377\0\241\377\377\0\0\0\0\0\241\377\377" + "\0\241\377\377\0\0\0\0\0\241\377\377\0\241\377\377\0\0\0\0\0\241\377\377" + "\0\241\377\377\0\0\0\0\0\241\377\377\0\241\377\377\0\0\0\0\0\241\377\377" + "\0\241\377\377\0\0\0\0\0\241\377\377\0\241\377\377\0\0\0\0\0\241\377\377" + "\0\241\377\377\0\234\377\377\0\234\377\377\0\0\0\0\0\234\377\377\0\234\377" + "\377\0\0\0\0\0\234\377\377\0\234\377\377\0\0\0\0\0\234\377\377\0\234\377" + "\377\0\0\0\0\0\234\377\377\0\234\377\377\0\0\0\0\0\234\377\377\0\234\377" + "\377\0\0\0\0\0\234\377\377\0\234\377\377\0\0\0\0\0\234\377\377\0\234\377" + "\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0v\306\2\1u\306\33\1v\306o\3s\307\261\5p\307\331\6n\306" - "\362\6n\305\375\6m\305\374\6m\305\360\6n\304\343\5o\305\311\2t\305\244\1" - "v\306u\1v\306\31\0v\306\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0w\306\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0", + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\222\377\377\0\222\377\377" + "\0\0\0\0\0\222\377\377\0\222\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\215\377\377\0\215\377\377\0\0\0\0" + "\0\215\377\377\0\215\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\202" + "\377\377\0\202\377\377\0\0\0\0\0\202\377\377\0\202\377\377\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0}\377\377\0}" + "\377\377\0\0\0\0\0}\377\377\0}\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0s\377\377\0s\377\377\0\0\0\0\0s\377\377\0s\377\377\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0n\377\377\0n" + "\377\377\0\0\0\0\0n\377\377\0n\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0d\377\377\0d\377\377\0\0\0\0\0d\377\377\0d\377\377\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0^\377\377\0^" + "\377\377\0\0\0\0\0^\377\377\0^\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0T\377\377\0T\377\377\0\0\0\0\0T\377\377\0T\377\377\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0O\377\377\0O" + "\377\377\0\0\0\0\0O\377\377\0O\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0E\377\377\0E\377\377\0\0\0\0\0E\377\377\0E\377\377\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0E\377\377\0E\377\377\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0@\377\377" + "\0@\377\377\0\0\0\0\0@\377\377\0@\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0@\377\377\0@\377\377", };