#define yy_create_buffer ld_create_buffer
#define yy_delete_buffer ld_delete_buffer
#define yy_scan_buffer ld_scan_buffer
#define yy_scan_string ld_scan_string
#define yy_scan_bytes ld_scan_bytes
#define yy_flex_debug ld_flex_debug
#define yy_init_buffer ld_init_buffer
#define yy_flush_buffer ld_flush_buffer
#define yy_load_buffer_state ld_load_buffer_state
#define yy_switch_to_buffer ld_switch_to_buffer
#define yyin ldin
#define yyleng ldleng
#define yylex ldlex
#define yyout ldout
#define yyrestart ldrestart
#define yytext ldtext
#define yylineno ldlineno

#line 20 "ldlex.c"
/* A lexical scanner generated by flex */

/* Scanner skeleton version:
 * $Header: /home/daffy/u0/vern/flex/RCS/flex.skl,v 2.91 96/09/10 16:58:48 vern Exp $
 */

#define FLEX_SCANNER
#define YY_FLEX_MAJOR_VERSION 2
#define YY_FLEX_MINOR_VERSION 5

#include <stdio.h>
#include <unistd.h>


/* cfront 1.2 defines "c_plusplus" instead of "__cplusplus" */
#ifdef c_plusplus
#ifndef __cplusplus
#define __cplusplus
#endif
#endif


#ifdef __cplusplus

#include <stdlib.h>

/* Use prototypes in function declarations. */
#define YY_USE_PROTOS

/* The "const" storage-class-modifier is valid. */
#define YY_USE_CONST

#else	/* ! __cplusplus */

#if __STDC__

#define YY_USE_PROTOS
#define YY_USE_CONST

#endif	/* __STDC__ */
#endif	/* ! __cplusplus */

#ifdef __TURBOC__
 #pragma warn -rch
 #pragma warn -use
#include <io.h>
#include <stdlib.h>
#define YY_USE_CONST
#define YY_USE_PROTOS
#endif

#ifdef YY_USE_CONST
#define yyconst const
#else
#define yyconst
#endif


#ifdef YY_USE_PROTOS
#define YY_PROTO(proto) proto
#else
#define YY_PROTO(proto) ()
#endif

/* Returned upon end-of-file. */
#define YY_NULL 0

/* Promotes a possibly negative, possibly signed char to an unsigned
 * integer for use as an array index.  If the signed char is negative,
 * we want to instead treat it as an 8-bit unsigned char, hence the
 * double cast.
 */
#define YY_SC_TO_UI(c) ((unsigned int) (unsigned char) c)

/* Enter a start condition.  This macro really ought to take a parameter,
 * but we do it the disgusting crufty way forced on us by the ()-less
 * definition of BEGIN.
 */
#define BEGIN yy_start = 1 + 2 *

/* Translate the current start state into a value that can be later handed
 * to BEGIN to return to the state.  The YYSTATE alias is for lex
 * compatibility.
 */
#define YY_START ((yy_start - 1) / 2)
#define YYSTATE YY_START

/* Action number for EOF rule of a given start state. */
#define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1)

/* Special action meaning "start processing a new file". */
#define YY_NEW_FILE yyrestart( yyin )

#define YY_END_OF_BUFFER_CHAR 0

/* Size of default input buffer. */
#define YY_BUF_SIZE 16384

typedef struct yy_buffer_state *YY_BUFFER_STATE;

extern int yyleng;
extern FILE *yyin, *yyout;

#define EOB_ACT_CONTINUE_SCAN 0
#define EOB_ACT_END_OF_FILE 1
#define EOB_ACT_LAST_MATCH 2

/* The funky do-while in the following #define is used to turn the definition
 * int a single C statement (which needs a semi-colon terminator).  This
 * avoids problems with code like:
 *
 * 	if ( condition_holds )
 *		yyless( 5 );
 *	else
 *		do_something_else();
 *
 * Prior to using the do-while the compiler would get upset at the
 * "else" because it interpreted the "if" statement as being all
 * done when it reached the ';' after the yyless() call.
 */

/* Return all but the first 'n' matched characters back to the input stream. */

#define yyless(n) \
	do \
		{ \
		/* Undo effects of setting up yytext. */ \
		*yy_cp = yy_hold_char; \
		YY_RESTORE_YY_MORE_OFFSET \
		yy_c_buf_p = yy_cp = yy_bp + n - YY_MORE_ADJ; \
		YY_DO_BEFORE_ACTION; /* set up yytext again */ \
		} \
	while ( 0 )

#define unput(c) yyunput( c, yytext_ptr )

/* The following is because we cannot portably get our hands on size_t
 * (without autoconf's help, which isn't available because we want
 * flex-generated scanners to compile on their own).
 */
typedef unsigned int yy_size_t;


struct yy_buffer_state
	{
	FILE *yy_input_file;

	char *yy_ch_buf;		/* input buffer */
	char *yy_buf_pos;		/* current position in input buffer */

	/* Size of input buffer in bytes, not including room for EOB
	 * characters.
	 */
	yy_size_t yy_buf_size;

	/* Number of characters read into yy_ch_buf, not including EOB
	 * characters.
	 */
	int yy_n_chars;

	/* Whether we "own" the buffer - i.e., we know we created it,
	 * and can realloc() it to grow it, and should free() it to
	 * delete it.
	 */
	int yy_is_our_buffer;

	/* Whether this is an "interactive" input source; if so, and
	 * if we're using stdio for input, then we want to use getc()
	 * instead of fread(), to make sure we stop fetching input after
	 * each newline.
	 */
	int yy_is_interactive;

	/* Whether we're considered to be at the beginning of a line.
	 * If so, '^' rules will be active on the next match, otherwise
	 * not.
	 */
	int yy_at_bol;

	/* Whether to try to fill the input buffer when we reach the
	 * end of it.
	 */
	int yy_fill_buffer;

	int yy_buffer_status;
#define YY_BUFFER_NEW 0
#define YY_BUFFER_NORMAL 1
	/* When an EOF's been seen but there's still some text to process
	 * then we mark the buffer as YY_EOF_PENDING, to indicate that we
	 * shouldn't try reading from the input source any more.  We might
	 * still have a bunch of tokens to match, though, because of
	 * possible backing-up.
	 *
	 * When we actually see the EOF, we change the status to "new"
	 * (via yyrestart()), so that the user can continue scanning by
	 * just pointing yyin at a new input file.
	 */
#define YY_BUFFER_EOF_PENDING 2
	};

static YY_BUFFER_STATE yy_current_buffer = 0;

/* We provide macros for accessing buffer states in case in the
 * future we want to put the buffer states in a more general
 * "scanner state".
 */
#define YY_CURRENT_BUFFER yy_current_buffer


/* yy_hold_char holds the character lost when yytext is formed. */
static char yy_hold_char;

static int yy_n_chars;		/* number of characters read into yy_ch_buf */


int yyleng;

/* Points to current character in buffer. */
static char *yy_c_buf_p = (char *) 0;
static int yy_init = 1;		/* whether we need to initialize */
static int yy_start = 0;	/* start state number */

/* Flag which is used to allow yywrap()'s to do buffer switches
 * instead of setting up a fresh yyin.  A bit of a hack ...
 */
static int yy_did_buffer_switch_on_eof;

void yyrestart YY_PROTO(( FILE *input_file ));

void yy_switch_to_buffer YY_PROTO(( YY_BUFFER_STATE new_buffer ));
void yy_load_buffer_state YY_PROTO(( void ));
YY_BUFFER_STATE yy_create_buffer YY_PROTO(( FILE *file, int size ));
void yy_delete_buffer YY_PROTO(( YY_BUFFER_STATE b ));
void yy_init_buffer YY_PROTO(( YY_BUFFER_STATE b, FILE *file ));
void yy_flush_buffer YY_PROTO(( YY_BUFFER_STATE b ));
#define YY_FLUSH_BUFFER yy_flush_buffer( yy_current_buffer )

YY_BUFFER_STATE yy_scan_buffer YY_PROTO(( char *base, yy_size_t size ));
YY_BUFFER_STATE yy_scan_string YY_PROTO(( yyconst char *yy_str ));
YY_BUFFER_STATE yy_scan_bytes YY_PROTO(( yyconst char *bytes, int len ));

static void *yy_flex_alloc YY_PROTO(( yy_size_t ));
static void *yy_flex_realloc YY_PROTO(( void *, yy_size_t ));
static void yy_flex_free YY_PROTO(( void * ));

#define yy_new_buffer yy_create_buffer

#define yy_set_interactive(is_interactive) \
	{ \
	if ( ! yy_current_buffer ) \
		yy_current_buffer = yy_create_buffer( yyin, YY_BUF_SIZE ); \
	yy_current_buffer->yy_is_interactive = is_interactive; \
	}

#define yy_set_bol(at_bol) \
	{ \
	if ( ! yy_current_buffer ) \
		yy_current_buffer = yy_create_buffer( yyin, YY_BUF_SIZE ); \
	yy_current_buffer->yy_at_bol = at_bol; \
	}

#define YY_AT_BOL() (yy_current_buffer->yy_at_bol)


#define YY_USES_REJECT

#define yywrap() 1
#define YY_SKIP_YYWRAP
typedef unsigned char YY_CHAR;
FILE *yyin = (FILE *) 0, *yyout = (FILE *) 0;
typedef int yy_state_type;
extern int yylineno;
int yylineno = 1;
extern char *yytext;
#define yytext_ptr yytext

static yy_state_type yy_get_previous_state YY_PROTO(( void ));
static yy_state_type yy_try_NUL_trans YY_PROTO(( yy_state_type current_state ));
static int yy_get_next_buffer YY_PROTO(( void ));
static void yy_fatal_error YY_PROTO(( yyconst char msg[] ));

/* Done after the current pattern has been matched and before the
 * corresponding action - sets up yytext.
 */
#define YY_DO_BEFORE_ACTION \
	yytext_ptr = yy_bp; \
	yyleng = (int) (yy_cp - yy_bp); \
	yy_hold_char = *yy_cp; \
	*yy_cp = '\0'; \
	yy_c_buf_p = yy_cp;

#define YY_NUM_RULES 49
#define YY_END_OF_BUFFER 50
static yyconst short int yy_acclist[373] =
    {   0,
       50,   48,   49,   47,   48,   49,   47,   49,   40,   48,
       49,   41,   48,   49,   31,   48,   49,   32,   48,   49,
       38,   45,   48,   49,   36,   48,   49,   43,   48,   49,
       37,   48,   49,   45,   48,   49,   39,   48,   49,   44,
       45,   48,   49,   44,   45,   48,   49,   33,   48,   49,
       34,   48,   49,   35,   48,   49,   45,   48,   49,   45,
       48,   49,   45,   48,   49,   45,   48,   49,   45,   48,
       49,   45,   48,   49,   45,   48,   49,   45,   48,   49,
       45,   48,   49,   45,   48,   49,   48,   49,   48,   49,
       45,   48,   49,   45,   48,   49,   29,   48,   49,   42,

       48,   49,   30,   48,   49,   48,   49,    9,   49,    9,
       49,   47,   45,   46,   45,   46,   10,   46,   44,   45,
       46,   44,   45,   46,   44,   45,   46,   45,   46,   44,
       45,   46,   45,   46,   45,   46,   45,   46,   45,   46,
       45,   46,   45,   46,   45,   46,   45,   46,   45,   46,
       45,   46,   45,   46,   45,   46,   45,   46,   28,   45,
       46,   45,   46,   44,   45,   46,   45,   46,   45,   46,
       45,   46,   45,   46,   45,   46,   45,   46,   45,   46,
       45,   46,   45,   46,   45,   46,   45,   46,   45,   46,
       45,   46,   45,   46,   45,   46,   45,   46,   45,   46,

       44,   45,   46,   45,   46,   45,   46,   45,   46,   45,
       46,   45,   46,   45,   46,   18,   45,   46,   45,   46,
       45,   46,   45,   46,   45,   46,   45,   46,   45,   46,
       26,   45,   46,   45,   46,   45,   46,   45,   46,   11,
       45,   46,   12,   45,   46,   45,   46,   15,   45,   46,
       16,   45,   46,   45,   46,   45,   46,   45,   46,   45,
       46,   45,   46,   45,   46,   45,   46,   45,   46,   45,
       46,   45,   46,   45,   46,   17,   45,   46,   45,   46,
       45,   46,   45,   46,   45,   46,   45,   46,   45,   46,
       45,   46,   45,   46,   19,    2,    6,   45,   46,   45,

       46,   45,   46,   22,   45,   46,   45,   46,   24,   45,
       46,   45,   46,   27,   45,   46,   14,    4,    1,    8,
        5,   45,   46,   45,   46,   21,   45,   46,   45,   46,
       45,   46,   45,   46,   45,   46,   45,   46,   45,   46,
        3,    7,   45,   46,   45,   46,   23,   45,   46,   45,
       46,   45,   46,   45,   46,   45,   46,   13,   45,   46,
       45,   46,   45,   46,   20,   45,   46,   45,   46,   25,
       45,   46
    } ;

