OSDN Git Service

upgrade to 3.6.2
[jnethack/source.git] / sys / share / lev_yacc.c
1 #ifndef lint
2 /* static char yysccsid[] = "@(#)yaccpar        1.9 (Berkeley) 02/21/93"; */
3 /* static char nhsccsid[] = "@(#)yaccpar   1.9.0-nh (NetHack) 12/03/2015"; */
4 #endif
5 #define YYBYACC 1
6 #define YYMAJOR 1
7 #define YYMINOR 9
8 #define YYSUBMINOR "0-nh"
9
10 #define yyclearin (yychar=(-1))
11 #define yyerrok (yyerrflag=0)
12 #define YYRECOVERING (yyerrflag!=0)
13 #define YYPREFIX "yy"
14 /* NetHack 3.6  lev_comp.y      $NHDT-Date: 1551901401 2019/03/06 19:43:21 $  $NHDT-Branch: NetHack-3.6.2-beta01 $:$NHDT-Revision: 1.26 $ */
15 /*      Copyright (c) 1989 by Jean-Christophe Collet */
16 /* NetHack may be freely redistributed.  See license for details. */
17
18 /*
19  * This file contains the Level Compiler code
20  * It may handle special mazes & special room-levels
21  */
22
23 /* In case we're using bison in AIX.  This definition must be
24  * placed before any other C-language construct in the file
25  * excluding comments and preprocessor directives (thanks IBM
26  * for this wonderful feature...).
27  *
28  * Note: some cpps barf on this 'undefined control' (#pragma).
29  * Addition of the leading space seems to prevent barfage for now,
30  * and AIX will still see the directive.
31  */
32 #ifdef _AIX
33  #pragma alloca         /* keep leading space! */
34 #endif
35
36 #define SPEC_LEV    /* for USE_OLDARGS (sp_lev.h) */
37 #include "hack.h"
38 #include "sp_lev.h"
39
40 #define ERR             (-1)
41 /* many types of things are put in chars for transference to NetHack.
42  * since some systems will use signed chars, limit everybody to the
43  * same number for portability.
44  */
45 #define MAX_OF_TYPE     128
46
47 #define MAX_NESTED_IFS   20
48 #define MAX_SWITCH_CASES 20
49
50 #define New(type) \
51         (type *) memset((genericptr_t) alloc(sizeof (type)), 0, sizeof (type))
52 #define NewTab(type, size)      (type **) alloc(sizeof (type *) * size)
53 #define Free(ptr)               free((genericptr_t) ptr)
54
55 extern void VDECL(lc_error, (const char *, ...));
56 extern void VDECL(lc_warning, (const char *, ...));
57 extern void FDECL(yyerror, (const char *));
58 extern void FDECL(yywarning, (const char *));
59 extern int NDECL(yylex);
60 int NDECL(yyparse);
61
62 extern int FDECL(get_floor_type, (CHAR_P));
63 extern int FDECL(get_room_type, (char *));
64 extern int FDECL(get_trap_type, (char *));
65 extern int FDECL(get_monster_id, (char *,CHAR_P));
66 extern int FDECL(get_object_id, (char *,CHAR_P));
67 extern boolean FDECL(check_monster_char, (CHAR_P));
68 extern boolean FDECL(check_object_char, (CHAR_P));
69 extern char FDECL(what_map_char, (CHAR_P));
70 extern void FDECL(scan_map, (char *, sp_lev *));
71 extern void FDECL(add_opcode, (sp_lev *, int, genericptr_t));
72 extern genericptr_t FDECL(get_last_opcode_data1, (sp_lev *, int));
73 extern genericptr_t FDECL(get_last_opcode_data2, (sp_lev *, int, int));
74 extern boolean FDECL(check_subrooms, (sp_lev *));
75 extern boolean FDECL(write_level_file, (char *,sp_lev *));
76 extern struct opvar *FDECL(set_opvar_int, (struct opvar *, long));
77 extern void VDECL(add_opvars, (sp_lev *, const char *, ...));
78 extern void FDECL(start_level_def, (sp_lev * *, char *));
79
80 extern struct lc_funcdefs *FDECL(funcdef_new, (long,char *));
81 extern void FDECL(funcdef_free_all, (struct lc_funcdefs *));
82 extern struct lc_funcdefs *FDECL(funcdef_defined, (struct lc_funcdefs *,
83                                                    char *, int));
84 extern char *FDECL(funcdef_paramtypes, (struct lc_funcdefs *));
85 extern char *FDECL(decode_parm_str, (char *));
86
87 extern struct lc_vardefs *FDECL(vardef_new, (long,char *));
88 extern void FDECL(vardef_free_all, (struct lc_vardefs *));
89 extern struct lc_vardefs *FDECL(vardef_defined, (struct lc_vardefs *,
90                                                  char *, int));
91
92 extern void NDECL(break_stmt_start);
93 extern void FDECL(break_stmt_end, (sp_lev *));
94 extern void FDECL(break_stmt_new, (sp_lev *, long));
95
96 extern void FDECL(splev_add_from, (sp_lev *, sp_lev *));
97
98 extern void FDECL(check_vardef_type, (struct lc_vardefs *, char *, long));
99 extern void FDECL(vardef_used, (struct lc_vardefs *, char *));
100 extern struct lc_vardefs *FDECL(add_vardef_type, (struct lc_vardefs *,
101                                                   char *, long));
102
103 extern int FDECL(reverse_jmp_opcode, (int));
104
105 struct coord {
106     long x;
107     long y;
108 };
109
110 struct forloopdef {
111     char *varname;
112     long jmp_point;
113 };
114 static struct forloopdef forloop_list[MAX_NESTED_IFS];
115 static short n_forloops = 0;
116
117
118 sp_lev *splev = NULL;
119
120 static struct opvar *if_list[MAX_NESTED_IFS];
121
122 static short n_if_list = 0;
123
124 unsigned int max_x_map, max_y_map;
125 int obj_containment = 0;
126
127 int in_container_obj = 0;
128
129 /* integer value is possibly an inconstant value (eg. dice notation
130    or a variable) */
131 int is_inconstant_number = 0;
132
133 int in_switch_statement = 0;
134 static struct opvar *switch_check_jump = NULL;
135 static struct opvar *switch_default_case = NULL;
136 static struct opvar *switch_case_list[MAX_SWITCH_CASES];
137 static long switch_case_value[MAX_SWITCH_CASES];
138 int n_switch_case_list = 0;
139
140 int allow_break_statements = 0;
141 struct lc_breakdef *break_list = NULL;
142
143 extern struct lc_vardefs *vardefs; /* variable definitions */
144
145
146 struct lc_vardefs *function_tmp_var_defs = NULL;
147 extern struct lc_funcdefs *function_definitions;
148 struct lc_funcdefs *curr_function = NULL;
149 struct lc_funcdefs_parm * curr_function_param = NULL;
150 int in_function_definition = 0;
151 sp_lev *function_splev_backup = NULL;
152
153 extern int fatal_error;
154 extern int got_errors;
155 extern int line_number;
156 extern const char *fname;
157
158 extern char curr_token[512];
159
160 typedef union
161 {
162     long    i;
163     char    *map;
164     struct {
165         long room;
166         long wall;
167         long door;
168     } corpos;
169     struct {
170         long area;
171         long x1;
172         long y1;
173         long x2;
174         long y2;
175     } lregn;
176     struct {
177         long x;
178         long y;
179     } crd;
180     struct {
181         long ter;
182         long lit;
183     } terr;
184     struct {
185         long height;
186         long width;
187     } sze;
188     struct {
189         long die;
190         long num;
191     } dice;
192     struct {
193         long cfunc;
194         char *varstr;
195     } meth;
196 } YYSTYPE;
197 #define CHAR 257
198 #define INTEGER 258
199 #define BOOLEAN 259
200 #define PERCENT 260
201 #define SPERCENT 261
202 #define MINUS_INTEGER 262
203 #define PLUS_INTEGER 263
204 #define MAZE_GRID_ID 264
205 #define SOLID_FILL_ID 265
206 #define MINES_ID 266
207 #define ROGUELEV_ID 267
208 #define MESSAGE_ID 268
209 #define MAZE_ID 269
210 #define LEVEL_ID 270
211 #define LEV_INIT_ID 271
212 #define GEOMETRY_ID 272
213 #define NOMAP_ID 273
214 #define OBJECT_ID 274
215 #define COBJECT_ID 275
216 #define MONSTER_ID 276
217 #define TRAP_ID 277
218 #define DOOR_ID 278
219 #define DRAWBRIDGE_ID 279
220 #define object_ID 280
221 #define monster_ID 281
222 #define terrain_ID 282
223 #define MAZEWALK_ID 283
224 #define WALLIFY_ID 284
225 #define REGION_ID 285
226 #define FILLING 286
227 #define IRREGULAR 287
228 #define JOINED 288
229 #define ALTAR_ID 289
230 #define LADDER_ID 290
231 #define STAIR_ID 291
232 #define NON_DIGGABLE_ID 292
233 #define NON_PASSWALL_ID 293
234 #define ROOM_ID 294
235 #define PORTAL_ID 295
236 #define TELEPRT_ID 296
237 #define BRANCH_ID 297
238 #define LEV 298
239 #define MINERALIZE_ID 299
240 #define CORRIDOR_ID 300
241 #define GOLD_ID 301
242 #define ENGRAVING_ID 302
243 #define FOUNTAIN_ID 303
244 #define POOL_ID 304
245 #define SINK_ID 305
246 #define NONE 306
247 #define RAND_CORRIDOR_ID 307
248 #define DOOR_STATE 308
249 #define LIGHT_STATE 309
250 #define CURSE_TYPE 310
251 #define ENGRAVING_TYPE 311
252 #define DIRECTION 312
253 #define RANDOM_TYPE 313
254 #define RANDOM_TYPE_BRACKET 314
255 #define A_REGISTER 315
256 #define ALIGNMENT 316
257 #define LEFT_OR_RIGHT 317
258 #define CENTER 318
259 #define TOP_OR_BOT 319
260 #define ALTAR_TYPE 320
261 #define UP_OR_DOWN 321
262 #define SUBROOM_ID 322
263 #define NAME_ID 323
264 #define FLAGS_ID 324
265 #define FLAG_TYPE 325
266 #define MON_ATTITUDE 326
267 #define MON_ALERTNESS 327
268 #define MON_APPEARANCE 328
269 #define ROOMDOOR_ID 329
270 #define IF_ID 330
271 #define ELSE_ID 331
272 #define TERRAIN_ID 332
273 #define HORIZ_OR_VERT 333
274 #define REPLACE_TERRAIN_ID 334
275 #define EXIT_ID 335
276 #define SHUFFLE_ID 336
277 #define QUANTITY_ID 337
278 #define BURIED_ID 338
279 #define LOOP_ID 339
280 #define FOR_ID 340
281 #define TO_ID 341
282 #define SWITCH_ID 342
283 #define CASE_ID 343
284 #define BREAK_ID 344
285 #define DEFAULT_ID 345
286 #define ERODED_ID 346
287 #define TRAPPED_STATE 347
288 #define RECHARGED_ID 348
289 #define INVIS_ID 349
290 #define GREASED_ID 350
291 #define FEMALE_ID 351
292 #define CANCELLED_ID 352
293 #define REVIVED_ID 353
294 #define AVENGE_ID 354
295 #define FLEEING_ID 355
296 #define BLINDED_ID 356
297 #define PARALYZED_ID 357
298 #define STUNNED_ID 358
299 #define CONFUSED_ID 359
300 #define SEENTRAPS_ID 360
301 #define ALL_ID 361
302 #define MONTYPE_ID 362
303 #define GRAVE_ID 363
304 #define ERODEPROOF_ID 364
305 #define FUNCTION_ID 365
306 #define MSG_OUTPUT_TYPE 366
307 #define COMPARE_TYPE 367
308 #define UNKNOWN_TYPE 368
309 #define rect_ID 369
310 #define fillrect_ID 370
311 #define line_ID 371
312 #define randline_ID 372
313 #define grow_ID 373
314 #define selection_ID 374
315 #define flood_ID 375
316 #define rndcoord_ID 376
317 #define circle_ID 377
318 #define ellipse_ID 378
319 #define filter_ID 379
320 #define complement_ID 380
321 #define gradient_ID 381
322 #define GRADIENT_TYPE 382
323 #define LIMITED 383
324 #define HUMIDITY_TYPE 384
325 #define STRING 385
326 #define MAP_ID 386
327 #define NQSTRING 387
328 #define VARSTRING 388
329 #define CFUNC 389
330 #define CFUNC_INT 390
331 #define CFUNC_STR 391
332 #define CFUNC_COORD 392
333 #define CFUNC_REGION 393
334 #define VARSTRING_INT 394
335 #define VARSTRING_INT_ARRAY 395
336 #define VARSTRING_STRING 396
337 #define VARSTRING_STRING_ARRAY 397
338 #define VARSTRING_VAR 398
339 #define VARSTRING_VAR_ARRAY 399
340 #define VARSTRING_COORD 400
341 #define VARSTRING_COORD_ARRAY 401
342 #define VARSTRING_REGION 402
343 #define VARSTRING_REGION_ARRAY 403
344 #define VARSTRING_MAPCHAR 404
345 #define VARSTRING_MAPCHAR_ARRAY 405
346 #define VARSTRING_MONST 406
347 #define VARSTRING_MONST_ARRAY 407
348 #define VARSTRING_OBJ 408
349 #define VARSTRING_OBJ_ARRAY 409
350 #define VARSTRING_SEL 410
351 #define VARSTRING_SEL_ARRAY 411
352 #define METHOD_INT 412
353 #define METHOD_INT_ARRAY 413
354 #define METHOD_STRING 414
355 #define METHOD_STRING_ARRAY 415
356 #define METHOD_VAR 416
357 #define METHOD_VAR_ARRAY 417
358 #define METHOD_COORD 418
359 #define METHOD_COORD_ARRAY 419
360 #define METHOD_REGION 420
361 #define METHOD_REGION_ARRAY 421
362 #define METHOD_MAPCHAR 422
363 #define METHOD_MAPCHAR_ARRAY 423
364 #define METHOD_MONST 424
365 #define METHOD_MONST_ARRAY 425
366 #define METHOD_OBJ 426
367 #define METHOD_OBJ_ARRAY 427
368 #define METHOD_SEL 428
369 #define METHOD_SEL_ARRAY 429
370 #define DICE 430
371 #define YYERRCODE 256
372 short yylhs[] = {                                        -1,
373     0,    0,   73,   73,   74,   57,   57,   56,   56,   76,
374    76,   76,   76,   55,   55,   54,   54,   46,   46,   14,
375    14,   75,   75,   26,   26,   22,   22,   23,   78,   78,
376    78,   78,   78,   78,   78,   78,   78,   78,   78,   78,
377    78,   78,   78,   78,   78,   78,   78,   78,   78,   78,
378    78,   78,   78,   78,   78,   78,   78,   78,   78,   78,
379    78,   78,   78,   78,   78,   78,   78,   78,   78,   78,
380    78,   78,   59,   59,   59,   59,   59,   59,   59,   59,
381    59,   58,   58,   58,   58,   58,   58,   58,   58,   58,
382    60,   60,   60,   61,   61,   85,   84,   84,   84,   84,
383    84,   84,   84,   84,   84,   84,   84,   84,   84,   84,
384    84,   38,   38,   44,   44,   43,   43,   42,   42,   41,
385    41,   39,   39,   40,   40,  129,  130,  100,  101,   98,
386    45,   45,   31,   31,   31,  131,  133,   93,  134,  134,
387   136,  135,  137,  135,   99,  138,  138,  139,  140,   94,
388   141,   95,  142,   97,  144,   96,  143,  145,  143,   79,
389   110,  110,  110,   83,   83,   65,  146,  147,  113,  148,
390   112,   10,   10,   68,   68,   69,   69,   70,   70,   71,
391    71,   87,   87,   15,   15,   13,   13,   16,   16,   11,
392    11,  103,  103,  103,    1,    1,    2,    2,  105,  150,
393   105,  149,   20,   20,   21,   21,   21,   21,   21,   21,
394    21,   21,   21,   21,   21,   21,   21,   21,   21,   21,
395    35,   35,   35,  106,  152,  106,  151,   18,   18,   19,
396    19,   19,   19,   19,   19,   19,   19,   19,   19,   19,
397    19,   19,   19,   19,  120,   88,  104,  104,  121,  121,
398   102,  117,  118,  109,  119,   82,   17,   17,   91,  114,
399   108,   72,   72,  116,  115,   86,  107,  154,  111,   24,
400    24,   80,   81,   81,   81,   92,   89,   90,   90,    3,
401     3,    4,    4,   29,   29,   28,   28,   27,   27,   27,
402     5,    5,    6,    6,    7,    7,    7,   12,   12,   12,
403     8,    8,    9,  155,  155,  155,  132,   77,   77,   77,
404    77,   32,   32,   32,   30,   30,  127,  127,  127,   33,
405   124,  124,  124,   34,   34,  125,  125,  125,   36,   36,
406    36,   36,  126,  126,  126,   37,   37,   37,   37,  123,
407   123,  122,  122,  122,  122,  122,  122,  122,  122,  122,
408   122,  122,   50,   50,  157,  158,  158,  128,  128,   64,
409    64,   63,   63,   62,   62,   49,   49,   49,   49,   49,
410    49,   49,   49,   49,   49,   49,   49,   49,   49,   49,
411    49,   49,   49,   49,   48,   48,  156,   47,   47,   47,
412   153,  153,  153,  153,   51,   51,   52,   52,   53,   53,
413    25,   25,   67,   67,   66,
414 };
415 short yylen[] = {                                         2,
416     0,    1,    1,    2,    3,    3,    5,    1,    1,    5,
417     5,    3,   16,    0,    2,    0,    2,    0,    2,    1,
418     1,    0,    3,    3,    1,    0,    2,    3,    1,    1,
419     1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
420     1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
421     1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
422     1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
423     1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
424     1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
425     1,    1,    1,    1,    1,    3,    3,    5,    3,    5,
426     5,    5,    3,    3,    5,    5,    5,    7,    7,    7,
427     5,    1,    3,    1,    3,    1,    3,    1,    3,    1,
428     3,    1,    3,    1,    3,    0,    0,    8,    4,    1,
429     0,    1,    1,    5,    3,    0,    0,    9,    0,    2,
430     0,    5,    0,    4,    1,    2,    1,    6,    0,    3,
431     0,    6,    0,    4,    0,    4,    1,    0,    4,    3,
432     1,    3,    3,    5,    5,    7,    4,    0,   10,    0,
433    12,    0,    2,    5,    1,    5,    1,    5,    1,    5,
434     1,    9,    5,    1,    1,    1,    1,    1,    3,    1,
435     1,    1,    7,    5,    1,    1,    1,    1,    3,    0,
436     5,    4,    0,    3,    1,    1,    1,    1,    2,    1,
437     1,    1,    1,    1,    3,    3,    3,    1,    1,    3,
438     1,    1,    3,    3,    0,    5,    2,    0,    3,    1,
439     3,    1,    3,    3,    1,    1,    3,    1,    1,    1,
440     3,    1,    1,    1,    5,    7,    5,    8,    1,    3,
441     5,    5,    7,    7,    6,    5,    0,    2,    3,    3,
442     3,    1,    5,    9,    5,    3,    3,    0,   10,    0,
443     1,    7,    5,    5,    3,    5,    7,    9,    1,    1,
444     1,    1,    1,    0,    2,    1,    3,    1,    1,    1,
445     1,    1,    1,    1,    1,    1,    1,    1,    1,    3,
446     1,    1,    4,    1,    1,    4,    1,    1,    4,    1,
447     4,    5,    1,    3,    1,    3,    1,    1,    4,    9,
448     1,    1,    4,    1,    5,    1,    1,    4,    1,    1,
449     5,    1,    1,    1,    4,    1,    1,    5,    1,    1,
450     3,    1,    1,    3,    1,    4,    3,    3,    3,    3,
451     3,    3,    1,    1,    3,    1,    3,    0,    1,    1,
452     1,    1,    3,    0,    1,    1,    2,    2,    4,    6,
453     4,    6,    6,    6,    6,    2,    6,    8,    8,   10,
454    14,    2,    1,    3,    1,    3,    1,    1,    1,    1,
455     1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
456     1,    1,    1,   10,    9,
457 };
458 short yydefred[] = {                                      0,
459     0,    0,    0,    0,    2,    0,    0,    0,    0,    0,
460     4,    0,    6,    0,  133,    0,    0,    0,  192,    0,
461     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
462     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
463     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
464   130,    0,    0,    0,  136,  145,    0,    0,    0,    0,
465    93,   82,   73,   83,   74,   84,   75,   85,   76,   86,
466    77,   87,   78,   88,   79,   89,   80,   90,   81,    5,
467     0,   92,   91,    0,   30,    0,   29,   31,   32,   33,
468    34,   35,   36,   37,   38,   39,   40,   41,   42,   43,
469    44,   45,   46,   47,   48,   49,   50,   51,   52,   53,
470    54,   55,   56,   57,   58,   59,   60,   61,   62,   63,
471    64,   65,   66,   67,   68,   69,   70,   71,   72,  149,
472     0,    0,   23,    0,    0,    0,    0,    0,    0,    0,
473     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
474     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
475     0,    0,    0,    0,  155,    0,    0,    0,    0,   94,
476    95,    0,    0,    0,    0,  342,    0,  345,    0,  387,
477     0,  343,    0,  153,    0,   27,    0,    9,    8,    7,
478     0,  304,  305,    0,    0,  340,    0,    0,    0,   12,
479   313,    0,  195,  196,    0,    0,  310,    0,    0,  308,
480     0,  337,  339,    0,  336,  334,    0,  333,  228,  224,
481   225,  330,  332,    0,  329,  327,    0,  326,    0,    0,
482   281,  280,    0,  291,  292,    0,    0,    0,    0,    0,
483     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
484   383,  250,    0,  366,    0,  318,    0,  317,    0,    0,
485     0,    0,    0,  403,    0,    0,  266,  267,  283,  282,
486     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
487     0,    0,  259,  261,  260,  390,  388,  389,  163,  162,
488     0,  184,  185,    0,    0,    0,    0,   96,    0,    0,
489     0,    0,  126,    0,    0,    0,    0,  135,    0,    0,
490     0,    0,    0,    0,    0,  362,    0,    0,    0,  396,
491   398,  395,  397,  399,  400,    0,    0,    0,    0,    0,
492     0,  103,    0,    0,  104,    0,  150,   24,    0,    0,
493     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
494     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
495     0,    0,    0,  367,  368,    0,    0,    0,  376,    0,
496     0,    0,  382,    0,    0,    0,    0,    0,    0,    0,
497     0,    0,    0,    0,    0,  132,    0,    0,    0,    0,
498     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
499   156,    0,    0,  151,    0,    0,    0,    0,  344,  352,
500     0,    0,    0,    0,  349,  350,  351,  129,    0,  154,
501     0,    0,  120,  118,    0,    0,    0,    0,    0,    0,
502     0,    0,    0,    0,    0,  341,   11,  262,    0,   10,
503     0,    0,  314,    0,    0,    0,  198,  197,    0,  173,
504   194,    0,    0,    0,  226,    0,    0,  203,  201,  245,
505   183,    0,    0,    0,    0,    0,    0,    0,    0,    0,
506   324,    0,    0,  322,    0,  321,    0,    0,    0,  384,
507   386,    0,    0,  293,  294,    0,  297,    0,  295,    0,
508   296,  251,    0,    0,    0,  252,    0,  175,    0,    0,
509     0,    0,    0,  256,    0,    0,  165,  164,  276,  401,
510   402,    0,  177,    0,    0,    0,    0,    0,  265,    0,
511     0,  147,    0,    0,  137,  274,    0,    0,    0,  356,
512     0,  346,  134,  363,   98,    0,    0,  105,    0,  111,
513     0,  106,    0,  107,    0,  102,    0,  101,    0,  100,
514    28,  306,    0,    0,  316,  309,    0,  311,    0,    0,
515   335,  393,  391,  392,  239,  236,  230,    0,    0,  235,
516     0,  240,    0,  242,  243,    0,  238,  229,  244,  232,
517   394,    0,  328,    0,    0,    0,  369,    0,    0,    0,
518   371,    0,    0,    0,    0,    0,    0,    0,    0,    0,
519   319,    0,    0,    0,    0,    0,    0,  167,    0,    0,
520     0,    0,    0,  255,    0,    0,    0,    0,    0,    0,
521     0,    0,  152,  146,    0,    0,    0,  127,    0,    0,
522     0,    0,  121,  119,  112,    0,  114,    0,  116,    0,
523     0,    0,  312,  193,  338,    0,    0,    0,    0,    0,
524   331,    0,  246,    0,    0,  189,    0,    0,    0,    0,
525     0,    0,    0,    0,    0,    0,    0,    0,  302,  301,
526   272,    0,    0,  253,    0,  179,    0,    0,  254,  258,
527     0,    0,    0,    0,  181,    0,    0,  187,    0,  186,
528   159,    0,    0,  353,  354,  355,    0,  357,    0,  110,
529     0,  109,    0,  108,    0,    0,    0,  234,  237,  241,
530   231,    0,  298,  206,  207,    0,  211,  210,  212,  213,
531   214,    0,    0,    0,  218,  219,    0,  299,  208,  204,
532     0,    0,  248,    0,  372,    0,  377,    0,  373,    0,
533   323,  374,  375,    0,    0,    0,  268,  303,    0,    0,
534     0,    0,    0,    0,  190,  191,    0,    0,    0,  168,
535     0,    0,    0,    0,    0,    0,  128,  113,  115,  117,
536   263,    0,    0,    0,    0,    0,    0,    0,   19,    0,
537     0,  325,    0,    0,  288,  289,  290,    0,  285,    0,
538     0,    0,  174,    0,    0,  278,  166,  176,    0,    0,
539   182,  264,    0,  143,  138,  140,    0,  300,  215,  216,
540   217,  222,    0,  220,  378,    0,  379,    0,    0,    0,
541   271,  269,    0,    0,    0,  170,    0,  169,  141,    0,
542     0,    0,    0,    0,    0,  320,  287,    0,  405,  178,
543     0,  180,    0,  144,    0,  223,  380,   15,    0,  404,
544   171,  142,    0,    0,    0,    0,   20,   21,    0,    0,
545     0,   13,   17,  381,
546 };
547 short yydgoto[] = {                                       3,
548   209,  449,  233,  271,  236,  486,  490,  671,  491,  351,
549   757,  729,  689,  859,  294,  467,  614,  354,  578,  584,
550   730,   80,  337,  822,  512,  133,  788,  789,  747,  345,
551    81,  210,  258,  476,  814,  228,  218,  636,  425,  426,
552   427,  428,  640,  638,  387,  733,  290,  375,  253,  696,
553   329,  330,  331,  861,  835,  190,    4,   82,   83,   84,
554   172,  314,  315,  316,  280,  264,  265,  500,  515,  678,
555   687,  440,    5,    6,   10,   85,  254,   86,   87,   88,
556    89,   90,   91,   92,   93,   94,   95,   96,   97,   98,
557    99,  100,  101,  102,  103,  104,  105,  106,  107,  108,
558   109,  110,  111,  112,  113,  114,  115,  116,  117,  118,
559   119,  120,  121,  122,  123,  124,  125,  126,  127,  128,
560   129,  277,  318,  478,  229,  219,  259,  529,  408,  697,
561   173,  278,  626,  765,  766,  843,  830,  524,  130,  187,
562   521,  319,  401,  295,  517,  272,  800,  841,  230,  359,
563   220,  355,  580,  790,  196,  182,  530,  531,
564 };
565 short yysindex[] = {                                     68,
566    17,   31,    0, -217,    0,   68, -257, -226,  112, 5680,
567     0,  136,    0, -136,    0,  170,  185,  201,    0,  225,
568   229,  238,  244,  248,  251,  255,  266,  272,  275,  283,
569   304,  309,  346,  366,  378,  380,  382,  383,  396,  397,
570   398,  400,  401,  404,  405,  413,  415,  -46,  417,  420,
571     0,  426,  108,  489,    0,    0,  428,  101,  -35,  449,
572     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
573     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
574   432,    0,    0,  430,    0, 5680,    0,    0,    0,    0,
575     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
576     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
577     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
578     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
579  -190,  450,    0, -234,   62,  -13,   41,   41,   40, -252,
580  -121,  109,  109, 1644,  -34,  109,  109,   92,  -34,  -34,
581  -249,  -20,  -20,  -20,  -35,  458,  -35,  109, 1644, 1644,
582  1644, -160, -249, -174,    0, 1644,  -34,  288,  -35,    0,
583     0,  439,  414,  109,  467,    0,  -22,    0,  421,    0,
584    -9,    0,  -14,    0,  163,    0,  385,    0,    0,    0,
585  -136,    0,    0,  423,  465,    0,  471,  473,  475,    0,
586     0,  137,    0,    0,  490,  271,    0,  441,  496,    0,
587   503,    0,    0,  276,    0,    0,  452,    0,    0,    0,
588     0,    0,    0,  292,    0,    0,  470,    0,  512,    0,
589     0,    0,  518,    0,    0,  523,  524,  526,  -34,  -34,
590   109,  109,  540,  109,  542,  544,  545, 1644,  548, 5537,
591     0,    0,  533,    0,  331,    0,  500,    0,  555,  558,
592   559,  564,  347,    0,  571,  582,    0,    0,    0,    0,
593   367,  584,  379,  592,  594,  595,  141,  596,  402,  597,
594   588,  611,    0,    0,    0,    0,    0,    0,    0,    0,
595   617,    0,    0,  628,  385,  638,  640,    0,  593,  -35,
596   -35,  644,    0,  649,  159,  -35,  -35,    0,  -35,  -35,
597   -35,  -35,  -35,  651,  650,    0,  141,  465, 5680,    0,
598     0,    0,    0,    0,    0,  642,   -1,    4,  643,  647,
599   653,    0,  141,  465,    0, 5680,    0,    0,  -35, -234,
600   445,   14,  455,  654,  614, 1644,  678,  -35,   38,  476,
601   338,  682,  -35,  688,  385,  690,  -35,  109,  385,  109,
602  1644,  424,  431,    0,    0,  694,  696, 1298,    0,  109,
603   109, 5435,    0,  360,  704, 1644,  702,  -35, -165,  -83,
604   429,  491,  703,  -20,  433,    0,  707,  -24,  708,  -20,
605   -20,  -20,  -35,  709,   10,  109,  -91,  -19, -121,    0,
606     0,    9,    9,    0,   45,  655, -254,  560,    0,    0,
607    75,  148,   79,   79,    0,    0,    0,    0,  -14,    0,
608  1644,  711,    0,    0,   16,   25,   27,   29,  141,  465,
609    22,  -10,  -28,  631,  427,    0,    0,    0,  501,    0,
610   715,  137,    0,  719,  505,  459,    0,    0,  503,    0,
611     0,  381,  499,    2,    0,  403,  508,    0,    0,    0,
612     0,  721,  723,  109,  109,  662,  743,  748,  746,  749,
613     0,  750, 5448,    0,  701,    0,  751,  752,  753,    0,
614     0,  554,  536,    0,    0,  754,    0,  726,    0,  774,
615     0,    0,  775,  579,  785,    0, -165,    0,  581,  796,
616   583,  798,  800,    0,  802,  535,    0,    0,    0,    0,
617     0,  804,    0,  591,  806,  807,  521,  598,    0,  810,
618   385,    0,  811,  -35,    0,    0,  465,  801,  815,    0,
619   814,    0,    0,    0,    0,  604,  -35,    0, -234,    0,
620   -21,    0,  824,    0,   57,    0,   98,    0,   23,    0,
621     0,    0,  825,  621,    0,    0,  827,    0,  493,  839,
622     0,    0,    0,    0,    0,    0,    0,  823,  826,    0,
623   828,    0,  830,    0,    0,  832,    0,    0,    0,    0,
624     0,  841,    0,  848, -121,  641,    0,  857,  590, 1644,
625     0,  -35,  -35, 1644,  859,  -35, 1644, 1644,  864,  861,
626     0, -249,  648, -148,  652,  135,  586,    0,  867,   -5,
627   868,  528,  587,    0,  -35,  870, -234,  871,    6,   72,
628   385,    9,    0,    0,  141,  793,    1,    0,  560,  166,
629   141,  465,    0,    0,    0,   32,    0,   33,    0,   35,
630  -165,  873,    0,    0,    0, -234,  -35,  -35,  -35,   40,
631     0, 5526,    0,  876,  -35,    0,  880,  174,  686,  881,
632  -165,  569,  882,  883,  -35,  685,  900,  852,    0,    0,
633     0,  902,  691,    0,  693,    0,  110,  908,    0,    0,
634   928, -184,  465,  716,    0,  717,  900,    0,  929,    0,
635     0,  932,   90,    0,    0,    0,  385,    0,   57,    0,
636    98,    0,   23,    0,  936,  722,  465,    0,    0,    0,
637     0,   56,    0,    0,    0, -234,    0,    0,    0,    0,
638     0,  920,  921,  924,    0,    0,  925,    0,    0,    0,
639   465,  727,    0,  141,    0,  699,    0,  -35,    0,  945,
640     0,    0,    0,  481,  943,   59,    0,    0,  744,  957,
641   965,  963,    6,  -35,    0,    0,  967,  977,  982,    0,
642  -184,  767,  -50,  971,  905,   90,    0,    0,    0,    0,
643     0,  987,  724,  465,  -35,  -35,  -35, -261,    0,  991,
644   576,    0,  -35,  777,    0,    0,    0,  989,    0,  385,
645   992,  780,    0,   38,  900,    0,    0,    0,  781,  385,
646     0,    0,  983,    0,    0,    0,  784,    0,    0,    0,
647     0,    0,  916,    0,    0,  758,    0,   93, 1004,   59,
648     0,    0,  788, 1006, 1007,    0, 1010,    0,    0, 5680,
649  1009, -261, 1016,  675, 1020,    0,    0, 1025,    0,    0,
650   385,    0, 5680,    0, -165,    0,    0,    0, 1023,    0,
651     0,    0, 1024,  109, -149, 1026,    0,    0,  876,  109,
652  1028,    0,    0,    0,
653 };
654 short yyrindex[] = {                                   1071,
655     0,    0,    0, 5225,    0, 1072,    0,    0,    0,   53,
656     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
657     0,    0,    0,    0,    0,    0, 2985,    0,    0,    0,
658     0,    0,    0,    0,    0,    0,    0, 3174,    0,    0,
659     0,    0,    0,    0, 3331,    0,    0,    0,    0,    0,
660     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
661     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
662     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
663     0,    0,    0,    0,    0,  182,    0,    0,    0,    0,
664     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
665     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
666     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
667     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
668     0, 5382,    0,    0,    0,    0,    0,    0,    0,    0,
669     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
670     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
671     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
672     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
673     0,    0, 1032,    0,    0,    0,    0,    0,    0,    0,
674     0,    0,    0,    0, 3520,    0,    0,    0,    0,    0,
675     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
676   689,    0,    0,    0,    0,    0,    0,    0,    0,    0,
677     0,    0,    0,    0,    0,    0,    0,    0,    0, 1947,
678     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
679     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
680     0,    0, 1098,    0,    0,    0,    0,    0,    0,    0,
681     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
682   136,    0,    0,    0,    0,    0,  720,    0,    0,    0,
683     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
684     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
685     0, 3677,    0,    0,    0,    0,    0,    0,    0,    0,
686     0,    0,    0,    0, 1033,    0,  241,  247,    0,    0,
687     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
688     0,    0, 3866, 4023,    0,  951,    0,    0,    0,    0,
689     0,    0,    0,  984,    0,    0,    0,    0,    0,    0,
690     0,    0,    0, 2136,    0,    0,    0,    0,    0,    0,
691     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
692     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
693     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
694     0,    0,    0,    0,    0,    0,    0,    0,    0, 2293,
695     0,    0,    0,    0,    0,    0,    0, 1037,    0,    0,
696     0,    0,  374,  531,    0,    0,    0,    0,    0,    0,
697     0,  553,    0,    0,    0,    0,    0,    0,   42,   49,
698     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
699     0,    0,    0,    0,    0,    0,    0,    0,  689,    0,
700     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
701     0,    0, 4212,    0,    0, 1035,    0,    0,    0,    0,
702     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
703     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
704     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
705     0,    0, 4369,    0,    0,    0,    0,    0,    0,    0,
706     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
707     0,    0,    0,    0,    0,    0, 4558,    0,    0,    0,
708  1039,    0,    0,    0,    0,    0,    0,    0,    0,    0,
709     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
710     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
711     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
712     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
713     0,    0,    0, 2482,    0,    0,    0,    0,    0,    0,
714     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
715     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
716     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
717     0,    0,    0,    0,  958,    0,    0,    0,    0,    0,
718    50,   52,    0,    0,    0,    0,    0,    0,    0,    0,
719     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
720     0,    0,    0, 4715,    0,    0,    0,    0,    0,    0,
721     0,    0,    0,    0,    0,    0, 2639,    0,    0,    0,
722     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
723     0,    0, 4904,    0,    0,    0,  959,    0,    0,    0,
724     0,    0,  961,    0,    0,    0,    0,    0,    0,    0,
725     0,    0,    0,    0,    0,    0, 1255,    0,    0,    0,
726     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
727     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
728  1444,    0,    0,  909,    0,    0,    0,    0,    0,    0,
729     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
730     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
731     0,    0,    0,    0,    0,  961,    0,    0,    0,    0,
732     0,    0,    0, 1601,    0,    0,    0,    0,    0,    0,
733     0,    0,    0,    0,    0,    0,    0, 2828,    0, 5061,
734     0,    0,    0,    0,  959,    0,    0,    0,    0,    0,
735     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
736     0,    0, 1790,    0,    0,    0,    0,  128,    0,    0,
737     0,    0,    0,    0,    0,    0,    0,    0,    0,  -69,
738     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
739     0,    0,  -69,    0,    0,    0,    0,    0,    0,    0,
740     0,    0,    0,    0,    0, 1043,    0,    0, 4715,    0,
741     0,    0,    0,    0,
742 };
743 short yygindex[] = {                                      0,
744   410,  294,    0,  487, -329, -480,    0,    0,  438,  645,
745   330,    0,    0,    0,    0, -474,    0,    0,    0,    0,
746     0,  -86, -287,    0,    0,  901,    0,  273, -629,  657,
747  1047, -296, -297, -509,  264, -504, -494,    0,    0,    0,
748     0,    0,    0,    0,    0,  242, -384, -137,  849,    0,
749     0,    0,    0,    0,    0,    0,    0, 1046,  934, -371,
750     0,    0,    0,  684,  710,    0,  -48,    0,    0,    0,
751   351,    0, 1100,    0,    0,    0, -133,  790,    0,    0,
752     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
753     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
754     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
755     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
756     0,  -58, -130, -355, -375,  679,  -84,    0,    0,    0,
757     0, -167,    0,  345,    0,    0,    0,    0,    0,    0,
758     0,    0,    0,    0,    0,  949,    0,    0,    0,    0,
759   975,    0,    0,    0,  792,  680,  504,    0,
760 };
761 #define YYTABLESIZE 6091
762 short yytable[] = {                                     186,
763   181,  299,  211,  195,  177,  255,  252,  400,  237,  238,
764   507,  518,  260,  261,  266,  499,  608,  177,  206,  273,
765   514,  283,  284,  285,  282,  177,  206,  313,  296,  224,
766   424,  423,  311,  309,  677,  310,  528,  312,  177,  639,
767   302,  206,  637,  327,   59,  686,  519,  520,  518,  279,
768   635,  332,   26,  439,  334,   26,  548,  760,  526,  537,
769   231,  214,  518,  269,  267,  268,  188,  455,  539,  516,
770   541,  459,  543,  755,    7,  699,  701,  550,  703,  224,
771   214,  313,  297,  308,  292,  122,  311,  309,    8,  310,
772   523,  312,  124,  123,  549,  125,  214,  286,  281,  812,
773   335,  287,  288,  274,  275,  276,    9,  366,  367,  857,
774   369,  313,  547,  773,  656,  313,  311,  309,  305,  310,
775   311,  312,  189,  813,  317,  312,  333,   12,  756,  313,
776   192,  263,  232,  406,  311,  270,  834,  224,  293,  312,
777   538,  193,  194,  484,  545,  690,  603,  485,  206,  540,
778   192,  542,  289,  544,  364,  365,  700,  702,   13,  704,
779   705,  193,  194,  858,  669,  826,  122,  532,   14,   14,
780   348,  670,  348,  124,  123,  643,  125,  313,  673,  131,
781   740,   26,  311,  309,  313,  310,  234,  312,  132,  311,
782   309,  235,  310,  770,  312,  313,  769,  430,  169,  410,
783   311,  309,  327,  310,  768,  312,  643,  286,  444,  666,
784   313,  287,  288,   15,  737,  311,  309,  736,  310,  510,
785   312,  511,  176,  461,  458,  505,  460,  134,  471,  487,
786   468,  488,  489,  623,  477,  176,  469,  470,  481,  304,
787   533,  405,  135,  176,  633,  634,  222,  411,  412,  434,
788   413,  414,  415,  416,  417,  653,  422,  528,  136,  562,
789   304,  176,  509,  563,  564,  471,  692,  286,  305,  429,
790   438,  287,  288,   26,  711,   26,  527,  262,  212,  471,
791   435,  360,  137,  535,  360,  328,  138,  361,  498,  446,
792   361,  201,  202,  513,  453,  139,  222,  212,  457,  201,
793   202,  140,  223,  203,  204,  141,   26,  676,  142,  565,
794   566,  567,  143,  212,  201,  202,  201,  202,  685,  483,
795   579,   26,   26,  144,  568,  197,  198,  199,  200,  145,
796   587,  588,  146,  691,  213,  495,    1,    2,  569,  570,
797   147,  502,  503,  504,  785,  786,  787,  571,  572,  573,
798   574,  575,  223,  213,  222,  447,  448,  307,  178,  179,
799   317,  148,  205,  576,  853,  577,  149,  256,  257,  213,
800   192,  178,  179,  347,  225,  474,  475,  205,  803,  178,
801   179,  193,  194,  466,  688,  522,  207,  208,  192,  262,
802   694,  695,  178,  179,  180,  226,  227,  178,  179,  193,
803   194,  207,  208,  150,  201,  202,  215,  180,  632,  767,
804   223,  347,  474,  475,  347,  180,  347,  347,  347,  347,
805   176,  201,  202,  151,  225,  215,  203,  204,  180,  216,
806   217,  180,  763,  180,  764,  152,  320,  153,  321,  154,
807   155,  215,  322,  323,  324,  226,  227,  681,  216,  217,
808    26,   26,  657,  156,  157,  158,  660,  159,  160,  663,
809   664,  161,  162,  313,  347,  625,  347,  205,  311,  309,
810   163,  310,  164,  312,  166,  201,  202,  167,  631,  708,
811   709,  710,  225,  168,  205,  174,  683,  175,  183,  184,
812   185,  207,  208,  191,  325,  313,  347,  279,  347,  300,
813   311,  309,  821,  310,  301,  312,  303,  336,  207,  208,
814   340,  306,  828,  339,  341,  707,  342,  313,  343,  552,
815   344,  731,  311,  309,   26,  783,   26,  312,  347,  346,
816   348,  348,  352,  658,  659,  313,  326,  662,  205,  349,
817   311,  309,  353,  310,  313,  312,  350,  192,  356,  311,
818   309,  558,  310,  851,  312,  358,  178,  179,  193,  194,
819   357,  360,  207,  208,  256,  257,  361,  362,  348,  363,
820   376,  348,  313,  348,  348,  348,  348,  311,  309,  368,
821   310,  370,  312,  371,  372,  774,  796,  374,  377,  342,
822   378,  561,  180,  342,  342,  342,  734,  342,  379,  342,
823   583,  380,  381,  382,  383,  313,  744,  809,  810,  811,
824   311,  309,  313,  310,  384,  312,  817,  311,  309,  816,
825   310,  348,  312,  348,  313,  385,  386,  388,  601,  311,
826   309,  396,  310,  347,  312,  390,  389,  391,  392,  393,
827   395,  347,  347,  347,  347,  347,  347,  347,  347,  347,
828   347,  347,  347,  348,  397,  348,  347,  347,  347,  394,
829   398,  741,  347,  347,  347,  347,  347,  347,  347,  347,
830   347,  399,  347,  347,  347,  347,  347,  347,  347,  781,
831   347,  402,   63,  403,   65,  404,   67,  407,   69,  409,
832    71,  418,   73,  419,   75,  347,   77,  442,   79,  421,
833   431,  437,  347,  347,  432,  347,  443,  347,  347,  347,
834   433,  441,  347,  347,  347,  347,  347,  347,  347,  307,
835   856,  445,  313,  451,  818,  452,  863,  311,  309,  738,
836   310,  454,  312,  456,  450,  462,  347,  464,  347,  465,
837   347,  479,  463,  844,  480,  482,  494,  525,  493,  492,
838   497,  501,  506,  496,  536,  551,  852,  553,  554,  556,
839   347,  347,  557,  307,  585,  560,  586,  347,  347,  347,
840   347,  347,  347,  347,  347,  347,  347,  347,  347,  347,
841   347,  347,  347,  347,  347,  589,  590,  582,  591,  592,
842   348,  596,  593,  594,  597,  598,  599,  602,  348,  348,
843   348,  348,  348,  348,  348,  348,  348,  348,  348,  348,
844   307,  600,  307,  348,  348,  348,  603,  604,  605,  348,
845   348,  348,  348,  348,  348,  348,  348,  348,  607,  348,
846   348,  348,  348,  348,  348,  348,  606,  348,  609,  610,
847   611,  612,  307,  613,  307,  615,  616,  617,  618,  619,
848   620,  621,  348,  622,  595,  628,  624,  629,  627,  348,
849   348,  630,  348,  255,  348,  348,  348,  643,  641,  348,
850   348,  348,  348,  348,  348,  348,  170,  642,  644,  645,
851   646,  651,   62,  647,   64,  648,   66,  649,   68,  650,
852    70,  652,   72,  348,   74,  348,   76,  348,   78,  654,
853   655,  466,  661,  665,  666,  668,  674,  680,  370,  672,
854   675,  673,  679,  682,  684,  693,  706,  348,  348,  732,
855   735,  739,  742,  743,  348,  348,  348,  348,  348,  348,
856   348,  348,  348,  348,  348,  348,  348,  348,  348,  348,
857   348,  348,  745,  746,  748,  749,  370,   61,  750,  370,
858   751,  753,  370,   62,   63,   64,   65,   66,   67,   68,
859    69,   70,   71,   72,   73,   74,   75,   76,   77,   78,
860    79,  754,  761,  758,  759,  762,  771,  775,  776,  307,
861   772,  777,  778,  779,  780,  782,  784,  307,  307,  307,
862   307,  307,  307,  307,  307,  307,  307,  307,  307,  370,
863   792,  791,  307,  307,  307,  793,  794,  797,  307,  307,
864   307,  307,  307,  307,  307,  307,  307,  798,  307,  307,
865   307,  307,  307,  307,  307,  799,  307,  802,  804,  805,
866   807,  815,  820,  370,  819,  823,  808,  824,  827,  832,
867   829,  307,  831,  833,  836,  838,  839,  840,  307,  307,
868   842,  307,  845,  307,  307,  307,  847,  848,  307,  307,
869   849,  307,  307,  307,  307,  850,  854,  855,  864,  860,
870     1,    3,  364,  365,  172,   26,  315,  358,  188,  359,
871   148,  284,  307,   16,  307,  139,  752,  825,  667,  728,
872   801,  338,  837,  559,  165,  846,  373,  385,  555,  171,
873   862,  298,  534,  795,  508,   11,  307,  307,  420,  546,
874   806,  291,  221,  307,  307,  307,  307,  307,  307,  307,
875   307,  307,  307,  307,  307,  307,  307,  307,  307,  307,
876   307,  436,  698,  581,    0,    0,    0,    0,  385,    0,
877     0,  385,    0,    0,    0,    0,    0,    0,    0,    0,
878     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
879     0,    0,    0,    0,    0,    0,    0,    0,  370,    0,
880     0,    0,    0,    0,    0,    0,  370,  370,  370,  370,
881   370,  370,  370,  370,  370,  370,  370,  370,  385,    0,
882     0,  370,  370,  370,    0,    0,    0,  370,  370,  370,
883   370,  370,  370,  370,  370,  370,    0,  370,  370,  370,
884   370,  370,  370,  370,    0,  370,    0,    0,    0,    0,
885     0,    0,  385,    0,    0,    0,    0,    0,    0,    0,
886   370,    0,    0,    0,    0,    0,    0,  370,  370,    0,
887   370,    0,  370,  370,  370,    0,    0,  370,  370,    0,
888   370,  370,  370,  370,  233,    0,    0,    0,    0,    0,
889     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
890     0,  370,    0,  370,    0,    0,    0,    0,    0,    0,
891     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
892     0,    0,    0,    0,    0,  370,  370,    0,  233,    0,
893     0,    0,  370,  370,  370,  370,  370,  370,  370,  370,
894   370,  370,  370,  370,  370,  370,  370,  370,  370,  370,
895     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
896     0,    0,    0,    0,    0,    0,    0,  250,    0,    0,
897     0,    0,    0,    0,    0,  233,    0,    0,    0,    0,
898     0,    0,    0,    0,    0,    0,    0,  385,    0,    0,
899     0,    0,    0,    0,    0,  385,  385,  385,  385,  385,
900   385,  385,  385,  385,  385,  385,  385,  233,    0,  233,
901   385,  385,  385,    0,    0,    0,  385,  385,  385,  385,
902   385,  385,  385,  385,  385,    0,  385,  385,  385,  385,
903   385,  385,  385,    0,  385,    0,    0,    0,    0,    0,
904     0,    0,    0,    0,    0,    0,    0,    0,    0,  385,
905     0,    0,    0,    0,    0,    0,  385,  385,    0,  385,
906     0,  385,  385,  385,    0,    0,  385,  385,    0,  385,
907   385,  385,  385,  205,    0,    0,    0,    0,    0,    0,
908     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
909   385,    0,  385,    0,    0,    0,    0,    0,    0,    0,
910     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
911     0,    0,    0,    0,  385,  385,    0,  205,    0,    0,
912     0,  385,  385,  385,  385,  385,  385,  385,  385,  385,
913   385,  385,  385,  385,  385,  385,  385,  385,  385,    0,
914     0,    0,    0,    0,  233,    0,    0,    0,    0,    0,
915     0,    0,  233,  233,  233,  233,  233,  233,  233,  233,
916   233,  233,  233,  233,  205,    0,    0,  233,  233,  233,
917     0,    0,    0,  233,  233,  233,  233,  233,  233,  233,
918   233,  233,    0,  233,  233,  233,  233,  233,  233,  233,
919     0,  233,    0,    0,    0,    0,  205,    0,  205,    0,
920     0,    0,    0,    0,    0,    0,  233,    0,    0,    0,
921     0,    0,    0,  233,  233,    0,  233,    0,  233,  233,
922   233,    0,    0,  233,  233,    0,  233,  233,  233,  233,
923   209,    0,    0,    0,    0,    0,    0,    0,    0,  466,
924   201,  202,    0,    0,    0,    0,    0,  233,    0,  233,
925     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
926     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
927     0,  233,  233,    0,  209,    0,    0,    0,  233,  233,
928   233,  233,  233,  233,  233,  233,  233,  233,  233,  233,
929   233,  233,  233,  233,  233,  233,  239,  240,  241,  242,
930   243,    0,  244,  205,  245,  246,  247,  248,  249,    0,
931     0,    0,    0,  250,    0,    0,    0,    0,    0,    0,
932     0,  209,    0,    0,    0,    0,    0,  207,  208,    0,
933     0,    0,    0,  205,    0,    0,    0,  251,    0,    0,
934     0,  205,  205,  205,  205,  205,  205,  205,  205,  205,
935   205,  205,  205,  209,    0,  209,  205,  205,  205,    0,
936     0,    0,  205,  205,  205,  205,  205,  205,  205,  205,
937   205,    0,  205,  205,  205,  205,  205,  205,  205,    0,
938   205,    0,    0,    0,    0,    0,    0,    0,    0,    0,
939     0,    0,    0,    0,    0,  205,    0,    0,    0,    0,
940     0,    0,  205,  205,    0,  205,    0,  205,  205,  205,
941     0,    0,  205,  205,    0,  205,  205,  205,  205,  221,
942     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
943     0,    0,    0,    0,    0,    0,  205,    0,  205,    0,
944     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
945     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
946   205,  205,    0,  221,    0,    0,    0,  205,  205,  205,
947   205,  205,  205,  205,  205,  205,  205,  205,  205,  205,
948   205,  205,  205,  205,  205,    0,    0,    0,    0,    0,
949   209,    0,    0,    0,    0,    0,    0,    0,  209,  209,
950   209,  209,  209,  209,  209,  209,  209,  209,  209,  209,
951   221,    0,    0,  209,  209,  209,    0,    0,    0,  209,
952   209,  209,  209,  209,  209,  209,  209,  209,    0,  209,
953   209,  209,  209,  209,  209,  209,    0,  209,    0,    0,
954     0,    0,  221,    0,  221,    0,    0,    0,    0,    0,
955     0,    0,  209,    0,    0,    0,    0,    0,    0,  209,
956   209,    0,  209,    0,  209,  209,  209,    0,    0,  209,
957   209,    0,  209,  209,  209,  209,  199,    0,    0,    0,
958     0,    0,    0,    0,    0,    0,  201,  202,    0,    0,
959     0,    0,    0,  209,    0,  209,    0,    0,    0,    0,
960     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
961     0,    0,    0,    0,    0,    0,    0,  209,  209,    0,
962     0,    0,    0,    0,  209,  209,  209,  209,  209,  209,
963   209,  209,  209,  209,  209,  209,  209,  209,  209,  209,
964   209,  209,  239,  240,  241,  242,  243,    0,  244,  205,
965   245,  246,  247,  248,  249,    0,    0,    0,    0,    0,
966     0,    0,    0,    0,    0,    0,    0,  199,    0,    0,
967     0,    0,    0,  207,  208,    0,    0,    0,    0,  221,
968     0,    0,    0,  251,    0,    0,    0,  221,  221,  221,
969   221,  221,  221,  221,  221,  221,  221,  221,  221,  200,
970     0,  199,  221,  221,  221,    0,    0,    0,  221,  221,
971   221,  221,  221,  221,  221,  221,  221,    0,  221,  221,
972   221,  221,  221,  221,  221,    0,  221,    0,    0,    0,
973     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
974     0,  221,    0,    0,    0,    0,    0,    0,  221,  221,
975     0,  221,    0,  221,  221,  221,    0,    0,  221,  221,
976     0,  221,  221,  221,  221,  227,    0,    0,    0,    0,
977     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
978     0,    0,  221,    0,  221,    0,    0,    0,    0,    0,
979     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
980     0,    0,    0,    0,    0,    0,  221,  221,    0,    0,
981     0,    0,    0,  221,  221,  221,  221,  221,  221,  221,
982   221,  221,  221,  221,  221,  221,  221,  221,  221,  221,
983   221,    0,    0,    0,    0,    0,  199,    0,    0,    0,
984     0,    0,    0,    0,  199,  199,  199,  199,  199,  199,
985   199,  199,  199,  199,  199,  199,  227,    0,    0,  199,
986   199,  199,    0,    0,    0,  199,  199,  199,  199,  199,
987   199,  199,  199,  199,    0,  199,  199,  199,  199,  199,
988   199,  199,    0,  199,    0,    0,    0,    0,  227,    0,
989   227,    0,    0,    0,    0,    0,    0,    0,  199,    0,
990     0,    0,    0,    0,    0,  199,  199,    0,  199,    0,
991   199,  199,  199,    0,    0,  199,  199,    0,  199,  199,
992   199,  199,  157,    0,    0,    0,    0,    0,    0,    0,
993     0,    0,    0,    0,    0,    0,    0,    0,    0,  199,
994     0,  199,    0,    0,    0,    0,    0,    0,    0,    0,
995     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
996     0,    0,    0,  199,  199,    0,    0,    0,    0,    0,
997   199,  199,  199,  199,  199,  199,  199,  199,  199,  199,
998   199,  199,  199,  199,  199,  199,  199,  199,    0,    0,
999     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
1000     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
1001     0,    0,    0,  157,    0,    0,    0,    0,    0,    0,
1002     0,    0,    0,    0,    0,  227,    0,    0,    0,    0,
1003     0,    0,    0,  227,  227,  227,  227,  227,  227,  227,
1004   227,  227,  227,  227,  227,    0,    0,  157,  227,  227,
1005   227,    0,    0,    0,  227,  227,  227,  227,  227,  227,
1006   227,  227,  227,    0,  227,  227,  227,  227,  227,  227,
1007   227,    0,  227,    0,    0,    0,    0,    0,    0,    0,
1008     0,    0,    0,    0,    0,    0,    0,  227,    0,    0,
1009     0,    0,    0,    0,  227,  227,    0,  227,    0,  227,
1010   227,  227,    0,    0,  227,  227,    0,  227,  227,  227,
1011   227,  202,    0,    0,    0,    0,    0,    0,    0,    0,
1012     0,    0,    0,    0,    0,    0,    0,    0,  227,    0,
1013   227,    0,    0,    0,    0,    0,    0,    0,    0,    0,
1014     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
1015     0,    0,  227,  227,    0,    0,    0,    0,    0,  227,
1016   227,  227,  227,  227,  227,  227,  227,  227,  227,  227,
1017   227,  227,  227,  227,  227,  227,  227,    0,    0,    0,
1018     0,    0,  157,    0,    0,    0,    0,    0,    0,    0,
1019   157,  157,  157,  157,  157,  157,  157,  157,  157,  157,
1020   157,  157,  202,    0,    0,  157,  157,  157,    0,    0,
1021     0,  157,  157,  157,  157,  157,  157,  157,  157,  157,
1022     0,  157,  157,  157,  157,  157,  157,  157,    0,  157,
1023     0,    0,    0,    0,  202,    0,  202,    0,    0,    0,
1024     0,    0,    0,    0,  157,    0,    0,    0,    0,    0,
1025     0,  157,  157,  158,  157,    0,  157,  157,  157,    0,
1026     0,  157,  157,    0,  157,  157,  157,  157,  284,    0,
1027     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
1028     0,    0,    0,    0,    0,  157,    0,  157,    0,    0,
1029     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
1030     0,    0,    0,    0,    0,    0,    0,    0,    0,  157,
1031   157,    0,    0,    0,    0,    0,  157,  157,  157,  157,
1032   157,  157,  157,  157,  157,  157,  157,  157,  157,  157,
1033   157,  157,  157,  157,    0,    0,    0,    0,    0,    0,
1034     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
1035     0,    0,    0,    0,    0,    0,    0,    0,    0,  284,
1036     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
1037     0,  202,    0,    0,    0,    0,    0,    0,    0,  202,
1038   202,  202,  202,  202,  202,  202,  202,  202,  202,  202,
1039   202,  284,    0,  284,  202,  202,  202,    0,    0,    0,
1040   202,  202,  202,  202,  202,  202,  202,  202,  202,    0,
1041   202,  202,  202,  202,  202,  202,  202,    0,  202,    0,
1042     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
1043     0,    0,    0,  202,    0,    0,    0,    0,    0,    0,
1044   202,  202,    0,  202,    0,  202,  202,  202,    0,    0,
1045   202,  202,    0,  202,  202,  202,  202,  286,    0,    0,
1046     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
1047     0,    0,    0,    0,  202,    0,  202,    0,    0,    0,
1048     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
1049     0,    0,    0,    0,    0,    0,    0,    0,  202,  202,
1050     0,    0,    0,    0,    0,  202,  202,  202,  202,  202,
1051   202,  202,  202,  202,  202,  202,  202,  202,  202,  202,
1052   202,  202,  202,    0,    0,    0,    0,    0,  284,    0,
1053     0,    0,    0,    0,    0,    0,  284,  284,  284,  284,
1054   284,  284,  284,  284,  284,  284,  284,  284,  286,    0,
1055     0,  284,  284,  284,    0,    0,    0,  284,  284,  284,
1056   284,  284,  284,  284,  284,  284,    0,  284,  284,  284,
1057   284,  284,  284,  284,    0,  284,    0,    0,    0,    0,
1058   286,    0,  286,    0,    0,    0,    0,    0,    0,    0,
1059   284,    0,    0,    0,    0,    0,    0,  284,  284,    0,
1060   284,    0,  284,  284,  284,    0,    0,  284,  284,    0,
1061   284,  284,  284,  284,  249,    0,    0,    0,    0,    0,
1062     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
1063     0,  284,    0,  284,    0,    0,    0,    0,    0,    0,
1064     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
1065     0,    0,    0,    0,    0,  284,  284,    0,    0,    0,
1066     0,    0,  284,  284,  284,  284,  284,  284,  284,  284,
1067   284,  284,  284,  284,  284,  284,  284,  284,  284,  284,
1068     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
1069     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
1070     0,    0,    0,    0,    0,  249,    0,    0,    0,    0,
1071     0,    0,    0,    0,    0,    0,    0,  286,    0,    0,
1072     0,    0,    0,    0,    0,  286,  286,  286,  286,  286,
1073   286,  286,  286,  286,  286,  286,  286,    0,    0,  249,
1074   286,  286,  286,    0,    0,    0,  286,  286,  286,  286,
1075   286,  286,  286,  286,  286,    0,  286,  286,  286,  286,
1076   286,  286,  286,    0,  286,    0,    0,    0,    0,    0,
1077     0,    0,    0,    0,    0,    0,    0,    0,    0,  286,
1078     0,    0,    0,    0,    0,    0,  286,  286,    0,  286,
1079     0,  286,  286,  286,    0,    0,  286,  286,    0,  286,
1080   286,  286,  286,  279,    0,    0,    0,    0,    0,    0,
1081     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
1082   286,    0,  286,    0,    0,    0,    0,    0,    0,    0,
1083     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
1084     0,    0,    0,    0,  286,  286,    0,    0,    0,    0,
1085     0,  286,  286,  286,  286,  286,  286,  286,  286,  286,
1086   286,  286,  286,  286,  286,  286,  286,  286,  286,    0,
1087     0,    0,    0,    0,  249,    0,    0,    0,    0,    0,
1088     0,    0,  249,  249,  249,  249,  249,  249,  249,  249,
1089   249,  249,  249,  249,  279,    0,    0,  249,  249,  249,
1090     0,    0,    0,  249,  249,  249,  249,  249,  249,  249,
1091   249,  249,    0,  249,  249,  249,  249,  249,  249,  249,
1092     0,  249,    0,    0,    0,    0,    0,    0,  279,    0,
1093     0,    0,    0,    0,    0,    0,  249,    0,    0,    0,
1094     0,    0,    0,  249,  249,    0,  249,    0,  249,  249,
1095   249,    0,    0,  249,  249,    0,  249,  249,  249,  249,
1096   161,    0,    0,    0,    0,    0,    0,    0,    0,    0,
1097     0,    0,    0,    0,    0,    0,    0,  249,    0,  249,
1098     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
1099     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
1100     0,  249,  249,    0,    0,    0,    0,    0,  249,  249,
1101   249,  249,  249,  249,  249,  249,  249,  249,  249,  249,
1102   249,  249,  249,  249,  249,  249,    0,    0,    0,    0,
1103     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
1104     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
1105     0,  161,    0,    0,    0,    0,    0,    0,    0,    0,
1106     0,    0,    0,  279,    0,    0,    0,    0,    0,    0,
1107     0,  279,  279,  279,  279,  279,  279,  279,  279,  279,
1108   279,  279,  279,    0,    0,  161,  279,  279,  279,    0,
1109     0,    0,  279,  279,  279,  279,  279,  279,  279,  279,
1110   279,    0,  279,  279,  279,  279,  279,  279,  279,    0,
1111   279,    0,    0,    0,    0,    0,    0,    0,    0,    0,
1112     0,    0,    0,    0,    0,  279,    0,    0,    0,    0,
1113     0,    0,  279,  279,    0,  279,    0,  279,  279,  279,
1114     0,    0,  279,  279,    0,  279,  279,  279,  279,  160,
1115     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
1116     0,    0,    0,    0,    0,    0,  279,    0,  279,    0,
1117     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
1118     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
1119   279,  279,    0,    0,    0,    0,    0,  279,  279,  279,
1120   279,  279,  279,  279,  279,  279,  279,  279,  279,  279,
1121   279,  279,  279,  279,  279,    0,    0,    0,    0,    0,
1122   161,    0,    0,    0,    0,    0,    0,    0,  161,  161,
1123   161,  161,  161,  161,  161,  161,  161,  161,  161,  161,
1124   160,    0,    0,  161,  161,  161,    0,    0,    0,  161,
1125   161,  161,  161,  161,  161,  161,  161,  161,    0,  161,
1126   161,  161,  161,  161,  161,  161,    0,  161,    0,    0,
1127     0,    0,    0,    0,  160,    0,    0,    0,    0,    0,
1128     0,    0,  161,    0,    0,    0,    0,    0,    0,  161,
1129   161,    0,  161,    0,  161,  161,  161,    0,    0,  161,
1130   161,    0,  161,  161,  161,  161,  275,    0,    0,    0,
1131     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
1132     0,    0,    0,  161,    0,  161,    0,    0,    0,    0,
1133     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
1134     0,    0,    0,    0,    0,    0,    0,  161,  161,    0,
1135     0,    0,    0,    0,  161,  161,  161,  161,  161,  161,
1136   161,  161,  161,  161,  161,  161,  161,  161,  161,  161,
1137   161,  161,    0,    0,    0,    0,    0,    0,    0,    0,
1138     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
1139     0,    0,    0,    0,    0,    0,    0,  275,    0,    0,
1140     0,    0,    0,    0,    0,    0,    0,    0,    0,  160,
1141     0,    0,    0,    0,    0,    0,    0,  160,  160,  160,
1142   160,  160,  160,  160,  160,  160,  160,  160,  160,    0,
1143     0,  275,  160,  160,  160,    0,    0,    0,  160,  160,
1144   160,  160,  160,  160,  160,  160,  160,    0,  160,  160,
1145   160,  160,  160,  160,  160,    0,  160,    0,    0,    0,
1146     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
1147     0,  160,    0,    0,    0,    0,    0,    0,  160,  160,
1148     0,  160,    0,  160,  160,  160,    0,    0,  160,  160,
1149     0,  160,  160,  160,  160,   97,    0,    0,    0,    0,
1150     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
1151     0,    0,  160,    0,  160,    0,    0,    0,    0,    0,
1152     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
1153     0,    0,    0,    0,    0,    0,  160,  160,    0,    0,
1154     0,    0,    0,  160,  160,  160,  160,  160,  160,  160,
1155   160,  160,  160,  160,  160,  160,  160,  160,  160,  160,
1156   160,    0,    0,    0,    0,    0,  275,    0,    0,    0,
1157     0,    0,    0,    0,  275,  275,  275,  275,  275,  275,
1158   275,  275,  275,  275,  275,  275,   97,    0,    0,  275,
1159   275,  275,    0,    0,    0,  275,  275,  275,  275,  275,
1160   275,  275,  275,  275,    0,  275,  275,  275,  275,  275,
1161   275,  275,    0,  275,    0,    0,    0,    0,    0,    0,
1162    97,    0,    0,    0,    0,    0,    0,    0,  275,    0,
1163     0,    0,    0,    0,    0,  275,  275,    0,  275,    0,
1164   275,  275,  275,    0,    0,  275,  275,    0,  275,  275,
1165   275,  275,   99,    0,    0,    0,    0,    0,    0,    0,
1166     0,    0,    0,    0,    0,    0,    0,    0,    0,  275,
1167     0,  275,    0,    0,    0,    0,    0,    0,    0,    0,
1168     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
1169     0,    0,    0,  275,  275,    0,    0,    0,    0,    0,
1170   275,  275,  275,  275,  275,  275,  275,  275,  275,  275,
1171   275,  275,  275,  275,  275,  275,  275,  275,    0,    0,
1172     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
1173     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
1174     0,    0,    0,   99,    0,    0,    0,    0,    0,    0,
1175     0,    0,    0,    0,    0,   97,    0,    0,    0,    0,
1176     0,    0,    0,   97,   97,   97,   97,   97,   97,   97,
1177    97,   97,   97,   97,   97,    0,    0,   99,   97,   97,
1178    97,    0,    0,    0,   97,   97,   97,   97,   97,   97,
1179    97,   97,   97,    0,   97,   97,   97,   97,   97,   97,
1180    97,    0,   97,    0,    0,    0,    0,    0,    0,    0,
1181     0,    0,    0,    0,    0,    0,    0,   97,    0,    0,
1182     0,    0,    0,    0,   97,   97,    0,   97,    0,   97,
1183    97,   97,    0,    0,   97,   97,    0,   97,   97,   97,
1184    97,  247,    0,    0,    0,    0,    0,    0,    0,    0,
1185     0,    0,    0,    0,    0,    0,    0,    0,   97,    0,
1186    97,    0,    0,    0,    0,    0,    0,    0,    0,    0,
1187     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
1188     0,    0,   97,   97,    0,    0,    0,    0,    0,   97,
1189    97,   97,   97,   97,   97,   97,   97,   97,   97,   97,
1190    97,   97,   97,   97,   97,   97,   97,    0,    0,    0,
1191     0,    0,   99,    0,    0,    0,    0,    0,    0,    0,
1192    99,   99,   99,   99,   99,   99,   99,   99,   99,   99,
1193    99,   99,  247,    0,    0,   99,   99,   99,    0,    0,
1194     0,   99,   99,   99,   99,   99,   99,   99,   99,   99,
1195     0,   99,   99,   99,   99,   99,   99,   99,    0,   99,
1196     0,    0,    0,    0,    0,    0,  247,    0,    0,    0,
1197     0,    0,    0,    0,   99,    0,    0,    0,    0,    0,
1198     0,   99,   99,    0,   99,    0,   99,   99,   99,    0,
1199     0,   99,   99,    0,   99,   99,   99,   99,  257,    0,
1200     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
1201     0,    0,    0,    0,    0,   99,    0,   99,    0,    0,
1202     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
1203     0,    0,    0,    0,    0,    0,    0,    0,    0,   99,
1204    99,    0,    0,    0,    0,    0,   99,   99,   99,   99,
1205    99,   99,   99,   99,   99,   99,   99,   99,   99,   99,
1206    99,   99,   99,   99,    0,    0,    0,    0,    0,    0,
1207     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
1208     0,    0,    0,    0,    0,    0,    0,    0,    0,  257,
1209     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
1210     0,  247,    0,    0,    0,    0,    0,    0,    0,  247,
1211   247,  247,  247,  247,  247,  247,  247,  247,  247,  247,
1212   247,    0,    0,  257,  247,  247,  247,    0,    0,    0,
1213   247,  247,  247,  247,  247,  247,  247,  247,  247,    0,
1214   247,  247,  247,  247,  247,  247,  247,    0,  247,    0,
1215     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
1216     0,    0,    0,  247,    0,    0,    0,    0,    0,    0,
1217   247,  247,    0,  247,    0,  247,  247,  247,    0,    0,
1218   247,  247,    0,  247,  247,  247,  247,  273,    0,    0,
1219     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
1220     0,    0,    0,    0,  247,    0,  247,    0,    0,    0,
1221     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
1222     0,    0,    0,    0,    0,    0,    0,    0,  247,  247,
1223     0,    0,    0,    0,    0,  247,  247,  247,  247,  247,
1224   247,  247,  247,  247,  247,  247,  247,  247,  247,  247,
1225   247,  247,  247,    0,    0,    0,    0,    0,  257,    0,
1226     0,    0,    0,    0,    0,    0,  257,  257,  257,  257,
1227   257,  257,  257,  257,  257,  257,  257,  257,  273,    0,
1228     0,  257,  257,  257,    0,    0,    0,  257,  257,  257,
1229   257,  257,  257,  257,  257,  257,    0,  257,  257,  257,
1230   257,  257,  257,  257,    0,  257,    0,    0,    0,    0,
1231     0,    0,  273,    0,    0,    0,    0,    0,    0,    0,
1232   257,    0,    0,    0,    0,    0,    0,  257,  257,    0,
1233   257,    0,  257,  257,  257,    0,    0,  257,  257,    0,
1234   257,  257,  257,  257,   18,    0,    0,    0,    0,    0,
1235     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
1236     0,  257,    0,  257,    0,    0,    0,    0,    0,    0,
1237     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
1238     0,    0,    0,    0,    0,  257,  257,    0,    0,    0,
1239     0,    0,  257,  257,  257,  257,  257,  257,  257,  257,
1240   257,  257,  257,  257,  257,  257,  257,  257,  257,  257,
1241     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
1242     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
1243     0,    0,    0,    0,    0,   18,    0,    0,    0,    0,
1244     0,    0,    0,    0,    0,    0,    0,  273,    0,    0,
1245     0,    0,    0,    0,    0,  273,  273,  273,  273,  273,
1246   273,  273,  273,  273,  273,  273,  273,    0,    0,   18,
1247   273,  273,  273,    0,    0,    0,  273,  273,  273,  273,
1248   273,  273,  273,  273,  273,    0,  273,  273,  273,  273,
1249   273,  273,  273,    0,  273,    0,    0,    0,    0,    0,
1250     0,    0,    0,    0,    0,    0,    0,    0,    0,  273,
1251     0,    0,    0,    0,    0,    0,  273,  273,    0,  273,
1252     0,  273,  273,  273,    0,    0,  273,  273,    0,  273,
1253   273,  273,  273,  277,    0,    0,    0,    0,    0,    0,
1254     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
1255   273,    0,  273,    0,    0,    0,    0,    0,    0,    0,
1256     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
1257     0,    0,    0,    0,  273,  273,    0,    0,    0,    0,
1258     0,  273,  273,  273,  273,  273,  273,  273,  273,  273,
1259   273,  273,  273,  273,  273,  273,  273,  273,  273,    0,
1260     0,    0,    0,    0,   18,    0,    0,    0,    0,    0,
1261     0,    0,   18,   18,   18,   18,   18,   18,   18,   18,
1262    18,   18,   18,   18,  277,    0,    0,   18,   18,   18,
1263     0,    0,    0,   18,   18,   18,   18,   18,   18,   18,
1264    18,   18,    0,   18,   18,   18,   18,   18,   18,   18,
1265     0,   18,    0,    0,    0,    0,    0,    0,  277,    0,
1266     0,    0,    0,    0,    0,    0,   18,    0,    0,    0,
1267     0,    0,    0,   18,   18,    0,   18,    0,   18,   18,
1268    18,    0,    0,   18,   18,    0,   18,   18,   18,   18,
1269   270,    0,    0,    0,    0,    0,    0,    0,    0,    0,
1270     0,    0,    0,    0,    0,    0,    0,   18,    0,   18,
1271     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
1272     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
1273     0,   18,   18,    0,    0,    0,    0,    0,   18,   18,
1274    18,   18,   18,   18,   18,   18,   18,   18,   18,   18,
1275    18,   18,   18,   18,   18,   18,    0,    0,    0,    0,
1276     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
1277     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
1278     0,  270,    0,    0,    0,    0,    0,    0,    0,    0,
1279     0,    0,    0,  277,    0,    0,    0,    0,    0,    0,
1280     0,  277,  277,  277,  277,  277,  277,  277,  277,  277,
1281   277,  277,  277,    0,    0,  270,  277,  277,  277,    0,
1282     0,    0,  277,  277,  277,  277,  277,  277,  277,  277,
1283   277,    0,  277,  277,  277,  277,  277,  277,  277,    0,
1284   277,    0,    0,    0,    0,    0,    0,    0,    0,    0,
1285     0,    0,    0,    0,   22,  277,    0,    0,    0,    0,
1286     0,    0,  277,  277,    0,  277,    0,  277,  277,  277,
1287     0,    0,  277,  277,    0,  277,  277,  277,  277,    0,
1288     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
1289     0,    0,    0,    0,    0,    0,  277,    0,  277,    0,
1290     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
1291     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
1292   277,  277,    0,    0,    0,    0,    0,  277,  277,  277,
1293   277,  277,  277,  277,  277,  277,  277,  277,  277,  277,
1294   277,  277,  277,  277,  277,   22,    0,    0,    0,    0,
1295   270,    0,    0,    0,    0,    0,    0,    0,  270,  270,
1296   270,  270,  270,  270,  270,  270,  270,  270,  270,  270,
1297     0,    0,    0,  270,  270,  270,    0,    0,    0,  270,
1298   270,  270,  270,  270,  270,  270,  270,  270,    0,  270,
1299   270,  270,  270,  270,  270,  270,    0,  270,    0,    0,
1300     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
1301     0,   25,  270,    0,    0,    0,    0,    0,    0,  270,
1302   270,    0,  270,    0,  270,  270,  270,    0,    0,  270,
1303   270,    0,  270,  270,  270,  270,    0,    0,    0,    0,
1304     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
1305     0,    0,    0,  270,    0,  270,    0,    0,    0,    0,
1306     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
1307     0,    0,    0,    0,    0,    0,    0,  270,  270,    0,
1308     0,    0,    0,    0,  270,  270,  270,  270,  270,  270,
1309   270,  270,  270,  270,  270,  270,  270,  270,  270,  270,
1310   270,  270,   25,    0,  473,    0,    0,    0,    0,    0,
1311     0,    0,    0,    0,   22,    0,    0,  250,    0,    0,
1312     0,    0,   22,   22,   22,   22,   22,   22,   22,   22,
1313    22,   22,   22,   22,    0,    0,    0,   22,   22,   22,
1314     0,    0,    0,   22,   22,   22,   22,   22,   22,   22,
1315    22,   22,    0,   22,   22,   22,   22,   22,   22,   22,
1316     0,   22,    0,    0,    0,    0,    0,    0,    0,    0,
1317     0,    0,    0,    0,    0,    0,   22,    0,    0,    0,
1318     0,    0,    0,   22,   22,    0,   22,    0,   22,   22,
1319    22,    0,    0,   22,   22,    0,   22,    0,   22,    0,
1320     0,    0,    0,    0,    0,    0,  250,    0,    0,    0,
1321     0,    0,    0,    0,    0,    0,    0,   22,    0,   22,
1322     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
1323     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
1324     0,   22,   22,    0,    0,    0,    0,    0,   22,   22,
1325    22,   22,   22,   22,   22,   22,   22,   22,   22,   22,
1326    22,   22,   22,   22,   22,   22,    0,    0,    0,    0,
1327     0,   25,    0,    0,    0,    0,    0,    0,    0,   25,
1328    25,   25,   25,   25,   25,   25,   25,   25,   25,   25,
1329    25,    0,    0,    0,   25,   25,   25,    0,    0,    0,
1330    25,   25,   25,   25,   25,   25,   25,   25,   25,    0,
1331    25,   25,   25,   25,   25,   25,   25,    0,   25,    0,
1332     0,  471,    0,    0,    0,  472,    0,    0,    0,    0,
1333     0,    0,    0,   25,  595,  347,    0,    0,    0,    0,
1334    25,   25,    0,   25,    0,   25,   25,   25,    0,    0,
1335    25,   25,    0,   25,    0,   25,    0,    0,    0,    0,
1336     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
1337     0,    0,    0,    0,   25,    0,   25,  201,  202,    0,
1338     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
1339   201,  202,    0,    0,    0,    0,    0,    0,   25,   25,
1340    59,    0,    0,    0,    0,   25,   25,   25,   25,   25,
1341    25,   25,   25,   25,   25,   25,   25,   25,   25,   25,
1342    25,   25,   25,    0,  347,    0,    0,    0,    0,    0,
1343     0,    0,    0,  239,  240,  241,  242,  243,    0,  244,
1344   205,  245,  246,  247,  248,  249,  239,  240,  241,  242,
1345   243,    0,  244,  205,  245,  246,  247,  248,  249,    0,
1346     0,    0,    0,    0,  207,  208,    0,    0,  474,  475,
1347   712,  713,    0,    0,  251,    0,    0,  207,  208,  201,
1348   202,  714,  715,  716,    0,    0,    0,  251,    0,    0,
1349     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
1350     0,    0,    0,    0,  717,    0,  718,  719,  720,  721,
1351   722,  723,  724,  725,  726,  727,    0,    0,    0,    0,
1352     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
1353     0,    0,    0,    0,    0,  239,  240,  241,  242,  243,
1354   192,  244,  205,  245,  246,  247,  248,  249,    0,    0,
1355     0,  193,  194,    0,    0,    0,    0,    0,    0,    0,
1356     0,    0,    0,    0,    0,    0,  207,  208,    0,   15,
1357     0,    0,    0,    0,    0,    0,  251,   16,    0,    0,
1358    17,   18,   19,   20,   21,   22,   23,   24,   25,    0,
1359     0,    0,   26,   27,   28,    0,    0,    0,   29,   30,
1360    31,   32,   33,   34,   35,   36,   37,    0,   38,   39,
1361    40,   41,   42,   43,   44,    0,   45,    0,    0,    0,
1362     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
1363     0,   46,    0,    0,    0,    0,    0,    0,   47,   48,
1364     0,   49,    0,   50,   51,   52,    0,    0,   53,   54,
1365     0,   55,    0,   56,    0,    0,    0,    0,    0,    0,
1366     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
1367     0,    0,   57,    0,   58,    0,    0,    0,    0,    0,
1368     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
1369     0,    0,    0,    0,    0,    0,   60,   61,    0,    0,
1370     0,    0,    0,   62,   63,   64,   65,   66,   67,   68,
1371    69,   70,   71,   72,   73,   74,   75,   76,   77,   78,
1372    79,
1373 };
1374 short yycheck[] = {                                      86,
1375    59,  169,  136,  134,   40,   40,  144,  295,  142,  143,
1376   395,   40,  146,  147,  148,   40,  497,   40,   40,   40,
1377    40,  159,  160,  161,  158,   40,   40,   37,  166,   40,
1378   328,  328,   42,   43,   40,   45,  408,   47,   40,  549,
1379   174,   40,  547,   40,   91,   40,  402,  403,   40,   40,
1380   545,  185,    0,   40,  185,  125,  432,  687,  313,   44,
1381   313,   40,   40,  313,  149,  150,  257,  355,   44,  399,
1382    44,  359,   44,  258,   58,   44,   44,  433,   44,   40,
1383    40,   37,  167,   93,  259,   44,   42,   43,   58,   45,
1384    46,   47,   44,   44,  123,   44,   40,  258,  157,  361,
1385   185,  262,  263,  152,  153,  154,  324,  241,  242,  259,
1386   244,   37,  123,   58,  589,   37,   42,   43,  177,   45,
1387    42,   47,  313,  385,  183,   47,  185,  385,  313,   37,
1388   385,   40,  385,  301,   42,  385,   44,   40,  313,   47,
1389   125,  396,  397,  309,  123,  620,   91,  313,   40,  125,
1390   385,  125,  313,  125,  239,  240,  125,  125,  385,  125,
1391   641,  396,  397,  313,  313,  795,  125,   93,   41,   58,
1392    43,  320,   45,  125,  125,   41,  125,   37,   44,   44,
1393   661,    0,   42,   43,   37,   45,  308,   47,  325,   42,
1394    43,  313,   45,  703,   47,   37,  701,  328,   91,   41,
1395    42,   43,   40,   45,  699,   47,   41,  258,  346,   44,
1396    37,  262,  263,  260,   41,   42,   43,   44,   45,  311,
1397    47,  313,  258,  361,  358,  393,  360,   58,  257,  313,
1398   368,  315,  316,  521,  372,  258,  370,  371,  376,  262,
1399    93,  300,   58,  258,  541,  543,  257,  306,  307,  336,
1400   309,  310,  311,  312,  313,  585,  258,  629,   58,  258,
1401   262,  258,  396,  262,  263,  257,  622,  258,  327,  328,
1402   257,  262,  263,  343,  650,  345,  407,  298,  257,  257,
1403   339,   41,   58,  421,   44,  123,   58,   41,  313,  348,
1404    44,  313,  314,  313,  353,   58,  257,  257,  357,  313,
1405   314,   58,  313,  317,  318,   58,  125,  313,   58,  308,
1406   309,  310,   58,  257,  313,  314,  313,  314,  313,  378,
1407   454,  269,  270,   58,  323,  264,  265,  266,  267,   58,
1408   464,  465,   58,  621,  313,  384,  269,  270,  337,  338,
1409    58,  390,  391,  392,  286,  287,  288,  346,  347,  348,
1410   349,  350,  313,  313,  257,  318,  319,  367,  394,  395,
1411   419,   58,  376,  362,  845,  364,   58,  402,  403,  313,
1412   385,  394,  395,    0,  385,  404,  405,  376,  763,  394,
1413   395,  396,  397,  312,  313,  341,  400,  401,  385,  298,
1414   390,  391,  394,  395,  430,  406,  407,  394,  395,  396,
1415   397,  400,  401,   58,  313,  314,  385,  430,  539,  697,
1416   313,   38,  404,  405,   41,  430,   43,   44,   45,   46,
1417   258,  313,  314,   58,  385,  385,  317,  318,  430,  408,
1418   409,  430,  343,  430,  345,   58,  274,   58,  276,   58,
1419    58,  385,  280,  281,  282,  406,  407,  615,  408,  409,
1420   269,  270,  590,   58,   58,   58,  594,   58,   58,  597,
1421   598,   58,   58,   37,   91,  524,   93,  376,   42,   43,
1422    58,   45,   58,   47,   58,  313,  314,   58,  537,  647,
1423   648,  649,  385,   58,  376,   58,  617,  387,   40,   58,
1424    61,  400,  401,   44,  332,   37,  123,   40,  125,   61,
1425    42,   43,  790,   45,   91,   47,   40,  123,  400,  401,
1426    46,   91,  800,   91,   44,  646,   44,   37,   44,   93,
1427   384,  652,   42,   43,  343,   45,  345,   47,  258,   40,
1428     0,   91,  257,  592,  593,   37,  374,  596,  376,   44,
1429    42,   43,   91,   45,   37,   47,   44,  385,  257,   42,
1430    43,   93,   45,  841,   47,   44,  394,  395,  396,  397,
1431    91,   44,  400,  401,  402,  403,   44,   44,   38,   44,
1432    38,   41,   37,   43,   44,   45,   46,   42,   43,   40,
1433    45,   40,   47,   40,   40,  716,  754,   40,  258,   37,
1434    91,   93,  430,   41,   42,   43,  655,   45,   44,   47,
1435    93,   44,   44,   40,  258,   37,  665,  775,  776,  777,
1436    42,   43,   37,   45,   44,   47,   41,   42,   43,   44,
1437    45,   91,   47,   93,   37,   44,  260,   44,   93,   42,
1438    43,   44,   45,  260,   47,   44,  258,   44,   44,   44,
1439    44,  268,  269,  270,  271,  272,  273,  274,  275,  276,
1440   277,  278,  279,  123,   44,  125,  283,  284,  285,  258,
1441    44,   93,  289,  290,  291,  292,  293,  294,  295,  296,
1442   297,   44,  299,  300,  301,  302,  303,  304,  305,  738,
1443   307,   44,  395,   44,  397,   93,  399,   44,  401,   41,
1444   403,   41,  405,   44,  407,  322,  409,   44,  411,   58,
1445    58,  257,  329,  330,   58,  332,   93,  334,  335,  336,
1446    58,  257,  339,  340,  341,  342,  343,  344,  345,    0,
1447   854,   44,   37,  386,  783,   44,  860,   42,   43,   44,
1448    45,   44,   47,   44,  259,  312,  363,   44,  365,   44,
1449   367,  382,  312,  830,   41,   44,   44,   93,  258,  321,
1450    44,   44,   44,  321,   44,  125,  843,  257,   44,   41,
1451   387,  388,  258,   44,   44,  385,   44,  394,  395,  396,
1452   397,  398,  399,  400,  401,  402,  403,  404,  405,  406,
1453   407,  408,  409,  410,  411,  124,   44,  385,   41,   44,
1454   260,   91,   44,   44,   44,   44,   44,   44,  268,  269,
1455   270,  271,  272,  273,  274,  275,  276,  277,  278,  279,
1456    91,  258,   93,  283,  284,  285,   91,   44,   44,  289,
1457   290,  291,  292,  293,  294,  295,  296,  297,   44,  299,
1458   300,  301,  302,  303,  304,  305,  258,  307,  258,   44,
1459   258,   44,  123,   44,  125,   44,  312,   44,  258,   44,
1460    44,  331,  322,   44,  257,   41,   46,   44,   58,  329,
1461   330,  258,  332,   40,  334,  335,  336,   41,   44,  339,
1462   340,  341,  342,  343,  344,  345,  388,  257,  386,   41,
1463    58,   41,  394,   58,  396,   58,  398,   58,  400,   58,
1464   402,   44,  404,  363,  406,  365,  408,  367,  410,  259,
1465    44,  312,   44,   40,   44,  258,  321,  321,    0,  258,
1466    44,   44,  385,   44,   44,  123,   44,  387,  388,   44,
1467    41,   41,   41,   41,  394,  395,  396,  397,  398,  399,
1468   400,  401,  402,  403,  404,  405,  406,  407,  408,  409,
1469   410,  411,  258,   44,   93,   44,   38,  388,  258,   41,
1470   258,   44,   44,  394,  395,  396,  397,  398,  399,  400,
1471   401,  402,  403,  404,  405,  406,  407,  408,  409,  410,
1472   411,   44,   44,  258,  258,   44,   41,   58,   58,  260,
1473   259,   58,   58,  257,  286,   41,   44,  268,  269,  270,
1474   271,  272,  273,  274,  275,  276,  277,  278,  279,   91,
1475    44,  258,  283,  284,  285,   41,   44,   41,  289,  290,
1476   291,  292,  293,  294,  295,  296,  297,   41,  299,  300,
1477   301,  302,  303,  304,  305,   44,  307,  261,   58,  125,
1478    44,   41,   44,  125,  258,   44,  313,  258,  258,  124,
1479    58,  322,  259,  286,   41,  258,   41,   41,  329,  330,
1480    41,  332,   44,  334,  335,  336,   41,  383,  339,  340,
1481    41,  342,  343,  344,  345,   41,   44,   44,   41,   44,
1482     0,    0,   41,   41,  386,  125,   93,   41,   44,   41,
1483   123,  123,  363,   41,  365,  125,  677,  794,  602,  652,
1484   761,  191,  820,  449,   48,  832,  248,    0,  442,   54,
1485   859,  168,  419,  753,  395,    6,  387,  388,  319,  431,
1486   766,  163,  138,  394,  395,  396,  397,  398,  399,  400,
1487   401,  402,  403,  404,  405,  406,  407,  408,  409,  410,
1488   411,  340,  629,  454,   -1,   -1,   -1,   -1,   41,   -1,
1489    -1,   44,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
1490    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
1491    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  260,   -1,
1492    -1,   -1,   -1,   -1,   -1,   -1,  268,  269,  270,  271,
1493   272,  273,  274,  275,  276,  277,  278,  279,   91,   -1,
1494    -1,  283,  284,  285,   -1,   -1,   -1,  289,  290,  291,
1495   292,  293,  294,  295,  296,  297,   -1,  299,  300,  301,
1496   302,  303,  304,  305,   -1,  307,   -1,   -1,   -1,   -1,
1497    -1,   -1,  125,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
1498   322,   -1,   -1,   -1,   -1,   -1,   -1,  329,  330,   -1,
1499   332,   -1,  334,  335,  336,   -1,   -1,  339,  340,   -1,
1500   342,  343,  344,  345,    0,   -1,   -1,   -1,   -1,   -1,
1501    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
1502    -1,  363,   -1,  365,   -1,   -1,   -1,   -1,   -1,   -1,
1503    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
1504    -1,   -1,   -1,   -1,   -1,  387,  388,   -1,   44,   -1,
1505    -1,   -1,  394,  395,  396,  397,  398,  399,  400,  401,
1506   402,  403,  404,  405,  406,  407,  408,  409,  410,  411,
1507    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
1508    -1,   -1,   -1,   -1,   -1,   -1,   -1,   40,   -1,   -1,
1509    -1,   -1,   -1,   -1,   -1,   91,   -1,   -1,   -1,   -1,
1510    -1,   -1,   -1,   -1,   -1,   -1,   -1,  260,   -1,   -1,
1511    -1,   -1,   -1,   -1,   -1,  268,  269,  270,  271,  272,
1512   273,  274,  275,  276,  277,  278,  279,  123,   -1,  125,
1513   283,  284,  285,   -1,   -1,   -1,  289,  290,  291,  292,
1514   293,  294,  295,  296,  297,   -1,  299,  300,  301,  302,
1515   303,  304,  305,   -1,  307,   -1,   -1,   -1,   -1,   -1,
1516    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  322,
1517    -1,   -1,   -1,   -1,   -1,   -1,  329,  330,   -1,  332,
1518    -1,  334,  335,  336,   -1,   -1,  339,  340,   -1,  342,
1519   343,  344,  345,    0,   -1,   -1,   -1,   -1,   -1,   -1,
1520    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
1521   363,   -1,  365,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
1522    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
1523    -1,   -1,   -1,   -1,  387,  388,   -1,   44,   -1,   -1,
1524    -1,  394,  395,  396,  397,  398,  399,  400,  401,  402,
1525   403,  404,  405,  406,  407,  408,  409,  410,  411,   -1,
1526    -1,   -1,   -1,   -1,  260,   -1,   -1,   -1,   -1,   -1,
1527    -1,   -1,  268,  269,  270,  271,  272,  273,  274,  275,
1528   276,  277,  278,  279,   91,   -1,   -1,  283,  284,  285,
1529    -1,   -1,   -1,  289,  290,  291,  292,  293,  294,  295,
1530   296,  297,   -1,  299,  300,  301,  302,  303,  304,  305,
1531    -1,  307,   -1,   -1,   -1,   -1,  123,   -1,  125,   -1,
1532    -1,   -1,   -1,   -1,   -1,   -1,  322,   -1,   -1,   -1,
1533    -1,   -1,   -1,  329,  330,   -1,  332,   -1,  334,  335,
1534   336,   -1,   -1,  339,  340,   -1,  342,  343,  344,  345,
1535     0,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  312,
1536   313,  314,   -1,   -1,   -1,   -1,   -1,  363,   -1,  365,
1537    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
1538    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
1539    -1,  387,  388,   -1,   44,   -1,   -1,   -1,  394,  395,
1540   396,  397,  398,  399,  400,  401,  402,  403,  404,  405,
1541   406,  407,  408,  409,  410,  411,  369,  370,  371,  372,
1542   373,   -1,  375,  376,  377,  378,  379,  380,  381,   -1,
1543    -1,   -1,   -1,   40,   -1,   -1,   -1,   -1,   -1,   -1,
1544    -1,   91,   -1,   -1,   -1,   -1,   -1,  400,  401,   -1,
1545    -1,   -1,   -1,  260,   -1,   -1,   -1,  410,   -1,   -1,
1546    -1,  268,  269,  270,  271,  272,  273,  274,  275,  276,
1547   277,  278,  279,  123,   -1,  125,  283,  284,  285,   -1,
1548    -1,   -1,  289,  290,  291,  292,  293,  294,  295,  296,
1549   297,   -1,  299,  300,  301,  302,  303,  304,  305,   -1,
1550   307,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
1551    -1,   -1,   -1,   -1,   -1,  322,   -1,   -1,   -1,   -1,
1552    -1,   -1,  329,  330,   -1,  332,   -1,  334,  335,  336,
1553    -1,   -1,  339,  340,   -1,  342,  343,  344,  345,    0,
1554    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
1555    -1,   -1,   -1,   -1,   -1,   -1,  363,   -1,  365,   -1,
1556    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
1557    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
1558   387,  388,   -1,   44,   -1,   -1,   -1,  394,  395,  396,
1559   397,  398,  399,  400,  401,  402,  403,  404,  405,  406,
1560   407,  408,  409,  410,  411,   -1,   -1,   -1,   -1,   -1,
1561   260,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  268,  269,
1562   270,  271,  272,  273,  274,  275,  276,  277,  278,  279,
1563    91,   -1,   -1,  283,  284,  285,   -1,   -1,   -1,  289,
1564   290,  291,  292,  293,  294,  295,  296,  297,   -1,  299,
1565   300,  301,  302,  303,  304,  305,   -1,  307,   -1,   -1,
1566    -1,   -1,  123,   -1,  125,   -1,   -1,   -1,   -1,   -1,
1567    -1,   -1,  322,   -1,   -1,   -1,   -1,   -1,   -1,  329,
1568   330,   -1,  332,   -1,  334,  335,  336,   -1,   -1,  339,
1569   340,   -1,  342,  343,  344,  345,    0,   -1,   -1,   -1,
1570    -1,   -1,   -1,   -1,   -1,   -1,  313,  314,   -1,   -1,
1571    -1,   -1,   -1,  363,   -1,  365,   -1,   -1,   -1,   -1,
1572    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
1573    -1,   -1,   -1,   -1,   -1,   -1,   -1,  387,  388,   -1,
1574    -1,   -1,   -1,   -1,  394,  395,  396,  397,  398,  399,
1575   400,  401,  402,  403,  404,  405,  406,  407,  408,  409,
1576   410,  411,  369,  370,  371,  372,  373,   -1,  375,  376,
1577   377,  378,  379,  380,  381,   -1,   -1,   -1,   -1,   -1,
1578    -1,   -1,   -1,   -1,   -1,   -1,   -1,   91,   -1,   -1,
1579    -1,   -1,   -1,  400,  401,   -1,   -1,   -1,   -1,  260,
1580    -1,   -1,   -1,  410,   -1,   -1,   -1,  268,  269,  270,
1581   271,  272,  273,  274,  275,  276,  277,  278,  279,  123,
1582    -1,  125,  283,  284,  285,   -1,   -1,   -1,  289,  290,
1583   291,  292,  293,  294,  295,  296,  297,   -1,  299,  300,
1584   301,  302,  303,  304,  305,   -1,  307,   -1,   -1,   -1,
1585    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
1586    -1,  322,   -1,   -1,   -1,   -1,   -1,   -1,  329,  330,
1587    -1,  332,   -1,  334,  335,  336,   -1,   -1,  339,  340,
1588    -1,  342,  343,  344,  345,    0,   -1,   -1,   -1,   -1,
1589    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
1590    -1,   -1,  363,   -1,  365,   -1,   -1,   -1,   -1,   -1,
1591    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
1592    -1,   -1,   -1,   -1,   -1,   -1,  387,  388,   -1,   -1,
1593    -1,   -1,   -1,  394,  395,  396,  397,  398,  399,  400,
1594   401,  402,  403,  404,  405,  406,  407,  408,  409,  410,
1595   411,   -1,   -1,   -1,   -1,   -1,  260,   -1,   -1,   -1,
1596    -1,   -1,   -1,   -1,  268,  269,  270,  271,  272,  273,
1597   274,  275,  276,  277,  278,  279,   91,   -1,   -1,  283,
1598   284,  285,   -1,   -1,   -1,  289,  290,  291,  292,  293,
1599   294,  295,  296,  297,   -1,  299,  300,  301,  302,  303,
1600   304,  305,   -1,  307,   -1,   -1,   -1,   -1,  123,   -1,
1601   125,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  322,   -1,
1602    -1,   -1,   -1,   -1,   -1,  329,  330,   -1,  332,   -1,
1603   334,  335,  336,   -1,   -1,  339,  340,   -1,  342,  343,
1604   344,  345,    0,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
1605    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  363,
1606    -1,  365,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
1607    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
1608    -1,   -1,   -1,  387,  388,   -1,   -1,   -1,   -1,   -1,
1609   394,  395,  396,  397,  398,  399,  400,  401,  402,  403,
1610   404,  405,  406,  407,  408,  409,  410,  411,   -1,   -1,
1611    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
1612    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
1613    -1,   -1,   -1,   91,   -1,   -1,   -1,   -1,   -1,   -1,
1614    -1,   -1,   -1,   -1,   -1,  260,   -1,   -1,   -1,   -1,
1615    -1,   -1,   -1,  268,  269,  270,  271,  272,  273,  274,
1616   275,  276,  277,  278,  279,   -1,   -1,  125,  283,  284,
1617   285,   -1,   -1,   -1,  289,  290,  291,  292,  293,  294,
1618   295,  296,  297,   -1,  299,  300,  301,  302,  303,  304,
1619   305,   -1,  307,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
1620    -1,   -1,   -1,   -1,   -1,   -1,   -1,  322,   -1,   -1,
1621    -1,   -1,   -1,   -1,  329,  330,   -1,  332,   -1,  334,
1622   335,  336,   -1,   -1,  339,  340,   -1,  342,  343,  344,
1623   345,    0,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
1624    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  363,   -1,
1625   365,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
1626    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
1627    -1,   -1,  387,  388,   -1,   -1,   -1,   -1,   -1,  394,
1628   395,  396,  397,  398,  399,  400,  401,  402,  403,  404,
1629   405,  406,  407,  408,  409,  410,  411,   -1,   -1,   -1,
1630    -1,   -1,  260,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
1631   268,  269,  270,  271,  272,  273,  274,  275,  276,  277,
1632   278,  279,   91,   -1,   -1,  283,  284,  285,   -1,   -1,
1633    -1,  289,  290,  291,  292,  293,  294,  295,  296,  297,
1634    -1,  299,  300,  301,  302,  303,  304,  305,   -1,  307,
1635    -1,   -1,   -1,   -1,  123,   -1,  125,   -1,   -1,   -1,
1636    -1,   -1,   -1,   -1,  322,   -1,   -1,   -1,   -1,   -1,
1637    -1,  329,  330,  331,  332,   -1,  334,  335,  336,   -1,
1638    -1,  339,  340,   -1,  342,  343,  344,  345,    0,   -1,
1639    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
1640    -1,   -1,   -1,   -1,   -1,  363,   -1,  365,   -1,   -1,
1641    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
1642    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  387,
1643   388,   -1,   -1,   -1,   -1,   -1,  394,  395,  396,  397,
1644   398,  399,  400,  401,  402,  403,  404,  405,  406,  407,
1645   408,  409,  410,  411,   -1,   -1,   -1,   -1,   -1,   -1,
1646    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
1647    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   91,
1648    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
1649    -1,  260,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  268,
1650   269,  270,  271,  272,  273,  274,  275,  276,  277,  278,
1651   279,  123,   -1,  125,  283,  284,  285,   -1,   -1,   -1,
1652   289,  290,  291,  292,  293,  294,  295,  296,  297,   -1,
1653   299,  300,  301,  302,  303,  304,  305,   -1,  307,   -1,
1654    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
1655    -1,   -1,   -1,  322,   -1,   -1,   -1,   -1,   -1,   -1,
1656   329,  330,   -1,  332,   -1,  334,  335,  336,   -1,   -1,
1657   339,  340,   -1,  342,  343,  344,  345,    0,   -1,   -1,
1658    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
1659    -1,   -1,   -1,   -1,  363,   -1,  365,   -1,   -1,   -1,
1660    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
1661    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  387,  388,
1662    -1,   -1,   -1,   -1,   -1,  394,  395,  396,  397,  398,
1663   399,  400,  401,  402,  403,  404,  405,  406,  407,  408,
1664   409,  410,  411,   -1,   -1,   -1,   -1,   -1,  260,   -1,
1665    -1,   -1,   -1,   -1,   -1,   -1,  268,  269,  270,  271,
1666   272,  273,  274,  275,  276,  277,  278,  279,   91,   -1,
1667    -1,  283,  284,  285,   -1,   -1,   -1,  289,  290,  291,
1668   292,  293,  294,  295,  296,  297,   -1,  299,  300,  301,
1669   302,  303,  304,  305,   -1,  307,   -1,   -1,   -1,   -1,
1670   123,   -1,  125,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
1671   322,   -1,   -1,   -1,   -1,   -1,   -1,  329,  330,   -1,
1672   332,   -1,  334,  335,  336,   -1,   -1,  339,  340,   -1,
1673   342,  343,  344,  345,    0,   -1,   -1,   -1,   -1,   -1,
1674    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
1675    -1,  363,   -1,  365,   -1,   -1,   -1,   -1,   -1,   -1,
1676    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
1677    -1,   -1,   -1,   -1,   -1,  387,  388,   -1,   -1,   -1,
1678    -1,   -1,  394,  395,  396,  397,  398,  399,  400,  401,
1679   402,  403,  404,  405,  406,  407,  408,  409,  410,  411,
1680    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
1681    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
1682    -1,   -1,   -1,   -1,   -1,   91,   -1,   -1,   -1,   -1,
1683    -1,   -1,   -1,   -1,   -1,   -1,   -1,  260,   -1,   -1,
1684    -1,   -1,   -1,   -1,   -1,  268,  269,  270,  271,  272,
1685   273,  274,  275,  276,  277,  278,  279,   -1,   -1,  125,
1686   283,  284,  285,   -1,   -1,   -1,  289,  290,  291,  292,
1687   293,  294,  295,  296,  297,   -1,  299,  300,  301,  302,
1688   303,  304,  305,   -1,  307,   -1,   -1,   -1,   -1,   -1,
1689    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  322,
1690    -1,   -1,   -1,   -1,   -1,   -1,  329,  330,   -1,  332,
1691    -1,  334,  335,  336,   -1,   -1,  339,  340,   -1,  342,
1692   343,  344,  345,    0,   -1,   -1,   -1,   -1,   -1,   -1,
1693    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
1694   363,   -1,  365,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
1695    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
1696    -1,   -1,   -1,   -1,  387,  388,   -1,   -1,   -1,   -1,
1697    -1,  394,  395,  396,  397,  398,  399,  400,  401,  402,
1698   403,  404,  405,  406,  407,  408,  409,  410,  411,   -1,
1699    -1,   -1,   -1,   -1,  260,   -1,   -1,   -1,   -1,   -1,
1700    -1,   -1,  268,  269,  270,  271,  272,  273,  274,  275,
1701   276,  277,  278,  279,   91,   -1,   -1,  283,  284,  285,
1702    -1,   -1,   -1,  289,  290,  291,  292,  293,  294,  295,
1703   296,  297,   -1,  299,  300,  301,  302,  303,  304,  305,
1704    -1,  307,   -1,   -1,   -1,   -1,   -1,   -1,  125,   -1,
1705    -1,   -1,   -1,   -1,   -1,   -1,  322,   -1,   -1,   -1,
1706    -1,   -1,   -1,  329,  330,   -1,  332,   -1,  334,  335,
1707   336,   -1,   -1,  339,  340,   -1,  342,  343,  344,  345,
1708     0,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
1709    -1,   -1,   -1,   -1,   -1,   -1,   -1,  363,   -1,  365,
1710    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
1711    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
1712    -1,  387,  388,   -1,   -1,   -1,   -1,   -1,  394,  395,
1713   396,  397,  398,  399,  400,  401,  402,  403,  404,  405,
1714   406,  407,  408,  409,  410,  411,   -1,   -1,   -1,   -1,
1715    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
1716    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
1717    -1,   91,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
1718    -1,   -1,   -1,  260,   -1,   -1,   -1,   -1,   -1,   -1,
1719    -1,  268,  269,  270,  271,  272,  273,  274,  275,  276,
1720   277,  278,  279,   -1,   -1,  125,  283,  284,  285,   -1,
1721    -1,   -1,  289,  290,  291,  292,  293,  294,  295,  296,
1722   297,   -1,  299,  300,  301,  302,  303,  304,  305,   -1,
1723   307,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
1724    -1,   -1,   -1,   -1,   -1,  322,   -1,   -1,   -1,   -1,
1725    -1,   -1,  329,  330,   -1,  332,   -1,  334,  335,  336,
1726    -1,   -1,  339,  340,   -1,  342,  343,  344,  345,    0,
1727    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
1728    -1,   -1,   -1,   -1,   -1,   -1,  363,   -1,  365,   -1,
1729    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
1730    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
1731   387,  388,   -1,   -1,   -1,   -1,   -1,  394,  395,  396,
1732   397,  398,  399,  400,  401,  402,  403,  404,  405,  406,
1733   407,  408,  409,  410,  411,   -1,   -1,   -1,   -1,   -1,
1734   260,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  268,  269,
1735   270,  271,  272,  273,  274,  275,  276,  277,  278,  279,
1736    91,   -1,   -1,  283,  284,  285,   -1,   -1,   -1,  289,
1737   290,  291,  292,  293,  294,  295,  296,  297,   -1,  299,
1738   300,  301,  302,  303,  304,  305,   -1,  307,   -1,   -1,
1739    -1,   -1,   -1,   -1,  125,   -1,   -1,   -1,   -1,   -1,
1740    -1,   -1,  322,   -1,   -1,   -1,   -1,   -1,   -1,  329,
1741   330,   -1,  332,   -1,  334,  335,  336,   -1,   -1,  339,
1742   340,   -1,  342,  343,  344,  345,    0,   -1,   -1,   -1,
1743    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
1744    -1,   -1,   -1,  363,   -1,  365,   -1,   -1,   -1,   -1,
1745    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
1746    -1,   -1,   -1,   -1,   -1,   -1,   -1,  387,  388,   -1,
1747    -1,   -1,   -1,   -1,  394,  395,  396,  397,  398,  399,
1748   400,  401,  402,  403,  404,  405,  406,  407,  408,  409,
1749   410,  411,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
1750    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
1751    -1,   -1,   -1,   -1,   -1,   -1,   -1,   91,   -1,   -1,
1752    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  260,
1753    -1,   -1,   -1,   -1,   -1,   -1,   -1,  268,  269,  270,
1754   271,  272,  273,  274,  275,  276,  277,  278,  279,   -1,
1755    -1,  125,  283,  284,  285,   -1,   -1,   -1,  289,  290,
1756   291,  292,  293,  294,  295,  296,  297,   -1,  299,  300,
1757   301,  302,  303,  304,  305,   -1,  307,   -1,   -1,   -1,
1758    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
1759    -1,  322,   -1,   -1,   -1,   -1,   -1,   -1,  329,  330,
1760    -1,  332,   -1,  334,  335,  336,   -1,   -1,  339,  340,
1761    -1,  342,  343,  344,  345,    0,   -1,   -1,   -1,   -1,
1762    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
1763    -1,   -1,  363,   -1,  365,   -1,   -1,   -1,   -1,   -1,
1764    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
1765    -1,   -1,   -1,   -1,   -1,   -1,  387,  388,   -1,   -1,
1766    -1,   -1,   -1,  394,  395,  396,  397,  398,  399,  400,
1767   401,  402,  403,  404,  405,  406,  407,  408,  409,  410,
1768   411,   -1,   -1,   -1,   -1,   -1,  260,   -1,   -1,   -1,
1769    -1,   -1,   -1,   -1,  268,  269,  270,  271,  272,  273,
1770   274,  275,  276,  277,  278,  279,   91,   -1,   -1,  283,
1771   284,  285,   -1,   -1,   -1,  289,  290,  291,  292,  293,
1772   294,  295,  296,  297,   -1,  299,  300,  301,  302,  303,
1773   304,  305,   -1,  307,   -1,   -1,   -1,   -1,   -1,   -1,
1774   125,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  322,   -1,
1775    -1,   -1,   -1,   -1,   -1,  329,  330,   -1,  332,   -1,
1776   334,  335,  336,   -1,   -1,  339,  340,   -1,  342,  343,
1777   344,  345,    0,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
1778    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  363,
1779    -1,  365,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
1780    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
1781    -1,   -1,   -1,  387,  388,   -1,   -1,   -1,   -1,   -1,
1782   394,  395,  396,  397,  398,  399,  400,  401,  402,  403,
1783   404,  405,  406,  407,  408,  409,  410,  411,   -1,   -1,
1784    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
1785    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
1786    -1,   -1,   -1,   91,   -1,   -1,   -1,   -1,   -1,   -1,
1787    -1,   -1,   -1,   -1,   -1,  260,   -1,   -1,   -1,   -1,
1788    -1,   -1,   -1,  268,  269,  270,  271,  272,  273,  274,
1789   275,  276,  277,  278,  279,   -1,   -1,  125,  283,  284,
1790   285,   -1,   -1,   -1,  289,  290,  291,  292,  293,  294,
1791   295,  296,  297,   -1,  299,  300,  301,  302,  303,  304,
1792   305,   -1,  307,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
1793    -1,   -1,   -1,   -1,   -1,   -1,   -1,  322,   -1,   -1,
1794    -1,   -1,   -1,   -1,  329,  330,   -1,  332,   -1,  334,
1795   335,  336,   -1,   -1,  339,  340,   -1,  342,  343,  344,
1796   345,    0,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
1797    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  363,   -1,
1798   365,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
1799    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
1800    -1,   -1,  387,  388,   -1,   -1,   -1,   -1,   -1,  394,
1801   395,  396,  397,  398,  399,  400,  401,  402,  403,  404,
1802   405,  406,  407,  408,  409,  410,  411,   -1,   -1,   -1,
1803    -1,   -1,  260,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
1804   268,  269,  270,  271,  272,  273,  274,  275,  276,  277,
1805   278,  279,   91,   -1,   -1,  283,  284,  285,   -1,   -1,
1806    -1,  289,  290,  291,  292,  293,  294,  295,  296,  297,
1807    -1,  299,  300,  301,  302,  303,  304,  305,   -1,  307,
1808    -1,   -1,   -1,   -1,   -1,   -1,  125,   -1,   -1,   -1,
1809    -1,   -1,   -1,   -1,  322,   -1,   -1,   -1,   -1,   -1,
1810    -1,  329,  330,   -1,  332,   -1,  334,  335,  336,   -1,
1811    -1,  339,  340,   -1,  342,  343,  344,  345,    0,   -1,
1812    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
1813    -1,   -1,   -1,   -1,   -1,  363,   -1,  365,   -1,   -1,
1814    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
1815    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  387,
1816   388,   -1,   -1,   -1,   -1,   -1,  394,  395,  396,  397,
1817   398,  399,  400,  401,  402,  403,  404,  405,  406,  407,
1818   408,  409,  410,  411,   -1,   -1,   -1,   -1,   -1,   -1,
1819    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
1820    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   91,
1821    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
1822    -1,  260,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  268,
1823   269,  270,  271,  272,  273,  274,  275,  276,  277,  278,
1824   279,   -1,   -1,  125,  283,  284,  285,   -1,   -1,   -1,
1825   289,  290,  291,  292,  293,  294,  295,  296,  297,   -1,
1826   299,  300,  301,  302,  303,  304,  305,   -1,  307,   -1,
1827    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
1828    -1,   -1,   -1,  322,   -1,   -1,   -1,   -1,   -1,   -1,
1829   329,  330,   -1,  332,   -1,  334,  335,  336,   -1,   -1,
1830   339,  340,   -1,  342,  343,  344,  345,    0,   -1,   -1,
1831    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
1832    -1,   -1,   -1,   -1,  363,   -1,  365,   -1,   -1,   -1,
1833    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
1834    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  387,  388,
1835    -1,   -1,   -1,   -1,   -1,  394,  395,  396,  397,  398,
1836   399,  400,  401,  402,  403,  404,  405,  406,  407,  408,
1837   409,  410,  411,   -1,   -1,   -1,   -1,   -1,  260,   -1,
1838    -1,   -1,   -1,   -1,   -1,   -1,  268,  269,  270,  271,
1839   272,  273,  274,  275,  276,  277,  278,  279,   91,   -1,
1840    -1,  283,  284,  285,   -1,   -1,   -1,  289,  290,  291,
1841   292,  293,  294,  295,  296,  297,   -1,  299,  300,  301,
1842   302,  303,  304,  305,   -1,  307,   -1,   -1,   -1,   -1,
1843    -1,   -1,  125,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
1844   322,   -1,   -1,   -1,   -1,   -1,   -1,  329,  330,   -1,
1845   332,   -1,  334,  335,  336,   -1,   -1,  339,  340,   -1,
1846   342,  343,  344,  345,    0,   -1,   -1,   -1,   -1,   -1,
1847    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
1848    -1,  363,   -1,  365,   -1,   -1,   -1,   -1,   -1,   -1,
1849    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
1850    -1,   -1,   -1,   -1,   -1,  387,  388,   -1,   -1,   -1,
1851    -1,   -1,  394,  395,  396,  397,  398,  399,  400,  401,
1852   402,  403,  404,  405,  406,  407,  408,  409,  410,  411,
1853    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
1854    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
1855    -1,   -1,   -1,   -1,   -1,   91,   -1,   -1,   -1,   -1,
1856    -1,   -1,   -1,   -1,   -1,   -1,   -1,  260,   -1,   -1,
1857    -1,   -1,   -1,   -1,   -1,  268,  269,  270,  271,  272,
1858   273,  274,  275,  276,  277,  278,  279,   -1,   -1,  125,
1859   283,  284,  285,   -1,   -1,   -1,  289,  290,  291,  292,
1860   293,  294,  295,  296,  297,   -1,  299,  300,  301,  302,
1861   303,  304,  305,   -1,  307,   -1,   -1,   -1,   -1,   -1,
1862    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  322,
1863    -1,   -1,   -1,   -1,   -1,   -1,  329,  330,   -1,  332,
1864    -1,  334,  335,  336,   -1,   -1,  339,  340,   -1,  342,
1865   343,  344,  345,    0,   -1,   -1,   -1,   -1,   -1,   -1,
1866    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
1867   363,   -1,  365,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
1868    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
1869    -1,   -1,   -1,   -1,  387,  388,   -1,   -1,   -1,   -1,
1870    -1,  394,  395,  396,  397,  398,  399,  400,  401,  402,
1871   403,  404,  405,  406,  407,  408,  409,  410,  411,   -1,
1872    -1,   -1,   -1,   -1,  260,   -1,   -1,   -1,   -1,   -1,
1873    -1,   -1,  268,  269,  270,  271,  272,  273,  274,  275,
1874   276,  277,  278,  279,   91,   -1,   -1,  283,  284,  285,
1875    -1,   -1,   -1,  289,  290,  291,  292,  293,  294,  295,
1876   296,  297,   -1,  299,  300,  301,  302,  303,  304,  305,
1877    -1,  307,   -1,   -1,   -1,   -1,   -1,   -1,  125,   -1,
1878    -1,   -1,   -1,   -1,   -1,   -1,  322,   -1,   -1,   -1,
1879    -1,   -1,   -1,  329,  330,   -1,  332,   -1,  334,  335,
1880   336,   -1,   -1,  339,  340,   -1,  342,  343,  344,  345,
1881     0,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
1882    -1,   -1,   -1,   -1,   -1,   -1,   -1,  363,   -1,  365,
1883    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
1884    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
1885    -1,  387,  388,   -1,   -1,   -1,   -1,   -1,  394,  395,
1886   396,  397,  398,  399,  400,  401,  402,  403,  404,  405,
1887   406,  407,  408,  409,  410,  411,   -1,   -1,   -1,   -1,
1888    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
1889    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
1890    -1,   91,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
1891    -1,   -1,   -1,  260,   -1,   -1,   -1,   -1,   -1,   -1,
1892    -1,  268,  269,  270,  271,  272,  273,  274,  275,  276,
1893   277,  278,  279,   -1,   -1,  125,  283,  284,  285,   -1,
1894    -1,   -1,  289,  290,  291,  292,  293,  294,  295,  296,
1895   297,   -1,  299,  300,  301,  302,  303,  304,  305,   -1,
1896   307,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
1897    -1,   -1,   -1,   -1,    0,  322,   -1,   -1,   -1,   -1,
1898    -1,   -1,  329,  330,   -1,  332,   -1,  334,  335,  336,
1899    -1,   -1,  339,  340,   -1,  342,  343,  344,  345,   -1,
1900    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
1901    -1,   -1,   -1,   -1,   -1,   -1,  363,   -1,  365,   -1,
1902    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
1903    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
1904   387,  388,   -1,   -1,   -1,   -1,   -1,  394,  395,  396,
1905   397,  398,  399,  400,  401,  402,  403,  404,  405,  406,
1906   407,  408,  409,  410,  411,   91,   -1,   -1,   -1,   -1,
1907   260,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  268,  269,
1908   270,  271,  272,  273,  274,  275,  276,  277,  278,  279,
1909    -1,   -1,   -1,  283,  284,  285,   -1,   -1,   -1,  289,
1910   290,  291,  292,  293,  294,  295,  296,  297,   -1,  299,
1911   300,  301,  302,  303,  304,  305,   -1,  307,   -1,   -1,
1912    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
1913    -1,    0,  322,   -1,   -1,   -1,   -1,   -1,   -1,  329,
1914   330,   -1,  332,   -1,  334,  335,  336,   -1,   -1,  339,
1915   340,   -1,  342,  343,  344,  345,   -1,   -1,   -1,   -1,
1916    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
1917    -1,   -1,   -1,  363,   -1,  365,   -1,   -1,   -1,   -1,
1918    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
1919    -1,   -1,   -1,   -1,   -1,   -1,   -1,  387,  388,   -1,
1920    -1,   -1,   -1,   -1,  394,  395,  396,  397,  398,  399,
1921   400,  401,  402,  403,  404,  405,  406,  407,  408,  409,
1922   410,  411,   91,   -1,   40,   -1,   -1,   -1,   -1,   -1,
1923    -1,   -1,   -1,   -1,  260,   -1,   -1,   40,   -1,   -1,
1924    -1,   -1,  268,  269,  270,  271,  272,  273,  274,  275,
1925   276,  277,  278,  279,   -1,   -1,   -1,  283,  284,  285,
1926    -1,   -1,   -1,  289,  290,  291,  292,  293,  294,  295,
1927   296,  297,   -1,  299,  300,  301,  302,  303,  304,  305,
1928    -1,  307,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
1929    -1,   -1,   -1,   -1,   -1,   -1,  322,   -1,   -1,   -1,
1930    -1,   -1,   -1,  329,  330,   -1,  332,   -1,  334,  335,
1931   336,   -1,   -1,  339,  340,   -1,  342,   -1,  344,   -1,
1932    -1,   -1,   -1,   -1,   -1,   -1,   40,   -1,   -1,   -1,
1933    -1,   -1,   -1,   -1,   -1,   -1,   -1,  363,   -1,  365,
1934    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
1935    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
1936    -1,  387,  388,   -1,   -1,   -1,   -1,   -1,  394,  395,
1937   396,  397,  398,  399,  400,  401,  402,  403,  404,  405,
1938   406,  407,  408,  409,  410,  411,   -1,   -1,   -1,   -1,
1939    -1,  260,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  268,
1940   269,  270,  271,  272,  273,  274,  275,  276,  277,  278,
1941   279,   -1,   -1,   -1,  283,  284,  285,   -1,   -1,   -1,
1942   289,  290,  291,  292,  293,  294,  295,  296,  297,   -1,
1943   299,  300,  301,  302,  303,  304,  305,   -1,  307,   -1,
1944    -1,  257,   -1,   -1,   -1,  261,   -1,   -1,   -1,   -1,
1945    -1,   -1,   -1,  322,  257,  258,   -1,   -1,   -1,   -1,
1946   329,  330,   -1,  332,   -1,  334,  335,  336,   -1,   -1,
1947   339,  340,   -1,  342,   -1,  344,   -1,   -1,   -1,   -1,
1948    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
1949    -1,   -1,   -1,   -1,  363,   -1,  365,  313,  314,   -1,
1950    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
1951   313,  314,   -1,   -1,   -1,   -1,   -1,   -1,  387,  388,
1952    91,   -1,   -1,   -1,   -1,  394,  395,  396,  397,  398,
1953   399,  400,  401,  402,  403,  404,  405,  406,  407,  408,
1954   409,  410,  411,   -1,  258,   -1,   -1,   -1,   -1,   -1,
1955    -1,   -1,   -1,  369,  370,  371,  372,  373,   -1,  375,
1956   376,  377,  378,  379,  380,  381,  369,  370,  371,  372,
1957   373,   -1,  375,  376,  377,  378,  379,  380,  381,   -1,
1958    -1,   -1,   -1,   -1,  400,  401,   -1,   -1,  404,  405,
1959   315,  316,   -1,   -1,  410,   -1,   -1,  400,  401,  313,
1960   314,  326,  327,  328,   -1,   -1,   -1,  410,   -1,   -1,
1961    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
1962    -1,   -1,   -1,   -1,  349,   -1,  351,  352,  353,  354,
1963   355,  356,  357,  358,  359,  360,   -1,   -1,   -1,   -1,
1964    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
1965    -1,   -1,   -1,   -1,   -1,  369,  370,  371,  372,  373,
1966   385,  375,  376,  377,  378,  379,  380,  381,   -1,   -1,
1967    -1,  396,  397,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
1968    -1,   -1,   -1,   -1,   -1,   -1,  400,  401,   -1,  260,
1969    -1,   -1,   -1,   -1,   -1,   -1,  410,  268,   -1,   -1,
1970   271,  272,  273,  274,  275,  276,  277,  278,  279,   -1,
1971    -1,   -1,  283,  284,  285,   -1,   -1,   -1,  289,  290,
1972   291,  292,  293,  294,  295,  296,  297,   -1,  299,  300,
1973   301,  302,  303,  304,  305,   -1,  307,   -1,   -1,   -1,
1974    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
1975    -1,  322,   -1,   -1,   -1,   -1,   -1,   -1,  329,  330,
1976    -1,  332,   -1,  334,  335,  336,   -1,   -1,  339,  340,
1977    -1,  342,   -1,  344,   -1,   -1,   -1,   -1,   -1,   -1,
1978    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
1979    -1,   -1,  363,   -1,  365,   -1,   -1,   -1,   -1,   -1,
1980    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
1981    -1,   -1,   -1,   -1,   -1,   -1,  387,  388,   -1,   -1,
1982    -1,   -1,   -1,  394,  395,  396,  397,  398,  399,  400,
1983   401,  402,  403,  404,  405,  406,  407,  408,  409,  410,
1984   411,
1985 };
1986 #define YYFINAL 3
1987 #ifndef YYDEBUG
1988 #define YYDEBUG 0
1989 #endif
1990 #define YYMAXTOKEN 430
1991 #if YYDEBUG
1992 char *yyname[] = {
1993 "end-of-file",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
1994 0,0,0,"'%'","'&'",0,"'('","')'","'*'","'+'","','","'-'","'.'","'/'",0,0,0,0,0,0,
1995 0,0,0,0,"':'",0,0,"'='",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
1996 0,"'['",0,"']'",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"'{'",
1997 "'|'","'}'",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
1998 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
1999 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
2000 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"CHAR","INTEGER","BOOLEAN","PERCENT",
2001 "SPERCENT","MINUS_INTEGER","PLUS_INTEGER","MAZE_GRID_ID","SOLID_FILL_ID",
2002 "MINES_ID","ROGUELEV_ID","MESSAGE_ID","MAZE_ID","LEVEL_ID","LEV_INIT_ID",
2003 "GEOMETRY_ID","NOMAP_ID","OBJECT_ID","COBJECT_ID","MONSTER_ID","TRAP_ID",
2004 "DOOR_ID","DRAWBRIDGE_ID","object_ID","monster_ID","terrain_ID","MAZEWALK_ID",
2005 "WALLIFY_ID","REGION_ID","FILLING","IRREGULAR","JOINED","ALTAR_ID","LADDER_ID",
2006 "STAIR_ID","NON_DIGGABLE_ID","NON_PASSWALL_ID","ROOM_ID","PORTAL_ID",
2007 "TELEPRT_ID","BRANCH_ID","LEV","MINERALIZE_ID","CORRIDOR_ID","GOLD_ID",
2008 "ENGRAVING_ID","FOUNTAIN_ID","POOL_ID","SINK_ID","NONE","RAND_CORRIDOR_ID",
2009 "DOOR_STATE","LIGHT_STATE","CURSE_TYPE","ENGRAVING_TYPE","DIRECTION",
2010 "RANDOM_TYPE","RANDOM_TYPE_BRACKET","A_REGISTER","ALIGNMENT","LEFT_OR_RIGHT",
2011 "CENTER","TOP_OR_BOT","ALTAR_TYPE","UP_OR_DOWN","SUBROOM_ID","NAME_ID",
2012 "FLAGS_ID","FLAG_TYPE","MON_ATTITUDE","MON_ALERTNESS","MON_APPEARANCE",
2013 "ROOMDOOR_ID","IF_ID","ELSE_ID","TERRAIN_ID","HORIZ_OR_VERT",
2014 "REPLACE_TERRAIN_ID","EXIT_ID","SHUFFLE_ID","QUANTITY_ID","BURIED_ID","LOOP_ID",
2015 "FOR_ID","TO_ID","SWITCH_ID","CASE_ID","BREAK_ID","DEFAULT_ID","ERODED_ID",
2016 "TRAPPED_STATE","RECHARGED_ID","INVIS_ID","GREASED_ID","FEMALE_ID",
2017 "CANCELLED_ID","REVIVED_ID","AVENGE_ID","FLEEING_ID","BLINDED_ID",
2018 "PARALYZED_ID","STUNNED_ID","CONFUSED_ID","SEENTRAPS_ID","ALL_ID","MONTYPE_ID",
2019 "GRAVE_ID","ERODEPROOF_ID","FUNCTION_ID","MSG_OUTPUT_TYPE","COMPARE_TYPE",
2020 "UNKNOWN_TYPE","rect_ID","fillrect_ID","line_ID","randline_ID","grow_ID",
2021 "selection_ID","flood_ID","rndcoord_ID","circle_ID","ellipse_ID","filter_ID",
2022 "complement_ID","gradient_ID","GRADIENT_TYPE","LIMITED","HUMIDITY_TYPE",
2023 "STRING","MAP_ID","NQSTRING","VARSTRING","CFUNC","CFUNC_INT","CFUNC_STR",
2024 "CFUNC_COORD","CFUNC_REGION","VARSTRING_INT","VARSTRING_INT_ARRAY",
2025 "VARSTRING_STRING","VARSTRING_STRING_ARRAY","VARSTRING_VAR",
2026 "VARSTRING_VAR_ARRAY","VARSTRING_COORD","VARSTRING_COORD_ARRAY",
2027 "VARSTRING_REGION","VARSTRING_REGION_ARRAY","VARSTRING_MAPCHAR",
2028 "VARSTRING_MAPCHAR_ARRAY","VARSTRING_MONST","VARSTRING_MONST_ARRAY",
2029 "VARSTRING_OBJ","VARSTRING_OBJ_ARRAY","VARSTRING_SEL","VARSTRING_SEL_ARRAY",
2030 "METHOD_INT","METHOD_INT_ARRAY","METHOD_STRING","METHOD_STRING_ARRAY",
2031 "METHOD_VAR","METHOD_VAR_ARRAY","METHOD_COORD","METHOD_COORD_ARRAY",
2032 "METHOD_REGION","METHOD_REGION_ARRAY","METHOD_MAPCHAR","METHOD_MAPCHAR_ARRAY",
2033 "METHOD_MONST","METHOD_MONST_ARRAY","METHOD_OBJ","METHOD_OBJ_ARRAY",
2034 "METHOD_SEL","METHOD_SEL_ARRAY","DICE",
2035 };
2036 char *yyrule[] = {
2037 "$accept : file",
2038 "file :",
2039 "file : levels",
2040 "levels : level",
2041 "levels : level levels",
2042 "level : level_def flags levstatements",
2043 "level_def : LEVEL_ID ':' STRING",
2044 "level_def : MAZE_ID ':' STRING ',' mazefiller",
2045 "mazefiller : RANDOM_TYPE",
2046 "mazefiller : CHAR",
2047 "lev_init : LEV_INIT_ID ':' SOLID_FILL_ID ',' terrain_type",
2048 "lev_init : LEV_INIT_ID ':' MAZE_GRID_ID ',' CHAR",
2049 "lev_init : LEV_INIT_ID ':' ROGUELEV_ID",
2050 "lev_init : LEV_INIT_ID ':' MINES_ID ',' CHAR ',' CHAR ',' BOOLEAN ',' BOOLEAN ',' light_state ',' walled opt_fillchar",
2051 "opt_limited :",
2052 "opt_limited : ',' LIMITED",
2053 "opt_coord_or_var :",
2054 "opt_coord_or_var : ',' coord_or_var",
2055 "opt_fillchar :",
2056 "opt_fillchar : ',' CHAR",
2057 "walled : BOOLEAN",
2058 "walled : RANDOM_TYPE",
2059 "flags :",
2060 "flags : FLAGS_ID ':' flag_list",
2061 "flag_list : FLAG_TYPE ',' flag_list",
2062 "flag_list : FLAG_TYPE",
2063 "levstatements :",
2064 "levstatements : levstatement levstatements",
2065 "stmt_block : '{' levstatements '}'",
2066 "levstatement : message",
2067 "levstatement : lev_init",
2068 "levstatement : altar_detail",
2069 "levstatement : grave_detail",
2070 "levstatement : branch_region",
2071 "levstatement : corridor",
2072 "levstatement : variable_define",
2073 "levstatement : shuffle_detail",
2074 "levstatement : diggable_detail",
2075 "levstatement : door_detail",
2076 "levstatement : drawbridge_detail",
2077 "levstatement : engraving_detail",
2078 "levstatement : mineralize",
2079 "levstatement : fountain_detail",
2080 "levstatement : gold_detail",
2081 "levstatement : switchstatement",
2082 "levstatement : forstatement",
2083 "levstatement : loopstatement",
2084 "levstatement : ifstatement",
2085 "levstatement : chancestatement",
2086 "levstatement : exitstatement",
2087 "levstatement : breakstatement",
2088 "levstatement : function_define",
2089 "levstatement : function_call",
2090 "levstatement : ladder_detail",
2091 "levstatement : map_definition",
2092 "levstatement : mazewalk_detail",
2093 "levstatement : monster_detail",
2094 "levstatement : object_detail",
2095 "levstatement : passwall_detail",
2096 "levstatement : pool_detail",
2097 "levstatement : portal_region",
2098 "levstatement : random_corridors",
2099 "levstatement : region_detail",
2100 "levstatement : room_def",
2101 "levstatement : subroom_def",
2102 "levstatement : sink_detail",
2103 "levstatement : terrain_detail",
2104 "levstatement : replace_terrain_detail",
2105 "levstatement : stair_detail",
2106 "levstatement : stair_region",
2107 "levstatement : teleprt_region",
2108 "levstatement : trap_detail",
2109 "levstatement : wallify_detail",
2110 "any_var_array : VARSTRING_INT_ARRAY",
2111 "any_var_array : VARSTRING_STRING_ARRAY",
2112 "any_var_array : VARSTRING_VAR_ARRAY",
2113 "any_var_array : VARSTRING_COORD_ARRAY",
2114 "any_var_array : VARSTRING_REGION_ARRAY",
2115 "any_var_array : VARSTRING_MAPCHAR_ARRAY",
2116 "any_var_array : VARSTRING_MONST_ARRAY",
2117 "any_var_array : VARSTRING_OBJ_ARRAY",
2118 "any_var_array : VARSTRING_SEL_ARRAY",
2119 "any_var : VARSTRING_INT",
2120 "any_var : VARSTRING_STRING",
2121 "any_var : VARSTRING_VAR",
2122 "any_var : VARSTRING_COORD",
2123 "any_var : VARSTRING_REGION",
2124 "any_var : VARSTRING_MAPCHAR",
2125 "any_var : VARSTRING_MONST",
2126 "any_var : VARSTRING_OBJ",
2127 "any_var : VARSTRING_SEL",
2128 "any_var_or_arr : any_var_array",
2129 "any_var_or_arr : any_var",
2130 "any_var_or_arr : VARSTRING",
2131 "any_var_or_unk : VARSTRING",
2132 "any_var_or_unk : any_var",
2133 "shuffle_detail : SHUFFLE_ID ':' any_var_array",
2134 "variable_define : any_var_or_arr '=' math_expr_var",
2135 "variable_define : any_var_or_arr '=' selection_ID ':' ter_selection",
2136 "variable_define : any_var_or_arr '=' string_expr",
2137 "variable_define : any_var_or_arr '=' terrainid ':' mapchar_or_var",
2138 "variable_define : any_var_or_arr '=' monsterid ':' monster_or_var",
2139 "variable_define : any_var_or_arr '=' objectid ':' object_or_var",
2140 "variable_define : any_var_or_arr '=' coord_or_var",
2141 "variable_define : any_var_or_arr '=' region_or_var",
2142 "variable_define : any_var_or_arr '=' '{' integer_list '}'",
2143 "variable_define : any_var_or_arr '=' '{' encodecoord_list '}'",
2144 "variable_define : any_var_or_arr '=' '{' encoderegion_list '}'",
2145 "variable_define : any_var_or_arr '=' terrainid ':' '{' mapchar_list '}'",
2146 "variable_define : any_var_or_arr '=' monsterid ':' '{' encodemonster_list '}'",
2147 "variable_define : any_var_or_arr '=' objectid ':' '{' encodeobj_list '}'",
2148 "variable_define : any_var_or_arr '=' '{' string_list '}'",
2149 "encodeobj_list : encodeobj",
2150 "encodeobj_list : encodeobj_list ',' encodeobj",
2151 "encodemonster_list : encodemonster",
2152 "encodemonster_list : encodemonster_list ',' encodemonster",
2153 "mapchar_list : mapchar",
2154 "mapchar_list : mapchar_list ',' mapchar",
2155 "encoderegion_list : encoderegion",
2156 "encoderegion_list : encoderegion_list ',' encoderegion",
2157 "encodecoord_list : encodecoord",
2158 "encodecoord_list : encodecoord_list ',' encodecoord",
2159 "integer_list : math_expr_var",
2160 "integer_list : integer_list ',' math_expr_var",
2161 "string_list : string_expr",
2162 "string_list : string_list ',' string_expr",
2163 "$$1 :",
2164 "$$2 :",
2165 "function_define : FUNCTION_ID NQSTRING '(' $$1 func_params_list ')' $$2 stmt_block",
2166 "function_call : NQSTRING '(' func_call_params_list ')'",
2167 "exitstatement : EXIT_ID",
2168 "opt_percent :",
2169 "opt_percent : PERCENT",
2170 "comparestmt : PERCENT",
2171 "comparestmt : '[' math_expr_var COMPARE_TYPE math_expr_var ']'",
2172 "comparestmt : '[' math_expr_var ']'",
2173 "$$3 :",
2174 "$$4 :",
2175 "switchstatement : SWITCH_ID $$3 '[' integer_or_var ']' $$4 '{' switchcases '}'",
2176 "switchcases :",
2177 "switchcases : switchcase switchcases",
2178 "$$5 :",
2179 "switchcase : CASE_ID all_integers ':' $$5 levstatements",
2180 "$$6 :",
2181 "switchcase : DEFAULT_ID ':' $$6 levstatements",
2182 "breakstatement : BREAK_ID",
2183 "for_to_span : '.' '.'",
2184 "for_to_span : TO_ID",
2185 "forstmt_start : FOR_ID any_var_or_unk '=' math_expr_var for_to_span math_expr_var",
2186 "$$7 :",
2187 "forstatement : forstmt_start $$7 stmt_block",
2188 "$$8 :",
2189 "loopstatement : LOOP_ID '[' integer_or_var ']' $$8 stmt_block",
2190 "$$9 :",
2191 "chancestatement : comparestmt ':' $$9 levstatement",
2192 "$$10 :",
2193 "ifstatement : IF_ID comparestmt $$10 if_ending",
2194 "if_ending : stmt_block",
2195 "$$11 :",
2196 "if_ending : stmt_block $$11 ELSE_ID stmt_block",
2197 "message : MESSAGE_ID ':' string_expr",
2198 "random_corridors : RAND_CORRIDOR_ID",
2199 "random_corridors : RAND_CORRIDOR_ID ':' all_integers",
2200 "random_corridors : RAND_CORRIDOR_ID ':' RANDOM_TYPE",
2201 "corridor : CORRIDOR_ID ':' corr_spec ',' corr_spec",
2202 "corridor : CORRIDOR_ID ':' corr_spec ',' all_integers",
2203 "corr_spec : '(' INTEGER ',' DIRECTION ',' door_pos ')'",
2204 "room_begin : room_type opt_percent ',' light_state",
2205 "$$12 :",
2206 "subroom_def : SUBROOM_ID ':' room_begin ',' subroom_pos ',' room_size optroomregionflags $$12 stmt_block",
2207 "$$13 :",
2208 "room_def : ROOM_ID ':' room_begin ',' room_pos ',' room_align ',' room_size optroomregionflags $$13 stmt_block",
2209 "roomfill :",
2210 "roomfill : ',' BOOLEAN",
2211 "room_pos : '(' INTEGER ',' INTEGER ')'",
2212 "room_pos : RANDOM_TYPE",
2213 "subroom_pos : '(' INTEGER ',' INTEGER ')'",
2214 "subroom_pos : RANDOM_TYPE",
2215 "room_align : '(' h_justif ',' v_justif ')'",
2216 "room_align : RANDOM_TYPE",
2217 "room_size : '(' INTEGER ',' INTEGER ')'",
2218 "room_size : RANDOM_TYPE",
2219 "door_detail : ROOMDOOR_ID ':' secret ',' door_state ',' door_wall ',' door_pos",
2220 "door_detail : DOOR_ID ':' door_state ',' ter_selection",
2221 "secret : BOOLEAN",
2222 "secret : RANDOM_TYPE",
2223 "door_wall : dir_list",
2224 "door_wall : RANDOM_TYPE",
2225 "dir_list : DIRECTION",
2226 "dir_list : DIRECTION '|' dir_list",
2227 "door_pos : INTEGER",
2228 "door_pos : RANDOM_TYPE",
2229 "map_definition : NOMAP_ID",
2230 "map_definition : GEOMETRY_ID ':' h_justif ',' v_justif roomfill MAP_ID",
2231 "map_definition : GEOMETRY_ID ':' coord_or_var roomfill MAP_ID",
2232 "h_justif : LEFT_OR_RIGHT",
2233 "h_justif : CENTER",
2234 "v_justif : TOP_OR_BOT",
2235 "v_justif : CENTER",
2236 "monster_detail : MONSTER_ID ':' monster_desc",
2237 "$$14 :",
2238 "monster_detail : MONSTER_ID ':' monster_desc $$14 stmt_block",
2239 "monster_desc : monster_or_var ',' coord_or_var monster_infos",
2240 "monster_infos :",
2241 "monster_infos : monster_infos ',' monster_info",
2242 "monster_info : string_expr",
2243 "monster_info : MON_ATTITUDE",
2244 "monster_info : MON_ALERTNESS",
2245 "monster_info : alignment_prfx",
2246 "monster_info : MON_APPEARANCE string_expr",
2247 "monster_info : FEMALE_ID",
2248 "monster_info : INVIS_ID",
2249 "monster_info : CANCELLED_ID",
2250 "monster_info : REVIVED_ID",
2251 "monster_info : AVENGE_ID",
2252 "monster_info : FLEEING_ID ':' integer_or_var",
2253 "monster_info : BLINDED_ID ':' integer_or_var",
2254 "monster_info : PARALYZED_ID ':' integer_or_var",
2255 "monster_info : STUNNED_ID",
2256 "monster_info : CONFUSED_ID",
2257 "monster_info : SEENTRAPS_ID ':' seen_trap_mask",
2258 "seen_trap_mask : STRING",
2259 "seen_trap_mask : ALL_ID",
2260 "seen_trap_mask : STRING '|' seen_trap_mask",
2261 "object_detail : OBJECT_ID ':' object_desc",
2262 "$$15 :",
2263 "object_detail : COBJECT_ID ':' object_desc $$15 stmt_block",
2264 "object_desc : object_or_var object_infos",
2265 "object_infos :",
2266 "object_infos : object_infos ',' object_info",
2267 "object_info : CURSE_TYPE",
2268 "object_info : MONTYPE_ID ':' monster_or_var",
2269 "object_info : all_ints_push",
2270 "object_info : NAME_ID ':' string_expr",
2271 "object_info : QUANTITY_ID ':' integer_or_var",
2272 "object_info : BURIED_ID",
2273 "object_info : LIGHT_STATE",
2274 "object_info : ERODED_ID ':' integer_or_var",
2275 "object_info : ERODEPROOF_ID",
2276 "object_info : DOOR_STATE",
2277 "object_info : TRAPPED_STATE",
2278 "object_info : RECHARGED_ID ':' integer_or_var",
2279 "object_info : INVIS_ID",
2280 "object_info : GREASED_ID",
2281 "object_info : coord_or_var",
2282 "trap_detail : TRAP_ID ':' trap_name ',' coord_or_var",
2283 "drawbridge_detail : DRAWBRIDGE_ID ':' coord_or_var ',' DIRECTION ',' door_state",
2284 "mazewalk_detail : MAZEWALK_ID ':' coord_or_var ',' DIRECTION",
2285 "mazewalk_detail : MAZEWALK_ID ':' coord_or_var ',' DIRECTION ',' BOOLEAN opt_fillchar",
2286 "wallify_detail : WALLIFY_ID",
2287 "wallify_detail : WALLIFY_ID ':' ter_selection",
2288 "ladder_detail : LADDER_ID ':' coord_or_var ',' UP_OR_DOWN",
2289 "stair_detail : STAIR_ID ':' coord_or_var ',' UP_OR_DOWN",
2290 "stair_region : STAIR_ID ':' lev_region ',' lev_region ',' UP_OR_DOWN",
2291 "portal_region : PORTAL_ID ':' lev_region ',' lev_region ',' STRING",
2292 "teleprt_region : TELEPRT_ID ':' lev_region ',' lev_region teleprt_detail",
2293 "branch_region : BRANCH_ID ':' lev_region ',' lev_region",
2294 "teleprt_detail :",
2295 "teleprt_detail : ',' UP_OR_DOWN",
2296 "fountain_detail : FOUNTAIN_ID ':' ter_selection",
2297 "sink_detail : SINK_ID ':' ter_selection",
2298 "pool_detail : POOL_ID ':' ter_selection",
2299 "terrain_type : CHAR",
2300 "terrain_type : '(' CHAR ',' light_state ')'",
2301 "replace_terrain_detail : REPLACE_TERRAIN_ID ':' region_or_var ',' mapchar_or_var ',' mapchar_or_var ',' SPERCENT",
2302 "terrain_detail : TERRAIN_ID ':' ter_selection ',' mapchar_or_var",
2303 "diggable_detail : NON_DIGGABLE_ID ':' region_or_var",
2304 "passwall_detail : NON_PASSWALL_ID ':' region_or_var",
2305 "$$16 :",
2306 "region_detail : REGION_ID ':' region_or_var ',' light_state ',' room_type optroomregionflags $$16 region_detail_end",
2307 "region_detail_end :",
2308 "region_detail_end : stmt_block",
2309 "altar_detail : ALTAR_ID ':' coord_or_var ',' alignment ',' altar_type",
2310 "grave_detail : GRAVE_ID ':' coord_or_var ',' string_expr",
2311 "grave_detail : GRAVE_ID ':' coord_or_var ',' RANDOM_TYPE",
2312 "grave_detail : GRAVE_ID ':' coord_or_var",
2313 "gold_detail : GOLD_ID ':' math_expr_var ',' coord_or_var",
2314 "engraving_detail : ENGRAVING_ID ':' coord_or_var ',' engraving_type ',' string_expr",
2315 "mineralize : MINERALIZE_ID ':' integer_or_var ',' integer_or_var ',' integer_or_var ',' integer_or_var",
2316 "mineralize : MINERALIZE_ID",
2317 "trap_name : STRING",
2318 "trap_name : RANDOM_TYPE",
2319 "room_type : STRING",
2320 "room_type : RANDOM_TYPE",
2321 "optroomregionflags :",
2322 "optroomregionflags : ',' roomregionflags",
2323 "roomregionflags : roomregionflag",
2324 "roomregionflags : roomregionflag ',' roomregionflags",
2325 "roomregionflag : FILLING",
2326 "roomregionflag : IRREGULAR",
2327 "roomregionflag : JOINED",
2328 "door_state : DOOR_STATE",
2329 "door_state : RANDOM_TYPE",
2330 "light_state : LIGHT_STATE",
2331 "light_state : RANDOM_TYPE",
2332 "alignment : ALIGNMENT",
2333 "alignment : a_register",
2334 "alignment : RANDOM_TYPE",
2335 "alignment_prfx : ALIGNMENT",
2336 "alignment_prfx : a_register",
2337 "alignment_prfx : A_REGISTER ':' RANDOM_TYPE",
2338 "altar_type : ALTAR_TYPE",
2339 "altar_type : RANDOM_TYPE",
2340 "a_register : A_REGISTER '[' INTEGER ']'",
2341 "string_or_var : STRING",
2342 "string_or_var : VARSTRING_STRING",
2343 "string_or_var : VARSTRING_STRING_ARRAY '[' math_expr_var ']'",
2344 "integer_or_var : math_expr_var",
2345 "coord_or_var : encodecoord",
2346 "coord_or_var : rndcoord_ID '(' ter_selection ')'",
2347 "coord_or_var : VARSTRING_COORD",
2348 "coord_or_var : VARSTRING_COORD_ARRAY '[' math_expr_var ']'",
2349 "encodecoord : '(' INTEGER ',' INTEGER ')'",
2350 "encodecoord : RANDOM_TYPE",
2351 "encodecoord : RANDOM_TYPE_BRACKET humidity_flags ']'",
2352 "humidity_flags : HUMIDITY_TYPE",
2353 "humidity_flags : HUMIDITY_TYPE ',' humidity_flags",
2354 "region_or_var : encoderegion",
2355 "region_or_var : VARSTRING_REGION",
2356 "region_or_var : VARSTRING_REGION_ARRAY '[' math_expr_var ']'",
2357 "encoderegion : '(' INTEGER ',' INTEGER ',' INTEGER ',' INTEGER ')'",
2358 "mapchar_or_var : mapchar",
2359 "mapchar_or_var : VARSTRING_MAPCHAR",
2360 "mapchar_or_var : VARSTRING_MAPCHAR_ARRAY '[' math_expr_var ']'",
2361 "mapchar : CHAR",
2362 "mapchar : '(' CHAR ',' light_state ')'",
2363 "monster_or_var : encodemonster",
2364 "monster_or_var : VARSTRING_MONST",
2365 "monster_or_var : VARSTRING_MONST_ARRAY '[' math_expr_var ']'",
2366 "encodemonster : STRING",
2367 "encodemonster : CHAR",
2368 "encodemonster : '(' CHAR ',' STRING ')'",
2369 "encodemonster : RANDOM_TYPE",
2370 "object_or_var : encodeobj",
2371 "object_or_var : VARSTRING_OBJ",
2372 "object_or_var : VARSTRING_OBJ_ARRAY '[' math_expr_var ']'",
2373 "encodeobj : STRING",
2374 "encodeobj : CHAR",
2375 "encodeobj : '(' CHAR ',' STRING ')'",
2376 "encodeobj : RANDOM_TYPE",
2377 "string_expr : string_or_var",
2378 "string_expr : string_expr '.' string_or_var",
2379 "math_expr_var : INTEGER",
2380 "math_expr_var : dice",
2381 "math_expr_var : '(' MINUS_INTEGER ')'",
2382 "math_expr_var : VARSTRING_INT",
2383 "math_expr_var : VARSTRING_INT_ARRAY '[' math_expr_var ']'",
2384 "math_expr_var : math_expr_var '+' math_expr_var",
2385 "math_expr_var : math_expr_var '-' math_expr_var",
2386 "math_expr_var : math_expr_var '*' math_expr_var",
2387 "math_expr_var : math_expr_var '/' math_expr_var",
2388 "math_expr_var : math_expr_var '%' math_expr_var",
2389 "math_expr_var : '(' math_expr_var ')'",
2390 "func_param_type : CFUNC_INT",
2391 "func_param_type : CFUNC_STR",
2392 "func_param_part : any_var_or_arr ':' func_param_type",
2393 "func_param_list : func_param_part",
2394 "func_param_list : func_param_list ',' func_param_part",
2395 "func_params_list :",
2396 "func_params_list : func_param_list",
2397 "func_call_param_part : math_expr_var",
2398 "func_call_param_part : string_expr",
2399 "func_call_param_list : func_call_param_part",
2400 "func_call_param_list : func_call_param_list ',' func_call_param_part",
2401 "func_call_params_list :",
2402 "func_call_params_list : func_call_param_list",
2403 "ter_selection_x : coord_or_var",
2404 "ter_selection_x : rect_ID region_or_var",
2405 "ter_selection_x : fillrect_ID region_or_var",
2406 "ter_selection_x : line_ID coord_or_var ',' coord_or_var",
2407 "ter_selection_x : randline_ID coord_or_var ',' coord_or_var ',' math_expr_var",
2408 "ter_selection_x : grow_ID '(' ter_selection ')'",
2409 "ter_selection_x : grow_ID '(' dir_list ',' ter_selection ')'",
2410 "ter_selection_x : filter_ID '(' SPERCENT ',' ter_selection ')'",
2411 "ter_selection_x : filter_ID '(' ter_selection ',' ter_selection ')'",
2412 "ter_selection_x : filter_ID '(' mapchar_or_var ',' ter_selection ')'",
2413 "ter_selection_x : flood_ID coord_or_var",
2414 "ter_selection_x : circle_ID '(' coord_or_var ',' math_expr_var ')'",
2415 "ter_selection_x : circle_ID '(' coord_or_var ',' math_expr_var ',' FILLING ')'",
2416 "ter_selection_x : ellipse_ID '(' coord_or_var ',' math_expr_var ',' math_expr_var ')'",
2417 "ter_selection_x : ellipse_ID '(' coord_or_var ',' math_expr_var ',' math_expr_var ',' FILLING ')'",
2418 "ter_selection_x : gradient_ID '(' GRADIENT_TYPE ',' '(' math_expr_var '-' math_expr_var opt_limited ')' ',' coord_or_var opt_coord_or_var ')'",
2419 "ter_selection_x : complement_ID ter_selection_x",
2420 "ter_selection_x : VARSTRING_SEL",
2421 "ter_selection_x : '(' ter_selection ')'",
2422 "ter_selection : ter_selection_x",
2423 "ter_selection : ter_selection_x '&' ter_selection",
2424 "dice : DICE",
2425 "all_integers : MINUS_INTEGER",
2426 "all_integers : PLUS_INTEGER",
2427 "all_integers : INTEGER",
2428 "all_ints_push : MINUS_INTEGER",
2429 "all_ints_push : PLUS_INTEGER",
2430 "all_ints_push : INTEGER",
2431 "all_ints_push : dice",
2432 "objectid : object_ID",
2433 "objectid : OBJECT_ID",
2434 "monsterid : monster_ID",
2435 "monsterid : MONSTER_ID",
2436 "terrainid : terrain_ID",
2437 "terrainid : TERRAIN_ID",
2438 "engraving_type : ENGRAVING_TYPE",
2439 "engraving_type : RANDOM_TYPE",
2440 "lev_region : region",
2441 "lev_region : LEV '(' INTEGER ',' INTEGER ',' INTEGER ',' INTEGER ')'",
2442 "region : '(' INTEGER ',' INTEGER ',' INTEGER ',' INTEGER ')'",
2443 };
2444 #endif
2445 #ifdef YYSTACKSIZE
2446 #undef YYMAXDEPTH
2447 #define YYMAXDEPTH YYSTACKSIZE
2448 #else
2449 #ifdef YYMAXDEPTH
2450 #define YYSTACKSIZE YYMAXDEPTH
2451 #else
2452 #define YYSTACKSIZE 500
2453 #define YYMAXDEPTH 500
2454 #endif
2455 #endif
2456 int yydebug;
2457 int yynerrs;
2458 int yyerrflag;
2459 int yychar;
2460 short *yyssp;
2461 YYSTYPE *yyvsp;
2462 YYSTYPE yyval;
2463 YYSTYPE yylval;
2464 short yyss[YYSTACKSIZE];
2465 YYSTYPE yyvs[YYSTACKSIZE];
2466 #define yystacksize YYSTACKSIZE
2467
2468 /*lev_comp.y*/
2469 #define YYABORT goto yyabort
2470 #define YYREJECT goto yyabort
2471 #define YYACCEPT goto yyaccept
2472 #define YYERROR goto yyerrlab
2473 int
2474 yyparse()
2475 {
2476     register int yym, yyn, yystate;
2477 #if YYDEBUG
2478     register char *yys;
2479     extern char *getenv();
2480
2481     if ((yys = getenv("YYDEBUG")) != 0)
2482     {
2483         yyn = *yys;
2484         if (yyn >= '0' && yyn <= '9')
2485             yydebug = yyn - '0';
2486     }
2487 #endif
2488
2489     yynerrs = 0;
2490     yyerrflag = 0;
2491     yychar = (-1);
2492
2493     yyssp = yyss;
2494     yyvsp = yyvs;
2495     *yyssp = yystate = 0;
2496
2497 yyloop:
2498     if ((yyn = yydefred[yystate]) != 0) goto yyreduce;
2499     if (yychar < 0)
2500     {
2501         if ((yychar = yylex()) < 0) yychar = 0;
2502 #if YYDEBUG
2503         if (yydebug)
2504         {
2505             yys = 0;
2506             if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
2507             if (!yys) yys = "illegal-symbol";
2508             printf("%sdebug: state %d, reading %d (%s)\n",
2509                     YYPREFIX, yystate, yychar, yys);
2510         }
2511 #endif
2512     }
2513     if ((yyn = yysindex[yystate]) != 0 && (yyn += yychar) >= 0 &&
2514             yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
2515     {
2516 #if YYDEBUG
2517         if (yydebug)
2518             printf("%sdebug: state %d, shifting to state %d\n",
2519                     YYPREFIX, yystate, yytable[yyn]);
2520 #endif
2521         if (yyssp >= yyss + yystacksize - 1)
2522         {
2523             goto yyoverflow;
2524         }
2525         *++yyssp = yystate = yytable[yyn];
2526         *++yyvsp = yylval;
2527         yychar = (-1);
2528         if (yyerrflag > 0)  --yyerrflag;
2529         goto yyloop;
2530     }
2531     if ((yyn = yyrindex[yystate]) != 0 && (yyn += yychar) >= 0 &&
2532             yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
2533     {
2534         yyn = yytable[yyn];
2535         goto yyreduce;
2536     }
2537     if (yyerrflag) goto yyinrecovery;
2538     goto yynewerror;
2539 yynewerror:
2540     yyerror("syntax error");
2541     goto yyerrlab;
2542 yyerrlab:
2543     ++yynerrs;
2544 yyinrecovery:
2545     if (yyerrflag < 3)
2546     {
2547         yyerrflag = 3;
2548         for (;;)
2549         {
2550             if ((yyn = yysindex[*yyssp]) != 0 && (yyn += YYERRCODE) >= 0 &&
2551                     yyn <= YYTABLESIZE && yycheck[yyn] == YYERRCODE)
2552             {
2553 #if YYDEBUG
2554                 if (yydebug)
2555                     printf("%sdebug: state %d, error recovery shifting\
2556  to state %d\n", YYPREFIX, *yyssp, yytable[yyn]);
2557 #endif
2558                 if (yyssp >= yyss + yystacksize - 1)
2559                 {
2560                     goto yyoverflow;
2561                 }
2562                 *++yyssp = yystate = yytable[yyn];
2563                 *++yyvsp = yylval;
2564                 goto yyloop;
2565             }
2566             else
2567             {
2568 #if YYDEBUG
2569                 if (yydebug)
2570                     printf("%sdebug: error recovery discarding state %d\n",
2571                             YYPREFIX, *yyssp);
2572 #endif
2573                 if (yyssp <= yyss) goto yyabort;
2574                 --yyssp;
2575                 --yyvsp;
2576             }
2577         }
2578     }
2579     else
2580     {
2581         if (yychar == 0) goto yyabort;
2582 #if YYDEBUG
2583         if (yydebug)
2584         {
2585             yys = 0;
2586             if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
2587             if (!yys) yys = "illegal-symbol";
2588             printf("%sdebug: state %d, error recovery discards token %d (%s)\n",
2589                     YYPREFIX, yystate, yychar, yys);
2590         }
2591 #endif
2592         yychar = (-1);
2593         goto yyloop;
2594     }
2595 yyreduce:
2596 #if YYDEBUG
2597     if (yydebug)
2598         printf("%sdebug: state %d, reducing by rule %d (%s)\n",
2599                 YYPREFIX, yystate, yyn, yyrule[yyn]);
2600 #endif
2601     yym = yylen[yyn];
2602     yyval = yyvsp[1-yym];
2603     switch (yyn)
2604     {
2605 case 5:
2606 {
2607                         if (fatal_error > 0) {
2608                                 (void) fprintf(stderr,
2609               "%s: %d errors detected for level \"%s\". No output created!\n",
2610                                                fname, fatal_error, yyvsp[-2].map);
2611                                 fatal_error = 0;
2612                                 got_errors++;
2613                         } else if (!got_errors) {
2614                                 if (!write_level_file(yyvsp[-2].map, splev)) {
2615                                     lc_error("Can't write output file for '%s'!",
2616                                              yyvsp[-2].map);
2617                                     exit(EXIT_FAILURE);
2618                                 }
2619                         }
2620                         Free(yyvsp[-2].map);
2621                         Free(splev);
2622                         splev = NULL;
2623                         vardef_free_all(vardefs);
2624                         vardefs = NULL;
2625                   }
2626 break;
2627 case 6:
2628 {
2629                       start_level_def(&splev, yyvsp[0].map);
2630                       yyval.map = yyvsp[0].map;
2631                   }
2632 break;
2633 case 7:
2634 {
2635                       start_level_def(&splev, yyvsp[-2].map);
2636                       if (yyvsp[0].i == -1) {
2637                           add_opvars(splev, "iiiiiiiio",
2638                                      VA_PASS9(LVLINIT_MAZEGRID, HWALL, 0,0,
2639                                               0,0,0,0, SPO_INITLEVEL));
2640                       } else {
2641                           int bg = (int) what_map_char((char) yyvsp[0].i);
2642
2643                           add_opvars(splev, "iiiiiiiio",
2644                                      VA_PASS9(LVLINIT_SOLIDFILL, bg, 0,0,
2645                                               0,0,0,0, SPO_INITLEVEL));
2646                       }
2647                       add_opvars(splev, "io",
2648                                  VA_PASS2(MAZELEVEL, SPO_LEVEL_FLAGS));
2649                       max_x_map = COLNO-1;
2650                       max_y_map = ROWNO;
2651                       yyval.map = yyvsp[-2].map;
2652                   }
2653 break;
2654 case 8:
2655 {
2656                       yyval.i = -1;
2657                   }
2658 break;
2659 case 9:
2660 {
2661                       yyval.i = what_map_char((char) yyvsp[0].i);
2662                   }
2663 break;
2664 case 10:
2665 {
2666                       int filling = (int) yyvsp[0].terr.ter;
2667
2668                       if (filling == INVALID_TYPE || filling >= MAX_TYPE)
2669                           lc_error("INIT_MAP: Invalid fill char type.");
2670                       add_opvars(splev, "iiiiiiiio",
2671                                  VA_PASS9(LVLINIT_SOLIDFILL, filling,
2672                                           0, (int) yyvsp[0].terr.lit,
2673                                           0,0,0,0, SPO_INITLEVEL));
2674                       max_x_map = COLNO-1;
2675                       max_y_map = ROWNO;
2676                   }
2677 break;
2678 case 11:
2679 {
2680                       int filling = (int) what_map_char((char) yyvsp[0].i);
2681
2682                       if (filling == INVALID_TYPE || filling >= MAX_TYPE)
2683                           lc_error("INIT_MAP: Invalid fill char type.");
2684                       add_opvars(splev, "iiiiiiiio",
2685                                  VA_PASS9(LVLINIT_MAZEGRID, filling, 0,0,
2686                                           0,0,0,0, SPO_INITLEVEL));
2687                       max_x_map = COLNO-1;
2688                       max_y_map = ROWNO;
2689                   }
2690 break;
2691 case 12:
2692 {
2693                       add_opvars(splev, "iiiiiiiio",
2694                                  VA_PASS9(LVLINIT_ROGUE,0,0,0,
2695                                           0,0,0,0, SPO_INITLEVEL));
2696                   }
2697 break;
2698 case 13:
2699 {
2700                       int fg = (int) what_map_char((char) yyvsp[-11].i),
2701                           bg = (int) what_map_char((char) yyvsp[-9].i);
2702                       int smoothed = (int) yyvsp[-7].i,
2703                           joined = (int) yyvsp[-5].i,
2704                           lit = (int) yyvsp[-3].i,
2705                           walled = (int) yyvsp[-1].i,
2706                           filling = (int) yyvsp[0].i;
2707
2708                       if (fg == INVALID_TYPE || fg >= MAX_TYPE)
2709                           lc_error("INIT_MAP: Invalid foreground type.");
2710                       if (bg == INVALID_TYPE || bg >= MAX_TYPE)
2711                           lc_error("INIT_MAP: Invalid background type.");
2712                       if (joined && fg != CORR && fg != ROOM)
2713                           lc_error("INIT_MAP: Invalid foreground type for joined map.");
2714
2715                       if (filling == INVALID_TYPE)
2716                           lc_error("INIT_MAP: Invalid fill char type.");
2717
2718                       add_opvars(splev, "iiiiiiiio",
2719                                  VA_PASS9(LVLINIT_MINES, filling, walled, lit,
2720                                           joined, smoothed, bg, fg,
2721                                           SPO_INITLEVEL));
2722                         max_x_map = COLNO-1;
2723                         max_y_map = ROWNO;
2724                   }
2725 break;
2726 case 14:
2727 {
2728                       yyval.i = 0;
2729                   }
2730 break;
2731 case 15:
2732 {
2733                       yyval.i = yyvsp[0].i;
2734                   }
2735 break;
2736 case 16:
2737 {
2738                       add_opvars(splev, "o", VA_PASS1(SPO_COPY));
2739                       yyval.i = 0;
2740                   }
2741 break;
2742 case 17:
2743 {
2744                       yyval.i = 1;
2745                   }
2746 break;
2747 case 18:
2748 {
2749                       yyval.i = -1;
2750                   }
2751 break;
2752 case 19:
2753 {
2754                       yyval.i = what_map_char((char) yyvsp[0].i);
2755                   }
2756 break;
2757 case 22:
2758 {
2759                       add_opvars(splev, "io", VA_PASS2(0, SPO_LEVEL_FLAGS));
2760                   }
2761 break;
2762 case 23:
2763 {
2764                       add_opvars(splev, "io",
2765                                  VA_PASS2((int) yyvsp[0].i, SPO_LEVEL_FLAGS));
2766                   }
2767 break;
2768 case 24:
2769 {
2770                       yyval.i = (yyvsp[-2].i | yyvsp[0].i);
2771                   }
2772 break;
2773 case 25:
2774 {
2775                       yyval.i = yyvsp[0].i;
2776                   }
2777 break;
2778 case 26:
2779 {
2780                       yyval.i = 0;
2781                   }
2782 break;
2783 case 27:
2784 {
2785                       yyval.i = 1 + yyvsp[0].i;
2786                   }
2787 break;
2788 case 28:
2789 {
2790                       yyval.i = yyvsp[-1].i;
2791                   }
2792 break;
2793 case 96:
2794 {
2795                       struct lc_vardefs *vd;
2796
2797                       if ((vd = vardef_defined(vardefs, yyvsp[0].map, 1))) {
2798                           if (!(vd->var_type & SPOVAR_ARRAY))
2799                               lc_error("Trying to shuffle non-array variable '%s'",
2800                                        yyvsp[0].map);
2801                       } else
2802                           lc_error("Trying to shuffle undefined variable '%s'",
2803                                    yyvsp[0].map);
2804                       add_opvars(splev, "so", VA_PASS2(yyvsp[0].map, SPO_SHUFFLE_ARRAY));
2805                       Free(yyvsp[0].map);
2806                   }
2807 break;
2808 case 97:
2809 {
2810                       vardefs = add_vardef_type(vardefs, yyvsp[-2].map, SPOVAR_INT);
2811                       add_opvars(splev, "iso", VA_PASS3(0, yyvsp[-2].map, SPO_VAR_INIT));
2812                       Free(yyvsp[-2].map);
2813                   }
2814 break;
2815 case 98:
2816 {
2817                       vardefs = add_vardef_type(vardefs, yyvsp[-4].map, SPOVAR_SEL);
2818                       add_opvars(splev, "iso", VA_PASS3(0, yyvsp[-4].map, SPO_VAR_INIT));
2819                       Free(yyvsp[-4].map);
2820                   }
2821 break;
2822 case 99:
2823 {
2824                       vardefs = add_vardef_type(vardefs, yyvsp[-2].map, SPOVAR_STRING);
2825                       add_opvars(splev, "iso", VA_PASS3(0, yyvsp[-2].map, SPO_VAR_INIT));
2826                       Free(yyvsp[-2].map);
2827                   }
2828 break;
2829 case 100:
2830 {
2831                       vardefs = add_vardef_type(vardefs, yyvsp[-4].map, SPOVAR_MAPCHAR);
2832                       add_opvars(splev, "iso", VA_PASS3(0, yyvsp[-4].map, SPO_VAR_INIT));
2833                       Free(yyvsp[-4].map);
2834                   }
2835 break;
2836 case 101:
2837 {
2838                       vardefs = add_vardef_type(vardefs, yyvsp[-4].map, SPOVAR_MONST);
2839                       add_opvars(splev, "iso", VA_PASS3(0, yyvsp[-4].map, SPO_VAR_INIT));
2840                       Free(yyvsp[-4].map);
2841                   }
2842 break;
2843 case 102:
2844 {
2845                       vardefs = add_vardef_type(vardefs, yyvsp[-4].map, SPOVAR_OBJ);
2846                       add_opvars(splev, "iso", VA_PASS3(0, yyvsp[-4].map, SPO_VAR_INIT));
2847                       Free(yyvsp[-4].map);
2848                   }
2849 break;
2850 case 103:
2851 {
2852                       vardefs = add_vardef_type(vardefs, yyvsp[-2].map, SPOVAR_COORD);
2853                       add_opvars(splev, "iso", VA_PASS3(0, yyvsp[-2].map, SPO_VAR_INIT));
2854                       Free(yyvsp[-2].map);
2855                   }
2856 break;
2857 case 104:
2858 {
2859                       vardefs = add_vardef_type(vardefs, yyvsp[-2].map, SPOVAR_REGION);
2860                       add_opvars(splev, "iso", VA_PASS3(0, yyvsp[-2].map, SPO_VAR_INIT));
2861                       Free(yyvsp[-2].map);
2862                   }
2863 break;
2864 case 105:
2865 {
2866                       int n_items = (int) yyvsp[-1].i;
2867
2868                       vardefs = add_vardef_type(vardefs, yyvsp[-4].map,
2869                                                 SPOVAR_INT | SPOVAR_ARRAY);
2870                       add_opvars(splev, "iso",
2871                                  VA_PASS3(n_items, yyvsp[-4].map, SPO_VAR_INIT));
2872                       Free(yyvsp[-4].map);
2873                   }
2874 break;
2875 case 106:
2876 {
2877                       int n_items = (int) yyvsp[-1].i;
2878
2879                       vardefs = add_vardef_type(vardefs, yyvsp[-4].map,
2880                                                 SPOVAR_COORD | SPOVAR_ARRAY);
2881                       add_opvars(splev, "iso",
2882                                  VA_PASS3(n_items, yyvsp[-4].map, SPO_VAR_INIT));
2883                       Free(yyvsp[-4].map);
2884                   }
2885 break;
2886 case 107:
2887 {
2888                       int n_items = (int) yyvsp[-1].i;
2889
2890                       vardefs = add_vardef_type(vardefs, yyvsp[-4].map,
2891                                                 SPOVAR_REGION | SPOVAR_ARRAY);
2892                       add_opvars(splev, "iso",
2893                                  VA_PASS3(n_items, yyvsp[-4].map, SPO_VAR_INIT));
2894                       Free(yyvsp[-4].map);
2895                   }
2896 break;
2897 case 108:
2898 {
2899                       int n_items = (int) yyvsp[-1].i;
2900
2901                       vardefs = add_vardef_type(vardefs, yyvsp[-6].map,
2902                                                 SPOVAR_MAPCHAR | SPOVAR_ARRAY);
2903                       add_opvars(splev, "iso",
2904                                  VA_PASS3(n_items, yyvsp[-6].map, SPO_VAR_INIT));
2905                       Free(yyvsp[-6].map);
2906                   }
2907 break;
2908 case 109:
2909 {
2910                       int n_items = (int) yyvsp[-1].i;
2911
2912                       vardefs = add_vardef_type(vardefs, yyvsp[-6].map,
2913                                                 SPOVAR_MONST | SPOVAR_ARRAY);
2914                       add_opvars(splev, "iso",
2915                                  VA_PASS3(n_items, yyvsp[-6].map, SPO_VAR_INIT));
2916                       Free(yyvsp[-6].map);
2917                   }
2918 break;
2919 case 110:
2920 {
2921                       int n_items = (int) yyvsp[-1].i;
2922
2923                       vardefs = add_vardef_type(vardefs, yyvsp[-6].map,
2924                                                 SPOVAR_OBJ | SPOVAR_ARRAY);
2925                       add_opvars(splev, "iso",
2926                                  VA_PASS3(n_items, yyvsp[-6].map, SPO_VAR_INIT));
2927                       Free(yyvsp[-6].map);
2928                   }
2929 break;
2930 case 111:
2931 {
2932                       int n_items = (int) yyvsp[-1].i;
2933
2934                       vardefs = add_vardef_type(vardefs, yyvsp[-4].map,
2935                                                 SPOVAR_STRING | SPOVAR_ARRAY);
2936                       add_opvars(splev, "iso",
2937                                  VA_PASS3(n_items, yyvsp[-4].map, SPO_VAR_INIT));
2938                       Free(yyvsp[-4].map);
2939                   }
2940 break;
2941 case 112:
2942 {
2943                       add_opvars(splev, "O", VA_PASS1(yyvsp[0].i));
2944                       yyval.i = 1;
2945                   }
2946 break;
2947 case 113:
2948 {
2949                       add_opvars(splev, "O", VA_PASS1(yyvsp[0].i));
2950                       yyval.i = 1 + yyvsp[-2].i;
2951                   }
2952 break;
2953 case 114:
2954 {
2955                       add_opvars(splev, "M", VA_PASS1(yyvsp[0].i));
2956                       yyval.i = 1;
2957                   }
2958 break;
2959 case 115:
2960 {
2961                       add_opvars(splev, "M", VA_PASS1(yyvsp[0].i));
2962                       yyval.i = 1 + yyvsp[-2].i;
2963                   }
2964 break;
2965 case 116:
2966 {
2967                       add_opvars(splev, "m", VA_PASS1(yyvsp[0].i));
2968                       yyval.i = 1;
2969                   }
2970 break;
2971 case 117:
2972 {
2973                       add_opvars(splev, "m", VA_PASS1(yyvsp[0].i));
2974                       yyval.i = 1 + yyvsp[-2].i;
2975                   }
2976 break;
2977 case 118:
2978 {
2979                       yyval.i = 1;
2980                   }
2981 break;
2982 case 119:
2983 {
2984                       yyval.i = 1 + yyvsp[-2].i;
2985                   }
2986 break;
2987 case 120:
2988 {
2989                       add_opvars(splev, "c", VA_PASS1(yyvsp[0].i));
2990                       yyval.i = 1;
2991                   }
2992 break;
2993 case 121:
2994 {
2995                       add_opvars(splev, "c", VA_PASS1(yyvsp[0].i));
2996                       yyval.i = 1 + yyvsp[-2].i;
2997                   }
2998 break;
2999 case 122:
3000 {
3001                       yyval.i = 1;
3002                   }
3003 break;
3004 case 123:
3005 {
3006                       yyval.i = 1 + yyvsp[-2].i;
3007                   }
3008 break;
3009 case 124:
3010 {
3011                       yyval.i = 1;
3012                   }
3013 break;
3014 case 125:
3015 {
3016                       yyval.i = 1 + yyvsp[-2].i;
3017                   }
3018 break;
3019 case 126:
3020 {
3021                       struct lc_funcdefs *funcdef;
3022
3023                       if (in_function_definition)
3024                           lc_error("Recursively defined functions not allowed (function %s).", yyvsp[-1].map);
3025
3026                       in_function_definition++;
3027
3028                       if (funcdef_defined(function_definitions, yyvsp[-1].map, 1))
3029                           lc_error("Function '%s' already defined once.", yyvsp[-1].map);
3030
3031                       funcdef = funcdef_new(-1, yyvsp[-1].map);
3032                       funcdef->next = function_definitions;
3033                       function_definitions = funcdef;
3034                       function_splev_backup = splev;
3035                       splev = &(funcdef->code);
3036                       Free(yyvsp[-1].map);
3037                       curr_function = funcdef;
3038                       function_tmp_var_defs = vardefs;
3039                       vardefs = NULL;
3040                   }
3041 break;
3042 case 127:
3043 {
3044                       /* nothing */
3045                   }
3046 break;
3047 case 128:
3048 {
3049                       add_opvars(splev, "io", VA_PASS2(0, SPO_RETURN));
3050                       splev = function_splev_backup;
3051                       in_function_definition--;
3052                       curr_function = NULL;
3053                       vardef_free_all(vardefs);
3054                       vardefs = function_tmp_var_defs;
3055                   }
3056 break;
3057 case 129:
3058 {
3059                       struct lc_funcdefs *tmpfunc;
3060
3061                       tmpfunc = funcdef_defined(function_definitions, yyvsp[-3].map, 1);
3062                       if (tmpfunc) {
3063                           int l;
3064                           int nparams = (int) strlen(yyvsp[-1].map);
3065                           char *fparamstr = funcdef_paramtypes(tmpfunc);
3066
3067                           if (strcmp(yyvsp[-1].map, fparamstr)) {
3068                               char *tmps = strdup(decode_parm_str(fparamstr));
3069
3070                               lc_error("Function '%s' requires params '%s', got '%s' instead.",
3071                                        yyvsp[-3].map, tmps, decode_parm_str(yyvsp[-1].map));
3072                               Free(tmps);
3073                           }
3074                           Free(fparamstr);
3075                           Free(yyvsp[-1].map);
3076                           if (!(tmpfunc->n_called)) {
3077                               /* we haven't called the function yet, so insert it in the code */
3078                               struct opvar *jmp = New(struct opvar);
3079
3080                               set_opvar_int(jmp, splev->n_opcodes+1);
3081                               add_opcode(splev, SPO_PUSH, jmp);
3082                               /* we must jump past it first, then CALL it, due to RETURN. */
3083                               add_opcode(splev, SPO_JMP, NULL);
3084
3085                               tmpfunc->addr = splev->n_opcodes;
3086
3087                               { /* init function parameter variables */
3088                                   struct lc_funcdefs_parm *tfp = tmpfunc->params;
3089                                   while (tfp) {
3090                                       add_opvars(splev, "iso",
3091                                                  VA_PASS3(0, tfp->name,
3092                                                           SPO_VAR_INIT));
3093                                       tfp = tfp->next;
3094                                   }
3095                               }
3096
3097                               splev_add_from(splev, &(tmpfunc->code));
3098                               set_opvar_int(jmp,
3099                                             splev->n_opcodes - jmp->vardata.l);
3100                           }
3101                           l = (int) (tmpfunc->addr - splev->n_opcodes - 2);
3102                           add_opvars(splev, "iio",
3103                                      VA_PASS3(nparams, l, SPO_CALL));
3104                           tmpfunc->n_called++;
3105                       } else {
3106                           lc_error("Function '%s' not defined.", yyvsp[-3].map);
3107                       }
3108                       Free(yyvsp[-3].map);
3109                   }
3110 break;
3111 case 130:
3112 {
3113                       add_opcode(splev, SPO_EXIT, NULL);
3114                   }
3115 break;
3116 case 131:
3117 {
3118                       yyval.i = 100;
3119                   }
3120 break;
3121 case 132:
3122 {
3123                       yyval.i = yyvsp[0].i;
3124                   }
3125 break;
3126 case 133:
3127 {
3128                       /* val > rn2(100) */
3129                       add_opvars(splev, "iio",
3130                                  VA_PASS3((int) yyvsp[0].i, 100, SPO_RN2));
3131                       yyval.i = SPO_JG;
3132                   }
3133 break;
3134 case 134:
3135 {
3136                       yyval.i = yyvsp[-2].i;
3137                   }
3138 break;
3139 case 135:
3140 {
3141                       /* boolean, explicit foo != 0 */
3142                       add_opvars(splev, "i", VA_PASS1(0));
3143                       yyval.i = SPO_JNE;
3144                   }
3145 break;
3146 case 136:
3147 {
3148                       is_inconstant_number = 0;
3149                   }
3150 break;
3151 case 137:
3152 {
3153                       struct opvar *chkjmp;
3154
3155                       if (in_switch_statement > 0)
3156                           lc_error("Cannot nest switch-statements.");
3157
3158                       in_switch_statement++;
3159
3160                       n_switch_case_list = 0;
3161                       switch_default_case = NULL;
3162
3163                       if (!is_inconstant_number)
3164                           add_opvars(splev, "o", VA_PASS1(SPO_RN2));
3165                       is_inconstant_number = 0;
3166
3167                       chkjmp = New(struct opvar);
3168                       set_opvar_int(chkjmp, splev->n_opcodes+1);
3169                       switch_check_jump = chkjmp;
3170                       add_opcode(splev, SPO_PUSH, chkjmp);
3171                       add_opcode(splev, SPO_JMP, NULL);
3172                       break_stmt_start();
3173                   }
3174 break;
3175 case 138:
3176 {
3177                       struct opvar *endjump = New(struct opvar);
3178                       int i;
3179
3180                       set_opvar_int(endjump, splev->n_opcodes+1);
3181
3182                       add_opcode(splev, SPO_PUSH, endjump);
3183                       add_opcode(splev, SPO_JMP, NULL);
3184
3185                       set_opvar_int(switch_check_jump,
3186                              splev->n_opcodes - switch_check_jump->vardata.l);
3187
3188                       for (i = 0; i < n_switch_case_list; i++) {
3189                           add_opvars(splev, "oio",
3190                                      VA_PASS3(SPO_COPY,
3191                                               switch_case_value[i], SPO_CMP));
3192                           set_opvar_int(switch_case_list[i],
3193                          switch_case_list[i]->vardata.l - splev->n_opcodes-1);
3194                           add_opcode(splev, SPO_PUSH, switch_case_list[i]);
3195                           add_opcode(splev, SPO_JE, NULL);
3196                       }
3197
3198                       if (switch_default_case) {
3199                           set_opvar_int(switch_default_case,
3200                          switch_default_case->vardata.l - splev->n_opcodes-1);
3201                           add_opcode(splev, SPO_PUSH, switch_default_case);
3202                           add_opcode(splev, SPO_JMP, NULL);
3203                       }
3204
3205                       set_opvar_int(endjump, splev->n_opcodes - endjump->vardata.l);
3206
3207                       break_stmt_end(splev);
3208
3209                       add_opcode(splev, SPO_POP, NULL); /* get rid of the value in stack */
3210                       in_switch_statement--;
3211
3212
3213                   }
3214 break;
3215 case 141:
3216 {
3217                       if (n_switch_case_list < MAX_SWITCH_CASES) {
3218                           struct opvar *tmppush = New(struct opvar);
3219
3220                           set_opvar_int(tmppush, splev->n_opcodes);
3221                           switch_case_value[n_switch_case_list] = yyvsp[-1].i;
3222                           switch_case_list[n_switch_case_list++] = tmppush;
3223                       } else lc_error("Too many cases in a switch.");
3224                   }
3225 break;
3226 case 142:
3227 {
3228                   }
3229 break;
3230 case 143:
3231 {
3232                       struct opvar *tmppush = New(struct opvar);
3233
3234                       if (switch_default_case)
3235                           lc_error("Switch default case already used.");
3236
3237                       set_opvar_int(tmppush, splev->n_opcodes);
3238                       switch_default_case = tmppush;
3239                   }
3240 break;
3241 case 144:
3242 {
3243                   }
3244 break;
3245 case 145:
3246 {
3247                       if (!allow_break_statements)
3248                           lc_error("Cannot use BREAK outside a statement block.");
3249                       else {
3250                           break_stmt_new(splev, splev->n_opcodes);
3251                       }
3252                   }
3253 break;
3254 case 148:
3255 {
3256                       char buf[256], buf2[256];
3257
3258                       if (n_forloops >= MAX_NESTED_IFS) {
3259                           lc_error("FOR: Too deeply nested loops.");
3260                           n_forloops = MAX_NESTED_IFS - 1;
3261                       }
3262
3263                       /* first, define a variable for the for-loop end value */
3264                       Sprintf(buf, "%s end", yyvsp[-4].map);
3265                       /* the value of which is already in stack (the 2nd math_expr) */
3266                       add_opvars(splev, "iso", VA_PASS3(0, buf, SPO_VAR_INIT));
3267
3268                       vardefs = add_vardef_type(vardefs, yyvsp[-4].map, SPOVAR_INT);
3269                       /* define the for-loop variable. value is in stack (1st math_expr) */
3270                       add_opvars(splev, "iso", VA_PASS3(0, yyvsp[-4].map, SPO_VAR_INIT));
3271
3272                       /* calculate value for the loop "step" variable */
3273                       Sprintf(buf2, "%s step", yyvsp[-4].map);
3274                       /* end - start */
3275                       add_opvars(splev, "vvo",
3276                                  VA_PASS3(buf, yyvsp[-4].map, SPO_MATH_SUB));
3277                       /* sign of that */
3278                       add_opvars(splev, "o", VA_PASS1(SPO_MATH_SIGN));
3279                       /* save the sign into the step var */
3280                       add_opvars(splev, "iso",
3281                                  VA_PASS3(0, buf2, SPO_VAR_INIT));
3282
3283                       forloop_list[n_forloops].varname = strdup(yyvsp[-4].map);
3284                       forloop_list[n_forloops].jmp_point = splev->n_opcodes;
3285
3286                       n_forloops++;
3287                       Free(yyvsp[-4].map);
3288                   }
3289 break;
3290 case 149:
3291 {
3292                       /* nothing */
3293                       break_stmt_start();
3294                   }
3295 break;
3296 case 150:
3297 {
3298                       int l;
3299                       char buf[256], buf2[256];
3300
3301                       n_forloops--;
3302                       Sprintf(buf, "%s step", forloop_list[n_forloops].varname);
3303                       Sprintf(buf2, "%s end", forloop_list[n_forloops].varname);
3304                       /* compare for-loop var to end value */
3305                       add_opvars(splev, "vvo",
3306                                  VA_PASS3(forloop_list[n_forloops].varname,
3307                                           buf2, SPO_CMP));
3308                       /* var + step */
3309                       add_opvars(splev, "vvo",
3310                                 VA_PASS3(buf, forloop_list[n_forloops].varname,
3311                                          SPO_MATH_ADD));
3312                       /* for-loop var = (for-loop var + step) */
3313                       add_opvars(splev, "iso",
3314                                  VA_PASS3(0, forloop_list[n_forloops].varname,
3315                                           SPO_VAR_INIT));
3316                       /* jump back if compared values were not equal */
3317                       l = (int) (forloop_list[n_forloops].jmp_point
3318                                  - splev->n_opcodes - 1);
3319                       add_opvars(splev, "io", VA_PASS2(l, SPO_JNE));
3320                       Free(forloop_list[n_forloops].varname);
3321                       break_stmt_end(splev);
3322                   }
3323 break;
3324 case 151:
3325 {
3326                       struct opvar *tmppush = New(struct opvar);
3327
3328                       if (n_if_list >= MAX_NESTED_IFS) {
3329                           lc_error("LOOP: Too deeply nested conditionals.");
3330                           n_if_list = MAX_NESTED_IFS - 1;
3331                       }
3332                       set_opvar_int(tmppush, splev->n_opcodes);
3333                       if_list[n_if_list++] = tmppush;
3334
3335                       add_opvars(splev, "o", VA_PASS1(SPO_DEC));
3336                       break_stmt_start();
3337                   }
3338 break;
3339 case 152:
3340 {
3341                       struct opvar *tmppush;
3342
3343                       add_opvars(splev, "oio", VA_PASS3(SPO_COPY, 0, SPO_CMP));
3344
3345                       tmppush = (struct opvar *) if_list[--n_if_list];
3346                       set_opvar_int(tmppush,
3347                                     tmppush->vardata.l - splev->n_opcodes-1);
3348                       add_opcode(splev, SPO_PUSH, tmppush);
3349                       add_opcode(splev, SPO_JG, NULL);
3350                       add_opcode(splev, SPO_POP, NULL); /* discard count */
3351                       break_stmt_end(splev);
3352                   }
3353 break;
3354 case 153:
3355 {
3356                       struct opvar *tmppush2 = New(struct opvar);
3357
3358                       if (n_if_list >= MAX_NESTED_IFS) {
3359                           lc_error("IF: Too deeply nested conditionals.");
3360                           n_if_list = MAX_NESTED_IFS - 1;
3361                       }
3362
3363                       add_opcode(splev, SPO_CMP, NULL);
3364
3365                       set_opvar_int(tmppush2, splev->n_opcodes+1);
3366
3367                       if_list[n_if_list++] = tmppush2;
3368
3369                       add_opcode(splev, SPO_PUSH, tmppush2);
3370
3371                       add_opcode(splev, reverse_jmp_opcode( yyvsp[-1].i ), NULL);
3372
3373                   }
3374 break;
3375 case 154:
3376 {
3377                       if (n_if_list > 0) {
3378                           struct opvar *tmppush;
3379
3380                           tmppush = (struct opvar *) if_list[--n_if_list];
3381                           set_opvar_int(tmppush,
3382                                         splev->n_opcodes - tmppush->vardata.l);
3383                       } else lc_error("IF: Huh?!  No start address?");
3384                   }
3385 break;
3386 case 155:
3387 {
3388                       struct opvar *tmppush2 = New(struct opvar);
3389
3390                       if (n_if_list >= MAX_NESTED_IFS) {
3391                           lc_error("IF: Too deeply nested conditionals.");
3392                           n_if_list = MAX_NESTED_IFS - 1;
3393                       }
3394
3395                       add_opcode(splev, SPO_CMP, NULL);
3396
3397                       set_opvar_int(tmppush2, splev->n_opcodes+1);
3398
3399                       if_list[n_if_list++] = tmppush2;
3400
3401                       add_opcode(splev, SPO_PUSH, tmppush2);
3402
3403                       add_opcode(splev, reverse_jmp_opcode( yyvsp[0].i ), NULL);
3404
3405                   }
3406 break;
3407 case 156:
3408 {
3409                      /* do nothing */
3410                   }
3411 break;
3412 case 157:
3413 {
3414                       if (n_if_list > 0) {
3415                           struct opvar *tmppush;
3416
3417                           tmppush = (struct opvar *) if_list[--n_if_list];
3418                           set_opvar_int(tmppush,
3419                                         splev->n_opcodes - tmppush->vardata.l);
3420                       } else lc_error("IF: Huh?!  No start address?");
3421                   }
3422 break;
3423 case 158:
3424 {
3425                       if (n_if_list > 0) {
3426                           struct opvar *tmppush = New(struct opvar);
3427                           struct opvar *tmppush2;
3428
3429                           set_opvar_int(tmppush, splev->n_opcodes+1);
3430                           add_opcode(splev, SPO_PUSH, tmppush);
3431
3432                           add_opcode(splev, SPO_JMP, NULL);
3433
3434                           tmppush2 = (struct opvar *) if_list[--n_if_list];
3435
3436                           set_opvar_int(tmppush2,
3437                                       splev->n_opcodes - tmppush2->vardata.l);
3438                           if_list[n_if_list++] = tmppush;
3439                       } else lc_error("IF: Huh?!  No else-part address?");
3440                   }
3441 break;
3442 case 159:
3443 {
3444                       if (n_if_list > 0) {
3445                           struct opvar *tmppush;
3446                           tmppush = (struct opvar *) if_list[--n_if_list];
3447                           set_opvar_int(tmppush, splev->n_opcodes - tmppush->vardata.l);
3448                       } else lc_error("IF: Huh?! No end address?");
3449                   }
3450 break;
3451 case 160:
3452 {
3453                       add_opvars(splev, "o", VA_PASS1(SPO_MESSAGE));
3454                   }
3455 break;
3456 case 161:
3457 {
3458                       add_opvars(splev, "iiiiiio",
3459                               VA_PASS7(-1,  0, -1, -1, -1, -1, SPO_CORRIDOR));
3460                   }
3461 break;
3462 case 162:
3463 {
3464                       add_opvars(splev, "iiiiiio",
3465                               VA_PASS7(-1, yyvsp[0].i, -1, -1, -1, -1, SPO_CORRIDOR));
3466                   }
3467 break;
3468 case 163:
3469 {
3470                       add_opvars(splev, "iiiiiio",
3471                               VA_PASS7(-1, -1, -1, -1, -1, -1, SPO_CORRIDOR));
3472                   }
3473 break;
3474 case 164:
3475 {
3476                       add_opvars(splev, "iiiiiio",
3477                                  VA_PASS7(yyvsp[-2].corpos.room, yyvsp[-2].corpos.door, yyvsp[-2].corpos.wall,
3478                                           yyvsp[0].corpos.room, yyvsp[0].corpos.door, yyvsp[0].corpos.wall,
3479                                           SPO_CORRIDOR));
3480                   }
3481 break;
3482 case 165:
3483 {
3484                       add_opvars(splev, "iiiiiio",
3485                                  VA_PASS7(yyvsp[-2].corpos.room, yyvsp[-2].corpos.door, yyvsp[-2].corpos.wall,
3486                                           -1, -1, (long)yyvsp[0].i,
3487                                           SPO_CORRIDOR));
3488                   }
3489 break;
3490 case 166:
3491 {
3492                         yyval.corpos.room = yyvsp[-5].i;
3493                         yyval.corpos.wall = yyvsp[-3].i;
3494                         yyval.corpos.door = yyvsp[-1].i;
3495                   }
3496 break;
3497 case 167:
3498 {
3499                       if ((yyvsp[-2].i < 100) && (yyvsp[-3].i == OROOM))
3500                           lc_error("Only typed rooms can have a chance.");
3501                       else {
3502                           add_opvars(splev, "iii",
3503                                      VA_PASS3((long)yyvsp[-3].i, (long)yyvsp[-2].i, (long)yyvsp[0].i));
3504                       }
3505                   }
3506 break;
3507 case 168:
3508 {
3509                       long rflags = yyvsp[0].i;
3510
3511                       if (rflags == -1) rflags = (1 << 0);
3512                       add_opvars(splev, "iiiiiiio",
3513                                  VA_PASS8(rflags, ERR, ERR,
3514                                           yyvsp[-3].crd.x, yyvsp[-3].crd.y, yyvsp[-1].sze.width, yyvsp[-1].sze.height,
3515                                           SPO_SUBROOM));
3516                       break_stmt_start();
3517                   }
3518 break;
3519 case 169:
3520 {
3521                       break_stmt_end(splev);
3522                       add_opcode(splev, SPO_ENDROOM, NULL);
3523                   }
3524 break;
3525 case 170:
3526 {
3527                       long rflags = yyvsp[-2].i;
3528
3529                       if (rflags == -1) rflags = (1 << 0);
3530                       add_opvars(splev, "iiiiiiio",
3531                                  VA_PASS8(rflags,
3532                                           yyvsp[-3].crd.x, yyvsp[-3].crd.y, yyvsp[-5].crd.x, yyvsp[-5].crd.y,
3533                                           yyvsp[-1].sze.width, yyvsp[-1].sze.height, SPO_ROOM));
3534                       break_stmt_start();
3535                   }
3536 break;
3537 case 171:
3538 {
3539                       break_stmt_end(splev);
3540                       add_opcode(splev, SPO_ENDROOM, NULL);
3541                   }
3542 break;
3543 case 172:
3544 {
3545                         yyval.i = 1;
3546                   }
3547 break;
3548 case 173:
3549 {
3550                         yyval.i = yyvsp[0].i;
3551                   }
3552 break;
3553 case 174:
3554 {
3555                         if ( yyvsp[-3].i < 1 || yyvsp[-3].i > 5 ||
3556                             yyvsp[-1].i < 1 || yyvsp[-1].i > 5 ) {
3557                             lc_error("Room positions should be between 1-5: (%li,%li)!", yyvsp[-3].i, yyvsp[-1].i);
3558                         } else {
3559                             yyval.crd.x = yyvsp[-3].i;
3560                             yyval.crd.y = yyvsp[-1].i;
3561                         }
3562                   }
3563 break;
3564 case 175:
3565 {
3566                         yyval.crd.x = yyval.crd.y = ERR;
3567                   }
3568 break;
3569 case 176:
3570 {
3571                         if ( yyvsp[-3].i < 0 || yyvsp[-1].i < 0) {
3572                             lc_error("Invalid subroom position (%li,%li)!", yyvsp[-3].i, yyvsp[-1].i);
3573                         } else {
3574                             yyval.crd.x = yyvsp[-3].i;
3575                             yyval.crd.y = yyvsp[-1].i;
3576                         }
3577                   }
3578 break;
3579 case 177:
3580 {
3581                         yyval.crd.x = yyval.crd.y = ERR;
3582                   }
3583 break;
3584 case 178:
3585 {
3586                       yyval.crd.x = yyvsp[-3].i;
3587                       yyval.crd.y = yyvsp[-1].i;
3588                   }
3589 break;
3590 case 179:
3591 {
3592                       yyval.crd.x = yyval.crd.y = ERR;
3593                   }
3594 break;
3595 case 180:
3596 {
3597                         yyval.sze.width = yyvsp[-3].i;
3598                         yyval.sze.height = yyvsp[-1].i;
3599                   }
3600 break;
3601 case 181:
3602 {
3603                         yyval.sze.height = yyval.sze.width = ERR;
3604                   }
3605 break;
3606 case 182:
3607 {
3608                         /* ERR means random here */
3609                         if (yyvsp[-2].i == ERR && yyvsp[0].i != ERR) {
3610                             lc_error("If the door wall is random, so must be its pos!");
3611                         } else {
3612                             add_opvars(splev, "iiiio",
3613                                        VA_PASS5((long)yyvsp[0].i, (long)yyvsp[-4].i, (long)yyvsp[-6].i,
3614                                                 (long)yyvsp[-2].i, SPO_ROOM_DOOR));
3615                         }
3616                   }
3617 break;
3618 case 183:
3619 {
3620                       add_opvars(splev, "io", VA_PASS2((long)yyvsp[-2].i, SPO_DOOR));
3621                   }
3622 break;
3623 case 188:
3624 {
3625                       yyval.i = yyvsp[0].i;
3626                   }
3627 break;
3628 case 189:
3629 {
3630                       yyval.i = (yyvsp[-2].i | yyvsp[0].i);
3631                   }
3632 break;
3633 case 192:
3634 {
3635                       add_opvars(splev, "ciisiio",
3636                                  VA_PASS7(0, 0, 1, (char *) 0, 0, 0, SPO_MAP));
3637                       max_x_map = COLNO-1;
3638                       max_y_map = ROWNO;
3639                   }
3640 break;
3641 case 193:
3642 {
3643                       add_opvars(splev, "cii",
3644                                  VA_PASS3(SP_COORD_PACK((yyvsp[-4].i), (yyvsp[-2].i)),
3645                                           1, (int) yyvsp[-1].i));
3646                       scan_map(yyvsp[0].map, splev);
3647                       Free(yyvsp[0].map);
3648                   }
3649 break;
3650 case 194:
3651 {
3652                       add_opvars(splev, "ii", VA_PASS2(2, (int) yyvsp[-1].i));
3653                       scan_map(yyvsp[0].map, splev);
3654                       Free(yyvsp[0].map);
3655                   }
3656 break;
3657 case 199:
3658 {
3659                       add_opvars(splev, "io", VA_PASS2(0, SPO_MONSTER));
3660                   }
3661 break;
3662 case 200:
3663 {
3664                       add_opvars(splev, "io", VA_PASS2(1, SPO_MONSTER));
3665                       in_container_obj++;
3666                       break_stmt_start();
3667                   }
3668 break;
3669 case 201:
3670 {
3671                      break_stmt_end(splev);
3672                      in_container_obj--;
3673                      add_opvars(splev, "o", VA_PASS1(SPO_END_MONINVENT));
3674                  }
3675 break;
3676 case 202:
3677 {
3678                       /* nothing */
3679                   }
3680 break;
3681 case 203:
3682 {
3683                       struct opvar *stopit = New(struct opvar);
3684
3685                       set_opvar_int(stopit, SP_M_V_END);
3686                       add_opcode(splev, SPO_PUSH, stopit);
3687                       yyval.i = 0x0000;
3688                   }
3689 break;
3690 case 204:
3691 {
3692                       if (( yyvsp[-2].i & yyvsp[0].i ))
3693                           lc_error("MONSTER extra info defined twice.");
3694                       yyval.i = ( yyvsp[-2].i | yyvsp[0].i );
3695                   }
3696 break;
3697 case 205:
3698 {
3699                       add_opvars(splev, "i", VA_PASS1(SP_M_V_NAME));
3700                       yyval.i = 0x0001;
3701                   }
3702 break;
3703 case 206:
3704 {
3705                       add_opvars(splev, "ii",
3706                                  VA_PASS2((int) yyvsp[0].i, SP_M_V_PEACEFUL));
3707                       yyval.i = 0x0002;
3708                   }
3709 break;
3710 case 207:
3711 {
3712                       add_opvars(splev, "ii",
3713                                  VA_PASS2((int) yyvsp[0].i, SP_M_V_ASLEEP));
3714                       yyval.i = 0x0004;
3715                   }
3716 break;
3717 case 208:
3718 {
3719                       add_opvars(splev, "ii",
3720                                  VA_PASS2((int) yyvsp[0].i, SP_M_V_ALIGN));
3721                       yyval.i = 0x0008;
3722                   }
3723 break;
3724 case 209:
3725 {
3726                       add_opvars(splev, "ii",
3727                                  VA_PASS2((int) yyvsp[-1].i, SP_M_V_APPEAR));
3728                       yyval.i = 0x0010;
3729                   }
3730 break;
3731 case 210:
3732 {
3733                       add_opvars(splev, "ii", VA_PASS2(1, SP_M_V_FEMALE));
3734                       yyval.i = 0x0020;
3735                   }
3736 break;
3737 case 211:
3738 {
3739                       add_opvars(splev, "ii", VA_PASS2(1, SP_M_V_INVIS));
3740                       yyval.i = 0x0040;
3741                   }
3742 break;
3743 case 212:
3744 {
3745                       add_opvars(splev, "ii", VA_PASS2(1, SP_M_V_CANCELLED));
3746                       yyval.i = 0x0080;
3747                   }
3748 break;
3749 case 213:
3750 {
3751                       add_opvars(splev, "ii", VA_PASS2(1, SP_M_V_REVIVED));
3752                       yyval.i = 0x0100;
3753                   }
3754 break;
3755 case 214:
3756 {
3757                       add_opvars(splev, "ii", VA_PASS2(1, SP_M_V_AVENGE));
3758                       yyval.i = 0x0200;
3759                   }
3760 break;
3761 case 215:
3762 {
3763                       add_opvars(splev, "i", VA_PASS1(SP_M_V_FLEEING));
3764                       yyval.i = 0x0400;
3765                   }
3766 break;
3767 case 216:
3768 {
3769                       add_opvars(splev, "i", VA_PASS1(SP_M_V_BLINDED));
3770                       yyval.i = 0x0800;
3771                   }
3772 break;
3773 case 217:
3774 {
3775                       add_opvars(splev, "i", VA_PASS1(SP_M_V_PARALYZED));
3776                       yyval.i = 0x1000;
3777                   }
3778 break;
3779 case 218:
3780 {
3781                       add_opvars(splev, "ii", VA_PASS2(1, SP_M_V_STUNNED));
3782                       yyval.i = 0x2000;
3783                   }
3784 break;
3785 case 219:
3786 {
3787                       add_opvars(splev, "ii", VA_PASS2(1, SP_M_V_CONFUSED));
3788                       yyval.i = 0x4000;
3789                   }
3790 break;
3791 case 220:
3792 {
3793                       add_opvars(splev, "ii",
3794                                  VA_PASS2((int) yyvsp[0].i, SP_M_V_SEENTRAPS));
3795                       yyval.i = 0x8000;
3796                   }
3797 break;
3798 case 221:
3799 {
3800                       int token = get_trap_type(yyvsp[0].map);
3801
3802                       if (token == ERR || token == 0)
3803                           lc_error("Unknown trap type '%s'!", yyvsp[0].map);
3804                       Free(yyvsp[0].map);
3805                       yyval.i = (1L << (token - 1));
3806                   }
3807 break;
3808 case 222:
3809 {
3810                       yyval.i = (long) ~0;
3811                   }
3812 break;
3813 case 223:
3814 {
3815                       int token = get_trap_type(yyvsp[-2].map);
3816                       if (token == ERR || token == 0)
3817                           lc_error("Unknown trap type '%s'!", yyvsp[-2].map);
3818
3819                       if ((1L << (token - 1)) & yyvsp[0].i)
3820                           lc_error("Monster seen_traps, trap '%s' listed twice.", yyvsp[-2].map);
3821                       Free(yyvsp[-2].map);
3822                       yyval.i = ((1L << (token - 1)) | yyvsp[0].i);
3823                   }
3824 break;
3825 case 224:
3826 {
3827                       int cnt = 0;
3828
3829                       if (in_container_obj)
3830                           cnt |= SP_OBJ_CONTENT;
3831                       add_opvars(splev, "io", VA_PASS2(cnt, SPO_OBJECT));
3832                   }
3833 break;
3834 case 225:
3835 {
3836                       int cnt = SP_OBJ_CONTAINER;
3837
3838                       if (in_container_obj)
3839                           cnt |= SP_OBJ_CONTENT;
3840                       add_opvars(splev, "io", VA_PASS2(cnt, SPO_OBJECT));
3841                       in_container_obj++;
3842                       break_stmt_start();
3843                   }
3844 break;
3845 case 226:
3846 {
3847                      break_stmt_end(splev);
3848                      in_container_obj--;
3849                      add_opcode(splev, SPO_POP_CONTAINER, NULL);
3850                  }
3851 break;
3852 case 227:
3853 {
3854                       if (( yyvsp[0].i & 0x4000) && in_container_obj)
3855                           lc_error("Object cannot have a coord when contained.");
3856                       else if (!( yyvsp[0].i & 0x4000) && !in_container_obj)
3857                           lc_error("Object needs a coord when not contained.");
3858                   }
3859 break;
3860 case 228:
3861 {
3862                       struct opvar *stopit = New(struct opvar);
3863                       set_opvar_int(stopit, SP_O_V_END);
3864                       add_opcode(splev, SPO_PUSH, stopit);
3865                       yyval.i = 0x00;
3866                   }
3867 break;
3868 case 229:
3869 {
3870                       if (( yyvsp[-2].i & yyvsp[0].i ))
3871                           lc_error("OBJECT extra info '%s' defined twice.", curr_token);
3872                       yyval.i = ( yyvsp[-2].i | yyvsp[0].i );
3873                   }
3874 break;
3875 case 230:
3876 {
3877                       add_opvars(splev, "ii",
3878                                  VA_PASS2((int) yyvsp[0].i, SP_O_V_CURSE));
3879                       yyval.i = 0x0001;
3880                   }
3881 break;
3882 case 231:
3883 {
3884                       add_opvars(splev, "i", VA_PASS1(SP_O_V_CORPSENM));
3885                       yyval.i = 0x0002;
3886                   }
3887 break;
3888 case 232:
3889 {
3890                       add_opvars(splev, "i", VA_PASS1(SP_O_V_SPE));
3891                       yyval.i = 0x0004;
3892                   }
3893 break;
3894 case 233:
3895 {
3896                       add_opvars(splev, "i", VA_PASS1(SP_O_V_NAME));
3897                       yyval.i = 0x0008;
3898                   }
3899 break;
3900 case 234:
3901 {
3902                       add_opvars(splev, "i", VA_PASS1(SP_O_V_QUAN));
3903                       yyval.i = 0x0010;
3904                   }
3905 break;
3906 case 235:
3907 {
3908                       add_opvars(splev, "ii", VA_PASS2(1, SP_O_V_BURIED));
3909                       yyval.i = 0x0020;
3910                   }
3911 break;
3912 case 236:
3913 {
3914                       add_opvars(splev, "ii", VA_PASS2((int) yyvsp[0].i, SP_O_V_LIT));
3915                       yyval.i = 0x0040;
3916                   }
3917 break;
3918 case 237:
3919 {
3920                       add_opvars(splev, "i", VA_PASS1(SP_O_V_ERODED));
3921                       yyval.i = 0x0080;
3922                   }
3923 break;
3924 case 238:
3925 {
3926                       add_opvars(splev, "ii", VA_PASS2(-1, SP_O_V_ERODED));
3927                       yyval.i = 0x0080;
3928                   }
3929 break;
3930 case 239:
3931 {
3932                       if (yyvsp[0].i == D_LOCKED) {
3933                           add_opvars(splev, "ii", VA_PASS2(1, SP_O_V_LOCKED));
3934                           yyval.i = 0x0100;
3935                       } else if (yyvsp[0].i == D_BROKEN) {
3936                           add_opvars(splev, "ii", VA_PASS2(1, SP_O_V_BROKEN));
3937                           yyval.i = 0x0200;
3938                       } else
3939                           lc_error("DOOR state can only be locked or broken.");
3940                   }
3941 break;
3942 case 240:
3943 {
3944                       add_opvars(splev, "ii",
3945                                  VA_PASS2((int) yyvsp[0].i, SP_O_V_TRAPPED));
3946                       yyval.i = 0x0400;
3947                   }
3948 break;
3949 case 241:
3950 {
3951                       add_opvars(splev, "i", VA_PASS1(SP_O_V_RECHARGED));
3952                       yyval.i = 0x0800;
3953                   }
3954 break;
3955 case 242:
3956 {
3957                       add_opvars(splev, "ii", VA_PASS2(1, SP_O_V_INVIS));
3958                       yyval.i = 0x1000;
3959                   }
3960 break;
3961 case 243:
3962 {
3963                       add_opvars(splev, "ii", VA_PASS2(1, SP_O_V_GREASED));
3964                       yyval.i = 0x2000;
3965                   }
3966 break;
3967 case 244:
3968 {
3969                       add_opvars(splev, "i", VA_PASS1(SP_O_V_COORD));
3970                       yyval.i = 0x4000;
3971                   }
3972 break;
3973 case 245:
3974 {
3975                       add_opvars(splev, "io", VA_PASS2((int) yyvsp[-2].i, SPO_TRAP));
3976                   }
3977 break;
3978 case 246:
3979 {
3980                        long dir, state = 0;
3981
3982                        /* convert dir from a DIRECTION to a DB_DIR */
3983                        dir = yyvsp[-2].i;
3984                        switch (dir) {
3985                        case W_NORTH: dir = DB_NORTH; break;
3986                        case W_SOUTH: dir = DB_SOUTH; break;
3987                        case W_EAST:  dir = DB_EAST;  break;
3988                        case W_WEST:  dir = DB_WEST;  break;
3989                        default:
3990                            lc_error("Invalid drawbridge direction.");
3991                            break;
3992                        }
3993
3994                        if ( yyvsp[0].i == D_ISOPEN )
3995                            state = 1;
3996                        else if ( yyvsp[0].i == D_CLOSED )
3997                            state = 0;
3998                        else if ( yyvsp[0].i == -1 )
3999                            state = -1;
4000                        else
4001                            lc_error("A drawbridge can only be open, closed or random!");
4002                        add_opvars(splev, "iio",
4003                                   VA_PASS3(state, dir, SPO_DRAWBRIDGE));
4004                    }
4005 break;
4006 case 247:
4007 {
4008                       add_opvars(splev, "iiio",
4009                                  VA_PASS4((int) yyvsp[0].i, 1, 0, SPO_MAZEWALK));
4010                   }
4011 break;
4012 case 248:
4013 {
4014                       add_opvars(splev, "iiio",
4015                                  VA_PASS4((int) yyvsp[-3].i, (int) yyvsp[-1].i,
4016                                           (int) yyvsp[0].i, SPO_MAZEWALK));
4017                   }
4018 break;
4019 case 249:
4020 {
4021                       add_opvars(splev, "rio",
4022                                  VA_PASS3(SP_REGION_PACK(-1,-1,-1,-1),
4023                                           0, SPO_WALLIFY));
4024                   }
4025 break;
4026 case 250:
4027 {
4028                       add_opvars(splev, "io", VA_PASS2(1, SPO_WALLIFY));
4029                   }
4030 break;
4031 case 251:
4032 {
4033                       add_opvars(splev, "io",
4034                                  VA_PASS2((int) yyvsp[0].i, SPO_LADDER));
4035                   }
4036 break;
4037 case 252:
4038 {
4039                       add_opvars(splev, "io",
4040                                  VA_PASS2((int) yyvsp[0].i, SPO_STAIR));
4041                   }
4042 break;
4043 case 253:
4044 {
4045                       add_opvars(splev, "iiiii iiiii iiso",
4046                                  VA_PASS14(yyvsp[-4].lregn.x1, yyvsp[-4].lregn.y1, yyvsp[-4].lregn.x2, yyvsp[-4].lregn.y2, yyvsp[-4].lregn.area,
4047                                            yyvsp[-2].lregn.x1, yyvsp[-2].lregn.y1, yyvsp[-2].lregn.x2, yyvsp[-2].lregn.y2, yyvsp[-2].lregn.area,
4048                                      (long) ((yyvsp[0].i) ? LR_UPSTAIR : LR_DOWNSTAIR),
4049                                            0, (char *) 0, SPO_LEVREGION));
4050                   }
4051 break;
4052 case 254:
4053 {
4054                       add_opvars(splev, "iiiii iiiii iiso",
4055                                  VA_PASS14(yyvsp[-4].lregn.x1, yyvsp[-4].lregn.y1, yyvsp[-4].lregn.x2, yyvsp[-4].lregn.y2, yyvsp[-4].lregn.area,
4056                                            yyvsp[-2].lregn.x1, yyvsp[-2].lregn.y1, yyvsp[-2].lregn.x2, yyvsp[-2].lregn.y2, yyvsp[-2].lregn.area,
4057                                            LR_PORTAL, 0, yyvsp[0].map, SPO_LEVREGION));
4058                       Free(yyvsp[0].map);
4059                   }
4060 break;
4061 case 255:
4062 {
4063                       long rtyp = 0;
4064                       switch(yyvsp[0].i) {
4065                       case -1: rtyp = LR_TELE; break;
4066                       case  0: rtyp = LR_DOWNTELE; break;
4067                       case  1: rtyp = LR_UPTELE; break;
4068                       }
4069                       add_opvars(splev, "iiiii iiiii iiso",
4070                                  VA_PASS14(yyvsp[-3].lregn.x1, yyvsp[-3].lregn.y1, yyvsp[-3].lregn.x2, yyvsp[-3].lregn.y2, yyvsp[-3].lregn.area,
4071                                            yyvsp[-1].lregn.x1, yyvsp[-1].lregn.y1, yyvsp[-1].lregn.x2, yyvsp[-1].lregn.y2, yyvsp[-1].lregn.area,
4072                                            rtyp, 0, (char *)0, SPO_LEVREGION));
4073                   }
4074 break;
4075 case 256:
4076 {
4077                       add_opvars(splev, "iiiii iiiii iiso",
4078                                  VA_PASS14(yyvsp[-2].lregn.x1, yyvsp[-2].lregn.y1, yyvsp[-2].lregn.x2, yyvsp[-2].lregn.y2, yyvsp[-2].lregn.area,
4079                                            yyvsp[0].lregn.x1, yyvsp[0].lregn.y1, yyvsp[0].lregn.x2, yyvsp[0].lregn.y2, yyvsp[0].lregn.area,
4080                                            (long) LR_BRANCH, 0,
4081                                            (char *) 0, SPO_LEVREGION));
4082                   }
4083 break;
4084 case 257:
4085 {
4086                         yyval.i = -1;
4087                   }
4088 break;
4089 case 258:
4090 {
4091                         yyval.i = yyvsp[0].i;
4092                   }
4093 break;
4094 case 259:
4095 {
4096                       add_opvars(splev, "o", VA_PASS1(SPO_FOUNTAIN));
4097                   }
4098 break;
4099 case 260:
4100 {
4101                       add_opvars(splev, "o", VA_PASS1(SPO_SINK));
4102                   }
4103 break;
4104 case 261:
4105 {
4106                       add_opvars(splev, "o", VA_PASS1(SPO_POOL));
4107                   }
4108 break;
4109 case 262:
4110 {
4111                       yyval.terr.lit = -2;
4112                       yyval.terr.ter = what_map_char((char) yyvsp[0].i);
4113                   }
4114 break;
4115 case 263:
4116 {
4117                       yyval.terr.lit = yyvsp[-1].i;
4118                       yyval.terr.ter = what_map_char((char) yyvsp[-3].i);
4119                   }
4120 break;
4121 case 264:
4122 {
4123                       add_opvars(splev, "io",
4124                                  VA_PASS2(yyvsp[0].i, SPO_REPLACETERRAIN));
4125                   }
4126 break;
4127 case 265:
4128 {
4129                      add_opvars(splev, "o", VA_PASS1(SPO_TERRAIN));
4130                  }
4131 break;
4132 case 266:
4133 {
4134                       add_opvars(splev, "o", VA_PASS1(SPO_NON_DIGGABLE));
4135                   }
4136 break;
4137 case 267:
4138 {
4139                       add_opvars(splev, "o", VA_PASS1(SPO_NON_PASSWALL));
4140                   }
4141 break;
4142 case 268:
4143 {
4144                       long irr;
4145                       long rt = yyvsp[-1].i;
4146                       long rflags = yyvsp[0].i;
4147
4148                       if (rflags == -1) rflags = (1 << 0);
4149                       if (!(rflags & 1)) rt += MAXRTYPE+1;
4150                       irr = ((rflags & 2) != 0);
4151                       add_opvars(splev, "iiio",
4152                                  VA_PASS4((long)yyvsp[-3].i, rt, rflags, SPO_REGION));
4153                       yyval.i = (irr || (rflags & 1) || rt != OROOM);
4154                       break_stmt_start();
4155                   }
4156 break;
4157 case 269:
4158 {
4159                       break_stmt_end(splev);
4160                       if ( yyvsp[-1].i ) {
4161                           add_opcode(splev, SPO_ENDROOM, NULL);
4162                       } else if ( yyvsp[0].i )
4163                           lc_error("Cannot use lev statements in non-permanent REGION");
4164                   }
4165 break;
4166 case 270:
4167 {
4168                       yyval.i = 0;
4169                   }
4170 break;
4171 case 271:
4172 {
4173                       yyval.i = yyvsp[0].i;
4174                   }
4175 break;
4176 case 272:
4177 {
4178                       add_opvars(splev, "iio",
4179                                  VA_PASS3((long)yyvsp[0].i, (long)yyvsp[-2].i, SPO_ALTAR));
4180                   }
4181 break;
4182 case 273:
4183 {
4184                       add_opvars(splev, "io", VA_PASS2(2, SPO_GRAVE));
4185                   }
4186 break;
4187 case 274:
4188 {
4189                       add_opvars(splev, "sio",
4190                                  VA_PASS3((char *)0, 1, SPO_GRAVE));
4191                   }
4192 break;
4193 case 275:
4194 {
4195                       add_opvars(splev, "sio",
4196                                  VA_PASS3((char *)0, 0, SPO_GRAVE));
4197                   }
4198 break;
4199 case 276:
4200 {
4201                       add_opvars(splev, "o", VA_PASS1(SPO_GOLD));
4202                   }
4203 break;
4204 case 277:
4205 {
4206                       add_opvars(splev, "io",
4207                                  VA_PASS2((long)yyvsp[-2].i, SPO_ENGRAVING));
4208                   }
4209 break;
4210 case 278:
4211 {
4212                       add_opvars(splev, "o", VA_PASS1(SPO_MINERALIZE));
4213                   }
4214 break;
4215 case 279:
4216 {
4217                       add_opvars(splev, "iiiio",
4218                                  VA_PASS5(-1L, -1L, -1L, -1L, SPO_MINERALIZE));
4219                   }
4220 break;
4221 case 280:
4222 {
4223                         int token = get_trap_type(yyvsp[0].map);
4224                         if (token == ERR)
4225                             lc_error("Unknown trap type '%s'!", yyvsp[0].map);
4226                         yyval.i = token;
4227                         Free(yyvsp[0].map);
4228                   }
4229 break;
4230 case 282:
4231 {
4232                         int token = get_room_type(yyvsp[0].map);
4233                         if (token == ERR) {
4234                             lc_warning("Unknown room type \"%s\"!  Making ordinary room...", yyvsp[0].map);
4235                                 yyval.i = OROOM;
4236                         } else
4237                                 yyval.i = token;
4238                         Free(yyvsp[0].map);
4239                   }
4240 break;
4241 case 284:
4242 {
4243                         yyval.i = -1;
4244                   }
4245 break;
4246 case 285:
4247 {
4248                         yyval.i = yyvsp[0].i;
4249                   }
4250 break;
4251 case 286:
4252 {
4253                         yyval.i = yyvsp[0].i;
4254                   }
4255 break;
4256 case 287:
4257 {
4258                         yyval.i = yyvsp[-2].i | yyvsp[0].i;
4259                   }
4260 break;
4261 case 288:
4262 {
4263                       yyval.i = (yyvsp[0].i << 0);
4264                   }
4265 break;
4266 case 289:
4267 {
4268                       yyval.i = (yyvsp[0].i << 1);
4269                   }
4270 break;
4271 case 290:
4272 {
4273                       yyval.i = (yyvsp[0].i << 2);
4274                   }
4275 break;
4276 case 297:
4277 {
4278                         yyval.i = - MAX_REGISTERS - 1;
4279                   }
4280 break;
4281 case 300:
4282 {
4283                         yyval.i = - MAX_REGISTERS - 1;
4284                   }
4285 break;
4286 case 303:
4287 {
4288                         if ( yyvsp[-1].i >= 3 )
4289                                 lc_error("Register Index overflow!");
4290                         else
4291                                 yyval.i = - yyvsp[-1].i - 1;
4292                   }
4293 break;
4294 case 304:
4295 {
4296                       add_opvars(splev, "s", VA_PASS1(yyvsp[0].map));
4297                       Free(yyvsp[0].map);
4298                   }
4299 break;
4300 case 305:
4301 {
4302                       check_vardef_type(vardefs, yyvsp[0].map, SPOVAR_STRING);
4303                       vardef_used(vardefs, yyvsp[0].map);
4304                       add_opvars(splev, "v", VA_PASS1(yyvsp[0].map));
4305                       Free(yyvsp[0].map);
4306                   }
4307 break;
4308 case 306:
4309 {
4310                       check_vardef_type(vardefs, yyvsp[-3].map,
4311                                         SPOVAR_STRING | SPOVAR_ARRAY);
4312                       vardef_used(vardefs, yyvsp[-3].map);
4313                       add_opvars(splev, "v", VA_PASS1(yyvsp[-3].map));
4314                       Free(yyvsp[-3].map);
4315                   }
4316 break;
4317 case 307:
4318 {
4319                       /* nothing */
4320                   }
4321 break;
4322 case 308:
4323 {
4324                       add_opvars(splev, "c", VA_PASS1(yyvsp[0].i));
4325                   }
4326 break;
4327 case 309:
4328 {
4329                       add_opvars(splev, "o", VA_PASS1(SPO_SEL_RNDCOORD));
4330                   }
4331 break;
4332 case 310:
4333 {
4334                       check_vardef_type(vardefs, yyvsp[0].map, SPOVAR_COORD);
4335                       vardef_used(vardefs, yyvsp[0].map);
4336                       add_opvars(splev, "v", VA_PASS1(yyvsp[0].map));
4337                       Free(yyvsp[0].map);
4338                   }
4339 break;
4340 case 311:
4341 {
4342                       check_vardef_type(vardefs, yyvsp[-3].map,
4343                                         SPOVAR_COORD | SPOVAR_ARRAY);
4344                       vardef_used(vardefs, yyvsp[-3].map);
4345                       add_opvars(splev, "v", VA_PASS1(yyvsp[-3].map));
4346                       Free(yyvsp[-3].map);
4347                   }
4348 break;
4349 case 312:
4350 {
4351                       if (yyvsp[-3].i < 0 || yyvsp[-1].i < 0 || yyvsp[-3].i >= COLNO || yyvsp[-1].i >= ROWNO)
4352                           lc_error("Coordinates (%li,%li) out of map range!",
4353                                    yyvsp[-3].i, yyvsp[-1].i);
4354                       yyval.i = SP_COORD_PACK(yyvsp[-3].i, yyvsp[-1].i);
4355                   }
4356 break;
4357 case 313:
4358 {
4359                       yyval.i = SP_COORD_PACK_RANDOM(0);
4360                   }
4361 break;
4362 case 314:
4363 {
4364                       yyval.i = SP_COORD_PACK_RANDOM(yyvsp[-1].i);
4365                   }
4366 break;
4367 case 315:
4368 {
4369                       yyval.i = yyvsp[0].i;
4370                   }
4371 break;
4372 case 316:
4373 {
4374                       if ((yyvsp[-2].i & yyvsp[0].i))
4375                           lc_warning("Humidity flag used twice.");
4376                       yyval.i = (yyvsp[-2].i | yyvsp[0].i);
4377                   }
4378 break;
4379 case 317:
4380 {
4381                       /* nothing */
4382                   }
4383 break;
4384 case 318:
4385 {
4386                       check_vardef_type(vardefs, yyvsp[0].map, SPOVAR_REGION);
4387                       vardef_used(vardefs, yyvsp[0].map);
4388                       add_opvars(splev, "v", VA_PASS1(yyvsp[0].map));
4389                       Free(yyvsp[0].map);
4390                   }
4391 break;
4392 case 319:
4393 {
4394                       check_vardef_type(vardefs, yyvsp[-3].map,
4395                                         SPOVAR_REGION | SPOVAR_ARRAY);
4396                       vardef_used(vardefs, yyvsp[-3].map);
4397                       add_opvars(splev, "v", VA_PASS1(yyvsp[-3].map));
4398                       Free(yyvsp[-3].map);
4399                   }
4400 break;
4401 case 320:
4402 {
4403                       long r = SP_REGION_PACK(yyvsp[-7].i, yyvsp[-5].i, yyvsp[-3].i, yyvsp[-1].i);
4404
4405                       if (yyvsp[-7].i > yyvsp[-3].i || yyvsp[-5].i > yyvsp[-1].i)
4406                           lc_error("Region start > end: (%ld,%ld,%ld,%ld)!",
4407                                    yyvsp[-7].i, yyvsp[-5].i, yyvsp[-3].i, yyvsp[-1].i);
4408
4409                       add_opvars(splev, "r", VA_PASS1(r));
4410                       yyval.i = r;
4411                   }
4412 break;
4413 case 321:
4414 {
4415                       add_opvars(splev, "m", VA_PASS1(yyvsp[0].i));
4416                   }
4417 break;
4418 case 322:
4419 {
4420                       check_vardef_type(vardefs, yyvsp[0].map, SPOVAR_MAPCHAR);
4421                       vardef_used(vardefs, yyvsp[0].map);
4422                       add_opvars(splev, "v", VA_PASS1(yyvsp[0].map));
4423                       Free(yyvsp[0].map);
4424                   }
4425 break;
4426 case 323:
4427 {
4428                       check_vardef_type(vardefs, yyvsp[-3].map,
4429                                         SPOVAR_MAPCHAR | SPOVAR_ARRAY);
4430                       vardef_used(vardefs, yyvsp[-3].map);
4431                       add_opvars(splev, "v", VA_PASS1(yyvsp[-3].map));
4432                       Free(yyvsp[-3].map);
4433                   }
4434 break;
4435 case 324:
4436 {
4437                       if (what_map_char((char) yyvsp[0].i) != INVALID_TYPE)
4438                           yyval.i = SP_MAPCHAR_PACK(what_map_char((char) yyvsp[0].i), -2);
4439                       else {
4440                           lc_error("Unknown map char type '%c'!", yyvsp[0].i);
4441                           yyval.i = SP_MAPCHAR_PACK(STONE, -2);
4442                       }
4443                   }
4444 break;
4445 case 325:
4446 {
4447                       if (what_map_char((char) yyvsp[-3].i) != INVALID_TYPE)
4448                           yyval.i = SP_MAPCHAR_PACK(what_map_char((char) yyvsp[-3].i), yyvsp[-1].i);
4449                       else {
4450                           lc_error("Unknown map char type '%c'!", yyvsp[-3].i);
4451                           yyval.i = SP_MAPCHAR_PACK(STONE, yyvsp[-1].i);
4452                       }
4453                   }
4454 break;
4455 case 326:
4456 {
4457                       add_opvars(splev, "M", VA_PASS1(yyvsp[0].i));
4458                   }
4459 break;
4460 case 327:
4461 {
4462                       check_vardef_type(vardefs, yyvsp[0].map, SPOVAR_MONST);
4463                       vardef_used(vardefs, yyvsp[0].map);
4464                       add_opvars(splev, "v", VA_PASS1(yyvsp[0].map));
4465                       Free(yyvsp[0].map);
4466                   }
4467 break;
4468 case 328:
4469 {
4470                       check_vardef_type(vardefs, yyvsp[-3].map,
4471                                         SPOVAR_MONST | SPOVAR_ARRAY);
4472                       vardef_used(vardefs, yyvsp[-3].map);
4473                       add_opvars(splev, "v", VA_PASS1(yyvsp[-3].map));
4474                       Free(yyvsp[-3].map);
4475                   }
4476 break;
4477 case 329:
4478 {
4479                       long m = get_monster_id(yyvsp[0].map, (char)0);
4480                       if (m == ERR) {
4481                           lc_error("Unknown monster \"%s\"!", yyvsp[0].map);
4482                           yyval.i = -1;
4483                       } else
4484                           yyval.i = SP_MONST_PACK(m,
4485                                          def_monsyms[(int) mons[m].mlet].sym);
4486                       Free(yyvsp[0].map);
4487                   }
4488 break;
4489 case 330:
4490 {
4491                         if (check_monster_char((char) yyvsp[0].i))
4492                             yyval.i = SP_MONST_PACK(-1, yyvsp[0].i);
4493                         else {
4494                             lc_error("Unknown monster class '%c'!", yyvsp[0].i);
4495                             yyval.i = -1;
4496                         }
4497                   }
4498 break;
4499 case 331:
4500 {
4501                       long m = get_monster_id(yyvsp[-1].map, (char) yyvsp[-3].i);
4502                       if (m == ERR) {
4503                           lc_error("Unknown monster ('%c', \"%s\")!", yyvsp[-3].i, yyvsp[-1].map);
4504                           yyval.i = -1;
4505                       } else
4506                           yyval.i = SP_MONST_PACK(m, yyvsp[-3].i);
4507                       Free(yyvsp[-1].map);
4508                   }
4509 break;
4510 case 332:
4511 {
4512                       yyval.i = -1;
4513                   }
4514 break;
4515 case 333:
4516 {
4517                       add_opvars(splev, "O", VA_PASS1(yyvsp[0].i));
4518                   }
4519 break;
4520 case 334:
4521 {
4522                       check_vardef_type(vardefs, yyvsp[0].map, SPOVAR_OBJ);
4523                       vardef_used(vardefs, yyvsp[0].map);
4524                       add_opvars(splev, "v", VA_PASS1(yyvsp[0].map));
4525                       Free(yyvsp[0].map);
4526                   }
4527 break;
4528 case 335:
4529 {
4530                       check_vardef_type(vardefs, yyvsp[-3].map,
4531                                         SPOVAR_OBJ | SPOVAR_ARRAY);
4532                       vardef_used(vardefs, yyvsp[-3].map);
4533                       add_opvars(splev, "v", VA_PASS1(yyvsp[-3].map));
4534                       Free(yyvsp[-3].map);
4535                   }
4536 break;
4537 case 336:
4538 {
4539                       long m = get_object_id(yyvsp[0].map, (char)0);
4540                       if (m == ERR) {
4541                           lc_error("Unknown object \"%s\"!", yyvsp[0].map);
4542                           yyval.i = -1;
4543                       } else
4544                           /* obj class != 0 to force generation of a specific item */
4545                           yyval.i = SP_OBJ_PACK(m, 1);
4546                       Free(yyvsp[0].map);
4547                   }
4548 break;
4549 case 337:
4550 {
4551                         if (check_object_char((char) yyvsp[0].i))
4552                             yyval.i = SP_OBJ_PACK(-1, yyvsp[0].i);
4553                         else {
4554                             lc_error("Unknown object class '%c'!", yyvsp[0].i);
4555                             yyval.i = -1;
4556                         }
4557                   }
4558 break;
4559 case 338:
4560 {
4561                       long m = get_object_id(yyvsp[-1].map, (char) yyvsp[-3].i);
4562                       if (m == ERR) {
4563                           lc_error("Unknown object ('%c', \"%s\")!", yyvsp[-3].i, yyvsp[-1].map);
4564                           yyval.i = -1;
4565                       } else
4566                           yyval.i = SP_OBJ_PACK(m, yyvsp[-3].i);
4567                       Free(yyvsp[-1].map);
4568                   }
4569 break;
4570 case 339:
4571 {
4572                       yyval.i = -1;
4573                   }
4574 break;
4575 case 340:
4576 { }
4577 break;
4578 case 341:
4579 {
4580                       add_opvars(splev, "o", VA_PASS1(SPO_MATH_ADD));
4581                   }
4582 break;
4583 case 342:
4584 {
4585                       add_opvars(splev, "i", VA_PASS1(yyvsp[0].i));
4586                   }
4587 break;
4588 case 343:
4589 {
4590                       is_inconstant_number = 1;
4591                   }
4592 break;
4593 case 344:
4594 {
4595                       add_opvars(splev, "i", VA_PASS1(yyvsp[-1].i));
4596                   }
4597 break;
4598 case 345:
4599 {
4600                       check_vardef_type(vardefs, yyvsp[0].map, SPOVAR_INT);
4601                       vardef_used(vardefs, yyvsp[0].map);
4602                       add_opvars(splev, "v", VA_PASS1(yyvsp[0].map));
4603                       Free(yyvsp[0].map);
4604                       is_inconstant_number = 1;
4605                   }
4606 break;
4607 case 346:
4608 {
4609                       check_vardef_type(vardefs, yyvsp[-3].map,
4610                                         SPOVAR_INT | SPOVAR_ARRAY);
4611                       vardef_used(vardefs, yyvsp[-3].map);
4612                       add_opvars(splev, "v", VA_PASS1(yyvsp[-3].map));
4613                       Free(yyvsp[-3].map);
4614                       is_inconstant_number = 1;
4615                   }
4616 break;
4617 case 347:
4618 {
4619                       add_opvars(splev, "o", VA_PASS1(SPO_MATH_ADD));
4620                   }
4621 break;
4622 case 348:
4623 {
4624                       add_opvars(splev, "o", VA_PASS1(SPO_MATH_SUB));
4625                   }
4626 break;
4627 case 349:
4628 {
4629                       add_opvars(splev, "o", VA_PASS1(SPO_MATH_MUL));
4630                   }
4631 break;
4632 case 350:
4633 {
4634                       add_opvars(splev, "o", VA_PASS1(SPO_MATH_DIV));
4635                   }
4636 break;
4637 case 351:
4638 {
4639                       add_opvars(splev, "o", VA_PASS1(SPO_MATH_MOD));
4640                   }
4641 break;
4642 case 352:
4643 { }
4644 break;
4645 case 353:
4646 {
4647                       if (!strcmp("int", yyvsp[0].map) || !strcmp("integer", yyvsp[0].map)) {
4648                           yyval.i = (int)'i';
4649                       } else
4650                           lc_error("Unknown function parameter type '%s'", yyvsp[0].map);
4651                   }
4652 break;
4653 case 354:
4654 {
4655                       if (!strcmp("str", yyvsp[0].map) || !strcmp("string", yyvsp[0].map)) {
4656                           yyval.i = (int)'s';
4657                       } else
4658                           lc_error("Unknown function parameter type '%s'", yyvsp[0].map);
4659                   }
4660 break;
4661 case 355:
4662 {
4663                       struct lc_funcdefs_parm *tmp = New(struct lc_funcdefs_parm);
4664
4665                       if (!curr_function) {
4666                           lc_error("Function parameters outside function definition.");
4667                       } else if (!tmp) {
4668                           lc_error("Could not alloc function params.");
4669                       } else {
4670                           long vt = SPOVAR_NULL;
4671
4672                           tmp->name = strdup(yyvsp[-2].map);
4673                           tmp->parmtype = (char) yyvsp[0].i;
4674                           tmp->next = curr_function->params;
4675                           curr_function->params = tmp;
4676                           curr_function->n_params++;
4677                           switch (tmp->parmtype) {
4678                           case 'i':
4679                               vt = SPOVAR_INT;
4680                               break;
4681                           case 's':
4682                               vt = SPOVAR_STRING;
4683                               break;
4684                           default:
4685                               lc_error("Unknown func param conversion.");
4686                               break;
4687                           }
4688                           vardefs = add_vardef_type( vardefs, yyvsp[-2].map, vt);
4689                       }
4690                       Free(yyvsp[-2].map);
4691                   }
4692 break;
4693 case 360:
4694 {
4695                               yyval.i = (int)'i';
4696                           }
4697 break;
4698 case 361:
4699 {
4700                               yyval.i = (int)'s';
4701                           }
4702 break;
4703 case 362:
4704 {
4705                               char tmpbuf[2];
4706                               tmpbuf[0] = (char) yyvsp[0].i;
4707                               tmpbuf[1] = '\0';
4708                               yyval.map = strdup(tmpbuf);
4709                           }
4710 break;
4711 case 363:
4712 {
4713                               long len = strlen( yyvsp[-2].map );
4714                               char *tmp = (char *) alloc(len + 2);
4715                               sprintf(tmp, "%c%s", (char) yyvsp[0].i, yyvsp[-2].map );
4716                               Free( yyvsp[-2].map );
4717                               yyval.map = tmp;
4718                           }
4719 break;
4720 case 364:
4721 {
4722                               yyval.map = strdup("");
4723                           }
4724 break;
4725 case 365:
4726 {
4727                               char *tmp = strdup( yyvsp[0].map );
4728                               Free( yyvsp[0].map );
4729                               yyval.map = tmp;
4730                           }
4731 break;
4732 case 366:
4733 {
4734                       add_opvars(splev, "o", VA_PASS1(SPO_SEL_POINT));
4735                   }
4736 break;
4737 case 367:
4738 {
4739                       add_opvars(splev, "o", VA_PASS1(SPO_SEL_RECT));
4740                   }
4741 break;
4742 case 368:
4743 {
4744                       add_opvars(splev, "o", VA_PASS1(SPO_SEL_FILLRECT));
4745                   }
4746 break;
4747 case 369:
4748 {
4749                       add_opvars(splev, "o", VA_PASS1(SPO_SEL_LINE));
4750                   }
4751 break;
4752 case 370:
4753 {
4754                       /* randline (x1,y1),(x2,y2), roughness */
4755                       add_opvars(splev, "o", VA_PASS1(SPO_SEL_RNDLINE));
4756                   }
4757 break;
4758 case 371:
4759 {
4760                       add_opvars(splev, "io", VA_PASS2(W_ANY, SPO_SEL_GROW));
4761                   }
4762 break;
4763 case 372:
4764 {
4765                       add_opvars(splev, "io", VA_PASS2(yyvsp[-3].i, SPO_SEL_GROW));
4766                   }
4767 break;
4768 case 373:
4769 {
4770                       add_opvars(splev, "iio",
4771                              VA_PASS3(yyvsp[-3].i, SPOFILTER_PERCENT, SPO_SEL_FILTER));
4772                   }
4773 break;
4774 case 374:
4775 {
4776                       add_opvars(splev, "io",
4777                                VA_PASS2(SPOFILTER_SELECTION, SPO_SEL_FILTER));
4778                   }
4779 break;
4780 case 375:
4781 {
4782                       add_opvars(splev, "io",
4783                                  VA_PASS2(SPOFILTER_MAPCHAR, SPO_SEL_FILTER));
4784                   }
4785 break;
4786 case 376:
4787 {
4788                       add_opvars(splev, "o", VA_PASS1(SPO_SEL_FLOOD));
4789                   }
4790 break;
4791 case 377:
4792 {
4793                       add_opvars(splev, "oio",
4794                                  VA_PASS3(SPO_COPY, 1, SPO_SEL_ELLIPSE));
4795                   }
4796 break;
4797 case 378:
4798 {
4799                       add_opvars(splev, "oio",
4800                                  VA_PASS3(SPO_COPY, yyvsp[-1].i, SPO_SEL_ELLIPSE));
4801                   }
4802 break;
4803 case 379:
4804 {
4805                       add_opvars(splev, "io", VA_PASS2(1, SPO_SEL_ELLIPSE));
4806                   }
4807 break;
4808 case 380:
4809 {
4810                       add_opvars(splev, "io", VA_PASS2(yyvsp[-1].i, SPO_SEL_ELLIPSE));
4811                   }
4812 break;
4813 case 381:
4814 {
4815                       add_opvars(splev, "iio",
4816                                  VA_PASS3(yyvsp[-5].i, yyvsp[-11].i, SPO_SEL_GRADIENT));
4817                   }
4818 break;
4819 case 382:
4820 {
4821                       add_opvars(splev, "o", VA_PASS1(SPO_SEL_COMPLEMENT));
4822                   }
4823 break;
4824 case 383:
4825 {
4826                       check_vardef_type(vardefs, yyvsp[0].map, SPOVAR_SEL);
4827                       vardef_used(vardefs, yyvsp[0].map);
4828                       add_opvars(splev, "v", VA_PASS1(yyvsp[0].map));
4829                       Free(yyvsp[0].map);
4830                   }
4831 break;
4832 case 384:
4833 {
4834                       /* nothing */
4835                   }
4836 break;
4837 case 385:
4838 {
4839                       /* nothing */
4840                   }
4841 break;
4842 case 386:
4843 {
4844                       add_opvars(splev, "o", VA_PASS1(SPO_SEL_ADD));
4845                   }
4846 break;
4847 case 387:
4848 {
4849                       add_opvars(splev, "iio",
4850                                  VA_PASS3(yyvsp[0].dice.num, yyvsp[0].dice.die, SPO_DICE));
4851                   }
4852 break;
4853 case 391:
4854 {
4855                       add_opvars(splev, "i", VA_PASS1(yyvsp[0].i));
4856                   }
4857 break;
4858 case 392:
4859 {
4860                       add_opvars(splev, "i", VA_PASS1(yyvsp[0].i));
4861                   }
4862 break;
4863 case 393:
4864 {
4865                       add_opvars(splev, "i", VA_PASS1(yyvsp[0].i));
4866                   }
4867 break;
4868 case 394:
4869 {
4870                       /* nothing */
4871                   }
4872 break;
4873 case 403:
4874 {
4875                         yyval.lregn = yyvsp[0].lregn;
4876                   }
4877 break;
4878 case 404:
4879 {
4880                         if (yyvsp[-7].i <= 0 || yyvsp[-7].i >= COLNO)
4881                             lc_error(
4882                           "Region (%ld,%ld,%ld,%ld) out of level range (x1)!",
4883                                      yyvsp[-7].i, yyvsp[-5].i, yyvsp[-3].i, yyvsp[-1].i);
4884                         else if (yyvsp[-5].i < 0 || yyvsp[-5].i >= ROWNO)
4885                             lc_error(
4886                           "Region (%ld,%ld,%ld,%ld) out of level range (y1)!",
4887                                      yyvsp[-7].i, yyvsp[-5].i, yyvsp[-3].i, yyvsp[-1].i);
4888                         else if (yyvsp[-3].i <= 0 || yyvsp[-3].i >= COLNO)
4889                             lc_error(
4890                           "Region (%ld,%ld,%ld,%ld) out of level range (x2)!",
4891                                      yyvsp[-7].i, yyvsp[-5].i, yyvsp[-3].i, yyvsp[-1].i);
4892                         else if (yyvsp[-1].i < 0 || yyvsp[-1].i >= ROWNO)
4893                             lc_error(
4894                           "Region (%ld,%ld,%ld,%ld) out of level range (y2)!",
4895                                      yyvsp[-7].i, yyvsp[-5].i, yyvsp[-3].i, yyvsp[-1].i);
4896                         yyval.lregn.x1 = yyvsp[-7].i;
4897                         yyval.lregn.y1 = yyvsp[-5].i;
4898                         yyval.lregn.x2 = yyvsp[-3].i;
4899                         yyval.lregn.y2 = yyvsp[-1].i;
4900                         yyval.lregn.area = 1;
4901                   }
4902 break;
4903 case 405:
4904 {
4905 /* This series of if statements is a hack for MSC 5.1.  It seems that its
4906    tiny little brain cannot compile if these are all one big if statement. */
4907                         if (yyvsp[-7].i < 0 || yyvsp[-7].i > (int) max_x_map)
4908                             lc_error(
4909                             "Region (%ld,%ld,%ld,%ld) out of map range (x1)!",
4910                                      yyvsp[-7].i, yyvsp[-5].i, yyvsp[-3].i, yyvsp[-1].i);
4911                         else if (yyvsp[-5].i < 0 || yyvsp[-5].i > (int) max_y_map)
4912                             lc_error(
4913                             "Region (%ld,%ld,%ld,%ld) out of map range (y1)!",
4914                                      yyvsp[-7].i, yyvsp[-5].i, yyvsp[-3].i, yyvsp[-1].i);
4915                         else if (yyvsp[-3].i < 0 || yyvsp[-3].i > (int) max_x_map)
4916                             lc_error(
4917                             "Region (%ld,%ld,%ld,%ld) out of map range (x2)!",
4918                                      yyvsp[-7].i, yyvsp[-5].i, yyvsp[-3].i, yyvsp[-1].i);
4919                         else if (yyvsp[-1].i < 0 || yyvsp[-1].i > (int) max_y_map)
4920                             lc_error(
4921                             "Region (%ld,%ld,%ld,%ld) out of map range (y2)!",
4922                                      yyvsp[-7].i, yyvsp[-5].i, yyvsp[-3].i, yyvsp[-1].i);
4923                         yyval.lregn.area = 0;
4924                         yyval.lregn.x1 = yyvsp[-7].i;
4925                         yyval.lregn.y1 = yyvsp[-5].i;
4926                         yyval.lregn.x2 = yyvsp[-3].i;
4927                         yyval.lregn.y2 = yyvsp[-1].i;
4928                   }
4929 break;
4930     }
4931     yyssp -= yym;
4932     yystate = *yyssp;
4933     yyvsp -= yym;
4934     yym = yylhs[yyn];
4935     if (yystate == 0 && yym == 0)
4936     {
4937 #if YYDEBUG
4938         if (yydebug)
4939             printf("%sdebug: after reduction, shifting from state 0 to\
4940  state %d\n", YYPREFIX, YYFINAL);
4941 #endif
4942         yystate = YYFINAL;
4943         *++yyssp = YYFINAL;
4944         *++yyvsp = yyval;
4945         if (yychar < 0)
4946         {
4947             if ((yychar = yylex()) < 0) yychar = 0;
4948 #if YYDEBUG
4949             if (yydebug)
4950             {
4951                 yys = 0;
4952                 if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
4953                 if (!yys) yys = "illegal-symbol";
4954                 printf("%sdebug: state %d, reading %d (%s)\n",
4955                         YYPREFIX, YYFINAL, yychar, yys);
4956             }
4957 #endif
4958         }
4959         if (yychar == 0) goto yyaccept;
4960         goto yyloop;
4961     }
4962     if ((yyn = yygindex[yym]) != 0 && (yyn += yystate) >= 0 &&
4963             yyn <= YYTABLESIZE && yycheck[yyn] == yystate)
4964         yystate = yytable[yyn];
4965     else
4966         yystate = yydgoto[yym];
4967 #if YYDEBUG
4968     if (yydebug)
4969         printf("%sdebug: after reduction, shifting from state %d \
4970 to state %d\n", YYPREFIX, *yyssp, yystate);
4971 #endif
4972     if (yyssp >= yyss + yystacksize - 1)
4973     {
4974         goto yyoverflow;
4975     }
4976     *++yyssp = yystate;
4977     *++yyvsp = yyval;
4978     goto yyloop;
4979 yyoverflow:
4980     yyerror("yacc stack overflow");
4981 yyabort:
4982     return (1);
4983 yyaccept:
4984     return (0);
4985 }