shithub: 3dee

Download patch

ref: 0373255087377122eeb10e006ffb8aa1b57e611c
author: rgl <devnull@localhost>
date: Mon Feb 3 17:42:28 EST 2020

after a year or so of work, i dare create a proper repo.

--- /dev/null
+++ b/dat.h
@@ -1,0 +1,41 @@
+enum {
+	K↑,
+	K↓,
+	K←,
+	K→,
+	Krise,
+	Kfall,
+	KR↑,
+	KR↓,
+	KR←,
+	KR→,
+	KR↺,
+	KR↻,
+	Kcam0,
+	Kcam1,
+	Kcam2,
+	Kcam3,
+	Kscrshot,
+	Ke
+};
+
+enum {
+	Scamno,
+	Sfov,
+	Scampos,
+	Scambx, Scamby, Scambz,
+	Se
+};
+
+typedef struct Mesh Mesh;
+typedef struct TTriangle3 TTriangle3;
+
+struct Mesh {
+	Triangle3 *tris;
+	int ntri;
+};
+
+struct TTriangle3 {
+	Triangle3;
+	Image *tx;
+};
--- /dev/null
+++ b/fns.h
@@ -1,0 +1,2 @@
+void *erealloc(void*, ulong);
+void *emalloc(ulong);
--- /dev/null
+++ b/geometry.h
@@ -1,0 +1,110 @@
+#define DEG 0.01745329251994330
+
+typedef struct Point2 Point2;
+typedef struct Point3 Point3;
+typedef double Matrix[3][3];
+typedef double Matrix3[4][4];
+typedef struct Quaternion Quaternion;
+typedef struct RFrame RFrame;
+typedef struct RFrame3 RFrame3;
+typedef struct Triangle3 Triangle3;
+
+struct Point2 {
+	double x, y, w;
+};
+
+struct Point3 {
+	double x, y, z, w;
+};
+
+struct Quaternion {
+	double r, i, j, k;
+};
+
+struct RFrame {
+	Point2 p;
+	Point2 bx, by;
+};
+
+struct RFrame3 {
+	Point3 p;
+	Point3 bx, by, bz;
+};
+
+struct Triangle3 {
+	Point3 p0, p1, p2;
+};
+
+/* Point2 */
+Point2 Pt2(double, double, double);
+Point2 Vec2(double, double);
+Point2 addpt2(Point2, Point2);
+Point2 subpt2(Point2, Point2);
+Point2 mulpt2(Point2, double);
+Point2 divpt2(Point2, double);
+Point2 lerp2(Point2, Point2, double);
+double dotvec2(Point2, Point2);
+double vec2len(Point2);
+Point2 normvec2(Point2);
+
+/* Point3 */
+Point3 Pt3(double, double, double, double);
+Point3 Vec3(double, double, double);
+Point3 addpt3(Point3, Point3);
+Point3 subpt3(Point3, Point3);
+Point3 mulpt3(Point3, double);
+Point3 divpt3(Point3, double);
+Point3 lerp3(Point3, Point3, double);
+double dotvec3(Point3, Point3);
+Point3 crossvec3(Point3, Point3);
+double vec3len(Point3);
+Point3 normvec3(Point3);
+
+/* Matrix */
+void identity(Matrix);
+void addm(Matrix, Matrix);
+void subm(Matrix, Matrix);
+void mulm(Matrix, Matrix);
+void smulm(Matrix, double);
+void transposem(Matrix);
+double detm(Matrix);
+double tracem(Matrix);
+void adjm(Matrix);
+void invm(Matrix);
+Point2 xform(Point2, Matrix);
+
+/* Matrix3 */
+void identity3(Matrix3);
+void addm3(Matrix3, Matrix3);
+void subm3(Matrix3, Matrix3);
+void mulm3(Matrix3, Matrix3);
+void smulm3(Matrix3, double);
+void transposem3(Matrix3);
+double detm3(Matrix3);
+double tracem3(Matrix3);
+void adjm3(Matrix3);
+void invm3(Matrix3);
+Point3 xform3(Point3, Matrix3);
+
+/* Quaternion */
+Quaternion Quat(double, double, double, double);
+Quaternion Quatvec(double, Point3);
+Quaternion addq(Quaternion, Quaternion);
+Quaternion subq(Quaternion, Quaternion);
+Quaternion mulq(Quaternion, Quaternion);
+Quaternion smulq(Quaternion, double);
+Quaternion sdivq(Quaternion, double);
+double dotq(Quaternion, Quaternion);
+Quaternion invq(Quaternion);
+double qlen(Quaternion);
+Quaternion normq(Quaternion);
+Point3 qrotate(Point3, Point3, double);
+
+/* RFrame */
+Point2 rframexform(Point2, RFrame);
+Point3 rframexform3(Point3, RFrame3);
+Point2 invrframexform(Point2, RFrame);
+Point3 invrframexform3(Point3, RFrame3);
+
+/* Triangle3 */
+Point3 centroid(Triangle3);
--- /dev/null
+++ b/graphics.h
@@ -1,0 +1,55 @@
+typedef enum {
+	Portho,		/* orthographic */
+	Ppersp		/* perspective */
+} Projection;
+
+typedef struct Vertex Vertex;
+typedef struct Triangle Triangle;
+typedef struct Viewport Viewport;
+typedef struct Camera Camera;
+
+struct Vertex {
+	Point3 p;	/* position */
+	Point3 n;	/* surface normal */
+	//Image tx;	/* (?) */
+};
+
+struct Triangle {
+	Point p0, p1, p2;
+};
+
+struct Camera {
+	RFrame3;		/* VCS */
+	Image *viewport;
+	double fov;		/* vertical FOV */
+	struct {
+		double n, f;	/* near and far clipping planes */
+	} clip;
+	Matrix3 proj;		/* VCS to NDC xform */
+	Projection ptype;
+};
+
+/* Triangle */
+Triangle Trian(int, int, int, int, int, int);
+Triangle Trianpt(Point, Point, Point);
+void triangle(Image *, Triangle, int, Image *, Point);
+void filltriangle(Image *, Triangle, Image *, Point);
+
+/* Camera */
+void perspective(Matrix3, double, double, double, double);
+void orthographic(Matrix3, double, double, double, double, double, double);
+void configcamera(Camera*, Image*, double, double, double, Projection);
+void placecamera(Camera*, Point3, Point3, Point3);
+void aimcamera(Camera*, Point3);
+void reloadcamera(Camera*);
+
+/* rendering */
+#define FPS2MS(n)	(1000/(n))
+#define WORLD2VCS(cp, p)	(rframexform3((p), *(cp)))
+#define VCS2NDC(cp, p)	(xform3((p), (cp)->proj))
+#define WORLD2NDC(cp, p)	(VCS2NDC((cp), WORLD2VCS((cp), (p))))
+int isclipping(Point3);
+Point toviewport(Camera*, Point3);
+Point2 fromviewport(Camera*, Point);
+void line3(Camera *c, Point3 p0, Point3 p1, int end0, int end1, Image *src);
+Point string3(Camera *c, Point3 p, Image *src, Font *f, char *s);
--- /dev/null
+++ b/libgeometry/doc/libgeometry.ms
@@ -1,0 +1,429 @@
+.TL
+libgeometry
+.AU
+Rodrigo G. López
+.sp
+rgl@antares-labs.eu
+.AI
+Antares Telecom Laboratories
+Albatera, Alicante
+.FS
+ACHTUNG! this is a
+.B "WORK IN PROGRESS"
+.FE
+.SH
+Introduction
+.PP
+.I Libgeometry is a computational geometry library that provides all
+the utilities anybody working with graphics or scientific simulations
+could need.
+.NH 1
+Data Structures
+.NH 2
+Point2
+.P1
+struct Point2 {
+	double x, y, w;
+};
+.P2
+.PP
+.I Point2
+represents a point in two-dimensional projective space, which itself
+is an extension of the two-dimensional euclidean space that allows us
+to work with vectors and compose affine transformations in a friendly
+manner.  A point
+.EQ
+gfont roman
+(x, y, w)
+.EN
+made out of homogenous coordinates
+.I x ,
+.I y ,
+and
+.I w ,
+yields a point with cartesian coordinates
+.EQ
+(x/w, y/w) .
+.EN
+.NH 2
+Point3
+.P1
+struct Point3 {
+	double x, y, z, w;
+};
+.P2
+.PP
+.I Point3
+is a point in three-dimensional projective space.
+.NH 2
+Matrix
+.P1
+typedef double Matrix[3][3];
+.P2
+.PP
+.I Matrix
+represents a 3x3 matrix, thought to compose affine transformations to
+apply to homogeneous 2D points.
+.NH 2
+Matrix3
+.P1
+typedef double Matrix3[4][4];
+.P2
+.PP
+.I Matrix3
+represents a 4x4 matrix, thought to compose affine transformations to
+apply to homogeneous 3D points.
+.NH 2
+Quaternion
+.P1
+struct Quaternion {
+	double r, i, j, k;
+};
+.P2
+.PP
+.I Quaternions
+are a numbering system that extends the complex numbers up to
+four-dimensional space, and are used to apply rotations and model
+mechanical interactions in 3D space.  Their main advantages with
+respect to their matrix relatives are increased computational and
+storage performance and gimbal lock avoidance.
+.NH 2
+RFrame
+.P1
+struct RFrame {
+	Point2 p;
+	Point2 bx, by;
+};
+.P2
+.PP
+A reference frame (or frame of reference) is
+.NH 2
+RFrame3
+.P1
+struct RFrame3 {
+	Point3 p;
+	Point3 bx, by, bz;
+};
+.P2
+.PP
+A reference frame (or frame of reference) is
+.NH 1
+Algorithms
+.NH 2
+Point2
+.SH
+Addition
+.P1
+Point2 addpt2(Point2 a, Point2 b)
+.P2
+.EQ
+a + b ~=~ left ( x sub a + x sub b ,~ y sub a + y sub b ,~ w sub a + w sub b right )
+.EN
+.SH
+Substraction
+.P1
+Point2 subpt2(Point2 a, Point2 b)
+.P2
+.EQ
+a - b ~=~ left ( x sub a - x sub b ,~ y sub a - y sub b ,~ w sub a - w sub b right )
+.EN
+.SH
+Multiplication
+.P1
+Point2 mulpt2(Point2 p, double s)
+.P2
+.EQ
+p * s ~=~ left ( xs,~ ys,~ ws right )
+.EN
+.SH
+Division
+.P1
+Point2 divpt2(Point2 p, double s)
+.P2
+.EQ
+p / s ~=~ left ( x over s ,~ y over s ,~ w over s right )
+.EN
+.SH
+Vector Dot Product
+.P1
+double dotvec2(Point2 a, Point2 b)
+.P2
+.EQ
+a vec ~•~ b vec ~=~ x sub a x sub b + y sub a y sub b
+.EN
+.SH
+Vector Magnitude/Length
+.P1
+double vec2len(Point2 v)
+.P2
+.EQ
+| v vec | ~=~ sqrt { x sup 2 + y sup 2 }
+.EN
+.SH
+Vector Normalization
+.P1
+Point2 normvec2(Point2 v)
+.P2
+.EQ
+n vec ~=~ left ( x over {| v vec |},~ y over {| v vec |} right )
+.EN
+.NH 2
+Point3
+.SH
+Addition
+.P1
+Point3 addpt3(Point3 a, Point3 b)
+.P2
+.EQ
+a + b ~=~ left ( x sub a + x sub b ,~ y sub a + y sub b ,~ z sub a + z sub b ,~ w sub a + w sub b right )
+.EN
+.SH
+Substraction
+.P1
+Point3 subpt3(Point3 a, Point3 b)
+.P2
+.EQ
+a - b ~=~ left ( x sub a - x sub b ,~ y sub a - y sub b ,~ z sub a - z sub b ,~ w sub a - w sub b right )
+.EN
+.SH
+Multiplication
+.P1
+Point3 mulpt3(Point3 p, double s)
+.P2
+.EQ
+p * s ~=~ left ( xs,~ ys,~ zs,~ ws right )
+.EN
+.SH
+Division
+.P1
+Point3 divpt3(Point3 p, double s)
+.P2
+.EQ
+p / s ~=~ left ( x over s ,~ y over s ,~ z over s ,~ w over s right )
+.EN
+.SH
+Vector Dot Product
+.P1
+double dotvec3(Point3 a, Point3 b)
+.P2
+.EQ
+a vec ~•~ b vec ~=~ x sub a x sub b + y sub a y sub b + z sub a z sub b
+.EN
+.SH
+Vector Cross Product
+.P1
+double crossvec3(Point3 a, Point3 b)
+.P2
+.EQ
+a vec ~×~ b vec ~=~ left ( y sub a z sub b - z sub a y sub b ,~
+			 z sub a x sub b - x sub a z sub b ,~
+			 x sub a y sub b - y sub a x sub b right )
+.EN
+.SH
+Vector Magnitude/Length
+.P1
+double vec3len(Point3 v)
+.P2
+.EQ
+| v vec | ~=~ sqrt { x sup 2 + y sup 2 + z sup 2 }
+.EN
+.SH
+Vector Normalization
+.P1
+Point3 normvec3(Point3 v)
+.P2
+.EQ
+n vec ~=~ left ( x over {| v vec |},~ y over {| v vec |},~ z over {| v vec |} right )
+.EN
+.NH 2
+Matrix
+.SH
+Addition
+.P1
+void addm(Matrix A, Matrix B)
+.P2
+.EQ
+( bold A + bold B ) sub {i,j} ~=~ bold A sub {i,j} + bold B sub {i,j}
+.EN
+.SH
+Substraction
+.P1
+void subm(Matrix A, Matrix B)
+.P2
+.EQ
+( bold A - bold B ) sub {i,j} ~=~ bold A sub {i,j} - bold B sub {i,j}
+.EN
+.SH
+Multiplication
+.P1
+void mulm(Matrix A, Matrix B)
+.P2
+.EQ
+left [ bold A bold B right ] sub {i,j} ~=~ sum from {k = 0} to 3-1 bold A sub {i,k} bold B sub {k,j}
+.EN
+.SH
+Transpose
+.P1
+void transposem(Matrix M)
+.P2
+.EQ
+( bold M sup T ) sub {i,j} ~=~ bold A sub {j,i}
+.EN
+.SH
+Identity
+.P1
+void identity(Matrix M)
+.P2
+.EQ
+bold M ~=~ left [ rpile {
+	1 ~ 0 ~ 0
+above	0 ~ 1 ~ 0
+above	0 ~ 0 ~ 1
+} right ]
+.EN
+.SH
+Determinant
+.P1
+double detm(Matrix M)
+.P2
+.EQ
+det( bold M ) ~=~ lpile {
+			m sub 00 ( m sub 11 m sub 22 - m sub 12 m sub 21 ) +
+above			m sub 01 ( m sub 12 m sub 20 - m sub 10 m sub 22 ) +
+above			m sub 02 ( m sub 10 m sub 21 - m sub 11 m sub 20 )
+}
+.EN
+.NH 2
+Matrix3
+.SH
+Addition
+.P1
+void addm3(Matrix3 A, Matrix3 B)
+.P2
+.EQ
+( bold A + bold B ) sub {i,j} ~=~ bold A sub {i,j} + bold B sub {i,j}
+.EN
+.SH
+Substraction
+.P1
+void subm3(Matrix3 A, Matrix3 B)
+.P2
+.EQ
+( bold A - bold B ) sub {i,j} ~=~ bold A sub {i,j} - bold B sub {i,j}
+.EN
+.SH
+Multiplication
+.P1
+void mulm3(Matrix3 A, Matrix3 B)
+.P2
+.EQ
+left [ bold A bold B right ] sub {i,j} ~=~ sum from {k = 0} to 4-1 bold A sub {i,k} bold B sub {k,j}
+.EN
+.SH
+Transpose
+.P1
+void transposem3(Matrix3 M)
+.P2
+.EQ
+( bold M sup T ) sub {i,j} ~=~ bold A sub {j,i}
+.EN
+.SH
+Identity
+.P1
+void identity3(Matrix3 M)
+.P2
+.EQ
+bold M ~=~ left [ rpile {
+	1 ~ 0 ~ 0 ~ 0
+above	0 ~ 1 ~ 0 ~ 0
+above	0 ~ 0 ~ 1 ~ 0
+above	0 ~ 0 ~ 0 ~ 1
+} right ]
+.EN
+.SH
+Determinant
+.P1
+double detm3(Matrix3 M)
+.P2
+.EQ
+det( bold M ) ~=~ rpile {
+		  m sub 00 ( m sub 11 ( m sub 22 m sub 33 - m sub 23 m sub 32 ) +
+			     m sub 12 ( m sub 23 m sub 31 - m sub 21 m sub 33 ) +
+			     m sub 13 ( m sub 21 m sub 32 - m sub 22 m sub 31 ) )
+above		 -m sub 01 ( m sub 10 ( m sub 22 m sub 33 - m sub 23 m sub 32 ) +
+			     m sub 12 ( m sub 23 m sub 30 - m sub 20 m sub 33 ) +
+			     m sub 13 ( m sub 20 m sub 32 - m sub 22 m sub 30 ) )
+above		 +m sub 02 ( m sub 10 ( m sub 21 m sub 33 - m sub 23 m sub 31 ) +
+			     m sub 11 ( m sub 23 m sub 30 - m sub 20 m sub 33 ) +
+			     m sub 13 ( m sub 20 m sub 31 - m sub 21 m sub 30 ) )
+above		 -m sub 03 ( m sub 10 ( m sub 21 m sub 32 - m sub 22 m sub 31 ) +
+			     m sub 11 ( m sub 22 m sub 30 - m sub 20 m sub 32 ) +
+			     m sub 12 ( m sub 20 m sub 31 - m sub 21 m sub 30 ) )
+}
+.EN
+.NH 2
+Quaternion
+.SH
+Addition
+.P1
+Quaternion addq(Quaternion q, Quaternion r)
+.P2
+.EQ
+q + r ~=~ ( r sub q + r sub r ,~ i sub q + i sub r ,~ j sub q + j sub r ,~ k sub q + k sub r )
+.EN
+.SH
+Substraction
+.P1
+Quaternion subq(Quaternion q, Quaternion r)
+.P2
+.EQ
+q - r ~=~ ( r sub q - r sub r ,~ i sub q - i sub r ,~ j sub q - j sub r ,~ k sub q - k sub r )
+.EN
+.SH
+Multiplication
+.P1
+Quaternion mulq(Quaternion q, Quaternion r)
+.P2
+.EQ
+q ~=~ [ r sub q ,~ v vec sub q ]
+r ~=~ [ r sub r ,~ v vec sub r ]
+qr ~=~ [ r sub q r sub r - v vec sub q • v vec sub r ,~ v vec sub r r sub q + v vec sub q r sub r + v vec sub q X v vec sub r ]
+.EN
+.SH
+Scalar Multiplication
+.P1
+Quaternion smulq(Quaternion q, double s)
+.P2
+.EQ
+qs ~=~ [ r sub q s ,~ i sub q s ,~ j sub q s ,~ k sub q s ]
+.EN
+.SH
+Inverse
+.P1
+Quaternion invq(Quaternion q)
+.P2
+.EQ
+q sup -1 ~=~ left ( r over {| q | sup 2} ,~ -i over {| q | sup 2} ,~ -j over {| q | sup 2} ,~ -k over {| q | sup 2} right )
+.EN
+.SH
+Magnitude/Length
+.P1
+double qlen(Quaternion q)
+.P2
+.EQ
+| q | ~=~ sqrt { r sup 2 + i sup 2 + j sup 2 + k sup 2 }
+.EN
+.NH 2
+RFrame
+.SH
+Change of reference
+.P1
+Point2 rframexform(Point2 p, RFrame rf)
+.P2
+.NH 2
+RFrame3
+.SH
+Change of reference
+.P1
+Point3 rframexform3(Point3 p, RFrame3 rf)
+.P2
binary files /dev/null b/libgeometry/doc/libgeometry.pdf differ
--- /dev/null
+++ b/libgeometry/doc/libgeometry.ps
@@ -1,0 +1,2799 @@
+%!PS-Adobe-2.0
+%%Version: 0.1
+%%Creator: troff, Plan 9 edition
+%%DocumentFonts: (atend)
+%%Pages: (atend)
+%%EndComments
+%
+% Version 3.3.2 prologue for troff files.
+%
+
+/#copies 1 store
+/aspectratio 1 def
+/formsperpage 1 def
+/landscape false def
+/linewidth .3 def
+/magnification 1 def
+/margin 0 def
+/orientation 0 def
+/resolution 720 def
+/rotation 1 def
+/xoffset 0 def
+/yoffset 0 def
+
+/roundpage true def
+/useclippath true def
+/pagebbox [0 0 612 792] def
+
+/R  /Times-Roman def
+/I  /Times-Italic def
+/B  /Times-Bold def
+/BI /Times-BoldItalic def
+/H  /Helvetica def
+/HI /Helvetica-Oblique def
+/HB /Helvetica-Bold def
+/HX /Helvetica-BoldOblique def
+/CW /Courier def
+/CO /Courier def
+/CI /Courier-Oblique def
+/CB /Courier-Bold def
+/CX /Courier-BoldOblique def
+/PA /Palatino-Roman def
+/PI /Palatino-Italic def
+/PB /Palatino-Bold def
+/PX /Palatino-BoldItalic def
+/Hr /Helvetica-Narrow def
+/Hi /Helvetica-Narrow-Oblique def
+/Hb /Helvetica-Narrow-Bold def
+/Hx /Helvetica-Narrow-BoldOblique def
+/KR /Bookman-Light def
+/KI /Bookman-LightItalic def
+/KB /Bookman-Demi def
+/KX /Bookman-DemiItalic def
+/AR /AvantGarde-Book def
+/AI /AvantGarde-BookOblique def
+/AB /AvantGarde-Demi def
+/AX /AvantGarde-DemiOblique def
+/NR /NewCenturySchlbk-Roman def
+/NI /NewCenturySchlbk-Italic def
+/NB /NewCenturySchlbk-Bold def
+/NX /NewCenturySchlbk-BoldItalic def
+/ZD /ZapfDingbats def
+/ZI /ZapfChancery-MediumItalic def
+/S  /S def
+/S1 /S1 def
+/GR /Symbol def
+
+/inch {72 mul} bind def
+/min {2 copy gt {exch} if pop} bind def
+
+/setup {
+	counttomark 2 idiv {def} repeat pop
+
+	landscape {/orientation 90 orientation add def} if
+	/scaling 72 resolution div def
+	linewidth setlinewidth
+	1 setlinecap
+
+	pagedimensions
+	xcenter ycenter translate
+	orientation rotation mul rotate
+	width 2 div neg height 2 div translate
+	xoffset inch yoffset inch neg translate
+	margin 2 div dup neg translate
+	magnification dup aspectratio mul scale
+	scaling scaling scale
+
+	addmetrics
+	0 0 moveto
+} def
+
+/pagedimensions {
+	useclippath userdict /gotpagebbox known not and {
+		/pagebbox [clippath pathbbox newpath] def
+		roundpage currentdict /roundpagebbox known and {roundpagebbox} if
+	} if
+	pagebbox aload pop
+	4 -1 roll exch 4 1 roll 4 copy
+	landscape {4 2 roll} if
+	sub /width exch def
+	sub /height exch def
+	add 2 div /xcenter exch def
+	add 2 div /ycenter exch def
+	userdict /gotpagebbox true put
+} def
+
+/addmetrics {
+	/Symbol /S null Sdefs cf
+	/Times-Roman /S1 StandardEncoding dup length array copy S1defs cf
+} def
+
+/pagesetup {
+	/page exch def
+	currentdict /pagedict known currentdict page known and {
+		page load pagedict exch get cvx exec
+	} if
+} def
+
+/decodingdefs [
+	{counttomark 2 idiv {y moveto show} repeat}
+	{neg /y exch def counttomark 2 idiv {y moveto show} repeat}
+	{neg moveto {2 index stringwidth pop sub exch div 0 32 4 -1 roll widthshow} repeat}
+	{neg moveto {spacewidth sub 0.0 32 4 -1 roll widthshow} repeat}
+	{counttomark 2 idiv {y moveto show} repeat}
+	{neg setfunnytext}
+] def
+
+/setdecoding {/t decodingdefs 3 -1 roll get bind def} bind def
+
+/w {neg moveto show} bind def
+/m {neg dup /y exch def moveto} bind def
+/done {/lastpage where {pop lastpage} if} def
+
+/f {
+	dup /font exch def findfont exch
+	dup /ptsize exch def scaling div dup /size exch def scalefont setfont
+	linewidth ptsize mul scaling 10 mul div setlinewidth
+	/spacewidth ( ) stringwidth pop def
+} bind def
+
+/changefont {
+	/fontheight exch def
+	/fontslant exch def
+	currentfont [
+		1 0
+		fontheight ptsize div fontslant sin mul fontslant cos div
+		fontheight ptsize div
+		0 0
+	] makefont setfont
+} bind def
+
+/sf {f} bind def
+
+/cf {
+	dup length 2 idiv
+	/entries exch def
+	/chtab exch def
+	/newencoding exch def
+	/newfont exch def
+
+	findfont dup length 1 add dict
+	/newdict exch def
+	{1 index /FID ne {newdict 3 1 roll put}{pop pop} ifelse} forall
+
+	newencoding type /arraytype eq {newdict /Encoding newencoding put} if
+
+	newdict /Metrics entries dict put
+	newdict /Metrics get
+	begin
+		chtab aload pop
+		1 1 entries {pop def} for
+		newfont newdict definefont pop
+	end
+} bind def
+
+%
+% A few arrays used to adjust reference points and character widths in some
+% of the printer resident fonts. If square roots are too high try changing
+% the lines describing /radical and /radicalex to,
+%
+%	/radical	[0 -75 550 0]
+%	/radicalex	[-50 -75 500 0]
+%
+% Move braceleftbt a bit - default PostScript character is off a bit.
+%
+
+/Sdefs [
+	/bracketlefttp		[201 500]
+	/bracketleftbt		[201 500]
+	/bracketrighttp		[-81 380]
+	/bracketrightbt		[-83 380]
+	/braceleftbt		[203 490]
+	/bracketrightex		[220 -125 500 0]
+	/radical		[0 0 550 0]
+	/radicalex		[-50 0 500 0]
+	/parenleftex		[-20 -170 0 0]
+	/integral		[100 -50 500 0]
+	/infinity		[10 -75 730 0]
+] def
+
+/S1defs [
+	/underscore		[0 80 500 0]
+	/endash			[7 90 650 0]
+] def
+%
+% Tries to round clipping path dimensions, as stored in array pagebbox, so they
+% match one of the known sizes in the papersizes array. Lower left coordinates
+% are always set to 0.
+%
+
+/roundpagebbox {
+    7 dict begin
+	/papersizes [8.5 inch 11 inch 14 inch 17 inch] def
+
+	/mappapersize {
+		/val exch def
+		/slop .5 inch def
+		/diff slop def
+		/j 0 def
+		0 1 papersizes length 1 sub {
+			/i exch def
+			papersizes i get val sub abs
+			dup diff le {/diff exch def /j i def} {pop} ifelse
+		} for
+		diff slop lt {papersizes j get} {val} ifelse
+	} def
+
+	pagebbox 0 0 put
+	pagebbox 1 0 put
+	pagebbox dup 2 get mappapersize 2 exch put
+	pagebbox dup 3 get mappapersize 3 exch put
+    end
+} bind def
+
+%%EndProlog
+%%BeginSetup
+mark
+%
+% Encoding vector and redefinition of findfont for the ISO Latin1 standard.
+% The 18 characters missing from ROM based fonts on older printers are noted
+% below.
+%
+
+/ISOLatin1Encoding [
+	/.notdef
+	/.notdef
+	/.notdef
+	/.notdef
+	/.notdef
+	/.notdef
+	/.notdef
+	/.notdef
+	/.notdef
+	/.notdef
+	/.notdef
+	/.notdef
+	/.notdef
+	/.notdef
+	/.notdef
+	/.notdef
+	/.notdef
+	/.notdef
+	/.notdef
+	/.notdef
+	/.notdef
+	/.notdef
+	/.notdef
+	/.notdef
+	/.notdef
+	/.notdef
+	/.notdef
+	/.notdef
+	/.notdef
+	/.notdef
+	/.notdef
+	/.notdef
+	/space
+	/exclam
+	/quotedbl
+	/numbersign
+	/dollar
+	/percent
+	/ampersand
+	/quoteright
+	/parenleft
+	/parenright
+	/asterisk
+	/plus
+	/comma
+	/minus
+	/period
+	/slash
+	/zero
+	/one
+	/two
+	/three
+	/four
+	/five
+	/six
+	/seven
+	/eight
+	/nine
+	/colon
+	/semicolon
+	/less
+	/equal
+	/greater
+	/question
+	/at
+	/A
+	/B
+	/C
+	/D
+	/E
+	/F
+	/G
+	/H
+	/I
+	/J
+	/K
+	/L
+	/M
+	/N
+	/O
+	/P
+	/Q
+	/R
+	/S
+	/T
+	/U
+	/V
+	/W
+	/X
+	/Y
+	/Z
+	/bracketleft
+	/backslash
+	/bracketright
+	/asciicircum
+	/underscore
+	/quoteleft
+	/a
+	/b
+	/c
+	/d
+	/e
+	/f
+	/g
+	/h
+	/i
+	/j
+	/k
+	/l
+	/m
+	/n
+	/o
+	/p
+	/q
+	/r
+	/s
+	/t
+	/u
+	/v
+	/w
+	/x
+	/y
+	/z
+	/braceleft
+	/bar
+	/braceright
+	/asciitilde
+	/.notdef
+	/.notdef
+	/.notdef
+	/.notdef
+	/.notdef
+	/.notdef
+	/.notdef
+	/.notdef
+	/.notdef
+	/.notdef
+	/.notdef
+	/.notdef
+	/.notdef
+	/.notdef
+	/.notdef
+	/.notdef
+	/.notdef
+	/dotlessi
+	/grave
+	/acute
+	/circumflex
+	/tilde
+	/macron
+	/breve
+	/dotaccent
+	/dieresis
+	/.notdef
+	/ring
+	/cedilla
+	/.notdef
+	/hungarumlaut
+	/ogonek
+	/caron
+	/space
+	/exclamdown
+	/cent
+	/sterling
+	/currency
+	/yen
+	/brokenbar		% missing
+	/section
+	/dieresis
+	/copyright
+	/ordfeminine
+	/guillemotleft
+	/logicalnot
+	/hyphen
+	/registered
+	/macron
+	/degree			% missing
+	/plusminus		% missing
+	/twosuperior		% missing
+	/threesuperior		% missing
+	/acute
+	/mu			% missing
+	/paragraph
+	/periodcentered
+	/cedilla
+	/onesuperior		% missing
+	/ordmasculine
+	/guillemotright
+	/onequarter		% missing
+	/onehalf		% missing
+	/threequarters		% missing
+	/questiondown
+	/Agrave
+	/Aacute
+	/Acircumflex
+	/Atilde
+	/Adieresis
+	/Aring
+	/AE
+	/Ccedilla
+	/Egrave
+	/Eacute
+	/Ecircumflex
+	/Edieresis
+	/Igrave
+	/Iacute
+	/Icircumflex
+	/Idieresis
+	/Eth			% missing
+	/Ntilde
+	/Ograve
+	/Oacute
+	/Ocircumflex
+	/Otilde
+	/Odieresis
+	/multiply		% missing
+	/Oslash
+	/Ugrave
+	/Uacute
+	/Ucircumflex
+	/Udieresis
+	/Yacute			% missing
+	/Thorn			% missing
+	/germandbls
+	/agrave
+	/aacute
+	/acircumflex
+	/atilde
+	/adieresis
+	/aring
+	/ae
+	/ccedilla
+	/egrave
+	/eacute
+	/ecircumflex
+	/edieresis
+	/igrave
+	/iacute
+	/icircumflex
+	/idieresis
+	/eth			% missing
+	/ntilde
+	/ograve
+	/oacute
+	/ocircumflex
+	/otilde
+	/odieresis
+	/divide			% missing
+	/oslash
+	/ugrave
+	/uacute
+	/ucircumflex
+	/udieresis
+	/yacute			% missing
+	/thorn			% missing
+	/ydieresis
+] def
+
+/NewFontDirectory FontDirectory maxlength dict def
+
+%
+% Apparently no guarantee findfont is defined in systemdict so the obvious
+%
+%	systemdict /findfont get exec
+%
+% can generate an error. So far the only exception is a VT600 (version 48.0).
+%
+
+userdict /@RealFindfont known not {
+	userdict begin
+		/@RealFindfont systemdict begin /findfont load end def
+	end
+} if
+
+/findfont {
+	dup NewFontDirectory exch known not {
+		dup
+		%dup systemdict /findfont get exec	% not always in systemdict
+		dup userdict /@RealFindfont get exec
+		dup /Encoding get StandardEncoding eq {
+			dup length dict begin
+				{1 index /FID ne {def}{pop pop} ifelse} forall
+				/Encoding ISOLatin1Encoding def
+				currentdict
+			end
+			/DummyFontName exch definefont
+		} if
+		NewFontDirectory 3 1 roll put
+	} if
+	NewFontDirectory exch get
+} bind def
+
+%%Patch from lp
+%%EndPatch from lp
+
+setup
+%%EndSetup
+%%Page: 1 1
+/saveobj save def
+mark
+1 pagesetup
+12 /LucidaSans-Demi f
+(libgeometry) 2507 1220 w
+10 /LucidaSans-Italic f
+(Rodrigo G. L\363pez) 2469 1480 w
+(rgl@antares-labs.eu) 2377 1760 w
+10 /LucidaSansUnicode00 f
+(Antares Telecom Laboratories) 2156 1960 w
+(Albatera, Alicante) 2451 2100 w
+10 /LucidaSans-Demi f
+(1.) 720 2700 w
+(Data Structures) 873 2700 w
+(1.1.) 720 2940 w
+(Point2) 962 2940 w
+9 /LucidaTypewriter f
+(struct) 920 3110 w
+(Point2) 1375 3110 w
+({) 1830 3110 w
+(double) 1440 3220 w
+(x,) 1895 3220 w
+(y,) 2090 3220 w
+(w;) 2285 3220 w
+(};) 920 3330 w
+10 /LucidaSans-Italic f
+(Point2) 970 3546 w
+10 /LucidaSansUnicode00 f
+(represents) 1324 3546 w
+(a) 1886 3546 w
+(point) 1989 3546 w
+(in) 2289 3546 w
+(two-dimensional) 2428 3546 w
+(projective) 3299 3546 w
+(space,) 3823 3546 w
+(which) 4179 3546 w
+(itself) 4508 3546 w
+(is) 4795 3546 w
+(an) 4923 3546 w
+(extension) 720 3666 w
+(of) 1240 3666 w
+(the) 1383 3666 w
+(two-dimensional) 1583 3666 w
+(euclidean) 2451 3666 w
+(space) 2959 3666 w
+(that) 3280 3666 w
+(allows) 3516 3666 w
+(us) 3862 3666 w
+(to) 4019 3666 w
+(work) 4161 3666 w
+(with) 4442 3666 w
+(vectors) 4691 3666 w
+(and compose affine transformations in a friendly manner.) 720 3786 w
+(A point) 3589 3786 w
+(\() 2696 3966 w
+(x) 2737 3966 w
+(,) 2806 3966 w
+(y) 2846 3966 w
+(,) 2906 3966 w
+(w) 2946 3966 w
+(\)) 3031 3966 w
+(made) 720 4146 w
+(out) 1027 4146 w
+(of) 1227 4146 w
+(homogenous) 1365 4146 w
+(coordinates) 2036 4146 w
+10 /LucidaSans-Italic f
+(x) 2643 4146 w
+10 /LucidaSansUnicode00 f
+(,) 2697 4146 w
+10 /LucidaSans-Italic f
+(y) 2769 4146 w
+10 /LucidaSansUnicode00 f
+(,) 2824 4146 w
+(and) 2896 4146 w
+10 /LucidaSans-Italic f
+(w) 3116 4146 w
+10 /LucidaSansUnicode00 f
+(,) 3194 4146 w
+(yields) 3267 4146 w
+(a) 3588 4146 w
+(point) 3684 4146 w
+(with) 3977 4146 w
+(cartesian) 4223 4146 w
+(coordi\255) 4701 4146 w
+(nates) 720 4266 w
+(\() 2588 4446 w
+(x) 2629 4446 w
+(/) 2698 4446 w
+(w) 2759 4446 w
+(,) 2844 4446 w
+(y) 2884 4446 w
+(/) 2944 4446 w
+(w) 3005 4446 w
+(\)) 3090 4446 w
+(.) 3139 4446 w
+10 /LucidaSans-Demi f
+(1.2.) 720 4746 w
+(Point3) 962 4746 w
+9 /LucidaTypewriter f
+(struct) 920 4916 w
+(Point3) 1375 4916 w
+({) 1830 4916 w
+(double) 1440 5026 w
+(x,) 1895 5026 w
+(y,) 2090 5026 w
+(z,) 2285 5026 w
+(w;) 2480 5026 w
+(};) 920 5136 w
+10 /LucidaSans-Italic f
+(Point3) 970 5352 w
+10 /LucidaSansUnicode00 f
+(is a point in three-dimensional projective space.) 1309 5352 w
+10 /LucidaSans-Demi f
+(1.3.) 720 5592 w
+(Matrix) 962 5592 w
+9 /LucidaTypewriter f
+(typedef) 920 5762 w
+(double) 1440 5762 w
+(Matrix[3][3];) 1895 5762 w
+10 /LucidaSans-Italic f
+(Matrix) 970 5978 w
+10 /LucidaSansUnicode00 f
+(represents) 1341 5978 w
+(a) 1914 5978 w
+(3x3) 2028 5978 w
+(matrix,) 2274 5978 w
+(thought) 2681 5978 w
+(to) 3123 5978 w
+(compose) 3280 5978 w
+(affine) 3775 5978 w
+(transformations) 4110 5978 w
+(to) 4942 5978 w
+(apply to homogeneous 2D points.) 720 6098 w
+10 /LucidaSans-Demi f
+(1.4.) 720 6338 w
+(Matrix3) 962 6338 w
+9 /LucidaTypewriter f
+(typedef) 920 6508 w
+(double) 1440 6508 w
+(Matrix3[4][4];) 1895 6508 w
+10 /LucidaSans-Italic f
+(Matrix3) 970 6724 w
+10 /LucidaSansUnicode00 f
+(represents) 1398 6724 w
+(a) 1964 6724 w
+(4x4) 2071 6724 w
+(matrix,) 2310 6724 w
+(thought) 2711 6724 w
+(to) 3147 6724 w
+(compose) 3298 6724 w
+(affine) 3787 6724 w
+(transformations) 4116 6724 w
+(to) 4942 6724 w
+(apply to homogeneous 3D points.) 720 6844 w
+8 /S1 f
+(__________________) 720 6980 w
+8 /LucidaSansUnicode00 f
+(ACHTUNG!) 720 7080 w
+(this) 1163 7080 w
+(is) 1333 7080 w
+(a) 1423 7080 w
+8 /LucidaSans-Demi f
+(WORK) 1493 7080 w
+(IN) 1769 7080 w
+(PROGRESS) 1883 7080 w
+cleartomark
+showpage
+saveobj restore
+%%EndPage: 1 1
+%%Page: 2 2
+/saveobj save def
+mark
+2 pagesetup
+10 /LucidaSansUnicode00 f
+(\255 2 \255) 2783 480 w
+10 /LucidaSans-Demi f
+(1.5.) 720 840 w
+(Quaternion) 962 840 w
+9 /LucidaTypewriter f
+(struct) 920 1010 w
+(Quaternion) 1375 1010 w
+({) 2090 1010 w
+(double) 1440 1120 w
+(r,) 1895 1120 w
+(i,) 2090 1120 w
+(j,) 2285 1120 w
+(k;) 2480 1120 w
+(};) 920 1230 w
+10 /LucidaSans-Italic f
+(Quaternions) 970 1446 w
+10 /LucidaSansUnicode00 f
+(are) 1623 1446 w
+(a) 1829 1446 w
+(numbering) 1938 1446 w
+(system) 2522 1446 w
+(that) 2916 1446 w
+(extends) 3161 1446 w
+(the) 3601 1446 w
+(complex) 3810 1446 w
+(numbers) 4279 1446 w
+(up) 4762 1446 w
+(to) 4942 1446 w
+(four-dimensional) 720 1566 w
+(space,) 1607 1566 w
+(and) 1953 1566 w
+(are) 2171 1566 w
+(used) 2361 1566 w
+(to) 2631 1566 w
+(apply) 2767 1566 w
+(rotations) 3067 1566 w
+(and) 3539 1566 w
+(model) 3757 1566 w
+(mechanical) 4096 1566 w
+(interac\255) 4676 1566 w
+(tions) 720 1686 w
+(in) 1015 1686 w
+(3D) 1161 1686 w
+(space.) 1354 1686 w
+(Their) 1749 1686 w
+(main) 2055 1686 w
+(advantages) 2349 1686 w
+(with) 2952 1686 w
+(respect) 3212 1686 w
+(to) 3622 1686 w
+(their) 3775 1686 w
+(matrix) 4055 1686 w
+(relatives) 4426 1686 w
+(are) 4888 1686 w
+(increased computational and storage performance and gimbal lock avoidance.) 720 1806 w
+10 /LucidaSans-Demi f
+(2.) 720 2046 w
+(Algorithms) 873 2046 w
+(2.1.) 720 2286 w
+(Point2) 962 2286 w
+(Addition) 720 2526 w
+9 /LucidaTypewriter f
+(Point2) 920 2696 w
+(addpt2\(Point2) 1375 2696 w
+(a,) 2285 2696 w
+(Point2) 2480 2696 w
+(b\)) 2935 2696 w
+10 /LucidaSansUnicode00 f
+(a) 2051 2971 w
+10 /S f
+(+) 2122 2971 w
+10 /LucidaSansUnicode00 f
+(b) 2193 2971 w
+10 /S f
+(=) 2312 2971 w
+10 /LucidaSansUnicode00 f
+10 /S f
+(\354) 2431 2934 w
+(\356) 2431 3034 w
+10 /LucidaSansUnicode00 f
+(x) 2480 2971 w
+7 /LucidaSansUnicode00 f
+(a) 2552 2991 w
+10 /S f
+(+) 2615 2971 w
+10 /LucidaSansUnicode00 f
+(x) 2686 2971 w
+7 /LucidaSansUnicode00 f
+(b) 2758 2991 w
+10 /LucidaSansUnicode00 f
+(,) 2818 2971 w
+(y) 2898 2971 w
+7 /LucidaSansUnicode00 f
+(a) 2961 2991 w
+10 /S f
+(+) 3024 2971 w
+10 /LucidaSansUnicode00 f
+(y) 3095 2971 w
+7 /LucidaSansUnicode00 f
+(b) 3158 2991 w
+10 /LucidaSansUnicode00 f
+(,) 3218 2971 w
+(w) 3298 2971 w
+7 /LucidaSansUnicode00 f
+(a) 3386 2991 w
+10 /S f
+(+) 3449 2971 w
+10 /LucidaSansUnicode00 f
+(w) 3520 2971 w
+7 /LucidaSansUnicode00 f
+(b) 3608 2991 w
+10 /S f
+(\374) 3660 2934 w
+(\376) 3660 3034 w
+10 /LucidaSans-Demi f
+(Substraction) 720 3326 w
+9 /LucidaTypewriter f
+(Point2) 920 3496 w
+(subpt2\(Point2) 1375 3496 w
+(a,) 2285 3496 w
+(Point2) 2480 3496 w
+(b\)) 2935 3496 w
+10 /LucidaSansUnicode00 f
+(a) 2051 3771 w
+10 /S f
+(-) 2122 3771 w
+10 /LucidaSansUnicode00 f
+(b) 2193 3771 w
+10 /S f
+(=) 2312 3771 w
+10 /LucidaSansUnicode00 f
+10 /S f
+(\354) 2431 3734 w
+(\356) 2431 3834 w
+10 /LucidaSansUnicode00 f
+(x) 2480 3771 w
+7 /LucidaSansUnicode00 f
+(a) 2552 3791 w
+10 /S f
+(-) 2615 3771 w
+10 /LucidaSansUnicode00 f
+(x) 2686 3771 w
+7 /LucidaSansUnicode00 f
+(b) 2758 3791 w
+10 /LucidaSansUnicode00 f
+(,) 2818 3771 w
+(y) 2898 3771 w
+7 /LucidaSansUnicode00 f
+(a) 2961 3791 w
+10 /S f
+(-) 3024 3771 w
+10 /LucidaSansUnicode00 f
+(y) 3095 3771 w
+7 /LucidaSansUnicode00 f
+(b) 3158 3791 w
+10 /LucidaSansUnicode00 f
+(,) 3218 3771 w
+(w) 3298 3771 w
+7 /LucidaSansUnicode00 f
+(a) 3386 3791 w
+10 /S f
+(-) 3449 3771 w
+10 /LucidaSansUnicode00 f
+(w) 3520 3771 w
+7 /LucidaSansUnicode00 f
+(b) 3608 3791 w
+10 /S f
+(\374) 3660 3734 w
+(\376) 3660 3834 w
+10 /LucidaSans-Demi f
+(Multiplication) 720 4126 w
+9 /LucidaTypewriter f
+(Point2) 920 4296 w
+(mulpt2\(Point2) 1375 4296 w
+(p,) 2285 4296 w
+(double) 2480 4296 w
+(s\)) 2935 4296 w
+10 /LucidaSansUnicode00 f
+(p) 2395 4536 w
+(*) 2466 4536 w
+(s) 2522 4536 w
+10 /S f
+(=) 2629 4536 w
+10 /LucidaSansUnicode00 f
+10 /S f
+(\354) 2748 4499 w
+(\356) 2748 4599 w
+10 /LucidaSansUnicode00 f
+(xs) 2797 4546 w
+(,) 2917 4546 w
+(ys) 2997 4546 w
+(,) 3108 4546 w
+(ws) 3188 4546 w
+10 /S f
+(\374) 3316 4499 w
+(\376) 3316 4599 w
+10 /LucidaSans-Demi f
+(Division) 720 4841 w
+9 /LucidaTypewriter f
+(Point2) 920 5011 w
+(divpt2\(Point2) 1375 5011 w
+(p,) 2285 5011 w
+(double) 2480 5011 w
+(s\)) 2935 5011 w
+10 /LucidaSansUnicode00 f
+(p) 2394 5336 w
+(/) 2465 5336 w
+(s) 2526 5336 w
+10 /S f
+(=) 2633 5336 w
+10 /LucidaSansUnicode00 f
+10 /S f
+(\354) 2752 5249 w
+(\357) 2752 5349 w
+(\356) 2752 5449 w
+10 /LucidaSansUnicode00 f
+(s) 2831 5406 w
+(x) 2826 5276 w
+10 /S1 f
+(_) 2811 5306 w
+(_) 2852 5306 w
+10 /LucidaSansUnicode00 f
+(,) 2920 5336 w
+(s) 3025 5406 w
+(y) 3025 5276 w
+10 /S1 f
+(_) 3010 5306 w
+(_) 3042 5306 w
+10 /LucidaSansUnicode00 f
+(,) 3110 5336 w
+(s) 3228 5406 w
+(w) 3215 5276 w
+10 /S1 f
+(_) 3200 5306 w
+(__) 3207 5306 w
+10 /S f
+(\374) 3317 5249 w
+(\357) 3317 5349 w
+(\376) 3317 5449 w
+10 /LucidaSans-Demi f
+(Vector Dot Product) 720 5741 w
+9 /LucidaTypewriter f
+(double) 920 5911 w
+(dotvec2\(Point2) 1375 5911 w
+(a,) 2350 5911 w
+(Point2) 2545 5911 w
+(b\)) 3000 5911 w
+10 /LucidaSansUnicode00 f
+(a) 2375 6156 w
+7 /LucidaSansUnicode21 f
+(\222) 2370 6106 w
+10 /LucidaSansUnicode00 f
+10 /LucidaSansUnicode20 f
+(") 2479 6156 w
+10 /LucidaSansUnicode00 f
+(b) 2583 6156 w
+7 /LucidaSansUnicode21 f
+(\222) 2582 6081 w
+10 /LucidaSansUnicode00 f
+10 /S f
+(=) 2703 6156 w
+10 /LucidaSansUnicode00 f
+(x) 2814 6156 w
+7 /LucidaSansUnicode00 f
+(a) 2886 6176 w
+10 /LucidaSansUnicode00 f
+(x) 2941 6156 w
+7 /LucidaSansUnicode00 f
+(b) 3013 6176 w
+10 /S f
+(+) 3081 6156 w
+10 /LucidaSansUnicode00 f
+(y) 3152 6156 w
+7 /LucidaSansUnicode00 f
+(a) 3215 6176 w
+10 /LucidaSansUnicode00 f
+(y) 3270 6156 w
+7 /LucidaSansUnicode00 f
+(b) 3333 6176 w
+10 /LucidaSans-Demi f
+(Vector Magnitude/Length) 720 6456 w
+9 /LucidaTypewriter f
+(double) 920 6626 w
+(vec2len\(Point2) 1375 6626 w
+(v\)) 2350 6626 w
+10 /LucidaSansUnicode00 f
+(|) 2509 6901 w
+(v) 2557 6884 w
+7 /LucidaSansUnicode21 f
+(\222) 2550 6834 w
+10 /LucidaSansUnicode00 f
+(|) 2609 6901 w
+10 /S f
+(=) 2705 6884 w
+10 /LucidaSansUnicode00 f
+12 /LucidaSansUnicode22 f
+(\032) 2816 6884 w
+12 /S f
+(`) 2913 6884 w
+(`````) 2943 6884 w
+10 /LucidaSansUnicode00 f
+(x) 2921 6884 w
+7 /LucidaSansUnicode00 f
+(2) 2987 6844 w
+10 /S f
+(+) 3055 6884 w
+10 /LucidaSansUnicode00 f
+(y) 3126 6884 w
+7 /LucidaSansUnicode00 f
+(2) 3183 6844 w
+cleartomark
+showpage
+saveobj restore
+%%EndPage: 2 2
+%%Page: 3 3
+/saveobj save def
+mark
+3 pagesetup
+10 /LucidaSansUnicode00 f
+(\255 3 \255) 2783 480 w
+10 /LucidaSans-Demi f
+(Vector Normalization) 720 840 w
+9 /LucidaTypewriter f
+(Point2) 920 1010 w
+(normvec2\(Point2) 1375 1010 w
+(v\)) 2415 1010 w
+10 /LucidaSansUnicode00 f
+(n) 2502 1335 w
+7 /LucidaSansUnicode21 f
+(\222) 2500 1285 w
+10 /LucidaSansUnicode00 f
+10 /S f
+(=) 2620 1335 w
+10 /LucidaSansUnicode00 f
+10 /S f
+(\354) 2739 1248 w
+(\357) 2739 1348 w
+(\356) 2739 1448 w
+10 /LucidaSansUnicode00 f
+(|) 2813 1447 w
+(v) 2861 1430 w
+7 /LucidaSansUnicode21 f
+(\222) 2854 1380 w
+10 /LucidaSansUnicode00 f
+(|) 2913 1447 w
+(x) 2841 1275 w
+10 /S1 f
+(_) 2799 1305 w
+(__) 2845 1305 w
+10 /LucidaSansUnicode00 f
+(,) 2963 1335 w
+(|) 3068 1447 w
+(v) 3116 1430 w
+7 /LucidaSansUnicode21 f
+(\222) 3109 1380 w
+10 /LucidaSansUnicode00 f
+(|) 3168 1447 w
+(y) 3100 1275 w
+10 /S1 f
+(_) 3053 1305 w
+(__) 3099 1305 w
+10 /S f
+(\374) 3209 1248 w
+(\357) 3209 1348 w
+(\376) 3209 1448 w
+10 /LucidaSans-Demi f
+(2.2.) 720 1740 w
+(Point3) 962 1740 w
+(Addition) 720 1980 w
+9 /LucidaTypewriter f
+(Point3) 920 2150 w
+(addpt3\(Point3) 1375 2150 w
+(a,) 2285 2150 w
+(Point3) 2480 2150 w
+(b\)) 2935 2150 w
+10 /LucidaSansUnicode00 f
+(a) 1846 2425 w
+10 /S f
+(+) 1917 2425 w
+10 /LucidaSansUnicode00 f
+(b) 1988 2425 w
+10 /S f
+(=) 2107 2425 w
+10 /LucidaSansUnicode00 f
+10 /S f
+(\354) 2226 2388 w
+(\356) 2226 2488 w
+10 /LucidaSansUnicode00 f
+(x) 2275 2425 w
+7 /LucidaSansUnicode00 f
+(a) 2347 2445 w
+10 /S f
+(+) 2410 2425 w
+10 /LucidaSansUnicode00 f
+(x) 2481 2425 w
+7 /LucidaSansUnicode00 f
+(b) 2553 2445 w
+10 /LucidaSansUnicode00 f
+(,) 2613 2425 w
+(y) 2693 2425 w
+7 /LucidaSansUnicode00 f
+(a) 2756 2445 w
+10 /S f
+(+) 2819 2425 w
+10 /LucidaSansUnicode00 f
+(y) 2890 2425 w
+7 /LucidaSansUnicode00 f
+(b) 2953 2445 w
+10 /LucidaSansUnicode00 f
+(,) 3013 2425 w
+(z) 3093 2425 w
+7 /LucidaSansUnicode00 f
+(a) 3161 2445 w
+10 /S f
+(+) 3224 2425 w
+10 /LucidaSansUnicode00 f
+(z) 3295 2425 w
+7 /LucidaSansUnicode00 f
+(b) 3363 2445 w
+10 /LucidaSansUnicode00 f
+(,) 3423 2425 w
+(w) 3503 2425 w
+7 /LucidaSansUnicode00 f
+(a) 3591 2445 w
+10 /S f
+(+) 3654 2425 w
+10 /LucidaSansUnicode00 f
+(w) 3725 2425 w
+7 /LucidaSansUnicode00 f
+(b) 3813 2445 w
+10 /S f
+(\374) 3865 2388 w
+(\376) 3865 2488 w
+10 /LucidaSans-Demi f
+(Substraction) 720 2780 w
+9 /LucidaTypewriter f
+(Point3) 920 2950 w
+(subpt3\(Point3) 1375 2950 w
+(a,) 2285 2950 w
+(Point3) 2480 2950 w
+(b\)) 2935 2950 w
+10 /LucidaSansUnicode00 f
+(a) 1846 3225 w
+10 /S f
+(-) 1917 3225 w
+10 /LucidaSansUnicode00 f
+(b) 1988 3225 w
+10 /S f
+(=) 2107 3225 w
+10 /LucidaSansUnicode00 f
+10 /S f
+(\354) 2226 3188 w
+(\356) 2226 3288 w
+10 /LucidaSansUnicode00 f
+(x) 2275 3225 w
+7 /LucidaSansUnicode00 f
+(a) 2347 3245 w
+10 /S f
+(-) 2410 3225 w
+10 /LucidaSansUnicode00 f
+(x) 2481 3225 w
+7 /LucidaSansUnicode00 f
+(b) 2553 3245 w
+10 /LucidaSansUnicode00 f
+(,) 2613 3225 w
+(y) 2693 3225 w
+7 /LucidaSansUnicode00 f
+(a) 2756 3245 w
+10 /S f
+(-) 2819 3225 w
+10 /LucidaSansUnicode00 f
+(y) 2890 3225 w
+7 /LucidaSansUnicode00 f
+(b) 2953 3245 w
+10 /LucidaSansUnicode00 f
+(,) 3013 3225 w
+(z) 3093 3225 w
+7 /LucidaSansUnicode00 f
+(a) 3161 3245 w
+10 /S f
+(-) 3224 3225 w
+10 /LucidaSansUnicode00 f
+(z) 3295 3225 w
+7 /LucidaSansUnicode00 f
+(b) 3363 3245 w
+10 /LucidaSansUnicode00 f
+(,) 3423 3225 w
+(w) 3503 3225 w
+7 /LucidaSansUnicode00 f
+(a) 3591 3245 w
+10 /S f
+(-) 3654 3225 w
+10 /LucidaSansUnicode00 f
+(w) 3725 3225 w
+7 /LucidaSansUnicode00 f
+(b) 3813 3245 w
+10 /S f
+(\374) 3865 3188 w
+(\376) 3865 3288 w
+10 /LucidaSans-Demi f
+(Multiplication) 720 3580 w
+9 /LucidaTypewriter f
+(Point3) 920 3750 w
+(mulpt3\(Point3) 1375 3750 w
+(p,) 2285 3750 w
+(double) 2480 3750 w
+(s\)) 2935 3750 w
+10 /LucidaSansUnicode00 f
+(p) 2297 3990 w
+(*) 2368 3990 w
+(s) 2424 3990 w
+10 /S f
+(=) 2531 3990 w
+10 /LucidaSansUnicode00 f
+10 /S f
+(\354) 2650 3953 w
+(\356) 2650 4053 w
+10 /LucidaSansUnicode00 f
+(xs) 2699 4000 w
+(,) 2819 4000 w
+(ys) 2899 4000 w
+(,) 3010 4000 w
+(zs) 3090 4000 w
+(,) 3206 4000 w
+(ws) 3286 4000 w
+10 /S f
+(\374) 3414 3953 w
+(\376) 3414 4053 w
+10 /LucidaSans-Demi f
+(Division) 720 4295 w
+9 /LucidaTypewriter f
+(Point3) 920 4465 w
+(divpt3\(Point3) 1375 4465 w
+(p,) 2285 4465 w
+(double) 2480 4465 w
+(s\)) 2935 4465 w
+10 /LucidaSansUnicode00 f
+(p) 2296 4790 w
+(/) 2367 4790 w
+(s) 2428 4790 w
+10 /S f
+(=) 2535 4790 w
+10 /LucidaSansUnicode00 f
+10 /S f
+(\354) 2654 4703 w
+(\357) 2654 4803 w
+(\356) 2654 4903 w
+10 /LucidaSansUnicode00 f
+(s) 2733 4860 w
+(x) 2728 4730 w
+10 /S1 f
+(_) 2713 4760 w
+(_) 2754 4760 w
+10 /LucidaSansUnicode00 f
+(,) 2822 4790 w
+(s) 2927 4860 w
+(y) 2927 4730 w
+10 /S1 f
+(_) 2912 4760 w
+(_) 2944 4760 w
+10 /LucidaSansUnicode00 f
+(,) 3012 4790 w
+(s) 3120 4860 w
+(z) 3117 4730 w
+10 /S1 f
+(_) 3102 4760 w
+(_) 3139 4760 w
+10 /LucidaSansUnicode00 f
+(,) 3207 4790 w
+(s) 3325 4860 w
+(w) 3312 4730 w
+10 /S1 f
+(_) 3297 4760 w
+(__) 3304 4760 w
+10 /S f
+(\374) 3414 4703 w
+(\357) 3414 4803 w
+(\376) 3414 4903 w
+10 /LucidaSans-Demi f
+(Vector Dot Product) 720 5195 w
+9 /LucidaTypewriter f
+(double) 920 5365 w
+(dotvec3\(Point3) 1375 5365 w
+(a,) 2350 5365 w
+(Point3) 2545 5365 w
+(b\)) 3000 5365 w
+10 /LucidaSansUnicode00 f
+(a) 2210 5610 w
+7 /LucidaSansUnicode21 f
+(\222) 2205 5560 w
+10 /LucidaSansUnicode00 f
+10 /LucidaSansUnicode20 f
+(") 2314 5610 w
+10 /LucidaSansUnicode00 f
+(b) 2418 5610 w
+7 /LucidaSansUnicode21 f
+(\222) 2417 5535 w
+10 /LucidaSansUnicode00 f
+10 /S f
+(=) 2538 5610 w
+10 /LucidaSansUnicode00 f
+(x) 2649 5610 w
+7 /LucidaSansUnicode00 f
+(a) 2721 5630 w
+10 /LucidaSansUnicode00 f
+(x) 2776 5610 w
+7 /LucidaSansUnicode00 f
+(b) 2848 5630 w
+10 /S f
+(+) 2916 5610 w
+10 /LucidaSansUnicode00 f
+(y) 2987 5610 w
+7 /LucidaSansUnicode00 f
+(a) 3050 5630 w
+10 /LucidaSansUnicode00 f
+(y) 3105 5610 w
+7 /LucidaSansUnicode00 f
+(b) 3168 5630 w
+10 /S f
+(+) 3236 5610 w
+10 /LucidaSansUnicode00 f
+(z) 3307 5610 w
+7 /LucidaSansUnicode00 f
+(a) 3375 5630 w
+10 /LucidaSansUnicode00 f
+(z) 3430 5610 w
+7 /LucidaSansUnicode00 f
+(b) 3498 5630 w
+10 /LucidaSans-Demi f
+(Vector Cross Product) 720 5910 w
+9 /LucidaTypewriter f
+(double) 920 6080 w
+(crossvec3\(Point3) 1375 6080 w
+(a,) 2480 6080 w
+(Point3) 2675 6080 w
+(b\)) 3130 6080 w
+10 /LucidaSansUnicode00 f
+(a) 1650 6355 w
+7 /LucidaSansUnicode21 f
+(\222) 1645 6305 w
+10 /LucidaSansUnicode00 f
+(\327) 1754 6355 w
+(b) 1882 6355 w
+7 /LucidaSansUnicode21 f
+(\222) 1881 6280 w
+10 /LucidaSansUnicode00 f
+10 /S f
+(=) 2002 6355 w
+10 /LucidaSansUnicode00 f
+10 /S f
+(\354) 2121 6318 w
+(\356) 2121 6418 w
+10 /LucidaSansUnicode00 f
+(y) 2170 6355 w
+7 /LucidaSansUnicode00 f
+(a) 2233 6375 w
+10 /LucidaSansUnicode00 f
+(z) 2288 6355 w
+7 /LucidaSansUnicode00 f
+(b) 2356 6375 w
+10 /S f
+(-) 2424 6355 w
+10 /LucidaSansUnicode00 f
+(z) 2495 6355 w
+7 /LucidaSansUnicode00 f
+(a) 2563 6375 w
+10 /LucidaSansUnicode00 f
+(y) 2618 6355 w
+7 /LucidaSansUnicode00 f
+(b) 2681 6375 w
+10 /LucidaSansUnicode00 f
+(,) 2741 6355 w
+(z) 2821 6355 w
+7 /LucidaSansUnicode00 f
+(a) 2889 6375 w
+10 /LucidaSansUnicode00 f
+(x) 2944 6355 w
+7 /LucidaSansUnicode00 f
+(b) 3016 6375 w
+10 /S f
+(-) 3084 6355 w
+10 /LucidaSansUnicode00 f
+(x) 3155 6355 w
+7 /LucidaSansUnicode00 f
+(a) 3227 6375 w
+10 /LucidaSansUnicode00 f
+(z) 3282 6355 w
+7 /LucidaSansUnicode00 f
+(b) 3350 6375 w
+10 /LucidaSansUnicode00 f
+(,) 3410 6355 w
+(x) 3490 6355 w
+7 /LucidaSansUnicode00 f
+(a) 3562 6375 w
+10 /LucidaSansUnicode00 f
+(y) 3617 6355 w
+7 /LucidaSansUnicode00 f
+(b) 3680 6375 w
+10 /S f
+(-) 3748 6355 w
+10 /LucidaSansUnicode00 f
+(y) 3819 6355 w
+7 /LucidaSansUnicode00 f
+(a) 3882 6375 w
+10 /LucidaSansUnicode00 f
+(x) 3937 6355 w
+7 /LucidaSansUnicode00 f
+(b) 4009 6375 w
+10 /S f
+(\374) 4061 6318 w
+(\376) 4061 6418 w
+10 /LucidaSans-Demi f
+(Vector Magnitude/Length) 720 6710 w
+9 /LucidaTypewriter f
+(double) 920 6880 w
+(vec3len\(Point3) 1375 6880 w
+(v\)) 2350 6880 w
+10 /LucidaSansUnicode00 f
+(|) 2408 7155 w
+(v) 2456 7138 w
+7 /LucidaSansUnicode21 f
+(\222) 2449 7088 w
+10 /LucidaSansUnicode00 f
+(|) 2508 7155 w
+10 /S f
+(=) 2604 7138 w
+10 /LucidaSansUnicode00 f
+12 /LucidaSansUnicode22 f
+(\032) 2715 7138 w
+12 /S f
+(`) 2812 7138 w
+(````````) 2863 7138 w
+10 /LucidaSansUnicode00 f
+(x) 2820 7138 w
+7 /LucidaSansUnicode00 f
+(2) 2886 7098 w
+10 /S f
+(+) 2954 7138 w
+10 /LucidaSansUnicode00 f
+(y) 3025 7138 w
+7 /LucidaSansUnicode00 f
+(2) 3082 7098 w
+10 /S f
+(+) 3150 7138 w
+10 /LucidaSansUnicode00 f
+(z) 3221 7138 w
+7 /LucidaSansUnicode00 f
+(2) 3283 7098 w
+cleartomark
+showpage
+saveobj restore
+%%EndPage: 3 3
+%%Page: 4 4
+/saveobj save def
+mark
+4 pagesetup
+10 /LucidaSansUnicode00 f
+(\255 4 \255) 2783 480 w
+10 /LucidaSans-Demi f
+(Vector Normalization) 720 840 w
+9 /LucidaTypewriter f
+(Point3) 920 1010 w
+(normvec3\(Point3) 1375 1010 w
+(v\)) 2415 1010 w
+10 /LucidaSansUnicode00 f
+(n) 2374 1335 w
+7 /LucidaSansUnicode21 f
+(\222) 2372 1285 w
+10 /LucidaSansUnicode00 f
+10 /S f
+(=) 2492 1335 w
+10 /LucidaSansUnicode00 f
+10 /S f
+(\354) 2611 1248 w
+(\357) 2611 1348 w
+(\356) 2611 1448 w
+10 /LucidaSansUnicode00 f
+(|) 2685 1447 w
+(v) 2733 1430 w
+7 /LucidaSansUnicode21 f
+(\222) 2726 1380 w
+10 /LucidaSansUnicode00 f
+(|) 2785 1447 w
+(x) 2713 1275 w
+10 /S1 f
+(_) 2671 1305 w
+(__) 2717 1305 w
+10 /LucidaSansUnicode00 f
+(,) 2835 1335 w
+(|) 2940 1447 w
+(v) 2988 1430 w
+7 /LucidaSansUnicode21 f
+(\222) 2981 1380 w
+10 /LucidaSansUnicode00 f
+(|) 3040 1447 w
+(y) 2972 1275 w
+10 /S1 f
+(_) 2925 1305 w
+(__) 2971 1305 w
+10 /LucidaSansUnicode00 f
+(,) 3089 1335 w
+(|) 3194 1447 w
+(v) 3242 1430 w
+7 /LucidaSansUnicode21 f
+(\222) 3235 1380 w
+10 /LucidaSansUnicode00 f
+(|) 3294 1447 w
+(z) 3224 1275 w
+10 /S1 f
+(_) 3180 1305 w
+(__) 3226 1305 w
+10 /S f
+(\374) 3336 1248 w
+(\357) 3336 1348 w
+(\376) 3336 1448 w
+10 /LucidaSans-Demi f
+(2.3.) 720 1740 w
+(Matrix) 962 1740 w
+(Addition) 720 1980 w
+9 /LucidaTypewriter f
+(void) 920 2150 w
+(addm\(Matrix) 1245 2150 w
+(A,) 2025 2150 w
+(Matrix) 2220 2150 w
+(B\)) 2675 2150 w
+10 /LucidaSansUnicode00 f
+(\() 2393 2390 w
+10 /LucidaSans-Demi f
+(A) 2434 2390 w
+10 /S f
+(+) 2524 2390 w
+10 /LucidaSans-Demi f
+(B) 2595 2390 w
+10 /LucidaSansUnicode00 f
+(\)) 2666 2390 w
+7 /LucidaSansUnicode00 f
+(i) 2710 2410 w
+(,) 2735 2410 w
+(j) 2762 2410 w
+10 /LucidaSansUnicode00 f
+10 /S f
+(=) 2847 2390 w
+10 /LucidaSansUnicode00 f
+10 /LucidaSans-Demi f
+(A) 2958 2390 w
+7 /LucidaSansUnicode00 f
+(i) 3043 2410 w
+(,) 3068 2410 w
+(j) 3095 2410 w
+10 /S f
+(+) 3140 2390 w
+10 /LucidaSans-Demi f
+(B) 3211 2390 w
+7 /LucidaSansUnicode00 f
+(i) 3285 2410 w
+(,) 3310 2410 w
+(j) 3337 2410 w
+10 /LucidaSans-Demi f
+(Substraction) 720 2690 w
+9 /LucidaTypewriter f
+(void) 920 2860 w
+(subm\(Matrix) 1245 2860 w
+(A,) 2025 2860 w
+(Matrix) 2220 2860 w
+(B\)) 2675 2860 w
+10 /LucidaSansUnicode00 f
+(\() 2393 3100 w
+10 /LucidaSans-Demi f
+(A) 2434 3100 w
+10 /S f
+(-) 2524 3100 w
+10 /LucidaSans-Demi f
+(B) 2595 3100 w
+10 /LucidaSansUnicode00 f
+(\)) 2666 3100 w
+7 /LucidaSansUnicode00 f
+(i) 2710 3120 w
+(,) 2735 3120 w
+(j) 2762 3120 w
+10 /LucidaSansUnicode00 f
+10 /S f
+(=) 2847 3100 w
+10 /LucidaSansUnicode00 f
+10 /LucidaSans-Demi f
+(A) 2958 3100 w
+7 /LucidaSansUnicode00 f
+(i) 3043 3120 w
+(,) 3068 3120 w
+(j) 3095 3120 w
+10 /S f
+(-) 3140 3100 w
+10 /LucidaSans-Demi f
+(B) 3211 3100 w
+7 /LucidaSansUnicode00 f
+(i) 3285 3120 w
+(,) 3310 3120 w
+(j) 3337 3120 w
+10 /LucidaSans-Demi f
+(Multiplication) 720 3400 w
+9 /LucidaTypewriter f
+(void) 920 3570 w
+(mulm\(Matrix) 1245 3570 w
+(A,) 2025 3570 w
+(Matrix) 2220 3570 w
+(B\)) 2675 3570 w
+10 /S f
+(\351) 2370 3823 w
+(\353) 2370 3923 w
+10 /LucidaSans-Demi f
+(AB) 2420 3870 w
+10 /S f
+(\371) 2557 3823 w
+(\373) 2557 3923 w
+7 /LucidaSansUnicode00 f
+(i) 2606 3905 w
+(,) 2631 3905 w
+(j) 2658 3905 w
+10 /LucidaSansUnicode00 f
+10 /S f
+(=) 2743 3860 w
+10 /LucidaSansUnicode00 f
+7 /LucidaSansUnicode00 f
+(k) 2847 3960 w
+7 /S f
+(=) 2899 3960 w
+7 /LucidaSansUnicode00 f
+(0) 2949 3960 w
+15 /S f
+(S) 2876 3890 w
+7 /LucidaSansUnicode00 f
+(3) 2846 3760 w
+7 /S f
+(-) 2901 3760 w
+7 /LucidaSansUnicode00 f
+(1) 2951 3760 w
+10 /LucidaSans-Demi f
+(A) 3027 3860 w
+7 /LucidaSansUnicode00 f
+(i) 3112 3880 w
+(,) 3137 3880 w
+(k) 3164 3880 w
+10 /LucidaSans-Demi f
+(B) 3221 3860 w
+7 /LucidaSansUnicode00 f
+(k) 3295 3880 w
+(,) 3341 3880 w
+(j) 3368 3880 w
+10 /LucidaSans-Demi f
+(Transpose) 720 4240 w
+9 /LucidaTypewriter f
+(void) 920 4410 w
+(transposem\(Matrix) 1245 4410 w
+(M\)) 2415 4410 w
+10 /LucidaSansUnicode00 f
+(\() 2552 4650 w
+10 /LucidaSans-Demi f
+(M) 2593 4650 w
+7 /LucidaSansUnicode00 f
+(T) 2689 4610 w
+10 /LucidaSansUnicode00 f
+(\)) 2749 4650 w
+7 /LucidaSansUnicode00 f
+(i) 2793 4670 w
+(,) 2818 4670 w
+(j) 2845 4670 w
+10 /LucidaSansUnicode00 f
+10 /S f
+(=) 2930 4650 w
+10 /LucidaSansUnicode00 f
+10 /LucidaSans-Demi f
+(A) 3041 4650 w
+7 /LucidaSansUnicode00 f
+(j) 3126 4670 w
+(,) 3152 4670 w
+(i) 3179 4670 w
+10 /LucidaSans-Demi f
+(Identity) 720 4950 w
+9 /LucidaTypewriter f
+(void) 920 5120 w
+(identity\(Matrix) 1245 5120 w
+(M\)) 2285 5120 w
+10 /LucidaSans-Demi f
+(M) 2560 5495 w
+10 /LucidaSansUnicode00 f
+10 /S f
+(=) 2707 5495 w
+10 /LucidaSansUnicode00 f
+10 /S f
+(\351) 2826 5358 w
+(\357) 2826 5458 w
+(\357) 2826 5558 w
+(\353) 2826 5658 w
+10 /LucidaSansUnicode00 f
+(0) 2876 5645 w
+(0) 2987 5645 w
+(1) 3098 5645 w
+(0) 2876 5505 w
+(1) 2987 5505 w
+(0) 3098 5505 w
+(1) 2876 5365 w
+(0) 2987 5365 w
+(0) 3098 5365 w
+10 /S f
+(\371) 3161 5358 w
+(\357) 3161 5458 w
+(\357) 3161 5558 w
+(\373) 3161 5658 w
+10 /LucidaSans-Demi f
+(Determinant) 720 5950 w
+9 /LucidaTypewriter f
+(double) 920 6120 w
+(detm\(Matrix) 1375 6120 w
+(M\)) 2155 6120 w
+10 /LucidaSansUnicode00 f
+(det) 1992 6500 w
+(\() 2156 6500 w
+10 /LucidaSans-Demi f
+(M) 2197 6500 w
+10 /LucidaSansUnicode00 f
+(\)) 2296 6500 w
+10 /S f
+(=) 2393 6500 w
+10 /LucidaSansUnicode00 f
+(m) 2504 6660 w
+7 /LucidaSansUnicode00 f
+(02) 2608 6680 w
+10 /LucidaSansUnicode00 f
+(\() 2712 6660 w
+(m) 2753 6660 w
+7 /LucidaSansUnicode00 f
+(10) 2857 6680 w
+10 /LucidaSansUnicode00 f
+(m) 2961 6660 w
+7 /LucidaSansUnicode00 f
+(21) 3065 6680 w
+10 /S f
+(-) 3177 6660 w
+10 /LucidaSansUnicode00 f
+(m) 3248 6660 w
+7 /LucidaSansUnicode00 f
+(11) 3352 6680 w
+10 /LucidaSansUnicode00 f
+(m) 3456 6660 w
+7 /LucidaSansUnicode00 f
+(20) 3560 6680 w
+10 /LucidaSansUnicode00 f
+(\)) 3664 6660 w
+(m) 2504 6500 w
+7 /LucidaSansUnicode00 f
+(01) 2608 6520 w
+10 /LucidaSansUnicode00 f
+(\() 2712 6500 w
+(m) 2753 6500 w
+7 /LucidaSansUnicode00 f
+(12) 2857 6520 w
+10 /LucidaSansUnicode00 f
+(m) 2961 6500 w
+7 /LucidaSansUnicode00 f
+(20) 3065 6520 w
+10 /S f
+(-) 3177 6500 w
+10 /LucidaSansUnicode00 f
+(m) 3248 6500 w
+7 /LucidaSansUnicode00 f
+(10) 3352 6520 w
+10 /LucidaSansUnicode00 f
+(m) 3456 6500 w
+7 /LucidaSansUnicode00 f
+(22) 3560 6520 w
+10 /LucidaSansUnicode00 f
+(\)) 3664 6500 w
+10 /S f
+(+) 3713 6500 w
+10 /LucidaSansUnicode00 f
+(m) 2504 6340 w
+7 /LucidaSansUnicode00 f
+(00) 2608 6360 w
+10 /LucidaSansUnicode00 f
+(\() 2712 6340 w
+(m) 2753 6340 w
+7 /LucidaSansUnicode00 f
+(11) 2857 6360 w
+10 /LucidaSansUnicode00 f
+(m) 2961 6340 w
+7 /LucidaSansUnicode00 f
+(22) 3065 6360 w
+10 /S f
+(-) 3177 6340 w
+10 /LucidaSansUnicode00 f
+(m) 3248 6340 w
+7 /LucidaSansUnicode00 f
+(12) 3352 6360 w
+10 /LucidaSansUnicode00 f
+(m) 3456 6340 w
+7 /LucidaSansUnicode00 f
+(21) 3560 6360 w
+10 /LucidaSansUnicode00 f
+(\)) 3664 6340 w
+10 /S f
+(+) 3713 6340 w
+cleartomark
+showpage
+saveobj restore
+%%EndPage: 4 4
+%%Page: 5 5
+/saveobj save def
+mark
+5 pagesetup
+10 /LucidaSansUnicode00 f
+(\255 5 \255) 2783 480 w
+10 /LucidaSans-Demi f
+(2.4.) 720 840 w
+(Matrix3) 962 840 w
+(Addition) 720 1080 w
+9 /LucidaTypewriter f
+(void) 920 1250 w
+(addm3\(Matrix3) 1245 1250 w
+(A,) 2155 1250 w
+(Matrix3) 2350 1250 w
+(B\)) 2870 1250 w
+10 /LucidaSansUnicode00 f
+(\() 2393 1490 w
+10 /LucidaSans-Demi f
+(A) 2434 1490 w
+10 /S f
+(+) 2524 1490 w
+10 /LucidaSans-Demi f
+(B) 2595 1490 w
+10 /LucidaSansUnicode00 f
+(\)) 2666 1490 w
+7 /LucidaSansUnicode00 f
+(i) 2710 1510 w
+(,) 2735 1510 w
+(j) 2762 1510 w
+10 /LucidaSansUnicode00 f
+10 /S f
+(=) 2847 1490 w
+10 /LucidaSansUnicode00 f
+10 /LucidaSans-Demi f
+(A) 2958 1490 w
+7 /LucidaSansUnicode00 f
+(i) 3043 1510 w
+(,) 3068 1510 w
+(j) 3095 1510 w
+10 /S f
+(+) 3140 1490 w
+10 /LucidaSans-Demi f
+(B) 3211 1490 w
+7 /LucidaSansUnicode00 f
+(i) 3285 1510 w
+(,) 3310 1510 w
+(j) 3337 1510 w
+10 /LucidaSans-Demi f
+(Substraction) 720 1790 w
+9 /LucidaTypewriter f
+(void) 920 1960 w
+(subm3\(Matrix3) 1245 1960 w
+(A,) 2155 1960 w
+(Matrix3) 2350 1960 w
+(B\)) 2870 1960 w
+10 /LucidaSansUnicode00 f
+(\() 2393 2200 w
+10 /LucidaSans-Demi f
+(A) 2434 2200 w
+10 /S f
+(-) 2524 2200 w
+10 /LucidaSans-Demi f
+(B) 2595 2200 w
+10 /LucidaSansUnicode00 f
+(\)) 2666 2200 w
+7 /LucidaSansUnicode00 f
+(i) 2710 2220 w
+(,) 2735 2220 w
+(j) 2762 2220 w
+10 /LucidaSansUnicode00 f
+10 /S f
+(=) 2847 2200 w
+10 /LucidaSansUnicode00 f
+10 /LucidaSans-Demi f
+(A) 2958 2200 w
+7 /LucidaSansUnicode00 f
+(i) 3043 2220 w
+(,) 3068 2220 w
+(j) 3095 2220 w
+10 /S f
+(-) 3140 2200 w
+10 /LucidaSans-Demi f
+(B) 3211 2200 w
+7 /LucidaSansUnicode00 f
+(i) 3285 2220 w
+(,) 3310 2220 w
+(j) 3337 2220 w
+10 /LucidaSans-Demi f
+(Multiplication) 720 2500 w
+9 /LucidaTypewriter f
+(void) 920 2670 w
+(mulm3\(Matrix3) 1245 2670 w
+(A,) 2155 2670 w
+(Matrix3) 2350 2670 w
+(B\)) 2870 2670 w
+10 /S f
+(\351) 2374 2923 w
+(\353) 2374 3023 w
+10 /LucidaSans-Demi f
+(AB) 2424 2970 w
+10 /S f
+(\371) 2561 2923 w
+(\373) 2561 3023 w
+7 /LucidaSansUnicode00 f
+(i) 2610 3005 w
+(,) 2635 3005 w
+(j) 2662 3005 w
+10 /LucidaSansUnicode00 f
+10 /S f
+(=) 2747 2960 w
+10 /LucidaSansUnicode00 f
+7 /LucidaSansUnicode00 f
+(k) 2859 3060 w
+7 /S f
+(=) 2911 3060 w
+7 /LucidaSansUnicode00 f
+(0) 2961 3060 w
+15 /S f
+(S) 2888 2990 w
+7 /LucidaSansUnicode00 f
+(4) 2858 2860 w
+7 /S f
+(-) 2913 2860 w
+7 /LucidaSansUnicode00 f
+(1) 2963 2860 w
+10 /LucidaSans-Demi f
+(A) 3023 2960 w
+7 /LucidaSansUnicode00 f
+(i) 3108 2980 w
+(,) 3133 2980 w
+(k) 3160 2980 w
+10 /LucidaSans-Demi f
+(B) 3217 2960 w
+7 /LucidaSansUnicode00 f
+(k) 3291 2980 w
+(,) 3337 2980 w
+(j) 3364 2980 w
+10 /LucidaSans-Demi f
+(Transpose) 720 3340 w
+9 /LucidaTypewriter f
+(void) 920 3510 w
+(transposem3\(Matrix3) 1245 3510 w
+(M\)) 2545 3510 w
+10 /LucidaSansUnicode00 f
+(\() 2552 3750 w
+10 /LucidaSans-Demi f
+(M) 2593 3750 w
+7 /LucidaSansUnicode00 f
+(T) 2689 3710 w
+10 /LucidaSansUnicode00 f
+(\)) 2749 3750 w
+7 /LucidaSansUnicode00 f
+(i) 2793 3770 w
+(,) 2818 3770 w
+(j) 2845 3770 w
+10 /LucidaSansUnicode00 f
+10 /S f
+(=) 2930 3750 w
+10 /LucidaSansUnicode00 f
+10 /LucidaSans-Demi f
+(A) 3041 3750 w
+7 /LucidaSansUnicode00 f
+(j) 3126 3770 w
+(,) 3152 3770 w
+(i) 3179 3770 w
+10 /LucidaSans-Demi f
+(Identity) 720 4050 w
+9 /LucidaTypewriter f
+(void) 920 4220 w
+(identity3\(Matrix3) 1245 4220 w
+(M\)) 2415 4220 w
+10 /LucidaSans-Demi f
+(M) 2505 4695 w
+10 /LucidaSansUnicode00 f
+10 /S f
+(=) 2652 4695 w
+10 /LucidaSansUnicode00 f
+10 /S f
+(\351) 2771 4458 w
+(\357) 2771 4558 w
+(\357) 2771 4658 w
+(\357) 2771 4758 w
+(\357) 2771 4858 w
+(\353) 2771 4958 w
+10 /LucidaSansUnicode00 f
+(0) 2821 4915 w
+(0) 2932 4915 w
+(0) 3043 4915 w
+(1) 3154 4915 w
+(0) 2821 4775 w
+(0) 2932 4775 w
+(1) 3043 4775 w
+(0) 3154 4775 w
+(0) 2821 4635 w
+(1) 2932 4635 w
+(0) 3043 4635 w
+(0) 3154 4635 w
+(1) 2821 4495 w
+(0) 2932 4495 w
+(0) 3043 4495 w
+(0) 3154 4495 w
+10 /S f
+(\371) 3217 4458 w
+(\357) 3217 4558 w
+(\357) 3217 4658 w
+(\357) 3217 4758 w
+(\357) 3217 4858 w
+(\373) 3217 4958 w
+10 /LucidaSans-Demi f
+(Determinant) 720 5250 w
+9 /LucidaTypewriter f
+(double) 920 5420 w
+(detm3\(Matrix3) 1375 5420 w
+(M\)) 2285 5420 w
+10 /LucidaSansUnicode00 f
+(det) 567 5910 w
+(\() 731 5910 w
+10 /LucidaSans-Demi f
+(M) 772 5910 w
+10 /LucidaSansUnicode00 f
+(\)) 871 5910 w
+10 /S f
+(=) 968 5910 w
+10 /LucidaSansUnicode00 f
+10 /S f
+(-) 1079 6120 w
+10 /LucidaSansUnicode00 f
+(m) 1150 6120 w
+7 /LucidaSansUnicode00 f
+(03) 1254 6140 w
+10 /LucidaSansUnicode00 f
+(\() 1358 6120 w
+(m) 1399 6120 w
+7 /LucidaSansUnicode00 f
+(10) 1503 6140 w
+10 /LucidaSansUnicode00 f
+(\() 1607 6120 w
+(m) 1648 6120 w
+7 /LucidaSansUnicode00 f
+(21) 1752 6140 w
+10 /LucidaSansUnicode00 f
+(m) 1856 6120 w
+7 /LucidaSansUnicode00 f
+(32) 1960 6140 w
+10 /S f
+(-) 2072 6120 w
+10 /LucidaSansUnicode00 f
+(m) 2143 6120 w
+7 /LucidaSansUnicode00 f
+(22) 2247 6140 w
+10 /LucidaSansUnicode00 f
+(m) 2351 6120 w
+7 /LucidaSansUnicode00 f
+(31) 2455 6140 w
+10 /LucidaSansUnicode00 f
+(\)) 2559 6120 w
+10 /S f
+(+) 2608 6120 w
+10 /LucidaSansUnicode00 f
+(m) 2679 6120 w
+7 /LucidaSansUnicode00 f
+(11) 2783 6140 w
+10 /LucidaSansUnicode00 f
+(\() 2887 6120 w
+(m) 2928 6120 w
+7 /LucidaSansUnicode00 f
+(22) 3032 6140 w
+10 /LucidaSansUnicode00 f
+(m) 3136 6120 w
+7 /LucidaSansUnicode00 f
+(30) 3240 6140 w
+10 /S f
+(-) 3352 6120 w
+10 /LucidaSansUnicode00 f
+(m) 3423 6120 w
+7 /LucidaSansUnicode00 f
+(20) 3527 6140 w
+10 /LucidaSansUnicode00 f
+(m) 3631 6120 w
+7 /LucidaSansUnicode00 f
+(32) 3735 6140 w
+10 /LucidaSansUnicode00 f
+(\)) 3839 6120 w
+10 /S f
+(+) 3888 6120 w
+10 /LucidaSansUnicode00 f
+(m) 3959 6120 w
+7 /LucidaSansUnicode00 f
+(12) 4063 6140 w
+10 /LucidaSansUnicode00 f
+(\() 4167 6120 w
+(m) 4208 6120 w
+7 /LucidaSansUnicode00 f
+(20) 4312 6140 w
+10 /LucidaSansUnicode00 f
+(m) 4416 6120 w
+7 /LucidaSansUnicode00 f
+(31) 4520 6140 w
+10 /S f
+(-) 4632 6120 w
+10 /LucidaSansUnicode00 f
+(m) 4703 6120 w
+7 /LucidaSansUnicode00 f
+(21) 4807 6140 w
+10 /LucidaSansUnicode00 f
+(m) 4911 6120 w
+7 /LucidaSansUnicode00 f
+(30) 5015 6140 w
+10 /LucidaSansUnicode00 f
+(\)) 5119 6120 w
+(\)) 5160 6120 w
+10 /S f
+(+) 1079 5960 w
+10 /LucidaSansUnicode00 f
+(m) 1150 5960 w
+7 /LucidaSansUnicode00 f
+(02) 1254 5980 w
+10 /LucidaSansUnicode00 f
+(\() 1358 5960 w
+(m) 1399 5960 w
+7 /LucidaSansUnicode00 f
+(10) 1503 5980 w
+10 /LucidaSansUnicode00 f
+(\() 1607 5960 w
+(m) 1648 5960 w
+7 /LucidaSansUnicode00 f
+(21) 1752 5980 w
+10 /LucidaSansUnicode00 f
+(m) 1856 5960 w
+7 /LucidaSansUnicode00 f
+(33) 1960 5980 w
+10 /S f
+(-) 2072 5960 w
+10 /LucidaSansUnicode00 f
+(m) 2143 5960 w
+7 /LucidaSansUnicode00 f
+(23) 2247 5980 w
+10 /LucidaSansUnicode00 f
+(m) 2351 5960 w
+7 /LucidaSansUnicode00 f
+(31) 2455 5980 w
+10 /LucidaSansUnicode00 f
+(\)) 2559 5960 w
+10 /S f
+(+) 2608 5960 w
+10 /LucidaSansUnicode00 f
+(m) 2679 5960 w
+7 /LucidaSansUnicode00 f
+(11) 2783 5980 w
+10 /LucidaSansUnicode00 f
+(\() 2887 5960 w
+(m) 2928 5960 w
+7 /LucidaSansUnicode00 f
+(23) 3032 5980 w
+10 /LucidaSansUnicode00 f
+(m) 3136 5960 w
+7 /LucidaSansUnicode00 f
+(30) 3240 5980 w
+10 /S f
+(-) 3352 5960 w
+10 /LucidaSansUnicode00 f
+(m) 3423 5960 w
+7 /LucidaSansUnicode00 f
+(20) 3527 5980 w
+10 /LucidaSansUnicode00 f
+(m) 3631 5960 w
+7 /LucidaSansUnicode00 f
+(33) 3735 5980 w
+10 /LucidaSansUnicode00 f
+(\)) 3839 5960 w
+10 /S f
+(+) 3888 5960 w
+10 /LucidaSansUnicode00 f
+(m) 3959 5960 w
+7 /LucidaSansUnicode00 f
+(13) 4063 5980 w
+10 /LucidaSansUnicode00 f
+(\() 4167 5960 w
+(m) 4208 5960 w
+7 /LucidaSansUnicode00 f
+(20) 4312 5980 w
+10 /LucidaSansUnicode00 f
+(m) 4416 5960 w
+7 /LucidaSansUnicode00 f
+(31) 4520 5980 w
+10 /S f
+(-) 4632 5960 w
+10 /LucidaSansUnicode00 f
+(m) 4703 5960 w
+7 /LucidaSansUnicode00 f
+(21) 4807 5980 w
+10 /LucidaSansUnicode00 f
+(m) 4911 5960 w
+7 /LucidaSansUnicode00 f
+(30) 5015 5980 w
+10 /LucidaSansUnicode00 f
+(\)) 5119 5960 w
+(\)) 5160 5960 w
+10 /S f
+(-) 1079 5800 w
+10 /LucidaSansUnicode00 f
+(m) 1150 5800 w
+7 /LucidaSansUnicode00 f
+(01) 1254 5820 w
+10 /LucidaSansUnicode00 f
+(\() 1358 5800 w
+(m) 1399 5800 w
+7 /LucidaSansUnicode00 f
+(10) 1503 5820 w
+10 /LucidaSansUnicode00 f
+(\() 1607 5800 w
+(m) 1648 5800 w
+7 /LucidaSansUnicode00 f
+(22) 1752 5820 w
+10 /LucidaSansUnicode00 f
+(m) 1856 5800 w
+7 /LucidaSansUnicode00 f
+(33) 1960 5820 w
+10 /S f
+(-) 2072 5800 w
+10 /LucidaSansUnicode00 f
+(m) 2143 5800 w
+7 /LucidaSansUnicode00 f
+(23) 2247 5820 w
+10 /LucidaSansUnicode00 f
+(m) 2351 5800 w
+7 /LucidaSansUnicode00 f
+(32) 2455 5820 w
+10 /LucidaSansUnicode00 f
+(\)) 2559 5800 w
+10 /S f
+(+) 2608 5800 w
+10 /LucidaSansUnicode00 f
+(m) 2679 5800 w
+7 /LucidaSansUnicode00 f
+(12) 2783 5820 w
+10 /LucidaSansUnicode00 f
+(\() 2887 5800 w
+(m) 2928 5800 w
+7 /LucidaSansUnicode00 f
+(23) 3032 5820 w
+10 /LucidaSansUnicode00 f
+(m) 3136 5800 w
+7 /LucidaSansUnicode00 f
+(30) 3240 5820 w
+10 /S f
+(-) 3352 5800 w
+10 /LucidaSansUnicode00 f
+(m) 3423 5800 w
+7 /LucidaSansUnicode00 f
+(20) 3527 5820 w
+10 /LucidaSansUnicode00 f
+(m) 3631 5800 w
+7 /LucidaSansUnicode00 f
+(33) 3735 5820 w
+10 /LucidaSansUnicode00 f
+(\)) 3839 5800 w
+10 /S f
+(+) 3888 5800 w
+10 /LucidaSansUnicode00 f
+(m) 3959 5800 w
+7 /LucidaSansUnicode00 f
+(13) 4063 5820 w
+10 /LucidaSansUnicode00 f
+(\() 4167 5800 w
+(m) 4208 5800 w
+7 /LucidaSansUnicode00 f
+(20) 4312 5820 w
+10 /LucidaSansUnicode00 f
+(m) 4416 5800 w
+7 /LucidaSansUnicode00 f
+(32) 4520 5820 w
+10 /S f
+(-) 4632 5800 w
+10 /LucidaSansUnicode00 f
+(m) 4703 5800 w
+7 /LucidaSansUnicode00 f
+(22) 4807 5820 w
+10 /LucidaSansUnicode00 f
+(m) 4911 5800 w
+7 /LucidaSansUnicode00 f
+(30) 5015 5820 w
+10 /LucidaSansUnicode00 f
+(\)) 5119 5800 w
+(\)) 5160 5800 w
+(m) 1150 5640 w
+7 /LucidaSansUnicode00 f
+(00) 1254 5660 w
+10 /LucidaSansUnicode00 f
+(\() 1358 5640 w
+(m) 1399 5640 w
+7 /LucidaSansUnicode00 f
+(11) 1503 5660 w
+10 /LucidaSansUnicode00 f
+(\() 1607 5640 w
+(m) 1648 5640 w
+7 /LucidaSansUnicode00 f
+(22) 1752 5660 w
+10 /LucidaSansUnicode00 f
+(m) 1856 5640 w
+7 /LucidaSansUnicode00 f
+(33) 1960 5660 w
+10 /S f
+(-) 2072 5640 w
+10 /LucidaSansUnicode00 f
+(m) 2143 5640 w
+7 /LucidaSansUnicode00 f
+(23) 2247 5660 w
+10 /LucidaSansUnicode00 f
+(m) 2351 5640 w
+7 /LucidaSansUnicode00 f
+(32) 2455 5660 w
+10 /LucidaSansUnicode00 f
+(\)) 2559 5640 w
+10 /S f
+(+) 2608 5640 w
+10 /LucidaSansUnicode00 f
+(m) 2679 5640 w
+7 /LucidaSansUnicode00 f
+(12) 2783 5660 w
+10 /LucidaSansUnicode00 f
+(\() 2887 5640 w
+(m) 2928 5640 w
+7 /LucidaSansUnicode00 f
+(23) 3032 5660 w
+10 /LucidaSansUnicode00 f
+(m) 3136 5640 w
+7 /LucidaSansUnicode00 f
+(31) 3240 5660 w
+10 /S f
+(-) 3352 5640 w
+10 /LucidaSansUnicode00 f
+(m) 3423 5640 w
+7 /LucidaSansUnicode00 f
+(21) 3527 5660 w
+10 /LucidaSansUnicode00 f
+(m) 3631 5640 w
+7 /LucidaSansUnicode00 f
+(33) 3735 5660 w
+10 /LucidaSansUnicode00 f
+(\)) 3839 5640 w
+10 /S f
+(+) 3888 5640 w
+10 /LucidaSansUnicode00 f
+(m) 3959 5640 w
+7 /LucidaSansUnicode00 f
+(13) 4063 5660 w
+10 /LucidaSansUnicode00 f
+(\() 4167 5640 w
+(m) 4208 5640 w
+7 /LucidaSansUnicode00 f
+(21) 4312 5660 w
+10 /LucidaSansUnicode00 f
+(m) 4416 5640 w
+7 /LucidaSansUnicode00 f
+(32) 4520 5660 w
+10 /S f
+(-) 4632 5640 w
+10 /LucidaSansUnicode00 f
+(m) 4703 5640 w
+7 /LucidaSansUnicode00 f
+(22) 4807 5660 w
+10 /LucidaSansUnicode00 f
+(m) 4911 5640 w
+7 /LucidaSansUnicode00 f
+(31) 5015 5660 w
+10 /LucidaSansUnicode00 f
+(\)) 5119 5640 w
+(\)) 5160 5640 w
+10 /LucidaSans-Demi f
+(2.5.) 720 6420 w
+(Quaternion) 962 6420 w
+(Addition) 720 6660 w
+9 /LucidaTypewriter f
+(Quaternion) 920 6830 w
+(addq\(Quaternion) 1635 6830 w
+(q,) 2675 6830 w
+(Quaternion) 2870 6830 w
+(r\)) 3585 6830 w
+10 /LucidaSansUnicode00 f
+(q) 1974 7070 w
+10 /S f
+(+) 2053 7070 w
+10 /LucidaSansUnicode00 f
+(r) 2124 7070 w
+10 /S f
+(=) 2221 7070 w
+10 /LucidaSansUnicode00 f
+(\() 2332 7070 w
+(r) 2373 7070 w
+7 /LucidaSansUnicode00 f
+(q) 2425 7090 w
+10 /S f
+(+) 2493 7070 w
+10 /LucidaSansUnicode00 f
+(r) 2564 7070 w
+7 /LucidaSansUnicode00 f
+(r) 2616 7090 w
+10 /LucidaSansUnicode00 f
+(,) 2661 7070 w
+(i) 2741 7070 w
+7 /LucidaSansUnicode00 f
+(q) 2781 7090 w
+10 /S f
+(+) 2849 7070 w
+10 /LucidaSansUnicode00 f
+(i) 2920 7070 w
+7 /LucidaSansUnicode00 f
+(r) 2960 7090 w
+10 /LucidaSansUnicode00 f
+(,) 3005 7070 w
+(j) 3085 7070 w
+7 /LucidaSansUnicode00 f
+(q) 3126 7090 w
+10 /S f
+(+) 3194 7070 w
+10 /LucidaSansUnicode00 f
+(j) 3265 7070 w
+7 /LucidaSansUnicode00 f
+(r) 3306 7090 w
+10 /LucidaSansUnicode00 f
+(,) 3351 7070 w
+(k) 3431 7070 w
+7 /LucidaSansUnicode00 f
+(q) 3500 7090 w
+10 /S f
+(+) 3568 7070 w
+10 /LucidaSansUnicode00 f
+(k) 3639 7070 w
+7 /LucidaSansUnicode00 f
+(r) 3708 7090 w
+10 /LucidaSansUnicode00 f
+(\)) 3753 7070 w
+cleartomark
+showpage
+saveobj restore
+%%EndPage: 5 5
+%%Page: 6 6
+/saveobj save def
+mark
+6 pagesetup
+10 /LucidaSansUnicode00 f
+(\255 6 \255) 2783 480 w
+10 /LucidaSans-Demi f
+(Substraction) 720 840 w
+9 /LucidaTypewriter f
+(Quaternion) 920 1010 w
+(subq\(Quaternion) 1635 1010 w
+(q,) 2675 1010 w
+(Quaternion) 2870 1010 w
+(r\)) 3585 1010 w
+10 /LucidaSansUnicode00 f
+(q) 1974 1250 w
+10 /S f
+(-) 2053 1250 w
+10 /LucidaSansUnicode00 f
+(r) 2124 1250 w
+10 /S f
+(=) 2221 1250 w
+10 /LucidaSansUnicode00 f
+(\() 2332 1250 w
+(r) 2373 1250 w
+7 /LucidaSansUnicode00 f
+(q) 2425 1270 w
+10 /S f
+(-) 2493 1250 w
+10 /LucidaSansUnicode00 f
+(r) 2564 1250 w
+7 /LucidaSansUnicode00 f
+(r) 2616 1270 w
+10 /LucidaSansUnicode00 f
+(,) 2661 1250 w
+(i) 2741 1250 w
+7 /LucidaSansUnicode00 f
+(q) 2781 1270 w
+10 /S f
+(-) 2849 1250 w
+10 /LucidaSansUnicode00 f
+(i) 2920 1250 w
+7 /LucidaSansUnicode00 f
+(r) 2960 1270 w
+10 /LucidaSansUnicode00 f
+(,) 3005 1250 w
+(j) 3085 1250 w
+7 /LucidaSansUnicode00 f
+(q) 3126 1270 w
+10 /S f
+(-) 3194 1250 w
+10 /LucidaSansUnicode00 f
+(j) 3265 1250 w
+7 /LucidaSansUnicode00 f
+(r) 3306 1270 w
+10 /LucidaSansUnicode00 f
+(,) 3351 1250 w
+(k) 3431 1250 w
+7 /LucidaSansUnicode00 f
+(q) 3500 1270 w
+10 /S f
+(-) 3568 1250 w
+10 /LucidaSansUnicode00 f
+(k) 3639 1250 w
+7 /LucidaSansUnicode00 f
+(r) 3708 1270 w
+10 /LucidaSansUnicode00 f
+(\)) 3753 1250 w
+10 /LucidaSans-Demi f
+(Multiplication) 720 1550 w
+9 /LucidaTypewriter f
+(Quaternion) 920 1720 w
+(mulq\(Quaternion) 1635 1720 w
+(q,) 2675 1720 w
+(Quaternion) 2870 1720 w
+(r\)) 3585 1720 w
+10 /LucidaSansUnicode00 f
+(q) 1321 1965 w
+10 /S f
+(=) 1440 1965 w
+10 /LucidaSansUnicode00 f
+([) 1551 1965 w
+(r) 1592 1965 w
+7 /LucidaSansUnicode00 f
+(q) 1644 1985 w
+10 /LucidaSansUnicode00 f
+(,) 1704 1965 w
+(v) 1784 1965 w
+7 /LucidaSansUnicode21 f
+(\222) 1777 1915 w
+7 /LucidaSansUnicode00 f
+(q) 1847 1985 w
+10 /LucidaSansUnicode00 f
+(]) 1907 1965 w
+(r) 1956 1965 w
+10 /S f
+(=) 2053 1965 w
+10 /LucidaSansUnicode00 f
+([) 2164 1965 w
+(r) 2205 1965 w
+7 /LucidaSansUnicode00 f
+(r) 2257 1985 w
+10 /LucidaSansUnicode00 f
+(,) 2302 1965 w
+(v) 2382 1965 w
+7 /LucidaSansUnicode21 f
+(\222) 2375 1915 w
+7 /LucidaSansUnicode00 f
+(r) 2445 1985 w
+10 /LucidaSansUnicode00 f
+(]) 2490 1965 w
+(qr) 2539 1965 w
+10 /S f
+(=) 2699 1965 w
+10 /LucidaSansUnicode00 f
+([) 2810 1965 w
+(r) 2851 1965 w
+7 /LucidaSansUnicode00 f
+(q) 2903 1985 w
+10 /LucidaSansUnicode00 f
+(r) 2963 1965 w
+7 /LucidaSansUnicode00 f
+(r) 3015 1985 w
+10 /S f
+(-) 3068 1965 w
+10 /LucidaSansUnicode00 f
+(v) 3139 1965 w
+7 /LucidaSansUnicode21 f
+(\222) 3132 1915 w
+7 /LucidaSansUnicode00 f
+(q) 3202 1985 w
+10 /LucidaSansUnicode20 f
+(") 3262 1965 w
+10 /LucidaSansUnicode00 f
+(v) 3326 1965 w
+7 /LucidaSansUnicode21 f
+(\222) 3319 1915 w
+7 /LucidaSansUnicode00 f
+(r) 3389 1985 w
+10 /LucidaSansUnicode00 f
+(,) 3434 1965 w
+(v) 3514 1965 w
+7 /LucidaSansUnicode21 f
+(\222) 3507 1915 w
+7 /LucidaSansUnicode00 f
+(r) 3577 1985 w
+10 /LucidaSansUnicode00 f
+(r) 3622 1965 w
+7 /LucidaSansUnicode00 f
+(q) 3674 1985 w
+10 /S f
+(+) 3742 1965 w
+10 /LucidaSansUnicode00 f
+(v) 3813 1965 w
+7 /LucidaSansUnicode21 f
+(\222) 3806 1915 w
+7 /LucidaSansUnicode00 f
+(q) 3876 1985 w
+10 /LucidaSansUnicode00 f
+(r) 3936 1965 w
+7 /LucidaSansUnicode00 f
+(r) 3988 1985 w
+10 /S f
+(+) 4041 1965 w
+10 /LucidaSansUnicode00 f
+(v) 4112 1965 w
+7 /LucidaSansUnicode21 f
+(\222) 4105 1915 w
+7 /LucidaSansUnicode00 f
+(q) 4175 1985 w
+10 /LucidaSansUnicode00 f
+(Xv) 4235 1965 w
+7 /LucidaSansUnicode21 f
+(\222) 4291 1915 w
+7 /LucidaSansUnicode00 f
+(r) 4361 1985 w
+10 /LucidaSansUnicode00 f
+(]) 4406 1965 w
+10 /LucidaSans-Demi f
+(Scalar Multiplication) 720 2265 w
+9 /LucidaTypewriter f
+(Quaternion) 920 2435 w
+(smulq\(Quaternion) 1635 2435 w
+(q,) 2740 2435 w
+(double) 2935 2435 w
+(s\)) 3390 2435 w
+10 /LucidaSansUnicode00 f
+(qs) 2243 2675 w
+10 /S f
+(=) 2413 2675 w
+10 /LucidaSansUnicode00 f
+([) 2524 2675 w
+(r) 2565 2675 w
+7 /LucidaSansUnicode00 f
+(q) 2617 2695 w
+10 /LucidaSansUnicode00 f
+(s) 2677 2675 w
+(,) 2736 2675 w
+(i) 2816 2675 w
+7 /LucidaSansUnicode00 f
+(q) 2856 2695 w
+10 /LucidaSansUnicode00 f
+(s) 2916 2675 w
+(,) 2975 2675 w
+(j) 3055 2675 w
+7 /LucidaSansUnicode00 f
+(q) 3096 2695 w
+10 /LucidaSansUnicode00 f
+(s) 3156 2675 w
+(,) 3215 2675 w
+(k) 3295 2675 w
+7 /LucidaSansUnicode00 f
+(q) 3364 2695 w
+10 /LucidaSansUnicode00 f
+(s) 3424 2675 w
+(]) 3483 2675 w
+10 /LucidaSans-Demi f
+(Inverse) 720 2975 w
+9 /LucidaTypewriter f
+(Quaternion) 920 3145 w
+(invq\(Quaternion) 1635 3145 w
+(q\)) 2675 3145 w
+10 /LucidaSansUnicode00 f
+(q) 2009 3470 w
+7 /S f
+(-) 2083 3430 w
+7 /LucidaSansUnicode00 f
+(1) 2133 3430 w
+10 /LucidaSansUnicode00 f
+10 /S f
+(=) 2241 3470 w
+10 /LucidaSansUnicode00 f
+10 /S f
+(\354) 2360 3383 w
+(\357) 2360 3483 w
+(\356) 2360 3583 w
+10 /LucidaSansUnicode00 f
+(|) 2434 3567 w
+(q) 2482 3550 w
+(|) 2545 3567 w
+7 /LucidaSansUnicode00 f
+(2) 2583 3510 w
+10 /LucidaSansUnicode00 f
+(r) 2514 3410 w
+10 /S1 f
+(_) 2419 3440 w
+(____) 2450 3440 w
+10 /LucidaSansUnicode00 f
+(,) 2668 3470 w
+(|) 2781 3567 w
+(q) 2829 3550 w
+(|) 2892 3567 w
+7 /LucidaSansUnicode00 f
+(2) 2930 3510 w
+10 /S f
+(-) 2832 3410 w
+10 /LucidaSansUnicode00 f
+(i) 2903 3410 w
+10 /S1 f
+(_) 2767 3440 w
+(____) 2798 3440 w
+10 /LucidaSansUnicode00 f
+(,) 3016 3470 w
+(|) 3129 3567 w
+(q) 3177 3550 w
+(|) 3240 3567 w
+7 /LucidaSansUnicode00 f
+(2) 3278 3510 w
+10 /S f
+(-) 3179 3410 w
+10 /LucidaSansUnicode00 f
+(j) 3250 3410 w
+10 /S1 f
+(_) 3114 3440 w
+(____) 3145 3440 w
+10 /LucidaSansUnicode00 f
+(,) 3363 3470 w
+(|) 3476 3567 w
+(q) 3524 3550 w
+(|) 3587 3567 w
+7 /LucidaSansUnicode00 f
+(2) 3625 3510 w
+10 /S f
+(-) 3512 3410 w
+10 /LucidaSansUnicode00 f
+(k) 3583 3410 w
+10 /S1 f
+(_) 3461 3440 w
+(____) 3492 3440 w
+10 /S f
+(\374) 3702 3383 w
+(\357) 3702 3483 w
+(\376) 3702 3583 w
+10 /LucidaSans-Demi f
+(Magnitude/Length) 720 3875 w
+9 /LucidaTypewriter f
+(double) 920 4045 w
+(qlen\(Quaternion) 1375 4045 w
+(q\)) 2415 4045 w
+10 /LucidaSansUnicode00 f
+(|) 2337 4320 w
+(q) 2385 4303 w
+(|) 2448 4320 w
+10 /S f
+(=) 2544 4303 w
+10 /LucidaSansUnicode00 f
+12 /LucidaSansUnicode22 f
+(\032) 2655 4303 w
+12 /S f
+(`) 2752 4303 w
+(```````````) 2755 4303 w
+10 /LucidaSansUnicode00 f
+(r) 2760 4303 w
+7 /LucidaSansUnicode00 f
+(2) 2806 4263 w
+10 /S f
+(+) 2874 4303 w
+10 /LucidaSansUnicode00 f
+(i) 2945 4303 w
+7 /LucidaSansUnicode00 f
+(2) 2979 4263 w
+10 /S f
+(+) 3047 4303 w
+10 /LucidaSansUnicode00 f
+(j) 3118 4303 w
+7 /LucidaSansUnicode00 f
+(2) 3153 4263 w
+10 /S f
+(+) 3221 4303 w
+10 /LucidaSansUnicode00 f
+(k) 3292 4303 w
+7 /LucidaSansUnicode00 f
+(2) 3355 4263 w
+cleartomark
+showpage
+saveobj restore
+%%EndPage: 6 6
+%%Trailer
+done
+%%DocumentFonts: LucidaSansUnicode20 LucidaSansUnicode21 LucidaSansUnicode22 S1 S LucidaSansUnicode00 LucidaSans-Demi LucidaSans-Italic LucidaTypewriter
+%%Pages: 6
--- /dev/null
+++ b/libgeometry/doc/mkfile
@@ -1,0 +1,15 @@
+FONTS='.FP lucidasans'
+DOCNAME=libgeometry
+
+all:VQ: $DOCNAME.ps $DOCNAME.pdf
+
+clean:VQ:
+	rm -f $DOCNAME.ps $DOCNAME.pdf
+
+$DOCNAME.ps:V: $DOCNAME.ms
+	{echo $FONTS; cat $prereq}> _$prereq
+	eval `{doctype _$prereq} | lp -dstdout > $target && rm -f _$prereq
+
+$DOCNAME.pdf:V: $DOCNAME.ps
+	cat /sys/doc/docfonts $prereq > _$prereq
+	ps2pdf _$prereq $target && rm -f _$prereq
--- /dev/null
+++ b/libgeometry/matrix.c
@@ -1,0 +1,348 @@
+#include <u.h>
+#include <libc.h>
+#include "../geometry.h"
+
+/* 2D */
+
+void
+identity(Matrix m)
+{
+	memset(m, 0, 3*3*sizeof(double));
+	m[0][0] = m[1][1] = m[2][2] = 1;
+}
+
+void
+addm(Matrix a, Matrix b)
+{
+	int i, j;
+
+	for(i = 0; i < 3; i++)
+		for(j = 0; j < 3; j++)
+			a[i][j] += b[i][j];
+}
+
+void
+subm(Matrix a, Matrix b)
+{
+	int i, j;
+
+	for(i = 0; i < 3; i++)
+		for(j = 0; j < 3; j++)
+			a[i][j] -= b[i][j];
+}
+
+void
+mulm(Matrix a, Matrix b)
+{
+	int i, j, k;
+	Matrix tmp;
+
+	for(i = 0; i < 3; i++)
+		for(j = 0; j < 3; j++){
+			tmp[i][j] = 0;
+			for(k = 0; k < 3; k++)
+				tmp[i][j] += a[i][k]*b[k][j];
+		}
+	memmove(a, tmp, 3*3*sizeof(double));
+}
+
+void
+smulm(Matrix m, double s)
+{
+	int i, j;
+
+	for(i = 0; i < 3; i++)
+		for(j = 0; j < 3; j++)
+			m[i][j] *= s;
+}
+
+void
+transposem(Matrix m)
+{
+	int i, j;
+	double tmp;
+
+	for(i = 0; i < 3; i++)
+		for(j = i; j < 3; j++){
+			tmp = m[i][j];
+			m[i][j] = m[j][i];
+			m[j][i] = tmp;
+		}
+}
+
+double
+detm(Matrix m)
+{
+	return m[0][0]*(m[1][1]*m[2][2] - m[1][2]*m[2][1])+
+	       m[0][1]*(m[1][2]*m[2][0] - m[1][0]*m[2][2])+
+	       m[0][2]*(m[1][0]*m[2][1] - m[1][1]*m[2][0]);
+}
+
+double
+tracem(Matrix m)
+{
+	return m[0][0] + m[1][1] + m[2][2];
+}
+
+void
+adjm(Matrix m)
+{
+	Matrix tmp;
+
+	tmp[0][0] =  m[1][1]*m[2][2] - m[1][2]*m[2][1];
+	tmp[0][1] = -m[0][1]*m[2][2] + m[0][2]*m[2][1];
+	tmp[0][2] =  m[0][1]*m[1][2] - m[0][2]*m[1][1];
+	tmp[1][0] = -m[1][0]*m[2][2] + m[1][2]*m[2][0];
+	tmp[1][1] =  m[0][0]*m[2][2] - m[0][2]*m[2][0];
+	tmp[1][2] = -m[0][0]*m[1][2] + m[0][2]*m[1][0];
+	tmp[2][0] =  m[1][0]*m[2][1] - m[1][1]*m[2][0];
+	tmp[2][1] = -m[0][0]*m[2][1] + m[0][1]*m[2][0];
+	tmp[2][2] =  m[0][0]*m[1][1] - m[0][1]*m[1][0];
+	memmove(m, tmp, 3*3*sizeof(double));
+}
+
+/* Cayley-Hamilton */
+//void
+//invertm(Matrix m)
+//{
+//	Matrix m², r;
+//	double det, trm, trm²;
+//
+//	det = detm(m);
+//	if(det == 0)
+//		return;
+//	trm = tracem(m);
+//	memmove(m², m, 3*3*sizeof(double));
+//	mulm(m², m²);
+//	trm² = tracem(m²);
+//	identity(r);
+//	smulm(r, (trm*trm - trm²)/2);
+//	smulm(m, trm);
+//	subm(r, m);
+//	addm(r, m²);
+//	smulm(r, 1/det);
+//	memmove(m, r, 3*3*sizeof(double));
+//}
+
+/* Cramer's */
+void
+invm(Matrix m)
+{
+	double det;
+
+	det = detm(m);
+	if(det == 0)
+		return; /* singular matrices are not invertible */
+	adjm(m);
+	smulm(m, 1/det);
+}
+
+Point2
+xform(Point2 p, Matrix m)
+{
+	return (Point2){
+		p.x*m[0][0] + p.y*m[0][1] + p.w*m[0][2],
+		p.x*m[1][0] + p.y*m[1][1] + p.w*m[1][2],
+		p.x*m[2][0] + p.y*m[2][1] + p.w*m[2][2]
+	};
+}
+
+/* 3D */
+
+void
+identity3(Matrix3 m)
+{
+	memset(m, 0, 4*4*sizeof(double));
+	m[0][0] = m[1][1] = m[2][2] = m[3][3] = 1;
+}
+
+void
+addm3(Matrix3 a, Matrix3 b)
+{
+	int i, j;
+
+	for(i = 0; i < 4; i++)
+		for(j = 0; j < 4; j++)
+			a[i][j] += b[i][j];
+}
+
+void
+subm3(Matrix3 a, Matrix3 b)
+{
+	int i, j;
+
+	for(i = 0; i < 4; i++)
+		for(j = 0; j < 4; j++)
+			a[i][j] -= b[i][j];
+}
+
+void
+mulm3(Matrix3 a, Matrix3 b)
+{
+	int i, j, k;
+	Matrix3 tmp;
+
+	for(i = 0; i < 4; i++)
+		for(j = 0; j < 4; j++){
+			tmp[i][j] = 0;
+			for(k = 0; k < 4; k++)
+				tmp[i][j] += a[i][k]*b[k][j];
+		}
+	memmove(a, tmp, 4*4*sizeof(double));
+}
+
+void
+smulm3(Matrix3 m, double s)
+{
+	int i, j;
+
+	for(i = 0; i < 4; i++)
+		for(j = 0; j < 4; j++)
+			m[i][j] *= s;
+}
+
+void
+transposem3(Matrix3 m)
+{
+	int i, j;
+	double tmp;
+
+	for(i = 0; i < 4; i++)
+		for(j = i; j < 4; j++){
+			tmp = m[i][j];
+			m[i][j] = m[j][i];
+			m[j][i] = tmp;
+		}
+}
+
+double
+detm3(Matrix3 m)
+{
+	return m[0][0]*(m[1][1]*(m[2][2]*m[3][3] - m[2][3]*m[3][2])+
+			m[1][2]*(m[2][3]*m[3][1] - m[2][1]*m[3][3])+
+			m[1][3]*(m[2][1]*m[3][2] - m[2][2]*m[3][1]))
+	      -m[0][1]*(m[1][0]*(m[2][2]*m[3][3] - m[2][3]*m[3][2])+
+			m[1][2]*(m[2][3]*m[3][0] - m[2][0]*m[3][3])+
+			m[1][3]*(m[2][0]*m[3][2] - m[2][2]*m[3][0]))
+	      +m[0][2]*(m[1][0]*(m[2][1]*m[3][3] - m[2][3]*m[3][1])+
+			m[1][1]*(m[2][3]*m[3][0] - m[2][0]*m[3][3])+
+			m[1][3]*(m[2][0]*m[3][1] - m[2][1]*m[3][0]))
+	      -m[0][3]*(m[1][0]*(m[2][1]*m[3][2] - m[2][2]*m[3][1])+
+			m[1][1]*(m[2][2]*m[3][0] - m[2][0]*m[3][2])+
+			m[1][2]*(m[2][0]*m[3][1] - m[2][1]*m[3][0]));
+}
+
+double
+tracem3(Matrix3 m)
+{
+	return m[0][0] + m[1][1] + m[2][2] + m[3][3];
+}
+
+void
+adjm3(Matrix3 m)
+{
+	Matrix3 tmp;
+
+	tmp[0][0]=m[1][1]*(m[2][2]*m[3][3] - m[2][3]*m[3][2])+
+		  m[2][1]*(m[1][3]*m[3][2] - m[1][2]*m[3][3])+
+		  m[3][1]*(m[1][2]*m[2][3] - m[1][3]*m[2][2]);
+	tmp[0][1]=m[0][1]*(m[2][3]*m[3][2] - m[2][2]*m[3][3])+
+		  m[2][1]*(m[0][2]*m[3][3] - m[0][3]*m[3][2])+
+		  m[3][1]*(m[0][3]*m[2][2] - m[0][2]*m[2][3]);
+	tmp[0][2]=m[0][1]*(m[1][2]*m[3][3] - m[1][3]*m[3][2])+
+		  m[1][1]*(m[0][3]*m[3][2] - m[0][2]*m[3][3])+
+		  m[3][1]*(m[0][2]*m[1][3] - m[0][3]*m[1][2]);
+	tmp[0][3]=m[0][1]*(m[1][3]*m[2][2] - m[1][2]*m[2][3])+
+		  m[1][1]*(m[0][2]*m[2][3] - m[0][3]*m[2][2])+
+		  m[2][1]*(m[0][3]*m[1][2] - m[0][2]*m[1][3]);
+	tmp[1][0]=m[1][0]*(m[2][3]*m[3][2] - m[2][2]*m[3][3])+
+		  m[2][0]*(m[1][2]*m[3][3] - m[1][3]*m[3][2])+
+		  m[3][0]*(m[1][3]*m[2][2] - m[1][2]*m[2][3]);
+	tmp[1][1]=m[0][0]*(m[2][2]*m[3][3] - m[2][3]*m[3][2])+
+		  m[2][0]*(m[0][3]*m[3][2] - m[0][2]*m[3][3])+
+		  m[3][0]*(m[0][2]*m[2][3] - m[0][3]*m[2][2]);
+	tmp[1][2]=m[0][0]*(m[1][3]*m[3][2] - m[1][2]*m[3][3])+
+		  m[1][0]*(m[0][2]*m[3][3] - m[0][3]*m[3][2])+
+		  m[3][0]*(m[0][3]*m[1][2] - m[0][2]*m[1][3]);
+	tmp[1][3]=m[0][0]*(m[1][2]*m[2][3] - m[1][3]*m[2][2])+
+		  m[1][0]*(m[0][3]*m[2][2] - m[0][2]*m[2][3])+
+		  m[2][0]*(m[0][2]*m[1][3] - m[0][3]*m[1][2]);
+	tmp[2][0]=m[1][0]*(m[2][1]*m[3][3] - m[2][3]*m[3][1])+
+		  m[2][0]*(m[1][3]*m[3][1] - m[1][1]*m[3][3])+
+		  m[3][0]*(m[1][1]*m[2][3] - m[1][3]*m[2][1]);
+	tmp[2][1]=m[0][0]*(m[2][3]*m[3][1] - m[2][1]*m[3][3])+
+		  m[2][0]*(m[0][1]*m[3][3] - m[0][3]*m[3][1])+
+		  m[3][0]*(m[0][3]*m[2][1] - m[0][1]*m[2][3]);
+	tmp[2][2]=m[0][0]*(m[1][1]*m[3][3] - m[1][3]*m[3][1])+
+		  m[1][0]*(m[0][3]*m[3][1] - m[0][1]*m[3][3])+
+		  m[3][0]*(m[0][1]*m[1][3] - m[0][3]*m[1][1]);
+	tmp[2][3]=m[0][0]*(m[1][3]*m[2][1] - m[1][1]*m[2][3])+
+		  m[1][0]*(m[0][1]*m[2][3] - m[0][3]*m[2][1])+
+		  m[2][0]*(m[0][3]*m[1][1] - m[0][1]*m[1][3]);
+	tmp[3][0]=m[1][0]*(m[2][2]*m[3][1] - m[2][1]*m[3][2])+
+		  m[2][0]*(m[1][1]*m[3][2] - m[1][2]*m[3][1])+
+		  m[3][0]*(m[1][2]*m[2][1] - m[1][1]*m[2][2]);
+	tmp[3][1]=m[0][0]*(m[2][1]*m[3][2] - m[2][2]*m[3][1])+
+		  m[2][0]*(m[0][2]*m[3][1] - m[0][1]*m[3][2])+
+		  m[3][0]*(m[0][1]*m[2][2] - m[0][2]*m[2][1]);
+	tmp[3][2]=m[0][0]*(m[1][2]*m[3][1] - m[1][1]*m[3][2])+
+		  m[1][0]*(m[0][1]*m[3][2] - m[0][2]*m[3][1])+
+		  m[3][0]*(m[0][2]*m[1][1] - m[0][1]*m[1][2]);
+	tmp[3][3]=m[0][0]*(m[1][1]*m[2][2] - m[1][2]*m[2][1])+
+		  m[1][0]*(m[0][2]*m[2][1] - m[0][1]*m[2][2])+
+		  m[2][0]*(m[0][1]*m[1][2] - m[0][2]*m[1][1]);
+	memmove(m, tmp, 4*4*sizeof(double));
+}
+
+/* Cayley-Hamilton */
+//void
+//invertm3(Matrix3 m)
+//{
+//	Matrix3 m², m³, r;
+//	double det, trm, trm², trm³;
+//
+//	det = detm3(m);
+//	if(det == 0)
+//		return;
+//	trm = tracem3(m);
+//	memmove(m³, m, 4*4*sizeof(double));
+//	mulm(m³, m³);
+//	mulm(m³, m);
+//	trm³ = tracem3(m³);
+//	memmove(m², m, 4*4*sizeof(double));
+//	mulm(m², m²);
+//	trm² = tracem3(m²);
+//	identity3(r);
+//	smulm3(r, (trm*trm*trm - 3*trm*trm² + 2*trm³)/6);
+//	smulm3(m, (trm*trm - trm²)/2);
+//	smulm3(m², trm);
+//	subm(r, m);
+//	addm(r, m²);
+//	subm(r, m³);
+//	smulm(r, 1/det);
+//	memmove(m, r, 4*4*sizeof(double));
+//}
+
+/* Cramer's */
+void
+invm3(Matrix3 m)
+{
+	double det;
+
+	det = detm3(m);
+	if(det == 0)
+		return; /* singular matrices are not invertible */
+	adjm3(m);
+	smulm3(m, 1/det);
+}
+
+Point3
+xform3(Point3 p, Matrix3 m)
+{
+	return (Point3){
+		p.x*m[0][0] + p.y*m[0][1] + p.z*m[0][2] + p.w*m[0][3],
+		p.x*m[1][0] + p.y*m[1][1] + p.z*m[1][2] + p.w*m[1][3],
+		p.x*m[2][0] + p.y*m[2][1] + p.z*m[2][2] + p.w*m[2][3],
+		p.x*m[3][0] + p.y*m[3][1] + p.z*m[3][2] + p.w*m[3][3],
+	};
+}
--- /dev/null
+++ b/libgeometry/mkfile
@@ -1,0 +1,13 @@
+</$objtype/mkfile
+
+LIB=../libgeometry.a$O
+OFILES=\
+	point.$O\
+	matrix.$O\
+	quaternion.$O\
+	rframe.$O\
+	triangle.$O\
+
+HFILES=../geometry.h
+
+</sys/src/cmd/mklib
--- /dev/null
+++ b/libgeometry/point.c
@@ -1,0 +1,161 @@
+#include <u.h>
+#include <libc.h>
+#include "../geometry.h"
+
+/* 2D */
+
+Point2
+Pt2(double x, double y, double w)
+{
+	return (Point2){x, y, w};
+}
+
+Point2
+Vec2(double x, double y)
+{
+	return (Point2){x, y, 0};
+}
+
+Point2
+addpt2(Point2 a, Point2 b)
+{
+	return (Point2){a.x+b.x, a.y+b.y, a.w+b.w};
+}
+
+Point2
+subpt2(Point2 a, Point2 b)
+{
+	return (Point2){a.x-b.x, a.y-b.y, a.w-b.w};
+}
+
+Point2
+mulpt2(Point2 p, double s)
+{
+	return (Point2){p.x*s, p.y*s, p.w*s};
+}
+
+Point2
+divpt2(Point2 p, double s)
+{
+	return (Point2){p.x/s, p.y/s, p.w/s};
+}
+
+Point2
+lerp2(Point2 a, Point2 b, double t)
+{
+	if(t < 0) t = 0;
+	if(t > 1) t = 1;
+	return (Point2){
+		(1 - t)*a.x + t*b.x,
+		(1 - t)*a.y + t*b.y,
+		(1 - t)*a.w + t*b.w
+	};
+}
+
+double
+dotvec2(Point2 a, Point2 b)
+{
+	return a.x*b.x + a.y*b.y;
+}
+
+double
+vec2len(Point2 v)
+{
+	return sqrt(dotvec2(v, v));
+}
+
+Point2
+normvec2(Point2 v)
+{
+	double len;
+
+	len = vec2len(v);
+	if(len == 0)
+		return (Point2){0, 0, 0};
+	return (Point2){v.x/len, v.y/len, 0};
+}
+
+/* 3D */
+
+Point3
+Pt3(double x, double y, double z, double w)
+{
+	return (Point3){x, y, z, w};
+}
+
+Point3
+Vec3(double x, double y, double z)
+{
+	return (Point3){x, y, z, 0};
+}
+
+Point3
+addpt3(Point3 a, Point3 b)
+{
+	return (Point3){a.x+b.x, a.y+b.y, a.z+b.z, a.w+b.w};
+}
+
+Point3
+subpt3(Point3 a, Point3 b)
+{
+	return (Point3){a.x-b.x, a.y-b.y, a.z-b.z, a.w-b.w};
+}
+
+Point3
+mulpt3(Point3 p, double s)
+{
+	return (Point3){p.x*s, p.y*s, p.z*s, p.w*s};
+}
+
+Point3
+divpt3(Point3 p, double s)
+{
+	return (Point3){p.x/s, p.y/s, p.z/s, p.w/s};
+}
+
+Point3
+lerp3(Point3 a, Point3 b, double t)
+{
+	if(t < 0) t = 0;
+	if(t > 1) t = 1;
+	return (Point3){
+		(1 - t)*a.x + t*b.x,
+		(1 - t)*a.y + t*b.y,
+		(1 - t)*a.z + t*b.z,
+		(1 - t)*a.w + t*b.w
+	};
+}
+
+double
+dotvec3(Point3 a, Point3 b)
+{
+	return a.x*b.x + a.y*b.y + a.z*b.z;
+}
+
+Point3
+crossvec3(Point3 a, Point3 b)
+{
+	return (Point3){
+		a.y*b.z - a.z*b.y,
+		a.z*b.x - a.x*b.z,
+		a.x*b.y - a.y*b.x,
+		0
+	};
+}
+
+double
+vec3len(Point3 v)
+{
+	return sqrt(dotvec3(v, v));
+}
+
+Point3
+normvec3(Point3 v)
+{
+	double len;
+
+	len = vec3len(v);
+	if(len == 0)
+		return (Point3){0, 0, 0, 0};
+	return (Point3){v.x/len, v.y/len, v.z/len, 0};
+}
--- /dev/null
+++ b/libgeometry/quaternion.c
@@ -1,0 +1,90 @@
+#include <u.h>
+#include <libc.h>
+#include "../geometry.h"
+
+Quaternion
+Quat(double r, double i, double j, double k)
+{
+	return (Quaternion){r, i, j, k};
+}
+
+Quaternion
+Quatvec(double s, Point3 v)
+{
+	return (Quaternion){s, v.x, v.y, v.z};
+}
+
+Quaternion
+addq(Quaternion a, Quaternion b)
+{
+	return (Quaternion){a.r+b.r, a.i+b.i, a.j+b.j, a.k+b.k};
+}
+
+Quaternion
+subq(Quaternion a, Quaternion b)
+{
+	return (Quaternion){a.r-b.r, a.i-b.i, a.j-b.j, a.k-b.k};
+}
+
+Quaternion
+mulq(Quaternion q, Quaternion r)
+{
+	Point3 qv, rv, tmp;
+
+	qv = Vec3(q.i, q.j, q.k);
+	rv = Vec3(r.i, r.j, r.k);
+	tmp = addpt3(addpt3(mulpt3(rv, q.r), mulpt3(qv, r.r)), crossvec3(qv, rv));
+	return (Quaternion){q.r*r.r - dotvec3(qv, rv), tmp.x, tmp.y, tmp.z};
+}
+
+Quaternion
+smulq(Quaternion q, double s)
+{
+	return (Quaternion){q.r*s, q.i*s, q.j*s, q.k*s};
+}
+
+Quaternion
+sdivq(Quaternion q, double s)
+{
+	return (Quaternion){q.r/s, q.i/s, q.j/s, q.k/s};
+}
+
+double
+dotq(Quaternion q, Quaternion r)
+{
+	return q.r*r.r + q.i*r.i + q.j*r.j + q.k*r.k;
+}
+
+Quaternion
+invq(Quaternion q)
+{
+	double len²;
+
+	len² = dotq(q, q);
+	if(len² == 0)
+		return (Quaternion){0, 0, 0, 0};
+	return (Quaternion){q.r/len², -q.i/len², -q.j/len², -q.k/len²};
+}
+
+double
+qlen(Quaternion q)
+{
+	return sqrt(q.r*q.r + q.i*q.i + q.j*q.j + q.k*q.k);
+}
+
+Quaternion
+normq(Quaternion q)
+{
+	return sdivq(q, qlen(q));
+}
+
+Point3
+qrotate(Point3 p, Point3 axis, double angle)
+{
+	Quaternion qaxis, qr;
+
+	angle /= 2;
+	qaxis = Quatvec(cos(angle), mulpt3(axis, sin(angle)));
+	qr = mulq(mulq(qaxis, Quatvec(0, p)), invq(qaxis));
+	return Vec3(qr.i, qr.j, qr.k);
+}
--- /dev/null
+++ b/libgeometry/rframe.c
@@ -1,0 +1,51 @@
+#include <u.h>
+#include <libc.h>
+#include "../geometry.h"
+
+Point2
+rframexform(Point2 p, RFrame rf)
+{
+	Matrix m = {
+		rf.bx.x, rf.bx.y, -dotvec2(rf.bx, rf.p),
+		rf.by.x, rf.by.y, -dotvec2(rf.by, rf.p),
+		0, 0, 1,
+	};
+	return xform(p, m);
+}
+
+Point3
+rframexform3(Point3 p, RFrame3 rf)
+{
+	Matrix3 m = {
+		rf.bx.x, rf.bx.y, rf.bx.z, -dotvec3(rf.bx, rf.p),
+		rf.by.x, rf.by.y, rf.by.z, -dotvec3(rf.by, rf.p),
+		rf.bz.x, rf.bz.y, rf.bz.z, -dotvec3(rf.bz, rf.p),
+		0, 0, 0, 1,
+	};
+	return xform3(p, m);
+}
+
+Point2
+invrframexform(Point2 p, RFrame rf)
+{
+	Matrix m = {
+		rf.bx.x, rf.bx.y, -dotvec2(rf.bx, rf.p),
+		rf.by.x, rf.by.y, -dotvec2(rf.by, rf.p),
+		0, 0, 1,
+	};
+	invm(m);
+	return xform(p, m);
+}
+
+Point3
+invrframexform3(Point3 p, RFrame3 rf)
+{
+	Matrix3 m = {
+		rf.bx.x, rf.bx.y, rf.bx.z, -dotvec3(rf.bx, rf.p),
+		rf.by.x, rf.by.y, rf.by.z, -dotvec3(rf.by, rf.p),
+		rf.bz.x, rf.bz.y, rf.bz.z, -dotvec3(rf.bz, rf.p),
+		0, 0, 0, 1,
+	};
+	invm3(m);
+	return xform3(p, m);
+}
--- /dev/null
+++ b/libgeometry/triangle.c
@@ -1,0 +1,9 @@
+#include <u.h>
+#include <libc.h>
+#include "../geometry.h"
+
+Point3
+centroid(Triangle3 t)
+{
+	return divpt3(addpt3(t.p0, addpt3(t.p1, t.p2)), 3);
+}
--- /dev/null
+++ b/libgraphics/camera.c
@@ -1,0 +1,103 @@
+#include <u.h>
+#include <libc.h>
+#include <draw.h>
+#include "../geometry.h"
+#include "../graphics.h"
+
+static int
+max(int a, int b)
+{
+	return a > b ? a : b;
+}
+
+static void
+verifycfg(Camera *c)
+{
+	assert(c->viewport != nil);
+	if(c->ptype == Ppersp)
+		assert(c->fov >= 1 && c->fov < 360);
+	assert(c->clip.n > 0 && c->clip.n < c->clip.f);
+}
+
+void
+perspective(Matrix3 m, double fov, double a, double n, double f)
+{
+	double cotan;
+
+	cotan = 1/tan(fov/2*DEG);
+	identity3(m);
+	m[0][0] =  cotan/a;
+	m[1][1] =  cotan;
+	m[2][2] = -(f+n)/(f-n);
+	m[2][3] = -2*f*n/(f-n);
+	m[3][2] = -1;
+}
+
+void
+orthographic(Matrix3 m, double l, double r, double b, double t, double n, double f)
+{
+	identity3(m);
+	m[0][0] =  2/(r - l);
+	m[1][1] =  2/(t - b);
+	m[2][2] = -2/(f - n);
+	m[0][3] = -(r + l)/(r - l);
+	m[1][3] = -(t + b)/(t - b);
+	m[2][3] = -(f + n)/(f - n);
+}
+
+void
+configcamera(Camera *c, Image *v, double fov, double n, double f, Projection p)
+{
+	c->viewport = v;
+	c->fov = fov;
+	c->clip.n = n;
+	c->clip.f = f;
+	c->ptype = p;
+	reloadcamera(c);
+}
+
+void
+placecamera(Camera *c, Point3 p, Point3 focus, Point3 up)
+{
+	c->p = p;
+	if(focus.w == 0)
+		c->bz = focus;
+	else
+		c->bz = normvec3(subpt3(c->p, focus));
+	c->bx = normvec3(crossvec3(up, c->bz));
+	c->by = crossvec3(c->bz, c->bx);
+}
+
+void
+aimcamera(Camera *c, Point3 focus)
+{
+	placecamera(c, c->p, focus, c->by);
+}
+
+void
+reloadcamera(Camera *c)
+{
+	double a;
+	double l, r, b, t;
+
+	verifycfg(c);
+	switch(c->ptype){
+	case Portho:
+		/*
+		r = Dx(c->viewport->r)/2;
+		t = Dy(c->viewport->r)/2;
+		l = -r;
+		b = -t;
+		*/
+		l = t = 0;
+		r = Dx(c->viewport->r);
+		b = Dy(c->viewport->r);
+		orthographic(c->proj, l, r, b, t, c->clip.n, c->clip.f);
+		break;
+	case Ppersp:
+		a = (double)Dx(c->viewport->r)/Dy(c->viewport->r);
+		perspective(c->proj, c->fov, a, c->clip.n, c->clip.f);
+		break;
+	default: sysfatal("unknown projection type");
+	}
+}
--- /dev/null
+++ b/libgraphics/doc/libgraphics.ms
@@ -1,0 +1,34 @@
+.TL
+libgraphics
+.AU
+Rodrigo G. López
+.sp
+rgl@antares-labs.eu
+.AI
+Antares Telecom Laboratories
+Albatera, Alicante
+.FS
+ACHTUNG! this is a
+.B "WORK IN PROGRESS"
+.FE
+.NH 1
+Data Structures
+.NH 2
+Camera
+.P1
+struct Camera {
+	RFrame3;		/* VCS */
+	Image *viewport;
+	double fov;		/* vertical FOV */
+	struct {
+		double n, f;	/* near and far clipping planes */
+	} clip;
+	Projection ptype;
+	Matrix3 proj;		/* VCS to viewport xform */
+};
+.P2
+.PP
+A camera is an image capturing entity, analog to the real world device
+we all know, that allows us to see the virtual 3-D world by projecting
+it into a viewport we can attach to a screen or window for real-time
+visualization or write out into a file.
--- /dev/null
+++ b/libgraphics/doc/libgraphics.pdf
@@ -1,0 +1,295 @@
+%PDF-1.2
+%�쏢
+5 0 obj
+<</Length 6 0 R/Filter /FlateDecode>>
+stream
+x�e��n�0��z
+�Ty�4K�/vi��� i=C�8n���[۹��S�FIIP�B��O$�!�u�eKB���#/D�8�����|.2��	d���$
A��6�fכ�}]����p�Y�#`2�%���}��`�a����cY�s�@��~�\�ߣ髁5f3��p�ɓOJ,����ς����ZX�Mכ����"s������|�IS�xM���I-Re݉s?P��D�2��������?�"Q� ���<�ѩi��r+�B�녃s,)����p޿z��j��Kp��q�C
+��8�ҧ��Đ�� �"�}�����(n�������[�?La%Q��q_�S��(Sz�+��i����������ߗ6&��X͋�z�rf����礞�endstream
+endobj
+6 0 obj
+386
+endobj
+4 0 obj
+<</Type/Page/MediaBox [0 0 612 792]
+/Rotate 0/Parent 3 0 R
+/Resources<</ProcSet[/PDF /Text]
+/Font 17 0 R
+>>
+/Contents 5 0 R
+>>
+endobj
+3 0 obj
+<< /Type /Pages /Kids [
+4 0 R
+] /Count 1
+>>
+endobj
+1 0 obj
+<</Type /Catalog /Pages 3 0 R
+>>
+endobj
+17 0 obj
+<</R15
+15 0 R/R8
+8 0 R/R10
+10 0 R/R12
+12 0 R/R14
+14 0 R/R16
+16 0 R>>
+endobj
+15 0 obj
+<</BaseFont/Times-Roman/Type/Font
+/Subtype/Type1>>
+endobj
+8 0 obj
+<</BaseFont/DIDNIM+LucidaSans-Demi/FontDescriptor 7 0 R/Type/Font
+/FirstChar 32/LastChar 117/Widths[
+319 0 0 0 0 0 0 0 0 0 0 0 0 0 247 0
+0 639 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 712 793 601 0 746 0 331 0 710 0 0 768 823
+613 0 690 571 0 0 0 904 0 0 0 0 0 0 0 0
+0 588 663 532 0 586 0 660 657 325 0 0 325 970 0 0
+663 0 454 566 405 657]
+/Encoding/WinAnsiEncoding/Subtype/Type1>>
+endobj
+10 0 obj
+<</BaseFont/ARKRES+LucidaSans-Italic/FontDescriptor 9 0 R/Type/Font
+/FirstChar 32/LastChar 243/Widths[
+316 0 0 0 0 0 0 0 0 0 0 0 0 633 316 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+858 0 0 0 0 0 0 702 0 0 0 0 545 0 0 0
+0 0 632 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 608 608 0 608 529 0 608 0 289 0 0 289 0 621 566
+608 0 478 489 383 621 0 0 0 0 536 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 566]
+/Encoding 22 0 R/Subtype/Type1>>
+endobj
+22 0 obj
+<</Type/Encoding/BaseEncoding/WinAnsiEncoding/Differences[
+45/minus]>>
+endobj
+12 0 obj
+<</BaseFont/XXIYSF+LucidaSansUnicode00/FontDescriptor 11 0 R/Type/Font
+/FirstChar 32/LastChar 116/Widths[
+316 316 0 0 0 0 0 0 0 0 0 0 316 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 690 0 692 0 0 0 723 735 0 0 0 533 0 739 0
+0 0 0 0 632 693 0 0 0 0 0 0 0 0 0 0
+0 552 630 512 0 557 0 0 620 289 0 0 289 934 620 614
+0 0 409 509 374]
+/Encoding 23 0 R/Subtype/Type1>>
+endobj
+23 0 obj
+<</Type/Encoding/BaseEncoding/WinAnsiEncoding/Differences[
+32/0020/0021
+44/002c
+65/0041
+67/0043
+71/0047/0048
+76/004c
+78/004e
+84/0054/0055
+97/0061/0062/0063
+101/0065
+104/0068/0069
+108/006c/006d/006e/006f
+114/0072/0073/0074]>>
+endobj
+14 0 obj
+<</BaseFont/SBRUOU+LucidaTypewriter/FontDescriptor 13 0 R/Type/Font
+/FirstChar 59/LastChar 125/Widths[ 723 0 0 0 0
+0 0 0 723 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 723 0 723 0 723 0 0 0 0 0 0 0 723 0 0
+0 0 723 723 723 723 0 0 0 0 0 723 0 723]
+/Encoding/WinAnsiEncoding/Subtype/Type1>>
+endobj
+16 0 obj
+<</BaseFont/Symbol/Type/Font
+/Subtype/Type1>>
+endobj
+7 0 obj
+<</Type/FontDescriptor/FontName/DIDNIM+LucidaSans-Demi/FontBBox[0 -205 895 771]/Flags 4
+/Ascent 771
+/CapHeight 771
+/Descent -205
+/ItalicAngle 0
+/StemV 134
+/MissingWidth 319
+/CharSet(/c/N/C/p/e/O/D/P/E/r/g/s/h/R/G/t/i/S/u/I/l/a/K/m/b/W/space/period/one)/FontFile3 18 0 R>>
+endobj
+18 0 obj
+<</Filter/LZWDecode
+/Subtype/Type1C/Length 2925>>stream
++T�u��g2���S ��"!V.b�2��|D+��!^]��Y�E��dFX�w-`���caI��+���{����{���E�c��:���N}��XE���>;� �@�{+�WIJ�Aq^FR�	�s�p^3C��¨�^D��a�ATpP�B+(���"]j�B`X�x7Fa�G�pS�v7B5@!G��|�-�C@�=���aT��<G�،�iI��Hk/nl�h3�+pR����lN��;%@@���a��n ����HD�U�!�@++�xA�+�	P3��E��\P	�D'�@��xE��%C��v�E�:���z�
+�Nm!pq���藞j@#F�L�Cĭ}�jW��=�8�c+!p�Ю�~#�����3����0{���Ǹ�T��}���!C�����E������Y<4�X�\+	($�H[��6H�
+�|9)�2�X�#8M�q'D���I+��Z���J�,"Ĩ��U��b.y�xJ.�'D"+�������o�rJ�nq�p7�.7���Y�|؊L��\��X
�Ja\
+�6'�`� �A
+!+@>@+��	���p�X <!"A"a&"+`"�Pa�K���Rf&��Ld���W�˸���S >����(b*�)���aRĮ>
��bH���+�*`�����@�	�����b)�`+m��+M�A�$+endstream
+endobj
+9 0 obj
+<</Type/FontDescriptor/FontName/ARKRES+LucidaSans-Italic/FontBBox[0 -205 889 771]/Flags 4
+/Ascent 771
+/CapHeight 771
+/Descent -205
+/ItalicAngle 0
+/StemV 133
+/MissingWidth 316
+/CharSet(/L/n/minus/z/o/d/at/p/e/r/g/oacute/s/R/G/t/i/u/acute/l/a/b/space/period)/FontFile3 19 0 R>>
+endobj
+19 0 obj
+<</Filter/LZWDecode
+/Subtype/Type1C/Length 2572>>stream
++��	+�&�
+~+E��@�[�f!�y�G�Do�����}�a�p-̣��O��yRs�>O%)LU�aZK�\�S��	+�	4D��Y�E�ɠq�(gHi����a�����&lR��1G��>R���+{�٬���t�d��d�91b��.a#�cAnDf�"+��b�N
+�B*0�ˆ_�zx` �}��+G�FaX}�u��H���d��(#����P��q�����\R��f&���BtK�qL%�eB�9���B�[`|/�P�!A��o�դ�r;�SIY,%���Ǹ_#+�\-��#���bL=`02Cp��,E�2����X
+�z'+C(Z�1<-�B�S
+�B*D��B\S+�%� ���J�X,EP��B�A��j� �M��0��z!�G�aDhua*:���Èp��E���i��4U�<�]�3	@���@a
!�*�`�%+
+,D ���D������;��0X���,{���#�� Cܡ���=�j]B�j�q;�X�´9
+@�*C0�I�}��r��+��$�h�������BdP�P<$�p��lHE0'K����{��n=���K�H	�d>��7��+�(6+!+a�A�!�^��A�@v`���*A(�*�,���J��+endstream
+endobj
+11 0 obj
+<</Type/FontDescriptor/FontName/XXIYSF+LucidaSansUnicode00/FontBBox[0 -157 843 771]/Flags 4
+/Ascent 771
+/CapHeight 771
+/Descent -157
+/ItalicAngle 0
+/StemV 126
+/MissingWidth 316
+/CharSet(/006e/0063/002c/006f/004e/0043/0065/0020/0021/0072/0073/0068/0047/0074/0069/0048/0054/0055/006c/0061/006d/0062/004c/0041)/FontFile3 20 0 R>>
+endobj
+20 0 obj
+<</Filter/LZWDecode
+/Subtype/Type1C/Length 2389>>stream
++�3I��S0��eSq��o2F4L�
�_��:E��/���.�	� 5hBOw�E����+4+DI+ +]��+��!�hҜ�hgY�P�4{�GX{�GX*�gX���*i�Ĺ+���J�a(i.	&��O�R�.	�i�x����^��AM�d�O��A���iE��X�E���"+ap�X���c��:#�4"��5
+c0�K���<B� >�@@d�C�~@�X{����tC�r3���M
���M+����H�"@��tG�.v�XS��2P��QJY�el�E�$0>c�@�b�}�:VL3�&��/硰+����C��D$XrE��	v*c��E��Y�T����Yf>i�f	`&��I��19L�@8�M���H�$��F�8��9�`��d!��q��%��@�j�g�Pg�e�$j���L���+�{����H��C����p�\T")X��J�A���,C���"���bfm��,"�r���BHQ� �8s��V��8DX[l"-�
+"D���1�X�B�E��)���l=��"�8	PF1C�X�f8�@�"°�0'1t/D���LG�A&%��+���l!�C��+@�+ah�t
+���>+���V�x���=�8|��va���*���}+!�9�� h�
�6;`f
+G�u	��T�Q|0+�X9a7DX�$T	%x����`���=ˆ���\V_�C�GQ%]K�L1����xǠ�}��乥���HKҷ�%�~�\���D m��$>@rRXP�����4�����^�Q.DX�"d1	@�#C����<��:���.���Qp����.+endstream
+endobj
+13 0 obj
+<</Type/FontDescriptor/FontName/SBRUOU+LucidaTypewriter/FontBBox[0 -157 720 771]/Flags 5
+/Ascent 771
+/CapHeight 771
+/Descent -157
+/ItalicAngle 0
+/StemV 108
+/AvgWidth 723
+/MaxWidth 723
+/MissingWidth 723
+/CharSet(/c/C/e/r/s/t/u/semicolon/braceleft/a/m/braceright)/FontFile3 21 0 R>>
+endobj
+21 0 obj
+<</Filter/LZWDecode
+/Subtype/Type1C/Length 1920>>stream
++�+DF��{���tA�(>H$�J��C�3�&i��ƙ�|O��qH*d� +�� 5�!"0��L�a��(	"h�6��>B�������~]$�ję4H���l�à�A����=�D �!a�����,���&{��1ZC�8>P�ĹS������|!����{��s�}�X*T��Y�<��r/B�Ba�%b��+
+�`�E���v{��!�*&�.M� �$G��2H��,��
+,CY6��La��?��Hf����+��N$�������J#y�>����&y�ke��	W[����
+O�'�uħ�,��:f�d���g�2>��I��}�`"�`���;�p�/���b�E��00E��LG��3�8`�CAX�",3���%�؟�tD	�2��!%����LJ`�㭛��(! ��"À�
Bd>��f!E0�,\u���X�T���,`�"�>��6�X�Ck6 �	Q0�C�5����k{��
���!Hd�qx;�vb�Q0@(�	cq�� �Q�F�F`�+�r&0�#hZ����b�,�a��@�	��i�@�"�x�eW+ ��bCT3� �"•2
|�!x<��ma=�A C;�e`��j9Q(�<
+���"�苮!�J�@�tB+�>+& �����4++endstream
+endobj
+2 0 obj
+<</Producer(AFPL Ghostscript 8.53)
+/CreationDate(D:20191105235851)
+/ModDate(D:20191105235851)>>endobj
+xref
+0 24
+0000000000 65535 f 
+0000000691 00000 n 
+0000014343 00000 n 
+0000000632 00000 n 
+0000000490 00000 n 
+0000000015 00000 n 
+0000000471 00000 n 
+0000002987 00000 n 
+0000000891 00000 n 
+0000006282 00000 n 
+0000001280 00000 n 
+0000009228 00000 n 
+0000001990 00000 n 
+0000012043 00000 n 
+0000002605 00000 n 
+0000000824 00000 n 
+0000002925 00000 n 
+0000000739 00000 n 
+0000003274 00000 n 
+0000006573 00000 n 
+0000009571 00000 n 
+0000012340 00000 n 
+0000001903 00000 n 
+0000002364 00000 n 
+trailer
+<< /Size 24 /Root 1 0 R /Info 2 0 R
+/ID [<83B4B497B4BE760E2302DD9469D51E12><83B4B497B4BE760E2302DD9469D51E12>]
+>>
+startxref
+14453
+%%EOF
--- /dev/null
+++ b/libgraphics/doc/libgraphics.ps
@@ -1,0 +1,583 @@
+%!PS-Adobe-2.0
+%%Version: 0.1
+%%Creator: troff, Plan 9 edition
+%%DocumentFonts: (atend)
+%%Pages: (atend)
+%%EndComments
+%
+% Version 3.3.2 prologue for troff files.
+%
+
+/#copies 1 store
+/aspectratio 1 def
+/formsperpage 1 def
+/landscape false def
+/linewidth .3 def
+/magnification 1 def
+/margin 0 def
+/orientation 0 def
+/resolution 720 def
+/rotation 1 def
+/xoffset 0 def
+/yoffset 0 def
+
+/roundpage true def
+/useclippath true def
+/pagebbox [0 0 612 792] def
+
+/R  /Times-Roman def
+/I  /Times-Italic def
+/B  /Times-Bold def
+/BI /Times-BoldItalic def
+/H  /Helvetica def
+/HI /Helvetica-Oblique def
+/HB /Helvetica-Bold def
+/HX /Helvetica-BoldOblique def
+/CW /Courier def
+/CO /Courier def
+/CI /Courier-Oblique def
+/CB /Courier-Bold def
+/CX /Courier-BoldOblique def
+/PA /Palatino-Roman def
+/PI /Palatino-Italic def
+/PB /Palatino-Bold def
+/PX /Palatino-BoldItalic def
+/Hr /Helvetica-Narrow def
+/Hi /Helvetica-Narrow-Oblique def
+/Hb /Helvetica-Narrow-Bold def
+/Hx /Helvetica-Narrow-BoldOblique def
+/KR /Bookman-Light def
+/KI /Bookman-LightItalic def
+/KB /Bookman-Demi def
+/KX /Bookman-DemiItalic def
+/AR /AvantGarde-Book def
+/AI /AvantGarde-BookOblique def
+/AB /AvantGarde-Demi def
+/AX /AvantGarde-DemiOblique def
+/NR /NewCenturySchlbk-Roman def
+/NI /NewCenturySchlbk-Italic def
+/NB /NewCenturySchlbk-Bold def
+/NX /NewCenturySchlbk-BoldItalic def
+/ZD /ZapfDingbats def
+/ZI /ZapfChancery-MediumItalic def
+/S  /S def
+/S1 /S1 def
+/GR /Symbol def
+
+/inch {72 mul} bind def
+/min {2 copy gt {exch} if pop} bind def
+
+/setup {
+	counttomark 2 idiv {def} repeat pop
+
+	landscape {/orientation 90 orientation add def} if
+	/scaling 72 resolution div def
+	linewidth setlinewidth
+	1 setlinecap
+
+	pagedimensions
+	xcenter ycenter translate
+	orientation rotation mul rotate
+	width 2 div neg height 2 div translate
+	xoffset inch yoffset inch neg translate
+	margin 2 div dup neg translate
+	magnification dup aspectratio mul scale
+	scaling scaling scale
+
+	addmetrics
+	0 0 moveto
+} def
+
+/pagedimensions {
+	useclippath userdict /gotpagebbox known not and {
+		/pagebbox [clippath pathbbox newpath] def
+		roundpage currentdict /roundpagebbox known and {roundpagebbox} if
+	} if
+	pagebbox aload pop
+	4 -1 roll exch 4 1 roll 4 copy
+	landscape {4 2 roll} if
+	sub /width exch def
+	sub /height exch def
+	add 2 div /xcenter exch def
+	add 2 div /ycenter exch def
+	userdict /gotpagebbox true put
+} def
+
+/addmetrics {
+	/Symbol /S null Sdefs cf
+	/Times-Roman /S1 StandardEncoding dup length array copy S1defs cf
+} def
+
+/pagesetup {
+	/page exch def
+	currentdict /pagedict known currentdict page known and {
+		page load pagedict exch get cvx exec
+	} if
+} def
+
+/decodingdefs [
+	{counttomark 2 idiv {y moveto show} repeat}
+	{neg /y exch def counttomark 2 idiv {y moveto show} repeat}
+	{neg moveto {2 index stringwidth pop sub exch div 0 32 4 -1 roll widthshow} repeat}
+	{neg moveto {spacewidth sub 0.0 32 4 -1 roll widthshow} repeat}
+	{counttomark 2 idiv {y moveto show} repeat}
+	{neg setfunnytext}
+] def
+
+/setdecoding {/t decodingdefs 3 -1 roll get bind def} bind def
+
+/w {neg moveto show} bind def
+/m {neg dup /y exch def moveto} bind def
+/done {/lastpage where {pop lastpage} if} def
+
+/f {
+	dup /font exch def findfont exch
+	dup /ptsize exch def scaling div dup /size exch def scalefont setfont
+	linewidth ptsize mul scaling 10 mul div setlinewidth
+	/spacewidth ( ) stringwidth pop def
+} bind def
+
+/changefont {
+	/fontheight exch def
+	/fontslant exch def
+	currentfont [
+		1 0
+		fontheight ptsize div fontslant sin mul fontslant cos div
+		fontheight ptsize div
+		0 0
+	] makefont setfont
+} bind def
+
+/sf {f} bind def
+
+/cf {
+	dup length 2 idiv
+	/entries exch def
+	/chtab exch def
+	/newencoding exch def
+	/newfont exch def
+
+	findfont dup length 1 add dict
+	/newdict exch def
+	{1 index /FID ne {newdict 3 1 roll put}{pop pop} ifelse} forall
+
+	newencoding type /arraytype eq {newdict /Encoding newencoding put} if
+
+	newdict /Metrics entries dict put
+	newdict /Metrics get
+	begin
+		chtab aload pop
+		1 1 entries {pop def} for
+		newfont newdict definefont pop
+	end
+} bind def
+
+%
+% A few arrays used to adjust reference points and character widths in some
+% of the printer resident fonts. If square roots are too high try changing
+% the lines describing /radical and /radicalex to,
+%
+%	/radical	[0 -75 550 0]
+%	/radicalex	[-50 -75 500 0]
+%
+% Move braceleftbt a bit - default PostScript character is off a bit.
+%
+
+/Sdefs [
+	/bracketlefttp		[201 500]
+	/bracketleftbt		[201 500]
+	/bracketrighttp		[-81 380]
+	/bracketrightbt		[-83 380]
+	/braceleftbt		[203 490]
+	/bracketrightex		[220 -125 500 0]
+	/radical		[0 0 550 0]
+	/radicalex		[-50 0 500 0]
+	/parenleftex		[-20 -170 0 0]
+	/integral		[100 -50 500 0]
+	/infinity		[10 -75 730 0]
+] def
+
+/S1defs [
+	/underscore		[0 80 500 0]
+	/endash			[7 90 650 0]
+] def
+%
+% Tries to round clipping path dimensions, as stored in array pagebbox, so they
+% match one of the known sizes in the papersizes array. Lower left coordinates
+% are always set to 0.
+%
+
+/roundpagebbox {
+    7 dict begin
+	/papersizes [8.5 inch 11 inch 14 inch 17 inch] def
+
+	/mappapersize {
+		/val exch def
+		/slop .5 inch def
+		/diff slop def
+		/j 0 def
+		0 1 papersizes length 1 sub {
+			/i exch def
+			papersizes i get val sub abs
+			dup diff le {/diff exch def /j i def} {pop} ifelse
+		} for
+		diff slop lt {papersizes j get} {val} ifelse
+	} def
+
+	pagebbox 0 0 put
+	pagebbox 1 0 put
+	pagebbox dup 2 get mappapersize 2 exch put
+	pagebbox dup 3 get mappapersize 3 exch put
+    end
+} bind def
+
+%%EndProlog
+%%BeginSetup
+mark
+%
+% Encoding vector and redefinition of findfont for the ISO Latin1 standard.
+% The 18 characters missing from ROM based fonts on older printers are noted
+% below.
+%
+
+/ISOLatin1Encoding [
+	/.notdef
+	/.notdef
+	/.notdef
+	/.notdef
+	/.notdef
+	/.notdef
+	/.notdef
+	/.notdef
+	/.notdef
+	/.notdef
+	/.notdef
+	/.notdef
+	/.notdef
+	/.notdef
+	/.notdef
+	/.notdef
+	/.notdef
+	/.notdef
+	/.notdef
+	/.notdef
+	/.notdef
+	/.notdef
+	/.notdef
+	/.notdef
+	/.notdef
+	/.notdef
+	/.notdef
+	/.notdef
+	/.notdef
+	/.notdef
+	/.notdef
+	/.notdef
+	/space
+	/exclam
+	/quotedbl
+	/numbersign
+	/dollar
+	/percent
+	/ampersand
+	/quoteright
+	/parenleft
+	/parenright
+	/asterisk
+	/plus
+	/comma
+	/minus
+	/period
+	/slash
+	/zero
+	/one
+	/two
+	/three
+	/four
+	/five
+	/six
+	/seven
+	/eight
+	/nine
+	/colon
+	/semicolon
+	/less
+	/equal
+	/greater
+	/question
+	/at
+	/A
+	/B
+	/C
+	/D
+	/E
+	/F
+	/G
+	/H
+	/I
+	/J
+	/K
+	/L
+	/M
+	/N
+	/O
+	/P
+	/Q
+	/R
+	/S
+	/T
+	/U
+	/V
+	/W
+	/X
+	/Y
+	/Z
+	/bracketleft
+	/backslash
+	/bracketright
+	/asciicircum
+	/underscore
+	/quoteleft
+	/a
+	/b
+	/c
+	/d
+	/e
+	/f
+	/g
+	/h
+	/i
+	/j
+	/k
+	/l
+	/m
+	/n
+	/o
+	/p
+	/q
+	/r
+	/s
+	/t
+	/u
+	/v
+	/w
+	/x
+	/y
+	/z
+	/braceleft
+	/bar
+	/braceright
+	/asciitilde
+	/.notdef
+	/.notdef
+	/.notdef
+	/.notdef
+	/.notdef
+	/.notdef
+	/.notdef
+	/.notdef
+	/.notdef
+	/.notdef
+	/.notdef
+	/.notdef
+	/.notdef
+	/.notdef
+	/.notdef
+	/.notdef
+	/.notdef
+	/dotlessi
+	/grave
+	/acute
+	/circumflex
+	/tilde
+	/macron
+	/breve
+	/dotaccent
+	/dieresis
+	/.notdef
+	/ring
+	/cedilla
+	/.notdef
+	/hungarumlaut
+	/ogonek
+	/caron
+	/space
+	/exclamdown
+	/cent
+	/sterling
+	/currency
+	/yen
+	/brokenbar		% missing
+	/section
+	/dieresis
+	/copyright
+	/ordfeminine
+	/guillemotleft
+	/logicalnot
+	/hyphen
+	/registered
+	/macron
+	/degree			% missing
+	/plusminus		% missing
+	/twosuperior		% missing
+	/threesuperior		% missing
+	/acute
+	/mu			% missing
+	/paragraph
+	/periodcentered
+	/cedilla
+	/onesuperior		% missing
+	/ordmasculine
+	/guillemotright
+	/onequarter		% missing
+	/onehalf		% missing
+	/threequarters		% missing
+	/questiondown
+	/Agrave
+	/Aacute
+	/Acircumflex
+	/Atilde
+	/Adieresis
+	/Aring
+	/AE
+	/Ccedilla
+	/Egrave
+	/Eacute
+	/Ecircumflex
+	/Edieresis
+	/Igrave
+	/Iacute
+	/Icircumflex
+	/Idieresis
+	/Eth			% missing
+	/Ntilde
+	/Ograve
+	/Oacute
+	/Ocircumflex
+	/Otilde
+	/Odieresis
+	/multiply		% missing
+	/Oslash
+	/Ugrave
+	/Uacute
+	/Ucircumflex
+	/Udieresis
+	/Yacute			% missing
+	/Thorn			% missing
+	/germandbls
+	/agrave
+	/aacute
+	/acircumflex
+	/atilde
+	/adieresis
+	/aring
+	/ae
+	/ccedilla
+	/egrave
+	/eacute
+	/ecircumflex
+	/edieresis
+	/igrave
+	/iacute
+	/icircumflex
+	/idieresis
+	/eth			% missing
+	/ntilde
+	/ograve
+	/oacute
+	/ocircumflex
+	/otilde
+	/odieresis
+	/divide			% missing
+	/oslash
+	/ugrave
+	/uacute
+	/ucircumflex
+	/udieresis
+	/yacute			% missing
+	/thorn			% missing
+	/ydieresis
+] def
+
+/NewFontDirectory FontDirectory maxlength dict def
+
+%
+% Apparently no guarantee findfont is defined in systemdict so the obvious
+%
+%	systemdict /findfont get exec
+%
+% can generate an error. So far the only exception is a VT600 (version 48.0).
+%
+
+userdict /@RealFindfont known not {
+	userdict begin
+		/@RealFindfont systemdict begin /findfont load end def
+	end
+} if
+
+/findfont {
+	dup NewFontDirectory exch known not {
+		dup
+		%dup systemdict /findfont get exec	% not always in systemdict
+		dup userdict /@RealFindfont get exec
+		dup /Encoding get StandardEncoding eq {
+			dup length dict begin
+				{1 index /FID ne {def}{pop pop} ifelse} forall
+				/Encoding ISOLatin1Encoding def
+				currentdict
+			end
+			/DummyFontName exch definefont
+		} if
+		NewFontDirectory 3 1 roll put
+	} if
+	NewFontDirectory exch get
+} bind def
+
+%%Patch from lp
+%%EndPatch from lp
+
+setup
+%%EndSetup
+%%Page: 1 1
+/saveobj save def
+mark
+1 pagesetup
+12 /LucidaSans-Demi f
+(libgraphics) 2533 1220 w
+10 /LucidaSans-Italic f
+(Rodrigo G. L\363pez) 2469 1480 w
+(rgl@antares-labs.eu) 2377 1760 w
+10 /LucidaSansUnicode00 f
+(Antares Telecom Laboratories) 2156 1960 w
+(Albatera, Alicante) 2451 2100 w
+10 /LucidaSans-Demi f
+(1.) 720 2700 w
+(Data Structures) 873 2700 w
+(1.1.) 720 2940 w
+(Camera) 962 2940 w
+9 /LucidaTypewriter f
+(struct) 920 3110 w
+(Camera) 1375 3110 w
+({) 1830 3110 w
+(};) 920 3330 w
+10 /LucidaSansUnicode00 f
+(A camera) 970 3546 w
+8 /S1 f
+(__________________) 720 6980 w
+8 /LucidaSansUnicode00 f
+(ACHTUNG!) 720 7080 w
+(this) 1163 7080 w
+(is) 1333 7080 w
+(a) 1423 7080 w
+8 /LucidaSans-Demi f
+(WORK) 1493 7080 w
+(IN) 1769 7080 w
+(PROGRESS) 1883 7080 w
+cleartomark
+showpage
+saveobj restore
+%%EndPage: 1 1
+%%Trailer
+done
+%%DocumentFonts: S1 LucidaSansUnicode00 LucidaSans-Demi LucidaSans-Italic LucidaTypewriter
+%%Pages: 1
--- /dev/null
+++ b/libgraphics/doc/mkfile
@@ -1,0 +1,15 @@
+FONTS='.FP lucidasans'
+DOCNAME=libgraphics
+
+all:VQ: $DOCNAME.ps $DOCNAME.pdf
+
+clean:VQ:
+	rm -f $DOCNAME.ps $DOCNAME.pdf
+
+$DOCNAME.ps:V: $DOCNAME.ms
+	{echo $FONTS; cat $prereq}> _$prereq
+	eval `{doctype _$prereq} | lp -dstdout > $target && rm -f _$prereq
+
+$DOCNAME.pdf:V: $DOCNAME.ps
+	cat /sys/doc/docfonts $prereq > _$prereq
+	ps2pdf _$prereq $target && rm -f _$prereq
--- /dev/null
+++ b/libgraphics/mkfile
@@ -1,0 +1,11 @@
+</$objtype/mkfile
+
+LIB=../libgraphics.a$O
+OFILES=\
+	triangle.$O\
+	camera.$O\
+	render.$O\
+
+HFILES=../graphics.h
+
+</sys/src/cmd/mklib
--- /dev/null
+++ b/libgraphics/render.c
@@ -1,0 +1,84 @@
+#include <u.h>
+#include <libc.h>
+#include <draw.h>
+#include "../geometry.h"
+#include "../graphics.h"
+
+/*
+ * careful with concurrent rendering.
+ * use a lock or embed on each routine.
+ */
+static RFrame imgrframe = {
+	0,  0, 1,	/* p */
+	1,  0, 0,	/* bx */
+	0, -1, 0	/* by */
+};
+
+/* requires p to be in NDC */
+int
+isclipping(Point3 p)
+{
+	if(p.x > p.w || p.x < -p.w ||
+	   p.y > p.w || p.y < -p.w ||
+	   p.z > p.w || p.z < 0)
+		return 1;
+	return 0;
+}
+
+static Point2
+flatten(Camera *c, Point3 p)
+{
+	Point2 p2;
+	Matrix S = {
+		Dx(c->viewport->r)/2, 0, 0,
+		0, Dy(c->viewport->r)/2, 0,
+		0, 0, 1,
+	}, T = {
+		1, 0, 1,
+		0, 1, 1,
+		0, 0, 1,
+	};
+
+	p2 = (Point2){p.x, p.y, p.w};
+	if(p2.w != 0)
+		p2 = divpt2(p2, p2.w);
+	mulm(S, T);
+	p2 = xform(p2, S);
+	return p2;
+}
+
+Point
+toviewport(Camera *c, Point3 p)
+{
+	Point2 p2;
+
+	imgrframe.p = Pt2(c->viewport->r.min.x, c->viewport->r.max.y, 1);
+	p2 = invrframexform(flatten(c, p), imgrframe);
+	return (Point){p2.x, p2.y};
+}
+
+Point2
+fromviewport(Camera *c, Point p)
+{
+	imgrframe.p = Pt2(c->viewport->r.min.x, c->viewport->r.max.y, 1);
+	return rframexform(Pt2(p.x, p.y, 1), imgrframe);
+}
+
+void
+line3(Camera *c, Point3 p0, Point3 p1, int end0, int end1, Image *src)
+{
+	p0 = WORLD2NDC(c, p0);
+	p1 = WORLD2NDC(c, p1);
+	if(isclipping(p0) || isclipping(p1))
+		return;
+	line(c->viewport, toviewport(c, p0), toviewport(c, p1), end0, end1, 0, src, ZP);
+}
+
+Point
+string3(Camera *c, Point3 p, Image *src, Font *f, char *s)
+{
+	p = WORLD2NDC(c, p);
+	if(isclipping(p))
+		return (Point){~0, ~0};
+	return string(c->viewport, toviewport(c, p), src, ZP, f, s);
+}
--- /dev/null
+++ b/libgraphics/triangle.c
@@ -1,0 +1,43 @@
+#include <u.h>
+#include <libc.h>
+#include <draw.h>
+#include "../geometry.h"
+#include "../graphics.h"
+
+Triangle
+Trian(int x0, int y0, int x1, int y1, int x2, int y2)
+{
+	return (Triangle){Pt(x0, y0), Pt(x1, y1), Pt(x2, y2)};
+}
+
+Triangle
+Trianpt(Point p0, Point p1, Point p2)
+{
+	return (Triangle){p0, p1, p2};
+}
+
+void
+triangle(Image *dst, Triangle t, int thick, Image *src, Point sp)
+{
+	Point pl[4];
+
+	pl[0] = t.p0;
+	pl[1] = t.p1;
+	pl[2] = t.p2;
+	pl[3] = pl[0];
+
+	poly(dst, pl, nelem(pl), 0, 0, thick, src, sp);
+}
+
+void
+filltriangle(Image *dst, Triangle t, Image *src, Point sp)
+{
+	Point pl[4];
+
+	pl[0] = t.p0;
+	pl[1] = t.p1;
+	pl[2] = t.p2;
+	pl[3] = pl[0];
+
+	fillpoly(dst, pl, nelem(pl), 0, src, sp);
+}
--- /dev/null
+++ b/libobj/examples/box.obj
@@ -1,0 +1,30 @@
+#                       Vertices: 8
+#                         Points: 0
+#                          Lines: 0
+#                          Faces: 6
+#                      Materials: 1
+
+o 1
+
+# Vertex list
+
+v -0.5 -0.5 0.5
+v -0.5 -0.5 -0.5
+v -0.5 0.5 -0.5
+v -0.5 0.5 0.5
+v 0.5 -0.5 0.5
+v 0.5 -0.5 -0.5
+v 0.5 0.5 -0.5
+v 0.5 0.5 0.5
+
+# Point/Line/Face list
+
+usemtl Default
+f 4 3 2 1
+f 2 6 5 1
+f 3 7 6 2
+f 8 7 3 4
+f 5 8 4 1
+f 6 7 8 5
+
+# End of file
--- /dev/null
+++ b/libobj/examples/cube.obj
@@ -1,0 +1,16 @@
+# This is a cube that measures two units on each side.  Each vertex is
+# shared by three different faces.
+v 0.000000 2.000000 2.000000
+v 0.000000 0.000000 2.000000
+v 2.000000 0.000000 2.000000
+v 2.000000 2.000000 2.000000
+v 0.000000 2.000000 0.000000
+v 0.000000 0.000000 0.000000
+v 2.000000 0.000000 0.000000
+v 2.000000 2.000000 0.000000
+f 1 2 3 4
+f 8 7 6 5
+f 4 3 7 8
+f 5 1 4 8
+f 5 6 2 1
+f 2 6 7 3
--- /dev/null
+++ b/libobj/examples/diamond.obj
@@ -1,0 +1,20 @@
+# diamond.obj
+
+g Object001
+
+v 0.000000E+00 0.000000E+00 78.0000
+v 45.0000 45.0000 0.000000E+00
+v 45.0000 -45.0000 0.000000E+00
+v -45.0000 -45.0000 0.000000E+00
+v -45.0000 45.0000 0.000000E+00
+v 0.000000E+00 0.000000E+00 -78.0000
+
+f     1 2 3
+f     1 3 4
+f     1 4 5
+f     1 5 2
+f     6 5 4
+f     6 4 3
+f     6 3 2
+f     6 2 1
+f     6 1 5
--- /dev/null
+++ b/libobj/examples/lamp.obj
@@ -1,0 +1,8863 @@
+#  Viewpoint Datalabs International, Inc.  Copyright 1996
+
+
+mtllib ./vp.mtl
+
+g
+v 0.000000 8.407028 0.000000
+v 0.000000 8.380042 -0.204985
+v 0.053054 8.380042 -0.198000
+v 0.102492 8.380042 -0.177522
+v 0.144946 8.380042 -0.144946
+v 0.177522 8.380042 -0.102492
+v 0.198000 8.380042 -0.053054
+v 0.204985 8.380042 0.000000
+v 0.198000 8.380042 0.053054
+v 0.177522 8.380042 0.102492
+v 0.144946 8.380042 0.144946
+v 0.102493 8.380042 0.177522
+v 0.053054 8.380042 0.198000
+v 0.000000 8.380042 0.204985
+v -0.053054 8.380042 0.198000
+v -0.102492 8.380042 0.177522
+v -0.144946 8.380042 0.144946
+v -0.177522 8.380042 0.102493
+v -0.198000 8.380042 0.053054
+v -0.204985 8.380042 0.000000
+v -0.198000 8.380042 -0.053054
+v -0.177522 8.380042 -0.102492
+v -0.144946 8.380042 -0.144946
+v -0.102493 8.380042 -0.177522
+v -0.053054 8.380042 -0.198000
+v 0.000000 8.300921 -0.396000
+v 0.102492 8.300921 -0.382507
+v 0.198000 8.300921 -0.342946
+v 0.280014 8.300921 -0.280014
+v 0.342946 8.300921 -0.198000
+v 0.382506 8.300921 -0.102493
+v 0.396000 8.300921 0.000000
+v 0.382507 8.300921 0.102492
+v 0.342946 8.300921 0.198000
+v 0.280015 8.300921 0.280014
+v 0.198000 8.300921 0.342946
+v 0.102493 8.300921 0.382506
+v 0.000000 8.300921 0.396000
+v -0.102492 8.300921 0.382507
+v -0.197999 8.300921 0.342946
+v -0.280014 8.300921 0.280015
+v -0.342946 8.300921 0.198000
+v -0.382506 8.300921 0.102493
+v -0.396000 8.300921 0.000000
+v -0.382507 8.300921 -0.102492
+v -0.342946 8.300921 -0.197999
+v -0.280015 8.300921 -0.280014
+v -0.198001 8.300921 -0.342946
+v -0.102493 8.300921 -0.382506
+v 0.000000 8.175057 -0.560028
+v 0.144946 8.175057 -0.540946
+v 0.280014 8.175057 -0.484999
+v 0.396000 8.175057 -0.396000
+v 0.484999 8.175057 -0.280015
+v 0.540946 8.175057 -0.144947
+v 0.560028 8.175057 0.000000
+v 0.540946 8.175057 0.144945
+v 0.484999 8.175057 0.280014
+v 0.396000 8.175057 0.395999
+v 0.280015 8.175057 0.484999
+v 0.144947 8.175057 0.540946
+v 0.000000 8.175057 0.560028
+v -0.144945 8.175057 0.540946
+v -0.280014 8.175057 0.484999
+v -0.395999 8.175057 0.396001
+v -0.484998 8.175057 0.280015
+v -0.540946 8.175057 0.144947
+v -0.560028 8.175057 0.000000
+v -0.540946 8.175057 -0.144945
+v -0.484999 8.175057 -0.280013
+v -0.396001 8.175057 -0.395999
+v -0.280015 8.175057 -0.484998
+v -0.144947 8.175057 -0.540946
+v 0.000000 8.011028 -0.685892
+v 0.177521 8.011028 -0.662521
+v 0.342946 8.011028 -0.594000
+v 0.484999 8.011028 -0.484999
+v 0.594000 8.011028 -0.342947
+v 0.662521 8.011028 -0.177523
+v 0.685892 8.011028 0.000000
+v 0.662521 8.011028 0.177521
+v 0.594000 8.011028 0.342945
+v 0.484999 8.011028 0.484998
+v 0.342947 8.011028 0.594000
+v 0.177523 8.011028 0.662521
+v 0.000000 8.011028 0.685892
+v -0.177521 8.011028 0.662521
+v -0.342945 8.011028 0.594000
+v -0.484998 8.011028 0.485000
+v -0.593999 8.011028 0.342947
+v -0.662521 8.011028 0.177523
+v -0.685892 8.011028 0.000001
+v -0.662521 8.011028 -0.177521
+v -0.594001 8.011028 -0.342945
+v -0.485000 8.011028 -0.484998
+v -0.342947 8.011028 -0.593999
+v -0.177523 8.011028 -0.662521
+v 0.000000 7.820013 -0.765013
+v 0.197999 7.820013 -0.738946
+v 0.382506 7.820013 -0.662521
+v 0.540946 7.820013 -0.540946
+v 0.662521 7.820013 -0.382507
+v 0.738946 7.820013 -0.198001
+v 0.765013 7.820013 0.000000
+v 0.738946 7.820013 0.197999
+v 0.662521 7.820013 0.382506
+v 0.540947 7.820013 0.540945
+v 0.382507 7.820013 0.662520
+v 0.198001 7.820013 0.738946
+v 0.000001 7.820013 0.765013
+v -0.197999 7.820013 0.738946
+v -0.382506 7.820013 0.662521
+v -0.540945 7.820013 0.540947
+v -0.662520 7.820013 0.382508
+v -0.738946 7.820013 0.198001
+v -0.765013 7.820013 0.000001
+v -0.738946 7.820013 -0.197999
+v -0.662522 7.820013 -0.382505
+v -0.540947 7.820013 -0.540945
+v -0.382508 7.820013 -0.662520
+v -0.198001 7.820013 -0.738946
+v 0.000000 7.615029 -0.792000
+v 0.204984 7.615029 -0.765013
+v 0.395999 7.615029 -0.685892
+v 0.560028 7.615029 -0.560029
+v 0.685892 7.615029 -0.396001
+v 0.765013 7.615029 -0.204985
+v 0.792000 7.615029 0.000000
+v 0.765013 7.615029 0.204984
+v 0.685893 7.615029 0.395999
+v 0.560029 7.615029 0.560028
+v 0.396001 7.615029 0.685892
+v 0.204986 7.615029 0.765013
+v 0.000001 7.615029 0.792000
+v -0.204984 7.615029 0.765014
+v -0.395999 7.615029 0.685893
+v -0.560028 7.615029 0.560029
+v -0.685892 7.615029 0.396001
+v -0.765013 7.615029 0.204986
+v -0.792000 7.615029 0.000001
+v -0.765014 7.615029 -0.204983
+v -0.685893 7.615029 -0.395999
+v -0.560030 7.615029 -0.560028
+v -0.396001 7.615029 -0.685891
+v -0.204986 7.615029 -0.765013
+v 0.000000 7.410044 -0.765013
+v 0.198000 7.410044 -0.738946
+v 0.382506 7.410044 -0.662521
+v 0.540946 7.410044 -0.540947
+v 0.662521 7.410044 -0.382507
+v 0.738946 7.410044 -0.198001
+v 0.765013 7.410044 0.000000
+v 0.738946 7.410044 0.197999
+v 0.662521 7.410044 0.382506
+v 0.540947 7.410044 0.540945
+v 0.382507 7.410044 0.662521
+v 0.198001 7.410044 0.738946
+v 0.000001 7.410044 0.765013
+v -0.197999 7.410044 0.738946
+v -0.382506 7.410044 0.662522
+v -0.540945 7.410044 0.540947
+v -0.662520 7.410044 0.382508
+v -0.738946 7.410044 0.198001
+v -0.765013 7.410044 0.000001
+v -0.738946 7.410044 -0.197999
+v -0.662522 7.410044 -0.382506
+v -0.540947 7.410044 -0.540945
+v -0.382508 7.410044 -0.662520
+v -0.198001 7.410044 -0.738946
+v 0.000000 7.219029 -0.685892
+v 0.177522 7.219029 -0.662521
+v 0.342946 7.219029 -0.594000
+v 0.484999 7.219029 -0.485000
+v 0.594000 7.219029 -0.342947
+v 0.662521 7.219029 -0.177523
+v 0.685892 7.219029 0.000000
+v 0.662521 7.219029 0.177521
+v 0.594001 7.219029 0.342946
+v 0.485000 7.219029 0.484999
+v 0.342947 7.219029 0.594000
+v 0.177523 7.219029 0.662521
+v 0.000000 7.219029 0.685892
+v -0.177521 7.219029 0.662521
+v -0.342945 7.219029 0.594001
+v -0.484998 7.219029 0.485000
+v -0.594000 7.219029 0.342947
+v -0.662521 7.219029 0.177523
+v -0.685892 7.219029 0.000001
+v -0.662521 7.219029 -0.177521
+v -0.594001 7.219029 -0.342945
+v -0.485000 7.219029 -0.484998
+v -0.342947 7.219029 -0.594000
+v -0.177523 7.219029 -0.662521
+v 0.000000 7.055001 -0.560029
+v 0.144946 7.055001 -0.540946
+v 0.280014 7.055001 -0.484999
+v 0.396000 7.055001 -0.396001
+v 0.484999 7.055001 -0.280015
+v 0.540946 7.055001 -0.144947
+v 0.560029 7.055001 0.000000
+v 0.540946 7.055001 0.144946
+v 0.485000 7.055001 0.280014
+v 0.396001 7.055001 0.396000
+v 0.280015 7.055001 0.484999
+v 0.144947 7.055001 0.540946
+v 0.000000 7.055001 0.560029
+v -0.144945 7.055001 0.540947
+v -0.280014 7.055001 0.485000
+v -0.396000 7.055001 0.396001
+v -0.484999 7.055001 0.280015
+v -0.540946 7.055001 0.144947
+v -0.560029 7.055001 0.000000
+v -0.540947 7.055001 -0.144945
+v -0.485000 7.055001 -0.280014
+v -0.396001 7.055001 -0.395999
+v -0.280015 7.055001 -0.484999
+v -0.144947 7.055001 -0.540946
+v 0.000000 6.929136 -0.396000
+v 0.102492 6.929136 -0.382507
+v 0.198000 6.929136 -0.342947
+v 0.280014 6.929136 -0.280015
+v 0.342946 6.929136 -0.198000
+v 0.382507 6.929136 -0.102493
+v 0.396000 6.929136 0.000000
+v 0.382507 6.929136 0.102492
+v 0.342947 6.929136 0.198000
+v 0.280015 6.929136 0.280014
+v 0.198001 6.929136 0.342946
+v 0.102493 6.929136 0.382507
+v 0.000000 6.929136 0.396000
+v -0.102492 6.929136 0.382507
+v -0.198000 6.929136 0.342947
+v -0.280014 6.929136 0.280015
+v -0.342946 6.929136 0.198001
+v -0.382507 6.929136 0.102493
+v -0.396000 6.929136 0.000000
+v -0.382507 6.929136 -0.102492
+v -0.342947 6.929136 -0.198000
+v -0.280015 6.929136 -0.280014
+v -0.198001 6.929136 -0.342946
+v -0.102493 6.929136 -0.382507
+v 0.000000 6.850015 -0.204985
+v 0.053054 6.850015 -0.198000
+v 0.102492 6.850015 -0.177522
+v 0.144946 6.850015 -0.144947
+v 0.177522 6.850015 -0.102493
+v 0.198000 6.850015 -0.053054
+v 0.204985 6.850015 0.000000
+v 0.198001 6.850015 0.053054
+v 0.177522 6.850015 0.102492
+v 0.144947 6.850015 0.144946
+v 0.102493 6.850015 0.177522
+v 0.053054 6.850015 0.198000
+v 0.000000 6.850015 0.204985
+v -0.053054 6.850015 0.198001
+v -0.102492 6.850015 0.177522
+v -0.144946 6.850015 0.144947
+v -0.177522 6.850015 0.102493
+v -0.198000 6.850015 0.053054
+v -0.204985 6.850015 0.000000
+v -0.198001 6.850015 -0.053054
+v -0.177523 6.850015 -0.102492
+v -0.144947 6.850015 -0.144946
+v -0.102493 6.850015 -0.177522
+v -0.053054 6.850015 -0.198000
+v 0.000000 6.823029 0.000000
+v 1.871946 7.231124 0.000000
+v 1.924999 7.204138 -0.198000
+v 1.871946 7.204138 -0.204985
+v 1.974438 7.204138 -0.177522
+v 2.016892 7.204138 -0.144946
+v 2.049468 7.204138 -0.102492
+v 2.069946 7.204138 -0.053054
+v 2.076930 7.204138 0.000000
+v 2.069946 7.204138 0.053054
+v 2.049468 7.204138 0.102492
+v 2.016892 7.204138 0.144946
+v 1.974438 7.204138 0.177522
+v 1.925000 7.204138 0.198000
+v 1.871946 7.204138 0.204985
+v 1.818892 7.204138 0.198000
+v 1.769454 7.204138 0.177522
+v 1.727000 7.204138 0.144946
+v 1.694424 7.204138 0.102493
+v 1.673946 7.204138 0.053054
+v 1.666961 7.204138 0.000000
+v 1.673946 7.204138 -0.053054
+v 1.694424 7.204138 -0.102492
+v 1.726999 7.204138 -0.144946
+v 1.769453 7.204138 -0.177522
+v 1.818891 7.204138 -0.198000
+v 1.974438 7.125016 -0.382507
+v 1.871946 7.125016 -0.396000
+v 2.069945 7.125016 -0.342946
+v 2.151960 7.125016 -0.280014
+v 2.214891 7.125016 -0.198000
+v 2.254452 7.125016 -0.102493
+v 2.267946 7.125016 0.000000
+v 2.254452 7.125016 0.102492
+v 2.214892 7.125016 0.198000
+v 2.151960 7.125016 0.280014
+v 2.069946 7.125016 0.342946
+v 1.974439 7.125016 0.382506
+v 1.871946 7.125016 0.396000
+v 1.769454 7.125016 0.382507
+v 1.673946 7.125016 0.342946
+v 1.591932 7.125016 0.280015
+v 1.529000 7.125016 0.198000
+v 1.489439 7.125016 0.102493
+v 1.475946 7.125016 0.000000
+v 1.489439 7.125016 -0.102492
+v 1.528999 7.125016 -0.197999
+v 1.591931 7.125016 -0.280014
+v 1.673945 7.125016 -0.342946
+v 1.769453 7.125016 -0.382506
+v 2.016891 6.999153 -0.540946
+v 1.871945 6.999153 -0.560028
+v 2.151960 6.999153 -0.484999
+v 2.267945 6.999153 -0.396000
+v 2.356944 6.999153 -0.280015
+v 2.412892 6.999153 -0.144947
+v 2.431974 6.999153 0.000000
+v 2.412892 6.999153 0.144945
+v 2.356945 6.999153 0.280014
+v 2.267946 6.999153 0.395999
+v 2.151961 6.999153 0.484999
+v 2.016892 6.999153 0.540946
+v 1.871946 6.999153 0.560028
+v 1.727000 6.999153 0.540946
+v 1.591932 6.999153 0.484999
+v 1.475946 6.999153 0.396001
+v 1.386947 6.999153 0.280015
+v 1.331000 6.999153 0.144947
+v 1.311917 6.999153 0.000000
+v 1.330999 6.999153 -0.144945
+v 1.386946 6.999153 -0.280013
+v 1.475945 6.999153 -0.395999
+v 1.591931 6.999153 -0.484998
+v 1.726999 6.999153 -0.540946
+v 2.049467 6.835124 -0.662521
+v 1.871945 6.835124 -0.685892
+v 2.214891 6.835124 -0.594000
+v 2.356944 6.835124 -0.484999
+v 2.465945 6.835124 -0.342947
+v 2.534467 6.835124 -0.177523
+v 2.557838 6.835124 0.000000
+v 2.534467 6.835124 0.177521
+v 2.465946 6.835124 0.342945
+v 2.356945 6.835124 0.484998
+v 2.214892 6.835124 0.594000
+v 2.049469 6.835124 0.662521
+v 1.871947 6.835124 0.685892
+v 1.694425 6.835124 0.662521
+v 1.529001 6.835124 0.594000
+v 1.386948 6.835124 0.485000
+v 1.277946 6.835124 0.342947
+v 1.209425 6.835124 0.177523
+v 1.186054 6.835124 0.000001
+v 1.209425 6.835124 -0.177521
+v 1.277945 6.835124 -0.342945
+v 1.386946 6.835124 -0.484998
+v 1.528999 6.835124 -0.593999
+v 1.694423 6.835124 -0.662521
+v 2.069945 6.644109 -0.738946
+v 1.871945 6.644109 -0.765013
+v 2.254452 6.644109 -0.662521
+v 2.412891 6.644109 -0.540946
+v 2.534466 6.644109 -0.382507
+v 2.610892 6.644109 -0.198001
+v 2.636959 6.644109 0.000000
+v 2.610892 6.644109 0.197999
+v 2.534467 6.644109 0.382506
+v 2.412892 6.644109 0.540945
+v 2.254453 6.644109 0.662520
+v 2.069947 6.644109 0.738946
+v 1.871947 6.644109 0.765013
+v 1.673947 6.644109 0.738946
+v 1.489440 6.644109 0.662521
+v 1.331001 6.644109 0.540947
+v 1.209425 6.644109 0.382508
+v 1.133000 6.644109 0.198001
+v 1.106933 6.644109 0.000001
+v 1.132999 6.644109 -0.197999
+v 1.209424 6.644109 -0.382505
+v 1.330999 6.644109 -0.540945
+v 1.489438 6.644109 -0.662520
+v 1.673944 6.644109 -0.738946
+v 2.076930 6.439125 -0.765013
+v 1.871945 6.439125 -0.792000
+v 2.267945 6.439125 -0.685892
+v 2.431974 6.439125 -0.560029
+v 2.557837 6.439125 -0.396001
+v 2.636959 6.439125 -0.204985
+v 2.663946 6.439125 0.000000
+v 2.636959 6.439125 0.204984
+v 2.557838 6.439125 0.395999
+v 2.431975 6.439125 0.560028
+v 2.267946 6.439125 0.685892
+v 2.076931 6.439125 0.765013
+v 1.871947 6.439125 0.792000
+v 1.666962 6.439125 0.765014
+v 1.475947 6.439125 0.685893
+v 1.311918 6.439125 0.560029
+v 1.186054 6.439125 0.396001
+v 1.106933 6.439125 0.204986
+v 1.079946 6.439125 0.000001
+v 1.106932 6.439125 -0.204983
+v 1.186053 6.439125 -0.395999
+v 1.311916 6.439125 -0.560028
+v 1.475945 6.439125 -0.685891
+v 1.666960 6.439125 -0.765013
+v 2.069945 6.234140 -0.738946
+v 1.871945 6.234140 -0.765013
+v 2.254452 6.234140 -0.662521
+v 2.412891 6.234140 -0.540947
+v 2.534466 6.234140 -0.382507
+v 2.610892 6.234140 -0.198001
+v 2.636959 6.234140 0.000000
+v 2.610892 6.234140 0.197999
+v 2.534467 6.234140 0.382506
+v 2.412892 6.234140 0.540945
+v 2.254453 6.234140 0.662521
+v 2.069947 6.234140 0.738946
+v 1.871947 6.234140 0.765013
+v 1.673947 6.234140 0.738946
+v 1.489440 6.234140 0.662522
+v 1.331000 6.234140 0.540947
+v 1.209425 6.234140 0.382508
+v 1.133000 6.234140 0.198001
+v 1.106932 6.234140 0.000001
+v 1.132999 6.234140 -0.197999
+v 1.209424 6.234140 -0.382506
+v 1.330999 6.234140 -0.540945
+v 1.489438 6.234140 -0.662520
+v 1.673944 6.234140 -0.738946
+v 2.049467 6.043124 -0.662521
+v 1.871945 6.043124 -0.685892
+v 2.214891 6.043124 -0.594000
+v 2.356945 6.043124 -0.485000
+v 2.465946 6.043124 -0.342947
+v 2.534467 6.043124 -0.177523
+v 2.557838 6.043124 0.000000
+v 2.534467 6.043124 0.177521
+v 2.465946 6.043124 0.342946
+v 2.356946 6.043124 0.484999
+v 2.214893 6.043124 0.594000
+v 2.049469 6.043124 0.662521
+v 1.871947 6.043124 0.685892
+v 1.694425 6.043124 0.662521
+v 1.529000 6.043124 0.594001
+v 1.386947 6.043124 0.485000
+v 1.277946 6.043124 0.342947
+v 1.209425 6.043124 0.177523
+v 1.186054 6.043124 0.000001
+v 1.209424 6.043124 -0.177521
+v 1.277945 6.043124 -0.342945
+v 1.386946 6.043124 -0.484998
+v 1.528998 6.043124 -0.594000
+v 1.694422 6.043124 -0.662521
+v 2.016891 5.879096 -0.540946
+v 1.871945 5.879096 -0.560029
+v 2.151960 5.879096 -0.484999
+v 2.267946 5.879096 -0.396001
+v 2.356945 5.879096 -0.280015
+v 2.412892 5.879096 -0.144947
+v 2.431975 5.879096 0.000000
+v 2.412892 5.879096 0.144946
+v 2.356945 5.879096 0.280014
+v 2.267946 5.879096 0.396000
+v 2.151961 5.879096 0.484999
+v 2.016892 5.879096 0.540946
+v 1.871946 5.879096 0.560029
+v 1.727000 5.879096 0.540947
+v 1.591932 5.879096 0.485000
+v 1.475946 5.879096 0.396001
+v 1.386947 5.879096 0.280015
+v 1.331000 5.879096 0.144947
+v 1.311917 5.879096 0.000000
+v 1.330999 5.879096 -0.144945
+v 1.386946 5.879096 -0.280014
+v 1.475945 5.879096 -0.395999
+v 1.591930 5.879096 -0.484999
+v 1.726999 5.879096 -0.540946
+v 1.974438 5.753232 -0.382507
+v 1.871946 5.753232 -0.396000
+v 2.069946 5.753232 -0.342947
+v 2.151960 5.753232 -0.280015
+v 2.214892 5.753232 -0.198000
+v 2.254453 5.753232 -0.102493
+v 2.267946 5.753232 0.000000
+v 2.254453 5.753232 0.102492
+v 2.214892 5.753232 0.198000
+v 2.151961 5.753232 0.280014
+v 2.069946 5.753232 0.342946
+v 1.974439 5.753232 0.382507
+v 1.871946 5.753232 0.396000
+v 1.769454 5.753232 0.382507
+v 1.673946 5.753232 0.342947
+v 1.591932 5.753232 0.280015
+v 1.529000 5.753232 0.198001
+v 1.489439 5.753232 0.102493
+v 1.475945 5.753232 0.000000
+v 1.489439 5.753232 -0.102492
+v 1.528999 5.753232 -0.198000
+v 1.591931 5.753232 -0.280014
+v 1.673945 5.753232 -0.342946
+v 1.769453 5.753232 -0.382507
+v 1.925000 5.674111 -0.198000
+v 1.871946 5.674111 -0.204985
+v 1.974438 5.674111 -0.177522
+v 2.016892 5.674111 -0.144947
+v 2.049468 5.674111 -0.102493
+v 2.069946 5.674111 -0.053054
+v 2.076931 5.674111 0.000000
+v 2.069946 5.674111 0.053054
+v 2.049468 5.674111 0.102492
+v 2.016892 5.674111 0.144946
+v 1.974439 5.674111 0.177522
+v 1.925000 5.674111 0.198000
+v 1.871946 5.674111 0.204985
+v 1.818892 5.674111 0.198001
+v 1.769453 5.674111 0.177522
+v 1.727000 5.674111 0.144947
+v 1.694424 5.674111 0.102493
+v 1.673945 5.674111 0.053054
+v 1.666961 5.674111 0.000000
+v 1.673945 5.674111 -0.053054
+v 1.694423 5.674111 -0.102492
+v 1.726999 5.674111 -0.144946
+v 1.769453 5.674111 -0.177522
+v 1.818891 5.674111 -0.198000
+v 1.871946 5.647125 0.000000
+v 0.309896 5.515944 -0.041455
+v 0.345870 5.486310 -0.041455
+v 0.424286 5.504072 -0.093361
+v 0.418141 5.501982 -0.113838
+v 0.396498 5.533141 -0.113838
+v 0.411730 5.534671 -0.093361
+v 0.454673 5.520028 -0.112858
+v 0.438094 5.507370 -0.092381
+v 0.425538 5.537968 -0.092381
+v 0.443761 5.538089 -0.112858
+v 0.453302 5.457216 -0.089738
+v 0.441317 5.475670 -0.110215
+v 0.481455 5.465744 -0.089738
+v 0.606229 5.515820 -0.123867
+v 0.602834 5.475719 -0.123867
+v 0.579542 5.483232 -0.123867
+v 0.582807 5.538704 -0.123867
+v 0.445729 5.233723 -0.123867
+v 0.821135 5.315813 -0.123867
+v 1.000863 5.651269 -0.123867
+v 0.998508 5.634236 -0.123867
+v 0.802170 5.613324 -0.123867
+v 0.877842 5.588543 -0.123867
+v 0.948260 5.556879 -0.123867
+v 0.919384 5.572126 -0.123867
+v 0.887220 5.368674 -0.123867
+v 0.394917 5.657471 -0.123867
+v 0.406946 5.503573 -0.123867
+v 0.381454 5.531240 -0.123867
+v 0.531150 5.719302 -0.123867
+v 0.736686 5.605947 -0.123867
+v 0.458223 5.412295 -0.113265
+v 0.428678 5.362868 -0.113265
+v 0.402774 5.356741 -0.092786
+v 0.439946 5.417790 -0.092786
+v 0.403944 5.274145 -0.113282
+v 0.376874 5.259162 -0.092804
+v 0.416054 5.201977 -0.113084
+v 0.399372 5.179461 -0.092606
+v 0.480014 5.144361 -0.113117
+v 0.478291 5.118040 -0.092638
+v 0.527722 5.136270 -0.113282
+v 0.573570 5.146466 -0.113282
+v 0.582210 5.122450 -0.092804
+v 0.525999 5.109948 -0.092804
+v 0.610153 5.170753 -0.112581
+v 0.623349 5.197310 -0.112581
+v 0.646468 5.194917 -0.092102
+v 0.618793 5.146736 -0.092102
+v 0.623135 5.227768 -0.112810
+v 0.606183 5.243670 -0.112810
+v 0.622495 5.253418 -0.092331
+v 0.646254 5.225375 -0.092331
+v 0.570921 5.255943 -0.114459
+v 0.513188 5.262099 -0.114459
+v 0.550742 5.267126 -0.093982
+v 0.587233 5.265692 -0.093982
+v 0.509146 5.282185 -0.114400
+v 0.560599 5.325606 -0.114400
+v 0.575304 5.316366 -0.093922
+v 0.546701 5.287212 -0.093922
+v 0.593234 5.371274 -0.113305
+v 0.607939 5.362035 -0.092826
+v 0.625473 5.470294 -0.113282
+v 0.628868 5.510393 -0.113282
+v 0.649330 5.520258 -0.092804
+v 0.645166 5.471096 -0.092804
+v 0.615937 5.547515 -0.112902
+v 0.592514 5.570402 -0.112902
+v 0.599770 5.592010 -0.092425
+v 0.636398 5.557381 -0.092425
+v 0.536419 5.601588 -0.113282
+v 0.537775 5.625658 -0.092804
+v 0.502804 5.605110 -0.112799
+v 0.504160 5.629180 -0.092322
+v 0.433839 5.604552 -0.091985
+v 0.450710 5.583147 -0.112462
+v 0.482219 5.499254 -0.114462
+v 0.530931 5.473194 -0.114462
+v 0.499634 5.474578 -0.093983
+v 0.465640 5.486594 -0.093983
+v 0.534608 5.457798 -0.114274
+v 0.493435 5.445159 -0.114274
+v 0.475158 5.450655 -0.093796
+v 0.503310 5.459183 -0.093796
+v 0.421121 5.612298 -0.093871
+v 0.418937 5.628274 -0.114350
+v 0.506708 5.666801 -0.113882
+v 0.501502 5.648447 -0.093404
+v 0.550349 5.662285 -0.114218
+v 0.545143 5.643930 -0.093740
+v 0.629492 5.612260 -0.113562
+v 0.664060 5.578382 -0.113562
+v 0.650154 5.569179 -0.093084
+v 0.613526 5.603806 -0.093084
+v 0.696662 5.549114 -0.114802
+v 0.682757 5.539909 -0.094323
+v 0.760234 5.486811 -0.113282
+v 0.730038 5.495645 -0.092804
+v 0.810358 5.424101 -0.113282
+v 0.786797 5.426218 -0.092804
+v 0.819314 5.365025 -0.113282
+v 0.797526 5.360498 -0.092804
+v 0.802562 5.320957 -0.113282
+v 0.788883 5.308403 -0.113282
+v 0.762682 5.295666 -0.092804
+v 0.779451 5.311057 -0.092804
+v 0.794186 5.297959 -0.111517
+v 0.804707 5.297311 -0.111517
+v 0.767983 5.285222 -0.091038
+v 0.836627 5.301105 -0.113282
+v 0.843061 5.281743 -0.092804
+v 0.896286 5.324542 -0.113282
+v 0.909790 5.306975 -0.092804
+v 0.928906 5.373504 -0.113282
+v 0.946826 5.360417 -0.092804
+v 0.926206 5.448348 -0.113700
+v 0.907602 5.497252 -0.113700
+v 0.930586 5.489536 -0.093222
+v 0.945004 5.442576 -0.093222
+v 0.919570 5.525727 -0.113282
+v 0.942554 5.518014 -0.092804
+v 0.984745 5.550106 -0.113325
+v 1.015682 5.544410 -0.092846
+v 1.023436 5.590175 -0.113106
+v 1.049458 5.591613 -0.092627
+v 1.029258 5.632510 -0.113424
+v 1.018718 5.655898 -0.113424
+v 1.039579 5.667114 -0.092946
+v 1.051585 5.640802 -0.092946
+v 1.005948 5.675226 -0.110215
+v 0.995631 5.701816 -0.089738
+v 1.026809 5.686442 -0.089738
+v 0.993280 5.668571 -0.114556
+v 0.978032 5.657892 -0.114556
+v 0.980578 5.679368 -0.094078
+v 0.982963 5.695159 -0.094078
+v 0.927556 5.636914 -0.113282
+v 0.923474 5.656149 -0.092804
+v 0.877212 5.640411 -0.113949
+v 0.802427 5.662618 -0.113949
+v 0.810786 5.676223 -0.093471
+v 0.873130 5.659646 -0.093471
+v 0.539941 5.773489 -0.113282
+v 0.526252 5.797686 -0.092804
+v 0.457298 5.767262 -0.113282
+v 0.434858 5.792035 -0.092804
+v 0.382350 5.721624 -0.113282
+v 0.350880 5.742265 -0.092804
+v 0.342812 5.652568 -0.113282
+v 0.306206 5.666270 -0.092804
+v 0.335251 5.577381 -0.113282
+v 0.296974 5.582496 -0.092804
+v 0.362685 5.519274 -0.113282
+v 0.392027 5.495102 -0.113282
+v 0.361985 5.488284 -0.092804
+v 0.326010 5.517920 -0.092804
+v 0.417923 5.476707 -0.110215
+v 0.429909 5.458251 -0.089737
+v 0.387881 5.469887 -0.089737
+v 0.439370 5.482518 -0.110215
+v 0.445514 5.484608 -0.089738
+v 0.479508 5.472592 -0.089738
+v 0.440389 5.273817 -0.123867
+v 0.802856 5.311946 -0.123867
+v 0.470522 5.538355 -0.123867
+v 0.479066 5.555797 -0.123867
+v 0.530146 5.494235 -0.123867
+v 0.481434 5.520294 -0.123867
+v 0.527090 5.570638 -0.123867
+v 0.549926 5.504280 -0.123867
+v 0.591474 5.219917 -0.123867
+v 0.547534 5.217666 -0.123867
+v 0.574522 5.235818 -0.123867
+v 0.510551 5.186327 -0.123867
+v 0.856916 5.339489 -0.123867
+v 0.785386 5.561415 -0.123867
+v 0.831140 5.511280 -0.123867
+v 0.970352 5.590698 -0.123867
+v 0.874926 5.424644 -0.123867
+v 0.861703 5.463790 -0.123867
+v 0.385730 5.608974 -0.123867
+v 0.490694 5.715039 -0.123867
+v 0.541191 5.438536 -0.123867
+v 0.564482 5.431025 -0.123867
+v 0.470473 5.376470 -0.123867
+v 0.500018 5.425898 -0.123867
+v 0.545513 5.349375 -0.123867
+v 0.494061 5.305954 -0.123867
+v 0.426899 5.454040 -0.000178
+v 0.384872 5.465675 -0.000178
+v 0.392157 5.356647 -0.000178
+v 0.429328 5.417697 -0.000178
+v 0.364079 5.254062 -0.000178
+v 0.389204 5.170083 -0.000178
+v 0.474331 5.106178 -0.000178
+v 0.583881 5.110291 -0.000178
+v 0.527670 5.097790 -0.000178
+v 0.653498 5.188813 -0.000178
+v 0.625824 5.140632 -0.000178
+v 0.631697 5.254966 -0.000178
+v 0.655456 5.226924 -0.000178
+v 0.565082 5.271138 -0.000178
+v 0.601572 5.269704 -0.000178
+v 0.589741 5.315586 -0.000178
+v 0.561138 5.286431 -0.000178
+v 0.616228 5.359894 -0.000178
+v 0.659029 5.522835 -0.000178
+v 0.654866 5.473672 -0.000178
+v 0.670598 5.539687 -0.000178
+v 0.717054 5.498289 -0.000178
+v 0.775843 5.425636 -0.000178
+v 0.786682 5.357014 -0.000178
+v 0.750770 5.290197 -0.000178
+v 0.767541 5.305588 -0.000178
+v 0.763965 5.278866 -0.000178
+v 0.847876 5.272824 -0.000178
+v 0.917379 5.299571 -0.000178
+v 0.955695 5.355863 -0.000178
+v 0.941216 5.485821 -0.000178
+v 0.955634 5.438861 -0.000178
+v 0.955578 5.514775 -0.000178
+v 1.029874 5.543750 -0.000178
+v 1.061003 5.594168 -0.000178
+v 1.050158 5.671900 -0.000178
+v 1.062163 5.645587 -0.000178
+v 0.997389 5.708117 -0.000178
+v 1.028566 5.692743 -0.000178
+v 0.978222 5.692117 -0.000178
+v 0.980607 5.707908 -0.000178
+v 0.923102 5.665982 -0.000178
+v 0.811612 5.684768 -0.000178
+v 0.873955 5.668191 -0.000178
+v 0.517526 5.809513 -0.000178
+v 0.421837 5.803005 -0.000178
+v 0.334437 5.750560 -0.000178
+v 0.288120 5.670815 -0.000178
+v 0.278871 5.583405 -0.000178
+v 0.345870 5.486310 -0.000178
+v 0.309896 5.515944 -0.000178
+v 0.494061 5.305954 0.123511
+v 0.545513 5.349375 0.123511
+v 0.500018 5.425898 0.123511
+v 0.470473 5.376470 0.123511
+v 0.564482 5.431025 0.123511
+v 0.541191 5.438536 0.123511
+v 0.490694 5.715039 0.123511
+v 0.385730 5.608974 0.123511
+v 0.861703 5.463790 0.123511
+v 0.874926 5.424644 0.123511
+v 0.970352 5.590698 0.123511
+v 0.831140 5.511280 0.123511
+v 0.785386 5.561415 0.123511
+v 0.856916 5.339489 0.123511
+v 0.510551 5.186327 0.123511
+v 0.574522 5.235818 0.123511
+v 0.547534 5.217666 0.123511
+v 0.591474 5.219917 0.123511
+v 0.549926 5.504280 0.123511
+v 0.527090 5.570638 0.123511
+v 0.481434 5.520294 0.123511
+v 0.530146 5.494235 0.123511
+v 0.479066 5.555797 0.123511
+v 0.470522 5.538355 0.123511
+v 0.802856 5.311946 0.123511
+v 0.440389 5.273817 0.123511
+v 0.479508 5.472592 0.089382
+v 0.445514 5.484608 0.089382
+v 0.439370 5.482518 0.109859
+v 0.387881 5.469887 0.089381
+v 0.429909 5.458251 0.089381
+v 0.417923 5.476707 0.109859
+v 0.326010 5.517920 0.092448
+v 0.361985 5.488284 0.092448
+v 0.392027 5.495102 0.112926
+v 0.362685 5.519274 0.112926
+v 0.296974 5.582496 0.092448
+v 0.335251 5.577381 0.112926
+v 0.306206 5.666270 0.092448
+v 0.342812 5.652568 0.112926
+v 0.350880 5.742265 0.092448
+v 0.382350 5.721624 0.112926
+v 0.434858 5.792035 0.092448
+v 0.457298 5.767262 0.112926
+v 0.526252 5.797686 0.092448
+v 0.539941 5.773489 0.112926
+v 0.873130 5.659646 0.093115
+v 0.810786 5.676223 0.093115
+v 0.802427 5.662618 0.113593
+v 0.877212 5.640411 0.113593
+v 0.923474 5.656149 0.092448
+v 0.927556 5.636914 0.112926
+v 0.982963 5.695159 0.093722
+v 0.980578 5.679368 0.093722
+v 0.978032 5.657892 0.114200
+v 0.993280 5.668571 0.114200
+v 1.026809 5.686442 0.089382
+v 0.995631 5.701816 0.089382
+v 1.005948 5.675226 0.109859
+v 1.051585 5.640802 0.092590
+v 1.039579 5.667114 0.092590
+v 1.018718 5.655898 0.113068
+v 1.029258 5.632510 0.113068
+v 1.049458 5.591613 0.092271
+v 1.023436 5.590175 0.112750
+v 1.015682 5.544410 0.092490
+v 0.984745 5.550106 0.112969
+v 0.942554 5.518014 0.092448
+v 0.919570 5.525727 0.112926
+v 0.945004 5.442576 0.092866
+v 0.930586 5.489536 0.092866
+v 0.907602 5.497252 0.113344
+v 0.926206 5.448348 0.113344
+v 0.946826 5.360417 0.092448
+v 0.928906 5.373504 0.112926
+v 0.909790 5.306975 0.092448
+v 0.896286 5.324542 0.112926
+v 0.843061 5.281743 0.092448
+v 0.836627 5.301105 0.112926
+v 0.767983 5.285222 0.090682
+v 0.804707 5.297311 0.111161
+v 0.794186 5.297959 0.111161
+v 0.779451 5.311057 0.092448
+v 0.762682 5.295666 0.092448
+v 0.788883 5.308403 0.112926
+v 0.802562 5.320957 0.112926
+v 0.797526 5.360498 0.092448
+v 0.819314 5.365025 0.112926
+v 0.786797 5.426218 0.092448
+v 0.810358 5.424101 0.112926
+v 0.730038 5.495645 0.092448
+v 0.760234 5.486811 0.112926
+v 0.682757 5.539909 0.093967
+v 0.696662 5.549114 0.114446
+v 0.613526 5.603806 0.092728
+v 0.650154 5.569179 0.092728
+v 0.664060 5.578382 0.113206
+v 0.629492 5.612260 0.113206
+v 0.545143 5.643930 0.093384
+v 0.550349 5.662285 0.113862
+v 0.501502 5.648447 0.093048
+v 0.506708 5.666801 0.113526
+v 0.418937 5.628274 0.113994
+v 0.421121 5.612298 0.093515
+v 0.503310 5.459183 0.093440
+v 0.475158 5.450655 0.093440
+v 0.493435 5.445159 0.113918
+v 0.534608 5.457798 0.113918
+v 0.465640 5.486594 0.093627
+v 0.499634 5.474578 0.093627
+v 0.530931 5.473194 0.114106
+v 0.482219 5.499254 0.114106
+v 0.450710 5.583147 0.112106
+v 0.433839 5.604552 0.091629
+v 0.504160 5.629180 0.091966
+v 0.502804 5.605110 0.112443
+v 0.537775 5.625658 0.092448
+v 0.536419 5.601588 0.112926
+v 0.636398 5.557381 0.092069
+v 0.599770 5.592010 0.092069
+v 0.592514 5.570402 0.112546
+v 0.615937 5.547515 0.112546
+v 0.645166 5.471096 0.092448
+v 0.649330 5.520258 0.092448
+v 0.628868 5.510393 0.112926
+v 0.625473 5.470294 0.112926
+v 0.607939 5.362035 0.092470
+v 0.593234 5.371274 0.112949
+v 0.546701 5.287212 0.093566
+v 0.575304 5.316366 0.093566
+v 0.560599 5.325606 0.114044
+v 0.509146 5.282185 0.114044
+v 0.587233 5.265692 0.093626
+v 0.550742 5.267126 0.093626
+v 0.513188 5.262099 0.114103
+v 0.570921 5.255943 0.114103
+v 0.646254 5.225375 0.091975
+v 0.622495 5.253418 0.091975
+v 0.606183 5.243670 0.112454
+v 0.623135 5.227768 0.112454
+v 0.618793 5.146736 0.091746
+v 0.646468 5.194917 0.091746
+v 0.623349 5.197310 0.112225
+v 0.610153 5.170753 0.112225
+v 0.525999 5.109948 0.092448
+v 0.582210 5.122450 0.092448
+v 0.573570 5.146466 0.112926
+v 0.527722 5.136270 0.112926
+v 0.478291 5.118040 0.092282
+v 0.480014 5.144361 0.112761
+v 0.399372 5.179461 0.092250
+v 0.416054 5.201977 0.112728
+v 0.376874 5.259162 0.092448
+v 0.403944 5.274145 0.112926
+v 0.439946 5.417790 0.092430
+v 0.402774 5.356741 0.092430
+v 0.428678 5.362868 0.112909
+v 0.458223 5.412295 0.112909
+v 0.736686 5.605947 0.123511
+v 0.531150 5.719302 0.123511
+v 0.381454 5.531240 0.123511
+v 0.406946 5.503573 0.123511
+v 0.394917 5.657471 0.123511
+v 0.887220 5.368674 0.123511
+v 0.919384 5.572126 0.123511
+v 0.948260 5.556879 0.123511
+v 0.877842 5.588543 0.123511
+v 0.802170 5.613324 0.123511
+v 0.998508 5.634236 0.123511
+v 1.000863 5.651269 0.123511
+v 0.821135 5.315813 0.123511
+v 0.445729 5.233723 0.123511
+v 0.582807 5.538704 0.123511
+v 0.579542 5.483232 0.123511
+v 0.602834 5.475719 0.123511
+v 0.606229 5.515820 0.123511
+v 0.481455 5.465744 0.089382
+v 0.441317 5.475670 0.109859
+v 0.453302 5.457216 0.089382
+v 0.443761 5.538089 0.112502
+v 0.425538 5.537968 0.092025
+v 0.438094 5.507370 0.092025
+v 0.454673 5.520028 0.112502
+v 0.411730 5.534671 0.093005
+v 0.396498 5.533141 0.113482
+v 0.418141 5.501982 0.113482
+v 0.424286 5.504072 0.093005
+v 0.345870 5.486310 0.041099
+v 0.309896 5.515944 0.041099
+v 2.041447 5.441407 0.000016
+v 1.902422 5.157276 0.000038
+v 2.000598 5.267411 -0.000016
+v 0.827715 5.464243 -0.018954
+v 1.649046 5.069851 -0.032847
+v 1.776509 5.091953 -0.036823
+v 1.898296 5.160740 -0.040898
+v 1.994962 5.269464 -0.045596
+v 2.035121 5.441407 -0.048052
+v 2.109306 5.441407 -0.067926
+v 2.146399 5.479807 -0.077862
+v 2.084578 5.531006 -0.061302
+v 1.991847 5.569407 -0.036460
+v 2.041304 5.595008 -0.049708
+v 2.096942 5.665406 -0.064614
+v 2.127852 5.665406 -0.072894
+v 2.127852 5.697407 -0.072894
+v 0.830914 5.470578 -0.036093
+v 0.836005 5.480661 -0.050811
+v 1.643436 5.101691 -0.088847
+v 1.758191 5.123687 -0.100293
+v 1.866940 5.187052 -0.111804
+v 1.952135 5.285051 -0.124545
+v 1.987059 5.441407 -0.131312
+v 2.041368 5.441407 -0.185614
+v 2.068523 5.479807 -0.212766
+v 2.023265 5.531006 -0.167514
+v 1.955379 5.569407 -0.099636
+v 1.991585 5.595008 -0.135838
+v 2.032317 5.665406 -0.176565
+v 2.054945 5.665406 -0.199190
+v 2.054945 5.697407 -0.199190
+v 0.850366 5.509098 -0.069204
+v 1.633711 5.156838 -0.121179
+v 1.726459 5.178650 -0.136939
+v 1.812627 5.232628 -0.152744
+v 1.877953 5.312052 -0.170130
+v 1.903806 5.441407 -0.179386
+v 1.923689 5.441407 -0.253568
+v 1.933629 5.479807 -0.290659
+v 1.917061 5.531006 -0.228842
+v 1.892206 5.569407 -0.136114
+v 1.905463 5.595008 -0.185568
+v 1.920375 5.665406 -0.241205
+v 1.928659 5.665406 -0.272114
+v 1.928659 5.697407 -0.272114
+v 0.866946 5.541935 -0.069204
+v 1.622482 5.220516 -0.121182
+v 1.689813 5.242119 -0.136943
+v 1.749908 5.285254 -0.152750
+v 1.792290 5.343229 -0.170137
+v 1.807669 5.441407 -0.179394
+v 1.787799 5.441407 -0.253579
+v 1.777863 5.479807 -0.290672
+v 1.794421 5.531006 -0.228851
+v 1.819260 5.569407 -0.136119
+v 1.806012 5.595008 -0.185577
+v 1.791109 5.665406 -0.241215
+v 1.782831 5.665406 -0.272125
+v 1.782831 5.697407 -0.272125
+v 0.881305 5.570374 -0.050811
+v 1.612755 5.275664 -0.088854
+v 1.658075 5.297085 -0.100303
+v 1.695589 5.330832 -0.111818
+v 1.718102 5.370231 -0.124564
+v 1.724408 5.441407 -0.131333
+v 1.670107 5.441407 -0.185643
+v 1.642957 5.479807 -0.212799
+v 1.688207 5.531006 -0.167541
+v 1.756084 5.569407 -0.099651
+v 1.719882 5.595008 -0.135859
+v 1.679158 5.665406 -0.176592
+v 1.656531 5.665406 -0.199222
+v 1.656531 5.697407 -0.199222
+v 1.733685 5.569407 -0.070469
+v 0.889594 5.586796 -0.018954
+v 1.607137 5.307508 -0.032856
+v 1.639748 5.328821 -0.036838
+v 1.664223 5.357145 -0.040918
+v 1.675264 5.385822 -0.045622
+v 1.676331 5.441407 -0.048081
+v 1.602150 5.441407 -0.067966
+v 1.565059 5.479807 -0.077909
+v 1.626877 5.531006 -0.061338
+v 1.719603 5.569407 -0.036482
+v 1.670149 5.595008 -0.049738
+v 1.614513 5.665406 -0.064651
+v 1.583606 5.665406 -0.072936
+v 1.583606 5.697407 -0.072936
+v 0.889594 5.586796 0.017833
+v 1.607132 5.307511 0.031806
+v 1.639743 5.328824 0.036450
+v 1.664215 5.357148 0.040955
+v 1.675255 5.385825 0.045538
+v 1.676321 5.441407 0.048057
+v 1.602136 5.441407 0.067926
+v 1.565044 5.479807 0.077860
+v 1.626865 5.531006 0.061302
+v 1.719597 5.569407 0.036466
+v 1.670139 5.595008 0.049711
+v 1.614500 5.665406 0.064614
+v 1.583589 5.665406 0.072893
+v 1.583589 5.697407 0.072893
+v 1.691782 5.379807 0.088014
+v 0.881302 5.570380 0.049690
+v 1.612743 5.275675 0.087806
+v 1.658060 5.297095 0.099922
+v 1.695569 5.330838 0.111863
+v 1.718076 5.370237 0.124489
+v 1.724379 5.441407 0.131318
+v 1.670067 5.441407 0.185618
+v 1.642911 5.479807 0.212767
+v 1.688171 5.531006 0.167518
+v 1.756062 5.569407 0.099644
+v 1.719855 5.595008 0.135843
+v 1.679120 5.665406 0.176567
+v 1.656490 5.665406 0.199191
+v 1.656490 5.697407 0.199191
+v 0.866942 5.541945 0.068085
+v 1.622465 5.220531 0.120141
+v 1.689792 5.242130 0.136571
+v 1.749879 5.285265 0.152806
+v 1.792256 5.343235 0.170078
+v 1.807631 5.441407 0.179396
+v 1.787743 5.441407 0.253577
+v 1.777802 5.479807 0.290667
+v 1.794373 5.531006 0.228850
+v 1.819231 5.569407 0.136125
+v 1.805974 5.595008 0.185578
+v 1.791058 5.665406 0.241213
+v 1.782773 5.665406 0.272123
+v 1.782773 5.697407 0.272123
+v 0.850362 5.509104 0.068087
+v 1.633698 5.156850 0.120147
+v 1.726436 5.178664 0.136579
+v 1.812598 5.232639 0.152818
+v 1.877919 5.312058 0.170090
+v 1.903767 5.441407 0.179410
+v 1.923634 5.441407 0.253595
+v 1.933568 5.479807 0.290689
+v 1.917012 5.531006 0.228866
+v 1.892178 5.569407 0.136134
+v 1.905423 5.595008 0.185592
+v 1.920323 5.665406 0.241231
+v 1.928601 5.665406 0.272141
+v 1.928601 5.697407 0.272141
+v 0.836002 5.480664 0.049696
+v 1.643425 5.101700 0.087822
+v 1.758174 5.123696 0.099943
+v 1.866919 5.187061 0.111890
+v 1.952110 5.285056 0.124521
+v 1.987030 5.441407 0.131352
+v 2.041330 5.441407 0.185667
+v 2.068478 5.479807 0.212822
+v 2.023230 5.531006 0.167562
+v 1.955357 5.569407 0.099670
+v 1.991556 5.595008 0.135879
+v 2.032280 5.665406 0.176614
+v 2.054904 5.665406 0.199245
+v 2.054904 5.697407 0.199245
+v 1.977757 5.569407 0.070487
+v 0.827713 5.464243 0.017841
+v 1.649043 5.069855 0.031826
+v 1.776505 5.091958 0.036479
+v 1.898288 5.160743 0.040991
+v 1.994951 5.269464 0.045582
+v 2.035112 5.441407 0.048103
+v 2.109293 5.441407 0.067991
+v 2.146382 5.479807 0.077937
+v 2.084566 5.531006 0.061362
+v 1.991841 5.569407 0.036501
+v 2.041295 5.595008 0.049761
+v 2.096928 5.665406 0.064676
+v 2.127837 5.665406 0.072964
+v 2.127837 5.697407 0.072964
+v 1.480159 5.243531 -0.106571
+v 1.502341 5.287462 -0.078158
+v 1.454546 5.192803 -0.106571
+v 1.432361 5.148871 -0.078157
+v 1.515146 5.312833 0.027885
+v 1.502338 5.287472 0.077100
+v 1.480153 5.243540 0.105516
+v 1.454540 5.192812 0.105519
+v 1.432358 5.148880 0.077109
+v 1.419550 5.123511 0.027896
+v 1.516179 5.312378 -0.028960
+v 1.419042 5.123801 -0.028934
+v 1.563461 5.304673 0.030392
+v 1.564023 5.304605 -0.031455
+v 1.558218 5.274195 -0.084999
+v 1.549126 5.221419 -0.115918
+v 1.529535 5.107703 -0.084997
+v 1.538628 5.160480 -0.115917
+v 1.558211 5.274205 0.083947
+v 1.549116 5.221431 0.114869
+v 1.538617 5.160491 0.114874
+v 1.529527 5.107712 0.083959
+v 1.523994 5.077298 -0.031438
+v 1.524280 5.077236 0.030408
+v -0.935916 7.231124 1.621186
+v -0.790965 7.204138 1.766126
+v -0.758390 7.204138 1.723672
+v -0.833417 7.204138 1.798704
+v -0.882855 7.204138 1.819184
+v -0.935909 7.204138 1.826170
+v -0.988963 7.204138 1.819188
+v -1.038402 7.204138 1.798711
+v -1.080857 7.204138 1.766137
+v -1.113434 7.204138 1.723684
+v -1.133914 7.204138 1.674246
+v -1.140901 7.204138 1.621192
+v -1.133918 7.204138 1.568139
+v -1.113442 7.204138 1.518699
+v -1.080867 7.204138 1.476245
+v -1.038415 7.204138 1.443668
+v -0.988977 7.204138 1.423187
+v -0.935924 7.204138 1.416201
+v -0.882869 7.204138 1.423184
+v -0.833430 7.204138 1.443660
+v -0.790975 7.204138 1.476234
+v -0.758398 7.204138 1.518687
+v -0.737918 7.204138 1.568124
+v -0.730931 7.204138 1.621178
+v -0.737914 7.204138 1.674232
+v -0.655892 7.125016 1.901190
+v -0.592963 7.125016 1.819174
+v -0.737904 7.125016 1.964124
+v -0.833411 7.125016 2.003688
+v -0.935902 7.125016 2.017184
+v -1.038394 7.125016 2.003695
+v -1.133904 7.125016 1.964139
+v -1.215920 7.125016 1.901209
+v -1.278855 7.125016 1.819197
+v -1.318419 7.125016 1.723691
+v -1.331916 7.125016 1.621200
+v -1.318426 7.125016 1.518708
+v -1.278869 7.125016 1.423198
+v -1.215941 7.125016 1.341181
+v -1.133928 7.125016 1.278246
+v -1.038423 7.125016 1.238682
+v -0.935930 7.125016 1.225186
+v -0.833438 7.125016 1.238675
+v -0.737928 7.125016 1.278233
+v -0.655912 7.125016 1.341161
+v -0.592978 7.125016 1.423172
+v -0.553413 7.125016 1.518679
+v -0.539916 7.125016 1.621171
+v -0.553406 7.125016 1.723664
+v -0.539902 6.999153 2.017171
+v -0.450907 6.999153 1.901182
+v -0.655885 6.999153 2.106174
+v -0.790951 6.999153 2.162126
+v -0.935896 6.999153 2.181214
+v -1.080843 6.999153 2.162137
+v -1.215913 6.999153 2.106194
+v -1.331902 6.999153 2.017200
+v -1.420905 6.999153 1.901217
+v -1.476856 6.999153 1.766151
+v -1.495945 6.999153 1.621206
+v -1.476867 6.999153 1.476258
+v -1.420925 6.999153 1.341189
+v -1.331930 6.999153 1.225199
+v -1.215948 6.999153 1.136197
+v -1.080882 6.999153 1.080244
+v -0.935937 6.999153 1.061157
+v -0.790990 6.999153 1.080234
+v -0.655919 6.999153 1.136176
+v -0.539931 6.999153 1.225170
+v -0.450928 6.999153 1.341153
+v -0.394976 6.999153 1.476219
+v -0.375888 6.999153 1.621165
+v -0.394965 6.999153 1.766112
+v -0.450900 6.835124 2.106167
+v -0.341904 6.835124 1.964110
+v -0.592949 6.835124 2.215173
+v -0.758371 6.835124 2.283700
+v -0.935891 6.835124 2.307077
+v -1.113414 6.835124 2.283713
+v -1.278841 6.835124 2.215197
+v -1.420897 6.835124 2.106202
+v -1.529903 6.835124 1.964153
+v -1.598430 6.835124 1.798731
+v -1.621808 6.835124 1.621209
+v -1.598444 6.835124 1.443688
+v -1.529929 6.835124 1.278261
+v -1.420933 6.835124 1.136204
+v -1.278884 6.835124 1.027199
+v -1.113463 6.835124 0.958671
+v -0.935941 6.835124 0.935293
+v -0.758418 6.835124 0.958658
+v -0.592992 6.835124 1.027173
+v -0.450935 6.835124 1.136169
+v -0.341929 6.835124 1.278217
+v -0.273402 6.835124 1.443639
+v -0.250024 6.835124 1.621160
+v -0.273389 6.835124 1.798683
+v -0.394951 6.644109 2.162112
+v -0.273382 6.644109 2.003668
+v -0.553386 6.644109 2.283693
+v -0.737890 6.644109 2.360124
+v -0.935889 6.644109 2.386198
+v -1.133890 6.644109 2.360139
+v -1.318400 6.644109 2.283720
+v -1.476843 6.644109 2.162151
+v -1.598423 6.644109 2.003716
+v -1.674855 6.644109 1.819212
+v -1.700929 6.644109 1.621213
+v -1.674870 6.644109 1.423212
+v -1.598451 6.644109 1.238703
+v -1.476882 6.644109 1.080259
+v -1.318446 6.644109 0.958678
+v -1.133944 6.644109 0.882247
+v -0.935944 6.644109 0.856172
+v -0.737943 6.644109 0.882232
+v -0.553434 6.644109 0.958651
+v -0.394989 6.644109 1.080219
+v -0.273410 6.644109 1.238654
+v -0.196978 6.644109 1.423158
+v -0.170903 6.644109 1.621157
+v -0.196962 6.644109 1.819158
+v -0.375868 6.439125 2.181194
+v -0.250010 6.439125 2.017161
+v -0.539892 6.439125 2.307063
+v -0.730904 6.439125 2.386191
+v -0.935887 6.439125 2.413185
+v -1.140874 6.439125 2.386206
+v -1.331892 6.439125 2.307091
+v -1.495925 6.439125 2.181234
+v -1.621794 6.439125 2.017210
+v -1.700922 6.439125 1.826198
+v -1.727916 6.439125 1.621213
+v -1.700937 6.439125 1.416228
+v -1.621823 6.439125 1.225210
+v -1.495965 6.439125 1.061177
+v -1.331942 6.439125 0.935308
+v -1.140928 6.439125 0.856180
+v -0.935945 6.439125 0.829185
+v -0.730960 6.439125 0.856165
+v -0.539941 6.439125 0.935279
+v -0.375908 6.439125 1.061136
+v -0.250038 6.439125 1.225160
+v -0.170910 6.439125 1.416173
+v -0.143917 6.439125 1.621156
+v -0.170895 6.439125 1.826142
+v -0.394951 6.234140 2.162112
+v -0.273382 6.234140 2.003668
+v -0.553386 6.234140 2.283693
+v -0.737889 6.234140 2.360124
+v -0.935889 6.234140 2.386198
+v -1.133890 6.234140 2.360139
+v -1.318400 6.234140 2.283720
+v -1.476843 6.234140 2.162151
+v -1.598423 6.234140 2.003716
+v -1.674855 6.234140 1.819212
+v -1.700930 6.234140 1.621213
+v -1.674870 6.234140 1.423212
+v -1.598451 6.234140 1.238703
+v -1.476882 6.234140 1.080259
+v -1.318447 6.234140 0.958678
+v -1.133943 6.234140 0.882246
+v -0.935944 6.234140 0.856172
+v -0.737943 6.234140 0.882232
+v -0.553433 6.234140 0.958650
+v -0.394989 6.234140 1.080219
+v -0.273409 6.234140 1.238654
+v -0.196978 6.234140 1.423158
+v -0.170903 6.234140 1.621157
+v -0.196962 6.234140 1.819158
+v -0.450900 6.043124 2.106167
+v -0.341904 6.043124 1.964110
+v -0.592949 6.043124 2.215173
+v -0.758370 6.043124 2.283701
+v -0.935891 6.043124 2.307078
+v -1.113414 6.043124 2.283713
+v -1.278841 6.043124 2.215197
+v -1.420897 6.043124 2.106202
+v -1.529904 6.043124 1.964153
+v -1.598432 6.043124 1.798732
+v -1.621809 6.043124 1.621211
+v -1.598444 6.043124 1.443688
+v -1.529929 6.043124 1.278261
+v -1.420933 6.043124 1.136204
+v -1.278884 6.043124 1.027197
+v -1.113462 6.043124 0.958670
+v -0.935941 6.043124 0.935293
+v -0.758418 6.043124 0.958658
+v -0.592992 6.043124 1.027173
+v -0.450935 6.043124 1.136168
+v -0.341929 6.043124 1.278217
+v -0.273402 6.043124 1.443639
+v -0.250023 6.043124 1.621160
+v -0.273388 6.043124 1.798683
+v -0.539902 5.879096 2.017171
+v -0.450907 5.879096 1.901182
+v -0.655885 5.879096 2.106174
+v -0.790950 5.879096 2.162127
+v -0.935896 5.879096 2.181215
+v -1.080843 5.879096 2.162137
+v -1.215914 5.879096 2.106194
+v -1.331902 5.879096 2.017200
+v -1.420905 5.879096 1.901217
+v -1.476857 5.879096 1.766150
+v -1.495945 5.879096 1.621206
+v -1.476867 5.879096 1.476258
+v -1.420925 5.879096 1.341188
+v -1.331931 5.879096 1.225199
+v -1.215949 5.879096 1.136196
+v -1.080882 5.879096 1.080244
+v -0.935937 5.879096 1.061157
+v -0.790990 5.879096 1.080234
+v -0.655919 5.879096 1.136176
+v -0.539931 5.879096 1.225170
+v -0.450927 5.879096 1.341153
+v -0.394976 5.879096 1.476219
+v -0.375887 5.879096 1.621165
+v -0.394965 5.879096 1.766112
+v -0.655892 5.753232 1.901190
+v -0.592963 5.753232 1.819174
+v -0.737903 5.753232 1.964125
+v -0.833410 5.753232 2.003689
+v -0.935902 5.753232 2.017185
+v -1.038395 5.753232 2.003696
+v -1.133904 5.753232 1.964139
+v -1.215921 5.753232 1.901210
+v -1.278855 5.753232 1.819197
+v -1.318419 5.753232 1.723692
+v -1.331916 5.753232 1.621200
+v -1.318427 5.753232 1.518707
+v -1.278869 5.753232 1.423198
+v -1.215941 5.753232 1.341181
+v -1.133929 5.753232 1.278246
+v -1.038423 5.753232 1.238682
+v -0.935931 5.753232 1.225185
+v -0.833438 5.753232 1.238675
+v -0.737928 5.753232 1.278232
+v -0.655912 5.753232 1.341161
+v -0.592977 5.753232 1.423173
+v -0.553413 5.753232 1.518679
+v -0.539916 5.753232 1.621171
+v -0.553405 5.753232 1.723664
+v -0.790965 5.674111 1.766127
+v -0.758390 5.674111 1.723672
+v -0.833417 5.674111 1.798704
+v -0.882854 5.674111 1.819184
+v -0.935909 5.674111 1.826171
+v -0.988963 5.674111 1.819188
+v -1.038403 5.674111 1.798711
+v -1.080857 5.674111 1.766137
+v -1.113434 5.674111 1.723684
+v -1.133914 5.674111 1.674246
+v -1.140901 5.674111 1.621193
+v -1.133918 5.674111 1.568139
+v -1.113442 5.674111 1.518699
+v -1.080868 5.674111 1.476244
+v -1.038415 5.674111 1.443667
+v -0.988978 5.674111 1.423187
+v -0.935924 5.674111 1.416201
+v -0.882869 5.674111 1.423183
+v -0.833430 5.674111 1.443660
+v -0.790975 5.674111 1.476233
+v -0.758398 5.674111 1.518686
+v -0.737918 5.674111 1.568124
+v -0.730931 5.674111 1.621178
+v -0.737914 5.674111 1.674232
+v -0.935916 5.647125 1.621186
+v -0.935916 7.231124 -1.621186
+v -1.133918 7.204138 -1.568138
+v -1.113442 7.204138 -1.518699
+v -1.140901 7.204138 -1.621192
+v -1.133914 7.204138 -1.674246
+v -1.113434 7.204138 -1.723684
+v -1.080857 7.204138 -1.766137
+v -1.038402 7.204138 -1.798711
+v -0.988963 7.204138 -1.819188
+v -0.935909 7.204138 -1.826170
+v -0.882855 7.204138 -1.819184
+v -0.833417 7.204138 -1.798704
+v -0.790965 7.204138 -1.766127
+v -0.758390 7.204138 -1.723672
+v -0.737914 7.204138 -1.674233
+v -0.730932 7.204138 -1.621179
+v -0.737918 7.204138 -1.568125
+v -0.758397 7.204138 -1.518687
+v -0.790975 7.204138 -1.476234
+v -0.833430 7.204138 -1.443660
+v -0.882869 7.204138 -1.423184
+v -0.935923 7.204138 -1.416201
+v -0.988977 7.204138 -1.423187
+v -1.038415 7.204138 -1.443667
+v -1.080867 7.204138 -1.476244
+v -1.318427 7.125016 -1.518706
+v -1.278869 7.125016 -1.423198
+v -1.331916 7.125016 -1.621199
+v -1.318419 7.125016 -1.723691
+v -1.278855 7.125016 -1.819197
+v -1.215921 7.125016 -1.901209
+v -1.133904 7.125016 -1.964139
+v -1.038395 7.125016 -2.003695
+v -0.935902 7.125016 -2.017185
+v -0.833411 7.125016 -2.003688
+v -0.737904 7.125016 -1.964125
+v -0.655893 7.125016 -1.901190
+v -0.592963 7.125016 -1.819174
+v -0.553406 7.125016 -1.723665
+v -0.539916 7.125016 -1.621172
+v -0.553413 7.125016 -1.518680
+v -0.592977 7.125016 -1.423174
+v -0.655911 7.125016 -1.341161
+v -0.737928 7.125016 -1.278233
+v -0.833437 7.125016 -1.238675
+v -0.935929 7.125016 -1.225185
+v -1.038421 7.125016 -1.238682
+v -1.133928 7.125016 -1.278245
+v -1.215940 7.125016 -1.341181
+v -1.476867 6.999153 -1.476258
+v -1.420924 6.999153 -1.341188
+v -1.495945 6.999153 -1.621205
+v -1.476857 6.999153 -1.766150
+v -1.420906 6.999153 -1.901216
+v -1.331903 6.999153 -2.017199
+v -1.215913 6.999153 -2.106194
+v -1.080844 6.999153 -2.162136
+v -0.935897 6.999153 -2.181214
+v -0.790952 6.999153 -2.162126
+v -0.655885 6.999153 -2.106175
+v -0.539902 6.999153 -2.017172
+v -0.450908 6.999153 -1.901183
+v -0.394965 6.999153 -1.766113
+v -0.375888 6.999153 -1.621166
+v -0.394974 6.999153 -1.476221
+v -0.450926 6.999153 -1.341155
+v -0.539929 6.999153 -1.225172
+v -0.655919 6.999153 -1.136176
+v -0.790988 6.999153 -1.080234
+v -0.935934 6.999153 -1.061157
+v -1.080880 6.999153 -1.080244
+v -1.215946 6.999153 -1.136196
+v -1.331930 6.999153 -1.225199
+v -1.598443 6.835124 -1.443686
+v -1.529928 6.835124 -1.278260
+v -1.621808 6.835124 -1.621209
+v -1.598431 6.835124 -1.798730
+v -1.529905 6.835124 -1.964151
+v -1.420899 6.835124 -2.106201
+v -1.278841 6.835124 -2.215197
+v -1.113416 6.835124 -2.283712
+v -0.935893 6.835124 -2.307077
+v -0.758372 6.835124 -2.283700
+v -0.592949 6.835124 -2.215173
+v -0.450901 6.835124 -2.106169
+v -0.341905 6.835124 -1.964112
+v -0.273390 6.835124 -1.798685
+v -0.250025 6.835124 -1.621162
+v -0.273401 6.835124 -1.443642
+v -0.341927 6.835124 -1.278219
+v -0.450933 6.835124 -1.136170
+v -0.592990 6.835124 -1.027174
+v -0.758417 6.835124 -0.958659
+v -0.935939 6.835124 -0.935293
+v -1.113460 6.835124 -0.958670
+v -1.278882 6.835124 -1.027197
+v -1.420932 6.835124 -1.136203
+v -1.674869 6.644109 -1.423211
+v -1.598450 6.644109 -1.238701
+v -1.700929 6.644109 -1.621212
+v -1.674855 6.644109 -1.819211
+v -1.598424 6.644109 -2.003714
+v -1.476844 6.644109 -2.162150
+v -1.318400 6.644109 -2.283720
+v -1.133891 6.644109 -2.360138
+v -0.935890 6.644109 -2.386199
+v -0.737891 6.644109 -2.360124
+v -0.553387 6.644109 -2.283693
+v -0.394952 6.644109 -2.162114
+v -0.273383 6.644109 -2.003670
+v -0.196964 6.644109 -1.819160
+v -0.170903 6.644109 -1.621159
+v -0.196977 6.644109 -1.423161
+v -0.273407 6.644109 -1.238656
+v -0.394988 6.644109 -1.080221
+v -0.553432 6.644109 -0.958652
+v -0.737941 6.644109 -0.882232
+v -0.935941 6.644109 -0.856172
+v -1.133941 6.644109 -0.882246
+v -1.318445 6.644109 -0.958677
+v -1.476880 6.644109 -1.080257
+v -1.700936 6.439125 -1.416227
+v -1.621822 6.439125 -1.225209
+v -1.727916 6.439125 -1.621213
+v -1.700922 6.439125 -1.826196
+v -1.621795 6.439125 -2.017208
+v -1.495925 6.439125 -2.181233
+v -1.331892 6.439125 -2.307091
+v -1.140875 6.439125 -2.386206
+v -0.935889 6.439125 -2.413185
+v -0.730905 6.439125 -2.386192
+v -0.539892 6.439125 -2.307064
+v -0.375868 6.439125 -2.181195
+v -0.250011 6.439125 -2.017163
+v -0.170896 6.439125 -1.826144
+v -0.143916 6.439125 -1.621159
+v -0.170910 6.439125 -1.416175
+v -0.250037 6.439125 -1.225162
+v -0.375906 6.439125 -1.061138
+v -0.539939 6.439125 -0.935280
+v -0.730957 6.439125 -0.856165
+v -0.935943 6.439125 -0.829185
+v -1.140927 6.439125 -0.856179
+v -1.331939 6.439125 -0.935307
+v -1.495964 6.439125 -1.061176
+v -1.674869 6.234140 -1.423211
+v -1.598450 6.234140 -1.238701
+v -1.700929 6.234140 -1.621212
+v -1.674856 6.234140 -1.819210
+v -1.598424 6.234140 -2.003714
+v -1.476844 6.234140 -2.162150
+v -1.318400 6.234140 -2.283720
+v -1.133891 6.234140 -2.360138
+v -0.935890 6.234140 -2.386199
+v -0.737891 6.234140 -2.360124
+v -0.553387 6.234140 -2.283693
+v -0.394952 6.234140 -2.162114
+v -0.273383 6.234140 -2.003670
+v -0.196964 6.234140 -1.819160
+v -0.170902 6.234140 -1.621160
+v -0.196976 6.234140 -1.423160
+v -0.273407 6.234140 -1.238656
+v -0.394988 6.234140 -1.080221
+v -0.553432 6.234140 -0.958651
+v -0.737941 6.234140 -0.882232
+v -0.935942 6.234140 -0.856172
+v -1.133941 6.234140 -0.882246
+v -1.318445 6.234140 -0.958677
+v -1.476880 6.234140 -1.080257
+v -1.598443 6.043124 -1.443686
+v -1.529928 6.043124 -1.278260
+v -1.621808 6.043124 -1.621209
+v -1.598432 6.043124 -1.798730
+v -1.529905 6.043124 -1.964152
+v -1.420899 6.043124 -2.106201
+v -1.278841 6.043124 -2.215197
+v -1.113416 6.043124 -2.283712
+v -0.935892 6.043124 -2.307078
+v -0.758372 6.043124 -2.283701
+v -0.592950 6.043124 -2.215174
+v -0.450901 6.043124 -2.106169
+v -0.341905 6.043124 -1.964112
+v -0.273390 6.043124 -1.798685
+v -0.250023 6.043124 -1.621162
+v -0.273401 6.043124 -1.443641
+v -0.341927 6.043124 -1.278219
+v -0.450933 6.043124 -1.136170
+v -0.592990 6.043124 -1.027174
+v -0.758416 6.043124 -0.958658
+v -0.935939 6.043124 -0.935293
+v -1.113460 6.043124 -0.958670
+v -1.278882 6.043124 -1.027196
+v -1.420931 6.043124 -1.136202
+v -1.476867 5.879096 -1.476258
+v -1.420925 5.879096 -1.341187
+v -1.495945 5.879096 -1.621205
+v -1.476858 5.879096 -1.766150
+v -1.420906 5.879096 -1.901217
+v -1.331903 5.879096 -2.017199
+v -1.215914 5.879096 -2.106194
+v -1.080844 5.879096 -2.162137
+v -0.935897 5.879096 -2.181214
+v -0.790951 5.879096 -2.162127
+v -0.655885 5.879096 -2.106175
+v -0.539902 5.879096 -2.017172
+v -0.450907 5.879096 -1.901183
+v -0.394964 5.879096 -1.766113
+v -0.375887 5.879096 -1.621167
+v -0.394974 5.879096 -1.476221
+v -0.450926 5.879096 -1.341155
+v -0.539929 5.879096 -1.225172
+v -0.655919 5.879096 -1.136176
+v -0.790988 5.879096 -1.080234
+v -0.935935 5.879096 -1.061156
+v -1.080880 5.879096 -1.080244
+v -1.215947 5.879096 -1.136195
+v -1.331930 5.879096 -1.225199
+v -1.318427 5.753232 -1.518706
+v -1.278869 5.753232 -1.423198
+v -1.331917 5.753232 -1.621199
+v -1.318420 5.753232 -1.723691
+v -1.278855 5.753232 -1.819197
+v -1.215922 5.753232 -1.901210
+v -1.133904 5.753232 -1.964139
+v -1.038396 5.753232 -2.003696
+v -0.935902 5.753232 -2.017185
+v -0.833411 5.753232 -2.003689
+v -0.737904 5.753232 -1.964125
+v -0.655892 5.753232 -1.901191
+v -0.592963 5.753232 -1.819174
+v -0.553406 5.753232 -1.723665
+v -0.539915 5.753232 -1.621172
+v -0.553413 5.753232 -1.518680
+v -0.592976 5.753232 -1.423174
+v -0.655911 5.753232 -1.341161
+v -0.737928 5.753232 -1.278232
+v -0.833437 5.753232 -1.238675
+v -0.935930 5.753232 -1.225185
+v -1.038421 5.753232 -1.238682
+v -1.133928 5.753232 -1.278245
+v -1.215940 5.753232 -1.341180
+v -1.133918 5.674111 -1.568139
+v -1.113442 5.674111 -1.518699
+v -1.140901 5.674111 -1.621192
+v -1.133915 5.674111 -1.674246
+v -1.113435 5.674111 -1.723684
+v -1.080857 5.674111 -1.766137
+v -1.038403 5.674111 -1.798711
+v -0.988963 5.674111 -1.819188
+v -0.935909 5.674111 -1.826170
+v -0.882855 5.674111 -1.819184
+v -0.833418 5.674111 -1.798705
+v -0.790965 5.674111 -1.766127
+v -0.758390 5.674111 -1.723672
+v -0.737913 5.674111 -1.674233
+v -0.730931 5.674111 -1.621178
+v -0.737917 5.674111 -1.568125
+v -0.758397 5.674111 -1.518687
+v -0.790975 5.674111 -1.476233
+v -0.833430 5.674111 -1.443660
+v -0.882869 5.674111 -1.423183
+v -0.935923 5.674111 -1.416200
+v -0.988977 5.674111 -1.423187
+v -1.038415 5.674111 -1.443667
+v -1.080867 5.674111 -1.476244
+v -0.935916 5.647125 -1.621186
+v -0.190840 5.515944 -0.247657
+v -0.243367 5.517920 -0.235939
+v -0.261354 5.488284 -0.267095
+v -0.208826 5.486310 -0.278812
+v -0.173079 5.486310 -0.299449
+v -0.155093 5.515944 -0.268294
+v -0.228850 5.582496 -0.210793
+v -0.139581 5.583405 -0.241425
+v -0.233466 5.666270 -0.218788
+v -0.144205 5.670815 -0.249435
+v -0.255802 5.742265 -0.257478
+v -0.167363 5.750560 -0.289548
+v -0.297788 5.792035 -0.330207
+v -0.211060 5.803005 -0.365240
+v -0.343482 5.797686 -0.409358
+v -0.258901 5.809513 -0.448111
+v -0.486318 5.676223 -0.655443
+v -0.405936 5.684768 -0.702802
+v -0.517488 5.659646 -0.709435
+v -0.437105 5.668191 -0.756794
+v -0.571735 5.679368 -0.802186
+v -0.542081 5.656149 -0.753369
+v -0.461677 5.665982 -0.799357
+v -0.489236 5.692117 -0.847093
+v -0.572927 5.695159 -0.804252
+v -0.490428 5.707908 -0.849159
+v -0.591090 5.686442 -0.844394
+v -0.575502 5.701816 -0.817393
+v -0.498818 5.708117 -0.863693
+v -0.514406 5.692743 -0.890693
+v -0.606256 5.640802 -0.864248
+v -0.600253 5.667114 -0.853850
+v -0.525201 5.671900 -0.909393
+v -0.531203 5.645587 -0.919790
+v -0.604916 5.591613 -0.862565
+v -0.530623 5.594168 -0.918785
+v -0.588219 5.544410 -0.833204
+v -0.515060 5.543750 -0.891826
+v -0.551621 5.518014 -0.769893
+v -0.477914 5.514775 -0.827483
+v -0.553208 5.442576 -0.771806
+v -0.545999 5.489536 -0.759319
+v -0.470734 5.485821 -0.815044
+v -0.477942 5.438861 -0.827531
+v -0.553757 5.360417 -0.773593
+v -0.477973 5.355863 -0.827584
+v -0.535240 5.306975 -0.741518
+v -0.458816 5.299571 -0.794401
+v -0.501877 5.281743 -0.683728
+v -0.424066 5.272824 -0.734208
+v -0.462811 5.285222 -0.619590
+v -0.382114 5.278866 -0.661537
+v -0.470074 5.311057 -0.628639
+v -0.461690 5.295666 -0.614116
+v -0.375516 5.290197 -0.650110
+v -0.383901 5.305588 -0.664634
+v -0.479111 5.360498 -0.644293
+v -0.393471 5.357014 -0.681211
+v -0.473747 5.426218 -0.635001
+v -0.388052 5.425636 -0.671824
+v -0.445369 5.495645 -0.585845
+v -0.358659 5.498289 -0.620911
+v -0.423046 5.539909 -0.544138
+v -0.335433 5.539687 -0.580678
+v -0.402936 5.471096 -0.512342
+v -0.405018 5.520258 -0.515948
+v -0.329649 5.522835 -0.570658
+v -0.327567 5.473672 -0.567053
+v -0.384342 5.362035 -0.480091
+v -0.308249 5.359894 -0.533591
+v -0.354674 5.287212 -0.426508
+v -0.368975 5.316366 -0.451280
+v -0.295007 5.315586 -0.510652
+v -0.280706 5.286431 -0.485881
+v -0.374991 5.265692 -0.461581
+v -0.356747 5.267126 -0.429978
+v -0.282678 5.271138 -0.489296
+v -0.300922 5.269704 -0.520898
+v -0.403070 5.225375 -0.513521
+v -0.391191 5.253418 -0.492945
+v -0.315984 5.254966 -0.546988
+v -0.327862 5.226924 -0.567564
+v -0.389142 5.146736 -0.489853
+v -0.402979 5.194917 -0.513821
+v -0.326883 5.188813 -0.565868
+v -0.313047 5.140632 -0.541901
+v -0.343356 5.109948 -0.409139
+v -0.371460 5.122450 -0.457820
+v -0.292077 5.110291 -0.505577
+v -0.263973 5.097790 -0.456896
+v -0.279875 5.179461 -0.299573
+v -0.319359 5.118040 -0.367904
+v -0.237305 5.106178 -0.410702
+v -0.194744 5.170083 -0.336978
+v -0.268798 5.259162 -0.279990
+v -0.182183 5.254062 -0.315219
+v -0.281731 5.356741 -0.302429
+v -0.196221 5.356647 -0.339536
+v -0.300316 5.417790 -0.334622
+v -0.214805 5.417697 -0.371727
+v -0.271645 5.469887 -0.291056
+v -0.292658 5.458251 -0.327454
+v -0.213591 5.454040 -0.369624
+v -0.192578 5.465675 -0.333227
+v -0.296826 5.533141 -0.286469
+v -0.286707 5.534671 -0.309898
+v -0.292985 5.504072 -0.320772
+v -0.307646 5.501982 -0.305212
+v -0.292762 5.537968 -0.322346
+v -0.319607 5.538089 -0.327890
+v -0.325063 5.520028 -0.337341
+v -0.299040 5.507370 -0.333220
+v -0.318430 5.465744 -0.372094
+v -0.304354 5.457216 -0.347713
+v -0.316096 5.475670 -0.327095
+v -0.397028 5.483232 -0.439979
+v -0.398660 5.538704 -0.442806
+v -0.410370 5.515820 -0.463091
+v -0.408673 5.475719 -0.460150
+v -0.381025 5.217666 -0.412258
+v -0.362534 5.186327 -0.380229
+v -0.330125 5.233723 -0.324091
+v -0.355705 5.262099 -0.387217
+v -0.546223 5.324542 -0.719585
+v -0.516395 5.301105 -0.667917
+v -0.517817 5.315813 -0.649208
+v -0.535706 5.339489 -0.680196
+v -0.588197 5.657892 -0.789743
+v -0.595820 5.668571 -0.802949
+v -0.607675 5.651269 -0.804861
+v -0.606498 5.634236 -0.802821
+v -0.522819 5.511280 -0.657873
+v -0.499943 5.561415 -0.618248
+v -0.508335 5.613324 -0.632784
+v -0.546169 5.588543 -0.698319
+v -0.592421 5.590698 -0.778437
+v -0.581375 5.556879 -0.759304
+v -0.566938 5.572126 -0.734296
+v -0.561544 5.448348 -0.745288
+v -0.562532 5.373504 -0.747835
+v -0.550857 5.368674 -0.706441
+v -0.544711 5.424644 -0.695794
+v -0.300127 5.608974 -0.272129
+v -0.265722 5.577381 -0.233704
+v -0.269503 5.652568 -0.240252
+v -0.304721 5.657471 -0.280085
+v -0.310735 5.503573 -0.290503
+v -0.297990 5.531240 -0.268426
+v -0.374076 5.662285 -0.419520
+v -0.351965 5.666801 -0.381893
+v -0.352606 5.715039 -0.363032
+v -0.372833 5.719302 -0.398069
+v -0.327190 5.412295 -0.340212
+v -0.312418 5.362868 -0.314624
+v -0.300067 5.274145 -0.293195
+v -0.305950 5.201977 -0.303782
+v -0.337957 5.144361 -0.359158
+v -0.361952 5.136270 -0.400392
+v -0.384875 5.146466 -0.440099
+v -0.402558 5.170753 -0.472132
+v -0.409156 5.197310 -0.483560
+v -0.409247 5.227768 -0.483260
+v -0.400771 5.243670 -0.468579
+v -0.384570 5.255943 -0.437216
+v -0.353633 5.282185 -0.383746
+v -0.379358 5.325606 -0.428306
+v -0.394726 5.371274 -0.457117
+v -0.410825 5.470294 -0.485049
+v -0.412522 5.510393 -0.487989
+v -0.379911 5.592010 -0.473217
+v -0.398224 5.557381 -0.504938
+v -0.405728 5.547515 -0.476980
+v -0.394017 5.570402 -0.456695
+v -0.349243 5.625658 -0.419337
+v -0.366300 5.601588 -0.407924
+v -0.296569 5.604552 -0.329733
+v -0.332020 5.629180 -0.390466
+v -0.349076 5.605110 -0.379054
+v -0.322738 5.583147 -0.334107
+v -0.331195 5.474578 -0.385716
+v -0.314199 5.486594 -0.356276
+v -0.340224 5.499254 -0.360395
+v -0.364578 5.473194 -0.402582
+v -0.318796 5.450655 -0.364612
+v -0.332871 5.459183 -0.388993
+v -0.366254 5.457798 -0.405860
+v -0.345669 5.445159 -0.370202
+v -0.308488 5.628274 -0.305646
+v -0.291844 5.612298 -0.317776
+v -0.331628 5.648447 -0.387623
+v -0.387359 5.603806 -0.484801
+v -0.353738 5.643930 -0.425250
+v -0.413076 5.612260 -0.488390
+v -0.405672 5.569179 -0.516522
+v -0.430359 5.578382 -0.518327
+v -0.447733 5.549114 -0.545942
+v -0.478201 5.486811 -0.601758
+v -0.503262 5.424101 -0.645167
+v -0.507739 5.365025 -0.652924
+v -0.499364 5.320957 -0.638416
+v -0.492525 5.308403 -0.626569
+v -0.493647 5.297959 -0.632044
+v -0.498908 5.297311 -0.641156
+v -0.552243 5.497252 -0.729176
+v -0.557864 5.525727 -0.739749
+v -0.590487 5.550106 -0.796172
+v -0.609642 5.590175 -0.829790
+v -0.612828 5.632510 -0.834673
+v -0.607558 5.655898 -0.825545
+v -0.598394 5.675226 -0.816090
+v -0.561857 5.636914 -0.746666
+v -0.537264 5.640411 -0.702732
+v -0.499874 5.662618 -0.637965
+v -0.368061 5.773489 -0.410975
+v -0.326742 5.767262 -0.339402
+v -0.289270 5.721624 -0.274494
+v -0.279439 5.519274 -0.257463
+v -0.294109 5.495102 -0.282875
+v -0.304400 5.476707 -0.306835
+v -0.317456 5.472592 -0.370408
+v -0.315123 5.482518 -0.325409
+v -0.300460 5.484608 -0.340968
+v -0.508678 5.311946 -0.633378
+v -0.372331 5.494235 -0.397199
+v -0.347977 5.520294 -0.355013
+v -0.342521 5.538355 -0.345562
+v -0.346793 5.555797 -0.352962
+v -0.370803 5.570638 -0.394553
+v -0.382220 5.504280 -0.414330
+v -0.394518 5.235818 -0.435631
+v -0.402993 5.219917 -0.450312
+v -0.538100 5.463790 -0.684342
+v -0.342496 5.376470 -0.345520
+v -0.357268 5.425898 -0.371107
+v -0.377853 5.438536 -0.406765
+v -0.389498 5.431025 -0.426936
+v -0.380014 5.349375 -0.410508
+v -0.354290 5.305954 -0.365948
+v -0.327455 5.273817 -0.319466
+v -0.475595 5.605947 -0.576072
+v -0.155791 5.282185 -0.497961
+v -0.140050 5.305954 -0.489630
+v -0.113215 5.273817 -0.443148
+v -0.115885 5.233723 -0.447772
+v -0.157760 5.262099 -0.501491
+v -0.233969 5.578382 -0.631704
+v -0.249195 5.549114 -0.660559
+v -0.261355 5.605947 -0.699753
+v -0.244751 5.569179 -0.609422
+v -0.238444 5.557381 -0.597180
+v -0.244581 5.520258 -0.608569
+v -0.259978 5.539909 -0.638278
+v -0.303458 5.320957 -0.751513
+v -0.321466 5.339489 -0.803878
+v -0.311833 5.365025 -0.766021
+v -0.216686 5.612260 -0.601767
+v -0.158593 5.719302 -0.521750
+v -0.176548 5.662285 -0.533553
+v -0.167981 5.504280 -0.538011
+v -0.184420 5.538704 -0.566488
+v -0.156563 5.570638 -0.518234
+v -0.285703 5.561415 -0.741930
+v -0.294095 5.613324 -0.756465
+v -0.294438 5.311946 -0.757060
+v -0.296619 5.308403 -0.739666
+v -0.300799 5.297959 -0.743376
+v -0.323860 5.463790 -0.808024
+v -0.308579 5.511280 -0.781555
+v -0.307356 5.424101 -0.758264
+v -0.191680 5.643930 -0.518806
+v -0.170152 5.648447 -0.480843
+v -0.172418 5.629180 -0.482604
+v -0.188807 5.625658 -0.511957
+v -0.170394 5.601588 -0.521021
+v -0.154006 5.605110 -0.491668
+v -0.165774 5.349375 -0.534189
+v -0.181516 5.325606 -0.542521
+v -0.198780 5.371274 -0.570237
+v -0.180278 5.235818 -0.559312
+v -0.205683 5.243670 -0.581204
+v -0.186625 5.255943 -0.551490
+v -0.188753 5.219917 -0.573994
+v -0.214464 5.197310 -0.595956
+v -0.214159 5.227768 -0.595885
+v -0.148294 5.186327 -0.503911
+v -0.188969 5.146466 -0.553196
+v -0.207866 5.170753 -0.584528
+v -0.166785 5.217666 -0.535940
+v -0.142337 5.144361 -0.472090
+v -0.166046 5.136270 -0.513489
+v -0.143028 5.425898 -0.494789
+v -0.148045 5.445159 -0.484291
+v -0.131314 5.412295 -0.453292
+v -0.397708 5.668571 -0.917320
+v -0.393435 5.651269 -0.928542
+v -0.411406 5.655898 -0.938784
+v -0.407801 5.675226 -0.926120
+v -0.163613 5.438536 -0.530446
+v -0.182788 5.483232 -0.563660
+v -0.158091 5.494235 -0.520881
+v -0.166629 5.473194 -0.516859
+v -0.168630 5.457798 -0.519949
+v -0.210480 5.547515 -0.589697
+v -0.196130 5.515820 -0.586772
+v -0.216616 5.510393 -0.601086
+v -0.162331 5.472592 -0.459963
+v -0.163304 5.465744 -0.461649
+v -0.170717 5.459183 -0.482605
+v -0.168717 5.474578 -0.479515
+v -0.133737 5.520294 -0.478694
+v -0.129891 5.520028 -0.450014
+v -0.142274 5.499254 -0.474672
+v -0.124529 5.482518 -0.435439
+v -0.110778 5.501982 -0.418866
+v -0.096495 5.503573 -0.414184
+v -0.098203 5.495102 -0.395972
+v -0.113806 5.476707 -0.416865
+v -0.125503 5.475670 -0.437126
+v -0.145335 5.484608 -0.430523
+v -0.151721 5.486594 -0.450075
+v -0.139336 5.507370 -0.425418
+v -0.131584 5.504072 -0.413950
+v -0.355613 5.497252 -0.842691
+v -0.361958 5.525727 -0.852847
+v -0.352698 5.572126 -0.857978
+v -0.331929 5.588543 -0.822001
+v -0.116542 5.362868 -0.427705
+v -0.128256 5.376470 -0.469202
+v -0.100918 5.488284 -0.359716
+v -0.116521 5.469887 -0.380609
+v -0.365951 5.636914 -0.859763
+v -0.381645 5.656149 -0.845989
+v -0.355897 5.659646 -0.802723
+v -0.340203 5.640411 -0.816496
+v -0.420377 5.701816 -0.906947
+v -0.410284 5.695159 -0.898146
+v -0.439571 5.667114 -0.946612
+v -0.435965 5.686442 -0.933949
+v -0.384839 5.489536 -0.852358
+v -0.391184 5.518014 -0.862513
+v -0.350317 5.324542 -0.832682
+v -0.366626 5.373504 -0.860932
+v -0.336617 5.368674 -0.830122
+v -0.301254 5.295666 -0.706737
+v -0.305434 5.285222 -0.710445
+v -0.303577 5.315813 -0.772890
+v -0.155020 5.666801 -0.495590
+v -0.128253 5.583147 -0.446384
+v -0.124435 5.538089 -0.440564
+v -0.128281 5.538355 -0.469244
+v -0.132553 5.555797 -0.476643
+v -0.133059 5.537968 -0.414544
+v -0.137552 5.604552 -0.421535
+v -0.129560 5.612298 -0.411464
+v -0.125306 5.534671 -0.403076
+v -0.198769 5.570402 -0.569412
+v -0.220131 5.592010 -0.565458
+v -0.226438 5.603806 -0.577701
+v -0.214919 5.470294 -0.598146
+v -0.194433 5.475719 -0.583832
+v -0.175258 5.431025 -0.550617
+v -0.206602 5.316366 -0.545018
+v -0.223868 5.362035 -0.572733
+v -0.194270 5.267126 -0.523776
+v -0.192302 5.287212 -0.520247
+v -0.231574 5.253418 -0.585092
+v -0.212515 5.265692 -0.555379
+v -0.243758 5.194917 -0.605739
+v -0.243453 5.225375 -0.605668
+v -0.211023 5.122450 -0.550440
+v -0.229922 5.146736 -0.581772
+v -0.159211 5.118040 -0.460359
+v -0.182920 5.109948 -0.501759
+v -0.110387 5.201977 -0.416681
+v -0.104161 5.274145 -0.406292
+v -0.139911 5.417790 -0.427224
+v -0.156642 5.450655 -0.458224
+v -0.282295 5.486811 -0.714855
+v -0.302813 5.662618 -0.751729
+v -0.172155 5.773489 -0.524072
+v -0.138366 5.715039 -0.486714
+v -0.130836 5.767262 -0.452499
+v -0.083750 5.531240 -0.392107
+v -0.083533 5.519274 -0.370560
+v -0.110732 5.628274 -0.419811
+v -0.085887 5.608974 -0.395810
+v -0.099957 5.533141 -0.400122
+v -0.090481 5.657471 -0.403767
+v -0.093365 5.721624 -0.387591
+v -0.073597 5.652568 -0.353349
+v -0.330471 5.424644 -0.819475
+v -0.367135 5.556879 -0.882986
+v -0.394507 5.550106 -0.909312
+v -0.378181 5.590698 -0.902118
+v -0.414041 5.590175 -0.942711
+v -0.392258 5.634236 -0.926503
+v -0.416676 5.632510 -0.947912
+v -0.390084 5.657892 -0.904114
+v -0.149229 5.457216 -0.437267
+v -0.137534 5.458251 -0.417007
+v -0.137331 5.486310 -0.320087
+v -0.069817 5.577381 -0.346801
+v -0.364914 5.448348 -0.858803
+v -0.306059 5.297311 -0.752488
+v -0.320489 5.301105 -0.781014
+v -0.082931 5.517920 -0.328560
+v -0.068414 5.582496 -0.303413
+v -0.073030 5.666270 -0.311409
+v -0.095365 5.742265 -0.350098
+v -0.137352 5.792035 -0.422827
+v -0.183046 5.797686 -0.501978
+v -0.324727 5.676223 -0.748730
+v -0.409092 5.679368 -0.896081
+v -0.445574 5.640802 -0.957010
+v -0.444787 5.591613 -0.955008
+v -0.427710 5.544410 -0.925866
+v -0.392047 5.442576 -0.864844
+v -0.393320 5.360417 -0.866213
+v -0.374803 5.306975 -0.834138
+v -0.341441 5.281743 -0.776348
+v -0.309638 5.311057 -0.721259
+v -0.318675 5.360498 -0.736913
+v -0.313311 5.426218 -0.727621
+v -0.284933 5.495645 -0.678465
+v -0.242500 5.471096 -0.604963
+v -0.119781 5.179461 -0.391995
+v -0.108362 5.259162 -0.372610
+v -0.121326 5.356741 -0.395032
+v -0.119345 5.515944 -0.288931
+v -0.398380 5.464243 -0.725755
+v -0.430247 5.464243 -0.707360
+v -0.734536 5.123801 -1.214485
+v -0.685573 5.123511 -1.243338
+v -0.796909 5.069855 -1.444054
+v -0.852920 5.069851 -1.411722
+v -0.920091 5.091953 -1.520123
+v -0.856606 5.091958 -1.556768
+v -0.913586 5.160743 -1.664493
+v -0.984510 5.160740 -1.623558
+v -0.951120 5.157276 -1.647598
+v -0.957939 5.269464 -1.750503
+v -1.036909 5.269464 -1.704926
+v -1.000252 5.267411 -1.732596
+v -0.975835 5.441407 -1.786544
+v -1.059114 5.441407 -1.738478
+v -1.020648 5.441407 -1.767989
+v -1.113416 5.441407 -1.792789
+v -0.995699 5.441407 -1.860732
+v -1.140566 5.479807 -1.819945
+v -1.005629 5.479807 -1.897825
+v -1.095316 5.531006 -1.774685
+v -0.989078 5.531006 -1.836003
+v -1.027439 5.569407 -1.706796
+v -0.964249 5.569407 -1.743269
+v -1.063639 5.595008 -1.743004
+v -0.977490 5.595008 -1.792728
+v -1.104366 5.665406 -1.783737
+v -0.992388 5.665406 -1.848366
+v -1.126991 5.665406 -1.806366
+v -1.000664 5.665406 -1.879278
+v -1.126991 5.697407 -1.806366
+v -1.000664 5.697407 -1.879278
+v -0.446690 5.470578 -0.701562
+v -0.461982 5.480661 -0.698612
+v -0.783824 5.148871 -1.201410
+v -0.898613 5.101691 -1.378865
+v -0.965900 5.123687 -1.472525
+v -1.030241 5.187052 -1.560951
+v -1.083870 5.285051 -1.628364
+v -1.107191 5.441407 -1.655226
+v -1.181372 5.441407 -1.675111
+v -1.218463 5.479807 -1.685053
+v -1.156646 5.531006 -1.668482
+v -1.063919 5.569407 -1.643627
+v -1.113374 5.595008 -1.656883
+v -1.169010 5.665406 -1.671797
+v -1.199917 5.665406 -1.680082
+v -1.199917 5.697407 -1.680082
+v -0.789177 5.077298 -1.304126
+v -0.838332 5.107703 -1.282147
+v -0.869656 5.160480 -1.274563
+v -0.921752 5.156838 -1.354278
+v -0.981772 5.178650 -1.426722
+v -1.038541 5.232628 -1.493445
+v -1.086259 5.312052 -1.541328
+v -1.107201 5.441407 -1.559090
+v -1.181387 5.441407 -1.539221
+v -1.218479 5.479807 -1.529285
+v -1.156659 5.531006 -1.545843
+v -1.063926 5.569407 -1.570679
+v -1.113384 5.595008 -1.557434
+v -1.169023 5.665406 -1.542532
+v -1.199933 5.665406 -1.534253
+v -1.199933 5.697407 -1.534253
+v -0.874906 5.221419 -1.283654
+v -0.916141 5.220516 -1.344552
+v -0.963454 5.242119 -1.394983
+v -1.007189 5.285254 -1.439125
+v -1.043437 5.343229 -1.467137
+v -1.059143 5.441407 -1.475827
+v -1.113456 5.441407 -1.421529
+v -1.140612 5.479807 -1.394378
+v -1.095351 5.531006 -1.439627
+v -1.027460 5.569407 -1.507502
+v -1.063669 5.595008 -1.471301
+v -1.104403 5.665406 -1.430577
+v -1.127033 5.665406 -1.407954
+v -1.127033 5.697407 -1.407954
+v -0.852675 5.274195 -1.306987
+v -0.883280 5.275664 -1.352291
+v -0.915854 5.297085 -1.385816
+v -0.944582 5.330832 -1.412547
+v -0.966877 5.370231 -1.425672
+v -0.975892 5.441407 -1.427749
+v -0.995778 5.441407 -1.353568
+v -1.005722 5.479807 -1.316478
+v -0.989150 5.531006 -1.378294
+v -0.964291 5.569407 -1.471022
+v -0.977549 5.595008 -1.421566
+v -0.992464 5.665406 -1.365932
+v -1.000750 5.665406 -1.335022
+v -1.000750 5.697407 -1.335022
+v -0.809206 5.304605 -1.338784
+v -0.831975 5.307508 -1.375422
+v -0.851728 5.328821 -1.401674
+v -0.867498 5.357145 -1.420831
+v -0.877092 5.385822 -1.428041
+v -0.879755 5.441407 -1.427736
+v -0.859888 5.441407 -1.353550
+v -0.849955 5.479807 -1.316456
+v -0.866511 5.531006 -1.378278
+v -0.891344 5.569407 -1.471010
+v -0.927819 5.569407 -1.466213
+v -0.878099 5.595008 -1.421553
+v -0.863198 5.665406 -1.365914
+v -0.854921 5.665406 -1.335005
+v -0.854921 5.697407 -1.335005
+v -0.755362 5.304673 -1.369219
+v -0.775972 5.307511 -1.407747
+v -0.788254 5.328824 -1.438312
+v -0.796588 5.357148 -1.461758
+v -0.798139 5.385825 -1.473610
+v -0.796490 5.441407 -1.475793
+v -0.742193 5.441407 -1.421479
+v -0.715044 5.479807 -1.394323
+v -0.760293 5.531006 -1.439584
+v -0.828165 5.569407 -1.507477
+v -0.791967 5.595008 -1.471266
+v -0.751243 5.665406 -1.430531
+v -0.728618 5.665406 -1.407900
+v -0.728618 5.697407 -1.407900
+v -0.706357 5.274205 -1.391448
+v -0.730279 5.275675 -1.440605
+v -0.742443 5.297095 -1.485909
+v -0.750855 5.330838 -1.524364
+v -0.751173 5.370237 -1.550168
+v -0.769616 5.379807 -1.509160
+v -0.748410 5.441407 -1.559041
+v -0.674230 5.441407 -1.539153
+v -0.637140 5.479807 -1.529208
+v -0.698957 5.531006 -1.545782
+v -0.791682 5.569407 -1.570644
+v -0.742229 5.595008 -1.557386
+v -0.686594 5.665406 -1.542468
+v -0.655687 5.665406 -1.534181
+v -0.655687 5.697407 -1.534181
+v -0.429326 5.586796 -0.779343
+v -0.397591 5.570380 -0.788089
+v -0.684352 5.287472 -1.339637
+v -0.733378 5.312833 -1.326123
+v -0.648650 5.243540 -1.334631
+v -0.675030 5.221431 -1.399032
+v -0.707136 5.220531 -1.465191
+v -0.726568 5.242130 -1.531714
+v -0.742550 5.285265 -1.591869
+v -0.748779 5.343235 -1.637205
+v -0.748396 5.441407 -1.655179
+v -0.674209 5.441407 -1.675043
+v -0.637117 5.479807 -1.684978
+v -0.698938 5.531006 -1.668422
+v -0.791670 5.569407 -1.643591
+v -0.742214 5.595008 -1.656834
+v -0.686574 5.665406 -1.671732
+v -0.655662 5.665406 -1.680011
+v -0.655662 5.697407 -1.680011
+v -0.635842 5.192812 -1.312450
+v -0.669776 5.160491 -1.389942
+v -0.712747 5.156850 -1.474922
+v -0.744882 5.178664 -1.563453
+v -0.773897 5.232639 -1.646192
+v -0.791597 5.312058 -1.711398
+v -0.796449 5.441407 -1.738443
+v -0.742135 5.441407 -1.792739
+v -0.714976 5.479807 -1.819889
+v -0.760240 5.531006 -1.774641
+v -0.828134 5.569407 -1.706770
+v -0.791923 5.595008 -1.742968
+v -0.751187 5.665406 -1.783690
+v -0.728556 5.665406 -1.806314
+v -0.728556 5.697407 -1.806314
+v -0.649356 5.148880 -1.279036
+v -0.692005 5.107712 -1.366613
+v -0.745605 5.101700 -1.467185
+v -0.792479 5.123696 -1.572623
+v -0.836501 5.187061 -1.672774
+v -0.868155 5.285056 -1.752868
+v -0.879698 5.441407 -1.786525
+v -0.859808 5.441407 -1.860707
+v -0.849863 5.479807 -1.897795
+v -0.866438 5.531006 -1.835980
+v -0.891301 5.569407 -1.743255
+v -0.878041 5.595008 -1.792708
+v -0.863123 5.665406 -1.848343
+v -0.854835 5.665406 -1.879251
+v -0.854835 5.697407 -1.879251
+v -0.735759 5.077236 -1.335295
+v -0.927774 5.569407 -1.748064
+v -0.374937 5.480664 -0.748860
+v -0.366189 5.509104 -0.770491
+v -0.374480 5.541945 -0.784849
+v -0.783124 5.312378 -1.298597
+v -0.461185 5.586796 -0.760950
+v -0.818813 5.287462 -1.262015
+v -0.484630 5.570374 -0.737844
+v -0.832330 5.243531 -1.228599
+v -0.493380 5.541935 -0.716213
+v -0.819524 5.192803 -1.206417
+v -0.485091 5.509098 -0.701854
+v -0.119037 5.515944 0.289109
+v -0.082623 5.517920 0.328738
+v -0.100609 5.488284 0.359894
+v -0.137023 5.486310 0.320264
+v -0.172770 5.486310 0.299627
+v -0.154784 5.515944 0.268472
+v -0.068106 5.582496 0.303591
+v -0.139273 5.583405 0.241603
+v -0.072721 5.666270 0.311587
+v -0.143897 5.670815 0.249613
+v -0.095057 5.742265 0.350276
+v -0.167054 5.750560 0.289726
+v -0.137044 5.792035 0.423005
+v -0.210752 5.803005 0.365418
+v -0.182738 5.797686 0.502156
+v -0.258593 5.809513 0.448289
+v -0.324419 5.676223 0.748908
+v -0.405627 5.684768 0.702980
+v -0.355589 5.659646 0.802901
+v -0.436797 5.668191 0.756972
+v -0.408784 5.679368 0.896259
+v -0.381337 5.656149 0.846167
+v -0.461369 5.665982 0.799535
+v -0.488927 5.692117 0.847271
+v -0.409976 5.695159 0.898324
+v -0.490120 5.707908 0.849337
+v -0.435656 5.686442 0.934127
+v -0.420068 5.701816 0.907125
+v -0.498510 5.708117 0.863871
+v -0.514098 5.692743 0.890871
+v -0.445265 5.640802 0.957188
+v -0.439263 5.667114 0.946790
+v -0.524893 5.671900 0.909571
+v -0.530895 5.645587 0.919968
+v -0.444478 5.591613 0.955186
+v -0.530315 5.594168 0.918963
+v -0.427402 5.544410 0.926044
+v -0.514752 5.543750 0.892004
+v -0.390876 5.518014 0.862691
+v -0.477606 5.514775 0.827661
+v -0.391739 5.442576 0.865022
+v -0.384531 5.489536 0.852536
+v -0.470425 5.485821 0.815222
+v -0.477634 5.438861 0.827709
+v -0.393012 5.360417 0.866391
+v -0.477664 5.355863 0.827762
+v -0.374495 5.306975 0.834316
+v -0.458508 5.299571 0.794579
+v -0.341133 5.281743 0.776526
+v -0.423758 5.272824 0.734386
+v -0.305125 5.285222 0.710622
+v -0.381805 5.278866 0.661715
+v -0.309330 5.311057 0.721437
+v -0.300946 5.295666 0.706915
+v -0.375208 5.290197 0.650288
+v -0.383593 5.305588 0.664812
+v -0.318367 5.360498 0.737091
+v -0.393163 5.357014 0.681389
+v -0.313002 5.426218 0.727799
+v -0.387744 5.425636 0.672002
+v -0.284625 5.495645 0.678643
+v -0.358351 5.498289 0.621089
+v -0.259670 5.539909 0.638456
+v -0.335124 5.539687 0.580856
+v -0.242191 5.471096 0.605141
+v -0.244273 5.520258 0.608747
+v -0.329340 5.522835 0.570836
+v -0.327259 5.473672 0.567231
+v -0.223560 5.362035 0.572911
+v -0.307941 5.359894 0.533769
+v -0.191993 5.287212 0.520425
+v -0.206294 5.316366 0.545196
+v -0.294698 5.315586 0.510830
+v -0.280398 5.286431 0.486059
+v -0.212206 5.265692 0.555557
+v -0.193962 5.267126 0.523954
+v -0.282370 5.271138 0.489474
+v -0.300614 5.269704 0.521076
+v -0.243145 5.225375 0.605846
+v -0.231266 5.253418 0.585270
+v -0.315675 5.254966 0.547166
+v -0.327554 5.226924 0.567742
+v -0.229613 5.146736 0.581950
+v -0.243450 5.194917 0.605917
+v -0.326575 5.188813 0.566046
+v -0.312739 5.140632 0.542079
+v -0.182611 5.109948 0.501937
+v -0.210715 5.122450 0.550618
+v -0.291769 5.110291 0.505755
+v -0.263665 5.097790 0.457074
+v -0.119473 5.179461 0.392173
+v -0.158903 5.118040 0.460537
+v -0.236997 5.106178 0.410880
+v -0.194436 5.170083 0.337156
+v -0.108053 5.259162 0.372788
+v -0.181874 5.254062 0.315397
+v -0.121018 5.356741 0.395210
+v -0.195912 5.356647 0.339714
+v -0.139603 5.417790 0.427402
+v -0.214497 5.417697 0.371905
+v -0.116213 5.469887 0.380787
+v -0.137225 5.458251 0.417185
+v -0.213282 5.454040 0.369802
+v -0.192270 5.465675 0.333405
+v -0.099648 5.533141 0.400300
+v -0.124998 5.534671 0.403254
+v -0.131276 5.504072 0.414128
+v -0.110469 5.501982 0.419044
+v -0.132750 5.537968 0.414722
+v -0.124127 5.538089 0.440742
+v -0.129583 5.520028 0.450192
+v -0.139028 5.507370 0.425596
+v -0.162996 5.465744 0.461827
+v -0.148920 5.457216 0.437445
+v -0.125194 5.475670 0.437304
+v -0.182479 5.483232 0.563838
+v -0.184112 5.538704 0.566666
+v -0.195822 5.515820 0.586950
+v -0.194125 5.475719 0.584010
+v -0.166476 5.217666 0.536118
+v -0.147986 5.186327 0.504089
+v -0.115577 5.233723 0.447950
+v -0.157452 5.262099 0.501669
+v -0.350009 5.324542 0.832860
+v -0.320181 5.301105 0.781192
+v -0.303268 5.315813 0.773068
+v -0.321158 5.339489 0.804056
+v -0.389776 5.657892 0.904292
+v -0.397399 5.668571 0.917498
+v -0.393127 5.651269 0.928720
+v -0.391950 5.634236 0.926681
+v -0.308271 5.511280 0.781733
+v -0.285395 5.561415 0.742108
+v -0.293787 5.613324 0.756643
+v -0.331620 5.588543 0.822179
+v -0.377872 5.590698 0.902296
+v -0.366827 5.556879 0.883164
+v -0.352390 5.572126 0.858156
+v -0.364606 5.448348 0.858981
+v -0.366318 5.373504 0.861110
+v -0.336309 5.368674 0.830300
+v -0.330162 5.424644 0.819653
+v -0.085579 5.608974 0.395988
+v -0.069508 5.577381 0.346979
+v -0.073289 5.652568 0.353527
+v -0.090172 5.657471 0.403945
+v -0.096187 5.503573 0.414362
+v -0.083441 5.531240 0.392285
+v -0.176240 5.662285 0.533731
+v -0.154712 5.666801 0.495768
+v -0.138058 5.715039 0.486892
+v -0.158285 5.719302 0.521928
+v -0.131005 5.412295 0.453470
+v -0.116234 5.362868 0.427883
+v -0.103853 5.274145 0.406470
+v -0.110079 5.201977 0.416859
+v -0.142028 5.144361 0.472268
+v -0.165738 5.136270 0.513667
+v -0.188661 5.146466 0.553374
+v -0.207558 5.170753 0.584706
+v -0.214156 5.197310 0.596134
+v -0.213850 5.227768 0.596063
+v -0.205375 5.243670 0.581382
+v -0.186317 5.255943 0.551668
+v -0.155482 5.282185 0.498139
+v -0.181207 5.325606 0.542699
+v -0.198472 5.371274 0.570415
+v -0.214610 5.470294 0.598324
+v -0.216308 5.510393 0.601264
+v -0.219823 5.592010 0.565636
+v -0.238136 5.557381 0.597358
+v -0.210172 5.547515 0.589875
+v -0.198461 5.570402 0.569590
+v -0.188499 5.625658 0.512135
+v -0.170086 5.601588 0.521199
+v -0.137243 5.604552 0.421713
+v -0.172110 5.629180 0.482782
+v -0.153698 5.605110 0.491846
+v -0.127944 5.583147 0.446562
+v -0.168409 5.474578 0.479693
+v -0.151413 5.486594 0.450253
+v -0.141966 5.499254 0.474850
+v -0.166320 5.473194 0.517037
+v -0.156333 5.450655 0.458402
+v -0.170408 5.459183 0.482783
+v -0.168322 5.457798 0.520127
+v -0.147736 5.445159 0.484469
+v -0.110424 5.628274 0.419989
+v -0.129251 5.612298 0.411642
+v -0.169844 5.648447 0.481021
+v -0.226130 5.603806 0.577879
+v -0.191372 5.643930 0.518984
+v -0.216377 5.612260 0.601945
+v -0.244443 5.569179 0.609600
+v -0.233660 5.578382 0.631882
+v -0.248886 5.549114 0.660737
+v -0.281987 5.486811 0.715033
+v -0.307047 5.424101 0.758442
+v -0.311525 5.365025 0.766199
+v -0.303150 5.320957 0.751691
+v -0.296311 5.308403 0.739844
+v -0.300490 5.297959 0.743554
+v -0.305751 5.297311 0.752666
+v -0.355304 5.497252 0.842869
+v -0.361650 5.525727 0.853025
+v -0.394198 5.550106 0.909490
+v -0.413732 5.590175 0.942889
+v -0.416368 5.632510 0.948090
+v -0.411098 5.655898 0.938962
+v -0.407493 5.675226 0.926298
+v -0.365643 5.636914 0.859941
+v -0.339895 5.640411 0.816674
+v -0.302504 5.662618 0.751907
+v -0.171847 5.773489 0.524250
+v -0.130528 5.767262 0.452677
+v -0.093056 5.721624 0.387769
+v -0.083224 5.519274 0.370738
+v -0.097895 5.495102 0.396150
+v -0.113498 5.476707 0.417043
+v -0.162023 5.472592 0.460141
+v -0.124221 5.482518 0.435617
+v -0.145027 5.484608 0.430701
+v -0.294130 5.311946 0.757238
+v -0.157783 5.494235 0.521059
+v -0.133428 5.520294 0.478872
+v -0.127973 5.538355 0.469422
+v -0.132244 5.555797 0.476821
+v -0.156255 5.570638 0.518412
+v -0.167672 5.504280 0.538189
+v -0.179969 5.235818 0.559490
+v -0.188445 5.219917 0.574172
+v -0.323551 5.463790 0.808201
+v -0.127948 5.376470 0.469380
+v -0.142720 5.425898 0.494967
+v -0.163305 5.438536 0.530624
+v -0.174950 5.431025 0.550795
+v -0.165466 5.349375 0.534367
+v -0.139741 5.305954 0.489808
+v -0.112907 5.273817 0.443326
+v -0.261047 5.605947 0.699931
+v -0.353325 5.282185 0.383924
+v -0.353981 5.305954 0.366126
+v -0.327147 5.273817 0.319644
+v -0.329817 5.233723 0.324269
+v -0.355397 5.262099 0.387395
+v -0.430051 5.578382 0.518505
+v -0.447425 5.549114 0.546120
+v -0.475286 5.605947 0.576250
+v -0.405364 5.569179 0.516700
+v -0.397915 5.557381 0.505116
+v -0.404709 5.520258 0.516126
+v -0.422737 5.539909 0.544316
+v -0.499055 5.320957 0.638594
+v -0.535398 5.339489 0.680374
+v -0.507431 5.365025 0.653102
+v -0.412768 5.612260 0.488568
+v -0.372525 5.719302 0.398247
+v -0.373767 5.662285 0.419698
+v -0.381912 5.504280 0.414508
+v -0.398352 5.538704 0.442984
+v -0.370495 5.570638 0.394731
+v -0.499635 5.561415 0.618426
+v -0.508026 5.613324 0.632962
+v -0.508370 5.311946 0.633556
+v -0.492216 5.308403 0.626747
+v -0.493339 5.297959 0.632222
+v -0.537791 5.463790 0.684520
+v -0.522511 5.511280 0.658051
+v -0.502953 5.424101 0.645345
+v -0.353430 5.643930 0.425428
+v -0.331319 5.648447 0.387801
+v -0.331711 5.629180 0.390644
+v -0.348935 5.625658 0.419515
+v -0.365992 5.601588 0.408102
+v -0.348767 5.605110 0.379232
+v -0.379706 5.349375 0.410686
+v -0.379050 5.325606 0.428484
+v -0.394418 5.371274 0.457295
+v -0.394209 5.235818 0.435809
+v -0.400463 5.243670 0.468757
+v -0.384261 5.255943 0.437394
+v -0.402685 5.219917 0.450490
+v -0.408847 5.197310 0.483738
+v -0.408939 5.227768 0.483438
+v -0.362226 5.186327 0.380407
+v -0.384566 5.146466 0.440277
+v -0.402250 5.170753 0.472310
+v -0.380716 5.217666 0.412436
+v -0.337648 5.144361 0.359336
+v -0.361644 5.136270 0.400570
+v -0.356960 5.425898 0.371285
+v -0.345360 5.445159 0.370380
+v -0.326882 5.412295 0.340390
+v -0.595512 5.668571 0.803127
+v -0.607367 5.651269 0.805039
+v -0.607250 5.655898 0.825723
+v -0.598086 5.675226 0.816268
+v -0.377545 5.438536 0.406943
+v -0.396719 5.483232 0.440156
+v -0.372023 5.494235 0.397377
+v -0.364270 5.473194 0.402759
+v -0.365946 5.457798 0.406038
+v -0.405419 5.547515 0.477158
+v -0.410062 5.515820 0.463269
+v -0.412214 5.510393 0.488167
+v -0.317148 5.472592 0.370586
+v -0.318122 5.465744 0.372272
+v -0.332563 5.459183 0.389171
+v -0.330887 5.474578 0.385894
+v -0.347668 5.520294 0.355191
+v -0.324754 5.520028 0.337519
+v -0.339916 5.499254 0.360573
+v -0.314814 5.482518 0.325587
+v -0.307338 5.501982 0.305390
+v -0.310426 5.503573 0.290681
+v -0.293800 5.495102 0.283053
+v -0.304091 5.476707 0.307013
+v -0.315788 5.475670 0.327273
+v -0.300152 5.484608 0.341146
+v -0.313891 5.486594 0.356454
+v -0.298731 5.507370 0.333398
+v -0.292676 5.504072 0.320950
+v -0.551934 5.497252 0.729354
+v -0.557556 5.525727 0.739928
+v -0.566630 5.572126 0.734474
+v -0.545860 5.588543 0.698497
+v -0.312110 5.362868 0.314802
+v -0.342188 5.376470 0.345698
+v -0.261045 5.488284 0.267273
+v -0.271337 5.469887 0.291234
+v -0.561549 5.636914 0.746844
+v -0.541773 5.656149 0.753547
+v -0.517180 5.659646 0.709613
+v -0.536956 5.640411 0.702910
+v -0.575194 5.701816 0.817571
+v -0.572619 5.695159 0.804430
+v -0.599945 5.667114 0.854028
+v -0.590782 5.686442 0.844572
+v -0.545691 5.489536 0.759497
+v -0.551312 5.518014 0.770071
+v -0.545915 5.324542 0.719763
+v -0.562224 5.373504 0.748013
+v -0.550549 5.368674 0.706619
+v -0.461382 5.295666 0.614294
+v -0.462503 5.285222 0.619768
+v -0.517508 5.315813 0.649386
+v -0.351657 5.666801 0.382071
+v -0.322430 5.583147 0.334285
+v -0.319299 5.538089 0.328068
+v -0.342213 5.538355 0.345740
+v -0.346484 5.555797 0.353140
+v -0.292454 5.537968 0.322524
+v -0.296261 5.604552 0.329911
+v -0.291536 5.612298 0.317954
+v -0.286399 5.534671 0.310076
+v -0.393709 5.570402 0.456873
+v -0.379603 5.592010 0.473395
+v -0.387051 5.603806 0.484979
+v -0.410516 5.470294 0.485227
+v -0.408365 5.475719 0.460328
+v -0.389190 5.431025 0.427114
+v -0.368667 5.316366 0.451458
+v -0.384034 5.362035 0.480269
+v -0.356438 5.267126 0.430156
+v -0.354366 5.287212 0.426686
+v -0.390883 5.253418 0.493123
+v -0.374683 5.265692 0.461759
+v -0.402670 5.194917 0.513999
+v -0.402762 5.225375 0.513699
+v -0.371151 5.122450 0.457998
+v -0.388834 5.146736 0.490031
+v -0.319051 5.118040 0.368082
+v -0.343047 5.109948 0.409317
+v -0.305642 5.201977 0.303960
+v -0.299758 5.274145 0.293373
+v -0.300008 5.417790 0.334800
+v -0.318488 5.450655 0.364790
+v -0.477893 5.486811 0.601936
+v -0.499566 5.662618 0.638143
+v -0.367753 5.773489 0.411153
+v -0.352298 5.715039 0.363210
+v -0.326434 5.767262 0.339580
+v -0.297681 5.531240 0.268604
+v -0.279130 5.519274 0.257641
+v -0.308179 5.628274 0.305824
+v -0.299819 5.608974 0.272307
+v -0.296517 5.533141 0.286647
+v -0.304412 5.657471 0.280263
+v -0.288962 5.721624 0.274672
+v -0.269194 5.652568 0.240430
+v -0.544402 5.424644 0.695972
+v -0.581067 5.556879 0.759482
+v -0.590179 5.550106 0.796350
+v -0.592112 5.590698 0.778615
+v -0.609333 5.590175 0.829968
+v -0.606190 5.634236 0.802999
+v -0.612520 5.632510 0.834851
+v -0.587888 5.657892 0.789921
+v -0.304046 5.457216 0.347891
+v -0.292349 5.458251 0.327632
+v -0.208518 5.486310 0.278990
+v -0.265414 5.577381 0.233882
+v -0.561236 5.448348 0.745466
+v -0.498599 5.297311 0.641334
+v -0.516087 5.301105 0.668095
+v -0.243059 5.517920 0.236117
+v -0.228542 5.582496 0.210971
+v -0.233158 5.666270 0.218966
+v -0.255493 5.742265 0.257656
+v -0.297480 5.792035 0.330384
+v -0.343174 5.797686 0.409536
+v -0.486010 5.676223 0.655621
+v -0.571427 5.679368 0.802365
+v -0.605947 5.640802 0.864426
+v -0.604608 5.591613 0.862743
+v -0.587911 5.544410 0.833382
+v -0.552899 5.442576 0.771984
+v -0.553448 5.360417 0.773771
+v -0.534931 5.306975 0.741696
+v -0.501569 5.281743 0.683906
+v -0.469766 5.311057 0.628817
+v -0.478803 5.360498 0.644471
+v -0.473439 5.426218 0.635179
+v -0.445061 5.495645 0.586023
+v -0.402627 5.471096 0.512520
+v -0.279566 5.179461 0.299751
+v -0.268490 5.259162 0.280168
+v -0.281423 5.356741 0.302607
+v -0.190532 5.515944 0.247835
+v -0.429282 5.464243 0.707915
+v -0.397417 5.464243 0.726313
+v -0.684420 5.123801 1.243417
+v -0.733891 5.123511 1.215444
+v -0.852034 5.069855 1.412230
+v -0.796026 5.069851 1.444567
+v -0.856310 5.091953 1.556943
+v -0.919791 5.091958 1.520291
+v -0.984586 5.160743 1.623505
+v -0.913671 5.160740 1.664454
+v -0.951186 5.157276 1.647560
+v -1.036891 5.269464 1.704924
+v -0.957932 5.269464 1.750519
+v -1.000224 5.267411 1.732612
+v -1.059154 5.441407 1.738444
+v -0.975884 5.441407 1.786527
+v -1.020675 5.441407 1.767973
+v -0.995762 5.441407 1.860711
+v -1.113466 5.441407 1.792745
+v -1.005703 5.479807 1.897802
+v -1.140623 5.479807 1.819893
+v -0.989136 5.531006 1.835983
+v -1.095362 5.531006 1.774645
+v -0.964287 5.569407 1.743254
+v -1.027472 5.569407 1.706770
+v -0.977541 5.595008 1.792709
+v -1.063681 5.595008 1.742970
+v -0.992449 5.665406 1.848347
+v -1.104413 5.665406 1.783694
+v -1.000732 5.665406 1.879256
+v -1.127044 5.665406 1.806318
+v -1.000732 5.697407 1.879256
+v -1.127044 5.697407 1.806318
+v -0.384174 5.470578 0.737653
+v -0.373973 5.480661 0.749420
+v -0.648450 5.148871 1.279562
+v -0.744723 5.101691 1.467707
+v -0.792184 5.123687 1.572812
+v -0.836586 5.187052 1.672749
+v -0.868147 5.285051 1.752901
+v -0.879747 5.441407 1.786530
+v -0.859872 5.441407 1.860714
+v -0.849934 5.479807 1.897806
+v -0.866497 5.531006 1.835986
+v -0.891341 5.569407 1.743257
+v -0.878091 5.595008 1.792713
+v -0.863184 5.665406 1.848351
+v -0.854903 5.665406 1.879260
+v -0.854903 5.697407 1.879260
+v -0.734724 5.077298 1.335562
+v -0.691110 5.107703 1.367139
+v -0.668878 5.160480 1.390473
+v -0.711860 5.156838 1.475450
+v -0.744582 5.178650 1.563653
+v -0.773976 5.232628 1.646180
+v -0.791580 5.312052 1.711448
+v -0.796489 5.441407 1.738465
+v -0.742185 5.441407 1.792774
+v -0.715033 5.479807 1.819926
+v -0.760285 5.531006 1.774671
+v -0.828165 5.569407 1.706784
+v -0.791964 5.595008 1.742991
+v -0.751235 5.665406 1.783722
+v -0.728609 5.665406 1.806350
+v -0.728609 5.697407 1.806350
+v -0.674126 5.221419 1.399565
+v -0.706243 5.220516 1.465726
+v -0.726257 5.242119 1.531918
+v -0.742613 5.285254 1.591866
+v -0.748745 5.343229 1.637263
+v -0.748417 5.441407 1.655210
+v -0.674235 5.441407 1.675092
+v -0.637143 5.479807 1.685033
+v -0.698961 5.531006 1.668464
+v -0.791690 5.569407 1.643613
+v -0.742234 5.595008 1.656867
+v -0.686598 5.665406 1.671777
+v -0.655689 5.665406 1.680062
+v -0.655689 5.697407 1.680062
+v -0.705449 5.274195 1.391981
+v -0.729377 5.275664 1.441139
+v -0.742121 5.297085 1.486113
+v -0.750904 5.330832 1.524358
+v -0.751121 5.370231 1.550228
+v -0.748412 5.441407 1.559074
+v -0.674228 5.441407 1.539200
+v -0.637136 5.479807 1.529264
+v -0.698955 5.531006 1.545825
+v -0.791687 5.569407 1.570667
+v -0.742229 5.595008 1.557417
+v -0.686592 5.665406 1.542514
+v -0.655681 5.665406 1.534232
+v -0.655681 5.697407 1.534232
+v -0.754723 5.304605 1.370238
+v -0.775065 5.307508 1.408277
+v -0.787921 5.328821 1.438510
+v -0.796624 5.357145 1.461746
+v -0.798071 5.385822 1.473660
+v -0.796475 5.441407 1.475814
+v -0.742165 5.441407 1.421512
+v -0.715010 5.479807 1.394360
+v -0.760268 5.531006 1.439612
+v -0.828154 5.569407 1.507490
+v -0.805761 5.569407 1.536678
+v -0.791949 5.595008 1.471288
+v -0.751217 5.665406 1.430561
+v -0.728589 5.665406 1.407937
+v -0.728589 5.697407 1.407937
+v -0.808004 5.304673 1.338829
+v -0.831063 5.307511 1.375943
+v -0.851389 5.328824 1.401864
+v -0.867526 5.357148 1.420805
+v -0.877015 5.385825 1.428075
+v -0.879729 5.441407 1.427739
+v -0.859846 5.441407 1.353558
+v -0.849905 5.479807 1.316468
+v -0.866473 5.531006 1.378286
+v -0.891328 5.569407 1.471013
+v -0.878071 5.595008 1.421558
+v -0.863160 5.665406 1.365921
+v -0.854875 5.665406 1.335012
+v -0.854875 5.697407 1.335012
+v -0.851760 5.274205 1.307507
+v -0.882366 5.275675 1.352804
+v -0.915516 5.297095 1.385993
+v -0.944611 5.330838 1.412507
+v -0.966799 5.370237 1.425687
+v -0.922064 5.379807 1.421152
+v -0.975864 5.441407 1.427731
+v -0.995736 5.441407 1.353546
+v -1.005671 5.479807 1.316454
+v -0.989112 5.531006 1.378275
+v -0.964274 5.569407 1.471006
+v -0.977521 5.595008 1.421551
+v -0.992424 5.665406 1.365912
+v -1.000703 5.665406 1.335002
+v -1.000703 5.697407 1.335002
+v -0.460214 5.586796 0.761511
+v -0.483658 5.570380 0.738402
+v -0.817895 5.287472 1.262542
+v -0.781677 5.312833 1.298240
+v -0.831413 5.243540 1.229121
+v -0.873993 5.221431 1.284170
+v -0.915231 5.220531 1.345057
+v -0.963121 5.242130 1.395151
+v -1.007223 5.285265 1.439072
+v -1.043369 5.343235 1.467137
+v -1.059125 5.441407 1.475793
+v -1.113426 5.441407 1.421481
+v -1.140577 5.479807 1.394328
+v -1.095326 5.531006 1.439586
+v -1.027450 5.569407 1.507474
+v -1.063651 5.595008 1.471268
+v -1.104375 5.665406 1.430534
+v -1.127003 5.665406 1.407905
+v -1.127003 5.697407 1.407905
+v -0.818610 5.192812 1.206938
+v -0.868748 5.160491 1.275075
+v -0.920852 5.156850 1.354783
+v -0.981449 5.178664 1.426882
+v -1.038591 5.232639 1.493383
+v -1.086208 5.312058 1.541319
+v -1.107203 5.441407 1.559044
+v -1.181383 5.441407 1.539160
+v -1.218475 5.479807 1.529217
+v -1.156656 5.531006 1.545789
+v -1.063930 5.569407 1.570644
+v -1.113384 5.595008 1.557388
+v -1.169020 5.665406 1.542474
+v -1.199928 5.665406 1.534189
+v -1.199928 5.697407 1.534189
+v -0.782915 5.148880 1.201931
+v -0.837429 5.107712 1.282659
+v -0.897720 5.101700 1.379368
+v -0.965589 5.123696 1.472686
+v -1.030305 5.187061 1.560890
+v -1.083836 5.285056 1.628354
+v -1.107211 5.441407 1.655181
+v -1.181399 5.441407 1.675052
+v -1.218489 5.479807 1.684986
+v -1.156670 5.531006 1.668428
+v -1.063938 5.569407 1.643591
+v -1.113395 5.595008 1.656838
+v -1.169034 5.665406 1.671740
+v -1.199944 5.665406 1.680019
+v -1.199944 5.697407 1.680019
+v -0.788428 5.077236 1.304889
+v -1.049863 5.569407 1.677581
+v -0.461015 5.480664 0.699167
+v -0.484121 5.509104 0.702409
+v -0.492409 5.541945 0.716769
+v -0.732963 5.312378 1.327555
+v -0.428355 5.586796 0.779903
+v -0.683437 5.287462 1.340168
+v -0.396621 5.570374 0.788652
+v -0.647740 5.243531 1.335163
+v -0.373513 5.541935 0.785412
+v -0.634934 5.192803 1.312981
+v -0.365224 5.509098 0.771053
+v -0.255882 6.871280 0.000000
+v -0.255882 6.823281 0.000000
+v -0.207882 6.815281 0.000000
+v -0.175883 6.775281 0.000000
+v -0.111882 6.751280 0.000000
+v -0.143882 6.727280 0.000000
+v -0.135882 6.671281 0.000000
+v -0.143882 6.607280 0.000000
+v -0.175883 6.535279 0.000000
+v -0.239882 6.479280 0.000000
+v -0.239882 6.439281 0.000000
+v -0.307844 6.439281 0.000000
+v -0.331844 6.391280 0.000000
+v -0.283844 6.359281 0.000000
+v -0.227844 6.287280 0.000000
+v -0.179844 6.135281 0.000000
+v -0.171844 5.991281 0.000000
+v -0.243844 5.991281 0.000000
+v -0.243844 5.927280 0.000000
+v -0.187844 5.927280 0.000000
+v -0.187844 5.847281 0.000000
+v -0.239774 5.847281 0.000000
+v -0.295774 5.791280 0.000000
+v -0.295774 5.023280 0.000000
+v -0.351774 5.023280 0.000000
+v -0.399774 4.967279 0.000000
+v -0.401771 4.865267 0.000000
+v -0.355758 4.767281 0.000000
+v -0.411919 -0.855625 0.000000
+v -0.525026 -0.855625 0.000000
+v -0.581026 -0.903625 0.000000
+v -0.581026 -1.079625 0.000000
+v -0.541026 -1.127625 0.000000
+v -0.449117 -1.127625 0.000000
+v -0.425117 -1.183625 0.000000
+v -0.441708 -1.365037 0.000000
+v -0.511333 -1.530860 0.000000
+v -0.564391 -1.673745 0.000000
+v -0.660251 -1.819721 0.000000
+v -0.932420 -1.996708 0.000000
+v -1.076103 -2.040090 0.000000
+v -1.100103 -2.072090 0.000000
+v -1.100103 -2.128090 0.000000
+v -1.076103 -2.160089 0.000000
+v -1.012103 -2.192089 0.000000
+v -1.004103 -2.256090 0.000000
+v -1.028103 -2.356090 0.000000
+v -1.108103 -2.524090 0.000000
+v -1.192103 -2.600090 0.000000
+v -1.256103 -2.602085 0.000000
+v -1.304103 -2.642078 0.000000
+v -1.304103 -2.728091 0.000000
+v -1.272103 -2.760090 0.000000
+v -1.224103 -2.760090 0.000000
+v -1.224103 -3.284090 0.000000
+v -1.182394 -3.284090 0.316816
+v -1.182394 -2.760090 0.316816
+v -1.228759 -2.760090 0.329239
+v -1.259668 -2.728091 0.337521
+v -1.259668 -2.642078 0.337521
+v -1.213304 -2.602085 0.325098
+v -1.151484 -2.600090 0.308534
+v -1.070347 -2.524090 0.286793
+v -0.993072 -2.356090 0.266088
+v -0.969890 -2.256090 0.259877
+v -0.977618 -2.192089 0.261947
+v -1.039437 -2.160089 0.278511
+v -1.062619 -2.128090 0.284723
+v -1.062619 -2.072090 0.284723
+v -1.039437 -2.040090 0.278511
+v -0.900649 -1.996708 0.241324
+v -0.637754 -1.819721 0.170883
+v -0.545161 -1.673745 0.146073
+v -0.493910 -1.530860 0.132340
+v -0.426657 -1.365037 0.114321
+v -0.410632 -1.183625 0.110027
+v -0.433814 -1.127625 0.116238
+v -0.522592 -1.127625 0.140026
+v -0.561229 -1.079625 0.150378
+v -0.561229 -0.903625 0.150378
+v -0.507137 -0.855625 0.135884
+v -0.397884 -0.855625 0.106611
+v -0.386152 4.967279 0.103467
+v -0.131252 6.671281 0.035168
+v -0.108070 6.751280 0.028957
+v -1.060110 -3.284090 0.612042
+v -1.060110 -2.760090 0.612042
+v -1.101679 -2.760090 0.636042
+v -1.129392 -2.728091 0.652042
+v -1.129392 -2.642078 0.652042
+v -1.087823 -2.602085 0.628042
+v -1.032397 -2.600090 0.596043
+v -0.959650 -2.524090 0.554043
+v -0.890368 -2.356090 0.514044
+v -0.869583 -2.256090 0.502044
+v -0.876511 -2.192089 0.506044
+v -0.931937 -2.160089 0.538043
+v -0.952722 -2.128090 0.550043
+v -0.952722 -2.072090 0.550043
+v -0.931937 -2.040090 0.538043
+v -0.807503 -1.996708 0.466203
+v -0.571797 -1.819721 0.330120
+v -0.488780 -1.673745 0.282191
+v -0.442829 -1.530860 0.255662
+v -0.382532 -1.365037 0.220851
+v -0.368164 -1.183625 0.212555
+v -0.388949 -1.127625 0.224555
+v -0.468545 -1.127625 0.270509
+v -0.503186 -1.079625 0.290509
+v -0.503186 -0.903625 0.290509
+v -0.454688 -0.855625 0.262509
+v -0.356734 -0.855625 0.205956
+v -0.308097 4.767281 0.177876
+v -0.347946 4.865267 0.200882
+v -0.346216 4.967279 0.199884
+v -0.304647 5.023280 0.175884
+v -0.256149 5.023280 0.147885
+v -0.256149 5.791280 0.147885
+v -0.207651 5.847281 0.119885
+v -0.162678 5.847281 0.093921
+v -0.162678 5.927280 0.093921
+v -0.211176 5.927280 0.121920
+v -0.211176 5.991281 0.121920
+v -0.148822 5.991281 0.085921
+v -0.155750 6.135281 0.089921
+v -0.197320 6.287280 0.113920
+v -0.245817 6.359281 0.141920
+v -0.287387 6.391280 0.165919
+v -0.266602 6.439281 0.153920
+v -0.207745 6.439281 0.119939
+v -0.207745 6.479280 0.119939
+v -0.152320 6.535279 0.087940
+v -0.124606 6.607280 0.071940
+v -0.117678 6.671281 0.067940
+v -0.124606 6.727280 0.071940
+v -0.096893 6.751280 0.055940
+v -0.152320 6.775281 0.087940
+v -0.180032 6.815281 0.103939
+v -0.221601 6.823281 0.127939
+v -0.221601 6.871280 0.127939
+v -0.865583 -3.284090 0.865560
+v -0.865583 -2.760090 0.865560
+v -0.899524 -2.760090 0.899501
+v -0.922152 -2.728091 0.922128
+v -0.922152 -2.642078 0.922128
+v -0.888211 -2.602085 0.888187
+v -0.842955 -2.600090 0.842933
+v -0.783557 -2.524090 0.783537
+v -0.726988 -2.356090 0.726969
+v -0.710017 -2.256090 0.709999
+v -0.715674 -2.192089 0.715655
+v -0.760930 -2.160089 0.760910
+v -0.777901 -2.128090 0.777880
+v -0.777901 -2.072090 0.777880
+v -0.760930 -2.040090 0.760910
+v -0.659329 -1.996708 0.659312
+v -0.466874 -1.819721 0.466862
+v -0.399090 -1.673745 0.399080
+v -0.361571 -1.530860 0.361562
+v -0.312339 -1.365037 0.312330
+v -0.300607 -1.183625 0.300599
+v -0.317578 -1.127625 0.317569
+v -0.382568 -1.127625 0.382558
+v -0.410853 -1.079625 0.410842
+v -0.410853 -0.903625 0.410842
+v -0.371254 -0.855625 0.371245
+v -0.291275 -0.855625 0.291267
+v -0.132827 5.927280 0.132824
+v -0.172426 5.927280 0.172421
+v -0.161112 6.287280 0.161108
+v -0.200711 6.359281 0.200705
+v -0.234652 6.391280 0.234646
+v -0.101741 6.727280 0.101739
+v -0.079114 6.751280 0.079111
+v -0.612070 -3.284090 1.060094
+v -0.612070 -2.760090 1.060094
+v -0.636071 -2.760090 1.101662
+v -0.652071 -2.728091 1.129375
+v -0.652071 -2.642078 1.129375
+v -0.628071 -2.602085 1.087806
+v -0.596070 -2.600090 1.032381
+v -0.554068 -2.524090 0.959636
+v -0.514067 -2.356090 0.890354
+v -0.502067 -2.256090 0.869570
+v -0.506067 -2.192089 0.876498
+v -0.538068 -2.160089 0.931923
+v -0.550068 -2.128090 0.952708
+v -0.550068 -2.072090 0.952708
+v -0.538068 -2.040090 0.931923
+v -0.466224 -1.996708 0.807491
+v -0.330135 -1.819721 0.571788
+v -0.282204 -1.673745 0.488772
+v -0.255674 -1.530860 0.442823
+v -0.220861 -1.365037 0.382526
+v -0.212565 -1.183625 0.368158
+v -0.224565 -1.127625 0.388943
+v -0.270521 -1.127625 0.468538
+v -0.290522 -1.079625 0.503178
+v -0.290522 -0.903625 0.503178
+v -0.262521 -0.855625 0.454681
+v -0.205966 -0.855625 0.356729
+v -0.177884 4.767281 0.308092
+v -0.200892 4.865267 0.347940
+v -0.199893 4.967279 0.346211
+v -0.175892 5.023280 0.304642
+v -0.147891 5.023280 0.256145
+v -0.147891 5.791280 0.256145
+v -0.119891 5.847281 0.207648
+v -0.093925 5.847281 0.162676
+v -0.093925 5.927280 0.162676
+v -0.121926 5.927280 0.211173
+v -0.121926 5.991281 0.211173
+v -0.085925 5.991281 0.148820
+v -0.089925 6.135281 0.155748
+v -0.113925 6.287280 0.197317
+v -0.141926 6.359281 0.245814
+v -0.165927 6.391280 0.287382
+v -0.153927 6.439281 0.266598
+v -0.119945 6.439281 0.207742
+v -0.119945 6.479280 0.207742
+v -0.087944 6.535279 0.152318
+v -0.071943 6.607280 0.124604
+v -0.067943 6.671281 0.117676
+v -0.071943 6.727280 0.124604
+v -0.055943 6.751280 0.096892
+v -0.087944 6.775281 0.152318
+v -0.103944 6.815281 0.180029
+v -0.127945 6.823281 0.221598
+v -0.127945 6.871280 0.221598
+v -0.316847 -3.284090 1.182386
+v -0.316847 -2.760090 1.182386
+v -0.329271 -2.760090 1.228750
+v -0.337554 -2.728091 1.259659
+v -0.337554 -2.642078 1.259659
+v -0.325130 -2.602085 1.213295
+v -0.308564 -2.600090 1.151476
+v -0.286822 -2.524090 1.070339
+v -0.266114 -2.356090 0.993065
+v -0.259902 -2.256090 0.969883
+v -0.261973 -2.192089 0.977611
+v -0.278539 -2.160089 1.039430
+v -0.284751 -2.128090 1.062612
+v -0.284751 -2.072090 1.062612
+v -0.278539 -2.040090 1.039430
+v -0.241348 -1.996708 0.900643
+v -0.170899 -1.819721 0.637750
+v -0.146087 -1.673745 0.545157
+v -0.132353 -1.530860 0.493906
+v -0.114332 -1.365037 0.426654
+v -0.110037 -1.183625 0.410629
+v -0.116250 -1.127625 0.433811
+v -0.140039 -1.127625 0.522588
+v -0.150393 -1.079625 0.561225
+v -0.150393 -0.903625 0.561225
+v -0.135898 -0.855625 0.507133
+v -0.106621 -0.855625 0.397881
+v -0.092084 4.767281 0.343634
+v -0.091053 5.023280 0.339786
+v -0.037242 6.727280 0.138978
+v -0.028960 6.751280 0.108069
+v -0.000032 -3.284090 1.224103
+v -0.000032 -2.760090 1.224103
+v -0.000033 -2.760090 1.272103
+v -0.000034 -2.728091 1.304103
+v -0.000034 -2.642078 1.304103
+v -0.000033 -2.602085 1.256103
+v -0.000031 -2.600090 1.192103
+v -0.000029 -2.524090 1.108103
+v -0.000027 -2.356090 1.028103
+v -0.000026 -2.256090 1.004103
+v -0.000027 -2.192089 1.012103
+v -0.000028 -2.160089 1.076103
+v -0.000029 -2.128090 1.100103
+v -0.000029 -2.072090 1.100103
+v -0.000028 -2.040090 1.076103
+v -0.000025 -1.996708 0.932420
+v -0.000017 -1.819721 0.660251
+v -0.000015 -1.673745 0.564391
+v -0.000013 -1.530860 0.511333
+v -0.000012 -1.365037 0.441708
+v -0.000011 -1.183625 0.425117
+v -0.000012 -1.127625 0.449117
+v -0.000014 -1.127625 0.541026
+v -0.000015 -1.079625 0.581026
+v -0.000015 -0.903625 0.581026
+v -0.000014 -0.855625 0.525026
+v -0.000011 -0.855625 0.411919
+v -0.000009 4.767281 0.355758
+v -0.000011 4.865267 0.401771
+v -0.000011 4.967279 0.399774
+v -0.000009 5.023280 0.351774
+v -0.000008 5.023280 0.295774
+v -0.000008 5.791280 0.295774
+v -0.000006 5.847281 0.239774
+v -0.000005 5.847281 0.187844
+v -0.000005 5.927280 0.187844
+v -0.000006 5.927280 0.243844
+v -0.000006 5.991281 0.243844
+v -0.000005 5.991281 0.171844
+v -0.000005 6.135281 0.179844
+v -0.000006 6.287280 0.227844
+v -0.000007 6.359281 0.283844
+v -0.000009 6.391280 0.331844
+v -0.000008 6.439281 0.307844
+v -0.000006 6.439281 0.239882
+v -0.000006 6.479280 0.239882
+v -0.000005 6.535279 0.175883
+v -0.000004 6.607280 0.143882
+v -0.000004 6.671281 0.135882
+v -0.000004 6.727280 0.143882
+v -0.000003 6.751280 0.111882
+v -0.000005 6.775281 0.175883
+v -0.000005 6.815281 0.207882
+v -0.000007 6.823281 0.255882
+v -0.000007 6.871280 0.255882
+v 0.316785 -3.284090 1.182402
+v 0.316785 -2.760090 1.182402
+v 0.329207 -2.760090 1.228767
+v 0.337488 -2.728091 1.259677
+v 0.337488 -2.642078 1.259677
+v 0.325066 -2.602085 1.213312
+v 0.308504 -2.600090 1.151493
+v 0.286765 -2.524090 1.070354
+v 0.266062 -2.356090 0.993079
+v 0.259851 -2.256090 0.969897
+v 0.261921 -2.192089 0.977624
+v 0.278484 -2.160089 1.039444
+v 0.284695 -2.128090 1.062627
+v 0.284695 -2.072090 1.062627
+v 0.278484 -2.040090 1.039444
+v 0.241300 -1.996708 0.900656
+v 0.170866 -1.819721 0.637759
+v 0.146058 -1.673745 0.545165
+v 0.132327 -1.530860 0.493913
+v 0.114309 -1.365037 0.426660
+v 0.110016 -1.183625 0.410635
+v 0.116227 -1.127625 0.433817
+v 0.140012 -1.127625 0.522595
+v 0.150363 -1.079625 0.561233
+v 0.150363 -0.903625 0.561233
+v 0.135871 -0.855625 0.507140
+v 0.106600 -0.855625 0.397886
+v 0.092066 4.767281 0.343639
+v 0.612014 -3.284090 1.060126
+v 0.612014 -2.760090 1.060126
+v 0.636013 -2.760090 1.101696
+v 0.652012 -2.728091 1.129409
+v 0.652012 -2.642078 1.129409
+v 0.628013 -2.602085 1.087839
+v 0.596015 -2.600090 1.032412
+v 0.554018 -2.524090 0.959665
+v 0.514020 -2.356090 0.890381
+v 0.502021 -2.256090 0.869596
+v 0.506021 -2.192089 0.876525
+v 0.538019 -2.160089 0.931951
+v 0.550018 -2.128090 0.952736
+v 0.550018 -2.072090 0.952736
+v 0.538019 -2.040090 0.931951
+v 0.466182 -1.996708 0.807515
+v 0.330105 -1.819721 0.571806
+v 0.282179 -1.673745 0.488787
+v 0.255651 -1.530860 0.442836
+v 0.220840 -1.365037 0.382538
+v 0.212546 -1.183625 0.368170
+v 0.224545 -1.127625 0.388955
+v 0.270497 -1.127625 0.468552
+v 0.290495 -1.079625 0.503193
+v 0.290495 -0.903625 0.503193
+v 0.262497 -0.855625 0.454695
+v 0.205947 -0.855625 0.356740
+v 0.177868 4.767281 0.308102
+v 0.200873 4.865267 0.347951
+v 0.199875 4.967279 0.346221
+v 0.175876 5.023280 0.304651
+v 0.147878 5.023280 0.256153
+v 0.147878 5.791280 0.256153
+v 0.119880 5.847281 0.207655
+v 0.093916 5.847281 0.162681
+v 0.093916 5.927280 0.162681
+v 0.121915 5.927280 0.211179
+v 0.121915 5.991281 0.211179
+v 0.085917 5.991281 0.148824
+v 0.089917 6.135281 0.155753
+v 0.113915 6.287280 0.197323
+v 0.141913 6.359281 0.245821
+v 0.165912 6.391280 0.287391
+v 0.153913 6.439281 0.266606
+v 0.119934 6.439281 0.207748
+v 0.119934 6.479280 0.207748
+v 0.087936 6.535279 0.152322
+v 0.071937 6.607280 0.124608
+v 0.067937 6.671281 0.117680
+v 0.071937 6.727280 0.124608
+v 0.055938 6.751280 0.096895
+v 0.087936 6.775281 0.152322
+v 0.103935 6.815281 0.180035
+v 0.127933 6.823281 0.221605
+v 0.127933 6.871280 0.221605
+v 0.865537 -3.284090 0.865606
+v 0.865537 -2.760090 0.865606
+v 0.899477 -2.760090 0.899548
+v 0.922104 -2.728091 0.922177
+v 0.922104 -2.642078 0.922177
+v 0.888164 -2.602085 0.888234
+v 0.842911 -2.600090 0.842978
+v 0.783516 -2.524090 0.783578
+v 0.726950 -2.356090 0.727007
+v 0.709980 -2.256090 0.710036
+v 0.715637 -2.192089 0.715693
+v 0.760890 -2.160089 0.760950
+v 0.777860 -2.128090 0.777921
+v 0.777860 -2.072090 0.777921
+v 0.760890 -2.040090 0.760950
+v 0.659294 -1.996708 0.659346
+v 0.466849 -1.819721 0.466886
+v 0.399069 -1.673745 0.399101
+v 0.361552 -1.530860 0.361581
+v 0.312322 -1.365037 0.312347
+v 0.300591 -1.183625 0.300615
+v 0.317561 -1.127625 0.317586
+v 0.382548 -1.127625 0.382578
+v 0.410831 -1.079625 0.410864
+v 0.410831 -0.903625 0.410864
+v 0.371235 -0.855625 0.371264
+v 0.291259 -0.855625 0.291282
+v 0.132821 5.927280 0.132831
+v 0.172417 5.927280 0.172431
+v 0.172417 5.991281 0.172431
+v 0.121507 5.991281 0.121517
+v 0.127164 6.135281 0.127174
+v 0.161104 6.287280 0.161116
+v 0.096079 6.671281 0.096087
+v 0.101736 6.727280 0.101744
+v 0.079109 6.751280 0.079116
+v 1.060077 -3.284090 0.612098
+v 1.060077 -2.760090 0.612098
+v 1.101646 -2.760090 0.636100
+v 1.129358 -2.728091 0.652101
+v 1.129358 -2.642078 0.652101
+v 1.087790 -2.602085 0.628099
+v 1.032365 -2.600090 0.596097
+v 0.959621 -2.524090 0.554094
+v 0.890341 -2.356090 0.514091
+v 0.869557 -2.256090 0.502090
+v 0.876485 -2.192089 0.506090
+v 0.931909 -2.160089 0.538092
+v 0.952693 -2.128090 0.550093
+v 0.952693 -2.072090 0.550093
+v 0.931909 -2.040090 0.538092
+v 0.807479 -1.996708 0.466245
+v 0.571779 -1.819721 0.330150
+v 0.488765 -1.673745 0.282217
+v 0.442816 -1.530860 0.255686
+v 0.382520 -1.365037 0.220871
+v 0.368153 -1.183625 0.212575
+v 0.388937 -1.127625 0.224576
+v 0.468530 -1.127625 0.270534
+v 0.503170 -1.079625 0.290535
+v 0.503170 -0.903625 0.290535
+v 0.454674 -0.855625 0.262533
+v 0.356723 -0.855625 0.205975
+v 0.308088 4.767281 0.177893
+v 0.347935 4.865267 0.200901
+v 0.346206 4.967279 0.199902
+v 0.304637 5.023280 0.175900
+v 0.256141 5.023280 0.147898
+v 0.256141 5.791280 0.147898
+v 0.207645 5.847281 0.119896
+v 0.162674 5.847281 0.093929
+v 0.162674 5.927280 0.093929
+v 0.211170 5.927280 0.121931
+v 0.211170 5.991281 0.121931
+v 0.148817 5.991281 0.085929
+v 0.155746 6.135281 0.089929
+v 0.197314 6.287280 0.113931
+v 0.245810 6.359281 0.141933
+v 0.287378 6.391280 0.165935
+v 0.266594 6.439281 0.153934
+v 0.207739 6.439281 0.119950
+v 0.207739 6.479280 0.119950
+v 0.152315 6.535279 0.087948
+v 0.124602 6.607280 0.071946
+v 0.117674 6.671281 0.067946
+v 0.124602 6.727280 0.071946
+v 0.096890 6.751280 0.055945
+v 0.152315 6.775281 0.087948
+v 0.180027 6.815281 0.103949
+v 0.221595 6.823281 0.127951
+v 0.221595 6.871280 0.127951
+v 1.182377 -3.284090 0.316878
+v 1.182377 -2.760090 0.316878
+v 1.228741 -2.760090 0.329304
+v 1.259650 -2.728091 0.337587
+v 1.259650 -2.642078 0.337587
+v 1.213287 -2.602085 0.325162
+v 1.151468 -2.600090 0.308595
+v 1.070332 -2.524090 0.286850
+v 0.993058 -2.356090 0.266141
+v 0.969876 -2.256090 0.259928
+v 0.977604 -2.192089 0.261999
+v 1.039422 -2.160089 0.278566
+v 1.062604 -2.128090 0.284779
+v 1.062604 -2.072090 0.284779
+v 1.039422 -2.040090 0.278566
+v 0.900637 -1.996708 0.241371
+v 0.637745 -1.819721 0.170916
+v 0.545153 -1.673745 0.146102
+v 0.493903 -1.530860 0.132366
+v 0.426651 -1.365037 0.114343
+v 0.410626 -1.183625 0.110048
+v 0.433808 -1.127625 0.116261
+v 0.522584 -1.127625 0.140053
+v 0.561221 -1.079625 0.150408
+v 0.561221 -0.903625 0.150408
+v 0.507130 -0.855625 0.135911
+v 0.397878 -0.855625 0.106632
+v 0.131250 6.671281 0.035175
+v 0.108068 6.751280 0.028962
+v 1.224103 -3.284090 0.000064
+v 1.224103 -2.760090 0.000064
+v 1.272103 -2.760090 0.000067
+v 1.304103 -2.728091 0.000069
+v 1.304103 -2.642078 0.000069
+v 1.256103 -2.602085 0.000066
+v 1.192103 -2.600090 0.000063
+v 1.108103 -2.524090 0.000058
+v 1.028103 -2.356090 0.000054
+v 1.004103 -2.256090 0.000053
+v 1.012103 -2.192089 0.000053
+v 1.076103 -2.160089 0.000057
+v 1.100103 -2.128090 0.000058
+v 1.100103 -2.072090 0.000058
+v 1.076103 -2.040090 0.000057
+v 0.932420 -1.996708 0.000049
+v 0.660251 -1.819721 0.000035
+v 0.564391 -1.673745 0.000030
+v 0.511333 -1.530860 0.000027
+v 0.441708 -1.365037 0.000023
+v 0.425117 -1.183625 0.000022
+v 0.449117 -1.127625 0.000024
+v 0.541026 -1.127625 0.000028
+v 0.581026 -1.079625 0.000031
+v 0.581026 -0.903625 0.000031
+v 0.525026 -0.855625 0.000028
+v 0.411919 -0.855625 0.000022
+v 0.355758 4.767281 0.000019
+v 0.401771 4.865267 0.000021
+v 0.399774 4.967279 0.000021
+v 0.351774 5.023280 0.000019
+v 0.295774 5.023280 0.000016
+v 0.295774 5.791280 0.000016
+v 0.239774 5.847281 0.000013
+v 0.187844 5.847281 0.000010
+v 0.187844 5.927280 0.000010
+v 0.243844 5.927280 0.000013
+v 0.243844 5.991281 0.000013
+v 0.171844 5.991281 0.000009
+v 0.179844 6.135281 0.000009
+v 0.227844 6.287280 0.000012
+v 0.283844 6.359281 0.000015
+v 0.331844 6.391280 0.000017
+v 0.307844 6.439281 0.000016
+v 0.239882 6.439281 0.000013
+v 0.239882 6.479280 0.000013
+v 0.175883 6.535279 0.000009
+v 0.143882 6.607280 0.000008
+v 0.135882 6.671281 0.000007
+v 0.143882 6.727280 0.000008
+v 0.111882 6.751280 0.000006
+v 0.175883 6.775281 0.000009
+v 0.207882 6.815281 0.000011
+v 0.255882 6.823281 0.000013
+v 0.255882 6.871280 0.000013
+v 1.182411 -3.284090 -0.316754
+v 1.182411 -2.760090 -0.316754
+v 1.228776 -2.760090 -0.329174
+v 1.259686 -2.728091 -0.337455
+v 1.259686 -2.642078 -0.337455
+v 1.213321 -2.602085 -0.325034
+v 1.151501 -2.600090 -0.308473
+v 1.070362 -2.524090 -0.286737
+v 0.993086 -2.356090 -0.266036
+v 0.969904 -2.256090 -0.259826
+v 0.977631 -2.192089 -0.261896
+v 1.039451 -2.160089 -0.278457
+v 1.062634 -2.128090 -0.284667
+v 1.062634 -2.072090 -0.284667
+v 1.039451 -2.040090 -0.278457
+v 0.900662 -1.996708 -0.241277
+v 0.637763 -1.819721 -0.170849
+v 0.545169 -1.673745 -0.146044
+v 0.493917 -1.530860 -0.132314
+v 0.426663 -1.365037 -0.114298
+v 0.410638 -1.183625 -0.110005
+v 0.433820 -1.127625 -0.116215
+v 0.522599 -1.127625 -0.139998
+v 0.561237 -1.079625 -0.150349
+v 0.561237 -0.903625 -0.150349
+v 0.507144 -0.855625 -0.135858
+v 0.397889 -0.855625 -0.106590
+v 0.138981 6.727280 -0.037231
+v 1.060142 -3.284090 -0.611986
+v 1.060142 -2.760090 -0.611986
+v 1.101713 -2.760090 -0.635984
+v 1.129426 -2.728091 -0.651982
+v 1.129426 -2.642078 -0.651982
+v 1.087856 -2.602085 -0.627985
+v 1.032428 -2.600090 -0.595988
+v 0.959679 -2.524090 -0.553992
+v 0.890395 -2.356090 -0.513997
+v 0.869610 -2.256090 -0.501998
+v 0.876538 -2.192089 -0.505998
+v 0.931966 -2.160089 -0.537994
+v 0.952751 -2.128090 -0.549993
+v 0.952751 -2.072090 -0.549993
+v 0.931966 -2.040090 -0.537994
+v 0.807528 -1.996708 -0.466160
+v 0.571814 -1.819721 -0.330090
+v 0.488795 -1.673745 -0.282166
+v 0.442843 -1.530860 -0.255639
+v 0.382544 -1.365037 -0.220830
+v 0.368175 -1.183625 -0.212536
+v 0.388961 -1.127625 -0.224535
+v 0.468559 -1.127625 -0.270484
+v 0.503201 -1.079625 -0.290482
+v 0.503201 -0.903625 -0.290482
+v 0.454702 -0.855625 -0.262485
+v 0.356745 -0.855625 -0.205938
+v 0.308106 4.767281 -0.177860
+v 0.347956 4.865267 -0.200864
+v 0.346227 4.967279 -0.199866
+v 0.304656 5.023280 -0.175868
+v 0.256157 5.023280 -0.147871
+v 0.256157 5.791280 -0.147871
+v 0.207658 5.847281 -0.119874
+v 0.162683 5.847281 -0.093912
+v 0.162683 5.927280 -0.093912
+v 0.211183 5.927280 -0.121909
+v 0.211183 5.991281 -0.121909
+v 0.148827 5.991281 -0.085913
+v 0.155755 6.135281 -0.089912
+v 0.197326 6.287280 -0.113910
+v 0.245825 6.359281 -0.141907
+v 0.287396 6.391280 -0.165904
+v 0.266610 6.439281 -0.153906
+v 0.207751 6.439281 -0.119928
+v 0.207751 6.479280 -0.119928
+v 0.152325 6.535279 -0.087932
+v 0.124610 6.607280 -0.071933
+v 0.117681 6.671281 -0.067934
+v 0.124610 6.727280 -0.071933
+v 0.096896 6.751280 -0.055935
+v 0.152325 6.775281 -0.087932
+v 0.180037 6.815281 -0.103930
+v 0.221608 6.823281 -0.127927
+v 0.221608 6.871280 -0.127927
+v 0.865629 -3.284090 -0.865515
+v 0.865629 -2.760090 -0.865515
+v 0.899572 -2.760090 -0.899453
+v 0.922201 -2.728091 -0.922079
+v 0.922201 -2.642078 -0.922079
+v 0.888258 -2.602085 -0.888140
+v 0.843000 -2.600090 -0.842889
+v 0.783599 -2.524090 -0.783496
+v 0.727027 -2.356090 -0.726931
+v 0.710055 -2.256090 -0.709961
+v 0.715712 -2.192089 -0.715618
+v 0.760970 -2.160089 -0.760870
+v 0.777942 -2.128090 -0.777839
+v 0.777942 -2.072090 -0.777839
+v 0.760970 -2.040090 -0.760870
+v 0.659364 -1.996708 -0.659277
+v 0.466899 -1.819721 -0.466837
+v 0.399111 -1.673745 -0.399059
+v 0.361591 -1.530860 -0.361543
+v 0.312355 -1.365037 -0.312314
+v 0.300623 -1.183625 -0.300583
+v 0.317595 -1.127625 -0.317553
+v 0.382588 -1.127625 -0.382538
+v 0.410874 -1.079625 -0.410820
+v 0.410874 -0.903625 -0.410820
+v 0.371274 -0.855625 -0.371225
+v 0.291290 -0.855625 -0.291252
+v 0.132835 5.927280 -0.132817
+v 0.101747 6.607280 -0.101733
+v 0.180948 6.823281 -0.180924
+v 0.612126 -3.284090 -1.060061
+v 0.612126 -2.760090 -1.060061
+v 0.636129 -2.760090 -1.101629
+v 0.652131 -2.728091 -1.129341
+v 0.652131 -2.642078 -1.129341
+v 0.628128 -2.602085 -1.087773
+v 0.596124 -2.600090 -1.032350
+v 0.554119 -2.524090 -0.959607
+v 0.514114 -2.356090 -0.890327
+v 0.502112 -2.256090 -0.869543
+v 0.506113 -2.192089 -0.876471
+v 0.538117 -2.160089 -0.931895
+v 0.550118 -2.128090 -0.952679
+v 0.550118 -2.072090 -0.952679
+v 0.538117 -2.040090 -0.931895
+v 0.466266 -1.996708 -0.807466
+v 0.330165 -1.819721 -0.571771
+v 0.282230 -1.673745 -0.488758
+v 0.255697 -1.530860 -0.442809
+v 0.220881 -1.365037 -0.382515
+v 0.212584 -1.183625 -0.368147
+v 0.224586 -1.127625 -0.388931
+v 0.270546 -1.127625 -0.468523
+v 0.290548 -1.079625 -0.503163
+v 0.290548 -0.903625 -0.503163
+v 0.262545 -0.855625 -0.454667
+v 0.205984 -0.855625 -0.356718
+v 0.177901 4.767281 -0.308083
+v 0.200910 4.865267 -0.347930
+v 0.199911 4.967279 -0.346200
+v 0.175908 5.023280 -0.304633
+v 0.147905 5.023280 -0.256137
+v 0.147905 5.791280 -0.256137
+v 0.119902 5.847281 -0.207642
+v 0.093933 5.847281 -0.162671
+v 0.093933 5.927280 -0.162671
+v 0.121937 5.927280 -0.211167
+v 0.121937 5.991281 -0.211167
+v 0.085932 5.991281 -0.148815
+v 0.089933 6.135281 -0.155743
+v 0.113936 6.287280 -0.197311
+v 0.141939 6.359281 -0.245806
+v 0.165942 6.391280 -0.287374
+v 0.153941 6.439281 -0.266590
+v 0.119956 6.439281 -0.207736
+v 0.119956 6.479280 -0.207736
+v 0.087952 6.535279 -0.152313
+v 0.071950 6.607280 -0.124600
+v 0.067949 6.671281 -0.117672
+v 0.071950 6.727280 -0.124600
+v 0.055948 6.751280 -0.096889
+v 0.087952 6.775281 -0.152313
+v 0.103954 6.815281 -0.180024
+v 0.127956 6.823281 -0.221591
+v 0.127956 6.871280 -0.221591
+v 0.316910 -3.284090 -1.182369
+v 0.316910 -2.760090 -1.182369
+v 0.329336 -2.760090 -1.228732
+v 0.337621 -2.728091 -1.259642
+v 0.337621 -2.642078 -1.259642
+v 0.325194 -2.602085 -1.213278
+v 0.308625 -2.600090 -1.151460
+v 0.286878 -2.524090 -1.070324
+v 0.266167 -2.356090 -0.993051
+v 0.259953 -2.256090 -0.969869
+v 0.262025 -2.192089 -0.977597
+v 0.278594 -2.160089 -1.039415
+v 0.284807 -2.128090 -1.062597
+v 0.284807 -2.072090 -1.062597
+v 0.278594 -2.040090 -1.039415
+v 0.241395 -1.996708 -0.900630
+v 0.170933 -1.819721 -0.637740
+v 0.146116 -1.673745 -0.545149
+v 0.132380 -1.530860 -0.493899
+v 0.114354 -1.365037 -0.426648
+v 0.110059 -1.183625 -0.410623
+v 0.116272 -1.127625 -0.433805
+v 0.140067 -1.127625 -0.522581
+v 0.150423 -1.079625 -0.561217
+v 0.150423 -0.903625 -0.561217
+v 0.135925 -0.855625 -0.507126
+v 0.106642 -0.855625 -0.397875
+v 0.000097 -3.284090 -1.224103
+v 0.000097 -2.760090 -1.224103
+v 0.000101 -2.760090 -1.272103
+v 0.000103 -2.728091 -1.304103
+v 0.000103 -2.642078 -1.304103
+v 0.000099 -2.602085 -1.256103
+v 0.000094 -2.600090 -1.192103
+v 0.000088 -2.524090 -1.108103
+v 0.000081 -2.356090 -1.028103
+v 0.000079 -2.256090 -1.004103
+v 0.000080 -2.192089 -1.012103
+v 0.000085 -2.160089 -1.076103
+v 0.000087 -2.128090 -1.100103
+v 0.000087 -2.072090 -1.100103
+v 0.000085 -2.040090 -1.076103
+v 0.000074 -1.996708 -0.932420
+v 0.000052 -1.819721 -0.660251
+v 0.000045 -1.673745 -0.564391
+v 0.000040 -1.530860 -0.511333
+v 0.000035 -1.365037 -0.441708
+v 0.000034 -1.183625 -0.425117
+v 0.000036 -1.127625 -0.449117
+v 0.000043 -1.127625 -0.541026
+v 0.000046 -1.079625 -0.581026
+v 0.000046 -0.903625 -0.581026
+v 0.000042 -0.855625 -0.525026
+v 0.000033 -0.855625 -0.411919
+v 0.000028 4.767281 -0.355758
+v 0.000032 4.865267 -0.401771
+v 0.000032 4.967279 -0.399774
+v 0.000028 5.023280 -0.351774
+v 0.000023 5.023280 -0.295774
+v 0.000023 5.791280 -0.295774
+v 0.000019 5.847281 -0.239774
+v 0.000015 5.847281 -0.187844
+v 0.000015 5.927280 -0.187844
+v 0.000019 5.927280 -0.243844
+v 0.000019 5.991281 -0.243844
+v 0.000014 5.991281 -0.171844
+v 0.000014 6.135281 -0.179844
+v 0.000018 6.287280 -0.227844
+v 0.000022 6.359281 -0.283844
+v 0.000026 6.391280 -0.331844
+v 0.000024 6.439281 -0.307844
+v 0.000019 6.439281 -0.239882
+v 0.000019 6.479280 -0.239882
+v 0.000014 6.535279 -0.175883
+v 0.000011 6.607280 -0.143882
+v 0.000011 6.671281 -0.135882
+v 0.000011 6.727280 -0.143882
+v 0.000009 6.751280 -0.111882
+v 0.000014 6.775281 -0.175883
+v 0.000016 6.815281 -0.207882
+v 0.000020 6.823281 -0.255882
+v 0.000020 6.871280 -0.255882
+v -0.316722 -3.284090 -1.182419
+v -0.316722 -2.760090 -1.182419
+v -0.329142 -2.760090 -1.228785
+v -0.337422 -2.728091 -1.259695
+v -0.337422 -2.642078 -1.259695
+v -0.325002 -2.602085 -1.213330
+v -0.308443 -2.600090 -1.151509
+v -0.286709 -2.524090 -1.070369
+v -0.266010 -2.356090 -0.993093
+v -0.259800 -2.256090 -0.969911
+v -0.261870 -2.192089 -0.977638
+v -0.278429 -2.160089 -1.039459
+v -0.284639 -2.128090 -1.062642
+v -0.284639 -2.072090 -1.062642
+v -0.278429 -2.040090 -1.039459
+v -0.241253 -1.996708 -0.900668
+v -0.170832 -1.819721 -0.637768
+v -0.146030 -1.673745 -0.545173
+v -0.132301 -1.530860 -0.493920
+v -0.114287 -1.365037 -0.426666
+v -0.109994 -1.183625 -0.410641
+v -0.116204 -1.127625 -0.433823
+v -0.139984 -1.127625 -0.522603
+v -0.150334 -1.079625 -0.561241
+v -0.150334 -0.903625 -0.561241
+v -0.135844 -0.855625 -0.507147
+v -0.106579 -0.855625 -0.397892
+v -0.037228 6.727280 -0.138982
+v -0.028948 6.751280 -0.108072
+v -0.611958 -3.284090 -1.060158
+v -0.611958 -2.760090 -1.060158
+v -0.635955 -2.760090 -1.101729
+v -0.651952 -2.728091 -1.129444
+v -0.651952 -2.642078 -1.129444
+v -0.627956 -2.602085 -1.087872
+v -0.595961 -2.600090 -1.032444
+v -0.553967 -2.524090 -0.959694
+v -0.513973 -2.356090 -0.890408
+v -0.501975 -2.256090 -0.869623
+v -0.505975 -2.192089 -0.876551
+v -0.537970 -2.160089 -0.931980
+v -0.549968 -2.128090 -0.952765
+v -0.549968 -2.072090 -0.952765
+v -0.537970 -2.040090 -0.931980
+v -0.466139 -1.996708 -0.807540
+v -0.330075 -1.819721 -0.571823
+v -0.282153 -1.673745 -0.488802
+v -0.255627 -1.530860 -0.442849
+v -0.220820 -1.365037 -0.382550
+v -0.212526 -1.183625 -0.368181
+v -0.224524 -1.127625 -0.388966
+v -0.270472 -1.127625 -0.468566
+v -0.290469 -1.079625 -0.503209
+v -0.290469 -0.903625 -0.503209
+v -0.262473 -0.855625 -0.454709
+v -0.205928 -0.855625 -0.356750
+v -0.177852 4.767281 -0.308111
+v -0.200855 4.865267 -0.347962
+v -0.199857 4.967279 -0.346232
+v -0.175860 5.023280 -0.304661
+v -0.147864 5.023280 -0.256161
+v -0.147864 5.791280 -0.256161
+v -0.119869 5.847281 -0.207661
+v -0.093908 5.847281 -0.162686
+v -0.093908 5.927280 -0.162686
+v -0.121903 5.927280 -0.211186
+v -0.121903 5.991281 -0.211186
+v -0.085909 5.991281 -0.148829
+v -0.089908 6.135281 -0.155757
+v -0.113905 6.287280 -0.197329
+v -0.141900 6.359281 -0.245829
+v -0.165897 6.391280 -0.287400
+v -0.153899 6.439281 -0.266614
+v -0.119923 6.439281 -0.207754
+v -0.119923 6.479280 -0.207754
+v -0.087928 6.535279 -0.152327
+v -0.071930 6.607280 -0.124612
+v -0.067931 6.671281 -0.117683
+v -0.071930 6.727280 -0.124612
+v -0.055932 6.751280 -0.096898
+v -0.087928 6.775281 -0.152327
+v -0.103925 6.815281 -0.180040
+v -0.127922 6.823281 -0.221612
+v -0.127922 6.871280 -0.221612
+v -0.865492 -3.284090 -0.865651
+v -0.865492 -2.760090 -0.865651
+v -0.899430 -2.760090 -0.899596
+v -0.922055 -2.728091 -0.922225
+v -0.922055 -2.642078 -0.922225
+v -0.888117 -2.602085 -0.888281
+v -0.842866 -2.600090 -0.843022
+v -0.783475 -2.524090 -0.783619
+v -0.726912 -2.356090 -0.727046
+v -0.709943 -2.256090 -0.710073
+v -0.715599 -2.192089 -0.715731
+v -0.760850 -2.160089 -0.760990
+v -0.777819 -2.128090 -0.777962
+v -0.777819 -2.072090 -0.777962
+v -0.760850 -2.040090 -0.760990
+v -0.659259 -1.996708 -0.659381
+v -0.466825 -1.819721 -0.466911
+v -0.399048 -1.673745 -0.399122
+v -0.361533 -1.530860 -0.361600
+v -0.312306 -1.365037 -0.312363
+v -0.300575 -1.183625 -0.300631
+v -0.317544 -1.127625 -0.317603
+v -0.382528 -1.127625 -0.382598
+v -0.410810 -1.079625 -0.410885
+v -0.410810 -0.903625 -0.410885
+v -0.371215 -0.855625 -0.371284
+v -0.291244 -0.855625 -0.291298
+v -0.251536 4.767281 -0.251582
+v -0.284069 4.865267 -0.284121
+v -0.132814 5.847281 -0.132838
+v -0.132814 5.927280 -0.132838
+v -0.172408 5.927280 -0.172440
+v -0.121501 5.991281 -0.121523
+v -0.127157 6.135281 -0.127181
+v -0.161095 6.287280 -0.161125
+v -0.200690 6.359281 -0.200727
+v -0.169607 6.439281 -0.169638
+v -0.124357 6.535279 -0.124380
+v -0.101731 6.607280 -0.101749
+v -0.096074 6.671281 -0.096092
+v -0.101731 6.727280 -0.101749
+v -0.079105 6.751280 -0.079120
+v -0.124357 6.775281 -0.124380
+v -0.146981 6.815281 -0.147008
+v -0.180919 6.871280 -0.180953
+v -1.060045 -3.284090 -0.612154
+v -1.060045 -2.760090 -0.612154
+v -1.101612 -2.760090 -0.636158
+v -1.129323 -2.728091 -0.652160
+v -1.129323 -2.642078 -0.652160
+v -1.087757 -2.602085 -0.628156
+v -1.032334 -2.600090 -0.596151
+v -0.959592 -2.524090 -0.554144
+v -0.890314 -2.356090 -0.514137
+v -0.869530 -2.256090 -0.502135
+v -0.876458 -2.192089 -0.506136
+v -0.931881 -2.160089 -0.538141
+v -0.952664 -2.128090 -0.550143
+v -0.952664 -2.072090 -0.550143
+v -0.931881 -2.040090 -0.538141
+v -0.807454 -1.996708 -0.466288
+v -0.571762 -1.819721 -0.330181
+v -0.488750 -1.673745 -0.282243
+v -0.442802 -1.530860 -0.255709
+v -0.382509 -1.365037 -0.220891
+v -0.368142 -1.183625 -0.212594
+v -0.388925 -1.127625 -0.224596
+v -0.468516 -1.127625 -0.270558
+v -0.503155 -1.079625 -0.290562
+v -0.503155 -0.903625 -0.290562
+v -0.454661 -0.855625 -0.262557
+v -0.356712 -0.855625 -0.205994
+v -0.308078 4.767281 -0.177909
+v -0.347925 4.865267 -0.200919
+v -0.346195 4.967279 -0.199920
+v -0.304628 5.023280 -0.175916
+v -0.256134 5.023280 -0.147912
+v -0.256134 5.791280 -0.147912
+v -0.207639 5.847281 -0.119907
+v -0.162669 5.847281 -0.093938
+v -0.162669 5.927280 -0.093938
+v -0.211163 5.927280 -0.121942
+v -0.211163 5.991281 -0.121942
+v -0.148813 5.991281 -0.085936
+v -0.155741 6.135281 -0.089937
+v -0.197308 6.287280 -0.113941
+v -0.245802 6.359281 -0.141946
+v -0.287369 6.391280 -0.165950
+v -0.266586 6.439281 -0.153948
+v -0.207732 6.439281 -0.119961
+v -0.207732 6.479280 -0.119961
+v -0.152311 6.535279 -0.087956
+v -0.124599 6.607280 -0.071953
+v -0.117671 6.671281 -0.067952
+v -0.124599 6.727280 -0.071953
+v -0.096887 6.751280 -0.055950
+v -0.152311 6.775281 -0.087956
+v -0.180021 6.815281 -0.103958
+v -0.221588 6.823281 -0.127962
+v -0.221588 6.871280 -0.127962
+v -1.182361 -3.284090 -0.316940
+v -1.182361 -2.760090 -0.316940
+v -1.228724 -2.760090 -0.329368
+v -1.259633 -2.728091 -0.337654
+v -1.259633 -2.642078 -0.337654
+v -1.213270 -2.602085 -0.325226
+v -1.151452 -2.600090 -0.308655
+v -1.070316 -2.524090 -0.286906
+v -0.993044 -2.356090 -0.266193
+v -0.969863 -2.256090 -0.259979
+v -0.977590 -2.192089 -0.262050
+v -1.039407 -2.160089 -0.278621
+v -1.062589 -2.128090 -0.284835
+v -1.062589 -2.072090 -0.284835
+v -1.039407 -2.040090 -0.278621
+v -0.900624 -1.996708 -0.241419
+v -0.637736 -1.819721 -0.170950
+v -0.545146 -1.673745 -0.146130
+v -0.493896 -1.530860 -0.132392
+v -0.426645 -1.365037 -0.114365
+v -0.410620 -1.183625 -0.110070
+v -0.433802 -1.127625 -0.116284
+v -0.522577 -1.127625 -0.140081
+v -0.561213 -1.079625 -0.150437
+v -0.561213 -0.903625 -0.150437
+v -0.507122 -0.855625 -0.135938
+v -0.397872 -0.855625 -0.106653
+v -0.343627 4.767281 -0.092112
+v -0.138976 6.727280 -0.037253
+v -0.215708 4.671280 0.000000
+v -0.271708 4.671280 0.000000
+v -0.303708 4.639273 0.000000
+v -0.303708 4.591273 0.000000
+v -0.275705 4.561275 0.000000
+v -0.331920 0.793487 0.000000
+v -0.403919 0.779474 0.000000
+v -0.419919 0.707474 0.000000
+v -0.403919 0.641487 0.000000
+v -0.363919 0.601487 0.000000
+v -0.403919 -0.543625 0.000000
+v -0.451919 -0.543625 0.000000
+v -0.483920 -0.583625 0.000000
+v -0.483920 -0.665634 0.000000
+v -0.453928 -0.695625 0.000000
+v -0.411927 -0.695618 0.000000
+v -0.397891 -0.695618 0.106613
+v -0.438461 -0.695625 0.117483
+v -0.467431 -0.665634 0.125246
+v -0.467431 -0.583625 0.125246
+v -0.436521 -0.543625 0.116963
+v -0.390156 -0.543625 0.104540
+v -0.351519 0.601487 0.094188
+v -0.390156 0.641487 0.104540
+v -0.405611 0.707474 0.108681
+v -0.390156 0.779474 0.104540
+v -0.320610 0.793487 0.085906
+v -0.231540 4.559279 0.062040
+v -0.356741 -0.695618 0.205960
+v -0.393115 -0.695625 0.226961
+v -0.419089 -0.665634 0.241956
+v -0.419089 -0.583625 0.241956
+v -0.391375 -0.543625 0.225956
+v -0.349806 -0.543625 0.201956
+v -0.315165 0.601487 0.181957
+v -0.349806 0.641487 0.201956
+v -0.363662 0.707474 0.209956
+v -0.349806 0.779474 0.201956
+v -0.287453 0.793487 0.165957
+v -0.207594 4.559279 0.119852
+v -0.238769 4.561275 0.137850
+v -0.263020 4.591273 0.151852
+v -0.263020 4.639273 0.151852
+v -0.235307 4.671280 0.135852
+v -0.186810 4.671280 0.107852
+v -0.291280 -0.695618 0.291273
+v -0.320980 -0.695625 0.320971
+v -0.342188 -0.665634 0.342179
+v -0.342188 -0.583625 0.342179
+v -0.319559 -0.543625 0.319551
+v -0.285618 -0.543625 0.285610
+v -0.257333 0.601487 0.257326
+v -0.285618 0.641487 0.285610
+v -0.296931 0.707474 0.296924
+v -0.285618 0.779474 0.285610
+v -0.234706 0.793487 0.234700
+v -0.169501 4.559279 0.169497
+v -0.205970 -0.695618 0.356736
+v -0.226971 -0.695625 0.393109
+v -0.241967 -0.665634 0.419083
+v -0.241967 -0.583625 0.419083
+v -0.225966 -0.543625 0.391369
+v -0.201966 -0.543625 0.349801
+v -0.181965 0.601487 0.315160
+v -0.201966 0.641487 0.349801
+v -0.209966 0.707474 0.363657
+v -0.201966 0.779474 0.349801
+v -0.165965 0.793487 0.287448
+v -0.119858 4.559279 0.207591
+v -0.137857 4.561275 0.238765
+v -0.151859 4.591273 0.263016
+v -0.151859 4.639273 0.263016
+v -0.135858 4.671280 0.235304
+v -0.107857 4.671280 0.186807
+v -0.106623 -0.695618 0.397889
+v -0.117495 -0.695625 0.438458
+v -0.125258 -0.665634 0.467428
+v -0.125258 -0.583625 0.467428
+v -0.116975 -0.543625 0.436518
+v -0.104550 -0.543625 0.390153
+v -0.094197 0.601487 0.351517
+v -0.104550 0.641487 0.390153
+v -0.108692 0.707474 0.405608
+v -0.104550 0.779474 0.390153
+v -0.085914 0.793487 0.320608
+v -0.062046 4.559279 0.231539
+v -0.078612 4.639273 0.293358
+v -0.070329 4.671280 0.262448
+v -0.055834 4.671280 0.208357
+v -0.000011 -0.695618 0.411927
+v -0.000012 -0.695625 0.453928
+v -0.000013 -0.665634 0.483920
+v -0.000013 -0.583625 0.483920
+v -0.000012 -0.543625 0.451919
+v -0.000011 -0.543625 0.403919
+v -0.000010 0.601487 0.363919
+v -0.000011 0.641487 0.403919
+v -0.000011 0.707474 0.419919
+v -0.000011 0.779474 0.403919
+v -0.000009 0.793487 0.331920
+v -0.000006 4.559279 0.239708
+v -0.000007 4.561275 0.275705
+v -0.000008 4.591273 0.303708
+v -0.000008 4.639273 0.303708
+v -0.000007 4.671280 0.271708
+v -0.000006 4.671280 0.215708
+v 0.106602 -0.695618 0.397894
+v 0.117472 -0.695625 0.438464
+v 0.125233 -0.665634 0.467435
+v 0.125233 -0.583625 0.467435
+v 0.116952 -0.543625 0.436524
+v 0.104530 -0.543625 0.390159
+v 0.094178 0.601487 0.351522
+v 0.104530 0.641487 0.390159
+v 0.108671 0.707474 0.405614
+v 0.104530 0.779474 0.390159
+v 0.085897 0.793487 0.320613
+v 0.062034 4.559279 0.231542
+v 0.078596 4.591273 0.293362
+v 0.078596 4.639273 0.293362
+v 0.055823 4.671280 0.208360
+v 0.205951 -0.695618 0.356746
+v 0.226950 -0.695625 0.393121
+v 0.241945 -0.665634 0.419095
+v 0.241945 -0.583625 0.419095
+v 0.225946 -0.543625 0.391381
+v 0.201947 -0.543625 0.349811
+v 0.181948 0.601487 0.315169
+v 0.201947 0.641487 0.349811
+v 0.209947 0.707474 0.363668
+v 0.201947 0.779474 0.349811
+v 0.165950 0.793487 0.287457
+v 0.119847 4.559279 0.207597
+v 0.137844 4.561275 0.238772
+v 0.151845 4.591273 0.263024
+v 0.151845 4.639273 0.263024
+v 0.135846 4.671280 0.235311
+v 0.107847 4.671280 0.186812
+v 0.291265 -0.695618 0.291288
+v 0.320963 -0.695625 0.320988
+v 0.342170 -0.665634 0.342197
+v 0.342170 -0.583625 0.342197
+v 0.319542 -0.543625 0.319568
+v 0.285603 -0.543625 0.285625
+v 0.257319 0.601487 0.257340
+v 0.285603 0.641487 0.285625
+v 0.296916 0.707474 0.296939
+v 0.285603 0.779474 0.285625
+v 0.234694 0.793487 0.234712
+v 0.169492 4.559279 0.169506
+v 0.214745 4.591273 0.214762
+v 0.356730 -0.695618 0.205979
+v 0.393103 -0.695625 0.226981
+v 0.419076 -0.665634 0.241978
+v 0.419076 -0.583625 0.241978
+v 0.391363 -0.543625 0.225977
+v 0.349795 -0.543625 0.201975
+v 0.315155 0.601487 0.181973
+v 0.349795 0.641487 0.201975
+v 0.363651 0.707474 0.209975
+v 0.349795 0.779474 0.201975
+v 0.287444 0.793487 0.165973
+v 0.207588 4.559279 0.119863
+v 0.238761 4.561275 0.137863
+v 0.263012 4.591273 0.151866
+v 0.263012 4.639273 0.151866
+v 0.235300 4.671280 0.135864
+v 0.186804 4.671280 0.107862
+v 0.397886 -0.695618 0.106634
+v 0.438455 -0.695625 0.117506
+v 0.467425 -0.665634 0.125270
+v 0.467425 -0.583625 0.125270
+v 0.436515 -0.543625 0.116986
+v 0.390151 -0.543625 0.104561
+v 0.351514 0.601487 0.094206
+v 0.390151 0.641487 0.104561
+v 0.405605 0.707474 0.108703
+v 0.390151 0.779474 0.104561
+v 0.320606 0.793487 0.085923
+v 0.231537 4.559279 0.062052
+v 0.208355 4.671280 0.055839
+v 0.411927 -0.695618 0.000022
+v 0.453928 -0.695625 0.000024
+v 0.483920 -0.665634 0.000025
+v 0.483920 -0.583625 0.000025
+v 0.451919 -0.543625 0.000024
+v 0.403919 -0.543625 0.000021
+v 0.363919 0.601487 0.000019
+v 0.403919 0.641487 0.000021
+v 0.419919 0.707474 0.000022
+v 0.403919 0.779474 0.000021
+v 0.331920 0.793487 0.000017
+v 0.239708 4.559279 0.000013
+v 0.275705 4.561275 0.000015
+v 0.303708 4.591273 0.000016
+v 0.303708 4.639273 0.000016
+v 0.271708 4.671280 0.000014
+v 0.215708 4.671280 0.000011
+v 0.397897 -0.695618 -0.106592
+v 0.438467 -0.695625 -0.117460
+v 0.467438 -0.665634 -0.125221
+v 0.467438 -0.583625 -0.125221
+v 0.436527 -0.543625 -0.116940
+v 0.390162 -0.543625 -0.104520
+v 0.351524 0.601487 -0.094169
+v 0.390162 0.641487 -0.104520
+v 0.405617 0.707474 -0.108660
+v 0.390162 0.779474 -0.104520
+v 0.320615 0.793487 -0.085889
+v 0.231544 4.559279 -0.062028
+v 0.356752 -0.695618 -0.205942
+v 0.393127 -0.695625 -0.226940
+v 0.419102 -0.665634 -0.241934
+v 0.419102 -0.583625 -0.241934
+v 0.391387 -0.543625 -0.225935
+v 0.349817 -0.543625 -0.201938
+v 0.315174 0.601487 -0.181940
+v 0.349817 0.641487 -0.201938
+v 0.363673 0.707474 -0.209937
+v 0.349817 0.779474 -0.201938
+v 0.287461 0.793487 -0.165942
+v 0.207601 4.559279 -0.119841
+v 0.238776 4.561275 -0.137838
+v 0.263028 4.591273 -0.151838
+v 0.263028 4.639273 -0.151838
+v 0.235314 4.671280 -0.135840
+v 0.186815 4.671280 -0.107842
+v 0.291296 -0.695618 -0.291257
+v 0.320997 -0.695625 -0.320954
+v 0.342206 -0.665634 -0.342161
+v 0.342206 -0.583625 -0.342161
+v 0.319576 -0.543625 -0.319534
+v 0.285633 -0.543625 -0.285595
+v 0.257347 0.601487 -0.257313
+v 0.285633 0.641487 -0.285595
+v 0.296947 0.707474 -0.296908
+v 0.285633 0.779474 -0.285595
+v 0.234718 0.793487 -0.234687
+v 0.169510 4.559279 -0.169488
+v 0.205988 -0.695618 -0.356725
+v 0.226992 -0.695625 -0.393097
+v 0.241989 -0.665634 -0.419070
+v 0.241989 -0.583625 -0.419070
+v 0.225987 -0.543625 -0.391358
+v 0.201984 -0.543625 -0.349790
+v 0.181982 0.601487 -0.315150
+v 0.201984 0.641487 -0.349790
+v 0.209985 0.707474 -0.363646
+v 0.201984 0.779474 -0.349790
+v 0.165980 0.793487 -0.287440
+v 0.119869 4.559279 -0.207585
+v 0.137869 4.561275 -0.238758
+v 0.151872 4.591273 -0.263008
+v 0.151872 4.639273 -0.263008
+v 0.135870 4.671280 -0.235297
+v 0.107867 4.671280 -0.186801
+v 0.106644 -0.695618 -0.397883
+v 0.117518 -0.695625 -0.438452
+v 0.125283 -0.665634 -0.467421
+v 0.125283 -0.583625 -0.467421
+v 0.116998 -0.543625 -0.436511
+v 0.104571 -0.543625 -0.390148
+v 0.094215 0.601487 -0.351512
+v 0.104571 0.641487 -0.390148
+v 0.108713 0.707474 -0.405602
+v 0.104571 0.779474 -0.390148
+v 0.085931 0.793487 -0.320604
+v 0.062058 4.559279 -0.231535
+v 0.070343 4.671280 -0.262444
+v 0.000033 -0.695618 -0.411927
+v 0.000036 -0.695625 -0.453928
+v 0.000038 -0.665634 -0.483920
+v 0.000038 -0.583625 -0.483920
+v 0.000036 -0.543625 -0.451919
+v 0.000032 -0.543625 -0.403919
+v 0.000029 0.601487 -0.363919
+v 0.000032 0.641487 -0.403919
+v 0.000033 0.707474 -0.419919
+v 0.000032 0.779474 -0.403919
+v 0.000026 0.793487 -0.331920
+v 0.000019 4.559279 -0.239708
+v 0.000022 4.561275 -0.275705
+v 0.000024 4.591273 -0.303708
+v 0.000024 4.639273 -0.303708
+v 0.000022 4.671280 -0.271708
+v 0.000017 4.671280 -0.215708
+v -0.106581 -0.695618 -0.397900
+v -0.117449 -0.695625 -0.438471
+v -0.125209 -0.665634 -0.467441
+v -0.125209 -0.583625 -0.467441
+v -0.116929 -0.543625 -0.436530
+v -0.104509 -0.543625 -0.390165
+v -0.094160 0.601487 -0.351527
+v -0.104509 0.641487 -0.390165
+v -0.108649 0.707474 -0.405620
+v -0.104509 0.779474 -0.390165
+v -0.085880 0.793487 -0.320617
+v -0.062022 4.559279 -0.231545
+v -0.078581 4.591273 -0.293366
+v -0.205932 -0.695618 -0.356757
+v -0.226929 -0.695625 -0.393133
+v -0.241923 -0.665634 -0.419108
+v -0.241923 -0.583625 -0.419108
+v -0.225925 -0.543625 -0.391393
+v -0.201929 -0.543625 -0.349822
+v -0.181932 0.601487 -0.315179
+v -0.201929 0.641487 -0.349822
+v -0.209928 0.707474 -0.363679
+v -0.201929 0.779474 -0.349822
+v -0.165935 0.793487 -0.287466
+v -0.119836 4.559279 -0.207604
+v -0.137832 4.561275 -0.238780
+v -0.151831 4.591273 -0.263032
+v -0.151831 4.639273 -0.263032
+v -0.135833 4.671280 -0.235318
+v -0.107838 4.671280 -0.186818
+v -0.291250 -0.695618 -0.291303
+v -0.320946 -0.695625 -0.321005
+v -0.342152 -0.665634 -0.342215
+v -0.342152 -0.583625 -0.342215
+v -0.319526 -0.543625 -0.319584
+v -0.285588 -0.543625 -0.285640
+v -0.257306 0.601487 -0.257353
+v -0.285588 0.641487 -0.285640
+v -0.296900 0.707474 -0.296955
+v -0.285588 0.779474 -0.285640
+v -0.234681 0.793487 -0.234725
+v -0.169484 4.559279 -0.169515
+v -0.152515 4.671280 -0.152543
+v -0.356719 -0.695618 -0.205998
+v -0.393091 -0.695625 -0.227002
+v -0.419064 -0.665634 -0.242000
+v -0.419064 -0.583625 -0.242000
+v -0.391352 -0.543625 -0.225997
+v -0.349785 -0.543625 -0.201993
+v -0.315146 0.601487 -0.181990
+v -0.349785 0.641487 -0.201993
+v -0.363640 0.707474 -0.209995
+v -0.349785 0.779474 -0.201993
+v -0.287435 0.793487 -0.165988
+v -0.207582 4.559279 -0.119874
+v -0.238754 4.561275 -0.137876
+v -0.263004 4.591273 -0.151879
+v -0.263004 4.639273 -0.151879
+v -0.235293 4.671280 -0.135877
+v -0.186798 4.671280 -0.107872
+v -0.397880 -0.695618 -0.106655
+v -0.438449 -0.695625 -0.117529
+v -0.467418 -0.665634 -0.125295
+v -0.467418 -0.583625 -0.125295
+v -0.436508 -0.543625 -0.117009
+v -0.390145 -0.543625 -0.104581
+v -0.351509 0.601487 -0.094225
+v -0.390145 0.641487 -0.104581
+v -0.405600 0.707474 -0.108724
+v -0.390145 0.779474 -0.104581
+v -0.320601 0.793487 -0.085940
+v -0.231534 4.559279 -0.062064
+v -0.208352 4.671280 -0.055850
+v 0.042099 0.760516 0.319849
+v 0.049195 0.755443 0.373756
+v 0.049945 0.707794 0.379455
+v 0.048430 0.657846 0.367941
+v 0.043001 0.613739 0.326701
+v 0.047878 -0.544789 0.363746
+v -0.140407 -0.544789 0.338953
+v -0.291071 -0.544789 0.223341
+v -0.363745 -0.544789 0.047887
+v 0.223334 -0.544789 0.291076
+v 0.200588 0.613739 0.261432
+v 0.225910 0.657846 0.294434
+v 0.232979 0.707794 0.303647
+v 0.229480 0.755443 0.299087
+v 0.196382 0.760516 0.255949
+v -0.123463 0.760516 0.298048
+v -0.255945 0.760516 0.196388
+v -0.319848 0.760516 0.042108
+v -0.373755 0.755443 0.049205
+v -0.299081 0.755444 0.229487
+v -0.144271 0.755443 0.348281
+v -0.142026 0.657846 0.342863
+v -0.126108 0.613739 0.304434
+v -0.146471 0.707794 0.353592
+v -0.303641 0.707794 0.232987
+v -0.261427 0.613739 0.200596
+v -0.294428 0.657846 0.225917
+v -0.379454 0.707794 0.049955
+v -0.367940 0.657846 0.048439
+v -0.326700 0.613739 0.043010
+v -0.298039 0.760516 -0.123487
+v -0.196368 0.760516 -0.255960
+v -0.042083 0.760516 -0.319851
+v -0.049175 0.755443 -0.373759
+v -0.049925 0.707794 -0.379458
+v -0.048410 0.657846 -0.367944
+v -0.042984 0.613739 -0.326704
+v -0.200575 0.613739 -0.261443
+v -0.225894 0.657846 -0.294446
+v -0.232963 0.707794 -0.303660
+v -0.229464 0.755443 -0.299099
+v -0.348270 0.755443 -0.144298
+v -0.353580 0.707794 -0.146499
+v -0.342852 0.657846 -0.142053
+v -0.304424 0.613739 -0.126132
+v -0.338942 -0.544789 -0.140434
+v -0.223319 -0.544789 -0.291089
+v -0.047858 -0.544789 -0.363749
+v 0.140425 -0.544789 -0.338946
+v 0.291083 -0.544789 -0.223326
+v 0.363748 -0.544789 -0.047868
+v 0.123478 0.760516 -0.298043
+v 0.144289 0.755444 -0.348273
+v 0.146489 0.707794 -0.353584
+v 0.142044 0.657846 -0.342855
+v 0.126124 0.613739 -0.304427
+v 0.261438 0.613739 -0.200582
+v 0.294440 0.657846 -0.225902
+v 0.303653 0.707794 -0.232971
+v 0.299093 0.755444 -0.229471
+v 0.255955 0.760516 -0.196375
+v 0.319851 0.760516 -0.042092
+v 0.373758 0.755443 -0.049186
+v 0.379457 0.707794 -0.049935
+v 0.367943 0.657846 -0.048420
+v 0.326702 0.613739 -0.042993
+v 0.298045 0.760516 0.123471
+v 0.348277 0.755444 0.144280
+v 0.353588 0.707794 0.146480
+v 0.342859 0.657846 0.142035
+v 0.304430 0.613739 0.126115
+v 0.338950 -0.544789 0.140416
+v -0.026067 4.543957 0.197960
+v -0.038002 0.778164 0.288601
+v -0.121553 4.543957 0.158406
+v -0.177209 0.778164 0.230936
+v -0.184470 4.543957 0.076408
+v -0.268934 0.778164 0.111395
+v -0.197958 4.543957 -0.026072
+v -0.288597 0.778165 -0.038010
+v 0.184475 4.543957 -0.076399
+v 0.268941 0.778164 -0.111380
+v 0.121561 4.543957 -0.158400
+v 0.177221 0.778164 -0.230926
+v 0.026077 4.543957 -0.197959
+v 0.038017 0.778164 -0.288599
+v -0.076395 4.543957 -0.184476
+v -0.111373 0.778164 -0.268943
+v -0.158396 4.543957 -0.121565
+v -0.230922 0.778164 -0.177227
+v 0.197959 4.543957 0.026072
+v 0.288599 0.778164 0.038010
+v 0.158403 4.543957 0.121557
+v 0.230932 0.778164 0.177215
+v 0.076404 4.543957 0.184472
+v 0.111387 0.778164 0.268937
+v -0.231537 4.559279 -0.000012
+# 4440 vertices
+
+# 0 vertex parms
+
+# 0 texture vertices
+
+# 0 normals
+
+g globes
+f 1669 1692 1691
+f 1688 1692 1687
+f 1684 1692 1683
+f 1680 1692 1679
+f 1676 1692 1675
+f 1672 1692 1671
+f 1645 1669 1691 1667
+f 1664 1688 1687 1663
+f 1660 1684 1683 1659
+f 1656 1680 1679 1655
+f 1652 1676 1675 1651
+f 1648 1672 1671 1647
+f 1621 1645 1667 1643
+f 1640 1664 1663 1639
+f 1636 1660 1659 1635
+f 1632 1656 1655 1631
+f 1628 1652 1651 1627
+f 1624 1648 1647 1623
+f 1597 1621 1643 1619
+f 1616 1640 1639 1615
+f 1612 1636 1635 1611
+f 1608 1632 1631 1607
+f 1604 1628 1627 1603
+f 1600 1624 1623 1599
+f 1573 1597 1619 1595
+f 1592 1616 1615 1591
+f 1588 1612 1611 1587
+f 1584 1608 1607 1583
+f 1580 1604 1603 1579
+f 1576 1600 1599 1575
+f 1549 1573 1595 1571
+f 1568 1592 1591 1567
+f 1564 1588 1587 1563
+f 1560 1584 1583 1559
+f 1556 1580 1579 1555
+f 1552 1576 1575 1551
+f 1525 1549 1571 1547
+f 1544 1568 1567 1543
+f 1540 1564 1563 1539
+f 1536 1560 1559 1535
+f 1532 1556 1555 1531
+f 1528 1552 1551 1527
+f 1501 1525 1547 1523
+f 1520 1544 1543 1519
+f 1516 1540 1539 1515
+f 1512 1536 1535 1511
+f 1508 1532 1531 1507
+f 1504 1528 1527 1503
+f 1477 1501 1523 1499
+f 1496 1520 1519 1495
+f 1492 1516 1515 1491
+f 1488 1512 1511 1487
+f 1484 1508 1507 1483
+f 1480 1504 1503 1479
+f 1453 1477 1499 1475
+f 1472 1496 1495 1471
+f 1468 1492 1491 1467
+f 1464 1488 1487 1463
+f 1460 1484 1483 1459
+f 1456 1480 1479 1455
+f 1429 1453 1475 1451
+f 1448 1472 1471 1447
+f 1444 1468 1467 1443
+f 1440 1464 1463 1439
+f 1436 1460 1459 1435
+f 1432 1456 1455 1431
+f 1427 1429 1451
+f 1427 1448 1447
+f 1427 1444 1443
+f 1427 1440 1439
+f 1427 1436 1435
+f 1427 1432 1431
+f 1403 1426 1425
+f 1422 1426 1421
+f 1418 1426 1417
+f 1414 1426 1413
+f 1410 1426 1409
+f 1406 1426 1405
+f 1379 1403 1425 1401
+f 1398 1422 1421 1397
+f 1394 1418 1417 1393
+f 1390 1414 1413 1389
+f 1386 1410 1409 1385
+f 1382 1406 1405 1381
+f 1355 1379 1401 1377
+f 1374 1398 1397 1373
+f 1370 1394 1393 1369
+f 1366 1390 1389 1365
+f 1362 1386 1385 1361
+f 1358 1382 1381 1357
+f 1331 1355 1377 1353
+f 1350 1374 1373 1349
+f 1346 1370 1369 1345
+f 1342 1366 1365 1341
+f 1338 1362 1361 1337
+f 1334 1358 1357 1333
+f 1307 1331 1353 1329
+f 1326 1350 1349 1325
+f 1322 1346 1345 1321
+f 1318 1342 1341 1317
+f 1314 1338 1337 1313
+f 1310 1334 1333 1309
+f 1283 1307 1329 1305
+f 1302 1326 1325 1301
+f 1298 1322 1321 1297
+f 1294 1318 1317 1293
+f 1290 1314 1313 1289
+f 1286 1310 1309 1285
+f 1259 1283 1305 1281
+f 1278 1302 1301 1277
+f 1274 1298 1297 1273
+f 1270 1294 1293 1269
+f 1266 1290 1289 1265
+f 1262 1286 1285 1261
+f 1235 1259 1281 1257
+f 1254 1278 1277 1253
+f 1250 1274 1273 1249
+f 1246 1270 1269 1245
+f 1242 1266 1265 1241
+f 1238 1262 1261 1237
+f 1211 1235 1257 1233
+f 1230 1254 1253 1229
+f 1226 1250 1249 1225
+f 1222 1246 1245 1221
+f 1218 1242 1241 1217
+f 1214 1238 1237 1213
+f 1187 1211 1233 1209
+f 1206 1230 1229 1205
+f 1202 1226 1225 1201
+f 1198 1222 1221 1197
+f 1194 1218 1217 1193
+f 1190 1214 1213 1189
+f 1163 1187 1209 1185
+f 1182 1206 1205 1181
+f 1178 1202 1201 1177
+f 1174 1198 1197 1173
+f 1170 1194 1193 1169
+f 1166 1190 1189 1165
+f 1161 1163 1185
+f 1161 1182 1181
+f 1161 1178 1177
+f 1161 1174 1173
+f 1161 1170 1169
+f 1161 1166 1165
+f 531 532 530
+f 527 532 526
+f 523 532 522
+f 519 532 518
+f 515 532 514
+f 511 532 510
+f 507 531 530 506
+f 503 527 526 502
+f 499 523 522 498
+f 495 519 518 494
+f 491 515 514 490
+f 487 511 510 486
+f 483 507 506 482
+f 479 503 502 478
+f 475 499 498 474
+f 471 495 494 470
+f 467 491 490 466
+f 463 487 486 462
+f 459 483 482 458
+f 455 479 478 454
+f 451 475 474 450
+f 447 471 470 446
+f 443 467 466 442
+f 439 463 462 438
+f 435 459 458 434
+f 431 455 454 430
+f 427 451 450 426
+f 423 447 446 422
+f 419 443 442 418
+f 415 439 438 414
+f 411 435 434 410
+f 407 431 430 406
+f 403 427 426 402
+f 399 423 422 398
+f 395 419 418 394
+f 391 415 414 390
+f 387 411 410 386
+f 383 407 406 382
+f 379 403 402 378
+f 375 399 398 374
+f 371 395 394 370
+f 367 391 390 366
+f 363 387 386 362
+f 359 383 382 358
+f 355 379 378 354
+f 351 375 374 350
+f 347 371 370 346
+f 343 367 366 342
+f 339 363 362 338
+f 335 359 358 334
+f 331 355 354 330
+f 327 351 350 326
+f 323 347 346 322
+f 319 343 342 318
+f 315 339 338 314
+f 311 335 334 310
+f 307 331 330 306
+f 303 327 326 302
+f 299 323 322 298
+f 295 319 318 294
+f 291 315 314 290
+f 287 311 310 286
+f 283 307 306 282
+f 279 303 302 278
+f 275 299 298 274
+f 271 295 294 270
+f 267 291 290
+f 267 287 286
+f 267 283 282
+f 267 279 278
+f 267 275 274
+f 267 271 270
+f 265 266 264
+f 261 266 260
+f 257 266 256
+f 253 266 252
+f 249 266 248
+f 245 266 244
+f 241 265 264 240
+f 237 261 260 236
+f 233 257 256 232
+f 229 253 252 228
+f 225 249 248 224
+f 221 245 244 220
+f 217 241 240 216
+f 213 237 236 212
+f 209 233 232 208
+f 205 229 228 204
+f 201 225 224 200
+f 197 221 220 196
+f 193 217 216 192
+f 189 213 212 188
+f 185 209 208 184
+f 181 205 204 180
+f 177 201 200 176
+f 173 197 196 172
+f 169 193 192 168
+f 165 189 188 164
+f 161 185 184 160
+f 157 181 180 156
+f 153 177 176 152
+f 149 173 172 148
+f 145 169 168 144
+f 141 165 164 140
+f 137 161 160 136
+f 133 157 156 132
+f 129 153 152 128
+f 125 149 148 124
+f 121 145 144 120
+f 117 141 140 116
+f 113 137 136 112
+f 109 133 132 108
+f 105 129 128 104
+f 101 125 124 100
+f 97 121 120 96
+f 93 117 116 92
+f 89 113 112 88
+f 85 109 108 84
+f 81 105 104 80
+f 77 101 100 76
+f 73 97 96 72
+f 69 93 92 68
+f 65 89 88 64
+f 61 85 84 60
+f 57 81 80 56
+f 53 77 76 52
+f 49 73 72 48
+f 45 69 68 44
+f 41 65 64 40
+f 37 61 60 36
+f 33 57 56 32
+f 29 53 52 28
+f 25 49 48 24
+f 21 45 44 20
+f 17 41 40 16
+f 13 37 36 12
+f 9 33 32 8
+f 5 29 28 4
+f 1 25 24
+f 1 21 20
+f 1 17 16
+f 1 13 12
+f 1 9 8
+f 1 5 4
+f 1 4 3
+f 1 8 7
+f 1 12 11
+f 1 16 15
+f 1 20 19
+f 1 24 23
+f 4 28 27 3
+f 8 32 31 7
+f 12 36 35 11
+f 16 40 39 15
+f 20 44 43 19
+f 24 48 47 23
+f 28 52 51 27
+f 32 56 55 31
+f 36 60 59 35
+f 40 64 63 39
+f 44 68 67 43
+f 48 72 71 47
+f 52 76 75 51
+f 56 80 79 55
+f 60 84 83 59
+f 64 88 87 63
+f 68 92 91 67
+f 72 96 95 71
+f 76 100 99 75
+f 80 104 103 79
+f 84 108 107 83
+f 88 112 111 87
+f 92 116 115 91
+f 96 120 119 95
+f 100 124 123 99
+f 104 128 127 103
+f 108 132 131 107
+f 112 136 135 111
+f 116 140 139 115
+f 120 144 143 119
+f 124 148 147 123
+f 128 152 151 127
+f 132 156 155 131
+f 136 160 159 135
+f 140 164 163 139
+f 144 168 167 143
+f 148 172 171 147
+f 152 176 175 151
+f 156 180 179 155
+f 160 184 183 159
+f 164 188 187 163
+f 168 192 191 167
+f 172 196 195 171
+f 176 200 199 175
+f 180 204 203 179
+f 184 208 207 183
+f 188 212 211 187
+f 192 216 215 191
+f 196 220 219 195
+f 200 224 223 199
+f 204 228 227 203
+f 208 232 231 207
+f 212 236 235 211
+f 216 240 239 215
+f 220 244 243 219
+f 224 248 247 223
+f 228 252 251 227
+f 232 256 255 231
+f 236 260 259 235
+f 240 264 263 239
+f 244 266 243
+f 248 266 247
+f 252 266 251
+f 256 266 255
+f 260 266 259
+f 264 266 263
+f 267 270 268
+f 267 274 273
+f 267 278 277
+f 267 282 281
+f 267 286 285
+f 267 290 289
+f 270 294 292 268
+f 274 298 297 273
+f 278 302 301 277
+f 282 306 305 281
+f 286 310 309 285
+f 290 314 313 289
+f 294 318 316 292
+f 298 322 321 297
+f 302 326 325 301
+f 306 330 329 305
+f 310 334 333 309
+f 314 338 337 313
+f 318 342 340 316
+f 322 346 345 321
+f 326 350 349 325
+f 330 354 353 329
+f 334 358 357 333
+f 338 362 361 337
+f 342 366 364 340
+f 346 370 369 345
+f 350 374 373 349
+f 354 378 377 353
+f 358 382 381 357
+f 362 386 385 361
+f 366 390 388 364
+f 370 394 393 369
+f 374 398 397 373
+f 378 402 401 377
+f 382 406 405 381
+f 386 410 409 385
+f 390 414 412 388
+f 394 418 417 393
+f 398 422 421 397
+f 402 426 425 401
+f 406 430 429 405
+f 410 434 433 409
+f 414 438 436 412
+f 418 442 441 417
+f 422 446 445 421
+f 426 450 449 425
+f 430 454 453 429
+f 434 458 457 433
+f 438 462 460 436
+f 442 466 465 441
+f 446 470 469 445
+f 450 474 473 449
+f 454 478 477 453
+f 458 482 481 457
+f 462 486 484 460
+f 466 490 489 465
+f 470 494 493 469
+f 474 498 497 473
+f 478 502 501 477
+f 482 506 505 481
+f 486 510 508 484
+f 490 514 513 489
+f 494 518 517 493
+f 498 522 521 497
+f 502 526 525 501
+f 506 530 529 505
+f 510 532 508
+f 514 532 513
+f 518 532 517
+f 522 532 521
+f 526 532 525
+f 530 532 529
+f 1161 1162 1163
+f 1161 1167 1166
+f 1161 1171 1170
+f 1161 1175 1174
+f 1161 1179 1178
+f 1161 1183 1182
+f 1162 1186 1187 1163
+f 1167 1191 1190 1166
+f 1171 1195 1194 1170
+f 1175 1199 1198 1174
+f 1179 1203 1202 1178
+f 1183 1207 1206 1182
+f 1186 1210 1211 1187
+f 1191 1215 1214 1190
+f 1195 1219 1218 1194
+f 1199 1223 1222 1198
+f 1203 1227 1226 1202
+f 1207 1231 1230 1206
+f 1210 1234 1235 1211
+f 1215 1239 1238 1214
+f 1219 1243 1242 1218
+f 1223 1247 1246 1222
+f 1227 1251 1250 1226
+f 1231 1255 1254 1230
+f 1234 1258 1259 1235
+f 1239 1263 1262 1238
+f 1243 1267 1266 1242
+f 1247 1271 1270 1246
+f 1251 1275 1274 1250
+f 1255 1279 1278 1254
+f 1258 1282 1283 1259
+f 1263 1287 1286 1262
+f 1267 1291 1290 1266
+f 1271 1295 1294 1270
+f 1275 1299 1298 1274
+f 1279 1303 1302 1278
+f 1282 1306 1307 1283
+f 1287 1311 1310 1286
+f 1291 1315 1314 1290
+f 1295 1319 1318 1294
+f 1299 1323 1322 1298
+f 1303 1327 1326 1302
+f 1306 1330 1331 1307
+f 1311 1335 1334 1310
+f 1315 1339 1338 1314
+f 1319 1343 1342 1318
+f 1323 1347 1346 1322
+f 1327 1351 1350 1326
+f 1330 1354 1355 1331
+f 1335 1359 1358 1334
+f 1339 1363 1362 1338
+f 1343 1367 1366 1342
+f 1347 1371 1370 1346
+f 1351 1375 1374 1350
+f 1354 1378 1379 1355
+f 1359 1383 1382 1358
+f 1363 1387 1386 1362
+f 1367 1391 1390 1366
+f 1371 1395 1394 1370
+f 1375 1399 1398 1374
+f 1378 1402 1403 1379
+f 1383 1407 1406 1382
+f 1387 1411 1410 1386
+f 1391 1415 1414 1390
+f 1395 1419 1418 1394
+f 1399 1423 1422 1398
+f 1402 1426 1403
+f 1407 1426 1406
+f 1411 1426 1410
+f 1415 1426 1414
+f 1419 1426 1418
+f 1423 1426 1422
+f 1427 1428 1429
+f 1427 1433 1432
+f 1427 1437 1436
+f 1427 1441 1440
+f 1427 1445 1444
+f 1427 1449 1448
+f 1428 1452 1453 1429
+f 1433 1457 1456 1432
+f 1437 1461 1460 1436
+f 1441 1465 1464 1440
+f 1445 1469 1468 1444
+f 1449 1473 1472 1448
+f 1452 1476 1477 1453
+f 1457 1481 1480 1456
+f 1461 1485 1484 1460
+f 1465 1489 1488 1464
+f 1469 1493 1492 1468
+f 1473 1497 1496 1472
+f 1476 1500 1501 1477
+f 1481 1505 1504 1480
+f 1485 1509 1508 1484
+f 1489 1513 1512 1488
+f 1493 1517 1516 1492
+f 1497 1521 1520 1496
+f 1500 1524 1525 1501
+f 1505 1529 1528 1504
+f 1509 1533 1532 1508
+f 1513 1537 1536 1512
+f 1517 1541 1540 1516
+f 1521 1545 1544 1520
+f 1524 1548 1549 1525
+f 1529 1553 1552 1528
+f 1533 1557 1556 1532
+f 1537 1561 1560 1536
+f 1541 1565 1564 1540
+f 1545 1569 1568 1544
+f 1548 1572 1573 1549
+f 1553 1577 1576 1552
+f 1557 1581 1580 1556
+f 1561 1585 1584 1560
+f 1565 1589 1588 1564
+f 1569 1593 1592 1568
+f 1572 1596 1597 1573
+f 1577 1601 1600 1576
+f 1581 1605 1604 1580
+f 1585 1609 1608 1584
+f 1589 1613 1612 1588
+f 1593 1617 1616 1592
+f 1596 1620 1621 1597
+f 1601 1625 1624 1600
+f 1605 1629 1628 1604
+f 1609 1633 1632 1608
+f 1613 1637 1636 1612
+f 1617 1641 1640 1616
+f 1620 1644 1645 1621
+f 1625 1649 1648 1624
+f 1629 1653 1652 1628
+f 1633 1657 1656 1632
+f 1637 1661 1660 1636
+f 1641 1665 1664 1640
+f 1644 1668 1669 1645
+f 1649 1673 1672 1648
+f 1653 1677 1676 1652
+f 1657 1681 1680 1656
+f 1661 1685 1684 1660
+f 1665 1689 1688 1664
+f 1668 1692 1669
+f 1673 1692 1672
+f 1677 1692 1676
+f 1681 1692 1680
+f 1685 1692 1684
+f 1689 1692 1688
+f 1691 1692 1690
+f 1687 1692 1686
+f 1683 1692 1682
+f 1679 1692 1678
+f 1675 1692 1674
+f 1671 1692 1670
+f 1667 1691 1690 1666
+f 1663 1687 1686 1662
+f 1659 1683 1682 1658
+f 1655 1679 1678 1654
+f 1651 1675 1674 1650
+f 1647 1671 1670 1646
+f 1643 1667 1666 1642
+f 1639 1663 1662 1638
+f 1635 1659 1658 1634
+f 1631 1655 1654 1630
+f 1627 1651 1650 1626
+f 1623 1647 1646 1622
+f 1619 1643 1642 1618
+f 1615 1639 1638 1614
+f 1611 1635 1634 1610
+f 1607 1631 1630 1606
+f 1603 1627 1626 1602
+f 1599 1623 1622 1598
+f 1595 1619 1618 1594
+f 1591 1615 1614 1590
+f 1587 1611 1610 1586
+f 1583 1607 1606 1582
+f 1579 1603 1602 1578
+f 1575 1599 1598 1574
+f 1571 1595 1594 1570
+f 1567 1591 1590 1566
+f 1563 1587 1586 1562
+f 1559 1583 1582 1558
+f 1555 1579 1578 1554
+f 1551 1575 1574 1550
+f 1547 1571 1570 1546
+f 1543 1567 1566 1542
+f 1539 1563 1562 1538
+f 1535 1559 1558 1534
+f 1531 1555 1554 1530
+f 1527 1551 1550 1526
+f 1523 1547 1546 1522
+f 1519 1543 1542 1518
+f 1515 1539 1538 1514
+f 1511 1535 1534 1510
+f 1507 1531 1530 1506
+f 1503 1527 1526 1502
+f 1499 1523 1522 1498
+f 1495 1519 1518 1494
+f 1491 1515 1514 1490
+f 1487 1511 1510 1486
+f 1483 1507 1506 1482
+f 1479 1503 1502 1478
+f 1475 1499 1498 1474
+f 1471 1495 1494 1470
+f 1467 1491 1490 1466
+f 1463 1487 1486 1462
+f 1459 1483 1482 1458
+f 1455 1479 1478 1454
+f 1451 1475 1474 1450
+f 1447 1471 1470 1446
+f 1443 1467 1466 1442
+f 1439 1463 1462 1438
+f 1435 1459 1458 1434
+f 1431 1455 1454 1430
+f 1427 1451 1450
+f 1427 1447 1446
+f 1427 1443 1442
+f 1427 1439 1438
+f 1427 1435 1434
+f 1427 1431 1430
+f 1425 1426 1424
+f 1421 1426 1420
+f 1417 1426 1416
+f 1413 1426 1412
+f 1409 1426 1408
+f 1405 1426 1404
+f 1401 1425 1424 1400
+f 1397 1421 1420 1396
+f 1393 1417 1416 1392
+f 1389 1413 1412 1388
+f 1385 1409 1408 1384
+f 1381 1405 1404 1380
+f 1377 1401 1400 1376
+f 1373 1397 1396 1372
+f 1369 1393 1392 1368
+f 1365 1389 1388 1364
+f 1361 1385 1384 1360
+f 1357 1381 1380 1356
+f 1353 1377 1376 1352
+f 1349 1373 1372 1348
+f 1345 1369 1368 1344
+f 1341 1365 1364 1340
+f 1337 1361 1360 1336
+f 1333 1357 1356 1332
+f 1329 1353 1352 1328
+f 1325 1349 1348 1324
+f 1321 1345 1344 1320
+f 1317 1341 1340 1316
+f 1313 1337 1336 1312
+f 1309 1333 1332 1308
+f 1305 1329 1328 1304
+f 1301 1325 1324 1300
+f 1297 1321 1320 1296
+f 1293 1317 1316 1292
+f 1289 1313 1312 1288
+f 1285 1309 1308 1284
+f 1281 1305 1304 1280
+f 1277 1301 1300 1276
+f 1273 1297 1296 1272
+f 1269 1293 1292 1268
+f 1265 1289 1288 1264
+f 1261 1285 1284 1260
+f 1257 1281 1280 1256
+f 1253 1277 1276 1252
+f 1249 1273 1272 1248
+f 1245 1269 1268 1244
+f 1241 1265 1264 1240
+f 1237 1261 1260 1236
+f 1233 1257 1256 1232
+f 1229 1253 1252 1228
+f 1225 1249 1248 1224
+f 1221 1245 1244 1220
+f 1217 1241 1240 1216
+f 1213 1237 1236 1212
+f 1209 1233 1232 1208
+f 1205 1229 1228 1204
+f 1201 1225 1224 1200
+f 1197 1221 1220 1196
+f 1193 1217 1216 1192
+f 1189 1213 1212 1188
+f 1185 1209 1208 1184
+f 1181 1205 1204 1180
+f 1177 1201 1200 1176
+f 1173 1197 1196 1172
+f 1169 1193 1192 1168
+f 1165 1189 1188 1164
+f 1161 1185 1184
+f 1161 1181 1180
+f 1161 1177 1176
+f 1161 1173 1172
+f 1161 1169 1168
+f 1161 1165 1164
+f 509 532 531
+f 528 532 527
+f 524 532 523
+f 520 532 519
+f 516 532 515
+f 512 532 511
+f 485 509 531 507
+f 504 528 527 503
+f 500 524 523 499
+f 496 520 519 495
+f 492 516 515 491
+f 488 512 511 487
+f 461 485 507 483
+f 480 504 503 479
+f 476 500 499 475
+f 472 496 495 471
+f 468 492 491 467
+f 464 488 487 463
+f 437 461 483 459
+f 456 480 479 455
+f 452 476 475 451
+f 448 472 471 447
+f 444 468 467 443
+f 440 464 463 439
+f 413 437 459 435
+f 432 456 455 431
+f 428 452 451 427
+f 424 448 447 423
+f 420 444 443 419
+f 416 440 439 415
+f 389 413 435 411
+f 408 432 431 407
+f 404 428 427 403
+f 400 424 423 399
+f 396 420 419 395
+f 392 416 415 391
+f 365 389 411 387
+f 384 408 407 383
+f 380 404 403 379
+f 376 400 399 375
+f 372 396 395 371
+f 368 392 391 367
+f 341 365 387 363
+f 360 384 383 359
+f 356 380 379 355
+f 352 376 375 351
+f 348 372 371 347
+f 344 368 367 343
+f 317 341 363 339
+f 336 360 359 335
+f 332 356 355 331
+f 328 352 351 327
+f 324 348 347 323
+f 320 344 343 319
+f 293 317 339 315
+f 312 336 335 311
+f 308 332 331 307
+f 304 328 327 303
+f 300 324 323 299
+f 296 320 319 295
+f 269 293 315 291
+f 288 312 311 287
+f 284 308 307 283
+f 280 304 303 279
+f 276 300 299 275
+f 272 296 295 271
+f 267 269 291
+f 267 288 287
+f 267 284 283
+f 267 280 279
+f 267 276 275
+f 267 272 271
+f 242 266 265
+f 262 266 261
+f 258 266 257
+f 254 266 253
+f 250 266 249
+f 246 266 245
+f 218 242 265 241
+f 238 262 261 237
+f 234 258 257 233
+f 230 254 253 229
+f 226 250 249 225
+f 222 246 245 221
+f 194 218 241 217
+f 214 238 237 213
+f 210 234 233 209
+f 206 230 229 205
+f 202 226 225 201
+f 198 222 221 197
+f 170 194 217 193
+f 190 214 213 189
+f 186 210 209 185
+f 182 206 205 181
+f 178 202 201 177
+f 174 198 197 173
+f 146 170 193 169
+f 166 190 189 165
+f 162 186 185 161
+f 158 182 181 157
+f 154 178 177 153
+f 150 174 173 149
+f 122 146 169 145
+f 142 166 165 141
+f 138 162 161 137
+f 134 158 157 133
+f 130 154 153 129
+f 126 150 149 125
+f 98 122 145 121
+f 118 142 141 117
+f 114 138 137 113
+f 110 134 133 109
+f 106 130 129 105
+f 102 126 125 101
+f 74 98 121 97
+f 94 118 117 93
+f 90 114 113 89
+f 86 110 109 85
+f 82 106 105 81
+f 78 102 101 77
+f 50 74 97 73
+f 70 94 93 69
+f 66 90 89 65
+f 62 86 85 61
+f 58 82 81 57
+f 54 78 77 53
+f 26 50 73 49
+f 46 70 69 45
+f 42 66 65 41
+f 38 62 61 37
+f 34 58 57 33
+f 30 54 53 29
+f 2 26 49 25
+f 22 46 45 21
+f 18 42 41 17
+f 14 38 37 13
+f 10 34 33 9
+f 6 30 29 5
+f 1 2 25
+f 1 22 21
+f 1 18 17
+f 1 14 13
+f 1 10 9
+f 1 6 5
+f 1 3 2
+f 1 7 6
+f 1 11 10
+f 1 15 14
+f 1 19 18
+f 1 23 22
+f 3 27 26 2
+f 7 31 30 6
+f 11 35 34 10
+f 15 39 38 14
+f 19 43 42 18
+f 23 47 46 22
+f 27 51 50 26
+f 31 55 54 30
+f 35 59 58 34
+f 39 63 62 38
+f 43 67 66 42
+f 47 71 70 46
+f 51 75 74 50
+f 55 79 78 54
+f 59 83 82 58
+f 63 87 86 62
+f 67 91 90 66
+f 71 95 94 70
+f 75 99 98 74
+f 79 103 102 78
+f 83 107 106 82
+f 87 111 110 86
+f 91 115 114 90
+f 95 119 118 94
+f 99 123 122 98
+f 103 127 126 102
+f 107 131 130 106
+f 111 135 134 110
+f 115 139 138 114
+f 119 143 142 118
+f 123 147 146 122
+f 127 151 150 126
+f 131 155 154 130
+f 135 159 158 134
+f 139 163 162 138
+f 143 167 166 142
+f 147 171 170 146
+f 151 175 174 150
+f 155 179 178 154
+f 159 183 182 158
+f 163 187 186 162
+f 167 191 190 166
+f 171 195 194 170
+f 175 199 198 174
+f 179 203 202 178
+f 183 207 206 182
+f 187 211 210 186
+f 191 215 214 190
+f 195 219 218 194
+f 199 223 222 198
+f 203 227 226 202
+f 207 231 230 206
+f 211 235 234 210
+f 215 239 238 214
+f 219 243 242 218
+f 223 247 246 222
+f 227 251 250 226
+f 231 255 254 230
+f 235 259 258 234
+f 239 263 262 238
+f 243 266 242
+f 247 266 246
+f 251 266 250
+f 255 266 254
+f 259 266 258
+f 263 266 262
+f 267 268 269
+f 267 273 272
+f 267 277 276
+f 267 281 280
+f 267 285 284
+f 267 289 288
+f 268 292 293 269
+f 273 297 296 272
+f 277 301 300 276
+f 281 305 304 280
+f 285 309 308 284
+f 289 313 312 288
+f 292 316 317 293
+f 297 321 320 296
+f 301 325 324 300
+f 305 329 328 304
+f 309 333 332 308
+f 313 337 336 312
+f 316 340 341 317
+f 321 345 344 320
+f 325 349 348 324
+f 329 353 352 328
+f 333 357 356 332
+f 337 361 360 336
+f 340 364 365 341
+f 345 369 368 344
+f 349 373 372 348
+f 353 377 376 352
+f 357 381 380 356
+f 361 385 384 360
+f 364 388 389 365
+f 369 393 392 368
+f 373 397 396 372
+f 377 401 400 376
+f 381 405 404 380
+f 385 409 408 384
+f 388 412 413 389
+f 393 417 416 392
+f 397 421 420 396
+f 401 425 424 400
+f 405 429 428 404
+f 409 433 432 408
+f 412 436 437 413
+f 417 441 440 416
+f 421 445 444 420
+f 425 449 448 424
+f 429 453 452 428
+f 433 457 456 432
+f 436 460 461 437
+f 441 465 464 440
+f 445 469 468 444
+f 449 473 472 448
+f 453 477 476 452
+f 457 481 480 456
+f 460 484 485 461
+f 465 489 488 464
+f 469 493 492 468
+f 473 497 496 472
+f 477 501 500 476
+f 481 505 504 480
+f 484 508 509 485
+f 489 513 512 488
+f 493 517 516 492
+f 497 521 520 496
+f 501 525 524 500
+f 505 529 528 504
+f 508 532 509
+f 513 532 512
+f 517 532 516
+f 521 532 520
+f 525 532 524
+f 529 532 528
+f 1161 1164 1162
+f 1161 1168 1167
+f 1161 1172 1171
+f 1161 1176 1175
+f 1161 1180 1179
+f 1161 1184 1183
+f 1164 1188 1186 1162
+f 1168 1192 1191 1167
+f 1172 1196 1195 1171
+f 1176 1200 1199 1175
+f 1180 1204 1203 1179
+f 1184 1208 1207 1183
+f 1188 1212 1210 1186
+f 1192 1216 1215 1191
+f 1196 1220 1219 1195
+f 1200 1224 1223 1199
+f 1204 1228 1227 1203
+f 1208 1232 1231 1207
+f 1212 1236 1234 1210
+f 1216 1240 1239 1215
+f 1220 1244 1243 1219
+f 1224 1248 1247 1223
+f 1228 1252 1251 1227
+f 1232 1256 1255 1231
+f 1236 1260 1258 1234
+f 1240 1264 1263 1239
+f 1244 1268 1267 1243
+f 1248 1272 1271 1247
+f 1252 1276 1275 1251
+f 1256 1280 1279 1255
+f 1260 1284 1282 1258
+f 1264 1288 1287 1263
+f 1268 1292 1291 1267
+f 1272 1296 1295 1271
+f 1276 1300 1299 1275
+f 1280 1304 1303 1279
+f 1284 1308 1306 1282
+f 1288 1312 1311 1287
+f 1292 1316 1315 1291
+f 1296 1320 1319 1295
+f 1300 1324 1323 1299
+f 1304 1328 1327 1303
+f 1308 1332 1330 1306
+f 1312 1336 1335 1311
+f 1316 1340 1339 1315
+f 1320 1344 1343 1319
+f 1324 1348 1347 1323
+f 1328 1352 1351 1327
+f 1332 1356 1354 1330
+f 1336 1360 1359 1335
+f 1340 1364 1363 1339
+f 1344 1368 1367 1343
+f 1348 1372 1371 1347
+f 1352 1376 1375 1351
+f 1356 1380 1378 1354
+f 1360 1384 1383 1359
+f 1364 1388 1387 1363
+f 1368 1392 1391 1367
+f 1372 1396 1395 1371
+f 1376 1400 1399 1375
+f 1380 1404 1402 1378
+f 1384 1408 1407 1383
+f 1388 1412 1411 1387
+f 1392 1416 1415 1391
+f 1396 1420 1419 1395
+f 1400 1424 1423 1399
+f 1404 1426 1402
+f 1408 1426 1407
+f 1412 1426 1411
+f 1416 1426 1415
+f 1420 1426 1419
+f 1424 1426 1423
+f 1427 1430 1428
+f 1427 1434 1433
+f 1427 1438 1437
+f 1427 1442 1441
+f 1427 1446 1445
+f 1427 1450 1449
+f 1430 1454 1452 1428
+f 1434 1458 1457 1433
+f 1438 1462 1461 1437
+f 1442 1466 1465 1441
+f 1446 1470 1469 1445
+f 1450 1474 1473 1449
+f 1454 1478 1476 1452
+f 1458 1482 1481 1457
+f 1462 1486 1485 1461
+f 1466 1490 1489 1465
+f 1470 1494 1493 1469
+f 1474 1498 1497 1473
+f 1478 1502 1500 1476
+f 1482 1506 1505 1481
+f 1486 1510 1509 1485
+f 1490 1514 1513 1489
+f 1494 1518 1517 1493
+f 1498 1522 1521 1497
+f 1502 1526 1524 1500
+f 1506 1530 1529 1505
+f 1510 1534 1533 1509
+f 1514 1538 1537 1513
+f 1518 1542 1541 1517
+f 1522 1546 1545 1521
+f 1526 1550 1548 1524
+f 1530 1554 1553 1529
+f 1534 1558 1557 1533
+f 1538 1562 1561 1537
+f 1542 1566 1565 1541
+f 1546 1570 1569 1545
+f 1550 1574 1572 1548
+f 1554 1578 1577 1553
+f 1558 1582 1581 1557
+f 1562 1586 1585 1561
+f 1566 1590 1589 1565
+f 1570 1594 1593 1569
+f 1574 1598 1596 1572
+f 1578 1602 1601 1577
+f 1582 1606 1605 1581
+f 1586 1610 1609 1585
+f 1590 1614 1613 1589
+f 1594 1618 1617 1593
+f 1598 1622 1620 1596
+f 1602 1626 1625 1601
+f 1606 1630 1629 1605
+f 1610 1634 1633 1609
+f 1614 1638 1637 1613
+f 1618 1642 1641 1617
+f 1622 1646 1644 1620
+f 1626 1650 1649 1625
+f 1630 1654 1653 1629
+f 1634 1658 1657 1633
+f 1638 1662 1661 1637
+f 1642 1666 1665 1641
+f 1646 1670 1668 1644
+f 1650 1674 1673 1649
+f 1654 1678 1677 1653
+f 1658 1682 1681 1657
+f 1662 1686 1685 1661
+f 1666 1690 1689 1665
+f 1670 1692 1668
+f 1674 1692 1673
+f 1678 1692 1677
+f 1682 1692 1681
+f 1686 1692 1685
+f 1690 1692 1689
+g arms
+usemtl bronze
+f 2106 2107 1728 1726 1725 2029
+f 2936 2922 2921 2753
+f 2892 2907 2908 2893
+f 2829 2815 2945 2943
+f 2945 2947 2948 2946
+f 2858 2890 2889 2872
+f 2753 2921 2938 2750
+f 2932 2776 2778 2933
+f 2928 2768 2770 2929
+f 2924 2757 2758 2925
+f 2918 2933 2934 2919
+f 2914 2929 2930 2915
+f 2910 2925 2926 2911
+f 2904 2919 2920 2905
+f 2900 2915 2916 2901
+f 2896 2911 2912 2897
+f 2891 2906 2907 2892
+f 2882 2901 2902 2883
+f 2878 2897 2898 2879
+f 2873 2893 2894 2874
+f 2869 2884 2885 2870
+f 2865 2880 2881 2866
+f 2861 2875 2876 2877 2862
+f 2856 2870 2871 2857
+f 2851 2866 2867 2852
+f 2847 2862 2863 2848
+f 2843 2858 2859 2844
+f 2838 2853 2852 2854 2839
+f 2834 2848 2849 2835
+f 2830 2844 2845 2831
+f 2825 2839 2840 2826
+f 2821 2835 2836 2822
+f 2817 2831 2832 2818
+f 2812 2826 2827 2813
+f 2808 2822 2823 2809
+f 2804 2818 2819 2805
+f 2797 2813 2814 2798
+f 2793 2809 2810 2794
+f 2789 2805 2806 2790
+f 2800 2801 2802 2786
+f 2775 2795 2796 2777
+f 2767 2791 2792 2769
+f 2756 2787 2788 2759
+f 2778 2777 2779 2780
+f 2770 2769 2771 2772
+f 2761 2758 2760 2759 2762 2763
+f 2721 2649 2726 2749 2326 2325
+f 2729 2730 2334 2332
+f 2652 2733 2344 2343
+f 2736 2660 2360 2358
+f 2739 2740 2370 2368
+f 2742 2743 2380 2378
+f 2745 2683 2390 2388
+f 2688 2691 2406 2405
+f 2747 2748 2418 2416
+f 2669 2672 2641 2631
+f 2725 2661 2574 2666
+f 2662 2723 2711 2663
+f 2696 2748 2647 2613
+f 2693 2690 2606 2610
+f 2685 2682 2597 2561
+f 2677 2593 2594 2676
+f 2628 2697 2612 2622
+f 2678 2569 2566 2576
+f 2742 2741 2573 2575
+f 2739 2738 2662 2661
+f 2736 2735 2715 2713
+f 2656 2733 2718 2614
+f 2731 2730 2702 2700
+f 2727 2726 2704 2722
+f 2586 2724 2725 2666 2584
+f 2606 2605 2610
+f 2723 2643 2587 2711
+f 2681 2648 2562 2596
+f 2658 2657 2353 2350
+f 2683 2682 2393 2390
+f 2691 2690 2409 2406
+f 2642 2634 2633 2639
+f 2627 2719 2697 2628
+f 2624 2680 2679 2625
+f 2651 2714 2716 2718
+f 2714 2712 2713 2715
+f 2705 2667 2701 2708 2706
+f 2583 2699 2700 2577 2568
+f 2613 2647 2648 2611
+f 2606 2690 2691 2607
+f 2600 2686 2687 2601
+f 2597 2682 2683 2598
+f 2677 2678 2590 2593
+f 2668 2671 2581 2595
+f 2632 2621 2620 2630
+f 2566 2569 2572 2567
+f 2643 2659 2660 2644
+f 2636 2649 2650 2637
+f 2633 2634 2635 2636 2637 2638
+f 2618 2619 2579 2620 2621 2622
+f 2605 2606 2607 2608
+f 2581 2594 2595
+f 2582 2583 2568
+f 2569 2570 2571 2572
+f 2515 2560 2516
+f 2549 2548 2437
+f 2510 2512 2494 2497
+f 2551 2482 2481
+f 2450 2449 2530 2529
+f 2545 2502 2431
+f 2559 2474 2553 2558
+f 2352 2529 2530 2347
+f 2521 2520 2446 2543
+f 2500 2503 2506 2505
+f 2496 2429 2426 2509
+f 2495 2493 2437 2548
+f 2556 2439 2488 2487 2557
+f 2443 2484 2550 2440
+f 2481 2480 2440 2551
+f 2474 2559 2475
+f 2517 2516 2560 2453
+f 2463 2508 2425 2468
+f 2458 2457 2526 2525
+f 2451 2450 2529 2528
+f 2436 2439 2556 2555
+f 2435 2434 2422 2539
+f 2431 2430 2546 2545
+f 2412 2407 2410 2413
+f 2396 2391 2394 2397
+f 2362 2359 2360 2363
+f 2324 2323 2421 2424 2325
+f 2537 2464 2463 2468
+f 2519 2461 2447
+f 2544 2545 2546 2547
+f 2323 2322 2537 2538
+f 2331 2333 2535 2536
+f 2342 2341 2448 2531
+f 2351 2355 2527 2528
+f 2361 2365 2460 2459
+f 2374 2373 2520 2521
+f 2381 2383 2516 2517
+f 2425 2508 2509 2426
+f 2496 2497 2498 2499
+f 2385 2389 2487 2488
+f 2404 2403 2480 2481
+f 2415 2417 2474 2475
+f 2463 2464 2465 2466
+f 2448 2449 2450 2451
+f 2433 2434 2435
+f 2419 2417 2418 2420
+f 2407 2408 2409 2410
+f 2391 2392 2393 2394
+f 2381 2379 2380 2382
+f 2371 2369 2370 2372
+f 2361 2362 2363 2364
+f 2351 2352 2353 2354
+f 2339 2337 2338 2340
+f 2331 2329 2330 2332
+f 2153 2170 2186 2200 2214 2229 2243 2258 2277 2292 2307 2154
+f 2172 2171 2124 2157
+f 2173 2172 2157 2319
+f 2230 2215 2313 2262
+f 2313 2315 2316 2314
+f 2278 2263 2312 2311
+f 2306 2152 2154 2307
+f 2302 2144 2146 2309 2303
+f 2298 2133 2136 2299
+f 2294 2308 2126 2295
+f 2288 2303 2304 2289
+f 2284 2299 2300 2285
+f 2280 2295 2296 2281
+f 2274 2289 2290 2275
+f 2270 2285 2286 2271
+f 2266 2281 2282 2267
+f 2256 2275 2276 2257
+f 2252 2271 2272 2253
+f 2247 2267 2268 2248
+f 2259 2260 2261 2262
+f 2239 2254 2255 2240
+f 2235 2250 2251 2236
+f 2231 2245 2246 2232
+f 2226 2240 2241 2227
+f 2221 2236 2237 2222
+f 2217 2232 2233 2218
+f 2212 2227 2228 2213
+f 2208 2222 2223 2209
+f 2204 2218 2219 2205
+f 2199 2213 2214 2200
+f 2195 2209 2210 2196
+f 2191 2205 2206 2192
+f 2187 2201 2202 2188
+f 2182 2196 2197 2183
+f 2178 2192 2193 2179
+f 2174 2188 2189 2175
+f 2167 2183 2184 2168
+f 2163 2179 2180 2164
+f 2159 2175 2176 2160
+f 2151 2169 2170 2153
+f 2143 2165 2166 2145
+f 2134 2161 2162 2137
+f 2123 2155 2156 2157 2124
+f 2146 2145 2147 2148
+f 2136 2138 2137 2139 2140
+f 2126 2127 2128 2129
+f 2099 2100 1702 1700
+f 2103 2104 1710 1708
+f 2027 2030 1722 1721
+f 2109 2110 1738 1736
+f 2036 2113 1748 1747
+f 2116 1944 1756 1754
+f 2056 2059 1770 1769
+f 2064 2118 1786 1785
+f 2092 2022 1796 1795
+f 1952 1991 2052 1996
+f 1954 1960 2018 1955
+f 2006 2079 2075 2007
+f 2119 2118 2066 2067
+f 2061 2058 1972 1976
+f 2117 1943 1997 2051
+f 2044 2041 2040 2045
+f 2046 1963 2039 2077
+f 2116 2115 1961 2070
+f 2037 2112 2097 2096 1958
+f 2109 2031 2015 2095
+f 2106 2029 1988 2089
+f 2025 2104 2071 2026
+f 2101 2100 2082 2081
+f 2022 2092 2009
+f 2043 1992 1951 1953
+f 2070 1961 1960 1954
+f 2074 2081 2080 2073
+f 2025 2024 1715 1712
+f 2037 2036 1747 1744
+f 2059 2058 1773 1770
+f 2068 2069 2091 2092 1795 1792
+f 2003 2013 2012 2004
+f 1991 1952 1951
+f 1936 1935 2067 2066
+f 2086 2023 2026 2018 2017
+f 1959 1961 1947 2035 2083
+f 2007 2075 2076 2008
+f 1940 1948 1938
+f 2066 1981 1977 1936
+f 1975 2060 2061 1976
+f 1937 2056 2057 1933
+f 1997 1943 1942 1995
+f 1966 1965 1964 1967
+f 2040 2041 2042 2043
+f 1994 1984 1983 1990
+f 1957 2036 2037 1958
+f 1989 2027 2028 1986
+f 2015 2016 2017 2018 1960 1959
+f 1998 1999 2000 2001
+f 1983 1984 1985
+f 1971 1972 1973
+f 1959 1960 1961
+f 1948 1940 1949 1950
+f 1933 1934 1935 1936 1937
+f 1892 1891 1819
+f 1915 1894 1893
+f 1929 1859 1858
+f 1813 1850 1849
+f 1864 1861 1810
+f 1873 1914 1799 1804
+f 1714 1903 1904 1711
+f 1832 1816 1819 1833
+f 1882 1842 1841 1884
+f 1873 1872 1912 1914
+f 1869 1868 1881 1882
+f 1863 1862 1883 1886
+f 1858 1857 1930 1929
+f 1855 1854 1923 1922
+f 1784 1849 1850 1779
+f 1845 1791 1876 1879
+f 1844 1843 1907 1906
+f 1838 1837 1908
+f 1827 1826 1905 1904
+f 1892 1819 1818
+f 1810 1809 1865 1864
+f 1805 1807 1913 1912
+f 1799 1798 1801 1804
+f 1776 1771 1774 1777
+f 1758 1755 1756 1759
+f 1720 1717 1718 1721
+f 1925 1926 1927 1928
+f 1900 1899 1828 1823
+f 1922 1923 1812
+f 1912 1913 1914
+f 1699 1701 1837 1836
+f 1707 1709 1905 1906
+f 1719 1902 1720
+f 1729 1731 1897 1898
+f 1739 1741 1817 1816
+f 1749 1751 1890 1891
+f 1883 1884 1841 1885
+f 1872 1873 1874 1875
+f 1862 1863 1864 1865
+f 1768 1767 1856 1815
+f 1784 1783 1848 1849
+f 1841 1842 1843 1844
+f 1828 1829 1830
+f 1812 1813 1814 1815
+f 1797 1798 1799 1800
+f 1787 1783 1786 1788
+f 1771 1772 1773 1774
+f 1757 1758 1759 1760
+f 1749 1745 1748 1750
+f 1739 1737 1738 1740
+f 1729 1727 1728 1730
+f 1717 1713 1716 1718
+f 1707 1705 1706 1708
+f 1699 1694 1693 1698 1700
+f 1160 1158 1145 1146
+f 1156 1157 1095 1081
+f 1151 1152 1137 1138
+f 1137 1139 994 1008
+f 1149 1141 1142 1155
+f 1146 1145 1108 1123
+f 1118 1133 1134 1119
+f 1114 1129 1130 1115
+f 1110 1125 1126 1111
+f 1105 1119 1120 1106
+f 1101 1115 1116 1102
+f 1097 1111 1112 1098
+f 1092 1106 1107 1093
+f 1088 1102 1103 1089
+f 1084 1098 1099 1085
+f 1143 1144 1157 1156
+f 1075 1089 1090 1076
+f 1071 1085 1086 1072
+f 1067 1081 1082 1068
+f 1062 1077 1078 1063
+f 1058 1073 1074 1059
+f 1054 1069 1070 1065 1055
+f 1049 1063 1064 1050
+f 1045 1059 1060 1046
+f 1041 1055 1056 1042
+f 1150 1149 1052 1038
+f 1031 1036 1046 1047 1032
+f 1027 1042 1043 1028
+f 1023 1038 1039 1024
+f 1018 1032 1033 1019
+f 1014 1028 1029 1015
+f 1010 1024 1025 1011
+f 1005 1019 1020 1006
+f 1001 1015 1016 1002
+f 997 1011 1012 998
+f 992 1006 1007 993
+f 988 1002 1003 989
+f 984 998 999 985
+f 1153 1154 995 981
+f 975 990 991 976
+f 971 986 987 972
+f 967 982 983 968
+f 1134 976 977 1135
+f 1130 972 973 1131
+f 1127 1126 963 968 969 964
+f 960 806 805 961 772 771
+f 813 815 767 768
+f 823 826 761 763
+f 832 836 756 758
+f 842 846 751 753
+f 856 855 747 746
+f 863 865 742 743
+f 906 905 736 735
+f 921 923 727 728
+f 803 802 723 722
+f 945 946 947 948
+f 785 784 939 940
+f 958 957 933 934
+f 925 923 924 926
+f 909 910 911 912
+f 895 896 897 898
+f 953 952 885 886
+f 876 873 874 875
+f 863 861 862 864
+f 852 850 851 853 854
+f 842 843 844 845
+f 832 833 834 835
+f 819 820 821 822
+f 813 811 812 814
+f 802 803 804
+f 795 794 791 792
+f 864 862 784 785
+f 816 814 935 779
+f 819 823 763 765
+f 852 856 746 748
+f 905 910 733 736
+f 927 878 951 803 722 725
+f 955 954 881 884
+f 946 945 791
+f 944 798 926 924
+f 783 824 822 939 937
+f 781 862 860 936 782
+f 934 933 808 807
+f 931 870 869
+f 924 922 787 944
+f 915 914 909 912
+f 907 906 901 904
+f 897 896 891 894
+f 890 889 887 888
+f 885 952 796 795
+f 880 879 775 778
+f 857 856 852 854
+f 831 830 825 828
+f 844 841 937 939 784 781
+f 799 949 877 882
+f 775 879 930
+f 788 911 908
+f 781 784 862
+f 870 931 932 872
+f 904 773 798 944 907
+f 636 634 708
+f 697 640 637
+f 720 594 591
+f 707 574 572
+f 600 597 546
+f 613 694 535 540
+f 671 670 672 675
+f 647 645 708 558
+f 621 620 622 623
+f 613 612 695 694
+f 607 608 618 621
+f 603 602 627 626
+f 591 590 721 720
+f 583 582 704 706
+f 573 572 574 577
+f 564 567 616 615
+f 562 715 678 676
+f 559 682 680
+f 555 554 673 672
+f 636 708 551
+f 546 549 601 600
+f 545 544 693 695
+f 535 538 541 540
+f 580 585 734 731
+f 598 629 742 740
+f 664 669 762 759
+f 718 719 716 717
+f 659 657 711 553
+f 706 704 705
+f 695 693 694
+f 685 683 682 684
+f 677 674 673 676
+f 665 663 664
+f 656 654 653 655
+f 646 644 643 645
+f 635 633 632 634
+f 627 623 622 624
+f 612 613 610 611
+f 602 603 600 601
+f 588 589 586 587
+f 573 571 570 572
+f 622 620 715 562
+f 711 556 557
+f 705 707 550 587
+f 537 538 535 536
+f 569 571 727 726
+f 585 584 733 734
+f 599 598 740 741
+f 635 639 747 745
+f 646 648 751 750
+f 656 658 756 755
+f 669 668 761 762
+f 677 679 767 766
+f 685 689 533 772 770
+f 683 685 770 769
+f 674 677 766 764
+f 665 664 759 760
+f 654 656 755 754
+f 644 646 750 749
+f 633 635 745 744
+f 595 599 741 739
+f 581 580 731 732
+f 566 569 726 724
+f 541 542 539 540
+f 645 643 551 708
+f 649 647 558 712
+f 566 567 564 565
+f 576 577 574 575
+f 592 593 590 591
+f 605 602 601 604
+f 616 617 614 615
+f 626 627 624 625
+f 639 635 634 636
+f 648 646 645 647
+f 658 656 655 657
+f 668 669 666 667
+f 679 677 676 678
+f 689 685 684 686
+f 643 641 640 697 551
+f 575 574 707
+f 650 649 712 713
+f 718 717 720 721
+f 661 665 760 757
+f 592 595 739 737
+f 576 581 732 729
+f 536 535 694 693
+f 543 545 617 616
+f 547 546 597 596
+f 711 670 667 553
+f 556 711 657 655
+f 715 620 619 714 559
+f 676 673 554 563 562
+f 565 564 719 718
+f 576 575 578 581
+f 584 583 586 589
+f 592 591 594 595
+f 627 602 605 623
+f 699 609 606 702
+f 611 610 701 700
+f 626 625 628 629
+f 651 650 653 654
+f 688 687 690 692
+f 687 560 536 693 544 690
+f 700 703 548 716 614 611
+f 575 707 705 578
+f 702 606 604
+f 709 563 554
+f 603 626 629 598
+f 869 866 931
+f 791 945 792
+f 871 873 887 889
+f 790 915 912
+f 828 942 834 831
+f 793 955 884
+f 929 798 773 776
+f 834 833 829 831
+f 858 857 797 943
+f 883 882 877 880
+f 953 886 876 956
+f 893 890 792 945
+f 898 947 777 774 900
+f 908 907 789 788
+f 916 915 790 789
+f 929 926 798
+f 866 864 785 931
+f 875 780 933 957
+f 938 937 841 839
+f 942 941 835 834
+f 947 946 778 777
+f 951 950 804 803
+f 952 955 793 796
+f 917 921 728 730
+f 901 906 735 738
+f 840 843 752 754
+f 802 806 960 771 723
+f 810 808 933 780
+f 860 786 936
+f 793 794 795 796
+f 805 806 807 808
+f 815 813 814 816
+f 826 823 824 827
+f 836 832 835 837
+f 846 842 845 847
+f 855 856 857 858
+f 865 863 864 866
+f 875 957 956 876
+f 887 886 885 888
+f 899 895 898 900
+f 913 914 915 916
+f 928 925 926 929
+f 810 780 935 812
+f 828 827 941 942
+f 949 950 951
+f 928 927 725 724
+f 918 917 730 729
+f 902 901 738 737
+f 861 863 743 744
+f 850 852 748 749
+f 843 842 753 752
+f 833 832 758 757
+f 820 819 765 764
+f 811 813 768 769
+f 1123 965 1148 1146
+f 1128 1127 964 969 970 962
+f 1131 973 974 1132
+f 1135 977 978 1136
+f 968 983 984 969
+f 972 987 988 973
+f 976 991 992 977
+f 981 995 996 982
+f 985 999 1000 986
+f 989 1003 1004 990
+f 1154 1152 1009 995
+f 998 1012 1013 999
+f 1002 1016 1017 1003
+f 1006 1020 1021 1007
+f 1011 1025 1026 1012
+f 1015 1029 1030 1016
+f 1019 1033 1034 1020
+f 1024 1039 1040 1025
+f 1028 1043 1044 1029
+f 1032 1047 1048 1033
+f 1038 1052 1053 1039
+f 1042 1056 1057 1043
+f 1046 1060 1061 1047
+f 1149 1155 1067 1052
+f 1055 1065 1070 1071 1056
+f 1059 1074 1075 1060
+f 1063 1078 1079 1064
+f 1068 1082 1083 1069
+f 1072 1086 1087 1073
+f 1076 1090 1091 1077
+f 1081 1095 1096 1082
+f 1085 1099 1100 1086
+f 1089 1103 1104 1090
+f 1144 1145 1158 1157
+f 1098 1112 1113 1099
+f 1102 1116 1117 1103
+f 1106 1120 1121 1107
+f 1111 1126 1127 1112
+f 1115 1130 1131 1116
+f 1119 1134 1135 1120
+f 1145 1144 1094 1108
+f 1141 1147 1037 1051
+f 1139 1140 980 994
+f 1152 1154 1139 1137
+f 1157 1158 1109 1095
+f 1080 1066 1051 1037 1022 1008 994 980 979 965 1123 1108 1094
+f 1701 1699 1700 1702
+f 1709 1707 1708 1710
+f 1719 1720 1721 1722
+f 1731 1729 1730 1732
+f 1741 1739 1740 1742
+f 1751 1749 1750 1752
+f 1761 1757 1760 1762
+f 1775 1776 1777 1778
+f 1789 1787 1788 1790
+f 1801 1802 1803 1804
+f 1816 1817 1818 1819
+f 1831 1832 1833 1834
+f 1789 1791 1845 1846
+f 1780 1779 1850 1851
+f 1764 1763 1857 1858
+f 1866 1862 1865 1867
+f 1876 1877 1878 1879
+f 1886 1883 1885 1887
+f 1745 1749 1891 1892
+f 1737 1739 1816 1832
+f 1727 1729 1898 1899
+f 1713 1717 1821 1820
+f 1705 1707 1906 1907
+f 1694 1699 1836 1909
+f 1817 1895 1894 1915 1818
+f 1851 1850 1813
+f 1896 1831 1834 1924
+f 1925 1928 1929 1930
+f 1724 1719 1722 1725
+f 1764 1761 1762 1765
+f 1780 1775 1778 1781
+f 1800 1799 1914 1913
+f 1806 1805 1877 1876
+f 1811 1810 1861 1860
+f 1828 1903 1820 1823
+f 1829 1828 1899 1898
+f 1843 1842 1880 1835 1838
+f 1906 1905 1826 1932 1844
+f 1846 1845 1926 1925
+f 1780 1851 1852 1775
+f 1772 1855 1856 1767
+f 1764 1858 1859 1761
+f 1883 1862 1866 1884
+f 1919 1871 1870 1920
+f 1875 1874 1917 1916
+f 1886 1887 1888 1755
+f 1734 1896 1897 1731
+f 1695 1910 1911 1793
+f 1910 1839 1800 1913 1807 1911
+f 1916 1921 1808 1927 1878 1875
+f 1851 1813 1812 1852
+f 1920 1870 1867
+f 1825 1932 1826
+f 1863 1886 1755 1758
+f 1938 1939 1940
+f 1951 1952 1953
+f 1962 1963 1964 1965
+f 1974 1975 1976
+f 1986 1987 1988 1989
+f 2002 2003 2004
+f 2019 1935 1934 2020
+f 1988 2029 2030 1989
+f 1945 1957 1956 2038
+f 1993 2001 2000 1994
+f 2044 2045 2046 2047
+f 2048 1966 1953 1952
+f 2051 2052 2053 1968 1970
+f 1973 1937 1980 1971
+f 1979 1975 1974 1980
+f 2019 2067 1935
+f 1939 2070 1954 1940
+f 2077 2078 2075 2079
+f 2084 2017 2016 2085
+f 1987 2088 2089 1988
+f 2052 1991 1990 2053
+f 2091 2010 2009 2092
+f 2041 2003 2002 2042
+f 2065 2064 1785 1782
+f 2057 2056 1769 1766
+f 2032 2031 1735 1732
+f 2022 2021 2093 1697 1796
+f 2094 2076 2075 2078
+f 1947 1946 2035
+f 2002 1992 2043 2042
+f 2098 2021 2008 2076
+f 2102 2101 2081 2074
+f 2105 2024 2023 2090
+f 2107 2106 2089 2087
+f 2110 2109 2095 2034
+f 2113 2036 1957 1945
+f 1944 2116 2070 1939
+f 2077 2079 2047 2046
+f 1964 2045 2040 1967
+f 2055 2117 2051 1970
+f 2063 2060 1975 1979
+f 2120 2119 2067 2019
+f 2094 2078 2080 2082
+f 1986 2090 2088 1987
+f 1999 2010 2091
+f 2120 2068 1792 1790
+f 2062 2065 1782 1781
+f 2054 2057 1766 1765
+f 2115 2116 1754 1752
+f 2112 2037 1744 1742
+f 2031 2109 1736 1735
+f 2105 2028 1718 1716
+f 2102 2103 1708 1706
+f 2121 2098 2099 1700 1698
+f 2130 2129 2128 2131 2132
+f 2140 2139 2141 2142
+f 2148 2147 2149 2150
+f 2127 2158 2159 2128
+f 2137 2162 2163 2139
+f 2145 2166 2167 2147
+f 2127 2171 2172 2158
+f 2160 2176 2177 2161
+f 2164 2180 2181 2165
+f 2168 2184 2185 2169
+f 2175 2189 2190 2176
+f 2179 2193 2194 2180
+f 2183 2197 2198 2184
+f 2188 2202 2203 2189
+f 2192 2206 2207 2193
+f 2196 2210 2211 2197
+f 2201 2215 2216 2202
+f 2205 2219 2220 2206
+f 2209 2223 2224 2225 2210
+f 2213 2228 2229 2214
+f 2218 2233 2234 2219
+f 2222 2237 2238 2223
+f 2227 2241 2242 2228
+f 2232 2246 2247 2233
+f 2236 2251 2252 2237
+f 2240 2255 2256 2241
+f 2261 2263 2264 2244
+f 2248 2268 2269 2250
+f 2253 2272 2273 2254
+f 2257 2276 2277 2258
+f 2267 2282 2283 2268
+f 2271 2286 2287 2272
+f 2275 2290 2291 2276
+f 2281 2296 2297 2282
+f 2285 2300 2301 2286
+f 2289 2304 2305 2290
+f 2295 2126 2129 2296
+f 2299 2136 2140 2300
+f 2303 2309 2146 2148 2304
+f 2308 2171 2127 2126
+f 2263 2261 2260 2312
+f 2315 2317 2318 2316
+f 2215 2201 2315 2313
+f 2244 2264 2265 2245
+f 2171 2308 2125 2124
+f 2321 2322 2323 2324 2325 2326
+f 2333 2331 2332 2334
+f 2341 2342 2343 2344
+f 2355 2351 2354 2356
+f 2365 2361 2364 2366
+f 2373 2374 2375 2376
+f 2383 2381 2382 2384
+f 2395 2396 2397 2398
+f 2411 2412 2413 2414
+f 2421 2422 2423 2424
+f 2436 2437 2438 2439
+f 2452 2453 2454 2455
+f 2425 2428 2467 2468
+f 2411 2415 2475 2476
+f 2400 2399 2482 2483
+f 2386 2385 2488 2489
+f 2430 2429 2496 2499
+f 2510 2509 2508 2470
+f 2379 2381 2517 2518
+f 2445 2369 2371 2522 2523
+f 2362 2361 2459 2524
+f 2352 2351 2528 2529
+f 2337 2339 2532 2533
+f 2329 2331 2536 2465
+f 2421 2539 2422
+f 2544 2547 2548 2549
+f 2518 2517 2453 2452
+f 2536 2535 2471 2466
+f 2342 2339 2340 2343
+f 2374 2371 2372 2375
+f 2400 2395 2398 2401
+f 2422 2434 2504 2419 2420 2423
+f 2432 2431 2502 2501
+f 2436 2549 2437
+f 2559 2442 2476 2475
+f 2532 2531 2456 2458 2455
+f 2519 2518 2552 2462 2461
+f 2468 2467 2538 2537
+f 2560 2515 2513
+f 2477 2476 2442 2441
+f 2404 2481 2482 2399
+f 2396 2443 2485 2391
+f 2386 2489 2492 2491
+f 2494 2495 2498 2497
+f 2430 2499 2547 2546
+f 2507 2506 2555 2554
+f 2374 2521 2522 2371
+f 2348 2530 2449 2345
+f 2455 2458 2525 2524 2552 2452
+f 2433 2540 2500 2505
+f 2554 2473 2507
+f 2550 2484 2483
+f 2552 2518 2452
+f 2560 2513 2469 2472
+f 2559 2558 2485 2443 2442
+f 2573 2574 2575
+f 2584 2585 2586
+f 2596 2597 2598
+f 2605 2609 2610
+f 2623 2624 2625
+f 2639 2640 2641 2642
+f 2651 2652 2653 2654
+f 2661 2662 2663 2574
+f 2667 2591 2590 2578
+f 2629 2640 2639 2626
+f 2673 2592 2591 2674
+f 2677 2570 2569 2678
+f 2561 2597 2596 2562
+f 2604 2600 2599 2602
+f 2609 2692 2693 2610
+f 2696 2613 2612 2697
+f 2701 2577 2700 2702
+f 2708 2709 2710
+f 2583 2646 2654 2699
+f 2573 2666 2574
+f 2580 2624 2623 2676
+f 2638 2627 2626 2633
+f 2675 2642 2641 2672
+f 2689 2688 2405 2402
+f 2572 2571 2387 2384
+f 2656 2655 2349 2346
+f 2611 2648 2681 2618
+f 2715 2717 2716 2714
+f 2599 2608 2602
+f 2626 2639 2633
+f 2728 2727 2722 2710
+f 2732 2731 2700 2699
+f 2658 2655 2617
+f 2660 2736 2713 2644
+f 2740 2739 2661 2725
+f 2743 2742 2575 2589
+f 2590 2678 2576 2578
+f 2640 2629 2621 2632
+f 2570 2677 2676 2623
+f 2687 2684 2565 2601
+f 2746 2692 2609 2694
+f 2667 2578 2577 2701
+f 2714 2645 2712
+f 2605 2608 2565 2564
+f 2675 2707 2634 2642
+f 2746 2747 2416 2414
+f 2686 2689 2402 2401
+f 2571 2745 2388 2387
+f 2741 2742 2378 2376
+f 2738 2739 2368 2366
+f 2735 2736 2358 2356
+f 2732 2653 2340 2338
+f 2728 2729 2332 2330
+f 2750 2751 2752 2753
+f 2764 2761 2763 2762 2765 2766
+f 2772 2771 2773 2774
+f 2780 2779 2781 2782
+f 2759 2788 2789 2762
+f 2769 2792 2793 2771
+f 2777 2796 2797 2779
+f 2786 2802 2803 2787
+f 2790 2806 2807 2791
+f 2794 2810 2811 2795
+f 2801 2815 2816 2802
+f 2805 2819 2820 2806
+f 2809 2823 2824 2810
+f 2813 2827 2828 2814
+f 2818 2832 2833 2819
+f 2822 2836 2837 2823
+f 2826 2840 2841 2827
+f 2831 2845 2846 2832
+f 2835 2849 2850 2836
+f 2839 2854 2855 2840
+f 2844 2859 2860 2845
+f 2848 2863 2864 2849
+f 2852 2867 2868 2854
+f 2858 2872 2873 2859
+f 2862 2877 2876 2878 2863
+f 2866 2881 2882 2867
+f 2870 2885 2886 2871
+f 2874 2894 2895 2875
+f 2879 2898 2899 2880
+f 2883 2902 2903 2884
+f 2893 2908 2909 2894
+f 2897 2912 2913 2898
+f 2901 2916 2917 2902
+f 2906 2921 2922 2907
+f 2911 2926 2927 2912
+f 2915 2930 2931 2916
+f 2919 2934 2935 2920
+f 2925 2758 2761 2926
+f 2929 2770 2772 2930
+f 2933 2778 2780 2934
+f 2921 2906 2939 2938
+f 2890 2941 2942 2887
+f 2947 2785 2784 2948
+f 2815 2801 2947 2945
+f 2907 2922 2923 2908
+f 2940 2888 2887 2942 2944 2946 2948 2784 2783 2751 2750 2938 2939
+f 2799 2936 2753 2752
+f 2872 2892 2893 2873
+f 2843 2829 2943 2941
+f 2943 2945 2946 2944
+f 2891 2889 2888 2940
+f 2936 2799 2755 2754
+f 2931 2937 2774 2776 2932
+f 2927 2764 2768 2928
+f 2923 2754 2757 2924
+f 2917 2932 2933 2918
+f 2913 2928 2929 2914
+f 2909 2924 2925 2910
+f 2903 2918 2919 2904
+f 2899 2914 2915 2900
+f 2895 2910 2911 2896
+f 2885 2904 2905 2886
+f 2881 2900 2901 2882
+f 2876 2896 2897 2878
+f 2889 2891 2892 2872
+f 2868 2883 2884 2869
+f 2864 2879 2880 2865
+f 2860 2874 2875 2861
+f 2855 2869 2870 2856
+f 2850 2865 2866 2851
+f 2846 2861 2862 2847
+f 2841 2856 2857 2842
+f 2837 2851 2852 2853 2838
+f 2833 2847 2848 2834
+f 2829 2843 2844 2830
+f 2824 2838 2839 2825
+f 2820 2834 2835 2821
+f 2816 2830 2831 2817
+f 2811 2825 2826 2812
+f 2807 2821 2822 2808
+f 2803 2817 2818 2804
+f 2796 2812 2813 2797
+f 2792 2808 2809 2793
+f 2788 2804 2805 2789
+f 2755 2799 2800 2786
+f 2773 2794 2795 2775
+f 2765 2790 2791 2767
+f 2755 2786 2787 2756
+f 2776 2775 2777 2778
+f 2768 2767 2769 2770
+f 2758 2757 2756 2759 2760
+f 2749 2726 2727 2328 2326
+f 2730 2731 2336 2334
+f 2733 2656 2346 2344
+f 2659 2737 2364 2363
+f 2740 2665 2372 2370
+f 2743 2744 2382 2380
+f 2682 2685 2394 2393
+f 2690 2693 2410 2409
+f 2748 2696 2420 2418
+f 2627 2638 2719
+f 2614 2718 2716 2615
+f 2722 2706 2708 2710
+f 2748 2747 2695 2647
+f 2691 2688 2603 2607
+f 2683 2745 2679 2598
+f 2592 2673 2668 2595
+f 2705 2707 2675 2674
+f 2572 2744 2698 2567
+f 2741 2664 2585 2573
+f 2738 2737 2723 2662
+f 2735 2734 2717 2715
+f 2733 2652 2651 2718
+f 2730 2729 2709 2702
+f 2726 2649 2636 2704
+f 2630 2620 2671 2670
+f 2575 2574 2663
+f 2722 2704 2703 2706
+f 2650 2649 2721 2325 2424
+f 2660 2659 2363 2360
+f 2685 2684 2397 2394
+f 2693 2692 2413 2410
+f 2669 2631 2630 2670
+f 2719 2638 2637 2720
+f 2680 2619 2618 2681
+f 2615 2716 2717 2616
+f 2712 2645 2644 2713
+f 2705 2706 2703 2707
+f 2567 2698 2582 2568
+f 2647 2695 2563
+f 2607 2603 2602 2608
+f 2601 2565 2608 2599
+f 2679 2680 2681 2596 2598
+f 2676 2594 2581 2580
+f 2672 2673 2674 2675
+f 2621 2629 2628 2622
+f 2573 2585 2584 2666
+f 2616 2657 2658 2617
+f 2647 2563 2562 2648
+f 2630 2631 2632
+f 2614 2615 2616 2617
+f 2602 2603 2604
+f 2590 2591 2592 2593
+f 2579 2580 2581
+f 2566 2567 2568
+f 2491 2514 2383 2386
+f 2453 2560 2454
+f 2548 2498 2495
+f 2479 2441 2440 2480
+f 2544 2549 2436 2555 2506 2503
+f 2538 2467 2428 2541 2435 2539
+f 2323 2538 2539 2421
+f 2362 2524 2525 2359
+f 2514 2515 2516 2383
+f 2503 2502 2545 2544
+f 2547 2499 2498 2548
+f 2511 2490 2494 2512
+f 2392 2486 2487 2389
+f 2400 2483 2484 2395
+f 2408 2479 2480 2403
+f 2474 2473 2554 2553
+f 2534 2533 2454 2560 2472
+f 2471 2470 2508 2463 2466
+f 2457 2456 2527 2526
+f 2456 2531 2448 2451
+f 2439 2438 2489 2488
+f 2434 2433 2505 2504
+f 2428 2427 2542 2541
+f 2408 2403 2406 2409
+f 2392 2389 2390 2393
+f 2352 2347 2350 2353
+f 2553 2556 2557 2558
+f 2524 2459 2462 2552
+f 2479 2478 2441
+f 2445 2523 2522 2543 2446
+f 2322 2327 2464 2537
+f 2333 2335 2534 2535
+f 2341 2345 2449 2448
+f 2355 2357 2526 2527
+f 2365 2367 2444 2460
+f 2373 2377 2519 2520
+f 2514 2511 2513 2515
+f 2504 2505 2506 2507
+f 2494 2490 2493 2495
+f 2392 2391 2485 2486
+f 2408 2407 2478 2479
+f 2417 2419 2473 2474
+f 2459 2460 2461 2462
+f 2444 2445 2446 2447
+f 2429 2430 2431 2432
+f 2417 2415 2416 2418
+f 2403 2404 2405 2406
+f 2389 2385 2388 2390
+f 2379 2377 2378 2380
+f 2369 2367 2368 2370
+f 2359 2357 2358 2360
+f 2347 2348 2349 2350
+f 2337 2335 2336 2338
+f 2329 2327 2328 2330
+f 2312 2260 2259 2314 2316 2318 2320 2156 2155 2123 2122 2310 2311
+f 2279 2294 2295 2280
+f 2187 2173 2319 2317
+f 2319 2157 2156 2320
+f 2262 2313 2314 2259
+f 2293 2278 2311 2310
+f 2305 2150 2152 2306
+f 2301 2142 2144 2302
+f 2297 2130 2133 2298
+f 2291 2306 2307 2292
+f 2287 2302 2303 2288
+f 2283 2298 2299 2284
+f 2278 2293 2294 2279
+f 2273 2288 2289 2274
+f 2269 2284 2285 2270
+f 2265 2280 2281 2266
+f 2255 2274 2275 2256
+f 2251 2270 2271 2252
+f 2246 2266 2267 2247
+f 2242 2257 2258 2243
+f 2238 2253 2254 2239
+f 2234 2249 2248 2250 2235
+f 2230 2244 2245 2231
+f 2224 2239 2240 2226
+f 2220 2235 2236 2221
+f 2216 2231 2232 2217
+f 2211 2226 2227 2212
+f 2207 2221 2222 2208
+f 2203 2217 2218 2204
+f 2198 2212 2213 2199
+f 2194 2208 2209 2195
+f 2190 2204 2205 2191
+f 2185 2199 2200 2186
+f 2181 2195 2196 2182
+f 2177 2191 2192 2178
+f 2173 2187 2188 2174
+f 2166 2182 2183 2167
+f 2162 2178 2179 2163
+f 2158 2174 2175 2159
+f 2149 2168 2169 2151
+f 2141 2164 2165 2143
+f 2131 2160 2161 2134
+f 2152 2151 2153 2154
+f 2144 2143 2145 2146
+f 2136 2133 2135 2134 2137 2138
+f 2122 2123 2124 2125
+f 2100 2101 1704 1702
+f 2104 2025 1712 1710
+f 2107 2108 1730 1728
+f 2110 2111 1740 1738
+f 2113 2114 1750 1748
+f 1943 2117 1760 1759
+f 2058 2061 1774 1773
+f 2118 2119 1788 1786
+f 2047 2079 2006 2014
+f 1977 1980 1937 1936
+f 2086 2017 2084
+f 2039 1950 1949 2073
+f 2118 2064 1981 2066
+f 2059 2056 1937 1973
+f 1942 2049 2048 1995
+f 2012 2001 1993 2004
+f 1962 2050 1948 1950
+f 2115 2114 1947 1961
+f 2112 2111 2033 2097
+f 2032 2108 2085 2016
+f 2030 2027 1989
+f 2104 2103 2072 2071
+f 2100 2099 2094 2082
+f 1998 2011 2005
+f 1971 1980 1974
+f 2087 2089 2088 2086
+f 1983 2020 2053 1990
+f 2028 2027 1721 1718
+f 1944 1943 1759 1756
+f 2061 2060 1777 1774
+f 2047 2014 2013 2044
+f 2010 1999 1998 2005
+f 1952 1996 1995 2048
+f 1945 2038 1946
+f 1955 2018 2026 2071
+f 2080 2081 2082
+f 2073 1949 2072 2074
+f 2068 1985 1984 2069
+f 1981 2064 2065 1982
+f 1976 1972 1971 1974
+f 1933 1969 1968 1934
+f 2049 1942 1941 2050
+f 2045 1964 1963 2046
+f 2001 2012 2011 1998
+f 2039 1963 1962 1950
+f 2033 2034 2035 1946
+f 2023 2024 2025 2026
+f 2011 2012 2013 2014
+f 1995 1996 1997
+f 1977 1981 1982
+f 1968 1969 1970
+f 1956 1957 1958
+f 1945 1946 1947
+f 1931 1930 1857 1815 1814
+f 1932 1885 1841 1844
+f 1924 1890 1824
+f 1922 1856 1855
+f 1926 1845 1879
+f 1805 1912 1872 1877
+f 1827 1830 1897 1896 1924 1824
+f 1720 1902 1821 1717
+f 1746 1893 1894 1743
+f 1879 1878 1927 1926
+f 1802 1871 1919 1918
+f 1866 1867 1870 1869
+f 1758 1861 1864 1863
+f 1768 1815 1857 1763
+f 1776 1853 1854 1771
+f 1849 1848 1814 1813
+f 1932 1887 1885
+f 1840 1839 1910 1909
+f 1891 1890 1924 1834 1833
+f 1904 1903 1828 1830 1827
+f 1931 1814 1848 1847
+f 1808 1921 1809
+f 1804 1803 1874 1873
+f 1794 1806 1876 1791 1792 1795
+f 1772 1767 1770 1773
+f 1746 1743 1744 1747
+f 1714 1711 1712 1715
+f 1908 1907 1843 1838
+f 1890 1889 1825 1824
+f 1916 1919 1920 1921
+f 1793 1911 1794
+f 1701 1703 1908 1837
+f 1709 1711 1904 1905
+f 1724 1723 1900 1901
+f 1734 1733 1831 1896
+f 1817 1741 1743 1894 1895
+f 1751 1753 1889 1890
+f 1882 1881 1880 1842
+f 1802 1801 1868 1871
+f 1758 1757 1860 1861
+f 1772 1771 1854 1855
+f 1783 1787 1847 1848
+f 1797 1800 1839 1840
+f 1824 1825 1826 1827
+f 1808 1809 1810 1811
+f 1793 1794 1795 1796
+f 1783 1784 1785 1786
+f 1767 1768 1769 1770
+f 1755 1753 1754 1756
+f 1745 1746 1747 1748
+f 1737 1733 1736 1738
+f 1727 1723 1726 1728
+f 1713 1714 1715 1716
+f 1705 1703 1704 1706
+f 1693 1694 1695 1696 1697 1698
+f 1159 1160 1146 1148
+f 1155 1156 1081 1067
+f 1150 1151 1138 1147
+f 1138 1137 1008 1022
+f 1143 1142 1066 1080
+f 1160 1159 966 1124
+f 1117 1122 1132 1133 1118
+f 1113 1128 1129 1114
+f 1109 1124 1125 1110
+f 1104 1118 1119 1105
+f 1100 1114 1115 1101
+f 1096 1110 1111 1097
+f 1091 1105 1106 1092
+f 1087 1101 1102 1088
+f 1083 1097 1098 1084
+f 1078 1092 1093 1079
+f 1074 1088 1089 1075
+f 1070 1084 1085 1071
+f 1142 1143 1156 1155
+f 1061 1076 1077 1062
+f 1057 1072 1073 1058
+f 1053 1068 1069 1054
+f 1048 1062 1063 1049
+f 1044 1058 1059 1045
+f 1040 1054 1055 1041
+f 1034 1049 1050 1035
+f 1030 1045 1046 1036 1031
+f 1026 1041 1042 1027
+f 1151 1150 1038 1023
+f 1017 1031 1032 1018
+f 1013 1027 1028 1014
+f 1009 1023 1024 1010
+f 1004 1018 1019 1005
+f 1000 1014 1015 1001
+f 996 1010 1011 997
+f 991 1005 1006 992
+f 987 1001 1002 988
+f 983 997 998 984
+f 966 1159 1153 981
+f 974 989 990 975
+f 970 985 986 971
+f 966 981 982 967
+f 1133 975 976 1134
+f 1129 971 972 1130
+f 1126 1125 967 968 963
+f 961 805 809 770 772
+f 815 817 766 767
+f 826 825 762 761
+f 836 838 755 756
+f 846 848 750 751
+f 855 859 745 747
+f 896 895 741 740
+f 910 909 734 733
+f 923 925 726 727
+f 956 957 958 959
+f 787 789 907 944
+f 783 937 938
+f 874 872 932 779
+f 923 921 922 924
+f 905 906 907 908
+f 891 892 893 894
+f 881 882 883 884
+f 871 867 870 872
+f 861 859 860 862
+f 850 848 849 851
+f 840 838 839 841
+f 829 830 831
+f 820 817 818 821
+f 811 809 810 812
+f 799 800 801
+f 788 789 790
+f 837 835 941 783
+f 775 776 777 778
+f 825 830 759 762
+f 865 896 740 742
+f 909 914 731 734
+f 956 959 954 953
+f 950 949 799 801
+f 945 948 894 893
+f 858 943 786
+f 940 939 822 821
+f 935 814 812
+f 779 932 818 816
+f 927 930 879 878
+f 922 921 917 920
+f 912 911 788 790
+f 904 903 774 773
+f 892 891 868 867
+f 886 887 873 876
+f 882 881 800 799
+f 874 873 871 872
+f 849 847 936 786
+f 824 823 819 822
+f 800 881 954 959
+f 894 948 897
+f 787 922 920
+f 774 903 900
+f 797 857 854
+f 858 786 860
+f 696 721 590 587 550
+f 563 624 622 562
+f 713 632 710
+f 706 586 583
+f 719 564 615
+f 545 695 612 617
+f 555 557 653 650 713 710
+f 664 663 666 669
+f 638 637 640 642
+f 615 614 716 719
+f 542 609 699 698
+f 605 604 606 607
+f 598 597 600 603
+f 588 587 590 593
+f 580 579 582 585
+f 572 570 550 707
+f 563 625 624
+f 561 560 687 686
+f 634 632 713 712 558
+f 672 670 711 557 555
+f 696 550 570 568
+f 548 703 549
+f 540 539 610 613
+f 691 543 616 567 725 722
+f 584 589 736 733
+f 638 642 748 746
+f 671 675 765 763
+f 680 678 715 559
+f 632 630 709 710
+f 700 699 702 703
+f 692 690 691
+f 683 681 680 682
+f 674 675 672 673
+f 661 662 659 660
+f 651 652 649 650
+f 643 644 642 640 641
+f 633 631 630 632
+f 621 618 619 620
+f 542 541 608 609
+f 598 599 596 597
+f 584 585 582 583
+f 571 569 568 570
+f 537 536 560 561
+f 710 709 554 555
+f 548 549 546 547
+f 692 691 722 723
+f 571 573 728 727
+f 589 588 735 736
+f 629 631 743 742
+f 639 638 746 747
+f 648 652 753 751
+f 658 662 758 756
+f 668 671 763 761
+f 679 681 768 767
+f 533 689 688 534 771 772
+f 681 683 769 768
+f 675 674 764 765
+f 662 661 757 758
+f 652 651 752 753
+f 642 644 749 748
+f 631 633 744 743
+f 593 592 737 738
+f 577 576 729 730
+f 567 566 724 725
+f 545 543 544
+f 667 666 552 553
+f 714 684 682 559
+f 569 566 565 568
+f 580 581 578 579
+f 599 595 594 596
+f 608 607 606 609
+f 537 619 618 538
+f 631 629 628 630
+f 638 639 636 637
+f 652 648 647 649
+f 662 658 657 659
+f 671 668 667 670
+f 681 679 678 680
+f 688 689 686 687
+f 700 701 698 699
+f 634 558 708
+f 686 684 714 561
+f 534 688 692 723 771
+f 651 654 754 752
+f 588 593 738 735
+f 573 577 730 728
+f 539 542 698 701
+f 544 543 691 690
+f 548 547 717 716
+f 553 552 660 659
+f 557 556 655 653
+f 714 619 537 561
+f 630 628 563 709
+f 565 696 568
+f 579 578 705 704
+f 587 586 706 705
+f 717 547 596 594 720
+f 604 601 549 702
+f 608 541 538 618
+f 612 611 614 617
+f 637 636 551 697
+f 661 660 663 665
+f 696 565 718 721
+f 701 610 539
+f 552 666 663 660
+f 704 582 579
+f 621 623 605 607
+f 703 702 549
+f 625 563 628
+f 868 891 896 865
+f 785 940 931
+f 792 890 888
+f 787 919 916 789
+f 778 946 791 794 883 880
+f 801 958 934 807 804 950
+f 807 806 802 804
+f 844 843 840 841
+f 869 868 865 866
+f 884 883 794 793
+f 885 795 792 888
+f 892 867 871 889
+f 903 902 899 900
+f 911 910 905 908
+f 919 918 913 916
+f 930 929 776 775
+f 940 821 818 932 931
+f 875 874 779 935 780
+f 783 938 839 837
+f 824 783 941 827
+f 948 947 898 897
+f 949 951 878 877
+f 959 958 801 800
+f 913 918 729 732
+f 899 902 737 739
+f 829 833 757 760
+f 777 776 773 774
+f 845 844 781 782
+f 919 787 920
+f 854 853 851 943 797
+f 809 805 808 810
+f 817 815 816 818
+f 825 826 827 828
+f 838 836 837 839
+f 848 846 847 849
+f 859 855 858 860
+f 867 868 869 870
+f 877 878 879 880
+f 892 889 890 893
+f 901 902 903 904
+f 917 918 919 920
+f 927 928 929 930
+f 847 845 782 936
+f 851 849 786 943
+f 952 953 954 955
+f 925 928 724 726
+f 914 913 732 731
+f 895 899 739 741
+f 859 861 744 745
+f 848 850 749 750
+f 838 840 754 755
+f 830 829 760 759
+f 817 820 764 766
+f 809 811 769 770
+f 1124 966 967 1125
+f 1128 962 970 971 1129
+f 1132 974 975 1133
+f 965 979 980 1140 1148
+f 969 984 985 970
+f 973 988 989 974
+f 977 992 993 978
+f 982 996 997 983
+f 986 1000 1001 987
+f 990 1004 1005 991
+f 995 1009 1010 996
+f 999 1013 1014 1000
+f 1003 1017 1018 1004
+f 1152 1151 1023 1009
+f 1012 1026 1027 1013
+f 1016 1030 1031 1017
+f 1020 1034 1035 1021
+f 1025 1040 1041 1026
+f 1029 1044 1045 1030
+f 1033 1048 1049 1034
+f 1039 1053 1054 1040
+f 1043 1057 1058 1044
+f 1047 1061 1062 1048
+f 1052 1067 1068 1053
+f 1056 1071 1072 1057
+f 1060 1075 1076 1061
+f 1051 1066 1142 1141
+f 1069 1083 1084 1070
+f 1073 1087 1088 1074
+f 1077 1091 1092 1078
+f 1082 1096 1097 1083
+f 1086 1100 1101 1087
+f 1090 1104 1105 1091
+f 1095 1109 1110 1096
+f 1099 1113 1114 1100
+f 1103 1117 1118 1104
+f 1158 1160 1124 1109
+f 1112 1127 1128 1113
+f 1116 1131 1132 1122 1117
+f 1120 1135 1136 1121
+f 1144 1143 1080 1094
+f 1147 1138 1022 1037
+f 1149 1150 1147 1141
+f 1154 1153 1140 1139
+f 1153 1159 1148 1140
+f 978 993 1007 1021 1035 1050 1064 1079 1093 1107 1121 1136
+f 1703 1701 1702 1704
+f 1711 1709 1710 1712
+f 1723 1724 1725 1726
+f 1733 1734 1735 1736
+f 1743 1741 1742 1744
+f 1753 1751 1752 1754
+f 1763 1764 1765 1766
+f 1779 1780 1781 1782
+f 1791 1789 1790 1792
+f 1805 1806 1807
+f 1820 1821 1822 1823
+f 1835 1836 1837 1838
+f 1787 1789 1846 1847
+f 1776 1775 1852 1853
+f 1757 1761 1859 1860
+f 1868 1869 1870 1871
+f 1797 1880 1881 1798
+f 1753 1755 1888 1889
+f 1746 1745 1892 1893
+f 1733 1737 1832 1831
+f 1723 1727 1899 1900
+f 1714 1713 1820 1903
+f 1703 1705 1907 1908
+f 1695 1694 1909 1910
+f 1916 1917 1918 1919
+f 1891 1833 1819
+f 1909 1836 1835 1840
+f 1696 1695 1793 1796 1697
+f 1734 1731 1732 1735
+f 1768 1763 1766 1769
+f 1784 1779 1782 1785
+f 1803 1802 1918 1917
+f 1807 1806 1794 1911
+f 1808 1811 1928 1927
+f 1823 1822 1901 1900
+f 1830 1829 1898 1897
+f 1835 1880 1797 1840
+f 1889 1888 1932 1825
+f 1846 1931 1847
+f 1853 1852 1812 1923
+f 1815 1856 1922 1812
+f 1928 1811 1860 1859 1929
+f 1867 1865 1809 1920
+f 1868 1801 1798 1881
+f 1872 1875 1878 1877
+f 1893 1892 1818 1915
+f 1724 1901 1902 1719
+f 1931 1846 1925 1930
+f 1917 1874 1803
+f 1822 1821 1902 1901
+f 1923 1854 1853
+f 1882 1884 1866 1869
+f 1921 1920 1809
+f 1887 1932 1888
+f 1941 1942 1943 1944
+f 1954 1955 1940
+f 1953 1966 1967
+f 1977 1978 1979 1980
+f 1990 1991 1951 1992 1993 1994
+f 2005 2006 2007 2008 2009 2010
+f 2008 2021 2022 2009
+f 2015 2031 2032 2016
+f 1938 1941 1944 1939
+f 2004 1993 1992 2002
+f 2040 2043 1953 1967
+f 2049 2050 1962 1965
+f 1969 2054 2055 1970
+f 1972 2058 2059 1973
+f 1978 2062 2063 1979
+f 1985 2019 2020 1983
+f 1955 2071 2072 1949 1940
+f 2077 2039 2073 2080 2078
+f 2086 2084 2085 2087
+f 2023 2086 2088 2090
+f 1996 2052 2051 1997
+f 1999 2091 2069 2000
+f 2014 2006 2005 2011
+f 2063 2062 1781 1778
+f 2055 2054 1765 1762
+f 2030 2029 1725 1722
+f 2053 2020 1934 1968
+f 2095 2015 1959 2083
+f 1978 1977 1982
+f 1958 2096 2097 2038 1956
+f 2099 2098 2076 2094
+f 2103 2102 2074 2072
+f 2028 2105 2090 1986
+f 2108 2107 2087 2085
+f 2111 2110 2034 2033
+f 2114 2113 1945 1947
+f 2050 1941 1938 1948
+f 2000 2069 1984 1994
+f 2049 1965 1966 2048
+f 2057 2054 1969 1933
+f 2065 2062 1978 1982
+f 2068 2120 2019 1985
+f 2034 2095 2083 2035
+f 2097 2033 1946 2038
+f 2041 2044 2013 2003
+f 2119 2120 1790 1788
+f 2060 2063 1778 1777
+f 2117 2055 1762 1760
+f 2114 2115 1752 1750
+f 2111 2112 1742 1740
+f 2108 2032 1732 1730
+f 2024 2105 1716 1715
+f 2101 2102 1706 1704
+f 2093 2021 2098 2121 1698 1697
+f 2133 2130 2132 2131 2134 2135
+f 2142 2141 2143 2144
+f 2150 2149 2151 2152
+f 2128 2159 2160 2131
+f 2139 2163 2164 2141
+f 2147 2167 2168 2149
+f 2172 2173 2174 2158
+f 2161 2177 2178 2162
+f 2165 2181 2182 2166
+f 2169 2185 2186 2170
+f 2176 2190 2191 2177
+f 2180 2194 2195 2181
+f 2184 2198 2199 2185
+f 2189 2203 2204 2190
+f 2193 2207 2208 2194
+f 2197 2211 2212 2198
+f 2202 2216 2217 2203
+f 2206 2220 2221 2207
+f 2210 2225 2224 2226 2211
+f 2215 2230 2231 2216
+f 2219 2234 2235 2220
+f 2223 2238 2239 2224
+f 2228 2242 2243 2229
+f 2233 2247 2248 2249 2234
+f 2237 2252 2253 2238
+f 2241 2256 2257 2242
+f 2245 2265 2266 2246
+f 2250 2269 2270 2251
+f 2254 2273 2274 2255
+f 2263 2278 2279 2264
+f 2268 2283 2284 2269
+f 2272 2287 2288 2273
+f 2276 2291 2292 2277
+f 2282 2297 2298 2283
+f 2286 2301 2302 2287
+f 2290 2305 2306 2291
+f 2296 2129 2130 2297
+f 2300 2140 2142 2301
+f 2304 2148 2150 2305
+f 2125 2293 2310 2122
+f 2230 2262 2261 2244
+f 2317 2319 2320 2318
+f 2201 2187 2317 2315
+f 2264 2279 2280 2265
+f 2308 2294 2293 2125
+f 2327 2322 2321 2326 2328
+f 2335 2333 2334 2336
+f 2345 2341 2344 2346
+f 2357 2355 2356 2358
+f 2367 2365 2366 2368
+f 2377 2373 2376 2378
+f 2385 2386 2387 2388
+f 2399 2400 2401 2402
+f 2415 2411 2414 2416
+f 2425 2426 2427 2428
+f 2440 2441 2442 2443
+f 2456 2457 2458
+f 2469 2470 2471 2472
+f 2412 2411 2476 2477
+f 2396 2395 2484 2443
+f 2490 2491 2492 2493
+f 2500 2501 2502 2503
+f 2511 2512 2469 2513
+f 2377 2379 2518 2519
+f 2367 2369 2445 2444
+f 2357 2359 2525 2526
+f 2347 2530 2348
+f 2335 2337 2533 2534
+f 2327 2329 2465 2464
+f 2540 2541 2542
+f 2550 2551 2440
+f 2528 2527 2456 2451
+f 2553 2554 2555 2556
+f 2348 2345 2346 2349
+f 2386 2383 2384 2387
+f 2404 2399 2402 2405
+f 2427 2426 2429 2432
+f 2433 2435 2541 2540
+f 2438 2437 2493 2492
+f 2520 2447 2446
+f 2455 2454 2533 2532
+f 2466 2465 2536
+f 2472 2471 2535 2534
+f 2473 2419 2504 2507
+f 2412 2477 2478 2407
+f 2483 2482 2551 2550
+f 2486 2485 2558 2557
+f 2491 2490 2511 2514
+f 2497 2496 2509 2510
+f 2501 2500 2540 2542
+f 2510 2470 2469 2512
+f 2460 2444 2447 2461
+f 2342 2531 2532 2339
+f 2501 2542 2427 2432
+f 2492 2489 2438
+f 2441 2478 2477
+f 2557 2487 2486
+f 2543 2522 2521
+f 2520 2519 2447
+f 2561 2562 2563 2564 2565
+f 2576 2568 2577 2578
+f 2587 2588 2589
+f 2599 2600 2601
+f 2611 2612 2613
+f 2626 2627 2628 2629
+f 2643 2644 2645 2646 2588 2587
+f 2617 2655 2656 2614
+f 2585 2664 2665 2586
+f 2622 2612 2611 2618
+f 2668 2669 2670 2671
+f 2594 2593 2592 2595
+f 2625 2571 2570 2623
+f 2565 2684 2685 2561
+f 2603 2688 2689 2604
+f 2694 2609 2605 2564
+f 2568 2576 2566
+f 2635 2703 2704 2636
+f 2587 2589 2575 2663 2711
+f 2714 2651 2654 2646 2645
+f 2564 2563 2695 2694
+f 2619 2580 2579
+f 2631 2641 2640 2632
+f 2696 2697 2719 2720 2423 2420
+f 2687 2686 2401 2398
+f 2665 2664 2375 2372
+f 2653 2652 2343 2340
+f 2702 2709 2708 2701
+f 2698 2589 2588 2582
+f 2671 2620 2579 2581
+f 2650 2720 2637
+f 2729 2728 2710 2709
+f 2653 2732 2699 2654
+f 2734 2657 2616 2717
+f 2737 2659 2643 2723
+f 2665 2740 2725 2724 2586
+f 2744 2743 2589 2698
+f 2674 2591 2667 2705
+f 2672 2669 2668 2673
+f 2745 2571 2625 2679
+f 2689 2686 2600 2604
+f 2747 2746 2694 2695
+f 2634 2707 2703 2635
+f 2582 2588 2646 2583
+f 2580 2619 2680 2624
+f 2720 2650 2424 2423
+f 2692 2746 2414 2413
+f 2684 2687 2398 2397
+f 2744 2572 2384 2382
+f 2664 2741 2376 2375
+f 2737 2738 2366 2364
+f 2655 2658 2350 2349
+f 2731 2732 2338 2336
+f 2727 2728 2330 2328
+f 2754 2755 2756 2757
+f 2764 2766 2765 2767 2768
+f 2774 2773 2775 2776
+f 2751 2783 2784 2785 2752
+f 2762 2789 2790 2765
+f 2771 2793 2794 2773
+f 2779 2797 2798 2781
+f 2787 2803 2804 2788
+f 2791 2807 2808 2792
+f 2795 2811 2812 2796
+f 2802 2816 2817 2803
+f 2806 2820 2821 2807
+f 2810 2824 2825 2811
+f 2815 2829 2830 2816
+f 2819 2833 2834 2820
+f 2823 2837 2838 2824
+f 2827 2841 2842 2828
+f 2832 2846 2847 2833
+f 2836 2850 2851 2837
+f 2840 2855 2856 2841
+f 2845 2860 2861 2846
+f 2849 2864 2865 2850
+f 2854 2868 2869 2855
+f 2859 2873 2874 2860
+f 2863 2878 2879 2864
+f 2867 2882 2883 2868
+f 2887 2888 2889 2890
+f 2875 2895 2896 2876
+f 2880 2899 2900 2881
+f 2884 2903 2904 2885
+f 2894 2909 2910 2895
+f 2898 2913 2914 2899
+f 2902 2917 2918 2903
+f 2908 2923 2924 2909
+f 2912 2927 2928 2913
+f 2916 2931 2932 2917
+f 2922 2936 2754 2923
+f 2926 2761 2764 2927
+f 2930 2772 2774 2937 2931
+f 2934 2780 2782 2935
+f 2906 2891 2940 2939
+f 2941 2943 2944 2942
+f 2858 2843 2941 2890
+f 2801 2800 2785 2947
+f 2800 2799 2752 2785
+f 2781 2798 2814 2828 2842 2857 2871 2886 2905 2920 2935 2782
+f 2734 2735 2356 2354 2353 2657
+g post
+f 4422 4440 4342
+f 4147 4134 4436
+f 4163 4176 4435
+f 4324 4325 4432 4433
+f 4265 4252 4428
+f 4222 4234 4427
+f 4205 4206 4424 4425
+f 4023 4024 4420 4421
+f 4085 4070 4416
+f 4401 4400 4218 4219
+f 4396 4395 4234 4233
+f 4392 4399 4230 4229
+f 4380 4379 4261 4260
+f 4383 4382 4308 4309
+f 4386 4385 4323 4322
+f 4373 4352 4006 4007
+f 4361 4362 4010 4011
+f 4369 4370 4020 4019
+f 4367 4365 4066 4067
+f 4346 4345 4083 4082
+f 4354 4353 4128 4129
+f 4358 4357 4132 4133
+f 4409 4408 4173 4172
+f 4413 4412 4144 4143
+f 4340 3991 3990 4341
+f 4336 3995 3994 4337
+f 4332 3999 3998 4333
+f 4329 3986 3985 4343 4330
+f 4325 4342 4440 3989 4326
+f 4387 4338 4339 4386
+f 4317 4334 4335 4318
+f 3927 3982 4331 4314
+f 4308 4321 4322 4309
+f 4304 4317 4318 4305
+f 3882 3927 4314 4301
+f 4297 4327 4328 4298
+f 4384 4375 4294 4293
+f 4390 4381 4290 4289
+f 4285 4302 4303 4286
+f 4280 4293 4294 4281
+f 4276 4289 4290 4277
+f 4272 4285 4286 4273
+f 4269 4299 4300 4270
+f 4265 4282 4295 4296 4266
+f 4379 4278 4279 4378
+f 4257 4274 4275 4258
+f 3743 3798 4271 4254
+f 4248 4261 4262 4249
+f 4244 4257 4258 4245
+f 3716 3743 4254 4241
+f 4237 4267 4268 4238
+f 4396 4250 4251 4395
+f 4392 4246 4247 4399
+f 4225 4242 4243 4226
+f 4221 4233 4234 4222
+f 4217 4229 4230 4218
+f 4213 4225 4226 4214
+f 4210 4239 4240 4211
+f 4206 4223 4235 4236 4207
+f 4401 4402 4203 4202
+f 4198 4215 4216 4199
+f 3576 3631 4212 4195
+f 4190 4202 4203 4191
+f 4186 4198 4199 4187
+f 3548 3576 4195 4183
+f 4179 4208 4209 4180
+f 4406 4192 4193 4405
+f 4394 4188 4189 4409
+f 4167 4184 4185 4168
+f 4162 4175 4176 4163
+f 4158 4171 4172 4159
+f 4154 4167 4168 4155
+f 4151 4181 4182 4165 4152
+f 4147 4164 4177 4178 4148
+f 4413 4160 4161 4412
+f 4139 4156 4157 4140
+f 3409 3464 4153 4136
+f 4130 4143 4144 4131
+f 4126 4139 4140 4127
+f 3373 3409 4136 4123
+f 4119 4135 4149 4150 4120
+f 4357 4358 4116 4115
+f 4353 4354 4112 4111
+f 4107 4124 4125 4108
+f 4100 4115 4116 4101
+f 4096 4111 4112 4097
+f 4092 4107 4108 4093
+f 4089 4121 4122 4105 4090
+f 4085 4102 4117 4118 4086
+f 4347 4098 4099 4346
+f 4077 4094 4095 4078
+f 3235 3290 4091 4074
+f 4066 4081 4082 4067
+f 4062 4077 4078 4063
+f 3204 3235 4074 4059
+f 4055 4087 4088 4071 4056
+f 4364 4359 4052 4051
+f 4350 4366 4048 4047
+f 4043 4060 4061 4044
+f 4039 4051 4052 4040
+f 4035 4047 4048 4036
+f 4031 4043 4044 4032
+f 4028 4057 4058 4029
+f 4024 4041 4053 4054 4025
+f 4370 4037 4038 4368
+f 4016 4033 4034 4017
+f 3060 3115 4030 4013
+f 4008 4020 4021 4009
+f 4004 4016 4017 4005
+f 3030 3060 4013 4001
+f 3988 4026 4027 3987
+f 4362 4361 3990 3991
+f 4352 4373 3994 3995
+f 3999 4002 4003 3998
+f 3772 3717 3690 3635 3605 3550 3522 3467 3438 3383 3347 3292 3264 3209 3178 3123 3089 3034 3004 3003 3956 3901 3856 3801
+f 2980 3979 3978 2981
+f 2984 3975 3974 2985
+f 2988 3971 3970 2989
+f 2992 3967 3966 2993
+f 2996 3963 3962 2997
+f 3000 3959 3958 3001
+f 2951 2950 3954 3953
+f 2955 2954 3984 3950 3949
+f 2959 2958 3946 3945
+f 2963 2962 3942 3941
+f 2967 2966 3938 3937
+f 2971 2970 3934 3933
+f 2975 2974 3930 3929
+f 3980 3925 3924 3979
+f 3976 3921 3920 3975
+f 3972 3917 3916 3971
+f 3968 3913 3912 3967
+f 3964 3909 3908 3963
+f 3960 3905 3904 3959
+f 3927 3882 3881 3926
+f 3923 3878 3877 3922
+f 3919 3874 3873 3918
+f 3915 3870 3869 3914
+f 3911 3866 3865 3910
+f 3907 3862 3861 3906
+f 3903 3858 3857 3902
+f 3952 3953 3899 3853 3852 3898
+f 3948 3949 3895 3849 3848 3894
+f 3944 3945 3892 3845 3844
+f 3940 3941 3890 3841 3840 3889
+f 3936 3937 3887 3837 3836 3886
+f 3932 3933 3833 3832
+f 3928 3929 3884 3829 3828 3883
+f 3879 3824 3823 3878
+f 3875 3820 3819 3874
+f 3871 3816 3815 3870
+f 3867 3812 3811 3866
+f 3863 3808 3807 3862
+f 3859 3804 3803 3858
+f 3826 3797 3796 3825
+f 3822 3793 3792 3821
+f 3818 3789 3788 3817
+f 3814 3785 3784 3813
+f 3810 3781 3780 3809
+f 3806 3777 3776 3805
+f 3802 3773 3772 3801
+f 3851 3852 3768 3767 3800
+f 3847 3848 3764 3763
+f 3843 3844 3760 3759
+f 3839 3840 3756 3755
+f 3835 3836 3752 3751
+f 3831 3832 3748 3747
+f 3798 3743 3742 3797
+f 3794 3739 3738 3793
+f 3790 3735 3734 3789
+f 3786 3731 3730 3785
+f 3782 3727 3726 3781
+f 3778 3723 3722 3777
+f 3774 3719 3718 3773
+f 3741 3714 3713 3740
+f 3737 3710 3709 3736
+f 3733 3706 3705 3732
+f 3729 3702 3701 3728
+f 3725 3698 3697 3724
+f 3721 3694 3693 3720
+f 3770 3771 3689 3688
+f 3766 3767 3685 3684
+f 3762 3763 3681 3680
+f 3758 3759 3677 3676
+f 3754 3755 3673 3672
+f 3750 3751 3669 3668
+f 3746 3747 3665 3664
+f 3715 3660 3659 3714
+f 3711 3656 3655 3710
+f 3707 3652 3651 3706
+f 3703 3648 3647 3702
+f 3699 3644 3643 3698
+f 3695 3640 3639 3694
+f 3691 3636 3635 3690
+f 3658 3628 3627 3657
+f 3654 3624 3623 3653
+f 3650 3620 3619 3649
+f 3646 3616 3615 3645
+f 3642 3612 3611 3641
+f 3638 3608 3607 3637
+f 3687 3688 3634 3603 3602
+f 3683 3684 3599 3598
+f 3679 3680 3595 3594
+f 3675 3676 3591 3590
+f 3671 3672 3587 3586
+f 3667 3668 3583 3582
+f 3663 3664 3579 3578
+f 3629 3574 3573 3628
+f 3625 3570 3569 3624
+f 3621 3566 3565 3620
+f 3617 3562 3561 3616
+f 3613 3558 3557 3612
+f 3609 3554 3553 3608
+f 3576 3548 3547 3575
+f 3572 3544 3543 3571
+f 3568 3540 3539 3567
+f 3564 3536 3535 3563
+f 3560 3532 3531 3559
+f 3556 3528 3527 3555
+f 3552 3524 3523 3551
+f 3601 3602 3519 3518
+f 3597 3598 3515 3514
+f 3593 3594 3511 3510
+f 3589 3590 3507 3506
+f 3585 3586 3503 3502
+f 3581 3582 3499 3498
+f 3578 3495 3494 3577
+f 3545 3490 3489 3544
+f 3541 3486 3485 3540
+f 3537 3482 3481 3536
+f 3533 3478 3477 3532
+f 3529 3474 3473 3528
+f 3525 3470 3469 3524
+f 3492 3463 3462 3491
+f 3488 3459 3458 3487
+f 3484 3455 3454 3483
+f 3480 3451 3450 3479
+f 3476 3447 3446 3475
+f 3472 3443 3442 3471
+f 3468 3439 3438 3467
+f 3517 3518 3434 3433 3466
+f 3513 3514 3430 3429
+f 3509 3510 3426 3425
+f 3505 3506 3422 3421
+f 3501 3502 3418 3417
+f 3497 3498 3414 3413
+f 3464 3409 3408 3463
+f 3460 3405 3404 3459
+f 3456 3401 3400 3455
+f 3452 3397 3396 3451
+f 3448 3393 3392 3447
+f 3444 3389 3388 3443
+f 3440 3385 3384 3439
+f 3407 3371 3370 3406
+f 3403 3367 3366 3402
+f 3399 3363 3362 3398
+f 3395 3359 3358 3394
+f 3391 3355 3354 3390
+f 3387 3351 3350 3386
+f 3436 3437 3346 3345
+f 3432 3433 3382 3342 3341 3381
+f 3428 3429 3338 3337
+f 3424 3425 3334 3333
+f 3420 3421 3377 3330 3329 3376
+f 3416 3417 3326 3325
+f 3412 3413 3322 3321
+f 3372 3317 3316 3371
+f 3368 3313 3312 3367
+f 3364 3309 3308 3363
+f 3360 3305 3304 3359
+f 3356 3301 3300 3355
+f 3352 3297 3296 3351
+f 3348 3293 3292 3347
+f 3315 3287 3286 3314
+f 3311 3283 3282 3310
+f 3307 3279 3278 3306
+f 3303 3275 3274 3302
+f 3299 3271 3270 3298
+f 3295 3267 3266 3294
+f 3344 3345 3262 3261
+f 3340 3341 3258 3257
+f 3336 3337 3254 3253
+f 3332 3333 3250 3249
+f 3328 3329 3246 3245
+f 3324 3325 3242 3241
+f 3320 3321 3238 3237
+f 3288 3233 3232 3287
+f 3284 3229 3228 3283
+f 3280 3225 3224 3279
+f 3276 3221 3220 3275
+f 3272 3217 3216 3271
+f 3268 3213 3212 3267
+f 3235 3204 3203 3234
+f 3231 3200 3199 3230
+f 3227 3196 3195 3226
+f 3223 3192 3191 3222
+f 3219 3188 3187 3218
+f 3215 3184 3183 3214
+f 3211 3180 3179 3210
+f 3260 3261 3175 3174
+f 3256 3257 3171 3170
+f 3252 3253 3167 3166
+f 3248 3249 3163 3162
+f 3244 3245 3159 3158
+f 3240 3241 3155 3154
+f 3236 3237 3151 3150 3205
+f 3201 3146 3145 3200
+f 3197 3142 3141 3196
+f 3193 3138 3137 3192
+f 3189 3134 3133 3188
+f 3185 3130 3129 3184
+f 3181 3126 3125 3180
+f 3148 3114 3113 3147
+f 3144 3110 3109 3143
+f 3140 3106 3105 3139
+f 3136 3102 3101 3135
+f 3132 3098 3097 3131
+f 3128 3094 3093 3127
+f 3124 3090 3089 3123
+f 3173 3174 3085 3084 3122
+f 3169 3170 3081 3080
+f 3165 3166 3077 3076 3120
+f 3161 3162 3073 3072
+f 3157 3158 3116 3069 3068
+f 3153 3154 3065 3064
+f 3115 3060 3059 3114
+f 3111 3056 3055 3110
+f 3107 3052 3051 3106
+f 3103 3048 3047 3102
+f 3099 3044 3043 3098
+f 3095 3040 3039 3094
+f 3091 3036 3035 3090
+f 3058 3028 3027 3057
+f 3054 3024 3023 3053
+f 3050 3020 3019 3049
+f 3046 3016 3015 3045
+f 3042 3012 3011 3041
+f 3038 3008 3007 3037
+f 3087 3088 2949 2950
+f 3083 3084 3033 2953 2954
+f 3079 3080 2957 2958
+f 3075 3076 2961 2962
+f 3071 3072 2965 2966
+f 3067 3068 2969 2970
+f 3063 3064 2973 2974 3031
+f 3029 2978 2979 3028
+f 3025 2982 2983 3024
+f 3021 2986 2987 3020
+f 3017 2990 2991 3016
+f 3013 2994 2995 3012
+f 3009 2998 2999 3008
+f 3005 3002 3003 3004
+f 3008 2999 3000 3007
+f 3012 2995 2996 3011
+f 3016 2991 2992 3015
+f 3020 2987 2988 3019
+f 3024 2983 2984 3023
+f 3028 2979 2980 3027
+f 3062 3063 3031 2974 2975
+f 3066 3067 2970 2971
+f 3070 3071 2966 2967
+f 3074 3075 2962 2963
+f 3078 3079 2958 2959
+f 3082 3083 2954 2955 3032
+f 3086 3087 2950 2951
+f 3037 3007 3006 3036
+f 3041 3011 3010 3040
+f 3045 3015 3014 3044
+f 3049 3019 3018 3048
+f 3053 3023 3022 3052
+f 3057 3027 3026 3056
+f 3090 3035 3034 3089
+f 3094 3039 3038 3093
+f 3098 3043 3042 3097
+f 3102 3047 3046 3101
+f 3106 3051 3050 3105
+f 3110 3055 3054 3109
+f 3114 3059 3058 3113
+f 3152 3153 3064 3063
+f 3156 3157 3068 3067
+f 3160 3161 3072 3071
+f 3164 3165 3120 3076 3075 3119
+f 3168 3169 3080 3079
+f 3172 3173 3122 3084 3083 3121
+f 3176 3177 3088 3087
+f 3127 3093 3092 3126
+f 3131 3097 3096 3130
+f 3135 3101 3100 3134
+f 3139 3105 3104 3138
+f 3143 3109 3108 3142
+f 3147 3113 3112 3146
+f 3180 3125 3124 3179
+f 3184 3129 3128 3183
+f 3188 3133 3132 3187
+f 3192 3137 3136 3191
+f 3196 3141 3140 3195
+f 3200 3145 3144 3199
+f 3204 3149 3148 3203
+f 3239 3240 3154 3153 3206
+f 3243 3244 3158 3157
+f 3247 3248 3162 3161
+f 3251 3252 3166 3165
+f 3255 3256 3170 3169
+f 3259 3260 3174 3173 3208
+f 3210 3179 3178 3209
+f 3214 3183 3182 3213
+f 3218 3187 3186 3217
+f 3222 3191 3190 3221
+f 3226 3195 3194 3225
+f 3230 3199 3198 3229
+f 3234 3203 3202 3233
+f 3267 3212 3211 3266
+f 3271 3216 3215 3270
+f 3275 3220 3219 3274
+f 3279 3224 3223 3278
+f 3283 3228 3227 3282
+f 3287 3232 3231 3286
+f 3319 3320 3237 3236 3291
+f 3323 3324 3241 3240
+f 3327 3328 3245 3244
+f 3331 3332 3249 3248
+f 3335 3336 3253 3252
+f 3339 3340 3257 3256
+f 3343 3344 3261 3260
+f 3294 3266 3265 3293
+f 3298 3270 3269 3297
+f 3302 3274 3273 3301
+f 3306 3278 3277 3305
+f 3310 3282 3281 3309
+f 3314 3286 3285 3313
+f 3318 3290 3289 3317
+f 3351 3296 3295 3350
+f 3355 3300 3299 3354
+f 3359 3304 3303 3358
+f 3363 3308 3307 3362
+f 3367 3312 3311 3366
+f 3371 3316 3315 3370
+f 3411 3412 3321 3320
+f 3415 3416 3325 3324
+f 3419 3420 3376 3329 3328 3375
+f 3423 3424 3333 3332 3379
+f 3427 3428 3337 3336
+f 3431 3432 3381 3341 3340 3380
+f 3435 3436 3345 3344
+f 3386 3350 3349 3385
+f 3390 3354 3353 3389
+f 3394 3358 3357 3393
+f 3398 3362 3361 3397
+f 3402 3366 3365 3401
+f 3406 3370 3369 3405
+f 3439 3384 3383 3438
+f 3443 3388 3387 3442
+f 3447 3392 3391 3446
+f 3451 3396 3395 3450
+f 3455 3400 3399 3454
+f 3459 3404 3403 3458
+f 3463 3408 3407 3462
+f 3496 3497 3413 3412
+f 3500 3501 3417 3416
+f 3504 3505 3421 3420
+f 3508 3509 3425 3424
+f 3512 3513 3429 3428
+f 3516 3517 3466 3433 3432
+f 3520 3521 3437 3436
+f 3471 3442 3441 3470
+f 3475 3446 3445 3474
+f 3479 3450 3449 3478
+f 3483 3454 3453 3482
+f 3487 3458 3457 3486
+f 3491 3462 3461 3490
+f 3524 3469 3468 3523
+f 3528 3473 3472 3527
+f 3532 3477 3476 3531
+f 3536 3481 3480 3535
+f 3540 3485 3484 3539
+f 3544 3489 3488 3543
+f 3548 3493 3492 3547
+f 3580 3581 3498 3497
+f 3584 3585 3502 3501
+f 3588 3589 3506 3505
+f 3592 3593 3510 3509
+f 3596 3597 3514 3513
+f 3600 3601 3518 3517
+f 3551 3523 3522 3550
+f 3555 3527 3526 3554
+f 3559 3531 3530 3558
+f 3563 3535 3534 3562
+f 3567 3539 3538 3566
+f 3571 3543 3542 3570
+f 3575 3547 3546 3574
+f 3608 3553 3552 3607
+f 3612 3557 3556 3611
+f 3616 3561 3560 3615
+f 3620 3565 3564 3619
+f 3624 3569 3568 3623
+f 3628 3573 3572 3627
+f 3663 3578 3577 3662
+f 3666 3667 3582 3581
+f 3670 3671 3586 3585 3632
+f 3674 3675 3590 3589
+f 3678 3679 3594 3593
+f 3682 3683 3598 3597 3633
+f 3686 3687 3602 3601
+f 3637 3607 3606 3636
+f 3641 3611 3610 3640
+f 3645 3615 3614 3644
+f 3649 3619 3618 3648
+f 3653 3623 3622 3652
+f 3657 3627 3626 3656
+f 3661 3631 3630 3660
+f 3694 3639 3638 3693
+f 3698 3643 3642 3697
+f 3702 3647 3646 3701
+f 3706 3651 3650 3705
+f 3710 3655 3654 3709
+f 3714 3659 3658 3713
+f 3745 3746 3664 3663
+f 3749 3750 3668 3667
+f 3753 3754 3672 3671
+f 3757 3758 3676 3675
+f 3761 3762 3680 3679
+f 3765 3766 3684 3683
+f 3769 3770 3688 3687
+f 3720 3693 3692 3719
+f 3724 3697 3696 3723
+f 3728 3701 3700 3727
+f 3732 3705 3704 3731
+f 3736 3709 3708 3735
+f 3740 3713 3712 3739
+f 3773 3718 3717 3772
+f 3777 3722 3721 3776
+f 3781 3726 3725 3780
+f 3785 3730 3729 3784
+f 3789 3734 3733 3788
+f 3793 3738 3737 3792
+f 3797 3742 3741 3796
+f 3830 3831 3747 3746
+f 3834 3835 3751 3750
+f 3838 3839 3755 3754
+f 3842 3843 3759 3758
+f 3846 3847 3763 3762
+f 3850 3851 3800 3767 3766 3799
+f 3854 3855 3771 3770
+f 3805 3776 3775 3804
+f 3809 3780 3779 3808
+f 3813 3784 3783 3812
+f 3817 3788 3787 3816
+f 3821 3792 3791 3820
+f 3825 3796 3795 3824
+f 3858 3803 3802 3857
+f 3862 3807 3806 3861
+f 3866 3811 3810 3865
+f 3870 3815 3814 3869
+f 3874 3819 3818 3873
+f 3878 3823 3822 3877
+f 3882 3827 3826 3881
+f 3931 3932 3832 3831
+f 3935 3936 3886 3836 3835 3885
+f 3939 3940 3889 3840 3839 3888
+f 3943 3944 3844 3843
+f 3947 3948 3894 3848 3847 3893
+f 3951 3952 3898 3852 3851 3897
+f 3902 3857 3856 3901
+f 3906 3861 3860 3905
+f 3910 3865 3864 3909
+f 3914 3869 3868 3913
+f 3918 3873 3872 3917
+f 3922 3877 3876 3921
+f 3926 3881 3880 3925
+f 3959 3904 3903 3958
+f 3963 3908 3907 3962
+f 3967 3912 3911 3966
+f 3971 3916 3915 3970
+f 3975 3920 3919 3974
+f 3979 3924 3923 3978
+f 2976 2975 3929 3928 3983
+f 2972 2971 3933 3932
+f 2968 2967 3937 3936
+f 2964 2963 3941 3940
+f 2960 2959 3945 3944
+f 2956 2955 3949 3948
+f 2952 2951 3953 3952
+f 3001 3958 3957 3002
+f 2997 3962 3961 2998
+f 2993 3966 3965 2994
+f 2989 3970 3969 2990
+f 2985 3974 3973 2986
+f 2981 3978 3977 2982
+f 2977 3982 3981 2978
+f 4000 4001 4002 3999
+f 3995 3996 4005 4006 4352
+f 4371 4362 3991 3992
+f 3989 4025 4026 3988
+f 3985 4029 3061 2976
+f 4003 4015 4016 4004
+f 4007 4019 4020 4008
+f 4012 4011 4421 4420
+f 4015 4032 4033 4016
+f 4369 4036 4037 4370
+f 4023 4360 4040 4041 4024
+f 4027 4056 4057 4028
+f 4030 4042 4043 4031
+f 4034 4046 4047 4035
+f 4038 4050 4051 4039
+f 4042 4059 4060 4043
+f 4047 4046 4063 4064 4350
+f 4367 4364 4051 4050
+f 4054 4086 4087 4055
+f 4058 4073 4090 3236 3205 3150
+f 4061 4076 4077 4062
+f 4065 4080 4081 4066
+f 4070 4069 4417 4416
+f 4076 4093 4094 4077
+f 4348 4097 4098 4347
+f 4084 4344 4101 4102 4085
+f 4088 4104 4120 4121 4089
+f 4091 4106 4107 4092
+f 4095 4110 4111 4096
+f 4099 4114 4115 4100
+f 4106 4123 4124 4107
+f 4111 4110 4127 4128 4353
+f 4356 4357 4115 4114
+f 4118 4148 4149 4135 4119
+f 4122 4152 3410 3319
+f 4125 4138 4139 4126
+f 4129 4142 4143 4130
+f 4134 4133 4437 4436
+f 4138 4155 4156 4139
+f 4414 4159 4160 4413
+f 4146 4410 4163 4164 4147
+f 4150 4180 4181 4151
+f 4153 4166 4167 4154
+f 4157 4170 4171 4158
+f 4161 4174 4175 4162
+f 4166 4183 4184 4167
+f 4171 4170 4187 4188 4394
+f 4407 4191 4192 4406
+f 4178 4207 4208 4179
+f 4182 4211 3577 3494
+f 4185 4197 4198 4186
+f 4189 4201 4202 4190
+f 4194 4193 4425 4424
+f 4197 4214 4215 4198
+f 4400 4401 4202 4201
+f 4205 4404 4222 4223 4206
+f 4209 4238 4239 4210
+f 4212 4224 4225 4213
+f 4216 4228 4229 4217
+f 4220 4232 4233 4221
+f 4224 4241 4242 4225
+f 4229 4228 4245 4246 4392
+f 4397 4249 4250 4396
+f 4236 4266 4267 4237
+f 4240 4270 3744 3662
+f 4243 4256 4257 4244
+f 4247 4260 4261 4248
+f 4252 4251 4429 4428
+f 4256 4273 4274 4257
+f 4380 4277 4278 4379
+f 4264 4376 4281 4282 4265
+f 4268 4298 4299 4269
+f 4271 4284 4285 4272
+f 4275 4288 4289 4276
+f 4279 4292 4293 4280
+f 4284 4301 4302 4285
+f 4289 4288 4305 4306 4390
+f 4383 4384 4293 4292
+f 4296 4326 4327 4297
+f 4300 4313 4330 3928 3883 3828
+f 4303 4316 4317 4304
+f 4307 4320 4321 4308
+f 4312 4311 4433 4432
+f 4316 4333 4334 4317
+f 4388 4337 4338 4387
+f 4324 4374 4341 4342 4325
+f 4328 3987 3986 4329
+f 4331 4000 3999 4332
+f 4335 3996 3995 4336
+f 4339 3992 3991 4340
+f 4414 4413 4143 4142
+f 4394 4409 4172 4171
+f 4406 4405 4176 4175
+f 4355 4354 4129 4130
+f 4347 4346 4082 4081
+f 4364 4367 4067 4068
+f 4351 4369 4019 4018
+f 4363 4360 4023 4022
+f 4372 4373 4007 4008
+f 4387 4386 4322 4321
+f 4384 4383 4309 4310
+f 4391 4380 4260 4259
+f 4377 4376 4264 4263
+f 4397 4396 4233 4232
+f 4402 4401 4219 4220
+f 4069 4084 4417
+f 4053 4041 4418
+f 4341 3990 4423
+f 4234 4235 4426 4427
+f 4251 4264 4429
+f 4295 4282 4430
+f 4176 4177 4434 4435
+f 4133 4146 4437
+f 4117 4102 4438
+f 4440 4422 4423 3990
+f 4116 4117 4438 4439
+f 4177 4164 4434
+f 4311 4324 4433
+f 4294 4295 4430 4431
+f 4235 4223 4426
+f 4193 4205 4425
+f 4011 4023 4421
+f 4052 4053 4418 4419
+f 4400 4393 4217 4218
+f 4404 4403 4221 4222
+f 4399 4398 4231 4230
+f 4379 4378 4262 4261
+f 4382 4381 4307 4308
+f 4385 4374 4324 4323
+f 4389 4388 4320 4319
+f 4362 4371 4009 4010
+f 4370 4368 4021 4020
+f 4365 4366 4065 4066
+f 4344 4084 4083 4345
+f 4349 4348 4080 4079
+f 4357 4356 4131 4132
+f 4408 4407 4174 4173
+f 4412 4411 4145 4144
+f 4342 4341 4423 4422
+f 4337 3994 3993 4338
+f 4333 3998 3997 4334
+f 4330 4343 3985 2976 3983 3928
+f 4326 3989 3988 4327
+f 4386 4339 4340 4385
+f 4319 4318 4335 4336 4389
+f 4314 4331 4332 4315
+f 4309 4322 4323 4310
+f 4305 4318 4319 4306
+f 4301 4314 4315 4302
+f 4298 4328 4329 4299
+f 4294 4375 4311 4312 4295
+f 4381 4382 4291 4290
+f 4286 4303 4304 4287
+f 4282 4281 4431 4430
+f 4277 4290 4291 4278
+f 4273 4286 4287 4274
+f 4270 4300 3828 3744
+f 4266 4296 4297 4283 4267
+f 4378 4279 4280 4377
+f 4259 4258 4275 4276 4391
+f 4254 4271 4272 4255
+f 4249 4262 4263 4250
+f 4245 4258 4259 4246
+f 4241 4254 4255 4242
+f 4238 4268 4269 4253 4239
+f 4234 4395 4251 4252 4235
+f 4399 4247 4248 4398
+f 4226 4243 4244 4227
+f 4223 4222 4427 4426
+f 4218 4230 4231 4219
+f 4214 4226 4227 4215
+f 4211 4240 3662 3577
+f 4207 4236 4237 4208
+f 4402 4403 4204 4203
+f 4200 4199 4216 4217 4393
+f 4195 4212 4213 4196
+f 4191 4203 4204 4192
+f 4187 4199 4200 4188
+f 4183 4195 4196 4184
+f 4180 4209 4210 4181
+f 4176 4405 4193 4194 4177
+f 4409 4189 4190 4408
+f 4168 4185 4186 4169
+f 4164 4163 4435 4434
+f 4159 4172 4173 4160
+f 4155 4168 4169 4156
+f 4152 4165 4182 3494 3410
+f 4148 4178 4179 4149
+f 4412 4161 4162 4411
+f 4141 4140 4157 4158 4415
+f 4136 4153 4154 4137
+f 4131 4144 4145 4132
+f 4127 4140 4141 4128
+f 4123 4136 4137 4124
+f 4120 4150 4151 4121
+f 4116 4358 4133 4134 4117
+f 4354 4355 4113 4112
+f 4108 4125 4126 4109
+f 4102 4101 4439 4438
+f 4097 4112 4113 4098
+f 4093 4108 4109 4094
+f 4090 4105 4122 3319 3291 3236
+f 4086 4118 4119 4103 4087
+f 4346 4099 4100 4345
+f 4079 4078 4095 4096 4349
+f 4074 4091 4092 4075
+f 4067 4082 4083 4068
+f 4063 4078 4079 4064
+f 4059 4074 4075 4060
+f 4056 4071 4088 4089 4072 4057
+f 4052 4359 4069 4070 4053
+f 4366 4365 4049 4048
+f 4044 4061 4062 4045
+f 4041 4040 4419 4418
+f 4036 4048 4049 4037
+f 4032 4044 4045 4033
+f 4029 4058 3150 3061
+f 4025 4054 4055 4026
+f 4368 4038 4039 4363
+f 4018 4017 4034 4035 4351
+f 4013 4030 4031 4014
+f 4009 4021 4022 4010
+f 4005 4017 4018 4006
+f 4001 4013 4014 4002
+f 3987 4027 4028 3986
+f 4440 3990 4361 4011 4012
+f 4373 4372 3993 3994
+f 3998 4003 4004 3997
+f 3088 3177 3263 3346 3437 3521 3604 3689 3771 3855 3900 3955 2949
+f 2979 3980 3979 2980
+f 2983 3976 3975 2984
+f 2987 3972 3971 2988
+f 2991 3968 3967 2992
+f 2995 3964 3963 2996
+f 2999 3960 3959 3000
+f 2950 2949 3955 3954
+f 2954 2953 3951 3950 3984
+f 2958 2957 3947 3946
+f 2962 2961 3943 3942
+f 2966 2965 3939 3938
+f 2970 2969 3935 3934
+f 2974 2973 3931 3930
+f 3981 3926 3925 3980
+f 3977 3922 3921 3976
+f 3973 3918 3917 3972
+f 3969 3914 3913 3968
+f 3965 3910 3909 3964
+f 3961 3906 3905 3960
+f 3957 3902 3901 3956
+f 3924 3879 3878 3923
+f 3920 3875 3874 3919
+f 3916 3871 3870 3915
+f 3912 3867 3866 3911
+f 3908 3863 3862 3907
+f 3904 3859 3858 3903
+f 3953 3954 3854 3853 3899
+f 3949 3950 3896 3850 3849 3895
+f 3945 3946 3846 3845 3892
+f 3941 3942 3891 3842 3841 3890
+f 3937 3938 3838 3837 3887
+f 3933 3934 3834 3833
+f 3929 3930 3830 3829 3884
+f 3880 3825 3824 3879
+f 3876 3821 3820 3875
+f 3872 3817 3816 3871
+f 3868 3813 3812 3867
+f 3864 3809 3808 3863
+f 3860 3805 3804 3859
+f 3827 3798 3797 3826
+f 3823 3794 3793 3822
+f 3819 3790 3789 3818
+f 3815 3786 3785 3814
+f 3811 3782 3781 3810
+f 3807 3778 3777 3806
+f 3803 3774 3773 3802
+f 3852 3853 3769 3768
+f 3848 3849 3765 3764
+f 3844 3845 3761 3760
+f 3840 3841 3757 3756
+f 3836 3837 3753 3752
+f 3832 3833 3749 3748
+f 3829 3745 3744 3828
+f 3795 3740 3739 3794
+f 3791 3736 3735 3790
+f 3787 3732 3731 3786
+f 3783 3728 3727 3782
+f 3779 3724 3723 3778
+f 3775 3720 3719 3774
+f 3742 3715 3714 3741
+f 3738 3711 3710 3737
+f 3734 3707 3706 3733
+f 3730 3703 3702 3729
+f 3726 3699 3698 3725
+f 3722 3695 3694 3721
+f 3718 3691 3690 3717
+f 3767 3768 3686 3685
+f 3763 3764 3682 3681
+f 3759 3760 3678 3677
+f 3755 3756 3674 3673
+f 3751 3752 3670 3669
+f 3747 3748 3666 3665
+f 3716 3661 3660 3715
+f 3712 3657 3656 3711
+f 3708 3653 3652 3707
+f 3704 3649 3648 3703
+f 3700 3645 3644 3699
+f 3696 3641 3640 3695
+f 3692 3637 3636 3691
+f 3659 3629 3628 3658
+f 3655 3625 3624 3654
+f 3651 3621 3620 3650
+f 3647 3617 3616 3646
+f 3643 3613 3612 3642
+f 3639 3609 3608 3638
+f 3688 3689 3604 3603 3634
+f 3684 3685 3600 3599
+f 3680 3681 3596 3595
+f 3676 3677 3592 3591
+f 3672 3673 3588 3587
+f 3668 3669 3584 3583
+f 3664 3665 3580 3579
+f 3630 3575 3574 3629
+f 3626 3571 3570 3625
+f 3622 3567 3566 3621
+f 3618 3563 3562 3617
+f 3614 3559 3558 3613
+f 3610 3555 3554 3609
+f 3606 3551 3550 3605
+f 3573 3545 3544 3572
+f 3569 3541 3540 3568
+f 3565 3537 3536 3564
+f 3561 3533 3532 3560
+f 3557 3529 3528 3556
+f 3553 3525 3524 3552
+f 3602 3603 3520 3519
+f 3598 3599 3549 3516 3515
+f 3594 3595 3512 3511
+f 3590 3591 3508 3507
+f 3586 3587 3504 3503
+f 3582 3583 3500 3499
+f 3578 3579 3496 3495
+f 3546 3491 3490 3545
+f 3542 3487 3486 3541
+f 3538 3483 3482 3537
+f 3534 3479 3478 3533
+f 3530 3475 3474 3529
+f 3526 3471 3470 3525
+f 3493 3464 3463 3492
+f 3489 3460 3459 3488
+f 3485 3456 3455 3484
+f 3481 3452 3451 3480
+f 3477 3448 3447 3476
+f 3473 3444 3443 3472
+f 3469 3440 3439 3468
+f 3518 3519 3435 3434
+f 3514 3515 3465 3431 3430
+f 3510 3511 3427 3426
+f 3506 3507 3423 3422
+f 3502 3503 3419 3418
+f 3498 3499 3415 3414
+f 3495 3411 3410 3494
+f 3461 3406 3405 3460
+f 3457 3402 3401 3456
+f 3453 3398 3397 3452
+f 3449 3394 3393 3448
+f 3445 3390 3389 3444
+f 3441 3386 3385 3440
+f 3408 3372 3371 3407
+f 3404 3368 3367 3403
+f 3400 3364 3363 3399
+f 3396 3360 3359 3395
+f 3392 3356 3355 3391
+f 3388 3352 3351 3387
+f 3384 3348 3347 3383
+f 3433 3434 3343 3342 3382
+f 3429 3430 3339 3338
+f 3425 3426 3335 3334
+f 3421 3422 3378 3331 3330 3377
+f 3417 3418 3374 3327 3326
+f 3413 3414 3323 3322
+f 3373 3318 3317 3372
+f 3369 3314 3313 3368
+f 3365 3310 3309 3364
+f 3361 3306 3305 3360
+f 3357 3302 3301 3356
+f 3353 3298 3297 3352
+f 3349 3294 3293 3348
+f 3316 3288 3287 3315
+f 3312 3284 3283 3311
+f 3308 3280 3279 3307
+f 3304 3276 3275 3303
+f 3300 3272 3271 3299
+f 3296 3268 3267 3295
+f 3345 3346 3263 3262
+f 3341 3342 3259 3258
+f 3337 3338 3255 3254
+f 3333 3334 3251 3250
+f 3329 3330 3247 3246
+f 3325 3326 3243 3242
+f 3321 3322 3239 3238
+f 3289 3234 3233 3288
+f 3285 3230 3229 3284
+f 3281 3226 3225 3280
+f 3277 3222 3221 3276
+f 3273 3218 3217 3272
+f 3269 3214 3213 3268
+f 3265 3210 3209 3264
+f 3232 3201 3200 3231
+f 3228 3197 3196 3227
+f 3224 3193 3192 3223
+f 3220 3189 3188 3219
+f 3216 3185 3184 3215
+f 3212 3181 3180 3211
+f 3261 3262 3176 3175
+f 3257 3258 3207 3172 3171
+f 3253 3254 3168 3167
+f 3249 3250 3164 3163
+f 3245 3246 3160 3159
+f 3241 3242 3156 3155
+f 3237 3238 3152 3151
+f 3202 3147 3146 3201
+f 3198 3143 3142 3197
+f 3194 3139 3138 3193
+f 3190 3135 3134 3189
+f 3186 3131 3130 3185
+f 3182 3127 3126 3181
+f 3149 3115 3114 3148
+f 3145 3111 3110 3144
+f 3141 3107 3106 3140
+f 3137 3103 3102 3136
+f 3133 3099 3098 3132
+f 3129 3095 3094 3128
+f 3125 3091 3090 3124
+f 3174 3175 3086 3085
+f 3170 3171 3082 3081
+f 3166 3167 3078 3077
+f 3162 3163 3118 3074 3073
+f 3158 3159 3117 3070 3069 3116
+f 3154 3155 3066 3065
+f 3151 3062 3061 3150
+f 3112 3057 3056 3111
+f 3108 3053 3052 3107
+f 3104 3049 3048 3103
+f 3100 3045 3044 3099
+f 3096 3041 3040 3095
+f 3092 3037 3036 3091
+f 3059 3029 3028 3058
+f 3055 3025 3024 3054
+f 3051 3021 3020 3050
+f 3047 3017 3016 3046
+f 3043 3013 3012 3042
+f 3039 3009 3008 3038
+f 3035 3005 3004 3034
+f 3084 3085 2952 2953 3033
+f 3080 3081 2956 2957
+f 3076 3077 2960 2961
+f 3072 3073 2964 2965
+f 3068 3069 2968 2969
+f 3064 3065 2972 2973
+f 3030 2977 2978 3029
+f 3026 2981 2982 3025
+f 3022 2985 2986 3021
+f 3018 2989 2990 3017
+f 3014 2993 2994 3013
+f 3010 2997 2998 3009
+f 3006 3001 3002 3005
+f 3007 3000 3001 3006
+f 3011 2996 2997 3010
+f 3015 2992 2993 3014
+f 3019 2988 2989 3018
+f 3023 2984 2985 3022
+f 3027 2980 2981 3026
+f 3062 2975 2976 3061
+f 3065 3066 2971 2972
+f 3069 3070 2967 2968
+f 3073 3074 2963 2964
+f 3077 3078 2959 2960
+f 3081 3082 3032 2955 2956
+f 3085 3086 2951 2952
+f 3036 3006 3005 3035
+f 3040 3010 3009 3039
+f 3044 3014 3013 3043
+f 3048 3018 3017 3047
+f 3052 3022 3021 3051
+f 3056 3026 3025 3055
+f 3060 3030 3029 3059
+f 3093 3038 3037 3092
+f 3097 3042 3041 3096
+f 3101 3046 3045 3100
+f 3105 3050 3049 3104
+f 3109 3054 3053 3108
+f 3113 3058 3057 3112
+f 3151 3152 3063 3062
+f 3155 3156 3067 3066
+f 3159 3160 3071 3070 3117
+f 3163 3164 3119 3075 3074 3118
+f 3167 3168 3079 3078
+f 3171 3172 3121 3083 3082
+f 3175 3176 3087 3086
+f 3126 3092 3091 3125
+f 3130 3096 3095 3129
+f 3134 3100 3099 3133
+f 3138 3104 3103 3137
+f 3142 3108 3107 3141
+f 3146 3112 3111 3145
+f 3179 3124 3123 3178
+f 3183 3128 3127 3182
+f 3187 3132 3131 3186
+f 3191 3136 3135 3190
+f 3195 3140 3139 3194
+f 3199 3144 3143 3198
+f 3203 3148 3147 3202
+f 3238 3239 3206 3153 3152
+f 3242 3243 3157 3156
+f 3246 3247 3161 3160
+f 3250 3251 3165 3164
+f 3254 3255 3169 3168
+f 3258 3259 3208 3173 3172 3207
+f 3262 3263 3177 3176
+f 3213 3182 3181 3212
+f 3217 3186 3185 3216
+f 3221 3190 3189 3220
+f 3225 3194 3193 3224
+f 3229 3198 3197 3228
+f 3233 3202 3201 3232
+f 3266 3211 3210 3265
+f 3270 3215 3214 3269
+f 3274 3219 3218 3273
+f 3278 3223 3222 3277
+f 3282 3227 3226 3281
+f 3286 3231 3230 3285
+f 3290 3235 3234 3289
+f 3322 3323 3240 3239
+f 3326 3327 3244 3243
+f 3330 3331 3248 3247
+f 3334 3335 3252 3251
+f 3338 3339 3256 3255
+f 3342 3343 3260 3259
+f 3293 3265 3264 3292
+f 3297 3269 3268 3296
+f 3301 3273 3272 3300
+f 3305 3277 3276 3304
+f 3309 3281 3280 3308
+f 3313 3285 3284 3312
+f 3317 3289 3288 3316
+f 3350 3295 3294 3349
+f 3354 3299 3298 3353
+f 3358 3303 3302 3357
+f 3362 3307 3306 3361
+f 3366 3311 3310 3365
+f 3370 3315 3314 3369
+f 3411 3320 3319 3410
+f 3414 3415 3324 3323
+f 3418 3419 3375 3328 3327 3374
+f 3422 3423 3379 3332 3331 3378
+f 3426 3427 3336 3335
+f 3430 3431 3380 3340 3339
+f 3434 3435 3344 3343
+f 3385 3349 3348 3384
+f 3389 3353 3352 3388
+f 3393 3357 3356 3392
+f 3397 3361 3360 3396
+f 3401 3365 3364 3400
+f 3405 3369 3368 3404
+f 3409 3373 3372 3408
+f 3442 3387 3386 3441
+f 3446 3391 3390 3445
+f 3450 3395 3394 3449
+f 3454 3399 3398 3453
+f 3458 3403 3402 3457
+f 3462 3407 3406 3461
+f 3495 3496 3412 3411
+f 3499 3500 3416 3415
+f 3503 3504 3420 3419
+f 3507 3508 3424 3423
+f 3511 3512 3428 3427
+f 3515 3516 3432 3431 3465
+f 3519 3520 3436 3435
+f 3470 3441 3440 3469
+f 3474 3445 3444 3473
+f 3478 3449 3448 3477
+f 3482 3453 3452 3481
+f 3486 3457 3456 3485
+f 3490 3461 3460 3489
+f 3523 3468 3467 3522
+f 3527 3472 3471 3526
+f 3531 3476 3475 3530
+f 3535 3480 3479 3534
+f 3539 3484 3483 3538
+f 3543 3488 3487 3542
+f 3547 3492 3491 3546
+f 3579 3580 3497 3496
+f 3583 3584 3501 3500
+f 3587 3588 3505 3504
+f 3591 3592 3509 3508
+f 3595 3596 3513 3512
+f 3599 3600 3517 3516 3549
+f 3603 3604 3521 3520
+f 3554 3526 3525 3553
+f 3558 3530 3529 3557
+f 3562 3534 3533 3561
+f 3566 3538 3537 3565
+f 3570 3542 3541 3569
+f 3574 3546 3545 3573
+f 3607 3552 3551 3606
+f 3611 3556 3555 3610
+f 3615 3560 3559 3614
+f 3619 3564 3563 3618
+f 3623 3568 3567 3622
+f 3627 3572 3571 3626
+f 3631 3576 3575 3630
+f 3665 3666 3581 3580
+f 3669 3670 3632 3585 3584
+f 3673 3674 3589 3588
+f 3677 3678 3593 3592
+f 3681 3682 3633 3597 3596
+f 3685 3686 3601 3600
+f 3636 3606 3605 3635
+f 3640 3610 3609 3639
+f 3644 3614 3613 3643
+f 3648 3618 3617 3647
+f 3652 3622 3621 3651
+f 3656 3626 3625 3655
+f 3660 3630 3629 3659
+f 3693 3638 3637 3692
+f 3697 3642 3641 3696
+f 3701 3646 3645 3700
+f 3705 3650 3649 3704
+f 3709 3654 3653 3708
+f 3713 3658 3657 3712
+f 3745 3663 3662 3744
+f 3748 3749 3667 3666
+f 3752 3753 3671 3670
+f 3756 3757 3675 3674
+f 3760 3761 3679 3678
+f 3764 3765 3683 3682
+f 3768 3769 3687 3686
+f 3719 3692 3691 3718
+f 3723 3696 3695 3722
+f 3727 3700 3699 3726
+f 3731 3704 3703 3730
+f 3735 3708 3707 3734
+f 3739 3712 3711 3738
+f 3743 3716 3715 3742
+f 3776 3721 3720 3775
+f 3780 3725 3724 3779
+f 3784 3729 3728 3783
+f 3788 3733 3732 3787
+f 3792 3737 3736 3791
+f 3796 3741 3740 3795
+f 3829 3830 3746 3745
+f 3833 3834 3750 3749
+f 3837 3838 3754 3753
+f 3841 3842 3758 3757
+f 3845 3846 3762 3761
+f 3849 3850 3799 3766 3765
+f 3853 3854 3770 3769
+f 3804 3775 3774 3803
+f 3808 3779 3778 3807
+f 3812 3783 3782 3811
+f 3816 3787 3786 3815
+f 3820 3791 3790 3819
+f 3824 3795 3794 3823
+f 3857 3802 3801 3856
+f 3861 3806 3805 3860
+f 3865 3810 3809 3864
+f 3869 3814 3813 3868
+f 3873 3818 3817 3872
+f 3877 3822 3821 3876
+f 3881 3826 3825 3880
+f 3930 3931 3831 3830
+f 3934 3935 3885 3835 3834
+f 3938 3939 3888 3839 3838
+f 3942 3943 3843 3842 3891
+f 3946 3947 3893 3847 3846
+f 3950 3951 3897 3851 3850 3896
+f 3954 3955 3900 3855 3854
+f 3905 3860 3859 3904
+f 3909 3864 3863 3908
+f 3913 3868 3867 3912
+f 3917 3872 3871 3916
+f 3921 3876 3875 3920
+f 3925 3880 3879 3924
+f 3958 3903 3902 3957
+f 3962 3907 3906 3961
+f 3966 3911 3910 3965
+f 3970 3915 3914 3969
+f 3974 3919 3918 3973
+f 3978 3923 3922 3977
+f 3982 3927 3926 3981
+f 2973 2972 3932 3931
+f 2969 2968 3936 3935
+f 2965 2964 3940 3939
+f 2961 2960 3944 3943
+f 2957 2956 3948 3947
+f 2953 2952 3952 3951
+f 3002 3957 3956 3003
+f 2998 3961 3960 2999
+f 2994 3965 3964 2995
+f 2990 3969 3968 2991
+f 2986 3973 3972 2987
+f 2982 3977 3976 2983
+f 2978 3981 3980 2979
+f 2977 3030 4001 4000
+f 3997 4004 4005 3996
+f 4372 4371 3992 3993
+f 4440 4012 4024 4025 3989
+f 3986 4028 4029 3985
+f 4002 4014 4015 4003
+f 4006 4018 4019 4007
+f 4010 4022 4023 4011
+f 4014 4031 4032 4015
+f 4351 4035 4036 4369
+f 4363 4039 4040 4360
+f 4026 4055 4056 4027
+f 3115 3149 4042 4030
+f 4033 4045 4046 4034
+f 4037 4049 4050 4038
+f 3149 3204 4059 4042
+f 4045 4062 4063 4046
+f 4365 4367 4050 4049
+f 4053 4070 4085 4086 4054
+f 4057 4072 4089 4090 4073 4058
+f 4060 4075 4076 4061
+f 4064 4079 4080 4065
+f 4068 4083 4084 4069
+f 4075 4092 4093 4076
+f 4349 4096 4097 4348
+f 4345 4100 4101 4344
+f 4087 4103 4119 4120 4104 4088
+f 3290 3318 4106 4091
+f 4094 4109 4110 4095
+f 4098 4113 4114 4099
+f 3318 3373 4123 4106
+f 4109 4126 4127 4110
+f 4355 4356 4114 4113
+f 4117 4134 4147 4148 4118
+f 4121 4151 4152 4122
+f 4124 4137 4138 4125
+f 4128 4141 4142 4129
+f 4132 4145 4146 4133
+f 4137 4154 4155 4138
+f 4415 4158 4159 4414
+f 4411 4162 4163 4410
+f 4149 4179 4180 4150
+f 3464 3493 4166 4153
+f 4156 4169 4170 4157
+f 4160 4173 4174 4161
+f 3493 3548 4183 4166
+f 4169 4186 4187 4170
+f 4408 4190 4191 4407
+f 4177 4194 4206 4207 4178
+f 4181 4210 4211 4182
+f 4184 4196 4197 4185
+f 4188 4200 4201 4189
+f 4192 4204 4205 4193
+f 4196 4213 4214 4197
+f 4393 4400 4201 4200
+f 4403 4404 4205 4204
+f 4208 4237 4238 4209
+f 3631 3661 4224 4212
+f 4215 4227 4228 4216
+f 4219 4231 4232 4220
+f 3661 3716 4241 4224
+f 4227 4244 4245 4228
+f 4398 4248 4249 4397
+f 4235 4252 4265 4266 4236
+f 4239 4253 4269 4270 4240
+f 4242 4255 4256 4243
+f 4246 4259 4260 4247
+f 4250 4263 4264 4251
+f 4255 4272 4273 4256
+f 4391 4276 4277 4380
+f 4377 4280 4281 4376
+f 4267 4283 4297 4298 4268
+f 3798 3827 4284 4271
+f 4274 4287 4288 4275
+f 4278 4291 4292 4279
+f 3827 3882 4301 4284
+f 4287 4304 4305 4288
+f 4382 4383 4292 4291
+f 4295 4312 4325 4326 4296
+f 4299 4329 4330 4313 4300
+f 4302 4315 4316 4303
+f 4306 4319 4320 4307
+f 4310 4323 4324 4311
+f 4315 4332 4333 4316
+f 4389 4336 4337 4388
+f 4385 4340 4341 4374
+f 4327 3988 3987 4328
+f 3982 2977 4000 4331
+f 4334 3997 3996 4335
+f 4338 3993 3992 4339
+f 4415 4414 4142 4141
+f 4411 4410 4146 4145
+f 4407 4406 4175 4174
+f 4356 4355 4130 4131
+f 4348 4347 4081 4080
+f 4359 4364 4068 4069
+f 4366 4350 4064 4065
+f 4368 4363 4022 4021
+f 4371 4372 4008 4009
+f 4388 4387 4321 4320
+f 4375 4384 4310 4311
+f 4381 4390 4306 4307
+f 4378 4377 4263 4262
+f 4398 4397 4232 4231
+f 4403 4402 4220 4221
+f 4084 4085 4416 4417
+f 4040 4052 4419
+f 4024 4012 4420
+f 4206 4194 4424
+f 4264 4265 4428 4429
+f 4281 4294 4431
+f 4325 4312 4432
+f 4146 4147 4436 4437
+f 4101 4116 4439
+# 4404 elements
--- /dev/null
+++ b/libobj/examples/negcube.obj
@@ -1,0 +1,33 @@
+# This is a cube with negative vertex reference numbers.  Each element
+# references the vertices stored immediately above it in the file.
+# Note that vertices are not shared.
+v 0.000000 2.000000 2.000000
+v 0.000000 0.000000 2.000000
+v 2.000000 0.000000 2.000000
+v 2.000000 2.000000 2.000000
+f -4 -3 -2 -1
+v 2.000000 2.000000 0.000000
+v 2.000000 0.000000 0.000000
+v 0.000000 0.000000 0.000000
+v 0.000000 2.000000 0.000000
+f -4 -3 -2 -1
+v 2.000000 2.000000 2.000000
+v 2.000000 0.000000 2.000000
+v 2.000000 0.000000 0.000000
+v 2.000000 2.000000 0.000000
+f -4 -3 -2 -1
+v 0.000000 2.000000 0.000000
+v 0.000000 2.000000 2.000000
+v 2.000000 2.000000 2.000000
+v 2.000000 2.000000 0.000000
+f -4 -3 -2 -1
+v 0.000000 2.000000 0.000000
+v 0.000000 0.000000 0.000000
+v 0.000000 0.000000 2.000000
+v 0.000000 2.000000 2.000000
+f -4 -3 -2 -1
+v 0.000000 0.000000 2.000000
+v 0.000000 0.000000 0.000000
+v 2.000000 0.000000 0.000000
+v 2.000000 0.000000 2.000000
+f -4 -3 -2 -1
--- /dev/null
+++ b/libobj/examples/square.obj
@@ -1,0 +1,9 @@
+# This example shows a square that measures two units on each side and
+# faces in the positive direction (toward the camera).  Note that the
+# ordering of the vertices is counterclockwise.  This ordering
+# determines that the square is facing forward.
+v 0.000000 2.000000 0.000000
+v 0.000000 0.000000 0.000000
+v 2.000000 0.000000 0.000000
+v 2.000000 2.000000 0.000000
+f 1 2 3 4
--- /dev/null
+++ b/libobj/mkfile
@@ -1,0 +1,9 @@
+</$objtype/mkfile
+
+LIB=../libobj.a$O
+OFILES=\
+	obj.$O\
+
+HFILES=../obj.h
+
+</sys/src/cmd/mklib
--- /dev/null
+++ b/libobj/obj.2.man
@@ -1,0 +1,88 @@
+.TH OBJ 2
+.SH NAME
+objparse,
+objfree,
+OBJfmt,
+OBJfmtinstall
+\- OBJ parser
+.SH SYNOPSIS
+.ta 0.7i +0.7i +0.7i +0.7i +0.7i +0.7i +0.7i
+.EX
+#include <u.h>
+#include <libc.h>
+#include <obj.h>
+
+enum {
+	OBJVGeometric,
+	OBJVTexture,
+	OBJVNormal,
+	OBJVParametric,
+	OBJNVERT
+};
+
+enum {
+	OBJEPoint,
+	OBJELine,
+	OBJEFace,
+	OBJECurve,
+	OBJECurve2,
+	OBJESurface
+};
+
+enum {
+	OBJHTSIZE = 17
+};
+
+typedef struct
+{
+	union {
+		struct { double x, y, z, w; };	/* geometric */
+		struct { double u, v, vv; };	/* texture and parametric */
+		struct { double i, j, k; };	/* normal */
+	};
+} OBJVertex;
+
+typedef struct
+{
+	OBJVertex	*verts;
+	int		nvert;
+} OBJVertexArray;
+
+typedef struct
+{
+	int	*indices;
+	int	nindex;
+	int	type;
+	OBJElem	*next;
+} OBJElem;
+
+typedef struct
+{
+	char		*name;
+	OBJElem		*child;
+	OBJObject	*next;
+} OBJObject;
+
+typedef struct
+{
+	OBJVertexArray	vertdata[OBJNVERT];
+	OBJObject	*objtab[OBJHTSIZE];
+} OBJ;
+
+OBJ	*objparse(char *file);
+void	objfree(OBJ *obj);
+int	OBJfmt(Fmt*);
+void	OBJfmtinstall(void);
+.EE
+.SH DESCRIPTION
+An OBJ structure contains geometry and material information about a set of 3D objects
+.SH SOURCE
+.B /sys/src/libobj
+.SH SEE ALSO
+.IR geometry (2)
+.br
+http://paulbourke.net/dataformats/obj
+.br
+https://people.sc.fsu.edu/~jburkardt/data/obj/obj.html
+.SH DIAGNOSTICS
+.SH BUGS
--- /dev/null
+++ b/libobj/obj.c
@@ -1,0 +1,584 @@
+#include <u.h>
+#include <libc.h>
+#include <ctype.h>
+#include <bio.h>
+#include "../obj.h"
+
+#undef isspace(c)
+#define isspace(c) ((c) == ' ' || (c) == '\t')
+
+typedef struct Line Line;
+struct Line
+{
+	char *file;
+	ulong lineno;
+};
+
+static Line curline;
+
+static void
+error(char *fmt, ...)
+{
+	va_list va;
+	char buf[ERRMAX], *bp;
+
+	va_start(va, fmt);
+	bp = seprint(buf, buf + sizeof buf, "%s:%lud ", curline.file, curline.lineno);
+	vseprint(bp, buf + sizeof buf, fmt, va);
+	va_end(va);
+	werrstr("%s\n", buf);
+}
+
+static void *
+emalloc(ulong n)
+{
+	void *p;
+
+	p = malloc(n);
+	if(p == nil)
+		sysfatal("malloc: %r");
+	memset(p, 0, n);
+	setmalloctag(p, getcallerpc(&n));
+	return p;
+}
+
+static void *
+erealloc(void *v, ulong n)
+{
+	void *nv;
+
+	nv = realloc(v, n);
+	if(nv == nil)
+		sysfatal("realloc: %r");
+	setrealloctag(nv, getcallerpc(&v));
+	return nv;
+}
+
+static uint
+hash(char *s)
+{
+	uint h;
+
+	h = 0x811c9dc5;
+	while(*s != 0)
+		h = (h^(uchar)*s++) * 0x1000193;
+	return h % OBJHTSIZE;
+}
+
+static void
+addvertva(OBJVertexArray *va, OBJVertex v)
+{
+	va->verts = erealloc(va->verts, ++va->nvert*sizeof(OBJVertex));
+	va->verts[va->nvert-1] = v;
+}
+
+static void
+addvert(OBJ *obj, OBJVertex v, int vtype)
+{
+	addvertva(&obj->vertdata[vtype], v);
+}
+
+static void
+addelem(OBJObject *o, OBJElem *e)
+{
+	OBJElem *ep;
+
+	if(o->child == nil){
+		o->child = e;
+		return;
+	}
+	for(ep = o->child; ep->next != nil; ep = ep->next)
+		;
+	ep->next = e;
+}
+
+static OBJElem *
+allocelem(int t)
+{
+	OBJElem *e;
+
+	e = emalloc(sizeof(OBJElem));
+	e->type = t;
+	return e;
+}
+
+static void
+addelemidx(OBJElem *e, int idx)
+{
+	e->indices = erealloc(e->indices, ++e->nindex*sizeof(int));
+	e->indices[e->nindex-1] = idx;
+}
+
+static void
+freeelem(OBJElem *e)
+{
+	free(e->indices);
+	free(e);
+}
+
+static OBJObject *
+alloco(char *n)
+{
+	OBJObject *o;
+
+	o = emalloc(sizeof(OBJObject));
+	o->name = strdup(n);
+	return o;
+}
+
+static void
+freeo(OBJObject *o)
+{
+	OBJElem *e, *ne;
+
+	free(o->name);
+	for(e = o->child; e != nil; e = ne){
+		ne = e->next;
+		freeelem(e);
+	}
+	free(o);
+}
+
+static void
+pusho(OBJ *obj, OBJObject *o)
+{
+	OBJObject *op, *prev;
+	uint h;
+
+	prev = nil;
+	h = hash(o->name);
+	for(op = obj->objtab[h]; op != nil; prev = op, op = op->next)
+		if(strcmp(op->name, o->name) == 0){
+			o->next = op->next;
+			freeo(op);
+			break;
+		}
+	if(prev == nil){
+		obj->objtab[h] = o;
+		return;
+	}
+	prev->next = o;
+}
+
+static OBJObject *
+geto(OBJ *obj, char *n)
+{
+	OBJObject *o;
+	uint h;
+
+	h = hash(n);
+	for(o = obj->objtab[h]; o != nil; o = o->next)
+		if(strcmp(o->name, n) == 0)
+			break;
+	return o;
+}
+
+OBJ *
+objparse(char *file)
+{
+	Biobuf *bin;
+	OBJ *obj;
+	OBJObject *o;
+	OBJElem *e;
+	OBJVertex v;
+	double *d;
+	char c, buf[256], *p;
+	int vtype, idx, sign;
+
+	o = nil;
+	bin = Bopen(file, OREAD);
+	if(bin == nil)
+		sysfatal("Bopen: %r");
+	curline.file = file;
+	curline.lineno = 1;
+	obj = emalloc(sizeof(OBJ));
+	while((c = Bgetc(bin)) != Beof){
+		switch(c){
+		case 'v':
+			d = (double*)&v;
+			c = Bgetc(bin);
+			vtype = OBJVGeometric;
+			switch(c){
+			case 't': vtype = OBJVTexture; break;
+			case 'p': vtype = OBJVParametric; break;
+			case 'n': vtype = OBJVNormal; break;
+			default:
+				if(!isspace(c)){
+					error("wrong vertex type");
+					goto error;
+				}
+			}
+			while(c = Bgetc(bin), c != Beof && c != '\n' && d-(double*)&v < 4){
+				while(isspace(c))
+					c = Bgetc(bin);
+				if(c == '\\'){
+					while(c != '\n')
+						c = Bgetc(bin);
+					continue;
+				}
+				if(c != '-' && !isdigit(c)){
+					error("unexpected character '%c'", c);
+					goto error;
+				}
+				Bungetc(bin);
+				Bgetd(bin, d++);
+			}
+			switch(vtype){
+			case OBJVGeometric:
+				if(d-(double*)&v < 3){
+					error("not enough coordinates");
+					goto error;
+				}
+				if(d-(double*)&v < 4)
+					*d = 1;	/* default w value */
+				break;
+			case OBJVTexture:
+				if(d-(double*)&v < 1){
+					error("not enough coordinates");
+					goto error;
+				}
+				while(d-(double*)&v < 3)
+					*d++ = 0;	/* default v and w values */
+				break;
+			case OBJVParametric:
+				if(d-(double*)&v < 2){
+					error("not enough coordinates");
+					goto error;
+				}
+				if(d-(double*)&v < 3)
+					*d = 1;	/* default w value */
+				break;
+			case OBJVNormal:
+				if(d-(double*)&v < 3){
+					error("not enough coordinates");
+					goto error;
+				}
+			}
+			addvert(obj, v, vtype);
+			break;
+		case 'o':
+			p = buf;
+			c = Bgetc(bin);
+			if(!isspace(c)){
+				error("syntax error");
+				goto error;
+			}
+			while(isspace(c))
+				c = Bgetc(bin);
+			if(!isalnum(c)){
+				error("unexpected character '%c'", c);
+				goto error;
+			}
+			do{
+				*p++ = c;
+			}while(c = Bgetc(bin), isalnum(c) && p-buf < sizeof(buf)-1);
+			*p = 0;
+			o = geto(obj, buf);
+			if(o == nil){
+				o = alloco(buf);
+				pusho(obj, o);
+			}
+			break;
+		case 'g':
+		case 's':
+			/* element and smoothing groups ignored for now */
+			while(c != '\n')
+				c = Bgetc(bin);
+			break;
+		case 'p':
+			c = Bgetc(bin);
+			if(!isspace(c)){
+				error("syntax error");
+				goto error;
+			}
+			while(c = Bgetc(bin), c != '\n'){
+				idx = 0;
+				sign = 0;
+				while(isspace(c))
+					c = Bgetc(bin);
+				if(c == '\\'){
+					while(c != '\n')
+						c = Bgetc(bin);
+					continue;
+				}
+				if(c != '-' && !isdigit(c)){
+					error("unexpected character '%c'", c);
+					goto error;
+				}
+				if(c == '-'){
+					sign = 1;
+					c = Bgetc(bin);
+					if(!isdigit(c)){
+						error("unexpected character '%c'", c);
+						goto error;
+					}
+				}
+				do{
+					idx = idx*10 + c-'0';
+				}while(c = Bgetc(bin), isdigit(c));
+				Bungetc(bin);
+				idx = sign ? obj->vertdata[OBJVGeometric].nvert-idx : idx-1;
+				if(idx+1 > obj->vertdata[OBJVGeometric].nvert){
+					error("not enough vertices");
+					goto error;
+				}
+				e = allocelem(OBJEPoint);
+				addelemidx(e, idx);
+				if(o == nil){
+					o = alloco("default");
+					pusho(obj, o);
+				}
+				addelem(o, e);
+			}
+			break;
+		case 'l':
+			c = Bgetc(bin);
+			if(!isspace(c)){
+				error("syntax error");
+				goto error;
+			}
+			while(c = Bgetc(bin), c != '\n'){
+				idx = 0;
+				sign = 0;
+				while(isspace(c))
+					c = Bgetc(bin);
+				if(c == '\\'){
+					while(c != '\n')
+						c = Bgetc(bin);
+					continue;
+				}
+				if(c != '-' && !isdigit(c)){
+					error("unexpected character '%c'", c);
+					goto error;
+				}
+				if(c == '-'){
+					sign = 1;
+					c = Bgetc(bin);
+					if(!isdigit(c)){
+						error("unexpected character '%c'", c);
+						goto error;
+					}
+				}
+				do{
+					idx = idx*10 + c-'0';
+				}while(c = Bgetc(bin), isdigit(c));
+				idx = sign ? obj->vertdata[OBJVGeometric].nvert-idx : idx-1;
+				if(idx+1 > obj->vertdata[OBJVGeometric].nvert){
+					error("not enough vertices");
+					goto error;
+				}
+				e = allocelem(OBJELine);
+				addelemidx(e, idx);
+Line2:
+				idx = 0;
+				sign = 0;
+				while(isspace(c))
+					c = Bgetc(bin);
+				if(c == '\\'){
+					while(c != '\n')
+						c = Bgetc(bin);
+					c = Bgetc(bin);
+					goto Line2;
+				}
+				if(c != '-' && !isdigit(c)){
+					freeelem(e);
+					error("unexpected character '%c'", c);
+					goto error;
+				}
+				if(c == '-'){
+					sign = 1;
+					c = Bgetc(bin);
+					if(!isdigit(c)){
+						freeelem(e);
+						error("unexpected character '%c'", c);
+						goto error;
+					}
+				}
+				do{
+					idx = idx*10 + c-'0';
+				}while(c = Bgetc(bin), isdigit(c));
+				Bungetc(bin);
+				idx = sign ? obj->vertdata[OBJVGeometric].nvert-idx : idx-1;
+				if(idx+1 > obj->vertdata[OBJVGeometric].nvert){
+					freeelem(e);
+					error("not enough vertices");
+					goto error;
+				}
+				addelemidx(e, idx);
+				if(o == nil){
+					o = alloco("default");
+					pusho(obj, o);
+				}
+				addelem(o, e);
+			}
+			break;
+		case 'f':
+			e = allocelem(OBJEFace);
+			c = Bgetc(bin);
+			if(!isspace(c)){
+				freeelem(e);
+				error("syntax error");
+				goto error;
+			}
+			while(c = Bgetc(bin), c != '\n'){
+				idx = 0;
+				sign = 0;
+				while(isspace(c))
+					c = Bgetc(bin);
+				if(c == '\\'){
+					while(c != '\n')
+						c = Bgetc(bin);
+					continue;
+				}
+				if(c != '-' && !isdigit(c)){
+					freeelem(e);
+					error("unexpected character '%c'", c);
+					goto error;
+				}
+				if(c == '-'){
+					sign = 1;
+					c = Bgetc(bin);
+					if(!isdigit(c)){
+						freeelem(e);
+						error("unexpected character '%c'", c);
+						goto error;
+					}
+				}
+				do{
+					idx = idx*10 + c-'0';
+				}while(c = Bgetc(bin), isdigit(c));
+				Bungetc(bin);
+				idx = sign ? obj->vertdata[OBJVGeometric].nvert-idx : idx-1;
+				if(idx+1 > obj->vertdata[OBJVGeometric].nvert){
+					freeelem(e);
+					error("not enough vertices");
+					goto error;
+				}
+				addelemidx(e, idx);
+			}
+			if(o == nil){
+				o = alloco("default");
+				pusho(obj, o);
+			}
+			addelem(o, e);
+			break;
+		case 'm':
+		case 'u':
+			p = buf;
+			do{
+				*p++ = c;
+			}while(c = Bgetc(bin), isalpha(c) && p-buf < sizeof(buf)-1);
+			*p = 0;
+			if(strcmp(buf, "mtllib") != 0 && strcmp(buf, "usemtl") != 0){
+				error("syntax error");
+				goto error;
+			}
+			while(c != '\n')
+				c = Bgetc(bin);
+			break;
+		case '#':
+			while(c != '\n')
+				c = Bgetc(bin);
+			break;
+		}
+		do{
+			if(c == '\n'){
+				curline.lineno++;
+				break;
+			}
+			if(!isspace(c)){
+				error("syntax error");
+				goto error;
+			}
+		}while((c = Bgetc(bin)) != Beof);
+	}
+	Bterm(bin);
+	return obj;
+error:
+	objfree(obj);
+	Bterm(bin);
+	return nil;
+}
+
+void
+objfree(OBJ *obj)
+{
+	OBJObject *o, *no;
+	int i;
+
+	if(obj == nil)
+		return;
+	for(i = 0; i < nelem(obj->vertdata); i++)
+		free(obj->vertdata[i].verts);
+	for(i = 0; i < nelem(obj->objtab); i++)
+		for(o = obj->objtab[i]; o != nil; o = no){
+			no = o->next;
+			freeo(o);
+		}
+	free(obj);
+}
+
+int
+OBJfmt(Fmt *f)
+{
+	OBJ *obj;
+	OBJObject *o;
+	OBJElem *e;
+	OBJVertex v;
+	int i, j, r, pack;
+
+	r = pack = 0;
+	obj = va_arg(f->args, OBJ*);
+	for(i = 0; i < nelem(obj->vertdata); i++)
+		for(j = 0; j < obj->vertdata[i].nvert; j++){
+			v = obj->vertdata[i].verts[j];
+			switch(i){
+			case OBJVGeometric:
+				r += fmtprint(f, "v %g %g %g %g\n", v.x, v.y, v.z, v.w);
+				break;
+			case OBJVTexture:
+				r += fmtprint(f, "vt %g %g %g\n", v.u, v.v, v.vv);
+				break;
+			case OBJVNormal:
+				r += fmtprint(f, "vn %g %g %g\n", v.i, v.j, v.k);
+				break;
+			case OBJVParametric:
+				r += fmtprint(f, "vp %g %g %g\n", v.u, v.v, v.vv);
+				break;
+			}
+		}
+	for(i = 0; i < nelem(obj->objtab); i++)
+		for(o = obj->objtab[i]; o != nil; o = o->next){
+			if(strcmp(o->name, "default") != 0)
+				r += fmtprint(f, "o %s\n", o->name);
+			for(e = o->child; e != nil; e = e->next){
+				switch(e->type){
+				case OBJEPoint:
+					if(pack == 0)
+						r += fmtprint(f, "p");
+					pack = pack > 0 ? --pack : 8-1;
+					break;
+				case OBJELine:
+					r += fmtprint(f, "l");
+					break;
+				case OBJEFace:
+					r += fmtprint(f, "f");
+					break;
+				//case OBJECurve:
+				//case OBJECurve2:
+				//case OBJESurface:
+				}
+				for(j = 0; j < e->nindex; j++)
+					r += fmtprint(f, " %d", e->indices[j]+1);
+				if(e->type != OBJEPoint || pack == 0)
+					r += fmtprint(f, "\n");
+			}
+		}
+	return r;
+}
+
+void
+OBJfmtinstall(void)
+{
+	fmtinstall('O', OBJfmt);
+}
--- /dev/null
+++ b/libobj/spec
@@ -1,0 +1,2 @@
+http://paulbourke.net/dataformats/obj
+https://people.sc.fsu.edu/~jburkardt/data/obj/obj.html
--- /dev/null
+++ b/libobj/test/main.acid
@@ -1,0 +1,525 @@
+sizeof_1_ = 8;
+aggr _1_
+{
+	'U' 0 lo;
+	'U' 4 hi;
+};
+
+defn
+_1_(addr) {
+	complex _1_ addr;
+	print("	lo	", addr.lo, "\n");
+	print("	hi	", addr.hi, "\n");
+};
+
+sizeofFPdbleword = 8;
+aggr FPdbleword
+{
+	'F' 0 x;
+	{
+	'U' 0 lo;
+	'U' 4 hi;
+	};
+};
+
+defn
+FPdbleword(addr) {
+	complex FPdbleword addr;
+	print("	x	", addr.x, "\n");
+	print("_1_ {\n");
+		_1_(addr+0);
+	print("}\n");
+};
+
+UTFmax = 4;
+Runesync = 128;
+Runeself = 128;
+Runeerror = 65533;
+Runemax = 1114111;
+Runemask = 2097151;
+sizeofFmt = 80;
+aggr Fmt
+{
+	'b' 0 runes;
+	'Y' 8 start;
+	'Y' 16 to;
+	'Y' 24 stop;
+	'Y' 32 flush;
+	'Y' 40 farg;
+	'D' 48 nfmt;
+	'Y' 56 args;
+	'D' 64 r;
+	'D' 68 width;
+	'D' 72 prec;
+	'U' 76 flags;
+};
+
+defn
+Fmt(addr) {
+	complex Fmt addr;
+	print("	runes	", addr.runes, "\n");
+	print("	start	", addr.start\Y, "\n");
+	print("	to	", addr.to\Y, "\n");
+	print("	stop	", addr.stop\Y, "\n");
+	print("	flush	", addr.flush\Y, "\n");
+	print("	farg	", addr.farg\Y, "\n");
+	print("	nfmt	", addr.nfmt, "\n");
+	print("	args	", addr.args\Y, "\n");
+	print("	r	", addr.r, "\n");
+	print("	width	", addr.width, "\n");
+	print("	prec	", addr.prec, "\n");
+	print("	flags	", addr.flags, "\n");
+};
+
+FmtWidth = 1;
+FmtLeft = 2;
+FmtPrec = 4;
+FmtSharp = 8;
+FmtSpace = 16;
+FmtSign = 32;
+FmtZero = 64;
+FmtUnsigned = 128;
+FmtShort = 256;
+FmtLong = 512;
+FmtVLong = 1024;
+FmtComma = 2048;
+FmtByte = 4096;
+FmtFlag = 8192;
+sizeofTm = 40;
+aggr Tm
+{
+	'D' 0 sec;
+	'D' 4 min;
+	'D' 8 hour;
+	'D' 12 mday;
+	'D' 16 mon;
+	'D' 20 year;
+	'D' 24 wday;
+	'D' 28 yday;
+	'a' 32 zone;
+	'D' 36 tzoff;
+};
+
+defn
+Tm(addr) {
+	complex Tm addr;
+	print("	sec	", addr.sec, "\n");
+	print("	min	", addr.min, "\n");
+	print("	hour	", addr.hour, "\n");
+	print("	mday	", addr.mday, "\n");
+	print("	mon	", addr.mon, "\n");
+	print("	year	", addr.year, "\n");
+	print("	wday	", addr.wday, "\n");
+	print("	yday	", addr.yday, "\n");
+	print("	zone	", addr.zone, "\n");
+	print("	tzoff	", addr.tzoff, "\n");
+};
+
+PNPROC = 1;
+PNGROUP = 2;
+Profoff = 0;
+Profuser = 1;
+Profkernel = 2;
+Proftime = 3;
+Profsample = 4;
+sizeofLock = 8;
+aggr Lock
+{
+	'D' 0 val;
+};
+
+defn
+Lock(addr) {
+	complex Lock addr;
+	print("	val	", addr.val, "\n");
+};
+
+sizeofQLp = 16;
+aggr QLp
+{
+	'D' 0 inuse;
+	'D' 4 state;
+	'A' QLp 8 next;
+};
+
+defn
+QLp(addr) {
+	complex QLp addr;
+	print("	inuse	", addr.inuse, "\n");
+	print("	state	", addr.state, "\n");
+	print("	next	", addr.next\Y, "\n");
+};
+
+sizeofQLock = 32;
+aggr QLock
+{
+	Lock 0 lock;
+	'D' 8 locked;
+	'A' QLp 16 $head;
+	'A' QLp 24 $tail;
+};
+
+defn
+QLock(addr) {
+	complex QLock addr;
+	print("Lock lock {\n");
+	Lock(addr.lock);
+	print("}\n");
+	print("	locked	", addr.locked, "\n");
+	print("	$head	", addr.$head\Y, "\n");
+	print("	$tail	", addr.$tail\Y, "\n");
+};
+
+sizeofRWLock = 32;
+aggr RWLock
+{
+	Lock 0 lock;
+	'D' 8 readers;
+	'D' 12 writer;
+	'A' QLp 16 $head;
+	'A' QLp 24 $tail;
+};
+
+defn
+RWLock(addr) {
+	complex RWLock addr;
+	print("Lock lock {\n");
+	Lock(addr.lock);
+	print("}\n");
+	print("	readers	", addr.readers, "\n");
+	print("	writer	", addr.writer, "\n");
+	print("	$head	", addr.$head\Y, "\n");
+	print("	$tail	", addr.$tail\Y, "\n");
+};
+
+sizeofRendez = 24;
+aggr Rendez
+{
+	'A' QLock 0 l;
+	'A' QLp 8 $head;
+	'A' QLp 16 $tail;
+};
+
+defn
+Rendez(addr) {
+	complex Rendez addr;
+	print("	l	", addr.l\Y, "\n");
+	print("	$head	", addr.$head\Y, "\n");
+	print("	$tail	", addr.$tail\Y, "\n");
+};
+
+sizeofNetConnInfo = 72;
+aggr NetConnInfo
+{
+	'Y' 0 dir;
+	'Y' 8 root;
+	'Y' 16 spec;
+	'Y' 24 lsys;
+	'Y' 32 lserv;
+	'Y' 40 rsys;
+	'Y' 48 rserv;
+	'Y' 56 laddr;
+	'Y' 64 raddr;
+};
+
+defn
+NetConnInfo(addr) {
+	complex NetConnInfo addr;
+	print("	dir	", addr.dir\Y, "\n");
+	print("	root	", addr.root\Y, "\n");
+	print("	spec	", addr.spec\Y, "\n");
+	print("	lsys	", addr.lsys\Y, "\n");
+	print("	lserv	", addr.lserv\Y, "\n");
+	print("	rsys	", addr.rsys\Y, "\n");
+	print("	rserv	", addr.rserv\Y, "\n");
+	print("	laddr	", addr.laddr\Y, "\n");
+	print("	raddr	", addr.raddr\Y, "\n");
+};
+
+RFNAMEG = 1;
+RFENVG = 2;
+RFFDG = 4;
+RFNOTEG = 8;
+RFPROC = 16;
+RFMEM = 32;
+RFNOWAIT = 64;
+RFCNAMEG = 1024;
+RFCENVG = 2048;
+RFCFDG = 4096;
+RFREND = 8192;
+RFNOMNT = 16384;
+sizeofQid = 16;
+aggr Qid
+{
+	'W' 0 path;
+	'U' 8 vers;
+	'b' 12 type;
+};
+
+defn
+Qid(addr) {
+	complex Qid addr;
+	print("	path	", addr.path, "\n");
+	print("	vers	", addr.vers, "\n");
+	print("	type	", addr.type, "\n");
+};
+
+sizeofDir = 80;
+aggr Dir
+{
+	'u' 0 type;
+	'U' 4 dev;
+	Qid 8 qid;
+	'U' 24 mode;
+	'U' 28 atime;
+	'U' 32 mtime;
+	'V' 40 length;
+	'Y' 48 name;
+	'Y' 56 uid;
+	'Y' 64 gid;
+	'Y' 72 muid;
+};
+
+defn
+Dir(addr) {
+	complex Dir addr;
+	print("	type	", addr.type, "\n");
+	print("	dev	", addr.dev, "\n");
+	print("Qid qid {\n");
+	Qid(addr.qid);
+	print("}\n");
+	print("	mode	", addr.mode, "\n");
+	print("	atime	", addr.atime, "\n");
+	print("	mtime	", addr.mtime, "\n");
+	print("	length	", addr.length, "\n");
+	print("	name	", addr.name\Y, "\n");
+	print("	uid	", addr.uid\Y, "\n");
+	print("	gid	", addr.gid\Y, "\n");
+	print("	muid	", addr.muid\Y, "\n");
+};
+
+sizeofWaitmsg = 24;
+aggr Waitmsg
+{
+	'D' 0 pid;
+	'a' 4 time;
+	'Y' 16 msg;
+};
+
+defn
+Waitmsg(addr) {
+	complex Waitmsg addr;
+	print("	pid	", addr.pid, "\n");
+	print("	time	", addr.time, "\n");
+	print("	msg	", addr.msg\Y, "\n");
+};
+
+sizeofIOchunk = 16;
+aggr IOchunk
+{
+	'Y' 0 addr;
+	'U' 8 len;
+};
+
+defn
+IOchunk(addr) {
+	complex IOchunk addr;
+	print("	addr	", addr.addr\Y, "\n");
+	print("	len	", addr.len, "\n");
+};
+
+OBJVGeometric = 0;
+OBJVTexture = 1;
+OBJVNormal = 2;
+OBJVParametric = 3;
+OBJNVERT = 4;
+OBJEPoint = 0;
+OBJELine = 1;
+OBJEFace = 2;
+OBJECurve = 3;
+OBJECurve2 = 4;
+OBJESurface = 5;
+OBJGGlobal = 0;
+OBJGSmoothing = 1;
+OBJGMerging = 2;
+OBJGObject = 3;
+OBJHTSIZE = 16;
+sizeof_2_ = 32;
+aggr _2_
+{
+	'F' 0 x;
+	'F' 8 y;
+	'F' 16 z;
+	'F' 24 w;
+};
+
+defn
+_2_(addr) {
+	complex _2_ addr;
+	print("	x	", addr.x, "\n");
+	print("	y	", addr.y, "\n");
+	print("	z	", addr.z, "\n");
+	print("	w	", addr.w, "\n");
+};
+
+sizeof_3_ = 24;
+aggr _3_
+{
+	'F' 0 u;
+	'F' 8 v;
+	'F' 16 vv;
+};
+
+defn
+_3_(addr) {
+	complex _3_ addr;
+	print("	u	", addr.u, "\n");
+	print("	v	", addr.v, "\n");
+	print("	vv	", addr.vv, "\n");
+};
+
+sizeof_4_ = 24;
+aggr _4_
+{
+	'F' 0 i;
+	'F' 8 j;
+	'F' 16 k;
+};
+
+defn
+_4_(addr) {
+	complex _4_ addr;
+	print("	i	", addr.i, "\n");
+	print("	j	", addr.j, "\n");
+	print("	k	", addr.k, "\n");
+};
+
+sizeof_5_ = 32;
+aggr _5_
+{
+	{
+	'F' 0 x;
+	'F' 8 y;
+	'F' 16 z;
+	'F' 24 w;
+	};
+	{
+	'F' 0 u;
+	'F' 8 v;
+	'F' 16 vv;
+	};
+	{
+	'F' 0 i;
+	'F' 8 j;
+	'F' 16 k;
+	};
+};
+
+defn
+_5_(addr) {
+	complex _5_ addr;
+	print("_2_ {\n");
+		_2_(addr+0);
+	print("}\n");
+	print("_3_ {\n");
+		_3_(addr+0);
+	print("}\n");
+	print("_4_ {\n");
+		_4_(addr+0);
+	print("}\n");
+};
+
+sizeofOBJVertex = 32;
+aggr OBJVertex
+{
+	{
+	{
+	'F' 0 x;
+	'F' 8 y;
+	'F' 16 z;
+	'F' 24 w;
+	};
+	{
+	'F' 0 u;
+	'F' 8 v;
+	'F' 16 vv;
+	};
+	{
+	'F' 0 i;
+	'F' 8 j;
+	'F' 16 k;
+	};
+	};
+};
+
+defn
+OBJVertex(addr) {
+	complex OBJVertex addr;
+	print("_5_ {\n");
+		_5_(addr+0);
+	print("}\n");
+};
+
+sizeofOBJVertexArray = 16;
+aggr OBJVertexArray
+{
+	'A' OBJVertex 0 verts;
+	'D' 8 nvert;
+};
+
+defn
+OBJVertexArray(addr) {
+	complex OBJVertexArray addr;
+	print("	verts	", addr.verts\Y, "\n");
+	print("	nvert	", addr.nvert, "\n");
+};
+
+sizeofOBJElem = 24;
+aggr OBJElem
+{
+	'Y' 0 indices;
+	'D' 8 nindex;
+	'D' 12 type;
+	'A' OBJElem 16 next;
+};
+
+defn
+OBJElem(addr) {
+	complex OBJElem addr;
+	print("	indices	", addr.indices\Y, "\n");
+	print("	nindex	", addr.nindex, "\n");
+	print("	type	", addr.type, "\n");
+	print("	next	", addr.next\Y, "\n");
+};
+
+sizeofOBJObject = 24;
+aggr OBJObject
+{
+	'Y' 0 name;
+	'A' OBJElem 8 child;
+	'A' OBJObject 16 next;
+};
+
+defn
+OBJObject(addr) {
+	complex OBJObject addr;
+	print("	name	", addr.name\Y, "\n");
+	print("	child	", addr.child\Y, "\n");
+	print("	next	", addr.next\Y, "\n");
+};
+
+sizeofOBJ = 192;
+aggr OBJ
+{
+	'a' 0 vertdata;
+	'a' 64 objtab;
+};
+
+defn
+OBJ(addr) {
+	complex OBJ addr;
+	print("	vertdata	", addr.vertdata, "\n");
+	print("	objtab	", addr.objtab, "\n");
+};
+
+complex OBJ main:obj;
--- /dev/null
+++ b/libobj/test/main.c
@@ -1,0 +1,35 @@
+#include <u.h>
+#include <libc.h>
+#include "../../obj.h"
+
+static char fd0[] = "/fd/0";
+
+void
+usage(void)
+{
+	fprint(2, "usage: %s [file]\n", argv0);
+	exits("usage");
+}
+
+void
+main(int argc, char *argv[])
+{
+	OBJ *obj;
+	char *f;
+
+	f = fd0;
+	OBJfmtinstall();
+	ARGBEGIN{
+	default: usage();
+	}ARGEND;
+	if(argc > 1)
+		usage();
+	if(argc == 1)
+		f = argv[0];
+	obj = objparse(f);
+	if(obj == nil)
+		sysfatal("objparse: %r");
+	print("%O\n", obj);
+	objfree(obj);
+	exits(0);
+}
--- /dev/null
+++ b/libobj/test/mkfile
@@ -1,0 +1,21 @@
+</$objtype/mkfile
+
+BIN=$home/$objtype/bin
+TARG=objtest
+OFILES=\
+	main.$O\
+
+HFILES=../../obj.h
+
+LIB=\
+	../../libobj.a$O\
+
+</sys/src/cmd/mkone
+
+../../libobj.a$O:
+	cd ..
+	mk install
+
+clean nuke:V:
+	rm -f *.[$OS] [$OS].out y.tab.? y.debug y.output $TARG
+	@{cd ..; mk $target}
--- /dev/null
+++ b/main.acid
@@ -1,0 +1,1153 @@
+sizeof_1_ = 8;
+aggr _1_
+{
+	'U' 0 lo;
+	'U' 4 hi;
+};
+
+defn
+_1_(addr) {
+	complex _1_ addr;
+	print("	lo	", addr.lo, "\n");
+	print("	hi	", addr.hi, "\n");
+};
+
+sizeofFPdbleword = 8;
+aggr FPdbleword
+{
+	'F' 0 x;
+	{
+	'U' 0 lo;
+	'U' 4 hi;
+	};
+};
+
+defn
+FPdbleword(addr) {
+	complex FPdbleword addr;
+	print("	x	", addr.x, "\n");
+	print("_1_ {\n");
+		_1_(addr+0);
+	print("}\n");
+};
+
+UTFmax = 4;
+Runesync = 128;
+Runeself = 128;
+Runeerror = 65533;
+Runemax = 1114111;
+Runemask = 2097151;
+sizeofFmt = 80;
+aggr Fmt
+{
+	'b' 0 runes;
+	'Y' 8 start;
+	'Y' 16 to;
+	'Y' 24 stop;
+	'Y' 32 flush;
+	'Y' 40 farg;
+	'D' 48 nfmt;
+	'Y' 56 args;
+	'D' 64 r;
+	'D' 68 width;
+	'D' 72 prec;
+	'U' 76 flags;
+};
+
+defn
+Fmt(addr) {
+	complex Fmt addr;
+	print("	runes	", addr.runes, "\n");
+	print("	start	", addr.start\Y, "\n");
+	print("	to	", addr.to\Y, "\n");
+	print("	stop	", addr.stop\Y, "\n");
+	print("	flush	", addr.flush\Y, "\n");
+	print("	farg	", addr.farg\Y, "\n");
+	print("	nfmt	", addr.nfmt, "\n");
+	print("	args	", addr.args\Y, "\n");
+	print("	r	", addr.r, "\n");
+	print("	width	", addr.width, "\n");
+	print("	prec	", addr.prec, "\n");
+	print("	flags	", addr.flags, "\n");
+};
+
+FmtWidth = 1;
+FmtLeft = 2;
+FmtPrec = 4;
+FmtSharp = 8;
+FmtSpace = 16;
+FmtSign = 32;
+FmtZero = 64;
+FmtUnsigned = 128;
+FmtShort = 256;
+FmtLong = 512;
+FmtVLong = 1024;
+FmtComma = 2048;
+FmtByte = 4096;
+FmtFlag = 8192;
+sizeofTm = 40;
+aggr Tm
+{
+	'D' 0 sec;
+	'D' 4 min;
+	'D' 8 hour;
+	'D' 12 mday;
+	'D' 16 mon;
+	'D' 20 year;
+	'D' 24 wday;
+	'D' 28 yday;
+	'a' 32 zone;
+	'D' 36 tzoff;
+};
+
+defn
+Tm(addr) {
+	complex Tm addr;
+	print("	sec	", addr.sec, "\n");
+	print("	min	", addr.min, "\n");
+	print("	hour	", addr.hour, "\n");
+	print("	mday	", addr.mday, "\n");
+	print("	mon	", addr.mon, "\n");
+	print("	year	", addr.year, "\n");
+	print("	wday	", addr.wday, "\n");
+	print("	yday	", addr.yday, "\n");
+	print("	zone	", addr.zone, "\n");
+	print("	tzoff	", addr.tzoff, "\n");
+};
+
+PNPROC = 1;
+PNGROUP = 2;
+Profoff = 0;
+Profuser = 1;
+Profkernel = 2;
+Proftime = 3;
+Profsample = 4;
+sizeofLock = 8;
+aggr Lock
+{
+	'D' 0 val;
+};
+
+defn
+Lock(addr) {
+	complex Lock addr;
+	print("	val	", addr.val, "\n");
+};
+
+sizeofQLp = 16;
+aggr QLp
+{
+	'D' 0 inuse;
+	'D' 4 state;
+	'A' QLp 8 next;
+};
+
+defn
+QLp(addr) {
+	complex QLp addr;
+	print("	inuse	", addr.inuse, "\n");
+	print("	state	", addr.state, "\n");
+	print("	next	", addr.next\Y, "\n");
+};
+
+sizeofQLock = 32;
+aggr QLock
+{
+	Lock 0 lock;
+	'D' 8 locked;
+	'A' QLp 16 $head;
+	'A' QLp 24 $tail;
+};
+
+defn
+QLock(addr) {
+	complex QLock addr;
+	print("Lock lock {\n");
+	Lock(addr.lock);
+	print("}\n");
+	print("	locked	", addr.locked, "\n");
+	print("	$head	", addr.$head\Y, "\n");
+	print("	$tail	", addr.$tail\Y, "\n");
+};
+
+sizeofRWLock = 32;
+aggr RWLock
+{
+	Lock 0 lock;
+	'D' 8 readers;
+	'D' 12 writer;
+	'A' QLp 16 $head;
+	'A' QLp 24 $tail;
+};
+
+defn
+RWLock(addr) {
+	complex RWLock addr;
+	print("Lock lock {\n");
+	Lock(addr.lock);
+	print("}\n");
+	print("	readers	", addr.readers, "\n");
+	print("	writer	", addr.writer, "\n");
+	print("	$head	", addr.$head\Y, "\n");
+	print("	$tail	", addr.$tail\Y, "\n");
+};
+
+sizeofRendez = 24;
+aggr Rendez
+{
+	'A' QLock 0 l;
+	'A' QLp 8 $head;
+	'A' QLp 16 $tail;
+};
+
+defn
+Rendez(addr) {
+	complex Rendez addr;
+	print("	l	", addr.l\Y, "\n");
+	print("	$head	", addr.$head\Y, "\n");
+	print("	$tail	", addr.$tail\Y, "\n");
+};
+
+sizeofNetConnInfo = 72;
+aggr NetConnInfo
+{
+	'Y' 0 dir;
+	'Y' 8 root;
+	'Y' 16 spec;
+	'Y' 24 lsys;
+	'Y' 32 lserv;
+	'Y' 40 rsys;
+	'Y' 48 rserv;
+	'Y' 56 laddr;
+	'Y' 64 raddr;
+};
+
+defn
+NetConnInfo(addr) {
+	complex NetConnInfo addr;
+	print("	dir	", addr.dir\Y, "\n");
+	print("	root	", addr.root\Y, "\n");
+	print("	spec	", addr.spec\Y, "\n");
+	print("	lsys	", addr.lsys\Y, "\n");
+	print("	lserv	", addr.lserv\Y, "\n");
+	print("	rsys	", addr.rsys\Y, "\n");
+	print("	rserv	", addr.rserv\Y, "\n");
+	print("	laddr	", addr.laddr\Y, "\n");
+	print("	raddr	", addr.raddr\Y, "\n");
+};
+
+RFNAMEG = 1;
+RFENVG = 2;
+RFFDG = 4;
+RFNOTEG = 8;
+RFPROC = 16;
+RFMEM = 32;
+RFNOWAIT = 64;
+RFCNAMEG = 1024;
+RFCENVG = 2048;
+RFCFDG = 4096;
+RFREND = 8192;
+RFNOMNT = 16384;
+sizeofQid = 16;
+aggr Qid
+{
+	'W' 0 path;
+	'U' 8 vers;
+	'b' 12 type;
+};
+
+defn
+Qid(addr) {
+	complex Qid addr;
+	print("	path	", addr.path, "\n");
+	print("	vers	", addr.vers, "\n");
+	print("	type	", addr.type, "\n");
+};
+
+sizeofDir = 80;
+aggr Dir
+{
+	'u' 0 type;
+	'U' 4 dev;
+	Qid 8 qid;
+	'U' 24 mode;
+	'U' 28 atime;
+	'U' 32 mtime;
+	'V' 40 length;
+	'Y' 48 name;
+	'Y' 56 uid;
+	'Y' 64 gid;
+	'Y' 72 muid;
+};
+
+defn
+Dir(addr) {
+	complex Dir addr;
+	print("	type	", addr.type, "\n");
+	print("	dev	", addr.dev, "\n");
+	print("Qid qid {\n");
+	Qid(addr.qid);
+	print("}\n");
+	print("	mode	", addr.mode, "\n");
+	print("	atime	", addr.atime, "\n");
+	print("	mtime	", addr.mtime, "\n");
+	print("	length	", addr.length, "\n");
+	print("	name	", addr.name\Y, "\n");
+	print("	uid	", addr.uid\Y, "\n");
+	print("	gid	", addr.gid\Y, "\n");
+	print("	muid	", addr.muid\Y, "\n");
+};
+
+sizeofWaitmsg = 24;
+aggr Waitmsg
+{
+	'D' 0 pid;
+	'a' 4 time;
+	'Y' 16 msg;
+};
+
+defn
+Waitmsg(addr) {
+	complex Waitmsg addr;
+	print("	pid	", addr.pid, "\n");
+	print("	time	", addr.time, "\n");
+	print("	msg	", addr.msg\Y, "\n");
+};
+
+sizeofIOchunk = 16;
+aggr IOchunk
+{
+	'Y' 0 addr;
+	'U' 8 len;
+};
+
+defn
+IOchunk(addr) {
+	complex IOchunk addr;
+	print("	addr	", addr.addr\Y, "\n");
+	print("	len	", addr.len, "\n");
+};
+
+Nqwds = 2;
+Nqshift = 5;
+Nqmask = -1;
+Nqbits = 64;
+sizeofChannel = 48;
+aggr Channel
+{
+	'D' 0 s;
+	'U' 4 f;
+	'U' 8 n;
+	'D' 12 e;
+	'D' 16 freed;
+	'Y' 24 qentry;
+	'D' 32 nentry;
+	'D' 36 closed;
+	'a' 40 v;
+};
+
+defn
+Channel(addr) {
+	complex Channel addr;
+	print("	s	", addr.s, "\n");
+	print("	f	", addr.f, "\n");
+	print("	n	", addr.n, "\n");
+	print("	e	", addr.e, "\n");
+	print("	freed	", addr.freed, "\n");
+	print("	qentry	", addr.qentry\Y, "\n");
+	print("	nentry	", addr.nentry, "\n");
+	print("	closed	", addr.closed, "\n");
+	print("	v	", addr.v, "\n");
+};
+
+CHANEND = 0;
+CHANSND = 1;
+CHANRCV = 2;
+CHANNOP = 3;
+CHANNOBLK = 4;
+sizeofAlt = 48;
+aggr Alt
+{
+	'A' Channel 0 c;
+	'Y' 8 v;
+	'D' 16 op;
+	'Y' 24 err;
+	'A' Channel 32 tag;
+	'D' 40 entryno;
+};
+
+defn
+Alt(addr) {
+	complex Alt addr;
+	print("	c	", addr.c\Y, "\n");
+	print("	v	", addr.v\Y, "\n");
+	print("	op	", addr.op, "\n");
+	print("	err	", addr.err\Y, "\n");
+	print("	tag	", addr.tag\Y, "\n");
+	print("	entryno	", addr.entryno, "\n");
+};
+
+sizeofRef = 8;
+aggr Ref
+{
+	'D' 0 ref;
+};
+
+defn
+Ref(addr) {
+	complex Ref addr;
+	print("	ref	", addr.ref, "\n");
+};
+
+DOpaque = 4294967295;
+DTransparent = 0;
+DBlack = 255;
+DWhite = 4294967295;
+DRed = 4278190335;
+DGreen = 16711935;
+DBlue = 65535;
+DCyan = 16777215;
+DMagenta = 4278255615;
+DYellow = 4294902015;
+DPaleyellow = 4294945535;
+DDarkyellow = 4008615679;
+DDarkgreen = 1149781247;
+DPalegreen = 2868882175;
+DMedgreen = 2295105791;
+DDarkblue = 22015;
+DPalebluegreen = 2868903935;
+DPaleblue = 48127;
+DBluegreen = 8947967;
+DGreygreen = 1437248255;
+DPalegreygreen = 2666458879;
+DYellowgreen = 2576960767;
+DMedblue = 39423;
+DGreyblue = 6142975;
+DPalegreyblue = 1234427391;
+DPurpleblue = 2290666751;
+DNotacolor = 4294967040;
+DNofill = 4294967040;
+Displaybufsize = 8000;
+ICOSSCALE = 1024;
+Borderwidth = 4;
+Refbackup = 0;
+Refnone = 1;
+Refmesg = 2;
+Endsquare = 0;
+Enddisc = 1;
+Endarrow = 2;
+Endmask = 31;
+Clear = 0;
+SinD = 8;
+DinS = 4;
+SoutD = 2;
+DoutS = 1;
+S = 10;
+SoverD = 11;
+SatopD = 9;
+SxorD = 3;
+D = 5;
+DoverS = 7;
+DatopS = 6;
+DxorS = 3;
+Ncomp = 12;
+CRed = 0;
+CGreen = 1;
+CBlue = 2;
+CGrey = 3;
+CAlpha = 4;
+CMap = 5;
+CIgnore = 6;
+NChan = 7;
+GREY1 = 49;
+GREY2 = 50;
+GREY4 = 52;
+GREY8 = 56;
+CMAP8 = 88;
+RGB15 = 1627723045;
+RGB16 = 333349;
+RGB24 = 530472;
+RGBA32 = 135800904;
+ARGB32 = 1208490024;
+XRGB32 = 1745360936;
+BGR24 = 2627592;
+ABGR32 = 1210587144;
+XBGR32 = 1747458056;
+sizeofPoint = 8;
+aggr Point
+{
+	'D' 0 x;
+	'D' 4 y;
+};
+
+defn
+Point(addr) {
+	complex Point addr;
+	print("	x	", addr.x, "\n");
+	print("	y	", addr.y, "\n");
+};
+
+sizeofRectangle = 16;
+aggr Rectangle
+{
+	Point 0 min;
+	Point 8 max;
+};
+
+defn
+Rectangle(addr) {
+	complex Rectangle addr;
+	print("Point min {\n");
+	Point(addr.min);
+	print("}\n");
+	print("Point max {\n");
+	Point(addr.max);
+	print("}\n");
+};
+
+sizeofScreen = 32;
+aggr Screen
+{
+	'Y' 0 display;
+	'D' 8 id;
+	'Y' 16 image;
+	'Y' 24 fill;
+};
+
+defn
+Screen(addr) {
+	complex Screen addr;
+	print("	display	", addr.display\Y, "\n");
+	print("	id	", addr.id, "\n");
+	print("	image	", addr.image\Y, "\n");
+	print("	fill	", addr.fill\Y, "\n");
+};
+
+sizeofDisplay = 264;
+aggr Display
+{
+	QLock 0 qlock;
+	'D' 32 locking;
+	'D' 36 dirno;
+	'D' 40 fd;
+	'D' 44 reffd;
+	'D' 48 ctlfd;
+	'D' 52 imageid;
+	'D' 56 $local;
+	'Y' 64 error;
+	'Y' 72 devdir;
+	'Y' 80 windir;
+	'a' 88 oldlabel;
+	'U' 152 dataqid;
+	'Y' 160 white;
+	'Y' 168 black;
+	'Y' 176 opaque;
+	'Y' 184 transparent;
+	'Y' 192 image;
+	'Y' 200 buf;
+	'D' 208 bufsize;
+	'Y' 216 bufp;
+	'Y' 224 defaultfont;
+	'Y' 232 defaultsubfont;
+	'Y' 240 windows;
+	'Y' 248 screenimage;
+	'D' 256 _isnewdisplay;
+};
+
+defn
+Display(addr) {
+	complex Display addr;
+	print("QLock qlock {\n");
+	QLock(addr.qlock);
+	print("}\n");
+	print("	locking	", addr.locking, "\n");
+	print("	dirno	", addr.dirno, "\n");
+	print("	fd	", addr.fd, "\n");
+	print("	reffd	", addr.reffd, "\n");
+	print("	ctlfd	", addr.ctlfd, "\n");
+	print("	imageid	", addr.imageid, "\n");
+	print("	$local	", addr.$local, "\n");
+	print("	error	", addr.error\Y, "\n");
+	print("	devdir	", addr.devdir\Y, "\n");
+	print("	windir	", addr.windir\Y, "\n");
+	print("	oldlabel	", addr.oldlabel, "\n");
+	print("	dataqid	", addr.dataqid, "\n");
+	print("	white	", addr.white\Y, "\n");
+	print("	black	", addr.black\Y, "\n");
+	print("	opaque	", addr.opaque\Y, "\n");
+	print("	transparent	", addr.transparent\Y, "\n");
+	print("	image	", addr.image\Y, "\n");
+	print("	buf	", addr.buf\Y, "\n");
+	print("	bufsize	", addr.bufsize, "\n");
+	print("	bufp	", addr.bufp\Y, "\n");
+	print("	defaultfont	", addr.defaultfont\Y, "\n");
+	print("	defaultsubfont	", addr.defaultsubfont\Y, "\n");
+	print("	windows	", addr.windows\Y, "\n");
+	print("	screenimage	", addr.screenimage\Y, "\n");
+	print("	_isnewdisplay	", addr._isnewdisplay, "\n");
+};
+
+sizeofImage = 80;
+aggr Image
+{
+	'A' Display 0 display;
+	'D' 8 id;
+	Rectangle 16 r;
+	Rectangle 32 clipr;
+	'D' 48 depth;
+	'U' 52 chan;
+	'D' 56 repl;
+	'A' Screen 64 screen;
+	'A' Image 72 next;
+};
+
+defn
+Image(addr) {
+	complex Image addr;
+	print("	display	", addr.display\Y, "\n");
+	print("	id	", addr.id, "\n");
+	print("Rectangle r {\n");
+	Rectangle(addr.r);
+	print("}\n");
+	print("Rectangle clipr {\n");
+	Rectangle(addr.clipr);
+	print("}\n");
+	print("	depth	", addr.depth, "\n");
+	print("	chan	", addr.chan, "\n");
+	print("	repl	", addr.repl, "\n");
+	print("	screen	", addr.screen\Y, "\n");
+	print("	next	", addr.next\Y, "\n");
+};
+
+sizeofRGB = 16;
+aggr RGB
+{
+	'U' 0 red;
+	'U' 4 green;
+	'U' 8 blue;
+};
+
+defn
+RGB(addr) {
+	complex RGB addr;
+	print("	red	", addr.red, "\n");
+	print("	green	", addr.green, "\n");
+	print("	blue	", addr.blue, "\n");
+};
+
+sizeofFontchar = 8;
+aggr Fontchar
+{
+	'D' 0 x;
+	'b' 4 top;
+	'b' 5 bottom;
+	'C' 6 left;
+	'b' 7 width;
+};
+
+defn
+Fontchar(addr) {
+	complex Fontchar addr;
+	print("	x	", addr.x, "\n");
+	print("	top	", addr.top, "\n");
+	print("	bottom	", addr.bottom, "\n");
+	print("	left	", addr.left, "\n");
+	print("	width	", addr.width, "\n");
+};
+
+sizeofSubfont = 40;
+aggr Subfont
+{
+	'Y' 0 name;
+	'd' 8 n;
+	'b' 10 height;
+	'C' 11 ascent;
+	'A' Fontchar 16 info;
+	'A' Image 24 bits;
+	'D' 32 ref;
+};
+
+defn
+Subfont(addr) {
+	complex Subfont addr;
+	print("	name	", addr.name\Y, "\n");
+	print("	n	", addr.n, "\n");
+	print("	height	", addr.height, "\n");
+	print("	ascent	", addr.ascent, "\n");
+	print("	info	", addr.info\Y, "\n");
+	print("	bits	", addr.bits\Y, "\n");
+	print("	ref	", addr.ref, "\n");
+};
+
+LOG2NFCACHE = 6;
+NFCACHE = 64;
+NFLOOK = 5;
+NFSUBF = 2;
+MAXFCACHE = 1029;
+MAXSUBF = 50;
+DSUBF = 4;
+SUBFAGE = 10000;
+CACHEAGE = 10000;
+sizeofCachefont = 32;
+aggr Cachefont
+{
+	'U' 0 min;
+	'U' 4 max;
+	'D' 8 offset;
+	'Y' 16 name;
+	'Y' 24 subfontname;
+};
+
+defn
+Cachefont(addr) {
+	complex Cachefont addr;
+	print("	min	", addr.min, "\n");
+	print("	max	", addr.max, "\n");
+	print("	offset	", addr.offset, "\n");
+	print("	name	", addr.name\Y, "\n");
+	print("	subfontname	", addr.subfontname\Y, "\n");
+};
+
+sizeofCacheinfo = 16;
+aggr Cacheinfo
+{
+	'u' 0 x;
+	'b' 2 width;
+	'C' 3 left;
+	'U' 4 value;
+	'u' 8 age;
+};
+
+defn
+Cacheinfo(addr) {
+	complex Cacheinfo addr;
+	print("	x	", addr.x, "\n");
+	print("	width	", addr.width, "\n");
+	print("	left	", addr.left, "\n");
+	print("	value	", addr.value, "\n");
+	print("	age	", addr.age, "\n");
+};
+
+sizeofCachesubf = 24;
+aggr Cachesubf
+{
+	'U' 0 age;
+	'A' Cachefont 8 cf;
+	'A' Subfont 16 f;
+};
+
+defn
+Cachesubf(addr) {
+	complex Cachesubf addr;
+	print("	age	", addr.age, "\n");
+	print("	cf	", addr.cf\Y, "\n");
+	print("	f	", addr.f\Y, "\n");
+};
+
+sizeofFont = 72;
+aggr Font
+{
+	'Y' 0 name;
+	'A' Display 8 display;
+	'd' 16 height;
+	'd' 18 ascent;
+	'd' 20 width;
+	'd' 22 nsub;
+	'U' 24 age;
+	'D' 28 maxdepth;
+	'D' 32 ncache;
+	'D' 36 nsubf;
+	'A' Cacheinfo 40 cache;
+	'A' Cachesubf 48 subf;
+	'A' Cachefont 56 sub;
+	'A' Image 64 cacheimage;
+};
+
+defn
+Font(addr) {
+	complex Font addr;
+	print("	name	", addr.name\Y, "\n");
+	print("	display	", addr.display\Y, "\n");
+	print("	height	", addr.height, "\n");
+	print("	ascent	", addr.ascent, "\n");
+	print("	width	", addr.width, "\n");
+	print("	nsub	", addr.nsub, "\n");
+	print("	age	", addr.age, "\n");
+	print("	maxdepth	", addr.maxdepth, "\n");
+	print("	ncache	", addr.ncache, "\n");
+	print("	nsubf	", addr.nsubf, "\n");
+	print("	cache	", addr.cache\Y, "\n");
+	print("	subf	", addr.subf\Y, "\n");
+	print("	sub	", addr.sub\Y, "\n");
+	print("	cacheimage	", addr.cacheimage\Y, "\n");
+};
+
+complex Point ZP;
+complex Rectangle ZR;
+complex Display display;
+complex Font font;
+complex Image screen;
+complex Screen _screen;
+sizeofMouse = 24;
+aggr Mouse
+{
+	'D' 0 buttons;
+	Point 8 xy;
+	'U' 16 msec;
+};
+
+defn
+Mouse(addr) {
+	complex Mouse addr;
+	print("	buttons	", addr.buttons, "\n");
+	print("Point xy {\n");
+	Point(addr.xy);
+	print("}\n");
+	print("	msec	", addr.msec, "\n");
+};
+
+sizeofMousectl = 72;
+aggr Mousectl
+{
+	{
+	'D' 0 buttons;
+	Point 8 xy;
+	'U' 16 msec;
+	};
+	'A' Channel 24 c;
+	'A' Channel 32 resizec;
+	'Y' 40 file;
+	'D' 48 mfd;
+	'D' 52 cfd;
+	'D' 56 pid;
+	'A' Image 64 image;
+};
+
+defn
+Mousectl(addr) {
+	complex Mousectl addr;
+	print("Mouse {\n");
+		Mouse(addr+0);
+	print("}\n");
+	print("	c	", addr.c\Y, "\n");
+	print("	resizec	", addr.resizec\Y, "\n");
+	print("	file	", addr.file\Y, "\n");
+	print("	mfd	", addr.mfd, "\n");
+	print("	cfd	", addr.cfd, "\n");
+	print("	pid	", addr.pid, "\n");
+	print("	image	", addr.image\Y, "\n");
+};
+
+sizeofMenu = 24;
+aggr Menu
+{
+	'Y' 0 item;
+	'Y' 8 gen;
+	'D' 16 lasthit;
+};
+
+defn
+Menu(addr) {
+	complex Menu addr;
+	print("	item	", addr.item\Y, "\n");
+	print("	gen	", addr.gen\Y, "\n");
+	print("	lasthit	", addr.lasthit, "\n");
+};
+
+sizeofKeyboardctl = 32;
+aggr Keyboardctl
+{
+	'A' Channel 0 c;
+	'Y' 8 file;
+	'D' 16 consfd;
+	'D' 20 ctlfd;
+	'D' 24 pid;
+};
+
+defn
+Keyboardctl(addr) {
+	complex Keyboardctl addr;
+	print("	c	", addr.c\Y, "\n");
+	print("	file	", addr.file\Y, "\n");
+	print("	consfd	", addr.consfd, "\n");
+	print("	ctlfd	", addr.ctlfd, "\n");
+	print("	pid	", addr.pid, "\n");
+};
+
+KF = 61440;
+Spec = 63488;
+PF = 63520;
+Kview = 63488;
+Khome = 61453;
+Kup = 61454;
+Kdown = 63488;
+Kpgup = 61455;
+Kprint = 61456;
+Kleft = 61457;
+Kright = 61458;
+Kpgdown = 61459;
+Kins = 61460;
+Kalt = 61461;
+Kshift = 61462;
+Kctl = 61463;
+Kend = 61464;
+Kscroll = 61465;
+Kscrolloneup = 61472;
+Kscrollonedown = 61473;
+Ksoh = 1;
+Kstx = 2;
+Ketx = 3;
+Keof = 4;
+Kenq = 5;
+Kack = 6;
+Kbs = 8;
+Knack = 21;
+Ketb = 23;
+Kdel = 127;
+Kesc = 27;
+Kbreak = 63585;
+Kcaps = 63588;
+Knum = 63589;
+Kmiddle = 63590;
+Kaltgr = 63591;
+Kmouse = 63744;
+sizeofPoint2 = 24;
+aggr Point2
+{
+	'F' 0 x;
+	'F' 8 y;
+	'F' 16 w;
+};
+
+defn
+Point2(addr) {
+	complex Point2 addr;
+	print("	x	", addr.x, "\n");
+	print("	y	", addr.y, "\n");
+	print("	w	", addr.w, "\n");
+};
+
+sizeofPoint3 = 32;
+aggr Point3
+{
+	'F' 0 x;
+	'F' 8 y;
+	'F' 16 z;
+	'F' 24 w;
+};
+
+defn
+Point3(addr) {
+	complex Point3 addr;
+	print("	x	", addr.x, "\n");
+	print("	y	", addr.y, "\n");
+	print("	z	", addr.z, "\n");
+	print("	w	", addr.w, "\n");
+};
+
+sizeofQuaternion = 32;
+aggr Quaternion
+{
+	'F' 0 r;
+	'F' 8 i;
+	'F' 16 j;
+	'F' 24 k;
+};
+
+defn
+Quaternion(addr) {
+	complex Quaternion addr;
+	print("	r	", addr.r, "\n");
+	print("	i	", addr.i, "\n");
+	print("	j	", addr.j, "\n");
+	print("	k	", addr.k, "\n");
+};
+
+sizeofReferenceFrame = 72;
+aggr ReferenceFrame
+{
+	Point2 0 p;
+	Point2 24 xb;
+	Point2 48 yb;
+};
+
+defn
+ReferenceFrame(addr) {
+	complex ReferenceFrame addr;
+	print("Point2 p {\n");
+	Point2(addr.p);
+	print("}\n");
+	print("Point2 xb {\n");
+	Point2(addr.xb);
+	print("}\n");
+	print("Point2 yb {\n");
+	Point2(addr.yb);
+	print("}\n");
+};
+
+sizeofReferenceFrame3 = 128;
+aggr ReferenceFrame3
+{
+	Point3 0 p;
+	Point3 32 xb;
+	Point3 64 yb;
+	Point3 96 zb;
+};
+
+defn
+ReferenceFrame3(addr) {
+	complex ReferenceFrame3 addr;
+	print("Point3 p {\n");
+	Point3(addr.p);
+	print("}\n");
+	print("Point3 xb {\n");
+	Point3(addr.xb);
+	print("}\n");
+	print("Point3 yb {\n");
+	Point3(addr.yb);
+	print("}\n");
+	print("Point3 zb {\n");
+	Point3(addr.zb);
+	print("}\n");
+};
+
+sizeofTriangle3 = 96;
+aggr Triangle3
+{
+	Point3 0 p0;
+	Point3 32 p1;
+	Point3 64 p2;
+};
+
+defn
+Triangle3(addr) {
+	complex Triangle3 addr;
+	print("Point3 p0 {\n");
+	Point3(addr.p0);
+	print("}\n");
+	print("Point3 p1 {\n");
+	Point3(addr.p1);
+	print("}\n");
+	print("Point3 p2 {\n");
+	Point3(addr.p2);
+	print("}\n");
+};
+
+Portho = 0;
+Ppersp = 1;
+sizeofVertex = 64;
+aggr Vertex
+{
+	Point3 0 p;
+	Point3 32 n;
+};
+
+defn
+Vertex(addr) {
+	complex Vertex addr;
+	print("Point3 p {\n");
+	Point3(addr.p);
+	print("}\n");
+	print("Point3 n {\n");
+	Point3(addr.n);
+	print("}\n");
+};
+
+sizeofTriangle = 24;
+aggr Triangle
+{
+	Point 0 p0;
+	Point 8 p1;
+	Point 16 p2;
+};
+
+defn
+Triangle(addr) {
+	complex Triangle addr;
+	print("Point p0 {\n");
+	Point(addr.p0);
+	print("}\n");
+	print("Point p1 {\n");
+	Point(addr.p1);
+	print("}\n");
+	print("Point p2 {\n");
+	Point(addr.p2);
+	print("}\n");
+};
+
+sizeof_2_ = 16;
+aggr _2_
+{
+	'F' 0 n;
+	'F' 8 f;
+};
+
+defn
+_2_(addr) {
+	complex _2_ addr;
+	print("	n	", addr.n, "\n");
+	print("	f	", addr.f, "\n");
+};
+
+sizeofCamera = 296;
+aggr Camera
+{
+	{
+	Point3 0 p;
+	Point3 32 xb;
+	Point3 64 yb;
+	Point3 96 zb;
+	};
+	'A' Image 128 viewport;
+	'F' 136 fov;
+	_2_ 144 clip;
+	'D' 160 ptype;
+	'a' 168 proj;
+};
+
+defn
+Camera(addr) {
+	complex Camera addr;
+	print("ReferenceFrame3 {\n");
+		ReferenceFrame3(addr+0);
+	print("}\n");
+	print("	viewport	", addr.viewport\Y, "\n");
+	print("	fov	", addr.fov, "\n");
+	print("_2_ clip {\n");
+	_2_(addr.clip);
+	print("}\n");
+	print("	ptype	", addr.ptype, "\n");
+	print("	proj	", addr.proj, "\n");
+};
+
+STACK = 8192;
+SEC = 1000;
+FPS = 60;
+Scamno = 0;
+Scampos = 1;
+Scambs = 2;
+Sfov = 3;
+Se = 4;
+complex Mousectl mctl;
+complex Keyboardctl kctl;
+complex ReferenceFrame scrrf;
+complex RWLock worldlock;
+complex Triangle3 tri;
+complex Camera cam0;
+complex Camera cam1;
+complex Camera cam2;
+complex Camera cam3;
+complex Camera maincam;
+complex Fmt vfmt:f;
+complex Point2 vfmt:p;
+complex Fmt Vfmt:f;
+complex Point3 Vfmt:p;
+complex Point3 flatten:p;
+complex Point2 toscreen:p;
+complex Point fromscreen:p;
+complex Triangle redraw:trit;
+complex Quaternion key:q;
+complex Quaternion key:qtmp;
+MOUSE = 0;
+KBD = 1;
+RESIZE = 2;
--- /dev/null
+++ b/main.c
@@ -1,0 +1,396 @@
+#include <u.h>
+#include <libc.h>
+#include <thread.h>
+#include <draw.h>
+#include <mouse.h>
+#include <keyboard.h>
+#include "geometry.h"
+#include "graphics.h"
+#include "obj.h"
+#include "dat.h"
+#include "fns.h"
+
+Rune keys[Ke] = {
+ [K↑]		= Kup,
+ [K↓]		= Kdown,
+ [K←]		= Kleft,
+ [K→]		= Kright,
+ [Krise]	= Kpgup,
+ [Kfall]	= Kpgdown,
+ [KR↑]		= 'w',
+ [KR↓]		= 's',
+ [KR←]		= 'a',
+ [KR→]		= 'd',
+ [KR↺]		= 'q',
+ [KR↻]		= 'e',
+ [Kcam0]	= KF|1,
+ [Kcam1]	= KF|2,
+ [Kcam2]	= KF|3,
+ [Kcam3]	= KF|4,
+ [Kscrshot]	= KF|12
+};
+
+char stats[Se][256];
+
+Mousectl *mctl;
+int kdown;
+double t0, Δt;
+RWLock worldlock;
+Mesh model;
+char *mdlpath = "../threedee/mdl/rocket.obj";
+
+Camera cams[4], *maincam;
+
+#pragma varargck type "v" Point2
+int
+vfmt(Fmt *f)
+{
+	Point2 p;
+
+	p = va_arg(f->args, Point2);
+	return fmtprint(f, "[%g %g %g]", p.x, p.y, p.w);
+}
+
+#pragma varargck type "V" Point3
+int
+Vfmt(Fmt *f)
+{
+	Point3 p;
+
+	p = va_arg(f->args, Point3);
+	return fmtprint(f, "[%g %g %g %g]", p.x, p.y, p.z, p.w);
+}
+
+void *
+emalloc(ulong n)
+{
+	void *p;
+
+	p = malloc(n);
+	if(p == nil)
+		sysfatal("malloc: %r");
+	setmalloctag(p, getcallerpc(&n));
+	return p;
+}
+
+void *
+erealloc(void *p, ulong n)
+{
+	void *np;
+
+	np = realloc(p, n);
+	if(np == nil)
+		sysfatal("realloc: %r");
+	setrealloctag(np, getcallerpc(&p));
+	return np;
+}
+
+int
+depthcmp(void *a, void *b)
+{
+	Triangle3 *ta, *tb;
+	double za, zb;
+
+	ta = (Triangle3 *)a;
+	tb = (Triangle3 *)b;
+	za = (ta->p0.z + ta->p1.z + ta->p2.z)/3;
+	zb = (tb->p0.z + tb->p1.z + tb->p2.z)/3;
+	return zb-za;
+}
+
+void
+drawaxis(void)
+{
+	Point3	op = (Point3){0, 0, 0, 1},
+		px = (Point3){1, 0, 0, 1},
+		py = (Point3){0, 1, 0, 1},
+		pz = (Point3){0, 0, 1, 1};
+
+	line3(maincam, op, px, 0, Endarrow, display->black);
+	string3(maincam, px, display->black, font, "x");
+	line3(maincam, op, py, 0, Endarrow, display->black);
+	string3(maincam, py, display->black, font, "y");
+	line3(maincam, op, pz, 0, Endarrow, display->black);
+	string3(maincam, pz, display->black, font, "z");
+}
+
+void
+drawstats(void)
+{
+	int i;
+
+	snprint(stats[Scamno], sizeof(stats[Scamno]), "CAM %d", maincam-cams+1);
+	snprint(stats[Sfov], sizeof(stats[Sfov]), "FOV %g°", maincam->fov);
+	snprint(stats[Scampos], sizeof(stats[Scampos]), "%V", maincam->p);
+	snprint(stats[Scambx], sizeof(stats[Scambx]), "bx %V", maincam->bx);
+	snprint(stats[Scamby], sizeof(stats[Scamby]), "by %V", maincam->by);
+	snprint(stats[Scambz], sizeof(stats[Scambz]), "bz %V", maincam->bz);
+	for(i = 0; i < Se; i++)
+		stringn(maincam->viewport, addpt(screen->r.min, Pt(10, 10 + i*font->height)), display->black, ZP, font, stats[i], sizeof(stats[i]));
+}
+
+void
+redraw(void)
+{
+	Triangle3 tmp;
+	static TTriangle3 *vistris;
+	static int nallocvistri;
+	Triangle trit;
+	Point3 n;
+	u8int c;
+	int i, nvistri;
+
+	nvistri = 0;
+	if(nallocvistri == 0 && vistris == nil){
+		nallocvistri = model.ntri/2;
+		vistris = emalloc(nallocvistri*sizeof(TTriangle3));
+	}
+	for(i = 0; i < model.ntri; i++){
+		/* world to camera */
+		tmp.p0 = WORLD2VCS(maincam, model.tris[i].p0);
+		tmp.p1 = WORLD2VCS(maincam, model.tris[i].p1);
+		tmp.p2 = WORLD2VCS(maincam, model.tris[i].p2);
+		/* back-face culling */
+		n = normvec3(crossvec3(subpt3(tmp.p1, tmp.p0), subpt3(tmp.p2, tmp.p0)));
+		if(dotvec3(n, mulpt3(tmp.p0, -1)) <= 0)
+			continue;
+		/* camera to projected ndc */
+		tmp.p0 = VCS2NDC(maincam, tmp.p0);
+		tmp.p1 = VCS2NDC(maincam, tmp.p1);
+		tmp.p2 = VCS2NDC(maincam, tmp.p2);
+		/* clipping */
+		/*
+		 * no clipping for now, the whole triangle is ignored
+		 * if any of its vertices gets outside the fustrum.
+		 */
+		if(isclipping(tmp.p0) || isclipping(tmp.p1) || isclipping(tmp.p2))
+			continue;
+		if(nvistri >= nallocvistri){
+			nallocvistri += model.ntri/3;
+			vistris = erealloc(vistris, nallocvistri*sizeof(TTriangle3));
+		}
+		vistris[nvistri] = (TTriangle3)tmp;
+		c = 0xff*fabs(dotvec3(n, Vec3(0, 0, 1)));
+		vistris[nvistri].tx = allocimage(display, Rect(0, 0, 1, 1), screen->chan, 1, c<<24|c<<16|c<<8|0xff);
+		nvistri++;
+	}
+	qsort(vistris, nvistri, sizeof(TTriangle3), depthcmp);
+	lockdisplay(display);
+	draw(maincam->viewport, maincam->viewport->r, display->white, nil, ZP);
+	drawaxis();
+	for(i = 0; i < nvistri; i++){
+		/* ndc to screen */
+		trit.p0 = toviewport(maincam, vistris[i].p0);
+		trit.p1 = toviewport(maincam, vistris[i].p1);
+		trit.p2 = toviewport(maincam, vistris[i].p2);
+		filltriangle(maincam->viewport, trit, vistris[i].tx, ZP);
+		triangle(maincam->viewport, trit, 0, display->black, ZP);
+		freeimage(vistris[i].tx);
+	}
+	drawstats();
+	flushimage(display, 1);
+	unlockdisplay(display);
+}
+
+void
+scrsynproc(void *)
+{
+	threadsetname("scrsynproc");
+	for(;;){
+		rlock(&worldlock);
+		redraw();
+		runlock(&worldlock);
+		sleep(FPS2MS(60));
+	}
+}
+
+void
+screenshot(void)
+{
+	int fd;
+	static char buf[128];
+
+	enter("Path", buf, sizeof buf, mctl, nil, nil);
+	if(buf[0] == 0)
+		return;
+	fd = create(buf, OWRITE, 0644);
+	if(fd < 0)
+		sysfatal("open: %r");
+	if(writeimage(fd, screen, 1) < 0)
+		sysfatal("writeimage: %r");
+	close(fd);
+}
+
+void
+mouse(void)
+{
+	if(mctl->buttons & 1)
+		fprint(2, "%v\n", fromviewport(maincam, mctl->xy));
+	if(mctl->buttons & 8){
+		maincam->fov -= 5;
+		if(maincam->fov < 1)
+			maincam->fov = 1;
+		reloadcamera(maincam);
+	}
+	if(mctl->buttons & 16){
+		maincam->fov += 5;
+		if(maincam->fov > 359)
+			maincam->fov = 359;
+		reloadcamera(maincam);
+	}
+}
+
+void
+kbdproc(void *)
+{
+	Rune r, *a;
+	char buf[128], *s;
+	int fd, n;
+
+	threadsetname("kbdproc");
+	if((fd = open("/dev/kbd", OREAD)) < 0)
+		sysfatal("kbdproc: %r");
+	memset(buf, 0, sizeof buf);
+	for(;;){
+		if(buf[0] != 0){
+			n = strlen(buf)+1;
+			memmove(buf, buf+n, sizeof(buf)-n);
+		}
+		if(buf[0] == 0){
+			if((n = read(fd, buf, sizeof(buf)-1)) <= 0)
+				break;
+			buf[n-1] = 0;
+			buf[n] = 0;
+		}
+		if(buf[0] == 'c'){
+			if(utfrune(buf, Kdel)){
+				close(fd);
+				threadexitsall(nil);
+			}
+		}
+		if(buf[0] != 'k' && buf[0] != 'K')
+			continue;
+		s = buf+1;
+		kdown = 0;
+		while(*s){
+			s += chartorune(&r, s);
+			for(a = keys; a < keys+Ke; a++)
+				if(r == *a){
+					kdown |= 1 << a-keys;
+					break;
+				}
+		}
+	}
+}
+
+void
+handlekeys(void)
+{
+	if(kdown & 1<<K↑)
+		placecamera(maincam, subpt3(maincam->p, maincam->bz), maincam->bz, maincam->by);
+	if(kdown & 1<<K↓)
+		placecamera(maincam, addpt3(maincam->p, maincam->bz), maincam->bz, maincam->by);
+	if(kdown & 1<<K←)
+		placecamera(maincam, subpt3(maincam->p, maincam->bx), maincam->bz, maincam->by);
+	if(kdown & 1<<K→)
+		placecamera(maincam, addpt3(maincam->p, maincam->bx), maincam->bz, maincam->by);
+	if(kdown & 1<<Krise)
+		placecamera(maincam, addpt3(maincam->p, maincam->by), maincam->bz, maincam->by);
+	if(kdown & 1<<Kfall)
+		placecamera(maincam, subpt3(maincam->p, maincam->by), maincam->bz, maincam->by);
+	if(kdown & 1<<KR↑)
+		aimcamera(maincam, qrotate(maincam->bz, maincam->bx, 5*DEG));
+	if(kdown & 1<<KR↓)
+		aimcamera(maincam, qrotate(maincam->bz, maincam->bx, -5*DEG));
+	if(kdown & 1<<KR←)
+		aimcamera(maincam, qrotate(maincam->bz, maincam->by, 5*DEG));
+	if(kdown & 1<<KR→)
+		aimcamera(maincam, qrotate(maincam->bz, maincam->by, -5*DEG));
+	if(kdown & 1<<KR↺)
+		placecamera(maincam, maincam->p, maincam->bz, qrotate(maincam->by, maincam->bz, 5*DEG));
+	if(kdown & 1<<KR↻)
+		placecamera(maincam, maincam->p, maincam->bz, qrotate(maincam->by, maincam->bz, -5*DEG));
+	if(kdown & 1<<Kcam0)
+		maincam = &cams[0];
+	if(kdown & 1<<Kcam1)
+		maincam = &cams[1];
+	if(kdown & 1<<Kcam2)
+		maincam = &cams[2];
+	if(kdown & 1<<Kcam3)
+		maincam = &cams[3];
+	if(kdown & 1<<Kscrshot)
+		screenshot();
+}
+
+void
+resize(void)
+{
+	lockdisplay(display);
+	if(getwindow(display, Refnone) < 0)
+		fprint(2, "can't reattach to window\n");
+	unlockdisplay(display);
+	maincam->viewport = screen;
+	reloadcamera(maincam);
+}
+
+void
+usage(void)
+{
+	fprint(2, "usage: %s\n", argv0);
+	exits("usage");
+}
+
+void
+threadmain(int argc, char *argv[])
+{
+	OBJ *objmesh;
+
+	fmtinstall('V', Vfmt);
+	fmtinstall('v', vfmt);
+	ARGBEGIN{
+	default: usage();
+	case 'l':
+		mdlpath = EARGF(usage());
+		break;
+	}ARGEND;
+	if(argc != 0)
+		usage();
+	if(initdraw(nil, nil, "3d") < 0)
+		sysfatal("initdraw: %r");
+	if((mctl = initmouse(nil, screen)) == nil)
+		sysfatal("initmouse: %r");
+	placecamera(&cams[0], Pt3(2, 0, -4, 1), Pt3(0, 0, 0, 1), Vec3(0, 1, 0));
+	configcamera(&cams[0], screen, 90, 0.1, 100, Ppersp);
+	placecamera(&cams[1], Pt3(-2, 0, -4, 1), Pt3(0, 0, 0, 1), Vec3(0, 1, 0));
+	configcamera(&cams[1], screen, 120, 0.1, 100, Ppersp);
+	placecamera(&cams[2], Pt3(-2, 0, 4, 1), Pt3(0, 0, 0, 1), Vec3(0, 1, 0));
+	configcamera(&cams[2], screen, 90, 0.1, 100, Ppersp);
+	placecamera(&cams[3], Pt3(2, 0, 4, 1), Pt3(0, 0, 0, 1), Vec3(0, 1, 0));
+	configcamera(&cams[3], screen, 120, 0.1, 100, Ppersp);
+	maincam = &cams[0];
+	if((objmesh = objparse(mdlpath)) == nil)
+		sysfatal("objparse: %r");
+	display->locking = 1;
+	unlockdisplay(display);
+	proccreate(scrsynproc, nil, mainstacksize);
+	proccreate(kbdproc, nil, mainstacksize);
+	t0 = nsec();
+	for(;;){
+		enum {MOUSE, RESIZE};
+		Alt a[] = {
+			{mctl->c, &mctl->Mouse, CHANRCV},
+			{mctl->resizec, nil, CHANRCV},
+			{nil, nil, CHANNOBLK}
+		};
+		wlock(&worldlock);
+		switch(alt(a)){
+		case MOUSE: mouse(); break;
+		case RESIZE: resize(); break;
+		}
+		Δt = (nsec()-t0)/1e9;
+		handlekeys();
+		t0 += Δt*1e9;
+		wunlock(&worldlock);
+		sleep(16);
+	}
+}
--- /dev/null
+++ b/mkfile
@@ -1,0 +1,33 @@
+</$objtype/mkfile
+
+BIN=$home/$objtype/bin
+TARG=3d
+OFILES=\
+	main.$O\
+
+HFILES=geometry.h graphics.h obj.h dat.h fns.h
+
+LIB=\
+	libgeometry.a$O\
+	libgraphics.a$O\
+	libobj.a$O
+
+</sys/src/cmd/mkone
+
+libgeometry.a$O:
+	cd libgeometry
+	mk install
+
+libgraphics.a$O:
+	cd libgraphics
+	mk install
+
+libobj.a$O:
+	cd libobj
+	mk install
+
+clean nuke:V:
+	rm -f *.[$OS] [$OS].out y.tab.? y.debug y.output $TARG
+	@{cd libgeometry; mk $target}
+	@{cd libgraphics; mk $target}
+	@{cd libobj; mk $target}
--- /dev/null
+++ b/obj.h
@@ -1,0 +1,92 @@
+/* vertex types */
+enum {
+	OBJVGeometric,
+	OBJVTexture,
+	OBJVNormal,
+	OBJVParametric,
+	OBJNVERT
+};
+/* element types */
+enum {
+	OBJEPoint,
+	OBJELine,
+	OBJEFace,
+	OBJECurve,
+	OBJECurve2,
+	OBJESurface
+};
+/* grouping types */
+enum {
+	OBJGGlobal,
+	OBJGSmoothing,
+	OBJGMerging
+};
+/* object hash table size */
+enum {
+	OBJHTSIZE = 17
+};
+
+typedef struct OBJVertex OBJVertex;
+typedef struct OBJVertexArray OBJVertexArray;
+typedef struct OBJElem OBJElem;
+//typedef struct OBJGroup OBJGroup;
+typedef struct OBJObject OBJObject;
+typedef struct OBJ OBJ;
+
+#pragma varargck type "O" OBJ*
+
+struct OBJVertex
+{
+	union {
+		struct { double x, y, z, w; };	/* geometric */
+		struct { double u, v, vv; };	/* texture and parametric */
+		struct { double i, j, k; };	/* normal */
+	};
+};
+
+struct OBJVertexArray
+{
+	OBJVertex *verts;
+	int nvert;
+};
+
+struct OBJElem
+{
+	int *indices;
+	int nindex;
+	int type;
+	OBJElem *next;
+};
+
+//struct OBJGroup
+//{
+//	char *name;
+//	int type;
+//	OBJElem *elem0;
+//	OBJGroup *next;
+//};
+//struct OBJObject
+//{
+//	char *name;
+//	OBJGroup *grptab[OBJHTSIZE];
+//	OBJObject *next;
+//};
+
+struct OBJObject
+{
+	char *name;
+	OBJElem *child;
+	OBJObject *next;
+};
+
+struct OBJ
+{
+	OBJVertexArray vertdata[OBJNVERT];
+	OBJObject *objtab[OBJHTSIZE];
+};
+
+OBJ *objparse(char*);
+void objfree(OBJ*);
+
+int OBJfmt(Fmt*);
+void OBJfmtinstall(void);