static yyconst short int yy_accept[212] =
    {   0,
        1,    1,    1,    1,    1,    2,    4,    7,    9,   12,
       15,   18,   21,   25,   28,   31,   34,   37,   40,   44,
       48,   51,   54,   57,   60,   63,   66,   69,   72,   75,
       78,   81,   84,   87,   89,   91,   94,   97,  100,  103,
      106,  108,  110,  112,  113,  114,  115,  117,  119,  122,
      125,  128,  130,  133,  135,  137,  139,  141,  143,  145,
      147,  149,  151,  153,  155,  157,  159,  159,  160,  162,
      164,  164,  164,  164,  164,  167,  169,  171,  173,  175,
      177,  179,  181,  183,  185,  187,  189,  191,  193,  195,
      197,  197,  199,  201,  201,  201,  201,  201,  201,  201,

      204,  206,  208,  210,  212,  214,  216,  219,  221,  223,
      225,  227,  229,  231,  234,  236,  236,  238,  240,  240,
      240,  240,  240,  240,  240,  240,  240,  243,  246,  248,
      251,  254,  256,  258,  260,  262,  264,  266,  268,  270,
      272,  274,  274,  274,  274,  274,  274,  274,  274,  274,
      276,  279,  281,  283,  285,  287,  289,  291,  293,  295,
      296,  296,  297,  297,  297,  297,  298,  298,  298,  300,
      302,  304,  307,  309,  312,  314,  317,  318,  318,  319,
      320,  320,  321,  322,  324,  326,  329,  331,  333,  333,
      333,  335,  337,  339,  341,  342,  343,  345,  347,  350,

      352,  354,  356,  358,  361,  363,  365,  368,  370,  373,
      373
    } ;

static yyconst int yy_ec[256] =
    {   0,
        1,    1,    1,    1,    1,    1,    1,    1,    2,    3,
        2,    2,    2,    1,    1,    1,    1,    1,    1,    1,
        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
        1,    2,    1,    1,    4,    1,    5,    6,    1,    7,
        8,    9,   10,   11,   12,   13,   14,   15,   16,   16,
       16,   16,   16,   16,   16,   17,   17,   18,   19,    1,
       20,    1,   21,    1,   22,   23,   24,   25,   26,   27,
       28,   29,   30,   13,   31,   32,   33,   34,   35,   36,
       13,   37,   38,   39,   40,   41,   42,   43,   44,   45,
       46,   47,   48,    1,   49,    1,   50,   51,   52,   53,

       54,   55,   56,   13,   57,   13,   58,   59,   58,   60,
       61,   13,   13,   13,   62,   13,   13,   13,   13,   63,
       13,   13,   64,   65,   66,   47,    1,    1,    1,    1,
        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,

        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
        1,    1,    1,    1,    1
    } ;

static yyconst int yy_meta[67] =
    {   0,
        1,    2,    2,    1,    1,    1,    2,    2,    3,    1,
        1,    1,    3,    1,    3,    3,    3,    2,    2,    1,
        3,    3,    3,    3,    3,    3,    3,    3,    3,    3,
        3,    3,    3,    3,    3,    3,    3,    3,    3,    3,
        3,    3,    3,    3,    3,    2,    1,    2,    3,    3,
        3,    3,    3,    3,    3,    3,    3,    3,    3,    3,
        3,    3,    3,    2,    1,    2
    } ;

static yyconst short int yy_base[215] =
    {   0,
        0,  218,    0,  216,  219, 2141,   65,   67, 2141, 2141,
     2141, 2141,    0, 2141, 2141, 2141,   70,  208,  135,   62,
     2141, 2141, 2141,    0,   70,  127,  158,  171,  192,  211,
      260,  309,  215,   46,    0,  269,  273, 2141, 2141, 2141,
       42, 2141,   43,   70,    0,    0,  330,    0,   48,  322,
      333,  382,  385,  434,  437,  458,  471,  520,  507,  529,
      558,  564,  613,  609,  616,  647,   67, 2141,  666,  670,
       47,  160,   59,  158,   90,  703,  722,  725,  756,  760,
      789,  793,  822,  828,  851,  862,  873,  886,  907,  926,
       89,  945,  964,   65,  159,  158,   67,  157,  153,  985,

     1004, 1008, 1039, 1042, 1073, 1076, 1107, 1111, 1130, 1161,
     1165, 1169, 1198, 1205, 1227,  155, 1234, 1256,  144,  143,
      139,  140,  137,  127,  112,  113, 1263, 1285, 1292, 1296,
     1325, 1329, 1336, 1365, 1386, 1389, 1420, 1441, 1444, 1465,
     1494,  106,  151,   83,   79,   77,  154,   61,   59, 1500,
     1503, 1534, 1553, 1556, 1587, 1590, 1609, 1640, 1644, 2141,
       58, 2141,  160,  162,   54, 2141,  169,  174, 1648, 1677,
     1698, 1701, 1722, 1735, 1757, 1766, 2141,   43, 2141, 2141,
       37, 2141, 2141, 1779, 1788, 1801, 1810, 1832,  177,  181,
     1839, 1861, 1868, 1892, 2141, 2141, 1901, 1905, 1936, 1945,

     1958, 1980, 1989, 2002, 2011, 2024, 2047, 2055, 2068, 2141,
     2131,   76, 2134, 2137
    } ;

static yyconst short int yy_def[215] =
    {   0,
      210,    1,  211,  211,  210,  210,  210,  210,  210,  210,
      210,  210,  212,  210,  210,  210,  213,  214,  213,   19,
      210,  210,  210,  212,   19,   19,   19,   19,   19,   19,
       19,   19,   19,  210,  214,   19,   19,  210,  210,  210,
      210,  210,  210,  210,  212,  214,   19,  214,   19,   19,
       19,   19,   19,   19,   19,   19,   19,   19,   19,   19,
       19,   19,   19,   19,   19,   19,  210,  210,   19,   19,
      210,  210,  210,  210,   52,   19,   19,   19,   19,   19,
       19,   19,   19,   19,   19,   19,   19,   19,   19,   19,
      210,   19,   19,  210,  210,  210,  210,  210,  210,   19,

       19,   19,   19,   19,   19,   19,   19,   19,   19,   19,
       19,   19,   19,   19,   19,  210,   19,   19,  210,  210,
      210,  210,  210,  210,  210,  210,   19,   19,   19,   19,
       19,   19,   19,   19,   19,   19,   19,   19,   19,   19,
       19,  210,  210,  210,  210,  210,  210,  210,  210,   19,
       19,   19,   19,   19,   19,   19,   19,   19,   19,  210,
      210,  210,  210,  210,  210,  210,  210,  210,   19,   19,
       19,   19,   19,   19,   19,   19,  210,  210,  210,  210,
      210,  210,  210,   19,   19,   19,   19,   19,  210,  210,
       19,   19,   19,   19,  210,  210,   19,   19,   19,   19,

       19,   19,   19,   19,   19,   19,   19,   19,   19,    0,
      210,  210,  210,  210
    } ;

