Freeze compiled pitree.git commit 71dd736 into bootstrap_pitree, reinstate use
authorNick Downing <nick@ndcode.org>
Tue, 29 Jan 2019 10:24:46 +0000 (21:24 +1100)
committerNick Downing <nick@ndcode.org>
Tue, 29 Jan 2019 10:24:46 +0000 (21:24 +1100)
12 files changed:
Makefile
bootstrap_pitree/ast.py [deleted file]
bootstrap_pitree/element.py
bootstrap_pitree/generate_py.py
bootstrap_pitree/lex_yy.py
bootstrap_pitree/pitree.l
bootstrap_pitree/pitree.py
bootstrap_pitree/pitree.y
bootstrap_pitree/skel/element.py [new file with mode: 0644]
bootstrap_pitree/skel/skel_py.py
bootstrap_pitree/t_def.py [new file with mode: 0644]
bootstrap_pitree/y_tab.py

index 408c778..9c0a2fa 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -1,16 +1,16 @@
 all: element.py lex_yy.py regex.py t_def.py y_tab.py
 
-element.py: ../pitree.git/skel/element.py
+element.py: bootstrap_pitree/skel/element.py
        cat $< >$@
 
 lex_yy.py: scan.l skel_lex_yy.py
        bootstrap_pilex/pilex.py --element --python --skel skel_lex_yy.py $<
 
 regex.py: regex.t
-       ../pitree.git/pitree.py --python -o $@ $<
+       bootstrap_pitree/pitree.py --python -o $@ $<
 
 t_def.py: pilex.t
-       ../pitree.git/pitree.py --python $<
+       bootstrap_pitree/pitree.py --python $<
 
 y_tab.py: parse.y
        bootstrap_piyacc/piyacc.py --element --python $<
diff --git a/bootstrap_pitree/ast.py b/bootstrap_pitree/ast.py
deleted file mode 100644 (file)
index fd0fa75..0000000
+++ /dev/null
@@ -1,1138 +0,0 @@
-# Copyright (C) 2019 Nick Downing <nick@ndcode.org>
-# SPDX-License-Identifier: GPL-2.0-only
-#
-# This program is free software; you can redistribute it and/or modify it under
-# the terms of the GNU General Public License as published by the Free Software
-# Foundation; version 2.
-#
-# This program is distributed in the hope that it will be useful, but WITHOUT
-# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
-# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
-# details.
-#
-# You should have received a copy of the GNU General Public License along with
-# this program; if not, write to the Free Software Foundation, Inc., 51
-# Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
-
-import element
-import sys
-
-class Context:
-  def __init__(
-    self,
-    fout = sys.stdout,
-    indent = '',
-    stack = [],
-    classes = [],
-    base_classes = None,
-    fields = [],
-    field_name = ''
-  ):
-    self.fout = fout
-    self.indent = indent
-    self.stack = stack
-    self.classes = classes
-    self.base_classes = [{'element.Element': []}] if base_classes is None else base_classes # params
-    self.fields = fields
-    self.field_name = field_name
-
-class AST(element.Element):
-  # internal classes:
-  class ClassOrFieldDef(element.Element):
-    # GENERATE ELEMENT() BEGIN
-    def __init__(
-      self,
-      tag = 'AST_ClassOrFieldDef',
-      attrib = {},
-      text = '',
-      children = []
-    ):
-      element.Element.__init__(
-        self,
-        tag,
-        attrib,
-        text,
-        children
-      )
-    def copy(self, factory = None):
-      result = element.Element.copy(
-        self,
-        ClassOrFieldDef if factory is None else factory
-      )
-      return result
-    # GENERATE END
-    def generate_class_or_field_def(self, context):
-      raise NotImplementedError
-  class Expression(element.Element):
-    # GENERATE ELEMENT() BEGIN
-    def __init__(
-      self,
-      tag = 'AST_Expression',
-      attrib = {},
-      text = '',
-      children = []
-    ):
-      element.Element.__init__(
-        self,
-        tag,
-        attrib,
-        text,
-        children
-      )
-    def copy(self, factory = None):
-      result = element.Element.copy(
-        self,
-        Expression if factory is None else factory
-      )
-      return result
-    # GENERATE END
-    def generate_expression(self, context):
-      raiseNotImplementedError
-    def generate_expression_serialized(self, context):
-      raiseNotImplementedError
-  class Type(element.Element):
-    # GENERATE ELEMENT() BEGIN
-    def __init__(
-      self,
-      tag = 'AST_Type',
-      attrib = {},
-      text = '',
-      children = []
-    ):
-      element.Element.__init__(
-        self,
-        tag,
-        attrib,
-        text,
-        children
-      )
-    def copy(self, factory = None):
-      result = element.Element.copy(
-        self,
-        Type if factory is None else factory
-      )
-      return result
-    # GENERATE END
-    def generate_serialize(self, context, expr):
-      return 'element.serialize_{0:s}({1:s})'.format(
-        element.to_text(self),
-        expr
-      )
-    def generate_deserialize(self, context, expr): 
-      return 'element.deserialize_{0:s}({1:s})'.format(
-        element.to_text(self),
-        expr
-      )
-
-  # syntax classes:
-  class BaseClass(element.Element):
-    # GENERATE ELEMENT() BEGIN
-    def __init__(
-      self,
-      tag = 'AST_BaseClass',
-      attrib = {},
-      text = '',
-      children = []
-    ):
-      element.Element.__init__(
-        self,
-        tag,
-        attrib,
-        text,
-        children
-      )
-    def copy(self, factory = None):
-      result = element.Element.copy(
-        self,
-        BaseClass if factory is None else factory
-      )
-      return result
-    # GENERATE END
-  class ClassBody(element.Element):
-    # GENERATE ELEMENT() BEGIN
-    def __init__(
-      self,
-      tag = 'AST_ClassBody',
-      attrib = {},
-      text = '',
-      children = []
-    ):
-      element.Element.__init__(
-        self,
-        tag,
-        attrib,
-        text,
-        children
-      )
-    def copy(self, factory = None):
-      result = element.Element.copy(
-        self,
-        ClassBody if factory is None else factory
-      )
-      return result
-    # GENERATE END
-  class ClassName(element.Element):
-    # GENERATE ELEMENT() BEGIN
-    def __init__(
-      self,
-      tag = 'AST_ClassName',
-      attrib = {},
-      text = '',
-      children = []
-    ):
-      element.Element.__init__(
-        self,
-        tag,
-        attrib,
-        text,
-        children
-      )
-    def copy(self, factory = None):
-      result = element.Element.copy(
-        self,
-        ClassName if factory is None else factory
-      )
-      return result
-    # GENERATE END
-  class DefaultValue(element.Element):
-    # GENERATE ELEMENT() BEGIN
-    def __init__(
-      self,
-      tag = 'AST_DefaultValue',
-      attrib = {},
-      text = '',
-      children = []
-    ):
-      element.Element.__init__(
-        self,
-        tag,
-        attrib,
-        text,
-        children
-      )
-    def copy(self, factory = None):
-      result = element.Element.copy(
-        self,
-        DefaultValue if factory is None else factory
-      )
-      return result
-    # GENERATE END
-  class Identifier(element.Element):
-    # GENERATE ELEMENT() BEGIN
-    def __init__(
-      self,
-      tag = 'AST_Identifier',
-      attrib = {},
-      text = '',
-      children = []
-    ):
-      element.Element.__init__(
-        self,
-        tag,
-        attrib,
-        text,
-        children
-      )
-    def copy(self, factory = None):
-      result = element.Element.copy(
-        self,
-        Identifier if factory is None else factory
-      )
-      return result
-    # GENERATE END
-    def get_text(self):
-      return element.get_text(self, 0)
-  class LiteralBool(Expression):
-    # GENERATE ELEMENT(bool value) BEGIN
-    def __init__(
-      self,
-      tag = 'AST_LiteralBool',
-      attrib = {},
-      text = '',
-      children = [],
-      value = False
-    ):
-      AST.Expression.__init__(
-        self,
-        tag,
-        attrib,
-        text,
-        children
-      )
-      self.value = value
-    def serialize(self, ref_list):
-      AST.Expression.serialize(self, ref_list)
-      self.set(
-        'value',
-        element.serialize_bool(self.value)
-      )
-    def deserialize(self, ref_list):
-      AST.Expression.deserialize(self, ref_list)
-      self.value = element.deserialize_bool(self.get('value', 'false'))
-    def copy(self, factory = None):
-      result = AST.Expression.copy(
-        self,
-        LiteralBool if factory is None else factory
-      )
-      result.value = self.value
-      return result
-    # GENERATE END
-    def generate_expression(self, context):
-      return "True" if self.value else "False"
-    def generate_expression_serialized(self, context):
-      return "true" if self.value else "false"
-  class LiteralInt(Expression):
-    # GENERATE ELEMENT(str sign, int base, str digits) BEGIN
-    def __init__(
-      self,
-      tag = 'AST_LiteralInt',
-      attrib = {},
-      text = '',
-      children = [],
-      sign = '',
-      base = -1,
-      digits = ''
-    ):
-      AST.Expression.__init__(
-        self,
-        tag,
-        attrib,
-        text,
-        children
-      )
-      self.sign = sign
-      self.base = base
-      self.digits = digits
-    def serialize(self, ref_list):
-      AST.Expression.serialize(self, ref_list)
-      self.set(
-        'sign',
-        element.serialize_str(self.sign)
-      )
-      self.set(
-        'base',
-        element.serialize_int(self.base)
-      )
-      self.set(
-        'digits',
-        element.serialize_str(self.digits)
-      )
-    def deserialize(self, ref_list):
-      AST.Expression.deserialize(self, ref_list)
-      self.sign = element.deserialize_str(self.get('sign', ''))
-      self.base = element.deserialize_int(self.get('base', '-1'))
-      self.digits = element.deserialize_str(self.get('digits', ''))
-    def copy(self, factory = None):
-      result = AST.Expression.copy(
-        self,
-        LiteralInt if factory is None else factory
-      )
-      result.sign = self.sign
-      result.base = self.base
-      result.digits = self.digits
-      return result
-    # GENERATE END
-    def get_value(self):
-      value = int(self.digits, self.base)
-      return -value if len(self.sign) else value
-    def generate_expression(self, context):
-      return str(self.get_value())
-    def generate_expression_serialized(self, context):
-      return str(self.get_value())
-  class LiteralList(Expression):
-    # GENERATE ELEMENT() BEGIN
-    def __init__(
-      self,
-      tag = 'AST_LiteralList',
-      attrib = {},
-      text = '',
-      children = []
-    ):
-      AST.Expression.__init__(
-        self,
-        tag,
-        attrib,
-        text,
-        children
-      )
-    def copy(self, factory = None):
-      result = AST.Expression.copy(
-        self,
-        LiteralList if factory is None else factory
-      )
-      return result
-    # GENERATE END
-    def generate_expression(self, context):
-      return '[{0:s}]'.format(
-        ', '.join(
-          [
-            i.generate_expression(context)
-            for i in self
-          ]
-        )
-      )
-    def generate_expression_serialized(self, context):
-      return ' '.join(
-        [
-          i.generate_expression_serialized(context)
-          for i in self
-        ]
-      )
-  class LiteralRef(Expression):
-    # GENERATE ELEMENT() BEGIN
-    def __init__(
-      self,
-      tag = 'AST_LiteralRef',
-      attrib = {},
-      text = '',
-      children = []
-    ):
-      AST.Expression.__init__(
-        self,
-        tag,
-        attrib,
-        text,
-        children
-      )
-    def copy(self, factory = None):
-      result = AST.Expression.copy(
-        self,
-        LiteralRef if factory is None else factory
-      )
-      return result
-    # GENERATE END
-    def generate_expression(self, context):
-      return 'None'
-    def generate_expression_serialized(self, context):
-      return '-1'
-  class LiteralSet(Expression):
-    # GENERATE ELEMENT() BEGIN
-    def __init__(
-      self,
-      tag = 'AST_LiteralSet',
-      attrib = {},
-      text = '',
-      children = []
-    ):
-      AST.Expression.__init__(
-        self,
-        tag,
-        attrib,
-        text,
-        children
-      )
-    def copy(self, factory = None):
-      result = AST.Expression.copy(
-        self,
-        LiteralSet if factory is None else factory
-      )
-      return result
-    # GENERATE END
-    def generate_expression(self, context):
-      return (
-        'set([{0:s}])'.format(
-          ', '.join(
-            [
-              i.generate_expression(context)
-              for i in self
-            ]
-          )
-        )
-      if len(self) else
-        'set()'
-      )
-    def generate_expression_serialized(self, context):
-      return ' '.join(
-        [
-          i.generate_expression_serialized(context)
-          for i in self
-        ]
-      )
-  class LiteralStr(Expression):
-    # GENERATE ELEMENT() BEGIN
-    def __init__(
-      self,
-      tag = 'AST_LiteralStr',
-      attrib = {},
-      text = '',
-      children = []
-    ):
-      AST.Expression.__init__(
-        self,
-        tag,
-        attrib,
-        text,
-        children
-      )
-    def copy(self, factory = None):
-      result = AST.Expression.copy(
-        self,
-        LiteralStr if factory is None else factory
-      )
-      return result
-    # GENERATE END
-    def generate_expression(self, context):
-      return "'{0:s}'".format(
-        self[0].get_text().replace('\\', '\\\\').replace('\'', '\\\'')
-      )
-    def generate_expression_serialized(self, context):
-      return self[0].get_text()
-  class Text(element.Element):
-    class Escape(element.Element):
-      # GENERATE ELEMENT(int value) BEGIN
-      def __init__(
-        self,
-        tag = 'AST_Text_Escape',
-        attrib = {},
-        text = '',
-        children = [],
-        value = -1
-      ):
-        element.Element.__init__(
-          self,
-          tag,
-          attrib,
-          text,
-          children
-        )
-        self.value = value
-      def serialize(self, ref_list):
-        element.Element.serialize(self, ref_list)
-        self.set(
-          'value',
-          element.serialize_int(self.value)
-        )
-      def deserialize(self, ref_list):
-        element.Element.deserialize(self, ref_list)
-        self.value = element.deserialize_int(self.get('value', '-1'))
-      def copy(self, factory = None):
-        result = element.Element.copy(
-          self,
-          Escape if factory is None else factory
-        )
-        result.value = self.value
-        return result
-      # GENERATE END
-    # GENERATE ELEMENT() BEGIN
-    def __init__(
-      self,
-      tag = 'AST_Text',
-      attrib = {},
-      text = '',
-      children = []
-    ):
-      element.Element.__init__(
-        self,
-        tag,
-        attrib,
-        text,
-        children
-      )
-    def copy(self, factory = None):
-      result = element.Element.copy(
-        self,
-        Text if factory is None else factory
-      )
-      return result
-    # GENERATE END
-    def get_text(self):
-      result = []
-      for i in range(len(self)):
-        result.extend(
-          [element.get_text(self, i), chr(self[i].value)]
-        )
-      result.append(element.get_text(self, len(self)))
-      return ''.join(result)
-  class TypeBool(Type):
-    # GENERATE ELEMENT() BEGIN
-    def __init__(
-      self,
-      tag = 'AST_TypeBool',
-      attrib = {},
-      text = '',
-      children = []
-    ):
-      AST.Type.__init__(
-        self,
-        tag,
-        attrib,
-        text,
-        children
-      )
-    def copy(self, factory = None):
-      result = AST.Type.copy(
-        self,
-        TypeBool if factory is None else factory
-      )
-      return result
-    # GENERATE END
-  class TypeInt(Type):
-    # GENERATE ELEMENT() BEGIN
-    def __init__(
-      self,
-      tag = 'AST_TypeInt',
-      attrib = {},
-      text = '',
-      children = []
-    ):
-      AST.Type.__init__(
-        self,
-        tag,
-        attrib,
-        text,
-        children
-      )
-    def copy(self, factory = None):
-      result = AST.Type.copy(
-        self,
-        TypeInt if factory is None else factory
-      )
-      return result
-    # GENERATE END
-  class TypeList(Type):
-    # GENERATE ELEMENT() BEGIN
-    def __init__(
-      self,
-      tag = 'AST_TypeList',
-      attrib = {},
-      text = '',
-      children = []
-    ):
-      AST.Type.__init__(
-        self,
-        tag,
-        attrib,
-        text,
-        children
-      )
-    def copy(self, factory = None):
-      result = AST.Type.copy(
-        self,
-        TypeList if factory is None else factory
-      )
-      return result
-    # GENERATE END
-    def generate_serialize(self, context, expr):
-      indent_save = context.indent
-      context.indent += '    '
-      result = '''' '.join(
-{0:s}  [
-{1:s}    {2:s}
-{3:s}    for i in {4:s}
-{5:s}  ]
-{6:s})'''.format(
-        indent_save,
-        indent_save,
-        self[0].generate_serialize(context, 'i'),
-        indent_save,
-        expr,
-        indent_save,
-        indent_save
-      )
-      context.indent = indent_save
-      return result
-    def generate_deserialize(self, context, expr):
-      indent_save = context.indent
-      context.indent += '  '
-      result = '''[
-{0:s}  {1:s}
-{2:s}  for i in {3:s}.split()
-{4:s}]'''.format(
-        indent_save,
-        self[0].generate_deserialize(context, 'i'),
-        indent_save,
-        expr,
-        indent_save
-      )
-      context.indent = indent_save
-      return result
-  class TypeRef(Type):
-    # GENERATE ELEMENT() BEGIN
-    def __init__(
-      self,
-      tag = 'AST_TypeRef',
-      attrib = {},
-      text = '',
-      children = []
-    ):
-      AST.Type.__init__(
-        self,
-        tag,
-        attrib,
-        text,
-        children
-      )
-    def copy(self, factory = None):
-      result = AST.Type.copy(
-        self,
-        TypeRef if factory is None else factory
-      )
-      return result
-    # GENERATE END
-    def generate_serialize(self, context, expr):
-      return 'element.serialize_ref({0:s}, ref_list)'.format(expr)
-    def generate_deserialize(self, context, expr): 
-      return 'element.deserialize_ref({0:s}, ref_list)'.format(expr)
-  class TypeSet(Type):
-    # GENERATE ELEMENT() BEGIN
-    def __init__(
-      self,
-      tag = 'AST_TypeSet',
-      attrib = {},
-      text = '',
-      children = []
-    ):
-      AST.Type.__init__(
-        self,
-        tag,
-        attrib,
-        text,
-        children
-      )
-    def copy(self, factory = None):
-      result = AST.Type.copy(
-        self,
-        TypeSet if factory is None else factory
-      )
-      return result
-    # GENERATE END
-    def generate_serialize(self, context, expr):
-      indent_save = context.indent
-      context.indent += '    '
-      result = '''' '.join(
-{0:s}  [
-{1:s}    {2:s}
-{3:s}    for i in sorted({4:s})
-{5:s}  ]
-{6:s})'''.format(
-        indent_save,
-        indent_save,
-        self[0].generate_serialize(context, 'i'),
-        indent_save,
-        expr,
-        indent_save,
-        indent_save
-      )
-      context.indent = indent_save
-      return result
-    def generate_deserialize(self, context, expr):
-      indent_save = context.indent
-      context.indent += '    '
-      result = '''set(
-{0:s}  [
-{1:s}    {2:s}
-{3:s}    for i in {4:s}.split()
-{5:s}  ]
-{6:s})'''.format(
-        indent_save,
-        indent_save,
-        self[0].generate_deserialize(context, 'i'),
-        indent_save,
-        expr,
-        indent_save,
-        indent_save
-      )
-      context.indent = indent_save
-      return result
-  class TypeStr(Type):
-    # GENERATE ELEMENT() BEGIN
-    def __init__(
-      self,
-      tag = 'AST_TypeStr',
-      attrib = {},
-      text = '',
-      children = []
-    ):
-      AST.Type.__init__(
-        self,
-        tag,
-        attrib,
-        text,
-        children
-      )
-    def copy(self, factory = None):
-      result = AST.Type.copy(
-        self,
-        TypeStr if factory is None else factory
-      )
-      return result
-    # GENERATE END
-  class Section1(element.Element):
-    class CodeBlock(element.Element):
-      # GENERATE ELEMENT() BEGIN
-      def __init__(
-        self,
-        tag = 'AST_Section1_CodeBlock',
-        attrib = {},
-        text = '',
-        children = []
-      ):
-        element.Element.__init__(
-          self,
-          tag,
-          attrib,
-          text,
-          children
-        )
-      def copy(self, factory = None):
-        result = element.Element.copy(
-          self,
-          CodeBlock if factory is None else factory
-        )
-        return result
-      # GENERATE END
-    # GENERATE ELEMENT() BEGIN
-    def __init__(
-      self,
-      tag = 'AST_Section1',
-      attrib = {},
-      text = '',
-      children = []
-    ):
-      element.Element.__init__(
-        self,
-        tag,
-        attrib,
-        text,
-        children
-      )
-    def copy(self, factory = None):
-      result = element.Element.copy(
-        self,
-        Section1 if factory is None else factory
-      )
-      return result
-    # GENERATE END
-  class Section2(element.Element):
-    class ClassDef(element.Element):
-      # GENERATE ELEMENT() BEGIN
-      def __init__(
-        self,
-        tag = 'AST_Section2_ClassDef',
-        attrib = {},
-        text = '',
-        children = []
-      ):
-        element.Element.__init__(
-          self,
-          tag,
-          attrib,
-          text,
-          children
-        )
-      def copy(self, factory = None):
-        result = element.Element.copy(
-          self,
-          ClassDef if factory is None else factory
-        )
-        return result
-      # GENERATE END
-      def generate_class_or_field_def(self, context):
-        class_name = self[0].get_text()
-        fields_save = context.fields
-        if len(self[1]):
-          base_class = '.'.join([i.get_text() for i in self[1][0]])
-          for i in range(len(context.base_classes) - 1, -1, -1):
-            if base_class in context.base_classes[i]:
-              full_base_class = '.'.join(context.stack[:i] + [base_class])
-              context.fields = context.base_classes[i][base_class].copy()
-              break
-          else:
-            assert False
-        else:
-          base_class = 'element.Element'
-          full_base_class = 'element.Element'
-          context.fields = []
-        context.fout.write(
-          '{0:s}class {1:s}({2:s}):\n'.format(
-            context.indent,
-            class_name,
-            base_class
-          )
-        )
-        indent_save = context.indent
-        context.indent += '  '
-        context.stack.append(class_name)
-        context.classes.append('.'.join(context.stack))
-        context.base_classes.append({})
-        n_base_fields = len(context.fields)
-        for i in self[2]:
-          i.generate_class_or_field_def(context)
-
-        context.fout.write(
-          '''{0:s}def __init__(
-{1:s}  self,
-{2:s}  tag = '{3:s}',
-{4:s}  attrib = {{}},
-{5:s}  text = '',
-{6:s}  children = []{7:s}
-{8:s}):
-{9:s}  {10:s}.__init__(
-{11:s}    self,
-{12:s}    tag,
-{13:s}    attrib,
-{14:s}    text,
-{15:s}    children{16:s}
-{17:s}  )
-{18:s}'''.format(
-            context.indent,
-            context.indent,
-            context.indent,
-            '_'.join(context.stack),
-            context.indent,
-            context.indent,
-            context.indent,
-            ''.join(
-              [
-                ',\n{0:s}  {1:s}{2:s}'.format(
-                  context.indent,
-                  i[1].get_text(),
-                  (
-                    ' = {0:s}'.format(i[2][0].generate_expression(context))
-                  if len(i[2]) else
-                    ''
-                  )
-                )
-                for i in context.fields
-              ]
-            ),
-            context.indent,
-            context.indent,
-            full_base_class,
-            context.indent,
-            context.indent,
-            context.indent,
-            context.indent,
-            context.indent,
-            ''.join(
-              [
-                ',\n{0:s}    {1:s}'.format(
-                  context.indent,
-                  i[1].get_text()
-                )
-                for i in context.fields[:n_base_fields]
-              ]
-            ),
-            context.indent,
-            ''.join(
-              [
-                '{0:s}  self.{1:s} = {2:s}\n'.format(
-                  context.indent,
-                  i[1].get_text(),
-                  i[1].get_text()
-                )
-                for i in context.fields[n_base_fields:]
-              ]
-            )
-          )
-        )
-        if len(context.fields) > n_base_fields:
-          context.fout.write(
-            '''{0:s}def serialize(self, ref_list):
-{1:s}  {2:s}.serialize(self, ref_list)
-'''.format(
-              context.indent,
-              context.indent,
-              full_base_class
-            )
-          )
-          indent_save2 = context.indent
-          context.indent += '    '
-          for i in context.fields[n_base_fields:]:
-            context.field_name = i[1].get_text()
-            context.fout.write(
-              '''{0:s}  self.set(
-{1:s}    '{2:s}',
-{3:s}    {4:s}
-{5:s}  )
-'''.format(
-                indent_save2,
-                indent_save2,
-                context.field_name,
-                indent_save2,
-                i[0].generate_serialize(
-                  context,
-                  'self.{0:s}'.format(context.field_name)
-                ),
-                indent_save2
-              )
-            )
-          context.indent = indent_save2
-          context.fout.write(
-            '''{0:s}def deserialize(self, ref_list):
-{1:s}  {2:s}.deserialize(self, ref_list)
-'''.format(
-              context.indent,
-              context.indent,
-              full_base_class
-            )
-          )
-          #indent_save2 = context.indent
-          context.indent += '  '
-          for i in context.fields[n_base_fields:]:
-            context.field_name = i[1].get_text()
-            context.fout.write(
-              '''{0:s}  self.{1:s} = {2:s}
-'''.format(
-                indent_save2,
-                context.field_name,
-                i[0].generate_deserialize(
-                  context,
-                  'self.get(\'{0:s}\'{1:s})'.format(
-                    context.field_name,
-                    (
-                      ', \'{0:s}\''.format(
-                        i[2][0].
-                        generate_expression_serialized(context).
-                        replace('\\', '\\\\').
-                        replace('\'', '\\\'')
-                      )
-                    if len(i[2]) else
-                      ''
-                    )
-                  )
-                )
-              )
-            )
-          context.indent = indent_save2
-        context.fout.write(
-          '''{0:s}def copy(self, factory = None):
-{1:s}  result = {2:s}.copy(
-{3:s}    self,
-{4:s}    {5:s} if factory is None else factory
-{6:s}  ){7:s}
-{8:s}  return result
-'''.format(
-            context.indent,
-            context.indent,
-            full_base_class,
-            context.indent,
-            context.indent,
-            class_name,
-            context.indent,
-            ''.join(
-              [
-                '\n{0:s}  result.{1:s} = self.{2:s}'.format(
-                  context.indent,
-                  i[1].get_text(),
-                  i[1].get_text()
-                )
-                for i in context.fields[n_base_fields:]
-              ]
-            ),
-            context.indent
-          )
-        )
-
-        context.indent = indent_save
-        del context.stack[-1]
-        for temp_base_class, temp_fields in context.base_classes.pop().items():
-          context.base_classes[-1][
-            '{0:s}.{1:s}'.format(class_name, temp_base_class)
-          ] = temp_fields
-        context.base_classes[-1][class_name] = context.fields
-        context.fields = fields_save
-    class FieldDef(element.Element):
-      # GENERATE ELEMENT() BEGIN
-      def __init__(
-        self,
-        tag = 'AST_Section2_FieldDef',
-        attrib = {},
-        text = '',
-        children = []
-      ):
-        element.Element.__init__(
-          self,
-          tag,
-          attrib,
-          text,
-          children
-        )
-      def copy(self, factory = None):
-        result = element.Element.copy(
-          self,
-          FieldDef if factory is None else factory
-        )
-        return result
-      # GENERATE END
-      def generate_class_or_field_def(self, context):
-        context.fields.append(self)
-    # GENERATE ELEMENT() BEGIN
-    def __init__(
-      self,
-      tag = 'AST_Section2',
-      attrib = {},
-      text = '',
-      children = []
-    ):
-      element.Element.__init__(
-        self,
-        tag,
-        attrib,
-        text,
-        children
-      )
-    def copy(self, factory = None):
-      result = element.Element.copy(
-        self,
-        Section2 if factory is None else factory
-      )
-      return result
-    # GENERATE END
-  # GENERATE ELEMENT() BEGIN
-  def __init__(
-    self,
-    tag = 'AST',
-    attrib = {},
-    text = '',
-    children = []
-  ):
-    element.Element.__init__(
-      self,
-      tag,
-      attrib,
-      text,
-      children
-    )
-  def copy(self, factory = None):
-    result = element.Element.copy(
-      self,
-      AST if factory is None else factory
-    )
-    return result
-  # GENERATE END
-
-# GENERATE FACTORY(element.Element) BEGIN
-tag_to_class = {
-  'AST': AST,
-  'AST_ClassOrFieldDef': AST.ClassOrFieldDef,
-  'AST_Expression': AST.Expression,
-  'AST_Type': AST.Type,
-  'AST_BaseClass': AST.BaseClass,
-  'AST_ClassBody': AST.ClassBody,
-  'AST_ClassName': AST.ClassName,
-  'AST_DefaultValue': AST.DefaultValue,
-  'AST_Identifier': AST.Identifier,
-  'AST_LiteralBool': AST.LiteralBool,
-  'AST_LiteralInt': AST.LiteralInt,
-  'AST_LiteralList': AST.LiteralList,
-  'AST_LiteralRef': AST.LiteralRef,
-  'AST_LiteralSet': AST.LiteralSet,
-  'AST_LiteralStr': AST.LiteralStr,
-  'AST_Text': AST.Text,
-  'AST_Text_Escape': AST.Text.Escape,
-  'AST_TypeBool': AST.TypeBool,
-  'AST_TypeInt': AST.TypeInt,
-  'AST_TypeList': AST.TypeList,
-  'AST_TypeRef': AST.TypeRef,
-  'AST_TypeSet': AST.TypeSet,
-  'AST_TypeStr': AST.TypeStr,
-  'AST_Section1': AST.Section1,
-  'AST_Section1_CodeBlock': AST.Section1.CodeBlock,
-  'AST_Section2': AST.Section2,
-  'AST_Section2_ClassDef': AST.Section2.ClassDef,
-  'AST_Section2_FieldDef': AST.Section2.FieldDef
-}
-def factory(tag, attrib = {}, *args, **kwargs):
-  return tag_to_class.get(tag, element.Element)(tag, attrib, *args, **kwargs)
-# GENERATE END
index 367a9b7..e8732cc 100644 (file)
@@ -47,12 +47,14 @@ def serialize_bool(value):
 
 str_to_bool = {'false': False, 'true': True}
 def deserialize_bool(text):
+  assert text is not None
   return str_to_bool[text]
 
 def serialize_int(value):
   return str(value)
 
 def deserialize_int(text):
+  assert text is not None
   return int(text)
 
 def serialize_ref(value, ref_list):
@@ -72,6 +74,7 @@ def serialize_ref(value, ref_list):
   return str(ref)
 
 def deserialize_ref(text, ref_list):
+  assert text is not None
   ref = int(text)
   return None if ref < 0 else ref_list[ref]
 
@@ -79,6 +82,7 @@ def serialize_str(value):
   return value
 
 def deserialize_str(text):
+  assert text is not None
   return text
 
 def serialize(value, fout, encoding = 'unicode'):
index f54cf7f..e2ce163 100644 (file)
@@ -14,7 +14,7 @@
 # this program; if not, write to the Free Software Foundation, Inc., 51
 # Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
 
-import ast
+import t_def
 import element
 import os
 
@@ -70,9 +70,9 @@ def generate_py(_ast, home_dir, skel_file, out_file):
           )
         elif line == '# GENERATE SECTION2\n':
           fout.write('# GENERATE SECTION2 BEGIN\n')
-          context = ast.Context(fout)
+          context = t_def.Context(fout)
           for i in _ast[1]:
-            assert isinstance(i, ast.AST.Section2.ClassDef)
+            assert isinstance(i, t_def.AST.Section2.ClassDef)
             i.generate_class_or_field_def(context)
           fout.write(
             '''tag_to_class = {{{0:s}
index 4e2daaa..7b1d799 100644 (file)
@@ -29,7 +29,7 @@ import element
 import sys
 
 # GENERATE SECTION1 BEGIN
-import ast
+import t_def
 import y_tab
 # GENERATE END
 
@@ -196,109 +196,115 @@ def yy_action6():
   return ord('.')
   raise YYContinue()
 def yy_action7():
-  return ord('=')
+  return ord(',')
   raise YYContinue()
 def yy_action8():
-  return ord(':')
+  return ord('=')
   raise YYContinue()
 def yy_action9():
-  return ord(';')
+  return ord(':')
   raise YYContinue()
 def yy_action10():
-  return ord('(')
+  return ord(';')
   raise YYContinue()
 def yy_action11():
-  return ord(')')
+  return ord('(')
   raise YYContinue()
 def yy_action12():
-  return ord('[')
+  return ord(')')
   raise YYContinue()
 def yy_action13():
-  return ord(']')
+  return ord('[')
   raise YYContinue()
 def yy_action14():
-  return ord('{')
+  return ord(']')
   raise YYContinue()
 def yy_action15():
-  return ord('}')
+  return ord('{')
   raise YYContinue()
 def yy_action16():
-  return y_tab.KEYWORD_BOOL
+  return ord('}')
   raise YYContinue()
 def yy_action17():
-  return y_tab.KEYWORD_CLASS
+  return y_tab.KEYWORD_BOOL
   raise YYContinue()
 def yy_action18():
-  return y_tab.KEYWORD_INT
+  return y_tab.KEYWORD_CLASS
   raise YYContinue()
 def yy_action19():
-  return y_tab.KEYWORD_LIST
+  return y_tab.KEYWORD_DICT
   raise YYContinue()
 def yy_action20():
-  return y_tab.KEYWORD_REF
+  return y_tab.KEYWORD_INT
   raise YYContinue()
 def yy_action21():
-  return y_tab.KEYWORD_SET
+  return y_tab.KEYWORD_LIST
   raise YYContinue()
 def yy_action22():
-  return y_tab.KEYWORD_STR
+  return y_tab.KEYWORD_REF
   raise YYContinue()
 def yy_action23():
-  return y_tab.LITERAL_BOOL
+  return y_tab.KEYWORD_SET
   raise YYContinue()
 def yy_action24():
-  return y_tab.LITERAL_BOOL
+  return y_tab.KEYWORD_STR
   raise YYContinue()
 def yy_action25():
-  return y_tab.LITERAL_REF
+  return y_tab.LITERAL_BOOL
   raise YYContinue()
 def yy_action26():
-  return y_tab.IDENTIFIER
+  return y_tab.LITERAL_BOOL
   raise YYContinue()
 def yy_action27():
-  return y_tab.LITERAL_INT
+  return y_tab.LITERAL_REF
   raise YYContinue()
 def yy_action28():
-  return y_tab.LITERAL_INT
+  return y_tab.IDENTIFIER
   raise YYContinue()
 def yy_action29():
   return y_tab.LITERAL_INT
   raise YYContinue()
 def yy_action30():
-  BEGIN(SINGLE_QUOTED)
-  return ord('\'')
+  return y_tab.LITERAL_INT
   raise YYContinue()
 def yy_action31():
-  BEGIN(SECTION3)
-  return y_tab.SECTION3_START
+  return y_tab.LITERAL_INT
   raise YYContinue()
 def yy_action32():
-  yy_push_state(COMMENT)
+  BEGIN(SINGLE_QUOTED)
+  return ord('\'')
   raise YYContinue()
 def yy_action33():
+  BEGIN(SECTION3)
+  return y_tab.SECTION3_START
   raise YYContinue()
 def yy_action34():
+  yy_push_state(COMMENT)
   raise YYContinue()
 def yy_action35():
-  yy_pop_state()
   raise YYContinue()
 def yy_action36():
   raise YYContinue()
 def yy_action37():
+  yy_pop_state()
   raise YYContinue()
 def yy_action38():
   raise YYContinue()
 def yy_action39():
   raise YYContinue()
 def yy_action40():
-  BEGIN(SECTION2)
-  return ord('\'')
   raise YYContinue()
 def yy_action41():
   raise YYContinue()
 def yy_action42():
+  BEGIN(SECTION2)
+  return ord('\'')
   raise YYContinue()
 def yy_action43():
+  raise YYContinue()
+def yy_action44():
+  raise YYContinue()
+def yy_action45():
   YY_FATAL_ERROR( "flex scanner jammed" );
   raise YYContinue()
 def yy_rule0():
@@ -418,12 +424,12 @@ def yy_rule22():
   yy_action = yy_action22
 def yy_rule23():
   global yy_groups, yy_groups_by_name, yy_action
-  yy_groups = [yy_group_text[:yy_group_stack[-1]], None]
+  yy_groups = [yy_group_text[:yy_group_stack[-1]]]
   yy_groups_by_name = {}
   yy_action = yy_action23
 def yy_rule24():
   global yy_groups, yy_groups_by_name, yy_action
-  yy_groups = [yy_group_text[:yy_group_stack[-1]], None]
+  yy_groups = [yy_group_text[:yy_group_stack[-1]]]
   yy_groups_by_name = {}
   yy_action = yy_action24
 def yy_rule25():
@@ -438,12 +444,12 @@ def yy_rule26():
   yy_action = yy_action26
 def yy_rule27():
   global yy_groups, yy_groups_by_name, yy_action
-  yy_groups = [yy_group_text[:yy_group_stack[-1]], None, None, None]
+  yy_groups = [yy_group_text[:yy_group_stack[-1]], None]
   yy_groups_by_name = {}
   yy_action = yy_action27
 def yy_rule28():
   global yy_groups, yy_groups_by_name, yy_action
-  yy_groups = [yy_group_text[:yy_group_stack[-1]], None, None, None]
+  yy_groups = [yy_group_text[:yy_group_stack[-1]], None]
   yy_groups_by_name = {}
   yy_action = yy_action28
 def yy_rule29():
@@ -453,12 +459,12 @@ def yy_rule29():
   yy_action = yy_action29
 def yy_rule30():
   global yy_groups, yy_groups_by_name, yy_action
-  yy_groups = [yy_group_text[:yy_group_stack[-1]]]
+  yy_groups = [yy_group_text[:yy_group_stack[-1]], None, None, None]
   yy_groups_by_name = {}
   yy_action = yy_action30
 def yy_rule31():
   global yy_groups, yy_groups_by_name, yy_action
-  yy_groups = [yy_group_text[:yy_group_stack[-1]]]
+  yy_groups = [yy_group_text[:yy_group_stack[-1]], None, None, None]
   yy_groups_by_name = {}
   yy_action = yy_action31
 def yy_rule32():
@@ -488,12 +494,12 @@ def yy_rule36():
   yy_action = yy_action36
 def yy_rule37():
   global yy_groups, yy_groups_by_name, yy_action
-  yy_groups = [yy_group_text[:yy_group_stack[-1]], None]
+  yy_groups = [yy_group_text[:yy_group_stack[-1]]]
   yy_groups_by_name = {}
   yy_action = yy_action37
 def yy_rule38():
   global yy_groups, yy_groups_by_name, yy_action
-  yy_groups = [yy_group_text[:yy_group_stack[-1]], None]
+  yy_groups = [yy_group_text[:yy_group_stack[-1]]]
   yy_groups_by_name = {}
   yy_action = yy_action38
 def yy_rule39():
@@ -503,12 +509,12 @@ def yy_rule39():
   yy_action = yy_action39
 def yy_rule40():
   global yy_groups, yy_groups_by_name, yy_action
-  yy_groups = [yy_group_text[:yy_group_stack[-1]]]
+  yy_groups = [yy_group_text[:yy_group_stack[-1]], None]
   yy_groups_by_name = {}
   yy_action = yy_action40
 def yy_rule41():
   global yy_groups, yy_groups_by_name, yy_action
-  yy_groups = [yy_group_text[:yy_group_stack[-1]]]
+  yy_groups = [yy_group_text[:yy_group_stack[-1]], None]
   yy_groups_by_name = {}
   yy_action = yy_action41
 def yy_rule42():
@@ -521,6 +527,16 @@ def yy_rule43():
   yy_groups = [yy_group_text[:yy_group_stack[-1]]]
   yy_groups_by_name = {}
   yy_action = yy_action43
+def yy_rule44():
+  global yy_groups, yy_groups_by_name, yy_action
+  yy_groups = [yy_group_text[:yy_group_stack[-1]]]
+  yy_groups_by_name = {}
+  yy_action = yy_action44
+def yy_rule45():
+  global yy_groups, yy_groups_by_name, yy_action
+  yy_groups = [yy_group_text[:yy_group_stack[-1]]]
+  yy_groups_by_name = {}
+  yy_action = yy_action45
 def yy_group0():
   yy_groups[1] = yy_group_text[yy_group_stack[-1]:yy_group_stack[-2]]
   yy_element = yy_group_element(
@@ -528,7 +544,7 @@ def yy_group0():
     yy_group_stack[-2],
     yy_element_stack.pop(),
     
-      ast.AST.LiteralBool,
+      t_def.AST.LiteralBool,
       value = False
     
   )
@@ -543,7 +559,7 @@ def yy_group1():
     yy_group_stack[-2],
     yy_element_stack.pop(),
     
-      ast.AST.LiteralBool,
+      t_def.AST.LiteralBool,
       value = True
     
   )
@@ -558,7 +574,7 @@ def yy_group2():
     yy_group_stack[-2],
     yy_element_stack.pop(),
     
-      ast.AST.LiteralRef
+      t_def.AST.LiteralRef
     
   )
   yy_element_stack[-1].append(
@@ -572,7 +588,7 @@ def yy_group3():
     yy_group_stack[-2],
     yy_element_stack.pop(),
     
-      ast.AST.Identifier
+      t_def.AST.Identifier
     
   )
   yy_element_stack[-1].append(
@@ -586,7 +602,7 @@ def yy_group4():
     yy_group_stack[-2],
     yy_element_stack.pop(),
     
-      ast.AST.LiteralInt,
+      t_def.AST.LiteralInt,
       sign = yy_groups[2],
       base = 8,
       digits = yy_groups[3]
@@ -609,7 +625,7 @@ def yy_group7():
     yy_group_stack[-2],
     yy_element_stack.pop(),
     
-      ast.AST.LiteralInt,
+      t_def.AST.LiteralInt,
       sign = yy_groups[2],
       base = 16,
       digits = yy_groups[3]
@@ -632,7 +648,7 @@ def yy_group10():
     yy_group_stack[-2],
     yy_element_stack.pop(),
     
-      ast.AST.LiteralInt,
+      t_def.AST.LiteralInt,
       sign = yy_groups[2],
       base = 10,
       digits = yy_groups[3]
@@ -654,7 +670,7 @@ def yy_group13():
     yy_group_stack[-1],
     yy_group_stack[-2],
     yy_element_stack.pop(),
-    ast.AST.Text.Escape, value = ord('\'')
+    t_def.AST.Text.Escape, value = ord('\'')
   )
   yy_element_stack[-1].append(
     (yy_group_stack[-1], yy_group_stack[-2], yy_element)
@@ -666,7 +682,7 @@ def yy_group14():
     yy_group_stack[-1],
     yy_group_stack[-2],
     yy_element_stack.pop(),
-    ast.AST.Text.Escape, value = ord('\\')
+    t_def.AST.Text.Escape, value = ord('\\')
   )
   yy_element_stack[-1].append(
     (yy_group_stack[-1], yy_group_stack[-2], yy_element)
@@ -678,7 +694,7 @@ def yy_group15():
     yy_group_stack[-1],
     yy_group_stack[-2],
     yy_element_stack.pop(),
-    ast.AST.Text.Escape, value = ord('\n')
+    t_def.AST.Text.Escape, value = ord('\n')
   )
   yy_element_stack[-1].append(
     (yy_group_stack[-1], yy_group_stack[-2], yy_element)
@@ -689,133 +705,142 @@ yy_dfa_states = [([256], [0], [0]), ([9, 10, 11, 32, 33, 37, 38, 47, 48, 256],
 47, 48, 256], [13, 18, 15, 13, 18, 13, 19, 13, 20, 13], [9]), ([9, 10, 11, 32,
 33, 37, 38, 256], [21, 22, 23, 21, 22, 21, 24, 21], [5]), ([9, 10, 11, 32, 33,
 37, 38, 256], [25, 26, 23, 25, 26, 25, 27, 25], [5]), ([9, 10, 14, 32, 33, 39,
-40, 41, 42, 45, 46, 47, 48, 49, 58, 59, 60, 61, 62, 65, 70, 71, 78, 79, 84, 85,
-91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 105, 106, 108, 109, 114, 115, 116,
-123, 124, 125, 126, 256], [28, 29, 30, 28, 29, 28, 31, 32, 33, 28, 34, 35, 36,
-37, 38, 39, 40, 28, 41, 28, 42, 43, 42, 44, 42, 45, 42, 46, 28, 47, 28, 42, 28,
-42, 48, 49, 42, 50, 42, 51, 42, 52, 53, 42, 54, 28, 55, 28], []), ([9, 10, 14,
-32, 33, 37, 38, 39, 40, 41, 42, 45, 46, 47, 48, 49, 58, 59, 60, 61, 62, 65, 70,
-71, 78, 79, 84, 85, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 105, 106, 108,
-109, 114, 115, 116, 123, 124, 125, 126, 256], [56, 57, 58, 56, 57, 56, 59, 56,
-60, 61, 62, 56, 63, 64, 65, 66, 67, 68, 69, 56, 70, 56, 71, 72, 71, 73, 71, 74,
-71, 75, 56, 76, 56, 71, 56, 71, 77, 78, 71, 79, 71, 80, 71, 81, 82, 71, 83, 56,
-84, 56], []), ([10, 11, 42, 43, 256], [85, 86, 85, 87, 85], []), ([10, 11, 42,
-43, 256], [85, 86, 85, 88, 85], []), ([10, 11, 39, 40, 92, 93, 256], [89, 90,
-89, 91, 89, 92, 89], []), ([10, 11, 39, 40, 92, 93, 256], [89, 90, 89, 91, 89,
-93, 89], []), ([10, 11, 256], [94, 95, 94], [3]), ([10, 11, 256], [96, 95, 96],
-[3]), ([9, 10, 11, 32, 33, 37, 38, 47, 48, 256], [97, 98, 99, 97, 98, 97, 100,
-97, 101, 97], [8]), ([37, 38, 123, 124, 256], [102, 103, 102, 104, 102], [2]),
-([42, 43, 256], [105, 106, 105], [1]), ([9, 10, 11, 32, 33, 37, 38, 47, 48, 256
-], [97, 107, 99, 97, 107, 97, 108, 97, 109, 97], [8]), ([37, 38, 123, 124, 256
-], [102, 110, 102, 111, 102], [2]), ([42, 43, 256], [105, 106, 105], [1]), ([
-10, 11, 256], [112, 113, 112], [2]), ([9, 10, 11, 32, 33, 37, 38, 256], [114,
-115, 116, 114, 115, 114, 117, 114], [4]), ([10, 11, 125, 126, 256], [118, 119,
-118, 120, 118], [3]), ([10, 11, 256], [121, 113, 121], [2]), ([9, 10, 11, 32,
-33, 37, 38, 256], [122, 123, 116, 122, 123, 122, 124, 122], [4]), ([10, 11,
-125, 126, 256], [125, 119, 125, 126, 125], [3]), ([9, 10, 32, 33, 256], [105,
-127, 105, 127, 105], [1]), ([48, 49, 58, 256], [128, 129, 130, 128], [3]), ([
-42, 43, 256], [105, 131, 105], [1]), ([48, 56, 58, 120, 121, 256], [128, 132,
-130, 128, 133, 128], [3]), ([48, 58, 256], [105, 134, 105], [1]), ([48, 58, 65,
-91, 95, 96, 97, 123, 256], [105, 135, 105, 135, 105, 135, 105, 135, 105], [1]),
-([48, 58, 65, 91, 95, 96, 97, 98, 123, 256], [102, 136, 102, 136, 102, 136,
-102, 137, 136, 102], [2]), ([48, 58, 65, 91, 95, 96, 97, 111, 112, 123, 256], [
-102, 136, 102, 136, 102, 136, 102, 136, 138, 136, 102], [2]), ([48, 58, 65, 91,
-95, 96, 97, 114, 115, 123, 256], [102, 136, 102, 136, 102, 136, 102, 136, 139,
-136, 102], [2]), ([48, 58, 65, 91, 95, 96, 97, 111, 112, 123, 256], [102, 136,
-102, 136, 102, 136, 102, 136, 140, 136, 102], [2]), ([48, 58, 65, 91, 95, 96,
-97, 108, 109, 123, 256], [102, 136, 102, 136, 102, 136, 102, 136, 141, 136, 102
-], [2]), ([48, 58, 65, 91, 95, 96, 97, 110, 111, 123, 256], [102, 136, 102,
-136, 102, 136, 102, 136, 142, 136, 102], [2]), ([48, 58, 65, 91, 95, 96, 97,
-105, 106, 123, 256], [102, 136, 102, 136, 102, 136, 102, 136, 143, 136, 102], [
-2]), ([48, 58, 65, 91, 95, 96, 97, 101, 102, 123, 256], [102, 136, 102, 136,
-102, 136, 102, 136, 144, 136, 102], [2]), ([48, 58, 65, 91, 95, 96, 97, 101,
-102, 116, 117, 123, 256], [128, 145, 128, 145, 128, 145, 128, 145, 146, 145,
-147, 145, 128], [3]), ([9, 10, 32, 33, 37, 38, 256], [128, 148, 128, 148, 128,
-149, 128], [3]), ([37, 38, 256], [105, 150, 105], [1]), ([48, 49, 58, 256], [
-128, 151, 152, 128], [3]), ([42, 43, 256], [105, 131, 105], [1]), ([48, 56, 58,
-120, 121, 256], [128, 153, 152, 128, 154, 128], [3]), ([48, 58, 256], [105,
-155, 105], [1]), ([48, 58, 65, 91, 95, 96, 97, 123, 256], [105, 156, 105, 156,
-105, 156, 105, 156, 105], [1]), ([48, 58, 65, 91, 95, 96, 97, 98, 123, 256], [
-102, 157, 102, 157, 102, 157, 102, 158, 157, 102], [2]), ([48, 58, 65, 91, 95,
-96, 97, 111, 112, 123, 256], [102, 157, 102, 157, 102, 157, 102, 157, 159, 157,
-102], [2]), ([48, 58, 65, 91, 95, 96, 97, 114, 115, 123, 256], [102, 157, 102,
-157, 102, 157, 102, 157, 160, 157, 102], [2]), ([48, 58, 65, 91, 95, 96, 97,
-111, 112, 123, 256], [102, 157, 102, 157, 102, 157, 102, 157, 161, 157, 102], [
-2]), ([48, 58, 65, 91, 95, 96, 97, 108, 109, 123, 256], [102, 157, 102, 157,
-102, 157, 102, 157, 162, 157, 102], [2]), ([48, 58, 65, 91, 95, 96, 97, 110,
-111, 123, 256], [102, 157, 102, 157, 102, 157, 102, 157, 163, 157, 102], [2]),
-([48, 58, 65, 91, 95, 96, 97, 105, 106, 123, 256], [102, 157, 102, 157, 102,
-157, 102, 157, 164, 157, 102], [2]), ([48, 58, 65, 91, 95, 96, 97, 101, 102,
-123, 256], [102, 157, 102, 157, 102, 157, 102, 157, 165, 157, 102], [2]), ([48,
-58, 65, 91, 95, 96, 97, 101, 102, 116, 117, 123, 256], [128, 166, 128, 166,
-128, 166, 128, 166, 167, 166, 168, 166, 128], [3]), ([47, 48, 256], [105, 169,
-105], [1]), ([47, 48, 256], [105, 169, 105], [1]), ([39, 40, 92, 93, 110, 111,
-256], [128, 170, 128, 171, 128, 172, 128], [3]), ([39, 40, 92, 93, 110, 111,
-256], [128, 170, 128, 171, 128, 172, 128], [3]), ([10, 11, 256], [173, 174, 173
-], [2]), ([10, 11, 256], [175, 174, 175], [2]), ([9, 10, 11, 32, 33, 256], [
-102, 176, 177, 102, 176, 102], [2]), ([9, 10, 11, 32, 33, 256], [102, 104, 178,
-102, 104, 102], [2]), ([9, 10, 11, 32, 33, 256], [102, 179, 177, 102, 179, 102
-], [2]), ([9, 10, 11, 32, 33, 256], [102, 111, 178, 102, 111, 102], [2]), ([9,
-10, 11, 32, 33, 256], [114, 180, 181, 114, 180, 114], [4]), ([9, 10, 11, 32,
-33, 256], [122, 182, 181, 122, 182, 122], [4]), ([48, 56, 58, 256], [102, 183,
-184, 102], [2]), ([48, 58, 65, 71, 97, 103, 256], [105, 185, 105, 185, 105,
-185, 105], [1]), ([48, 58, 65, 91, 95, 96, 97, 108, 109, 123, 256], [102, 136,
-102, 136, 102, 136, 102, 136, 186, 136, 102], [2]), ([48, 58, 65, 91, 95, 96,
-97, 110, 111, 123, 256], [102, 136, 102, 136, 102, 136, 102, 136, 187, 136, 102
-], [2]), ([48, 58, 65, 91, 95, 96, 97, 117, 118, 123, 256], [102, 136, 102,
-136, 102, 136, 102, 136, 188, 136, 102], [2]), ([48, 58, 65, 91, 95, 96, 97,
-111, 112, 123, 256], [102, 136, 102, 136, 102, 136, 102, 136, 189, 136, 102], [
-2]), ([48, 58, 65, 91, 95, 96, 97, 98, 123, 256], [102, 136, 102, 136, 102,
-136, 102, 190, 136, 102], [2]), ([48, 58, 65, 91, 95, 96, 97, 116, 117, 123,
-256], [102, 136, 102, 136, 102, 136, 102, 136, 191, 136, 102], [2]), ([48, 58,
-65, 91, 95, 96, 97, 115, 116, 123, 256], [102, 136, 102, 136, 102, 136, 102,
-136, 192, 136, 102], [2]), ([48, 58, 65, 91, 95, 96, 97, 102, 103, 123, 256], [
-102, 136, 102, 136, 102, 136, 102, 136, 193, 136, 102], [2]), ([48, 58, 65, 91,
-95, 96, 97, 116, 117, 123, 256], [102, 136, 102, 136, 102, 136, 102, 136, 194,
-136, 102], [2]), ([48, 58, 65, 91, 95, 96, 97, 114, 115, 123, 256], [102, 136,
-102, 136, 102, 136, 102, 136, 195, 136, 102], [2]), ([9, 10, 11, 32, 33, 256],
-[102, 196, 197, 102, 196, 102], [2]), ([48, 56, 58, 256], [102, 198, 199, 102],
-[2]), ([48, 58, 65, 71, 97, 103, 256], [105, 200, 105, 200, 105, 200, 105], [1]
-), ([48, 58, 65, 91, 95, 96, 97, 108, 109, 123, 256], [102, 157, 102, 157, 102,
-157, 102, 157, 201, 157, 102], [2]), ([48, 58, 65, 91, 95, 96, 97, 110, 111,
-123, 256], [102, 157, 102, 157, 102, 157, 102, 157, 202, 157, 102], [2]), ([48,
-58, 65, 91, 95, 96, 97, 117, 118, 123, 256], [102, 157, 102, 157, 102, 157,
-102, 157, 203, 157, 102], [2]), ([48, 58, 65, 91, 95, 96, 97, 111, 112, 123,
-256], [102, 157, 102, 157, 102, 157, 102, 157, 204, 157, 102], [2]), ([48, 58,
-65, 91, 95, 96, 97, 98, 123, 256], [102, 157, 102, 157, 102, 157, 102, 205,
-157, 102], [2]), ([48, 58, 65, 91, 95, 96, 97, 116, 117, 123, 256], [102, 157,
-102, 157, 102, 157, 102, 157, 206, 157, 102], [2]), ([48, 58, 65, 91, 95, 96,
-97, 115, 116, 123, 256], [102, 157, 102, 157, 102, 157, 102, 157, 207, 157, 102
-], [2]), ([48, 58, 65, 91, 95, 96, 97, 102, 103, 123, 256], [102, 157, 102,
-157, 102, 157, 102, 157, 208, 157, 102], [2]), ([48, 58, 65, 91, 95, 96, 97,
-116, 117, 123, 256], [102, 157, 102, 157, 102, 157, 102, 157, 209, 157, 102], [
-2]), ([48, 58, 65, 91, 95, 96, 97, 114, 115, 123, 256], [102, 157, 102, 157,
-102, 157, 102, 157, 210, 157, 102], [2]), ([48, 58, 65, 71, 97, 103, 256], [
-105, 185, 105, 185, 105, 185, 105], [1]), ([48, 58, 65, 91, 95, 96, 97, 115,
-116, 123, 256], [102, 136, 102, 136, 102, 136, 102, 136, 211, 136, 102], [2]),
-([48, 58, 65, 91, 95, 96, 97, 101, 102, 123, 256], [102, 136, 102, 136, 102,
-136, 102, 136, 212, 136, 102], [2]), ([48, 58, 65, 91, 95, 96, 97, 101, 102,
-123, 256], [102, 136, 102, 136, 102, 136, 102, 136, 213, 136, 102], [2]), ([48,
-58, 65, 91, 95, 96, 97, 108, 109, 123, 256], [102, 136, 102, 136, 102, 136,
-102, 136, 214, 136, 102], [2]), ([48, 58, 65, 91, 95, 96, 97, 115, 116, 123,
-256], [102, 136, 102, 136, 102, 136, 102, 136, 215, 136, 102], [2]), ([48, 58,
-65, 91, 95, 96, 97, 116, 117, 123, 256], [102, 136, 102, 136, 102, 136, 102,
-136, 216, 136, 102], [2]), ([48, 58, 65, 71, 97, 103, 256], [105, 200, 105,
-200, 105, 200, 105], [1]), ([48, 58, 65, 91, 95, 96, 97, 115, 116, 123, 256], [
-102, 157, 102, 157, 102, 157, 102, 157, 217, 157, 102], [2]), ([48, 58, 65, 91,
-95, 96, 97, 101, 102, 123, 256], [102, 157, 102, 157, 102, 157, 102, 157, 218,
-157, 102], [2]), ([48, 58, 65, 91, 95, 96, 97, 101, 102, 123, 256], [102, 157,
-102, 157, 102, 157, 102, 157, 219, 157, 102], [2]), ([48, 58, 65, 91, 95, 96,
-97, 108, 109, 123, 256], [102, 157, 102, 157, 102, 157, 102, 157, 220, 157, 102
-], [2]), ([48, 58, 65, 91, 95, 96, 97, 115, 116, 123, 256], [102, 157, 102,
-157, 102, 157, 102, 157, 221, 157, 102], [2]), ([48, 58, 65, 91, 95, 96, 97,
-116, 117, 123, 256], [102, 157, 102, 157, 102, 157, 102, 157, 222, 157, 102], [
-2]), ([48, 58, 65, 91, 95, 96, 97, 101, 102, 123, 256], [102, 136, 102, 136,
-102, 136, 102, 136, 223, 136, 102], [2]), ([48, 58, 65, 91, 95, 96, 97, 115,
-116, 123, 256], [102, 136, 102, 136, 102, 136, 102, 136, 224, 136, 102], [2]),
-([48, 58, 65, 91, 95, 96, 97, 101, 102, 123, 256], [102, 157, 102, 157, 102,
-157, 102, 157, 225, 157, 102], [2]), ([48, 58, 65, 91, 95, 96, 97, 115, 116,
-123, 256], [102, 157, 102, 157, 102, 157, 102, 157, 226, 157, 102], [2])]
+40, 41, 42, 44, 45, 46, 47, 48, 49, 58, 59, 60, 61, 62, 65, 70, 71, 78, 79, 84,
+85, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 105, 106, 108, 109, 114, 115,
+116, 123, 124, 125, 126, 256], [28, 29, 30, 28, 29, 28, 31, 32, 33, 28, 34, 35,
+36, 37, 38, 39, 40, 41, 28, 42, 28, 43, 44, 43, 45, 43, 46, 43, 47, 28, 48, 28,
+43, 28, 43, 49, 50, 51, 43, 52, 43, 53, 43, 54, 55, 43, 56, 28, 57, 28], []), (
+[9, 10, 14, 32, 33, 37, 38, 39, 40, 41, 42, 44, 45, 46, 47, 48, 49, 58, 59, 60,
+61, 62, 65, 70, 71, 78, 79, 84, 85, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100,
+101, 105, 106, 108, 109, 114, 115, 116, 123, 124, 125, 126, 256], [58, 59, 60,
+58, 59, 58, 61, 58, 62, 63, 64, 58, 65, 66, 67, 68, 69, 70, 71, 72, 58, 73, 58,
+74, 75, 74, 76, 74, 77, 74, 78, 58, 79, 58, 74, 58, 74, 80, 81, 82, 74, 83, 74,
+84, 74, 85, 86, 74, 87, 58, 88, 58], []), ([10, 11, 42, 43, 256], [89, 90, 89,
+91, 89], []), ([10, 11, 42, 43, 256], [89, 90, 89, 92, 89], []), ([10, 11, 39,
+40, 92, 93, 256], [93, 94, 93, 95, 93, 96, 93], []), ([10, 11, 39, 40, 92, 93,
+256], [93, 94, 93, 95, 93, 97, 93], []), ([10, 11, 256], [98, 99, 98], [3]), ([
+10, 11, 256], [100, 99, 100], [3]), ([9, 10, 11, 32, 33, 37, 38, 47, 48, 256],
+[101, 102, 103, 101, 102, 101, 104, 101, 105, 101], [8]), ([37, 38, 123, 124,
+256], [106, 107, 106, 108, 106], [2]), ([42, 43, 256], [109, 110, 109], [1]), (
+[9, 10, 11, 32, 33, 37, 38, 47, 48, 256], [101, 111, 103, 101, 111, 101, 112,
+101, 113, 101], [8]), ([37, 38, 123, 124, 256], [106, 114, 106, 115, 106], [2]
+), ([42, 43, 256], [109, 110, 109], [1]), ([10, 11, 256], [116, 117, 116], [2]
+), ([9, 10, 11, 32, 33, 37, 38, 256], [118, 119, 120, 118, 119, 118, 121, 118],
+[4]), ([10, 11, 125, 126, 256], [122, 123, 122, 124, 122], [3]), ([10, 11, 256
+], [125, 117, 125], [2]), ([9, 10, 11, 32, 33, 37, 38, 256], [126, 127, 120,
+126, 127, 126, 128, 126], [4]), ([10, 11, 125, 126, 256], [129, 123, 129, 130,
+129], [3]), ([9, 10, 32, 33, 256], [109, 131, 109, 131, 109], [1]), ([48, 49,
+58, 256], [132, 133, 134, 132], [3]), ([42, 43, 256], [109, 135, 109], [1]), ([
+48, 56, 58, 120, 121, 256], [132, 136, 134, 132, 137, 132], [3]), ([48, 58, 256
+], [109, 138, 109], [1]), ([48, 58, 65, 91, 95, 96, 97, 123, 256], [109, 139,
+109, 139, 109, 139, 109, 139, 109], [1]), ([48, 58, 65, 91, 95, 96, 97, 98,
+123, 256], [106, 140, 106, 140, 106, 140, 106, 141, 140, 106], [2]), ([48, 58,
+65, 91, 95, 96, 97, 111, 112, 123, 256], [106, 140, 106, 140, 106, 140, 106,
+140, 142, 140, 106], [2]), ([48, 58, 65, 91, 95, 96, 97, 114, 115, 123, 256], [
+106, 140, 106, 140, 106, 140, 106, 140, 143, 140, 106], [2]), ([48, 58, 65, 91,
+95, 96, 97, 111, 112, 123, 256], [106, 140, 106, 140, 106, 140, 106, 140, 144,
+140, 106], [2]), ([48, 58, 65, 91, 95, 96, 97, 108, 109, 123, 256], [106, 140,
+106, 140, 106, 140, 106, 140, 145, 140, 106], [2]), ([48, 58, 65, 91, 95, 96,
+97, 105, 106, 123, 256], [106, 140, 106, 140, 106, 140, 106, 140, 146, 140, 106
+], [2]), ([48, 58, 65, 91, 95, 96, 97, 110, 111, 123, 256], [106, 140, 106,
+140, 106, 140, 106, 140, 147, 140, 106], [2]), ([48, 58, 65, 91, 95, 96, 97,
+105, 106, 123, 256], [106, 140, 106, 140, 106, 140, 106, 140, 148, 140, 106], [
+2]), ([48, 58, 65, 91, 95, 96, 97, 101, 102, 123, 256], [106, 140, 106, 140,
+106, 140, 106, 140, 149, 140, 106], [2]), ([48, 58, 65, 91, 95, 96, 97, 101,
+102, 116, 117, 123, 256], [132, 150, 132, 150, 132, 150, 132, 150, 151, 150,
+152, 150, 132], [3]), ([9, 10, 32, 33, 37, 38, 256], [132, 153, 132, 153, 132,
+154, 132], [3]), ([37, 38, 256], [109, 155, 109], [1]), ([48, 49, 58, 256], [
+132, 156, 157, 132], [3]), ([42, 43, 256], [109, 135, 109], [1]), ([48, 56, 58,
+120, 121, 256], [132, 158, 157, 132, 159, 132], [3]), ([48, 58, 256], [109,
+160, 109], [1]), ([48, 58, 65, 91, 95, 96, 97, 123, 256], [109, 161, 109, 161,
+109, 161, 109, 161, 109], [1]), ([48, 58, 65, 91, 95, 96, 97, 98, 123, 256], [
+106, 162, 106, 162, 106, 162, 106, 163, 162, 106], [2]), ([48, 58, 65, 91, 95,
+96, 97, 111, 112, 123, 256], [106, 162, 106, 162, 106, 162, 106, 162, 164, 162,
+106], [2]), ([48, 58, 65, 91, 95, 96, 97, 114, 115, 123, 256], [106, 162, 106,
+162, 106, 162, 106, 162, 165, 162, 106], [2]), ([48, 58, 65, 91, 95, 96, 97,
+111, 112, 123, 256], [106, 162, 106, 162, 106, 162, 106, 162, 166, 162, 106], [
+2]), ([48, 58, 65, 91, 95, 96, 97, 108, 109, 123, 256], [106, 162, 106, 162,
+106, 162, 106, 162, 167, 162, 106], [2]), ([48, 58, 65, 91, 95, 96, 97, 105,
+106, 123, 256], [106, 162, 106, 162, 106, 162, 106, 162, 168, 162, 106], [2]),
+([48, 58, 65, 91, 95, 96, 97, 110, 111, 123, 256], [106, 162, 106, 162, 106,
+162, 106, 162, 169, 162, 106], [2]), ([48, 58, 65, 91, 95, 96, 97, 105, 106,
+123, 256], [106, 162, 106, 162, 106, 162, 106, 162, 170, 162, 106], [2]), ([48,
+58, 65, 91, 95, 96, 97, 101, 102, 123, 256], [106, 162, 106, 162, 106, 162,
+106, 162, 171, 162, 106], [2]), ([48, 58, 65, 91, 95, 96, 97, 101, 102, 116,
+117, 123, 256], [132, 172, 132, 172, 132, 172, 132, 172, 173, 172, 174, 172,
+132], [3]), ([47, 48, 256], [109, 175, 109], [1]), ([47, 48, 256], [109, 175,
+109], [1]), ([39, 40, 92, 93, 110, 111, 256], [132, 176, 132, 177, 132, 178,
+132], [3]), ([39, 40, 92, 93, 110, 111, 256], [132, 176, 132, 177, 132, 178,
+132], [3]), ([10, 11, 256], [179, 180, 179], [2]), ([10, 11, 256], [181, 180,
+181], [2]), ([9, 10, 11, 32, 33, 256], [106, 182, 183, 106, 182, 106], [2]), ([
+9, 10, 11, 32, 33, 256], [106, 108, 184, 106, 108, 106], [2]), ([9, 10, 11, 32,
+33, 256], [106, 185, 183, 106, 185, 106], [2]), ([9, 10, 11, 32, 33, 256], [
+106, 115, 184, 106, 115, 106], [2]), ([9, 10, 11, 32, 33, 256], [118, 186, 187,
+118, 186, 118], [4]), ([9, 10, 11, 32, 33, 256], [126, 188, 187, 126, 188, 126
+], [4]), ([48, 56, 58, 256], [106, 189, 190, 106], [2]), ([48, 58, 65, 71, 97,
+103, 256], [109, 191, 109, 191, 109, 191, 109], [1]), ([48, 58, 65, 91, 95, 96,
+97, 108, 109, 123, 256], [106, 140, 106, 140, 106, 140, 106, 140, 192, 140, 106
+], [2]), ([48, 58, 65, 91, 95, 96, 97, 110, 111, 123, 256], [106, 140, 106,
+140, 106, 140, 106, 140, 193, 140, 106], [2]), ([48, 58, 65, 91, 95, 96, 97,
+117, 118, 123, 256], [106, 140, 106, 140, 106, 140, 106, 140, 194, 140, 106], [
+2]), ([48, 58, 65, 91, 95, 96, 97, 111, 112, 123, 256], [106, 140, 106, 140,
+106, 140, 106, 140, 195, 140, 106], [2]), ([48, 58, 65, 91, 95, 96, 97, 98,
+123, 256], [106, 140, 106, 140, 106, 140, 106, 196, 140, 106], [2]), ([48, 58,
+65, 91, 95, 96, 97, 99, 100, 123, 256], [106, 140, 106, 140, 106, 140, 106,
+140, 197, 140, 106], [2]), ([48, 58, 65, 91, 95, 96, 97, 116, 117, 123, 256], [
+106, 140, 106, 140, 106, 140, 106, 140, 198, 140, 106], [2]), ([48, 58, 65, 91,
+95, 96, 97, 115, 116, 123, 256], [106, 140, 106, 140, 106, 140, 106, 140, 199,
+140, 106], [2]), ([48, 58, 65, 91, 95, 96, 97, 102, 103, 123, 256], [106, 140,
+106, 140, 106, 140, 106, 140, 200, 140, 106], [2]), ([48, 58, 65, 91, 95, 96,
+97, 116, 117, 123, 256], [106, 140, 106, 140, 106, 140, 106, 140, 201, 140, 106
+], [2]), ([48, 58, 65, 91, 95, 96, 97, 114, 115, 123, 256], [106, 140, 106,
+140, 106, 140, 106, 140, 202, 140, 106], [2]), ([9, 10, 11, 32, 33, 256], [106,
+203, 204, 106, 203, 106], [2]), ([48, 56, 58, 256], [106, 205, 206, 106], [2]),
+([48, 58, 65, 71, 97, 103, 256], [109, 207, 109, 207, 109, 207, 109], [1]), ([
+48, 58, 65, 91, 95, 96, 97, 108, 109, 123, 256], [106, 162, 106, 162, 106, 162,
+106, 162, 208, 162, 106], [2]), ([48, 58, 65, 91, 95, 96, 97, 110, 111, 123,
+256], [106, 162, 106, 162, 106, 162, 106, 162, 209, 162, 106], [2]), ([48, 58,
+65, 91, 95, 96, 97, 117, 118, 123, 256], [106, 162, 106, 162, 106, 162, 106,
+162, 210, 162, 106], [2]), ([48, 58, 65, 91, 95, 96, 97, 111, 112, 123, 256], [
+106, 162, 106, 162, 106, 162, 106, 162, 211, 162, 106], [2]), ([48, 58, 65, 91,
+95, 96, 97, 98, 123, 256], [106, 162, 106, 162, 106, 162, 106, 212, 162, 106],
+[2]), ([48, 58, 65, 91, 95, 96, 97, 99, 100, 123, 256], [106, 162, 106, 162,
+106, 162, 106, 162, 213, 162, 106], [2]), ([48, 58, 65, 91, 95, 96, 97, 116,
+117, 123, 256], [106, 162, 106, 162, 106, 162, 106, 162, 214, 162, 106], [2]),
+([48, 58, 65, 91, 95, 96, 97, 115, 116, 123, 256], [106, 162, 106, 162, 106,
+162, 106, 162, 215, 162, 106], [2]), ([48, 58, 65, 91, 95, 96, 97, 102, 103,
+123, 256], [106, 162, 106, 162, 106, 162, 106, 162, 216, 162, 106], [2]), ([48,
+58, 65, 91, 95, 96, 97, 116, 117, 123, 256], [106, 162, 106, 162, 106, 162,
+106, 162, 217, 162, 106], [2]), ([48, 58, 65, 91, 95, 96, 97, 114, 115, 123,
+256], [106, 162, 106, 162, 106, 162, 106, 162, 218, 162, 106], [2]), ([48, 58,
+65, 71, 97, 103, 256], [109, 191, 109, 191, 109, 191, 109], [1]), ([48, 58, 65,
+91, 95, 96, 97, 115, 116, 123, 256], [106, 140, 106, 140, 106, 140, 106, 140,
+219, 140, 106], [2]), ([48, 58, 65, 91, 95, 96, 97, 101, 102, 123, 256], [106,
+140, 106, 140, 106, 140, 106, 140, 220, 140, 106], [2]), ([48, 58, 65, 91, 95,
+96, 97, 101, 102, 123, 256], [106, 140, 106, 140, 106, 140, 106, 140, 221, 140,
+106], [2]), ([48, 58, 65, 91, 95, 96, 97, 108, 109, 123, 256], [106, 140, 106,
+140, 106, 140, 106, 140, 222, 140, 106], [2]), ([48, 58, 65, 91, 95, 96, 97,
+115, 116, 123, 256], [106, 140, 106, 140, 106, 140, 106, 140, 223, 140, 106], [
+2]), ([48, 58, 65, 91, 95, 96, 97, 116, 117, 123, 256], [106, 140, 106, 140,
+106, 140, 106, 140, 224, 140, 106], [2]), ([48, 58, 65, 91, 95, 96, 97, 116,
+117, 123, 256], [106, 140, 106, 140, 106, 140, 106, 140, 225, 140, 106], [2]),
+([48, 58, 65, 71, 97, 103, 256], [109, 207, 109, 207, 109, 207, 109], [1]), ([
+48, 58, 65, 91, 95, 96, 97, 115, 116, 123, 256], [106, 162, 106, 162, 106, 162,
+106, 162, 226, 162, 106], [2]), ([48, 58, 65, 91, 95, 96, 97, 101, 102, 123,
+256], [106, 162, 106, 162, 106, 162, 106, 162, 227, 162, 106], [2]), ([48, 58,
+65, 91, 95, 96, 97, 101, 102, 123, 256], [106, 162, 106, 162, 106, 162, 106,
+162, 228, 162, 106], [2]), ([48, 58, 65, 91, 95, 96, 97, 108, 109, 123, 256], [
+106, 162, 106, 162, 106, 162, 106, 162, 229, 162, 106], [2]), ([48, 58, 65, 91,
+95, 96, 97, 115, 116, 123, 256], [106, 162, 106, 162, 106, 162, 106, 162, 230,
+162, 106], [2]), ([48, 58, 65, 91, 95, 96, 97, 116, 117, 123, 256], [106, 162,
+106, 162, 106, 162, 106, 162, 231, 162, 106], [2]), ([48, 58, 65, 91, 95, 96,
+97, 116, 117, 123, 256], [106, 162, 106, 162, 106, 162, 106, 162, 232, 162, 106
+], [2]), ([48, 58, 65, 91, 95, 96, 97, 101, 102, 123, 256], [106, 140, 106,
+140, 106, 140, 106, 140, 233, 140, 106], [2]), ([48, 58, 65, 91, 95, 96, 97,
+115, 116, 123, 256], [106, 140, 106, 140, 106, 140, 106, 140, 234, 140, 106], [
+2]), ([48, 58, 65, 91, 95, 96, 97, 101, 102, 123, 256], [106, 162, 106, 162,
+106, 162, 106, 162, 235, 162, 106], [2]), ([48, 58, 65, 91, 95, 96, 97, 115,
+116, 123, 256], [106, 162, 106, 162, 106, 162, 106, 162, 236, 162, 106], [2])]
 yy_dfa_actions = [(0, []), (1, [(1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1),
 (3, 1), (3, 1), (1, 1), (3, 1), (3, 1), (1, 1), (3, 1), (3, 1), (1, 1), (3, 1),
 (1, 1), (3, 1), (2, 1, yy_rule_start), (2, 1, yy_rule3), (0, 1), (3, 1), (1, 1
@@ -836,753 +861,790 @@ yy_rule_start), (2, 1, yy_rule3), (3, 1), (0, 1)]), (3, [(1, 1), (1, 1), (1, 1
 yy_rule_start), (2, 1, yy_rule5), (3, 1), (0, 1)]), (5, [(1, 1), (1, 1), (1, 1
 ), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1,
 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1,
-1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (3, 1), (3, 1), (3, 1), (3,
+1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (3, 1), (3,
 1), (3, 1), (3, 1), (3, 1), (3, 1), (3, 1), (3, 1), (3, 1), (3, 1), (3, 1), (3,
-1), (3, 1), (3, 1), (3, 1), (2, 1, yy_group0), (3, 1), (2, 1, yy_group1), (3, 1
-), (2, 1, yy_group2), (3, 1), (2, 1, yy_group3), (3, 1), (2, 1, yy_group4), (2,
-1, yy_group5), (1, 1), (3, 1), (2, 1, yy_group_end), (3, 1), (2, 1, yy_group7),
-(2, 1, yy_group8), (1, 1), (3, 1), (2, 1, yy_group_end), (3, 1), (2, 1,
-yy_group10), (2, 1, yy_group11), (1, 1), (3, 1), (2, 1, yy_group_end), (2, 1,
-yy_group12), (3, 1), (3, 1), (3, 1), (3, 1), (3, 1), (3, 1), (1, 1), (1, 1), (
-1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1),
-(1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1),
-(1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (0, 1), (0, 1), (0, 1), (0, 1),
-(0, 1), (0, 1), (0, 1), (0, 1), (0, 1), (0, 1), (0, 1), (0, 1), (0, 1), (0, 1),
-(0, 1), (0, 1), (0, 1), (2, 1, yy_group0), (0, 1), (2, 1, yy_group1), (0, 1), (
-2, 1, yy_group2), (0, 1), (2, 1, yy_group3), (0, 1), (2, 1, yy_group4), (2, 1,
+1), (3, 1), (3, 1), (3, 1), (3, 1), (3, 1), (3, 1), (3, 1), (2, 1, yy_group0),
+(3, 1), (2, 1, yy_group1), (3, 1), (2, 1, yy_group2), (3, 1), (2, 1, yy_group3
+), (3, 1), (2, 1, yy_group4), (2, 1, yy_group5), (1, 1), (3, 1), (2, 1,
+yy_group_end), (3, 1), (2, 1, yy_group7), (2, 1, yy_group8), (1, 1), (3, 1), (
+2, 1, yy_group_end), (3, 1), (2, 1, yy_group10), (2, 1, yy_group11), (1, 1), (
+3, 1), (2, 1, yy_group_end), (2, 1, yy_group12), (3, 1), (3, 1), (3, 1), (3, 1
+), (3, 1), (3, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1,
+1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1,
+1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1,
+1), (1, 1), (1, 1), (0, 1), (0, 1), (0, 1), (0, 1), (0, 1), (0, 1), (0, 1), (0,
+1), (0, 1), (0, 1), (0, 1), (0, 1), (0, 1), (0, 1), (0, 1), (0, 1), (0, 1), (0,
+1), (0, 1), (2, 1, yy_group0), (0, 1), (2, 1, yy_group1), (0, 1), (2, 1,
+yy_group2), (0, 1), (2, 1, yy_group3), (0, 1), (2, 1, yy_group4), (2, 1,
 yy_group5), (1, 1), (0, 1), (2, 1, yy_group_end), (0, 1), (2, 1, yy_group7), (
 2, 1, yy_group8), (1, 1), (0, 1), (2, 1, yy_group_end), (0, 1), (2, 1,
 yy_group10), (2, 1, yy_group11), (1, 1), (0, 1), (2, 1, yy_group_end), (2, 1,
 yy_group12), (0, 1), (0, 1), (0, 1), (0, 1), (0, 1), (0, 1)]), (6, [(1, 1), (1,
 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1,
 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1,
-1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (3, 1), (3,
+1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1,
 1), (3, 1), (3, 1), (3, 1), (3, 1), (3, 1), (3, 1), (3, 1), (3, 1), (3, 1), (3,
-1), (3, 1), (3, 1), (3, 1), (3, 1), (3, 1), (2, 1, yy_group0), (3, 1), (2, 1,
-yy_group1), (3, 1), (2, 1, yy_group2), (3, 1), (2, 1, yy_group3), (3, 1), (2,
-1, yy_group4), (2, 1, yy_group5), (1, 1), (3, 1), (2, 1, yy_group_end), (3, 1),
-(2, 1, yy_group7), (2, 1, yy_group8), (1, 1), (3, 1), (2, 1, yy_group_end), (3,
-1), (2, 1, yy_group10), (2, 1, yy_group11), (1, 1), (3, 1), (2, 1, yy_group_end
-), (2, 1, yy_group12), (3, 1), (3, 1), (1, 1), (3, 1), (3, 1), (3, 1), (3, 1),
-(3, 1), (3, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1),
+1), (3, 1), (3, 1), (3, 1), (3, 1), (3, 1), (3, 1), (3, 1), (3, 1), (3, 1), (2,
+1, yy_group0), (3, 1), (2, 1, yy_group1), (3, 1), (2, 1, yy_group2), (3, 1), (
+2, 1, yy_group3), (3, 1), (2, 1, yy_group4), (2, 1, yy_group5), (1, 1), (3, 1),
+(2, 1, yy_group_end), (3, 1), (2, 1, yy_group7), (2, 1, yy_group8), (1, 1), (3,
+1), (2, 1, yy_group_end), (3, 1), (2, 1, yy_group10), (2, 1, yy_group11), (1, 1
+), (3, 1), (2, 1, yy_group_end), (2, 1, yy_group12), (3, 1), (3, 1), (1, 1), (
+3, 1), (3, 1), (3, 1), (3, 1), (3, 1), (3, 1), (1, 1), (1, 1), (1, 1), (1, 1),
 (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1),
 (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1),
-(1, 1), (0, 1), (0, 1), (0, 1), (0, 1), (0, 1), (0, 1), (0, 1), (0, 1), (0, 1),
-(0, 1), (0, 1), (0, 1), (0, 1), (0, 1), (0, 1), (0, 1), (0, 1), (2, 1,
-yy_group0), (0, 1), (2, 1, yy_group1), (0, 1), (2, 1, yy_group2), (0, 1), (2,
-1, yy_group3), (0, 1), (2, 1, yy_group4), (2, 1, yy_group5), (1, 1), (0, 1), (
-2, 1, yy_group_end), (0, 1), (2, 1, yy_group7), (2, 1, yy_group8), (1, 1), (0,
-1), (2, 1, yy_group_end), (0, 1), (2, 1, yy_group10), (2, 1, yy_group11), (1, 1
-), (0, 1), (2, 1, yy_group_end), (2, 1, yy_group12), (0, 1), (0, 1), (1, 1), (
-0, 1), (0, 1), (0, 1), (0, 1), (0, 1), (0, 1)]), (7, [(1, 1), (1, 1), (1, 1), (
-3, 1), (1, 1), (3, 1), (3, 1), (3, 1), (1, 1), (1, 1), (0, 1), (1, 1), (0, 1),
-(0, 1), (0, 1)]), (8, [(1, 1), (1, 1), (1, 1), (3, 1), (1, 1), (3, 1), (3, 1),
-(3, 1), (1, 1), (1, 1), (0, 1), (1, 1), (0, 1), (0, 1), (0, 1)]), (9, [(1, 1),
-(1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (2, 1, yy_group13), (3, 1), (2, 1,
+(1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (0, 1), (0, 1), (0, 1),
+(0, 1), (0, 1), (0, 1), (0, 1), (0, 1), (0, 1), (0, 1), (0, 1), (0, 1), (0, 1),
+(0, 1), (0, 1), (0, 1), (0, 1), (0, 1), (0, 1), (2, 1, yy_group0), (0, 1), (2,
+1, yy_group1), (0, 1), (2, 1, yy_group2), (0, 1), (2, 1, yy_group3), (0, 1), (
+2, 1, yy_group4), (2, 1, yy_group5), (1, 1), (0, 1), (2, 1, yy_group_end), (0,
+1), (2, 1, yy_group7), (2, 1, yy_group8), (1, 1), (0, 1), (2, 1, yy_group_end),
+(0, 1), (2, 1, yy_group10), (2, 1, yy_group11), (1, 1), (0, 1), (2, 1,
+yy_group_end), (2, 1, yy_group12), (0, 1), (0, 1), (1, 1), (0, 1), (0, 1), (0,
+1), (0, 1), (0, 1), (0, 1)]), (7, [(1, 1), (1, 1), (1, 1), (3, 1), (1, 1), (3,
+1), (3, 1), (3, 1), (1, 1), (1, 1), (0, 1), (1, 1), (0, 1), (0, 1), (0, 1)]), (
+8, [(1, 1), (1, 1), (1, 1), (3, 1), (1, 1), (3, 1), (3, 1), (3, 1), (1, 1), (1,
+1), (0, 1), (1, 1), (0, 1), (0, 1), (0, 1)]), (9, [(1, 1), (1, 1), (1, 1), (1,
+1), (1, 1), (1, 1), (2, 1, yy_group13), (3, 1), (2, 1, yy_group14), (3, 1), (2,
+1, yy_group15), (3, 1), (3, 1), (1, 1), (3, 1), (3, 1), (3, 1), (1, 1), (1, 1),
+(1, 1), (1, 1), (1, 1), (2, 1, yy_group13), (0, 1), (2, 1, yy_group14), (0, 1),
+(2, 1, yy_group15), (0, 1), (0, 1), (1, 1), (0, 1), (0, 1), (0, 1)]), (10, [(1,
+1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (2, 1, yy_group13), (3, 1), (2, 1,
 yy_group14), (3, 1), (2, 1, yy_group15), (3, 1), (3, 1), (1, 1), (3, 1), (3, 1
 ), (3, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (2, 1, yy_group13), (0, 1),
 (2, 1, yy_group14), (0, 1), (2, 1, yy_group15), (0, 1), (0, 1), (1, 1), (0, 1),
-(0, 1), (0, 1)]), (10, [(1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1), (2, 1,
-yy_group13), (3, 1), (2, 1, yy_group14), (3, 1), (2, 1, yy_group15), (3, 1), (
-3, 1), (1, 1), (3, 1), (3, 1), (3, 1), (1, 1), (1, 1), (1, 1), (1, 1), (1, 1),
-(2, 1, yy_group13), (0, 1), (2, 1, yy_group14), (0, 1), (2, 1, yy_group15), (0,
-1), (0, 1), (1, 1), (0, 1), (0, 1), (0, 1)]), (11, [(1, 1), (1, 1), (1, 1), (3,
-1), (1, 1), (3, 1), (2, 1, yy_rule_start), (2, 1, yy_rule42), (0, 1), (3, 1), (
-1, 1), (1, 1), (0, 1), (1, 1), (0, 1), (2, 1, yy_rule_start), (2, 1, yy_rule42
-), (3, 1), (0, 1)]), (12, [(1, 1), (1, 1), (1, 1), (3, 1), (1, 1), (3, 1), (2,
-1, yy_rule_start), (2, 1, yy_rule42), (0, 1), (3, 1), (1, 1), (1, 1), (0, 1), (
-1, 1), (0, 1), (2, 1, yy_rule_start), (2, 1, yy_rule42), (3, 1), (0, 1)]), (0,
-[(1, 9), (0, 8), (2, 1, yy_rule_start), (2, 1, yy_rule43), (0, 9), (2, 1,
-yy_rule_start), (2, 1, yy_rule43), (3, 1), (0, 1)]), (13, [(1, 9), (1, 1), (3,
+(0, 1), (0, 1)]), (11, [(1, 1), (1, 1), (1, 1), (3, 1), (1, 1), (3, 1), (2, 1,
+yy_rule_start), (2, 1, yy_rule44), (0, 1), (3, 1), (1, 1), (1, 1), (0, 1), (1,
+1), (0, 1), (2, 1, yy_rule_start), (2, 1, yy_rule44), (3, 1), (0, 1)]), (12, [(
+1, 1), (1, 1), (1, 1), (3, 1), (1, 1), (3, 1), (2, 1, yy_rule_start), (2, 1,
+yy_rule44), (0, 1), (3, 1), (1, 1), (1, 1), (0, 1), (1, 1), (0, 1), (2, 1,
+yy_rule_start), (2, 1, yy_rule44), (3, 1), (0, 1)]), (0, [(1, 9), (0, 8), (2,
+1, yy_rule_start), (2, 1, yy_rule45), (0, 9), (2, 1, yy_rule_start), (2, 1,
+yy_rule45), (3, 1), (0, 1)]), (13, [(1, 9), (1, 1), (3, 2), (0, 1), (1, 1), (3,
+2), (0, 1), (1, 1), (3, 2), (0, 1), (1, 1), (3, 1), (1, 1), (3, 1), (2, 1,
+yy_rule_start), (2, 1, yy_rule3), (0, 2), (2, 1, yy_rule_start), (2, 1,
+yy_rule45), (0, 1), (1, 1), (0, 3), (1, 1), (0, 3), (1, 1), (0, 3), (1, 1), (0,
+1), (1, 1), (0, 1), (2, 1, yy_rule_start), (2, 1, yy_rule3), (3, 1), (0, 1), (
+2, 1, yy_rule_start), (2, 1, yy_rule45), (0, 2)]), (0, [(1, 9), (0, 7), (2, 1,
+yy_rule_start), (2, 1, yy_rule3), (0, 1), (2, 1, yy_rule_start), (2, 1,
+yy_rule45), (0, 8), (2, 1, yy_rule_start), (2, 1, yy_rule3), (3, 1), (2, 1,
+yy_rule_start), (2, 1, yy_rule45), (0, 2)]), (14, [(1, 9), (0, 1), (3, 1), (0,
+1), (3, 1), (0, 4), (2, 1, yy_rule_start), (2, 1, yy_rule45), (0, 9), (2, 1,
+yy_rule_start), (2, 1, yy_rule45), (3, 1), (0, 1)]), (15, [(1, 9), (0, 5), (3,
+1), (0, 2), (2, 1, yy_rule_start), (2, 1, yy_rule45), (0, 9), (2, 1,
+yy_rule_start), (2, 1, yy_rule45), (3, 1), (0, 1)]), (16, [(1, 9), (1, 1), (3,
 2), (0, 1), (1, 1), (3, 2), (0, 1), (1, 1), (3, 2), (0, 1), (1, 1), (3, 1), (1,
 1), (3, 1), (2, 1, yy_rule_start), (2, 1, yy_rule3), (0, 2), (2, 1,
-yy_rule_start), (2, 1, yy_rule43), (0, 1), (1, 1), (0, 3), (1, 1), (0, 3), (1,
+yy_rule_start), (2, 1, yy_rule45), (0, 1), (1, 1), (0, 3), (1, 1), (0, 3), (1,
 1), (0, 3), (1, 1), (0, 1), (1, 1), (0, 1), (2, 1, yy_rule_start), (2, 1,
-yy_rule3), (3, 1), (0, 1), (2, 1, yy_rule_start), (2, 1, yy_rule43), (0, 2)]),
-(0, [(1, 9), (0, 7), (2, 1, yy_rule_start), (2, 1, yy_rule3), (0, 1), (2, 1,
-yy_rule_start), (2, 1, yy_rule43), (0, 8), (2, 1, yy_rule_start), (2, 1,
-yy_rule3), (3, 1), (2, 1, yy_rule_start), (2, 1, yy_rule43), (0, 2)]), (14, [(
-1, 9), (0, 1), (3, 1), (0, 1), (3, 1), (0, 4), (2, 1, yy_rule_start), (2, 1,
-yy_rule43), (0, 9), (2, 1, yy_rule_start), (2, 1, yy_rule43), (3, 1), (0, 1)]),
-(15, [(1, 9), (0, 5), (3, 1), (0, 2), (2, 1, yy_rule_start), (2, 1, yy_rule43),
-(0, 9), (2, 1, yy_rule_start), (2, 1, yy_rule43), (3, 1), (0, 1)]), (16, [(1, 9
-), (1, 1), (3, 2), (0, 1), (1, 1), (3, 2), (0, 1), (1, 1), (3, 2), (0, 1), (1,
-1), (3, 1), (1, 1), (3, 1), (2, 1, yy_rule_start), (2, 1, yy_rule3), (0, 2), (
-2, 1, yy_rule_start), (2, 1, yy_rule43), (0, 1), (1, 1), (0, 3), (1, 1), (0, 3
-), (1, 1), (0, 3), (1, 1), (0, 1), (1, 1), (0, 1), (2, 1, yy_rule_start), (2,
-1, yy_rule3), (3, 1), (0, 1), (2, 1, yy_rule_start), (2, 1, yy_rule43), (0, 2)]
-), (17, [(1, 9), (0, 1), (3, 1), (0, 1), (3, 1), (0, 4), (2, 1, yy_rule_start),
-(2, 1, yy_rule43), (0, 9), (2, 1, yy_rule_start), (2, 1, yy_rule43), (3, 1), (
-0, 1)]), (18, [(1, 9), (0, 5), (3, 1), (0, 2), (2, 1, yy_rule_start), (2, 1,
-yy_rule43), (0, 9), (2, 1, yy_rule_start), (2, 1, yy_rule43), (3, 1), (0, 1)]),
+yy_rule3), (3, 1), (0, 1), (2, 1, yy_rule_start), (2, 1, yy_rule45), (0, 2)]),
+(17, [(1, 9), (0, 1), (3, 1), (0, 1), (3, 1), (0, 4), (2, 1, yy_rule_start), (
+2, 1, yy_rule45), (0, 9), (2, 1, yy_rule_start), (2, 1, yy_rule45), (3, 1), (0,
+1)]), (18, [(1, 9), (0, 5), (3, 1), (0, 2), (2, 1, yy_rule_start), (2, 1,
+yy_rule45), (0, 9), (2, 1, yy_rule_start), (2, 1, yy_rule45), (3, 1), (0, 1)]),
 (19, [(1, 5), (0, 2), (1, 1), (3, 1), (1, 1), (3, 1), (2, 1, yy_rule_start), (
-2, 1, yy_rule5), (0, 2), (2, 1, yy_rule_start), (2, 1, yy_rule43), (0, 3), (1,
+2, 1, yy_rule5), (0, 2), (2, 1, yy_rule_start), (2, 1, yy_rule45), (0, 3), (1,
 1), (0, 1), (1, 1), (0, 1), (2, 1, yy_rule_start), (2, 1, yy_rule5), (3, 1), (
-0, 1), (2, 1, yy_rule_start), (2, 1, yy_rule43), (0, 2)]), (20, [(1, 5), (1, 1
+0, 1), (2, 1, yy_rule_start), (2, 1, yy_rule45), (0, 2)]), (20, [(1, 5), (1, 1
 ), (3, 2), (0, 1), (1, 1), (3, 1), (1, 1), (3, 1), (2, 1, yy_rule_start), (2,
-1, yy_rule5), (0, 2), (2, 1, yy_rule_start), (2, 1, yy_rule43), (0, 1), (1, 1),
+1, yy_rule5), (0, 2), (2, 1, yy_rule_start), (2, 1, yy_rule45), (0, 1), (1, 1),
 (0, 3), (1, 1), (0, 1), (1, 1), (0, 1), (2, 1, yy_rule_start), (2, 1, yy_rule5
-), (3, 1), (0, 1), (2, 1, yy_rule_start), (2, 1, yy_rule43), (0, 2)]), (0, [(1,
+), (3, 1), (0, 1), (2, 1, yy_rule_start), (2, 1, yy_rule45), (0, 2)]), (0, [(1,
 5), (0, 3), (2, 1, yy_rule_start), (2, 1, yy_rule5), (0, 1), (2, 1,
-yy_rule_start), (2, 1, yy_rule43), (0, 4), (2, 1, yy_rule_start), (2, 1,
-yy_rule5), (3, 1), (2, 1, yy_rule_start), (2, 1, yy_rule43), (0, 2)]), (21, [(
+yy_rule_start), (2, 1, yy_rule45), (0, 4), (2, 1, yy_rule_start), (2, 1,
+yy_rule5), (3, 1), (2, 1, yy_rule_start), (2, 1, yy_rule45), (0, 2)]), (21, [(
 1, 5), (0, 1), (3, 1), (1, 1), (3, 1), (1, 1), (3, 1), (2, 1, yy_rule_start), (
-2, 1, yy_rule5), (0, 2), (2, 1, yy_rule_start), (2, 1, yy_rule43), (0, 3), (1,
+2, 1, yy_rule5), (0, 2), (2, 1, yy_rule_start), (2, 1, yy_rule45), (0, 3), (1,
 1), (0, 1), (1, 1), (0, 1), (2, 1, yy_rule_start), (2, 1, yy_rule5), (3, 1), (
-0, 1), (2, 1, yy_rule_start), (2, 1, yy_rule43), (0, 2)]), (22, [(1, 5), (0, 2
+0, 1), (2, 1, yy_rule_start), (2, 1, yy_rule45), (0, 2)]), (22, [(1, 5), (0, 2
 ), (1, 1), (3, 1), (1, 1), (3, 1), (2, 1, yy_rule_start), (2, 1, yy_rule5), (0,
-2), (2, 1, yy_rule_start), (2, 1, yy_rule43), (0, 3), (1, 1), (0, 1), (1, 1), (
+2), (2, 1, yy_rule_start), (2, 1, yy_rule45), (0, 3), (1, 1), (0, 1), (1, 1), (
 0, 1), (2, 1, yy_rule_start), (2, 1, yy_rule5), (3, 1), (0, 1), (2, 1,
-yy_rule_start), (2, 1, yy_rule43), (0, 2)]), (23, [(1, 5), (1, 1), (3, 2), (0,
+yy_rule_start), (2, 1, yy_rule45), (0, 2)]), (23, [(1, 5), (1, 1), (3, 2), (0,
 1), (1, 1), (3, 1), (1, 1), (3, 1), (2, 1, yy_rule_start), (2, 1, yy_rule5), (
-0, 2), (2, 1, yy_rule_start), (2, 1, yy_rule43), (0, 1), (1, 1), (0, 3), (1, 1
+0, 2), (2, 1, yy_rule_start), (2, 1, yy_rule45), (0, 1), (1, 1), (0, 3), (1, 1
 ), (0, 1), (1, 1), (0, 1), (2, 1, yy_rule_start), (2, 1, yy_rule5), (3, 1), (0,
-1), (2, 1, yy_rule_start), (2, 1, yy_rule43), (0, 2)]), (24, [(1, 5), (0, 1), (
+1), (2, 1, yy_rule_start), (2, 1, yy_rule45), (0, 2)]), (24, [(1, 5), (0, 1), (
 3, 1), (1, 1), (3, 1), (1, 1), (3, 1), (2, 1, yy_rule_start), (2, 1, yy_rule5),
-(0, 2), (2, 1, yy_rule_start), (2, 1, yy_rule43), (0, 3), (1, 1), (0, 1), (1, 1
+(0, 2), (2, 1, yy_rule_start), (2, 1, yy_rule45), (0, 3), (1, 1), (0, 1), (1, 1
 ), (0, 1), (2, 1, yy_rule_start), (2, 1, yy_rule5), (3, 1), (0, 1), (2, 1,
-yy_rule_start), (2, 1, yy_rule43), (0, 2)]), (0, [(1, 32), (0, 31), (2, 1,
-yy_rule_start), (2, 1, yy_rule43), (0, 32), (2, 1, yy_rule_start), (2, 1,
-yy_rule43), (3, 1)]), (25, [(1, 32), (0, 29), (1, 1), (3, 1), (2, 1,
-yy_rule_start), (2, 1, yy_rule33), (0, 1), (2, 1, yy_rule_start), (2, 1,
-yy_rule34), (0, 1), (2, 1, yy_rule_start), (2, 1, yy_rule43), (0, 30), (1, 1),
-(0, 1), (2, 1, yy_rule_start), (2, 1, yy_rule33), (3, 1), (2, 1, yy_rule_start
-), (2, 1, yy_rule34), (0, 1), (2, 1, yy_rule_start), (2, 1, yy_rule43), (0, 1)]
-), (0, [(1, 32), (0, 30), (2, 1, yy_rule_start), (2, 1, yy_rule34), (0, 1), (2,
-1, yy_rule_start), (2, 1, yy_rule43), (0, 31), (2, 1, yy_rule_start), (2, 1,
-yy_rule34), (3, 1), (2, 1, yy_rule_start), (2, 1, yy_rule43), (0, 1)]), (0, [(
-1, 32), (0, 27), (2, 1, yy_rule_start), (2, 1, yy_rule30), (0, 4), (2, 1,
-yy_rule_start), (2, 1, yy_rule43), (0, 28), (2, 1, yy_rule_start), (2, 1,
-yy_rule30), (3, 1), (0, 3), (2, 1, yy_rule_start), (2, 1, yy_rule43), (0, 1)]),
-(0, [(1, 32), (0, 4), (2, 1, yy_rule_start), (2, 1, yy_rule10), (0, 27), (2, 1,
-yy_rule_start), (2, 1, yy_rule43), (0, 5), (2, 1, yy_rule_start), (2, 1,
-yy_rule10), (3, 1), (0, 26), (2, 1, yy_rule_start), (2, 1, yy_rule43), (0, 1)]
-), (0, [(1, 32), (0, 5), (2, 1, yy_rule_start), (2, 1, yy_rule11), (0, 26), (2,
-1, yy_rule_start), (2, 1, yy_rule43), (0, 6), (2, 1, yy_rule_start), (2, 1,
-yy_rule11), (3, 1), (0, 25), (2, 1, yy_rule_start), (2, 1, yy_rule43), (0, 1)]
-), (26, [(1, 32), (0, 21), (2, 1, yy_group_end), (3, 1), (0, 1), (2, 1,
+yy_rule_start), (2, 1, yy_rule45), (0, 2)]), (0, [(1, 34), (0, 33), (2, 1,
+yy_rule_start), (2, 1, yy_rule45), (0, 34), (2, 1, yy_rule_start), (2, 1,
+yy_rule45), (3, 1)]), (25, [(1, 34), (0, 31), (1, 1), (3, 1), (2, 1,
+yy_rule_start), (2, 1, yy_rule35), (0, 1), (2, 1, yy_rule_start), (2, 1,
+yy_rule36), (0, 1), (2, 1, yy_rule_start), (2, 1, yy_rule45), (0, 32), (1, 1),
+(0, 1), (2, 1, yy_rule_start), (2, 1, yy_rule35), (3, 1), (2, 1, yy_rule_start
+), (2, 1, yy_rule36), (0, 1), (2, 1, yy_rule_start), (2, 1, yy_rule45), (0, 1)]
+), (0, [(1, 34), (0, 32), (2, 1, yy_rule_start), (2, 1, yy_rule36), (0, 1), (2,
+1, yy_rule_start), (2, 1, yy_rule45), (0, 33), (2, 1, yy_rule_start), (2, 1,
+yy_rule36), (3, 1), (2, 1, yy_rule_start), (2, 1, yy_rule45), (0, 1)]), (0, [(
+1, 34), (0, 29), (2, 1, yy_rule_start), (2, 1, yy_rule32), (0, 4), (2, 1,
+yy_rule_start), (2, 1, yy_rule45), (0, 30), (2, 1, yy_rule_start), (2, 1,
+yy_rule32), (3, 1), (0, 3), (2, 1, yy_rule_start), (2, 1, yy_rule45), (0, 1)]),
+(0, [(1, 34), (0, 5), (2, 1, yy_rule_start), (2, 1, yy_rule11), (0, 28), (2, 1,
+yy_rule_start), (2, 1, yy_rule45), (0, 6), (2, 1, yy_rule_start), (2, 1,
+yy_rule11), (3, 1), (0, 27), (2, 1, yy_rule_start), (2, 1, yy_rule45), (0, 1)]
+), (0, [(1, 34), (0, 6), (2, 1, yy_rule_start), (2, 1, yy_rule12), (0, 27), (2,
+1, yy_rule_start), (2, 1, yy_rule45), (0, 7), (2, 1, yy_rule_start), (2, 1,
+yy_rule12), (3, 1), (0, 26), (2, 1, yy_rule_start), (2, 1, yy_rule45), (0, 1)]
+), (0, [(1, 34), (0, 1), (2, 1, yy_rule_start), (2, 1, yy_rule7), (0, 32), (2,
+1, yy_rule_start), (2, 1, yy_rule45), (0, 2), (2, 1, yy_rule_start), (2, 1,
+yy_rule7), (3, 1), (0, 31), (2, 1, yy_rule_start), (2, 1, yy_rule45), (0, 1)]),
+(26, [(1, 34), (0, 23), (2, 1, yy_group_end), (3, 1), (0, 1), (2, 1,
 yy_group_end), (3, 1), (0, 1), (2, 1, yy_group_end), (2, 1, yy_group12), (3, 1
-), (0, 5), (2, 1, yy_rule_start), (2, 1, yy_rule43), (0, 22), (2, 1,
+), (0, 5), (2, 1, yy_rule_start), (2, 1, yy_rule45), (0, 24), (2, 1,
 yy_group_end), (0, 2), (2, 1, yy_group_end), (0, 2), (2, 1, yy_group_end), (2,
-1, yy_group12), (0, 6), (2, 1, yy_rule_start), (2, 1, yy_rule43), (3, 1)]), (0,
-[(1, 32), (2, 1, yy_rule_start), (2, 1, yy_rule6), (0, 31), (2, 1,
-yy_rule_start), (2, 1, yy_rule43), (0, 1), (2, 1, yy_rule_start), (2, 1,
-yy_rule6), (3, 1), (0, 30), (2, 1, yy_rule_start), (2, 1, yy_rule43), (0, 1)]),
-(27, [(1, 32), (0, 28), (3, 1), (0, 2), (2, 1, yy_rule_start), (2, 1, yy_rule43
-), (0, 32), (2, 1, yy_rule_start), (2, 1, yy_rule43), (3, 1)]), (28, [(1, 32),
-(0, 22), (2, 1, yy_group6), (3, 1), (0, 1), (3, 1), (0, 1), (1, 1), (3, 1), (2,
+1, yy_group12), (0, 6), (2, 1, yy_rule_start), (2, 1, yy_rule45), (3, 1)]), (0,
+[(1, 34), (2, 1, yy_rule_start), (2, 1, yy_rule6), (0, 33), (2, 1,
+yy_rule_start), (2, 1, yy_rule45), (0, 1), (2, 1, yy_rule_start), (2, 1,
+yy_rule6), (3, 1), (0, 32), (2, 1, yy_rule_start), (2, 1, yy_rule45), (0, 1)]),
+(27, [(1, 34), (0, 30), (3, 1), (0, 2), (2, 1, yy_rule_start), (2, 1, yy_rule45
+), (0, 34), (2, 1, yy_rule_start), (2, 1, yy_rule45), (3, 1)]), (28, [(1, 34),
+(0, 24), (2, 1, yy_group6), (3, 1), (0, 1), (3, 1), (0, 1), (1, 1), (3, 1), (2,
 1, yy_group_end), (2, 1, yy_group_end_element), (2, 1, yy_rule_start), (2, 1,
-yy_rule29), (0, 5), (2, 1, yy_rule_start), (2, 1, yy_rule43), (0, 23), (2, 1,
+yy_rule31), (0, 5), (2, 1, yy_rule_start), (2, 1, yy_rule45), (0, 25), (2, 1,
 yy_group6), (0, 4), (1, 1), (0, 1), (2, 1, yy_group_end), (2, 1,
-yy_group_end_element), (2, 1, yy_rule_start), (2, 1, yy_rule29), (3, 1), (0, 4
-), (2, 1, yy_rule_start), (2, 1, yy_rule43), (0, 1)]), (29, [(1, 32), (0, 26),
+yy_group_end_element), (2, 1, yy_rule_start), (2, 1, yy_rule31), (3, 1), (0, 4
+), (2, 1, yy_rule_start), (2, 1, yy_rule45), (0, 1)]), (29, [(1, 34), (0, 28),
 (1, 1), (3, 1), (2, 1, yy_group_end), (2, 1, yy_group_end_element), (2, 1,
-yy_rule_start), (2, 1, yy_rule29), (0, 5), (2, 1, yy_rule_start), (2, 1,
-yy_rule43), (0, 27), (1, 1), (0, 1), (2, 1, yy_group_end), (2, 1,
-yy_group_end_element), (2, 1, yy_rule_start), (2, 1, yy_rule29), (3, 1), (0, 4
-), (2, 1, yy_rule_start), (2, 1, yy_rule43), (0, 1)]), (0, [(1, 32), (0, 2), (
-2, 1, yy_rule_start), (2, 1, yy_rule8), (0, 29), (2, 1, yy_rule_start), (2, 1,
-yy_rule43), (0, 3), (2, 1, yy_rule_start), (2, 1, yy_rule8), (3, 1), (0, 28), (
-2, 1, yy_rule_start), (2, 1, yy_rule43), (0, 1)]), (0, [(1, 32), (0, 3), (2, 1,
-yy_rule_start), (2, 1, yy_rule9), (0, 28), (2, 1, yy_rule_start), (2, 1,
-yy_rule43), (0, 4), (2, 1, yy_rule_start), (2, 1, yy_rule9), (3, 1), (0, 27), (
-2, 1, yy_rule_start), (2, 1, yy_rule43), (0, 1)]), (0, [(1, 32), (0, 1), (2, 1,
-yy_rule_start), (2, 1, yy_rule7), (0, 30), (2, 1, yy_rule_start), (2, 1,
-yy_rule43), (0, 2), (2, 1, yy_rule_start), (2, 1, yy_rule7), (3, 1), (0, 29), (
-2, 1, yy_rule_start), (2, 1, yy_rule43), (0, 1)]), (30, [(1, 32), (0, 20), (1,
+yy_rule_start), (2, 1, yy_rule31), (0, 5), (2, 1, yy_rule_start), (2, 1,
+yy_rule45), (0, 29), (1, 1), (0, 1), (2, 1, yy_group_end), (2, 1,
+yy_group_end_element), (2, 1, yy_rule_start), (2, 1, yy_rule31), (3, 1), (0, 4
+), (2, 1, yy_rule_start), (2, 1, yy_rule45), (0, 1)]), (0, [(1, 34), (0, 3), (
+2, 1, yy_rule_start), (2, 1, yy_rule9), (0, 30), (2, 1, yy_rule_start), (2, 1,
+yy_rule45), (0, 4), (2, 1, yy_rule_start), (2, 1, yy_rule9), (3, 1), (0, 29), (
+2, 1, yy_rule_start), (2, 1, yy_rule45), (0, 1)]), (0, [(1, 34), (0, 4), (2, 1,
+yy_rule_start), (2, 1, yy_rule10), (0, 29), (2, 1, yy_rule_start), (2, 1,
+yy_rule45), (0, 5), (2, 1, yy_rule_start), (2, 1, yy_rule10), (3, 1), (0, 28),
+(2, 1, yy_rule_start), (2, 1, yy_rule45), (0, 1)]), (0, [(1, 34), (0, 2), (2,
+1, yy_rule_start), (2, 1, yy_rule8), (0, 31), (2, 1, yy_rule_start), (2, 1,
+yy_rule45), (0, 3), (2, 1, yy_rule_start), (2, 1, yy_rule8), (3, 1), (0, 30), (
+2, 1, yy_rule_start), (2, 1, yy_rule45), (0, 1)]), (30, [(1, 34), (0, 22), (1,
 1), (3, 1), (2, 1, yy_group_end_element), (2, 1, yy_rule_start), (2, 1,
-yy_rule26), (0, 11), (2, 1, yy_rule_start), (2, 1, yy_rule43), (0, 21), (1, 1),
-(0, 1), (2, 1, yy_group_end_element), (2, 1, yy_rule_start), (2, 1, yy_rule26),
-(3, 1), (0, 10), (2, 1, yy_rule_start), (2, 1, yy_rule43), (0, 1)]), (31, [(1,
-32), (0, 17), (3, 1), (0, 2), (1, 1), (3, 1), (2, 1, yy_group_end_element), (2,
-1, yy_rule_start), (2, 1, yy_rule26), (0, 11), (2, 1, yy_rule_start), (2, 1,
-yy_rule43), (0, 21), (1, 1), (0, 1), (2, 1, yy_group_end_element), (2, 1,
-yy_rule_start), (2, 1, yy_rule26), (3, 1), (0, 10), (2, 1, yy_rule_start), (2,
-1, yy_rule43), (0, 1)]), (32, [(1, 32), (0, 19), (3, 1), (1, 1), (3, 1), (2, 1,
-yy_group_end_element), (2, 1, yy_rule_start), (2, 1, yy_rule26), (0, 11), (2,
-1, yy_rule_start), (2, 1, yy_rule43), (0, 21), (1, 1), (0, 1), (2, 1,
-yy_group_end_element), (2, 1, yy_rule_start), (2, 1, yy_rule26), (3, 1), (0, 10
-), (2, 1, yy_rule_start), (2, 1, yy_rule43), (0, 1)]), (33, [(1, 32), (0, 18),
-(3, 1), (0, 1), (1, 1), (3, 1), (2, 1, yy_group_end_element), (2, 1,
-yy_rule_start), (2, 1, yy_rule26), (0, 11), (2, 1, yy_rule_start), (2, 1,
-yy_rule43), (0, 21), (1, 1), (0, 1), (2, 1, yy_group_end_element), (2, 1,
-yy_rule_start), (2, 1, yy_rule26), (3, 1), (0, 10), (2, 1, yy_rule_start), (2,
-1, yy_rule43), (0, 1)]), (0, [(1, 32), (0, 6), (2, 1, yy_rule_start), (2, 1,
-yy_rule12), (0, 25), (2, 1, yy_rule_start), (2, 1, yy_rule43), (0, 7), (2, 1,
-yy_rule_start), (2, 1, yy_rule12), (3, 1), (0, 24), (2, 1, yy_rule_start), (2,
-1, yy_rule43), (0, 1)]), (0, [(1, 32), (0, 7), (2, 1, yy_rule_start), (2, 1,
-yy_rule13), (0, 24), (2, 1, yy_rule_start), (2, 1, yy_rule43), (0, 8), (2, 1,
-yy_rule_start), (2, 1, yy_rule13), (3, 1), (0, 23), (2, 1, yy_rule_start), (2,
-1, yy_rule43), (0, 1)]), (34, [(1, 32), (0, 10), (3, 1), (0, 9), (1, 1), (3, 1
-), (2, 1, yy_group_end_element), (2, 1, yy_rule_start), (2, 1, yy_rule26), (0,
-11), (2, 1, yy_rule_start), (2, 1, yy_rule43), (0, 21), (1, 1), (0, 1), (2, 1,
-yy_group_end_element), (2, 1, yy_rule_start), (2, 1, yy_rule26), (3, 1), (0, 10
-), (2, 1, yy_rule_start), (2, 1, yy_rule43), (0, 1)]), (35, [(1, 32), (0, 11),
-(3, 1), (0, 8), (1, 1), (3, 1), (2, 1, yy_group_end_element), (2, 1,
-yy_rule_start), (2, 1, yy_rule26), (0, 11), (2, 1, yy_rule_start), (2, 1,
-yy_rule43), (0, 21), (1, 1), (0, 1), (2, 1, yy_group_end_element), (2, 1,
-yy_rule_start), (2, 1, yy_rule26), (3, 1), (0, 10), (2, 1, yy_rule_start), (2,
-1, yy_rule43), (0, 1)]), (36, [(1, 32), (0, 12), (3, 1), (0, 7), (1, 1), (3, 1
-), (2, 1, yy_group_end_element), (2, 1, yy_rule_start), (2, 1, yy_rule26), (0,
-11), (2, 1, yy_rule_start), (2, 1, yy_rule43), (0, 21), (1, 1), (0, 1), (2, 1,
-yy_group_end_element), (2, 1, yy_rule_start), (2, 1, yy_rule26), (3, 1), (0, 10
-), (2, 1, yy_rule_start), (2, 1, yy_rule43), (0, 1)]), (37, [(1, 32), (0, 13),
-(3, 1), (0, 6), (1, 1), (3, 1), (2, 1, yy_group_end_element), (2, 1,
-yy_rule_start), (2, 1, yy_rule26), (0, 11), (2, 1, yy_rule_start), (2, 1,
-yy_rule43), (0, 21), (1, 1), (0, 1), (2, 1, yy_group_end_element), (2, 1,
-yy_rule_start), (2, 1, yy_rule26), (3, 1), (0, 10), (2, 1, yy_rule_start), (2,
-1, yy_rule43), (0, 1)]), (38, [(1, 32), (0, 14), (3, 1), (0, 5), (1, 1), (3, 1
-), (2, 1, yy_group_end_element), (2, 1, yy_rule_start), (2, 1, yy_rule26), (0,
-11), (2, 1, yy_rule_start), (2, 1, yy_rule43), (0, 21), (1, 1), (0, 1), (2, 1,
-yy_group_end_element), (2, 1, yy_rule_start), (2, 1, yy_rule26), (3, 1), (0, 10
-), (2, 1, yy_rule_start), (2, 1, yy_rule43), (0, 1)]), (39, [(1, 32), (0, 15),
-(3, 2), (0, 3), (1, 1), (3, 1), (2, 1, yy_group_end_element), (2, 1,
-yy_rule_start), (2, 1, yy_rule26), (0, 11), (2, 1, yy_rule_start), (2, 1,
-yy_rule43), (0, 21), (1, 1), (0, 1), (2, 1, yy_group_end_element), (2, 1,
-yy_rule_start), (2, 1, yy_rule26), (3, 1), (0, 10), (2, 1, yy_rule_start), (2,
-1, yy_rule43), (0, 1)]), (0, [(1, 32), (0, 8), (2, 1, yy_rule_start), (2, 1,
-yy_rule14), (0, 23), (2, 1, yy_rule_start), (2, 1, yy_rule43), (0, 9), (2, 1,
-yy_rule_start), (2, 1, yy_rule14), (3, 1), (0, 22), (2, 1, yy_rule_start), (2,
-1, yy_rule43), (0, 1)]), (0, [(1, 32), (0, 9), (2, 1, yy_rule_start), (2, 1,
-yy_rule15), (0, 22), (2, 1, yy_rule_start), (2, 1, yy_rule43), (0, 10), (2, 1,
-yy_rule_start), (2, 1, yy_rule15), (3, 1), (0, 21), (2, 1, yy_rule_start), (2,
-1, yy_rule43), (0, 1)]), (0, [(1, 34), (0, 33), (2, 1, yy_rule_start), (2, 1,
-yy_rule43), (0, 34), (2, 1, yy_rule_start), (2, 1, yy_rule43), (3, 1)]), (40, [
-(1, 34), (0, 28), (1, 1), (3, 2), (0, 2), (1, 1), (3, 1), (2, 1, yy_rule_start
-), (2, 1, yy_rule33), (0, 1), (2, 1, yy_rule_start), (2, 1, yy_rule34), (0, 1),
-(2, 1, yy_rule_start), (2, 1, yy_rule43), (0, 29), (1, 1), (0, 4), (1, 1), (0,
-1), (2, 1, yy_rule_start), (2, 1, yy_rule33), (3, 1), (2, 1, yy_rule_start), (
-2, 1, yy_rule34), (0, 1), (2, 1, yy_rule_start), (2, 1, yy_rule43), (0, 1)]), (
-0, [(1, 34), (0, 32), (2, 1, yy_rule_start), (2, 1, yy_rule34), (0, 1), (2, 1,
-yy_rule_start), (2, 1, yy_rule43), (0, 33), (2, 1, yy_rule_start), (2, 1,
-yy_rule34), (3, 1), (2, 1, yy_rule_start), (2, 1, yy_rule43), (0, 1)]), (41, [(
-1, 34), (0, 29), (3, 1), (0, 3), (2, 1, yy_rule_start), (2, 1, yy_rule43), (0,
-34), (2, 1, yy_rule_start), (2, 1, yy_rule43), (3, 1)]), (0, [(1, 34), (0, 27),
-(2, 1, yy_rule_start), (2, 1, yy_rule30), (0, 6), (2, 1, yy_rule_start), (2, 1,
-yy_rule43), (0, 28), (2, 1, yy_rule_start), (2, 1, yy_rule30), (3, 1), (0, 5),
-(2, 1, yy_rule_start), (2, 1, yy_rule43), (0, 1)]), (0, [(1, 34), (0, 4), (2,
-1, yy_rule_start), (2, 1, yy_rule10), (0, 29), (2, 1, yy_rule_start), (2, 1,
-yy_rule43), (0, 5), (2, 1, yy_rule_start), (2, 1, yy_rule10), (3, 1), (0, 28),
-(2, 1, yy_rule_start), (2, 1, yy_rule43), (0, 1)]), (0, [(1, 34), (0, 5), (2,
-1, yy_rule_start), (2, 1, yy_rule11), (0, 28), (2, 1, yy_rule_start), (2, 1,
-yy_rule43), (0, 6), (2, 1, yy_rule_start), (2, 1, yy_rule11), (3, 1), (0, 27),
-(2, 1, yy_rule_start), (2, 1, yy_rule43), (0, 1)]), (42, [(1, 34), (0, 21), (2,
-1, yy_group_end), (3, 1), (0, 1), (2, 1, yy_group_end), (3, 1), (0, 1), (2, 1,
-yy_group_end), (2, 1, yy_group12), (3, 1), (0, 7), (2, 1, yy_rule_start), (2,
-1, yy_rule43), (0, 22), (2, 1, yy_group_end), (0, 2), (2, 1, yy_group_end), (0,
-2), (2, 1, yy_group_end), (2, 1, yy_group12), (0, 8), (2, 1, yy_rule_start), (
-2, 1, yy_rule43), (3, 1)]), (0, [(1, 34), (2, 1, yy_rule_start), (2, 1,
-yy_rule6), (0, 33), (2, 1, yy_rule_start), (2, 1, yy_rule43), (0, 1), (2, 1,
-yy_rule_start), (2, 1, yy_rule6), (3, 1), (0, 32), (2, 1, yy_rule_start), (2,
-1, yy_rule43), (0, 1)]), (43, [(1, 34), (0, 30), (3, 1), (0, 2), (2, 1,
-yy_rule_start), (2, 1, yy_rule43), (0, 34), (2, 1, yy_rule_start), (2, 1,
-yy_rule43), (3, 1)]), (44, [(1, 34), (0, 22), (2, 1, yy_group6), (3, 1), (0, 1
-), (3, 1), (0, 1), (1, 1), (3, 1), (2, 1, yy_group_end), (2, 1,
-yy_group_end_element), (2, 1, yy_rule_start), (2, 1, yy_rule29), (0, 7), (2, 1,
-yy_rule_start), (2, 1, yy_rule43), (0, 23), (2, 1, yy_group6), (0, 4), (1, 1),
-(0, 1), (2, 1, yy_group_end), (2, 1, yy_group_end_element), (2, 1,
-yy_rule_start), (2, 1, yy_rule29), (3, 1), (0, 6), (2, 1, yy_rule_start), (2,
-1, yy_rule43), (0, 1)]), (45, [(1, 34), (0, 26), (1, 1), (3, 1), (2, 1,
-yy_group_end), (2, 1, yy_group_end_element), (2, 1, yy_rule_start), (2, 1,
-yy_rule29), (0, 7), (2, 1, yy_rule_start), (2, 1, yy_rule43), (0, 27), (1, 1),
-(0, 1), (2, 1, yy_group_end), (2, 1, yy_group_end_element), (2, 1,
-yy_rule_start), (2, 1, yy_rule29), (3, 1), (0, 6), (2, 1, yy_rule_start), (2,
-1, yy_rule43), (0, 1)]), (0, [(1, 34), (0, 2), (2, 1, yy_rule_start), (2, 1,
-yy_rule8), (0, 31), (2, 1, yy_rule_start), (2, 1, yy_rule43), (0, 3), (2, 1,
-yy_rule_start), (2, 1, yy_rule8), (3, 1), (0, 30), (2, 1, yy_rule_start), (2,
-1, yy_rule43), (0, 1)]), (0, [(1, 34), (0, 3), (2, 1, yy_rule_start), (2, 1,
-yy_rule9), (0, 30), (2, 1, yy_rule_start), (2, 1, yy_rule43), (0, 4), (2, 1,
-yy_rule_start), (2, 1, yy_rule9), (3, 1), (0, 29), (2, 1, yy_rule_start), (2,
-1, yy_rule43), (0, 1)]), (0, [(1, 34), (0, 1), (2, 1, yy_rule_start), (2, 1,
-yy_rule7), (0, 32), (2, 1, yy_rule_start), (2, 1, yy_rule43), (0, 2), (2, 1,
-yy_rule_start), (2, 1, yy_rule7), (3, 1), (0, 31), (2, 1, yy_rule_start), (2,
-1, yy_rule43), (0, 1)]), (46, [(1, 34), (0, 20), (1, 1), (3, 1), (2, 1,
-yy_group_end_element), (2, 1, yy_rule_start), (2, 1, yy_rule26), (0, 13), (2,
-1, yy_rule_start), (2, 1, yy_rule43), (0, 21), (1, 1), (0, 1), (2, 1,
-yy_group_end_element), (2, 1, yy_rule_start), (2, 1, yy_rule26), (3, 1), (0, 12
-), (2, 1, yy_rule_start), (2, 1, yy_rule43), (0, 1)]), (47, [(1, 34), (0, 17),
-(3, 1), (0, 2), (1, 1), (3, 1), (2, 1, yy_group_end_element), (2, 1,
-yy_rule_start), (2, 1, yy_rule26), (0, 13), (2, 1, yy_rule_start), (2, 1,
-yy_rule43), (0, 21), (1, 1), (0, 1), (2, 1, yy_group_end_element), (2, 1,
-yy_rule_start), (2, 1, yy_rule26), (3, 1), (0, 12), (2, 1, yy_rule_start), (2,
-1, yy_rule43), (0, 1)]), (48, [(1, 34), (0, 19), (3, 1), (1, 1), (3, 1), (2, 1,
-yy_group_end_element), (2, 1, yy_rule_start), (2, 1, yy_rule26), (0, 13), (2,
-1, yy_rule_start), (2, 1, yy_rule43), (0, 21), (1, 1), (0, 1), (2, 1,
-yy_group_end_element), (2, 1, yy_rule_start), (2, 1, yy_rule26), (3, 1), (0, 12
-), (2, 1, yy_rule_start), (2, 1, yy_rule43), (0, 1)]), (49, [(1, 34), (0, 18),
+yy_rule28), (0, 11), (2, 1, yy_rule_start), (2, 1, yy_rule45), (0, 23), (1, 1),
+(0, 1), (2, 1, yy_group_end_element), (2, 1, yy_rule_start), (2, 1, yy_rule28),
+(3, 1), (0, 10), (2, 1, yy_rule_start), (2, 1, yy_rule45), (0, 1)]), (31, [(1,
+34), (0, 19), (3, 1), (0, 2), (1, 1), (3, 1), (2, 1, yy_group_end_element), (2,
+1, yy_rule_start), (2, 1, yy_rule28), (0, 11), (2, 1, yy_rule_start), (2, 1,
+yy_rule45), (0, 23), (1, 1), (0, 1), (2, 1, yy_group_end_element), (2, 1,
+yy_rule_start), (2, 1, yy_rule28), (3, 1), (0, 10), (2, 1, yy_rule_start), (2,
+1, yy_rule45), (0, 1)]), (32, [(1, 34), (0, 21), (3, 1), (1, 1), (3, 1), (2, 1,
+yy_group_end_element), (2, 1, yy_rule_start), (2, 1, yy_rule28), (0, 11), (2,
+1, yy_rule_start), (2, 1, yy_rule45), (0, 23), (1, 1), (0, 1), (2, 1,
+yy_group_end_element), (2, 1, yy_rule_start), (2, 1, yy_rule28), (3, 1), (0, 10
+), (2, 1, yy_rule_start), (2, 1, yy_rule45), (0, 1)]), (33, [(1, 34), (0, 20),
 (3, 1), (0, 1), (1, 1), (3, 1), (2, 1, yy_group_end_element), (2, 1,
-yy_rule_start), (2, 1, yy_rule26), (0, 13), (2, 1, yy_rule_start), (2, 1,
-yy_rule43), (0, 21), (1, 1), (0, 1), (2, 1, yy_group_end_element), (2, 1,
-yy_rule_start), (2, 1, yy_rule26), (3, 1), (0, 12), (2, 1, yy_rule_start), (2,
-1, yy_rule43), (0, 1)]), (0, [(1, 34), (0, 6), (2, 1, yy_rule_start), (2, 1,
-yy_rule12), (0, 27), (2, 1, yy_rule_start), (2, 1, yy_rule43), (0, 7), (2, 1,
-yy_rule_start), (2, 1, yy_rule12), (3, 1), (0, 26), (2, 1, yy_rule_start), (2,
-1, yy_rule43), (0, 1)]), (0, [(1, 34), (0, 7), (2, 1, yy_rule_start), (2, 1,
-yy_rule13), (0, 26), (2, 1, yy_rule_start), (2, 1, yy_rule43), (0, 8), (2, 1,
+yy_rule_start), (2, 1, yy_rule28), (0, 11), (2, 1, yy_rule_start), (2, 1,
+yy_rule45), (0, 23), (1, 1), (0, 1), (2, 1, yy_group_end_element), (2, 1,
+yy_rule_start), (2, 1, yy_rule28), (3, 1), (0, 10), (2, 1, yy_rule_start), (2,
+1, yy_rule45), (0, 1)]), (0, [(1, 34), (0, 7), (2, 1, yy_rule_start), (2, 1,
+yy_rule13), (0, 26), (2, 1, yy_rule_start), (2, 1, yy_rule45), (0, 8), (2, 1,
 yy_rule_start), (2, 1, yy_rule13), (3, 1), (0, 25), (2, 1, yy_rule_start), (2,
-1, yy_rule43), (0, 1)]), (50, [(1, 34), (0, 10), (3, 1), (0, 9), (1, 1), (3, 1
-), (2, 1, yy_group_end_element), (2, 1, yy_rule_start), (2, 1, yy_rule26), (0,
-13), (2, 1, yy_rule_start), (2, 1, yy_rule43), (0, 21), (1, 1), (0, 1), (2, 1,
-yy_group_end_element), (2, 1, yy_rule_start), (2, 1, yy_rule26), (3, 1), (0, 12
-), (2, 1, yy_rule_start), (2, 1, yy_rule43), (0, 1)]), (51, [(1, 34), (0, 11),
-(3, 1), (0, 8), (1, 1), (3, 1), (2, 1, yy_group_end_element), (2, 1,
-yy_rule_start), (2, 1, yy_rule26), (0, 13), (2, 1, yy_rule_start), (2, 1,
-yy_rule43), (0, 21), (1, 1), (0, 1), (2, 1, yy_group_end_element), (2, 1,
-yy_rule_start), (2, 1, yy_rule26), (3, 1), (0, 12), (2, 1, yy_rule_start), (2,
-1, yy_rule43), (0, 1)]), (52, [(1, 34), (0, 12), (3, 1), (0, 7), (1, 1), (3, 1
-), (2, 1, yy_group_end_element), (2, 1, yy_rule_start), (2, 1, yy_rule26), (0,
-13), (2, 1, yy_rule_start), (2, 1, yy_rule43), (0, 21), (1, 1), (0, 1), (2, 1,
-yy_group_end_element), (2, 1, yy_rule_start), (2, 1, yy_rule26), (3, 1), (0, 12
-), (2, 1, yy_rule_start), (2, 1, yy_rule43), (0, 1)]), (53, [(1, 34), (0, 13),
-(3, 1), (0, 6), (1, 1), (3, 1), (2, 1, yy_group_end_element), (2, 1,
-yy_rule_start), (2, 1, yy_rule26), (0, 13), (2, 1, yy_rule_start), (2, 1,
-yy_rule43), (0, 21), (1, 1), (0, 1), (2, 1, yy_group_end_element), (2, 1,
-yy_rule_start), (2, 1, yy_rule26), (3, 1), (0, 12), (2, 1, yy_rule_start), (2,
-1, yy_rule43), (0, 1)]), (54, [(1, 34), (0, 14), (3, 1), (0, 5), (1, 1), (3, 1
-), (2, 1, yy_group_end_element), (2, 1, yy_rule_start), (2, 1, yy_rule26), (0,
-13), (2, 1, yy_rule_start), (2, 1, yy_rule43), (0, 21), (1, 1), (0, 1), (2, 1,
-yy_group_end_element), (2, 1, yy_rule_start), (2, 1, yy_rule26), (3, 1), (0, 12
-), (2, 1, yy_rule_start), (2, 1, yy_rule43), (0, 1)]), (55, [(1, 34), (0, 15),
-(3, 2), (0, 3), (1, 1), (3, 1), (2, 1, yy_group_end_element), (2, 1,
-yy_rule_start), (2, 1, yy_rule26), (0, 13), (2, 1, yy_rule_start), (2, 1,
-yy_rule43), (0, 21), (1, 1), (0, 1), (2, 1, yy_group_end_element), (2, 1,
-yy_rule_start), (2, 1, yy_rule26), (3, 1), (0, 12), (2, 1, yy_rule_start), (2,
-1, yy_rule43), (0, 1)]), (0, [(1, 34), (0, 8), (2, 1, yy_rule_start), (2, 1,
-yy_rule14), (0, 25), (2, 1, yy_rule_start), (2, 1, yy_rule43), (0, 9), (2, 1,
+1, yy_rule45), (0, 1)]), (0, [(1, 34), (0, 8), (2, 1, yy_rule_start), (2, 1,
+yy_rule14), (0, 25), (2, 1, yy_rule_start), (2, 1, yy_rule45), (0, 9), (2, 1,
 yy_rule_start), (2, 1, yy_rule14), (3, 1), (0, 24), (2, 1, yy_rule_start), (2,
-1, yy_rule43), (0, 1)]), (0, [(1, 34), (0, 9), (2, 1, yy_rule_start), (2, 1,
-yy_rule15), (0, 24), (2, 1, yy_rule_start), (2, 1, yy_rule43), (0, 10), (2, 1,
-yy_rule_start), (2, 1, yy_rule15), (3, 1), (0, 23), (2, 1, yy_rule_start), (2,
-1, yy_rule43), (0, 1)]), (0, [(1, 4), (0, 1), (2, 1, yy_rule_start), (2, 1,
-yy_rule36), (0, 2), (2, 1, yy_rule_start), (2, 1, yy_rule43), (0, 2), (2, 1,
-yy_rule_start), (2, 1, yy_rule36), (3, 1), (0, 1), (2, 1, yy_rule_start), (2,
-1, yy_rule43), (0, 1)]), (0, [(1, 4), (0, 2), (2, 1, yy_rule_start), (2, 1,
-yy_rule36), (0, 1), (2, 1, yy_rule_start), (2, 1, yy_rule43), (0, 3), (2, 1,
+1, yy_rule45), (0, 1)]), (34, [(1, 34), (0, 11), (3, 1), (0, 10), (1, 1), (3, 1
+), (2, 1, yy_group_end_element), (2, 1, yy_rule_start), (2, 1, yy_rule28), (0,
+11), (2, 1, yy_rule_start), (2, 1, yy_rule45), (0, 23), (1, 1), (0, 1), (2, 1,
+yy_group_end_element), (2, 1, yy_rule_start), (2, 1, yy_rule28), (3, 1), (0, 10
+), (2, 1, yy_rule_start), (2, 1, yy_rule45), (0, 1)]), (35, [(1, 34), (0, 12),
+(3, 1), (0, 9), (1, 1), (3, 1), (2, 1, yy_group_end_element), (2, 1,
+yy_rule_start), (2, 1, yy_rule28), (0, 11), (2, 1, yy_rule_start), (2, 1,
+yy_rule45), (0, 23), (1, 1), (0, 1), (2, 1, yy_group_end_element), (2, 1,
+yy_rule_start), (2, 1, yy_rule28), (3, 1), (0, 10), (2, 1, yy_rule_start), (2,
+1, yy_rule45), (0, 1)]), (36, [(1, 34), (0, 13), (3, 1), (0, 8), (1, 1), (3, 1
+), (2, 1, yy_group_end_element), (2, 1, yy_rule_start), (2, 1, yy_rule28), (0,
+11), (2, 1, yy_rule_start), (2, 1, yy_rule45), (0, 23), (1, 1), (0, 1), (2, 1,
+yy_group_end_element), (2, 1, yy_rule_start), (2, 1, yy_rule28), (3, 1), (0, 10
+), (2, 1, yy_rule_start), (2, 1, yy_rule45), (0, 1)]), (37, [(1, 34), (0, 14),
+(3, 1), (0, 7), (1, 1), (3, 1), (2, 1, yy_group_end_element), (2, 1,
+yy_rule_start), (2, 1, yy_rule28), (0, 11), (2, 1, yy_rule_start), (2, 1,
+yy_rule45), (0, 23), (1, 1), (0, 1), (2, 1, yy_group_end_element), (2, 1,
+yy_rule_start), (2, 1, yy_rule28), (3, 1), (0, 10), (2, 1, yy_rule_start), (2,
+1, yy_rule45), (0, 1)]), (38, [(1, 34), (0, 15), (3, 1), (0, 6), (1, 1), (3, 1
+), (2, 1, yy_group_end_element), (2, 1, yy_rule_start), (2, 1, yy_rule28), (0,
+11), (2, 1, yy_rule_start), (2, 1, yy_rule45), (0, 23), (1, 1), (0, 1), (2, 1,
+yy_group_end_element), (2, 1, yy_rule_start), (2, 1, yy_rule28), (3, 1), (0, 10
+), (2, 1, yy_rule_start), (2, 1, yy_rule45), (0, 1)]), (39, [(1, 34), (0, 16),
+(3, 1), (0, 5), (1, 1), (3, 1), (2, 1, yy_group_end_element), (2, 1,
+yy_rule_start), (2, 1, yy_rule28), (0, 11), (2, 1, yy_rule_start), (2, 1,
+yy_rule45), (0, 23), (1, 1), (0, 1), (2, 1, yy_group_end_element), (2, 1,
+yy_rule_start), (2, 1, yy_rule28), (3, 1), (0, 10), (2, 1, yy_rule_start), (2,
+1, yy_rule45), (0, 1)]), (40, [(1, 34), (0, 17), (3, 2), (0, 3), (1, 1), (3, 1
+), (2, 1, yy_group_end_element), (2, 1, yy_rule_start), (2, 1, yy_rule28), (0,
+11), (2, 1, yy_rule_start), (2, 1, yy_rule45), (0, 23), (1, 1), (0, 1), (2, 1,
+yy_group_end_element), (2, 1, yy_rule_start), (2, 1, yy_rule28), (3, 1), (0, 10
+), (2, 1, yy_rule_start), (2, 1, yy_rule45), (0, 1)]), (0, [(1, 34), (0, 9), (
+2, 1, yy_rule_start), (2, 1, yy_rule15), (0, 24), (2, 1, yy_rule_start), (2, 1,
+yy_rule45), (0, 10), (2, 1, yy_rule_start), (2, 1, yy_rule15), (3, 1), (0, 23),
+(2, 1, yy_rule_start), (2, 1, yy_rule45), (0, 1)]), (0, [(1, 34), (0, 10), (2,
+1, yy_rule_start), (2, 1, yy_rule16), (0, 23), (2, 1, yy_rule_start), (2, 1,
+yy_rule45), (0, 11), (2, 1, yy_rule_start), (2, 1, yy_rule16), (3, 1), (0, 22),
+(2, 1, yy_rule_start), (2, 1, yy_rule45), (0, 1)]), (0, [(1, 36), (0, 35), (2,
+1, yy_rule_start), (2, 1, yy_rule45), (0, 36), (2, 1, yy_rule_start), (2, 1,
+yy_rule45), (3, 1)]), (41, [(1, 36), (0, 30), (1, 1), (3, 2), (0, 2), (1, 1), (
+3, 1), (2, 1, yy_rule_start), (2, 1, yy_rule35), (0, 1), (2, 1, yy_rule_start),
+(2, 1, yy_rule36), (0, 1), (2, 1, yy_rule_start), (2, 1, yy_rule45), (0, 31), (
+1, 1), (0, 4), (1, 1), (0, 1), (2, 1, yy_rule_start), (2, 1, yy_rule35), (3, 1
+), (2, 1, yy_rule_start), (2, 1, yy_rule36), (0, 1), (2, 1, yy_rule_start), (2,
+1, yy_rule45), (0, 1)]), (0, [(1, 36), (0, 34), (2, 1, yy_rule_start), (2, 1,
+yy_rule36), (0, 1), (2, 1, yy_rule_start), (2, 1, yy_rule45), (0, 35), (2, 1,
 yy_rule_start), (2, 1, yy_rule36), (3, 1), (2, 1, yy_rule_start), (2, 1,
-yy_rule43), (0, 1)]), (56, [(1, 4), (3, 1), (2, 1, yy_rule_start), (2, 1,
-yy_rule36), (0, 2), (2, 1, yy_rule_start), (2, 1, yy_rule43), (0, 2), (2, 1,
-yy_rule_start), (2, 1, yy_rule36), (3, 1), (0, 1), (2, 1, yy_rule_start), (2,
-1, yy_rule43), (0, 1)]), (57, [(1, 4), (3, 1), (2, 1, yy_rule_start), (2, 1,
-yy_rule36), (0, 2), (2, 1, yy_rule_start), (2, 1, yy_rule43), (0, 2), (2, 1,
-yy_rule_start), (2, 1, yy_rule36), (3, 1), (0, 1), (2, 1, yy_rule_start), (2,
-1, yy_rule43), (0, 1)]), (0, [(1, 7), (0, 4), (2, 1, yy_rule_start), (2, 1,
-yy_rule41), (0, 2), (2, 1, yy_rule_start), (2, 1, yy_rule43), (0, 5), (2, 1,
-yy_rule_start), (2, 1, yy_rule41), (3, 1), (0, 1), (2, 1, yy_rule_start), (2,
-1, yy_rule43), (0, 1)]), (0, [(1, 7), (0, 5), (2, 1, yy_rule_start), (2, 1,
-yy_rule41), (0, 1), (2, 1, yy_rule_start), (2, 1, yy_rule43), (0, 6), (2, 1,
-yy_rule_start), (2, 1, yy_rule41), (3, 1), (2, 1, yy_rule_start), (2, 1,
-yy_rule43), (0, 1)]), (0, [(1, 7), (0, 3), (2, 1, yy_rule_start), (2, 1,
-yy_rule40), (0, 1), (2, 1, yy_rule_start), (2, 1, yy_rule41), (0, 2), (2, 1,
-yy_rule_start), (2, 1, yy_rule43), (0, 4), (2, 1, yy_rule_start), (2, 1,
-yy_rule40), (3, 1), (2, 1, yy_rule_start), (2, 1, yy_rule41), (0, 2), (2, 1,
-yy_rule_start), (2, 1, yy_rule43), (0, 1)]), (58, [(1, 7), (3, 3), (0, 1), (2,
-1, yy_rule_start), (2, 1, yy_rule41), (0, 2), (2, 1, yy_rule_start), (2, 1,
-yy_rule43), (0, 5), (2, 1, yy_rule_start), (2, 1, yy_rule41), (3, 1), (0, 1), (
-2, 1, yy_rule_start), (2, 1, yy_rule43), (0, 1)]), (59, [(1, 7), (3, 3), (0, 1
-), (2, 1, yy_rule_start), (2, 1, yy_rule41), (0, 2), (2, 1, yy_rule_start), (2,
-1, yy_rule43), (0, 5), (2, 1, yy_rule_start), (2, 1, yy_rule41), (3, 1), (0, 1
-), (2, 1, yy_rule_start), (2, 1, yy_rule43), (0, 1)]), (60, [(1, 3), (1, 1), (
-3, 1), (1, 1), (3, 1), (2, 1, yy_rule_start), (2, 1, yy_rule42), (0, 2), (2, 1,
-yy_rule_start), (2, 1, yy_rule43), (0, 1), (1, 1), (0, 1), (1, 1), (0, 1), (2,
-1, yy_rule_start), (2, 1, yy_rule42), (3, 1), (0, 1), (2, 1, yy_rule_start), (
-2, 1, yy_rule43), (0, 2)]), (0, [(1, 3), (0, 1), (2, 1, yy_rule_start), (2, 1,
-yy_rule42), (0, 1), (2, 1, yy_rule_start), (2, 1, yy_rule43), (0, 2), (2, 1,
+yy_rule45), (0, 1)]), (42, [(1, 36), (0, 31), (3, 1), (0, 3), (2, 1,
+yy_rule_start), (2, 1, yy_rule45), (0, 36), (2, 1, yy_rule_start), (2, 1,
+yy_rule45), (3, 1)]), (0, [(1, 36), (0, 29), (2, 1, yy_rule_start), (2, 1,
+yy_rule32), (0, 6), (2, 1, yy_rule_start), (2, 1, yy_rule45), (0, 30), (2, 1,
+yy_rule_start), (2, 1, yy_rule32), (3, 1), (0, 5), (2, 1, yy_rule_start), (2,
+1, yy_rule45), (0, 1)]), (0, [(1, 36), (0, 5), (2, 1, yy_rule_start), (2, 1,
+yy_rule11), (0, 30), (2, 1, yy_rule_start), (2, 1, yy_rule45), (0, 6), (2, 1,
+yy_rule_start), (2, 1, yy_rule11), (3, 1), (0, 29), (2, 1, yy_rule_start), (2,
+1, yy_rule45), (0, 1)]), (0, [(1, 36), (0, 6), (2, 1, yy_rule_start), (2, 1,
+yy_rule12), (0, 29), (2, 1, yy_rule_start), (2, 1, yy_rule45), (0, 7), (2, 1,
+yy_rule_start), (2, 1, yy_rule12), (3, 1), (0, 28), (2, 1, yy_rule_start), (2,
+1, yy_rule45), (0, 1)]), (0, [(1, 36), (0, 1), (2, 1, yy_rule_start), (2, 1,
+yy_rule7), (0, 34), (2, 1, yy_rule_start), (2, 1, yy_rule45), (0, 2), (2, 1,
+yy_rule_start), (2, 1, yy_rule7), (3, 1), (0, 33), (2, 1, yy_rule_start), (2,
+1, yy_rule45), (0, 1)]), (43, [(1, 36), (0, 23), (2, 1, yy_group_end), (3, 1),
+(0, 1), (2, 1, yy_group_end), (3, 1), (0, 1), (2, 1, yy_group_end), (2, 1,
+yy_group12), (3, 1), (0, 7), (2, 1, yy_rule_start), (2, 1, yy_rule45), (0, 24),
+(2, 1, yy_group_end), (0, 2), (2, 1, yy_group_end), (0, 2), (2, 1, yy_group_end
+), (2, 1, yy_group12), (0, 8), (2, 1, yy_rule_start), (2, 1, yy_rule45), (3, 1)
+]), (0, [(1, 36), (2, 1, yy_rule_start), (2, 1, yy_rule6), (0, 35), (2, 1,
+yy_rule_start), (2, 1, yy_rule45), (0, 1), (2, 1, yy_rule_start), (2, 1,
+yy_rule6), (3, 1), (0, 34), (2, 1, yy_rule_start), (2, 1, yy_rule45), (0, 1)]),
+(44, [(1, 36), (0, 32), (3, 1), (0, 2), (2, 1, yy_rule_start), (2, 1, yy_rule45
+), (0, 36), (2, 1, yy_rule_start), (2, 1, yy_rule45), (3, 1)]), (45, [(1, 36),
+(0, 24), (2, 1, yy_group6), (3, 1), (0, 1), (3, 1), (0, 1), (1, 1), (3, 1), (2,
+1, yy_group_end), (2, 1, yy_group_end_element), (2, 1, yy_rule_start), (2, 1,
+yy_rule31), (0, 7), (2, 1, yy_rule_start), (2, 1, yy_rule45), (0, 25), (2, 1,
+yy_group6), (0, 4), (1, 1), (0, 1), (2, 1, yy_group_end), (2, 1,
+yy_group_end_element), (2, 1, yy_rule_start), (2, 1, yy_rule31), (3, 1), (0, 6
+), (2, 1, yy_rule_start), (2, 1, yy_rule45), (0, 1)]), (46, [(1, 36), (0, 28),
+(1, 1), (3, 1), (2, 1, yy_group_end), (2, 1, yy_group_end_element), (2, 1,
+yy_rule_start), (2, 1, yy_rule31), (0, 7), (2, 1, yy_rule_start), (2, 1,
+yy_rule45), (0, 29), (1, 1), (0, 1), (2, 1, yy_group_end), (2, 1,
+yy_group_end_element), (2, 1, yy_rule_start), (2, 1, yy_rule31), (3, 1), (0, 6
+), (2, 1, yy_rule_start), (2, 1, yy_rule45), (0, 1)]), (0, [(1, 36), (0, 3), (
+2, 1, yy_rule_start), (2, 1, yy_rule9), (0, 32), (2, 1, yy_rule_start), (2, 1,
+yy_rule45), (0, 4), (2, 1, yy_rule_start), (2, 1, yy_rule9), (3, 1), (0, 31), (
+2, 1, yy_rule_start), (2, 1, yy_rule45), (0, 1)]), (0, [(1, 36), (0, 4), (2, 1,
+yy_rule_start), (2, 1, yy_rule10), (0, 31), (2, 1, yy_rule_start), (2, 1,
+yy_rule45), (0, 5), (2, 1, yy_rule_start), (2, 1, yy_rule10), (3, 1), (0, 30),
+(2, 1, yy_rule_start), (2, 1, yy_rule45), (0, 1)]), (0, [(1, 36), (0, 2), (2,
+1, yy_rule_start), (2, 1, yy_rule8), (0, 33), (2, 1, yy_rule_start), (2, 1,
+yy_rule45), (0, 3), (2, 1, yy_rule_start), (2, 1, yy_rule8), (3, 1), (0, 32), (
+2, 1, yy_rule_start), (2, 1, yy_rule45), (0, 1)]), (47, [(1, 36), (0, 22), (1,
+1), (3, 1), (2, 1, yy_group_end_element), (2, 1, yy_rule_start), (2, 1,
+yy_rule28), (0, 13), (2, 1, yy_rule_start), (2, 1, yy_rule45), (0, 23), (1, 1),
+(0, 1), (2, 1, yy_group_end_element), (2, 1, yy_rule_start), (2, 1, yy_rule28),
+(3, 1), (0, 12), (2, 1, yy_rule_start), (2, 1, yy_rule45), (0, 1)]), (48, [(1,
+36), (0, 19), (3, 1), (0, 2), (1, 1), (3, 1), (2, 1, yy_group_end_element), (2,
+1, yy_rule_start), (2, 1, yy_rule28), (0, 13), (2, 1, yy_rule_start), (2, 1,
+yy_rule45), (0, 23), (1, 1), (0, 1), (2, 1, yy_group_end_element), (2, 1,
+yy_rule_start), (2, 1, yy_rule28), (3, 1), (0, 12), (2, 1, yy_rule_start), (2,
+1, yy_rule45), (0, 1)]), (49, [(1, 36), (0, 21), (3, 1), (1, 1), (3, 1), (2, 1,
+yy_group_end_element), (2, 1, yy_rule_start), (2, 1, yy_rule28), (0, 13), (2,
+1, yy_rule_start), (2, 1, yy_rule45), (0, 23), (1, 1), (0, 1), (2, 1,
+yy_group_end_element), (2, 1, yy_rule_start), (2, 1, yy_rule28), (3, 1), (0, 12
+), (2, 1, yy_rule_start), (2, 1, yy_rule45), (0, 1)]), (50, [(1, 36), (0, 20),
+(3, 1), (0, 1), (1, 1), (3, 1), (2, 1, yy_group_end_element), (2, 1,
+yy_rule_start), (2, 1, yy_rule28), (0, 13), (2, 1, yy_rule_start), (2, 1,
+yy_rule45), (0, 23), (1, 1), (0, 1), (2, 1, yy_group_end_element), (2, 1,
+yy_rule_start), (2, 1, yy_rule28), (3, 1), (0, 12), (2, 1, yy_rule_start), (2,
+1, yy_rule45), (0, 1)]), (0, [(1, 36), (0, 7), (2, 1, yy_rule_start), (2, 1,
+yy_rule13), (0, 28), (2, 1, yy_rule_start), (2, 1, yy_rule45), (0, 8), (2, 1,
+yy_rule_start), (2, 1, yy_rule13), (3, 1), (0, 27), (2, 1, yy_rule_start), (2,
+1, yy_rule45), (0, 1)]), (0, [(1, 36), (0, 8), (2, 1, yy_rule_start), (2, 1,
+yy_rule14), (0, 27), (2, 1, yy_rule_start), (2, 1, yy_rule45), (0, 9), (2, 1,
+yy_rule_start), (2, 1, yy_rule14), (3, 1), (0, 26), (2, 1, yy_rule_start), (2,
+1, yy_rule45), (0, 1)]), (51, [(1, 36), (0, 11), (3, 1), (0, 10), (1, 1), (3, 1
+), (2, 1, yy_group_end_element), (2, 1, yy_rule_start), (2, 1, yy_rule28), (0,
+13), (2, 1, yy_rule_start), (2, 1, yy_rule45), (0, 23), (1, 1), (0, 1), (2, 1,
+yy_group_end_element), (2, 1, yy_rule_start), (2, 1, yy_rule28), (3, 1), (0, 12
+), (2, 1, yy_rule_start), (2, 1, yy_rule45), (0, 1)]), (52, [(1, 36), (0, 12),
+(3, 1), (0, 9), (1, 1), (3, 1), (2, 1, yy_group_end_element), (2, 1,
+yy_rule_start), (2, 1, yy_rule28), (0, 13), (2, 1, yy_rule_start), (2, 1,
+yy_rule45), (0, 23), (1, 1), (0, 1), (2, 1, yy_group_end_element), (2, 1,
+yy_rule_start), (2, 1, yy_rule28), (3, 1), (0, 12), (2, 1, yy_rule_start), (2,
+1, yy_rule45), (0, 1)]), (53, [(1, 36), (0, 13), (3, 1), (0, 8), (1, 1), (3, 1
+), (2, 1, yy_group_end_element), (2, 1, yy_rule_start), (2, 1, yy_rule28), (0,
+13), (2, 1, yy_rule_start), (2, 1, yy_rule45), (0, 23), (1, 1), (0, 1), (2, 1,
+yy_group_end_element), (2, 1, yy_rule_start), (2, 1, yy_rule28), (3, 1), (0, 12
+), (2, 1, yy_rule_start), (2, 1, yy_rule45), (0, 1)]), (54, [(1, 36), (0, 14),
+(3, 1), (0, 7), (1, 1), (3, 1), (2, 1, yy_group_end_element), (2, 1,
+yy_rule_start), (2, 1, yy_rule28), (0, 13), (2, 1, yy_rule_start), (2, 1,
+yy_rule45), (0, 23), (1, 1), (0, 1), (2, 1, yy_group_end_element), (2, 1,
+yy_rule_start), (2, 1, yy_rule28), (3, 1), (0, 12), (2, 1, yy_rule_start), (2,
+1, yy_rule45), (0, 1)]), (55, [(1, 36), (0, 15), (3, 1), (0, 6), (1, 1), (3, 1
+), (2, 1, yy_group_end_element), (2, 1, yy_rule_start), (2, 1, yy_rule28), (0,
+13), (2, 1, yy_rule_start), (2, 1, yy_rule45), (0, 23), (1, 1), (0, 1), (2, 1,
+yy_group_end_element), (2, 1, yy_rule_start), (2, 1, yy_rule28), (3, 1), (0, 12
+), (2, 1, yy_rule_start), (2, 1, yy_rule45), (0, 1)]), (56, [(1, 36), (0, 16),
+(3, 1), (0, 5), (1, 1), (3, 1), (2, 1, yy_group_end_element), (2, 1,
+yy_rule_start), (2, 1, yy_rule28), (0, 13), (2, 1, yy_rule_start), (2, 1,
+yy_rule45), (0, 23), (1, 1), (0, 1), (2, 1, yy_group_end_element), (2, 1,
+yy_rule_start), (2, 1, yy_rule28), (3, 1), (0, 12), (2, 1, yy_rule_start), (2,
+1, yy_rule45), (0, 1)]), (57, [(1, 36), (0, 17), (3, 2), (0, 3), (1, 1), (3, 1
+), (2, 1, yy_group_end_element), (2, 1, yy_rule_start), (2, 1, yy_rule28), (0,
+13), (2, 1, yy_rule_start), (2, 1, yy_rule45), (0, 23), (1, 1), (0, 1), (2, 1,
+yy_group_end_element), (2, 1, yy_rule_start), (2, 1, yy_rule28), (3, 1), (0, 12
+), (2, 1, yy_rule_start), (2, 1, yy_rule45), (0, 1)]), (0, [(1, 36), (0, 9), (
+2, 1, yy_rule_start), (2, 1, yy_rule15), (0, 26), (2, 1, yy_rule_start), (2, 1,
+yy_rule45), (0, 10), (2, 1, yy_rule_start), (2, 1, yy_rule15), (3, 1), (0, 25),
+(2, 1, yy_rule_start), (2, 1, yy_rule45), (0, 1)]), (0, [(1, 36), (0, 10), (2,
+1, yy_rule_start), (2, 1, yy_rule16), (0, 25), (2, 1, yy_rule_start), (2, 1,
+yy_rule45), (0, 11), (2, 1, yy_rule_start), (2, 1, yy_rule16), (3, 1), (0, 24),
+(2, 1, yy_rule_start), (2, 1, yy_rule45), (0, 1)]), (0, [(1, 4), (0, 1), (2, 1,
+yy_rule_start), (2, 1, yy_rule38), (0, 2), (2, 1, yy_rule_start), (2, 1,
+yy_rule45), (0, 2), (2, 1, yy_rule_start), (2, 1, yy_rule38), (3, 1), (0, 1), (
+2, 1, yy_rule_start), (2, 1, yy_rule45), (0, 1)]), (0, [(1, 4), (0, 2), (2, 1,
+yy_rule_start), (2, 1, yy_rule38), (0, 1), (2, 1, yy_rule_start), (2, 1,
+yy_rule45), (0, 3), (2, 1, yy_rule_start), (2, 1, yy_rule38), (3, 1), (2, 1,
+yy_rule_start), (2, 1, yy_rule45), (0, 1)]), (58, [(1, 4), (3, 1), (2, 1,
+yy_rule_start), (2, 1, yy_rule38), (0, 2), (2, 1, yy_rule_start), (2, 1,
+yy_rule45), (0, 2), (2, 1, yy_rule_start), (2, 1, yy_rule38), (3, 1), (0, 1), (
+2, 1, yy_rule_start), (2, 1, yy_rule45), (0, 1)]), (59, [(1, 4), (3, 1), (2, 1,
+yy_rule_start), (2, 1, yy_rule38), (0, 2), (2, 1, yy_rule_start), (2, 1,
+yy_rule45), (0, 2), (2, 1, yy_rule_start), (2, 1, yy_rule38), (3, 1), (0, 1), (
+2, 1, yy_rule_start), (2, 1, yy_rule45), (0, 1)]), (0, [(1, 7), (0, 4), (2, 1,
+yy_rule_start), (2, 1, yy_rule43), (0, 2), (2, 1, yy_rule_start), (2, 1,
+yy_rule45), (0, 5), (2, 1, yy_rule_start), (2, 1, yy_rule43), (3, 1), (0, 1), (
+2, 1, yy_rule_start), (2, 1, yy_rule45), (0, 1)]), (0, [(1, 7), (0, 5), (2, 1,
+yy_rule_start), (2, 1, yy_rule43), (0, 1), (2, 1, yy_rule_start), (2, 1,
+yy_rule45), (0, 6), (2, 1, yy_rule_start), (2, 1, yy_rule43), (3, 1), (2, 1,
+yy_rule_start), (2, 1, yy_rule45), (0, 1)]), (0, [(1, 7), (0, 3), (2, 1,
+yy_rule_start), (2, 1, yy_rule42), (0, 1), (2, 1, yy_rule_start), (2, 1,
+yy_rule43), (0, 2), (2, 1, yy_rule_start), (2, 1, yy_rule45), (0, 4), (2, 1,
 yy_rule_start), (2, 1, yy_rule42), (3, 1), (2, 1, yy_rule_start), (2, 1,
-yy_rule43), (0, 2)]), (61, [(1, 3), (1, 1), (3, 1), (1, 1), (3, 1), (2, 1,
-yy_rule_start), (2, 1, yy_rule42), (0, 2), (2, 1, yy_rule_start), (2, 1,
-yy_rule43), (0, 1), (1, 1), (0, 1), (1, 1), (0, 1), (2, 1, yy_rule_start), (2,
-1, yy_rule42), (3, 1), (0, 1), (2, 1, yy_rule_start), (2, 1, yy_rule43), (0, 2)
-]), (0, [(1, 8), (0, 16), (3, 1)]), (13, [(1, 8), (1, 1), (3, 2), (0, 1), (1, 1
-), (3, 2), (0, 1), (1, 1), (3, 2), (0, 1), (1, 1), (3, 1), (1, 1), (3, 1), (2,
-1, yy_rule_start), (2, 1, yy_rule3), (0, 2), (1, 1), (0, 3), (1, 1), (0, 3), (
-1, 1), (0, 3), (1, 1), (0, 1), (1, 1), (0, 1), (2, 1, yy_rule_start), (2, 1,
-yy_rule3), (3, 1), (0, 2)]), (0, [(1, 8), (0, 7), (2, 1, yy_rule_start), (2, 1,
-yy_rule3), (0, 8), (2, 1, yy_rule_start), (2, 1, yy_rule3), (3, 1), (0, 1)]), (
-14, [(1, 8), (0, 1), (3, 1), (0, 1), (3, 1), (0, 12), (3, 1)]), (15, [(1, 8), (
-0, 5), (3, 1), (0, 10), (3, 1)]), (0, [(1, 2), (0, 4), (3, 1)]), (62, [(1, 2),
-(0, 1), (1, 1), (3, 1), (1, 1), (3, 1), (2, 1, yy_rule_start), (2, 1, yy_rule1
-), (0, 2), (1, 1), (0, 1), (1, 1), (0, 1), (2, 1, yy_rule_start), (2, 1,
-yy_rule1), (3, 1), (0, 1)]), (63, [(1, 2), (1, 1), (3, 1), (1, 1), (3, 1), (2,
-1, yy_rule_start), (2, 1, yy_rule0), (0, 2), (1, 1), (0, 1), (1, 1), (0, 1), (
-2, 1, yy_rule_start), (2, 1, yy_rule0), (3, 1), (0, 2)]), (0, [(1, 1), (0, 2),
-(3, 1)]), (0, [(1, 1), (2, 1, yy_rule_start), (2, 1, yy_rule2), (0, 1), (2, 1,
-yy_rule_start), (2, 1, yy_rule2), (3, 1), (0, 1)]), (16, [(1, 8), (1, 1), (3, 2
-), (0, 1), (1, 1), (3, 2), (0, 1), (1, 1), (3, 2), (0, 1), (1, 1), (3, 1), (1,
-1), (3, 1), (2, 1, yy_rule_start), (2, 1, yy_rule3), (0, 2), (1, 1), (0, 3), (
-1, 1), (0, 3), (1, 1), (0, 3), (1, 1), (0, 1), (1, 1), (0, 1), (2, 1,
-yy_rule_start), (2, 1, yy_rule3), (3, 1), (0, 2)]), (17, [(1, 8), (0, 1), (3, 1
-), (0, 1), (3, 1), (0, 12), (3, 1)]), (18, [(1, 8), (0, 5), (3, 1), (0, 10), (
-3, 1)]), (64, [(1, 2), (0, 1), (1, 1), (3, 1), (1, 1), (3, 1), (2, 1,
+yy_rule43), (0, 2), (2, 1, yy_rule_start), (2, 1, yy_rule45), (0, 1)]), (60, [(
+1, 7), (3, 3), (0, 1), (2, 1, yy_rule_start), (2, 1, yy_rule43), (0, 2), (2, 1,
+yy_rule_start), (2, 1, yy_rule45), (0, 5), (2, 1, yy_rule_start), (2, 1,
+yy_rule43), (3, 1), (0, 1), (2, 1, yy_rule_start), (2, 1, yy_rule45), (0, 1)]),
+(61, [(1, 7), (3, 3), (0, 1), (2, 1, yy_rule_start), (2, 1, yy_rule43), (0, 2),
+(2, 1, yy_rule_start), (2, 1, yy_rule45), (0, 5), (2, 1, yy_rule_start), (2, 1,
+yy_rule43), (3, 1), (0, 1), (2, 1, yy_rule_start), (2, 1, yy_rule45), (0, 1)]),
+(62, [(1, 3), (1, 1), (3, 1), (1, 1), (3, 1), (2, 1, yy_rule_start), (2, 1,
+yy_rule44), (0, 2), (2, 1, yy_rule_start), (2, 1, yy_rule45), (0, 1), (1, 1), (
+0, 1), (1, 1), (0, 1), (2, 1, yy_rule_start), (2, 1, yy_rule44), (3, 1), (0, 1
+), (2, 1, yy_rule_start), (2, 1, yy_rule45), (0, 2)]), (0, [(1, 3), (0, 1), (2,
+1, yy_rule_start), (2, 1, yy_rule44), (0, 1), (2, 1, yy_rule_start), (2, 1,
+yy_rule45), (0, 2), (2, 1, yy_rule_start), (2, 1, yy_rule44), (3, 1), (2, 1,
+yy_rule_start), (2, 1, yy_rule45), (0, 2)]), (63, [(1, 3), (1, 1), (3, 1), (1,
+1), (3, 1), (2, 1, yy_rule_start), (2, 1, yy_rule44), (0, 2), (2, 1,
+yy_rule_start), (2, 1, yy_rule45), (0, 1), (1, 1), (0, 1), (1, 1), (0, 1), (2,
+1, yy_rule_start), (2, 1, yy_rule44), (3, 1), (0, 1), (2, 1, yy_rule_start), (
+2, 1, yy_rule45), (0, 2)]), (0, [(1, 8), (0, 16), (3, 1)]), (13, [(1, 8), (1, 1
+), (3, 2), (0, 1), (1, 1), (3, 2), (0, 1), (1, 1), (3, 2), (0, 1), (1, 1), (3,
+1), (1, 1), (3, 1), (2, 1, yy_rule_start), (2, 1, yy_rule3), (0, 2), (1, 1), (
+0, 3), (1, 1), (0, 3), (1, 1), (0, 3), (1, 1), (0, 1), (1, 1), (0, 1), (2, 1,
+yy_rule_start), (2, 1, yy_rule3), (3, 1), (0, 2)]), (0, [(1, 8), (0, 7), (2, 1,
+yy_rule_start), (2, 1, yy_rule3), (0, 8), (2, 1, yy_rule_start), (2, 1,
+yy_rule3), (3, 1), (0, 1)]), (14, [(1, 8), (0, 1), (3, 1), (0, 1), (3, 1), (0,
+12), (3, 1)]), (15, [(1, 8), (0, 5), (3, 1), (0, 10), (3, 1)]), (0, [(1, 2), (
+0, 4), (3, 1)]), (64, [(1, 2), (0, 1), (1, 1), (3, 1), (1, 1), (3, 1), (2, 1,
 yy_rule_start), (2, 1, yy_rule1), (0, 2), (1, 1), (0, 1), (1, 1), (0, 1), (2,
 1, yy_rule_start), (2, 1, yy_rule1), (3, 1), (0, 1)]), (65, [(1, 2), (1, 1), (
 3, 1), (1, 1), (3, 1), (2, 1, yy_rule_start), (2, 1, yy_rule0), (0, 2), (1, 1),
 (0, 1), (1, 1), (0, 1), (2, 1, yy_rule_start), (2, 1, yy_rule0), (3, 1), (0, 2)
-]), (19, [(1, 2), (1, 1), (3, 1), (1, 1), (3, 1), (2, 1, yy_rule_start), (2, 1,
-yy_rule5), (0, 2), (1, 1), (0, 1), (1, 1), (0, 1), (2, 1, yy_rule_start), (2,
-1, yy_rule5), (3, 1), (0, 2)]), (0, [(1, 2), (0, 1), (2, 1, yy_rule_start), (2,
-1, yy_rule5), (0, 2), (2, 1, yy_rule_start), (2, 1, yy_rule5), (3, 1), (0, 1)]
-), (19, [(1, 4), (0, 2), (1, 1), (3, 1), (1, 1), (3, 1), (2, 1, yy_rule_start),
-(2, 1, yy_rule5), (0, 4), (1, 1), (0, 1), (1, 1), (0, 1), (2, 1, yy_rule_start
-), (2, 1, yy_rule5), (3, 1), (0, 2)]), (20, [(1, 4), (1, 1), (3, 2), (0, 1), (
-1, 1), (3, 1), (1, 1), (3, 1), (2, 1, yy_rule_start), (2, 1, yy_rule5), (0, 2),
-(1, 1), (0, 3), (1, 1), (0, 1), (1, 1), (0, 1), (2, 1, yy_rule_start), (2, 1,
-yy_rule5), (3, 1), (0, 2)]), (0, [(1, 4), (0, 3), (2, 1, yy_rule_start), (2, 1,
-yy_rule5), (0, 4), (2, 1, yy_rule_start), (2, 1, yy_rule5), (3, 1), (0, 1)]), (
-21, [(1, 4), (0, 1), (3, 1), (1, 1), (3, 1), (1, 1), (3, 1), (2, 1,
+]), (0, [(1, 1), (0, 2), (3, 1)]), (0, [(1, 1), (2, 1, yy_rule_start), (2, 1,
+yy_rule2), (0, 1), (2, 1, yy_rule_start), (2, 1, yy_rule2), (3, 1), (0, 1)]), (
+16, [(1, 8), (1, 1), (3, 2), (0, 1), (1, 1), (3, 2), (0, 1), (1, 1), (3, 2), (
+0, 1), (1, 1), (3, 1), (1, 1), (3, 1), (2, 1, yy_rule_start), (2, 1, yy_rule3),
+(0, 2), (1, 1), (0, 3), (1, 1), (0, 3), (1, 1), (0, 3), (1, 1), (0, 1), (1, 1),
+(0, 1), (2, 1, yy_rule_start), (2, 1, yy_rule3), (3, 1), (0, 2)]), (17, [(1, 8
+), (0, 1), (3, 1), (0, 1), (3, 1), (0, 12), (3, 1)]), (18, [(1, 8), (0, 5), (3,
+1), (0, 10), (3, 1)]), (66, [(1, 2), (0, 1), (1, 1), (3, 1), (1, 1), (3, 1), (
+2, 1, yy_rule_start), (2, 1, yy_rule1), (0, 2), (1, 1), (0, 1), (1, 1), (0, 1),
+(2, 1, yy_rule_start), (2, 1, yy_rule1), (3, 1), (0, 1)]), (67, [(1, 2), (1, 1
+), (3, 1), (1, 1), (3, 1), (2, 1, yy_rule_start), (2, 1, yy_rule0), (0, 2), (1,
+1), (0, 1), (1, 1), (0, 1), (2, 1, yy_rule_start), (2, 1, yy_rule0), (3, 1), (
+0, 2)]), (19, [(1, 2), (1, 1), (3, 1), (1, 1), (3, 1), (2, 1, yy_rule_start), (
+2, 1, yy_rule5), (0, 2), (1, 1), (0, 1), (1, 1), (0, 1), (2, 1, yy_rule_start),
+(2, 1, yy_rule5), (3, 1), (0, 2)]), (0, [(1, 2), (0, 1), (2, 1, yy_rule_start),
+(2, 1, yy_rule5), (0, 2), (2, 1, yy_rule_start), (2, 1, yy_rule5), (3, 1), (0,
+1)]), (19, [(1, 4), (0, 2), (1, 1), (3, 1), (1, 1), (3, 1), (2, 1,
+yy_rule_start), (2, 1, yy_rule5), (0, 4), (1, 1), (0, 1), (1, 1), (0, 1), (2,
+1, yy_rule_start), (2, 1, yy_rule5), (3, 1), (0, 2)]), (20, [(1, 4), (1, 1), (
+3, 2), (0, 1), (1, 1), (3, 1), (1, 1), (3, 1), (2, 1, yy_rule_start), (2, 1,
+yy_rule5), (0, 2), (1, 1), (0, 3), (1, 1), (0, 1), (1, 1), (0, 1), (2, 1,
+yy_rule_start), (2, 1, yy_rule5), (3, 1), (0, 2)]), (0, [(1, 4), (0, 3), (2, 1,
+yy_rule_start), (2, 1, yy_rule5), (0, 4), (2, 1, yy_rule_start), (2, 1,
+yy_rule5), (3, 1), (0, 1)]), (21, [(1, 4), (0, 1), (3, 1), (1, 1), (3, 1), (1,
+1), (3, 1), (2, 1, yy_rule_start), (2, 1, yy_rule5), (0, 4), (1, 1), (0, 1), (
+1, 1), (0, 1), (2, 1, yy_rule_start), (2, 1, yy_rule5), (3, 1), (0, 2)]), (19,
+[(1, 3), (0, 1), (1, 1), (3, 1), (1, 1), (3, 1), (2, 1, yy_rule_start), (2, 1,
+yy_rule5), (0, 3), (1, 1), (0, 1), (1, 1), (0, 1), (2, 1, yy_rule_start), (2,
+1, yy_rule5), (3, 1), (0, 2)]), (0, [(1, 3), (0, 2), (2, 1, yy_rule_start), (2,
+1, yy_rule5), (0, 3), (2, 1, yy_rule_start), (2, 1, yy_rule5), (3, 1), (0, 1)]
+), (68, [(1, 3), (1, 1), (3, 1), (1, 1), (3, 1), (2, 1, yy_rule_start), (2, 1,
+yy_rule4), (0, 1), (1, 1), (3, 1), (1, 1), (3, 1), (2, 1, yy_rule_start), (2,
+1, yy_rule5), (0, 2), (1, 1), (0, 1), (1, 1), (0, 1), (2, 1, yy_rule_start), (
+2, 1, yy_rule4), (3, 1), (1, 1), (0, 1), (1, 1), (0, 1), (2, 1, yy_rule_start),
+(2, 1, yy_rule5), (0, 3)]), (22, [(1, 2), (1, 1), (3, 1), (1, 1), (3, 1), (2,
+1, yy_rule_start), (2, 1, yy_rule5), (0, 2), (1, 1), (0, 1), (1, 1), (0, 1), (
+2, 1, yy_rule_start), (2, 1, yy_rule5), (3, 1), (0, 2)]), (22, [(1, 4), (0, 2),
+(1, 1), (3, 1), (1, 1), (3, 1), (2, 1, yy_rule_start), (2, 1, yy_rule5), (0, 4
+), (1, 1), (0, 1), (1, 1), (0, 1), (2, 1, yy_rule_start), (2, 1, yy_rule5), (3,
+1), (0, 2)]), (23, [(1, 4), (1, 1), (3, 2), (0, 1), (1, 1), (3, 1), (1, 1), (3,
+1), (2, 1, yy_rule_start), (2, 1, yy_rule5), (0, 2), (1, 1), (0, 3), (1, 1), (
+0, 1), (1, 1), (0, 1), (2, 1, yy_rule_start), (2, 1, yy_rule5), (3, 1), (0, 2)]
+), (24, [(1, 4), (0, 1), (3, 1), (1, 1), (3, 1), (1, 1), (3, 1), (2, 1,
 yy_rule_start), (2, 1, yy_rule5), (0, 4), (1, 1), (0, 1), (1, 1), (0, 1), (2,
-1, yy_rule_start), (2, 1, yy_rule5), (3, 1), (0, 2)]), (19, [(1, 3), (0, 1), (
+1, yy_rule_start), (2, 1, yy_rule5), (3, 1), (0, 2)]), (22, [(1, 3), (0, 1), (
 1, 1), (3, 1), (1, 1), (3, 1), (2, 1, yy_rule_start), (2, 1, yy_rule5), (0, 3),
 (1, 1), (0, 1), (1, 1), (0, 1), (2, 1, yy_rule_start), (2, 1, yy_rule5), (3, 1
-), (0, 2)]), (0, [(1, 3), (0, 2), (2, 1, yy_rule_start), (2, 1, yy_rule5), (0,
-3), (2, 1, yy_rule_start), (2, 1, yy_rule5), (3, 1), (0, 1)]), (66, [(1, 3), (
-1, 1), (3, 1), (1, 1), (3, 1), (2, 1, yy_rule_start), (2, 1, yy_rule4), (0, 1),
-(1, 1), (3, 1), (1, 1), (3, 1), (2, 1, yy_rule_start), (2, 1, yy_rule5), (0, 2
-), (1, 1), (0, 1), (1, 1), (0, 1), (2, 1, yy_rule_start), (2, 1, yy_rule4), (3,
-1), (1, 1), (0, 1), (1, 1), (0, 1), (2, 1, yy_rule_start), (2, 1, yy_rule5), (
-0, 3)]), (22, [(1, 2), (1, 1), (3, 1), (1, 1), (3, 1), (2, 1, yy_rule_start), (
-2, 1, yy_rule5), (0, 2), (1, 1), (0, 1), (1, 1), (0, 1), (2, 1, yy_rule_start),
-(2, 1, yy_rule5), (3, 1), (0, 2)]), (22, [(1, 4), (0, 2), (1, 1), (3, 1), (1, 1
-), (3, 1), (2, 1, yy_rule_start), (2, 1, yy_rule5), (0, 4), (1, 1), (0, 1), (1,
-1), (0, 1), (2, 1, yy_rule_start), (2, 1, yy_rule5), (3, 1), (0, 2)]), (23, [(
-1, 4), (1, 1), (3, 2), (0, 1), (1, 1), (3, 1), (1, 1), (3, 1), (2, 1,
-yy_rule_start), (2, 1, yy_rule5), (0, 2), (1, 1), (0, 3), (1, 1), (0, 1), (1, 1
-), (0, 1), (2, 1, yy_rule_start), (2, 1, yy_rule5), (3, 1), (0, 2)]), (24, [(1,
-4), (0, 1), (3, 1), (1, 1), (3, 1), (1, 1), (3, 1), (2, 1, yy_rule_start), (2,
-1, yy_rule5), (0, 4), (1, 1), (0, 1), (1, 1), (0, 1), (2, 1, yy_rule_start), (
-2, 1, yy_rule5), (3, 1), (0, 2)]), (22, [(1, 3), (0, 1), (1, 1), (3, 1), (1, 1
-), (3, 1), (2, 1, yy_rule_start), (2, 1, yy_rule5), (0, 3), (1, 1), (0, 1), (1,
-1), (0, 1), (2, 1, yy_rule_start), (2, 1, yy_rule5), (3, 1), (0, 2)]), (67, [(
-1, 3), (1, 1), (3, 1), (1, 1), (3, 1), (2, 1, yy_rule_start), (2, 1, yy_rule4),
-(0, 1), (1, 1), (3, 1), (1, 1), (3, 1), (2, 1, yy_rule_start), (2, 1, yy_rule5
-), (0, 2), (1, 1), (0, 1), (1, 1), (0, 1), (2, 1, yy_rule_start), (2, 1,
-yy_rule4), (3, 1), (1, 1), (0, 1), (1, 1), (0, 1), (2, 1, yy_rule_start), (2,
-1, yy_rule5), (0, 3)]), (25, [(1, 1), (1, 1), (3, 1), (2, 1, yy_rule_start), (
-2, 1, yy_rule33), (0, 1), (1, 1), (0, 1), (2, 1, yy_rule_start), (2, 1,
-yy_rule33), (3, 1), (0, 1)]), (0, [(1, 3), (0, 6), (3, 1)]), (28, [(1, 3), (2,
-1, yy_group6), (3, 2), (1, 1), (3, 1), (2, 1, yy_group_end), (2, 1,
-yy_group_end_element), (2, 1, yy_rule_start), (2, 1, yy_rule29), (0, 1), (2, 1,
-yy_group6), (0, 2), (1, 1), (0, 1), (2, 1, yy_group_end), (2, 1,
-yy_group_end_element), (2, 1, yy_rule_start), (2, 1, yy_rule29), (3, 1), (0, 1)
-]), (29, [(1, 3), (0, 2), (1, 1), (3, 1), (2, 1, yy_group_end), (2, 1,
-yy_group_end_element), (2, 1, yy_rule_start), (2, 1, yy_rule29), (0, 3), (1, 1
+), (0, 2)]), (69, [(1, 3), (1, 1), (3, 1), (1, 1), (3, 1), (2, 1, yy_rule_start
+), (2, 1, yy_rule4), (0, 1), (1, 1), (3, 1), (1, 1), (3, 1), (2, 1,
+yy_rule_start), (2, 1, yy_rule5), (0, 2), (1, 1), (0, 1), (1, 1), (0, 1), (2,
+1, yy_rule_start), (2, 1, yy_rule4), (3, 1), (1, 1), (0, 1), (1, 1), (0, 1), (
+2, 1, yy_rule_start), (2, 1, yy_rule5), (0, 3)]), (25, [(1, 1), (1, 1), (3, 1),
+(2, 1, yy_rule_start), (2, 1, yy_rule35), (0, 1), (1, 1), (0, 1), (2, 1,
+yy_rule_start), (2, 1, yy_rule35), (3, 1), (0, 1)]), (0, [(1, 3), (0, 6), (3, 1
+)]), (28, [(1, 3), (2, 1, yy_group6), (3, 2), (1, 1), (3, 1), (2, 1,
+yy_group_end), (2, 1, yy_group_end_element), (2, 1, yy_rule_start), (2, 1,
+yy_rule31), (0, 1), (2, 1, yy_group6), (0, 2), (1, 1), (0, 1), (2, 1,
+yy_group_end), (2, 1, yy_group_end_element), (2, 1, yy_rule_start), (2, 1,
+yy_rule31), (3, 1), (0, 1)]), (29, [(1, 3), (0, 2), (1, 1), (3, 1), (2, 1,
+yy_group_end), (2, 1, yy_group_end_element), (2, 1, yy_rule_start), (2, 1,
+yy_rule31), (0, 3), (1, 1), (0, 1), (2, 1, yy_group_end), (2, 1,
+yy_group_end_element), (2, 1, yy_rule_start), (2, 1, yy_rule31), (3, 1), (0, 1)
+]), (0, [(1, 1), (2, 1, yy_rule_start), (2, 1, yy_rule34), (0, 1), (2, 1,
+yy_rule_start), (2, 1, yy_rule34), (3, 1), (0, 1)]), (70, [(1, 3), (1, 1), (3,
+1), (2, 1, yy_group_end), (2, 1, yy_group_end_element), (2, 1, yy_rule_start),
+(2, 1, yy_rule29), (0, 2), (1, 1), (3, 1), (2, 1, yy_group_end), (2, 1,
+yy_group_end_element), (2, 1, yy_rule_start), (2, 1, yy_rule31), (0, 1), (1, 1
 ), (0, 1), (2, 1, yy_group_end), (2, 1, yy_group_end_element), (2, 1,
-yy_rule_start), (2, 1, yy_rule29), (3, 1), (0, 1)]), (0, [(1, 1), (2, 1,
-yy_rule_start), (2, 1, yy_rule32), (0, 1), (2, 1, yy_rule_start), (2, 1,
-yy_rule32), (3, 1), (0, 1)]), (68, [(1, 3), (1, 1), (3, 1), (2, 1, yy_group_end
-), (2, 1, yy_group_end_element), (2, 1, yy_rule_start), (2, 1, yy_rule27), (0,
-2), (1, 1), (3, 1), (2, 1, yy_group_end), (2, 1, yy_group_end_element), (2, 1,
-yy_rule_start), (2, 1, yy_rule29), (0, 1), (1, 1), (0, 1), (2, 1, yy_group_end
-), (2, 1, yy_group_end_element), (2, 1, yy_rule_start), (2, 1, yy_rule27), (3,
-1), (0, 1), (1, 1), (0, 1), (2, 1, yy_group_end), (2, 1, yy_group_end_element),
-(2, 1, yy_rule_start), (2, 1, yy_rule29), (0, 2)]), (69, [(1, 3), (0, 1), (2,
-1, yy_group9), (3, 1), (0, 2), (2, 1, yy_group9), (0, 2), (3, 1)]), (29, [(1, 1
-), (1, 1), (3, 1), (2, 1, yy_group_end), (2, 1, yy_group_end_element), (2, 1,
-yy_rule_start), (2, 1, yy_rule29), (0, 1), (1, 1), (0, 1), (2, 1, yy_group_end
-), (2, 1, yy_group_end_element), (2, 1, yy_rule_start), (2, 1, yy_rule29), (3,
-1), (0, 1)]), (30, [(1, 1), (1, 1), (3, 1), (2, 1, yy_group_end_element), (2,
-1, yy_rule_start), (2, 1, yy_rule26), (0, 1), (1, 1), (0, 1), (2, 1,
-yy_group_end_element), (2, 1, yy_rule_start), (2, 1, yy_rule26), (3, 1), (0, 1)
+yy_rule_start), (2, 1, yy_rule29), (3, 1), (0, 1), (1, 1), (0, 1), (2, 1,
+yy_group_end), (2, 1, yy_group_end_element), (2, 1, yy_rule_start), (2, 1,
+yy_rule31), (0, 2)]), (71, [(1, 3), (0, 1), (2, 1, yy_group9), (3, 1), (0, 2),
+(2, 1, yy_group9), (0, 2), (3, 1)]), (29, [(1, 1), (1, 1), (3, 1), (2, 1,
+yy_group_end), (2, 1, yy_group_end_element), (2, 1, yy_rule_start), (2, 1,
+yy_rule31), (0, 1), (1, 1), (0, 1), (2, 1, yy_group_end), (2, 1,
+yy_group_end_element), (2, 1, yy_rule_start), (2, 1, yy_rule31), (3, 1), (0, 1)
+]), (30, [(1, 1), (1, 1), (3, 1), (2, 1, yy_group_end_element), (2, 1,
+yy_rule_start), (2, 1, yy_rule28), (0, 1), (1, 1), (0, 1), (2, 1,
+yy_group_end_element), (2, 1, yy_rule_start), (2, 1, yy_rule28), (3, 1), (0, 1)
 ]), (30, [(1, 2), (0, 1), (1, 1), (3, 1), (2, 1, yy_group_end_element), (2, 1,
-yy_rule_start), (2, 1, yy_rule26), (0, 2), (1, 1), (0, 1), (2, 1,
-yy_group_end_element), (2, 1, yy_rule_start), (2, 1, yy_rule26), (3, 1), (0, 1)
-]), (70, [(1, 2), (3, 1), (1, 1), (3, 1), (2, 1, yy_group_end_element), (2, 1,
-yy_rule_start), (2, 1, yy_rule26), (0, 2), (1, 1), (0, 1), (2, 1,
-yy_group_end_element), (2, 1, yy_rule_start), (2, 1, yy_rule26), (3, 1), (0, 1)
-]), (71, [(1, 2), (3, 1), (1, 1), (3, 1), (2, 1, yy_group_end_element), (2, 1,
-yy_rule_start), (2, 1, yy_rule26), (0, 2), (1, 1), (0, 1), (2, 1,
-yy_group_end_element), (2, 1, yy_rule_start), (2, 1, yy_rule26), (3, 1), (0, 1)
+yy_rule_start), (2, 1, yy_rule28), (0, 2), (1, 1), (0, 1), (2, 1,
+yy_group_end_element), (2, 1, yy_rule_start), (2, 1, yy_rule28), (3, 1), (0, 1)
 ]), (72, [(1, 2), (3, 1), (1, 1), (3, 1), (2, 1, yy_group_end_element), (2, 1,
-yy_rule_start), (2, 1, yy_rule26), (0, 2), (1, 1), (0, 1), (2, 1,
-yy_group_end_element), (2, 1, yy_rule_start), (2, 1, yy_rule26), (3, 1), (0, 1)
+yy_rule_start), (2, 1, yy_rule28), (0, 2), (1, 1), (0, 1), (2, 1,
+yy_group_end_element), (2, 1, yy_rule_start), (2, 1, yy_rule28), (3, 1), (0, 1)
 ]), (73, [(1, 2), (3, 1), (1, 1), (3, 1), (2, 1, yy_group_end_element), (2, 1,
-yy_rule_start), (2, 1, yy_rule26), (0, 2), (1, 1), (0, 1), (2, 1,
-yy_group_end_element), (2, 1, yy_rule_start), (2, 1, yy_rule26), (3, 1), (0, 1)
+yy_rule_start), (2, 1, yy_rule28), (0, 2), (1, 1), (0, 1), (2, 1,
+yy_group_end_element), (2, 1, yy_rule_start), (2, 1, yy_rule28), (3, 1), (0, 1)
 ]), (74, [(1, 2), (3, 1), (1, 1), (3, 1), (2, 1, yy_group_end_element), (2, 1,
-yy_rule_start), (2, 1, yy_rule26), (0, 2), (1, 1), (0, 1), (2, 1,
-yy_group_end_element), (2, 1, yy_rule_start), (2, 1, yy_rule26), (3, 1), (0, 1)
+yy_rule_start), (2, 1, yy_rule28), (0, 2), (1, 1), (0, 1), (2, 1,
+yy_group_end_element), (2, 1, yy_rule_start), (2, 1, yy_rule28), (3, 1), (0, 1)
 ]), (75, [(1, 2), (3, 1), (1, 1), (3, 1), (2, 1, yy_group_end_element), (2, 1,
-yy_rule_start), (2, 1, yy_rule26), (0, 2), (1, 1), (0, 1), (2, 1,
-yy_group_end_element), (2, 1, yy_rule_start), (2, 1, yy_rule26), (3, 1), (0, 1)
+yy_rule_start), (2, 1, yy_rule28), (0, 2), (1, 1), (0, 1), (2, 1,
+yy_group_end_element), (2, 1, yy_rule_start), (2, 1, yy_rule28), (3, 1), (0, 1)
 ]), (76, [(1, 2), (3, 1), (1, 1), (3, 1), (2, 1, yy_group_end_element), (2, 1,
-yy_rule_start), (2, 1, yy_rule26), (0, 2), (1, 1), (0, 1), (2, 1,
-yy_group_end_element), (2, 1, yy_rule_start), (2, 1, yy_rule26), (3, 1), (0, 1)
+yy_rule_start), (2, 1, yy_rule28), (0, 2), (1, 1), (0, 1), (2, 1,
+yy_group_end_element), (2, 1, yy_rule_start), (2, 1, yy_rule28), (3, 1), (0, 1)
 ]), (77, [(1, 2), (3, 1), (1, 1), (3, 1), (2, 1, yy_group_end_element), (2, 1,
-yy_rule_start), (2, 1, yy_rule26), (0, 2), (1, 1), (0, 1), (2, 1,
-yy_group_end_element), (2, 1, yy_rule_start), (2, 1, yy_rule26), (3, 1), (0, 1)
+yy_rule_start), (2, 1, yy_rule28), (0, 2), (1, 1), (0, 1), (2, 1,
+yy_group_end_element), (2, 1, yy_rule_start), (2, 1, yy_rule28), (3, 1), (0, 1)
+]), (78, [(1, 2), (3, 1), (1, 1), (3, 1), (2, 1, yy_group_end_element), (2, 1,
+yy_rule_start), (2, 1, yy_rule28), (0, 2), (1, 1), (0, 1), (2, 1,
+yy_group_end_element), (2, 1, yy_rule_start), (2, 1, yy_rule28), (3, 1), (0, 1)
+]), (79, [(1, 2), (3, 1), (1, 1), (3, 1), (2, 1, yy_group_end_element), (2, 1,
+yy_rule_start), (2, 1, yy_rule28), (0, 2), (1, 1), (0, 1), (2, 1,
+yy_group_end_element), (2, 1, yy_rule_start), (2, 1, yy_rule28), (3, 1), (0, 1)
+]), (80, [(1, 2), (3, 1), (1, 1), (3, 1), (2, 1, yy_group_end_element), (2, 1,
+yy_rule_start), (2, 1, yy_rule28), (0, 2), (1, 1), (0, 1), (2, 1,
+yy_group_end_element), (2, 1, yy_rule_start), (2, 1, yy_rule28), (3, 1), (0, 1)
 ]), (30, [(1, 3), (0, 2), (1, 1), (3, 1), (2, 1, yy_group_end_element), (2, 1,
-yy_rule_start), (2, 1, yy_rule26), (0, 3), (1, 1), (0, 1), (2, 1,
-yy_group_end_element), (2, 1, yy_rule_start), (2, 1, yy_rule26), (3, 1), (0, 1)
-]), (78, [(1, 3), (3, 1), (0, 1), (1, 1), (3, 1), (2, 1, yy_group_end_element),
-(2, 1, yy_rule_start), (2, 1, yy_rule26), (0, 3), (1, 1), (0, 1), (2, 1,
-yy_group_end_element), (2, 1, yy_rule_start), (2, 1, yy_rule26), (3, 1), (0, 1)
-]), (79, [(1, 3), (0, 1), (3, 1), (1, 1), (3, 1), (2, 1, yy_group_end_element),
-(2, 1, yy_rule_start), (2, 1, yy_rule26), (0, 3), (1, 1), (0, 1), (2, 1,
-yy_group_end_element), (2, 1, yy_rule_start), (2, 1, yy_rule26), (3, 1), (0, 1)
-]), (40, [(1, 3), (1, 1), (3, 2), (0, 1), (1, 1), (3, 1), (2, 1, yy_rule_start
-), (2, 1, yy_rule33), (0, 1), (1, 1), (0, 3), (1, 1), (0, 1), (2, 1,
-yy_rule_start), (2, 1, yy_rule33), (3, 1), (0, 1)]), (41, [(1, 3), (0, 1), (3,
-1), (0, 4), (3, 1)]), (80, [(1, 1), (1, 1), (3, 1), (1, 1), (3, 1), (2, 1,
-yy_rule_start), (2, 1, yy_rule31), (0, 1), (1, 1), (0, 1), (1, 1), (0, 1), (2,
-1, yy_rule_start), (2, 1, yy_rule31), (3, 1), (0, 1)]), (44, [(1, 3), (2, 1,
+yy_rule_start), (2, 1, yy_rule28), (0, 3), (1, 1), (0, 1), (2, 1,
+yy_group_end_element), (2, 1, yy_rule_start), (2, 1, yy_rule28), (3, 1), (0, 1)
+]), (81, [(1, 3), (3, 1), (0, 1), (1, 1), (3, 1), (2, 1, yy_group_end_element),
+(2, 1, yy_rule_start), (2, 1, yy_rule28), (0, 3), (1, 1), (0, 1), (2, 1,
+yy_group_end_element), (2, 1, yy_rule_start), (2, 1, yy_rule28), (3, 1), (0, 1)
+]), (82, [(1, 3), (0, 1), (3, 1), (1, 1), (3, 1), (2, 1, yy_group_end_element),
+(2, 1, yy_rule_start), (2, 1, yy_rule28), (0, 3), (1, 1), (0, 1), (2, 1,
+yy_group_end_element), (2, 1, yy_rule_start), (2, 1, yy_rule28), (3, 1), (0, 1)
+]), (41, [(1, 3), (1, 1), (3, 2), (0, 1), (1, 1), (3, 1), (2, 1, yy_rule_start
+), (2, 1, yy_rule35), (0, 1), (1, 1), (0, 3), (1, 1), (0, 1), (2, 1,
+yy_rule_start), (2, 1, yy_rule35), (3, 1), (0, 1)]), (42, [(1, 3), (0, 1), (3,
+1), (0, 4), (3, 1)]), (83, [(1, 1), (1, 1), (3, 1), (1, 1), (3, 1), (2, 1,
+yy_rule_start), (2, 1, yy_rule33), (0, 1), (1, 1), (0, 1), (1, 1), (0, 1), (2,
+1, yy_rule_start), (2, 1, yy_rule33), (3, 1), (0, 1)]), (45, [(1, 3), (2, 1,
 yy_group6), (3, 2), (1, 1), (3, 1), (2, 1, yy_group_end), (2, 1,
-yy_group_end_element), (2, 1, yy_rule_start), (2, 1, yy_rule29), (0, 1), (2, 1,
+yy_group_end_element), (2, 1, yy_rule_start), (2, 1, yy_rule31), (0, 1), (2, 1,
 yy_group6), (0, 2), (1, 1), (0, 1), (2, 1, yy_group_end), (2, 1,
-yy_group_end_element), (2, 1, yy_rule_start), (2, 1, yy_rule29), (3, 1), (0, 1)
-]), (45, [(1, 3), (0, 2), (1, 1), (3, 1), (2, 1, yy_group_end), (2, 1,
-yy_group_end_element), (2, 1, yy_rule_start), (2, 1, yy_rule29), (0, 3), (1, 1
+yy_group_end_element), (2, 1, yy_rule_start), (2, 1, yy_rule31), (3, 1), (0, 1)
+]), (46, [(1, 3), (0, 2), (1, 1), (3, 1), (2, 1, yy_group_end), (2, 1,
+yy_group_end_element), (2, 1, yy_rule_start), (2, 1, yy_rule31), (0, 3), (1, 1
 ), (0, 1), (2, 1, yy_group_end), (2, 1, yy_group_end_element), (2, 1,
-yy_rule_start), (2, 1, yy_rule29), (3, 1), (0, 1)]), (81, [(1, 3), (1, 1), (3,
+yy_rule_start), (2, 1, yy_rule31), (3, 1), (0, 1)]), (84, [(1, 3), (1, 1), (3,
 1), (2, 1, yy_group_end), (2, 1, yy_group_end_element), (2, 1, yy_rule_start),
-(2, 1, yy_rule27), (0, 2), (1, 1), (3, 1), (2, 1, yy_group_end), (2, 1,
-yy_group_end_element), (2, 1, yy_rule_start), (2, 1, yy_rule29), (0, 1), (1, 1
+(2, 1, yy_rule29), (0, 2), (1, 1), (3, 1), (2, 1, yy_group_end), (2, 1,
+yy_group_end_element), (2, 1, yy_rule_start), (2, 1, yy_rule31), (0, 1), (1, 1
 ), (0, 1), (2, 1, yy_group_end), (2, 1, yy_group_end_element), (2, 1,
-yy_rule_start), (2, 1, yy_rule27), (3, 1), (0, 1), (1, 1), (0, 1), (2, 1,
+yy_rule_start), (2, 1, yy_rule29), (3, 1), (0, 1), (1, 1), (0, 1), (2, 1,
 yy_group_end), (2, 1, yy_group_end_element), (2, 1, yy_rule_start), (2, 1,
-yy_rule29), (0, 2)]), (82, [(1, 3), (0, 1), (2, 1, yy_group9), (3, 1), (0, 2),
-(2, 1, yy_group9), (0, 2), (3, 1)]), (45, [(1, 1), (1, 1), (3, 1), (2, 1,
+yy_rule31), (0, 2)]), (85, [(1, 3), (0, 1), (2, 1, yy_group9), (3, 1), (0, 2),
+(2, 1, yy_group9), (0, 2), (3, 1)]), (46, [(1, 1), (1, 1), (3, 1), (2, 1,
 yy_group_end), (2, 1, yy_group_end_element), (2, 1, yy_rule_start), (2, 1,
-yy_rule29), (0, 1), (1, 1), (0, 1), (2, 1, yy_group_end), (2, 1,
-yy_group_end_element), (2, 1, yy_rule_start), (2, 1, yy_rule29), (3, 1), (0, 1)
-]), (46, [(1, 1), (1, 1), (3, 1), (2, 1, yy_group_end_element), (2, 1,
-yy_rule_start), (2, 1, yy_rule26), (0, 1), (1, 1), (0, 1), (2, 1,
-yy_group_end_element), (2, 1, yy_rule_start), (2, 1, yy_rule26), (3, 1), (0, 1)
-]), (46, [(1, 2), (0, 1), (1, 1), (3, 1), (2, 1, yy_group_end_element), (2, 1,
-yy_rule_start), (2, 1, yy_rule26), (0, 2), (1, 1), (0, 1), (2, 1,
-yy_group_end_element), (2, 1, yy_rule_start), (2, 1, yy_rule26), (3, 1), (0, 1)
-]), (83, [(1, 2), (3, 1), (1, 1), (3, 1), (2, 1, yy_group_end_element), (2, 1,
-yy_rule_start), (2, 1, yy_rule26), (0, 2), (1, 1), (0, 1), (2, 1,
-yy_group_end_element), (2, 1, yy_rule_start), (2, 1, yy_rule26), (3, 1), (0, 1)
-]), (84, [(1, 2), (3, 1), (1, 1), (3, 1), (2, 1, yy_group_end_element), (2, 1,
-yy_rule_start), (2, 1, yy_rule26), (0, 2), (1, 1), (0, 1), (2, 1,
-yy_group_end_element), (2, 1, yy_rule_start), (2, 1, yy_rule26), (3, 1), (0, 1)
-]), (85, [(1, 2), (3, 1), (1, 1), (3, 1), (2, 1, yy_group_end_element), (2, 1,
-yy_rule_start), (2, 1, yy_rule26), (0, 2), (1, 1), (0, 1), (2, 1,
-yy_group_end_element), (2, 1, yy_rule_start), (2, 1, yy_rule26), (3, 1), (0, 1)
+yy_rule31), (0, 1), (1, 1), (0, 1), (2, 1, yy_group_end), (2, 1,
+yy_group_end_element), (2, 1, yy_rule_start), (2, 1, yy_rule31), (3, 1), (0, 1)
+]), (47, [(1, 1), (1, 1), (3, 1), (2, 1, yy_group_end_element), (2, 1,
+yy_rule_start), (2, 1, yy_rule28), (0, 1), (1, 1), (0, 1), (2, 1,
+yy_group_end_element), (2, 1, yy_rule_start), (2, 1, yy_rule28), (3, 1), (0, 1)
+]), (47, [(1, 2), (0, 1), (1, 1), (3, 1), (2, 1, yy_group_end_element), (2, 1,
+yy_rule_start), (2, 1, yy_rule28), (0, 2), (1, 1), (0, 1), (2, 1,
+yy_group_end_element), (2, 1, yy_rule_start), (2, 1, yy_rule28), (3, 1), (0, 1)
 ]), (86, [(1, 2), (3, 1), (1, 1), (3, 1), (2, 1, yy_group_end_element), (2, 1,
-yy_rule_start), (2, 1, yy_rule26), (0, 2), (1, 1), (0, 1), (2, 1,
-yy_group_end_element), (2, 1, yy_rule_start), (2, 1, yy_rule26), (3, 1), (0, 1)
+yy_rule_start), (2, 1, yy_rule28), (0, 2), (1, 1), (0, 1), (2, 1,
+yy_group_end_element), (2, 1, yy_rule_start), (2, 1, yy_rule28), (3, 1), (0, 1)
 ]), (87, [(1, 2), (3, 1), (1, 1), (3, 1), (2, 1, yy_group_end_element), (2, 1,
-yy_rule_start), (2, 1, yy_rule26), (0, 2), (1, 1), (0, 1), (2, 1,
-yy_group_end_element), (2, 1, yy_rule_start), (2, 1, yy_rule26), (3, 1), (0, 1)
+yy_rule_start), (2, 1, yy_rule28), (0, 2), (1, 1), (0, 1), (2, 1,
+yy_group_end_element), (2, 1, yy_rule_start), (2, 1, yy_rule28), (3, 1), (0, 1)
 ]), (88, [(1, 2), (3, 1), (1, 1), (3, 1), (2, 1, yy_group_end_element), (2, 1,
-yy_rule_start), (2, 1, yy_rule26), (0, 2), (1, 1), (0, 1), (2, 1,
-yy_group_end_element), (2, 1, yy_rule_start), (2, 1, yy_rule26), (3, 1), (0, 1)
+yy_rule_start), (2, 1, yy_rule28), (0, 2), (1, 1), (0, 1), (2, 1,
+yy_group_end_element), (2, 1, yy_rule_start), (2, 1, yy_rule28), (3, 1), (0, 1)
 ]), (89, [(1, 2), (3, 1), (1, 1), (3, 1), (2, 1, yy_group_end_element), (2, 1,
-yy_rule_start), (2, 1, yy_rule26), (0, 2), (1, 1), (0, 1), (2, 1,
-yy_group_end_element), (2, 1, yy_rule_start), (2, 1, yy_rule26), (3, 1), (0, 1)
+yy_rule_start), (2, 1, yy_rule28), (0, 2), (1, 1), (0, 1), (2, 1,
+yy_group_end_element), (2, 1, yy_rule_start), (2, 1, yy_rule28), (3, 1), (0, 1)
 ]), (90, [(1, 2), (3, 1), (1, 1), (3, 1), (2, 1, yy_group_end_element), (2, 1,
-yy_rule_start), (2, 1, yy_rule26), (0, 2), (1, 1), (0, 1), (2, 1,
-yy_group_end_element), (2, 1, yy_rule_start), (2, 1, yy_rule26), (3, 1), (0, 1)
-]), (46, [(1, 3), (0, 2), (1, 1), (3, 1), (2, 1, yy_group_end_element), (2, 1,
-yy_rule_start), (2, 1, yy_rule26), (0, 3), (1, 1), (0, 1), (2, 1,
-yy_group_end_element), (2, 1, yy_rule_start), (2, 1, yy_rule26), (3, 1), (0, 1)
-]), (91, [(1, 3), (3, 1), (0, 1), (1, 1), (3, 1), (2, 1, yy_group_end_element),
-(2, 1, yy_rule_start), (2, 1, yy_rule26), (0, 3), (1, 1), (0, 1), (2, 1,
-yy_group_end_element), (2, 1, yy_rule_start), (2, 1, yy_rule26), (3, 1), (0, 1)
-]), (92, [(1, 3), (0, 1), (3, 1), (1, 1), (3, 1), (2, 1, yy_group_end_element),
-(2, 1, yy_rule_start), (2, 1, yy_rule26), (0, 3), (1, 1), (0, 1), (2, 1,
-yy_group_end_element), (2, 1, yy_rule_start), (2, 1, yy_rule26), (3, 1), (0, 1)
-]), (0, [(1, 1), (2, 1, yy_rule_start), (2, 1, yy_rule35), (0, 1), (2, 1,
-yy_rule_start), (2, 1, yy_rule35), (3, 1), (0, 1)]), (0, [(1, 3), (2, 1,
-yy_group_end_element), (2, 1, yy_rule_start), (2, 1, yy_rule37), (0, 3), (2, 1,
-yy_group_end_element), (2, 1, yy_rule_start), (2, 1, yy_rule37), (3, 1), (0, 3)
-]), (0, [(1, 3), (0, 1), (2, 1, yy_group_end_element), (2, 1, yy_rule_start), (
-2, 1, yy_rule38), (0, 3), (2, 1, yy_group_end_element), (2, 1, yy_rule_start),
-(2, 1, yy_rule38), (3, 1), (0, 2)]), (0, [(1, 3), (0, 2), (2, 1,
+yy_rule_start), (2, 1, yy_rule28), (0, 2), (1, 1), (0, 1), (2, 1,
+yy_group_end_element), (2, 1, yy_rule_start), (2, 1, yy_rule28), (3, 1), (0, 1)
+]), (91, [(1, 2), (3, 1), (1, 1), (3, 1), (2, 1, yy_group_end_element), (2, 1,
+yy_rule_start), (2, 1, yy_rule28), (0, 2), (1, 1), (0, 1), (2, 1,
+yy_group_end_element), (2, 1, yy_rule_start), (2, 1, yy_rule28), (3, 1), (0, 1)
+]), (92, [(1, 2), (3, 1), (1, 1), (3, 1), (2, 1, yy_group_end_element), (2, 1,
+yy_rule_start), (2, 1, yy_rule28), (0, 2), (1, 1), (0, 1), (2, 1,
+yy_group_end_element), (2, 1, yy_rule_start), (2, 1, yy_rule28), (3, 1), (0, 1)
+]), (93, [(1, 2), (3, 1), (1, 1), (3, 1), (2, 1, yy_group_end_element), (2, 1,
+yy_rule_start), (2, 1, yy_rule28), (0, 2), (1, 1), (0, 1), (2, 1,
+yy_group_end_element), (2, 1, yy_rule_start), (2, 1, yy_rule28), (3, 1), (0, 1)
+]), (94, [(1, 2), (3, 1), (1, 1), (3, 1), (2, 1, yy_group_end_element), (2, 1,
+yy_rule_start), (2, 1, yy_rule28), (0, 2), (1, 1), (0, 1), (2, 1,
+yy_group_end_element), (2, 1, yy_rule_start), (2, 1, yy_rule28), (3, 1), (0, 1)
+]), (47, [(1, 3), (0, 2), (1, 1), (3, 1), (2, 1, yy_group_end_element), (2, 1,
+yy_rule_start), (2, 1, yy_rule28), (0, 3), (1, 1), (0, 1), (2, 1,
+yy_group_end_element), (2, 1, yy_rule_start), (2, 1, yy_rule28), (3, 1), (0, 1)
+]), (95, [(1, 3), (3, 1), (0, 1), (1, 1), (3, 1), (2, 1, yy_group_end_element),
+(2, 1, yy_rule_start), (2, 1, yy_rule28), (0, 3), (1, 1), (0, 1), (2, 1,
+yy_group_end_element), (2, 1, yy_rule_start), (2, 1, yy_rule28), (3, 1), (0, 1)
+]), (96, [(1, 3), (0, 1), (3, 1), (1, 1), (3, 1), (2, 1, yy_group_end_element),
+(2, 1, yy_rule_start), (2, 1, yy_rule28), (0, 3), (1, 1), (0, 1), (2, 1,
+yy_group_end_element), (2, 1, yy_rule_start), (2, 1, yy_rule28), (3, 1), (0, 1)
+]), (0, [(1, 1), (2, 1, yy_rule_start), (2, 1, yy_rule37), (0, 1), (2, 1,
+yy_rule_start), (2, 1, yy_rule37), (3, 1), (0, 1)]), (0, [(1, 3), (2, 1,
 yy_group_end_element), (2, 1, yy_rule_start), (2, 1, yy_rule39), (0, 3), (2, 1,
-yy_group_end_element), (2, 1, yy_rule_start), (2, 1, yy_rule39), (3, 1), (0, 1)
-]), (60, [(1, 2), (1, 1), (3, 1), (1, 1), (3, 1), (2, 1, yy_rule_start), (2, 1,
-yy_rule42), (0, 2), (1, 1), (0, 1), (1, 1), (0, 1), (2, 1, yy_rule_start), (2,
-1, yy_rule42), (3, 1), (0, 2)]), (0, [(1, 2), (0, 1), (2, 1, yy_rule_start), (
-2, 1, yy_rule42), (0, 2), (2, 1, yy_rule_start), (2, 1, yy_rule42), (3, 1), (0,
-1)]), (61, [(1, 2), (1, 1), (3, 1), (1, 1), (3, 1), (2, 1, yy_rule_start), (2,
-1, yy_rule42), (0, 2), (1, 1), (0, 1), (1, 1), (0, 1), (2, 1, yy_rule_start), (
-2, 1, yy_rule42), (3, 1), (0, 2)]), (62, [(1, 2), (1, 1), (3, 1), (1, 1), (3, 1
+yy_group_end_element), (2, 1, yy_rule_start), (2, 1, yy_rule39), (3, 1), (0, 3)
+]), (0, [(1, 3), (0, 1), (2, 1, yy_group_end_element), (2, 1, yy_rule_start), (
+2, 1, yy_rule40), (0, 3), (2, 1, yy_group_end_element), (2, 1, yy_rule_start),
+(2, 1, yy_rule40), (3, 1), (0, 2)]), (0, [(1, 3), (0, 2), (2, 1,
+yy_group_end_element), (2, 1, yy_rule_start), (2, 1, yy_rule41), (0, 3), (2, 1,
+yy_group_end_element), (2, 1, yy_rule_start), (2, 1, yy_rule41), (3, 1), (0, 1)
+]), (62, [(1, 2), (1, 1), (3, 1), (1, 1), (3, 1), (2, 1, yy_rule_start), (2, 1,
+yy_rule44), (0, 2), (1, 1), (0, 1), (1, 1), (0, 1), (2, 1, yy_rule_start), (2,
+1, yy_rule44), (3, 1), (0, 2)]), (0, [(1, 2), (0, 1), (2, 1, yy_rule_start), (
+2, 1, yy_rule44), (0, 2), (2, 1, yy_rule_start), (2, 1, yy_rule44), (3, 1), (0,
+1)]), (63, [(1, 2), (1, 1), (3, 1), (1, 1), (3, 1), (2, 1, yy_rule_start), (2,
+1, yy_rule44), (0, 2), (1, 1), (0, 1), (1, 1), (0, 1), (2, 1, yy_rule_start), (
+2, 1, yy_rule44), (3, 1), (0, 2)]), (64, [(1, 2), (1, 1), (3, 1), (1, 1), (3, 1
 ), (2, 1, yy_rule_start), (2, 1, yy_rule1), (0, 2), (1, 1), (0, 1), (1, 1), (0,
 1), (2, 1, yy_rule_start), (2, 1, yy_rule1), (3, 1), (0, 2)]), (0, [(1, 2), (0,
 1), (2, 1, yy_rule_start), (2, 1, yy_rule1), (0, 2), (2, 1, yy_rule_start), (2,
 1, yy_rule1), (3, 1), (0, 1)]), (0, [(1, 2), (0, 1), (2, 1, yy_rule_start), (2,
 1, yy_rule0), (0, 2), (2, 1, yy_rule_start), (2, 1, yy_rule0), (3, 1), (0, 1)]
-), (64, [(1, 2), (1, 1), (3, 1), (1, 1), (3, 1), (2, 1, yy_rule_start), (2, 1,
+), (66, [(1, 2), (1, 1), (3, 1), (1, 1), (3, 1), (2, 1, yy_rule_start), (2, 1,
 yy_rule1), (0, 2), (1, 1), (0, 1), (1, 1), (0, 1), (2, 1, yy_rule_start), (2,
-1, yy_rule1), (3, 1), (0, 2)]), (66, [(1, 4), (1, 1), (3, 1), (1, 1), (3, 1), (
+1, yy_rule1), (3, 1), (0, 2)]), (68, [(1, 4), (1, 1), (3, 1), (1, 1), (3, 1), (
 2, 1, yy_rule_start), (2, 1, yy_rule4), (0, 2), (1, 1), (3, 1), (1, 1), (3, 1),
 (2, 1, yy_rule_start), (2, 1, yy_rule5), (0, 2), (1, 1), (0, 1), (1, 1), (0, 1
 ), (2, 1, yy_rule_start), (2, 1, yy_rule4), (3, 1), (0, 1), (1, 1), (0, 1), (1,
 1), (0, 1), (2, 1, yy_rule_start), (2, 1, yy_rule5), (0, 3)]), (0, [(1, 4), (0,
 1), (2, 1, yy_rule_start), (2, 1, yy_rule4), (0, 2), (2, 1, yy_rule_start), (2,
 1, yy_rule5), (0, 2), (2, 1, yy_rule_start), (2, 1, yy_rule4), (3, 1), (0, 1),
-(2, 1, yy_rule_start), (2, 1, yy_rule5), (0, 2)]), (67, [(1, 4), (1, 1), (3, 1
+(2, 1, yy_rule_start), (2, 1, yy_rule5), (0, 2)]), (69, [(1, 4), (1, 1), (3, 1
 ), (1, 1), (3, 1), (2, 1, yy_rule_start), (2, 1, yy_rule4), (0, 2), (1, 1), (3,
 1), (1, 1), (3, 1), (2, 1, yy_rule_start), (2, 1, yy_rule5), (0, 2), (1, 1), (
 0, 1), (1, 1), (0, 1), (2, 1, yy_rule_start), (2, 1, yy_rule4), (3, 1), (0, 1),
 (1, 1), (0, 1), (1, 1), (0, 1), (2, 1, yy_rule_start), (2, 1, yy_rule5), (0, 3)
-]), (68, [(1, 2), (1, 1), (3, 1), (2, 1, yy_group_end), (2, 1,
-yy_group_end_element), (2, 1, yy_rule_start), (2, 1, yy_rule27), (0, 1), (1, 1
+]), (70, [(1, 2), (1, 1), (3, 1), (2, 1, yy_group_end), (2, 1,
+yy_group_end_element), (2, 1, yy_rule_start), (2, 1, yy_rule29), (0, 1), (1, 1
 ), (3, 1), (2, 1, yy_group_end), (2, 1, yy_group_end_element), (2, 1,
-yy_rule_start), (2, 1, yy_rule29), (0, 1), (1, 1), (0, 1), (2, 1, yy_group_end
-), (2, 1, yy_group_end_element), (2, 1, yy_rule_start), (2, 1, yy_rule27), (3,
+yy_rule_start), (2, 1, yy_rule31), (0, 1), (1, 1), (0, 1), (2, 1, yy_group_end
+), (2, 1, yy_group_end_element), (2, 1, yy_rule_start), (2, 1, yy_rule29), (3,
 1), (1, 1), (0, 1), (2, 1, yy_group_end), (2, 1, yy_group_end_element), (2, 1,
-yy_rule_start), (2, 1, yy_rule29), (0, 2)]), (29, [(1, 2), (0, 1), (1, 1), (3,
+yy_rule_start), (2, 1, yy_rule31), (0, 2)]), (29, [(1, 2), (0, 1), (1, 1), (3,
 1), (2, 1, yy_group_end), (2, 1, yy_group_end_element), (2, 1, yy_rule_start),
-(2, 1, yy_rule29), (0, 2), (1, 1), (0, 1), (2, 1, yy_group_end), (2, 1,
-yy_group_end_element), (2, 1, yy_rule_start), (2, 1, yy_rule29), (3, 1), (0, 1)
-]), (93, [(1, 1), (1, 1), (3, 1), (2, 1, yy_group_end), (2, 1,
-yy_group_end_element), (2, 1, yy_rule_start), (2, 1, yy_rule28), (0, 1), (1, 1
+(2, 1, yy_rule31), (0, 2), (1, 1), (0, 1), (2, 1, yy_group_end), (2, 1,
+yy_group_end_element), (2, 1, yy_rule_start), (2, 1, yy_rule31), (3, 1), (0, 1)
+]), (97, [(1, 1), (1, 1), (3, 1), (2, 1, yy_group_end), (2, 1,
+yy_group_end_element), (2, 1, yy_rule_start), (2, 1, yy_rule30), (0, 1), (1, 1
 ), (0, 1), (2, 1, yy_group_end), (2, 1, yy_group_end_element), (2, 1,
-yy_rule_start), (2, 1, yy_rule28), (3, 1), (0, 1)]), (94, [(1, 2), (3, 1), (1,
+yy_rule_start), (2, 1, yy_rule30), (3, 1), (0, 1)]), (98, [(1, 2), (3, 1), (1,
 1), (3, 1), (2, 1, yy_group_end_element), (2, 1, yy_rule_start), (2, 1,
-yy_rule26), (0, 2), (1, 1), (0, 1), (2, 1, yy_group_end_element), (2, 1,
-yy_rule_start), (2, 1, yy_rule26), (3, 1), (0, 1)]), (95, [(1, 2), (3, 1), (1,
+yy_rule28), (0, 2), (1, 1), (0, 1), (2, 1, yy_group_end_element), (2, 1,
+yy_rule_start), (2, 1, yy_rule28), (3, 1), (0, 1)]), (99, [(1, 2), (3, 1), (1,
 1), (3, 1), (2, 1, yy_group_end_element), (2, 1, yy_rule_start), (2, 1,
-yy_rule26), (0, 2), (1, 1), (0, 1), (2, 1, yy_group_end_element), (2, 1,
-yy_rule_start), (2, 1, yy_rule26), (3, 1), (0, 1)]), (96, [(1, 2), (3, 1), (1,
+yy_rule28), (0, 2), (1, 1), (0, 1), (2, 1, yy_group_end_element), (2, 1,
+yy_rule_start), (2, 1, yy_rule28), (3, 1), (0, 1)]), (100, [(1, 2), (3, 1), (1,
 1), (3, 1), (2, 1, yy_group_end_element), (2, 1, yy_rule_start), (2, 1,
-yy_rule26), (0, 2), (1, 1), (0, 1), (2, 1, yy_group_end_element), (2, 1,
-yy_rule_start), (2, 1, yy_rule26), (3, 1), (0, 1)]), (97, [(1, 2), (3, 1), (1,
+yy_rule28), (0, 2), (1, 1), (0, 1), (2, 1, yy_group_end_element), (2, 1,
+yy_rule_start), (2, 1, yy_rule28), (3, 1), (0, 1)]), (101, [(1, 2), (3, 1), (1,
+1), (3, 1), (2, 1, yy_group_end_element), (2, 1, yy_rule_start), (2, 1,
+yy_rule28), (0, 2), (1, 1), (0, 1), (2, 1, yy_group_end_element), (2, 1,
+yy_rule_start), (2, 1, yy_rule28), (3, 1), (0, 1)]), (102, [(1, 2), (3, 1), (1,
 1), (3, 1), (2, 1, yy_group_end_element), (2, 1, yy_rule_start), (2, 1,
-yy_rule26), (0, 2), (1, 1), (0, 1), (2, 1, yy_group_end_element), (2, 1,
-yy_rule_start), (2, 1, yy_rule26), (3, 1), (0, 1)]), (98, [(1, 2), (3, 1), (1,
+yy_rule28), (0, 2), (1, 1), (0, 1), (2, 1, yy_group_end_element), (2, 1,
+yy_rule_start), (2, 1, yy_rule28), (3, 1), (0, 1)]), (103, [(1, 2), (3, 1), (1,
 1), (3, 1), (2, 1, yy_group_end_element), (2, 1, yy_rule_start), (2, 1,
-yy_rule26), (0, 2), (1, 1), (0, 1), (2, 1, yy_group_end_element), (2, 1,
-yy_rule_start), (2, 1, yy_rule26), (3, 1), (0, 1)]), (30, [(1, 2), (2, 1,
-yy_rule_start), (2, 1, yy_rule18), (0, 1), (1, 1), (3, 1), (2, 1,
-yy_group_end_element), (2, 1, yy_rule_start), (2, 1, yy_rule26), (0, 1), (2, 1,
-yy_rule_start), (2, 1, yy_rule18), (3, 1), (1, 1), (0, 1), (2, 1,
-yy_group_end_element), (2, 1, yy_rule_start), (2, 1, yy_rule26), (0, 2)]), (99,
-[(1, 2), (3, 1), (1, 1), (3, 1), (2, 1, yy_group_end_element), (2, 1,
-yy_rule_start), (2, 1, yy_rule26), (0, 2), (1, 1), (0, 1), (2, 1,
-yy_group_end_element), (2, 1, yy_rule_start), (2, 1, yy_rule26), (3, 1), (0, 1)
-]), (30, [(1, 2), (2, 1, yy_rule_start), (2, 1, yy_rule20), (0, 1), (1, 1), (3,
-1), (2, 1, yy_group_end_element), (2, 1, yy_rule_start), (2, 1, yy_rule26), (0,
-1), (2, 1, yy_rule_start), (2, 1, yy_rule20), (3, 1), (1, 1), (0, 1), (2, 1,
-yy_group_end_element), (2, 1, yy_rule_start), (2, 1, yy_rule26), (0, 2)]), (30,
-[(1, 2), (2, 1, yy_rule_start), (2, 1, yy_rule21), (0, 1), (1, 1), (3, 1), (2,
-1, yy_group_end_element), (2, 1, yy_rule_start), (2, 1, yy_rule26), (0, 1), (2,
-1, yy_rule_start), (2, 1, yy_rule21), (3, 1), (1, 1), (0, 1), (2, 1,
-yy_group_end_element), (2, 1, yy_rule_start), (2, 1, yy_rule26), (0, 2)]), (30,
-[(1, 2), (2, 1, yy_rule_start), (2, 1, yy_rule22), (0, 1), (1, 1), (3, 1), (2,
-1, yy_group_end_element), (2, 1, yy_rule_start), (2, 1, yy_rule26), (0, 1), (2,
-1, yy_rule_start), (2, 1, yy_rule22), (3, 1), (1, 1), (0, 1), (2, 1,
-yy_group_end_element), (2, 1, yy_rule_start), (2, 1, yy_rule26), (0, 2)]), (80,
+yy_rule28), (0, 2), (1, 1), (0, 1), (2, 1, yy_group_end_element), (2, 1,
+yy_rule_start), (2, 1, yy_rule28), (3, 1), (0, 1)]), (30, [(1, 2), (2, 1,
+yy_rule_start), (2, 1, yy_rule20), (0, 1), (1, 1), (3, 1), (2, 1,
+yy_group_end_element), (2, 1, yy_rule_start), (2, 1, yy_rule28), (0, 1), (2, 1,
+yy_rule_start), (2, 1, yy_rule20), (3, 1), (1, 1), (0, 1), (2, 1,
+yy_group_end_element), (2, 1, yy_rule_start), (2, 1, yy_rule28), (0, 2)]), (
+104, [(1, 2), (3, 1), (1, 1), (3, 1), (2, 1, yy_group_end_element), (2, 1,
+yy_rule_start), (2, 1, yy_rule28), (0, 2), (1, 1), (0, 1), (2, 1,
+yy_group_end_element), (2, 1, yy_rule_start), (2, 1, yy_rule28), (3, 1), (0, 1)
+]), (30, [(1, 2), (2, 1, yy_rule_start), (2, 1, yy_rule22), (0, 1), (1, 1), (3,
+1), (2, 1, yy_group_end_element), (2, 1, yy_rule_start), (2, 1, yy_rule28), (0,
+1), (2, 1, yy_rule_start), (2, 1, yy_rule22), (3, 1), (1, 1), (0, 1), (2, 1,
+yy_group_end_element), (2, 1, yy_rule_start), (2, 1, yy_rule28), (0, 2)]), (30,
+[(1, 2), (2, 1, yy_rule_start), (2, 1, yy_rule23), (0, 1), (1, 1), (3, 1), (2,
+1, yy_group_end_element), (2, 1, yy_rule_start), (2, 1, yy_rule28), (0, 1), (2,
+1, yy_rule_start), (2, 1, yy_rule23), (3, 1), (1, 1), (0, 1), (2, 1,
+yy_group_end_element), (2, 1, yy_rule_start), (2, 1, yy_rule28), (0, 2)]), (30,
+[(1, 2), (2, 1, yy_rule_start), (2, 1, yy_rule24), (0, 1), (1, 1), (3, 1), (2,
+1, yy_group_end_element), (2, 1, yy_rule_start), (2, 1, yy_rule28), (0, 1), (2,
+1, yy_rule_start), (2, 1, yy_rule24), (3, 1), (1, 1), (0, 1), (2, 1,
+yy_group_end_element), (2, 1, yy_rule_start), (2, 1, yy_rule28), (0, 2)]), (83,
 [(1, 2), (1, 1), (3, 1), (1, 1), (3, 1), (2, 1, yy_rule_start), (2, 1,
-yy_rule31), (0, 2), (1, 1), (0, 1), (1, 1), (0, 1), (2, 1, yy_rule_start), (2,
-1, yy_rule31), (3, 1), (0, 2)]), (0, [(1, 2), (0, 1), (2, 1, yy_rule_start), (
-2, 1, yy_rule31), (0, 2), (2, 1, yy_rule_start), (2, 1, yy_rule31), (3, 1), (0,
-1)]), (81, [(1, 2), (1, 1), (3, 1), (2, 1, yy_group_end), (2, 1,
-yy_group_end_element), (2, 1, yy_rule_start), (2, 1, yy_rule27), (0, 1), (1, 1
+yy_rule33), (0, 2), (1, 1), (0, 1), (1, 1), (0, 1), (2, 1, yy_rule_start), (2,
+1, yy_rule33), (3, 1), (0, 2)]), (0, [(1, 2), (0, 1), (2, 1, yy_rule_start), (
+2, 1, yy_rule33), (0, 2), (2, 1, yy_rule_start), (2, 1, yy_rule33), (3, 1), (0,
+1)]), (84, [(1, 2), (1, 1), (3, 1), (2, 1, yy_group_end), (2, 1,
+yy_group_end_element), (2, 1, yy_rule_start), (2, 1, yy_rule29), (0, 1), (1, 1
 ), (3, 1), (2, 1, yy_group_end), (2, 1, yy_group_end_element), (2, 1,
-yy_rule_start), (2, 1, yy_rule29), (0, 1), (1, 1), (0, 1), (2, 1, yy_group_end
-), (2, 1, yy_group_end_element), (2, 1, yy_rule_start), (2, 1, yy_rule27), (3,
+yy_rule_start), (2, 1, yy_rule31), (0, 1), (1, 1), (0, 1), (2, 1, yy_group_end
+), (2, 1, yy_group_end_element), (2, 1, yy_rule_start), (2, 1, yy_rule29), (3,
 1), (1, 1), (0, 1), (2, 1, yy_group_end), (2, 1, yy_group_end_element), (2, 1,
-yy_rule_start), (2, 1, yy_rule29), (0, 2)]), (45, [(1, 2), (0, 1), (1, 1), (3,
+yy_rule_start), (2, 1, yy_rule31), (0, 2)]), (46, [(1, 2), (0, 1), (1, 1), (3,
 1), (2, 1, yy_group_end), (2, 1, yy_group_end_element), (2, 1, yy_rule_start),
-(2, 1, yy_rule29), (0, 2), (1, 1), (0, 1), (2, 1, yy_group_end), (2, 1,
-yy_group_end_element), (2, 1, yy_rule_start), (2, 1, yy_rule29), (3, 1), (0, 1)
-]), (100, [(1, 1), (1, 1), (3, 1), (2, 1, yy_group_end), (2, 1,
-yy_group_end_element), (2, 1, yy_rule_start), (2, 1, yy_rule28), (0, 1), (1, 1
+(2, 1, yy_rule31), (0, 2), (1, 1), (0, 1), (2, 1, yy_group_end), (2, 1,
+yy_group_end_element), (2, 1, yy_rule_start), (2, 1, yy_rule31), (3, 1), (0, 1)
+]), (105, [(1, 1), (1, 1), (3, 1), (2, 1, yy_group_end), (2, 1,
+yy_group_end_element), (2, 1, yy_rule_start), (2, 1, yy_rule30), (0, 1), (1, 1
 ), (0, 1), (2, 1, yy_group_end), (2, 1, yy_group_end_element), (2, 1,
-yy_rule_start), (2, 1, yy_rule28), (3, 1), (0, 1)]), (101, [(1, 2), (3, 1), (1,
+yy_rule_start), (2, 1, yy_rule30), (3, 1), (0, 1)]), (106, [(1, 2), (3, 1), (1,
+1), (3, 1), (2, 1, yy_group_end_element), (2, 1, yy_rule_start), (2, 1,
+yy_rule28), (0, 2), (1, 1), (0, 1), (2, 1, yy_group_end_element), (2, 1,
+yy_rule_start), (2, 1, yy_rule28), (3, 1), (0, 1)]), (107, [(1, 2), (3, 1), (1,
 1), (3, 1), (2, 1, yy_group_end_element), (2, 1, yy_rule_start), (2, 1,
-yy_rule26), (0, 2), (1, 1), (0, 1), (2, 1, yy_group_end_element), (2, 1,
-yy_rule_start), (2, 1, yy_rule26), (3, 1), (0, 1)]), (102, [(1, 2), (3, 1), (1,
+yy_rule28), (0, 2), (1, 1), (0, 1), (2, 1, yy_group_end_element), (2, 1,
+yy_rule_start), (2, 1, yy_rule28), (3, 1), (0, 1)]), (108, [(1, 2), (3, 1), (1,
 1), (3, 1), (2, 1, yy_group_end_element), (2, 1, yy_rule_start), (2, 1,
-yy_rule26), (0, 2), (1, 1), (0, 1), (2, 1, yy_group_end_element), (2, 1,
-yy_rule_start), (2, 1, yy_rule26), (3, 1), (0, 1)]), (103, [(1, 2), (3, 1), (1,
+yy_rule28), (0, 2), (1, 1), (0, 1), (2, 1, yy_group_end_element), (2, 1,
+yy_rule_start), (2, 1, yy_rule28), (3, 1), (0, 1)]), (109, [(1, 2), (3, 1), (1,
 1), (3, 1), (2, 1, yy_group_end_element), (2, 1, yy_rule_start), (2, 1,
-yy_rule26), (0, 2), (1, 1), (0, 1), (2, 1, yy_group_end_element), (2, 1,
-yy_rule_start), (2, 1, yy_rule26), (3, 1), (0, 1)]), (104, [(1, 2), (3, 1), (1,
+yy_rule28), (0, 2), (1, 1), (0, 1), (2, 1, yy_group_end_element), (2, 1,
+yy_rule_start), (2, 1, yy_rule28), (3, 1), (0, 1)]), (110, [(1, 2), (3, 1), (1,
 1), (3, 1), (2, 1, yy_group_end_element), (2, 1, yy_rule_start), (2, 1,
-yy_rule26), (0, 2), (1, 1), (0, 1), (2, 1, yy_group_end_element), (2, 1,
-yy_rule_start), (2, 1, yy_rule26), (3, 1), (0, 1)]), (105, [(1, 2), (3, 1), (1,
+yy_rule28), (0, 2), (1, 1), (0, 1), (2, 1, yy_group_end_element), (2, 1,
+yy_rule_start), (2, 1, yy_rule28), (3, 1), (0, 1)]), (111, [(1, 2), (3, 1), (1,
 1), (3, 1), (2, 1, yy_group_end_element), (2, 1, yy_rule_start), (2, 1,
-yy_rule26), (0, 2), (1, 1), (0, 1), (2, 1, yy_group_end_element), (2, 1,
-yy_rule_start), (2, 1, yy_rule26), (3, 1), (0, 1)]), (46, [(1, 2), (2, 1,
-yy_rule_start), (2, 1, yy_rule18), (0, 1), (1, 1), (3, 1), (2, 1,
-yy_group_end_element), (2, 1, yy_rule_start), (2, 1, yy_rule26), (0, 1), (2, 1,
-yy_rule_start), (2, 1, yy_rule18), (3, 1), (1, 1), (0, 1), (2, 1,
-yy_group_end_element), (2, 1, yy_rule_start), (2, 1, yy_rule26), (0, 2)]), (
-106, [(1, 2), (3, 1), (1, 1), (3, 1), (2, 1, yy_group_end_element), (2, 1,
-yy_rule_start), (2, 1, yy_rule26), (0, 2), (1, 1), (0, 1), (2, 1,
-yy_group_end_element), (2, 1, yy_rule_start), (2, 1, yy_rule26), (3, 1), (0, 1)
-]), (46, [(1, 2), (2, 1, yy_rule_start), (2, 1, yy_rule20), (0, 1), (1, 1), (3,
-1), (2, 1, yy_group_end_element), (2, 1, yy_rule_start), (2, 1, yy_rule26), (0,
-1), (2, 1, yy_rule_start), (2, 1, yy_rule20), (3, 1), (1, 1), (0, 1), (2, 1,
-yy_group_end_element), (2, 1, yy_rule_start), (2, 1, yy_rule26), (0, 2)]), (46,
-[(1, 2), (2, 1, yy_rule_start), (2, 1, yy_rule21), (0, 1), (1, 1), (3, 1), (2,
-1, yy_group_end_element), (2, 1, yy_rule_start), (2, 1, yy_rule26), (0, 1), (2,
-1, yy_rule_start), (2, 1, yy_rule21), (3, 1), (1, 1), (0, 1), (2, 1,
-yy_group_end_element), (2, 1, yy_rule_start), (2, 1, yy_rule26), (0, 2)]), (46,
-[(1, 2), (2, 1, yy_rule_start), (2, 1, yy_rule22), (0, 1), (1, 1), (3, 1), (2,
-1, yy_group_end_element), (2, 1, yy_rule_start), (2, 1, yy_rule26), (0, 1), (2,
-1, yy_rule_start), (2, 1, yy_rule22), (3, 1), (1, 1), (0, 1), (2, 1,
-yy_group_end_element), (2, 1, yy_rule_start), (2, 1, yy_rule26), (0, 2)]), (
-107, [(1, 2), (3, 1), (1, 1), (3, 1), (2, 1, yy_group_end_element), (2, 1,
-yy_rule_start), (2, 1, yy_rule26), (0, 2), (1, 1), (0, 1), (2, 1,
-yy_group_end_element), (2, 1, yy_rule_start), (2, 1, yy_rule26), (3, 1), (0, 1)
+yy_rule28), (0, 2), (1, 1), (0, 1), (2, 1, yy_group_end_element), (2, 1,
+yy_rule_start), (2, 1, yy_rule28), (3, 1), (0, 1)]), (47, [(1, 2), (2, 1,
+yy_rule_start), (2, 1, yy_rule20), (0, 1), (1, 1), (3, 1), (2, 1,
+yy_group_end_element), (2, 1, yy_rule_start), (2, 1, yy_rule28), (0, 1), (2, 1,
+yy_rule_start), (2, 1, yy_rule20), (3, 1), (1, 1), (0, 1), (2, 1,
+yy_group_end_element), (2, 1, yy_rule_start), (2, 1, yy_rule28), (0, 2)]), (
+112, [(1, 2), (3, 1), (1, 1), (3, 1), (2, 1, yy_group_end_element), (2, 1,
+yy_rule_start), (2, 1, yy_rule28), (0, 2), (1, 1), (0, 1), (2, 1,
+yy_group_end_element), (2, 1, yy_rule_start), (2, 1, yy_rule28), (3, 1), (0, 1)
+]), (47, [(1, 2), (2, 1, yy_rule_start), (2, 1, yy_rule22), (0, 1), (1, 1), (3,
+1), (2, 1, yy_group_end_element), (2, 1, yy_rule_start), (2, 1, yy_rule28), (0,
+1), (2, 1, yy_rule_start), (2, 1, yy_rule22), (3, 1), (1, 1), (0, 1), (2, 1,
+yy_group_end_element), (2, 1, yy_rule_start), (2, 1, yy_rule28), (0, 2)]), (47,
+[(1, 2), (2, 1, yy_rule_start), (2, 1, yy_rule23), (0, 1), (1, 1), (3, 1), (2,
+1, yy_group_end_element), (2, 1, yy_rule_start), (2, 1, yy_rule28), (0, 1), (2,
+1, yy_rule_start), (2, 1, yy_rule23), (3, 1), (1, 1), (0, 1), (2, 1,
+yy_group_end_element), (2, 1, yy_rule_start), (2, 1, yy_rule28), (0, 2)]), (47,
+[(1, 2), (2, 1, yy_rule_start), (2, 1, yy_rule24), (0, 1), (1, 1), (3, 1), (2,
+1, yy_group_end_element), (2, 1, yy_rule_start), (2, 1, yy_rule28), (0, 1), (2,
+1, yy_rule_start), (2, 1, yy_rule24), (3, 1), (1, 1), (0, 1), (2, 1,
+yy_group_end_element), (2, 1, yy_rule_start), (2, 1, yy_rule28), (0, 2)]), (
+113, [(1, 2), (3, 1), (1, 1), (3, 1), (2, 1, yy_group_end_element), (2, 1,
+yy_rule_start), (2, 1, yy_rule28), (0, 2), (1, 1), (0, 1), (2, 1,
+yy_group_end_element), (2, 1, yy_rule_start), (2, 1, yy_rule28), (3, 1), (0, 1)
 ]), (30, [(1, 2), (2, 1, yy_group_end_element), (2, 1, yy_rule_start), (2, 1,
-yy_rule25), (0, 1), (1, 1), (3, 1), (2, 1, yy_group_end_element), (2, 1,
-yy_rule_start), (2, 1, yy_rule26), (0, 1), (2, 1, yy_group_end_element), (2, 1,
-yy_rule_start), (2, 1, yy_rule25), (3, 1), (1, 1), (0, 1), (2, 1,
-yy_group_end_element), (2, 1, yy_rule_start), (2, 1, yy_rule26), (0, 2)]), (30,
-[(1, 2), (2, 1, yy_group_end_element), (2, 1, yy_rule_start), (2, 1, yy_rule24
+yy_rule27), (0, 1), (1, 1), (3, 1), (2, 1, yy_group_end_element), (2, 1,
+yy_rule_start), (2, 1, yy_rule28), (0, 1), (2, 1, yy_group_end_element), (2, 1,
+yy_rule_start), (2, 1, yy_rule27), (3, 1), (1, 1), (0, 1), (2, 1,
+yy_group_end_element), (2, 1, yy_rule_start), (2, 1, yy_rule28), (0, 2)]), (30,
+[(1, 2), (2, 1, yy_group_end_element), (2, 1, yy_rule_start), (2, 1, yy_rule26
 ), (0, 1), (1, 1), (3, 1), (2, 1, yy_group_end_element), (2, 1, yy_rule_start),
-(2, 1, yy_rule26), (0, 1), (2, 1, yy_group_end_element), (2, 1, yy_rule_start),
-(2, 1, yy_rule24), (3, 1), (1, 1), (0, 1), (2, 1, yy_group_end_element), (2, 1,
-yy_rule_start), (2, 1, yy_rule26), (0, 2)]), (30, [(1, 2), (2, 1, yy_rule_start
-), (2, 1, yy_rule16), (0, 1), (1, 1), (3, 1), (2, 1, yy_group_end_element), (2,
-1, yy_rule_start), (2, 1, yy_rule26), (0, 1), (2, 1, yy_rule_start), (2, 1,
-yy_rule16), (3, 1), (1, 1), (0, 1), (2, 1, yy_group_end_element), (2, 1,
-yy_rule_start), (2, 1, yy_rule26), (0, 2)]), (108, [(1, 2), (3, 1), (1, 1), (3,
-1), (2, 1, yy_group_end_element), (2, 1, yy_rule_start), (2, 1, yy_rule26), (0,
+(2, 1, yy_rule28), (0, 1), (2, 1, yy_group_end_element), (2, 1, yy_rule_start),
+(2, 1, yy_rule26), (3, 1), (1, 1), (0, 1), (2, 1, yy_group_end_element), (2, 1,
+yy_rule_start), (2, 1, yy_rule28), (0, 2)]), (30, [(1, 2), (2, 1, yy_rule_start
+), (2, 1, yy_rule17), (0, 1), (1, 1), (3, 1), (2, 1, yy_group_end_element), (2,
+1, yy_rule_start), (2, 1, yy_rule28), (0, 1), (2, 1, yy_rule_start), (2, 1,
+yy_rule17), (3, 1), (1, 1), (0, 1), (2, 1, yy_group_end_element), (2, 1,
+yy_rule_start), (2, 1, yy_rule28), (0, 2)]), (114, [(1, 2), (3, 1), (1, 1), (3,
+1), (2, 1, yy_group_end_element), (2, 1, yy_rule_start), (2, 1, yy_rule28), (0,
 2), (1, 1), (0, 1), (2, 1, yy_group_end_element), (2, 1, yy_rule_start), (2, 1,
-yy_rule26), (3, 1), (0, 1)]), (30, [(1, 2), (2, 1, yy_rule_start), (2, 1,
+yy_rule28), (3, 1), (0, 1)]), (30, [(1, 2), (2, 1, yy_rule_start), (2, 1,
 yy_rule19), (0, 1), (1, 1), (3, 1), (2, 1, yy_group_end_element), (2, 1,
-yy_rule_start), (2, 1, yy_rule26), (0, 1), (2, 1, yy_rule_start), (2, 1,
+yy_rule_start), (2, 1, yy_rule28), (0, 1), (2, 1, yy_rule_start), (2, 1,
 yy_rule19), (3, 1), (1, 1), (0, 1), (2, 1, yy_group_end_element), (2, 1,
-yy_rule_start), (2, 1, yy_rule26), (0, 2)]), (109, [(1, 2), (3, 1), (1, 1), (3,
-1), (2, 1, yy_group_end_element), (2, 1, yy_rule_start), (2, 1, yy_rule26), (0,
+yy_rule_start), (2, 1, yy_rule28), (0, 2)]), (30, [(1, 2), (2, 1, yy_rule_start
+), (2, 1, yy_rule21), (0, 1), (1, 1), (3, 1), (2, 1, yy_group_end_element), (2,
+1, yy_rule_start), (2, 1, yy_rule28), (0, 1), (2, 1, yy_rule_start), (2, 1,
+yy_rule21), (3, 1), (1, 1), (0, 1), (2, 1, yy_group_end_element), (2, 1,
+yy_rule_start), (2, 1, yy_rule28), (0, 2)]), (115, [(1, 2), (3, 1), (1, 1), (3,
+1), (2, 1, yy_group_end_element), (2, 1, yy_rule_start), (2, 1, yy_rule28), (0,
 2), (1, 1), (0, 1), (2, 1, yy_group_end_element), (2, 1, yy_rule_start), (2, 1,
-yy_rule26), (3, 1), (0, 1)]), (46, [(1, 2), (2, 1, yy_group_end_element), (2,
-1, yy_rule_start), (2, 1, yy_rule25), (0, 1), (1, 1), (3, 1), (2, 1,
-yy_group_end_element), (2, 1, yy_rule_start), (2, 1, yy_rule26), (0, 1), (2, 1,
-yy_group_end_element), (2, 1, yy_rule_start), (2, 1, yy_rule25), (3, 1), (1, 1
+yy_rule28), (3, 1), (0, 1)]), (47, [(1, 2), (2, 1, yy_group_end_element), (2,
+1, yy_rule_start), (2, 1, yy_rule27), (0, 1), (1, 1), (3, 1), (2, 1,
+yy_group_end_element), (2, 1, yy_rule_start), (2, 1, yy_rule28), (0, 1), (2, 1,
+yy_group_end_element), (2, 1, yy_rule_start), (2, 1, yy_rule27), (3, 1), (1, 1
 ), (0, 1), (2, 1, yy_group_end_element), (2, 1, yy_rule_start), (2, 1,
-yy_rule26), (0, 2)]), (46, [(1, 2), (2, 1, yy_group_end_element), (2, 1,
-yy_rule_start), (2, 1, yy_rule24), (0, 1), (1, 1), (3, 1), (2, 1,
-yy_group_end_element), (2, 1, yy_rule_start), (2, 1, yy_rule26), (0, 1), (2, 1,
-yy_group_end_element), (2, 1, yy_rule_start), (2, 1, yy_rule24), (3, 1), (1, 1
+yy_rule28), (0, 2)]), (47, [(1, 2), (2, 1, yy_group_end_element), (2, 1,
+yy_rule_start), (2, 1, yy_rule26), (0, 1), (1, 1), (3, 1), (2, 1,
+yy_group_end_element), (2, 1, yy_rule_start), (2, 1, yy_rule28), (0, 1), (2, 1,
+yy_group_end_element), (2, 1, yy_rule_start), (2, 1, yy_rule26), (3, 1), (1, 1
 ), (0, 1), (2, 1, yy_group_end_element), (2, 1, yy_rule_start), (2, 1,
-yy_rule26), (0, 2)]), (46, [(1, 2), (2, 1, yy_rule_start), (2, 1, yy_rule16), (
+yy_rule28), (0, 2)]), (47, [(1, 2), (2, 1, yy_rule_start), (2, 1, yy_rule17), (
 0, 1), (1, 1), (3, 1), (2, 1, yy_group_end_element), (2, 1, yy_rule_start), (2,
-1, yy_rule26), (0, 1), (2, 1, yy_rule_start), (2, 1, yy_rule16), (3, 1), (1, 1
+1, yy_rule28), (0, 1), (2, 1, yy_rule_start), (2, 1, yy_rule17), (3, 1), (1, 1
 ), (0, 1), (2, 1, yy_group_end_element), (2, 1, yy_rule_start), (2, 1,
-yy_rule26), (0, 2)]), (110, [(1, 2), (3, 1), (1, 1), (3, 1), (2, 1,
-yy_group_end_element), (2, 1, yy_rule_start), (2, 1, yy_rule26), (0, 2), (1, 1
+yy_rule28), (0, 2)]), (116, [(1, 2), (3, 1), (1, 1), (3, 1), (2, 1,
+yy_group_end_element), (2, 1, yy_rule_start), (2, 1, yy_rule28), (0, 2), (1, 1
 ), (0, 1), (2, 1, yy_group_end_element), (2, 1, yy_rule_start), (2, 1,
-yy_rule26), (3, 1), (0, 1)]), (46, [(1, 2), (2, 1, yy_rule_start), (2, 1,
+yy_rule28), (3, 1), (0, 1)]), (47, [(1, 2), (2, 1, yy_rule_start), (2, 1,
 yy_rule19), (0, 1), (1, 1), (3, 1), (2, 1, yy_group_end_element), (2, 1,
-yy_rule_start), (2, 1, yy_rule26), (0, 1), (2, 1, yy_rule_start), (2, 1,
+yy_rule_start), (2, 1, yy_rule28), (0, 1), (2, 1, yy_rule_start), (2, 1,
 yy_rule19), (3, 1), (1, 1), (0, 1), (2, 1, yy_group_end_element), (2, 1,
-yy_rule_start), (2, 1, yy_rule26), (0, 2)]), (30, [(1, 2), (2, 1,
-yy_group_end_element), (2, 1, yy_rule_start), (2, 1, yy_rule23), (0, 1), (1, 1
+yy_rule_start), (2, 1, yy_rule28), (0, 2)]), (47, [(1, 2), (2, 1, yy_rule_start
+), (2, 1, yy_rule21), (0, 1), (1, 1), (3, 1), (2, 1, yy_group_end_element), (2,
+1, yy_rule_start), (2, 1, yy_rule28), (0, 1), (2, 1, yy_rule_start), (2, 1,
+yy_rule21), (3, 1), (1, 1), (0, 1), (2, 1, yy_group_end_element), (2, 1,
+yy_rule_start), (2, 1, yy_rule28), (0, 2)]), (30, [(1, 2), (2, 1,
+yy_group_end_element), (2, 1, yy_rule_start), (2, 1, yy_rule25), (0, 1), (1, 1
 ), (3, 1), (2, 1, yy_group_end_element), (2, 1, yy_rule_start), (2, 1,
-yy_rule26), (0, 1), (2, 1, yy_group_end_element), (2, 1, yy_rule_start), (2, 1,
-yy_rule23), (3, 1), (1, 1), (0, 1), (2, 1, yy_group_end_element), (2, 1,
-yy_rule_start), (2, 1, yy_rule26), (0, 2)]), (30, [(1, 2), (2, 1, yy_rule_start
-), (2, 1, yy_rule17), (0, 1), (1, 1), (3, 1), (2, 1, yy_group_end_element), (2,
-1, yy_rule_start), (2, 1, yy_rule26), (0, 1), (2, 1, yy_rule_start), (2, 1,
-yy_rule17), (3, 1), (1, 1), (0, 1), (2, 1, yy_group_end_element), (2, 1,
-yy_rule_start), (2, 1, yy_rule26), (0, 2)]), (46, [(1, 2), (2, 1,
-yy_group_end_element), (2, 1, yy_rule_start), (2, 1, yy_rule23), (0, 1), (1, 1
+yy_rule28), (0, 1), (2, 1, yy_group_end_element), (2, 1, yy_rule_start), (2, 1,
+yy_rule25), (3, 1), (1, 1), (0, 1), (2, 1, yy_group_end_element), (2, 1,
+yy_rule_start), (2, 1, yy_rule28), (0, 2)]), (30, [(1, 2), (2, 1, yy_rule_start
+), (2, 1, yy_rule18), (0, 1), (1, 1), (3, 1), (2, 1, yy_group_end_element), (2,
+1, yy_rule_start), (2, 1, yy_rule28), (0, 1), (2, 1, yy_rule_start), (2, 1,
+yy_rule18), (3, 1), (1, 1), (0, 1), (2, 1, yy_group_end_element), (2, 1,
+yy_rule_start), (2, 1, yy_rule28), (0, 2)]), (47, [(1, 2), (2, 1,
+yy_group_end_element), (2, 1, yy_rule_start), (2, 1, yy_rule25), (0, 1), (1, 1
 ), (3, 1), (2, 1, yy_group_end_element), (2, 1, yy_rule_start), (2, 1,
-yy_rule26), (0, 1), (2, 1, yy_group_end_element), (2, 1, yy_rule_start), (2, 1,
-yy_rule23), (3, 1), (1, 1), (0, 1), (2, 1, yy_group_end_element), (2, 1,
-yy_rule_start), (2, 1, yy_rule26), (0, 2)]), (46, [(1, 2), (2, 1, yy_rule_start
-), (2, 1, yy_rule17), (0, 1), (1, 1), (3, 1), (2, 1, yy_group_end_element), (2,
-1, yy_rule_start), (2, 1, yy_rule26), (0, 1), (2, 1, yy_rule_start), (2, 1,
-yy_rule17), (3, 1), (1, 1), (0, 1), (2, 1, yy_group_end_element), (2, 1,
-yy_rule_start), (2, 1, yy_rule26), (0, 2)])]
+yy_rule28), (0, 1), (2, 1, yy_group_end_element), (2, 1, yy_rule_start), (2, 1,
+yy_rule25), (3, 1), (1, 1), (0, 1), (2, 1, yy_group_end_element), (2, 1,
+yy_rule_start), (2, 1, yy_rule28), (0, 2)]), (47, [(1, 2), (2, 1, yy_rule_start
+), (2, 1, yy_rule18), (0, 1), (1, 1), (3, 1), (2, 1, yy_group_end_element), (2,
+1, yy_rule_start), (2, 1, yy_rule28), (0, 1), (2, 1, yy_rule_start), (2, 1,
+yy_rule18), (3, 1), (1, 1), (0, 1), (2, 1, yy_group_end_element), (2, 1,
+yy_rule_start), (2, 1, yy_rule28), (0, 2)])]
 yy_dfa_start_action = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
 def yy_eof_action0():
   yyterminate();
index dd4e051..f8c544f 100644 (file)
@@ -17,7 +17,7 @@
  */
 
 %{
-  import ast
+  import t_def
   import y_tab
 %}
 
@@ -50,6 +50,7 @@
 
 <SECTION2>{
   "."                          return ord('.')
+  ","                          return ord(',')
   "="                          return ord('=')
   ":"                          return ord(':')
   ";"                          return ord(';')
   "}"                          return ord('}')
   "bool"                       return y_tab.KEYWORD_BOOL
   "class"                      return y_tab.KEYWORD_CLASS
+  "dict"                       return y_tab.KEYWORD_DICT
   "int"                                return y_tab.KEYWORD_INT
   "list"                       return y_tab.KEYWORD_LIST
   "ref"                                return y_tab.KEYWORD_REF
   "set"                                return y_tab.KEYWORD_SET
   "str"                                return y_tab.KEYWORD_STR
   (?E{
-    ast.AST.LiteralBool,
+    t_def.AST.LiteralBool,
     value = False
   }"False")                    return y_tab.LITERAL_BOOL
   (?E{
-    ast.AST.LiteralBool,
+    t_def.AST.LiteralBool,
     value = True
   }"True")                     return y_tab.LITERAL_BOOL
   (?E{
-    ast.AST.LiteralRef
+    t_def.AST.LiteralRef
   }"None")                     return y_tab.LITERAL_REF
   (?E{
-    ast.AST.Identifier
+    t_def.AST.Identifier
   }[A-Za-z_][A-Za-z0-9_]*)     return y_tab.IDENTIFIER
   (?E{
-    ast.AST.LiteralInt,
+    t_def.AST.LiteralInt,
     sign = yy_groups[2],
     base = 8,
     digits = yy_groups[3]
   }(-?)0([0-7]+))              return y_tab.LITERAL_INT
   (?E{
-    ast.AST.LiteralInt,
+    t_def.AST.LiteralInt,
     sign = yy_groups[2],
     base = 16,
     digits = yy_groups[3]
   }(-?)0x([0-9A-Fa-f]+))       return y_tab.LITERAL_INT
   (?E{
-    ast.AST.LiteralInt,
+    t_def.AST.LiteralInt,
     sign = yy_groups[2],
     base = 10,
     digits = yy_groups[3]
 }
 
 <SINGLE_QUOTED>{
-  (?E{ast.AST.Text.Escape, value = ord('\'')}"\\'")
-  (?E{ast.AST.Text.Escape, value = ord('\\')}"\\\\")
-  (?E{ast.AST.Text.Escape, value = ord('\n')}"\\n")
+  (?E{t_def.AST.Text.Escape, value = ord('\'')}"\\'")
+  (?E{t_def.AST.Text.Escape, value = ord('\\')}"\\\\")
+  (?E{t_def.AST.Text.Escape, value = ord('\n')}"\\n")
   "'" {
     BEGIN(SECTION2)
     return ord('\'')
index e00eeaf..f77a553 100755 (executable)
@@ -16,7 +16,7 @@
 # this program; if not, write to the Free Software Foundation, Inc., 51
 # Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
 
-import ast
+import t_def
 import element
 import generate_c
 import generate_py
@@ -60,19 +60,19 @@ in_file = args[0]
 
 with open(in_file) as fin:
   if in_file[-4:] == '.xml':
-    _ast = element.deserialize(fin, ast.factory)
+    ast = element.deserialize(fin, t_def.factory)
   else:
     import lex_yy
     import y_tab
     lex_yy.yyin = fin
-    _ast = y_tab.yyparse(ast.AST)
-#element.serialize(_ast, 'a.xml', 'utf-8')
-#_ast = element.deserialize('a.xml', ast.factory, 'utf-8')
-#_ast.post_process()
-#element.serialize(_ast, 'b.xml', 'utf-8')
-#_ast = element.deserialize('b.xml', ast.factory, 'utf-8')
+    ast = y_tab.yyparse(t_def.AST)
+#element.serialize(ast, 'a.xml', 'utf-8')
+#ast = element.deserialize('a.xml', t_def.factory, 'utf-8')
+ast.post_process()
+#element.serialize(ast, 'b.xml', 'utf-8')
+#ast = element.deserialize('b.xml', t_def.factory, 'utf-8')
 (generate_py.generate_py if python else generate_c.generate_c)(
-  _ast,
+  ast,
   home_dir,
   skel_file,
   out_file
index 2c24fe5..9878e22 100644 (file)
  */
 
 %{
-  import ast
+  import t_def
 %}
 
 %token CODEBLOCK_START CODEBLOCK_END SECTION2_START SECTION3_START
-%token KEYWORD_BOOL KEYWORD_CLASS KEYWORD_INT KEYWORD_LIST KEYWORD_REF
-%token KEYWORD_SET KEYWORD_STR IDENTIFIER LITERAL_BOOL LITERAL_INT LITERAL_REF
+%token KEYWORD_BOOL KEYWORD_CLASS KEYWORD_DICT KEYWORD_INT KEYWORD_LIST
+%token KEYWORD_REF KEYWORD_SET KEYWORD_STR IDENTIFIER LITERAL_BOOL LITERAL_DICT
+%token LITERAL_INT LITERAL_REF
 
 %start pitree
 
 %%
 
 pitree
-  : %space (?E{ast.AST.Section1}section1) SECTION2_START %space (?E{ast.AST.Section2}section2) section3_opt
+  : %space (?E{t_def.AST.Section1}section1) SECTION2_START %space (?E{t_def.AST.Section2}section2) section3_opt
 
 section1
   :
-  | section1 (?E{ast.AST.Section1.CodeBlock}CODEBLOCK_START (?E{ast.AST.Text}%space) CODEBLOCK_END)
+  | section1 (?E{t_def.AST.Section1.CodeBlock}CODEBLOCK_START (?E{t_def.AST.Text}%space) CODEBLOCK_END)
   ;
 
 section2
   :
-  | section2 %space (?E{ast.AST.Section2.ClassDef}KEYWORD_CLASS IDENTIFIER base_class_opt class_body_opt ';')
-  | section2 %space (?E{ast.AST.Section2.FieldDef}type IDENTIFIER default_value_opt ';')
+  | section2 %space (?E{t_def.AST.Section2.ClassDef}KEYWORD_CLASS IDENTIFIER base_class_opt class_body_opt ';')
+  | section2 %space (?E{t_def.AST.Section2.FieldDef}type IDENTIFIER default_value_opt ';')
   ;
 
 base_class_opt
-  : %space (?E{ast.AST.BaseClass})
-  | %space (?E{ast.AST.BaseClass}':' %space (?E{ast.AST.ClassName}class_name) )
+  : %space (?E{t_def.AST.BaseClass})
+  | %space (?E{t_def.AST.BaseClass}':' %space (?E{t_def.AST.ClassName}class_name) )
   ;
 
 class_name
@@ -53,31 +54,33 @@ class_name
   ;
 
 class_body_opt
-  : %space (?E{ast.AST.ClassBody})
-  | %space (?E{ast.AST.ClassBody}'{' section2 '}')
+  : %space (?E{t_def.AST.Section2.ClassBody})
+  | %space (?E{t_def.AST.Section2.ClassBody}'{' section2 '}')
   ;
 
 type
-  : %space (?E{ast.AST.TypeBool}KEYWORD_BOOL)
-  | %space (?E{ast.AST.TypeInt}KEYWORD_INT)
-  | %space (?E{ast.AST.TypeList}KEYWORD_LIST '(' type ')')
-  | %space (?E{ast.AST.TypeRef}KEYWORD_REF)
-  | %space (?E{ast.AST.TypeSet}KEYWORD_SET '(' type ')')
-  | %space (?E{ast.AST.TypeInt}KEYWORD_STR)
+  : %space (?E{t_def.AST.TypeBool}KEYWORD_BOOL)
+  | %space (?E{t_def.AST.TypeDict}KEYWORD_DICT '(' type ',' type ')')
+  | %space (?E{t_def.AST.TypeInt}KEYWORD_INT)
+  | %space (?E{t_def.AST.TypeList}KEYWORD_LIST '(' type ')')
+  | %space (?E{t_def.AST.TypeRef}KEYWORD_REF)
+  | %space (?E{t_def.AST.TypeSet}KEYWORD_SET '(' type ')')
+  | %space (?E{t_def.AST.TypeStr}KEYWORD_STR)
   ;
  
 default_value_opt
-  : (?E{ast.AST.DefaultValue})
-  | (?E{ast.AST.DefaultValue}'=' expression)
+  : (?E{t_def.AST.DefaultValue})
+  | (?E{t_def.AST.DefaultValue}'=' expression)
   ;
 
 expression
   : LITERAL_BOOL
+  | %space (?E{t_def.AST.LiteralDict}'{' dict_initializer_list_opt '}')
   | LITERAL_INT
-  | %space (?E{ast.AST.LiteralList}'[' expression_list_opt ']')
+  | %space (?E{t_def.AST.LiteralList}'[' expression_list_opt ']')
   | LITERAL_REF
-  | %space (?E{ast.AST.LiteralSet}KEYWORD_SET '(' set_initializer_opt ')')
-  | %space (?E{ast.AST.LiteralStr}'\'' (?E{ast.AST.Text}%space) '\'')
+  | %space (?E{t_def.AST.LiteralSet}KEYWORD_SET '(' set_initializer_opt ')')
+  | %space (?E{t_def.AST.LiteralStr}'\'' (?E{t_def.AST.Text}%space) '\'')
   ;
 
 expression_list_opt
@@ -91,6 +94,21 @@ expression_list
   | expression_list ',' expression
   ;
 
+dict_initializer_list_opt
+  :
+  | dict_initializer_list
+  | dict_initializer_list ','
+  ;
+
+dict_initializer_list
+  : dict_initializer
+  | dict_initializer_list ',' dict_initializer
+  ;
+
+dict_initializer
+  : (?E{t_def.AST.DictInitializer}expression ':' expression)
+  ;
+
 set_initializer_opt
   :
   | '[' expression_list_opt ']'
@@ -98,5 +116,5 @@ set_initializer_opt
 
 section3_opt
   :
-  | SECTION3_START (?E{ast.AST.Text}%space)
+  | SECTION3_START (?E{t_def.AST.Text}%space)
   ;
diff --git a/bootstrap_pitree/skel/element.py b/bootstrap_pitree/skel/element.py
new file mode 100644 (file)
index 0000000..b1eb364
--- /dev/null
@@ -0,0 +1,143 @@
+# Copyright (C) 2019 Nick Downing <nick@ndcode.org>
+# SPDX-License-Identifier: GPL-2.0-only
+#
+# This program is free software; you can redistribute it and/or modify it under
+# the terms of the GNU General Public License as published by the Free Software
+# Foundation; version 2.
+#
+# This program is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+# details.
+#
+# You should have received a copy of the GNU General Public License along with
+# this program; if not, write to the Free Software Foundation, Inc., 51
+# Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+
+import xml.etree.ElementTree
+
+class Element:
+  tag = 'Element'
+  def __init__(self, text = None, children = None):
+    self.visited = None # (element, ref, seen)
+    self.children = [] if children is None else children
+    assert isinstance(self.children, list)
+    self.text = (
+      ['' for i in range(len(self.children) + 1)]
+    if text is None else
+      text
+    )
+    assert isinstance(self.text, list)
+    assert len(self.text) == len(self.children) + 1
+  def serialize(self, ref_list):
+    element = self.visited[0]
+    if len(self.text[0]):
+      element.text = self.text[0]
+    for i in range(len(self.children)):
+      child = self.children[i]
+      if child.visited is None:
+        child_element = xml.etree.ElementTree.Element(child.tag)
+        child.visited = (child_element, -1, True)
+        child.serialize(ref_list)
+      else:
+        child_element, child_ref, child_seen = child.visited
+        assert not child_seen
+        child.visited = (child_element, child_ref, True)
+      if len(self.text[i + 1]):
+        child_element.tail = self.text[i + 1]
+      element.append(child_element)
+    return element
+  def deserialize(self, element, ref_list):
+    pass
+
+def serialize_ref(value, ref_list):
+  if value is None:
+    ref = -1
+  else:
+    if value.visited is None:
+      element = xml.etree.ElementTree.Element(value.tag)
+      ref = len(ref_list)
+      ref_list.append(value)
+      element.set('ref', str(ref))
+      value.visited = (element, ref, False)
+      value.serialize(ref_list)
+    else:
+      element, ref, seen = value.visited
+      if ref == -1:
+        ref = len(ref_list)
+        ref_list.append(value)
+        element.set('ref', str(ref))
+        value.visited = (element, ref, seen)
+  return ref
+
+def deserialize_ref(value, ref_list):
+  assert value is not None
+  return None if value == -1 else ref_list[value]
+
+def serialize(value, fout, encoding = 'unicode'):
+  ref_list = []
+  serialize_ref(value, ref_list)
+  todo = [i for i in ref_list if not i.visited[2]]
+  root = xml.etree.ElementTree.Element('root')
+  root[:] = [i.visited[0] for i in todo]
+  root.text = '\n  '
+  for i in range(len(root) - 1):
+    root[i].tail = '\n  '
+  root[-1].tail = '\n'
+  root.tail = '\n'
+  xml.etree.ElementTree.ElementTree(root).write(fout, encoding)
+  i = 0
+  while i < len(todo):
+    node = todo[i]
+    node.visited = None
+    todo.extend(node.children)
+    i += 1
+
+def deserialize(fin, factory = Element, encoding = 'unicode'):
+  root = xml.etree.ElementTree.parse(fin).getroot()
+  assert root.tag == 'root'
+  children = [factory(i.tag) for i in root]
+  todo = list(zip(root, children))
+  i = 0
+  ref_list = []
+  while i < len(todo):
+    element, node = todo[i]
+    ref = element.get('ref')
+    if ref is not None:
+      ref = int(ref)
+      if len(ref_list) < ref + 1:
+        ref_list.extend([None] * (ref + 1 - len(ref_list)))
+      ref_list[ref] = node
+    children = [factory(i.tag) for i in element]
+    node.children = children
+    node.text = (
+      ['' if element.text is None else element.text] +
+      ['' if j.tail is None else j.tail for j in element]
+    )
+    todo.extend(zip(element, children))
+    i += 1
+  for element, node in todo:
+    node.deserialize(element, ref_list)
+  return ref_list[0]
+
+def to_text(root):
+  assert len(root.text) == len(root.children) + 1
+  return ''.join(
+    [
+      j
+      for i in range(len(root.children))
+      for j in [root.text[i], to_text(root[i])]
+    ] +
+    [root.text[-1]]
+  )
+
+def concatenate(children, factory = Element, *args, **kwargs):
+  root = factory(*args, **kwargs)
+  for child in children:
+    assert len(root.text) == len(root.children) + 1
+    assert len(child.text) == len(child.children) + 1
+    root.text[-1] += child.text[0]
+    root.children.extend(child.children)
+    root.text.extend(child.text[1:])
+  assert len(root.text) == len(root.children) + 1
+  return root
index d365544..919f858 100644 (file)
@@ -24,6 +24,9 @@
 # files to be licensed under the GNU General Public License without this
 # special exception.
 
+import element
+import json
+
 # GENERATE SECTION1
 
 # GENERATE SECTION2
diff --git a/bootstrap_pitree/t_def.py b/bootstrap_pitree/t_def.py
new file mode 100644 (file)
index 0000000..87dcfaf
--- /dev/null
@@ -0,0 +1,1418 @@
+# Copyright (C) 2019 Nick Downing <nick@ndcode.org>
+# SPDX-License-Identifier: GPL-2.0-with-bison-exception
+#
+# This program is free software; you can redistribute it and/or modify it under
+# the terms of the GNU General Public License as published by the Free Software
+# Foundation; version 2.
+#
+# This program is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+# details.
+#
+# You should have received a copy of the GNU General Public License along with
+# this program; if not, write to the Free Software Foundation, Inc., 51
+# Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+#
+# As a special exception, you may create a larger work that contains part or
+# all of the pitree class definition skeleton and distribute that work under
+# terms of your choice, so long as that work isn't itself a class definition
+# generator using the skeleton or a modified version thereof as a class
+# definition skeleton. Alternatively, if you modify or redistribute the class
+# definition skeleton itself, you may (at your option) remove this special
+# exception, which will cause the skeleton and the resulting pitree output
+# files to be licensed under the GNU General Public License without this
+# special exception.
+
+# GENERATE SECTION1 BEGIN
+import element
+import json
+import sys
+# GENERATE END
+
+# GENERATE SECTION2 BEGIN
+class AST(element.Element):
+  class Expression(element.Element):
+    def __init__(
+      self,
+      tag = 'AST_Expression',
+      attrib = {},
+      text = '',
+      children = []
+    ):
+      element.Element.__init__(
+        self,
+        tag,
+        attrib,
+        text,
+        children
+      )
+    def copy(self, factory = None):
+      result = element.Element.copy(
+        self,
+        Expression if factory is None else factory
+      )
+      return result
+  class Type(element.Element):
+    def __init__(
+      self,
+      tag = 'AST_Type',
+      attrib = {},
+      text = '',
+      children = [],
+      is_json = False
+    ):
+      element.Element.__init__(
+        self,
+        tag,
+        attrib,
+        text,
+        children
+      )
+      self.is_json = is_json
+    def serialize(self, ref_list):
+      element.Element.serialize(self, ref_list)
+      self.set(
+        'is_json',
+        element.serialize_bool(self.is_json)
+      )
+    def deserialize(self, ref_list):
+      element.Element.deserialize(self, ref_list)
+      self.is_json = element.deserialize_bool(self.get('is_json', 'false'))
+    def copy(self, factory = None):
+      result = element.Element.copy(
+        self,
+        Type if factory is None else factory
+      )
+      result.is_json = self.is_json
+      return result
+  class BaseClass(element.Element):
+    def __init__(
+      self,
+      tag = 'AST_BaseClass',
+      attrib = {},
+      text = '',
+      children = []
+    ):
+      element.Element.__init__(
+        self,
+        tag,
+        attrib,
+        text,
+        children
+      )
+    def copy(self, factory = None):
+      result = element.Element.copy(
+        self,
+        BaseClass if factory is None else factory
+      )
+      return result
+  class ClassName(element.Element):
+    def __init__(
+      self,
+      tag = 'AST_ClassName',
+      attrib = {},
+      text = '',
+      children = []
+    ):
+      element.Element.__init__(
+        self,
+        tag,
+        attrib,
+        text,
+        children
+      )
+    def copy(self, factory = None):
+      result = element.Element.copy(
+        self,
+        ClassName if factory is None else factory
+      )
+      return result
+  class DefaultValue(element.Element):
+    def __init__(
+      self,
+      tag = 'AST_DefaultValue',
+      attrib = {},
+      text = '',
+      children = []
+    ):
+      element.Element.__init__(
+        self,
+        tag,
+        attrib,
+        text,
+        children
+      )
+    def copy(self, factory = None):
+      result = element.Element.copy(
+        self,
+        DefaultValue if factory is None else factory
+      )
+      return result
+  class DictInitializer(element.Element):
+    def __init__(
+      self,
+      tag = 'AST_DictInitializer',
+      attrib = {},
+      text = '',
+      children = []
+    ):
+      element.Element.__init__(
+        self,
+        tag,
+        attrib,
+        text,
+        children
+      )
+    def copy(self, factory = None):
+      result = element.Element.copy(
+        self,
+        DictInitializer if factory is None else factory
+      )
+      return result
+  class Identifier(element.Element):
+    def __init__(
+      self,
+      tag = 'AST_Identifier',
+      attrib = {},
+      text = '',
+      children = []
+    ):
+      element.Element.__init__(
+        self,
+        tag,
+        attrib,
+        text,
+        children
+      )
+    def copy(self, factory = None):
+      result = element.Element.copy(
+        self,
+        Identifier if factory is None else factory
+      )
+      return result
+  class LiteralBool(Expression):
+    def __init__(
+      self,
+      tag = 'AST_LiteralBool',
+      attrib = {},
+      text = '',
+      children = [],
+      value = False
+    ):
+      AST.Expression.__init__(
+        self,
+        tag,
+        attrib,
+        text,
+        children
+      )
+      self.value = value
+    def serialize(self, ref_list):
+      AST.Expression.serialize(self, ref_list)
+      self.set(
+        'value',
+        element.serialize_bool(self.value)
+      )
+    def deserialize(self, ref_list):
+      AST.Expression.deserialize(self, ref_list)
+      self.value = element.deserialize_bool(self.get('value', 'false'))
+    def copy(self, factory = None):
+      result = AST.Expression.copy(
+        self,
+        LiteralBool if factory is None else factory
+      )
+      result.value = self.value
+      return result
+  class LiteralDict(Expression):
+    def __init__(
+      self,
+      tag = 'AST_LiteralDict',
+      attrib = {},
+      text = '',
+      children = []
+    ):
+      AST.Expression.__init__(
+        self,
+        tag,
+        attrib,
+        text,
+        children
+      )
+    def copy(self, factory = None):
+      result = AST.Expression.copy(
+        self,
+        LiteralDict if factory is None else factory
+      )
+      return result
+  class LiteralInt(Expression):
+    def __init__(
+      self,
+      tag = 'AST_LiteralInt',
+      attrib = {},
+      text = '',
+      children = [],
+      sign = '',
+      base = -1,
+      digits = ''
+    ):
+      AST.Expression.__init__(
+        self,
+        tag,
+        attrib,
+        text,
+        children
+      )
+      self.sign = sign
+      self.base = base
+      self.digits = digits
+    def serialize(self, ref_list):
+      AST.Expression.serialize(self, ref_list)
+      self.set(
+        'sign',
+        element.serialize_str(self.sign)
+      )
+      self.set(
+        'base',
+        element.serialize_int(self.base)
+      )
+      self.set(
+        'digits',
+        element.serialize_str(self.digits)
+      )
+    def deserialize(self, ref_list):
+      AST.Expression.deserialize(self, ref_list)
+      self.sign = element.deserialize_str(self.get('sign', ''))
+      self.base = element.deserialize_int(self.get('base', '-1'))
+      self.digits = element.deserialize_str(self.get('digits', ''))
+    def copy(self, factory = None):
+      result = AST.Expression.copy(
+        self,
+        LiteralInt if factory is None else factory
+      )
+      result.sign = self.sign
+      result.base = self.base
+      result.digits = self.digits
+      return result
+  class LiteralList(Expression):
+    def __init__(
+      self,
+      tag = 'AST_LiteralList',
+      attrib = {},
+      text = '',
+      children = []
+    ):
+      AST.Expression.__init__(
+        self,
+        tag,
+        attrib,
+        text,
+        children
+      )
+    def copy(self, factory = None):
+      result = AST.Expression.copy(
+        self,
+        LiteralList if factory is None else factory
+      )
+      return result
+  class LiteralRef(Expression):
+    def __init__(
+      self,
+      tag = 'AST_LiteralRef',
+      attrib = {},
+      text = '',
+      children = []
+    ):
+      AST.Expression.__init__(
+        self,
+        tag,
+        attrib,
+        text,
+        children
+      )
+    def copy(self, factory = None):
+      result = AST.Expression.copy(
+        self,
+        LiteralRef if factory is None else factory
+      )
+      return result
+  class LiteralSet(Expression):
+    def __init__(
+      self,
+      tag = 'AST_LiteralSet',
+      attrib = {},
+      text = '',
+      children = []
+    ):
+      AST.Expression.__init__(
+        self,
+        tag,
+        attrib,
+        text,
+        children
+      )
+    def copy(self, factory = None):
+      result = AST.Expression.copy(
+        self,
+        LiteralSet if factory is None else factory
+      )
+      return result
+  class LiteralStr(Expression):
+    def __init__(
+      self,
+      tag = 'AST_LiteralStr',
+      attrib = {},
+      text = '',
+      children = []
+    ):
+      AST.Expression.__init__(
+        self,
+        tag,
+        attrib,
+        text,
+        children
+      )
+    def copy(self, factory = None):
+      result = AST.Expression.copy(
+        self,
+        LiteralStr if factory is None else factory
+      )
+      return result
+  class Section1(element.Element):
+    class CodeBlock(element.Element):
+      def __init__(
+        self,
+        tag = 'AST_Section1_CodeBlock',
+        attrib = {},
+        text = '',
+        children = []
+      ):
+        element.Element.__init__(
+          self,
+          tag,
+          attrib,
+          text,
+          children
+        )
+      def copy(self, factory = None):
+        result = element.Element.copy(
+          self,
+          CodeBlock if factory is None else factory
+        )
+        return result
+    def __init__(
+      self,
+      tag = 'AST_Section1',
+      attrib = {},
+      text = '',
+      children = []
+    ):
+      element.Element.__init__(
+        self,
+        tag,
+        attrib,
+        text,
+        children
+      )
+    def copy(self, factory = None):
+      result = element.Element.copy(
+        self,
+        Section1 if factory is None else factory
+      )
+      return result
+  class Section2(element.Element):
+    class ClassOrFieldDef(element.Element):
+      def __init__(
+        self,
+        tag = 'AST_Section2_ClassOrFieldDef',
+        attrib = {},
+        text = '',
+        children = []
+      ):
+        element.Element.__init__(
+          self,
+          tag,
+          attrib,
+          text,
+          children
+        )
+      def copy(self, factory = None):
+        result = element.Element.copy(
+          self,
+          ClassOrFieldDef if factory is None else factory
+        )
+        return result
+    class ClassBody(element.Element):
+      def __init__(
+        self,
+        tag = 'AST_Section2_ClassBody',
+        attrib = {},
+        text = '',
+        children = []
+      ):
+        element.Element.__init__(
+          self,
+          tag,
+          attrib,
+          text,
+          children
+        )
+      def copy(self, factory = None):
+        result = element.Element.copy(
+          self,
+          ClassBody if factory is None else factory
+        )
+        return result
+    class ClassDef(ClassOrFieldDef):
+      def __init__(
+        self,
+        tag = 'AST_Section2_ClassDef',
+        attrib = {},
+        text = '',
+        children = []
+      ):
+        AST.Section2.ClassOrFieldDef.__init__(
+          self,
+          tag,
+          attrib,
+          text,
+          children
+        )
+      def copy(self, factory = None):
+        result = AST.Section2.ClassOrFieldDef.copy(
+          self,
+          ClassDef if factory is None else factory
+        )
+        return result
+    class FieldDef(ClassOrFieldDef):
+      def __init__(
+        self,
+        tag = 'AST_Section2_FieldDef',
+        attrib = {},
+        text = '',
+        children = []
+      ):
+        AST.Section2.ClassOrFieldDef.__init__(
+          self,
+          tag,
+          attrib,
+          text,
+          children
+        )
+      def copy(self, factory = None):
+        result = AST.Section2.ClassOrFieldDef.copy(
+          self,
+          FieldDef if factory is None else factory
+        )
+        return result
+    def __init__(
+      self,
+      tag = 'AST_Section2',
+      attrib = {},
+      text = '',
+      children = []
+    ):
+      element.Element.__init__(
+        self,
+        tag,
+        attrib,
+        text,
+        children
+      )
+    def copy(self, factory = None):
+      result = element.Element.copy(
+        self,
+        Section2 if factory is None else factory
+      )
+      return result
+  class Text(element.Element):
+    class Escape(element.Element):
+      def __init__(
+        self,
+        tag = 'AST_Text_Escape',
+        attrib = {},
+        text = '',
+        children = [],
+        value = -1
+      ):
+        element.Element.__init__(
+          self,
+          tag,
+          attrib,
+          text,
+          children
+        )
+        self.value = value
+      def serialize(self, ref_list):
+        element.Element.serialize(self, ref_list)
+        self.set(
+          'value',
+          element.serialize_int(self.value)
+        )
+      def deserialize(self, ref_list):
+        element.Element.deserialize(self, ref_list)
+        self.value = element.deserialize_int(self.get('value', '-1'))
+      def copy(self, factory = None):
+        result = element.Element.copy(
+          self,
+          Escape if factory is None else factory
+        )
+        result.value = self.value
+        return result
+    def __init__(
+      self,
+      tag = 'AST_Text',
+      attrib = {},
+      text = '',
+      children = []
+    ):
+      element.Element.__init__(
+        self,
+        tag,
+        attrib,
+        text,
+        children
+      )
+    def copy(self, factory = None):
+      result = element.Element.copy(
+        self,
+        Text if factory is None else factory
+      )
+      return result
+  class TypeBool(Type):
+    def __init__(
+      self,
+      tag = 'AST_TypeBool',
+      attrib = {},
+      text = '',
+      children = [],
+      is_json = False
+    ):
+      AST.Type.__init__(
+        self,
+        tag,
+        attrib,
+        text,
+        children,
+        is_json
+      )
+    def copy(self, factory = None):
+      result = AST.Type.copy(
+        self,
+        TypeBool if factory is None else factory
+      )
+      return result
+  class TypeDict(Type):
+    def __init__(
+      self,
+      tag = 'AST_TypeDict',
+      attrib = {},
+      text = '',
+      children = [],
+      is_json = False
+    ):
+      AST.Type.__init__(
+        self,
+        tag,
+        attrib,
+        text,
+        children,
+        is_json
+      )
+    def copy(self, factory = None):
+      result = AST.Type.copy(
+        self,
+        TypeDict if factory is None else factory
+      )
+      return result
+  class TypeInt(Type):
+    def __init__(
+      self,
+      tag = 'AST_TypeInt',
+      attrib = {},
+      text = '',
+      children = [],
+      is_json = False
+    ):
+      AST.Type.__init__(
+        self,
+        tag,
+        attrib,
+        text,
+        children,
+        is_json
+      )
+    def copy(self, factory = None):
+      result = AST.Type.copy(
+        self,
+        TypeInt if factory is None else factory
+      )
+      return result
+  class TypeList(Type):
+    def __init__(
+      self,
+      tag = 'AST_TypeList',
+      attrib = {},
+      text = '',
+      children = [],
+      is_json = False
+    ):
+      AST.Type.__init__(
+        self,
+        tag,
+        attrib,
+        text,
+        children,
+        is_json
+      )
+    def copy(self, factory = None):
+      result = AST.Type.copy(
+        self,
+        TypeList if factory is None else factory
+      )
+      return result
+  class TypeRef(Type):
+    def __init__(
+      self,
+      tag = 'AST_TypeRef',
+      attrib = {},
+      text = '',
+      children = [],
+      is_json = False
+    ):
+      AST.Type.__init__(
+        self,
+        tag,
+        attrib,
+        text,
+        children,
+        is_json
+      )
+    def copy(self, factory = None):
+      result = AST.Type.copy(
+        self,
+        TypeRef if factory is None else factory
+      )
+      return result
+  class TypeSet(Type):
+    def __init__(
+      self,
+      tag = 'AST_TypeSet',
+      attrib = {},
+      text = '',
+      children = [],
+      is_json = False
+    ):
+      AST.Type.__init__(
+        self,
+        tag,
+        attrib,
+        text,
+        children,
+        is_json
+      )
+    def copy(self, factory = None):
+      result = AST.Type.copy(
+        self,
+        TypeSet if factory is None else factory
+      )
+      return result
+  class TypeStr(Type):
+    def __init__(
+      self,
+      tag = 'AST_TypeStr',
+      attrib = {},
+      text = '',
+      children = [],
+      is_json = False
+    ):
+      AST.Type.__init__(
+        self,
+        tag,
+        attrib,
+        text,
+        children,
+        is_json
+      )
+    def copy(self, factory = None):
+      result = AST.Type.copy(
+        self,
+        TypeStr if factory is None else factory
+      )
+      return result
+  def __init__(
+    self,
+    tag = 'AST',
+    attrib = {},
+    text = '',
+    children = []
+  ):
+    element.Element.__init__(
+      self,
+      tag,
+      attrib,
+      text,
+      children
+    )
+  def copy(self, factory = None):
+    result = element.Element.copy(
+      self,
+      AST if factory is None else factory
+    )
+    return result
+tag_to_class = {
+  'AST': AST,
+  'AST_Expression': AST.Expression,
+  'AST_Type': AST.Type,
+  'AST_BaseClass': AST.BaseClass,
+  'AST_ClassName': AST.ClassName,
+  'AST_DefaultValue': AST.DefaultValue,
+  'AST_DictInitializer': AST.DictInitializer,
+  'AST_Identifier': AST.Identifier,
+  'AST_LiteralBool': AST.LiteralBool,
+  'AST_LiteralDict': AST.LiteralDict,
+  'AST_LiteralInt': AST.LiteralInt,
+  'AST_LiteralList': AST.LiteralList,
+  'AST_LiteralRef': AST.LiteralRef,
+  'AST_LiteralSet': AST.LiteralSet,
+  'AST_LiteralStr': AST.LiteralStr,
+  'AST_Section1': AST.Section1,
+  'AST_Section1_CodeBlock': AST.Section1.CodeBlock,
+  'AST_Section2': AST.Section2,
+  'AST_Section2_ClassOrFieldDef': AST.Section2.ClassOrFieldDef,
+  'AST_Section2_ClassBody': AST.Section2.ClassBody,
+  'AST_Section2_ClassDef': AST.Section2.ClassDef,
+  'AST_Section2_FieldDef': AST.Section2.FieldDef,
+  'AST_Text': AST.Text,
+  'AST_Text_Escape': AST.Text.Escape,
+  'AST_TypeBool': AST.TypeBool,
+  'AST_TypeDict': AST.TypeDict,
+  'AST_TypeInt': AST.TypeInt,
+  'AST_TypeList': AST.TypeList,
+  'AST_TypeRef': AST.TypeRef,
+  'AST_TypeSet': AST.TypeSet,
+  'AST_TypeStr': AST.TypeStr
+}
+# GENERATE END
+
+def method(_class):
+  def decorator(func):
+    setattr(_class, func.__name__, func)
+    return func
+  return decorator
+
+# GENERATE SECTION3 BEGIN
+
+class Context:
+  def __init__(
+    self,
+    fout = sys.stdout,
+    indent = '',
+    stack = [],
+    classes = [],
+    base_classes = None,
+    fields = [],
+    field_name = ''
+  ):
+    self.fout = fout
+    self.indent = indent
+    self.stack = stack
+    self.classes = classes
+    self.base_classes = [{'element.Element': []}] if base_classes is None else base_classes # params
+    self.fields = fields
+    self.field_name = field_name
+
+def factory(tag, *args, **kwargs):
+  return tag_to_class[tag](*args, **kwargs)
+
+@method(AST.Section2.ClassOrFieldDef)
+def generate_class_or_field_def(self, context):
+  raise NotImplementedError
+@method(AST.Section2.ClassDef)
+def generate_class_or_field_def(self, context):
+  class_name = self[0].get_text()
+  fields_save = context.fields
+  if len(self[1]):
+    base_class = '.'.join([i.get_text() for i in self[1][0]])
+    for i in range(len(context.base_classes) - 1, -1, -1):
+      if base_class in context.base_classes[i]:
+        full_base_class = '.'.join(context.stack[:i] + [base_class])
+        context.fields = context.base_classes[i][base_class].copy()
+        break
+    else:
+      assert False
+  else:
+    base_class = 'element.Element'
+    full_base_class = 'element.Element'
+    context.fields = []
+  indent_save = context.indent
+  context.indent += '  '
+  context.stack.append(class_name)
+  context.classes.append('.'.join(context.stack))
+  context.base_classes.append({})
+  context.fout.write(
+    '''{0:s}class {1:s}({2:s}):
+{3:s}  tag = '{4:s}'
+'''.format(
+      indent_save,
+      class_name,
+      base_class,
+      indent_save,
+      '_'.join(context.stack)
+    )
+  )
+  n_base_fields = len(context.fields)
+  for i in self[2]:
+    i.generate_class_or_field_def(context)
+  if len(context.fields) > n_base_fields:
+    context.fout.write(
+      '''{0:s}def __init__(
+{1:s}  self,
+{2:s}  text = None,
+{3:s}  children = None{4:s}
+{5:s}):
+{6:s}  {7:s}.__init__(
+{8:s}    self,
+{9:s}    text,
+{10:s}    children{11:s}
+{12:s}  )
+{13:s}{14:s}def serialize(self, ref_list):
+{15:s}  _element = {16:s}.serialize(self, ref_list)
+'''.format(
+        context.indent,
+        context.indent,
+        context.indent,
+        context.indent,
+        ''.join(
+          [
+            ',\n{0:s}  {1:s}{2:s}'.format(
+              context.indent,
+              i[1].get_text(),
+              (
+                (
+                  ' = None'
+                if i[0].is_mutable() else
+                  ' = {0:s}'.format(i[2][0].generate_expression(i[0]))
+                )
+              if len(i[2]) else
+                ''
+              )
+            )
+            for i in context.fields
+          ]
+        ),
+        context.indent,
+        context.indent,
+        full_base_class,
+        context.indent,
+        context.indent,
+        context.indent,
+        ''.join(
+          [
+            ',\n{0:s}    {1:s}'.format(
+              context.indent,
+              i[1].get_text()
+            )
+            for i in context.fields[:n_base_fields]
+          ]
+        ),
+        context.indent,
+        ''.join(
+          [
+            '{0:s}  self.{1:s} = {2:s}\n'.format(
+              context.indent,
+              i[1].get_text(),
+              (
+                '{0:s} if {1:s} is None else {2:s}'.format(
+                  i[2][0].generate_expression(i[0]),
+                  i[1].get_text(),
+                  i[1].get_text()
+                )
+              if i[0].is_mutable() else
+                i[1].get_text()
+              )
+            )
+            for i in context.fields[n_base_fields:]
+          ]
+        ),
+        context.indent,
+        context.indent,
+        full_base_class
+      )
+    )
+    indent_save2 = context.indent
+    context.indent += '        '
+    for i in context.fields[n_base_fields:]:
+      context.field_name = i[1].get_text()
+      context.fout.write(
+        '''{0:s}  if self.{1:s} != {2:s}:
+{3:s}    _element.set(
+{4:s}      '{5:s}',
+{6:s}      json.dumps(
+{7:s}        {8:s}
+{9:s}      )
+{10:s}    )
+'''.format(
+          indent_save2,
+          context.field_name,
+          i[2][0].generate_expression(i[0]),
+          indent_save2,
+          indent_save2,
+          context.field_name,
+          indent_save2,
+          indent_save2,
+          i[0].generate_serialize(
+            context,
+            'self.{0:s}'.format(context.field_name)
+          ),
+          indent_save2,
+          indent_save2
+        )
+      if len(i[2]) else
+        '''{0:s}  _element.set(
+{1:s}    '{2:s}',
+{3:s}    json.dumps(
+{4:s}      {5:s}
+{6:s}    )
+{7:s}  )
+'''.format(
+          indent_save2,
+          indent_save2,
+          context.field_name,
+          indent_save2,
+          indent_save2,
+          i[0].generate_serialize(
+            context,
+            'self.{0:s}'.format(context.field_name)
+          ),
+          indent_save2,
+          indent_save2
+        )
+      )
+    context.indent = indent_save2
+    context.fout.write(
+      '''{0:s}  return _element
+{1:s}def deserialize(self, _element, ref_list):
+{2:s}  {3:s}.deserialize(self, _element, ref_list)
+'''.format(
+        context.indent,
+        context.indent,
+        context.indent,
+        full_base_class
+      )
+    )
+    #indent_save2 = context.indent
+    context.indent += '  '
+    for i in context.fields[n_base_fields:]:
+      context.field_name = i[1].get_text()
+      context.fout.write(
+        '''{0:s}  self.{1:s} = {2:s}
+'''.format(
+          indent_save2,
+          context.field_name,
+          i[0].generate_deserialize(
+            context,
+            'json.loads(_element.get(\'{0:s}\'{1:s}))'.format(
+              context.field_name,
+              (
+                ', \'{0:s}\''.format(
+                  json.dumps(
+                    i[2][0].generate_expression_json(i[0])
+                  ).replace('\\', '\\\\').replace('\'', '\\\'')
+                )
+              if len(i[2]) else
+                ''
+              )
+            )
+          )
+        )
+      )
+    context.indent = indent_save2
+  context.indent = indent_save
+  del context.stack[-1]
+  for temp_base_class, temp_fields in context.base_classes.pop().items():
+    context.base_classes[-1][
+      '{0:s}.{1:s}'.format(class_name, temp_base_class)
+    ] = temp_fields
+  context.base_classes[-1][class_name] = context.fields
+  context.fields = fields_save
+@method(AST.Section2.FieldDef)
+def generate_class_or_field_def(self, context):
+  context.fields.append(self)
+del generate_class_or_field_def
+
+@method(AST.Expression)
+def generate_expression(self, _type):
+  raise NotImplementedError
+@method(AST.LiteralBool)
+def generate_expression(self, _type):
+  assert isinstance(_type, AST.TypeBool)
+  return "True" if self.value else "False"
+@method(AST.LiteralDict)
+def generate_expression(self, _type):
+  assert isinstance(_type, AST.TypeDict)
+  return '{{{0:s}}}'.format(
+    ', '.join(
+      [
+        '{0:s}: {1:s}'.format(
+          i[0].generate_expression(_type[0]),
+          i[1].generate_expression(_type[1])
+        )
+        for i in self
+      ]
+    )
+  )
+@method(AST.LiteralInt)
+def generate_expression(self, _type):
+  assert isinstance(_type, AST.TypeInt)
+  return str(self.get_value())
+@method(AST.LiteralList)
+def generate_expression(self, _type):
+  assert isinstance(_type, AST.TypeList)
+  return '[{0:s}]'.format(
+    ', '.join(
+      [
+        i.generate_expression(_type[0])
+        for i in self
+      ]
+    )
+  )
+@method(AST.LiteralRef)
+def generate_expression(self, _type):
+  assert isinstance(_type, AST.TypeRef)
+  return 'None'
+@method(AST.LiteralSet)
+def generate_expression(self, _type):
+  assert isinstance(_type, AST.TypeSet)
+  return (
+    'set([{0:s}])'.format(
+      ', '.join(
+        [
+          i.generate_expression(_type[0])
+          for i in self
+        ]
+      )
+    )
+  if len(self) else
+    'set()'
+  )
+@method(AST.LiteralStr)
+def generate_expression(self, _type):
+  assert isinstance(_type, AST.TypeStr)
+  return "'{0:s}'".format(
+    self[0].get_text().replace('\\', '\\\\').replace('\'', '\\\'')
+  )
+del generate_expression
+
+@method(AST.Expression)
+def generate_expression_json(self, _type):
+  raiseNotImplementedError
+@method(AST.LiteralBool)
+def generate_expression_json(self, _type):
+  assert isinstance(_type, AST.TypeBool)
+  return self.value
+@method(AST.LiteralDict)
+def generate_expression_json(self, _type):
+  assert isinstance(_type, AST.TypeDict)
+  return (
+    {
+      i[0].generate_expression_json(_type[0]):
+      i[1].generate_expression_json(_type[1])
+      for i in self
+    }
+  if isinstance(_type[0], AST.TypeStr) else
+    [
+      [
+        i[0].generate_expression_json(_type[0]),
+        i[1].generate_expression_json(_type[1])
+      ]
+      for i in self
+    ]
+  )
+@method(AST.LiteralInt)
+def generate_expression_json(self, _type):
+  assert isinstance(_type, AST.TypeInt)
+  return self.get_value()
+@method(AST.LiteralList)
+def generate_expression_json(self, _type):
+  assert isinstance(_type, AST.TypeList)
+  return [
+    i.generate_expression_json(_type[0])
+    for i in self
+  ]
+@method(AST.LiteralRef)
+def generate_expression_json(self, _type):
+  assert isinstance(_type, AST.TypeRef)
+  return -1
+@method(AST.LiteralSet)
+def generate_expression_json(self, _type):
+  assert isinstance(_type, AST.TypeSet)
+  return [
+    i.generate_expression_json(_type[0])
+    for i in self
+  ]
+@method(AST.LiteralStr)
+def generate_expression_json(self, _type):
+  assert isinstance(_type, AST.TypeStr)
+  return self[0].get_text()
+del generate_expression_json
+
+@method(AST.Type)
+def generate_serialize(self, context, expr):
+  assert self.is_json
+  return expr
+@method(AST.TypeDict)
+def generate_serialize(self, context, expr):
+  if self.is_json:
+    result = expr
+  elif isinstance(self[0], AST.TypeStr):
+    context.indent += '  '
+    result = '''{{
+{0:s}  {1:s}:
+{2:s}  {3:s}
+{4:s}  for i in {5:s}
+{6:s}}}'''.format(
+      indent_save,
+      self[0].generate_serialize(context, 'i[0]'),
+      indent_save,
+      self[0].generate_serialize(context, 'i[1]'),
+      indent_save,
+      expr,
+      indent_save
+    )
+  else:
+    context.indent += '    '
+    result = '''[
+{0:s}  [
+{1:s}    {2:s},
+{3:s}    {4:s}
+{5:s}  ]
+{6:s}  for k, v in {7:s}.items()
+{8:s}}}'''.format(
+      indent_save,
+      indent_save,
+      self[0].generate_serialize(context, 'k'),
+      indent_save,
+      self[0].generate_serialize(context, 'v'),
+      indent_save,
+      indent_save,
+      expr,
+      indent_save
+    )
+  context.indent = indent_save
+  return result
+@method(AST.TypeList)
+def generate_serialize(self, context, expr):
+  if self.is_json:
+    return expr
+  indent_save = context.indent
+  context.indent += '  '
+  result = '''[
+{0:s}  {1:s}
+{2:s}  for i in {3:s}
+{4:s}]'''.format(
+    indent_save,
+    self[0].generate_serialize(context, 'i'),
+    indent_save,
+    expr,
+    indent_save
+  )
+  context.indent = indent_save
+  return result
+@method(AST.TypeRef)
+def generate_serialize(self, context, expr):
+  assert not self.is_json
+  return 'element.serialize_ref({0:s}, ref_list)'.format(expr)
+@method(AST.TypeSet)
+def generate_serialize(self, context, expr):
+  assert not self.is_json
+  indent_save = context.indent
+  context.indent += '  '
+  result = '''[
+{0:s}  {1:s}
+{2:s}  for i in {3:s}
+{4:s}]'''.format(
+    indent_save,
+    self[0].generate_serialize(context, 'i'),
+    indent_save,
+    expr,
+    indent_save
+  )
+  context.indent = indent_save
+  return result
+del generate_serialize
+
+@method(AST.Type)
+def generate_deserialize(self, context, expr):
+  assert self.is_json
+  return expr
+@method(AST.TypeDict)
+def generate_deserialize(self, context, expr):
+  indent_save = context.indent
+  context.indent += '  '
+  result = (
+    expr
+  if self.is_json else
+    '''{{
+{0:s}  {1:s}:
+{2:s}  {3:s}
+{4:s}  for k, v in {5:s}.items()
+{6:s}}}'''.format(
+      indent_save,
+      self[0].generate_deserialize(context, 'k'),
+      indent_save,
+      self[1].generate_deserialize(context, 'v'),
+      indent_save,
+      expr,
+      indent_save
+    )
+  if isinstance(self[0], AST.TypeStr) else
+    '''{{
+{0:s}  {1:s}:
+{2:s}  {3:s}
+{4:s}  for [k, v] in {5:s}
+{6:s}}}'''.format(
+      indent_save,
+      self[0].generate_deserialize(context, 'k'),
+      indent_save,
+      self[1].generate_deserialize(context, 'v'),
+      indent_save,
+      expr,
+      indent_save
+    )
+  )
+  context.indent = indent_save
+  return result
+@method(AST.TypeList)
+def generate_deserialize(self, context, expr):
+  indent_save = context.indent
+  context.indent += '  '
+  result = (
+    expr
+  if self.is_json else
+    '''[
+{0:s}  {1:s}
+{2:s}  for i in {3:s}
+{4:s}]'''.format(
+      indent_save,
+      self[0].generate_deserialize(context, 'i'),
+      indent_save,
+      expr,
+      indent_save
+    )
+  )
+  context.indent = indent_save
+  return result
+@method(AST.TypeRef)
+def generate_deserialize(self, context, expr):
+  assert not self.is_json
+  return 'element.deserialize_ref({0:s}, ref_list)'.format(expr)
+@method(AST.TypeSet)
+def generate_deserialize(self, context, expr):
+  indent_save = context.indent
+  context.indent += '    '
+  result = (
+    'set({0:s})'.format(expr)
+  if self[0].is_json else
+    '''set(
+{0:s}  [
+{1:s}    {2:s}
+{3:s}    for i in {4:s}
+{5:s}  ]
+{6:s})'''.format(
+      indent_save,
+      indent_save,
+      self[0].generate_deserialize(context, 'i'),
+      indent_save,
+      expr,
+      indent_save,
+      indent_save
+    )
+  )
+  context.indent = indent_save
+  return result
+del generate_deserialize
+
+@method(AST.Type)
+def is_mutable(self):
+  return True
+@method(AST.TypeInt)
+def is_mutable(self):
+  return False
+@method(AST.TypeBool)
+def is_mutable(self):
+  return False
+@method(AST.TypeStr)
+def is_mutable(self):
+  return False
+
+@method(AST.Identifier)
+def get_text(self):
+  return element.get_text(self, 0)
+@method(AST.Text)
+def get_text(self):
+  result = []
+  for i in range(len(self)):
+    result.extend(
+      [element.get_text(self, i), chr(self[i].value)]
+    )
+  result.append(element.get_text(self, len(self)))
+  return ''.join(result)
+del get_text
+
+@method(AST.LiteralInt)
+def get_value(self):
+  value = int(self.digits, self.base)
+  return -value if len(self.sign) else value
+del get_value
+
+@method(AST)
+def post_process(self):
+  self[1].post_process()
+@method(AST.Section2)
+def post_process(self):
+  for i in self:
+    i.post_process()
+@method(AST.Section2.ClassOrFieldDef)
+def post_process(self):
+  raise NotImplementedError
+@method(AST.Section2.ClassBody)
+def post_process(self):
+  for i in self:
+    i.post_process()
+@method(AST.Section2.ClassDef)
+def post_process(self):
+  self[2].post_process()
+@method(AST.Section2.FieldDef)
+def post_process(self):
+  self[0].post_process()
+@method(AST.Type)
+def post_process(self):
+  raise NotImplementedError
+@method(AST.TypeBool)
+def post_process(self):
+  self.is_json = True
+@method(AST.TypeDict)
+def post_process(self):
+  self[0].post_process()
+  self[1].post_process()
+  self.is_json = isinstance(self[0], AST.TypeString) and self[1].is_json
+@method(AST.TypeInt)
+def post_process(self):
+  self.is_json = True
+@method(AST.TypeList)
+def post_process(self):
+  self[0].post_process()
+  self.is_json = self[0].is_json
+@method(AST.TypeRef)
+def post_process(self):
+  self.is_json = False
+@method(AST.TypeSet)
+def post_process(self):
+  self[0].post_process()
+  self.is_json = False
+@method(AST.TypeStr)
+def post_process(self):
+  self.is_json = True
+del post_process
+# GENERATE END
index 2fb779c..2089c14 100644 (file)
@@ -43,7 +43,7 @@ class YYLTYPE:
     self.last_column = last_column
  
 # GENERATE SECTION1 BEGIN
-import ast
+import t_def
 # GENERATE END
 
 # GENERATE TOKENS BEGIN
@@ -53,15 +53,17 @@ SECTION2_START = 260
 SECTION3_START = 261
 KEYWORD_BOOL = 262
 KEYWORD_CLASS = 263
-KEYWORD_INT = 264
-KEYWORD_LIST = 265
-KEYWORD_REF = 266
-KEYWORD_SET = 267
-KEYWORD_STR = 268
-IDENTIFIER = 269
-LITERAL_BOOL = 270
-LITERAL_INT = 271
-LITERAL_REF = 272
+KEYWORD_DICT = 264
+KEYWORD_INT = 265
+KEYWORD_LIST = 266
+KEYWORD_REF = 267
+KEYWORD_SET = 268
+KEYWORD_STR = 269
+IDENTIFIER = 270
+LITERAL_BOOL = 271
+LITERAL_DICT = 272
+LITERAL_INT = 273
+LITERAL_REF = 274
 # GENERATE END
 
 yystack = None
@@ -92,7 +94,7 @@ def yy_action1():
       children = [
         element.concatenate(
           yy_element_stack[-3:-2],
-          ast.AST.Section2
+          t_def.AST.Section2
         )
       ]
     )
@@ -102,7 +104,7 @@ def yy_action1():
       children = [
         element.concatenate(
           yy_element_stack[-7:-6],
-          ast.AST.Section1
+          t_def.AST.Section1
         )
       ]
     )
@@ -121,7 +123,7 @@ def yy_action3():
       children = [
         element.concatenate(
           yy_element_stack[-2:-1],
-          ast.AST.Text
+          t_def.AST.Text
         )
       ]
     )
@@ -131,7 +133,7 @@ def yy_action3():
       children = [
         element.concatenate(
           yy_element_stack[-4:],
-          ast.AST.Section1.CodeBlock
+          t_def.AST.Section1.CodeBlock
         )
       ]
     )
@@ -150,7 +152,7 @@ def yy_action5():
       children = [
         element.concatenate(
           yy_element_stack[-9:],
-          ast.AST.Section2.ClassDef
+          t_def.AST.Section2.ClassDef
         )
       ]
     )
@@ -163,7 +165,7 @@ def yy_action6():
       children = [
         element.concatenate(
           yy_element_stack[-7:],
-          ast.AST.Section2.FieldDef
+          t_def.AST.Section2.FieldDef
         )
       ]
     )
@@ -182,7 +184,7 @@ def yy_action7():
       children = [
         element.concatenate(
           yy_element_stack[len(yy_element_stack):],
-          ast.AST.BaseClass
+          t_def.AST.BaseClass
         )
       ]
     )
@@ -195,7 +197,7 @@ def yy_action8():
       children = [
         element.concatenate(
           yy_element_stack[-1:],
-          ast.AST.ClassName
+          t_def.AST.ClassName
         )
       ]
     )
@@ -205,7 +207,7 @@ def yy_action8():
       children = [
         element.concatenate(
           yy_element_stack[-3:],
-          ast.AST.BaseClass
+          t_def.AST.BaseClass
         )
       ]
     )
@@ -230,7 +232,7 @@ def yy_action11():
       children = [
         element.concatenate(
           yy_element_stack[len(yy_element_stack):],
-          ast.AST.ClassBody
+          t_def.AST.Section2.ClassBody
         )
       ]
     )
@@ -243,7 +245,7 @@ def yy_action12():
       children = [
         element.concatenate(
           yy_element_stack[-5:],
-          ast.AST.ClassBody
+          t_def.AST.Section2.ClassBody
         )
       ]
     )
@@ -256,85 +258,98 @@ def yy_action13():
       children = [
         element.concatenate(
           yy_element_stack[-1:],
-          ast.AST.TypeBool
+          t_def.AST.TypeBool
         )
       ]
     )
   ]
   pass
 def yy_action14():
+  global yyval, yyloc
+  yy_element_stack[-11:] = [
+    element.Element(
+      children = [
+        element.concatenate(
+          yy_element_stack[-11:],
+          t_def.AST.TypeDict
+        )
+      ]
+    )
+  ]
+  pass
+def yy_action15():
   global yyval, yyloc
   yy_element_stack[-1:] = [
     element.Element(
       children = [
         element.concatenate(
           yy_element_stack[-1:],
-          ast.AST.TypeInt
+          t_def.AST.TypeInt
         )
       ]
     )
   ]
   pass
-def yy_action15():
+def yy_action16():
   global yyval, yyloc
   yy_element_stack[-7:] = [
     element.Element(
       children = [
         element.concatenate(
           yy_element_stack[-7:],
-          ast.AST.TypeList
+          t_def.AST.TypeList
         )
       ]
     )
   ]
   pass
-def yy_action16():
+def yy_action17():
   global yyval, yyloc
   yy_element_stack[-1:] = [
     element.Element(
       children = [
         element.concatenate(
           yy_element_stack[-1:],
-          ast.AST.TypeRef
+          t_def.AST.TypeRef
         )
       ]
     )
   ]
   pass
-def yy_action17():
+def yy_action18():
   global yyval, yyloc
   yy_element_stack[-7:] = [
     element.Element(
       children = [
         element.concatenate(
           yy_element_stack[-7:],
-          ast.AST.TypeSet
+          t_def.AST.TypeSet
         )
       ]
     )
   ]
   pass
-def yy_action18():
+def yy_action19():
   global yyval, yyloc
   yy_element_stack[-1:] = [
     element.Element(
       children = [
         element.concatenate(
           yy_element_stack[-1:],
-          ast.AST.TypeInt
+          t_def.AST.TypeStr
         )
       ]
     )
   ]
   pass
-def yy_action19():
+def yy_action20():
   global yyval, yyloc
   yy_element_stack[len(yy_element_stack):] = [
     element.Element(
       children = [
         element.concatenate(
           yy_element_stack[len(yy_element_stack):],
-          ast.AST.DefaultValue
+          t_def.AST.DefaultValue
         )
       ]
     )
@@ -343,14 +358,14 @@ def yy_action19():
     element.Element()
   ]
   pass
-def yy_action20():
+def yy_action21():
   global yyval, yyloc
   yy_element_stack[-4:] = [
     element.Element(
       children = [
         element.concatenate(
           yy_element_stack[-4:],
-          ast.AST.DefaultValue
+          t_def.AST.DefaultValue
         )
       ]
     )
@@ -359,9 +374,6 @@ def yy_action20():
     element.Element()
   ]
   pass
-def yy_action21():
-  global yyval, yyloc
-  pass
 def yy_action22():
   global yyval, yyloc
   pass
@@ -372,7 +384,7 @@ def yy_action23():
       children = [
         element.concatenate(
           yy_element_stack[-5:],
-          ast.AST.LiteralList
+          t_def.AST.LiteralDict
         )
       ]
     )
@@ -382,26 +394,42 @@ def yy_action24():
   global yyval, yyloc
   pass
 def yy_action25():
+  global yyval, yyloc
+  yy_element_stack[-5:] = [
+    element.Element(
+      children = [
+        element.concatenate(
+          yy_element_stack[-5:],
+          t_def.AST.LiteralList
+        )
+      ]
+    )
+  ]
+  pass
+def yy_action26():
+  global yyval, yyloc
+  pass
+def yy_action27():
   global yyval, yyloc
   yy_element_stack[-7:] = [
     element.Element(
       children = [
         element.concatenate(
           yy_element_stack[-7:],
-          ast.AST.LiteralSet
+          t_def.AST.LiteralSet
         )
       ]
     )
   ]
   pass
-def yy_action26():
+def yy_action28():
   global yyval, yyloc
   yy_element_stack[-2:-1] = [
     element.Element(
       children = [
         element.concatenate(
           yy_element_stack[-2:-1],
-          ast.AST.Text
+          t_def.AST.Text
         )
       ]
     )
@@ -411,46 +439,80 @@ def yy_action26():
       children = [
         element.concatenate(
           yy_element_stack[-3:],
-          ast.AST.LiteralStr
+          t_def.AST.LiteralStr
         )
       ]
     )
   ]
   pass
-def yy_action27():
+def yy_action29():
   global yyval, yyloc
   yy_element_stack[len(yy_element_stack):] = [
     element.Element()
   ]
   pass
-def yy_action28():
+def yy_action30():
   global yyval, yyloc
   pass
-def yy_action29():
+def yy_action31():
   global yyval, yyloc
   pass
-def yy_action30():
+def yy_action32():
   global yyval, yyloc
   pass
-def yy_action31():
+def yy_action33():
   global yyval, yyloc
   pass
-def yy_action32():
+def yy_action34():
   global yyval, yyloc
   yy_element_stack[len(yy_element_stack):] = [
     element.Element()
   ]
   pass
-def yy_action33():
+def yy_action35():
   global yyval, yyloc
   pass
-def yy_action34():
+def yy_action36():
+  global yyval, yyloc
+  pass
+def yy_action37():
+  global yyval, yyloc
+  pass
+def yy_action38():
+  global yyval, yyloc
+  pass
+def yy_action39():
+  global yyval, yyloc
+  yy_element_stack[-6:] = [
+    element.Element(
+      children = [
+        element.concatenate(
+          yy_element_stack[-6:],
+          t_def.AST.DictInitializer
+        )
+      ]
+    )
+  ]
+  yy_element_stack[-1:-1] = [
+    element.Element()
+  ]
+  pass
+def yy_action40():
   global yyval, yyloc
   yy_element_stack[len(yy_element_stack):] = [
     element.Element()
   ]
   pass
-def yy_action35():
+def yy_action41():
+  global yyval, yyloc
+  pass
+def yy_action42():
+  global yyval, yyloc
+  yy_element_stack[len(yy_element_stack):] = [
+    element.Element()
+  ]
+  pass
+def yy_action43():
   global yychar, yylval, yylloc, yyval, yyloc
   if yychar == -1:
     yylval = None
@@ -463,76 +525,101 @@ def yy_action35():
       children = [
         element.concatenate(
           yy_element_stack[-1:],
-          ast.AST.Text
+          t_def.AST.Text
         )
       ]
     )
   ]
   pass
-yy_lr1dfa_states = [([258, 259, 260, 261, 273], [-1, 5, -1, 5, -1], [1, 2, 4,
-36], [-1, 1, 2, -1], 2), ([1, 273], [1, -1], [36], [-1], 0), ([258, 259, 260,
-261, 273], [-1, 6, -1, 8, -1], [36], [-1], -1), ([259, 260, 273], [-1, 10, -1],
-[36], [-1], -1), ([1, 261, 269, 273], [9, -1, 9, -1], [4, 7, 36], [-1, 6, -1],
-4), ([258, 259, 260, 261, 273], [-1, 7, -1, 7, -1], [36], [-1], 3), ([1, 261,
-262, 263, 264, 265, 266, 267, 268, 269, 273], [69, -1, 14, 16, 18, 20, 22, 24,
-26, 28, -1], [13, 19, 34, 36], [-1, 15, -1, 16], -1), ([1, 273], [71, -1], [36
-], [-1], 35), ([41, 42, 269, 270, 273], [-1, 27, -1, 27, -1], [36], [-1], 13),
-([269, 270, 273], [-1, 34, -1], [36], [-1], -1), ([41, 42, 269, 270, 273], [-1,
-29, -1, 29, -1], [36], [-1], 14), ([40, 41, 273], [-1, 36, -1], [36], [-1], -1
-), ([41, 42, 269, 270, 273], [-1, 33, -1, 33, -1], [36], [-1], 16), ([40, 41,
-273], [-1, 38, -1], [36], [-1], -1), ([41, 42, 269, 270, 273], [-1, 37, -1, 37,
--1], [36], [-1], 18), ([269, 270, 273], [-1, 40, -1], [36], [-1], -1), ([1, 273
-], [3, -1], [36], [-1], 1), ([58, 59, 60, 123, 124, 273], [-1, 42, 15, -1, 15,
--1], [7, 9, 36], [-1, 22, -1], -1), ([262, 263, 264, 265, 266, 267, 268, 269,
-273], [-1, 16, -1, 20, 22, 24, 26, 28, -1], [13, 19, 36], [-1, 23, -1], -1), ([
-262, 263, 264, 265, 266, 267, 268, 269, 273], [-1, 16, -1, 20, 22, 24, 26, 28,
--1], [13, 19, 36], [-1, 24, -1], -1), ([59, 60, 61, 62, 273], [-1, 39, -1, 50,
--1], [19, 21, 36], [-1, 26, -1], -1), ([269, 270, 273], [-1, 54, -1], [9, 11,
-36], [-1, 28, -1], -1), ([59, 60, 123, 124, 273], [-1, 23, -1, 58, -1], [11,
-13, 36], [-1, 30, -1], -1), ([41, 42, 273], [-1, 62, -1], [36], [-1], -1), ([
-41, 42, 273], [-1, 64, -1], [36], [-1], -1), ([39, 40, 91, 92, 267, 268, 270,
-271, 272, 273], [-1, 66, -1, 68, -1, 70, -1, 72, 74, 76], [21, 27, 36], [-1,
-39, -1], -1), ([59, 60, 273], [-1, 80, -1], [36], [-1], -1), ([46, 47, 59, 60,
-123, 124, 273], [-1, 19, -1, 19, -1, 19, -1], [36], [-1], 9), ([46, 47, 59, 60,
-123, 124, 273], [-1, 82, -1, 17, -1, 17, -1], [36], [-1], -1), ([125, 126, 262,
-269, 273], [-1, 9, -1, 9, -1], [4, 7, 36], [-1, 42, -1], 4), ([59, 60, 273], [
--1, 86, -1], [36], [-1], -1), ([41, 42, 269, 270, 273], [-1, 31, -1, 31, -1], [
-36], [-1], 15), ([41, 42, 269, 270, 273], [-1, 35, -1, 35, -1], [36], [-1], 17
-), ([39, 40, 273], [-1, 88, -1], [36], [-1], -1), ([39, 40, 91, 92, 93, 94,
-267, 268, 270, 271, 272, 273], [-1, 66, -1, 68, -1, 55, -1, 70, -1, 72, 74, 76
-], [21, 27, 30, 32, 36], [-1, 45, 46, 47, -1], -1), ([40, 41, 273], [-1, 96, -1
-], [36], [-1], -1), ([44, 45, 59, 60, 93, 94, 273], [-1, 43, -1, 43, -1, 43, -1
-], [36], [-1], 21), ([44, 45, 59, 60, 93, 94, 273], [-1, 45, -1, 45, -1, 45, -1
-], [36], [-1], 22), ([44, 45, 59, 60, 93, 94, 273], [-1, 49, -1, 49, -1, 49, -1
-], [36], [-1], 24), ([59, 60, 273], [-1, 41, -1], [36], [-1], 20), ([1, 125,
-126, 261, 269, 273], [13, -1, 13, -1, 13, -1], [36], [-1], 6), ([269, 270, 273
-], [-1, 98, -1], [36], [-1], -1), ([125, 126, 262, 263, 264, 265, 266, 267,
-268, 269, 273], [-1, 100, -1, 16, 18, 20, 22, 24, 26, 28, -1], [13, 19, 36], [
--1, 15, -1], -1), ([1, 125, 126, 261, 269, 273], [11, -1, 11, -1, 11, -1], [36
-], [-1], 5), ([44, 45, 59, 60, 93, 94, 273], [-1, 53, -1, 53, -1, 53, -1], [36
-], [-1], 26), ([44, 45, 93, 94, 273], [-1, 61, -1, 61, -1], [36], [-1], 30), ([
-93, 94, 273], [-1, 102, -1], [36], [-1], -1), ([44, 45, 93, 94, 273], [-1, 104,
--1, 57, -1], [36], [-1], -1), ([41, 42, 91, 92, 273], [-1, 65, -1, 106, -1], [
-32, 34, 36], [-1, 54, -1], -1), ([46, 47, 59, 60, 123, 124, 273], [-1, 21, -1,
-21, -1, 21, -1], [36], [-1], 10), ([59, 60, 273], [-1, 25, -1], [36], [-1], 12
-), ([44, 45, 59, 60, 93, 94, 273], [-1, 47, -1, 47, -1, 47, -1], [36], [-1], 23
-), ([39, 40, 91, 92, 93, 94, 267, 268, 270, 271, 272, 273], [-1, 66, -1, 68,
--1, 59, -1, 70, -1, 72, 74, 76], [21, 27, 36], [-1, 55, -1], -1), ([39, 40, 91,
-92, 93, 94, 267, 268, 270, 271, 272, 273], [-1, 66, -1, 68, -1, 55, -1, 70, -1,
-72, 74, 76], [21, 27, 30, 32, 36], [-1, 45, 56, 47, -1], -1), ([41, 42, 273], [
--1, 114, -1], [36], [-1], -1), ([44, 45, 93, 94, 273], [-1, 63, -1, 63, -1], [
-36], [-1], 31), ([93, 94, 273], [-1, 116, -1], [36], [-1], -1), ([44, 45, 59,
-60, 93, 94, 273], [-1, 51, -1, 51, -1, 51, -1], [36], [-1], 25), ([41, 42, 273
-], [-1, 67, -1], [36], [-1], 33)]
+yy_lr1dfa_states = [([258, 259, 260, 261, 275], [-1, 5, -1, 5, -1], [1, 2, 4,
+44], [-1, 1, 2, -1], 2), ([1, 275], [1, -1], [44], [-1], 0), ([258, 259, 260,
+261, 275], [-1, 6, -1, 8, -1], [44], [-1], -1), ([259, 260, 275], [-1, 10, -1],
+[44], [-1], -1), ([1, 261, 270, 275], [9, -1, 9, -1], [4, 7, 44], [-1, 6, -1],
+4), ([258, 259, 260, 261, 275], [-1, 7, -1, 7, -1], [44], [-1], 3), ([1, 261,
+262, 263, 264, 265, 266, 267, 268, 269, 270, 275], [85, -1, 14, 16, 18, 20, 22,
+24, 26, 28, 30, -1], [13, 20, 42, 44], [-1, 16, -1, 17], -1), ([1, 275], [87,
+-1], [44], [-1], 43), ([41, 42, 44, 45, 270, 271, 275], [-1, 27, -1, 27, -1,
+27, -1], [44], [-1], 13), ([270, 271, 275], [-1, 36, -1], [44], [-1], -1), ([
+40, 41, 275], [-1, 38, -1], [44], [-1], -1), ([41, 42, 44, 45, 270, 271, 275],
+[-1, 31, -1, 31, -1, 31, -1], [44], [-1], 15), ([40, 41, 275], [-1, 40, -1], [
+44], [-1], -1), ([41, 42, 44, 45, 270, 271, 275], [-1, 35, -1, 35, -1, 35, -1],
+[44], [-1], 17), ([40, 41, 275], [-1, 42, -1], [44], [-1], -1), ([41, 42, 44,
+45, 270, 271, 275], [-1, 39, -1, 39, -1, 39, -1], [44], [-1], 19), ([270, 271,
+275], [-1, 44, -1], [44], [-1], -1), ([1, 275], [3, -1], [44], [-1], 1), ([58,
+59, 60, 123, 124, 275], [-1, 46, 15, -1, 15, -1], [7, 9, 44], [-1, 24, -1], -1
+), ([262, 263, 264, 265, 266, 267, 268, 269, 270, 275], [-1, 16, -1, 20, 22,
+24, 26, 28, 30, -1], [13, 20, 44], [-1, 25, -1], -1), ([262, 263, 264, 265,
+266, 267, 268, 269, 270, 275], [-1, 16, -1, 20, 22, 24, 26, 28, 30, -1], [13,
+20, 44], [-1, 26, -1], -1), ([262, 263, 264, 265, 266, 267, 268, 269, 270, 275
+], [-1, 16, -1, 20, 22, 24, 26, 28, 30, -1], [13, 20, 44], [-1, 27, -1], -1), (
+[59, 60, 61, 62, 275], [-1, 41, -1, 56, -1], [20, 22, 44], [-1, 29, -1], -1), (
+[270, 271, 275], [-1, 60, -1], [9, 11, 44], [-1, 31, -1], -1), ([59, 60, 123,
+124, 275], [-1, 23, -1, 64, -1], [11, 13, 44], [-1, 33, -1], -1), ([44, 45, 275
+], [-1, 68, -1], [44], [-1], -1), ([41, 42, 275], [-1, 70, -1], [44], [-1], -1
+), ([41, 42, 275], [-1, 72, -1], [44], [-1], -1), ([39, 40, 91, 92, 123, 124,
+268, 269, 271, 272, 273, 274, 275], [-1, 74, -1, 76, -1, 78, -1, 80, -1, 82,
+-1, 84, 86], [22, 29, 44], [-1, 44, -1], -1), ([59, 60, 275], [-1, 90, -1], [44
+], [-1], -1), ([46, 47, 59, 60, 123, 124, 275], [-1, 19, -1, 19, -1, 19, -1], [
+44], [-1], 9), ([46, 47, 59, 60, 123, 124, 275], [-1, 92, -1, 17, -1, 17, -1],
+[44], [-1], -1), ([125, 126, 262, 270, 275], [-1, 9, -1, 9, -1], [4, 7, 44], [
+-1, 47, -1], 4), ([59, 60, 275], [-1, 96, -1], [44], [-1], -1), ([262, 263,
+264, 265, 266, 267, 268, 269, 270, 275], [-1, 16, -1, 20, 22, 24, 26, 28, 30,
+-1], [13, 20, 44], [-1, 49, -1], -1), ([41, 42, 44, 45, 270, 271, 275], [-1,
+33, -1, 33, -1, 33, -1], [44], [-1], 16), ([41, 42, 44, 45, 270, 271, 275], [
+-1, 37, -1, 37, -1, 37, -1], [44], [-1], 18), ([39, 40, 275], [-1, 100, -1], [
+44], [-1], -1), ([39, 40, 91, 92, 93, 94, 123, 124, 268, 269, 271, 272, 273,
+274, 275], [-1, 74, -1, 76, -1, 59, -1, 78, -1, 80, -1, 82, -1, 84, 86], [22,
+29, 32, 34, 44], [-1, 51, 52, 53, -1], -1), ([39, 40, 91, 92, 123, 124, 125,
+126, 268, 269, 271, 272, 273, 274, 275], [-1, 74, -1, 76, -1, 78, -1, 69, -1,
+80, -1, 82, -1, 84, 86], [22, 29, 34, 37, 39, 40, 44], [-1, 54, -1, 55, 56, 57,
+-1], -1), ([40, 41, 275], [-1, 116, -1], [44], [-1], -1), ([44, 45, 58, 60, 93,
+94, 125, 126, 275], [-1, 45, -1, 45, -1, 45, -1, 45, -1], [44], [-1], 22), ([
+44, 45, 58, 60, 93, 94, 125, 126, 275], [-1, 49, -1, 49, -1, 49, -1, 49, -1], [
+44], [-1], 24), ([44, 45, 58, 60, 93, 94, 125, 126, 275], [-1, 53, -1, 53, -1,
+53, -1, 53, -1], [44], [-1], 26), ([59, 60, 275], [-1, 43, -1], [44], [-1], 21
+), ([1, 125, 126, 261, 270, 275], [13, -1, 13, -1, 13, -1], [44], [-1], 6), ([
+270, 271, 275], [-1, 118, -1], [44], [-1], -1), ([125, 126, 262, 263, 264, 265,
+266, 267, 268, 269, 270, 275], [-1, 120, -1, 16, 18, 20, 22, 24, 26, 28, 30, -1
+], [13, 20, 44], [-1, 16, -1], -1), ([1, 125, 126, 261, 270, 275], [11, -1, 11,
+-1, 11, -1], [44], [-1], 5), ([41, 42, 275], [-1, 122, -1], [44], [-1], -1), ([
+44, 45, 58, 60, 93, 94, 125, 126, 275], [-1, 57, -1, 57, -1, 57, -1, 57, -1], [
+44], [-1], 28), ([44, 45, 93, 94, 275], [-1, 65, -1, 65, -1], [44], [-1], 32),
+([93, 94, 275], [-1, 124, -1], [44], [-1], -1), ([44, 45, 93, 94, 275], [-1,
+126, -1, 61, -1], [44], [-1], -1), ([58, 59, 275], [-1, 128, -1], [44], [-1],
+-1), ([125, 126, 275], [-1, 130, -1], [44], [-1], -1), ([44, 45, 125, 126, 275
+], [-1, 132, -1, 71, -1], [44], [-1], -1), ([44, 45, 125, 126, 275], [-1, 75,
+-1, 75, -1], [44], [-1], 37), ([41, 42, 91, 92, 275], [-1, 81, -1, 134, -1], [
+40, 42, 44], [-1, 68, -1], -1), ([46, 47, 59, 60, 123, 124, 275], [-1, 21, -1,
+21, -1, 21, -1], [44], [-1], 10), ([59, 60, 275], [-1, 25, -1], [44], [-1], 12
+), ([41, 42, 44, 45, 270, 271, 275], [-1, 29, -1, 29, -1, 29, -1], [44], [-1],
+14), ([44, 45, 58, 60, 93, 94, 125, 126, 275], [-1, 51, -1, 51, -1, 51, -1, 51,
+-1], [44], [-1], 25), ([39, 40, 91, 92, 93, 94, 123, 124, 268, 269, 271, 272,
+273, 274, 275], [-1, 74, -1, 76, -1, 63, -1, 78, -1, 80, -1, 82, -1, 84, 86], [
+22, 29, 44], [-1, 69, -1], -1), ([39, 40, 91, 92, 123, 124, 268, 269, 271, 272,
+273, 274, 275], [-1, 74, -1, 76, -1, 78, -1, 80, -1, 82, -1, 84, 86], [22, 29,
+44], [-1, 70, -1], -1), ([44, 45, 58, 60, 93, 94, 125, 126, 275], [-1, 47, -1,
+47, -1, 47, -1, 47, -1], [44], [-1], 23), ([39, 40, 91, 92, 123, 124, 125, 126,
+268, 269, 271, 272, 273, 274, 275], [-1, 74, -1, 76, -1, 78, -1, 73, -1, 80,
+-1, 82, -1, 84, 86], [22, 29, 39, 40, 44], [-1, 54, -1, 71, -1], -1), ([39, 40,
+91, 92, 93, 94, 123, 124, 268, 269, 271, 272, 273, 274, 275], [-1, 74, -1, 76,
+-1, 59, -1, 78, -1, 80, -1, 82, -1, 84, 86], [22, 29, 32, 34, 44], [-1, 51, 72,
+53, -1], -1), ([41, 42, 275], [-1, 146, -1], [44], [-1], -1), ([44, 45, 93, 94,
+275], [-1, 67, -1, 67, -1], [44], [-1], 33), ([44, 45, 125, 126, 275], [-1, 79,
+-1, 79, -1], [44], [-1], 39), ([44, 45, 125, 126, 275], [-1, 77, -1, 77, -1], [
+44], [-1], 38), ([93, 94, 275], [-1, 148, -1], [44], [-1], -1), ([44, 45, 58,
+60, 93, 94, 125, 126, 275], [-1, 55, -1, 55, -1, 55, -1, 55, -1], [44], [-1],
+27), ([41, 42, 275], [-1, 83, -1], [44], [-1], 41)]
 yy_lr1dfa_productions = [(1, yy_action0), (4, yy_action1), (0, yy_action2), (3,
 yy_action3), (0, yy_action4), (6, yy_action5), (5, yy_action6), (0, yy_action7
 ), (2, yy_action8), (1, yy_action9), (3, yy_action10), (0, yy_action11), (3,
-yy_action12), (1, yy_action13), (1, yy_action14), (4, yy_action15), (1,
-yy_action16), (4, yy_action17), (1, yy_action18), (0, yy_action19), (2,
-yy_action20), (1, yy_action21), (1, yy_action22), (3, yy_action23), (1,
-yy_action24), (4, yy_action25), (2, yy_action26), (0, yy_action27), (1,
-yy_action28), (2, yy_action29), (1, yy_action30), (3, yy_action31), (0,
-yy_action32), (3, yy_action33), (0, yy_action34), (1, yy_action35)]
+yy_action12), (1, yy_action13), (6, yy_action14), (1, yy_action15), (4,
+yy_action16), (1, yy_action17), (4, yy_action18), (1, yy_action19), (0,
+yy_action20), (2, yy_action21), (1, yy_action22), (3, yy_action23), (1,
+yy_action24), (3, yy_action25), (1, yy_action26), (4, yy_action27), (2,
+yy_action28), (0, yy_action29), (1, yy_action30), (2, yy_action31), (1,
+yy_action32), (3, yy_action33), (0, yy_action34), (1, yy_action35), (2,
+yy_action36), (1, yy_action37), (3, yy_action38), (3, yy_action39), (0,
+yy_action40), (3, yy_action41), (0, yy_action42), (1, yy_action43)]
 # GENERATE END
 
 def yyparse(factory, *args, **kwargs):