e9ec033cabb7df8cd56f8c34ad0ecb834f121c64
[xboard.git] / winboard-dm-beta4 / parser.c
1 /* A lexical scanner generated by flex */
2
3 /* Scanner skeleton version:
4  * $Header$
5  */
6
7 #define FLEX_SCANNER
8 #define YY_FLEX_MAJOR_VERSION 2
9 #define YY_FLEX_MINOR_VERSION 5
10
11 #include <stdio.h>
12
13
14 /* cfront 1.2 defines "c_plusplus" instead of "__cplusplus" */
15 #ifdef c_plusplus
16 #ifndef __cplusplus
17 #define __cplusplus
18 #endif
19 #endif
20
21
22 #ifdef __cplusplus
23
24 #include <stdlib.h>
25 #include <unistd.h>
26
27 /* Use prototypes in function declarations. */
28 #define YY_USE_PROTOS
29
30 /* The "const" storage-class-modifier is valid. */
31 #define YY_USE_CONST
32
33 #else   /* ! __cplusplus */
34
35 #if __STDC__
36
37 #define YY_USE_PROTOS
38 #define YY_USE_CONST
39
40 #endif  /* __STDC__ */
41 #endif  /* ! __cplusplus */
42
43 #ifdef __TURBOC__
44  #pragma warn -rch
45  #pragma warn -use
46 #include <io.h>
47 #include <stdlib.h>
48 #define YY_USE_CONST
49 #define YY_USE_PROTOS
50 #endif
51
52 #ifdef YY_USE_CONST
53 #define yyconst const
54 #else
55 #define yyconst
56 #endif
57
58
59 #ifdef YY_USE_PROTOS
60 #define YY_PROTO(proto) proto
61 #else
62 #define YY_PROTO(proto) ()
63 #endif
64
65 /* Returned upon end-of-file. */
66 #define YY_NULL 0
67
68 /* Promotes a possibly negative, possibly signed char to an unsigned
69  * integer for use as an array index.  If the signed char is negative,
70  * we want to instead treat it as an 8-bit unsigned char, hence the
71  * double cast.
72  */
73 #define YY_SC_TO_UI(c) ((unsigned int) (unsigned char) c)
74
75 /* Enter a start condition.  This macro really ought to take a parameter,
76  * but we do it the disgusting crufty way forced on us by the ()-less
77  * definition of BEGIN.
78  */
79 #define BEGIN yy_start = 1 + 2 *
80
81 /* Translate the current start state into a value that can be later handed
82  * to BEGIN to return to the state.  The YYSTATE alias is for lex
83  * compatibility.
84  */
85 #define YY_START ((yy_start - 1) / 2)
86 #define YYSTATE YY_START
87
88 /* Action number for EOF rule of a given start state. */
89 #define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1)
90
91 /* Special action meaning "start processing a new file". */
92 #define YY_NEW_FILE yyrestart( yyin )
93
94 #define YY_END_OF_BUFFER_CHAR 0
95
96 /* Size of default input buffer. */
97 #define YY_BUF_SIZE 16384
98
99 typedef struct yy_buffer_state *YY_BUFFER_STATE;
100
101 extern int yyleng;
102 extern FILE *yyin, *yyout;
103
104 #define EOB_ACT_CONTINUE_SCAN 0
105 #define EOB_ACT_END_OF_FILE 1
106 #define EOB_ACT_LAST_MATCH 2
107
108 /* The funky do-while in the following #define is used to turn the definition
109  * int a single C statement (which needs a semi-colon terminator).  This
110  * avoids problems with code like:
111  *
112  *      if ( condition_holds )
113  *              yyless( 5 );
114  *      else
115  *              do_something_else();
116  *
117  * Prior to using the do-while the compiler would get upset at the
118  * "else" because it interpreted the "if" statement as being all
119  * done when it reached the ';' after the yyless() call.
120  */
121
122 /* Return all but the first 'n' matched characters back to the input stream. */
123
124 #define yyless(n) \
125         do \
126                 { \
127                 /* Undo effects of setting up yytext. */ \
128                 *yy_cp = yy_hold_char; \
129                 YY_RESTORE_YY_MORE_OFFSET \
130                 yy_c_buf_p = yy_cp = yy_bp + n - YY_MORE_ADJ; \
131                 YY_DO_BEFORE_ACTION; /* set up yytext again */ \
132                 } \
133         while ( 0 )
134
135 #define unput(c) yyunput( c, yytext_ptr )
136
137 /* The following is because we cannot portably get our hands on size_t
138  * (without autoconf's help, which isn't available because we want
139  * flex-generated scanners to compile on their own).
140  */
141 typedef unsigned int yy_size_t;
142
143
144 struct yy_buffer_state
145         {
146         FILE *yy_input_file;
147
148         char *yy_ch_buf;                /* input buffer */
149         char *yy_buf_pos;               /* current position in input buffer */
150
151         /* Size of input buffer in bytes, not including room for EOB
152          * characters.
153          */
154         yy_size_t yy_buf_size;
155
156         /* Number of characters read into yy_ch_buf, not including EOB
157          * characters.
158          */
159         int yy_n_chars;
160
161         /* Whether we "own" the buffer - i.e., we know we created it,
162          * and can realloc() it to grow it, and should free() it to
163          * delete it.
164          */
165         int yy_is_our_buffer;
166
167         /* Whether this is an "interactive" input source; if so, and
168          * if we're using stdio for input, then we want to use getc()
169          * instead of fread(), to make sure we stop fetching input after
170          * each newline.
171          */
172         int yy_is_interactive;
173
174         /* Whether we're considered to be at the beginning of a line.
175          * If so, '^' rules will be active on the next match, otherwise
176          * not.
177          */
178         int yy_at_bol;
179
180         /* Whether to try to fill the input buffer when we reach the
181          * end of it.
182          */
183         int yy_fill_buffer;
184
185         int yy_buffer_status;
186 #define YY_BUFFER_NEW 0
187 #define YY_BUFFER_NORMAL 1
188         /* When an EOF's been seen but there's still some text to process
189          * then we mark the buffer as YY_EOF_PENDING, to indicate that we
190          * shouldn't try reading from the input source any more.  We might
191          * still have a bunch of tokens to match, though, because of
192          * possible backing-up.
193          *
194          * When we actually see the EOF, we change the status to "new"
195          * (via yyrestart()), so that the user can continue scanning by
196          * just pointing yyin at a new input file.
197          */
198 #define YY_BUFFER_EOF_PENDING 2
199         };
200
201 static YY_BUFFER_STATE yy_current_buffer = 0;
202
203 /* We provide macros for accessing buffer states in case in the
204  * future we want to put the buffer states in a more general
205  * "scanner state".
206  */
207 #define YY_CURRENT_BUFFER yy_current_buffer
208
209
210 /* yy_hold_char holds the character lost when yytext is formed. */
211 static char yy_hold_char;
212
213 static int yy_n_chars;          /* number of characters read into yy_ch_buf */
214
215
216 int yyleng;
217
218 /* Points to current character in buffer. */
219 static char *yy_c_buf_p = (char *) 0;
220 static int yy_init = 1;         /* whether we need to initialize */
221 static int yy_start = 0;        /* start state number */
222
223 /* Flag which is used to allow yywrap()'s to do buffer switches
224  * instead of setting up a fresh yyin.  A bit of a hack ...
225  */
226 static int yy_did_buffer_switch_on_eof;
227
228 void yyrestart YY_PROTO(( FILE *input_file ));
229
230 void yy_switch_to_buffer YY_PROTO(( YY_BUFFER_STATE new_buffer ));
231 void yy_load_buffer_state YY_PROTO(( void ));
232 YY_BUFFER_STATE yy_create_buffer YY_PROTO(( FILE *file, int size ));
233 void yy_delete_buffer YY_PROTO(( YY_BUFFER_STATE b ));
234 void yy_init_buffer YY_PROTO(( YY_BUFFER_STATE b, FILE *file ));
235 void yy_flush_buffer YY_PROTO(( YY_BUFFER_STATE b ));
236 #define YY_FLUSH_BUFFER yy_flush_buffer( yy_current_buffer )
237
238 YY_BUFFER_STATE yy_scan_buffer YY_PROTO(( char *base, yy_size_t size ));
239 YY_BUFFER_STATE yy_scan_string YY_PROTO(( yyconst char *yy_str ));
240 YY_BUFFER_STATE yy_scan_bytes YY_PROTO(( yyconst char *bytes, int len ));
241
242 static void *yy_flex_alloc YY_PROTO(( yy_size_t ));
243 static void *yy_flex_realloc YY_PROTO(( void *, yy_size_t ));
244 static void yy_flex_free YY_PROTO(( void * ));
245
246 #define yy_new_buffer yy_create_buffer
247
248 #define yy_set_interactive(is_interactive) \
249         { \
250         if ( ! yy_current_buffer ) \
251                 yy_current_buffer = yy_create_buffer( yyin, YY_BUF_SIZE ); \
252         yy_current_buffer->yy_is_interactive = is_interactive; \
253         }
254
255 #define yy_set_bol(at_bol) \
256         { \
257         if ( ! yy_current_buffer ) \
258                 yy_current_buffer = yy_create_buffer( yyin, YY_BUF_SIZE ); \
259         yy_current_buffer->yy_at_bol = at_bol; \
260         }
261
262 #define YY_AT_BOL() (yy_current_buffer->yy_at_bol)
263
264
265 #define YY_USES_REJECT
266 typedef unsigned char YY_CHAR;
267 FILE *yyin = (FILE *) 0, *yyout = (FILE *) 0;
268 typedef int yy_state_type;
269 extern char *yytext;
270 #define yytext_ptr yytext
271
272 static yy_state_type yy_get_previous_state YY_PROTO(( void ));
273 static yy_state_type yy_try_NUL_trans YY_PROTO(( yy_state_type current_state ));
274 static int yy_get_next_buffer YY_PROTO(( void ));
275 static void yy_fatal_error YY_PROTO(( yyconst char msg[] ));
276
277 /* Done after the current pattern has been matched and before the
278  * corresponding action - sets up yytext.
279  */
280 #define YY_DO_BEFORE_ACTION \
281         yytext_ptr = yy_bp; \
282         yyleng = (int) (yy_cp - yy_bp); \
283         yy_hold_char = *yy_cp; \
284         *yy_cp = '\0'; \
285         yy_c_buf_p = yy_cp;
286
287 #define YY_NUM_RULES 42
288 #define YY_END_OF_BUFFER 43
289 static yyconst short int yy_acclist[661] =
290     {   0,
291        43,   41,   42,   41,   42,   41,   42,   40,   41,   42,
292        41,   42,   25,   41,   42,   41,   42,   40,   41,   42,
293        40,   41,   42,16410,   40,   41,   42,16410,   41,   42,
294        40,   41,   42,   40,   41,   42,   40,   41,   42,   40,
295        41,   42,   40,   41,   42,   40,   41,   42,   40,   41,
296        42,   40,   41,   42,   40,   41,   42,   40,   41,   42,
297        40,   41,   42,   40,   41,   42,   40,   41,   42,   41,
298        42,   40,   41,   42,   40,   41,   42,   40,   41,   42,
299        40,   41,   42,   40,   41,   42,   40,   41,   42,   40,
300        41,   42,   40,   41,   42,   40,   41,   42,   41,   42,
301
302        41,   42,   40,   41,   42,   40,   41,   42,   40,   41,
303        42,16410,   40,   41,   42,16410,   41,   42,   40,   41,
304        42,   40,   41,   42,   40,   41,   42,   40,   41,   42,
305        40,   41,   42,   40,   41,   42,   40,   41,   42,   40,
306        41,   42,   40,   41,   42,   40,   41,   42,   40,   41,
307        42,   40,   41,   42,   40,   41,   42,   40,   41,   42,
308        40,   41,   42,   40,   41,   42,   40,   41,   42,   40,
309        41,   42,   40,   41,   42,   40,   41,   42,   40,   41,
310        42,   40,   41,   42,   41,   42,   33,   40,   17,   40,
311         9,   40,   40,   40,16410, 8218,   40,   35,   40,   40,
312
313        40,   40,   40,   40,   40,   40,   40,   40,   40,    9,
314        40,   40,   40,   40,   40,   40,   36,   40,    3,   40,
315        40,   40,    4,   40,   40,    3,   40,   40,    4,   40,
316        40,   40,   40,    9,   40,   34,   40,   40,    9,   40,
317        40,   40,16410, 8218,   40,   40,   40,   40,   40,   40,
318        40,   40,   40,   40,   40,   40,    9,   40,   40,   40,
319        40,   40,   40,   40,    3,   40,   40,   40,    4,   40,
320        40,    3,   40,   40,    4,   40,   40,   40,   40,    9,
321        40,   15,    9,   40,   23,   40,   23,    8,   40, 8218,
322        22,   40,   22,   24,   40,   40,   40,    6,   40,   40,
323
324        40,   40,   40,   40,   40,    9,   40,   40,   40,   40,
325        40,   20,   40,    4,   40,   40,    3,   40,   40,    3,
326        40,    4,    5,   40,    4,   40,   40,    4,   40,   40,
327        40,    3,   40,    4,    4,   40,    5,    6,   40,    4,
328        40,   40,    9,   40,   34,   39,    9,   40,   23,   40,
329         8,   40,   22,   40,   35,   40,   40,   40,    6,   40,
330        40,   40,   40,   40,   40,   40,    9,   40,   40,   40,
331        40,   40,   20,   40,    4,   40,   40,    3,   40,   40,
332         3,   40,    5,   40,    4,   40,   40,    4,   40,   40,
333        40,    3,   40,    4,   40,    5,    6,   40,    4,   40,
334
335        40,    9,   40,   38,   38,   37,   25,   25,   40,    6,
336        40,    7,   40,    6,   10,   40,   40,   40,   40,   19,
337        40,   40,   21,   40,   16,   40,   40,   40,   40,   40,
338        20,   20,   40,   20,   40,   36,    3,    3,    2,   40,
339         5,    4,    5,   40,   40,    4,    4,   40,    2,    7,
340        40,    5,    6,    5,    6,   40,    5,   40,   40,   40,
341        25,   39,   40,    6,   40,    7,   40,   40,   40,   40,
342        40,   19,   40,   40,   21,   40,   16,   40,   40,   40,
343        40,   40,   20,   40,   20,   20,   40,    2,   40,    5,
344        40,   40,    4,   40,    2,    7,   40,    5,    6,   40,
345
346         5,   40,   40,   40,    7,    1,   40,   40,   40,   19,
347        40,   40,   40,   21,   21,   40,   21,   40,   40,   40,
348        40,   30,   36,    2,    2,   40,    5,    4,    5,    5,
349        40,    2,    7,   39,    1,   40,   40,   40,   19,   40,
350        40,   40,   21,   40,   21,   21,   40,   40,   40,   40,
351        20,   39,    2,   40,    5,   40,   27,   38,   23,   23,
352        22,   22,   24,   24,   20,   21,    1,    1,   40,   40,
353        40,   40,   11,   40,   40,   28,   36,   30,    2,    2,
354         5,   27,   34,   39,   39,    1,   40,   40,   40,   40,
355        21,   39,   11,   40,   40,   20,   39,   18,   24,   20,
356
357        21,    1,    1,   19,   40,   40,   40,   11,   40,   40,
358        40,   40,   21,   39,   40,   11,   40,   40,   12,   40,
359        40,   40,   40,   12,   40,   40,   14,   40,   40,   40,
360        14,   40,   40,   40,   39,   40,   40,   40,   40,   39,
361        39,   40,   40,   31,   40,   39,   39,   31,   40,   13,
362        31,   32,   32,   35,   39,   39,   31,   39,   34,   29
363     } ;
364
365 static yyconst short int yy_accept[712] =
366     {   0,
367         1,    1,    1,    2,    4,    6,    8,   11,   13,   16,
368        18,   21,   25,   29,   31,   34,   37,   40,   43,   46,
369        49,   52,   55,   58,   61,   64,   67,   70,   72,   75,
370        78,   81,   84,   87,   90,   93,   96,   99,  101,  103,
371       106,  109,  113,  117,  119,  122,  125,  128,  131,  134,
372       137,  140,  143,  146,  149,  152,  155,  158,  161,  164,
373       167,  170,  173,  176,  179,  182,  185,  187,  187,  188,
374       189,  189,  189,  189,  189,  190,  190,  190,  191,  191,
375       193,  193,  193,  193,  194,  194,  194,  196,  196,  198,
376       198,  199,  199,  200,  200,  201,  201,  201,  202,  203,
377
378       204,  205,  206,  207,  208,  209,  210,  212,  213,  214,
379       215,  216,  217,  217,  217,  217,  217,  218,  219,  221,
380       221,  222,  223,  225,  226,  228,  228,  229,  231,  232,
381       233,  234,  236,  236,  236,  236,  237,  237,  238,  238,
382       239,  241,  241,  242,  244,  244,  246,  246,  247,  248,
383       248,  249,  250,  251,  252,  253,  254,  255,  256,  257,
384       259,  260,  261,  262,  263,  264,  265,  267,  267,  268,
385       269,  271,  272,  274,  274,  275,  277,  278,  279,  280,
386       282,  282,  282,  282,  282,  282,  282,  282,  282,  282,
387       282,  282,  283,  283,  283,  283,  285,  287,  288,  290,
388
389       291,  291,  291,  291,  293,  294,  295,  295,  295,  295,
390       295,  296,  296,  297,  297,  298,  298,  298,  300,  301,
391       302,  303,  304,  305,  306,  308,  309,  310,  311,  312,
392       314,  314,  314,  314,  314,  316,  316,  317,  317,  317,
393       319,  320,  322,  323,  325,  325,  325,  327,  328,  330,
394       331,  331,  332,  334,  335,  337,  340,  342,  343,  345,
395       346,  346,  346,  346,  346,  347,  349,  351,  353,  355,
396       355,  356,  356,  357,  358,  358,  359,  361,  362,  363,
397       364,  365,  366,  367,  369,  370,  371,  372,  373,  375,
398       377,  378,  378,  380,  381,  383,  385,  387,  388,  390,
399
400       391,  391,  392,  394,  396,  399,  401,  402,  404,  404,
401       404,  405,  406,  406,  406,  407,  407,  407,  408,  408,
402       409,  409,  409,  409,  410,  410,  410,  410,  410,  410,
403       410,  410,  410,  410,  410,  410,  412,  412,  412,  414,
404       415,  416,  417,  417,  418,  419,  420,  422,  422,  423,
405       425,  427,  428,  429,  430,  431,  432,  434,  436,  436,
406       436,  436,  436,  437,  438,  438,  439,  441,  442,  443,
407       443,  443,  443,  445,  446,  447,  447,  449,  449,  452,
408       454,  457,  459,  460,  461,  461,  462,  462,  462,  462,
409       462,  463,  463,  464,  464,  464,  466,  468,  469,  469,
410
411       470,  471,  472,  474,  475,  477,  479,  480,  481,  482,
412       483,  485,  486,  488,  490,  492,  493,  495,  498,  501,
413       503,  504,  505,  505,  505,  505,  505,  505,  505,  505,
414       505,  505,  505,  505,  505,  505,  505,  505,  505,  505,
415       506,  508,  509,  510,  510,  512,  512,  513,  514,  515,
416       517,  519,  520,  521,  522,  522,  522,  524,  524,  524,
417       525,  525,  525,  527,  528,  528,  529,  530,  530,  532,
418       532,  534,  534,  534,  534,  534,  534,  534,  535,  535,
419       535,  537,  538,  539,  541,  542,  543,  545,  546,  548,
420       549,  550,  551,  553,  555,  557,  557,  557,  559,  559,
421
422       559,  560,  560,  561,  561,  562,  562,  563,  563,  564,
423       564,  565,  565,  565,  565,  565,  567,  567,  568,  568,
424       568,  570,  571,  571,  571,  571,  571,  571,  572,  573,
425       575,  576,  578,  578,  579,  580,  581,  582,  582,  582,
426       584,  584,  584,  585,  586,  586,  586,  588,  589,  590,
427       591,  593,  595,  596,  598,  598,  599,  599,  599,  599,
428       600,  600,  600,  600,  602,  602,  603,  604,  604,  605,
429       605,  605,  605,  605,  606,  607,  608,  610,  611,  611,
430       611,  611,  611,  611,  612,  613,  615,  616,  618,  619,
431       619,  619,  619,  619,  619,  619,  620,  620,  620,  620,
432
433       620,  621,  622,  622,  622,  622,  622,  623,  624,  624,
434       624,  624,  624,  625,  625,  625,  625,  626,  627,  629,
435       629,  629,  629,  629,  630,  630,  631,  633,  633,  633,
436       633,  633,  634,  635,  635,  635,  635,  635,  636,  637,
437       638,  638,  638,  638,  638,  638,  639,  640,  640,  640,
438       640,  640,  641,  642,  643,  644,  644,  644,  644,  644,
439       644,  646,  646,  646,  646,  646,  647,  648,  650,  650,
440       650,  651,  651,  652,  652,  653,  653,  653,  655,  655,
441       656,  657,  657,  657,  657,  657,  659,  659,  659,  659,
442       659,  659,  659,  659,  659,  659,  659,  659,  659,  659,
443
444       659,  659,  659,  659,  659,  659,  659,  659,  660,  661,
445       661
446     } ;
447
448 static yyconst int yy_ec[256] =
449     {   0,
450         1,    1,    1,    1,    1,    1,    1,    1,    2,    3,
451         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
452         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
453         1,    4,    1,    5,    6,    7,    8,    1,    9,   10,
454        11,   12,   13,    1,   14,   15,   16,   17,   18,   19,
455        20,   20,   20,   20,   20,   20,   21,   22,   23,    1,
456        24,    1,    1,   25,   26,   27,   28,   29,   30,   31,
457        32,   33,   34,   34,   35,   36,   37,   38,   39,   40,
458        41,   42,   43,   34,   44,   34,   45,   46,   34,   34,
459        47,    1,   48,    1,   49,    1,   50,   51,   52,   53,
460
461        54,   55,   56,   57,   58,   34,   59,   60,   61,   62,
462        63,   64,   41,   65,   66,   67,   68,   34,   69,   46,
463        70,   34,   71,    1,   72,    1,    1,    1,    1,    1,
464         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
465         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
466         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
467         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
468         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
469         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
470         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
471
472         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
473         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
474         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
475         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
476         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
477         1,    1,    1,    1,    1
478     } ;
479
480 static yyconst int yy_meta[73] =
481     {   0,
482         1,    2,    3,    2,    1,    1,    1,    1,    4,    5,
483         6,    1,    1,    7,    1,    1,    4,    8,    8,    8,
484         4,    9,    1,   10,    1,    4,   11,    4,    4,    4,
485         4,    4,    4,    4,   11,    4,    4,   11,   12,   12,
486        11,   11,    4,    4,    4,    7,    1,    1,    1,   13,
487        14,   13,   13,   15,   13,   13,   13,    4,   11,    4,
488         4,   11,   12,   12,   11,    4,    4,    4,    4,    4,
489         1,    1
490     } ;
491
492 static yyconst short int yy_base[787] =
493     {   0,
494         0,   72, 2588, 4394,  119,  129,    0,  141, 2583,  139,
495       150,  171,  238, 2583,  257, 2527, 2518,  117,  159, 2518,
496      2530,  190,  142,  233,  191, 2512,  239,  317,  376,  420,
497       125,  205,  193,  114,  243,  120,  204,  331, 2574,  174,
498       353,  476,  258,  260,  543,  244,  282,  346,  311,  334,
499       256,  312,  365,  595,  331,  351,  354,  644,  688,  242,
500       348,  327,  365,  386,  303,  392,  552, 2521,  432,    0,
501      2566,  258,  557,  282, 4394, 2562,  393,  320, 2556, 2554,
502      2552,  342,  442, 2551,  457,  364,  605, 2550,    0, 2562,
503      4394,  576,  530,  617,  732,  625,  661,  449, 2514, 2509,
504
505      2512, 2517, 2492, 2493, 2490, 2517, 2515,  463,  572, 2503,
506      2494, 2489, 2502,  789,  372,  861, 4394,  669,  924,  705,
507       713,  468,  980,  765, 1032,  773,  789, 1076,  481,  637,
508      2486, 2485,  390, 2475,  830, 2542, 2541,  383, 2540,  617,
509       593,  546,  858,  874,  406,  579,  432,  865, 1120, 1005,
510       505,  683,  726,  727,  621,  872,  870,  876,  603,  873,
511       905,  665,  891,  884,  882,  973, 1168, 1013, 1049,  936,
512      1225, 1057, 1277, 1093, 1101, 1321,  641,  983,  928,  930,
513       896, 2478,  538,  543,  612, 2531,  622, 1030, 1221, 2528,
514      2466, 4394, 2532, 2531, 2529, 2518, 2527, 2526,    0, 4394,
515
516      2525, 2524, 2523, 2521, 2520,  443, 2465, 2459, 2471, 2466,
517       668,  709,  594, 1218,  732,  753,  756, 1365, 2467, 2466,
518      2446,  803,  906, 2460, 2498,    0, 2453, 2449, 2441, 1422,
519       689, 1069,  172, 1494,  790, 1251, 1294, 1302, 1415, 2496,
520       838,  976, 1288, 1557, 1413, 1449,  678,  629,  910, 1338,
521      1346,  992, 1105, 1502, 1057, 1609, 1182, 1100, 2492, 4394,
522      1510,  996, 2501,  191, 2501, 1172,  960,  962, 1158,  831,
523      2499, 1132, 1237,  889, 1482, 1300, 1653, 1176, 1228, 1010,
524      1273, 1315, 1175, 1190,    0, 1204, 1531, 1071, 1710, 1774,
525      1550, 1582, 1242, 1443, 1551, 1830, 1272, 1239, 1121, 1493,
526
527      1590, 1606, 1659, 1141, 1882, 1673, 1721, 1427, 1504, 2447,
528      4394,  843, 1025, 2489, 4394, 1727, 2487, 2485, 2423, 2422,
529      2475, 2474, 2473, 2473, 1010, 2472,  539, 2471, 1290, 1541,
530       610, 2421, 2421, 2414, 2414,    0,  939, 1197,    0, 4394,
531      4394, 1699, 1710, 1344, 2420, 2419,  885,  879, 1130, 1939,
532         0, 2438, 2420, 2421, 2420,    0, 2011, 2083,  733,  949,
533      1131, 1410, 2468, 2461, 1365, 4394, 2146, 1356, 1154,  689,
534      1752, 1796, 1157,  715, 2417, 2406,    0, 1386,    0, 1564,
535      2202, 1802, 1633, 2406, 1857, 2464, 1571, 1672, 2417, 2403,
536      2462, 1187, 1451, 1003,  894, 1295, 1470, 1718, 1855, 1823,
537
538      1555, 1665, 1782, 1796, 2267, 1574, 1588, 1826, 1647, 1674,
539      2339, 2460, 2411, 2475, 1840, 1858, 1608,    0, 2531, 1905,
540      1956, 1857, 1728, 2409, 2451, 1639, 2450, 2385, 2445, 2383,
541      2443, 2381, 2434, 1281, 2399, 2395, 2395, 2390, 1389, 4394,
542      2587, 2443, 1146, 1916, 2442, 1281, 2415, 2390,    0, 2652,
543      2724, 2378, 2378, 2428, 1322, 1883, 4394, 2426, 1966, 1457,
544      2002, 2076, 2419, 1428,  952, 4394, 2375, 2364,    0, 2410,
545      1544, 1774, 2396, 1877, 2392, 2347, 2341, 1521, 1030, 1255,
546      2787, 1676, 1881, 1788, 1891, 1861, 2852, 2402, 2924, 1963,
547      1841, 1944, 2402, 1691, 1649, 1816, 1235, 4394, 1979, 2393,
548
549      2392, 2330, 2329, 2389, 2388, 2326, 2325, 2385, 2381, 2319,
550      2318, 2366, 2362, 2315, 2323, 1377, 2320, 1778, 2004, 2102,
551      2355, 2310, 2348, 2304, 2287, 2326, 2288, 2289, 2264, 1524,
552      2279, 4394, 1980, 4394, 2317, 4394, 4394, 2312, 2053, 2319,
553      2268, 2261, 2315, 1999, 1555,  548, 1908, 1982, 1951, 1786,
554      2301, 2043, 2029, 2297, 2054, 4394, 2243, 2158, 2289, 2284,
555      2219, 2205, 2209, 4394, 2198, 2239, 4394, 2235, 2228, 2174,
556      2228, 2182, 2157, 2174, 2105, 2086,    0, 2061, 2130, 2120,
557      2054, 1040,  358, 2032, 2091, 2073, 2093, 1970, 2136, 2120,
558      1988, 2029, 1542, 1985, 1941, 1941, 1923,  884, 1858, 1831,
559
560      2996, 1815, 1772, 1768, 1617,  651, 3068, 2150, 2149, 1757,
561      1745, 1725, 4394, 1623, 1924, 2045, 3140, 2054,    0, 1631,
562      1594, 1302, 1202, 3212, 2158, 2066, 2040, 2177, 1577, 1531,
563      2110, 1524, 1496, 1455, 1427, 1308, 1895, 2162, 1448, 1422,
564      2179, 1319, 1298, 2163, 2154, 1285, 1115, 1083, 1117, 1726,
565      1576, 2196, 2198, 1062,  984, 2193, 2056,  930, 2153, 2166,
566         0,  902,  804,  803, 1618, 2210, 2238,    0, 2213,  583,
567      4394,  497, 2199,  486, 4394,  426,  460, 4394, 2116, 2203,
568      2254, 2231,  392,  317, 1804, 2255, 2281,  239, 2027,  829,
569      2006, 2117, 2293, 2295, 2298, 2299, 2303, 2317, 2321, 2322,
570
571      2323, 2365, 2366, 2369, 2370, 2371, 2233,  154, 4394, 4394,
572      3281, 3296, 3311, 3326, 3341, 3353, 3368, 3383, 3397, 3412,
573      3427, 3442, 3457, 3472, 3487, 3502, 3517, 3532, 3547, 3562,
574      3577, 3592, 3607, 3622, 3633, 3648, 3663, 3678, 3693, 3708,
575      3723, 3738, 3753, 3768, 3783, 3792, 3807, 3822, 3837, 3852,
576      3867, 3882, 3897, 3908, 3923, 3938, 3953, 3968, 3983, 3998,
577      4013, 4028, 4043, 4058, 4073, 4088, 4103, 4118, 4133, 4148,
578      4163, 4174, 4188, 4203, 4218, 4233, 4244, 4258, 4273, 4288,
579      4303, 4318, 4333, 4348, 4363, 4378
580     } ;
581
582 static yyconst short int yy_def[787] =
583     {   0,
584       710,  710,  710,  710,  710,  710,  711,  712,  710,  710,
585       711,  710,   12,  713,  711,  711,  711,  711,   15,  711,
586       711,   15,  711,  711,   15,  711,  711,  714,  711,   15,
587        29,   29,   29,   29,   29,   29,  711,  715,  710,  716,
588       716,  710,   42,  713,  716,  716,  716,  716,   45,  716,
589       716,   45,  716,  716,   45,  716,  716,  716,   45,   58,
590        58,   58,   58,   58,   58,  716,  715,  710,  710,  711,
591       717,  718,  717,  710,  710,  710,  710,  711,  710,  711,
592       710,  719,  719,  711,  719,  710,   12,  710,  711,  713,
593       710,  710,  711,  710,  711,  710,  710,   95,  711,  711,
594
595       711,  711,  711,  711,  711,  711,  711,  711,   95,  711,
596       711,  711,  720,  714,  720,  721,  710,  711,  711,  710,
597       711,  711,  711,  711,  119,  710,  711,  123,   95,  711,
598       711,  711,  715,  722,  715,  710,  723,  716,  710,  716,
599       716,  710,  716,   42,  710,  716,  724,  716,  148,  710,
600       149,  716,  716,  716,  716,  716,  716,  716,  716,  716,
601       716,  149,  716,  716,  716,  148,  148,  710,  148,  716,
602       716,  148,  167,  710,  148,  171,  149,  716,  716,  716,
603       715,  710,  717,  725,  725,  726,  727,  717,  717,  728,
604       729,  710,  710,  710,  710,  711,  711,  710,  711,  710,
605
606       710,  710,  710,  711,  710,  710,  710,  710,  710,  710,
607       711,  710,   95,  710,  711,  710,  710,  711,  711,  711,
608       711,  711,  711,  711,  711,  218,  711,  711,  711,  730,
609       731,  732,  733,  734,  123,  710,  711,  710,  710,  711,
610       711,  711,  735,  711,  710,  710,  711,  711,  123,  711,
611       710,  711,  711,  735,  123,  244,  711,  711,  711,  710,
612       715,  710,  736,  710,  737,  716,  716,  716,  716,  738,
613       736,  739,  716,  149,  710,  716,  149,  716,  716,  716,
614       716,  716,  716,  716,  277,  716,  716,  716,  740,  716,
615       716,  710,  716,  716,  716,  290,  716,  716,  290,  291,
616
617       710,  716,  716,  290,  296,  716,  716,  716,  715,  710,
618       710,  741,  741,  742,  710,  743,  744,  744,  745,  745,
619       710,  710,  710,  711,  710,  710,  710,  710,  710,  710,
620       710,  710,  710,  710,  710,  711,  746,  710,  711,  710,
621       710,  711,  710,  711,  711,  711,  711,  710,  711,  747,
622       711,  711,  711,  711,  711,  748,  749,  749,  750,  750,
623       751,  752,  753,  710,  710,  710,  711,  754,  710,  710,
624       710,  710,  711,  711,  710,  710,  711,  710,  367,  754,
625       367,  711,  711,  711,  715,  710,  710,  710,  710,  710,
626       755,  710,  716,  756,  756,  716,  716,  291,  710,  716,
627
628       716,  716,  716,  716,  757,  716,  716,  716,  716,  716,
629       758,  748,  758,  716,  716,  716,  716,  414,  414,  716,
630       716,  716,  715,  710,  759,  760,  761,  762,  763,  764,
631       765,  766,  710,  710,  710,  710,  710,  710,  710,  710,
632       711,  711,  711,  710,  711,  710,  711,  711,  767,  768,
633       768,  711,  711,  711,  769,  770,  710,  771,  710,  772,
634       710,  710,  711,  710,  710,  710,  710,  710,  711,  710,
635       772,  715,  710,  710,  710,  710,  710,  773,  774,  774,
636       414,  716,  716,  716,  716,  716,  775,  767,  775,  716,
637       716,  716,  776,  716,  716,  715,  710,  710,  760,  761,
638
639       761,  762,  762,  763,  763,  764,  764,  765,  765,  766,
640       766,  710,  710,  710,  710,  710,  710,  777,  710,  710,
641       711,  711,  778,  710,  710,  710,  710,  711,  711,  711,
642       711,  710,  710,  710,  710,  710,  710,  710,  715,  710,
643       710,  710,  773,  773,  774,  774,  716,  716,  716,  716,
644       779,  716,  716,  776,  715,  710,  710,  760,  710,  710,
645       710,  710,  710,  710,  710,  710,  710,  778,  778,  710,
646       710,  710,  710,  711,  711,  711,  711,  711,  715,  710,
647       710,  774,  774,  716,  716,  779,  716,  716,  716,  715,
648       710,  710,  710,  710,  710,  710,  710,  710,  710,  710,
649
650       780,  711,  710,  710,  774,  774,  781,  716,  715,  710,
651       710,  710,  710,  710,  782,  782,  780,  617,  711,  710,
652       710,  774,  774,  781,  782,  624,  716,  715,  710,  710,
653       782,  617,  617,  710,  710,  774,  774,  783,  624,  624,
654       715,  710,  710,  782,  782,  617,  617,  710,  710,  774,
655       774,  783,  783,  624,  624,  715,  710,  710,  782,  782,
656       617,  784,  710,  785,  774,  783,  783,  624,  715,  710,
657       710,  710,  782,  784,  710,  710,  785,  710,  774,  783,
658       783,  715,  710,  710,  774,  783,  715,  710,  774,  715,
659       786,  786,  786,  786,  786,  786,  786,  786,  786,  786,
660
661       786,  786,  786,  786,  786,  786,  786,  710,  710,    0,
662       710,  710,  710,  710,  710,  710,  710,  710,  710,  710,
663       710,  710,  710,  710,  710,  710,  710,  710,  710,  710,
664       710,  710,  710,  710,  710,  710,  710,  710,  710,  710,
665       710,  710,  710,  710,  710,  710,  710,  710,  710,  710,
666       710,  710,  710,  710,  710,  710,  710,  710,  710,  710,
667       710,  710,  710,  710,  710,  710,  710,  710,  710,  710,
668       710,  710,  710,  710,  710,  710,  710,  710,  710,  710,
669       710,  710,  710,  710,  710,  710
670     } ;
671
672 static yyconst short int yy_nxt[4467] =
673     {   0,
674         4,    4,    4,    5,    4,    4,    6,    4,    7,    8,
675         4,    9,   10,    7,    4,    4,   11,   12,   13,   13,
676        13,    4,   14,    4,    4,    7,   15,   16,   17,    7,
677         7,   18,    7,    7,   19,   20,   21,   22,   23,   24,
678        22,   25,   26,    7,   27,    7,   28,    4,    4,   29,
679        30,   31,   32,   33,   34,   35,   36,    7,   19,   20,
680        21,   22,   37,   24,   25,   26,    7,    7,   27,    7,
681        38,    4,    4,    4,    4,    5,    4,   39,    6,   39,
682         7,    8,    4,    9,   10,   40,    4,    4,   41,   42,
683        43,   43,   43,    4,   44,    4,    4,   40,   45,   46,
684
685        47,   40,   40,   48,   40,   40,   49,   50,   51,   52,
686        53,   54,   52,   55,   56,   40,   57,   40,   28,    4,
687         4,   58,   59,   60,   61,   62,   63,   64,   65,   40,
688        49,   50,   51,   52,   66,   54,   55,   56,   40,   40,
689        57,   40,   67,    4,   68,   69,   69,   69,   69,   69,
690        72,   75,   76,   77,  102,  106,  709,   73,   73,   73,
691        73,   73,  710,   78,  122,   79,   80,  123,   68,  123,
692       122,   81,   82,   82,   83,  123,  362,  123,  103,   70,
693       107,  130,   70,  710,   84,   85,   86,   87,   87,   87,
694        87,   87,   88,  710,  710,  139,   70,   89,   70,   70,
695
696        70,   70,   70,   70,   70,   89,   70,   70,   89,   89,
697        89,   89,   89,   70,   70,   70,   70,  131,   70,  363,
698        89,   89,   89,   89,   89,   89,   89,   89,   70,   89,
699        70,   70,   89,   89,   89,   89,   70,   70,   70,   70,
700        70,   82,   92,  122,  109,  123,  389,  123,   94,   70,
701        70,   70,   70,  710,  390,  122,  123,   97,  123,  710,
702        92,   82,   91,  147,   70,  139,  132,  186,  187,  101,
703        93,  138,   94,  710,   95,   95,   95,  139,   96,  139,
704       102,   97,  108,  108,  108,  108,  108,  108,  108,  108,
705        70,  190,  662,  122,  171,  111,  112,  123,  178,  123,
706
707       153,  112,   93,  139,  103,  158,   98,   98,   98,   98,
708        98,   98,   98,   98,  710,  710,   99,  113,  114,  114,
709       114,  113,  113,  113,  113,  113,  113,  113,  113,  113,
710       115,  113,  113,  134,  710,  710,  196,  197,  113,  113,
711       113,  113,   70,   82,   82,   82,  154,  135,  135,  135,
712       135,  135,  191,  170,   70,  139,   77,   92,  171,   70,
713        91,   70,   70,  113,  117,  113,  140,  139,   79,  141,
714       138,  138,  139,   70,  142,  139,  688,  170,  159,  171,
715       205,  171,  206,  155,  162,  231,  139,  113,  113,  118,
716       138,   70,  134,  119,  119,  119,  157,  120,  170,  171,
717
718        70,  171,  136,  160,  139,  179,  193,  156,  194,  265,
719       164,  165,  154,  139,  195,  170,  165,  163,  171,  117,
720       171,  121,  205,  155,  606,  122,  123,  122,  122,  122,
721       122,  122,  122,  124,  271,  272,  170,  125,  125,  125,
722       171,  126,  171,   82,   82,   82,  330,  156,   69,   69,
723        69,   69,   69,  556,  180,  201,  331,  202,   82,   82,
724        82,  136,  678,  203,  331,  127,  218,  218,  218,  128,
725       129,  128,  129,  129,  129,  129,  129,   82,   82,   83,
726       226,  226,  226,  684,   70,  244,  244,  244,  675,  143,
727        85,   86,  144,  144,  144,  144,  144,  145,  256,  256,
728
729       256,  138,  146,  138,  138,  138,  138,  138,  138,  138,
730       146,  138,  138,  146,  146,  146,  146,  146,  138,  138,
731       138,  138,  277,  277,  277,  146,  146,  146,  146,  146,
732       146,  146,  146,  138,  146,  138,  138,  146,  146,  146,
733       146,  138,  138,  138,  138,  138,   92,  184,  311,  265,
734        91,   70,  186,  312,  134,  205,  148,  206,   94,  683,
735       149,  149,  149,  198,  150,  181,  184,   97,  135,  135,
736       135,  135,  135,  188,  188,  188,  188,  188,  189,  211,
737       211,  211,  211,  211,  211,  211,  211,   70,  148,  218,
738       218,  218,  151,  151,  151,  151,  151,  151,  151,  151,
739
740       139,   70,  152,   70,  207,  583,  208,   70,   82,  268,
741        94,   70,  209,  433,  139,  710,  139,  210,   70,   97,
742       710,  186,  312,  136,  139,   70,  710,  434,  207,   70,
743       208,  314,  315,  266,  267,  671,  209,  227,  139,   70,
744       210,  284,  139,  376,  161,  161,  161,  161,  161,  161,
745       161,  161,   70,   91,  244,  244,  244,  166,  305,  305,
746       305,  167,  167,  167,  281,  168,  212,  212,  212,  212,
747       212,  212,  212,  212,  216,  216,  216,  216,  216,  216,
748       216,  216,  277,  277,  277,  336,  336,  336,  375,  169,
749       220,   70,  377,  170,  171,  170,  170,  170,  170,  170,
750
751       170,  172,  360,  376,  139,  173,  173,  173,  623,  174,
752       217,  217,  217,  217,  217,  217,  217,  217,  235,  235,
753       235,  235,  235,  235,  235,  235,  337,  337,  337,  468,
754       286,  248,  278,  175,   70,   70,  117,  176,  177,  176,
755       177,  177,  177,  177,  177,  213,  360,  139,  139,  339,
756       339,  339,  466,  214,  243,  243,  243,  243,  243,  243,
757       243,  243,  123,  123,  123,  123,  123,  123,  123,  123,
758       340,  340,  340,  341,  341,  341,  280,  213,  469,  279,
759       117,  215,  215,  215,  215,  215,  215,  215,  215,  113,
760       114,  114,  114,  113,  113,  113,  113,  113,  113,  113,
761
762       113,  113,  113,  113,  113,  678,  348,   70,   70,   70,
763       113,  113,  113,  113,  249,  249,  249,  249,  249,  249,
764       249,  249,  254,  254,  254,  254,  254,  254,  254,  254,
765       349,  691,  134,  271,  272,  113,  117,  113,  255,  255,
766       255,  255,  255,  255,  255,  255,  135,  135,  135,  135,
767       135,  261,  314,  315,  349,  367,  367,  367,  676,  113,
768       113,  113,  232,  232,  232,  233,   70,  113,  113,  113,
769       113,  113,  113,   70,  269,  113,  113,   82,   70,  139,
770        70,   70,  113,  113,   70,  113,  139,  138,  444,  710,
771        70,  139,   70,  139,  139,  139,   91,  139,  134,   70,
772
773       136,  136,  138,  139,  675,  139,  446,  113,  117,  309,
774       139,  268,  139,   70,  273,  273,  273,  273,  273,  273,
775       273,  273,  285,  285,  285,  524,  139,  336,  336,  336,
776       446,  113,  113,  236,  138,  282,   70,  237,   70,  281,
777       287,  288,  283,  289,   70,  238,  445,  239,  524,  139,
778       240,  139,  343,  296,  296,  296,  480,  139,  240,  350,
779       343,  240,  455,  325,  240,  240,  468,  136,   70,  237,
780        70,  350,  350,  241,  242,  241,  241,  241,  241,  241,
781       241,  139,  240,  139,  343,  240,  366,  672,  240,  245,
782       308,   70,  268,  367,  367,  367,  117,  244,  244,  244,
783
784       296,  296,  296,  246,  139,   91,  247,  386,  265,  379,
785       379,  379,  387,  388,  247,  537,  265,  247,   70,  427,
786       247,  247,  290,  290,  290,  290,  290,  290,  290,  290,
787       247,  139,   91,  248,  314,  315,  279,  668,  247,  184,
788       311,  247,   91,  605,  247,  250,  188,  188,  188,  188,
789       188,  189,  479,  251,  216,  216,  216,  216,  216,  216,
790       216,  216,  243,  243,  243,  243,  243,  243,  243,  243,
791       232,  232,  232,  233,  381,  381,  381,  250,  403,   70,
792       428,  252,  253,  252,  252,  252,  252,  252,  252,  213,
793       545,  668,  139,  256,  256,  256,  265,  214,  171,  171,
794
795       171,  171,  171,  171,  171,  171,  299,  299,  299,  299,
796       299,  299,  299,  299,  376,  366,  117,  339,  339,  339,
797       663,  213,  379,  379,  379,  215,  257,  215,  215,  258,
798       215,  215,  215,  274,   91,  362,  662,  410,  396,  396,
799       396,  275,  254,  254,  254,  254,  254,  254,  254,  254,
800       304,  304,  304,  304,  304,  304,  304,  304,  419,  419,
801       419,  329,  447,  377,  375,  274,   70,  467,  661,  276,
802       276,  276,  276,  276,  276,  276,  276,  236,  363,  139,
803        70,  291,  522,   70,   70,  393,  448,  394,  478,  292,
804       478,  239,  375,  139,  293,  395,  139,  139,   70,  339,
805
806       339,  339,  293,  407,   91,  293,  522,  370,  293,  293,
807       374,  139,   70,  291,  440,  440,  440,  294,  295,  294,
808       294,  294,  294,  294,  294,  139,  293,  401,  406,  293,
809       184,  311,  293,   70,  245,  248,   70,  316,  316,  316,
810       316,  316,  296,  296,  296,   70,  139,   70,  246,  139,
811        70,  297,  366,  376,  396,  396,  396,   91,  139,  297,
812       139,  408,  297,  139,  637,  297,  297,  338,  338,  338,
813       338,  338,  338,  338,  338,  297,  348,  364,  298,  402,
814        70,   70,  375,  297,  512,  364,  297,  556,  364,  297,
815       300,  364,  364,  139,  139,  557,  513,  245,  301,  429,
816
817       404,  364,  417,   70,   91,  368,  368,  368,   70,  364,
818        91,  246,  364,  526,  661,  364,  139,  397,  397,  397,
819       546,  139,  300,   70,  404,  298,  302,  303,  302,  302,
820       302,  302,  302,  302,  274,  455,  139,  527,  305,  305,
821       305,  370,  275,  241,  241,  241,  241,  241,  241,  241,
822       241,  365,  365,  365,  365,  365,  365,  365,  365,  636,
823       430,  441,  441,  441,  658,  371,  274,  650,  405,  532,
824       276,  306,  276,  276,  307,  276,  276,  276,  342,  372,
825       405,  405,  460,  460,  460,  657,  343,  252,  252,  252,
826       252,  252,  252,  252,  252,  378,  378,  378,  378,  378,
827
828       378,  378,  378,  471,  471,  471,  518,  518,  518,  465,
829       342,  456,  456,  456,  344,  344,  344,  344,  344,  344,
830       344,  344,  356,  356,  236,  356,  356,  356,  356,  356,
831       563,  356,  356,  356,  356,   70,  356,  356,  467,  369,
832       422,  364,  564,  356,  356,  356,  356,  369,  139,  364,
833       369,   70,  364,  369,  369,  364,  364,  457,  245,   70,
834       414,  414,  414,  369,  139,  364,  461,  268,  356,  356,
835       356,  369,  139,  364,  369,  369,  364,  369,   70,  364,
836       462,  465,  655,  369,  654,  265,  369,  358,  649,  369,
837       369,  139,  356,  356,  113,  232,  232,  232,  233,  369,
838
839       113,  113,  113,  113,  113,  113,  134,  369,  113,  113,
840       369,  245,  134,  369,  648,  113,  113,  423,  113,  380,
841       380,  380,  544,  392,  544,  246,  385,  385,  385,  385,
842       385,  338,  338,  338,  338,  338,  338,  338,  338,   70,
843       113,  117,  302,  302,  302,  302,  302,  302,  302,  302,
844       431,  431,  139,  461,  331,  370,  647,   91,   70,   70,
845       646,  366,  331,   70,  113,  113,  371,  462,  414,  414,
846       414,  139,  139,  371,   77,  136,  139,  576,   91,  665,
847       372,  136,   70,  373,  473,  265,   79,  372,  643,  577,
848       409,  373,   81,  265,  373,  139,   70,  373,  373,  294,
849
850       294,  294,  294,  294,  294,  294,  294,  373,  582,  139,
851       374,  432,  432,  482,   70,  373,   70,  465,  373,   91,
852        91,  373,  342,  418,  418,  418,  268,  139,  642,  139,
853       343,  365,  365,  365,  365,  365,  365,  365,  365,  378,
854       378,  378,  378,  378,  378,  378,  378,  468,  184,  498,
855       441,  441,  441,  499,  342,   70,  635,   70,  344,  382,
856       344,  344,  383,  344,  344,  344,  398,   70,  139,  366,
857       139,  622,  679,   70,  399,  474,  418,  418,  418,   92,
858       139,   70,   70,  375,   70,  475,  139,   86,  634,  630,
859       397,  397,  397,   88,  139,  139,  469,  139,  398,   70,
860
861       491,  536,  400,  400,  400,  400,  400,  400,  400,  400,
862       356,  356,  139,  356,  356,  356,  356,  356,  357,  356,
863       356,  356,  356,  483,  356,  356,  298,  492,   91,   70,
864       134,  412,  356,  356,  356,  376,  184,  311,  397,  397,
865       397,  496,  139,  426,  426,  426,  426,  426,  344,  344,
866       344,  344,  344,  344,  344,  344,  356,  356,  356,  439,
867       439,  439,  439,  439,  439,  439,  439,  400,  400,  400,
868       400,  400,  400,  400,  400,  413,  134,  613,  464,  664,
869       356,  356,   70,  245,  417,  444,  464,  519,  539,  464,
870        70,  444,  464,  464,   70,  139,   70,  246,  629,  136,
871
872       297,  520,  464,  139,   70,  371,   91,  139,  297,  139,
873       464,  297,  467,  464,  297,  297,  464,  139,  134,  441,
874       441,  441,  464,  556,  297,  621,  620,  298,  485,  555,
875       464,   70,  297,  464,   70,  297,  464,  464,  297,  371,
876       481,  481,  481,  484,  139,  540,  464,  139,   70,   70,
877       467,  585,  486,  372,  464,  374,  415,  464,  265,  134,
878       464,  139,  139,  689,  415,   70,   70,  415,  619,   70,
879       415,  415,  468,  472,  472,  472,  472,  472,  139,  139,
880       415,  490,  139,  416,  456,  456,  456,  136,  415,   70,
881       201,  415,  202,  416,  415,  398,  615,   91,  203,   70,
882
883       615,  553,  139,  399,  439,  439,  439,  439,  439,  439,
884       439,  439,  139,   70,  550,  467,   70,  548,  567,  268,
885       549,  495,  481,  481,  481,  523,  139,  398,  136,  139,
886       457,  400,  420,  400,  400,  421,  400,  400,  400,  449,
887       449,  548,  449,  449,  449,  449,  449,   92,  449,  449,
888       449,  449,   70,  449,  449,  631,  651,  524,  416,   70,
889       449,  449,  449,  449,   70,  139,  525,  533,  533,  533,
890       468,   70,  139,  481,  481,  481,  614,  139,   70,  631,
891       524,  533,  533,  533,  139,  449,  449,  449,  184,  311,
892        70,  139,  451,  584,  612,  558,  558,  558,  558,  558,
893
894       544,  392,  544,  139,  451,  451,  613,  596,  693,  449,
895       449,  356,  356,  534,  356,  356,  356,  356,  356,  495,
896       356,  356,  356,  356,  552,  356,  356,  534,  535,   91,
897       566,  158,  356,  356,  356,  356,  535,   70,  566,  535,
898        70,  566,  535,  535,  566,  566,  611,  560,   70,  610,
899       139,   70,  535,  139,  566,  134,  134,  356,  356,  356,
900       535,  139,  566,  535,  139,  566,  535,  590,  566,  579,
901       579,  579,  579,  579,  607,  392,  631,  260,  589,  632,
902       664,  356,  356,  356,  356,  461,  356,  356,  356,  356,
903       356,  639,  356,  356,  356,  356,  587,  356,  356,   70,
904
905       631,   70,  535,  633,  356,  356,  356,  356,  588,  670,
906       535,  519,  139,  535,  139,  640,  535,  535,   91,  693,
907       604,  671,  134,  603,  136,  136,  535,  602,  566,  356,
908       356,  356,  134,  609,  535,  644,  566,  535,  577,  566,
909       535,  631,  566,  566,   70,  588,  579,  579,  579,  579,
910       579,  134,  566,  356,  356,  461,  607,  139,   70,  645,
911       566,  638,  628,  566,  392,  631,  566,  184,  498,  462,
912       601,  139,  463,  685,  558,  558,  558,  558,  558,  134,
913       463,  134,  673,  463,  631,  631,  463,  463,  260,  631,
914       641,  136,  656,  653,  631,  134,  463,  631,  392,  659,
915
916       392,  540,  608,  627,  463,  392,  669,  463,  631,  631,
917       463,  371,  392,  631,  660,  134,  601,  653,  631,  673,
918       136,  631,  600,  666,  599,  372,  682,  653,  373,  653,
919       631,  598,  686,  134,  653,  693,  373,  597,  569,  373,
920       392,  653,  373,  373,  687,  569,  680,  667,  136,  567,
921       136,  653,  373,  653,  631,  374,  392,  392,  653,  596,
922       373,  564,  595,  373,  136,  653,  373,  449,  449,  653,
923       449,  449,  449,  449,  449,  450,  449,  449,  449,  449,
924       594,  449,  449,  134,  136,  653,  653,  593,  488,  449,
925       449,  449,  592,  653,  690,  693,  591,  693,  681,  392,
926
927       693,  693,  136,  392,  708,  693,  694,  686,  695,  653,
928       653,  696,  697,  449,  449,  449,  698,  392,  581,  693,
929       489,  580,  262,  693,  693,  693,  537,  536,  578,  575,
930       699,  574,  489,  489,  700,  701,  702,  449,  449,  356,
931       356,  573,  356,  356,  356,  356,  356,  357,  356,  356,
932       356,  356,  136,  356,  356,  572,  571,  570,  569,  105,
933       412,  356,  356,  356,  260,  567,  260,  693,  693,  260,
934       260,  693,  693,  693,  260,  565,  562,  561,  703,  704,
935       560,  559,  705,  706,  707,  356,  356,  356,  260,  511,
936       511,  509,  260,  260,  260,  509,  507,  507,  505,  505,
937
938       503,  503,  501,  501,  392,  551,  542,  541,  205,  356,
939       356,  356,  356,  198,  356,  356,  356,  356,  356,  357,
940       356,  356,  356,  356,  466,  356,  356,  538,  465,  536,
941       459,   92,  412,  356,  356,  356,  260,  260,  531,  530,
942       260,  260,  260,  529,  528,  444,   92,  517,  516,  515,
943       514,  434,  511,  509,  507,  505,  503,  356,  356,  356,
944       501,  187,  497,  493,  392,  477,  476,   74,  199,  470,
945       370,  366,  459,  454,  453,  452,  199,  443,  442,  438,
946       437,  356,  356,   70,  461,  436,  435,  205,  205,  199,
947       198,  198,  198,  320,  320,  318,  139,  318,  462,  187,
948
949       424,  494,  264,  392,  264,  384,  366,  355,  354,  494,
950       353,  352,  494,  351,  347,  494,  494,  346,  345,  335,
951       334,  333,  332,  329,  329,  494,  328,  327,  326,  325,
952       325,  324,  323,  494,  322,  321,  494,  320,  318,  494,
953       371,  311,  310,  265,  264,  262,  260,  199,  259,  117,
954       230,  229,  228,  199,  372,  225,  224,  415,  223,  222,
955       222,  221,  220,  219,   91,  415,  205,  204,  415,  198,
956       199,  415,  415,  198,  192,  184,  182,  137,  110,  105,
957       104,  415,  101,  100,  416,   91,   74,  710,  710,  415,
958       710,  710,  415,  710,  710,  415,  519,  710,  710,  710,
959
960       710,  710,  710,  710,  710,  710,  710,  710,  710,  710,
961       520,  710,  710,  521,  710,  710,  710,  710,  710,  710,
962       710,  521,  710,  710,  521,  710,  710,  521,  521,  710,
963       710,  710,  710,  710,  710,  710,  710,  521,  710,  710,
964       710,  710,  710,  710,  710,  521,  710,  710,  521,  710,
965       710,  521,  449,  449,  710,  449,  449,  449,  449,  449,
966       710,  449,  449,  449,  449,  710,  449,  449,  710,  710,
967       710,  710,  710,  449,  449,  449,  449,  710,  710,  710,
968       710,  710,  710,  710,  710,  710,  710,  710,  710,  710,
969       710,  710,  710,  710,  710,  710,  710,  710,  449,  449,
970
971       449,  710,  710,  710,  710,  710,  710,  710,  710,  710,
972       710,  710,  710,  710,  710,  710,  710,  710,  710,  710,
973       710,  710,  449,  449,  449,  449,  710,  449,  449,  449,
974       449,  449,  710,  449,  449,  449,  449,  710,  449,  449,
975       710,  710,  710,  710,  710,  449,  449,  449,  449,  710,
976       710,  710,  710,  710,  710,  710,  710,  710,  710,  710,
977       710,  710,  710,  710,  710,  710,  710,  710,  710,  710,
978       449,  449,  449,  710,  710,  710,  710,  451,  710,  710,
979       710,  710,  710,  710,  710,  710,  710,  710,  710,  451,
980       451,  710,  710,  710,  449,  449,  519,  710,  710,  710,
981
982       710,  710,  710,  710,  710,  710,  710,  710,  710,  710,
983       520,  710,  710,  547,  710,  710,  710,  710,  710,  710,
984       710,  547,  710,  710,  547,  710,  710,  547,  547,  710,
985       710,  710,  710,  710,  710,  710,  710,  547,  710,  710,
986       710,  710,  710,  710,  710,  547,  710,  710,  547,  710,
987       710,  547,  449,  449,  710,  449,  449,  449,  449,  449,
988       450,  449,  449,  449,  449,  710,  449,  449,  710,  710,
989       710,  710,  710,  488,  449,  449,  449,  710,  710,  710,
990       710,  710,  710,  710,  710,  710,  710,  710,  710,  710,
991       710,  710,  710,  710,  710,  710,  710,  710,  449,  449,
992
993       449,  710,  710,  710,  710,  710,  710,  710,  710,  710,
994       710,  710,  710,  710,  710,  710,  710,  710,  710,  710,
995       710,  710,  449,  449,  449,  449,  710,  449,  449,  449,
996       449,  449,  450,  449,  449,  449,  449,  710,  449,  449,
997       710,  710,  710,  710,  710,  488,  449,  449,  449,  710,
998       710,  710,  710,  710,  710,  710,  710,  710,  710,  710,
999       710,  710,  710,  710,  710,  710,  710,  710,  710,  710,
1000       449,  449,  449,  710,  710,  710,  710,  489,  710,  710,
1001       710,  710,  710,  710,  710,  710,  710,  710,  710,  489,
1002       489,  710,  710,  710,  449,  449,  616,  616,  710,  616,
1003
1004       616,  616,  616,  616,  710,  616,  616,  616,  616,  710,
1005       616,  616,  710,  710,  710,  710,  710,  616,  616,  616,
1006       616,  710,  710,  710,  710,  710,  710,  618,  710,  710,
1007       710,  710,  710,  710,  710,  710,  710,  710,  710,  710,
1008       710,  710,  616,  616,  616,  710,  710,  710,  710,  710,
1009       710,  618,  710,  710,  710,  710,  710,  710,  710,  710,
1010       710,  710,  710,  710,  710,  710,  616,  616,  616,  616,
1011       710,  616,  616,  616,  616,  616,  617,  616,  616,  616,
1012       616,  710,  616,  616,  710,  710,  710,  710,  710,  625,
1013       616,  616,  616,  710,  710,  710,  710,  710,  710,  626,
1014
1015       710,  710,  710,  710,  710,  710,  710,  710,  710,  710,
1016       710,  710,  710,  710,  616,  616,  616,  710,  710,  710,
1017       710,  710,  710,  626,  710,  710,  710,  710,  710,  710,
1018       710,  710,  710,  710,  710,  710,  710,  710,  616,  616,
1019       616,  616,  710,  616,  616,  616,  616,  616,  710,  616,
1020       616,  616,  616,  710,  616,  616,  710,  710,  710,  710,
1021       710,  616,  616,  616,  616,  710,  710,  710,  710,  710,
1022       710,  618,  710,  710,  710,  710,  710,  710,  710,  710,
1023       710,  710,  710,  710,  710,  710,  616,  616,  616,  710,
1024       710,  710,  710,  710,  710,  618,  710,  710,  710,  710,
1025
1026       710,  710,  710,  710,  710,  710,  710,  710,  710,  710,
1027       616,  616,  616,  616,  710,  616,  616,  616,  616,  616,
1028       617,  616,  616,  616,  616,  710,  616,  616,  710,  710,
1029       710,  710,  710,  625,  616,  616,  616,  710,  710,  710,
1030       710,  710,  710,  626,  710,  710,  710,  710,  710,  710,
1031       710,  710,  710,  710,  710,  710,  710,  710,  616,  616,
1032       616,  710,  710,  710,  710,  710,  710,  626,  710,  710,
1033       710,  710,  710,  710,  710,  710,  710,  710,  710,  710,
1034       710,  710,  616,  616,   70,  710,  710,   70,   70,  710,
1035       710,   70,   70,   70,   70,   70,   71,   71,   71,   71,
1036
1037        71,  710,   71,   71,   71,   71,   71,   71,   71,   71,
1038        71,   90,   90,   90,   90,   90,   90,   90,   90,   90,
1039        90,   90,   90,   90,   90,   90,  116,  116,  116,  116,
1040       116,  116,  116,  116,  116,  116,  116,  116,  116,  116,
1041       116,  133,  133,  133,  133,  133,  133,  133,  133,  133,
1042       133,  133,  133,  133,  133,  133,  138,  710,  710,  138,
1043       138,  138,  710,  138,  138,  138,  138,  138,  183,  183,
1044       183,  183,  183,  710,  183,  183,  183,  183,  183,  183,
1045       183,  183,  183,  185,  185,  185,  185,  185,  185,  185,
1046       185,  185,  185,  185,  185,  185,  185,  185,  200,  200,
1047
1048       710,  710,  710,  710,  710,  710,  710,  200,  200,  200,
1049       200,  200,  113,  113,  113,  113,  113,  113,  113,  113,
1050       113,  113,  113,  113,  113,  113,  113,  234,  234,  234,
1051       234,  234,  234,  234,  234,  234,  234,  234,  234,  234,
1052       234,  234,  134,  134,  134,  134,  134,  134,  134,  134,
1053       134,  134,  134,  134,  134,  134,  134,  263,  263,  263,
1054       263,  263,  263,  263,  263,  263,  263,  263,  263,  263,
1055       263,  263,  270,  270,  270,  270,  270,  270,  270,  270,
1056       270,  270,  270,  270,  270,  270,  270,  185,  185,  185,
1057       185,  185,  185,  185,  185,  185,  185,  185,  185,  185,
1058
1059       185,  185,  186,  186,  186,  186,  186,  186,  186,  186,
1060       186,  186,  186,  186,  186,  186,  186,  313,  313,  313,
1061       313,  313,  313,  313,  313,  313,  313,  313,  313,  313,
1062       313,  313,  317,  317,  710,  317,  317,  317,  317,  317,
1063       317,  317,  317,  317,  317,  317,  317,  319,  319,  710,
1064       319,  319,  319,  319,  319,  319,  319,  319,  319,  319,
1065       319,  319,  357,  357,  710,  357,  357,  357,  357,  357,
1066       357,  357,  357,  357,  357,  357,  357,  359,  359,  359,
1067       359,  359,  359,  359,  359,  359,  359,  359,  359,  359,
1068       359,  359,  113,  113,  113,  113,  113,  113,  113,  113,
1069
1070       113,  113,  113,  113,  113,  113,  113,  361,  361,  361,
1071       361,  361,  361,  361,  361,  361,  361,  361,  361,  361,
1072       361,  361,  234,  234,  234,  234,  234,  234,  234,  234,
1073       234,  234,  234,  234,  234,  234,  234,  369,  710,  710,
1074       369,  710,  369,  369,  710,  710,  369,  369,  263,  263,
1075       263,  263,  263,  263,  263,  263,  263,  263,  263,  263,
1076       263,  263,  263,  391,  391,  391,  391,  391,  391,  391,
1077       391,  391,  391,  391,  391,  391,  391,  391,  270,  270,
1078       270,  270,  270,  270,  270,  270,  270,  270,  270,  270,
1079       270,  270,  270,   90,   90,   90,   90,   90,   90,   90,
1080
1081        90,   90,   90,   90,   90,   90,   90,   90,  411,  411,
1082       710,  411,  411,  411,  411,  411,  411,  411,  411,  411,
1083       411,  411,  411,  313,  313,  313,  313,  313,  313,  313,
1084       313,  313,  313,  313,  313,  313,  313,  313,  425,  425,
1085       425,  425,  710,  425,  425,  425,  425,  425,  425,  425,
1086       425,  425,  425,  183,  183,  183,  183,  183,  183,  183,
1087       183,  183,  183,  183,  183,  183,  183,  183,  317,  317,
1088       710,  317,  317,  317,  317,  317,  317,  317,  317,  317,
1089       317,  317,  317,  319,  319,  710,  319,  319,  319,  319,
1090       319,  319,  319,  319,  319,  319,  319,  319,  439,  710,
1091
1092       439,  710,  710,  710,  439,  439,  439,  450,  450,  710,
1093       450,  450,  450,  450,  450,  450,  450,  450,  450,  450,
1094       450,  450,  356,  356,  710,  356,  356,  356,  356,  356,
1095       356,  356,  356,  356,  356,  356,  356,  357,  357,  710,
1096       357,  357,  357,  357,  357,  357,  357,  357,  357,  357,
1097       357,  357,  359,  359,  359,  359,  359,  359,  359,  359,
1098       359,  359,  359,  359,  359,  359,  359,  361,  361,  361,
1099       361,  361,  361,  361,  361,  361,  361,  361,  361,  361,
1100       361,  361,  113,  113,  113,  113,  113,  113,  113,  113,
1101       113,  113,  113,  113,  113,  113,  113,  458,  458,  458,
1102
1103       458,  458,  458,  458,  458,  458,  458,  458,  458,  458,
1104       458,  458,  464,  710,  710,  710,  710,  464,  464,  710,
1105       710,  464,  464,  391,  391,  391,  391,  391,  391,  391,
1106       391,  391,  391,  391,  391,  391,  391,  391,   90,   90,
1107        90,   90,   90,   90,   90,   90,   90,   90,   90,   90,
1108        90,   90,   90,  487,  487,  710,  487,  487,  487,  487,
1109       487,  487,  487,  487,  487,  487,  487,  487,  411,  411,
1110       710,  411,  411,  411,  411,  411,  411,  411,  411,  411,
1111       411,  411,  411,  425,  425,  425,  425,  710,  425,  425,
1112       425,  425,  425,  425,  425,  425,  425,  425,  183,  183,
1113
1114       183,  183,  183,  183,  183,  183,  183,  183,  183,  183,
1115       183,  183,  183,  500,  500,  710,  500,  500,  500,  500,
1116       500,  500,  500,  500,  500,  500,  500,  500,  502,  502,
1117       710,  502,  502,  502,  502,  502,  502,  502,  502,  502,
1118       502,  502,  502,  504,  504,  710,  504,  504,  504,  504,
1119       504,  504,  504,  504,  504,  504,  504,  504,  506,  506,
1120       710,  506,  506,  506,  506,  506,  506,  506,  506,  506,
1121       506,  506,  506,  508,  508,  710,  508,  508,  508,  508,
1122       508,  508,  508,  508,  508,  508,  508,  508,  510,  510,
1123       710,  510,  510,  510,  510,  510,  510,  510,  510,  510,
1124
1125       510,  510,  510,  449,  449,  710,  449,  449,  449,  449,
1126       449,  449,  449,  449,  449,  449,  449,  449,  450,  450,
1127       710,  450,  450,  450,  450,  450,  450,  450,  450,  450,
1128       450,  450,  450,  359,  359,  359,  359,  359,  359,  359,
1129       359,  359,  359,  359,  359,  359,  359,  359,  113,  113,
1130       113,  113,  113,  113,  113,  113,  113,  113,  113,  113,
1131       113,  113,  113,  458,  458,  458,  458,  458,  458,  458,
1132       458,  458,  458,  458,  458,  458,  458,  458,  535,  710,
1133       710,  710,  710,  535,  535,  710,  710,  535,  543,  543,
1134       543,  543,  543,  543,  543,  543,  543,  543,  543,  543,
1135
1136       543,  543,  543,   90,   90,   90,   90,   90,   90,   90,
1137        90,   90,   90,   90,   90,   90,   90,   90,  487,  487,
1138       710,  487,  487,  487,  487,  487,  487,  487,  487,  487,
1139       487,  487,  487,  554,  554,  554,  554,  554,  554,  554,
1140       554,  554,  554,  554,  554,  554,  554,  554,  566,  710,
1141       710,  710,  710,  566,  566,  710,  710,  566,  568,  568,
1142       710,  568,  568,  568,  568,  568,  568,  568,  568,  568,
1143       568,  568,  568,  586,  586,  586,  586,  586,  586,  586,
1144       586,  586,  586,  586,  586,  586,  586,  586,  617,  617,
1145       710,  617,  617,  617,  617,  617,  617,  617,  617,  617,
1146
1147       617,  617,  617,  624,  624,  710,  624,  624,  624,  624,
1148       624,  624,  624,  624,  624,  624,  624,  624,  616,  616,
1149       710,  616,  616,  616,  616,  616,  616,  616,  616,  616,
1150       616,  616,  616,  652,  652,  652,  652,  652,  652,  652,
1151       652,  652,  652,  652,  652,  652,  652,  652,  674,  674,
1152       674,  674,  674,  674,  674,  674,  674,  674,  674,  674,
1153       674,  674,  674,  677,  677,  677,  677,  677,  677,  677,
1154       677,  677,  677,  677,  677,  677,  677,  677,  692,  692,
1155       692,  692,  692,  692,  692,  692,  692,  692,  692,  692,
1156       692,  692,  692,    3,  710,  710,  710,  710,  710,  710,
1157
1158       710,  710,  710,  710,  710,  710,  710,  710,  710,  710,
1159       710,  710,  710,  710,  710,  710,  710,  710,  710,  710,
1160       710,  710,  710,  710,  710,  710,  710,  710,  710,  710,
1161       710,  710,  710,  710,  710,  710,  710,  710,  710,  710,
1162       710,  710,  710,  710,  710,  710,  710,  710,  710,  710,
1163       710,  710,  710,  710,  710,  710,  710,  710,  710,  710,
1164       710,  710,  710,  710,  710,  710
1165     } ;
1166
1167 static yyconst short int yy_chk[4467] =
1168     {   0,
1169         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
1170         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
1171         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
1172         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
1173         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
1174         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
1175         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
1176         1,    1,    2,    2,    2,    2,    2,    2,    2,    2,
1177         2,    2,    2,    2,    2,    2,    2,    2,    2,    2,
1178         2,    2,    2,    2,    2,    2,    2,    2,    2,    2,
1179
1180         2,    2,    2,    2,    2,    2,    2,    2,    2,    2,
1181         2,    2,    2,    2,    2,    2,    2,    2,    2,    2,
1182         2,    2,    2,    2,    2,    2,    2,    2,    2,    2,
1183         2,    2,    2,    2,    2,    2,    2,    2,    2,    2,
1184         2,    2,    2,    2,    5,    6,    6,    6,    6,    6,
1185         8,   10,   10,   11,   18,   23,  708,    8,    8,    8,
1186         8,    8,   19,   11,   34,   11,   11,   34,    5,   34,
1187        36,   11,   12,   12,   12,   36,  233,   31,   18,   12,
1188        23,   31,   40,   19,   12,   12,   12,   12,   12,   12,
1189        12,   12,   12,   22,   25,   40,   12,   12,   12,   12,
1190
1191        12,   12,   12,   12,   12,   12,   12,   12,   12,   12,
1192        12,   12,   12,   12,   12,   12,   12,   37,   19,  233,
1193        12,   12,   12,   12,   12,   12,   12,   12,   12,   12,
1194        12,   12,   12,   12,   12,   12,   12,   12,   12,   12,
1195        12,   13,   27,   33,   25,   33,  264,   33,   24,   22,
1196        25,   13,   46,   13,  264,   32,   32,   24,   32,   13,
1197        15,   43,   44,   44,   51,   46,   37,   72,   72,   32,
1198        15,   43,   15,   43,   15,   15,   15,   51,   15,   43,
1199        35,   15,   24,   24,   24,   24,   24,   24,   24,   24,
1200        47,   74,  688,   35,   60,   27,   27,   35,   60,   35,
1201
1202        46,   27,   15,   47,   35,   51,   15,   15,   15,   15,
1203        15,   15,   15,   15,   49,   52,   15,   28,   28,   28,
1204        28,   28,   28,   28,   28,   28,   28,   28,   28,   28,
1205        28,   28,   28,   38,   55,   49,   78,   78,   28,   28,
1206        28,   28,   50,   82,   82,   82,   47,   38,   38,   38,
1207        38,   38,   74,   65,   48,   50,   41,   57,   65,   56,
1208       583,   41,   57,   28,   28,   28,   41,   48,   41,   41,
1209        49,   52,   56,   53,   41,   57,  684,   62,   53,   62,
1210        86,   62,   86,   48,   55,  115,   53,   28,   28,   29,
1211        55,  138,  133,   29,   29,   29,   50,   29,   61,   61,
1212
1213        66,   61,   38,   53,  138,   66,   77,   48,   77,  145,
1214        57,   57,   61,   66,   77,   63,   57,   56,   63,  115,
1215        63,   29,  145,   64,  583,   29,   29,   29,   29,   29,
1216        29,   29,   29,   30,  147,  147,   64,   30,   30,   30,
1217        64,   30,   64,   83,   83,   83,  206,   64,   69,   69,
1218        69,   69,   69,  683,   66,   83,  206,   83,   85,   85,
1219        85,  133,  677,   83,  206,   30,   98,   98,   98,   30,
1220        30,   30,   30,   30,   30,   30,   30,   42,   42,   42,
1221       108,  108,  108,  676,   42,  122,  122,  122,  674,   42,
1222        42,   42,   42,   42,   42,   42,   42,   42,  129,  129,
1223
1224       129,   42,   42,   42,   42,   42,   42,   42,   42,   42,
1225        42,   42,   42,   42,   42,   42,   42,   42,   42,   42,
1226        42,   42,  151,  151,  151,   42,   42,   42,   42,   42,
1227        42,   42,   42,   42,   42,   42,   42,   42,   42,   42,
1228        42,   42,   42,   42,   42,   42,   45,  183,  183,  142,
1229       546,   45,  184,  184,   67,  327,   45,  327,   45,  672,
1230        45,   45,   45,  142,   45,   67,   73,   45,   67,   67,
1231        67,   67,   67,   73,   73,   73,   73,   73,   73,   93,
1232        93,   93,   93,   93,   93,   93,   93,  146,   45,  109,
1233       109,  109,   45,   45,   45,   45,   45,   45,   45,   45,
1234
1235       146,  141,   45,   54,   92,  546,   92,  213,   87,  141,
1236        54,  159,   92,  331,  141,  213,   54,   92,   87,   54,
1237        87,  185,  185,   67,  159,  140,   87,  331,   92,  155,
1238        92,  187,  187,  140,  140,  670,   92,  109,  140,  213,
1239        92,  159,  155,  248,   54,   54,   54,   54,   54,   54,
1240        54,   54,   58,  606,  130,  130,  130,   58,  177,  177,
1241       177,   58,   58,   58,  155,   58,   94,   94,   94,   94,
1242        94,   94,   94,   94,   96,   96,   96,   96,   96,   96,
1243        96,   96,  162,  162,  162,  211,  211,  211,  247,   58,
1244       130,  152,  248,   58,   58,   58,   58,   58,   58,   58,
1245
1246        58,   59,  231,  370,  152,   59,   59,   59,  606,   59,
1247        97,   97,   97,   97,   97,   97,   97,   97,  118,  118,
1248       118,  118,  118,  118,  118,  118,  212,  212,  212,  374,
1249       162,  247,  152,   59,  153,  154,  231,   59,   59,   59,
1250        59,   59,   59,   59,   59,   95,  359,  153,  154,  215,
1251       215,  215,  370,   95,  120,  120,  120,  120,  120,  120,
1252       120,  120,  121,  121,  121,  121,  121,  121,  121,  121,
1253       216,  216,  216,  217,  217,  217,  154,   95,  374,  153,
1254       359,   95,   95,   95,   95,   95,   95,   95,   95,  114,
1255       114,  114,  114,  114,  114,  114,  114,  114,  114,  114,
1256
1257       114,  114,  114,  114,  114,  664,  222,  235,  235,  235,
1258       114,  114,  114,  114,  124,  124,  124,  124,  124,  124,
1259       124,  124,  126,  126,  126,  126,  126,  126,  126,  126,
1260       222,  690,  135,  270,  270,  114,  114,  114,  127,  127,
1261       127,  127,  127,  127,  127,  127,  135,  135,  135,  135,
1262       135,  135,  312,  312,  222,  241,  241,  241,  663,  114,
1263       114,  116,  116,  116,  116,  116,  143,  116,  116,  116,
1264       116,  116,  116,  148,  143,  116,  116,  144,  157,  143,
1265       156,  160,  116,  116,  158,  116,  148,  144,  347,  144,
1266       165,  157,  164,  156,  160,  144,  395,  158,  181,  163,
1267
1268       690,  135,  274,  165,  662,  164,  348,  116,  116,  181,
1269       274,  160,  163,  161,  148,  148,  148,  148,  148,  148,
1270       148,  148,  161,  161,  161,  598,  161,  249,  249,  249,
1271       348,  116,  116,  119,  274,  157,  179,  119,  180,  156,
1272       163,  164,  158,  165,  170,  119,  347,  119,  598,  179,
1273       119,  180,  337,  170,  170,  170,  395,  170,  119,  223,
1274       337,  119,  360,  267,  119,  119,  465,  181,  267,  119,
1275       268,  223,  223,  119,  119,  119,  119,  119,  119,  119,
1276       119,  267,  119,  268,  337,  119,  242,  658,  119,  123,
1277       179,  178,  180,  242,  242,  242,  360,  123,  123,  123,
1278
1279       178,  178,  178,  123,  178,  394,  123,  262,  150,  252,
1280       252,  252,  262,  262,  123,  465,  168,  123,  280,  325,
1281       123,  123,  166,  166,  166,  166,  166,  166,  166,  166,
1282       123,  280,  479,  123,  313,  313,  178,  655,  123,  188,
1283       188,  123,  582,  582,  123,  125,  188,  188,  188,  188,
1284       188,  188,  394,  125,  150,  150,  150,  150,  150,  150,
1285       150,  150,  168,  168,  168,  168,  168,  168,  168,  168,
1286       232,  232,  232,  232,  255,  255,  255,  125,  280,  288,
1287       325,  125,  125,  125,  125,  125,  125,  125,  125,  128,
1288       479,  654,  288,  128,  128,  128,  174,  128,  169,  169,
1289
1290       169,  169,  169,  169,  169,  169,  172,  172,  172,  172,
1291       172,  172,  172,  172,  258,  253,  232,  258,  258,  258,
1292       649,  128,  253,  253,  253,  128,  128,  128,  128,  128,
1293       128,  128,  128,  149,  272,  361,  648,  288,  299,  299,
1294       299,  149,  174,  174,  174,  174,  174,  174,  174,  174,
1295       175,  175,  175,  175,  175,  175,  175,  175,  304,  304,
1296       304,  269,  349,  258,  369,  149,  269,  373,  647,  149,
1297       149,  149,  149,  149,  149,  149,  149,  167,  361,  269,
1298       266,  167,  443,  283,  278,  266,  349,  272,  392,  167,
1299       392,  167,  257,  266,  167,  272,  283,  278,  284,  257,
1300
1301       257,  257,  167,  284,  623,  167,  443,  369,  167,  167,
1302       373,  284,  286,  167,  338,  338,  338,  167,  167,  167,
1303       167,  167,  167,  167,  167,  286,  167,  278,  283,  167,
1304       189,  189,  167,  171,  171,  257,  279,  189,  189,  189,
1305       189,  189,  171,  171,  171,  273,  171,  298,  171,  279,
1306       293,  171,  293,  298,  273,  273,  273,  480,  273,  171,
1307       298,  286,  171,  293,  623,  171,  171,  214,  214,  214,
1308       214,  214,  214,  214,  214,  171,  281,  236,  171,  279,
1309       297,  281,  297,  171,  434,  236,  171,  497,  236,  171,
1310       173,  236,  236,  297,  281,  497,  434,  243,  173,  329,
1311
1312       281,  236,  298,  396,  622,  243,  243,  243,  276,  236,
1313       636,  243,  236,  446,  646,  236,  396,  276,  276,  276,
1314       480,  276,  173,  282,  281,  297,  173,  173,  173,  173,
1315       173,  173,  173,  173,  176,  455,  282,  446,  176,  176,
1316       176,  243,  176,  237,  237,  237,  237,  237,  237,  237,
1317       237,  238,  238,  238,  238,  238,  238,  238,  238,  622,
1318       329,  344,  344,  344,  643,  368,  176,  636,  282,  455,
1319       176,  176,  176,  176,  176,  176,  176,  176,  218,  368,
1320       282,  282,  365,  365,  365,  642,  218,  250,  250,  250,
1321       250,  250,  250,  250,  250,  251,  251,  251,  251,  251,
1322
1323       251,  251,  251,  378,  378,  378,  439,  439,  439,  368,
1324       218,  362,  362,  362,  218,  218,  218,  218,  218,  218,
1325       218,  218,  230,  230,  239,  230,  230,  230,  230,  230,
1326       516,  230,  230,  230,  230,  308,  230,  230,  464,  245,
1327       308,  239,  516,  230,  230,  230,  230,  245,  308,  239,
1328       245,  294,  239,  245,  245,  239,  239,  362,  246,  393,
1329       294,  294,  294,  245,  294,  239,  460,  393,  230,  230,
1330       230,  245,  393,  239,  245,  246,  239,  245,  397,  239,
1331       460,  464,  640,  246,  639,  275,  246,  230,  635,  246,
1332       246,  397,  230,  230,  234,  234,  234,  234,  234,  246,
1333
1334       234,  234,  234,  234,  234,  234,  309,  246,  234,  234,
1335       246,  254,  261,  246,  634,  234,  234,  309,  234,  254,
1336       254,  254,  478,  478,  478,  254,  261,  261,  261,  261,
1337       261,  275,  275,  275,  275,  275,  275,  275,  275,  287,
1338       234,  234,  300,  300,  300,  300,  300,  300,  300,  300,
1339       330,  593,  287,  471,  330,  254,  633,  545,  291,  295,
1340       632,  295,  330,  401,  234,  234,  244,  471,  295,  295,
1341       295,  291,  295,  380,  387,  309,  401,  530,  651,  651,
1342       244,  261,  406,  244,  387,  292,  387,  380,  630,  530,
1343       287,  244,  387,  301,  244,  406,  407,  244,  244,  291,
1344
1345       291,  291,  291,  291,  291,  291,  291,  244,  545,  407,
1346       244,  330,  593,  401,  302,  244,  417,  380,  244,  605,
1347       665,  244,  256,  302,  302,  302,  407,  302,  629,  417,
1348       256,  292,  292,  292,  292,  292,  292,  292,  292,  301,
1349       301,  301,  301,  301,  301,  301,  301,  383,  426,  426,
1350       383,  383,  383,  426,  256,  409,  621,  495,  256,  256,
1351       256,  256,  256,  256,  256,  256,  277,  303,  409,  303,
1352       495,  605,  665,  402,  277,  388,  303,  303,  303,  482,
1353       303,  306,  410,  306,  482,  388,  402,  388,  620,  614,
1354       306,  306,  306,  388,  306,  410,  383,  482,  277,  494,
1355
1356       409,  494,  277,  277,  277,  277,  277,  277,  277,  277,
1357       289,  289,  494,  289,  289,  289,  289,  289,  289,  289,
1358       289,  289,  289,  402,  289,  289,  306,  410,  650,  307,
1359       423,  289,  289,  289,  289,  307,  316,  316,  307,  307,
1360       307,  423,  307,  316,  316,  316,  316,  316,  342,  342,
1361       342,  342,  342,  342,  342,  342,  289,  289,  289,  343,
1362       343,  343,  343,  343,  343,  343,  343,  398,  398,  398,
1363       398,  398,  398,  398,  398,  289,  472,  612,  371,  650,
1364       289,  289,  290,  290,  307,  403,  371,  518,  472,  371,
1365       403,  484,  371,  371,  550,  290,  484,  290,  611,  423,
1366
1367       290,  518,  371,  403,  404,  372,  685,  550,  290,  484,
1368       371,  290,  382,  371,  290,  290,  371,  404,  496,  382,
1369       382,  382,  372,  610,  290,  604,  603,  290,  404,  496,
1370       372,  400,  290,  372,  408,  290,  372,  372,  290,  296,
1371       400,  400,  400,  403,  400,  472,  372,  408,  415,  491,
1372       415,  550,  404,  296,  372,  382,  296,  372,  399,  385,
1373       372,  415,  491,  685,  296,  422,  416,  296,  602,  486,
1374       296,  296,  416,  385,  385,  385,  385,  385,  422,  416,
1375       296,  408,  486,  296,  456,  456,  456,  496,  296,  483,
1376       474,  296,  474,  415,  296,  305,  600,  637,  474,  485,
1377
1378       599,  491,  483,  305,  399,  399,  399,  399,  399,  399,
1379       399,  399,  485,  420,  486,  420,  547,  483,  547,  422,
1380       485,  416,  420,  420,  420,  444,  420,  305,  385,  547,
1381       456,  305,  305,  305,  305,  305,  305,  305,  305,  350,
1382       350,  483,  350,  350,  350,  350,  350,  492,  350,  350,
1383       350,  350,  492,  350,  350,  615,  637,  444,  420,  549,
1384       350,  350,  350,  350,  421,  492,  444,  459,  459,  459,
1385       421,  490,  549,  421,  421,  421,  597,  421,  588,  615,
1386       444,  533,  533,  533,  490,  350,  350,  350,  499,  499,
1387       548,  588,  350,  549,  596,  499,  499,  499,  499,  499,
1388
1389       544,  544,  544,  548,  350,  350,  596,  595,  691,  350,
1390       350,  357,  357,  459,  357,  357,  357,  357,  357,  421,
1391       357,  357,  357,  357,  490,  357,  357,  533,  461,  689,
1392       519,  548,  357,  357,  357,  357,  461,  553,  519,  461,
1393       584,  519,  461,  461,  519,  519,  594,  592,  627,  591,
1394       553,  552,  461,  584,  519,  539,  555,  357,  357,  357,
1395       461,  627,  519,  461,  552,  519,  461,  555,  519,  539,
1396       539,  539,  539,  539,  584,  586,  616,  691,  553,  618,
1397       689,  357,  357,  358,  358,  462,  358,  358,  358,  358,
1398       358,  626,  358,  358,  358,  358,  552,  358,  358,  585,
1399
1400       616,  587,  462,  618,  358,  358,  358,  358,  552,  657,
1401       462,  520,  585,  462,  587,  626,  462,  462,  679,  692,
1402       581,  657,  590,  580,  539,  555,  462,  578,  520,  358,
1403       358,  358,  579,  590,  462,  631,  520,  462,  576,  520,
1404       462,  631,  520,  520,  589,  587,  579,  579,  579,  579,
1405       579,  609,  520,  358,  358,  367,  585,  589,  608,  631,
1406       520,  625,  609,  520,  638,  631,  520,  558,  558,  367,
1407       575,  608,  367,  679,  558,  558,  558,  558,  558,  628,
1408       367,  641,  659,  367,  659,  645,  367,  367,  692,  625,
1409       628,  590,  641,  638,  644,  656,  367,  660,  652,  644,
1410
1411       653,  579,  589,  608,  367,  680,  656,  367,  659,  645,
1412       367,  381,  666,  625,  645,  669,  574,  638,  644,  660,
1413       609,  660,  573,  653,  572,  381,  669,  652,  381,  653,
1414       673,  571,  680,  682,  680,  707,  381,  570,  569,  381,
1415       667,  666,  381,  381,  682,  568,  666,  653,  628,  566,
1416       641,  652,  381,  653,  673,  381,  681,  686,  680,  565,
1417       381,  563,  562,  381,  656,  666,  381,  405,  405,  667,
1418       405,  405,  405,  405,  405,  405,  405,  405,  405,  405,
1419       561,  405,  405,  687,  669,  681,  686,  560,  405,  405,
1420       405,  405,  559,  667,  687,  693,  557,  694,  667,  554,
1421
1422       695,  696,  682,  551,  707,  697,  693,  681,  694,  681,
1423       686,  695,  696,  405,  405,  405,  697,  543,  542,  698,
1424       405,  541,  540,  699,  700,  701,  538,  535,  531,  529,
1425       698,  528,  405,  405,  699,  700,  701,  405,  405,  411,
1426       411,  527,  411,  411,  411,  411,  411,  411,  411,  411,
1427       411,  411,  687,  411,  411,  526,  525,  524,  523,  522,
1428       411,  411,  411,  411,  693,  521,  694,  702,  703,  695,
1429       696,  704,  705,  706,  697,  517,  515,  514,  702,  703,
1430       513,  512,  704,  705,  706,  411,  411,  411,  698,  511,
1431       510,  509,  699,  700,  701,  508,  507,  506,  505,  504,
1432
1433       503,  502,  501,  500,  493,  488,  477,  476,  475,  411,
1434       411,  413,  413,  473,  413,  413,  413,  413,  413,  413,
1435       413,  413,  413,  413,  470,  413,  413,  468,  467,  463,
1436       458,  454,  413,  413,  413,  413,  702,  703,  453,  452,
1437       704,  705,  706,  448,  447,  445,  442,  438,  437,  436,
1438       435,  433,  432,  431,  430,  429,  428,  413,  413,  413,
1439       427,  425,  424,  412,  391,  390,  389,  386,  384,  376,
1440       375,  364,  363,  355,  354,  353,  352,  346,  345,  335,
1441       334,  413,  413,  414,  414,  333,  332,  328,  326,  324,
1442       323,  322,  321,  320,  319,  318,  414,  317,  414,  314,
1443
1444       310,  414,  271,  265,  263,  259,  240,  229,  228,  414,
1445       227,  225,  414,  224,  221,  414,  414,  220,  219,  210,
1446       209,  208,  207,  205,  204,  414,  203,  202,  201,  198,
1447       197,  196,  195,  414,  194,  193,  414,  191,  190,  414,
1448       419,  186,  182,  139,  137,  136,  134,  132,  131,  113,
1449       112,  111,  110,  107,  419,  106,  105,  419,  104,  103,
1450       102,  101,  100,   99,   90,  419,   88,   84,  419,   81,
1451        80,  419,  419,   79,   76,   71,   68,   39,   26,   21,
1452        20,  419,   17,   16,  419,   14,    9,    3,    0,  419,
1453         0,    0,  419,    0,    0,  419,  441,    0,    0,    0,
1454
1455         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
1456       441,    0,    0,  441,    0,    0,    0,    0,    0,    0,
1457         0,  441,    0,    0,  441,    0,    0,  441,  441,    0,
1458         0,    0,    0,    0,    0,    0,    0,  441,    0,    0,
1459         0,    0,    0,    0,    0,  441,    0,    0,  441,    0,
1460         0,  441,  450,  450,    0,  450,  450,  450,  450,  450,
1461         0,  450,  450,  450,  450,    0,  450,  450,    0,    0,
1462         0,    0,    0,  450,  450,  450,  450,    0,    0,    0,
1463         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
1464         0,    0,    0,    0,    0,    0,    0,    0,  450,  450,
1465
1466       450,    0,    0,    0,    0,    0,    0,    0,    0,    0,
1467         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
1468         0,    0,  450,  450,  451,  451,    0,  451,  451,  451,
1469       451,  451,    0,  451,  451,  451,  451,    0,  451,  451,
1470         0,    0,    0,    0,    0,  451,  451,  451,  451,    0,
1471         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
1472         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
1473       451,  451,  451,    0,    0,    0,    0,  451,    0,    0,
1474         0,    0,    0,    0,    0,    0,    0,    0,    0,  451,
1475       451,    0,    0,    0,  451,  451,  481,    0,    0,    0,
1476
1477         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
1478       481,    0,    0,  481,    0,    0,    0,    0,    0,    0,
1479         0,  481,    0,    0,  481,    0,    0,  481,  481,    0,
1480         0,    0,    0,    0,    0,    0,    0,  481,    0,    0,
1481         0,    0,    0,    0,    0,  481,    0,    0,  481,    0,
1482         0,  481,  487,  487,    0,  487,  487,  487,  487,  487,
1483       487,  487,  487,  487,  487,    0,  487,  487,    0,    0,
1484         0,    0,    0,  487,  487,  487,  487,    0,    0,    0,
1485         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
1486         0,    0,    0,    0,    0,    0,    0,    0,  487,  487,
1487
1488       487,    0,    0,    0,    0,    0,    0,    0,    0,    0,
1489         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
1490         0,    0,  487,  487,  489,  489,    0,  489,  489,  489,
1491       489,  489,  489,  489,  489,  489,  489,    0,  489,  489,
1492         0,    0,    0,    0,    0,  489,  489,  489,  489,    0,
1493         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
1494         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
1495       489,  489,  489,    0,    0,    0,    0,  489,    0,    0,
1496         0,    0,    0,    0,    0,    0,    0,    0,    0,  489,
1497       489,    0,    0,    0,  489,  489,  601,  601,    0,  601,
1498
1499       601,  601,  601,  601,    0,  601,  601,  601,  601,    0,
1500       601,  601,    0,    0,    0,    0,    0,  601,  601,  601,
1501       601,    0,    0,    0,    0,    0,    0,  601,    0,    0,
1502         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
1503         0,    0,  601,  601,  601,    0,    0,    0,    0,    0,
1504         0,  601,    0,    0,    0,    0,    0,    0,    0,    0,
1505         0,    0,    0,    0,    0,    0,  601,  601,  607,  607,
1506         0,  607,  607,  607,  607,  607,  607,  607,  607,  607,
1507       607,    0,  607,  607,    0,    0,    0,    0,    0,  607,
1508       607,  607,  607,    0,    0,    0,    0,    0,    0,  607,
1509
1510         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
1511         0,    0,    0,    0,  607,  607,  607,    0,    0,    0,
1512         0,    0,    0,  607,    0,    0,    0,    0,    0,    0,
1513         0,    0,    0,    0,    0,    0,    0,    0,  607,  607,
1514       617,  617,    0,  617,  617,  617,  617,  617,    0,  617,
1515       617,  617,  617,    0,  617,  617,    0,    0,    0,    0,
1516         0,  617,  617,  617,  617,    0,    0,    0,    0,    0,
1517         0,  617,    0,    0,    0,    0,    0,    0,    0,    0,
1518         0,    0,    0,    0,    0,    0,  617,  617,  617,    0,
1519         0,    0,    0,    0,    0,  617,    0,    0,    0,    0,
1520
1521         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
1522       617,  617,  624,  624,    0,  624,  624,  624,  624,  624,
1523       624,  624,  624,  624,  624,    0,  624,  624,    0,    0,
1524         0,    0,    0,  624,  624,  624,  624,    0,    0,    0,
1525         0,    0,    0,  624,    0,    0,    0,    0,    0,    0,
1526         0,    0,    0,    0,    0,    0,    0,    0,  624,  624,
1527       624,    0,    0,    0,    0,    0,    0,  624,    0,    0,
1528         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
1529         0,    0,  624,  624,  711,    0,    0,  711,  711,    0,
1530         0,  711,  711,  711,  711,  711,  712,  712,  712,  712,
1531
1532       712,    0,  712,  712,  712,  712,  712,  712,  712,  712,
1533       712,  713,  713,  713,  713,  713,  713,  713,  713,  713,
1534       713,  713,  713,  713,  713,  713,  714,  714,  714,  714,
1535       714,  714,  714,  714,  714,  714,  714,  714,  714,  714,
1536       714,  715,  715,  715,  715,  715,  715,  715,  715,  715,
1537       715,  715,  715,  715,  715,  715,  716,    0,    0,  716,
1538       716,  716,    0,  716,  716,  716,  716,  716,  717,  717,
1539       717,  717,  717,    0,  717,  717,  717,  717,  717,  717,
1540       717,  717,  717,  718,  718,  718,  718,  718,  718,  718,
1541       718,  718,  718,  718,  718,  718,  718,  718,  719,  719,
1542
1543         0,    0,    0,    0,    0,    0,    0,  719,  719,  719,
1544       719,  719,  720,  720,  720,  720,  720,  720,  720,  720,
1545       720,  720,  720,  720,  720,  720,  720,  721,  721,  721,
1546       721,  721,  721,  721,  721,  721,  721,  721,  721,  721,
1547       721,  721,  722,  722,  722,  722,  722,  722,  722,  722,
1548       722,  722,  722,  722,  722,  722,  722,  723,  723,  723,
1549       723,  723,  723,  723,  723,  723,  723,  723,  723,  723,
1550       723,  723,  724,  724,  724,  724,  724,  724,  724,  724,
1551       724,  724,  724,  724,  724,  724,  724,  725,  725,  725,
1552       725,  725,  725,  725,  725,  725,  725,  725,  725,  725,
1553
1554       725,  725,  726,  726,  726,  726,  726,  726,  726,  726,
1555       726,  726,  726,  726,  726,  726,  726,  727,  727,  727,
1556       727,  727,  727,  727,  727,  727,  727,  727,  727,  727,
1557       727,  727,  728,  728,    0,  728,  728,  728,  728,  728,
1558       728,  728,  728,  728,  728,  728,  728,  729,  729,    0,
1559       729,  729,  729,  729,  729,  729,  729,  729,  729,  729,
1560       729,  729,  730,  730,    0,  730,  730,  730,  730,  730,
1561       730,  730,  730,  730,  730,  730,  730,  731,  731,  731,
1562       731,  731,  731,  731,  731,  731,  731,  731,  731,  731,
1563       731,  731,  732,  732,  732,  732,  732,  732,  732,  732,
1564
1565       732,  732,  732,  732,  732,  732,  732,  733,  733,  733,
1566       733,  733,  733,  733,  733,  733,  733,  733,  733,  733,
1567       733,  733,  734,  734,  734,  734,  734,  734,  734,  734,
1568       734,  734,  734,  734,  734,  734,  734,  735,    0,    0,
1569       735,    0,  735,  735,    0,    0,  735,  735,  736,  736,
1570       736,  736,  736,  736,  736,  736,  736,  736,  736,  736,
1571       736,  736,  736,  737,  737,  737,  737,  737,  737,  737,
1572       737,  737,  737,  737,  737,  737,  737,  737,  738,  738,
1573       738,  738,  738,  738,  738,  738,  738,  738,  738,  738,
1574       738,  738,  738,  739,  739,  739,  739,  739,  739,  739,
1575
1576       739,  739,  739,  739,  739,  739,  739,  739,  740,  740,
1577         0,  740,  740,  740,  740,  740,  740,  740,  740,  740,
1578       740,  740,  740,  741,  741,  741,  741,  741,  741,  741,
1579       741,  741,  741,  741,  741,  741,  741,  741,  742,  742,
1580       742,  742,    0,  742,  742,  742,  742,  742,  742,  742,
1581       742,  742,  742,  743,  743,  743,  743,  743,  743,  743,
1582       743,  743,  743,  743,  743,  743,  743,  743,  744,  744,
1583         0,  744,  744,  744,  744,  744,  744,  744,  744,  744,
1584       744,  744,  744,  745,  745,    0,  745,  745,  745,  745,
1585       745,  745,  745,  745,  745,  745,  745,  745,  746,    0,
1586
1587       746,    0,    0,    0,  746,  746,  746,  747,  747,    0,
1588       747,  747,  747,  747,  747,  747,  747,  747,  747,  747,
1589       747,  747,  748,  748,    0,  748,  748,  748,  748,  748,
1590       748,  748,  748,  748,  748,  748,  748,  749,  749,    0,
1591       749,  749,  749,  749,  749,  749,  749,  749,  749,  749,
1592       749,  749,  750,  750,  750,  750,  750,  750,  750,  750,
1593       750,  750,  750,  750,  750,  750,  750,  751,  751,  751,
1594       751,  751,  751,  751,  751,  751,  751,  751,  751,  751,
1595       751,  751,  752,  752,  752,  752,  752,  752,  752,  752,
1596       752,  752,  752,  752,  752,  752,  752,  753,  753,  753,
1597
1598       753,  753,  753,  753,  753,  753,  753,  753,  753,  753,
1599       753,  753,  754,    0,    0,    0,    0,  754,  754,    0,
1600         0,  754,  754,  755,  755,  755,  755,  755,  755,  755,
1601       755,  755,  755,  755,  755,  755,  755,  755,  756,  756,
1602       756,  756,  756,  756,  756,  756,  756,  756,  756,  756,
1603       756,  756,  756,  757,  757,    0,  757,  757,  757,  757,
1604       757,  757,  757,  757,  757,  757,  757,  757,  758,  758,
1605         0,  758,  758,  758,  758,  758,  758,  758,  758,  758,
1606       758,  758,  758,  759,  759,  759,  759,    0,  759,  759,
1607       759,  759,  759,  759,  759,  759,  759,  759,  760,  760,
1608
1609       760,  760,  760,  760,  760,  760,  760,  760,  760,  760,
1610       760,  760,  760,  761,  761,    0,  761,  761,  761,  761,
1611       761,  761,  761,  761,  761,  761,  761,  761,  762,  762,
1612         0,  762,  762,  762,  762,  762,  762,  762,  762,  762,
1613       762,  762,  762,  763,  763,    0,  763,  763,  763,  763,
1614       763,  763,  763,  763,  763,  763,  763,  763,  764,  764,
1615         0,  764,  764,  764,  764,  764,  764,  764,  764,  764,
1616       764,  764,  764,  765,  765,    0,  765,  765,  765,  765,
1617       765,  765,  765,  765,  765,  765,  765,  765,  766,  766,
1618         0,  766,  766,  766,  766,  766,  766,  766,  766,  766,
1619
1620       766,  766,  766,  767,  767,    0,  767,  767,  767,  767,
1621       767,  767,  767,  767,  767,  767,  767,  767,  768,  768,
1622         0,  768,  768,  768,  768,  768,  768,  768,  768,  768,
1623       768,  768,  768,  769,  769,  769,  769,  769,  769,  769,
1624       769,  769,  769,  769,  769,  769,  769,  769,  770,  770,
1625       770,  770,  770,  770,  770,  770,  770,  770,  770,  770,
1626       770,  770,  770,  771,  771,  771,  771,  771,  771,  771,
1627       771,  771,  771,  771,  771,  771,  771,  771,  772,    0,
1628         0,    0,    0,  772,  772,    0,    0,  772,  773,  773,
1629       773,  773,  773,  773,  773,  773,  773,  773,  773,  773,
1630
1631       773,  773,  773,  774,  774,  774,  774,  774,  774,  774,
1632       774,  774,  774,  774,  774,  774,  774,  774,  775,  775,
1633         0,  775,  775,  775,  775,  775,  775,  775,  775,  775,
1634       775,  775,  775,  776,  776,  776,  776,  776,  776,  776,
1635       776,  776,  776,  776,  776,  776,  776,  776,  777,    0,
1636         0,    0,    0,  777,  777,    0,    0,  777,  778,  778,
1637         0,  778,  778,  778,  778,  778,  778,  778,  778,  778,
1638       778,  778,  778,  779,  779,  779,  779,  779,  779,  779,
1639       779,  779,  779,  779,  779,  779,  779,  779,  780,  780,
1640         0,  780,  780,  780,  780,  780,  780,  780,  780,  780,
1641
1642       780,  780,  780,  781,  781,    0,  781,  781,  781,  781,
1643       781,  781,  781,  781,  781,  781,  781,  781,  782,  782,
1644         0,  782,  782,  782,  782,  782,  782,  782,  782,  782,
1645       782,  782,  782,  783,  783,  783,  783,  783,  783,  783,
1646       783,  783,  783,  783,  783,  783,  783,  783,  784,  784,
1647       784,  784,  784,  784,  784,  784,  784,  784,  784,  784,
1648       784,  784,  784,  785,  785,  785,  785,  785,  785,  785,
1649       785,  785,  785,  785,  785,  785,  785,  785,  786,  786,
1650       786,  786,  786,  786,  786,  786,  786,  786,  786,  786,
1651       786,  786,  786,  710,  710,  710,  710,  710,  710,  710,
1652
1653       710,  710,  710,  710,  710,  710,  710,  710,  710,  710,
1654       710,  710,  710,  710,  710,  710,  710,  710,  710,  710,
1655       710,  710,  710,  710,  710,  710,  710,  710,  710,  710,
1656       710,  710,  710,  710,  710,  710,  710,  710,  710,  710,
1657       710,  710,  710,  710,  710,  710,  710,  710,  710,  710,
1658       710,  710,  710,  710,  710,  710,  710,  710,  710,  710,
1659       710,  710,  710,  710,  710,  710
1660     } ;
1661
1662 static yy_state_type yy_state_buf[YY_BUF_SIZE + 2], *yy_state_ptr;
1663 static char *yy_full_match;
1664 static int yy_lp;
1665 static int yy_looking_for_trail_begin = 0;
1666 static int yy_full_lp;
1667 static int *yy_full_state;
1668 #define YY_TRAILING_MASK 0x2000
1669 #define YY_TRAILING_HEAD_MASK 0x4000
1670 #define REJECT \
1671 { \
1672 *yy_cp = yy_hold_char; /* undo effects of setting up yytext */ \
1673 yy_cp = yy_full_match; /* restore poss. backed-over text */ \
1674 yy_lp = yy_full_lp; /* restore orig. accepting pos. */ \
1675 yy_state_ptr = yy_full_state; /* restore orig. state */ \
1676 yy_current_state = *yy_state_ptr; /* restore curr. state */ \
1677 ++yy_lp; \
1678 goto find_rule; \
1679 }
1680 #define yymore() yymore_used_but_not_detected
1681 #define YY_MORE_ADJ 0
1682 #define YY_RESTORE_YY_MORE_OFFSET
1683 char *yytext;
1684 #define INITIAL 0
1685 /*
1686  * parser.l -- lex parser of algebraic chess moves for XBoard
1687  * $Id$
1688  *
1689  * Copyright 1991 by Digital Equipment Corporation, Maynard, Massachusetts.
1690  * Enhancements Copyright 1992-95 Free Software Foundation, Inc.
1691  *
1692  * The following terms apply to Digital Equipment Corporation's copyright
1693  * interest in XBoard:
1694  * ------------------------------------------------------------------------
1695  * All Rights Reserved
1696  *
1697  * Permission to use, copy, modify, and distribute this software and its
1698  * documentation for any purpose and without fee is hereby granted,
1699  * provided that the above copyright notice appear in all copies and that
1700  * both that copyright notice and this permission notice appear in
1701  * supporting documentation, and that the name of Digital not be
1702  * used in advertising or publicity pertaining to distribution of the
1703  * software without specific, written prior permission.
1704  *
1705  * DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
1706  * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
1707  * DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
1708  * ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
1709  * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
1710  * ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
1711  * SOFTWARE.
1712  * ------------------------------------------------------------------------
1713  *
1714  * The following terms apply to the enhanced version of XBoard distributed
1715  * by the Free Software Foundation:
1716  * ------------------------------------------------------------------------
1717  * This program is free software; you can redistribute it and/or modify
1718  * it under the terms of the GNU General Public License as published by
1719  * the Free Software Foundation; either version 2 of the License, or
1720  * (at your option) any later version.
1721  *
1722  * This program is distributed in the hope that it will be useful,
1723  * but WITHOUT ANY WARRANTY; without even the implied warranty of
1724  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
1725  * GNU General Public License for more details.
1726  *
1727  * You should have received a copy of the GNU General Public License
1728  * along with this program; if not, write to the Free Software
1729  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
1730  * ------------------------------------------------------------------------
1731  */
1732
1733 /* This parser handles all forms of promotion.
1734  * The parser resolves ambiguous moves by searching and check-testing.
1735  * It also parses comments of the form [anything] or (anything).
1736  */
1737
1738 #include "config.h"
1739
1740 #define NO_CONSTRAINT   -1
1741 #undef YYLMAX
1742 #define YYLMAX                  4096
1743 #define UNPUT_BUF_SIZE          YYLMAX
1744
1745 #ifdef FLEX_SCANNER
1746 /* yytext is probably a char*, but could be a char[].  yy_text is set
1747    in YY_DECL below, because if yytext is a char*, its value is not
1748    constant. */
1749 char *yy_text;
1750 #else /*!FLEX_SCANNER*/
1751 /* yytext is definitely a char[], so yy_text can be set here, statically. */
1752 char *yy_text = (char *) yytext;
1753 #endif
1754
1755 #ifdef FLEX_SCANNER
1756 /* This is flex */
1757 #undef YY_INPUT
1758 #define YY_INPUT(buf, result, max_size) my_yy_input(buf, &result, max_size)
1759 #undef YY_DECL
1760 #define YY_DECL                     \
1761     int _yylex YY_PROTO((void));    \
1762     int yylex YY_PROTO((void))      \
1763     {                               \
1764         int result = _yylex();      \
1765         yy_text = (char *) yytext;  \
1766         return(result);             \
1767     }                               \
1768     int _yylex YY_PROTO((void))
1769 #else
1770 /* This is lex */
1771 #undef input
1772 #undef output
1773 #undef unput
1774 #endif
1775
1776 /* The includes must be here, below the #undef input */
1777
1778 #include <ctype.h>
1779
1780 #if STDC_HEADERS
1781 # include <stdlib.h>
1782 # include <string.h>
1783 #else /* not STDC_HEADERS */
1784 # if HAVE_STRING_H
1785 #  include <string.h>
1786 # else /* not HAVE_STRING_H */
1787 #  include <strings.h>
1788 # endif /* not HAVE_STRING_H */
1789 #endif /* not STDC_HEADERS */
1790
1791 #if HAVE_UNISTD_H
1792 # include <unistd.h>
1793 #endif
1794
1795 #if defined(_amigados)
1796 # include <errno.h>
1797 # if HAVE_FCNTL_H
1798 #  include <fcntl.h>    /*  isatty() prototype  */
1799 # endif /*  HAVE_FCNTL_H        */
1800 #endif  /*  defined(_amigados)  */
1801
1802 #include "common.h"
1803 #include "backend.h"
1804 #include "frontend.h"
1805 #include "parser.h"
1806 #include "moves.h"
1807
1808 extern int PosFlags P((int));
1809
1810 extern Board    boards[MAX_MOVES];
1811 int             yyboardindex;
1812 int             yyskipmoves = FALSE;
1813 char            currentMoveString[YYLMAX];
1814 #ifndef FLEX_SCANNER
1815 char            unputBuffer[UNPUT_BUF_SIZE];
1816 int             unputCount = 0;
1817 #endif
1818
1819 #ifdef FLEX_SCANNER
1820 void my_yy_input P((char *buf, int *result, int max_size));
1821 #else /*!FLEX_SCANNER*/
1822 static int input P((void));
1823 static void output P((int ch));
1824 static void unput P((int ch));
1825 int yylook P((void));
1826 int yyback P((int *, int));
1827 #endif
1828 #undef yywrap
1829 int yywrap P((void));
1830 extern void CopyBoard P((Board to, Board from));
1831
1832
1833 /* Macros after this point can all be overridden by user definitions in
1834  * section 1.
1835  */
1836
1837 #ifndef YY_SKIP_YYWRAP
1838 #ifdef __cplusplus
1839 extern "C" int yywrap YY_PROTO(( void ));
1840 #else
1841 extern int yywrap YY_PROTO(( void ));
1842 #endif
1843 #endif
1844
1845 #ifndef YY_NO_UNPUT
1846 static void yyunput YY_PROTO(( int c, char *buf_ptr ));
1847 #endif
1848
1849 #ifndef yytext_ptr
1850 static void yy_flex_strncpy YY_PROTO(( char *, yyconst char *, int ));
1851 #endif
1852
1853 #ifdef YY_NEED_STRLEN
1854 static int yy_flex_strlen YY_PROTO(( yyconst char * ));
1855 #endif
1856
1857 #ifndef YY_NO_INPUT
1858 #ifdef __cplusplus
1859 static int yyinput YY_PROTO(( void ));
1860 #else
1861 static int input YY_PROTO(( void ));
1862 #endif
1863 #endif
1864
1865 #if YY_STACK_USED
1866 static int yy_start_stack_ptr = 0;
1867 static int yy_start_stack_depth = 0;
1868 static int *yy_start_stack = 0;
1869 #ifndef YY_NO_PUSH_STATE
1870 static void yy_push_state YY_PROTO(( int new_state ));
1871 #endif
1872 #ifndef YY_NO_POP_STATE
1873 static void yy_pop_state YY_PROTO(( void ));
1874 #endif
1875 #ifndef YY_NO_TOP_STATE
1876 static int yy_top_state YY_PROTO(( void ));
1877 #endif
1878
1879 #else
1880 #define YY_NO_PUSH_STATE 1
1881 #define YY_NO_POP_STATE 1
1882 #define YY_NO_TOP_STATE 1
1883 #endif
1884
1885 #ifdef YY_MALLOC_DECL
1886 YY_MALLOC_DECL
1887 #else
1888 #if __STDC__
1889 #ifndef __cplusplus
1890 #include <stdlib.h>
1891 #endif
1892 #else
1893 /* Just try to get by without declaring the routines.  This will fail
1894  * miserably on non-ANSI systems for which sizeof(size_t) != sizeof(int)
1895  * or sizeof(void*) != sizeof(int).
1896  */
1897 #endif
1898 #endif
1899
1900 /* Amount of stuff to slurp up with each read. */
1901 #ifndef YY_READ_BUF_SIZE
1902 #define YY_READ_BUF_SIZE 8192
1903 #endif
1904
1905 /* Copy whatever the last rule matched to the standard output. */
1906
1907 #ifndef ECHO
1908 /* This used to be an fputs(), but since the string might contain NUL's,
1909  * we now use fwrite().
1910  */
1911 #define ECHO (void) fwrite( yytext, yyleng, 1, yyout )
1912 #endif
1913
1914 /* Gets input and stuffs it into "buf".  number of characters read, or YY_NULL,
1915  * is returned in "result".
1916  */
1917 #ifndef YY_INPUT
1918 #define YY_INPUT(buf,result,max_size) \
1919         if ( yy_current_buffer->yy_is_interactive ) \
1920                 { \
1921                 int c = '*', n; \
1922                 for ( n = 0; n < max_size && \
1923                              (c = getc( yyin )) != EOF && c != '\n'; ++n ) \
1924                         buf[n] = (char) c; \
1925                 if ( c == '\n' ) \
1926                         buf[n++] = (char) c; \
1927                 if ( c == EOF && ferror( yyin ) ) \
1928                         YY_FATAL_ERROR( "input in flex scanner failed" ); \
1929                 result = n; \
1930                 } \
1931         else if ( ((result = fread( buf, 1, max_size, yyin )) == 0) \
1932                   && ferror( yyin ) ) \
1933                 YY_FATAL_ERROR( "input in flex scanner failed" );
1934 #endif
1935
1936 /* No semi-colon after return; correct usage is to write "yyterminate();" -
1937  * we don't want an extra ';' after the "return" because that will cause
1938  * some compilers to complain about unreachable statements.
1939  */
1940 #ifndef yyterminate
1941 #define yyterminate() return YY_NULL
1942 #endif
1943
1944 /* Number of entries by which start-condition stack grows. */
1945 #ifndef YY_START_STACK_INCR
1946 #define YY_START_STACK_INCR 25
1947 #endif
1948
1949 /* Report a fatal error. */
1950 #ifndef YY_FATAL_ERROR
1951 #define YY_FATAL_ERROR(msg) yy_fatal_error( msg )
1952 #endif
1953
1954 /* Default declaration of generated scanner - a define so the user can
1955  * easily add parameters.
1956  */
1957 #ifndef YY_DECL
1958 #define YY_DECL int yylex YY_PROTO(( void ))
1959 #endif
1960
1961 /* Code executed at the beginning of each rule, after yytext and yyleng
1962  * have been set up.
1963  */
1964 #ifndef YY_USER_ACTION
1965 #define YY_USER_ACTION
1966 #endif
1967
1968 /* Code executed at the end of each rule. */
1969 #ifndef YY_BREAK
1970 #define YY_BREAK break;
1971 #endif
1972
1973 #define YY_RULE_SETUP \
1974         if ( yyleng > 0 ) \
1975                 yy_current_buffer->yy_at_bol = \
1976                                 (yytext[yyleng - 1] == '\n'); \
1977         YY_USER_ACTION
1978
1979 YY_DECL
1980         {
1981         register yy_state_type yy_current_state;
1982         register char *yy_cp, *yy_bp;
1983         register int yy_act;
1984
1985
1986
1987
1988         if ( yy_init )
1989                 {
1990                 yy_init = 0;
1991
1992 #ifdef YY_USER_INIT
1993                 YY_USER_INIT;
1994 #endif
1995
1996                 if ( ! yy_start )
1997                         yy_start = 1;   /* first start state */
1998
1999                 if ( ! yyin )
2000                         yyin = stdin;
2001
2002                 if ( ! yyout )
2003                         yyout = stdout;
2004
2005                 if ( ! yy_current_buffer )
2006                         yy_current_buffer =
2007                                 yy_create_buffer( yyin, YY_BUF_SIZE );
2008
2009                 yy_load_buffer_state();
2010                 }
2011
2012         while ( 1 )             /* loops until end-of-file is reached */
2013                 {
2014                 yy_cp = yy_c_buf_p;
2015
2016                 /* Support of yytext. */
2017                 *yy_cp = yy_hold_char;
2018
2019                 /* yy_bp points to the position in yy_ch_buf of the start of
2020                  * the current run.
2021                  */
2022                 yy_bp = yy_cp;
2023
2024                 yy_current_state = yy_start;
2025                 yy_current_state += YY_AT_BOL();
2026                 yy_state_ptr = yy_state_buf;
2027                 *yy_state_ptr++ = yy_current_state;
2028 yy_match:
2029                 do
2030                         {
2031                         register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)];
2032                         while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
2033                                 {
2034                                 yy_current_state = (int) yy_def[yy_current_state];
2035                                 if ( yy_current_state >= 711 )
2036                                         yy_c = yy_meta[(unsigned int) yy_c];
2037                                 }
2038                         yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
2039                         *yy_state_ptr++ = yy_current_state;
2040                         ++yy_cp;
2041                         }
2042                 while ( yy_base[yy_current_state] != 4394 );
2043
2044 yy_find_action:
2045                 yy_current_state = *--yy_state_ptr;
2046                 yy_lp = yy_accept[yy_current_state];
2047 find_rule: /* we branch to this label when backing up */
2048                 for ( ; ; ) /* until we find what rule we matched */
2049                         {
2050                         if ( yy_lp && yy_lp < yy_accept[yy_current_state + 1] )
2051                                 {
2052                                 yy_act = yy_acclist[yy_lp];
2053                                 if ( yy_act & YY_TRAILING_HEAD_MASK ||
2054                                      yy_looking_for_trail_begin )
2055                                         {
2056                                         if ( yy_act == yy_looking_for_trail_begin )
2057                                                 {
2058                                                 yy_looking_for_trail_begin = 0;
2059                                                 yy_act &= ~YY_TRAILING_HEAD_MASK;
2060                                                 break;
2061                                                 }
2062                                         }
2063                                 else if ( yy_act & YY_TRAILING_MASK )
2064                                         {
2065                                         yy_looking_for_trail_begin = yy_act & ~YY_TRAILING_MASK;
2066                                         yy_looking_for_trail_begin |= YY_TRAILING_HEAD_MASK;
2067                                         }
2068                                 else
2069                                         {
2070                                         yy_full_match = yy_cp;
2071                                         yy_full_state = yy_state_ptr;
2072                                         yy_full_lp = yy_lp;
2073                                         break;
2074                                         }
2075                                 ++yy_lp;
2076                                 goto find_rule;
2077                                 }
2078                         --yy_cp;
2079                         yy_current_state = *--yy_state_ptr;
2080                         yy_lp = yy_accept[yy_current_state];
2081                         }
2082
2083                 YY_DO_BEFORE_ACTION;
2084
2085
2086 do_action:      /* This label is used only to access EOF actions. */
2087
2088
2089                 switch ( yy_act )
2090         { /* beginning of action switch */
2091 case 1:
2092 YY_RULE_SETUP
2093 {
2094     /*
2095      * Fully-qualified algebraic move, possibly with promotion
2096      */
2097     int skip1 = 0, skip2 = 0;
2098     ChessSquare piece;
2099     ChessMove result;
2100     
2101     if (yyskipmoves) return (int) AmbiguousMove; /* not disambiguated */
2102
2103     /* remove the / */
2104     if (yytext[1] == '/') skip1 = 1;
2105     
2106     /* remove the [xX:-] */
2107     if ((yytext[3+skip1] == 'x') || (yytext[3+skip1] == 'X') ||
2108         (yytext[3+skip1] == '-') || (yytext[3+skip1] == ':')) skip2 = 1;
2109     
2110     currentMoveString[0] = yytext[1+skip1];
2111     currentMoveString[1] = yytext[2+skip1];
2112     currentMoveString[2] = yytext[3+skip1+skip2];
2113     currentMoveString[3] = yytext[4+skip1+skip2];
2114     currentMoveString[4] = NULLCHAR;
2115     
2116     if (yyleng-skip1-skip2 > 5) {
2117         if (yytext[yyleng-1] == ')') {
2118             currentMoveString[4] = ToLower(yytext[yyleng-2]);
2119         } else {
2120             currentMoveString[4] = ToLower(yytext[yyleng-1]);
2121         }
2122         currentMoveString[5] = NULLCHAR;
2123     }
2124
2125     piece = boards[yyboardindex]
2126       [currentMoveString[1] - '1'][currentMoveString[0] - 'a'];
2127     if (ToLower(yytext[0]) != ToLower(PieceToChar(piece)))
2128       return (int) IllegalMove;
2129
2130     result = LegalityTest(boards[yyboardindex],
2131                           PosFlags(yyboardindex), EP_UNKNOWN,
2132                           currentMoveString[1] - '1',
2133                           currentMoveString[0] - 'a',
2134                           currentMoveString[3] - '1',
2135                           currentMoveString[2] - 'a',
2136                           currentMoveString[4]);
2137
2138     if (currentMoveString[4] == NULLCHAR &&
2139         (result == WhitePromotionQueen || result == BlackPromotionQueen)) {
2140         currentMoveString[4] = 'q';
2141         currentMoveString[5] = NULLCHAR;
2142     }
2143
2144     return (int) result;
2145 }
2146         YY_BREAK
2147 case 2:
2148 YY_RULE_SETUP
2149 {
2150     /*
2151      * Simple algebraic move, possibly with promotion
2152      */
2153     int skip = 0;
2154     ChessMove result;
2155
2156     if (yyskipmoves) return (int) AmbiguousMove; /* not disambiguated */
2157
2158     /* remove the [xX:-] */
2159     if ((yytext[2] == 'x') || (yytext[2] == 'X') ||
2160         (yytext[2] == '-') || (yytext[2] == ':')) skip = 1;
2161
2162     currentMoveString[0] = yytext[0];
2163     currentMoveString[1] = yytext[1];
2164     currentMoveString[2] = yytext[2+skip];
2165     currentMoveString[3] = yytext[3+skip];
2166     currentMoveString[4] = NULLCHAR;
2167
2168     if (yyleng-skip > 4) {
2169         if (yytext[yyleng-1] == ')') {
2170             currentMoveString[4] = ToLower(yytext[yyleng-2]);
2171         } else {
2172             currentMoveString[4] = ToLower(yytext[yyleng-1]);
2173         }
2174         currentMoveString[5] = NULLCHAR;
2175     }
2176
2177     result = LegalityTest(boards[yyboardindex],
2178                           PosFlags(yyboardindex), EP_UNKNOWN,
2179                           currentMoveString[1] - '1',
2180                           currentMoveString[0] - 'a',
2181                           currentMoveString[3] - '1',
2182                           currentMoveString[2] - 'a',
2183                           currentMoveString[4]);
2184
2185     if (currentMoveString[4] == NULLCHAR &&
2186         (result == WhitePromotionQueen || result == BlackPromotionQueen)) {
2187         currentMoveString[4] = 'q';
2188         currentMoveString[5] = NULLCHAR;
2189     }
2190
2191     return (int) result;
2192 }
2193         YY_BREAK
2194 case 3:
2195 YY_RULE_SETUP
2196 {
2197     /*
2198      * Pawn move, possibly with promotion
2199      */
2200     DisambiguateClosure cl;
2201     int skip = 0;
2202
2203     if (yyskipmoves) return (int) AmbiguousMove; /* not disambiguated */
2204
2205     /* remove the =() */
2206     if (yytext[2] == '=') skip++;
2207     if (yytext[2+skip] == '(') skip++;
2208
2209     cl.pieceIn = WhiteOnMove(yyboardindex) ? WhitePawn : BlackPawn;
2210     cl.rfIn = -1;
2211     cl.ffIn = yytext[0] - 'a';
2212     cl.rtIn = yytext[1] - '1';
2213     cl.ftIn = yytext[0] - 'a';
2214     cl.promoCharIn = yytext[2+skip];
2215     Disambiguate(boards[yyboardindex],
2216                  PosFlags(yyboardindex), EP_UNKNOWN, &cl);
2217
2218     currentMoveString[0] = cl.ff + 'a';
2219     currentMoveString[1] = cl.rf + '1';
2220     currentMoveString[2] = cl.ft + 'a';
2221     currentMoveString[3] = cl.rt + '1';
2222     currentMoveString[4] = cl.promoChar;
2223     currentMoveString[5] = NULLCHAR;
2224
2225     return (int) cl.kind;
2226 }
2227         YY_BREAK
2228 case 4:
2229 YY_RULE_SETUP
2230 {
2231     /*
2232      * Pawn capture, possibly with promotion, possibly ambiguous
2233      */
2234     DisambiguateClosure cl;
2235     int skip1 = 0, skip2 = 0;
2236
2237     if (yyskipmoves) return (int) AmbiguousMove; /* not disambiguated */
2238
2239     /* remove trailing ep or e.p. (nonstandard PGN) */
2240     if (yytext[yyleng-1] == 'p') {
2241       yyleng -= 2;
2242       yytext[yyleng] = NULLCHAR;
2243     } else if (yytext[yyleng-1] == '.') {
2244       yyleng -= 4;
2245       yytext[yyleng] = NULLCHAR;
2246     }
2247
2248     /* remove the [xX:-] and =() */
2249     if ((yytext[1] == 'x') || (yytext[1] == 'X')
2250         || (yytext[1] == ':') || (yytext[1] == '-')) skip1 = 1;
2251     if (yytext[2+skip1] == '=') skip2++;
2252     if (yytext[2+skip1+skip2] == '(') skip2++;
2253
2254     cl.pieceIn = WhiteOnMove(yyboardindex) ? WhitePawn : BlackPawn;
2255     cl.rfIn = -1;
2256     cl.ffIn = yytext[0] - 'a';
2257     cl.rtIn = -1;
2258     cl.ftIn = yytext[1+skip1] - 'a';
2259     cl.promoCharIn = yytext[2+skip1+skip2];
2260     Disambiguate(boards[yyboardindex],
2261                  PosFlags(yyboardindex), EP_UNKNOWN, &cl);
2262
2263     currentMoveString[0] = cl.ff + 'a';
2264     currentMoveString[1] = cl.rf + '1';
2265     currentMoveString[2] = cl.ft + 'a';
2266     currentMoveString[3] = cl.rt + '1';
2267     currentMoveString[4] = cl.promoChar;
2268     currentMoveString[5] = NULLCHAR;
2269
2270     return (int) cl.kind;
2271 }
2272         YY_BREAK
2273 case 5:
2274 YY_RULE_SETUP
2275 {
2276     /*
2277      * unambiguously abbreviated Pawn capture, possibly with promotion
2278      */
2279     int skip = 0;
2280     ChessMove result;
2281
2282     if (yyskipmoves) return (int) AmbiguousMove; /* not disambiguated */
2283
2284     /* remove trailing ep or e.p. (nonstandard PGN) */
2285     if (yytext[yyleng-1] == 'p') {
2286       yyleng -= 2;
2287       yytext[yyleng] = NULLCHAR;
2288     } else if (yytext[yyleng-1] == '.') {
2289       yyleng -= 4;
2290       yytext[yyleng] = NULLCHAR;
2291     }
2292
2293     /* remove the [xX:-] */
2294     if ((yytext[1] == 'x') || (yytext[1] == 'X')
2295         || (yytext[1] == ':') || (yytext[1] == '-')) skip = 1;
2296
2297     currentMoveString[0] = yytext[0];
2298     currentMoveString[2] = yytext[1+skip];
2299     currentMoveString[3] = yytext[2+skip];
2300     if (WhiteOnMove(yyboardindex)) {
2301         if (yytext[2+skip] == '1') return (int) ImpossibleMove;
2302         currentMoveString[1] = yytext[2+skip] - 1;
2303     } else {
2304         if (yytext[2+skip] == '8') return (int) ImpossibleMove;
2305         currentMoveString[1] = yytext[2+skip] + 1;
2306     }
2307     if (yyleng-skip > 3) {
2308         if (yytext[yyleng-1] == ')')
2309           currentMoveString[4] = ToLower(yytext[yyleng-2]);
2310         else
2311           currentMoveString[4] = ToLower(yytext[yyleng-1]);
2312         currentMoveString[5] = NULLCHAR;
2313     } else {
2314         currentMoveString[4] = NULLCHAR;
2315     }
2316
2317     result = LegalityTest(boards[yyboardindex],
2318                           PosFlags(yyboardindex), EP_UNKNOWN,
2319                           currentMoveString[1] - '1',
2320                           currentMoveString[0] - 'a',
2321                           currentMoveString[3] - '1',
2322                           currentMoveString[2] - 'a',
2323                           currentMoveString[4]);
2324
2325     if (currentMoveString[4] == NULLCHAR &&
2326         (result == WhitePromotionQueen || result == BlackPromotionQueen)) {
2327         currentMoveString[4] = 'q';
2328         currentMoveString[5] = NULLCHAR;
2329     }
2330
2331     if (result != IllegalMove) return (int) result;
2332
2333     /* Special case: improperly written en passant capture */
2334     if (WhiteOnMove(yyboardindex)) {
2335         if (currentMoveString[3] == '5') {
2336             currentMoveString[1] = '5';
2337             currentMoveString[3] = '6';
2338         } else {
2339             return (int) IllegalMove;
2340         }
2341     } else {
2342         if (currentMoveString[3] == '4') {
2343             currentMoveString[1] = '4';
2344             currentMoveString[3] = '3';
2345         } else {
2346             return (int) IllegalMove;
2347         }
2348     }
2349
2350     result = LegalityTest(boards[yyboardindex],
2351                           PosFlags(yyboardindex), EP_UNKNOWN,
2352                           currentMoveString[1] - '1',
2353                           currentMoveString[0] - 'a',
2354                           currentMoveString[3] - '1',
2355                           currentMoveString[2] - 'a',
2356                           currentMoveString[4]);
2357
2358     if (result == WhiteCapturesEnPassant || result == BlackCapturesEnPassant)
2359       return (int) result;
2360     else
2361       return (int) IllegalMove;
2362 }
2363         YY_BREAK
2364 case 6:
2365 YY_RULE_SETUP
2366 {
2367     /*
2368      * piece move, possibly ambiguous
2369      */
2370     DisambiguateClosure cl;
2371     int skip = 0;
2372
2373     if (yyskipmoves) return (int) AmbiguousMove; /* not disambiguated */
2374
2375     /* remove the [xX:-] */
2376     if ((yytext[1] == 'x') || (yytext[1] == 'X')
2377         || (yytext[1] == ':') || (yytext[1] == '-')) skip = 1;
2378
2379     if (WhiteOnMove(yyboardindex)) {
2380         cl.pieceIn = CharToPiece(ToUpper(yytext[0]));
2381     } else {
2382         cl.pieceIn = CharToPiece(ToLower(yytext[0]));
2383     }
2384     cl.rfIn = -1;
2385     cl.ffIn = -1;
2386     cl.rtIn = yytext[2+skip] - '1';
2387     cl.ftIn = yytext[1+skip] - 'a';
2388     cl.promoCharIn = NULLCHAR;
2389     Disambiguate(boards[yyboardindex],
2390                  PosFlags(yyboardindex), EP_UNKNOWN, &cl);
2391
2392     currentMoveString[0] = cl.ff + 'a';
2393     currentMoveString[1] = cl.rf + '1';
2394     currentMoveString[2] = cl.ft + 'a';
2395     currentMoveString[3] = cl.rt + '1';
2396     currentMoveString[4] = cl.promoChar;
2397     currentMoveString[5] = NULLCHAR;
2398
2399     return (int) cl.kind;
2400 }
2401         YY_BREAK
2402 case 7:
2403 YY_RULE_SETUP
2404 {
2405     /*
2406      * piece move with rank or file disambiguator
2407      */
2408     DisambiguateClosure cl;
2409     int skip = 0;
2410
2411     if (yyskipmoves) return (int) AmbiguousMove; /* not disambiguated */
2412
2413     /* remove the [xX:-] */
2414     if ((yytext[2] == 'x') || (yytext[2] == 'X')
2415         || (yytext[2] == ':') || (yytext[2] == '-')) skip = 1;
2416
2417     if (WhiteOnMove(yyboardindex)) {
2418         cl.pieceIn = CharToPiece(ToUpper(yytext[0]));
2419     } else {
2420         cl.pieceIn = CharToPiece(ToLower(yytext[0]));
2421     }
2422     if (isalpha(yytext[1])) {
2423         cl.rfIn = -1;
2424         cl.ffIn = yytext[1] - 'a';
2425     } else {
2426         cl.rfIn = yytext[1] - '1';
2427         cl.ffIn = -1;
2428     }
2429     cl.rtIn = yytext[3+skip] - '1';
2430     cl.ftIn = yytext[2+skip] - 'a';
2431     cl.promoCharIn = NULLCHAR;
2432     Disambiguate(boards[yyboardindex],
2433                  PosFlags(yyboardindex), EP_UNKNOWN, &cl);
2434
2435     currentMoveString[0] = cl.ff + 'a';
2436     currentMoveString[1] = cl.rf + '1';
2437     currentMoveString[2] = cl.ft + 'a';
2438     currentMoveString[3] = cl.rt + '1';
2439     currentMoveString[4] = cl.promoChar;
2440     currentMoveString[5] = NULLCHAR;
2441
2442     return (int) cl.kind;
2443 }
2444         YY_BREAK
2445 case 8:
2446 YY_RULE_SETUP
2447 {
2448     int rf, ff, rt, ft;
2449
2450     if (yyskipmoves) return (int) AmbiguousMove; /* not disambiguated */
2451
2452     if (WhiteOnMove(yyboardindex)) {
2453         if (boards[yyboardindex][0][3] == WhiteKing) {
2454             /* ICS wild castling */
2455             strcpy(currentMoveString, "d1f1");
2456             rf = 0;
2457             ff = 3;
2458             rt = 0;
2459             ft = 5;
2460         } else {
2461             strcpy(currentMoveString, "e1c1");
2462             rf = 0;
2463             ff = 4;
2464             rt = 0;
2465             ft = 2;
2466         }
2467     } else{ 
2468         if (boards[yyboardindex][7][3] == BlackKing) {
2469             /* ICS wild castling */
2470             strcpy(currentMoveString, "d8f8");
2471             rf = 7;
2472             ff = 3;
2473             rt = 7;
2474             ft = 5;
2475         } else {
2476             strcpy(currentMoveString, "e8c8");
2477             rf = 7;
2478             ff = 4;
2479             rt = 7;
2480             ft = 2;
2481         }
2482     }
2483     return (int) LegalityTest(boards[yyboardindex],
2484                               PosFlags(yyboardindex), EP_UNKNOWN,
2485                               rf, ff, rt, ft, NULLCHAR);
2486 }
2487         YY_BREAK
2488 case 9:
2489 YY_RULE_SETUP
2490 {
2491     int rf, ff, rt, ft;
2492
2493     if (yyskipmoves) return (int) AmbiguousMove; /* not disambiguated */
2494
2495     if (WhiteOnMove(yyboardindex)) {
2496         if (boards[yyboardindex][0][3] == WhiteKing) {
2497             /* ICS wild castling */
2498             strcpy(currentMoveString, "d1b1");
2499             rf = 0;
2500             ff = 3;
2501             rt = 0;
2502             ft = 1;
2503         } else {
2504             strcpy(currentMoveString, "e1g1");
2505             rf = 0;
2506             ff = 4;
2507             rt = 0;
2508             ft = 6;
2509         }
2510     } else {
2511         if (boards[yyboardindex][7][3] == BlackKing) {
2512             /* ICS wild castling */
2513             strcpy(currentMoveString, "d8b8");
2514             rf = 7;
2515             ff = 3;
2516             rt = 7;
2517             ft = 1;
2518         } else {
2519             strcpy(currentMoveString, "e8g8");
2520             rf = 7;
2521             ff = 4;
2522             rt = 7;
2523             ft = 6;
2524         }
2525     }
2526     return (int) LegalityTest(boards[yyboardindex],
2527                               PosFlags(yyboardindex), EP_UNKNOWN,
2528                               rf, ff, rt, ft, NULLCHAR);
2529 }
2530         YY_BREAK
2531 case 10:
2532 YY_RULE_SETUP
2533 {
2534     /* Bughouse piece drop.  No legality checking for now. */
2535     currentMoveString[1] = '@';
2536     currentMoveString[2] = yytext[2];
2537     currentMoveString[3] = yytext[3];
2538     currentMoveString[4] = NULLCHAR;
2539     if (WhiteOnMove(yyboardindex)) {
2540         currentMoveString[0] = ToUpper(yytext[0]);
2541         return (int) WhiteDrop;
2542     } else {
2543         currentMoveString[0] = ToLower(yytext[0]);
2544         return (int) BlackDrop;
2545     }
2546 }
2547         YY_BREAK
2548 case 11:
2549 YY_RULE_SETUP
2550 {
2551     if (WhiteOnMove(yyboardindex))
2552       return (int) BlackWins;
2553     else
2554       return (int) WhiteWins;
2555 }
2556         YY_BREAK
2557 case 12:
2558 YY_RULE_SETUP
2559 {
2560     return (int) (ToUpper(yytext[0]) == 'W' ? BlackWins : WhiteWins);
2561 }
2562         YY_BREAK
2563 case 13:
2564 YY_RULE_SETUP
2565 {
2566     return (int) GameUnfinished;
2567 }
2568         YY_BREAK
2569 case 14:
2570 YY_RULE_SETUP
2571 {
2572     return (int) GameIsDrawn;
2573 }
2574         YY_BREAK
2575 case 15:
2576 YY_RULE_SETUP
2577 {
2578     return (int) GameIsDrawn;
2579 }
2580         YY_BREAK
2581 case 16:
2582 YY_RULE_SETUP
2583 {
2584     if (WhiteOnMove(yyboardindex))
2585       return (int) BlackWins;
2586     else
2587       return (int) WhiteWins;
2588 }
2589         YY_BREAK
2590 case 17:
2591 YY_RULE_SETUP
2592 {
2593     if (WhiteOnMove(yyboardindex))
2594       return (int) BlackWins;
2595     else
2596       return (int) WhiteWins;
2597 }
2598         YY_BREAK
2599 case 18:
2600 YY_RULE_SETUP
2601 {
2602     return (int) GameIsDrawn;
2603 }
2604         YY_BREAK
2605 case 19:
2606 YY_RULE_SETUP
2607 {
2608     return (int) GameIsDrawn;
2609 }
2610         YY_BREAK
2611 case 20:
2612 YY_RULE_SETUP
2613 {
2614     return (int) (ToUpper(yytext[0]) == 'W' ? WhiteWins : BlackWins);
2615 }
2616         YY_BREAK
2617 case 21:
2618 YY_RULE_SETUP
2619 {
2620     return (int) (ToUpper(yytext[0]) == 'W' ? BlackWins : WhiteWins);
2621 }
2622         YY_BREAK
2623 case 22:
2624 YY_RULE_SETUP
2625
2626     return (int) WhiteWins;
2627 }
2628         YY_BREAK
2629 case 23:
2630 YY_RULE_SETUP
2631
2632     return (int) BlackWins;
2633 }
2634         YY_BREAK
2635 case 24:
2636 YY_RULE_SETUP
2637 {
2638     return (int) GameIsDrawn;
2639 }
2640         YY_BREAK
2641 case 25:
2642 YY_RULE_SETUP
2643 {
2644     return (int) GameUnfinished;
2645 }
2646         YY_BREAK
2647 case 26:
2648 YY_RULE_SETUP
2649 {
2650     /* move numbers */
2651     if ((yyleng == 1) && (yytext[0] == '1'))
2652       return (int) MoveNumberOne;
2653 }
2654         YY_BREAK
2655 case 27:
2656 YY_RULE_SETUP
2657 {
2658     /* elapsed time indication, e.g. (0:12) or {10:21.071} */ 
2659     return (int) ElapsedTime;
2660 }
2661         YY_BREAK
2662 case 28:
2663 YY_RULE_SETUP
2664 {
2665     /* position diagram enclosed in [-- --] */
2666     return (int) PositionDiagram;
2667 }
2668         YY_BREAK
2669 case 29:
2670 *yy_cp = yy_hold_char; /* undo effects of setting up yytext */
2671 yy_c_buf_p = yy_cp -= 1;
2672 YY_DO_BEFORE_ACTION; /* set up yytext again */
2673 YY_RULE_SETUP
2674 {
2675     /* position diagram enclosed in {-- --} */
2676     return (int) PositionDiagram;
2677 }
2678         YY_BREAK
2679 case 30:
2680 YY_RULE_SETUP
2681 {
2682     return (int) PGNTag;
2683 }    
2684         YY_BREAK
2685 case 31:
2686 YY_RULE_SETUP
2687 {
2688     return (int) GNUChessGame;
2689 }
2690         YY_BREAK
2691 case 32:
2692 *yy_cp = yy_hold_char; /* undo effects of setting up yytext */
2693 yy_c_buf_p = yy_cp -= 1;
2694 YY_DO_BEFORE_ACTION; /* set up yytext again */
2695 YY_RULE_SETUP
2696 {
2697     return (int) XBoardGame;
2698 }
2699         YY_BREAK
2700 case 33:
2701 YY_RULE_SETUP
2702 {                               /* numeric annotation glyph */
2703     return (int) NAG;
2704 }
2705         YY_BREAK
2706 case 34:
2707 YY_RULE_SETUP
2708 {                               /* anything in {} */
2709     return (int) Comment; 
2710 }
2711         YY_BREAK
2712 case 35:
2713 *yy_cp = yy_hold_char; /* undo effects of setting up yytext */
2714 yy_c_buf_p = yy_cp -= 1;
2715 YY_DO_BEFORE_ACTION; /* set up yytext again */
2716 YY_RULE_SETUP
2717 {                                          /* ; to end of line */
2718     return (int) Comment;
2719 }
2720         YY_BREAK
2721 case 36:
2722 YY_RULE_SETUP
2723 {                               /* anything in [] */
2724     return (int) Comment; 
2725 }
2726         YY_BREAK
2727 case 37:
2728 YY_RULE_SETUP
2729 {               /* nested () */
2730     return (int) Comment; 
2731 }
2732         YY_BREAK
2733 case 38:
2734 YY_RULE_SETUP
2735 {                               /* >=2 chars in () */
2736     return (int) Comment; 
2737 }       
2738         YY_BREAK
2739 case 39:
2740 YY_RULE_SETUP
2741 {
2742         /* Skip mail headers */
2743 }
2744         YY_BREAK
2745 case 40:
2746 YY_RULE_SETUP
2747 {
2748         /* Skip random words */
2749 }
2750         YY_BREAK
2751 case 41:
2752 YY_RULE_SETUP
2753 {
2754         /* Skip everything else */
2755 }
2756         YY_BREAK
2757 case 42:
2758 YY_RULE_SETUP
2759 ECHO;
2760         YY_BREAK
2761                         case YY_STATE_EOF(INITIAL):
2762                                 yyterminate();
2763
2764         case YY_END_OF_BUFFER:
2765                 {
2766                 /* Amount of text matched not including the EOB char. */
2767                 int yy_amount_of_matched_text = (int) (yy_cp - yytext_ptr) - 1;
2768
2769                 /* Undo the effects of YY_DO_BEFORE_ACTION. */
2770                 *yy_cp = yy_hold_char;
2771                 YY_RESTORE_YY_MORE_OFFSET
2772
2773                 if ( yy_current_buffer->yy_buffer_status == YY_BUFFER_NEW )
2774                         {
2775                         /* We're scanning a new file or input source.  It's
2776                          * possible that this happened because the user
2777                          * just pointed yyin at a new source and called
2778                          * yylex().  If so, then we have to assure
2779                          * consistency between yy_current_buffer and our
2780                          * globals.  Here is the right place to do so, because
2781                          * this is the first action (other than possibly a
2782                          * back-up) that will match for the new input source.
2783                          */
2784                         yy_n_chars = yy_current_buffer->yy_n_chars;
2785                         yy_current_buffer->yy_input_file = yyin;
2786                         yy_current_buffer->yy_buffer_status = YY_BUFFER_NORMAL;
2787                         }
2788
2789                 /* Note that here we test for yy_c_buf_p "<=" to the position
2790                  * of the first EOB in the buffer, since yy_c_buf_p will
2791                  * already have been incremented past the NUL character
2792                  * (since all states make transitions on EOB to the
2793                  * end-of-buffer state).  Contrast this with the test
2794                  * in input().
2795                  */
2796                 if ( yy_c_buf_p <= &yy_current_buffer->yy_ch_buf[yy_n_chars] )
2797                         { /* This was really a NUL. */
2798                         yy_state_type yy_next_state;
2799
2800                         yy_c_buf_p = yytext_ptr + yy_amount_of_matched_text;
2801
2802                         yy_current_state = yy_get_previous_state();
2803
2804                         /* Okay, we're now positioned to make the NUL
2805                          * transition.  We couldn't have
2806                          * yy_get_previous_state() go ahead and do it
2807                          * for us because it doesn't know how to deal
2808                          * with the possibility of jamming (and we don't
2809                          * want to build jamming into it because then it
2810                          * will run more slowly).
2811                          */
2812
2813                         yy_next_state = yy_try_NUL_trans( yy_current_state );
2814
2815                         yy_bp = yytext_ptr + YY_MORE_ADJ;
2816
2817                         if ( yy_next_state )
2818                                 {
2819                                 /* Consume the NUL. */
2820                                 yy_cp = ++yy_c_buf_p;
2821                                 yy_current_state = yy_next_state;
2822                                 goto yy_match;
2823                                 }
2824
2825                         else
2826                                 {
2827                                 yy_cp = yy_c_buf_p;
2828                                 goto yy_find_action;
2829                                 }
2830                         }
2831
2832                 else switch ( yy_get_next_buffer() )
2833                         {
2834                         case EOB_ACT_END_OF_FILE:
2835                                 {
2836                                 yy_did_buffer_switch_on_eof = 0;
2837
2838                                 if ( yywrap() )
2839                                         {
2840                                         /* Note: because we've taken care in
2841                                          * yy_get_next_buffer() to have set up
2842                                          * yytext, we can now set up
2843                                          * yy_c_buf_p so that if some total
2844                                          * hoser (like flex itself) wants to
2845                                          * call the scanner after we return the
2846                                          * YY_NULL, it'll still work - another
2847                                          * YY_NULL will get returned.
2848                                          */
2849                                         yy_c_buf_p = yytext_ptr + YY_MORE_ADJ;
2850
2851                                         yy_act = YY_STATE_EOF(YY_START);
2852                                         goto do_action;
2853                                         }
2854
2855                                 else
2856                                         {
2857                                         if ( ! yy_did_buffer_switch_on_eof )
2858                                                 YY_NEW_FILE;
2859                                         }
2860                                 break;
2861                                 }
2862
2863                         case EOB_ACT_CONTINUE_SCAN:
2864                                 yy_c_buf_p =
2865                                         yytext_ptr + yy_amount_of_matched_text;
2866
2867                                 yy_current_state = yy_get_previous_state();
2868
2869                                 yy_cp = yy_c_buf_p;
2870                                 yy_bp = yytext_ptr + YY_MORE_ADJ;
2871                                 goto yy_match;
2872
2873                         case EOB_ACT_LAST_MATCH:
2874                                 yy_c_buf_p =
2875                                 &yy_current_buffer->yy_ch_buf[yy_n_chars];
2876
2877                                 yy_current_state = yy_get_previous_state();
2878
2879                                 yy_cp = yy_c_buf_p;
2880                                 yy_bp = yytext_ptr + YY_MORE_ADJ;
2881                                 goto yy_find_action;
2882                         }
2883                 break;
2884                 }
2885
2886         default:
2887                 YY_FATAL_ERROR(
2888                         "fatal flex scanner internal error--no action found" );
2889         } /* end of action switch */
2890                 } /* end of scanning one token */
2891         } /* end of yylex */
2892
2893
2894 /* yy_get_next_buffer - try to read in a new buffer
2895  *
2896  * Returns a code representing an action:
2897  *      EOB_ACT_LAST_MATCH -
2898  *      EOB_ACT_CONTINUE_SCAN - continue scanning from current position
2899  *      EOB_ACT_END_OF_FILE - end of file
2900  */
2901
2902 static int yy_get_next_buffer()
2903         {
2904         register char *dest = yy_current_buffer->yy_ch_buf;
2905         register char *source = yytext_ptr;
2906         register int number_to_move, i;
2907         int ret_val;
2908
2909         if ( yy_c_buf_p > &yy_current_buffer->yy_ch_buf[yy_n_chars + 1] )
2910                 YY_FATAL_ERROR(
2911                 "fatal flex scanner internal error--end of buffer missed" );
2912
2913         if ( yy_current_buffer->yy_fill_buffer == 0 )
2914                 { /* Don't try to fill the buffer, so this is an EOF. */
2915                 if ( yy_c_buf_p - yytext_ptr - YY_MORE_ADJ == 1 )
2916                         {
2917                         /* We matched a single character, the EOB, so
2918                          * treat this as a final EOF.
2919                          */
2920                         return EOB_ACT_END_OF_FILE;
2921                         }
2922
2923                 else
2924                         {
2925                         /* We matched some text prior to the EOB, first
2926                          * process it.
2927                          */
2928                         return EOB_ACT_LAST_MATCH;
2929                         }
2930                 }
2931
2932         /* Try to read more data. */
2933
2934         /* First move last chars to start of buffer. */
2935         number_to_move = (int) (yy_c_buf_p - yytext_ptr) - 1;
2936
2937         for ( i = 0; i < number_to_move; ++i )
2938                 *(dest++) = *(source++);
2939
2940         if ( yy_current_buffer->yy_buffer_status == YY_BUFFER_EOF_PENDING )
2941                 /* don't do the read, it's not guaranteed to return an EOF,
2942                  * just force an EOF
2943                  */
2944                 yy_current_buffer->yy_n_chars = yy_n_chars = 0;
2945
2946         else
2947                 {
2948                 int num_to_read =
2949                         yy_current_buffer->yy_buf_size - number_to_move - 1;
2950
2951                 while ( num_to_read <= 0 )
2952                         { /* Not enough room in the buffer - grow it. */
2953 #ifdef YY_USES_REJECT
2954                         YY_FATAL_ERROR(
2955 "input buffer overflow, can't enlarge buffer because scanner uses REJECT" );
2956 #else
2957
2958                         /* just a shorter name for the current buffer */
2959                         YY_BUFFER_STATE b = yy_current_buffer;
2960
2961                         int yy_c_buf_p_offset =
2962                                 (int) (yy_c_buf_p - b->yy_ch_buf);
2963
2964                         if ( b->yy_is_our_buffer )
2965                                 {
2966                                 int new_size = b->yy_buf_size * 2;
2967
2968                                 if ( new_size <= 0 )
2969                                         b->yy_buf_size += b->yy_buf_size / 8;
2970                                 else
2971                                         b->yy_buf_size *= 2;
2972
2973                                 b->yy_ch_buf = (char *)
2974                                         /* Include room in for 2 EOB chars. */
2975                                         yy_flex_realloc( (void *) b->yy_ch_buf,
2976                                                          b->yy_buf_size + 2 );
2977                                 }
2978                         else
2979                                 /* Can't grow it, we don't own it. */
2980                                 b->yy_ch_buf = 0;
2981
2982                         if ( ! b->yy_ch_buf )
2983                                 YY_FATAL_ERROR(
2984                                 "fatal error - scanner input buffer overflow" );
2985
2986                         yy_c_buf_p = &b->yy_ch_buf[yy_c_buf_p_offset];
2987
2988                         num_to_read = yy_current_buffer->yy_buf_size -
2989                                                 number_to_move - 1;
2990 #endif
2991                         }
2992
2993                 if ( num_to_read > YY_READ_BUF_SIZE )
2994                         num_to_read = YY_READ_BUF_SIZE;
2995
2996                 /* Read in more data. */
2997                 YY_INPUT( (&yy_current_buffer->yy_ch_buf[number_to_move]),
2998                         yy_n_chars, num_to_read );
2999
3000                 yy_current_buffer->yy_n_chars = yy_n_chars;
3001                 }
3002
3003         if ( yy_n_chars == 0 )
3004                 {
3005                 if ( number_to_move == YY_MORE_ADJ )
3006                         {
3007                         ret_val = EOB_ACT_END_OF_FILE;
3008                         yyrestart( yyin );
3009                         }
3010
3011                 else
3012                         {
3013                         ret_val = EOB_ACT_LAST_MATCH;
3014                         yy_current_buffer->yy_buffer_status =
3015                                 YY_BUFFER_EOF_PENDING;
3016                         }
3017                 }
3018
3019         else
3020                 ret_val = EOB_ACT_CONTINUE_SCAN;
3021
3022         yy_n_chars += number_to_move;
3023         yy_current_buffer->yy_ch_buf[yy_n_chars] = YY_END_OF_BUFFER_CHAR;
3024         yy_current_buffer->yy_ch_buf[yy_n_chars + 1] = YY_END_OF_BUFFER_CHAR;
3025
3026         yytext_ptr = &yy_current_buffer->yy_ch_buf[0];
3027
3028         return ret_val;
3029         }
3030
3031
3032 /* yy_get_previous_state - get the state just before the EOB char was reached */
3033
3034 static yy_state_type yy_get_previous_state()
3035         {
3036         register yy_state_type yy_current_state;
3037         register char *yy_cp;
3038
3039         yy_current_state = yy_start;
3040         yy_current_state += YY_AT_BOL();
3041         yy_state_ptr = yy_state_buf;
3042         *yy_state_ptr++ = yy_current_state;
3043
3044         for ( yy_cp = yytext_ptr + YY_MORE_ADJ; yy_cp < yy_c_buf_p; ++yy_cp )
3045                 {
3046                 register YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1);
3047                 while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
3048                         {
3049                         yy_current_state = (int) yy_def[yy_current_state];
3050                         if ( yy_current_state >= 711 )
3051                                 yy_c = yy_meta[(unsigned int) yy_c];
3052                         }
3053                 yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
3054                 *yy_state_ptr++ = yy_current_state;
3055                 }
3056
3057         return yy_current_state;
3058         }
3059
3060
3061 /* yy_try_NUL_trans - try to make a transition on the NUL character
3062  *
3063  * synopsis
3064  *      next_state = yy_try_NUL_trans( current_state );
3065  */
3066
3067 #ifdef YY_USE_PROTOS
3068 static yy_state_type yy_try_NUL_trans( yy_state_type yy_current_state )
3069 #else
3070 static yy_state_type yy_try_NUL_trans( yy_current_state )
3071 yy_state_type yy_current_state;
3072 #endif
3073         {
3074         register int yy_is_jam;
3075
3076         register YY_CHAR yy_c = 1;
3077         while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
3078                 {
3079                 yy_current_state = (int) yy_def[yy_current_state];
3080                 if ( yy_current_state >= 711 )
3081                         yy_c = yy_meta[(unsigned int) yy_c];
3082                 }
3083         yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
3084         yy_is_jam = (yy_current_state == 710);
3085         if ( ! yy_is_jam )
3086                 *yy_state_ptr++ = yy_current_state;
3087
3088         return yy_is_jam ? 0 : yy_current_state;
3089         }
3090
3091
3092 #ifndef YY_NO_UNPUT
3093 #ifdef YY_USE_PROTOS
3094 static void yyunput( int c, register char *yy_bp )
3095 #else
3096 static void yyunput( c, yy_bp )
3097 int c;
3098 register char *yy_bp;
3099 #endif
3100         {
3101         register char *yy_cp = yy_c_buf_p;
3102
3103         /* undo effects of setting up yytext */
3104         *yy_cp = yy_hold_char;
3105
3106         if ( yy_cp < yy_current_buffer->yy_ch_buf + 2 )
3107                 { /* need to shift things up to make room */
3108                 /* +2 for EOB chars. */
3109                 register int number_to_move = yy_n_chars + 2;
3110                 register char *dest = &yy_current_buffer->yy_ch_buf[
3111                                         yy_current_buffer->yy_buf_size + 2];
3112                 register char *source =
3113                                 &yy_current_buffer->yy_ch_buf[number_to_move];
3114
3115                 while ( source > yy_current_buffer->yy_ch_buf )
3116                         *--dest = *--source;
3117
3118                 yy_cp += (int) (dest - source);
3119                 yy_bp += (int) (dest - source);
3120                 yy_current_buffer->yy_n_chars =
3121                         yy_n_chars = yy_current_buffer->yy_buf_size;
3122
3123                 if ( yy_cp < yy_current_buffer->yy_ch_buf + 2 )
3124                         YY_FATAL_ERROR( "flex scanner push-back overflow" );
3125                 }
3126
3127         *--yy_cp = (char) c;
3128
3129
3130         yytext_ptr = yy_bp;
3131         yy_hold_char = *yy_cp;
3132         yy_c_buf_p = yy_cp;
3133         }
3134 #endif  /* ifndef YY_NO_UNPUT */
3135
3136
3137 #ifdef __cplusplus
3138 static int yyinput()
3139 #else
3140 static int input()
3141 #endif
3142         {
3143         int c;
3144
3145         *yy_c_buf_p = yy_hold_char;
3146
3147         if ( *yy_c_buf_p == YY_END_OF_BUFFER_CHAR )
3148                 {
3149                 /* yy_c_buf_p now points to the character we want to return.
3150                  * If this occurs *before* the EOB characters, then it's a
3151                  * valid NUL; if not, then we've hit the end of the buffer.
3152                  */
3153                 if ( yy_c_buf_p < &yy_current_buffer->yy_ch_buf[yy_n_chars] )
3154                         /* This was really a NUL. */
3155                         *yy_c_buf_p = '\0';
3156
3157                 else
3158                         { /* need more input */
3159                         int offset = yy_c_buf_p - yytext_ptr;
3160                         ++yy_c_buf_p;
3161
3162                         switch ( yy_get_next_buffer() )
3163                                 {
3164                                 case EOB_ACT_LAST_MATCH:
3165                                         /* This happens because yy_g_n_b()
3166                                          * sees that we've accumulated a
3167                                          * token and flags that we need to
3168                                          * try matching the token before
3169                                          * proceeding.  But for input(),
3170                                          * there's no matching to consider.
3171                                          * So convert the EOB_ACT_LAST_MATCH
3172                                          * to EOB_ACT_END_OF_FILE.
3173                                          */
3174
3175                                         /* Reset buffer status. */
3176                                         yyrestart( yyin );
3177
3178                                         /* fall through */
3179
3180                                 case EOB_ACT_END_OF_FILE:
3181                                         {
3182                                         if ( yywrap() )
3183                                                 return EOF;
3184
3185                                         if ( ! yy_did_buffer_switch_on_eof )
3186                                                 YY_NEW_FILE;
3187 #ifdef __cplusplus
3188                                         return yyinput();
3189 #else
3190                                         return input();
3191 #endif
3192                                         }
3193
3194                                 case EOB_ACT_CONTINUE_SCAN:
3195                                         yy_c_buf_p = yytext_ptr + offset;
3196                                         break;
3197                                 }
3198                         }
3199                 }
3200
3201         c = *(unsigned char *) yy_c_buf_p;      /* cast for 8-bit char's */
3202         *yy_c_buf_p = '\0';     /* preserve yytext */
3203         yy_hold_char = *++yy_c_buf_p;
3204
3205         yy_current_buffer->yy_at_bol = (c == '\n');
3206
3207         return c;
3208         }
3209
3210
3211 #ifdef YY_USE_PROTOS
3212 void yyrestart( FILE *input_file )
3213 #else
3214 void yyrestart( input_file )
3215 FILE *input_file;
3216 #endif
3217         {
3218         if ( ! yy_current_buffer )
3219                 yy_current_buffer = yy_create_buffer( yyin, YY_BUF_SIZE );
3220
3221         yy_init_buffer( yy_current_buffer, input_file );
3222         yy_load_buffer_state();
3223         }
3224
3225
3226 #ifdef YY_USE_PROTOS
3227 void yy_switch_to_buffer( YY_BUFFER_STATE new_buffer )
3228 #else
3229 void yy_switch_to_buffer( new_buffer )
3230 YY_BUFFER_STATE new_buffer;
3231 #endif
3232         {
3233         if ( yy_current_buffer == new_buffer )
3234                 return;
3235
3236         if ( yy_current_buffer )
3237                 {
3238                 /* Flush out information for old buffer. */
3239                 *yy_c_buf_p = yy_hold_char;
3240                 yy_current_buffer->yy_buf_pos = yy_c_buf_p;
3241                 yy_current_buffer->yy_n_chars = yy_n_chars;
3242                 }
3243
3244         yy_current_buffer = new_buffer;
3245         yy_load_buffer_state();
3246
3247         /* We don't actually know whether we did this switch during
3248          * EOF (yywrap()) processing, but the only time this flag
3249          * is looked at is after yywrap() is called, so it's safe
3250          * to go ahead and always set it.
3251          */
3252         yy_did_buffer_switch_on_eof = 1;
3253         }
3254
3255
3256 #ifdef YY_USE_PROTOS
3257 void yy_load_buffer_state( void )
3258 #else
3259 void yy_load_buffer_state()
3260 #endif
3261         {
3262         yy_n_chars = yy_current_buffer->yy_n_chars;
3263         yytext_ptr = yy_c_buf_p = yy_current_buffer->yy_buf_pos;
3264         yyin = yy_current_buffer->yy_input_file;
3265         yy_hold_char = *yy_c_buf_p;
3266         }
3267
3268
3269 #ifdef YY_USE_PROTOS
3270 YY_BUFFER_STATE yy_create_buffer( FILE *file, int size )
3271 #else
3272 YY_BUFFER_STATE yy_create_buffer( file, size )
3273 FILE *file;
3274 int size;
3275 #endif
3276         {
3277         YY_BUFFER_STATE b;
3278
3279         b = (YY_BUFFER_STATE) yy_flex_alloc( sizeof( struct yy_buffer_state ) );
3280         if ( ! b )
3281                 YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" );
3282
3283         b->yy_buf_size = size;
3284
3285         /* yy_ch_buf has to be 2 characters longer than the size given because
3286          * we need to put in 2 end-of-buffer characters.
3287          */
3288         b->yy_ch_buf = (char *) yy_flex_alloc( b->yy_buf_size + 2 );
3289         if ( ! b->yy_ch_buf )
3290                 YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" );
3291
3292         b->yy_is_our_buffer = 1;
3293
3294         yy_init_buffer( b, file );
3295
3296         return b;
3297         }
3298
3299
3300 #ifdef YY_USE_PROTOS
3301 void yy_delete_buffer( YY_BUFFER_STATE b )
3302 #else
3303 void yy_delete_buffer( b )
3304 YY_BUFFER_STATE b;
3305 #endif
3306         {
3307         if ( ! b )
3308                 return;
3309
3310         if ( b == yy_current_buffer )
3311                 yy_current_buffer = (YY_BUFFER_STATE) 0;
3312
3313         if ( b->yy_is_our_buffer )
3314                 yy_flex_free( (void *) b->yy_ch_buf );
3315
3316         yy_flex_free( (void *) b );
3317         }
3318
3319
3320 #ifndef YY_ALWAYS_INTERACTIVE
3321 #ifndef YY_NEVER_INTERACTIVE
3322 extern int isatty YY_PROTO(( int ));
3323 #endif
3324 #endif
3325
3326 #ifdef YY_USE_PROTOS
3327 void yy_init_buffer( YY_BUFFER_STATE b, FILE *file )
3328 #else
3329 void yy_init_buffer( b, file )
3330 YY_BUFFER_STATE b;
3331 FILE *file;
3332 #endif
3333
3334
3335         {
3336         yy_flush_buffer( b );
3337
3338         b->yy_input_file = file;
3339         b->yy_fill_buffer = 1;
3340
3341 #if YY_ALWAYS_INTERACTIVE
3342         b->yy_is_interactive = 1;
3343 #else
3344 #if YY_NEVER_INTERACTIVE
3345         b->yy_is_interactive = 0;
3346 #else
3347         b->yy_is_interactive = file ? (isatty( fileno(file) ) > 0) : 0;
3348 #endif
3349 #endif
3350         }
3351
3352
3353 #ifdef YY_USE_PROTOS
3354 void yy_flush_buffer( YY_BUFFER_STATE b )
3355 #else
3356 void yy_flush_buffer( b )
3357 YY_BUFFER_STATE b;
3358 #endif
3359
3360         {
3361         if ( ! b )
3362                 return;
3363
3364         b->yy_n_chars = 0;
3365
3366         /* We always need two end-of-buffer characters.  The first causes
3367          * a transition to the end-of-buffer state.  The second causes
3368          * a jam in that state.
3369          */
3370         b->yy_ch_buf[0] = YY_END_OF_BUFFER_CHAR;
3371         b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR;
3372
3373         b->yy_buf_pos = &b->yy_ch_buf[0];
3374
3375         b->yy_at_bol = 1;
3376         b->yy_buffer_status = YY_BUFFER_NEW;
3377
3378         if ( b == yy_current_buffer )
3379                 yy_load_buffer_state();
3380         }
3381
3382
3383 #ifndef YY_NO_SCAN_BUFFER
3384 #ifdef YY_USE_PROTOS
3385 YY_BUFFER_STATE yy_scan_buffer( char *base, yy_size_t size )
3386 #else
3387 YY_BUFFER_STATE yy_scan_buffer( base, size )
3388 char *base;
3389 yy_size_t size;
3390 #endif
3391         {
3392         YY_BUFFER_STATE b;
3393
3394         if ( size < 2 ||
3395              base[size-2] != YY_END_OF_BUFFER_CHAR ||
3396              base[size-1] != YY_END_OF_BUFFER_CHAR )
3397                 /* They forgot to leave room for the EOB's. */
3398                 return 0;
3399
3400         b = (YY_BUFFER_STATE) yy_flex_alloc( sizeof( struct yy_buffer_state ) );
3401         if ( ! b )
3402                 YY_FATAL_ERROR( "out of dynamic memory in yy_scan_buffer()" );
3403
3404         b->yy_buf_size = size - 2;      /* "- 2" to take care of EOB's */
3405         b->yy_buf_pos = b->yy_ch_buf = base;
3406         b->yy_is_our_buffer = 0;
3407         b->yy_input_file = 0;
3408         b->yy_n_chars = b->yy_buf_size;
3409         b->yy_is_interactive = 0;
3410         b->yy_at_bol = 1;
3411         b->yy_fill_buffer = 0;
3412         b->yy_buffer_status = YY_BUFFER_NEW;
3413
3414         yy_switch_to_buffer( b );
3415
3416         return b;
3417         }
3418 #endif
3419
3420
3421 #ifndef YY_NO_SCAN_STRING
3422 #ifdef YY_USE_PROTOS
3423 YY_BUFFER_STATE yy_scan_string( yyconst char *yy_str )
3424 #else
3425 YY_BUFFER_STATE yy_scan_string( yy_str )
3426 yyconst char *yy_str;
3427 #endif
3428         {
3429         int len;
3430         for ( len = 0; yy_str[len]; ++len )
3431                 ;
3432
3433         return yy_scan_bytes( yy_str, len );
3434         }
3435 #endif
3436
3437
3438 #ifndef YY_NO_SCAN_BYTES
3439 #ifdef YY_USE_PROTOS
3440 YY_BUFFER_STATE yy_scan_bytes( yyconst char *bytes, int len )
3441 #else
3442 YY_BUFFER_STATE yy_scan_bytes( bytes, len )
3443 yyconst char *bytes;
3444 int len;
3445 #endif
3446         {
3447         YY_BUFFER_STATE b;
3448         char *buf;
3449         yy_size_t n;
3450         int i;
3451
3452         /* Get memory for full buffer, including space for trailing EOB's. */
3453         n = len + 2;
3454         buf = (char *) yy_flex_alloc( n );
3455         if ( ! buf )
3456                 YY_FATAL_ERROR( "out of dynamic memory in yy_scan_bytes()" );
3457
3458         for ( i = 0; i < len; ++i )
3459                 buf[i] = bytes[i];
3460
3461         buf[len] = buf[len+1] = YY_END_OF_BUFFER_CHAR;
3462
3463         b = yy_scan_buffer( buf, n );
3464         if ( ! b )
3465                 YY_FATAL_ERROR( "bad buffer in yy_scan_bytes()" );
3466
3467         /* It's okay to grow etc. this buffer, and we should throw it
3468          * away when we're done.
3469          */
3470         b->yy_is_our_buffer = 1;
3471
3472         return b;
3473         }
3474 #endif
3475
3476
3477 #ifndef YY_NO_PUSH_STATE
3478 #ifdef YY_USE_PROTOS
3479 static void yy_push_state( int new_state )
3480 #else
3481 static void yy_push_state( new_state )
3482 int new_state;
3483 #endif
3484         {
3485         if ( yy_start_stack_ptr >= yy_start_stack_depth )
3486                 {
3487                 yy_size_t new_size;
3488
3489                 yy_start_stack_depth += YY_START_STACK_INCR;
3490                 new_size = yy_start_stack_depth * sizeof( int );
3491
3492                 if ( ! yy_start_stack )
3493                         yy_start_stack = (int *) yy_flex_alloc( new_size );
3494
3495                 else
3496                         yy_start_stack = (int *) yy_flex_realloc(
3497                                         (void *) yy_start_stack, new_size );
3498
3499                 if ( ! yy_start_stack )
3500                         YY_FATAL_ERROR(
3501                         "out of memory expanding start-condition stack" );
3502                 }
3503
3504         yy_start_stack[yy_start_stack_ptr++] = YY_START;
3505
3506         BEGIN(new_state);
3507         }
3508 #endif
3509
3510
3511 #ifndef YY_NO_POP_STATE
3512 static void yy_pop_state()
3513         {
3514         if ( --yy_start_stack_ptr < 0 )
3515                 YY_FATAL_ERROR( "start-condition stack underflow" );
3516
3517         BEGIN(yy_start_stack[yy_start_stack_ptr]);
3518         }
3519 #endif
3520
3521
3522 #ifndef YY_NO_TOP_STATE
3523 static int yy_top_state()
3524         {
3525         return yy_start_stack[yy_start_stack_ptr - 1];
3526         }
3527 #endif
3528
3529 #ifndef YY_EXIT_FAILURE
3530 #define YY_EXIT_FAILURE 2
3531 #endif
3532
3533 #ifdef YY_USE_PROTOS
3534 static void yy_fatal_error( yyconst char msg[] )
3535 #else
3536 static void yy_fatal_error( msg )
3537 char msg[];
3538 #endif
3539         {
3540         (void) fprintf( stderr, "%s\n", msg );
3541         exit( YY_EXIT_FAILURE );
3542         }
3543
3544
3545
3546 /* Redefine yyless() so it works in section 3 code. */
3547
3548 #undef yyless
3549 #define yyless(n) \
3550         do \
3551                 { \
3552                 /* Undo effects of setting up yytext. */ \
3553                 yytext[yyleng] = yy_hold_char; \
3554                 yy_c_buf_p = yytext + n; \
3555                 yy_hold_char = *yy_c_buf_p; \
3556                 *yy_c_buf_p = '\0'; \
3557                 yyleng = n; \
3558                 } \
3559         while ( 0 )
3560
3561
3562 /* Internal utility routines. */
3563
3564 #ifndef yytext_ptr
3565 #ifdef YY_USE_PROTOS
3566 static void yy_flex_strncpy( char *s1, yyconst char *s2, int n )
3567 #else
3568 static void yy_flex_strncpy( s1, s2, n )
3569 char *s1;
3570 yyconst char *s2;
3571 int n;
3572 #endif
3573         {
3574         register int i;
3575         for ( i = 0; i < n; ++i )
3576                 s1[i] = s2[i];
3577         }
3578 #endif
3579
3580 #ifdef YY_NEED_STRLEN
3581 #ifdef YY_USE_PROTOS
3582 static int yy_flex_strlen( yyconst char *s )
3583 #else
3584 static int yy_flex_strlen( s )
3585 yyconst char *s;
3586 #endif
3587         {
3588         register int n;
3589         for ( n = 0; s[n]; ++n )
3590                 ;
3591
3592         return n;
3593         }
3594 #endif
3595
3596
3597 #ifdef YY_USE_PROTOS
3598 static void *yy_flex_alloc( yy_size_t size )
3599 #else
3600 static void *yy_flex_alloc( size )
3601 yy_size_t size;
3602 #endif
3603         {
3604         return (void *) malloc( size );
3605         }
3606
3607 #ifdef YY_USE_PROTOS
3608 static void *yy_flex_realloc( void *ptr, yy_size_t size )
3609 #else
3610 static void *yy_flex_realloc( ptr, size )
3611 void *ptr;
3612 yy_size_t size;
3613 #endif
3614         {
3615         /* The cast to (char *) in the following accommodates both
3616          * implementations that use char* generic pointers, and those
3617          * that use void* generic pointers.  It works with the latter
3618          * because both ANSI C and C++ allow castless assignment from
3619          * any pointer type to void*, and deal with argument conversions
3620          * as though doing an assignment.
3621          */
3622         return (void *) realloc( (char *) ptr, size );
3623         }
3624
3625 #ifdef YY_USE_PROTOS
3626 static void yy_flex_free( void *ptr )
3627 #else
3628 static void yy_flex_free( ptr )
3629 void *ptr;
3630 #endif
3631         {
3632         free( ptr );
3633         }
3634
3635 #if YY_MAIN
3636 int main()
3637         {
3638         yylex();
3639         return 0;
3640         }
3641 #endif
3642
3643
3644
3645 static char *StringToLex;
3646
3647 #ifndef FLEX_SCANNER
3648 static FILE *lexFP;
3649
3650 static int input()
3651 {
3652     int ret;
3653     
3654     if (StringToLex != NULL) {
3655         ret = *StringToLex;
3656         if (ret == NULLCHAR)
3657           ret = EOF;
3658         else
3659           StringToLex++;
3660     } else if (unputCount > 0) {
3661         ret = unputBuffer[--unputCount];
3662     } else {
3663         ret = fgetc(lexFP);
3664     }    
3665
3666     if (ret == EOF) 
3667       return 0;
3668     else
3669       return ret;
3670 }
3671
3672 /*
3673  * Return offset of next pattern within current file
3674  */
3675 int yyoffset()
3676 {
3677     int offset = ftell(lexFP) - unputCount;
3678
3679     if (offset < 0) {
3680         offset = 0;
3681     }
3682     return(offset);
3683 }
3684  
3685 static void output(ch)
3686      int ch;
3687 {
3688     fprintf(stderr, "PARSER BUG: unmatched character '%c' (0%o)\n",
3689             ch, ch);
3690 }
3691
3692 static void unput(ch)
3693      int ch;
3694 {
3695     if (ch == 0) return;
3696     if (StringToLex != NULL) {
3697         StringToLex--;
3698     } else {
3699         if (unputCount >= UNPUT_BUF_SIZE)
3700           fprintf(stderr, "PARSER BUG: unput buffer overflow '%c' (0%o)\n",
3701                   ch, ch);
3702         unputBuffer[unputCount++] = ch;
3703     }
3704 }
3705
3706 /* Get ready to lex from a new file.  Kludge below sticks
3707    an artificial newline at the front of the file, which the
3708    above grammar ignores, but which makes ^ at start of pattern
3709    match at the real start of the file.
3710 */
3711 void yynewfile(f)
3712      FILE *f;
3713 {
3714     lexFP = f;
3715     StringToLex = NULL;
3716     unputCount = 0;
3717     unput('\n'); /* kludge */
3718 }
3719
3720 /* Get ready to lex from a string.  ^ at start of pattern WON'T
3721    match at the start of the string!
3722 */
3723 void yynewstr(s)
3724      char *s;
3725 {
3726     lexFP = NULL;
3727     StringToLex = s;
3728     unputCount = 0;
3729 }
3730 #endif /*!FLEX_SCANNER*/
3731
3732 #ifdef FLEX_SCANNER
3733 void my_yy_input(buf, result, max_size)
3734      char *buf;
3735      int *result;
3736      int max_size;
3737 {
3738     int count;
3739
3740     if (StringToLex != NULL) {
3741         count = 0;
3742         while (*StringToLex != NULLCHAR) {
3743             *buf++ = *StringToLex++;
3744             count++;
3745         }
3746         *result = count;
3747         return;
3748     } else {
3749         count = fread(buf, 1, max_size, yyin);
3750         if (count == 0) {
3751             *result = YY_NULL;
3752         } else {
3753             *result = count;
3754         }
3755         return;
3756     }    
3757 }
3758
3759 static YY_BUFFER_STATE my_file_buffer = NULL;
3760
3761 /*
3762     Return offset of next pattern in the current file.
3763 */
3764 int yyoffset()
3765 {
3766     int pos = yy_c_buf_p - yy_current_buffer->yy_ch_buf;
3767
3768     return(ftell(yy_current_buffer->yy_input_file) -
3769          yy_n_chars + pos);
3770 }
3771
3772
3773 void yynewstr(s)
3774      char *s;
3775 {
3776     if (my_file_buffer != NULL)
3777       yy_delete_buffer(my_file_buffer);
3778     StringToLex = s;
3779     my_file_buffer = yy_create_buffer(stdin, YY_BUF_SIZE);
3780     yy_switch_to_buffer(my_file_buffer);
3781 }
3782
3783 void yynewfile(f)
3784      FILE *f;
3785 {
3786     if (my_file_buffer != NULL)
3787       yy_delete_buffer(my_file_buffer);
3788     StringToLex = NULL;
3789     my_file_buffer = yy_create_buffer(f, YY_BUF_SIZE);
3790     yy_switch_to_buffer(my_file_buffer);
3791 }
3792 #endif /*FLEX_SCANNER*/
3793
3794 int yywrap()
3795 {
3796     return TRUE;
3797 }
3798
3799 /* Parse a move from the given string s */
3800 /* ^ at start of pattern WON'T work here unless using flex */
3801 ChessMove yylexstr(boardIndex, s)
3802      int boardIndex;
3803      char *s;
3804 {
3805     ChessMove ret;
3806     char *oldStringToLex;
3807 #ifdef FLEX_SCANNER
3808     YY_BUFFER_STATE buffer, oldBuffer;
3809 #endif
3810     
3811     yyboardindex = boardIndex;
3812     oldStringToLex = StringToLex;
3813     StringToLex = s;
3814 #ifdef FLEX_SCANNER
3815     buffer = yy_create_buffer(stdin, YY_BUF_SIZE);
3816     oldBuffer = YY_CURRENT_BUFFER;
3817     yy_switch_to_buffer(buffer);
3818 #endif /*FLEX_SCANNER*/
3819
3820     ret = (ChessMove) yylex();
3821
3822 #ifdef FLEX_SCANNER
3823     if (oldBuffer != NULL) 
3824       yy_switch_to_buffer(oldBuffer);
3825     yy_delete_buffer(buffer);
3826 #endif /*FLEX_SCANNER*/
3827     StringToLex = oldStringToLex;
3828
3829     return ret;
3830 }