1 /* xscreensaver, Copyright (c) 1992, 1995, 1996, 1998, 2000
2 * Jamie Zawinski <jwz@jwz.org>
4 * Permission to use, copy, modify, distribute, and sell this software and its
5 * documentation for any purpose is hereby granted without fee, provided that
6 * the above copyright notice appear in all copies and that both that
7 * copyright notice and this permission notice appear in supporting
8 * documentation. No representations are made about the suitability of this
9 * software for any purpose. It is provided "as is" without express or
12 * This code derived from TI Explorer Lisp code by Joe Keane, Fritz Mueller,
17 #include "screenhack.h"
19 #define POINT_COUNT 600
20 #define LINE_COUNT 1200
22 #define ANGLE_SCALE 0.001
44 unsigned char old_dep, new_dep;
66 double hs_cos_xy, hs_sin_xy;
67 double hs_cos_xz, hs_sin_xz;
68 double hs_cos_yz, hs_sin_yz;
69 double hs_cos_xw, hs_sin_xw;
70 double hs_cos_yw, hs_sin_yw;
71 double hs_cos_zw, hs_sin_zw;
72 double hs_ref_ax, hs_ref_ay, hs_ref_az, hs_ref_aw;
73 double hs_ref_bx, hs_ref_by, hs_ref_bz, hs_ref_bw;
74 double hs_ref_cx, hs_ref_cy, hs_ref_cz, hs_ref_cw;
75 double hs_ref_dx, hs_ref_dy, hs_ref_dz, hs_ref_dw;
76 GC hs_color_gcs[8][8];
77 char hs_moved[POINT_COUNT];
78 struct point_state hs_points[POINT_COUNT];
81 static const struct point_info point_table[POINT_COUNT];
82 static const struct line_info line_table[LINE_COUNT];
84 static struct hyper_state hyper_state;
86 static void init (struct hyper_state *hs);
87 static void hyper (struct hyper_state *hs);
88 static void check_events (struct hyper_state *hs);
89 static void set_sizes (struct hyper_state *hs, int width, int height);
92 char *progclass = "Hyperball";
104 ".background: black",
105 ".foreground: white",
173 XrmOptionDescRec options [] =
175 { "-observer-z", ".observer-z", XrmoptionSepArg, 0 },
176 { "-delay", ".delay", XrmoptionSepArg, 0 },
177 { "-xw", ".xw", XrmoptionSepArg, 0 },
178 { "-xy", ".xy", XrmoptionSepArg, 0 },
179 { "-xz", ".xz", XrmoptionSepArg, 0 },
180 { "-yw", ".yw", XrmoptionSepArg, 0 },
181 { "-yz", ".yz", XrmoptionSepArg, 0 },
182 { "-zw", ".zw", XrmoptionSepArg, 0 },
188 screenhack (Display *d, Window w)
190 struct hyper_state *hs;
203 init (struct hyper_state *hs)
209 /* double xy, xz, yz, xw, yw, zw; */
210 unsigned long bg_pixel;
214 dpy = hs->hs_display;
217 observer_z = get_float_resource ("observer-z", "Float");
218 if (observer_z < 1.125)
220 hs->hs_observer_z = observer_z;
224 XWindowAttributes wa;
228 root = get_boolean_resource("root", "Boolean");
229 XGetWindowAttributes (dpy, win, &wa);
230 XSelectInput(dpy, win, root ? ExposureMask :
231 wa.your_event_mask | ExposureMask |
232 ButtonPressMask | StructureNotifyMask);
237 set_sizes (hs, width, height);
240 hs->hs_angle_xy = get_float_resource ("xy", "Float") * ANGLE_SCALE;
241 hs->hs_angle_xz = get_float_resource ("xz", "Float") * ANGLE_SCALE;
242 hs->hs_angle_yz = get_float_resource ("yz", "Float") * ANGLE_SCALE;
243 hs->hs_angle_xw = get_float_resource ("xw", "Float") * ANGLE_SCALE;
244 hs->hs_angle_yw = get_float_resource ("yw", "Float") * ANGLE_SCALE;
245 hs->hs_angle_zw = get_float_resource ("zw", "Float") * ANGLE_SCALE;
247 delay = get_integer_resource ("delay", "Integer");
248 hs->hs_delay = delay;
250 bg_pixel = get_pixel_resource ("background", "Background", dpy, cmap);
255 unsigned long fg_pixel;
258 gcv.function = GXcopy;
259 gcv.foreground = bg_pixel;
260 black_gc = XCreateGC (dpy, win, GCForeground|GCFunction, &gcv);
261 fg_pixel = get_pixel_resource ("foreground", "Foreground", dpy, cmap);
262 gcv.foreground = fg_pixel;
263 white_gc = XCreateGC (dpy, win, GCForeground|GCFunction, &gcv);
264 hs->hs_color_gcs[0][0] = black_gc;
265 hs->hs_color_gcs[0][1] = white_gc;
272 gcv.function = GXxor;
273 for (col = 0; col < 8; col++)
274 for (dep = 0; dep < 8; dep++)
277 unsigned long fg_pixel;
280 sprintf (buffer, "color%d%d", col, dep);
281 fg_pixel = get_pixel_resource (buffer, "Foreground", dpy, cmap);
282 gcv.foreground = fg_pixel ^ bg_pixel;
283 color_gc = XCreateGC (dpy, win, GCForeground|GCFunction, &gcv);
284 hs->hs_color_gcs[col][dep] = color_gc;
296 double cos_xy, sin_xy;
297 double cos_xz, sin_xz;
298 double cos_yz, sin_yz;
299 double cos_xw, sin_xw;
300 double cos_yw, sin_yw;
301 double cos_zw, sin_zw;
304 hs->hs_ref_ax = 1.0, hs->hs_ref_ay = 0.0, hs->hs_ref_az = 0.0, hs->hs_ref_aw = 0.0;
305 hs->hs_ref_bx = 0.0, hs->hs_ref_by = 1.0, hs->hs_ref_bz = 0.0, hs->hs_ref_bw = 0.0;
306 hs->hs_ref_cx = 0.0, hs->hs_ref_cy = 0.0, hs->hs_ref_cz = 1.0, hs->hs_ref_cw = 0.0;
307 hs->hs_ref_dx = 0.0, hs->hs_ref_dy = 0.0, hs->hs_ref_dz = 0.0, hs->hs_ref_dw = 1.0;
309 xy = hs->hs_angle_xy;
310 xz = hs->hs_angle_xz;
311 yz = hs->hs_angle_yz;
312 xw = hs->hs_angle_xw;
313 yw = hs->hs_angle_yw;
314 zw = hs->hs_angle_zw;
316 cos_xy = cos (xy), sin_xy = sin (xy);
317 hs->hs_cos_xy = cos_xy, hs->hs_sin_xy = sin_xy;
318 cos_xz = cos (xz), sin_xz = sin (xz);
319 hs->hs_cos_xz = cos_xz, hs->hs_sin_xz = sin_xz;
320 cos_yz = cos (yz), sin_yz = sin (yz);
321 hs->hs_cos_yz = cos_yz, hs->hs_sin_yz = sin_yz;
322 cos_xw = cos (xw), sin_xw = sin (xw);
323 hs->hs_cos_xw = cos_xw, hs->hs_sin_xw = sin_xw;
324 cos_yw = cos (yw), sin_yw = sin (yw);
325 hs->hs_cos_yw = cos_yw, hs->hs_sin_yw = sin_yw;
326 cos_zw = cos (zw), sin_zw = sin (zw);
327 hs->hs_cos_zw = cos_zw, hs->hs_sin_zw = sin_zw;
333 hyper (struct hyper_state *hs)
350 resize = hs->hs_resize;
351 if (icon || !(roted | resize))
356 const struct point_info *point_ptr;
357 struct point_state *point_state;
365 point_ptr = &point_table[0];
366 point_state = &hs->hs_points[0];
367 mark_ptr = &hs->hs_moved[0];
375 double az, bz, cz, dz;
377 double ax, bx, cx, dx;
379 double ay, by, cy, dy;
392 pos_a = point_ptr->pg_a;
393 pos_b = point_ptr->pg_b;
394 pos_c = point_ptr->pg_c;
395 pos_d = point_ptr->pg_d;
397 az = hs->hs_ref_az; bz = hs->hs_ref_bz; cz = hs->hs_ref_cz; dz = hs->hs_ref_dz;
398 ax = hs->hs_ref_ax; bx = hs->hs_ref_bx; cx = hs->hs_ref_cx; dx = hs->hs_ref_dx;
399 ay = hs->hs_ref_ay; by = hs->hs_ref_by; cy = hs->hs_ref_cy; dy = hs->hs_ref_dy;
400 sum_z = pos_a * az + pos_b * bz + pos_c * cz + pos_d * dz;
401 observer_z = hs->hs_observer_z;
402 unit_scale = hs->hs_unit_scale;
403 sum_x = pos_a * ax + pos_b * bx + pos_c * cx + pos_d * dx;
404 sum_y = pos_a * ay + pos_b * by + pos_c * cy + pos_d * dy;
405 mul = unit_scale / (observer_z - sum_z);
406 offset_x = hs->hs_offset_x;
407 offset_y = hs->hs_offset_y;
408 old_x = point_state->new_x;
409 old_y = point_state->new_y;
410 old_dep = point_state->new_dep;
411 xf = sum_x * mul + offset_x;
412 yf = sum_y * mul + offset_y;
413 new_x = (int)rint(xf);
414 new_y = (int)rint(yf);
415 new_dep = (int)floor(sum_z * -128.0) + 128;
416 point_state->old_x = old_x;
417 point_state->old_y = old_y;
418 point_state->old_dep = old_dep;
419 point_state->new_x = new_x;
420 point_state->new_y = new_y;
421 point_state->new_dep = new_dep;
423 mov = new_x != old_x || new_y != old_y || new_dep != old_dep;
431 redraw = hs->hs_redraw;
432 if (icon || !(roted | redraw))
437 const struct line_info *li_ptr;
443 li_ptr = &line_table[0];
445 dpy = hs->hs_display;
455 struct point_state *sp;
456 struct point_state *sq;
470 col = li_ptr->li_color;
472 mov_p = hs->hs_moved[ip];
473 mov_q = hs->hs_moved[iq];
474 if (!(redraw | mov_p | mov_q))
477 sp = &hs->hs_points[ip];
478 sq = &hs->hs_points[iq];
482 erase_gc = hs->hs_color_gcs[0][0];
483 draw_gc = hs->hs_color_gcs[0][1];
489 old_sum = sp->old_dep + sq->old_dep;
490 new_sum = sp->new_dep + sq->new_dep;
491 row = &hs->hs_color_gcs[col][0];
492 old_dep = old_sum >> 6;
493 new_dep = new_sum >> 6;
494 erase_gc = row[old_dep];
495 draw_gc = row[new_dep];
504 XDrawLine (dpy, win, erase_gc, p_x, p_y, q_x, q_y);
511 XDrawLine (dpy, win, draw_gc, p_x, p_y, q_x, q_y);
533 /* If you get error messages about the following forms, and you think you're
534 using an ANSI C conforming compiler, then you're mistaken. Possibly you're
535 mixing an ANSI compiler with a non-ANSI preprocessor, or vice versa.
536 Regardless, your system is broken; it's not a bug in this program.
538 #if defined(__STDC__) || defined(__ANSI_CPP__)
540 #define rotate(name,dim0,dim1) \
541 old_u = hs->hs_ref_##name##dim0; \
542 old_v = hs->hs_ref_##name##dim1; \
543 new_u = old_u * cos_a + old_v * sin_a; \
544 new_v = old_v * cos_a - old_u * sin_a; \
545 hs->hs_ref_##name##dim0 = new_u; \
546 hs->hs_ref_##name##dim1 = new_v;
548 #define rotates(dim0,dim1) \
549 if (hs->hs_sin_##dim0##dim1 != 0) { \
550 cos_a = hs->hs_cos_##dim0##dim1; \
551 sin_a = hs->hs_sin_##dim0##dim1; \
552 rotate(a, dim0, dim1); \
553 rotate(b, dim0, dim1); \
554 rotate(c, dim0, dim1); \
555 rotate(d, dim0, dim1); \
558 #else /* !__STDC__, courtesy of Andreas Luik <luik@isa.de> */
560 #define rotate(name,dim0,dim1,cos,sin) \
561 old_u = hs->hs_ref_/**/name/**/dim0; \
562 old_v = hs->hs_ref_/**/name/**/dim1; \
563 new_u = old_u * cos_a + old_v * sin_a; \
564 new_v = old_v * cos_a - old_u * sin_a; \
565 hs->hs_ref_/**/name/**/dim0 = new_u; \
566 hs->hs_ref_/**/name/**/dim1 = new_v;
568 #define rotates(dim0,dim1) \
569 if (hs->hs_sin_/**/dim0/**/dim1 != 0) { \
570 cos_a = hs->hs_cos_/**/dim0/**/dim1; \
571 sin_a = hs->hs_sin_/**/dim0/**/dim1; \
572 rotate(a, dim0, dim1); \
573 rotate(b, dim0, dim1); \
574 rotate(c, dim0, dim1); \
575 rotate(d, dim0, dim1); \
589 /* stop = hs->hs_stop; */
590 delay = hs->hs_delay;
591 if (stop && delay < 10000)
600 check_events (struct hyper_state *hs)
609 dpy = hs->hs_display;
610 count = XEventsQueued (dpy, QueuedAfterReading);
619 XNextEvent (dpy, &e);
628 case ConfigureNotify:
635 switch (e.xbutton.button)
638 hs->hs_stop = !hs->hs_stop;
651 screenhack_handle_event(dpy, &e);
656 resize = hs->hs_resize;
660 XWindowAttributes wa;
664 XGetWindowAttributes (dpy, win, &wa);
667 set_sizes (hs, width, height);
670 redraw = hs->hs_redraw;
672 XClearWindow (dpy, win);
677 set_sizes (struct hyper_state *hs, int width, int height)
686 observer_z = hs->hs_observer_z;
687 min_dim = width < height ? width : height;
688 var = sqrt(observer_z * observer_z - 1.0);
689 offset_x = 0.5 * (width - 1);
690 offset_y = 0.5 * (height - 1);
691 unit_scale = 0.4 * min_dim * var;
692 hs->hs_offset_x = (float)offset_x;
693 hs->hs_offset_y = (float)offset_y;
694 hs->hs_unit_scale = (float)unit_scale;
700 static const struct point_info point_table[POINT_COUNT] =
702 { 0.93, 0.30, 0.09, 0.03, },
703 { 0.84, 0.49, -0.08, 0.05, },
704 { 0.72, 0.65, 0.02, -0.09, },
705 { 0.57, 0.79, 0.05, 0.07, },
706 { 0.40, 0.89, -0.09, -0.01, },
707 { 0.20, 0.95, 0.07, -0.06, },
708 { 0.00, 0.97, 0.00, 0.09, },
709 { -0.20, 0.95, -0.07, -0.06, },
710 { -0.40, 0.89, 0.09, -0.01, },
711 { -0.57, 0.79, -0.05, 0.07, },
712 { -0.72, 0.65, -0.02, -0.09, },
713 { -0.84, 0.49, 0.08, 0.05, },
714 { -0.93, 0.30, -0.09, 0.03, },
715 { -0.97, 0.10, 0.04, -0.08, },
716 { -0.97, -0.10, 0.04, 0.08, },
717 { -0.93, -0.30, -0.09, -0.03, },
718 { -0.84, -0.49, 0.08, -0.05, },
719 { -0.72, -0.65, -0.02, 0.09, },
720 { -0.57, -0.79, -0.05, -0.07, },
721 { -0.40, -0.89, 0.09, 0.01, },
722 { -0.20, -0.95, -0.07, 0.06, },
723 { 0.00, -0.97, 0.00, -0.09, },
724 { 0.20, -0.95, 0.07, 0.06, },
725 { 0.40, -0.89, -0.09, 0.01, },
726 { 0.57, -0.79, 0.05, -0.07, },
727 { 0.72, -0.65, 0.02, 0.09, },
728 { 0.84, -0.49, -0.08, -0.05, },
729 { 0.93, -0.30, 0.09, -0.03, },
730 { 0.97, -0.10, -0.04, 0.08, },
731 { 0.97, 0.10, -0.04, -0.08, },
732 { 0.27, 0.83, -0.13, -0.41, },
733 { 0.09, 0.87, 0.40, 0.18, },
734 { -0.09, 0.87, -0.40, 0.18, },
735 { -0.27, 0.83, 0.13, -0.41, },
736 { -0.44, 0.76, 0.22, 0.38, },
737 { -0.59, 0.65, -0.42, -0.09, },
738 { -0.71, 0.51, 0.35, -0.25, },
739 { -0.80, 0.36, -0.05, 0.43, },
740 { -0.86, 0.18, -0.29, -0.32, },
741 { -0.88, 0.00, 0.43, 0.00, },
742 { -0.86, -0.18, -0.29, 0.32, },
743 { -0.80, -0.36, -0.05, -0.43, },
744 { -0.71, -0.51, 0.35, 0.25, },
745 { -0.59, -0.65, -0.42, 0.09, },
746 { -0.44, -0.76, 0.22, -0.38, },
747 { -0.27, -0.83, 0.13, 0.41, },
748 { -0.09, -0.87, -0.40, -0.18, },
749 { 0.09, -0.87, 0.40, -0.18, },
750 { 0.27, -0.83, -0.13, 0.41, },
751 { 0.44, -0.76, -0.22, -0.38, },
752 { 0.59, -0.65, 0.42, 0.09, },
753 { 0.71, -0.51, -0.35, 0.25, },
754 { 0.80, -0.36, 0.05, -0.43, },
755 { 0.86, -0.18, 0.29, 0.32, },
756 { 0.88, 0.00, -0.43, 0.00, },
757 { 0.86, 0.18, 0.29, -0.32, },
758 { 0.80, 0.36, 0.05, 0.43, },
759 { 0.71, 0.51, -0.35, -0.25, },
760 { 0.59, 0.65, 0.42, -0.09, },
761 { 0.44, 0.76, -0.22, 0.38, },
762 { -0.13, 0.41, -0.27, 0.83, },
763 { -0.22, 0.38, -0.44, -0.76, },
764 { -0.29, 0.32, 0.86, 0.18, },
765 { -0.35, 0.25, -0.71, 0.51, },
766 { -0.40, 0.18, 0.09, -0.87, },
767 { -0.42, 0.09, 0.59, 0.65, },
768 { -0.43, 0.00, -0.88, 0.00, },
769 { -0.42, -0.09, 0.59, -0.65, },
770 { -0.40, -0.18, 0.09, 0.87, },
771 { -0.35, -0.25, -0.71, -0.51, },
772 { -0.29, -0.32, 0.86, -0.18, },
773 { -0.22, -0.38, -0.44, 0.76, },
774 { -0.13, -0.41, -0.27, -0.83, },
775 { -0.05, -0.43, 0.80, 0.36, },
776 { 0.05, -0.43, -0.80, 0.36, },
777 { 0.13, -0.41, 0.27, -0.83, },
778 { 0.22, -0.38, 0.44, 0.76, },
779 { 0.29, -0.32, -0.86, -0.18, },
780 { 0.35, -0.25, 0.71, -0.51, },
781 { 0.40, -0.18, -0.09, 0.87, },
782 { 0.42, -0.09, -0.59, -0.65, },
783 { 0.43, 0.00, 0.88, 0.00, },
784 { 0.42, 0.09, -0.59, 0.65, },
785 { 0.40, 0.18, -0.09, -0.87, },
786 { 0.35, 0.25, 0.71, 0.51, },
787 { 0.29, 0.32, -0.86, 0.18, },
788 { 0.22, 0.38, 0.44, -0.76, },
789 { 0.13, 0.41, 0.27, 0.83, },
790 { 0.05, 0.43, -0.80, -0.36, },
791 { -0.05, 0.43, 0.80, -0.36, },
792 { 0.09, -0.03, -0.93, 0.30, },
793 { 0.09, -0.01, 0.40, -0.89, },
794 { 0.09, 0.01, 0.40, 0.89, },
795 { 0.09, 0.03, -0.93, -0.30, },
796 { 0.08, 0.05, 0.84, -0.49, },
797 { 0.07, 0.06, -0.20, 0.95, },
798 { 0.05, 0.07, -0.57, -0.79, },
799 { 0.04, 0.08, 0.97, 0.10, },
800 { 0.02, 0.09, -0.72, 0.65, },
801 { 0.00, 0.09, 0.00, -0.97, },
802 { -0.02, 0.09, 0.72, 0.65, },
803 { -0.04, 0.08, -0.97, 0.10, },
804 { -0.05, 0.07, 0.57, -0.79, },
805 { -0.07, 0.06, 0.20, 0.95, },
806 { -0.08, 0.05, -0.84, -0.49, },
807 { -0.09, 0.03, 0.93, -0.30, },
808 { -0.09, 0.01, -0.40, 0.89, },
809 { -0.09, -0.01, -0.40, -0.89, },
810 { -0.09, -0.03, 0.93, 0.30, },
811 { -0.08, -0.05, -0.84, 0.49, },
812 { -0.07, -0.06, 0.20, -0.95, },
813 { -0.05, -0.07, 0.57, 0.79, },
814 { -0.04, -0.08, -0.97, -0.10, },
815 { -0.02, -0.09, 0.72, -0.65, },
816 { 0.00, -0.09, 0.00, 0.97, },
817 { 0.02, -0.09, -0.72, -0.65, },
818 { 0.04, -0.08, 0.97, -0.10, },
819 { 0.05, -0.07, -0.57, 0.79, },
820 { 0.07, -0.06, -0.20, -0.95, },
821 { 0.08, -0.05, 0.84, 0.49, },
822 { 0.64, 0.67, -0.15, -0.28, },
823 { 0.49, 0.79, 0.30, 0.07, },
824 { 0.31, 0.87, -0.26, 0.18, },
825 { 0.13, 0.92, 0.04, -0.31, },
826 { -0.07, 0.92, 0.20, 0.24, },
827 { -0.26, 0.89, -0.31, -0.01, },
828 { -0.44, 0.82, 0.22, -0.23, },
829 { -0.60, 0.71, 0.02, 0.31, },
830 { -0.73, 0.57, -0.25, -0.19, },
831 { -0.83, 0.40, 0.31, -0.06, },
832 { -0.90, 0.22, -0.16, 0.27, },
833 { -0.93, 0.03, -0.09, -0.30, },
834 { -0.91, -0.16, 0.28, 0.14, },
835 { -0.86, -0.35, -0.29, 0.12, },
836 { -0.77, -0.52, 0.11, -0.29, },
837 { -0.64, -0.67, 0.15, 0.28, },
838 { -0.49, -0.79, -0.30, -0.07, },
839 { -0.31, -0.87, 0.26, -0.18, },
840 { -0.13, -0.92, -0.04, 0.31, },
841 { 0.07, -0.92, -0.20, -0.24, },
842 { 0.26, -0.89, 0.31, 0.01, },
843 { 0.44, -0.82, -0.22, 0.23, },
844 { 0.60, -0.71, -0.02, -0.31, },
845 { 0.73, -0.57, 0.25, 0.19, },
846 { 0.83, -0.40, -0.31, 0.06, },
847 { 0.90, -0.22, 0.16, -0.27, },
848 { 0.93, -0.03, 0.09, 0.30, },
849 { 0.91, 0.16, -0.28, -0.14, },
850 { 0.86, 0.35, 0.29, -0.12, },
851 { 0.77, 0.52, -0.11, 0.29, },
852 { 0.44, 0.82, -0.22, -0.23, },
853 { 0.26, 0.89, 0.31, -0.01, },
854 { 0.07, 0.92, -0.20, 0.24, },
855 { -0.12, 0.92, -0.04, -0.31, },
856 { -0.31, 0.87, 0.26, 0.18, },
857 { -0.49, 0.79, -0.30, 0.07, },
858 { -0.64, 0.67, 0.15, -0.28, },
859 { -0.77, 0.52, 0.11, 0.29, },
860 { -0.86, 0.35, -0.29, -0.12, },
861 { -0.91, 0.16, 0.28, -0.14, },
862 { -0.93, -0.03, -0.09, 0.30, },
863 { -0.90, -0.22, -0.16, -0.27, },
864 { -0.83, -0.40, 0.31, 0.06, },
865 { -0.73, -0.57, -0.25, 0.19, },
866 { -0.60, -0.71, 0.02, -0.31, },
867 { -0.44, -0.82, 0.22, 0.23, },
868 { -0.26, -0.89, -0.31, 0.01, },
869 { -0.07, -0.92, 0.20, -0.24, },
870 { 0.12, -0.92, 0.04, 0.31, },
871 { 0.31, -0.87, -0.26, -0.18, },
872 { 0.49, -0.79, 0.30, -0.07, },
873 { 0.64, -0.67, -0.15, 0.28, },
874 { 0.77, -0.52, -0.11, -0.29, },
875 { 0.86, -0.35, 0.29, 0.12, },
876 { 0.91, -0.16, -0.28, 0.14, },
877 { 0.93, 0.03, 0.09, -0.30, },
878 { 0.90, 0.22, 0.16, 0.27, },
879 { 0.83, 0.40, -0.31, -0.06, },
880 { 0.73, 0.57, 0.25, -0.19, },
881 { 0.60, 0.71, -0.02, 0.31, },
882 { -0.13, 0.83, -0.27, -0.41, },
883 { -0.30, 0.79, 0.49, 0.07, },
884 { -0.46, 0.71, -0.38, 0.31, },
885 { -0.60, 0.60, 0.02, -0.49, },
886 { -0.71, 0.46, 0.35, 0.35, },
887 { -0.79, 0.30, -0.49, 0.03, },
888 { -0.83, 0.13, 0.31, -0.38, },
889 { -0.84, -0.05, 0.08, 0.49, },
890 { -0.81, -0.22, -0.41, -0.27, },
891 { -0.75, -0.38, 0.48, -0.13, },
892 { -0.65, -0.53, -0.22, 0.44, },
893 { -0.53, -0.66, -0.18, -0.46, },
894 { -0.38, -0.75, 0.46, 0.17, },
895 { -0.22, -0.82, -0.44, 0.23, },
896 { -0.04, -0.84, 0.12, -0.48, },
897 { 0.13, -0.83, 0.27, 0.41, },
898 { 0.30, -0.79, -0.49, -0.07, },
899 { 0.46, -0.71, 0.38, -0.31, },
900 { 0.60, -0.60, -0.02, 0.49, },
901 { 0.71, -0.46, -0.35, -0.35, },
902 { 0.79, -0.30, 0.49, -0.03, },
903 { 0.83, -0.13, -0.31, 0.38, },
904 { 0.84, 0.05, -0.08, -0.49, },
905 { 0.81, 0.22, 0.41, 0.27, },
906 { 0.75, 0.38, -0.48, 0.13, },
907 { 0.65, 0.53, 0.22, -0.44, },
908 { 0.53, 0.66, 0.18, 0.46, },
909 { 0.38, 0.75, -0.46, -0.17, },
910 { 0.22, 0.82, 0.44, -0.23, },
911 { 0.04, 0.84, -0.12, 0.48, },
912 { -0.65, 0.53, -0.22, -0.44, },
913 { -0.75, 0.38, 0.48, 0.13, },
914 { -0.81, 0.22, -0.41, 0.27, },
915 { -0.84, 0.05, 0.08, -0.49, },
916 { -0.83, -0.13, 0.31, 0.38, },
917 { -0.79, -0.30, -0.49, -0.03, },
918 { -0.71, -0.46, 0.35, -0.35, },
919 { -0.60, -0.60, 0.02, 0.49, },
920 { -0.46, -0.71, -0.38, -0.31, },
921 { -0.30, -0.79, 0.49, -0.07, },
922 { -0.13, -0.83, -0.27, 0.41, },
923 { 0.04, -0.84, -0.13, -0.48, },
924 { 0.22, -0.82, 0.44, 0.23, },
925 { 0.38, -0.75, -0.46, 0.17, },
926 { 0.53, -0.66, 0.18, -0.46, },
927 { 0.65, -0.53, 0.22, 0.44, },
928 { 0.75, -0.38, -0.48, -0.13, },
929 { 0.81, -0.22, 0.41, -0.27, },
930 { 0.84, -0.05, -0.08, 0.49, },
931 { 0.83, 0.13, -0.31, -0.38, },
932 { 0.79, 0.30, 0.49, 0.03, },
933 { 0.71, 0.46, -0.35, 0.35, },
934 { 0.60, 0.60, -0.02, -0.49, },
935 { 0.46, 0.71, 0.38, 0.31, },
936 { 0.30, 0.79, -0.49, 0.07, },
937 { 0.13, 0.83, 0.27, -0.41, },
938 { -0.04, 0.84, 0.13, 0.48, },
939 { -0.22, 0.82, -0.44, -0.23, },
940 { -0.38, 0.75, 0.46, -0.17, },
941 { -0.53, 0.66, -0.18, 0.46, },
942 { 0.11, 0.78, -0.33, -0.47, },
943 { -0.05, 0.79, 0.57, 0.07, },
944 { -0.22, 0.76, -0.44, 0.38, },
945 { -0.37, 0.70, 0.01, -0.58, },
946 { -0.51, 0.60, 0.42, 0.40, },
947 { -0.62, 0.49, -0.57, 0.05, },
948 { -0.71, 0.35, 0.35, -0.46, },
949 { -0.77, 0.19, 0.11, 0.57, },
950 { -0.79, 0.03, -0.49, -0.30, },
951 { -0.78, -0.14, 0.55, -0.16, },
952 { -0.73, -0.29, -0.25, 0.52, },
953 { -0.65, -0.44, -0.22, -0.53, },
954 { -0.55, -0.57, 0.54, 0.19, },
955 { -0.42, -0.67, -0.51, 0.28, },
956 { -0.27, -0.74, 0.13, -0.56, },
957 { -0.11, -0.78, 0.33, 0.47, },
958 { 0.05, -0.79, -0.57, -0.07, },
959 { 0.22, -0.76, 0.44, -0.38, },
960 { 0.37, -0.70, -0.01, 0.58, },
961 { 0.51, -0.60, -0.42, -0.40, },
962 { 0.62, -0.49, 0.57, -0.05, },
963 { 0.71, -0.35, -0.35, 0.46, },
964 { 0.77, -0.19, -0.11, -0.57, },
965 { 0.79, -0.03, 0.49, 0.30, },
966 { 0.78, 0.14, -0.55, 0.16, },
967 { 0.73, 0.29, 0.25, -0.52, },
968 { 0.65, 0.44, 0.22, 0.53, },
969 { 0.55, 0.57, -0.54, -0.19, },
970 { 0.42, 0.67, 0.51, -0.28, },
971 { 0.27, 0.74, -0.13, 0.56, },
972 { -0.73, 0.29, -0.25, -0.52, },
973 { -0.78, 0.14, 0.55, 0.16, },
974 { -0.79, -0.03, -0.49, 0.30, },
975 { -0.77, -0.19, 0.11, -0.57, },
976 { -0.71, -0.35, 0.35, 0.46, },
977 { -0.62, -0.49, -0.57, -0.05, },
978 { -0.51, -0.60, 0.42, -0.40, },
979 { -0.37, -0.70, 0.01, 0.58, },
980 { -0.22, -0.76, -0.44, -0.38, },
981 { -0.05, -0.79, 0.57, -0.07, },
982 { 0.11, -0.78, -0.33, 0.47, },
983 { 0.27, -0.74, -0.13, -0.56, },
984 { 0.42, -0.67, 0.51, 0.28, },
985 { 0.55, -0.57, -0.54, 0.19, },
986 { 0.65, -0.44, 0.22, -0.53, },
987 { 0.73, -0.29, 0.25, 0.52, },
988 { 0.78, -0.14, -0.55, -0.16, },
989 { 0.79, 0.03, 0.49, -0.30, },
990 { 0.77, 0.19, -0.11, 0.57, },
991 { 0.71, 0.35, -0.35, -0.46, },
992 { 0.62, 0.49, 0.57, 0.05, },
993 { 0.51, 0.60, -0.42, 0.40, },
994 { 0.37, 0.70, -0.01, -0.58, },
995 { 0.22, 0.76, 0.44, 0.38, },
996 { 0.05, 0.79, -0.57, 0.07, },
997 { -0.11, 0.78, 0.33, -0.47, },
998 { -0.27, 0.74, 0.13, 0.56, },
999 { -0.42, 0.67, -0.51, -0.28, },
1000 { -0.55, 0.57, 0.54, -0.19, },
1001 { -0.65, 0.44, -0.22, 0.53, },
1002 { -0.28, 0.70, -0.24, -0.58, },
1003 { -0.42, 0.62, 0.59, 0.21, },
1004 { -0.54, 0.52, -0.55, 0.29, },
1005 { -0.64, 0.40, 0.15, -0.60, },
1006 { -0.71, 0.25, 0.35, 0.51, },
1007 { -0.75, 0.10, -0.62, -0.08, },
1008 { -0.75, -0.06, 0.48, -0.40, },
1009 { -0.72, -0.21, -0.02, 0.62, },
1010 { -0.66, -0.36, -0.45, -0.43, },
1011 { -0.57, -0.49, 0.62, -0.05, },
1012 { -0.46, -0.60, -0.38, 0.49, },
1013 { -0.33, -0.68, -0.11, -0.61, },
1014 { -0.18, -0.73, 0.53, 0.33, },
1015 { -0.02, -0.75, -0.60, 0.17, },
1016 { 0.13, -0.74, 0.27, -0.56, },
1017 { 0.28, -0.70, 0.24, 0.58, },
1018 { 0.42, -0.62, -0.59, -0.21, },
1019 { 0.54, -0.52, 0.55, -0.29, },
1020 { 0.64, -0.40, -0.15, 0.60, },
1021 { 0.71, -0.25, -0.35, -0.51, },
1022 { 0.75, -0.10, 0.62, 0.08, },
1023 { 0.75, 0.06, -0.48, 0.40, },
1024 { 0.72, 0.21, 0.02, -0.62, },
1025 { 0.66, 0.36, 0.45, 0.43, },
1026 { 0.57, 0.49, -0.62, 0.05, },
1027 { 0.46, 0.60, 0.38, -0.49, },
1028 { 0.33, 0.68, 0.11, 0.61, },
1029 { 0.18, 0.73, -0.53, -0.33, },
1030 { 0.02, 0.75, 0.60, -0.17, },
1031 { -0.13, 0.74, -0.27, 0.56, },
1032 { -0.46, 0.60, -0.38, -0.49, },
1033 { -0.57, 0.49, 0.62, 0.05, },
1034 { -0.66, 0.36, -0.45, 0.43, },
1035 { -0.72, 0.21, -0.02, -0.62, },
1036 { -0.75, 0.06, 0.48, 0.40, },
1037 { -0.75, -0.10, -0.62, 0.08, },
1038 { -0.71, -0.25, 0.35, -0.51, },
1039 { -0.64, -0.40, 0.15, 0.60, },
1040 { -0.54, -0.52, -0.55, -0.29, },
1041 { -0.42, -0.62, 0.59, -0.21, },
1042 { -0.28, -0.70, -0.24, 0.58, },
1043 { -0.13, -0.74, -0.27, -0.56, },
1044 { 0.02, -0.75, 0.60, 0.17, },
1045 { 0.18, -0.73, -0.53, 0.33, },
1046 { 0.33, -0.68, 0.11, -0.61, },
1047 { 0.46, -0.60, 0.38, 0.49, },
1048 { 0.57, -0.49, -0.62, -0.05, },
1049 { 0.66, -0.36, 0.45, -0.43, },
1050 { 0.72, -0.21, 0.02, 0.62, },
1051 { 0.75, -0.06, -0.48, -0.40, },
1052 { 0.75, 0.10, 0.62, -0.08, },
1053 { 0.71, 0.25, -0.35, 0.51, },
1054 { 0.64, 0.40, -0.15, -0.60, },
1055 { 0.54, 0.52, 0.55, 0.29, },
1056 { 0.42, 0.62, -0.59, 0.21, },
1057 { 0.28, 0.70, 0.24, -0.58, },
1058 { 0.13, 0.74, 0.27, 0.56, },
1059 { -0.02, 0.75, -0.60, -0.17, },
1060 { -0.18, 0.73, 0.53, -0.33, },
1061 { -0.33, 0.68, -0.11, 0.61, },
1062 { -0.24, 0.58, 0.28, 0.70, },
1063 { -0.35, 0.51, -0.71, -0.25, },
1064 { -0.45, 0.43, 0.66, -0.36, },
1065 { -0.53, 0.33, -0.18, 0.73, },
1066 { -0.59, 0.21, -0.42, -0.62, },
1067 { -0.62, 0.08, 0.75, 0.10, },
1068 { -0.62, -0.05, -0.57, 0.49, },
1069 { -0.60, -0.17, 0.02, -0.75, },
1070 { -0.55, -0.29, 0.54, 0.52, },
1071 { -0.48, -0.40, -0.75, 0.06, },
1072 { -0.38, -0.49, 0.46, -0.60, },
1073 { -0.27, -0.56, 0.13, 0.74, },
1074 { -0.15, -0.60, -0.64, -0.40, },
1075 { -0.02, -0.62, 0.72, -0.21, },
1076 { 0.11, -0.61, -0.33, 0.68, },
1077 { 0.24, -0.58, -0.29, -0.70, },
1078 { 0.35, -0.51, 0.71, 0.25, },
1079 { 0.45, -0.43, -0.66, 0.36, },
1080 { 0.53, -0.33, 0.18, -0.73, },
1081 { 0.59, -0.21, 0.42, 0.62, },
1082 { 0.62, -0.08, -0.75, -0.10, },
1083 { 0.62, 0.05, 0.57, -0.49, },
1084 { 0.60, 0.17, -0.02, 0.75, },
1085 { 0.55, 0.29, -0.54, -0.52, },
1086 { 0.48, 0.40, 0.75, -0.06, },
1087 { 0.38, 0.49, -0.46, 0.60, },
1088 { 0.27, 0.56, -0.13, -0.74, },
1089 { 0.15, 0.60, 0.64, 0.40, },
1090 { 0.02, 0.62, -0.72, 0.21, },
1091 { -0.11, 0.61, 0.33, -0.68, },
1092 { -0.38, 0.49, 0.46, 0.60, },
1093 { -0.48, 0.40, -0.75, -0.06, },
1094 { -0.55, 0.29, 0.54, -0.52, },
1095 { -0.60, 0.17, 0.02, 0.75, },
1096 { -0.62, 0.05, -0.57, -0.49, },
1097 { -0.62, -0.08, 0.75, -0.10, },
1098 { -0.59, -0.21, -0.42, 0.62, },
1099 { -0.53, -0.33, -0.18, -0.73, },
1100 { -0.45, -0.43, 0.66, 0.36, },
1101 { -0.35, -0.51, -0.71, 0.25, },
1102 { -0.24, -0.58, 0.28, -0.70, },
1103 { -0.11, -0.61, 0.33, 0.68, },
1104 { 0.02, -0.62, -0.72, -0.21, },
1105 { 0.15, -0.60, 0.64, -0.40, },
1106 { 0.27, -0.56, -0.13, 0.74, },
1107 { 0.38, -0.49, -0.46, -0.60, },
1108 { 0.48, -0.40, 0.75, 0.06, },
1109 { 0.55, -0.29, -0.54, 0.52, },
1110 { 0.60, -0.17, -0.02, -0.75, },
1111 { 0.62, -0.05, 0.57, 0.49, },
1112 { 0.62, 0.08, -0.75, 0.10, },
1113 { 0.59, 0.21, 0.42, -0.62, },
1114 { 0.53, 0.33, 0.18, 0.73, },
1115 { 0.45, 0.43, -0.66, -0.36, },
1116 { 0.35, 0.51, 0.71, -0.25, },
1117 { 0.24, 0.58, -0.28, 0.70, },
1118 { 0.11, 0.61, -0.33, -0.68, },
1119 { -0.02, 0.62, 0.72, 0.21, },
1120 { -0.15, 0.60, -0.64, 0.40, },
1121 { -0.27, 0.56, 0.13, -0.74, },
1122 { -0.33, 0.47, -0.11, 0.78, },
1123 { -0.42, 0.40, -0.51, -0.60, },
1124 { -0.49, 0.30, 0.79, 0.03, },
1125 { -0.54, 0.19, -0.55, 0.57, },
1126 { -0.57, 0.07, -0.05, -0.79, },
1127 { -0.57, -0.05, 0.62, 0.49, },
1128 { -0.55, -0.16, -0.78, 0.14, },
1129 { -0.51, -0.28, 0.42, -0.67, },
1130 { -0.44, -0.38, 0.22, 0.76, },
1131 { -0.35, -0.46, -0.71, -0.35, },
1132 { -0.25, -0.52, 0.73, -0.29, },
1133 { -0.13, -0.56, -0.27, 0.74, },
1134 { -0.01, -0.58, -0.37, -0.70, },
1135 { 0.11, -0.57, 0.77, 0.19, },
1136 { 0.22, -0.53, -0.65, 0.44, },
1137 { 0.33, -0.47, 0.11, -0.78, },
1138 { 0.42, -0.40, 0.51, 0.60, },
1139 { 0.49, -0.30, -0.79, -0.03, },
1140 { 0.54, -0.19, 0.55, -0.57, },
1141 { 0.57, -0.07, 0.05, 0.79, },
1142 { 0.57, 0.05, -0.62, -0.49, },
1143 { 0.55, 0.16, 0.78, -0.14, },
1144 { 0.51, 0.28, -0.42, 0.67, },
1145 { 0.44, 0.38, -0.22, -0.76, },
1146 { 0.35, 0.46, 0.71, 0.35, },
1147 { 0.25, 0.52, -0.73, 0.29, },
1148 { 0.13, 0.56, 0.27, -0.74, },
1149 { 0.01, 0.58, 0.37, 0.70, },
1150 { -0.11, 0.57, -0.77, -0.19, },
1151 { -0.22, 0.53, 0.65, -0.44, },
1152 { -0.25, 0.52, 0.73, 0.29, },
1153 { -0.35, 0.46, -0.71, 0.35, },
1154 { -0.44, 0.38, 0.22, -0.76, },
1155 { -0.51, 0.28, 0.42, 0.67, },
1156 { -0.55, 0.16, -0.78, -0.14, },
1157 { -0.57, 0.05, 0.62, -0.49, },
1158 { -0.57, -0.07, -0.05, 0.79, },
1159 { -0.54, -0.19, -0.55, -0.57, },
1160 { -0.49, -0.30, 0.79, -0.03, },
1161 { -0.42, -0.40, -0.51, 0.60, },
1162 { -0.33, -0.47, -0.11, -0.78, },
1163 { -0.22, -0.53, 0.65, 0.44, },
1164 { -0.11, -0.57, -0.77, 0.19, },
1165 { 0.01, -0.58, 0.37, -0.70, },
1166 { 0.13, -0.56, 0.27, 0.74, },
1167 { 0.25, -0.52, -0.73, -0.29, },
1168 { 0.35, -0.46, 0.71, -0.35, },
1169 { 0.44, -0.38, -0.22, 0.76, },
1170 { 0.51, -0.28, -0.42, -0.67, },
1171 { 0.55, -0.16, 0.78, 0.14, },
1172 { 0.57, -0.05, -0.62, 0.49, },
1173 { 0.57, 0.07, 0.05, -0.79, },
1174 { 0.54, 0.19, 0.55, 0.57, },
1175 { 0.49, 0.30, -0.79, 0.03, },
1176 { 0.42, 0.40, 0.51, -0.60, },
1177 { 0.33, 0.47, 0.11, 0.78, },
1178 { 0.22, 0.53, -0.65, -0.44, },
1179 { 0.11, 0.57, 0.77, -0.19, },
1180 { -0.01, 0.58, -0.37, 0.70, },
1181 { -0.13, 0.56, -0.27, -0.74, },
1182 { -0.27, 0.41, 0.13, 0.83, },
1183 { -0.35, 0.35, -0.71, -0.46, },
1184 { -0.41, 0.27, 0.81, -0.22, },
1185 { -0.46, 0.17, -0.38, 0.75, },
1186 { -0.49, 0.07, -0.30, -0.79, },
1187 { -0.49, -0.03, 0.79, 0.30, },
1188 { -0.48, -0.13, -0.75, 0.38, },
1189 { -0.44, -0.23, 0.22, -0.82, },
1190 { -0.38, -0.31, 0.46, 0.71, },
1191 { -0.31, -0.38, -0.83, -0.13, },
1192 { -0.22, -0.44, 0.65, -0.53, },
1193 { -0.13, -0.48, -0.04, 0.84, },
1194 { -0.02, -0.49, -0.60, -0.60, },
1195 { 0.08, -0.49, 0.84, -0.05, },
1196 { 0.18, -0.46, -0.53, 0.66, },
1197 { 0.27, -0.41, -0.13, -0.83, },
1198 { 0.35, -0.35, 0.71, 0.46, },
1199 { 0.41, -0.27, -0.81, 0.22, },
1200 { 0.46, -0.17, 0.38, -0.75, },
1201 { 0.49, -0.07, 0.30, 0.79, },
1202 { 0.49, 0.03, -0.79, -0.30, },
1203 { 0.48, 0.13, 0.75, -0.38, },
1204 { 0.44, 0.23, -0.22, 0.82, },
1205 { 0.38, 0.31, -0.46, -0.71, },
1206 { 0.31, 0.38, 0.83, 0.13, },
1207 { 0.22, 0.44, -0.65, 0.53, },
1208 { 0.12, 0.48, 0.04, -0.84, },
1209 { 0.02, 0.49, 0.60, 0.60, },
1210 { -0.08, 0.49, -0.84, 0.05, },
1211 { -0.18, 0.46, 0.53, -0.66, },
1212 { -0.22, 0.44, 0.65, 0.53, },
1213 { -0.31, 0.38, -0.83, 0.13, },
1214 { -0.38, 0.31, 0.46, -0.71, },
1215 { -0.44, 0.23, 0.22, 0.82, },
1216 { -0.48, 0.13, -0.75, -0.38, },
1217 { -0.49, 0.03, 0.79, -0.30, },
1218 { -0.49, -0.07, -0.30, 0.79, },
1219 { -0.46, -0.17, -0.38, -0.75, },
1220 { -0.41, -0.27, 0.81, 0.22, },
1221 { -0.35, -0.35, -0.71, 0.46, },
1222 { -0.27, -0.41, 0.13, -0.83, },
1223 { -0.18, -0.46, 0.53, 0.66, },
1224 { -0.08, -0.49, -0.84, -0.05, },
1225 { 0.02, -0.49, 0.60, -0.60, },
1226 { 0.12, -0.48, 0.04, 0.84, },
1227 { 0.22, -0.44, -0.65, -0.53, },
1228 { 0.31, -0.38, 0.83, -0.13, },
1229 { 0.38, -0.31, -0.46, 0.71, },
1230 { 0.44, -0.23, -0.22, -0.82, },
1231 { 0.48, -0.13, 0.75, 0.38, },
1232 { 0.49, -0.03, -0.79, 0.30, },
1233 { 0.49, 0.07, 0.30, -0.79, },
1234 { 0.46, 0.17, 0.38, 0.75, },
1235 { 0.41, 0.27, -0.81, -0.22, },
1236 { 0.35, 0.35, 0.71, -0.46, },
1237 { 0.27, 0.41, -0.13, 0.83, },
1238 { 0.18, 0.46, -0.53, -0.66, },
1239 { 0.08, 0.49, 0.84, 0.05, },
1240 { -0.02, 0.49, -0.60, 0.60, },
1241 { -0.12, 0.48, -0.04, -0.84, },
1242 { -0.15, 0.28, -0.64, 0.67, },
1243 { -0.20, 0.24, -0.07, -0.92, },
1244 { -0.25, 0.19, 0.73, 0.57, },
1245 { -0.28, 0.14, -0.91, 0.16, },
1246 { -0.30, 0.07, 0.49, -0.79, },
1247 { -0.31, 0.01, 0.26, 0.89, },
1248 { -0.31, -0.06, -0.83, -0.40, },
1249 { -0.29, -0.12, 0.86, -0.35, },
1250 { -0.26, -0.18, -0.31, 0.87, },
1251 { -0.22, -0.23, -0.44, -0.82, },
1252 { -0.16, -0.27, 0.90, 0.22, },
1253 { -0.11, -0.29, -0.77, 0.52, },
1254 { -0.04, -0.31, 0.12, -0.92, },
1255 { 0.02, -0.31, 0.60, 0.71, },
1256 { 0.09, -0.30, -0.93, -0.03, },
1257 { 0.15, -0.28, 0.64, -0.67, },
1258 { 0.20, -0.24, 0.07, 0.92, },
1259 { 0.25, -0.19, -0.73, -0.57, },
1260 { 0.28, -0.14, 0.91, -0.16, },
1261 { 0.30, -0.07, -0.49, 0.79, },
1262 { 0.31, -0.01, -0.26, -0.89, },
1263 { 0.31, 0.06, 0.83, 0.40, },
1264 { 0.29, 0.12, -0.86, 0.35, },
1265 { 0.26, 0.18, 0.31, -0.87, },
1266 { 0.22, 0.23, 0.44, 0.82, },
1267 { 0.16, 0.27, -0.90, -0.22, },
1268 { 0.11, 0.29, 0.77, -0.52, },
1269 { 0.04, 0.31, -0.12, 0.92, },
1270 { -0.02, 0.31, -0.60, -0.71, },
1271 { -0.09, 0.30, 0.93, 0.03, },
1272 { -0.22, 0.23, -0.44, 0.82, },
1273 { -0.26, 0.18, -0.31, -0.87, },
1274 { -0.29, 0.12, 0.86, 0.35, },
1275 { -0.31, 0.06, -0.83, 0.40, },
1276 { -0.31, -0.01, 0.26, -0.89, },
1277 { -0.30, -0.07, 0.49, 0.79, },
1278 { -0.28, -0.14, -0.91, -0.16, },
1279 { -0.25, -0.19, 0.73, -0.57, },
1280 { -0.20, -0.24, -0.07, 0.92, },
1281 { -0.15, -0.28, -0.64, -0.67, },
1282 { -0.09, -0.30, 0.93, -0.03, },
1283 { -0.02, -0.31, -0.60, 0.71, },
1284 { 0.04, -0.31, -0.13, -0.92, },
1285 { 0.11, -0.29, 0.77, 0.52, },
1286 { 0.16, -0.27, -0.90, 0.22, },
1287 { 0.22, -0.23, 0.44, -0.82, },
1288 { 0.26, -0.18, 0.31, 0.87, },
1289 { 0.29, -0.12, -0.86, -0.35, },
1290 { 0.31, -0.06, 0.83, -0.40, },
1291 { 0.31, 0.01, -0.26, 0.89, },
1292 { 0.30, 0.07, -0.49, -0.79, },
1293 { 0.28, 0.14, 0.91, 0.16, },
1294 { 0.25, 0.19, -0.73, 0.57, },
1295 { 0.20, 0.24, 0.07, -0.92, },
1296 { 0.15, 0.28, 0.64, 0.67, },
1297 { 0.09, 0.30, -0.93, 0.03, },
1298 { 0.02, 0.31, 0.60, -0.71, },
1299 { -0.04, 0.31, 0.13, 0.92, },
1300 { -0.11, 0.29, -0.77, -0.52, },
1301 { -0.16, 0.27, 0.90, -0.22, },
1304 static const struct line_info line_table[LINE_COUNT] =