Fix for UBSan build
[platform/upstream/doxygen.git] / src / pre.cpp
1
2 #line 3 "<stdout>"
3
4 #define  YY_INT_ALIGNED short int
5
6 /* A lexical scanner generated by flex */
7
8 #define yy_create_buffer preYY_create_buffer
9 #define yy_delete_buffer preYY_delete_buffer
10 #define yy_flex_debug preYY_flex_debug
11 #define yy_init_buffer preYY_init_buffer
12 #define yy_flush_buffer preYY_flush_buffer
13 #define yy_load_buffer_state preYY_load_buffer_state
14 #define yy_switch_to_buffer preYY_switch_to_buffer
15 #define yyin preYYin
16 #define yyleng preYYleng
17 #define yylex preYYlex
18 #define yylineno preYYlineno
19 #define yyout preYYout
20 #define yyrestart preYYrestart
21 #define yytext preYYtext
22 #define yywrap preYYwrap
23 #define yyalloc preYYalloc
24 #define yyrealloc preYYrealloc
25 #define yyfree preYYfree
26
27 #define FLEX_SCANNER
28 #define YY_FLEX_MAJOR_VERSION 2
29 #define YY_FLEX_MINOR_VERSION 5
30 #define YY_FLEX_SUBMINOR_VERSION 35
31 #if YY_FLEX_SUBMINOR_VERSION > 0
32 #define FLEX_BETA
33 #endif
34
35 /* First, we deal with  platform-specific or compiler-specific issues. */
36
37 /* begin standard C headers. */
38 #include <stdio.h>
39 #include <string.h>
40 #include <errno.h>
41 #include <stdlib.h>
42
43 /* end standard C headers. */
44
45 /* flex integer type definitions */
46
47 #ifndef FLEXINT_H
48 #define FLEXINT_H
49
50 /* C99 systems have <inttypes.h>. Non-C99 systems may or may not. */
51
52 #if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
53
54 /* C99 says to define __STDC_LIMIT_MACROS before including stdint.h,
55  * if you want the limit (max/min) macros for int types. 
56  */
57 #ifndef __STDC_LIMIT_MACROS
58 #define __STDC_LIMIT_MACROS 1
59 #endif
60
61 #include <inttypes.h>
62 typedef int8_t flex_int8_t;
63 typedef uint8_t flex_uint8_t;
64 typedef int16_t flex_int16_t;
65 typedef uint16_t flex_uint16_t;
66 typedef int32_t flex_int32_t;
67 typedef uint32_t flex_uint32_t;
68 typedef uint64_t flex_uint64_t;
69 #else
70 typedef signed char flex_int8_t;
71 typedef short int flex_int16_t;
72 typedef int flex_int32_t;
73 typedef unsigned char flex_uint8_t; 
74 typedef unsigned short int flex_uint16_t;
75 typedef unsigned int flex_uint32_t;
76 #endif /* ! C99 */
77
78 /* Limits of integral types. */
79 #ifndef INT8_MIN
80 #define INT8_MIN               (-128)
81 #endif
82 #ifndef INT16_MIN
83 #define INT16_MIN              (-32767-1)
84 #endif
85 #ifndef INT32_MIN
86 #define INT32_MIN              (-2147483647-1)
87 #endif
88 #ifndef INT8_MAX
89 #define INT8_MAX               (127)
90 #endif
91 #ifndef INT16_MAX
92 #define INT16_MAX              (32767)
93 #endif
94 #ifndef INT32_MAX
95 #define INT32_MAX              (2147483647)
96 #endif
97 #ifndef UINT8_MAX
98 #define UINT8_MAX              (255U)
99 #endif
100 #ifndef UINT16_MAX
101 #define UINT16_MAX             (65535U)
102 #endif
103 #ifndef UINT32_MAX
104 #define UINT32_MAX             (4294967295U)
105 #endif
106
107 #endif /* ! FLEXINT_H */
108
109 #ifdef __cplusplus
110
111 /* The "const" storage-class-modifier is valid. */
112 #define YY_USE_CONST
113
114 #else   /* ! __cplusplus */
115
116 /* C99 requires __STDC__ to be defined as 1. */
117 #if defined (__STDC__)
118
119 #define YY_USE_CONST
120
121 #endif  /* defined (__STDC__) */
122 #endif  /* ! __cplusplus */
123
124 #ifdef YY_USE_CONST
125 #define yyconst const
126 #else
127 #define yyconst
128 #endif
129
130 /* Returned upon end-of-file. */
131 #define YY_NULL 0
132
133 /* Promotes a possibly negative, possibly signed char to an unsigned
134  * integer for use as an array index.  If the signed char is negative,
135  * we want to instead treat it as an 8-bit unsigned char, hence the
136  * double cast.
137  */
138 #define YY_SC_TO_UI(c) ((unsigned int) (unsigned char) c)
139
140 /* Enter a start condition.  This macro really ought to take a parameter,
141  * but we do it the disgusting crufty way forced on us by the ()-less
142  * definition of BEGIN.
143  */
144 #define BEGIN (yy_start) = 1 + 2 *
145
146 /* Translate the current start state into a value that can be later handed
147  * to BEGIN to return to the state.  The YYSTATE alias is for lex
148  * compatibility.
149  */
150 #define YY_START (((yy_start) - 1) / 2)
151 #define YYSTATE YY_START
152
153 /* Action number for EOF rule of a given start state. */
154 #define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1)
155
156 /* Special action meaning "start processing a new file". */
157 #define YY_NEW_FILE preYYrestart(preYYin  )
158
159 #define YY_END_OF_BUFFER_CHAR 0
160
161 /* Size of default input buffer. */
162 #ifndef YY_BUF_SIZE
163 #define YY_BUF_SIZE 262144
164 #endif
165
166 /* The state buf must be large enough to hold one state per character in the main buffer.
167  */
168 #define YY_STATE_BUF_SIZE   ((YY_BUF_SIZE + 2) * sizeof(yy_state_type))
169
170 #ifndef YY_TYPEDEF_YY_BUFFER_STATE
171 #define YY_TYPEDEF_YY_BUFFER_STATE
172 typedef struct yy_buffer_state *YY_BUFFER_STATE;
173 #endif
174
175 #ifndef YY_TYPEDEF_YY_SIZE_T
176 #define YY_TYPEDEF_YY_SIZE_T
177 typedef size_t yy_size_t;
178 #endif
179
180 extern yy_size_t preYYleng;
181
182 extern FILE *preYYin, *preYYout;
183
184 #define EOB_ACT_CONTINUE_SCAN 0
185 #define EOB_ACT_END_OF_FILE 1
186 #define EOB_ACT_LAST_MATCH 2
187
188     #define YY_LESS_LINENO(n)
189     
190 /* Return all but the first "n" matched characters back to the input stream. */
191 #define yyless(n) \
192         do \
193                 { \
194                 /* Undo effects of setting up preYYtext. */ \
195         int yyless_macro_arg = (n); \
196         YY_LESS_LINENO(yyless_macro_arg);\
197                 *yy_cp = (yy_hold_char); \
198                 YY_RESTORE_YY_MORE_OFFSET \
199                 (yy_c_buf_p) = yy_cp = yy_bp + yyless_macro_arg - YY_MORE_ADJ; \
200                 YY_DO_BEFORE_ACTION; /* set up preYYtext again */ \
201                 } \
202         while ( 0 )
203
204 #define unput(c) yyunput( c, (yytext_ptr)  )
205
206 #ifndef YY_STRUCT_YY_BUFFER_STATE
207 #define YY_STRUCT_YY_BUFFER_STATE
208 struct yy_buffer_state
209         {
210         FILE *yy_input_file;
211
212         char *yy_ch_buf;                /* input buffer */
213         char *yy_buf_pos;               /* current position in input buffer */
214
215         /* Size of input buffer in bytes, not including room for EOB
216          * characters.
217          */
218         yy_size_t yy_buf_size;
219
220         /* Number of characters read into yy_ch_buf, not including EOB
221          * characters.
222          */
223         yy_size_t yy_n_chars;
224
225         /* Whether we "own" the buffer - i.e., we know we created it,
226          * and can realloc() it to grow it, and should free() it to
227          * delete it.
228          */
229         int yy_is_our_buffer;
230
231         /* Whether this is an "interactive" input source; if so, and
232          * if we're using stdio for input, then we want to use getc()
233          * instead of fread(), to make sure we stop fetching input after
234          * each newline.
235          */
236         int yy_is_interactive;
237
238         /* Whether we're considered to be at the beginning of a line.
239          * If so, '^' rules will be active on the next match, otherwise
240          * not.
241          */
242         int yy_at_bol;
243
244     int yy_bs_lineno; /**< The line count. */
245     int yy_bs_column; /**< The column count. */
246     
247         /* Whether to try to fill the input buffer when we reach the
248          * end of it.
249          */
250         int yy_fill_buffer;
251
252         int yy_buffer_status;
253
254 #define YY_BUFFER_NEW 0
255 #define YY_BUFFER_NORMAL 1
256         /* When an EOF's been seen but there's still some text to process
257          * then we mark the buffer as YY_EOF_PENDING, to indicate that we
258          * shouldn't try reading from the input source any more.  We might
259          * still have a bunch of tokens to match, though, because of
260          * possible backing-up.
261          *
262          * When we actually see the EOF, we change the status to "new"
263          * (via preYYrestart()), so that the user can continue scanning by
264          * just pointing preYYin at a new input file.
265          */
266 #define YY_BUFFER_EOF_PENDING 2
267
268         };
269 #endif /* !YY_STRUCT_YY_BUFFER_STATE */
270
271 /* Stack of input buffers. */
272 static size_t yy_buffer_stack_top = 0; /**< index of top of stack. */
273 static size_t yy_buffer_stack_max = 0; /**< capacity of stack. */
274 static YY_BUFFER_STATE * yy_buffer_stack = 0; /**< Stack as an array. */
275
276 /* We provide macros for accessing buffer states in case in the
277  * future we want to put the buffer states in a more general
278  * "scanner state".
279  *
280  * Returns the top of the stack, or NULL.
281  */
282 #define YY_CURRENT_BUFFER ( (yy_buffer_stack) \
283                           ? (yy_buffer_stack)[(yy_buffer_stack_top)] \
284                           : NULL)
285
286 /* Same as previous macro, but useful when we know that the buffer stack is not
287  * NULL or when we need an lvalue. For internal use only.
288  */
289 #define YY_CURRENT_BUFFER_LVALUE (yy_buffer_stack)[(yy_buffer_stack_top)]
290
291 /* yy_hold_char holds the character lost when preYYtext is formed. */
292 static char yy_hold_char;
293 static yy_size_t yy_n_chars;            /* number of characters read into yy_ch_buf */
294 yy_size_t preYYleng;
295
296 /* Points to current character in buffer. */
297 static char *yy_c_buf_p = (char *) 0;
298 static int yy_init = 0;         /* whether we need to initialize */
299 static int yy_start = 0;        /* start state number */
300
301 /* Flag which is used to allow preYYwrap()'s to do buffer switches
302  * instead of setting up a fresh preYYin.  A bit of a hack ...
303  */
304 static int yy_did_buffer_switch_on_eof;
305
306 void preYYrestart (FILE *input_file  );
307 void preYY_switch_to_buffer (YY_BUFFER_STATE new_buffer  );
308 YY_BUFFER_STATE preYY_create_buffer (FILE *file,int size  );
309 void preYY_delete_buffer (YY_BUFFER_STATE b  );
310 void preYY_flush_buffer (YY_BUFFER_STATE b  );
311 void preYYpush_buffer_state (YY_BUFFER_STATE new_buffer  );
312 void preYYpop_buffer_state (void );
313
314 static void preYYensure_buffer_stack (void );
315 static void preYY_load_buffer_state (void );
316 static void preYY_init_buffer (YY_BUFFER_STATE b,FILE *file  );
317
318 #define YY_FLUSH_BUFFER preYY_flush_buffer(YY_CURRENT_BUFFER )
319
320 YY_BUFFER_STATE preYY_scan_buffer (char *base,yy_size_t size  );
321 YY_BUFFER_STATE preYY_scan_string (yyconst char *yy_str  );
322 YY_BUFFER_STATE preYY_scan_bytes (yyconst char *bytes,yy_size_t len  );
323
324 void *preYYalloc (yy_size_t  );
325 void *preYYrealloc (void *,yy_size_t  );
326 void preYYfree (void *  );
327
328 #define yy_new_buffer preYY_create_buffer
329
330 #define yy_set_interactive(is_interactive) \
331         { \
332         if ( ! YY_CURRENT_BUFFER ){ \
333         preYYensure_buffer_stack (); \
334                 YY_CURRENT_BUFFER_LVALUE =    \
335             preYY_create_buffer(preYYin,YY_BUF_SIZE ); \
336         } \
337         YY_CURRENT_BUFFER_LVALUE->yy_is_interactive = is_interactive; \
338         }
339
340 #define yy_set_bol(at_bol) \
341         { \
342         if ( ! YY_CURRENT_BUFFER ){\
343         preYYensure_buffer_stack (); \
344                 YY_CURRENT_BUFFER_LVALUE =    \
345             preYY_create_buffer(preYYin,YY_BUF_SIZE ); \
346         } \
347         YY_CURRENT_BUFFER_LVALUE->yy_at_bol = at_bol; \
348         }
349
350 #define YY_AT_BOL() (YY_CURRENT_BUFFER_LVALUE->yy_at_bol)
351
352 /* Begin user sect3 */
353
354 #define preYYwrap(n) 1
355 #define YY_SKIP_YYWRAP
356
357 typedef unsigned char YY_CHAR;
358
359 FILE *preYYin = (FILE *) 0, *preYYout = (FILE *) 0;
360
361 typedef int yy_state_type;
362
363 extern int preYYlineno;
364
365 int preYYlineno = 1;
366
367 extern char *preYYtext;
368 #define yytext_ptr preYYtext
369
370 static yy_state_type yy_get_previous_state (void );
371 static yy_state_type yy_try_NUL_trans (yy_state_type current_state  );
372 static int yy_get_next_buffer (void );
373 static void yy_fatal_error (yyconst char msg[]  );
374
375 /* Done after the current pattern has been matched and before the
376  * corresponding action - sets up preYYtext.
377  */
378 #define YY_DO_BEFORE_ACTION \
379         (yytext_ptr) = yy_bp; \
380         preYYleng = (yy_size_t) (yy_cp - yy_bp); \
381         (yy_hold_char) = *yy_cp; \
382         *yy_cp = '\0'; \
383         (yy_c_buf_p) = yy_cp;
384
385 #define YY_NUM_RULES 169
386 #define YY_END_OF_BUFFER 170
387 /* This struct is not used in this scanner,
388    but its presence is necessary. */
389 struct yy_trans_info
390         {
391         flex_int32_t yy_verify;
392         flex_int32_t yy_nxt;
393         };
394 static yyconst flex_int16_t yy_acclist[1254] =
395     {   0,
396       151,  151,  170,  168,  169,    1,  168,  169,  167,  169,
397         3,  168,  169,  168,  169,  168,  169,    2,  168,  169,
398         6,  168,  169,    1,    6,  168,  169,    6,  168,  169,
399         6,  167,  169,    3,    6,  168,  169,    5,  168,  169,
400         6,  168,  169,    6,  168,  169,    6,  168,  169,    2,
401         6,  168,  169,   54,  168,  169,    1,   54,  168,  169,
402        49,  167,  169,    3,   54,  168,  169,   54,  168,  169,
403        54,  168,  169,   51,   54,  168,  169,   51,   54,  168,
404       169,   51,   54,  168,  169,   51,   54,  168,  169,   51,
405        54,  168,  169,   51,   54,  168,  169,   51,   54,  168,
406
407       169,    2,   54,  168,  169,   78,  168,  169,    1,   78,
408       168,  169,   76,  167,  169,    3,   78,  168,  169,   78,
409       168,  169,   78,  168,  169,   77,   78,  168,  169,   77,
410        78,  168,  169,   77,   78,  168,  169,    2,   78,  168,
411       169,   79,   82,  168,  169,    1,   79,   82,  168,  169,
412        87,  167,  169,    3,   79,   82,  168,  169,   81,   82,
413       168,  169,   82,  168,  169,   82,  168,  169,   79,   82,
414       168,  169,    2,   79,   82,  168,  169,   88,   91,  168,
415       169,    1,   88,   91,  168,  169,    3,   88,   91,  168,
416       169,   90,   91,  168,  169,   88,   91,  168,  169,   88,
417
418        91,  168,  169,   91,  168,  169,    2,   88,   91,  168,
419       169,   23,  168,  169,    1,   23,  168,  169,   24,  167,
420       169,    3,   23,  168,  169,   16,   23,  168,  169,   23,
421       168,  169,   23,  168,  169,   23,  168,  169,   21,   23,
422       168,  169,16404,   23,  168,  169,   21,   23,  168,  169,
423     16404,   11,   23,  168,  169,   12,   23,  168,  169,    2,
424        23,  168,  169,   17,  168,  169,    1,   17,  168,  169,
425        19,  168,  169,   17,  168,  169,   17,  168,  169,  168,
426       169,    2,   17,  168,  169,  168,  169,    1,  168,  169,
427         3,  168,  169,  168,  169,  168,  169,    2,  168,  169,
428
429        93,  168,  169,   97,  168,  169,    1,   97,  168,  169,
430        95,  167,  169,    3,   97,  168,  169,   97,  168,  169,
431        97,  168,  169,   97,  168,  169,    2,   97,  168,  169,
432      8293,  168,  169,16482,16484,16485,  168,  169,  104,  168,
433       169,  105,  168,  169,  103,  168,  169,  168,  169,  107,
434       168,  169,  168,  169,  163,  168,  169,    1,  163,  168,
435       169,  151,  163,  168,  169,  150,  167,  169,    3,  163,
436       168,  169,  154,  163,  168,  169,  146,  163,  168,  169,
437       155,  163,  168,  169,  163,  168,  169,  163,  168,  169,
438       153,  163,  168,  169,  147,  163,  168,  169,  163,  168,
439
440       169,    2,  163,  168,  169,   71,  168,  169,    1,   71,
441       168,  169,   70,  167,  169,    3,   71,  168,  169,   71,
442       168,  169,   71,  168,  169,    2,   71,  168,  169,   69,
443        71,  168,  169,    1,   69,   71,  168,  169,   69,   71,
444       168,  169,   69,   70,  167,  169,    3,   69,   71,  168,
445       169,   68,   71,  168,  169,   69,   71,  168,  169,   69,
446        71,  168,  169,    2,   69,   71,  168,  169,  123,  125,
447       168,  169,    1,  125,  168,  169,  124,  167,  169,    3,
448       123,  125,  168,  169,  125,  168,  169,  125,  168,  169,
449       123,  125,  168,  169,  125,  168,  169,    2,  123,  125,
450
451       168,  169,  126,  148,  168,  169,    1,  126,  148,  168,
452       169,  128,  167,  169,    3,  126,  148,  168,  169,  148,
453       168,  169,  126,  148,  168,  169,  126,  148,  168,  169,
454       147,  148,  168,  169,    2,  126,  148,  168,  169,  125,
455       168,  169,  125,  168,  169,  125,  168,  169,  136,  140,
456       141,  168,  169,    1,  136,  141,  168,  169,  137,  167,
457       169,    3,  136,  140,  141,  168,  169,  140,  141,  168,
458       169,  136,  140,  141,  168,  169,  141,  168,  169,    2,
459       136,  140,  141,  168,  169,  133,  135,  168,  169,    1,
460       135,  168,  169,  134,  167,  169,    3,  133,  135,  168,
461
462       169,  135,  168,  169,  133,  135,  168,  169,  133,  135,
463       168,  169,    2,  133,  135,  168,  169,  144,  145,  168,
464       169,    1,  145,  168,  169,    3,  144,  145,  168,  169,
465       144,  145,  168,  169,  144,  145,  168,  169,    2,  144,
466       145,  168,  169,   60,  168,  169,    1,   60,  168,  169,
467        61,  167,  169,    3,   60,  168,  169,   60,  168,  169,
468        60,  168,  169,   59,   60,  168,  169,   60,  168,  169,
469        59,   60,  168,  169,    2,   60,  168,  169,   67,  168,
470       169,    1,   67,  168,  169,   65,  167,  169,    3,   67,
471       168,  169,   67,  168,  169,   67,  168,  169,   63,   67,
472
473       168,  169,   67,  168,  169,    2,   67,  168,  169,   66,
474        67,  168,  169,   64,   67,  168,  169,  161,  168,  169,
475         1,  161,  168,  169,    3,  161,  168,  169,  158,  161,
476       168,  169,  161,  168,  169,  161,  168,  169,  161,  168,
477       169,    2,  161,  168,  169,  162,  168,  169,    1,  162,
478       168,  169,    3,  162,  168,  169,  160,  162,  168,  169,
479       162,  168,  169,  162,  168,  169,  162,  168,  169,    2,
480       162,  168,  169,   55,  168,  169,   53,  168,  169,    1,
481        53,  168,  169,    3,   53,  168,  169,   53,  168,  169,
482        53,  168,  169,   53,  168,  169,    2,   53,  168,  169,
483
484        31,  168,  169,    1,   31,  168,  169,   29,  167,  169,
485         3,   31,  168,  169,   28,   31,  168,  169,   31,  168,
486       169,   25,   31,  168,  169,   26,   31,  168,  169,   31,
487       168,  169,   31,  168,  169,   30,   31,  168,  169,    2,
488        31,  168,  169,   35,  168,  169,    1,   35,  168,  169,
489         3,   35,  168,  169,   32,   35,  168,  169,   35,  168,
490       169,   35,  168,  169,   35,  168,  169,    2,   35,  168,
491       169,  119,  168,  169,    1,  119,  168,  169,    3,  119,
492       168,  169,  119,  168,  169,  119,  168,  169,  117,  119,
493       168,  169,    2,  119,  168,  169,  165,  166,    6,    6,
494
495         5,    6,   51,   51,   51,   51,   51,   51,   51,   51,
496        51,   51,   86,  165,   84,  166,   77,   77,   77,   77,
497        79,   79,   88,   85,   88,  165,   83,   88,  166,   88,
498        89, 8212,   21,16404,   22,   21,16404,   17,   17,  165,
499        17,  166,   17,   18,   94,  165,  166,   92,   93,   95,
500       165,  166,   96, 8293, 8292, 8290, 8293,16482,16484,16485,
501       105,  104,  105,  103,  107,  107,  102,  151,  152,  108,
502       165,  109,  166,  147,  149,   69,   69,   68,  123,  110,
503       112,  165,  111,  166,  123,  126,  127,  126,  166,  126,
504       122,  122,  165,  136,  140,  136,  140,  138,  140,  165,
505
506       139,  140,  166,  136,  140,  133,  130,  132,  165,  131,
507       133,  166,  133,  144,  142,  144,  165,  143,  144,  166,
508       144,   59,   56,   59,   63,   62,   64,  157,  165,  156,
509       166,  159,   55,   52,   33,  165,   33,  166,   34,  117,
510       165,  166,    4,16391,   51,   51,   51,   51,   51,   43,
511        51,   51,   51,   51,   51,   51,   86,   86,  165,   84,
512        84,  166,   77,   77,   77,   72,   77,   77,   80,    4,
513        79,   85,   88,   85,   85,   88,  165,   83,   88,   83,
514        83,   88,  166,    4,   88,   15,   15,   21,16404,   17,
515       165,   17,  166,    4,   17,  165,  166,    4,    4,   94,
516
517       165,  166,    4,  106,  152,  108,  108,  165,  109,  109,
518       166,  111,  166,    4,  123,  126,  166,    4,  126,  121,
519       140,  165,  140,  166,    4,  136,  140,    4,  140,  129,
520       133,  166,    4,  133,  144,  165,  144,  166,    4,  144,
521        59,  156,  166,   27,  164,16391,    9, 8199,   51,   51,
522        51,   51,   51,   51,   51,   51,   51,   51,   51,   86,
523       164,   77,   73,   77,   77,   77,   80,   85,   88,  164,
524        14,   13,   14,   21,16404,   17,  164,  164,  164,   99,
525       107,  111,  113,  140,  164,  144,  164,   59,   27, 8199,
526         9,   51,   51,   44,   47,   45,   45,   51,   51,   51,
527
528        51,   51,   51,   51,   51,   74,   77,   75,   77,   77,
529        13,   21,16404,  115,   59,    8,    9,   51,   51,   48,
530        40,   39,   51,   51,   51,   51,   46,   21,16404,  114,
531       116,  118,   59,    9,   38,   42,   41,16420,   37,   10,
532        59,    9, 8228,   58,   57,    9, 8228,  120,    9,    9,
533        50,    9,    9
534     } ;
535
536 static yyconst flex_int16_t yy_accept[1173] =
537     {   0,
538         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
539         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
540         1,    1,    1,    1,    1,    1,    1,    2,    3,    3,
541         3,    3,    3,    3,    3,    3,    3,    3,    3,    3,
542         3,    3,    3,    3,    3,    3,    3,    3,    3,    3,
543         3,    3,    3,    3,    3,    3,    3,    3,    3,    3,
544         3,    3,    3,    3,    3,    3,    3,    4,    6,    9,
545        11,   14,   16,   18,   21,   24,   28,   31,   34,   38,
546        41,   44,   47,   50,   54,   57,   61,   64,   68,   71,
547        74,   78,   82,   86,   90,   94,   98,  102,  106,  109,
548
549       113,  116,  120,  123,  126,  130,  134,  138,  142,  146,
550       151,  154,  159,  163,  166,  169,  173,  178,  182,  187,
551       192,  196,  200,  204,  207,  212,  215,  219,  222,  226,
552       230,  233,  236,  239,  244,  247,  252,  256,  260,  264,
553       267,  271,  274,  277,  280,  282,  286,  288,  291,  294,
554       296,  298,  301,  304,  307,  311,  314,  318,  321,  324,
555       327,  331,  337,  339,  342,  345,  348,  350,  353,  355,
556       358,  362,  366,  369,  373,  377,  381,  385,  388,  391,
557       395,  399,  402,  406,  409,  413,  416,  420,  423,  426,
558       430,  434,  439,  443,  447,  452,  456,  460,  464,  469,
559
560       473,  477,  480,  485,  488,  491,  495,  498,  503,  507,
561       512,  515,  520,  523,  527,  531,  535,  540,  543,  546,
562       549,  554,  559,  562,  568,  572,  577,  580,  586,  590,
563       594,  597,  602,  605,  609,  613,  618,  622,  626,  631,
564       635,  639,  644,  647,  651,  654,  658,  661,  664,  668,
565       671,  675,  679,  682,  686,  689,  693,  696,  699,  703,
566       706,  710,  714,  718,  721,  725,  729,  733,  736,  739,
567       742,  746,  749,  753,  757,  761,  764,  767,  770,  774,
568       777,  780,  784,  788,  791,  794,  797,  801,  804,  808,
569       811,  815,  819,  822,  826,  830,  833,  836,  840,  844,
570
571       847,  851,  855,  859,  862,  865,  868,  872,  875,  879,
572       883,  886,  889,  893,  897,  898,  899,  899,  900,  901,
573       902,  903,  903,  903,  903,  904,  905,  906,  907,  908,
574       909,  910,  911,  912,  913,  915,  917,  918,  919,  920,
575       921,  922,  922,  922,  923,  924,  927,  930,  931,  932,
576       932,  932,  932,  933,  935,  936,  936,  938,  939,  941,
577       943,  944,  945,  945,  946,  947,  948,  948,  948,  949,
578       950,  950,  951,  952,  953,  953,  954,  954,  955,  956,
579       957,  961,  961,  961,  962,  963,  964,  965,  965,  966,
580       966,  967,  968,  969,  969,  970,  972,  974,  975,  976,
581
582       976,  977,  978,  979,  980,  981,  983,  985,  986,  986,
583       986,  986,  986,  986,  986,  986,  986,  986,  986,  987,
584       988,  990,  991,  992,  994,  994,  994,  996,  997,  998,
585      1001, 1004, 1006, 1006, 1007, 1008, 1010, 1013, 1014, 1015,
586      1018, 1021, 1022, 1023, 1024, 1024, 1025, 1026, 1027, 1028,
587      1030, 1032, 1033, 1034, 1035, 1035, 1035, 1035, 1037, 1039,
588      1040, 1041, 1042, 1043, 1044, 1044, 1044, 1045, 1046, 1047,
589      1048, 1049, 1050, 1051, 1052, 1053, 1054, 1055, 1056, 1057,
590      1058, 1060, 1061, 1063, 1064, 1065, 1066, 1067, 1068, 1069,
591      1069, 1070, 1070, 1070, 1072, 1074, 1075, 1078, 1080, 1081,
592
593      1084, 1086, 1087, 1087, 1088, 1088, 1088, 1090, 1092, 1094,
594      1096, 1097, 1098, 1099, 1101, 1102, 1103, 1104, 1104, 1104,
595      1105, 1105, 1106, 1107, 1109, 1110, 1112, 1114, 1116, 1116,
596      1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116,
597      1116, 1116, 1116, 1116, 1116, 1116, 1116, 1118, 1120, 1120,
598      1121, 1123, 1125, 1128, 1130, 1130, 1130, 1131, 1133, 1135,
599      1137, 1139, 1141, 1142, 1144, 1144, 1145, 1145, 1145, 1146,
600      1146, 1147, 1147, 1148, 1148, 1149, 1150, 1151, 1152, 1153,
601      1154, 1155, 1156, 1157, 1158, 1159, 1160, 1162, 1163, 1165,
602      1166, 1167, 1167, 1168, 1168, 1171, 1172, 1174, 1174, 1174,
603
604      1176, 1178, 1179, 1180, 1181, 1182, 1183, 1183, 1183, 1184,
605      1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184,
606      1184, 1184, 1184, 1184, 1184, 1184, 1184, 1186, 1188, 1189,
607      1189, 1190, 1190, 1190, 1190, 1190, 1190, 1191, 1191, 1192,
608      1192, 1193, 1194, 1196, 1197, 1198, 1199, 1200, 1201, 1202,
609      1203, 1204, 1205, 1206, 1207, 1207, 1208, 1210, 1211, 1211,
610      1211, 1212, 1212, 1212, 1214, 1214, 1214, 1214, 1214, 1214,
611      1214, 1214, 1214, 1214, 1215, 1215, 1215, 1215, 1215, 1215,
612      1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215, 1215,
613      1216, 1216, 1216, 1216, 1216, 1216, 1217, 1217, 1218, 1218,
614
615      1219, 1220, 1220, 1220, 1221, 1222, 1223, 1224, 1225, 1226,
616      1227, 1228, 1228, 1228, 1230, 1231, 1231, 1231, 1231, 1231,
617      1231, 1231, 1232, 1233, 1233, 1233, 1233, 1233, 1233, 1233,
618      1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233,
619      1234, 1234, 1234, 1234, 1235, 1235, 1236, 1236, 1237, 1238,
620      1239, 1240, 1240, 1240, 1240, 1240, 1240, 1241, 1241, 1241,
621      1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241,
622      1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1242, 1242,
623      1242, 1242, 1243, 1243, 1244, 1244, 1244, 1244, 1244, 1244,
624      1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244,
625
626      1244, 1244, 1244, 1244, 1244, 1245, 1246, 1246, 1246, 1246,
627      1247, 1247, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248,
628      1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249,
629      1249, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250,
630      1250, 1250, 1250, 1250, 1250, 1250, 1250, 1251, 1251, 1252,
631      1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1253,
632      1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1254, 1254,
633      1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254,
634      1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254,
635      1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254,
636
637      1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254,
638      1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254,
639      1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254,
640      1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254,
641      1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254,
642      1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254,
643      1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254,
644      1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254,
645      1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254,
646      1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254,
647
648      1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254,
649      1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254,
650      1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254,
651      1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254,
652      1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254,
653      1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254,
654      1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254,
655      1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254,
656      1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254,
657      1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254,
658
659      1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254,
660      1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254,
661      1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254,
662      1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254,
663      1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254,
664      1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254,
665      1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254, 1254,
666      1254, 1254
667     } ;
668
669 static yyconst flex_int32_t yy_ec[256] =
670     {   0,
671         1,    1,    1,    1,    1,    2,    1,    1,    3,    4,
672         1,    1,    5,    1,    1,    1,    1,    1,    1,    1,
673         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
674         1,    3,    6,    7,    8,    9,    1,    1,   10,   11,
675        12,   13,    1,   14,   15,   16,   17,   18,   19,   18,
676        18,   18,   18,   18,   18,   20,   20,   21,    1,   22,
677        23,   24,   25,   26,   27,   27,   28,   27,   27,   27,
678        27,   27,   27,   27,   27,   27,   27,   27,   27,   27,
679        27,   27,   27,   27,   27,   27,   27,   27,   27,   27,
680        29,   30,   31,    1,   27,    1,   32,   33,   34,   35,
681
682        36,   37,   38,   39,   40,   41,   42,   43,   44,   45,
683        46,   47,   41,   48,   49,   50,   51,   52,   41,   53,
684        54,   41,   55,    1,   56,    1,    1,    1,    1,    1,
685         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
686         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
687         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
688         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
689         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
690         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
691         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
692
693         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
694         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
695         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
696         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
697         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
698         1,    1,    1,    1,    1
699     } ;
700
701 static yyconst flex_int32_t yy_meta[58] =
702     {   0,
703         1,    2,    3,    4,    5,    6,    7,    1,    1,    8,
704         9,    6,   10,    1,   11,   12,   13,   14,   14,   14,
705         1,   15,    6,    6,    1,   16,   17,   17,    1,   18,
706         1,   17,   17,   17,   17,   17,   17,   17,   17,   17,
707        17,   17,   17,   17,   17,   17,   17,   17,   17,   17,
708        17,   17,   17,   17,    1,    1,    1
709     } ;
710
711 static yyconst flex_int16_t yy_base[1283] =
712     {   0,
713         0,    4,    9,   65,  122,    0,  179,    0,   26,   37,
714       235,  239,  296,    0,  352,  356,  363,  387,  444,    0,
715        54,  500,  531,    0,  585,    0,  642,    0,  504,  698,
716       703,  707,  712,  717,  773,  829,  886,    0,  942,  998,
717       731,  766,  780,  804,  810,  948, 1055,    0, 1112,    0,
718      1158,    0,  959,  976,  952, 1211, 1242,    0, 1215, 1295,
719      1351, 1407, 1302, 1309, 1464,    0, 2845, 5439, 5439, 5439,
720      5439,    2, 2818, 5439, 5439, 5439,   37, 5439, 5439, 5439,
721         3, 2817,   69, 5439, 5439, 5439, 5439, 5439,    5, 2814,
722         0, 2787, 2784,    3,   41, 2758, 2752, 5439, 5439, 5439,
723
724      5439, 5439,   10, 2767,    0,    7, 2753, 5439,    0,    0,
725      5439,    0, 5439, 2759,   36, 2762,    0,    0,    0,    0,
726      5439,   64, 2761,    0,    0, 5439, 5439, 5439, 5439, 5439,
727      2748,   78, 2751,   95,   33,  507, 5439, 5439, 5439,    0,
728         0, 5439,   88, 2750,    0,    0,    0,   95,   96,   97,
729       238,  231,   52, 2763, 2758, 5439, 2756,  244,  243,   70,
730      2754,  247,    0, 2750, 2748, 2747, 2724,  250, 2730, 5439,
731      5439,  104, 5439, 5439, 5439, 2717, 5439,   96, 2694, 5439,
732         0,  111, 5439, 5439, 5439, 5439, 5439,  254, 2681, 5439,
733      5439, 5439,  246, 5439, 5439, 5439,  257, 2680, 5439,    0,
734
735      5439, 5439,    0, 2682,  259, 2665, 1496,    0,    0,    0,
736      5439,    0, 2671,  262, 2661,    0,    0, 2664,  265,   81,
737       271,    0, 5439,  278,  268,  373,  250,  362,    0, 5439,
738      5439,    0, 2662,  270, 2653,    0,    0, 5439,    0,  276,
739      2647,    0, 5439, 5439, 5439, 5439,  277, 2641,    0,  367,
740      2623, 5439, 5439, 5439, 5439, 5439,  349, 2628,    0, 2647,
741      5439, 5439,    0, 5439, 5439, 5439, 5439,  361, 2620,    0,
742      5439, 5439, 5439, 5439, 5439,  380, 2619,    0, 5439,    0,
743      5439, 5439, 5439,  382, 2610,  379, 5439, 5439, 5439, 5439,
744      5439, 5439, 2604, 5439, 5439,  383, 2606, 5439, 5439, 5439,
745
746      5439, 5439, 5439,  388, 2601,    0, 5439, 5439, 5439, 5439,
747       389, 2600,    0, 5439, 2610, 2605,    0, 5439,  400, 5439,
748       404,  407,  405,  504,    0, 2581, 2575,  336, 2563,  813,
749      2550, 2561, 2559, 2544, 2565, 2547,    0,  381, 2527,  833,
750         0, 2546,  407, 1544,    0,  506,  412, 1563, 5439, 2545,
751       516,  430, 5439,  534, 5439, 2536,  776,    0, 2522, 2513,
752      1582, 5439,  496, 5439,  520,  723, 1601,  537, 5439,  538,
753      2525, 5439,  538,  539, 1622, 5439, 2522,  543, 5439, 5439,
754       735, 2517,  701, 2517, 2515, 2514, 2506, 2492,  715, 2490,
755       738, 5439,  435, 2496, 2495,  737,  745,    0, 5439, 2493,
756
757      5439,  547, 5439,    0, 5439,  423, 2466, 1641, 1632, 2428,
758      2427, 2425, 2412, 2424, 2419, 2400, 2412, 2403,    0, 5439,
759      2422, 1680, 5439, 2424, 2391,  764,  708,    0,    0, 2420,
760      2410, 1703, 2380,    0,  741, 2411, 2406, 1722,    0, 2405,
761      2399, 1741,    0, 5439, 2410, 2372,    0, 5439,    0, 2394,
762      2389, 5439,    0, 5439, 2391, 2372,  534, 2367, 2354, 5439,
763         0, 2345, 5439, 5439,  715, 2347,  797, 2308, 2309, 2306,
764      2297, 2287, 5439, 2282, 2279, 2260, 2262, 2259, 2256,    0,
765      2274,    0,    0, 2253, 2247, 2230, 5439, 2222, 2222, 2245,
766      5439, 2241,  748,    0,  407,    0,  746,  815,    0,  821,
767
768         0, 5439, 2231, 2228,  822,  859,  983, 2220,    0,    0,
769       787,  765,  836, 5439,  821, 2227, 2217,  868,  836, 5439,
770      2203, 2201, 5439, 2186, 5439, 5439, 2183,    0, 2146, 2134,
771       942, 2129, 2146, 2134, 2100, 2113, 2099,  830, 2086, 2088,
772      2077, 2070, 2074, 2079, 2067, 2069,    0,    0, 2072, 5439,
773      2089,    0,  867,    0, 2059,  871, 5439,    0,    0, 2082,
774         0,    0, 2055, 5439, 2074, 5439, 2072,  994, 5439, 2069,
775      1168,  987, 1243, 1246, 5439, 2044, 2032,  874, 1765, 2039,
776      2038, 2028, 2012, 2003, 2008, 2014,    0, 1011,  810, 2013,
777      2011, 2037, 5439, 1008,  846, 5439, 5439, 1011, 1032, 1254,
778
779         0,  951, 2032, 5439, 5439, 1998, 1978, 1962, 5439, 1960,
780      1949, 1953, 1955, 1938, 1929, 1933, 1933,  878, 1933, 1907,
781      1913, 1899, 1898, 1910, 1890, 1190,    0,    0, 1883, 1916,
782      5439, 1021,  845, 1250, 1319,  945, 1034, 1325, 1333, 1339,
783      1890, 1888, 5439, 5439,  967, 1886, 1822, 1038, 1883, 1869,
784      1881, 1875, 1895, 5439,  992, 1860,    0, 1041, 1873, 1752,
785      5439, 1751, 1171, 1346, 1724, 1174, 1716, 1721, 1709, 1708,
786      1716, 1697, 1366, 1378, 1692, 1690, 1682, 1686, 1685, 1692,
787      1674, 1671, 1665, 1660, 1676, 1675, 1656, 1665, 1652, 1658,
788      1678, 1677, 1381, 1392, 1047, 5439, 1395, 1402, 1524, 1643,
789
790      1674, 1178, 1637, 5439, 1042, 5439, 1211, 1418, 1637, 1667,
791      1665, 1620, 1423, 1877, 1426, 1609, 1601, 1605, 1604, 1616,
792      1595, 1434, 5439, 1438, 1591, 1590, 1585, 1587, 1584, 1569,
793      1567, 1565, 1546, 1547, 1539, 1532, 1539, 1523, 1527, 1527,
794      1560, 1617, 1638, 1657, 1695, 1555, 1224, 1228, 5439, 1441,
795      5439, 1180, 1361, 1448, 1882, 1525, 5439, 1507, 1505, 1504,
796      1499, 1475, 1481, 1488, 1417, 1400, 1381, 1368, 1380, 1361,
797      1374, 1360, 1365, 1333, 1327, 1332, 1301, 1241, 1887, 1891,
798      1897, 1901, 1906,    0, 1296, 1451, 1910, 1328, 1290, 1276,
799      1263, 1261, 1268, 1249,    0, 1219, 1223, 1217, 1210, 1184,
800
801      1143, 1009, 1016,  989, 1307, 5439, 1926, 1936, 1930, 1950,
802      1955,    0,  991, 1579, 1959, 1970,  966,  967,  954, 5439,
803       942,  940,  933,  931,  917,  895,  813, 1975, 1985, 1979,
804      1990, 1998,  723, 1598, 2013, 2004,  698,  702,  509,  474,
805       462,  474,  385, 2023, 2034, 2028, 2053, 2058, 5439, 1678,
806      2062, 2038,  301,  248,  215, 2082, 2093, 2067, 2097, 2106,
807      1718, 2121, 2087,   54, 2126, 2141, 2130, 2136, 2151, 1737,
808      2160, 2155, 2165, 2190, 2018, 2194, 2170, 2179, 2219, 2184,
809      2224, 2229, 2204, 2239, 2249, 2209, 2258, 2268, 2213, 2277,
810      2282, 2243, 2291, 2296, 2262, 2305, 2308, 2273, 2321, 2331,
811
812      2317, 2336, 2341, 2326, 2350, 2353, 2362, 2365, 2380, 2370,
813      2389, 2394, 2374, 2399, 2408, 2385, 2417, 2427, 2438, 2441,
814      2450, 2455, 2461, 2464, 2473, 2476, 2481, 2486, 2491, 2496,
815      2508, 2511, 2520, 2529, 2534, 2539, 2544, 2549, 2554, 2563,
816      2566, 2569, 2578, 2582, 2585, 2597, 2600, 2603, 2612, 2616,
817      2625, 2634, 2638, 2643, 2652, 2657, 2666, 2660, 2671, 2680,
818      2689, 2692, 2697, 2706, 2709, 2719, 2713, 2728, 2738, 2724,
819      2743, 2752, 2733, 2761, 2766, 2777, 2780, 2791, 2796, 2800,
820      2805, 2810, 2814, 2819, 2824, 2830, 2833, 2844, 2850, 2859,
821      2853, 2864, 2873, 2868, 2878, 2887, 2882, 2892, 2902, 2897,
822
823      2907, 2922, 2912, 2927, 2936, 2916, 2945, 2955, 2931, 2950,
824      2965, 2941, 2970, 2990, 2960, 2979, 2995, 2975, 3000, 3014,
825      2984, 3023, 3033, 3004, 3038, 3049, 3009, 3062, 3067, 3028,
826      3076, 3086, 3043, 3081, 3096, 3058, 3091, 3105, 3072, 3114,
827      3125, 3130, 3134, 3139, 3144, 3150, 3159, 3153, 3164, 3179,
828      3168, 3184, 3193, 3173, 3198, 3208, 3188, 3213, 3222, 3202,
829      3227, 3242, 3217, 3247, 3257, 3232, 3262, 3271, 3236, 3281,
830      3291, 3251, 3296, 3306, 3266,   65, 3311, 3276, 3325, 3285,
831      3330, 3300, 3340, 3320, 3345, 3354, 3360, 3365, 3369, 3373,
832      3378, 3383, 3386,    5, 3389, 3393, 3398, 3401, 3407, 3413,
833
834      3418, 3422, 3426, 3431, 3442, 3446, 3454, 3460, 3466, 3471,
835      3475, 3479, 3484, 3487, 3490, 3495, 3499, 3502, 3507, 3513,
836      3519, 3524, 3528, 3532, 3543, 3548, 3555, 3560, 3566, 3572,
837      3577, 3581, 3585, 3588, 3591, 3596, 3601, 3604, 3608, 3613,
838      3619, 3625, 3630, 3634, 3644, 3649, 3657, 3661, 3666, 3672,
839      3678, 3683, 3687, 3690, 3693, 3697, 3702, 3705, 3710, 3714,
840      3719, 3725, 3731, 3736, 3746, 3750, 3758, 3763, 3767, 3772,
841      5439, 3827, 3845, 3863, 3881, 3899, 3917, 3935, 3953, 3971,
842      3989, 4007, 4025, 4043, 4061, 4079, 4097, 4115, 4133, 4151,
843        18,  793, 4169, 4187, 4205, 4222, 4240, 4256, 4273, 4290,
844
845      4308, 4324, 4341, 4356, 4372, 1170, 4389, 4407, 4424, 4442,
846      4459, 4476, 4493, 4511, 1246, 1331, 1361, 4529, 1373, 4547,
847      4565, 4573, 4585, 4600, 1375, 4618, 4636, 1432, 4654, 4672,
848      4689, 4707, 4724, 4742, 4760, 4776, 4793, 4810, 4826, 4843,
849      4858, 4874, 1444, 4891, 4909, 4926, 4944, 4961, 4978, 4995,
850      5013, 1519, 1520, 1524, 1529, 5031, 5048, 5056, 5073, 5091,
851      1543, 5109, 5127, 1581, 5145, 5162, 5180, 5198, 5216, 5234,
852      5252, 5267, 5284, 5301, 5319, 5336, 5353, 5371, 5388, 5403,
853      1600, 5420
854     } ;
855
856 static yyconst flex_int16_t yy_def[1283] =
857     {   0,
858      1172, 1172, 1172, 1173, 1171,    5, 1171,    7, 1174, 1174,
859      1175, 1175, 1171,   13, 1176, 1176, 1177, 1177, 1171,   19,
860      1178, 1178,   19,   23, 1171,   25, 1171,   27, 1179, 1180,
861      1172, 1172, 1172, 1172, 1181, 1181, 1171,   37, 1181, 1181,
862      1182, 1182, 1183, 1183, 1184, 1184, 1171,   47, 1171,   49,
863        49,   51, 1185, 1185, 1186, 1186,   23,   57, 1187, 1187,
864      1188, 1188, 1189, 1189, 1171,   65, 1171, 1171, 1171, 1171,
865      1171, 1171, 1171, 1171, 1171, 1171, 1190, 1171, 1171, 1171,
866      1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171,
867      1191, 1191, 1191, 1191, 1191, 1191, 1191, 1171, 1171, 1171,
868
869      1171, 1171, 1171, 1171, 1192, 1192, 1192, 1171, 1193, 1193,
870      1171, 1193, 1171, 1194, 1171, 1193, 1193, 1195, 1195, 1195,
871      1171, 1195, 1195, 1196, 1195, 1171, 1171, 1171, 1171, 1171,
872      1197, 1171, 1171, 1198, 1171, 1198, 1171, 1171, 1171, 1199,
873      1199, 1171, 1199, 1199, 1200, 1199, 1201, 1201, 1201, 1201,
874      1201, 1201, 1202, 1203, 1203, 1171, 1203, 1203, 1203, 1171,
875      1203, 1204, 1171, 1171, 1171, 1171, 1171, 1205, 1171, 1171,
876      1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171,
877      1206, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171,
878      1171, 1171, 1207, 1171, 1171, 1171, 1171, 1171, 1171, 1208,
879
880      1171, 1171, 1208, 1171, 1171, 1208, 1171, 1208, 1209, 1209,
881      1171, 1209, 1171, 1209, 1209, 1206, 1209, 1171, 1171, 1171,
882      1210, 1211, 1171, 1210, 1212, 1210, 1171, 1210, 1213, 1171,
883      1171, 1213, 1171, 1213, 1213, 1213, 1214, 1171, 1214, 1214,
884      1214, 1214, 1171, 1171, 1171, 1171, 1171, 1171, 1215, 1171,
885      1215, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1216, 1171,
886      1171, 1171, 1217, 1171, 1171, 1171, 1171, 1171, 1171, 1218,
887      1171, 1171, 1171, 1171, 1171, 1171, 1171, 1218, 1171, 1219,
888      1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171,
889      1171, 1171, 1220, 1171, 1171, 1171, 1171, 1171, 1171, 1171,
890
891      1171, 1171, 1171, 1171, 1171, 1221, 1171, 1171, 1171, 1171,
892      1171, 1171, 1222, 1171, 1171, 1171, 1223, 1171, 1190, 1171,
893      1171, 1171, 1224, 1171, 1225, 1225, 1225, 1225, 1225, 1225,
894      1225, 1225, 1225, 1225, 1226, 1227, 1228, 1228, 1228, 1228,
895      1229, 1230, 1231, 1229, 1232, 1233, 1234, 1232, 1171, 1171,
896      1235, 1171, 1171, 1236, 1171, 1171, 1236, 1237, 1237, 1237,
897      1237, 1171, 1238, 1171, 1238, 1238, 1238, 1171, 1171, 1239,
898      1240, 1171, 1240, 1240, 1240, 1171, 1171, 1171, 1171, 1171,
899      1241, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171,
900      1242, 1171, 1171, 1171, 1171, 1171, 1171, 1243, 1171, 1171,
901
902      1171, 1244, 1171, 1245, 1171, 1171, 1171, 1245, 1171, 1171,
903      1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1246, 1171,
904      1246, 1246, 1171, 1171, 1171, 1171, 1247, 1248, 1249, 1249,
905      1249, 1247, 1171, 1250, 1171, 1171, 1250, 1250, 1251, 1251,
906      1251, 1251, 1252, 1171, 1171, 1252, 1253, 1171, 1254, 1171,
907      1171, 1171, 1255, 1171, 1171, 1256, 1257, 1171, 1171, 1171,
908      1258, 1171, 1171, 1171, 1259, 1260, 1171, 1261, 1261, 1261,
909      1261, 1261, 1171, 1261, 1261, 1261, 1261, 1261, 1261, 1262,
910      1262, 1263, 1263, 1264, 1264, 1264, 1171, 1264, 1264, 1265,
911      1171, 1171, 1171, 1266, 1267, 1268, 1267, 1269, 1270, 1269,
912
913      1271, 1171, 1171, 1171, 1171, 1171, 1272, 1273, 1273, 1273,
914      1274, 1274, 1274, 1171, 1275, 1275, 1275, 1171, 1171, 1171,
915      1171, 1171, 1171, 1171, 1171, 1171, 1171, 1245, 1171, 1171,
916      1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171,
917      1171, 1171, 1171, 1171, 1171, 1171, 1246, 1246, 1171, 1171,
918      1249, 1249, 1247, 1249, 1171, 1171, 1171, 1250, 1250, 1251,
919      1251, 1251, 1252, 1171, 1276, 1171, 1171, 1171, 1171, 1260,
920      1277, 1171, 1171, 1171, 1171, 1261, 1261, 1261, 1171, 1261,
921      1261, 1261, 1261, 1261, 1261, 1261, 1262, 1264, 1264, 1264,
922      1264, 1278, 1171, 1171, 1267, 1171, 1171, 1171, 1171, 1272,
923
924      1273, 1274, 1275, 1171, 1171, 1171, 1171, 1171, 1171, 1171,
925      1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171,
926      1171, 1171, 1171, 1171, 1171, 1171, 1249, 1251, 1252, 1279,
927      1171, 1171, 1277, 1277, 1277, 1171, 1277, 1171, 1171, 1171,
928      1261, 1261, 1171, 1171, 1171, 1261, 1171, 1261, 1261, 1261,
929      1261, 1261, 1261, 1171, 1171, 1264, 1264, 1264, 1171, 1171,
930      1171, 1171, 1171, 1272, 1171, 1171, 1171, 1171, 1171, 1171,
931      1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171,
932      1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1252,
933      1171, 1171, 1277, 1277, 1171, 1171, 1171, 1171, 1171, 1261,
934
935      1261, 1171, 1171, 1171, 1171, 1171, 1261, 1261, 1261, 1261,
936      1171, 1171, 1171, 1272, 1171, 1171, 1171, 1171, 1171, 1171,
937      1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171,
938      1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1252,
939      1277, 1277, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1280,
940      1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171,
941      1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171,
942      1171, 1171, 1171, 1171, 1171, 1171, 1171, 1252, 1277, 1277,
943      1171, 1171, 1171, 1281, 1171, 1171, 1171, 1171, 1171, 1171,
944      1171, 1171, 1171, 1171, 1282, 1171, 1171, 1171, 1171, 1171,
945
946      1171, 1171, 1171, 1171, 1171, 1171, 1277, 1277, 1171, 1171,
947      1171, 1281, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171,
948      1171, 1171, 1171, 1171, 1171, 1171, 1171, 1277, 1277, 1171,
949      1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171,
950      1171, 1171, 1171, 1277, 1277, 1171, 1171, 1171, 1171, 1171,
951      1171, 1171, 1171, 1171, 1171, 1277, 1277, 1171, 1171, 1171,
952      1171, 1171, 1171, 1171, 1277, 1277, 1171, 1171, 1171, 1171,
953      1171, 1171, 1277, 1277, 1171, 1171, 1171, 1171, 1171, 1171,
954      1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171,
955      1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171,
956
957      1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171,
958      1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171,
959      1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171,
960      1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171,
961      1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171,
962      1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171,
963      1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171,
964      1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171,
965      1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171,
966      1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171,
967
968      1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171,
969      1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171,
970      1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171,
971      1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171,
972      1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171,
973      1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171,
974      1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171,
975      1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171,
976      1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171,
977      1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171,
978
979      1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171,
980      1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171,
981      1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171,
982      1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171,
983      1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171,
984      1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171,
985      1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171,
986         0, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171,
987      1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171,
988      1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171,
989
990      1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171,
991      1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171,
992      1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171,
993      1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171,
994      1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171,
995      1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171,
996      1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171,
997      1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171,
998      1171, 1171
999     } ;
1000
1001 static yyconst flex_int16_t yy_nxt[5497] =
1002     {   0,
1003      1171,   69,  383,   70,   71,   69,  364,   70,   71, 1171,
1004        69,  384,   70,   71,  315,  315,   72,  315,  316,  316,
1005        72,  316,  335,  364,   73,   72,  336,  110,   73,  111,
1006       112,  325,  113,   73,  325,  114,  355,  356,  110,  319,
1007       111,  112,  115,  113,  320,  328,  114,  329,  335,  338,
1008       116,  339,  336,  115,  368,  155,   74,  156,  157,  757,
1009        74,  116,  369,  321,  321,   74,   76,   77,   78,   79,
1010       158,  322,   80,  376,  377,  353,  346,  330,  159,  323,
1011       347,   81,  117,  160,  331,  332,  324,  324,  324,   82,
1012       315,   83,   83,  117,  316,  324,  324,  352,  352,  352,
1013
1014       359,  364,  364,  364,  360,  353,  393,  550,  396,  365,
1015       161,  394,  397,  366,  399,  400,  425,  426,  364,  364,
1016       364,   84,   85,   86,   85,   87,   88,   85,   85,   85,
1017        85,   85,   85,   85,   85,   85,   85,   85,   89,   85,
1018        85,   85,   85,   85,   85,   85,   90,   85,   91,   91,
1019        85,   85,   85,   91,   91,   92,   93,   94,   91,   91,
1020        91,   95,   91,   91,   91,   91,   91,   91,   96,   91,
1021        91,   91,   97,   91,   91,   91,   85,   85,   98,   99,
1022       100,   99,  101,  102,   99,   99,   99,   99,   99,   99,
1023        99,   99,   99,   99,   99,  103,   99,   99,   99,   99,
1024
1025        99,   99,   99,  104,   99,  105,  105,   99,   99,   99,
1026       105,  105,  105,  105,  106,  105,  105,  105,  107,  105,
1027       105,  105,  105,  105,  105,  105,  105,  105,  105,  105,
1028       105,  105,  105,   99,   99,  108,  119,  364,   70,  120,
1029       119,  121,   70,  120,  364,  121,  372,  372,  402,  378,
1030       379,  122,  389,  403,  364,  122,  373,  380,  550,  123,
1031       374,  364,  367,  123,  124,  390,  335,  375,  124,  335,
1032       336,  406,  428,  336,  315,  407,  382,  424,  421,  428,
1033       430,  316,  436,  433,  431,  412,  437,  429,  440,  315,
1034       864,  125,  441,  316,  429,  125,  126,  127,  126,  128,
1035
1036       129,  126,  130,  126,  126,  131,  126,  126,  126,  126,
1037       126,  126,  132,  126,  126,  126,  126,  126,  126,  126,
1038       133,  126,  134,  134,  126,  135,  126,  134,  134,  134,
1039       134,  136,  134,  134,  134,  134,  134,  134,  134,  134,
1040       134,  134,  134,  134,  134,  134,  134,  134,  134,  134,
1041       137,  138,  139,  141,  550,   70,   71,  141,  142,   70,
1042        71,  315,  142,  428,  148,  316,   70,  149,  143,   68,
1043       444,  445,  143,  450,  428,  470,  144,  451,  429,  150,
1044       144,  145,  454,  455,  471,  145,   68,  151,  148,  429,
1045        70,  149,  315,   68,  315,  315,  316,  432,  316,  316,
1046
1047       458,  315,  319,  150,  459,  316,  322,  320,  146,  322,
1048        68,  151,  146,  496,  323,  466,  467,  323,  499,  152,
1049       484,  324,  324,  324,  493,  493,  321,  321,  500,  485,
1050       324,  324,  506,  506,  506,  462,  496,  393,  550,  405,
1051       353,  499,  394,  152,   68,   69,   68,   70,   71,   68,
1052        68,   68,   68,   68,   68,   68,   68,   68,   68,   68,
1053        72,   68,   68,   68,   68,   68,   68,   68,   73,   68,
1054       153,  153,   68,   68,   68,  153,  153,  153,  153,  153,
1055       153,  153,  153,  153,  153,  153,  153,  153,  153,  153,
1056       153,  153,  153,  153,  153,  153,  153,  153,   68,   68,
1057
1058        74,  155,  364,  156,  157,  185,  322,  186,  187,  352,
1059       352,  352,  496,  855,  323,  550,  158,  353,  497,  364,
1060       188,  324,  324,  324,  159,  504,  364,  550,  189,  160,
1061       324,  324,  511,  505,  505,  496,  352,  352,  352,  368,
1062       368,  372,  372,  364,  353,  378,  379,  369,  369,  402,
1063       515,  568,  568,  854,  403,  516,  161,  162,  162,  357,
1064       190,  518,  162,  162,  162,  162,  162,  162,  162,  162,
1065       162,  162,  162,  162,  162,  162,  162,  162,  162,  162,
1066       162,  162,  162,  162,  162,   68,   69,  163,   70,   71,
1067        68,   68,   68,   68,   68,  164,  165,   68,  166,   68,
1068
1069       167,   72,   68,   68,   68,   68,   68,   68,   68,   73,
1070        68,  168,  168,   68,  169,   68,  168,  168,  168,  168,
1071       168,  168,  168,  168,  168,  168,  168,  168,  168,  168,
1072       168,  168,  168,  168,  168,  168,  168,  168,  168,   68,
1073        68,   74,  170,  171,  172,  173,  174,  170,  175,  176,
1074       170,  177,  170,  170,  170,  170,  170,  170,  178,  170,
1075       170,  170,  170,  170,  170,  170,  179,  180,  181,  181,
1076       170,  182,  170,  181,  181,  181,  181,  181,  181,  181,
1077       181,  181,  181,  181,  181,  181,  181,  181,  181,  181,
1078       181,  181,  181,  181,  181,  181,  170,  170,  183,  192,
1079
1080       193,  194,  195,  383,   69,  196,   70,   71,   69,  428,
1081        70,   71,  384,   69,  197,   70,   71,  389,   69,   72,
1082        70,   71,  198,   72,  429,  466,  467,   73,   72,  364,
1083       390,   73,  222,   72,  223,  224,   73,  378,  379,  512,
1084       389,   73,  523,  556,  853,  380,  364,  225,  557,  524,
1085       525,  666,  496,  390,  199,  226,  227,  593,  849,   74,
1086       227,  526,  595,   74,  382,  594,  594,  222,   74,  223,
1087       224,  364,  550,   74,  201,  496,  202,  203,  352,  352,
1088       352,  230,  225,  231,  232,  204,  353,  228,  364,  205,
1089       226,  227,  233,  364,  550,  227,  234,  206,  207,  572,
1090
1091       573,  574,  207,  602,  235,  230,  337,  231,  232,  337,
1092       364,  238,  655,  223,  239,  473,  233,  575,  473,  550,
1093       234,  499,  228,  473,  372,  507,  240,  499,  235,  208,
1094       201,  597,  202,  203,  241,  487,  236,  603,  487,  598,
1095       598,  204,  364,  487,  499,  205,  380,  474, 1171,  656,
1096       499,  575,  496,  206,  207,  843,  636,  475,  207,  364,
1097       236,  599,  599,  599,  616,  382,  242,  488,  428,  353,
1098       604,  604,  604,  556,  617,  496,  643,  489,  557,  643,
1099       674,  674,  674,  429,  643,  208,  209,  210,  209,  211,
1100       212,  209,  209,  209,  209,  209,  209,  209,  213,  209,
1101
1102       209,  209,  214,  209,  209,  209,  209,  209,  209,  209,
1103       215,  209,  216,  216,  209,  209,  209,  216,  216,  216,
1104       216,  216,  216,  216,  216,  216,  216,  216,  216,  216,
1105       216,  216,  216,  216,  216,  216,  216,  216,  216,  216,
1106       209,  209,  217,  201,  842,  202,  203,  695,  696,  238,
1107       609,  223,  239,  273,  218,   70,  274,  364,  219,  841,
1108       265,  275,   70,  266,  240,  267,  206,  220,  276,  702,
1109       609,  220,  241,  840,  364,  268,  277,  265,  839,   70,
1110       266,  278,  267,  269,  838,  352,  352,  352,  270,  638,
1111       639,  640,  268,  353,  655,  618,  609,  666,  208,  201,
1112
1113       269,  202,  203,  631,  242,  270,  703,  575,  279,  837,
1114       218,  632,  632,  654,  219,  271,  654,  491,  600,  666,
1115       661,  654,  206,  220,  833,  660,  660,  220,  662,  662,
1116       566,  712,  271,  827,  663,  663,  663, 1171,  692,  692,
1117       705,  575,  353,  487,  705,  636,  487,  826,  706,  695,
1118       696,  487,  706,  825,  208,  243,  244,  243,  245,  246,
1119       243,  243,  243,  243,  243,  243,  243,  243,  243,  243,
1120       243,  247,  243,  243,  243,  243,  243,  243,  243,  248,
1121       243,  249,  249,  243,  250,  243,  249,  249,  249,  251,
1122       249,  249,  249,  249,  249,  249,  249,  249,  249,  249,
1123
1124       249,  249,  249,  249,  249,  249,  249,  249,  249,  243,
1125       243,  252,  253,  254,  253,  255,  256,  253,  253,  253,
1126       253,  253,  253,  253,  253,  253,  253,  253,  257,  253,
1127       253,  253,  253,  253,  253,  253,  258,  253,  259,  259,
1128       253,  260,  253,  259,  259,  259,  259,  259,  259,  259,
1129       259,  259,  259,  259,  259,  259,  259,  259,  259,  259,
1130       259,  259,  259,  259,  259,  259,  253,  253,  261,  262,
1131       634,  573,  635,  713,  713,  713,  715,  715,  715,  636,
1132       702,  353,  752,  398,  263,  263,  398,  824,  637,  263,
1133       263,  263,  263,  263,  263,  263,  263,  263,  263,  263,
1134
1135       263,  263,  263,  263,  263,  263,  263,  263,  263,  263,
1136       263,  263,  273,  748,   70,  274,  282,  703,   87,  283,
1137       275,  749,  637,  682,  683,  785,  643,  276,  684,  643,
1138       748,  284,  685,  686,  643,  277,  823,  687,  749,  285,
1139       278,  688,  689,  805,  286,  640,  640,  640,  640,  640,
1140       640,  806,  693,  639,  694,  822,  352,  352,  352,  443,
1141       618,  636,  443,  575,  353,  821,  575,  279,  280,  280,
1142       637,  287,  618,  280,  280,  280,  280,  280,  280,  280,
1143       280,  280,  280,  280,  280,  280,  280,  280,  280,  280,
1144       280,  280,  280,  280,  280,  280,  282,  575,   87,  283,
1145
1146       575,  664,  666,  301,  637,   70,  302,  819,  303,  805,
1147       301,  284,   70,  302,  666,  303,  666,  806,  304,  285,
1148       818,  694,  640,  694,  286,  304,  305,  697,  698,  699,
1149       636,  306,  817,  305,  816,  699,  699,  699,  306,  637,
1150       813,  699,  699,  699,  447,  575,  804,  447,  352,  352,
1151       352,  287,  289,  575,  290,  291,  353,  292,  307,  575,
1152       293,  294,  295,  654,  803,  307,  654,  296,  722,  723,
1153       724,  654,  802,  637,  449,  297,  298,  449,  801,  575,
1154       674,  674,  674,  741,  698,  742,  453,  575,  325,  453,
1155       714,  325,  636,  575,  742,  699,  742,  743,  744,  745,
1156
1157       800,  637,  799,  636,  745,  745,  745,  299,  289,  550,
1158       290,  291,  637,  292,  618,  575,  293,  294,  295,  798,
1159       750,  618,  575,  296,  751,  754,  754,  754,  715,  715,
1160       715,  297,  298,  353,  618,  637,  722,  723,  724,  751,
1161       724,  723,  724,  750,  797,  337,  637,  751,  337,  575,
1162       786,  786,  786,  814,  814,  814,  575,  398,  353,  796,
1163       398,  353,  751,  299,  308,  309,  308,   70,  310,  308,
1164       308,  308,  308,  308,  308,  308,  308,  308,  308,  308,
1165       311,  308,  308,  308,  308,  308,  308,  308,  312,  308,
1166       313,  313,  308,  308,  308,  313,  313,  313,  313,  313,
1167
1168       313,  313,  313,  313,  313,  313,  313,  313,  313,  313,
1169       313,  313,  313,  313,  313,  313,  313,  313,  308,  308,
1170       314,  409,  795,  794,  793,  409,  745,  745,  745,  410,
1171       411,  412,  443,  447,  413,  443,  447,  449,  414,  415,
1172       449,  792,  453,  416,  575,  453,  791,  417,  418,  494,
1173       790,  789,  788,  464,  494,  494,  325,  746,  494,  325,
1174       464,  778,  779,  744,  780,  494,  494,  494,  501,  777,
1175       776,  636,  501,  501,  501,  775,  774,  501,  575,  501,
1176       637,  834,  834,  834,  501,  501,  501,  510,  773,  353,
1177       772,  510,  510,  510,  337,  550,  510,  337,  510,  771,
1178
1179       850,  850,  850,  510,  510,  510,  513,  364,  353,  770,
1180       513,  513,  513,  812,  637,  513,  812,  513,  769,  780,
1181       745,  780,  513,  513,  514,  372,  768,  517,  636,  767,
1182       766,  517,  517,  517,  765,  764,  517,  637,  517,  763,
1183       781,  782,  783,  517,  517,  517,  528,  762,  761,  760,
1184       528,  528,  528,  759,  758,  528,  753,  464,  575,  783,
1185       783,  783,  528,  528,  528,  529,  530,  711,  531,  752,
1186       532,  637,  708,  747,  533,  534,  746,  575,  327,  535,
1187       861,  861,  861,  536,  537,  548,  566,  566,  353,  548,
1188       548,  548,  575,  740,  548,  739,  548,  783,  783,  783,
1189
1190       738,  548,  548,  548,  428,  737,  736,  735,  553,  734,
1191       733,  575,  553,  553,  553,  575,  732,  553,  731,  554,
1192       870,  870,  870,  730,  553,  553,  553,  559,  353,  729,
1193       728,  559,  559,  559,  727,  726,  559,  725,  559,  875,
1194       875,  875,  721,  559,  559,  559,  562,  353,  720,  575,
1195       562,  562,  562,  719,  718,  562,  717,  562,  716,  666,
1196       661,  491,  562,  562,  562,  644,  644,  645,  644,  644,
1197       644,  644,  644,  644,  644,  644,  644,  644,  644,  644,
1198       644,  644,  325,  325,  325,  644,  644,  644,  644,  644,
1199       644,  325,  325,  644,  644,  644,  325,  325,  325,  325,
1200
1201       325,  325,  325,  325,  646,  325,  325,  325,  325,  325,
1202       325,  325,  325,  325,  325,  325,  325,  325,  325,  644,
1203       644,  644,  704,  704,  704,  704,  704,  704,  704,  704,
1204       704,  704,  704,  704,  704,  704,  704,  704,  704,  325,
1205       325,  325,  704,  704,  704,  704,  704,  704,  325,  325,
1206       704,  704,  704,  325,  325,  325,  325,  325,  325,  325,
1207       325,  325,  325,  325,  325,  325,  325,  325,  325,  325,
1208       325,  325,  325,  325,  325,  325,  704,  704,  704,  755,
1209       755,  755,  491,  756,  787,  787,  787,  353,  756,  807,
1210       782,  808,  353,  808,  783,  808,  588,  711,  636,  809,
1211
1212       810,  811,  636,  811,  811,  811,  710,  637,  811,  811,
1213       811,  637,  815,  815,  815,  709,  756,  575,  708,  707,
1214       353,  575,  578,  701,  700,  566,  575,  690,  828,  810,
1215       829,  757,  830,  831,  832,  681,  757,  636,  829,  811,
1216       829,  637,  680,  679,  678,  637,  637,  636,  677,  676,
1217       575,  575,  832,  832,  832,  575,  637,  832,  832,  832,
1218       575,  835,  835,  835,  757,  756,  675,  673,  618,  353,
1219       575,  672,  836,  836,  836,  575,  756,  844,  831,  845,
1220       637,  846,  847,  848,  575,  671,  636,  845,  832,  845,
1221       637,  670,  848,  848,  848,  637,  636,  669,  668,  575,
1222
1223       848,  848,  848,  667,  575,  637,  852,  852,  852,  575,
1224       575,  666,  665,  757,  606,  851,  851,  851,  575,  756,
1225       878,  878,  878,  353,  757,  856,  847,  857,  353,  637,
1226       858,  859,  860,  575,  636,  372,  857,  848,  857,  637,
1227       863,  863,  863,  637,  575,  636,  491,  658,  575,  657,
1228       653,  652,  575,  651,  637,  860,  860,  860,  757,  650,
1229       860,  860,  860,  649,  862,  862,  862,  757,  756,  867,
1230       868,  869,  353,  575,  648,  647,  642,  637,  575,  641,
1231       571,  566,  575,  566,  865,  859,  866,  575,  637,  872,
1232       872,  872,  757,  636,  629,  866,  860,  866,  628,  869,
1233
1234       869,  869,  637,  617,  636,  627,  626,  575,  869,  869,
1235       869,  625,  575,  637,  624,  623,  757,  575,  622,  621,
1236       620,  575,  619,  871,  871,  871,  575,  756,  873,  868,
1237       874,  353,  867,  868,  869,  618,  637,  636,  869,  869,
1238       869,  757,  615,  874,  869,  874,  637,  637,  614,  613,
1239       575,  575,  636,  869,  869,  869,  575,  877,  877,  877,
1240       575,  637,  876,  876,  876,  612,  756,  873,  868,  874,
1241       353,  575,  880,  880,  880,  757,  636,  611,  610,  608,
1242       637,  881,  881,  881,  575,  637,  883,  883,  883,  353,
1243       575,  607,  874,  869,  874,  637,  879,  879,  879,  606,
1244
1245       756,  636,  569,  522,  353,  575,  886,  886,  886,  757,
1246       637,  889,  889,  889,  757,  892,  892,  892,  605,  637,
1247       372,  882,  882,  882,  757,  756,  884,  884,  884,  353,
1248       372,  885,  885,  885,  353,  756,  601,  596,  757,  353,
1249       596,  887,  887,  887,  637,  895,  895,  895,  757,  353,
1250       491,  888,  888,  888,  491,  756,  488,  591,  757,  353,
1251       890,  890,  890,  757,  898,  898,  898,  757,  353,  590,
1252       891,  891,  891,  757,  756,  901,  901,  901,  353,  893,
1253       893,  893,  589,  757,  894,  894,  894,  353,  756,  588,
1254       587,  586,  353,  896,  896,  896,  585,  757,  897,  897,
1255
1256       897,  353,  756,  757,  584,  583,  353,  899,  899,  899,
1257       900,  900,  900,  582,  756,  353,  757,  581,  353,  904,
1258       904,  904,  757,  902,  902,  902,  580,  757,  907,  907,
1259       907,  353,  579,  903,  903,  903,  757,  756,  905,  905,
1260       905,  353,  578,  906,  906,  906,  353,  756,  577,  576,
1261       757,  353,  908,  908,  908,  909,  909,  909,  571,  756,
1262       353,  569,  757,  353,  910,  910,  910,  911,  911,  911,
1263       463,  757,  913,  913,  913,  353,  916,  916,  916,  462,
1264       757,  566,  912,  912,  912,  757,  756,  919,  919,  919,
1265       353,  914,  914,  914,  454,  757,  915,  915,  915,  353,
1266
1267       756,  917,  917,  917,  353,  564,  462,  757,  563,  353,
1268       918,  918,  918,  444,  756,  561,  757,  560,  353,  920,
1269       920,  920,  558,  462,  757,  555,  552,  353,  757,  921,
1270       921,  921,  551,  756,  757,  549,  462,  353,  547,  757,
1271       922,  922,  922,  923,  923,  923,  546,  545,  757,  544,
1272       543,  353,  924,  924,  924,  542,  756,  925,  925,  925,
1273       353,  541,  757,  926,  926,  926,  927,  927,  927,  540,
1274       756,  353,  539,  538,  353,  928,  928,  928,  929,  929,
1275       929,  757,  527,  930,  930,  930,  353,  756,  931,  931,
1276       931,  353,  757,  932,  932,  932,  399,  522,  933,  933,
1277
1278       933,  353,  756,  395,  757,  521,  353,  520,  387,  757,
1279       934,  934,  934,  935,  935,  935,  386,  385,  757,  386,
1280       519,  353,  936,  936,  936,  376,  756,  757,  372,  509,
1281       353,  937,  937,  937,  508,  757,  938,  938,  938,  355,
1282       757,  939,  939,  939,  353,  756,  940,  940,  940,  353,
1283       757,  941,  941,  941,  502,  491,  942,  942,  942,  353,
1284       756,  486,  757,  483,  353,  943,  943,  943,  944,  944,
1285       944,  945,  945,  945,  757,  756,  353,  481,  479,  353,
1286       946,  946,  946,  757,  947,  947,  947,  948,  948,  948,
1287       478,  756,  353,  757,  477,  353,  476,  472,  757,  949,
1288
1289       949,  949,  950,  950,  950,  951,  951,  951,  757,  756,
1290       353,  469,  468,  353,  952,  952,  952,  757,  953,  953,
1291       953,  463,  462,  757,  317,  317,  353,  954,  954,  954,
1292       317,  756,  757,  457,  317,  353,  955,  955,  955,  757,
1293       956,  956,  956,  317,  317,  957,  957,  957,  353,  756,
1294       448,  757,  317,  353,  958,  958,  958,  757,  446,  959,
1295       959,  959,  961,  961,  961,  317,  757,  353,  960,  960,
1296       960,  442,  756,  962,  962,  962,  353,  438,  435,  757,
1297       423,  353,  963,  963,  963,  422,  756,  420,  757,  408,
1298       353,  964,  964,  964,  965,  965,  965,  757,  405,  966,
1299
1300       966,  966,  353,  756,  317,  317,  757,  353,  967,  967,
1301       967,  968,  968,  968,  757,  970,  970,  970,  317,  353,
1302       757,  969,  969,  969,  395,  756,  973,  973,  973,  353,
1303       971,  971,  971,  392,  757,  976,  976,  976,  353,  388,
1304       972,  972,  972,  757,  756,  974,  974,  974,  353,  387,
1305       386,  757,  385,  353,  975,  975,  975,  372,  756,  372,
1306       757,  372,  353,  977,  977,  977,  372,  757,  978,  978,
1307       978,  353,  756,  757,  361,  317,  353,  351,  757,  979,
1308       979,  979,  980,  980,  980,  348,  344,  757,  343,  340,
1309       353,  317,  757,  981,  981,  981,  334,  756,  982,  982,
1310
1311       982,  353,  983,  983,  983,  333,  757,  984,  984,  984,
1312       353,  756,  985,  985,  985,  353,  986,  986,  986,  327,
1313       757,  987,  987,  987,  353,  756,  988,  988,  988,  353,
1314       326,  757,  989,  989,  989,  990,  990,  990,  317,  756,
1315       353,  317,  317,  353, 1171,  757,  991,  991,  991, 1171,
1316       757, 1171,  992,  992,  992,  994,  994,  994, 1171,  757,
1317       353,  993,  993,  993,  757,  756,  995,  995,  995,  353,
1318       997,  997,  997,  757,  353,  996,  996,  996,  757,  756,
1319       998,  998,  998,  353, 1000, 1000, 1000,  757,  353,  999,
1320       999,  999, 1171,  756, 1001, 1001, 1001,  353,  757, 1003,
1321
1322      1003, 1003,  353, 1171, 1002, 1002, 1002,  757,  756, 1004,
1323      1004, 1004,  353,  757, 1006, 1006, 1006,  353, 1009, 1009,
1324      1009, 1171,  757, 1171, 1005, 1005, 1005,  757,  756, 1007,
1325      1007, 1007,  353, 1012, 1012, 1012,  757,  353, 1008, 1008,
1326      1008,  757,  756, 1015, 1015, 1015,  353, 1010, 1010, 1010,
1327      1171,  757, 1013, 1013, 1013,  353,  757, 1011, 1011, 1011,
1328       353,  756, 1018, 1018, 1018,  353,  757, 1014, 1014, 1014,
1329       757,  756, 1016, 1016, 1016,  353,  757, 1021, 1021, 1021,
1330       353, 1019, 1019, 1019, 1171,  757, 1024, 1024, 1024,  353,
1331       757, 1171, 1017, 1017, 1017,  757,  756, 1020, 1020, 1020,
1332
1333       353,  756, 1022, 1022, 1022,  353, 1027, 1027, 1027,  757,
1334       353, 1030, 1030, 1030,  757, 1171, 1023, 1023, 1023,  757,
1335       756, 1171, 1171, 1171,  353, 1025, 1025, 1025, 1171,  757,
1336      1033, 1033, 1033,  353, 1171, 1026, 1026, 1026,  757,  756,
1337      1028, 1028, 1028,  353,  757, 1036, 1036, 1036,  353,  757,
1338      1171, 1029, 1029, 1029, 1171,  756, 1171, 1171,  757,  353,
1339      1039, 1039, 1039,  757, 1031, 1031, 1031, 1171,  757, 1032,
1340      1032, 1032,  353,  756, 1042, 1042, 1042,  353, 1034, 1034,
1341      1034, 1171,  757, 1037, 1037, 1037,  353,  757, 1035, 1035,
1342      1035,  353,  756, 1040, 1040, 1040,  353,  757, 1038, 1038,
1343
1344      1038,  353,  756,  757, 1171, 1171,  353, 1041, 1041, 1041,
1345      1171,  756,  757, 1171, 1171,  353, 1043, 1043, 1043, 1171,
1346      1171,  757, 1171, 1171,  353, 1171,  757, 1044, 1044, 1044,
1347      1171,  756, 1045, 1045, 1045,  353, 1046, 1046, 1046, 1171,
1348       757, 1047, 1047, 1047,  353,  756, 1048, 1048, 1048,  353,
1349       757, 1171, 1049, 1049, 1049, 1051, 1051, 1051, 1171,  757,
1350       353, 1050, 1050, 1050, 1171,  756, 1052, 1052, 1052,  353,
1351      1054, 1054, 1054, 1171,  353, 1057, 1057, 1057, 1171,  757,
1352      1171, 1053, 1053, 1053,  757,  756, 1055, 1055, 1055,  353,
1353      1060, 1060, 1060,  757,  353, 1056, 1056, 1056,  757,  756,
1354
1355      1058, 1058, 1058,  353, 1063, 1063, 1063,  757,  353, 1171,
1356      1059, 1059, 1059,  757,  756, 1061, 1061, 1061,  353, 1066,
1357      1066, 1066,  757,  353, 1062, 1062, 1062,  757,  756, 1064,
1358      1064, 1064,  353,  757, 1069, 1069, 1069,  353, 1072, 1072,
1359      1072, 1171,  757, 1171, 1065, 1065, 1065,  757,  756, 1067,
1360      1067, 1067,  353, 1075, 1075, 1075,  757,  353, 1171, 1068,
1361      1068, 1068,  757,  756, 1070, 1070, 1070,  353, 1078, 1078,
1362      1078,  757,  353, 1071, 1071, 1071,  757,  756, 1080, 1080,
1363      1080,  353, 1171, 1073, 1073, 1073,  757, 1082, 1082, 1082,
1364       757,  353, 1171, 1074, 1074, 1074,  757,  756, 1076, 1076,
1365
1366      1076,  353, 1084, 1084, 1084,  757,  353, 1171, 1077, 1077,
1367      1077,  757,  756, 1079, 1079, 1079,  353,  756, 1171, 1171,
1368       757,  353, 1086, 1086, 1086,  757, 1171, 1081, 1081, 1081,
1369       757,  756, 1083, 1083, 1083,  353,  756, 1171, 1171,  757,
1370       353, 1171, 1085, 1085, 1085,  757,  756, 1087, 1087, 1087,
1371       353,  756, 1171, 1171,  757,  353, 1088, 1088, 1088, 1171,
1372       757, 1171, 1089, 1089, 1089,  757,  756, 1090, 1090, 1090,
1373       353, 1091, 1091, 1091,  757, 1092, 1092, 1092, 1171,  757,
1374      1093, 1093, 1093, 1171,  757, 1094, 1094, 1094, 1095, 1095,
1375      1095, 1096, 1096, 1096,  757, 1097, 1097, 1097, 1171,  757,
1376
1377      1098, 1098, 1098, 1099, 1099, 1099, 1171, 1171,  757, 1100,
1378      1100, 1100, 1171, 1171,  757, 1101, 1101, 1101, 1171,  757,
1379      1102, 1102, 1102,  757, 1103, 1103, 1103,  757, 1104, 1104,
1380      1104, 1171,  757, 1105, 1105, 1105, 1171,  757, 1171, 1171,
1381       757, 1171, 1171,  757, 1106, 1106, 1106,  757, 1107, 1107,
1382      1107, 1171,  757, 1171, 1171,  757, 1108, 1108, 1108, 1171,
1383      1171,  757, 1109, 1109, 1109, 1171, 1171,  757, 1110, 1110,
1384      1110, 1171,  757, 1111, 1111, 1111,  757, 1112, 1112, 1112,
1385       757, 1113, 1113, 1113, 1171,  757, 1114, 1114, 1114, 1115,
1386      1115, 1115, 1116, 1116, 1116, 1171,  757, 1117, 1117, 1117,
1387
1388       757, 1118, 1118, 1118, 1119, 1119, 1119, 1171,  757, 1120,
1389      1120, 1120, 1171, 1171,  757, 1121, 1121, 1121, 1171, 1171,
1390       757, 1122, 1122, 1122, 1171,  757, 1123, 1123, 1123,  757,
1391      1124, 1124, 1124,  757, 1125, 1125, 1125, 1171,  757, 1171,
1392      1171,  757, 1171, 1171,  757, 1126, 1126, 1126, 1171,  757,
1393      1127, 1127, 1127,  757, 1171, 1171,  757, 1128, 1128, 1128,
1394      1171,  757, 1129, 1129, 1129, 1171, 1171,  757, 1130, 1130,
1395      1130, 1171, 1171,  757, 1131, 1131, 1131, 1171,  757, 1132,
1396      1132, 1132,  757, 1133, 1133, 1133,  757, 1134, 1134, 1134,
1397      1135, 1135, 1135, 1136, 1136, 1136, 1171,  757, 1137, 1137,
1398
1399      1137, 1171,  757, 1138, 1138, 1138, 1139, 1139, 1139,  757,
1400      1140, 1140, 1140, 1171,  757, 1141, 1141, 1141, 1171, 1171,
1401       757, 1142, 1142, 1142, 1171, 1171,  757, 1143, 1143, 1143,
1402      1171,  757, 1144, 1144, 1144,  757, 1145, 1145, 1145,  757,
1403      1171, 1171,  757, 1171, 1171,  757, 1146, 1146, 1146, 1171,
1404       757, 1147, 1147, 1147, 1171,  757, 1171, 1171,  757, 1148,
1405      1148, 1148,  757, 1149, 1149, 1149, 1171,  757, 1150, 1150,
1406      1150, 1171, 1171,  757, 1151, 1151, 1151, 1171, 1171,  757,
1407      1152, 1152, 1152, 1171,  757, 1153, 1153, 1153,  757, 1154,
1408      1154, 1154, 1155, 1155, 1155, 1156, 1156, 1156,  757, 1157,
1409
1410      1157, 1157, 1171,  757, 1158, 1158, 1158, 1159, 1159, 1159,
1411      1171,  757, 1160, 1160, 1160,  757, 1161, 1161, 1161, 1171,
1412       757, 1162, 1162, 1162, 1171, 1171,  757, 1163, 1163, 1163,
1413      1171, 1171,  757, 1164, 1164, 1164, 1171,  757, 1165, 1165,
1414      1165,  757, 1171, 1171,  757, 1171, 1171,  757, 1166, 1166,
1415      1166,  757, 1167, 1167, 1167, 1171,  757, 1171, 1171,  757,
1416      1168, 1168, 1168, 1171,  757, 1169, 1169, 1169,  757, 1170,
1417      1170, 1170, 1171,  757, 1094, 1094, 1094, 1171, 1171,  757,
1418      1171, 1171, 1171, 1171, 1171,  757, 1171, 1171, 1171, 1171,
1419       757, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171,
1420
1421       757, 1171, 1171, 1171,  757, 1171, 1171, 1171, 1171, 1171,
1422      1171, 1171,  757, 1171, 1171, 1171, 1171,  757, 1171, 1171,
1423      1171,  757, 1171, 1171, 1171, 1171,  757,   68,   68,   68,
1424        68,   68,   68,   68,   68,   68,   68,   68,   68,   68,
1425        68,   68,   68,   68,   68,   75,   75,   75,   75,   75,
1426        75,   75,   75,   75,   75,   75,   75,   75,   75,   75,
1427        75,   75,   75,  109,  109,  109,  109,  109,  109,  109,
1428       109,  109,  109,  109,  109,  109,  109,  109,  109,  109,
1429       109,  118,  118,  118,  118,  118,  118,  118,  118,  118,
1430       118,  118,  118,  118,  118,  118,  118,  118,  118,  140,
1431
1432       140,  140,  140,  140,  140,  140,  140,  140,  140,  140,
1433       140,  140,  140,  140,  140,  140,  140,  147,  147,  147,
1434       147,  147,  147,  147,  147,  147,  147,  147,  147,  147,
1435       147,  147,  147,  147,  147,  154,  154,  154,  154,  154,
1436       154,  154,  154,  154,  154,  154,  154,  154,  154,  154,
1437       154,  154,  154,  184,  184,  184,  184,  184,  184,  184,
1438       184,  184,  184,  184,  184,  184,  184,  184,  184,  184,
1439       184,  191,  191,  191,  191,  191,  191,  191,  191,  191,
1440       191,  191,  191,  191,  191,  191,  191,  191,  191,  200,
1441       200,  200,  200,  200,  200,  200,  200,  200,  200,  200,
1442
1443       200,  200,  200,  200,  200,  200,  200,  221,  221,  221,
1444       221,  221,  221,  221,  221,  221,  221,  221,  221,  221,
1445       221,  221,  221,  221,  221,  229,  229,  229,  229,  229,
1446       229,  229,  229,  229,  229,  229,  229,  229,  229,  229,
1447       229,  229,  229,  237,  237,  237,  237,  237,  237,  237,
1448       237,  237,  237,  237,  237,  237,  237,  237,  237,  237,
1449       237,  264,  264,  264,  264,  264,  264,  264,  264,  264,
1450       264,  264,  264,  264,  264,  264,  264,  264,  264,  272,
1451       272,  272,  272,  272,  272,  272,  272,  272,  272,  272,
1452       272,  272,  272,  272,  272,  272,  272,  281,  281,  281,
1453
1454       281,  281,  281,  281,  281,  281,  281,  281,  281,  281,
1455       281,  281,  281,  281,  281,  288,  288,  288,  288,  288,
1456       288,  288,  288,  288,  288,  288,  288,  288,  288,  288,
1457       288,  288,  288,  300,  300,  300,  300,  300,  300,  300,
1458       300,  300,  300,  300,  300,  300,  300,  300,  300,  300,
1459       300,  318,  318,  318,  318,  318,  318,  318,  318,  318,
1460       318,  318,  318,  318,  318,  318,  318,  318,  318,  341,
1461       341,  341, 1171,  341,  341, 1171, 1171,  341,  341,  341,
1462       341, 1171,  341,  341,  341,  341,  341,  342,  342,  342,
1463      1171,  342,  342,  342, 1171,  342,  342,  342,  342,  342,
1464
1465       342,  342,  342,  342,  342,  345,  345,  345, 1171,  345,
1466       345, 1171,  345,  345,  345,  345,  345,  345,  345,  345,
1467       345,  345,  349,  349,  349, 1171,  349,  349,  349,  349,
1468       349,  349,  349,  349,  349,  349,  349,  349,  349,  349,
1469       350,  350,  350, 1171,  350,  350,  350,  350,  350,  350,
1470       350,  350,  350,  350,  350,  350,  350,  350,  354,  354,
1471       354, 1171, 1171, 1171,  354, 1171, 1171, 1171, 1171,  354,
1472      1171, 1171,  354,  358,  358,  358, 1171, 1171,  358, 1171,
1473       358,  358,  358,  358,  358,  358,  358,  358,  358,  358,
1474       362,  362,  362, 1171,  362,  362,  362,  362,  362,  362,
1475
1476       362,  362,  362,  362,  362,  362,  362,  362,  363,  363,
1477       363, 1171,  363,  363,  363,  363,  363,  363,  363,  363,
1478       363,  363,  363,  363,  363,  363,  370, 1171, 1171, 1171,
1479      1171, 1171,  370, 1171, 1171, 1171, 1171,  370, 1171, 1171,
1480       370,  371,  371,  371,  371,  371,  371,  371,  371,  371,
1481       371,  371,  371,  371,  371,  371,  371,  371,  381,  381,
1482      1171, 1171, 1171, 1171,  381, 1171, 1171, 1171, 1171,  381,
1483      1171, 1171,  381,  381,  391, 1171, 1171, 1171, 1171, 1171,
1484      1171, 1171, 1171,  391, 1171,  391, 1171, 1171,  391,  401,
1485       401,  401,  401,  401,  401,  401,  401,  401,  401,  401,
1486
1487       401,  401,  401,  401,  401,  401,  401,  404, 1171,  404,
1488      1171,  404,  404,  404,  404,  404, 1171,  404,  404, 1171,
1489       404,  404, 1171,  404,  419,  419,  419, 1171,  419,  419,
1490       419,  419,  419, 1171,  419,  419,  419,  419,  419,  419,
1491      1171,  419,  427,  427,  427, 1171,  427,  427,  427,  427,
1492       427,  427,  427,  427,  427,  427,  427, 1171,  427,  428,
1493       428,  428, 1171,  428,  428,  428,  428,  428,  428,  428,
1494       428, 1171,  428,  428, 1171,  428,  429, 1171,  429, 1171,
1495       429,  429,  429,  429,  429,  429,  429,  429,  429,  429,
1496       429, 1171,  429,  434, 1171,  434, 1171,  434,  434,  434,
1497
1498       434,  434, 1171,  434,  434,  434,  434,  434,  434,  434,
1499       434,  439, 1171,  439, 1171,  439,  439,  439,  439,  439,
1500       439,  439,  439,  439,  439,  439,  439,  439,  439,  452,
1501       452,  452, 1171,  452,  452,  452,  452,  452,  452,  452,
1502       452,  452,  452,  452,  452,  452,  452,  456,  456,  456,
1503      1171,  456,  456,  456, 1171,  456,  456,  456,  456,  456,
1504       456,  456,  456,  456,  456,  460,  460,  460, 1171,  460,
1505       460,  460,  460,  460,  460,  460,  460,  460,  460,  460,
1506       460,  460,  460,  461,  461, 1171,  461, 1171, 1171,  461,
1507       464, 1171,  464,  464, 1171,  464, 1171,  464, 1171,  464,
1508
1509       465,  465,  465, 1171,  465,  465,  465,  465,  465,  465,
1510       465,  465,  465,  465,  465,  465,  465,  465,  480,  480,
1511       480, 1171,  480,  480,  480,  480,  480,  480,  480,  480,
1512       480,  480,  480,  480,  480,  480,  482,  482,  482, 1171,
1513       482,  482,  482,  482,  482,  482,  482,  482,  482,  482,
1514       482,  482,  482,  482,  341,  341,  341, 1171,  341,  341,
1515      1171, 1171,  341,  341,  341,  341, 1171,  341,  341,  341,
1516       341,  341,  490,  490,  490, 1171,  490,  490,  490,  490,
1517       490,  490,  490,  490,  490,  490,  490,  490,  490,  492,
1518       492,  492, 1171,  492,  492,  492,  492,  492,  492,  492,
1519
1520       492,  492,  492,  492,  492,  492,  492,  345,  345,  345,
1521      1171,  345,  345, 1171,  345,  345,  345,  345,  345,  345,
1522       345,  345,  345,  345,  495,  495,  495, 1171,  495,  495,
1523       495,  495,  495,  495,  495,  495,  495,  495,  495,  495,
1524       495,  495,  498,  498,  498, 1171,  498,  498,  498,  498,
1525       498,  498,  498,  498,  498,  498,  498,  498,  498,  498,
1526       503,  503,  503, 1171,  503,  503,  503,  503,  503,  503,
1527       503,  503,  503,  503,  503,  503,  503,  503,  354,  354,
1528       354, 1171, 1171, 1171,  354, 1171, 1171, 1171, 1171,  354,
1529      1171, 1171,  354,  358,  358,  358, 1171, 1171,  358, 1171,
1530
1531       358,  358,  358,  358,  358,  358,  358,  358,  358,  358,
1532       363,  363,  363, 1171,  363,  363,  363,  363,  363,  363,
1533       363,  363,  363,  363,  363,  363,  363,  363,  370, 1171,
1534      1171, 1171, 1171, 1171,  370, 1171, 1171, 1171, 1171,  370,
1535      1171, 1171,  370,  371,  371,  371,  371,  371,  371,  371,
1536       371,  371,  371,  371,  371,  371,  371,  371,  371,  371,
1537       381,  381, 1171, 1171, 1171, 1171,  381, 1171, 1171, 1171,
1538      1171,  381, 1171, 1171,  381,  381,  391, 1171, 1171, 1171,
1539      1171, 1171, 1171, 1171, 1171,  391, 1171,  391, 1171, 1171,
1540       391,  401,  401,  401,  401,  401,  401,  401,  401,  401,
1541
1542       401,  401,  401,  401,  401,  401,  401,  401,  401,  404,
1543      1171,  404, 1171,  404,  404,  404,  404,  404, 1171,  404,
1544       404, 1171,  404,  404, 1171,  404,  419,  419,  419, 1171,
1545       419,  419,  419,  419,  419, 1171,  419,  419,  419,  419,
1546       419,  419, 1171,  419,  427,  427,  427, 1171,  427,  427,
1547       427,  427,  427,  427,  427,  427,  427,  427,  427, 1171,
1548       427,  428,  428,  428, 1171,  428,  428,  428,  428,  428,
1549       428,  428,  428, 1171,  428,  428, 1171,  428,  429, 1171,
1550       429, 1171,  429,  429,  429,  429,  429,  429,  429,  429,
1551       429,  429,  429, 1171,  429,  434, 1171,  434, 1171,  434,
1552
1553       434,  434,  434,  434, 1171,  434,  434,  434,  434,  434,
1554       434,  434,  434,  439, 1171,  439, 1171,  439,  439,  439,
1555       439,  439,  439,  439,  439,  439,  439,  439,  439,  439,
1556       439,  565,  565,  565, 1171,  565,  565,  565,  565,  565,
1557       565,  565,  565,  565,  565,  565,  565,  565,  567,  567,
1558       567, 1171,  567,  567,  567,  567,  567,  567,  567,  567,
1559       567,  567,  567,  567,  567,  567,  461,  461, 1171,  461,
1560      1171, 1171,  461,  465,  465,  465, 1171,  465,  465,  465,
1561       465,  465,  465,  465,  465,  465,  465,  465,  465,  465,
1562       465,  570,  570,  570, 1171,  570,  570,  570,  570,  570,
1563
1564       570,  570,  570,  570,  570,  570,  570,  570,  570,  480,
1565       480,  480, 1171,  480,  480,  480,  480,  480,  480,  480,
1566       480,  480,  480,  480,  480,  480,  480,  482,  482,  482,
1567      1171,  482,  482,  482,  482,  482,  482,  482,  482,  482,
1568       482,  482,  482,  482,  482,  592,  592,  592, 1171,  592,
1569       592,  592,  592,  592,  592,  592,  592,  592,  592,  592,
1570       592,  592,  341,  341,  341, 1171,  341,  341, 1171, 1171,
1571       341,  341,  341,  341, 1171,  341,  341,  341,  341,  341,
1572       495,  495,  495, 1171,  495,  495,  495,  495,  495,  495,
1573       495,  495,  495,  495,  495,  495,  495,  495,  496,  496,
1574
1575       496, 1171,  496,  496,  496,  496,  496,  496,  496,  496,
1576       496,  496,  496,  496,  496,  496,  498,  498,  498, 1171,
1577       498,  498,  498,  498,  498,  498,  498,  498,  498,  498,
1578       498,  498,  498,  498,  499,  499,  499, 1171,  499,  499,
1579       499,  499,  499,  499,  499,  499,  499,  499,  499,  499,
1580       499,  499,  345,  345,  345, 1171,  345,  345, 1171,  345,
1581       345,  345,  345,  345,  345,  345,  345,  345,  345,  354,
1582       354,  354, 1171, 1171, 1171,  354, 1171, 1171, 1171, 1171,
1583       354, 1171, 1171,  354,  358,  358,  358, 1171, 1171,  358,
1584      1171,  358,  358,  358,  358,  358,  358,  358,  358,  358,
1585
1586       358,  363,  363,  363, 1171,  363,  363,  363,  363,  363,
1587       363,  363,  363,  363,  363,  363,  363,  363,  363,  371,
1588       371,  371,  371,  371,  371,  371,  371,  371,  371,  371,
1589       371,  371,  371,  371,  371,  371,  630,  630,  630, 1171,
1590       630,  630,  630,  630,  630,  630,  630,  630,  630,  630,
1591       630,  630,  630,  633,  633,  633,  633,  633,  633,  633,
1592       633,  633,  633,  633,  633,  633,  633,  633,  633,  633,
1593       633,  659,  659,  659, 1171,  659,  659,  659,  659,  659,
1594       659,  659,  659,  659,  659,  659,  659,  659,  691,  691,
1595       691, 1171,  691,  691,  691,  691,  691,  691,  691,  691,
1596
1597       691,  691,  691,  691,  691,  784, 1171, 1171, 1171,  784,
1598      1171, 1171, 1171, 1171, 1171, 1171, 1171,  784, 1171,  784,
1599       820,  820,  820,  820,  820,  820,  820,  820,  820,  820,
1600       820,  820,  820, 1171,  820,  820, 1171,  820,   67, 1171,
1601      1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171,
1602      1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171,
1603      1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171,
1604      1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171,
1605      1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171,
1606      1171, 1171, 1171, 1171, 1171, 1171
1607
1608     } ;
1609
1610 static yyconst flex_int16_t yy_chk[5497] =
1611     {   0,
1612         0,    1,  163,    1,    1,    2,  147,    2,    2,    0,
1613         3,  163,    3,    3,   72,   81,    1,   89,   72,   81,
1614         2,   89,  103,  147,    1,    3,  103,    9,    2,    9,
1615         9, 1191,    9,    3, 1191,    9,  135,  135,   10,   77,
1616        10,   10,    9,   10,   77,   94,   10,   94,  115,  106,
1617         9,  106,  115,   10,  153,   21,    1,   21,   21, 1094,
1618         2,   10,  153,   77,   77,    3,    4,    4,    4,    4,
1619        21,   83,    4,  160,  160, 1076,  122,   95,   21,   83,
1620       122,    4,    9,   21,   95,   95,   83,   83,   83,    4,
1621       132,    4,    4,   10,  132,   83,   83,  134,  134,  134,
1622
1623       143,  148,  149,  150,  143,  134,  172,  864,  178,  150,
1624        21,  172,  178,  150,  182,  182,  220,  220,  148,  149,
1625       150,    4,    5,    5,    5,    5,    5,    5,    5,    5,
1626         5,    5,    5,    5,    5,    5,    5,    5,    5,    5,
1627         5,    5,    5,    5,    5,    5,    5,    5,    5,    5,
1628         5,    5,    5,    5,    5,    5,    5,    5,    5,    5,
1629         5,    5,    5,    5,    5,    5,    5,    5,    5,    5,
1630         5,    5,    5,    5,    5,    5,    5,    5,    5,    7,
1631         7,    7,    7,    7,    7,    7,    7,    7,    7,    7,
1632         7,    7,    7,    7,    7,    7,    7,    7,    7,    7,
1633
1634         7,    7,    7,    7,    7,    7,    7,    7,    7,    7,
1635         7,    7,    7,    7,    7,    7,    7,    7,    7,    7,
1636         7,    7,    7,    7,    7,    7,    7,    7,    7,    7,
1637         7,    7,    7,    7,    7,    7,   11,  152,   11,   11,
1638        12,   11,   12,   12,  151,   12,  159,  158,  193,  162,
1639       162,   11,  168,  193,  152,   12,  158,  162,  855,   11,
1640       158,  151,  151,   12,   11,  168,  188,  159,   12,  197,
1641       188,  205,  221,  197,  214,  205,  162,  219,  214,  224,
1642       225,  219,  234,  227,  225,  227,  234,  221,  240,  247,
1643       854,   11,  240,  247,  224,   12,   13,   13,   13,   13,
1644
1645        13,   13,   13,   13,   13,   13,   13,   13,   13,   13,
1646        13,   13,   13,   13,   13,   13,   13,   13,   13,   13,
1647        13,   13,   13,   13,   13,   13,   13,   13,   13,   13,
1648        13,   13,   13,   13,   13,   13,   13,   13,   13,   13,
1649        13,   13,   13,   13,   13,   13,   13,   13,   13,   13,
1650        13,   13,   13,   15,  853,   15,   15,   16,   15,   16,
1651        16,  257,   16,  228,   17,  257,   17,   17,   15,   17,
1652       250,  250,   16,  268,  226,  328,   15,  268,  228,   17,
1653        16,   15,  286,  286,  328,   16,   17,   17,   18,  226,
1654        18,   18,  276,   18,  284,  296,  276,  226,  284,  296,
1655
1656       304,  311,  319,   18,  304,  311,  321,  319,   15,  322,
1657        18,   18,   16,  495,  321,  323,  323,  322,  347,   17,
1658       338,  321,  321,  321,  343,  343,  319,  319,  347,  338,
1659       321,  321,  352,  352,  352,  406,  495,  393,  843,  406,
1660       352,  347,  393,   18,   19,   19,   19,   19,   19,   19,
1661        19,   19,   19,   19,   19,   19,   19,   19,   19,   19,
1662        19,   19,   19,   19,   19,   19,   19,   19,   19,   19,
1663        19,   19,   19,   19,   19,   19,   19,   19,   19,   19,
1664        19,   19,   19,   19,   19,   19,   19,   19,   19,   19,
1665        19,   19,   19,   19,   19,   19,   19,   19,   19,   19,
1666
1667        19,   22,  363,   22,   22,   29,  324,   29,   29,  136,
1668       136,  136,  346,  842,  324,  841,   22,  136,  346,  363,
1669        29,  324,  324,  324,   22,  351,  365,  840,   29,   22,
1670       324,  324,  365,  351,  351,  346,  354,  354,  354,  368,
1671       370,  373,  374,  365,  354,  378,  378,  368,  370,  402,
1672       373,  457,  457,  839,  402,  374,   22,   23,   23,  136,
1673        29,  378,   23,   23,   23,   23,   23,   23,   23,   23,
1674        23,   23,   23,   23,   23,   23,   23,   23,   23,   23,
1675        23,   23,   23,   23,   23,   25,   25,   25,   25,   25,
1676        25,   25,   25,   25,   25,   25,   25,   25,   25,   25,
1677
1678        25,   25,   25,   25,   25,   25,   25,   25,   25,   25,
1679        25,   25,   25,   25,   25,   25,   25,   25,   25,   25,
1680        25,   25,   25,   25,   25,   25,   25,   25,   25,   25,
1681        25,   25,   25,   25,   25,   25,   25,   25,   25,   25,
1682        25,   25,   27,   27,   27,   27,   27,   27,   27,   27,
1683        27,   27,   27,   27,   27,   27,   27,   27,   27,   27,
1684        27,   27,   27,   27,   27,   27,   27,   27,   27,   27,
1685        27,   27,   27,   27,   27,   27,   27,   27,   27,   27,
1686        27,   27,   27,   27,   27,   27,   27,   27,   27,   27,
1687        27,   27,   27,   27,   27,   27,   27,   27,   27,   30,
1688
1689        30,   30,   30,  383,   31,   30,   31,   31,   32,  427,
1690        32,   32,  383,   33,   30,   33,   33,  389,   34,   31,
1691        34,   34,   30,   32,  427,  465,  465,   31,   33,  366,
1692       389,   32,   41,   34,   41,   41,   33,  381,  381,  366,
1693       391,   34,  396,  435,  838,  381,  366,   41,  435,  396,
1694       397,  837,  497,  391,   30,   41,   41,  493,  833,   31,
1695        41,  397,  497,   32,  381,  493,  493,   42,   33,   42,
1696        42,  512,  426,   34,   35,  497,   35,   35,  357,  357,
1697       357,   43,   42,   43,   43,   35,  357,   41,  512,   35,
1698        42,   42,   43,  511,  426,   42,   43,   35,   35,  467,
1699
1700       467,  467,   35,  511,   43,   44, 1192,   44,   44, 1192,
1701       511,   45,  589,   45,   45,  330,   44,  467,  330,  426,
1702        44,  498,   42,  330,  515,  357,   45,  500,   44,   35,
1703        36,  505,   36,   36,   45,  340,   43,  515,  340,  505,
1704       505,   36,  513,  340,  498,   36,  519,  330,  633,  589,
1705       500,  467,  595,   36,   36,  827,  633,  330,   36,  513,
1706        44,  506,  506,  506,  538,  519,   45,  340,  553,  506,
1707       518,  518,  518,  556,  538,  595,  578,  340,  556,  578,
1708       618,  618,  618,  553,  578,   36,   37,   37,   37,   37,
1709        37,   37,   37,   37,   37,   37,   37,   37,   37,   37,
1710
1711        37,   37,   37,   37,   37,   37,   37,   37,   37,   37,
1712        37,   37,   37,   37,   37,   37,   37,   37,   37,   37,
1713        37,   37,   37,   37,   37,   37,   37,   37,   37,   37,
1714        37,   37,   37,   37,   37,   37,   37,   37,   37,   37,
1715        37,   37,   37,   39,  826,   39,   39,  636,  636,   46,
1716       531,   46,   46,   55,   39,   55,   55,  602,   39,  825,
1717        53,   55,   53,   53,   46,   53,   39,   39,   55,  645,
1718       531,   39,   46,  824,  602,   53,   55,   54,  823,   54,
1719        54,   55,   54,   53,  822,  507,  507,  507,   53,  572,
1720       572,  572,   54,  507,  655,  821,  531,  819,   39,   40,
1721
1722        54,   40,   40,  568,   46,   54,  645,  572,   55,  818,
1723        40,  568,  568,  588,   40,   53,  588,  594,  507,  817,
1724       598,  588,   40,   40,  813,  594,  594,   40,  598,  598,
1725       632,  655,   54,  804,  599,  599,  599,  637,  632,  632,
1726       648,  572,  599,  658,  705,  637,  658,  803,  648,  695,
1727       695,  658,  705,  802,   40,   47,   47,   47,   47,   47,
1728        47,   47,   47,   47,   47,   47,   47,   47,   47,   47,
1729        47,   47,   47,   47,   47,   47,   47,   47,   47,   47,
1730        47,   47,   47,   47,   47,   47,   47,   47,   47,   47,
1731        47,   47,   47,   47,   47,   47,   47,   47,   47,   47,
1732
1733        47,   47,   47,   47,   47,   47,   47,   47,   47,   47,
1734        47,   47,   49,   49,   49,   49,   49,   49,   49,   49,
1735        49,   49,   49,   49,   49,   49,   49,   49,   49,   49,
1736        49,   49,   49,   49,   49,   49,   49,   49,   49,   49,
1737        49,   49,   49,   49,   49,   49,   49,   49,   49,   49,
1738        49,   49,   49,   49,   49,   49,   49,   49,   49,   49,
1739        49,   49,   49,   49,   49,   49,   49,   49,   49,   51,
1740       571,  571,  571,  663,  663,  663,  666,  666,  666,  571,
1741       702,  663,  752, 1206,   51,   51, 1206,  801,  571,   51,
1742        51,   51,   51,   51,   51,   51,   51,   51,   51,   51,
1743
1744        51,   51,   51,   51,   51,   51,   51,   51,   51,   51,
1745        51,   51,   56,  707,   56,   56,   59,  702,   59,   59,
1746        56,  707,  571,  626,  626,  752,  747,   56,  626,  747,
1747       748,   59,  626,  626,  747,   56,  800,  626,  748,   59,
1748        56,  626,  626,  778,   59,  573,  573,  573,  574,  574,
1749       574,  778,  634,  634,  634,  799,  600,  600,  600, 1215,
1750       798,  634, 1215,  573,  600,  797,  574,   56,   57,   57,
1751       634,   59,  796,   57,   57,   57,   57,   57,   57,   57,
1752        57,   57,   57,   57,   57,   57,   57,   57,   57,   57,
1753        57,   57,   57,   57,   57,   57,   60,  573,   60,   60,
1754
1755       574,  600,  794,   63,  634,   63,   63,  793,   63,  805,
1756        64,   60,   64,   64,  792,   64,  791,  805,   63,   60,
1757       790,  635,  635,  635,   60,   64,   63,  638,  638,  638,
1758       635,   63,  789,   64,  788,  639,  639,  639,   64,  635,
1759       785,  640,  640,  640, 1216,  638,  777, 1216,  664,  664,
1760       664,   60,   61,  639,   61,   61,  664,   61,   63,  640,
1761        61,   61,   61,  753,  776,   64,  753,   61,  673,  673,
1762       673,  753,  775,  635, 1217,   61,   61, 1217,  774,  638,
1763       674,  674,  674,  693,  693,  693, 1219,  639, 1225, 1219,
1764       664, 1225,  693,  640,  694,  694,  694,  697,  697,  697,
1765
1766       773,  693,  772,  694,  698,  698,  698,   61,   62,  771,
1767        62,   62,  694,   62,  770,  697,   62,   62,   62,  769,
1768       708,  768,  698,   62,  708,  713,  713,  713,  715,  715,
1769       715,   62,   62,  713,  767,  693,  722,  722,  722,  708,
1770       724,  724,  724,  750,  766, 1228,  694,  750, 1228,  697,
1771       754,  754,  754,  786,  786,  786,  698, 1243,  754,  765,
1772      1243,  786,  750,   62,   65,   65,   65,   65,   65,   65,
1773        65,   65,   65,   65,   65,   65,   65,   65,   65,   65,
1774        65,   65,   65,   65,   65,   65,   65,   65,   65,   65,
1775        65,   65,   65,   65,   65,   65,   65,   65,   65,   65,
1776
1777        65,   65,   65,   65,   65,   65,   65,   65,   65,   65,
1778        65,   65,   65,   65,   65,   65,   65,   65,   65,   65,
1779        65,  207,  764,  763,  762,  207,  699,  699,  699,  207,
1780       207,  207, 1252, 1253,  207, 1252, 1253, 1254,  207,  207,
1781      1254,  761, 1255,  207,  699, 1255,  760,  207,  207,  344,
1782       759,  758,  756,  344,  344,  344, 1261,  746,  344, 1261,
1783       344,  740,  741,  741,  741,  344,  344,  344,  348,  739,
1784       738,  741,  348,  348,  348,  737,  736,  348,  699,  348,
1785       741,  814,  814,  814,  348,  348,  348,  361,  735,  814,
1786       734,  361,  361,  361, 1264,  733,  361, 1264,  361,  732,
1787
1788       834,  834,  834,  361,  361,  361,  367,  367,  834,  731,
1789       367,  367,  367, 1281,  741,  367, 1281,  367,  730,  742,
1790       742,  742,  367,  367,  367,  375,  729,  375,  742,  728,
1791       727,  375,  375,  375,  726,  725,  375,  742,  375,  721,
1792       743,  743,  743,  375,  375,  375,  408,  720,  719,  718,
1793       408,  408,  408,  717,  716,  408,  712,  408,  743,  744,
1794       744,  744,  408,  408,  408,  409,  409,  711,  409,  710,
1795       409,  742,  709,  703,  409,  409,  701,  744,  700,  409,
1796       850,  850,  850,  409,  409,  422,  692,  691,  850,  422,
1797       422,  422,  743,  690,  422,  689,  422,  745,  745,  745,
1798
1799       688,  422,  422,  422,  432,  687,  686,  685,  432,  684,
1800       683,  744,  432,  432,  432,  745,  682,  432,  681,  432,
1801       861,  861,  861,  680,  432,  432,  432,  438,  861,  679,
1802       678,  438,  438,  438,  677,  676,  438,  675,  438,  870,
1803       870,  870,  672,  438,  438,  438,  442,  870,  671,  745,
1804       442,  442,  442,  670,  669,  442,  668,  442,  667,  665,
1805       662,  660,  442,  442,  442,  579,  579,  579,  579,  579,
1806       579,  579,  579,  579,  579,  579,  579,  579,  579,  579,
1807       579,  579,  579,  579,  579,  579,  579,  579,  579,  579,
1808       579,  579,  579,  579,  579,  579,  579,  579,  579,  579,
1809
1810       579,  579,  579,  579,  579,  579,  579,  579,  579,  579,
1811       579,  579,  579,  579,  579,  579,  579,  579,  579,  579,
1812       579,  579,  647,  647,  647,  647,  647,  647,  647,  647,
1813       647,  647,  647,  647,  647,  647,  647,  647,  647,  647,
1814       647,  647,  647,  647,  647,  647,  647,  647,  647,  647,
1815       647,  647,  647,  647,  647,  647,  647,  647,  647,  647,
1816       647,  647,  647,  647,  647,  647,  647,  647,  647,  647,
1817       647,  647,  647,  647,  647,  647,  647,  647,  647,  714,
1818       714,  714,  659,  714,  755,  755,  755,  714,  755,  779,
1819       779,  779,  755,  780,  780,  780,  656,  653,  779,  781,
1820
1821       781,  781,  780,  782,  782,  782,  652,  779,  783,  783,
1822       783,  780,  787,  787,  787,  651,  787,  781,  650,  649,
1823       787,  782,  646,  642,  641,  630,  783,  629,  807,  807,
1824       807,  714,  809,  809,  809,  625,  755,  807,  808,  808,
1825       808,  779,  624,  623,  622,  780,  807,  808,  621,  620,
1826       809,  781,  810,  810,  810,  782,  808,  811,  811,  811,
1827       783,  815,  815,  815,  787,  815,  619,  617,  616,  815,
1828       810,  615,  816,  816,  816,  811,  816,  828,  828,  828,
1829       807,  830,  830,  830,  809,  614,  828,  829,  829,  829,
1830       808,  613,  831,  831,  831,  828,  829,  612,  611,  830,
1831
1832       832,  832,  832,  610,  810,  829,  836,  836,  836,  811,
1833       831,  608,  607,  815,  606,  835,  835,  835,  832,  835,
1834       875,  875,  875,  835,  816,  844,  844,  844,  875,  828,
1835       846,  846,  846,  830,  844,  603,  845,  845,  845,  829,
1836       852,  852,  852,  844,  831,  845,  592,  591,  846,  590,
1837       586,  585,  832,  584,  845,  847,  847,  847,  836,  583,
1838       848,  848,  848,  582,  851,  851,  851,  835,  851,  858,
1839       858,  858,  851,  847,  581,  580,  577,  844,  848,  576,
1840       570,  567,  846,  565,  856,  856,  856,  858,  845,  863,
1841       863,  863,  852,  856,  563,  857,  857,  857,  560,  859,
1842
1843       859,  859,  856,  555,  857,  551,  549,  847,  860,  860,
1844       860,  546,  848,  857,  545,  544,  851,  859,  543,  542,
1845       541,  858,  540,  862,  862,  862,  860,  862,  865,  865,
1846       865,  862,  867,  867,  867,  539,  856,  865,  868,  868,
1847       868,  863,  537,  866,  866,  866,  865,  857,  536,  535,
1848       867,  859,  866,  869,  869,  869,  868,  872,  872,  872,
1849       860,  866,  871,  871,  871,  534,  871,  873,  873,  873,
1850       871,  869,  877,  877,  877,  862,  873,  533,  532,  530,
1851       865,  878,  878,  878,  867,  873,  880,  880,  880,  878,
1852       868,  529,  874,  874,  874,  866,  876,  876,  876,  527,
1853
1854       876,  874,  524,  522,  876,  869,  883,  883,  883,  872,
1855       874,  886,  886,  886,  871,  889,  889,  889,  521,  873,
1856       517,  879,  879,  879,  877,  879,  881,  881,  881,  879,
1857       516,  882,  882,  882,  881,  882,  508,  504,  880,  882,
1858       503,  884,  884,  884,  874,  892,  892,  892,  876,  884,
1859       492,  885,  885,  885,  490,  885,  489,  488,  883,  885,
1860       887,  887,  887,  886,  895,  895,  895,  889,  887,  486,
1861       888,  888,  888,  879,  888,  898,  898,  898,  888,  890,
1862       890,  890,  485,  882,  891,  891,  891,  890,  891,  484,
1863       481,  479,  891,  893,  893,  893,  478,  892,  894,  894,
1864
1865       894,  893,  894,  885,  477,  476,  894,  896,  896,  896,
1866       897,  897,  897,  475,  897,  896,  895,  474,  897,  901,
1867       901,  901,  888,  899,  899,  899,  472,  898,  904,  904,
1868       904,  899,  471,  900,  900,  900,  891,  900,  902,  902,
1869       902,  900,  470,  903,  903,  903,  902,  903,  469,  468,
1870       894,  903,  905,  905,  905,  906,  906,  906,  466,  906,
1871       905,  462,  897,  906,  907,  907,  907,  908,  908,  908,
1872       459,  901,  910,  910,  910,  908,  913,  913,  913,  458,
1873       904,  456,  909,  909,  909,  900,  909,  916,  916,  916,
1874       909,  911,  911,  911,  455,  903,  912,  912,  912,  911,
1875
1876       912,  914,  914,  914,  912,  451,  450,  906,  446,  914,
1877       915,  915,  915,  445,  915,  441,  907,  440,  915,  917,
1878       917,  917,  437,  436,  910,  433,  431,  917,  913,  918,
1879       918,  918,  430,  918,  909,  425,  424,  918,  421,  916,
1880       919,  919,  919,  920,  920,  920,  418,  417,  912,  416,
1881       415,  920,  921,  921,  921,  414,  921,  922,  922,  922,
1882       921,  413,  915,  923,  923,  923,  924,  924,  924,  412,
1883       924,  923,  411,  410,  924,  925,  925,  925,  926,  926,
1884       926,  918,  407,  927,  927,  927,  926,  927,  928,  928,
1885       928,  927,  919,  929,  929,  929,  400,  395,  930,  930,
1886
1887       930,  929,  930,  394,  921,  390,  930,  388,  387,  922,
1888       931,  931,  931,  932,  932,  932,  386,  385,  924,  384,
1889       382,  932,  933,  933,  933,  377,  933,  925,  371,  360,
1890       933,  934,  934,  934,  359,  927,  935,  935,  935,  356,
1891       928,  936,  936,  936,  935,  936,  937,  937,  937,  936,
1892       930,  938,  938,  938,  350,  342,  939,  939,  939,  938,
1893       939,  339,  931,  336,  939,  940,  940,  940,  941,  941,
1894       941,  942,  942,  942,  933,  942,  941,  335,  334,  942,
1895       943,  943,  943,  934,  944,  944,  944,  945,  945,  945,
1896       333,  945,  944,  936,  332,  945,  331,  329,  937,  946,
1897
1898       946,  946,  947,  947,  947,  948,  948,  948,  939,  948,
1899       947,  327,  326,  948,  949,  949,  949,  940,  950,  950,
1900       950,  316,  315,  942,  312,  305,  950,  951,  951,  951,
1901       297,  951,  943,  293,  285,  951,  952,  952,  952,  945,
1902       953,  953,  953,  277,  269,  954,  954,  954,  953,  954,
1903       260,  946,  258,  954,  955,  955,  955,  948,  251,  956,
1904       956,  956,  958,  958,  958,  248,  949,  956,  957,  957,
1905       957,  241,  957,  959,  959,  959,  957,  235,  233,  951,
1906       218,  959,  960,  960,  960,  215,  960,  213,  952,  206,
1907       960,  961,  961,  961,  962,  962,  962,  954,  204,  963,
1908
1909       963,  963,  962,  963,  198,  189,  955,  963,  964,  964,
1910       964,  965,  965,  965,  958,  967,  967,  967,  179,  965,
1911       957,  966,  966,  966,  176,  966,  970,  970,  970,  966,
1912       968,  968,  968,  169,  960,  973,  973,  973,  968,  167,
1913       969,  969,  969,  961,  969,  971,  971,  971,  969,  166,
1914       165,  963,  164,  971,  972,  972,  972,  161,  972,  157,
1915       964,  155,  972,  974,  974,  974,  154,  967,  975,  975,
1916       975,  974,  975,  966,  144,  133,  975,  131,  970,  976,
1917       976,  976,  977,  977,  977,  123,  116,  973,  114,  107,
1918       977,  104,  969,  978,  978,  978,   97,  978,  979,  979,
1919
1920       979,  978,  980,  980,  980,   96,  972,  981,  981,  981,
1921       980,  981,  982,  982,  982,  981,  983,  983,  983,   93,
1922       975,  984,  984,  984,  983,  984,  985,  985,  985,  984,
1923        92,  976,  986,  986,  986,  987,  987,  987,   90,  987,
1924       986,   82,   73,  987,   67,  978,  988,  988,  988,    0,
1925       979,    0,  989,  989,  989,  991,  991,  991,    0,  981,
1926       989,  990,  990,  990,  982,  990,  992,  992,  992,  990,
1927       994,  994,  994,  984,  992,  993,  993,  993,  985,  993,
1928       995,  995,  995,  993,  997,  997,  997,  987,  995,  996,
1929       996,  996,    0,  996,  998,  998,  998,  996,  988, 1000,
1930
1931      1000, 1000,  998,    0,  999,  999,  999,  991,  999, 1001,
1932      1001, 1001,  999,  990, 1003, 1003, 1003, 1001, 1006, 1006,
1933      1006,    0,  994,    0, 1002, 1002, 1002,  993, 1002, 1004,
1934      1004, 1004, 1002, 1009, 1009, 1009,  997, 1004, 1005, 1005,
1935      1005,  996, 1005, 1012, 1012, 1012, 1005, 1007, 1007, 1007,
1936         0, 1000, 1010, 1010, 1010, 1007,  999, 1008, 1008, 1008,
1937      1010, 1008, 1015, 1015, 1015, 1008, 1003, 1011, 1011, 1011,
1938      1006, 1011, 1013, 1013, 1013, 1011, 1002, 1018, 1018, 1018,
1939      1013, 1016, 1016, 1016,    0, 1009, 1021, 1021, 1021, 1016,
1940      1005,    0, 1014, 1014, 1014, 1012, 1014, 1017, 1017, 1017,
1941
1942      1014, 1017, 1019, 1019, 1019, 1017, 1024, 1024, 1024, 1008,
1943      1019, 1027, 1027, 1027, 1015,    0, 1020, 1020, 1020, 1011,
1944      1020,    0,    0,    0, 1020, 1022, 1022, 1022,    0, 1018,
1945      1030, 1030, 1030, 1022,    0, 1023, 1023, 1023, 1021, 1023,
1946      1025, 1025, 1025, 1023, 1014, 1033, 1033, 1033, 1025, 1017,
1947         0, 1026, 1026, 1026,    0, 1026,    0,    0, 1024, 1026,
1948      1036, 1036, 1036, 1027, 1028, 1028, 1028,    0, 1020, 1029,
1949      1029, 1029, 1028, 1029, 1039, 1039, 1039, 1029, 1031, 1031,
1950      1031,    0, 1030, 1034, 1034, 1034, 1031, 1023, 1032, 1032,
1951      1032, 1034, 1032, 1037, 1037, 1037, 1032, 1033, 1035, 1035,
1952
1953      1035, 1037, 1035, 1026,    0,    0, 1035, 1038, 1038, 1038,
1954         0, 1038, 1036,    0,    0, 1038, 1040, 1040, 1040,    0,
1955         0, 1029,    0,    0, 1040,    0, 1039, 1041, 1041, 1041,
1956         0, 1041, 1042, 1042, 1042, 1041, 1043, 1043, 1043,    0,
1957      1032, 1044, 1044, 1044, 1043, 1044, 1045, 1045, 1045, 1044,
1958      1035,    0, 1046, 1046, 1046, 1048, 1048, 1048,    0, 1038,
1959      1046, 1047, 1047, 1047,    0, 1047, 1049, 1049, 1049, 1047,
1960      1051, 1051, 1051,    0, 1049, 1054, 1054, 1054,    0, 1041,
1961         0, 1050, 1050, 1050, 1042, 1050, 1052, 1052, 1052, 1050,
1962      1057, 1057, 1057, 1044, 1052, 1053, 1053, 1053, 1045, 1053,
1963
1964      1055, 1055, 1055, 1053, 1060, 1060, 1060, 1048, 1055,    0,
1965      1056, 1056, 1056, 1047, 1056, 1058, 1058, 1058, 1056, 1063,
1966      1063, 1063, 1051, 1058, 1059, 1059, 1059, 1054, 1059, 1061,
1967      1061, 1061, 1059, 1050, 1066, 1066, 1066, 1061, 1069, 1069,
1968      1069,    0, 1057,    0, 1062, 1062, 1062, 1053, 1062, 1064,
1969      1064, 1064, 1062, 1072, 1072, 1072, 1060, 1064,    0, 1065,
1970      1065, 1065, 1056, 1065, 1067, 1067, 1067, 1065, 1075, 1075,
1971      1075, 1063, 1067, 1068, 1068, 1068, 1059, 1068, 1078, 1078,
1972      1078, 1068,    0, 1070, 1070, 1070, 1066, 1080, 1080, 1080,
1973      1069, 1070,    0, 1071, 1071, 1071, 1062, 1071, 1073, 1073,
1974
1975      1073, 1071, 1082, 1082, 1082, 1072, 1073,    0, 1074, 1074,
1976      1074, 1065, 1074, 1077, 1077, 1077, 1074, 1077,    0,    0,
1977      1075, 1077, 1084, 1084, 1084, 1068,    0, 1079, 1079, 1079,
1978      1078, 1079, 1081, 1081, 1081, 1079, 1081,    0,    0, 1080,
1979      1081,    0, 1083, 1083, 1083, 1071, 1083, 1085, 1085, 1085,
1980      1083, 1085,    0,    0, 1082, 1085, 1086, 1086, 1086,    0,
1981      1074,    0, 1087, 1087, 1087, 1077, 1087, 1088, 1088, 1088,
1982      1087, 1089, 1089, 1089, 1084, 1090, 1090, 1090,    0, 1079,
1983      1091, 1091, 1091,    0, 1081, 1092, 1092, 1092, 1093, 1093,
1984      1093, 1095, 1095, 1095, 1083, 1096, 1096, 1096,    0, 1085,
1985
1986      1097, 1097, 1097, 1098, 1098, 1098,    0,    0, 1086, 1099,
1987      1099, 1099,    0,    0, 1087, 1100, 1100, 1100,    0, 1088,
1988      1101, 1101, 1101, 1089, 1102, 1102, 1102, 1090, 1103, 1103,
1989      1103,    0, 1091, 1104, 1104, 1104,    0, 1092,    0,    0,
1990      1093,    0,    0, 1095, 1105, 1105, 1105, 1096, 1106, 1106,
1991      1106,    0, 1097,    0,    0, 1098, 1107, 1107, 1107,    0,
1992         0, 1099, 1108, 1108, 1108,    0,    0, 1100, 1109, 1109,
1993      1109,    0, 1101, 1110, 1110, 1110, 1102, 1111, 1111, 1111,
1994      1103, 1112, 1112, 1112,    0, 1104, 1113, 1113, 1113, 1114,
1995      1114, 1114, 1115, 1115, 1115,    0, 1105, 1116, 1116, 1116,
1996
1997      1106, 1117, 1117, 1117, 1118, 1118, 1118,    0, 1107, 1119,
1998      1119, 1119,    0,    0, 1108, 1120, 1120, 1120,    0,    0,
1999      1109, 1121, 1121, 1121,    0, 1110, 1122, 1122, 1122, 1111,
2000      1123, 1123, 1123, 1112, 1124, 1124, 1124,    0, 1113,    0,
2001         0, 1114,    0,    0, 1115, 1125, 1125, 1125,    0, 1116,
2002      1126, 1126, 1126, 1117,    0,    0, 1118, 1127, 1127, 1127,
2003         0, 1119, 1128, 1128, 1128,    0,    0, 1120, 1129, 1129,
2004      1129,    0,    0, 1121, 1130, 1130, 1130,    0, 1122, 1131,
2005      1131, 1131, 1123, 1132, 1132, 1132, 1124, 1133, 1133, 1133,
2006      1134, 1134, 1134, 1135, 1135, 1135,    0, 1125, 1136, 1136,
2007
2008      1136,    0, 1126, 1137, 1137, 1137, 1138, 1138, 1138, 1127,
2009      1139, 1139, 1139,    0, 1128, 1140, 1140, 1140,    0,    0,
2010      1129, 1141, 1141, 1141,    0,    0, 1130, 1142, 1142, 1142,
2011         0, 1131, 1143, 1143, 1143, 1132, 1144, 1144, 1144, 1133,
2012         0,    0, 1134,    0,    0, 1135, 1145, 1145, 1145,    0,
2013      1136, 1146, 1146, 1146,    0, 1137,    0,    0, 1138, 1147,
2014      1147, 1147, 1139, 1148, 1148, 1148,    0, 1140, 1149, 1149,
2015      1149,    0,    0, 1141, 1150, 1150, 1150,    0,    0, 1142,
2016      1151, 1151, 1151,    0, 1143, 1152, 1152, 1152, 1144, 1153,
2017      1153, 1153, 1154, 1154, 1154, 1155, 1155, 1155, 1145, 1156,
2018
2019      1156, 1156,    0, 1146, 1157, 1157, 1157, 1158, 1158, 1158,
2020         0, 1147, 1159, 1159, 1159, 1148, 1160, 1160, 1160,    0,
2021      1149, 1161, 1161, 1161,    0,    0, 1150, 1162, 1162, 1162,
2022         0,    0, 1151, 1163, 1163, 1163,    0, 1152, 1164, 1164,
2023      1164, 1153,    0,    0, 1154,    0,    0, 1155, 1165, 1165,
2024      1165, 1156, 1166, 1166, 1166,    0, 1157,    0,    0, 1158,
2025      1167, 1167, 1167,    0, 1159, 1168, 1168, 1168, 1160, 1169,
2026      1169, 1169,    0, 1161, 1170, 1170, 1170,    0,    0, 1162,
2027         0,    0,    0,    0,    0, 1163,    0,    0,    0,    0,
2028      1164,    0,    0,    0,    0,    0,    0,    0,    0,    0,
2029
2030      1165,    0,    0,    0, 1166,    0,    0,    0,    0,    0,
2031         0,    0, 1167,    0,    0,    0,    0, 1168,    0,    0,
2032         0, 1169,    0,    0,    0,    0, 1170, 1172, 1172, 1172,
2033      1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172,
2034      1172, 1172, 1172, 1172, 1172, 1173, 1173, 1173, 1173, 1173,
2035      1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173,
2036      1173, 1173, 1173, 1174, 1174, 1174, 1174, 1174, 1174, 1174,
2037      1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174,
2038      1174, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175,
2039      1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1176,
2040
2041      1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176,
2042      1176, 1176, 1176, 1176, 1176, 1176, 1176, 1177, 1177, 1177,
2043      1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177,
2044      1177, 1177, 1177, 1177, 1177, 1178, 1178, 1178, 1178, 1178,
2045      1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178,
2046      1178, 1178, 1178, 1179, 1179, 1179, 1179, 1179, 1179, 1179,
2047      1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179,
2048      1179, 1180, 1180, 1180, 1180, 1180, 1180, 1180, 1180, 1180,
2049      1180, 1180, 1180, 1180, 1180, 1180, 1180, 1180, 1180, 1181,
2050      1181, 1181, 1181, 1181, 1181, 1181, 1181, 1181, 1181, 1181,
2051
2052      1181, 1181, 1181, 1181, 1181, 1181, 1181, 1182, 1182, 1182,
2053      1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182, 1182,
2054      1182, 1182, 1182, 1182, 1182, 1183, 1183, 1183, 1183, 1183,
2055      1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183,
2056      1183, 1183, 1183, 1184, 1184, 1184, 1184, 1184, 1184, 1184,
2057      1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184,
2058      1184, 1185, 1185, 1185, 1185, 1185, 1185, 1185, 1185, 1185,
2059      1185, 1185, 1185, 1185, 1185, 1185, 1185, 1185, 1185, 1186,
2060      1186, 1186, 1186, 1186, 1186, 1186, 1186, 1186, 1186, 1186,
2061      1186, 1186, 1186, 1186, 1186, 1186, 1186, 1187, 1187, 1187,
2062
2063      1187, 1187, 1187, 1187, 1187, 1187, 1187, 1187, 1187, 1187,
2064      1187, 1187, 1187, 1187, 1187, 1188, 1188, 1188, 1188, 1188,
2065      1188, 1188, 1188, 1188, 1188, 1188, 1188, 1188, 1188, 1188,
2066      1188, 1188, 1188, 1189, 1189, 1189, 1189, 1189, 1189, 1189,
2067      1189, 1189, 1189, 1189, 1189, 1189, 1189, 1189, 1189, 1189,
2068      1189, 1190, 1190, 1190, 1190, 1190, 1190, 1190, 1190, 1190,
2069      1190, 1190, 1190, 1190, 1190, 1190, 1190, 1190, 1190, 1193,
2070      1193, 1193,    0, 1193, 1193,    0,    0, 1193, 1193, 1193,
2071      1193,    0, 1193, 1193, 1193, 1193, 1193, 1194, 1194, 1194,
2072         0, 1194, 1194, 1194,    0, 1194, 1194, 1194, 1194, 1194,
2073
2074      1194, 1194, 1194, 1194, 1194, 1195, 1195, 1195,    0, 1195,
2075      1195,    0, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195,
2076      1195, 1195, 1196, 1196, 1196,    0, 1196, 1196, 1196, 1196,
2077      1196, 1196, 1196, 1196, 1196, 1196, 1196, 1196, 1196, 1196,
2078      1197, 1197, 1197,    0, 1197, 1197, 1197, 1197, 1197, 1197,
2079      1197, 1197, 1197, 1197, 1197, 1197, 1197, 1197, 1198, 1198,
2080      1198,    0,    0,    0, 1198,    0,    0,    0,    0, 1198,
2081         0,    0, 1198, 1199, 1199, 1199,    0,    0, 1199,    0,
2082      1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199, 1199,
2083      1200, 1200, 1200,    0, 1200, 1200, 1200, 1200, 1200, 1200,
2084
2085      1200, 1200, 1200, 1200, 1200, 1200, 1200, 1200, 1201, 1201,
2086      1201,    0, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201,
2087      1201, 1201, 1201, 1201, 1201, 1201, 1202,    0,    0,    0,
2088         0,    0, 1202,    0,    0,    0,    0, 1202,    0,    0,
2089      1202, 1203, 1203, 1203, 1203, 1203, 1203, 1203, 1203, 1203,
2090      1203, 1203, 1203, 1203, 1203, 1203, 1203, 1203, 1204, 1204,
2091         0,    0,    0,    0, 1204,    0,    0,    0,    0, 1204,
2092         0,    0, 1204, 1204, 1205,    0,    0,    0,    0,    0,
2093         0,    0,    0, 1205,    0, 1205,    0,    0, 1205, 1207,
2094      1207, 1207, 1207, 1207, 1207, 1207, 1207, 1207, 1207, 1207,
2095
2096      1207, 1207, 1207, 1207, 1207, 1207, 1207, 1208,    0, 1208,
2097         0, 1208, 1208, 1208, 1208, 1208,    0, 1208, 1208,    0,
2098      1208, 1208,    0, 1208, 1209, 1209, 1209,    0, 1209, 1209,
2099      1209, 1209, 1209,    0, 1209, 1209, 1209, 1209, 1209, 1209,
2100         0, 1209, 1210, 1210, 1210,    0, 1210, 1210, 1210, 1210,
2101      1210, 1210, 1210, 1210, 1210, 1210, 1210,    0, 1210, 1211,
2102      1211, 1211,    0, 1211, 1211, 1211, 1211, 1211, 1211, 1211,
2103      1211,    0, 1211, 1211,    0, 1211, 1212,    0, 1212,    0,
2104      1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212, 1212,
2105      1212,    0, 1212, 1213,    0, 1213,    0, 1213, 1213, 1213,
2106
2107      1213, 1213,    0, 1213, 1213, 1213, 1213, 1213, 1213, 1213,
2108      1213, 1214,    0, 1214,    0, 1214, 1214, 1214, 1214, 1214,
2109      1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1218,
2110      1218, 1218,    0, 1218, 1218, 1218, 1218, 1218, 1218, 1218,
2111      1218, 1218, 1218, 1218, 1218, 1218, 1218, 1220, 1220, 1220,
2112         0, 1220, 1220, 1220,    0, 1220, 1220, 1220, 1220, 1220,
2113      1220, 1220, 1220, 1220, 1220, 1221, 1221, 1221,    0, 1221,
2114      1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221, 1221,
2115      1221, 1221, 1221, 1222, 1222,    0, 1222,    0,    0, 1222,
2116      1223,    0, 1223, 1223,    0, 1223,    0, 1223,    0, 1223,
2117
2118      1224, 1224, 1224,    0, 1224, 1224, 1224, 1224, 1224, 1224,
2119      1224, 1224, 1224, 1224, 1224, 1224, 1224, 1224, 1226, 1226,
2120      1226,    0, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226,
2121      1226, 1226, 1226, 1226, 1226, 1226, 1227, 1227, 1227,    0,
2122      1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227,
2123      1227, 1227, 1227, 1227, 1229, 1229, 1229,    0, 1229, 1229,
2124         0,    0, 1229, 1229, 1229, 1229,    0, 1229, 1229, 1229,
2125      1229, 1229, 1230, 1230, 1230,    0, 1230, 1230, 1230, 1230,
2126      1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1230, 1231,
2127      1231, 1231,    0, 1231, 1231, 1231, 1231, 1231, 1231, 1231,
2128
2129      1231, 1231, 1231, 1231, 1231, 1231, 1231, 1232, 1232, 1232,
2130         0, 1232, 1232,    0, 1232, 1232, 1232, 1232, 1232, 1232,
2131      1232, 1232, 1232, 1232, 1233, 1233, 1233,    0, 1233, 1233,
2132      1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233, 1233,
2133      1233, 1233, 1234, 1234, 1234,    0, 1234, 1234, 1234, 1234,
2134      1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234,
2135      1235, 1235, 1235,    0, 1235, 1235, 1235, 1235, 1235, 1235,
2136      1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1236, 1236,
2137      1236,    0,    0,    0, 1236,    0,    0,    0,    0, 1236,
2138         0,    0, 1236, 1237, 1237, 1237,    0,    0, 1237,    0,
2139
2140      1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237, 1237,
2141      1238, 1238, 1238,    0, 1238, 1238, 1238, 1238, 1238, 1238,
2142      1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1239,    0,
2143         0,    0,    0,    0, 1239,    0,    0,    0,    0, 1239,
2144         0,    0, 1239, 1240, 1240, 1240, 1240, 1240, 1240, 1240,
2145      1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240,
2146      1241, 1241,    0,    0,    0,    0, 1241,    0,    0,    0,
2147         0, 1241,    0,    0, 1241, 1241, 1242,    0,    0,    0,
2148         0,    0,    0,    0,    0, 1242,    0, 1242,    0,    0,
2149      1242, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244,
2150
2151      1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1244, 1245,
2152         0, 1245,    0, 1245, 1245, 1245, 1245, 1245,    0, 1245,
2153      1245,    0, 1245, 1245,    0, 1245, 1246, 1246, 1246,    0,
2154      1246, 1246, 1246, 1246, 1246,    0, 1246, 1246, 1246, 1246,
2155      1246, 1246,    0, 1246, 1247, 1247, 1247,    0, 1247, 1247,
2156      1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247, 1247,    0,
2157      1247, 1248, 1248, 1248,    0, 1248, 1248, 1248, 1248, 1248,
2158      1248, 1248, 1248,    0, 1248, 1248,    0, 1248, 1249,    0,
2159      1249,    0, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249,
2160      1249, 1249, 1249,    0, 1249, 1250,    0, 1250,    0, 1250,
2161
2162      1250, 1250, 1250, 1250,    0, 1250, 1250, 1250, 1250, 1250,
2163      1250, 1250, 1250, 1251,    0, 1251,    0, 1251, 1251, 1251,
2164      1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251,
2165      1251, 1256, 1256, 1256,    0, 1256, 1256, 1256, 1256, 1256,
2166      1256, 1256, 1256, 1256, 1256, 1256, 1256, 1256, 1257, 1257,
2167      1257,    0, 1257, 1257, 1257, 1257, 1257, 1257, 1257, 1257,
2168      1257, 1257, 1257, 1257, 1257, 1257, 1258, 1258,    0, 1258,
2169         0,    0, 1258, 1259, 1259, 1259,    0, 1259, 1259, 1259,
2170      1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259, 1259,
2171      1259, 1260, 1260, 1260,    0, 1260, 1260, 1260, 1260, 1260,
2172
2173      1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1262,
2174      1262, 1262,    0, 1262, 1262, 1262, 1262, 1262, 1262, 1262,
2175      1262, 1262, 1262, 1262, 1262, 1262, 1262, 1263, 1263, 1263,
2176         0, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263,
2177      1263, 1263, 1263, 1263, 1263, 1265, 1265, 1265,    0, 1265,
2178      1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265,
2179      1265, 1265, 1266, 1266, 1266,    0, 1266, 1266,    0,    0,
2180      1266, 1266, 1266, 1266,    0, 1266, 1266, 1266, 1266, 1266,
2181      1267, 1267, 1267,    0, 1267, 1267, 1267, 1267, 1267, 1267,
2182      1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1268, 1268,
2183
2184      1268,    0, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268,
2185      1268, 1268, 1268, 1268, 1268, 1268, 1269, 1269, 1269,    0,
2186      1269, 1269, 1269, 1269, 1269, 1269, 1269, 1269, 1269, 1269,
2187      1269, 1269, 1269, 1269, 1270, 1270, 1270,    0, 1270, 1270,
2188      1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270,
2189      1270, 1270, 1271, 1271, 1271,    0, 1271, 1271,    0, 1271,
2190      1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1272,
2191      1272, 1272,    0,    0,    0, 1272,    0,    0,    0,    0,
2192      1272,    0,    0, 1272, 1273, 1273, 1273,    0,    0, 1273,
2193         0, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273,
2194
2195      1273, 1274, 1274, 1274,    0, 1274, 1274, 1274, 1274, 1274,
2196      1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1275,
2197      1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275,
2198      1275, 1275, 1275, 1275, 1275, 1275, 1276, 1276, 1276,    0,
2199      1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276,
2200      1276, 1276, 1276, 1277, 1277, 1277, 1277, 1277, 1277, 1277,
2201      1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277,
2202      1277, 1278, 1278, 1278,    0, 1278, 1278, 1278, 1278, 1278,
2203      1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1279, 1279,
2204      1279,    0, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279,
2205
2206      1279, 1279, 1279, 1279, 1279, 1280,    0,    0,    0, 1280,
2207         0,    0,    0,    0,    0,    0,    0, 1280,    0, 1280,
2208      1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282,
2209      1282, 1282, 1282,    0, 1282, 1282,    0, 1282, 1171, 1171,
2210      1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171,
2211      1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171,
2212      1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171,
2213      1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171,
2214      1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171,
2215      1171, 1171, 1171, 1171, 1171, 1171
2216
2217     } ;
2218
2219 extern int preYY_flex_debug;
2220 int preYY_flex_debug = 0;
2221
2222 static yy_state_type *yy_state_buf=0, *yy_state_ptr=0;
2223 static char *yy_full_match;
2224 static int yy_lp;
2225 static int yy_looking_for_trail_begin = 0;
2226 static int yy_full_lp;
2227 static int *yy_full_state;
2228 #define YY_TRAILING_MASK 0x2000
2229 #define YY_TRAILING_HEAD_MASK 0x4000
2230 #define REJECT \
2231 { \
2232 *yy_cp = (yy_hold_char); /* undo effects of setting up preYYtext */ \
2233 yy_cp = (yy_full_match); /* restore poss. backed-over text */ \
2234 (yy_lp) = (yy_full_lp); /* restore orig. accepting pos. */ \
2235 (yy_state_ptr) = (yy_full_state); /* restore orig. state */ \
2236 yy_current_state = *(yy_state_ptr); /* restore curr. state */ \
2237 ++(yy_lp); \
2238 goto find_rule; \
2239 }
2240
2241 #define yymore() yymore_used_but_not_detected
2242 #define YY_MORE_ADJ 0
2243 #define YY_RESTORE_YY_MORE_OFFSET
2244 char *preYYtext;
2245 #line 1 "pre.l"
2246 /******************************************************************************
2247  *
2248  * 
2249  *
2250  * Copyright (C) 1997-2012 by Dimitri van Heesch.
2251  *
2252  * Permission to use, copy, modify, and distribute this software and its
2253  * documentation under the terms of the GNU General Public License is hereby 
2254  * granted. No representations are made about the suitability of this software 
2255  * for any purpose. It is provided "as is" without express or implied warranty.
2256  * See the GNU General Public License for more details.
2257  *
2258  * Documents produced by Doxygen are derivative works derived from the
2259  * input used in their production; they are not affected by this license.
2260  *
2261  */
2262 #line 19 "pre.l"
2263
2264 /*
2265  *      includes
2266  */
2267
2268 #include <stdio.h>
2269 #include <assert.h>
2270 #include <ctype.h>
2271 #include <errno.h>
2272
2273 #include "qtbc.h"
2274 #include <qarray.h>
2275 #include <qstack.h>
2276 #include <qfile.h>
2277 #include <qstrlist.h>
2278 #include <qdict.h>
2279 #include <qregexp.h>
2280 #include <qfileinfo.h>
2281 #include <qdir.h>
2282   
2283 #include "pre.h"
2284 #include "constexp.h"
2285 #include "define.h"
2286 #include "doxygen.h"
2287 #include "message.h"
2288 #include "util.h"
2289 #include "defargs.h"
2290 #include "debug.h"
2291 #include "bufstr.h"
2292 #include "portable.h"
2293 #include "bufstr.h"
2294 #include "arguments.h"
2295 #include "entry.h"
2296
2297 #define YY_NEVER_INTERACTIVE 1
2298   
2299
2300 struct FileState
2301 {
2302   FileState(int size) : fileBuf(size), 
2303                         oldFileBuf(0), oldFileBufPos(0) {}
2304   int lineNr;
2305   BufStr fileBuf;
2306   BufStr *oldFileBuf;
2307   int oldFileBufPos;
2308   YY_BUFFER_STATE bufState;
2309   QCString fileName;
2310 };  
2311
2312 /** @brief Singleton that manages the defines available while 
2313  *  proprocessing files. 
2314  */
2315 class DefineManager
2316 {
2317   /** Local class used to hold the defines for a single file */
2318   class DefinesPerFile
2319   {
2320     public:
2321       /** Creates an empty container for defines */
2322       DefinesPerFile() : m_defines(257), m_includedFiles(17)
2323       {
2324         m_defines.setAutoDelete(TRUE);
2325       }
2326       /** Destroys the object */
2327       virtual ~DefinesPerFile()
2328       {
2329       }
2330       /** Adds a define in the context of a file. Will replace 
2331        *  an existing define with the same name (redefinition)
2332        *  @param def The Define object to add.
2333        */
2334       void addDefine(Define *def)
2335       {
2336         Define *d = m_defines.find(def->name);
2337         if (d!=0) // redefine
2338         {
2339           m_defines.remove(d->name);
2340         }
2341         m_defines.insert(def->name,def);
2342       }
2343       /** Adds an include file for this file 
2344        *  @param fileName The name of the include file
2345        */
2346       void addInclude(const char *fileName)
2347       {
2348         m_includedFiles.insert(fileName,(void*)0x8);
2349       }
2350       void collectDefines(DefineDict *dict,QDict<void> &includeStack);
2351     private:
2352       DefineDict m_defines;
2353       QDict<void> m_includedFiles;
2354   };
2355
2356   public:
2357     friend class DefinesPerFile;
2358     /** Returns a reference to the singleton */
2359     static DefineManager &instance()
2360     {
2361       if (theInstance==0) theInstance = new DefineManager;
2362       return *theInstance;
2363     }
2364     /** Deletes the singleton */
2365     static void deleteInstance()
2366     {
2367       delete theInstance;
2368       theInstance = 0;
2369     }
2370     /** Starts a context in which defines are collected. 
2371      *  Called at the start of a new file that is preprocessed.
2372      *  @param fileName the name of the file to process.
2373      */
2374     void startContext(const char *fileName)
2375     {
2376       //printf("DefineManager::startContext()\n");
2377       m_contextDefines.clear();
2378       if (fileName==0) return;
2379       DefinesPerFile *dpf = m_fileMap.find(fileName);
2380       if (dpf==0)
2381       {
2382         //printf("New file!\n");
2383         dpf = new DefinesPerFile;
2384         m_fileMap.insert(fileName,dpf);
2385       }
2386     }
2387     /** Ends the context started with startContext() freeing any
2388      *  defines collected within in this context.
2389      */
2390     void endContext()
2391     {
2392       //printf("DefineManager::endContext()\n");
2393       m_contextDefines.clear();
2394     }
2395     /** Add an included file to the current context.
2396      *  If the file has been pre-processed already, all defines are added
2397      *  to the context.
2398      *  @param fileName The name of the include file to add to the context.
2399      */
2400     void addFileToContext(const char *fileName)
2401     {
2402       if (fileName==0) return;
2403       //printf("DefineManager::addFileToContext(%s)\n",fileName);
2404       DefinesPerFile *dpf = m_fileMap.find(fileName);
2405       if (dpf==0)
2406       {
2407         //printf("New file!\n");
2408         dpf = new DefinesPerFile;
2409         m_fileMap.insert(fileName,dpf);
2410       }
2411       else
2412       {
2413         //printf("existing file!\n");
2414         QDict<void> includeStack(17);
2415         dpf->collectDefines(&m_contextDefines,includeStack);
2416       }
2417     }
2418
2419     /** Add a define to the manager object.
2420      *  @param fileName The file in which the define was found
2421      *  @param def The Define object to add.
2422      */
2423     void addDefine(const char *fileName,Define *def)
2424     {
2425       if (fileName==0) return;
2426       //printf("DefineManager::addDefine(%s,%s)\n",fileName,def->name.data());
2427       Define *d = m_contextDefines.find(def->name);
2428       if (d!=0) // redefine
2429       {
2430         m_contextDefines.remove(d->name);
2431       }
2432       m_contextDefines.insert(def->name,def);
2433
2434       DefinesPerFile *dpf = m_fileMap.find(fileName);
2435       if (dpf==0)
2436       {
2437         dpf = new DefinesPerFile;
2438       }
2439       dpf->addDefine(def);
2440     }
2441
2442     /** Add an include relation to the manager object.
2443      *  @param fromFileName file name in which the include was found.
2444      *  @param toFileName file name that is included.
2445      */
2446     void addInclude(const char *fromFileName,const char *toFileName)
2447     {
2448       //printf("DefineManager::addInclude(%s,%s)\n",fromFileName,toFileName);
2449       if (fromFileName==0 || toFileName==0) return;
2450       DefinesPerFile *dpf = m_fileMap.find(fromFileName);
2451       if (dpf==0)
2452       {
2453         dpf = new DefinesPerFile;
2454       }
2455       dpf->addInclude(toFileName);
2456     }
2457     /** Returns a Define object given its name or 0 if the Define does
2458      *  not exist.
2459      */
2460     Define *isDefined(const char *name) const
2461     {
2462       return m_contextDefines.find(name);
2463     }
2464     /** Returns a reference to the defines found in the current context. */
2465     const DefineDict &defineContext() const
2466     {
2467       return m_contextDefines;
2468     }
2469   private:
2470     static DefineManager *theInstance;
2471
2472     /** Helper function to collect all define for a given file */
2473     void collectDefinesForFile(const char *fileName,DefineDict *dict)
2474     {
2475       if (fileName==0) return;
2476       DefinesPerFile *dpf = m_fileMap.find(fileName);
2477       if (dpf)
2478       {
2479         QDict<void> includeStack(17);
2480         dpf->collectDefines(dict,includeStack);
2481       }
2482     }
2483
2484     /** Helper function to return the DefinesPerFile object for a given file name. */
2485     DefinesPerFile *find(const char *fileName) const
2486     {
2487       if (fileName==0) return 0;
2488       return m_fileMap.find(fileName);
2489     }
2490
2491     /** Creates a new DefineManager object */
2492     DefineManager() : m_fileMap(1009), m_contextDefines(1009)
2493     {
2494       m_fileMap.setAutoDelete(TRUE);
2495     }
2496
2497     /** Destroys the object */
2498     virtual ~DefineManager() 
2499     {
2500     }
2501
2502     QDict<DefinesPerFile> m_fileMap;
2503     DefineDict m_contextDefines;
2504 };
2505
2506 /** Singleton instance */
2507 DefineManager *DefineManager::theInstance = 0;
2508
2509 /** Collects all defines for a file and all files that the file includes.
2510  *  This function will recursively call itself for each file.
2511  *  @param dict The dictionary to fill with the defines. A redefine will
2512  *         replace a previous definition.
2513  *  @param includeStack The stack of includes, used to stop recursion in
2514  *         case there is a cyclic include dependency.
2515  */
2516 void DefineManager::DefinesPerFile::collectDefines(
2517                      DefineDict *dict,QDict<void> &includeStack)
2518 {
2519   //printf("DefinesPerFile::collectDefines #defines=%d\n",m_defines.count());
2520   {
2521     QDictIterator<void> di(m_includedFiles);
2522     for (di.toFirst();(di.current());++di)
2523     {
2524       QCString incFile = di.currentKey();
2525       DefinesPerFile *dpf = DefineManager::instance().find(incFile);
2526       if (dpf && includeStack.find(incFile)==0) 
2527       {
2528         //printf("  processing include %s\n",incFile.data());
2529         includeStack.insert(incFile,(void*)0x8);
2530         dpf->collectDefines(dict,includeStack);
2531       }
2532     }
2533   }
2534   {
2535     QDictIterator<Define> di(m_defines);
2536     Define *def;
2537     for (di.toFirst();(def=di.current());++di)
2538     {
2539       Define *d = dict->find(def->name);
2540       if (d!=0) // redefine
2541       {
2542         dict->remove(d->name);
2543       }
2544       dict->insert(def->name,def);
2545       //printf("  adding define %s\n",def->name.data());
2546     }
2547   }
2548 }
2549
2550 /* -----------------------------------------------------------------
2551  *
2552  *      scanner's state
2553  */
2554
2555 static int                g_yyLineNr   = 1;
2556 static QCString           g_yyFileName;
2557 static FileDef           *g_yyFileDef;
2558 static FileDef           *g_inputFileDef;
2559 static int                g_ifcount    = 0;
2560 static QStrList          *g_pathList = 0;  
2561 static QStack<FileState>  g_includeStack;
2562 static QDict<int>        *g_argDict;
2563 static int                g_defArgs = -1;
2564 static QCString           g_defName;
2565 static QCString           g_defText;
2566 static QCString           g_defLitText;
2567 static QCString           g_defArgsStr;
2568 static QCString           g_defExtraSpacing;
2569 static bool               g_defVarArgs;
2570 static int                g_level;
2571 static int                g_lastCContext;
2572 static int                g_lastCPPContext;
2573 static QArray<int>        g_levelGuard;
2574 static BufStr            *g_inputBuf;
2575 static int                g_inputBufPos;
2576 static BufStr            *g_outputBuf;
2577 static int                g_roundCount;
2578 static bool               g_quoteArg;
2579 static DefineDict        *g_expandedDict;
2580 static int                g_findDefArgContext;
2581 static bool               g_expectGuard;
2582 static QCString           g_guardName;
2583 static QCString           g_lastGuardName;
2584 static QCString           g_incName;
2585 static QCString           g_guardExpr;
2586 static int                g_curlyCount;
2587 static bool               g_nospaces; // add extra spaces during macro expansion
2588
2589 static bool               g_macroExpansion; // from the configuration
2590 static bool               g_expandOnlyPredef; // from the configuration
2591 static int                g_commentCount;
2592 static bool               g_insideComment;
2593 static bool               g_isImported;
2594 static QCString           g_blockName;
2595 static int                g_condCtx;
2596 static bool               g_skip;
2597 static QStack<bool>       g_condStack;
2598 static bool               g_insideCS; // C# has simpler preprocessor
2599 static bool               g_isSource;
2600
2601 static bool               g_lexInit = FALSE;
2602
2603 //DefineDict* getGlobalDefineDict() 
2604 //{
2605 //  return g_globalDefineDict;
2606 //}
2607
2608 static void setFileName(const char *name)
2609 {
2610   bool ambig;
2611   QFileInfo fi(name);
2612   g_yyFileName=convertToQCString(fi.absFilePath());
2613   g_yyFileDef=findFileDef(Doxygen::inputNameDict,g_yyFileName,ambig);
2614   if (g_yyFileDef==0) // if this is not an input file check if it is an
2615                       // include file
2616   {
2617     g_yyFileDef=findFileDef(Doxygen::includeNameDict,g_yyFileName,ambig);
2618   }
2619   //printf("setFileName(%s) g_yyFileName=%s g_yyFileDef=%p\n",
2620   //    name,g_yyFileName.data(),g_yyFileDef);
2621   if (g_yyFileDef && g_yyFileDef->isReference()) g_yyFileDef=0;
2622   g_insideCS = getLanguageFromFileName(g_yyFileName)==SrcLangExt_CSharp;
2623   g_isSource = guessSection(g_yyFileName);
2624 }
2625
2626 static void incrLevel()
2627 {
2628   g_level++;
2629   g_levelGuard.resize(g_level);
2630   g_levelGuard[g_level-1]=FALSE;
2631   //printf("%s line %d: incrLevel %d\n",g_yyFileName.data(),g_yyLineNr,g_level);
2632 }
2633
2634 static void decrLevel()
2635 {
2636   //printf("%s line %d: decrLevel %d\n",g_yyFileName.data(),g_yyLineNr,g_level);
2637   if (g_level > 0)
2638   {
2639     g_level--;
2640     g_levelGuard.resize(g_level);
2641   }
2642   else
2643   {
2644     warn(g_yyFileName,g_yyLineNr,"warning: More #endif's than #if's found.\n");
2645   }
2646 }
2647
2648 static bool otherCaseDone()
2649 {
2650   if (g_level==0)
2651   {
2652     warn(g_yyFileName,g_yyLineNr,"warning: Found an #else without a preceding #if.\n");
2653     return TRUE;
2654   }
2655   else
2656   {
2657     return g_levelGuard[g_level-1];
2658   }
2659 }
2660
2661 static void setCaseDone(bool value)
2662 {
2663   g_levelGuard[g_level-1]=value;
2664 }
2665
2666 #if 0
2667 static bool macroIsAccessible(Define *def)
2668 {
2669   //printf("macroIsAccessible(%s) input=%s def=%s\n",
2670   //    def->name.data(),g_inputFileDef?g_inputFileDef->name().data():"<none>",
2671   //    def->fileDef ? def->fileDef->name().data() : "<none>");
2672   if (def && def->isPredefined) // predefined macro -> globally accessible
2673   {
2674     //printf("%s: predefined macro %s\n",g_inputFileDef->name().data(),def->name.data());
2675     return TRUE;
2676   }
2677   if (def && def->fileDef==g_inputFileDef)
2678   {
2679     //printf("%s: macro %s defined in this file at line %d now at %d\n",
2680     //  g_inputFileDef->name().data(),def->name.data(),def->lineNr,g_yyLineNr);
2681     return def->lineNr<=g_yyLineNr;
2682   }
2683   if (g_inputFileDef && def && def->fileDef) // check if g_inputFileDef actually includes def->fileDef
2684   {
2685     QDict<FileDef> includedFiles(257);
2686     bool b = g_inputFileDef->includes(def->fileDef,&includedFiles);
2687     //printf("%s: Checking for accessibility of define '%s' (defined in %s): result=%d\n",
2688     //       g_inputFileDef->name().data(),def->name.data(),def->fileDef->name().data(),b);
2689     return b;
2690   }
2691   if (g_inputFileDef && def && !def->fileName.isEmpty())
2692   {
2693     bool b = g_inputFileDef->includesByName(def->fileName);
2694     //printf("%s: Checking for accessibility of define '%s' (defined in %s): result=%d\n",
2695     //       g_inputFileDef->name().data(),def->name.data(),def->fileName.data(),b);
2696     return b;
2697   }
2698   //printf("not accessible!\n");
2699   return FALSE;
2700 }
2701
2702 static Define *isDefined(const char *name)
2703 {
2704   Define *def=0;
2705   if (name)
2706   {
2707     def=g_globalDefineDict->find(name);
2708     if (def && def->undef) def=0;
2709     if (def && !macroIsAccessible(def)) def=0;
2710   }
2711   //printf("isDefined(%s)=%p\n",name,def);
2712   return def;
2713 }
2714 #endif
2715
2716
2717 static QDict<void> g_allIncludes(10009);
2718
2719 static FileState *checkAndOpenFile(const QCString &fileName,bool &alreadyIncluded)
2720 {
2721   alreadyIncluded = FALSE;
2722   FileState *fs = 0;
2723   //printf("checkAndOpenFile(%s)\n",fileName.data());
2724   QFileInfo fi(fileName);
2725   if (fi.exists() && fi.isFile())
2726   {
2727     static QStrList &exclPatterns = Config_getList("EXCLUDE_PATTERNS");
2728     if (patternMatch(fi,&exclPatterns)) return 0;
2729
2730     QCString absName = convertToQCString(fi.absFilePath());
2731
2732     // global guard
2733     if (g_curlyCount==0) // not #include inside { ... }
2734     {
2735       if (g_allIncludes.find(absName)!=0)
2736       {
2737         alreadyIncluded = TRUE;
2738         //printf("  already included 1\n");
2739         return 0; // already done
2740       }
2741       g_allIncludes.insert(absName,(void *)0x8);
2742     }
2743     // check include stack for absName
2744
2745     QStack<FileState> tmpStack;
2746     g_includeStack.setAutoDelete(FALSE);
2747     while ((fs=g_includeStack.pop()))
2748     {
2749       if (fs->fileName==absName) alreadyIncluded=TRUE;
2750       tmpStack.push(fs);
2751     }
2752     while ((fs=tmpStack.pop()))
2753     {
2754       g_includeStack.push(fs);
2755     }
2756     g_includeStack.setAutoDelete(TRUE);
2757
2758     if (alreadyIncluded)
2759     {
2760       //printf("  already included 2\n");
2761       return 0;
2762     }
2763     //printf("#include %s\n",absName.data());
2764
2765     fs = new FileState(fi.size()+4096);
2766     alreadyIncluded = FALSE;
2767     if (!readInputFile(absName,fs->fileBuf))
2768     { // error
2769       //printf("  error reading\n");
2770       delete fs;
2771       fs=0;
2772     }
2773     else
2774     {
2775       fs->oldFileBuf    = g_inputBuf;
2776       fs->oldFileBufPos = g_inputBufPos;
2777     }
2778   }
2779   return fs;
2780 }
2781
2782 static FileState *findFile(const char *fileName,bool localInclude,bool &alreadyIncluded)
2783 {
2784   //printf("** findFile(%s,%d) g_yyFileName=%s\n",fileName,localInclude,g_yyFileName.data());
2785   if (localInclude && !g_yyFileName.isEmpty())
2786   {
2787     QFileInfo fi(g_yyFileName);
2788     if (fi.exists())
2789     {
2790       QCString absName = QCString(fi.dirPath(TRUE).data())+"/"+fileName;
2791       FileState *fs = checkAndOpenFile(absName,alreadyIncluded);
2792       if (fs)
2793       {
2794         setFileName(absName);
2795         g_yyLineNr=1;
2796         return fs;
2797       }
2798       else if (alreadyIncluded)
2799       {
2800         return 0;
2801       }
2802     }
2803   }
2804   if (g_pathList==0) 
2805   {
2806     return 0;
2807   }
2808   char *s=g_pathList->first();
2809   while (s)
2810   {
2811     QCString absName = (QCString)s+"/"+fileName;
2812     //printf("  Looking for %s in %s\n",fileName,s);
2813     FileState *fs = checkAndOpenFile(absName,alreadyIncluded);
2814     if (fs)
2815     {
2816       setFileName(absName);
2817       g_yyLineNr=1;
2818       //printf("  -> found it\n");
2819       return fs;
2820     }
2821     else if (alreadyIncluded)
2822     {
2823       return 0;
2824     }
2825
2826     s=g_pathList->next();
2827   } 
2828   return 0;
2829 }
2830
2831 static QCString extractTrailingComment(const char *s)
2832 {
2833   if (s==0) return "";
2834   int i=strlen(s)-1;
2835   while (i>=0)
2836   {
2837     char c=s[i];
2838     switch (c)
2839     {
2840       case '/':
2841         {
2842           i--;
2843           if (i>=0 && s[i]=='*') // end of a comment block
2844           {
2845             i--;
2846             while (i>0 && !(s[i-1]=='/' && s[i]=='*')) i--;
2847             if (i==0) 
2848             {
2849               i++;
2850             }
2851             // only /*!< or /**< are treated as a comment for the macro name,
2852             // otherwise the comment is treated as part of the macro definition
2853             return ((s[i+1]=='*' || s[i+1]=='!') && s[i+2]=='<') ? &s[i-1] : ""; 
2854           }
2855           else
2856           {
2857             return "";
2858           }
2859         } 
2860         break;
2861         // whitespace or line-continuation
2862       case ' ':
2863       case '\t': 
2864       case '\r':
2865       case '\n':
2866       case '\\':
2867         break;
2868       default:
2869         return "";
2870     }
2871     i--;
2872   }
2873   return "";
2874 }
2875
2876 static int getNextChar(const QCString &expr,QCString *rest,uint &pos);
2877 static int getCurrentChar(const QCString &expr,QCString *rest,uint pos);
2878 static void unputChar(const QCString &expr,QCString *rest,uint &pos,char c);
2879 static void expandExpression(QCString &expr,QCString *rest,int pos);
2880
2881 static QCString stringize(const QCString &s)
2882 {
2883   QCString result;
2884   uint i=0;
2885   bool inString=FALSE;
2886   bool inChar=FALSE;
2887   char c,pc;
2888   while (i<s.length())
2889   {
2890     if (!inString && !inChar)
2891     {
2892       while (i<s.length() && !inString && !inChar)
2893       {
2894         c=s.at(i++);
2895         if (c=='"')
2896         {
2897           result+="\\\"";
2898           inString=TRUE;
2899         }
2900         else if (c=='\'')
2901         {
2902           result+=c;
2903           inChar=TRUE;
2904         }
2905         else
2906         {
2907           result+=c;
2908         }
2909       }
2910     }
2911     else if (inChar)
2912     {
2913       while (i<s.length() && inChar)
2914       {
2915         c=s.at(i++);
2916         if (c=='\'')
2917         {
2918           result+='\'';
2919           inChar=FALSE;
2920         }
2921         else if (c=='\\')
2922         {
2923           result+="\\\\";
2924         }
2925         else
2926         {
2927           result+=c;
2928         }
2929       }
2930     }
2931     else
2932     {
2933       pc=0;
2934       while (i<s.length() && inString)
2935       {
2936         char c=s.at(i++);
2937         if (c=='"') 
2938         {
2939           result+="\\\"";
2940           inString= pc=='\\';
2941         }
2942         else if (c=='\\')
2943           result+="\\\\";
2944         else
2945           result+=c;
2946         pc=c;
2947       }
2948     }
2949   }
2950   //printf("stringize `%s'->`%s'\n",s.data(),result.data());
2951   return result;
2952 }
2953
2954 /*! Execute all ## operators in expr. 
2955  * If the macro name before or after the operator contains a no-rescan 
2956  * marker (@-) then this is removed (before the concatenated macro name
2957  * may be expanded again.
2958  */
2959 static void processConcatOperators(QCString &expr)
2960 {
2961   //printf("processConcatOperators: in=`%s'\n",expr.data());
2962   QRegExp r("[ \\t\\n]*##[ \\t\\n]*"); 
2963   int l,n,i=0;
2964   if (expr.isEmpty()) return;
2965   while ((n=r.match(expr,i,&l))!=-1)
2966   {
2967     //printf("Match: `%s'\n",expr.data()+i);
2968     if (n+l+1<(int)expr.length() && expr.at(n+l)=='@' && expr.at(n+l+1)=='-')
2969     {
2970       // remove no-rescan marker after ID
2971       l+=2;
2972     }
2973     //printf("found `%s'\n",expr.mid(n,l).data());
2974     // remove the ## operator and the surrounding whitespace
2975     expr=expr.left(n)+expr.right(expr.length()-n-l);
2976     int k=n-1;
2977     while (k>=0 && isId(expr.at(k))) k--; 
2978     if (k>0 && expr.at(k)=='-' && expr.at(k-1)=='@')
2979     {
2980       // remove no-rescan marker before ID
2981       expr=expr.left(k-1)+expr.right(expr.length()-k-1);
2982       n-=2;
2983     }
2984     i=n;
2985   }
2986   //printf("processConcatOperators: out=`%s'\n",expr.data());
2987 }
2988
2989 static void yyunput (int c,char *buf_ptr  );
2990 static void returnCharToStream(char c)
2991 {
2992   unput(c);
2993 }
2994
2995 static inline void addTillEndOfString(const QCString &expr,QCString *rest,
2996                                        uint &pos,char term,QCString &arg)
2997 {
2998   int cc;
2999   while ((cc=getNextChar(expr,rest,pos))!=EOF)
3000   {
3001     if (cc=='\\') arg+=(char)cc,cc=getNextChar(expr,rest,pos);
3002     else if (cc==term) return;
3003     arg+=(char)cc;
3004   }
3005 }
3006
3007 /*! replaces the function macro \a def whose argument list starts at
3008  * \a pos in expression \a expr. 
3009  * Notice that this routine may scan beyond the \a expr string if needed.
3010  * In that case the characters will be read from the input file.
3011  * The replacement string will be returned in \a result and the 
3012  * length of the (unexpanded) argument list is stored in \a len.
3013  */ 
3014 static bool replaceFunctionMacro(const QCString &expr,QCString *rest,int pos,int &len,const Define *def,QCString &result)
3015 {
3016   //printf("replaceFunctionMacro(expr=%s,rest=%s,pos=%d,def=%s) level=%d\n",expr.data(),rest ? rest->data() : 0,pos,def->name.data(),g_level);
3017   uint j=pos;
3018   len=0;
3019   result.resize(0);
3020   int cc;
3021   while ((cc=getCurrentChar(expr,rest,j))!=EOF && isspace(cc)) 
3022   { 
3023     len++; 
3024     getNextChar(expr,rest,j); 
3025   }
3026   if (cc!='(') 
3027   { 
3028     unputChar(expr,rest,j,' '); 
3029     return FALSE; 
3030   }
3031   getNextChar(expr,rest,j); // eat the `(' character
3032
3033   QDict<QCString> argTable;  // list of arguments
3034   argTable.setAutoDelete(TRUE);
3035   QCString arg;
3036   int argCount=0;
3037   bool done=FALSE;
3038   
3039   // PHASE 1: read the macro arguments
3040   if (def->nargs==0)
3041   {
3042     while ((cc=getNextChar(expr,rest,j))!=EOF)
3043     {
3044       char c = (char)cc;
3045       if (c==')') break;
3046     }
3047   }
3048   else
3049   {
3050     while (!done && (argCount<def->nargs || def->varArgs) && 
3051         ((cc=getNextChar(expr,rest,j))!=EOF)
3052           )
3053     {
3054       char c=(char)cc;
3055       if (c=='(') // argument is a function => search for matching )
3056       {
3057         int level=1;
3058         arg+=c;
3059         //char term='\0';
3060         while ((cc=getNextChar(expr,rest,j))!=EOF)
3061         {
3062           char c=(char)cc;
3063           //printf("processing %c: term=%c (%d)\n",c,term,term);
3064           if (c=='\'' || c=='\"') // skip ('s and )'s inside strings
3065           {
3066             arg+=c;
3067             addTillEndOfString(expr,rest,j,c,arg);
3068           }
3069           if (c==')')
3070           {
3071             level--;
3072             arg+=c;
3073             if (level==0) break;
3074           }
3075           else if (c=='(')
3076           {
3077             level++;
3078             arg+=c;
3079           }
3080           else
3081             arg+=c;
3082         }
3083       }
3084       else if (c==')' || c==',') // last or next argument found
3085       {
3086         if (c==',' && argCount==def->nargs-1 && def->varArgs)
3087         {
3088           arg=arg.stripWhiteSpace();
3089           arg+=',';
3090         }
3091         else
3092         {
3093           QCString argKey;
3094           argKey.sprintf("@%d",argCount++); // key name
3095           arg=arg.stripWhiteSpace();
3096           // add argument to the lookup table
3097           argTable.insert(argKey, new QCString(arg));
3098           arg.resize(0);
3099           if (c==')') // end of the argument list
3100           {
3101             done=TRUE;
3102           }
3103         }
3104       } 
3105       else if (c=='\"') // append literal strings
3106       {
3107         arg+=c; 
3108         bool found=FALSE;
3109         while (!found && (cc=getNextChar(expr,rest,j))!=EOF)
3110         {
3111           found = cc=='"';
3112           if (cc=='\\')
3113           {
3114             c=(char)cc;   
3115             arg+=c;
3116             if ((cc=getNextChar(expr,rest,j))==EOF) break;
3117           }
3118           c=(char)cc;     
3119           arg+=c;
3120         }
3121       }
3122       else if (c=='\'') // append literal characters
3123       {
3124         arg+=c;
3125         bool found=FALSE;
3126         while (!found && (cc=getNextChar(expr,rest,j))!=EOF)
3127         {
3128           found = cc=='\'';
3129           if (cc=='\\')
3130           {
3131             c=(char)cc;   
3132             arg+=c;
3133             if ((cc=getNextChar(expr,rest,j))==EOF) break;
3134           }
3135           c=(char)cc;
3136           arg+=c;
3137         }
3138       }     
3139       else // append other characters
3140       {
3141         arg+=c;
3142       }
3143     }
3144   }
3145
3146   // PHASE 2: apply the macro function
3147   if (argCount==def->nargs || 
3148       (argCount>def->nargs && def->varArgs)) // matching parameters lists
3149   {
3150     uint k=0;
3151     // substitution of all formal arguments
3152     QCString resExpr;
3153     const QCString d=def->definition.stripWhiteSpace();
3154     //printf("Macro definition: %s\n",d.data());
3155     bool inString=FALSE;
3156     while (k<d.length())
3157     {
3158       if (d.at(k)=='@') // maybe a marker, otherwise an escaped @
3159       {
3160         if (d.at(k+1)=='@') // escaped @ => copy it (is unescaped later)
3161         {
3162           k+=2;
3163           resExpr+="@@"; // we unescape these later
3164         }
3165         else if (d.at(k+1)=='-') // no-rescan marker
3166         {
3167           k+=2;
3168           resExpr+="@-";
3169         }
3170         else // argument marker => read the argument number
3171         {
3172           QCString key="@";
3173           QCString *subst=0;
3174           bool hash=FALSE;
3175           int l=k-1;
3176           // search for ## backward
3177           if (l>=0 && d.at(l)=='"') l--;
3178           while (l>=0 && d.at(l)==' ') l--;
3179           if (l>0 && d.at(l)=='#' && d.at(l-1)=='#') hash=TRUE;
3180           k++;
3181           // scan the number
3182           while (k<d.length() && d.at(k)>='0' && d.at(k)<='9') key+=d.at(k++);
3183           if (!hash) 
3184           {
3185             // search for ## forward
3186             l=k;
3187             if (l<(int)d.length() && d.at(l)=='"') l++;
3188             while (l<(int)d.length() && d.at(l)==' ') l++;
3189             if (l<(int)d.length()-1 && d.at(l)=='#' && d.at(l+1)=='#') hash=TRUE;
3190           }
3191           //printf("request key %s result %s\n",key.data(),argTable[key]->data());
3192           if (key.length()>1 && (subst=argTable[key])) 
3193           {
3194             QCString substArg=*subst;
3195             //printf("substArg=`%s'\n",substArg.data());
3196             // only if no ## operator is before or after the argument
3197             // marker we do macro expansion.
3198             if (!hash) expandExpression(substArg,0,0);
3199             if (inString)
3200             {
3201               //printf("`%s'=stringize(`%s')\n",stringize(*subst).data(),subst->data());
3202
3203               // if the marker is inside a string (because a # was put 
3204               // before the macro name) we must escape " and \ characters
3205               resExpr+=stringize(substArg);
3206             }
3207             else
3208             {
3209               if (hash && substArg.isEmpty())
3210               {
3211                 resExpr+="@E"; // empty argument will be remove later on
3212               }
3213               else if (g_nospaces)
3214               {
3215                 resExpr+=substArg;
3216               }
3217               else
3218               {
3219                 resExpr+=" "+substArg+" ";
3220               }
3221             }
3222           }
3223         }
3224       }
3225       else // no marker, just copy
3226       {
3227         if (!inString && d.at(k)=='\"') 
3228         {
3229           inString=TRUE; // entering a literal string
3230         }
3231         else if (inString && d.at(k)=='\"' && (d.at(k-1)!='\\' || d.at(k-2)=='\\'))
3232         {
3233           inString=FALSE; // leaving a literal string
3234         }
3235         resExpr+=d.at(k++);
3236       }
3237     }
3238     len=j-pos;
3239     result=resExpr;
3240     //printf("result after substitution `%s' expr=`%s'\n",
3241     //       result.data(),expr.mid(pos,len).data());
3242     return TRUE;
3243   }
3244   return FALSE;
3245 }
3246
3247
3248 /*! returns the next identifier in string \a expr by starting at position \a p.
3249  * The position of the identifier is returned (or -1 if nothing is found)
3250  * and \a l is its length. Any quoted strings are skipping during the search.
3251  */
3252 static int getNextId(const QCString &expr,int p,int *l)
3253 {
3254   int n;
3255   while (p<(int)expr.length())
3256   {
3257     char c=expr.at(p++);
3258     if (isdigit(c)) // skip number
3259     {
3260       while (p<(int)expr.length() && isId(expr.at(p))) p++;
3261     }
3262     else if (isalpha(c) || c=='_') // read id
3263     {
3264       n=p-1;
3265       while (p<(int)expr.length() && isId(expr.at(p))) p++;
3266       *l=p-n;
3267       return n; 
3268     }
3269     else if (c=='"') // skip string
3270     {
3271       char ppc=0,pc=c;
3272       if (p<(int)expr.length()) c=expr.at(p);
3273       while (p<(int)expr.length() && (c!='"' || (pc=='\\' && ppc!='\\'))) 
3274         // continue as long as no " is found, but ignoring \", but not \\"
3275       {
3276         ppc=pc;
3277         pc=c;
3278         c=expr.at(p);
3279         p++;
3280       }
3281       if (p<(int)expr.length()) ++p; // skip closing quote
3282     }
3283     else if (c=='/') // skip C Comment
3284     {
3285       //printf("Found C comment at p=%d\n",p);
3286       char pc=c;
3287       if (p<(int)expr.length()) 
3288       {
3289         c=expr.at(p);
3290         if (c=='*')  // Start of C comment
3291         { 
3292           p++;
3293           while (p<(int)expr.length() && !(pc=='*' && c=='/'))
3294           {
3295             pc=c;
3296             c=expr.at(p++);
3297           }
3298         }
3299       }
3300       //printf("Found end of C comment at p=%d\n",p);
3301     }
3302   }
3303   return -1;
3304 }
3305
3306 /*! preforms recursive macro expansion on the string \a expr
3307  *  starting at position \a pos.
3308  *  May read additional characters from the input while re-scanning!
3309  *  If \a expandAll is \c TRUE then all macros in the expression are
3310  *  expanded, otherwise only the first is expanded.
3311  */
3312 static void expandExpression(QCString &expr,QCString *rest,int pos)
3313 {
3314   //printf("expandExpression(%s,%s)\n",expr.data(),rest ? rest->data() : 0);
3315   QCString macroName;
3316   QCString expMacro;
3317   bool definedTest=FALSE;
3318   int i=pos,l,p,len;
3319   while ((p=getNextId(expr,i,&l))!=-1) // search for an macro name
3320   {
3321     bool replaced=FALSE;
3322     macroName=expr.mid(p,l);
3323     //printf("macroName=%s\n",macroName.data());
3324     if (p<2 || !(expr.at(p-2)=='@' && expr.at(p-1)=='-')) // no-rescan marker?
3325     {
3326       if (g_expandedDict->find(macroName)==0) // expand macro
3327       {
3328         Define *def=DefineManager::instance().isDefined(macroName);
3329         if (definedTest) // macro name was found after defined 
3330         {
3331           if (def) expMacro = " 1 "; else expMacro = " 0 ";
3332           replaced=TRUE;
3333           len=l;
3334           definedTest=FALSE;
3335         }
3336         else if (def && def->nargs==-1) // simple macro
3337         {
3338           // substitute the definition of the macro
3339           //printf("macro `%s'->`%s'\n",macroName.data(),def->definition.data());
3340           if (g_nospaces)
3341           {
3342             expMacro=def->definition.stripWhiteSpace();
3343           }
3344           else
3345           {
3346             expMacro=" "+def->definition.stripWhiteSpace()+" ";
3347           }
3348           //expMacro=def->definition.stripWhiteSpace();
3349           replaced=TRUE;
3350           len=l;
3351           //printf("simple macro expansion=`%s'->`%s'\n",macroName.data(),expMacro.data());
3352         }
3353         else if (def && def->nargs>=0) // function macro
3354         {
3355           replaced=replaceFunctionMacro(expr,rest,p+l,len,def,expMacro);
3356           len+=l;
3357         }
3358         else if (macroName=="defined")
3359         {
3360           //printf("found defined inside macro definition '%s'\n",expr.right(expr.length()-p).data());
3361           definedTest=TRUE;
3362         }
3363
3364         if (replaced) // expand the macro and rescan the expression
3365         {
3366             
3367           //printf("replacing `%s'->`%s'\n",expr.mid(p,len).data(),expMacro.data());
3368           QCString resultExpr=expMacro;
3369           QCString restExpr=expr.right(expr.length()-len-p);
3370           processConcatOperators(resultExpr);
3371           if (def && !def->nonRecursive)
3372           {
3373             g_expandedDict->insert(macroName,def);
3374             expandExpression(resultExpr,&restExpr,0);
3375             g_expandedDict->remove(macroName);
3376           }
3377           expr=expr.left(p)+resultExpr+restExpr;
3378           i=p;
3379           //printf("new expression: %s\n",expr.data());
3380         }
3381         else // move to the next macro name
3382         {
3383           //printf("moving to the next macro old=%d new=%d\n",i,p+l);
3384           i=p+l;
3385         }
3386       }
3387       else // move to the next macro name
3388       {
3389         expr=expr.left(p)+"@-"+expr.right(expr.length()-p);
3390         //printf("macro already expanded, moving to the next macro expr=%s\n",expr.data());
3391         i=p+l+2;
3392         //i=p+l;
3393       }
3394     }
3395     else // no re-scan marker found, skip the macro name
3396     {
3397       //printf("skipping marked macro\n");
3398       i=p+l;
3399     }
3400   }
3401 }
3402
3403 /*! replaces all occurrences of @@@@ in \a s by @@
3404  *  and removes all occurrences of @@E.
3405  *  All identifiers found are replaced by 0L
3406  */
3407 QCString removeIdsAndMarkers(const char *s)
3408 {
3409   //printf("removeIdsAndMarkers(%s)\n",s);
3410   const char *p=s;
3411   char c;
3412   bool inNum=FALSE;
3413   QCString result;
3414   if (p)
3415   {
3416     while ((c=*p))
3417     {
3418       if (c=='@') // replace @@ with @ and remove @E
3419       {
3420         if (*(p+1)=='@')
3421         {
3422           result+=c; 
3423         }
3424         else if (*(p+1)=='E')
3425         {
3426           // skip
3427         }
3428         p+=2;
3429       }
3430       else if (isdigit(c)) // number
3431       {
3432         result+=c;
3433         p++;
3434         inNum=TRUE;     
3435       }
3436       else if (c=='d' && !inNum) // identifier starting with a `d'
3437       {
3438         if (strncmp(p,"defined ",8)==0 || strncmp(p,"defined(",8)==0) 
3439                    // defined keyword
3440         {
3441           p+=7; // skip defined
3442         }
3443         else
3444         {
3445           result+="0L";
3446           p++;
3447           while ((c=*p) && isId(c)) p++;
3448         }
3449       }
3450       else if ((isalpha(c) || c=='_') && !inNum) // replace identifier with 0L
3451       {
3452         result+="0L";
3453         p++;
3454         while ((c=*p) && isId(c)) p++;
3455         if (*p=='(') // undefined function macro
3456         {
3457           p++;
3458           int count=1;
3459           while ((c=*p++))
3460           {
3461             if (c=='(') count++;
3462             else if (c==')')
3463             {
3464               count--;
3465               if (count==0) break;
3466             }
3467             else if (c=='/')
3468             {
3469               char pc=c;
3470               c=*++p;
3471               if (c=='*') // start of C comment
3472               {
3473                 while (*p && !(pc=='*' && c=='/')) // search end of comment
3474                 {
3475                   pc=c;
3476                   c=*++p;
3477                 }
3478                 p++;
3479               }
3480             }
3481           }
3482         }
3483       }
3484       else if (c=='/') // skip C comments
3485       {
3486         char pc=c;
3487         c=*++p;
3488         if (c=='*') // start of C comment
3489         { 
3490           while (*p && !(pc=='*' && c=='/')) // search end of comment
3491           {
3492             pc=c;
3493             c=*++p;
3494           }
3495           p++;
3496         }
3497         else // oops, not comment but division
3498         {
3499           result+=pc;
3500           goto nextChar;
3501         }
3502       }
3503       else 
3504       {
3505 nextChar:
3506         result+=c;
3507         char lc=tolower(c);
3508         if (!isId(lc) && lc!='.' /*&& lc!='-' && lc!='+'*/) inNum=FALSE;
3509         p++;
3510       }
3511     }
3512   }
3513   //printf("removeIdsAndMarkers(%s)=%s\n",s,result.data());
3514   return result;
3515 }
3516
3517 /*! replaces all occurrences of @@ in \a s by @
3518  *  \par assumption: 
3519  *   \a s only contains pairs of @@'s
3520  */
3521 QCString removeMarkers(const char *s)
3522 {
3523   const char *p=s;
3524   char c;
3525   QCString result;
3526   if (p)
3527   {
3528     while ((c=*p))
3529     {
3530       switch(c)
3531       {
3532         case '@': // replace @@ with @
3533           {
3534             if (*(p+1)=='@')
3535             {
3536               result+=c; 
3537             }
3538             p+=2;
3539           }
3540           break;
3541         case '/': // skip C comments
3542           {
3543             result+=c;
3544             char pc=c;
3545             c=*++p;
3546             if (c=='*') // start of C comment
3547             { 
3548               while (*p && !(pc=='*' && c=='/')) // search end of comment
3549               {
3550                 if (*p=='@' && *(p+1)=='@') 
3551                   result+=c,p++;
3552                 else 
3553                   result+=c;
3554                 pc=c;
3555                 c=*++p;
3556               }
3557               if (*p) result+=c,p++;
3558             }
3559           }
3560           break;
3561         case '"': // skip string literals
3562           {
3563             result+=c;
3564             char pc=c;
3565             c=*++p;
3566             while (*p && (c!='"' || pc=='\\')) // no end quote
3567             {
3568               result+=c;
3569               c=*++p;
3570             }
3571             if (*p) result+=c,p++; 
3572           }
3573           break;
3574         case '\'': // skip char literals
3575           {
3576             result+=c;
3577             char pc=c;
3578             c=*++p;
3579             while (*p && (c!='\'' || pc=='\\')) // no end quote
3580             {
3581               result+=c;
3582               c=*++p;
3583             }
3584             if (*p) result+=c,p++; 
3585           }
3586           break;
3587         default:
3588           {
3589             result+=c;
3590             p++;
3591           }
3592           break;
3593       }
3594     }
3595   }
3596   //printf("RemoveMarkers(%s)=%s\n",s,result.data());
3597   return result;
3598 }
3599
3600 /*! compute the value of the expression in string \a expr.
3601  *  If needed the function may read additional characters from the input.
3602  */
3603
3604 bool computeExpression(const QCString &expr)
3605 {
3606   QCString e=expr;
3607   expandExpression(e,0,0);
3608   //printf("after expansion `%s'\n",e.data());
3609   e = removeIdsAndMarkers(e);
3610   if (e.isEmpty()) return FALSE;
3611   //printf("parsing `%s'\n",e.data());
3612   return parseCppExpression(g_yyFileName,g_yyLineNr,e);
3613 }
3614
3615 /*! expands the macro definition in \a name
3616  *  If needed the function may read additional characters from the input
3617  */
3618
3619 QCString expandMacro(const QCString &name)
3620 {
3621   QCString n=name;
3622   expandExpression(n,0,0);
3623   n=removeMarkers(n);
3624   //printf("expandMacro `%s'->`%s'\n",name.data(),n.data());
3625   return n;
3626 }
3627
3628 Define *newDefine()
3629 {
3630   Define *def=new Define;
3631   def->name       = g_defName;
3632   def->definition = g_defText.stripWhiteSpace();
3633   def->nargs      = g_defArgs;
3634   def->fileName   = g_yyFileName; 
3635   def->fileDef    = g_yyFileDef;
3636   def->lineNr     = g_yyLineNr;
3637   def->varArgs    = g_defVarArgs;
3638   //printf("newDefine: %s %s file: %s\n",def->name.data(),def->definition.data(),
3639   //    def->fileDef ? def->fileDef->name().data() : def->fileName.data());
3640   //printf("newDefine: `%s'->`%s'\n",def->name.data(),def->definition.data());
3641   if (!def->name.isEmpty() && Doxygen::expandAsDefinedDict[def->name])
3642   {
3643     def->isPredefined=TRUE;
3644   }
3645   return def;
3646 }
3647
3648 void addDefine()
3649 {
3650   if (g_skip) return; // do not add this define as it is inside a 
3651                       // conditional section (cond command) that is disabled.
3652   if (!Doxygen::gatherDefines) return;
3653
3654   //printf("addDefine %s %s\n",g_defName.data(),g_defArgsStr.data());
3655   //ArgumentList *al = new ArgumentList;
3656   //stringToArgumentList(g_defArgsStr,al);
3657   MemberDef *md=new MemberDef(
3658       g_yyFileName,g_yyLineNr,
3659       "#define",g_defName,g_defArgsStr,0,
3660       Public,Normal,FALSE,Member,MemberDef::Define,0,0);
3661   if (!g_defArgsStr.isEmpty())
3662   {
3663     ArgumentList *argList = new ArgumentList;
3664     //printf("addDefine() g_defName=`%s' g_defArgsStr=`%s'\n",g_defName.data(),g_defArgsStr.data());
3665     stringToArgumentList(g_defArgsStr,argList);
3666     md->setArgumentList(argList);
3667   }
3668   //printf("Setting initializer for `%s' to `%s'\n",g_defName.data(),g_defText.data());
3669   int l=g_defLitText.find('\n');
3670   if (l>0 && g_defLitText.left(l).stripWhiteSpace()=="\\")
3671   {
3672     // strip first line if it only contains a slash
3673     g_defLitText = g_defLitText.right(g_defLitText.length()-l-1);
3674   }
3675   else if (l>0)
3676   {
3677     // align the items on the first line with the items on the second line
3678     int k=l+1;
3679     const char *p=g_defLitText.data()+k;
3680     char c;
3681     while ((c=*p++) && (c==' ' || c=='\t')) k++;
3682     g_defLitText=g_defLitText.mid(l+1,k-l-1)+g_defLitText.stripWhiteSpace();
3683   }
3684   md->setInitializer(g_defLitText.stripWhiteSpace());
3685
3686   //printf("pre.l: md->setFileDef(%p)\n",g_inputFileDef);
3687   md->setFileDef(g_inputFileDef);
3688   md->setDefinition("#define "+g_defName);
3689
3690   MemberName *mn=Doxygen::functionNameSDict->find(g_defName);
3691   if (mn==0)
3692   {
3693     mn = new MemberName(g_defName);
3694     Doxygen::functionNameSDict->append(g_defName,mn);
3695   }
3696   mn->append(md);
3697   if (g_yyFileDef) 
3698   {
3699     g_yyFileDef->insertMember(md);
3700   }
3701
3702   //Define *d;
3703   //if ((d=defineDict[g_defName])==0) defineDict.insert(g_defName,newDefine()); 
3704 }
3705
3706 static inline void outputChar(char c)
3707 {
3708   if (g_includeStack.isEmpty() || g_curlyCount>0) g_outputBuf->addChar(c);
3709 }
3710
3711 static inline void outputArray(const char *a,int len)
3712 {
3713   if (g_includeStack.isEmpty() || g_curlyCount>0) g_outputBuf->addArray(a,len);
3714 }
3715
3716 static void readIncludeFile(const QCString &inc)
3717 {
3718   static bool searchIncludes = Config_getBool("SEARCH_INCLUDES");
3719   if (!searchIncludes) return; // do not read include files
3720   uint i=0;
3721
3722   // find the start of the include file name
3723   while (i<inc.length() &&
3724          (inc.at(i)==' ' || inc.at(i)=='"' || inc.at(i)=='<')
3725         ) i++;
3726   uint s=i;
3727
3728   // was it a local include?
3729   bool localInclude = s>0 && inc.at(s-1)=='"';
3730
3731   // find the end of the include file name
3732   while (i<inc.length() && inc.at(i)!='"' && inc.at(i)!='>') i++;
3733
3734   if (s<inc.length() && i>s) // valid include file name found
3735   {
3736     // extract include path+name
3737     QCString incFileName=inc.mid(s,i-s).stripWhiteSpace();
3738
3739     QCString dosExt = incFileName.right(4);
3740     if (dosExt==".exe" || dosExt==".dll" || dosExt==".tlb")
3741     {
3742       // skip imported binary files (e.g. M$ type libraries)
3743       return;
3744     }
3745
3746     QCString oldFileName = g_yyFileName;
3747     FileDef *oldFileDef  = g_yyFileDef;
3748     int oldLineNr        = g_yyLineNr;
3749     //printf("Searching for `%s'\n",incFileName.data());
3750
3751     // absIncFileName avoids difficulties for incFileName starting with "../" (bug 641336)
3752     QCString absIncFileName = incFileName;
3753     {
3754       static bool searchIncludes = Config_getBool("SEARCH_INCLUDES");
3755       QFileInfo fi(g_yyFileName);
3756       if (fi.exists())
3757       {
3758         QCString absName = QCString(fi.dirPath(TRUE).data())+"/"+incFileName;
3759         QFileInfo fi2(absName);
3760         if (fi2.exists())
3761         {
3762           absIncFileName=fi2.absFilePath().utf8();
3763         }
3764         else if (searchIncludes) // search in INCLUDE_PATH as well
3765         {
3766           QStrList &includePath = Config_getList("INCLUDE_PATH");
3767           char *s=includePath.first();
3768           while (s)
3769           {
3770             QFileInfo fi(s);
3771             if (fi.exists() && fi.isDir())
3772             {
3773               QCString absName = QCString(fi.absFilePath().utf8())+"/"+incFileName;
3774               //printf("trying absName=%s\n",absName.data());
3775               QFileInfo fi2(absName);
3776               if (fi2.exists())
3777               {
3778                 absIncFileName=fi2.absFilePath().utf8();
3779                 break;
3780               }
3781               //printf( "absIncFileName = %s\n", absIncFileName.data() );
3782             }
3783             s=includePath.next();
3784           }
3785         }
3786         //printf( "absIncFileName = %s\n", absIncFileName.data() );
3787       }
3788     }
3789     DefineManager::instance().addInclude(g_yyFileName,absIncFileName);
3790     DefineManager::instance().addFileToContext(absIncFileName);
3791
3792     // findFile will overwrite g_yyFileDef if found
3793     FileState *fs;
3794     bool alreadyIncluded = FALSE;
3795     //printf("calling findFile(%s)\n",incFileName.data());
3796     if ((fs=findFile(incFileName,localInclude,alreadyIncluded))) // see if the include file can be found
3797     {
3798       //printf("Found include file!\n");
3799       if (Debug::isFlagSet(Debug::Preprocessor))
3800       {
3801         for (i=0;i<g_includeStack.count();i++) 
3802         {
3803           Debug::print(Debug::Preprocessor,0,"  ");
3804         }
3805         //msg("#include %s: parsing...\n",incFileName.data());
3806       }
3807       if (oldFileDef)
3808       {
3809         // add include dependency to the file in which the #include was found
3810         bool ambig;
3811         // change to absolute name for bug 641336 
3812         FileDef *incFd = findFileDef(Doxygen::inputNameDict,absIncFileName,ambig);
3813         oldFileDef->addIncludeDependency(ambig ? 0 : incFd,incFileName,localInclude,g_isImported,FALSE);
3814         // add included by dependency
3815         if (g_yyFileDef)
3816         {
3817           //printf("Adding include dependency %s->%s\n",oldFileDef->name().data(),incFileName.data());
3818           g_yyFileDef->addIncludedByDependency(oldFileDef,oldFileDef->docName(),localInclude,g_isImported);
3819         }
3820       }
3821       else if (g_inputFileDef)
3822       {
3823         g_inputFileDef->addIncludeDependency(0,absIncFileName,localInclude,g_isImported,TRUE);
3824       }
3825       fs->bufState = YY_CURRENT_BUFFER;
3826       fs->lineNr   = oldLineNr;
3827       fs->fileName = oldFileName;
3828       // push the state on the stack
3829       g_includeStack.push(fs);
3830       // set the scanner to the include file
3831
3832       // Deal with file changes due to 
3833       // #include's within { .. } blocks
3834       QCString lineStr(g_yyFileName.length()+20);
3835       lineStr.sprintf("# 1 \"%s\" 1\n",g_yyFileName.data());
3836       outputArray(lineStr.data(),lineStr.length());
3837
3838       //fprintf(stderr,"Switching to include file %s\n",incFileName.data());
3839       g_expectGuard=TRUE;
3840       g_inputBuf   = &fs->fileBuf;
3841       g_inputBufPos=0;
3842       preYY_switch_to_buffer(preYY_create_buffer(0,YY_BUF_SIZE));
3843     }
3844     else
3845     {
3846       //printf("  calling findFile(%s) alreadyInc=%d\n",incFileName.data(),alreadyIncluded);
3847       if (oldFileDef)
3848       {
3849         bool ambig;
3850         //QCString absPath = incFileName;
3851         //if (QDir::isRelativePath(incFileName))
3852         //{
3853         //  absPath = QDir::cleanDirPath(oldFileDef->getPath()+"/"+incFileName);
3854         //  //printf("%s + %s -> resolved path %s\n",oldFileDef->getPath().data(),incFileName.data(),absPath.data());
3855         //}
3856
3857         // change to absolute name for bug 641336 
3858         FileDef *fd = findFileDef(Doxygen::inputNameDict,absIncFileName,ambig);
3859         //printf("%s::findFileDef(%s)=%p\n",oldFileDef->name().data(),incFileName.data(),fd);
3860         // add include dependency to the file in which the #include was found
3861         oldFileDef->addIncludeDependency(ambig ? 0 : fd,incFileName,localInclude,g_isImported,FALSE);
3862         // add included by dependency
3863         if (fd)
3864         {
3865           //printf("Adding include dependency (2) %s->%s ambig=%d\n",oldFileDef->name().data(),fd->name().data(),ambig);
3866           fd->addIncludedByDependency(oldFileDef,oldFileDef->docName(),localInclude,g_isImported);
3867         }
3868       }
3869       else if (g_inputFileDef)
3870       {
3871         g_inputFileDef->addIncludeDependency(0,absIncFileName,localInclude,g_isImported,TRUE);
3872       }
3873       if (Debug::isFlagSet(Debug::Preprocessor))
3874       {
3875         if (alreadyIncluded)
3876         {
3877           Debug::print(Debug::Preprocessor,0,"#include %s: already included! skipping...\n",incFileName.data());
3878         }
3879         else
3880         {
3881           Debug::print(Debug::Preprocessor,0,"#include %s: not found! skipping...\n",incFileName.data());
3882         }
3883         //printf("error: include file %s not found\n",preYYtext);
3884       }
3885       if (g_curlyCount>0 && !alreadyIncluded) // failed to find #include inside { ... }
3886       {
3887         warn(g_yyFileName,g_yyLineNr,"Warning: include file %s not found, perhaps you forgot to add its directory to INCLUDE_PATH?",incFileName.data());
3888       }
3889     }
3890   }
3891 }
3892
3893 /* ----------------------------------------------------------------- */
3894
3895 static void startCondSection(const char *sectId)
3896 {
3897   g_condStack.push(new bool(g_skip));
3898   if (Config_getList("ENABLED_SECTIONS").find(sectId)==-1)
3899   {
3900     g_skip=TRUE;
3901   }
3902 }
3903
3904 static void endCondSection()
3905 {
3906   if (g_condStack.isEmpty())
3907   {
3908     g_skip=FALSE;
3909   }
3910   else
3911   {
3912     bool *ctx = g_condStack.pop();
3913     g_skip=*ctx;
3914   }
3915 }
3916
3917 static void forceEndCondSection()
3918 {
3919   while (!g_condStack.isEmpty())
3920   {
3921     g_condStack.pop();
3922   }
3923   g_skip=FALSE;
3924 }
3925
3926 static QCString escapeAt(const char *text)
3927 {
3928   QCString result;
3929   if (text)
3930   {
3931     char c;
3932     const char *p=text;
3933     while ((c=*p++))
3934     {
3935       if (c=='@') result+="@@"; else result+=c;
3936     }
3937   }
3938   return result;
3939 }
3940
3941 static char resolveTrigraph(char c)
3942 {
3943   switch (c)
3944   {
3945     case '=': return '#';
3946     case '/': return '\\';
3947     case '\'': return '^';
3948     case '(': return '[';
3949     case ')': return ']';
3950     case '!': return '|';
3951     case '<': return '{';
3952     case '>': return '}';
3953     case '-': return '~';
3954   }
3955   return '?';
3956 }
3957
3958 /* ----------------------------------------------------------------- */
3959
3960 #undef  YY_INPUT
3961 #define YY_INPUT(buf,result,max_size) result=yyread(buf,max_size);
3962
3963 static int yyread(char *buf,int max_size)
3964 {
3965   int bytesInBuf = g_inputBuf->curPos()-g_inputBufPos;
3966   int bytesToCopy = QMIN(max_size,bytesInBuf);
3967   memcpy(buf,g_inputBuf->data()+g_inputBufPos,bytesToCopy);
3968   g_inputBufPos+=bytesToCopy;
3969   return bytesToCopy;
3970 }
3971
3972 /* ----------------------------------------------------------------- */
3973
3974
3975
3976
3977
3978
3979
3980
3981
3982
3983
3984
3985
3986
3987
3988
3989
3990
3991
3992
3993
3994
3995
3996
3997
3998
3999
4000
4001
4002
4003
4004
4005
4006 #line 4007 "<stdout>"
4007
4008 #define INITIAL 0
4009 #define Start 1
4010 #define Command 2
4011 #define SkipCommand 3
4012 #define SkipLine 4
4013 #define SkipString 5
4014 #define CopyLine 6
4015 #define CopyString 7
4016 #define Include 8
4017 #define IncludeID 9
4018 #define EndImport 10
4019 #define DefName 11
4020 #define DefineArg 12
4021 #define DefineText 13
4022 #define SkipCPPBlock 14
4023 #define Ifdef 15
4024 #define Ifndef 16
4025 #define SkipCComment 17
4026 #define CopyCComment 18
4027 #define SkipVerbatim 19
4028 #define SkipCPPComment 20
4029 #define RemoveCComment 21
4030 #define RemoveCPPComment 22
4031 #define Guard 23
4032 #define DefinedExpr1 24
4033 #define DefinedExpr2 25
4034 #define SkipDoubleQuote 26
4035 #define SkipSingleQuote 27
4036 #define UndefName 28
4037 #define IgnoreLine 29
4038 #define FindDefineArgs 30
4039 #define ReadString 31
4040 #define CondLine 32
4041
4042 #ifndef YY_NO_UNISTD_H
4043 /* Special case for "unistd.h", since it is non-ANSI. We include it way
4044  * down here because we want the user's section 1 to have been scanned first.
4045  * The user has a chance to override it with an option.
4046  */
4047 #include <unistd.h>
4048 #endif
4049
4050 #ifndef YY_EXTRA_TYPE
4051 #define YY_EXTRA_TYPE void *
4052 #endif
4053
4054 static int yy_init_globals (void );
4055
4056 /* Accessor methods to globals.
4057    These are made visible to non-reentrant scanners for convenience. */
4058
4059 int preYYlex_destroy (void );
4060
4061 int preYYget_debug (void );
4062
4063 void preYYset_debug (int debug_flag  );
4064
4065 YY_EXTRA_TYPE preYYget_extra (void );
4066
4067 void preYYset_extra (YY_EXTRA_TYPE user_defined  );
4068
4069 FILE *preYYget_in (void );
4070
4071 void preYYset_in  (FILE * in_str  );
4072
4073 FILE *preYYget_out (void );
4074
4075 void preYYset_out  (FILE * out_str  );
4076
4077 yy_size_t preYYget_leng (void );
4078
4079 char *preYYget_text (void );
4080
4081 int preYYget_lineno (void );
4082
4083 void preYYset_lineno (int line_number  );
4084
4085 /* Macros after this point can all be overridden by user definitions in
4086  * section 1.
4087  */
4088
4089 #ifndef YY_SKIP_YYWRAP
4090 #ifdef __cplusplus
4091 extern "C" int preYYwrap (void );
4092 #else
4093 extern int preYYwrap (void );
4094 #endif
4095 #endif
4096
4097     static void yyunput (int c,char *buf_ptr  );
4098     
4099 #ifndef yytext_ptr
4100 static void yy_flex_strncpy (char *,yyconst char *,int );
4101 #endif
4102
4103 #ifdef YY_NEED_STRLEN
4104 static int yy_flex_strlen (yyconst char * );
4105 #endif
4106
4107 #ifndef YY_NO_INPUT
4108
4109 #ifdef __cplusplus
4110 static int yyinput (void );
4111 #else
4112 static int input (void );
4113 #endif
4114
4115 #endif
4116
4117 /* Amount of stuff to slurp up with each read. */
4118 #ifndef YY_READ_BUF_SIZE
4119 #define YY_READ_BUF_SIZE 262144
4120 #endif
4121
4122 /* Copy whatever the last rule matched to the standard output. */
4123 #ifndef ECHO
4124 /* This used to be an fputs(), but since the string might contain NUL's,
4125  * we now use fwrite().
4126  */
4127 #define ECHO fwrite( preYYtext, preYYleng, 1, preYYout )
4128 #endif
4129
4130 /* Gets input and stuffs it into "buf".  number of characters read, or YY_NULL,
4131  * is returned in "result".
4132  */
4133 #ifndef YY_INPUT
4134 #define YY_INPUT(buf,result,max_size) \
4135         if ( YY_CURRENT_BUFFER_LVALUE->yy_is_interactive ) \
4136                 { \
4137                 int c = '*'; \
4138                 yy_size_t n; \
4139                 for ( n = 0; n < max_size && \
4140                              (c = getc( preYYin )) != EOF && c != '\n'; ++n ) \
4141                         buf[n] = (char) c; \
4142                 if ( c == '\n' ) \
4143                         buf[n++] = (char) c; \
4144                 if ( c == EOF && ferror( preYYin ) ) \
4145                         YY_FATAL_ERROR( "input in flex scanner failed" ); \
4146                 result = n; \
4147                 } \
4148         else \
4149                 { \
4150                 errno=0; \
4151                 while ( (result = fread(buf, 1, max_size, preYYin))==0 && ferror(preYYin)) \
4152                         { \
4153                         if( errno != EINTR) \
4154                                 { \
4155                                 YY_FATAL_ERROR( "input in flex scanner failed" ); \
4156                                 break; \
4157                                 } \
4158                         errno=0; \
4159                         clearerr(preYYin); \
4160                         } \
4161                 }\
4162 \
4163
4164 #endif
4165
4166 /* No semi-colon after return; correct usage is to write "yyterminate();" -
4167  * we don't want an extra ';' after the "return" because that will cause
4168  * some compilers to complain about unreachable statements.
4169  */
4170 #ifndef yyterminate
4171 #define yyterminate() return YY_NULL
4172 #endif
4173
4174 /* Number of entries by which start-condition stack grows. */
4175 #ifndef YY_START_STACK_INCR
4176 #define YY_START_STACK_INCR 25
4177 #endif
4178
4179 /* Report a fatal error. */
4180 #ifndef YY_FATAL_ERROR
4181 #define YY_FATAL_ERROR(msg) yy_fatal_error( msg )
4182 #endif
4183
4184 /* end tables serialization structures and prototypes */
4185
4186 /* Default declaration of generated scanner - a define so the user can
4187  * easily add parameters.
4188  */
4189 #ifndef YY_DECL
4190 #define YY_DECL_IS_OURS 1
4191
4192 extern int preYYlex (void);
4193
4194 #define YY_DECL int preYYlex (void)
4195 #endif /* !YY_DECL */
4196
4197 /* Code executed at the beginning of each rule, after preYYtext and preYYleng
4198  * have been set up.
4199  */
4200 #ifndef YY_USER_ACTION
4201 #define YY_USER_ACTION
4202 #endif
4203
4204 /* Code executed at the end of each rule. */
4205 #ifndef YY_BREAK
4206 #define YY_BREAK break;
4207 #endif
4208
4209 #define YY_RULE_SETUP \
4210         if ( preYYleng > 0 ) \
4211                 YY_CURRENT_BUFFER_LVALUE->yy_at_bol = \
4212                                 (preYYtext[preYYleng - 1] == '\n'); \
4213         YY_USER_ACTION
4214
4215 /** The main scanner function which does all the work.
4216  */
4217 YY_DECL
4218 {
4219         register yy_state_type yy_current_state;
4220         register char *yy_cp, *yy_bp;
4221         register int yy_act;
4222     
4223 #line 1772 "pre.l"
4224
4225
4226 #line 4227 "<stdout>"
4227
4228         if ( !(yy_init) )
4229                 {
4230                 (yy_init) = 1;
4231
4232 #ifdef YY_USER_INIT
4233                 YY_USER_INIT;
4234 #endif
4235
4236         /* Create the reject buffer large enough to save one state per allowed character. */
4237         if ( ! (yy_state_buf) )
4238             (yy_state_buf) = (yy_state_type *)preYYalloc(YY_STATE_BUF_SIZE  );
4239             if ( ! (yy_state_buf) )
4240                 YY_FATAL_ERROR( "out of dynamic memory in preYYlex()" );
4241
4242                 if ( ! (yy_start) )
4243                         (yy_start) = 1; /* first start state */
4244
4245                 if ( ! preYYin )
4246                         preYYin = stdin;
4247
4248                 if ( ! preYYout )
4249                         preYYout = stdout;
4250
4251                 if ( ! YY_CURRENT_BUFFER ) {
4252                         preYYensure_buffer_stack ();
4253                         YY_CURRENT_BUFFER_LVALUE =
4254                                 preYY_create_buffer(preYYin,YY_BUF_SIZE );
4255                 }
4256
4257                 preYY_load_buffer_state( );
4258                 }
4259
4260         while ( 1 )             /* loops until end-of-file is reached */
4261                 {
4262                 yy_cp = (yy_c_buf_p);
4263
4264                 /* Support of preYYtext. */
4265                 *yy_cp = (yy_hold_char);
4266
4267                 /* yy_bp points to the position in yy_ch_buf of the start of
4268                  * the current run.
4269                  */
4270                 yy_bp = yy_cp;
4271
4272                 yy_current_state = (yy_start);
4273                 yy_current_state += YY_AT_BOL();
4274
4275                 (yy_state_ptr) = (yy_state_buf);
4276                 *(yy_state_ptr)++ = yy_current_state;
4277
4278 yy_match:
4279                 do
4280                         {
4281                         register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)];
4282                         while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
4283                                 {
4284                                 yy_current_state = (int) yy_def[yy_current_state];
4285                                 if ( yy_current_state >= 1172 )
4286                                         yy_c = yy_meta[(unsigned int) yy_c];
4287                                 }
4288                         yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
4289                         *(yy_state_ptr)++ = yy_current_state;
4290                         ++yy_cp;
4291                         }
4292                 while ( yy_base[yy_current_state] != 5439 );
4293
4294 yy_find_action:
4295                 yy_current_state = *--(yy_state_ptr);
4296                 (yy_lp) = yy_accept[yy_current_state];
4297 goto find_rule; /* Shut up GCC warning -Wall */
4298 find_rule: /* we branch to this label when backing up */
4299                 for ( ; ; ) /* until we find what rule we matched */
4300                         {
4301                         if ( (yy_lp) && (yy_lp) < yy_accept[yy_current_state + 1] )
4302                                 {
4303                                 yy_act = yy_acclist[(yy_lp)];
4304                                 if ( yy_act & YY_TRAILING_HEAD_MASK ||
4305                                      (yy_looking_for_trail_begin) )
4306                                         {
4307                                         if ( yy_act == (yy_looking_for_trail_begin) )
4308                                                 {
4309                                                 (yy_looking_for_trail_begin) = 0;
4310                                                 yy_act &= ~YY_TRAILING_HEAD_MASK;
4311                                                 break;
4312                                                 }
4313                                         }
4314                                 else if ( yy_act & YY_TRAILING_MASK )
4315                                         {
4316                                         (yy_looking_for_trail_begin) = yy_act & ~YY_TRAILING_MASK;
4317                                         (yy_looking_for_trail_begin) |= YY_TRAILING_HEAD_MASK;
4318                                         (yy_full_match) = yy_cp;
4319                                         (yy_full_state) = (yy_state_ptr);
4320                                         (yy_full_lp) = (yy_lp);
4321                                         }
4322                                 else
4323                                         {
4324                                         (yy_full_match) = yy_cp;
4325                                         (yy_full_state) = (yy_state_ptr);
4326                                         (yy_full_lp) = (yy_lp);
4327                                         break;
4328                                         }
4329                                 ++(yy_lp);
4330                                 goto find_rule;
4331                                 }
4332                         --yy_cp;
4333                         yy_current_state = *--(yy_state_ptr);
4334                         (yy_lp) = yy_accept[yy_current_state];
4335                         }
4336
4337                 YY_DO_BEFORE_ACTION;
4338
4339 do_action:      /* This label is used only to access EOF actions. */
4340
4341                 switch ( yy_act )
4342         { /* beginning of action switch */
4343 case 1:
4344 YY_RULE_SETUP
4345 #line 1774 "pre.l"
4346
4347         YY_BREAK
4348 case 2:
4349 YY_RULE_SETUP
4350 #line 1775 "pre.l"
4351
4352         YY_BREAK
4353 case 3:
4354 YY_RULE_SETUP
4355 #line 1776 "pre.l"
4356
4357         YY_BREAK
4358 case 4:
4359 YY_RULE_SETUP
4360 #line 1777 "pre.l"
4361 { // Trigraph
4362                                           unput(resolveTrigraph(preYYtext[2]));
4363                                         }
4364         YY_BREAK
4365 case 5:
4366 YY_RULE_SETUP
4367 #line 1780 "pre.l"
4368 { BEGIN(Command); }
4369         YY_BREAK
4370 case 6:
4371 /* rule 6 can match eol */
4372 *yy_cp = (yy_hold_char); /* undo effects of setting up preYYtext */
4373 (yy_c_buf_p) = yy_cp -= 1;
4374 YY_DO_BEFORE_ACTION; /* set up preYYtext again */
4375 YY_RULE_SETUP
4376 #line 1781 "pre.l"
4377 {
4378                                           outputArray(preYYtext,preYYleng); 
4379                                           BEGIN(CopyLine); 
4380                                         }
4381         YY_BREAK
4382 case 7:
4383 /* rule 7 can match eol */
4384 YY_RULE_SETUP
4385 #line 1785 "pre.l"
4386 { // constructors?
4387                                           int i;
4388                                           for (i=preYYleng-1;i>=0;i--)
4389                                           {
4390                                             unput(preYYtext[i]);
4391                                           }
4392                                           BEGIN(CopyLine);
4393                                         }
4394         YY_BREAK
4395 case 8:
4396 /* rule 8 can match eol */
4397 #line 1794 "pre.l"
4398 case 9:
4399 /* rule 9 can match eol */
4400 YY_RULE_SETUP
4401 #line 1794 "pre.l"
4402 { // function like macro
4403                                           static bool skipFuncMacros = Config_getBool("SKIP_FUNCTION_MACROS");
4404                                           QCString name(preYYtext);
4405                                           name=name.left(name.find('(')).stripWhiteSpace();
4406
4407                                           Define *def=0;
4408                                           if (skipFuncMacros && 
4409                                               name!="Q_PROPERTY" &&
4410                                               !(
4411                                                  (g_includeStack.isEmpty() || g_curlyCount>0) &&
4412                                                  g_macroExpansion &&
4413                                                  (def=DefineManager::instance().isDefined(name)) &&
4414                                                  /*macroIsAccessible(def) &&*/
4415                                                  (!g_expandOnlyPredef || def->isPredefined)
4416                                                )
4417                                              )
4418                                           {
4419                                             outputChar('\n');
4420                                             g_yyLineNr++;
4421                                           }
4422                                           else // don't skip
4423                                           {
4424                                             int i;
4425                                             for (i=preYYleng-1;i>=0;i--)
4426                                             {
4427                                               unput(preYYtext[i]);
4428                                             }
4429                                             BEGIN(CopyLine);
4430                                           }
4431                                         }
4432         YY_BREAK
4433 case 10:
4434 /* rule 10 can match eol */
4435 YY_RULE_SETUP
4436 #line 1824 "pre.l"
4437 {
4438                                           QCString text=preYYtext;
4439                                           g_yyLineNr+=text.contains('\n');
4440                                           outputArray(preYYtext,preYYleng);
4441                                         }
4442         YY_BREAK
4443 case 11:
4444 YY_RULE_SETUP
4445 #line 1829 "pre.l"
4446 { // count brackets inside the main file
4447                                           if (g_includeStack.isEmpty()) 
4448                                           {
4449                                             g_curlyCount++;
4450                                           }
4451                                           outputChar(*preYYtext);
4452                                         }
4453         YY_BREAK
4454 case 12:
4455 YY_RULE_SETUP
4456 #line 1836 "pre.l"
4457 { // count brackets inside the main file
4458                                           if (g_includeStack.isEmpty() && g_curlyCount>0) 
4459                                           {
4460                                             g_curlyCount--;
4461                                           }
4462                                           outputChar(*preYYtext);
4463                                         }
4464         YY_BREAK
4465 case 13:
4466 YY_RULE_SETUP
4467 #line 1843 "pre.l"
4468
4469                                           outputArray(preYYtext,preYYleng);
4470                                         }
4471         YY_BREAK
4472 case 14:
4473 YY_RULE_SETUP
4474 #line 1846 "pre.l"
4475
4476                                           outputArray(preYYtext,preYYleng);
4477                                         }
4478         YY_BREAK
4479 case 15:
4480 YY_RULE_SETUP
4481 #line 1849 "pre.l"
4482
4483                                           outputArray(preYYtext,preYYleng);
4484                                         }
4485         YY_BREAK
4486 case 16:
4487 YY_RULE_SETUP
4488 #line 1852 "pre.l"
4489 {
4490                                           outputChar(*preYYtext);
4491                                           BEGIN( CopyString );
4492                                         }
4493         YY_BREAK
4494 case 17:
4495 YY_RULE_SETUP
4496 #line 1856 "pre.l"
4497 {
4498                                           outputArray(preYYtext,preYYleng);
4499                                         }
4500         YY_BREAK
4501 case 18:
4502 YY_RULE_SETUP
4503 #line 1859 "pre.l"
4504 {
4505                                           outputArray(preYYtext,preYYleng);
4506                                         }
4507         YY_BREAK
4508 case 19:
4509 YY_RULE_SETUP
4510 #line 1862 "pre.l"
4511 {
4512                                           outputChar(*preYYtext);
4513                                           BEGIN( CopyLine );
4514                                         }
4515         YY_BREAK
4516 case 20:
4517 /* rule 20 can match eol */
4518 YY_RULE_SETUP
4519 #line 1866 "pre.l"
4520 {
4521                                           g_expectGuard = FALSE;
4522                                           Define *def=0;
4523                                           //def=g_globalDefineDict->find(preYYtext);
4524                                           //def=DefineManager::instance().isDefined(preYYtext);
4525                                           //printf("Search for define %s found=%d g_includeStack.isEmpty()=%d "
4526                                           //       "g_curlyCount=%d g_macroExpansion=%d g_expandOnlyPredef=%d "
4527                                           //     "isPreDefined=%d\n",preYYtext,def ? 1 : 0,
4528                                           //     g_includeStack.isEmpty(),g_curlyCount,g_macroExpansion,g_expandOnlyPredef,
4529                                           //     def ? def->isPredefined : -1
4530                                           //    );
4531                                           if ((g_includeStack.isEmpty() || g_curlyCount>0) &&
4532                                               g_macroExpansion &&
4533                                               (def=DefineManager::instance().isDefined(preYYtext)) &&
4534                                               /*(def->isPredefined || macroIsAccessible(def)) && */
4535                                               (!g_expandOnlyPredef || def->isPredefined)
4536                                              )
4537                                           {
4538                                             //printf("Found it! #args=%d\n",def->nargs);
4539                                             g_roundCount=0;
4540                                             g_defArgsStr=preYYtext;
4541                                             if (def->nargs==-1) // no function macro
4542                                             {
4543                                               QCString result = def->isPredefined ? def->definition : expandMacro(g_defArgsStr);
4544                                               outputArray(result,result.length());
4545                                             }
4546                                             else // zero or more arguments
4547                                             {
4548                                               g_findDefArgContext = CopyLine;
4549                                               BEGIN(FindDefineArgs);
4550                                             }
4551                                           }
4552                                           else
4553                                           {
4554                                             outputArray(preYYtext,preYYleng);
4555                                           }
4556                                         }
4557         YY_BREAK
4558 case 21:
4559 YY_RULE_SETUP
4560 #line 1903 "pre.l"
4561 {
4562                                           Define *def=0;
4563                                           if ((g_includeStack.isEmpty() || g_curlyCount>0) && 
4564                                               g_macroExpansion &&
4565                                               (def=DefineManager::instance().isDefined(preYYtext)) &&
4566                                               def->nargs==-1 &&
4567                                               /*(def->isPredefined || macroIsAccessible(def)) &&*/
4568                                               (!g_expandOnlyPredef || def->isPredefined)
4569                                              )
4570                                           {
4571                                             QCString result=def->isPredefined ? def->definition : expandMacro(preYYtext); 
4572                                             outputArray(result,result.length());
4573                                           }
4574                                           else
4575                                           {
4576                                             outputArray(preYYtext,preYYleng);
4577                                           }
4578                                         }
4579         YY_BREAK
4580 case 22:
4581 /* rule 22 can match eol */
4582 *yy_cp = (yy_hold_char); /* undo effects of setting up preYYtext */
4583 (yy_c_buf_p) = yy_cp -= 1;
4584 YY_DO_BEFORE_ACTION; /* set up preYYtext again */
4585 YY_RULE_SETUP
4586 #line 1921 "pre.l"
4587 { // strip line continuation characters
4588                                         }
4589         YY_BREAK
4590 case 23:
4591 YY_RULE_SETUP
4592 #line 1923 "pre.l"
4593 {
4594                                           outputChar(*preYYtext);
4595                                         }
4596         YY_BREAK
4597 case 24:
4598 /* rule 24 can match eol */
4599 YY_RULE_SETUP
4600 #line 1926 "pre.l"
4601 {
4602                                           outputChar('\n');
4603                                           BEGIN(Start);
4604                                           g_yyLineNr++;
4605                                         }
4606         YY_BREAK
4607 case 25:
4608 YY_RULE_SETUP
4609 #line 1931 "pre.l"
4610 {
4611                                           g_defArgsStr+='(';
4612                                           g_roundCount++;
4613                                         }
4614         YY_BREAK
4615 case 26:
4616 YY_RULE_SETUP
4617 #line 1935 "pre.l"
4618 {
4619                                           g_defArgsStr+=')';
4620                                           g_roundCount--;
4621                                           if (g_roundCount==0)
4622                                           {
4623                                             QCString result=expandMacro(g_defArgsStr);
4624                                             //printf("g_defArgsStr=`%s'->`%s'\n",g_defArgsStr.data(),result.data());
4625                                             if (g_findDefArgContext==CopyLine)
4626                                             {
4627                                               outputArray(result,result.length());
4628                                               BEGIN(g_findDefArgContext);
4629                                             }
4630                                             else // g_findDefArgContext==IncludeID
4631                                             {
4632                                               readIncludeFile(result);
4633                                               g_nospaces=FALSE;
4634                                               BEGIN(Start);
4635                                             }
4636                                           }
4637                                         }
4638         YY_BREAK
4639 /*
4640 <FindDefineArgs>")"{B}*"("              {
4641                                           g_defArgsStr+=preYYtext;
4642                                         }
4643   */
4644 case 27:
4645 YY_RULE_SETUP
4646 #line 1960 "pre.l"
4647 {
4648                                           g_defArgsStr+=preYYtext;
4649                                         }
4650         YY_BREAK
4651 case 28:
4652 YY_RULE_SETUP
4653 #line 1963 "pre.l"
4654 {
4655                                           g_defArgsStr+=*preYYtext;
4656                                           BEGIN(ReadString);
4657                                         }
4658         YY_BREAK
4659 case 29:
4660 /* rule 29 can match eol */
4661 YY_RULE_SETUP
4662 #line 1967 "pre.l"
4663 {
4664                                           g_yyLineNr++;
4665                                           outputChar('\n');
4666                                         }
4667         YY_BREAK
4668 case 30:
4669 YY_RULE_SETUP
4670 #line 1971 "pre.l"
4671 {
4672                                           g_defArgsStr+="@@";
4673                                         }
4674         YY_BREAK
4675 case 31:
4676 YY_RULE_SETUP
4677 #line 1974 "pre.l"
4678 {
4679                                           g_defArgsStr+=*preYYtext;
4680                                         }
4681         YY_BREAK
4682 case 32:
4683 YY_RULE_SETUP
4684 #line 1977 "pre.l"
4685 {
4686                                           g_defArgsStr+=*preYYtext;
4687                                           BEGIN(FindDefineArgs);
4688                                         }
4689         YY_BREAK
4690 case 33:
4691 YY_RULE_SETUP
4692 #line 1981 "pre.l"
4693 {
4694                                           g_defArgsStr+=preYYtext;
4695                                         }
4696         YY_BREAK
4697 case 34:
4698 YY_RULE_SETUP
4699 #line 1984 "pre.l"
4700 {
4701                                           g_defArgsStr+=preYYtext;
4702                                         }
4703         YY_BREAK
4704 case 35:
4705 YY_RULE_SETUP
4706 #line 1987 "pre.l"
4707 {
4708                                           g_defArgsStr+=*preYYtext;
4709                                         }
4710         YY_BREAK
4711 case 36:
4712 YY_RULE_SETUP
4713 #line 1990 "pre.l"
4714 {
4715                                           g_isImported = preYYtext[1]=='m';
4716                                           if (g_macroExpansion) 
4717                                             BEGIN(IncludeID);
4718                                         }
4719         YY_BREAK
4720 case 37:
4721 YY_RULE_SETUP
4722 #line 1995 "pre.l"
4723
4724                                           g_isImported = preYYtext[1]=='m';
4725                                           char c[2];
4726                                           c[0]=preYYtext[preYYleng-1];c[1]='\0';
4727                                           g_incName=c;
4728                                           BEGIN(Include); 
4729                                         }
4730         YY_BREAK
4731 case 38:
4732 YY_RULE_SETUP
4733 #line 2002 "pre.l"
4734
4735                                           //printf("!!!DefName\n"); 
4736                                           BEGIN(DefName); 
4737                                         }
4738         YY_BREAK
4739 case 39:
4740 *yy_cp = (yy_hold_char); /* undo effects of setting up preYYtext */
4741 (yy_c_buf_p) = yy_cp = yy_bp + 5;
4742 YY_DO_BEFORE_ACTION; /* set up preYYtext again */
4743 YY_RULE_SETUP
4744 #line 2006 "pre.l"
4745 {
4746                                           incrLevel();
4747                                           g_guardExpr.resize(0);
4748                                           BEGIN(DefinedExpr2);
4749                                         }
4750         YY_BREAK
4751 case 40:
4752 *yy_cp = (yy_hold_char); /* undo effects of setting up preYYtext */
4753 (yy_c_buf_p) = yy_cp = yy_bp + 5;
4754 YY_DO_BEFORE_ACTION; /* set up preYYtext again */
4755 YY_RULE_SETUP
4756 #line 2011 "pre.l"
4757 {
4758                                           //printf("Pre.l: ifdef\n");
4759                                           incrLevel();
4760                                           g_guardExpr.resize(0);
4761                                           BEGIN(DefinedExpr1);
4762                                         }
4763         YY_BREAK
4764 case 41:
4765 *yy_cp = (yy_hold_char); /* undo effects of setting up preYYtext */
4766 (yy_c_buf_p) = yy_cp = yy_bp + 6;
4767 YY_DO_BEFORE_ACTION; /* set up preYYtext again */
4768 YY_RULE_SETUP
4769 #line 2017 "pre.l"
4770 {
4771                                           incrLevel();
4772                                           g_guardExpr="! ";
4773                                           BEGIN(DefinedExpr2);
4774                                         }
4775         YY_BREAK
4776 case 42:
4777 *yy_cp = (yy_hold_char); /* undo effects of setting up preYYtext */
4778 (yy_c_buf_p) = yy_cp = yy_bp + 6;
4779 YY_DO_BEFORE_ACTION; /* set up preYYtext again */
4780 YY_RULE_SETUP
4781 #line 2022 "pre.l"
4782 {
4783                                           incrLevel();
4784                                           g_guardExpr="! ";
4785                                           BEGIN(DefinedExpr1);
4786                                         }
4787         YY_BREAK
4788 case 43:
4789 *yy_cp = (yy_hold_char); /* undo effects of setting up preYYtext */
4790 (yy_c_buf_p) = yy_cp = yy_bp + 2;
4791 YY_DO_BEFORE_ACTION; /* set up preYYtext again */
4792 YY_RULE_SETUP
4793 #line 2027 "pre.l"
4794 {
4795                                           incrLevel();
4796                                           g_guardExpr.resize(0);
4797                                           BEGIN(Guard);
4798                                         }
4799         YY_BREAK
4800 case 44:
4801 *yy_cp = (yy_hold_char); /* undo effects of setting up preYYtext */
4802 (yy_c_buf_p) = yy_cp -= 1;
4803 YY_DO_BEFORE_ACTION; /* set up preYYtext again */
4804 YY_RULE_SETUP
4805 #line 2032 "pre.l"
4806 {
4807                                           if (!otherCaseDone())
4808                                           {
4809                                             g_guardExpr.resize(0);
4810                                             BEGIN(Guard);  
4811                                           }
4812                                           else
4813                                           {
4814                                             g_ifcount=0;
4815                                             BEGIN(SkipCPPBlock);
4816                                           }
4817                                         }
4818         YY_BREAK
4819 case 45:
4820 /* rule 45 can match eol */
4821 *yy_cp = (yy_hold_char); /* undo effects of setting up preYYtext */
4822 (yy_c_buf_p) = yy_cp = yy_bp + 4;
4823 YY_DO_BEFORE_ACTION; /* set up preYYtext again */
4824 YY_RULE_SETUP
4825 #line 2044 "pre.l"
4826 {
4827                                           //printf("else g_levelGuard[%d]=%d\n",g_level-1,g_levelGuard[g_level-1]);
4828                                           if (otherCaseDone())
4829                                           {
4830                                             g_ifcount=0;
4831                                             BEGIN(SkipCPPBlock);
4832                                           }
4833                                           else
4834                                           {
4835                                             setCaseDone(TRUE);
4836                                             //g_levelGuard[g_level-1]=TRUE;
4837                                           } 
4838                                         }
4839         YY_BREAK
4840 case 46:
4841 YY_RULE_SETUP
4842 #line 2057 "pre.l"
4843 {
4844                                           BEGIN(UndefName);
4845                                         }
4846         YY_BREAK
4847 case 47:
4848 *yy_cp = (yy_hold_char); /* undo effects of setting up preYYtext */
4849 (yy_c_buf_p) = yy_cp -= 1;
4850 YY_DO_BEFORE_ACTION; /* set up preYYtext again */
4851 YY_RULE_SETUP
4852 #line 2060 "pre.l"
4853 {
4854                                           if (!otherCaseDone())
4855                                           {
4856                                             g_guardExpr.resize(0);
4857                                             BEGIN(Guard);
4858                                           }
4859                                         }
4860         YY_BREAK
4861 case 48:
4862 /* rule 48 can match eol */
4863 *yy_cp = (yy_hold_char); /* undo effects of setting up preYYtext */
4864 (yy_c_buf_p) = yy_cp = yy_bp + 5;
4865 YY_DO_BEFORE_ACTION; /* set up preYYtext again */
4866 YY_RULE_SETUP
4867 #line 2067 "pre.l"
4868 {
4869                                           //printf("Pre.l: #endif\n");
4870                                           decrLevel();
4871                                         }
4872         YY_BREAK
4873 case 49:
4874 /* rule 49 can match eol */
4875 YY_RULE_SETUP
4876 #line 2071 "pre.l"
4877 {
4878                                           outputChar('\n');
4879                                           BEGIN(Start);
4880                                           g_yyLineNr++;
4881                                         }
4882         YY_BREAK
4883 case 50:
4884 YY_RULE_SETUP
4885 #line 2076 "pre.l"
4886 {
4887                                           g_expectGuard = FALSE;
4888                                         }
4889         YY_BREAK
4890 case 51:
4891 YY_RULE_SETUP
4892 #line 2079 "pre.l"
4893 { // unknown directive
4894                                           BEGIN(IgnoreLine);
4895                                         }
4896         YY_BREAK
4897 case 52:
4898 /* rule 52 can match eol */
4899 YY_RULE_SETUP
4900 #line 2082 "pre.l"
4901 {
4902                                           outputChar('\n');
4903                                           g_yyLineNr++;
4904                                         }
4905         YY_BREAK
4906 case 53:
4907 YY_RULE_SETUP
4908 #line 2086 "pre.l"
4909
4910         YY_BREAK
4911 case 54:
4912 YY_RULE_SETUP
4913 #line 2087 "pre.l"
4914
4915         YY_BREAK
4916 case 55:
4917 YY_RULE_SETUP
4918 #line 2088 "pre.l"
4919 {
4920                                           Define *def;
4921                                           if ((def=DefineManager::instance().isDefined(preYYtext)) 
4922                                               /*&& !def->isPredefined*/
4923                                               && !def->nonRecursive
4924                                              )
4925                                           {
4926                                             //printf("undefining %s\n",preYYtext);
4927                                             def->undef=TRUE;
4928                                           }
4929                                           BEGIN(Start);
4930                                         }
4931         YY_BREAK
4932 case 56:
4933 /* rule 56 can match eol */
4934 YY_RULE_SETUP
4935 #line 2100 "pre.l"
4936 {
4937                                           outputChar('\n');
4938                                           g_guardExpr+=' ';
4939                                           g_yyLineNr++;
4940                                         }
4941         YY_BREAK
4942 case 57:
4943 *yy_cp = (yy_hold_char); /* undo effects of setting up preYYtext */
4944 (yy_c_buf_p) = yy_cp = yy_bp + 7;
4945 YY_DO_BEFORE_ACTION; /* set up preYYtext again */
4946 YY_RULE_SETUP
4947 #line 2105 "pre.l"
4948 {
4949                                           BEGIN(DefinedExpr2);
4950                                         }
4951         YY_BREAK
4952 case 58:
4953 *yy_cp = (yy_hold_char); /* undo effects of setting up preYYtext */
4954 (yy_c_buf_p) = yy_cp = yy_bp + 7;
4955 YY_DO_BEFORE_ACTION; /* set up preYYtext again */
4956 YY_RULE_SETUP
4957 #line 2108 "pre.l"
4958 {
4959                                           BEGIN(DefinedExpr1);
4960                                         }
4961         YY_BREAK
4962 case 59:
4963 YY_RULE_SETUP
4964 #line 2111 "pre.l"
4965 { g_guardExpr+=preYYtext; }
4966         YY_BREAK
4967 case 60:
4968 YY_RULE_SETUP
4969 #line 2112 "pre.l"
4970 { g_guardExpr+=*preYYtext; }
4971         YY_BREAK
4972 case 61:
4973 /* rule 61 can match eol */
4974 YY_RULE_SETUP
4975 #line 2113 "pre.l"
4976 {
4977                                           unput(*preYYtext);
4978                                           //printf("Guard: `%s'\n",
4979                                           //    g_guardExpr.data());
4980                                           bool guard=computeExpression(g_guardExpr);
4981                                           setCaseDone(guard);
4982                                           //printf("if g_levelGuard[%d]=%d\n",g_level-1,g_levelGuard[g_level-1]);
4983                                           if (guard)
4984                                           {
4985                                             BEGIN(Start);
4986                                           } 
4987                                           else
4988                                           {
4989                                             g_ifcount=0;
4990                                             BEGIN(SkipCPPBlock);
4991                                           }
4992                                         }
4993         YY_BREAK
4994 case 62:
4995 /* rule 62 can match eol */
4996 YY_RULE_SETUP
4997 #line 2130 "pre.l"
4998 { g_yyLineNr++; outputChar('\n'); }
4999         YY_BREAK
5000 case 63:
5001 YY_RULE_SETUP
5002 #line 2131 "pre.l"
5003 {
5004                                           if (DefineManager::instance().isDefined(preYYtext) || g_guardName==preYYtext)
5005                                             g_guardExpr+=" 1L ";
5006                                           else
5007                                             g_guardExpr+=" 0L ";
5008                                           g_lastGuardName=preYYtext;
5009                                           BEGIN(Guard);
5010                                         }
5011         YY_BREAK
5012 case 64:
5013 YY_RULE_SETUP
5014 #line 2139 "pre.l"
5015 {
5016                                           if (DefineManager::instance().isDefined(preYYtext) || g_guardName==preYYtext)
5017                                             g_guardExpr+=" 1L ";
5018                                           else
5019                                             g_guardExpr+=" 0L ";
5020                                           g_lastGuardName=preYYtext;
5021                                         }
5022         YY_BREAK
5023 case 65:
5024 /* rule 65 can match eol */
5025 YY_RULE_SETUP
5026 #line 2146 "pre.l"
5027 { // should not happen, handle anyway
5028                                           g_yyLineNr++;
5029                                           g_ifcount=0;
5030                                           BEGIN(SkipCPPBlock); 
5031                                         }
5032         YY_BREAK
5033 case 66:
5034 YY_RULE_SETUP
5035 #line 2151 "pre.l"
5036 {
5037                                           BEGIN(Guard);
5038                                         }
5039         YY_BREAK
5040 case 67:
5041 YY_RULE_SETUP
5042 #line 2154 "pre.l"
5043
5044         YY_BREAK
5045 case 68:
5046 YY_RULE_SETUP
5047 #line 2155 "pre.l"
5048 { BEGIN(SkipCommand); }
5049         YY_BREAK
5050 case 69:
5051 /* rule 69 can match eol */
5052 *yy_cp = (yy_hold_char); /* undo effects of setting up preYYtext */
5053 (yy_c_buf_p) = yy_cp -= 1;
5054 YY_DO_BEFORE_ACTION; /* set up preYYtext again */
5055 YY_RULE_SETUP
5056 #line 2156 "pre.l"
5057 { BEGIN(SkipLine); }
5058         YY_BREAK
5059 case 70:
5060 /* rule 70 can match eol */
5061 YY_RULE_SETUP
5062 #line 2157 "pre.l"
5063 { g_yyLineNr++; outputChar('\n'); }
5064         YY_BREAK
5065 case 71:
5066 YY_RULE_SETUP
5067 #line 2158 "pre.l"
5068
5069         YY_BREAK
5070 case 72:
5071 *yy_cp = (yy_hold_char); /* undo effects of setting up preYYtext */
5072 (yy_c_buf_p) = yy_cp -= 1;
5073 YY_DO_BEFORE_ACTION; /* set up preYYtext again */
5074 YY_RULE_SETUP
5075 #line 2159 "pre.l"
5076
5077                                           incrLevel();
5078                                           g_ifcount++; 
5079                                           //printf("#if... depth=%d\n",g_ifcount);
5080                                         }
5081         YY_BREAK
5082 case 73:
5083 YY_RULE_SETUP
5084 #line 2164 "pre.l"
5085 {
5086                                           //printf("Else! g_ifcount=%d otherCaseDone=%d\n",g_ifcount,otherCaseDone());
5087                                           if (g_ifcount==0 && !otherCaseDone())
5088                                           {
5089                                             setCaseDone(TRUE);
5090                                             //outputChar('\n');
5091                                             BEGIN(Start);
5092                                           }
5093                                         }
5094         YY_BREAK
5095 case 74:
5096 *yy_cp = (yy_hold_char); /* undo effects of setting up preYYtext */
5097 (yy_c_buf_p) = yy_cp -= 1;
5098 YY_DO_BEFORE_ACTION; /* set up preYYtext again */
5099 YY_RULE_SETUP
5100 #line 2173 "pre.l"
5101 {
5102                                           if (g_ifcount==0) 
5103                                           {
5104                                             if (!otherCaseDone())
5105                                             {
5106                                               g_guardExpr.resize(0);
5107                                               g_lastGuardName.resize(0);
5108                                               BEGIN(Guard);
5109                                             }
5110                                             else
5111                                             {
5112                                               BEGIN(SkipCPPBlock);
5113                                             }
5114                                           }
5115                                         }
5116         YY_BREAK
5117 case 75:
5118 YY_RULE_SETUP
5119 #line 2188 "pre.l"
5120
5121                                           g_expectGuard = FALSE;
5122                                           decrLevel();
5123                                           if (--g_ifcount<0)
5124                                           {
5125                                             //outputChar('\n');
5126                                             BEGIN(Start);
5127                                           }
5128                                         }
5129         YY_BREAK
5130 case 76:
5131 /* rule 76 can match eol */
5132 YY_RULE_SETUP
5133 #line 2197 "pre.l"
5134
5135                                           outputChar('\n');
5136                                           g_yyLineNr++; 
5137                                           BEGIN(SkipCPPBlock);
5138                                         }
5139         YY_BREAK
5140 case 77:
5141 YY_RULE_SETUP
5142 #line 2202 "pre.l"
5143 { // unknown directive 
5144                                           BEGIN(SkipLine); 
5145                                         }
5146         YY_BREAK
5147 case 78:
5148 YY_RULE_SETUP
5149 #line 2205 "pre.l"
5150
5151         YY_BREAK
5152 case 79:
5153 YY_RULE_SETUP
5154 #line 2206 "pre.l"
5155
5156         YY_BREAK
5157 case 80:
5158 YY_RULE_SETUP
5159 #line 2207 "pre.l"
5160 { }
5161         YY_BREAK
5162 case 81:
5163 YY_RULE_SETUP
5164 #line 2208 "pre.l"
5165 {
5166                                           BEGIN(SkipString);
5167                                         }
5168         YY_BREAK
5169 case 82:
5170 YY_RULE_SETUP
5171 #line 2211 "pre.l"
5172
5173         YY_BREAK
5174 case 83:
5175 *yy_cp = (yy_hold_char); /* undo effects of setting up preYYtext */
5176 (yy_c_buf_p) = yy_cp = yy_bp + 2;
5177 YY_DO_BEFORE_ACTION; /* set up preYYtext again */
5178 YY_RULE_SETUP
5179 #line 2212 "pre.l"
5180
5181                                         }
5182         YY_BREAK
5183 case 84:
5184 YY_RULE_SETUP
5185 #line 2214 "pre.l"
5186 {
5187                                           g_lastCPPContext=YY_START;
5188                                           BEGIN(RemoveCPPComment);
5189                                         }
5190         YY_BREAK
5191 case 85:
5192 *yy_cp = (yy_hold_char); /* undo effects of setting up preYYtext */
5193 (yy_c_buf_p) = yy_cp = yy_bp + 2;
5194 YY_DO_BEFORE_ACTION; /* set up preYYtext again */
5195 YY_RULE_SETUP
5196 #line 2218 "pre.l"
5197
5198                                         }
5199         YY_BREAK
5200 case 86:
5201 *yy_cp = (yy_hold_char); /* undo effects of setting up preYYtext */
5202 (yy_c_buf_p) = yy_cp = yy_bp + 2;
5203 YY_DO_BEFORE_ACTION; /* set up preYYtext again */
5204 YY_RULE_SETUP
5205 #line 2220 "pre.l"
5206 {
5207                                           g_lastCContext=YY_START;
5208                                           BEGIN(RemoveCComment);
5209                                         }
5210         YY_BREAK
5211 case 87:
5212 /* rule 87 can match eol */
5213 YY_RULE_SETUP
5214 #line 2224 "pre.l"
5215 {
5216                                           outputChar('\n');
5217                                           g_yyLineNr++;  
5218                                           BEGIN(SkipCPPBlock);
5219                                         }
5220         YY_BREAK
5221 case 88:
5222 YY_RULE_SETUP
5223 #line 2229 "pre.l"
5224 { }
5225         YY_BREAK
5226 case 89:
5227 YY_RULE_SETUP
5228 #line 2230 "pre.l"
5229 { }
5230         YY_BREAK
5231 case 90:
5232 YY_RULE_SETUP
5233 #line 2231 "pre.l"
5234 {
5235                                           BEGIN(SkipLine);
5236                                         }
5237         YY_BREAK
5238 case 91:
5239 YY_RULE_SETUP
5240 #line 2234 "pre.l"
5241 { }
5242         YY_BREAK
5243 case 92:
5244 *yy_cp = (yy_hold_char); /* undo effects of setting up preYYtext */
5245 (yy_c_buf_p) = yy_cp -= 1;
5246 YY_DO_BEFORE_ACTION; /* set up preYYtext again */
5247 YY_RULE_SETUP
5248 #line 2235 "pre.l"
5249 {
5250                                           g_nospaces=TRUE;
5251                                           g_roundCount=0;
5252                                           g_defArgsStr=preYYtext;
5253                                           g_findDefArgContext = IncludeID;
5254                                           BEGIN(FindDefineArgs);
5255                                         }
5256         YY_BREAK
5257 case 93:
5258 YY_RULE_SETUP
5259 #line 2242 "pre.l"
5260 {
5261                                           g_nospaces=TRUE;
5262                                           readIncludeFile(expandMacro(preYYtext));
5263                                           BEGIN(Start);
5264                                         }
5265         YY_BREAK
5266 case 94:
5267 YY_RULE_SETUP
5268 #line 2247 "pre.l"
5269
5270                                           g_incName+=preYYtext;
5271                                           readIncludeFile(g_incName);
5272                                           if (g_isImported)
5273                                           {
5274                                             BEGIN(EndImport);
5275                                           }
5276                                           else
5277                                           {
5278                                             BEGIN(Start);
5279                                           }
5280                                         }
5281         YY_BREAK
5282 case 95:
5283 /* rule 95 can match eol */
5284 *yy_cp = (yy_hold_char); /* undo effects of setting up preYYtext */
5285 (yy_c_buf_p) = yy_cp -= 1;
5286 YY_DO_BEFORE_ACTION; /* set up preYYtext again */
5287 YY_RULE_SETUP
5288 #line 2259 "pre.l"
5289 {
5290                                           BEGIN(Start);
5291                                         }
5292         YY_BREAK
5293 case 96:
5294 /* rule 96 can match eol */
5295 YY_RULE_SETUP
5296 #line 2262 "pre.l"
5297
5298                                           outputChar('\n');
5299                                           g_yyLineNr++;
5300                                         }
5301         YY_BREAK
5302 case 97:
5303 YY_RULE_SETUP
5304 #line 2266 "pre.l"
5305 {
5306                                         }
5307         YY_BREAK
5308 case 98:
5309 /* rule 98 can match eol */
5310 YY_RULE_SETUP
5311 #line 2268 "pre.l"
5312 { // define with argument
5313                                           //printf("Define() `%s'\n",preYYtext);
5314                                           g_argDict = new QDict<int>(31);
5315                                           g_argDict->setAutoDelete(TRUE);
5316                                           g_defArgs = 0; 
5317                                           g_defArgsStr.resize(0);
5318                                           g_defText.resize(0);
5319                                           g_defLitText.resize(0);
5320                                           g_defName = preYYtext;
5321                                           g_defVarArgs = FALSE;
5322                                           g_defExtraSpacing.resize(0);
5323                                           BEGIN(DefineArg);
5324                                         }
5325         YY_BREAK
5326 case 99:
5327 /* rule 99 can match eol */
5328 *yy_cp = (yy_hold_char); /* undo effects of setting up preYYtext */
5329 (yy_c_buf_p) = yy_cp -= 1;
5330 YY_DO_BEFORE_ACTION; /* set up preYYtext again */
5331 YY_RULE_SETUP
5332 #line 2281 "pre.l"
5333 { // special case: define with 1 -> can be "guard"
5334                                           //printf("Define `%s'\n",preYYtext);
5335                                           g_argDict = 0;
5336                                           g_defArgs = -1;
5337                                           g_defArgsStr.resize(0);
5338                                           g_defName = preYYtext;
5339                                           g_defName = g_defName.left(g_defName.length()-1).stripWhiteSpace();
5340                                           g_defVarArgs = FALSE;
5341                                           //printf("Guard check: %s!=%s || %d\n",
5342                                           //    g_defName.data(),g_lastGuardName.data(),g_expectGuard);
5343                                           if ( g_defName!=g_lastGuardName || !g_expectGuard)
5344                                           { // define may appear in the output
5345                                             QCString tmp=(QCString)"#define "+g_defName;
5346                                             outputArray(tmp.data(),tmp.length());
5347                                             g_quoteArg=FALSE;
5348                                             g_insideComment=FALSE;
5349                                             g_lastGuardName.resize(0);
5350                                             g_defText="1"; 
5351                                             g_defLitText="1"; 
5352                                             BEGIN(DefineText); 
5353                                           }
5354                                           else // define is a guard => hide
5355                                           {
5356                                             //printf("Found a guard %s\n",preYYtext);
5357                                             g_defText.resize(0);
5358                                             g_defLitText.resize(0);
5359                                             BEGIN(Start);
5360                                           }
5361                                           g_expectGuard=FALSE;
5362                                         }
5363         YY_BREAK
5364 case 100:
5365 /* rule 100 can match eol */
5366 YY_RULE_SETUP
5367 #line 2311 "pre.l"
5368 { // empty define
5369                                           g_argDict = 0;
5370                                           g_defArgs = -1;
5371                                           g_defName = preYYtext;
5372                                           g_defArgsStr.resize(0);
5373                                           g_defText.resize(0);
5374                                           g_defLitText.resize(0);
5375                                           g_defVarArgs = FALSE;
5376                                           //printf("Guard check: %s!=%s || %d\n",
5377                                           //    g_defName.data(),g_lastGuardName.data(),g_expectGuard);
5378                                           if ( g_defName!=g_lastGuardName || !g_expectGuard)
5379                                           { // define may appear in the output
5380                                             QCString tmp=(QCString)"#define "+g_defName;
5381                                             outputArray(tmp.data(),tmp.length());
5382                                             g_quoteArg=FALSE;
5383                                             g_insideComment=FALSE;
5384                                             if (g_insideCS) g_defText="1"; // for C#, use "1" as define text
5385                                             BEGIN(DefineText);
5386                                           }
5387                                           else // define is a guard => hide
5388                                           {
5389                                             //printf("Found a guard %s\n",preYYtext);
5390                                             g_guardName = preYYtext;
5391                                             g_lastGuardName.resize(0);
5392                                             BEGIN(Start);
5393                                           }
5394                                           g_expectGuard=FALSE;
5395                                         }
5396         YY_BREAK
5397 case 101:
5398 YY_RULE_SETUP
5399 #line 2339 "pre.l"
5400 { // define with content
5401                                           //printf("Define `%s'\n",preYYtext);
5402                                           g_argDict = 0;
5403                                           g_defArgs = -1;
5404                                           g_defArgsStr.resize(0);
5405                                           g_defText.resize(0);
5406                                           g_defLitText.resize(0);
5407                                           g_defName = preYYtext;
5408                                           g_defVarArgs = FALSE;
5409                                           QCString tmp=(QCString)"#define "+g_defName+g_defArgsStr;
5410                                           outputArray(tmp.data(),tmp.length());
5411                                           g_quoteArg=FALSE;
5412                                           g_insideComment=FALSE;
5413                                           BEGIN(DefineText); 
5414                                         }
5415         YY_BREAK
5416 case 102:
5417 /* rule 102 can match eol */
5418 YY_RULE_SETUP
5419 #line 2354 "pre.l"
5420 {
5421                                           g_defExtraSpacing+="\n";
5422                                           g_yyLineNr++;
5423                                         }
5424         YY_BREAK
5425 case 103:
5426 YY_RULE_SETUP
5427 #line 2358 "pre.l"
5428 { g_defArgsStr+=preYYtext; }
5429         YY_BREAK
5430 case 104:
5431 YY_RULE_SETUP
5432 #line 2359 "pre.l"
5433 { g_defArgsStr+=preYYtext; }
5434         YY_BREAK
5435 case 105:
5436 YY_RULE_SETUP
5437 #line 2360 "pre.l"
5438 {
5439                                           g_defArgsStr+=preYYtext; 
5440                                           QCString tmp=(QCString)"#define "+g_defName+g_defArgsStr+g_defExtraSpacing;
5441                                           outputArray(tmp.data(),tmp.length());
5442                                           g_quoteArg=FALSE;
5443                                           g_insideComment=FALSE;
5444                                           BEGIN(DefineText);
5445                                         }
5446         YY_BREAK
5447 case 106:
5448 YY_RULE_SETUP
5449 #line 2368 "pre.l"
5450 { // Variadic macro
5451                                           g_defVarArgs = TRUE;
5452                                           g_defArgsStr+=preYYtext;
5453                                           g_argDict->insert("__VA_ARGS__",new int(g_defArgs));
5454                                           g_defArgs++;
5455                                         }
5456         YY_BREAK
5457 case 107:
5458 YY_RULE_SETUP
5459 #line 2374 "pre.l"
5460 {
5461                                           //printf("Define addArg(%s)\n",preYYtext);
5462                                           QCString argName=preYYtext;
5463                                           g_defVarArgs = preYYtext[preYYleng-1]=='.';
5464                                           if (g_defVarArgs) // strip ellipsis
5465                                           {
5466                                             argName=argName.left(argName.length()-3);
5467                                           }
5468                                           argName = argName.stripWhiteSpace();
5469                                           g_defArgsStr+=preYYtext;
5470                                           g_argDict->insert(argName,new int(g_defArgs)); 
5471                                           g_defArgs++;
5472                                         }
5473         YY_BREAK
5474 /*
5475 <DefineText>"/ **"|"/ *!"                       {
5476                                           g_defText+=preYYtext;
5477                                           g_defLitText+=preYYtext;
5478                                           g_insideComment=TRUE;
5479                                         }
5480 <DefineText>"* /"                       {
5481                                           g_defText+=preYYtext;
5482                                           g_defLitText+=preYYtext;
5483                                           g_insideComment=FALSE;
5484                                         }
5485   */
5486 case 108:
5487 YY_RULE_SETUP
5488 #line 2399 "pre.l"
5489 {
5490                                           g_defText+=preYYtext;
5491                                           g_defLitText+=preYYtext;
5492                                           g_lastCContext=YY_START;
5493                                           g_commentCount=1;
5494                                           BEGIN(CopyCComment);
5495                                         }
5496         YY_BREAK
5497 case 109:
5498 YY_RULE_SETUP
5499 #line 2406 "pre.l"
5500 {
5501                                           outputArray(preYYtext,preYYleng);
5502                                           g_lastCPPContext=YY_START;
5503                                           g_defLitText+=' ';
5504                                           BEGIN(SkipCPPComment);
5505                                         }
5506         YY_BREAK
5507 case 110:
5508 YY_RULE_SETUP
5509 #line 2412 "pre.l"
5510 {
5511                                           if (preYYtext[0]=='/') outputChar('/');
5512                                           outputChar('*');outputChar('/');
5513                                           if (--g_commentCount<=0)
5514                                           {
5515                                             if (g_lastCContext==Start) 
5516                                               // small hack to make sure that ^... rule will
5517                                               // match when going to Start... Example: "/*...*/ some stuff..."
5518                                             {
5519                                               YY_CURRENT_BUFFER->yy_at_bol=1;
5520                                             }
5521                                             BEGIN(g_lastCContext);  
5522                                           }
5523                                         }
5524         YY_BREAK
5525 case 111:
5526 YY_RULE_SETUP
5527 #line 2426 "pre.l"
5528 {
5529                                           outputArray(preYYtext,preYYleng);
5530                                         }
5531         YY_BREAK
5532 case 112:
5533 YY_RULE_SETUP
5534 #line 2429 "pre.l"
5535 {
5536                                           outputChar('/');outputChar('*');
5537                                           //g_commentCount++;
5538                                         }
5539         YY_BREAK
5540 case 113:
5541 YY_RULE_SETUP
5542 #line 2433 "pre.l"
5543 {
5544                                           outputArray(preYYtext,preYYleng);
5545                                         }
5546         YY_BREAK
5547 case 114:
5548 /* rule 114 can match eol */
5549 YY_RULE_SETUP
5550 #line 2436 "pre.l"
5551 {
5552                                           outputArray(preYYtext,preYYleng);
5553                                           g_yyLineNr+=QCString(preYYtext).contains('\n');
5554                                         }
5555         YY_BREAK
5556 case 115:
5557 /* rule 115 can match eol */
5558 YY_RULE_SETUP
5559 #line 2440 "pre.l"
5560 {
5561                                           outputArray(preYYtext,preYYleng);
5562                                           g_yyLineNr+=QCString(preYYtext).contains('\n');
5563                                           if (preYYtext[1]=='f')
5564                                           {
5565                                             g_blockName="f";
5566                                           }
5567                                           else
5568                                           {
5569                                             g_blockName=QCString(&preYYtext[1]).stripWhiteSpace();
5570                                           }
5571                                           BEGIN(SkipVerbatim);
5572                                         }
5573         YY_BREAK
5574 case 116:
5575 YY_RULE_SETUP
5576 #line 2453 "pre.l"
5577 { // conditional section
5578                                           g_condCtx = YY_START;
5579                                           outputArray(preYYtext,preYYleng);
5580                                           BEGIN(CondLine);
5581                                         }
5582         YY_BREAK
5583 case 117:
5584 YY_RULE_SETUP
5585 #line 2458 "pre.l"
5586 {
5587                                           startCondSection(preYYtext);
5588                                           outputArray(preYYtext,preYYleng);
5589                                           BEGIN(g_condCtx);
5590                                         }
5591         YY_BREAK
5592 case 118:
5593 /* rule 118 can match eol */
5594 *yy_cp = (yy_hold_char); /* undo effects of setting up preYYtext */
5595 (yy_c_buf_p) = yy_cp -= 1;
5596 YY_DO_BEFORE_ACTION; /* set up preYYtext again */
5597 YY_RULE_SETUP
5598 #line 2463 "pre.l"
5599 {
5600                                           g_condCtx = YY_START;
5601                                           outputArray(preYYtext,preYYleng);
5602                                         }
5603         YY_BREAK
5604 case 119:
5605 YY_RULE_SETUP
5606 #line 2467 "pre.l"
5607 {
5608                                           unput(*preYYtext);
5609                                           startCondSection(" ");
5610                                           BEGIN(g_condCtx);
5611                                         }
5612         YY_BREAK
5613 case 120:
5614 /* rule 120 can match eol */
5615 *yy_cp = (yy_hold_char); /* undo effects of setting up preYYtext */
5616 (yy_c_buf_p) = yy_cp = yy_bp + 8;
5617 YY_DO_BEFORE_ACTION; /* set up preYYtext again */
5618 YY_RULE_SETUP
5619 #line 2472 "pre.l"
5620 {
5621                                           outputArray(preYYtext,preYYleng);
5622                                           endCondSection();
5623                                         }
5624         YY_BREAK
5625 case 121:
5626 YY_RULE_SETUP
5627 #line 2476 "pre.l"
5628 { /* end of verbatim block */
5629                                           outputArray(preYYtext,preYYleng);
5630                                           if (preYYtext[1]=='f' && g_blockName=="f")
5631                                           {
5632                                             BEGIN(SkipCComment);
5633                                           }
5634                                           else if (&preYYtext[4]==g_blockName)
5635                                           {
5636                                             BEGIN(SkipCComment);
5637                                           }
5638                                         }
5639         YY_BREAK
5640 case 122:
5641 YY_RULE_SETUP
5642 #line 2487 "pre.l"
5643 {
5644                                           outputArray(preYYtext,preYYleng);
5645                                         }
5646         YY_BREAK
5647 case 123:
5648 YY_RULE_SETUP
5649 #line 2490 "pre.l"
5650 {
5651                                           outputArray(preYYtext,preYYleng);
5652                                         }
5653         YY_BREAK
5654 case 124:
5655 /* rule 124 can match eol */
5656 YY_RULE_SETUP
5657 #line 2493 "pre.l"
5658
5659                                           g_yyLineNr++;
5660                                           outputChar('\n');
5661                                         }
5662         YY_BREAK
5663 case 125:
5664 YY_RULE_SETUP
5665 #line 2497 "pre.l"
5666 {
5667                                           outputChar(*preYYtext);
5668                                         }
5669         YY_BREAK
5670 case 126:
5671 YY_RULE_SETUP
5672 #line 2500 "pre.l"
5673 {
5674                                           g_defLitText+=preYYtext;
5675                                           g_defText+=escapeAt(preYYtext);
5676                                         }
5677         YY_BREAK
5678 case 127:
5679 YY_RULE_SETUP
5680 #line 2504 "pre.l"
5681 {
5682                                           g_defLitText+=preYYtext;
5683                                           g_defText+=preYYtext;
5684                                           BEGIN(g_lastCContext);
5685                                         }
5686         YY_BREAK
5687 case 128:
5688 /* rule 128 can match eol */
5689 YY_RULE_SETUP
5690 #line 2509 "pre.l"
5691
5692                                           g_yyLineNr++;
5693                                           g_defLitText+=preYYtext;
5694                                           g_defText+=' ';
5695                                         }
5696         YY_BREAK
5697 case 129:
5698 YY_RULE_SETUP
5699 #line 2514 "pre.l"
5700 { // see bug 594021 for a usecase for this rule
5701                                           if (g_lastCContext==SkipCPPBlock)
5702                                           {
5703                                             BEGIN(SkipCommand);
5704                                           }
5705                                           else
5706                                           {
5707                                             REJECT;
5708                                           }
5709                                         }
5710         YY_BREAK
5711 case 130:
5712 YY_RULE_SETUP
5713 #line 2524 "pre.l"
5714 { BEGIN(g_lastCContext); }
5715         YY_BREAK
5716 case 131:
5717 YY_RULE_SETUP
5718 #line 2525 "pre.l"
5719
5720         YY_BREAK
5721 case 132:
5722 YY_RULE_SETUP
5723 #line 2526 "pre.l"
5724
5725         YY_BREAK
5726 case 133:
5727 YY_RULE_SETUP
5728 #line 2527 "pre.l"
5729
5730         YY_BREAK
5731 case 134:
5732 /* rule 134 can match eol */
5733 YY_RULE_SETUP
5734 #line 2528 "pre.l"
5735 { g_yyLineNr++; outputChar('\n'); }
5736         YY_BREAK
5737 case 135:
5738 YY_RULE_SETUP
5739 #line 2529 "pre.l"
5740
5741         YY_BREAK
5742 case 136:
5743 YY_RULE_SETUP
5744 #line 2530 "pre.l"
5745 {
5746                                           outputArray(preYYtext,preYYleng);
5747                                         }
5748         YY_BREAK
5749 case 137:
5750 /* rule 137 can match eol */
5751 YY_RULE_SETUP
5752 #line 2533 "pre.l"
5753 {
5754                                           unput(*preYYtext);
5755                                           BEGIN(g_lastCPPContext);
5756                                         }
5757         YY_BREAK
5758 case 138:
5759 YY_RULE_SETUP
5760 #line 2537 "pre.l"
5761 {
5762                                           outputChar('/');outputChar('*');
5763                                         }
5764         YY_BREAK
5765 case 139:
5766 YY_RULE_SETUP
5767 #line 2540 "pre.l"
5768 {
5769                                           outputChar('/');outputChar('/');
5770                                         }
5771         YY_BREAK
5772 case 140:
5773 YY_RULE_SETUP
5774 #line 2543 "pre.l"
5775 {
5776                                           outputArray(preYYtext,preYYleng);
5777                                         }
5778         YY_BREAK
5779 case 141:
5780 YY_RULE_SETUP
5781 #line 2546 "pre.l"
5782 {
5783                                           outputChar(*preYYtext);
5784                                         }
5785         YY_BREAK
5786 case 142:
5787 YY_RULE_SETUP
5788 #line 2549 "pre.l"
5789
5790         YY_BREAK
5791 case 143:
5792 YY_RULE_SETUP
5793 #line 2550 "pre.l"
5794
5795         YY_BREAK
5796 case 144:
5797 YY_RULE_SETUP
5798 #line 2551 "pre.l"
5799
5800         YY_BREAK
5801 case 145:
5802 YY_RULE_SETUP
5803 #line 2552 "pre.l"
5804
5805         YY_BREAK
5806 case 146:
5807 YY_RULE_SETUP
5808 #line 2553 "pre.l"
5809 {
5810                                           g_quoteArg=TRUE;
5811                                           g_defLitText+=preYYtext;
5812                                         }
5813         YY_BREAK
5814 case 147:
5815 YY_RULE_SETUP
5816 #line 2557 "pre.l"
5817 {
5818                                           g_defLitText+=preYYtext;
5819                                           if (g_quoteArg)
5820                                           {
5821                                             g_defText+="\"";
5822                                           }
5823                                           if (g_defArgs>0)
5824                                           {
5825                                             int *n;
5826                                             if ((n=(*g_argDict)[preYYtext]))
5827                                             {
5828                                               //if (!g_quoteArg) g_defText+=' ';
5829                                               g_defText+='@';
5830                                               QCString numStr;
5831                                               numStr.sprintf("%d",*n);
5832                                               g_defText+=numStr;
5833                                               //if (!g_quoteArg) g_defText+=' ';
5834                                             }
5835                                             else
5836                                             {
5837                                               g_defText+=preYYtext;
5838                                             }
5839                                           }
5840                                           else
5841                                           {
5842                                             g_defText+=preYYtext;
5843                                           }
5844                                           if (g_quoteArg)
5845                                           {
5846                                             g_defText+="\"";
5847                                           }
5848                                           g_quoteArg=FALSE;
5849                                         }
5850         YY_BREAK
5851 case 148:
5852 YY_RULE_SETUP
5853 #line 2590 "pre.l"
5854 {
5855                                           g_defLitText+=preYYtext;
5856                                           g_defText+=preYYtext;
5857                                         }
5858         YY_BREAK
5859 case 149:
5860 /* rule 149 can match eol */
5861 YY_RULE_SETUP
5862 #line 2594 "pre.l"
5863
5864                                           g_defLitText+=preYYtext;
5865                                           outputChar('\n');
5866                                           g_defText += ' '; g_yyLineNr++; 
5867                                         }
5868         YY_BREAK
5869 case 150:
5870 /* rule 150 can match eol */
5871 YY_RULE_SETUP
5872 #line 2599 "pre.l"
5873 {
5874                                           QCString comment=extractTrailingComment(g_defLitText);
5875                                           g_defLitText+=preYYtext;
5876                                           if (!comment.isEmpty())
5877                                           {
5878                                             outputArray(comment,comment.length());
5879                                             g_defLitText=g_defLitText.left(g_defLitText.length()-comment.length()-1);
5880                                           }
5881                                           outputChar('\n');
5882                                           Define *def=0;
5883                                           //printf("Define name=`%s' text=`%s' litTexti=`%s'\n",g_defName.data(),g_defText.data(),g_defLitText.data());
5884                                           if (g_includeStack.isEmpty() || g_curlyCount>0) 
5885                                           {
5886                                             addDefine();
5887                                           }
5888                                           def=DefineManager::instance().isDefined(g_defName);
5889                                           if (def==0) // new define
5890                                           {
5891                                             //printf("new define '%s'!\n",g_defName.data());
5892                                             Define *nd = newDefine();
5893                                             DefineManager::instance().addDefine(g_yyFileName,nd);
5894
5895                                             // also add it to the local file list if it is a source file
5896                                             //if (g_isSource && g_includeStack.isEmpty())
5897                                             //{
5898                                             //  g_fileDefineDict->insert(g_defName,nd);
5899                                             //}
5900                                           }
5901                                           else if (def /*&& macroIsAccessible(def)*/)
5902                                                // name already exists
5903                                           {
5904                                             //printf("existing define!\n");
5905                                             //printf("define found\n");
5906                                             if (def->undef) // undefined name
5907                                             {
5908                                               def->undef = FALSE;
5909                                               def->name = g_defName;
5910                                               def->definition = g_defText.stripWhiteSpace();
5911                                               def->nargs = g_defArgs;
5912                                               def->fileName = g_yyFileName.copy(); 
5913                                               def->lineNr = g_yyLineNr;
5914                                             }
5915                                             else
5916                                             {
5917                                               //printf("error: define %s is defined more than once!\n",g_defName.data());
5918                                             }
5919                                           }
5920                                           delete g_argDict; g_argDict=0;
5921                                           g_yyLineNr++;
5922                                           g_lastGuardName.resize(0);
5923                                           BEGIN(Start);
5924                                         }
5925         YY_BREAK
5926 case 151:
5927 YY_RULE_SETUP
5928 #line 2651 "pre.l"
5929 { g_defText += ' '; g_defLitText+=preYYtext; }
5930         YY_BREAK
5931 case 152:
5932 YY_RULE_SETUP
5933 #line 2652 "pre.l"
5934 { g_defText += "##"; g_defLitText+=preYYtext; }
5935         YY_BREAK
5936 case 153:
5937 YY_RULE_SETUP
5938 #line 2653 "pre.l"
5939 { g_defText += "@@"; g_defLitText+=preYYtext; }
5940         YY_BREAK
5941 case 154:
5942 YY_RULE_SETUP
5943 #line 2654 "pre.l"
5944
5945                                           g_defText += *preYYtext; 
5946                                           g_defLitText+=preYYtext; 
5947                                           if (!g_insideComment)
5948                                           {
5949                                             BEGIN(SkipDoubleQuote);
5950                                           }
5951                                         }
5952         YY_BREAK
5953 case 155:
5954 YY_RULE_SETUP
5955 #line 2662 "pre.l"
5956 { g_defText += *preYYtext;
5957                                           g_defLitText+=preYYtext; 
5958                                           if (!g_insideComment)
5959                                           {
5960                                             BEGIN(SkipSingleQuote);
5961                                           }
5962                                         }
5963         YY_BREAK
5964 case 156:
5965 YY_RULE_SETUP
5966 #line 2669 "pre.l"
5967 { g_defText += preYYtext; g_defLitText+=preYYtext; }
5968         YY_BREAK
5969 case 157:
5970 YY_RULE_SETUP
5971 #line 2670 "pre.l"
5972 { g_defText += preYYtext; g_defLitText+=preYYtext; }
5973         YY_BREAK
5974 case 158:
5975 YY_RULE_SETUP
5976 #line 2671 "pre.l"
5977 {
5978                                           g_defText += *preYYtext; g_defLitText+=preYYtext; 
5979                                           BEGIN(DefineText);
5980                                         }
5981         YY_BREAK
5982 case 159:
5983 YY_RULE_SETUP
5984 #line 2675 "pre.l"
5985 {
5986                                           g_defText += preYYtext; g_defLitText+=preYYtext;
5987                                         }
5988         YY_BREAK
5989 case 160:
5990 YY_RULE_SETUP
5991 #line 2678 "pre.l"
5992 {
5993                                           g_defText += *preYYtext; g_defLitText+=preYYtext;
5994                                           BEGIN(DefineText);
5995                                         }
5996         YY_BREAK
5997 case 161:
5998 YY_RULE_SETUP
5999 #line 2682 "pre.l"
6000 { g_defText += *preYYtext; g_defLitText+=preYYtext; }
6001         YY_BREAK
6002 case 162:
6003 YY_RULE_SETUP
6004 #line 2683 "pre.l"
6005 { g_defText += *preYYtext; g_defLitText+=preYYtext; }
6006         YY_BREAK
6007 case 163:
6008 YY_RULE_SETUP
6009 #line 2684 "pre.l"
6010 { g_defText += *preYYtext; g_defLitText+=preYYtext; }
6011         YY_BREAK
6012 case YY_STATE_EOF(INITIAL):
6013 case YY_STATE_EOF(Start):
6014 case YY_STATE_EOF(Command):
6015 case YY_STATE_EOF(SkipCommand):
6016 case YY_STATE_EOF(SkipLine):
6017 case YY_STATE_EOF(SkipString):
6018 case YY_STATE_EOF(CopyLine):
6019 case YY_STATE_EOF(CopyString):
6020 case YY_STATE_EOF(Include):
6021 case YY_STATE_EOF(IncludeID):
6022 case YY_STATE_EOF(EndImport):
6023 case YY_STATE_EOF(DefName):
6024 case YY_STATE_EOF(DefineArg):
6025 case YY_STATE_EOF(DefineText):
6026 case YY_STATE_EOF(SkipCPPBlock):
6027 case YY_STATE_EOF(Ifdef):
6028 case YY_STATE_EOF(Ifndef):
6029 case YY_STATE_EOF(SkipCComment):
6030 case YY_STATE_EOF(CopyCComment):
6031 case YY_STATE_EOF(SkipVerbatim):
6032 case YY_STATE_EOF(SkipCPPComment):
6033 case YY_STATE_EOF(RemoveCComment):
6034 case YY_STATE_EOF(RemoveCPPComment):
6035 case YY_STATE_EOF(Guard):
6036 case YY_STATE_EOF(DefinedExpr1):
6037 case YY_STATE_EOF(DefinedExpr2):
6038 case YY_STATE_EOF(SkipDoubleQuote):
6039 case YY_STATE_EOF(SkipSingleQuote):
6040 case YY_STATE_EOF(UndefName):
6041 case YY_STATE_EOF(IgnoreLine):
6042 case YY_STATE_EOF(FindDefineArgs):
6043 case YY_STATE_EOF(ReadString):
6044 case YY_STATE_EOF(CondLine):
6045 #line 2685 "pre.l"
6046 {
6047                                           //fprintf(stderr,"End of include file\n");
6048                                           //printf("Include stack depth=%d\n",g_includeStack.count());
6049                                           if (g_includeStack.isEmpty())
6050                                           {
6051                                             //fprintf(stderr,"Terminating scanner!\n");
6052                                             yyterminate();
6053                                           }
6054                                           else
6055                                           {
6056                                             FileState *fs=g_includeStack.pop();
6057                                             //fileDefineCache->merge(g_yyFileName,fs->fileName);
6058                                             YY_BUFFER_STATE oldBuf = YY_CURRENT_BUFFER;
6059                                             preYY_switch_to_buffer(fs->bufState );
6060                                             preYY_delete_buffer(oldBuf );
6061                                             g_yyLineNr    = fs->lineNr;
6062                                             //preYYin = fs->oldYYin;
6063                                             g_inputBuf    = fs->oldFileBuf;
6064                                             g_inputBufPos = fs->oldFileBufPos;
6065                                             setFileName(fs->fileName);
6066                                             //fprintf(stderr,"######## FileName %s\n",g_yyFileName.data());
6067                                             
6068                                             // Deal with file changes due to 
6069                                             // #include's within { .. } blocks
6070                                             QCString lineStr(15+g_yyFileName.length());
6071                                             lineStr.sprintf("# %d \"%s\" 2",g_yyLineNr,g_yyFileName.data());
6072                                             outputArray(lineStr.data(),lineStr.length());
6073                                             
6074                                             delete fs; fs=0;
6075                                           }
6076                                         }
6077         YY_BREAK
6078 case 164:
6079 *yy_cp = (yy_hold_char); /* undo effects of setting up preYYtext */
6080 (yy_c_buf_p) = yy_cp = yy_bp + 2;
6081 YY_DO_BEFORE_ACTION; /* set up preYYtext again */
6082 #line 2717 "pre.l"
6083 case 165:
6084 YY_RULE_SETUP
6085 #line 2717 "pre.l"
6086 {
6087                                           outputArray(preYYtext,preYYleng);
6088                                           g_lastCContext=YY_START;
6089                                           g_commentCount=1;
6090                                           if (preYYleng==3) g_lastGuardName.resize(0); // reset guard in case the #define is documented!
6091                                           BEGIN(SkipCComment);
6092                                         }
6093         YY_BREAK
6094 case 166:
6095 YY_RULE_SETUP
6096 #line 2724 "pre.l"
6097 {
6098                                           outputArray(preYYtext,preYYleng);
6099                                           g_lastCPPContext=YY_START;
6100                                           if (preYYleng==3) g_lastGuardName.resize(0); // reset guard in case the #define is documented!
6101                                           BEGIN(SkipCPPComment);
6102                                         }
6103         YY_BREAK
6104 case 167:
6105 /* rule 167 can match eol */
6106 YY_RULE_SETUP
6107 #line 2730 "pre.l"
6108
6109                                           outputChar('\n');
6110                                           g_yyLineNr++; 
6111                                         }
6112         YY_BREAK
6113 case 168:
6114 YY_RULE_SETUP
6115 #line 2734 "pre.l"
6116 {
6117                                           g_expectGuard = FALSE;
6118                                           outputChar(*preYYtext);
6119                                         }
6120         YY_BREAK
6121 case 169:
6122 YY_RULE_SETUP
6123 #line 2739 "pre.l"
6124 ECHO;
6125         YY_BREAK
6126 #line 6127 "<stdout>"
6127
6128         case YY_END_OF_BUFFER:
6129                 {
6130                 /* Amount of text matched not including the EOB char. */
6131                 int yy_amount_of_matched_text = (int) (yy_cp - (yytext_ptr)) - 1;
6132
6133                 /* Undo the effects of YY_DO_BEFORE_ACTION. */
6134                 *yy_cp = (yy_hold_char);
6135                 YY_RESTORE_YY_MORE_OFFSET
6136
6137                 if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_NEW )
6138                         {
6139                         /* We're scanning a new file or input source.  It's
6140                          * possible that this happened because the user
6141                          * just pointed preYYin at a new source and called
6142                          * preYYlex().  If so, then we have to assure
6143                          * consistency between YY_CURRENT_BUFFER and our
6144                          * globals.  Here is the right place to do so, because
6145                          * this is the first action (other than possibly a
6146                          * back-up) that will match for the new input source.
6147                          */
6148                         (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars;
6149                         YY_CURRENT_BUFFER_LVALUE->yy_input_file = preYYin;
6150                         YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_NORMAL;
6151                         }
6152
6153                 /* Note that here we test for yy_c_buf_p "<=" to the position
6154                  * of the first EOB in the buffer, since yy_c_buf_p will
6155                  * already have been incremented past the NUL character
6156                  * (since all states make transitions on EOB to the
6157                  * end-of-buffer state).  Contrast this with the test
6158                  * in input().
6159                  */
6160                 if ( (yy_c_buf_p) <= &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] )
6161                         { /* This was really a NUL. */
6162                         yy_state_type yy_next_state;
6163
6164                         (yy_c_buf_p) = (yytext_ptr) + yy_amount_of_matched_text;
6165
6166                         yy_current_state = yy_get_previous_state(  );
6167
6168                         /* Okay, we're now positioned to make the NUL
6169                          * transition.  We couldn't have
6170                          * yy_get_previous_state() go ahead and do it
6171                          * for us because it doesn't know how to deal
6172                          * with the possibility of jamming (and we don't
6173                          * want to build jamming into it because then it
6174                          * will run more slowly).
6175                          */
6176
6177                         yy_next_state = yy_try_NUL_trans( yy_current_state );
6178
6179                         yy_bp = (yytext_ptr) + YY_MORE_ADJ;
6180
6181                         if ( yy_next_state )
6182                                 {
6183                                 /* Consume the NUL. */
6184                                 yy_cp = ++(yy_c_buf_p);
6185                                 yy_current_state = yy_next_state;
6186                                 goto yy_match;
6187                                 }
6188
6189                         else
6190                                 {
6191                                 yy_cp = (yy_c_buf_p);
6192                                 goto yy_find_action;
6193                                 }
6194                         }
6195
6196                 else switch ( yy_get_next_buffer(  ) )
6197                         {
6198                         case EOB_ACT_END_OF_FILE:
6199                                 {
6200                                 (yy_did_buffer_switch_on_eof) = 0;
6201
6202                                 if ( preYYwrap( ) )
6203                                         {
6204                                         /* Note: because we've taken care in
6205                                          * yy_get_next_buffer() to have set up
6206                                          * preYYtext, we can now set up
6207                                          * yy_c_buf_p so that if some total
6208                                          * hoser (like flex itself) wants to
6209                                          * call the scanner after we return the
6210                                          * YY_NULL, it'll still work - another
6211                                          * YY_NULL will get returned.
6212                                          */
6213                                         (yy_c_buf_p) = (yytext_ptr) + YY_MORE_ADJ;
6214
6215                                         yy_act = YY_STATE_EOF(YY_START);
6216                                         goto do_action;
6217                                         }
6218
6219                                 else
6220                                         {
6221                                         if ( ! (yy_did_buffer_switch_on_eof) )
6222                                                 YY_NEW_FILE;
6223                                         }
6224                                 break;
6225                                 }
6226
6227                         case EOB_ACT_CONTINUE_SCAN:
6228                                 (yy_c_buf_p) =
6229                                         (yytext_ptr) + yy_amount_of_matched_text;
6230
6231                                 yy_current_state = yy_get_previous_state(  );
6232
6233                                 yy_cp = (yy_c_buf_p);
6234                                 yy_bp = (yytext_ptr) + YY_MORE_ADJ;
6235                                 goto yy_match;
6236
6237                         case EOB_ACT_LAST_MATCH:
6238                                 (yy_c_buf_p) =
6239                                 &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)];
6240
6241                                 yy_current_state = yy_get_previous_state(  );
6242
6243                                 yy_cp = (yy_c_buf_p);
6244                                 yy_bp = (yytext_ptr) + YY_MORE_ADJ;
6245                                 goto yy_find_action;
6246                         }
6247                 break;
6248                 }
6249
6250         default:
6251                 YY_FATAL_ERROR(
6252                         "fatal flex scanner internal error--no action found" );
6253         } /* end of action switch */
6254                 } /* end of scanning one token */
6255 } /* end of preYYlex */
6256
6257 /* yy_get_next_buffer - try to read in a new buffer
6258  *
6259  * Returns a code representing an action:
6260  *      EOB_ACT_LAST_MATCH -
6261  *      EOB_ACT_CONTINUE_SCAN - continue scanning from current position
6262  *      EOB_ACT_END_OF_FILE - end of file
6263  */
6264 static int yy_get_next_buffer (void)
6265 {
6266         register char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf;
6267         register char *source = (yytext_ptr);
6268         register int number_to_move, i;
6269         int ret_val;
6270
6271         if ( (yy_c_buf_p) > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] )
6272                 YY_FATAL_ERROR(
6273                 "fatal flex scanner internal error--end of buffer missed" );
6274
6275         if ( YY_CURRENT_BUFFER_LVALUE->yy_fill_buffer == 0 )
6276                 { /* Don't try to fill the buffer, so this is an EOF. */
6277                 if ( (yy_c_buf_p) - (yytext_ptr) - YY_MORE_ADJ == 1 )
6278                         {
6279                         /* We matched a single character, the EOB, so
6280                          * treat this as a final EOF.
6281                          */
6282                         return EOB_ACT_END_OF_FILE;
6283                         }
6284
6285                 else
6286                         {
6287                         /* We matched some text prior to the EOB, first
6288                          * process it.
6289                          */
6290                         return EOB_ACT_LAST_MATCH;
6291                         }
6292                 }
6293
6294         /* Try to read more data. */
6295
6296         /* First move last chars to start of buffer. */
6297         number_to_move = (int) ((yy_c_buf_p) - (yytext_ptr)) - 1;
6298
6299         for ( i = 0; i < number_to_move; ++i )
6300                 *(dest++) = *(source++);
6301
6302         if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_EOF_PENDING )
6303                 /* don't do the read, it's not guaranteed to return an EOF,
6304                  * just force an EOF
6305                  */
6306                 YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars) = 0;
6307
6308         else
6309                 {
6310                         yy_size_t num_to_read =
6311                         YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1;
6312
6313                 while ( num_to_read <= 0 )
6314                         { /* Not enough room in the buffer - grow it. */
6315
6316                         YY_FATAL_ERROR(
6317 "input buffer overflow, can't enlarge buffer because scanner uses REJECT" );
6318
6319                         }
6320
6321                 if ( num_to_read > YY_READ_BUF_SIZE )
6322                         num_to_read = YY_READ_BUF_SIZE;
6323
6324                 /* Read in more data. */
6325                 YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]),
6326                         (yy_n_chars), num_to_read );
6327
6328                 YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
6329                 }
6330
6331         if ( (yy_n_chars) == 0 )
6332                 {
6333                 if ( number_to_move == YY_MORE_ADJ )
6334                         {
6335                         ret_val = EOB_ACT_END_OF_FILE;
6336                         preYYrestart(preYYin  );
6337                         }
6338
6339                 else
6340                         {
6341                         ret_val = EOB_ACT_LAST_MATCH;
6342                         YY_CURRENT_BUFFER_LVALUE->yy_buffer_status =
6343                                 YY_BUFFER_EOF_PENDING;
6344                         }
6345                 }
6346
6347         else
6348                 ret_val = EOB_ACT_CONTINUE_SCAN;
6349
6350         if ((yy_size_t) ((yy_n_chars) + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) {
6351                 /* Extend the array by 50%, plus the number we really need. */
6352                 yy_size_t new_size = (yy_n_chars) + number_to_move + ((yy_n_chars) >> 1);
6353                 YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) preYYrealloc((void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf,new_size  );
6354                 if ( ! YY_CURRENT_BUFFER_LVALUE->yy_ch_buf )
6355                         YY_FATAL_ERROR( "out of dynamic memory in yy_get_next_buffer()" );
6356         }
6357
6358         (yy_n_chars) += number_to_move;
6359         YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] = YY_END_OF_BUFFER_CHAR;
6360         YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] = YY_END_OF_BUFFER_CHAR;
6361
6362         (yytext_ptr) = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[0];
6363
6364         return ret_val;
6365 }
6366
6367 /* yy_get_previous_state - get the state just before the EOB char was reached */
6368
6369     static yy_state_type yy_get_previous_state (void)
6370 {
6371         register yy_state_type yy_current_state;
6372         register char *yy_cp;
6373     
6374         yy_current_state = (yy_start);
6375         yy_current_state += YY_AT_BOL();
6376
6377         (yy_state_ptr) = (yy_state_buf);
6378         *(yy_state_ptr)++ = yy_current_state;
6379
6380         for ( yy_cp = (yytext_ptr) + YY_MORE_ADJ; yy_cp < (yy_c_buf_p); ++yy_cp )
6381                 {
6382                 register YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 57);
6383                 while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
6384                         {
6385                         yy_current_state = (int) yy_def[yy_current_state];
6386                         if ( yy_current_state >= 1172 )
6387                                 yy_c = yy_meta[(unsigned int) yy_c];
6388                         }
6389                 yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
6390                 *(yy_state_ptr)++ = yy_current_state;
6391                 }
6392
6393         return yy_current_state;
6394 }
6395
6396 /* yy_try_NUL_trans - try to make a transition on the NUL character
6397  *
6398  * synopsis
6399  *      next_state = yy_try_NUL_trans( current_state );
6400  */
6401     static yy_state_type yy_try_NUL_trans  (yy_state_type yy_current_state )
6402 {
6403         register int yy_is_jam;
6404     
6405         register YY_CHAR yy_c = 57;
6406         while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
6407                 {
6408                 yy_current_state = (int) yy_def[yy_current_state];
6409                 if ( yy_current_state >= 1172 )
6410                         yy_c = yy_meta[(unsigned int) yy_c];
6411                 }
6412         yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
6413         yy_is_jam = (yy_current_state == 1171);
6414         if ( ! yy_is_jam )
6415                 *(yy_state_ptr)++ = yy_current_state;
6416
6417         return yy_is_jam ? 0 : yy_current_state;
6418 }
6419
6420     static void yyunput (int c, register char * yy_bp )
6421 {
6422         register char *yy_cp;
6423     
6424     yy_cp = (yy_c_buf_p);
6425
6426         /* undo effects of setting up preYYtext */
6427         *yy_cp = (yy_hold_char);
6428
6429         if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 )
6430                 { /* need to shift things up to make room */
6431                 /* +2 for EOB chars. */
6432                 register yy_size_t number_to_move = (yy_n_chars) + 2;
6433                 register char *dest = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[
6434                                         YY_CURRENT_BUFFER_LVALUE->yy_buf_size + 2];
6435                 register char *source =
6436                                 &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move];
6437
6438                 while ( source > YY_CURRENT_BUFFER_LVALUE->yy_ch_buf )
6439                         *--dest = *--source;
6440
6441                 yy_cp += (int) (dest - source);
6442                 yy_bp += (int) (dest - source);
6443                 YY_CURRENT_BUFFER_LVALUE->yy_n_chars =
6444                         (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_buf_size;
6445
6446                 if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 )
6447                         YY_FATAL_ERROR( "flex scanner push-back overflow" );
6448                 }
6449
6450         *--yy_cp = (char) c;
6451
6452         (yytext_ptr) = yy_bp;
6453         (yy_hold_char) = *yy_cp;
6454         (yy_c_buf_p) = yy_cp;
6455 }
6456
6457 #ifndef YY_NO_INPUT
6458 #ifdef __cplusplus
6459     static int yyinput (void)
6460 #else
6461     static int input  (void)
6462 #endif
6463
6464 {
6465         int c;
6466     
6467         *(yy_c_buf_p) = (yy_hold_char);
6468
6469         if ( *(yy_c_buf_p) == YY_END_OF_BUFFER_CHAR )
6470                 {
6471                 /* yy_c_buf_p now points to the character we want to return.
6472                  * If this occurs *before* the EOB characters, then it's a
6473                  * valid NUL; if not, then we've hit the end of the buffer.
6474                  */
6475                 if ( (yy_c_buf_p) < &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] )
6476                         /* This was really a NUL. */
6477                         *(yy_c_buf_p) = '\0';
6478
6479                 else
6480                         { /* need more input */
6481                         yy_size_t offset = (yy_c_buf_p) - (yytext_ptr);
6482                         ++(yy_c_buf_p);
6483
6484                         switch ( yy_get_next_buffer(  ) )
6485                                 {
6486                                 case EOB_ACT_LAST_MATCH:
6487                                         /* This happens because yy_g_n_b()
6488                                          * sees that we've accumulated a
6489                                          * token and flags that we need to
6490                                          * try matching the token before
6491                                          * proceeding.  But for input(),
6492                                          * there's no matching to consider.
6493                                          * So convert the EOB_ACT_LAST_MATCH
6494                                          * to EOB_ACT_END_OF_FILE.
6495                                          */
6496
6497                                         /* Reset buffer status. */
6498                                         preYYrestart(preYYin );
6499
6500                                         /*FALLTHROUGH*/
6501
6502                                 case EOB_ACT_END_OF_FILE:
6503                                         {
6504                                         if ( preYYwrap( ) )
6505                                                 return 0;
6506
6507                                         if ( ! (yy_did_buffer_switch_on_eof) )
6508                                                 YY_NEW_FILE;
6509 #ifdef __cplusplus
6510                                         return yyinput();
6511 #else
6512                                         return input();
6513 #endif
6514                                         }
6515
6516                                 case EOB_ACT_CONTINUE_SCAN:
6517                                         (yy_c_buf_p) = (yytext_ptr) + offset;
6518                                         break;
6519                                 }
6520                         }
6521                 }
6522
6523         c = *(unsigned char *) (yy_c_buf_p);    /* cast for 8-bit char's */
6524         *(yy_c_buf_p) = '\0';   /* preserve preYYtext */
6525         (yy_hold_char) = *++(yy_c_buf_p);
6526
6527         YY_CURRENT_BUFFER_LVALUE->yy_at_bol = (c == '\n');
6528
6529         return c;
6530 }
6531 #endif  /* ifndef YY_NO_INPUT */
6532
6533 /** Immediately switch to a different input stream.
6534  * @param input_file A readable stream.
6535  * 
6536  * @note This function does not reset the start condition to @c INITIAL .
6537  */
6538     void preYYrestart  (FILE * input_file )
6539 {
6540     
6541         if ( ! YY_CURRENT_BUFFER ){
6542         preYYensure_buffer_stack ();
6543                 YY_CURRENT_BUFFER_LVALUE =
6544             preYY_create_buffer(preYYin,YY_BUF_SIZE );
6545         }
6546
6547         preYY_init_buffer(YY_CURRENT_BUFFER,input_file );
6548         preYY_load_buffer_state( );
6549 }
6550
6551 /** Switch to a different input buffer.
6552  * @param new_buffer The new input buffer.
6553  * 
6554  */
6555     void preYY_switch_to_buffer  (YY_BUFFER_STATE  new_buffer )
6556 {
6557     
6558         /* TODO. We should be able to replace this entire function body
6559          * with
6560          *              preYYpop_buffer_state();
6561          *              preYYpush_buffer_state(new_buffer);
6562      */
6563         preYYensure_buffer_stack ();
6564         if ( YY_CURRENT_BUFFER == new_buffer )
6565                 return;
6566
6567         if ( YY_CURRENT_BUFFER )
6568                 {
6569                 /* Flush out information for old buffer. */
6570                 *(yy_c_buf_p) = (yy_hold_char);
6571                 YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p);
6572                 YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
6573                 }
6574
6575         YY_CURRENT_BUFFER_LVALUE = new_buffer;
6576         preYY_load_buffer_state( );
6577
6578         /* We don't actually know whether we did this switch during
6579          * EOF (preYYwrap()) processing, but the only time this flag
6580          * is looked at is after preYYwrap() is called, so it's safe
6581          * to go ahead and always set it.
6582          */
6583         (yy_did_buffer_switch_on_eof) = 1;
6584 }
6585
6586 static void preYY_load_buffer_state  (void)
6587 {
6588         (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars;
6589         (yytext_ptr) = (yy_c_buf_p) = YY_CURRENT_BUFFER_LVALUE->yy_buf_pos;
6590         preYYin = YY_CURRENT_BUFFER_LVALUE->yy_input_file;
6591         (yy_hold_char) = *(yy_c_buf_p);
6592 }
6593
6594 /** Allocate and initialize an input buffer state.
6595  * @param file A readable stream.
6596  * @param size The character buffer size in bytes. When in doubt, use @c YY_BUF_SIZE.
6597  * 
6598  * @return the allocated buffer state.
6599  */
6600     YY_BUFFER_STATE preYY_create_buffer  (FILE * file, int  size )
6601 {
6602         YY_BUFFER_STATE b;
6603     
6604         b = (YY_BUFFER_STATE) preYYalloc(sizeof( struct yy_buffer_state )  );
6605         if ( ! b )
6606                 YY_FATAL_ERROR( "out of dynamic memory in preYY_create_buffer()" );
6607
6608         b->yy_buf_size = size;
6609
6610         /* yy_ch_buf has to be 2 characters longer than the size given because
6611          * we need to put in 2 end-of-buffer characters.
6612          */
6613         b->yy_ch_buf = (char *) preYYalloc(b->yy_buf_size + 2  );
6614         if ( ! b->yy_ch_buf )
6615                 YY_FATAL_ERROR( "out of dynamic memory in preYY_create_buffer()" );
6616
6617         b->yy_is_our_buffer = 1;
6618
6619         preYY_init_buffer(b,file );
6620
6621         return b;
6622 }
6623
6624 /** Destroy the buffer.
6625  * @param b a buffer created with preYY_create_buffer()
6626  * 
6627  */
6628     void preYY_delete_buffer (YY_BUFFER_STATE  b )
6629 {
6630     
6631         if ( ! b )
6632                 return;
6633
6634         if ( b == YY_CURRENT_BUFFER ) /* Not sure if we should pop here. */
6635                 YY_CURRENT_BUFFER_LVALUE = (YY_BUFFER_STATE) 0;
6636
6637         if ( b->yy_is_our_buffer )
6638                 preYYfree((void *) b->yy_ch_buf  );
6639
6640         preYYfree((void *) b  );
6641 }
6642
6643 #ifndef __cplusplus
6644 extern int isatty (int );
6645 #endif /* __cplusplus */
6646     
6647 /* Initializes or reinitializes a buffer.
6648  * This function is sometimes called more than once on the same buffer,
6649  * such as during a preYYrestart() or at EOF.
6650  */
6651     static void preYY_init_buffer  (YY_BUFFER_STATE  b, FILE * file )
6652
6653 {
6654         int oerrno = errno;
6655     
6656         preYY_flush_buffer(b );
6657
6658         b->yy_input_file = file;
6659         b->yy_fill_buffer = 1;
6660
6661     /* If b is the current buffer, then preYY_init_buffer was _probably_
6662      * called from preYYrestart() or through yy_get_next_buffer.
6663      * In that case, we don't want to reset the lineno or column.
6664      */
6665     if (b != YY_CURRENT_BUFFER){
6666         b->yy_bs_lineno = 1;
6667         b->yy_bs_column = 0;
6668     }
6669
6670         b->yy_is_interactive = file ? (isatty( fileno(file) ) > 0) : 0;
6671     
6672         errno = oerrno;
6673 }
6674
6675 /** Discard all buffered characters. On the next scan, YY_INPUT will be called.
6676  * @param b the buffer state to be flushed, usually @c YY_CURRENT_BUFFER.
6677  * 
6678  */
6679     void preYY_flush_buffer (YY_BUFFER_STATE  b )
6680 {
6681         if ( ! b )
6682                 return;
6683
6684         b->yy_n_chars = 0;
6685
6686         /* We always need two end-of-buffer characters.  The first causes
6687          * a transition to the end-of-buffer state.  The second causes
6688          * a jam in that state.
6689          */
6690         b->yy_ch_buf[0] = YY_END_OF_BUFFER_CHAR;
6691         b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR;
6692
6693         b->yy_buf_pos = &b->yy_ch_buf[0];
6694
6695         b->yy_at_bol = 1;
6696         b->yy_buffer_status = YY_BUFFER_NEW;
6697
6698         if ( b == YY_CURRENT_BUFFER )
6699                 preYY_load_buffer_state( );
6700 }
6701
6702 /** Pushes the new state onto the stack. The new state becomes
6703  *  the current state. This function will allocate the stack
6704  *  if necessary.
6705  *  @param new_buffer The new state.
6706  *  
6707  */
6708 void preYYpush_buffer_state (YY_BUFFER_STATE new_buffer )
6709 {
6710         if (new_buffer == NULL)
6711                 return;
6712
6713         preYYensure_buffer_stack();
6714
6715         /* This block is copied from preYY_switch_to_buffer. */
6716         if ( YY_CURRENT_BUFFER )
6717                 {
6718                 /* Flush out information for old buffer. */
6719                 *(yy_c_buf_p) = (yy_hold_char);
6720                 YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p);
6721                 YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
6722                 }
6723
6724         /* Only push if top exists. Otherwise, replace top. */
6725         if (YY_CURRENT_BUFFER)
6726                 (yy_buffer_stack_top)++;
6727         YY_CURRENT_BUFFER_LVALUE = new_buffer;
6728
6729         /* copied from preYY_switch_to_buffer. */
6730         preYY_load_buffer_state( );
6731         (yy_did_buffer_switch_on_eof) = 1;
6732 }
6733
6734 /** Removes and deletes the top of the stack, if present.
6735  *  The next element becomes the new top.
6736  *  
6737  */
6738 void preYYpop_buffer_state (void)
6739 {
6740         if (!YY_CURRENT_BUFFER)
6741                 return;
6742
6743         preYY_delete_buffer(YY_CURRENT_BUFFER );
6744         YY_CURRENT_BUFFER_LVALUE = NULL;
6745         if ((yy_buffer_stack_top) > 0)
6746                 --(yy_buffer_stack_top);
6747
6748         if (YY_CURRENT_BUFFER) {
6749                 preYY_load_buffer_state( );
6750                 (yy_did_buffer_switch_on_eof) = 1;
6751         }
6752 }
6753
6754 /* Allocates the stack if it does not exist.
6755  *  Guarantees space for at least one push.
6756  */
6757 static void preYYensure_buffer_stack (void)
6758 {
6759         yy_size_t num_to_alloc;
6760     
6761         if (!(yy_buffer_stack)) {
6762
6763                 /* First allocation is just for 2 elements, since we don't know if this
6764                  * scanner will even need a stack. We use 2 instead of 1 to avoid an
6765                  * immediate realloc on the next call.
6766          */
6767                 num_to_alloc = 1;
6768                 (yy_buffer_stack) = (struct yy_buffer_state**)preYYalloc
6769                                                                 (num_to_alloc * sizeof(struct yy_buffer_state*)
6770                                                                 );
6771                 if ( ! (yy_buffer_stack) )
6772                         YY_FATAL_ERROR( "out of dynamic memory in preYYensure_buffer_stack()" );
6773                                                                   
6774                 memset((yy_buffer_stack), 0, num_to_alloc * sizeof(struct yy_buffer_state*));
6775                                 
6776                 (yy_buffer_stack_max) = num_to_alloc;
6777                 (yy_buffer_stack_top) = 0;
6778                 return;
6779         }
6780
6781         if ((yy_buffer_stack_top) >= ((yy_buffer_stack_max)) - 1){
6782
6783                 /* Increase the buffer to prepare for a possible push. */
6784                 int grow_size = 8 /* arbitrary grow size */;
6785
6786                 num_to_alloc = (yy_buffer_stack_max) + grow_size;
6787                 (yy_buffer_stack) = (struct yy_buffer_state**)preYYrealloc
6788                                                                 ((yy_buffer_stack),
6789                                                                 num_to_alloc * sizeof(struct yy_buffer_state*)
6790                                                                 );
6791                 if ( ! (yy_buffer_stack) )
6792                         YY_FATAL_ERROR( "out of dynamic memory in preYYensure_buffer_stack()" );
6793
6794                 /* zero only the new slots.*/
6795                 memset((yy_buffer_stack) + (yy_buffer_stack_max), 0, grow_size * sizeof(struct yy_buffer_state*));
6796                 (yy_buffer_stack_max) = num_to_alloc;
6797         }
6798 }
6799
6800 /** Setup the input buffer state to scan directly from a user-specified character buffer.
6801  * @param base the character buffer
6802  * @param size the size in bytes of the character buffer
6803  * 
6804  * @return the newly allocated buffer state object. 
6805  */
6806 YY_BUFFER_STATE preYY_scan_buffer  (char * base, yy_size_t  size )
6807 {
6808         YY_BUFFER_STATE b;
6809     
6810         if ( size < 2 ||
6811              base[size-2] != YY_END_OF_BUFFER_CHAR ||
6812              base[size-1] != YY_END_OF_BUFFER_CHAR )
6813                 /* They forgot to leave room for the EOB's. */
6814                 return 0;
6815
6816         b = (YY_BUFFER_STATE) preYYalloc(sizeof( struct yy_buffer_state )  );
6817         if ( ! b )
6818                 YY_FATAL_ERROR( "out of dynamic memory in preYY_scan_buffer()" );
6819
6820         b->yy_buf_size = size - 2;      /* "- 2" to take care of EOB's */
6821         b->yy_buf_pos = b->yy_ch_buf = base;
6822         b->yy_is_our_buffer = 0;
6823         b->yy_input_file = 0;
6824         b->yy_n_chars = b->yy_buf_size;
6825         b->yy_is_interactive = 0;
6826         b->yy_at_bol = 1;
6827         b->yy_fill_buffer = 0;
6828         b->yy_buffer_status = YY_BUFFER_NEW;
6829
6830         preYY_switch_to_buffer(b  );
6831
6832         return b;
6833 }
6834
6835 /** Setup the input buffer state to scan a string. The next call to preYYlex() will
6836  * scan from a @e copy of @a str.
6837  * @param yystr a NUL-terminated string to scan
6838  * 
6839  * @return the newly allocated buffer state object.
6840  * @note If you want to scan bytes that may contain NUL values, then use
6841  *       preYY_scan_bytes() instead.
6842  */
6843 YY_BUFFER_STATE preYY_scan_string (yyconst char * yystr )
6844 {
6845     
6846         return preYY_scan_bytes(yystr,strlen(yystr) );
6847 }
6848
6849 /** Setup the input buffer state to scan the given bytes. The next call to preYYlex() will
6850  * scan from a @e copy of @a bytes.
6851  * @param bytes the byte buffer to scan
6852  * @param len the number of bytes in the buffer pointed to by @a bytes.
6853  * 
6854  * @return the newly allocated buffer state object.
6855  */
6856 YY_BUFFER_STATE preYY_scan_bytes  (yyconst char * yybytes, yy_size_t  _yybytes_len )
6857 {
6858         YY_BUFFER_STATE b;
6859         char *buf;
6860         yy_size_t n, i;
6861     
6862         /* Get memory for full buffer, including space for trailing EOB's. */
6863         n = _yybytes_len + 2;
6864         buf = (char *) preYYalloc(n  );
6865         if ( ! buf )
6866                 YY_FATAL_ERROR( "out of dynamic memory in preYY_scan_bytes()" );
6867
6868         for ( i = 0; i < _yybytes_len; ++i )
6869                 buf[i] = yybytes[i];
6870
6871         buf[_yybytes_len] = buf[_yybytes_len+1] = YY_END_OF_BUFFER_CHAR;
6872
6873         b = preYY_scan_buffer(buf,n );
6874         if ( ! b )
6875                 YY_FATAL_ERROR( "bad buffer in preYY_scan_bytes()" );
6876
6877         /* It's okay to grow etc. this buffer, and we should throw it
6878          * away when we're done.
6879          */
6880         b->yy_is_our_buffer = 1;
6881
6882         return b;
6883 }
6884
6885 #ifndef YY_EXIT_FAILURE
6886 #define YY_EXIT_FAILURE 2
6887 #endif
6888
6889 static void yy_fatal_error (yyconst char* msg )
6890 {
6891         (void) fprintf( stderr, "%s\n", msg );
6892         exit( YY_EXIT_FAILURE );
6893 }
6894
6895 /* Redefine yyless() so it works in section 3 code. */
6896
6897 #undef yyless
6898 #define yyless(n) \
6899         do \
6900                 { \
6901                 /* Undo effects of setting up preYYtext. */ \
6902         int yyless_macro_arg = (n); \
6903         YY_LESS_LINENO(yyless_macro_arg);\
6904                 preYYtext[preYYleng] = (yy_hold_char); \
6905                 (yy_c_buf_p) = preYYtext + yyless_macro_arg; \
6906                 (yy_hold_char) = *(yy_c_buf_p); \
6907                 *(yy_c_buf_p) = '\0'; \
6908                 preYYleng = yyless_macro_arg; \
6909                 } \
6910         while ( 0 )
6911
6912 /* Accessor  methods (get/set functions) to struct members. */
6913
6914 /** Get the current line number.
6915  * 
6916  */
6917 int preYYget_lineno  (void)
6918 {
6919         
6920     return preYYlineno;
6921 }
6922
6923 /** Get the input stream.
6924  * 
6925  */
6926 FILE *preYYget_in  (void)
6927 {
6928         return preYYin;
6929 }
6930
6931 /** Get the output stream.
6932  * 
6933  */
6934 FILE *preYYget_out  (void)
6935 {
6936         return preYYout;
6937 }
6938
6939 /** Get the length of the current token.
6940  * 
6941  */
6942 yy_size_t preYYget_leng  (void)
6943 {
6944         return preYYleng;
6945 }
6946
6947 /** Get the current token.
6948  * 
6949  */
6950
6951 char *preYYget_text  (void)
6952 {
6953         return preYYtext;
6954 }
6955
6956 /** Set the current line number.
6957  * @param line_number
6958  * 
6959  */
6960 void preYYset_lineno (int  line_number )
6961 {
6962     
6963     preYYlineno = line_number;
6964 }
6965
6966 /** Set the input stream. This does not discard the current
6967  * input buffer.
6968  * @param in_str A readable stream.
6969  * 
6970  * @see preYY_switch_to_buffer
6971  */
6972 void preYYset_in (FILE *  in_str )
6973 {
6974         preYYin = in_str ;
6975 }
6976
6977 void preYYset_out (FILE *  out_str )
6978 {
6979         preYYout = out_str ;
6980 }
6981
6982 int preYYget_debug  (void)
6983 {
6984         return preYY_flex_debug;
6985 }
6986
6987 void preYYset_debug (int  bdebug )
6988 {
6989         preYY_flex_debug = bdebug ;
6990 }
6991
6992 static int yy_init_globals (void)
6993 {
6994         /* Initialization is the same as for the non-reentrant scanner.
6995      * This function is called from preYYlex_destroy(), so don't allocate here.
6996      */
6997
6998     (yy_buffer_stack) = 0;
6999     (yy_buffer_stack_top) = 0;
7000     (yy_buffer_stack_max) = 0;
7001     (yy_c_buf_p) = (char *) 0;
7002     (yy_init) = 0;
7003     (yy_start) = 0;
7004
7005     (yy_state_buf) = 0;
7006     (yy_state_ptr) = 0;
7007     (yy_full_match) = 0;
7008     (yy_lp) = 0;
7009
7010 /* Defined in main.c */
7011 #ifdef YY_STDINIT
7012     preYYin = stdin;
7013     preYYout = stdout;
7014 #else
7015     preYYin = (FILE *) 0;
7016     preYYout = (FILE *) 0;
7017 #endif
7018
7019     /* For future reference: Set errno on error, since we are called by
7020      * preYYlex_init()
7021      */
7022     return 0;
7023 }
7024
7025 /* preYYlex_destroy is for both reentrant and non-reentrant scanners. */
7026 int preYYlex_destroy  (void)
7027 {
7028     
7029     /* Pop the buffer stack, destroying each element. */
7030         while(YY_CURRENT_BUFFER){
7031                 preYY_delete_buffer(YY_CURRENT_BUFFER  );
7032                 YY_CURRENT_BUFFER_LVALUE = NULL;
7033                 preYYpop_buffer_state();
7034         }
7035
7036         /* Destroy the stack itself. */
7037         preYYfree((yy_buffer_stack) );
7038         (yy_buffer_stack) = NULL;
7039
7040     preYYfree ( (yy_state_buf) );
7041     (yy_state_buf)  = NULL;
7042
7043     /* Reset the globals. This is important in a non-reentrant scanner so the next time
7044      * preYYlex() is called, initialization will occur. */
7045     yy_init_globals( );
7046
7047     return 0;
7048 }
7049
7050 /*
7051  * Internal utility routines.
7052  */
7053
7054 #ifndef yytext_ptr
7055 static void yy_flex_strncpy (char* s1, yyconst char * s2, int n )
7056 {
7057         register int i;
7058         for ( i = 0; i < n; ++i )
7059                 s1[i] = s2[i];
7060 }
7061 #endif
7062
7063 #ifdef YY_NEED_STRLEN
7064 static int yy_flex_strlen (yyconst char * s )
7065 {
7066         register int n;
7067         for ( n = 0; s[n]; ++n )
7068                 ;
7069
7070         return n;
7071 }
7072 #endif
7073
7074 void *preYYalloc (yy_size_t  size )
7075 {
7076         return (void *) malloc( size );
7077 }
7078
7079 void *preYYrealloc  (void * ptr, yy_size_t  size )
7080 {
7081         /* The cast to (char *) in the following accommodates both
7082          * implementations that use char* generic pointers, and those
7083          * that use void* generic pointers.  It works with the latter
7084          * because both ANSI C and C++ allow castless assignment from
7085          * any pointer type to void*, and deal with argument conversions
7086          * as though doing an assignment.
7087          */
7088         return (void *) realloc( (char *) ptr, size );
7089 }
7090
7091 void preYYfree (void * ptr )
7092 {
7093         free( (char *) ptr );   /* see preYYrealloc() for (char *) cast */
7094 }
7095
7096 #define YYTABLES_NAME "yytables"
7097
7098 #line 2739 "pre.l"
7099
7100
7101
7102 /*@ ----------------------------------------------------------------------------
7103  */
7104
7105 static int getNextChar(const QCString &expr,QCString *rest,uint &pos)
7106 {
7107   //printf("getNextChar(%s,%s,%d)\n",expr.data(),rest ? rest->data() : 0,pos);
7108   if (pos<expr.length())
7109   {
7110     //printf("%c=expr()\n",expr.at(pos));
7111     return expr.at(pos++);
7112   }
7113   else if (rest && !rest->isEmpty())
7114   {
7115     int cc=rest->at(0);
7116     *rest=rest->right(rest->length()-1);
7117     //printf("%c=rest\n",cc);
7118     return cc;
7119   }
7120   else
7121   {
7122     int cc=yyinput();
7123     //printf("%c=yyinput()\n",cc);
7124     return cc;
7125   }
7126 }
7127  
7128 static int getCurrentChar(const QCString &expr,QCString *rest,uint pos)
7129 {
7130   //printf("getCurrentChar(%s,%s,%d)\n",expr.data(),rest ? rest->data() : 0,pos);
7131   if (pos<expr.length())
7132   {
7133     //printf("%c=expr()\n",expr.at(pos));
7134     return expr.at(pos);
7135   }
7136   else if (rest && !rest->isEmpty())
7137   {
7138     int cc=rest->at(0);
7139     //printf("%c=rest\n",cc);
7140     return cc;
7141   }
7142   else
7143   {
7144     int cc=yyinput();
7145     returnCharToStream(cc);
7146     //unput((char)cc);
7147     //printf("%c=yyinput()\n",cc);
7148     return cc;
7149   }
7150 }
7151
7152 static void unputChar(const QCString &expr,QCString *rest,uint &pos,char c)
7153 {
7154   //printf("unputChar(%s,%s,%d,%c)\n",expr.data(),rest ? rest->data() : 0,pos,c);
7155   if (pos<expr.length())
7156   {
7157     pos++;
7158   }
7159   else if (rest)
7160   {
7161     //printf("Prepending to rest!\n");
7162     char cs[2];cs[0]=c;cs[1]='\0';
7163     rest->prepend(cs);
7164   }
7165   else
7166   {
7167     //unput(c);
7168     returnCharToStream(c);
7169   }
7170   //printf("result: unputChar(%s,%s,%d,%c)\n",expr.data(),rest ? rest->data() : 0,pos,c);
7171 }
7172
7173 void addSearchDir(const char *dir)
7174 {
7175   QFileInfo fi(dir);
7176   if (fi.isDir()) g_pathList->append(fi.absFilePath().utf8());
7177
7178
7179 void initPreprocessor()
7180 {
7181   g_pathList = new QStrList;
7182   addSearchDir(".");
7183   g_expandedDict = new DefineDict(17);
7184 }
7185
7186 void cleanUpPreprocessor()
7187 {
7188   delete g_expandedDict; g_expandedDict=0;
7189   delete g_pathList; g_pathList=0;
7190   DefineManager::deleteInstance();
7191 }
7192
7193
7194 void preprocessFile(const char *fileName,BufStr &input,BufStr &output)
7195 {
7196   uint orgOffset=output.curPos();
7197   //printf("##########################\n%s\n####################\n",
7198   //    input.data());
7199
7200   g_macroExpansion = Config_getBool("MACRO_EXPANSION");
7201   g_expandOnlyPredef = Config_getBool("EXPAND_ONLY_PREDEF");
7202   g_curlyCount=0;
7203   g_nospaces=FALSE;
7204   g_inputBuf=&input;
7205   g_inputBufPos=0;
7206   g_outputBuf=&output;
7207   g_includeStack.setAutoDelete(TRUE);
7208   g_includeStack.clear();
7209   g_expandedDict->setAutoDelete(FALSE);
7210   g_expandedDict->clear();
7211   g_condStack.clear();
7212   g_condStack.setAutoDelete(TRUE);
7213   //g_fileDefineDict->clear();
7214
7215   setFileName(fileName);
7216   g_inputFileDef = g_yyFileDef;
7217   DefineManager::instance().startContext(g_yyFileName);
7218   
7219   static bool firstTime=TRUE;
7220   if (firstTime)
7221   {
7222     // add predefined macros
7223     char *defStr;
7224     QStrList &predefList = Config_getList("PREDEFINED");
7225     QStrListIterator sli(predefList);
7226     for (sli.toFirst();(defStr=sli.current());++sli)
7227     {
7228       QCString ds = defStr;
7229       int i_equals=ds.find('=');
7230       int i_obrace=ds.find('(');
7231       int i_cbrace=ds.find(')');
7232       bool nonRecursive = i_equals>0 && ds.at(i_equals-1)==':';
7233
7234       if (i_obrace==0) continue; // no define name
7235
7236       if (i_obrace<i_equals && i_cbrace<i_equals && 
7237           i_obrace!=-1      && i_cbrace!=-1      && 
7238           i_obrace<i_cbrace
7239          ) // predefined function macro definition
7240       {
7241         //printf("predefined function macro '%s'\n",defStr);
7242         QRegExp reId("[a-z_A-Z][a-z_A-Z0-9]*"); // regexp matching an id
7243         QDict<int> argDict(17);
7244         argDict.setAutoDelete(TRUE);
7245         int i=i_obrace+1,p,l,count=0;
7246         // gather the formal arguments in a dictionary 
7247         while (i<i_cbrace && (p=reId.match(ds,i,&l)))
7248         {
7249           argDict.insert(ds.mid(p,l),new int(count++));
7250           i=p+l;
7251         }
7252         // strip definition part
7253         QCString tmp=ds.right(ds.length()-i_equals-1);
7254         QCString definition;
7255         i=0;
7256         // substitute all occurrences of formal arguments by their 
7257         // corresponding markers
7258         while ((p=reId.match(tmp,i,&l))!=-1)
7259         {
7260           if (p>i) definition+=tmp.mid(i,p-i);
7261           int *argIndex;
7262           if ((argIndex=argDict[tmp.mid(p,l)])!=0)
7263           {
7264             QCString marker;
7265             marker.sprintf(" @%d ",*argIndex);
7266             definition+=marker;
7267           }
7268           else
7269           {
7270             definition+=tmp.mid(p,l);
7271           }
7272           i=p+l;
7273         }
7274         if (i<(int)tmp.length()) definition+=tmp.mid(i,tmp.length()-i);
7275
7276         // add define definition to the dictionary of defines for this file
7277         QCString dname = ds.left(i_obrace);
7278         if (!dname.isEmpty())
7279         {
7280           Define *def = new Define;
7281           def->name         = dname;
7282           def->definition   = definition; 
7283           def->nargs        = count;
7284           def->isPredefined = TRUE;
7285           def->nonRecursive = nonRecursive;
7286           def->fileDef      = g_yyFileDef;
7287           def->fileName     = fileName;
7288           DefineManager::instance().addDefine(g_yyFileName,def);
7289         }
7290
7291         //printf("#define `%s' `%s' #nargs=%d\n",
7292         //  def->name.data(),def->definition.data(),def->nargs);
7293       }
7294       else if ((i_obrace==-1 || i_obrace>i_equals) &&
7295           (i_cbrace==-1 || i_cbrace>i_equals) &&
7296           !ds.isEmpty() && (int)ds.length()>i_equals
7297           ) // predefined non-function macro definition
7298       {
7299         //printf("predefined normal macro '%s'\n",defStr);
7300         Define *def = new Define;
7301         if (i_equals==-1) // simple define without argument
7302         {
7303           def->name = ds;
7304           def->definition = "1"; // substitute occurrences by 1 (true)
7305         }
7306         else // simple define with argument
7307         {
7308           int ine=i_equals - (nonRecursive ? 1 : 0);
7309           def->name = ds.left(ine);
7310           def->definition = ds.right(ds.length()-i_equals-1);
7311         }
7312         if (!def->name.isEmpty())
7313         {
7314           def->nargs = -1;
7315           def->isPredefined = TRUE;
7316           def->nonRecursive = nonRecursive;
7317           def->fileDef      = g_yyFileDef;
7318           def->fileName     = fileName;
7319           DefineManager::instance().addDefine(g_yyFileName,def);
7320         }
7321         else
7322         {
7323           delete def;
7324         }
7325
7326         //printf("#define `%s' `%s' #nargs=%d\n",
7327         //  def->name.data(),def->definition.data(),def->nargs);
7328       }
7329     }
7330     //firstTime=FALSE;
7331   }
7332  
7333   g_yyLineNr = 1;
7334   g_level    = 0;
7335   g_ifcount  = 0;
7336
7337   BEGIN( Start );
7338   
7339   g_expectGuard = guessSection(fileName)==Entry::HEADER_SEC;
7340   g_guardName.resize(0);
7341   g_lastGuardName.resize(0);
7342   g_guardExpr.resize(0);
7343   
7344   preYYlex();
7345   g_lexInit=TRUE;
7346
7347   // make sure we don't extend a \cond with missing \endcond over multiple files (see bug 624829)
7348   forceEndCondSection();
7349
7350   // remove locally defined macros so they can be redefined in another source file
7351   //if (g_fileDefineDict->count()>0)
7352   //{
7353   //  QDictIterator<Define> di(*g_fileDefineDict);
7354   //  Define *d;
7355   //  for (di.toFirst();(d=di.current());++di)
7356   //  {
7357   //    g_globalDefineDict->remove(di.currentKey());
7358   //  }
7359   //  g_fileDefineDict->clear();
7360   //}
7361
7362   if (Debug::isFlagSet(Debug::Preprocessor))
7363   {
7364     char *orgPos=output.data()+orgOffset;
7365     char *newPos=output.data()+output.curPos();
7366     Debug::print(Debug::Preprocessor,0,"Preprocessor output (size: %d bytes):\n",newPos-orgPos);
7367     int line=1;
7368     Debug::print(Debug::Preprocessor,0,"---------\n00001 ");
7369     while (orgPos<newPos) 
7370     {
7371       putchar(*orgPos);
7372       if (*orgPos=='\n') Debug::print(Debug::Preprocessor,0,"%05d ",++line);
7373       orgPos++;
7374     }
7375     Debug::print(Debug::Preprocessor,0,"\n---------\n");
7376     if (DefineManager::instance().defineContext().count()>0)
7377     {
7378       Debug::print(Debug::Preprocessor,0,"Macros accessible in this file:\n");
7379       Debug::print(Debug::Preprocessor,0,"---------\n");
7380       QDictIterator<Define> di(DefineManager::instance().defineContext());
7381       Define *def;
7382       for (di.toFirst();(def=di.current());++di)
7383       {
7384         Debug::print(Debug::Preprocessor,0,"%s ",def->name.data());
7385       }
7386       Debug::print(Debug::Preprocessor,0,"\n---------\n");
7387     }
7388     else
7389     {
7390       Debug::print(Debug::Preprocessor,0,"No macros accessible in this file.\n");
7391     }
7392   }
7393   DefineManager::instance().endContext();
7394 }
7395
7396 void preFreeScanner()
7397 {
7398 #if defined(YY_FLEX_SUBMINOR_VERSION) 
7399   if (g_lexInit)
7400   {
7401     preYYlex_destroy();
7402   }
7403 #endif
7404 }
7405
7406 #if !defined(YY_FLEX_SUBMINOR_VERSION) 
7407 extern "C" { // some bogus code to keep the compiler happy
7408 //  int  preYYwrap() { return 1 ; }
7409   void preYYdummy() { yy_flex_realloc(0,0); } 
7410 }
7411 #endif
7412
7413