2 * CDE - Common Desktop Environment
4 * Copyright (c) 1993-2012, The Open Group. All rights reserved.
6 * These libraries and programs are free software; you can
7 * redistribute them and/or modify them under the terms of the GNU
8 * Lesser General Public License as published by the Free Software
9 * Foundation; either version 2 of the License, or (at your option)
12 * These libraries and programs are distributed in the hope that
13 * they will be useful, but WITHOUT ANY WARRANTY; without even the
14 * implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
15 * PURPOSE. See the GNU Lesser General Public License for more
18 * You should have received a copy of the GNU Lesser General Public
19 * License along with these libraries and programs; if not, write
20 * to the Free Software Foundation, Inc., 51 Franklin Street, Fifth
21 * Floor, Boston, MA 02110-1301 USA
23 /* $XConsortium: ContentType.C /main/5 1996/08/21 15:57:45 drk $
25 * (c) Copyright 1996 Digital Equipment Corporation.
26 * (c) Copyright 1996 Hewlett-Packard Company.
27 * (c) Copyright 1996 International Business Machines Corp.
28 * (c) Copyright 1996 Sun Microsystems, Inc.
29 * (c) Copyright 1996 Novell, Inc.
30 * (c) Copyright 1996 FUJITSU LIMITED.
31 * (c) Copyright 1996 Hitachi.
34 /* A lexical scanner generated by flex */
36 /* scanner skeleton version:
37 * $Header: /proj/.cde-1/programs/dtinfo/dtinfogen/infolib/etc/ContentType.C /main/5 1996/08/21 15:57:45 drk $
45 /* cfront 1.2 defines "c_plusplus" instead of "__cplusplus" */
57 #if !defined(__osf__) && !defined(linux) && !defined(CSRG_BASED) && \
62 /* use prototypes in function declarations */
63 #define ol_data_USE_PROTOS
65 /* the "const" storage-class-modifier is valid */
66 #define ol_data_USE_CONST
68 #else /* ! __cplusplus */
74 void *malloc( size_t );
80 #define ol_data_USE_PROTOS
81 #define ol_data_USE_CONST
84 #endif /* ! __cplusplus */
88 #define ol_data_USE_CONST
92 #ifndef ol_data_USE_CONST
97 #ifdef ol_data_USE_PROTOS
98 #define ol_data_PROTO(proto) proto
100 #define ol_data_PROTO(proto) ()
101 /* we can't get here if it's an ANSI C compiler, or a C++ compiler,
102 * so it's got to be a K&R compiler, and therefore there's no standard
103 * place from which to include these definitions
111 /* amount of stuff to slurp up with each read */
112 #ifndef ol_data_READ_BUF_SIZE
113 #define ol_data_READ_BUF_SIZE 8192
116 /* returned upon end-of-file */
117 #define ol_data_END_TOK 0
119 /* copy whatever the last rule matched to the standard output */
121 /* cast to (char *) is because for 8-bit chars, ol_datatext is (unsigned char *) */
122 /* this used to be an fputs(), but since the string might contain NUL's,
123 * we now use fwrite()
125 #define ECHO (void) fwrite( (char *) ol_datatext, ol_dataleng, 1, ol_dataout )
127 /* gets input and stuffs it into "buf". number of characters read, or ol_data_NULL,
128 * is returned in "result".
130 #define ol_data_INPUT(buf,result,max_size) \
131 if ( (result = read( fileno(ol_datain), (char *) buf, max_size )) < 0 ) \
132 ol_data_FATAL_ERROR( "read() in flex scanner failed" );
133 #define ol_data_NULL 0
135 /* no semi-colon after return; correct usage is to write "ol_dataterminate();" -
136 * we don't want an extra ';' after the "return" because that will cause
137 * some compilers to complain about unreachable statements.
139 #define ol_dataterminate() return ( ol_data_NULL )
141 /* report a fatal error */
143 /* The funky do-while is used to turn this macro definition into
144 * a single C statement (which needs a semi-colon terminator).
145 * This avoids problems with code like:
147 * if ( something_happens )
148 * ol_data_FATAL_ERROR( "oops, the something happened" );
152 * Prior to using the do-while the compiler would get upset at the
153 * "else" because it interpreted the "if" statement as being all
154 * done when it reached the ';' after the ol_data_FATAL_ERROR() call.
157 #define ol_data_FATAL_ERROR(msg) \
160 (void) fputs( msg, stderr ); \
161 (void) putc( '\n', stderr ); \
166 /* default ol_datawrap function - always treat EOF as an EOF */
167 #define ol_datawrap() 1
169 /* enter a start condition. This macro really ought to take a parameter,
170 * but we do it the disgusting crufty way forced on us by the ()-less
171 * definition of BEGIN
173 #define BEGIN ol_data_start = 1 + 2 *
175 /* action number for EOF rule of a given start state */
176 #define ol_data_STATE_EOF(state) (ol_data_END_OF_BUFFER + state + 1)
178 /* special action meaning "start processing a new file" */
179 #define ol_data_NEW_FILE \
182 ol_data_init_buffer( ol_data_current_buffer, ol_datain ); \
183 ol_data_load_buffer_state(); \
187 /* default declaration of generated scanner - a define so the user can
188 * easily add parameters
190 #define ol_data_DECL int ol_datalex ol_data_PROTO(( void ))
192 /* code executed at the end of each rule */
193 #define ol_data_BREAK break;
195 #define ol_data_END_OF_BUFFER_CHAR 0
197 #ifndef ol_data_BUF_SIZE
198 #define ol_data_BUF_SIZE (ol_data_READ_BUF_SIZE * 2) /* size of default input buffer */
201 typedef struct ol_data_buffer_state *ol_data_BUFFER_STATE;
203 #define ol_data_CHAR unsigned char
214 #include "Exceptions.hh"
217 #include "SGMLName.h"
218 #include "ExprList.h"
219 #include "Expression.h"
220 #include "OL_DataExpr.tab.h"
221 #include "ContentType.h"
222 #include "api/utility.h"
224 /* CurrentContentPtr is used as the communication media between
225 * ol_dataparse and ContentType::Parse()
228 ContentType *CurrentContentPtr;
231 * Forward declaration for my_input
233 static int my_input ( char *, int );
234 extern int ol_dataparse();
238 #define ol_data_INPUT(b, r, ms ) ( r=my_input( ( char *)b,ms) )
240 static char *myinput;
241 static char *myinputptr;
242 static char *myinputlim;
246 #define DBG(level) if ( dbgLevel >= level)
248 #define DBG(level) if (0)
251 static int dbgLevel = -1;
253 static short int ol_data_nxt[][256] =
255 { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
256 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
257 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
258 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
259 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
260 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
261 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
262 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
263 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
264 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
266 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
267 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
268 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
269 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
270 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
271 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
272 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
273 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
274 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
275 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
277 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
278 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
279 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
280 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
281 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
284 { 3, 4, 4, 4, 4, 4, 4, 4, 4, 5,
285 6, 4, 4, 4, 4, 4, 4, 4, 4, 4,
286 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
287 4, 4, 5, 4, 7, 8, 4, 4, 4, 9,
288 10, 10, 4, 4, 10, 4, 4, 4, 4, 4,
289 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
290 4, 4, 4, 4, 11, 12, 4, 13, 4, 4,
291 14, 4, 4, 4, 4, 4, 4, 4, 4, 4,
292 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
293 4, 4, 4, 4, 4, 4, 4, 12, 4, 13,
295 4, 4, 14, 4, 4, 4, 4, 4, 4, 4,
296 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
297 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
298 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
299 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
300 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
301 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
302 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
303 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
304 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
306 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
307 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
308 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
309 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
310 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
313 { 3, 4, 4, 4, 4, 4, 4, 4, 4, 5,
314 6, 4, 4, 4, 4, 4, 4, 4, 4, 4,
315 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
316 4, 4, 5, 4, 7, 8, 4, 4, 4, 9,
317 10, 10, 4, 4, 10, 4, 4, 4, 4, 4,
318 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
319 4, 4, 4, 4, 11, 12, 4, 13, 4, 4,
320 14, 4, 4, 4, 4, 4, 4, 4, 4, 4,
321 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
322 4, 4, 4, 4, 4, 4, 4, 12, 4, 13,
324 4, 4, 14, 4, 4, 4, 4, 4, 4, 4,
325 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
326 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
327 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
328 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
329 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
330 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
331 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
332 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
333 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
335 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
336 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
337 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
338 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
339 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
342 { -3, -3, -3, -3, -3, -3, -3, -3, -3, -3,
343 -3, -3, -3, -3, -3, -3, -3, -3, -3, -3,
344 -3, -3, -3, -3, -3, -3, -3, -3, -3, -3,
345 -3, -3, -3, -3, -3, -3, -3, -3, -3, -3,
346 -3, -3, -3, -3, -3, -3, -3, -3, -3, -3,
347 -3, -3, -3, -3, -3, -3, -3, -3, -3, -3,
348 -3, -3, -3, -3, -3, -3, -3, -3, -3, -3,
349 -3, -3, -3, -3, -3, -3, -3, -3, -3, -3,
350 -3, -3, -3, -3, -3, -3, -3, -3, -3, -3,
351 -3, -3, -3, -3, -3, -3, -3, -3, -3, -3,
353 -3, -3, -3, -3, -3, -3, -3, -3, -3, -3,
354 -3, -3, -3, -3, -3, -3, -3, -3, -3, -3,
355 -3, -3, -3, -3, -3, -3, -3, -3, -3, -3,
356 -3, -3, -3, -3, -3, -3, -3, -3, -3, -3,
357 -3, -3, -3, -3, -3, -3, -3, -3, -3, -3,
358 -3, -3, -3, -3, -3, -3, -3, -3, -3, -3,
359 -3, -3, -3, -3, -3, -3, -3, -3, -3, -3,
360 -3, -3, -3, -3, -3, -3, -3, -3, -3, -3,
361 -3, -3, -3, -3, -3, -3, -3, -3, -3, -3,
362 -3, -3, -3, -3, -3, -3, -3, -3, -3, -3,
364 -3, -3, -3, -3, -3, -3, -3, -3, -3, -3,
365 -3, -3, -3, -3, -3, -3, -3, -3, -3, -3,
366 -3, -3, -3, -3, -3, -3, -3, -3, -3, -3,
367 -3, -3, -3, -3, -3, -3, -3, -3, -3, -3,
368 -3, -3, -3, -3, -3, -3, -3, -3, -3, -3,
369 -3, -3, -3, -3, -3, -3 },
371 { 3, 15, 15, 15, 15, 15, 15, 15, 15, -4,
372 -4, 15, 15, 15, 15, 15, 15, 15, 15, 15,
373 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
374 15, 15, -4, 15, 15, 15, 15, 15, 15, 15,
375 -4, -4, 15, 15, -4, 15, 15, 15, 15, 15,
376 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
377 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
378 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
379 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
380 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
382 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
383 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
384 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
385 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
386 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
387 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
388 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
389 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
390 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
391 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
393 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
394 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
395 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
396 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
397 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
398 15, 15, 15, 15, 15, 15 },
400 { 3, -5, -5, -5, -5, -5, -5, -5, -5, 16,
401 16, -5, -5, -5, -5, -5, -5, -5, -5, -5,
402 -5, -5, -5, -5, -5, -5, -5, -5, -5, -5,
403 -5, -5, 16, -5, -5, -5, -5, -5, -5, -5,
404 -5, -5, -5, -5, -5, -5, -5, -5, -5, -5,
405 -5, -5, -5, -5, -5, -5, -5, -5, -5, -5,
406 -5, -5, -5, -5, -5, -5, -5, -5, -5, -5,
407 -5, -5, -5, -5, -5, -5, -5, -5, -5, -5,
408 -5, -5, -5, -5, -5, -5, -5, -5, -5, -5,
409 -5, -5, -5, -5, -5, -5, -5, -5, -5, -5,
411 -5, -5, -5, -5, -5, -5, -5, -5, -5, -5,
412 -5, -5, -5, -5, -5, -5, -5, -5, -5, -5,
413 -5, -5, -5, -5, -5, -5, -5, -5, -5, -5,
414 -5, -5, -5, -5, -5, -5, -5, -5, -5, -5,
415 -5, -5, -5, -5, -5, -5, -5, -5, -5, -5,
416 -5, -5, -5, -5, -5, -5, -5, -5, -5, -5,
417 -5, -5, -5, -5, -5, -5, -5, -5, -5, -5,
418 -5, -5, -5, -5, -5, -5, -5, -5, -5, -5,
419 -5, -5, -5, -5, -5, -5, -5, -5, -5, -5,
420 -5, -5, -5, -5, -5, -5, -5, -5, -5, -5,
422 -5, -5, -5, -5, -5, -5, -5, -5, -5, -5,
423 -5, -5, -5, -5, -5, -5, -5, -5, -5, -5,
424 -5, -5, -5, -5, -5, -5, -5, -5, -5, -5,
425 -5, -5, -5, -5, -5, -5, -5, -5, -5, -5,
426 -5, -5, -5, -5, -5, -5, -5, -5, -5, -5,
427 -5, -5, -5, -5, -5, -5 },
429 { 3, -6, -6, -6, -6, -6, -6, -6, -6, 16,
430 16, -6, -6, -6, -6, -6, -6, -6, -6, -6,
431 -6, -6, -6, -6, -6, -6, -6, -6, -6, -6,
432 -6, -6, 16, -6, -6, -6, -6, -6, -6, -6,
433 -6, -6, -6, -6, -6, -6, -6, -6, -6, -6,
434 -6, -6, -6, -6, -6, -6, -6, -6, -6, -6,
435 -6, -6, -6, -6, -6, -6, -6, -6, -6, -6,
436 -6, -6, -6, -6, -6, -6, -6, -6, -6, -6,
437 -6, -6, -6, -6, -6, -6, -6, -6, -6, -6,
438 -6, -6, -6, -6, -6, -6, -6, -6, -6, -6,
440 -6, -6, -6, -6, -6, -6, -6, -6, -6, -6,
441 -6, -6, -6, -6, -6, -6, -6, -6, -6, -6,
442 -6, -6, -6, -6, -6, -6, -6, -6, -6, -6,
443 -6, -6, -6, -6, -6, -6, -6, -6, -6, -6,
444 -6, -6, -6, -6, -6, -6, -6, -6, -6, -6,
445 -6, -6, -6, -6, -6, -6, -6, -6, -6, -6,
446 -6, -6, -6, -6, -6, -6, -6, -6, -6, -6,
447 -6, -6, -6, -6, -6, -6, -6, -6, -6, -6,
448 -6, -6, -6, -6, -6, -6, -6, -6, -6, -6,
449 -6, -6, -6, -6, -6, -6, -6, -6, -6, -6,
451 -6, -6, -6, -6, -6, -6, -6, -6, -6, -6,
452 -6, -6, -6, -6, -6, -6, -6, -6, -6, -6,
453 -6, -6, -6, -6, -6, -6, -6, -6, -6, -6,
454 -6, -6, -6, -6, -6, -6, -6, -6, -6, -6,
455 -6, -6, -6, -6, -6, -6, -6, -6, -6, -6,
456 -6, -6, -6, -6, -6, -6 },
458 { 3, 17, 17, 17, 17, 17, 17, 17, 17, 18,
459 18, 17, 17, 17, 17, 17, 17, 17, 17, 17,
460 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
461 17, 17, 18, 17, 19, 17, 17, 17, 17, 17,
462 18, 18, 17, 17, 18, 17, 17, 17, 17, 17,
463 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
464 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
465 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
466 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
467 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
469 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
470 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
471 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
472 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
473 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
474 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
475 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
476 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
477 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
478 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
480 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
481 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
482 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
483 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
484 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
485 17, 17, 17, 17, 17, 17 },
487 { 3, 15, 15, 15, 15, 15, 15, 15, 15, -8,
488 -8, 15, 15, 15, 15, 15, 15, 15, 15, 15,
489 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
490 15, 15, -8, 15, 15, 15, 15, 15, 15, 15,
491 -8, -8, 15, 15, -8, 15, 15, 15, 15, 15,
492 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
493 15, 15, 15, 15, 15, 15, 15, 20, 15, 15,
494 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
495 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
496 15, 15, 15, 15, 15, 15, 15, 15, 15, 20,
498 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
499 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
500 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
501 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
502 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
503 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
504 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
505 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
506 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
507 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
509 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
510 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
511 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
512 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
513 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
514 15, 15, 15, 15, 15, 15 },
516 { 3, 21, 21, 21, 21, 21, 21, 21, 21, 22,
517 22, 21, 21, 21, 21, 21, 21, 21, 21, 21,
518 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
519 21, 21, 22, 21, 21, 21, 21, 21, 21, 23,
520 22, 22, 21, 21, 22, 21, 21, 21, 21, 21,
521 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
522 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
523 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
524 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
525 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
527 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
528 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
529 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
530 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
531 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
532 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
533 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
534 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
535 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
536 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
538 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
539 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
540 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
541 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
542 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
543 21, 21, 21, 21, 21, 21 },
545 { 3, -10, -10, -10, -10, -10, -10, -10, -10, -10,
546 -10, -10, -10, -10, -10, -10, -10, -10, -10, -10,
547 -10, -10, -10, -10, -10, -10, -10, -10, -10, -10,
548 -10, -10, -10, -10, -10, -10, -10, -10, -10, -10,
549 -10, -10, -10, -10, -10, -10, -10, -10, -10, -10,
550 -10, -10, -10, -10, -10, -10, -10, -10, -10, -10,
551 -10, -10, -10, -10, -10, -10, -10, -10, -10, -10,
552 -10, -10, -10, -10, -10, -10, -10, -10, -10, -10,
553 -10, -10, -10, -10, -10, -10, -10, -10, -10, -10,
554 -10, -10, -10, -10, -10, -10, -10, -10, -10, -10,
556 -10, -10, -10, -10, -10, -10, -10, -10, -10, -10,
557 -10, -10, -10, -10, -10, -10, -10, -10, -10, -10,
558 -10, -10, -10, -10, -10, -10, -10, -10, -10, -10,
559 -10, -10, -10, -10, -10, -10, -10, -10, -10, -10,
560 -10, -10, -10, -10, -10, -10, -10, -10, -10, -10,
561 -10, -10, -10, -10, -10, -10, -10, -10, -10, -10,
562 -10, -10, -10, -10, -10, -10, -10, -10, -10, -10,
563 -10, -10, -10, -10, -10, -10, -10, -10, -10, -10,
564 -10, -10, -10, -10, -10, -10, -10, -10, -10, -10,
565 -10, -10, -10, -10, -10, -10, -10, -10, -10, -10,
567 -10, -10, -10, -10, -10, -10, -10, -10, -10, -10,
568 -10, -10, -10, -10, -10, -10, -10, -10, -10, -10,
569 -10, -10, -10, -10, -10, -10, -10, -10, -10, -10,
570 -10, -10, -10, -10, -10, -10, -10, -10, -10, -10,
571 -10, -10, -10, -10, -10, -10, -10, -10, -10, -10,
572 -10, -10, -10, -10, -10, -10 },
574 { 3, 15, 15, 15, 15, 15, 15, 15, 15, -11,
575 -11, 15, 15, 15, 15, 15, 15, 15, 15, 15,
576 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
577 15, 15, -11, 15, 15, 15, 15, 15, 15, 15,
578 -11, -11, 15, 15, -11, 15, 15, 15, 24, 24,
579 24, 24, 24, 24, 24, 24, 24, 24, 15, 15,
580 15, 15, 15, 15, 15, 24, 24, 24, 24, 24,
581 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
582 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
583 24, 15, 15, 15, 15, 15, 15, 24, 24, 24,
585 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
586 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
587 24, 24, 24, 15, 15, 15, 15, 15, 15, 15,
588 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
589 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
590 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
591 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
592 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
593 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
594 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
596 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
597 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
598 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
599 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
600 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
601 15, 15, 15, 15, 15, 15 },
603 { 3, 15, 15, 15, 15, 15, 15, 15, 15, -12,
604 -12, 15, 15, 15, 15, 15, 15, 15, 15, 15,
605 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
606 15, 15, -12, 15, 15, 15, 15, 15, 15, 15,
607 -12, -12, 15, 15, -12, 15, 15, 15, 15, 15,
608 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
609 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
610 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
611 15, 15, 15, 15, 25, 15, 15, 15, 15, 15,
612 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
614 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
615 15, 15, 15, 15, 15, 15, 25, 15, 15, 15,
616 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
617 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
618 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
619 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
620 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
621 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
622 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
623 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
625 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
626 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
627 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
628 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
629 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
630 15, 15, 15, 15, 15, 15 },
632 { 3, 15, 15, 15, 15, 15, 15, 15, 15, -13,
633 -13, 15, 15, 15, 15, 15, 15, 15, 15, 15,
634 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
635 15, 15, -13, 15, 15, 15, 15, 15, 15, 15,
636 -13, -13, 15, 15, -13, 15, 15, 15, 15, 15,
637 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
638 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
639 15, 15, 15, 15, 15, 15, 15, 15, 15, 26,
640 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
641 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
643 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
644 15, 26, 15, 15, 15, 15, 15, 15, 15, 15,
645 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
646 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
647 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
648 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
649 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
650 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
651 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
652 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
654 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
655 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
656 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
657 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
658 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
659 15, 15, 15, 15, 15, 15 },
661 { 3, 15, 15, 15, 15, 15, 15, 15, 15, -14,
662 -14, 15, 15, 15, 15, 15, 15, 15, 15, 15,
663 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
664 15, 15, -14, 15, 15, 15, 15, 15, 15, 15,
665 -14, -14, 15, 15, -14, 15, 15, 15, 15, 15,
666 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
667 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
668 15, 15, 15, 27, 15, 15, 15, 15, 15, 15,
669 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
670 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
672 15, 15, 15, 15, 15, 27, 15, 15, 15, 15,
673 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
674 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
675 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
676 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
677 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
678 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
679 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
680 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
681 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
683 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
684 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
685 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
686 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
687 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
688 15, 15, 15, 15, 15, 15 },
690 { 3, 15, 15, 15, 15, 15, 15, 15, 15, -15,
691 -15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
692 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
693 15, 15, -15, 15, 15, 15, 15, 15, 15, 15,
694 -15, -15, 15, 15, -15, 15, 15, 15, 15, 15,
695 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
696 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
697 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
698 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
699 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
701 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
702 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
703 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
704 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
705 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
706 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
707 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
708 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
709 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
710 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
712 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
713 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
714 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
715 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
716 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
717 15, 15, 15, 15, 15, 15 },
719 { 3, -16, -16, -16, -16, -16, -16, -16, -16, 16,
720 16, -16, -16, -16, -16, -16, -16, -16, -16, -16,
721 -16, -16, -16, -16, -16, -16, -16, -16, -16, -16,
722 -16, -16, 16, -16, -16, -16, -16, -16, -16, -16,
723 -16, -16, -16, -16, -16, -16, -16, -16, -16, -16,
724 -16, -16, -16, -16, -16, -16, -16, -16, -16, -16,
725 -16, -16, -16, -16, -16, -16, -16, -16, -16, -16,
726 -16, -16, -16, -16, -16, -16, -16, -16, -16, -16,
727 -16, -16, -16, -16, -16, -16, -16, -16, -16, -16,
728 -16, -16, -16, -16, -16, -16, -16, -16, -16, -16,
730 -16, -16, -16, -16, -16, -16, -16, -16, -16, -16,
731 -16, -16, -16, -16, -16, -16, -16, -16, -16, -16,
732 -16, -16, -16, -16, -16, -16, -16, -16, -16, -16,
733 -16, -16, -16, -16, -16, -16, -16, -16, -16, -16,
734 -16, -16, -16, -16, -16, -16, -16, -16, -16, -16,
735 -16, -16, -16, -16, -16, -16, -16, -16, -16, -16,
736 -16, -16, -16, -16, -16, -16, -16, -16, -16, -16,
737 -16, -16, -16, -16, -16, -16, -16, -16, -16, -16,
738 -16, -16, -16, -16, -16, -16, -16, -16, -16, -16,
739 -16, -16, -16, -16, -16, -16, -16, -16, -16, -16,
741 -16, -16, -16, -16, -16, -16, -16, -16, -16, -16,
742 -16, -16, -16, -16, -16, -16, -16, -16, -16, -16,
743 -16, -16, -16, -16, -16, -16, -16, -16, -16, -16,
744 -16, -16, -16, -16, -16, -16, -16, -16, -16, -16,
745 -16, -16, -16, -16, -16, -16, -16, -16, -16, -16,
746 -16, -16, -16, -16, -16, -16 },
748 { 3, 17, 17, 17, 17, 17, 17, 17, 17, 18,
749 18, 17, 17, 17, 17, 17, 17, 17, 17, 17,
750 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
751 17, 17, 18, 17, 19, 17, 17, 17, 17, 17,
752 18, 18, 17, 17, 18, 17, 17, 17, 17, 17,
753 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
754 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
755 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
756 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
757 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
759 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
760 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
761 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
762 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
763 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
764 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
765 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
766 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
767 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
768 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
770 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
771 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
772 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
773 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
774 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
775 17, 17, 17, 17, 17, 17 },
777 { 3, 18, 18, 18, 18, 18, 18, 18, 18, 18,
778 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
779 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
780 18, 18, 18, 18, 28, 18, 18, 18, 18, 18,
781 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
782 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
783 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
784 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
785 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
786 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
788 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
789 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
790 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
791 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
792 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
793 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
794 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
795 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
796 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
797 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
799 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
800 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
801 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
802 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
803 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
804 18, 18, 18, 18, 18, 18 },
806 { 3, 15, 15, 15, 15, 15, 15, 15, 15, -19,
807 -19, 15, 15, 15, 15, 15, 15, 15, 15, 15,
808 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
809 15, 15, -19, 15, 15, 15, 15, 15, 15, 15,
810 -19, -19, 15, 15, -19, 15, 15, 15, 15, 15,
811 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
812 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
813 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
814 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
815 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
817 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
818 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
819 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
820 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
821 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
822 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
823 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
824 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
825 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
826 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
828 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
829 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
830 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
831 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
832 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
833 15, 15, 15, 15, 15, 15 },
835 { 3, 15, 15, 15, 15, 15, 15, 15, 15, -20,
836 -20, 15, 15, 15, 15, 15, 15, 15, 15, 15,
837 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
838 15, 15, -20, 15, 15, 15, 15, 15, 15, 15,
839 -20, -20, 15, 15, -20, 15, 15, 15, 15, 15,
840 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
841 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
842 15, 15, 15, 15, 15, 15, 15, 15, 15, 29,
843 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
844 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
846 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
847 15, 29, 15, 15, 15, 15, 15, 15, 15, 15,
848 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
849 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
850 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
851 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
852 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
853 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
854 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
855 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
857 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
858 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
859 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
860 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
861 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
862 15, 15, 15, 15, 15, 15 },
864 { 3, 21, 21, 21, 21, 21, 21, 21, 21, 22,
865 22, 21, 21, 21, 21, 21, 21, 21, 21, 21,
866 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
867 21, 21, 22, 21, 21, 21, 21, 21, 21, 23,
868 22, 22, 21, 21, 22, 21, 21, 21, 21, 21,
869 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
870 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
871 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
872 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
873 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
875 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
876 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
877 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
878 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
879 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
880 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
881 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
882 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
883 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
884 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
886 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
887 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
888 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
889 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
890 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
891 21, 21, 21, 21, 21, 21 },
893 { 3, 22, 22, 22, 22, 22, 22, 22, 22, 22,
894 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
895 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
896 22, 22, 22, 22, 22, 22, 22, 22, 22, 30,
897 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
898 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
899 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
900 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
901 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
902 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
904 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
905 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
906 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
907 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
908 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
909 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
910 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
911 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
912 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
913 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
915 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
916 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
917 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
918 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
919 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
920 22, 22, 22, 22, 22, 22 },
922 { 3, 15, 15, 15, 15, 15, 15, 15, 15, -23,
923 -23, 15, 15, 15, 15, 15, 15, 15, 15, 15,
924 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
925 15, 15, -23, 15, 15, 15, 15, 15, 15, 15,
926 -23, -23, 15, 15, -23, 15, 15, 15, 15, 15,
927 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
928 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
929 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
930 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
931 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
933 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
934 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
935 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
936 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
937 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
938 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
939 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
940 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
941 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
942 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
944 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
945 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
946 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
947 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
948 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
949 15, 15, 15, 15, 15, 15 },
951 { 3, 15, 15, 15, 15, 15, 15, 15, 15, -24,
952 -24, 15, 15, 15, 15, 15, 15, 15, 15, 15,
953 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
954 15, 15, -24, 15, 15, 15, 15, 15, 15, 15,
955 -24, -24, 15, 15, -24, 15, 15, 15, 24, 24,
956 24, 24, 24, 24, 24, 24, 24, 24, 15, 15,
957 15, 15, 15, 15, 15, 24, 24, 24, 24, 24,
958 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
959 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
960 24, 15, 15, 15, 15, 15, 15, 24, 24, 24,
962 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
963 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
964 24, 24, 24, 15, 15, 15, 15, 15, 15, 15,
965 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
966 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
967 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
968 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
969 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
970 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
971 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
973 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
974 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
975 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
976 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
977 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
978 15, 15, 15, 15, 15, 15 },
980 { 3, 15, 15, 15, 15, 15, 15, 15, 15, -25,
981 -25, 15, 15, 15, 15, 15, 15, 15, 15, 15,
982 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
983 15, 15, -25, 15, 15, 15, 15, 15, 15, 15,
984 -25, -25, 15, 15, -25, 15, 15, 15, 15, 15,
985 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
986 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
987 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
988 15, 15, 15, 15, 31, 15, 15, 15, 15, 15,
989 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
991 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
992 15, 15, 15, 15, 15, 15, 31, 15, 15, 15,
993 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
994 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
995 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
996 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
997 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
998 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
999 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1000 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1002 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1003 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1004 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1005 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1006 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1007 15, 15, 15, 15, 15, 15 },
1009 { 3, 15, 15, 15, 15, 15, 15, 15, 15, -26,
1010 -26, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1011 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1012 15, 15, -26, 15, 15, 15, 15, 15, 15, 15,
1013 -26, -26, 15, 15, -26, 15, 15, 15, 15, 15,
1014 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1015 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1016 15, 15, 15, 15, 15, 15, 15, 15, 32, 15,
1017 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1018 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1020 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1021 32, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1022 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1023 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1024 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1025 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1026 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1027 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1028 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1029 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1031 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1032 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1033 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1034 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1035 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1036 15, 15, 15, 15, 15, 15 },
1038 { 3, 15, 15, 15, 15, 15, 15, 15, 15, -27,
1039 -27, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1040 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1041 15, 15, -27, 15, 15, 15, 15, 15, 15, 15,
1042 -27, -27, 15, 15, -27, 15, 15, 15, 15, 15,
1043 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1044 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1045 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1046 15, 15, 33, 15, 15, 15, 15, 15, 15, 15,
1047 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1049 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1050 15, 15, 15, 15, 33, 15, 15, 15, 15, 15,
1051 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1052 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1053 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1054 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1055 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1056 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1057 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1058 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1060 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1061 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1062 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1063 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1064 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1065 15, 15, 15, 15, 15, 15 },
1067 { 3, -28, -28, -28, -28, -28, -28, -28, -28, -28,
1068 -28, -28, -28, -28, -28, -28, -28, -28, -28, -28,
1069 -28, -28, -28, -28, -28, -28, -28, -28, -28, -28,
1070 -28, -28, -28, -28, -28, -28, -28, -28, -28, -28,
1071 -28, -28, -28, -28, -28, -28, -28, -28, -28, -28,
1072 -28, -28, -28, -28, -28, -28, -28, -28, -28, -28,
1073 -28, -28, -28, -28, -28, -28, -28, -28, -28, -28,
1074 -28, -28, -28, -28, -28, -28, -28, -28, -28, -28,
1075 -28, -28, -28, -28, -28, -28, -28, -28, -28, -28,
1076 -28, -28, -28, -28, -28, -28, -28, -28, -28, -28,
1078 -28, -28, -28, -28, -28, -28, -28, -28, -28, -28,
1079 -28, -28, -28, -28, -28, -28, -28, -28, -28, -28,
1080 -28, -28, -28, -28, -28, -28, -28, -28, -28, -28,
1081 -28, -28, -28, -28, -28, -28, -28, -28, -28, -28,
1082 -28, -28, -28, -28, -28, -28, -28, -28, -28, -28,
1083 -28, -28, -28, -28, -28, -28, -28, -28, -28, -28,
1084 -28, -28, -28, -28, -28, -28, -28, -28, -28, -28,
1085 -28, -28, -28, -28, -28, -28, -28, -28, -28, -28,
1086 -28, -28, -28, -28, -28, -28, -28, -28, -28, -28,
1087 -28, -28, -28, -28, -28, -28, -28, -28, -28, -28,
1089 -28, -28, -28, -28, -28, -28, -28, -28, -28, -28,
1090 -28, -28, -28, -28, -28, -28, -28, -28, -28, -28,
1091 -28, -28, -28, -28, -28, -28, -28, -28, -28, -28,
1092 -28, -28, -28, -28, -28, -28, -28, -28, -28, -28,
1093 -28, -28, -28, -28, -28, -28, -28, -28, -28, -28,
1094 -28, -28, -28, -28, -28, -28 },
1096 { 3, 15, 15, 15, 15, 15, 15, 15, 15, -29,
1097 -29, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1098 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1099 15, 15, -29, 15, 15, 15, 15, 15, 15, 15,
1100 -29, -29, 15, 15, -29, 15, 15, 15, 15, 15,
1101 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1102 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1103 15, 15, 15, 15, 15, 15, 15, 15, 34, 15,
1104 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1105 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1107 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1108 34, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1109 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1110 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1111 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1112 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1113 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1114 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1115 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1116 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1118 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1119 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1120 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1121 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1122 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1123 15, 15, 15, 15, 15, 15 },
1125 { 3, -30, -30, -30, -30, -30, -30, -30, -30, -30,
1126 -30, -30, -30, -30, -30, -30, -30, -30, -30, -30,
1127 -30, -30, -30, -30, -30, -30, -30, -30, -30, -30,
1128 -30, -30, -30, -30, -30, -30, -30, -30, -30, -30,
1129 -30, -30, -30, -30, -30, -30, -30, -30, -30, -30,
1130 -30, -30, -30, -30, -30, -30, -30, -30, -30, -30,
1131 -30, -30, -30, -30, -30, -30, -30, -30, -30, -30,
1132 -30, -30, -30, -30, -30, -30, -30, -30, -30, -30,
1133 -30, -30, -30, -30, -30, -30, -30, -30, -30, -30,
1134 -30, -30, -30, -30, -30, -30, -30, -30, -30, -30,
1136 -30, -30, -30, -30, -30, -30, -30, -30, -30, -30,
1137 -30, -30, -30, -30, -30, -30, -30, -30, -30, -30,
1138 -30, -30, -30, -30, -30, -30, -30, -30, -30, -30,
1139 -30, -30, -30, -30, -30, -30, -30, -30, -30, -30,
1140 -30, -30, -30, -30, -30, -30, -30, -30, -30, -30,
1141 -30, -30, -30, -30, -30, -30, -30, -30, -30, -30,
1142 -30, -30, -30, -30, -30, -30, -30, -30, -30, -30,
1143 -30, -30, -30, -30, -30, -30, -30, -30, -30, -30,
1144 -30, -30, -30, -30, -30, -30, -30, -30, -30, -30,
1145 -30, -30, -30, -30, -30, -30, -30, -30, -30, -30,
1147 -30, -30, -30, -30, -30, -30, -30, -30, -30, -30,
1148 -30, -30, -30, -30, -30, -30, -30, -30, -30, -30,
1149 -30, -30, -30, -30, -30, -30, -30, -30, -30, -30,
1150 -30, -30, -30, -30, -30, -30, -30, -30, -30, -30,
1151 -30, -30, -30, -30, -30, -30, -30, -30, -30, -30,
1152 -30, -30, -30, -30, -30, -30 },
1154 { 3, 15, 15, 15, 15, 15, 15, 15, 15, -31,
1155 -31, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1156 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1157 15, 15, -31, 15, 15, 15, 15, 15, 15, 15,
1158 -31, -31, 15, 15, -31, 15, 15, 15, 15, 15,
1159 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1160 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1161 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1162 15, 15, 35, 15, 15, 15, 15, 15, 15, 15,
1163 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1165 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1166 15, 15, 15, 15, 35, 15, 15, 15, 15, 15,
1167 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1168 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1169 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1170 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1171 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1172 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1173 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1174 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1176 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1177 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1178 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1179 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1180 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1181 15, 15, 15, 15, 15, 15 },
1183 { 3, 15, 15, 15, 15, 15, 15, 15, 15, -32,
1184 -32, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1185 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1186 15, 15, -32, 15, 15, 15, 15, 15, 15, 15,
1187 -32, -32, 15, 15, -32, 15, 15, 15, 15, 15,
1188 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1189 15, 15, 15, 15, 15, 15, 15, 36, 15, 15,
1190 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1191 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1192 15, 15, 15, 15, 15, 15, 15, 15, 15, 36,
1194 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1195 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1196 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1197 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1198 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1199 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1200 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1201 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1202 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1203 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1205 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1206 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1207 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1208 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1209 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1210 15, 15, 15, 15, 15, 15 },
1212 { 3, 15, 15, 15, 15, 15, 15, 15, 15, -33,
1213 -33, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1214 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1215 15, 15, -33, 15, 15, 15, 15, 15, 15, 15,
1216 -33, -33, 15, 15, -33, 15, 15, 15, 15, 15,
1217 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1218 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1219 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1220 15, 15, 15, 37, 15, 15, 15, 15, 15, 15,
1221 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1223 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1224 15, 15, 15, 15, 15, 37, 15, 15, 15, 15,
1225 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1226 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1227 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1228 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1229 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1230 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1231 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1232 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1234 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1235 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1236 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1237 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1238 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1239 15, 15, 15, 15, 15, 15 },
1241 { 3, 15, 15, 15, 15, 15, 15, 15, 15, -34,
1242 -34, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1243 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1244 15, 15, -34, 15, 15, 15, 15, 15, 15, 15,
1245 -34, -34, 15, 15, -34, 15, 15, 15, 15, 15,
1246 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1247 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1248 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1249 15, 15, 15, 15, 38, 15, 15, 15, 15, 15,
1250 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1252 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1253 15, 15, 15, 15, 15, 15, 38, 15, 15, 15,
1254 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1255 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1256 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1257 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1258 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1259 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1260 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1261 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1263 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1264 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1265 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1266 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1267 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1268 15, 15, 15, 15, 15, 15 },
1270 { 3, 15, 15, 15, 15, 15, 15, 15, 15, -35,
1271 -35, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1272 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1273 15, 15, -35, 15, 15, 15, 15, 15, 15, 15,
1274 -35, -35, 15, 15, -35, 15, 15, 15, 15, 15,
1275 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1276 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1277 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1278 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1279 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1281 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1282 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1283 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1284 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1285 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1286 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1287 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1288 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1289 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1290 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1292 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1293 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1294 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1295 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1296 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1297 15, 15, 15, 15, 15, 15 },
1299 { 3, 15, 15, 15, 15, 15, 15, 15, 15, -36,
1300 -36, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1301 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1302 15, 15, -36, 15, 15, 15, 15, 15, 15, 15,
1303 -36, -36, 15, 15, -36, 15, 15, 15, 15, 15,
1304 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1305 15, 15, 15, 15, 15, 39, 15, 15, 15, 15,
1306 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1307 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1308 15, 15, 15, 15, 15, 15, 15, 39, 15, 15,
1310 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1311 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1312 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1313 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1314 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1315 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1316 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1317 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1318 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1319 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1321 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1322 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1323 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1324 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1325 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1326 15, 15, 15, 15, 15, 15 },
1328 { 3, 15, 15, 15, 15, 15, 15, 15, 15, -37,
1329 -37, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1330 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1331 15, 15, -37, 15, 15, 15, 15, 15, 15, 15,
1332 -37, -37, 15, 15, -37, 15, 15, 15, 15, 15,
1333 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1334 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1335 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1336 15, 15, 15, 15, 40, 15, 15, 15, 15, 15,
1337 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1339 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1340 15, 15, 15, 15, 15, 15, 40, 15, 15, 15,
1341 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1342 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1343 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1344 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1345 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1346 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1347 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1348 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1350 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1351 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1352 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1353 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1354 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1355 15, 15, 15, 15, 15, 15 },
1357 { 3, 15, 15, 15, 15, 15, 15, 15, 15, -38,
1358 -38, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1359 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1360 15, 15, -38, 15, 15, 15, 15, 15, 15, 15,
1361 -38, -38, 15, 15, -38, 15, 15, 15, 15, 15,
1362 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1363 15, 15, 15, 15, 15, 15, 15, 15, 15, 41,
1364 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1365 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1366 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1368 15, 41, 15, 15, 15, 15, 15, 15, 15, 15,
1369 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1370 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1371 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1372 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1373 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1374 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1375 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1376 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1377 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1379 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1380 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1381 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1382 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1383 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1384 15, 15, 15, 15, 15, 15 },
1386 { 3, 15, 15, 15, 15, 15, 15, 15, 15, -39,
1387 -39, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1388 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1389 15, 15, -39, 15, 15, 15, 15, 15, 15, 15,
1390 -39, -39, 15, 15, -39, 15, 15, 15, 15, 15,
1391 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1392 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1393 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1394 15, 15, 15, 15, 42, 15, 15, 15, 15, 15,
1395 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1397 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1398 15, 15, 15, 15, 15, 15, 42, 15, 15, 15,
1399 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1400 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1401 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1402 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1403 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1404 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1405 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1406 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1408 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1409 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1410 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1411 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1412 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1413 15, 15, 15, 15, 15, 15 },
1415 { 3, 15, 15, 15, 15, 15, 15, 15, 15, -40,
1416 -40, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1417 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1418 15, 15, -40, 15, 15, 15, 15, 15, 15, 15,
1419 -40, -40, 15, 15, -40, 15, 15, 15, 15, 15,
1420 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1421 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1422 15, 15, 15, 15, 15, 15, 15, 15, 15, 43,
1423 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1424 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1426 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1427 15, 43, 15, 15, 15, 15, 15, 15, 15, 15,
1428 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1429 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1430 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1431 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1432 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1433 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1434 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1435 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1437 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1438 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1439 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1440 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1441 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1442 15, 15, 15, 15, 15, 15 },
1444 { 3, 15, 15, 15, 15, 15, 15, 15, 15, -41,
1445 -41, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1446 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1447 15, 15, -41, 15, 15, 15, 15, 15, 15, 15,
1448 -41, -41, 15, 15, -41, 15, 15, 15, 15, 15,
1449 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1450 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1451 15, 15, 15, 15, 15, 15, 15, 15, 44, 15,
1452 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1453 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1455 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1456 44, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1457 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1458 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1459 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1460 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1461 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1462 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1463 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1464 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1466 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1467 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1468 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1469 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1470 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1471 15, 15, 15, 15, 15, 15 },
1473 { 3, 15, 15, 15, 15, 15, 15, 15, 15, -42,
1474 -42, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1475 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1476 15, 15, -42, 15, 15, 15, 15, 15, 15, 15,
1477 -42, -42, 15, 15, -42, 15, 15, 15, 15, 15,
1478 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1479 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1480 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1481 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1482 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1484 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1485 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1486 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1487 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1488 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1489 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1490 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1491 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1492 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1493 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1495 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1496 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1497 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1498 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1499 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1500 15, 15, 15, 15, 15, 15 },
1502 { 3, 15, 15, 15, 15, 15, 15, 15, 15, -43,
1503 -43, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1504 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1505 15, 15, -43, 15, 15, 15, 15, 15, 15, 15,
1506 -43, -43, 15, 15, -43, 15, 15, 15, 15, 15,
1507 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1508 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1509 45, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1510 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1511 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1513 15, 15, 45, 15, 15, 15, 15, 15, 15, 15,
1514 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1515 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1516 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1517 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1518 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1519 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1520 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1521 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1522 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1524 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1525 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1526 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1527 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1528 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1529 15, 15, 15, 15, 15, 15 },
1531 { 3, 15, 15, 15, 15, 15, 15, 15, 15, -44,
1532 -44, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1533 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1534 15, 15, -44, 15, 15, 15, 15, 15, 15, 15,
1535 -44, -44, 15, 15, -44, 15, 15, 15, 15, 15,
1536 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1537 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1538 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1539 15, 15, 15, 15, 46, 15, 15, 15, 15, 15,
1540 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1542 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1543 15, 15, 15, 15, 15, 15, 46, 15, 15, 15,
1544 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1545 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1546 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1547 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1548 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1549 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1550 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1551 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1553 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1554 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1555 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1556 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1557 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1558 15, 15, 15, 15, 15, 15 },
1560 { 3, 15, 15, 15, 15, 15, 15, 15, 15, -45,
1561 -45, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1562 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1563 15, 15, -45, 15, 15, 15, 15, 15, 15, 15,
1564 -45, -45, 15, 15, -45, 15, 15, 15, 15, 15,
1565 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1566 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1567 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1568 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1569 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1571 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1572 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1573 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1574 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1575 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1576 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1577 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1578 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1579 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1580 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1582 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1583 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1584 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1585 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1586 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1587 15, 15, 15, 15, 15, 15 },
1589 { 3, 15, 15, 15, 15, 15, 15, 15, 15, -46,
1590 -46, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1591 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1592 15, 15, -46, 15, 15, 15, 15, 15, 15, 15,
1593 -46, -46, 15, 15, -46, 15, 15, 15, 15, 15,
1594 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1595 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1596 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1597 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1598 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1600 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1601 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1602 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1603 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1604 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1605 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1606 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1607 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1608 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1609 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1611 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1612 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1613 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1614 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1615 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1616 15, 15, 15, 15, 15, 15 }
1621 /* done after the current pattern has been matched and before the
1622 * corresponding action - sets up ol_datatext
1624 #define ol_data_DO_BEFORE_ACTION \
1625 ol_datatext = ol_data_bp; \
1626 ol_dataleng = ol_data_cp - ol_data_bp; \
1627 ol_data_hold_char = *ol_data_cp; \
1628 *ol_data_cp = '\0'; \
1629 ol_data_c_buf_p = ol_data_cp;
1631 #define EOB_ACT_CONTINUE_SCAN 0
1632 #define EOB_ACT_END_OF_FILE 1
1633 #define EOB_ACT_LAST_MATCH 2
1635 /* return all but the first 'n' matched characters back to the input stream */
1636 #define ol_dataless(n) \
1639 /* undo effects of setting up ol_datatext */ \
1640 *ol_data_cp = ol_data_hold_char; \
1641 ol_data_c_buf_p = ol_data_cp = ol_data_bp + n; \
1642 ol_data_DO_BEFORE_ACTION; /* set up ol_datatext again */ \
1646 #define unput(c) ol_dataunput( c, ol_datatext )
1649 struct ol_data_buffer_state
1651 FILE *ol_data_input_file;
1653 ol_data_CHAR *ol_data_ch_buf; /* input buffer */
1654 ol_data_CHAR *ol_data_buf_pos; /* current position in input buffer */
1656 /* size of input buffer in bytes, not including room for EOB characters*/
1657 int ol_data_buf_size;
1659 /* number of characters read into ol_data_ch_buf, not including EOB characters */
1660 int ol_data_n_chars;
1662 int ol_data_eof_status; /* whether we've seen an EOF on this buffer */
1663 #define EOF_NOT_SEEN 0
1664 /* "pending" happens when the EOF has been seen but there's still
1667 #define EOF_PENDING 1
1671 static ol_data_BUFFER_STATE ol_data_current_buffer;
1673 /* we provide macros for accessing buffer states in case in the
1674 * future we want to put the buffer states in a more general
1677 #define ol_data_CURRENT_BUFFER ol_data_current_buffer
1680 /* ol_data_hold_char holds the character lost when ol_datatext is formed */
1681 static ol_data_CHAR ol_data_hold_char;
1683 static int ol_data_n_chars; /* number of characters read into ol_data_ch_buf */
1687 #ifndef ol_data_USER_ACTION
1688 #define ol_data_USER_ACTION
1691 #ifndef ol_data_USER_INIT
1692 #define ol_data_USER_INIT
1695 extern ol_data_CHAR *ol_datatext;
1696 extern int ol_dataleng;
1697 extern FILE *ol_datain, *ol_dataout;
1699 ol_data_CHAR *ol_datatext;
1702 FILE *ol_datain = (FILE *) 0, *ol_dataout = (FILE *) 0;
1704 #define ol_data_END_OF_BUFFER 13
1705 typedef int ol_data_state_type;
1706 static const short int ol_data_accept[47] =
1708 0, 0, 13, 8, 10, 10, 8, 8, 8, 9,
1709 8, 8, 8, 8, 8, 10, 8, 0, 2, 8,
1710 8, 0, 3, 1, 8, 8, 8, 2, 8, 3,
1711 8, 8, 8, 8, 4, 8, 8, 8, 8, 8,
1715 static ol_data_state_type ol_data_last_accepting_state;
1716 static ol_data_CHAR *ol_data_last_accepting_cpos;
1718 static const ol_data_state_type ol_data_NUL_trans[47] =
1720 4, 4, 0, 15, 0, 0, 17, 15, 21, 0,
1721 15, 15, 15, 15, 15, 0, 17, 18, 15, 15,
1722 21, 22, 15, 15, 15, 15, 15, 0, 15, 0,
1723 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
1724 15, 15, 15, 15, 15, 15
1727 /* the intent behind this definition is that it'll catch
1728 * any uses of REJECT which flex missed
1730 #define REJECT reject_used_but_not_detected
1731 #define ol_datamore() ol_datamore_used_but_not_detected
1732 #define ol_data_MORE_ADJ 0
1734 /* these variables are all declared out here so that section 3 code can
1737 /* points to current character in buffer */
1738 static ol_data_CHAR *ol_data_c_buf_p = (ol_data_CHAR *) 0;
1739 static int ol_data_init = 1; /* whether we need to initialize */
1740 static int ol_data_start = 0; /* start state number */
1742 /* flag which is used to allow ol_datawrap()'s to do buffer switches
1743 * instead of setting up a fresh ol_datain. A bit of a hack ...
1745 static int ol_data_did_buffer_switch_on_eof;
1747 static ol_data_state_type ol_data_get_previous_state ol_data_PROTO(( void ));
1748 static ol_data_state_type ol_data_try_NUL_trans ol_data_PROTO(( ol_data_state_type current_state ));
1749 static int ol_data_get_next_buffer ol_data_PROTO(( void ));
1751 static void ol_dataunput ol_data_PROTO(( ol_data_CHAR c, ol_data_CHAR *buf_ptr ));
1753 void ol_datarestart ol_data_PROTO(( FILE *input_file ));
1754 void ol_data_switch_to_buffer ol_data_PROTO(( ol_data_BUFFER_STATE new_buffer ));
1755 void ol_data_load_buffer_state ol_data_PROTO(( void ));
1756 ol_data_BUFFER_STATE ol_data_create_buffer ol_data_PROTO(( FILE *file, int size ));
1757 void ol_data_delete_buffer ol_data_PROTO(( ol_data_BUFFER_STATE b ));
1758 void ol_data_init_buffer ol_data_PROTO(( ol_data_BUFFER_STATE b, FILE *file ));
1760 #define ol_data_new_buffer ol_data_create_buffer
1764 static int ol_datainput ol_data_PROTO(( void ));
1766 static int input ol_data_PROTO(( void ));
1772 register ol_data_state_type ol_data_current_state;
1773 register ol_data_CHAR *ol_data_cp, *ol_data_bp;
1774 register int ol_data_act;
1783 if ( ! ol_data_start )
1784 ol_data_start = 1; /* first start state */
1790 ol_dataout = stdout;
1792 if ( ol_data_current_buffer )
1793 ol_data_init_buffer( ol_data_current_buffer, ol_datain );
1795 ol_data_current_buffer = ol_data_create_buffer( ol_datain, ol_data_BUF_SIZE );
1797 ol_data_load_buffer_state();
1802 while ( 1 ) /* loops until end-of-file is reached */
1804 ol_data_cp = ol_data_c_buf_p;
1806 /* support of ol_datatext */
1807 *ol_data_cp = ol_data_hold_char;
1809 /* ol_data_bp points to the position in ol_data_ch_buf of the start of the
1812 ol_data_bp = ol_data_cp;
1814 ol_data_current_state = ol_data_start;
1816 while ( (ol_data_current_state = ol_data_nxt[ol_data_current_state][*ol_data_cp]) > 0 )
1818 if ( ol_data_accept[ol_data_current_state] )
1820 ol_data_last_accepting_state = ol_data_current_state;
1821 ol_data_last_accepting_cpos = ol_data_cp;
1827 ol_data_current_state = -ol_data_current_state;
1829 ol_data_find_action:
1830 ol_data_act = ol_data_accept[ol_data_current_state];
1832 ol_data_DO_BEFORE_ACTION;
1833 ol_data_USER_ACTION;
1835 do_action: /* this label is used only to access EOF actions */
1838 switch ( ol_data_act )
1840 case 0: /* must backtrack */
1841 /* undo the effects of ol_data_DO_BEFORE_ACTION */
1842 *ol_data_cp = ol_data_hold_char;
1843 ol_data_cp = ol_data_last_accepting_cpos + 1;
1844 ol_data_current_state = ol_data_last_accepting_state;
1845 goto ol_data_find_action;
1849 ol_datalval.name = SGMLName::intern((const char *)ol_datatext+1 ,1);
1850 return( Reference );
1855 if ( *(ol_datatext + 1) != '"' ) {
1856 // get rid of the 2 quotes
1857 int len = strlen(( const char *)ol_datatext)-2;
1858 char *lit_str = new char [ len + 1 ];
1859 *((char *) memcpy(lit_str,
1860 (const char *)ol_datatext + 1,
1862 ol_datalval.string = lit_str;
1865 ol_datalval.string = 0;
1868 DBG(50) cerr << "(DEBUG) literal \"string\" = "
1869 << ol_datalval.string << endl;
1876 if ( *(ol_datatext + 1) != '\'' ) {
1877 // get rid of the 2 quotes
1878 int len = strlen(( const char *)ol_datatext)-2;
1879 char *lit_str = new char [ len + 1 ];
1880 *((char *) memcpy(lit_str,
1881 (const char *)ol_datatext + 1,
1883 ol_datalval.string = lit_str;
1887 ol_datalval.string = 0;
1890 DBG(50) cerr << "(DEBUG) literal 'string' = "
1891 << ol_datalval.string << endl;
1900 { return( Concat ); }
1903 { return( FirstOf); }
1906 { return( Content ); }
1910 ol_datalval.name = SGMLName::intern((const char *)ol_datatext,1);
1911 DBG(10) cerr << "(DEBUG) matches"
1912 << (char *)SGMLName::lookup(ol_datalval.name)
1919 DBG(10) cerr << "(DEBUG) matches"
1920 << (char *)ol_datatext
1922 return ( ol_datatext[0] );
1931 "Syntax error in value expression"));
1936 ol_data_FATAL_ERROR( "flex scanner jammed" );
1938 case ol_data_STATE_EOF(INITIAL):
1941 case ol_data_END_OF_BUFFER:
1943 /* amount of text matched not including the EOB char */
1944 int ol_data_amount_of_matched_text = ol_data_cp - ol_datatext - 1;
1946 /* undo the effects of ol_data_DO_BEFORE_ACTION */
1947 *ol_data_cp = ol_data_hold_char;
1949 /* note that here we test for ol_data_c_buf_p "<=" to the position
1950 * of the first EOB in the buffer, since ol_data_c_buf_p will
1951 * already have been incremented past the NUL character
1952 * (since all states make transitions on EOB to the end-
1953 * of-buffer state). Contrast this with the test in ol_datainput().
1955 if ( ol_data_c_buf_p <= &ol_data_current_buffer->ol_data_ch_buf[ol_data_n_chars] )
1956 /* this was really a NUL */
1958 ol_data_state_type ol_data_next_state;
1960 ol_data_c_buf_p = ol_datatext + ol_data_amount_of_matched_text;
1962 ol_data_current_state = ol_data_get_previous_state();
1964 /* okay, we're now positioned to make the
1965 * NUL transition. We couldn't have
1966 * ol_data_get_previous_state() go ahead and do it
1967 * for us because it doesn't know how to deal
1968 * with the possibility of jamming (and we
1969 * don't want to build jamming into it because
1970 * then it will run more slowly)
1973 ol_data_next_state = ol_data_try_NUL_trans( ol_data_current_state );
1975 ol_data_bp = ol_datatext + ol_data_MORE_ADJ;
1977 if ( ol_data_next_state )
1979 /* consume the NUL */
1980 ol_data_cp = ++ol_data_c_buf_p;
1981 ol_data_current_state = ol_data_next_state;
1987 ol_data_cp = ol_data_c_buf_p;
1988 goto ol_data_find_action;
1992 else switch ( ol_data_get_next_buffer() )
1994 case EOB_ACT_END_OF_FILE:
1996 ol_data_did_buffer_switch_on_eof = 0;
1998 if ( ol_datawrap() )
2000 /* note: because we've taken care in
2001 * ol_data_get_next_buffer() to have set up ol_datatext,
2002 * we can now set up ol_data_c_buf_p so that if some
2003 * total hoser (like flex itself) wants
2004 * to call the scanner after we return the
2005 * ol_data_NULL, it'll still work - another ol_data_NULL
2006 * will get returned.
2008 ol_data_c_buf_p = ol_datatext + ol_data_MORE_ADJ;
2010 ol_data_act = ol_data_STATE_EOF((ol_data_start - 1) / 2);
2016 if ( ! ol_data_did_buffer_switch_on_eof )
2022 case EOB_ACT_CONTINUE_SCAN:
2023 ol_data_c_buf_p = ol_datatext + ol_data_amount_of_matched_text;
2025 ol_data_current_state = ol_data_get_previous_state();
2027 ol_data_cp = ol_data_c_buf_p;
2028 ol_data_bp = ol_datatext + ol_data_MORE_ADJ;
2031 case EOB_ACT_LAST_MATCH:
2033 &ol_data_current_buffer->ol_data_ch_buf[ol_data_n_chars];
2035 ol_data_current_state = ol_data_get_previous_state();
2037 ol_data_cp = ol_data_c_buf_p;
2038 ol_data_bp = ol_datatext + ol_data_MORE_ADJ;
2039 goto ol_data_find_action;
2046 printf( "action # %d\n", ol_data_act );
2048 ol_data_FATAL_ERROR(
2049 "fatal flex scanner internal error--no action found" );
2055 /* ol_data_get_next_buffer - try to read in a new buffer
2058 * int ol_data_get_next_buffer();
2060 * returns a code representing an action
2061 * EOB_ACT_LAST_MATCH -
2062 * EOB_ACT_CONTINUE_SCAN - continue scanning from current position
2063 * EOB_ACT_END_OF_FILE - end of file
2066 static int ol_data_get_next_buffer()
2069 register ol_data_CHAR *dest = ol_data_current_buffer->ol_data_ch_buf;
2070 register ol_data_CHAR *source = ol_datatext - 1; /* copy prev. char, too */
2071 register int number_to_move, i;
2074 if ( ol_data_c_buf_p > &ol_data_current_buffer->ol_data_ch_buf[ol_data_n_chars + 1] )
2075 ol_data_FATAL_ERROR(
2076 "fatal flex scanner internal error--end of buffer missed" );
2078 /* try to read more data */
2080 /* first move last chars to start of buffer */
2081 number_to_move = ol_data_c_buf_p - ol_datatext;
2083 for ( i = 0; i < number_to_move; ++i )
2084 *(dest++) = *(source++);
2086 if ( ol_data_current_buffer->ol_data_eof_status != EOF_NOT_SEEN )
2087 /* don't do the read, it's not guaranteed to return an EOF,
2090 ol_data_n_chars = 0;
2094 int num_to_read = ol_data_current_buffer->ol_data_buf_size - number_to_move - 1;
2096 if ( num_to_read > ol_data_READ_BUF_SIZE )
2097 num_to_read = ol_data_READ_BUF_SIZE;
2099 else if ( num_to_read <= 0 )
2100 ol_data_FATAL_ERROR( "fatal error - scanner input buffer overflow" );
2102 /* read in more data */
2103 ol_data_INPUT( (&ol_data_current_buffer->ol_data_ch_buf[number_to_move]),
2104 ol_data_n_chars, num_to_read );
2107 if ( ol_data_n_chars == 0 )
2109 if ( number_to_move == 1 )
2111 ret_val = EOB_ACT_END_OF_FILE;
2112 ol_data_current_buffer->ol_data_eof_status = EOF_DONE;
2117 ret_val = EOB_ACT_LAST_MATCH;
2118 ol_data_current_buffer->ol_data_eof_status = EOF_PENDING;
2123 ret_val = EOB_ACT_CONTINUE_SCAN;
2125 ol_data_n_chars += number_to_move;
2126 ol_data_current_buffer->ol_data_ch_buf[ol_data_n_chars] = ol_data_END_OF_BUFFER_CHAR;
2127 ol_data_current_buffer->ol_data_ch_buf[ol_data_n_chars + 1] = ol_data_END_OF_BUFFER_CHAR;
2129 /* ol_datatext begins at the second character in ol_data_ch_buf; the first
2130 * character is the one which preceded it before reading in the latest
2131 * buffer; it needs to be kept around in case it's a newline, so
2132 * ol_data_get_previous_state() will have with '^' rules active
2135 ol_datatext = &ol_data_current_buffer->ol_data_ch_buf[1];
2141 /* ol_data_get_previous_state - get the state just before the EOB char was reached
2144 * ol_data_state_type ol_data_get_previous_state();
2147 static ol_data_state_type ol_data_get_previous_state()
2150 register ol_data_state_type ol_data_current_state;
2151 register ol_data_CHAR *ol_data_cp;
2153 ol_data_current_state = ol_data_start;
2155 for ( ol_data_cp = ol_datatext + ol_data_MORE_ADJ; ol_data_cp < ol_data_c_buf_p; ++ol_data_cp )
2159 ol_data_current_state = ol_data_nxt[ol_data_current_state][*ol_data_cp];
2162 ol_data_current_state = ol_data_NUL_trans[ol_data_current_state];
2163 if ( ol_data_accept[ol_data_current_state] )
2165 ol_data_last_accepting_state = ol_data_current_state;
2166 ol_data_last_accepting_cpos = ol_data_cp;
2170 return ( ol_data_current_state );
2174 /* ol_data_try_NUL_trans - try to make a transition on the NUL character
2177 * next_state = ol_data_try_NUL_trans( current_state );
2180 #ifdef ol_data_USE_PROTOS
2181 static ol_data_state_type ol_data_try_NUL_trans( register ol_data_state_type ol_data_current_state )
2183 static ol_data_state_type ol_data_try_NUL_trans( ol_data_current_state )
2184 register ol_data_state_type ol_data_current_state;
2188 register int ol_data_is_jam;
2189 register ol_data_CHAR *ol_data_cp = ol_data_c_buf_p;
2191 ol_data_current_state = ol_data_NUL_trans[ol_data_current_state];
2192 ol_data_is_jam = (ol_data_current_state == 0);
2194 if ( ! ol_data_is_jam )
2196 if ( ol_data_accept[ol_data_current_state] )
2198 ol_data_last_accepting_state = ol_data_current_state;
2199 ol_data_last_accepting_cpos = ol_data_cp;
2203 return ( ol_data_is_jam ? 0 : ol_data_current_state );
2208 #ifdef ol_data_USE_PROTOS
2209 static void ol_dataunput( ol_data_CHAR c, register ol_data_CHAR *ol_data_bp )
2211 static void ol_dataunput( c, ol_data_bp )
2213 register ol_data_CHAR *ol_data_bp;
2217 register ol_data_CHAR *ol_data_cp = ol_data_c_buf_p;
2219 /* undo effects of setting up ol_datatext */
2220 *ol_data_cp = ol_data_hold_char;
2222 if ( ol_data_cp < ol_data_current_buffer->ol_data_ch_buf + 2 )
2223 { /* need to shift things up to make room */
2224 register int number_to_move = ol_data_n_chars + 2; /* +2 for EOB chars */
2225 register ol_data_CHAR *dest =
2226 &ol_data_current_buffer->ol_data_ch_buf[ol_data_current_buffer->ol_data_buf_size + 2];
2227 register ol_data_CHAR *source =
2228 &ol_data_current_buffer->ol_data_ch_buf[number_to_move];
2230 while ( source > ol_data_current_buffer->ol_data_ch_buf )
2231 *--dest = *--source;
2233 ol_data_cp += dest - source;
2234 ol_data_bp += dest - source;
2235 ol_data_n_chars = ol_data_current_buffer->ol_data_buf_size;
2237 if ( ol_data_cp < ol_data_current_buffer->ol_data_ch_buf + 2 )
2238 ol_data_FATAL_ERROR( "flex scanner push-back overflow" );
2241 if ( ol_data_cp > ol_data_bp && ol_data_cp[-1] == '\n' )
2242 ol_data_cp[-2] = '\n';
2246 /* note: the formal parameter *must* be called "ol_data_bp" for this
2247 * macro to now work correctly
2249 ol_data_DO_BEFORE_ACTION; /* set up ol_datatext again */
2256 static int ol_datainput()
2263 ol_data_CHAR *ol_data_cp = ol_data_c_buf_p;
2265 *ol_data_cp = ol_data_hold_char;
2267 if ( *ol_data_c_buf_p == ol_data_END_OF_BUFFER_CHAR )
2269 /* ol_data_c_buf_p now points to the character we want to return.
2270 * If this occurs *before* the EOB characters, then it's a
2271 * valid NUL; if not, then we've hit the end of the buffer.
2273 if ( ol_data_c_buf_p < &ol_data_current_buffer->ol_data_ch_buf[ol_data_n_chars] )
2274 /* this was really a NUL */
2275 *ol_data_c_buf_p = '\0';
2278 { /* need more input */
2279 ol_datatext = ol_data_c_buf_p;
2282 switch ( ol_data_get_next_buffer() )
2284 case EOB_ACT_END_OF_FILE:
2286 if ( ol_datawrap() )
2288 ol_data_c_buf_p = ol_datatext + ol_data_MORE_ADJ;
2295 return ( ol_datainput() );
2302 case EOB_ACT_CONTINUE_SCAN:
2303 ol_data_c_buf_p = ol_datatext + ol_data_MORE_ADJ;
2306 case EOB_ACT_LAST_MATCH:
2308 ol_data_FATAL_ERROR( "unexpected last match in ol_datainput()" );
2310 ol_data_FATAL_ERROR( "unexpected last match in input()" );
2316 c = *ol_data_c_buf_p;
2317 ol_data_hold_char = *++ol_data_c_buf_p;
2324 #ifdef ol_data_USE_PROTOS
2325 void ol_datarestart( FILE *input_file )
2327 void ol_datarestart( input_file )
2332 ol_data_init_buffer( ol_data_current_buffer, input_file );
2333 ol_data_load_buffer_state();
2337 #ifdef ol_data_USE_PROTOS
2338 void ol_data_switch_to_buffer( ol_data_BUFFER_STATE new_buffer )
2340 void ol_data_switch_to_buffer( new_buffer )
2341 ol_data_BUFFER_STATE new_buffer;
2345 if ( ol_data_current_buffer == new_buffer )
2348 if ( ol_data_current_buffer )
2350 /* flush out information for old buffer */
2351 *ol_data_c_buf_p = ol_data_hold_char;
2352 ol_data_current_buffer->ol_data_buf_pos = ol_data_c_buf_p;
2353 ol_data_current_buffer->ol_data_n_chars = ol_data_n_chars;
2356 ol_data_current_buffer = new_buffer;
2357 ol_data_load_buffer_state();
2359 /* we don't actually know whether we did this switch during
2360 * EOF (ol_datawrap()) processing, but the only time this flag
2361 * is looked at is after ol_datawrap() is called, so it's safe
2362 * to go ahead and always set it.
2364 ol_data_did_buffer_switch_on_eof = 1;
2368 #ifdef ol_data_USE_PROTOS
2369 void ol_data_load_buffer_state( void )
2371 void ol_data_load_buffer_state()
2375 ol_data_n_chars = ol_data_current_buffer->ol_data_n_chars;
2376 ol_datatext = ol_data_c_buf_p = ol_data_current_buffer->ol_data_buf_pos;
2377 ol_datain = ol_data_current_buffer->ol_data_input_file;
2378 ol_data_hold_char = *ol_data_c_buf_p;
2382 #ifdef ol_data_USE_PROTOS
2383 ol_data_BUFFER_STATE ol_data_create_buffer( FILE *file, int size )
2385 ol_data_BUFFER_STATE ol_data_create_buffer( file, size )
2391 ol_data_BUFFER_STATE b;
2393 b = (ol_data_BUFFER_STATE) malloc( sizeof( struct ol_data_buffer_state ) );
2396 ol_data_FATAL_ERROR( "out of dynamic memory in ol_data_create_buffer()" );
2398 b->ol_data_buf_size = size;
2400 /* ol_data_ch_buf has to be 2 characters longer than the size given because
2401 * we need to put in 2 end-of-buffer characters.
2403 b->ol_data_ch_buf = (ol_data_CHAR *) malloc( (unsigned) (b->ol_data_buf_size + 2) );
2405 if ( ! b->ol_data_ch_buf )
2406 ol_data_FATAL_ERROR( "out of dynamic memory in ol_data_create_buffer()" );
2408 ol_data_init_buffer( b, file );
2414 #ifdef ol_data_USE_PROTOS
2415 void ol_data_delete_buffer( ol_data_BUFFER_STATE b )
2417 void ol_data_delete_buffer( b )
2418 ol_data_BUFFER_STATE b;
2422 if ( b == ol_data_current_buffer )
2423 ol_data_current_buffer = (ol_data_BUFFER_STATE) 0;
2425 free( (char *) b->ol_data_ch_buf );
2430 #ifdef ol_data_USE_PROTOS
2431 void ol_data_init_buffer( ol_data_BUFFER_STATE b, FILE *file )
2433 void ol_data_init_buffer( b, file )
2434 ol_data_BUFFER_STATE b;
2439 b->ol_data_input_file = file;
2441 /* we put in the '\n' and start reading from [1] so that an
2442 * initial match-at-newline will be true.
2445 b->ol_data_ch_buf[0] = '\n';
2446 b->ol_data_n_chars = 1;
2448 /* we always need two end-of-buffer characters. The first causes
2449 * a transition to the end-of-buffer state. The second causes
2450 * a jam in that state.
2452 b->ol_data_ch_buf[1] = ol_data_END_OF_BUFFER_CHAR;
2453 b->ol_data_ch_buf[2] = ol_data_END_OF_BUFFER_CHAR;
2455 b->ol_data_buf_pos = &b->ol_data_ch_buf[1];
2457 b->ol_data_eof_status = EOF_NOT_SEEN;
2462 my_input ( char *buf, int max_size )
2465 int remain = myinputlim - myinputptr;
2466 int n = ( max_size > remain ? remain : max_size );
2469 memcpy ( buf, myinputptr, n );
2475 //--------------------------------------------------------------
2477 ol_dataerror(char *str)
2479 throw(Unexpected(form("Syntax error in %s", myinput)));
2482 //--------------------------------------------------------------
2483 ContentType::ContentType()
2486 dbgStr = getenv ("OL_DEBUG");
2487 dbgLevel = ( dbgStr ? atoi ( dbgStr ) : 0 );
2491 //--------------------------------------------------------------
2492 ContentType::~ContentType()
2495 OL_Expression *eptr = exprlist;
2497 OL_Expression *tmp = eptr;
2503 //--------------------------------------------------------------
2505 ContentType::Parse( char *str )
2508 DBG(10) cerr << "(DEBUG) ContentType::Parse() str = " << str << endl;
2512 myinputlim = str + strlen(str);
2514 CurrentContentPtr = this;
2519 ol_datarestart(NULL);
2522 //--------------------------------------------------------------
2524 ContentType::init( OL_Expression *expr )
2526 assert(expr != NULL);
2530 * The same as CONCAT
2532 ExprList *elist = new ExprList( expr );
2533 OL_Expression *new_expr = new OL_Expression ( CONCAT, -1, elist );
2534 assert(new_expr != NULL);
2536 exprlist = new_expr;