OSDN Git Service

Wed Oct 28 08:03:31 1998 Alexandre Petit-Bianco <apbianco@cygnus.com>
authorapbianco <apbianco@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 28 Oct 1998 13:06:17 +0000 (13:06 +0000)
committerapbianco <apbianco@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 28 Oct 1998 13:06:17 +0000 (13:06 +0000)
* class.c (layout_class): Don't mangle <finit>, produce
  __finit<class> instead. Don't verify artificial methods.
* decl.c (finit_identifier_node): New declared global.
(init_decl_processing): finit_identifier_node initialized.
* java-tree.def (CONDITIONAL_EXPR): New Java tree code.
* java-tree.h (finit_identifier_node): Declared as extern.
(struct lang_decl): New field called_constructor.
(DECL_CONSTRUCTOR_CALLS): Access macro to called_constructor.
(CLASS_HAS_FINIT_P): New macro.
(CALL_CONSTRUCTOR_P): Leading comment changed. Macro now checks
  explicit constructor invocation.
(CALL_EXPLICIT_CONSTRUCTOR_P, CALL_THIS_CONSTRUCTOR_P,
  CALL_SUPER_CONSTRUCTOR_P): New macros.
(write_classfile): Added prototype.
* jcf-parse.c (jcf_parse_source): Parse and remember for
  generation if the file was seen on the command line.
(parse_source_file): Don't write the class file here.
(yyparse): Loop on files rewritten. Set current_jcf.
(parse_zip_file_entries): Parse class file only if it was found.
* lang.c (init_parse): Don't open command line provided filename
  here.
(lang_parse): Don't set main_jcf anymore.
* parse.h (ABSTRAC_CHECK): Capitalized arguments.
(JCONSTRUCTOR_CHECK): New macro.
(JBSC_TYPE_P): New macro.
(IN_TRY_BLOCK_P, EXCEPTIONS_P): Fixed leading comment.
(COMPLETE_CHECK_OP_2): New macro.
(struct parse_ctxt): New field explicit_constructor_p.
(check_class_interface_creation): Fixed prototype indentation.
(patch_method_invocation_stmt): Prototype reflects added argument.
(patch_invoke): Likewise.
(complete_method_declaration, build_super_invocation,
  verify_constructor_circularity,
  build_this_super_qualified_invocation, get_printable_method_name,
  patch_conditional_expr, maybe_generate_finit, fix_constructors,
  verify_constructor_super, create_artificial_method,
  start_artificial_method_body, end_artificial_method_body,
  generate_field_initialization_code): New function prototypes.
* parse.y: Fixed leading comment
(constructor_header:, constructor_body:, block_end:): Rules tagged
  <node>.
(type_declaration:): Call maybe_generate_finit.
(method_declaration:): Action for method_body: placed in new
  function complete_method_declaration, called here.
(constructor_declaration:): Defined actions. Removed leading
  FIXME.
(constructor_header:): New rule with action.
(constructor_body:): Rule rewritten using block_begin: and
  block_end:. Defined actions.
(constructor_declarator:, explicit_constructor_invocation:):
  Defined actions.
(block:): Use new rules block_begin: block_end:.
(block_begin:, block_end:): New rules and actions.
(block_statements:): Fixed error message for explicit
  constructors.
(method_invocation:): Call build_this_super_qualified_invocation
  if primary is `this' or `super' was seen.
(conditional_expression:): Action defined.
(extra_ctxp_pushed_p): New static global flag.
(java_parser_context_save_global): Create parser context if
  necessary. Use extra_ctxp_pushed_p to remember it.
(java_parser_context_restore_global): Pop extra parser context if
  one exists.
(build_array_from_name): Array on primitive types are marked
  loaded.
(register_fields): Restore new name in field initializer
  expression if type was altered. Non static fields initialized upon
  declaration marked initialized.
(maybe_generate_finit): New function.
(maybe_generate_clinit): Use create_artificial_method,
  start_artificial_method_body, end_artificial_method_body. Generate
  debug info for enclosed initialization statements.
(method_header): Fixed leading comment. Check constructor
  flags. Detect constructor declarations and set DECL_CONSTRUCTOR_P
  accordingly.
(complete_method_declaration, constructor_circularity_msg,
  verify_constructor_circularity): New functions.
(get_printable_method_name): New function.
(check_method_redefinition): Don't rename <finit> methods. Fix
  declared constructor names. Error message for
  constructors modified.
(java_check_regular_methods): Local variable seen_constructor
  renamed saw_constructor. Skip verification on constructors. Create
  default constructor with create_artificial_method.
(java_check_methods): Removed unnecessary empty line.
(create_artificial_method, start_artificial_method_body,
  end_artificial_method_body): New functions.
(java_layout_classes): Changed leading comment. Reverse fields
  list if necessary. Always layout java.lang.Object if being
  defined.
(java_complete_expand_methods): Verify constructor circularity.
(java_complete_expand_method): Call fix_constructor on
  constructors.  Local variable no_ac_found removed. Restore
  bindings if method body expansion failed.
(fix_constructors, verify_constructor_super,
  generate_field_initialization_code): New function.
(java_expand_classes): Fixed leading comment. Write class file
  here.
(resolve_expression_name): Check for illegal instance variable
  usage within the argument scope of an explicit constructor
  invocation.
(resolve_qualified_expression_name): Pass extra from_super flag
  when invoking patch_method_invocation_stmt. New case for
  conditional expression when used as a primary. Check for error
  when acquiring super.
(patch_method_invocation_stmt): Added extra argument super. New
  local variable is_static_flag. Set class_to_search according to
  the nature of the constructor invocation. Don't add `this'
  argument when expanding NEW_CLASS_EXPR. Check for illegal method
  invocation within the argument scope of explicit constructor
  invocation. Set is_static according to is_static_flag. Provide
  extra `super' argument to patch_invoke invocation.
(patch_invoke): New argument from_super. Loop on arguments
  indentation fixed. Pass from_super to invocation_mode. New switch
  case INVOKE_SUPER. Fixed error message in switch default case.
   Don't use CALL_CONSTRUCTOR_P but rather a test on the tree node
  value.
(invocation_mode): Return INVOKE_SUPER mode when appropriate.
(lookup_method_invoke): Fixed prototypes in candidates list. Error
  message takes constructors into account.
(find_applicable_accessible_methods_list): Fixed indentation.
(qualify_ambiguous_name): Take explicit constructor invocation
  into account. Deal with a conditional expression as a primary to
  a method call.
(java_complete_tree): Added local wfl_op3. New CONDITIONAL_EXPR
  case. Added extra argument to patch_method_invocation_stmt.
  Register calls made to explicit constructor `this'. Don't call
  save_expr in ARRAY_REF case when emitting class files. Check for
  illegal use of this when expanding explicit constructor invocation
  arguments.
(complete_function_arguments): Set and reset parser context
  explicit_constructor_p field value when appropriate.
(build_super_invocation, build_this_super_qualified_invocation):
  New functions.
(patch_assignment): Fixed typo.
(patch_unaryop): Check on final fields occurs only when a decl
  exits.
(patch_return): Take constructors into account.
(patch_conditional_expr): New function.
* typeck.c (build_java_signature): Removed unnecessary empty line.
This patch implements the conditional operator, fixes the super
invokation mode, implements most of what is required for constructors
and changes the way source files are handled by the front-end.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@23403 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/java/ChangeLog
gcc/java/class.c
gcc/java/decl.c
gcc/java/java-tree.def
gcc/java/java-tree.h
gcc/java/jcf-parse.c
gcc/java/lang.c
gcc/java/parse.c
gcc/java/parse.h
gcc/java/parse.y
gcc/java/typeck.c

index daae986..2f4383e 100644 (file)
@@ -1,3 +1,146 @@
+Wed Oct 28 08:03:31 1998  Alexandre Petit-Bianco  <apbianco@cygnus.com>
+
+       * class.c (layout_class): Don't mangle <finit>, produce
+       __finit<class> instead. Don't verify artificial methods.
+       * decl.c (finit_identifier_node): New declared global.
+       (init_decl_processing): finit_identifier_node initialized.
+       * java-tree.def (CONDITIONAL_EXPR): New Java tree code.
+       * java-tree.h (finit_identifier_node): Declared as extern.
+       (struct lang_decl): New field called_constructor.
+       (DECL_CONSTRUCTOR_CALLS): Access macro to called_constructor.
+       (CLASS_HAS_FINIT_P): New macro.
+       (CALL_CONSTRUCTOR_P): Leading comment changed. Macro now checks
+       explicit constructor invocation.
+       (CALL_EXPLICIT_CONSTRUCTOR_P, CALL_THIS_CONSTRUCTOR_P,
+       CALL_SUPER_CONSTRUCTOR_P): New macros.
+       (write_classfile): Added prototype.
+       * jcf-parse.c (jcf_parse_source): Parse and remember for
+       generation if the file was seen on the command line.
+       (parse_source_file): Don't write the class file here.
+       (yyparse): Loop on files rewritten. Set current_jcf.
+       (parse_zip_file_entries): Parse class file only if it was found.
+       * lang.c (init_parse): Don't open command line provided filename
+       here.
+       (lang_parse): Don't set main_jcf anymore.
+       * parse.h (ABSTRAC_CHECK): Capitalized arguments.
+       (JCONSTRUCTOR_CHECK): New macro.
+       (JBSC_TYPE_P): New macro.
+       (IN_TRY_BLOCK_P, EXCEPTIONS_P): Fixed leading comment.
+       (COMPLETE_CHECK_OP_2): New macro.
+       (struct parse_ctxt): New field explicit_constructor_p.
+       (check_class_interface_creation): Fixed prototype indentation.
+       (patch_method_invocation_stmt): Prototype reflects added argument.
+       (patch_invoke): Likewise.
+       (complete_method_declaration, build_super_invocation,
+       verify_constructor_circularity,
+       build_this_super_qualified_invocation, get_printable_method_name,
+       patch_conditional_expr, maybe_generate_finit, fix_constructors,
+       verify_constructor_super, create_artificial_method,
+       start_artificial_method_body, end_artificial_method_body,
+       generate_field_initialization_code): New function prototypes.
+       * parse.y: Fixed leading comment
+       (constructor_header:, constructor_body:, block_end:): Rules tagged
+       <node>.
+       (type_declaration:): Call maybe_generate_finit.
+       (method_declaration:): Action for method_body: placed in new
+       function complete_method_declaration, called here.
+       (constructor_declaration:): Defined actions. Removed leading
+       FIXME.
+       (constructor_header:): New rule with action.
+       (constructor_body:): Rule rewritten using block_begin: and
+       block_end:. Defined actions.
+       (constructor_declarator:, explicit_constructor_invocation:):
+       Defined actions.
+       (block:): Use new rules block_begin: block_end:.
+       (block_begin:, block_end:): New rules and actions.
+       (block_statements:): Fixed error message for explicit
+       constructors.
+       (method_invocation:): Call build_this_super_qualified_invocation
+       if primary is `this' or `super' was seen.
+       (conditional_expression:): Action defined.
+       (extra_ctxp_pushed_p): New static global flag.
+       (java_parser_context_save_global): Create parser context if
+       necessary. Use extra_ctxp_pushed_p to remember it.
+       (java_parser_context_restore_global): Pop extra parser context if
+       one exists.
+       (build_array_from_name): Array on primitive types are marked
+       loaded.
+       (register_fields): Restore new name in field initializer
+       expression if type was altered. Non static fields initialized upon
+       declaration marked initialized.
+       (maybe_generate_finit): New function.
+       (maybe_generate_clinit): Use create_artificial_method,
+       start_artificial_method_body, end_artificial_method_body. Generate
+       debug info for enclosed initialization statements.
+       (method_header): Fixed leading comment. Check constructor
+       flags. Detect constructor declarations and set DECL_CONSTRUCTOR_P
+       accordingly.
+       (complete_method_declaration, constructor_circularity_msg,
+       verify_constructor_circularity): New functions.
+       (get_printable_method_name): New function.
+       (check_method_redefinition): Don't rename <finit> methods. Fix
+       declared constructor names. Error message for
+       constructors modified.
+       (java_check_regular_methods): Local variable seen_constructor
+       renamed saw_constructor. Skip verification on constructors. Create
+       default constructor with create_artificial_method.
+       (java_check_methods): Removed unnecessary empty line.
+       (create_artificial_method, start_artificial_method_body,
+       end_artificial_method_body): New functions.
+       (java_layout_classes): Changed leading comment. Reverse fields
+       list if necessary. Always layout java.lang.Object if being
+       defined.
+       (java_complete_expand_methods): Verify constructor circularity.
+       (java_complete_expand_method): Call fix_constructor on
+       constructors.  Local variable no_ac_found removed. Restore
+       bindings if method body expansion failed.
+       (fix_constructors, verify_constructor_super,
+       generate_field_initialization_code): New function.
+       (java_expand_classes): Fixed leading comment. Write class file
+       here.
+       (resolve_expression_name): Check for illegal instance variable
+       usage within the argument scope of an explicit constructor
+       invocation.
+       (resolve_qualified_expression_name): Pass extra from_super flag
+       when invoking patch_method_invocation_stmt. New case for
+       conditional expression when used as a primary. Check for error
+       when acquiring super.
+       (patch_method_invocation_stmt): Added extra argument super. New
+       local variable is_static_flag. Set class_to_search according to
+       the nature of the constructor invocation. Don't add `this'
+       argument when expanding NEW_CLASS_EXPR. Check for illegal method
+       invocation within the argument scope of explicit constructor
+       invocation. Set is_static according to is_static_flag. Provide
+       extra `super' argument to patch_invoke invocation.
+       (patch_invoke): New argument from_super. Loop on arguments
+       indentation fixed. Pass from_super to invocation_mode. New switch
+       case INVOKE_SUPER. Fixed error message in switch default case.
+       Don't use CALL_CONSTRUCTOR_P but rather a test on the tree node
+       value.
+       (invocation_mode): Return INVOKE_SUPER mode when appropriate.
+       (lookup_method_invoke): Fixed prototypes in candidates list. Error
+       message takes constructors into account.
+       (find_applicable_accessible_methods_list): Fixed indentation.
+       (qualify_ambiguous_name): Take explicit constructor invocation
+       into account. Deal with a conditional expression as a primary to
+       a method call.
+       (java_complete_tree): Added local wfl_op3. New CONDITIONAL_EXPR
+       case. Added extra argument to patch_method_invocation_stmt.
+       Register calls made to explicit constructor `this'. Don't call
+       save_expr in ARRAY_REF case when emitting class files. Check for
+       illegal use of this when expanding explicit constructor invocation
+       arguments.
+       (complete_function_arguments): Set and reset parser context
+       explicit_constructor_p field value when appropriate.
+       (build_super_invocation, build_this_super_qualified_invocation):
+       New functions.
+       (patch_assignment): Fixed typo.
+       (patch_unaryop): Check on final fields occurs only when a decl
+       exits.
+       (patch_return): Take constructors into account.
+       (patch_conditional_expr): New function.
+       * typeck.c (build_java_signature): Removed unnecessary empty line.
+       
 Wed Oct 28 00:46:15 1998  Jeffrey A Law  (law@cygnus.com)
 
        * Makefile.in (jcf-dump, gcjh): Link in $(LIBS) too.
index 5b7b699..4a382b9 100644 (file)
@@ -1400,7 +1400,8 @@ layout_class (this_class)
        {
          int len;  tree arg, arglist, t;
          int method_name_needs_escapes = 0;
-         if (method_name != init_identifier_node)
+         if (method_name != init_identifier_node 
+             && method_name != finit_identifier_node)
            {
              int encoded_len
                = unicode_mangling_length (IDENTIFIER_POINTER (method_name), 
@@ -1421,6 +1422,8 @@ layout_class (this_class)
            }
 
          obstack_grow (&temporary_obstack, "__", 2);
+         if (method_name == finit_identifier_node)
+           obstack_grow (&temporary_obstack, "finit", 5);
          append_gpp_mangled_type (&temporary_obstack, this_class);
          TREE_PUBLIC (method_decl) = 1;
 
@@ -1492,7 +1495,7 @@ layout_class (this_class)
          DECL_NAME (method_decl) = get_identifier (p);
          DECL_CONSTRUCTOR_P (method_decl) = 1;
        }
-      else if (! METHOD_STATIC (method_decl))
+      else if (! METHOD_STATIC (method_decl) && !DECL_ARTIFICIAL (method_decl))
        {
          tree method_sig = build_java_argument_signature (TREE_TYPE (method_decl));
          tree super_method = lookup_argument_method (super_class, method_name,
index b2370c1..a49f22b 100644 (file)
@@ -325,6 +325,7 @@ tree boolean_true_node, boolean_false_node;
 tree TYPE_identifier_node;
 tree init_identifier_node;
 tree clinit_identifier_node;
+tree finit_identifier_node;
 tree void_signature_node;
 tree length_identifier_node;
 tree this_identifier_node;
@@ -533,6 +534,7 @@ init_decl_processing ()
   TYPE_identifier_node = get_identifier ("TYPE");
   init_identifier_node = get_identifier ("<init>");
   clinit_identifier_node = get_identifier ("<clinit>");
+  finit_identifier_node = get_identifier ("<finit>");
   void_signature_node = get_identifier ("()V");
   length_identifier_node = get_identifier ("length");
   this_identifier_node = get_identifier ("this");
index bdaf300..5bd63c4 100644 (file)
@@ -64,3 +64,9 @@ DEFTREECODE (SYNCHRONIZED_EXPR, "synchronized", 'e', 2)
 /* Throw statement.
    Operand 0 is the throw expresion.  */
 DEFTREECODE (THROW_EXPR, "throw", '1', 1)
+
+/* Conditional operator.
+   Operand 0 is the condition expression
+   Operand 1 is the then-value
+   Operand 2 is the else-value.  */
+DEFTREECODE (CONDITIONAL_EXPR, "?:", 'e', 3)
index dd0ede8..711e441 100644 (file)
@@ -61,6 +61,7 @@ struct JCF;
    3: CLASS_FROM_SOURCE_P (in RECORD_TYPE).
    4: CLASS_P (in RECORD_TYPE).
    5: CLASS_FROM_CURRENTLY_COMPILED_SOURCE_P (in RECORD_TYPE)
+   6: CLASS_HAS_FINIT_P (in RECORD_TYPE)
 
    Usage of DECL_LANG_FLAG_?:
    1: METHOD_PUBLIC (in FUNCTION_DECL).
@@ -195,6 +196,7 @@ extern tree string_array_type_node;
 extern tree TYPE_identifier_node;      /* "TYPE" */
 extern tree init_identifier_node;      /* "<init>" */
 extern tree clinit_identifier_node;      /* "<clinit>" */
+extern tree finit_identifier_node;      /* "<finit>" */
 extern tree void_signature_node;       /* "()V" */
 extern tree length_identifier_node;  /* "length" */
 extern tree this_identifier_node;  /* "this" */
@@ -324,6 +326,10 @@ struct lang_identifier
 /* List of checked thrown exceptions, as specified with the `throws'
    keyword */
 #define DECL_FUNCTION_THROWS(DECL) (DECL_LANG_SPECIFIC(DECL)->throws_list)
+/* List of other constructors of the same class that this constructor
+   calls */
+#define DECL_CONSTRUCTOR_CALLS(DECL) \
+  (DECL_LANG_SPECIFIC(DECL)->called_constructor)
 /* Pointer to the function's current's COMPOUND_EXPR tree (while
    completing its body) or the function's block */
 #define DECL_FUNCTION_BODY(DECL) (DECL_LANG_SPECIFIC(DECL)->function_decl_body)
@@ -403,6 +409,8 @@ struct lang_decl
   int max_locals, max_stack, arg_slot_count;
   tree throws_list;            /* Exception specified by `throws' */
   tree function_decl_body;     /* Hold all function's statements */
+  tree called_constructor;     /* When decl is a constructor, the
+                                  list of other constructor it calls. */
 };
 
 /* DECL_LANG_SPECIFIC for VAR_DECL and PARM_DECL. */
@@ -524,6 +532,7 @@ extern void register_class PROTO (());
 extern int alloc_name_constant PROTO ((int, tree));
 extern void emit_register_classes PROTO (());
 extern void lang_init_source PROTO ((int));
+extern void write_classfile PROTO ((tree));
 
 /* Access flags etc for a method (a FUNCTION_DECL): */
 
@@ -661,6 +670,9 @@ extern tree *type_map;
 #define CLASS_FROM_CURRENTLY_COMPILED_SOURCE_P(TYPE) \
   TYPE_LANG_FLAG_5 (TYPE)
 
+/* True if class TYPE has a field initializer <finit> function */
+#define CLASS_HAS_FINIT_P(TYPE) TYPE_LANG_FLAG_6 (TYPE)
+
 /* True if identifier ID was seen while processing a single type import stmt */
 #define IS_A_SINGLE_IMPORT_CLASSFILE_NAME_P(ID) TREE_LANG_FLAG_0 (ID)
 
@@ -754,8 +766,20 @@ extern tree *type_map;
 #define FINISH_RECORD_CONSTRUCTOR(CONS) \
   CONSTRUCTOR_ELTS(CONS) = nreverse (CONSTRUCTOR_ELTS(CONS))
 
-/* Macro(s) using the definitions above */
-#define CALL_CONSTRUCTOR_P(NODE) (TREE_CODE (NODE) == NEW_CLASS_EXPR)
+/* Macros on constructors invocations.  */
+#define CALL_CONSTRUCTOR_P(NODE)               \
+  (TREE_CODE (NODE) == NEW_CLASS_EXPR || CALL_EXPLICIT_CONSTRUCTOR_P (NODE))
+
+#define CALL_EXPLICIT_CONSTRUCTOR_P(NODE)                              \
+  (CALL_THIS_CONSTRUCTOR_P (NODE) || CALL_SUPER_CONSTRUCTOR_P (NODE))
+
+#define CALL_THIS_CONSTRUCTOR_P(NODE)                                  \
+  (TREE_CODE (NODE) == CALL_EXPR                                       \
+   && EXPR_WFL_NODE (TREE_OPERAND (NODE, 0)) == this_identifier_node)
+
+#define CALL_SUPER_CONSTRUCTOR_P(NODE)                                 \
+  (TREE_CODE (NODE) == CALL_EXPR                                       \
+   && EXPR_WFL_NODE (TREE_OPERAND (NODE, 0)) == super_identifier_node)
 
 /* Using a FINALLY_EXPR node */
 #define FINALLY_EXPR_LABEL(NODE) TREE_OPERAND ((NODE), 0)
index 609a80c..0761362 100644 (file)
@@ -506,13 +506,14 @@ int
 jcf_parse_source (jcf)
      JCF *jcf;
 {
+  tree filename = get_identifier (input_filename);
   java_parser_context_save_global ();
 
   input_filename = current_jcf->filename;
   if (!(finput = fopen (input_filename, "r")))
     fatal ("input file `%s' just disappeared - jcf_parse_source",
           input_filename);
-  parse_source_file (1);       /* Parse only */
+  parse_source_file (IS_A_COMMAND_LINE_FILENAME_P (filename));
   java_parser_context_restore_global ();
 }
 
@@ -686,9 +687,6 @@ parse_source_file (parse_only)
   java_layout_classes ();
   java_parse_abort_on_error ();
 
-  if (flag_emit_class_files)
-    write_classfile (current_class);
-
   /* If only parsing, make sure that the currently parsed file isn't
      also present in the argument list. If it's the case, remember
      that we should generate it. */
@@ -737,33 +735,35 @@ yyparse ()
     }
   while (next);
 
+  current_jcf = main_jcf;
   current_file_list = nreverse (current_file_list);
   for (node = current_file_list; node; node = TREE_CHAIN (node))
     {
-      /* Don't substitute if INPUT_FILENAME doesn't feature the &
-         separator: we have only one file to deal with, we're fine */
-      if (several_files)
-       {
-         tree name = TREE_VALUE (node);
+      tree name = TREE_VALUE (node);
 
-         /* Skip already parsed files */
-         if (HAS_BEEN_ALREADY_PARSED_P (name))
-           continue;
-
-         /* Close previous descriptor, if any */
-         if (main_jcf->read_state && fclose (main_jcf->read_state))
-           fatal ("failed to close input file `%s' - yyparse",
-                  (main_jcf->filename ? main_jcf->filename : "<unknown>"));
-
-         /* Open new file */
-         main_jcf->read_state = fopen (IDENTIFIER_POINTER (name), "r");
-         if (main_jcf->read_state == NULL)
-           pfatal_with_name (IDENTIFIER_POINTER (name));
-
-         /* Set new input_filename and finput */
-         input_filename = IDENTIFIER_POINTER (name);
-         finput = main_jcf->read_state;
-       }
+      /* Skip already parsed files */
+      if (HAS_BEEN_ALREADY_PARSED_P (name))
+       continue;
+      
+      /* Close previous descriptor, if any */
+      if (main_jcf->read_state && fclose (main_jcf->read_state))
+       fatal ("failed to close input file `%s' - yyparse",
+              (main_jcf->filename ? main_jcf->filename : "<unknown>"));
+      
+      /* Set jcf up and open a new file */
+      JCF_ZERO (main_jcf);
+      main_jcf->read_state = fopen (IDENTIFIER_POINTER (name), "r");
+      if (main_jcf->read_state == NULL)
+       pfatal_with_name (IDENTIFIER_POINTER (name));
+      
+      /* Set new input_filename and finput */
+      finput = main_jcf->read_state;
+#ifdef IO_BUFFER_SIZE
+      setvbuf (finput, (char *) xmalloc (IO_BUFFER_SIZE),
+              _IOFBF, IO_BUFFER_SIZE);
+#endif
+      input_filename = IDENTIFIER_POINTER (name);
+      main_jcf->filbuf = jcf_filbuf_from_stdio;
 
       switch (jcf_figure_file_type (current_jcf))
        {
@@ -813,14 +813,16 @@ parse_zip_file_entries (void)
          jcf_parse (current_jcf);
        }
 
-      input_filename = current_jcf->filename;
-
-      parse_class_file ();
-      FREE (current_jcf->buffer); /* No longer necessary */
-      /* Note: there is a way to free this buffer right after a class seen
-        in a zip file has been parsed. The idea is the set its jcf in such
-        a way that buffer will be reallocated the time the code for the class
-        will be generated. FIXME.  */
+      if (TYPE_SIZE (current_class) != error_mark_node)
+       {
+         input_filename = current_jcf->filename;
+         parse_class_file ();
+         FREE (current_jcf->buffer); /* No longer necessary */
+         /* Note: there is a way to free this buffer right after a
+            class seen in a zip file has been parsed. The idea is the
+            set its jcf in such a way that buffer will be reallocated
+            the time the code for the class will be generated. FIXME. */
+       }
     }
 }
 
index 96debd0..14c0ed3 100644 (file)
@@ -259,15 +259,7 @@ init_parse (filename)
              free (buf);
            }
        }
-
-      finput = fopen (filename, "r");
     }
-  if (finput == 0)
-    pfatal_with_name (filename);
-
-#ifdef IO_BUFFER_SIZE
-  setvbuf (finput, (char *) xmalloc (IO_BUFFER_SIZE), _IOFBF, IO_BUFFER_SIZE);
-#endif
   init_lex ();
 
   return filename;
@@ -454,11 +446,6 @@ lang_init ()
   print_error_function = lang_print_error;
   lang_expand_expr = java_lang_expand_expr;
 
-  JCF_ZERO (main_jcf);
-  main_jcf->read_state = finput;
-  main_jcf->filbuf = jcf_filbuf_from_stdio;
-  current_jcf = main_jcf;
-
   flag_exceptions = 1;
 
   /* Append to Gcc tree node definition arrays */
index 50d092a..2775f3c 100644 (file)
 #define        BOOL_LIT_TK     363
 #define        NULL_TK 364
 
-#line 49 "./parse.y"
+#line 48 "./parse.y"
 
 #include <stdio.h>
 #include <stdlib.h>
@@ -188,7 +188,7 @@ static tree wfl_append = NULL_TREE;
 /* The "toString" identifier used for String `+' operator. */
 static tree wfl_to_string = NULL_TREE;
 
-#line 117 "./parse.y"
+#line 116 "./parse.y"
 typedef union {
   tree node;
   int sub_token;
@@ -212,11 +212,11 @@ typedef union {
 
 
 
-#define        YYFINAL         775
+#define        YYFINAL         776
 #define        YYFLAG          -32768
 #define        YYNTBASE        110
 
-#define YYTRANSLATE(x) ((unsigned)(x) <= 364 ? yytranslate[x] : 262)
+#define YYTRANSLATE(x) ((unsigned)(x) <= 364 ? yytranslate[x] : 265)
 
 static const char yytranslate[] = {     0,
      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
@@ -273,43 +273,43 @@ static const short yyprhs[] = {     0,
    292,   294,   296,   297,   301,   304,   308,   312,   317,   322,
    325,   329,   332,   336,   339,   343,   348,   352,   356,   360,
    362,   366,   370,   373,   377,   380,   384,   385,   388,   391,
-   393,   397,   401,   403,   406,   408,   411,   415,   417,   421,
-   426,   431,   437,   441,   446,   449,   453,   457,   462,   467,
-   473,   481,   488,   490,   492,   493,   498,   499,   505,   506,
-   512,   513,   520,   524,   529,   532,   536,   539,   543,   546,
-   550,   552,   555,   557,   559,   561,   563,   565,   568,   571,
-   574,   578,   582,   587,   589,   593,   597,   600,   601,   606,
-   608,   611,   613,   615,   617,   620,   623,   627,   629,   631,
-   633,   635,   637,   639,   641,   643,   645,   647,   649,   651,
-   653,   655,   657,   659,   661,   663,   665,   667,   669,   671,
-   673,   676,   679,   682,   685,   688,   691,   694,   697,   701,
-   706,   711,   717,   722,   728,   735,   743,   750,   752,   754,
-   756,   758,   760,   762,   764,   770,   773,   777,   782,   790,
-   798,   801,   806,   809,   813,   819,   822,   826,   830,   835,
-   837,   840,   843,   845,   847,   850,   854,   857,   860,   864,
-   867,   872,   875,   878,   882,   887,   890,   892,   900,   908,
-   915,   919,   925,   930,   938,   945,   948,   951,   955,   958,
-   959,   961,   963,   966,   967,   969,   971,   975,   979,   982,
-   986,   989,   993,   996,  1000,  1003,  1007,  1010,  1014,  1017,
-  1021,  1025,  1028,  1032,  1038,  1044,  1047,  1052,  1056,  1058,
-  1062,  1066,  1071,  1074,  1076,  1079,  1082,  1087,  1090,  1094,
-  1099,  1102,  1105,  1107,  1109,  1111,  1113,  1117,  1119,  1121,
-  1123,  1125,  1129,  1133,  1137,  1141,  1145,  1149,  1153,  1157,
-  1163,  1168,  1175,  1181,  1186,  1192,  1198,  1205,  1209,  1213,
-  1218,  1224,  1227,  1231,  1235,  1239,  1241,  1245,  1249,  1253,
-  1257,  1262,  1267,  1272,  1277,  1281,  1285,  1287,  1290,  1294,
-  1298,  1301,  1304,  1308,  1312,  1316,  1320,  1323,  1327,  1332,
-  1338,  1345,  1351,  1358,  1363,  1368,  1373,  1378,  1382,  1387,
-  1391,  1396,  1398,  1400,  1402,  1404,  1407,  1410,  1412,  1414,
-  1417,  1420,  1422,  1425,  1428,  1431,  1434,  1437,  1440,  1442,
-  1445,  1448,  1450,  1453,  1456,  1462,  1467,  1472,  1478,  1483,
-  1486,  1492,  1497,  1503,  1505,  1509,  1513,  1517,  1521,  1525,
-  1529,  1531,  1535,  1539,  1543,  1547,  1549,  1553,  1557,  1561,
-  1565,  1569,  1573,  1575,  1579,  1583,  1587,  1591,  1595,  1599,
-  1603,  1607,  1611,  1615,  1617,  1621,  1625,  1629,  1633,  1635,
-  1639,  1643,  1645,  1649,  1653,  1655,  1659,  1663,  1665,  1669,
-  1673,  1675,  1679,  1683,  1685,  1691,  1696,  1700,  1706,  1708,
-  1710,  1714,  1718,  1720,  1722,  1724,  1726,  1728,  1730
+   393,   397,   401,   403,   406,   408,   411,   415,   417,   418,
+   422,   425,   429,   433,   438,   441,   445,   449,   454,   459,
+   465,   473,   480,   482,   484,   485,   490,   491,   497,   498,
+   504,   505,   512,   516,   521,   524,   528,   531,   535,   538,
+   542,   544,   547,   549,   551,   553,   555,   557,   560,   563,
+   566,   570,   574,   579,   581,   585,   589,   592,   596,   598,
+   600,   602,   605,   607,   609,   611,   614,   617,   621,   623,
+   625,   627,   629,   631,   633,   635,   637,   639,   641,   643,
+   645,   647,   649,   651,   653,   655,   657,   659,   661,   663,
+   665,   667,   670,   673,   676,   679,   682,   685,   688,   691,
+   695,   700,   705,   711,   716,   722,   729,   737,   744,   746,
+   748,   750,   752,   754,   756,   758,   764,   767,   771,   776,
+   784,   792,   795,   800,   803,   807,   813,   816,   820,   824,
+   829,   831,   834,   837,   839,   841,   844,   848,   851,   854,
+   858,   861,   866,   869,   872,   876,   881,   884,   886,   894,
+   902,   909,   913,   919,   924,   932,   939,   942,   945,   949,
+   952,   953,   955,   957,   960,   961,   963,   965,   969,   973,
+   976,   980,   983,   987,   990,   994,   997,  1001,  1004,  1008,
+  1011,  1015,  1019,  1022,  1026,  1032,  1038,  1041,  1046,  1050,
+  1052,  1056,  1060,  1065,  1068,  1070,  1073,  1076,  1081,  1084,
+  1088,  1093,  1096,  1099,  1101,  1103,  1105,  1107,  1111,  1113,
+  1115,  1117,  1119,  1123,  1127,  1131,  1135,  1139,  1143,  1147,
+  1151,  1157,  1162,  1169,  1175,  1180,  1186,  1192,  1199,  1203,
+  1207,  1212,  1218,  1221,  1225,  1229,  1233,  1235,  1239,  1243,
+  1247,  1251,  1256,  1261,  1266,  1271,  1275,  1279,  1281,  1284,
+  1288,  1292,  1295,  1298,  1302,  1306,  1310,  1314,  1317,  1321,
+  1326,  1332,  1339,  1345,  1352,  1357,  1362,  1367,  1372,  1376,
+  1381,  1385,  1390,  1392,  1394,  1396,  1398,  1401,  1404,  1406,
+  1408,  1411,  1414,  1416,  1419,  1422,  1425,  1428,  1431,  1434,
+  1436,  1439,  1442,  1444,  1447,  1450,  1456,  1461,  1466,  1472,
+  1477,  1480,  1486,  1491,  1497,  1499,  1503,  1507,  1511,  1515,
+  1519,  1523,  1525,  1529,  1533,  1537,  1541,  1543,  1547,  1551,
+  1555,  1559,  1563,  1567,  1569,  1573,  1577,  1581,  1585,  1589,
+  1593,  1597,  1601,  1605,  1609,  1611,  1615,  1619,  1623,  1627,
+  1629,  1633,  1637,  1639,  1643,  1647,  1649,  1653,  1657,  1659,
+  1663,  1667,  1669,  1673,  1677,  1679,  1685,  1690,  1694,  1700,
+  1702,  1704,  1708,  1712,  1714,  1716,  1718,  1720,  1722,  1724
 };
 
 static const short yyrhs[] = {   123,
@@ -327,7 +327,7 @@ static const short yyrhs[] = {   123,
     55,   119,    99,     0,    55,     1,     0,    55,   119,     1,
      0,    55,   119,   101,     5,    99,     0,    55,   119,   101,
      1,     0,    55,   119,   101,     5,     1,     0,   132,     0,
-   163,     0,    99,     0,     1,     0,    44,     0,   131,    44,
+   165,     0,    99,     0,     1,     0,    44,     0,   131,    44,
      0,     0,   131,    67,   122,   135,   136,   133,   138,     0,
      0,    67,   122,   135,   136,   134,   138,     0,   131,    67,
      1,     0,    67,     1,     0,    67,   122,     1,     0,   131,
@@ -336,13 +336,13 @@ static const short yyrhs[] = {   123,
      1,     0,   117,     0,   137,   100,   117,     0,   137,   100,
      1,     0,    95,    96,     0,    95,   139,    96,     0,   140,
      0,   139,   140,     0,   141,     0,   156,     0,   158,     0,
-   176,     0,   142,     0,   147,     0,   132,     0,   163,     0,
+   178,     0,   142,     0,   147,     0,   132,     0,   165,     0,
    112,   143,    99,     0,   131,   112,   143,    99,     0,   144,
      0,   143,   100,   144,     0,   143,   100,     1,     0,   145,
      0,   145,    92,   146,     0,   145,    92,     1,     0,   145,
     92,   146,     1,     0,   122,     0,   145,    97,    98,     0,
    122,     1,     0,   145,    97,     1,     0,   145,    98,     1,
-     0,   260,     0,   174,     0,     0,   149,   148,   155,     0,
+     0,   263,     0,   176,     0,     0,   149,   148,   155,     0,
    149,     1,     0,   112,   150,   153,     0,    59,   150,   153,
      0,   131,   112,   150,   153,     0,   131,    59,   150,   153,
      0,   112,     1,     0,   131,   112,     1,     0,    59,     1,
@@ -353,196 +353,195 @@ static const short yyrhs[] = {   123,
    145,     0,   131,   112,   145,     0,   112,     1,     0,   131,
    112,     1,     0,     0,    53,   154,     0,    53,     1,     0,
    116,     0,   154,   100,   116,     0,   154,   100,     1,     0,
-   176,     0,   176,    99,     0,    99,     0,   157,   176,     0,
-   157,   176,    99,     0,    44,     0,   159,   153,   160,     0,
-   131,   159,   153,   160,     0,   159,   153,   160,    99,     0,
-   131,   159,   153,   160,    99,     0,   120,    93,    94,     0,
-   120,    93,   151,    94,     0,    95,    96,     0,    95,   161,
-    96,     0,    95,   178,    96,     0,    95,   161,   178,    96,
-     0,   162,    93,    94,    99,     0,   162,    93,   229,    94,
-    99,     0,   119,   101,    65,    93,   229,    94,    99,     0,
-   119,   101,    65,    93,    94,    99,     0,    76,     0,    65,
-     0,     0,    61,   122,   164,   169,     0,     0,   131,    61,
-   122,   165,   169,     0,     0,    61,   122,   168,   166,   169,
-     0,     0,   131,    61,   122,   168,   167,   169,     0,    61,
-   122,     1,     0,   131,    61,   122,     1,     0,    63,   117,
-     0,   168,   100,   117,     0,    63,     1,     0,   168,   100,
-     1,     0,    95,    96,     0,    95,   170,    96,     0,   171,
-     0,   170,   171,     0,   172,     0,   173,     0,   132,     0,
-   163,     0,   142,     0,   149,    99,     0,   149,     1,     0,
-    95,    96,     0,    95,   175,    96,     0,    95,   100,    96,
-     0,    95,   175,   100,    96,     0,   146,     0,   175,   100,
-   146,     0,   175,   100,     1,     0,    95,    96,     0,     0,
-    95,   177,   178,    96,     0,   179,     0,   178,   179,     0,
-   180,     0,   182,     0,   132,     0,   181,    99,     0,   112,
-   143,     0,   131,   112,   143,     0,   184,     0,   187,     0,
-   191,     0,   192,     0,   203,     0,   207,     0,   184,     0,
-   188,     0,   193,     0,   204,     0,   208,     0,   176,     0,
-   185,     0,   189,     0,   194,     0,   206,     0,   214,     0,
-   215,     0,   216,     0,   218,     0,   217,     0,   220,     0,
-    99,     0,   122,    88,     0,   186,   182,     0,   122,     1,
-     0,   186,   183,     0,   190,    99,     0,     1,    99,     0,
-     1,    95,     0,     1,    96,     0,   162,    93,     1,     0,
-   162,    93,    94,     1,     0,   162,    93,   229,     1,     0,
-   162,    93,   229,    94,     1,     0,   119,   101,    65,     1,
-     0,   119,   101,    65,    93,     1,     0,   119,   101,    65,
-    93,   229,     1,     0,   119,   101,    65,    93,   229,    94,
-     1,     0,   119,   101,    65,    93,    94,     1,     0,   257,
-     0,   241,     0,   242,     0,   238,     0,   239,     0,   235,
-     0,   227,     0,    48,    93,   260,    94,   182,     0,    48,
-     1,     0,    48,    93,     1,     0,    48,    93,   260,     1,
-     0,    48,    93,   260,    94,   183,    56,   182,     0,    48,
-    93,   260,    94,   183,    56,   183,     0,   195,   196,     0,
-    68,    93,   260,    94,     0,    68,     1,     0,    68,    93,
-     1,     0,    68,    93,   260,    94,     1,     0,    95,    96,
-     0,    95,   200,    96,     0,    95,   197,    96,     0,    95,
-   197,   200,    96,     0,   198,     0,   197,   198,     0,   199,
-   178,     0,   200,     0,   201,     0,   200,   201,     0,    62,
-   261,    88,     0,    47,    88,     0,    62,     1,     0,    62,
-   261,     1,     0,    47,     1,     0,    66,    93,   260,    94,
-     0,   202,   182,     0,    66,     1,     0,    66,    93,     1,
-     0,    66,    93,   260,     1,     0,   202,   183,     0,    51,
-     0,   205,   182,    66,    93,   260,    94,    99,     0,   210,
-    99,   260,    99,   212,    94,   182,     0,   210,    99,    99,
-   212,    94,   182,     0,   210,    99,     1,     0,   210,    99,
-   260,    99,     1,     0,   210,    99,    99,     1,     0,   210,
-    99,   260,    99,   212,    94,   183,     0,   210,    99,    99,
-   212,    94,   183,     0,    71,    93,     0,    71,     1,     0,
-    71,    93,     1,     0,   209,   211,     0,     0,   213,     0,
-   181,     0,   213,     1,     0,     0,   213,     0,   190,     0,
-   213,   100,   190,     0,   213,   100,     1,     0,    54,    99,
-     0,    54,   122,    99,     0,    54,     1,     0,    54,   122,
-     1,     0,    73,    99,     0,    73,   122,    99,     0,    73,
-     1,     0,    73,   122,     1,     0,    58,    99,     0,    58,
-   260,    99,     0,    58,     1,     0,    58,   260,     1,     0,
-    49,   260,    99,     0,    49,     1,     0,    49,   260,     1,
-     0,   219,    93,   260,    94,   176,     0,   219,    93,   260,
-    94,     1,     0,   219,     1,     0,   219,    93,     1,    94,
-     0,   219,    93,     1,     0,    44,     0,    70,   176,   221,
-     0,    70,   176,   224,     0,    70,   176,   221,   224,     0,
-    70,     1,     0,   222,     0,   221,   222,     0,   223,   176,
-     0,    60,    93,   152,    94,     0,    60,     1,     0,    60,
-    93,     1,     0,    60,    93,     1,    94,     0,    64,   176,
-     0,    64,     1,     0,   226,     0,   230,     0,   111,     0,
-    76,     0,    93,   260,    94,     0,   227,     0,   234,     0,
-   235,     0,   236,     0,   119,   101,    67,     0,   113,   101,
-    67,     0,    59,   101,    67,     0,   119,   101,    76,     0,
-    93,   260,     1,     0,   119,   101,     1,     0,   113,   101,
-     1,     0,    59,   101,     1,     0,    72,   116,    93,   229,
-    94,     0,    72,   116,    93,    94,     0,    72,   116,    93,
-   229,    94,   138,     0,    72,   116,    93,    94,   138,     0,
-   228,   122,    93,    94,     0,   228,   122,    93,    94,   138,
-     0,   228,   122,    93,   229,    94,     0,   228,   122,    93,
-   229,    94,   138,     0,    72,     1,    99,     0,    72,   116,
-     1,     0,    72,   116,    93,     1,     0,    72,   116,    93,
-   229,     1,     0,   228,     1,     0,   228,   122,     1,     0,
-   119,   101,    72,     0,   225,   101,    72,     0,   260,     0,
-   229,   100,   260,     0,   229,   100,     1,     0,    72,   113,
-   231,     0,    72,   115,   231,     0,    72,   113,   231,   233,
-     0,    72,   115,   231,   233,     0,    72,   115,   233,   174,
-     0,    72,   113,   233,   174,     0,    72,     1,    98,     0,
-    72,     1,    97,     0,   232,     0,   231,   232,     0,    97,
-   260,    98,     0,    97,   260,     1,     0,    97,     1,     0,
-    97,    98,     0,   233,    97,    98,     0,   233,    97,     1,
-     0,   225,   101,   122,     0,    65,   101,   122,     0,    65,
-     1,     0,   119,    93,    94,     0,   119,    93,   229,    94,
-     0,   225,   101,   122,    93,    94,     0,   225,   101,   122,
-    93,   229,    94,     0,    65,   101,   122,    93,    94,     0,
-    65,   101,   122,    93,   229,    94,     0,    65,   101,     1,
-    94,     0,    65,   101,     1,   101,     0,   119,    97,   260,
-    98,     0,   226,    97,   260,    98,     0,   119,    97,     1,
-     0,   119,    97,   260,     1,     0,   226,    97,     1,     0,
-   226,    97,   260,     1,     0,   225,     0,   119,     0,   238,
-     0,   239,     0,   237,    46,     0,   237,    45,     0,   241,
-     0,   242,     0,     3,   240,     0,     4,   240,     0,   243,
-     0,     3,     1,     0,     4,     1,     0,    46,   240,     0,
-    46,     1,     0,    45,   240,     0,    45,     1,     0,   237,
-     0,    89,   240,     0,    90,   240,     0,   244,     0,    89,
-     1,     0,    90,     1,     0,    93,   113,   233,    94,   240,
-     0,    93,   113,    94,   240,     0,    93,   260,    94,   243,
-     0,    93,   119,   233,    94,   243,     0,    93,   113,    97,
-     1,     0,    93,     1,     0,    93,   113,   233,    94,     1,
-     0,    93,   113,    94,     1,     0,    93,   119,   233,    94,
-     1,     0,   240,     0,   245,     5,   240,     0,   245,     6,
-   240,     0,   245,     7,   240,     0,   245,     5,     1,     0,
-   245,     6,     1,     0,   245,     7,     1,     0,   245,     0,
-   246,     3,   245,     0,   246,     4,   245,     0,   246,     3,
-     1,     0,   246,     4,     1,     0,   246,     0,   247,     8,
-   246,     0,   247,     9,   246,     0,   247,    10,   246,     0,
-   247,     8,     1,     0,   247,     9,     1,     0,   247,    10,
-     1,     0,   247,     0,   248,    20,   247,     0,   248,    18,
-   247,     0,   248,    21,   247,     0,   248,    19,   247,     0,
-   248,    57,   114,     0,   248,    20,     1,     0,   248,    18,
-     1,     0,   248,    21,     1,     0,   248,    19,     1,     0,
-   248,    57,     1,     0,   248,     0,   249,    16,   248,     0,
-   249,    17,   248,     0,   249,    16,     1,     0,   249,    17,
-     1,     0,   249,     0,   250,    11,   249,     0,   250,    11,
-     1,     0,   250,     0,   251,    12,   250,     0,   251,    12,
-     1,     0,   251,     0,   252,    13,   251,     0,   252,    13,
-     1,     0,   252,     0,   253,    14,   252,     0,   253,    14,
-     1,     0,   253,     0,   254,    15,   253,     0,   254,    15,
-     1,     0,   254,     0,   254,    87,   260,    88,   255,     0,
-   254,    87,    88,     1,     0,   254,    87,     1,     0,   254,
-    87,   260,    88,     1,     0,   255,     0,   257,     0,   258,
-   259,   256,     0,   258,   259,     1,     0,   119,     0,   234,
-     0,   236,     0,    91,     0,    92,     0,   256,     0,   260,
-     0
+   178,     0,   178,    99,     0,    99,     0,   157,   178,     0,
+   157,   178,    99,     0,    44,     0,     0,   160,   159,   162,
+     0,   161,   153,     0,   131,   161,   153,     0,   120,    93,
+    94,     0,   120,    93,   151,    94,     0,   179,   180,     0,
+   179,   163,   180,     0,   179,   181,   180,     0,   179,   163,
+   181,   180,     0,   164,    93,    94,    99,     0,   164,    93,
+   232,    94,    99,     0,   119,   101,    65,    93,   232,    94,
+    99,     0,   119,   101,    65,    93,    94,    99,     0,    76,
+     0,    65,     0,     0,    61,   122,   166,   171,     0,     0,
+   131,    61,   122,   167,   171,     0,     0,    61,   122,   170,
+   168,   171,     0,     0,   131,    61,   122,   170,   169,   171,
+     0,    61,   122,     1,     0,   131,    61,   122,     1,     0,
+    63,   117,     0,   170,   100,   117,     0,    63,     1,     0,
+   170,   100,     1,     0,    95,    96,     0,    95,   172,    96,
+     0,   173,     0,   172,   173,     0,   174,     0,   175,     0,
+   132,     0,   165,     0,   142,     0,   149,    99,     0,   149,
+     1,     0,    95,    96,     0,    95,   177,    96,     0,    95,
+   100,    96,     0,    95,   177,   100,    96,     0,   146,     0,
+   177,   100,   146,     0,   177,   100,     1,     0,    95,    96,
+     0,   179,   181,   180,     0,    95,     0,    96,     0,   182,
+     0,   181,   182,     0,   183,     0,   185,     0,   132,     0,
+   184,    99,     0,   112,   143,     0,   131,   112,   143,     0,
+   187,     0,   190,     0,   194,     0,   195,     0,   206,     0,
+   210,     0,   187,     0,   191,     0,   196,     0,   207,     0,
+   211,     0,   178,     0,   188,     0,   192,     0,   197,     0,
+   209,     0,   217,     0,   218,     0,   219,     0,   221,     0,
+   220,     0,   223,     0,    99,     0,   122,    88,     0,   189,
+   185,     0,   122,     1,     0,   189,   186,     0,   193,    99,
+     0,     1,    99,     0,     1,    95,     0,     1,    96,     0,
+   164,    93,     1,     0,   164,    93,    94,     1,     0,   164,
+    93,   232,     1,     0,   164,    93,   232,    94,     1,     0,
+   119,   101,    65,     1,     0,   119,   101,    65,    93,     1,
+     0,   119,   101,    65,    93,   232,     1,     0,   119,   101,
+    65,    93,   232,    94,     1,     0,   119,   101,    65,    93,
+    94,     1,     0,   260,     0,   244,     0,   245,     0,   241,
+     0,   242,     0,   238,     0,   230,     0,    48,    93,   263,
+    94,   185,     0,    48,     1,     0,    48,    93,     1,     0,
+    48,    93,   263,     1,     0,    48,    93,   263,    94,   186,
+    56,   185,     0,    48,    93,   263,    94,   186,    56,   186,
+     0,   198,   199,     0,    68,    93,   263,    94,     0,    68,
+     1,     0,    68,    93,     1,     0,    68,    93,   263,    94,
+     1,     0,    95,    96,     0,    95,   203,    96,     0,    95,
+   200,    96,     0,    95,   200,   203,    96,     0,   201,     0,
+   200,   201,     0,   202,   181,     0,   203,     0,   204,     0,
+   203,   204,     0,    62,   264,    88,     0,    47,    88,     0,
+    62,     1,     0,    62,   264,     1,     0,    47,     1,     0,
+    66,    93,   263,    94,     0,   205,   185,     0,    66,     1,
+     0,    66,    93,     1,     0,    66,    93,   263,     1,     0,
+   205,   186,     0,    51,     0,   208,   185,    66,    93,   263,
+    94,    99,     0,   213,    99,   263,    99,   215,    94,   185,
+     0,   213,    99,    99,   215,    94,   185,     0,   213,    99,
+     1,     0,   213,    99,   263,    99,     1,     0,   213,    99,
+    99,     1,     0,   213,    99,   263,    99,   215,    94,   186,
+     0,   213,    99,    99,   215,    94,   186,     0,    71,    93,
+     0,    71,     1,     0,    71,    93,     1,     0,   212,   214,
+     0,     0,   216,     0,   184,     0,   216,     1,     0,     0,
+   216,     0,   193,     0,   216,   100,   193,     0,   216,   100,
+     1,     0,    54,    99,     0,    54,   122,    99,     0,    54,
+     1,     0,    54,   122,     1,     0,    73,    99,     0,    73,
+   122,    99,     0,    73,     1,     0,    73,   122,     1,     0,
+    58,    99,     0,    58,   263,    99,     0,    58,     1,     0,
+    58,   263,     1,     0,    49,   263,    99,     0,    49,     1,
+     0,    49,   263,     1,     0,   222,    93,   263,    94,   178,
+     0,   222,    93,   263,    94,     1,     0,   222,     1,     0,
+   222,    93,     1,    94,     0,   222,    93,     1,     0,    44,
+     0,    70,   178,   224,     0,    70,   178,   227,     0,    70,
+   178,   224,   227,     0,    70,     1,     0,   225,     0,   224,
+   225,     0,   226,   178,     0,    60,    93,   152,    94,     0,
+    60,     1,     0,    60,    93,     1,     0,    60,    93,     1,
+    94,     0,    64,   178,     0,    64,     1,     0,   229,     0,
+   233,     0,   111,     0,    76,     0,    93,   263,    94,     0,
+   230,     0,   237,     0,   238,     0,   239,     0,   119,   101,
+    67,     0,   113,   101,    67,     0,    59,   101,    67,     0,
+   119,   101,    76,     0,    93,   263,     1,     0,   119,   101,
+     1,     0,   113,   101,     1,     0,    59,   101,     1,     0,
+    72,   116,    93,   232,    94,     0,    72,   116,    93,    94,
+     0,    72,   116,    93,   232,    94,   138,     0,    72,   116,
+    93,    94,   138,     0,   231,   122,    93,    94,     0,   231,
+   122,    93,    94,   138,     0,   231,   122,    93,   232,    94,
+     0,   231,   122,    93,   232,    94,   138,     0,    72,     1,
+    99,     0,    72,   116,     1,     0,    72,   116,    93,     1,
+     0,    72,   116,    93,   232,     1,     0,   231,     1,     0,
+   231,   122,     1,     0,   119,   101,    72,     0,   228,   101,
+    72,     0,   263,     0,   232,   100,   263,     0,   232,   100,
+     1,     0,    72,   113,   234,     0,    72,   115,   234,     0,
+    72,   113,   234,   236,     0,    72,   115,   234,   236,     0,
+    72,   115,   236,   176,     0,    72,   113,   236,   176,     0,
+    72,     1,    98,     0,    72,     1,    97,     0,   235,     0,
+   234,   235,     0,    97,   263,    98,     0,    97,   263,     1,
+     0,    97,     1,     0,    97,    98,     0,   236,    97,    98,
+     0,   236,    97,     1,     0,   228,   101,   122,     0,    65,
+   101,   122,     0,    65,     1,     0,   119,    93,    94,     0,
+   119,    93,   232,    94,     0,   228,   101,   122,    93,    94,
+     0,   228,   101,   122,    93,   232,    94,     0,    65,   101,
+   122,    93,    94,     0,    65,   101,   122,    93,   232,    94,
+     0,    65,   101,     1,    94,     0,    65,   101,     1,   101,
+     0,   119,    97,   263,    98,     0,   229,    97,   263,    98,
+     0,   119,    97,     1,     0,   119,    97,   263,     1,     0,
+   229,    97,     1,     0,   229,    97,   263,     1,     0,   228,
+     0,   119,     0,   241,     0,   242,     0,   240,    46,     0,
+   240,    45,     0,   244,     0,   245,     0,     3,   243,     0,
+     4,   243,     0,   246,     0,     3,     1,     0,     4,     1,
+     0,    46,   243,     0,    46,     1,     0,    45,   243,     0,
+    45,     1,     0,   240,     0,    89,   243,     0,    90,   243,
+     0,   247,     0,    89,     1,     0,    90,     1,     0,    93,
+   113,   236,    94,   243,     0,    93,   113,    94,   243,     0,
+    93,   263,    94,   246,     0,    93,   119,   236,    94,   246,
+     0,    93,   113,    97,     1,     0,    93,     1,     0,    93,
+   113,   236,    94,     1,     0,    93,   113,    94,     1,     0,
+    93,   119,   236,    94,     1,     0,   243,     0,   248,     5,
+   243,     0,   248,     6,   243,     0,   248,     7,   243,     0,
+   248,     5,     1,     0,   248,     6,     1,     0,   248,     7,
+     1,     0,   248,     0,   249,     3,   248,     0,   249,     4,
+   248,     0,   249,     3,     1,     0,   249,     4,     1,     0,
+   249,     0,   250,     8,   249,     0,   250,     9,   249,     0,
+   250,    10,   249,     0,   250,     8,     1,     0,   250,     9,
+     1,     0,   250,    10,     1,     0,   250,     0,   251,    20,
+   250,     0,   251,    18,   250,     0,   251,    21,   250,     0,
+   251,    19,   250,     0,   251,    57,   114,     0,   251,    20,
+     1,     0,   251,    18,     1,     0,   251,    21,     1,     0,
+   251,    19,     1,     0,   251,    57,     1,     0,   251,     0,
+   252,    16,   251,     0,   252,    17,   251,     0,   252,    16,
+     1,     0,   252,    17,     1,     0,   252,     0,   253,    11,
+   252,     0,   253,    11,     1,     0,   253,     0,   254,    12,
+   253,     0,   254,    12,     1,     0,   254,     0,   255,    13,
+   254,     0,   255,    13,     1,     0,   255,     0,   256,    14,
+   255,     0,   256,    14,     1,     0,   256,     0,   257,    15,
+   256,     0,   257,    15,     1,     0,   257,     0,   257,    87,
+   263,    88,   258,     0,   257,    87,    88,     1,     0,   257,
+    87,     1,     0,   257,    87,   263,    88,     1,     0,   258,
+     0,   260,     0,   261,   262,   259,     0,   261,   262,     1,
+     0,   119,     0,   237,     0,   239,     0,    91,     0,    92,
+     0,   259,     0,   263,     0
 };
 
 #endif
 
 #if YYDEBUG != 0
 static const short yyrline[] = { 0,
-   271,   277,   279,   280,   281,   282,   283,   287,   289,   292,
-   294,   295,   298,   300,   303,   307,   311,   315,   321,   323,
-   325,   327,   332,   334,   337,   341,   346,   351,   353,   354,
-   355,   356,   357,   358,   359,   362,   367,   373,   375,   378,
-   381,   383,   387,   389,   392,   422,   424,   428,   441,   443,
-   447,   453,   454,   456,   466,   471,   486,   490,   493,   496,
+   270,   276,   278,   279,   280,   281,   282,   286,   288,   291,
+   293,   294,   297,   299,   302,   306,   310,   314,   320,   322,
+   324,   326,   331,   333,   336,   340,   345,   350,   352,   353,
+   354,   355,   356,   357,   358,   361,   366,   372,   374,   377,
+   380,   382,   386,   388,   391,   421,   423,   427,   440,   442,
+   446,   453,   454,   456,   466,   471,   486,   490,   493,   496,
    499,   501,   503,   505,   509,   511,   513,   515,   519,   521,
    523,   530,   536,   541,   545,   548,   552,   554,   557,   559,
    560,   561,   565,   567,   568,   570,   575,   578,   588,   591,
    593,   597,   600,   607,   613,   621,   623,   625,   627,   629,
-   633,   635,   640,   647,   659,   663,   666,   668,   670,   672,
-   674,   676,   678,   680,   687,   690,   692,   697,   699,   703,
-   708,   713,   717,   722,   724,   726,   733,   735,   737,   741,
-   744,   746,   750,   752,   753,   758,   763,   769,   781,   786,
-   792,   797,   806,   808,   811,   813,   814,   815,   819,   821,
-   824,   826,   830,   838,   849,   853,   856,   859,   862,   865,
-   868,   871,   874,   876,   880,   886,   891,   893,   897,   900,
-   904,   906,   909,   911,   912,   914,   918,   922,   928,   933,
-   938,   942,   946,   952,   954,   955,   960,   963,   966,   973,
-   975,   978,   980,   982,   986,   990,   993,   997,   999,  1000,
-  1001,  1002,  1003,  1013,  1015,  1016,  1017,  1018,  1021,  1023,
-  1024,  1025,  1026,  1027,  1028,  1029,  1030,  1031,  1032,  1035,
-  1040,  1051,  1058,  1062,  1073,  1083,  1089,  1095,  1101,  1103,
-  1105,  1107,  1109,  1111,  1113,  1115,  1117,  1121,  1123,  1124,
-  1125,  1126,  1127,  1128,  1131,  1134,  1136,  1138,  1142,  1147,
-  1152,  1160,  1166,  1168,  1170,  1174,  1177,  1179,  1181,  1190,
-  1192,  1199,  1204,  1213,  1215,  1222,  1228,  1233,  1235,  1237,
-  1241,  1249,  1252,  1254,  1256,  1260,  1265,  1274,  1279,  1282,
-  1289,  1291,  1293,  1297,  1300,  1309,  1316,  1318,  1322,  1335,
-  1337,  1343,  1349,  1353,  1355,  1359,  1362,  1364,  1368,  1371,
-  1373,  1375,  1379,  1382,  1384,  1386,  1390,  1393,  1395,  1397,
-  1401,  1407,  1409,  1413,  1420,  1422,  1424,  1426,  1430,  1438,
-  1441,  1443,  1445,  1449,  1451,  1458,  1466,  1483,  1485,  1487,
-  1491,  1497,  1502,  1504,  1507,  1509,  1511,  1513,  1514,  1515,
-  1516,  1520,  1522,  1524,  1529,  1531,  1533,  1535,  1537,  1541,
-  1544,  1549,  1551,  1556,  1557,  1558,  1559,  1560,  1562,  1564,
-  1566,  1568,  1570,  1574,  1576,  1579,  1585,  1590,  1594,  1597,
-  1599,  1601,  1605,  1607,  1609,  1611,  1615,  1618,  1622,  1628,
-  1630,  1638,  1641,  1643,  1647,  1650,  1658,  1662,  1665,  1667,
-  1672,  1677,  1686,  1699,  1701,  1705,  1708,  1710,  1715,  1720,
-  1725,  1732,  1734,  1735,  1736,  1739,  1744,  1749,  1751,  1752,
-  1754,  1756,  1757,  1759,  1763,  1766,  1770,  1773,  1777,  1779,
-  1781,  1783,  1784,  1786,  1790,  1798,  1800,  1802,  1814,  1816,
-  1822,  1824,  1826,  1830,  1832,  1837,  1842,  1847,  1849,  1851,
-  1855,  1857,  1862,  1867,  1869,  1873,  1875,  1880,  1885,  1890,
-  1892,  1894,  1898,  1900,  1905,  1910,  1915,  1920,  1921,  1923,
-  1925,  1927,  1929,  1933,  1935,  1940,  1945,  1947,  1951,  1953,
-  1958,  1962,  1964,  1969,  1973,  1975,  1980,  1984,  1986,  1991,
-  1995,  1997,  2002,  2006,  2008,  2009,  2015,  2017,  2021,  2023,
-  2026,  2029,  2037,  2039,  2040,  2043,  2045,  2048,  2052
+   633,   635,   640,   647,   648,   652,   655,   657,   659,   661,
+   663,   665,   667,   669,   676,   679,   681,   686,   688,   692,
+   697,   702,   706,   711,   713,   715,   722,   724,   726,   730,
+   733,   735,   739,   741,   742,   747,   752,   758,   766,   773,
+   776,   779,   783,   786,   790,   799,   801,   803,   808,   815,
+   823,   825,   829,   837,   848,   852,   855,   858,   861,   864,
+   867,   870,   873,   875,   879,   885,   890,   892,   896,   899,
+   903,   905,   908,   910,   911,   913,   917,   921,   927,   932,
+   937,   941,   945,   951,   953,   954,   959,   962,   966,   971,
+   979,   981,   984,   986,   988,   992,   996,   999,  1003,  1005,
+  1006,  1007,  1008,  1009,  1019,  1021,  1022,  1023,  1024,  1027,
+  1029,  1030,  1031,  1032,  1033,  1034,  1035,  1036,  1037,  1038,
+  1041,  1046,  1057,  1064,  1068,  1079,  1089,  1095,  1101,  1107,
+  1109,  1115,  1117,  1123,  1125,  1127,  1129,  1131,  1135,  1137,
+  1138,  1139,  1140,  1141,  1142,  1145,  1148,  1150,  1152,  1156,
+  1161,  1166,  1174,  1180,  1182,  1184,  1188,  1191,  1193,  1195,
+  1204,  1206,  1213,  1218,  1227,  1229,  1236,  1242,  1247,  1249,
+  1251,  1255,  1263,  1266,  1268,  1270,  1274,  1279,  1288,  1293,
+  1296,  1303,  1305,  1307,  1311,  1314,  1323,  1330,  1332,  1336,
+  1349,  1351,  1357,  1363,  1367,  1369,  1373,  1376,  1378,  1382,
+  1385,  1387,  1389,  1393,  1396,  1398,  1400,  1404,  1407,  1409,
+  1411,  1415,  1421,  1423,  1427,  1434,  1436,  1438,  1440,  1444,
+  1452,  1455,  1457,  1459,  1463,  1465,  1472,  1480,  1497,  1499,
+  1501,  1505,  1511,  1516,  1518,  1521,  1523,  1525,  1527,  1528,
+  1529,  1530,  1534,  1536,  1538,  1543,  1545,  1547,  1549,  1551,
+  1555,  1558,  1563,  1565,  1570,  1571,  1572,  1573,  1574,  1576,
+  1578,  1580,  1582,  1584,  1588,  1590,  1593,  1599,  1604,  1608,
+  1611,  1613,  1615,  1619,  1621,  1623,  1625,  1629,  1632,  1636,
+  1642,  1644,  1652,  1655,  1657,  1661,  1664,  1672,  1676,  1679,
+  1681,  1692,  1703,  1708,  1717,  1719,  1723,  1726,  1728,  1733,
+  1738,  1743,  1750,  1752,  1753,  1754,  1757,  1762,  1767,  1769,
+  1770,  1772,  1774,  1775,  1777,  1781,  1784,  1788,  1791,  1795,
+  1797,  1799,  1801,  1802,  1804,  1808,  1816,  1818,  1820,  1832,
+  1834,  1840,  1842,  1844,  1848,  1850,  1855,  1860,  1865,  1867,
+  1869,  1873,  1875,  1880,  1885,  1887,  1891,  1893,  1898,  1903,
+  1908,  1910,  1912,  1916,  1918,  1923,  1928,  1933,  1938,  1939,
+  1941,  1943,  1945,  1947,  1951,  1953,  1958,  1963,  1965,  1969,
+  1971,  1976,  1980,  1982,  1987,  1991,  1993,  1998,  2002,  2004,
+  2009,  2013,  2015,  2020,  2024,  2026,  2031,  2037,  2039,  2043,
+  2045,  2048,  2051,  2059,  2061,  2062,  2065,  2067,  2070,  2074
 };
 #endif
 
@@ -574,14 +573,14 @@ static const char * const yytname[] = {   "$","error","$undefined.","PLUS_TK",
 "class_member_declaration","field_declaration","variable_declarators","variable_declarator",
 "variable_declarator_id","variable_initializer","method_declaration","@3","method_header",
 "method_declarator","formal_parameter_list","formal_parameter","throws","class_type_list",
-"method_body","static_initializer","static","constructor_declaration","constructor_declarator",
-"constructor_body","explicit_constructor_invocation","this_or_super","interface_declaration",
-"@4","@5","@6","@7","extends_interfaces","interface_body","interface_member_declarations",
-"interface_member_declaration","constant_declaration","abstract_method_declaration",
-"array_initializer","variable_initializers","block","@8","block_statements",
-"block_statement","local_variable_declaration_statement","local_variable_declaration",
-"statement","statement_nsi","statement_without_trailing_substatement","empty_statement",
-"label_decl","labeled_statement","labeled_statement_nsi","expression_statement",
+"method_body","static_initializer","static","constructor_declaration","@4","constructor_header",
+"constructor_declarator","constructor_body","explicit_constructor_invocation",
+"this_or_super","interface_declaration","@5","@6","@7","@8","extends_interfaces",
+"interface_body","interface_member_declarations","interface_member_declaration",
+"constant_declaration","abstract_method_declaration","array_initializer","variable_initializers",
+"block","block_begin","block_end","block_statements","block_statement","local_variable_declaration_statement",
+"local_variable_declaration","statement","statement_nsi","statement_without_trailing_substatement",
+"empty_statement","label_decl","labeled_statement","labeled_statement_nsi","expression_statement",
 "statement_expression","if_then_statement","if_then_else_statement","if_then_else_statement_nsi",
 "switch_statement","switch_expression","switch_block","switch_block_statement_groups",
 "switch_block_statement_group","group_of_labels","switch_labels","switch_label",
@@ -616,43 +615,43 @@ static const short yyr1[] = {     0,
    146,   146,   148,   147,   147,   149,   149,   149,   149,   149,
    149,   149,   149,   149,   150,   150,   150,   150,   150,   151,
    151,   151,   152,   152,   152,   152,   153,   153,   153,   154,
-   154,   154,   155,   155,   155,   156,   156,   157,   158,   158,
-   158,   158,   159,   159,   160,   160,   160,   160,   161,   161,
-   161,   161,   162,   162,   164,   163,   165,   163,   166,   163,
-   167,   163,   163,   163,   168,   168,   168,   168,   169,   169,
-   170,   170,   171,   171,   171,   171,   172,   173,   173,   174,
-   174,   174,   174,   175,   175,   175,   176,   177,   176,   178,
-   178,   179,   179,   179,   180,   181,   181,   182,   182,   182,
-   182,   182,   182,   183,   183,   183,   183,   183,   184,   184,
-   184,   184,   184,   184,   184,   184,   184,   184,   184,   185,
-   186,   187,   187,   188,   189,   189,   189,   189,   189,   189,
-   189,   189,   189,   189,   189,   189,   189,   190,   190,   190,
-   190,   190,   190,   190,   191,   191,   191,   191,   192,   193,
-   194,   195,   195,   195,   195,   196,   196,   196,   196,   197,
-   197,   198,   199,   200,   200,   201,   201,   201,   201,   201,
-   202,   203,   203,   203,   203,   204,   205,   206,   207,   207,
-   207,   207,   207,   208,   208,   209,   209,   209,   210,   211,
-   211,   211,   211,   212,   212,   213,   213,   213,   214,   214,
-   214,   214,   215,   215,   215,   215,   216,   216,   216,   216,
-   217,   217,   217,   218,   218,   218,   218,   218,   219,   220,
-   220,   220,   220,   221,   221,   222,   223,   223,   223,   223,
-   224,   224,   225,   225,   226,   226,   226,   226,   226,   226,
-   226,   226,   226,   226,   226,   226,   226,   226,   226,   227,
-   227,   227,   227,   227,   227,   227,   227,   227,   227,   227,
-   227,   227,   227,   228,   228,   229,   229,   229,   230,   230,
-   230,   230,   230,   230,   230,   230,   231,   231,   232,   232,
-   232,   233,   233,   233,   234,   234,   234,   235,   235,   235,
-   235,   235,   235,   235,   235,   236,   236,   236,   236,   236,
-   236,   237,   237,   237,   237,   238,   239,   240,   240,   240,
-   240,   240,   240,   240,   241,   241,   242,   242,   243,   243,
-   243,   243,   243,   243,   244,   244,   244,   244,   244,   244,
-   244,   244,   244,   245,   245,   245,   245,   245,   245,   245,
+   154,   154,   155,   155,   155,   156,   156,   157,   159,   158,
+   160,   160,   161,   161,   162,   162,   162,   162,   163,   163,
+   163,   163,   164,   164,   166,   165,   167,   165,   168,   165,
+   169,   165,   165,   165,   170,   170,   170,   170,   171,   171,
+   172,   172,   173,   173,   173,   173,   174,   175,   175,   176,
+   176,   176,   176,   177,   177,   177,   178,   178,   179,   180,
+   181,   181,   182,   182,   182,   183,   184,   184,   185,   185,
+   185,   185,   185,   185,   186,   186,   186,   186,   186,   187,
+   187,   187,   187,   187,   187,   187,   187,   187,   187,   187,
+   188,   189,   190,   190,   191,   192,   192,   192,   192,   192,
+   192,   192,   192,   192,   192,   192,   192,   192,   193,   193,
+   193,   193,   193,   193,   193,   194,   194,   194,   194,   195,
+   196,   197,   198,   198,   198,   198,   199,   199,   199,   199,
+   200,   200,   201,   202,   203,   203,   204,   204,   204,   204,
+   204,   205,   206,   206,   206,   206,   207,   208,   209,   210,
+   210,   210,   210,   210,   211,   211,   212,   212,   212,   213,
+   214,   214,   214,   214,   215,   215,   216,   216,   216,   217,
+   217,   217,   217,   218,   218,   218,   218,   219,   219,   219,
+   219,   220,   220,   220,   221,   221,   221,   221,   221,   222,
+   223,   223,   223,   223,   224,   224,   225,   226,   226,   226,
+   226,   227,   227,   228,   228,   229,   229,   229,   229,   229,
+   229,   229,   229,   229,   229,   229,   229,   229,   229,   229,
+   230,   230,   230,   230,   230,   230,   230,   230,   230,   230,
+   230,   230,   230,   230,   231,   231,   232,   232,   232,   233,
+   233,   233,   233,   233,   233,   233,   233,   234,   234,   235,
+   235,   235,   236,   236,   236,   237,   237,   237,   238,   238,
+   238,   238,   238,   238,   238,   238,   239,   239,   239,   239,
+   239,   239,   240,   240,   240,   240,   241,   242,   243,   243,
+   243,   243,   243,   243,   243,   244,   244,   245,   245,   246,
    246,   246,   246,   246,   246,   247,   247,   247,   247,   247,
-   247,   247,   248,   248,   248,   248,   248,   248,   248,   248,
-   248,   248,   248,   249,   249,   249,   249,   249,   250,   250,
-   250,   251,   251,   251,   252,   252,   252,   253,   253,   253,
-   254,   254,   254,   255,   255,   255,   255,   255,   256,   256,
-   257,   257,   258,   258,   258,   259,   259,   260,   261
+   247,   247,   247,   247,   248,   248,   248,   248,   248,   248,
+   248,   249,   249,   249,   249,   249,   250,   250,   250,   250,
+   250,   250,   250,   251,   251,   251,   251,   251,   251,   251,
+   251,   251,   251,   251,   252,   252,   252,   252,   252,   253,
+   253,   253,   254,   254,   254,   255,   255,   255,   256,   256,
+   256,   257,   257,   257,   258,   258,   258,   258,   258,   259,
+   259,   260,   260,   261,   261,   261,   262,   262,   263,   264
 };
 
 static const short yyr2[] = {     0,
@@ -669,43 +668,43 @@ static const short yyr2[] = {     0,
      1,     1,     0,     3,     2,     3,     3,     4,     4,     2,
      3,     2,     3,     2,     3,     4,     3,     3,     3,     1,
      3,     3,     2,     3,     2,     3,     0,     2,     2,     1,
-     3,     3,     1,     2,     1,     2,     3,     1,     3,     4,
-     4,     5,     3,     4,     2,     3,     3,     4,     4,     5,
+     3,     3,     1,     2,     1,     2,     3,     1,     0,     3,
+     2,     3,     3,     4,     2,     3,     3,     4,     4,     5,
      7,     6,     1,     1,     0,     4,     0,     5,     0,     5,
      0,     6,     3,     4,     2,     3,     2,     3,     2,     3,
      1,     2,     1,     1,     1,     1,     1,     2,     2,     2,
-     3,     3,     4,     1,     3,     3,     2,     0,     4,     1,
-     2,     1,     1,     1,     2,     2,     3,     1,     1,     1,
+     3,     3,     4,     1,     3,     3,     2,     3,     1,     1,
+     1,     2,     1,     1,     1,     2,     2,     3,     1,     1,
      1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
      1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-     2,     2,     2,     2,     2,     2,     2,     2,     3,     4,
-     4,     5,     4,     5,     6,     7,     6,     1,     1,     1,
-     1,     1,     1,     1,     5,     2,     3,     4,     7,     7,
-     2,     4,     2,     3,     5,     2,     3,     3,     4,     1,
-     2,     2,     1,     1,     2,     3,     2,     2,     3,     2,
-     4,     2,     2,     3,     4,     2,     1,     7,     7,     6,
-     3,     5,     4,     7,     6,     2,     2,     3,     2,     0,
-     1,     1,     2,     0,     1,     1,     3,     3,     2,     3,
-     2,     3,     2,     3,     2,     3,     2,     3,     2,     3,
-     3,     2,     3,     5,     5,     2,     4,     3,     1,     3,
-     3,     4,     2,     1,     2,     2,     4,     2,     3,     4,
-     2,     2,     1,     1,     1,     1,     3,     1,     1,     1,
-     1,     3,     3,     3,     3,     3,     3,     3,     3,     5,
-     4,     6,     5,     4,     5,     5,     6,     3,     3,     4,
-     5,     2,     3,     3,     3,     1,     3,     3,     3,     3,
-     4,     4,     4,     4,     3,     3,     1,     2,     3,     3,
-     2,     2,     3,     3,     3,     3,     2,     3,     4,     5,
-     6,     5,     6,     4,     4,     4,     4,     3,     4,     3,
-     4,     1,     1,     1,     1,     2,     2,     1,     1,     2,
-     2,     1,     2,     2,     2,     2,     2,     2,     1,     2,
-     2,     1,     2,     2,     5,     4,     4,     5,     4,     2,
-     5,     4,     5,     1,     3,     3,     3,     3,     3,     3,
-     1,     3,     3,     3,     3,     1,     3,     3,     3,     3,
-     3,     3,     1,     3,     3,     3,     3,     3,     3,     3,
-     3,     3,     3,     1,     3,     3,     3,     3,     1,     3,
-     3,     1,     3,     3,     1,     3,     3,     1,     3,     3,
-     1,     3,     3,     1,     5,     4,     3,     5,     1,     1,
-     3,     3,     1,     1,     1,     1,     1,     1,     1
+     1,     2,     2,     2,     2,     2,     2,     2,     2,     3,
+     4,     4,     5,     4,     5,     6,     7,     6,     1,     1,
+     1,     1,     1,     1,     1,     5,     2,     3,     4,     7,
+     7,     2,     4,     2,     3,     5,     2,     3,     3,     4,
+     1,     2,     2,     1,     1,     2,     3,     2,     2,     3,
+     2,     4,     2,     2,     3,     4,     2,     1,     7,     7,
+     6,     3,     5,     4,     7,     6,     2,     2,     3,     2,
+     0,     1,     1,     2,     0,     1,     1,     3,     3,     2,
+     3,     2,     3,     2,     3,     2,     3,     2,     3,     2,
+     3,     3,     2,     3,     5,     5,     2,     4,     3,     1,
+     3,     3,     4,     2,     1,     2,     2,     4,     2,     3,
+     4,     2,     2,     1,     1,     1,     1,     3,     1,     1,
+     1,     1,     3,     3,     3,     3,     3,     3,     3,     3,
+     5,     4,     6,     5,     4,     5,     5,     6,     3,     3,
+     4,     5,     2,     3,     3,     3,     1,     3,     3,     3,
+     3,     4,     4,     4,     4,     3,     3,     1,     2,     3,
+     3,     2,     2,     3,     3,     3,     3,     2,     3,     4,
+     5,     6,     5,     6,     4,     4,     4,     4,     3,     4,
+     3,     4,     1,     1,     1,     1,     2,     2,     1,     1,
+     2,     2,     1,     2,     2,     2,     2,     2,     2,     1,
+     2,     2,     1,     2,     2,     5,     4,     4,     5,     4,
+     2,     5,     4,     5,     1,     3,     3,     3,     3,     3,
+     3,     1,     3,     3,     3,     3,     1,     3,     3,     3,
+     3,     3,     3,     1,     3,     3,     3,     3,     3,     3,
+     3,     3,     3,     3,     1,     3,     3,     3,     3,     1,
+     3,     3,     1,     3,     3,     1,     3,     3,     1,     3,
+     3,     1,     3,     3,     1,     5,     4,     3,     5,     1,
+     1,     3,     3,     1,     1,     1,     1,     1,     1,     1
 };
 
 static const short yydefact[] = {     0,
@@ -724,1351 +723,1317 @@ static const short yydefact[] = {     0,
    114,     0,     0,   179,   178,   170,   172,     0,     0,    60,
    162,     0,     0,     0,     0,   107,    98,    87,     0,     0,
      0,     0,   106,    21,    18,    22,    20,    19,   113,   127,
-   111,     0,   127,    74,    73,    55,   188,    75,    23,     0,
+   111,     0,   127,    74,    73,    55,   189,    75,    23,     0,
     85,     0,    77,    79,    83,    84,     0,    80,     0,    81,
-   127,    86,    82,    58,   118,   115,     0,     0,     0,   120,
-   129,   130,   128,   119,   117,    91,     0,    90,    94,     0,
-     0,     0,     0,     0,     0,     0,   336,     0,     0,     0,
-     0,     6,     5,     2,     3,     4,     7,   335,     0,   403,
-     0,   102,   402,   333,   338,     0,   334,   339,   340,   341,
-   419,   404,   405,   434,   408,   409,   412,   422,   441,   446,
-   453,   464,   469,   472,   475,   478,   481,   484,   489,   498,
-   490,     0,   101,    99,    97,   100,   109,    88,   108,   187,
-     0,     0,   127,    76,    78,   105,     0,   136,     0,   125,
-   123,     0,   116,     0,     0,   413,   403,   339,   341,   410,
-   414,   411,   418,   417,   416,   415,     0,   387,     0,     0,
-     0,    16,     0,   423,   420,   424,   421,   430,     0,   403,
-     0,   180,     0,   184,     0,     0,     0,     0,     0,    95,
-     0,     0,   362,     0,   407,   406,     0,     0,     0,     0,
+   139,   127,    86,    82,     0,    58,   118,   115,     0,     0,
+     0,   120,   129,   130,   128,   119,   117,    91,     0,    90,
+    94,     0,     0,     0,     0,     0,     0,     0,   337,     0,
+     0,     0,     0,     6,     5,     2,     3,     4,     7,   336,
+     0,   404,     0,   102,   403,   334,   339,     0,   335,   340,
+   341,   342,   420,   405,   406,   435,   409,   410,   413,   423,
+   442,   447,   454,   465,   470,   473,   476,   479,   482,   485,
+   490,   499,   491,     0,   101,    99,    97,   100,   109,    88,
+   108,   187,     0,   127,    76,    78,   105,     0,   136,     0,
+   141,     0,    55,     0,     0,   278,     0,     0,     0,     0,
+     0,     0,     0,     0,   337,     0,   221,     0,     8,   404,
+     0,     0,   195,     0,   210,     0,   191,   193,     0,   194,
+   199,   211,     0,   200,   212,     0,   201,   202,   213,     0,
+     0,   203,     0,   214,   204,   291,     0,   215,   216,   217,
+   219,   218,     0,   220,   245,   244,     0,   242,   243,   240,
+   241,   239,   125,   123,     0,   116,     0,     0,   414,   404,
+   340,   342,   411,   415,   412,   419,   418,   417,   416,     0,
+   388,     0,     0,     0,    16,     0,   424,   421,   425,   422,
+   431,     0,   404,     0,   180,     0,   184,     0,     0,     0,
+     0,     0,    95,     0,     0,   363,     0,   408,   407,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,   496,   497,     0,
-     0,    55,     0,     0,   277,     0,     0,     0,     0,     0,
-     0,     0,     0,   336,     0,   220,     0,     8,   403,     0,
-     0,   194,     0,   209,     0,   190,   192,     0,   193,   198,
-   210,     0,   199,   211,     0,   200,   201,   212,     0,     0,
-   202,     0,   213,   203,   290,     0,   214,   215,   216,   218,
-   217,     0,   219,   244,   243,     0,   241,   242,   239,   240,
-   238,   143,     0,     0,   135,   104,   133,   137,     0,   139,
-   126,   124,   122,   121,   132,   131,   349,   344,     0,   386,
-   376,   375,   358,     0,   369,   377,     0,   370,     0,   359,
-     0,     0,     0,     0,     0,     0,   346,   337,   182,   181,
-     0,   348,   343,   388,     0,   366,   398,     0,   347,   342,
-   364,   345,   365,   385,   400,     0,   363,     0,   438,   435,
-   439,   436,   440,   437,   444,   442,   445,   443,   450,   447,
-   451,   448,   452,   449,   460,   455,   462,   457,   459,   454,
-   461,   456,   463,     0,   458,   467,   465,   468,   466,   471,
-   470,   474,   473,   477,   476,   480,   479,   483,   482,   487,
-     0,     0,   492,   491,   227,   228,   226,   246,     0,   312,
-     0,   301,   299,     0,   309,   307,     0,   273,     0,   253,
-     0,   323,     0,   287,     0,   305,   303,     0,     0,   196,
-     0,     0,   223,   221,     0,     0,   189,   191,   195,   319,
-   403,   222,   225,     0,   251,   272,     0,   403,     0,   292,
-   296,   289,     0,     0,   316,     0,   144,   140,   134,   145,
-   403,     0,     0,     0,   141,   394,   395,     0,   381,   382,
-     0,   378,   371,     0,   374,   372,   373,   360,   351,     0,
-   432,   426,   429,     0,     0,   427,   186,   183,   185,   389,
-     0,   399,   396,     0,   401,   397,   354,     0,   486,     0,
-   247,     0,   313,   311,   302,   300,   310,   308,   274,     0,
-   254,     0,     0,     0,   320,   324,     0,   321,   288,   306,
-   304,   337,     0,   197,   229,     0,     0,     0,     0,   256,
-     0,   260,     0,   263,   264,     0,   293,     0,   281,     0,
-     0,   318,     0,   142,     0,   146,     0,     0,   147,   392,
-     0,   380,   379,   384,   383,   353,   361,   350,   431,   425,
-   433,   428,   368,   367,   390,     0,   355,   356,   488,   485,
-   248,     0,   275,   271,     0,   328,     0,   332,   331,   325,
-   322,   326,   233,     0,   230,   231,     0,   270,   267,   268,
-   499,     0,   258,   261,   263,     0,   257,   265,     0,   298,
-   297,   283,     0,   295,     0,   317,     0,     0,   148,     0,
-     0,   393,   352,   391,   357,     0,   245,     0,   198,     0,
-   205,   206,     0,   207,   208,     0,   255,   329,     0,   234,
-     0,     0,   232,   269,   266,   259,     0,     0,   282,     0,
-   315,   314,     0,   149,     0,     0,     0,   224,   276,     0,
-   330,   327,   237,   235,     0,     0,   280,     0,     0,     0,
-   150,     0,   249,     0,     0,   236,   278,   279,   152,     0,
-     0,     0,     0,   151,     0,     0,     0,     0,   285,     0,
-   250,   284,     0,     0,     0
+     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+   497,   498,     0,   143,     0,   142,   135,   104,   133,   137,
+   189,   140,     0,   228,   229,   227,   247,     0,   313,     0,
+   302,   300,     0,   310,   308,     0,   274,     0,   254,     0,
+   324,     0,   288,     0,   306,   304,     0,     0,   197,     0,
+     0,   224,   222,     0,     0,   190,   188,   192,   196,   320,
+   404,   223,   226,     0,   252,   273,     0,   404,     0,   293,
+   297,   290,     0,     0,   317,     0,   126,   124,   122,   121,
+   132,   131,   350,   345,     0,   387,   377,   376,   359,     0,
+   370,   378,     0,   371,     0,   360,     0,     0,     0,     0,
+     0,     0,   347,   338,   182,   181,     0,   349,   344,   389,
+     0,   367,   399,     0,   348,   343,   365,   346,   366,   386,
+   401,     0,   364,     0,   439,   436,   440,   437,   441,   438,
+   445,   443,   446,   444,   451,   448,   452,   449,   453,   450,
+   461,   456,   463,   458,   460,   455,   462,   457,   464,     0,
+   459,   468,   466,   469,   467,   472,   471,   475,   474,   478,
+   477,   481,   480,   484,   483,   488,     0,     0,   493,   492,
+   144,   134,   404,     0,     0,   145,     0,   248,     0,   314,
+   312,   303,   301,   311,   309,   275,     0,   255,     0,     0,
+     0,   321,   325,     0,   322,   289,   307,   305,   338,     0,
+   198,   230,     0,     0,     0,     0,   257,     0,   261,     0,
+   264,   265,     0,   294,     0,   282,     0,     0,   319,     0,
+   395,   396,     0,   382,   383,     0,   379,   372,     0,   375,
+   373,   374,   361,   352,     0,   433,   427,   430,     0,     0,
+   428,   186,   183,   185,   390,     0,   400,   397,     0,   402,
+   398,   355,     0,   487,     0,     0,   146,     0,     0,   147,
+   249,     0,   276,   272,     0,   329,     0,   333,   332,   326,
+   323,   327,   234,     0,   231,   232,     0,   271,   268,   269,
+   500,     0,   259,   262,   264,     0,   258,   266,     0,   299,
+   298,   284,     0,   296,     0,   318,     0,   393,     0,   381,
+   380,   385,   384,   354,   362,   351,   432,   426,   434,   429,
+   369,   368,   391,     0,   356,   357,   489,   486,     0,   148,
+     0,     0,     0,   246,     0,   199,     0,   206,   207,     0,
+   208,   209,     0,   256,   330,     0,   235,     0,     0,   233,
+   270,   267,   260,     0,     0,   283,     0,   316,   315,   394,
+   353,   392,   358,     0,   149,     0,     0,     0,   225,   277,
+     0,   331,   328,   238,   236,     0,     0,   281,     0,     0,
+     0,   150,     0,   250,     0,     0,   237,   279,   280,   152,
+     0,     0,     0,     0,   151,     0,     0,     0,     0,   286,
+     0,   251,   285,     0,     0,     0
 };
 
-static const short yydefgoto[] = {   773,
-   208,   347,   209,    85,    86,    68,    60,    87,   210,    22,
+static const short yydefgoto[] = {   774,
+   210,   278,   211,    85,    86,    68,    60,    87,   212,    22,
     23,    24,     8,     9,    10,    11,    12,    13,    14,    15,
     16,    17,   132,   105,    47,    70,   104,   130,   162,   163,
-   164,    91,   114,   115,   116,   211,   166,   257,    92,   111,
-   179,   180,   136,   183,   396,   168,   169,   170,   171,   400,
-   552,   353,    18,    43,    72,    65,   107,    44,    63,    94,
-    95,    96,    97,   212,   295,   354,   251,   355,   356,   357,
-   358,   359,   708,   360,   361,   362,   363,   711,   364,   365,
-   366,   367,   712,   368,   369,   535,   621,   622,   623,   624,
-   625,   370,   371,   714,   372,   373,   374,   715,   375,   376,
-   542,   693,   694,   377,   378,   379,   380,   381,   382,   383,
-   605,   606,   607,   608,   213,   214,   215,   216,   435,   217,
-   415,   416,   417,   218,   219,   220,   221,   222,   223,   224,
-   225,   226,   227,   228,   229,   230,   231,   232,   233,   234,
-   235,   236,   237,   238,   239,   240,   241,   242,   330,   436,
-   682
+   164,    91,   114,   115,   116,   213,   166,   258,    92,   111,
+   181,   182,   136,   185,   398,   168,   169,   170,   260,   171,
+   172,   402,   554,   284,    18,    43,    72,    65,   107,    44,
+    63,    94,    95,    96,    97,   214,   358,   285,   175,   437,
+   286,   287,   288,   289,   290,   705,   291,   292,   293,   294,
+   708,   295,   296,   297,   298,   709,   299,   300,   445,   588,
+   589,   590,   591,   592,   301,   302,   711,   303,   304,   305,
+   712,   306,   307,   452,   673,   674,   308,   309,   310,   311,
+   312,   313,   314,   572,   573,   574,   575,   215,   216,   217,
+   218,   491,   219,   471,   472,   473,   220,   221,   222,   223,
+   224,   225,   226,   227,   228,   229,   230,   231,   232,   233,
+   234,   235,   236,   237,   238,   239,   240,   241,   242,   243,
+   244,   393,   492,   662
 };
 
-static const short yypact[] = {   427,
--32768,-32768,    52,   -22,   375,   386,-32768,-32768,   480,   591,
-   675,-32768,-32768,-32768,-32768,   540,-32768,-32768,-32768,-32768,
-    49,-32768,-32768,-32768,   206,-32768,   302,-32768,    70,   662,
--32768,-32768,   699,   748,-32768,   -22,   389,-32768,-32768,    30,
--32768,   433,   -57,   112,-32768,   435,   165,-32768,-32768,   -22,
-   829,   231,-32768,   370,-32768,    29,-32768,-32768,-32768,-32768,
-   154,  1076,-32768,   439,   -57,-32768,-32768,   275,   475,-32768,
--32768,   -57,   112,-32768,   165,-32768,-32768,-32768,   488,-32768,
--32768,-32768,   511,   166,-32768,-32768,   175,   -24,   866,-32768,
--32768,   111,-32768,  1109,-32768,-32768,-32768,-32768,-32768,-32768,
--32768,-32768,-32768,   224,   340,-32768,   -57,-32768,-32768,   292,
-   -21,-32768,   355,   457,-32768,   629,   -21,    51,    66,   344,
--32768,   536,   541,-32768,-32768,-32768,-32768,   561,  1013,-32768,
--32768,   340,   697,   569,    69,-32768,-32768,-32768,   593,  2179,
-    74,   490,-32768,-32768,-32768,-32768,-32768,-32768,-32768,   -21,
--32768,   478,   -21,-32768,-32768,   471,   477,-32768,   487,   866,
--32768,  1043,-32768,-32768,-32768,-32768,    78,-32768,   493,-32768,
-   537,-32768,-32768,-32768,-32768,-32768,   598,  1186,   -40,-32768,
--32768,-32768,   506,-32768,-32768,-32768,   516,-32768,-32768,  2926,
-  2991,  3042,  3107,   520,    21,   483,-32768,  3158,  3223,  3274,
-  5288,-32768,-32768,-32768,-32768,-32768,-32768,-32768,   535,   923,
-    18,-32768,   549,   557,-32768,   599,-32768,   534,-32768,   648,
-   760,-32768,-32768,-32768,-32768,-32768,-32768,-32768,   781,   837,
-   808,   776,   833,   661,   670,   692,   702,    11,-32768,-32768,
--32768,   767,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
-  1906,   927,   537,-32768,-32768,-32768,   238,   619,   625,-32768,
-   774,   601,-32768,   890,   608,-32768,   658,-32768,-32768,-32768,
--32768,-32768,-32768,-32768,-32768,-32768,    35,-32768,   610,   747,
-   635,   635,   287,-32768,-32768,-32768,-32768,-32768,   301,  1014,
-   270,-32768,   639,-32768,   378,   222,  5355,  3339,   789,-32768,
-    13,  3390,-32768,   327,-32768,-32768,  3455,  3506,  3571,  3622,
-  3687,  3738,  3803,  3854,  3919,  3970,  4035,  4086,   595,  4151,
-  4202,  4267,  4318,  4383,  4434,  4499,  2230,-32768,-32768,  4550,
-   739,   339,   345,  4615,-32768,   143,  2295,    77,   357,   402,
-   126,   407,   144,   644,  5587,-32768,   -22,   409,   950,   462,
-  1135,-32768,   651,-32768,  1554,-32768,-32768,   669,-32768,-32768,
--32768,  1974,-32768,-32768,   673,-32768,-32768,-32768,   689,  1974,
--32768,  1974,-32768,-32768,  1361,   677,-32768,-32768,-32768,-32768,
--32768,   412,-32768,   485,   656,   760,   834,   848,-32768,-32768,
--32768,-32768,   307,   625,-32768,-32768,   703,-32768,  1622,   713,
--32768,   774,-32768,-32768,-32768,-32768,-32768,-32768,   323,   706,
--32768,-32768,-32768,  2346,   635,-32768,    10,   635,    10,-32768,
-  2411,  4666,   162,   266,  2462,   318,-32768,  5628,-32768,-32768,
-  2114,-32768,-32768,-32768,   373,-32768,-32768,   200,-32768,-32768,
--32768,-32768,-32768,   721,-32768,   244,-32768,  5406,-32768,-32768,
--32768,-32768,-32768,-32768,-32768,   781,-32768,   781,-32768,   837,
--32768,   837,-32768,   837,-32768,   808,-32768,   808,-32768,   808,
--32768,   808,-32768,   166,-32768,-32768,   776,-32768,   776,-32768,
-   833,-32768,   661,-32768,   670,-32768,   692,-32768,   702,-32768,
-   825,   744,-32768,-32768,-32768,-32768,-32768,-32768,  4731,-32768,
-   142,-32768,-32768,   145,-32768,-32768,   178,-32768,  4782,-32768,
-  4847,-32768,   479,-32768,  5196,-32768,-32768,   180,   289,   753,
-  2527,   584,-32768,-32768,   -22,  2578,-32768,-32768,-32768,-32768,
-  1122,-32768,-32768,   542,-32768,-32768,   800,  1030,  1186,-32768,
--32768,-32768,    24,  2643,-32768,  4898,-32768,   775,-32768,-32768,
-  1063,  1702,   784,  1770,-32768,-32768,-32768,  5471,-32768,-32768,
-   249,-32768,   785,   255,-32768,   785,-32768,-32768,   340,    82,
--32768,-32768,-32768,  4963,  1176,-32768,-32768,-32768,-32768,-32768,
-  5014,-32768,-32768,  5522,-32768,-32768,   340,   481,-32768,  5079,
--32768,   290,-32768,-32768,-32768,-32768,-32768,-32768,-32768,   294,
--32768,   790,   429,   139,   479,-32768,   493,-32768,-32768,-32768,
--32768,-32768,   430,   753,-32768,   897,    86,   212,  5130,-32768,
-   650,-32768,  1906,   666,-32768,   810,-32768,  5330,-32768,  5221,
-   806,   814,   820,-32768,   919,-32768,  1838,  2694,-32768,-32768,
-   614,-32768,-32768,-32768,-32768,-32768,-32768,   340,-32768,-32768,
--32768,-32768,-32768,-32768,-32768,   681,-32768,   340,-32768,-32768,
--32768,  2040,-32768,-32768,   273,-32768,   918,-32768,-32768,-32768,
--32768,-32768,-32768,  2759,-32768,-32768,   917,-32768,-32768,-32768,
--32768,   274,-32768,-32768,   723,  1472,-32768,-32768,  5587,-32768,
--32768,-32768,   823,   821,  5263,-32768,   280,   445,-32768,   239,
-    91,-32768,-32768,-32768,-32768,   459,-32768,   867,   868,  2040,
--32768,-32768,  2040,-32768,-32768,   827,-32768,   835,   842,-32768,
-   936,   105,-32768,-32768,-32768,-32768,   844,  1974,-32768,   851,
--32768,-32768,  2810,-32768,   245,  4731,  1974,-32768,-32768,  2875,
--32768,-32768,-32768,-32768,   941,   850,-32768,  1974,   250,   199,
--32768,   295,-32768,  5221,   855,-32768,-32768,-32768,-32768,   252,
-  2040,   853,  5263,-32768,   900,  2040,   863,  2040,-32768,  2040,
--32768,-32768,   961,   965,-32768
+static const short yypact[] = {   466,
+-32768,-32768,   432,   -55,   484,   498,-32768,-32768,   425,    21,
+   576,-32768,-32768,-32768,-32768,   594,-32768,-32768,-32768,-32768,
+    13,-32768,-32768,-32768,   348,-32768,   361,-32768,    28,   143,
+-32768,-32768,   592,   618,-32768,   -55,   505,-32768,-32768,   478,
+-32768,   510,   -46,   -30,-32768,   514,    23,-32768,-32768,   -55,
+   633,   360,-32768,   413,-32768,    95,-32768,-32768,-32768,-32768,
+   -11,  1145,-32768,   521,   -46,-32768,-32768,    67,   525,-32768,
+-32768,   -46,   -30,-32768,    23,-32768,-32768,-32768,   542,-32768,
+-32768,-32768,   554,     4,-32768,-32768,    48,   184,   791,-32768,
+-32768,   212,-32768,  1241,-32768,-32768,-32768,-32768,-32768,-32768,
+-32768,-32768,-32768,   107,   126,-32768,   -46,-32768,-32768,   156,
+     9,-32768,   235,   435,-32768,   790,     9,    34,    37,   182,
+-32768,   580,   582,-32768,-32768,-32768,-32768,   588,   861,-32768,
+-32768,   126,   434,   620,    56,-32768,-32768,-32768,   625,  1878,
+    72,   328,-32768,-32768,-32768,-32768,-32768,-32768,-32768,     9,
+-32768,   448,     9,-32768,-32768,   311,   342,-32768,   384,   791,
+-32768,  1029,-32768,-32768,-32768,-32768,   174,-32768,   373,-32768,
+-32768,   437,-32768,-32768,  1600,-32768,-32768,-32768,   628,   901,
+   -67,-32768,-32768,-32768,   395,-32768,-32768,-32768,   167,-32768,
+-32768,  2625,  2690,  2741,  2806,   489,    16,   572,-32768,  2857,
+  2922,  2973,  5113,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
+   500,   949,    49,-32768,   509,   461,-32768,   641,-32768,   810,
+-32768,   823,   881,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
+   995,   926,  1016,   918,   932,   613,   629,   637,   659,    10,
+-32768,-32768,-32768,   887,-32768,-32768,-32768,-32768,-32768,-32768,
+-32768,-32768,   839,   437,-32768,-32768,-32768,   341,   590,   586,
+-32768,   811,   305,   335,  3038,-32768,   141,  1929,    12,   352,
+   357,    98,   430,   255,   609,  5410,-32768,   -55,   701,   902,
+   511,   873,-32768,   627,-32768,  1532,-32768,-32768,   649,-32768,
+-32768,-32768,  1673,-32768,-32768,   664,-32768,-32768,-32768,   674,
+  1673,-32768,  1673,-32768,-32768,  5461,   704,-32768,-32768,-32768,
+-32768,-32768,   447,-32768,   693,   834,   881,   939,   944,-32768,
+-32768,-32768,-32768,   899,   644,-32768,   692,   647,-32768,   416,
+-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,    27,
+-32768,   655,   954,   631,   631,   452,-32768,-32768,-32768,-32768,
+-32768,   624,  1046,    22,-32768,   717,-32768,   603,    31,  5178,
+  3089,   604,-32768,    -8,  3154,-32768,   457,-32768,-32768,  3205,
+  3270,  3321,  3386,  3437,  3502,  3553,  3618,  3669,  3734,  3785,
+  3850,   760,  3901,  3966,  4017,  4082,  4133,  4198,  4249,  1994,
+-32768,-32768,  4314,-32768,   176,-32768,-32768,-32768,   718,-32768,
+-32768,-32768,  1532,-32768,-32768,-32768,-32768,  4365,-32768,   217,
+-32768,-32768,   219,-32768,-32768,   227,-32768,  4430,-32768,  4481,
+-32768,   751,-32768,  4895,-32768,-32768,   238,    59,   682,  2045,
+   686,-32768,-32768,   -55,  2110,-32768,-32768,-32768,-32768,-32768,
+  1061,-32768,-32768,   602,-32768,-32768,   723,  1000,   901,-32768,
+-32768,-32768,   117,  2161,-32768,  4546,-32768,   899,-32768,-32768,
+-32768,-32768,-32768,-32768,   121,   738,-32768,-32768,-32768,  2226,
+   631,-32768,   362,   631,   362,-32768,  2277,  4597,   204,   690,
+  2342,   711,-32768,   973,-32768,-32768,  1813,-32768,-32768,-32768,
+   308,-32768,-32768,   240,-32768,-32768,-32768,-32768,-32768,   744,
+-32768,   244,-32768,  5229,-32768,-32768,-32768,-32768,-32768,-32768,
+-32768,   995,-32768,   995,-32768,   926,-32768,   926,-32768,   926,
+-32768,  1016,-32768,  1016,-32768,  1016,-32768,  1016,-32768,     4,
+-32768,-32768,   918,-32768,   918,-32768,   932,-32768,   613,-32768,
+   629,-32768,   637,-32768,   659,-32768,   846,   761,-32768,-32768,
+-32768,-32768,  1043,  1532,   758,-32768,  1532,-32768,   271,-32768,
+-32768,-32768,-32768,-32768,-32768,-32768,   316,-32768,   759,   460,
+   257,   751,-32768,   373,-32768,-32768,-32768,-32768,-32768,   469,
+   682,-32768,   868,    86,   205,  4662,-32768,   605,-32768,  1600,
+   635,-32768,   778,-32768,  5029,-32768,  4920,   775,   792,   796,
+-32768,-32768,  5294,-32768,-32768,   247,-32768,   787,   261,-32768,
+   787,-32768,-32768,   126,    88,-32768,-32768,-32768,  4713,  5071,
+-32768,-32768,-32768,-32768,-32768,  4778,-32768,-32768,  5345,-32768,
+-32768,   126,   474,-32768,  4829,   827,-32768,  1532,  2393,-32768,
+-32768,  1739,-32768,-32768,   294,-32768,   736,-32768,-32768,-32768,
+-32768,-32768,-32768,  2458,-32768,-32768,   894,-32768,-32768,-32768,
+-32768,   400,-32768,-32768,   713,  1441,-32768,-32768,  5410,-32768,
+-32768,-32768,   803,   812,  4962,-32768,   309,-32768,   515,-32768,
+-32768,-32768,-32768,-32768,-32768,   126,-32768,-32768,-32768,-32768,
+-32768,-32768,-32768,   584,-32768,   126,-32768,-32768,   486,-32768,
+   256,   102,   495,-32768,   863,   878,  1739,-32768,-32768,  1739,
+-32768,-32768,   843,-32768,   850,   858,-32768,   959,   135,-32768,
+-32768,-32768,-32768,   876,  1673,-32768,   888,-32768,-32768,-32768,
+-32768,-32768,-32768,  2509,-32768,   293,  4365,  1673,-32768,-32768,
+  2574,-32768,-32768,-32768,-32768,   961,   907,-32768,  1673,   296,
+   138,-32768,   322,-32768,  4920,   909,-32768,-32768,-32768,-32768,
+   300,  1739,   915,  4962,-32768,   911,  1739,   917,  1739,-32768,
+  1739,-32768,-32768,  1017,  1019,-32768
 };
 
 static const short yypgoto[] = {-32768,
--32768,   -49,     6,   647,   -13,  -124,   309,-32768,    -3,   -66,
--32768,   115,-32768,   956,   700,-32768,    25,-32768,-32768,   623,
-   -25,   -20,-32768,-32768,   915,   895,-32768,  -130,-32768,   811,
--32768,   -72,  -119,   841,   442,  -195,-32768,-32768,   281,   -34,
-   722,  -263,  -106,-32768,-32768,-32768,-32768,-32768,   828,   587,
--32768,   586,   -48,-32768,-32768,-32768,-32768,   931,   -10,-32768,
-   899,-32768,-32768,   127,-32768,  -121,-32768,  -390,  -350,-32768,
-   621,  -269,   288,  -552,-32768,  -502,-32768,-32768,-32768,  -363,
--32768,-32768,-32768,-32768,-32768,-32768,-32768,   368,-32768,   387,
-  -603,  -488,-32768,-32768,-32768,-32768,-32768,-32768,-32768,  -427,
--32768,  -131,   624,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
--32768,   405,-32768,   413,-32768,-32768,    94,-32768,  -229,-32768,
-   712,     8,  -262,  1169,   141,  1189,   269,   316,   438,  -175,
-   560,   588,  -421,-32768,   590,   574,   916,   592,   685,   696,
-   698,   708,   701,-32768,   441,   695,   690,-32768,-32768,    84,
--32768
+-32768,   -22,   -52,   634,   109,  -119,   375,-32768,    -3,   583,
+-32768,   129,-32768,  1011,   746,-32768,   663,-32768,-32768,   814,
+   -53,   -60,-32768,-32768,   977,   952,-32768,  -125,-32768,   867,
+-32768,   -99,  -115,   895,  -173,  -191,-32768,-32768,   115,   -39,
+   783,  -326,   -98,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
+   879,-32768,-32768,   640,   -58,-32768,-32768,-32768,-32768,   996,
+   643,-32768,   960,-32768,-32768,   354,-32768,  -111,   800,  -383,
+  -387,  -275,-32768,   766,    63,    97,  -586,-32768,  -423,-32768,
+-32768,-32768,  -282,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
+   476,-32768,   496,  -565,  -350,-32768,-32768,-32768,-32768,-32768,
+-32768,-32768,  -320,-32768,  -335,   768,-32768,-32768,-32768,-32768,
+-32768,-32768,-32768,-32768,   522,-32768,   523,-32768,-32768,   -15,
+-32768,  -340,-32768,   754,   386,  -260,   975,   243,  1095,   266,
+   423,   490,  -147,   513,   569,  -479,-32768,   683,   729,   585,
+   685,   698,   714,   715,   719,   720,-32768,   477,   724,   668,
+-32768,-32768,    44,-32768
 };
 
 
-#define        YYLAST          5737
+#define        YYLAST          5570
 
 
 static const short yytable[] = {    21,
-   404,   174,    29,   152,   528,   294,   576,   173,   554,   182,
-   143,   541,    83,    93,   270,   272,   274,   276,   300,   419,
-   688,   278,   285,   287,   627,   326,   424,   426,    59,    76,
-    55,   134,    67,    31,    56,   407,    89,    62,    61,   123,
-   173,    90,    61,   247,    83,    93,   249,   258,   117,    38,
-    59,   144,    19,   263,   100,    59,   165,    31,    88,   264,
-    61,   106,   159,    20,   259,    61,   146,    84,    89,   184,
-    48,   283,   120,    90,   244,   135,    50,   278,   256,    83,
-   172,   688,   647,   177,   443,    88,   676,   150,   153,   165,
-    88,   676,   532,   159,    84,   159,   131,   327,    20,    84,
-   536,   408,   537,   160,   201,   744,   564,   178,   161,   709,
-   123,   124,    83,   172,    59,    20,   -93,   -93,    25,    27,
-    67,   279,  -291,   628,    61,    88,   512,    77,   262,    88,
-    61,   450,   452,   454,    84,   397,   160,    20,    84,   668,
-   406,   161,   593,   502,   516,   595,   394,    39,   145,    40,
-    52,    54,   563,   652,    57,   566,    88,   709,    88,   710,
-   709,   637,   573,   147,    57,    84,   185,    84,    49,  -154,
-    50,   245,  -103,   713,    88,   648,  -103,   279,   597,   677,
-   610,   581,   282,    84,   735,   581,   267,   267,   267,   267,
-   581,   570,    61,   110,   267,   267,   290,   113,   745,   744,
-   582,   281,   177,   528,   581,   289,    41,   710,   709,   125,
-   710,    64,   678,   709,   177,   709,    69,   709,   588,   513,
-   157,   713,   432,   243,   713,   351,   178,   520,    20,    20,
-   352,    71,   686,   157,   716,   579,   110,   113,   178,   675,
-   594,   503,   517,   596,   585,   723,   572,   349,    88,   642,
-   743,    67,   756,   187,    50,   644,   348,    84,   710,   560,
-    88,    61,   118,   710,   691,   710,   541,   710,    42,    84,
-   427,   119,   713,   717,   724,   101,   598,   713,   611,   713,
-   731,   713,   716,   291,   243,   716,   528,   420,   433,   427,
-   661,   187,   760,    42,   663,   661,   617,   583,   581,   679,
-  -155,   525,    45,   267,   267,   267,   267,   267,   267,   267,
-   267,   267,   267,   267,   267,    88,   267,   267,   267,   267,
-   267,   267,   267,   128,   474,  -157,   -66,   447,   641,   351,
-   304,   541,   157,   716,   352,   528,   395,   734,   716,  -319,
-   716,   586,   716,   751,   384,   498,   643,    88,   759,   539,
-   764,   349,   645,   -65,   656,   137,    84,   508,   531,   574,
-   348,   725,   564,   428,    46,   350,   531,  -252,   531,   -66,
-    74,   538,    99,   351,   157,    26,   187,   103,   352,   421,
-   348,   438,   612,   662,   133,   446,    28,   664,   761,    53,
-   541,   385,   707,   410,   422,   551,   -65,   423,   650,   541,
-   547,   296,   510,   719,   348,   614,   264,   514,   701,   167,
-   492,   575,   545,    57,   564,   444,   556,   501,   267,   448,
-   507,   -65,   562,   557,   267,   562,   -28,     1,   519,   666,
-   673,  -319,    46,    58,   129,    66,   155,   499,   646,    98,
-   532,   148,   167,   536,   722,   673,   -96,   133,   384,   509,
-   504,   -96,   -96,   -96,   -96,   384,   657,   518,   747,   498,
-    20,   187,   523,   384,   -65,   384,   580,   753,   384,   350,
-     2,    20,   581,   430,    20,   102,   350,   431,   758,   -30,
-     1,     3,   669,   280,   350,   672,   350,     4,   109,   525,
-   246,   707,   384,     5,   511,   385,   747,   561,   753,   515,
-   758,     6,   385,   750,   546,   118,   -25,   -25,   438,   296,
-   385,   112,   385,   350,   243,   385,   137,   703,    20,   386,
-    20,   667,   674,     2,    20,     7,   351,   705,   351,  -338,
-  -338,   352,    78,   352,     3,    88,   149,   733,   603,   385,
-     4,   151,   604,   565,    84,   567,     5,   -25,   349,   524,
-   349,   736,   -25,   -25,   -25,   138,   139,   348,   -25,   348,
-    20,   154,   -25,   730,    80,  -138,   387,    81,    20,   181,
-   267,   267,   250,    20,   658,   732,   248,   139,     7,   252,
-   581,  -338,   592,    35,   439,  -338,   267,   157,   618,   134,
-   -31,     1,   600,   186,   602,   473,    20,   351,   260,   303,
-    36,   401,   352,   619,   438,   265,    37,   -96,   405,   -96,
-   409,   351,   -96,   -96,   -96,   -96,   352,   177,   261,   349,
-   277,    20,   762,   386,  -494,  -494,    20,   631,   348,   633,
-   386,   767,    32,   349,     2,   296,    57,   620,   386,   187,
-   386,   178,   348,   386,    78,   384,    20,   384,   613,   301,
-   440,     4,    32,   302,    20,   441,    32,     5,   531,   442,
-   351,   -34,     1,    88,   654,   352,   350,   386,   350,    20,
-   387,   322,    84,    32,   -29,     1,    80,   387,    20,    81,
-    20,   323,   349,    20,    20,   387,    20,   387,   388,     7,
-   387,   348,   385,    20,   385,    20,   618,   175,   -32,     1,
-  -340,  -340,   681,   402,   324,     2,   531,   702,    30,   531,
-    34,   619,   618,   581,   387,   325,   384,   398,     2,   399,
-   140,   384,     4,   384,   531,   141,   142,   619,     5,     3,
-   384,   414,    51,   531,   429,     4,  -153,   350,  -495,  -495,
-     2,     5,     2,   526,   531,   683,    78,   -33,     1,    57,
-   297,   350,  -340,     3,   298,   384,  -340,   531,   299,     4,
-     7,   687,   531,   385,   531,     5,   531,   529,   385,   618,
-   385,   533,   727,     7,   704,   544,   350,   385,    80,   384,
-   581,    81,    20,   534,   619,   307,   308,   309,   384,   439,
-   176,     2,   388,   315,   316,   317,   318,     7,   558,   388,
-   350,   549,   385,   384,   305,   306,   384,   388,     4,   388,
-   389,   555,   388,   584,     5,   312,   313,   314,   726,   752,
-   386,   384,   386,   755,   350,   589,   385,   350,   -35,     1,
-   384,   590,   319,   495,   496,   385,   388,   497,   390,   310,
-   311,   384,   350,   411,   412,   413,     7,   384,   320,   321,
-   385,   350,   139,   385,   384,   440,   384,   328,   329,   384,
-   441,   384,   350,   384,   442,   626,   121,   387,   385,   387,
-   141,   142,     2,   634,    20,   350,   638,   385,  -404,  -404,
-   350,   564,   350,   665,   350,   460,   462,   464,   385,     4,
-   403,   386,  -405,  -405,   385,     5,   386,   675,   386,   456,
-   458,   385,   689,   385,   695,   386,   385,   696,   385,    35,
-   385,   477,   479,   697,   389,    78,   728,   723,   718,   439,
-   628,   389,   737,  -204,   122,   740,    36,     7,   741,   389,
-   386,   389,    37,     2,   389,   742,   743,   746,   387,    78,
-   391,   756,   390,   387,   748,   387,   766,    80,   757,   390,
-    81,    20,   387,   763,   386,   768,   770,   390,   389,   390,
-   774,     2,   390,   386,   775,   475,    33,    78,    75,   108,
-     2,    80,   255,   393,    81,    20,    78,   387,   386,   188,
-   548,   386,    73,   698,   553,   440,   390,   253,   684,   388,
-   441,   388,   127,   418,   442,   540,   386,   738,   543,    80,
-   739,   387,    81,    20,    20,   386,   481,   685,    80,   670,
-   387,    81,    20,  -493,  -493,   297,   386,   671,   483,   298,
-   392,   485,   386,   299,   494,   387,   489,     0,   387,   386,
-   660,   386,   487,     0,   386,   -15,   386,     0,   386,     0,
-  -493,  -493,   297,   387,   391,     0,   521,     0,   765,     0,
-   522,   391,   387,   769,     0,   771,   156,   772,     0,   391,
-   388,   391,    78,   387,   391,   388,     0,   388,     0,   387,
-     0,    79,     0,     4,   388,     0,   387,     0,   387,     5,
-     0,   387,     0,   387,     0,   387,   156,     0,   391,     0,
-     0,     0,    78,     0,    80,     0,     0,    81,    20,   388,
-     0,    79,     0,     4,  -493,  -493,   297,   157,   158,     5,
-   425,   389,     0,   389,   299,   -15,     0,     0,     0,     2,
-  -493,  -493,   297,   388,    80,    78,   521,    81,    20,     0,
-   299,     0,   388,     0,    79,     0,     4,   157,   254,   390,
-     0,   390,     5,     0,     0,     0,     0,   388,   -15,     0,
-   388,     0,     2,  -493,  -493,   297,     0,    80,    78,   521,
-    81,    20,     0,   635,     0,   388,     0,    79,     0,     4,
-     0,    82,     0,     0,   388,     5,   651,     0,    35,     0,
-     0,     0,   389,     0,    78,   388,     0,   389,     0,   389,
-    80,   388,     0,    81,    20,     0,   389,     0,   388,     0,
-   388,    37,     0,   388,   126,   388,     0,   388,     0,     0,
-   390,     0,  -493,  -493,   297,   390,    80,   390,   298,    81,
-    20,   389,   522,     0,   390,    78,     0,     0,     0,    35,
-   466,   468,   470,   472,   194,    78,     0,     0,     0,     0,
-   195,   391,     0,   391,     0,   389,     0,   196,     0,   390,
-     0,   197,     0,     0,   389,     0,     0,    80,     0,     0,
-    81,    20,     0,     0,   198,   199,     0,    80,   200,   389,
-    81,    20,   389,   390,     0,     0,     0,   202,   203,   204,
-   205,     0,   390,   206,   207,     0,     0,   389,     0,     0,
-     0,     0,     0,     0,     0,     0,   389,   390,     0,     0,
-   390,     0,     0,     0,     0,     0,     0,   389,     0,     0,
-     0,     0,   391,   389,     0,   390,     0,   391,     0,   391,
-   389,     0,   389,     0,   390,   389,   391,   389,     0,   389,
-     0,     0,     0,     0,     0,   390,     0,     0,     0,     0,
-     0,   390,     0,     0,     0,     0,     0,     0,   390,     0,
-   390,   391,     0,   390,     0,   390,     0,   390,   268,   268,
-   268,   268,     0,     0,     0,     0,   268,   268,     0,     0,
-     0,     0,     0,     0,     0,   391,     0,     0,   269,   269,
-   269,   269,     0,     0,   391,     0,   269,   269,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,     0,   391,
-     0,     0,   391,     0,     2,   192,   193,     0,     0,     0,
-    78,     0,     0,     0,     0,     0,     0,   391,     0,   194,
-     0,     0,     0,     0,     0,   195,   391,     0,     0,     0,
-     0,     0,   196,     0,     0,     0,   197,   391,     0,     0,
-     0,     0,    80,   391,     0,    81,    20,     0,     0,     0,
-   391,     0,   391,   345,     0,   391,     0,   391,     0,   391,
-     0,     0,   202,   203,   204,   205,     0,     0,   206,   207,
-     0,     0,   331,     0,     0,   268,   268,   268,   268,   268,
-   268,   268,   268,   268,   268,   268,   268,     0,   268,   268,
-   268,   268,   268,   268,   268,   269,   269,   269,   269,   269,
-   269,   269,   269,   269,   269,   269,   269,     0,   269,   269,
-   269,   269,   269,   269,   269,   332,   192,   193,  -262,   333,
-   334,    78,   335,     0,     0,   336,     0,     0,     0,   337,
-   194,     0,     0,  -262,     0,     0,   338,   339,     5,   340,
-     0,   341,   342,   196,   343,     0,     0,   344,     0,     0,
-     0,     0,     0,    80,   331,     0,    81,    20,     0,     0,
-     0,     0,     0,     0,   345,     0,   157,  -262,     0,     0,
-   346,     0,     0,   202,   203,   204,   205,     0,     0,   206,
-   207,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-   268,     0,     0,     0,     0,     0,   268,   332,   192,   193,
-     0,   333,   334,    78,   335,     0,     0,   336,     0,     0,
-   269,   337,   194,     0,     0,     0,   269,     0,   338,   339,
-     5,   340,   331,   341,   342,   196,   343,     0,     0,   344,
-     0,     0,     0,     0,     0,    80,     0,     0,    81,    20,
-     0,     0,     0,     0,     0,     0,   345,     0,   157,   527,
-     0,     0,   346,     0,     0,   202,   203,   204,   205,     0,
-     0,   206,   207,     0,     0,   332,   192,   193,     0,   333,
-   334,    78,   335,     0,     0,   336,     0,     0,     0,   337,
-   194,     0,     0,     0,     0,     0,   338,   339,     5,   340,
-     0,   341,   342,   196,   343,     0,     0,   344,     0,     0,
-     0,     0,   331,    80,     0,     0,    81,    20,     0,     0,
-     0,     0,     0,     0,   345,     0,   157,   550,     0,     0,
-   346,     0,     0,   202,   203,   204,   205,     0,     0,   206,
-   207,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,   268,   268,     0,   332,   192,   193,     0,   333,
-   334,    78,   335,     0,     0,   336,     0,     0,   268,   337,
-   194,     0,   269,   269,     0,     0,   338,   339,     5,   340,
-   331,   341,   342,   196,   343,     0,     0,   344,   269,     0,
+   460,    90,    29,    93,   621,   324,   176,   152,    89,    84,
+   438,   357,   341,    38,   184,   557,   341,   174,   143,   556,
+   -31,     1,   483,   451,   389,   668,   326,   463,    48,   165,
+    20,   488,   327,    90,   144,    93,    84,   146,    61,    83,
+    89,    84,    61,   117,   333,   335,   337,   339,    62,   363,
+   174,   249,   348,   350,   251,   706,   186,   259,    88,   483,
+    61,   134,   165,   499,     2,    61,   123,   101,   161,    64,
+   173,    83,   246,   261,    69,   160,    84,    20,   346,   180,
+    84,     4,   150,   153,   475,    88,   656,     5,   685,    50,
+    88,   480,   482,   464,   584,    76,   390,   489,   421,   668,
+   118,   161,   656,   173,  -154,   135,    83,    84,   160,    84,
+   179,    39,   342,    40,   283,   484,   342,   594,   -66,     7,
+   706,   282,   279,   706,    61,    88,    49,    84,    50,    88,
+    61,   145,    25,    27,   147,   745,   615,   123,   745,    83,
+   690,   411,   -34,     1,   119,   344,   399,   -93,   -93,   352,
+    59,   458,   579,   187,    67,   396,    88,   325,    88,   315,
+   422,   -66,   429,   633,    52,    54,   638,   137,    57,   247,
+   637,   280,    59,   640,   257,   706,    88,    59,    57,   657,
+   706,   686,   706,   245,   706,   626,     2,   626,   330,   330,
+   330,   330,   157,    77,    61,   736,   330,   330,   353,   180,
+    84,   626,   666,     4,   618,   658,   128,   110,   462,     5,
+   608,   113,   124,   611,   601,  -292,   595,   560,   707,   562,
+   129,   602,   506,   508,   510,   283,    20,   564,   746,    84,
+   179,   761,   282,   279,   626,   137,    59,   626,   577,   412,
+   627,     7,    67,   167,   630,   354,   245,   680,   133,    88,
+   110,   113,   449,   279,   700,   425,   655,   648,   -96,   434,
+   -96,   682,   679,   -96,   -96,   -96,   -96,   189,  -103,   551,
+   315,   641,  -103,   180,    84,   327,   167,   315,    88,   148,
+   120,   438,   280,   707,    50,   315,   707,   315,   694,   441,
+   315,   710,   659,   720,   714,   624,   744,   441,   702,   441,
+   757,   605,   448,   281,   179,  -320,   345,   189,   410,   728,
+   125,   416,   671,   719,   451,   561,   643,   563,   581,   428,
+   716,   713,   641,    88,    61,   565,   -96,   133,   248,   530,
+   617,   -96,   -96,   -96,   -96,   407,   578,   628,   707,   727,
+    20,   631,   283,   707,   681,   707,   367,   707,    41,   282,
+   279,   157,   417,   426,   735,   442,   710,   419,   683,   710,
+    71,    45,   438,   446,   642,   447,   330,   330,   330,   330,
+   330,   330,   330,   330,   330,   330,   330,   330,    88,   330,
+   330,   330,   330,   330,   330,   330,   713,   315,  -253,   713,
+   438,   752,   451,   751,   760,   413,    84,  -320,   765,   553,
+   721,   625,   427,   157,   494,  -138,   189,   626,   502,   644,
+    42,   710,   -65,    74,   281,   762,   710,   316,   710,   763,
+   710,   281,    42,    46,   -30,     1,   434,   408,   768,   281,
+   423,   281,    19,   548,   177,   157,    67,   252,    99,   397,
+   317,   713,  -155,   103,   418,    88,   713,   455,   713,   420,
+   713,   559,   476,   189,  -157,   -65,   203,   503,   609,   649,
+   646,   567,   652,   569,   -65,   -28,     1,   157,     2,   653,
+   466,   688,   451,   494,   330,    46,   253,     2,    55,     3,
+   330,   451,    56,    78,    26,     4,   653,   722,   684,   134,
+    57,     5,   500,   283,   328,   407,   283,   598,    28,   600,
+   282,   279,   155,   282,   279,    53,   695,   -65,   360,     2,
+    58,   432,   361,   606,    66,    80,   362,    20,    81,    20,
+     3,    98,   424,     7,   494,   102,     4,   178,   316,   283,
+   245,   281,     5,   138,   139,   316,   282,   279,   315,   456,
+     6,   315,   109,   316,   477,   316,   250,   139,   316,   504,
+   280,   317,   647,   280,   112,   -25,   -25,   365,   317,    57,
+   731,   654,   189,    20,     7,   729,   317,   696,   317,    20,
+   733,   317,   343,   626,   315,   -29,     1,   283,   734,   315,
+   149,   315,   151,    20,   282,   279,   280,   737,   154,   340,
+    20,   -32,     1,   180,    84,    20,   -25,   318,   433,    20,
+   359,   -25,   -25,   -25,   495,   283,    20,   -25,   730,   364,
+    20,   -25,   282,   279,   626,   330,   330,   -33,     1,     2,
+   183,    78,   315,   385,   179,   188,   315,    20,   323,   661,
+     3,   330,   -35,     1,   280,     2,     4,    35,   441,    20,
+   386,   366,     5,    88,   457,   316,     3,   461,   585,   387,
+   315,   585,     4,    80,    36,   465,    81,    20,     5,   315,
+    37,     2,   280,   586,   319,    20,   586,    20,   317,   692,
+   496,    31,   388,    20,     7,   497,     2,   732,     4,   498,
+   401,   585,   281,   626,     5,   281,   495,   320,   400,    20,
+     7,   315,   459,     4,   315,    31,   586,   587,   486,     5,
+   663,  -153,   487,   441,   704,    20,   441,   100,   318,   315,
+    20,   159,   724,    20,   106,   318,     7,   478,   281,   435,
+   479,   441,   315,   318,   359,   318,    20,   470,   318,    20,
+   667,     7,    20,   315,   441,     2,   715,  -339,  -339,   315,
+    20,    78,   159,   321,   159,   441,   315,   439,   315,   131,
+   580,   315,   496,   315,    30,   315,    34,   497,   441,   585,
+   529,   498,   443,   441,    57,   441,   281,   441,   444,   442,
+   281,    20,   446,    80,   586,   319,    81,    20,    51,     2,
+   753,   139,   319,   619,   756,    78,   609,   748,   593,  -339,
+   319,   121,   319,  -339,   281,   319,   316,   118,   320,   316,
+   754,   359,   454,   739,   620,   320,   740,   609,   723,    78,
+   570,   759,   485,   320,   571,   320,   552,    80,   320,   317,
+    81,    20,   317,    32,   704,   318,   610,   495,   612,   748,
+   603,   754,   316,   759,    35,   281,   629,   316,   281,   316,
+    78,    80,   322,    32,    81,    20,   634,    32,   635,   122,
+   639,    36,   645,   281,   321,   317,   607,    37,   766,   607,
+   317,   321,   317,   770,    32,   772,   281,   773,   655,   321,
+   669,   321,    80,   675,   321,    81,    20,   281,  -341,  -341,
+   316,   140,     2,   609,   316,   676,   141,   142,    78,   677,
+   281,   699,   319,   496,   720,   281,   725,   281,   497,   281,
+  -495,  -495,   498,   317,   156,   404,   405,   317,   316,   406,
+    78,   595,    20,  -496,  -496,   320,    35,   316,   738,    79,
+    80,     4,    78,    81,    20,   368,   369,     5,   373,   374,
+  -341,   317,   394,  -205,  -341,   378,   379,   380,   381,    37,
+   317,   741,    80,   742,    35,    81,    20,   383,   384,   316,
+    78,   743,   316,   322,    80,   157,   158,    81,    20,   744,
+   322,   757,   522,   524,   526,   528,   769,   316,   322,   747,
+   322,   321,   317,   322,   382,   317,   318,   391,   392,   318,
+   316,   749,    80,  -405,  -405,    81,    20,   -15,  -406,  -406,
+   317,   316,  -494,  -494,   360,   141,   142,   316,   430,   370,
+   371,   372,   431,   317,   316,   758,   316,   764,   767,   316,
+   771,   316,   318,   316,   317,   531,   775,   318,   776,   318,
+   317,    33,    78,   375,   376,   377,   108,   317,   256,   317,
+    75,   196,   317,   190,   317,   395,   317,   197,   254,  -494,
+  -494,   360,   555,   319,   198,   361,   319,    73,   199,   362,
+   467,   468,   469,   127,    80,   512,   514,    81,    20,   403,
+   318,   200,   201,   664,   318,   202,   320,   533,   535,   320,
+   322,   450,   156,   453,   204,   205,   206,   207,    78,   319,
+   208,   209,   537,   665,   319,   -15,   319,    79,   318,     4,
+  -494,  -494,   360,   650,   651,     5,   430,   318,   474,   539,
+   362,   541,   320,   516,   518,   520,   543,   320,   545,   320,
+    80,   698,     0,    81,    20,     0,   550,     0,     0,     0,
+     0,     0,   321,   157,   255,   321,     0,   319,   -15,   318,
+     0,   319,   318,  -494,  -494,   360,  -494,  -494,   360,   430,
+     0,     0,   481,   636,     0,     0,   362,   318,     0,     0,
+   320,  -494,  -494,   360,   320,   319,     0,   361,   321,     0,
+   318,   431,     0,   321,   319,   321,   331,   331,   331,   331,
+     0,   318,     0,     0,   331,   331,     0,   318,   320,     0,
+     0,     0,     0,     0,   318,     0,   318,   320,     2,   318,
+     0,   318,     0,   318,    78,     0,   319,     0,     0,   319,
+     0,     0,     0,    79,     0,     4,   321,     0,     0,     0,
+   321,     5,     0,     0,   319,     0,     0,     0,     0,   320,
+     0,   322,   320,     0,   322,     0,    80,   319,     0,    81,
+    20,     0,     0,     0,   321,     0,     0,   320,   319,     0,
+    82,     0,     0,   321,   319,     0,     0,     0,     0,     0,
+   320,   319,     0,   319,     0,     0,   319,   322,   319,     0,
+   319,   320,   322,     0,   322,     0,     0,   320,     0,     0,
+     0,     0,     0,     0,   320,   321,   320,     0,   321,   320,
+     0,   320,     0,   320,     2,     0,   332,   332,   332,   332,
+    78,     0,     0,   321,   332,   332,     0,     0,     0,    79,
+     0,     4,     0,     0,     0,   322,   321,     5,     0,   322,
+     0,     0,     0,     0,     0,     0,     0,   321,     0,     0,
+     0,     0,    80,   321,     0,    81,    20,     0,     0,     0,
+   321,     0,   321,   322,     0,   321,   126,   321,     0,   321,
+     0,     0,   322,     0,   331,   331,   331,   331,   331,   331,
+   331,   331,   331,   331,   331,   331,     0,   331,   331,   331,
+   331,   331,   331,   331,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,   322,     0,     0,   322,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,   322,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,   322,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,   322,     0,     0,     0,
+     0,     0,   322,     0,     0,     0,     0,     0,     0,   322,
+     0,   322,     0,     0,   322,     0,   322,     0,   322,     0,
+     0,   262,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,   331,     0,     0,     0,     0,     0,   331,     0,
+     0,     0,     0,     0,   332,   332,   332,   332,   332,   332,
+   332,   332,   332,   332,   332,   332,     0,   332,   332,   332,
+   332,   332,   332,   332,   263,   194,   195,  -263,   264,   265,
+    78,   266,     0,     0,   267,     0,     0,     0,   268,   196,
+     0,     0,  -263,     0,     0,   269,   270,     5,   271,     0,
+   272,   273,   198,   274,     0,     0,   275,     0,     0,     0,
+     0,     0,    80,     0,     0,    81,    20,     0,     0,     0,
+     0,     0,   262,   276,     0,   157,  -263,     0,     0,   277,
+     0,     0,   204,   205,   206,   207,     0,     0,   208,   209,
+     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,   332,     0,     0,   263,   194,   195,   332,   264,
+   265,    78,   266,     0,     0,   267,     0,     0,     0,   268,
+   196,     0,     0,   331,   331,     0,   269,   270,     5,   271,
+   262,   272,   273,   198,   274,     0,     0,   275,     0,   331,
      0,     0,     0,    80,     0,     0,    81,    20,     0,     0,
-     0,     0,     0,     0,   345,     0,   157,   636,     0,     0,
-   346,     0,     0,   202,   203,   204,   205,     0,     0,   206,
-   207,     0,     0,   332,   192,   193,     0,   333,   334,    78,
-   335,     0,     0,   336,     0,     0,     0,   337,   194,     0,
-     0,     0,     0,     0,   338,   339,     5,   340,   331,   341,
-   342,   196,   343,     0,     0,   344,     0,     0,     0,     0,
-     0,    80,     0,     0,    81,    20,     0,     0,     0,     0,
-     0,     0,   345,     0,   157,   639,     0,     0,   346,     0,
-     0,   202,   203,   204,   205,     0,     0,   206,   207,     0,
-     0,   332,   192,   193,     0,   333,   334,    78,   335,     0,
-     0,   336,     0,     0,     0,   337,   194,     0,     0,     0,
-     0,     0,   338,   339,     5,   340,   331,   341,   342,   196,
-   343,     0,     0,   344,     0,     0,     0,     0,     0,    80,
-     0,     0,    81,    20,     0,     0,     0,     0,     0,     0,
-   345,     0,   157,   699,     0,     0,   346,     0,     0,   202,
-   203,   204,   205,     0,     0,   206,   207,     0,     0,   332,
-   192,   193,     0,   333,   334,    78,   335,     0,     0,   336,
-     0,     0,     0,   337,   194,     0,     0,     0,     0,     0,
-   338,   339,     5,   340,   331,   341,   342,   196,   343,     0,
-     0,   344,     0,     0,     0,     0,     0,    80,     0,     0,
-    81,    20,     0,     0,     0,     0,     0,     0,   345,     0,
-   157,     0,     0,     0,   346,     0,     0,   202,   203,   204,
-   205,     0,     0,   206,   207,     0,     0,   530,   192,   193,
-     0,   333,   334,    78,   335,     0,     0,   336,     0,     0,
-     0,   337,   194,     0,     0,     0,     0,     0,   338,   339,
-   331,   340,     0,   341,   342,   196,   343,     0,     0,   344,
-     0,     0,     0,     0,     0,    80,     0,     0,    81,    20,
-     0,     0,     0,     0,     0,     0,   345,     0,   157,     0,
-     0,     0,   346,     0,     0,   202,   203,   204,   205,     0,
-     0,   206,   207,   530,   192,   193,     0,   706,   334,    78,
-   335,     0,     0,   336,     0,     0,     0,   337,   194,     0,
-     0,     0,     0,     0,   338,   339,     0,   340,     0,   341,
-   342,   196,   343,     0,   577,   344,   190,   191,     0,     0,
+     0,     0,     0,     0,   276,     0,   157,   436,     0,     0,
+   277,     0,     0,   204,   205,   206,   207,     0,     0,   208,
+   209,     0,     0,   263,   194,   195,     0,   264,   265,    78,
+   266,     0,     0,   267,     0,     0,     0,   268,   196,     0,
+     0,     0,     0,     0,   269,   270,     5,   271,     0,   272,
+   273,   198,   274,   262,     0,   275,     0,     0,     0,     0,
      0,    80,     0,     0,    81,    20,     0,     0,     0,     0,
-     0,     0,   345,     0,   157,     0,     0,     0,   346,     0,
-     0,   202,   203,   204,   205,     0,     0,   206,   207,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,   192,   193,
-     0,     0,     0,    78,     0,     0,     0,     0,     0,     0,
-     0,     0,   194,     0,     0,     0,     0,     0,   195,   189,
-     0,   190,   191,     0,     0,   196,     0,     0,     0,   197,
+     0,     0,   276,     0,   157,     0,     0,     0,   277,     0,
+     0,   204,   205,   206,   207,     0,     0,   208,   209,     0,
+     0,     0,     0,   332,   332,     0,   440,   194,   195,     0,
+   264,   265,    78,   266,     0,     0,   267,     0,     0,   332,
+   268,   196,     0,     0,     0,     0,     0,   269,   270,   262,
+   271,     0,   272,   273,   198,   274,     0,     0,   275,     0,
+     0,     0,     0,     0,    80,     0,     0,    81,    20,     0,
+     0,     0,     0,     0,     0,   276,     0,   157,     0,     0,
+     0,   277,     0,     0,   204,   205,   206,   207,     0,     0,
+   208,   209,   440,   194,   195,     0,   703,   265,    78,   266,
+     0,     0,   267,     0,     0,     0,   268,   196,     0,     0,
+     0,     0,     0,   269,   270,     0,   271,     0,   272,   273,
+   198,   274,     0,   622,   275,   192,   193,     0,     0,     0,
+    80,     0,     0,    81,    20,     0,     0,     0,     0,     0,
+     0,   276,     0,   157,     0,     0,     0,   277,     0,     0,
+   204,   205,   206,   207,     0,     0,   208,   209,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,   194,   195,     0,
+     0,     0,    78,     0,     0,     0,     0,     0,     0,     0,
+     0,   196,     0,     0,     0,     0,     0,   197,   191,     0,
+   192,   193,     0,     0,   198,     0,     0,     0,   199,     0,
+     0,     0,     0,     0,    80,     0,     0,    81,    20,     0,
+     0,   200,   201,     0,     0,   202,     0,   203,   623,     0,
+     0,     0,     0,     0,   204,   205,   206,   207,     0,     0,
+   208,   209,   194,   195,     0,     0,     0,    78,     0,   414,
+     0,   192,   193,     0,     0,     0,   196,     0,     0,     0,
+     0,     0,   197,     0,     0,     0,     0,     0,     0,   198,
+     0,     0,     0,   199,     0,     0,     0,     0,     0,    80,
+     0,     0,    81,    20,     0,     0,   200,   201,     0,     0,
+   202,     0,   203,   194,   195,     0,     0,     0,    78,   204,
+   205,   206,   207,     0,     0,   208,   209,   196,     0,     0,
+     0,     0,     0,   197,   546,     0,   192,   193,     0,     0,
+   198,     0,     0,     0,   199,     0,     0,     0,     0,     0,
+    80,     0,     0,    81,    20,     0,     0,   200,   201,     0,
+     0,   202,     0,     0,     0,     0,     0,   415,     0,     0,
+   204,   205,   206,   207,     0,     0,   208,   209,   194,   195,
+     0,     0,     0,    78,     0,   493,     0,   192,   193,     0,
+     0,     0,   196,     0,     0,     0,     0,     0,   197,     0,
+     0,     0,     0,     0,     0,   198,     0,     0,     0,   199,
      0,     0,     0,     0,     0,    80,     0,     0,    81,    20,
-     0,     0,   198,   199,     0,     0,   200,     0,   201,   578,
-     0,     0,     0,     0,     0,   202,   203,   204,   205,     0,
-     0,   206,   207,   192,   193,     0,     0,     0,    78,     0,
-   490,     0,   190,   191,     0,     0,     0,   194,     0,     0,
-     0,     0,     0,   195,     0,     0,     0,     0,     0,     0,
-   196,     0,     0,     0,   197,     0,     0,     0,     0,     0,
-    80,     0,     0,    81,    20,     0,     0,   198,   199,     0,
-     0,   200,     0,   201,   192,   193,     0,     0,     0,    78,
-   202,   203,   204,   205,     0,     0,   206,   207,   194,     0,
-     0,     0,     0,     0,   195,   505,     0,   190,   191,     0,
-     0,   196,     0,     0,     0,   197,     0,     0,     0,     0,
-     0,    80,     0,     0,    81,    20,     0,   491,   198,   199,
-     0,     0,   200,     0,     0,     0,     0,     0,     0,     0,
-     0,   202,   203,   204,   205,     0,     0,   206,   207,   192,
-   193,     0,     0,     0,    78,     0,   559,     0,   190,   191,
-     0,     0,     0,   194,     0,     0,     0,     0,     0,   195,
-     0,     0,     0,     0,     0,     0,   196,     0,     0,     0,
-   197,     0,     0,     0,     0,     0,    80,     0,     0,    81,
-    20,     0,     0,   198,   199,     0,     0,   200,     0,     0,
-   192,   193,     0,   506,     0,    78,   202,   203,   204,   205,
-     0,     0,   206,   207,   194,     0,     0,     0,     0,     0,
-   195,   568,     0,   190,   191,     0,     0,   196,     0,     0,
-     0,   197,     0,     0,     0,     0,     0,    80,     0,     0,
-    81,    20,     0,     0,   198,   199,     0,     0,   200,     0,
-     0,     0,     0,   560,     0,     0,     0,   202,   203,   204,
-   205,     0,     0,   206,   207,   192,   193,     0,     0,     0,
-    78,     0,   437,     0,   190,   191,     0,     0,     0,   194,
-     0,     0,     0,     0,     0,   195,     0,     0,     0,     0,
-     0,     0,   196,     0,     0,     0,   197,     0,     0,     0,
-     0,     0,    80,     0,     0,    81,    20,     0,     0,   198,
-   199,     0,     0,   200,   569,     0,   192,   193,     0,     0,
-     0,    78,   202,   203,   204,   205,     0,     0,   206,   207,
-   194,     0,     0,     0,     0,     0,   195,   437,     0,   190,
-   191,     0,     0,   196,     0,     0,     0,   197,     0,     0,
+     0,   547,   200,   201,     0,     0,   202,     0,     0,   194,
+   195,     0,     0,     0,    78,   204,   205,   206,   207,     0,
+     0,   208,   209,   196,     0,     0,     0,     0,     0,   197,
+   582,     0,   192,   193,     0,     0,   198,     0,     0,     0,
+   199,     0,     0,     0,     0,     0,    80,     0,     0,    81,
+    20,     0,     0,   200,   201,     0,     0,   202,     0,     0,
+     0,     0,   148,     0,     0,     0,   204,   205,   206,   207,
+     0,     0,   208,   209,   194,   195,     0,     0,     0,    78,
+     0,   596,     0,   192,   193,     0,     0,     0,   196,     0,
+     0,     0,     0,     0,   197,     0,     0,     0,     0,     0,
+     0,   198,     0,     0,     0,   199,     0,     0,     0,     0,
+     0,    80,     0,     0,    81,    20,     0,     0,   200,   201,
+     0,     0,   202,   583,     0,   194,   195,     0,     0,     0,
+    78,   204,   205,   206,   207,     0,     0,   208,   209,   196,
+     0,     0,     0,     0,     0,   197,   604,     0,   192,   193,
+     0,     0,   198,     0,     0,     0,   199,     0,     0,     0,
+     0,     0,    80,     0,     0,    81,    20,     0,     0,   200,
+   201,     0,     0,   202,     0,     0,     0,     0,     0,   597,
+     0,     0,   204,   205,   206,   207,     0,     0,   208,   209,
+   194,   195,     0,     0,     0,    78,     0,   613,     0,   192,
+   193,     0,     0,     0,   196,     0,     0,     0,     0,     0,
+   197,     0,     0,     0,     0,     0,     0,   198,     0,     0,
+     0,   199,     0,     0,     0,     0,     0,    80,     0,     0,
+    81,    20,     0,     0,   200,   201,     0,     0,   202,     0,
+     0,   194,   195,   605,     0,     0,    78,   204,   205,   206,
+   207,     0,     0,   208,   209,   196,     0,     0,     0,     0,
+     0,   197,   493,     0,   192,   193,     0,     0,   198,     0,
+     0,     0,   199,     0,     0,     0,     0,     0,    80,     0,
+     0,    81,    20,     0,     0,   200,   201,     0,     0,   202,
+   614,     0,     0,     0,     0,     0,     0,     0,   204,   205,
+   206,   207,     0,     0,   208,   209,   194,   195,     0,     0,
+     0,    78,     0,   582,     0,   192,   193,     0,     0,     0,
+   196,     0,     0,     0,     0,     0,   197,     0,     0,     0,
+     0,     0,     0,   198,     0,     0,     0,   199,     0,     0,
      0,     0,     0,    80,     0,     0,    81,    20,     0,     0,
-   198,   199,     0,     0,   200,     0,     0,     0,     0,   560,
-     0,     0,     0,   202,   203,   204,   205,     0,     0,   206,
-   207,   192,   193,     0,     0,     0,    78,     0,   615,     0,
-   190,   191,     0,     0,     0,   194,     0,     0,     0,     0,
-     0,   195,     0,     0,     0,     0,     0,     0,   196,     0,
-     0,     0,   197,     0,     0,     0,     0,     0,    80,     0,
-     0,    81,    20,     0,     0,   198,   199,     0,     0,   200,
-     0,     0,   192,   193,   148,     0,     0,    78,   202,   203,
-   204,   205,     0,     0,   206,   207,   194,     0,     0,     0,
-     0,     0,   195,   629,     0,   190,   191,     0,     0,   196,
-     0,     0,     0,   197,     0,     0,     0,     0,     0,    80,
-     0,     0,    81,    20,     0,     0,   198,   199,     0,     0,
-   200,   616,     0,     0,     0,     0,     0,     0,     0,   202,
-   203,   204,   205,     0,     0,   206,   207,   192,   193,     0,
-     0,     0,    78,     0,   615,     0,   190,   191,     0,     0,
-     0,   194,     0,     0,     0,     0,     0,   195,     0,     0,
-     0,     0,     0,     0,   196,     0,     0,     0,   197,     0,
+   200,   201,     0,     0,   202,     0,     0,   194,   195,   605,
+     0,     0,    78,   204,   205,   206,   207,     0,     0,   208,
+   209,   196,     0,     0,     0,     0,     0,   197,   717,     0,
+   192,   193,     0,     0,   198,     0,     0,     0,   199,     0,
      0,     0,     0,     0,    80,     0,     0,    81,    20,     0,
-     0,   198,   199,     0,     0,   200,     0,     0,   192,   193,
-     0,   630,     0,    78,   202,   203,   204,   205,     0,     0,
-   206,   207,   194,     0,     0,     0,     0,     0,   195,   720,
-     0,   190,   191,     0,     0,   196,     0,     0,     0,   197,
+     0,   200,   201,     0,     0,   202,   701,     0,     0,     0,
+     0,     0,     0,     0,   204,   205,   206,   207,     0,     0,
+   208,   209,   194,   195,     0,     0,     0,    78,     0,   717,
+     0,   192,   193,     0,     0,     0,   196,     0,     0,     0,
+     0,     0,   197,     0,     0,     0,     0,     0,     0,   198,
+     0,     0,     0,   199,     0,     0,     0,     0,     0,    80,
+     0,     0,    81,    20,     0,     0,   200,   201,     0,     0,
+   202,   718,     0,   194,   195,     0,     0,     0,    78,   204,
+   205,   206,   207,     0,     0,   208,   209,   196,     0,     0,
+     0,     0,     0,   197,   596,     0,   192,   193,     0,     0,
+   198,     0,     0,     0,   199,     0,     0,     0,     0,     0,
+    80,     0,     0,    81,    20,     0,     0,   200,   201,     0,
+     0,   202,   750,     0,     0,     0,     0,     0,     0,     0,
+   204,   205,   206,   207,     0,     0,   208,   209,   194,   195,
+     0,     0,     0,    78,     0,   329,     0,   192,   193,     0,
+     0,     0,   196,     0,     0,     0,     0,     0,   197,     0,
+     0,     0,     0,     0,     0,   198,     0,     0,     0,   199,
      0,     0,     0,     0,     0,    80,     0,     0,    81,    20,
-     0,     0,   198,   199,     0,     0,   200,   700,     0,     0,
-     0,     0,     0,     0,     0,   202,   203,   204,   205,     0,
-     0,   206,   207,   192,   193,     0,     0,     0,    78,     0,
-   720,     0,   190,   191,     0,     0,     0,   194,     0,     0,
-     0,     0,     0,   195,     0,     0,     0,     0,     0,     0,
-   196,     0,     0,     0,   197,     0,     0,     0,     0,     0,
-    80,     0,     0,    81,    20,     0,     0,   198,   199,     0,
-     0,   200,   721,     0,   192,   193,     0,     0,     0,    78,
-   202,   203,   204,   205,     0,     0,   206,   207,   194,     0,
-     0,     0,     0,     0,   195,   629,     0,   190,   191,     0,
-     0,   196,     0,     0,     0,   197,     0,     0,     0,     0,
-     0,    80,     0,     0,    81,    20,     0,     0,   198,   199,
-     0,     0,   200,   749,     0,     0,     0,     0,     0,     0,
-     0,   202,   203,   204,   205,     0,     0,   206,   207,   192,
-   193,     0,     0,     0,    78,     0,   266,     0,   190,   191,
-     0,     0,     0,   194,     0,     0,     0,     0,     0,   195,
-     0,     0,     0,     0,     0,     0,   196,     0,     0,     0,
-   197,     0,     0,     0,     0,     0,    80,     0,     0,    81,
-    20,     0,     0,   198,   199,     0,     0,   200,     0,     0,
-   192,   193,     0,   754,     0,    78,   202,   203,   204,   205,
-     0,     0,   206,   207,   194,     0,     0,     0,     0,     0,
-   195,   271,     0,   190,   191,     0,     0,   196,     0,     0,
-     0,   197,     0,     0,     0,     0,     0,    80,     0,     0,
-    81,    20,     0,     0,   198,   199,     0,     0,   200,     0,
-     0,     0,     0,     0,     0,     0,     0,   202,   203,   204,
-   205,     0,     0,   206,   207,   192,   193,     0,     0,     0,
-    78,     0,   273,     0,   190,   191,     0,     0,     0,   194,
-     0,     0,     0,     0,     0,   195,     0,     0,     0,     0,
-     0,     0,   196,     0,     0,     0,   197,     0,     0,     0,
-     0,     0,    80,     0,     0,    81,    20,     0,     0,   198,
-   199,     0,     0,   200,     0,     0,   192,   193,     0,     0,
-     0,    78,   202,   203,   204,   205,     0,     0,   206,   207,
-   194,     0,     0,     0,     0,     0,   195,   275,     0,   190,
-   191,     0,     0,   196,     0,     0,     0,   197,     0,     0,
+     0,     0,   200,   201,     0,     0,   202,     0,     0,   194,
+   195,     0,   755,     0,    78,   204,   205,   206,   207,     0,
+     0,   208,   209,   196,     0,     0,     0,     0,     0,   197,
+   334,     0,   192,   193,     0,     0,   198,     0,     0,     0,
+   199,     0,     0,     0,     0,     0,    80,     0,     0,    81,
+    20,     0,     0,   200,   201,     0,     0,   202,     0,     0,
+     0,     0,     0,     0,     0,     0,   204,   205,   206,   207,
+     0,     0,   208,   209,   194,   195,     0,     0,     0,    78,
+     0,   336,     0,   192,   193,     0,     0,     0,   196,     0,
+     0,     0,     0,     0,   197,     0,     0,     0,     0,     0,
+     0,   198,     0,     0,     0,   199,     0,     0,     0,     0,
+     0,    80,     0,     0,    81,    20,     0,     0,   200,   201,
+     0,     0,   202,     0,     0,   194,   195,     0,     0,     0,
+    78,   204,   205,   206,   207,     0,     0,   208,   209,   196,
+     0,     0,     0,     0,     0,   197,   338,     0,   192,   193,
+     0,     0,   198,     0,     0,     0,   199,     0,     0,     0,
+     0,     0,    80,     0,     0,    81,    20,     0,     0,   200,
+   201,     0,     0,   202,     0,     0,     0,     0,     0,     0,
+     0,     0,   204,   205,   206,   207,     0,     0,   208,   209,
+   194,   195,     0,     0,     0,    78,     0,   347,     0,   192,
+   193,     0,     0,     0,   196,     0,     0,     0,     0,     0,
+   197,     0,     0,     0,     0,     0,     0,   198,     0,     0,
+     0,   199,     0,     0,     0,     0,     0,    80,     0,     0,
+    81,    20,     0,     0,   200,   201,     0,     0,   202,     0,
+     0,   194,   195,     0,     0,     0,    78,   204,   205,   206,
+   207,     0,     0,   208,   209,   196,     0,     0,     0,     0,
+     0,   197,   349,     0,   192,   193,     0,     0,   198,     0,
+     0,     0,   199,     0,     0,     0,     0,     0,    80,     0,
+     0,    81,    20,     0,     0,   200,   201,     0,     0,   202,
+     0,     0,     0,     0,     0,     0,     0,     0,   204,   205,
+   206,   207,     0,     0,   208,   209,   194,   195,     0,     0,
+     0,    78,     0,   351,     0,   192,   193,     0,     0,     0,
+   196,     0,     0,     0,     0,     0,   197,     0,     0,     0,
+     0,     0,     0,   198,     0,     0,     0,   199,     0,     0,
      0,     0,     0,    80,     0,     0,    81,    20,     0,     0,
-   198,   199,     0,     0,   200,     0,     0,     0,     0,     0,
-     0,     0,     0,   202,   203,   204,   205,     0,     0,   206,
-   207,   192,   193,     0,     0,     0,    78,     0,   284,     0,
-   190,   191,     0,     0,     0,   194,     0,     0,     0,     0,
-     0,   195,     0,     0,     0,     0,     0,     0,   196,     0,
-     0,     0,   197,     0,     0,     0,     0,     0,    80,     0,
-     0,    81,    20,     0,     0,   198,   199,     0,     0,   200,
-     0,     0,   192,   193,     0,     0,     0,    78,   202,   203,
-   204,   205,     0,     0,   206,   207,   194,     0,     0,     0,
-     0,     0,   195,   286,     0,   190,   191,     0,     0,   196,
-     0,     0,     0,   197,     0,     0,     0,     0,     0,    80,
-     0,     0,    81,    20,     0,     0,   198,   199,     0,     0,
-   200,     0,     0,     0,     0,     0,     0,     0,     0,   202,
-   203,   204,   205,     0,     0,   206,   207,   192,   193,     0,
-     0,     0,    78,     0,   288,     0,   190,   191,     0,     0,
-     0,   194,     0,     0,     0,     0,     0,   195,     0,     0,
-     0,     0,     0,     0,   196,     0,     0,     0,   197,     0,
+   200,   201,     0,     0,   202,     0,     0,   194,   195,     0,
+     0,     0,    78,   204,   205,   206,   207,     0,     0,   208,
+   209,   196,     0,     0,     0,     0,     0,   197,   409,     0,
+   192,   193,     0,     0,   198,     0,     0,     0,   199,     0,
      0,     0,     0,     0,    80,     0,     0,    81,    20,     0,
-     0,   198,   199,     0,     0,   200,     0,     0,   192,   193,
-     0,     0,     0,    78,   202,   203,   204,   205,     0,     0,
-   206,   207,   194,     0,     0,     0,     0,     0,   195,   437,
-     0,   190,   191,     0,     0,   196,     0,     0,     0,   197,
+     0,   200,   201,     0,     0,   202,     0,     0,     0,     0,
+     0,     0,     0,     0,   204,   205,   206,   207,     0,     0,
+   208,   209,   194,   195,     0,     0,     0,    78,     0,   493,
+     0,   192,   193,     0,     0,     0,   196,     0,     0,     0,
+     0,     0,   197,     0,     0,     0,     0,     0,     0,   198,
+     0,     0,     0,   199,     0,     0,     0,     0,     0,    80,
+     0,     0,    81,    20,     0,     0,   200,   201,     0,     0,
+   202,     0,     0,   194,   195,     0,     0,     0,    78,   204,
+   205,   206,   207,     0,     0,   208,   209,   196,     0,     0,
+     0,     0,     0,   197,   501,     0,   192,   193,     0,     0,
+   198,     0,     0,     0,   199,     0,     0,     0,     0,     0,
+    80,     0,     0,    81,    20,     0,     0,   200,   201,     0,
+     0,   202,     0,     0,     0,     0,     0,     0,     0,     0,
+   204,   205,   206,   207,     0,     0,   208,   209,   194,   195,
+     0,     0,     0,    78,     0,   505,     0,   192,   193,     0,
+     0,     0,   196,     0,     0,     0,     0,     0,   197,     0,
+     0,     0,     0,     0,     0,   198,     0,     0,     0,   199,
      0,     0,     0,     0,     0,    80,     0,     0,    81,    20,
-     0,     0,   198,   199,     0,     0,   200,     0,     0,     0,
-     0,     0,     0,     0,     0,   202,   203,   204,   205,     0,
-     0,   206,   207,   192,   193,     0,     0,     0,    78,     0,
-   445,     0,   190,   191,     0,     0,     0,   194,     0,     0,
-     0,     0,     0,   195,     0,     0,     0,     0,     0,     0,
-   196,     0,     0,     0,   197,     0,     0,     0,     0,     0,
-    80,     0,     0,    81,    20,     0,     0,   198,   199,     0,
-     0,   200,     0,     0,   192,   193,     0,     0,     0,    78,
-   202,   203,   204,   205,     0,     0,   206,   207,   194,     0,
-     0,     0,     0,     0,   195,   449,     0,   190,   191,     0,
-     0,   196,     0,     0,     0,   197,     0,     0,     0,     0,
-     0,    80,     0,     0,    81,    20,     0,     0,   198,   199,
-     0,     0,   200,     0,     0,     0,     0,     0,     0,     0,
-     0,   202,   203,   204,   205,     0,     0,   206,   207,   192,
-   193,     0,     0,     0,    78,     0,   451,     0,   190,   191,
-     0,     0,     0,   194,     0,     0,     0,     0,     0,   195,
-     0,     0,     0,     0,     0,     0,   196,     0,     0,     0,
-   197,     0,     0,     0,     0,     0,    80,     0,     0,    81,
-    20,     0,     0,   198,   199,     0,     0,   200,     0,     0,
-   192,   193,     0,     0,     0,    78,   202,   203,   204,   205,
-     0,     0,   206,   207,   194,     0,     0,     0,     0,     0,
-   195,   453,     0,   190,   191,     0,     0,   196,     0,     0,
-     0,   197,     0,     0,     0,     0,     0,    80,     0,     0,
-    81,    20,     0,     0,   198,   199,     0,     0,   200,     0,
-     0,     0,     0,     0,     0,     0,     0,   202,   203,   204,
-   205,     0,     0,   206,   207,   192,   193,     0,     0,     0,
-    78,     0,   455,     0,   190,   191,     0,     0,     0,   194,
-     0,     0,     0,     0,     0,   195,     0,     0,     0,     0,
-     0,     0,   196,     0,     0,     0,   197,     0,     0,     0,
-     0,     0,    80,     0,     0,    81,    20,     0,     0,   198,
-   199,     0,     0,   200,     0,     0,   192,   193,     0,     0,
-     0,    78,   202,   203,   204,   205,     0,     0,   206,   207,
-   194,     0,     0,     0,     0,     0,   195,   457,     0,   190,
-   191,     0,     0,   196,     0,     0,     0,   197,     0,     0,
+     0,     0,   200,   201,     0,     0,   202,     0,     0,   194,
+   195,     0,     0,     0,    78,   204,   205,   206,   207,     0,
+     0,   208,   209,   196,     0,     0,     0,     0,     0,   197,
+   507,     0,   192,   193,     0,     0,   198,     0,     0,     0,
+   199,     0,     0,     0,     0,     0,    80,     0,     0,    81,
+    20,     0,     0,   200,   201,     0,     0,   202,     0,     0,
+     0,     0,     0,     0,     0,     0,   204,   205,   206,   207,
+     0,     0,   208,   209,   194,   195,     0,     0,     0,    78,
+     0,   509,     0,   192,   193,     0,     0,     0,   196,     0,
+     0,     0,     0,     0,   197,     0,     0,     0,     0,     0,
+     0,   198,     0,     0,     0,   199,     0,     0,     0,     0,
+     0,    80,     0,     0,    81,    20,     0,     0,   200,   201,
+     0,     0,   202,     0,     0,   194,   195,     0,     0,     0,
+    78,   204,   205,   206,   207,     0,     0,   208,   209,   196,
+     0,     0,     0,     0,     0,   197,   511,     0,   192,   193,
+     0,     0,   198,     0,     0,     0,   199,     0,     0,     0,
+     0,     0,    80,     0,     0,    81,    20,     0,     0,   200,
+   201,     0,     0,   202,     0,     0,     0,     0,     0,     0,
+     0,     0,   204,   205,   206,   207,     0,     0,   208,   209,
+   194,   195,     0,     0,     0,    78,     0,   513,     0,   192,
+   193,     0,     0,     0,   196,     0,     0,     0,     0,     0,
+   197,     0,     0,     0,     0,     0,     0,   198,     0,     0,
+     0,   199,     0,     0,     0,     0,     0,    80,     0,     0,
+    81,    20,     0,     0,   200,   201,     0,     0,   202,     0,
+     0,   194,   195,     0,     0,     0,    78,   204,   205,   206,
+   207,     0,     0,   208,   209,   196,     0,     0,     0,     0,
+     0,   197,   515,     0,   192,   193,     0,     0,   198,     0,
+     0,     0,   199,     0,     0,     0,     0,     0,    80,     0,
+     0,    81,    20,     0,     0,   200,   201,     0,     0,   202,
+     0,     0,     0,     0,     0,     0,     0,     0,   204,   205,
+   206,   207,     0,     0,   208,   209,   194,   195,     0,     0,
+     0,    78,     0,   517,     0,   192,   193,     0,     0,     0,
+   196,     0,     0,     0,     0,     0,   197,     0,     0,     0,
+     0,     0,     0,   198,     0,     0,     0,   199,     0,     0,
      0,     0,     0,    80,     0,     0,    81,    20,     0,     0,
-   198,   199,     0,     0,   200,     0,     0,     0,     0,     0,
-     0,     0,     0,   202,   203,   204,   205,     0,     0,   206,
-   207,   192,   193,     0,     0,     0,    78,     0,   459,     0,
-   190,   191,     0,     0,     0,   194,     0,     0,     0,     0,
-     0,   195,     0,     0,     0,     0,     0,     0,   196,     0,
-     0,     0,   197,     0,     0,     0,     0,     0,    80,     0,
-     0,    81,    20,     0,     0,   198,   199,     0,     0,   200,
-     0,     0,   192,   193,     0,     0,     0,    78,   202,   203,
-   204,   205,     0,     0,   206,   207,   194,     0,     0,     0,
-     0,     0,   195,   461,     0,   190,   191,     0,     0,   196,
-     0,     0,     0,   197,     0,     0,     0,     0,     0,    80,
-     0,     0,    81,    20,     0,     0,   198,   199,     0,     0,
-   200,     0,     0,     0,     0,     0,     0,     0,     0,   202,
-   203,   204,   205,     0,     0,   206,   207,   192,   193,     0,
-     0,     0,    78,     0,   463,     0,   190,   191,     0,     0,
-     0,   194,     0,     0,     0,     0,     0,   195,     0,     0,
-     0,     0,     0,     0,   196,     0,     0,     0,   197,     0,
+   200,   201,     0,     0,   202,     0,     0,   194,   195,     0,
+     0,     0,    78,   204,   205,   206,   207,     0,     0,   208,
+   209,   196,     0,     0,     0,     0,     0,   197,   519,     0,
+   192,   193,     0,     0,   198,     0,     0,     0,   199,     0,
      0,     0,     0,     0,    80,     0,     0,    81,    20,     0,
-     0,   198,   199,     0,     0,   200,     0,     0,   192,   193,
-     0,     0,     0,    78,   202,   203,   204,   205,     0,     0,
-   206,   207,   194,     0,     0,     0,     0,     0,   195,   465,
-     0,   190,   191,     0,     0,   196,     0,     0,     0,   197,
+     0,   200,   201,     0,     0,   202,     0,     0,     0,     0,
+     0,     0,     0,     0,   204,   205,   206,   207,     0,     0,
+   208,   209,   194,   195,     0,     0,     0,    78,     0,   521,
+     0,   192,   193,     0,     0,     0,   196,     0,     0,     0,
+     0,     0,   197,     0,     0,     0,     0,     0,     0,   198,
+     0,     0,     0,   199,     0,     0,     0,     0,     0,    80,
+     0,     0,    81,    20,     0,     0,   200,   201,     0,     0,
+   202,     0,     0,   194,   195,     0,     0,     0,    78,   204,
+   205,   206,   207,     0,     0,   208,   209,   196,     0,     0,
+     0,     0,     0,   197,   523,     0,   192,   193,     0,     0,
+   198,     0,     0,     0,   199,     0,     0,     0,     0,     0,
+    80,     0,     0,    81,    20,     0,     0,   200,   201,     0,
+     0,   202,     0,     0,     0,     0,     0,     0,     0,     0,
+   204,   205,   206,   207,     0,     0,   208,   209,   194,   195,
+     0,     0,     0,    78,     0,   525,     0,   192,   193,     0,
+     0,     0,   196,     0,     0,     0,     0,     0,   197,     0,
+     0,     0,     0,     0,     0,   198,     0,     0,     0,   199,
      0,     0,     0,     0,     0,    80,     0,     0,    81,    20,
-     0,     0,   198,   199,     0,     0,   200,     0,     0,     0,
-     0,     0,     0,     0,     0,   202,   203,   204,   205,     0,
-     0,   206,   207,   192,   193,     0,     0,     0,    78,     0,
-   467,     0,   190,   191,     0,     0,     0,   194,     0,     0,
-     0,     0,     0,   195,     0,     0,     0,     0,     0,     0,
-   196,     0,     0,     0,   197,     0,     0,     0,     0,     0,
-    80,     0,     0,    81,    20,     0,     0,   198,   199,     0,
-     0,   200,     0,     0,   192,   193,     0,     0,     0,    78,
-   202,   203,   204,   205,     0,     0,   206,   207,   194,     0,
-     0,     0,     0,     0,   195,   469,     0,   190,   191,     0,
-     0,   196,     0,     0,     0,   197,     0,     0,     0,     0,
-     0,    80,     0,     0,    81,    20,     0,     0,   198,   199,
-     0,     0,   200,     0,     0,     0,     0,     0,     0,     0,
-     0,   202,   203,   204,   205,     0,     0,   206,   207,   192,
-   193,     0,     0,     0,    78,     0,   471,     0,   190,   191,
-     0,     0,     0,   194,     0,     0,     0,     0,     0,   195,
-     0,     0,     0,     0,     0,     0,   196,     0,     0,     0,
-   197,     0,     0,     0,     0,     0,    80,     0,     0,    81,
-    20,     0,     0,   198,   199,     0,     0,   200,     0,     0,
-   192,   193,     0,     0,     0,    78,   202,   203,   204,   205,
-     0,     0,   206,   207,   194,     0,     0,     0,     0,     0,
-   195,   476,     0,   190,   191,     0,     0,   196,     0,     0,
-     0,   197,     0,     0,     0,     0,     0,    80,     0,     0,
-    81,    20,     0,     0,   198,   199,     0,     0,   200,     0,
-     0,     0,     0,     0,     0,     0,     0,   202,   203,   204,
-   205,     0,     0,   206,   207,   192,   193,     0,     0,     0,
-    78,     0,   478,     0,   190,   191,     0,     0,     0,   194,
-     0,     0,     0,     0,     0,   195,     0,     0,     0,     0,
-     0,     0,   196,     0,     0,     0,   197,     0,     0,     0,
-     0,     0,    80,     0,     0,    81,    20,     0,     0,   198,
-   199,     0,     0,   200,     0,     0,   192,   193,     0,     0,
-     0,    78,   202,   203,   204,   205,     0,     0,   206,   207,
-   194,     0,     0,     0,     0,     0,   195,   480,     0,   190,
-   191,     0,     0,   196,     0,     0,     0,   197,     0,     0,
+     0,     0,   200,   201,     0,     0,   202,     0,     0,   194,
+   195,     0,     0,     0,    78,   204,   205,   206,   207,     0,
+     0,   208,   209,   196,     0,     0,     0,     0,     0,   197,
+   527,     0,   192,   193,     0,     0,   198,     0,     0,     0,
+   199,     0,     0,     0,     0,     0,    80,     0,     0,    81,
+    20,     0,     0,   200,   201,     0,     0,   202,     0,     0,
+     0,     0,     0,     0,     0,     0,   204,   205,   206,   207,
+     0,     0,   208,   209,   194,   195,     0,     0,     0,    78,
+     0,   532,     0,   192,   193,     0,     0,     0,   196,     0,
+     0,     0,     0,     0,   197,     0,     0,     0,     0,     0,
+     0,   198,     0,     0,     0,   199,     0,     0,     0,     0,
+     0,    80,     0,     0,    81,    20,     0,     0,   200,   201,
+     0,     0,   202,     0,     0,   194,   195,     0,     0,     0,
+    78,   204,   205,   206,   207,     0,     0,   208,   209,   196,
+     0,     0,     0,     0,     0,   197,   534,     0,   192,   193,
+     0,     0,   198,     0,     0,     0,   199,     0,     0,     0,
+     0,     0,    80,     0,     0,    81,    20,     0,     0,   200,
+   201,     0,     0,   202,     0,     0,     0,     0,     0,     0,
+     0,     0,   204,   205,   206,   207,     0,     0,   208,   209,
+   194,   195,     0,     0,     0,    78,     0,   536,     0,   192,
+   193,     0,     0,     0,   196,     0,     0,     0,     0,     0,
+   197,     0,     0,     0,     0,     0,     0,   198,     0,     0,
+     0,   199,     0,     0,     0,     0,     0,    80,     0,     0,
+    81,    20,     0,     0,   200,   201,     0,     0,   202,     0,
+     0,   194,   195,     0,     0,     0,    78,   204,   205,   206,
+   207,     0,     0,   208,   209,   196,     0,     0,     0,     0,
+     0,   197,   538,     0,   192,   193,     0,     0,   198,     0,
+     0,     0,   199,     0,     0,     0,     0,     0,    80,     0,
+     0,    81,    20,     0,     0,   200,   201,     0,     0,   202,
+     0,     0,     0,     0,     0,     0,     0,     0,   204,   205,
+   206,   207,     0,     0,   208,   209,   194,   195,     0,     0,
+     0,    78,     0,   540,     0,   192,   193,     0,     0,     0,
+   196,     0,     0,     0,     0,     0,   197,     0,     0,     0,
+     0,     0,     0,   198,     0,     0,     0,   199,     0,     0,
      0,     0,     0,    80,     0,     0,    81,    20,     0,     0,
-   198,   199,     0,     0,   200,     0,     0,     0,     0,     0,
-     0,     0,     0,   202,   203,   204,   205,     0,     0,   206,
-   207,   192,   193,     0,     0,     0,    78,     0,   482,     0,
-   190,   191,     0,     0,     0,   194,     0,     0,     0,     0,
-     0,   195,     0,     0,     0,     0,     0,     0,   196,     0,
-     0,     0,   197,     0,     0,     0,     0,     0,    80,     0,
-     0,    81,    20,     0,     0,   198,   199,     0,     0,   200,
-     0,     0,   192,   193,     0,     0,     0,    78,   202,   203,
-   204,   205,     0,     0,   206,   207,   194,     0,     0,     0,
-     0,     0,   195,   484,     0,   190,   191,     0,     0,   196,
-     0,     0,     0,   197,     0,     0,     0,     0,     0,    80,
-     0,     0,    81,    20,     0,     0,   198,   199,     0,     0,
-   200,     0,     0,     0,     0,     0,     0,     0,     0,   202,
-   203,   204,   205,     0,     0,   206,   207,   192,   193,     0,
-     0,     0,    78,     0,   486,     0,   190,   191,     0,     0,
-     0,   194,     0,     0,     0,     0,     0,   195,     0,     0,
-     0,     0,     0,     0,   196,     0,     0,     0,   197,     0,
+   200,   201,     0,     0,   202,     0,     0,   194,   195,     0,
+     0,     0,    78,   204,   205,   206,   207,     0,     0,   208,
+   209,   196,     0,     0,     0,     0,     0,   197,   542,     0,
+   192,   193,     0,     0,   198,     0,     0,     0,   199,     0,
      0,     0,     0,     0,    80,     0,     0,    81,    20,     0,
-     0,   198,   199,     0,     0,   200,     0,     0,   192,   193,
-     0,     0,     0,    78,   202,   203,   204,   205,     0,     0,
-   206,   207,   194,     0,     0,     0,     0,     0,   195,   488,
-     0,   190,   191,     0,     0,   196,     0,     0,     0,   197,
+     0,   200,   201,     0,     0,   202,     0,     0,     0,     0,
+     0,     0,     0,     0,   204,   205,   206,   207,     0,     0,
+   208,   209,   194,   195,     0,     0,     0,    78,     0,   544,
+     0,   192,   193,     0,     0,     0,   196,     0,     0,     0,
+     0,     0,   197,     0,     0,     0,     0,     0,     0,   198,
+     0,     0,     0,   199,     0,     0,     0,     0,     0,    80,
+     0,     0,    81,    20,     0,     0,   200,   201,     0,     0,
+   202,     0,     0,   194,   195,     0,     0,     0,    78,   204,
+   205,   206,   207,     0,     0,   208,   209,   196,     0,     0,
+     0,     0,     0,   197,   549,     0,   192,   193,     0,     0,
+   198,     0,     0,     0,   199,     0,     0,     0,     0,     0,
+    80,     0,     0,    81,    20,     0,     0,   200,   201,     0,
+     0,   202,     0,     0,     0,     0,     0,     0,     0,     0,
+   204,   205,   206,   207,     0,     0,   208,   209,   194,   195,
+     0,     0,     0,    78,     0,   558,     0,   192,   193,     0,
+     0,     0,   196,     0,     0,     0,     0,     0,   197,     0,
+     0,     0,     0,     0,     0,   198,     0,     0,     0,   199,
      0,     0,     0,     0,     0,    80,     0,     0,    81,    20,
-     0,     0,   198,   199,     0,     0,   200,     0,     0,     0,
-     0,     0,     0,     0,     0,   202,   203,   204,   205,     0,
-     0,   206,   207,   192,   193,     0,     0,     0,    78,     0,
-   493,     0,   190,   191,     0,     0,     0,   194,     0,     0,
-     0,     0,     0,   195,     0,     0,     0,     0,     0,     0,
-   196,     0,     0,     0,   197,     0,     0,     0,     0,     0,
-    80,     0,     0,    81,    20,     0,     0,   198,   199,     0,
-     0,   200,     0,     0,   192,   193,     0,     0,     0,    78,
-   202,   203,   204,   205,     0,     0,   206,   207,   194,     0,
-     0,     0,     0,     0,   195,   500,     0,   190,   191,     0,
-     0,   196,     0,     0,     0,   197,     0,     0,     0,     0,
-     0,    80,     0,     0,    81,    20,     0,     0,   198,   199,
-     0,     0,   200,     0,     0,     0,     0,     0,     0,     0,
-     0,   202,   203,   204,   205,     0,     0,   206,   207,   192,
-   193,     0,     0,     0,    78,     0,   571,     0,   190,   191,
-     0,     0,     0,   194,     0,     0,     0,     0,     0,   195,
-     0,     0,     0,     0,     0,     0,   196,     0,     0,     0,
-   197,     0,     0,     0,     0,     0,    80,     0,     0,    81,
-    20,     0,     0,   198,   199,     0,     0,   200,     0,     0,
-   192,   193,     0,     0,     0,    78,   202,   203,   204,   205,
-     0,     0,   206,   207,   194,     0,     0,     0,     0,     0,
-   195,   591,     0,   190,   191,     0,     0,   196,     0,     0,
-     0,   197,     0,     0,     0,     0,     0,    80,     0,     0,
-    81,    20,     0,     0,   198,   199,     0,     0,   200,     0,
-     0,     0,     0,     0,     0,     0,     0,   202,   203,   204,
-   205,     0,     0,   206,   207,   192,   193,     0,     0,     0,
-    78,     0,   599,     0,   190,   191,     0,     0,     0,   194,
-     0,     0,     0,     0,     0,   195,     0,     0,     0,     0,
-     0,     0,   196,     0,     0,     0,   197,     0,     0,     0,
-     0,     0,    80,     0,     0,    81,    20,     0,     0,   198,
-   199,     0,     0,   200,     0,     0,   192,   193,     0,     0,
-     0,    78,   202,   203,   204,   205,     0,     0,   206,   207,
-   194,     0,     0,     0,     0,     0,   195,   601,     0,   190,
-   191,     0,     0,   196,     0,     0,     0,   197,     0,     0,
+     0,     0,   200,   201,     0,     0,   202,     0,     0,   194,
+   195,     0,     0,     0,    78,   204,   205,   206,   207,     0,
+     0,   208,   209,   196,     0,     0,     0,     0,     0,   197,
+   566,     0,   192,   193,     0,     0,   198,     0,     0,     0,
+   199,     0,     0,     0,     0,     0,    80,     0,     0,    81,
+    20,     0,     0,   200,   201,     0,     0,   202,     0,     0,
+     0,     0,     0,     0,     0,     0,   204,   205,   206,   207,
+     0,     0,   208,   209,   194,   195,     0,     0,     0,    78,
+     0,   568,     0,   192,   193,     0,     0,     0,   196,     0,
+     0,     0,     0,     0,   197,     0,     0,     0,     0,     0,
+     0,   198,     0,     0,     0,   199,     0,     0,     0,     0,
+     0,    80,     0,     0,    81,    20,     0,     0,   200,   201,
+     0,     0,   202,     0,     0,   194,   195,     0,     0,     0,
+    78,   204,   205,   206,   207,     0,     0,   208,   209,   196,
+     0,     0,     0,     0,     0,   197,   599,     0,   192,   193,
+     0,     0,   198,     0,     0,     0,   199,     0,     0,     0,
+     0,     0,    80,     0,     0,    81,    20,     0,     0,   200,
+   201,     0,     0,   202,     0,     0,     0,     0,     0,     0,
+     0,     0,   204,   205,   206,   207,     0,     0,   208,   209,
+   194,   195,     0,     0,     0,    78,     0,   616,     0,   192,
+   193,     0,     0,     0,   196,     0,     0,     0,     0,     0,
+   197,     0,     0,     0,     0,     0,     0,   198,     0,     0,
+     0,   199,     0,     0,     0,     0,     0,    80,     0,     0,
+    81,    20,     0,     0,   200,   201,     0,     0,   202,     0,
+     0,   194,   195,     0,     0,     0,    78,   204,   205,   206,
+   207,     0,     0,   208,   209,   196,     0,     0,     0,     0,
+     0,   197,   660,     0,   192,   193,     0,     0,   198,     0,
+     0,     0,   199,     0,     0,     0,     0,     0,    80,     0,
+     0,    81,    20,     0,     0,   200,   201,     0,     0,   202,
+     0,     0,     0,     0,     0,     0,     0,     0,   204,   205,
+   206,   207,     0,     0,   208,   209,   194,   195,     0,     0,
+     0,    78,     0,   687,     0,   192,   193,     0,     0,     0,
+   196,     0,     0,     0,     0,     0,   197,     0,     0,     0,
+     0,     0,     0,   198,     0,     0,     0,   199,     0,     0,
      0,     0,     0,    80,     0,     0,    81,    20,     0,     0,
-   198,   199,     0,     0,   200,     0,     0,     0,     0,     0,
-     0,     0,     0,   202,   203,   204,   205,     0,     0,   206,
-   207,   192,   193,     0,     0,     0,    78,     0,   632,     0,
-   190,   191,     0,     0,     0,   194,     0,     0,     0,     0,
-     0,   195,     0,     0,     0,     0,     0,     0,   196,     0,
-     0,     0,   197,     0,     0,     0,     0,     0,    80,     0,
-     0,    81,    20,     0,     0,   198,   199,     0,     0,   200,
-     0,     0,   192,   193,     0,     0,     0,    78,   202,   203,
-   204,   205,     0,     0,   206,   207,   194,     0,     0,     0,
-     0,     0,   195,   649,     0,   190,   191,     0,     0,   196,
-     0,     0,     0,   197,     0,     0,     0,     0,     0,    80,
-     0,     0,    81,    20,     0,     0,   198,   199,     0,     0,
-   200,     0,     0,     0,     0,     0,     0,     0,     0,   202,
-   203,   204,   205,     0,     0,   206,   207,   192,   193,     0,
-     0,     0,    78,     0,   653,     0,   190,   191,     0,     0,
-     0,   194,     0,     0,     0,     0,     0,   195,     0,     0,
-     0,     0,     0,     0,   196,     0,     0,     0,   197,     0,
+   200,   201,     0,     0,   202,     0,     0,   194,   195,     0,
+     0,     0,    78,   204,   205,   206,   207,     0,     0,   208,
+   209,   196,     0,     0,     0,     0,     0,   197,   691,     0,
+   192,   193,     0,     0,   198,     0,     0,     0,   199,     0,
      0,     0,     0,     0,    80,     0,     0,    81,    20,     0,
-     0,   198,   199,     0,     0,   200,     0,     0,   192,   193,
-     0,     0,     0,    78,   202,   203,   204,   205,     0,     0,
-   206,   207,   194,     0,     0,     0,     0,     0,   195,   659,
-     0,   190,   191,     0,     0,   196,     0,     0,     0,   197,
-     0,     0,     0,     0,     0,    80,     0,     0,    81,    20,
-     0,     0,   198,   199,     0,     0,   200,     0,     0,     0,
-     0,     0,     0,     0,     0,   202,   203,   204,   205,     0,
-     0,   206,   207,   192,   193,     0,     0,     0,    78,     0,
-   680,     0,   190,   191,     0,     0,     0,   194,     0,     0,
-     0,     0,     0,   195,     0,     0,     0,     0,     0,     0,
-   196,     0,     0,     0,   197,     0,     0,     0,     0,     0,
-    80,     0,     0,    81,    20,     0,     0,   198,   199,     0,
-     0,   200,     0,     0,   192,   193,     0,     0,     0,    78,
-   202,   203,   204,   205,     0,     0,   206,   207,   194,     0,
-     0,     0,     0,     0,   195,     0,   609,     0,     0,     0,
-     0,   196,     0,     0,     0,   197,     0,     0,     0,     0,
-     0,    80,     0,     0,    81,    20,     0,     0,   198,   199,
-     0,   692,   200,     0,     0,     0,     0,     0,     0,     0,
-     0,   202,   203,   204,   205,     0,     0,   206,   207,  -286,
-  -286,  -286,     0,     0,     0,  -286,     0,     0,     0,     0,
-     0,     0,     0,     0,  -286,     0,     0,     0,     0,     0,
-  -286,     0,     0,   729,     0,   192,   193,  -286,     0,     0,
-    78,  -286,     0,     0,     0,     0,     0,  -286,     0,   194,
-  -286,  -286,     0,     0,     0,   195,     0,     0,  -286,     0,
-   190,   191,   196,     0,  -286,     0,   197,  -286,  -286,  -286,
-  -286,     0,    80,  -286,  -286,    81,    20,   192,   193,     0,
-     0,     0,    78,   345,  -294,     0,     0,     0,     0,     0,
-     0,   194,   202,   203,   204,   205,     0,   195,   206,   207,
-   690,     0,   192,   193,   196,     0,     0,    78,   197,     0,
-     0,     0,     0,     0,    80,     0,   194,    81,    20,     0,
-     0,     0,   195,     0,     0,   345,  -294,   190,   191,   196,
-     0,     0,     0,   197,   202,   203,   204,   205,     0,    80,
-   206,   207,    81,    20,   192,   193,   198,   199,     0,    78,
-   200,     0,   201,   292,     0,     0,     0,   293,   194,   202,
-   203,   204,   205,     0,   195,   206,   207,     0,     0,   192,
-   193,   196,     0,     0,    78,   197,     0,     0,   190,   191,
-     0,    80,     0,   194,    81,    20,     0,     0,     0,   195,
-     0,     0,   345,     0,     0,     0,   196,     0,     0,     0,
-   197,   202,   203,   204,   205,     0,    80,   206,   207,    81,
-    20,     0,     0,   198,   199,     0,     0,   200,   434,     0,
-   192,   193,     0,     0,     0,    78,   202,   203,   204,   205,
-     0,     0,   206,   207,   194,     0,     0,     0,     0,     0,
-   195,     0,     0,   190,   191,     0,     0,   196,     0,     0,
-     0,   197,     0,     0,     0,     0,     0,    80,     0,     0,
-    81,    20,     0,     0,   198,   199,     0,     0,   200,   587,
-     0,     0,     0,     0,     0,     0,     0,   202,   203,   204,
-   205,     0,     0,   206,   207,   192,   193,     0,     0,     0,
-    78,     0,     0,     0,   190,   191,     0,     0,     0,   194,
-     0,     0,     0,     0,     0,   195,     0,     0,     0,     0,
-     0,     0,   196,     0,     0,     0,   197,     0,     0,     0,
-     0,     0,    80,     0,     0,    81,    20,     0,     0,   198,
-   199,     0,     0,   200,   640,     0,   192,   193,     0,     0,
-     0,    78,   202,   203,   204,   205,     0,     0,   206,   207,
-   194,     0,     0,     0,     0,     0,   195,     0,     0,   190,
-   191,     0,     0,   196,     0,     0,     0,   197,     0,     0,
+     0,   200,   201,     0,     0,   202,     0,     0,     0,     0,
+     0,     0,     0,     0,   204,   205,   206,   207,     0,     0,
+   208,   209,   194,   195,     0,     0,     0,    78,     0,   697,
+     0,   192,   193,     0,     0,     0,   196,     0,     0,     0,
+     0,     0,   197,     0,     0,     0,     0,     0,     0,   198,
+     0,     0,     0,   199,     0,     0,     0,     0,     0,    80,
+     0,     0,    81,    20,     0,     0,   200,   201,     0,     0,
+   202,     0,     0,   194,   195,     0,     0,     0,    78,   204,
+   205,   206,   207,     0,     0,   208,   209,   196,     0,     0,
+     0,     0,     0,   197,     0,   576,     0,     0,     0,     0,
+   198,     0,     0,     0,   199,     0,     0,     0,     0,     0,
+    80,     0,     0,    81,    20,     0,     0,   200,   201,     0,
+   672,   202,     0,     0,     0,     0,     0,     0,     0,     0,
+   204,   205,   206,   207,     0,     0,   208,   209,  -287,  -287,
+  -287,     0,     0,     0,  -287,     0,     0,     0,     0,     0,
+     0,     0,     0,  -287,     0,     0,     0,     0,     0,  -287,
+     0,     0,   726,     0,   194,   195,  -287,     0,     0,    78,
+  -287,     0,     0,     0,     0,     0,  -287,     0,   196,  -287,
+  -287,     0,     0,     0,   197,     0,     0,  -287,     0,     0,
+     0,   198,     0,  -287,     0,   199,  -287,  -287,  -287,  -287,
+     0,    80,  -287,  -287,    81,    20,   194,   195,     0,     0,
+     0,    78,   276,  -295,     0,     0,     0,     0,     0,     0,
+   196,   204,   205,   206,   207,     0,   197,   208,   209,   670,
+     0,     0,     0,   198,     0,     0,     0,   199,     0,     0,
      0,     0,     0,    80,     0,     0,    81,    20,     0,     0,
-   198,   199,     0,     0,   200,   655,     0,     0,     0,     0,
-     0,     0,     0,   202,   203,   204,   205,     0,     0,   206,
-   207,   192,   193,     0,     0,     0,    78,     0,     0,     0,
-     0,     0,     0,     0,     0,   194,     0,     0,     0,     0,
-     0,   195,     0,     0,     0,     0,     0,     0,   196,     0,
-     0,     0,   197,     0,     0,     0,     0,     0,    80,     0,
-     0,    81,    20,     0,     0,   198,   199,    78,     0,   200,
-     0,     0,     0,     0,     0,     0,   194,     0,   202,   203,
-   204,   205,   195,     0,   206,   207,     0,     0,     0,   196,
-     0,     0,     0,   197,     0,     0,     0,     0,     0,    80,
-     0,     0,    81,    20,     0,     0,   198,   199,     0,     0,
-   200,     0,     0,     0,     0,     0,     0,     0,     0,   202,
-   203,   204,   205,     0,     0,   206,   207
+     0,     0,     0,     0,   276,  -295,     0,     0,     0,     0,
+     0,     0,     0,   204,   205,   206,   207,     0,     0,   208,
+   209,   689,     0,   194,   195,     0,     0,     0,    78,     0,
+     0,     0,     0,     0,     0,     0,     0,   196,     0,     0,
+     0,     0,     0,   197,     0,     0,     0,     0,     0,     0,
+   198,     0,     0,     0,   199,     0,     0,     0,     0,     0,
+    80,     0,     0,    81,    20,   192,   193,     0,     0,     0,
+    78,   276,     0,     0,     0,     0,     0,     0,     0,   196,
+   204,   205,   206,   207,     0,   197,   208,   209,     0,     0,
+     0,     0,   198,     0,     0,     0,   199,     0,     0,     0,
+     0,     0,    80,     0,     0,    81,    20,   194,   195,   200,
+   201,     0,    78,   202,     0,     0,     0,     0,     0,     0,
+     0,   196,   204,   205,   206,   207,     0,   197,   208,   209,
+   192,   193,     0,     0,   198,     0,     0,     0,   199,     0,
+     0,     0,     0,     0,    80,     0,     0,    81,    20,     0,
+     0,   200,   201,     0,     0,   202,     0,   203,   355,     0,
+     0,     0,   356,     0,   204,   205,   206,   207,     0,     0,
+   208,   209,   194,   195,     0,     0,     0,    78,     0,     0,
+     0,   192,   193,     0,     0,     0,   196,     0,     0,     0,
+     0,     0,   197,     0,     0,     0,     0,     0,     0,   198,
+     0,     0,     0,   199,     0,     0,     0,     0,     0,    80,
+     0,     0,    81,    20,     0,     0,   200,   201,     0,     0,
+   202,   490,     0,   194,   195,     0,     0,     0,    78,   204,
+   205,   206,   207,     0,     0,   208,   209,   196,     0,     0,
+     0,     0,     0,   197,     0,     0,   192,   193,     0,     0,
+   198,     0,     0,     0,   199,     0,     0,     0,     0,     0,
+    80,     0,     0,    81,    20,     0,     0,   200,   201,     0,
+     0,   202,   632,     0,     0,     0,     0,     0,     0,     0,
+   204,   205,   206,   207,     0,     0,   208,   209,   194,   195,
+     0,     0,     0,    78,     0,     0,     0,   192,   193,     0,
+     0,     0,   196,     0,     0,     0,     0,     0,   197,     0,
+     0,     0,     0,     0,     0,   198,     0,     0,     0,   199,
+     0,     0,     0,     0,     0,    80,     0,     0,    81,    20,
+     0,     0,   200,   201,     0,     0,   202,   678,     0,   194,
+   195,     0,     0,     0,    78,   204,   205,   206,   207,     0,
+     0,   208,   209,   196,     0,     0,     0,     0,     0,   197,
+     0,     0,   192,   193,     0,     0,   198,     0,     0,     0,
+   199,     0,     0,     0,     0,     0,    80,     0,     0,    81,
+    20,     0,     0,   200,   201,     0,     0,   202,   693,     0,
+     0,     0,     0,     0,     0,     0,   204,   205,   206,   207,
+     0,     0,   208,   209,   194,   195,     0,     0,     0,    78,
+     0,     0,     0,     0,     0,     0,     0,     0,   196,     0,
+     0,     0,     0,     0,   197,     0,     0,     0,     0,     0,
+     0,   198,     0,     0,     0,   199,     0,     0,     0,     0,
+     0,    80,     0,     0,    81,    20,     0,     0,   200,   201,
+     0,     0,   202,     0,     2,   194,   195,     0,     0,     0,
+    78,   204,   205,   206,   207,     0,     0,   208,   209,   196,
+     0,     0,     0,     0,     0,   197,     0,     0,     0,     0,
+     0,     0,   198,     0,     0,     0,   199,     0,     0,     0,
+     0,     0,    80,     0,     0,    81,    20,     0,     0,     0,
+     0,     0,     0,   276,     0,     0,     0,     0,     0,     0,
+     0,     0,   204,   205,   206,   207,     0,     0,   208,   209
 };
 
 static const short yycheck[] = {     3,
-   264,   132,     6,   123,   355,   201,   428,   129,   399,   134,
-   117,   375,    62,    62,   190,   191,   192,   193,     1,   282,
-   624,     1,   198,   199,     1,    15,   289,   290,    42,     1,
-     1,    53,    46,     9,     5,     1,    62,    95,    42,    89,
-   162,    62,    46,   150,    94,    94,   153,   169,    83,     1,
-    64,     1,     1,    94,    65,    69,   129,    33,    62,   100,
-    64,    72,   129,    86,   171,    69,     1,    62,    94,     1,
-     1,   196,    97,    94,     1,    97,   101,     1,     1,   129,
-   129,   685,     1,   133,    72,    89,     1,   122,   123,   162,
-    94,     1,   362,   160,    89,   162,   107,    87,    86,    94,
-   370,    67,   372,   129,    95,     1,    97,   133,   129,   662,
-   160,     1,   162,   162,   128,    86,    99,   100,     4,     5,
-   134,   101,    99,   100,   128,   129,     1,    99,   178,   133,
-   134,   307,   308,   309,   129,   257,   162,    86,   133,     1,
-   265,   162,     1,     1,     1,     1,   253,    99,    98,   101,
-    36,    37,   415,   575,    40,   418,   160,   710,   162,   662,
-   713,   552,     1,    98,    50,   160,    98,   162,    99,    93,
-   101,    98,    95,   662,   178,    94,    99,   101,     1,    94,
-     1,   100,   196,   178,    94,   100,   190,   191,   192,   193,
-   100,   421,   196,    79,   198,   199,   200,    83,    94,     1,
-     1,   196,   252,   554,   100,   200,     1,   710,   761,    99,
-   713,   100,     1,   766,   264,   768,    52,   770,   448,   341,
-    95,   710,     1,   140,   713,   251,   252,   347,    86,    86,
-   251,     1,   623,    95,   662,   431,   122,   123,   264,     1,
-    99,    99,    99,    99,     1,     1,   422,   251,   252,     1,
-     1,   265,     1,   139,   101,     1,   251,   252,   761,    98,
-   264,   265,    97,   766,   628,   768,   630,   770,    63,   264,
-     1,    97,   761,     1,     1,     1,    99,   766,    99,   768,
-     1,   770,   710,   200,   201,   713,   637,     1,    67,     1,
-     1,   177,    94,    63,     1,     1,   526,    98,   100,    88,
-    95,   351,     1,   307,   308,   309,   310,   311,   312,   313,
-   314,   315,   316,   317,   318,   319,   320,   321,   322,   323,
-   324,   325,   326,   100,   319,    95,    52,     1,   558,   355,
-   216,   695,    95,   761,   355,   686,    99,    99,   766,     1,
-   768,    98,   770,    99,   251,     1,    98,   351,    99,   375,
-    99,   355,    98,    52,   584,     1,   351,     1,   362,    94,
-   355,    88,    97,    94,    63,   251,   370,    95,   372,    95,
-     1,   375,    64,   399,    95,     1,   262,    69,   399,    93,
-   375,   298,    94,    94,    93,   302,     1,    94,    94,     1,
-   754,   251,   662,   279,    94,   399,    95,    97,   574,   763,
-    94,   101,     1,   667,   399,   525,   100,     1,   638,   129,
-   327,    94,     1,   299,    97,   301,    94,   334,   422,    93,
-   337,    52,   415,   101,   428,   418,     0,     1,   345,     1,
-     1,    93,    63,     1,    95,     1,   128,    93,   569,     1,
-   710,    98,   162,   713,   674,     1,    92,    93,   355,    93,
-   336,    97,    98,    99,   100,   362,   587,   343,   728,     1,
-    86,   347,     1,   370,    95,   372,    94,   737,   375,   355,
-    44,    86,   100,    96,    86,     1,   362,   100,   748,     0,
-     1,    55,   604,     1,   370,   607,   372,    61,     1,   539,
-     1,   761,   399,    67,    93,   355,   766,   414,   768,    93,
-   770,    75,   362,   733,    93,    97,    45,    46,   425,   101,
-   370,     1,   372,   399,   431,   375,     1,   648,    86,   251,
-    86,    93,    93,    44,    86,    99,   552,   658,   554,    45,
-    46,   552,    50,   554,    55,   539,     1,    93,    60,   399,
-    61,     1,    64,   417,   539,   419,    67,    86,   552,    88,
-   554,    93,    91,    92,    93,    99,   100,   552,    97,   554,
-    86,     1,   101,   695,    82,    95,   251,    85,    86,     1,
-   574,   575,    96,    86,    94,   697,    99,   100,    99,    93,
-   100,    97,   499,    44,     1,   101,   590,    95,    47,    53,
-     0,     1,   509,     1,   511,     1,    86,   623,     1,     1,
-    61,     1,   623,    62,   521,   100,    67,    92,     1,    94,
-     1,   637,    97,    98,    99,   100,   637,   667,   177,   623,
-   101,    86,   754,   355,    91,    92,    86,   544,   623,   546,
-   362,   763,    10,   637,    44,   101,   522,    96,   370,   525,
-   372,   667,   637,   375,    50,   552,    86,   554,    65,   101,
-    67,    61,    30,    97,    86,    72,    34,    67,   662,    76,
-   686,     0,     1,   667,   581,   686,   552,   399,   554,    86,
-   355,    11,   667,    51,     0,     1,    82,   362,    86,    85,
-    86,    12,   686,    86,    86,   370,    86,   372,   251,    99,
-   375,   686,   552,    86,   554,    86,    47,     1,     0,     1,
-    45,    46,   619,   262,    13,    44,   710,    94,     9,   713,
-    11,    62,    47,   100,   399,    14,   623,    99,    44,    95,
-    92,   628,    61,   630,   728,    97,    98,    62,    67,    55,
-   637,    97,    33,   737,    96,    61,    93,   623,    91,    92,
-    44,    67,    44,    93,   748,    96,    50,     0,     1,   635,
-    93,   637,    97,    55,    97,   662,   101,   761,   101,    61,
-    99,    96,   766,   623,   768,    67,   770,    99,   628,    47,
-   630,    99,   689,    99,    94,    99,   662,   637,    82,   686,
-   100,    85,    86,    95,    62,     5,     6,     7,   695,     1,
-    94,    44,   355,    18,    19,    20,    21,    99,    93,   362,
-   686,    99,   662,   710,    45,    46,   713,   370,    61,   372,
-   251,    99,   375,    93,    67,     8,     9,    10,    96,   736,
-   552,   728,   554,   740,   710,     1,   686,   713,     0,     1,
-   737,    88,    57,    95,    96,   695,   399,    99,   251,     3,
-     4,   748,   728,    97,    98,    99,    99,   754,    16,    17,
-   710,   737,   100,   713,   761,    67,   763,    91,    92,   766,
-    72,   768,   748,   770,    76,    66,     1,   552,   728,   554,
-    97,    98,    44,    99,    86,   761,    93,   737,    45,    46,
-   766,    97,   768,    94,   770,   312,   313,   314,   748,    61,
-     1,   623,    45,    46,   754,    67,   628,     1,   630,   310,
-   311,   761,    93,   763,    99,   637,   766,    94,   768,    44,
-   770,   320,   321,    94,   355,    50,    94,     1,     1,     1,
-   100,   362,    56,    56,    59,    99,    61,    99,    94,   370,
-   662,   372,    67,    44,   375,    94,     1,    94,   623,    50,
-   251,     1,   355,   628,    94,   630,    94,    82,    99,   362,
-    85,    86,   637,    99,   686,    56,    94,   370,   399,   372,
-     0,    44,   375,   695,     0,   319,    11,    50,    54,    75,
-    44,    82,   162,   252,    85,    86,    50,   662,   710,   139,
-   394,   713,    52,    65,   399,    67,   399,   160,   621,   552,
-    72,   554,    94,   282,    76,   375,   728,   710,   375,    82,
-   713,   686,    85,    86,    86,   737,   322,   621,    82,   605,
-   695,    85,    86,    91,    92,    93,   748,   605,   323,    97,
-    94,   324,   754,   101,   330,   710,   326,    -1,   713,   761,
-   590,   763,   325,    -1,   766,    86,   768,    -1,   770,    -1,
-    91,    92,    93,   728,   355,    -1,    97,    -1,   761,    -1,
-   101,   362,   737,   766,    -1,   768,    44,   770,    -1,   370,
-   623,   372,    50,   748,   375,   628,    -1,   630,    -1,   754,
-    -1,    59,    -1,    61,   637,    -1,   761,    -1,   763,    67,
-    -1,   766,    -1,   768,    -1,   770,    44,    -1,   399,    -1,
-    -1,    -1,    50,    -1,    82,    -1,    -1,    85,    86,   662,
-    -1,    59,    -1,    61,    91,    92,    93,    95,    96,    67,
-    97,   552,    -1,   554,   101,    86,    -1,    -1,    -1,    44,
-    91,    92,    93,   686,    82,    50,    97,    85,    86,    -1,
-   101,    -1,   695,    -1,    59,    -1,    61,    95,    96,   552,
-    -1,   554,    67,    -1,    -1,    -1,    -1,   710,    86,    -1,
-   713,    -1,    44,    91,    92,    93,    -1,    82,    50,    97,
-    85,    86,    -1,   101,    -1,   728,    -1,    59,    -1,    61,
-    -1,    96,    -1,    -1,   737,    67,     1,    -1,    44,    -1,
-    -1,    -1,   623,    -1,    50,   748,    -1,   628,    -1,   630,
-    82,   754,    -1,    85,    86,    -1,   637,    -1,   761,    -1,
-   763,    67,    -1,   766,    96,   768,    -1,   770,    -1,    -1,
-   623,    -1,    91,    92,    93,   628,    82,   630,    97,    85,
-    86,   662,   101,    -1,   637,    50,    -1,    -1,    -1,    44,
-   315,   316,   317,   318,    59,    50,    -1,    -1,    -1,    -1,
-    65,   552,    -1,   554,    -1,   686,    -1,    72,    -1,   662,
-    -1,    76,    -1,    -1,   695,    -1,    -1,    82,    -1,    -1,
-    85,    86,    -1,    -1,    89,    90,    -1,    82,    93,   710,
-    85,    86,   713,   686,    -1,    -1,    -1,   102,   103,   104,
-   105,    -1,   695,   108,   109,    -1,    -1,   728,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,   737,   710,    -1,    -1,
-   713,    -1,    -1,    -1,    -1,    -1,    -1,   748,    -1,    -1,
-    -1,    -1,   623,   754,    -1,   728,    -1,   628,    -1,   630,
-   761,    -1,   763,    -1,   737,   766,   637,   768,    -1,   770,
-    -1,    -1,    -1,    -1,    -1,   748,    -1,    -1,    -1,    -1,
-    -1,   754,    -1,    -1,    -1,    -1,    -1,    -1,   761,    -1,
-   763,   662,    -1,   766,    -1,   768,    -1,   770,   190,   191,
-   192,   193,    -1,    -1,    -1,    -1,   198,   199,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,   686,    -1,    -1,   190,   191,
-   192,   193,    -1,    -1,   695,    -1,   198,   199,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   710,
-    -1,    -1,   713,    -1,    44,    45,    46,    -1,    -1,    -1,
-    50,    -1,    -1,    -1,    -1,    -1,    -1,   728,    -1,    59,
-    -1,    -1,    -1,    -1,    -1,    65,   737,    -1,    -1,    -1,
-    -1,    -1,    72,    -1,    -1,    -1,    76,   748,    -1,    -1,
-    -1,    -1,    82,   754,    -1,    85,    86,    -1,    -1,    -1,
-   761,    -1,   763,    93,    -1,   766,    -1,   768,    -1,   770,
+   327,    62,     6,    62,   484,   179,   132,   123,    62,    62,
+   286,   203,     1,     1,   134,   403,     1,   129,   117,   403,
+     0,     1,     1,   306,    15,   591,    94,     1,     1,   129,
+    86,     1,   100,    94,     1,    94,    89,     1,    42,    62,
+    94,    94,    46,    83,   192,   193,   194,   195,    95,     1,
+   162,   150,   200,   201,   153,   642,     1,   169,    62,     1,
+    64,    53,   162,    72,    44,    69,    89,     1,   129,   100,
+   129,    94,     1,   172,    52,   129,   129,    86,   198,   133,
+   133,    61,   122,   123,   345,    89,     1,    67,     1,   101,
+    94,   352,   353,    67,   435,     1,    87,    67,     1,   665,
+    97,   162,     1,   162,    93,    97,   129,   160,   162,   162,
+   133,    99,   101,   101,   175,    94,   101,     1,    52,    99,
+   707,   175,   175,   710,   128,   129,    99,   180,   101,   133,
+   134,    98,     4,     5,    98,     1,   477,   160,     1,   162,
+   620,     1,     0,     1,    97,   198,   258,    99,   100,   202,
+    42,   325,    94,    98,    46,   254,   160,   180,   162,   175,
+   272,    95,   278,   504,    36,    37,   554,     1,    40,    98,
+   554,   175,    64,   557,     1,   762,   180,    69,    50,    94,
+   767,    94,   769,   140,   771,   100,    44,   100,   192,   193,
+   194,   195,    95,    99,   198,    94,   200,   201,   202,   253,
+   253,   100,   590,    61,     1,     1,   100,    79,   328,    67,
+   471,    83,     1,   474,    94,    99,   100,     1,   642,     1,
+    95,   101,   370,   371,   372,   286,    86,     1,    94,   282,
+   253,    94,   286,   286,   100,     1,   128,   100,     1,    99,
+     1,    99,   134,   129,     1,   202,   203,     1,    93,   253,
+   122,   123,   306,   306,   638,     1,     1,     1,    92,   282,
+    94,     1,   603,    97,    98,    99,   100,   139,    95,    94,
+   286,     1,    99,   327,   327,   100,   162,   293,   282,    98,
+    97,   557,   286,   707,   101,   301,   710,   303,   629,   293,
+   306,   642,    88,     1,     1,   487,     1,   301,   639,   303,
+     1,    98,   306,   175,   327,     1,   198,   179,   265,     1,
+    99,   268,   595,   654,   597,    99,     1,    99,   434,   276,
+   647,   642,     1,   327,   328,    99,    92,    93,     1,   382,
+   478,    97,    98,    99,   100,     1,    99,    98,   762,   675,
+    86,    98,   403,   767,    98,   769,   218,   771,     1,   403,
+   403,    95,     1,    99,    99,   293,   707,     1,    98,   710,
+     1,     1,   638,   301,    94,   303,   370,   371,   372,   373,
+   374,   375,   376,   377,   378,   379,   380,   381,   382,   383,
+   384,   385,   386,   387,   388,   389,   707,   403,    95,   710,
+   666,    99,   675,   734,    99,   267,   449,    93,    99,   403,
+     1,    94,   274,    95,   361,    95,   278,   100,   365,    94,
+    63,   762,    52,     1,   286,    94,   767,   175,   769,   755,
+   771,   293,    63,    63,     0,     1,   449,    93,   764,   301,
+     1,   303,     1,   390,     1,    95,   328,    96,    64,    99,
+   175,   762,    95,    69,    93,   449,   767,     1,   769,    93,
+   771,   408,     1,   325,    95,    95,    95,     1,    97,   571,
+     1,   418,   574,   420,    52,     0,     1,    95,    44,     1,
+   342,   619,   755,   430,   478,    63,    93,    44,     1,    55,
+   484,   764,     5,    50,     1,    61,     1,    88,   614,    53,
+   362,    67,   364,   554,   100,     1,   557,   454,     1,   456,
+   554,   554,   128,   557,   557,     1,   632,    95,    93,    44,
+     1,     1,    97,   470,     1,    82,   101,    86,    85,    86,
+    55,     1,    93,    99,   481,     1,    61,    94,   286,   590,
+   487,   403,    67,    99,   100,   293,   590,   590,   554,    93,
+    75,   557,     1,   301,    93,   303,    99,   100,   306,    93,
+   554,   286,    93,   557,     1,    45,    46,    97,   293,   431,
+   686,    93,   434,    86,    99,   677,   301,    94,   303,    86,
+   696,   306,     1,   100,   590,     0,     1,   638,    93,   595,
+     1,   597,     1,    86,   638,   638,   590,    93,     1,   101,
+    86,     0,     1,   647,   647,    86,    86,   175,    88,    86,
+   101,    91,    92,    93,     1,   666,    86,    97,    94,   101,
+    86,   101,   666,   666,   100,   619,   620,     0,     1,    44,
+     1,    50,   638,    11,   647,     1,   642,    86,     1,   586,
+    55,   635,     0,     1,   638,    44,    61,    44,   642,    86,
+    12,     1,    67,   647,     1,   403,    55,     1,    47,    13,
+   666,    47,    61,    82,    61,     1,    85,    86,    67,   675,
+    67,    44,   666,    62,   175,    86,    62,    86,   403,   626,
+    67,     9,    14,    86,    99,    72,    44,    94,    61,    76,
+    95,    47,   554,   100,    67,   557,     1,   175,    99,    86,
+    99,   707,     1,    61,   710,    33,    62,    96,    96,    67,
+    96,    93,   100,   707,   642,    86,   710,    65,   286,   725,
+    86,   129,   669,    86,    72,   293,    99,    94,   590,    93,
+    97,   725,   738,   301,   101,   303,    86,    97,   306,    86,
+    96,    99,    86,   749,   738,    44,     1,    45,    46,   755,
+    86,    50,   160,   175,   162,   749,   762,    99,   764,   107,
+    65,   767,    67,   769,     9,   771,    11,    72,   762,    47,
+     1,    76,    99,   767,   636,   769,   638,   771,    95,   707,
+   642,    86,   710,    82,    62,   286,    85,    86,    33,    44,
+   737,   100,   293,    94,   741,    50,    97,   725,    66,    97,
+   301,     1,   303,   101,   666,   306,   554,    97,   286,   557,
+   738,   101,    99,   707,    94,   293,   710,    97,    96,    50,
+    60,   749,    96,   301,    64,   303,    99,    82,   306,   554,
+    85,    86,   557,    10,   762,   403,   473,     1,   475,   767,
+    93,   769,   590,   771,    44,   707,    93,   595,   710,   597,
+    50,    82,   175,    30,    85,    86,     1,    34,    88,    59,
+    93,    61,    94,   725,   286,   590,   471,    67,   762,   474,
+   595,   293,   597,   767,    51,   769,   738,   771,     1,   301,
+    93,   303,    82,    99,   306,    85,    86,   749,    45,    46,
+   638,    92,    44,    97,   642,    94,    97,    98,    50,    94,
+   762,    65,   403,    67,     1,   767,    94,   769,    72,   771,
+    91,    92,    76,   638,    44,    95,    96,   642,   666,    99,
+    50,   100,    86,    91,    92,   403,    44,   675,    56,    59,
+    82,    61,    50,    85,    86,    45,    46,    67,     3,     4,
+    97,   666,    94,    56,   101,    18,    19,    20,    21,    67,
+   675,    99,    82,    94,    44,    85,    86,    16,    17,   707,
+    50,    94,   710,   286,    82,    95,    96,    85,    86,     1,
+   293,     1,   378,   379,   380,   381,    56,   725,   301,    94,
+   303,   403,   707,   306,    57,   710,   554,    91,    92,   557,
+   738,    94,    82,    45,    46,    85,    86,    86,    45,    46,
+   725,   749,    91,    92,    93,    97,    98,   755,    97,     5,
+     6,     7,   101,   738,   762,    99,   764,    99,    94,   767,
+    94,   769,   590,   771,   749,   382,     0,   595,     0,   597,
+   755,    11,    50,     8,     9,    10,    75,   762,   162,   764,
+    54,    59,   767,   139,   769,   253,   771,    65,   160,    91,
+    92,    93,   403,   554,    72,    97,   557,    52,    76,   101,
+    97,    98,    99,    94,    82,   373,   374,    85,    86,   260,
+   638,    89,    90,   588,   642,    93,   554,   383,   384,   557,
+   403,   306,    44,   306,   102,   103,   104,   105,    50,   590,
+   108,   109,   385,   588,   595,    86,   597,    59,   666,    61,
+    91,    92,    93,   572,   572,    67,    97,   675,   345,   386,
+   101,   387,   590,   375,   376,   377,   388,   595,   389,   597,
+    82,   635,    -1,    85,    86,    -1,   393,    -1,    -1,    -1,
+    -1,    -1,   554,    95,    96,   557,    -1,   638,    86,   707,
+    -1,   642,   710,    91,    92,    93,    91,    92,    93,    97,
+    -1,    -1,    97,   101,    -1,    -1,   101,   725,    -1,    -1,
+   638,    91,    92,    93,   642,   666,    -1,    97,   590,    -1,
+   738,   101,    -1,   595,   675,   597,   192,   193,   194,   195,
+    -1,   749,    -1,    -1,   200,   201,    -1,   755,   666,    -1,
+    -1,    -1,    -1,    -1,   762,    -1,   764,   675,    44,   767,
+    -1,   769,    -1,   771,    50,    -1,   707,    -1,    -1,   710,
+    -1,    -1,    -1,    59,    -1,    61,   638,    -1,    -1,    -1,
+   642,    67,    -1,    -1,   725,    -1,    -1,    -1,    -1,   707,
+    -1,   554,   710,    -1,   557,    -1,    82,   738,    -1,    85,
+    86,    -1,    -1,    -1,   666,    -1,    -1,   725,   749,    -1,
+    96,    -1,    -1,   675,   755,    -1,    -1,    -1,    -1,    -1,
+   738,   762,    -1,   764,    -1,    -1,   767,   590,   769,    -1,
+   771,   749,   595,    -1,   597,    -1,    -1,   755,    -1,    -1,
+    -1,    -1,    -1,    -1,   762,   707,   764,    -1,   710,   767,
+    -1,   769,    -1,   771,    44,    -1,   192,   193,   194,   195,
+    50,    -1,    -1,   725,   200,   201,    -1,    -1,    -1,    59,
+    -1,    61,    -1,    -1,    -1,   638,   738,    67,    -1,   642,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,   749,    -1,    -1,
+    -1,    -1,    82,   755,    -1,    85,    86,    -1,    -1,    -1,
+   762,    -1,   764,   666,    -1,   767,    96,   769,    -1,   771,
+    -1,    -1,   675,    -1,   370,   371,   372,   373,   374,   375,
+   376,   377,   378,   379,   380,   381,    -1,   383,   384,   385,
+   386,   387,   388,   389,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,   707,    -1,    -1,   710,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,   725,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,   738,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,   749,    -1,    -1,    -1,
+    -1,    -1,   755,    -1,    -1,    -1,    -1,    -1,    -1,   762,
+    -1,   764,    -1,    -1,   767,    -1,   769,    -1,   771,    -1,
+    -1,     1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,   478,    -1,    -1,    -1,    -1,    -1,   484,    -1,
+    -1,    -1,    -1,    -1,   370,   371,   372,   373,   374,   375,
+   376,   377,   378,   379,   380,   381,    -1,   383,   384,   385,
+   386,   387,   388,   389,    44,    45,    46,    47,    48,    49,
+    50,    51,    -1,    -1,    54,    -1,    -1,    -1,    58,    59,
+    -1,    -1,    62,    -1,    -1,    65,    66,    67,    68,    -1,
+    70,    71,    72,    73,    -1,    -1,    76,    -1,    -1,    -1,
+    -1,    -1,    82,    -1,    -1,    85,    86,    -1,    -1,    -1,
+    -1,    -1,     1,    93,    -1,    95,    96,    -1,    -1,    99,
     -1,    -1,   102,   103,   104,   105,    -1,    -1,   108,   109,
-    -1,    -1,     1,    -1,    -1,   307,   308,   309,   310,   311,
-   312,   313,   314,   315,   316,   317,   318,    -1,   320,   321,
-   322,   323,   324,   325,   326,   307,   308,   309,   310,   311,
-   312,   313,   314,   315,   316,   317,   318,    -1,   320,   321,
-   322,   323,   324,   325,   326,    44,    45,    46,    47,    48,
-    49,    50,    51,    -1,    -1,    54,    -1,    -1,    -1,    58,
-    59,    -1,    -1,    62,    -1,    -1,    65,    66,    67,    68,
-    -1,    70,    71,    72,    73,    -1,    -1,    76,    -1,    -1,
-    -1,    -1,    -1,    82,     1,    -1,    85,    86,    -1,    -1,
-    -1,    -1,    -1,    -1,    93,    -1,    95,    96,    -1,    -1,
-    99,    -1,    -1,   102,   103,   104,   105,    -1,    -1,   108,
-   109,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-   422,    -1,    -1,    -1,    -1,    -1,   428,    44,    45,    46,
-    -1,    48,    49,    50,    51,    -1,    -1,    54,    -1,    -1,
-   422,    58,    59,    -1,    -1,    -1,   428,    -1,    65,    66,
-    67,    68,     1,    70,    71,    72,    73,    -1,    -1,    76,
-    -1,    -1,    -1,    -1,    -1,    82,    -1,    -1,    85,    86,
-    -1,    -1,    -1,    -1,    -1,    -1,    93,    -1,    95,    96,
-    -1,    -1,    99,    -1,    -1,   102,   103,   104,   105,    -1,
-    -1,   108,   109,    -1,    -1,    44,    45,    46,    -1,    48,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,   478,    -1,    -1,    44,    45,    46,   484,    48,
     49,    50,    51,    -1,    -1,    54,    -1,    -1,    -1,    58,
-    59,    -1,    -1,    -1,    -1,    -1,    65,    66,    67,    68,
-    -1,    70,    71,    72,    73,    -1,    -1,    76,    -1,    -1,
-    -1,    -1,     1,    82,    -1,    -1,    85,    86,    -1,    -1,
-    -1,    -1,    -1,    -1,    93,    -1,    95,    96,    -1,    -1,
-    99,    -1,    -1,   102,   103,   104,   105,    -1,    -1,   108,
-   109,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,   574,   575,    -1,    44,    45,    46,    -1,    48,
-    49,    50,    51,    -1,    -1,    54,    -1,    -1,   590,    58,
-    59,    -1,   574,   575,    -1,    -1,    65,    66,    67,    68,
-     1,    70,    71,    72,    73,    -1,    -1,    76,   590,    -1,
+    59,    -1,    -1,   619,   620,    -1,    65,    66,    67,    68,
+     1,    70,    71,    72,    73,    -1,    -1,    76,    -1,   635,
     -1,    -1,    -1,    82,    -1,    -1,    85,    86,    -1,    -1,
     -1,    -1,    -1,    -1,    93,    -1,    95,    96,    -1,    -1,
     99,    -1,    -1,   102,   103,   104,   105,    -1,    -1,   108,
    109,    -1,    -1,    44,    45,    46,    -1,    48,    49,    50,
     51,    -1,    -1,    54,    -1,    -1,    -1,    58,    59,    -1,
-    -1,    -1,    -1,    -1,    65,    66,    67,    68,     1,    70,
-    71,    72,    73,    -1,    -1,    76,    -1,    -1,    -1,    -1,
-    -1,    82,    -1,    -1,    85,    86,    -1,    -1,    -1,    -1,
-    -1,    -1,    93,    -1,    95,    96,    -1,    -1,    99,    -1,
-    -1,   102,   103,   104,   105,    -1,    -1,   108,   109,    -1,
-    -1,    44,    45,    46,    -1,    48,    49,    50,    51,    -1,
-    -1,    54,    -1,    -1,    -1,    58,    59,    -1,    -1,    -1,
-    -1,    -1,    65,    66,    67,    68,     1,    70,    71,    72,
-    73,    -1,    -1,    76,    -1,    -1,    -1,    -1,    -1,    82,
-    -1,    -1,    85,    86,    -1,    -1,    -1,    -1,    -1,    -1,
-    93,    -1,    95,    96,    -1,    -1,    99,    -1,    -1,   102,
-   103,   104,   105,    -1,    -1,   108,   109,    -1,    -1,    44,
-    45,    46,    -1,    48,    49,    50,    51,    -1,    -1,    54,
-    -1,    -1,    -1,    58,    59,    -1,    -1,    -1,    -1,    -1,
-    65,    66,    67,    68,     1,    70,    71,    72,    73,    -1,
-    -1,    76,    -1,    -1,    -1,    -1,    -1,    82,    -1,    -1,
-    85,    86,    -1,    -1,    -1,    -1,    -1,    -1,    93,    -1,
-    95,    -1,    -1,    -1,    99,    -1,    -1,   102,   103,   104,
-   105,    -1,    -1,   108,   109,    -1,    -1,    44,    45,    46,
-    -1,    48,    49,    50,    51,    -1,    -1,    54,    -1,    -1,
-    -1,    58,    59,    -1,    -1,    -1,    -1,    -1,    65,    66,
-     1,    68,    -1,    70,    71,    72,    73,    -1,    -1,    76,
-    -1,    -1,    -1,    -1,    -1,    82,    -1,    -1,    85,    86,
-    -1,    -1,    -1,    -1,    -1,    -1,    93,    -1,    95,    -1,
-    -1,    -1,    99,    -1,    -1,   102,   103,   104,   105,    -1,
-    -1,   108,   109,    44,    45,    46,    -1,    48,    49,    50,
-    51,    -1,    -1,    54,    -1,    -1,    -1,    58,    59,    -1,
-    -1,    -1,    -1,    -1,    65,    66,    -1,    68,    -1,    70,
-    71,    72,    73,    -1,     1,    76,     3,     4,    -1,    -1,
+    -1,    -1,    -1,    -1,    65,    66,    67,    68,    -1,    70,
+    71,    72,    73,     1,    -1,    76,    -1,    -1,    -1,    -1,
     -1,    82,    -1,    -1,    85,    86,    -1,    -1,    -1,    -1,
     -1,    -1,    93,    -1,    95,    -1,    -1,    -1,    99,    -1,
     -1,   102,   103,   104,   105,    -1,    -1,   108,   109,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    45,    46,
-    -1,    -1,    -1,    50,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    59,    -1,    -1,    -1,    -1,    -1,    65,     1,
-    -1,     3,     4,    -1,    -1,    72,    -1,    -1,    -1,    76,
-    -1,    -1,    -1,    -1,    -1,    82,    -1,    -1,    85,    86,
-    -1,    -1,    89,    90,    -1,    -1,    93,    -1,    95,    96,
-    -1,    -1,    -1,    -1,    -1,   102,   103,   104,   105,    -1,
-    -1,   108,   109,    45,    46,    -1,    -1,    -1,    50,    -1,
-     1,    -1,     3,     4,    -1,    -1,    -1,    59,    -1,    -1,
-    -1,    -1,    -1,    65,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,   619,   620,    -1,    44,    45,    46,    -1,
+    48,    49,    50,    51,    -1,    -1,    54,    -1,    -1,   635,
+    58,    59,    -1,    -1,    -1,    -1,    -1,    65,    66,     1,
+    68,    -1,    70,    71,    72,    73,    -1,    -1,    76,    -1,
+    -1,    -1,    -1,    -1,    82,    -1,    -1,    85,    86,    -1,
+    -1,    -1,    -1,    -1,    -1,    93,    -1,    95,    -1,    -1,
+    -1,    99,    -1,    -1,   102,   103,   104,   105,    -1,    -1,
+   108,   109,    44,    45,    46,    -1,    48,    49,    50,    51,
+    -1,    -1,    54,    -1,    -1,    -1,    58,    59,    -1,    -1,
+    -1,    -1,    -1,    65,    66,    -1,    68,    -1,    70,    71,
+    72,    73,    -1,     1,    76,     3,     4,    -1,    -1,    -1,
+    82,    -1,    -1,    85,    86,    -1,    -1,    -1,    -1,    -1,
+    -1,    93,    -1,    95,    -1,    -1,    -1,    99,    -1,    -1,
+   102,   103,   104,   105,    -1,    -1,   108,   109,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    45,    46,    -1,
+    -1,    -1,    50,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    59,    -1,    -1,    -1,    -1,    -1,    65,     1,    -1,
+     3,     4,    -1,    -1,    72,    -1,    -1,    -1,    76,    -1,
+    -1,    -1,    -1,    -1,    82,    -1,    -1,    85,    86,    -1,
+    -1,    89,    90,    -1,    -1,    93,    -1,    95,    96,    -1,
+    -1,    -1,    -1,    -1,   102,   103,   104,   105,    -1,    -1,
+   108,   109,    45,    46,    -1,    -1,    -1,    50,    -1,     1,
+    -1,     3,     4,    -1,    -1,    -1,    59,    -1,    -1,    -1,
+    -1,    -1,    65,    -1,    -1,    -1,    -1,    -1,    -1,    72,
+    -1,    -1,    -1,    76,    -1,    -1,    -1,    -1,    -1,    82,
+    -1,    -1,    85,    86,    -1,    -1,    89,    90,    -1,    -1,
+    93,    -1,    95,    45,    46,    -1,    -1,    -1,    50,   102,
+   103,   104,   105,    -1,    -1,   108,   109,    59,    -1,    -1,
+    -1,    -1,    -1,    65,     1,    -1,     3,     4,    -1,    -1,
     72,    -1,    -1,    -1,    76,    -1,    -1,    -1,    -1,    -1,
     82,    -1,    -1,    85,    86,    -1,    -1,    89,    90,    -1,
-    -1,    93,    -1,    95,    45,    46,    -1,    -1,    -1,    50,
-   102,   103,   104,   105,    -1,    -1,   108,   109,    59,    -1,
-    -1,    -1,    -1,    -1,    65,     1,    -1,     3,     4,    -1,
-    -1,    72,    -1,    -1,    -1,    76,    -1,    -1,    -1,    -1,
-    -1,    82,    -1,    -1,    85,    86,    -1,    88,    89,    90,
-    -1,    -1,    93,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,   102,   103,   104,   105,    -1,    -1,   108,   109,    45,
-    46,    -1,    -1,    -1,    50,    -1,     1,    -1,     3,     4,
-    -1,    -1,    -1,    59,    -1,    -1,    -1,    -1,    -1,    65,
-    -1,    -1,    -1,    -1,    -1,    -1,    72,    -1,    -1,    -1,
+    -1,    93,    -1,    -1,    -1,    -1,    -1,    99,    -1,    -1,
+   102,   103,   104,   105,    -1,    -1,   108,   109,    45,    46,
+    -1,    -1,    -1,    50,    -1,     1,    -1,     3,     4,    -1,
+    -1,    -1,    59,    -1,    -1,    -1,    -1,    -1,    65,    -1,
+    -1,    -1,    -1,    -1,    -1,    72,    -1,    -1,    -1,    76,
+    -1,    -1,    -1,    -1,    -1,    82,    -1,    -1,    85,    86,
+    -1,    88,    89,    90,    -1,    -1,    93,    -1,    -1,    45,
+    46,    -1,    -1,    -1,    50,   102,   103,   104,   105,    -1,
+    -1,   108,   109,    59,    -1,    -1,    -1,    -1,    -1,    65,
+     1,    -1,     3,     4,    -1,    -1,    72,    -1,    -1,    -1,
     76,    -1,    -1,    -1,    -1,    -1,    82,    -1,    -1,    85,
     86,    -1,    -1,    89,    90,    -1,    -1,    93,    -1,    -1,
-    45,    46,    -1,    99,    -1,    50,   102,   103,   104,   105,
-    -1,    -1,   108,   109,    59,    -1,    -1,    -1,    -1,    -1,
-    65,     1,    -1,     3,     4,    -1,    -1,    72,    -1,    -1,
-    -1,    76,    -1,    -1,    -1,    -1,    -1,    82,    -1,    -1,
-    85,    86,    -1,    -1,    89,    90,    -1,    -1,    93,    -1,
-    -1,    -1,    -1,    98,    -1,    -1,    -1,   102,   103,   104,
-   105,    -1,    -1,   108,   109,    45,    46,    -1,    -1,    -1,
-    50,    -1,     1,    -1,     3,     4,    -1,    -1,    -1,    59,
-    -1,    -1,    -1,    -1,    -1,    65,    -1,    -1,    -1,    -1,
+    -1,    -1,    98,    -1,    -1,    -1,   102,   103,   104,   105,
+    -1,    -1,   108,   109,    45,    46,    -1,    -1,    -1,    50,
+    -1,     1,    -1,     3,     4,    -1,    -1,    -1,    59,    -1,
+    -1,    -1,    -1,    -1,    65,    -1,    -1,    -1,    -1,    -1,
+    -1,    72,    -1,    -1,    -1,    76,    -1,    -1,    -1,    -1,
+    -1,    82,    -1,    -1,    85,    86,    -1,    -1,    89,    90,
+    -1,    -1,    93,    94,    -1,    45,    46,    -1,    -1,    -1,
+    50,   102,   103,   104,   105,    -1,    -1,   108,   109,    59,
+    -1,    -1,    -1,    -1,    -1,    65,     1,    -1,     3,     4,
     -1,    -1,    72,    -1,    -1,    -1,    76,    -1,    -1,    -1,
     -1,    -1,    82,    -1,    -1,    85,    86,    -1,    -1,    89,
-    90,    -1,    -1,    93,    94,    -1,    45,    46,    -1,    -1,
-    -1,    50,   102,   103,   104,   105,    -1,    -1,   108,   109,
-    59,    -1,    -1,    -1,    -1,    -1,    65,     1,    -1,     3,
-     4,    -1,    -1,    72,    -1,    -1,    -1,    76,    -1,    -1,
-    -1,    -1,    -1,    82,    -1,    -1,    85,    86,    -1,    -1,
-    89,    90,    -1,    -1,    93,    -1,    -1,    -1,    -1,    98,
-    -1,    -1,    -1,   102,   103,   104,   105,    -1,    -1,   108,
-   109,    45,    46,    -1,    -1,    -1,    50,    -1,     1,    -1,
-     3,     4,    -1,    -1,    -1,    59,    -1,    -1,    -1,    -1,
-    -1,    65,    -1,    -1,    -1,    -1,    -1,    -1,    72,    -1,
+    90,    -1,    -1,    93,    -1,    -1,    -1,    -1,    -1,    99,
+    -1,    -1,   102,   103,   104,   105,    -1,    -1,   108,   109,
+    45,    46,    -1,    -1,    -1,    50,    -1,     1,    -1,     3,
+     4,    -1,    -1,    -1,    59,    -1,    -1,    -1,    -1,    -1,
+    65,    -1,    -1,    -1,    -1,    -1,    -1,    72,    -1,    -1,
+    -1,    76,    -1,    -1,    -1,    -1,    -1,    82,    -1,    -1,
+    85,    86,    -1,    -1,    89,    90,    -1,    -1,    93,    -1,
+    -1,    45,    46,    98,    -1,    -1,    50,   102,   103,   104,
+   105,    -1,    -1,   108,   109,    59,    -1,    -1,    -1,    -1,
+    -1,    65,     1,    -1,     3,     4,    -1,    -1,    72,    -1,
     -1,    -1,    76,    -1,    -1,    -1,    -1,    -1,    82,    -1,
     -1,    85,    86,    -1,    -1,    89,    90,    -1,    -1,    93,
-    -1,    -1,    45,    46,    98,    -1,    -1,    50,   102,   103,
-   104,   105,    -1,    -1,   108,   109,    59,    -1,    -1,    -1,
-    -1,    -1,    65,     1,    -1,     3,     4,    -1,    -1,    72,
+    94,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   102,   103,
+   104,   105,    -1,    -1,   108,   109,    45,    46,    -1,    -1,
+    -1,    50,    -1,     1,    -1,     3,     4,    -1,    -1,    -1,
+    59,    -1,    -1,    -1,    -1,    -1,    65,    -1,    -1,    -1,
+    -1,    -1,    -1,    72,    -1,    -1,    -1,    76,    -1,    -1,
+    -1,    -1,    -1,    82,    -1,    -1,    85,    86,    -1,    -1,
+    89,    90,    -1,    -1,    93,    -1,    -1,    45,    46,    98,
+    -1,    -1,    50,   102,   103,   104,   105,    -1,    -1,   108,
+   109,    59,    -1,    -1,    -1,    -1,    -1,    65,     1,    -1,
+     3,     4,    -1,    -1,    72,    -1,    -1,    -1,    76,    -1,
+    -1,    -1,    -1,    -1,    82,    -1,    -1,    85,    86,    -1,
+    -1,    89,    90,    -1,    -1,    93,    94,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,   102,   103,   104,   105,    -1,    -1,
+   108,   109,    45,    46,    -1,    -1,    -1,    50,    -1,     1,
+    -1,     3,     4,    -1,    -1,    -1,    59,    -1,    -1,    -1,
+    -1,    -1,    65,    -1,    -1,    -1,    -1,    -1,    -1,    72,
     -1,    -1,    -1,    76,    -1,    -1,    -1,    -1,    -1,    82,
     -1,    -1,    85,    86,    -1,    -1,    89,    90,    -1,    -1,
-    93,    94,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   102,
-   103,   104,   105,    -1,    -1,   108,   109,    45,    46,    -1,
-    -1,    -1,    50,    -1,     1,    -1,     3,     4,    -1,    -1,
-    -1,    59,    -1,    -1,    -1,    -1,    -1,    65,    -1,    -1,
-    -1,    -1,    -1,    -1,    72,    -1,    -1,    -1,    76,    -1,
-    -1,    -1,    -1,    -1,    82,    -1,    -1,    85,    86,    -1,
-    -1,    89,    90,    -1,    -1,    93,    -1,    -1,    45,    46,
-    -1,    99,    -1,    50,   102,   103,   104,   105,    -1,    -1,
-   108,   109,    59,    -1,    -1,    -1,    -1,    -1,    65,     1,
-    -1,     3,     4,    -1,    -1,    72,    -1,    -1,    -1,    76,
-    -1,    -1,    -1,    -1,    -1,    82,    -1,    -1,    85,    86,
-    -1,    -1,    89,    90,    -1,    -1,    93,    94,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,   102,   103,   104,   105,    -1,
-    -1,   108,   109,    45,    46,    -1,    -1,    -1,    50,    -1,
-     1,    -1,     3,     4,    -1,    -1,    -1,    59,    -1,    -1,
-    -1,    -1,    -1,    65,    -1,    -1,    -1,    -1,    -1,    -1,
+    93,    94,    -1,    45,    46,    -1,    -1,    -1,    50,   102,
+   103,   104,   105,    -1,    -1,   108,   109,    59,    -1,    -1,
+    -1,    -1,    -1,    65,     1,    -1,     3,     4,    -1,    -1,
     72,    -1,    -1,    -1,    76,    -1,    -1,    -1,    -1,    -1,
     82,    -1,    -1,    85,    86,    -1,    -1,    89,    90,    -1,
-    -1,    93,    94,    -1,    45,    46,    -1,    -1,    -1,    50,
-   102,   103,   104,   105,    -1,    -1,   108,   109,    59,    -1,
-    -1,    -1,    -1,    -1,    65,     1,    -1,     3,     4,    -1,
-    -1,    72,    -1,    -1,    -1,    76,    -1,    -1,    -1,    -1,
-    -1,    82,    -1,    -1,    85,    86,    -1,    -1,    89,    90,
-    -1,    -1,    93,    94,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,   102,   103,   104,   105,    -1,    -1,   108,   109,    45,
-    46,    -1,    -1,    -1,    50,    -1,     1,    -1,     3,     4,
-    -1,    -1,    -1,    59,    -1,    -1,    -1,    -1,    -1,    65,
-    -1,    -1,    -1,    -1,    -1,    -1,    72,    -1,    -1,    -1,
+    -1,    93,    94,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+   102,   103,   104,   105,    -1,    -1,   108,   109,    45,    46,
+    -1,    -1,    -1,    50,    -1,     1,    -1,     3,     4,    -1,
+    -1,    -1,    59,    -1,    -1,    -1,    -1,    -1,    65,    -1,
+    -1,    -1,    -1,    -1,    -1,    72,    -1,    -1,    -1,    76,
+    -1,    -1,    -1,    -1,    -1,    82,    -1,    -1,    85,    86,
+    -1,    -1,    89,    90,    -1,    -1,    93,    -1,    -1,    45,
+    46,    -1,    99,    -1,    50,   102,   103,   104,   105,    -1,
+    -1,   108,   109,    59,    -1,    -1,    -1,    -1,    -1,    65,
+     1,    -1,     3,     4,    -1,    -1,    72,    -1,    -1,    -1,
     76,    -1,    -1,    -1,    -1,    -1,    82,    -1,    -1,    85,
     86,    -1,    -1,    89,    90,    -1,    -1,    93,    -1,    -1,
-    45,    46,    -1,    99,    -1,    50,   102,   103,   104,   105,
-    -1,    -1,   108,   109,    59,    -1,    -1,    -1,    -1,    -1,
-    65,     1,    -1,     3,     4,    -1,    -1,    72,    -1,    -1,
-    -1,    76,    -1,    -1,    -1,    -1,    -1,    82,    -1,    -1,
-    85,    86,    -1,    -1,    89,    90,    -1,    -1,    93,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,   102,   103,   104,
-   105,    -1,    -1,   108,   109,    45,    46,    -1,    -1,    -1,
-    50,    -1,     1,    -1,     3,     4,    -1,    -1,    -1,    59,
-    -1,    -1,    -1,    -1,    -1,    65,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,   102,   103,   104,   105,
+    -1,    -1,   108,   109,    45,    46,    -1,    -1,    -1,    50,
+    -1,     1,    -1,     3,     4,    -1,    -1,    -1,    59,    -1,
+    -1,    -1,    -1,    -1,    65,    -1,    -1,    -1,    -1,    -1,
+    -1,    72,    -1,    -1,    -1,    76,    -1,    -1,    -1,    -1,
+    -1,    82,    -1,    -1,    85,    86,    -1,    -1,    89,    90,
+    -1,    -1,    93,    -1,    -1,    45,    46,    -1,    -1,    -1,
+    50,   102,   103,   104,   105,    -1,    -1,   108,   109,    59,
+    -1,    -1,    -1,    -1,    -1,    65,     1,    -1,     3,     4,
     -1,    -1,    72,    -1,    -1,    -1,    76,    -1,    -1,    -1,
     -1,    -1,    82,    -1,    -1,    85,    86,    -1,    -1,    89,
-    90,    -1,    -1,    93,    -1,    -1,    45,    46,    -1,    -1,
-    -1,    50,   102,   103,   104,   105,    -1,    -1,   108,   109,
-    59,    -1,    -1,    -1,    -1,    -1,    65,     1,    -1,     3,
-     4,    -1,    -1,    72,    -1,    -1,    -1,    76,    -1,    -1,
-    -1,    -1,    -1,    82,    -1,    -1,    85,    86,    -1,    -1,
-    89,    90,    -1,    -1,    93,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,   102,   103,   104,   105,    -1,    -1,   108,
-   109,    45,    46,    -1,    -1,    -1,    50,    -1,     1,    -1,
-     3,     4,    -1,    -1,    -1,    59,    -1,    -1,    -1,    -1,
-    -1,    65,    -1,    -1,    -1,    -1,    -1,    -1,    72,    -1,
+    90,    -1,    -1,    93,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,   102,   103,   104,   105,    -1,    -1,   108,   109,
+    45,    46,    -1,    -1,    -1,    50,    -1,     1,    -1,     3,
+     4,    -1,    -1,    -1,    59,    -1,    -1,    -1,    -1,    -1,
+    65,    -1,    -1,    -1,    -1,    -1,    -1,    72,    -1,    -1,
+    -1,    76,    -1,    -1,    -1,    -1,    -1,    82,    -1,    -1,
+    85,    86,    -1,    -1,    89,    90,    -1,    -1,    93,    -1,
+    -1,    45,    46,    -1,    -1,    -1,    50,   102,   103,   104,
+   105,    -1,    -1,   108,   109,    59,    -1,    -1,    -1,    -1,
+    -1,    65,     1,    -1,     3,     4,    -1,    -1,    72,    -1,
     -1,    -1,    76,    -1,    -1,    -1,    -1,    -1,    82,    -1,
     -1,    85,    86,    -1,    -1,    89,    90,    -1,    -1,    93,
-    -1,    -1,    45,    46,    -1,    -1,    -1,    50,   102,   103,
-   104,   105,    -1,    -1,   108,   109,    59,    -1,    -1,    -1,
-    -1,    -1,    65,     1,    -1,     3,     4,    -1,    -1,    72,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   102,   103,
+   104,   105,    -1,    -1,   108,   109,    45,    46,    -1,    -1,
+    -1,    50,    -1,     1,    -1,     3,     4,    -1,    -1,    -1,
+    59,    -1,    -1,    -1,    -1,    -1,    65,    -1,    -1,    -1,
+    -1,    -1,    -1,    72,    -1,    -1,    -1,    76,    -1,    -1,
+    -1,    -1,    -1,    82,    -1,    -1,    85,    86,    -1,    -1,
+    89,    90,    -1,    -1,    93,    -1,    -1,    45,    46,    -1,
+    -1,    -1,    50,   102,   103,   104,   105,    -1,    -1,   108,
+   109,    59,    -1,    -1,    -1,    -1,    -1,    65,     1,    -1,
+     3,     4,    -1,    -1,    72,    -1,    -1,    -1,    76,    -1,
+    -1,    -1,    -1,    -1,    82,    -1,    -1,    85,    86,    -1,
+    -1,    89,    90,    -1,    -1,    93,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,   102,   103,   104,   105,    -1,    -1,
+   108,   109,    45,    46,    -1,    -1,    -1,    50,    -1,     1,
+    -1,     3,     4,    -1,    -1,    -1,    59,    -1,    -1,    -1,
+    -1,    -1,    65,    -1,    -1,    -1,    -1,    -1,    -1,    72,
     -1,    -1,    -1,    76,    -1,    -1,    -1,    -1,    -1,    82,
     -1,    -1,    85,    86,    -1,    -1,    89,    90,    -1,    -1,
-    93,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   102,
-   103,   104,   105,    -1,    -1,   108,   109,    45,    46,    -1,
-    -1,    -1,    50,    -1,     1,    -1,     3,     4,    -1,    -1,
-    -1,    59,    -1,    -1,    -1,    -1,    -1,    65,    -1,    -1,
-    -1,    -1,    -1,    -1,    72,    -1,    -1,    -1,    76,    -1,
-    -1,    -1,    -1,    -1,    82,    -1,    -1,    85,    86,    -1,
-    -1,    89,    90,    -1,    -1,    93,    -1,    -1,    45,    46,
-    -1,    -1,    -1,    50,   102,   103,   104,   105,    -1,    -1,
-   108,   109,    59,    -1,    -1,    -1,    -1,    -1,    65,     1,
-    -1,     3,     4,    -1,    -1,    72,    -1,    -1,    -1,    76,
-    -1,    -1,    -1,    -1,    -1,    82,    -1,    -1,    85,    86,
-    -1,    -1,    89,    90,    -1,    -1,    93,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,   102,   103,   104,   105,    -1,
-    -1,   108,   109,    45,    46,    -1,    -1,    -1,    50,    -1,
-     1,    -1,     3,     4,    -1,    -1,    -1,    59,    -1,    -1,
-    -1,    -1,    -1,    65,    -1,    -1,    -1,    -1,    -1,    -1,
+    93,    -1,    -1,    45,    46,    -1,    -1,    -1,    50,   102,
+   103,   104,   105,    -1,    -1,   108,   109,    59,    -1,    -1,
+    -1,    -1,    -1,    65,     1,    -1,     3,     4,    -1,    -1,
     72,    -1,    -1,    -1,    76,    -1,    -1,    -1,    -1,    -1,
     82,    -1,    -1,    85,    86,    -1,    -1,    89,    90,    -1,
-    -1,    93,    -1,    -1,    45,    46,    -1,    -1,    -1,    50,
-   102,   103,   104,   105,    -1,    -1,   108,   109,    59,    -1,
-    -1,    -1,    -1,    -1,    65,     1,    -1,     3,     4,    -1,
-    -1,    72,    -1,    -1,    -1,    76,    -1,    -1,    -1,    -1,
-    -1,    82,    -1,    -1,    85,    86,    -1,    -1,    89,    90,
-    -1,    -1,    93,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,   102,   103,   104,   105,    -1,    -1,   108,   109,    45,
-    46,    -1,    -1,    -1,    50,    -1,     1,    -1,     3,     4,
-    -1,    -1,    -1,    59,    -1,    -1,    -1,    -1,    -1,    65,
-    -1,    -1,    -1,    -1,    -1,    -1,    72,    -1,    -1,    -1,
+    -1,    93,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+   102,   103,   104,   105,    -1,    -1,   108,   109,    45,    46,
+    -1,    -1,    -1,    50,    -1,     1,    -1,     3,     4,    -1,
+    -1,    -1,    59,    -1,    -1,    -1,    -1,    -1,    65,    -1,
+    -1,    -1,    -1,    -1,    -1,    72,    -1,    -1,    -1,    76,
+    -1,    -1,    -1,    -1,    -1,    82,    -1,    -1,    85,    86,
+    -1,    -1,    89,    90,    -1,    -1,    93,    -1,    -1,    45,
+    46,    -1,    -1,    -1,    50,   102,   103,   104,   105,    -1,
+    -1,   108,   109,    59,    -1,    -1,    -1,    -1,    -1,    65,
+     1,    -1,     3,     4,    -1,    -1,    72,    -1,    -1,    -1,
     76,    -1,    -1,    -1,    -1,    -1,    82,    -1,    -1,    85,
     86,    -1,    -1,    89,    90,    -1,    -1,    93,    -1,    -1,
-    45,    46,    -1,    -1,    -1,    50,   102,   103,   104,   105,
-    -1,    -1,   108,   109,    59,    -1,    -1,    -1,    -1,    -1,
-    65,     1,    -1,     3,     4,    -1,    -1,    72,    -1,    -1,
-    -1,    76,    -1,    -1,    -1,    -1,    -1,    82,    -1,    -1,
-    85,    86,    -1,    -1,    89,    90,    -1,    -1,    93,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,   102,   103,   104,
-   105,    -1,    -1,   108,   109,    45,    46,    -1,    -1,    -1,
-    50,    -1,     1,    -1,     3,     4,    -1,    -1,    -1,    59,
-    -1,    -1,    -1,    -1,    -1,    65,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,   102,   103,   104,   105,
+    -1,    -1,   108,   109,    45,    46,    -1,    -1,    -1,    50,
+    -1,     1,    -1,     3,     4,    -1,    -1,    -1,    59,    -1,
+    -1,    -1,    -1,    -1,    65,    -1,    -1,    -1,    -1,    -1,
+    -1,    72,    -1,    -1,    -1,    76,    -1,    -1,    -1,    -1,
+    -1,    82,    -1,    -1,    85,    86,    -1,    -1,    89,    90,
+    -1,    -1,    93,    -1,    -1,    45,    46,    -1,    -1,    -1,
+    50,   102,   103,   104,   105,    -1,    -1,   108,   109,    59,
+    -1,    -1,    -1,    -1,    -1,    65,     1,    -1,     3,     4,
     -1,    -1,    72,    -1,    -1,    -1,    76,    -1,    -1,    -1,
     -1,    -1,    82,    -1,    -1,    85,    86,    -1,    -1,    89,
-    90,    -1,    -1,    93,    -1,    -1,    45,    46,    -1,    -1,
-    -1,    50,   102,   103,   104,   105,    -1,    -1,   108,   109,
-    59,    -1,    -1,    -1,    -1,    -1,    65,     1,    -1,     3,
-     4,    -1,    -1,    72,    -1,    -1,    -1,    76,    -1,    -1,
-    -1,    -1,    -1,    82,    -1,    -1,    85,    86,    -1,    -1,
-    89,    90,    -1,    -1,    93,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,   102,   103,   104,   105,    -1,    -1,   108,
-   109,    45,    46,    -1,    -1,    -1,    50,    -1,     1,    -1,
-     3,     4,    -1,    -1,    -1,    59,    -1,    -1,    -1,    -1,
-    -1,    65,    -1,    -1,    -1,    -1,    -1,    -1,    72,    -1,
+    90,    -1,    -1,    93,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,   102,   103,   104,   105,    -1,    -1,   108,   109,
+    45,    46,    -1,    -1,    -1,    50,    -1,     1,    -1,     3,
+     4,    -1,    -1,    -1,    59,    -1,    -1,    -1,    -1,    -1,
+    65,    -1,    -1,    -1,    -1,    -1,    -1,    72,    -1,    -1,
+    -1,    76,    -1,    -1,    -1,    -1,    -1,    82,    -1,    -1,
+    85,    86,    -1,    -1,    89,    90,    -1,    -1,    93,    -1,
+    -1,    45,    46,    -1,    -1,    -1,    50,   102,   103,   104,
+   105,    -1,    -1,   108,   109,    59,    -1,    -1,    -1,    -1,
+    -1,    65,     1,    -1,     3,     4,    -1,    -1,    72,    -1,
     -1,    -1,    76,    -1,    -1,    -1,    -1,    -1,    82,    -1,
     -1,    85,    86,    -1,    -1,    89,    90,    -1,    -1,    93,
-    -1,    -1,    45,    46,    -1,    -1,    -1,    50,   102,   103,
-   104,   105,    -1,    -1,   108,   109,    59,    -1,    -1,    -1,
-    -1,    -1,    65,     1,    -1,     3,     4,    -1,    -1,    72,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   102,   103,
+   104,   105,    -1,    -1,   108,   109,    45,    46,    -1,    -1,
+    -1,    50,    -1,     1,    -1,     3,     4,    -1,    -1,    -1,
+    59,    -1,    -1,    -1,    -1,    -1,    65,    -1,    -1,    -1,
+    -1,    -1,    -1,    72,    -1,    -1,    -1,    76,    -1,    -1,
+    -1,    -1,    -1,    82,    -1,    -1,    85,    86,    -1,    -1,
+    89,    90,    -1,    -1,    93,    -1,    -1,    45,    46,    -1,
+    -1,    -1,    50,   102,   103,   104,   105,    -1,    -1,   108,
+   109,    59,    -1,    -1,    -1,    -1,    -1,    65,     1,    -1,
+     3,     4,    -1,    -1,    72,    -1,    -1,    -1,    76,    -1,
+    -1,    -1,    -1,    -1,    82,    -1,    -1,    85,    86,    -1,
+    -1,    89,    90,    -1,    -1,    93,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,   102,   103,   104,   105,    -1,    -1,
+   108,   109,    45,    46,    -1,    -1,    -1,    50,    -1,     1,
+    -1,     3,     4,    -1,    -1,    -1,    59,    -1,    -1,    -1,
+    -1,    -1,    65,    -1,    -1,    -1,    -1,    -1,    -1,    72,
     -1,    -1,    -1,    76,    -1,    -1,    -1,    -1,    -1,    82,
     -1,    -1,    85,    86,    -1,    -1,    89,    90,    -1,    -1,
-    93,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   102,
-   103,   104,   105,    -1,    -1,   108,   109,    45,    46,    -1,
-    -1,    -1,    50,    -1,     1,    -1,     3,     4,    -1,    -1,
-    -1,    59,    -1,    -1,    -1,    -1,    -1,    65,    -1,    -1,
-    -1,    -1,    -1,    -1,    72,    -1,    -1,    -1,    76,    -1,
-    -1,    -1,    -1,    -1,    82,    -1,    -1,    85,    86,    -1,
-    -1,    89,    90,    -1,    -1,    93,    -1,    -1,    45,    46,
-    -1,    -1,    -1,    50,   102,   103,   104,   105,    -1,    -1,
-   108,   109,    59,    -1,    -1,    -1,    -1,    -1,    65,     1,
-    -1,     3,     4,    -1,    -1,    72,    -1,    -1,    -1,    76,
-    -1,    -1,    -1,    -1,    -1,    82,    -1,    -1,    85,    86,
-    -1,    -1,    89,    90,    -1,    -1,    93,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,   102,   103,   104,   105,    -1,
-    -1,   108,   109,    45,    46,    -1,    -1,    -1,    50,    -1,
-     1,    -1,     3,     4,    -1,    -1,    -1,    59,    -1,    -1,
-    -1,    -1,    -1,    65,    -1,    -1,    -1,    -1,    -1,    -1,
+    93,    -1,    -1,    45,    46,    -1,    -1,    -1,    50,   102,
+   103,   104,   105,    -1,    -1,   108,   109,    59,    -1,    -1,
+    -1,    -1,    -1,    65,     1,    -1,     3,     4,    -1,    -1,
     72,    -1,    -1,    -1,    76,    -1,    -1,    -1,    -1,    -1,
     82,    -1,    -1,    85,    86,    -1,    -1,    89,    90,    -1,
-    -1,    93,    -1,    -1,    45,    46,    -1,    -1,    -1,    50,
-   102,   103,   104,   105,    -1,    -1,   108,   109,    59,    -1,
-    -1,    -1,    -1,    -1,    65,     1,    -1,     3,     4,    -1,
-    -1,    72,    -1,    -1,    -1,    76,    -1,    -1,    -1,    -1,
-    -1,    82,    -1,    -1,    85,    86,    -1,    -1,    89,    90,
-    -1,    -1,    93,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,   102,   103,   104,   105,    -1,    -1,   108,   109,    45,
-    46,    -1,    -1,    -1,    50,    -1,     1,    -1,     3,     4,
-    -1,    -1,    -1,    59,    -1,    -1,    -1,    -1,    -1,    65,
-    -1,    -1,    -1,    -1,    -1,    -1,    72,    -1,    -1,    -1,
+    -1,    93,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+   102,   103,   104,   105,    -1,    -1,   108,   109,    45,    46,
+    -1,    -1,    -1,    50,    -1,     1,    -1,     3,     4,    -1,
+    -1,    -1,    59,    -1,    -1,    -1,    -1,    -1,    65,    -1,
+    -1,    -1,    -1,    -1,    -1,    72,    -1,    -1,    -1,    76,
+    -1,    -1,    -1,    -1,    -1,    82,    -1,    -1,    85,    86,
+    -1,    -1,    89,    90,    -1,    -1,    93,    -1,    -1,    45,
+    46,    -1,    -1,    -1,    50,   102,   103,   104,   105,    -1,
+    -1,   108,   109,    59,    -1,    -1,    -1,    -1,    -1,    65,
+     1,    -1,     3,     4,    -1,    -1,    72,    -1,    -1,    -1,
     76,    -1,    -1,    -1,    -1,    -1,    82,    -1,    -1,    85,
     86,    -1,    -1,    89,    90,    -1,    -1,    93,    -1,    -1,
-    45,    46,    -1,    -1,    -1,    50,   102,   103,   104,   105,
-    -1,    -1,   108,   109,    59,    -1,    -1,    -1,    -1,    -1,
-    65,     1,    -1,     3,     4,    -1,    -1,    72,    -1,    -1,
-    -1,    76,    -1,    -1,    -1,    -1,    -1,    82,    -1,    -1,
-    85,    86,    -1,    -1,    89,    90,    -1,    -1,    93,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,   102,   103,   104,
-   105,    -1,    -1,   108,   109,    45,    46,    -1,    -1,    -1,
-    50,    -1,     1,    -1,     3,     4,    -1,    -1,    -1,    59,
-    -1,    -1,    -1,    -1,    -1,    65,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,   102,   103,   104,   105,
+    -1,    -1,   108,   109,    45,    46,    -1,    -1,    -1,    50,
+    -1,     1,    -1,     3,     4,    -1,    -1,    -1,    59,    -1,
+    -1,    -1,    -1,    -1,    65,    -1,    -1,    -1,    -1,    -1,
+    -1,    72,    -1,    -1,    -1,    76,    -1,    -1,    -1,    -1,
+    -1,    82,    -1,    -1,    85,    86,    -1,    -1,    89,    90,
+    -1,    -1,    93,    -1,    -1,    45,    46,    -1,    -1,    -1,
+    50,   102,   103,   104,   105,    -1,    -1,   108,   109,    59,
+    -1,    -1,    -1,    -1,    -1,    65,     1,    -1,     3,     4,
     -1,    -1,    72,    -1,    -1,    -1,    76,    -1,    -1,    -1,
     -1,    -1,    82,    -1,    -1,    85,    86,    -1,    -1,    89,
-    90,    -1,    -1,    93,    -1,    -1,    45,    46,    -1,    -1,
-    -1,    50,   102,   103,   104,   105,    -1,    -1,   108,   109,
-    59,    -1,    -1,    -1,    -1,    -1,    65,     1,    -1,     3,
-     4,    -1,    -1,    72,    -1,    -1,    -1,    76,    -1,    -1,
-    -1,    -1,    -1,    82,    -1,    -1,    85,    86,    -1,    -1,
-    89,    90,    -1,    -1,    93,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,   102,   103,   104,   105,    -1,    -1,   108,
-   109,    45,    46,    -1,    -1,    -1,    50,    -1,     1,    -1,
-     3,     4,    -1,    -1,    -1,    59,    -1,    -1,    -1,    -1,
-    -1,    65,    -1,    -1,    -1,    -1,    -1,    -1,    72,    -1,
+    90,    -1,    -1,    93,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,   102,   103,   104,   105,    -1,    -1,   108,   109,
+    45,    46,    -1,    -1,    -1,    50,    -1,     1,    -1,     3,
+     4,    -1,    -1,    -1,    59,    -1,    -1,    -1,    -1,    -1,
+    65,    -1,    -1,    -1,    -1,    -1,    -1,    72,    -1,    -1,
+    -1,    76,    -1,    -1,    -1,    -1,    -1,    82,    -1,    -1,
+    85,    86,    -1,    -1,    89,    90,    -1,    -1,    93,    -1,
+    -1,    45,    46,    -1,    -1,    -1,    50,   102,   103,   104,
+   105,    -1,    -1,   108,   109,    59,    -1,    -1,    -1,    -1,
+    -1,    65,     1,    -1,     3,     4,    -1,    -1,    72,    -1,
     -1,    -1,    76,    -1,    -1,    -1,    -1,    -1,    82,    -1,
     -1,    85,    86,    -1,    -1,    89,    90,    -1,    -1,    93,
-    -1,    -1,    45,    46,    -1,    -1,    -1,    50,   102,   103,
-   104,   105,    -1,    -1,   108,   109,    59,    -1,    -1,    -1,
-    -1,    -1,    65,     1,    -1,     3,     4,    -1,    -1,    72,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   102,   103,
+   104,   105,    -1,    -1,   108,   109,    45,    46,    -1,    -1,
+    -1,    50,    -1,     1,    -1,     3,     4,    -1,    -1,    -1,
+    59,    -1,    -1,    -1,    -1,    -1,    65,    -1,    -1,    -1,
+    -1,    -1,    -1,    72,    -1,    -1,    -1,    76,    -1,    -1,
+    -1,    -1,    -1,    82,    -1,    -1,    85,    86,    -1,    -1,
+    89,    90,    -1,    -1,    93,    -1,    -1,    45,    46,    -1,
+    -1,    -1,    50,   102,   103,   104,   105,    -1,    -1,   108,
+   109,    59,    -1,    -1,    -1,    -1,    -1,    65,     1,    -1,
+     3,     4,    -1,    -1,    72,    -1,    -1,    -1,    76,    -1,
+    -1,    -1,    -1,    -1,    82,    -1,    -1,    85,    86,    -1,
+    -1,    89,    90,    -1,    -1,    93,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,   102,   103,   104,   105,    -1,    -1,
+   108,   109,    45,    46,    -1,    -1,    -1,    50,    -1,     1,
+    -1,     3,     4,    -1,    -1,    -1,    59,    -1,    -1,    -1,
+    -1,    -1,    65,    -1,    -1,    -1,    -1,    -1,    -1,    72,
     -1,    -1,    -1,    76,    -1,    -1,    -1,    -1,    -1,    82,
     -1,    -1,    85,    86,    -1,    -1,    89,    90,    -1,    -1,
-    93,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   102,
-   103,   104,   105,    -1,    -1,   108,   109,    45,    46,    -1,
-    -1,    -1,    50,    -1,     1,    -1,     3,     4,    -1,    -1,
-    -1,    59,    -1,    -1,    -1,    -1,    -1,    65,    -1,    -1,
-    -1,    -1,    -1,    -1,    72,    -1,    -1,    -1,    76,    -1,
-    -1,    -1,    -1,    -1,    82,    -1,    -1,    85,    86,    -1,
-    -1,    89,    90,    -1,    -1,    93,    -1,    -1,    45,    46,
-    -1,    -1,    -1,    50,   102,   103,   104,   105,    -1,    -1,
-   108,   109,    59,    -1,    -1,    -1,    -1,    -1,    65,     1,
-    -1,     3,     4,    -1,    -1,    72,    -1,    -1,    -1,    76,
-    -1,    -1,    -1,    -1,    -1,    82,    -1,    -1,    85,    86,
-    -1,    -1,    89,    90,    -1,    -1,    93,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,   102,   103,   104,   105,    -1,
-    -1,   108,   109,    45,    46,    -1,    -1,    -1,    50,    -1,
-     1,    -1,     3,     4,    -1,    -1,    -1,    59,    -1,    -1,
-    -1,    -1,    -1,    65,    -1,    -1,    -1,    -1,    -1,    -1,
+    93,    -1,    -1,    45,    46,    -1,    -1,    -1,    50,   102,
+   103,   104,   105,    -1,    -1,   108,   109,    59,    -1,    -1,
+    -1,    -1,    -1,    65,     1,    -1,     3,     4,    -1,    -1,
     72,    -1,    -1,    -1,    76,    -1,    -1,    -1,    -1,    -1,
     82,    -1,    -1,    85,    86,    -1,    -1,    89,    90,    -1,
-    -1,    93,    -1,    -1,    45,    46,    -1,    -1,    -1,    50,
-   102,   103,   104,   105,    -1,    -1,   108,   109,    59,    -1,
-    -1,    -1,    -1,    -1,    65,     1,    -1,     3,     4,    -1,
-    -1,    72,    -1,    -1,    -1,    76,    -1,    -1,    -1,    -1,
-    -1,    82,    -1,    -1,    85,    86,    -1,    -1,    89,    90,
-    -1,    -1,    93,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,   102,   103,   104,   105,    -1,    -1,   108,   109,    45,
-    46,    -1,    -1,    -1,    50,    -1,     1,    -1,     3,     4,
-    -1,    -1,    -1,    59,    -1,    -1,    -1,    -1,    -1,    65,
-    -1,    -1,    -1,    -1,    -1,    -1,    72,    -1,    -1,    -1,
+    -1,    93,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+   102,   103,   104,   105,    -1,    -1,   108,   109,    45,    46,
+    -1,    -1,    -1,    50,    -1,     1,    -1,     3,     4,    -1,
+    -1,    -1,    59,    -1,    -1,    -1,    -1,    -1,    65,    -1,
+    -1,    -1,    -1,    -1,    -1,    72,    -1,    -1,    -1,    76,
+    -1,    -1,    -1,    -1,    -1,    82,    -1,    -1,    85,    86,
+    -1,    -1,    89,    90,    -1,    -1,    93,    -1,    -1,    45,
+    46,    -1,    -1,    -1,    50,   102,   103,   104,   105,    -1,
+    -1,   108,   109,    59,    -1,    -1,    -1,    -1,    -1,    65,
+     1,    -1,     3,     4,    -1,    -1,    72,    -1,    -1,    -1,
     76,    -1,    -1,    -1,    -1,    -1,    82,    -1,    -1,    85,
     86,    -1,    -1,    89,    90,    -1,    -1,    93,    -1,    -1,
-    45,    46,    -1,    -1,    -1,    50,   102,   103,   104,   105,
-    -1,    -1,   108,   109,    59,    -1,    -1,    -1,    -1,    -1,
-    65,     1,    -1,     3,     4,    -1,    -1,    72,    -1,    -1,
-    -1,    76,    -1,    -1,    -1,    -1,    -1,    82,    -1,    -1,
-    85,    86,    -1,    -1,    89,    90,    -1,    -1,    93,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,   102,   103,   104,
-   105,    -1,    -1,   108,   109,    45,    46,    -1,    -1,    -1,
-    50,    -1,     1,    -1,     3,     4,    -1,    -1,    -1,    59,
-    -1,    -1,    -1,    -1,    -1,    65,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,   102,   103,   104,   105,
+    -1,    -1,   108,   109,    45,    46,    -1,    -1,    -1,    50,
+    -1,     1,    -1,     3,     4,    -1,    -1,    -1,    59,    -1,
+    -1,    -1,    -1,    -1,    65,    -1,    -1,    -1,    -1,    -1,
+    -1,    72,    -1,    -1,    -1,    76,    -1,    -1,    -1,    -1,
+    -1,    82,    -1,    -1,    85,    86,    -1,    -1,    89,    90,
+    -1,    -1,    93,    -1,    -1,    45,    46,    -1,    -1,    -1,
+    50,   102,   103,   104,   105,    -1,    -1,   108,   109,    59,
+    -1,    -1,    -1,    -1,    -1,    65,     1,    -1,     3,     4,
     -1,    -1,    72,    -1,    -1,    -1,    76,    -1,    -1,    -1,
     -1,    -1,    82,    -1,    -1,    85,    86,    -1,    -1,    89,
-    90,    -1,    -1,    93,    -1,    -1,    45,    46,    -1,    -1,
-    -1,    50,   102,   103,   104,   105,    -1,    -1,   108,   109,
-    59,    -1,    -1,    -1,    -1,    -1,    65,     1,    -1,     3,
-     4,    -1,    -1,    72,    -1,    -1,    -1,    76,    -1,    -1,
-    -1,    -1,    -1,    82,    -1,    -1,    85,    86,    -1,    -1,
-    89,    90,    -1,    -1,    93,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,   102,   103,   104,   105,    -1,    -1,   108,
-   109,    45,    46,    -1,    -1,    -1,    50,    -1,     1,    -1,
-     3,     4,    -1,    -1,    -1,    59,    -1,    -1,    -1,    -1,
-    -1,    65,    -1,    -1,    -1,    -1,    -1,    -1,    72,    -1,
+    90,    -1,    -1,    93,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,   102,   103,   104,   105,    -1,    -1,   108,   109,
+    45,    46,    -1,    -1,    -1,    50,    -1,     1,    -1,     3,
+     4,    -1,    -1,    -1,    59,    -1,    -1,    -1,    -1,    -1,
+    65,    -1,    -1,    -1,    -1,    -1,    -1,    72,    -1,    -1,
+    -1,    76,    -1,    -1,    -1,    -1,    -1,    82,    -1,    -1,
+    85,    86,    -1,    -1,    89,    90,    -1,    -1,    93,    -1,
+    -1,    45,    46,    -1,    -1,    -1,    50,   102,   103,   104,
+   105,    -1,    -1,   108,   109,    59,    -1,    -1,    -1,    -1,
+    -1,    65,     1,    -1,     3,     4,    -1,    -1,    72,    -1,
     -1,    -1,    76,    -1,    -1,    -1,    -1,    -1,    82,    -1,
     -1,    85,    86,    -1,    -1,    89,    90,    -1,    -1,    93,
-    -1,    -1,    45,    46,    -1,    -1,    -1,    50,   102,   103,
-   104,   105,    -1,    -1,   108,   109,    59,    -1,    -1,    -1,
-    -1,    -1,    65,     1,    -1,     3,     4,    -1,    -1,    72,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   102,   103,
+   104,   105,    -1,    -1,   108,   109,    45,    46,    -1,    -1,
+    -1,    50,    -1,     1,    -1,     3,     4,    -1,    -1,    -1,
+    59,    -1,    -1,    -1,    -1,    -1,    65,    -1,    -1,    -1,
+    -1,    -1,    -1,    72,    -1,    -1,    -1,    76,    -1,    -1,
+    -1,    -1,    -1,    82,    -1,    -1,    85,    86,    -1,    -1,
+    89,    90,    -1,    -1,    93,    -1,    -1,    45,    46,    -1,
+    -1,    -1,    50,   102,   103,   104,   105,    -1,    -1,   108,
+   109,    59,    -1,    -1,    -1,    -1,    -1,    65,     1,    -1,
+     3,     4,    -1,    -1,    72,    -1,    -1,    -1,    76,    -1,
+    -1,    -1,    -1,    -1,    82,    -1,    -1,    85,    86,    -1,
+    -1,    89,    90,    -1,    -1,    93,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,   102,   103,   104,   105,    -1,    -1,
+   108,   109,    45,    46,    -1,    -1,    -1,    50,    -1,     1,
+    -1,     3,     4,    -1,    -1,    -1,    59,    -1,    -1,    -1,
+    -1,    -1,    65,    -1,    -1,    -1,    -1,    -1,    -1,    72,
     -1,    -1,    -1,    76,    -1,    -1,    -1,    -1,    -1,    82,
     -1,    -1,    85,    86,    -1,    -1,    89,    90,    -1,    -1,
-    93,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   102,
-   103,   104,   105,    -1,    -1,   108,   109,    45,    46,    -1,
-    -1,    -1,    50,    -1,     1,    -1,     3,     4,    -1,    -1,
-    -1,    59,    -1,    -1,    -1,    -1,    -1,    65,    -1,    -1,
-    -1,    -1,    -1,    -1,    72,    -1,    -1,    -1,    76,    -1,
-    -1,    -1,    -1,    -1,    82,    -1,    -1,    85,    86,    -1,
-    -1,    89,    90,    -1,    -1,    93,    -1,    -1,    45,    46,
-    -1,    -1,    -1,    50,   102,   103,   104,   105,    -1,    -1,
-   108,   109,    59,    -1,    -1,    -1,    -1,    -1,    65,     1,
-    -1,     3,     4,    -1,    -1,    72,    -1,    -1,    -1,    76,
-    -1,    -1,    -1,    -1,    -1,    82,    -1,    -1,    85,    86,
-    -1,    -1,    89,    90,    -1,    -1,    93,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,   102,   103,   104,   105,    -1,
-    -1,   108,   109,    45,    46,    -1,    -1,    -1,    50,    -1,
-     1,    -1,     3,     4,    -1,    -1,    -1,    59,    -1,    -1,
+    93,    -1,    -1,    45,    46,    -1,    -1,    -1,    50,   102,
+   103,   104,   105,    -1,    -1,   108,   109,    59,    -1,    -1,
+    -1,    -1,    -1,    65,    -1,     1,    -1,    -1,    -1,    -1,
+    72,    -1,    -1,    -1,    76,    -1,    -1,    -1,    -1,    -1,
+    82,    -1,    -1,    85,    86,    -1,    -1,    89,    90,    -1,
+     1,    93,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+   102,   103,   104,   105,    -1,    -1,   108,   109,    44,    45,
+    46,    -1,    -1,    -1,    50,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    59,    -1,    -1,    -1,    -1,    -1,    65,
+    -1,    -1,     1,    -1,    45,    46,    72,    -1,    -1,    50,
+    76,    -1,    -1,    -1,    -1,    -1,    82,    -1,    59,    85,
+    86,    -1,    -1,    -1,    65,    -1,    -1,    93,    -1,    -1,
+    -1,    72,    -1,    99,    -1,    76,   102,   103,   104,   105,
+    -1,    82,   108,   109,    85,    86,    45,    46,    -1,    -1,
+    -1,    50,    93,    94,    -1,    -1,    -1,    -1,    -1,    -1,
+    59,   102,   103,   104,   105,    -1,    65,   108,   109,     1,
+    -1,    -1,    -1,    72,    -1,    -1,    -1,    76,    -1,    -1,
+    -1,    -1,    -1,    82,    -1,    -1,    85,    86,    -1,    -1,
+    -1,    -1,    -1,    -1,    93,    94,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,   102,   103,   104,   105,    -1,    -1,   108,
+   109,     1,    -1,    45,    46,    -1,    -1,    -1,    50,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    59,    -1,    -1,
     -1,    -1,    -1,    65,    -1,    -1,    -1,    -1,    -1,    -1,
     72,    -1,    -1,    -1,    76,    -1,    -1,    -1,    -1,    -1,
+    82,    -1,    -1,    85,    86,     3,     4,    -1,    -1,    -1,
+    50,    93,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    59,
+   102,   103,   104,   105,    -1,    65,   108,   109,    -1,    -1,
+    -1,    -1,    72,    -1,    -1,    -1,    76,    -1,    -1,    -1,
+    -1,    -1,    82,    -1,    -1,    85,    86,    45,    46,    89,
+    90,    -1,    50,    93,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    59,   102,   103,   104,   105,    -1,    65,   108,   109,
+     3,     4,    -1,    -1,    72,    -1,    -1,    -1,    76,    -1,
+    -1,    -1,    -1,    -1,    82,    -1,    -1,    85,    86,    -1,
+    -1,    89,    90,    -1,    -1,    93,    -1,    95,    96,    -1,
+    -1,    -1,   100,    -1,   102,   103,   104,   105,    -1,    -1,
+   108,   109,    45,    46,    -1,    -1,    -1,    50,    -1,    -1,
+    -1,     3,     4,    -1,    -1,    -1,    59,    -1,    -1,    -1,
+    -1,    -1,    65,    -1,    -1,    -1,    -1,    -1,    -1,    72,
+    -1,    -1,    -1,    76,    -1,    -1,    -1,    -1,    -1,    82,
+    -1,    -1,    85,    86,    -1,    -1,    89,    90,    -1,    -1,
+    93,    94,    -1,    45,    46,    -1,    -1,    -1,    50,   102,
+   103,   104,   105,    -1,    -1,   108,   109,    59,    -1,    -1,
+    -1,    -1,    -1,    65,    -1,    -1,     3,     4,    -1,    -1,
+    72,    -1,    -1,    -1,    76,    -1,    -1,    -1,    -1,    -1,
     82,    -1,    -1,    85,    86,    -1,    -1,    89,    90,    -1,
-    -1,    93,    -1,    -1,    45,    46,    -1,    -1,    -1,    50,
-   102,   103,   104,   105,    -1,    -1,   108,   109,    59,    -1,
-    -1,    -1,    -1,    -1,    65,    -1,     1,    -1,    -1,    -1,
+    -1,    93,    94,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+   102,   103,   104,   105,    -1,    -1,   108,   109,    45,    46,
+    -1,    -1,    -1,    50,    -1,    -1,    -1,     3,     4,    -1,
+    -1,    -1,    59,    -1,    -1,    -1,    -1,    -1,    65,    -1,
+    -1,    -1,    -1,    -1,    -1,    72,    -1,    -1,    -1,    76,
+    -1,    -1,    -1,    -1,    -1,    82,    -1,    -1,    85,    86,
+    -1,    -1,    89,    90,    -1,    -1,    93,    94,    -1,    45,
+    46,    -1,    -1,    -1,    50,   102,   103,   104,   105,    -1,
+    -1,   108,   109,    59,    -1,    -1,    -1,    -1,    -1,    65,
+    -1,    -1,     3,     4,    -1,    -1,    72,    -1,    -1,    -1,
+    76,    -1,    -1,    -1,    -1,    -1,    82,    -1,    -1,    85,
+    86,    -1,    -1,    89,    90,    -1,    -1,    93,    94,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,   102,   103,   104,   105,
+    -1,    -1,   108,   109,    45,    46,    -1,    -1,    -1,    50,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    59,    -1,
+    -1,    -1,    -1,    -1,    65,    -1,    -1,    -1,    -1,    -1,
     -1,    72,    -1,    -1,    -1,    76,    -1,    -1,    -1,    -1,
     -1,    82,    -1,    -1,    85,    86,    -1,    -1,    89,    90,
-    -1,     1,    93,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,   102,   103,   104,   105,    -1,    -1,   108,   109,    44,
-    45,    46,    -1,    -1,    -1,    50,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    59,    -1,    -1,    -1,    -1,    -1,
-    65,    -1,    -1,     1,    -1,    45,    46,    72,    -1,    -1,
-    50,    76,    -1,    -1,    -1,    -1,    -1,    82,    -1,    59,
-    85,    86,    -1,    -1,    -1,    65,    -1,    -1,    93,    -1,
-     3,     4,    72,    -1,    99,    -1,    76,   102,   103,   104,
-   105,    -1,    82,   108,   109,    85,    86,    45,    46,    -1,
-    -1,    -1,    50,    93,    94,    -1,    -1,    -1,    -1,    -1,
-    -1,    59,   102,   103,   104,   105,    -1,    65,   108,   109,
-     1,    -1,    45,    46,    72,    -1,    -1,    50,    76,    -1,
-    -1,    -1,    -1,    -1,    82,    -1,    59,    85,    86,    -1,
-    -1,    -1,    65,    -1,    -1,    93,    94,     3,     4,    72,
-    -1,    -1,    -1,    76,   102,   103,   104,   105,    -1,    82,
-   108,   109,    85,    86,    45,    46,    89,    90,    -1,    50,
-    93,    -1,    95,    96,    -1,    -1,    -1,   100,    59,   102,
-   103,   104,   105,    -1,    65,   108,   109,    -1,    -1,    45,
-    46,    72,    -1,    -1,    50,    76,    -1,    -1,     3,     4,
-    -1,    82,    -1,    59,    85,    86,    -1,    -1,    -1,    65,
-    -1,    -1,    93,    -1,    -1,    -1,    72,    -1,    -1,    -1,
-    76,   102,   103,   104,   105,    -1,    82,   108,   109,    85,
-    86,    -1,    -1,    89,    90,    -1,    -1,    93,    94,    -1,
-    45,    46,    -1,    -1,    -1,    50,   102,   103,   104,   105,
-    -1,    -1,   108,   109,    59,    -1,    -1,    -1,    -1,    -1,
-    65,    -1,    -1,     3,     4,    -1,    -1,    72,    -1,    -1,
-    -1,    76,    -1,    -1,    -1,    -1,    -1,    82,    -1,    -1,
-    85,    86,    -1,    -1,    89,    90,    -1,    -1,    93,    94,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,   102,   103,   104,
-   105,    -1,    -1,   108,   109,    45,    46,    -1,    -1,    -1,
-    50,    -1,    -1,    -1,     3,     4,    -1,    -1,    -1,    59,
+    -1,    -1,    93,    -1,    44,    45,    46,    -1,    -1,    -1,
+    50,   102,   103,   104,   105,    -1,    -1,   108,   109,    59,
     -1,    -1,    -1,    -1,    -1,    65,    -1,    -1,    -1,    -1,
     -1,    -1,    72,    -1,    -1,    -1,    76,    -1,    -1,    -1,
-    -1,    -1,    82,    -1,    -1,    85,    86,    -1,    -1,    89,
-    90,    -1,    -1,    93,    94,    -1,    45,    46,    -1,    -1,
-    -1,    50,   102,   103,   104,   105,    -1,    -1,   108,   109,
-    59,    -1,    -1,    -1,    -1,    -1,    65,    -1,    -1,     3,
-     4,    -1,    -1,    72,    -1,    -1,    -1,    76,    -1,    -1,
-    -1,    -1,    -1,    82,    -1,    -1,    85,    86,    -1,    -1,
-    89,    90,    -1,    -1,    93,    94,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,   102,   103,   104,   105,    -1,    -1,   108,
-   109,    45,    46,    -1,    -1,    -1,    50,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    59,    -1,    -1,    -1,    -1,
-    -1,    65,    -1,    -1,    -1,    -1,    -1,    -1,    72,    -1,
-    -1,    -1,    76,    -1,    -1,    -1,    -1,    -1,    82,    -1,
-    -1,    85,    86,    -1,    -1,    89,    90,    50,    -1,    93,
-    -1,    -1,    -1,    -1,    -1,    -1,    59,    -1,   102,   103,
-   104,   105,    65,    -1,   108,   109,    -1,    -1,    -1,    72,
-    -1,    -1,    -1,    76,    -1,    -1,    -1,    -1,    -1,    82,
-    -1,    -1,    85,    86,    -1,    -1,    89,    90,    -1,    -1,
-    93,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   102,
-   103,   104,   105,    -1,    -1,   108,   109
+    -1,    -1,    82,    -1,    -1,    85,    86,    -1,    -1,    -1,
+    -1,    -1,    -1,    93,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,   102,   103,   104,   105,    -1,    -1,   108,   109
 };
 #define YYPURE 1
 
 /* -*-C-*-  Note some compilers choke on comments on `#line' lines.  */
-#line 3 "/x1/java-install/share/bison.simple"
+#line 3 "/usr/cygnus/gnupro-98r1/share/bison.simple"
 
 /* Skeleton output parser for bison,
    Copyright (C) 1984, 1989, 1990 Free Software Foundation, Inc.
@@ -2261,7 +2226,7 @@ __yy_memcpy (char *to, char *from, int count)
 #endif
 #endif
 \f
-#line 196 "/x1/java-install/share/bison.simple"
+#line 196 "/usr/cygnus/gnupro-98r1/share/bison.simple"
 
 /* The user can define YYPARSE_PARAM as the name of an argument to be passed
    into yyparse.  The argument should have type void *.
@@ -2566,66 +2531,66 @@ yyreduce:
   switch (yyn) {
 
 case 1:
-#line 273 "./parse.y"
+#line 272 "./parse.y"
 {;
     break;}
 case 18:
-#line 317 "./parse.y"
+#line 316 "./parse.y"
 { 
                  yyval.node = build_java_array_type (yyvsp[-2].node, -1);
                  CLASS_LOADED_P (yyval.node) = 1;
                ;
     break;}
 case 19:
-#line 322 "./parse.y"
+#line 321 "./parse.y"
 { yyval.node = build_unresolved_array_type (yyvsp[-2].node); ;
     break;}
 case 20:
-#line 324 "./parse.y"
+#line 323 "./parse.y"
 { yyval.node = build_unresolved_array_type (yyvsp[-2].node); ;
     break;}
 case 21:
-#line 326 "./parse.y"
+#line 325 "./parse.y"
 {RULE ("']' expected"); RECOVER;;
     break;}
 case 22:
-#line 328 "./parse.y"
+#line 327 "./parse.y"
 {RULE ("']' expected"); RECOVER;;
     break;}
 case 26:
-#line 343 "./parse.y"
+#line 342 "./parse.y"
 { yyval.node = make_qualified_name (yyvsp[-2].node, yyvsp[0].node, yyvsp[-1].operator.location); ;
     break;}
 case 28:
-#line 352 "./parse.y"
+#line 351 "./parse.y"
 {yyval.node = NULL;;
     break;}
 case 36:
-#line 364 "./parse.y"
+#line 363 "./parse.y"
 {
                  yyval.node = NULL;
                ;
     break;}
 case 37:
-#line 368 "./parse.y"
+#line 367 "./parse.y"
 {
                  yyval.node = NULL;
                ;
     break;}
 case 40:
-#line 380 "./parse.y"
+#line 379 "./parse.y"
 { ctxp->package = EXPR_WFL_NODE (yyvsp[-1].node); ;
     break;}
 case 41:
-#line 382 "./parse.y"
+#line 381 "./parse.y"
 {yyerror ("Missing name"); RECOVER;;
     break;}
 case 42:
-#line 384 "./parse.y"
+#line 383 "./parse.y"
 {yyerror ("';' expected"); RECOVER;;
     break;}
 case 45:
-#line 394 "./parse.y"
+#line 393 "./parse.y"
 {
                  tree name = EXPR_WFL_NODE (yyvsp[-1].node), node, last_name;
                  int   i = IDENTIFIER_LENGTH (name)-1;
@@ -2656,15 +2621,15 @@ case 45:
                ;
     break;}
 case 46:
-#line 423 "./parse.y"
+#line 422 "./parse.y"
 {yyerror ("Missing name"); RECOVER;;
     break;}
 case 47:
-#line 425 "./parse.y"
+#line 424 "./parse.y"
 {yyerror ("';' expected"); RECOVER;;
     break;}
 case 48:
-#line 430 "./parse.y"
+#line 429 "./parse.y"
 {
                  tree name = EXPR_WFL_NODE (yyvsp[-3].node);
                  tree node = build_tree_list (yyvsp[-3].node, NULL_TREE);
@@ -2678,17 +2643,18 @@ case 48:
                ;
     break;}
 case 49:
-#line 442 "./parse.y"
+#line 441 "./parse.y"
 {yyerror ("'*' expected"); RECOVER;;
     break;}
 case 50:
-#line 444 "./parse.y"
+#line 443 "./parse.y"
 {yyerror ("';' expected"); RECOVER;;
     break;}
 case 51:
-#line 449 "./parse.y"
+#line 448 "./parse.y"
 {
                  maybe_generate_clinit ();
+                 maybe_generate_finit ();
                  yyval.node = yyvsp[0].node;
                ;
     break;}
@@ -2908,205 +2874,230 @@ case 103:
     break;}
 case 104:
 #line 647 "./parse.y"
-{ 
-                 BLOCK_EXPR_BODY 
-                   (DECL_FUNCTION_BODY (current_function_decl)) = yyvsp[0].node;
-                 maybe_absorb_scoping_blocks ();
-                 exit_block (); /* Exit function's body. */
-
-                 /* Merge last line of the function with first line,
-                    directly in the function decl. It will be used to
-                    emit correct debug info. */
-                 DECL_SOURCE_LINE_MERGE (current_function_decl,
-                                         ctxp->last_ccb_indent1);
-               ;
+{ complete_method_declaration (yyvsp[0].node); ;
     break;}
 case 105:
-#line 660 "./parse.y"
+#line 649 "./parse.y"
 {YYNOT_TWICE yyerror ("'{' expected"); RECOVER;;
     break;}
 case 106:
-#line 665 "./parse.y"
+#line 654 "./parse.y"
 { yyval.node = method_header (0, yyvsp[-2].node, yyvsp[-1].node, yyvsp[0].node); ;
     break;}
 case 107:
-#line 667 "./parse.y"
+#line 656 "./parse.y"
 { yyval.node = method_header (0, void_type_node, yyvsp[-1].node, yyvsp[0].node); ;
     break;}
 case 108:
-#line 669 "./parse.y"
+#line 658 "./parse.y"
 { yyval.node = method_header (yyvsp[-3].value, yyvsp[-2].node, yyvsp[-1].node, yyvsp[0].node); ;
     break;}
 case 109:
-#line 671 "./parse.y"
+#line 660 "./parse.y"
 { yyval.node = method_header (yyvsp[-3].value, void_type_node, yyvsp[-1].node, yyvsp[0].node); ;
     break;}
 case 110:
-#line 673 "./parse.y"
+#line 662 "./parse.y"
 {RECOVER;;
     break;}
 case 111:
-#line 675 "./parse.y"
+#line 664 "./parse.y"
 {RECOVER;;
     break;}
 case 112:
-#line 677 "./parse.y"
+#line 666 "./parse.y"
 {yyerror ("Identifier expected"); RECOVER;;
     break;}
 case 113:
-#line 679 "./parse.y"
+#line 668 "./parse.y"
 {yyerror ("Identifier expected"); RECOVER;;
     break;}
 case 114:
-#line 681 "./parse.y"
+#line 670 "./parse.y"
 {
                  yyerror ("Invalid method declaration, return type required");
                  RECOVER;
                ;
     break;}
 case 115:
-#line 689 "./parse.y"
+#line 678 "./parse.y"
 { yyval.node = method_declarator (yyvsp[-2].node, NULL_TREE); ;
     break;}
 case 116:
-#line 691 "./parse.y"
+#line 680 "./parse.y"
 { yyval.node = method_declarator (yyvsp[-3].node, yyvsp[-1].node); ;
     break;}
 case 117:
-#line 693 "./parse.y"
+#line 682 "./parse.y"
 {
                  /* Issue a warning here: obsolete declaration. FIXME */
                  yyval.node = NULL;    /* FIXME */
                ;
     break;}
 case 118:
-#line 698 "./parse.y"
+#line 687 "./parse.y"
 {yyerror ("')' expected"); DRECOVER(method_declarator);;
     break;}
 case 119:
-#line 700 "./parse.y"
+#line 689 "./parse.y"
 {yyerror ("']' expected"); RECOVER;;
     break;}
 case 120:
-#line 705 "./parse.y"
+#line 694 "./parse.y"
 {
                  ctxp->formal_parameter_number = 1;
                ;
     break;}
 case 121:
-#line 709 "./parse.y"
+#line 698 "./parse.y"
 {
                  ctxp->formal_parameter_number += 1;
                  yyval.node = chainon (yyvsp[-2].node, yyvsp[0].node);
                ;
     break;}
 case 122:
-#line 714 "./parse.y"
+#line 703 "./parse.y"
 {yyerror ("Missing formal parameter term"); RECOVER;;
     break;}
 case 123:
-#line 719 "./parse.y"
+#line 708 "./parse.y"
 {
                  yyval.node = build_tree_list (yyvsp[0].node, yyvsp[-1].node);
                ;
     break;}
 case 124:
-#line 723 "./parse.y"
+#line 712 "./parse.y"
 { yyval.node = parse_jdk1_1_error ("final local"); ;
     break;}
 case 125:
-#line 725 "./parse.y"
+#line 714 "./parse.y"
 {yyerror ("Missing identifier"); RECOVER;;
     break;}
 case 126:
-#line 727 "./parse.y"
+#line 716 "./parse.y"
 {
                  SOURCE_FRONTEND_DEBUG (("Modifiers: %d", yyvsp[-2].value));
                  yyerror ("Missing identifier"); RECOVER;
                ;
     break;}
 case 127:
-#line 734 "./parse.y"
+#line 723 "./parse.y"
 { yyval.node = NULL_TREE; ;
     break;}
 case 128:
-#line 736 "./parse.y"
+#line 725 "./parse.y"
 { yyval.node = yyvsp[0].node; ;
     break;}
 case 129:
-#line 738 "./parse.y"
+#line 727 "./parse.y"
 {yyerror ("Missing class type term"); RECOVER;;
     break;}
 case 130:
-#line 743 "./parse.y"
+#line 732 "./parse.y"
 { yyval.node = build_tree_list (NULL_TREE, yyvsp[0].node); ;
     break;}
 case 131:
-#line 745 "./parse.y"
+#line 734 "./parse.y"
 { yyval.node = tree_cons (NULL_TREE, yyvsp[0].node, yyvsp[-2].node); ;
     break;}
 case 132:
-#line 747 "./parse.y"
+#line 736 "./parse.y"
 {yyerror ("Missing class type term"); RECOVER;;
     break;}
 case 135:
-#line 754 "./parse.y"
+#line 743 "./parse.y"
 { yyval.node = NULL_TREE; ;
     break;}
 case 136:
-#line 760 "./parse.y"
+#line 749 "./parse.y"
 {
                  RULE ("STATIC_INITIALIZER");
                ;
     break;}
 case 137:
-#line 764 "./parse.y"
+#line 753 "./parse.y"
 {
                  RULE ("STATIC_INITIALIZER");
                ;
     break;}
 case 138:
-#line 771 "./parse.y"
+#line 760 "./parse.y"
 {
                  SOURCE_FRONTEND_DEBUG (("Modifiers: %d", yyvsp[0].value));
                ;
     break;}
 case 139:
-#line 783 "./parse.y"
+#line 768 "./parse.y"
 {
-                 RULE ("CONSTRUCTOR_DECLARATION");
+                 current_function_decl = yyvsp[0].node;
+                 source_start_java_method (current_function_decl);
                ;
     break;}
 case 140:
+#line 773 "./parse.y"
+{ complete_method_declaration (yyvsp[0].node); ;
+    break;}
+case 141:
+#line 778 "./parse.y"
+{ yyval.node = method_header (0, NULL_TREE, yyvsp[-1].node, yyvsp[0].node); ;
+    break;}
+case 142:
+#line 780 "./parse.y"
+{ yyval.node = method_header (yyvsp[-2].value, NULL_TREE, yyvsp[-1].node, yyvsp[0].node); ;
+    break;}
+case 143:
+#line 785 "./parse.y"
+{ yyval.node = method_declarator (yyvsp[-2].node, NULL_TREE); ;
+    break;}
+case 144:
 #line 787 "./parse.y"
-{
-                 SOURCE_FRONTEND_DEBUG (("Modifiers: %d", yyvsp[-3].value));
-                 RULE ("CONSTRUCTOR_DECLARATION (modifier)");
+{ yyval.node = method_declarator (yyvsp[-3].node, yyvsp[-1].node); ;
+    break;}
+case 145:
+#line 795 "./parse.y"
+{ 
+                 BLOCK_EXPR_BODY (yyvsp[0].node) = size_zero_node;
+                 yyval.node = yyvsp[0].node;
                ;
     break;}
-case 141:
-#line 793 "./parse.y"
-{
-                 RULE ("CONSTRUCTOR_DECLARATION");
+case 146:
+#line 800 "./parse.y"
+{ yyval.node = yyvsp[0].node; ;
+    break;}
+case 147:
+#line 802 "./parse.y"
+{ yyval.node = yyvsp[0].node; ;
+    break;}
+case 148:
+#line 804 "./parse.y"
+{ yyval.node = yyvsp[0].node; ;
+    break;}
+case 149:
+#line 810 "./parse.y"
+{ 
+                 yyval.node = build_method_invocation (yyvsp[-3].node, NULL_TREE); 
+                 yyval.node = build_debugable_stmt (EXPR_WFL_LINECOL (yyvsp[-3].node), yyval.node);
+                 yyval.node = java_method_add_stmt (current_function_decl, yyval.node);
                ;
     break;}
-case 142:
-#line 798 "./parse.y"
-{
-                 SOURCE_FRONTEND_DEBUG (("Modifiers: %d", yyvsp[-4].value));
-                 RULE ("CONSTRUCTOR_DECLARATION (modifier)");
+case 150:
+#line 816 "./parse.y"
+{ 
+                 yyval.node = build_method_invocation (yyvsp[-4].node, yyvsp[-2].node); 
+                 yyval.node = build_debugable_stmt (EXPR_WFL_LINECOL (yyvsp[-4].node), yyval.node);
+                 yyval.node = java_method_add_stmt (current_function_decl, yyval.node);
                ;
     break;}
 case 151:
-#line 825 "./parse.y"
+#line 824 "./parse.y"
 {yyval.node = parse_jdk1_1_error ("explicit constructor invocation"); ;
     break;}
 case 152:
-#line 827 "./parse.y"
+#line 826 "./parse.y"
 {yyval.node = parse_jdk1_1_error ("explicit constructor invocation"); ;
     break;}
 case 153:
-#line 832 "./parse.y"
+#line 831 "./parse.y"
 {
                  tree wfl = build_wfl_node (this_identifier_node, 
                                             input_filename, 0, 0);
@@ -3115,7 +3106,7 @@ case 153:
                ;
     break;}
 case 154:
-#line 839 "./parse.y"
+#line 838 "./parse.y"
 {
                  tree wfl = build_wfl_node (super_identifier_node,
                                             input_filename, 0, 0);
@@ -3124,163 +3115,167 @@ case 154:
                ;
     break;}
 case 155:
-#line 851 "./parse.y"
+#line 850 "./parse.y"
 { create_interface (0, yyvsp[0].node, NULL_TREE); ;
     break;}
 case 156:
-#line 853 "./parse.y"
+#line 852 "./parse.y"
 {
                  yyval.node = yyvsp[0].node;
                ;
     break;}
 case 157:
-#line 857 "./parse.y"
+#line 856 "./parse.y"
 { create_interface (yyvsp[-2].value, yyvsp[0].node, NULL_TREE); ;
     break;}
 case 158:
-#line 859 "./parse.y"
+#line 858 "./parse.y"
 {
                  yyval.node = yyvsp[0].node;
                ;
     break;}
 case 159:
-#line 863 "./parse.y"
+#line 862 "./parse.y"
 { create_interface (0, yyvsp[-1].node, yyvsp[0].node); ;
     break;}
 case 160:
-#line 865 "./parse.y"
+#line 864 "./parse.y"
 {
                  yyval.node = yyvsp[0].node;
                ;
     break;}
 case 161:
-#line 869 "./parse.y"
+#line 868 "./parse.y"
 { create_interface (yyvsp[-3].value, yyvsp[-1].node, yyvsp[0].node); ;
     break;}
 case 162:
-#line 871 "./parse.y"
+#line 870 "./parse.y"
 {
                  yyval.node = yyvsp[0].node;
                ;
     break;}
 case 163:
-#line 875 "./parse.y"
+#line 874 "./parse.y"
 {yyerror ("(here)'{' expected"); RECOVER;;
     break;}
 case 164:
-#line 877 "./parse.y"
+#line 876 "./parse.y"
 {yyerror ("(there)'{' expected"); RECOVER;;
     break;}
 case 165:
-#line 882 "./parse.y"
+#line 881 "./parse.y"
 { 
                  ctxp->interface_number = 1;
                  yyval.node = build_tree_list (yyvsp[0].node, NULL_TREE);
                ;
     break;}
 case 166:
-#line 887 "./parse.y"
+#line 886 "./parse.y"
 { 
                  ctxp->interface_number++;
                  yyval.node = chainon (yyvsp[-2].node, build_tree_list (yyvsp[0].node, NULL_TREE));
                ;
     break;}
 case 167:
-#line 892 "./parse.y"
+#line 891 "./parse.y"
 {yyerror ("Invalid interface type"); RECOVER;;
     break;}
 case 168:
-#line 894 "./parse.y"
+#line 893 "./parse.y"
 {yyerror ("Missing term"); RECOVER;;
     break;}
 case 169:
-#line 899 "./parse.y"
+#line 898 "./parse.y"
 { yyval.node = NULL_TREE; ;
     break;}
 case 170:
-#line 901 "./parse.y"
+#line 900 "./parse.y"
 { yyval.node = NULL_TREE; ;
     break;}
 case 175:
-#line 913 "./parse.y"
+#line 912 "./parse.y"
 { yyval.node = parse_jdk1_1_error ("inner class declaration"); ;
     break;}
 case 176:
-#line 915 "./parse.y"
+#line 914 "./parse.y"
 { yyval.node = parse_jdk1_1_error ("inner interface declaration"); ;
     break;}
 case 178:
-#line 924 "./parse.y"
+#line 923 "./parse.y"
 { 
                  check_abstract_method_header (yyvsp[-1].node);
                  current_function_decl = NULL_TREE; /* FIXME ? */
                ;
     break;}
 case 179:
-#line 929 "./parse.y"
+#line 928 "./parse.y"
 {yyerror ("';' expected"); RECOVER;;
     break;}
 case 180:
-#line 935 "./parse.y"
+#line 934 "./parse.y"
 {
                  RULE ("ARRAY_INITIALIZER (empty)");
                ;
     break;}
 case 181:
-#line 939 "./parse.y"
+#line 938 "./parse.y"
 {
                  RULE ("ARRAY_INITIALIZER (variable)");
                ;
     break;}
 case 182:
-#line 943 "./parse.y"
+#line 942 "./parse.y"
 {
                  RULE ("ARRAY_INITIALIZER (,)");
                ;
     break;}
 case 183:
-#line 947 "./parse.y"
+#line 946 "./parse.y"
 {
                  RULE ("ARRAY_INITIALIZER (variable, ,)");
                ;
     break;}
 case 186:
-#line 956 "./parse.y"
+#line 955 "./parse.y"
 {yyerror ("Missing term"); RECOVER;;
     break;}
 case 187:
-#line 962 "./parse.y"
+#line 961 "./parse.y"
 { yyval.node = size_zero_node; ;
     break;}
 case 188:
-#line 964 "./parse.y"
-{ enter_block (); ;
+#line 963 "./parse.y"
+{ yyval.node = yyvsp[0].node; ;
     break;}
 case 189:
-#line 967 "./parse.y"
+#line 968 "./parse.y"
+{ enter_block (); ;
+    break;}
+case 190:
+#line 973 "./parse.y"
 { 
                  maybe_absorb_scoping_blocks ();
                  yyval.node = exit_block ();
                ;
     break;}
-case 193:
-#line 981 "./parse.y"
+case 194:
+#line 987 "./parse.y"
 { yyval.node = java_method_add_stmt (current_function_decl, yyvsp[0].node); ;
     break;}
-case 194:
-#line 983 "./parse.y"
+case 195:
+#line 989 "./parse.y"
 { yyval.node = parse_jdk1_1_error ("inner class declaration"); ;
     break;}
-case 196:
-#line 992 "./parse.y"
+case 197:
+#line 998 "./parse.y"
 { declare_local_variables (0, yyvsp[-1].node, yyvsp[0].node); ;
     break;}
-case 197:
-#line 994 "./parse.y"
+case 198:
+#line 1000 "./parse.y"
 { declare_local_variables (yyvsp[-2].value, yyvsp[-1].node, yyvsp[0].node); ;
     break;}
-case 203:
-#line 1004 "./parse.y"
+case 204:
+#line 1010 "./parse.y"
 { 
                  /* If the for loop is unlabeled, we must return the
                     block it was defined it. It our last chance to
@@ -3289,12 +3284,12 @@ case 203:
                    yyval.node = exit_block ();
                ;
     break;}
-case 220:
-#line 1037 "./parse.y"
+case 221:
+#line 1043 "./parse.y"
 { yyval.node = size_zero_node; ;
     break;}
-case 221:
-#line 1042 "./parse.y"
+case 222:
+#line 1048 "./parse.y"
 {
                  yyval.node = build_labeled_block (EXPR_WFL_LINECOL (yyvsp[-1].node), 
                                            EXPR_WFL_NODE (yyvsp[-1].node));
@@ -3303,28 +3298,28 @@ case 221:
                  PUSH_LABELED_BLOCK (yyval.node);
                ;
     break;}
-case 222:
-#line 1053 "./parse.y"
+case 223:
+#line 1059 "./parse.y"
 { 
                  yyval.node = complete_labeled_statement (yyvsp[-1].node, yyvsp[0].node);
                  pop_labeled_block ();
                  POP_LABELED_BLOCK ();
                ;
     break;}
-case 223:
-#line 1059 "./parse.y"
+case 224:
+#line 1065 "./parse.y"
 {yyerror ("':' expected"); RECOVER;;
     break;}
-case 224:
-#line 1064 "./parse.y"
+case 225:
+#line 1070 "./parse.y"
 { 
                  yyval.node = complete_labeled_statement (yyvsp[-1].node, yyvsp[0].node);
                  pop_labeled_block ();
                  POP_LABELED_BLOCK ();
                ;
     break;}
-case 225:
-#line 1075 "./parse.y"
+case 226:
+#line 1081 "./parse.y"
 {
                  /* We have a statement. Generate a WFL around it so
                     we can debug it */
@@ -3334,14 +3329,6 @@ case 225:
                  yyval.node = JAVA_MAYBE_GENERATE_DEBUG_INFO (yyval.node);
                ;
     break;}
-case 226:
-#line 1084 "./parse.y"
-{
-                 if (ctxp->prevent_ese != lineno)
-                   yyerror ("Invalid expression statement");
-                 DRECOVER (expr_stmt);
-               ;
-    break;}
 case 227:
 #line 1090 "./parse.y"
 {
@@ -3360,104 +3347,120 @@ case 228:
     break;}
 case 229:
 #line 1102 "./parse.y"
-{yyerror ("')' expected"); RECOVER;;
+{
+                 if (ctxp->prevent_ese != lineno)
+                   yyerror ("Invalid expression statement");
+                 DRECOVER (expr_stmt);
+               ;
     break;}
 case 230:
-#line 1104 "./parse.y"
-{yyerror ("';' expected"); RECOVER;;
+#line 1108 "./parse.y"
+{yyerror ("')' expected"); RECOVER;;
     break;}
 case 231:
-#line 1106 "./parse.y"
-{yyerror ("')' expected"); RECOVER;;
+#line 1110 "./parse.y"
+{
+                 yyerror ("Constructor invocation must be first "
+                          "thing in a constructor"); 
+                 RECOVER;
+               ;
     break;}
 case 232:
-#line 1108 "./parse.y"
-{yyerror ("';' expected"); RECOVER;;
+#line 1116 "./parse.y"
+{yyerror ("')' expected"); RECOVER;;
     break;}
 case 233:
-#line 1110 "./parse.y"
-{yyerror ("'(' expected"); RECOVER;;
+#line 1118 "./parse.y"
+{
+                 yyerror ("Constructor invocation must be first "
+                          "thing in a constructor"); 
+                 RECOVER;
+               ;
     break;}
 case 234:
-#line 1112 "./parse.y"
-{yyerror ("')' expected"); RECOVER;;
+#line 1124 "./parse.y"
+{yyerror ("'(' expected"); RECOVER;;
     break;}
 case 235:
-#line 1114 "./parse.y"
+#line 1126 "./parse.y"
 {yyerror ("')' expected"); RECOVER;;
     break;}
 case 236:
-#line 1116 "./parse.y"
-{yyerror ("';' expected"); RECOVER;;
+#line 1128 "./parse.y"
+{yyerror ("')' expected"); RECOVER;;
     break;}
 case 237:
-#line 1118 "./parse.y"
+#line 1130 "./parse.y"
 {yyerror ("';' expected"); RECOVER;;
     break;}
-case 245:
-#line 1133 "./parse.y"
-{ yyval.node = build_if_else_statement (yyvsp[-3].operator.location, yyvsp[-2].node, yyvsp[0].node, NULL_TREE); ;
+case 238:
+#line 1132 "./parse.y"
+{yyerror ("';' expected"); RECOVER;;
     break;}
 case 246:
-#line 1135 "./parse.y"
-{yyerror ("'(' expected"); RECOVER;;
+#line 1147 "./parse.y"
+{ yyval.node = build_if_else_statement (yyvsp[-3].operator.location, yyvsp[-2].node, yyvsp[0].node, NULL_TREE); ;
     break;}
 case 247:
-#line 1137 "./parse.y"
-{yyerror ("Missing term"); RECOVER;;
+#line 1149 "./parse.y"
+{yyerror ("'(' expected"); RECOVER;;
     break;}
 case 248:
-#line 1139 "./parse.y"
-{yyerror ("')' expected"); RECOVER;;
+#line 1151 "./parse.y"
+{yyerror ("Missing term"); RECOVER;;
     break;}
 case 249:
-#line 1144 "./parse.y"
-{ yyval.node = build_if_else_statement (yyvsp[-5].operator.location, yyvsp[-4].node, yyvsp[-2].node, yyvsp[0].node); ;
+#line 1153 "./parse.y"
+{yyerror ("')' expected"); RECOVER;;
     break;}
 case 250:
-#line 1149 "./parse.y"
+#line 1158 "./parse.y"
 { yyval.node = build_if_else_statement (yyvsp[-5].operator.location, yyvsp[-4].node, yyvsp[-2].node, yyvsp[0].node); ;
     break;}
 case 251:
-#line 1154 "./parse.y"
+#line 1163 "./parse.y"
+{ yyval.node = build_if_else_statement (yyvsp[-5].operator.location, yyvsp[-4].node, yyvsp[-2].node, yyvsp[0].node); ;
+    break;}
+case 252:
+#line 1168 "./parse.y"
 { 
                  TREE_OPERAND (yyvsp[-1].node, 1) = yyvsp[0].node;
                  yyval.node = build_debugable_stmt (EXPR_WFL_LINECOL (yyvsp[-1].node), yyvsp[-1].node);
                ;
     break;}
-case 252:
-#line 1162 "./parse.y"
+case 253:
+#line 1176 "./parse.y"
 { 
                  yyval.node = build (SWITCH_EXPR, NULL_TREE, yyvsp[-1].node, NULL_TREE);
                  EXPR_WFL_LINECOL (yyval.node) = yyvsp[-2].operator.location;
                ;
     break;}
-case 253:
-#line 1167 "./parse.y"
+case 254:
+#line 1181 "./parse.y"
 {yyerror ("'(' expected"); RECOVER;;
     break;}
-case 254:
-#line 1169 "./parse.y"
+case 255:
+#line 1183 "./parse.y"
 {yyerror ("Missing term or ')'"); DRECOVER(switch_statement);;
     break;}
-case 255:
-#line 1171 "./parse.y"
+case 256:
+#line 1185 "./parse.y"
 {yyerror ("'{' expected"); RECOVER;;
     break;}
-case 256:
-#line 1176 "./parse.y"
+case 257:
+#line 1190 "./parse.y"
 { yyval.node = NULL_TREE; ;
     break;}
-case 257:
-#line 1178 "./parse.y"
+case 258:
+#line 1192 "./parse.y"
 { yyval.node = build_tree_list (yyvsp[-1].node, NULL_TREE); ;
     break;}
-case 258:
-#line 1180 "./parse.y"
+case 259:
+#line 1194 "./parse.y"
 { yyval.node = yyvsp[-1].node; ;
     break;}
-case 259:
-#line 1182 "./parse.y"
+case 260:
+#line 1196 "./parse.y"
 { 
                  /* Switch labels alone are empty switch statements */
                  tree sl = build_tree_list (yyvsp[-1].node, NULL_TREE);
@@ -3465,19 +3468,19 @@ case 259:
                  yyval.node = sl;
                ;
     break;}
-case 261:
-#line 1193 "./parse.y"
+case 262:
+#line 1207 "./parse.y"
 { 
                  TREE_CHAIN (yyvsp[0].node) = yyvsp[-1].node;
                  yyval.node = yyvsp[0].node;
                ;
     break;}
-case 262:
-#line 1201 "./parse.y"
+case 263:
+#line 1215 "./parse.y"
 { yyval.node = build_tree_list (yyvsp[-1].node, exit_block ()); ;
     break;}
-case 263:
-#line 1206 "./parse.y"
+case 264:
+#line 1220 "./parse.y"
 { 
                  /* All statements attached to this group of cases
                     will be stored in a block */
@@ -3485,83 +3488,83 @@ case 263:
                  yyval.node = yyvsp[0].node;
                ;
     break;}
-case 265:
-#line 1216 "./parse.y"
+case 266:
+#line 1230 "./parse.y"
 {
                  TREE_CHAIN (yyvsp[0].node) = yyvsp[-1].node;
                  yyval.node = yyvsp[0].node;
                ;
     break;}
-case 266:
-#line 1224 "./parse.y"
+case 267:
+#line 1238 "./parse.y"
 { 
                  yyval.node = build1 (CASE_EXPR, NULL_TREE, yyvsp[-1].node);
                  EXPR_WFL_LINECOL (yyval.node) = yyvsp[-2].operator.location;
                ;
     break;}
-case 267:
-#line 1229 "./parse.y"
+case 268:
+#line 1243 "./parse.y"
 { 
                  yyval.node = build1 (DEFAULT_EXPR, NULL_TREE, NULL_TREE);
                  EXPR_WFL_LINECOL (yyval.node) = yyvsp[-1].operator.location;
                ;
     break;}
-case 268:
-#line 1234 "./parse.y"
-{yyerror ("Missing or invalid constant expression"); RECOVER;;
-    break;}
 case 269:
-#line 1236 "./parse.y"
-{yyerror ("':' expected"); RECOVER;;
+#line 1248 "./parse.y"
+{yyerror ("Missing or invalid constant expression"); RECOVER;;
     break;}
 case 270:
-#line 1238 "./parse.y"
+#line 1250 "./parse.y"
 {yyerror ("':' expected"); RECOVER;;
     break;}
 case 271:
-#line 1243 "./parse.y"
+#line 1252 "./parse.y"
+{yyerror ("':' expected"); RECOVER;;
+    break;}
+case 272:
+#line 1257 "./parse.y"
 { 
                  tree body = build_loop_body (yyvsp[-2].operator.location, yyvsp[-1].node, 0);
                  yyval.node = build_new_loop (body);
                ;
     break;}
-case 272:
-#line 1251 "./parse.y"
+case 273:
+#line 1265 "./parse.y"
 { yyval.node = complete_loop_body (0, NULL_TREE, yyvsp[0].node, 0); ;
     break;}
-case 273:
-#line 1253 "./parse.y"
+case 274:
+#line 1267 "./parse.y"
 {YYERROR_NOW; yyerror ("'(' expected"); RECOVER;;
     break;}
-case 274:
-#line 1255 "./parse.y"
+case 275:
+#line 1269 "./parse.y"
 {yyerror ("Missing term and ')' expected"); RECOVER;;
     break;}
-case 275:
-#line 1257 "./parse.y"
+case 276:
+#line 1271 "./parse.y"
 {yyerror ("')' expected"); RECOVER;;
     break;}
-case 276:
-#line 1262 "./parse.y"
+case 277:
+#line 1276 "./parse.y"
 { yyval.node = complete_loop_body (0, NULL_TREE, yyvsp[0].node, 0); ;
     break;}
-case 277:
-#line 1267 "./parse.y"
+case 278:
+#line 1281 "./parse.y"
 { 
                  tree body = build_loop_body (0, NULL_TREE, 1);
                  yyval.node = build_new_loop (body);
                ;
     break;}
-case 278:
-#line 1276 "./parse.y"
+case 279:
+#line 1290 "./parse.y"
 { yyval.node = complete_loop_body (yyvsp[-3].operator.location, yyvsp[-2].node, yyvsp[-5].node, 1); ;
     break;}
-case 279:
-#line 1281 "./parse.y"
+case 280:
+#line 1295 "./parse.y"
 { yyval.node = complete_for_loop (EXPR_WFL_LINECOL (yyvsp[-4].node), yyvsp[-4].node, yyvsp[-2].node, yyvsp[0].node);;
     break;}
-case 280:
-#line 1283 "./parse.y"
+case 281:
+#line 1297 "./parse.y"
 { 
                  yyval.node = complete_for_loop (0, NULL_TREE, yyvsp[-2].node, yyvsp[0].node);
                  /* We have not condition, so we get rid of the EXIT_EXPR */
@@ -3569,24 +3572,24 @@ case 280:
                    size_zero_node;
                ;
     break;}
-case 281:
-#line 1290 "./parse.y"
-{yyerror ("Invalid control expression"); RECOVER;;
-    break;}
 case 282:
-#line 1292 "./parse.y"
-{yyerror ("Invalid update expression"); RECOVER;;
+#line 1304 "./parse.y"
+{yyerror ("Invalid control expression"); RECOVER;;
     break;}
 case 283:
-#line 1294 "./parse.y"
+#line 1306 "./parse.y"
 {yyerror ("Invalid update expression"); RECOVER;;
     break;}
 case 284:
-#line 1299 "./parse.y"
-{ yyval.node = complete_for_loop (EXPR_WFL_LINECOL (yyvsp[-4].node), yyvsp[-4].node, yyvsp[-2].node, yyvsp[0].node);;
+#line 1308 "./parse.y"
+{yyerror ("Invalid update expression"); RECOVER;;
     break;}
 case 285:
-#line 1301 "./parse.y"
+#line 1313 "./parse.y"
+{ yyval.node = complete_for_loop (EXPR_WFL_LINECOL (yyvsp[-4].node), yyvsp[-4].node, yyvsp[-2].node, yyvsp[0].node);;
+    break;}
+case 286:
+#line 1315 "./parse.y"
 { 
                  yyval.node = complete_for_loop (0, NULL_TREE, yyvsp[-2].node, yyvsp[0].node);
                  /* We have not condition, so we get rid of the EXIT_EXPR */
@@ -3594,24 +3597,24 @@ case 285:
                    size_zero_node;
                ;
     break;}
-case 286:
-#line 1311 "./parse.y"
+case 287:
+#line 1325 "./parse.y"
 { 
                  /* This scope defined for local variable that may be
                      defined within the scope of the for loop */
                  enter_block (); 
                ;
     break;}
-case 287:
-#line 1317 "./parse.y"
+case 288:
+#line 1331 "./parse.y"
 {yyerror ("'(' expected"); DRECOVER(for_1);;
     break;}
-case 288:
-#line 1319 "./parse.y"
+case 289:
+#line 1333 "./parse.y"
 {yyerror ("Invalid init statement"); RECOVER;;
     break;}
-case 289:
-#line 1324 "./parse.y"
+case 290:
+#line 1338 "./parse.y"
 { 
                  /* We now declare the loop body. The loop is
                      declared as a for loop. */
@@ -3623,177 +3626,177 @@ case 289:
                  java_method_add_stmt (current_function_decl, yyval.node);
                ;
     break;}
-case 290:
-#line 1336 "./parse.y"
+case 291:
+#line 1350 "./parse.y"
 { yyval.node = size_zero_node; ;
     break;}
-case 291:
-#line 1338 "./parse.y"
+case 292:
+#line 1352 "./parse.y"
 { 
                  /* Init statement recorded within the previously
                      defined block scope */
                  yyval.node = java_method_add_stmt (current_function_decl, yyvsp[0].node);
                ;
     break;}
-case 292:
-#line 1344 "./parse.y"
+case 293:
+#line 1358 "./parse.y"
 { 
                  /* Local variable are recorded within the previously
                     defined block scope */
                  yyval.node = NULL_TREE;
                ;
     break;}
-case 293:
-#line 1350 "./parse.y"
+case 294:
+#line 1364 "./parse.y"
 {yyerror ("';' expected"); DRECOVER(for_init_1);;
     break;}
-case 294:
-#line 1354 "./parse.y"
+case 295:
+#line 1368 "./parse.y"
 {yyval.node = size_zero_node;;
     break;}
-case 295:
-#line 1356 "./parse.y"
+case 296:
+#line 1370 "./parse.y"
 { yyval.node = build_debugable_stmt (BUILD_LOCATION (), yyvsp[0].node); ;
     break;}
-case 296:
-#line 1361 "./parse.y"
+case 297:
+#line 1375 "./parse.y"
 { yyval.node = add_stmt_to_compound (NULL_TREE, NULL_TREE, yyvsp[0].node); ;
     break;}
-case 297:
-#line 1363 "./parse.y"
+case 298:
+#line 1377 "./parse.y"
 { yyval.node = add_stmt_to_compound (yyvsp[-2].node, NULL_TREE, yyvsp[0].node); ;
     break;}
-case 298:
-#line 1365 "./parse.y"
+case 299:
+#line 1379 "./parse.y"
 {yyerror ("Missing term"); RECOVER;;
     break;}
-case 299:
-#line 1370 "./parse.y"
+case 300:
+#line 1384 "./parse.y"
 { yyval.node = build_bc_statement (yyvsp[-1].operator.location, 1, NULL_TREE); ;
     break;}
-case 300:
-#line 1372 "./parse.y"
+case 301:
+#line 1386 "./parse.y"
 { yyval.node = build_bc_statement (yyvsp[-2].operator.location, 1, yyvsp[-1].node); ;
     break;}
-case 301:
-#line 1374 "./parse.y"
+case 302:
+#line 1388 "./parse.y"
 {yyerror ("Missing term"); RECOVER;;
     break;}
-case 302:
-#line 1376 "./parse.y"
+case 303:
+#line 1390 "./parse.y"
 {yyerror ("';' expected"); RECOVER;;
     break;}
-case 303:
-#line 1381 "./parse.y"
+case 304:
+#line 1395 "./parse.y"
 { yyval.node = build_bc_statement (yyvsp[-1].operator.location, 0, NULL_TREE); ;
     break;}
-case 304:
-#line 1383 "./parse.y"
+case 305:
+#line 1397 "./parse.y"
 { yyval.node = build_bc_statement (yyvsp[-2].operator.location, 0, yyvsp[-1].node); ;
     break;}
-case 305:
-#line 1385 "./parse.y"
+case 306:
+#line 1399 "./parse.y"
 {yyerror ("Missing term"); RECOVER;;
     break;}
-case 306:
-#line 1387 "./parse.y"
+case 307:
+#line 1401 "./parse.y"
 {yyerror ("';' expected"); RECOVER;;
     break;}
-case 307:
-#line 1392 "./parse.y"
+case 308:
+#line 1406 "./parse.y"
 { yyval.node = build_return (yyvsp[-1].operator.location, NULL_TREE); ;
     break;}
-case 308:
-#line 1394 "./parse.y"
+case 309:
+#line 1408 "./parse.y"
 { yyval.node = build_return (yyvsp[-2].operator.location, yyvsp[-1].node); ;
     break;}
-case 309:
-#line 1396 "./parse.y"
+case 310:
+#line 1410 "./parse.y"
 {yyerror ("Missing term"); RECOVER;;
     break;}
-case 310:
-#line 1398 "./parse.y"
+case 311:
+#line 1412 "./parse.y"
 {yyerror ("';' expected"); RECOVER;;
     break;}
-case 311:
-#line 1403 "./parse.y"
+case 312:
+#line 1417 "./parse.y"
 { 
                  yyval.node = build1 (THROW_EXPR, NULL_TREE, yyvsp[-1].node);
                  EXPR_WFL_LINECOL (yyval.node) = yyvsp[-2].operator.location;
                ;
     break;}
-case 312:
-#line 1408 "./parse.y"
+case 313:
+#line 1422 "./parse.y"
 {yyerror ("Missing term"); RECOVER;;
     break;}
-case 313:
-#line 1410 "./parse.y"
+case 314:
+#line 1424 "./parse.y"
 {yyerror ("';' expected"); RECOVER;;
     break;}
-case 314:
-#line 1415 "./parse.y"
+case 315:
+#line 1429 "./parse.y"
 { 
                  yyval.node = build (SYNCHRONIZED_EXPR, NULL_TREE, yyvsp[-2].node, yyvsp[0].node);
                  EXPR_WFL_LINECOL (yyval.node) = 
                    EXPR_WFL_LINECOL (MODIFIER_WFL (SYNCHRONIZED_TK));
                ;
     break;}
-case 315:
-#line 1421 "./parse.y"
-{yyerror ("'{' expected"); RECOVER;;
-    break;}
 case 316:
-#line 1423 "./parse.y"
-{yyerror ("'(' expected"); RECOVER;;
+#line 1435 "./parse.y"
+{yyerror ("'{' expected"); RECOVER;;
     break;}
 case 317:
-#line 1425 "./parse.y"
-{yyerror ("Missing term"); RECOVER;;
+#line 1437 "./parse.y"
+{yyerror ("'(' expected"); RECOVER;;
     break;}
 case 318:
-#line 1427 "./parse.y"
+#line 1439 "./parse.y"
 {yyerror ("Missing term"); RECOVER;;
     break;}
 case 319:
-#line 1432 "./parse.y"
+#line 1441 "./parse.y"
+{yyerror ("Missing term"); RECOVER;;
+    break;}
+case 320:
+#line 1446 "./parse.y"
 {
                  if ((1 << yyvsp[0].value) != ACC_SYNCHRONIZED)
                    fatal ("synchronized was '%d' - yyparse", (1 << yyvsp[0].value));
                ;
     break;}
-case 320:
-#line 1440 "./parse.y"
+case 321:
+#line 1454 "./parse.y"
 { yyval.node = build_try_statement (yyvsp[-2].operator.location, yyvsp[-1].node, yyvsp[0].node, NULL_TREE); ;
     break;}
-case 321:
-#line 1442 "./parse.y"
+case 322:
+#line 1456 "./parse.y"
 { yyval.node = build_try_statement (yyvsp[-2].operator.location, yyvsp[-1].node, NULL_TREE, yyvsp[0].node); ;
     break;}
-case 322:
-#line 1444 "./parse.y"
+case 323:
+#line 1458 "./parse.y"
 { yyval.node = build_try_statement (yyvsp[-3].operator.location, yyvsp[-2].node, yyvsp[-1].node, yyvsp[0].node); ;
     break;}
-case 323:
-#line 1446 "./parse.y"
+case 324:
+#line 1460 "./parse.y"
 {yyerror ("'{' expected"); DRECOVER (try_statement);;
     break;}
-case 325:
-#line 1452 "./parse.y"
+case 326:
+#line 1466 "./parse.y"
 { 
                  TREE_CHAIN (yyvsp[0].node) = yyvsp[-1].node;
                  yyval.node = yyvsp[0].node;
                ;
     break;}
-case 326:
-#line 1460 "./parse.y"
+case 327:
+#line 1474 "./parse.y"
 { 
                  java_method_add_stmt (current_function_decl, yyvsp[0].node);
                  exit_block ();
                  yyval.node = yyvsp[-1].node;
                ;
     break;}
-case 327:
-#line 1468 "./parse.y"
+case 328:
+#line 1482 "./parse.y"
 { 
                  /* We add a block to define a scope for
                     formal_parameter (CCBP). The formal parameter is
@@ -3810,362 +3813,366 @@ case 327:
                  EXPR_WFL_LINECOL (yyval.node) = yyvsp[-3].operator.location;
                ;
     break;}
-case 328:
-#line 1484 "./parse.y"
+case 329:
+#line 1498 "./parse.y"
 {yyerror ("'(' expected"); RECOVER;;
     break;}
-case 329:
-#line 1486 "./parse.y"
+case 330:
+#line 1500 "./parse.y"
 {yyerror ("Missing term or ')' expected"); DRECOVER (2);;
     break;}
-case 330:
-#line 1488 "./parse.y"
+case 331:
+#line 1502 "./parse.y"
 {yyerror ("')' expected"); DRECOVER (1);;
     break;}
-case 331:
-#line 1493 "./parse.y"
+case 332:
+#line 1507 "./parse.y"
 { 
                  yyval.node = build (FINALLY_EXPR, NULL_TREE,
                              create_label_decl (generate_name ()), yyvsp[0].node);
                ;
     break;}
-case 332:
-#line 1498 "./parse.y"
+case 333:
+#line 1512 "./parse.y"
 {yyerror ("'{' expected"); RECOVER; ;
     break;}
-case 336:
-#line 1510 "./parse.y"
+case 337:
+#line 1524 "./parse.y"
 { yyval.node = build_this (yyvsp[0].operator.location); ;
     break;}
-case 337:
-#line 1512 "./parse.y"
+case 338:
+#line 1526 "./parse.y"
 {yyval.node = yyvsp[-1].node;;
     break;}
-case 342:
-#line 1521 "./parse.y"
-{ yyval.node = parse_jdk1_1_error ("class literals"); ;
-    break;}
 case 343:
-#line 1523 "./parse.y"
+#line 1535 "./parse.y"
 { yyval.node = parse_jdk1_1_error ("class literals"); ;
     break;}
 case 344:
-#line 1525 "./parse.y"
+#line 1537 "./parse.y"
 { yyval.node = parse_jdk1_1_error ("class literals"); ;
     break;}
 case 345:
-#line 1530 "./parse.y"
+#line 1539 "./parse.y"
 { yyval.node = parse_jdk1_1_error ("class literals"); ;
     break;}
 case 346:
-#line 1532 "./parse.y"
-{yyerror ("')' expected"); RECOVER;;
+#line 1544 "./parse.y"
+{ yyval.node = parse_jdk1_1_error ("class literals"); ;
     break;}
 case 347:
-#line 1534 "./parse.y"
-{yyerror ("'class' or 'this' expected" ); RECOVER;;
+#line 1546 "./parse.y"
+{yyerror ("')' expected"); RECOVER;;
     break;}
 case 348:
-#line 1536 "./parse.y"
-{yyerror ("'class' expected" ); RECOVER;;
+#line 1548 "./parse.y"
+{yyerror ("'class' or 'this' expected" ); RECOVER;;
     break;}
 case 349:
-#line 1538 "./parse.y"
+#line 1550 "./parse.y"
 {yyerror ("'class' expected" ); RECOVER;;
     break;}
 case 350:
-#line 1543 "./parse.y"
-{ yyval.node = build_new_invocation (yyvsp[-3].node, yyvsp[-1].node); ;
+#line 1552 "./parse.y"
+{yyerror ("'class' expected" ); RECOVER;;
     break;}
 case 351:
-#line 1545 "./parse.y"
-{ yyval.node = build_new_invocation (yyvsp[-2].node, NULL_TREE); ;
+#line 1557 "./parse.y"
+{ yyval.node = build_new_invocation (yyvsp[-3].node, yyvsp[-1].node); ;
     break;}
 case 352:
-#line 1550 "./parse.y"
-{ yyval.node = parse_jdk1_1_error ("inner class instance creation"); ;
+#line 1559 "./parse.y"
+{ yyval.node = build_new_invocation (yyvsp[-2].node, NULL_TREE); ;
     break;}
 case 353:
-#line 1552 "./parse.y"
+#line 1564 "./parse.y"
 { yyval.node = parse_jdk1_1_error ("inner class instance creation"); ;
     break;}
-case 358:
-#line 1561 "./parse.y"
-{yyerror ("'(' expected"); DRECOVER(new_1);;
+case 354:
+#line 1566 "./parse.y"
+{ yyval.node = parse_jdk1_1_error ("inner class instance creation"); ;
     break;}
 case 359:
-#line 1563 "./parse.y"
-{yyerror ("'(' expected"); RECOVER;;
+#line 1575 "./parse.y"
+{yyerror ("'(' expected"); DRECOVER(new_1);;
     break;}
 case 360:
-#line 1565 "./parse.y"
-{yyerror ("')' or term expected"); RECOVER;;
+#line 1577 "./parse.y"
+{yyerror ("'(' expected"); RECOVER;;
     break;}
 case 361:
-#line 1567 "./parse.y"
-{yyerror ("')' expected"); RECOVER;;
+#line 1579 "./parse.y"
+{yyerror ("')' or term expected"); RECOVER;;
     break;}
 case 362:
-#line 1569 "./parse.y"
-{YYERROR_NOW; yyerror ("Identifier expected"); RECOVER;;
+#line 1581 "./parse.y"
+{yyerror ("')' expected"); RECOVER;;
     break;}
 case 363:
-#line 1571 "./parse.y"
+#line 1583 "./parse.y"
+{YYERROR_NOW; yyerror ("Identifier expected"); RECOVER;;
+    break;}
+case 364:
+#line 1585 "./parse.y"
 {yyerror ("'(' expected"); RECOVER;;
     break;}
-case 366:
-#line 1581 "./parse.y"
+case 367:
+#line 1595 "./parse.y"
 { 
                  yyval.node = tree_cons (NULL_TREE, yyvsp[0].node, NULL_TREE);
                  ctxp->formal_parameter_number = 1; 
                ;
     break;}
-case 367:
-#line 1586 "./parse.y"
+case 368:
+#line 1600 "./parse.y"
 {
                  ctxp->formal_parameter_number += 1;
                  yyval.node = tree_cons (NULL_TREE, yyvsp[0].node, yyvsp[-2].node);
                ;
     break;}
-case 368:
-#line 1591 "./parse.y"
-{yyerror ("Missing term"); RECOVER;;
-    break;}
 case 369:
-#line 1596 "./parse.y"
-{ yyval.node = build_newarray_node (yyvsp[-1].node, yyvsp[0].node, 0); ;
+#line 1605 "./parse.y"
+{yyerror ("Missing term"); RECOVER;;
     break;}
 case 370:
-#line 1598 "./parse.y"
+#line 1610 "./parse.y"
 { yyval.node = build_newarray_node (yyvsp[-1].node, yyvsp[0].node, 0); ;
     break;}
 case 371:
-#line 1600 "./parse.y"
-{ yyval.node = build_newarray_node (yyvsp[-2].node, yyvsp[-1].node, ctxp->osb_number); ;
+#line 1612 "./parse.y"
+{ yyval.node = build_newarray_node (yyvsp[-1].node, yyvsp[0].node, 0); ;
     break;}
 case 372:
-#line 1602 "./parse.y"
+#line 1614 "./parse.y"
 { yyval.node = build_newarray_node (yyvsp[-2].node, yyvsp[-1].node, ctxp->osb_number); ;
     break;}
 case 373:
-#line 1606 "./parse.y"
-{ yyval.node = parse_jdk1_1_error ("anonymous array"); ;
+#line 1616 "./parse.y"
+{ yyval.node = build_newarray_node (yyvsp[-2].node, yyvsp[-1].node, ctxp->osb_number); ;
     break;}
 case 374:
-#line 1608 "./parse.y"
+#line 1620 "./parse.y"
 { yyval.node = parse_jdk1_1_error ("anonymous array"); ;
     break;}
 case 375:
-#line 1610 "./parse.y"
-{yyerror ("'[' expected"); DRECOVER ("]");;
+#line 1622 "./parse.y"
+{ yyval.node = parse_jdk1_1_error ("anonymous array"); ;
     break;}
 case 376:
-#line 1612 "./parse.y"
-{yyerror ("']' expected"); RECOVER;;
+#line 1624 "./parse.y"
+{yyerror ("'[' expected"); DRECOVER ("]");;
     break;}
 case 377:
-#line 1617 "./parse.y"
-{ yyval.node = build_tree_list (NULL_TREE, yyvsp[0].node); ;
+#line 1626 "./parse.y"
+{yyerror ("']' expected"); RECOVER;;
     break;}
 case 378:
-#line 1619 "./parse.y"
-{ yyval.node = tree_cons (NULL_TREE, yyvsp[0].node, yyval.node); ;
+#line 1631 "./parse.y"
+{ yyval.node = build_tree_list (NULL_TREE, yyvsp[0].node); ;
     break;}
 case 379:
-#line 1624 "./parse.y"
+#line 1633 "./parse.y"
+{ yyval.node = tree_cons (NULL_TREE, yyvsp[0].node, yyval.node); ;
+    break;}
+case 380:
+#line 1638 "./parse.y"
 { 
                  EXPR_WFL_LINECOL (yyvsp[-1].node) = yyvsp[-2].operator.location;
                  yyval.node = yyvsp[-1].node;
                ;
     break;}
-case 380:
-#line 1629 "./parse.y"
+case 381:
+#line 1643 "./parse.y"
 {yyerror ("']' expected"); RECOVER;;
     break;}
-case 381:
-#line 1631 "./parse.y"
+case 382:
+#line 1645 "./parse.y"
 {
                  yyerror ("Missing term");
                  yyerror ("']' expected");
                  RECOVER;
                ;
     break;}
-case 382:
-#line 1640 "./parse.y"
+case 383:
+#line 1654 "./parse.y"
 { ctxp->osb_number = 1; ;
     break;}
-case 383:
-#line 1642 "./parse.y"
+case 384:
+#line 1656 "./parse.y"
 { ctxp->osb_number++; ;
     break;}
-case 384:
-#line 1644 "./parse.y"
+case 385:
+#line 1658 "./parse.y"
 { yyerror ("']' expected"); RECOVER;;
     break;}
-case 385:
-#line 1649 "./parse.y"
+case 386:
+#line 1663 "./parse.y"
 { yyval.node = make_qualified_primary (yyvsp[-2].node, yyvsp[0].node, yyvsp[-1].operator.location); ;
     break;}
-case 386:
-#line 1651 "./parse.y"
+case 387:
+#line 1665 "./parse.y"
 {
                  tree super_wfl = 
                    build_wfl_node (super_identifier_node, 
                                    input_filename, 0, 0);
                  EXPR_WFL_LINECOL (super_wfl) = yyvsp[-2].operator.location;
-                 yyval.node = make_qualified_name (super_wfl, yyvsp[0].node, yyvsp[-1].operator.location);
-               ;
-    break;}
-case 387:
-#line 1659 "./parse.y"
-{yyerror ("Field expected"); DRECOVER (super_field_acces);;
+                 yyval.node = make_qualified_name (super_wfl, yyvsp[0].node, yyvsp[-1].operator.location);
+               ;
     break;}
 case 388:
-#line 1664 "./parse.y"
-{ yyval.node = build_method_invocation (yyvsp[-2].node, NULL_TREE); ;
+#line 1673 "./parse.y"
+{yyerror ("Field expected"); DRECOVER (super_field_acces);;
     break;}
 case 389:
-#line 1666 "./parse.y"
-{ yyval.node = build_method_invocation (yyvsp[-3].node, yyvsp[-1].node); ;
+#line 1678 "./parse.y"
+{ yyval.node = build_method_invocation (yyvsp[-2].node, NULL_TREE); ;
     break;}
 case 390:
-#line 1668 "./parse.y"
-{ 
-                 tree invok = build_method_invocation (yyvsp[-2].node, NULL_TREE);
-                 yyval.node = make_qualified_primary (yyvsp[-4].node, invok, yyvsp[-3].operator.location);
-               ;
+#line 1680 "./parse.y"
+{ yyval.node = build_method_invocation (yyvsp[-3].node, yyvsp[-1].node); ;
     break;}
 case 391:
-#line 1673 "./parse.y"
+#line 1682 "./parse.y"
 { 
-                 tree invok = build_method_invocation (yyvsp[-3].node, yyvsp[-1].node);
-                 yyval.node = make_qualified_primary (yyvsp[-5].node, invok, yyvsp[-4].operator.location);
+                 if (TREE_CODE (yyvsp[-4].node) == THIS_EXPR)
+                   yyval.node = build_this_super_qualified_invocation 
+                     (1, yyvsp[-2].node, NULL_TREE, 0, yyvsp[-3].operator.location);
+                 else
+                   {
+                     tree invok = build_method_invocation (yyvsp[-2].node, NULL_TREE);
+                     yyval.node = make_qualified_primary (yyvsp[-4].node, invok, yyvsp[-3].operator.location);
+                   }
                ;
     break;}
 case 392:
-#line 1678 "./parse.y"
-{
-                 tree invok;
-                 tree wfl = build_wfl_node (super_identifier_node, 
-                                            input_filename, 0, 0);
-                 EXPR_WFL_LINECOL (wfl) = yyvsp[-4].operator.location;
-                 invok = build_method_invocation (yyvsp[-2].node, NULL_TREE);
-                 yyval.node = make_qualified_primary (wfl, invok, yyvsp[-3].operator.location);
+#line 1693 "./parse.y"
+{ 
+                 if (TREE_CODE (yyvsp[-5].node) == THIS_EXPR)
+                   yyval.node = build_this_super_qualified_invocation 
+                     (1, yyvsp[-3].node, yyvsp[-1].node, 0, yyvsp[-4].operator.location);
+                 else
+                   {
+                     tree invok = build_method_invocation (yyvsp[-3].node, yyvsp[-1].node);
+                     yyval.node = make_qualified_primary (yyvsp[-5].node, invok, yyvsp[-4].operator.location);
+                   }
                ;
     break;}
 case 393:
-#line 1687 "./parse.y"
-{
-                 tree invok;
-                 tree wfl = build_wfl_node (super_identifier_node, 
-                                            input_filename, 0, 0);
-                 EXPR_WFL_LINECOL (wfl) = yyvsp[-5].operator.location;
-                 invok = build_method_invocation (yyvsp[-3].node, yyvsp[-1].node);
-                 yyval.node = make_qualified_primary (wfl, invok, yyvsp[-4].operator.location);
+#line 1704 "./parse.y"
+{ 
+                 yyval.node = build_this_super_qualified_invocation 
+                   (0, yyvsp[-2].node, NULL_TREE, yyvsp[-4].operator.location, yyvsp[-3].operator.location);
                ;
     break;}
 case 394:
-#line 1700 "./parse.y"
-{ yyerror ("'(' expected"); DRECOVER (method_invocation); ;
+#line 1709 "./parse.y"
+{
+                 yyval.node = build_this_super_qualified_invocation 
+                   (0, yyvsp[-3].node, yyvsp[-1].node, yyvsp[-5].operator.location, yyvsp[-4].operator.location);
+               ;
     break;}
 case 395:
-#line 1702 "./parse.y"
+#line 1718 "./parse.y"
 { yyerror ("'(' expected"); DRECOVER (method_invocation); ;
     break;}
 case 396:
-#line 1707 "./parse.y"
-{ yyval.node = build_array_ref (yyvsp[-2].operator.location, yyvsp[-3].node, yyvsp[-1].node); ;
+#line 1720 "./parse.y"
+{ yyerror ("'(' expected"); DRECOVER (method_invocation); ;
     break;}
 case 397:
-#line 1709 "./parse.y"
+#line 1725 "./parse.y"
 { yyval.node = build_array_ref (yyvsp[-2].operator.location, yyvsp[-3].node, yyvsp[-1].node); ;
     break;}
 case 398:
-#line 1711 "./parse.y"
+#line 1727 "./parse.y"
+{ yyval.node = build_array_ref (yyvsp[-2].operator.location, yyvsp[-3].node, yyvsp[-1].node); ;
+    break;}
+case 399:
+#line 1729 "./parse.y"
 {
                  yyerror ("Missing term and ']' expected");
                  DRECOVER(array_access);
                ;
     break;}
-case 399:
-#line 1716 "./parse.y"
+case 400:
+#line 1734 "./parse.y"
 {
                  yyerror ("']' expected");
                  DRECOVER(array_access);
                ;
     break;}
-case 400:
-#line 1721 "./parse.y"
+case 401:
+#line 1739 "./parse.y"
 {
                  yyerror ("Missing term and ']' expected");
                  DRECOVER(array_access);
                ;
     break;}
-case 401:
-#line 1726 "./parse.y"
+case 402:
+#line 1744 "./parse.y"
 {
                  yyerror ("']' expected");
                  DRECOVER(array_access);
                ;
     break;}
-case 406:
-#line 1741 "./parse.y"
-{ yyval.node = build_incdec (yyvsp[0].operator.token, yyvsp[0].operator.location, yyvsp[-1].node, 1); ;
-    break;}
 case 407:
-#line 1746 "./parse.y"
+#line 1759 "./parse.y"
 { yyval.node = build_incdec (yyvsp[0].operator.token, yyvsp[0].operator.location, yyvsp[-1].node, 1); ;
     break;}
-case 410:
-#line 1753 "./parse.y"
-{yyval.node = build_unaryop (yyvsp[-1].operator.token, yyvsp[-1].operator.location, yyvsp[0].node); ;
+case 408:
+#line 1764 "./parse.y"
+{ yyval.node = build_incdec (yyvsp[0].operator.token, yyvsp[0].operator.location, yyvsp[-1].node, 1); ;
     break;}
 case 411:
-#line 1755 "./parse.y"
+#line 1771 "./parse.y"
 {yyval.node = build_unaryop (yyvsp[-1].operator.token, yyvsp[-1].operator.location, yyvsp[0].node); ;
     break;}
-case 413:
-#line 1758 "./parse.y"
-{yyerror ("Missing term"); RECOVER;
+case 412:
+#line 1773 "./parse.y"
+{yyval.node = build_unaryop (yyvsp[-1].operator.token, yyvsp[-1].operator.location, yyvsp[0].node); ;
     break;}
 case 414:
-#line 1760 "./parse.y"
+#line 1776 "./parse.y"
 {yyerror ("Missing term"); RECOVER;
     break;}
 case 415:
-#line 1765 "./parse.y"
-{yyval.node = build_incdec (yyvsp[-1].operator.token, yyvsp[-1].operator.location, yyvsp[0].node, 0); ;
+#line 1778 "./parse.y"
+{yyerror ("Missing term"); RECOVER;
     break;}
 case 416:
-#line 1767 "./parse.y"
-{yyerror ("Missing term"); RECOVER;
+#line 1783 "./parse.y"
+{yyval.node = build_incdec (yyvsp[-1].operator.token, yyvsp[-1].operator.location, yyvsp[0].node, 0); ;
     break;}
 case 417:
-#line 1772 "./parse.y"
-{yyval.node = build_incdec (yyvsp[-1].operator.token, yyvsp[-1].operator.location, yyvsp[0].node, 0); ;
+#line 1785 "./parse.y"
+{yyerror ("Missing term"); RECOVER;
     break;}
 case 418:
-#line 1774 "./parse.y"
-{yyerror ("Missing term"); RECOVER;
+#line 1790 "./parse.y"
+{yyval.node = build_incdec (yyvsp[-1].operator.token, yyvsp[-1].operator.location, yyvsp[0].node, 0); ;
     break;}
-case 420:
-#line 1780 "./parse.y"
-{yyval.node = build_unaryop (yyvsp[-1].operator.token, yyvsp[-1].operator.location, yyvsp[0].node); ;
+case 419:
+#line 1792 "./parse.y"
+{yyerror ("Missing term"); RECOVER;
     break;}
 case 421:
-#line 1782 "./parse.y"
+#line 1798 "./parse.y"
 {yyval.node = build_unaryop (yyvsp[-1].operator.token, yyvsp[-1].operator.location, yyvsp[0].node); ;
     break;}
-case 423:
-#line 1785 "./parse.y"
-{yyerror ("Missing term"); RECOVER;
+case 422:
+#line 1800 "./parse.y"
+{yyval.node = build_unaryop (yyvsp[-1].operator.token, yyvsp[-1].operator.location, yyvsp[0].node); ;
     break;}
 case 424:
-#line 1787 "./parse.y"
+#line 1803 "./parse.y"
 {yyerror ("Missing term"); RECOVER;
     break;}
 case 425:
-#line 1792 "./parse.y"
+#line 1805 "./parse.y"
+{yyerror ("Missing term"); RECOVER;
+    break;}
+case 426:
+#line 1810 "./parse.y"
 { 
                  tree type = yyvsp[-3].node;
                  while (ctxp->osb_number--)
@@ -4173,16 +4180,16 @@ case 425:
                  yyval.node = build_cast (yyvsp[-4].operator.location, type, yyvsp[0].node); 
                ;
     break;}
-case 426:
-#line 1799 "./parse.y"
-{ yyval.node = build_cast (yyvsp[-3].operator.location, yyvsp[-2].node, yyvsp[0].node); ;
-    break;}
 case 427:
-#line 1801 "./parse.y"
+#line 1817 "./parse.y"
 { yyval.node = build_cast (yyvsp[-3].operator.location, yyvsp[-2].node, yyvsp[0].node); ;
     break;}
 case 428:
-#line 1803 "./parse.y"
+#line 1819 "./parse.y"
+{ yyval.node = build_cast (yyvsp[-3].operator.location, yyvsp[-2].node, yyvsp[0].node); ;
+    break;}
+case 429:
+#line 1821 "./parse.y"
 { 
                  char *ptr;
                  while (ctxp->osb_number--)
@@ -4195,265 +4202,272 @@ case 428:
                  yyval.node = build_cast (yyvsp[-4].operator.location, yyvsp[-3].node, yyvsp[0].node);
                ;
     break;}
-case 429:
-#line 1815 "./parse.y"
+case 430:
+#line 1833 "./parse.y"
 {yyerror ("']' expected, invalid type expression");;
     break;}
-case 430:
-#line 1817 "./parse.y"
+case 431:
+#line 1835 "./parse.y"
 {
                  if (ctxp->prevent_ese != lineno)
                    yyerror ("Invalid type expression"); RECOVER;
                  RECOVER;
                ;
     break;}
-case 431:
-#line 1823 "./parse.y"
-{yyerror ("Missing term"); RECOVER;;
-    break;}
 case 432:
-#line 1825 "./parse.y"
+#line 1841 "./parse.y"
 {yyerror ("Missing term"); RECOVER;;
     break;}
 case 433:
-#line 1827 "./parse.y"
+#line 1843 "./parse.y"
 {yyerror ("Missing term"); RECOVER;;
     break;}
-case 435:
-#line 1833 "./parse.y"
+case 434:
+#line 1845 "./parse.y"
+{yyerror ("Missing term"); RECOVER;;
+    break;}
+case 436:
+#line 1851 "./parse.y"
 { 
                  yyval.node = build_binop (BINOP_LOOKUP (yyvsp[-1].operator.token), 
                                    yyvsp[-1].operator.location, yyvsp[-2].node, yyvsp[0].node);
                ;
     break;}
-case 436:
-#line 1838 "./parse.y"
+case 437:
+#line 1856 "./parse.y"
 {
                  yyval.node = build_binop (BINOP_LOOKUP (yyvsp[-1].operator.token), yyvsp[-1].operator.location,
                                    yyvsp[-2].node, yyvsp[0].node); 
                ;
     break;}
-case 437:
-#line 1843 "./parse.y"
+case 438:
+#line 1861 "./parse.y"
 {
                  yyval.node = build_binop (BINOP_LOOKUP (yyvsp[-1].operator.token), yyvsp[-1].operator.location,
                                    yyvsp[-2].node, yyvsp[0].node); 
                ;
     break;}
-case 438:
-#line 1848 "./parse.y"
-{yyerror ("Missing term"); RECOVER;;
-    break;}
 case 439:
-#line 1850 "./parse.y"
+#line 1866 "./parse.y"
 {yyerror ("Missing term"); RECOVER;;
     break;}
 case 440:
-#line 1852 "./parse.y"
+#line 1868 "./parse.y"
+{yyerror ("Missing term"); RECOVER;;
+    break;}
+case 441:
+#line 1870 "./parse.y"
 {yyerror ("Missing term"); RECOVER;;
     break;}
-case 442:
-#line 1858 "./parse.y"
+case 443:
+#line 1876 "./parse.y"
 {
                  yyval.node = build_binop (BINOP_LOOKUP (yyvsp[-1].operator.token), yyvsp[-1].operator.location,
                                    yyvsp[-2].node, yyvsp[0].node); 
                ;
     break;}
-case 443:
-#line 1863 "./parse.y"
+case 444:
+#line 1881 "./parse.y"
 {
                  yyval.node = build_binop (BINOP_LOOKUP (yyvsp[-1].operator.token), yyvsp[-1].operator.location,
                                    yyvsp[-2].node, yyvsp[0].node); 
                ;
     break;}
-case 444:
-#line 1868 "./parse.y"
+case 445:
+#line 1886 "./parse.y"
 {yyerror ("Missing term"); RECOVER;;
     break;}
-case 445:
-#line 1870 "./parse.y"
+case 446:
+#line 1888 "./parse.y"
 {yyerror ("Missing term"); RECOVER;;
     break;}
-case 447:
-#line 1876 "./parse.y"
+case 448:
+#line 1894 "./parse.y"
 {
                  yyval.node = build_binop (BINOP_LOOKUP (yyvsp[-1].operator.token), yyvsp[-1].operator.location,
                                    yyvsp[-2].node, yyvsp[0].node); 
                ;
     break;}
-case 448:
-#line 1881 "./parse.y"
+case 449:
+#line 1899 "./parse.y"
 {
                  yyval.node = build_binop (BINOP_LOOKUP (yyvsp[-1].operator.token), yyvsp[-1].operator.location,
                                    yyvsp[-2].node, yyvsp[0].node); 
                ;
     break;}
-case 449:
-#line 1886 "./parse.y"
+case 450:
+#line 1904 "./parse.y"
 {
                  yyval.node = build_binop (BINOP_LOOKUP (yyvsp[-1].operator.token), yyvsp[-1].operator.location,
                                    yyvsp[-2].node, yyvsp[0].node); 
                ;
     break;}
-case 450:
-#line 1891 "./parse.y"
-{yyerror ("Missing term"); RECOVER;;
-    break;}
 case 451:
-#line 1893 "./parse.y"
+#line 1909 "./parse.y"
 {yyerror ("Missing term"); RECOVER;;
     break;}
 case 452:
-#line 1895 "./parse.y"
+#line 1911 "./parse.y"
 {yyerror ("Missing term"); RECOVER;;
     break;}
-case 454:
-#line 1901 "./parse.y"
-{
-                 yyval.node = build_binop (BINOP_LOOKUP (yyvsp[-1].operator.token), yyvsp[-1].operator.location,
-                                   yyvsp[-2].node, yyvsp[0].node); 
-               ;
+case 453:
+#line 1913 "./parse.y"
+{yyerror ("Missing term"); RECOVER;;
     break;}
 case 455:
-#line 1906 "./parse.y"
+#line 1919 "./parse.y"
 {
                  yyval.node = build_binop (BINOP_LOOKUP (yyvsp[-1].operator.token), yyvsp[-1].operator.location,
                                    yyvsp[-2].node, yyvsp[0].node); 
                ;
     break;}
 case 456:
-#line 1911 "./parse.y"
+#line 1924 "./parse.y"
 {
                  yyval.node = build_binop (BINOP_LOOKUP (yyvsp[-1].operator.token), yyvsp[-1].operator.location,
                                    yyvsp[-2].node, yyvsp[0].node); 
                ;
     break;}
 case 457:
-#line 1916 "./parse.y"
+#line 1929 "./parse.y"
 {
                  yyval.node = build_binop (BINOP_LOOKUP (yyvsp[-1].operator.token), yyvsp[-1].operator.location,
                                    yyvsp[-2].node, yyvsp[0].node); 
                ;
     break;}
-case 459:
-#line 1922 "./parse.y"
-{yyerror ("Missing term"); RECOVER;;
+case 458:
+#line 1934 "./parse.y"
+{
+                 yyval.node = build_binop (BINOP_LOOKUP (yyvsp[-1].operator.token), yyvsp[-1].operator.location,
+                                   yyvsp[-2].node, yyvsp[0].node); 
+               ;
     break;}
 case 460:
-#line 1924 "./parse.y"
+#line 1940 "./parse.y"
 {yyerror ("Missing term"); RECOVER;;
     break;}
 case 461:
-#line 1926 "./parse.y"
+#line 1942 "./parse.y"
 {yyerror ("Missing term"); RECOVER;;
     break;}
 case 462:
-#line 1928 "./parse.y"
+#line 1944 "./parse.y"
 {yyerror ("Missing term"); RECOVER;;
     break;}
 case 463:
-#line 1930 "./parse.y"
+#line 1946 "./parse.y"
+{yyerror ("Missing term"); RECOVER;;
+    break;}
+case 464:
+#line 1948 "./parse.y"
 {yyerror ("Invalid reference type"); RECOVER;;
     break;}
-case 465:
-#line 1936 "./parse.y"
+case 466:
+#line 1954 "./parse.y"
 {
                  yyval.node = build_binop (BINOP_LOOKUP (yyvsp[-1].operator.token), yyvsp[-1].operator.location,
                                    yyvsp[-2].node, yyvsp[0].node); 
                ;
     break;}
-case 466:
-#line 1941 "./parse.y"
+case 467:
+#line 1959 "./parse.y"
 {
                  yyval.node = build_binop (BINOP_LOOKUP (yyvsp[-1].operator.token), yyvsp[-1].operator.location,
                                    yyvsp[-2].node, yyvsp[0].node); 
                ;
     break;}
-case 467:
-#line 1946 "./parse.y"
+case 468:
+#line 1964 "./parse.y"
 {yyerror ("Missing term"); RECOVER;;
     break;}
-case 468:
-#line 1948 "./parse.y"
+case 469:
+#line 1966 "./parse.y"
 {yyerror ("Missing term"); RECOVER;;
     break;}
-case 470:
-#line 1954 "./parse.y"
+case 471:
+#line 1972 "./parse.y"
 {
                  yyval.node = build_binop (BINOP_LOOKUP (yyvsp[-1].operator.token), yyvsp[-1].operator.location,
                                    yyvsp[-2].node, yyvsp[0].node); 
                ;
     break;}
-case 471:
-#line 1959 "./parse.y"
+case 472:
+#line 1977 "./parse.y"
 {yyerror ("Missing term"); RECOVER;;
     break;}
-case 473:
-#line 1965 "./parse.y"
+case 474:
+#line 1983 "./parse.y"
 {
                  yyval.node = build_binop (BINOP_LOOKUP (yyvsp[-1].operator.token), yyvsp[-1].operator.location,
                                    yyvsp[-2].node, yyvsp[0].node); 
                ;
     break;}
-case 474:
-#line 1970 "./parse.y"
+case 475:
+#line 1988 "./parse.y"
 {yyerror ("Missing term"); RECOVER;;
     break;}
-case 476:
-#line 1976 "./parse.y"
+case 477:
+#line 1994 "./parse.y"
 {
                  yyval.node = build_binop (BINOP_LOOKUP (yyvsp[-1].operator.token), yyvsp[-1].operator.location,
                                    yyvsp[-2].node, yyvsp[0].node); 
                ;
     break;}
-case 477:
-#line 1981 "./parse.y"
+case 478:
+#line 1999 "./parse.y"
 {yyerror ("Missing term"); RECOVER;;
     break;}
-case 479:
-#line 1987 "./parse.y"
+case 480:
+#line 2005 "./parse.y"
 {
                  yyval.node = build_binop (BINOP_LOOKUP (yyvsp[-1].operator.token), yyvsp[-1].operator.location,
                                    yyvsp[-2].node, yyvsp[0].node); 
                ;
     break;}
-case 480:
-#line 1992 "./parse.y"
+case 481:
+#line 2010 "./parse.y"
 {yyerror ("Missing term"); RECOVER;;
     break;}
-case 482:
-#line 1998 "./parse.y"
+case 483:
+#line 2016 "./parse.y"
 {
                  yyval.node = build_binop (BINOP_LOOKUP (yyvsp[-1].operator.token), yyvsp[-1].operator.location,
                                    yyvsp[-2].node, yyvsp[0].node); 
                ;
     break;}
-case 483:
-#line 2003 "./parse.y"
+case 484:
+#line 2021 "./parse.y"
 {yyerror ("Missing term"); RECOVER;;
     break;}
 case 486:
-#line 2010 "./parse.y"
+#line 2027 "./parse.y"
+{
+                 yyval.node = build (CONDITIONAL_EXPR, NULL_TREE, yyvsp[-4].node, yyvsp[-2].node, yyvsp[0].node);
+                 EXPR_WFL_LINECOL (yyval.node) = yyvsp[-3].operator.location;
+               ;
+    break;}
+case 487:
+#line 2032 "./parse.y"
 {
                  YYERROR_NOW;
                  yyerror ("Missing term");
                  DRECOVER (1);
                ;
     break;}
-case 487:
-#line 2016 "./parse.y"
+case 488:
+#line 2038 "./parse.y"
 {yyerror ("Missing term"); DRECOVER (2);;
     break;}
-case 488:
-#line 2018 "./parse.y"
+case 489:
+#line 2040 "./parse.y"
 {yyerror ("Missing term"); DRECOVER (3);;
     break;}
-case 491:
-#line 2028 "./parse.y"
+case 492:
+#line 2050 "./parse.y"
 { yyval.node = build_assignment (yyvsp[-1].operator.token, yyvsp[-1].operator.location, yyvsp[-2].node, yyvsp[0].node); ;
     break;}
-case 492:
-#line 2030 "./parse.y"
+case 493:
+#line 2052 "./parse.y"
 {
                  if (ctxp->prevent_ese != lineno)
                    yyerror ("Missing term");
@@ -4462,7 +4476,7 @@ case 492:
     break;}
 }
    /* the action file gets copied in in place of this dollarsign */
-#line 498 "/x1/java-install/share/bison.simple"
+#line 498 "/usr/cygnus/gnupro-98r1/share/bison.simple"
 \f
   yyvsp -= yylen;
   yyssp -= yylen;
@@ -4658,7 +4672,7 @@ yyerrhandle:
   yystate = yyn;
   goto yynewstate;
 }
-#line 2056 "./parse.y"
+#line 2078 "./parse.y"
 
 \f
 
@@ -4685,9 +4699,20 @@ java_push_parser_context ()
     ctxp->incomplete_class = ctxp->next->incomplete_class;
 }  
 
+/* If the first file of a file list was a class file, no context
+   exists for a source file to be parsed. This boolean remembers that
+   java_parser_context_save_global might have created a dummy one, so
+   that java_parser_context_restore_global can pop it.  */
+static int extra_ctxp_pushed_p = 0;
+
 void
 java_parser_context_save_global ()
 {
+  if (!ctxp)
+    {
+      java_push_parser_context ();
+      extra_ctxp_pushed_p = 1;
+    }
   ctxp->finput = finput;
   ctxp->lineno = lineno;
   ctxp->current_class = current_class;
@@ -4703,6 +4728,11 @@ java_parser_context_restore_global ()
   current_class = ctxp->current_class;
   input_filename = ctxp->filename;
   current_function_decl = ctxp->current_function_decl;
+  if (extra_ctxp_pushed_p)
+    {
+      java_pop_parser_context (0);
+      extra_ctxp_pushed_p = 0;
+    }
 }
 
 void 
@@ -4981,6 +5011,7 @@ build_array_from_name (type, type_wfl, name, ret_name)
       if (JPRIMITIVE_TYPE_P (type))
        {
          type = build_java_array_type (type, -1);
+         CLASS_LOADED_P (type) = 1;
          more_dims--;
        }
       /* Otherwise, if we have a WFL for this type, use it (the type
@@ -5410,10 +5441,15 @@ register_fields (flags, type, variable_list)
 
       /* Type adjustment. We may have just readjusted TYPE because
         the variable specified more dimensions. Make sure we have
-        a reference if we can and don't have one already. */
-      if (type != saved_type && !must_chain 
-         && (TREE_CODE (type) == RECORD_TYPE))
-       type = promote_type (type);
+        a reference if we can and don't have one already. Also
+        change the name if we have an init. */
+      if (type != saved_type)
+       {
+         if (!must_chain && (TREE_CODE (type) == RECORD_TYPE))
+           type = promote_type (type);
+         if (init)
+           EXPR_WFL_NODE (TREE_OPERAND (init, 0)) = current_name;
+       }
 
       /* Set lineno to the line the field was found and create a
          declaration for it */
@@ -5454,6 +5490,7 @@ register_fields (flags, type, variable_list)
             time of the generation of <init>. */
          else
            {
+             INITIALIZED_P (field_decl) = 1;
              TREE_CHAIN (init) = ctxp->non_static_initialized;
              ctxp->non_static_initialized = init;
            }
@@ -5462,36 +5499,49 @@ register_fields (flags, type, variable_list)
   lineno = saved_lineno;
 }
 
+/* Generate the method <finit> that initializes fields initialized
+   upon declaration.  */
+
+static void
+maybe_generate_finit ()
+{
+  tree mdecl, current;
+  
+  if (!ctxp->non_static_initialized || java_error_count)
+    return;
+
+  mdecl = create_artificial_method (TREE_TYPE (ctxp->current_parsed_class),
+                                   ACC_PRIVATE|ACC_FINAL, void_type_node,
+                                   finit_identifier_node, NULL_TREE);
+  start_artificial_method_body (mdecl);
+
+  ctxp->non_static_initialized = nreverse (ctxp->non_static_initialized);
+  for (current = ctxp->non_static_initialized; current;
+       current = TREE_CHAIN (current))
+    java_method_add_stmt (mdecl, 
+                         build_debugable_stmt (EXPR_WFL_LINECOL (current), 
+                                               current));
+
+  end_artificial_method_body (mdecl);
+  CLASS_HAS_FINIT_P (TREE_TYPE (ctxp->current_parsed_class)) = 1;
+  ctxp->non_static_initialized = NULL_TREE;
+}
+
 /* Check whether it is necessary to generate a <clinit> for the class
    we just parsed. */
 
 static void
 maybe_generate_clinit ()
 {
-  int saved_lineno;
-  tree meth, mdecl, c;
-  tree cclass, class_wfl;
+  tree mdecl, c;
 
   if (!ctxp->static_initialized || java_error_count)
     return;
 
-  cclass = TREE_TYPE (ctxp->current_parsed_class);
-  class_wfl = build_expr_wfl (DECL_NAME (TYPE_NAME (cclass)),
-                             input_filename, 0, 0);
-  
-  saved_lineno = lineno;
-  lineno = 0;
-  meth = make_node (FUNCTION_TYPE);
-  TREE_TYPE (meth) = void_type_node;
-  TYPE_ARG_TYPES (meth) = NULL_TREE;
-  mdecl = add_method (cclass, ACC_STATIC, clinit_identifier_node,
-                    build_java_signature (meth));
-  lineno = saved_lineno;
-
-  DECL_SOURCE_LINE (mdecl) = 1;
-  DECL_SOURCE_LINE_MERGE (mdecl, 1);
-  source_start_java_method (mdecl);
-  enter_block ();
+  mdecl = create_artificial_method (TREE_TYPE (ctxp->current_parsed_class),
+                                   ACC_STATIC, void_type_node,
+                                   clinit_identifier_node, NULL_TREE);
+  start_artificial_method_body (mdecl);
 
   /* Keep initialization in order to enforce 8.5 */
   ctxp->static_initialized = nreverse (ctxp->static_initialized);
@@ -5504,11 +5554,11 @@ maybe_generate_clinit ()
       /* We build the assignment expression that will initialize the
         field to its value. There are strict rules on static
         initializers (8.5). FIXME */
-      java_method_add_stmt (mdecl, c);
+      java_method_add_stmt (mdecl, 
+                           build_debugable_stmt (EXPR_WFL_LINECOL (c), c));
     }
 
-  BLOCK_EXPR_BODY (DECL_FUNCTION_BODY (mdecl)) = exit_block ();
-  exit_block ();
+  end_artificial_method_body (mdecl);
   ctxp->static_initialized = NULL_TREE;
 }
 
@@ -5523,7 +5573,8 @@ static int patch_stage;
 /* Check the method declaration and add the method to its current
    class.  If the argument list is known to contain incomplete types,
    the method is partially added and the registration will be resume
-   once the method arguments resolved  */
+   once the method arguments resolved. If TYPE is NULL, we're dealing
+   with a constructor.  */
 
 static tree
 method_header (flags, type, mdecl, throws)
@@ -5535,12 +5586,13 @@ method_header (flags, type, mdecl, throws)
   tree this_class = TREE_TYPE (ctxp->current_parsed_class);
   tree meth_name, returned_type, current;
   int saved_lineno;
+  int constructor_ok = 0;
   
   check_modifiers_consistency (flags);
   
   /* There are some forbidden modifiers for an abstract method and its
      class must be abstract as well.  */
-  if (flags & ACC_ABSTRACT)
+  if (type && (flags & ACC_ABSTRACT))
     {
       ABSTRACT_CHECK (flags, ACC_PRIVATE, id, "Private");
       ABSTRACT_CHECK (flags, ACC_STATIC, id, "Static");
@@ -5554,7 +5606,30 @@ method_header (flags, type, mdecl, throws)
           IDENTIFIER_POINTER (DECL_NAME (ctxp->current_parsed_class)),
           IDENTIFIER_POINTER (EXPR_WFL_NODE (id)));
     }
-
+  /* Things to be checked when declaring a constructor */
+  if (!type)
+    {
+      int ec = java_error_count;
+      /* 8.6: Constructor declarations: we might be trying to define a
+         method without specifying a return type. */
+      if (EXPR_WFL_NODE (id) != DECL_NAME (ctxp->current_parsed_class))
+       parse_error_context 
+         (id, "Invalid method declaration, return type required");
+      /* 8.6.3: Constructor modifiers */
+      else
+       {
+         JCONSTRUCTOR_CHECK (flags, ACC_ABSTRACT, id, "abstract");
+         JCONSTRUCTOR_CHECK (flags, ACC_STATIC, id, "static");
+         JCONSTRUCTOR_CHECK (flags, ACC_FINAL, id, "final");
+         JCONSTRUCTOR_CHECK (flags, ACC_NATIVE, id, "native");
+         JCONSTRUCTOR_CHECK (flags, ACC_SYNCHRONIZED, id, "synchronized");
+       }
+      /* If we found error here, we don't consider it's OK to tread
+        the method definition as a constructor, for the rest of this
+        function */
+      if (ec == java_error_count)
+       constructor_ok = 1;
+    }
 
   /* Method declared within the scope of an interface are implicitly
      abstract and public. Conflicts with other erroneously provided
@@ -5576,7 +5651,17 @@ method_header (flags, type, mdecl, throws)
   /* Modifiers context reset moved up, so abstract method declaration
      modifiers can be later checked.  */
 
-  meth_name = EXPR_WFL_NODE (id);
+  /* Set constructor returned type to void and method name to <init>,
+     unless we found an error identifier the constructor (in which
+     case we retain the original name) */
+  if (!type)
+    {
+      type = void_type_node;
+      if (constructor_ok)
+       meth_name = init_identifier_node;
+    }
+  else
+    meth_name = EXPR_WFL_NODE (id);
 
   if (unresolved_type_p (type, &returned_type))
     {
@@ -5653,18 +5738,98 @@ method_header (flags, type, mdecl, throws)
          JDEP_GET_PATCH (CLASSD_LAST (ctxp->classd_list)) = 
            &TREE_VALUE (current);
        }
-      DECL_FUNCTION_THROWS (meth) = throws;
+      DECL_FUNCTION_THROWS (meth) = throws;
+    }
+
+  /* We set the DECL_NAME to ID so we can track the location where
+     the function was declared. This allow us to report
+     redefinition error accurately. When method are verified,
+     DECL_NAME is reinstalled properly (using the content of the
+     WFL node ID) (see check_method_redefinition). We don't do that
+     when Object is being defined. Constructor <init> names will be
+     reinstalled the same way. */
+  if (TREE_TYPE (ctxp->current_parsed_class) != object_type_node)
+    DECL_NAME (meth) = id;
+
+  /* Set the flag if we correctly processed a constructor */
+  if (constructor_ok)
+    DECL_CONSTRUCTOR_P (meth) = 1;
+
+  return meth;
+}
+
+/* Complete the method declaration with METHOD_BODY.  */
+
+static void
+complete_method_declaration (method_body)
+     tree method_body;
+{
+  BLOCK_EXPR_BODY (DECL_FUNCTION_BODY (current_function_decl)) = method_body;
+  maybe_absorb_scoping_blocks ();
+  /* Exit function's body */
+  exit_block ();
+  /* Merge last line of the function with first line, directly in the
+     function decl. It will be used to emit correct debug info. */
+  DECL_SOURCE_LINE_MERGE (current_function_decl, ctxp->last_ccb_indent1);
+}
+
+/* Build a an error message for constructor circularity errors.  */
+
+static char *
+constructor_circularity_msg (from, to)
+     tree from, to;
+{
+  static char string [4096];
+  char *t = strdup (lang_printable_name (from, 0));
+  sprintf (string, "`%s' invokes `%s'", t, lang_printable_name (to, 0));
+  free (t);
+  return string;
+}
+
+/* Verify a circular call to METH. Return 1 if an error is found, 0
+   otherwise.  */
+
+static int
+verify_constructor_circularity (meth, current)
+     tree meth, current;
+{
+  static tree list = NULL_TREE;
+  tree c;
+  for (c = DECL_CONSTRUCTOR_CALLS (current); c; c = TREE_CHAIN (c))
+    {
+      if (TREE_VALUE (c) == meth)
+       {
+         char *t;
+         if (list)
+           {
+             tree liste;
+             list = nreverse (list);
+             for (liste = list; liste; liste = TREE_CHAIN (liste))
+               {
+                 parse_error_context 
+                   (TREE_PURPOSE (TREE_PURPOSE (liste)),
+                    constructor_circularity_msg
+                     (TREE_VALUE (liste), TREE_VALUE (TREE_PURPOSE (liste)))); 
+                 java_error_count--;
+               }
+           }
+         t = strdup (lang_printable_name (meth, 0));
+         parse_error_context (TREE_PURPOSE (c), 
+                              "%s: recursive invocation of constructor `%s'",
+                              constructor_circularity_msg (current, meth), t);
+         free (t);
+         list = NULL_TREE;
+         return 1;
+       }
     }
-
-  /* We set the DECL_NAME to ID so we can track the location where
-     the function was declared. This allow us to report
-     redefinition error accurately. When method are verified,
-     DECL_NAME is reinstalled properly (using the content of the
-     WFL node ID) (see check_method_redefinition). We don't do that
-     when Object is being defined. */
-  if (TREE_TYPE (ctxp->current_parsed_class) != object_type_node)
-    DECL_NAME (meth) = id;
-  return meth;
+  for (c = DECL_CONSTRUCTOR_CALLS (current); c; c = TREE_CHAIN (c))
+    {
+      list = tree_cons (c, current, list);
+      if (verify_constructor_circularity (meth, TREE_VALUE (c)))
+       return 1;
+      list = TREE_CHAIN (list);
+    }
+  return 0;
 }
 
 /* Check modifiers that can be declared but exclusively */
@@ -6403,6 +6568,36 @@ java_check_final ()
 {
 }
 
+/* Return a static string containing the DECL prototype string. If
+   DECL is a constructor, use the class name instead of the form
+   <init> */
+
+static char *
+get_printable_method_name (decl)
+     tree decl;
+{
+  char *to_return;
+  tree name;
+
+  if (DECL_CONSTRUCTOR_P (decl))
+    {
+      name = DECL_NAME (decl);
+      DECL_NAME (decl) = 
+       DECL_NAME (ctxp->current_parsed_class ? 
+                  ctxp->current_parsed_class : current_class);
+    }
+      
+  to_return = lang_printable_name (decl, 0);
+  if (DECL_CONSTRUCTOR_P (decl))
+    DECL_NAME (decl) = name;
+  
+  return to_return;
+}
+
+/* Track method being redefined inside the same class. As a side
+   effect, set DECL_NAME to an IDENTIFIER (prior entering this
+   function it's a FWL, so we can track errors more accurately */
+
 static int
 check_method_redefinition (class, method)
      tree class, method;
@@ -6410,14 +6605,17 @@ check_method_redefinition (class, method)
   tree redef, name;
   tree cl = DECL_NAME (method);
   tree sig = TYPE_LANG_SPECIFIC (TREE_TYPE (method))->signature;
-  /* decl name of generated <clinit> doesn't need to be fixed and
+  /* decl name of artificial <clinit> and <finit> doesn't need to be fixed and
      checked */
-  if (DECL_NAME (method) != clinit_identifier_node)
+  if (DECL_NAME (method) != clinit_identifier_node
+      && DECL_NAME (method) != finit_identifier_node)
     {
       /* NAME is just the plain name when Object is being defined */
       if (class != object_type_node)
-       name = DECL_NAME (method) = EXPR_WFL_NODE (DECL_NAME (method));
-      else
+       name = DECL_NAME (method) = (DECL_CONSTRUCTOR_P (method) ? 
+                                    init_identifier_node :
+                                    EXPR_WFL_NODE (DECL_NAME (method)));
+      else 
        name = DECL_NAME (method);
     }
   else 
@@ -6431,7 +6629,10 @@ check_method_redefinition (class, method)
        break;
       if (DECL_NAME (redef) == name && sig == t->signature)
        {
-         parse_error_context (cl, "Duplicate method declaration");
+         parse_error_context 
+           (cl, "Duplicate %s declaration `%s'",
+            (DECL_CONSTRUCTOR_P (redef) ? "constructor" : "method"),
+            get_printable_method_name (redef));
          return 1;
        }
     }
@@ -6449,7 +6650,7 @@ java_check_regular_methods (class_decl)
   tree method;
   tree class = CLASS_TO_HANDLE_TYPE (TREE_TYPE (class_decl));
   tree super_class = CLASSTYPE_SUPER (class);
-  int seen_constructor = 0;
+  int saw_constructor = 0;
 
   TYPE_METHODS (class) = nreverse (TYPE_METHODS (class));
 
@@ -6460,13 +6661,19 @@ java_check_regular_methods (class_decl)
       tree method_wfl = DECL_NAME (method);
       int aflags;
 
-     if (DECL_CONSTRUCTOR_P (method))
-       seen_constructor = 1;
-
       /* Check for redefinitions */
       if (check_method_redefinition (class, method))
        continue;
 
+      /* If we see one constructor a mark so we don't generate the
+        default one. Also skip other verifications: constructors
+        can't be inherited hence hiden or overriden */
+     if (DECL_CONSTRUCTOR_P (method))
+       {
+        saw_constructor = 1;
+        continue;
+       }
+
       sig = build_java_argument_signature (TREE_TYPE (method));
 
       found = lookup_argument_method (super_class, DECL_NAME (method), sig);
@@ -6557,19 +6764,20 @@ java_check_regular_methods (class_decl)
   
   TYPE_METHODS (class) = nreverse (TYPE_METHODS (class));
 
-  if (!seen_constructor)
+  if (!saw_constructor)
     {
       /* No constructor seen, we craft one, at line 0 */
-      int saved_lineno = lineno;
-      tree meth, decl;
-      lineno = 0;
-      meth = make_node (FUNCTION_TYPE);
-      TREE_TYPE (meth) = void_type_node;
-      TYPE_ARG_TYPES (meth) = NULL_TREE; 
-      decl = add_method (class, 0, init_identifier_node,
-                        build_java_signature (meth));
+      int flags;
+      tree decl;
+
+      /* If the class is declared PUBLIC, the default constructor is
+         PUBLIC otherwise it has default access implied by no access
+         modifiers. */
+      flags = (get_access_flags_from_decl (class_decl) & ACC_PUBLIC ?
+              ACC_PUBLIC : 0);
+      decl = create_artificial_method (class, flags, void_type_node, 
+                                      init_identifier_node, NULL_TREE);
       DECL_CONSTRUCTOR_P (decl) = 1;
-      lineno = saved_lineno;
     }
 }
 
@@ -6681,7 +6889,6 @@ java_check_abstract_methods (interface)
 void
 java_check_methods ()
 {
-
   tree current;
   for (current = ctxp->class_list; current; current = TREE_CHAIN (current))
     if (CLASS_FROM_SOURCE_P (TREE_TYPE (current)))
@@ -7239,6 +7446,47 @@ source_start_java_method (fndecl)
   DECL_ARG_SLOT_COUNT (current_function_decl) = i;
 }
 
+/* Called during parsing. Creates an artificial method declaration.  */
+
+static tree
+create_artificial_method (class, flags, type, name, args)
+     tree class;
+     int flags;
+     tree type, name, args;
+{
+  int saved_lineno = lineno;                                       
+  tree mdecl;
+
+  lineno = 0;                                                              
+  mdecl = make_node (FUNCTION_TYPE);                               
+  TREE_TYPE (mdecl) = type;
+  TYPE_ARG_TYPES (mdecl) = args;
+  mdecl = add_method (class, flags, name, build_java_signature (mdecl)); 
+  lineno = saved_lineno;                                                   
+  DECL_ARTIFICIAL (mdecl) = 1;                                     
+  return mdecl;
+}
+
+/* Starts the body if an artifical method.  */
+
+static void
+start_artificial_method_body (mdecl)
+     tree mdecl;
+{
+  DECL_SOURCE_LINE (mdecl) = 1;
+  DECL_SOURCE_LINE_MERGE (mdecl, 1);
+  source_start_java_method (mdecl);
+  enter_block ();
+}
+
+static void
+end_artificial_method_body (mdecl)
+     tree mdecl;
+{
+  BLOCK_EXPR_BODY (DECL_FUNCTION_BODY (mdecl)) = exit_block ();
+  exit_block ();
+}
+
 /* Called during expansion. Push decls formerly built from argument
    list so they're usable during expansion. */
 
@@ -7371,7 +7619,8 @@ add_stmt_to_compound (existing, type, stmt)
 /* Hold THIS for the scope of the current public method decl.  */
 static tree current_this;
 
-/* Layout all class found during parsing */
+/* Layout all class found during parsing. Also fixes the order of
+   several field related lists. */
 
 void
 java_layout_classes ()
@@ -7380,8 +7629,16 @@ java_layout_classes ()
   for (current = ctxp->class_list; current; current = TREE_CHAIN (current))
     {
       current_class = TREE_TYPE (current);
-      TYPE_FIELDS (current_class) = nreverse (TYPE_FIELDS (current_class));
-      if (!TYPE_SIZE (current_class))
+
+      /* Reverse the fields if it's necessary (they've already
+         reversed if the dummy field has been inserted at the
+         beginning of the list */
+      if (TYPE_FIELDS (current_class)
+         && !DECL_IGNORED_P (TYPE_FIELDS (current_class)))
+       TYPE_FIELDS (current_class) = nreverse (TYPE_FIELDS (current_class));
+      
+      /* Do a layout if necessary */
+      if (!TYPE_SIZE (current_class) || (current_class == object_type_node))
        safe_layout_class (current_class);
     }
 }
@@ -7425,6 +7682,14 @@ java_complete_expand_methods ()
              java_complete_expand_method (decl);
          }
 
+      /* Now verify constructor circularity (stop after the first one
+         we find) */
+      if (!CLASS_INTERFACE (TYPE_NAME (current_class)))
+       for (decl = TYPE_METHODS (class_type); decl; decl = TREE_CHAIN (decl))
+         if (DECL_CONSTRUCTOR_P (decl) && 
+             verify_constructor_circularity (decl, decl))
+           break;
+
       /* Make the class data, register it and run the rest of decl
          compilation on it */
       if (!java_error_count && ! flag_emit_class_files)
@@ -7447,51 +7712,11 @@ static void
 java_complete_expand_method (mdecl)
      tree mdecl;
 {
-  int no_ac_found = 1;
-
-  /* We generate some code for an empty constructor */
-  if (DECL_CONSTRUCTOR_P (mdecl) && !DECL_FUNCTION_BODY (mdecl))
-    {
-      tree arg_list, func, call;
-      tree method_type = TREE_TYPE (mdecl);
-      tree class_type = CLASS_TO_HANDLE_TYPE (current_class);
-      tree self_type = (CLASSTYPE_SUPER (class_type) ? 
-                       CLASSTYPE_SUPER (class_type) : class_type);
-      tree method_signature = 
-       TYPE_LANG_SPECIFIC (method_type)->signature;
-      tree method = 
-       lookup_java_constructor (CLASS_TO_HANDLE_TYPE (self_type),
-                                method_signature);
-      tree block, compound;
-
-      /* Fixe the begining/ending lines of the method so that with
-         no_line_numbers set to 1 it doesn't generate debug info at
-         line 1 for this artificial constructor. */
-      DECL_SOURCE_LINE (mdecl) = 1;
-      DECL_SOURCE_LINE_MERGE (mdecl, 1);
-      source_start_java_method (mdecl);
-      arg_list = BLOCK_EXPR_DECLS (DECL_FUNCTION_BODY (mdecl));
-      enter_block ();
-      func = build_known_method_ref (method, method_type, self_type,
-                                    method_signature, arg_list);
-      
-      if (! flag_emit_class_files)
-       func = build1 (NOP_EXPR, build_pointer_type (method_type), func);
-      call = build (CALL_EXPR, TREE_TYPE (method_type), func, 
-                   build_tree_list (NULL_TREE, arg_list), NULL_TREE);
-      TREE_SIDE_EFFECTS (call) = 1;
-      call = build_class_init (self_type, call);
-      compound = java_method_add_stmt (mdecl, call);
-      block = exit_block ();
-      BLOCK_EXPR_BODY (DECL_FUNCTION_BODY (mdecl)) = block;
-      /* The function decl, its block and the compound statement
-         within this block are all of void type. */
-      TREE_TYPE (block) = TREE_TYPE (compound) = 
-       TREE_TYPE (DECL_FUNCTION_BODY (mdecl)) = void_type_node;
-      exit_block ();
-      no_ac_found = 0;
-    }
+  /* Fix constructors before expanding them */
+  if (DECL_CONSTRUCTOR_P (mdecl))
+    fix_constructors (mdecl);
   
+  /* Expand functions that have a body */
   if (DECL_FUNCTION_BODY (mdecl))
     {
       expand_start_java_method (mdecl);
@@ -7506,12 +7731,17 @@ java_complete_expand_method (mdecl)
       /* Install exceptions thrown with `throws' */
       PUSH_EXCEPTIONS (DECL_FUNCTION_THROWS (mdecl));
 
-      if (BLOCK_EXPR_BODY (DECL_FUNCTION_BODY (mdecl)) && no_ac_found)
+      if (BLOCK_EXPR_BODY (DECL_FUNCTION_BODY (mdecl)))
        java_complete_tree (BLOCK_EXPR_BODY (DECL_FUNCTION_BODY (mdecl)));
       /* Don't go any further if we've found error(s) during the
          expansion */
       if (!java_error_count)
        source_end_java_method ();
+      else
+       {
+         pushdecl_force_head (DECL_ARGUMENTS (mdecl));
+         poplevel (1, 0, 1);
+       }
 
       /* Pop the exceptions and sanity check */
       POP_EXCEPTIONS();
@@ -7520,6 +7750,136 @@ java_complete_expand_method (mdecl)
     }
 }
 
+/* Craft a body for default constructor. Patch existing constructor
+   bodies with call to super() and field initialization statements if
+   necessary.  */
+
+static void
+fix_constructors (mdecl)
+     tree mdecl;
+{
+  tree body = DECL_FUNCTION_BODY (mdecl);
+  tree field_init;
+
+  /* The constructor body must be crafted by hand. It's the
+     constructor we defined when we realize we didn't have the
+     CLASSNAME() constructor */
+  if (!body)
+    {
+      tree compound;
+
+      /* It is an error for the compiler to generate a default
+        constructor if the superclass doesn't have a constructor that
+        takes no argument */
+      if (verify_constructor_super ())
+       {
+         tree sclass_decl = TYPE_NAME (CLASSTYPE_SUPER (current_class));
+         char *n = IDENTIFIER_POINTER (DECL_NAME (sclass_decl));
+         parse_error_context (lookup_cl (TYPE_NAME (current_class)), 
+                              "No constructor matching `%s()' found in "
+                              "class `%s'", n, n);
+       }
+      
+      start_artificial_method_body (mdecl);
+      
+      /* We don't generate a super constructor invocation if we're
+        compiling java.lang.Object. build_super_invocation takes care
+        of that. */
+      compound = java_method_add_stmt (mdecl, build_super_invocation ());
+      
+      /* Takes care of non static field initialization */
+      field_init = generate_field_initialization_code (current_class);
+      if (field_init)
+       compound = java_method_add_stmt (mdecl, field_init);
+
+      end_artificial_method_body (mdecl);
+    }
+  /* Search for an explicit constructor invocation */
+  else 
+    {
+      int found = 0;
+      tree main_block = BLOCK_EXPR_BODY (body);
+      tree compound = NULL_TREE;
+      
+      while (body)
+       switch (TREE_CODE (body))
+         {
+         case CALL_EXPR:
+           found = CALL_EXPLICIT_CONSTRUCTOR_P (body);
+           body = NULL_TREE;
+           break;
+         case COMPOUND_EXPR:
+         case EXPR_WITH_FILE_LOCATION:
+           body = TREE_OPERAND (body, 0);
+           break;
+         case BLOCK:
+           body = BLOCK_EXPR_BODY (body);
+           break;
+         default:
+           found = 0;
+           body = NULL_TREE;
+         }
+      /* The constructor is missing an invocation of super() */
+      if (!found)
+       compound = add_stmt_to_compound (compound, NULL_TREE,
+                                        build_super_invocation ());
+      
+      /* Also fix its initialized fields initialization */
+      field_init = generate_field_initialization_code (current_class);
+      if (field_init)
+       compound = add_stmt_to_compound (compound, NULL_TREE, field_init);
+      
+      /* Fix the constructor main block if we're adding extra stmts */
+      if (compound)
+       {
+         compound = add_stmt_to_compound (compound, NULL_TREE,
+                                          BLOCK_EXPR_BODY (main_block));
+         BLOCK_EXPR_BODY (main_block) = compound;
+       }
+    }
+}
+
+/* Browse constructors in the super class, searching for a constructor
+   that doesn't take any argument. Return 0 if one is found, 1
+   otherwise. */
+
+static int
+verify_constructor_super ()
+{
+  tree class = CLASSTYPE_SUPER (current_class);
+  if (!class)
+    return 0;
+
+  if (class)
+    {
+      tree mdecl;
+      for (mdecl = TYPE_METHODS (class); mdecl; mdecl = TREE_CHAIN (mdecl))
+       {
+         if (DECL_CONSTRUCTOR_P (mdecl)
+             && !TREE_CHAIN (TYPE_ARG_TYPES (TREE_TYPE (mdecl))))
+           return 0;
+       }
+    }
+  return 1;
+}
+
+/* Generate the code used to initialize field declared with an
+   initialization statement. For now, it returns a call the the
+   artificial function <finit>, if required. Always returns NULL if
+   nothing needs to be generated. */
+
+static tree
+generate_field_initialization_code (class)
+     tree class;
+{
+  if (CLASS_HAS_FINIT_P (class))
+    return build_method_invocation (build_expr_wfl (finit_identifier_node, 
+                                                   input_filename, 0, 0), 
+                                   NULL_TREE);
+  else
+    return NULL_TREE;
+}
+
 /* Expand finals.  */
 
 void
@@ -7527,7 +7887,7 @@ java_expand_finals ()
 {
 }
 
-/* Generate code for all context remembered for code generation */
+/* Generate code for all context remembered for code generation */
 
 void
 java_expand_classes ()
@@ -7542,6 +7902,8 @@ java_expand_classes ()
       java_parse_abort_on_error ();
       java_check_final ();            /* Check unitialized final  */
       java_parse_abort_on_error ();
+      if (flag_emit_class_files)
+       write_classfile (current_class);
     }
 }
 
@@ -7695,6 +8057,15 @@ resolve_expression_name (id)
                                         (TYPE_NAME (current_class))));
                  return error_mark_node;
                }
+             /* Instance variables can't appear as an argument of
+                an explicit constructor invocation */
+             if (!fs && ctxp->explicit_constructor_p)
+               {
+                 parse_error_context
+                   (id, "Can't reference `%s' before the superclass "
+                    "constructor has been called", IDENTIFIER_POINTER (name));
+                 return error_mark_node;
+               }
              decl = build_field_ref ((fs ? NULL_TREE : current_this),
                                      current_class, name);
              return (fs ? build_class_init (current_class, decl) : decl);
@@ -7816,7 +8187,7 @@ resolve_qualified_expression_name (wfl, found_decl, where_found, type_found)
            return 1;
          *where_found = 
            patch_method_invocation_stmt (qual_wfl, decl, type,
-                                         &is_static, NULL);
+                                         &is_static, NULL, from_super);
          if (*where_found == error_mark_node)
            return 1;
          *type_found = type = QUAL_DECL_TYPE (*where_found);
@@ -7845,6 +8216,13 @@ resolve_qualified_expression_name (wfl, found_decl, where_found, type_found)
          from_cast = 1;
          continue;
 
+       case CONDITIONAL_EXPR:
+         *where_found = decl = java_complete_tree (qual_wfl);
+         if (decl == error_mark_node)
+           return 1;
+         *type_found = type = QUAL_DECL_TYPE (decl);
+         continue;
+
        case ARRAY_REF:
          /* If the access to the function call is a non static field,
             build the code to access it. */
@@ -7901,6 +8279,8 @@ resolve_qualified_expression_name (wfl, found_decl, where_found, type_found)
                             CLASSTYPE_SUPER (current_class),
                             build_this (EXPR_WFL_LINECOL (qual_wfl)));
          *where_found = decl = java_complete_tree (node);
+         if (decl == error_mark_node)
+           return 1;
          *type_found = type = QUAL_DECL_TYPE (decl);
          from_super = from_type = 1;
          continue;
@@ -8166,15 +8546,17 @@ maybe_access_field (decl, where, type)
    used. IS_STATIC is set to 1 if the invoked function is static. */
 
 static tree
-patch_method_invocation_stmt (patch, primary, where, is_static, ret_decl)
+patch_method_invocation_stmt (patch, primary, where, is_static, ret_decl, super)
      tree patch, primary, where;
      int *is_static;
      tree *ret_decl;
+     int super;
 {
   tree wfl = TREE_OPERAND (patch, 0);
   tree args = TREE_OPERAND (patch, 1);
   tree name = EXPR_WFL_NODE (wfl);
   tree list, class_type;
+  int is_static_flag = 0;
   
   /* Should be overriden if everything goes well. Otherwise, if
      something fails, it should keep this value. It stop the
@@ -8284,24 +8666,49 @@ patch_method_invocation_stmt (patch, primary, where, is_static, ret_decl)
       /* We search constructor in their target class */
       if (CALL_CONSTRUCTOR_P (patch))
        {
-         class_to_search = resolve_no_layout (EXPR_WFL_NODE (wfl), NULL_TREE);
-         if (!class_to_search)
+         if (TREE_CODE (patch) == NEW_CLASS_EXPR)
+           class_to_search = EXPR_WFL_NODE (wfl);
+         else if (EXPR_WFL_NODE (TREE_OPERAND (patch, 0)) == 
+                  this_identifier_node)
+           class_to_search = NULL_TREE;
+         else if (EXPR_WFL_NODE (TREE_OPERAND (patch, 0)) ==
+                  super_identifier_node)
            {
-             parse_error_context 
-               (wfl, "Class `%s' not found in type declaration",
-                IDENTIFIER_POINTER (EXPR_WFL_NODE (wfl)));
-             PATCH_METHOD_RETURN_ERROR ();
+             if (CLASSTYPE_SUPER (current_class))
+               class_to_search = 
+                 DECL_NAME (TYPE_NAME (CLASSTYPE_SUPER (current_class)));
+             else
+               {
+                 parse_error_context (wfl, "Can't invoke super constructor "
+                                      "on java.lang.Object");
+                 PATCH_METHOD_RETURN_ERROR ();
+               }
            }
-         
-         /* Can't instantiate an abstract class */
-         if (CLASS_ABSTRACT (class_to_search))
+
+         /* Class to search is NULL if we're searching the current one */
+         if (class_to_search)
            {
-             parse_error_context 
-               (wfl, "Class `%s' is an abstract class. It can't be "
-                "instantiated", IDENTIFIER_POINTER (EXPR_WFL_NODE (wfl)));
-             PATCH_METHOD_RETURN_ERROR ();
+             class_to_search = resolve_no_layout (class_to_search, NULL_TREE);
+             if (!class_to_search)
+               {
+                 parse_error_context 
+                   (wfl, "Class `%s' not found in type declaration",
+                    IDENTIFIER_POINTER (EXPR_WFL_NODE (wfl)));
+                 PATCH_METHOD_RETURN_ERROR ();
+               }
+             
+             /* Can't instantiate an abstract class */
+             if (CLASS_ABSTRACT (class_to_search))
+               {
+                 parse_error_context 
+                   (wfl, "Class `%s' is an abstract class. It can't be "
+                    "instantiated", IDENTIFIER_POINTER (EXPR_WFL_NODE (wfl)));
+                 PATCH_METHOD_RETURN_ERROR ();
+               }
+             class_to_search = TREE_TYPE (class_to_search);
            }
-         class_to_search = TREE_TYPE (class_to_search);
+         else
+           class_to_search = current_class;
          lc = 1;
        }
       /* This is a regular search in the local class, unless an
@@ -8327,11 +8734,12 @@ patch_method_invocation_stmt (patch, primary, where, is_static, ret_decl)
                                             class_to_search, primary))
        PATCH_METHOD_RETURN_ERROR ();
 
-      /* Non static/constructor methods are called with the current
-        object extra argument. If method is resolved as a primary,
-        use the primary otherwise use the current THIS. */
+      /* Non static methods are called with the current object extra
+        argument. If patch a `new TYPE()', the argument is the value
+        returned by the object allocator. If method is resolved as a
+        primary, use the primary otherwise use the current THIS. */
       args = nreverse (args);
-      if (!CALL_CONSTRUCTOR_P (patch) && !METHOD_STATIC (list))
+      if (!METHOD_STATIC (list) && TREE_CODE (patch) != NEW_CLASS_EXPR)
        args = tree_cons (NULL_TREE, primary ? primary : current_this, args);
 
       class_type = class_to_search;
@@ -8356,15 +8764,27 @@ patch_method_invocation_stmt (patch, primary, where, is_static, ret_decl)
       free (fct_name);
       PATCH_METHOD_RETURN_ERROR ();
     }
-  
-  if (is_static) 
-    *is_static = METHOD_STATIC (list);
+
+  is_static_flag = METHOD_STATIC (list);
+
+  /* In the context of an explicit constructor invocation, we can't invoke
+     any method relying on `this' */
+  if (ctxp->explicit_constructor_p 
+      && !is_static_flag && (!primary || primary == current_this))
+    {
+      parse_error_context 
+       (wfl, "Can't reference `this' before the superclass constructor has "
+        "been called");
+      PATCH_METHOD_RETURN_ERROR ();
+    }
   java_parser_context_restore_global ();
+  if (is_static) 
+    *is_static = is_static_flag;
   /* Sometimes, we want the decl of the selected method. Such as for
      EH checking */
   if (ret_decl)
     *ret_decl = list;
-  return patch_invoke (patch, list, args);
+  return patch_invoke (patch, list, args, super);
 }
 
 /* Check that we're not trying to do a static reference to a method in
@@ -8392,35 +8812,37 @@ check_for_static_method_reference (wfl, node, method, where, primary)
    mode.  */
 
 static tree
-patch_invoke (patch, method, args)
+patch_invoke (patch, method, args, from_super)
      tree patch, method, args;
+     int from_super;
 {
   int im;
   tree dtable, func;
   tree signature = build_java_signature (TREE_TYPE (method));
   tree original_call, t, ta;
 
-  /* Last step for args: convert build-in types */
-  for (t = TYPE_ARG_TYPES (TREE_TYPE (method)),
-       ta = args; t && ta; t = TREE_CHAIN (t), ta = TREE_CHAIN (ta))
+  /* Last step for args: convert build-in types. */
+  for (t = TYPE_ARG_TYPES (TREE_TYPE (method)), ta = args;
+       t && ta; t = TREE_CHAIN (t), ta = TREE_CHAIN (ta))
     if (JPRIMITIVE_TYPE_P (TREE_TYPE (TREE_VALUE (ta))) &&
        TREE_TYPE (TREE_VALUE (ta)) != TREE_VALUE (t))
       TREE_VALUE (ta) = convert (TREE_VALUE (t), TREE_VALUE (ta));
-       
-  switch ((im = invocation_mode (method, 0)))
+  
+  switch ((im = invocation_mode (method, from_super)))
     {
     case INVOKE_VIRTUAL:
       dtable = invoke_build_dtable (0, args);
       func = build_invokevirtual (dtable, method);
       break;
 
+    case INVOKE_SUPER:
     case INVOKE_STATIC:
       func = build_known_method_ref (method, TREE_TYPE (method),
                                     DECL_CONTEXT (method), signature, args);
       break;
 
     default:
-      fatal ("Unknown invocation mode - build_invoke");
+      fatal ("Unknown invocation mode `%d' - build_invoke", im);
       return NULL_TREE;
     }
 
@@ -8431,11 +8853,12 @@ patch_invoke (patch, method, args)
   TREE_OPERAND (patch, 1) = args;
   original_call = patch;
 
-  /* We're calling a constructor. New is called an its returned value
-     is an argument to the constructor. We build a COMPOUND_EXPR and
-     use saved expression so that the overall NEW expression value is
-     a pointer to a newly created and initialized class. */
-  if (CALL_CONSTRUCTOR_P (original_call))
+  /* We're processing a `new TYPE ()' form. New is called an its
+     returned value is the first argument to the constructor. We build
+     a COMPOUND_EXPR and use saved expression so that the overall NEW
+     expression value is a pointer to a newly created and initialized
+     class. */
+  if (TREE_CODE (original_call) == NEW_CLASS_EXPR)
     {
       tree class = DECL_CONTEXT (method);
       tree c1, saved_new, size, new;
@@ -8465,21 +8888,21 @@ invocation_mode (method, super)
 {
   int access = get_access_flags_from_decl (method);
 
+  if (super)
+    return INVOKE_SUPER;
+
   if (access & ACC_STATIC || access & ACC_FINAL)
     return INVOKE_STATIC;
 
   if (CLASS_FINAL (TYPE_NAME (DECL_CONTEXT (method))))
     return INVOKE_STATIC;
   
-  if (super)
-    return INVOKE_SUPER;
-  
   if (CLASS_INTERFACE (TYPE_NAME (DECL_CONTEXT (method))))
     return INVOKE_INTERFACE;
   
   if (DECL_CONSTRUCTOR_P (method))
     return INVOKE_STATIC;
-  
+
   return INVOKE_VIRTUAL;
 }
 
@@ -8538,11 +8961,9 @@ lookup_method_invoke (lc, cl, class, name, arg_list)
          char string [4096];
          if (!cm || not_accessible_p (class, cm, 0))
            continue;
-         signature = build_java_argument_signature (TREE_TYPE (cm));
          sprintf 
-           (string, "  `%s(%s)' in `%s'%s",
-            IDENTIFIER_POINTER (name), 
-            IDENTIFIER_POINTER (signature),
+           (string, "  `%s' in `%s'%s",
+            get_printable_method_name (cm),
             IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (DECL_CONTEXT (cm)))),
             (TREE_CHAIN (current) ? "\n" : ""));
          obstack_grow (&temporary_obstack, string, strlen (string));
@@ -8552,8 +8973,11 @@ lookup_method_invoke (lc, cl, class, name, arg_list)
     }
   /* Issue the error message */
   signature = build_java_argument_signature (method);
-  parse_error_context (cl, "Can't find method `%s(%s)' in class `%s'%s",
-                      IDENTIFIER_POINTER (name),
+  parse_error_context (cl, "Can't find %s `%s(%s)' in class `%s'%s",
+                      (lc ? "constructor" : "method"),
+                      (lc ? 
+                       IDENTIFIER_POINTER(DECL_NAME (TYPE_NAME (class))) :
+                       IDENTIFIER_POINTER (name)),
                       IDENTIFIER_POINTER (signature),
                       IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (class))),
                       (candidates ? candidates : ""));
@@ -8575,8 +8999,7 @@ find_applicable_accessible_methods_list (class, name, arglist)
           method != NULL_TREE;  method = TREE_CHAIN (method))
        {
          /* Names have to match and we're not looking for constructor */
-         if (DECL_NAME (method) != name
-             || DECL_CONSTRUCTOR_P (method))
+         if (DECL_NAME (method) != name || DECL_CONSTRUCTOR_P (method))
            continue;
 
          if (argument_types_convertible (method, arglist))
@@ -8751,7 +9174,10 @@ qualify_ambiguous_name (id)
       {
        qual = TREE_CHAIN (qual);
        qual_wfl = QUAL_WFL (qual);
-       name = EXPR_WFL_NODE (qual_wfl);
+       if (TREE_CODE (qual_wfl) == CALL_EXPR)
+         again = 1;
+       else
+         name = EXPR_WFL_NODE (qual_wfl);
        this_found = 1;
       }
     /* If we have a SUPER, we set the context accordingly */
@@ -8770,6 +9196,13 @@ qualify_ambiguous_name (id)
        /* Do one more interation to set things up */
        super_found = again = 1;
       }
+    /* Loop one more time if we're dealing with ?: up front */
+    if (TREE_CODE (qual_wfl) == CONDITIONAL_EXPR)
+      {
+       qual = TREE_CHAIN (qual);
+       qual_wfl = QUAL_WFL (qual);
+       again = 1;
+      }
   } while (again);
   
   /* If name appears within the scope of a location variable
@@ -8889,7 +9322,7 @@ static tree
 java_complete_tree (node)
      tree node;
 {
-  tree nn, cn, wfl_op1, wfl_op2;
+  tree nn, cn, wfl_op1, wfl_op2, wfl_op3;
   int flag;
 
   /* CONVERT_EXPR always has its type set, even though it needs to be
@@ -9000,6 +9433,16 @@ java_complete_tree (node)
       return patch_if_else_statement (node);
       break;
 
+    case CONDITIONAL_EXPR:
+      /* Condition */
+      wfl_op1 = TREE_OPERAND (node, 0);
+      COMPLETE_CHECK_OP_0 (node);
+      wfl_op2 = TREE_OPERAND (node, 1);
+      COMPLETE_CHECK_OP_1 (node);
+      wfl_op3 = TREE_OPERAND (node, 2);
+      COMPLETE_CHECK_OP_2 (node);
+      return patch_conditional_expr (node, wfl_op1, wfl_op2);
+
       /* 3- Expression section */
     case COMPOUND_EXPR:
       TREE_OPERAND (node, 0) = java_complete_tree (TREE_OPERAND (node, 0));
@@ -9065,11 +9508,21 @@ java_complete_tree (node)
        return error_mark_node;
       else
        {
-         tree decl;
+         tree decl, wfl = TREE_OPERAND (node, 0);
+         int in_this = CALL_THIS_CONSTRUCTOR_P (node);
+
          node = patch_method_invocation_stmt (node, NULL_TREE, 
-                                              NULL_TREE, 0, &decl);
+                                              NULL_TREE, 0, &decl, 0);
          if (node != error_mark_node)
-           check_thrown_exceptions (EXPR_WFL_LINECOL (node), decl);
+           {
+             check_thrown_exceptions (EXPR_WFL_LINECOL (node), decl);
+             /* If we call this(...), register signature and positions */
+             if (in_this)
+               DECL_CONSTRUCTOR_CALLS (current_function_decl) = 
+                 tree_cons (wfl, decl,
+                            DECL_CONSTRUCTOR_CALLS (current_function_decl));
+               
+           }
          return node;
        }
 
@@ -9191,7 +9644,8 @@ java_complete_tree (node)
       TREE_OPERAND (node, 1) = java_complete_tree (wfl_op2);
       if (TREE_OPERAND (node, 1) == error_mark_node)
        return error_mark_node;
-      TREE_OPERAND (node, 1) = save_expr (TREE_OPERAND (node, 1));
+      if (!flag_emit_class_files)
+       TREE_OPERAND (node, 1) = save_expr (TREE_OPERAND (node, 1));
       return patch_array_ref (node, wfl_op1, wfl_op2);
 
     case THIS_EXPR:
@@ -9204,6 +9658,15 @@ java_complete_tree (node)
          TREE_TYPE (node) = error_mark_node;
          return error_mark_node;
        }
+      if (ctxp->explicit_constructor_p)
+       {
+         EXPR_WFL_LINECOL (wfl_operator) = EXPR_WFL_LINECOL (node);
+         parse_error_context 
+           (wfl_operator, "Can't reference `this' or `super' before the "
+            "superclass constructor has been called");
+         TREE_TYPE (node) = error_mark_node;
+         return error_mark_node;
+       }
       return current_this;
 
     default:
@@ -9228,6 +9691,7 @@ complete_function_arguments (node)
   int flag = 0;
   tree cn;
 
+  ctxp->explicit_constructor_p += (CALL_THIS_CONSTRUCTOR_P (node) ? 1 : 0);
   for (cn = TREE_OPERAND (node, 1); cn; cn = TREE_CHAIN (cn))
     {
       tree wfl = TREE_VALUE (cn), parm, temp;
@@ -9250,6 +9714,7 @@ complete_function_arguments (node)
          INITIALIZED_P (parm) = 1;
        }
     }
+  ctxp->explicit_constructor_p -= (CALL_THIS_CONSTRUCTOR_P (node) ? 1 : 0);
   return flag;
 }
 
@@ -9375,6 +9840,40 @@ maybe_absorb_scoping_blocks ()
    are building incomplete tree nodes and the patch_* functions that
    are completing them.  */
 
+/* Build a super() constructor invocation. Returns size_zero_node if
+   we're currently dealing with the class java.lang.Object. */
+
+static tree
+build_super_invocation ()
+{
+  if (current_class == object_type_node)
+    return size_zero_node;
+  else
+    {
+      tree super_wfl = build_wfl_node (super_identifier_node, 
+                                      input_filename, 0, 0);
+      return build_method_invocation (super_wfl, NULL_TREE);
+    }
+}
+
+/* Build a SUPER/THIS qualified method invocation.  */
+
+static tree
+build_this_super_qualified_invocation (use_this, name, args, lloc, rloc)
+     int use_this;
+     tree name, args;
+     int lloc, rloc;
+
+{
+  tree invok;
+  tree wfl = 
+    build_wfl_node ((use_this ? this_identifier_node : super_identifier_node),
+                   input_filename, 0, 0);
+  EXPR_WFL_LINECOL (wfl) = lloc;
+  invok = build_method_invocation (name, args);
+  return make_qualified_primary (wfl, invok, rloc);
+}
+
 /* Build an incomplete CALL_EXPR node. */
 
 static tree
@@ -9568,7 +10067,7 @@ patch_assignment (node, wfl_op1, wfl_op2)
      assignment into an array element, return it here. */
   if (TREE_CODE (node) == COMPOUND_EXPR)
     return node;
-      
+
   TREE_OPERAND (node, 0) = lvalue;
   TREE_OPERAND (node, 1) = new_rhs;
   TREE_TYPE (node) = lhs_type;
@@ -10451,7 +10950,7 @@ patch_unaryop (node, wfl_op)
          TREE_TYPE (node) = error_mark_node;
          error_found = 1;
        }
-      else if (FIELD_FINAL (op))
+      else if (DECL_P (op) && FIELD_FINAL (op))
        {
          parse_error_context 
            (wfl_op, "Can't assign a value to the final variable `%s'",
@@ -10921,11 +11420,19 @@ patch_return (node)
 
   if (error_found)
     {
-      char *t = strdup (lang_printable_name (mtype, 0));
-      parse_error_context (wfl_operator, "`return' with%s value from `%s %s'",
-                          (error_found == 1 ? "" : "out"), t,
-                          lang_printable_name (meth, 0));
-      free (t);
+      if (!DECL_CONSTRUCTOR_P (meth))
+       {
+         char *t = strdup (lang_printable_name (mtype, 0));
+         parse_error_context (wfl_operator, 
+                              "`return' with%s value from `%s %s'",
+                              (error_found == 1 ? "" : "out"), 
+                              t, lang_printable_name (meth, 0));
+         free (t);
+       }
+      else
+       parse_error_context (wfl_operator, 
+                            "`return' with value from constructor `%s'",
+                            lang_printable_name (meth, 0));
       return error_mark_node;
     }
 
@@ -11970,3 +12477,107 @@ purge_unchecked_exceptions (mdecl)
   /* List is inverted here, but it doesn't matter */
   DECL_FUNCTION_THROWS (mdecl) = new;
 }
+
+/* 15.24 Conditional Operator ?: */
+
+static tree
+patch_conditional_expr (node, wfl_cond, wfl_op1)
+     tree node, wfl_cond, wfl_op1;
+{
+  tree cond = TREE_OPERAND (node, 0);
+  tree op1 = TREE_OPERAND (node, 1);
+  tree op2 = TREE_OPERAND (node, 2);
+  tree t1 = TREE_TYPE (op1);
+  tree t2 = TREE_TYPE (op2);
+  tree resulting_type = NULL_TREE;
+  int error_found = 0;
+
+  /* The first expression must be a boolean */
+  if (TREE_TYPE (cond) != boolean_type_node)
+    {
+      SET_WFL_OPERATOR (wfl_operator, node, wfl_cond);
+      parse_error_context (wfl_operator, "Incompatible type for `?:'. Can't "
+                          "convert `%s' to `boolean'",
+                          lang_printable_name (TREE_TYPE (cond), 0));
+      error_found = 1;
+    }
+
+  /* Second and third can be numeric, boolean (i.e. primitive),
+     references or null. Anything else results in an error */
+  if (!((JNUMERIC_TYPE_P (t1) && JNUMERIC_TYPE_P (t2))
+       || ((JREFERENCE_TYPE_P (t1) || op1 == null_pointer_node) 
+           && (JREFERENCE_TYPE_P (t2) || op2 == null_pointer_node))
+       || (t1 == boolean_type_node && t2 == boolean_type_node)))
+    error_found = 1;
+
+  /* Determine the type of the conditional expression. Same types are
+     easy to deal with */
+  else if (t1 == t2)
+    resulting_type = t1;
+
+  /* There are different rules for numeric types */
+  else if (JNUMERIC_TYPE_P (t1))
+    {
+      /* if byte/short found, the resulting type is short */
+      if ((t1 == byte_type_node && t2 == short_type_node)
+         || (t1 == short_type_node && t2 == byte_type_node))
+       resulting_type = short_type_node;
+
+      /* If t1 is a constant int and t2 is of type byte, short or char
+        and t1's value fits in t2, then the resulting type is t2 */
+      else if ((t1 == int_type_node && TREE_CONSTANT (TREE_OPERAND (node, 1)))
+         && JBSC_TYPE_P (t2) && int_fits_type_p (TREE_OPERAND (node, 1), t2))
+       resulting_type = t2;
+
+      /* If t2 is a constant int and t1 is of type byte, short or char
+        and t2's value fits in t1, then the resulting type is t1 */
+      else if ((t2 == int_type_node && TREE_CONSTANT (TREE_OPERAND (node, 2)))
+         && JBSC_TYPE_P (t1) && int_fits_type_p (TREE_OPERAND (node, 2), t1))
+       resulting_type = t1;
+
+      /* Otherwise, binary numeric promotion is applied and the
+        resulting type is the promoted type of operand 1 and 2 */
+      else 
+       resulting_type = binary_numeric_promotion (t2, t2, 
+                                                  &TREE_OPERAND (node, 1), 
+                                                  &TREE_OPERAND (node, 2));
+    }
+
+  /* Cases of a reference and a null type */
+  else if (JREFERENCE_TYPE_P (t1) && op2 == null_pointer_node)
+    resulting_type = t1;
+
+  else if (JREFERENCE_TYPE_P (t2) && op1 == null_pointer_node)
+    resulting_type = t2;
+
+  /* Last case: different reference types. If a type can be converted
+     into the other one by assignment conversion, the latter
+     determines the type of the expression */
+  else if ((resulting_type = try_reference_assignconv (t1, op2)))
+    resulting_type = promote_type (t1);
+
+  else if ((resulting_type = try_reference_assignconv (t2, op1)))
+    resulting_type = promote_type (t2);
+
+  /* If we don't have any resulting type, we're in trouble */
+  if (!resulting_type)
+    {
+      char *t = strdup (lang_printable_name (t1, 0));
+      SET_WFL_OPERATOR (wfl_operator, node, wfl_op1);
+      parse_error_context (wfl_operator, "Incompatible type for `?:'. Can't "
+                          "convert `%s' to `%s'", t,
+                          lang_printable_name (t2, 0));
+      free (t);
+      error_found = 1;
+    }
+
+  if (error_found)
+    {
+      TREE_TYPE (node) = error_mark_node;
+      return error_mark_node;
+    }
+
+  TREE_TYPE (node) = resulting_type;
+  TREE_SET_CODE (node, COND_EXPR);
+  return node;
+}
index b0d90a1..bb9477a 100644 (file)
@@ -99,10 +99,14 @@ extern tree stabilize_reference PROTO ((tree));
       count++;                                                         \
     }
 
-#define ABSTRACT_CHECK(flag, v, cl, s)                         \
-  if ((flag) & (v))                                            \
-    parse_error_context (cl, s " method can't be abstract");
-
+#define ABSTRACT_CHECK(FLAG, V, CL, S)                         \
+  if ((FLAG) & (V))                                            \
+    parse_error_context ((CL), S " method can't be abstract");
+
+#define JCONSTRUCTOR_CHECK(FLAG, V, CL, S)                     \
+  if ((FLAG) & (V))                                            \
+    parse_error_context ((CL), "Constructor can't be %s", (S));        \
+      
 /* Misc. */
 #define exit_java_complete_class()             \
   {                                            \
@@ -159,6 +163,10 @@ extern tree stabilize_reference PROTO ((tree));
                                  && (JNUMERIC_TYPE_P ((TYPE))            \
                                  || TREE_CODE ((TYPE)) == BOOLEAN_TYPE))
 
+#define JBSC_TYPE_P(TYPE) ((TYPE) && (((TYPE) == byte_type_node)       \
+                                     || ((TYPE) == short_type_node)    \
+                                     || ((TYPE) == char_type_node)))
+
 /* Not defined in the LRM */
 #define JSTRING_TYPE_P(TYPE) ((TYPE)                                      \
                              && ((TYPE) == string_type_node ||            \
@@ -269,17 +277,16 @@ extern tree stabilize_reference PROTO ((tree));
 #define POP_EXCEPTIONS()                                               \
   currently_caught_type_list = TREE_CHAIN (currently_caught_type_list)
 
-/* Check that we're inside a try block */
+/* Check that we're inside a try block */
 #define IN_TRY_BLOCK_P()                               \
   (currently_caught_type_list                          \
    && ((TREE_VALUE (currently_caught_type_list) !=     \
        DECL_FUNCTION_THROWS (current_function_decl))   \
        || TREE_CHAIN (currently_caught_type_list)))
 
-/* Check that we have exceptions in E */
+/* Check that we have exceptions in E */
 #define EXCEPTIONS_P(E) ((E) ? TREE_VALUE (E) : NULL_TREE)
 
-
 /* Invocation modes, as returned by invocation_mode (). */
 enum {
   INVOKE_STATIC,
@@ -462,6 +469,7 @@ static jdeplist *reverse_jdep_list ();
 }
 #define COMPLETE_CHECK_OP_0(NODE) COMPLETE_CHECK_OP(NODE, 0)
 #define COMPLETE_CHECK_OP_1(NODE) COMPLETE_CHECK_OP(NODE, 1)
+#define COMPLETE_CHECK_OP_2(NODE) COMPLETE_CHECK_OP(NODE, 2)
 
 /* Building invocations: append(ARG) and StringBuffer(ARG) */
 #define BUILD_APPEND(ARG)                                                   \
@@ -567,6 +575,12 @@ struct parser_ctxt {
                                        labeled blocks. */
 
   int pending_block;                /* Pending block to close */
+
+  int explicit_constructor_p;       /* True when processing an
+                                       explicit constructor. This flag is 
+                                       used to trap illegal argument usage 
+                                       during an explicit constructor
+                                       invocation. */
 #endif /* JC1_LITE */
 };
 
@@ -611,8 +625,10 @@ static void check_abstract_method_header PROTO ((tree));
 static tree lookup_java_interface_method2 PROTO ((tree, tree));
 static tree resolve_expression_name PROTO ((tree));
 static tree maybe_create_class_interface_decl PROTO ((tree, tree, tree));
-static int check_class_interface_creation PROTO ((int, int, tree, tree, tree, tree));
-static tree patch_method_invocation_stmt PROTO ((tree, tree, tree, int *, tree *));
+static int check_class_interface_creation PROTO ((int, int, tree, 
+                                                 tree, tree, tree));
+static tree patch_method_invocation_stmt PROTO ((tree, tree, tree, 
+                                                int *, tree *, int));
 static int breakdown_qualified PROTO ((tree *, tree *, tree));
 static tree resolve_and_layout PROTO ((tree, tree));
 static tree resolve_no_layout PROTO ((tree, tree));
@@ -620,7 +636,7 @@ static int invocation_mode PROTO ((tree, int));
 static tree find_applicable_accessible_methods_list PROTO ((tree, tree, tree));
 static tree find_most_specific_methods_list PROTO ((tree));
 static int argument_types_convertible PROTO ((tree, tree));
-static tree patch_invoke PROTO ((tree, tree, tree));
+static tree patch_invoke PROTO ((tree, tree, tree, int));
 static tree lookup_method_invoke PROTO ((int, tree, tree, tree, tree));
 static tree register_incomplete_type PROTO ((int, tree, tree, tree));
 static tree obtain_incomplete_type PROTO ((tree));
@@ -704,6 +720,21 @@ static void check_thrown_exceptions PROTO ((int, tree));
 static int check_thrown_exceptions_do PROTO ((tree));
 static void purge_unchecked_exceptions PROTO ((tree));
 static void check_throws_clauses PROTO ((tree, tree, tree));
+static void complete_method_declaration PROTO ((tree));
+static tree build_super_invocation PROTO (());
+static int verify_constructor_circularity PROTO ((tree, tree));
+static char *constructor_circularity_msg PROTO ((tree, tree));
+static tree build_this_super_qualified_invocation PROTO ((int, tree, tree,
+                                                         int, int));
+static char *get_printable_method_name PROTO ((tree));
+static tree patch_conditional_expr PROTO ((tree, tree, tree));
+static void maybe_generate_finit PROTO (());
+static void fix_constructors PROTO ((tree));
+static int verify_constructor_super PROTO (());
+static tree create_artificial_method PROTO ((tree, int, tree, tree, tree));
+static void start_artificial_method_body PROTO ((tree));
+static void end_artificial_method_body PROTO ((tree));
+static tree generate_field_initialization_code PROTO ((tree));
 
 void safe_layout_class PROTO ((tree));
 void java_complete_class PROTO ((void));
index 84de8f7..c71178f 100644 (file)
@@ -35,7 +35,6 @@ Language Specification. J. Gosling, B. Joy, G. Steele. Addison Wesley
 The following modifications were brought to the original grammar:
 
 method_body: added the rule '| block SC_TK'
-constructor_declaration: added two rules to accept SC_TK. 
 static_initializer: added the rule 'static block SC_TK'. 
 
 Note: All the extra rules described above should go away when the
@@ -196,16 +195,16 @@ static tree wfl_to_string = NULL_TREE;
                        abstract_method_declaration interface_type_list
 %type   <node>         class_body_declaration class_member_declaration
                        static_initializer constructor_declaration block
-%type   <node>         class_body_declarations
+%type   <node>         class_body_declarations constructor_header
 %type    <node>                class_or_interface_type class_type class_type_list
                        constructor_declarator explicit_constructor_invocation
 %type    <node>         dim_expr dim_exprs this_or_super throws
 
 %type   <node>         variable_declarator_id variable_declarator
                        variable_declarators variable_initializer
-                       variable_initializers
+                       variable_initializers constructor_body
 
-%type   <node>         class_body
+%type   <node>         class_body block_end
 %type   <node>         block_statement local_variable_declaration_statement
                        block_statements local_variable_declaration
 %type   <node>         statement statement_without_trailing_substatement
@@ -448,6 +447,7 @@ type_declaration:
        class_declaration
                {
                  maybe_generate_clinit ();
+                 maybe_generate_finit ();
                  $$ = $1;
                }
 |      interface_declaration
@@ -644,18 +644,7 @@ method_declaration:
                  source_start_java_method (current_function_decl);
                }
        method_body
-               { 
-                 BLOCK_EXPR_BODY 
-                   (DECL_FUNCTION_BODY (current_function_decl)) = $3;
-                 maybe_absorb_scoping_blocks ();
-                 exit_block (); /* Exit function's body. */
-
-                 /* Merge last line of the function with first line,
-                    directly in the function decl. It will be used to
-                    emit correct debug info. */
-                 DECL_SOURCE_LINE_MERGE (current_function_decl,
-                                         ctxp->last_ccb_indent1);
-               }
+               { complete_method_declaration ($3); }
 |      method_header error
                {YYNOT_TWICE yyerror ("'{' expected"); RECOVER;}
 ;
@@ -774,51 +763,61 @@ static:                           /* Test lval.sub_token here */
 ;
 
 /* 19.8.5 Productions from 8.6: Constructor Declarations  */
-/* NOTE FOR FURTHER WORK ON CONSTRUCTORS:
-   - If a forbidded modifier is found, the the error is either the use of
-     a forbidded modifier for a constructor OR bogus attempt to declare a
-     method without having specified the return type. FIXME */
 constructor_declaration:
-       constructor_declarator throws constructor_body
-               {
-                 RULE ("CONSTRUCTOR_DECLARATION");
-               }
-|      modifiers constructor_declarator throws constructor_body
+       constructor_header
                {
-                 SOURCE_FRONTEND_DEBUG (("Modifiers: %d", $1));
-                 RULE ("CONSTRUCTOR_DECLARATION (modifier)");
-               }
-/* extra SC_TK, FIXME */
-|      constructor_declarator throws constructor_body SC_TK
-               {
-                 RULE ("CONSTRUCTOR_DECLARATION");
-               }
-/* extra SC_TK, FIXME */
-|      modifiers constructor_declarator throws constructor_body SC_TK
-               {
-                 SOURCE_FRONTEND_DEBUG (("Modifiers: %d", $1));
-                 RULE ("CONSTRUCTOR_DECLARATION (modifier)");
+                 current_function_decl = $1;
+                 source_start_java_method (current_function_decl);
                }
-/* I'm not happy with the SC_TK addition. It isn't in the grammer and should
-   probably be matched by and empty statement. But it doesn't work. FIXME */
+       constructor_body
+               { complete_method_declaration ($3); }
+;
+
+constructor_header:
+       constructor_declarator throws
+               { $$ = method_header (0, NULL_TREE, $1, $2); }
+|      modifiers constructor_declarator throws
+               { $$ = method_header ($1, NULL_TREE, $2, $3); }
 ;
 
 constructor_declarator:
        simple_name OP_TK CP_TK
+               { $$ = method_declarator ($1, NULL_TREE); }
 |      simple_name OP_TK formal_parameter_list CP_TK
+               { $$ = method_declarator ($1, $3); }
 ;
 
 constructor_body:
-       OCB_TK CCB_TK
-|      OCB_TK explicit_constructor_invocation CCB_TK
-|      OCB_TK block_statements CCB_TK
-|       OCB_TK explicit_constructor_invocation block_statements CCB_TK
+       /* Unlike regular method, we always need a complete (empty)
+          body so we can safely perform all the required code
+          addition (super invocation and field initialization) */
+       block_begin block_end
+               { 
+                 BLOCK_EXPR_BODY ($2) = size_zero_node;
+                 $$ = $2;
+               }
+|      block_begin explicit_constructor_invocation block_end
+               { $$ = $3; }
+|      block_begin block_statements block_end
+               { $$ = $3; }
+|       block_begin explicit_constructor_invocation block_statements block_end
+               { $$ = $4; }
 ;
 
 /* Error recovery for that rule moved down expression_statement: rule.  */
 explicit_constructor_invocation:
        this_or_super OP_TK CP_TK SC_TK
+               { 
+                 $$ = build_method_invocation ($1, NULL_TREE); 
+                 $$ = build_debugable_stmt (EXPR_WFL_LINECOL ($1), $$);
+                 $$ = java_method_add_stmt (current_function_decl, $$);
+               }
 |      this_or_super OP_TK argument_list CP_TK SC_TK
+               { 
+                 $$ = build_method_invocation ($1, $3); 
+                 $$ = build_debugable_stmt (EXPR_WFL_LINECOL ($1), $$);
+                 $$ = java_method_add_stmt (current_function_decl, $$);
+               }
         /* Added, JDK1.1 inner classes. Modified because the rule
           'primary' couldn't work.  */
 |      name DOT_TK SUPER_TK OP_TK argument_list CP_TK SC_TK
@@ -960,9 +959,16 @@ variable_initializers:
 block:
        OCB_TK CCB_TK
                { $$ = size_zero_node; }
-|      OCB_TK 
+|      block_begin block_statements block_end
+               { $$ = $3; }
+;
+
+block_begin:
+       OCB_TK
                { enter_block (); }
-       block_statements
+;
+
+block_end:
        CCB_TK
                { 
                  maybe_absorb_scoping_blocks ();
@@ -1101,11 +1107,19 @@ expression_statement:
 |       this_or_super OP_TK error
                {yyerror ("')' expected"); RECOVER;}
 |       this_or_super OP_TK CP_TK error
-               {yyerror ("';' expected"); RECOVER;}
+               {
+                 yyerror ("Constructor invocation must be first "
+                          "thing in a constructor"); 
+                 RECOVER;
+               }
 |       this_or_super OP_TK argument_list error
                {yyerror ("')' expected"); RECOVER;}
 |       this_or_super OP_TK argument_list CP_TK error
-               {yyerror ("';' expected"); RECOVER;}
+               {
+                 yyerror ("Constructor invocation must be first "
+                          "thing in a constructor"); 
+                 RECOVER;
+               }
 |      name DOT_TK SUPER_TK error
                {yyerror ("'(' expected"); RECOVER;}
 |      name DOT_TK SUPER_TK OP_TK error
@@ -1666,31 +1680,35 @@ method_invocation:
                { $$ = build_method_invocation ($1, $3); }
 |      primary DOT_TK identifier OP_TK CP_TK
                { 
-                 tree invok = build_method_invocation ($3, NULL_TREE);
-                 $$ = make_qualified_primary ($1, invok, $2.location);
+                 if (TREE_CODE ($1) == THIS_EXPR)
+                   $$ = build_this_super_qualified_invocation 
+                     (1, $3, NULL_TREE, 0, $2.location);
+                 else
+                   {
+                     tree invok = build_method_invocation ($3, NULL_TREE);
+                     $$ = make_qualified_primary ($1, invok, $2.location);
+                   }
                }
 |      primary DOT_TK identifier OP_TK argument_list CP_TK
                { 
-                 tree invok = build_method_invocation ($3, $5);
-                 $$ = make_qualified_primary ($1, invok, $2.location);
+                 if (TREE_CODE ($1) == THIS_EXPR)
+                   $$ = build_this_super_qualified_invocation 
+                     (1, $3, $5, 0, $2.location);
+                 else
+                   {
+                     tree invok = build_method_invocation ($3, $5);
+                     $$ = make_qualified_primary ($1, invok, $2.location);
+                   }
                }
 |      SUPER_TK DOT_TK identifier OP_TK CP_TK
-               {
-                 tree invok;
-                 tree wfl = build_wfl_node (super_identifier_node, 
-                                            input_filename, 0, 0);
-                 EXPR_WFL_LINECOL (wfl) = $1.location;
-                 invok = build_method_invocation ($3, NULL_TREE);
-                 $$ = make_qualified_primary (wfl, invok, $2.location);
+               { 
+                 $$ = build_this_super_qualified_invocation 
+                   (0, $3, NULL_TREE, $1.location, $2.location);
                }
 |      SUPER_TK DOT_TK identifier OP_TK argument_list CP_TK
                {
-                 tree invok;
-                 tree wfl = build_wfl_node (super_identifier_node, 
-                                            input_filename, 0, 0);
-                 EXPR_WFL_LINECOL (wfl) = $1.location;
-                 invok = build_method_invocation ($3, $5);
-                 $$ = make_qualified_primary (wfl, invok, $2.location);
+                 $$ = build_this_super_qualified_invocation 
+                   (0, $3, $5, $1.location, $2.location);
                }
         /* Screws up thing. I let it here until I'm convinced it can
            be removed. FIXME
@@ -2006,6 +2024,10 @@ conditional_or_expression:
 conditional_expression:                /* Error handling here is weak */
        conditional_or_expression
 |      conditional_or_expression REL_QM_TK expression REL_CL_TK conditional_expression
+               {
+                 $$ = build (CONDITIONAL_EXPR, NULL_TREE, $1, $3, $5);
+                 EXPR_WFL_LINECOL ($$) = $2.location;
+               }
 |      conditional_or_expression REL_QM_TK REL_CL_TK error
                {
                  YYERROR_NOW;
@@ -2079,9 +2101,20 @@ java_push_parser_context ()
     ctxp->incomplete_class = ctxp->next->incomplete_class;
 }  
 
+/* If the first file of a file list was a class file, no context
+   exists for a source file to be parsed. This boolean remembers that
+   java_parser_context_save_global might have created a dummy one, so
+   that java_parser_context_restore_global can pop it.  */
+static int extra_ctxp_pushed_p = 0;
+
 void
 java_parser_context_save_global ()
 {
+  if (!ctxp)
+    {
+      java_push_parser_context ();
+      extra_ctxp_pushed_p = 1;
+    }
   ctxp->finput = finput;
   ctxp->lineno = lineno;
   ctxp->current_class = current_class;
@@ -2097,6 +2130,11 @@ java_parser_context_restore_global ()
   current_class = ctxp->current_class;
   input_filename = ctxp->filename;
   current_function_decl = ctxp->current_function_decl;
+  if (extra_ctxp_pushed_p)
+    {
+      java_pop_parser_context (0);
+      extra_ctxp_pushed_p = 0;
+    }
 }
 
 void 
@@ -2375,6 +2413,7 @@ build_array_from_name (type, type_wfl, name, ret_name)
       if (JPRIMITIVE_TYPE_P (type))
        {
          type = build_java_array_type (type, -1);
+         CLASS_LOADED_P (type) = 1;
          more_dims--;
        }
       /* Otherwise, if we have a WFL for this type, use it (the type
@@ -2804,10 +2843,15 @@ register_fields (flags, type, variable_list)
 
       /* Type adjustment. We may have just readjusted TYPE because
         the variable specified more dimensions. Make sure we have
-        a reference if we can and don't have one already. */
-      if (type != saved_type && !must_chain 
-         && (TREE_CODE (type) == RECORD_TYPE))
-       type = promote_type (type);
+        a reference if we can and don't have one already. Also
+        change the name if we have an init. */
+      if (type != saved_type)
+       {
+         if (!must_chain && (TREE_CODE (type) == RECORD_TYPE))
+           type = promote_type (type);
+         if (init)
+           EXPR_WFL_NODE (TREE_OPERAND (init, 0)) = current_name;
+       }
 
       /* Set lineno to the line the field was found and create a
          declaration for it */
@@ -2848,6 +2892,7 @@ register_fields (flags, type, variable_list)
             time of the generation of <init>. */
          else
            {
+             INITIALIZED_P (field_decl) = 1;
              TREE_CHAIN (init) = ctxp->non_static_initialized;
              ctxp->non_static_initialized = init;
            }
@@ -2856,36 +2901,49 @@ register_fields (flags, type, variable_list)
   lineno = saved_lineno;
 }
 
+/* Generate the method <finit> that initializes fields initialized
+   upon declaration.  */
+
+static void
+maybe_generate_finit ()
+{
+  tree mdecl, current;
+  
+  if (!ctxp->non_static_initialized || java_error_count)
+    return;
+
+  mdecl = create_artificial_method (TREE_TYPE (ctxp->current_parsed_class),
+                                   ACC_PRIVATE|ACC_FINAL, void_type_node,
+                                   finit_identifier_node, NULL_TREE);
+  start_artificial_method_body (mdecl);
+
+  ctxp->non_static_initialized = nreverse (ctxp->non_static_initialized);
+  for (current = ctxp->non_static_initialized; current;
+       current = TREE_CHAIN (current))
+    java_method_add_stmt (mdecl, 
+                         build_debugable_stmt (EXPR_WFL_LINECOL (current), 
+                                               current));
+
+  end_artificial_method_body (mdecl);
+  CLASS_HAS_FINIT_P (TREE_TYPE (ctxp->current_parsed_class)) = 1;
+  ctxp->non_static_initialized = NULL_TREE;
+}
+
 /* Check whether it is necessary to generate a <clinit> for the class
    we just parsed. */
 
 static void
 maybe_generate_clinit ()
 {
-  int saved_lineno;
-  tree meth, mdecl, c;
-  tree cclass, class_wfl;
+  tree mdecl, c;
 
   if (!ctxp->static_initialized || java_error_count)
     return;
 
-  cclass = TREE_TYPE (ctxp->current_parsed_class);
-  class_wfl = build_expr_wfl (DECL_NAME (TYPE_NAME (cclass)),
-                             input_filename, 0, 0);
-  
-  saved_lineno = lineno;
-  lineno = 0;
-  meth = make_node (FUNCTION_TYPE);
-  TREE_TYPE (meth) = void_type_node;
-  TYPE_ARG_TYPES (meth) = NULL_TREE;
-  mdecl = add_method (cclass, ACC_STATIC, clinit_identifier_node,
-                    build_java_signature (meth));
-  lineno = saved_lineno;
-
-  DECL_SOURCE_LINE (mdecl) = 1;
-  DECL_SOURCE_LINE_MERGE (mdecl, 1);
-  source_start_java_method (mdecl);
-  enter_block ();
+  mdecl = create_artificial_method (TREE_TYPE (ctxp->current_parsed_class),
+                                   ACC_STATIC, void_type_node,
+                                   clinit_identifier_node, NULL_TREE);
+  start_artificial_method_body (mdecl);
 
   /* Keep initialization in order to enforce 8.5 */
   ctxp->static_initialized = nreverse (ctxp->static_initialized);
@@ -2898,11 +2956,11 @@ maybe_generate_clinit ()
       /* We build the assignment expression that will initialize the
         field to its value. There are strict rules on static
         initializers (8.5). FIXME */
-      java_method_add_stmt (mdecl, c);
+      java_method_add_stmt (mdecl, 
+                           build_debugable_stmt (EXPR_WFL_LINECOL (c), c));
     }
 
-  BLOCK_EXPR_BODY (DECL_FUNCTION_BODY (mdecl)) = exit_block ();
-  exit_block ();
+  end_artificial_method_body (mdecl);
   ctxp->static_initialized = NULL_TREE;
 }
 
@@ -2917,7 +2975,8 @@ static int patch_stage;
 /* Check the method declaration and add the method to its current
    class.  If the argument list is known to contain incomplete types,
    the method is partially added and the registration will be resume
-   once the method arguments resolved  */
+   once the method arguments resolved. If TYPE is NULL, we're dealing
+   with a constructor.  */
 
 static tree
 method_header (flags, type, mdecl, throws)
@@ -2929,12 +2988,13 @@ method_header (flags, type, mdecl, throws)
   tree this_class = TREE_TYPE (ctxp->current_parsed_class);
   tree meth_name, returned_type, current;
   int saved_lineno;
+  int constructor_ok = 0;
   
   check_modifiers_consistency (flags);
   
   /* There are some forbidden modifiers for an abstract method and its
      class must be abstract as well.  */
-  if (flags & ACC_ABSTRACT)
+  if (type && (flags & ACC_ABSTRACT))
     {
       ABSTRACT_CHECK (flags, ACC_PRIVATE, id, "Private");
       ABSTRACT_CHECK (flags, ACC_STATIC, id, "Static");
@@ -2948,7 +3008,30 @@ method_header (flags, type, mdecl, throws)
           IDENTIFIER_POINTER (DECL_NAME (ctxp->current_parsed_class)),
           IDENTIFIER_POINTER (EXPR_WFL_NODE (id)));
     }
-
+  /* Things to be checked when declaring a constructor */
+  if (!type)
+    {
+      int ec = java_error_count;
+      /* 8.6: Constructor declarations: we might be trying to define a
+         method without specifying a return type. */
+      if (EXPR_WFL_NODE (id) != DECL_NAME (ctxp->current_parsed_class))
+       parse_error_context 
+         (id, "Invalid method declaration, return type required");
+      /* 8.6.3: Constructor modifiers */
+      else
+       {
+         JCONSTRUCTOR_CHECK (flags, ACC_ABSTRACT, id, "abstract");
+         JCONSTRUCTOR_CHECK (flags, ACC_STATIC, id, "static");
+         JCONSTRUCTOR_CHECK (flags, ACC_FINAL, id, "final");
+         JCONSTRUCTOR_CHECK (flags, ACC_NATIVE, id, "native");
+         JCONSTRUCTOR_CHECK (flags, ACC_SYNCHRONIZED, id, "synchronized");
+       }
+      /* If we found error here, we don't consider it's OK to tread
+        the method definition as a constructor, for the rest of this
+        function */
+      if (ec == java_error_count)
+       constructor_ok = 1;
+    }
 
   /* Method declared within the scope of an interface are implicitly
      abstract and public. Conflicts with other erroneously provided
@@ -2970,7 +3053,17 @@ method_header (flags, type, mdecl, throws)
   /* Modifiers context reset moved up, so abstract method declaration
      modifiers can be later checked.  */
 
-  meth_name = EXPR_WFL_NODE (id);
+  /* Set constructor returned type to void and method name to <init>,
+     unless we found an error identifier the constructor (in which
+     case we retain the original name) */
+  if (!type)
+    {
+      type = void_type_node;
+      if (constructor_ok)
+       meth_name = init_identifier_node;
+    }
+  else
+    meth_name = EXPR_WFL_NODE (id);
 
   if (unresolved_type_p (type, &returned_type))
     {
@@ -3055,12 +3148,92 @@ method_header (flags, type, mdecl, throws)
      redefinition error accurately. When method are verified,
      DECL_NAME is reinstalled properly (using the content of the
      WFL node ID) (see check_method_redefinition). We don't do that
-     when Object is being defined. */
+     when Object is being defined. Constructor <init> names will be
+     reinstalled the same way. */
   if (TREE_TYPE (ctxp->current_parsed_class) != object_type_node)
     DECL_NAME (meth) = id;
+
+  /* Set the flag if we correctly processed a constructor */
+  if (constructor_ok)
+    DECL_CONSTRUCTOR_P (meth) = 1;
+
   return meth;
 }
 
+/* Complete the method declaration with METHOD_BODY.  */
+
+static void
+complete_method_declaration (method_body)
+     tree method_body;
+{
+  BLOCK_EXPR_BODY (DECL_FUNCTION_BODY (current_function_decl)) = method_body;
+  maybe_absorb_scoping_blocks ();
+  /* Exit function's body */
+  exit_block ();
+  /* Merge last line of the function with first line, directly in the
+     function decl. It will be used to emit correct debug info. */
+  DECL_SOURCE_LINE_MERGE (current_function_decl, ctxp->last_ccb_indent1);
+}
+
+/* Build a an error message for constructor circularity errors.  */
+
+static char *
+constructor_circularity_msg (from, to)
+     tree from, to;
+{
+  static char string [4096];
+  char *t = strdup (lang_printable_name (from, 0));
+  sprintf (string, "`%s' invokes `%s'", t, lang_printable_name (to, 0));
+  free (t);
+  return string;
+}
+
+/* Verify a circular call to METH. Return 1 if an error is found, 0
+   otherwise.  */
+
+static int
+verify_constructor_circularity (meth, current)
+     tree meth, current;
+{
+  static tree list = NULL_TREE;
+  tree c;
+  for (c = DECL_CONSTRUCTOR_CALLS (current); c; c = TREE_CHAIN (c))
+    {
+      if (TREE_VALUE (c) == meth)
+       {
+         char *t;
+         if (list)
+           {
+             tree liste;
+             list = nreverse (list);
+             for (liste = list; liste; liste = TREE_CHAIN (liste))
+               {
+                 parse_error_context 
+                   (TREE_PURPOSE (TREE_PURPOSE (liste)),
+                    constructor_circularity_msg
+                     (TREE_VALUE (liste), TREE_VALUE (TREE_PURPOSE (liste)))); 
+                 java_error_count--;
+               }
+           }
+         t = strdup (lang_printable_name (meth, 0));
+         parse_error_context (TREE_PURPOSE (c), 
+                              "%s: recursive invocation of constructor `%s'",
+                              constructor_circularity_msg (current, meth), t);
+         free (t);
+         list = NULL_TREE;
+         return 1;
+       }
+    }
+  for (c = DECL_CONSTRUCTOR_CALLS (current); c; c = TREE_CHAIN (c))
+    {
+      list = tree_cons (c, current, list);
+      if (verify_constructor_circularity (meth, TREE_VALUE (c)))
+       return 1;
+      list = TREE_CHAIN (list);
+    }
+  return 0;
+}
+
 /* Check modifiers that can be declared but exclusively */
 
 static void
@@ -3797,6 +3970,36 @@ java_check_final ()
 {
 }
 
+/* Return a static string containing the DECL prototype string. If
+   DECL is a constructor, use the class name instead of the form
+   <init> */
+
+static char *
+get_printable_method_name (decl)
+     tree decl;
+{
+  char *to_return;
+  tree name;
+
+  if (DECL_CONSTRUCTOR_P (decl))
+    {
+      name = DECL_NAME (decl);
+      DECL_NAME (decl) = 
+       DECL_NAME (ctxp->current_parsed_class ? 
+                  ctxp->current_parsed_class : current_class);
+    }
+      
+  to_return = lang_printable_name (decl, 0);
+  if (DECL_CONSTRUCTOR_P (decl))
+    DECL_NAME (decl) = name;
+  
+  return to_return;
+}
+
+/* Track method being redefined inside the same class. As a side
+   effect, set DECL_NAME to an IDENTIFIER (prior entering this
+   function it's a FWL, so we can track errors more accurately */
+
 static int
 check_method_redefinition (class, method)
      tree class, method;
@@ -3804,14 +4007,17 @@ check_method_redefinition (class, method)
   tree redef, name;
   tree cl = DECL_NAME (method);
   tree sig = TYPE_LANG_SPECIFIC (TREE_TYPE (method))->signature;
-  /* decl name of generated <clinit> doesn't need to be fixed and
+  /* decl name of artificial <clinit> and <finit> doesn't need to be fixed and
      checked */
-  if (DECL_NAME (method) != clinit_identifier_node)
+  if (DECL_NAME (method) != clinit_identifier_node
+      && DECL_NAME (method) != finit_identifier_node)
     {
       /* NAME is just the plain name when Object is being defined */
       if (class != object_type_node)
-       name = DECL_NAME (method) = EXPR_WFL_NODE (DECL_NAME (method));
-      else
+       name = DECL_NAME (method) = (DECL_CONSTRUCTOR_P (method) ? 
+                                    init_identifier_node :
+                                    EXPR_WFL_NODE (DECL_NAME (method)));
+      else 
        name = DECL_NAME (method);
     }
   else 
@@ -3825,7 +4031,10 @@ check_method_redefinition (class, method)
        break;
       if (DECL_NAME (redef) == name && sig == t->signature)
        {
-         parse_error_context (cl, "Duplicate method declaration");
+         parse_error_context 
+           (cl, "Duplicate %s declaration `%s'",
+            (DECL_CONSTRUCTOR_P (redef) ? "constructor" : "method"),
+            get_printable_method_name (redef));
          return 1;
        }
     }
@@ -3843,7 +4052,7 @@ java_check_regular_methods (class_decl)
   tree method;
   tree class = CLASS_TO_HANDLE_TYPE (TREE_TYPE (class_decl));
   tree super_class = CLASSTYPE_SUPER (class);
-  int seen_constructor = 0;
+  int saw_constructor = 0;
 
   TYPE_METHODS (class) = nreverse (TYPE_METHODS (class));
 
@@ -3854,13 +4063,19 @@ java_check_regular_methods (class_decl)
       tree method_wfl = DECL_NAME (method);
       int aflags;
 
-     if (DECL_CONSTRUCTOR_P (method))
-       seen_constructor = 1;
-
       /* Check for redefinitions */
       if (check_method_redefinition (class, method))
        continue;
 
+      /* If we see one constructor a mark so we don't generate the
+        default one. Also skip other verifications: constructors
+        can't be inherited hence hiden or overriden */
+     if (DECL_CONSTRUCTOR_P (method))
+       {
+        saw_constructor = 1;
+        continue;
+       }
+
       sig = build_java_argument_signature (TREE_TYPE (method));
 
       found = lookup_argument_method (super_class, DECL_NAME (method), sig);
@@ -3951,19 +4166,20 @@ java_check_regular_methods (class_decl)
   
   TYPE_METHODS (class) = nreverse (TYPE_METHODS (class));
 
-  if (!seen_constructor)
+  if (!saw_constructor)
     {
       /* No constructor seen, we craft one, at line 0 */
-      int saved_lineno = lineno;
-      tree meth, decl;
-      lineno = 0;
-      meth = make_node (FUNCTION_TYPE);
-      TREE_TYPE (meth) = void_type_node;
-      TYPE_ARG_TYPES (meth) = NULL_TREE; 
-      decl = add_method (class, 0, init_identifier_node,
-                        build_java_signature (meth));
+      int flags;
+      tree decl;
+
+      /* If the class is declared PUBLIC, the default constructor is
+         PUBLIC otherwise it has default access implied by no access
+         modifiers. */
+      flags = (get_access_flags_from_decl (class_decl) & ACC_PUBLIC ?
+              ACC_PUBLIC : 0);
+      decl = create_artificial_method (class, flags, void_type_node, 
+                                      init_identifier_node, NULL_TREE);
       DECL_CONSTRUCTOR_P (decl) = 1;
-      lineno = saved_lineno;
     }
 }
 
@@ -4075,7 +4291,6 @@ java_check_abstract_methods (interface)
 void
 java_check_methods ()
 {
-
   tree current;
   for (current = ctxp->class_list; current; current = TREE_CHAIN (current))
     if (CLASS_FROM_SOURCE_P (TREE_TYPE (current)))
@@ -4633,6 +4848,47 @@ source_start_java_method (fndecl)
   DECL_ARG_SLOT_COUNT (current_function_decl) = i;
 }
 
+/* Called during parsing. Creates an artificial method declaration.  */
+
+static tree
+create_artificial_method (class, flags, type, name, args)
+     tree class;
+     int flags;
+     tree type, name, args;
+{
+  int saved_lineno = lineno;                                       
+  tree mdecl;
+
+  lineno = 0;                                                              
+  mdecl = make_node (FUNCTION_TYPE);                               
+  TREE_TYPE (mdecl) = type;
+  TYPE_ARG_TYPES (mdecl) = args;
+  mdecl = add_method (class, flags, name, build_java_signature (mdecl)); 
+  lineno = saved_lineno;                                                   
+  DECL_ARTIFICIAL (mdecl) = 1;                                     
+  return mdecl;
+}
+
+/* Starts the body if an artifical method.  */
+
+static void
+start_artificial_method_body (mdecl)
+     tree mdecl;
+{
+  DECL_SOURCE_LINE (mdecl) = 1;
+  DECL_SOURCE_LINE_MERGE (mdecl, 1);
+  source_start_java_method (mdecl);
+  enter_block ();
+}
+
+static void
+end_artificial_method_body (mdecl)
+     tree mdecl;
+{
+  BLOCK_EXPR_BODY (DECL_FUNCTION_BODY (mdecl)) = exit_block ();
+  exit_block ();
+}
+
 /* Called during expansion. Push decls formerly built from argument
    list so they're usable during expansion. */
 
@@ -4765,7 +5021,8 @@ add_stmt_to_compound (existing, type, stmt)
 /* Hold THIS for the scope of the current public method decl.  */
 static tree current_this;
 
-/* Layout all class found during parsing */
+/* Layout all class found during parsing. Also fixes the order of
+   several field related lists. */
 
 void
 java_layout_classes ()
@@ -4774,8 +5031,16 @@ java_layout_classes ()
   for (current = ctxp->class_list; current; current = TREE_CHAIN (current))
     {
       current_class = TREE_TYPE (current);
-      TYPE_FIELDS (current_class) = nreverse (TYPE_FIELDS (current_class));
-      if (!TYPE_SIZE (current_class))
+
+      /* Reverse the fields if it's necessary (they've already
+         reversed if the dummy field has been inserted at the
+         beginning of the list */
+      if (TYPE_FIELDS (current_class)
+         && !DECL_IGNORED_P (TYPE_FIELDS (current_class)))
+       TYPE_FIELDS (current_class) = nreverse (TYPE_FIELDS (current_class));
+      
+      /* Do a layout if necessary */
+      if (!TYPE_SIZE (current_class) || (current_class == object_type_node))
        safe_layout_class (current_class);
     }
 }
@@ -4819,6 +5084,14 @@ java_complete_expand_methods ()
              java_complete_expand_method (decl);
          }
 
+      /* Now verify constructor circularity (stop after the first one
+         we find) */
+      if (!CLASS_INTERFACE (TYPE_NAME (current_class)))
+       for (decl = TYPE_METHODS (class_type); decl; decl = TREE_CHAIN (decl))
+         if (DECL_CONSTRUCTOR_P (decl) && 
+             verify_constructor_circularity (decl, decl))
+           break;
+
       /* Make the class data, register it and run the rest of decl
          compilation on it */
       if (!java_error_count && ! flag_emit_class_files)
@@ -4841,51 +5114,11 @@ static void
 java_complete_expand_method (mdecl)
      tree mdecl;
 {
-  int no_ac_found = 1;
-
-  /* We generate some code for an empty constructor */
-  if (DECL_CONSTRUCTOR_P (mdecl) && !DECL_FUNCTION_BODY (mdecl))
-    {
-      tree arg_list, func, call;
-      tree method_type = TREE_TYPE (mdecl);
-      tree class_type = CLASS_TO_HANDLE_TYPE (current_class);
-      tree self_type = (CLASSTYPE_SUPER (class_type) ? 
-                       CLASSTYPE_SUPER (class_type) : class_type);
-      tree method_signature = 
-       TYPE_LANG_SPECIFIC (method_type)->signature;
-      tree method = 
-       lookup_java_constructor (CLASS_TO_HANDLE_TYPE (self_type),
-                                method_signature);
-      tree block, compound;
-
-      /* Fixe the begining/ending lines of the method so that with
-         no_line_numbers set to 1 it doesn't generate debug info at
-         line 1 for this artificial constructor. */
-      DECL_SOURCE_LINE (mdecl) = 1;
-      DECL_SOURCE_LINE_MERGE (mdecl, 1);
-      source_start_java_method (mdecl);
-      arg_list = BLOCK_EXPR_DECLS (DECL_FUNCTION_BODY (mdecl));
-      enter_block ();
-      func = build_known_method_ref (method, method_type, self_type,
-                                    method_signature, arg_list);
-      
-      if (! flag_emit_class_files)
-       func = build1 (NOP_EXPR, build_pointer_type (method_type), func);
-      call = build (CALL_EXPR, TREE_TYPE (method_type), func, 
-                   build_tree_list (NULL_TREE, arg_list), NULL_TREE);
-      TREE_SIDE_EFFECTS (call) = 1;
-      call = build_class_init (self_type, call);
-      compound = java_method_add_stmt (mdecl, call);
-      block = exit_block ();
-      BLOCK_EXPR_BODY (DECL_FUNCTION_BODY (mdecl)) = block;
-      /* The function decl, its block and the compound statement
-         within this block are all of void type. */
-      TREE_TYPE (block) = TREE_TYPE (compound) = 
-       TREE_TYPE (DECL_FUNCTION_BODY (mdecl)) = void_type_node;
-      exit_block ();
-      no_ac_found = 0;
-    }
+  /* Fix constructors before expanding them */
+  if (DECL_CONSTRUCTOR_P (mdecl))
+    fix_constructors (mdecl);
   
+  /* Expand functions that have a body */
   if (DECL_FUNCTION_BODY (mdecl))
     {
       expand_start_java_method (mdecl);
@@ -4900,12 +5133,17 @@ java_complete_expand_method (mdecl)
       /* Install exceptions thrown with `throws' */
       PUSH_EXCEPTIONS (DECL_FUNCTION_THROWS (mdecl));
 
-      if (BLOCK_EXPR_BODY (DECL_FUNCTION_BODY (mdecl)) && no_ac_found)
+      if (BLOCK_EXPR_BODY (DECL_FUNCTION_BODY (mdecl)))
        java_complete_tree (BLOCK_EXPR_BODY (DECL_FUNCTION_BODY (mdecl)));
       /* Don't go any further if we've found error(s) during the
          expansion */
       if (!java_error_count)
        source_end_java_method ();
+      else
+       {
+         pushdecl_force_head (DECL_ARGUMENTS (mdecl));
+         poplevel (1, 0, 1);
+       }
 
       /* Pop the exceptions and sanity check */
       POP_EXCEPTIONS();
@@ -4914,6 +5152,136 @@ java_complete_expand_method (mdecl)
     }
 }
 
+/* Craft a body for default constructor. Patch existing constructor
+   bodies with call to super() and field initialization statements if
+   necessary.  */
+
+static void
+fix_constructors (mdecl)
+     tree mdecl;
+{
+  tree body = DECL_FUNCTION_BODY (mdecl);
+  tree field_init;
+
+  /* The constructor body must be crafted by hand. It's the
+     constructor we defined when we realize we didn't have the
+     CLASSNAME() constructor */
+  if (!body)
+    {
+      tree compound;
+
+      /* It is an error for the compiler to generate a default
+        constructor if the superclass doesn't have a constructor that
+        takes no argument */
+      if (verify_constructor_super ())
+       {
+         tree sclass_decl = TYPE_NAME (CLASSTYPE_SUPER (current_class));
+         char *n = IDENTIFIER_POINTER (DECL_NAME (sclass_decl));
+         parse_error_context (lookup_cl (TYPE_NAME (current_class)), 
+                              "No constructor matching `%s()' found in "
+                              "class `%s'", n, n);
+       }
+      
+      start_artificial_method_body (mdecl);
+      
+      /* We don't generate a super constructor invocation if we're
+        compiling java.lang.Object. build_super_invocation takes care
+        of that. */
+      compound = java_method_add_stmt (mdecl, build_super_invocation ());
+      
+      /* Takes care of non static field initialization */
+      field_init = generate_field_initialization_code (current_class);
+      if (field_init)
+       compound = java_method_add_stmt (mdecl, field_init);
+
+      end_artificial_method_body (mdecl);
+    }
+  /* Search for an explicit constructor invocation */
+  else 
+    {
+      int found = 0;
+      tree main_block = BLOCK_EXPR_BODY (body);
+      tree compound = NULL_TREE;
+      
+      while (body)
+       switch (TREE_CODE (body))
+         {
+         case CALL_EXPR:
+           found = CALL_EXPLICIT_CONSTRUCTOR_P (body);
+           body = NULL_TREE;
+           break;
+         case COMPOUND_EXPR:
+         case EXPR_WITH_FILE_LOCATION:
+           body = TREE_OPERAND (body, 0);
+           break;
+         case BLOCK:
+           body = BLOCK_EXPR_BODY (body);
+           break;
+         default:
+           found = 0;
+           body = NULL_TREE;
+         }
+      /* The constructor is missing an invocation of super() */
+      if (!found)
+       compound = add_stmt_to_compound (compound, NULL_TREE,
+                                        build_super_invocation ());
+      
+      /* Also fix its initialized fields initialization */
+      field_init = generate_field_initialization_code (current_class);
+      if (field_init)
+       compound = add_stmt_to_compound (compound, NULL_TREE, field_init);
+      
+      /* Fix the constructor main block if we're adding extra stmts */
+      if (compound)
+       {
+         compound = add_stmt_to_compound (compound, NULL_TREE,
+                                          BLOCK_EXPR_BODY (main_block));
+         BLOCK_EXPR_BODY (main_block) = compound;
+       }
+    }
+}
+
+/* Browse constructors in the super class, searching for a constructor
+   that doesn't take any argument. Return 0 if one is found, 1
+   otherwise. */
+
+static int
+verify_constructor_super ()
+{
+  tree class = CLASSTYPE_SUPER (current_class);
+  if (!class)
+    return 0;
+
+  if (class)
+    {
+      tree mdecl;
+      for (mdecl = TYPE_METHODS (class); mdecl; mdecl = TREE_CHAIN (mdecl))
+       {
+         if (DECL_CONSTRUCTOR_P (mdecl)
+             && !TREE_CHAIN (TYPE_ARG_TYPES (TREE_TYPE (mdecl))))
+           return 0;
+       }
+    }
+  return 1;
+}
+
+/* Generate the code used to initialize field declared with an
+   initialization statement. For now, it returns a call the the
+   artificial function <finit>, if required. Always returns NULL if
+   nothing needs to be generated. */
+
+static tree
+generate_field_initialization_code (class)
+     tree class;
+{
+  if (CLASS_HAS_FINIT_P (class))
+    return build_method_invocation (build_expr_wfl (finit_identifier_node, 
+                                                   input_filename, 0, 0), 
+                                   NULL_TREE);
+  else
+    return NULL_TREE;
+}
+
 /* Expand finals.  */
 
 void
@@ -4921,7 +5289,7 @@ java_expand_finals ()
 {
 }
 
-/* Generate code for all context remembered for code generation */
+/* Generate code for all context remembered for code generation */
 
 void
 java_expand_classes ()
@@ -4936,6 +5304,8 @@ java_expand_classes ()
       java_parse_abort_on_error ();
       java_check_final ();            /* Check unitialized final  */
       java_parse_abort_on_error ();
+      if (flag_emit_class_files)
+       write_classfile (current_class);
     }
 }
 
@@ -5089,6 +5459,15 @@ resolve_expression_name (id)
                                         (TYPE_NAME (current_class))));
                  return error_mark_node;
                }
+             /* Instance variables can't appear as an argument of
+                an explicit constructor invocation */
+             if (!fs && ctxp->explicit_constructor_p)
+               {
+                 parse_error_context
+                   (id, "Can't reference `%s' before the superclass "
+                    "constructor has been called", IDENTIFIER_POINTER (name));
+                 return error_mark_node;
+               }
              decl = build_field_ref ((fs ? NULL_TREE : current_this),
                                      current_class, name);
              return (fs ? build_class_init (current_class, decl) : decl);
@@ -5210,7 +5589,7 @@ resolve_qualified_expression_name (wfl, found_decl, where_found, type_found)
            return 1;
          *where_found = 
            patch_method_invocation_stmt (qual_wfl, decl, type,
-                                         &is_static, NULL);
+                                         &is_static, NULL, from_super);
          if (*where_found == error_mark_node)
            return 1;
          *type_found = type = QUAL_DECL_TYPE (*where_found);
@@ -5239,6 +5618,13 @@ resolve_qualified_expression_name (wfl, found_decl, where_found, type_found)
          from_cast = 1;
          continue;
 
+       case CONDITIONAL_EXPR:
+         *where_found = decl = java_complete_tree (qual_wfl);
+         if (decl == error_mark_node)
+           return 1;
+         *type_found = type = QUAL_DECL_TYPE (decl);
+         continue;
+
        case ARRAY_REF:
          /* If the access to the function call is a non static field,
             build the code to access it. */
@@ -5295,6 +5681,8 @@ resolve_qualified_expression_name (wfl, found_decl, where_found, type_found)
                             CLASSTYPE_SUPER (current_class),
                             build_this (EXPR_WFL_LINECOL (qual_wfl)));
          *where_found = decl = java_complete_tree (node);
+         if (decl == error_mark_node)
+           return 1;
          *type_found = type = QUAL_DECL_TYPE (decl);
          from_super = from_type = 1;
          continue;
@@ -5560,15 +5948,17 @@ maybe_access_field (decl, where, type)
    used. IS_STATIC is set to 1 if the invoked function is static. */
 
 static tree
-patch_method_invocation_stmt (patch, primary, where, is_static, ret_decl)
+patch_method_invocation_stmt (patch, primary, where, is_static, ret_decl, super)
      tree patch, primary, where;
      int *is_static;
      tree *ret_decl;
+     int super;
 {
   tree wfl = TREE_OPERAND (patch, 0);
   tree args = TREE_OPERAND (patch, 1);
   tree name = EXPR_WFL_NODE (wfl);
   tree list, class_type;
+  int is_static_flag = 0;
   
   /* Should be overriden if everything goes well. Otherwise, if
      something fails, it should keep this value. It stop the
@@ -5678,24 +6068,49 @@ patch_method_invocation_stmt (patch, primary, where, is_static, ret_decl)
       /* We search constructor in their target class */
       if (CALL_CONSTRUCTOR_P (patch))
        {
-         class_to_search = resolve_no_layout (EXPR_WFL_NODE (wfl), NULL_TREE);
-         if (!class_to_search)
+         if (TREE_CODE (patch) == NEW_CLASS_EXPR)
+           class_to_search = EXPR_WFL_NODE (wfl);
+         else if (EXPR_WFL_NODE (TREE_OPERAND (patch, 0)) == 
+                  this_identifier_node)
+           class_to_search = NULL_TREE;
+         else if (EXPR_WFL_NODE (TREE_OPERAND (patch, 0)) ==
+                  super_identifier_node)
            {
-             parse_error_context 
-               (wfl, "Class `%s' not found in type declaration",
-                IDENTIFIER_POINTER (EXPR_WFL_NODE (wfl)));
-             PATCH_METHOD_RETURN_ERROR ();
+             if (CLASSTYPE_SUPER (current_class))
+               class_to_search = 
+                 DECL_NAME (TYPE_NAME (CLASSTYPE_SUPER (current_class)));
+             else
+               {
+                 parse_error_context (wfl, "Can't invoke super constructor "
+                                      "on java.lang.Object");
+                 PATCH_METHOD_RETURN_ERROR ();
+               }
            }
-         
-         /* Can't instantiate an abstract class */
-         if (CLASS_ABSTRACT (class_to_search))
+
+         /* Class to search is NULL if we're searching the current one */
+         if (class_to_search)
            {
-             parse_error_context 
-               (wfl, "Class `%s' is an abstract class. It can't be "
-                "instantiated", IDENTIFIER_POINTER (EXPR_WFL_NODE (wfl)));
-             PATCH_METHOD_RETURN_ERROR ();
+             class_to_search = resolve_no_layout (class_to_search, NULL_TREE);
+             if (!class_to_search)
+               {
+                 parse_error_context 
+                   (wfl, "Class `%s' not found in type declaration",
+                    IDENTIFIER_POINTER (EXPR_WFL_NODE (wfl)));
+                 PATCH_METHOD_RETURN_ERROR ();
+               }
+             
+             /* Can't instantiate an abstract class */
+             if (CLASS_ABSTRACT (class_to_search))
+               {
+                 parse_error_context 
+                   (wfl, "Class `%s' is an abstract class. It can't be "
+                    "instantiated", IDENTIFIER_POINTER (EXPR_WFL_NODE (wfl)));
+                 PATCH_METHOD_RETURN_ERROR ();
+               }
+             class_to_search = TREE_TYPE (class_to_search);
            }
-         class_to_search = TREE_TYPE (class_to_search);
+         else
+           class_to_search = current_class;
          lc = 1;
        }
       /* This is a regular search in the local class, unless an
@@ -5721,11 +6136,12 @@ patch_method_invocation_stmt (patch, primary, where, is_static, ret_decl)
                                             class_to_search, primary))
        PATCH_METHOD_RETURN_ERROR ();
 
-      /* Non static/constructor methods are called with the current
-        object extra argument. If method is resolved as a primary,
-        use the primary otherwise use the current THIS. */
+      /* Non static methods are called with the current object extra
+        argument. If patch a `new TYPE()', the argument is the value
+        returned by the object allocator. If method is resolved as a
+        primary, use the primary otherwise use the current THIS. */
       args = nreverse (args);
-      if (!CALL_CONSTRUCTOR_P (patch) && !METHOD_STATIC (list))
+      if (!METHOD_STATIC (list) && TREE_CODE (patch) != NEW_CLASS_EXPR)
        args = tree_cons (NULL_TREE, primary ? primary : current_this, args);
 
       class_type = class_to_search;
@@ -5750,15 +6166,27 @@ patch_method_invocation_stmt (patch, primary, where, is_static, ret_decl)
       free (fct_name);
       PATCH_METHOD_RETURN_ERROR ();
     }
-  
-  if (is_static) 
-    *is_static = METHOD_STATIC (list);
+
+  is_static_flag = METHOD_STATIC (list);
+
+  /* In the context of an explicit constructor invocation, we can't invoke
+     any method relying on `this' */
+  if (ctxp->explicit_constructor_p 
+      && !is_static_flag && (!primary || primary == current_this))
+    {
+      parse_error_context 
+       (wfl, "Can't reference `this' before the superclass constructor has "
+        "been called");
+      PATCH_METHOD_RETURN_ERROR ();
+    }
   java_parser_context_restore_global ();
+  if (is_static) 
+    *is_static = is_static_flag;
   /* Sometimes, we want the decl of the selected method. Such as for
      EH checking */
   if (ret_decl)
     *ret_decl = list;
-  return patch_invoke (patch, list, args);
+  return patch_invoke (patch, list, args, super);
 }
 
 /* Check that we're not trying to do a static reference to a method in
@@ -5786,35 +6214,37 @@ check_for_static_method_reference (wfl, node, method, where, primary)
    mode.  */
 
 static tree
-patch_invoke (patch, method, args)
+patch_invoke (patch, method, args, from_super)
      tree patch, method, args;
+     int from_super;
 {
   int im;
   tree dtable, func;
   tree signature = build_java_signature (TREE_TYPE (method));
   tree original_call, t, ta;
 
-  /* Last step for args: convert build-in types */
-  for (t = TYPE_ARG_TYPES (TREE_TYPE (method)),
-       ta = args; t && ta; t = TREE_CHAIN (t), ta = TREE_CHAIN (ta))
+  /* Last step for args: convert build-in types. */
+  for (t = TYPE_ARG_TYPES (TREE_TYPE (method)), ta = args;
+       t && ta; t = TREE_CHAIN (t), ta = TREE_CHAIN (ta))
     if (JPRIMITIVE_TYPE_P (TREE_TYPE (TREE_VALUE (ta))) &&
        TREE_TYPE (TREE_VALUE (ta)) != TREE_VALUE (t))
       TREE_VALUE (ta) = convert (TREE_VALUE (t), TREE_VALUE (ta));
-       
-  switch ((im = invocation_mode (method, 0)))
+  
+  switch ((im = invocation_mode (method, from_super)))
     {
     case INVOKE_VIRTUAL:
       dtable = invoke_build_dtable (0, args);
       func = build_invokevirtual (dtable, method);
       break;
 
+    case INVOKE_SUPER:
     case INVOKE_STATIC:
       func = build_known_method_ref (method, TREE_TYPE (method),
                                     DECL_CONTEXT (method), signature, args);
       break;
 
     default:
-      fatal ("Unknown invocation mode - build_invoke");
+      fatal ("Unknown invocation mode `%d' - build_invoke", im);
       return NULL_TREE;
     }
 
@@ -5825,11 +6255,12 @@ patch_invoke (patch, method, args)
   TREE_OPERAND (patch, 1) = args;
   original_call = patch;
 
-  /* We're calling a constructor. New is called an its returned value
-     is an argument to the constructor. We build a COMPOUND_EXPR and
-     use saved expression so that the overall NEW expression value is
-     a pointer to a newly created and initialized class. */
-  if (CALL_CONSTRUCTOR_P (original_call))
+  /* We're processing a `new TYPE ()' form. New is called an its
+     returned value is the first argument to the constructor. We build
+     a COMPOUND_EXPR and use saved expression so that the overall NEW
+     expression value is a pointer to a newly created and initialized
+     class. */
+  if (TREE_CODE (original_call) == NEW_CLASS_EXPR)
     {
       tree class = DECL_CONTEXT (method);
       tree c1, saved_new, size, new;
@@ -5859,21 +6290,21 @@ invocation_mode (method, super)
 {
   int access = get_access_flags_from_decl (method);
 
+  if (super)
+    return INVOKE_SUPER;
+
   if (access & ACC_STATIC || access & ACC_FINAL)
     return INVOKE_STATIC;
 
   if (CLASS_FINAL (TYPE_NAME (DECL_CONTEXT (method))))
     return INVOKE_STATIC;
   
-  if (super)
-    return INVOKE_SUPER;
-  
   if (CLASS_INTERFACE (TYPE_NAME (DECL_CONTEXT (method))))
     return INVOKE_INTERFACE;
   
   if (DECL_CONSTRUCTOR_P (method))
     return INVOKE_STATIC;
-  
+
   return INVOKE_VIRTUAL;
 }
 
@@ -5932,11 +6363,9 @@ lookup_method_invoke (lc, cl, class, name, arg_list)
          char string [4096];
          if (!cm || not_accessible_p (class, cm, 0))
            continue;
-         signature = build_java_argument_signature (TREE_TYPE (cm));
          sprintf 
-           (string, "  `%s(%s)' in `%s'%s",
-            IDENTIFIER_POINTER (name), 
-            IDENTIFIER_POINTER (signature),
+           (string, "  `%s' in `%s'%s",
+            get_printable_method_name (cm),
             IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (DECL_CONTEXT (cm)))),
             (TREE_CHAIN (current) ? "\n" : ""));
          obstack_grow (&temporary_obstack, string, strlen (string));
@@ -5946,8 +6375,11 @@ lookup_method_invoke (lc, cl, class, name, arg_list)
     }
   /* Issue the error message */
   signature = build_java_argument_signature (method);
-  parse_error_context (cl, "Can't find method `%s(%s)' in class `%s'%s",
-                      IDENTIFIER_POINTER (name),
+  parse_error_context (cl, "Can't find %s `%s(%s)' in class `%s'%s",
+                      (lc ? "constructor" : "method"),
+                      (lc ? 
+                       IDENTIFIER_POINTER(DECL_NAME (TYPE_NAME (class))) :
+                       IDENTIFIER_POINTER (name)),
                       IDENTIFIER_POINTER (signature),
                       IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (class))),
                       (candidates ? candidates : ""));
@@ -5969,8 +6401,7 @@ find_applicable_accessible_methods_list (class, name, arglist)
           method != NULL_TREE;  method = TREE_CHAIN (method))
        {
          /* Names have to match and we're not looking for constructor */
-         if (DECL_NAME (method) != name
-             || DECL_CONSTRUCTOR_P (method))
+         if (DECL_NAME (method) != name || DECL_CONSTRUCTOR_P (method))
            continue;
 
          if (argument_types_convertible (method, arglist))
@@ -6145,7 +6576,10 @@ qualify_ambiguous_name (id)
       {
        qual = TREE_CHAIN (qual);
        qual_wfl = QUAL_WFL (qual);
-       name = EXPR_WFL_NODE (qual_wfl);
+       if (TREE_CODE (qual_wfl) == CALL_EXPR)
+         again = 1;
+       else
+         name = EXPR_WFL_NODE (qual_wfl);
        this_found = 1;
       }
     /* If we have a SUPER, we set the context accordingly */
@@ -6164,6 +6598,13 @@ qualify_ambiguous_name (id)
        /* Do one more interation to set things up */
        super_found = again = 1;
       }
+    /* Loop one more time if we're dealing with ?: up front */
+    if (TREE_CODE (qual_wfl) == CONDITIONAL_EXPR)
+      {
+       qual = TREE_CHAIN (qual);
+       qual_wfl = QUAL_WFL (qual);
+       again = 1;
+      }
   } while (again);
   
   /* If name appears within the scope of a location variable
@@ -6283,7 +6724,7 @@ static tree
 java_complete_tree (node)
      tree node;
 {
-  tree nn, cn, wfl_op1, wfl_op2;
+  tree nn, cn, wfl_op1, wfl_op2, wfl_op3;
   int flag;
 
   /* CONVERT_EXPR always has its type set, even though it needs to be
@@ -6394,6 +6835,16 @@ java_complete_tree (node)
       return patch_if_else_statement (node);
       break;
 
+    case CONDITIONAL_EXPR:
+      /* Condition */
+      wfl_op1 = TREE_OPERAND (node, 0);
+      COMPLETE_CHECK_OP_0 (node);
+      wfl_op2 = TREE_OPERAND (node, 1);
+      COMPLETE_CHECK_OP_1 (node);
+      wfl_op3 = TREE_OPERAND (node, 2);
+      COMPLETE_CHECK_OP_2 (node);
+      return patch_conditional_expr (node, wfl_op1, wfl_op2);
+
       /* 3- Expression section */
     case COMPOUND_EXPR:
       TREE_OPERAND (node, 0) = java_complete_tree (TREE_OPERAND (node, 0));
@@ -6459,11 +6910,21 @@ java_complete_tree (node)
        return error_mark_node;
       else
        {
-         tree decl;
+         tree decl, wfl = TREE_OPERAND (node, 0);
+         int in_this = CALL_THIS_CONSTRUCTOR_P (node);
+
          node = patch_method_invocation_stmt (node, NULL_TREE, 
-                                              NULL_TREE, 0, &decl);
+                                              NULL_TREE, 0, &decl, 0);
          if (node != error_mark_node)
-           check_thrown_exceptions (EXPR_WFL_LINECOL (node), decl);
+           {
+             check_thrown_exceptions (EXPR_WFL_LINECOL (node), decl);
+             /* If we call this(...), register signature and positions */
+             if (in_this)
+               DECL_CONSTRUCTOR_CALLS (current_function_decl) = 
+                 tree_cons (wfl, decl,
+                            DECL_CONSTRUCTOR_CALLS (current_function_decl));
+               
+           }
          return node;
        }
 
@@ -6585,7 +7046,8 @@ java_complete_tree (node)
       TREE_OPERAND (node, 1) = java_complete_tree (wfl_op2);
       if (TREE_OPERAND (node, 1) == error_mark_node)
        return error_mark_node;
-      TREE_OPERAND (node, 1) = save_expr (TREE_OPERAND (node, 1));
+      if (!flag_emit_class_files)
+       TREE_OPERAND (node, 1) = save_expr (TREE_OPERAND (node, 1));
       return patch_array_ref (node, wfl_op1, wfl_op2);
 
     case THIS_EXPR:
@@ -6598,6 +7060,15 @@ java_complete_tree (node)
          TREE_TYPE (node) = error_mark_node;
          return error_mark_node;
        }
+      if (ctxp->explicit_constructor_p)
+       {
+         EXPR_WFL_LINECOL (wfl_operator) = EXPR_WFL_LINECOL (node);
+         parse_error_context 
+           (wfl_operator, "Can't reference `this' or `super' before the "
+            "superclass constructor has been called");
+         TREE_TYPE (node) = error_mark_node;
+         return error_mark_node;
+       }
       return current_this;
 
     default:
@@ -6622,6 +7093,7 @@ complete_function_arguments (node)
   int flag = 0;
   tree cn;
 
+  ctxp->explicit_constructor_p += (CALL_THIS_CONSTRUCTOR_P (node) ? 1 : 0);
   for (cn = TREE_OPERAND (node, 1); cn; cn = TREE_CHAIN (cn))
     {
       tree wfl = TREE_VALUE (cn), parm, temp;
@@ -6644,6 +7116,7 @@ complete_function_arguments (node)
          INITIALIZED_P (parm) = 1;
        }
     }
+  ctxp->explicit_constructor_p -= (CALL_THIS_CONSTRUCTOR_P (node) ? 1 : 0);
   return flag;
 }
 
@@ -6769,6 +7242,40 @@ maybe_absorb_scoping_blocks ()
    are building incomplete tree nodes and the patch_* functions that
    are completing them.  */
 
+/* Build a super() constructor invocation. Returns size_zero_node if
+   we're currently dealing with the class java.lang.Object. */
+
+static tree
+build_super_invocation ()
+{
+  if (current_class == object_type_node)
+    return size_zero_node;
+  else
+    {
+      tree super_wfl = build_wfl_node (super_identifier_node, 
+                                      input_filename, 0, 0);
+      return build_method_invocation (super_wfl, NULL_TREE);
+    }
+}
+
+/* Build a SUPER/THIS qualified method invocation.  */
+
+static tree
+build_this_super_qualified_invocation (use_this, name, args, lloc, rloc)
+     int use_this;
+     tree name, args;
+     int lloc, rloc;
+
+{
+  tree invok;
+  tree wfl = 
+    build_wfl_node ((use_this ? this_identifier_node : super_identifier_node),
+                   input_filename, 0, 0);
+  EXPR_WFL_LINECOL (wfl) = lloc;
+  invok = build_method_invocation (name, args);
+  return make_qualified_primary (wfl, invok, rloc);
+}
+
 /* Build an incomplete CALL_EXPR node. */
 
 static tree
@@ -6962,7 +7469,7 @@ patch_assignment (node, wfl_op1, wfl_op2)
      assignment into an array element, return it here. */
   if (TREE_CODE (node) == COMPOUND_EXPR)
     return node;
-      
+
   TREE_OPERAND (node, 0) = lvalue;
   TREE_OPERAND (node, 1) = new_rhs;
   TREE_TYPE (node) = lhs_type;
@@ -7845,7 +8352,7 @@ patch_unaryop (node, wfl_op)
          TREE_TYPE (node) = error_mark_node;
          error_found = 1;
        }
-      else if (FIELD_FINAL (op))
+      else if (DECL_P (op) && FIELD_FINAL (op))
        {
          parse_error_context 
            (wfl_op, "Can't assign a value to the final variable `%s'",
@@ -8315,11 +8822,19 @@ patch_return (node)
 
   if (error_found)
     {
-      char *t = strdup (lang_printable_name (mtype, 0));
-      parse_error_context (wfl_operator, "`return' with%s value from `%s %s'",
-                          (error_found == 1 ? "" : "out"), t,
-                          lang_printable_name (meth, 0));
-      free (t);
+      if (!DECL_CONSTRUCTOR_P (meth))
+       {
+         char *t = strdup (lang_printable_name (mtype, 0));
+         parse_error_context (wfl_operator, 
+                              "`return' with%s value from `%s %s'",
+                              (error_found == 1 ? "" : "out"), 
+                              t, lang_printable_name (meth, 0));
+         free (t);
+       }
+      else
+       parse_error_context (wfl_operator, 
+                            "`return' with value from constructor `%s'",
+                            lang_printable_name (meth, 0));
       return error_mark_node;
     }
 
@@ -9364,3 +9879,107 @@ purge_unchecked_exceptions (mdecl)
   /* List is inverted here, but it doesn't matter */
   DECL_FUNCTION_THROWS (mdecl) = new;
 }
+
+/* 15.24 Conditional Operator ?: */
+
+static tree
+patch_conditional_expr (node, wfl_cond, wfl_op1)
+     tree node, wfl_cond, wfl_op1;
+{
+  tree cond = TREE_OPERAND (node, 0);
+  tree op1 = TREE_OPERAND (node, 1);
+  tree op2 = TREE_OPERAND (node, 2);
+  tree t1 = TREE_TYPE (op1);
+  tree t2 = TREE_TYPE (op2);
+  tree resulting_type = NULL_TREE;
+  int error_found = 0;
+
+  /* The first expression must be a boolean */
+  if (TREE_TYPE (cond) != boolean_type_node)
+    {
+      SET_WFL_OPERATOR (wfl_operator, node, wfl_cond);
+      parse_error_context (wfl_operator, "Incompatible type for `?:'. Can't "
+                          "convert `%s' to `boolean'",
+                          lang_printable_name (TREE_TYPE (cond), 0));
+      error_found = 1;
+    }
+
+  /* Second and third can be numeric, boolean (i.e. primitive),
+     references or null. Anything else results in an error */
+  if (!((JNUMERIC_TYPE_P (t1) && JNUMERIC_TYPE_P (t2))
+       || ((JREFERENCE_TYPE_P (t1) || op1 == null_pointer_node) 
+           && (JREFERENCE_TYPE_P (t2) || op2 == null_pointer_node))
+       || (t1 == boolean_type_node && t2 == boolean_type_node)))
+    error_found = 1;
+
+  /* Determine the type of the conditional expression. Same types are
+     easy to deal with */
+  else if (t1 == t2)
+    resulting_type = t1;
+
+  /* There are different rules for numeric types */
+  else if (JNUMERIC_TYPE_P (t1))
+    {
+      /* if byte/short found, the resulting type is short */
+      if ((t1 == byte_type_node && t2 == short_type_node)
+         || (t1 == short_type_node && t2 == byte_type_node))
+       resulting_type = short_type_node;
+
+      /* If t1 is a constant int and t2 is of type byte, short or char
+        and t1's value fits in t2, then the resulting type is t2 */
+      else if ((t1 == int_type_node && TREE_CONSTANT (TREE_OPERAND (node, 1)))
+         && JBSC_TYPE_P (t2) && int_fits_type_p (TREE_OPERAND (node, 1), t2))
+       resulting_type = t2;
+
+      /* If t2 is a constant int and t1 is of type byte, short or char
+        and t2's value fits in t1, then the resulting type is t1 */
+      else if ((t2 == int_type_node && TREE_CONSTANT (TREE_OPERAND (node, 2)))
+         && JBSC_TYPE_P (t1) && int_fits_type_p (TREE_OPERAND (node, 2), t1))
+       resulting_type = t1;
+
+      /* Otherwise, binary numeric promotion is applied and the
+        resulting type is the promoted type of operand 1 and 2 */
+      else 
+       resulting_type = binary_numeric_promotion (t2, t2, 
+                                                  &TREE_OPERAND (node, 1), 
+                                                  &TREE_OPERAND (node, 2));
+    }
+
+  /* Cases of a reference and a null type */
+  else if (JREFERENCE_TYPE_P (t1) && op2 == null_pointer_node)
+    resulting_type = t1;
+
+  else if (JREFERENCE_TYPE_P (t2) && op1 == null_pointer_node)
+    resulting_type = t2;
+
+  /* Last case: different reference types. If a type can be converted
+     into the other one by assignment conversion, the latter
+     determines the type of the expression */
+  else if ((resulting_type = try_reference_assignconv (t1, op2)))
+    resulting_type = promote_type (t1);
+
+  else if ((resulting_type = try_reference_assignconv (t2, op1)))
+    resulting_type = promote_type (t2);
+
+  /* If we don't have any resulting type, we're in trouble */
+  if (!resulting_type)
+    {
+      char *t = strdup (lang_printable_name (t1, 0));
+      SET_WFL_OPERATOR (wfl_operator, node, wfl_op1);
+      parse_error_context (wfl_operator, "Incompatible type for `?:'. Can't "
+                          "convert `%s' to `%s'", t,
+                          lang_printable_name (t2, 0));
+      free (t);
+      error_found = 1;
+    }
+
+  if (error_found)
+    {
+      TREE_TYPE (node) = error_mark_node;
+      return error_mark_node;
+    }
+
+  TREE_TYPE (node) = resulting_type;
+  TREE_SET_CODE (node, COND_EXPR);
+  return node;
+}
index 3a8d81f..9aad0fb 100644 (file)
@@ -546,7 +546,6 @@ build_java_signature (type)
     {
       TYPE_LANG_SPECIFIC (type) = (struct lang_type *)
        perm_calloc (1, sizeof (struct lang_type));
-
     }
   sig = TYPE_LANG_SPECIFIC (type)->signature;
   if (sig == NULL_TREE)
@@ -600,7 +599,7 @@ build_java_signature (type)
            obstack_grow (&temporary_obstack,
                          IDENTIFIER_POINTER (sig), IDENTIFIER_LENGTH (sig));
            obstack_1grow (&temporary_obstack, ')');
-  
+
            t = build_java_signature (TREE_TYPE (type));
            obstack_grow0 (&temporary_obstack,
                           IDENTIFIER_POINTER (t), IDENTIFIER_LENGTH (t));