From http://www.jwz.org/xscreensaver/xscreensaver-5.16.tar.gz
[xscreensaver] / hacks / glx / chessmodels.c
1 /*
2  * models for the xss chess screensavers
3  * hacked from:
4  *
5  * glChess - A 3D chess interface
6  *
7  * Copyright (C) 2006  John-Paul Gignac <jjgignac@users.sf.net>
8  *
9  * Copyright (C) 2002  Robert  Ancell <bob27@users.sourceforge.net>
10  *                     Michael Duelli <duelli@users.sourceforge.net>
11  *
12  * This program is free software; you can redistribute it and/or modify
13  * it under the terms of the GNU General Public License as published by
14  * the Free Software Foundation; either version 2 of the License, or
15  * (at your option) any later version.
16  *
17  * This program is distributed in the hope that it will be useful,
18  * but WITHOUT ANY WARRANTY; without even the implied warranty of
19  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
20  * GNU General Public License for more details.
21  *
22  * You should have received a copy of the GNU General Public License
23  * along with this program; if not, write to the Free Software
24  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
25  */
26
27 /* chessmodels.c: Contains the code for piece model creation */
28
29 #ifdef HAVE_CONFIG_H
30 # include "config.h"
31 #endif /* HAVE_CONFIG_H */
32
33 #include <math.h>
34 #include <stdlib.h>
35
36 #ifndef HAVE_COCOA
37 # include <GL/glx.h>
38 # include <GL/gl.h>
39 #endif
40
41 #ifdef HAVE_JWZGLES
42 # include "jwzgles.h"
43 #endif /* HAVE_JWZGLES */
44
45 #include "chessmodels.h"
46
47 /* End of Data */
48 #define ENDOFDATA 65535
49
50 /* Section headers */
51 #define SPIN 65534
52 #define VERTICES 65533
53 #define QUADS 65532
54 #define TRIANGLES 65531
55 #define POLARQUADSTRIP 65530
56 #define QUADSTRIP 65529
57
58 /* Special spin-related commands */
59 #define SEAM 65528
60 #define PATTERN 65527
61 #define STEPUP 65526
62 #define STEPDOWN 65525
63 #define SETBACKREF 65524
64 #define BACKREF 65523
65
66 unsigned short classic_pawn_data[] = {
67   SPIN,16,
68   350,0,SEAM,350,200,SEAM,250,300,SEAM,250,400,SEAM,150,600,SEAM,100,880,
69   SEAM,180,880,SEAM,100,920,SEAM,200,1160,SEAM,100,1340,0,1340,
70   ENDOFDATA
71 };
72
73 unsigned short classic_rook_data[] = {
74   SPIN,16,
75   380,0,SEAM,380,200,SEAM,260,500,SEAM,200,1020,SEAM,280,1020,SEAM,280,1360,SEAM,220,1360,SEAM,220,1300,0,1300,
76   ENDOFDATA
77 };
78
79 unsigned short classic_knight_data[] = {
80   SPIN,16,
81   410,0,SEAM,410,200,SEAM,200,360,SEAM,200,480,260,580,
82
83   VERTICES,
84   260,580,260, -260,580,260, -260,580,-80, 260,580,-80, 80,1620,400,
85   100,1680,340, -100,1680,340, -80,1620,400, 100,1680,340, 100,1680,300,
86   -100,1680,300, -100,1680,340, 100,1680,300, 50,1680,160, -50,1680,160,
87   -100,1680,300, 50,1680,160, 100,1680,20, -100,1680,20, -50,1680,160,
88   100,1680,20, 100,1680,-20, -100,1680,-20, -100,1680,20, 100,1680,-20,
89   40,1680,-110, -40,1680,-110, -100,1680,-20, 40,1680,-110,
90   100,1680,-200, -100,1680,-200, -40,1680,-110, 100,1680,-200,
91   100,1680,-440, -100,1680,-440, -100,1680,-200, -100,1680,-440,
92   100,1680,-440, 100,1500,-440, -100,1500,-440, -100,1500,-440,
93   100,1500,-440, 55,1480,-280, -55,1480,-280, -100,1680,300, -50,1680,160,
94   -100,1400,130, -120,1380,240, -50,1680,160, -80,1680,20, -120,1380,20,
95   -100,1400,130, -83,1660,20, -80,1680,20, -100,1680,-20, -100,1660,-38,
96   -120,1380,20, -88,1620,20, -100,1620,-74, -120,1360,-20, -120,1360,-20,
97   -100,1620,-74, -100,1580,-110, -60,1400,-140, -100,1680,-200,
98   -55,1480,-280, -60,1400,-140, -100,1580,-110, -100,1680,-200,
99   -100,1680,-440, -100,1500,-440, -55,1480,-280, 100,1680,300,
100   120,1380,240, 100,1400,130, 50,1680,160, 50,1680,160, 100,1400,130,
101   120,1380,20, 80,1680,20, 83,1660,20, 100,1660,-38, 100,1680,-20,
102   80,1680,20, 120,1380,20, 120,1360,-20, 100,1620,-74, 88,1620,20,
103   120,1360,-20, 60,1400,-140, 100,1580,-110, 100,1620,-74, 100,1680,-200,
104   100,1580,-110, 60,1400,-140, 55,1480,-280, 100,1680,-200, 55,1480,-280,
105   100,1500,-440, 100,1680,-440, 88,1620,20, 100,1620,-74, 80,1640,-56,
106   61,1640,20, 61,1640,20, 80,1640,-56, 100,1660,-38, 83,1660,20,
107   -88,1620,20, -61,1640,20, -80,1640,-56, -100,1620,-74, -61,1640,20,
108   -83,1660,20, -100,1660,-38, -80,1640,-56, 35,1780,-80, 35,1780,-440,
109   -35,1780,-440, -35,1780,-80, 35,1780,-80, 35,1680,-80, 35,1680,-440,
110   35,1780,-440, -35,1780,-80, -35,1780,-440, -35,1680,-440, -35,1680,-80,
111   35,1780,-80, -35,1780,-80, -35,1680,-80, 35,1680,-80, 35,1780,-440,
112   35,1680,-440, -35,1680,-440, -35,1780,-440, -100,1400,130, -120,1380,20,
113   120,1380,20, 100,1400,130, -100,1400,130, 100,1400,130, 120,1380,240,
114   -120,1380,240, -260,580,-80, -55,1480,-280, 0,1500,-360, 0,780,-400,
115   260,580,-80, 0,780,-400, 0,1500,-360, 55,1480,-280, -50,1380,40,
116   -200,880,400, 200,880,400, 50,1380,40, -200,880,400, -260,580,260,
117   260,580,260, 200,880,400, -50,1380,40, -140,1220,-40, -260,580,260,
118   -200,880,400, -140,1220,-40, -114,1220,-222, -260,580,-80, -260,580,260,
119   -55,1480,-280, -114,1220,-222, -140,1220,-40, -60,1400,-140,
120   50,1380,40, 200,880,400, 260,580,260, 140,1220,-40, 140,1220,-40,
121   260,580,260, 260,580,-80, 114,1220,-222, 55,1480,-280, 60,1400,-140,
122   140,1220,-40, 114,1220,-222, 260,580,-80, 144,580,-260, 0,780,-400,
123   144,580,-260, -144,580,-260, 0,780,-400, -260,580,-80, 0,780,-400,
124   -144,580,-260, 0,1400,400, 80,1620,400, -80,1620,400, 0,1400,400,
125   -80,1620,400, -120,1380,240, -120,1380,240, -80,1620,400, -100,1680,340,
126   -120,1380,240, -100,1680,340, -100,1680,300, 0,1400,400, 120,1380,240,
127   80,1620,400, 120,1380,240, 100,1680,340, 80,1620,400, 120,1380,240,
128   100,1680,300, 100,1680,340, 0,1400,400, -120,1380,240, 120,1380,240,
129   -60,1400,-140, -140,1220,-40, -45,1380,-20, -45,1380,-20, -140,1220,-40,
130   -50,1380,40, 60,1400,-140, 45,1380,-20, 140,1220,-40, 45,1380,-20,
131   50,1380,40, 140,1220,-40, 60,1400,-140, 120,1360,-20, 45,1380,-20,
132   50,1380,40, 45,1380,-20, 120,1360,-20, 50,1380,40, 120,1360,-20,
133   120,1380,20, -60,1400,-140, -45,1380,-20, -120,1360,-20, -50,1380,40,
134   -120,1360,-20, -45,1380,-20, -50,1380,40, -120,1380,20, -120,1360,-20,
135   88,1620,20, 61,1640,20, 83,1660,20, 100,1620,-74, 100,1660,-38,
136   80,1640,-56, -88,1620,20, -83,1660,20, -61,1640,20, -100,1620,-74,
137   -80,1640,-56, -100,1660,-38, -40,1680,-110, -100,1680,-200,
138   -100,1580,-110, -100,1680,-20, -40,1680,-110, -100,1580,-110,
139   40,1680,-110, 100,1580,-110, 100,1680,-200, 100,1680,-20, 100,1580,-110,
140   40,1680,-110,
141
142   QUADS, 0,1,2,3, 4,5,6,7, 8,9,10,11, 12,13,14,15, 16,17,18,19,
143   20,21,22,23, 24,25,26,27, 28,29,30,31, 32,33,34,35, 36,37,38,39,
144   40,41,42,43, 44,45,46,47, 48,49,50,51, 52,53,54,55, 56,57,58,59,
145   60,61,62,63, 64,65,66,67, 68,69,70,71, 72,73,74,75, 76,77,78,79,
146   80,81,82,83, 84,85,86,87, 88,89,90,91, 92,93,94,95, 96,97,98,99,
147   100,101,102,103, 104,105,106,107, 108,109,110,111, 112,113,114,115,
148   116,117,118,119, 120,121,122,123, 124,125,126,127, 128,129,130,131,
149   132,133,134,135, 136,137,138,139, 140,141,142,143, 144,145,146,147,
150   148,149,150,151, 152,153,154,155, 156,157,158,159, 160,161,162,163,
151   164,165,166,167, 168,169,170,171, 172,173,174,175, 176,177,178,179,
152   180,181,182,183,
153
154   TRIANGLES, 184,185,186, 187,188,189, 190,191,192, 193,194,195,
155   196,197,198, 199,200,201, 202,203,204, 205,206,207, 208,209,210,
156   211,212,213, 214,215,216, 217,218,219, 220,221,222, 223,224,225,
157   226,227,228, 229,230,231, 232,233,234, 235,236,237, 238,239,240,
158   241,242,243, 244,245,246, 247,248,249, 250,251,252, 253,254,255,
159   256,257,258, 259,260,261, 262,263,264, 265,266,267, 268,269,270,
160
161   ENDOFDATA
162 };
163
164 unsigned short classic_bishop_data[] = {
165   SPIN,16,
166   400,0,SEAM,400,200,SEAM,250,300,SEAM,250,400,SEAM,150,700,SEAM,120,940,
167   SEAM,250,940,SEAM,170,1100,SEAM,170,1220,SEAM,220,1320,SEAM,220,1480,
168   SEAM,100,1600,SEAM,80,1700,SEAM,120,1770,SEAM,80,1840,0,1840,
169   ENDOFDATA
170 };
171
172 unsigned short classic_queen_data[] = {
173   SPIN,16,
174   480,0,SEAM,480,220,SEAM,340,400,SEAM,340,500,SEAM,180,800,SEAM,140,1180,
175   SEAM,290,1180,SEAM,180,1360,SEAM,180,1520,SEAM,200,1780,SEAM,270,1920,
176   SEAM,240,2000,SEAM,170,2000,SEAM,95,2080,SEAM,70,2080,SEAM,90,2140,
177   SEAM,70,2200,0,2200,
178   ENDOFDATA
179 };
180
181 unsigned short classic_king_data[] = {
182   SPIN,16,
183   500,0,SEAM,500,200,SEAM,350,300,SEAM,350,460,SEAM,200,760,SEAM,140,1260,
184   SEAM,300,1260,SEAM,200,1460,SEAM,200,1560,SEAM,280,1910,SEAM,160,1970,
185   SEAM,160,2010,0,2010,
186
187   VERTICES, 
188   -30,2010,35, 30,2010,35, 30,2310,35, -30,2310,35, -90,2110,35,
189   -30,2110,35, -30,2210,35, -90,2210,35, 90,2110,35, 90,2210,35,
190   30,2210,35, 30,2110,35, 30,2010,-35, -30,2010,-35, -30,2310,-35,
191   30,2310,-35, -30,2110,-35, -90,2110,-35, -90,2210,-35, -30,2210,-35,
192   30,2110,-35, 30,2210,-35, 90,2210,-35, 90,2110,-35, -90,2110,35,
193   -90,2210,35, -90,2210,-35, -90,2110,-35, -30,2010,35, -30,2110,35,
194   -30,2110,-35, -30,2010,-35, -30,2210,30, -30,2310,30, -30,2310,-30,
195   -30,2210,-30, 90,2110,-35, 90,2210,-35, 90,2210,35, 90,2110,35,
196   30,2010,-35, 30,2110,-35, 30,2110,35, 30,2010,35, 30,2210,-35,
197   30,2310,-35, 30,2310,35, 30,2210,35, -90,2210,-35, -90,2210,35,
198   -30,2210,35, -30,2210,-35, 30,2210,-35, 30,2210,35, 90,2210,35,
199   90,2210,-35, -30,2310,-35, -30,2310,35, 30,2310,35, 30,2310,-35,
200
201   QUADS, 0,1,2,3, 4,5,6,7, 8,9,10,11, 12,13,14,15, 16,17,18,19,
202   20,21,22,23, 24,25,26,27, 28,29,30,31, 32,33,34,35, 36,37,38,39,
203   40,41,42,43, 44,45,46,47, 48,49,50,51, 52,53,54,55, 56,57,58,59,
204
205   ENDOFDATA
206 };
207
208 unsigned short knight_data[] = {
209   VERTICES, SETBACKREF,0, 7910,8863,0, 7790,8863,1326, 7433,8863,2611,
210   6850,8863,3817, 6059,8863,4907, 5084,8863,5847, 3955,8863,6611,
211   2705,8863,7173, 1373,8863,7517, 0,8863,7633, -1373,8863,7517,
212   -2705,8863,7173, -3955,8863,6611, -5084,8863,5847, -6059,8863,4907,
213   -6850,8863,3817, -7433,8863,2611, -7790,8863,1326, -7910,8863,0,
214   -7790,8863,-1326, -7433,8863,-2611, -6850,8863,-3817,
215   -6059,8863,-4907, -5066,8863,-5896, -3955,8863,-6611,
216   -2705,8863,-7173, -1373,8863,-7517, 0,8863,-7633, 1373,8863,-7517,
217   2705,8863,-7173, 3955,8863,-6611, 5066,8863,-5896, 6059,8863,-4907,
218   6850,8863,-3817, 7433,8863,-2611, 7790,8863,-1326, -1183,11744,7939,
219   -1183,12003,7939, -1183,14019,6547, -1183,16307,5288,
220   -1183,16555,5281, -1183,20128,2191, -1134,20304,2131,
221   -1183,20516,2156, -1417,21874,1842, -1417,23109,2185,
222   -1417,23961,3121, -1417,24001,4252, 0,23917,5637, -1418,23893,5418,
223   -1151,23389,6664, -1151,23501,6906, -1151,23806,6987,
224   -1151,24102,6987, -1151,24209,7189, -1151,24371,7513,
225   -1151,24605,7715, -1151,24939,7674, -1313,25568,7149,
226   -1313,25695,7149, -1598,26707,7610, 0,26837,7841, 0,27354,8076,
227   -1598,27262,7839, -1598,27842,7723, 0,27919,7998, 0,28449,7606,
228   -1598,28309,7303, -1302,28414,6723, 0,28544,6980, 0,28540,6197,
229   -1187,28523,5990, -1304,28447,4204, -1158,28789,1627,
230   -561,28931,-1220, -357,29608,-1244, -357,30527,-1441,
231   -357,31249,-1837, -357,31511,-2627, -357,31511,-3484,
232   -357,31118,-4143, -357,30264,-4538, -436,29406,-5256, 0,29409,-5243,
233   -2207,29018,-6763, -914,28658,-6964, 0,26292,-7237, -1305,26324,-7143,
234   -806,23401,-6784, -812,20723,-6228, -796,16757,-6210,
235   -1559,24934,7435, -1566,24633,7460, -1531,24429,7334,
236   -1475,24293,7131, -1440,24203,7004, -1372,23935,7015,
237   -1364,23606,6868, -1389,23515,6705, -1687,28010,6952,
238   -1687,27926,7343, -1687,27629,7491, -1687,27324,7552,
239   -1687,27032,7432, -1687,26791,7148, -1642,27135,7165,
240   -1642,27254,7304, -1642,27397,7364, -1642,27546,7334,
241   -1642,27693,7261, -1642,27737,7088, -1611,10591,8159,
242   -888,9327,-8560, -4491,13292,1032, -3840,15084,786, -3412,17397,397,
243   -2937,20005,-35, -5108,11669,1240, -6344,10251,1395, -6345,10246,1248,
244   -5109,11664,1092, -2964,20022,-132, -3413,17393,250, -3841,15079,638,
245   -4491,13288,885, -3743,13207,-535, -3085,15092,-710, -2727,17642,-878,
246   -2569,20636,-797, -4348,11575,-324, -5584,10108,-169,
247   -5403,10079,-1732, -4167,11644,-1888, -2465,20842,-2651,
248   -2522,18130,-2392, -2905,15407,-2077, -3562,13227,-1951,
249   -3901,13568,-3294, -3243,15993,-3519, -2861,18863,-3735,
250   -2776,22447,-4309, -4486,11792,-3132, -5783,9930,-2931,
251   -5783,9930,-3054, -4486,11792,-3255, -2776,22438,-4430,
252   -2861,18863,-3858, -3243,15993,-3641, -3901,13568,-3417,
253   -6199,9466,4558, -5766,10642,5726, -5228,11829,6090, -4801,12891,6048,
254   -4155,14560,5246, -3546,16847,3719, -3334,17643,2937,
255   -2860,20062,1230, -4822,12054,7102, -5325,10909,7208,
256   -5732,9938,6026, -4026,14701,5522, -2852,20170,1447, -3319,17801,3175,
257   -3538,16955,3935, -4090,13256,1679, -2874,20073,676, -3706,15083,1464,
258   -3301,17348,1117, -5931,10206,1996, -4695,11624,1840,
259   -4445,11658,2844, -5681,10240,3000, -3074,17398,2202,
260   -3456,15117,2468, -3840,13290,2683, -4642,13358,4019,
261   -4257,15194,3908, -6017,10188,3746, -5237,11714,4039,
262   -5621,11218,5077, -5026,12862,5058, -5134,10861,-3154,
263   -4193,12680,-3336, -2832,20609,-4118, -3052,17428,-3750,
264   -3572,14780,-3529, -3579,14774,-3623, -3059,17422,-3843,
265   -2839,20596,-4211, -4200,12674,-3429, -5141,10855,-3248,
266   -3908,13562,-3510, -3250,15987,-3735, -2868,18857,-3952,
267   -4492,11786,-3348, -5789,9924,-3148, -4817,11321,-3298,
268   -5465,10389,-3198, -4054,13118,-3470, -4346,12230,-3389,
269   -2853,19681,-4056, -2825,21511,-4367, -3155,16705,-3789,
270   -2963,18140,-3897, -3744,14168,-3567, -3415,15381,-3679,
271   -845,13482,-6604, -945,10997,-7893, -981,11110,-7735,
272   -859,13469,-6526, -899,9307,-8439, -813,16486,-6146, -832,20681,-6100,
273   -826,23358,-6656, -882,10149,-8148, -913,12323,-7139,
274   -822,14910,-6353, -817,18235,-6210, -827,21937,-6382,
275   -846,21937,-6341, -841,14912,-6313, -931,12326,-7098,
276   -901,10152,-8107, -844,23359,-6615, -851,20681,-6059,
277   -831,16487,-6105, -919,9307,-8399, -869,13482,-6492, -999,11113,-7694,
278   -860,9726,-8255, -942,10578,-7958, -962,11715,-7413, -900,12896,-6796,
279   -863,14065,-6404, -818,15760,-6221, -828,17367,-6171,
280   -854,19800,-5994, -848,21309,-6200, -843,22566,-6482,
281   -3407,15409,-3785, -3736,14196,-3673, -2911,18365,-4048,
282   -3147,16733,-3895, -2726,21608,-4455, -2808,19905,-4191,
283   -4338,12259,-3495, -4046,13146,-3576, -5457,10418,-3304,
284   -4809,11349,-3404, -4484,11815,-3454, -2715,22288,-4534,
285   -2832,19035,-4066, -3242,16015,-3841, -3900,13590,-3616,
286   -5133,10883,-3354, -4171,12742,-3524, -2803,20773,-4339,
287   -3051,17450,-3949, -3571,14803,-3729, -4979,11072,-3368,
288   -5619,10185,-3279, -4119,12924,-3556, -4411,12037,-3475,
289   -2801,20363,-4269, -2721,21826,-4489, -3099,17092,-3922,
290   -2887,18618,-4038, -3653,14499,-3701, -3325,15712,-3813,
291   -3489,15106,-3757, -3818,13893,-3645, -3011,17758,-3971,
292   -3194,16374,-3868, -2755,21085,-4385, -2815,19494,-4139,
293   -4265,12481,-3515, -3973,13368,-3596, -5304,10595,-3318,
294   -4664,11477,-3407, -5441,10207,-3361, -5350,10338,-3375,
295   -5139,10672,-3428, -5058,10742,-3431, -4831,11101,-3457,
296   -4742,11228,-3470, -4516,11559,-3504, -4423,11693,-3518,
297   -4277,12079,-3558, -4232,12180,-3571, -4138,12522,-3597,
298   -4094,12603,-3609, -3979,12935,-3675, -3943,13043,-3671,
299   -3852,13383,-3699, -3813,13496,-3705, -3692,13947,-3767,
300   -3653,14073,-3790, -3506,14587,-3772, -3467,14685,-3777,
301   -3349,15192,-3888, -3308,15317,-3887, -3162,15800,-3957,
302   -3119,15954,-3961, -3009,16528,-3946, -3002,16637,-3937,
303   -2914,17260,-4014, -2909,17347,-4006, -2834,17893,-4049,
304   -2813,18060,-4060, -2760,18849,-4232, -2746,18968,-4242,
305   -850,22569,-6438, -855,21313,-6156, -861,19804,-5949,
306   -834,17371,-6127, -824,15765,-6176, -869,14070,-6360,
307   -906,12901,-6751, -968,11720,-7368, -948,10645,-7895, -865,9731,-8211,
308   -1006,11164,-7630, -875,13487,-6447, -926,9310,-8354,
309   -837,16490,-6061, -857,20684,-6015, -867,23379,-6515,
310   -907,10157,-8062, -937,12331,-7053, -847,14917,-6268,
311   -842,18236,-6111, -852,21941,-6297, -885,9891,-8156, -985,10905,-7724,
312   -947,11969,-7255, -885,13125,-6649, -858,14493,-6314,
313   -839,16049,-6111, -836,17735,-6083, -859,20244,-5982,
314   -891,21559,-6157, -848,22883,-6508, -851,22255,-6367,
315   -856,20999,-6085, -867,19042,-6000, -836,16930,-6094,
316   -835,15341,-6222, -880,13646,-6405, -916,12540,-6953,
317   -981,11337,-7564, -927,10370,-7988, -932,9518,-8285, -931,9583,-8174,
318   -863,9671,-8145, -892,9982,-8037, -903,10075,-7996, -952,10454,-7865,
319   -961,10550,-7832, -1008,10963,-7617, -1018,11105,-7567,
320   -996,11458,-7405, -992,11582,-7342, -972,12080,-7057,
321   -968,12210,-6984, -935,12620,-6792, -931,12759,-6714,
322   -914,13199,-6441, -910,13346,-6359, -915,13767,-6194,
323   -910,13941,-6175, -890,14633,-6107, -886,14783,-6091,
324   -864,15476,-6035, -859,15645,-6017, -870,16062,-5957,
325   -873,16231,-5936, -853,17048,-5965, -861,17185,-5974,
326   -879,17812,-5997, -885,17961,-5997, -851,18486,-6138,
327   -865,18526,-5933, -872,18761,-5875, -870,19337,-5971,
328   -864,19470,-5784, -937,19590,-5786, -833,19023,-6126,
329   -851,20344,-5894, -851,20576,-5912, -855,21086,-5973,
330   -854,21224,-6003, -871,21651,-6070, -852,21853,-6116,
331   -850,22332,-6224, -849,22490,-6259, -831,22924,-6338,
332   -834,23240,-6364, -2743,19661,-4287, -2740,19863,-4312,
333   -2723,20501,-4469, -2705,20711,-4503, -2661,21262,-4565,
334   -2658,21427,-4593, -2687,22088,-4631, -2695,22209,-4643,
335   -2774,23170,-4392, -2633,23103,-4527, -2681,22439,-4516,
336   -2656,22665,-4573, -2552,22727,-4653, -2534,23015,-4628,
337   -2607,23397,-4556, -2759,23681,-4398, -2740,24136,-4370,
338   -2610,24100,-4580, -2412,24481,-5089, -2671,24389,-4569,
339   -2397,24935,-5652, -2562,25022,-5528, -939,23708,-6566,
340   -1009,24359,-6776, -1095,24912,-6886, -1049,24117,-6493,
341   -990,23894,-6415, -2290,23837,-4814, -2312,23612,-4723,
342   -2183,24804,-5574, -2191,24632,-5391, -1156,24771,-6650,
343   -1154,24624,-6586, -1104,24526,-6656, -1281,9161,-8432,
344   -2524,9161,-8046, -3691,9161,-7572, -4745,9161,-6945,
345   -5662,9127,-6096, -3697,9192,-7581, -2531,9192,-8056,
346   -4753,9183,-6951, -5664,9161,-6101, -5664,9185,-6101,
347   -4753,9207,-6951, -2531,9216,-8055, -3697,9216,-7581,
348   -3684,9232,-7560, -2518,9232,-8034, -4740,9223,-6930,
349   -5651,9200,-6080, -2828,20259,1366, -2798,20256,1187, -2820,20237,692,
350   -2843,20292,-25, -2874,20473,735, -2975,20508,90, -2474,20772,-759,
351   -2660,20879,-691, -2471,21553,-1445, -2498,22175,-1940,
352   -2471,24346,-2830, -2556,22373,-1903, -2528,21595,-1351,
353   -2493,24314,-2936, -2576,22239,-2123, -2548,21461,-1571,
354   -2823,20635,1307, -2741,20503,1328, -1490,23972,5392,
355   -1489,24080,4226, -1489,24040,3095, -1489,23188,2159,
356   -1489,21953,1816, -2479,22156,182, -1515,23830,2117, -1605,24415,3131,
357   -1599,24460,4263, -1580,24357,5431, -1448,23885,6743,
358   -1252,24770,5442, -1271,24873,4274, -1277,24828,3142,
359   -1389,24618,2016, -1479,24733,1993, -1301,25010,3165,
360   -1295,25055,4297, -1391,24890,5460, -1512,25216,5507,
361   -1602,25353,4317, -1608,25308,3186, -1979,23458,-29, -1320,25312,1928,
362   -1495,25055,546, -2438,25790,-488, -1605,25585,5599, -1583,26793,6150,
363   -1850,26272,4298, -1578,27435,7117, -1658,27625,6884,
364   -1671,27398,6846, -1678,27176,6937, -1715,27784,6626,
365   -1744,27323,6551, -1753,26904,6776, -1884,28809,-1688,
366   -1555,28655,1620, -1658,28252,4204, -1581,28263,5997,
367   -1567,28312,6790, -1935,27827,4220, -1818,28249,1603,
368   -1570,27742,6195, -1532,27288,6120, -2038,27074,4245, -1418,28416,228,
369   -413,30264,-4539, -424,31094,-4152, -418,31478,-3497,
370   -410,31453,-2653, -410,31190,-1863, -410,30468,-1467,
371   -410,29550,-1270, -411,31041,-1902, -448,31253,-2696,
372   -449,31323,-3466, -425,31182,-3496, -411,31060,-2738,
373   -387,30899,-1932, -316,30806,-1957, -335,30952,-2766,
374   -353,31089,-3521, -322,31007,-3540, -303,30871,-2786,
375   -284,30725,-1976, -304,30630,-1993, -323,30776,-2802,
376   -342,30912,-3557, -396,30843,-3565, -378,30707,-2811,
377   -358,30561,-2001, -414,30477,-2013, -433,30623,-2822,
378   -452,30759,-3576, -474,30560,-3616, -456,30424,-2861,
379   -436,30278,-2052, -349,30194,-2077, -368,30340,-2886,
380   -386,30477,-3641, -309,30389,-3665, -291,30253,-2911,
381   -271,30107,-2102, -267,29996,-2124, -286,30142,-2933,
382   -305,30278,-3688, -376,30179,-3700, -357,30043,-2945,
383   -338,29897,-2136, -420,29789,-2150, -439,29935,-2959,
384   -458,30071,-3713, -500,29883,-3751, -463,29601,-2187,
385   -470,30974,-4049, -462,30153,-4391, -466,30563,-4220,
386   -410,30009,-1368, -725,29372,-3225, -677,29335,-5130,
387   -908,29205,-3300, -632,29533,-4803, -2587,28768,-3408,
388   -2730,28611,-3456, -2404,28568,-6916, -2413,28849,-6612,
389   -1904,26715,1801, -1394,25919,831, -2224,27270,-3994,
390   -2730,28438,-3011, -2587,28570,-2864, -2826,28152,-3163,
391   -2476,28668,-6523, -2476,28433,-6776, -2787,28338,-3507,
392   -2216,27658,-3972, -2207,27950,-5907, -2311,28216,-6128,
393   -2320,27876,-3971, -2311,28118,-6301, -2311,27845,-6252,
394   -2320,27703,-3749, -2320,27084,-3798, -2320,26986,-4070,
395   -2698,26705,-4014, -2557,26974,-3547, -2557,27739,-3485,
396   -2572,27738,-6362, -2436,28204,-6533, -2436,28421,-6303,
397   -2556,28092,-3822, -2431,28142,-6975, -2544,27863,-6726,
398   -2266,28229,-1686, -1939,28156,-1065, -2569,27943,-2270,
399   -2381,27545,-1682, -2799,27594,-3104, -2750,27866,-2738,
400   -2539,27578,-6309, -2720,26853,-3133, -2788,26461,-3776,
401   -1061,27543,-7078, -1780,27941,135, -1859,27747,-527, -1756,27784,691,
402   -1855,27001,736, -1950,26711,19, -1964,27006,-630, -2342,26955,-1898,
403   -2595,25515,-3113, -2147,27855,132, -2126,27722,601, -2213,27691,-428,
404   -2210,27061,639, -2290,26816,34, -2302,27065,-515, -2347,27680,100,
405   -2335,27602,376, -2386,27584,-229, -2385,27213,398, -2432,27069,42,
406   -2439,27215,-281, -2481,27452,103, -1786,24263,399, -2278,24851,-562,
407   -2372,25143,-1163, 7383,9172,0, 7270,9172,-1487, 6937,9172,-2929,
408   6393,9172,-4281, 1282,9172,-8433, 0,9172,-8563, 1301,9439,8159,
409   2371,9313,7844, 3857,9286,7355, 4477,9172,6559, 5704,9174,5179,
410   6393,9172,4281, 6937,9172,2929, 7270,9172,1487, -7270,9172,-1487,
411   -6937,9172,-2929, -6393,9172,-4281, -1282,9172,-8433, 0,9339,8274,
412   -1301,9439,8159, -2371,9313,7844, -3857,9286,7355, -4477,9172,6559,
413   -5704,9174,5179, -6393,9172,4281, -6937,9172,2929, -7270,9172,1487,
414   -796,9467,8260, 0,9503,8356, 0,9667,8438, -796,9666,8325,
415   -807,10584,8327, -7383,9172,0, 796,9467,8260, 796,9666,8325,
416   807,10584,8327, 0,10584,8457, 0,11744,8130, 1183,11744,7939,
417   1183,12003,7939, 0,12003,8130, 0,14019,6737, 1183,14019,6547,
418   1183,16307,5288, 0,16307,5479, 0,16555,5472, 1183,16555,5281,
419   1183,20128,2191, 0,20128,2382, 0,20304,2322, 1134,20304,2131,
420   1183,20516,2156, 0,20516,2346, 0,21898,2060, 1417,21874,1842,
421   1417,23109,2185, 0,23133,2404, 0,23985,3339, 1417,23961,3121,
422   1417,24001,4252, 0,24025,4470, 1418,23893,5418, 1151,23389,6664,
423   0,23394,6882, 0,23506,7125, 1151,23501,6906, 1151,23806,6987,
424   0,23811,7205, 0,24107,7205, 1151,24102,6987, 1151,24209,7189,
425   0,24213,7407, 0,24376,7731, 1151,24371,7513, 1151,24605,7715,
426   0,24610,7933, 0,24944,7892, 1151,24939,7674, 1313,25568,7149,
427   0,25562,7367, 0,25689,7367, 1313,25695,7149, 1598,26707,7610,
428   1598,27262,7839, 1598,27842,7723, 1598,28309,7303, 1302,28414,6723,
429   1187,28523,5990, 1304,28447,4204, 0,28469,4435, 0,28654,1893,
430   1158,28789,1627, 561,28931,-1220, 0,29310,-864, 0,29574,-1062,
431   357,29608,-1244, 357,30527,-1441, 0,30496,-1259, 0,31221,-1655,
432   357,31249,-1837, 357,31511,-2627, 0,31485,-2445, 0,31485,-3302,
433   357,31511,-3484, 357,31118,-4143, 0,31089,-3961, 0,30233,-4356,
434   357,30264,-4538, 436,29406,-5256, 0,29018,-6407, 2207,29018,-6763,
435   914,28658,-6964, 0,28472,-7040, 1305,26324,-7143, 806,23401,-6784,
436   0,23246,-6890, 0,20735,-6319, 812,20723,-6228, 796,16757,-6210,
437   0,17171,-6133, 1559,24934,7435, 1566,24633,7460, 1531,24429,7334,
438   1475,24293,7131, 1440,24203,7004, 1372,23935,7015, 1364,23606,6868,
439   1389,23515,6705, 1687,28010,6952, 1687,27926,7343, 1687,27629,7491,
440   1687,27324,7552, 1687,27032,7432, 1687,26791,7148, 1642,27135,7165,
441   1642,27254,7304, 1642,27397,7364, 1642,27546,7334, 1642,27693,7261,
442   1642,27737,7088, 1611,10591,8159, 888,9327,-8560, 4491,13292,1032,
443   3840,15084,786, 3412,17397,397, 2937,20005,-35, 5108,11669,1240,
444   6344,10251,1395, 6345,10246,1248, 5109,11664,1092, 2964,20022,-132,
445   3413,17393,250, 3841,15079,638, 4491,13288,885, 3743,13207,-535,
446   3085,15092,-710, 2727,17642,-878, 2569,20636,-797, 4348,11575,-324,
447   5584,10108,-169, 5403,10079,-1732, 4167,11644,-1888,
448   2465,20842,-2651, 2522,18130,-2392, 2905,15407,-2077,
449   3562,13227,-1951, 3901,13568,-3294, 3243,15993,-3519,
450   2861,18863,-3735, 2776,22447,-4309, 4486,11792,-3132, 5783,9930,-2931,
451   5783,9930,-3054, 4486,11792,-3255, 2776,22438,-4430, 2861,18863,-3858,
452   3243,15993,-3641, 3901,13568,-3417, 6199,9466,4558, 5766,10642,5726,
453   5228,11829,6090, 4801,12891,6048, 4155,14560,5246, 3546,16847,3719,
454   3334,17643,2937, 2860,20062,1230, 4822,12054,7102, 5325,10909,7208,
455   5732,9938,6026, 4026,14701,5522, 2852,20170,1447, 3319,17801,3175,
456   3538,16955,3935, 4090,13256,1679, 2874,20073,676, 3706,15083,1464,
457   3301,17348,1117, 5931,10206,1996, 4695,11624,1840, 4445,11658,2844,
458   5681,10240,3000, 3074,17398,2202, 3456,15117,2468, 3840,13290,2683,
459   4642,13358,4019, 4257,15194,3908, 6017,10188,3746, 5237,11714,4039,
460   5621,11218,5077, 5026,12862,5058, 5134,10861,-3154, 4193,12680,-3336,
461   2832,20609,-4118, 3052,17428,-3750, 3572,14780,-3529,
462   3579,14774,-3623, 3059,17422,-3843, 2839,20596,-4211,
463   4200,12674,-3429, 5141,10855,-3248, 3908,13562,-3510,
464   3250,15987,-3735, 2868,18857,-3952, 4492,11786,-3348, 5789,9924,-3148,
465   4817,11321,-3298, 5465,10389,-3198, 4054,13118,-3470,
466   4346,12230,-3389, 2853,19681,-4056, 2825,21511,-4367,
467   3155,16705,-3789, 2963,18140,-3897, 3744,14168,-3567,
468   3415,15381,-3679, 0,14037,-6616, 845,13482,-6604, 945,10997,-7893,
469   0,11066,-7866, 981,11110,-7735, 859,13469,-6526, 899,9307,-8439,
470   813,16486,-6146, 832,20681,-6100, 826,23358,-6656, 882,10149,-8148,
471   913,12323,-7139, 822,14910,-6353, 817,18235,-6210, 827,21937,-6382,
472   846,21937,-6341, 841,14912,-6313, 931,12326,-7098, 901,10152,-8107,
473   844,23359,-6615, 851,20681,-6059, 831,16487,-6105, 919,9307,-8399,
474   869,13482,-6492, 999,11113,-7694, 860,9726,-8255, 942,10578,-7958,
475   962,11715,-7413, 900,12896,-6796, 863,14065,-6404, 818,15760,-6221,
476   828,17367,-6171, 854,19800,-5994, 848,21309,-6200, 843,22566,-6482,
477   3407,15409,-3785, 3736,14196,-3673, 2911,18365,-4048,
478   3147,16733,-3895, 2726,21608,-4455, 2808,19905,-4191,
479   4338,12259,-3495, 4046,13146,-3576, 5457,10418,-3304,
480   4809,11349,-3404, 4484,11815,-3454, 2715,22288,-4534,
481   2832,19035,-4066, 3242,16015,-3841, 3900,13590,-3616,
482   5133,10883,-3354, 4171,12742,-3524, 2803,20773,-4339,
483   3051,17450,-3949, 3571,14803,-3729, 4979,11072,-3368,
484   5619,10185,-3279, 4119,12924,-3556, 4411,12037,-3475,
485   2801,20363,-4269, 2721,21826,-4489, 3099,17092,-3922,
486   2887,18618,-4038, 3653,14499,-3701, 3325,15712,-3813,
487   3489,15106,-3757, 3818,13893,-3645, 3011,17758,-3971,
488   3194,16374,-3868, 2755,21085,-4385, 2815,19494,-4139,
489   4265,12481,-3515, 3973,13368,-3596, 5304,10595,-3318,
490   4664,11477,-3407, 5441,10207,-3361, 5350,10338,-3375,
491   5139,10672,-3428, 5058,10742,-3431, 4831,11101,-3457,
492   4742,11228,-3470, 4516,11559,-3504, 4423,11693,-3518,
493   4277,12079,-3558, 4232,12180,-3571, 4138,12522,-3597,
494   4094,12603,-3609, 3979,12935,-3675, 3943,13043,-3671,
495   3852,13383,-3699, 3813,13496,-3705, 3692,13947,-3767,
496   3653,14073,-3790, 3506,14587,-3772, 3467,14685,-3777,
497   3349,15192,-3888, 3308,15317,-3887, 3162,15800,-3957,
498   3119,15954,-3961, 3009,16528,-3946, 3002,16637,-3937,
499   2914,17260,-4014, 2909,17347,-4006, 2834,17893,-4049,
500   2813,18060,-4060, 2760,18849,-4232, 2746,18968,-4242, 850,22569,-6438,
501   855,21313,-6156, 860,19804,-5949, 834,17371,-6127, 824,15765,-6176,
502   869,14070,-6360, 906,12901,-6751, 968,11720,-7368, 948,10645,-7895,
503   865,9731,-8211, 1006,11164,-7630, 875,13487,-6447, 926,9310,-8354,
504   837,16490,-6061, 857,20684,-6015, 867,23379,-6515, 907,10157,-8062,
505   937,12331,-7053, 847,14917,-6268, 842,18236,-6111, 852,21941,-6297,
506   885,9891,-8156, 985,10905,-7724, 947,11969,-7255, 885,13125,-6649,
507   858,14493,-6314, 839,16049,-6111, 836,17735,-6083, 859,20244,-5982,
508   891,21559,-6157, 848,22883,-6508, 851,22255,-6367, 856,20999,-6085,
509   867,19042,-6000, 836,16930,-6094, 835,15341,-6222, 880,13646,-6405,
510   916,12540,-6953, 981,11337,-7564, 927,10370,-7988, 932,9518,-8285,
511   931,9583,-8174, 863,9671,-8145, 892,9982,-8037, 903,10075,-7996,
512   952,10454,-7865, 961,10550,-7832, 1008,10963,-7617, 1018,11105,-7567,
513   996,11458,-7405, 992,11582,-7342, 972,12080,-7057, 968,12210,-6984,
514   935,12620,-6792, 931,12759,-6714, 914,13199,-6441, 910,13346,-6359,
515   915,13767,-6194, 910,13941,-6175, 890,14633,-6107, 886,14783,-6091,
516   864,15476,-6035, 859,15645,-6017, 870,16062,-5957, 873,16231,-5936,
517   853,17048,-5965, 861,17185,-5974, 879,17812,-5997, 885,17961,-5997,
518   851,18486,-6138, 865,18526,-5933, 872,18761,-5875, 870,19337,-5971,
519   864,19470,-5784, 937,19590,-5786, 833,19023,-6126, 851,20344,-5894,
520   851,20576,-5912, 855,21086,-5973, 854,21224,-6003, 871,21651,-6070,
521   852,21853,-6116, 850,22332,-6224, 849,22490,-6259, 831,22924,-6338,
522   834,23240,-6364, 2743,19661,-4287, 2740,19863,-4312, 2723,20501,-4469,
523   2705,20711,-4503, 2661,21262,-4565, 2658,21427,-4593,
524   2687,22088,-4631, 2695,22209,-4643, 2774,23170,-4392,
525   2633,23103,-4527, 2681,22439,-4516, 2656,22665,-4573,
526   2552,22727,-4653, 2534,23015,-4628, 2607,23397,-4556,
527   2759,23681,-4398, 2740,24136,-4370, 2610,24100,-4580,
528   2412,24481,-5089, 2671,24389,-4569, 2397,24935,-5652,
529   2562,25022,-5528, 939,23708,-6566, 1009,24359,-6776, 1095,24912,-6886,
530   1049,24117,-6493, 990,23894,-6415, 2290,23837,-4814, 2312,23612,-4723,
531   2183,24804,-5574, 2191,24632,-5391, 1156,24771,-6650,
532   1154,24624,-6586, 1104,24526,-6656, 0,9161,-8562, 1281,9161,-8432,
533   2524,9161,-8046, 3691,9161,-7572, 4745,9161,-6945, 5662,9127,-6096,
534   3697,9192,-7581, 2531,9192,-8056, 4753,9183,-6951, 5664,9161,-6101,
535   5664,9185,-6101, 4753,9207,-6951, 2531,9216,-8055, 3697,9216,-7581,
536   3684,9232,-7560, 2518,9232,-8034, 4740,9223,-6930, 5651,9200,-6080,
537   2828,20259,1366, 2798,20256,1187, 2820,20237,692, 2843,20292,-25,
538   2874,20473,735, 2975,20508,90, 2474,20772,-759, 2660,20879,-691,
539   2471,21553,-1445, 2498,22175,-1940, 2471,24346,-2830,
540   2556,22373,-1903, 2528,21595,-1351, 2493,24314,-2936,
541   2576,22239,-2123, 2548,21461,-1571, 2823,20635,1307, 2741,20503,1328,
542   1490,23972,5392, 1489,24080,4226, 1489,24040,3095, 1489,23188,2159,
543   1489,21953,1816, 2479,22156,182, 1515,23830,2117, 1605,24415,3131,
544   1599,24460,4263, 1580,24357,5431, 1448,23885,6743, 1252,24770,5442,
545   1271,24873,4274, 1277,24828,3142, 1389,24618,2016, 1479,24733,1993,
546   1301,25010,3165, 1295,25055,4297, 1391,24890,5460, 1512,25216,5507,
547   1602,25353,4317, 1608,25308,3186, 1979,23458,-29, 1320,25312,1928,
548   1495,25055,546, 2438,25790,-488, 1605,25585,5599, 1583,26793,6150,
549   1850,26272,4298, 1578,27435,7117, 1658,27625,6884, 1671,27398,6846,
550   1678,27176,6937, 1715,27784,6626, 1744,27323,6551, 1753,26904,6776,
551   1884,28809,-1688, 1555,28655,1620, 1658,28252,4204, 1581,28263,5997,
552   1567,28312,6790, 1935,27827,4220, 1818,28249,1603, 1570,27742,6195,
553   1532,27288,6120, 2038,27074,4245, 1418,28416,228, 413,30264,-4539,
554   424,31094,-4152, 418,31478,-3497, 410,31453,-2653, 410,31190,-1863,
555   410,30468,-1467, 410,29550,-1270, 411,31041,-1902, 448,31253,-2696,
556   449,31323,-3466, 425,31182,-3496, 411,31060,-2738, 387,30899,-1932,
557   316,30806,-1957, 335,30952,-2766, 353,31089,-3521, 322,31007,-3540,
558   303,30871,-2786, 284,30725,-1976, 304,30630,-1993, 323,30776,-2802,
559   342,30912,-3557, 396,30843,-3565, 378,30707,-2811, 358,30561,-2001,
560   414,30477,-2013, 433,30623,-2822, 452,30759,-3576, 474,30560,-3616,
561   456,30424,-2861, 436,30278,-2052, 349,30194,-2077, 368,30340,-2886,
562   386,30477,-3641, 309,30389,-3665, 291,30253,-2911, 271,30107,-2102,
563   267,29996,-2124, 286,30142,-2933, 305,30278,-3688, 376,30179,-3700,
564   357,30043,-2945, 338,29897,-2136, 420,29789,-2150, 439,29935,-2959,
565   458,30071,-3713, 500,29883,-3751, 463,29601,-2187, 470,30974,-4049,
566   462,30153,-4391, 466,30563,-4220, 410,30009,-1368, 725,29372,-3225,
567   677,29335,-5130, 908,29205,-3300, 632,29533,-4803, 2587,28768,-3408,
568   2730,28611,-3456, 2404,28568,-6916, 2413,28849,-6612,
569   1904,26715,1801, 1394,25919,831, 2224,27270,-3994, 2730,28438,-3011,
570   2587,28570,-2864, 2826,28152,-3163, 2476,28668,-6523,
571   2476,28433,-6776, 2787,28338,-3507, 2216,27658,-3972,
572   2207,27950,-5907, 2311,28216,-6128, 2320,27876,-3971,
573   2311,28118,-6301, 2311,27845,-6252, 2320,27703,-3749,
574   2320,27084,-3798, 2320,26986,-4070, 2698,26705,-4014,
575   2557,26974,-3547, 2557,27739,-3485, 2572,27738,-6362,
576   2436,28204,-6533, 2436,28421,-6303, 2556,28092,-3822,
577   2431,28142,-6975, 2544,27863,-6726, 2266,28229,-1686,
578   1939,28156,-1065, 2569,27943,-2270, 2381,27545,-1682,
579   2799,27594,-3104, 2750,27866,-2738, 2539,27578,-6309,
580   2720,26853,-3133, 2788,26461,-3776, 1061,27543,-7078, 1780,27941,135,
581   1859,27747,-527, 1756,27784,691, 1855,27001,736, 1950,26711,19,
582   1964,27006,-630, 2342,26955,-1898, 2595,25515,-3113, 2147,27855,132,
583   2126,27722,601, 2213,27691,-428, 2210,27061,639, 2290,26816,34,
584   2302,27065,-515, 2347,27680,100, 2335,27602,376, 2386,27584,-229,
585   2385,27213,398, 2432,27069,42, 2439,27215,-281, 2481,27452,103,
586   1786,24263,399, 2278,24851,-562, 2372,25143,-1163, -2567,23141,-2607,
587   -2513,23156,-2494, 2513,23156,-2494, 2567,23141,-2607,
588
589   TRIANGLES, 657,656,159, 100,506,99, 1003,900,995, 1048,1009,901,
590   1051,901,1009, 1070,1073,1071, 1070,803,808, 1071,1077,1070,
591   1072,1006,1073, 1072,808,915, 1073,808,1072, 1077,1071,1076,
592   1078,1283,1127, 1081,1078,1079, 1081,1079,1080, 1083,1082,1086,
593   1083,747,1274, 1084,888,1085, 1085,878,1086, 1085,1086,1095,
594   1086,747,1083, 1093,1095,1086, 1094,1095,1093, 658,657,149,
595   1101,637,32, 1103,638,1108, 1105,637,1101, 1106,637,1105,
596   1108,638,1111, 111,36,158, 111,653,665, 111,665,36, 1110,858,1112,
597   1111,988,1110, 1111,638,891, 1111,891,988, 1112,858,1113,
598   1113,637,1106, 1117,779,784, 112,214,207, 112,651,210, 1124,1297,1154,
599   1125,1123,1128, 1125,1302,1154, 1127,1077,1078, 1129,791,796,
600   1130,1118,1137, 1136,1130,1137, 1137,1118,1119, 1137,1119,1121,
601   1137,1121,1126, 1142,758,759, 1142,759,760, 1142,760,761,
602   1147,1146,1154, 1150,755,756, 1150,756,757, 1154,1302,1124,
603   1155,1147,1154, 1155,1297,1156, 1155,1154,1297, 1156,1240,1155,
604   1156,1298,1157, 1157,1240,1156, 1157,1299,1273, 1157,1282,1281,
605   1158,1151,1152, 1161,768,1164, 1162,773,1161, 1162,1161,1163,
606   1163,1161,1164, 1165,1172,762, 1168,726,1178, 1168,1267,1266,
607   1169,1178,725, 1171,1172,1165, 1171,720,1172, 1171,1165,1175,
608   1178,1169,1174, 1178,1174,1278, 1179,1229,1228, 118,660,168,
609   1180,1229,1179, 1185,726,1226, 1186,1183,1184, 1186,1184,1191,
610   119,660,118, 1191,1184,1192, 1192,1184,1197, 1197,1184,1198,
611   1198,1184,1203, 1203,1184,1204, 121,116,451, 1210,1209,1230,
612   1215,1210,1230, 1216,1215,1230, 1221,1216,1230, 1222,1185,1226,
613   1222,1221,1230, 1223,1222,1226, 1224,1223,1225, 1225,1223,1226,
614   1226,726,1231, 1227,1188,1189, 1227,1189,1194, 1227,1194,1195,
615   1227,1195,1200, 1227,1200,1201, 1227,1201,1206, 1228,1224,1225,
616   1228,1225,1234, 1229,1207,1212, 1229,1212,1213, 1229,1213,1218,
617   1229,1218,1219, 1229,1219,1224, 1229,1180,1227, 1229,1224,1228,
618   1230,729,1185, 1230,1185,1222, 1231,1225,1226, 1232,1179,1234,
619   1233,744,1232, 1234,1179,1228, 1234,1225,1231, 1235,744,1233,
620   1237,744,1238, 1239,1155,1240, 1240,1157,1239, 1243,1168,1266,
621   1248,1241,1249, 1250,1249,1252, 1252,1249,1253, 1254,1248,1251,
622   1256,1241,1255, 1259,1244,1270, 1264,745,1237, 1265,1260,1272,
623   1267,1168,1178, 1267,1178,1277, 1269,1282,1270, 1270,1282,1273,
624   1271,1268,1269, 1271,1269,1270, 1273,1283,1274, 1274,1078,1081,
625   1274,1081,1083, 1274,747,1275, 1275,745,1264, 1275,1264,1265,
626   1275,1265,1272, 1275,1272,1274, 1276,1178,1278, 1277,1178,1276,
627   1280,1157,1281, 1281,1269,1277, 1282,1157,1273, 1282,1269,1281,
628   1283,1078,1274, 1292,1290,1296, 1295,1292,1296, 1296,1290,1291,
629   1296,1291,1293, 1296,1293,1294, 1296,1294,1295, 1297,1298,1156,
630   1297,1124,1298, 1298,1124,1299, 1299,1124,1273, 1299,1157,1298,
631   660,659,168, 133,128,463, 137,182,141, 138,185,137, 139,184,138,
632   140,183,139, 141,181,142, 141,182,144, 142,181,143, 143,649,142,
633   143,197,195, 144,196,181, 144,199,194, 145,183,140, 145,201,183,
634   145,140,405, 146,184,139, 146,139,183, 146,203,184, 147,185,138,
635   147,138,184, 147,205,185, 148,198,182, 148,137,185, 149,657,159,
636   150,149,159, 151,150,157, 152,151,157, 153,152,157, 157,150,158,
637   157,38,160, 157,37,38, 158,150,159, 160,153,157, 160,39,163,
638   160,38,39, 162,41,161, 163,39,40, 168,659,171, 172,155,156,
639   176,153,154, 176,154,155, 177,658,149, 179,149,150, 179,150,151,
640   180,152,153, 181,197,143, 181,141,144, 181,196,190, 182,199,144,
641   182,137,148, 182,198,189, 183,200,146, 184,202,147, 185,204,148,
642   186,204,185, 186,267,204, 186,185,205, 187,202,184, 187,265,202,
643   187,184,203, 188,200,183, 188,263,200, 188,183,201, 189,275,199,
644   189,261,255, 190,277,197, 190,259,254, 191,276,198, 191,148,204,
645   192,205,147, 192,147,202, 192,268,205, 193,203,146, 193,146,200,
646   193,266,203, 194,278,196, 194,262,249, 196,259,190, 196,144,194,
647   196,278,248, 197,181,190, 197,260,195, 197,277,247, 198,261,189,
648   198,148,191, 198,276,246, 199,182,189, 199,262,194, 199,275,245,
649   200,274,193, 201,273,188, 202,272,192, 203,271,187, 204,270,191,
650   205,269,186, 206,215,209, 206,216,90, 207,215,206, 207,214,208,
651   208,231,215, 208,230,228, 209,233,216, 209,232,227, 210,229,214,
652   210,651,226, 211,235,217, 211,234,225, 212,237,218, 212,236,224,
653   212,386,236, 213,238,223, 213,421,88, 214,230,208, 214,112,210,
654   214,229,222, 215,207,208, 215,232,209, 215,231,221, 216,206,209,
655   216,234,211, 216,233,220, 217,90,211, 217,386,212, 218,89,212,
656   218,238,213, 218,237,219, 219,342,238, 219,340,331, 220,346,234,
657   220,336,329, 221,348,232, 221,334,328, 222,350,230, 222,332,327,
658   223,341,326, 224,343,237, 224,339,325, 225,345,235, 225,337,324,
659   226,351,229, 226,651,445, 227,347,233, 227,335,322, 228,349,231,
660   228,333,321, 229,332,222, 229,210,226, 229,351,320, 230,214,222,
661   230,333,228, 230,350,319, 231,334,221, 231,208,228, 231,349,318,
662   232,215,221, 232,335,227, 232,348,317, 233,336,220, 233,209,227,
663   233,347,316, 234,216,220, 234,337,225, 234,346,315, 235,211,225,
664   235,345,314, 236,339,224, 236,383,313, 236,344,383, 237,340,219,
665   237,212,224, 237,343,312, 238,218,219, 238,341,223, 238,342,311,
666   239,269,205, 239,205,268, 240,270,204, 240,204,267, 241,271,203,
667   241,203,266, 242,272,202, 242,202,265, 243,273,201, 243,201,264,
668   244,274,200, 244,200,263, 250,145,407, 251,266,193, 251,193,274,
669   252,268,192, 252,192,272, 253,191,270, 256,263,188, 256,188,273,
670   257,265,187, 257,187,271, 258,267,186, 258,186,269, 259,196,248,
671   22,650,435, 260,197,247, 261,198,246, 262,199,245, 21,650,22,
672   275,189,255, 276,191,253, 277,190,254, 278,194,249, 323,226,445,
673   330,217,235, 330,235,338, 332,229,320, 333,230,319, 334,231,318,
674   335,232,317, 336,233,316, 337,234,315, 338,235,314, 339,236,313,
675   664,653,661, 340,237,312, 341,238,311, 342,219,331, 343,224,325,
676   344,236,386, 345,225,324, 346,220,329, 347,227,322, 348,221,328,
677   349,228,321, 665,653,664, 350,222,327, 351,226,323, 380,217,330,
678   405,408,145, 405,412,406, 406,408,405, 407,145,408, 408,341,407,
679   411,406,412, 413,412,461, 414,413,416, 415,414,416, 416,413,608,
680   418,87,421, 418,416,608, 419,223,326, 420,213,223, 420,223,419,
681   421,417,418, 421,213,420, 421,430,428, 421,87,88, 428,430,429,
682   430,421,420, 435,650,439, 439,650,440, 440,650,447, 442,651,437,
683   444,195,323, 444,323,445, 445,651,442, 446,195,444, 447,650,195,
684   447,195,446, 453,452,471, 455,453,471, 460,455,471, 461,617,413,
685   462,457,459, 465,43,44, 471,452,464, 471,464,470, 486,485,492,
686   488,458,1301, 488,631,458, 488,1301,459, 488,480,481, 488,481,489,
687   489,574,490, 490,631,489, 490,574,491, 490,632,631, 491,632,490,
688   495,105,106, 495,106,107, 495,107,108, 495,108,109, 495,109,110,
689   495,110,496, 497,495,496, 498,105,495, 498,495,497, 499,506,505,
690   505,68,71, 506,68,505, 506,67,68, 508,503,512, 509,499,505,
691   512,74,502, 512,502,601, 513,563,514, 518,517,520, 518,564,76,
692   519,75,564, 519,74,75, 523,522,561, 525,518,520, 526,518,525,
693   528,523,561, 529,528,561, 531,518,526, 532,518,531, 534,529,561,
694   535,534,561, 537,518,532, 538,518,537, 540,535,561, 546,541,563,
695   547,546,563, 552,547,563, 553,552,563, 556,519,564, 558,553,563,
696   559,557,558, 559,558,562, 560,74,519, 560,519,556, 560,556,557,
697   560,557,559, 560,559,565, 561,514,563, 562,563,513, 562,558,563,
698   562,513,568, 564,543,544, 564,544,549, 564,549,550, 564,550,555,
699   564,555,556, 565,74,560, 565,559,568, 566,84,567, 567,84,569,
700   568,559,562, 568,513,566, 571,85,598, 571,84,85, 572,84,571,
701   573,491,574, 574,489,573, 583,575,582, 585,582,588, 586,583,584,
702   587,583,586, 589,575,590, 598,85,609, 599,598,609, 653,111,654,
703   600,601,502, 600,502,577, 603,602,605, 604,578,593, 604,616,603,
704   604,603,605, 606,594,599, 606,599,609, 607,633,491, 607,616,604,
705   607,491,616, 607,458,633, 608,87,418, 608,617,607, 608,606,609,
706   608,413,617, 609,87,608, 609,86,87, 610,512,611, 611,512,601,
707   611,603,615, 612,508,512, 612,512,610, 615,616,491, 615,491,614,
708   615,603,616, 625,624,630, 627,625,630, 628,627,630, 629,628,630,
709   630,624,626, 630,626,629, 631,488,489, 632,458,631, 632,491,633,
710   633,458,632, 639,651,112, 641,774,640, 32,637,33, 667,640,668,
711   668,640,669, 669,640,774, 67,506,100, 672,669,774, 676,673,820,
712   677,676,823, 680,677,826, 688,685,1131, 712,711,754, 720,719,1172,
713   721,720,1171, 725,1178,726, 729,726,1185, 729,1230,730, 73,512,503,
714   730,1230,1184, 74,512,73, 743,82,83, 745,744,1237, 745,743,744,
715   745,1275,746, 746,85,743, 746,743,745, 746,609,85, 746,1275,86,
716   747,86,1275, 748,747,1086, 748,883,751, 748,1086,878, 751,882,752,
717   752,881,870, 76,564,75, 762,1172,763, 763,1172,719, 769,768,1161,
718   770,769,1161, 771,770,1161, 772,771,1161, 773,772,1161, 774,641,642,
719   775,638,639, 781,647,782, 655,654,111, 800,848,801, 801,847,802,
720   801,848,810, 802,846,803, 802,847,809, 803,846,808, 804,845,800,
721   805,844,804, 805,636,806, 806,844,805, 806,860,844, 807,845,804,
722   807,804,844, 807,862,845, 808,1073,1070, 809,863,846, 809,866,856,
723   810,865,847, 810,868,855, 811,800,845, 811,867,848, 812,644,645,
724   812,645,840, 813,812,842, 814,813,842, 816,815,843, 817,816,839,
725   818,817,839, 819,818,835, 820,813,814, 820,814,815, 820,815,816,
726   820,816,823, 821,672,774, 821,813,820, 822,642,643, 822,643,644,
727   822,644,812, 822,812,813, 822,813,821, 823,676,820, 824,681,825,
728   826,677,823, 83,742,743, 831,646,647, 831,647,781, 834,646,831,
729   844,859,807, 845,861,811, 846,864,808, 846,802,809, 846,863,851,
730   847,866,809, 847,801,810, 847,865,850, 848,868,810, 848,800,811,
731   848,867,849, 849,934,868, 849,932,923, 85,84,743, 850,936,866,
732   850,930,922, 851,938,864, 851,928,921, 852,861,845, 852,926,861,
733   852,845,862, 853,859,844, 853,924,859, 853,844,860, 854,811,861,
734   854,935,867, 855,937,865, 855,933,917, 856,939,863, 856,931,916,
735   857,862,807, 857,807,859, 857,927,862, 858,637,1113, 858,860,806,
736   858,925,860, 859,943,857, 86,609,746, 860,942,853, 861,941,854,
737   862,940,852, 863,928,851, 863,809,856, 863,939,909, 864,846,851,
738   864,938,908, 865,930,850, 865,810,855, 865,937,907, 866,847,850,
739   866,931,856, 866,936,906, 867,932,849, 867,811,854, 867,935,905,
740   868,848,849, 868,933,855, 868,934,904, 870,880,871, 871,879,775,
741   873,879,871, 873,895,879, 873,871,880, 874,880,870, 874,897,880,
742   874,870,881, 875,638,775, 875,775,879, 876,881,752, 876,899,881,
743   876,752,882, 877,882,751, 877,1051,882, 877,751,883, 878,883,748,
744   878,903,883, 879,894,875, 88,218,213, 880,896,873, 881,898,874,
745   882,900,876, 883,902,877, 884,902,883, 884,1005,902, 884,883,903,
746   885,898,881, 885,1001,898, 885,881,899, 886,896,880, 886,999,896,
747   886,880,897, 887,894,879, 887,997,894, 887,879,895, 888,878,1085,
748   888,903,878, 888,1006,903, 889,901,877, 889,1004,901, 889,877,902,
749   89,217,212, 89,218,88, 890,899,876, 890,1002,899, 890,876,900,
750   891,638,875, 891,875,894, 892,897,874, 892,1000,897, 892,874,898,
751   893,895,873, 893,998,895, 893,873,896, 894,1016,891, 895,1015,887,
752   896,1014,893, 897,1013,886, 898,1012,892, 899,1011,885, 656,655,159,
753   90,216,211, 90,217,89, 900,1010,890, 900,882,995, 901,1051,877,
754   902,1008,889, 903,1007,884, 91,57,58, 910,940,862, 910,862,927,
755   911,941,861, 911,861,926, 912,942,860, 912,860,925, 913,943,859,
756   913,859,924, 914,927,857, 914,857,943, 918,854,941, 919,924,853,
757   919,853,942, 920,926,852, 920,852,940, 928,863,909, 929,864,908,
758   93,92,484, 930,865,907, 931,866,906, 932,867,905, 933,868,904,
759   934,849,923, 935,854,918, 936,850,922, 937,855,917, 938,851,921,
760   939,856,916, 94,93,484, 96,95,476, 97,96,476, 976,903,1006,
761   976,1007,903, 977,902,1005, 977,1008,902, 978,901,1004, 978,1048,901,
762   979,900,1003, 979,1010,900, 98,97,476, 980,899,1002, 980,1011,899,
763   981,898,1001, 981,1012,898, 982,897,1000, 982,1013,897, 983,1014,896,
764   983,896,999, 984,1015,895, 984,895,998, 985,1016,894, 985,894,997,
765   986,893,1014, 986,998,893, 987,892,1012, 987,1000,892, 988,891,1016,
766   988,858,1110, 989,890,1010, 989,1002,890, 99,506,499, 990,889,1008,
767   990,1004,889, 991,888,1084, 991,1006,888, 992,887,1015, 992,997,887,
768   993,886,1013, 993,999,886, 994,885,1011, 994,1001,885, 995,882,1045,
769   996,884,1007, 996,1005,884,
770
771   QUADS, 648,666,130,131, 648,649,20,19, 657,658,15,14,
772   1000,987,1032,1031, 1001,994,1036,1035, 1002,989,1040,1039,
773   1003,995,1044,1043, 1004,990,1053,1052, 1005,996,1057,1056,
774   1006,991,1061,1060, 1007,976,1059,1058, 1008,977,1055,1054,
775   1009,906,973,1047, 101,64,67,100, 1010,979,1042,1041,
776   1011,980,1038,1037, 1012,981,1034,1033, 1013,982,1030,1029,
777   1014,983,1026,1025, 1015,984,1022,1021, 1016,985,1018,1017,
778   102,63,64,101, 103,60,63,102, 104,59,60,103, 1045,882,1051,1009,
779   1045,1009,1047,1046, 1048,978,1050,1049, 105,104,103,106,
780   106,103,102,107, 1061,991,1071,1075, 1062,939,1004,1052,
781   1062,1052,1053,1063, 1063,909,939,1062, 1064,928,1008,1054,
782   1064,1054,1055,1065, 1065,921,928,1064, 1066,938,1005,1056,
783   1066,1056,1057,1067, 1067,908,938,1066, 1068,929,1007,1058,
784   1068,1058,1059,1069, 1069,915,929,1068, 107,102,101,108,
785   1071,991,1084,1076, 1072,915,976,1006, 1073,1006,1060,1074,
786   1074,1060,1061,1075, 1075,1071,1073,1074, 1078,1077,1076,1079,
787   108,101,100,109, 1080,1079,1085,1095, 1081,1080,1082,1083,
788   1082,1080,1092,1091, 1084,1085,1087,1088, 1085,1079,1089,1087,
789   1086,1082,1091,1093, 1088,1087,1089,1090, 1089,1079,1076,1090,
790   109,100,99,110, 1090,1076,1084,1088, 1092,1080,1095,1094,
791   1093,1091,1092,1094, 1096,27,26,431, 1097,638,1103,1098,
792   658,659,16,15, 110,99,499,496, 1100,1099,1102,1104,
793   1101,1100,1104,1105, 1102,1099,1098,1103, 1106,1105,1104,1107,
794   1107,1104,1102,1109, 1109,1102,1103,1108, 1110,1109,1108,1111,
795   1112,1107,1109,1110, 1113,1106,1107,1112, 1115,819,828,1116,
796   1117,784,791,1120, 1118,1116,1117,1119, 1119,1117,1120,1121,
797   1120,791,1129,1122, 1121,1120,1122,1126, 1122,1123,1125,1126,
798   1126,1125,1154,1137, 1127,1124,1302,1303, 1128,1123,1122,1129,
799   1128,803,1070,1303, 1129,796,803,1128, 113,114,123,124,
800   1130,1115,1116,1118, 1131,1114,1115,1130, 1132,1133,1140,1141,
801   1133,1134,1139,1140, 1134,1135,1138,1139, 1136,688,1131,1130,
802   1138,1135,1136,1137, 1138,1137,1154,1146, 1139,1138,1146,1145,
803   114,115,122,123, 1140,1139,1145,1144, 1141,1140,1144,1143,
804   1142,761,1132,1141, 1143,758,1142,1141, 1143,1144,1149,1150,
805   1144,1145,1148,1149, 1145,1146,1147,1148, 1148,1147,1155,1153,
806   1149,1148,1153,1152, 115,116,121,122, 115,114,166,167,
807   1150,757,758,1143, 1150,1149,1152,1151, 1151,754,755,1150,
808   1158,712,754,1151, 1158,1152,1160,1159, 1160,1152,1153,1155,
809   1160,1155,1239,1177, 1165,762,773,1162, 1165,1162,1163,1166,
810   1166,1163,1164,1167, 1167,1159,1176,1166, 1169,1170,1173,1174,
811   1173,1170,1171,1175, 1174,1173,1177,1239, 1175,1165,1166,1176,
812   1176,1159,1160,1177, 1177,1173,1175,1176, 1182,1183,1186,1187,
813   1187,1186,1191,1190, 1188,1181,1182,1187, 1189,1188,1187,1190,
814   119,118,117,120, 1190,1191,1192,1193, 1193,1192,1197,1196,
815   1194,1189,1190,1193, 1195,1194,1193,1196, 1196,1197,1198,1199,
816   1199,1198,1203,1202, 659,660,17,16, 659,658,177,171, 120,117,113,124,
817   1200,1195,1196,1199, 1201,1200,1199,1202, 1202,1203,1204,1205,
818   1204,1184,1230,1209, 1205,1204,1209,1208, 1206,1201,1202,1205,
819   1207,1206,1205,1208, 1208,1209,1210,1211, 1211,1210,1215,1214,
820   1212,1207,1208,1211, 1213,1212,1211,1214, 1214,1215,1216,1217,
821   1217,1216,1221,1220, 1218,1213,1214,1217, 1219,1218,1217,1220,
822   122,121,128,127, 1220,1221,1222,1223, 1224,1219,1220,1223,
823   1227,1180,1181,1188, 1227,1206,1207,1229, 123,122,127,126,
824   1231,726,1168,1233, 1233,1168,1243,1235, 1234,1231,1233,1232,
825   1236,1235,1243,1242, 1236,1242,1244,1247, 1237,1238,1245,1246,
826   1238,744,1235,1236, 1239,1157,1280,1279, 124,123,126,125,
827   1244,1242,1271,1270, 1245,1238,1236,1247, 1246,1245,1262,1261,
828   1247,1244,1259,1263, 1249,1241,1256,1253, 125,126,135,136,
829   1251,1248,1249,1250, 1251,1250,1262,1263, 1254,1251,1263,1259,
830   1255,1241,1248,1254, 1257,1256,1255,1258, 1258,1255,1254,1259,
831   126,127,134,135, 1260,1253,1256,1257, 1261,1252,1253,1260,
832   1262,1250,1252,1261, 1262,1245,1247,1263, 1264,1237,1246,1265,
833   1265,1246,1261,1260, 1268,1243,1266,1269, 1269,1266,1267,1277,
834   127,128,133,134, 1271,1242,1243,1268, 1272,1260,1257,1274,
835   1273,1258,1259,1270, 1273,1124,1127,1283, 1274,1257,1258,1273,
836   1278,1174,1239,1279, 128,121,451,454, 1284,1276,1278,1285,
837   1285,1278,1279,1287, 1286,1277,1276,1284, 1287,1279,1280,1288,
838   1288,1280,1281,1289, 1289,1281,1277,1286, 129,120,124,125,
839   1290,1284,1285,1291, 1291,1285,1287,1293, 1292,1286,1284,1290,
840   1293,1287,1288,1294, 1294,1288,1289,1295, 1295,1289,1286,1292,
841   660,666,18,17, 130,666,660,119, 130,119,120,129, 1301,458,461,1300,
842   1301,1300,462,459, 1303,1070,1077,1127, 1303,1302,1125,1128,
843   131,130,129,132, 132,129,125,136, 134,133,140,139, 135,134,139,138,
844   136,135,138,137, 140,133,463,462, 141,132,136,137, 142,131,132,141,
845   154,153,160,163, 158,36,37,157, 159,655,111,158, 161,156,155,162,
846   161,41,42,448, 162,155,154,163, 163,40,41,162, 164,113,117,169,
847   164,169,170,174, 165,116,115,167, 165,156,449,450, 166,114,113,164,
848   167,166,173,172, 169,117,118,168, 170,169,168,171, 172,156,165,167,
849   173,166,164,174, 174,170,178,175, 175,178,179,180, 176,155,172,173,
850   176,173,174,175, 177,149,179,178, 178,170,171,177, 179,151,152,180,
851   180,153,176,175, 649,648,131,142, 649,650,21,20, 201,145,250,264,
852   206,90,753,869, 207,206,869,872, 263,256,400,399, 264,250,404,403,
853   265,257,306,305, 266,251,310,309, 267,258,298,297, 268,252,302,301,
854   269,239,300,299, 270,240,296,295, 271,241,308,307, 272,242,304,303,
855   273,243,402,401, 274,244,398,397, 279,260,247,280, 280,247,320,353,
856   281,277,254,282, 282,254,327,355, 283,259,248,284, 284,248,319,357,
857   285,278,249,286, 286,249,321,359, 287,262,245,288, 288,245,318,361,
858   289,275,255,290, 19,18,666,648, 290,255,328,363, 291,261,246,292,
859   292,246,317,365, 293,276,253,294, 294,253,322,367, 296,240,316,369,
860   298,258,329,371, 650,649,143,195, 300,239,315,373, 302,252,324,375,
861   304,242,314,377, 306,257,330,379, 308,241,344,382, 661,653,652,662,
862   310,251,313,385, 311,250,407,341, 312,256,273,340, 313,251,274,339,
863   314,242,265,338, 315,239,268,337, 316,240,267,336, 317,246,276,335,
864   318,245,275,334, 319,248,278,333, 662,667,668,663, 320,247,277,332,
865   321,249,262,349, 322,253,270,347, 323,195,260,351, 324,252,272,345,
866   325,244,263,343, 327,254,259,350, 328,255,261,348, 329,258,269,346,
867   663,668,669,670, 330,257,271,380, 331,243,264,342, 332,277,281,354,
868   333,278,285,358, 334,275,289,362, 335,276,293,366, 336,267,297,370,
869   337,268,301,374, 338,265,305,378, 339,274,397,387, 664,661,662,663,
870   340,273,401,391, 342,264,403,393, 343,263,399,389, 344,241,266,383,
871   345,272,303,376, 346,269,299,372, 347,270,295,368, 348,261,291,364,
872   349,262,287,360, 665,664,663,670, 350,259,283,356, 351,260,279,352,
873   352,279,280,353, 353,320,351,352, 354,281,282,355, 355,327,332,354,
874   356,283,284,357, 357,319,350,356, 358,285,286,359, 359,321,333,358,
875   36,665,670,671, 360,287,288,361, 361,318,349,360, 362,289,290,363,
876   363,328,334,362, 364,291,292,365, 365,317,348,364, 366,293,294,367,
877   367,322,335,366, 368,295,296,369, 369,316,347,368, 37,36,671,674,
878   370,297,298,371, 371,329,336,370, 372,299,300,373, 373,315,346,372,
879   374,301,302,375, 375,324,337,374, 376,303,304,377, 377,314,345,376,
880   378,305,306,379, 379,330,338,378, 38,37,674,675, 380,271,307,381,
881   381,307,308,382, 382,344,380,381, 383,266,309,384, 384,309,310,385,
882   385,313,383,384, 386,217,380,344, 388,325,339,387, 388,387,397,398,
883   39,38,675,678, 390,312,343,389, 390,389,399,400, 392,331,340,391,
884   392,391,401,402, 394,311,342,393, 394,393,403,404, 395,341,408,409,
885   396,326,341,395, 396,395,409,410, 398,244,325,388, 40,39,678,679,
886   400,256,312,390, 402,243,331,392, 404,250,311,394, 405,140,462,1300,
887   406,326,396,410, 408,406,410,409, 41,40,679,682, 411,412,413,414,
888   411,414,424,425, 412,405,1300,461, 417,415,416,418, 419,326,406,411,
889   419,411,425,423, 42,41,682,683, 420,414,415,430, 422,420,419,423,
890   424,414,420,422, 424,422,423,425, 426,417,421,428, 427,415,417,426,
891   427,426,428,429, 43,42,683,686, 430,415,427,429, 431,651,639,1096,
892   431,26,25,432, 432,25,24,433, 432,433,436,437, 433,24,23,434,
893   434,23,22,435, 436,433,434,438, 436,438,441,443, 437,651,431,432,
894   437,436,443,442, 438,434,435,439, 438,439,440,441, 44,43,686,687,
895   441,440,447,446, 442,443,444,445, 443,441,446,444, 448,42,43,465,
896   449,156,161,448, 449,448,465,464, 45,44,687,690, 450,449,464,452,
897   451,116,165,450, 451,450,452,453, 454,451,453,455, 456,454,455,460,
898   456,457,462,463, 459,457,456,460, 46,45,690,691, 461,458,607,617,
899   463,128,454,456, 465,44,470,464, 466,98,476,475, 466,49,50,98,
900   467,47,49,466, 468,46,47,467, 469,45,46,468, 47,46,691,694,
901   470,44,45,469, 470,469,472,471, 472,469,468,473, 473,468,467,474,
902   474,467,466,475, 476,95,477,475, 478,474,475,477, 479,473,474,478,
903   48,695,696,697, 480,472,473,479, 481,480,479,482, 482,479,478,483,
904   483,478,477,484, 486,483,484,485, 487,482,483,486, 487,486,494,489,
905   488,459,460,471, 488,471,472,480, 489,481,482,487, 49,47,694,48,
906   492,58,59,493, 493,59,104,501, 494,486,492,493, 494,493,510,511,
907   497,496,499,500, 498,497,500,501, 652,640,667,662, 652,653,10,9,
908   50,49,48,697, 500,499,509,510, 501,104,105,498, 502,74,565,567,
909   504,72,73,503, 505,71,72,504, 505,504,507,509, 507,504,503,508,
910   509,507,511,510, 51,50,697,698, 510,493,501,500, 511,507,508,573,
911   513,81,82,566, 514,80,81,513, 515,79,80,514, 515,514,561,522,
912   516,78,79,515, 516,515,522,521, 517,77,78,516, 518,76,77,517,
913   52,51,698,701, 520,517,516,521, 521,522,523,524, 524,523,528,527,
914   525,520,521,524, 526,525,524,527, 527,528,529,530, 53,52,701,702,
915   530,529,534,533, 531,526,527,530, 532,531,530,533, 533,534,535,536,
916   536,535,540,539, 537,532,533,536, 538,537,536,539, 539,540,541,542,
917   54,53,702,705, 541,540,561,563, 542,541,546,545, 543,538,539,542,
918   544,543,542,545, 545,546,547,548, 548,547,552,551, 549,544,545,548,
919   55,54,705,706, 550,549,548,551, 551,552,553,554, 554,553,558,557,
920   555,550,551,554, 556,555,554,557, 56,55,706,709, 564,518,538,543,
921   566,82,743,84, 567,565,568,566, 569,84,572,570, 57,56,709,710,
922   570,572,579,581, 573,489,494,511, 573,508,612,613, 577,502,567,569,
923   577,569,570,576, 577,576,605,602, 578,576,570,581, 579,572,571,580,
924   58,57,710,713, 580,571,598,599, 581,579,596,597, 582,575,589,588,
925   583,582,585,584, 586,584,596,595, 587,586,595,594, 588,589,592,593,
926   589,590,591,592, 59,58,713,714, 590,575,583,587, 590,587,594,591,
927   591,594,606,608, 592,591,608,607, 593,578,581,597, 593,592,607,604,
928   595,580,599,594, 596,579,580,595, 596,584,585,597, 597,585,588,593,
929   653,654,11,10, 60,59,714,61, 600,577,602,603, 601,600,603,611,
930   605,576,578,604, 61,716,717,62, 610,611,620,618, 611,615,623,620,
931   612,610,618,619, 613,612,619,621, 614,491,573,613, 614,613,621,622,
932   615,614,622,623, 618,620,626,624, 619,618,624,625, 62,717,718,65,
933   620,623,629,626, 621,619,625,627, 622,621,627,628, 623,622,628,629,
934   63,60,61,62, 639,638,1097,1096, 64,63,62,65, 647,634,793,782,
935   1,647,646,2, 2,646,645,3, 65,718,719,66, 3,645,644,4, 4,644,643,5,
936   5,643,642,6, 6,642,641,7, 7,641,640,8, 8,640,652,9, 28,27,1096,1097,
937   29,28,1097,1098, 66,719,720,69, 30,29,1098,1099, 31,30,1099,1100,
938   32,31,1100,1101, 33,637,636,34, 34,636,635,35, 35,635,634,0,
939   0,634,647,1, 67,64,65,66, 670,669,672,671, 671,672,673,674,
940   673,672,821,820, 674,673,676,675, 675,676,677,678, 678,677,680,679,
941   679,680,681,682, 68,67,66,69, 681,680,826,825, 682,681,684,683,
942   683,684,685,686, 684,681,824,1114, 685,684,1114,1131,
943   686,685,688,687, 687,688,689,690, 689,688,1136,1135, 69,720,721,70,
944   690,689,692,691, 691,692,693,694, 692,689,1135,1134,
945   693,692,1134,1133, 694,693,695,48, 695,693,1133,1132,
946   696,695,1132,761, 697,696,699,698, 698,699,700,701, 699,696,761,760,
947   654,655,12,11, 70,721,722,723, 700,699,760,759, 701,700,703,702,
948   702,703,704,705, 703,700,759,758, 704,703,758,757, 705,704,707,706,
949   706,707,708,709, 707,704,757,756, 708,707,756,755, 709,708,711,710,
950   71,68,69,70, 710,711,712,713, 711,708,755,754, 713,712,715,714,
951   714,715,716,61, 715,712,1158,1159, 716,715,767,766, 717,716,766,765,
952   718,717,765,764, 719,718,764,763, 72,71,70,723, 722,721,1171,1170,
953   723,722,725,724, 724,725,726,727, 725,722,1170,1169, 727,726,729,728,
954   728,729,730,731, 73,72,723,724, 731,730,733,732, 732,733,734,735,
955   733,730,1184,1183, 734,733,1183,1182, 735,734,737,736,
956   736,737,738,739, 737,734,1182,1181, 738,737,1181,1180,
957   739,738,741,740, 74,73,724,727, 740,741,742,83, 741,738,1180,1179,
958   742,741,1179,1232, 743,742,1232,744, 749,748,751,750, 75,74,727,728,
959   750,751,752,753, 753,752,870,869, 76,75,728,731, 762,763,772,773,
960   763,764,771,772, 764,765,770,771, 765,766,769,770, 766,767,768,769,
961   767,715,1159,1167, 768,767,1167,1164, 77,76,731,732, 774,642,822,821,
962   775,639,872,871, 776,780,783,787, 776,777,829,827, 778,779,828,830,
963   78,77,732,735, 780,781,782,783, 780,776,827,832, 781,780,832,831,
964   783,782,793,792, 784,779,778,785, 785,778,777,786, 786,777,776,787,
965   787,783,792,788, 788,792,795,799, 789,786,787,788, 79,78,735,736,
966   790,785,786,789, 791,784,785,790, 792,793,794,795, 793,634,635,794,
967   794,635,636,805, 795,794,805,804, 796,791,790,797, 797,790,789,798,
968   798,789,788,799, 799,795,804,800, 655,656,13,12, 80,79,736,739,
969   801,798,799,800, 802,797,798,801, 803,796,797,802, 806,636,637,858,
970   81,80,739,740, 815,814,842,843, 817,818,825,826, 818,819,824,825,
971   82,81,740,83, 823,816,817,826, 824,819,1115,1114, 827,829,836,837,
972   828,779,1117,1116, 828,819,835,830, 829,777,778,830, 831,832,833,834,
973   833,832,827,837, 834,833,841,840, 835,818,839,836, 836,829,830,835,
974   837,836,839,838, 839,816,843,838, 840,645,646,834, 841,833,837,838,
975   842,812,840,841, 842,841,838,843, 86,747,748,749, 869,870,871,872,
976   872,639,112,207, 88,87,86,749, 89,88,749,750, 656,657,14,13,
977   90,89,750,753, 91,58,492,485, 910,927,952,953, 911,926,956,957,
978   912,925,944,945, 913,924,948,949, 914,943,950,951, 915,808,864,929,
979   918,941,958,959, 919,942,946,947, 92,91,485,484, 92,56,57,91,
980   920,940,954,955, 924,919,992,1015, 925,858,988,1016, 926,920,993,1013,
981   927,914,986,1014, 928,909,990,1008, 929,908,996,1007, 93,55,56,92,
982   930,907,979,1003, 931,906,1009,1048, 932,905,981,1001,
983   933,904,980,1002, 934,923,994,1011, 935,918,987,1012,
984   936,922,995,1045, 937,917,989,1010, 938,921,977,1005,
985   939,916,978,1004, 94,54,55,93, 940,910,983,999, 941,911,982,1000,
986   942,912,985,997, 943,913,984,998, 944,925,1016,1017,
987   945,944,1017,1018, 946,942,997,1019, 947,946,1019,1020,
988   948,924,1015,1021, 949,948,1021,1022, 95,94,484,477, 95,53,54,94,
989   950,943,998,1023, 951,950,1023,1024, 952,927,1014,1025,
990   953,952,1025,1026, 954,940,999,1027, 955,954,1027,1028,
991   956,926,1013,1029, 957,956,1029,1030, 958,941,1000,1031,
992   959,958,1031,1032, 96,52,53,95, 960,935,1012,1033, 961,960,1033,1034,
993   961,905,935,960, 962,932,1001,1035, 963,962,1035,1036,
994   963,923,932,962, 964,934,1011,1037, 965,964,1037,1038,
995   965,904,934,964, 966,933,1002,1039, 967,966,1039,1040,
996   967,917,933,966, 968,937,1010,1041, 969,968,1041,1042,
997   969,907,937,968, 97,51,52,96, 970,930,1003,1043, 971,970,1043,1044,
998   971,922,930,970, 972,936,1045,1046, 973,972,1046,1047,
999   973,906,936,972, 974,931,1048,1049, 975,974,1049,1050,
1000   975,916,931,974, 976,915,1069,1059, 977,921,1065,1055,
1001   978,916,975,1050, 979,907,969,1042, 98,50,51,97, 980,904,965,1038,
1002   981,905,961,1034, 982,911,957,1030, 983,910,953,1026,
1003   984,913,949,1022, 985,912,945,1018, 986,914,951,1024,
1004   987,918,959,1032, 989,917,967,1040, 990,909,1063,1053,
1005   992,919,947,1020, 993,920,955,1028, 994,923,963,1036,
1006   995,922,971,1044, 996,908,1067,1057, 997,992,1020,1019,
1007   998,986,1024,1023, 999,993,1028,1027,
1008
1009   /* The base of the knight */
1010   SPIN,18,
1011   9510,0, 9510,756, SEAM, 9134,1129, 9447,1487,
1012   9447,1951, 9103,2371, STEPDOWN, 8211,3083,
1013   7167,4242, 6662,5664, 7040,7142, STEPUP, SEAM, 7935,8560,
1014   STEPUP, BACKREF,0,
1015
1016   ENDOFDATA
1017 };
1018
1019 unsigned short bishop_data[] = {
1020   VERTICES, SETBACKREF,0, 5233,26960,0, 5154,26960,909, 4918,26960,1790,
1021   4532,26960,2617, 4009,26960,3364, 3364,26960,4009, 2617,26960,4532,
1022   1790,26960,4918, 909,26960,5154, 0,26833,5233, -909,26960,5154,
1023   -1790,26960,4918, -2617,26960,4532, -3364,26960,4009,
1024   -4009,26960,3364, -4532,26960,2617, -4918,26960,1790,
1025   -5154,26960,909, -5233,26960,0, -5154,26960,-909, -4918,26960,-1790,
1026   -4532,26960,-2617, -4009,26960,-3364, -3364,26960,-4009,
1027   -2617,26960,-4532, -1790,26960,-4918, -909,26960,-5154, 0,26833,-5233,
1028   909,26960,-5154, 1790,26960,-4918, 2617,26960,-4532, 3364,26960,-4009,
1029   4009,26960,-3364, 4532,26960,-2617, 4918,26960,-1790, 5154,26960,-909,
1030   SETBACKREF,1, 3812,31178,0, 3765,31144,729, 3624,31040,1435,
1031   3395,30872,2153, 3084,30642,2820, 2701,30360,3389, 2076,29899,4102,
1032   1492,30015,4340, 845,30033,4442, 0,30044,4511, -657,30063,4443,
1033   -1481,30081,4214, -2190,30081,3884, -2830,30081,3435,
1034   -3383,30081,2883, -3831,30081,2242, -4162,30081,1534,
1035   -4364,30081,779, -4432,30081,0, -4364,30081,-779, -4162,30081,-1534,
1036   -3831,30081,-2242, -3383,30081,-2883, -2830,30081,-3435,
1037   -2190,30081,-3884, -1481,30081,-4214, -657,30063,-4443, 0,30044,-4511,
1038   845,30033,-4442, 1492,30015,-4340, 2076,29899,-4102, 2701,30360,-3388,
1039   3084,30642,-2820, 3395,30872,-2153, 3624,31040,-1435, 3765,31144,-729,
1040   240,28546,-4957, 884,29021,-4784, 1490,29467,-4537, 2076,29899,-4102,
1041   2701,30360,-3388, 3084,30642,-2820, 3395,30872,-2153,
1042   3624,31040,-1435, 3765,31144,-729, 2177,28477,4637, 1021,27605,5037,
1043   1021,27605,-5042, 2170,28478,-4644, 0,26833,-5233, 0,26833,5233,
1044   -3153,28619,-3758, 240,28546,4957, 884,29021,4784, 2076,29899,4102,
1045   2701,30360,3389, 3084,30642,2820, 3395,30872,2153, 3624,31040,1435,
1046   3765,31144,729, -719,28582,4883, 4863,28569,977, 4560,28569,1925,
1047   4064,28569,2815, 3465,28569,3723, 2622,28569,4448, 2621,28583,-4401,
1048   3473,28588,-3691, 4064,28569,-2815, 4560,28569,-1925, 4863,28569,-977,
1049   4965,28569,0, -1678,28619,4610, -3153,28619,3758, -2453,28619,4248,
1050   -4248,28619,2453, -3758,28619,3153, -4831,28619,852, -4906,28619,0,
1051   -4831,28619,-852, -4610,28619,-1678, -4248,28619,-2453,
1052   -3758,28619,-3153, -1678,28619,-4610, -2453,28619,-4248,
1053   -644,27895,5037, -644,27895,-5037, -4610,28619,1678, -719,28582,-4883,
1054   2170,28478,-4644, 1021,27605,-5042, 1021,27605,5037, 2177,28477,4637,
1055   0,26833,-5233, 0,26833,5233, -644,27895,-5037, -644,27895,5037,
1056   -644,27895,5037, -644,27895,-5037, 1490,29467,-4537, 884,29021,-4784,
1057   240,28546,-4957, 240,28546,4957, 884,29021,4784, 3812,31178,0,
1058   4349,30116,-867, 4197,30001,-1705, 3948,29813,-2492, 3610,29558,-3203,
1059   3193,29244,-3817, 2711,28880,-4315, 4349,30116,-867, 4197,30001,-1705,
1060   3948,29813,-2492, 3610,29558,-3203, 3193,29244,-3817,
1061   2711,28880,-4315, 1608,28047,-4906, 1608,28047,4901, 2711,28880,4310,
1062   3193,29244,3812, 3610,29558,3198, 3948,29813,2487, 4197,30001,1701,
1063   4349,30116,862, 4401,30155,-176, 1490,29467,4537, 1490,29467,4537,
1064   4401,30155,-176, 4349,30116,862, 4197,30001,1701, 3948,29813,2487,
1065   3610,29558,3198, 3193,29244,3812, 2711,28880,4310, 1608,28047,4901,
1066   1608,28047,-4906,
1067
1068   TRIANGLES, 8,127,9, 7,128,154, 2,98,3, 121,96,10, 121,10,9, 121,138,96,
1069   122,27,26, 27,126,28, 66,135,65, 162,42,43, 165,164,141, 80,140,95,
1070   103,151,150, 102,125,152, 101,155,128, 100,157,156, 124,137,122,
1071   33,105,34, 29,153,125, 26,124,122,
1072
1073   QUADS, 22,118,87,23, 21,117,118,22, 20,116,117,21, 19,115,116,20,
1074   18,114,115,19, 17,113,114,18, 16,123,113,17, 15,111,123,16, 14,112,111,15,
1075   13,109,112,14, 12,110,109,13, 11,108,110,12, 7,154,127,8, 110,108,47,48,
1076   135,136,64,65, 136,137,63,64, 138,139,44,45, 139,162,43,44, 109,110,48,49,
1077   147,161,107,106, 166,165,141,142, 167,166,142,143, 168,167,143,144,
1078   169,168,144,145, 112,109,49,50, 170,169,145,146, 171,81,84,172,
1079   111,112,50,51, 72,88,133,134, 73,89,88,72, 74,163,89,73, 75,90,163,74,
1080   76,91,90,75, 77,92,91,76, 78,93,92,77, 79,94,93,78, 80,95,94,79,
1081   81,170,146,84, 82,171,172,83, 86,82,83,85, 130,129,131,132, 123,111,51,52,
1082   113,123,52,53, 114,113,53,54, 115,114,54,55, 116,115,55,56, 117,116,56,57,
1083   118,117,57,58, 87,118,58,59, 120,87,59,60, 119,120,60,61, 107,161,160,97,
1084   106,107,0,35, 105,148,147,106, 105,106,35,34, 104,149,148,105,
1085   104,105,33,32, 103,150,149,104, 103,104,32,31, 102,152,151,103,
1086   102,103,31,30, 101,128,7,6, 100,101,6,5, 100,156,155,101, 99,100,5,4,
1087   99,158,157,100, 98,99,4,3, 98,159,158,99, 97,98,2,1, 97,160,159,98,
1088   96,108,11,10, 96,138,45,46, 124,119,61,62, 47,108,96,46, 63,137,124,62,
1089   0,107,97,1, 29,125,102,30, 28,126,153,29, 25,119,124,26, 24,120,119,25,
1090   23,87,120,24,
1091
1092   /* Everything above the slit */
1093   SPIN,18,
1094   8870,0,8870,731,SEAM,8519,1091,8811,1438,8811,1886,8626,2292,
1095   STEPDOWN,6989,2980,5927,4133,5548,5735,
1096   STEPUP,5388,7642,5228,7807,STEPDOWN,4427,8149,4057,8434,
1097   3493,9185,2816,13524,SEAM,2690,18532,5301,18690,
1098   STEPUP,6810,19005,6861,19277,6804,19625,STEPDOWN,6502,19845,
1099   SEAM,4305,20394,STEPUP,4796,20522,4924,20759,4778,20979,
1100   STEPDOWN,SEAM,3727,21207,SEAM,3726,22181,STEPUP,SEAM,4546,22705,
1101   SEAM,3846,23385,4718,24227,5226,25516,STEPUP,BACKREF,0,
1102
1103   /* Everything below the slit */
1104   SPIN,36,
1105   BACKREF,1,STEPDOWN,3548,31590,STEPDOWN,2724,32633,SEAM,1581,33500,
1106   2013,33901,STEPUP,2281,34500,2281,34936,STEPDOWN,1947,35372,
1107   STEPDOWN,1233,35734,STEPDOWN,0,35891,
1108
1109   ENDOFDATA
1110 };
1111
1112 unsigned short king_data[] = {
1113   SPIN,20,
1114   11378,0,11378,856,SEAM,10928,1152,
1115   11302,1684,11302,2209,11065,2684,
1116   STEPDOWN,8964,3490,7603,4841,7116,6717,
1117   STEPUP,6911,8950,6705,9144,STEPDOWN,5678,9545,5204,9878,
1118   4481,10758,3696,14808,SEAM,3065,26979,
1119   5813,27155,STEPUP,7145,27507,7424,27812,7352,28288,7131,28533,
1120   5477,28882,5397,29010,5406,29363,4903,29934,
1121   STEPDOWN,SEAM,3944,30227,
1122   SEAM,3974,31478,4703,31849,STEPUP,4832,32092,4756,32370,
1123   SEAM,3975,32620,6899,39055,6877,39351,2833,39514,
1124   2786,39612,2786,39807,2734,39856,STEPDOWN,STEPDOWN,2590,39905,0,39969,
1125   /* The cross */
1126   SETBACKREF,0,
1127   QUADSTRIP,-1613,39866,0,-1543,39866,702,-1651,40481,0,-1580,40590,702,
1128   -1531,40917,0,-1465,41008,702,
1129   QUADSTRIP,-1531,40917,0,-1465,41008,702,-2956,41104,0,-2829,41187,702,
1130   -3075,41520,0,-2943,41585,702,-3075,43849,0,-2943,43805,702,
1131   -2862,44347,0,-2739,44282,702,-1116,44636,0,-1068,44554,702,
1132   QUADSTRIP,-1116,44636,0,-1068,44554,702,-1102,45692,0,-1054,45576,702,
1133   -973,45829,0,-973,45747,702,973,45829,0,973,45747,702,1102,45692,0,
1134   1054,45576,702,1116,44636,0,1068,44554,702,
1135   QUADSTRIP,1116,44636,0,1068,44554,702,2862,44347,0,2739,44282,702,
1136   3075,43849,0,2943,43805,702,3075,41520,0,2943,41585,702,2956,41104,0,
1137   2829,41187,702,1531,40917,0,1465,41008,702,
1138   QUADSTRIP,1531,40917,0,1465,41008,702,1651,40481,0,1580,40590,702,
1139   1613,39866,0,1543,39866,702,
1140   QUADSTRIP,-1543,39866,702,1543,39866,702,-1580,40590,702,
1141   1580,40590,702,-1465,41008,702,1465,41008,702,-2829,41187,702,
1142   2829,41187,702,-2943,41585,702,2943,41585,702,-2943,43805,702,
1143   2943,43805,702,-2739,44282,702,2739,44282,702,-1068,44554,702,
1144   1068,44554,702,-1054,45576,702,1054,45576,702,-973,45747,702,
1145   973,45747,702,
1146   QUADSTRIP,-1543,39866,-702,BACKREF,0,0,-1580,40590,-702,BACKREF,0,2,
1147   -1465,41008,-702,BACKREF,0,4,
1148   QUADSTRIP,-1465,41008,-702,BACKREF,0,6,-2829,41187,-702,BACKREF,0,8,
1149   -2943,41585,-702,BACKREF,0,10,-2943,43805,-702,BACKREF,0,12,
1150   -2739,44282,-702,BACKREF,0,14,-1068,44554,-702,BACKREF,0,16,
1151   QUADSTRIP,-1068,44554,-702,BACKREF,0,18,-1054,45576,-702,
1152   BACKREF,0,20,-973,45747,-702,BACKREF,0,22,973,45747,-702,BACKREF,0,24,
1153   1054,45576,-702,BACKREF,0,26,1068,44554,-702,BACKREF,0,28,
1154   QUADSTRIP,1068,44554,-702,BACKREF,0,30,2739,44282,-702,
1155   BACKREF,0,32,2943,43805,-702,BACKREF,0,34,2943,41585,-702,BACKREF,0,36,
1156   2829,41187,-702,BACKREF,0,38,1465,41008,-702,BACKREF,0,40,
1157   QUADSTRIP,1465,41008,-702,BACKREF,0,42,1580,40590,-702,
1158   BACKREF,0,44,1543,39866,-702,BACKREF,0,46,
1159   QUADSTRIP,1543,39866,-702,-1543,39866,-702,1580,40590,-702,
1160   -1580,40590,-702,1465,41008,-702,-1465,41008,-702,2829,41187,-702,
1161   -2829,41187,-702,2943,41585,-702,-2943,41585,-702,2943,43805,-702,
1162   -2943,43805,-702,2739,44282,-702,-2739,44282,-702,1068,44554,-702,
1163   -1068,44554,-702,1054,45576,-702,-1054,45576,-702,973,45747,-702,
1164   -973,45747,-702,
1165   ENDOFDATA
1166 };
1167
1168 unsigned short queen_data[] = {
1169   SPIN,24,
1170   11092,0,11092,914,SEAM,10653,1284,
1171   11018,1798,11018,2358,10787,2866,
1172   STEPDOWN,8739,3726,7412,5168,6937,7171,
1173   STEPUP,6737,9556,6537,9762,STEPDOWN,5536,10191,5073,10546,
1174   4368,11485,3678,15137,SEAM,3259,26879,
1175   5966,27091,STEPUP,7332,27515,7619,27882,7545,28455,7317,28751,
1176   5654,29177,5538,29326,5542,29982,5377,30278,
1177   STEPDOWN,SEAM,4194,30585,
1178   SEAM,4226,31822,5002,32218,STEPUP,5139,32477,5058,32774,
1179   SEAM,4227,33040,STEPDOWN,4421,34778,5042,36612,5874,38429,
1180   STEPUP,SEAM,PATTERN,3,6018,39660,6018,39660,6804,39977,
1181   SEAM,PATTERN,3,5015,41139,5015,41139,5673,41460,
1182   SEAM,4349,40044,
1183   STEPDOWN,SEAM,1381,41188,
1184   1396,42332,STEPDOWN,1082,43072,481,43476,0,43543,
1185   ENDOFDATA
1186 };
1187
1188 unsigned short pawn_data[] = {
1189   SPIN,16,
1190   7395,0,7395,609,
1191   SEAM,7102,910,7345,1199,7345,1572,7191,1910,
1192   STEPDOWN,5826,2484,4941,3446,4625,4781,
1193   STEPUP,4492,6371,4358,6508,
1194   STEPDOWN,3691,6794,2912,7657,2473,10091,
1195   SEAM,2100,15344,
1196   STEPUP,4518,15697,4695,15900,4649,16218,4509,16382,
1197   STEPDOWN,SEAM,3150,16755,STEPUP,3858,17678,4303,18752,4455,19905,
1198   4303,21058,3858,22132,
1199   STEPDOWN,3150,23055,2227,23763,STEPDOWN,1153,24208,0,24360,
1200   ENDOFDATA
1201 };
1202
1203 unsigned short rook_data[] = {
1204   SPIN,20,
1205   9374,0,9374,756,SEAM,9003,1062,9311,1487,
1206   9311,1951,9116,2371,8521,3083,6701,5807,SEAM,6009,7595,
1207   6167,7812,6138,8066,5926,8460,5216,12608,
1208   SEAM,4883,21434,
1209   SEAM,5140,21608,
1210   SEAM,5176,22792,
1211   SEAM,5953,23030,
1212 /* SEAM,PATTERN,5,6103,26819,6143,27971,6143,27971,6143,27971,6103,26819, */
1213 /* SEAM,PATTERN,5, 5020,26819,5053,27971,5053,27971,5053,27971, 5020,26819, */
1214   SETBACKREF,0,
1215   6103,26819,
1216
1217   SETBACKREF,1,
1218   SPIN,20,
1219   5020,26819,5020,26114,4906,25858,0,25666,
1220
1221   POLARQUADSTRIP,20,BACKREF,0,1,1,6143,27971,BACKREF,0,2,2,6143,27971,
1222   BACKREF,0,3,3,6143,27971,BACKREF,0,4,4,6143,27971,
1223   POLARQUADSTRIP,20,BACKREF,0,6,6,6143,27971,BACKREF,0,7,7,6143,27971,
1224   BACKREF,0,8,8,6143,27971,BACKREF,0,9,9,6143,27971,
1225   POLARQUADSTRIP,20,BACKREF,0,11,11,6143,27971,BACKREF,0,12,12,6143,27971,
1226   BACKREF,0,13,13,6143,27971,BACKREF,0,14,14,6143,27971,
1227   POLARQUADSTRIP,20,BACKREF,0,16,16,6143,27971,BACKREF,0,17,17,6143,27971,
1228   BACKREF,0,18,18,6143,27971,BACKREF,0,19,19,6143,27971,
1229
1230   POLARQUADSTRIP,20,1,5053,27971,BACKREF,1,1,2,5053,27971,BACKREF,1,2,
1231   3,5053,27971,BACKREF,1,3,4,5053,27971,BACKREF,1,4,
1232   POLARQUADSTRIP,20,6,5053,27971,BACKREF,1,6,7,5053,27971,BACKREF,1,7,
1233   8,5053,27971,BACKREF,1,8,9,5053,27971,BACKREF,1,9,
1234   POLARQUADSTRIP,20,11,5053,27971,BACKREF,1,11,12,5053,27971,BACKREF,1,12,
1235   13,5053,27971,BACKREF,1,13,14,5053,27971,BACKREF,1,14,
1236   POLARQUADSTRIP,20,16,5053,27971,BACKREF,1,16,17,5053,27971,BACKREF,1,17,
1237   18,5053,27971,BACKREF,1,18,19,5053,27971,BACKREF,1,19,
1238
1239   POLARQUADSTRIP,20,1,5020,26819,1,6103,26819,
1240   0,5020,26819,0,6103,26819,19,5020,26819,19,6103,26819,
1241   POLARQUADSTRIP,20,6,5020,26819,6,6103,26819,
1242   5,5020,26819,5,6103,26819,4,5020,26819,4,6103,26819,
1243   POLARQUADSTRIP,20,11,5020,26819,11,6103,26819,
1244   10,5020,26819,10,6103,26819,9,5020,26819,9,6103,26819,
1245   POLARQUADSTRIP,20,16,5020,26819,16,6103,26819,
1246   15,5020,26819,15,6103,26819,14,5020,26819,14,6103,26819,
1247
1248   POLARQUADSTRIP,20,1,5053,27971,1,6143,27971,1,5020,26819,1,6103,26819,
1249   POLARQUADSTRIP,20,4,5020,26819,4,6103,26819,4,5053,27971,4,6143,27971,
1250   POLARQUADSTRIP,20,6,5053,27971,6,6143,27971,6,5020,26819,6,6103,26819,
1251   POLARQUADSTRIP,20,9,5020,26819,9,6103,26819,9,5053,27971,9,6143,27971,
1252   POLARQUADSTRIP,20,11,5053,27971,11,6143,27971,11,5020,26819,11,6103,26819,
1253   POLARQUADSTRIP,20,14,5020,26819,14,6103,26819,14,5053,27971,14,6143,27971,
1254   POLARQUADSTRIP,20,16,5053,27971,16,6143,27971,16,5020,26819,16,6103,26819,
1255   POLARQUADSTRIP,20,19,5020,26819,19,6103,26819,19,5053,27971,19,6143,27971,
1256
1257   POLARQUADSTRIP,20,1,6143,27971,1,5053,27971,2,6143,27971,2,5053,27971,
1258   3,6143,27971,3,5053,27971,4,6143,27971,4,5053,27971,
1259   POLARQUADSTRIP,20,6,6143,27971,6,5053,27971,7,6143,27971,7,5053,27971,
1260   8,6143,27971,8,5053,27971,9,6143,27971,9,5053,27971,
1261   POLARQUADSTRIP,20,11,6143,27971,11,5053,27971,12,6143,27971,12,5053,27971,
1262   13,6143,27971,13,5053,27971,14,6143,27971,14,5053,27971,
1263   POLARQUADSTRIP,20,16,6143,27971,16,5053,27971,17,6143,27971,17,5053,27971,
1264   18,6143,27971,18,5053,27971,19,6143,27971,19,5053,27971,
1265
1266   ENDOFDATA
1267 };
1268
1269 static double piece_size;
1270
1271 static int enumerate_ring_vertices( int steps, unsigned short *data, void *h,
1272   void (*process_vertex)(void *h,double x,double y,double z))
1273 {
1274   int patlen = 1,i;
1275   unsigned short *pts = data;
1276   double dtheta = M_PI * 2 / steps;
1277
1278   if( data[0] == PATTERN) {
1279         patlen = data[1];
1280         pts += 2;
1281   }
1282
1283   if( pts[0] == 0) steps = 1;
1284
1285   for( i=0; i < steps; i++) {
1286         double r = pts[(i % patlen)*2] * piece_size;
1287         double y = pts[(i % patlen)*2+1] * piece_size;
1288         double theta = dtheta * i;
1289
1290         process_vertex( h, r * cos(theta), y, r * sin(theta));
1291   }
1292
1293   return pts + patlen * 2 - data;
1294 }
1295
1296 static void enumerate_vertices( unsigned short *data, void *h,
1297   void (*process_vertex)(void *h,double x,double y,double z))
1298 {
1299   while(1) {
1300         if( data[0] == SPIN) {
1301           int steps;
1302           steps = data[1];
1303           data += 2;
1304
1305           while(data[0] <= SEAM) {
1306                 if( data[0] == SETBACKREF || data[0] == BACKREF) {
1307                   data += 2;
1308                   continue;
1309                 } else if( data[0] == STEPUP) {
1310                   steps *= 2;
1311                   data++;
1312                   continue;
1313                 } else if( data[0] == STEPDOWN) {
1314                   steps /= 2;
1315                   data++;
1316                   continue;
1317                 } else if( data[0] == SEAM) {
1318                   data ++;
1319                   /* Visit seam vertices twice */
1320                   enumerate_ring_vertices( steps, data,
1321                         h, process_vertex);
1322                   data += enumerate_ring_vertices( steps, data,
1323                         h, process_vertex);
1324                 } else {
1325                   data += enumerate_ring_vertices( steps, data,
1326                         h, process_vertex);
1327                 }
1328           }
1329         } else if( data[0] == POLARQUADSTRIP) {
1330           int steps = data[1];
1331           double dtheta;
1332           data += 2;
1333
1334           dtheta = M_PI * 2 / steps;
1335
1336           while(data[0] <= SEAM) {
1337                 if( data[0] != BACKREF) {
1338                   double theta = dtheta * data[0];
1339                   double r = data[1] * piece_size;
1340                   double y = data[2] * piece_size;
1341                   process_vertex( h, r * cos(theta), y, r * sin(theta));
1342                 }
1343                 data += 3;
1344           }
1345         } else if( data[0] == QUADSTRIP || data[0] == VERTICES) {
1346           data ++;
1347
1348           while(data[0] <= SEAM) {
1349                 if( data[0] == SETBACKREF) {
1350                   data += 2;
1351                   continue;
1352                 }
1353
1354                 if( data[0] != BACKREF) {
1355                   double x = (signed short)data[0] * piece_size;
1356                   double y = data[1] * piece_size;
1357                   double z = (signed short)data[2] * piece_size;
1358                   process_vertex( h, x, y, z);
1359                 }
1360                 data += 3;
1361           }
1362         } else if( data[0] == QUADS || data[0] == TRIANGLES) {
1363           data ++;
1364           while( data[0] <= SEAM) data++;
1365         } else {
1366           break;
1367         }
1368   }
1369 }
1370
1371 static void enumerate_ring_faces( int basevertex, int steps,
1372   int prevbase, int prevsteps, void *h, int *count_ret,
1373   void (*process_face)(void *h,int v1,int v2,int v3,int v4))
1374 {
1375   int i,j;
1376
1377   if( steps == 1) {
1378         for( i=0; i < prevsteps; i++) {
1379           process_face( h,
1380                 basevertex,
1381                 prevbase + i,
1382                 prevbase + (i ? i-1 : prevsteps-1),
1383                 -1);
1384           if (count_ret) (*count_ret)++;
1385         }
1386   } else if( steps == prevsteps) {
1387         for( i=0; i < steps; i++) {
1388           process_face( h,
1389                 basevertex + i,
1390                 prevbase + i,
1391                 prevbase + (i ? i-1 : steps-1),
1392                 basevertex + (i ? i-1 : steps-1));
1393           if (count_ret) (*count_ret)++;
1394         }
1395   } else {
1396         j = 0;
1397         for( i=0;; i++) {
1398           while( j < prevsteps && steps*(1+2*j) < prevsteps*(1+2*i)) {
1399                 process_face( h,
1400                   basevertex + (i%steps),
1401                   prevbase + ((j+1)%prevsteps),
1402                   prevbase + j,
1403                   -1);
1404                 if (count_ret) (*count_ret)++;
1405                 j++;
1406           }
1407           if( i == steps) break;
1408           process_face( h,
1409                 basevertex + i,
1410                 basevertex + ((i+1)%steps),
1411                 prevbase + (j%prevsteps),
1412                 -1);
1413           if (count_ret) (*count_ret)++;
1414         }
1415   }
1416 }
1417
1418 static void enumerate_faces( unsigned short *data, void *h, int *count_ret,
1419   void (*process_face)(void *h,int v1,int v2,int v3,int v4))
1420 {
1421   int basevertex = 0, startofvertices = 0;
1422   int backrefs[5];
1423
1424   while(1) {
1425         if( data[0] == SPIN) {
1426           int steps;
1427           int prevsteps = -1,prevbase = 0;
1428
1429           steps = data[1];
1430           data += 2;
1431
1432           while( data[0] <= SEAM) {
1433                 if( data[0] == SETBACKREF) {
1434                   backrefs[data[1]] = basevertex;
1435                   data += 2;
1436                   continue;
1437                 }
1438
1439                 if( data[0] == STEPUP) {
1440                   steps *= 2;
1441                   data++;
1442                   continue;
1443                 } else if( data[0] == STEPDOWN) {
1444                   steps /= 2;
1445                   data++;
1446                   continue;
1447                 }
1448
1449                 if( data[0] == BACKREF) {
1450                   if( prevsteps != -1) {
1451                         enumerate_ring_faces( backrefs[data[1]], steps,
1452                                               prevbase, prevsteps, h, 
1453                                               count_ret, process_face);
1454                   }
1455
1456                   prevbase = backrefs[data[1]];
1457                   data += 2;
1458                 } else {
1459                   int isseam = 0;
1460                   if( data[0] == SEAM) {
1461                         isseam = 1;
1462                         data++;
1463                   }
1464
1465                   if( data[0] == PATTERN) {
1466                         data += 2 + data[1]*2;
1467                   } else {
1468                         if( data[0] == 0) steps = 1;
1469                         data += 2;
1470                   }
1471
1472                   if( prevsteps != -1) {
1473                         enumerate_ring_faces( basevertex, steps,
1474                                               prevbase, prevsteps, h, 
1475                                               count_ret, process_face);
1476                   }
1477
1478                   if( isseam) basevertex += steps;
1479                   prevbase = basevertex;
1480                   basevertex += steps;
1481                 }
1482
1483                 prevsteps = steps;
1484           }
1485         } else if( data[0] == POLARQUADSTRIP || data[0] == QUADSTRIP) {
1486           int v0=-1,v1=0,v2,v3;
1487           if( data[0] == POLARQUADSTRIP) data += 2;
1488           else data ++;
1489           while(data[0] <= SEAM) {
1490                 if( data[0] == BACKREF) {
1491                   v2 = backrefs[data[1]]+data[2];
1492                 } else {
1493                   v2 = basevertex;
1494                   basevertex++;
1495                 }
1496                 if( data[3] == BACKREF) {
1497                   v3 = backrefs[data[4]]+data[5];
1498                 } else {
1499                   v3 = basevertex;
1500                   basevertex++;
1501                 }
1502                 data += 6;
1503                 if( v0 != -1) {
1504                   process_face( h, v0, v1, v3, v2);
1505                   if (count_ret) (*count_ret)++;
1506                 }
1507                 v0 = v2;
1508                 v1 = v3;
1509           }
1510         } else if( data[0] == VERTICES) {
1511           data ++;
1512           startofvertices = basevertex;
1513           while( data[0] <= SEAM) {
1514                 if( data[0] == SETBACKREF) {
1515                   backrefs[data[1]] = basevertex;
1516                   data += 2;
1517                   continue;
1518                 }
1519                 data += 3;
1520                 basevertex ++;
1521           }
1522         } else if( data[0] == QUADS) {
1523           data ++;
1524           while( data[0] <= SEAM) {
1525                 process_face( h,
1526                   data[0] + startofvertices,
1527                   data[1] + startofvertices,
1528                   data[2] + startofvertices,
1529                   data[3] + startofvertices);
1530                 if (count_ret) (*count_ret)++;
1531                 data += 4;
1532           }
1533         } else if( data[0] == TRIANGLES) {
1534           data ++;
1535           while( data[0] <= SEAM) {
1536                 process_face( h,
1537                   data[0] + startofvertices,
1538                   data[1] + startofvertices,
1539                   data[2] + startofvertices, -1);
1540                 if (count_ret) (*count_ret)++;
1541                 data += 3;
1542           }
1543         } else {
1544           break;
1545         }
1546   }
1547 }
1548
1549 static void normalize( float v[3]) {
1550   float d = sqrt(v[0]*v[0]+v[1]*v[1]+v[2]*v[2]);
1551
1552   if( d == 0.0) {
1553         /* The direction is undefined - normalize it anyway */
1554         v[0] = 1.0;
1555         v[1] = 0.0;
1556         v[2] = 0.0;
1557         return;
1558   }
1559
1560   v[0] /= d;
1561   v[1] /= d;
1562   v[2] /= d;
1563 }
1564
1565 static void normcrossprod( float v1[3], float v2[3], float out[3])
1566 {
1567   out[0] = v1[1] * v2[2] - v1[2] * v2[1];
1568   out[1] = v1[2] * v2[0] - v1[0] * v2[2];
1569   out[2] = v1[0] * v2[1] - v1[1] * v2[0];
1570   normalize( out);
1571 }
1572
1573 #define vectordiff(v1,v2,out) \
1574         ((out)[0] = (v1)[0] - (v2)[0], \
1575         (out)[1] = (v1)[1] - (v2)[1], \
1576         (out)[2] = (v1)[2] - (v2)[2])
1577
1578 #define vectoradd(v1,v2) \
1579         ((v1)[0] += (v2)[0], \
1580          (v1)[1] += (v2)[1], \
1581          (v1)[2] += (v2)[2])
1582
1583 int numverts;
1584 float *vertices;
1585 float *normals;
1586
1587 static void count_vertex( void *dummy, double x, double y, double z)
1588 {
1589   numverts++;
1590 }
1591
1592 static void add_normal( void *dummy, int v1, int v2, int v3, int v4)
1593 {
1594   float surfnormal[3],d1[3],d2[3];
1595
1596   if( v4 == -1) {
1597         vectordiff( vertices + 3 * v2, vertices + 3 * v1, d1);
1598         vectordiff( vertices + 3 * v3, vertices + 3 * v1, d2);
1599         normcrossprod( d1, d2, surfnormal);
1600         vectoradd( normals + 3 * v1, surfnormal);
1601         vectoradd( normals + 3 * v2, surfnormal);
1602         vectoradd( normals + 3 * v3, surfnormal);
1603   } else {
1604         vectordiff( vertices + 3 * v2, vertices + 3 * v1, d1);
1605         vectordiff( vertices + 3 * v4, vertices + 3 * v1, d2);
1606         normcrossprod( d1, d2, surfnormal);
1607         vectoradd( normals + 3 * v1, surfnormal);
1608         vectordiff( vertices + 3 * v3, vertices + 3 * v2, d1);
1609         vectordiff( vertices + 3 * v1, vertices + 3 * v2, d2);
1610         normcrossprod( d1, d2, surfnormal);
1611         vectoradd( normals + 3 * v2, surfnormal);
1612         vectordiff( vertices + 3 * v4, vertices + 3 * v3, d1);
1613         vectordiff( vertices + 3 * v2, vertices + 3 * v3, d2);
1614         normcrossprod( d1, d2, surfnormal);
1615         vectoradd( normals + 3 * v3, surfnormal);
1616         vectordiff( vertices + 3 * v1, vertices + 3 * v4, d1);
1617         vectordiff( vertices + 3 * v3, vertices + 3 * v4, d2);
1618         normcrossprod( d1, d2, surfnormal);
1619         vectoradd( normals + 3 * v4, surfnormal);
1620   }
1621 }
1622
1623 static void collect_vertex( void *curvert, double x, double y, double z)
1624 {
1625   (*(float**)curvert)[0] = x;
1626   (*(float**)curvert)[1] = y;
1627   (*(float**)curvert)[2] = z;
1628   (*(float**)curvert) += 3;
1629 }
1630
1631 static void draw_face( void *dummy, int v1, int v2, int v3, int v4)
1632 {
1633   glBegin( v4 == -1 ? GL_TRIANGLES : GL_QUADS);
1634   glNormal3f( normals[v1*3], normals[v1*3+1], normals[v1*3+2]);
1635   glVertex3f( vertices[v1*3], vertices[v1*3+1], vertices[v1*3+2]);
1636   glNormal3f( normals[v2*3], normals[v2*3+1], normals[v2*3+2]);
1637   glVertex3f( vertices[v2*3], vertices[v2*3+1], vertices[v2*3+2]);
1638   glNormal3f( normals[v3*3], normals[v3*3+1], normals[v3*3+2]);
1639   glVertex3f( vertices[v3*3], vertices[v3*3+1], vertices[v3*3+2]);
1640   if( v4 != -1) {
1641         glNormal3f( normals[v4*3], normals[v4*3+1], normals[v4*3+2]);
1642         glVertex3f( vertices[v4*3], vertices[v4*3+1], vertices[v4*3+2]);
1643   }
1644   glEnd();
1645 }
1646
1647 static int draw_piece( unsigned short *piece_data)
1648 {
1649   int i;
1650   float *curvert;
1651   int count = 0;
1652
1653   /* Count how many vertices this piece has */
1654   enumerate_vertices( piece_data, NULL, count_vertex);
1655
1656   /* Allocate memory for the vertices and for the vertex normals */
1657   vertices = malloc( sizeof(float) * 3 * numverts);
1658   normals = malloc( sizeof(float) * 3 * numverts);
1659   if( !vertices || !normals) exit(1);
1660
1661   /* Collect the vertex coordinates */
1662   curvert = vertices;
1663   enumerate_vertices( piece_data, &curvert, collect_vertex);
1664
1665   /* Zero out the normals */
1666   for( i=0; i < numverts * 3; i++) {
1667         normals[i] = 0.0;
1668   }
1669
1670   /* Add up all the face normals at each vertex */
1671   enumerate_faces( piece_data, NULL, NULL, add_normal);
1672
1673   /* Normalize the vertex normals */
1674   for( i=0; i < numverts; i++) {
1675         normalize( normals + i * 3);
1676   }
1677
1678   /* Now draw the faces */
1679   enumerate_faces( piece_data, NULL, &count, draw_face);
1680
1681   free( normals);
1682   free( vertices);
1683
1684   if (count <= 1) abort();
1685   return count;
1686 }
1687
1688 void gen_model_lists( int classic, int poly_count[PIECES]) {
1689
1690   Bool queen_only_p = classic < 0;
1691   if (classic < 0) classic = 0;
1692
1693   piece_size = classic ? 0.095 / 100 : 0.3 / 8192;
1694
1695   glGenLists (20); /* this is horrible! List numbers are hardcoded! */
1696
1697   glNewList(QUEEN, GL_COMPILE);
1698   poly_count[QUEEN] = draw_piece( classic ? classic_queen_data : queen_data);
1699   glEndList();
1700
1701   if (queen_only_p) return;
1702
1703   glNewList(KING, GL_COMPILE);
1704   poly_count[KING] = draw_piece( classic ? classic_king_data : king_data);
1705   glEndList();
1706
1707   glNewList(BISHOP, GL_COMPILE);
1708   poly_count[BISHOP] = draw_piece( classic ? classic_bishop_data : bishop_data);
1709   glEndList();
1710
1711   glNewList(KNIGHT, GL_COMPILE);
1712   poly_count[KNIGHT] = draw_piece( classic ? classic_knight_data : knight_data);
1713   glEndList();
1714
1715   glNewList(ROOK, GL_COMPILE);
1716   poly_count[ROOK] = draw_piece( classic ? classic_rook_data : rook_data);
1717   glEndList();
1718
1719   glNewList(PAWN, GL_COMPILE);
1720   poly_count[PAWN] = draw_piece( classic ? classic_pawn_data : pawn_data);
1721   glEndList();
1722 }