static yyconst short int yy_nxt[2208] =
    {   0,
        6,    7,    8,    6,    9,   10,   11,   12,   13,   14,
       15,   16,   17,   18,   19,   20,   20,   21,   22,   23,
       24,   25,   17,   17,   17,   26,   17,   27,   17,   28,
       29,   17,   17,   17,   30,   31,   17,   32,   17,   17,
       33,   17,   17,   17,   17,   34,   35,    6,   17,   17,
       17,   17,   17,   17,   17,   36,   17,   17,   37,   17,
       17,   17,   17,   38,   39,   40,   44,   44,   44,   44,
       46,   44,   44,   46,   46,   46,   50,   50,   45,   46,
       46,   46,   67,   46,   47,   47,   47,   67,   67,   46,
       47,  190,   53,   68,   53,   71,   73,  189,   72,   74,

       47,   54,   47,   91,   47,   94,   95,  181,   91,   91,
       47,  178,   47,  168,   68,  167,   46,   97,   98,   53,
      100,  119,  100,  123,   47,  116,  120,   47,  124,  165,
      116,  116,   47,  164,   46,   46,   68,  163,   46,   46,
       46,   47,   47,   47,   46,   46,   46,  100,   46,   49,
       49,   50,  162,  162,   46,  166,  166,   47,  161,   47,
       55,  179,  179,  180,  180,   51,  149,   51,  148,   56,
      182,  182,   47,   47,   47,  183,  183,   52,  195,  195,
      147,   46,  196,  196,   47,   47,   47,   47,   47,   47,
       47,  146,   51,  145,   57,  144,  143,   52,  142,   46,

       47,   47,   68,   47,   58,  126,   47,   47,   47,  125,
      122,  121,   99,   47,   96,   47,   48,   59,  210,   43,
       47,   41,   47,  210,   47,   47,   47,   47,   47,   47,
       47,   47,  210,   47,   47,  210,  210,  210,  210,  210,
       66,   47,  210,   47,  210,   47,  210,   47,  210,   47,
       60,  210,  210,   47,   47,  210,  210,   47,  210,  210,
      210,  210,  210,  210,  210,  210,  210,  210,   47,  210,
      210,  210,   47,   47,   47,   47,   47,   47,  210,  210,
      210,   61,  210,   47,   47,   47,  210,   47,   47,   47,
       47,  210,   47,  210,  210,  210,   62,  210,  210,   47,

      210,   47,   47,   47,  210,   47,  210,  210,  210,  210,
      210,   47,  210,  210,  210,   47,  210,   47,  210,  210,
      210,  210,   47,   47,   47,   47,   47,   69,  210,  210,
       47,   47,  210,   70,   63,   47,   50,   50,   64,   47,
      210,   47,  210,   65,   47,   47,   47,   47,   47,   47,
      210,   47,   53,  210,   53,  210,  210,  210,  210,  210,
       47,  210,   47,   47,   47,   47,   47,  210,  210,  210,
      210,   47,   47,  210,  210,   47,  210,  210,  210,   53,
      210,  210,  210,  210,   47,  210,  210,   47,  210,  210,
       47,  210,   47,  210,  210,   47,   75,   75,   75,   47,

       47,   47,  210,   75,   75,   75,   75,   75,   75,  210,
      210,  210,   47,  210,   47,   47,  210,   47,  210,  210,
      210,  210,  210,  210,   47,  210,  210,   47,  210,  210,
      210,   75,   75,   75,   75,   75,   75,  210,  210,   47,
      210,  210,   47,  210,   47,  210,  210,   47,   47,   47,
       47,   47,   47,   47,  210,  210,  210,  210,  210,  210,
      210,  210,  210,   76,   47,  210,   47,   47,  210,   47,
      210,  210,   47,   47,   47,   77,   47,  210,  210,   47,
      210,   78,  210,  210,  210,   47,   47,   47,   47,  210,
       47,   47,  210,  210,   47,  210,   47,  210,  210,   47,

       47,   47,  210,   47,  210,   79,  210,  210,  210,  210,
      210,  210,  210,   47,  210,   47,  210,  210,  210,  210,
       47,   47,   47,   47,  210,  210,  210,  210,   47,  210,
      210,  210,   82,   47,   47,   47,   47,   47,  210,   47,
      210,  210,  210,   47,   47,   47,  210,  210,  210,   47,
       47,  210,   47,  210,  210,   80,  210,  210,   81,   47,
      210,   47,   47,  210,   47,  210,  210,   83,  210,   47,
      210,   47,   47,   47,   47,  210,  210,   47,   47,   47,
       47,  210,   47,  210,  210,   84,   47,  210,   47,  210,
       47,   47,  210,  210,   47,  210,   47,  210,   85,  210,

       47,  210,  210,  210,  210,  210,   47,  210,  210,  210,
      210,  210,  210,  210,  210,   47,  210,  210,  210,  210,
       47,   47,  210,   47,   47,   47,   47,   47,   47,   47,
       47,   47,   47,  210,   86,  210,  210,  210,  210,   47,
       87,   47,  210,   47,  210,   47,   47,  210,   47,  210,
      210,   47,   89,   88,  210,   47,  210,  210,   47,  210,
      210,   47,   47,   47,  210,  210,   47,  210,  210,  210,
       47,   47,  210,   47,  210,   47,  210,   47,   47,   47,
       47,   47,   47,   90,   47,   47,   47,  210,  210,   47,
      210,  210,  210,  210,  210,  210,   47,  210,   47,  210,

       47,  210,   47,  210,   47,  210,  210,  210,   47,   47,
      210,  210,   47,  210,  210,  210,  210,   47,   47,   47,
      210,   93,  210,   47,  210,  210,   92,   47,   47,  210,
      101,  210,   47,   47,  210,   47,   47,   47,   47,   47,
       47,   47,  210,  210,  210,   47,  210,  210,  210,  210,
      210,  210,   47,  210,   47,   47,  103,   47,  102,  210,
       47,  210,  210,  210,   47,   47,  210,   47,  210,  210,
       47,   47,   47,  210,   47,   47,   47,  210,  210,   47,
      210,  210,   47,  210,   47,  210,   47,   47,   47,  210,
       47,  210,   47,  210,  210,  104,  210,  210,   47,  105,

      210,  210,   47,   47,   47,   47,  210,   47,   47,   47,
      210,  210,  210,   47,  106,  210,  210,   47,   47,   47,
      210,   47,   47,   47,  210,   47,  210,  210,  107,  210,
      210,   47,  210,  210,  210,   47,   47,   47,   47,  210,
      210,  210,   47,   47,   47,  210,   47,  210,  210,  210,
       47,   47,   47,  109,   47,   47,  210,  108,   47,  210,
       47,  210,  210,  210,   47,   47,   47,   47,  210,  210,
       47,  210,  210,  210,  210,  210,   47,   47,   47,   47,
      210,   47,  210,   47,   47,   47,  210,   47,   47,   47,
       47,  110,   47,   47,   47,  210,  210,  210,  111,  210,

       47,   47,   47,   47,   47,  112,  210,  210,   47,  210,
      210,  113,  210,   47,  210,   47,   47,  210,   47,   47,
      210,   47,   47,   47,   47,  210,  210,  210,   47,  210,
       47,  210,  210,  210,  210,   47,  210,   47,  210,   47,
       47,   47,   47,   47,  210,  114,  210,  210,   47,   47,
      210,  210,  210,  210,  210,  210,   47,  210,   47,   47,
       47,   47,  210,  115,   47,  210,  210,  210,   47,   47,
      210,  210,  210,  210,  210,   47,  210,   47,   47,   47,
       47,  210,  210,   47,  210,  210,  210,   47,   47,  210,
      210,  210,  210,  210,   47,  117,   47,  210,  210,   47,

       47,   47,   47,  210,  210,  210,   47,   47,  210,  210,
      210,  210,  210,  118,  210,   47,  210,   47,   47,   47,
       47,   47,   47,   47,   47,  210,   47,   47,  210,  210,
      210,  210,  210,  210,   47,  210,   47,  127,   47,  210,
       47,  210,   47,  210,  210,  210,   47,   47,  210,  210,
       47,  128,  210,   47,   47,   47,   47,   47,   47,  210,
      210,   47,  210,  210,  210,   47,   47,  210,  210,   47,
       47,   47,   47,  210,   47,  210,  210,  130,  129,  210,
      210,   47,  210,  210,   47,  210,  210,   47,   47,   47,
       47,   47,   47,  210,  210,  210,   47,  210,  210,   47,

      210,   47,  210,   47,   47,   47,   47,  210,   47,  210,
      210,  131,  132,  210,  210,   47,  210,  210,   47,  210,
      210,   47,   47,   47,  210,   47,   47,   47,  210,  210,
       47,  210,  210,   47,  210,   47,  210,   47,   47,   47,
      210,   47,  210,   47,   47,   47,   47,  210,  210,   47,
      133,  210,  210,   47,  210,  210,  210,  210,  210,  210,
       47,  210,   47,  210,   47,  210,  210,  134,   47,   47,
      210,  210,   47,   47,  210,   47,   47,   47,  210,   47,
       47,   47,  210,   47,   47,   47,  210,   47,  136,  210,
      135,   47,   47,   47,  137,   47,  210,   47,  210,   47,

      210,   47,  210,   47,  210,  210,  210,   47,  210,  210,
      210,   47,   47,   47,   47,  210,  210,  210,   47,   47,
       47,   47,   47,   47,  210,  210,   47,   47,   47,  210,
       47,   47,  138,  210,  210,   47,  210,   47,  210,  210,
       47,   47,   47,   47,  210,  210,  210,   47,   47,   47,
       47,  210,  210,  210,  210,   47,  139,   47,  210,   47,
       47,  210,   47,  210,   47,  210,   47,   47,  210,   47,
       47,   47,   47,  210,  210,  210,   47,   47,   47,   47,
      210,  210,  210,  140,   47,  210,   47,  210,   47,   47,
      210,   47,  210,   47,  210,   47,   47,  210,   47,   47,

       47,   47,  210,  210,  210,   47,   47,   47,   47,  210,
       47,   47,   47,   47,  141,   47,  150,   47,   47,  210,
       47,  210,   47,  210,   47,   47,   47,   47,   47,  210,
      210,  210,  210,  210,   47,  210,  210,  210,   47,   47,
       47,   47,   47,   47,   47,   47,  210,   47,  210,   47,
       47,   47,   47,   47,   47,   47,  210,   47,   47,   47,
      210,   47,  210,  210,  151,  210,   47,   47,   47,  210,
      210,   47,  210,  210,  152,  210,  210,  210,   47,   47,
       47,   47,   47,  210,  210,  210,   47,   47,  210,  210,
      210,   47,  210,   47,  153,   47,  210,   47,   47,  210,

       47,   47,   47,   47,   47,   47,  210,   47,  210,  210,
      154,  210,  210,  210,  210,  210,   47,  155,   47,   47,
      210,   47,   47,  210,  210,  210,  210,   47,   47,  210,
      210,   47,  210,  210,   47,   47,   47,  210,  210,  210,
      210,  210,  210,   47,  210,  210,   47,  210,   47,  210,
       47,   47,   47,  156,  210,   47,   47,   47,   47,   47,
       47,  210,   47,  210,  210,  210,  210,  157,  210,  210,
      210,   47,  210,   47,   47,  210,   47,   47,  158,   47,
       47,   47,   47,   47,  210,  210,   47,  210,  210,  210,
      210,  210,  210,  210,  210,   47,  210,   47,   47,  210,

      210,   47,  210,   47,  210,  210,   47,   47,   47,   47,
       47,  160,  210,  210,   47,   47,   47,   47,   47,   47,
      210,  210,   47,  159,   47,  169,   47,   47,  210,  210,
       47,  210,   47,   47,  210,   47,   47,  210,  210,  210,
      210,  210,   47,  210,  210,   47,  210,  210,   47,   47,
       47,   47,  210,  210,  210,  210,   47,   47,  210,  210,
       47,  210,   47,  210,   47,   47,   47,   47,   47,   47,
       47,   47,   47,  210,  210,  210,   47,  210,  210,  210,
      210,  172,  170,   47,  210,   47,   47,  210,   47,  210,
      210,   47,  210,  210,  210,   47,   47,  171,   47,  210,

      210,   47,   47,   47,   47,   47,   47,  210,  210,  210,
       47,  210,  210,   47,  210,   47,  210,   47,   47,   47,
       47,  210,   47,   47,   47,   47,  210,  210,  174,   47,
      210,  210,   47,  210,  210,  173,  210,  210,  210,   47,
      210,   47,  210,  210,   47,  210,  210,   47,  210,   47,
      210,   47,   47,  210,   47,   47,   47,  175,   47,   47,
       47,  177,   47,   47,   47,  210,   47,  210,  210,  210,
       47,   47,   47,  176,   47,  210,   47,  210,   47,  210,
       47,  210,   47,  210,  210,  210,   47,  210,  210,  210,
       47,   47,   47,   47,  210,  210,  184,   47,  210,  210,

      210,   47,   47,  185,  210,   47,   47,   47,  210,   47,
       47,  210,   47,   47,   47,   47,   47,   47,  210,   47,
      210,  210,  210,  186,  210,  210,  210,  210,   47,  210,
       47,   47,  210,   47,   47,  210,   47,   47,   47,   47,
       47,  210,  210,   47,  210,  210,  187,  210,  210,   47,
       47,   47,   47,  210,   47,   47,  210,  210,   47,  210,
       47,  210,  210,   47,   47,   47,  210,   47,  210,  210,
      210,   47,   47,   47,  210,  210,  210,   47,  210,   47,
       47,   47,   47,  210,   47,  188,  210,   47,  210,   47,
      210,  210,   47,   47,   47,   47,   47,   47,   47,   47,

      210,  210,   47,   47,   47,  191,  210,  210,   47,   47,
      210,   47,  210,  210,   47,   47,   47,   47,   47,   47,
       47,   47,  192,   47,   47,   47,   47,  210,   47,  210,
       47,   47,  210,   47,  210,  210,   47,  210,  210,  193,
       47,   47,   47,   47,  210,   47,   47,   47,   47,  210,
       47,  210,   47,   47,   47,   47,  210,  194,   47,  210,
      210,  210,   47,   47,   47,  210,  210,   47,  197,   47,
      210,   47,   47,  210,   47,   47,   47,   47,  210,  210,
      210,   47,   47,   47,   47,  210,  210,  210,  210,   47,
      210,   47,  210,   47,   47,  210,   47,  198,   47,  210,

       47,   47,  210,   47,  199,  210,   47,   47,   47,  210,
       47,  210,  210,  200,  210,   47,   47,   47,   47,   47,
       47,   47,   47,   47,   47,   47,  210,  210,  210,  210,
       47,   47,  201,   47,   47,   47,  210,  202,  210,  210,
      210,  210,  210,   47,  210,  210,  210,   47,  210,   47,
       47,   47,   47,  210,   47,  210,  210,  210,   47,   47,
       47,   47,   47,   47,  210,  210,   47,   47,   47,  203,
      210,  210,   47,   47,   47,   47,  210,   47,   47,  210,
      210,  210,  210,  204,  210,  210,  210,   47,   47,  210,
       47,  210,  210,   47,   47,   47,   47,  210,   47,  210,

       47,  205,   47,   47,   47,   47,  210,   47,  210,  210,
       47,  210,   47,  210,  206,   47,   47,   47,   47,   47,
       47,   47,   47,  210,  210,   47,   47,   47,  210,  210,
      210,   47,   47,  210,   47,  210,  210,   47,   47,   47,
       47,   47,   47,   47,   47,  210,   47,  210,  210,  207,
      210,   47,  210,   47,   47,  210,   47,  210,  210,   47,
      208,   47,   47,   47,   47,  210,   47,  210,   47,   47,
       47,   47,  210,   47,  210,  210,  210,   47,  210,   47,
      210,   47,   47,   47,   47,   47,   47,   47,  210,   47,
      210,  210,  209,  210,  210,  210,  210,   47,   47,  210,

       47,  210,  210,  210,   47,  210,  210,  210,  210,   47,
       47,  210,   47,  210,  210,  210,  210,   47,  210,  210,
      210,  210,  210,  210,  210,   47,  210,  210,  210,  210,
       47,   42,   42,   42,   47,  210,   47,   46,  210,   46,
        5,  210,  210,  210,  210,  210,  210,  210,  210,  210,
      210,  210,  210,  210,  210,  210,  210,  210,  210,  210,
      210,  210,  210,  210,  210,  210,  210,  210,  210,  210,
      210,  210,  210,  210,  210,  210,  210,  210,  210,  210,
      210,  210,  210,  210,  210,  210,  210,  210,  210,  210,
      210,  210,  210,  210,  210,  210,  210,  210,  210,  210,

      210,  210,  210,  210,  210,  210,  210
    } ;

