summaryrefslogtreecommitdiffstats
path: root/src/pixman/demos
diff options
context:
space:
mode:
Diffstat (limited to 'src/pixman/demos')
-rw-r--r--src/pixman/demos/Makefile.am52
-rw-r--r--src/pixman/demos/alpha-test.c119
-rw-r--r--src/pixman/demos/checkerboard.c71
-rw-r--r--src/pixman/demos/clip-in.c50
-rw-r--r--src/pixman/demos/clip-test.c97
-rw-r--r--src/pixman/demos/composite-test.c186
-rw-r--r--src/pixman/demos/conical-test.c100
-rw-r--r--src/pixman/demos/convolution-test.c47
-rw-r--r--src/pixman/demos/gradient-test.c92
-rw-r--r--src/pixman/demos/gtk-utils.c179
-rw-r--r--src/pixman/demos/gtk-utils.h15
-rw-r--r--src/pixman/demos/linear-gradient.c50
-rw-r--r--src/pixman/demos/parrot.c1079
-rw-r--r--src/pixman/demos/parrot.jpgbin0 -> 72289 bytes
-rw-r--r--src/pixman/demos/quad2quad.c2183
-rw-r--r--src/pixman/demos/radial-test.c208
-rw-r--r--src/pixman/demos/scale.c436
-rw-r--r--src/pixman/demos/scale.ui332
-rw-r--r--src/pixman/demos/screen-test.c44
-rw-r--r--src/pixman/demos/srgb-test.c87
-rw-r--r--src/pixman/demos/srgb-trap-test.c119
-rw-r--r--src/pixman/demos/trap-test.c49
-rw-r--r--src/pixman/demos/tri-test.c48
-rw-r--r--src/pixman/demos/zone_plate.pngbin0 -> 228732 bytes
24 files changed, 5643 insertions, 0 deletions
diff --git a/src/pixman/demos/Makefile.am b/src/pixman/demos/Makefile.am
new file mode 100644
index 0000000..e04743d
--- /dev/null
+++ b/src/pixman/demos/Makefile.am
@@ -0,0 +1,52 @@
+EXTRA_DIST = parrot.c parrot.jpg scale.ui
+
+if HAVE_GTK
+
+AM_CFLAGS = $(OPENMP_CFLAGS)
+AM_LDFLAGS = $(OPENMP_CFLAGS)
+
+LDADD = $(top_builddir)/pixman/libpixman-1.la -lm $(GTK_LIBS) $(PNG_LIBS)
+AM_CPPFLAGS = -I$(top_srcdir)/pixman -I$(top_builddir)/pixman $(GTK_CFLAGS) $(PNG_CFLAGS)
+
+GTK_UTILS = gtk-utils.c gtk-utils.h ../test/utils.c ../test/utils.h \
+ ../test/utils-prng.c ../test/utils-prng.h
+
+DEMOS = \
+ clip-test \
+ clip-in \
+ composite-test \
+ gradient-test \
+ radial-test \
+ linear-gradient \
+ conical-test \
+ alpha-test \
+ screen-test \
+ convolution-test \
+ trap-test \
+ tri-test \
+ quad2quad \
+ checkerboard \
+ srgb-trap-test \
+ srgb-test \
+ scale
+
+gradient_test_SOURCES = gradient-test.c $(GTK_UTILS)
+alpha_test_SOURCES = alpha-test.c $(GTK_UTILS)
+composite_test_SOURCES = composite-test.c $(GTK_UTILS)
+clip_test_SOURCES = clip-test.c $(GTK_UTILS)
+clip_in_SOURCES = clip-in.c $(GTK_UTILS)
+trap_test_SOURCES = trap-test.c $(GTK_UTILS)
+screen_test_SOURCES = screen-test.c $(GTK_UTILS)
+convolution_test_SOURCES = convolution-test.c $(GTK_UTILS)
+radial_test_SOURCES = radial-test.c $(GTK_UTILS)
+linear_gradient_SOURCES = linear-gradient.c $(GTK_UTILS)
+conical_test_SOURCES = conical-test.c $(GTK_UTILS)
+tri_test_SOURCES = tri-test.c $(GTK_UTILS)
+checkerboard_SOURCES = checkerboard.c $(GTK_UTILS)
+srgb_test_SOURCES = srgb-test.c $(GTK_UTILS)
+srgb_trap_test_SOURCES = srgb-trap-test.c $(GTK_UTILS)
+scale_SOURCES = scale.c $(GTK_UTILS)
+
+noinst_PROGRAMS = $(DEMOS)
+
+endif
diff --git a/src/pixman/demos/alpha-test.c b/src/pixman/demos/alpha-test.c
new file mode 100644
index 0000000..54e30fa
--- /dev/null
+++ b/src/pixman/demos/alpha-test.c
@@ -0,0 +1,119 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include "pixman.h"
+#include "gtk-utils.h"
+
+int
+main (int argc, char **argv)
+{
+#define WIDTH 400
+#define HEIGHT 200
+
+ uint32_t *alpha = malloc (WIDTH * HEIGHT * 4);
+ uint32_t *dest = malloc (WIDTH * HEIGHT * 4);
+ uint32_t *src = malloc (WIDTH * HEIGHT * 4);
+ pixman_image_t *grad_img;
+ pixman_image_t *alpha_img;
+ pixman_image_t *dest_img;
+ pixman_image_t *src_img;
+ int i;
+ pixman_gradient_stop_t stops[2] =
+ {
+ { pixman_int_to_fixed (0), { 0x0000, 0x0000, 0x0000, 0x0000 } },
+ { pixman_int_to_fixed (1), { 0xffff, 0x0000, 0x1111, 0xffff } }
+ };
+ pixman_point_fixed_t p1 = { pixman_double_to_fixed (0), 0 };
+ pixman_point_fixed_t p2 = { pixman_double_to_fixed (WIDTH),
+ pixman_int_to_fixed (0) };
+#if 0
+ pixman_transform_t trans = {
+ { { pixman_double_to_fixed (2), pixman_double_to_fixed (0.5), pixman_double_to_fixed (-100), },
+ { pixman_double_to_fixed (0), pixman_double_to_fixed (3), pixman_double_to_fixed (0), },
+ { pixman_double_to_fixed (0), pixman_double_to_fixed (0.000), pixman_double_to_fixed (1.0) }
+ }
+ };
+#else
+ pixman_transform_t trans = {
+ { { pixman_fixed_1, 0, 0 },
+ { 0, pixman_fixed_1, 0 },
+ { 0, 0, pixman_fixed_1 } }
+ };
+#endif
+
+#if 0
+ pixman_point_fixed_t c_inner;
+ pixman_point_fixed_t c_outer;
+ pixman_fixed_t r_inner;
+ pixman_fixed_t r_outer;
+#endif
+
+ for (i = 0; i < WIDTH * HEIGHT; ++i)
+ alpha[i] = 0x4f00004f; /* pale blue */
+
+ alpha_img = pixman_image_create_bits (PIXMAN_a8r8g8b8,
+ WIDTH, HEIGHT,
+ alpha,
+ WIDTH * 4);
+
+ for (i = 0; i < WIDTH * HEIGHT; ++i)
+ dest[i] = 0xffffff00; /* yellow */
+
+ dest_img = pixman_image_create_bits (PIXMAN_a8r8g8b8,
+ WIDTH, HEIGHT,
+ dest,
+ WIDTH * 4);
+
+ for (i = 0; i < WIDTH * HEIGHT; ++i)
+ src[i] = 0xffff0000;
+
+ src_img = pixman_image_create_bits (PIXMAN_a8r8g8b8,
+ WIDTH, HEIGHT,
+ src,
+ WIDTH * 4);
+
+#if 0
+ c_inner.x = pixman_double_to_fixed (50.0);
+ c_inner.y = pixman_double_to_fixed (50.0);
+ c_outer.x = pixman_double_to_fixed (50.0);
+ c_outer.y = pixman_double_to_fixed (50.0);
+ r_inner = 0;
+ r_outer = pixman_double_to_fixed (50.0);
+
+ grad_img = pixman_image_create_conical_gradient (&c_inner, r_inner,
+ stops, 2);
+#endif
+#if 0
+ grad_img = pixman_image_create_conical_gradient (&c_inner, r_inner,
+ stops, 2);
+ grad_img = pixman_image_create_linear_gradient (&c_inner, &c_outer,
+ r_inner, r_outer,
+ stops, 2);
+#endif
+
+ grad_img = pixman_image_create_linear_gradient (&p1, &p2,
+ stops, 2);
+
+ pixman_image_set_transform (grad_img, &trans);
+ pixman_image_set_repeat (grad_img, PIXMAN_REPEAT_PAD);
+
+ pixman_image_composite (PIXMAN_OP_OVER, grad_img, NULL, alpha_img,
+ 0, 0, 0, 0, 0, 0, 10 * WIDTH, HEIGHT);
+
+ pixman_image_set_alpha_map (src_img, alpha_img, 10, 10);
+
+ pixman_image_composite (PIXMAN_OP_OVER, src_img, NULL, dest_img,
+ 0, 0, 0, 0, 0, 0, 10 * WIDTH, HEIGHT);
+
+ printf ("0, 0: %x\n", dest[0]);
+ printf ("10, 10: %x\n", dest[10 * 10 + 10]);
+ printf ("w, h: %x\n", dest[(HEIGHT - 1) * 100 + (WIDTH - 1)]);
+
+ show_image (dest_img);
+
+ pixman_image_unref (src_img);
+ pixman_image_unref (grad_img);
+ pixman_image_unref (alpha_img);
+ free (dest);
+
+ return 0;
+}
diff --git a/src/pixman/demos/checkerboard.c b/src/pixman/demos/checkerboard.c
new file mode 100644
index 0000000..449fedb
--- /dev/null
+++ b/src/pixman/demos/checkerboard.c
@@ -0,0 +1,71 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include "pixman.h"
+#include "gtk-utils.h"
+
+int
+main (int argc, char **argv)
+{
+#define WIDTH 400
+#define HEIGHT 400
+#define TILE_SIZE 25
+
+ pixman_image_t *checkerboard;
+ pixman_image_t *destination;
+#define D2F(d) (pixman_double_to_fixed(d))
+ pixman_transform_t trans = { {
+ { D2F (-1.96830), D2F (-1.82250), D2F (512.12250)},
+ { D2F (0.00000), D2F (-7.29000), D2F (1458.00000)},
+ { D2F (0.00000), D2F (-0.00911), D2F (0.59231)},
+ }};
+ int i, j;
+
+ checkerboard = pixman_image_create_bits (PIXMAN_a8r8g8b8,
+ WIDTH, HEIGHT,
+ NULL, 0);
+
+ destination = pixman_image_create_bits (PIXMAN_a8r8g8b8,
+ WIDTH, HEIGHT,
+ NULL, 0);
+
+ for (i = 0; i < HEIGHT / TILE_SIZE; ++i)
+ {
+ for (j = 0; j < WIDTH / TILE_SIZE; ++j)
+ {
+ double u = (double)(j + 1) / (WIDTH / TILE_SIZE);
+ double v = (double)(i + 1) / (HEIGHT / TILE_SIZE);
+ pixman_color_t black = { 0, 0, 0, 0xffff };
+ pixman_color_t white = {
+ v * 0xffff,
+ u * 0xffff,
+ (1 - (double)u) * 0xffff,
+ 0xffff };
+ pixman_color_t *c;
+ pixman_image_t *fill;
+
+ if ((j & 1) != (i & 1))
+ c = &black;
+ else
+ c = &white;
+
+ fill = pixman_image_create_solid_fill (c);
+
+ pixman_image_composite (PIXMAN_OP_SRC, fill, NULL, checkerboard,
+ 0, 0, 0, 0, j * TILE_SIZE, i * TILE_SIZE,
+ TILE_SIZE, TILE_SIZE);
+ }
+ }
+
+ pixman_image_set_transform (checkerboard, &trans);
+ pixman_image_set_filter (checkerboard, PIXMAN_FILTER_BEST, NULL, 0);
+ pixman_image_set_repeat (checkerboard, PIXMAN_REPEAT_NONE);
+
+ pixman_image_composite (PIXMAN_OP_SRC,
+ checkerboard, NULL, destination,
+ 0, 0, 0, 0, 0, 0,
+ WIDTH, HEIGHT);
+
+ show_image (destination);
+
+ return 0;
+}
diff --git a/src/pixman/demos/clip-in.c b/src/pixman/demos/clip-in.c
new file mode 100644
index 0000000..5157981
--- /dev/null
+++ b/src/pixman/demos/clip-in.c
@@ -0,0 +1,50 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include "pixman.h"
+#include "gtk-utils.h"
+
+/* This test demonstrates that clipping is done totally different depending
+ * on whether the source is transformed or not.
+ */
+int
+main (int argc, char **argv)
+{
+#define WIDTH 200
+#define HEIGHT 200
+
+#define SMALL 25
+
+ uint32_t *sbits = malloc (SMALL * SMALL * 4);
+ uint32_t *bits = malloc (WIDTH * HEIGHT * 4);
+ pixman_transform_t trans = {
+ {
+ { pixman_double_to_fixed (1.0), pixman_double_to_fixed (0), pixman_double_to_fixed (-0.1), },
+ { pixman_double_to_fixed (0), pixman_double_to_fixed (1), pixman_double_to_fixed (-0.1), },
+ { pixman_double_to_fixed (0), pixman_double_to_fixed (0), pixman_double_to_fixed (1.0) }
+ } };
+
+ pixman_image_t *src_img = pixman_image_create_bits (PIXMAN_a8r8g8b8, SMALL, SMALL, sbits, 4 * SMALL);
+ pixman_image_t *dest_img = pixman_image_create_bits (PIXMAN_a8r8g8b8, WIDTH, HEIGHT, bits, 4 * WIDTH);
+
+ memset (bits, 0xff, WIDTH * HEIGHT * 4);
+ memset (sbits, 0x00, SMALL * SMALL * 4);
+
+ pixman_image_composite (PIXMAN_OP_IN,
+ src_img, NULL, dest_img,
+ 0, 0, 0, 0, SMALL, SMALL, 200, 200);
+
+ pixman_image_set_transform (src_img, &trans);
+
+ pixman_image_composite (PIXMAN_OP_IN,
+ src_img, NULL, dest_img,
+ 0, 0, 0, 0, SMALL * 2, SMALL * 2, 200, 200);
+
+ show_image (dest_img);
+
+ pixman_image_unref (src_img);
+ pixman_image_unref (dest_img);
+ free (bits);
+
+ return 0;
+}
diff --git a/src/pixman/demos/clip-test.c b/src/pixman/demos/clip-test.c
new file mode 100644
index 0000000..aa0df44
--- /dev/null
+++ b/src/pixman/demos/clip-test.c
@@ -0,0 +1,97 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include "pixman.h"
+#include "gtk-utils.h"
+
+#define WIDTH 200
+#define HEIGHT 200
+
+static pixman_image_t *
+create_solid_bits (uint32_t pixel)
+{
+ uint32_t *pixels = malloc (WIDTH * HEIGHT * 4);
+ int i;
+
+ for (i = 0; i < WIDTH * HEIGHT; ++i)
+ pixels[i] = pixel;
+
+ return pixman_image_create_bits (PIXMAN_a8r8g8b8,
+ WIDTH, HEIGHT,
+ pixels,
+ WIDTH * 4);
+}
+
+int
+main (int argc, char **argv)
+{
+ pixman_image_t *gradient_img;
+ pixman_image_t *src_img, *dst_img;
+ pixman_gradient_stop_t stops[2] =
+ {
+ { pixman_int_to_fixed (0), { 0xffff, 0x0000, 0x0000, 0xffff } },
+ { pixman_int_to_fixed (1), { 0xffff, 0xffff, 0x0000, 0xffff } }
+ };
+#if 0
+ pixman_point_fixed_t p1 = { 0, 0 };
+ pixman_point_fixed_t p2 = { pixman_int_to_fixed (WIDTH),
+ pixman_int_to_fixed (HEIGHT) };
+#endif
+ pixman_point_fixed_t c_inner;
+ pixman_point_fixed_t c_outer;
+ pixman_fixed_t r_inner;
+ pixman_fixed_t r_outer;
+ pixman_region32_t clip_region;
+ pixman_transform_t trans = {
+ { { pixman_double_to_fixed (1.3), pixman_double_to_fixed (0), pixman_double_to_fixed (-0.5), },
+ { pixman_double_to_fixed (0), pixman_double_to_fixed (1), pixman_double_to_fixed (-0.5), },
+ { pixman_double_to_fixed (0), pixman_double_to_fixed (0), pixman_double_to_fixed (1.0) }
+ }
+ };
+
+ src_img = create_solid_bits (0xff0000ff);
+
+ c_inner.x = pixman_double_to_fixed (100.0);
+ c_inner.y = pixman_double_to_fixed (100.0);
+ c_outer.x = pixman_double_to_fixed (100.0);
+ c_outer.y = pixman_double_to_fixed (100.0);
+ r_inner = 0;
+ r_outer = pixman_double_to_fixed (100.0);
+
+ gradient_img = pixman_image_create_radial_gradient (&c_inner, &c_outer,
+ r_inner, r_outer,
+ stops, 2);
+
+#if 0
+ gradient_img = pixman_image_create_linear_gradient (&p1, &p2,
+ stops, 2);
+
+#endif
+
+ pixman_image_composite (PIXMAN_OP_OVER, gradient_img, NULL, src_img,
+ 0, 0, 0, 0, 0, 0, WIDTH, HEIGHT);
+
+ pixman_region32_init_rect (&clip_region, 50, 0, 100, 200);
+ pixman_image_set_clip_region32 (src_img, &clip_region);
+ pixman_image_set_source_clipping (src_img, TRUE);
+ pixman_image_set_has_client_clip (src_img, TRUE);
+ pixman_image_set_transform (src_img, &trans);
+ pixman_image_set_repeat (src_img, PIXMAN_REPEAT_NORMAL);
+
+ dst_img = create_solid_bits (0xffff0000);
+ pixman_image_composite (PIXMAN_OP_OVER, src_img, NULL, dst_img,
+ 0, 0, 0, 0, 0, 0, WIDTH, HEIGHT);
+
+
+#if 0
+ printf ("0, 0: %x\n", src[0]);
+ printf ("10, 10: %x\n", src[10 * 10 + 10]);
+ printf ("w, h: %x\n", src[(HEIGHT - 1) * 100 + (WIDTH - 1)]);
+#endif
+
+ show_image (dst_img);
+
+ pixman_image_unref (gradient_img);
+ pixman_image_unref (src_img);
+
+ return 0;
+}
diff --git a/src/pixman/demos/composite-test.c b/src/pixman/demos/composite-test.c
new file mode 100644
index 0000000..8213e2f
--- /dev/null
+++ b/src/pixman/demos/composite-test.c
@@ -0,0 +1,186 @@
+#include <gtk/gtk.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include "pixman.h"
+#include "gtk-utils.h"
+#include "parrot.c"
+
+#define WIDTH 80
+#define HEIGHT 80
+
+typedef struct {
+ const char *name;
+ pixman_op_t op;
+} operator_t;
+
+static const operator_t operators[] = {
+ { "CLEAR", PIXMAN_OP_CLEAR },
+ { "SRC", PIXMAN_OP_SRC },
+ { "DST", PIXMAN_OP_DST },
+ { "OVER", PIXMAN_OP_OVER },
+ { "OVER_REVERSE", PIXMAN_OP_OVER_REVERSE },
+ { "IN", PIXMAN_OP_IN },
+ { "IN_REVERSE", PIXMAN_OP_IN_REVERSE },
+ { "OUT", PIXMAN_OP_OUT },
+ { "OUT_REVERSE", PIXMAN_OP_OUT_REVERSE },
+ { "ATOP", PIXMAN_OP_ATOP },
+ { "ATOP_REVERSE", PIXMAN_OP_ATOP_REVERSE },
+ { "XOR", PIXMAN_OP_XOR },
+ { "ADD", PIXMAN_OP_ADD },
+ { "SATURATE", PIXMAN_OP_SATURATE },
+
+ { "MULTIPLY", PIXMAN_OP_MULTIPLY },
+ { "SCREEN", PIXMAN_OP_SCREEN },
+ { "OVERLAY", PIXMAN_OP_OVERLAY },
+ { "DARKEN", PIXMAN_OP_DARKEN },
+ { "LIGHTEN", PIXMAN_OP_LIGHTEN },
+ { "COLOR_DODGE", PIXMAN_OP_COLOR_DODGE },
+ { "COLOR_BURN", PIXMAN_OP_COLOR_BURN },
+ { "HARD_LIGHT", PIXMAN_OP_HARD_LIGHT },
+ { "SOFT_LIGHT", PIXMAN_OP_SOFT_LIGHT },
+ { "DIFFERENCE", PIXMAN_OP_DIFFERENCE },
+ { "EXCLUSION", PIXMAN_OP_EXCLUSION },
+ { "HSL_HUE", PIXMAN_OP_HSL_HUE },
+ { "HSL_SATURATION", PIXMAN_OP_HSL_SATURATION },
+ { "HSL_COLOR", PIXMAN_OP_HSL_COLOR },
+ { "HSL_LUMINOSITY", PIXMAN_OP_HSL_LUMINOSITY },
+};
+
+static uint32_t
+reader (const void *src, int size)
+{
+ switch (size)
+ {
+ case 1:
+ return *(uint8_t *)src;
+ case 2:
+ return *(uint16_t *)src;
+ case 4:
+ return *(uint32_t *)src;
+ default:
+ g_assert_not_reached();
+ }
+}
+
+static void
+writer (void *src, uint32_t value, int size)
+{
+ switch (size)
+ {
+ case 1:
+ *(uint8_t *)src = value;
+ break;
+
+ case 2:
+ *(uint16_t *)src = value;
+ break;
+
+ case 4:
+ *(uint32_t *)src = value;
+ break;
+
+ default:
+ break;
+ }
+}
+
+int
+main (int argc, char **argv)
+{
+#define d2f pixman_double_to_fixed
+
+ GtkWidget *window, *swindow;
+ GtkWidget *table;
+ uint32_t *dest = malloc (WIDTH * HEIGHT * 4);
+ uint32_t *src = malloc (WIDTH * HEIGHT * 4);
+ pixman_image_t *gradient, *parrot;
+ pixman_image_t *dest_img;
+ pixman_point_fixed_t p1 = { -10 << 16, 10 << 16 };
+ pixman_point_fixed_t p2 = { (WIDTH + 10) << 16, (HEIGHT - 10) << 16 };
+ uint16_t alpha = 0xdddd;
+ pixman_gradient_stop_t stops[6] =
+ {
+ { d2f (0.0), { 0xf2f2, 0x8787, 0x7d7d, alpha } },
+ { d2f (0.22), { 0xf3f3, 0xeaea, 0x8383, alpha } },
+ { d2f (0.42), { 0x6b6b, 0xc0c0, 0x7777, alpha } },
+ { d2f (0.57), { 0x4b4b, 0xc9c9, 0xf5f5, alpha } },
+ { d2f (0.75), { 0x6a6a, 0x7f7f, 0xbebe, alpha } },
+ { d2f (1.0), { 0xeded, 0x8282, 0xb0b0, alpha } },
+ };
+
+ int i;
+
+ gtk_init (&argc, &argv);
+
+ window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
+
+ gtk_window_set_default_size (GTK_WINDOW (window), 800, 600);
+
+ g_signal_connect (window, "delete-event",
+ G_CALLBACK (gtk_main_quit),
+ NULL);
+ table = gtk_table_new (G_N_ELEMENTS (operators) / 6, 6, TRUE);
+
+ gradient = pixman_image_create_linear_gradient (&p1, &p2, stops, G_N_ELEMENTS (stops));
+ parrot = pixman_image_create_bits (PIXMAN_a8r8g8b8, WIDTH, HEIGHT, (uint32_t *)parrot_bits, WIDTH * 4);
+
+ pixman_image_set_repeat (gradient, PIXMAN_REPEAT_PAD);
+
+ dest_img = pixman_image_create_bits (PIXMAN_a8r8g8b8,
+ WIDTH, HEIGHT,
+ NULL,
+ WIDTH * 4);
+ pixman_image_set_accessors (dest_img, reader, writer);
+
+ for (i = 0; i < G_N_ELEMENTS (operators); ++i)
+ {
+ GtkWidget *image;
+ GdkPixbuf *pixbuf;
+ GtkWidget *vbox;
+ GtkWidget *label;
+
+ vbox = gtk_vbox_new (FALSE, 0);
+
+ label = gtk_label_new (operators[i].name);
+ gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 6);
+ gtk_widget_show (label);
+
+ pixman_image_composite (PIXMAN_OP_SRC, gradient, NULL, dest_img,
+ 0, 0, 0, 0, 0, 0, WIDTH, HEIGHT);
+ pixman_image_composite (operators[i].op, parrot, NULL, dest_img,
+ 0, 0, 0, 0, 0, 0, WIDTH, HEIGHT);
+ pixbuf = pixbuf_from_argb32 (pixman_image_get_data (dest_img),
+ WIDTH, HEIGHT, WIDTH * 4);
+ image = gtk_image_new_from_pixbuf (pixbuf);
+ gtk_box_pack_start (GTK_BOX (vbox), image, FALSE, FALSE, 0);
+ gtk_widget_show (image);
+
+ gtk_table_attach_defaults (GTK_TABLE (table), vbox,
+ i % 6, (i % 6) + 1, i / 6, (i / 6) + 1);
+ gtk_widget_show (vbox);
+
+ g_object_unref (pixbuf);
+ }
+
+ pixman_image_unref (gradient);
+ free (src);
+ pixman_image_unref (dest_img);
+ free (dest);
+
+ swindow = gtk_scrolled_window_new (NULL, NULL);
+ gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (swindow),
+ GTK_POLICY_AUTOMATIC,
+ GTK_POLICY_AUTOMATIC);
+
+ gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW (swindow), table);
+ gtk_widget_show (table);
+
+ gtk_container_add (GTK_CONTAINER (window), swindow);
+ gtk_widget_show (swindow);
+
+ gtk_widget_show (window);
+
+ gtk_main ();
+
+ return 0;
+}
diff --git a/src/pixman/demos/conical-test.c b/src/pixman/demos/conical-test.c
new file mode 100644
index 0000000..6b32430
--- /dev/null
+++ b/src/pixman/demos/conical-test.c
@@ -0,0 +1,100 @@
+#include "../test/utils.h"
+#include "gtk-utils.h"
+
+#define SIZE 128
+#define GRADIENTS_PER_ROW 7
+#define NUM_ROWS ((NUM_GRADIENTS + GRADIENTS_PER_ROW - 1) / GRADIENTS_PER_ROW)
+#define WIDTH (SIZE * GRADIENTS_PER_ROW)
+#define HEIGHT (SIZE * NUM_ROWS)
+#define NUM_GRADIENTS 35
+
+#define double_to_color(x) \
+ (((uint32_t) ((x)*65536)) - (((uint32_t) ((x)*65536)) >> 16))
+
+#define PIXMAN_STOP(offset,r,g,b,a) \
+ { pixman_double_to_fixed (offset), \
+ { \
+ double_to_color (r), \
+ double_to_color (g), \
+ double_to_color (b), \
+ double_to_color (a) \
+ } \
+ }
+
+
+static const pixman_gradient_stop_t stops[] = {
+ PIXMAN_STOP (0.25, 1, 0, 0, 0.7),
+ PIXMAN_STOP (0.5, 1, 1, 0, 0.7),
+ PIXMAN_STOP (0.75, 0, 1, 0, 0.7),
+ PIXMAN_STOP (1.0, 0, 0, 1, 0.7)
+};
+
+#define NUM_STOPS (sizeof (stops) / sizeof (stops[0]))
+
+static pixman_image_t *
+create_conical (int index)
+{
+ pixman_point_fixed_t c;
+ double angle;
+
+ c.x = pixman_double_to_fixed (0);
+ c.y = pixman_double_to_fixed (0);
+
+ angle = (0.5 / NUM_GRADIENTS + index / (double)NUM_GRADIENTS) * 720 - 180;
+
+ return pixman_image_create_conical_gradient (
+ &c, pixman_double_to_fixed (angle), stops, NUM_STOPS);
+}
+
+int
+main (int argc, char **argv)
+{
+ pixman_transform_t transform;
+ pixman_image_t *src_img, *dest_img;
+ int i;
+
+ enable_divbyzero_exceptions ();
+
+ dest_img = pixman_image_create_bits (PIXMAN_a8r8g8b8,
+ WIDTH, HEIGHT,
+ NULL, 0);
+
+ draw_checkerboard (dest_img, 25, 0xffaaaaaa, 0xff888888);
+
+ pixman_transform_init_identity (&transform);
+
+ pixman_transform_translate (NULL, &transform,
+ pixman_double_to_fixed (0.5),
+ pixman_double_to_fixed (0.5));
+
+ pixman_transform_scale (NULL, &transform,
+ pixman_double_to_fixed (SIZE),
+ pixman_double_to_fixed (SIZE));
+ pixman_transform_translate (NULL, &transform,
+ pixman_double_to_fixed (0.5),
+ pixman_double_to_fixed (0.5));
+
+ for (i = 0; i < NUM_GRADIENTS; i++)
+ {
+ int column = i % GRADIENTS_PER_ROW;
+ int row = i / GRADIENTS_PER_ROW;
+
+ src_img = create_conical (i);
+ pixman_image_set_repeat (src_img, PIXMAN_REPEAT_NORMAL);
+
+ pixman_image_set_transform (src_img, &transform);
+
+ pixman_image_composite32 (
+ PIXMAN_OP_OVER, src_img, NULL,dest_img,
+ 0, 0, 0, 0, column * SIZE, row * SIZE,
+ SIZE, SIZE);
+
+ pixman_image_unref (src_img);
+ }
+
+ show_image (dest_img);
+
+ pixman_image_unref (dest_img);
+
+ return 0;
+}
diff --git a/src/pixman/demos/convolution-test.c b/src/pixman/demos/convolution-test.c
new file mode 100644
index 0000000..da284af
--- /dev/null
+++ b/src/pixman/demos/convolution-test.c
@@ -0,0 +1,47 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include "pixman.h"
+#include "gtk-utils.h"
+
+int
+main (int argc, char **argv)
+{
+#define WIDTH 200
+#define HEIGHT 200
+
+#define d2f pixman_double_to_fixed
+
+ uint32_t *src = malloc (WIDTH * HEIGHT * 4);
+ uint32_t *mask = malloc (WIDTH * HEIGHT * 4);
+ uint32_t *dest = malloc (WIDTH * HEIGHT * 4);
+ pixman_fixed_t convolution[] =
+ {
+ d2f (3), d2f (3),
+ d2f (0.5), d2f (0.5), d2f (0.5),
+ d2f (0.5), d2f (0.5), d2f (0.5),
+ d2f (0.5), d2f (0.5), d2f (0.5),
+ };
+ pixman_image_t *simg, *mimg, *dimg;
+
+ int i;
+
+ for (i = 0; i < WIDTH * HEIGHT; ++i)
+ {
+ src[i] = 0x7f007f00;
+ mask[i] = (i % 256) * 0x01000000;
+ dest[i] = 0;
+ }
+
+ simg = pixman_image_create_bits (PIXMAN_a8r8g8b8, WIDTH, HEIGHT, src, WIDTH * 4);
+ mimg = pixman_image_create_bits (PIXMAN_a8r8g8b8, WIDTH, HEIGHT, mask, WIDTH * 4);
+ dimg = pixman_image_create_bits (PIXMAN_a8r8g8b8, WIDTH, HEIGHT, dest, WIDTH * 4);
+
+ pixman_image_set_filter (mimg, PIXMAN_FILTER_CONVOLUTION,
+ convolution, 11);
+
+ pixman_image_composite (PIXMAN_OP_OVER, simg, mimg, dimg, 0, 0, 0, 0, 0, 0, WIDTH, HEIGHT);
+
+ show_image (dimg);
+
+ return 0;
+}
diff --git a/src/pixman/demos/gradient-test.c b/src/pixman/demos/gradient-test.c
new file mode 100644
index 0000000..e68f69a
--- /dev/null
+++ b/src/pixman/demos/gradient-test.c
@@ -0,0 +1,92 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include "pixman.h"
+#include "gtk-utils.h"
+
+int
+main (int argc, char **argv)
+{
+#define WIDTH 400
+#define HEIGHT 200
+
+ uint32_t *dest = malloc (WIDTH * HEIGHT * 4);
+ pixman_image_t *src_img;
+ pixman_image_t *dest_img;
+ int i;
+ pixman_gradient_stop_t stops[2] =
+ {
+ { pixman_int_to_fixed (0), { 0x0000, 0x0000, 0xffff, 0xffff } },
+ { pixman_int_to_fixed (1), { 0xffff, 0x1111, 0x1111, 0xffff } }
+ };
+ pixman_point_fixed_t p1 = { pixman_double_to_fixed (50), 0 };
+ pixman_point_fixed_t p2 = { pixman_double_to_fixed (200), 0 };
+#if 0
+ pixman_transform_t trans = {
+ { { pixman_double_to_fixed (2), pixman_double_to_fixed (0.5), pixman_double_to_fixed (-100), },
+ { pixman_double_to_fixed (0), pixman_double_to_fixed (3), pixman_double_to_fixed (0), },
+ { pixman_double_to_fixed (0), pixman_double_to_fixed (0.000), pixman_double_to_fixed (1.0) }
+ }
+ };
+#else
+ pixman_transform_t trans = {
+ { { pixman_fixed_1, 0, 0 },
+ { 0, pixman_fixed_1, 0 },
+ { 0, 0, pixman_fixed_1 } }
+ };
+#endif
+
+#if 0
+ pixman_point_fixed_t c_inner;
+ pixman_point_fixed_t c_outer;
+ pixman_fixed_t r_inner;
+ pixman_fixed_t r_outer;
+#endif
+
+ for (i = 0; i < WIDTH * HEIGHT; ++i)
+ dest[i] = 0xff00ff00;
+
+ dest_img = pixman_image_create_bits (PIXMAN_a8r8g8b8,
+ WIDTH, HEIGHT,
+ dest,
+ WIDTH * 4);
+
+#if 0
+ c_inner.x = pixman_double_to_fixed (50.0);
+ c_inner.y = pixman_double_to_fixed (50.0);
+ c_outer.x = pixman_double_to_fixed (50.0);
+ c_outer.y = pixman_double_to_fixed (50.0);
+ r_inner = 0;
+ r_outer = pixman_double_to_fixed (50.0);
+
+ src_img = pixman_image_create_conical_gradient (&c_inner, r_inner,
+ stops, 2);
+#endif
+#if 0
+ src_img = pixman_image_create_conical_gradient (&c_inner, r_inner,
+ stops, 2);
+ src_img = pixman_image_create_linear_gradient (&c_inner, &c_outer,
+ r_inner, r_outer,
+ stops, 2);
+#endif
+
+ src_img = pixman_image_create_linear_gradient (&p1, &p2,
+ stops, 2);
+
+ pixman_image_set_transform (src_img, &trans);
+ pixman_image_set_repeat (src_img, PIXMAN_REPEAT_NONE);
+
+ pixman_image_composite (PIXMAN_OP_OVER, src_img, NULL, dest_img,
+ 0, 0, 0, 0, 0, 0, 10 * WIDTH, HEIGHT);
+
+ printf ("0, 0: %x\n", dest[0]);
+ printf ("10, 10: %x\n", dest[10 * 10 + 10]);
+ printf ("w, h: %x\n", dest[(HEIGHT - 1) * 100 + (WIDTH - 1)]);
+
+ show_image (dest_img);
+
+ pixman_image_unref (src_img);
+ pixman_image_unref (dest_img);
+ free (dest);
+
+ return 0;
+}
diff --git a/src/pixman/demos/gtk-utils.c b/src/pixman/demos/gtk-utils.c
new file mode 100644
index 0000000..32d4aec
--- /dev/null
+++ b/src/pixman/demos/gtk-utils.c
@@ -0,0 +1,179 @@
+#include <gtk/gtk.h>
+#include <config.h>
+#include "../test/utils.h"
+#include "gtk-utils.h"
+
+pixman_image_t *
+pixman_image_from_file (const char *filename, pixman_format_code_t format)
+{
+ GdkPixbuf *pixbuf;
+ pixman_image_t *image;
+ int width, height;
+ uint32_t *data, *d;
+ uint8_t *gdk_data;
+ int n_channels;
+ int j, i;
+ int stride;
+
+ if (!(pixbuf = gdk_pixbuf_new_from_file (filename, NULL)))
+ return NULL;
+
+ image = NULL;
+
+ width = gdk_pixbuf_get_width (pixbuf);
+ height = gdk_pixbuf_get_height (pixbuf);
+ n_channels = gdk_pixbuf_get_n_channels (pixbuf);
+ gdk_data = gdk_pixbuf_get_pixels (pixbuf);
+ stride = gdk_pixbuf_get_rowstride (pixbuf);
+
+ if (!(data = malloc (width * height * sizeof (uint32_t))))
+ goto out;
+
+ d = data;
+ for (j = 0; j < height; ++j)
+ {
+ uint8_t *gdk_line = gdk_data;
+
+ for (i = 0; i < width; ++i)
+ {
+ int r, g, b, a;
+ uint32_t pixel;
+
+ r = gdk_line[0];
+ g = gdk_line[1];
+ b = gdk_line[2];
+
+ if (n_channels == 4)
+ a = gdk_line[3];
+ else
+ a = 0xff;
+
+ r = (r * a + 127) / 255;
+ g = (g * a + 127) / 255;
+ b = (b * a + 127) / 255;
+
+ pixel = (a << 24) | (r << 16) | (g << 8) | b;
+
+ *d++ = pixel;
+ gdk_line += n_channels;
+ }
+
+ gdk_data += stride;
+ }
+
+ image = pixman_image_create_bits (
+ format, width, height, data, width * 4);
+
+out:
+ g_object_unref (pixbuf);
+ return image;
+}
+
+GdkPixbuf *
+pixbuf_from_argb32 (uint32_t *bits,
+ int width,
+ int height,
+ int stride)
+{
+ GdkPixbuf *pixbuf = gdk_pixbuf_new (GDK_COLORSPACE_RGB, TRUE,
+ 8, width, height);
+ int p_stride = gdk_pixbuf_get_rowstride (pixbuf);
+ guint32 *p_bits = (guint32 *)gdk_pixbuf_get_pixels (pixbuf);
+ int i;
+
+ for (i = 0; i < height; ++i)
+ {
+ uint32_t *src_row = &bits[i * (stride / 4)];
+ uint32_t *dst_row = p_bits + i * (p_stride / 4);
+
+ a8r8g8b8_to_rgba_np (dst_row, src_row, width);
+ }
+
+ return pixbuf;
+}
+
+static gboolean
+on_expose (GtkWidget *widget, GdkEventExpose *expose, gpointer data)
+{
+ pixman_image_t *pimage = data;
+ int width = pixman_image_get_width (pimage);
+ int height = pixman_image_get_height (pimage);
+ int stride = pixman_image_get_stride (pimage);
+ cairo_surface_t *cimage;
+ cairo_format_t format;
+ cairo_t *cr;
+
+ if (pixman_image_get_format (pimage) == PIXMAN_x8r8g8b8)
+ format = CAIRO_FORMAT_RGB24;
+ else
+ format = CAIRO_FORMAT_ARGB32;
+
+ cimage = cairo_image_surface_create_for_data (
+ (uint8_t *)pixman_image_get_data (pimage),
+ format, width, height, stride);
+
+ cr = gdk_cairo_create (widget->window);
+
+ cairo_rectangle (cr, 0, 0, width, height);
+ cairo_set_source_surface (cr, cimage, 0, 0);
+ cairo_fill (cr);
+
+ cairo_destroy (cr);
+ cairo_surface_destroy (cimage);
+
+ return TRUE;
+}
+
+void
+show_image (pixman_image_t *image)
+{
+ GtkWidget *window;
+ int width, height;
+ int argc;
+ char **argv;
+ char *arg0 = g_strdup ("pixman-test-program");
+ pixman_format_code_t format;
+ pixman_image_t *copy;
+
+ argc = 1;
+ argv = (char **)&arg0;
+
+ gtk_init (&argc, &argv);
+
+ window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
+ width = pixman_image_get_width (image);
+ height = pixman_image_get_height (image);
+
+ gtk_window_set_default_size (GTK_WINDOW (window), width, height);
+
+ format = pixman_image_get_format (image);
+
+ /* We always display the image as if it contains sRGB data. That
+ * means that no conversion should take place when the image
+ * has the a8r8g8b8_sRGB format.
+ */
+ switch (format)
+ {
+ case PIXMAN_a8r8g8b8_sRGB:
+ case PIXMAN_a8r8g8b8:
+ case PIXMAN_x8r8g8b8:
+ copy = pixman_image_ref (image);
+ break;
+
+ default:
+ copy = pixman_image_create_bits (PIXMAN_a8r8g8b8,
+ width, height, NULL, -1);
+ pixman_image_composite32 (PIXMAN_OP_SRC,
+ image, NULL, copy,
+ 0, 0, 0, 0, 0, 0,
+ width, height);
+ break;
+ }
+
+ g_signal_connect (window, "expose_event", G_CALLBACK (on_expose), copy);
+ g_signal_connect (window, "delete_event", G_CALLBACK (gtk_main_quit), NULL);
+
+ gtk_widget_show (window);
+
+ gtk_main ();
+}
diff --git a/src/pixman/demos/gtk-utils.h b/src/pixman/demos/gtk-utils.h
new file mode 100644
index 0000000..36be4de
--- /dev/null
+++ b/src/pixman/demos/gtk-utils.h
@@ -0,0 +1,15 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <glib.h>
+#include <gtk/gtk.h>
+#include "pixman.h"
+
+void show_image (pixman_image_t *image);
+
+pixman_image_t *
+pixman_image_from_file (const char *filename, pixman_format_code_t format);
+
+GdkPixbuf *pixbuf_from_argb32 (uint32_t *bits,
+ int width,
+ int height,
+ int stride);
diff --git a/src/pixman/demos/linear-gradient.c b/src/pixman/demos/linear-gradient.c
new file mode 100644
index 0000000..46433a6
--- /dev/null
+++ b/src/pixman/demos/linear-gradient.c
@@ -0,0 +1,50 @@
+#include "../test/utils.h"
+#include "gtk-utils.h"
+
+#define WIDTH 1024
+#define HEIGHT 640
+
+int
+main (int argc, char **argv)
+{
+ pixman_image_t *src_img, *dest_img;
+ pixman_gradient_stop_t stops[] = {
+ { 0x00000, { 0x0000, 0x0000, 0x4444, 0xdddd } },
+ { 0x10000, { 0xeeee, 0xeeee, 0x8888, 0xdddd } },
+#if 0
+ /* These colors make it very obvious that dithering
+ * is useful even for 8-bit gradients
+ */
+ { 0x00000, { 0x6666, 0x3333, 0x3333, 0xffff } },
+ { 0x10000, { 0x3333, 0x6666, 0x6666, 0xffff } },
+#endif
+ };
+ pixman_point_fixed_t p1, p2;
+
+ enable_divbyzero_exceptions ();
+
+ dest_img = pixman_image_create_bits (PIXMAN_x8r8g8b8,
+ WIDTH, HEIGHT,
+ NULL, 0);
+
+ p1.x = p1.y = 0x0000;
+ p2.x = WIDTH << 16;
+ p2.y = HEIGHT << 16;
+
+ src_img = pixman_image_create_linear_gradient (&p1, &p2, stops, ARRAY_LENGTH (stops));
+
+ pixman_image_composite32 (PIXMAN_OP_OVER,
+ src_img,
+ NULL,
+ dest_img,
+ 0, 0,
+ 0, 0,
+ 0, 0,
+ WIDTH, HEIGHT);
+
+ show_image (dest_img);
+
+ pixman_image_unref (dest_img);
+
+ return 0;
+}
diff --git a/src/pixman/demos/parrot.c b/src/pixman/demos/parrot.c
new file mode 100644
index 0000000..60fd270
--- /dev/null
+++ b/src/pixman/demos/parrot.c
@@ -0,0 +1,1079 @@
+/* This parrot is a finger painting by Rubens LP:
+ *
+ * http://www.flickr.com/photos/dorubens/4030604504/in/set-72157622586088192/
+ *
+ * Used here under Creative Commons Attribution. The artist's web site:
+ *
+ * http://www.rubenslp.com.br/
+ *
+ */
+static const uint32_t parrot_bits[] =
+{
+ 0x716f7070, 0x1c1b1b1b, 0x110f1010, 0x16151415, 0x14121313, 0x2c292b2b,
+ 0x403e3f3f, 0x19181818, 0x06050605, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x02010101, 0x08070707,
+ 0x05040404, 0x0a060908, 0x27262426, 0xb3b0b1b2, 0x99979897, 0x2b2a2929,
+ 0x100f0f0f, 0x0f0d0e0e, 0x0e0e0c0d, 0x0d0d0b0c, 0x12111111, 0x10100e0f,
+ 0x0e0e0c0d, 0x0e0e0c0d, 0x12101211, 0x13121212, 0x17151516, 0x100f0e0f,
+ 0x15141414, 0x423f4042, 0x3b393a3a, 0x13121212, 0x16151515, 0x2b282b29,
+ 0x13121112, 0x100f0f0f, 0x0f0d0f0e, 0x08070807, 0x0d0c0c0c, 0x0a090a09,
+ 0x0e0e0c0d, 0x0c0c0a0b, 0x10100f0f, 0x0f0e0e0e, 0x07060706, 0x0d0c0d0c,
+ 0x0e0d0e0d, 0x05040504, 0x08070807, 0x0c0b0c0b, 0x0d0c0d0c, 0x05040504,
+ 0x110f1110, 0x08070707, 0x04030303, 0x09080808, 0x06050605, 0x01000000,
+ 0x08070707, 0x06050505, 0x05040504, 0x100e100f, 0x0b0a0b0a, 0x01000100,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x04030403,
+ 0x03020302, 0x0b0a0b0a, 0x14131313, 0x0e0d0d0d, 0x0e0d0e0d, 0x231f2222,
+ 0x4d4b4b4d, 0xa7a5a6a6, 0x5b595a5a, 0x07060606, 0x00000000, 0x00000000,
+ 0x01000100, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x02010201,
+ 0x05040404, 0x07050706, 0x04020303, 0x403e3e3f, 0xb6b3b5b5, 0x84828283,
+ 0x1a191819, 0x0e0d0d0d, 0x0d0c0b0c, 0x0f0f0d0e, 0x0e0d0d0d, 0x0f0f0e0e,
+ 0x0e0e0c0d, 0x0c0b0a0b, 0x0b0a090a, 0x11111010, 0x100f0f0f, 0x100f0f0f,
+ 0x1b19191a, 0x1f1e1e1e, 0x46434544, 0x3a37383a, 0x1c1b1a1b, 0x1e1d1d1d,
+ 0x29272828, 0x19171818, 0x0e0d0d0d, 0x0f0e0e0e, 0x06050505, 0x0c0b0b0b,
+ 0x100e100f, 0x09080908, 0x0c0c0a0b, 0x0f0f0e0e, 0x0c0c0a0b, 0x05040404,
+ 0x08070807, 0x0c0b0c0b, 0x05040504, 0x06050605, 0x100e100f, 0x09080908,
+ 0x09080908, 0x12101211, 0x09080908, 0x03020202, 0x08070707, 0x01000100,
+ 0x04030403, 0x07060606, 0x08070707, 0x08070707, 0x0f0e0f0e, 0x0b0a0b0a,
+ 0x03020302, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x03020202,
+ 0x09080908, 0x05040504, 0x00000000, 0x00000000, 0x0b0a0b0a, 0x0f0e0f0e,
+ 0x1a191a19, 0x77757576, 0xc3c1c2c2, 0x75737374, 0x1f1e1e1f, 0x06050505,
+ 0x07030605, 0x00000000, 0x03020302, 0x00000000, 0x00000000, 0x00000000,
+ 0x03020202, 0x04030403, 0x04030303, 0x02010101, 0x5b5a5959, 0xafacaeae,
+ 0x5a575859, 0x1b19191a, 0x0e0d0d0d, 0x100e100f, 0x100f0f0f, 0x11101010,
+ 0x12121111, 0x0c0c0a0b, 0x09090708, 0x0d0d0b0c, 0x0f0e0d0e, 0x0d0d0b0c,
+ 0x14131313, 0x1c1b1b1b, 0x322f3132, 0x514f504f, 0x2d2b2b2b, 0x2e2b2c2e,
+ 0x21202020, 0x201f1f1f, 0x15141414, 0x12101211, 0x0e0d0d0d, 0x08070807,
+ 0x0b0a0a0a, 0x100e0f0f, 0x07060706, 0x0a090a09, 0x0f0f0d0e, 0x0c0c0a0b,
+ 0x09090708, 0x0d0c0c0c, 0x0b0a0b0a, 0x06050605, 0x0b0a0b0a, 0x0c0b0c0b,
+ 0x08070807, 0x07060706, 0x0f0e0f0e, 0x0a090a09, 0x01000000, 0x05040504,
+ 0x03020202, 0x01000000, 0x08070707, 0x05040504, 0x09080908, 0x0d0c0d0c,
+ 0x07060606, 0x04030403, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x02010201, 0x06050505, 0x08070807, 0x01000100, 0x00000000, 0x00000000,
+ 0x0f0d0e0e, 0x2c2a2a2b, 0x9c9a9b9b, 0xcac7cac9, 0x4d4c4b4d, 0x1b19181a,
+ 0x0a090909, 0x00000000, 0x02010201, 0x05040504, 0x00000000, 0x00000000,
+ 0x00000000, 0x02010101, 0x06040605, 0x03020302, 0x100d0e10, 0x615f5f60,
+ 0x9d9a9c9c, 0x32313131, 0x14131313, 0x0d0c0c0c, 0x0f0e0e0e, 0x0e0d0d0d,
+ 0x100f0f0f, 0x11101010, 0x08070807, 0x06050405, 0x0f0e0e0e, 0x100e0f0f,
+ 0x0d0d0c0c, 0x2a282929, 0x3d3c3b3c, 0x38373637, 0x4f4d4d4f, 0x19181718,
+ 0x27262626, 0x14131313, 0x29272828, 0x2e2b2c2d, 0x201d1e20, 0x15121414,
+ 0x04030403, 0x07060606, 0x0c0b0c0b, 0x0a090a09, 0x08070707, 0x0e0d0e0d,
+ 0x0b0a0a0a, 0x07060606, 0x0c0b0b0b, 0x0a090909, 0x04030403, 0x0a090909,
+ 0x0e0d0e0d, 0x0a090a09, 0x09080908, 0x0e0d0e0d, 0x07060706, 0x08070807,
+ 0x08070807, 0x00000000, 0x01000000, 0x07060606, 0x04030403, 0x08070807,
+ 0x0e0d0e0d, 0x07060706, 0x06050605, 0x01000100, 0x00000000, 0x00000000,
+ 0x00000000, 0x02010201, 0x07060706, 0x01000100, 0x00000000, 0x00000000,
+ 0x01000100, 0x01000100, 0x322e3131, 0xa9a8a8a8, 0xb9b8b8b8, 0x39383639,
+ 0x1d1b1b1c, 0x0c0b0b0b, 0x04030303, 0x05040404, 0x07060706, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x06030605, 0x09060807, 0x0e0d0c0d,
+ 0x605e5e5f, 0x99959898, 0x2e2c2c2e, 0x13121212, 0x0d0d0b0c, 0x11111010,
+ 0x12121111, 0x13131212, 0x0f0e0e0e, 0x09080908, 0x03020302, 0x0c0b0b0b,
+ 0x0e0d0d0d, 0x11101010, 0x38363737, 0x514f4f50, 0x34333134, 0x46434546,
+ 0x24222124, 0x29262827, 0x04030303, 0x05040404, 0x14131313, 0x15151414,
+ 0x100f100f, 0x07060706, 0x07060606, 0x0d0c0d0c, 0x0a090909, 0x07060706,
+ 0x0f0e0f0e, 0x0c0b0c0b, 0x01000100, 0x0c0b0c0b, 0x0a090a09, 0x01000100,
+ 0x08070707, 0x12101211, 0x0b0a0b0a, 0x06050605, 0x0f0e0f0e, 0x07060706,
+ 0x04030403, 0x06050605, 0x02010201, 0x00000000, 0x05040504, 0x03020302,
+ 0x06050605, 0x0d0c0d0c, 0x08070707, 0x07060706, 0x100e100f, 0x05040504,
+ 0x01000100, 0x00000000, 0x02010201, 0x07060606, 0x03020202, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x06050605, 0xb8b6b6b7, 0xa4a2a3a3,
+ 0x2c2b2b2b, 0x1c191a1b, 0x0e0c0d0d, 0x08070707, 0x35323433, 0x1a191919,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x04020403,
+ 0x1b19191a, 0x68666667, 0x7d7a7c7c, 0x23212023, 0x1c191a1c, 0x0f0e0d0e,
+ 0x11111010, 0x11111010, 0x10100f0f, 0x0c0b0b0b, 0x09080908, 0x04030403,
+ 0x0e0d0e0d, 0x0e0d0d0d, 0x18171717, 0x52505150, 0x5d5a5b5c, 0x3b3a383a,
+ 0x3d3a3b3d, 0x24212224, 0x29252729, 0x06050505, 0x04030303, 0x04030403,
+ 0x06050505, 0x0c0b0b0b, 0x09080908, 0x04030303, 0x0d0c0c0c, 0x06050605,
+ 0x05040504, 0x0c0b0b0b, 0x08070807, 0x06050605, 0x09080908, 0x0c0b0c0b,
+ 0x05040504, 0x0a090909, 0x0e0d0e0d, 0x0a090a09, 0x09080908, 0x0f0e0e0e,
+ 0x09080908, 0x04030403, 0x09080908, 0x02010201, 0x00000000, 0x07060706,
+ 0x05040504, 0x07060606, 0x0f0d0f0e, 0x06050605, 0x08070807, 0x11101010,
+ 0x0c0b0b0b, 0x11101010, 0x09080808, 0x03020302, 0x05040404, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x7c7a7b7b, 0x1d1c1c1d, 0x100f0f0f, 0x110e1010, 0x07070607, 0x5b585a59,
+ 0x3e3b3d3c, 0x05040404, 0x00000000, 0x01010001, 0x00000000, 0x00000000,
+ 0x02010101, 0x1d1b1b1c, 0x615f6060, 0x54525253, 0x1e1c1b1e, 0x18151617,
+ 0x1b18181b, 0x1a171819, 0x1b181a1a, 0x1b18191a, 0x100e0f0f, 0x03020302,
+ 0x07060606, 0x0d0c0c0c, 0x120f1111, 0x27252626, 0x73727272, 0x706e6f6f,
+ 0x524f5152, 0x2f2c2d2f, 0x1e1c1d1d, 0x1f1c1e1e, 0x09070808, 0x03020202,
+ 0x04030303, 0x03020302, 0x0b0a0a0a, 0x08070807, 0x02010101, 0x0b0a0b0a,
+ 0x0b0a0b0a, 0x04030303, 0x0d0c0d0c, 0x09080808, 0x05040504, 0x0b0a0b0a,
+ 0x08070807, 0x02010201, 0x0c0b0c0b, 0x0c0b0b0b, 0x0a090a09, 0x08070807,
+ 0x100e100f, 0x06050605, 0x04030403, 0x07060706, 0x02010201, 0x00000000,
+ 0x06050605, 0x03020302, 0x09080908, 0x0d0c0d0c, 0x0d0c0c0c, 0x0a090909,
+ 0x0d0c0c0c, 0x15131314, 0x1b19191a, 0x1d1b1b1c, 0x11101010, 0x02010201,
+ 0x01000100, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x02010201, 0x1c1b1b1b, 0x100f0f0f, 0x07060606, 0x0b0b090b,
+ 0x8f898e8c, 0x37353636, 0x01010001, 0x00000000, 0x00000000, 0x01000000,
+ 0x00000000, 0x00000000, 0x14121313, 0x57545557, 0x43414142, 0x211e1f21,
+ 0x18161517, 0x18161518, 0x1f1d1c1f, 0x1b191a1a, 0x13111212, 0x0c0b0b0b,
+ 0x02010101, 0x08070807, 0x0f0e0e0e, 0x14121313, 0x403e3e40, 0x8b888a8a,
+ 0x68666767, 0x4c4a4a4c, 0x28252628, 0x23202123, 0x16141615, 0x03020202,
+ 0x06050605, 0x04030403, 0x04030403, 0x0d0c0c0c, 0x0c0b0c0b, 0x00000000,
+ 0x0a090a09, 0x0b0a0b0a, 0x03020302, 0x09080908, 0x0c0b0b0b, 0x04030403,
+ 0x0c0b0c0b, 0x0b0a0b0a, 0x01000100, 0x09080908, 0x0f0e0e0e, 0x09080908,
+ 0x0c0b0b0b, 0x0b0a0909, 0x03020202, 0x06050605, 0x08070707, 0x04030303,
+ 0x00000000, 0x06050605, 0x02010201, 0x0c0b0c0b, 0x0f0d0e0e, 0x05040504,
+ 0x0c0c0a0b, 0x100f0f0f, 0x0f0f0d0e, 0x14121313, 0x18161717, 0x100e0f0f,
+ 0x02010101, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x0b0a0a0a, 0x0d0c0c0c, 0x08070707,
+ 0x201f1f1f, 0xa29ca19f, 0x27262626, 0x00000000, 0x09080808, 0x05040404,
+ 0x02010101, 0x03010302, 0x03020302, 0x1b19191a, 0x35323335, 0x39373738,
+ 0x1c1a1a1c, 0x19161718, 0x1c1a191c, 0x211f1f21, 0x201d1d20, 0x14121313,
+ 0x09080808, 0x04030403, 0x09080908, 0x0b0a0a0a, 0x1d1b1b1c, 0x4f4c4d4e,
+ 0x87838685, 0x4a494749, 0x32303031, 0x1b1a1a1a, 0x1a191919, 0x13121312,
+ 0x03020302, 0x09080908, 0x0d0c0d0c, 0x0d0c0d0c, 0x100e0f0f, 0x09080908,
+ 0x01000000, 0x09080808, 0x09080808, 0x02010201, 0x0a090a09, 0x09080908,
+ 0x04030403, 0x0c0b0c0b, 0x07060706, 0x00000000, 0x08070807, 0x0a090909,
+ 0x09080808, 0x08070707, 0x0c0b090a, 0x03020000, 0x04030101, 0x06050405,
+ 0x03020202, 0x00000000, 0x05040504, 0x04030403, 0x07060606, 0x100e100f,
+ 0x07060706, 0x09080808, 0x11111010, 0x0d0d0b0c, 0x0e0e0c0d, 0x100f0f0f,
+ 0x0f0e0f0e, 0x03020302, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x08070707, 0x10100f0f,
+ 0x0c0a0b0b, 0x41403f40, 0x89858887, 0x1e1c1d1d, 0x00000000, 0x110f1010,
+ 0x37353636, 0x1f1e1e1e, 0x05040404, 0x06050505, 0x201d1f1f, 0x322f3031,
+ 0x33303132, 0x18151618, 0x19161719, 0x1f1d1c1f, 0x1c1a1a1b, 0x1c1a1a1b,
+ 0x17151516, 0x09080808, 0x04030403, 0x09080908, 0x0f0d0e0e, 0x1a191819,
+ 0x66646465, 0x77747676, 0x2b292a29, 0x07050706, 0x07060606, 0x27242726,
+ 0x25232424, 0x08070707, 0x09080808, 0x11101010, 0x12111111, 0x15131414,
+ 0x0b0a0b0a, 0x04030403, 0x04030203, 0x06050304, 0x01000000, 0x06050505,
+ 0x07060606, 0x07060606, 0x09080808, 0x09080808, 0x02010101, 0x07060606,
+ 0x100e0f0f, 0x09080808, 0x0c0b090a, 0x0a090708, 0x05040203, 0x03020000,
+ 0x05040203, 0x04030102, 0x03020000, 0x05040304, 0x03020202, 0x09080808,
+ 0x0a090a09, 0x08070807, 0x0a090a09, 0x110f1110, 0x0d0d0b0c, 0x0e0e0c0d,
+ 0x11110f10, 0x0c0b0b0b, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x04030303,
+ 0x0d0c0c0c, 0x0a090909, 0x504d4e4f, 0x78757776, 0x1a191919, 0x00000000,
+ 0x16151515, 0x31303030, 0x312f3030, 0x100f0f0f, 0x0b0a0b0a, 0x14121313,
+ 0x2c292a2c, 0x26232426, 0x19171619, 0x1b171a1b, 0x1f1c1d1f, 0x201d1d20,
+ 0x0d0c0c0c, 0x0a090909, 0x06050505, 0x05040504, 0x0c0b0b0b, 0x0b0a0a0a,
+ 0x22212121, 0x817d7f7e, 0x59575857, 0x17161616, 0x04030303, 0x01000000,
+ 0x07060706, 0x0c0b0b0b, 0x02010201, 0x04030403, 0x0b0a0a0a, 0x201e1e1f,
+ 0x17151616, 0x0d0c0c0c, 0x02010201, 0x04030303, 0x04030102, 0x04030101,
+ 0x05040202, 0x06050304, 0x05040203, 0x09080707, 0x05040303, 0x03020102,
+ 0x07060405, 0x09080607, 0x09080506, 0x0a090708, 0x0c0b090a, 0x06050303,
+ 0x04030101, 0x06050302, 0x03020000, 0x03020001, 0x04030102, 0x05040202,
+ 0x06050304, 0x0a090808, 0x07060505, 0x08070707, 0x0a090909, 0x0a090909,
+ 0x09080808, 0x12111111, 0x09080808, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x03020202,
+ 0x03020302, 0x09080908, 0x0a090a09, 0x110f1110, 0x66646465, 0x100e0f0f,
+ 0x05030504, 0x1f1d1e1f, 0x25242424, 0x22212121, 0x0f0e0e0e, 0x17151616,
+ 0x0f0e0e0e, 0x1e1d1d1d, 0x211e1e21, 0x1a18171a, 0x17151417, 0x1d1a1a1d,
+ 0x201d1e20, 0x19161719, 0x00000000, 0x00000000, 0x01000100, 0x15121414,
+ 0x16141415, 0x32303031, 0x78747776, 0x2f2e2d2d, 0x09080808, 0x06030605,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x09080808, 0x18171617, 0x11101010, 0x02010201, 0x01000000, 0x05040303,
+ 0x03020000, 0x05040202, 0x06050203, 0x04030102, 0x06050304, 0x04030001,
+ 0x03020001, 0x09090605, 0x09090607, 0x09080608, 0x16131216, 0x0a0a0709,
+ 0x06050305, 0x05040204, 0x07060406, 0x03020002, 0x03020001, 0x04030102,
+ 0x02010000, 0x06050304, 0x06050304, 0x03020001, 0x09080607, 0x100f0c0d,
+ 0x0e0d0a0b, 0x0d0c090a, 0x0d0c0b0b, 0x05040303, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x03020302, 0x0b0a0a0a, 0x09080908, 0x0e0d0e0d, 0x0f0e0f0e,
+ 0x0f0c0d0e, 0x07060606, 0x18171717, 0x27242526, 0x1d1b1c1c, 0x0b0a0a0a,
+ 0x16141515, 0x0d0c0c0c, 0x17161617, 0x1a18191a, 0x1a17181a, 0x18151618,
+ 0x1e1b1d1d, 0x201e1e1f, 0x17141516, 0x0e0b0c0e, 0x00000000, 0x00000000,
+ 0x03020202, 0x15121314, 0x2f2c2d2e, 0x58565657, 0x18161717, 0x06030505,
+ 0x01000100, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x08070707, 0x0c0b0b0b, 0x15131314, 0x07060606, 0x01000000,
+ 0x03020001, 0x03020000, 0x05040202, 0x09080607, 0x05040102, 0x0b0a0809,
+ 0x0e0c0b0c, 0x18121110, 0x271b1d19, 0x39262a25, 0x4f363b33, 0x6042483f,
+ 0x3f2a2a1f, 0x36272314, 0x3a2c2615, 0x3a2e2717, 0x382e2617, 0x3c322b1c,
+ 0x362e271b, 0x29221c12, 0x28231e17, 0x1815120f, 0x0d0b0909, 0x0b0a0808,
+ 0x0c0c090b, 0x100f0c0d, 0x11100d0e, 0x100f0c0d, 0x03020001, 0x02010000,
+ 0x03020000, 0x01000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x05040504, 0x03020302, 0x00000000, 0x0a090909, 0x0a090909, 0x08070707,
+ 0x0c0b0c0b, 0x09080908, 0x09080908, 0x0a090909, 0x1b191a1a, 0x211e1f20,
+ 0x14111214, 0x2c292a2b, 0x19171619, 0x1e1c1c1e, 0x1d1b1b1d, 0x14131213,
+ 0x0d0c0c0c, 0x13121212, 0x13121212, 0x0b0a0b0a, 0x00000000, 0x00000000,
+ 0x00000000, 0x04030403, 0x17151516, 0x1a191919, 0x2d2b2c2c, 0x04030303,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x03020302, 0x100e0f0f, 0x1c191b1b, 0x0f0e0f0e, 0x03020202,
+ 0x00000000, 0x07050404, 0x09060507, 0x0a080606, 0x05050202, 0x09060607,
+ 0x32272a2f, 0x5e43535c, 0x8f617882, 0xd18b9f91, 0xffacbb99, 0xffafb687,
+ 0xffb3b37a, 0xffb6b071, 0xffb8ae69, 0xffb8ab61, 0xffbaaa5c, 0xffbca955,
+ 0xffbea854, 0xffbfa958, 0xf9bba553, 0xefb29e4c, 0xe7ae9d56, 0xb88e7f49,
+ 0xa27d7046, 0x7c5d5436, 0x4c3c3629, 0x1f1c1a1a, 0x12120f12, 0x08060404,
+ 0x03010000, 0x03020000, 0x03020000, 0x03020000, 0x01000000, 0x00000000,
+ 0x00000000, 0x02010201, 0x06050605, 0x02010201, 0x07060706, 0x0a090a09,
+ 0x0b0a0a0a, 0x17141616, 0x0a090a09, 0x08070807, 0x05040504, 0x0e0d0d0d,
+ 0x11101010, 0x0d0b0b0d, 0x4b49494a, 0x4f4c4e4e, 0x100e0f0f, 0x0f0e0e0e,
+ 0x08070707, 0x0b0a0a0a, 0x0a090a09, 0x0d0c0d0c, 0x07060706, 0x00000000,
+ 0x00000000, 0x00000000, 0x03020302, 0x0e0d0e0d, 0x1a181819, 0x0e0d0d0d,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x02010201, 0x01000000, 0x12111111, 0x14131313, 0x13121212,
+ 0x03020102, 0x02010000, 0x02010000, 0x0e0c090b, 0x03030000, 0x0d0a090a,
+ 0x4330393e, 0x9269808b, 0xd193b0b5, 0xf7a9c1ab, 0xffa8bea4, 0xffa5bda7,
+ 0xffa9b998, 0xffafb27d, 0xffb6ae6c, 0xffb6ac65, 0xffb8aa5c, 0xffbda650,
+ 0xffbda54d, 0xffbea54c, 0xffbfa54c, 0xffbea54c, 0xffbfa44b, 0xffbfa64c,
+ 0xffbfa54c, 0xffbca34b, 0xffb09a46, 0xffa48f40, 0xeb988541, 0xb67d7040,
+ 0x59463f2d, 0x07070506, 0x03030002, 0x04030002, 0x03020000, 0x03020000,
+ 0x02010000, 0x01000000, 0x06050605, 0x08070707, 0x01000100, 0x06050605,
+ 0x0a090a09, 0x07060706, 0x0e0c0d0d, 0x120f1111, 0x06050605, 0x0b0a0b0a,
+ 0x05040404, 0x02020102, 0x12111111, 0x5b595a5a, 0x48464747, 0x06050505,
+ 0x03020202, 0x02010201, 0x01000101, 0x00000000, 0x00000000, 0x01000100,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x05040504, 0x04030403,
+ 0x0c0a0a0b, 0x06050505, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x100f0f0f, 0x22201f21,
+ 0x14131112, 0x08080305, 0x02010000, 0x02010000, 0x00000000, 0x06040404,
+ 0x62455259, 0xbf86a4b0, 0xf4abcccb, 0xfdadbd9b, 0xffadb891, 0xffabbb9b,
+ 0xffacb686, 0xffb6ab66, 0xffbaa958, 0xffb9a85c, 0xffb6ac67, 0xffbaa95c,
+ 0xffbba752, 0xffbda64e, 0xffc0a54d, 0xffc0a44c, 0xffbea64d, 0xffbfa64c,
+ 0xffbea64c, 0xffbfa64c, 0xfebfa54a, 0xffbea54b, 0xffbba249, 0xffb39b45,
+ 0xff9b8739, 0xff8f7b32, 0xf8907e37, 0xac756b43, 0x1c1a1711, 0x02020001,
+ 0x02000000, 0x02010000, 0x03020000, 0x05040303, 0x07060606, 0x01000100,
+ 0x07060706, 0x09080908, 0x07060706, 0x0d0c0d0c, 0x0b0a0a0a, 0x0f0c0d0e,
+ 0x07060706, 0x04030403, 0x00000000, 0x0a090909, 0x33323232, 0x211f2021,
+ 0x02020101, 0x00000000, 0x00000000, 0x00000000, 0x01000100, 0x03010202,
+ 0x05040404, 0x03010202, 0x05030403, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x02010101, 0x03020001,
+ 0x08070506, 0x12100e10, 0x0a080606, 0x06040203, 0x0b070707, 0x241b1c1f,
+ 0x7752656c, 0xe9a1c9d6, 0xffb7ddea, 0xfcb7cbb7, 0xf9abb890, 0xfeb1b98a,
+ 0xfeb4b175, 0xffb8ad69, 0xffb7ab65, 0xffb2af70, 0xffafb484, 0xffb1b380,
+ 0xffb8aa5c, 0xffbea54e, 0xffbfa64b, 0xffc0a64d, 0xffc0a64b, 0xffbfa64b,
+ 0xffc0a54d, 0xffbfa54a, 0xffbca34a, 0xffbba149, 0xffbba149, 0xffbaa04a,
+ 0xffb59c44, 0xffb09845, 0xffab9543, 0xfe9d883a, 0xfe8d7931, 0xff88772f,
+ 0xde837744, 0x4c3b372d, 0x06050303, 0x03020001, 0x03020000, 0x05040203,
+ 0x03020202, 0x01000100, 0x07060706, 0x06050605, 0x0e0d0e0d, 0x0d0c0d0c,
+ 0x04030403, 0x08070807, 0x03020202, 0x00000000, 0x00000000, 0x08070707,
+ 0x06060505, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x06050505, 0x05040404, 0x04030302, 0x0a09080a, 0x03020302,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x01000000, 0x02010201, 0x04030303,
+ 0x03020101, 0x02010000, 0x03020000, 0x04030002, 0x1c141617, 0x452d383c,
+ 0x8858707b, 0xe89fc8d4, 0xffb6dadf, 0xffbbd3c8, 0xfebac5a4, 0xffbab885,
+ 0xffb9ba89, 0xf7b0b68a, 0xfeb1b88a, 0xffacb484, 0xffaeb484, 0xffafb382,
+ 0xffb7ab62, 0xffbfa547, 0xffc0a44b, 0xffbea64b, 0xffbca248, 0xffb9a049,
+ 0xffb8a04a, 0xffb69f4d, 0xffb39c49, 0xffad9644, 0xffa89242, 0xffa58f3f,
+ 0xffa18b3b, 0xffa08b39, 0xffa5903e, 0xffa38c3b, 0xff958035, 0xff907c34,
+ 0xfe887531, 0xfe7e6c29, 0xff7c6a29, 0xe6837540, 0x5a4b473d, 0x08070506,
+ 0x03020001, 0x04030102, 0x0a090909, 0x09080908, 0x04030403, 0x0e0d0e0d,
+ 0x0e0d0e0d, 0x04030403, 0x04030403, 0x04030303, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x03010201, 0x01000100, 0x01000100,
+ 0x05030403, 0x02010101, 0x01000100, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x03020302,
+ 0x08070707, 0x06050304, 0x05040202, 0x02010000, 0x02010000, 0x5d3f4d51,
+ 0xc37da2af, 0xeb8bbed2, 0xffacd1d2, 0xffb6d2cc, 0xffb9d5d0, 0xfeb7cab6,
+ 0xffbac39f, 0xffb9c4a1, 0xfeb6c19a, 0xffb5b785, 0xffb5b279, 0xfeb1af76,
+ 0xffb1b179, 0xffbaa859, 0xffbea64d, 0xffc0a74e, 0xffb9a248, 0xffa48d3a,
+ 0xffab9752, 0xffb1a268, 0xffbeb282, 0xffcdc4a0, 0xffd2caa8, 0xffbfb79a,
+ 0xffb9b197, 0xff938b6e, 0xffcbc3a7, 0xff9b9171, 0xff998b60, 0xff897737,
+ 0xff83702a, 0xff82702b, 0xff7e6c2b, 0xff7a6827, 0xff766525, 0xff7a6828,
+ 0xc9887c57, 0x17161211, 0x06050304, 0x05040203, 0x05040404, 0x00000000,
+ 0x0b0a0b0a, 0x0a090a09, 0x07060706, 0x07060706, 0x02010101, 0x00000000,
+ 0x00000000, 0x00000000, 0x01000100, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x03020202, 0x09080808, 0x01000100, 0x00000000, 0x00000000, 0x00000000,
+ 0x02010201, 0x03020302, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x05050404, 0x0d0c0c0c, 0x08070507, 0x06050204, 0x07060305, 0x03030000,
+ 0x38263032, 0xd482acb7, 0xff96c5c8, 0xff9ac1bf, 0xff9acbd5, 0xfe9cd2e5,
+ 0xffb1d5d8, 0xffaec7b4, 0xffb1ba90, 0xffb6af72, 0xffb9aa5c, 0xffb7ac64,
+ 0xffb1b07c, 0xffaeb27d, 0xffb0b178, 0xffa8b68e, 0xffa5c0aa, 0xffb29e4b,
+ 0xffa48f3f, 0xffdfd7b7, 0xfff9f7f1, 0xfffaf8f4, 0xffe5e5e2, 0xffcacac8,
+ 0xffd2d2d1, 0xffebebea, 0xffd8d8d7, 0xffb0b0ae, 0xfff2f2f1, 0xffc6c6c6,
+ 0xffc3c2c1, 0xffe7e3da, 0xffada78c, 0xff8f7f45, 0xff786424, 0xff7a682c,
+ 0xfe8b7c48, 0xff978a57, 0xff887a42, 0x805d5b4a, 0x13120f13, 0x0b0a0808,
+ 0x09090607, 0x0d0c0c0c, 0x0a090a09, 0x02010201, 0x05040504, 0x01000100,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x01000100, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x03020202, 0x08070707, 0x05050405, 0x01000100, 0x00000000,
+ 0x00000000, 0x00000000, 0x05040504, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x03020202, 0x0a090909, 0x05040202, 0x07070202, 0x07060302,
+ 0x0e090a09, 0x89567077, 0xff94c4cc, 0xff8bbfc3, 0xfe92c7d5, 0xff91cfeb,
+ 0xff9dd4ec, 0xffa0cfd8, 0xff9bbeb4, 0xffa9b487, 0xffb3ad68, 0xffafb074,
+ 0xffadb486, 0xffa7b894, 0xffabb68f, 0xffa8b99b, 0xffa3bca9, 0xffa4b189,
+ 0xffaba15b, 0xffb5a460, 0xffe5dfc8, 0xfffefefe, 0xfffdfdfe, 0xfffdfdfd,
+ 0xffd2d2d3, 0xffeeeeee, 0xfff2f2f2, 0xffcecece, 0xffc9c9c9, 0xffaaaaaa,
+ 0xfff7f7f7, 0xffe4e4e4, 0xffc5c5c4, 0xffe2e1e3, 0xffc3c2c5, 0xffdad5cc,
+ 0xffa89d71, 0xffeceada, 0xfffffffe, 0xfffafafd, 0xfff3f2e7, 0x8978766e,
+ 0x100f0c0f, 0x0c0b0909, 0x13121011, 0x0e0d0d0d, 0x00000000, 0x04030403,
+ 0x03020302, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x01000100, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x04040303, 0x09090809, 0x09080808, 0x0f0e0d0f, 0x03030202, 0x02010101,
+ 0x07050606, 0x00000000, 0x02010201, 0x08070807, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x02010101, 0x07060505, 0x04030102, 0x04040000,
+ 0x02020000, 0x35242a2f, 0xc06b99ac, 0xff7bc1d9, 0xff79c0d5, 0xfe7bc3e1,
+ 0xff8bc6d3, 0xffa8c5aa, 0xffb1bc85, 0xffafbb85, 0xffacbe95, 0xffb1b884,
+ 0xffadbb94, 0xffa9bc9e, 0xffa6b99a, 0xffa2b99f, 0xff9db497, 0xff9ca57b,
+ 0xffa09552, 0xffaf9b55, 0xffd4c8a2, 0xfff8f5ee, 0xffffffff, 0xfffefefc,
+ 0xfffefefe, 0xfff1f1f1, 0xffe2e2e2, 0xff737373, 0xffdadada, 0xffe7e7e7,
+ 0xffc2c2c2, 0xffc8c8c8, 0xffcfcfcf, 0xffececec, 0xffcececd, 0xffb2b2b2,
+ 0xfff6f6f6, 0xffc1c2c4, 0xffe5e6e6, 0xfffcfbfc, 0xff8c8b8d, 0xfec5c5c3,
+ 0xffffffff, 0xc8c7c7c7, 0x11110e0f, 0x0c0b080a, 0x0d0d090a, 0x0a090909,
+ 0x04030403, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x01000100, 0x05040504, 0x01000100, 0x00000000, 0x00000000, 0x00000000,
+ 0x06050505, 0x0c0b0b0c, 0x0a0a0909, 0x07070607, 0x02010101, 0x01000000,
+ 0x03020202, 0x06050605, 0x08060707, 0x06050605, 0x04030403, 0x00000000,
+ 0x00000000, 0x00000000, 0x03020101, 0x09080508, 0x0c0c0808, 0x05040203,
+ 0x02020000, 0x06050303, 0x6745555a, 0xde6fabc2, 0xff6bc0e0, 0xff6cbee2,
+ 0xfe5fbae1, 0xff7bbcb7, 0xffccca5e, 0xffedce35, 0xffeace3e, 0xffe7d146,
+ 0xffebd13f, 0xffeece35, 0xffeccc3c, 0xffdccf56, 0xffcdd077, 0xffd6d373,
+ 0xffdbcb60, 0xffdac24e, 0xffdfc451, 0xfff1ebcb, 0xffffffff, 0xffffffff,
+ 0xffffffff, 0xffffffff, 0xffffffff, 0xfffcfcfc, 0xffdadada, 0xffb8b8b8,
+ 0xffd9d9d9, 0xffd9d9d9, 0xffe5e5e5, 0xffe3e3e3, 0xffd3d3d3, 0xffdedfde,
+ 0xffe3e3e3, 0xffd3d3d4, 0xffefefef, 0xffd8d8d7, 0xfff4f4f4, 0xffacabab,
+ 0xff868686, 0xffffffff, 0xfefcfcfa, 0xe3a09f9f, 0x2d262325, 0x04040102,
+ 0x05040102, 0x05040303, 0x01000101, 0x00000000, 0x02010201, 0x00000000,
+ 0x01000000, 0x00000000, 0x06050505, 0x0d0c0c0c, 0x00000000, 0x00000000,
+ 0x02010201, 0x19181718, 0x11100f11, 0x08080707, 0x04040303, 0x00000000,
+ 0x00000000, 0x00000000, 0x05040504, 0x02010101, 0x07060706, 0x04030303,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x08070506, 0x11100c0f,
+ 0x06040305, 0x00000000, 0x2b1e2223, 0xce89acb6, 0xf872bddb, 0xff5eb9e2,
+ 0xff64bce3, 0xfe55b5e6, 0xff5eb6d3, 0xffc3ce6a, 0xffffda27, 0xfffeda25,
+ 0xfffdda2e, 0xffffd928, 0xffffd926, 0xffffd925, 0xffffda25, 0xfffdd92e,
+ 0xfffade3f, 0xfffeda33, 0xfffed933, 0xffffdc36, 0xffe2cd57, 0xffb6a878,
+ 0xffb1afa7, 0xffb1b0b2, 0xffacacac, 0xffababab, 0xffefefef, 0xffffffff,
+ 0xfffafafa, 0xfff7f7f7, 0xfff8f8f8, 0xfffbfbfb, 0xffe8e8e8, 0xffd6d6d6,
+ 0xffececec, 0xfff5f5f5, 0xffededed, 0xfffcfcfc, 0xfffbfbfb, 0xfffdfdfd,
+ 0xfffefefe, 0xffe7e7e7, 0xfff7f7f7, 0xffffffff, 0xfeb4b3b4, 0xff504c4d,
+ 0x9a404242, 0x00000000, 0x02010000, 0x02010000, 0x00000000, 0x00000000,
+ 0x00000000, 0x01000100, 0x01000100, 0x0a090909, 0x0c0b0b0b, 0x312f3030,
+ 0x0d0c0c0c, 0x0e0d0d0d, 0x0c0b0b0b, 0x04010302, 0x03010201, 0x04040303,
+ 0x04030303, 0x00000000, 0x00000000, 0x01000100, 0x06050605, 0x0d0c0d0c,
+ 0x03020302, 0x00000000, 0x00000000, 0x00000000, 0x01000000, 0x05040404,
+ 0x09080607, 0x09080605, 0x07060405, 0x29212022, 0xca85a8b2, 0xff79c1de,
+ 0xfe4baad5, 0xff55b3db, 0xff57b6e0, 0xff62b8cd, 0xffbacb74, 0xffffda26,
+ 0xfffed924, 0xfffed82a, 0xfffed92d, 0xfffed828, 0xfffed926, 0xffffd829,
+ 0xfffcdb30, 0xfffdda34, 0xfffed92f, 0xfffdd92e, 0xfffddc2f, 0xfffdd829,
+ 0xfffad734, 0xfff1d565, 0xffedece7, 0xfff5f5f6, 0xfffefefe, 0xfffdfdfd,
+ 0xffb9b9b9, 0xffbebebe, 0xfff3f3f3, 0xfff8f8f8, 0xfffbfbfb, 0xfffdfdfd,
+ 0xfff7f7f7, 0xffeaeaea, 0xffe6e6e6, 0xfff6f6f6, 0xfff7f7f7, 0xffc7c7c7,
+ 0xfff8f8f8, 0xfffbfbfb, 0xfffefefe, 0xffffffff, 0xfef9f9f9, 0xfeaca9ab,
+ 0xff3d393d, 0xff4d484c, 0xe9424242, 0x01010101, 0x04030101, 0x02010000,
+ 0x00000000, 0x03020202, 0x0a090909, 0x00000000, 0x07060706, 0x0d0c0c0c,
+ 0x28262727, 0x47454547, 0x08070707, 0x0e0d0d0d, 0x0f0f0d0e, 0x08070707,
+ 0x07060606, 0x05040405, 0x03020203, 0x02010102, 0x02010201, 0x0a090a09,
+ 0x09080908, 0x01000100, 0x00000000, 0x00000000, 0x00000000, 0x04030304,
+ 0x0c0a0b0b, 0x0b0a0909, 0x0b0a0708, 0x09080608, 0x1d17171a, 0xaf6e8f97,
+ 0xff79c2dd, 0xff49a8d3, 0xff4eaed8, 0xff55b6e2, 0xff6ebbc1, 0xffc9ce64,
+ 0xffffda26, 0xfffdd927, 0xfffed926, 0xfffcd929, 0xfffddc40, 0xfffdda2f,
+ 0xfffed926, 0xfffdda2b, 0xfffedc33, 0xfffdda2f, 0xfffdd92b, 0xffffd827,
+ 0xfffdd827, 0xffffda27, 0xffe7d16d, 0xff959590, 0xff6f6b6e, 0xff8f8d8e,
+ 0xffb0afaf, 0xffd2d1d1, 0xffdfdfdf, 0xffededed, 0xffc4c4c4, 0xffc8c8c8,
+ 0xffd6d6d6, 0xffdbdbdb, 0xffd8d8d8, 0xffd4d4d4, 0xff9d9d9d, 0xff8e8d8e,
+ 0xffb1b0b1, 0xfff7f7f7, 0xffe0e0e0, 0xfffcfdfd, 0xfffdfdfd, 0xffddddde,
+ 0xfb9f9d9e, 0xfc2d292c, 0xff2e282c, 0xfe5a565b, 0xf63c383b, 0x54333333,
+ 0x08080708, 0x07060304, 0x02010101, 0x02010201, 0x08070807, 0x06050505,
+ 0x0d0c0c0c, 0x201e1f1f, 0x34313333, 0x18171617, 0x0e0e0d0e, 0x17171617,
+ 0x1d1c1b1d, 0x02010101, 0x00000000, 0x02000001, 0x01000001, 0x03010103,
+ 0x07060706, 0x09080908, 0x04030403, 0x00000000, 0x00000000, 0x00000000,
+ 0x03020203, 0x09050607, 0x0b090909, 0x13111012, 0x09070607, 0x110e0d0f,
+ 0xbc7899a6, 0xff77c1dd, 0xff4ba8d4, 0xfe4dadd6, 0xff56b7e1, 0xff78bcbb,
+ 0xffd8d152, 0xffffda26, 0xffffd827, 0xfffcdd43, 0xfffcdc3f, 0xfffbdf5e,
+ 0xfff9dd4e, 0xfffddc3f, 0xfffddb38, 0xfffed927, 0xfffdd928, 0xfffdd92d,
+ 0xfffdd829, 0xfffed829, 0xfffed928, 0xfff5d430, 0xffa39036, 0xff534d49,
+ 0xffaba8aa, 0xfffdfdfd, 0xffdadada, 0xffd8d7d7, 0xffc4c4c4, 0xffbfbfbf,
+ 0xffc7c7c7, 0xffcecece, 0xffc3c3c3, 0xffbfbfbf, 0xffb8b8b8, 0xffb1b1b1,
+ 0xffb8b8b8, 0xffdedede, 0xffb6b6b6, 0xfff1f1f1, 0xffffffff, 0xffc2c1c1,
+ 0xff757274, 0xfe4b474b, 0xff2b252a, 0xff2e292d, 0xfe332e32, 0xff514c50,
+ 0xfe514d50, 0xab606262, 0x1a1a1a1a, 0x0b0b0809, 0x04030203, 0x03020302,
+ 0x0a090a09, 0x0e0d0d0d, 0x13121112, 0x29262729, 0x19171818, 0x06050605,
+ 0x0d0c0c0d, 0x1b1a1a1a, 0x1a171819, 0x03010103, 0x01000000, 0x01000001,
+ 0x02000002, 0x02000002, 0x00000000, 0x03020302, 0x06050605, 0x01000000,
+ 0x00000000, 0x01000000, 0x04000002, 0x06000001, 0x0f07080a, 0x0d0a070a,
+ 0x03030101, 0xbd789ba2, 0xff75c1de, 0xff4eacd5, 0xfe4bacd2, 0xff56b4e1,
+ 0xff69bacf, 0xffbecb6f, 0xfffed928, 0xffffd822, 0xfffbdc3c, 0xfffbe068,
+ 0xfff9e179, 0xfff8e37d, 0xfffcdf65, 0xfffcdd4d, 0xfffbdb37, 0xfffed928,
+ 0xfffddb31, 0xfffdd932, 0xfffed82a, 0xfffeda29, 0xffffda2b, 0xfff5d333,
+ 0xff82722d, 0xff2d2925, 0xff959298, 0xffffffff, 0xffffffff, 0xffffffff,
+ 0xffffffff, 0xfff6f6f6, 0xfff0f0f0, 0xffe6e6e6, 0xffe2e2e2, 0xffe5e5e5,
+ 0xffededed, 0xfff5f5f5, 0xfff7f7f7, 0xffb9b9b9, 0xffe4e4e3, 0xffe9e8e9,
+ 0xff5c5a5d, 0xff342f33, 0xff2e292d, 0xff2d282c, 0xff2d282c, 0xff2e292d,
+ 0xff322d31, 0xff464044, 0xff4a464a, 0xea8f8e8f, 0x5c524f52, 0x0c0c080a,
+ 0x04030102, 0x07060706, 0x0e0d0e0d, 0x11101010, 0x16151515, 0x14131213,
+ 0x05040404, 0x00000000, 0x22212121, 0x0e0d0c0e, 0x04020204, 0x01000001,
+ 0x02000002, 0x01000001, 0x01000001, 0x03000002, 0x04030403, 0x02010101,
+ 0x00000000, 0x03020302, 0x02000101, 0x05000001, 0x05000001, 0x08010203,
+ 0x0f060407, 0x0c050407, 0xa069838b, 0xff89c6df, 0xfe59b3d7, 0xff4ba8d3,
+ 0xff57b5e1, 0xff5ebad5, 0xff9fc28d, 0xfffad930, 0xffffd824, 0xfffdd830,
+ 0xfffbdf57, 0xfff8e272, 0xfff6e589, 0xfff7e283, 0xfff6e382, 0xfff8df64,
+ 0xfffddc4a, 0xfffdda2c, 0xfffdd82b, 0xfffacf26, 0xfffbd527, 0xfffed827,
+ 0xfffed825, 0xfffdd225, 0xff917a39, 0xff352d33, 0xff302e30, 0xff3b373a,
+ 0xff5b585b, 0xff7e7b7e, 0xffaeaeae, 0xffeaeaea, 0xfff4f3f4, 0xfff6f6f6,
+ 0xfff5f5f5, 0xfff5f5f5, 0xfff6f6f6, 0xffd8d8d8, 0xffa7a7a7, 0xffefefef,
+ 0xffe5e4e5, 0xff524d51, 0xff2b262b, 0xff2f2a2e, 0xff2f2a2e, 0xff2f2a2e,
+ 0xff2e292d, 0xff2e292d, 0xff302b2f, 0xff433d41, 0xff484246, 0xff939192,
+ 0x8c6c6b6d, 0x10100d0e, 0x07060405, 0x0d0c0c0c, 0x0e0d0e0d, 0x12111111,
+ 0x11101010, 0x09080808, 0x07060706, 0x08070707, 0x08060608, 0x01000000,
+ 0x01000001, 0x02000002, 0x01000001, 0x01000001, 0x08050608, 0x06050605,
+ 0x05040404, 0x00000000, 0x03020202, 0x04020202, 0x05000001, 0x06000001,
+ 0x0a020304, 0x0c040305, 0x0a030003, 0x764e5e64, 0xff97ccdb, 0xff80c0d6,
+ 0xff5dafd0, 0xff52b3dd, 0xff53b3df, 0xff6ebac3, 0xffcbd06b, 0xffedd53c,
+ 0xfffed824, 0xfffcdb3a, 0xfffae36a, 0xfff8e173, 0xfff8e387, 0xfff6e593,
+ 0xfff7e27b, 0xfff9e170, 0xfffbdf57, 0xfffed92c, 0xfffdd528, 0xffdab123,
+ 0xffc2a528, 0xfffcd82a, 0xffe1b824, 0xffb89326, 0xff40392e, 0xff726e71,
+ 0xffbcbbbb, 0xffdad9da, 0xffdbdada, 0xffebeaea, 0xffc9c8c9, 0xffa5a4a4,
+ 0xffa9a8a8, 0xffacabab, 0xffadabac, 0xffaeacad, 0xffbbbbbb, 0xffdadada,
+ 0xffffffff, 0xffffffff, 0xff989798, 0xff2f2a2e, 0xff2e292d, 0xff2e292d,
+ 0xff2f2a2e, 0xff2e292d, 0xff2f2a2e, 0xff2e292d, 0xff312c30, 0xff423d41,
+ 0xfe474246, 0xff8b898b, 0x71434344, 0x12110e0f, 0x0c0b080a, 0x110f0f10,
+ 0x0f0e0f0e, 0x13111312, 0x09080908, 0x03020302, 0x06050505, 0x100f0f0f,
+ 0x01000001, 0x01000001, 0x01000001, 0x02000001, 0x03000103, 0x0d0a0b0d,
+ 0x13101113, 0x03020202, 0x05040504, 0x02010101, 0x04010101, 0x06000001,
+ 0x07000002, 0x08000103, 0x0e050406, 0x06000000, 0x50364144, 0xf8a7ccd2,
+ 0xf599c5d0, 0xfd93c4d4, 0xff57b3d6, 0xff41a0cc, 0xff5ab6dc, 0xff82c4d1,
+ 0xffafca90, 0xfff5d732, 0xffffd925, 0xfffedb33, 0xfffcdb3f, 0xfff9e170,
+ 0xfff7e48e, 0xfff8e27c, 0xfff8e16d, 0xfff9df62, 0xfffbde52, 0xfffedb2b,
+ 0xfffdc825, 0xff9c8129, 0xff74652a, 0xffb79b2e, 0xff7a6026, 0xff4d4533,
+ 0xff97959a, 0xfffbfdfa, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,
+ 0xffffffff, 0xffffffff, 0xffffffff, 0xfffefefe, 0xfffbfbfb, 0xfffefffe,
+ 0xffffffff, 0xffffffff, 0xfffefefe, 0xfff6f6f6, 0xff656365, 0xff2c272b,
+ 0xff2e282c, 0xff2d282c, 0xff2e292d, 0xff2d282c, 0xff2f2a2e, 0xff2f2a2e,
+ 0xff302b2f, 0xff423d41, 0xff3d383c, 0xff807e81, 0xa7676969, 0x13100d0e,
+ 0x04030102, 0x0b0a090b, 0x0f0e0f0e, 0x09080908, 0x04030303, 0x0a090a09,
+ 0x0f0e0e0e, 0x24222223, 0x01000001, 0x02000002, 0x01000001, 0x00000000,
+ 0x04030303, 0x02010201, 0x02000002, 0x00000000, 0x05040504, 0x04030303,
+ 0x04000001, 0x07000002, 0x07000002, 0x0c040404, 0x08020000, 0x01000000,
+ 0x583b4549, 0xf7a1c8d2, 0xd38cabb5, 0xfc6ebbd8, 0xff3191be, 0xff50b1d8,
+ 0xff63bde5, 0xff88c3b5, 0xffe4d449, 0xffffda29, 0xffffd826, 0xffffd829,
+ 0xfffddc3a, 0xfff9e06d, 0xfff8e277, 0xfffbde4f, 0xfffcdb43, 0xfffddd49,
+ 0xfff5d447, 0xffeaca44, 0xffc19930, 0xff4e4429, 0xff51472d, 0xff433828,
+ 0xff302c2c, 0xff726d70, 0xfff8f8f8, 0xfffffefe, 0xfffdfdfd, 0xfffefdfe,
+ 0xfffdfdfd, 0xfffefefe, 0xfffefefe, 0xfffdfdfd, 0xfffefefe, 0xfffefefe,
+ 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffdfdfd, 0xfffefefe, 0xffe3e2e2,
+ 0xff524d50, 0xfe2c272b, 0xff2b282b, 0xfe2d282c, 0xff2e282c, 0xff2e292d,
+ 0xff2e292d, 0xff2f2a2e, 0xff2e292d, 0xff3f3a3e, 0xff353034, 0xff767477,
+ 0xbb757878, 0x110a0809, 0x05000000, 0x07030103, 0x05030403, 0x01000100,
+ 0x0d0c0d0c, 0x0d0c0c0c, 0x201e1e1f, 0x25222325, 0x01000001, 0x02000002,
+ 0x08050607, 0x0f0c0d0f, 0x02000002, 0x02000001, 0x01000000, 0x04000000,
+ 0x01000000, 0x04030303, 0x04010201, 0x05000001, 0x07000002, 0x09040103,
+ 0x04010100, 0x0e080709, 0xbf7c9aa0, 0x9b647c82, 0xc46597a8, 0xff3996bd,
+ 0xff42a3cd, 0xff56b4e0, 0xff6ab9ca, 0xffcdd162, 0xffefd846, 0xfffcd829,
+ 0xfffed929, 0xfffed925, 0xfffcda3b, 0xfffae273, 0xfffbdc40, 0xffffd929,
+ 0xfffed927, 0xffffdb33, 0xffe5b32d, 0xffad8e3e, 0xff63583b, 0xff2f2a29,
+ 0xff383129, 0xff2f292e, 0xff2c2a2b, 0xff817d81, 0xffffffff, 0xfffefefe,
+ 0xfffefefe, 0xfffdfefd, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe,
+ 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe,
+ 0xfffefefe, 0xffd4d3d3, 0xff413f41, 0xff2f292d, 0xf1464748, 0xff2d292d,
+ 0xff2c292e, 0xff302b2e, 0xff2d282c, 0xff2e292d, 0xff2e292d, 0xff3a373a,
+ 0xff332f33, 0xff787376, 0xb9727373, 0x12080508, 0x0a030003, 0x0c030204,
+ 0x0b060608, 0x1c181a1b, 0x19161718, 0x16161515, 0x19181818, 0x12111111,
+ 0x04020204, 0x0f0c0d0f, 0x0b08090b, 0x01000001, 0x02000001, 0x04000001,
+ 0x07000002, 0x07000002, 0x06000002, 0x05000001, 0x03000000, 0x04010102,
+ 0x05020102, 0x06040203, 0x0e0b0709, 0xae758d92, 0xa96d868c, 0x76445b64,
+ 0xfa4fa0c4, 0xff399ac6, 0xff4bacd3, 0xff4eadd4, 0xff8bc2a5, 0xffc0cc75,
+ 0xffe7d440, 0xffffda2b, 0xfffeda28, 0xfffdd927, 0xfffcdf53, 0xfffcdc45,
+ 0xfffed825, 0xffffd825, 0xfffed629, 0xfffed731, 0xffd8a428, 0xff715b2c,
+ 0xff372f2b, 0xff2e2a2b, 0xff322b2c, 0xff2f292e, 0xff2d292d, 0xff777576,
+ 0xfffdfdfd, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe,
+ 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffdfdfd,
+ 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xffc9c8c8, 0xfe363236, 0xff322f32,
+ 0x583d3a3c, 0xe23d3d3e, 0xff2b272a, 0xfe2c272b, 0xff2d282c, 0xff2e292d,
+ 0xff2f2a2e, 0xff342f33, 0xfe332f33, 0xff757174, 0xb36c6d6d, 0x12060507,
+ 0x0b030003, 0x0b020204, 0x07010103, 0x15121314, 0x221f2022, 0x211e1e20,
+ 0x0f0b0b0d, 0x0e0b0c0d, 0x1a17181a, 0x0c090a0b, 0x03000001, 0x05000001,
+ 0x06000002, 0x07000002, 0x07000002, 0x07000002, 0x06000001, 0x07000002,
+ 0x05000001, 0x03010101, 0x04010000, 0x04000000, 0x835a686c, 0xb97d9698,
+ 0x3822292d, 0xeb62a5c0, 0xff3797c1, 0xfe40a1ca, 0xff48a7d2, 0xff63b9d1,
+ 0xff98c498, 0xffe7d445, 0xffffda27, 0xfffdd926, 0xffffd826, 0xfffcda38,
+ 0xfffddd45, 0xfffdda25, 0xfffed826, 0xfffeda2b, 0xfffbc521, 0xffffd12e,
+ 0xffcf9822, 0xff584a33, 0xff302c2a, 0xff2f2b2c, 0xff2d292d, 0xff2d292c,
+ 0xff2e282c, 0xff747172, 0xfffbfbfb, 0xfffefefe, 0xfffefefe, 0xfffefefe,
+ 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe,
+ 0xfffefefe, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffc3c3c4,
+ 0xff322e32, 0xff383738, 0x332a2929, 0x7d282829, 0xff312d30, 0xff2d282d,
+ 0xff2d282c, 0xff2e292d, 0xff2f2a2e, 0xff312c30, 0xfe373135, 0xff6e686b,
+ 0x8b545354, 0x0d030205, 0x0a030003, 0x0c060508, 0x110d0e10, 0x2a27282a,
+ 0x1b18181a, 0x08030205, 0x05000001, 0x05000002, 0x0a060608, 0x05000001,
+ 0x06000001, 0x07000002, 0x07000002, 0x06000001, 0x07000002, 0x06000001,
+ 0x07000002, 0x06000001, 0x0a020304, 0x08020002, 0x09020002, 0x0a010002,
+ 0x36222528, 0x150a0a0e, 0xc36994a4, 0xff3896be, 0xff3596c0, 0xfe41a3cd,
+ 0xff51afd7, 0xff6db9c2, 0xffd5d156, 0xfffbd429, 0xfffed525, 0xfffdd926,
+ 0xfffed627, 0xfffbca24, 0xffffd82c, 0xfffed925, 0xffffd928, 0xffffd729,
+ 0xfff9bb1d, 0xfff8c628, 0xffb48320, 0xff594f3e, 0xff2e2929, 0xff2e292d,
+ 0xff2d282d, 0xff2d292c, 0xff2d282c, 0xff6a686a, 0xfff6f6f6, 0xfffefefe,
+ 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe, 0xfffefefe,
+ 0xfffefefe, 0xfffdfdfd, 0xfffefefe, 0xffebebec, 0xff999798, 0xff6e6d6d,
+ 0xffc1c0c0, 0xffb6b4b6, 0xff312c30, 0xff484748, 0x07070707, 0x38171717,
+ 0xe5333034, 0xff2d292a, 0xff2d282d, 0xff302b2f, 0xff302b2f, 0xff302b2f,
+ 0xff363034, 0xff605d5f, 0x5c333334, 0x07010001, 0x06030102, 0x08070707,
+ 0x0c0b0c0b, 0x0b08090a, 0x07000103, 0x06000001, 0x07000002, 0x06000002,
+ 0x06000001, 0x07000002, 0x06000001, 0x07000002, 0x07000002, 0x07000002,
+ 0x07000002, 0x07000002, 0x07000002, 0x09010203, 0x0b030204, 0x0a020002,
+ 0x0a010002, 0x0a020003, 0x05000000, 0x7142575f, 0xff4ba2c8, 0xfe2a8bb9,
+ 0xff409fca, 0xff49a6d2, 0xff4ba6c2, 0xffb6cb7b, 0xffe1d048, 0xfff3cc2c,
+ 0xfffddb25, 0xffffd92a, 0xfffbc822, 0xfffcd026, 0xfffed927, 0xffffd827,
+ 0xfffed929, 0xfffed328, 0xfff9b81a, 0xfff4bd23, 0xff956f25, 0xff4a4337,
+ 0xff2d282c, 0xff2d292c, 0xff2d282d, 0xff2e292c, 0xff2d282c, 0xff474446,
+ 0xffd3d2d3, 0xfffefefe, 0xfffdfdfd, 0xfffefefe, 0xfffefefe, 0xfffefefe,
+ 0xfffefefe, 0xfffefefe, 0xfffdfdfd, 0xfffefefe, 0xfff4f3f4, 0xff908e91,
+ 0xff716c71, 0xff575256, 0xff464145, 0xff5c585c, 0xff2e292d, 0xff454547,
+ 0x24181616, 0x120e0e0d, 0xb73f3e40, 0xff322d31, 0xfe2c272b, 0xff302b2f,
+ 0xff312c30, 0xff312c30, 0xff342f33, 0xe8434144, 0x3c1f1d1f, 0x09080508,
+ 0x09090607, 0x05040404, 0x02000000, 0x06000001, 0x07000002, 0x07000002,
+ 0x06000001, 0x05000002, 0x07000002, 0x06000001, 0x07000002, 0x07000002,
+ 0x07000002, 0x07000002, 0x07000002, 0x06000001, 0x09010203, 0x10060608,
+ 0x0a020002, 0x09010002, 0x09020002, 0x09030001, 0x52323e42, 0xfa5facca,
+ 0xfe2789b4, 0xfe3a99c3, 0xff41a2cd, 0xff3e9dc0, 0xff90c3a3, 0xffb6c976,
+ 0xffd2c551, 0xfffdd629, 0xfffedb2e, 0xfffcd42a, 0xfffdcb26, 0xfffed72a,
+ 0xfffdd926, 0xfffed828, 0xfffeda29, 0xfffed52b, 0xfff8b91c, 0xffd9a621,
+ 0xff5f4723, 0xff302a2b, 0xff2d292d, 0xff2e292c, 0xff2e282d, 0xff2d292c,
+ 0xff2e292d, 0xff292428, 0xff575457, 0xffdcdbdc, 0xffffffff, 0xfffdfdfd,
+ 0xfffdfdfd, 0xfffefefe, 0xfffefefe, 0xfffdfdfd, 0xfffdfdfd, 0xffffffff,
+ 0xffbebdbf, 0xff757074, 0xff4e494d, 0xff2e292d, 0xff2d282c, 0xff322e32,
+ 0xfe2d292d, 0xff2b282c, 0xe4464546, 0x52232222, 0x241e1d1d, 0xad373839,
+ 0xff342f33, 0xff2e292d, 0xff302b2f, 0xff312c30, 0xff302c30, 0xce48484a,
+ 0x231e1c1d, 0x08080506, 0x07050306, 0x08030406, 0x06000001, 0x06000002,
+ 0x06000002, 0x07000002, 0x05000001, 0x05040403, 0x07000002, 0x07000002,
+ 0x07000002, 0x07000002, 0x07000002, 0x07000002, 0x07000002, 0x05000001,
+ 0x0f060608, 0x0b020003, 0x0a020003, 0x0a020002, 0x08000000, 0x3620262b,
+ 0xde5b97ad, 0xff348fb7, 0xfe2c8bb7, 0xff3799c3, 0xff3b9ac3, 0xff6eb8c2,
+ 0xff87bfad, 0xff9abb8e, 0xffe8d23d, 0xffffda31, 0xfffcd72b, 0xfffccc25,
+ 0xfffdd227, 0xfffed829, 0xfffed927, 0xfffdd829, 0xfffed929, 0xfffed52a,
+ 0xfff5b71c, 0xffb88b24, 0xff564425, 0xff2f2b2b, 0xff2e292e, 0xff2e292d,
+ 0xff2e282d, 0xff2d292c, 0xff2e292d, 0xff2e282c, 0xff282327, 0xff534f53,
+ 0xffdddcde, 0xffffffff, 0xfffdfdfd, 0xfffdfdfd, 0xfffefefe, 0xfffdfdfd,
+ 0xffffffff, 0xffd5d4d6, 0xff767276, 0xff544e53, 0xff322c30, 0xff2e292d,
+ 0xff2d292d, 0xff2d292c, 0xff2f2a2e, 0xfe2d282c, 0xff312c30, 0xf83a383a,
+ 0x702f2f2f, 0x16161616, 0xff413f41, 0xff2c272b, 0xff2e292d, 0xfe2d282c,
+ 0xff322f33, 0xb8545656, 0x0f0e0c0d, 0x05030002, 0x110a090b, 0x06000001,
+ 0x06000001, 0x07000002, 0x06000001, 0x06000002, 0x03010101, 0x07060706,
+ 0x07000002, 0x07000002, 0x07000002, 0x07000002, 0x07000002, 0x07000002,
+ 0x06000001, 0x0e050608, 0x0d040305, 0x0a030002, 0x0b010003, 0x08010001,
+ 0x170f0e13, 0xc1588798, 0xff338db5, 0xff3090ba, 0xff2b8db8, 0xff3091bc,
+ 0xff50acce, 0xff6abac6, 0xff83b9ab, 0xffc7ca60, 0xfffdd32a, 0xfffcd329,
+ 0xfffccb27, 0xfffbc620, 0xfffdd428, 0xfffcda28, 0xffffd82b, 0xfffed928,
+ 0xfffdd928, 0xffffd72b, 0xfff4b81d, 0xffb98c1f, 0xff664d26, 0xff312c2a,
+ 0xff2e2a2b, 0xff2d292b, 0xff2d282d, 0xff2e292c, 0xff2e292d, 0xff2e292d,
+ 0xff2d282c, 0xff2e292d, 0xff4b484c, 0xffd6d6d6, 0xffffffff, 0xfffdfdfd,
+ 0xfffdfdfd, 0xffffffff, 0xffefefef, 0xff736f73, 0xff443f43, 0xff363034,
+ 0xff2d282c, 0xff2d282c, 0xff2d282c, 0xff2e292d, 0xff2e292d, 0xff2e292d,
+ 0xfe2f2a2e, 0xff2f2a2e, 0xfa383637, 0x784d4e4f, 0xff3b393c, 0xff2d272b,
+ 0xff2e292d, 0xfe2f292d, 0xf239373a, 0x34252124, 0x05020002, 0x09010002,
+ 0x1209080a, 0x06000001, 0x06000001, 0x06000001, 0x07000002, 0x07000002,
+ 0x05000001, 0x03020202, 0x07000002, 0x07000002, 0x07000002, 0x07000002,
+ 0x06000001, 0x06000001, 0x09010203, 0x0f060507, 0x09010002, 0x0a020003,
+ 0x08000002, 0x0e090505, 0xad608391, 0xff338ab2, 0xfe2b8cb5, 0xff2787b3,
+ 0xff2d8eb8, 0xff3e9dc8, 0xff5fb8d8, 0xff6bb8c9, 0xffa6c286, 0xffe7c63c,
+ 0xfff9ca24, 0xfffdca24, 0xfff9bd1c, 0xfffdd52a, 0xfffdd62a, 0xffffd62a,
+ 0xfffad023, 0xffffd929, 0xfffdd829, 0xffffd92c, 0xfff7b81c, 0xffd39f1e,
+ 0xff8a6a24, 0xff3c3429, 0xff2f2a2d, 0xff2d292e, 0xff2e282d, 0xff2e282c,
+ 0xff2d292d, 0xff2e292d, 0xff2e292d, 0xff2d282c, 0xff2e292d, 0xff4c484c,
+ 0xffd1d0d1, 0xfffefefe, 0xfffefefe, 0xffffffff, 0xff9a9899, 0xff4e494d,
+ 0xff353034, 0xff2d282c, 0xff2d292c, 0xff2e282d, 0xff2e292d, 0xff2d282c,
+ 0xff2d282c, 0xff2f2a2e, 0xff2f2a2e, 0xfe322e32, 0xff2c2529, 0xff545657,
+ 0xfe3f3d40, 0xfe2b262a, 0xfe2d282c, 0xff302d2f, 0x99414342, 0x00000000,
+ 0x09010002, 0x0a020003, 0x0f060708, 0x06000001, 0x07000002, 0x06000001,
+ 0x06000001, 0x07000002, 0x06000002, 0x06020204, 0x07000002, 0x07000002,
+ 0x07000002, 0x06000001, 0x06000001, 0x0a020304, 0x0c020205, 0x0a020002,
+ 0x0a020002, 0x09010002, 0x06030001, 0x894f6772, 0xff4293b5, 0xfe2181ab,
+ 0xfe2282ae, 0xff2b88b4, 0xff3695c1, 0xff54b3da, 0xff61b7d7, 0xff98be96,
+ 0xffd2c251, 0xffefc32d, 0xfffcc41d, 0xfffabe20, 0xffffd428, 0xfffcd128,
+ 0xfffcd62d, 0xfffbc622, 0xfffdd628, 0xfffed929, 0xfffdda2a, 0xfffdd42a,
+ 0xfff9ba1b, 0xfffcc023, 0xffdca524, 0xff664f24, 0xff322b28, 0xff2d292c,
+ 0xff2d292c, 0xff2e292c, 0xff2d292d, 0xff2e292d, 0xff2e292d, 0xff2d292d,
+ 0xff2d282c, 0xff2a2529, 0xff484547, 0xffc1bfc1, 0xffffffff, 0xffe9e8e9,
+ 0xff5f5c5e, 0xff312c30, 0xff2e292d, 0xff2d292c, 0xff2d292d, 0xff2e282d,
+ 0xff2d282c, 0xff2d282c, 0xff2e292d, 0xff2f2a2e, 0xff302b2f, 0xff342f33,
+ 0xfe2f2b2f, 0xff322d32, 0xfe363437, 0xfe2b262a, 0xff332f32, 0xdf494c4c,
+ 0x1f161314, 0x06000000, 0x0a020003, 0x10070709, 0x06000001, 0x06000001,
+ 0x06000001, 0x07000002, 0x07000002, 0x06000002, 0x05000002, 0x05000001,
+ 0x07000002, 0x06000001, 0x06000001, 0x07000002, 0x0d040506, 0x0d040306,
+ 0x0b030003, 0x0b020004, 0x09000000, 0x04000000, 0x5f36464b, 0xf64794b4,
+ 0xff2282ab, 0xfe2383ab, 0xff2b88ae, 0xff3894be, 0xff4ba7d1, 0xff57b3d9,
+ 0xff80bab0, 0xffbebd67, 0xffedc32e, 0xfffdc115, 0xfffbc01e, 0xfffed22a,
+ 0xfffcd132, 0xfffccf2a, 0xfffbc525, 0xfffdd027, 0xfffdd829, 0xfffed82b,
+ 0xfffeda30, 0xfffcc621, 0xfffdcb23, 0xfffcc624, 0xfffebf23, 0xffd3981c,
+ 0xff7c6026, 0xff433728, 0xff2c292a, 0xff2d292c, 0xff2e292d, 0xff2d292d,
+ 0xff2d292d, 0xff2e292d, 0xff2d282c, 0xff2d282c, 0xff2b252a, 0xff3d383c,
+ 0xff959394, 0xffa5a4a6, 0xff373337, 0xff2d282c, 0xff2d282c, 0xff2d282c,
+ 0xff2e282d, 0xff2d282c, 0xff2d282c, 0xff2d282c, 0xff2d282c, 0xff2e292d,
+ 0xff2c272b, 0xff302b2f, 0xff312c30, 0xff3c363a, 0xfe2e2a2e, 0xff312c2f,
+ 0xc7414343, 0x351c1a1d, 0x05000000, 0x09010002, 0x0d040305, 0x09010103,
+ 0x05000001, 0x03000000, 0x05000001, 0x06000001, 0x05000001, 0x06000002,
+ 0x06000002, 0x07000002, 0x06000001, 0x07000002, 0x09010203, 0x0f060507,
+ 0x08010001, 0x06000000, 0x05000000, 0x08000002, 0x08020001, 0x3720262b,
+ 0xdc4d8ba5, 0xff2a89b2, 0xfe2684af, 0xff3089aa, 0xff469ab2, 0xff49a6ca,
+ 0xff53b1d8, 0xff73b6c4, 0xffa3b787, 0xffd9c34a, 0xffdeb836, 0xfffdc01b,
+ 0xfffdd326, 0xfffbc933, 0xfffcd33a, 0xfffcc923, 0xfffac222, 0xfffdd528,
+ 0xfffed829, 0xfffdd931, 0xfffdd02f, 0xfffbc922, 0xfffed92a, 0xfffdd132,
+ 0xfffcc223, 0xfffebb21, 0xffcb951d, 0xff705725, 0xff322d2a, 0xff2d282c,
+ 0xff2e292d, 0xff2e292d, 0xff2d282c, 0xff2d282c, 0xff2e292d, 0xff2e292d,
+ 0xff2d282c, 0xff2d282c, 0xff332e31, 0xff373337, 0xff2f292d, 0xff2e282c,
+ 0xff2f2a2e, 0xff2f2a2e, 0xff2d282c, 0xff2e292d, 0xff2e292d, 0xff353034,
+ 0xff423d41, 0xff3d383c, 0xff423d41, 0xff343134, 0xff3d393d, 0xff3c393c,
+ 0xff302c30, 0xde3d3d3e, 0x351b1b1d, 0x09010002, 0x0a020002, 0x0a020002,
+ 0x0a030204, 0x04010102, 0x00000000, 0x01000000, 0x03000001, 0x04000001,
+ 0x05000001, 0x05000001, 0x05000001, 0x05000001, 0x0d040406, 0x0d050406,
+ 0x10060407, 0x1f0c0a0d, 0x411c1d21, 0x6134393b, 0x7f4c5356, 0x59343b3f,
+ 0x3621282d, 0xdb6c9dad, 0xff358fb7, 0xfe2480aa, 0xff3b8faa, 0xff75a588,
+ 0xff68a9a7, 0xff55aed3, 0xff6eb5c5, 0xff96b798, 0xffaec17c, 0xffc7b24b,
+ 0xfffbbb16, 0xfffdd025, 0xfffbcc26, 0xfffbcc2f, 0xfffdcc25, 0xfffac31f,
+ 0xfffbcb23, 0xfffdd727, 0xfffdd82b, 0xfffdd42e, 0xfff8c120, 0xfffcd629,
+ 0xfffed92a, 0xfffdd62b, 0xfffdce2d, 0xfffac222, 0xfff7b61d, 0xff9f7a25,
+ 0xff463b29, 0xff2d282c, 0xff2d292d, 0xff2d292d, 0xff2e292d, 0xff2e292d,
+ 0xff2e292d, 0xff2d282c, 0xff2e292d, 0xff2f2a2e, 0xff2e292d, 0xff2c292c,
+ 0xff2d292c, 0xff2e282d, 0xfe2c272b, 0xff2f2a2d, 0xff302b2f, 0xff383337,
+ 0xff555054, 0xff777377, 0xff8a888b, 0xff767477, 0xfb555356, 0xf7555656,
+ 0xfb636464, 0xff3b3a3b, 0xf4373638, 0x5d2f2f30, 0x02000000, 0x0a000002,
+ 0x09010002, 0x08020103, 0x06030304, 0x02010101, 0x01000000, 0x01000000,
+ 0x01000000, 0x01000000, 0x02000000, 0x03000000, 0x03000000, 0x02000000,
+ 0x09030003, 0x3818191d, 0x972f3439, 0xec465358, 0xff4b6471, 0xff527686,
+ 0xff548ba4, 0xff6daac3, 0xf961a3bf, 0xff529ebd, 0xfe2682ae, 0xfe2484b0,
+ 0xff80ad8c, 0xff9db06d, 0xff66adbb, 0xff70b3bf, 0xffbab46a, 0xffa0b887,
+ 0xffbdb964, 0xfff5bf22, 0xfffccb23, 0xfffcd227, 0xfffbc827, 0xfffbcc27,
+ 0xfffdca24, 0xfffcc822, 0xfffcd026, 0xfffcd426, 0xfffdd529, 0xfffac021,
+ 0xfffbcc29, 0xfffdd82b, 0xfffed727, 0xfffed92a, 0xfffdda32, 0xfffdd22c,
+ 0xfff9c220, 0xffc59826, 0xff584828, 0xff2e292d, 0xff2e292c, 0xff2d292d,
+ 0xff2d282d, 0xff2d282c, 0xff2e292d, 0xff2e292d, 0xff2d282c, 0xff2e292d,
+ 0xff2f2a2e, 0xff2e292d, 0xff2d282c, 0xff2e292c, 0xff2f2a2e, 0xf2363335,
+ 0xd9302e30, 0xdd363437, 0xd7373537, 0xc42c2a2b, 0xc2313031, 0xae3b3c3c,
+ 0x82343435, 0x7d4d5050, 0xe0626767, 0xff444346, 0x83444445, 0x00000000,
+ 0x09000002, 0x09020002, 0x08020103, 0x08050606, 0x05040504, 0x01000100,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x01000000, 0x00000000, 0x552c2b2c, 0xe23d454b, 0xff3c6577, 0xff6aa0bb,
+ 0xff8ec4d8, 0xfe92c9e2, 0xfe70b7d4, 0xff7ebad4, 0xff8bbed6, 0xfe7ab7ce,
+ 0xff1d7eaa, 0xff2b8dbb, 0xff99af78, 0xffa3b077, 0xff89b19d, 0xffc5b45c,
+ 0xffecb72f, 0xffbaba65, 0xffecbf2e, 0xfffcca21, 0xfffbce23, 0xfffccc27,
+ 0xfffbc723, 0xfffcce29, 0xfffac21f, 0xfffdcd25, 0xfffac61a, 0xfffcd125,
+ 0xfffabc1e, 0xfffabf26, 0xfffcd333, 0xfffbca22, 0xfffdd426, 0xffffd82a,
+ 0xfffdda2e, 0xfffdd62b, 0xfff5bc20, 0xffa58524, 0xff70572a, 0xff352d2a,
+ 0xff2d2a2c, 0xff2e282e, 0xff2d292d, 0xff2e292c, 0xff2e292d, 0xff2e292d,
+ 0xff2e292d, 0xff2d282c, 0xff2d282c, 0xff2e292d, 0xff2d282c, 0xff2d292c,
+ 0xff312d31, 0xb63c3c3e, 0x26100e11, 0x301b191b, 0x2d202020, 0x1b171616,
+ 0x13131112, 0x00000000, 0x00000000, 0x5d313031, 0xff616765, 0x6b2e2e32,
+ 0x06020003, 0x09000001, 0x09010002, 0x07020001, 0x0b08090a, 0x06040505,
+ 0x01000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xf144484c, 0xff457b94,
+ 0xff5bb2d8, 0xfe8acae6, 0xff91cde8, 0xff79bfdc, 0xff4e9dc2, 0xff3d92b4,
+ 0xff9cc3d8, 0xff97b8c5, 0xfe3881a3, 0xff3399c5, 0xfea2b68b, 0xffd3af45,
+ 0xffecb12c, 0xfff8b821, 0xffd1bb4d, 0xffe5bb36, 0xfffdc722, 0xfff9c21d,
+ 0xfffdd128, 0xfffbc624, 0xfffcce28, 0xfffabd1c, 0xfffecd25, 0xfffcca1e,
+ 0xfffcca21, 0xfffabc1e, 0xfffbaf17, 0xfffdce2c, 0xfffabd1d, 0xfffdc722,
+ 0xfffed82b, 0xfffdd72a, 0xffffd82c, 0xfff9c31e, 0xfffdca25, 0xffdaa421,
+ 0xff5d4922, 0xff53422a, 0xff2d282c, 0xff2d292b, 0xff2d282d, 0xff2e282c,
+ 0xff2d282d, 0xff2d282c, 0xff2d282c, 0xff2e292d, 0xff2d282c, 0xff2e292d,
+ 0xff2e292d, 0xff2c292c, 0xff322b2f, 0xba373739, 0x110c0a0d, 0x0f0c0b0d,
+ 0x1a18191a, 0x08070807, 0x05040304, 0x02010000, 0x0a060505, 0x94535755,
+ 0x733c3d3d, 0x0f050306, 0x09010002, 0x09010002, 0x0a040205, 0x07060505,
+ 0x03000001, 0x02000000, 0x01000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0xff4f7484, 0xfe5bb8e0, 0xff5db6dc, 0xff7fc8e6, 0xff68b6da, 0xff5fadca,
+ 0xff348fb6, 0xff267da2, 0xfe96bccc, 0xfcb2887d, 0xff3b6577, 0xfe8aada6,
+ 0xffd7af45, 0xfff8ad16, 0xfffcb516, 0xffe9b931, 0xffe8b72e, 0xfffebc1a,
+ 0xfff9ba18, 0xfffdcd25, 0xfffbc520, 0xfffdca26, 0xfff9bd1e, 0xfffdc21e,
+ 0xfff8b70f, 0xfffbc71c, 0xfffbc221, 0xfff9ae15, 0xfffcc522, 0xfffbc223,
+ 0xfffbbc1b, 0xfffbca21, 0xfffccc24, 0xfffdd333, 0xfffbca24, 0xfffcc220,
+ 0xfff7cf29, 0xfff8b921, 0xffa17520, 0xff463727, 0xff443b2a, 0xff302b2b,
+ 0xff2e2a2d, 0xff2d292d, 0xff2e2a2c, 0xff2f2a2e, 0xff2e292d, 0xff2d282c,
+ 0xff2d282c, 0xff2e292d, 0xff2f2a2e, 0xff2f2a2e, 0xff2f2a2d, 0xc6322f31,
+ 0x1d111013, 0x110e0d10, 0x13131212, 0x0b0a0a0a, 0x01000101, 0x02010000,
+ 0x07050303, 0x22171717, 0x02000000, 0x08020002, 0x0a020001, 0x0a040404,
+ 0x05020302, 0x04000001, 0x03000001, 0x02000000, 0x01000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0xff5db1d6, 0xff50add4, 0xff65b7da, 0xff6abcde,
+ 0xff6db2cf, 0xff469abf, 0xff1d7aa3, 0xff4a97b9, 0xffa37e73, 0xff9d5d35,
+ 0xfe417280, 0xffdd9c26, 0xfef1a01e, 0xfffcb017, 0xfffaaf16, 0xfff9ae15,
+ 0xfffbb114, 0xfff9b218, 0xfffcc11e, 0xfffbc622, 0xfffdc724, 0xfff9bd1d,
+ 0xfffbb91d, 0xfffab313, 0xfffabe17, 0xfffdc61f, 0xfffcb418, 0xfffbbe1e,
+ 0xfffdc422, 0xfffbbd1f, 0xfffcbe20, 0xfffabd1c, 0xfffabb22, 0xfffcce2b,
+ 0xfffbc11e, 0xfffcc01c, 0xffeabc25, 0xffb98a1e, 0xffe4a424, 0xff6c5223,
+ 0xff3f3327, 0xff3c332b, 0xff2e2a2a, 0xff2d282e, 0xff2e292d, 0xff2d282c,
+ 0xff2d282c, 0xff2e292d, 0xff2e292d, 0xff2d282c, 0xff2e292d, 0xff2f2a2c,
+ 0xff2e292c, 0xda373638, 0x331b1d1e, 0x09050607, 0x09080908, 0x00000000,
+ 0x00000000, 0x05030203, 0x07030103, 0x06030102, 0x04010001, 0x08030304,
+ 0x09040406, 0x0a060709, 0x06000102, 0x06000002, 0x05000001, 0x02000000,
+ 0x01000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xff5fb6dd, 0xff419bc2,
+ 0xff5ca8ca, 0xff51a3c6, 0xff3e92b9, 0xff2581a9, 0xff1c7ba4, 0xff428bad,
+ 0xff7c401d, 0xffbc782c, 0xff61624e, 0xffbe6314, 0xfff4a525, 0xfffaac15,
+ 0xfffaac1a, 0xfffba911, 0xfffab31d, 0xfffcba1a, 0xfffbc321, 0xfffcc122,
+ 0xfffbb81c, 0xfffbb41a, 0xfffab518, 0xfffcbd1e, 0xfffaba19, 0xfffcbf1d,
+ 0xfffbbb1e, 0xfffbbf1e, 0xfffcc023, 0xfffbc020, 0xfffbbb1d, 0xfffab51a,
+ 0xfffcc722, 0xfffbc21e, 0xfffab61b, 0xfffbbb1d, 0xfff9b11a, 0xffbf8b1e,
+ 0xffbd881f, 0xffd39520, 0xff684f22, 0xff403628, 0xff3b332a, 0xff2c292d,
+ 0xff2d292d, 0xff2e282c, 0xff2e282d, 0xff2d282d, 0xff2d282c, 0xff2e282d,
+ 0xff2e292d, 0xff2f2a2e, 0xff2c292d, 0xdc373333, 0x32191818, 0x07020204,
+ 0x00000000, 0x00000000, 0x00000000, 0x07010203, 0x08010103, 0x0a030305,
+ 0x02000000, 0x03020202, 0x04010203, 0x03000000, 0x05000001, 0x05000001,
+ 0x05000001, 0x04000001, 0x02000000, 0x01000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0xff5bafd2, 0xff4496b8, 0xff4397bb, 0xff2a85b1, 0xff2083aa, 0xff1d79a1,
+ 0xff2583ac, 0xff3b6e85, 0xff77331a, 0xff994a26, 0xff52443b, 0xffd98218,
+ 0xfffcad17, 0xfffbab1f, 0xfffaac1c, 0xfffcb223, 0xfffcb215, 0xfffbb719,
+ 0xfffbb61a, 0xfffaaf18, 0xfffbb116, 0xfffbb419, 0xfffcbb1d, 0xfffaad17,
+ 0xfffab41e, 0xfffcb917, 0xfffcba1d, 0xfffbbf1d, 0xfffbc123, 0xfffab91c,
+ 0xfffab51b, 0xfffcc01d, 0xfffed329, 0xfffbb81c, 0xfffcb51c, 0xfffab117,
+ 0xfffbac19, 0xfff9ac17, 0xffad7b19, 0xffbb861e, 0xffdd9c1f, 0xff6e5220,
+ 0xff564a2d, 0xff3a3027, 0xff282528, 0xff2c292e, 0xff2d2a2b, 0xff2e292c,
+ 0xff2e292d, 0xff2d2a2c, 0xff2d282c, 0xff322c30, 0xff312c2a, 0xe54f412f,
+ 0x43332b1f, 0x0e050707, 0x0a080709, 0x03000201, 0x04000000, 0x06000001,
+ 0x05000001, 0x04000001, 0x02000000, 0x01000000, 0x02000000, 0x02000000,
+ 0x03000000, 0x04000001, 0x05000001, 0x05000001, 0x03000000, 0x01000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x01000000, 0xff2c8ab1, 0xff3f94b8, 0xff2b86ad, 0xff2686ae,
+ 0xff1e77a1, 0xff207ba3, 0xff3387ab, 0xff3a5363, 0xff903616, 0xff933920,
+ 0xff64402e, 0xffdf8e19, 0xffde7f0e, 0xffd67a10, 0xfffab12a, 0xfffba919,
+ 0xfffbab12, 0xfffbaf16, 0xfff9ac16, 0xfffaab14, 0xfffdb318, 0xfffbba1d,
+ 0xfffaad16, 0xfffcae17, 0xfffab013, 0xfffcbd1e, 0xfffabb19, 0xfffabd20,
+ 0xfffdb51e, 0xfffcb61a, 0xfffcb918, 0xfff8b012, 0xfff9b71a, 0xfff8ae17,
+ 0xfffbad16, 0xfffaac16, 0xfffbab15, 0xfff9a816, 0xfffeac1c, 0xffba841c,
+ 0xffb37d1a, 0xffdda624, 0xff8c6620, 0xff9a6f1f, 0xffb77f2a, 0xff473424,
+ 0xff302a2d, 0xff2f2a30, 0xff2d292c, 0xff2e292e, 0xff2f2b2c, 0xff37322c,
+ 0xfe5b4627, 0xffbc8b2a, 0x887c602b, 0x130a0808, 0x1b16171b, 0x02000000,
+ 0x06000001, 0x05000001, 0x03000000, 0x02000000, 0x01000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x01000000, 0x02000000, 0x04000001, 0x05000001,
+ 0x05000001, 0x03000000, 0x02000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x01000000, 0x01000100, 0x03020302, 0xff2f8bb2, 0xff2e89b0,
+ 0xff2c89b2, 0xff1a799f, 0xff1f759f, 0xff2782a6, 0xff3b84a4, 0xff393c43,
+ 0xff863519, 0xff7a2f18, 0xff6d301f, 0xffb24e1b, 0xffc65a10, 0xffe59528,
+ 0xfffdb123, 0xfffba60d, 0xfffbaa12, 0xfffba913, 0xfffaab15, 0xfffcb319,
+ 0xfffbb519, 0xfffaab16, 0xfffbac16, 0xfffab417, 0xfffcbc1c, 0xfffcb61a,
+ 0xfff5ac1c, 0xfff8b01d, 0xfffbb419, 0xfffab217, 0xfffbb616, 0xfff19d0b,
+ 0xfffbaa17, 0xfff9a713, 0xfffaa914, 0xfffbac16, 0xfffaab16, 0xfff6a216,
+ 0xfff9a512, 0xffffae15, 0xffe7a71e, 0xffc98d19, 0xffda931e, 0xffd48e1b,
+ 0xffdb8f17, 0xffb5791d, 0xff6e5123, 0xff53432d, 0xff433626, 0xff3c3228,
+ 0xff564225, 0xff84622c, 0xfe9e7016, 0xffffb424, 0xdab29758, 0x5f3a3c3b,
+ 0x09060709, 0x04020201, 0x04000001, 0x04000001, 0x02000000, 0x01000000,
+ 0x01000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x01000000,
+ 0x03000000, 0x05000001, 0x06000001, 0x04000001, 0x03000001, 0x01000000,
+ 0x00000000, 0x00000000, 0x01000000, 0x03020302, 0x03020202, 0x08070807,
+ 0xff348db4, 0xff2a88b0, 0xff257ba2, 0xff1b6e90, 0xff2280a8, 0xff3080a2,
+ 0xff327692, 0xff42322e, 0xff612b1e, 0xff5f2a1b, 0xff693120, 0xffa3350f,
+ 0xffc55a0d, 0xfff0a023, 0xfffba913, 0xfffca912, 0xfff8a911, 0xfffaaa13,
+ 0xfff9aa13, 0xfffbae15, 0xfffba812, 0xfffaac16, 0xfffcb317, 0xfffab518,
+ 0xfffcb51b, 0xfff3a419, 0xfff39d18, 0xfffbad17, 0xfff9ac17, 0xfffbb215,
+ 0xfff7aa15, 0xfff8a816, 0xfff9a914, 0xfffaa815, 0xfffaab17, 0xfffbad17,
+ 0xfff9aa18, 0xfff5a114, 0xfffba815, 0xfff6a714, 0xfffcaf19, 0xfff7a417,
+ 0xffec9c19, 0xfff7a813, 0xfff8a516, 0xffe99412, 0xffda981d, 0xffcb8f22,
+ 0xffc18d2a, 0xffb98321, 0xffda9719, 0xfffdb222, 0xffffb01a, 0xffe8a828,
+ 0xf39c8b63, 0x924a4d4c, 0x05040405, 0x0a080809, 0x01000000, 0x02000000,
+ 0x01000000, 0x01000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x01000000, 0x03000000, 0x05000001, 0x06000002, 0x06000001,
+ 0x04000001, 0x02000001, 0x07050506, 0x0b0a0a0b, 0x07050606, 0x04030403,
+ 0x0a090a09, 0x110f1110, 0xff2885ae, 0xff2586b1, 0xff1c6484, 0xff247393,
+ 0xff24799c, 0xff25769a, 0xff2b596f, 0xff432e30, 0xff3d2925, 0xff5c2b1c,
+ 0xff642718, 0xffaf410d, 0xffd16d0e, 0xfffdad1e, 0xfff7a20f, 0xfff8a911,
+ 0xfffaa913, 0xfffaaa13, 0xfffbaa13, 0xfffca70f, 0xfffcac16, 0xfffcac16,
+ 0xfffbb015, 0xfffbae16, 0xfff39e15, 0xfff29116, 0xfff9a617, 0xfffbab16,
+ 0xfffbae14, 0xfff9b118, 0xffef9912, 0xfffaa915, 0xfffba915, 0xfff8a512,
+ 0xfff6a013, 0xfffaac16, 0xfffaa214, 0xfff39e13, 0xfff7a713, 0xfff9a816,
+ 0xfff69f15, 0xffef9714, 0xfff9a817, 0xfff8a613, 0xfff19910, 0xfffca817,
+ 0xfffbae17, 0xfffaab15, 0xfffab126, 0xfffaaa14, 0xfffbab16, 0xfffaad13,
+ 0xfff8ac16, 0xffaa7f2e, 0xff69695f, 0x9c424244, 0x0b0b0b0a, 0x0a070a09,
+ 0x02000000, 0x03000001, 0x01000000, 0x01000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x01000000, 0x03000001, 0x05000001,
+ 0x07000003, 0x06000002, 0x06000001, 0x0c0a0b0a, 0x1b1a1815, 0x2524211e,
+ 0x0d0b0c0b, 0x0d0c0d0c, 0x15131514, 0x0f0e0e0e, 0xff2988b1, 0xff1d7ca5,
+ 0xff1e5e79, 0xff216685, 0xff257696, 0xff1b6689, 0xff2c4451, 0xff362f34,
+ 0xff342927, 0xff5e2b1f, 0xff602a18, 0xffa73705, 0xffed951d, 0xfff6a311,
+ 0xfff9a412, 0xfff9a910, 0xfffaaa14, 0xfffaaa12, 0xfffaa911, 0xfffbab16,
+ 0xfff49e15, 0xfffaa30f, 0xfffba813, 0xfff29211, 0xffe57d0b, 0xfff29b11,
+ 0xfffcad16, 0xfffaac15, 0xfffba415, 0xffef9314, 0xfff59f12, 0xfff9a917,
+ 0xfffbab16, 0xfff6a114, 0xfff6a014, 0xfff8a112, 0xffe37d12, 0xfff9a516,
+ 0xfff9a816, 0xfff7a016, 0xffee930e, 0xfff8a216, 0xfff6a212, 0xfff39a12,
+ 0xfff7a214, 0xfffbab16, 0xfffcab17, 0xfffba911, 0xfffbab14, 0xfffcab14,
+ 0xfffaab13, 0xfffbad1b, 0xffba8726, 0xff2f393c, 0xff213f4c, 0xab394346,
+ 0x12121112, 0x1f1c1c1e, 0x0d0a0b0c, 0x04000001, 0x03000000, 0x01000000,
+ 0x01000000, 0x01000000, 0x01000000, 0x01000000, 0x01000000, 0x03000101,
+ 0x04000102, 0x05000001, 0x07000100, 0x0a020507, 0x18151515, 0x211c1710,
+ 0x2c21190d, 0x12100b03, 0x17131512, 0x17161616, 0x0c0b0b0b, 0x08070807,
+ 0xff2382ac, 0xff19759a, 0xff21617e, 0xff24607c, 0xff176e91, 0xff1c5b79,
+ 0xff2b3c47, 0xff302b2e, 0xff432922, 0xff5e2b1d, 0xff672816, 0xffbc5410,
+ 0xffcc650b, 0xfff19b17, 0xfff5a011, 0xfffaa813, 0xfff8a714, 0xfff9aa11,
+ 0xfffcab16, 0xfff6a119, 0xfff08e0d, 0xfff9a412, 0xfff1920d, 0xffed8b0e,
+ 0xfff49813, 0xfffbad16, 0xfffaab15, 0xfffbad15, 0xfff69d11, 0xfff5a014,
+ 0xfffaaa16, 0xfffbac15, 0xfff7a216, 0xffea8810, 0xfff39914, 0xffe78010,
+ 0xfff29515, 0xfffbab15, 0xfff6a314, 0xffef8f15, 0xfff5a015, 0xfff7a417,
+ 0xffe68913, 0xfff6a113, 0xfffaab16, 0xfffaab16, 0xfffbaa15, 0xfff7a411,
+ 0xfffbaa14, 0xfffaaa13, 0xfffead15, 0xffbf871e, 0xff383228, 0xff284b5a,
+ 0xff1e3a49, 0xfc5d747b, 0x87596c6f, 0x523b4346, 0x09060607, 0x05000001,
+ 0x04000001, 0x04000001, 0x03000000, 0x02000000, 0x02000000, 0x02000000,
+ 0x04020203, 0x12101111, 0x12101111, 0x0a060607, 0x03000001, 0x0c0a0908,
+ 0x5a473d24, 0x6a50472a, 0x241e180e, 0x56433b29, 0x664e452d, 0x1814120e,
+ 0x0d0b0b0b, 0x0a09090a, 0xff1f79a0, 0xff1c749c, 0xff22576e, 0xff235b76,
+ 0xff106589, 0xff24536a, 0xff2c363d, 0xff31292c, 0xff5f2f22, 0xff58291c,
+ 0xff6f2b12, 0xffb44f10, 0xffd97612, 0xffe48a17, 0xfff49a0f, 0xfff6a015,
+ 0xfff9a813, 0xfffdaa17, 0xfff7a41a, 0xffef920e, 0xfff69e0f, 0xffef8e0c,
+ 0xfff09011, 0xffdf7109, 0xffee8e10, 0xfffcab16, 0xfffbab17, 0xfffba816,
+ 0xffee9010, 0xfff69e13, 0xfff19b12, 0xfff79e14, 0xffeb8c10, 0xfff09112,
+ 0xffed8d11, 0xfff09916, 0xfffdac17, 0xfff49a12, 0xffe57913, 0xffed8c13,
+ 0xfff8a815, 0xffe58513, 0xffe78914, 0xfff5a116, 0xfff7a615, 0xfffbac14,
+ 0xfffaa915, 0xfff8a716, 0xfffbac18, 0xfffea814, 0xffcc8f23, 0xff443827,
+ 0xff2b2e35, 0xff2c5363, 0xfe213341, 0xff3d5d6b, 0xeb95bac2, 0x60364348,
+ 0x00000000, 0x06000002, 0x05000001, 0x05000001, 0x05000001, 0x05000001,
+ 0x04000001, 0x07040504, 0x110f100f, 0x1a191717, 0x100e0e0f, 0x05040403,
+ 0x1613100b, 0x93726743, 0xf3b5a057, 0xeeada148, 0xa67b7845, 0x82665d43,
+ 0xb7897e50, 0x3e302b1e, 0x03030000, 0x4e3b3421, 0xff166c90, 0xff236f90,
+ 0xff243b47, 0xff1a536c, 0xff1a6e93, 0xff2b4a5b, 0xff333139, 0xff393433,
+ 0xff7b301a, 0xff55271d, 0xff7a321c, 0xffbf5912, 0xffd77510, 0xffda730b,
+ 0xfff69d15, 0xfff6a211, 0xfff7a110, 0xfff39813, 0xffeb8d10, 0xfff39613,
+ 0xffea7e05, 0xfff49312, 0xffda6706, 0xffd05303, 0xffed8910, 0xfffcaf16,
+ 0xfffaa813, 0xffe8820e, 0xffe87e0f, 0xfff79e14, 0xffe47a0c, 0xffef8d13,
+ 0xffec860b, 0xfff39a13, 0xfff6a213, 0xfffbab13, 0xfff1910f, 0xffdc6309,
+ 0xffe88211, 0xfff8a314, 0xfff29619, 0xffda7714, 0xffda6e11, 0xffe38011,
+ 0xfff9a715, 0xfffbaa16, 0xfff29d12, 0xfff2a016, 0xfffaa814, 0xffdf961f,
+ 0xff574627, 0xff2b282c, 0xff2e4955, 0xff2a4d5f, 0xff253542, 0xfe2b4f61,
+ 0xf68fb8c1, 0x59323f45, 0x00000000, 0x06000001, 0x06000001, 0x06000001,
+ 0x06000001, 0x05000001, 0x0c080a0b, 0x14111313, 0x100e0f0f, 0x09080708,
+ 0x08040603, 0x28221c14, 0xb0867748, 0xfeb8a84d, 0xe6aaa14e, 0xcc968d41,
+ 0x44322e15, 0x2019170d, 0x48383021, 0x1e19140e, 0x73584d34, 0xf4b5a566,
+ 0xff207ba1, 0xff275d75, 0xff272e35, 0xff1d4e65, 0xff287599, 0xff30414c,
+ 0xff373539, 0xff533835, 0xff8e2e0d, 0xff4d2920, 0xff7d3118, 0xffc5600d,
+ 0xffbd4c08, 0xffed9010, 0xfff19711, 0xfff79d12, 0xffec8a0d, 0xffec890f,
+ 0xffeb8110, 0xffe57e08, 0xfff69414, 0xffd55f03, 0xffcf5104, 0xffe2740c,
+ 0xfff59c10, 0xfff79d14, 0xffef8f11, 0xffe77a0a, 0xfff49d12, 0xffe8850f,
+ 0xffea800f, 0xffe27708, 0xfff59e15, 0xfff8a813, 0xfff5a215, 0xffe7870f,
+ 0xffd95a07, 0xffdf710b, 0xfff39614, 0xfff49d14, 0xffd86f0a, 0xffdd7b12,
+ 0xffd06c0b, 0xffed9114, 0xfff3a114, 0xfff6a514, 0xfff29b14, 0xfff6a214,
+ 0xffe19318, 0xff664d26, 0xff2a242b, 0xff253d4c, 0xff2b4251, 0xff234656,
+ 0xff253845, 0xff2a4d5b, 0xf79cc3cb, 0x60374548, 0x01000000, 0x07000002,
+ 0x07000002, 0x08010103, 0x0b040406, 0x17131211, 0x413c372f, 0x1f1b1713,
+ 0x08070302, 0x09070301, 0x362c2317, 0xca978b4c, 0xfdb7a94a, 0xb2857e42,
+ 0x34262009, 0x231b170d, 0x1c181009, 0xb78b7e52, 0xe5ab9b61, 0x7055492d,
+ 0xe0a8975f, 0x7a605537, 0xff2a81a7, 0xff1e4d63, 0xff282d34, 0xff294c5f,
+ 0xff185977, 0xff38373c, 0xff34353a, 0xff7e3623, 0xff7e2b11, 0xff4b2a23,
+ 0xff904618, 0xffb34109, 0xffbf5008, 0xfff29313, 0xfff09511, 0xffe9830c,
+ 0xffed8811, 0xffe4750d, 0xffe77705, 0xfff19118, 0xffda6807, 0xffcd5105,
+ 0xffde6909, 0xffe1720b, 0xffe7840c, 0xffed8910, 0xffec830c, 0xffef8f0d,
+ 0xfff19212, 0xffe77f0d, 0xffe77f0e, 0xffed8c11, 0xfff29813, 0xffeb8f10,
+ 0xffda740f, 0xffc94f05, 0xffe3720d, 0xffe38110, 0xffe98914, 0xffde790e,
+ 0xffe88b13, 0xffe38712, 0xffdd7e12, 0xffdb780d, 0xffed9713, 0xffdf8112,
+ 0xffd66f0d, 0xffe5991b, 0xff6f4e23, 0xff272229, 0xff2b333a, 0xff234b5e,
+ 0xff29363f, 0xff244556, 0xff263946, 0xff2d4753, 0xf57fabb7, 0x5229373c,
+ 0x03000000, 0x09010204, 0x08000103, 0x0b060405, 0x372b251a, 0x67534934,
+ 0x5a463b26, 0x2e252018, 0x0b080300, 0x624a4123, 0xe0a5964a, 0xd99e9240,
+ 0x77595121, 0x392b2716, 0x27201c15, 0x3b2b2417, 0xc590814f, 0xefb29c5d,
+ 0x9a73663a, 0x624b4027, 0x71564c30, 0xd48d834b, 0xff1f7194, 0xff1d4b60,
+ 0xff283038, 0xff213f50, 0xff21495d, 0xff383234, 0xff343134, 0xff9a300f,
+ 0xff652a19, 0xff563220, 0xff933e16, 0xffa92f04, 0xffce5e0a, 0xffef8d0f,
+ 0xffe68411, 0xffea8511, 0xffe27008, 0xffe16505, 0xffe67407, 0xffd76308,
+ 0xffcc4e04, 0xffda5e06, 0xffd55a07, 0xffcb5005, 0xffe1750a, 0xffe87a0d,
+ 0xffe97d08, 0xffea810b, 0xffe9820f, 0xfff49815, 0xffeb890e, 0xffe87d0e,
+ 0xffdf770c, 0xffc95d0e, 0xffbe4909, 0xffe17510, 0xffd67110, 0xffd0640d,
+ 0xffe28211, 0xffea8d16, 0xffd77710, 0xffca610b, 0xffc15109, 0xffd57413,
+ 0xffc14f0b, 0xffb03604, 0xffd57213, 0xff7f5c28, 0xff2f292b, 0xff2b2b2e,
+ 0xff283f4d, 0xff273a46, 0xff2a2e36, 0xff244353, 0xff273a44, 0xff344448,
+ 0xfa6b9aa1, 0x91546b70, 0x17100f0f, 0x04010002, 0x1912110d, 0x664d4731,
+ 0x80635c41, 0x9e796c47, 0xd39d8c52, 0x98756845, 0x9d746934, 0xf4afa139,
+ 0xfeb4a836, 0xaa817a44, 0x56433c26, 0x04030000, 0x5d403b24, 0xe891894a,
+ 0xd98e8546, 0x85645734, 0x73564b2d, 0x79574e2e, 0xdb887f40, 0xc67b753f,
+ 0xff126488, 0xff1e4c64, 0xff28313b, 0xff253f4c, 0xff2b363c, 0xff333137,
+ 0xff412a26, 0xffa0300d, 0xff4f2a20, 0xff633820, 0xff94300e, 0xffa72c03,
+ 0xffd86a0d, 0xffec9014, 0xffc25407, 0xffdb690a, 0xffe06911, 0xffe06706,
+ 0xffdd680a, 0xffcb5005, 0xffd65a05, 0xffd05206, 0xffc84703, 0xffda6706,
+ 0xffec8112, 0xffde6604, 0xffe77c09, 0xffe97f12, 0xffed8814, 0xffe2770a,
+ 0xffe5760d, 0xffd66208, 0xffc7570d, 0xffb03705, 0xffcf5f0d, 0xffc95d09,
+ 0xffcd6210, 0xffd7750f, 0xffe18213, 0xffba4c07, 0xffc2520b, 0xffac3506,
+ 0xffbd4f0b, 0xffc2581c, 0xffa72c06, 0xff9c3b15, 0xff80562a, 0xff44392e,
+ 0xff2d292c, 0xff2d2e34, 0xff293740, 0xff2a3033, 0xff292d35, 0xff234657,
+ 0xff273d4a, 0xff363f3f, 0xff57888c, 0xea8cb0b4, 0x4d393e3d, 0x7c5e563a,
+ 0xbe8f825b, 0x7f625a3f, 0x795e5640, 0xbc918258, 0xffbda75f, 0xfab7a444,
+ 0xfdb5a630, 0xffb5a734, 0xecac9d46, 0xecae9d57, 0x5c463f28, 0x835a5639,
+ 0xfa938e42, 0xc97c7940, 0x8e615c3e, 0x996b6745, 0x815f5737, 0xe188803e,
+ 0x8f4e4818, 0x2714120a, 0xff15658a, 0xff224d63, 0xff26333d, 0xff2e353c,
+ 0xff2f2d33, 0xff312f32, 0xff4c2921, 0xff9a2f10, 0xff382826, 0xff682f1c,
+ 0xff9e2c08, 0xffa83201, 0xffec8c1a, 0xffcd660f, 0xffcb5309, 0xffdf6b12,
+ 0xffe17009, 0xffea8010, 0xffcf5506, 0xffd75804, 0xffd15009, 0xffc54704,
+ 0xffd96206, 0xfff08b11, 0xffdd6507, 0xffe06d07, 0xffe77b0c, 0xffe46e0b,
+ 0xffdb6704, 0xffe7770d, 0xffcf5707, 0xffbd4506, 0xffae3203, 0xffb74207,
+ 0xffc35009, 0xffcc5f0e, 0xffca600c, 0xffd46f0d, 0xffb43f04, 0xffb33c09,
+ 0xffa62c01, 0xffac3406, 0xffb84714, 0xffae3d16, 0xffa62d05, 0xff623324,
+ 0xff363134, 0xff302c2d, 0xff2e2a2d, 0xff2e2b2f, 0xff2b2b2f, 0xff2c2c30,
+ 0xff292e35, 0xff1e4d62, 0xff26495c, 0xff36414a, 0xff508a95, 0xea7d988b,
+ 0xb4817d5e, 0xbf8e8053, 0x5a483e28, 0x44312917, 0x221b150e, 0x382e2618,
+ 0xf4b8a563, 0xffb8a83d, 0xfbb2a63a, 0x9a756732, 0x78584d25, 0xffafa354,
+ 0xffa19a4f, 0xfe969145, 0xba787245, 0x8f5e5b36, 0xcc827f49, 0xa76f6b42,
+ 0xf8948d45, 0x914f4819, 0x1a0b0900, 0x83565744, 0xff1c6c90, 0xff1e4254,
+ 0xff27333c, 0xff2d2d31, 0xff2f2b2e, 0xff2f2a2e, 0xff5b2b1e, 0xff812d13,
+ 0xff332727, 0xff6b2c1a, 0xff9f2906, 0xffc45a0f, 0xffe78c1d, 0xffbe4403,
+ 0xffde6909, 0xffee8711, 0xfff18b13, 0xffd35d06, 0xffd65605, 0xffce4f06,
+ 0xffc94f02, 0xffdd6307, 0xffed8510, 0xffe57407, 0xffde6a05, 0xffef880b,
+ 0xffe16908, 0xffdd6707, 0xffe5720e, 0xffce5305, 0xffbb3e06, 0xffad3208,
+ 0xffaa3206, 0xffbe4507, 0xffba4309, 0xffb13b03, 0xffd1670e, 0xffba4909,
+ 0xffa82c04, 0xffa72b02, 0xffa82e06, 0xffae3608, 0xffb4431c, 0xffaa2f07,
+ 0xff9e2f0b, 0xff3c2826, 0xff2e2a2e, 0xff2c2a2d, 0xff2f292e, 0xff2e292d,
+ 0xff2c292e, 0xff2c2d31, 0xff293038, 0xff195973, 0xff235e79, 0xff314a55,
+ 0xff48859f, 0xf981a193, 0xb07f7a58, 0x664f4732, 0x4836301f, 0x17140e0b,
+ 0x45342e1d, 0xc897864d, 0xffbba84f, 0xebad9e45, 0xa1797339, 0xa8776f3b,
+ 0xffafa356, 0xffaba352, 0xdd8c8644, 0x9a66623d, 0xa96b693a, 0xff9b9045,
+ 0xff9a8f40, 0xfa938a3d, 0x82474117, 0x1b0d0a03, 0x86504f3d, 0xff7c7b4d,
+ 0xff146388, 0xff213c4b, 0xff29323a, 0xff2f2c30, 0xff302b2e, 0xff2f282d,
+ 0xff662c19, 0xff6c2b17, 0xff352728, 0xff712c16, 0xffac3708, 0xffe5851b,
+ 0xffcc5609, 0xffdf730e, 0xfff9a116, 0xffe9840d, 0xffdd6806, 0xffdf6707,
+ 0xffcf5205, 0xffd35902, 0xffe77008, 0xffe97d0b, 0xffe47408, 0xffe26f06,
+ 0xfff7990f, 0xffe97b07, 0xffe36f0a, 0xffe06b09, 0xffcd4e04, 0xffbd4005,
+ 0xffb03506, 0xffac3005, 0xffae3103, 0xffbb3d08, 0xffa82d03, 0xffbd4909,
+ 0xffc15009, 0xffa92c04, 0xffa82c04, 0xffa72c02, 0xffa82e06, 0xffad360d,
+ 0xffad3911, 0xffaa2d07, 0xff9e310c, 0xff342828, 0xff2d292d, 0xff2e292d,
+ 0xff2d292c, 0xff2d292c, 0xff2c292d, 0xff2a2e33, 0xff2b3039, 0xff185d7c,
+ 0xff206f92, 0xff325a6d, 0xff377e98, 0xf380abac, 0xe6a59f70, 0x83645838,
+ 0x16151110, 0x84635a33, 0xecaf9d49, 0xffb7a63c, 0xdfa49a42, 0x96706a34,
+ 0xdd9d954b, 0xffaea450, 0xffada352, 0xb9807a44, 0x8c65603c, 0xd68b8547,
+ 0xff999043, 0xff978e3c, 0xf08d853b, 0x6a3a3613, 0x180b0903, 0x97565641,
+ 0xf9747048, 0xff706a39, 0xff115f80, 0xff253642, 0xff292f36, 0xff2f2b2f,
+ 0xff2e2a2c, 0xff31292a, 0xff732d16, 0xff552a1d, 0xff41292a, 0xff782d13,
+ 0xffca5910, 0xffd15809, 0xffc7560a, 0xfffcac1e, 0xfff8a114, 0xffe57b0a,
+ 0xffe8790a, 0xffd35b04, 0xffd96306, 0xfff18708, 0xffe77505, 0xffe16f07,
+ 0xffe37106, 0xfffa9c0d, 0xffe87705, 0xffe47409, 0xffdf6908, 0xffce4e05,
+ 0xffbd4003, 0xffb53904, 0xffaf3405, 0xffa92f07, 0xffb73907, 0xffb13704,
+ 0xffb13904, 0xffbd4907, 0xffa82c05, 0xffa82c04, 0xffa72d05, 0xffa92b03,
+ 0xffa92e06, 0xffac360e, 0xffaa3008, 0xffaa2e07, 0xff9e320e, 0xff302728,
+ 0xff302b2f, 0xff2d2a2e, 0xff2e292d, 0xff2d282c, 0xff2e282c, 0xff2b2e35,
+ 0xff293239, 0xff1d6280, 0xff227196, 0xff2a6a84, 0xff2e7792, 0xff84aba1,
+ 0xbb858058, 0x7861573b, 0xbf8b823c, 0xfdb5a736, 0xffb5a734, 0xc28f893f,
+ 0x916e6931, 0xf4aca23e, 0xffafa347, 0xffada659, 0xa5757247, 0x976e6a44,
+ 0xed9d944b, 0xff9a9142, 0xff978e3b, 0xe988823b, 0x59332d13, 0x14080501,
+ 0xb3676951, 0xff726f44, 0xff706a3a, 0xfe716a3a, 0xff145d7b, 0xff25323c,
+ 0xff2d2d33, 0xff2f2b2e, 0xff2e282d, 0xff31282a, 0xff7c2d16, 0xff422923,
+ 0xff542c21, 0xff8b4016, 0xffd45d0d, 0xffac3303, 0xfff19519, 0xfff8a311,
+ 0xffea850c, 0xffec850f, 0xffe47407, 0xffe9810d, 0xfffc9b09, 0xfff18805,
+ 0xffdf6906, 0xffe47208, 0xfff8950d, 0xffe17203, 0xffe3720a, 0xffe67409,
+ 0xffcc4e05, 0xffbd3f02, 0xffbd3f07, 0xffb63906, 0xffb03507, 0xffab2f03,
+ 0xffb33504, 0xffb53b05, 0xffb73f06, 0xffac3406, 0xffad3203, 0xffa92e04,
+ 0xffa72c04, 0xffaa2d04, 0xffa92f06, 0xffab310a, 0xffa92e04, 0xffab3006,
+ 0xff9b2f0d, 0xff2d2829, 0xff2f292d, 0xff2d292d, 0xff302a2e, 0xff2d282c,
+ 0xff2e282c, 0xff2d2e34, 0xff2b353d, 0xff256888, 0xff207293, 0xff287494,
+ 0xff2b7790, 0xe275a1a2, 0xab7d7d51, 0xf7b0a53c, 0xffb7a52f, 0xfbb4a637,
+ 0xaa7d7635, 0x9d756f2e, 0xffb4a837, 0xffb2a535, 0xffafa654, 0x74534d26,
+ 0xb07e794d, 0xffa59b4c, 0xff998f41, 0xff958d3a, 0xe0827b38, 0x4426220e,
+ 0x1b0c0a07, 0xba65644a, 0xff6f6a3d, 0xfe6f6a39, 0xfe6e6a3b, 0xff6e6b39,
+ 0xff195773, 0xff273138, 0xff2d2c31, 0xff2e292d, 0xff2d292d, 0xff362828,
+ 0xff7e2d15, 0xff3a2728, 0xff62311c, 0xff9c501a, 0xffb84709, 0xffc75f1f,
+ 0xfff79d13, 0xffed8c0f, 0xffeb850f, 0xffea7f0a, 0xffee870a, 0xffffa10c,
+ 0xfff6920b, 0xffe26f05, 0xffeb7e0b, 0xfff08d10, 0xffe57506, 0xffe87605,
+ 0xffe46f07, 0xffcd4e04, 0xffc04004, 0xffbf4307, 0xffbc400a, 0xffbf4309,
+ 0xffaa3002, 0xffb53808, 0xffb33707, 0xffb94005, 0xffb23905, 0xffb13906,
+ 0xffb53c05, 0xffa62c04, 0xffa82d03, 0xffa82e05, 0xffab3007, 0xffaa2e06,
+ 0xffa92e06, 0xffac2f03, 0xff923010, 0xff2b282b, 0xff2f292c, 0xff2d292d,
+ 0xff2f2a2e, 0xff2d282c, 0xff2d292c, 0xff2b3036, 0xff273641, 0xff256b8c,
+ 0xff1d6e93, 0xff227292, 0xff368098, 0xfe88b398, 0xffb4a838, 0xffb3a72f,
+ 0xeda99f3a, 0xa2787236, 0xb8867f31, 0xffb5a631, 0xfeb3a52b, 0xffb1a53e,
+ 0xffaea453, 0xefa19952, 0xffa19646, 0xff958d3c, 0xfe938b3a, 0xff958d38,
+ 0xc66f692d, 0x53282617, 0xbe5d5c41, 0xff706b3d, 0xfe7b7639, 0xff77713b,
+ 0xff726b39, 0xff857c3c, 0xff1c5069, 0xff28343c, 0xff2d2d32, 0xff2d2a2d,
+ 0xff30282d, 0xff3e2825, 0xff762b17, 0xff352925, 0xff6a3321, 0xff984112,
+ 0xffb7440f, 0xffd56f18, 0xfff19010, 0xffee8b10, 0xffec850e, 0xfff08f0c,
+ 0xfff4950d, 0xfff39110, 0xffeb7f0c, 0xffef8309, 0xffea800f, 0xffe47407,
+ 0xffea7b09, 0xffe06805, 0xffd05307, 0xffc04304, 0xffc44604, 0xffc34709,
+ 0xffc94f11, 0xffaf3404, 0xffaf3204, 0xffb83c07, 0xffaf3404, 0xffbf4507,
+ 0xffb23804, 0xffbc4607, 0xffa82d04, 0xffaa2f04, 0xffaa2e05, 0xffaa2f06,
+ 0xffa92e05, 0xffa82d04, 0xffa92f06, 0xffa82d03, 0xff923618, 0xff29272a,
+ 0xff2d292c, 0xff2d292d, 0xff2d282c, 0xff2e282c, 0xff2d292b, 0xff2b343d,
+ 0xff263945, 0xff1d698a, 0xff1d6e91, 0xff1d6e91, 0xfe408183, 0xff87ac85,
+ 0xffb9a43a, 0xfdb7ac49, 0x96726c35, 0xd0958d35, 0xffb4a62e, 0xffb4a729,
+ 0xfeb2a530, 0xfeafa346, 0xfea69c4a, 0xff9b9240, 0xff958d3b, 0xfe948b3a,
+ 0xff958c3b, 0xff948c3a, 0xfc8c833a, 0xf56e6b3e, 0xff75703c, 0xff88803a,
+ 0xff938c3c, 0xff8b843b, 0xff8c833b, 0xff958c3c, 0xff1b495e, 0xff293843,
+ 0xff2f2c30, 0xff2e2a2e, 0xff30282c, 0xff4a2a22, 0xff6b2b19, 0xff362629,
+ 0xff6f301c, 0xff98310a, 0xffc9540d, 0xffed9014, 0xfff19614, 0xffee8e14,
+ 0xfff89a10, 0xffef930f, 0xfff79e16, 0xfff38e12, 0xffef8108, 0xffe57205,
+ 0xffe37007, 0xffe87c0c, 0xffdf6706, 0xffd15808, 0xffbf4702, 0xffcd4d08,
+ 0xffc44605, 0xffcf550a, 0xffb23504, 0xffb43906, 0xffbe4408, 0xffbc4105,
+ 0xffbe4408, 0xffb74006, 0xffbd490a, 0xffab3304, 0xffa92f03, 0xffac3106,
+ 0xffab3007, 0xffaa2f06, 0xffa72c03, 0xffa82e05, 0xffa92d04, 0xffad3109,
+ 0xff8a3214, 0xff29282b, 0xff32282b, 0xff2e2a2f, 0xff2e292c, 0xff2d282c,
+ 0xff2d282c, 0xff2c3741, 0xff233b48, 0xff1b688a, 0xff1d6e8f, 0xff196c8e,
+ 0xff528b8b, 0xff8cab82, 0xffb8a632, 0xfdb4a833, 0xeeab9e38, 0xfdb3a632,
+ 0xe1a29b40, 0xf3ada13b, 0xffb2a536, 0xfeada34d, 0xffa19949, 0xff968e3d,
+ 0xff958d3c, 0xff958d3c, 0xfe978f3e, 0xff988f3d, 0xff958b3d, 0xff89823c,
+ 0xff978d43, 0xfe9c913f, 0xff958d3b, 0xff948c3c, 0xff948c3b, 0xff958d3b,
+ 0xff204253, 0xff293e4c, 0xff2e2b2f, 0xff2e292e, 0xff2f2a2b, 0xff582b1f,
+ 0xff612f22, 0xff392728, 0xff6e2d18, 0xffa63a13, 0xffdc781a, 0xfff7a316,
+ 0xfff79e17, 0xfffaa214, 0xfff19911, 0xfff49910, 0xfff59a13, 0xffeb7e0a,
+ 0xffe77504, 0xffe57607, 0xffec7e0f, 0xffdc6205, 0xffd56005, 0xffca5001,
+ 0xffd75f0a, 0xffc54905, 0xffd0540a, 0xffb53804, 0xffbd3f06, 0xffc74f08,
+ 0xffc45006, 0xffc34b09, 0xffb93e02, 0xffcc5b10, 0xffb53f0d, 0xffa93002,
+ 0xffb94008, 0xffac3204, 0xffac3105, 0xffa72c03, 0xffa92e05, 0xffa92d05,
+ 0xffa82c03, 0xffb0350d, 0xff8d2f10, 0xff2c2729, 0xff3d2c2c, 0xff2f2c2e,
+ 0xff332b2e, 0xff2d292c, 0xff2d292c, 0xff293640, 0xff223f4e, 0xff1d6c8e,
+ 0xff206f91, 0xff186b8c, 0xff60938a, 0xfe91a96a, 0xffb5a728, 0xffb5a72b,
+ 0xf7b0a134, 0xae7e7639, 0x5b43412d, 0xba868342, 0xffb2a538, 0xffb0a449,
+ 0xffac9f4e, 0xff9c9443, 0xff968e3d, 0xff9e9544, 0xfeab9f4d, 0xec978d45,
+ 0xe6918a43, 0xffac9f50, 0xffaa9e4c, 0xff9a9040, 0xff948b3c, 0xff958d3c,
+ 0xff978d3d, 0xff998d3e, 0xff243847, 0xff254250, 0xff2e2b2e, 0xff2f292d,
+ 0xff312929, 0xff623025, 0xff553027, 0xff412925, 0xff632b1a, 0xffb44117,
+ 0xffdf7b12, 0xffed9012, 0xfff8a21b, 0xfff6a012, 0xffef8e0e, 0xfff09212,
+ 0xfff08b10, 0xffe87402, 0xffe97905, 0xffe8790f, 0xffd96002, 0xffe06d05,
+ 0xffd45c05, 0xffda6405, 0xffd05506, 0xffd2550b, 0xffbf4005, 0xffca4e08,
+ 0xffc74c09, 0xffd66108, 0xffcc580b, 0xffba4004, 0xffce5906, 0xffc2500b,
+ 0xffa92e01, 0xffc6530f, 0xffb63d06, 0xffb4390c, 0xffaa2f04, 0xffa82d04,
+ 0xffa92e05, 0xffa92d04, 0xffab3006, 0xffad3507, 0xff9a300f, 0xff332728,
+ 0xff46302d, 0xff302c2d, 0xff31282b, 0xff2d2a2d, 0xff2c292e, 0xff2a3944,
+ 0xff224252, 0xff1e6e91, 0xff227094, 0xff186a8b, 0xfe6d9e89, 0xff9ba958,
+ 0xffb6a72b, 0xeca99e3b, 0x8c636134, 0x543e3b2b, 0x8f666238, 0xeba49b4a,
+ 0xffafa44a, 0xfeaea34b, 0xfeaea34e, 0xffaba04e, 0xffa69c4a, 0xfaaa9f4f,
+ 0xbd7f773a, 0x482c260d, 0x5138341c, 0xf8aba55c, 0xffa59b4a, 0xff978e3e,
+ 0xff958d3b, 0xff968c3d, 0xff9e9042, 0xffad9c50, 0xff243642, 0xff214150,
+ 0xff2e2a2c, 0xff2d2a2e, 0xff31292a, 0xff56342d, 0xff452c25, 0xff422b28,
+ 0xff642e1a, 0xffae3309, 0xffd76a09, 0xffec8e13, 0xfffaa318, 0xffee8d0e,
+ 0xffec8a0f, 0xfff39111, 0xffe47208, 0xffe47306, 0xffe36c07, 0xffda5c04,
+ 0xffeb7d07, 0xffda6504, 0xffe77606, 0xffe26e05, 0xffcf5a07, 0xffc44908,
+ 0xffd35207, 0xffcd4e09, 0xffd05307, 0xffd96609, 0xffc34c08, 0xffcb5306,
+ 0xffca5808, 0xffb33b04, 0xffc65009, 0xffca5c14, 0xffaf3507, 0xffb93f0c,
+ 0xffa82c03, 0xffa92e05, 0xffa82d03, 0xffa92e04, 0xffb53707, 0xffa92f06,
+ 0xff9c2e0a, 0xff352626, 0xff513631, 0xff303c44, 0xff30282a, 0xff2d2b2f,
+ 0xff2c2a30, 0xff283e4b, 0xff214657, 0xff196c8e, 0xff1f7092, 0xff1c6c8a,
+ 0xff78a892, 0xffa5a94d, 0xcd938a38, 0x5e444027, 0x58413f2d, 0xb7817e48,
+ 0xf6a9a04f, 0xffb0a346, 0xfeb0a43d, 0xfeb2a631, 0xffb2a540, 0xffada450,
+ 0xeda29851, 0x86595328, 0x29171506, 0x452f2c1e, 0xad757140, 0xfdaea356,
+ 0xffaca14f, 0xff9e9443, 0xff99903f, 0xffa9994b, 0xffb9a459, 0xffbca65d,
+ 0xff243946, 0xff224456, 0xff2d282b, 0xff2d292d, 0xff362f31, 0xff41312f,
+ 0xff3c2b29, 0xff3c2b2a, 0xff732a15, 0xffbc4004, 0xffea880f, 0xfff2991b,
+ 0xffec910f, 0xffea850e, 0xffe9820d, 0xffe26d09, 0xffdf690b, 0xffde650d,
+ 0xffda610b, 0xffe8750a, 0xffdf6b05, 0xffeb7c09, 0xffed8109, 0xffcc5602,
+ 0xffd76713, 0xffda5b05, 0xffd35606, 0xffcf5109, 0xffd55a07, 0xffce5b06,
+ 0xffd46009, 0xffc75105, 0xffbc4805, 0xffc44b05, 0xffe0720e, 0xffae3803,
+ 0xffc0450d, 0xffaa2e03, 0xffaa2f06, 0xffa92e05, 0xffa82d02, 0xffb13607,
+ 0xffb33805, 0xffae3006, 0xff9a2e0c, 0xff332625, 0xff523731, 0xff2b4a5b,
+ 0xff31282a, 0xff2b2c33, 0xff2b2c30, 0xff283f4c, 0xff1f495e, 0xff16678b,
+ 0xff1a6e93, 0xfe2b7286, 0xfc77a9a2, 0xaf777740, 0x43312d1d, 0x563c3b25,
+ 0xd2938c49, 0xfeb0a344, 0xffb3a538, 0xffb2a62f, 0xfeb3a52b, 0xffb7a736,
+ 0xffb9a64e, 0xcc8e844b, 0x4e322e15, 0x25161309, 0x7d565436, 0xe29a9452,
+ 0xfdada253, 0xffaea351, 0xfeada24a, 0xffb5a351, 0xffbba35b, 0xffbea75e,
+ 0xffae9c56, 0xff847b43, 0xff233b48, 0xff21465b, 0xff2c282a, 0xff2e292b,
+ 0xff332c31, 0xff332828, 0xff372a29, 0xff362829, 0xff882e11, 0xffce5f0b,
+ 0xffe98d15, 0xfff29719, 0xffe8850d, 0xffea810f, 0xffe57511, 0xffde670e,
+ 0xffdb620b, 0xffda6c1a, 0xffd8600c, 0xffe26c08, 0xffe97d08, 0xffed8a0d,
+ 0xffd96702, 0xffe78612, 0xffe8790a, 0xffdc6208, 0xffd1570c, 0xffd45406,
+ 0xffc95106, 0xffd9690c, 0xffca5406, 0xffc04a05, 0xffc74f04, 0xffdc6809,
+ 0xffc85809, 0xffb13505, 0xffbf410a, 0xffa82c04, 0xffaa3006, 0xffa82c03,
+ 0xffac3205, 0xffb63a05, 0xffb63906, 0xffae3103, 0xff952e0f, 0xff312727,
+ 0xff4e3834, 0xff294556, 0xff302b2b, 0xff2a3138, 0xff2a2a30, 0xff284351,
+ 0xff1c4d64, 0xff13678c, 0xff156d94, 0xff407e7d, 0xec6da6af, 0x291c1b12,
+ 0x6c4c482e, 0xeea39d58, 0xffafa444, 0xfeb3a62d, 0xfeb4a62c, 0xffb8a637,
+ 0xfebaa549, 0xf3b39f59, 0xa1756b44, 0x2c1c170c, 0x3a262212, 0xb0797546,
+ 0xfca8a056, 0xff988f4b, 0xfe867e42, 0xffaa9e40, 0xffb5a730, 0xffb7a63c,
+ 0xffb3a04b, 0xff938846, 0xff736e3d, 0xff706b3c, 0xff263844, 0xff1e475c,
+ 0xff2d282c, 0xff2e292c, 0xff312a2e, 0xff30292b, 0xff382a2a, 0xff332728,
+ 0xffa14017, 0xffe07713, 0xffe78d17, 0xffea890f, 0xffec8711, 0xffe0700a,
+ 0xffe17015, 0xffd65d09, 0xffdc6b20, 0xffd1590e, 0xffde6307, 0xffe67809,
+ 0xfff0900e, 0xffe57707, 0xffef8d10, 0xffef8b0a, 0xffe06a05, 0xffe1730e,
+ 0xffd35d0e, 0xffce5204, 0xffe27b1a, 0xffce5d09, 0xffc24c03, 0xffcf5806,
+ 0xffd55d05, 0xffdd740a, 0xffb43e06, 0xffbe4009, 0xffae3204, 0xffac3206,
+ 0xffa92f04, 0xffaf3305, 0xffb23905, 0xffbc3e07, 0xffb93c06, 0xffac2f04,
+ 0xff8e2e10, 0xff312627, 0xff513a37, 0xff293f4f, 0xff322b2e, 0xff2b2b2f,
+ 0xff2a2b2f, 0xff24495a, 0xff1d4e68, 0xff136688, 0xff15678a, 0xff4f8b87,
+ 0xeb7aa7a3, 0x956d6641, 0xf3a79d55, 0xffb0a454, 0xfeb4a450, 0xffb9a644,
+ 0xffbca64c, 0xffbea75a, 0xf5b39f5c, 0x7b595136, 0x25141109, 0x683f3c1f,
+ 0xd8908b4c, 0xffa0984f, 0xff867f42, 0xfe6f6b39, 0xff797137, 0xffa2972f,
+ 0xffb7a92c, 0xffa3982e, 0xff7a7336, 0xff6d6937, 0xff7b743d, 0xff928a47,
+ 0xff26323d, 0xff20465a, 0xff2d292c, 0xff2d2a2d, 0xff30292b, 0xff30292a,
+ 0xff392928, 0xff3a2825, 0xffc05a17, 0xffde7b11, 0xffe07710, 0xffe98310,
+ 0xffe27408, 0xffee8b19, 0xffd95f09, 0xffd15e1b, 0xffd05711, 0xffd95a08,
+ 0xffe37106, 0xfff18e0d, 0xffe87b08, 0xffe67d0b, 0xfff49814, 0xffe47705,
+ 0xffe57409, 0xffe97d07, 0xffd35b04, 0xffeb7c0e, 0xffdc7115, 0xffc24b02,
+ 0xffd05d05, 0xffd35705, 0xffe67e0d, 0xffc95b08, 0xffb33805, 0xffb83c05,
+ 0xffaf3404, 0xffb23707, 0xffa82c04, 0xffb94206, 0xffb63b05, 0xffc14409,
+ 0xffb63b05, 0xffaa2f04, 0xff8d3214, 0xff362725, 0xff523d3b, 0xff283d49,
+ 0xff302e32, 0xff2c292d, 0xff2b2d32, 0xff24495d, 0xff1e4b5d, 0xff185e80,
+ 0xff185873, 0xff5e9799, 0xfa95a784, 0xfbbba658, 0xffb3a356, 0xff9d904e,
+ 0xffb59f58, 0xffbfa75b, 0xffbca55c, 0xffad9b4e, 0xf89c9148, 0xa96d693f,
+ 0xaf6a6635, 0xf38f8741, 0xff8b8344, 0xff78723d, 0xfe6f683a, 0xff877f36,
+ 0xffa69a30, 0xffb5a42e, 0xffb6a82b, 0xffa39937, 0xff7c7437, 0xff938a35,
+ 0xffab9e33, 0xffb0a54d, 0xff283038, 0xff234658, 0xff2d292b, 0xff2c2a2d,
+ 0xff31292b, 0xff33282b, 0xff3b2827, 0xff442822, 0xffd46b15, 0xffd2670b,
+ 0xffe0710c, 0xffde6b06, 0xfff59d1b, 0xffe2710f, 0xffcb520e, 0xffcf5513,
+ 0xffd35406, 0xffe16c08, 0xffed8008, 0xffe67b08, 0xffe77708, 0xffef8910,
+ 0xffe77f0a, 0xffe6780a, 0xffeb8310, 0xffe77707, 0xffe5730c, 0xffe57c12,
+ 0xffc74f03, 0xffd05d05, 0xffd35804, 0xffe4770a, 0xffda7409, 0xffbf490a,
+ 0xffb83a06, 0xffb23504, 0xffbb3f08, 0xffad3004, 0xffac3105, 0xffb23904,
+ 0xffc84a07, 0xffbe4206, 0xffb43a08, 0xffab2c05, 0xff933818, 0xff372523,
+ 0xff503f3f, 0xff283c47, 0xff2d3036, 0xff2d292c, 0xff2a2e34, 0xff24485b,
+ 0xff1d495c, 0xff1d546d, 0xff21566d, 0xfe65a1a9, 0xffada971, 0xffb39d57,
+ 0xfe877b44, 0xfe706b3a, 0xff8c7e46, 0xffc1a95f, 0xffb39f52, 0xfe998f3f,
+ 0xfe958b3c, 0xfd958d3f, 0xfe8c833e, 0xff78713a, 0xff706b3b, 0xfe7a713f,
+ 0xffa29353, 0xffb5a449, 0xffb6a72f, 0xffb3a72f, 0xffb2a43c, 0xffb2a537,
+ 0xffafa32f, 0xffb4a72a, 0xffb4a739, 0xffa79c4c
+};
diff --git a/src/pixman/demos/parrot.jpg b/src/pixman/demos/parrot.jpg
new file mode 100644
index 0000000..e7727f3
--- /dev/null
+++ b/src/pixman/demos/parrot.jpg
Binary files differ
diff --git a/src/pixman/demos/quad2quad.c b/src/pixman/demos/quad2quad.c
new file mode 100644
index 0000000..66b838f
--- /dev/null
+++ b/src/pixman/demos/quad2quad.c
@@ -0,0 +1,2183 @@
+#include <math.h>
+#include <stdio.h>
+#include <pixman.h>
+
+/* This code is basically the output of Maxima translated into C.
+ *
+ * See http://maxima.sourceforge.net/
+ */
+static void
+quad_to_quad (double x0, double y0,
+ double x1, double y1,
+ double x2, double y2,
+ double x3, double y3,
+
+ double px0, double py0,
+ double px1, double py1,
+ double px2, double py2,
+ double px3, double py3,
+
+ struct pixman_f_transform *trans)
+{
+ double
+ t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13, t14, t15, t16, t17, t18,
+ t19, t20, t21, t22, t23, t24, t25, t26, t27, t28, t29, t30, t31, t32, t33, t34,
+ t35, t36, t37, t38, t39, t40, t41, t42, t43, t44, t45, t46, t47, t48, t49, t50,
+ t51, t52, t53, t54, t55, t56, t57, t58, t59, t60, t61, t62, t63, t64, t65, t66,
+ t67, t68, t69, t70, t71, t72, t73, t74, t75, t76, t77, t78, t79, t80, t81, t82,
+ t83, t84, t85, t86, t87, t88, t89, t90, t91, t92, t93, t94, t95, t96, t97, t98,
+ t99, t100, t101, t102, t103, t104, t105, t106, t107, t108, t109, t110, t111,
+ t112, t113, t114, t115, t116, t117, t118, t119, t120, t121, t122, t123,
+ t124, t125, t126, t127, t128, t129, t130, t131, t132, t133, t134, t135,
+ t136, t137, t138, t139, t140, t141, t142, t143, t144, t145, t146, t147,
+ t148, t149, t150, t151, t152, t153, t154, t155, t156, t157, t158, t159,
+ t160, t161, t162, t163, t164, t165, t166, t167, t168, t169, t170, t171,
+ t172, t173, t174, t175, t176, t177, t178, t179, t180, t181, t182, t183,
+ t184, t185, t186, t187, t188, t189, t190, t191, t192, t193, t194, t195,
+ t196, t197, t198, t199, t200, t201, t202, t203, t204, t205, t206, t207,
+ t208, t209, t210, t211, t212, t213, t214, t215, t216, t217, t218, t219,
+ t220, t221, t222, t223, t224, t225, t226, t227, t228, t229, t230, t231,
+ t232, t233, t234, t235, t236, t237, t238, t239, t240, t241, t242, t243,
+ t244, t245, t246, t247, t248, t249, t250, t251, t252, t253, t254, t255,
+ t256, t257, t258, t259, t260, t261, t262, t263, t264, t265, t266, t267,
+ t268, t269, t270, t271, t272, t273, t274, t275, t276, t277, t278, t279,
+ t280, t281, t282, t283, t284, t285, t286, t287, t288, t289, t290, t291,
+ t292, t293, t294, t295, t296, t297, t298, t299, t300, t301, t302, t303,
+ t304, t305, t306, t307, t308, t309, t310, t311, t312, t313, t314, t315,
+ t316, t317, t318, t319, t320, t321, t322, t323, t324, t325, t326, t327,
+ t328, t329, t330, t331, t332, t333, t334, t335, t336, t337, t338, t339,
+ t340, t341, t342, t343, t344, t345, t346, t347, t348, t349, t350, t351,
+ t352, t353, t354, t355, t356, t357, t358, t359, t360, t361, t362, t363,
+ t364, t365, t366, t367, t368, t369, t370, t371, t372, t373, t374, t375,
+ t376, t377, t378, t379, t380, t381, t382, t383, t384, t385, t386, t387,
+ t388, t389, t390, t391, t392, t393, t394, t395, t396, t397, t398, t399,
+ t400, t401, t402, t403, t404, t405, t406, t407, t408, t409, t410, t411,
+ t412, t413, t414, t415, t416, t417, t418, t419, t420, t421, t422, t423,
+ t424, t425, t426, t427, t428, t429, t430, t431, t432, t433, t434, t435,
+ t436, t437, t438, t439, t440, t441, t442, t443, t444, t445, t446, t447,
+ t448, t449, t450, t451, t452, t453, t454, t455, t456, t457, t458, t459,
+ t460, t461, t462, t463, t464, t465, t466, t467, t468, t469, t470, t471,
+ t472, t473, t474, t475, t476, t477, t478, t479, t480, t481, t482, t483,
+ t484, t485, t486, t487, t488, t489, t490, t491, t492, t493, t494, t495,
+ t496, t497, t498, t499, t500, t501, t502, t503, t504, t505, t506, t507,
+ t508, t509, t510, t511, t512, t513, t514, t515, t516, t517, t518, t519,
+ t520, t521, t522, t523, t524, t525, t526, t527, t528, t529, t530, t531,
+ t532, t533, t534, t535, t536, t537, t538, t539, t540, t541, t542, t543,
+ t544, t545, t546, t547, t548, t549, t550, t551, t552, t553, t554, t555,
+ t556, t557, t558, t559, t560, t561, t562, t563, t564, t565, t566, t567,
+ t568, t569, t570, t571, t572, t573, t574, t575, t576, t577, t578, t579,
+ t580, t581, t582, t583, t584, t585, t586, t587, t588, t589, t590, t591,
+ t592, t593, t594, t595, t596, t597, t598, t599, t600, t601, t602, t603,
+ t604, t605, t606, t607, t608, t609, t610, t611, t612, t613, t614, t615,
+ t616, t617, t618, t619, t620, t621, t622, t623, t624, t625, t626, t627,
+ t628, t629, t630, t631, t632, t633, t634, t635, t636, t637, t638, t639,
+ t640, t641, t642, t643, t644, t645, t646, t647, t648, t649, t650, t651,
+ t652, t653, t654, t655, t656, t657, t658, t659, t660, t661, t662, t663,
+ t664, t665, t666, t667, t668, t669, t670, t671, t672, t673, t674, t675,
+ t676, t677, t678, t679, t680, t681, t682, t683, t684, t685, t686, t687,
+ t688, t689, t690, t691, t692, t693, t694, t695, t696, t697, t698, t699,
+ t700, t701, t702, t703, t704, t705, t706, t707, t708, t709, t710, t711,
+ t712, t713, t714, t715, t716, t717, t718, t719, t720, t721, t722, t723,
+ t724, t725, t726, t727, t728, t729, t730, t731, t732, t733, t734, t735,
+ t736, t737, t738, t739, t740, t741, t742, t743, t744, t745, t746, t747,
+ t748, t749, t750, t751, t752, t753, t754, t755, t756, t757, t758, t759,
+ t760, t761, t762, t763, t764, t765, t766, t767, t768, t769, t770, t771,
+ t772, t773, t774, t775, t776, t777, t778, t779, t780, t781, t782, t783,
+ t784, t785, t786, t787, t788, t789, t790, t791, t792, t793, t794, t795,
+ t796, t797, t798, t799, t800, t801, t802, t803, t804, t805, t806, t807,
+ t808, t809, t810, t811, t812, t813, t814, t815, t816, t817, t818, t819,
+ t820, t821, t822, t823, t824, t825, t826, t827, t828, t829, t830, t831,
+ t832, t833, t834, t835, t836, t837, t838, t839, t840, t841, t842, t843,
+ t844, t845, t846, t847, t848, t849, t850, t851, t852, t853, t854, t855,
+ t856, t857, t858, t859, t860, t861, t862, t863, t864, t865, t866, t867,
+ t868, t869, t870, t871, t872, t873, t874, t875, t876, t877, t878, t879,
+ t880, t881, t882, t883, t884, t885, t886, t887, t888, t889, t890, t891,
+ t892, t893, t894, t895, t896, t897, t898, t899, t900, t901, t902, t903,
+ t904, t905, t906, t907, t908, t909, t910, t911, t912, t913, t914, t915,
+ t916, t917, t918, t919, t920, t921, t922, t923, t924, t925, t926, t927,
+ t928, t929, t930, t931, t932, t933, t934, t935, t936, t937, t938, t939,
+ t940, t941, t942, t943, t944, t945, t946, t947, t948, t949, t950, t951,
+ t952, t953, t954, t955, t956, t957, t958, t959, t960, t961, t962, t963,
+ t964, t965, t966, t967, t968, t969, t970, t971, t972, t973, t974, t975,
+ t976, t977, t978, t979, t980, t981, t982, t983, t984, t985, t986, t987,
+ t988, t989, t990, t991, t992, t993, t994, t995, t996, t997, t998, t999,
+ t1000, t1001, t1002, t1003, t1004, t1005, t1006, t1007, t1008, t1009,
+ t1010, t1011, t1012, t1013, t1014, t1015, t1016, t1017, t1018, t1019,
+ t1020, t1021, t1022, t1023, t1024, t1025, t1026, t1027, t1028, t1029,
+ t1030, t1031, t1032, t1033, t1034, t1035, t1036, t1037, t1038, t1039,
+ t1040, t1041, t1042, t1043, t1044, t1045, t1046, t1047, t1048, t1049,
+ t1050, t1051, t1052, t1053, t1054, t1055, t1056, t1057, t1058, t1059,
+ t1060, t1061, t1062, t1063, t1064, t1065, t1066, t1067, t1068, t1069,
+ t1070, t1071, t1072, t1073;
+
+ t1 = y1 * y1;
+ t2 = x3 * x3;
+ t3 = px2 * px3 * t2;
+ t4 = (t3 - px2 * px3 * x2 * x3) * y2;
+ t5 = x2 * x2;
+ t6 = px2 * px3 * t5 * y3;
+
+ t7 = - px2 * px3 * x2 * x3 * y3;
+ t8 = py1 * (t7 + t6 + t4);
+ t9 = px3 * py2 * x2 * x3;
+
+ t10 = - px3 * py2 * t2;
+ t11 = (t10 + t9) * y2;
+ t12 = - px2 * py3 * t5 * y3;
+
+ t13 = px2 * py3 * x2 * x3 * y3;
+ t14 = y0 * y0;
+ t15 = - px3 * py2;
+ t16 = px2 * py3;
+
+ t17 = t16 + t15;
+ t18 = t17 * x2;
+ t19 = px3 * py2 * x3;
+ t20 = - px2 * py3 * x3;
+
+ t21 = t20 + t19 + t18;
+ t22 = px2 * px3 * t5;
+ t23 = - 2 * px2 * px3 * x2 * x3;
+
+ t24 = py1 * (t3 + t23 + t22);
+ t25 = - px2 * py3 * t5;
+ t26 = px2 * py3 * x3;
+
+ t27 = x2 * (t26 + t19);
+ t28 = t10 + t27 + t25;
+ t29 = x1 * x1;
+ t30 = px3 * py2;
+
+ t31 = - px2 * py3;
+ t32 = t31 + t30;
+ t33 = t32 * y2;
+ t34 = - px3 * py2 * y3;
+
+ t35 = px2 * py3 * y3;
+ t36 = t35 + t34 + t33;
+ t37 = - px2 * px3 * t2;
+
+ t38 = (t37 + px2 * px3 * x2 * x3) * y2;
+ t39 = - px2 * px3 * t5 * y3;
+
+ t40 = px2 * px3 * x2 * x3 * y3;
+ t41 = py1 * (t40 + t39 + t38);
+ t42 = - px2 * py3 * x2 * x3;
+
+ t43 = px3 * py2 * t2;
+ t44 = (t43 + t42) * y2;
+ t45 = px2 * py3 * t5 * y3;
+
+ t46 = - px3 * py2 * x2 * x3 * y3;
+ t47 = (px2 * px3 * x3 - px2 * px3 * x2) * y2;
+
+ t48 = px2 * px3 * x2 * y3;
+ t49 = - px2 * px3 * x3 * y3;
+ t50 = py1 * (t49 + t48 + t47);
+
+ t51 = px2 * py3 * x2;
+ t52 = - 2 * px3 * py2 * x3;
+ t53 = (t26 + t52 + t51) * y2;
+
+ t54 = px3 * py2 * x3 * y3;
+ t55 = px3 * py2 * y3;
+ t56 = - 2 * px2 * py3 * y3;
+ t57 = t56 + t55;
+
+ t58 = x2 * t57;
+ t59 = - px2 * px3 * t5;
+ t60 = 2 * px2 * px3 * x2 * x3;
+ t61 = - px2;
+
+ t62 = px3 + t61;
+ t63 = t62 * x2;
+ t64 = px2 * x3;
+ t65 = - px3 * x3;
+ t66 = t65 + t64 + t63;
+
+ t67 = px2 * t5;
+ t68 = - px2 * x3;
+ t69 = x2 * (t65 + t68);
+ t70 = px3 * t2;
+
+ t71 = t70 + t69 + t67;
+ t72 = - px3;
+ t73 = t72 + px2;
+ t74 = - px2 * y3;
+ t75 = px3 * y3;
+
+ t76 = t75 + t74 + t73 * y2;
+ t77 = px2 * x2 * x3;
+ t78 = - px3 * t2;
+ t79 = - px2 * t5 * y3;
+
+ t80 = px3 * x2 * x3 * y3;
+ t81 = t80 + t79 + (t78 + t77) * y2;
+
+ t82 = (px2 * px3 * x2 - px2 * px3 * x3) * y2;
+ t83 = - px2 * px3 * x2 * y3;
+
+ t84 = px2 * px3 * x3 * y3;
+ t85 = - px2 * x2;
+ t86 = 2 * px3 * x3;
+ t87 = - px3 * x3 * y3;
+
+ t88 = 2 * px2 * y3;
+ t89 = - px3 * y3;
+ t90 = t89 + t88;
+ t91 = x2 * t90;
+
+ t92 = t91 + t87 + (t86 + t68 + t85) * y2;
+ t93 = px2 * py3 * t5;
+ t94 = - px3 * py2 * x3;
+
+ t95 = x2 * (t20 + t94);
+ t96 = t32 * x2;
+ t97 = t73 * x2;
+ t98 = px3 * x3;
+
+ t99 = t98 + t68 + t97;
+ t100 = py1 * t99;
+ t101 = - px2 * t5;
+ t102 = x2 * (t98 + t64);
+
+ t103 = t78 + t102 + t101;
+ t104 = py1 * t103;
+ t105 = - py2;
+ t106 = py3 + t105;
+
+ t107 = py2 * y3;
+ t108 = - py3 * y3;
+ t109 = t108 + t107 + t106 * y2;
+ t110 = - px3 * x2 * x3;
+
+ t111 = px2 * t5 * y3;
+ t112 = - px2 * x2 * x3 * y3;
+ t113 = t112 + t111 + (t70 + t110) * y2;
+
+ t114 = - py2 * x3;
+ t115 = py3 * x3;
+ t116 = t115 + t114;
+ t117 = py2 * x3 * y3;
+
+ t118 = - py3 * x3 * y3;
+ t119 = t118 + t117;
+ t120 = x2 * t119;
+
+ t121 = px1 * (t120 + x2 * t116 * y2);
+ t122 = - px3 * py2 * x2;
+ t123 = (t19 + t122) * y2;
+
+ t124 = px2 * py3 * x2 * y3;
+ t125 = - px2 * py3 * x3 * y3;
+ t126 = px3 * x2;
+
+ t127 = - px2 * x2 * y3;
+ t128 = px2 * x3 * y3;
+ t129 = t128 + t127 + (t65 + t126) * y2;
+
+ t130 = - py3;
+ t131 = t130 + py2;
+ t132 = t131 * x2;
+ t133 = py2 * x3;
+ t134 = - py3 * x3;
+
+ t135 = - py2 * x3 * y3;
+ t136 = py3 * x3 * y3;
+ t137 = - py2 * y3;
+ t138 = py3 * y3;
+
+ t139 = t138 + t137;
+ t140 = x2 * t139;
+
+ t141 = px1 * (t140 + t136 + t135 + (t134 + t133 + t132) * y2);
+ t142 = y2 * y2;
+
+ t143 = - px3 * py2 * x3 * y3;
+ t144 = px2 * py3 * x3 * y3;
+ t145 = t144 + t143;
+
+ t146 = t142 * t145;
+ t147 = y3 * y3;
+ t148 = px3 * py2 * t147;
+ t149 = - px2 * py3 * t147;
+
+ t150 = t149 + t148;
+ t151 = x2 * y2 * t150;
+ t152 = t151 + t146;
+ t153 = - px2 * py3 * y3;
+
+ t154 = t153 + t55;
+ t155 = t142 * t154;
+ t156 = - px3 * py2 * t147;
+
+ t157 = px2 * py3 * t147;
+ t158 = t157 + t156;
+ t159 = y2 * t158;
+ t160 = t159 + t155;
+
+ t161 = x0 * x0;
+ t162 = py1 * t76;
+ t163 = px1 * t109;
+ t164 = px2 * y3;
+ t165 = t89 + t164;
+
+ t166 = - px2 * t147;
+ t167 = px3 * t147;
+ t168 = t167 + t166;
+
+ t169 = y2 * t168 + t142 * t165;
+ t170 = py1 * t169;
+ t171 = py2 * t147;
+
+ t172 = - py3 * t147;
+ t173 = t172 + t171;
+ t174 = y2 * t173 + t142 * t139;
+
+ t175 = px1 * t174;
+ t176 = t17 * t142;
+ t177 = px2 * t147;
+ t178 = - px3 * t147;
+
+ t179 = t178 + t177 + t62 * t142;
+ t180 = - py2 * t147;
+ t181 = py3 * t147;
+
+ t182 = t181 + t180 + t131 * t142;
+
+ t183 = y1 * (px1 * t182 + py1 * t179 + t149 + t148 + t176)
+ + t175 + t170 + t159 + t1 * (t163 + t162 + t35 + t34 + t33) + t155;
+
+ t184 = - px2 * px3 * t2 * t142;
+ t185 = 2 * px2 * px3 * x2 * x3 * y2 * y3;
+
+ t186 = - px2 * px3 * t5 * t147;
+ t187 = py1 * (t186 + t185 + t184);
+
+ t188 = px3 * py2 * t2 * t142;
+ t189 = x2 * y2 * (t125 + t143);
+ t190 = px2 * py3 * t5 * t147;
+
+ t191 = t190 + t189 + t188;
+ t192 = px2 * px3 * x3 * t142;
+ t193 = y2 * (t49 + t83);
+
+ t194 = px2 * px3 * x2 * t147;
+ t195 = py1 * (t194 + t193 + t192);
+
+ t196 = - px3 * py2 * x3 * t142;
+ t197 = 2 * px3 * py2 * x3 * y3;
+ t198 = 2 * px2 * py3 * y3;
+
+ t199 = t198 + t34;
+ t200 = x2 * t199;
+ t201 = y2 * (t200 + t125 + t197);
+
+ t202 = - px2 * py3 * x2 * t147;
+ t203 = - px2 * x3 * y3;
+ t204 = px3 * x3 * y3;
+
+ t205 = t204 + t203;
+ t206 = t142 * t205;
+ t207 = t178 + t177;
+ t208 = x2 * y2 * t207;
+
+ t209 = t208 + t206;
+ t210 = px2 * px3 * t2 * t142;
+ t211 = - 2 * px2 * px3 * x2 * x3 * y2 * y3;
+
+ t212 = px2 * px3 * t5 * t147;
+ t213 = - px3 * t2 * t142;
+ t214 = x2 * y2 * (t204 + t128);
+
+ t215 = - px2 * t5 * t147;
+ t216 = t215 + t214 + t213;
+ t217 = - px2 * px3 * x3 * t142;
+
+ t218 = y2 * (t84 + t48);
+ t219 = - px2 * px3 * x2 * t147;
+ t220 = px3 * x3 * t142;
+
+ t221 = - 2 * px3 * x3 * y3;
+ t222 = - 2 * px2 * y3;
+ t223 = t75 + t222;
+ t224 = x2 * t223;
+
+ t225 = y2 * (t224 + t221 + t128);
+ t226 = px2 * x2 * t147;
+ t227 = t226 + t225 + t220;
+
+ t228 = t125 + t54;
+ t229 = t142 * t228;
+ t230 = x2 * y2 * t158;
+ t231 = t87 + t128;
+
+ t232 = t142 * t231;
+ t233 = x2 * y2 * t168;
+ t234 = t233 + t232;
+ t235 = py1 * t234;
+
+ t236 = - px3 * py2 * t2 * t142;
+ t237 = x2 * y2 * (t144 + t54);
+
+ t238 = - px2 * py3 * t5 * t147;
+ t239 = px3 * t2 * t142;
+ t240 = x2 * y2 * (t87 + t203);
+
+ t241 = px2 * t5 * t147;
+ t242 = t241 + t240 + t239;
+ t243 = py1 * t242;
+
+ t244 = px2 * py3 * x3 * t142;
+ t245 = - px2 * py3 * x2 * y3;
+ t246 = y2 * (t143 + t245);
+
+ t247 = px3 * py2 * x2 * t147;
+ t248 = - px2 * x3 * t142;
+ t249 = px2 * x2 * y3;
+
+ t250 = y2 * (t204 + t249);
+ t251 = - px3 * x2 * t147;
+ t252 = t251 + t250 + t248;
+
+ t253 = t134 + t133;
+ t254 = t253 * t142;
+ t255 = t108 + t107;
+ t256 = x2 * t255;
+
+ t257 = t256 + t136 + t135;
+ t258 = y2 * t257;
+ t259 = t181 + t180;
+ t260 = x2 * t259;
+
+ t261 = px1 * (t260 + t258 + t254);
+ t262 = py1 * (t37 + t60 + t59);
+
+ t263 = t43 + t95 + t93;
+ t264 = px1 * t263;
+ t265 = t26 + t94;
+ t266 = x2 * t265 * y2;
+
+ t267 = x2 * t228;
+ t268 = t267 + t266;
+ t269 = py1 * (t84 + t83 + t82);
+
+ t270 = - 2 * px2 * py3;
+ t271 = (t26 + (t270 + t30) * x2) * y2;
+ t272 = px3 * py2 * x2 * y3;
+
+ t273 = - 2 * px3 * py2 * x3 * y3;
+ t274 = t149 + t148 + t176;
+
+ t275 = py1 * (t212 + t211 + t210);
+ t276 = t238 + t237 + t236;
+ t277 = px1 * t276;
+
+ t278 = py1 * (t219 + t218 + t217);
+ t279 = 2 * px3 * py2 * x3;
+ t280 = t20 + t279;
+
+ t281 = t280 * t142;
+ t282 = - px3 * py2 * x2 * y3;
+ t283 = y2 * (t125 + t282);
+
+ t284 = 2 * px2 * py3 * t147;
+ t285 = x2 * (t284 + t156);
+ t286 = px1 * t103;
+
+ t287 = t98 + t68;
+ t288 = x2 * t287 * y2;
+ t289 = x2 * t231;
+ t290 = t289 + t288;
+
+ t291 = 2 * px2;
+ t292 = - px3 * x2 * y3;
+ t293 = 2 * px3 * x3 * y3;
+
+ t294 = t293 + t203 + t292 + (t68 + (t72 + t291) * x2) * y2;
+ t295 = px1 * t242;
+
+ t296 = - 2 * px3 * x3;
+ t297 = t296 + t64;
+ t298 = px3 * x2 * y3;
+ t299 = y2 * (t128 + t298);
+
+ t300 = - 2 * px2 * t147;
+ t301 = x2 * (t167 + t300) + t299 + t297 * t142;
+ t302 = py1 * t71;
+
+ t303 = py1 * t290;
+ t304 = 2 * py2 * x3;
+ t305 = - 2 * py3 * x3;
+ t306 = - 2 * py2 * x3 * y3;
+
+ t307 = 2 * py3 * x3 * y3;
+ t308 = t307 + t306;
+ t309 = - 2 * px2 * py3 * x3;
+
+ t310 = (t309 + t19 + t51) * y2;
+ t311 = - 2 * px3 * py2 * y3;
+ t312 = t35 + t311;
+
+ t313 = x2 * t312;
+ t314 = 2 * px2 * x3;
+ t315 = 2 * px3 * y3;
+ t316 = t315 + t74;
+
+ t317 = x2 * t316;
+ t318 = t317 + t87 + (t65 + t314 + t85) * y2;
+ t319 = t106 * x2;
+
+ t320 = px1 * (t256 + t118 + t117 + (t115 + t114 + t319) * y2);
+ t321 = py1 * t216;
+
+ t322 = 2 * px2 * py3 * x3 * y3;
+ t323 = 2 * px3 * py2 * y3;
+ t324 = t153 + t323;
+
+ t325 = x2 * t324;
+ t326 = y2 * (t325 + t322 + t143);
+ t327 = - 2 * px2 * x3 * y3;
+
+ t328 = - 2 * px3 * y3;
+ t329 = t328 + t164;
+ t330 = x2 * t329;
+
+ t331 = y2 * (t330 + t204 + t327);
+ t332 = t226 + t331 + t220;
+ t333 = t116 * t142;
+
+ t334 = t140 + t118 + t117;
+ t335 = y2 * t334;
+ t336 = x2 * t173;
+
+ t337 = px1 * (t336 + t335 + t333);
+ t338 = t26 + t94 + t96;
+ t339 = t17 * y2;
+
+ t340 = t153 + t55 + t339;
+ t341 = px2 * px3 * t142;
+ t342 = - 2 * px2 * px3 * y2 * y3;
+
+ t343 = px2 * px3 * t147;
+ t344 = py1 * (t343 + t342 + t341);
+ t345 = - px2 * py3 * t142;
+
+ t346 = y2 * (t35 + t55);
+ t347 = t156 + t346 + t345;
+ t348 = px1 * t347 + t344;
+
+ t349 = t89 + t164 + t62 * y2;
+ t350 = - px2 * px3 * t142;
+ t351 = 2 * px2 * px3 * y2 * y3;
+
+ t352 = - px2 * px3 * t147;
+ t353 = px2 * t142;
+ t354 = y2 * (t89 + t74);
+
+ t355 = t167 + t354 + t353;
+ t356 = px1 * t355 + t352 + t351 + t350;
+ t357 = py1 * t66;
+
+ t358 = py1 * t349;
+ t359 = 2 * py2;
+ t360 = - 2 * py3;
+ t361 = - 2 * py2 * y3;
+
+ t362 = 2 * py3 * y3;
+ t363 = px3 * py2 * t142;
+ t364 = y2 * (t153 + t34);
+
+ t365 = - px3 * t142;
+ t366 = y2 * (t75 + t164);
+ t367 = t166 + t366 + t365;
+
+ t368 = py1 * t367;
+ t369 = px1 * (t172 + t171 + t106 * t142);
+ t370 = t35 + t34;
+
+ t371 = t142 * t370;
+ t372 = y2 * t150;
+ t373 = t372 + t371;
+ t374 = t230 + t229;
+
+ t375 = py1 * (t352 + t351 + t350);
+ t376 = t157 + t364 + t363;
+ t377 = px1 * t376 + t375;
+
+ t378 = t75 + t74;
+ t379 = y2 * t207 + t142 * t378;
+ t380 = px1 * t367 + t343 + t342 + t341;
+
+ t381 = py1 * t209;
+ t382 = py1 * t355;
+ t383 = py1 * t379;
+ t384 = 2 * py2 * y3;
+
+ t385 = - 2 * py3 * y3;
+ t386 = t385 + t384;
+ t387 = - 2 * py2 * t147;
+ t388 = 2 * py3 * t147;
+
+ t389 = px2 * py3 * t2;
+ t390 = t389 + t10;
+ t391 = x2 * t390 * y2;
+ t392 = t5 * t228;
+
+ t393 = - px2 * t2;
+ t394 = t70 + t393;
+ t395 = x2 * t394 * y2;
+ t396 = t5 * t231;
+
+ t397 = t396 + t395;
+ t398 = py1 * t397;
+ t399 = py2 * t2;
+ t400 = - py3 * t2;
+
+ t401 = t400 + t399;
+ t402 = x2 * t401 * y2;
+ t403 = t136 + t135;
+ t404 = t5 * t403;
+
+ t405 = t404 + t402;
+ t406 = px1 * t405;
+ t407 = t1 * (t406 + t398 + t392 + t391);
+
+ t408 = t65 + t64;
+ t409 = t5 * t408;
+ t410 = x2 * t394;
+ t411 = t410 + t409;
+
+ t412 = py1 * t411;
+ t413 = t5 * t116;
+ t414 = x2 * t401;
+ t415 = t414 + t413;
+
+ t416 = px1 * t415;
+ t417 = py2 * t5;
+ t418 = x2 * (t134 + t114);
+ t419 = py3 * t2;
+
+ t420 = t419 + t418 + t417;
+ t421 = px1 * t420;
+ t422 = t265 * y2;
+ t423 = x2 * t154;
+
+ t424 = px2 * x2;
+ t425 = (t68 + t424) * y2;
+ t426 = - py2 * x2;
+ t427 = (t133 + t426) * y2;
+
+ t428 = py3 * x2 * y3;
+ t429 = t20 + t19;
+ t430 = x2 * t429;
+ t431 = - px2 * py3 * t2;
+
+ t432 = (t431 + t43 + t430) * y2;
+ t433 = t5 * t370;
+ t434 = x2 * t145;
+
+ t435 = - px2 * x2 * x3;
+ t436 = px2 * t2;
+ t437 = (t436 + t435) * y2;
+ t438 = px3 * t5 * y3;
+
+ t439 = - px3 * x2 * x3 * y3;
+ t440 = py2 * x2 * x3;
+ t441 = - py2 * t2;
+
+ t442 = (t441 + t440) * y2;
+ t443 = - py3 * t5 * y3;
+ t444 = py3 * x2 * x3 * y3;
+
+ t445 = t5 * t287;
+ t446 = t78 + t436;
+ t447 = x2 * t446;
+ t448 = - t2;
+
+ t449 = t448 + 2 * x2 * x3 - t5;
+ t450 = px1 * t449;
+ t451 = (t98 + t85) * y2;
+ t452 = - x2 * y3;
+
+ t453 = x3 * y3;
+ t454 = t453 + t452 + (x2 - x3) * y2;
+ t455 = px1 * t454;
+ t456 = t65 + t314;
+
+ t457 = x2 * t456;
+ t458 = (t78 + t457) * y2;
+ t459 = x2 * (t293 + t203);
+
+ t460 = - x2 * x3 * y3 + t5 * y3 + (t2 - x2 * x3) * y2;
+ t461 = px1 * t460;
+ t462 = t5 * t253;
+
+ t463 = t419 + t441;
+ t464 = x2 * t463;
+ t465 = - py2 * t5;
+ t466 = x2 * (t115 + t133);
+
+ t467 = t2 - 2 * x2 * x3 + t5;
+ t468 = py1 * t467;
+ t469 = py2 * x2;
+ t470 = (t134 + t469) * y2;
+
+ t471 = - py2 * x2 * y3;
+ t472 = x2 * y3;
+ t473 = - x3 * y3;
+ t474 = t473 + t472 + (x3 - x2) * y2;
+
+ t475 = py1 * t474;
+ t476 = - 2 * py2 * x3;
+ t477 = t115 + t476;
+ t478 = x2 * t477;
+
+ t479 = (t419 + t478) * y2;
+ t480 = py2 * t5 * y3;
+ t481 = - 2 * py3 * x3 * y3;
+
+ t482 = x2 * (t481 + t117);
+ t483 = x2 * x3 * y3 - t5 * y3 + (t448 + x2 * x3) * y2;
+
+ t484 = py1 * t483;
+ t485 = t431 + t43;
+ t486 = t485 * t142;
+ t487 = t5 * t158;
+
+ t488 = t446 * t142;
+ t489 = t5 * t168;
+ t490 = t489 + t488;
+ t491 = py1 * t490;
+
+ t492 = t463 * t142;
+ t493 = t5 * t173;
+ t494 = t493 + t492;
+ t495 = px1 * t494;
+
+ t496 = x1 * y1 * (t495 + t491 + t487 + t486);
+ t497 = t142 * t119;
+ t498 = x2 * y2 * t259;
+
+ t499 = t498 + t497;
+ t500 = px1 * t499;
+ t501 = t29 * (t500 + t381 + t151 + t146);
+
+ t502 = t429 * t142;
+ t503 = x2 * t370;
+ t504 = y2 * (t503 + t125 + t54);
+ t505 = x2 * t158;
+
+ t506 = - px3 * x3 * t142;
+ t507 = - px2 * x2 * t147;
+ t508 = py3 * x3 * t142;
+
+ t509 = y2 * (t118 + t471);
+ t510 = py2 * x2 * t147;
+ t511 = - py2 * t142;
+
+ t512 = y2 * (t138 + t107);
+ t513 = t172 + t512 + t511;
+ t514 = px1 * t513;
+
+ t515 = y2 * t259 + t142 * t255;
+ t516 = px1 * t515;
+ t517 = py1 * t454;
+
+ t518 = - py2 * x3 * t142;
+ t519 = t108 + t384;
+ t520 = x2 * t519;
+
+ t521 = y2 * (t520 + t307 + t135);
+ t522 = - py3 * x2 * t147;
+ t523 = py2 * t142;
+
+ t524 = y2 * (t108 + t137);
+ t525 = - t147 + 2 * y2 * y3 - t142;
+ t526 = py1 * t525;
+
+ t527 = x2 * t147 + y2 * (t473 + t452) + x3 * t142;
+ t528 = py1 * t527;
+ t529 = px1 * t474;
+
+ t530 = px2 * x3 * t142;
+ t531 = px3 * x2 * t147;
+
+ t532 = - x2 * t147 + y2 * (t453 + t472) - x3 * t142;
+ t533 = px1 * t532;
+
+ t534 = - px2 * t142;
+ t535 = t147 - 2 * y2 * y3 + t142;
+ t536 = px1 * t535;
+
+ t537 = t447 + t445;
+ t538 = py1 * t537;
+ t539 = t464 + t462;
+ t540 = px1 * t539;
+
+ t541 = 2 * px3 * py2 * t2;
+ t542 = - 2 * px2 * py3 * t2;
+ t543 = x2 * t446 * y2;
+
+ t544 = t5 * t205;
+ t545 = t544 + t543;
+ t546 = py1 * t545;
+ t547 = x2 * t463 * y2;
+
+ t548 = t5 * t119;
+ t549 = t548 + t547;
+ t550 = px1 * t549;
+ t551 = x2 * t265;
+
+ t552 = (t389 + t10 + t551) * y2;
+ t553 = t5 * t154;
+ t554 = 2 * px3 * t2;
+
+ t555 = (t554 + t393 + t110) * y2;
+ t556 = t5 * t90;
+ t557 = py3 * x2 * x3;
+
+ t558 = - 2 * py3 * t2;
+ t559 = (t558 + t399 + t557) * y2;
+ t560 = py2 * x2 * x3 * y3;
+
+ t561 = t138 + t361;
+ t562 = t5 * t561;
+ t563 = t390 * t142;
+ t564 = t5 * t150;
+
+ t565 = - px2 * t2 * t142;
+ t566 = - px3 * t5 * t147;
+ t567 = t566 + t214 + t565;
+
+ t568 = py1 * t567;
+ t569 = py2 * t2 * t142;
+ t570 = x2 * y2 * (t118 + t135);
+
+ t571 = py3 * t5 * t147;
+ t572 = t571 + t570 + t569;
+ t573 = px1 * t572;
+ t574 = t86 + t68;
+
+ t575 = x2 * t574;
+ t576 = (t78 + t575) * y2;
+ t577 = 2 * px2 * x3 * y3;
+
+ t578 = x2 * (t87 + t577);
+ t579 = px1 * t527;
+
+ t580 = - t5 * t147 + 2 * x2 * x3 * y2 * y3 - t2 * t142;
+ t581 = px1 * t580;
+ t582 = t305 + t133;
+
+ t583 = x2 * t582;
+ t584 = (t419 + t583) * y2;
+ t585 = x2 * (t136 + t306);
+
+ t586 = py1 * t532;
+ t587 = - py3 * t2 * t142;
+ t588 = x2 * y2 * (t136 + t117);
+
+ t589 = - py2 * t5 * t147;
+ t590 = t5 * t147 - 2 * x2 * x3 * y2 * y3 + t2 * t142;
+
+ t591 = py1 * t590;
+ t592 = t400 + t466 + t465;
+ t593 = px1 * t592;
+ t594 = t309 + t279;
+
+ t595 = t198 + t311;
+ t596 = x2 * t378;
+ t597 = t596 + t408 * y2;
+ t598 = py1 * t597;
+
+ t599 = t256 + t116 * y2;
+ t600 = px1 * t599;
+ t601 = t178 + t366 + t534;
+
+ t602 = py1 * t601;
+ t603 = t181 + t524 + t523;
+ t604 = px1 * t603;
+ t605 = t265 * t142;
+
+ t606 = t423 + t144 + t143;
+ t607 = y2 * t606;
+ t608 = x2 * t150;
+ t609 = 2 * py2 * x3 * y3;
+
+ t610 = t362 + t137;
+ t611 = x2 * t610;
+ t612 = y2 * (t611 + t118 + t609);
+
+ t613 = py1 * t449;
+ t614 = t419 + t613 + t418 + t417;
+ t615 = py1 * t460;
+
+ t616 = py1 * t535;
+ t617 = t616 + t172 + t512 + t511;
+ t618 = t134 + t304;
+
+ t619 = t618 * t142;
+ t620 = - py3 * x2 * y3;
+ t621 = y2 * (t135 + t620);
+
+ t622 = x2 * (t388 + t180);
+ t623 = px1 * t467;
+ t624 = t623 + t78 + t102 + t101;
+
+ t625 = px1 * t483;
+ t626 = px1 * t525;
+ t627 = t167 + t626 + t354 + t353;
+
+ t628 = - 2 * px2 * x3;
+ t629 = t98 + t628;
+ t630 = t629 * t142;
+ t631 = - 2 * px3 * t147;
+
+ t632 = x2 * (t631 + t177);
+ t633 = - 2 * px2 * py3 * x3 * y3;
+ t634 = t633 + t197;
+
+ t635 = - 2 * px3 * py2 * t147;
+ t636 = t142 * t403;
+ t637 = x2 * y2 * t173;
+
+ t638 = t637 + t636;
+ t639 = px1 * t638;
+ t640 = t589 + t588 + t587;
+ t641 = px1 * t640;
+
+ t642 = px1 * t590;
+ t643 = py1 * t580;
+
+ t644 = (x0 * (px0 * (y1 * (x1 * (t528 + t522 + t612 + t518)
+ + t643 + t571 + t570 + t569)
+ + t29 * t515 + x1 * t638 + t1 * (t615 + t444 + t443 + t442))
+ + py0 * (y1 * (x1 * (t533 + t531 + t331 + t530)
+ + t642 + t566 + t214 + t565)
+ + x1 * t234 + t29 * t379 + t1 * (t625 + t439 + t438 + t437))
+ + y1 * (x1 * (px1 * (t622 + t621 + t619) + py1 * (t632 + t299 + t630)
+ + t608 + t607 + t605)
+ + t641 + t243 + t564 + t563)
+ + x1 * (t639 + t235 + x2 * y2 * (t284 + t635) + t142 * t634)
+ + t29 * (t175 + t170)
+ + t1 * (px1 * (t482 + t480 + t479) + py1 * (t459 + t79 + t458) + t434
+ + t433 + t432))
+ + y0 * (x0 * (py0 * (x1 * (t579 + t632 + t299 + t630)
+ + t489 + t29 * t627
+ + y1 * (x1 * t597 + t625 + t556 + t112 + t555) + t488
+ + t624 * t1)
+ + px0 * (x1 * (t586 + t622 + t621 + t619)
+ + t29 * t617 + t493
+ + y1 * (x1 * t599 + t615 + t562 + t560 + t559) + t492
+ + t614 * t1)
+ + x1 * (px1 * (t522 + t612 + t518) + py1 * (t531 + t331 + t530)
+ + t608 + t607 + t605)
+ + t29 * (t604 + t602) + t487
+ + y1 * (x1 * (t600 + t598 + x2 * t595 + t594 * y2)
+ + px1 * (t585 + t480 + t584) + py1 * (t578 + t79 + t576) + t267
+ + t553 + t552) + t486 + (t593 + t302) * t1)
+ + px0 * (x1 * (t591 + t589 + t588 + t587)
+ + t29 * (t586 + t510 + t509 + t508)
+ + y1 * (x1 * (t484 + t585 + t480 + t584) + t548 + t547) + t415 * t1)
+ + py0 * (x1 * (t581 + t241 + t240 + t239)
+ + t29 * (t579 + t507 + t250 + t506)
+ + y1 * (x1 * (t461 + t578 + t79 + t576) + t544 + t543) + t411 * t1)
+ + x1 * (t573 + t568 + t564 + t563)
+ + t29 * (px1 * (t522 + t521 + t518) + py1 * (t531 + t225 + t530) + t505
+ + t504 + t502)
+ + y1 * (x1 * (px1 * (t562 + t560 + t559) + py1 * (t556 + t112 + t555)
+ + t267 + t553 + t552)
+ + t550 + t546 + t5 * (t322 + t273) + x2 * (t542 + t541) * y2)
+ + (t540 + t538) * t1)
+ + t161 * (py0 * (y1 * (x1 * (t536 + t178 + t366 + t534)
+ + t533 + t531 + t225 + t530)
+ + x1 * t169 + t208 + t1 * (t529 + t204 + t292 + t425) + t206)
+ + px0 * (y1 * (t528 + x1 * (t181 + t526 + t524 + t523) + t522 + t521
+ + t518)
+ + x1 * t174 + t498 + t1 * (t517 + t118 + t428 + t427) + t497)
+ + x1 * (t516 + t383)
+ + y1 * (x1 * (t514 + t382) + px1 * (t510 + t509 + t508)
+ + py1 * (t507 + t250 + t506) + t505 + t504
+ + t502) + t151
+ + t1 * (px1 * (t136 + t471 + t470) + py1 * (t87 + t249 + t451) + t423
+ + t422) + t146) + t501 + t496
+ + t14 * (px0 * (x1 * (t484 + t482 + t480 + t479)
+ + t29 * (t475 + t136 + t471 + t470) + t404 + t402
+ + (x1 * (t468 + t400 + t466 + t465) + t464 + t462) * y1)
+ + py0 * (x1 * (t461 + t459 + t79 + t458)
+ + t29 * (t455 + t87 + t249 + t451) + t396 + t395
+ + (x1 * (t70 + t450 + t69 + t67) + t447 + t445) * y1)
+ + x1 * (px1 * (t444 + t443 + t442) + py1 * (t439 + t438 + t437) + t434
+ + t433 + t432)
+ + t29 * (px1 * (t118 + t428 + t427) + py1 * (t204 + t292 + t425) + t423
+ + t422) + t392 + t391
+ + (x1 * (t421 + t104) + t416 + t412) * y1) + t407);
+ t645 = t5 * t265;
+
+ t646 = t115 + t114 + t132;
+ t647 = px1 * t646;
+ t648 = x2 * t485;
+ t649 = t32 * t5;
+
+ t650 = t70 + t393 + t73 * t5;
+ t651 = t400 + t399 + t106 * t5;
+
+ t652 = t540 + x1 * (px1 * t651 + py1 * t650 + t389 + t10 + t649) + t538 + t648
+ + t29 * (t647 + t357 + t20 + t19 + t18) + t645;
+ t653 = t648 + t645;
+
+ t654 = t392 + t391;
+ t655 = px1 * t654;
+ t656 = t309 + t19;
+ t657 = x2 * t656;
+
+ t658 = (t389 + t657) * y2;
+ t659 = px3 * py2 * t5 * y3;
+ t660 = x2 * (t144 + t273);
+
+ t661 = - px3 * py2 * t5;
+ t662 = t431 + t27 + t661;
+ t663 = px1 * t662 + t24;
+
+ t664 = t5 * t429;
+ t665 = x2 * t390;
+ t666 = t665 + t664;
+ t667 = px3 * py2 * x2;
+
+ t668 = (t20 + t667) * y2;
+ t669 = x2 * t485 * y2;
+ t670 = t5 * t145;
+ t671 = t670 + t669;
+
+ t672 = px1 * t671;
+ t673 = t26 + t52;
+ t674 = x2 * t673;
+ t675 = (t389 + t674) * y2;
+
+ t676 = x2 * (t633 + t54);
+ t677 = px3 * t5;
+ t678 = t436 + t69 + t677;
+
+ t679 = px1 * t678 + t37 + t60 + t59;
+ t680 = - px3 * x2;
+
+ t681 = t203 + t298 + (t64 + t680) * y2;
+ t682 = px1 * t545;
+ t683 = - px3 * t5 * y3;
+
+ t684 = t578 + t683 + (t393 + t575) * y2;
+ t685 = 2 * py3 * x3;
+ t686 = t685 + t476;
+
+ t687 = 2 * py2 * t2;
+ t688 = px1 * (t419 + t441 + t131 * t5);
+ t689 = - px2 * py3 * x2;
+
+ t690 = 2 * px2 * py3 * x3;
+ t691 = (t690 + t94 + t689) * y2;
+
+ t692 = t330 + t204 + (t98 + t628 + t424) * y2;
+ t693 = t134 + t133 + t319;
+
+ t694 = px1 * (t140 + t118 + t117 + t693 * y2);
+ t695 = (t542 + t43 + t9) * y2;
+
+ t696 = t5 * t312;
+ t697 = 2 * px2 * t2;
+ t698 = t5 * t316 + t112 + (t78 + t697 + t110) * y2;
+
+ t699 = x2 * t253;
+ t700 = t5 * t255;
+ t701 = x2 * t403;
+
+ t702 = px1 * (t701 + t700 + (t419 + t441 + t699) * y2);
+ t703 = px2 * py3 * x2 * x3;
+
+ t704 = (t10 + t703) * y2;
+ t705 = px3 * py2 * x2 * x3 * y3;
+ t706 = (t20 + t279 + t689) * y2;
+
+ t707 = t439 + t111 + (t70 + t435) * y2;
+ t708 = t224 + t204 + (t296 + t64 + t424) * y2;
+
+ t709 = - 2 * py2;
+ t710 = 2 * py3;
+ t711 = py1 * t678;
+
+ t712 = t459 + t683 + (t393 + t457) * y2;
+ t713 = x2 * t116;
+ t714 = t5 * t139;
+
+ t715 = px1 * (t120 + t714 + (t400 + t399 + t713) * y2);
+ t716 = 2 * px2 * py3;
+
+ t717 = (t94 + (t716 + t15) * x2) * y2;
+ t718 = - 2 * px2;
+
+ t719 = t221 + t128 + t249 + (t98 + (px3 + t718) * x2) * y2;
+
+ t720 = px1 * (t256 + t136 + t135 + t646 * y2);
+ t721 = - px2 * py3 * t2 * t142;
+
+ t722 = - px3 * py2 * t5 * t147;
+ t723 = t722 + t237 + t721;
+ t724 = - px2 * py3 * x3 * t142;
+
+ t725 = y2 * (t54 + t124);
+ t726 = px1 * y2 * t257;
+ t727 = - px3 * py2 * x2 * t147;
+
+ t728 = y2 * (t87 + t127);
+ t729 = t531 + t728 + t530;
+ t730 = px2 * py3 * t2 * t142;
+
+ t731 = px3 * py2 * t5 * t147;
+ t732 = px1 * t397;
+ t733 = t251 + t299 + t248;
+
+ t734 = px2 * t2 * t142;
+ t735 = px3 * t5 * t147;
+ t736 = t735 + t240 + t734;
+
+ t737 = t389 + t10 + t649;
+ t738 = t731 + t189 + t730;
+ t739 = px1 * t738;
+
+ t740 = x2 * t165;
+ t741 = t740 + t204 + t203;
+ t742 = py1 * y2 * t741;
+ t743 = py1 * t736;
+
+ t744 = px2 * py3 * t142;
+ t745 = px1 * t567;
+ t746 = t148 + t364 + t744;
+
+ t747 = px3 * py2 * t5;
+ t748 = t389 + t95 + t747;
+ t749 = (t26 + t122) * y2;
+
+ t750 = x2 * t280;
+ t751 = (t431 + t750) * y2;
+ t752 = - px3 * py2 * t5 * y3;
+
+ t753 = x2 * (t322 + t143);
+ t754 = - px3 * t5;
+ t755 = t393 + t102 + t754;
+
+ t756 = t128 + t292 + (t68 + t126) * y2;
+ t757 = x2 * t297;
+ t758 = x2 * (t204 + t327);
+
+ t759 = t758 + t438 + (t436 + t757) * y2;
+ t760 = (t94 + t667) * y2;
+
+ t761 = t203 + t249 + (t98 + t680) * y2;
+ t762 = px1 * (t140 + t253 * y2);
+
+ t763 = - px3 * py2 * x2 * x3;
+ t764 = (t43 + t763) * y2;
+ t765 = - px2 * py3 * x2 * x3 * y3;
+
+ t766 = px3 * x2 * x3;
+ t767 = px2 * x2 * x3 * y3;
+ t768 = t767 + t79 + (t78 + t766) * y2;
+
+ t769 = px1 * (t120 + t700 + (t419 + t441 + t713) * y2);
+ t770 = t501 + t496 + t407;
+
+ t771 = px3 * py2 * x3 * t142;
+ t772 = y2 * (t313 + t633 + t54);
+
+ t773 = px2 * py3 * x2 * t147;
+ t774 = - px3 * py2 * t142;
+ t775 = t149 + t346 + t774;
+
+ t776 = y2 * (t317 + t87 + t577);
+ t777 = t507 + t776 + t506;
+ t778 = px3 * t142;
+
+ t779 = t177 + t354 + t778;
+ t780 = y2 * (t144 + t272);
+ t781 = y2 * (t203 + t292);
+
+ t782 = t531 + t781 + t530;
+ t783 = px1 * (t336 + t258 + t333);
+ t784 = t690 + t94;
+
+ t785 = x2 * t784;
+ t786 = (t431 + t785) * y2;
+ t787 = x2 * (t125 + t197);
+
+ t788 = x2 * t629;
+ t789 = x2 * (t221 + t128);
+ t790 = t789 + t438 + (t436 + t788) * y2;
+
+ t791 = - 2 * py2 * t2;
+ t792 = 2 * py3 * t2;
+ t793 = 2 * px2 * py3 * t2;
+
+ t794 = (t793 + t10 + t42) * y2;
+ t795 = t5 * t324;
+ t796 = - 2 * px2 * t2;
+
+ t797 = t5 * t329 + t80 + (t70 + t796 + t77) * y2;
+
+ t798 = px1 * (t701 + t714 + (t400 + t399 + t699) * y2);
+
+ t799 = px1 * (t5 * t259 + t401 * t142);
+ t800 = t429 * y2;
+ t801 = t503 + t800;
+
+ t802 = t487 + t486;
+ t803 = t673 * t142;
+ t804 = - 2 * px2 * py3 * t147;
+
+ t805 = x2 * (t804 + t148);
+ t806 = 2 * px2 * t147;
+
+ t807 = x2 * (t178 + t806) + t728 + t574 * t142;
+ t808 = py1 * t755;
+ t809 = py1 * t779;
+
+ t810 = y2 * (t58 + t144 + t273);
+ t811 = y2 * (t91 + t293 + t203);
+
+ t812 = t507 + t811 + t506;
+ t813 = px1 * (t260 + t335 + t254);
+ t814 = 2 * py2 * t147;
+
+ t815 = - 2 * py3 * t147;
+ t816 = (t389 + t42) * y2;
+ t817 = - py2 * py3 * t2;
+
+ t818 = (t817 + py2 * py3 * x2 * x3) * y2;
+ t819 = - py2 * py3 * t5 * y3;
+
+ t820 = py2 * py3 * x2 * x3 * y3;
+ t821 = px1 * (t820 + t819 + t818);
+ t822 = - py2 * py3 * t5;
+
+ t823 = 2 * py2 * py3 * x2 * x3;
+ t824 = px1 * (t817 + t823 + t822);
+ t825 = (t431 + t9) * y2;
+
+ t826 = py2 * py3 * t2;
+ t827 = (t826 - py2 * py3 * x2 * x3) * y2;
+ t828 = py2 * py3 * t5 * y3;
+
+ t829 = - py2 * py3 * x2 * x3 * y3;
+ t830 = px1 * (t829 + t828 + t827);
+
+ t831 = (py2 * py3 * x2 - py2 * py3 * x3) * y2;
+ t832 = - py2 * py3 * x2 * y3;
+
+ t833 = py2 * py3 * x3 * y3;
+ t834 = px1 * (t833 + t832 + t831);
+
+ t835 = (t690 + t94 + t122) * y2;
+ t836 = px1 * t693;
+ t837 = - py2 * t5 * y3;
+
+ t838 = t560 + t837 + (t400 + t557) * y2;
+ t839 = x2 * t205;
+
+ t840 = py1 * (t839 + x2 * t408 * y2);
+ t841 = (t20 + t51) * y2;
+ t842 = - py3 * x2;
+
+ t843 = py2 * x2 * y3;
+ t844 = t135 + t843 + (t115 + t842) * y2;
+
+ t845 = py1 * (t740 + t87 + t128 + (t98 + t68 + t63) * y2);
+ t846 = py2 * py3 * t5;
+
+ t847 = - 2 * py2 * py3 * x2 * x3;
+ t848 = - py2 * x2 * x3;
+ t849 = - py3 * x2 * x3 * y3;
+
+ t850 = t849 + t480 + (t419 + t848) * y2;
+ t851 = (py2 * py3 * x3 - py2 * py3 * x2) * y2;
+
+ t852 = py2 * py3 * x2 * y3;
+ t853 = - py2 * py3 * x3 * y3;
+ t854 = x2 * t561;
+
+ t855 = t854 + t136 + (t305 + t133 + t469) * y2;
+ t856 = py2 * py3 * t2 * t142;
+
+ t857 = - 2 * py2 * py3 * x2 * x3 * y2 * y3;
+ t858 = py2 * py3 * t5 * t147;
+
+ t859 = px1 * (t858 + t857 + t856);
+ t860 = - py2 * py3 * x3 * t142;
+
+ t861 = y2 * (t833 + t852);
+ t862 = - py2 * py3 * x2 * t147;
+
+ t863 = px1 * (t862 + t861 + t860);
+ t864 = - py2 * py3 * t2 * t142;
+
+ t865 = 2 * py2 * py3 * x2 * x3 * y2 * y3;
+ t866 = - py2 * py3 * t5 * t147;
+
+ t867 = py3 * t2 * t142;
+ t868 = py2 * t5 * t147;
+ t869 = t868 + t570 + t867;
+
+ t870 = py2 * py3 * x3 * t142;
+ t871 = y2 * (t853 + t832);
+ t872 = py2 * py3 * x2 * t147;
+
+ t873 = - py3 * x3 * t142;
+ t874 = - py2 * x2 * t147;
+ t875 = t874 + t521 + t873;
+
+ t876 = py2 * x3 * t142;
+ t877 = py3 * x2 * t147;
+ t878 = t877 + t509 + t876;
+
+ t879 = t287 * t142;
+ t880 = t596 + t87 + t128;
+ t881 = y2 * t880;
+ t882 = x2 * t207;
+
+ t883 = py1 * (t882 + t881 + t879);
+ t884 = py1 * t662;
+
+ t885 = px1 * (t826 + t847 + t846);
+ t886 = 2 * px3 * py2;
+
+ t887 = (t94 + (t31 + t886) * x2) * y2;
+ t888 = px1 * (t853 + t852 + t851);
+
+ t889 = py1 * t738;
+ t890 = px1 * (t866 + t865 + t864);
+
+ t891 = px1 * (t872 + t871 + t870);
+ t892 = t656 * t142;
+ t893 = x2 * (t157 + t635);
+
+ t894 = t221 + t577;
+ t895 = x2 * t253 * y2;
+ t896 = t701 + t895;
+ t897 = px1 * t896;
+
+ t898 = (t20 + t279 + t122) * y2;
+
+ t899 = py1 * (t596 + t204 + t203 + (t65 + t64 + t97) * y2);
+ t900 = t385 + t107;
+
+ t901 = x2 * t900;
+ t902 = t901 + t136 + (t115 + t476 + t469) * y2;
+ t903 = px1 * t869;
+
+ t904 = t874 + t612 + t873;
+ t905 = t408 * t142;
+ t906 = y2 * t741;
+ t907 = x2 * t168;
+
+ t908 = py1 * (t907 + t906 + t905);
+ t909 = - py2 * py3 * t142;
+
+ t910 = 2 * py2 * py3 * y2 * y3;
+ t911 = - py2 * py3 * t147;
+
+ t912 = px1 * (t911 + t910 + t909);
+ t913 = t912 + py1 * t376;
+
+ t914 = t481 + t117 + t428 + (t133 + (py3 + t709) * x2) * y2;
+ t915 = 2 * px3;
+
+ t916 = t138 + t137 + t131 * y2;
+ t917 = px1 * t916;
+
+ t918 = py1 * (t167 + t166 + t73 * t142);
+ t919 = py3 * t142;
+ t920 = t171 + t524 + t919;
+
+ t921 = px1 * t920;
+ t922 = py2 * py3 * t142;
+ t923 = - 2 * py2 * py3 * y2 * y3;
+
+ t924 = py2 * py3 * t147;
+ t925 = py1 * t513 + t924 + t923 + t922;
+ t926 = py1 * t420;
+
+ t927 = py1 * t640;
+ t928 = t685 + t114;
+ t929 = x2 * (t172 + t814) + t621 + t928 * t142;
+
+ t930 = px1 * (t924 + t923 + t922);
+ t931 = t930 + py1 * t347;
+
+ t932 = py1 * t920 + t911 + t910 + t909;
+ t933 = t315 + t222;
+ t934 = py1 * t654;
+
+ t935 = (t10 + t750) * y2;
+ t936 = t824 + py1 * t263;
+ t937 = py1 * t671;
+
+ t938 = (t19 + t689) * y2;
+ t939 = (t10 + t785) * y2;
+ t940 = t296 + t314;
+
+ t941 = py1 * (t78 + t436 + t62 * t5);
+ t942 = (t26 + t52 + t667) * y2;
+
+ t943 = py1 * (t740 + t204 + t203 + t99 * y2);
+
+ t944 = t611 + t118 + (t134 + t304 + t426) * y2;
+ t945 = (t431 + t541 + t42) * y2;
+
+ t946 = t5 * t199;
+ t947 = t5 * t900 + t560 + (t419 + t791 + t557) * y2;
+ t948 = x2 * t287;
+
+ t949 = t5 * t378;
+ t950 = py1 * (t289 + t949 + (t78 + t436 + t948) * y2);
+
+ t951 = - py3 * t5;
+ t952 = t441 + t466 + t951;
+ t953 = py1 * t952 + t826 + t847 + t846;
+
+ t954 = py3 * x2;
+ t955 = t117 + t620 + (t114 + t954) * y2;
+ t956 = py1 * t549;
+
+ t957 = py3 * t5 * y3;
+ t958 = t585 + t957 + (t399 + t583) * y2;
+ t959 = (t389 + t763) * y2;
+
+ t960 = (t309 + t19 + t667) * y2;
+ t961 = - 2 * px3;
+ t962 = px1 * t952;
+ t963 = x2 * t408;
+
+ t964 = t5 * t165;
+ t965 = py1 * (t839 + t964 + (t70 + t393 + t963) * y2);
+
+ t966 = t482 + t957 + (t399 + t478) * y2;
+ t967 = - 2 * px3 * py2;
+
+ t968 = (t26 + (t16 + t967) * x2) * y2;
+
+ t969 = t307 + t135 + t471 + (t134 + (t130 + t359) * x2) * y2;
+
+ t970 = py1 * (t596 + t87 + t128 + t66 * y2);
+ t971 = t444 + t837 + (t400 + t440) * y2;
+
+ t972 = t520 + t118 + (t685 + t114 + t426) * y2;
+ t973 = py1 * t405;
+
+ t974 = t877 + t621 + t876;
+ t975 = - py2 * t2 * t142;
+ t976 = - py3 * t5 * t147;
+
+ t977 = t976 + t588 + t975;
+ t978 = py1 * y2 * t880;
+ t979 = y2 * (t136 + t843);
+
+ t980 = t522 + t979 + t518;
+ t981 = py1 * t276;
+ t982 = py1 * t572;
+ t983 = px1 * y2 * t334;
+
+ t984 = px1 * t977;
+ t985 = (t94 + t51) * y2;
+ t986 = (t43 + t657) * y2;
+
+ t987 = (t26 + t689) * y2;
+ t988 = t117 + t471 + (t134 + t954) * y2;
+
+ t989 = py1 * (t740 + t287 * y2);
+ t990 = (t431 + t703) * y2;
+ t991 = - py3 * x2 * x3;
+
+ t992 = - py2 * x2 * x3 * y3;
+ t993 = t992 + t480 + (t419 + t991) * y2;
+
+ t994 = py1 * (t839 + t949 + (t78 + t436 + t963) * y2);
+ t995 = py3 * t5;
+
+ t996 = t399 + t418 + t995;
+ t997 = t135 + t428 + (t133 + t842) * y2;
+ t998 = x2 * t928;
+
+ t999 = x2 * (t118 + t609);
+ t1000 = t999 + t443 + (t441 + t998) * y2;
+
+ t1001 = y2 * (t901 + t136 + t306);
+ t1002 = t510 + t1001 + t508;
+ t1003 = - py3 * t142;
+
+ t1004 = t180 + t512 + t1003;
+ t1005 = y2 * (t117 + t428);
+ t1006 = t522 + t1005 + t518;
+
+ t1007 = py1 * (t907 + t881 + t905);
+ t1008 = y2 * (t854 + t481 + t117);
+
+ t1009 = t510 + t1008 + t508;
+ t1010 = 2 * px3 * t147;
+
+ t1011 = py1 * (t5 * t207 + t394 * t142);
+ t1012 = t784 * t142;
+
+ t1013 = 2 * px3 * py2 * t147;
+ t1014 = x2 * (t149 + t1013);
+
+ t1015 = py1 * (t882 + t906 + t879);
+ t1016 = x2 * (t181 + t387) + t979 + t582 * t142;
+
+ t1017 = (t43 + t674) * y2;
+ t1018 = x2 * t618;
+ t1019 = x2 * (t307 + t135);
+
+ t1020 = t1019 + t443 + (t441 + t1018) * y2;
+ t1021 = - 2 * px3 * t2;
+
+ t1022 = - 2 * px3 * py2 * t2;
+ t1023 = (t389 + t1022 + t9) * y2;
+ t1024 = t5 * t57;
+
+ t1025 = t5 * t610 + t849 + (t400 + t687 + t848) * y2;
+
+ t1026 = py1 * (t289 + t964 + (t70 + t393 + t948) * y2);
+ t1027 = px1 * t996;
+
+ t1028 = px1 * t1004;
+ t1029 = x2 * t429 * y2;
+ t1030 = (t436 + t110) * y2;
+
+ t1031 = (t441 + t557) * y2;
+ t1032 = (t393 + t77) * y2;
+ t1033 = (t399 + t848) * y2;
+
+ t1034 = (t26 + t94 + t18) * y2;
+ t1035 = (t64 + t85) * y2;
+ t1036 = (t114 + t469) * y2;
+
+ t1037 = (t98 + t628 + t126) * y2;
+ t1038 = (t134 + t304 + t842) * y2;
+
+ t1039 = (t20 + t19 + t96) * y2;
+ t1040 = (t296 + t64 + t126) * y2;
+
+ t1041 = (t685 + t114 + t842) * y2;
+ t1042 = (t98 + (t961 + px2) * x2) * y2;
+
+ t1043 = t456 * t142;
+ t1044 = x2 * (t1010 + t166);
+
+ t1045 = (t134 + (t710 + t105) * x2) * y2;
+ t1046 = t477 * t142;
+
+ t1047 = x2 * (t815 + t171);
+ t1048 = t32 * t142;
+ t1049 = t171 + t526 + t524 + t919;
+
+ t1050 = t536 + t166 + t366 + t365;
+ t1051 = (t389 + t10 + t430) * y2;
+
+ t1052 = (t393 + t766) * y2;
+ t1053 = (t399 + t991) * y2;
+ t1054 = t17 * t5;
+
+ t1055 = (t431 + t43 + t551) * y2;
+ t1056 = (t1021 + t436 + t77) * y2;
+ t1057 = t5 * t223;
+
+ t1058 = (t792 + t441 + t848) * y2;
+ t1059 = t5 * t519;
+ t1060 = t338 * y2;
+
+ t1061 = (t86 + t68 + t680) * y2;
+ t1062 = (t305 + t133 + t954) * y2;
+
+ t1063 = (t115 + t426) * y2;
+ t1064 = (t400 + t1018) * y2;
+ t1065 = (t65 + t424) * y2;
+
+ t1066 = (t70 + t788) * y2;
+ t1067 = (t70 + t757) * y2;
+ t1068 = (t400 + t998) * y2;
+
+ t1069 = t21 * y2;
+ t1070 = (t68 + (t915 + t61) * x2) * y2;
+
+ t1071 = (t133 + (t360 + py2) * x2) * y2;
+ t1072 = (t115 + t476 + t954) * y2;
+
+ t1073 = (t65 + t314 + t680) * y2;
+
+ trans->m[0][0]
+ = (x0 * (px0 * (x1 * (px1 * (y2 * (t388 + t387) + t142 * t386)
+ + t383 + t372 + t371)
+ + y1 * (x1 * (t369 + t382 + t156 + t346 + t345)
+ + t337 + py1 * t301 + t285 + t283 + t281) + t381 + t151
+ + t1 * (t141 + py1 * t92 + t58 + t54 + t53) + t146)
+ + py0 * (y1 * (x1 * t380 + px1 * t332 + t219 + t218 + t217)
+ + px1 * t234 + px1 * x1 * t379 + t1 * (px1 * t129 + t49 + t48 + t47))
+ + y1 * (x1 * t377 + px1 * (t202 + t326 + t196) + t195) + px1 * t374
+ + px1 * x1 * t373 + t1 * (px1 * (t125 + t124 + t123) + t269))
+ + y0 * (x0 * (px0 * (t261 + x1 * (t369 + t368 + t157 + t364 + t363) + py1 * t227
+ + t202
+ + y1
+ * (x1
+ * (px1 * (t362 + t361 + (t360 + t359) * y2)
+ + t358 + t153 + t55 + t339)
+ + t320 + py1 * t294 + t144 + t273 + t272 + t271)
+ + t201 + t196 + (t357 + t20 + t19 + t18) * t1)
+ + py0 * (x1 * t356 + px1 * t252 + t194
+ + y1 * (px1 * t318 + px1 * x1 * t349 + t84 + t83 + t82)
+ + t193 + t192 + px1 * t99 * t1) + x1 * t348
+ + px1 * (t247 + t246 + t244) + t278
+ + y1 * (px1 * (t313 + t54 + t310) + t50 + px1 * x1 * t340)
+ + px1 * t338 * t1)
+ + px0 * (x1 * (t337 + py1 * t332 + t202 + t326 + t196)
+ + t321 + px1 * t29 * t182 + t190
+ + y1 * (x1 * (t320 + py1 * t318 + t313 + t54 + t310)
+ + px1 * (x2 * t308 + x2 * (t305 + t304) * y2) + t303 + t267
+ + t266) + t189 + t188 + (t302 + t10 + t27 + t25) * t1)
+ + py0 * (x1 * (px1 * t301 + t194 + t193 + t192)
+ + t295 + px1 * t29 * t179 + t186
+ + y1 * (x1 * (px1 * t294 + t49 + t48 + t47) + px1 * t290) + t185 + t184
+ + (t286 + t3 + t23 + t22) * t1)
+ + x1 * (px1 * (t285 + t283 + t281) + t278) + t277 + t275 + px1 * t29 * t274
+ + y1 * (x1 * (px1 * (t144 + t273 + t272 + t271) + t269) + px1 * t268)
+ + (t264 + t262) * t1)
+ + px0 * (y1 * (x1 * (t261 + py1 * t252 + t247 + t246 + t244)
+ + t243 + t238 + t237 + t236)
+ + x1 * (t235 + t230 + t229) + px1 * t29 * t174
+ + t1 * (t121 + py1 * t81 + t46 + t45 + t44))
+ + py0 * (y1 * (x1 * (px1 * t227 + t219 + t218 + t217)
+ + px1 * t216 + t212 + t211 + t210)
+ + px1 * t29 * t169 + px1 * x1 * t209 + t1 * (px1 * t113 + t40 + t39 + t38))
+ + y1 * (x1 * (px1 * (t202 + t201 + t196) + t195) + px1 * t191 + t187)
+ + px0 * t161 * t183 + px1 * t29 * t160 + px1 * x1 * t152
+ + t14 * (px0 * (x1 * (t141 + py1 * t129 + t125 + t124 + t123)
+ + t121 + py1 * t113 + px1 * t29 * t109 + t13 + t12 + t11
+ + (t104 + t43 + x1 * (t100 + t26 + t94 + t96) + t95 + t93) * y1)
+ + py0 * (x1 * (px1 * t92 + t84 + t83 + t82)
+ + px1 * t81 + px1 * t29 * t76 + t7 + t6 + t4
+ + (px1 * t71 + t37 + px1 * x1 * t66 + t60 + t59) * y1)
+ + x1 * (px1 * (t58 + t54 + t53) + t50) + px1 * (t46 + t45 + t44) + t41
+ + px1 * t29 * t36 + (px1 * t28 + t24 + px1 * x1 * t21) * y1)
+ + t1 * (px1 * (t13 + t12 + t11) + t8));
+
+ trans->m[0][1] =
+ (t161 * (px0 * (x1 * (t382 + t156 + t346 + t345)
+ + py1 * t733 + t247
+ + y1 * (t694 + x1 * (t358 + t153 + t55 + t339) + py1 * t681
+ + t144 + t282 + t668) + t726 + t283 + t244
+ + px1 * t646 * t1)
+ + py0 * (x1 * (px1 * t601 + t343 + t342 + t341)
+ + px1 * t729 + t219
+ + y1 * (px1 * t692 + px1 * x1 * t76 + t49 + t48 + t47) + t218
+ + t217 + px1 * t66 * t1) + x1 * (px1 * t746 + t375)
+ + px1 * (t727 + t725 + t724) + t195
+ + y1 * (px1 * (t325 + t143 + t691) + t269 + px1 * x1 * t36)
+ + px1 * t21 * t1)
+ + x0 * (py0 * (t29 * t356 + t745 + t212
+ + y1
+ * (x1 * (px1 * t719 + t84 + t83 + t82)
+ + px1 * t698 + t40 + t39 + t38) + px1 * x1 * y2 * t741
+ + t211 + t210 + px1 * t650 * t1)
+ + px0 * (t29 * (t602 + t148 + t364 + t744)
+ + t743 + t722
+ + y1 * (x1 * (t720 + py1 * t708 + t200 + t143 + t706)
+ + t702 + py1 * t684 + t676 + t659 + t675)
+ + x1 * (t607 + px1 * y2 * (x2 * (t362 + t361) + t481 + t609) + t742)
+ + t237 + t721 + px1 * t651 * t1) + t29 * t348 + t739 + t187
+ + y1 * (x1 * (px1 * (t125 + t197 + t245 + t717) + t50)
+ + px1 * (t696 + t13 + t695) + t8) + px1 * x1 * y2 * t606
+ + px1 * t737 * t1)
+ + py0 * (x1 * (px1 * t736 + t186 + t185 + t184)
+ + t29 * (px1 * t733 + t194 + t193 + t192)
+ + y1 * (x1 * (px1 * t712 + t7 + t6 + t4) + t732) + px1 * t537 * t1)
+ + px0 * (x1 * (t568 + t731 + t189 + t730)
+ + t29 * (py1 * t729 + t727 + t726 + t725 + t724)
+ + y1 * (x1 * (t715 + py1 * t707 + t705 + t12 + t704) + t546 + t670 + t669)
+ + px1 * t539 * t1) + x1 * (px1 * t723 + t275)
+ + t29 * (px1 * (t247 + t283 + t244) + t278)
+ + y0 * (x0 * (px0 * (x1 * (t720 + py1 * t719 + t125 + t197 + t245 + t717)
+ + t715 + py1 * t712 + t29 * (t162 + t35 + t34 + t33) + t660
+ + t659 + t658
+ + (t688 + t711 + t431
+ + x1
+ * (px1 * (t305 + t304 + (t710 + t709) * x2)
+ + t100 + t26 + t94 + t96) + t27 + t661)
+ * y1)
+ + py0 * (x1 * (px1 * t708 + t49 + t48 + t47)
+ + px1 * t707 + px1 * t29 * t349 + t40 + t39 + t38
+ + (t286 + t3 + px1 * x1 * t99 + t23 + t22) * y1)
+ + x1 * (px1 * (t200 + t143 + t706) + t269) + px1 * (t705 + t12 + t704)
+ + t8 + px1 * t29 * t340 + (t264 + t262 + px1 * x1 * t338) * y1)
+ + px0 * (x1 * (t702 + py1 * t698 + t696 + t13 + t695)
+ + t29 * (t694 + py1 * t692 + t325 + t143 + t691) + t398 + t392 + t391
+ + (x1 * (t688 + t104 + t43 + t95 + t93)
+ + px1 * (x2 * (t558 + t687) + t5 * t686) + t412 + t665 + t664)
+ * y1)
+ + py0 * (x1 * (px1 * t684 + t7 + t6 + t4) + t682
+ + t29 * (px1 * t681 + t84 + t83 + t82)
+ + (px1 * t411 + x1 * t679) * y1)
+ + x1 * (px1 * (t676 + t659 + t675) + t41) + t672
+ + t29 * (px1 * (t144 + t282 + t668) + t50) + (px1 * t666 + x1 * t663) * y1)
+ + y1 * (x1 * (px1 * (t660 + t659 + t658) + t41) + t655) + px1 * t653 * t1
+ + px0 * t652 * t14)
+ ;
+
+ trans->m[0][2] =
+ (x0 * (px0 * (y1 * (x1 * (t813 + py1 * t807 + t805 + t725 + t803)
+ + t799 + t568 + t731 + t189 + t730)
+ + x1 * (px1 * (x2 * y2 * (t815 + t814) + t142 * t308)
+ + t235 + t230 + t229) + t29 * (t170 + t159 + t155)
+ + t1 * (t769 + py1 * t759 + t753 + t752 + t751))
+ + py0 * (y1 * (x1 * (px1 * t812 + t194 + t193 + t192)
+ + t295 + t186 + t185 + t184)
+ + px1 * x1 * t234 + px1 * t29 * t379
+ + t1 * (px1 * t768 + t7 + t6 + t4))
+ + y1 * (x1 * (px1 * (t773 + t810 + t771) + t278) + t277 + t275)
+ + px1 * x1 * t374 + px1 * t29 * t373
+ + t1 * (px1 * (t765 + t45 + t764) + t41))
+ + y0 * (x0 * (px0 * (x1 * (t813 + py1 * t812 + t773 + t810 + t771)
+ + t495 + t29 * (t809 + t149 + t346 + t774)
+ + y1
+ * (x1
+ * (px1 * (x2 * t386 + t686 * y2)
+ + t598 + t503 + t800)
+ + t798 + py1 * t790 + t787 + t752 + t786)
+ + (t808 + t389 + t95 + t747) * t1)
+ + py0 * (x1 * (px1 * t807 + t219 + t218 + t217)
+ + px1 * t490 + t29 * t380
+ + y1 * (px1 * x1 * t597 + px1 * t797 + t7 + t6 + t4)
+ + t679 * t1)
+ + x1 * (px1 * (t805 + t725 + t803) + t195) + px1 * t802
+ + t29 * t377
+ + y1 * (px1 * x1 * t801 + px1 * (t795 + t46 + t794) + t41)
+ + t663 * t1)
+ + px0 * (x1 * (t799 + t243 + t238 + t237 + t236)
+ + t29 * (t783 + py1 * t777 + t773 + t772 + t771)
+ + y1 * (x1 * (t798 + py1 * t797 + t795 + t46 + t794)
+ + px1 * (t5 * (t481 + t609) + x2 * (t792 + t791) * y2)
+ + t546 + t670 + t669) + (t538 + t648 + t645) * t1)
+ + py0 * (x1 * (t745 + t212 + t211 + t210)
+ + t29 * (px1 * t782 + t219 + t218 + t217)
+ + y1 * (x1 * (px1 * t790 + t40 + t39 + t38) + t682)
+ + px1 * t411 * t1) + x1 * (t739 + t187)
+ + t29 * (px1 * (t727 + t780 + t724) + t195)
+ + y1 * (x1 * (px1 * (t787 + t752 + t786) + t8) + t672)
+ + px1 * t666 * t1)
+ + t161 * (px0 * (y1
+ * (t783 + x1 * (t368 + t157 + t364 + t363) + py1 * t782
+ + t727 + t780 + t724)
+ + x1 * (t383 + t372 + t371) + t500
+ + t1 * (t762 + py1 * t756 + t125 + t272 + t749))
+ + py0 * (y1
+ * (x1 * (px1 * t779 + t352 + t351 + t350)
+ + px1 * t777 + t194 + t193 + t192)
+ + px1 * x1 * t169 + px1 * t209
+ + t1 * (px1 * t761 + t84 + t83 + t82))
+ + y1 * (x1 * (px1 * t775 + t344) + px1 * (t773 + t772 + t771)
+ + t278) + px1 * x1 * t160
+ + px1 * t152 + t1 * (px1 * (t144 + t245 + t760) + t50))
+ + px0 * t770
+ + t14 * (px0 * (x1 * (t769 + py1 * t768 + t765 + t45 + t764)
+ + t29 * (t762 + py1 * t761 + t144 + t245 + t760) + t406
+ + (t412 + x1 * (t711 + t431 + t27 + t661) + t665 + t664)
+ * y1)
+ + py0 * (x1 * (px1 * t759 + t40 + t39 + t38)
+ + t732 + t29 * (px1 * t756 + t49 + t48 + t47)
+ + (px1 * t537 + x1 * (px1 * t755 + t3 + t23 + t22)) * y1)
+ + x1 * (px1 * (t753 + t752 + t751) + t8) + t655
+ + t29 * (px1 * (t125 + t272 + t749) + t269)
+ + (x1 * (px1 * t748 + t262) + px1 * t653) * y1));
+
+ trans->m[1][0] = (x0 * (py0 * (x1 * (t516 + py1 * (y2 * (t631 + t806) + t142 * t933) + t372
+ + t371)
+ + y1 * (px1 * t929 + x1 * (t514 + t918 + t157 + t364 + t363) + t908
+ + t893 + t725 + t892) + t500 + t151
+ + t1 * (px1 * t855 + t845 + t325 + t125 + t835) + t146)
+ + px0 * (y1 * (x1 * t932 + py1 * t904 + t872 + t871 + t870)
+ + py1 * x1 * t515 + py1 * t638
+ + t1 * (py1 * t844 + t833 + t832 + t831))
+ + y1 * (x1 * t931 + t863 + py1 * (t247 + t810 + t244)) + py1 * t374
+ + py1 * x1 * t373 + t1 * (t888 + py1 * (t54 + t282 + t841)))
+ + y0 * (px0 * (x1 * (py1 * t929 + t862 + t861 + t860)
+ + t927 + py1 * t29 * t182 + t858
+ + y1 * (py1 * t896 + x1 * (py1 * t914 + t833 + t832 + t831)) + t857
+ + t856 + (t926 + t817 + t823 + t822) * t1)
+ + x0 * (px0 * (x1 * t925 + py1 * t878 + t862
+ + y1
+ * (py1 * t902 + py1 * x1 * t916 + t853 + t852
+ + t851) + t861 + t860
+ + py1 * t693 * t1)
+ + py0 * (x1 * (t921 + t918 + t156 + t346 + t345)
+ + t883 + px1 * t875 + t247
+ + y1 * (x1 * (t917 + py1 * (t328 + t88 + (t915 + t718) * y2)
+ + t153 + t55 + t339)
+ + t899 + px1 * t914 + t322 + t143 + t245 + t887) + t772
+ + t244 + (t647 + t20 + t19 + t18) * t1) + x1 * t913 + t891
+ + py1 * (t202 + t780 + t196)
+ + y1 * (py1 * (t200 + t125 + t898) + t834 + py1 * x1 * t340)
+ + py1 * t338 * t1)
+ + py0 * (x1 * (t908 + px1 * t904 + t247 + t810 + t244)
+ + t903 + py1 * t29 * t179 + t722
+ + y1 * (x1 * (px1 * t902 + t899 + t200 + t125 + t898)
+ + t897 + py1 * (x2 * t894 + x2 * (t86 + t628) * y2) + t267
+ + t266) + t237 + t721 + (t593 + t389 + t95 + t747) * t1)
+ + x1 * (py1 * (t893 + t725 + t892) + t891) + t890 + t889 + py1 * t29 * t274
+ + y1 * (x1 * (t888 + py1 * (t322 + t143 + t245 + t887)) + py1 * t268)
+ + (t885 + t884) * t1)
+ + py0 * (y1 * (x1 * (t883 + px1 * t878 + t202 + t780 + t196)
+ + t641 + t731 + t189 + t730)
+ + x1 * (t639 + t230 + t229) + py1 * t29 * t169
+ + t1 * (t840 + px1 * t850 + t13 + t752 + t825))
+ + px0 * (y1 * (x1 * (py1 * t875 + t872 + t871 + t870)
+ + py1 * t869 + t866 + t865 + t864)
+ + py1 * x1 * t499 + py1 * t29 * t174
+ + t1 * (py1 * t838 + t829 + t828 + t827))
+ + y1 * (x1 * (t863 + py1 * (t247 + t772 + t244)) + t859 + py1 * t723)
+ + py0 * t161 * t183 + py1 * t29 * t160 + py1 * x1 * t152
+ + t14 * (px0 * (x1 * (py1 * t855 + t853 + t852 + t851)
+ + py1 * t850 + py1 * t29 * t109 + t820 + t819 + t818
+ + (py1 * t592 + t826 + py1 * x1 * t646 + t847 + t846) * y1)
+ + py0 * (x1 * (t845 + px1 * t844 + t54 + t282 + t841)
+ + t840 + px1 * t838 + py1 * t29 * t76 + t46 + t659 + t816
+ + (t421 + t431 + x1 * (t836 + t26 + t94 + t96) + t27 + t661) * y1)
+ + x1 * (py1 * (t325 + t125 + t835) + t834) + t830
+ + py1 * (t13 + t752 + t825) + py1 * t29 * t36
+ + (t824 + py1 * t748 + py1 * x1 * t21) * y1)
+ + t1 * (t821 + py1 * (t46 + t659 + t816)))
+ ;
+
+ trans->m[1][1] = (t161 * (px0 * (x1 * (py1 * t603 + t911 + t910 + t909)
+ + py1 * t980 + t872
+ + y1 * (py1 * t944 + py1 * x1 * t109 + t833 + t832 + t831) + t871
+ + t870 + py1 * t646 * t1)
+ + py0 * (x1 * (t514 + t157 + t364 + t363)
+ + px1 * t974 + t202
+ + y1 * (x1 * (t917 + t153 + t55 + t339)
+ + t943 + px1 * t955 + t143 + t124 + t938) + t978 + t725
+ + t196 + py1 * t66 * t1) + x1 * (t930 + py1 * t775) + t863
+ + py1 * (t773 + t283 + t771)
+ + y1 * (py1 * (t58 + t144 + t942) + t888 + py1 * x1 * t36)
+ + py1 * t21 * t1)
+ + x0 * (py0 * (t29 * (t604 + t149 + t346 + t774)
+ + t984 + t190
+ + y1 * (x1 * (px1 * t972 + t970 + t313 + t144 + t960)
+ + px1 * t958 + t950 + t787 + t12 + t939)
+ + x1 * (t607 + t983 + py1 * y2 * (x2 * (t328 + t88) + t293 + t327))
+ + t189 + t188 + py1 * t650 * t1)
+ + px0 * (t29 * t925 + t982 + t866
+ + y1
+ * (x1 * (py1 * t969 + t853 + t852 + t851)
+ + py1 * t947 + t829 + t828 + t827)
+ + py1 * x1 * y2 * t334 + t865 + t864 + py1 * t651 * t1)
+ + t29 * t913 + t859 + t981
+ + y1 * (x1 * (t834 + py1 * (t633 + t54 + t272 + t968))
+ + py1 * (t946 + t46 + t945) + t821) + py1 * x1 * y2 * t606
+ + py1 * t737 * t1)
+ + py0 * (x1 * (t573 + t238 + t237 + t236)
+ + t29 * (px1 * t980 + t773 + t978 + t283 + t771)
+ + y1 * (x1 * (t965 + px1 * t971 + t765 + t659 + t959) + t550 + t670 + t669)
+ + py1 * t537 * t1)
+ + px0 * (x1 * (py1 * t977 + t858 + t857 + t856)
+ + t29 * (py1 * t974 + t862 + t861 + t860)
+ + y1 * (x1 * (py1 * t966 + t820 + t819 + t818) + t973) + py1 * t539 * t1)
+ + x1 * (t890 + py1 * t191) + t29 * (t891 + py1 * (t202 + t725 + t196))
+ + y0 * (x0 * (px0 * (x1 * (py1 * t972 + t833 + t832 + t831)
+ + py1 * t971 + py1 * t29 * t916 + t829 + t828 + t827
+ + (t926 + t817 + py1 * x1 * t693 + t823 + t822) * y1)
+ + py0 * (x1 * (t970 + px1 * t969 + t633 + t54 + t272 + t968)
+ + px1 * t966 + t965 + t29 * (t163 + t35 + t34 + t33) + t753 + t12
+ + t935
+ + (t962 + t941 + t43
+ + x1
+ * (t836 + py1 * (t86 + t628 + (t961 + t291) * x2)
+ + t26 + t94 + t96) + t95 + t93)
+ * y1) + x1 * (py1 * (t313 + t144 + t960) + t888) + t821
+ + py1 * (t765 + t659 + t959) + py1 * t29 * t340
+ + (t885 + t884 + py1 * x1 * t338) * y1)
+ + px0 * (x1 * (py1 * t958 + t820 + t819 + t818)
+ + t956 + t29 * (py1 * t955 + t853 + t852 + t851)
+ + (py1 * t415 + x1 * t953) * y1)
+ + py0 * (x1 * (t950 + px1 * t947 + t946 + t46 + t945)
+ + t29 * (px1 * t944 + t943 + t58 + t144 + t942) + t406 + t392 + t391
+ + (x1 * (t421 + t941 + t431 + t27 + t661)
+ + t416 + py1 * (x2 * (t554 + t796) + t5 * t940) + t665 + t664)
+ * y1) + x1 * (py1 * (t787 + t12 + t939) + t830)
+ + t29 * (t834 + py1 * (t143 + t124 + t938)) + t937
+ + (x1 * t936 + py1 * t666) * y1)
+ + y1 * (x1 * (py1 * (t753 + t12 + t935) + t830) + t934) + py1 * t653 * t1
+ + py0 * t652 * t14)
+ ;
+
+ trans->m[1][2] = (y0 * (x0 * (px0 * (x1 * (py1 * t1016 + t872 + t871 + t870)
+ + py1 * t494 + t29 * t932
+ + y1
+ * (py1 * t1025 + py1 * x1 * t599 + t820 + t819
+ + t818) + t953 * t1)
+ + py0 * (x1 * (t1015 + px1 * t1009 + t727 + t326 + t724)
+ + t29 * (t1028 + t148 + t364 + t744) + t491
+ + y1
+ * (x1
+ * (t600 + py1 * (x2 * t933 + t940 * y2) + t503
+ + t800)
+ + px1 * t1020 + t1026 + t676 + t45 + t1017)
+ + (t1027 + t10 + t27 + t25) * t1)
+ + x1 * (py1 * (t1014 + t283 + t1012) + t863) + t29 * t931
+ + py1 * t802
+ + y1 * (py1 * x1 * t801 + py1 * (t1024 + t13 + t1023) + t830)
+ + t936 * t1)
+ + py0 * (t29 * (t1007 + px1 * t1002 + t727 + t201 + t724)
+ + x1 * (t1011 + t641 + t731 + t189 + t730)
+ + y1 * (x1 * (t1026 + px1 * t1025 + t1024 + t13 + t1023)
+ + t550
+ + py1
+ * (t5 * (t293 + t327) + x2 * (t1021 + t697) * y2)
+ + t670 + t669) + (t540 + t648 + t645) * t1)
+ + px0 * (x1 * (t982 + t866 + t865 + t864)
+ + t29 * (py1 * t1006 + t872 + t871 + t870)
+ + y1 * (x1 * (py1 * t1020 + t829 + t828 + t827) + t956)
+ + py1 * t415 * t1) + x1 * (t859 + t981)
+ + t29 * (t863 + py1 * (t773 + t246 + t771))
+ + y1 * (x1 * (py1 * (t676 + t45 + t1017) + t821) + t937)
+ + py1 * t666 * t1)
+ + x0 * (py0 * (y1 * (x1 * (px1 * t1016 + t1015 + t1014 + t283 + t1012)
+ + t1011 + t573 + t238 + t237 + t236)
+ + x1 * (t639
+ + py1 * (x2 * y2 * (t1010 + t300) + t142 * t894)
+ + t230 + t229) + t29 * (t175 + t159 + t155)
+ + t1 * (px1 * t1000 + t994 + t660 + t45 + t986))
+ + px0 * (y1 * (x1 * (py1 * t1009 + t862 + t861 + t860)
+ + t927 + t858 + t857 + t856)
+ + py1 * t29 * t515 + py1 * x1 * t638
+ + t1 * (py1 * t993 + t820 + t819 + t818))
+ + y1 * (x1 * (t891 + py1 * (t727 + t326 + t724)) + t890 + t889)
+ + py1 * x1 * t374 + py1 * t29 * t373
+ + t1 * (t830 + py1 * (t705 + t752 + t990)))
+ + t161 * (py0 * (x1 * (t516 + t372 + t371)
+ + y1
+ * (x1 * (t921 + t156 + t346 + t345)
+ + t1007 + px1 * t1006 + t773 + t246 + t771) + t381
+ + t1 * (t989 + px1 * t997 + t54 + t245 + t985))
+ + px0 * (y1
+ * (x1 * (py1 * t1004 + t924 + t923 + t922)
+ + py1 * t1002 + t862 + t861 + t860)
+ + py1 * t499 + py1 * x1 * t174
+ + t1 * (py1 * t988 + t853 + t852 + t851))
+ + y1 * (x1 * (t912 + py1 * t746) + t891
+ + py1 * (t727 + t201 + t724))
+ + py1 * x1 * t160 + py1 * t152
+ + t1 * (t834 + py1 * (t143 + t272 + t987))) + py0 * t770
+ + t14 * (px0 * (x1 * (py1 * t1000 + t829 + t828 + t827)
+ + t973 + t29 * (py1 * t997 + t833 + t832 + t831)
+ + (py1 * t539 + x1 * (py1 * t996 + t817 + t823 + t822))
+ * y1)
+ + py0 * (x1 * (t994 + px1 * t993 + t705 + t752 + t990)
+ + t29 * (t989 + px1 * t988 + t143 + t272 + t987) + t398
+ + (t416 + x1 * (t962 + t43 + t95 + t93) + t665 + t664)
+ * y1) + x1 * (py1 * (t660 + t45 + t986) + t821)
+ + t29 * (t888 + py1 * (t54 + t245 + t985)) + t934
+ + (x1 * (t885 + py1 * t28) + py1 * t653) * y1));
+
+ trans->m[2][0] = (x0 * (px0 * (y1 * (x1 * t617 + t586 + t877 + t1008 + t876)
+ + x1 * t515 + t637 + t1 * (t475 + t136 + t620 + t1036) + t636)
+ + py0 * (y1 * (t579 + x1 * t627 + t251 + t811 + t248)
+ + x1 * t379 + t233 + t1 * (t455 + t87 + t298 + t1035) + t232)
+ + x1 * (t516 + t383 + y2 * (t804 + t1013) + t142 * t595)
+ + y1 * (px1 * (t1047 + t979 + t1046)
+ + x1 * (t921 + t368 + t157 + t156 + t1048)
+ + py1 * (t1044 + t728 + t1043) + t505 + t607 + t502) + t500 + t381
+ + t1 * (px1 * (t611 + t135 + t1038) + py1 * (t330 + t128 + t1037) + t423
+ + t125 + t54 + t1034))
+ + y0 * (x0 * (py0 * (x1 * t1050 + t533 + t226
+ + y1 * (t529 + t224 + x1 * t349 + t128 + t1040)
+ + t781 + t220 + t99 * t1)
+ + px0 * (t528 + x1 * t1049 + t874
+ + y1 * (t517 + x1 * t916 + t520 + t135 + t1041) + t1005
+ + t873 + t693 * t1)
+ + x1 * (t514 + t382 + t157 + t156 + t1048)
+ + px1 * (t877 + t1001 + t876) + py1 * (t251 + t776 + t248) + t608
+ + y1 * (x1 * (t917 + t358 + t56 + t323 + (t716 + t967) * y2)
+ + px1 * (t118 + t609 + t471 + t1045)
+ + py1 * (t204 + t327 + t249 + t1042) + t503 + t144 + t143
+ + t1039) + t504 + t605 + (t647 + t357) * t1)
+ + px0 * (x1 * (t528 + t1047 + t979 + t1046)
+ + t643 + t29 * t182 + t571
+ + y1 * (x1 * (t475 + t118 + t609 + t471 + t1045) + t701 + t895)
+ + t570 + t569 + (t468 + t441 + t466 + t951) * t1)
+ + py0 * (x1 * (t533 + t1044 + t728 + t1043)
+ + t642 + t29 * t179 + t566
+ + y1 * (x1 * (t455 + t204 + t327 + t249 + t1042) + t289 + t288)
+ + t214 + t565 + (t436 + t450 + t69 + t677) * t1)
+ + x1 * (px1 * (t877 + t1008 + t876) + py1 * (t251 + t811 + t248) + t505
+ + t607 + t502) + t984 + t743
+ + t29 * t274
+ + y1 * (x1 * (px1 * (t520 + t135 + t1041) + py1 * (t224 + t128 + t1040)
+ + t503 + t144 + t143 + t1039)
+ + t897 + t303 + x2 * t634 + x2 * (t690 + t52) * y2)
+ + (t1027 + t808) * t1)
+ + py0 * (y1 * (x1 * (t579 + t251 + t776 + t248) + t581 + t735 + t240 + t734)
+ + t29 * t169 + x1 * t209 + t1 * (t461 + t80 + t683 + t1032))
+ + px0 * (y1 * (x1 * (t586 + t877 + t1001 + t876) + t591 + t976 + t588 + t975)
+ + x1 * t499 + t29 * t174 + t1 * (t484 + t849 + t957 + t1033))
+ + y1 * (x1 * (px1 * (t874 + t1005 + t873) + py1 * (t226 + t781 + t220) + t608
+ + t504 + t605)
+ + t573 + t568) + t161 * t183 + x1 * (t639 + t235) + t29 * t160
+ + t14 * (px0 * (x1 * (t517 + t611 + t135 + t1038)
+ + t615 + t29 * t109 + t560 + t443 + t1031
+ + (t399 + t613 + x1 * t646 + t418 + t995) * y1)
+ + py0 * (x1 * (t529 + t330 + t128 + t1037)
+ + t625 + t29 * t76 + t112 + t438 + t1030
+ + (t623 + t393 + t102 + x1 * t66 + t754) * y1)
+ + x1 * (px1 * (t136 + t620 + t1036) + py1 * (t87 + t298 + t1035) + t423
+ + t125 + t54 + t1034)
+ + px1 * (t849 + t957 + t1033) + py1 * (t80 + t683 + t1032) + t434
+ + t29 * t36 + t1029 + (t962 + t711 + x1 * (t836 + t100)) * y1)
+ + t1 * (px1 * (t560 + t443 + t1031) + py1 * (t112 + t438 + t1030) + t434
+ + t1029))
+ ;
+
+ trans->m[2][1] = (t161 * (px0 * (x1 * (t616 + t180 + t512 + t1003)
+ + t586 + t510 + y1 * (t475 + t854 + x1 * t109 + t117 + t1062)
+ + t621 + t508 + t646 * t1)
+ + py0 * (t579 + x1 * (t177 + t626 + t354 + t778) + t507
+ + y1 * (t455 + x1 * t76 + t91 + t203 + t1061) + t299
+ + t506 + t66 * t1) + x1 * (t921 + t368)
+ + px1 * (t874 + t979 + t873) + py1 * (t226 + t728 + t220)
+ + y1 * (x1 * (t917 + t358) + px1 * (t118 + t843 + t1063)
+ + py1 * (t204 + t127 + t1065) + t423 + t144
+ + t143 + t1060) + t504 + t21 * t1)
+ + x0 * (py0 * (t29 * t1050 + t581 + t241
+ + y1
+ * (x1 * (t529 + t87 + t577 + t292 + t1070)
+ + t461 + t1057 + t80 + t1056) + x1 * y2 * t741 + t240
+ + t239 + t650 * t1)
+ + px0 * (t591 + t29 * t1049 + t589
+ + y1 * (x1 * (t517 + t136 + t306 + t428 + t1071)
+ + t484 + t1059 + t849 + t1058) + x1 * y2 * t334 + t588
+ + t587 + t651 * t1) + t29 * (t1028 + t809) + t903 + t321
+ + y1 * (x1 * (px1 * (t901 + t117 + t1072) + py1 * (t317 + t203 + t1073)
+ + t503 + t125 + t54 + t1069)
+ + px1 * (t1019 + t837 + t1064) + py1 * (t789 + t111 + t1066) + t267
+ + t433 + t1055)
+ + x1 * (y2 * (x2 * (t56 + t323) + t322 + t273) + t983 + t742) + t737 * t1)
+ + py0 * (x1 * (t642 + t215 + t214 + t213) + t29 * (t533 + t226 + t728 + t220)
+ + y1
+ * (x1 * (t625 + t758 + t111 + t1067)
+ + t396 + t395) + t537 * t1)
+ + px0 * (x1 * (t643 + t868 + t570 + t867) + t29 * (t528 + t874 + t979 + t873)
+ + y1
+ * (x1 * (t615 + t999 + t837 + t1068)
+ + t404 + t402) + t539 * t1)
+ + x1 * (t641 + t243)
+ + t29 * (px1 * (t510 + t621 + t508) + py1 * (t507 + t299 + t506) + t504)
+ + y0 * (x0 * (py0 * (x1 * (t455 + t317 + t203 + t1073)
+ + t461 + t29 * t349 + t767 + t683 + t1052
+ + (t436 + t450 + x1 * t99 + t69 + t677) * y1)
+ + px0 * (x1 * (t475 + t901 + t117 + t1072)
+ + t484 + t29 * t916 + t992 + t957 + t1053
+ + (t468 + t441 + t466 + x1 * t693 + t951) * y1)
+ + x1 * (px1 * (t136 + t306 + t428 + t1071)
+ + py1 * (t87 + t577 + t292 + t1070) + t503 + t125 + t54 + t1069)
+ + px1 * (t999 + t837 + t1068) + py1 * (t758 + t111 + t1067)
+ + t29 * (t163 + t162) + t434 + t553 + t1051
+ + (t421 + t104 + t431 + t43
+ + x1 * (t836 + t100 + t690 + t52 + (t270 + t886) * x2)
+ + t1054)
+ * y1)
+ + py0 * (x1 * (t625 + t789 + t111 + t1066)
+ + t29 * (t529 + t204 + t127 + t1065) + t544 + t543
+ + (x1 * t624 + t410 + t409) * y1)
+ + px0 * (x1 * (t615 + t1019 + t837 + t1064)
+ + t29 * (t517 + t118 + t843 + t1063) + t548 + t547
+ + (x1 * t614 + t414 + t413) * y1)
+ + t29 * (px1 * (t854 + t117 + t1062) + py1 * (t91 + t203 + t1061) + t423
+ + t144 + t143 + t1060)
+ + x1 * (px1 * (t1059 + t849 + t1058) + py1 * (t1057 + t80 + t1056) + t267
+ + t433 + t1055) + t406 + t398
+ + (t416 + x1 * (t962 + t711 + t431 + t43 + t1054) + t412
+ + x2 * (t793 + t1022) + t5 * t594)
+ * y1)
+ + y1 * (x1 * (px1 * (t992 + t957 + t1053) + py1 * (t767 + t683 + t1052) + t434
+ + t553 + t1051)
+ + t550 + t546) + t653 * t1 + t652 * t14)
+ ;
+ trans->m[2][2] = t644;
+}
+
+static void
+print_trans (const char *header, struct pixman_f_transform *trans)
+{
+ int i, j;
+ double max;
+
+ max = 0;
+
+ printf ("%s\n", header);
+
+ for (i = 0; i < 3; ++i)
+ {
+ for (j = 0; j < 3; ++j)
+ {
+ double a = fabs (trans->m[i][j]);
+
+ if (a > max)
+ max = a;
+ }
+ }
+
+ if (max == 0.0)
+ max = 1.0;
+
+ for (i = 0; i < 3; ++i)
+ {
+ printf ("{ ");
+ for (j = 0; j < 3; ++j)
+ {
+ printf ("D2F (%.5f)%s", 16384 * (trans->m[i][j] / max), j == 2 ? "" : ", ");
+ }
+
+ printf ("},\n");
+ }
+}
+
+int
+main ()
+{
+ struct pixman_f_transform t;
+
+#if 0
+ quad_to_quad (75, 200,
+ 325, 200,
+ 450, 335,
+ -50, 335,
+
+ 0, 0,
+ 400, 0,
+ 400, 400,
+ 0, 400,
+
+ &t);
+#endif
+ quad_to_quad (
+ 1, 0,
+ 1, 2,
+ 2, 2,
+ 2, 0,
+
+ 1, 0,
+ 1, 112,
+ 2, 2,
+ 2, 0,
+
+ &t);
+
+ print_trans ("0->0", &t);
+
+ return 0;
+}
diff --git a/src/pixman/demos/radial-test.c b/src/pixman/demos/radial-test.c
new file mode 100644
index 0000000..08a367c
--- /dev/null
+++ b/src/pixman/demos/radial-test.c
@@ -0,0 +1,208 @@
+#include "../test/utils.h"
+#include "gtk-utils.h"
+
+#define NUM_GRADIENTS 9
+#define NUM_STOPS 3
+#define NUM_REPEAT 4
+#define SIZE 128
+#define WIDTH (SIZE * NUM_GRADIENTS)
+#define HEIGHT (SIZE * NUM_REPEAT)
+
+/*
+ * We want to test all the possible relative positions of the start
+ * and end circle:
+ *
+ * - The start circle can be smaller/equal/bigger than the end
+ * circle. A radial gradient can be classified in one of these
+ * three cases depending on the sign of dr.
+ *
+ * - The smaller circle can be completely inside/internally
+ * tangent/outside (at least in part) of the bigger circle. This
+ * classification is the same as the one which can be computed by
+ * examining the sign of a = (dx^2 + dy^2 - dr^2).
+ *
+ * - If the two circles have the same size, neither can be inside or
+ * internally tangent
+ *
+ * This test draws radial gradients whose circles always have the same
+ * centers (0, 0) and (1, 0), but with different radiuses. From left
+ * to right:
+ *
+ * - Degenerate start circle completely inside the end circle
+ * 0.00 -> 1.75; dr = 1.75 > 0; a = 1 - 1.75^2 < 0
+ *
+ * - Small start circle completely inside the end circle
+ * 0.25 -> 1.75; dr = 1.5 > 0; a = 1 - 1.50^2 < 0
+ *
+ * - Small start circle internally tangent to the end circle
+ * 0.50 -> 1.50; dr = 1.0 > 0; a = 1 - 1.00^2 = 0
+ *
+ * - Small start circle outside of the end circle
+ * 0.50 -> 1.00; dr = 0.5 > 0; a = 1 - 0.50^2 > 0
+ *
+ * - Start circle with the same size as the end circle
+ * 1.00 -> 1.00; dr = 0.0 = 0; a = 1 - 0.00^2 > 0
+ *
+ * - Small end circle outside of the start circle
+ * 1.00 -> 0.50; dr = -0.5 > 0; a = 1 - 0.50^2 > 0
+ *
+ * - Small end circle internally tangent to the start circle
+ * 1.50 -> 0.50; dr = -1.0 > 0; a = 1 - 1.00^2 = 0
+ *
+ * - Small end circle completely inside the start circle
+ * 1.75 -> 0.25; dr = -1.5 > 0; a = 1 - 1.50^2 < 0
+ *
+ * - Degenerate end circle completely inside the start circle
+ * 0.00 -> 1.75; dr = 1.75 > 0; a = 1 - 1.75^2 < 0
+ *
+ */
+
+const static double radiuses[NUM_GRADIENTS] = {
+ 0.00,
+ 0.25,
+ 0.50,
+ 0.50,
+ 1.00,
+ 1.00,
+ 1.50,
+ 1.75,
+ 1.75
+};
+
+#define double_to_color(x) \
+ (((uint32_t) ((x)*65536)) - (((uint32_t) ((x)*65536)) >> 16))
+
+#define PIXMAN_STOP(offset,r,g,b,a) \
+ { pixman_double_to_fixed (offset), \
+ { \
+ double_to_color (r), \
+ double_to_color (g), \
+ double_to_color (b), \
+ double_to_color (a) \
+ } \
+ }
+
+static const pixman_gradient_stop_t stops[NUM_STOPS] = {
+ PIXMAN_STOP (0.0, 1, 0, 0, 0.75),
+ PIXMAN_STOP (0.70710678, 0, 1, 0, 0),
+ PIXMAN_STOP (1.0, 0, 0, 1, 1)
+};
+
+static pixman_image_t *
+create_radial (int index)
+{
+ pixman_point_fixed_t p0, p1;
+ pixman_fixed_t r0, r1;
+ double x0, x1, radius0, radius1, left, right, center;
+
+ x0 = 0;
+ x1 = 1;
+ radius0 = radiuses[index];
+ radius1 = radiuses[NUM_GRADIENTS - index - 1];
+
+ /* center the gradient */
+ left = MIN (x0 - radius0, x1 - radius1);
+ right = MAX (x0 + radius0, x1 + radius1);
+ center = (left + right) * 0.5;
+ x0 -= center;
+ x1 -= center;
+
+ /* scale to make it fit within a 1x1 rect centered in (0,0) */
+ x0 *= 0.25;
+ x1 *= 0.25;
+ radius0 *= 0.25;
+ radius1 *= 0.25;
+
+ p0.x = pixman_double_to_fixed (x0);
+ p0.y = pixman_double_to_fixed (0);
+
+ p1.x = pixman_double_to_fixed (x1);
+ p1.y = pixman_double_to_fixed (0);
+
+ r0 = pixman_double_to_fixed (radius0);
+ r1 = pixman_double_to_fixed (radius1);
+
+ return pixman_image_create_radial_gradient (&p0, &p1,
+ r0, r1,
+ stops, NUM_STOPS);
+}
+
+static const pixman_repeat_t repeat[NUM_REPEAT] = {
+ PIXMAN_REPEAT_NONE,
+ PIXMAN_REPEAT_NORMAL,
+ PIXMAN_REPEAT_REFLECT,
+ PIXMAN_REPEAT_PAD
+};
+
+int
+main (int argc, char **argv)
+{
+ pixman_transform_t transform;
+ pixman_image_t *src_img, *dest_img;
+ int i, j;
+
+ enable_divbyzero_exceptions ();
+
+ dest_img = pixman_image_create_bits (PIXMAN_a8r8g8b8,
+ WIDTH, HEIGHT,
+ NULL, 0);
+
+ draw_checkerboard (dest_img, 25, 0xffaaaaaa, 0xffbbbbbb);
+
+ pixman_transform_init_identity (&transform);
+
+ /*
+ * The create_radial() function returns gradients centered in the
+ * origin and whose interesting part fits a 1x1 square. We want to
+ * paint these gradients on a SIZExSIZE square and to make things
+ * easier we want the origin in the top-left corner of the square
+ * we want to see.
+ */
+ pixman_transform_translate (NULL, &transform,
+ pixman_double_to_fixed (0.5),
+ pixman_double_to_fixed (0.5));
+
+ pixman_transform_scale (NULL, &transform,
+ pixman_double_to_fixed (SIZE),
+ pixman_double_to_fixed (SIZE));
+
+ /*
+ * Gradients are evaluated at the center of each pixel, so we need
+ * to translate by half a pixel to trigger some interesting
+ * cornercases. In particular, the original implementation of PDF
+ * radial gradients tried to divide by 0 when using this transform
+ * on the "tangent circles" cases.
+ */
+ pixman_transform_translate (NULL, &transform,
+ pixman_double_to_fixed (0.5),
+ pixman_double_to_fixed (0.5));
+
+ for (i = 0; i < NUM_GRADIENTS; i++)
+ {
+ src_img = create_radial (i);
+ pixman_image_set_transform (src_img, &transform);
+
+ for (j = 0; j < NUM_REPEAT; j++)
+ {
+ pixman_image_set_repeat (src_img, repeat[j]);
+
+ pixman_image_composite32 (PIXMAN_OP_OVER,
+ src_img,
+ NULL,
+ dest_img,
+ 0, 0,
+ 0, 0,
+ i * SIZE, j * SIZE,
+ SIZE, SIZE);
+
+ }
+
+ pixman_image_unref (src_img);
+ }
+
+ show_image (dest_img);
+
+ pixman_image_unref (dest_img);
+
+ return 0;
+}
diff --git a/src/pixman/demos/scale.c b/src/pixman/demos/scale.c
new file mode 100644
index 0000000..d00307e
--- /dev/null
+++ b/src/pixman/demos/scale.c
@@ -0,0 +1,436 @@
+/*
+ * Copyright 2012, Red Hat, Inc.
+ * Copyright 2012, Soren Sandmann
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the next
+ * paragraph) shall be included in all copies or substantial portions of the
+ * Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ * DEALINGS IN THE SOFTWARE.
+ *
+ * Author: Soren Sandmann <soren.sandmann@gmail.com>
+ */
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+#include <math.h>
+#include <gtk/gtk.h>
+#include <pixman.h>
+#include <stdlib.h>
+#include "gtk-utils.h"
+
+typedef struct
+{
+ GtkBuilder * builder;
+ pixman_image_t * original;
+ GtkAdjustment * scale_x_adjustment;
+ GtkAdjustment * scale_y_adjustment;
+ GtkAdjustment * rotate_adjustment;
+ GtkAdjustment * subsample_adjustment;
+ int scaled_width;
+ int scaled_height;
+} app_t;
+
+static GtkWidget *
+get_widget (app_t *app, const char *name)
+{
+ GtkWidget *widget = GTK_WIDGET (gtk_builder_get_object (app->builder, name));
+
+ if (!widget)
+ g_error ("Widget %s not found\n", name);
+
+ return widget;
+}
+
+static double
+min4 (double a, double b, double c, double d)
+{
+ double m1, m2;
+
+ m1 = MIN (a, b);
+ m2 = MIN (c, d);
+ return MIN (m1, m2);
+}
+
+static double
+max4 (double a, double b, double c, double d)
+{
+ double m1, m2;
+
+ m1 = MAX (a, b);
+ m2 = MAX (c, d);
+ return MAX (m1, m2);
+}
+
+static void
+compute_extents (pixman_f_transform_t *trans, double *sx, double *sy)
+{
+ double min_x, max_x, min_y, max_y;
+ pixman_f_vector_t v[4] =
+ {
+ { { 1, 1, 1 } },
+ { { -1, 1, 1 } },
+ { { -1, -1, 1 } },
+ { { 1, -1, 1 } },
+ };
+
+ pixman_f_transform_point (trans, &v[0]);
+ pixman_f_transform_point (trans, &v[1]);
+ pixman_f_transform_point (trans, &v[2]);
+ pixman_f_transform_point (trans, &v[3]);
+
+ min_x = min4 (v[0].v[0], v[1].v[0], v[2].v[0], v[3].v[0]);
+ max_x = max4 (v[0].v[0], v[1].v[0], v[2].v[0], v[3].v[0]);
+ min_y = min4 (v[0].v[1], v[1].v[1], v[2].v[1], v[3].v[1]);
+ max_y = max4 (v[0].v[1], v[1].v[1], v[2].v[1], v[3].v[1]);
+
+ *sx = (max_x - min_x) / 2.0;
+ *sy = (max_y - min_y) / 2.0;
+}
+
+typedef struct
+{
+ char name [20];
+ int value;
+} named_int_t;
+
+static const named_int_t filters[] =
+{
+ { "Box", PIXMAN_KERNEL_BOX },
+ { "Impulse", PIXMAN_KERNEL_IMPULSE },
+ { "Linear", PIXMAN_KERNEL_LINEAR },
+ { "Cubic", PIXMAN_KERNEL_CUBIC },
+ { "Lanczos2", PIXMAN_KERNEL_LANCZOS2 },
+ { "Lanczos3", PIXMAN_KERNEL_LANCZOS3 },
+ { "Lanczos3 Stretched", PIXMAN_KERNEL_LANCZOS3_STRETCHED },
+ { "Gaussian", PIXMAN_KERNEL_GAUSSIAN },
+};
+
+static const named_int_t repeats[] =
+{
+ { "None", PIXMAN_REPEAT_NONE },
+ { "Normal", PIXMAN_REPEAT_NORMAL },
+ { "Reflect", PIXMAN_REPEAT_REFLECT },
+ { "Pad", PIXMAN_REPEAT_PAD },
+};
+
+static int
+get_value (app_t *app, const named_int_t table[], const char *box_name)
+{
+ GtkComboBox *box = GTK_COMBO_BOX (get_widget (app, box_name));
+
+ return table[gtk_combo_box_get_active (box)].value;
+}
+
+static void
+copy_to_counterpart (app_t *app, GObject *object)
+{
+ static const char *xy_map[] =
+ {
+ "reconstruct_x_combo_box", "reconstruct_y_combo_box",
+ "sample_x_combo_box", "sample_y_combo_box",
+ "scale_x_adjustment", "scale_y_adjustment",
+ };
+ GObject *counterpart = NULL;
+ int i;
+
+ for (i = 0; i < G_N_ELEMENTS (xy_map); i += 2)
+ {
+ GObject *x = gtk_builder_get_object (app->builder, xy_map[i]);
+ GObject *y = gtk_builder_get_object (app->builder, xy_map[i + 1]);
+
+ if (object == x)
+ counterpart = y;
+ if (object == y)
+ counterpart = x;
+ }
+
+ if (!counterpart)
+ return;
+
+ if (GTK_IS_COMBO_BOX (counterpart))
+ {
+ gtk_combo_box_set_active (
+ GTK_COMBO_BOX (counterpart),
+ gtk_combo_box_get_active (
+ GTK_COMBO_BOX (object)));
+ }
+ else if (GTK_IS_ADJUSTMENT (counterpart))
+ {
+ gtk_adjustment_set_value (
+ GTK_ADJUSTMENT (counterpart),
+ gtk_adjustment_get_value (
+ GTK_ADJUSTMENT (object)));
+ }
+}
+
+static double
+to_scale (double v)
+{
+ return pow (1.15, v);
+}
+
+static void
+rescale (GtkWidget *may_be_null, app_t *app)
+{
+ pixman_f_transform_t ftransform;
+ pixman_transform_t transform;
+ double new_width, new_height;
+ double fscale_x, fscale_y;
+ double rotation;
+ pixman_fixed_t *params;
+ int n_params;
+ double sx, sy;
+
+ pixman_f_transform_init_identity (&ftransform);
+
+ if (may_be_null && gtk_toggle_button_get_active (
+ GTK_TOGGLE_BUTTON (get_widget (app, "lock_checkbutton"))))
+ {
+ copy_to_counterpart (app, G_OBJECT (may_be_null));
+ }
+
+ fscale_x = gtk_adjustment_get_value (app->scale_x_adjustment);
+ fscale_y = gtk_adjustment_get_value (app->scale_y_adjustment);
+ rotation = gtk_adjustment_get_value (app->rotate_adjustment);
+
+ fscale_x = to_scale (fscale_x);
+ fscale_y = to_scale (fscale_y);
+
+ new_width = pixman_image_get_width (app->original) * fscale_x;
+ new_height = pixman_image_get_height (app->original) * fscale_y;
+
+ pixman_f_transform_scale (&ftransform, NULL, fscale_x, fscale_y);
+
+ pixman_f_transform_translate (&ftransform, NULL, - new_width / 2.0, - new_height / 2.0);
+
+ rotation = (rotation / 360.0) * 2 * M_PI;
+ pixman_f_transform_rotate (&ftransform, NULL, cos (rotation), sin (rotation));
+
+ pixman_f_transform_translate (&ftransform, NULL, new_width / 2.0, new_height / 2.0);
+
+ pixman_f_transform_invert (&ftransform, &ftransform);
+
+ compute_extents (&ftransform, &sx, &sy);
+
+ pixman_transform_from_pixman_f_transform (&transform, &ftransform);
+ pixman_image_set_transform (app->original, &transform);
+
+ params = pixman_filter_create_separable_convolution (
+ &n_params,
+ sx * 65536.0 + 0.5,
+ sy * 65536.0 + 0.5,
+ get_value (app, filters, "reconstruct_x_combo_box"),
+ get_value (app, filters, "reconstruct_y_combo_box"),
+ get_value (app, filters, "sample_x_combo_box"),
+ get_value (app, filters, "sample_y_combo_box"),
+ gtk_adjustment_get_value (app->subsample_adjustment),
+ gtk_adjustment_get_value (app->subsample_adjustment));
+
+ pixman_image_set_filter (app->original, PIXMAN_FILTER_SEPARABLE_CONVOLUTION, params, n_params);
+
+ pixman_image_set_repeat (
+ app->original, get_value (app, repeats, "repeat_combo_box"));
+
+ free (params);
+
+ app->scaled_width = ceil (new_width);
+ app->scaled_height = ceil (new_height);
+
+ gtk_widget_set_size_request (
+ get_widget (app, "drawing_area"), new_width + 0.5, new_height + 0.5);
+
+ gtk_widget_queue_draw (
+ get_widget (app, "drawing_area"));
+}
+
+static gboolean
+on_expose (GtkWidget *da, GdkEvent *event, gpointer data)
+{
+ app_t *app = data;
+ GdkRectangle *area = &event->expose.area;
+ cairo_surface_t *surface;
+ pixman_image_t *tmp;
+ cairo_t *cr;
+ uint32_t *pixels;
+
+ pixels = calloc (1, area->width * area->height * 4);
+ tmp = pixman_image_create_bits (
+ PIXMAN_a8r8g8b8, area->width, area->height, pixels, area->width * 4);
+
+ if (area->x < app->scaled_width && area->y < app->scaled_height)
+ {
+ pixman_image_composite (
+ PIXMAN_OP_SRC,
+ app->original, NULL, tmp,
+ area->x, area->y, 0, 0, 0, 0,
+ app->scaled_width - area->x, app->scaled_height - area->y);
+ }
+
+ surface = cairo_image_surface_create_for_data (
+ (uint8_t *)pixels, CAIRO_FORMAT_ARGB32,
+ area->width, area->height, area->width * 4);
+
+ cr = gdk_cairo_create (da->window);
+
+ cairo_set_source_surface (cr, surface, area->x, area->y);
+
+ cairo_paint (cr);
+
+ cairo_destroy (cr);
+ cairo_surface_destroy (surface);
+ free (pixels);
+ pixman_image_unref (tmp);
+
+ return TRUE;
+}
+
+static void
+set_up_combo_box (app_t *app, const char *box_name,
+ int n_entries, const named_int_t table[])
+{
+ GtkWidget *widget = get_widget (app, box_name);
+ GtkListStore *model;
+ GtkCellRenderer *cell;
+ int i;
+
+ model = gtk_list_store_new (1, G_TYPE_STRING);
+
+ cell = gtk_cell_renderer_text_new ();
+ gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (widget), cell, TRUE);
+ gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (widget), cell,
+ "text", 0,
+ NULL);
+
+ gtk_combo_box_set_model (GTK_COMBO_BOX (widget), GTK_TREE_MODEL (model));
+
+ for (i = 0; i < n_entries; ++i)
+ {
+ const named_int_t *info = &(table[i]);
+ GtkTreeIter iter;
+
+ gtk_list_store_append (model, &iter);
+ gtk_list_store_set (model, &iter, 0, info->name, -1);
+ }
+
+ gtk_combo_box_set_active (GTK_COMBO_BOX (widget), 0);
+
+ g_signal_connect (widget, "changed", G_CALLBACK (rescale), app);
+}
+
+static void
+set_up_filter_box (app_t *app, const char *box_name)
+{
+ set_up_combo_box (app, box_name, G_N_ELEMENTS (filters), filters);
+}
+
+static char *
+format_value (GtkWidget *widget, double value)
+{
+ return g_strdup_printf ("%.4f", to_scale (value));
+}
+
+static app_t *
+app_new (pixman_image_t *original)
+{
+ GtkWidget *widget;
+ app_t *app = g_malloc (sizeof *app);
+ GError *err = NULL;
+
+ app->builder = gtk_builder_new ();
+ app->original = original;
+
+ if (!gtk_builder_add_from_file (app->builder, "scale.ui", &err))
+ g_error ("Could not read file scale.ui: %s", err->message);
+
+ app->scale_x_adjustment =
+ GTK_ADJUSTMENT (gtk_builder_get_object (app->builder, "scale_x_adjustment"));
+ app->scale_y_adjustment =
+ GTK_ADJUSTMENT (gtk_builder_get_object (app->builder, "scale_y_adjustment"));
+ app->rotate_adjustment =
+ GTK_ADJUSTMENT (gtk_builder_get_object (app->builder, "rotate_adjustment"));
+ app->subsample_adjustment =
+ GTK_ADJUSTMENT (gtk_builder_get_object (app->builder, "subsample_adjustment"));
+
+ g_signal_connect (app->scale_x_adjustment, "value_changed", G_CALLBACK (rescale), app);
+ g_signal_connect (app->scale_y_adjustment, "value_changed", G_CALLBACK (rescale), app);
+ g_signal_connect (app->rotate_adjustment, "value_changed", G_CALLBACK (rescale), app);
+ g_signal_connect (app->subsample_adjustment, "value_changed", G_CALLBACK (rescale), app);
+
+ widget = get_widget (app, "scale_x_scale");
+ gtk_scale_add_mark (GTK_SCALE (widget), 0.0, GTK_POS_LEFT, NULL);
+ g_signal_connect (widget, "format_value", G_CALLBACK (format_value), app);
+ widget = get_widget (app, "scale_y_scale");
+ gtk_scale_add_mark (GTK_SCALE (widget), 0.0, GTK_POS_LEFT, NULL);
+ g_signal_connect (widget, "format_value", G_CALLBACK (format_value), app);
+ widget = get_widget (app, "rotate_scale");
+ gtk_scale_add_mark (GTK_SCALE (widget), 0.0, GTK_POS_LEFT, NULL);
+
+ widget = get_widget (app, "drawing_area");
+ g_signal_connect (widget, "expose_event", G_CALLBACK (on_expose), app);
+
+ set_up_filter_box (app, "reconstruct_x_combo_box");
+ set_up_filter_box (app, "reconstruct_y_combo_box");
+ set_up_filter_box (app, "sample_x_combo_box");
+ set_up_filter_box (app, "sample_y_combo_box");
+
+ set_up_combo_box (
+ app, "repeat_combo_box", G_N_ELEMENTS (repeats), repeats);
+
+ g_signal_connect (
+ gtk_builder_get_object (app->builder, "lock_checkbutton"),
+ "toggled", G_CALLBACK (rescale), app);
+
+ rescale (NULL, app);
+
+ return app;
+}
+
+int
+main (int argc, char **argv)
+{
+ GtkWidget *window;
+ pixman_image_t *image;
+ app_t *app;
+
+ gtk_init (&argc, &argv);
+
+ if (argc < 2)
+ {
+ printf ("%s <image file>\n", argv[0]);
+ return -1;
+ }
+
+ if (!(image = pixman_image_from_file (argv[1], PIXMAN_a8r8g8b8)))
+ {
+ printf ("Could not load image \"%s\"\n", argv[1]);
+ return -1;
+ }
+
+ app = app_new (image);
+
+ window = get_widget (app, "main");
+
+ g_signal_connect (window, "delete_event", G_CALLBACK (gtk_main_quit), NULL);
+
+ gtk_window_set_default_size (GTK_WINDOW (window), 1024, 768);
+
+ gtk_widget_show_all (window);
+
+ gtk_main ();
+
+ return 0;
+}
diff --git a/src/pixman/demos/scale.ui b/src/pixman/demos/scale.ui
new file mode 100644
index 0000000..ee985dd
--- /dev/null
+++ b/src/pixman/demos/scale.ui
@@ -0,0 +1,332 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<interface>
+ <!-- interface-requires gtk+ 2.12 -->
+ <!-- interface-naming-policy toplevel-contextual -->
+ <object class="GtkAdjustment" id="rotate_adjustment">
+ <property name="lower">-180</property>
+ <property name="upper">190</property>
+ <property name="step_increment">1</property>
+ <property name="page_increment">10</property>
+ <property name="page_size">10</property>
+ </object>
+ <object class="GtkAdjustment" id="scale_y_adjustment">
+ <property name="lower">-32</property>
+ <property name="upper">42</property>
+ <property name="step_increment">1</property>
+ <property name="page_increment">10</property>
+ <property name="page_size">10</property>
+ </object>
+ <object class="GtkAdjustment" id="scale_x_adjustment">
+ <property name="lower">-32</property>
+ <property name="upper">42</property>
+ <property name="step_increment">1</property>
+ <property name="page_increment">10</property>
+ <property name="page_size">10</property>
+ </object>
+ <object class="GtkAdjustment" id="subsample_adjustment">
+ <property name="lower">0</property>
+ <property name="upper">12</property>
+ <property name="step_increment">1</property>
+ <property name="page_increment">1</property>
+ <property name="page_size">0</property>
+ <property name="value">4</property>
+ </object>
+ <object class="GtkWindow" id="main">
+ <child>
+ <object class="GtkHBox" id="u">
+ <property name="visible">True</property>
+ <property name="spacing">12</property>
+ <child>
+ <object class="GtkScrolledWindow" id="scrolledwindow1">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="shadow_type">in</property>
+ <child>
+ <object class="GtkViewport" id="viewport1">
+ <property name="visible">True</property>
+ <child>
+ <object class="GtkDrawingArea" id="drawing_area">
+ <property name="visible">True</property>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkVBox" id="box1">
+ <property name="visible">True</property>
+ <property name="spacing">12</property>
+ <child>
+ <object class="GtkHBox" id="box2">
+ <property name="visible">True</property>
+ <property name="homogeneous">True</property>
+ <child>
+ <object class="GtkVBox" id="box3">
+ <property name="visible">True</property>
+ <property name="spacing">6</property>
+ <child>
+ <object class="GtkLabel" id="label1">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">&lt;b&gt;Scale X&lt;/b&gt;</property>
+ <property name="use_markup">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkVScale" id="scale_x_scale">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="adjustment">scale_x_adjustment</property>
+ <property name="fill_level">32</property>
+ <property name="value_pos">right</property>
+ </object>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkVBox" id="box4">
+ <property name="visible">True</property>
+ <property name="spacing">6</property>
+ <child>
+ <object class="GtkLabel" id="label2">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">&lt;b&gt;Scale Y&lt;/b&gt;</property>
+ <property name="use_markup">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkVScale" id="scale_y_scale">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="adjustment">scale_y_adjustment</property>
+ <property name="fill_level">32</property>
+ <property name="value_pos">right</property>
+ </object>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkVBox" id="box5">
+ <property name="visible">True</property>
+ <property name="spacing">6</property>
+ <child>
+ <object class="GtkLabel" id="label3">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">&lt;b&gt;Rotate&lt;/b&gt;</property>
+ <property name="use_markup">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkVScale" id="rotate_scale">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="adjustment">rotate_adjustment</property>
+ <property name="fill_level">180</property>
+ <property name="value_pos">right</property>
+ </object>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="position">2</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="padding">6</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkVBox" id="box6">
+ <property name="visible">True</property>
+ <child>
+ <object class="GtkCheckButton"
+ id="lock_checkbutton">
+ <property name="label" translatable="yes">Lock X and Y Dimensions</property>
+ <property name="xalign">0.0</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="padding">6</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkTable" id="grid1">
+ <property name="visible">True</property>
+ <property name="column_spacing">8</property>
+ <property name="row_spacing">6</property>
+ <child>
+ <object class="GtkLabel" id="label4">
+ <property name="visible">True</property>
+ <property name="xalign">1</property>
+ <property name="label" translatable="yes">&lt;b&gt;Reconstruct X:&lt;/b&gt;</property>
+ <property name="use_markup">True</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label5">
+ <property name="visible">True</property>
+ <property name="xalign">1</property>
+ <property name="label" translatable="yes">&lt;b&gt;Reconstruct Y:&lt;/b&gt;</property>
+ <property name="use_markup">True</property>
+ </object>
+ <packing>
+ <property name="top_attach">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label6">
+ <property name="visible">True</property>
+ <property name="xalign">1</property>
+ <property name="label" translatable="yes">&lt;b&gt;Sample X:&lt;/b&gt;</property>
+ <property name="use_markup">True</property>
+ </object>
+ <packing>
+ <property name="top_attach">2</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label7">
+ <property name="visible">True</property>
+ <property name="xalign">1</property>
+ <property name="label" translatable="yes">&lt;b&gt;Sample Y:&lt;/b&gt;</property>
+ <property name="use_markup">True</property>
+ </object>
+ <packing>
+ <property name="top_attach">3</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label8">
+ <property name="visible">True</property>
+ <property name="xalign">1</property>
+ <property name="label" translatable="yes">&lt;b&gt;Repeat:&lt;/b&gt;</property>
+ <property name="use_markup">True</property>
+ </object>
+ <packing>
+ <property name="top_attach">4</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label9">
+ <property name="visible">True</property>
+ <property name="xalign">1</property>
+ <property name="label" translatable="yes">&lt;b&gt;Subsample:&lt;/b&gt;</property>
+ <property name="use_markup">True</property>
+ </object>
+ <packing>
+ <property name="top_attach">5</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkComboBox" id="reconstruct_x_combo_box">
+ <property name="visible">True</property>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkComboBox" id="reconstruct_y_combo_box">
+ <property name="visible">True</property>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="top_attach">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkComboBox" id="sample_x_combo_box">
+ <property name="visible">True</property>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="top_attach">2</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkComboBox" id="sample_y_combo_box">
+ <property name="visible">True</property>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="top_attach">3</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkComboBox" id="repeat_combo_box">
+ <property name="visible">True</property>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="top_attach">4</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkSpinButton" id="subsample_spin_button">
+ <property name="visible">True</property>
+ <property name="adjustment">subsample_adjustment</property>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="top_attach">5</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="padding">6</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ </child>
+ </object>
+</interface>
diff --git a/src/pixman/demos/screen-test.c b/src/pixman/demos/screen-test.c
new file mode 100644
index 0000000..e69dba3
--- /dev/null
+++ b/src/pixman/demos/screen-test.c
@@ -0,0 +1,44 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include "pixman.h"
+#include "gtk-utils.h"
+
+int
+main (int argc, char **argv)
+{
+#define WIDTH 40
+#define HEIGHT 40
+
+ uint32_t *src1 = malloc (WIDTH * HEIGHT * 4);
+ uint32_t *src2 = malloc (WIDTH * HEIGHT * 4);
+ uint32_t *src3 = malloc (WIDTH * HEIGHT * 4);
+ uint32_t *dest = malloc (3 * WIDTH * 2 * HEIGHT * 4);
+ pixman_image_t *simg1, *simg2, *simg3, *dimg;
+
+ int i;
+
+ for (i = 0; i < WIDTH * HEIGHT; ++i)
+ {
+ src1[i] = 0x7ff00000;
+ src2[i] = 0x7f00ff00;
+ src3[i] = 0x7f0000ff;
+ }
+
+ for (i = 0; i < 3 * WIDTH * 2 * HEIGHT; ++i)
+ {
+ dest[i] = 0x0;
+ }
+
+ simg1 = pixman_image_create_bits (PIXMAN_a8r8g8b8, WIDTH, HEIGHT, src1, WIDTH * 4);
+ simg2 = pixman_image_create_bits (PIXMAN_a8r8g8b8, WIDTH, HEIGHT, src2, WIDTH * 4);
+ simg3 = pixman_image_create_bits (PIXMAN_a8r8g8b8, WIDTH, HEIGHT, src3, WIDTH * 4);
+ dimg = pixman_image_create_bits (PIXMAN_a8r8g8b8, 3 * WIDTH, 2 * HEIGHT, dest, 3 * WIDTH * 4);
+
+ pixman_image_composite (PIXMAN_OP_SCREEN, simg1, NULL, dimg, 0, 0, 0, 0, WIDTH, HEIGHT / 4, WIDTH, HEIGHT);
+ pixman_image_composite (PIXMAN_OP_SCREEN, simg2, NULL, dimg, 0, 0, 0, 0, (WIDTH/2), HEIGHT / 4 + HEIGHT / 2, WIDTH, HEIGHT);
+ pixman_image_composite (PIXMAN_OP_SCREEN, simg3, NULL, dimg, 0, 0, 0, 0, (4 * WIDTH) / 3, HEIGHT, WIDTH, HEIGHT);
+
+ show_image (dimg);
+
+ return 0;
+}
diff --git a/src/pixman/demos/srgb-test.c b/src/pixman/demos/srgb-test.c
new file mode 100644
index 0000000..681d521
--- /dev/null
+++ b/src/pixman/demos/srgb-test.c
@@ -0,0 +1,87 @@
+#include <math.h>
+
+#include "pixman.h"
+#include "gtk-utils.h"
+
+static uint32_t
+linear_argb_to_premult_argb (float a,
+ float r,
+ float g,
+ float b)
+{
+ r *= a;
+ g *= a;
+ b *= a;
+ return (uint32_t) (a * 255.0f + 0.5f) << 24
+ | (uint32_t) (r * 255.0f + 0.5f) << 16
+ | (uint32_t) (g * 255.0f + 0.5f) << 8
+ | (uint32_t) (b * 255.0f + 0.5f) << 0;
+}
+
+static float
+lin2srgb (float linear)
+{
+ if (linear < 0.0031308f)
+ return linear * 12.92f;
+ else
+ return 1.055f * powf (linear, 1.0f/2.4f) - 0.055f;
+}
+
+static uint32_t
+linear_argb_to_premult_srgb_argb (float a,
+ float r,
+ float g,
+ float b)
+{
+ r = lin2srgb (r * a);
+ g = lin2srgb (g * a);
+ b = lin2srgb (b * a);
+ return (uint32_t) (a * 255.0f + 0.5f) << 24
+ | (uint32_t) (r * 255.0f + 0.5f) << 16
+ | (uint32_t) (g * 255.0f + 0.5f) << 8
+ | (uint32_t) (b * 255.0f + 0.5f) << 0;
+}
+
+int
+main (int argc, char **argv)
+{
+#define WIDTH 400
+#define HEIGHT 200
+ int y, x, p;
+ float alpha;
+
+ uint32_t *dest = malloc (WIDTH * HEIGHT * 4);
+ uint32_t *src1 = malloc (WIDTH * HEIGHT * 4);
+ pixman_image_t *dest_img, *src1_img;
+
+ dest_img = pixman_image_create_bits (PIXMAN_a8r8g8b8_sRGB,
+ WIDTH, HEIGHT,
+ dest,
+ WIDTH * 4);
+ src1_img = pixman_image_create_bits (PIXMAN_a8r8g8b8,
+ WIDTH, HEIGHT,
+ src1,
+ WIDTH * 4);
+
+ for (y = 0; y < HEIGHT; y ++)
+ {
+ p = WIDTH * y;
+ for (x = 0; x < WIDTH; x ++)
+ {
+ alpha = (float) x / WIDTH;
+ src1[p + x] = linear_argb_to_premult_argb (alpha, 1, 0, 1);
+ dest[p + x] = linear_argb_to_premult_srgb_argb (1-alpha, 0, 1, 0);
+ }
+ }
+
+ pixman_image_composite (PIXMAN_OP_ADD, src1_img, NULL, dest_img,
+ 0, 0, 0, 0, 0, 0, WIDTH, HEIGHT);
+ pixman_image_unref (src1_img);
+ free (src1);
+
+ show_image (dest_img);
+ pixman_image_unref (dest_img);
+ free (dest);
+
+ return 0;
+}
diff --git a/src/pixman/demos/srgb-trap-test.c b/src/pixman/demos/srgb-trap-test.c
new file mode 100644
index 0000000..d5ae16a
--- /dev/null
+++ b/src/pixman/demos/srgb-trap-test.c
@@ -0,0 +1,119 @@
+#include <math.h>
+#include "pixman.h"
+#include "gtk-utils.h"
+
+#define F(x) \
+ pixman_double_to_fixed (x)
+
+#define WIDTH 600
+#define HEIGHT 300
+
+static uint16_t
+convert_to_srgb (uint16_t in)
+{
+ double d = in * (1/65535.0);
+ double a = 0.055;
+
+ if (d < 0.0031308)
+ d = 12.92 * d;
+ else
+ d = (1 + a) * pow (d, 1 / 2.4) - a;
+
+ return (d * 65535.0) + 0.5;
+}
+
+static void
+convert_color (pixman_color_t *dest_srgb, pixman_color_t *linear)
+{
+ dest_srgb->alpha = convert_to_srgb (linear->alpha);
+ dest_srgb->red = convert_to_srgb (linear->red);
+ dest_srgb->green = convert_to_srgb (linear->green);
+ dest_srgb->blue = convert_to_srgb (linear->blue);
+}
+
+int
+main (int argc, char **argv)
+{
+ static const pixman_trapezoid_t traps[] =
+ {
+ { F(10.10), F(280.0),
+ { { F(20.0), F(10.10) },
+ { F(5.3), F(280.0) } },
+ { { F(20.3), F(10.10) },
+ { F(5.6), F(280.0) } }
+ },
+ { F(10.10), F(280.0),
+ { { F(40.0), F(10.10) },
+ { F(15.3), F(280.0) } },
+ { { F(41.0), F(10.10) },
+ { F(16.3), F(280.0) } }
+ },
+ { F(10.10), F(280.0),
+ { { F(120.0), F(10.10) },
+ { F(5.3), F(280.0) } },
+ { { F(128.3), F(10.10) },
+ { F(6.6), F(280.0) } }
+ },
+ { F(10.10), F(280.0),
+ { { F(60.0), F(10.10) },
+ { F(25.3), F(280.0) } },
+ { { F(61.0), F(10.10) },
+ { F(26.3), F(280.0) } }
+ },
+ { F(10.10), F(280.0),
+ { { F(90.0), F(10.10) },
+ { F(55.3), F(280.0) } },
+ { { F(93.0), F(10.10) },
+ { F(58.3), F(280.0) } }
+ },
+ { F(130.10), F(150.0),
+ { { F(100.0), F(130.10) },
+ { F(250.3), F(150.0) } },
+ { { F(110.0), F(130.10) },
+ { F(260.3), F(150.0) } }
+ },
+ { F(170.10), F(240.0),
+ { { F(100.0), F(170.10) },
+ { F(120.3), F(240.0) } },
+ { { F(250.0), F(170.10) },
+ { F(250.3), F(240.0) } }
+ },
+ };
+
+ pixman_image_t *src, *dest_srgb, *dest_linear;
+ pixman_color_t bg = { 0x0000, 0x0000, 0x0000, 0xffff };
+ pixman_color_t fg = { 0xffff, 0xffff, 0xffff, 0xffff };
+ pixman_color_t fg_srgb;
+ uint32_t *d;
+
+ d = malloc (WIDTH * HEIGHT * 4);
+
+ dest_srgb = pixman_image_create_bits (
+ PIXMAN_a8r8g8b8_sRGB, WIDTH, HEIGHT, d, WIDTH * 4);
+ dest_linear = pixman_image_create_bits (
+ PIXMAN_a8r8g8b8, WIDTH, HEIGHT, d, WIDTH * 4);
+
+ src = pixman_image_create_solid_fill (&bg);
+ pixman_image_composite32 (PIXMAN_OP_SRC,
+ src, NULL, dest_srgb,
+ 0, 0, 0, 0, 0, 0, WIDTH, HEIGHT);
+
+ src = pixman_image_create_solid_fill (&fg);
+
+ pixman_composite_trapezoids (PIXMAN_OP_OVER,
+ src, dest_srgb, PIXMAN_a8,
+ 0, 0, 10, 10, G_N_ELEMENTS (traps), traps);
+
+ convert_color (&fg_srgb, &fg);
+ src = pixman_image_create_solid_fill (&fg_srgb);
+
+ pixman_composite_trapezoids (PIXMAN_OP_OVER,
+ src, dest_linear, PIXMAN_a8,
+ 0, 0, 310, 10, G_N_ELEMENTS (traps), traps);
+
+ show_image (dest_linear);
+ pixman_image_unref(dest_linear);
+ free(d);
+
+ return 0;
+}
diff --git a/src/pixman/demos/trap-test.c b/src/pixman/demos/trap-test.c
new file mode 100644
index 0000000..19295e7
--- /dev/null
+++ b/src/pixman/demos/trap-test.c
@@ -0,0 +1,49 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include "pixman.h"
+#include "gtk-utils.h"
+
+int
+main (int argc, char **argv)
+{
+#define WIDTH 200
+#define HEIGHT 200
+
+ pixman_image_t *src_img;
+ pixman_image_t *mask_img;
+ pixman_image_t *dest_img;
+ pixman_trap_t trap;
+ pixman_color_t white = { 0x0000, 0xffff, 0x0000, 0xffff };
+ uint32_t *bits = malloc (WIDTH * HEIGHT * 4);
+ uint32_t *mbits = malloc (WIDTH * HEIGHT);
+
+ memset (mbits, 0, WIDTH * HEIGHT);
+ memset (bits, 0xff, WIDTH * HEIGHT * 4);
+
+ trap.top.l = pixman_int_to_fixed (50) + 0x8000;
+ trap.top.r = pixman_int_to_fixed (150) + 0x8000;
+ trap.top.y = pixman_int_to_fixed (30);
+
+ trap.bot.l = pixman_int_to_fixed (50) + 0x8000;
+ trap.bot.r = pixman_int_to_fixed (150) + 0x8000;
+ trap.bot.y = pixman_int_to_fixed (150);
+
+ mask_img = pixman_image_create_bits (PIXMAN_a8, WIDTH, HEIGHT, mbits, WIDTH);
+ src_img = pixman_image_create_solid_fill (&white);
+ dest_img = pixman_image_create_bits (PIXMAN_a8r8g8b8, WIDTH, HEIGHT, bits, WIDTH * 4);
+
+ pixman_add_traps (mask_img, 0, 0, 1, &trap);
+
+ pixman_image_composite (PIXMAN_OP_OVER,
+ src_img, mask_img, dest_img,
+ 0, 0, 0, 0, 0, 0, WIDTH, HEIGHT);
+
+ show_image (dest_img);
+
+ pixman_image_unref (src_img);
+ pixman_image_unref (dest_img);
+ free (bits);
+
+ return 0;
+}
diff --git a/src/pixman/demos/tri-test.c b/src/pixman/demos/tri-test.c
new file mode 100644
index 0000000..a71869a
--- /dev/null
+++ b/src/pixman/demos/tri-test.c
@@ -0,0 +1,48 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include "../test/utils.h"
+#include "gtk-utils.h"
+
+int
+main (int argc, char **argv)
+{
+#define WIDTH 200
+#define HEIGHT 200
+
+#define POINT(x,y) \
+ { pixman_double_to_fixed ((x)), pixman_double_to_fixed ((y)) }
+
+ pixman_image_t *src_img, *dest_img;
+ pixman_triangle_t tris[4] =
+ {
+ { POINT (100, 100), POINT (10, 50), POINT (110, 10) },
+ { POINT (100, 100), POINT (150, 10), POINT (200, 50) },
+ { POINT (100, 100), POINT (10, 170), POINT (90, 175) },
+ { POINT (100, 100), POINT (170, 150), POINT (120, 190) },
+ };
+ pixman_color_t color = { 0x4444, 0x4444, 0xffff, 0xffff };
+ uint32_t *bits = malloc (WIDTH * HEIGHT * 4);
+ int i;
+
+ for (i = 0; i < WIDTH * HEIGHT; ++i)
+ bits[i] = (i / HEIGHT) * 0x01010000;
+
+ src_img = pixman_image_create_solid_fill (&color);
+ dest_img = pixman_image_create_bits (PIXMAN_a8r8g8b8, WIDTH, HEIGHT, bits, WIDTH * 4);
+
+ pixman_composite_triangles (PIXMAN_OP_ATOP_REVERSE,
+ src_img,
+ dest_img,
+ PIXMAN_a8,
+ 200, 200,
+ -5, 5,
+ ARRAY_LENGTH (tris), tris);
+ show_image (dest_img);
+
+ pixman_image_unref (src_img);
+ pixman_image_unref (dest_img);
+ free (bits);
+
+ return 0;
+}
diff --git a/src/pixman/demos/zone_plate.png b/src/pixman/demos/zone_plate.png
new file mode 100644
index 0000000..519291d
--- /dev/null
+++ b/src/pixman/demos/zone_plate.png
Binary files differ
OpenPOWER on IntegriCloud