]> git.mdlowis.com Git - proto/labwc.git/commitdiff
icon-loader: add a new loader for XPM icons, used by many legacy X11 apps
authorJohn Lindgren <john@jlindgren.net>
Mon, 30 Sep 2024 07:41:25 +0000 (03:41 -0400)
committerJohn Lindgren <john@jlindgren.net>
Tue, 1 Oct 2024 01:17:19 +0000 (21:17 -0400)
Adapted from gdk-pixbuf, see the original at:

  https://gitlab.gnome.org/GNOME/gdk-pixbuf/-/blob/master/gdk-pixbuf/io-xpm.c

rgb.txt is from X.org, see:

  https://gitlab.freedesktop.org/xorg/app/rgb/-/blob/master/rgb.txt

Differences from the gdk-pixbuf version:

- GdkPixbuf replaced with struct lab_data_buffer
- Progressive and in-memory loading code removed
- Two functions that had separate BSD copyright rewritten
- Stores colors as ARGB32 earlier in the decoding process for efficiency
- Limited to 1024x1024 px and 1024 colors to prevent abuse
- Uses struct buf to build strings, in place of manual g_new/g_realloc
- Uses xzalloc/xznew_n for other memory allocations
- Uses g_strlcpy in place of banned strcpy/strncpy/strncat
- Uses standard C types (int, bool, etc.) in place of the GLib ones
- Follows labwc coding style (whitespace, braces, letter case, etc.)
- Et cetera ...

v2: add Perl fixes from @domo141

include/img/img-xpm.h [new file with mode: 0644]
scripts/checkpatch.pl
src/icon-loader.c
src/img/gen-color-table.pl [new file with mode: 0755]
src/img/img-xpm.c [new file with mode: 0644]
src/img/meson.build
src/img/rgb.txt [new file with mode: 0644]
src/img/xpm-color-table.h [new file with mode: 0644]