static yyconst short int yy_chk[2208] =
    {   0,
        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
        1,    1,    1,    1,    1,    1,    7,    7,    8,    8,
       17,   44,   44,   17,   17,   17,   20,   20,  212,   17,
       17,   17,   34,   17,   25,   25,   25,   34,   34,   17,
       49,  181,   20,   34,   20,   41,   43,  178,   41,   43,

       25,   25,   25,   67,   20,   71,   71,  165,   67,   67,
       49,  161,   25,  149,   67,  148,   17,   73,   73,   20,
       75,   94,   75,   97,   20,   91,   94,   25,   97,  146,
       91,   91,   25,  145,   17,   19,   91,  144,   19,   19,
       19,   26,   26,   26,   19,   19,   19,   75,   19,   19,
       19,   19,  143,  143,   19,  147,  147,   26,  142,   26,
       26,  163,  163,  164,  164,   19,  126,   19,  125,   26,
      167,  167,   27,   27,   27,  168,  168,   19,  189,  189,
      124,   19,  190,  190,   26,   28,   28,   28,   27,   26,
       27,  123,   19,  122,   27,  121,  120,   19,  119,   19,

       27,   28,  116,   28,   28,   99,   29,   29,   29,   98,
       96,   95,   74,   28,   72,   27,   18,   29,    5,    4,
       27,    2,   29,    0,   29,   30,   30,   30,   28,   33,
       33,   33,    0,   28,   29,    0,    0,    0,    0,    0,
       33,   30,    0,   30,    0,   33,    0,   33,    0,   29,
       30,    0,    0,   30,   29,    0,    0,   33,    0,    0,
        0,    0,    0,    0,    0,    0,    0,    0,   30,    0,
        0,    0,   33,   30,   31,   31,   31,   33,    0,    0,
        0,   31,    0,   36,   36,   36,    0,   37,   37,   37,
       31,    0,   31,    0,    0,    0,   31,    0,    0,   36,

        0,   36,   31,   37,    0,   37,    0,    0,    0,    0,
        0,   36,    0,    0,    0,   37,    0,   31,    0,    0,
        0,    0,   31,   32,   32,   32,   36,   36,    0,    0,
       37,   36,    0,   37,   32,   37,   50,   50,   32,   32,
        0,   32,    0,   32,   47,   47,   47,   51,   51,   51,
        0,   32,   50,    0,   50,    0,    0,    0,    0,    0,
       47,    0,   47,   51,   50,   51,   32,    0,    0,    0,
        0,   32,   47,    0,    0,   51,    0,    0,    0,   50,
        0,    0,    0,    0,   50,    0,    0,   47,    0,    0,
       51,    0,   47,    0,    0,   51,   52,   52,   52,   53,

       53,   53,    0,   52,   52,   52,   52,   52,   52,    0,
        0,    0,   52,    0,   52,   53,    0,   53,    0,    0,
        0,    0,    0,    0,   52,    0,    0,   53,    0,    0,
        0,   52,   52,   52,   52,   52,   52,    0,    0,   52,
        0,    0,   53,    0,   52,    0,    0,   53,   54,   54,
       54,   55,   55,   55,    0,    0,    0,    0,    0,    0,
        0,    0,    0,   54,   54,    0,   54,   55,    0,   55,
        0,    0,   56,   56,   56,   55,   54,    0,    0,   55,
        0,   56,    0,    0,    0,   57,   57,   57,   56,    0,
       56,   54,    0,    0,   55,    0,   54,    0,    0,   55,

       56,   57,    0,   57,    0,   57,    0,    0,    0,    0,
        0,    0,    0,   57,    0,   56,    0,    0,    0,    0,
       56,   59,   59,   59,    0,    0,    0,    0,   57,    0,
        0,    0,   59,   57,   58,   58,   58,   59,    0,   59,
        0,    0,    0,   60,   60,   60,    0,    0,    0,   59,
       58,    0,   58,    0,    0,   58,    0,    0,   58,   60,
        0,   60,   58,    0,   59,    0,    0,   60,    0,   59,
        0,   60,   61,   61,   61,    0,    0,   58,   62,   62,
       62,    0,   58,    0,    0,   61,   60,    0,   61,    0,
       61,   60,    0,    0,   62,    0,   62,    0,   62,    0,

       61,    0,    0,    0,    0,    0,   62,    0,    0,    0,
        0,    0,    0,    0,    0,   61,    0,    0,    0,    0,
       61,   62,    0,   64,   64,   64,   62,   63,   63,   63,
       65,   65,   65,    0,   63,    0,    0,    0,    0,   64,
       63,   64,    0,   63,    0,   63,   65,    0,   65,    0,
        0,   64,   65,   64,    0,   63,    0,    0,   65,    0,
        0,   66,   66,   66,    0,    0,   64,    0,    0,    0,
       63,   64,    0,   65,    0,   63,    0,   66,   65,   66,
       69,   69,   69,   66,   70,   70,   70,    0,    0,   66,
        0,    0,    0,    0,    0,    0,   69,    0,   69,    0,

       70,    0,   70,    0,   66,    0,    0,    0,   69,   66,
        0,    0,   70,    0,    0,    0,    0,   76,   76,   76,
        0,   70,    0,   69,    0,    0,   69,   70,   69,    0,
       76,    0,   70,   76,    0,   76,   77,   77,   77,   78,
       78,   78,    0,    0,    0,   76,    0,    0,    0,    0,
        0,    0,   77,    0,   77,   78,   78,   78,   77,    0,
       76,    0,    0,    0,   77,   76,    0,   78,    0,    0,
       79,   79,   79,    0,   80,   80,   80,    0,    0,   77,
        0,    0,   78,    0,   77,    0,   79,   78,   79,    0,
       80,    0,   80,    0,    0,   79,    0,    0,   79,   80,

        0,    0,   80,   81,   81,   81,    0,   82,   82,   82,
        0,    0,    0,   79,   81,    0,    0,   80,   79,   81,
        0,   81,   80,   82,    0,   82,    0,    0,   82,    0,
        0,   81,    0,    0,    0,   82,   83,   83,   83,    0,
        0,    0,   84,   84,   84,    0,   81,    0,    0,    0,
       82,   81,   83,   84,   83,   82,    0,   83,   84,    0,
       84,    0,    0,    0,   83,   85,   85,   85,    0,    0,
       84,    0,    0,    0,    0,    0,   86,   86,   86,   83,
        0,   85,    0,   85,   83,   84,    0,   87,   87,   87,
       84,   85,   86,   85,   86,    0,    0,    0,   86,    0,

       88,   88,   88,   87,   86,   87,    0,    0,   85,    0,
        0,   88,    0,   85,    0,   87,   88,    0,   88,   86,
        0,   89,   89,   89,   86,    0,    0,    0,   88,    0,
       87,    0,    0,    0,    0,   87,    0,   89,    0,   89,
       90,   90,   90,   88,    0,   89,    0,    0,   88,   89,
        0,    0,    0,    0,    0,    0,   90,    0,   90,   92,
       92,   92,    0,   90,   89,    0,    0,    0,   90,   89,
        0,    0,    0,    0,    0,   92,    0,   92,   93,   93,
       93,    0,    0,   90,    0,    0,    0,   92,   90,    0,
        0,    0,    0,    0,   93,   92,   93,    0,    0,  100,

      100,  100,   92,    0,    0,    0,   93,   92,    0,    0,
        0,    0,    0,   93,    0,  100,    0,  100,  101,  101,
      101,   93,  102,  102,  102,    0,   93,  100,    0,    0,
        0,    0,    0,    0,  101,    0,  101,  101,  102,    0,
      102,    0,  100,    0,    0,    0,  101,  100,    0,    0,
      102,  102,    0,  103,  103,  103,  104,  104,  104,    0,
        0,  101,    0,    0,    0,  102,  101,    0,    0,  103,
      102,  103,  104,    0,  104,    0,    0,  104,  103,    0,
        0,  103,    0,    0,  104,    0,    0,  105,  105,  105,
      106,  106,  106,    0,    0,    0,  103,    0,    0,  104,

        0,  103,    0,  105,  104,  105,  106,    0,  106,    0,
        0,  105,  106,    0,    0,  105,    0,    0,  106,    0,
        0,  107,  107,  107,    0,  108,  108,  108,    0,    0,
      105,    0,    0,  106,    0,  105,    0,  107,  106,  107,
        0,  108,    0,  108,  109,  109,  109,    0,    0,  107,
      108,    0,    0,  108,    0,    0,    0,    0,    0,    0,
      109,    0,  109,    0,  107,    0,    0,  109,  108,  107,
        0,    0,  109,  108,    0,  110,  110,  110,    0,  111,
      111,  111,    0,  112,  112,  112,    0,  109,  111,    0,
      110,  110,  109,  110,  112,  111,    0,  111,    0,  112,

        0,  112,    0,  110,    0,    0,    0,  111,    0,    0,
        0,  112,  113,  113,  113,    0,    0,    0,  110,  114,
      114,  114,  111,  110,    0,    0,  112,  111,  113,    0,
      113,  112,  113,    0,    0,  114,    0,  114,    0,    0,
      113,  115,  115,  115,    0,    0,    0,  114,  117,  117,
      117,    0,    0,    0,    0,  113,  115,  115,    0,  115,
      113,    0,  114,    0,  117,    0,  117,  114,    0,  115,
      118,  118,  118,    0,    0,    0,  117,  127,  127,  127,
        0,    0,    0,  117,  115,    0,  118,    0,  118,  115,
        0,  117,    0,  127,    0,  127,  117,    0,  118,  128,

      128,  128,    0,    0,    0,  127,  129,  129,  129,    0,
      130,  130,  130,  118,  118,  128,  129,  128,  118,    0,
      127,    0,  129,    0,  129,  127,  130,  128,  130,    0,
        0,    0,    0,    0,  129,    0,    0,    0,  130,  131,
      131,  131,  128,  132,  132,  132,    0,  128,    0,  129,
      133,  133,  133,  130,  129,  131,    0,  131,  130,  132,
        0,  132,    0,    0,  132,    0,  133,  131,  133,    0,
        0,  132,    0,    0,  133,    0,    0,    0,  133,  134,
      134,  134,  131,    0,    0,    0,  132,  131,    0,    0,
        0,  132,    0,  133,  134,  134,    0,  134,  133,    0,

      135,  135,  135,  136,  136,  136,    0,  134,    0,    0,
      135,    0,    0,    0,    0,    0,  135,  136,  135,  136,
        0,  136,  134,    0,    0,    0,    0,  134,  135,    0,
        0,  136,    0,    0,  137,  137,  137,    0,    0,    0,
        0,    0,    0,  135,    0,    0,  136,    0,  135,    0,
      137,  136,  137,  137,    0,  138,  138,  138,  139,  139,
      139,    0,  137,    0,    0,    0,    0,  138,    0,    0,
        0,  138,    0,  138,  139,    0,  139,  137,  139,  140,
      140,  140,  137,  138,    0,    0,  139,    0,    0,    0,
        0,    0,    0,    0,    0,  140,    0,  140,  138,    0,

        0,  139,    0,  138,    0,    0,  139,  140,  141,  141,
      141,  141,    0,    0,  150,  150,  150,  151,  151,  151,
        0,    0,  140,  140,  141,  150,  141,  140,    0,    0,
      150,    0,  150,  151,    0,  151,  141,    0,    0,    0,
        0,    0,  150,    0,    0,  151,    0,    0,  152,  152,
      152,  141,    0,    0,    0,    0,  141,  150,    0,    0,
      151,    0,  150,    0,  152,  151,  152,  153,  153,  153,
      154,  154,  154,    0,    0,    0,  152,    0,    0,    0,
        0,  154,  152,  153,    0,  153,  154,    0,  154,    0,
        0,  152,    0,    0,    0,  153,  152,  153,  154,    0,

        0,  155,  155,  155,  156,  156,  156,    0,    0,    0,
      153,    0,    0,  154,    0,  153,    0,  155,  154,  155,
      156,    0,  156,  157,  157,  157,    0,    0,  156,  155,
        0,    0,  156,    0,    0,  155,    0,    0,    0,  157,
        0,  157,    0,    0,  155,    0,    0,  156,    0,  155,
        0,  157,  156,    0,  158,  158,  158,  157,  159,  159,
      159,  159,  169,  169,  169,    0,  157,    0,    0,    0,
      158,  157,  158,  158,  159,    0,  159,    0,  169,    0,
      169,    0,  158,    0,    0,    0,  159,    0,    0,    0,
      169,  170,  170,  170,    0,    0,  169,  158,    0,    0,

        0,  159,  158,  170,    0,  169,  159,  170,    0,  170,
      169,    0,  171,  171,  171,  172,  172,  172,    0,  170,
        0,    0,    0,  171,    0,    0,    0,    0,  171,    0,
      171,  172,    0,  172,  170,    0,  173,  173,  173,  170,
      171,    0,    0,  172,    0,    0,  173,    0,    0,  174,
      174,  174,  173,    0,  173,  171,    0,    0,  172,    0,
      171,    0,    0,  172,  173,  174,    0,  174,    0,    0,
        0,  175,  175,  175,    0,    0,    0,  174,    0,  173,
      176,  176,  176,    0,  173,  175,    0,  175,    0,  175,
        0,    0,  174,  184,  184,  184,  176,  174,  176,  175,

        0,    0,  185,  185,  185,  184,    0,    0,  176,  184,
        0,  184,    0,    0,  175,  186,  186,  186,  185,  175,
      185,  184,  185,  176,  187,  187,  187,    0,  176,    0,
      185,  186,    0,  186,    0,    0,  184,    0,    0,  187,
      187,  184,  187,  186,    0,  185,  188,  188,  188,    0,
      185,    0,  187,  191,  191,  191,    0,  188,  186,    0,
        0,    0,  188,  186,  188,    0,    0,  187,  191,  191,
        0,  191,  187,    0,  188,  192,  192,  192,    0,    0,
        0,  191,  193,  193,  193,    0,    0,    0,    0,  188,
        0,  192,    0,  192,  188,    0,  191,  192,  193,    0,

      193,  191,    0,  192,  193,    0,  194,  194,  194,    0,
      193,    0,    0,  194,    0,  197,  197,  197,  192,  198,
      198,  198,  194,  192,  194,  193,    0,    0,    0,    0,
      193,  197,  197,  197,  194,  198,    0,  198,    0,    0,
        0,    0,    0,  197,    0,    0,    0,  198,    0,  194,
      199,  199,  199,    0,  194,    0,    0,    0,  197,  200,
      200,  200,  198,  197,    0,    0,  199,  198,  199,  200,
        0,    0,  201,  201,  201,  200,    0,  200,  199,    0,
        0,    0,    0,  201,    0,    0,    0,  200,  201,    0,
      201,    0,    0,  199,  202,  202,  202,    0,  199,    0,

      201,  202,  200,  203,  203,  203,    0,  200,    0,    0,
      202,    0,  202,    0,  203,  201,  204,  204,  204,  203,
      201,  203,  202,    0,    0,  205,  205,  205,    0,    0,
        0,  203,  204,    0,  204,    0,    0,  202,  206,  206,
      206,  205,  202,  205,  204,    0,  203,    0,    0,  205,
        0,  203,    0,  205,  206,    0,  206,    0,    0,  204,
      206,  207,  207,  207,  204,    0,  206,    0,  205,  208,
      208,  208,    0,  205,    0,    0,    0,  207,    0,  207,
        0,  206,  209,  209,  209,  208,  206,  208,    0,  207,
        0,    0,  208,    0,    0,    0,    0,  208,  209,    0,

      209,    0,    0,    0,  207,    0,    0,    0,    0,  207,
      209,    0,  208,    0,    0,    0,    0,  208,    0,    0,
        0,    0,    0,    0,    0,  209,    0,    0,    0,    0,
      209,  211,  211,  211,  213,    0,  213,  214,    0,  214,
      210,  210,  210,  210,  210,  210,  210,  210,  210,  210,
      210,  210,  210,  210,  210,  210,  210,  210,  210,  210,
      210,  210,  210,  210,  210,  210,  210,  210,  210,  210,
      210,  210,  210,  210,  210,  210,  210,  210,  210,  210,
      210,  210,  210,  210,  210,  210,  210,  210,  210,  210,
      210,  210,  210,  210,  210,  210,  210,  210,  210,  210,

      210,  210,  210,  210,  210,  210,  210
    } ;

