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