diff --git a/include/img/img-xpm.h b/include/img/img-xpm.h
new file mode 100644 (file)
index 0000000..919b810
--- /dev/null
@@ -0,0 +1,9 @@
+/* SPDX-License-Identifier: GPL-2.0-only */
+#ifndef LABWC_IMG_XPM_H
+#define LABWC_IMG_XPM_H
+
+struct lab_data_buffer;
+
+void img_xpm_load(const char *filename, struct lab_data_buffer **buffer);
+
+#endif /* LABWC_IMG_XPM_H */
index 72368147addab7dbea8b92915f224ce07cbf0096..b24992341f3f6310080e6b2281330753d46a179f 100755 (executable)
@@ -5657,7 +5657,7 @@ sub process {
 #labwc-custom check to ignore some pango/libxml2/etc CamelCase variants
                            $var !~ /^(?:_?Pango\w+)/ &&
                            $var !~ /^(?:xml\w+)/ &&
-                           $var !~ /^(?:GString|GError)/ &&
+                           $var !~ /^(?:GString|GError|GHashTable)/ &&
                            $var !~ /^(?:RsvgRectangle|RsvgHandle)/ &&
                            $var !~ /^(?:XKB_KEY_XF86Switch_VT_1)/ &&
 
index 2c932116c4b188da0dad396848d487c5c6437ee0..83d91c5045603be55edc2e6fd72255f358769628 100644 (file)
@@ -10,6 +10,7 @@
 #include "config.h"
 #include "icon-loader.h"
 #include "img/img-png.h"
+#include "img/img-xpm.h"
 
 #if HAVE_RSVG
 #include "img/img-svg.h"
@@ -211,7 +212,7 @@ icon_loader_lookup(struct server *server, const char *app_id, int size, int scal
 #endif
                break;
        case SFDO_ICON_FILE_FORMAT_XPM:
-               /* XPM is not supported */
+               img_xpm_load(ctx.path, &icon_buffer);
                break;
        }
 
diff --git a/src/img/gen-color-table.pl b/src/img/gen-color-table.pl
new file mode 100755 (executable)
index 0000000..e6ffa49
--- /dev/null
@@ -0,0 +1,80 @@
+#!/usr/bin/perl -w
+
+# Generates xpm-color-table.h from X11's rgb.txt
+# Adapted from gdk-pixbuf (LGPL-2.0-or-later)
+
+if (@ARGV != 1) {
+    die "Usage: gen-color-table.pl rgb.txt > xpm-color-table.h\n";
+}
+
+open IN, '<', $ARGV[0] or die "Cannot open $ARGV[0]: $!\n";
+
+@colors = ();
+while (<IN>) {
+    next if /^!/;
+    if (!/^\s*([0-9]+)\s+([0-9]+)\s+([0-9]+)\s+(.*\S)\s*$/) {
+       die "Cannot parse line $_";
+    }
+
+    push @colors, [$1, $2, $3, $4];
+}
+
+close IN or die "close IN failed: $!\n";
+
+@colors = sort { lc($a->[3]) cmp lc($b->[3]) } @colors;
+
+$offset = 0;
+
+$date = gmtime;
+
+print <<EOT;
+/* SPDX-License-Identifier: LGPL-2.0-or-later */
+/* xpm-color-table.h: Generated by gen-color-table.pl from rgb.txt
+ *
+ *  Date: $date
+ *
+ * Do not edit.
+ */
+static const char color_names[] =
+EOT
+
+for $color (@colors) {
+    $name = $color->[3];
+
+    if ($offset != 0) {
+       print qq(\n);
+    }
+    print qq(  "$name\\0");
+
+    $color->[4] = $offset;
+    $offset += length($name) + 1;
+}
+
+print ";\n\n";
+
+print <<EOT;
+struct xcolor_entry {
+       uint16_t name_offset;
+       uint8_t red;
+       uint8_t green;
+       uint8_t blue;
+};
+
+static const struct xcolor_entry xcolors[] = {
+EOT
+
+$i = 0;
+for $color (@colors) {
+    $red = $color->[0];
+    $green = $color->[1];
+    $blue = $color->[2];
+    $offset = $color->[4];
+
+    if ($i != 0) {
+       print ",\n";
+    }
+    print "    { $offset, $red, $green, $blue }";
+    $i++;
+}
+
+print "\n};\n";
diff --git a/src/img/img-xpm.c b/src/img/img-xpm.c
new file mode 100644 (file)
index 0000000..45ca0f4
--- /dev/null
@@ -0,0 +1,423 @@
+// SPDX-License-Identifier: LGPL-2.0-or-later
+/*
+ * XPM image loader adapted from gdk-pixbuf
+ *
+ * Copyright (C) 1999 Mark Crichton
+ * Copyright (C) 1999 The Free Software Foundation
+ *
+ * Authors: Mark Crichton <crichton@gimp.org>
+ *          Federico Mena-Quintero <federico@gimp.org>
+ *
+ * Adapted for labwc by John Lindgren, 2024
+ */
+
+#include <glib.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <wlr/util/log.h>
+
+#include "buffer.h"
+#include "common/buf.h"
+#include "common/macros.h"
+#include "common/mem.h"
+#include "img/img-xpm.h"
+
+#include "xpm-color-table.h"
+
+enum buf_op { op_header, op_cmap, op_body };
+
+struct xpm_color {
+       char *color_string;
+       uint32_t argb;
+};
+
+struct file_handle {
+       FILE *infile;
+       struct buf buf;
+};
+
+static inline uint32_t
+make_argb(uint8_t a, uint8_t r, uint8_t g, uint8_t b)
+{
+       return ((uint32_t)a << 24) | ((uint32_t)r << 16) | ((uint32_t)g << 8) | b;
+}
+
+static int
+compare_xcolor_entries(const void *a, const void *b)
+{
+       return g_ascii_strcasecmp((const char *)a,
+               color_names + ((const struct xcolor_entry *)b)->name_offset);
+}
+
+static bool
+lookup_named_color(const char *name, uint32_t *argb)
+{
+       struct xcolor_entry *found = bsearch(name, xcolors, ARRAY_SIZE(xcolors),
+               sizeof(struct xcolor_entry), compare_xcolor_entries);
+       if (!found) {
+               return false;
+       }
+
+       *argb = make_argb(0xFF, found->red, found->green, found->blue);
+       return true;
+}
+
+static bool
+parse_color(const char *spec, uint32_t *argb)
+{
+       if (spec[0] != '#') {
+               return lookup_named_color(spec, argb);
+       }
+
+       int red, green, blue;
+       switch (strlen(spec + 1)) {
+       case 3:
+               if (sscanf(spec + 1, "%1x%1x%1x", &red, &green, &blue) != 3) {
+                       return false;
+               }
+               *argb = make_argb(255, (red * 255) / 15, (green * 255) / 15,
+                       (blue * 255) / 15);
+               return true;
+       case 6:
+               if (sscanf(spec + 1, "%2x%2x%2x", &red, &green, &blue) != 3) {
+                       return false;
+               }
+               *argb = make_argb(255, red, green, blue);
+               return true;
+       case 9:
+               if (sscanf(spec + 1, "%3x%3x%3x", &red, &green, &blue) != 3) {
+                       return false;
+               }
+               *argb = make_argb(255, (red * 255) / 4095, (green * 255) / 4095,
+                       (blue * 255) / 4095);
+               return true;
+       case 12:
+               if (sscanf(spec + 1, "%4x%4x%4x", &red, &green, &blue) != 3) {
+                       return false;
+               }
+               *argb = make_argb(255, (red * 255) / 65535,
+                       (green * 255) / 65535, (blue * 255) / 65535);
+               return true;
+       default:
+               return false;
+       }
+}
+
+static bool
+xpm_seek_string(FILE *infile, const char *str)
+{
+       char instr[1024];
+
+       while (!feof(infile)) {
+               if (fscanf(infile, "%1023s", instr) < 0) {
+                       return false;
+               }
+               if (strcmp(instr, str) == 0) {
+                       return true;
+               }
+       }
+
+       return false;
+}
+
+static bool
+xpm_seek_char(FILE *infile, char c)
+{
+       int b, oldb;
+
+       while ((b = getc(infile)) != EOF) {
+               if (c != b && b == '/') {
+                       b = getc(infile);
+                       if (b == EOF) {
+                               return false;
+                       } else if (b == '*') { /* we have a comment */
+                               b = -1;
+                               do {
+                                       oldb = b;
+                                       b = getc(infile);
+                                       if (b == EOF) {
+                                               return false;
+                                       }
+                               } while (!(oldb == '*' && b == '/'));
+                       }
+               } else if (c == b) {
+                       return true;
+               }
+       }
+
+       return false;
+}
+
+static bool
+xpm_read_string(FILE *infile, struct buf *buf)
+{
+       buf_clear(buf);
+       int c;
+
+       do {
+               c = getc(infile);
+               if (c == EOF) {
+                       return false;
+               }
+       } while (c != '"');
+
+       while ((c = getc(infile)) != EOF) {
+               if (c == '"') {
+                       return true;
+               }
+               buf_add_char(buf, c);
+       }
+
+       return false;
+}
+
+static uint32_t
+xpm_extract_color(const char *buffer)
+{
+       const char *p = buffer;
+       int new_key = 0;
+       int key = 0;
+       int current_key = 1;
+       char word[129], color[129], current_color[129];
+       char *r;
+
+       word[0] = '\0';
+       color[0] = '\0';
+       current_color[0] = '\0';
+       while (true) {
+               /* skip whitespace */
+               for (; *p != '\0' && g_ascii_isspace(*p); p++) {
+                       /* nothing */
+               }
+               /* copy word */
+               for (r = word; *p != '\0' && !g_ascii_isspace(*p)
+                               && r - word < (int)sizeof(word) - 1;
+                               p++, r++) {
+                       *r = *p;
+               }
+               *r = '\0';
+               if (*word == '\0') {
+                       if (color[0] == '\0') { /* incomplete colormap entry */
+                               return 0;
+                       } else { /* end of entry, still store the last color */
+                               new_key = 1;
+                       }
+               } else if (key > 0 && color[0] == '\0') {
+                       /* next word must be a color name part */
+                       new_key = 0;
+               } else {
+                       if (strcmp(word, "c") == 0) {
+                               new_key = 5;
+                       } else if (strcmp(word, "g") == 0) {
+                               new_key = 4;
+                       } else if (strcmp(word, "g4") == 0) {
+                               new_key = 3;
+                       } else if (strcmp(word, "m") == 0) {
+                               new_key = 2;
+                       } else if (strcmp(word, "s") == 0) {
+                               new_key = 1;
+                       } else {
+                               new_key = 0;
+                       }
+               }
+               if (new_key == 0) {     /* word is a color name part */
+                       if (key == 0) { /* key expected */
+                               return 0;
+                       }
+                       /* accumulate color name */
+                       int len = strlen(color);
+                       if (len && len < (int)sizeof(color) - 1) {
+                               color[len++] = ' ';
+                       }
+                       g_strlcpy(color + len, word, sizeof(color) - len);
+               } else { /* word is a key */
+                       if (key > current_key) {
+                               current_key = key;
+                               g_strlcpy(current_color, color, sizeof(current_color));
+                       }
+                       color[0] = '\0';
+                       key = new_key;
+                       if (*p == '\0') {
+                               break;
+                       }
+               }
+       }
+
+       uint32_t argb;
+       if (current_key > 1 && (g_ascii_strcasecmp(current_color, "None") != 0)
+                       && parse_color(current_color, &argb)) {
+               return argb;
+       } else {
+               return 0;
+       }
+}
+
+static const char *
+file_buffer(enum buf_op op, struct file_handle *h)
+{
+       switch (op) {
+       case op_header:
+               if (!xpm_seek_string(h->infile, "XPM")) {
+                       break;
+               }
+               if (!xpm_seek_char(h->infile, '{')) {
+                       break;
+               }
+               /* Fall through to the next xpm_seek_char. */
+
+       case op_cmap:
+               xpm_seek_char(h->infile, '"');
+               if (fseek(h->infile, -1, SEEK_CUR) != 0) {
+                       return NULL;
+               }
+               /* Fall through to the xpm_read_string. */
+
+       case op_body:
+               if (!xpm_read_string(h->infile, &h->buf)) {
+                       return NULL;
+               }
+               return h->buf.data;
+
+       default:
+               g_assert_not_reached();
+       }
+
+       return NULL;
+}
+
+/* This function does all the work. */
+static struct lab_data_buffer *
+pixbuf_create_from_xpm(struct file_handle *handle)
+{
+       const char *buffer = file_buffer(op_header, handle);
+       if (!buffer) {
+               wlr_log(WLR_DEBUG, "No XPM header found");
+               return NULL;
+       }
+
+       int w, h, n_col, cpp, x_hot, y_hot;
+       int items = sscanf(buffer, "%d %d %d %d %d %d", &w, &h, &n_col, &cpp,
+               &x_hot, &y_hot);
+
+       if (items != 4 && items != 6) {
+               wlr_log(WLR_DEBUG, "Invalid XPM header");
+               return NULL;
+       }
+
+       if (w <= 0) {
+               wlr_log(WLR_DEBUG, "XPM file has image width <= 0");
+               return NULL;
+       }
+       if (h <= 0) {
+               wlr_log(WLR_DEBUG, "XPM file has image height <= 0");
+               return NULL;
+       }
+       /* Limits (width, height, colors) modified for labwc */
+       if (h > 1024 || w > 1024) {
+               wlr_log(WLR_DEBUG, "XPM file is larger than 1024x1024");
+               return NULL;
+       }
+       if (cpp <= 0 || cpp >= 32) {
+               wlr_log(WLR_DEBUG, "XPM has invalid number of chars per pixel");
+               return NULL;
+       }
+       if (n_col <= 0 || n_col > 1024) {
+               wlr_log(WLR_DEBUG, "XPM file has invalid number of colors");
+               return NULL;
+       }
+
+       /* The hash is used for fast lookups of color from chars */
+       GHashTable *color_hash = g_hash_table_new(g_str_hash, g_str_equal);
+
+       char *name_buf = xzalloc(n_col * (cpp + 1));
+       struct xpm_color *colors = znew_n(struct xpm_color, n_col);
+       uint32_t *data = znew_n(uint32_t, w * h);
+       struct xpm_color *fallbackcolor = NULL;
+       char pixel_str[32]; /* cpp < 32 */
+
+       for (int cnt = 0; cnt < n_col; cnt++) {
+               buffer = file_buffer(op_cmap, handle);
+               if (!buffer) {
+                       wlr_log(WLR_DEBUG, "Cannot read XPM colormap");
+                       goto out;
+               }
+
+               struct xpm_color *color = &colors[cnt];
+               color->color_string = &name_buf[cnt * (cpp + 1)];
+               g_strlcpy(color->color_string, buffer, cpp + 1);
+               buffer += strlen(color->color_string);
+
+               color->argb = xpm_extract_color(buffer);
+
+               g_hash_table_insert(color_hash, color->color_string, color);
+
+               if (cnt == 0) {
+                       fallbackcolor = color;
+               }
+       }
+
+       for (int ycnt = 0; ycnt < h; ycnt++) {
+               uint32_t *pixtmp = data + w * ycnt;
+               int wbytes = w * cpp;
+
+               buffer = file_buffer(op_body, handle);
+               if (!buffer || (strlen(buffer) < (size_t)wbytes)) {
+                       /* Advertised width doesn't match pixels */
+                       wlr_log(WLR_DEBUG, "Dimensions do not match data");
+                       goto out;
+               }
+
+               for (int n = 0, xcnt = 0; n < wbytes; n += cpp, xcnt++) {
+                       g_strlcpy(pixel_str, &buffer[n], cpp + 1);
+
+                       struct xpm_color *color =
+                               g_hash_table_lookup(color_hash, pixel_str);
+
+                       /* Bad XPM...punt */
+                       if (!color) {
+                               color = fallbackcolor;
+                       }
+
+                       *pixtmp++ = color->argb;
+               }
+       }
+
+       g_hash_table_destroy(color_hash);
+       free(colors);
+       free(name_buf);
+
+       return buffer_create_wrap(data, w, h, 4 * w, true);
+
+out:
+       g_hash_table_destroy(color_hash);
+       free(colors);
+       free(name_buf);
+       free(data);
+
+       return NULL;
+}
+
+void
+img_xpm_load(const char *filename, struct lab_data_buffer **buffer)
+{
+       if (*buffer) {
+               wlr_buffer_drop(&(*buffer)->base);
+               *buffer = NULL;
+       }
+
+       struct file_handle h = {0};
+       h.infile = fopen(filename, "rb");
+       if (!h.infile) {
+               wlr_log(WLR_ERROR, "error opening '%s'", filename);
+               return;
+       }
+
+       *buffer = pixbuf_create_from_xpm(&h);
+       if (!(*buffer)) {
+               wlr_log(WLR_ERROR, "error loading '%s'", filename);
+       }
+
+       fclose(h.infile);
+       buf_reset(&h.buf);
+}
index 854898d0467dc3aa51b34a8afdb82ff9b4b77b1f..4e31ac048aa24132d5be2d90992b2ffe95bcdfb4 100644 (file)
@@ -1,6 +1,7 @@
 labwc_sources += files(
   'img-png.c',
   'img-xbm.c',
+  'img-xpm.c'
 )
 
 if have_rsvg
diff --git a/src/img/rgb.txt b/src/img/rgb.txt
new file mode 100644 (file)
index 0000000..7096643
--- /dev/null
@@ -0,0 +1,782 @@
+255 250 250            snow
+248 248 255            ghost white
+248 248 255            GhostWhite
+245 245 245            white smoke
+245 245 245            WhiteSmoke
+220 220 220            gainsboro
+255 250 240            floral white
+255 250 240            FloralWhite
+253 245 230            old lace
+253 245 230            OldLace
+250 240 230            linen
+250 235 215            antique white
+250 235 215            AntiqueWhite
+255 239 213            papaya whip
+255 239 213            PapayaWhip
+255 235 205            blanched almond
+255 235 205            BlanchedAlmond
+255 228 196            bisque
+255 218 185            peach puff
+255 218 185            PeachPuff
+255 222 173            navajo white
+255 222 173            NavajoWhite
+255 228 181            moccasin
+255 248 220            cornsilk
+255 255 240            ivory
+255 250 205            lemon chiffon
+255 250 205            LemonChiffon
+255 245 238            seashell
+240 255 240            honeydew
+245 255 250            mint cream
+245 255 250            MintCream
+240 255 255            azure
+240 248 255            alice blue
+240 248 255            AliceBlue
+230 230 250            lavender
+255 240 245            lavender blush
+255 240 245            LavenderBlush
+255 228 225            misty rose
+255 228 225            MistyRose
+255 255 255            white
+  0   0   0            black
+ 47  79  79            dark slate gray
+ 47  79  79            DarkSlateGray
+ 47  79  79            dark slate grey
+ 47  79  79            DarkSlateGrey
+105 105 105            dim gray
+105 105 105            DimGray
+105 105 105            dim grey
+105 105 105            DimGrey
+112 128 144            slate gray
+112 128 144            SlateGray
+112 128 144            slate grey
+112 128 144            SlateGrey
+119 136 153            light slate gray
+119 136 153            LightSlateGray
+119 136 153            light slate grey
+119 136 153            LightSlateGrey
+190 190 190            gray
+190 190 190            grey
+190 190 190            x11 gray
+190 190 190            X11Gray
+190 190 190            x11 grey
+190 190 190            X11Grey
+128 128 128            web gray
+128 128 128            WebGray
+128 128 128            web grey
+128 128 128            WebGrey
+211 211 211            light grey
+211 211 211            LightGrey
+211 211 211            light gray
+211 211 211            LightGray
+ 25  25 112            midnight blue
+ 25  25 112            MidnightBlue
+  0   0 128            navy
+  0   0 128            navy blue
+  0   0 128            NavyBlue
+100 149 237            cornflower blue
+100 149 237            CornflowerBlue
+ 72  61 139            dark slate blue
+ 72  61 139            DarkSlateBlue
+106  90 205            slate blue
+106  90 205            SlateBlue
+123 104 238            medium slate blue
+123 104 238            MediumSlateBlue
+132 112 255            light slate blue
+132 112 255            LightSlateBlue
+  0   0 205            medium blue
+  0   0 205            MediumBlue
+ 65 105 225            royal blue
+ 65 105 225            RoyalBlue
+  0   0 255            blue
+ 30 144 255            dodger blue
+ 30 144 255            DodgerBlue
+  0 191 255            deep sky blue
+  0 191 255            DeepSkyBlue
+135 206 235            sky blue
+135 206 235            SkyBlue
+135 206 250            light sky blue
+135 206 250            LightSkyBlue
+ 70 130 180            steel blue
+ 70 130 180            SteelBlue
+176 196 222            light steel blue
+176 196 222            LightSteelBlue
+173 216 230            light blue
+173 216 230            LightBlue
+176 224 230            powder blue
+176 224 230            PowderBlue
+175 238 238            pale turquoise
+175 238 238            PaleTurquoise
+  0 206 209            dark turquoise
+  0 206 209            DarkTurquoise
+ 72 209 204            medium turquoise
+ 72 209 204            MediumTurquoise
+ 64 224 208            turquoise
+  0 255 255            cyan
+  0 255 255            aqua
+224 255 255            light cyan
+224 255 255            LightCyan
+ 95 158 160            cadet blue
+ 95 158 160            CadetBlue
+102 205 170            medium aquamarine
+102 205 170            MediumAquamarine
+127 255 212            aquamarine
+  0 100   0            dark green
+  0 100   0            DarkGreen
+ 85 107  47            dark olive green
+ 85 107  47            DarkOliveGreen
+143 188 143            dark sea green
+143 188 143            DarkSeaGreen
+ 46 139  87            sea green
+ 46 139  87            SeaGreen
+ 60 179 113            medium sea green
+ 60 179 113            MediumSeaGreen
+ 32 178 170            light sea green
+ 32 178 170            LightSeaGreen
+152 251 152            pale green
+152 251 152            PaleGreen
+  0 255 127            spring green
+  0 255 127            SpringGreen
+124 252   0            lawn green
+124 252   0            LawnGreen
+  0 255   0            green
+  0 255   0            lime
+  0 255   0            x11 green
+  0 255   0            X11Green
+  0 128   0            web green
+  0 128   0            WebGreen
+127 255   0            chartreuse
+  0 250 154            medium spring green
+  0 250 154            MediumSpringGreen
+173 255  47            green yellow
+173 255  47            GreenYellow
+ 50 205  50            lime green
+ 50 205  50            LimeGreen
+154 205  50            yellow green
+154 205  50            YellowGreen
+ 34 139  34            forest green
+ 34 139  34            ForestGreen
+107 142  35            olive drab
+107 142  35            OliveDrab
+189 183 107            dark khaki
+189 183 107            DarkKhaki
+240 230 140            khaki
+238 232 170            pale goldenrod
+238 232 170            PaleGoldenrod
+250 250 210            light goldenrod yellow
+250 250 210            LightGoldenrodYellow
+255 255 224            light yellow
+255 255 224            LightYellow
+255 255   0            yellow
+255 215   0            gold
+238 221 130            light goldenrod
+238 221 130            LightGoldenrod
+218 165  32            goldenrod
+184 134  11            dark goldenrod
+184 134  11            DarkGoldenrod
+188 143 143            rosy brown
+188 143 143            RosyBrown
+205  92  92            indian red
+205  92  92            IndianRed
+139  69  19            saddle brown
+139  69  19            SaddleBrown
+160  82  45            sienna
+205 133  63            peru
+222 184 135            burlywood
+245 245 220            beige
+245 222 179            wheat
+244 164  96            sandy brown
+244 164  96            SandyBrown
+210 180 140            tan
+210 105  30            chocolate
+178  34  34            firebrick
+165  42  42            brown
+233 150 122            dark salmon
+233 150 122            DarkSalmon
+250 128 114            salmon
+255 160 122            light salmon
+255 160 122            LightSalmon
+255 165   0            orange
+255 140   0            dark orange
+255 140   0            DarkOrange
+255 127  80            coral
+240 128 128            light coral
+240 128 128            LightCoral
+255  99  71            tomato
+255  69   0            orange red
+255  69   0            OrangeRed
+255   0   0            red
+255 105 180            hot pink
+255 105 180            HotPink
+255  20 147            deep pink
+255  20 147            DeepPink
+255 192 203            pink
+255 182 193            light pink
+255 182 193            LightPink
+219 112 147            pale violet red
+219 112 147            PaleVioletRed
+176  48  96            maroon
+176  48  96            x11 maroon
+176  48  96            X11Maroon
+128   0   0            web maroon
+128   0   0            WebMaroon
+199  21 133            medium violet red
+199  21 133            MediumVioletRed
+208  32 144            violet red
+208  32 144            VioletRed
+255   0 255            magenta
+255   0 255            fuchsia
+238 130 238            violet
+221 160 221            plum
+218 112 214            orchid
+186  85 211            medium orchid
+186  85 211            MediumOrchid
+153  50 204            dark orchid
+153  50 204            DarkOrchid
+148   0 211            dark violet
+148   0 211            DarkViolet
+138  43 226            blue violet
+138  43 226            BlueViolet
+160  32 240            purple
+160  32 240            x11 purple
+160  32 240            X11Purple
+128   0 128            web purple
+128   0 128            WebPurple
+147 112 219            medium purple
+147 112 219            MediumPurple
+216 191 216            thistle
+255 250 250            snow1
+238 233 233            snow2
+205 201 201            snow3
+139 137 137            snow4
+255 245 238            seashell1
+238 229 222            seashell2
+205 197 191            seashell3
+139 134 130            seashell4
+255 239 219            AntiqueWhite1
+238 223 204            AntiqueWhite2
+205 192 176            AntiqueWhite3
+139 131 120            AntiqueWhite4
+255 228 196            bisque1
+238 213 183            bisque2
+205 183 158            bisque3
+139 125 107            bisque4
+255 218 185            PeachPuff1
+238 203 173            PeachPuff2
+205 175 149            PeachPuff3
+139 119 101            PeachPuff4
+255 222 173            NavajoWhite1
+238 207 161            NavajoWhite2
+205 179 139            NavajoWhite3
+139 121  94            NavajoWhite4
+255 250 205            LemonChiffon1
+238 233 191            LemonChiffon2
+205 201 165            LemonChiffon3
+139 137 112            LemonChiffon4
+255 248 220            cornsilk1
+238 232 205            cornsilk2
+205 200 177            cornsilk3
+139 136 120            cornsilk4
+255 255 240            ivory1
+238 238 224            ivory2
+205 205 193            ivory3
+139 139 131            ivory4
+240 255 240            honeydew1
+224 238 224            honeydew2
+193 205 193            honeydew3
+131 139 131            honeydew4
+255 240 245            LavenderBlush1
+238 224 229            LavenderBlush2
+205 193 197            LavenderBlush3
+139 131 134            LavenderBlush4
+255 228 225            MistyRose1
+238 213 210            MistyRose2
+205 183 181            MistyRose3
+139 125 123            MistyRose4
+240 255 255            azure1
+224 238 238            azure2
+193 205 205            azure3
+131 139 139            azure4
+131 111 255            SlateBlue1
+122 103 238            SlateBlue2
+105  89 205            SlateBlue3
+ 71  60 139            SlateBlue4
+ 72 118 255            RoyalBlue1
+ 67 110 238            RoyalBlue2
+ 58  95 205            RoyalBlue3
+ 39  64 139            RoyalBlue4
+  0   0 255            blue1
+  0   0 238            blue2
+  0   0 205            blue3
+  0   0 139            blue4
+ 30 144 255            DodgerBlue1
+ 28 134 238            DodgerBlue2
+ 24 116 205            DodgerBlue3
+ 16  78 139            DodgerBlue4
+ 99 184 255            SteelBlue1
+ 92 172 238            SteelBlue2
+ 79 148 205            SteelBlue3
+ 54 100 139            SteelBlue4
+  0 191 255            DeepSkyBlue1
+  0 178 238            DeepSkyBlue2
+  0 154 205            DeepSkyBlue3
+  0 104 139            DeepSkyBlue4
+135 206 255            SkyBlue1
+126 192 238            SkyBlue2
+108 166 205            SkyBlue3
+ 74 112 139            SkyBlue4
+176 226 255            LightSkyBlue1
+164 211 238            LightSkyBlue2
+141 182 205            LightSkyBlue3
+ 96 123 139            LightSkyBlue4
+198 226 255            SlateGray1
+185 211 238            SlateGray2
+159 182 205            SlateGray3
+108 123 139            SlateGray4
+202 225 255            LightSteelBlue1
+188 210 238            LightSteelBlue2
+162 181 205            LightSteelBlue3
+110 123 139            LightSteelBlue4
+191 239 255            LightBlue1
+178 223 238            LightBlue2
+154 192 205            LightBlue3
+104 131 139            LightBlue4
+224 255 255            LightCyan1
+209 238 238            LightCyan2
+180 205 205            LightCyan3
+122 139 139            LightCyan4
+187 255 255            PaleTurquoise1
+174 238 238            PaleTurquoise2
+150 205 205            PaleTurquoise3
+102 139 139            PaleTurquoise4
+152 245 255            CadetBlue1
+142 229 238            CadetBlue2
+122 197 205            CadetBlue3
+ 83 134 139            CadetBlue4
+  0 245 255            turquoise1
+  0 229 238            turquoise2
+  0 197 205            turquoise3
+  0 134 139            turquoise4
+  0 255 255            cyan1
+  0 238 238            cyan2
+  0 205 205            cyan3
+  0 139 139            cyan4
+151 255 255            DarkSlateGray1
+141 238 238            DarkSlateGray2
+121 205 205            DarkSlateGray3
+ 82 139 139            DarkSlateGray4
+127 255 212            aquamarine1
+118 238 198            aquamarine2
+102 205 170            aquamarine3
+ 69 139 116            aquamarine4
+193 255 193            DarkSeaGreen1
+180 238 180            DarkSeaGreen2
+155 205 155            DarkSeaGreen3
+105 139 105            DarkSeaGreen4
+ 84 255 159            SeaGreen1
+ 78 238 148            SeaGreen2
+ 67 205 128            SeaGreen3
+ 46 139  87            SeaGreen4
+154 255 154            PaleGreen1
+144 238 144            PaleGreen2
+124 205 124            PaleGreen3
+ 84 139  84            PaleGreen4
+  0 255 127            SpringGreen1
+  0 238 118            SpringGreen2
+  0 205 102            SpringGreen3
+  0 139  69            SpringGreen4
+  0 255   0            green1
+  0 238   0            green2
+  0 205   0            green3
+  0 139   0            green4
+127 255   0            chartreuse1
+118 238   0            chartreuse2
+102 205   0            chartreuse3
+ 69 139   0            chartreuse4
+192 255  62            OliveDrab1
+179 238  58            OliveDrab2
+154 205  50            OliveDrab3
+105 139  34            OliveDrab4
+202 255 112            DarkOliveGreen1
+188 238 104            DarkOliveGreen2
+162 205  90            DarkOliveGreen3
+110 139  61            DarkOliveGreen4
+255 246 143            khaki1
+238 230 133            khaki2
+205 198 115            khaki3
+139 134  78            khaki4
+255 236 139            LightGoldenrod1
+238 220 130            LightGoldenrod2
+205 190 112            LightGoldenrod3
+139 129  76            LightGoldenrod4
+255 255 224            LightYellow1
+238 238 209            LightYellow2
+205 205 180            LightYellow3
+139 139 122            LightYellow4
+255 255   0            yellow1
+238 238   0            yellow2
+205 205   0            yellow3
+139 139   0            yellow4
+255 215   0            gold1
+238 201   0            gold2
+205 173   0            gold3
+139 117   0            gold4
+255 193  37            goldenrod1
+238 180  34            goldenrod2
+205 155  29            goldenrod3
+139 105  20            goldenrod4
+255 185  15            DarkGoldenrod1
+238 173  14            DarkGoldenrod2
+205 149  12            DarkGoldenrod3
+139 101   8            DarkGoldenrod4
+255 193 193            RosyBrown1
+238 180 180            RosyBrown2
+205 155 155            RosyBrown3
+139 105 105            RosyBrown4
+255 106 106            IndianRed1
+238  99  99            IndianRed2
+205  85  85            IndianRed3
+139  58  58            IndianRed4
+255 130  71            sienna1
+238 121  66            sienna2
+205 104  57            sienna3
+139  71  38            sienna4
+255 211 155            burlywood1
+238 197 145            burlywood2
+205 170 125            burlywood3
+139 115  85            burlywood4
+255 231 186            wheat1
+238 216 174            wheat2
+205 186 150            wheat3
+139 126 102            wheat4
+255 165  79            tan1
+238 154  73            tan2
+205 133  63            tan3
+139  90  43            tan4
+255 127  36            chocolate1
+238 118  33            chocolate2
+205 102  29            chocolate3
+139  69  19            chocolate4
+255  48  48            firebrick1
+238  44  44            firebrick2
+205  38  38            firebrick3
+139  26  26            firebrick4
+255  64  64            brown1
+238  59  59            brown2
+205  51  51            brown3
+139  35  35            brown4
+255 140 105            salmon1
+238 130  98            salmon2
+205 112  84            salmon3
+139  76  57            salmon4
+255 160 122            LightSalmon1
+238 149 114            LightSalmon2
+205 129  98            LightSalmon3
+139  87  66            LightSalmon4
+255 165   0            orange1
+238 154   0            orange2
+205 133   0            orange3
+139  90   0            orange4
+255 127   0            DarkOrange1
+238 118   0            DarkOrange2
+205 102   0            DarkOrange3
+139  69   0            DarkOrange4
+255 114  86            coral1
+238 106  80            coral2
+205  91  69            coral3
+139  62  47            coral4
+255  99  71            tomato1
+238  92  66            tomato2
+205  79  57            tomato3
+139  54  38            tomato4
+255  69   0            OrangeRed1
+238  64   0            OrangeRed2
+205  55   0            OrangeRed3
+139  37   0            OrangeRed4
+255   0   0            red1
+238   0   0            red2
+205   0   0            red3
+139   0   0            red4
+255  20 147            DeepPink1
+238  18 137            DeepPink2
+205  16 118            DeepPink3
+139  10  80            DeepPink4
+255 110 180            HotPink1
+238 106 167            HotPink2
+205  96 144            HotPink3
+139  58  98            HotPink4
+255 181 197            pink1
+238 169 184            pink2
+205 145 158            pink3
+139  99 108            pink4
+255 174 185            LightPink1
+238 162 173            LightPink2
+205 140 149            LightPink3
+139  95 101            LightPink4
+255 130 171            PaleVioletRed1
+238 121 159            PaleVioletRed2
+205 104 137            PaleVioletRed3
+139  71  93            PaleVioletRed4
+255  52 179            maroon1
+238  48 167            maroon2
+205  41 144            maroon3
+139  28  98            maroon4
+255  62 150            VioletRed1
+238  58 140            VioletRed2
+205  50 120            VioletRed3
+139  34  82            VioletRed4
+255   0 255            magenta1
+238   0 238            magenta2
+205   0 205            magenta3
+139   0 139            magenta4
+255 131 250            orchid1
+238 122 233            orchid2
+205 105 201            orchid3
+139  71 137            orchid4
+255 187 255            plum1
+238 174 238            plum2
+205 150 205            plum3
+139 102 139            plum4
+224 102 255            MediumOrchid1
+209  95 238            MediumOrchid2
+180  82 205            MediumOrchid3
+122  55 139            MediumOrchid4
+191  62 255            DarkOrchid1
+178  58 238            DarkOrchid2
+154  50 205            DarkOrchid3
+104  34 139            DarkOrchid4
+155  48 255            purple1
+145  44 238            purple2
+125  38 205            purple3
+ 85  26 139            purple4
+171 130 255            MediumPurple1
+159 121 238            MediumPurple2
+137 104 205            MediumPurple3
+ 93  71 139            MediumPurple4
+255 225 255            thistle1
+238 210 238            thistle2
+205 181 205            thistle3
+139 123 139            thistle4
+  0   0   0            gray0
+  0   0   0            grey0
+  3   3   3            gray1
+  3   3   3            grey1
+  5   5   5            gray2
+  5   5   5            grey2
+  8   8   8            gray3
+  8   8   8            grey3
+ 10  10  10            gray4
+ 10  10  10            grey4
+ 13  13  13            gray5
+ 13  13  13            grey5
+ 15  15  15            gray6
+ 15  15  15            grey6
+ 18  18  18            gray7
+ 18  18  18            grey7
+ 20  20  20            gray8
+ 20  20  20            grey8
+ 23  23  23            gray9
+ 23  23  23            grey9
+ 26  26  26            gray10
+ 26  26  26            grey10
+ 28  28  28            gray11
+ 28  28  28            grey11
+ 31  31  31            gray12
+ 31  31  31            grey12
+ 33  33  33            gray13
+ 33  33  33            grey13
+ 36  36  36            gray14
+ 36  36  36            grey14
+ 38  38  38            gray15
+ 38  38  38            grey15
+ 41  41  41            gray16
+ 41  41  41            grey16
+ 43  43  43            gray17
+ 43  43  43            grey17
+ 46  46  46            gray18
+ 46  46  46            grey18
+ 48  48  48            gray19
+ 48  48  48            grey19
+ 51  51  51            gray20
+ 51  51  51            grey20
+ 54  54  54            gray21
+ 54  54  54            grey21
+ 56  56  56            gray22
+ 56  56  56            grey22
+ 59  59  59            gray23
+ 59  59  59            grey23
+ 61  61  61            gray24
+ 61  61  61            grey24
+ 64  64  64            gray25
+ 64  64  64            grey25
+ 66  66  66            gray26
+ 66  66  66            grey26
+ 69  69  69            gray27
+ 69  69  69            grey27
+ 71  71  71            gray28
+ 71  71  71            grey28
+ 74  74  74            gray29
+ 74  74  74            grey29
+ 77  77  77            gray30
+ 77  77  77            grey30
+ 79  79  79            gray31
+ 79  79  79            grey31
+ 82  82  82            gray32
+ 82  82  82            grey32
+ 84  84  84            gray33
+ 84  84  84            grey33
+ 87  87  87            gray34
+ 87  87  87            grey34
+ 89  89  89            gray35
+ 89  89  89            grey35
+ 92  92  92            gray36
+ 92  92  92            grey36
+ 94  94  94            gray37
+ 94  94  94            grey37
+ 97  97  97            gray38
+ 97  97  97            grey38
+ 99  99  99            gray39
+ 99  99  99            grey39
+102 102 102            gray40
+102 102 102            grey40
+105 105 105            gray41
+105 105 105            grey41
+107 107 107            gray42
+107 107 107            grey42
+110 110 110            gray43
+110 110 110            grey43
+112 112 112            gray44
+112 112 112            grey44
+115 115 115            gray45
+115 115 115            grey45
+117 117 117            gray46
+117 117 117            grey46
+120 120 120            gray47
+120 120 120            grey47
+122 122 122            gray48
+122 122 122            grey48
+125 125 125            gray49
+125 125 125            grey49
+127 127 127            gray50
+127 127 127            grey50
+130 130 130            gray51
+130 130 130            grey51
+133 133 133            gray52
+133 133 133            grey52
+135 135 135            gray53
+135 135 135            grey53
+138 138 138            gray54
+138 138 138            grey54
+140 140 140            gray55
+140 140 140            grey55
+143 143 143            gray56
+143 143 143            grey56
+145 145 145            gray57
+145 145 145            grey57
+148 148 148            gray58
+148 148 148            grey58
+150 150 150            gray59
+150 150 150            grey59
+153 153 153            gray60
+153 153 153            grey60
+156 156 156            gray61
+156 156 156            grey61
+158 158 158            gray62
+158 158 158            grey62
+161 161 161            gray63
+161 161 161            grey63
+163 163 163            gray64
+163 163 163            grey64
+166 166 166            gray65
+166 166 166            grey65
+168 168 168            gray66
+168 168 168            grey66
+171 171 171            gray67
+171 171 171            grey67
+173 173 173            gray68
+173 173 173            grey68
+176 176 176            gray69
+176 176 176            grey69
+179 179 179            gray70
+179 179 179            grey70
+181 181 181            gray71
+181 181 181            grey71
+184 184 184            gray72
+184 184 184            grey72
+186 186 186            gray73
+186 186 186            grey73
+189 189 189            gray74
+189 189 189            grey74
+191 191 191            gray75
+191 191 191            grey75
+194 194 194            gray76
+194 194 194            grey76
+196 196 196            gray77
+196 196 196            grey77
+199 199 199            gray78
+199 199 199            grey78
+201 201 201            gray79
+201 201 201            grey79
+204 204 204            gray80
+204 204 204            grey80
+207 207 207            gray81
+207 207 207            grey81
+209 209 209            gray82
+209 209 209            grey82
+212 212 212            gray83
+212 212 212            grey83
+214 214 214            gray84
+214 214 214            grey84
+217 217 217            gray85
+217 217 217            grey85
+219 219 219            gray86
+219 219 219            grey86
+222 222 222            gray87
+222 222 222            grey87
+224 224 224            gray88
+224 224 224            grey88
+227 227 227            gray89
+227 227 227            grey89
+229 229 229            gray90
+229 229 229            grey90
+232 232 232            gray91
+232 232 232            grey91
+235 235 235            gray92
+235 235 235            grey92
+237 237 237            gray93
+237 237 237            grey93
+240 240 240            gray94
+240 240 240            grey94
+242 242 242            gray95
+242 242 242            grey95
+245 245 245            gray96
+245 245 245            grey96
+247 247 247            gray97
+247 247 247            grey97
+250 250 250            gray98
+250 250 250            grey98
+252 252 252            gray99
+252 252 252            grey99
+255 255 255            gray100
+255 255 255            grey100
+169 169 169            dark grey
+169 169 169            DarkGrey
+169 169 169            dark gray
+169 169 169            DarkGray
+  0   0 139            dark blue
+  0   0 139            DarkBlue
+  0 139 139            dark cyan
+  0 139 139            DarkCyan
+139   0 139            dark magenta
+139   0 139            DarkMagenta
+139   0   0            dark red
+139   0   0            DarkRed
+144 238 144            light green
+144 238 144            LightGreen
+220  20  60            crimson
+ 75   0 130            indigo
+128 128   0            olive
+102  51 153            rebecca purple
+102  51 153            RebeccaPurple
+192 192 192            silver
+  0 128 128            teal
diff --git a/src/img/xpm-color-table.h b/src/img/xpm-color-table.h
new file mode 100644 (file)
index 0000000..cf3bfc1
--- /dev/null
@@ -0,0 +1,1582 @@
+/* SPDX-License-Identifier: LGPL-2.0-or-later */
+/* xpm-color-table.h: Generated by gen-color-table.pl from rgb.txt
+ *
+ *  Date: Mon Sep 30 09:04:01 2024
+ *
+ * Do not edit.
+ */
+static const char color_names[] =
+       "alice blue\0"
+       "AliceBlue\0"
+       "antique white\0"
+       "AntiqueWhite\0"
+       "AntiqueWhite1\0"
+       "AntiqueWhite2\0"
+       "AntiqueWhite3\0"
+       "AntiqueWhite4\0"
+       "aqua\0"
+       "aquamarine\0"
+       "aquamarine1\0"
+       "aquamarine2\0"
+       "aquamarine3\0"
+       "aquamarine4\0"
+       "azure\0"
+       "azure1\0"
+       "azure2\0"
+       "azure3\0"
+       "azure4\0"
+       "beige\0"
+       "bisque\0"
+       "bisque1\0"
+       "bisque2\0"
+       "bisque3\0"
+       "bisque4\0"
+       "black\0"
+       "blanched almond\0"
+       "BlanchedAlmond\0"
+       "blue\0"
+       "blue violet\0"
+       "blue1\0"
+       "blue2\0"
+       "blue3\0"
+       "blue4\0"
+       "BlueViolet\0"
+       "brown\0"
+       "brown1\0"
+       "brown2\0"
+       "brown3\0"
+       "brown4\0"
+       "burlywood\0"
+       "burlywood1\0"
+       "burlywood2\0"
+       "burlywood3\0"
+       "burlywood4\0"
+       "cadet blue\0"
+       "CadetBlue\0"
+       "CadetBlue1\0"
+       "CadetBlue2\0"
+       "CadetBlue3\0"
+       "CadetBlue4\0"
+       "chartreuse\0"
+       "chartreuse1\0"
+       "chartreuse2\0"
+       "chartreuse3\0"
+       "chartreuse4\0"
+       "chocolate\0"
+       "chocolate1\0"
+       "chocolate2\0"
+       "chocolate3\0"
+       "chocolate4\0"
+       "coral\0"
+       "coral1\0"
+       "coral2\0"
+       "coral3\0"
+       "coral4\0"
+       "cornflower blue\0"
+       "CornflowerBlue\0"
+       "cornsilk\0"
+       "cornsilk1\0"
+       "cornsilk2\0"
+       "cornsilk3\0"
+       "cornsilk4\0"
+       "crimson\0"
+       "cyan\0"
+       "cyan1\0"
+       "cyan2\0"
+       "cyan3\0"
+       "cyan4\0"
+       "dark blue\0"
+       "dark cyan\0"
+       "dark goldenrod\0"
+       "dark gray\0"
+       "dark green\0"
+       "dark grey\0"
+       "dark khaki\0"
+       "dark magenta\0"
+       "dark olive green\0"
+       "dark orange\0"
+       "dark orchid\0"
+       "dark red\0"
+       "dark salmon\0"
+       "dark sea green\0"
+       "dark slate blue\0"
+       "dark slate gray\0"
+       "dark slate grey\0"
+       "dark turquoise\0"
+       "dark violet\0"
+       "DarkBlue\0"
+       "DarkCyan\0"
+       "DarkGoldenrod\0"
+       "DarkGoldenrod1\0"
+       "DarkGoldenrod2\0"
+       "DarkGoldenrod3\0"
+       "DarkGoldenrod4\0"
+       "DarkGray\0"
+       "DarkGreen\0"
+       "DarkGrey\0"
+       "DarkKhaki\0"
+       "DarkMagenta\0"
+       "DarkOliveGreen\0"
+       "DarkOliveGreen1\0"
+       "DarkOliveGreen2\0"
+       "DarkOliveGreen3\0"
+       "DarkOliveGreen4\0"
+       "DarkOrange\0"
+       "DarkOrange1\0"
+       "DarkOrange2\0"
+       "DarkOrange3\0"
+       "DarkOrange4\0"
+       "DarkOrchid\0"
+       "DarkOrchid1\0"
+       "DarkOrchid2\0"
+       "DarkOrchid3\0"
+       "DarkOrchid4\0"
+       "DarkRed\0"
+       "DarkSalmon\0"
+       "DarkSeaGreen\0"
+       "DarkSeaGreen1\0"
+       "DarkSeaGreen2\0"
+       "DarkSeaGreen3\0"
+       "DarkSeaGreen4\0"
+       "DarkSlateBlue\0"
+       "DarkSlateGray\0"
+       "DarkSlateGray1\0"
+       "DarkSlateGray2\0"
+       "DarkSlateGray3\0"
+       "DarkSlateGray4\0"
+       "DarkSlateGrey\0"
+       "DarkTurquoise\0"
+       "DarkViolet\0"
+       "deep pink\0"
+       "deep sky blue\0"
+       "DeepPink\0"
+       "DeepPink1\0"
+       "DeepPink2\0"
+       "DeepPink3\0"
+       "DeepPink4\0"
+       "DeepSkyBlue\0"
+       "DeepSkyBlue1\0"
+       "DeepSkyBlue2\0"
+       "DeepSkyBlue3\0"
+       "DeepSkyBlue4\0"
+       "dim gray\0"
+       "dim grey\0"
+       "DimGray\0"
+       "DimGrey\0"
+       "dodger blue\0"
+       "DodgerBlue\0"
+       "DodgerBlue1\0"
+       "DodgerBlue2\0"
+       "DodgerBlue3\0"
+       "DodgerBlue4\0"
+       "firebrick\0"
+       "firebrick1\0"
+       "firebrick2\0"
+       "firebrick3\0"
+       "firebrick4\0"
+       "floral white\0"
+       "FloralWhite\0"
+       "forest green\0"
+       "ForestGreen\0"
+       "fuchsia\0"
+       "gainsboro\0"
+       "ghost white\0"
+       "GhostWhite\0"
+       "gold\0"
+       "gold1\0"
+       "gold2\0"
+       "gold3\0"
+       "gold4\0"
+       "goldenrod\0"
+       "goldenrod1\0"
+       "goldenrod2\0"
+       "goldenrod3\0"
+       "goldenrod4\0"
+       "gray\0"
+       "gray0\0"
+       "gray1\0"
+       "gray10\0"
+       "gray100\0"
+       "gray11\0"
+       "gray12\0"
+       "gray13\0"
+       "gray14\0"
+       "gray15\0"
+       "gray16\0"
+       "gray17\0"
+       "gray18\0"
+       "gray19\0"
+       "gray2\0"
+       "gray20\0"
+       "gray21\0"
+       "gray22\0"
+       "gray23\0"
+       "gray24\0"
+       "gray25\0"
+       "gray26\0"
+       "gray27\0"
+       "gray28\0"
+       "gray29\0"
+       "gray3\0"
+       "gray30\0"
+       "gray31\0"
+       "gray32\0"
+       "gray33\0"
+       "gray34\0"
+       "gray35\0"
+       "gray36\0"
+       "gray37\0"
+       "gray38\0"
+       "gray39\0"
+       "gray4\0"
+       "gray40\0"
+       "gray41\0"
+       "gray42\0"
+       "gray43\0"
+       "gray44\0"
+       "gray45\0"
+       "gray46\0"
+       "gray47\0"
+       "gray48\0"
+       "gray49\0"
+       "gray5\0"
+       "gray50\0"
+       "gray51\0"
+       "gray52\0"
+       "gray53\0"
+       "gray54\0"
+       "gray55\0"
+       "gray56\0"
+       "gray57\0"
+       "gray58\0"
+       "gray59\0"
+       "gray6\0"
+       "gray60\0"
+       "gray61\0"
+       "gray62\0"
+       "gray63\0"
+       "gray64\0"
+       "gray65\0"
+       "gray66\0"
+       "gray67\0"
+       "gray68\0"
+       "gray69\0"
+       "gray7\0"
+       "gray70\0"
+       "gray71\0"
+       "gray72\0"
+       "gray73\0"
+       "gray74\0"
+       "gray75\0"
+       "gray76\0"
+       "gray77\0"
+       "gray78\0"
+       "gray79\0"
+       "gray8\0"
+       "gray80\0"
+       "gray81\0"
+       "gray82\0"
+       "gray83\0"
+       "gray84\0"
+       "gray85\0"
+       "gray86\0"
+       "gray87\0"
+       "gray88\0"
+       "gray89\0"
+       "gray9\0"
+       "gray90\0"
+       "gray91\0"
+       "gray92\0"
+       "gray93\0"
+       "gray94\0"
+       "gray95\0"
+       "gray96\0"
+       "gray97\0"
+       "gray98\0"
+       "gray99\0"
+       "green\0"
+       "green yellow\0"
+       "green1\0"
+       "green2\0"
+       "green3\0"
+       "green4\0"
+       "GreenYellow\0"
+       "grey\0"
+       "grey0\0"
+       "grey1\0"
+       "grey10\0"
+       "grey100\0"
+       "grey11\0"
+       "grey12\0"
+       "grey13\0"
+       "grey14\0"
+       "grey15\0"
+       "grey16\0"
+       "grey17\0"
+       "grey18\0"
+       "grey19\0"
+       "grey2\0"
+       "grey20\0"
+       "grey21\0"
+       "grey22\0"
+       "grey23\0"
+       "grey24\0"
+       "grey25\0"
+       "grey26\0"
+       "grey27\0"
+       "grey28\0"
+       "grey29\0"
+       "grey3\0"
+       "grey30\0"
+       "grey31\0"
+       "grey32\0"
+       "grey33\0"
+       "grey34\0"
+       "grey35\0"
+       "grey36\0"
+       "grey37\0"
+       "grey38\0"
+       "grey39\0"
+       "grey4\0"
+       "grey40\0"
+       "grey41\0"
+       "grey42\0"
+       "grey43\0"
+       "grey44\0"
+       "grey45\0"
+       "grey46\0"
+       "grey47\0"
+       "grey48\0"
+       "grey49\0"
+       "grey5\0"
+       "grey50\0"
+       "grey51\0"
+       "grey52\0"
+       "grey53\0"
+       "grey54\0"
+       "grey55\0"
+       "grey56\0"
+       "grey57\0"
+       "grey58\0"
+       "grey59\0"
+       "grey6\0"
+       "grey60\0"
+       "grey61\0"
+       "grey62\0"
+       "grey63\0"
+       "grey64\0"
+       "grey65\0"
+       "grey66\0"
+       "grey67\0"
+       "grey68\0"
+       "grey69\0"
+       "grey7\0"
+       "grey70\0"
+       "grey71\0"
+       "grey72\0"
+       "grey73\0"
+       "grey74\0"
+       "grey75\0"
+       "grey76\0"
+       "grey77\0"
+       "grey78\0"
+       "grey79\0"
+       "grey8\0"
+       "grey80\0"
+       "grey81\0"
+       "grey82\0"
+       "grey83\0"
+       "grey84\0"
+       "grey85\0"
+       "grey86\0"
+       "grey87\0"
+       "grey88\0"
+       "grey89\0"
+       "grey9\0"
+       "grey90\0"
+       "grey91\0"
+       "grey92\0"
+       "grey93\0"
+       "grey94\0"
+       "grey95\0"
+       "grey96\0"
+       "grey97\0"
+       "grey98\0"
+       "grey99\0"
+       "honeydew\0"
+       "honeydew1\0"
+       "honeydew2\0"
+       "honeydew3\0"
+       "honeydew4\0"
+       "hot pink\0"
+       "HotPink\0"
+       "HotPink1\0"
+       "HotPink2\0"
+       "HotPink3\0"
+       "HotPink4\0"
+       "indian red\0"
+       "IndianRed\0"
+       "IndianRed1\0"
+       "IndianRed2\0"
+       "IndianRed3\0"
+       "IndianRed4\0"
+       "indigo\0"
+       "ivory\0"
+       "ivory1\0"
+       "ivory2\0"
+       "ivory3\0"
+       "ivory4\0"
+       "khaki\0"
+       "khaki1\0"
+       "khaki2\0"
+       "khaki3\0"
+       "khaki4\0"
+       "lavender\0"
+       "lavender blush\0"
+       "LavenderBlush\0"
+       "LavenderBlush1\0"
+       "LavenderBlush2\0"
+       "LavenderBlush3\0"
+       "LavenderBlush4\0"
+       "lawn green\0"
+       "LawnGreen\0"
+       "lemon chiffon\0"
+       "LemonChiffon\0"
+       "LemonChiffon1\0"
+       "LemonChiffon2\0"
+       "LemonChiffon3\0"
+       "LemonChiffon4\0"
+       "light blue\0"
+       "light coral\0"
+       "light cyan\0"
+       "light goldenrod\0"
+       "light goldenrod yellow\0"
+       "light gray\0"
+       "light green\0"
+       "light grey\0"
+       "light pink\0"
+       "light salmon\0"
+       "light sea green\0"
+       "light sky blue\0"
+       "light slate blue\0"
+       "light slate gray\0"
+       "light slate grey\0"
+       "light steel blue\0"
+       "light yellow\0"
+       "LightBlue\0"
+       "LightBlue1\0"
+       "LightBlue2\0"
+       "LightBlue3\0"
+       "LightBlue4\0"
+       "LightCoral\0"
+       "LightCyan\0"
+       "LightCyan1\0"
+       "LightCyan2\0"
+       "LightCyan3\0"
+       "LightCyan4\0"
+       "LightGoldenrod\0"
+       "LightGoldenrod1\0"
+       "LightGoldenrod2\0"
+       "LightGoldenrod3\0"
+       "LightGoldenrod4\0"
+       "LightGoldenrodYellow\0"
+       "LightGray\0"
+       "LightGreen\0"
+       "LightGrey\0"
+       "LightPink\0"
+       "LightPink1\0"
+       "LightPink2\0"
+       "LightPink3\0"
+       "LightPink4\0"
+       "LightSalmon\0"
+       "LightSalmon1\0"
+       "LightSalmon2\0"
+       "LightSalmon3\0"
+       "LightSalmon4\0"
+       "LightSeaGreen\0"
+       "LightSkyBlue\0"
+       "LightSkyBlue1\0"
+       "LightSkyBlue2\0"
+       "LightSkyBlue3\0"
+       "LightSkyBlue4\0"
+       "LightSlateBlue\0"
+       "LightSlateGray\0"
+       "LightSlateGrey\0"
+       "LightSteelBlue\0"
+       "LightSteelBlue1\0"
+       "LightSteelBlue2\0"
+       "LightSteelBlue3\0"
+       "LightSteelBlue4\0"
+       "LightYellow\0"
+       "LightYellow1\0"
+       "LightYellow2\0"
+       "LightYellow3\0"
+       "LightYellow4\0"
+       "lime\0"
+       "lime green\0"
+       "LimeGreen\0"
+       "linen\0"
+       "magenta\0"
+       "magenta1\0"
+       "magenta2\0"
+       "magenta3\0"
+       "magenta4\0"
+       "maroon\0"
+       "maroon1\0"
+       "maroon2\0"
+       "maroon3\0"
+       "maroon4\0"
+       "medium aquamarine\0"
+       "medium blue\0"
+       "medium orchid\0"
+       "medium purple\0"
+       "medium sea green\0"
+       "medium slate blue\0"
+       "medium spring green\0"
+       "medium turquoise\0"
+       "medium violet red\0"
+       "MediumAquamarine\0"
+       "MediumBlue\0"
+       "MediumOrchid\0"
+       "MediumOrchid1\0"
+       "MediumOrchid2\0"
+       "MediumOrchid3\0"
+       "MediumOrchid4\0"
+       "MediumPurple\0"
+       "MediumPurple1\0"
+       "MediumPurple2\0"
+       "MediumPurple3\0"
+       "MediumPurple4\0"
+       "MediumSeaGreen\0"
+       "MediumSlateBlue\0"
+       "MediumSpringGreen\0"
+       "MediumTurquoise\0"
+       "MediumVioletRed\0"
+       "midnight blue\0"
+       "MidnightBlue\0"
+       "mint cream\0"
+       "MintCream\0"
+       "misty rose\0"
+       "MistyRose\0"
+       "MistyRose1\0"
+       "MistyRose2\0"
+       "MistyRose3\0"
+       "MistyRose4\0"
+       "moccasin\0"
+       "navajo white\0"
+       "NavajoWhite\0"
+       "NavajoWhite1\0"
+       "NavajoWhite2\0"
+       "NavajoWhite3\0"
+       "NavajoWhite4\0"
+       "navy\0"
+       "navy blue\0"
+       "NavyBlue\0"
+       "old lace\0"
+       "OldLace\0"
+       "olive\0"
+       "olive drab\0"
+       "OliveDrab\0"
+       "OliveDrab1\0"
+       "OliveDrab2\0"
+       "OliveDrab3\0"
+       "OliveDrab4\0"
+       "orange\0"
+       "orange red\0"
+       "orange1\0"
+       "orange2\0"
+       "orange3\0"
+       "orange4\0"
+       "OrangeRed\0"
+       "OrangeRed1\0"
+       "OrangeRed2\0"
+       "OrangeRed3\0"
+       "OrangeRed4\0"
+       "orchid\0"
+       "orchid1\0"
+       "orchid2\0"
+       "orchid3\0"
+       "orchid4\0"
+       "pale goldenrod\0"
+       "pale green\0"
+       "pale turquoise\0"
+       "pale violet red\0"
+       "PaleGoldenrod\0"
+       "PaleGreen\0"
+       "PaleGreen1\0"
+       "PaleGreen2\0"
+       "PaleGreen3\0"
+       "PaleGreen4\0"
+       "PaleTurquoise\0"
+       "PaleTurquoise1\0"
+       "PaleTurquoise2\0"
+       "PaleTurquoise3\0"
+       "PaleTurquoise4\0"
+       "PaleVioletRed\0"
+       "PaleVioletRed1\0"
+       "PaleVioletRed2\0"
+       "PaleVioletRed3\0"
+       "PaleVioletRed4\0"
+       "papaya whip\0"
+       "PapayaWhip\0"
+       "peach puff\0"
+       "PeachPuff\0"
+       "PeachPuff1\0"
+       "PeachPuff2\0"
+       "PeachPuff3\0"
+       "PeachPuff4\0"
+       "peru\0"
+       "pink\0"
+       "pink1\0"
+       "pink2\0"
+       "pink3\0"
+       "pink4\0"
+       "plum\0"
+       "plum1\0"
+       "plum2\0"
+       "plum3\0"
+       "plum4\0"
+       "powder blue\0"
+       "PowderBlue\0"
+       "purple\0"
+       "purple1\0"
+       "purple2\0"
+       "purple3\0"
+       "purple4\0"
+       "rebecca purple\0"
+       "RebeccaPurple\0"
+       "red\0"
+       "red1\0"
+       "red2\0"
+       "red3\0"
+       "red4\0"
+       "rosy brown\0"
+       "RosyBrown\0"
+       "RosyBrown1\0"
+       "RosyBrown2\0"
+       "RosyBrown3\0"
+       "RosyBrown4\0"
+       "royal blue\0"
+       "RoyalBlue\0"
+       "RoyalBlue1\0"
+       "RoyalBlue2\0"
+       "RoyalBlue3\0"
+       "RoyalBlue4\0"
+       "saddle brown\0"
+       "SaddleBrown\0"
+       "salmon\0"
+       "salmon1\0"
+       "salmon2\0"
+       "salmon3\0"
+       "salmon4\0"
+       "sandy brown\0"
+       "SandyBrown\0"
+       "sea green\0"
+       "SeaGreen\0"
+       "SeaGreen1\0"
+       "SeaGreen2\0"
+       "SeaGreen3\0"
+       "SeaGreen4\0"
+       "seashell\0"
+       "seashell1\0"
+       "seashell2\0"
+       "seashell3\0"
+       "seashell4\0"
+       "sienna\0"
+       "sienna1\0"
+       "sienna2\0"
+       "sienna3\0"
+       "sienna4\0"
+       "silver\0"
+       "sky blue\0"
+       "SkyBlue\0"
+       "SkyBlue1\0"
+       "SkyBlue2\0"
+       "SkyBlue3\0"
+       "SkyBlue4\0"
+       "slate blue\0"
+       "slate gray\0"
+       "slate grey\0"
+       "SlateBlue\0"
+       "SlateBlue1\0"
+       "SlateBlue2\0"
+       "SlateBlue3\0"
+       "SlateBlue4\0"
+       "SlateGray\0"
+       "SlateGray1\0"
+       "SlateGray2\0"
+       "SlateGray3\0"
+       "SlateGray4\0"
+       "SlateGrey\0"
+       "snow\0"
+       "snow1\0"
+       "snow2\0"
+       "snow3\0"
+       "snow4\0"
+       "spring green\0"
+       "SpringGreen\0"
+       "SpringGreen1\0"
+       "SpringGreen2\0"
+       "SpringGreen3\0"
+       "SpringGreen4\0"
+       "steel blue\0"
+       "SteelBlue\0"
+       "SteelBlue1\0"
+       "SteelBlue2\0"
+       "SteelBlue3\0"
+       "SteelBlue4\0"
+       "tan\0"
+       "tan1\0"
+       "tan2\0"
+       "tan3\0"
+       "tan4\0"
+       "teal\0"
+       "thistle\0"
+       "thistle1\0"
+       "thistle2\0"
+       "thistle3\0"
+       "thistle4\0"
+       "tomato\0"
+       "tomato1\0"
+       "tomato2\0"
+       "tomato3\0"
+       "tomato4\0"
+       "turquoise\0"
+       "turquoise1\0"
+       "turquoise2\0"
+       "turquoise3\0"
+       "turquoise4\0"
+       "violet\0"
+       "violet red\0"
+       "VioletRed\0"
+       "VioletRed1\0"
+       "VioletRed2\0"
+       "VioletRed3\0"
+       "VioletRed4\0"
+       "web gray\0"
+       "web green\0"
+       "web grey\0"
+       "web maroon\0"
+       "web purple\0"
+       "WebGray\0"
+       "WebGreen\0"
+       "WebGrey\0"
+       "WebMaroon\0"
+       "WebPurple\0"
+       "wheat\0"
+       "wheat1\0"
+       "wheat2\0"
+       "wheat3\0"
+       "wheat4\0"
+       "white\0"
+       "white smoke\0"
+       "WhiteSmoke\0"
+       "x11 gray\0"
+       "x11 green\0"
+       "x11 grey\0"
+       "x11 maroon\0"
+       "x11 purple\0"
+       "X11Gray\0"
+       "X11Green\0"
+       "X11Grey\0"
+       "X11Maroon\0"
+       "X11Purple\0"
+       "yellow\0"
+       "yellow green\0"
+       "yellow1\0"
+       "yellow2\0"
+       "yellow3\0"
+       "yellow4\0"
+       "YellowGreen\0";
+
+struct xcolor_entry {
+       uint16_t name_offset;
+       uint8_t red;
+       uint8_t green;
+       uint8_t blue;
+};
+
+static const struct xcolor_entry xcolors[] = {
+       { 0, 240, 248, 255 },
+       { 11, 240, 248, 255 },
+       { 21, 250, 235, 215 },
+       { 35, 250, 235, 215 },
+       { 48, 255, 239, 219 },
+       { 62, 238, 223, 204 },
+       { 76, 205, 192, 176 },
+       { 90, 139, 131, 120 },
+       { 104, 0, 255, 255 },
+       { 109, 127, 255, 212 },
+       { 120, 127, 255, 212 },
+       { 132, 118, 238, 198 },
+       { 144, 102, 205, 170 },
+       { 156, 69, 139, 116 },
+       { 168, 240, 255, 255 },
+       { 174, 240, 255, 255 },
+       { 181, 224, 238, 238 },
+       { 188, 193, 205, 205 },
+       { 195, 131, 139, 139 },
+       { 202, 245, 245, 220 },
+       { 208, 255, 228, 196 },
+       { 215, 255, 228, 196 },
+       { 223, 238, 213, 183 },
+       { 231, 205, 183, 158 },
+       { 239, 139, 125, 107 },
+       { 247, 0, 0, 0 },
+       { 253, 255, 235, 205 },
+       { 269, 255, 235, 205 },
+       { 284, 0, 0, 255 },
+       { 289, 138, 43, 226 },
+       { 301, 0, 0, 255 },
+       { 307, 0, 0, 238 },
+       { 313, 0, 0, 205 },
+       { 319, 0, 0, 139 },
+       { 325, 138, 43, 226 },
+       { 336, 165, 42, 42 },
+       { 342, 255, 64, 64 },
+       { 349, 238, 59, 59 },
+       { 356, 205, 51, 51 },
+       { 363, 139, 35, 35 },
+       { 370, 222, 184, 135 },
+       { 380, 255, 211, 155 },
+       { 391, 238, 197, 145 },
+       { 402, 205, 170, 125 },
+       { 413, 139, 115, 85 },
+       { 424, 95, 158, 160 },
+       { 435, 95, 158, 160 },
+       { 445, 152, 245, 255 },
+       { 456, 142, 229, 238 },
+       { 467, 122, 197, 205 },
+       { 478, 83, 134, 139 },
+       { 489, 127, 255, 0 },
+       { 500, 127, 255, 0 },
+       { 512, 118, 238, 0 },
+       { 524, 102, 205, 0 },
+       { 536, 69, 139, 0 },
+       { 548, 210, 105, 30 },
+       { 558, 255, 127, 36 },
+       { 569, 238, 118, 33 },
+       { 580, 205, 102, 29 },
+       { 591, 139, 69, 19 },
+       { 602, 255, 127, 80 },
+       { 608, 255, 114, 86 },
+       { 615, 238, 106, 80 },
+       { 622, 205, 91, 69 },
+       { 629, 139, 62, 47 },
+       { 636, 100, 149, 237 },
+       { 652, 100, 149, 237 },
+       { 667, 255, 248, 220 },
+       { 676, 255, 248, 220 },
+       { 686, 238, 232, 205 },
+       { 696, 205, 200, 177 },
+       { 706, 139, 136, 120 },
+       { 716, 220, 20, 60 },
+       { 724, 0, 255, 255 },
+       { 729, 0, 255, 255 },
+       { 735, 0, 238, 238 },
+       { 741, 0, 205, 205 },
+       { 747, 0, 139, 139 },
+       { 753, 0, 0, 139 },
+       { 763, 0, 139, 139 },
+       { 773, 184, 134, 11 },
+       { 788, 169, 169, 169 },
+       { 798, 0, 100, 0 },
+       { 809, 169, 169, 169 },
+       { 819, 189, 183, 107 },
+       { 830, 139, 0, 139 },
+       { 843, 85, 107, 47 },
+       { 860, 255, 140, 0 },
+       { 872, 153, 50, 204 },
+       { 884, 139, 0, 0 },
+       { 893, 233, 150, 122 },
+       { 905, 143, 188, 143 },
+       { 920, 72, 61, 139 },
+       { 936, 47, 79, 79 },
+       { 952, 47, 79, 79 },
+       { 968, 0, 206, 209 },
+       { 983, 148, 0, 211 },
+       { 995, 0, 0, 139 },
+       { 1004, 0, 139, 139 },
+       { 1013, 184, 134, 11 },
+       { 1027, 255, 185, 15 },
+       { 1042, 238, 173, 14 },
+       { 1057, 205, 149, 12 },
+       { 1072, 139, 101, 8 },
+       { 1087, 169, 169, 169 },
+       { 1096, 0, 100, 0 },
+       { 1106, 169, 169, 169 },
+       { 1115, 189, 183, 107 },
+       { 1125, 139, 0, 139 },
+       { 1137, 85, 107, 47 },
+       { 1152, 202, 255, 112 },
+       { 1168, 188, 238, 104 },
+       { 1184, 162, 205, 90 },
+       { 1200, 110, 139, 61 },
+       { 1216, 255, 140, 0 },
+       { 1227, 255, 127, 0 },
+       { 1239, 238, 118, 0 },
+       { 1251, 205, 102, 0 },
+       { 1263, 139, 69, 0 },
+       { 1275, 153, 50, 204 },
+       { 1286, 191, 62, 255 },
+       { 1298, 178, 58, 238 },
+       { 1310, 154, 50, 205 },
+       { 1322, 104, 34, 139 },
+       { 1334, 139, 0, 0 },
+       { 1342, 233, 150, 122 },
+       { 1353, 143, 188, 143 },
+       { 1366, 193, 255, 193 },
+       { 1380, 180, 238, 180 },
+       { 1394, 155, 205, 155 },
+       { 1408, 105, 139, 105 },
+       { 1422, 72, 61, 139 },
+       { 1436, 47, 79, 79 },
+       { 1450, 151, 255, 255 },
+       { 1465, 141, 238, 238 },
+       { 1480, 121, 205, 205 },
+       { 1495, 82, 139, 139 },
+       { 1510, 47, 79, 79 },
+       { 1524, 0, 206, 209 },
+       { 1538, 148, 0, 211 },
+       { 1549, 255, 20, 147 },
+       { 1559, 0, 191, 255 },
+       { 1573, 255, 20, 147 },
+       { 1582, 255, 20, 147 },
+       { 1592, 238, 18, 137 },
+       { 1602, 205, 16, 118 },
+       { 1612, 139, 10, 80 },
+       { 1622, 0, 191, 255 },
+       { 1634, 0, 191, 255 },
+       { 1647, 0, 178, 238 },
+       { 1660, 0, 154, 205 },
+       { 1673, 0, 104, 139 },
+       { 1686, 105, 105, 105 },
+       { 1695, 105, 105, 105 },
+       { 1704, 105, 105, 105 },
+       { 1712, 105, 105, 105 },
+       { 1720, 30, 144, 255 },
+       { 1732, 30, 144, 255 },
+       { 1743, 30, 144, 255 },
+       { 1755, 28, 134, 238 },
+       { 1767, 24, 116, 205 },
+       { 1779, 16, 78, 139 },
+       { 1791, 178, 34, 34 },
+       { 1801, 255, 48, 48 },
+       { 1812, 238, 44, 44 },
+       { 1823, 205, 38, 38 },
+       { 1834, 139, 26, 26 },
+       { 1845, 255, 250, 240 },
+       { 1858, 255, 250, 240 },
+       { 1870, 34, 139, 34 },
+       { 1883, 34, 139, 34 },
+       { 1895, 255, 0, 255 },
+       { 1903, 220, 220, 220 },
+       { 1913, 248, 248, 255 },
+       { 1925, 248, 248, 255 },
+       { 1936, 255, 215, 0 },
+       { 1941, 255, 215, 0 },
+       { 1947, 238, 201, 0 },
+       { 1953, 205, 173, 0 },
+       { 1959, 139, 117, 0 },
+       { 1965, 218, 165, 32 },
+       { 1975, 255, 193, 37 },
+       { 1986, 238, 180, 34 },
+       { 1997, 205, 155, 29 },
+       { 2008, 139, 105, 20 },
+       { 2019, 190, 190, 190 },
+       { 2024, 0, 0, 0 },
+       { 2030, 3, 3, 3 },
+       { 2036, 26, 26, 26 },
+       { 2043, 255, 255, 255 },
+       { 2051, 28, 28, 28 },
+       { 2058, 31, 31, 31 },
+       { 2065, 33, 33, 33 },
+       { 2072, 36, 36, 36 },
+       { 2079, 38, 38, 38 },
+       { 2086, 41, 41, 41 },
+       { 2093, 43, 43, 43 },
+       { 2100, 46, 46, 46 },
+       { 2107, 48, 48, 48 },
+       { 2114, 5, 5, 5 },
+       { 2120, 51, 51, 51 },
+       { 2127, 54, 54, 54 },
+       { 2134, 56, 56, 56 },
+       { 2141, 59, 59, 59 },
+       { 2148, 61, 61, 61 },
+       { 2155, 64, 64, 64 },
+       { 2162, 66, 66, 66 },
+       { 2169, 69, 69, 69 },
+       { 2176, 71, 71, 71 },
+       { 2183, 74, 74, 74 },
+       { 2190, 8, 8, 8 },
+       { 2196, 77, 77, 77 },
+       { 2203, 79, 79, 79 },
+       { 2210, 82, 82, 82 },
+       { 2217, 84, 84, 84 },
+       { 2224, 87, 87, 87 },
+       { 2231, 89, 89, 89 },
+       { 2238, 92, 92, 92 },
+       { 2245, 94, 94, 94 },
+       { 2252, 97, 97, 97 },
+       { 2259, 99, 99, 99 },
+       { 2266, 10, 10, 10 },
+       { 2272, 102, 102, 102 },
+       { 2279, 105, 105, 105 },
+       { 2286, 107, 107, 107 },
+       { 2293, 110, 110, 110 },
+       { 2300, 112, 112, 112 },
+       { 2307, 115, 115, 115 },
+       { 2314, 117, 117, 117 },
+       { 2321, 120, 120, 120 },
+       { 2328, 122, 122, 122 },
+       { 2335, 125, 125, 125 },
+       { 2342, 13, 13, 13 },
+       { 2348, 127, 127, 127 },
+       { 2355, 130, 130, 130 },
+       { 2362, 133, 133, 133 },
+       { 2369, 135, 135, 135 },
+       { 2376, 138, 138, 138 },
+       { 2383, 140, 140, 140 },
+       { 2390, 143, 143, 143 },
+       { 2397, 145, 145, 145 },
+       { 2404, 148, 148, 148 },
+       { 2411, 150, 150, 150 },
+       { 2418, 15, 15, 15 },
+       { 2424, 153, 153, 153 },
+       { 2431, 156, 156, 156 },
+       { 2438, 158, 158, 158 },
+       { 2445, 161, 161, 161 },
+       { 2452, 163, 163, 163 },
+       { 2459, 166, 166, 166 },
+       { 2466, 168, 168, 168 },
+       { 2473, 171, 171, 171 },
+       { 2480, 173, 173, 173 },
+       { 2487, 176, 176, 176 },
+       { 2494, 18, 18, 18 },
+       { 2500, 179, 179, 179 },
+       { 2507, 181, 181, 181 },
+       { 2514, 184, 184, 184 },
+       { 2521, 186, 186, 186 },
+       { 2528, 189, 189, 189 },
+       { 2535, 191, 191, 191 },
+       { 2542, 194, 194, 194 },
+       { 2549, 196, 196, 196 },
+       { 2556, 199, 199, 199 },
+       { 2563, 201, 201, 201 },
+       { 2570, 20, 20, 20 },
+       { 2576, 204, 204, 204 },
+       { 2583, 207, 207, 207 },
+       { 2590, 209, 209, 209 },
+       { 2597, 212, 212, 212 },
+       { 2604, 214, 214, 214 },
+       { 2611, 217, 217, 217 },
+       { 2618, 219, 219, 219 },
+       { 2625, 222, 222, 222 },
+       { 2632, 224, 224, 224 },
+       { 2639, 227, 227, 227 },
+       { 2646, 23, 23, 23 },
+       { 2652, 229, 229, 229 },
+       { 2659, 232, 232, 232 },
+       { 2666, 235, 235, 235 },
+       { 2673, 237, 237, 237 },
+       { 2680, 240, 240, 240 },
+       { 2687, 242, 242, 242 },
+       { 2694, 245, 245, 245 },
+       { 2701, 247, 247, 247 },
+       { 2708, 250, 250, 250 },
+       { 2715, 252, 252, 252 },
+       { 2722, 0, 255, 0 },
+       { 2728, 173, 255, 47 },
+       { 2741, 0, 255, 0 },
+       { 2748, 0, 238, 0 },
+       { 2755, 0, 205, 0 },
+       { 2762, 0, 139, 0 },
+       { 2769, 173, 255, 47 },
+       { 2781, 190, 190, 190 },
+       { 2786, 0, 0, 0 },
+       { 2792, 3, 3, 3 },
+       { 2798, 26, 26, 26 },
+       { 2805, 255, 255, 255 },
+       { 2813, 28, 28, 28 },
+       { 2820, 31, 31, 31 },
+       { 2827, 33, 33, 33 },
+       { 2834, 36, 36, 36 },
+       { 2841, 38, 38, 38 },
+       { 2848, 41, 41, 41 },
+       { 2855, 43, 43, 43 },
+       { 2862, 46, 46, 46 },
+       { 2869, 48, 48, 48 },
+       { 2876, 5, 5, 5 },
+       { 2882, 51, 51, 51 },
+       { 2889, 54, 54, 54 },
+       { 2896, 56, 56, 56 },
+       { 2903, 59, 59, 59 },
+       { 2910, 61, 61, 61 },
+       { 2917, 64, 64, 64 },
+       { 2924, 66, 66, 66 },
+       { 2931, 69, 69, 69 },
+       { 2938, 71, 71, 71 },
+       { 2945, 74, 74, 74 },
+       { 2952, 8, 8, 8 },
+       { 2958, 77, 77, 77 },
+       { 2965, 79, 79, 79 },
+       { 2972, 82, 82, 82 },
+       { 2979, 84, 84, 84 },
+       { 2986, 87, 87, 87 },
+       { 2993, 89, 89, 89 },
+       { 3000, 92, 92, 92 },
+       { 3007, 94, 94, 94 },
+       { 3014, 97, 97, 97 },
+       { 3021, 99, 99, 99 },
+       { 3028, 10, 10, 10 },
+       { 3034, 102, 102, 102 },
+       { 3041, 105, 105, 105 },
+       { 3048, 107, 107, 107 },
+       { 3055, 110, 110, 110 },
+       { 3062, 112, 112, 112 },
+       { 3069, 115, 115, 115 },
+       { 3076, 117, 117, 117 },
+       { 3083, 120, 120, 120 },
+       { 3090, 122, 122, 122 },
+       { 3097, 125, 125, 125 },
+       { 3104, 13, 13, 13 },
+       { 3110, 127, 127, 127 },
+       { 3117, 130, 130, 130 },
+       { 3124, 133, 133, 133 },
+       { 3131, 135, 135, 135 },
+       { 3138, 138, 138, 138 },
+       { 3145, 140, 140, 140 },
+       { 3152, 143, 143, 143 },
+       { 3159, 145, 145, 145 },
+       { 3166, 148, 148, 148 },
+       { 3173, 150, 150, 150 },
+       { 3180, 15, 15, 15 },
+       { 3186, 153, 153, 153 },
+       { 3193, 156, 156, 156 },
+       { 3200, 158, 158, 158 },
+       { 3207, 161, 161, 161 },
+       { 3214, 163, 163, 163 },
+       { 3221, 166, 166, 166 },
+       { 3228, 168, 168, 168 },
+       { 3235, 171, 171, 171 },
+       { 3242, 173, 173, 173 },
+       { 3249, 176, 176, 176 },
+       { 3256, 18, 18, 18 },
+       { 3262, 179, 179, 179 },
+       { 3269, 181, 181, 181 },
+       { 3276, 184, 184, 184 },
+       { 3283, 186, 186, 186 },
+       { 3290, 189, 189, 189 },
+       { 3297, 191, 191, 191 },
+       { 3304, 194, 194, 194 },
+       { 3311, 196, 196, 196 },
+       { 3318, 199, 199, 199 },
+       { 3325, 201, 201, 201 },
+       { 3332, 20, 20, 20 },
+       { 3338, 204, 204, 204 },
+       { 3345, 207, 207, 207 },
+       { 3352, 209, 209, 209 },
+       { 3359, 212, 212, 212 },
+       { 3366, 214, 214, 214 },
+       { 3373, 217, 217, 217 },
+       { 3380, 219, 219, 219 },
+       { 3387, 222, 222, 222 },
+       { 3394, 224, 224, 224 },
+       { 3401, 227, 227, 227 },
+       { 3408, 23, 23, 23 },
+       { 3414, 229, 229, 229 },
+       { 3421, 232, 232, 232 },
+       { 3428, 235, 235, 235 },
+       { 3435, 237, 237, 237 },
+       { 3442, 240, 240, 240 },
+       { 3449, 242, 242, 242 },
+       { 3456, 245, 245, 245 },
+       { 3463, 247, 247, 247 },
+       { 3470, 250, 250, 250 },
+       { 3477, 252, 252, 252 },
+       { 3484, 240, 255, 240 },
+       { 3493, 240, 255, 240 },
+       { 3503, 224, 238, 224 },
+       { 3513, 193, 205, 193 },
+       { 3523, 131, 139, 131 },
+       { 3533, 255, 105, 180 },
+       { 3542, 255, 105, 180 },
+       { 3550, 255, 110, 180 },
+       { 3559, 238, 106, 167 },
+       { 3568, 205, 96, 144 },
+       { 3577, 139, 58, 98 },
+       { 3586, 205, 92, 92 },
+       { 3597, 205, 92, 92 },
+       { 3607, 255, 106, 106 },
+       { 3618, 238, 99, 99 },
+       { 3629, 205, 85, 85 },
+       { 3640, 139, 58, 58 },
+       { 3651, 75, 0, 130 },
+       { 3658, 255, 255, 240 },
+       { 3664, 255, 255, 240 },
+       { 3671, 238, 238, 224 },
+       { 3678, 205, 205, 193 },
+       { 3685, 139, 139, 131 },
+       { 3692, 240, 230, 140 },
+       { 3698, 255, 246, 143 },
+       { 3705, 238, 230, 133 },
+       { 3712, 205, 198, 115 },
+       { 3719, 139, 134, 78 },
+       { 3726, 230, 230, 250 },
+       { 3735, 255, 240, 245 },
+       { 3750, 255, 240, 245 },
+       { 3764, 255, 240, 245 },
+       { 3779, 238, 224, 229 },
+       { 3794, 205, 193, 197 },
+       { 3809, 139, 131, 134 },
+       { 3824, 124, 252, 0 },
+       { 3835, 124, 252, 0 },
+       { 3845, 255, 250, 205 },
+       { 3859, 255, 250, 205 },
+       { 3872, 255, 250, 205 },
+       { 3886, 238, 233, 191 },
+       { 3900, 205, 201, 165 },
+       { 3914, 139, 137, 112 },
+       { 3928, 173, 216, 230 },
+       { 3939, 240, 128, 128 },
+       { 3951, 224, 255, 255 },
+       { 3962, 238, 221, 130 },
+       { 3978, 250, 250, 210 },
+       { 4001, 211, 211, 211 },
+       { 4012, 144, 238, 144 },
+       { 4024, 211, 211, 211 },
+       { 4035, 255, 182, 193 },
+       { 4046, 255, 160, 122 },
+       { 4059, 32, 178, 170 },
+       { 4075, 135, 206, 250 },
+       { 4090, 132, 112, 255 },
+       { 4107, 119, 136, 153 },
+       { 4124, 119, 136, 153 },
+       { 4141, 176, 196, 222 },
+       { 4158, 255, 255, 224 },
+       { 4171, 173, 216, 230 },
+       { 4181, 191, 239, 255 },
+       { 4192, 178, 223, 238 },
+       { 4203, 154, 192, 205 },
+       { 4214, 104, 131, 139 },
+       { 4225, 240, 128, 128 },
+       { 4236, 224, 255, 255 },
+       { 4246, 224, 255, 255 },
+       { 4257, 209, 238, 238 },
+       { 4268, 180, 205, 205 },
+       { 4279, 122, 139, 139 },
+       { 4290, 238, 221, 130 },
+       { 4305, 255, 236, 139 },
+       { 4321, 238, 220, 130 },
+       { 4337, 205, 190, 112 },
+       { 4353, 139, 129, 76 },
+       { 4369, 250, 250, 210 },
+       { 4390, 211, 211, 211 },
+       { 4400, 144, 238, 144 },
+       { 4411, 211, 211, 211 },
+       { 4421, 255, 182, 193 },
+       { 4431, 255, 174, 185 },
+       { 4442, 238, 162, 173 },
+       { 4453, 205, 140, 149 },
+       { 4464, 139, 95, 101 },
+       { 4475, 255, 160, 122 },
+       { 4487, 255, 160, 122 },
+       { 4500, 238, 149, 114 },
+       { 4513, 205, 129, 98 },
+       { 4526, 139, 87, 66 },
+       { 4539, 32, 178, 170 },
+       { 4553, 135, 206, 250 },
+       { 4566, 176, 226, 255 },
+       { 4580, 164, 211, 238 },
+       { 4594, 141, 182, 205 },
+       { 4608, 96, 123, 139 },
+       { 4622, 132, 112, 255 },
+       { 4637, 119, 136, 153 },
+       { 4652, 119, 136, 153 },
+       { 4667, 176, 196, 222 },
+       { 4682, 202, 225, 255 },
+       { 4698, 188, 210, 238 },
+       { 4714, 162, 181, 205 },
+       { 4730, 110, 123, 139 },
+       { 4746, 255, 255, 224 },
+       { 4758, 255, 255, 224 },
+       { 4771, 238, 238, 209 },
+       { 4784, 205, 205, 180 },
+       { 4797, 139, 139, 122 },
+       { 4810, 0, 255, 0 },
+       { 4815, 50, 205, 50 },
+       { 4826, 50, 205, 50 },
+       { 4836, 250, 240, 230 },
+       { 4842, 255, 0, 255 },
+       { 4850, 255, 0, 255 },
+       { 4859, 238, 0, 238 },
+       { 4868, 205, 0, 205 },
+       { 4877, 139, 0, 139 },
+       { 4886, 176, 48, 96 },
+       { 4893, 255, 52, 179 },
+       { 4901, 238, 48, 167 },
+       { 4909, 205, 41, 144 },
+       { 4917, 139, 28, 98 },
+       { 4925, 102, 205, 170 },
+       { 4943, 0, 0, 205 },
+       { 4955, 186, 85, 211 },
+       { 4969, 147, 112, 219 },
+       { 4983, 60, 179, 113 },
+       { 5000, 123, 104, 238 },
+       { 5018, 0, 250, 154 },
+       { 5038, 72, 209, 204 },
+       { 5055, 199, 21, 133 },
+       { 5073, 102, 205, 170 },
+       { 5090, 0, 0, 205 },
+       { 5101, 186, 85, 211 },
+       { 5114, 224, 102, 255 },
+       { 5128, 209, 95, 238 },
+       { 5142, 180, 82, 205 },
+       { 5156, 122, 55, 139 },
+       { 5170, 147, 112, 219 },
+       { 5183, 171, 130, 255 },
+       { 5197, 159, 121, 238 },
+       { 5211, 137, 104, 205 },
+       { 5225, 93, 71, 139 },
+       { 5239, 60, 179, 113 },
+       { 5254, 123, 104, 238 },
+       { 5270, 0, 250, 154 },
+       { 5288, 72, 209, 204 },
+       { 5304, 199, 21, 133 },
+       { 5320, 25, 25, 112 },
+       { 5334, 25, 25, 112 },
+       { 5347, 245, 255, 250 },
+       { 5358, 245, 255, 250 },
+       { 5368, 255, 228, 225 },
+       { 5379, 255, 228, 225 },
+       { 5389, 255, 228, 225 },
+       { 5400, 238, 213, 210 },
+       { 5411, 205, 183, 181 },
+       { 5422, 139, 125, 123 },
+       { 5433, 255, 228, 181 },
+       { 5442, 255, 222, 173 },
+       { 5455, 255, 222, 173 },
+       { 5467, 255, 222, 173 },
+       { 5480, 238, 207, 161 },
+       { 5493, 205, 179, 139 },
+       { 5506, 139, 121, 94 },
+       { 5519, 0, 0, 128 },
+       { 5524, 0, 0, 128 },
+       { 5534, 0, 0, 128 },
+       { 5543, 253, 245, 230 },
+       { 5552, 253, 245, 230 },
+       { 5560, 128, 128, 0 },
+       { 5566, 107, 142, 35 },
+       { 5577, 107, 142, 35 },
+       { 5587, 192, 255, 62 },
+       { 5598, 179, 238, 58 },
+       { 5609, 154, 205, 50 },
+       { 5620, 105, 139, 34 },
+       { 5631, 255, 165, 0 },
+       { 5638, 255, 69, 0 },
+       { 5649, 255, 165, 0 },
+       { 5657, 238, 154, 0 },
+       { 5665, 205, 133, 0 },
+       { 5673, 139, 90, 0 },
+       { 5681, 255, 69, 0 },
+       { 5691, 255, 69, 0 },
+       { 5702, 238, 64, 0 },
+       { 5713, 205, 55, 0 },
+       { 5724, 139, 37, 0 },
+       { 5735, 218, 112, 214 },
+       { 5742, 255, 131, 250 },
+       { 5750, 238, 122, 233 },
+       { 5758, 205, 105, 201 },
+       { 5766, 139, 71, 137 },
+       { 5774, 238, 232, 170 },
+       { 5789, 152, 251, 152 },
+       { 5800, 175, 238, 238 },
+       { 5815, 219, 112, 147 },
+       { 5831, 238, 232, 170 },
+       { 5845, 152, 251, 152 },
+       { 5855, 154, 255, 154 },
+       { 5866, 144, 238, 144 },
+       { 5877, 124, 205, 124 },
+       { 5888, 84, 139, 84 },
+       { 5899, 175, 238, 238 },
+       { 5913, 187, 255, 255 },
+       { 5928, 174, 238, 238 },
+       { 5943, 150, 205, 205 },
+       { 5958, 102, 139, 139 },
+       { 5973, 219, 112, 147 },
+       { 5987, 255, 130, 171 },
+       { 6002, 238, 121, 159 },
+       { 6017, 205, 104, 137 },
+       { 6032, 139, 71, 93 },
+       { 6047, 255, 239, 213 },
+       { 6059, 255, 239, 213 },
+       { 6070, 255, 218, 185 },
+       { 6081, 255, 218, 185 },
+       { 6091, 255, 218, 185 },
+       { 6102, 238, 203, 173 },
+       { 6113, 205, 175, 149 },
+       { 6124, 139, 119, 101 },
+       { 6135, 205, 133, 63 },
+       { 6140, 255, 192, 203 },
+       { 6145, 255, 181, 197 },
+       { 6151, 238, 169, 184 },
+       { 6157, 205, 145, 158 },
+       { 6163, 139, 99, 108 },
+       { 6169, 221, 160, 221 },
+       { 6174, 255, 187, 255 },
+       { 6180, 238, 174, 238 },
+       { 6186, 205, 150, 205 },
+       { 6192, 139, 102, 139 },
+       { 6198, 176, 224, 230 },
+       { 6210, 176, 224, 230 },
+       { 6221, 160, 32, 240 },
+       { 6228, 155, 48, 255 },
+       { 6236, 145, 44, 238 },
+       { 6244, 125, 38, 205 },
+       { 6252, 85, 26, 139 },
+       { 6260, 102, 51, 153 },
+       { 6275, 102, 51, 153 },
+       { 6289, 255, 0, 0 },
+       { 6293, 255, 0, 0 },
+       { 6298, 238, 0, 0 },
+       { 6303, 205, 0, 0 },
+       { 6308, 139, 0, 0 },
+       { 6313, 188, 143, 143 },
+       { 6324, 188, 143, 143 },
+       { 6334, 255, 193, 193 },
+       { 6345, 238, 180, 180 },
+       { 6356, 205, 155, 155 },
+       { 6367, 139, 105, 105 },
+       { 6378, 65, 105, 225 },
+       { 6389, 65, 105, 225 },
+       { 6399, 72, 118, 255 },
+       { 6410, 67, 110, 238 },
+       { 6421, 58, 95, 205 },
+       { 6432, 39, 64, 139 },
+       { 6443, 139, 69, 19 },
+       { 6456, 139, 69, 19 },
+       { 6468, 250, 128, 114 },
+       { 6475, 255, 140, 105 },
+       { 6483, 238, 130, 98 },
+       { 6491, 205, 112, 84 },
+       { 6499, 139, 76, 57 },
+       { 6507, 244, 164, 96 },
+       { 6519, 244, 164, 96 },
+       { 6530, 46, 139, 87 },
+       { 6540, 46, 139, 87 },
+       { 6549, 84, 255, 159 },
+       { 6559, 78, 238, 148 },
+       { 6569, 67, 205, 128 },
+       { 6579, 46, 139, 87 },
+       { 6589, 255, 245, 238 },
+       { 6598, 255, 245, 238 },
+       { 6608, 238, 229, 222 },
+       { 6618, 205, 197, 191 },
+       { 6628, 139, 134, 130 },
+       { 6638, 160, 82, 45 },
+       { 6645, 255, 130, 71 },
+       { 6653, 238, 121, 66 },
+       { 6661, 205, 104, 57 },
+       { 6669, 139, 71, 38 },
+       { 6677, 192, 192, 192 },
+       { 6684, 135, 206, 235 },
+       { 6693, 135, 206, 235 },
+       { 6701, 135, 206, 255 },
+       { 6710, 126, 192, 238 },
+       { 6719, 108, 166, 205 },
+       { 6728, 74, 112, 139 },
+       { 6737, 106, 90, 205 },
+       { 6748, 112, 128, 144 },
+       { 6759, 112, 128, 144 },
+       { 6770, 106, 90, 205 },
+       { 6780, 131, 111, 255 },
+       { 6791, 122, 103, 238 },
+       { 6802, 105, 89, 205 },
+       { 6813, 71, 60, 139 },
+       { 6824, 112, 128, 144 },
+       { 6834, 198, 226, 255 },
+       { 6845, 185, 211, 238 },
+       { 6856, 159, 182, 205 },
+       { 6867, 108, 123, 139 },
+       { 6878, 112, 128, 144 },
+       { 6888, 255, 250, 250 },
+       { 6893, 255, 250, 250 },
+       { 6899, 238, 233, 233 },
+       { 6905, 205, 201, 201 },
+       { 6911, 139, 137, 137 },
+       { 6917, 0, 255, 127 },
+       { 6930, 0, 255, 127 },
+       { 6942, 0, 255, 127 },
+       { 6955, 0, 238, 118 },
+       { 6968, 0, 205, 102 },
+       { 6981, 0, 139, 69 },
+       { 6994, 70, 130, 180 },
+       { 7005, 70, 130, 180 },
+       { 7015, 99, 184, 255 },
+       { 7026, 92, 172, 238 },
+       { 7037, 79, 148, 205 },
+       { 7048, 54, 100, 139 },
+       { 7059, 210, 180, 140 },
+       { 7063, 255, 165, 79 },
+       { 7068, 238, 154, 73 },
+       { 7073, 205, 133, 63 },
+       { 7078, 139, 90, 43 },
+       { 7083, 0, 128, 128 },
+       { 7088, 216, 191, 216 },
+       { 7096, 255, 225, 255 },
+       { 7105, 238, 210, 238 },
+       { 7114, 205, 181, 205 },
+       { 7123, 139, 123, 139 },
+       { 7132, 255, 99, 71 },
+       { 7139, 255, 99, 71 },
+       { 7147, 238, 92, 66 },
+       { 7155, 205, 79, 57 },
+       { 7163, 139, 54, 38 },
+       { 7171, 64, 224, 208 },
+       { 7181, 0, 245, 255 },
+       { 7192, 0, 229, 238 },
+       { 7203, 0, 197, 205 },
+       { 7214, 0, 134, 139 },
+       { 7225, 238, 130, 238 },
+       { 7232, 208, 32, 144 },
+       { 7243, 208, 32, 144 },
+       { 7253, 255, 62, 150 },
+       { 7264, 238, 58, 140 },
+       { 7275, 205, 50, 120 },
+       { 7286, 139, 34, 82 },
+       { 7297, 128, 128, 128 },
+       { 7306, 0, 128, 0 },
+       { 7316, 128, 128, 128 },
+       { 7325, 128, 0, 0 },
+       { 7336, 128, 0, 128 },
+       { 7347, 128, 128, 128 },
+       { 7355, 0, 128, 0 },
+       { 7364, 128, 128, 128 },
+       { 7372, 128, 0, 0 },
+       { 7382, 128, 0, 128 },
+       { 7392, 245, 222, 179 },
+       { 7398, 255, 231, 186 },
+       { 7405, 238, 216, 174 },
+       { 7412, 205, 186, 150 },
+       { 7419, 139, 126, 102 },
+       { 7426, 255, 255, 255 },
+       { 7432, 245, 245, 245 },
+       { 7444, 245, 245, 245 },
+       { 7455, 190, 190, 190 },
+       { 7464, 0, 255, 0 },
+       { 7474, 190, 190, 190 },
+       { 7483, 176, 48, 96 },
+       { 7494, 160, 32, 240 },
+       { 7505, 190, 190, 190 },
+       { 7513, 0, 255, 0 },
+       { 7522, 190, 190, 190 },
+       { 7530, 176, 48, 96 },
+       { 7540, 160, 32, 240 },
+       { 7550, 255, 255, 0 },
+       { 7557, 154, 205, 50 },
+       { 7570, 255, 255, 0 },
+       { 7578, 238, 238, 0 },
+       { 7586, 205, 205, 0 },
+       { 7594, 139, 139, 0 },
+       { 7602, 154, 205, 50 }
+};