static yy_state_type yy_state_buf[YY_BUF_SIZE + 2], *yy_state_ptr;
static char *yy_full_match;
static int yy_lp;
#define REJECT \
{ \
*yy_cp = yy_hold_char; /* undo effects of setting up yytext */ \
yy_cp = yy_full_match; /* restore poss. backed-over text */ \
++yy_lp; \
goto find_rule; \
}
#define yymore() yymore_used_but_not_detected
#define YY_MORE_ADJ 0
#define YY_RESTORE_YY_MORE_OFFSET
char *yytext;
#line 1 "/home/drepper/gnu/elfutils/src/ldlex.l"
#define INITIAL 0
#line 2 "/home/drepper/gnu/elfutils/src/ldlex.l"
/* Copyright (C) 2001, 2002, 2003, 2004 Red Hat, Inc.
   Written by Ulrich Drepper <drepper@redhat.com>, 2001.

   This program is Open Source software; you can redistribute it and/or
   modify it under the terms of the Open Software License version 1.0 as
   published by the Open Source Initiative.

   You should have received a copy of the Open Software License along
   with this program; if not, you may obtain a copy of the Open Software
   License version 1.0 from http://www.opensource.org/licenses/osl.php or
   by writing the Open Source Initiative c/o Lawrence Rosen, Esq.,
   3001 King Ranch Road, Ukiah, CA 95482.   */

#ifdef HAVE_CONFIG_H
# include <config.h>
#endif

#include <assert.h>
#include <ctype.h>
#include <elf.h>
#include <error.h>
#include <inttypes.h>
#include <libintl.h>
#include <stdbool.h>
#include <stdio.h>
#include <string.h>

#include <system.h>
#include <ld.h>
#include "ldscript.h"

/* We sure use no threads to read the stream, so use the _unlocked
   variants of the functions.  */
#undef getc
#define getc(s) getc_unlocked (s)
#undef ferror
#define ferror(s) ferror_unlocked (s)
#undef fread
#define fread(b, m, n, s) fread_unlocked (b, m, n, s)
#undef fwrite
#define fwrite(b, m, n, s) fwrite_unlocked (b, m, n, s)

/* Defined in ld.c.  */
extern int ld_scan_version_script;

#define MAX_PREPDEPTH 20
static enum prepstate
{
  prep_normal,
  skip_if,
  skip_to_endif
} prepstate[MAX_PREPDEPTH];
static int prepdepth;

static void eat_comment (void);
static void eat_to_eol (bool empty);
static int attrib_convert (int c);
static void push_state (enum prepstate);
static int pop_state (void);
static int handle_ifdef (void);
static void invalid_char (int ch);
#define YY_NEVER_INTERACTIVE 1
#define IGNORE 1

#line 1061 "ldlex.c"

/* Macros after this point can all be overridden by user definitions in
 * section 1.
 */

#ifndef YY_SKIP_YYWRAP
#ifdef __cplusplus
extern "C" int yywrap YY_PROTO(( void ));
#else
extern int yywrap YY_PROTO(( void ));
#endif
#endif

#ifndef YY_NO_UNPUT
static void yyunput YY_PROTO(( int c, char *buf_ptr ));
#endif

#ifndef yytext_ptr
static void yy_flex_strncpy YY_PROTO(( char *, yyconst char *, int ));
#endif

#ifdef YY_NEED_STRLEN
static int yy_flex_strlen YY_PROTO(( yyconst char * ));
#endif

#ifndef YY_NO_INPUT
#ifdef __cplusplus
static int yyinput YY_PROTO(( void ));
#else
static int input YY_PROTO(( void ));
#endif
#endif

#if YY_STACK_USED
static int yy_start_stack_ptr = 0;
static int yy_start_stack_depth = 0;
static int *yy_start_stack = 0;
#ifndef YY_NO_PUSH_STATE
static void yy_push_state YY_PROTO(( int new_state ));
#endif
#ifndef YY_NO_POP_STATE
static void yy_pop_state YY_PROTO(( void ));
#endif
#ifndef YY_NO_TOP_STATE
static int yy_top_state YY_PROTO(( void ));
#endif

#else
#define YY_NO_PUSH_STATE 1
#define YY_NO_POP_STATE 1
#define YY_NO_TOP_STATE 1
#endif

#ifdef YY_MALLOC_DECL
YY_MALLOC_DECL
#else
#if __STDC__
#ifndef __cplusplus
#include <stdlib.h>
#endif
#else
/* Just try to get by without declaring the routines.  This will fail
 * miserably on non-ANSI systems for which sizeof(size_t) != sizeof(int)
 * or sizeof(void*) != sizeof(int).
 */
#endif
#endif

/* Amount of stuff to slurp up with each read. */
#ifndef YY_READ_BUF_SIZE
#define YY_READ_BUF_SIZE 8192
#endif

/* Copy whatever the last rule matched to the standard output. */

#ifndef ECHO
/* This used to be an fputs(), but since the string might contain NUL's,
 * we now use fwrite().
 */
#define ECHO (void) fwrite( yytext, yyleng, 1, yyout )
#endif

/* Gets input and stuffs it into "buf".  number of characters read, or YY_NULL,
 * is returned in "result".
 */
#ifndef YY_INPUT
#define YY_INPUT(buf,result,max_size) \
	if ( yy_current_buffer->yy_is_interactive ) \
		{ \
		int c = '*', n; \
		for ( n = 0; n < max_size && \
			     (c = getc( yyin )) != EOF && c != '\n'; ++n ) \
			buf[n] = (char) c; \
		if ( c == '\n' ) \
			buf[n++] = (char) c; \
		if ( c == EOF && ferror( yyin ) ) \
			YY_FATAL_ERROR( "input in flex scanner failed" ); \
		result = n; \
		} \
	else if ( ((result = fread( buf, 1, max_size, yyin )) == 0) \
		  && ferror( yyin ) ) \
		YY_FATAL_ERROR( "input in flex scanner failed" );
#endif

/* No semi-colon after return; correct usage is to write "yyterminate();" -
 * we don't want an extra ';' after the "return" because that will cause
 * some compilers to complain about unreachable statements.
 */
#ifndef yyterminate
#define yyterminate() return YY_NULL
#endif

/* Number of entries by which start-condition stack grows. */
#ifndef YY_START_STACK_INCR
#define YY_START_STACK_INCR 25
#endif

/* Report a fatal error. */
#ifndef YY_FATAL_ERROR
#define YY_FATAL_ERROR(msg) yy_fatal_error( msg )
#endif

/* Default declaration of generated scanner - a define so the user can
 * easily add parameters.
 */
#ifndef YY_DECL
#define YY_DECL int yylex YY_PROTO(( void ))
#endif

/* Code executed at the beginning of each rule, after yytext and yyleng
 * have been set up.
 */
#ifndef YY_USER_ACTION
#define YY_USER_ACTION
#endif

/* Code executed at the end of each rule. */
#ifndef YY_BREAK
#define YY_BREAK break;
#endif

#define YY_RULE_SETUP \
	if ( yyleng > 0 ) \
		yy_current_buffer->yy_at_bol = \
				(yytext[yyleng - 1] == '\n'); \
	YY_USER_ACTION

YY_DECL
	{
	register yy_state_type yy_current_state;
	register char *yy_cp = NULL, *yy_bp = NULL;
	register int yy_act;

#line 79 "/home/drepper/gnu/elfutils/src/ldlex.l"

				if (unlikely (ld_scan_version_script))
				  {
				    ld_scan_version_script = -1;
				    return kVERSION_SCRIPT;
				  }

#line 1223 "ldlex.c"

	if ( yy_init )
		{
		yy_init = 0;

#ifdef YY_USER_INIT
		YY_USER_INIT;
#endif

		if ( ! yy_start )
			yy_start = 1;	/* first start state */

		if ( ! yyin )
			yyin = stdin;

		if ( ! yyout )
			yyout = stdout;

		if ( ! yy_current_buffer )
			yy_current_buffer =
				yy_create_buffer( yyin, YY_BUF_SIZE );

		yy_load_buffer_state();
		}

	while ( 1 )		/* loops until end-of-file is reached */
		{
		yy_cp = yy_c_buf_p;

		/* Support of yytext. */
		*yy_cp = yy_hold_char;

		/* yy_bp points to the position in yy_ch_buf of the start of
		 * the current run.
		 */
		yy_bp = yy_cp;

		yy_current_state = yy_start;
		yy_current_state += YY_AT_BOL();
		yy_state_ptr = yy_state_buf;
		*yy_state_ptr++ = yy_current_state;
yy_match:
		do
			{
			register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)];
			while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
				{
				yy_current_state = (int) yy_def[yy_current_state];
				if ( yy_current_state >= 211 )
					yy_c = yy_meta[(unsigned int) yy_c];
				}
			yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
			*yy_state_ptr++ = yy_current_state;
			++yy_cp;
			}
		while ( yy_base[yy_current_state] != 2141 );

yy_find_action:
		yy_current_state = *--yy_state_ptr;
		yy_lp = yy_accept[yy_current_state];
find_rule: /* we branch to this label when backing up */
		for ( ; ; ) /* until we find what rule we matched */
			{
			if ( yy_lp && yy_lp < yy_accept[yy_current_state + 1] )
				{
				yy_act = yy_acclist[yy_lp];
					{
					yy_full_match = yy_cp;
					break;
					}
				}
			--yy_cp;
			yy_current_state = *--yy_state_ptr;
			yy_lp = yy_accept[yy_current_state];
			}

		YY_DO_BEFORE_ACTION;

		if ( yy_act != YY_END_OF_BUFFER )
			{
			int yyl;
			for ( yyl = 0; yyl < yyleng; ++yyl )
				if ( yytext[yyl] == '\n' )
					++yylineno;
			}

do_action:	/* This label is used only to access EOF actions. */


		switch ( yy_act )
	{ /* beginning of action switch */
case 1:
*yy_cp = yy_hold_char; /* undo effects of setting up yytext */
yy_c_buf_p = yy_cp = yy_bp + 6;
YY_DO_BEFORE_ACTION; /* set up yytext again */
YY_RULE_SETUP
#line 86 "/home/drepper/gnu/elfutils/src/ldlex.l"
{ BEGIN (handle_ifdef ()); }
	YY_BREAK
case 2:
*yy_cp = yy_hold_char; /* undo effects of setting up yytext */
yy_c_buf_p = yy_cp = yy_bp + 5;
YY_DO_BEFORE_ACTION; /* set up yytext again */
YY_RULE_SETUP
#line 87 "/home/drepper/gnu/elfutils/src/ldlex.l"
{ eat_to_eol (true);
				  push_state (skip_to_endif);
				  BEGIN (IGNORE); }
	YY_BREAK
case 3:
*yy_cp = yy_hold_char; /* undo effects of setting up yytext */
yy_c_buf_p = yy_cp = yy_bp + 8;
YY_DO_BEFORE_ACTION; /* set up yytext again */
YY_RULE_SETUP
#line 90 "/home/drepper/gnu/elfutils/src/ldlex.l"
{ eat_to_eol (false);
				  push_state (skip_to_endif);
				  BEGIN (IGNORE); }
	YY_BREAK
case 4:
*yy_cp = yy_hold_char; /* undo effects of setting up yytext */
yy_c_buf_p = yy_cp = yy_bp + 6;
YY_DO_BEFORE_ACTION; /* set up yytext again */
YY_RULE_SETUP
#line 93 "/home/drepper/gnu/elfutils/src/ldlex.l"
{ eat_to_eol (true) ; }
	YY_BREAK
case 5:
*yy_cp = yy_hold_char; /* undo effects of setting up yytext */
yy_c_buf_p = yy_cp = yy_bp + 6;
YY_DO_BEFORE_ACTION; /* set up yytext again */
YY_RULE_SETUP
#line 95 "/home/drepper/gnu/elfutils/src/ldlex.l"
{ eat_to_eol (false);
				  push_state (skip_to_endif); }
	YY_BREAK
case 6:
*yy_cp = yy_hold_char; /* undo effects of setting up yytext */
yy_c_buf_p = yy_cp = yy_bp + 5;
YY_DO_BEFORE_ACTION; /* set up yytext again */
YY_RULE_SETUP
#line 97 "/home/drepper/gnu/elfutils/src/ldlex.l"
{ eat_to_eol (true);
				  assert (prepdepth > 0);
				  if (prepstate[prepdepth - 1] == skip_if)
				    {
				      /* Back to normal processing.  */
				      assert (prepdepth == 1);
				      BEGIN (pop_state ());
				    }
				}
	YY_BREAK
case 7:
*yy_cp = yy_hold_char; /* undo effects of setting up yytext */
yy_c_buf_p = yy_cp = yy_bp + 8;
YY_DO_BEFORE_ACTION; /* set up yytext again */
YY_RULE_SETUP
#line 106 "/home/drepper/gnu/elfutils/src/ldlex.l"
{ assert (prepdepth > 0);
				  if (prepstate[prepdepth - 1] == skip_if)
				    {
				      /* Maybe this symbol is defined.  */
				      pop_state ();
				      BEGIN (handle_ifdef ());
				    }
				}
	YY_BREAK
case 8:
*yy_cp = yy_hold_char; /* undo effects of setting up yytext */
yy_c_buf_p = yy_cp = yy_bp + 6;
YY_DO_BEFORE_ACTION; /* set up yytext again */
YY_RULE_SETUP
#line 114 "/home/drepper/gnu/elfutils/src/ldlex.l"
{ eat_to_eol (true);
				  BEGIN (pop_state ()); }
	YY_BREAK
case 9:
YY_RULE_SETUP
#line 116 "/home/drepper/gnu/elfutils/src/ldlex.l"
{ /* nothing */ }
	YY_BREAK
case 10:
YY_RULE_SETUP
#line 119 "/home/drepper/gnu/elfutils/src/ldlex.l"
{ eat_comment (); }
	YY_BREAK
case 11:
YY_RULE_SETUP
#line 121 "/home/drepper/gnu/elfutils/src/ldlex.l"
{ return kALIGN; }
	YY_BREAK
case 12:
YY_RULE_SETUP
#line 122 "/home/drepper/gnu/elfutils/src/ldlex.l"
{ return kENTRY; }
	YY_BREAK
case 13:
YY_RULE_SETUP
#line 123 "/home/drepper/gnu/elfutils/src/ldlex.l"
{ return kEXCLUDE_FILE; }
	YY_BREAK
case 14:
YY_RULE_SETUP
#line 124 "/home/drepper/gnu/elfutils/src/ldlex.l"
{ return kGLOBAL; }
	YY_BREAK
case 15:
YY_RULE_SETUP
#line 125 "/home/drepper/gnu/elfutils/src/ldlex.l"
{ return kGROUP; }
	YY_BREAK
case 16:
YY_RULE_SETUP
#line 126 "/home/drepper/gnu/elfutils/src/ldlex.l"
{ return kINPUT; }
	YY_BREAK
case 17:
YY_RULE_SETUP
#line 127 "/home/drepper/gnu/elfutils/src/ldlex.l"
{ return kINTERP; }
	YY_BREAK
case 18:
YY_RULE_SETUP
#line 128 "/home/drepper/gnu/elfutils/src/ldlex.l"
{ return kKEEP; }
	YY_BREAK
case 19:
YY_RULE_SETUP
#line 129 "/home/drepper/gnu/elfutils/src/ldlex.l"
{ return kLOCAL; }
	YY_BREAK
case 20:
YY_RULE_SETUP
#line 130 "/home/drepper/gnu/elfutils/src/ldlex.l"
{ return kOUTPUT_FORMAT; }
	YY_BREAK
case 21:
YY_RULE_SETUP
#line 131 "/home/drepper/gnu/elfutils/src/ldlex.l"
{ return kPAGESIZE; }
	YY_BREAK
case 22:
YY_RULE_SETUP
#line 132 "/home/drepper/gnu/elfutils/src/ldlex.l"
{ return kPROVIDE; }
	YY_BREAK
case 23:
YY_RULE_SETUP
#line 133 "/home/drepper/gnu/elfutils/src/ldlex.l"
{ return kSEARCH_DIR; }
	YY_BREAK
case 24:
YY_RULE_SETUP
#line 134 "/home/drepper/gnu/elfutils/src/ldlex.l"
{ return kSEGMENT; }
	YY_BREAK
case 25:
YY_RULE_SETUP
#line 135 "/home/drepper/gnu/elfutils/src/ldlex.l"
{ return kSIZEOF_HEADERS; }
	YY_BREAK
case 26:
YY_RULE_SETUP
#line 136 "/home/drepper/gnu/elfutils/src/ldlex.l"
{ return kSORT; }
	YY_BREAK
case 27:
YY_RULE_SETUP
#line 137 "/home/drepper/gnu/elfutils/src/ldlex.l"
{ return kVERSION; }
	YY_BREAK
case 28:
YY_RULE_SETUP
#line 139 "/home/drepper/gnu/elfutils/src/ldlex.l"
{ int cnt = 1 ;
				  ldlval.num = 0;
				  while (cnt < yyleng - 1)
				    ldlval.num |= attrib_convert (yytext[cnt++]);
				  return kMODE; }
	YY_BREAK
case 29:
YY_RULE_SETUP
#line 145 "/home/drepper/gnu/elfutils/src/ldlex.l"
{ return '{'; }
	YY_BREAK
case 30:
YY_RULE_SETUP
#line 146 "/home/drepper/gnu/elfutils/src/ldlex.l"
{ return '}'; }
	YY_BREAK
case 31:
YY_RULE_SETUP
#line 147 "/home/drepper/gnu/elfutils/src/ldlex.l"
{ return '('; }
	YY_BREAK
case 32:
YY_RULE_SETUP
#line 148 "/home/drepper/gnu/elfutils/src/ldlex.l"
{ return ')'; }
	YY_BREAK
case 33:
YY_RULE_SETUP
#line 149 "/home/drepper/gnu/elfutils/src/ldlex.l"
{ return ':'; }
	YY_BREAK
case 34:
YY_RULE_SETUP
#line 150 "/home/drepper/gnu/elfutils/src/ldlex.l"
{ return ';'; }
	YY_BREAK
case 35:
YY_RULE_SETUP
#line 151 "/home/drepper/gnu/elfutils/src/ldlex.l"
{ return '='; }
	YY_BREAK
case 36:
YY_RULE_SETUP
#line 152 "/home/drepper/gnu/elfutils/src/ldlex.l"
{ ldlval.op = exp_plus; return kADD_OP; }
	YY_BREAK
case 37:
YY_RULE_SETUP
#line 153 "/home/drepper/gnu/elfutils/src/ldlex.l"
{ ldlval.op = exp_minus; return kADD_OP; }
	YY_BREAK
case 38:
YY_RULE_SETUP
#line 154 "/home/drepper/gnu/elfutils/src/ldlex.l"
{ return '*'; }
	YY_BREAK
case 39:
YY_RULE_SETUP
#line 155 "/home/drepper/gnu/elfutils/src/ldlex.l"
{ ldlval.op = exp_div; return kMUL_OP; }
	YY_BREAK
case 40:
YY_RULE_SETUP
#line 156 "/home/drepper/gnu/elfutils/src/ldlex.l"
{ ldlval.op = exp_mod; return kMUL_OP; }
	YY_BREAK
case 41:
YY_RULE_SETUP
#line 157 "/home/drepper/gnu/elfutils/src/ldlex.l"
{ return '&'; }
	YY_BREAK
case 42:
YY_RULE_SETUP
#line 158 "/home/drepper/gnu/elfutils/src/ldlex.l"
{ return '|'; }
	YY_BREAK
case 43:
YY_RULE_SETUP
#line 160 "/home/drepper/gnu/elfutils/src/ldlex.l"
{ return ','; }
	YY_BREAK
case 44:
YY_RULE_SETUP
#line 162 "/home/drepper/gnu/elfutils/src/ldlex.l"
{ char *endp;
				  ldlval.num = strtoumax (yytext, &endp, 0);
				  if (*endp != '\0')
				    {
				      if (tolower (*endp) == 'k')
					ldlval.num *= 1024;
				      else
					{
					  assert (tolower (*endp) == 'm');
					  ldlval.num *= 1024 * 1024;
					}
				    }
				  return kNUM; }
	YY_BREAK
case 45:
YY_RULE_SETUP
#line 176 "/home/drepper/gnu/elfutils/src/ldlex.l"
{ ldlval.str = obstack_strndup (&ld_state.smem,
								yytext, yyleng);
				  return kID; }
	YY_BREAK
case 46:
YY_RULE_SETUP
#line 180 "/home/drepper/gnu/elfutils/src/ldlex.l"
{ ldlval.str = obstack_strndup (&ld_state.smem,
								yytext, yyleng);
				  return kFILENAME; }
	YY_BREAK
case 47:
YY_RULE_SETUP
#line 184 "/home/drepper/gnu/elfutils/src/ldlex.l"
{ /* IGNORE */ }
	YY_BREAK
case 48:
YY_RULE_SETUP
#line 186 "/home/drepper/gnu/elfutils/src/ldlex.l"
{ invalid_char (*yytext); }
	YY_BREAK
case 49:
YY_RULE_SETUP
#line 188 "/home/drepper/gnu/elfutils/src/ldlex.l"
ECHO;
	YY_BREAK
#line 1625 "ldlex.c"
			case YY_STATE_EOF(INITIAL):
			case YY_STATE_EOF(IGNORE):
				yyterminate();

	case YY_END_OF_BUFFER:
		{
		/* Amount of text matched not including the EOB char. */
		int yy_amount_of_matched_text = (int) (yy_cp - yytext_ptr) - 1;

		/* Undo the effects of YY_DO_BEFORE_ACTION. */
		*yy_cp = yy_hold_char;
		YY_RESTORE_YY_MORE_OFFSET

		if ( yy_current_buffer->yy_buffer_status == YY_BUFFER_NEW )
			{
			/* We're scanning a new file or input source.  It's
			 * possible that this happened because the user
			 * just pointed yyin at a new source and called
			 * yylex().  If so, then we have to assure
			 * consistency between yy_current_buffer and our
			 * globals.  Here is the right place to do so, because
			 * this is the first action (other than possibly a
			 * back-up) that will match for the new input source.
			 */
			yy_n_chars = yy_current_buffer->yy_n_chars;
			yy_current_buffer->yy_input_file = yyin;
			yy_current_buffer->yy_buffer_status = YY_BUFFER_NORMAL;
			}

		/* Note that here we test for yy_c_buf_p "<=" to the position
		 * of the first EOB in the buffer, since yy_c_buf_p will
		 * already have been incremented past the NUL character
		 * (since all states make transitions on EOB to the
		 * end-of-buffer state).  Contrast this with the test
		 * in input().
		 */
		if ( yy_c_buf_p <= &yy_current_buffer->yy_ch_buf[yy_n_chars] )
			{ /* This was really a NUL. */
			yy_state_type yy_next_state;

			yy_c_buf_p = yytext_ptr + yy_amount_of_matched_text;

			yy_current_state = yy_get_previous_state();

			/* Okay, we're now positioned to make the NUL
			 * transition.  We couldn't have
			 * yy_get_previous_state() go ahead and do it
			 * for us because it doesn't know how to deal
			 * with the possibility of jamming (and we don't
			 * want to build jamming into it because then it
			 * will run more slowly).
			 */

			yy_next_state = yy_try_NUL_trans( yy_current_state );

			yy_bp = yytext_ptr + YY_MORE_ADJ;

			if ( yy_next_state )
				{
				/* Consume the NUL. */
				yy_cp = ++yy_c_buf_p;
				yy_current_state = yy_next_state;
				goto yy_match;
				}

			else
				{
				yy_cp = yy_c_buf_p;
				goto yy_find_action;
				}
			}

		else switch ( yy_get_next_buffer() )
			{
			case EOB_ACT_END_OF_FILE:
				{
				yy_did_buffer_switch_on_eof = 0;

				if ( yywrap() )
					{
					/* Note: because we've taken care in
					 * yy_get_next_buffer() to have set up
					 * yytext, we can now set up
					 * yy_c_buf_p so that if some total
					 * hoser (like flex itself) wants to
					 * call the scanner after we return the
					 * YY_NULL, it'll still work - another
					 * YY_NULL will get returned.
					 */
					yy_c_buf_p = yytext_ptr + YY_MORE_ADJ;

					yy_act = YY_STATE_EOF(YY_START);
					goto do_action;
					}

				else
					{
					if ( ! yy_did_buffer_switch_on_eof )
						YY_NEW_FILE;
					}
				break;
				}

			case EOB_ACT_CONTINUE_SCAN:
				yy_c_buf_p =
					yytext_ptr + yy_amount_of_matched_text;

				yy_current_state = yy_get_previous_state();

				yy_cp = yy_c_buf_p;
				yy_bp = yytext_ptr + YY_MORE_ADJ;
				goto yy_match;

			case EOB_ACT_LAST_MATCH:
				yy_c_buf_p =
				&yy_current_buffer->yy_ch_buf[yy_n_chars];

				yy_current_state = yy_get_previous_state();

				yy_cp = yy_c_buf_p;
				yy_bp = yytext_ptr + YY_MORE_ADJ;
				goto yy_find_action;
			}
		break;
		}

	default:
		YY_FATAL_ERROR(
			"fatal flex scanner internal error--no action found" );
	} /* end of action switch */
		} /* end of scanning one token */
	} /* end of yylex */


/* yy_get_next_buffer - try to read in a new buffer
 *
 * Returns a code representing an action:
 *	EOB_ACT_LAST_MATCH -
 *	EOB_ACT_CONTINUE_SCAN - continue scanning from current position
 *	EOB_ACT_END_OF_FILE - end of file
 */

static int yy_get_next_buffer()
	{
	register char *dest = yy_current_buffer->yy_ch_buf;
	register char *source = yytext_ptr;
	register int number_to_move, i;
	int ret_val;

	if ( yy_c_buf_p > &yy_current_buffer->yy_ch_buf[yy_n_chars + 1] )
		YY_FATAL_ERROR(
		"fatal flex scanner internal error--end of buffer missed" );

	if ( yy_current_buffer->yy_fill_buffer == 0 )
		{ /* Don't try to fill the buffer, so this is an EOF. */
		if ( yy_c_buf_p - yytext_ptr - YY_MORE_ADJ == 1 )
			{
			/* We matched a single character, the EOB, so
			 * treat this as a final EOF.
			 */
			return EOB_ACT_END_OF_FILE;
			}

		else
			{
			/* We matched some text prior to the EOB, first
			 * process it.
			 */
			return EOB_ACT_LAST_MATCH;
			}
		}

	/* Try to read more data. */

	/* First move last chars to start of buffer. */
	number_to_move = (int) (yy_c_buf_p - yytext_ptr) - 1;

	for ( i = 0; i < number_to_move; ++i )
		*(dest++) = *(source++);

	if ( yy_current_buffer->yy_buffer_status == YY_BUFFER_EOF_PENDING )
		/* don't do the read, it's not guaranteed to return an EOF,
		 * just force an EOF
		 */
		yy_current_buffer->yy_n_chars = yy_n_chars = 0;

	else
		{
		int num_to_read =
			yy_current_buffer->yy_buf_size - number_to_move - 1;

		while ( num_to_read <= 0 )
			{ /* Not enough room in the buffer - grow it. */
#ifdef YY_USES_REJECT
			YY_FATAL_ERROR(
"input buffer overflow, can't enlarge buffer because scanner uses REJECT" );
#else

			/* just a shorter name for the current buffer */
			YY_BUFFER_STATE b = yy_current_buffer;

			int yy_c_buf_p_offset =
				(int) (yy_c_buf_p - b->yy_ch_buf);

			if ( b->yy_is_our_buffer )
				{
				int new_size = b->yy_buf_size * 2;

				if ( new_size <= 0 )
					b->yy_buf_size += b->yy_buf_size / 8;
				else
					b->yy_buf_size *= 2;

				b->yy_ch_buf = (char *)
					/* Include room in for 2 EOB chars. */
					yy_flex_realloc( (void *) b->yy_ch_buf,
							 b->yy_buf_size + 2 );
				}
			else
				/* Can't grow it, we don't own it. */
				b->yy_ch_buf = 0;

			if ( ! b->yy_ch_buf )
				YY_FATAL_ERROR(
				"fatal error - scanner input buffer overflow" );

			yy_c_buf_p = &b->yy_ch_buf[yy_c_buf_p_offset];

			num_to_read = yy_current_buffer->yy_buf_size -
						number_to_move - 1;
#endif
			}

		if ( num_to_read > YY_READ_BUF_SIZE )
			num_to_read = YY_READ_BUF_SIZE;

		/* Read in more data. */
		YY_INPUT( (&yy_current_buffer->yy_ch_buf[number_to_move]),
			yy_n_chars, num_to_read );

		yy_current_buffer->yy_n_chars = yy_n_chars;
		}

	if ( yy_n_chars == 0 )
		{
		if ( number_to_move == YY_MORE_ADJ )
			{
			ret_val = EOB_ACT_END_OF_FILE;
			yyrestart( yyin );
			}

		else
			{
			ret_val = EOB_ACT_LAST_MATCH;
			yy_current_buffer->yy_buffer_status =
				YY_BUFFER_EOF_PENDING;
			}
		}

	else
		ret_val = EOB_ACT_CONTINUE_SCAN;

	yy_n_chars += number_to_move;
	yy_current_buffer->yy_ch_buf[yy_n_chars] = YY_END_OF_BUFFER_CHAR;
	yy_current_buffer->yy_ch_buf[yy_n_chars + 1] = YY_END_OF_BUFFER_CHAR;

	yytext_ptr = &yy_current_buffer->yy_ch_buf[0];

	return ret_val;
	}


/* yy_get_previous_state - get the state just before the EOB char was reached */

static yy_state_type yy_get_previous_state()
	{
	register yy_state_type yy_current_state;
	register char *yy_cp;

	yy_current_state = yy_start;
	yy_current_state += YY_AT_BOL();
	yy_state_ptr = yy_state_buf;
	*yy_state_ptr++ = yy_current_state;

	for ( yy_cp = yytext_ptr + YY_MORE_ADJ; yy_cp < yy_c_buf_p; ++yy_cp )
		{
		register YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1);
		while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
			{
			yy_current_state = (int) yy_def[yy_current_state];
			if ( yy_current_state >= 211 )
				yy_c = yy_meta[(unsigned int) yy_c];
			}
		yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
		*yy_state_ptr++ = yy_current_state;
		}

	return yy_current_state;
	}


/* yy_try_NUL_trans - try to make a transition on the NUL character
 *
 * synopsis
 *	next_state = yy_try_NUL_trans( current_state );
 */

#ifdef YY_USE_PROTOS
static yy_state_type yy_try_NUL_trans( yy_state_type yy_current_state )
#else
static yy_state_type yy_try_NUL_trans( yy_current_state )
yy_state_type yy_current_state;
#endif
	{
	register int yy_is_jam;

	register YY_CHAR yy_c = 1;
	while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
		{
		yy_current_state = (int) yy_def[yy_current_state];
		if ( yy_current_state >= 211 )
			yy_c = yy_meta[(unsigned int) yy_c];
		}
	yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
	yy_is_jam = (yy_current_state == 210);
	if ( ! yy_is_jam )
		*yy_state_ptr++ = yy_current_state;

	return yy_is_jam ? 0 : yy_current_state;
	}


#ifndef YY_NO_UNPUT
#ifdef YY_USE_PROTOS
static void yyunput( int c, register char *yy_bp )
#else
static void yyunput( c, yy_bp )
int c;
register char *yy_bp;
#endif
	{
	register char *yy_cp = yy_c_buf_p;

	/* undo effects of setting up yytext */
	*yy_cp = yy_hold_char;

	if ( yy_cp < yy_current_buffer->yy_ch_buf + 2 )
		{ /* need to shift things up to make room */
		/* +2 for EOB chars. */
		register int number_to_move = yy_n_chars + 2;
		register char *dest = &yy_current_buffer->yy_ch_buf[
					yy_current_buffer->yy_buf_size + 2];
		register char *source =
				&yy_current_buffer->yy_ch_buf[number_to_move];

		while ( source > yy_current_buffer->yy_ch_buf )
			*--dest = *--source;

		yy_cp += (int) (dest - source);
		yy_bp += (int) (dest - source);
		yy_current_buffer->yy_n_chars =
			yy_n_chars = yy_current_buffer->yy_buf_size;

		if ( yy_cp < yy_current_buffer->yy_ch_buf + 2 )
			YY_FATAL_ERROR( "flex scanner push-back overflow" );
		}

	*--yy_cp = (char) c;

	if ( c == '\n' )
		--yylineno;

	yytext_ptr = yy_bp;
	yy_hold_char = *yy_cp;
	yy_c_buf_p = yy_cp;
	}
#endif	/* ifndef YY_NO_UNPUT */


#ifndef YY_NO_INPUT
#ifdef __cplusplus
static int yyinput()
#else
static int input()
#endif
	{
	int c;

	*yy_c_buf_p = yy_hold_char;

	if ( *yy_c_buf_p == YY_END_OF_BUFFER_CHAR )
		{
		/* yy_c_buf_p now points to the character we want to return.
		 * If this occurs *before* the EOB characters, then it's a
		 * valid NUL; if not, then we've hit the end of the buffer.
		 */
		if ( yy_c_buf_p < &yy_current_buffer->yy_ch_buf[yy_n_chars] )
			/* This was really a NUL. */
			*yy_c_buf_p = '\0';

		else
			{ /* need more input */
			int offset = yy_c_buf_p - yytext_ptr;
			++yy_c_buf_p;

			switch ( yy_get_next_buffer() )
				{
				case EOB_ACT_LAST_MATCH:
					/* This happens because yy_g_n_b()
					 * sees that we've accumulated a
					 * token and flags that we need to
					 * try matching the token before
					 * proceeding.  But for input(),
					 * there's no matching to consider.
					 * So convert the EOB_ACT_LAST_MATCH
					 * to EOB_ACT_END_OF_FILE.
					 */

					/* Reset buffer status. */
					yyrestart( yyin );

					/* fall through */

				case EOB_ACT_END_OF_FILE:
					{
					if ( yywrap() )
						return EOF;

					if ( ! yy_did_buffer_switch_on_eof )
						YY_NEW_FILE;
#ifdef __cplusplus
					return yyinput();
#else
					return input();
#endif
					}

				case EOB_ACT_CONTINUE_SCAN:
					yy_c_buf_p = yytext_ptr + offset;
					break;
				}
			}
		}

	c = *(unsigned char *) yy_c_buf_p;	/* cast for 8-bit char's */
	*yy_c_buf_p = '\0';	/* preserve yytext */
	yy_hold_char = *++yy_c_buf_p;

	yy_current_buffer->yy_at_bol = (c == '\n');
	if ( yy_current_buffer->yy_at_bol )
		++yylineno;

	return c;
	}
#endif /* YY_NO_INPUT */

#ifdef YY_USE_PROTOS
void yyrestart( FILE *input_file )
#else
void yyrestart( input_file )
FILE *input_file;
#endif
	{
	if ( ! yy_current_buffer )
		yy_current_buffer = yy_create_buffer( yyin, YY_BUF_SIZE );

	yy_init_buffer( yy_current_buffer, input_file );
	yy_load_buffer_state();
	}


#ifdef YY_USE_PROTOS
void yy_switch_to_buffer( YY_BUFFER_STATE new_buffer )
#else
void yy_switch_to_buffer( new_buffer )
YY_BUFFER_STATE new_buffer;
#endif
	{
	if ( yy_current_buffer == new_buffer )
		return;

	if ( yy_current_buffer )
		{
		/* Flush out information for old buffer. */
		*yy_c_buf_p = yy_hold_char;
		yy_current_buffer->yy_buf_pos = yy_c_buf_p;
		yy_current_buffer->yy_n_chars = yy_n_chars;
		}

	yy_current_buffer = new_buffer;
	yy_load_buffer_state();

	/* We don't actually know whether we did this switch during
	 * EOF (yywrap()) processing, but the only time this flag
	 * is looked at is after yywrap() is called, so it's safe
	 * to go ahead and always set it.
	 */
	yy_did_buffer_switch_on_eof = 1;
	}


#ifdef YY_USE_PROTOS
void yy_load_buffer_state( void )
#else
void yy_load_buffer_state()
#endif
	{
	yy_n_chars = yy_current_buffer->yy_n_chars;
	yytext_ptr = yy_c_buf_p = yy_current_buffer->yy_buf_pos;
	yyin = yy_current_buffer->yy_input_file;
	yy_hold_char = *yy_c_buf_p;
	}


#ifdef YY_USE_PROTOS
YY_BUFFER_STATE yy_create_buffer( FILE *file, int size )
#else
YY_BUFFER_STATE yy_create_buffer( file, size )
FILE *file;
int size;
#endif
	{
	YY_BUFFER_STATE b;

	b = (YY_BUFFER_STATE) yy_flex_alloc( sizeof( struct yy_buffer_state ) );
	if ( ! b )
		YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" );

	b->yy_buf_size = size;

	/* yy_ch_buf has to be 2 characters longer than the size given because
	 * we need to put in 2 end-of-buffer characters.
	 */
	b->yy_ch_buf = (char *) yy_flex_alloc( b->yy_buf_size + 2 );
	if ( ! b->yy_ch_buf )
		YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" );

	b->yy_is_our_buffer = 1;

	yy_init_buffer( b, file );

	return b;
	}


#ifdef YY_USE_PROTOS
void yy_delete_buffer( YY_BUFFER_STATE b )
#else
void yy_delete_buffer( b )
YY_BUFFER_STATE b;
#endif
	{
	if ( ! b )
		return;

	if ( b == yy_current_buffer )
		yy_current_buffer = (YY_BUFFER_STATE) 0;

	if ( b->yy_is_our_buffer )
		yy_flex_free( (void *) b->yy_ch_buf );

	yy_flex_free( (void *) b );
	}



#ifdef YY_USE_PROTOS
void yy_init_buffer( YY_BUFFER_STATE b, FILE *file )
#else
void yy_init_buffer( b, file )
YY_BUFFER_STATE b;
FILE *file;
#endif


	{
	yy_flush_buffer( b );

	b->yy_input_file = file;
	b->yy_fill_buffer = 1;

#if YY_ALWAYS_INTERACTIVE
	b->yy_is_interactive = 1;
#else
#if YY_NEVER_INTERACTIVE
	b->yy_is_interactive = 0;
#else
	b->yy_is_interactive = file ? (isatty( fileno(file) ) > 0) : 0;
#endif
#endif
	}


#ifdef YY_USE_PROTOS
void yy_flush_buffer( YY_BUFFER_STATE b )
#else
void yy_flush_buffer( b )
YY_BUFFER_STATE b;
#endif

	{
	if ( ! b )
		return;

	b->yy_n_chars = 0;

	/* We always need two end-of-buffer characters.  The first causes
	 * a transition to the end-of-buffer state.  The second causes
	 * a jam in that state.
	 */
	b->yy_ch_buf[0] = YY_END_OF_BUFFER_CHAR;
	b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR;

	b->yy_buf_pos = &b->yy_ch_buf[0];

	b->yy_at_bol = 1;
	b->yy_buffer_status = YY_BUFFER_NEW;

	if ( b == yy_current_buffer )
		yy_load_buffer_state();
	}


#ifndef YY_NO_SCAN_BUFFER
#ifdef YY_USE_PROTOS
YY_BUFFER_STATE yy_scan_buffer( char *base, yy_size_t size )
#else
YY_BUFFER_STATE yy_scan_buffer( base, size )
char *base;
yy_size_t size;
#endif
	{
	YY_BUFFER_STATE b;

	if ( size < 2 ||
	     base[size-2] != YY_END_OF_BUFFER_CHAR ||
	     base[size-1] != YY_END_OF_BUFFER_CHAR )
		/* They forgot to leave room for the EOB's. */
		return 0;

	b = (YY_BUFFER_STATE) yy_flex_alloc( sizeof( struct yy_buffer_state ) );
	if ( ! b )
		YY_FATAL_ERROR( "out of dynamic memory in yy_scan_buffer()" );

	b->yy_buf_size = size - 2;	/* "- 2" to take care of EOB's */
	b->yy_buf_pos = b->yy_ch_buf = base;
	b->yy_is_our_buffer = 0;
	b->yy_input_file = 0;
	b->yy_n_chars = b->yy_buf_size;
	b->yy_is_interactive = 0;
	b->yy_at_bol = 1;
	b->yy_fill_buffer = 0;
	b->yy_buffer_status = YY_BUFFER_NEW;

	yy_switch_to_buffer( b );

	return b;
	}
#endif


#ifndef YY_NO_SCAN_STRING
#ifdef YY_USE_PROTOS
YY_BUFFER_STATE yy_scan_string( yyconst char *yy_str )
#else
YY_BUFFER_STATE yy_scan_string( yy_str )
yyconst char *yy_str;
#endif
	{
	int len;
	for ( len = 0; yy_str[len]; ++len )
		;

	return yy_scan_bytes( yy_str, len );
	}
#endif


#ifndef YY_NO_SCAN_BYTES
#ifdef YY_USE_PROTOS
YY_BUFFER_STATE yy_scan_bytes( yyconst char *bytes, int len )
#else
YY_BUFFER_STATE yy_scan_bytes( bytes, len )
yyconst char *bytes;
int len;
#endif
	{
	YY_BUFFER_STATE b;
	char *buf;
	yy_size_t n;
	int i;

	/* Get memory for full buffer, including space for trailing EOB's. */
	n = len + 2;
	buf = (char *) yy_flex_alloc( n );
	if ( ! buf )
		YY_FATAL_ERROR( "out of dynamic memory in yy_scan_bytes()" );

	for ( i = 0; i < len; ++i )
		buf[i] = bytes[i];

	buf[len] = buf[len+1] = YY_END_OF_BUFFER_CHAR;

	b = yy_scan_buffer( buf, n );
	if ( ! b )
		YY_FATAL_ERROR( "bad buffer in yy_scan_bytes()" );

	/* It's okay to grow etc. this buffer, and we should throw it
	 * away when we're done.
	 */
	b->yy_is_our_buffer = 1;

	return b;
	}
#endif


#ifndef YY_NO_PUSH_STATE
#ifdef YY_USE_PROTOS
static void yy_push_state( int new_state )
#else
static void yy_push_state( new_state )
int new_state;
#endif
	{
	if ( yy_start_stack_ptr >= yy_start_stack_depth )
		{
		yy_size_t new_size;

		yy_start_stack_depth += YY_START_STACK_INCR;
		new_size = yy_start_stack_depth * sizeof( int );

		if ( ! yy_start_stack )
			yy_start_stack = (int *) yy_flex_alloc( new_size );

		else
			yy_start_stack = (int *) yy_flex_realloc(
					(void *) yy_start_stack, new_size );

		if ( ! yy_start_stack )
			YY_FATAL_ERROR(
			"out of memory expanding start-condition stack" );
		}

	yy_start_stack[yy_start_stack_ptr++] = YY_START;

	BEGIN(new_state);
	}
#endif


#ifndef YY_NO_POP_STATE
static void yy_pop_state()
	{
	if ( --yy_start_stack_ptr < 0 )
		YY_FATAL_ERROR( "start-condition stack underflow" );

	BEGIN(yy_start_stack[yy_start_stack_ptr]);
	}
#endif


#ifndef YY_NO_TOP_STATE
static int yy_top_state()
	{
	return yy_start_stack[yy_start_stack_ptr - 1];
	}
#endif

#ifndef YY_EXIT_FAILURE
#define YY_EXIT_FAILURE 2
#endif

#ifdef YY_USE_PROTOS
static void yy_fatal_error( yyconst char msg[] )
#else
static void yy_fatal_error( msg )
char msg[];
#endif
	{
	(void) fprintf( stderr, "%s\n", msg );
	exit( YY_EXIT_FAILURE );
	}



/* Redefine yyless() so it works in section 3 code. */

#undef yyless
#define yyless(n) \
	do \
		{ \
		/* Undo effects of setting up yytext. */ \
		yytext[yyleng] = yy_hold_char; \
		yy_c_buf_p = yytext + n; \
		yy_hold_char = *yy_c_buf_p; \
		*yy_c_buf_p = '\0'; \
		yyleng = n; \
		} \
	while ( 0 )


/* Internal utility routines. */

#ifndef yytext_ptr
#ifdef YY_USE_PROTOS
static void yy_flex_strncpy( char *s1, yyconst char *s2, int n )
#else
static void yy_flex_strncpy( s1, s2, n )
char *s1;
yyconst char *s2;
int n;
#endif
	{
	register int i;
	for ( i = 0; i < n; ++i )
		s1[i] = s2[i];
	}
#endif

#ifdef YY_NEED_STRLEN
#ifdef YY_USE_PROTOS
static int yy_flex_strlen( yyconst char *s )
#else
static int yy_flex_strlen( s )
yyconst char *s;
#endif
	{
	register int n;
	for ( n = 0; s[n]; ++n )
		;

	return n;
	}
#endif


#ifdef YY_USE_PROTOS
static void *yy_flex_alloc( yy_size_t size )
#else
static void *yy_flex_alloc( size )
yy_size_t size;
#endif
	{
	return (void *) malloc( size );
	}

#ifdef YY_USE_PROTOS
static void *yy_flex_realloc( void *ptr, yy_size_t size )
#else
static void *yy_flex_realloc( ptr, size )
void *ptr;
yy_size_t size;
#endif
	{
	/* The cast to (char *) in the following accommodates both
	 * implementations that use char* generic pointers, and those
	 * that use void* generic pointers.  It works with the latter
	 * because both ANSI C and C++ allow castless assignment from
	 * any pointer type to void*, and deal with argument conversions
	 * as though doing an assignment.
	 */
	return (void *) realloc( (char *) ptr, size );
	}

#ifdef YY_USE_PROTOS
static void yy_flex_free( void *ptr )
#else
static void yy_flex_free( ptr )
void *ptr;
#endif
	{
	free( ptr );
	}

#if YY_MAIN
int main()
	{
	yylex();
	return 0;
	}
#endif
#line 188 "/home/drepper/gnu/elfutils/src/ldlex.l"


static void
eat_comment (void)
{
  while (1)
    {
      int c = input ();

      while (c != '*' && c != EOF)
	c = input ();

      if (c == '*')
	{
	  c = input ();
	  while (c == '*')
	    c = input ();
	  if (c == '/')
	    break;
	}

      if (c == EOF)
	{
	  /* XXX Use the setjmp buffer and signal EOF in comment */
	  error (0, 0, gettext ("EOF in comment"));
	  break;
	}
    }
}


static void
eat_to_eol (bool empty)
{
  bool warned = false;

  while (1)
    {
      int c = input ();

      if (c == EOF)
	break;
      if (c == '\n')
	{
	  ++yylineno;
	  break;
	}

      if (empty && ! isspace (c) && ! warned)
	{
	  error (0, 0, gettext ("%d: garbage at end of line"), yylineno);
	  warned = true;
	}
    }
}


static int
attrib_convert (int c)
{
  if (c == 'X')
    return PF_X;
  if (c == 'W')
    return PF_W;
  assert (c == 'R');
  return PF_R;
}


static void
push_state (enum prepstate state)
{
  if (prepdepth >= MAX_PREPDEPTH)
    error (EXIT_FAILURE, 0, gettext ("%d: conditionals nested too deep"),
	   yylineno);

  prepstate[prepdepth++] = state;
}


static int
pop_state (void)
{
  if (prepdepth == 0)
    error (0, 0, gettext ("%d: unexpected #endif"), yylineno);
  else
    --prepdepth;

  return prepdepth == 0 ? INITIAL : IGNORE;
}


static int
handle_ifdef (void)
{
  char idbuf[50];
  char *id = idbuf;
  size_t idlen = 0;
  size_t idmax = sizeof (idbuf);
  bool ignore_ws = true;
  bool defined = false;
  int result;

  while (1)
    {
      int c = input ();

      if (isspace (c) && ignore_ws)
	continue;

      if (c != '_' && (c < 'a' || c > 'z') && (c < 'A' || c > 'Z')
	  && (idlen == 0 || c < '0' || c > '9'))
	{
	  unput (c);
	  break;
	}

      if (idlen == idmax)
	{
	  char *newp = (char *) alloca (idmax *= 2);
	  id = memcpy (newp, id, idlen);
	}

      id[idlen++] = c;
      ignore_ws = false;
    }

  /* XXX Compare in a better way.  */
  if (idlen == 6 && strncmp (id, "SHARED", 6) == 0)
    defined = ld_state.file_type == dso_file_type;

  if (defined)
    result = INITIAL;
  else
    {
      push_state (skip_if);
      result = IGNORE;
    }

  return result;
}


static void
invalid_char (int ch)
{
  error (0, 0, (isascii (ch)
		? gettext ("invalid character '%c' at line %d; ignored")
		: gettext ("invalid character '\\%o' at line %d; ignored")),
	 ch, yylineno);
}


// Local Variables:
// mode: C
// End:
