Click here to Skip to main content
15,897,371 members
Articles / Programming Languages / C#

Script.NET a language for embedding scripting functionality into CLR Applications

Rate me:
Please Sign up or sign in to vote.
4.90/5 (50 votes)
16 Dec 2008CPOL6 min read 224.5K   2.8K   196  
Scripting language for .NET Framework 2.0. Supports native .NET Types, Dynamic casting, Meta programming.
using System;using Tools;
using System.Collections.Generic;
using System.Reflection;

namespace ScriptDotNet
{
    internal class SCRException : Exception
    {
        public SCRException(string Message)
            : base(Message)
        {
        }
    }

    internal class ScriptContext
    {
        public Dictionary<string, object> var_table;
        public Dictionary<string, Type> type_table;

        public ScriptContext()
        {
            var_table = new Dictionary<string, object>();
            type_table = new Dictionary<string, Type>();
        }

        public object Lookup(string id)
        {
            if (var_table.ContainsKey(id)) return var_table[id];
            else
                if (type_table.ContainsKey(id)) return type_table[id];
                else
                    throw new SCRException("Semantic: No such variable in the context: " + id);

        }

        public void Assign(MemberExpression me, object value)
        {
            if (me.e1 is IdnExpression)
            {
                string name = ((IdnExpression)me.e1).IdName;
                if (var_table.ContainsKey(name))
                {
                    var_table[name] = value;
                }
                else
                    var_table.Add(name, value);
            }
            else
                if (me is ResolvingMemberExpression)
                {
                    ((ResolvingMemberExpression)me).SetValue(this, null, null, value);
                }
                else
                    if (me is ArrayMemberExpression)
                    {
                        ((ArrayMemberExpression)me).SetValue(this, null, value);
                    }
        }

        public void AddObject(string name, object value)
        {
            if (var_table.ContainsKey(name))
            {
                var_table[name] = value;
            }
            else
                var_table.Add(name, value);
        }

        public void AddType(string name, Type value)
        {
            if (type_table.ContainsKey(name))
            {
                type_table[name] = value;
            }
            else
                type_table.Add(name, value);
        }
    }

    //%+JsProg+19
    internal class JsProg : SYMBOL
    {
        public List<JsProg> Nodes;
        public JsProg(Parser yyp)
            : base(((syntax)yyp))
        {
            Nodes = new List<JsProg>();
        }
        public JsProg(Parser yyp, JsProg p)
            : base(((syntax)yyp))
        {
            Nodes = new List<JsProg>();
            Nodes.Add(p);
        }
        public JsProg(Parser yyp, JsProg p1, JsProg p2)
            : base(((syntax)yyp))
        {
            Nodes = new List<JsProg>();
            Nodes.Add(p1);
            Nodes.Add(p2);
        }
        public virtual void Execute(ScriptContext Context)
        {
            foreach (JsProg jp in Nodes) jp.Execute(Context);
        }

        public override string yyname { get { return "JsProg"; } }
        public override int yynum { get { return 19; } }
    }
    //%+Prog+20
    internal class Prog : JsProg
    {
        public Prog(Parser yyp, JsProg element, JsProg prog)
            : base(((syntax)yyp))
        {
            Nodes.Add(element);
            Nodes.AddRange(prog.Nodes);
        }

        public override string yyname { get { return "Prog"; } }
        public override int yynum { get { return 20; } }
        public Prog(Parser yyp) : base(yyp) { }
    }
    //%+Element+21
    internal class Element : JsProg
    {
        public Element(Parser yyp, JsProg stm) : base(((syntax)yyp), stm) { }

        public override string yyname { get { return "Element"; } }
        public override int yynum { get { return 21; } }
        public Element(Parser yyp) : base(yyp) { }
    }
    //%+Function+22
    internal class Function : Element
    {
        public string Name;
        public Function(Parser yyp, Identifier name, JsProg parameters, JsProg body)
            : base(((syntax)yyp))
        {
            this.Name = name.yytext;
            Nodes.Add(parameters);
            Nodes.Add(body);
        }

        public override string yyname { get { return "Function"; } }
        public override int yynum { get { return 22; } }
        public Function(Parser yyp) : base(yyp) { }
    }
    //%+Statement+23
    internal class Statement : JsProg
    {
        public Statement(Parser yyp, JsProg stm) : base(((syntax)yyp), stm) { }

        public override string yyname { get { return "Statement"; } }
        public override int yynum { get { return 23; } }
        public Statement(Parser yyp) : base(yyp) { }
    }
    //%+IfStatement+24
    internal class IfStatement : Statement
    {
        Condition cnd;
        Statement stm1, stm2;
        public IfStatement(Parser yyp, JsProg condition, JsProg stm, JsProg stm1)
            : base(((syntax)yyp))
        {
            this.cnd = (Condition)condition;
            this.stm1 = (Statement)stm;
            this.stm2 = (Statement)stm1;
        }
        public override void Execute(ScriptContext Context)
        {
            object rez = cnd.evaluate(Context);
            if (!(rez is bool)) throw new SCRException("Semantic: Boolean expression in If statement");
            bool rezBool = (bool)rez;
            if (rezBool) stm1.Execute(Context);
            else
            {
                if (stm2 != null) stm2.Execute(Context);
            }
        }

        public override string yyname { get { return "IfStatement"; } }
        public override int yynum { get { return 24; } }
        public IfStatement(Parser yyp) : base(yyp) { }
    }
    //%+WhileStatement+25
    internal class WhileStatement : Statement
    {
        Condition cnd;
        Statement stm;
        public WhileStatement(Parser yyp, JsProg condition, JsProg block)
            : base(((syntax)yyp))
        {
            cnd = (Condition)condition;
            stm = (Statement)block;
        }
        private bool cond(ScriptContext Context)
        {
            object rez = cnd.evaluate(Context);
            if (!(rez is bool)) throw new SCRException("Semantic: Boolean expression in If statement");
            return (bool)rez;
        }
        public override void Execute(ScriptContext Context)
        {
            while (cond(Context)) stm.Execute(Context);
        }

        public override string yyname { get { return "WhileStatement"; } }
        public override int yynum { get { return 25; } }
        public WhileStatement(Parser yyp) : base(yyp) { }
    }
    //%+ForStatement+26
    internal class ForStatement : Statement
    {
        ExpressionOpt e1, e2, e3;
        Statement stm;
        public ForStatement(Parser yyp, JsProg e1, JsProg e2, JsProg e3, JsProg block)
            : base(((syntax)yyp))
        {
            this.e1 = (ExpressionOpt)e1;
            this.e2 = (ExpressionOpt)e2;
            this.e3 = (ExpressionOpt)e3;
            this.stm = (Statement)block;
        }
        private void init(ScriptContext Context)
        {
            if (e1 != null && e1.e != null) e1.e.evaluate(Context);
        }
        private bool cond(ScriptContext Context)
        {
            if (e2 == null || e2.e == null) return true;
            object rez = e2.e.evaluate(Context);
            if (!(rez is bool)) throw new SCRException("Semantic: Boolean expression in For statement");
            return (bool)rez;
        }
        private void next(ScriptContext Context)
        {
            if (e3 != null && e3.e != null) e3.e.evaluate(Context);
        }
        public override void Execute(ScriptContext Context)
        {
            for (init(Context);
cond(Context);
next(Context)) stm.Execute(Context);
        }

        public override string yyname { get { return "ForStatement"; } }
        public override int yynum { get { return 26; } }
        public ForStatement(Parser yyp) : base(yyp) { }
    }
    //%+BreakStatement+27
    internal class BreakStatement : Statement
    {
        public BreakStatement(Parser yyp) : base(((syntax)yyp)) { }

        public override string yyname { get { return "BreakStatement"; } }
        public override int yynum { get { return 27; } }
    }
    //%+ContinueStatement+28
    internal class ContinueStatement : Statement
    {
        public ContinueStatement(Parser yyp) : base(((syntax)yyp)) { }

        public override string yyname { get { return "ContinueStatement"; } }
        public override int yynum { get { return 28; } }
    }
    //%+ReturnStatement+29
    internal class ReturnStatement : Statement
    {
        public ReturnStatement(Parser yyp, JsProg expr) : base(((syntax)yyp), expr) { }

        public override string yyname { get { return "ReturnStatement"; } }
        public override int yynum { get { return 29; } }
        public ReturnStatement(Parser yyp) : base(yyp) { }
    }
    //%+VarStatement+30
    internal class VarStatement : Statement
    {
        public VarStatement(Parser yyp, Variables vars) : base(((syntax)yyp), vars) { }

        public override string yyname { get { return "VarStatement"; } }
        public override int yynum { get { return 30; } }
        public VarStatement(Parser yyp) : base(yyp) { }
    }
    //%+CompoundStatement+31
    internal class CompoundStatement : Statement
    {
        public CompoundStatement(Parser yyp, Statements stms)
            : base(((syntax)yyp))
        {
            Nodes.Add(stms);
        }

        public override string yyname { get { return "CompoundStatement"; } }
        public override int yynum { get { return 31; } }
        public CompoundStatement(Parser yyp) : base(yyp) { }
    }
    //%+Statements+32
    internal class Statements : JsProg
    {
        public Statements(Parser yyp, Statement stm) : base(((syntax)yyp), stm) { }
        public Statements(Parser yyp, Statement stm, Statements stms)
            : base(((syntax)yyp), stm)
        {
            Nodes.AddRange(stms.Nodes);
        }

        public override string yyname { get { return "Statements"; } }
        public override int yynum { get { return 32; } }
        public Statements(Parser yyp) : base(yyp) { }
    }
    //%+Variables+33
    internal class Variables : JsProg
    {

        public override string yyname { get { return "Variables"; } }
        public override int yynum { get { return 33; } }
        public Variables(Parser yyp) : base(yyp) { }
    }
    //%+ParameterListOpt+34
    internal class ParameterListOpt : ParameterList
    {
        public ParameterListOpt(Parser yyp, ParameterList pl) : base(((syntax)yyp), pl) { }

        public override string yyname { get { return "ParameterListOpt"; } }
        public override int yynum { get { return 34; } }
        public ParameterListOpt(Parser yyp) : base(yyp) { }
    }
    //%+ParameterList+35
    internal class ParameterList : JsProg
    {
        public List<string> parameters;
        public ParameterList(Parser yyp)
            : base(((syntax)yyp))
        {
            parameters = new List<string>();
        }
        public ParameterList(Parser yyp, string id)
            : base(((syntax)yyp))
        {
            parameters = new List<string>();
            parameters.Add(id);
        }
        public ParameterList(Parser yyp, string id, ParameterList p)
            : base(((syntax)yyp))
        {
            parameters = new List<string>();
            parameters.Add(id);
            parameters.AddRange(p.parameters);
        }
        public ParameterList(Parser yyp, ParameterList p)
            : base(((syntax)yyp))
        {
            parameters = new List<string>();
            parameters.AddRange(p.parameters);
        }

        public override string yyname { get { return "ParameterList"; } }
        public override int yynum { get { return 35; } }
    }
    //%+ExpressionOpt+36
    internal class ExpressionOpt : JsProg
    {
        public Expression e;
        public ExpressionOpt(Parser yyp, Expression e)
            : base(((syntax)yyp))
        {
            this.e = e;
        }

        public override string yyname { get { return "ExpressionOpt"; } }
        public override int yynum { get { return 36; } }
        public ExpressionOpt(Parser yyp) : base(yyp) { }
    }
    //%+Expression+37
    internal class Expression : JsProg
    {
        public Expression e1;
        public Expression e2;
        string op;
        public Expression(Parser yyp, JsProg ue)
            : base(((syntax)yyp))
        {
            e1 = (Expression)ue;
        }
        public Expression(Parser yyp, Expression e1, Expression e2, string op)
            : base(((syntax)yyp))
        {
            this.e1 = e1;
            this.e2 = e2;
            this.op = op;
        }
        public override void Execute(ScriptContext Context)
        {
            object rez = this.evaluate(Context);
        }
        public virtual object evaluate(ScriptContext Context)
        {
            switch (op)
            {
                case "+": return ExpressionEvaluator.SUM(e1.evaluate(Context), e2.evaluate(Context));
                case "-": return ExpressionEvaluator.DIF(e1.evaluate(Context), e2.evaluate(Context));
                case "*": return ExpressionEvaluator.MUL(e1.evaluate(Context), e2.evaluate(Context));
                case "/": return ExpressionEvaluator.DIV(e1.evaluate(Context), e2.evaluate(Context));
                case "==": return ExpressionEvaluator.EQ(e1.evaluate(Context), e2.evaluate(Context));
                case "!=": return ExpressionEvaluator.NEQ(e1.evaluate(Context), e2.evaluate(Context));
                case ">": return ExpressionEvaluator.GE(e1.evaluate(Context), e2.evaluate(Context));
                case "<": return ExpressionEvaluator.LE(e1.evaluate(Context), e2.evaluate(Context));
                default: return e1.evaluate(Context);
                    break;
            }
            return null;
        }

        public override string yyname { get { return "Expression"; } }
        public override int yynum { get { return 37; } }
        public Expression(Parser yyp) : base(yyp) { }
    }
    //%+UnaryExpression+38
    internal class UnaryExpression : Expression
    {
        public UnaryExpression(Parser yyp, MemberExpression me)
            : base(((syntax)yyp))
        {
            this.e1 = (Expression)me;
        }
        public override object evaluate(ScriptContext Context)
        {
            return e1.evaluate(Context);
        }

        public override string yyname { get { return "UnaryExpression"; } }
        public override int yynum { get { return 38; } }
        public UnaryExpression(Parser yyp) : base(yyp) { }
    }
    //%+UnaryMinus+39
    internal class UnaryMinus : UnaryExpression
    {
        public UnaryMinus(Parser yyp, UnaryExpression ue)
            : base(((syntax)yyp))
        {
            this.e1 = ue.e1;
        }
        public override object evaluate(ScriptContext Context)
        {
            object rez = e1.evaluate(Context);
            if (rez is int) return -(int)rez;
            if (rez is double) return -(double)rez;
            return null;
        }

        public override string yyname { get { return "UnaryMinus"; } }
        public override int yynum { get { return 39; } }
        public UnaryMinus(Parser yyp) : base(yyp) { }
    }
    //%+UnaryNot+40
    internal class UnaryNot : UnaryExpression
    {
        public UnaryNot(Parser yyp, UnaryExpression ue)
            : base(((syntax)yyp))
        {
            this.e1 = ue.e1;
        }
        public override object evaluate(ScriptContext Context)
        {
            object rez = e1.evaluate(Context);
            if (rez is bool) return !(bool)rez;
            return null;
        }

        public override string yyname { get { return "UnaryNot"; } }
        public override int yynum { get { return 40; } }
        public UnaryNot(Parser yyp) : base(yyp) { }
    }
    //%+MemberExpression+41
    internal class MemberExpression : UnaryExpression
    {
        public MemberExpression(Parser yyp, PrimaryExpression pe) : base(((syntax)yyp), pe) { }

        public override string yyname { get { return "MemberExpression"; } }
        public override int yynum { get { return 41; } }
        public MemberExpression(Parser yyp) : base(yyp) { }
    }
    //%+AssignmentExpression+42
    internal class AssignmentExpression : Expression
    {
        public AssignmentExpression(Parser yyp, MemberExpression me, Expression e)
            : base(((syntax)yyp))
        {
            this.e1 = me;
            this.e2 = e;
        }
        public override object evaluate(ScriptContext Context)
        {
            object rez = e2.evaluate(Context);
            Context.Assign((MemberExpression)e1, rez);
            return rez;
        }

        public override string yyname { get { return "AssignmentExpression"; } }
        public override int yynum { get { return 42; } }
        public AssignmentExpression(Parser yyp) : base(yyp) { }
    }
    //%+ResolvingMemberExpression+43
    internal class ResolvingMemberExpression : MemberExpression
    {
        PrimaryExpression pe;
        MemberExpression me;
        public ResolvingMemberExpression(Parser yyp, PrimaryExpression pe, MemberExpression me)
            : base(((syntax)yyp))
        {
            this.pe = pe;
            this.me = me;
        }
        public string GetBaseName()
        {
            return ((IdnExpression)pe).IdName;
        }
        public void SetValue(ScriptContext Context, Type val, object src, object value)
        {
            if (pe is IdnExpression)
            {
                string name = ((IdnExpression)pe).IdName;
                Type tp;
                if (val == null)
                {
                    tp = Context.Lookup(GetBaseName()).GetType();
                    src = Context.Lookup(GetBaseName());
                }
                else
                {
                    tp = val;
                }
                if (me is ResolvingMemberExpression)
                {
                    Type info = null;
                    object val1 = null;
                    FieldInfo fi;
                    PropertyInfo pi;
                    fi = tp.GetField(((ResolvingMemberExpression)me).GetBaseName());
                    if (fi == null)
                    {
                        pi = tp.GetProperty(((ResolvingMemberExpression)me).GetBaseName());
                        info = pi.PropertyType;
                        val1 = pi.GetValue(src, null);
                    }
                    else
                    {
                        info = fi.FieldType;
                        val1 = fi.GetValue(src);
                    }

                   ((ResolvingMemberExpression)me).SetValue(Context, info, val1, value);
                }
                else
                {
                    if (me is ArrayMemberExpression)
                    {
                        ((ArrayMemberExpression)me).SetValue(Context, src, value);
                    }
                    else if (me is MemberExpression)
                    {
                        if (me.e1 is IdnExpression)
                        {
                            string name1 = ((IdnExpression)me.e1).IdName;
                            FieldInfo fi = tp.GetField(name1);
                            if (fi == null)
                            {
                                PropertyInfo pi = tp.GetProperty(name1);
                                pi.SetValue(src, Convert.ChangeType(value, pi.PropertyType), null);
                            }
                            else fi.SetValue(src, Convert.ChangeType(value, fi.FieldType));
                        }
                    }
                }
            }
        }
        public object GetValue(ScriptContext Context, Type val, object src)
        {
            if (pe is IdnExpression)
            {
                string name = ((IdnExpression)pe).IdName;
                Type tp;
                if (val == null)
                {
                    tp = Context.Lookup(GetBaseName()).GetType();
                    src = Context.Lookup(GetBaseName());
                }
                else
                {
                    tp = val;
                }
                if (me is ResolvingMemberExpression)
                {
                    Type info = null;
                    object val1 = null;
                    FieldInfo fi;
                    PropertyInfo pi;
                    fi = tp.GetField(((ResolvingMemberExpression)me).GetBaseName());
                    if (fi == null)
                    {
                        pi = tp.GetProperty(((ResolvingMemberExpression)me).GetBaseName());
                        info = pi.PropertyType;
                        val1 = pi.GetValue(src, null);
                    }
                    else
                    {
                        info = fi.FieldType;
                        val1 = fi.GetValue(src);
                    }
                    
                    return ((ResolvingMemberExpression)me).GetValue(Context, info, val1);
                }
                else if (me is FunctionCall)
                {
                    return ((FunctionCall)me).CallFunction(Context, src);
                }
                else
                {
                    if (me is ArrayMemberExpression)
                    {
                        return ((ArrayMemberExpression)me).GetValue(Context, src);
                    }
                    else if (me is MemberExpression)
                    {
                        if (me.e1 is IdnExpression)
                        {
                            string name1 = ((IdnExpression)me.e1).IdName;
                            FieldInfo fi = tp.GetField(name1);
                            if (fi != null) return fi.GetValue(src);
                            else
                            {
                                PropertyInfo pi = tp.GetProperty(name1);
                                return pi.GetValue(src, null);
                            }
                        }
                    }
                }
            }
            return null;
        }
        public override object evaluate(ScriptContext Context)
        {
            return GetValue(Context, null, null);
        }

        public override string yyname { get { return "ResolvingMemberExpression"; } }
        public override int yynum { get { return 43; } }
        public ResolvingMemberExpression(Parser yyp) : base(yyp) { }
    }
    //%+ArrayMemberExpression+44
    internal class ArrayMemberExpression : MemberExpression
    {
        PrimaryExpression pe;
        Expression e;
        public ArrayMemberExpression(Parser yyp, PrimaryExpression pe, Expression e)
            : base(((syntax)yyp))
        {
            this.pe = pe;
            this.e = e;
        }
        public override object evaluate(ScriptContext Context)
        {
            object o = pe.evaluate(Context);
            Type t = o.GetType();
            MethodInfo mi = t.GetMethod("Get");
            if (mi == null) mi = t.GetMethod("get_Item");
            return mi.Invoke(o, new object[] { Convert.ChangeType(e.evaluate(Context), mi.GetParameters()[0].ParameterType) }
           );
        }
        public object GetValue(ScriptContext Context, object src)
        {
            object o = null;
            if (src == null) o = pe.evaluate(Context);
            else
            {
                string name = ((IdnExpression)pe).IdName;
                FieldInfo fi = src.GetType().GetField(name);
                if (fi == null)
                {
                    PropertyInfo pi = src.GetType().GetProperty(name);
                    o = pi.GetValue(src, null);
                }
                else
                {
                    o = fi.GetValue(src);
                }
            }
            Type t = o.GetType();
            MethodInfo mi = t.GetMethod("Get");
            if (mi == null) mi = t.GetMethod("get_Item");
            return mi.Invoke(o, new object[] { Convert.ChangeType(e.evaluate(Context), mi.GetParameters()[0].ParameterType) }
           );
        }
        public void SetValue(ScriptContext Context, object src, object value)
        {
            object o = null;
            if (src == null) o = pe.evaluate(Context);
            else
            {
                Type tp = src.GetType();
                string name1 = ((IdnExpression)pe).IdName;
                FieldInfo fi = tp.GetField(name1);
                if (fi != null) o = fi.GetValue(src);
                else
                {
                    PropertyInfo pi = tp.GetProperty(name1);
                    o = pi.GetValue(src, null);
                }
            }
            Type t = o.GetType();
            MethodInfo mi = t.GetMethod("Set");
            if (mi == null) mi = t.GetMethod("set_Item");
            mi.Invoke(o, new object[] { Convert.ChangeType(e.evaluate(Context), mi.GetParameters()[0].ParameterType), Convert.ChangeType(value, mi.GetParameters()[1].ParameterType) }
           );
        }

        public override string yyname { get { return "ArrayMemberExpression"; } }
        public override int yynum { get { return 44; } }
        public ArrayMemberExpression(Parser yyp) : base(yyp) { }
    }
    //%+FunctionCall+45
    internal class FunctionCall : MemberExpression
    {
        IdnExpression idn;
        ArgumentListOpt alo;
        public FunctionCall(Parser yyp, PrimaryExpression idn, ArgumentListOpt alo)
            : base(((syntax)yyp))
        {
            this.idn = (IdnExpression)idn;
            this.alo = alo;
        }
        public object CallFunction(ScriptContext Context, object obj)
        {
            List<object> pars = new List<object>();
            List<Type> sig = new List<Type>();
            foreach (Expression ex in alo.Nodes)
            {
                object rez = ex.evaluate(Context);
                pars.Add(rez);
                sig.Add(rez.GetType());
            }
            Type tp;
            if (obj is Type) tp = (Type)obj;
            else tp = obj.GetType();
            MethodInfo mi = tp.GetMethod(idn.IdName, sig.ToArray());
            return mi.Invoke(obj, pars.ToArray());
        }

        public override string yyname { get { return "FunctionCall"; } }
        public override int yynum { get { return 45; } }
        public FunctionCall(Parser yyp) : base(yyp) { }
    }
    //%+PrimaryExpression+46
    internal class PrimaryExpression : MemberExpression
    {

        public override string yyname { get { return "PrimaryExpression"; } }
        public override int yynum { get { return 46; } }
        public PrimaryExpression(Parser yyp) : base(yyp) { }
    }
    //%+ConstExpression+47
    internal class ConstExpression : PrimaryExpression
    {
        public object val;
        public ConstExpression(Parser yyp, object val)
            : base(((syntax)yyp))
        {
            this.val = val;
        }
        public ConstExpression(Parser yyp) : base(((syntax)yyp)) { }
        public override object evaluate(ScriptContext Context)
        {
            return val;
        }

        public override string yyname { get { return "ConstExpression"; } }
        public override int yynum { get { return 47; } }
    }
    //%+IdnExpression+48
    internal class IdnExpression : PrimaryExpression
    {
        public string IdName;
        public IdnExpression(Parser yyp, string id)
            : base(((syntax)yyp))
        {
            this.IdName = id;
        }
        public override object evaluate(ScriptContext Context)
        {
            return Context.Lookup(IdName);
        }

        public override string yyname { get { return "IdnExpression"; } }
        public override int yynum { get { return 48; } }
        public IdnExpression(Parser yyp) : base(yyp) { }
    }
    //%+NewExpression+49
    internal class NewExpression : Expression
    {
        public ArgumentListOpt args;
        public string tn;
        public NewExpression(Parser yyp, string tn, ArgumentListOpt args)
            : base(((syntax)yyp))
        {
            this.tn = tn;
            this.args = args;
        }
        public override object evaluate(ScriptContext Context)
        {
            object[] ar = new object[args.Nodes.Count];
            Type [] sig = new Type[args.Nodes.Count];
            for (int i = 0; i < args.Nodes.Count; i++) 
            {
                ar[i] = ((Expression)args.Nodes[i]).evaluate(Context);
                sig[i] = ar[i].GetType();
            }

            Type tp = Context.type_table[tn];
            ConstructorInfo ci = tp.GetConstructor(sig);
            if (ci != null)
                return ci.Invoke(ar);

            return null;
        }

        public override string yyname { get { return "NewExpression"; } }
        public override int yynum { get { return 49; } }
        public NewExpression(Parser yyp) : base(yyp) { }
    }
    //%+ConstArrayExpression+50
    internal class ConstArrayExpression : PrimaryExpression
    {
        public ArgumentListOpt args;
        public ConstArrayExpression(Parser yyp, ArgumentListOpt args)
            : base(((syntax)yyp))
        {
            this.args = args;
        }
        public override object evaluate(ScriptContext Context)
        {
            object[] ar = new object[args.Nodes.Count];
            for (int i = 0;
            i < args.Nodes.Count;
            i++) ar[i] = ((Expression)args.Nodes[i]).evaluate(Context);
            return ar;
        }

        public override string yyname { get { return "ConstArrayExpression"; } }
        public override int yynum { get { return 50; } }
        public ConstArrayExpression(Parser yyp) : base(yyp) { }
    }
    //%+Condition+51
    internal class Condition : Expression
    {
        public Condition(Parser yyp, Expression exp) : base(((syntax)yyp), exp) { }

        public override string yyname { get { return "Condition"; } }
        public override int yynum { get { return 51; } }
        public Condition(Parser yyp) : base(yyp) { }
    }
    //%+ArgumentListOpt+52
    internal class ArgumentListOpt : ArgumentList
    {
        public ArgumentListOpt(Parser yyp, ArgumentList pl)
            : base(((syntax)yyp))
        {
            Nodes.AddRange(pl.Nodes);
        }

        public override string yyname { get { return "ArgumentListOpt"; } }
        public override int yynum { get { return 52; } }
        public ArgumentListOpt(Parser yyp) : base(yyp) { }
    }
    //%+ArgumentList+53
    internal class ArgumentList : JsProg
    {
        public ArgumentList(Parser yyp, Expression e)
            : base(((syntax)yyp))
        {
            Nodes.Add(e);
        }
        public ArgumentList(Parser yyp, Expression e, ArgumentList al)
            : base(((syntax)yyp))
        {
            Nodes.Add(e);
            Nodes.AddRange(al.Nodes);
        }

        public override string yyname { get { return "ArgumentList"; } }
        public override int yynum { get { return 53; } }
        public ArgumentList(Parser yyp) : base(yyp) { }
    }

    internal class JsProg_1 : JsProg
    {
        public JsProg_1(Parser yyq)
            : base(yyq,
          ((Prog)(yyq.StackAt(0).m_value))
          ) { }
    }

    internal class Prog_1 : Prog
    {
        public Prog_1(Parser yyq)
            : base(yyq,
          ((Element)(yyq.StackAt(1).m_value))
          ,
          ((Prog)(yyq.StackAt(0).m_value))
          ) { }
    }

    internal class Function_1 : Function
    {
        public Function_1(Parser yyq)
            : base(yyq,
          ((Identifier)(yyq.StackAt(4).m_value))
          ,
          ((ParameterListOpt)(yyq.StackAt(2).m_value))
          ,
          ((CompoundStatement)(yyq.StackAt(0).m_value))
          ) { }
    }

    internal class Element_1 : Element
    {
        public Element_1(Parser yyq)
            : base(yyq,
          ((Statement)(yyq.StackAt(0).m_value))
          ) { }
    }

    internal class ParameterListOpt_1 : ParameterListOpt
    {
        public ParameterListOpt_1(Parser yyq)
            : base(yyq,
          ((ParameterList)(yyq.StackAt(0).m_value))
          ) { }
    }

    internal class ParameterList_1 : ParameterList
    {
        public ParameterList_1(Parser yyq)
            : base(yyq,
          ((Identifier)(yyq.StackAt(0).m_value))
          .yytext) { }
    }

    internal class ParameterList_2 : ParameterList
    {
        public ParameterList_2(Parser yyq)
            : base(yyq,
          ((Identifier)(yyq.StackAt(2).m_value))
          .yytext,
          ((ParameterList)(yyq.StackAt(0).m_value))
          ) { }
    }

    internal class CompoundStatement_1 : CompoundStatement
    {
        public CompoundStatement_1(Parser yyq)
            : base(yyq,
          ((Statements)(yyq.StackAt(1).m_value))
          ) { }
    }

    internal class Statements_1 : Statements
    {
        public Statements_1(Parser yyq)
            : base(yyq,
          ((Statement)(yyq.StackAt(1).m_value))
          ,
          ((Statements)(yyq.StackAt(0).m_value))
          ) { }
    }

    internal class IfStatement_1 : IfStatement
    {
        public IfStatement_1(Parser yyq)
            : base(yyq,
          ((Condition)(yyq.StackAt(1).m_value))
          ,
          ((Statement)(yyq.StackAt(0).m_value))
          , null) { }
    }

    internal class IfStatement_2 : IfStatement
    {
        public IfStatement_2(Parser yyq)
            : base(yyq,
          ((Condition)(yyq.StackAt(3).m_value))
          ,
          ((Statement)(yyq.StackAt(2).m_value))
          ,
          ((Statement)(yyq.StackAt(0).m_value))
          ) { }
    }

    internal class WhileStatement_1 : WhileStatement
    {
        public WhileStatement_1(Parser yyq)
            : base(yyq,
          ((Condition)(yyq.StackAt(1).m_value))
          ,
          ((Statement)(yyq.StackAt(0).m_value))
          ) { }
    }

    internal class ForStatement_1 : ForStatement
    {
        public ForStatement_1(Parser yyq)
            : base(yyq,
          ((ExpressionOpt)(yyq.StackAt(6).m_value))
          ,
          ((ExpressionOpt)(yyq.StackAt(4).m_value))
          ,
          ((ExpressionOpt)(yyq.StackAt(2).m_value))
          ,
          ((Statement)(yyq.StackAt(0).m_value))
          ) { }
    }

    internal class Statement_1 : Statement
    {
        public Statement_1(Parser yyq)
            : base(yyq,
          ((CompoundStatement)(yyq.StackAt(0).m_value))
          ) { }
    }

    internal class Statement_2 : Statement
    {
        public Statement_2(Parser yyq)
            : base(yyq,
          ((Expression)(yyq.StackAt(1).m_value))
          ) { }
    }
    internal class BreakStatment : Statement
    {
        public BreakStatment(Parser yyq) : base(yyq) { }
    }

    internal class BreakStatment_1 : BreakStatment
    {
        public BreakStatment_1(Parser yyq) : base(yyq) { }
    }

    internal class ContinueStatement_1 : ContinueStatement
    {
        public ContinueStatement_1(Parser yyq) : base(yyq) { }
    }

    internal class ReturnStatement_1 : ReturnStatement
    {
        public ReturnStatement_1(Parser yyq)
            : base(yyq,
          ((ExpressionOpt)(yyq.StackAt(1).m_value))
          ) { }
    }

    internal class VarStatement_1 : VarStatement
    {
        public VarStatement_1(Parser yyq)
            : base(yyq,
          ((Variables)(yyq.StackAt(1).m_value))
          ) { }
    }

    internal class Condition_1 : Condition
    {
        public Condition_1(Parser yyq)
            : base(yyq,
          ((Expression)(yyq.StackAt(1).m_value))
          ) { }
    }
    internal class Variable : SYMBOL
    {
        public Variable(Parser yyq) : base(yyq) { }
        public override string yyname { get { return "Variable"; } }
        public override int yynum { get { return 89; } }
    }

    internal class ExpressionOpt_1 : ExpressionOpt
    {
        public ExpressionOpt_1(Parser yyq)
            : base(yyq,
          ((Expression)(yyq.StackAt(0).m_value))
          ) { }
    }

    internal class Expression_1 : Expression
    {
        public Expression_1(Parser yyq)
            : base(yyq,
          ((Expression)(yyq.StackAt(1).m_value))
          ) { }
    }

    internal class Expression_2 : Expression
    {
        public Expression_2(Parser yyq)
            : base(yyq,
          ((UnaryExpression)(yyq.StackAt(0).m_value))
          ) { }
    }

    internal class NewExpression_1 : NewExpression
    {
        public NewExpression_1(Parser yyq)
            : base(yyq,
          ((Identifier)(yyq.StackAt(3).m_value))
          .yytext,
          ((ArgumentListOpt)(yyq.StackAt(1).m_value))
          ) { }
    }

    internal class AssignmentExpression_1 : AssignmentExpression
    {
        public AssignmentExpression_1(Parser yyq)
            : base(yyq,
          ((MemberExpression)(yyq.StackAt(2).m_value))
          ,
          ((Expression)(yyq.StackAt(0).m_value))
          ) { }
    }

    internal class Expression_3 : Expression
    {
        public Expression_3(Parser yyq)
            : base(yyq,
          ((Expression)(yyq.StackAt(2).m_value))
          ,
          ((Expression)(yyq.StackAt(0).m_value))
          , "-") { }
    }

    internal class Expression_4 : Expression
    {
        public Expression_4(Parser yyq)
            : base(yyq,
          ((Expression)(yyq.StackAt(2).m_value))
          ,
          ((Expression)(yyq.StackAt(0).m_value))
          , "+") { }
    }

    internal class Expression_5 : Expression
    {
        public Expression_5(Parser yyq)
            : base(yyq,
          ((Expression)(yyq.StackAt(2).m_value))
          ,
          ((Expression)(yyq.StackAt(0).m_value))
          , "/") { }
    }

    internal class Expression_6 : Expression
    {
        public Expression_6(Parser yyq)
            : base(yyq,
          ((Expression)(yyq.StackAt(2).m_value))
          ,
          ((Expression)(yyq.StackAt(0).m_value))
          , "*") { }
    }

    internal class Expression_7 : Expression
    {
        public Expression_7(Parser yyq)
            : base(yyq,
          ((Expression)(yyq.StackAt(2).m_value))
          ,
          ((Expression)(yyq.StackAt(0).m_value))
          , "==") { }
    }

    internal class Expression_8 : Expression
    {
        public Expression_8(Parser yyq)
            : base(yyq,
          ((Expression)(yyq.StackAt(2).m_value))
          ,
          ((Expression)(yyq.StackAt(0).m_value))
          , "!=") { }
    }

    internal class Expression_9 : Expression
    {
        public Expression_9(Parser yyq)
            : base(yyq,
          ((Expression)(yyq.StackAt(2).m_value))
          ,
          ((Expression)(yyq.StackAt(0).m_value))
          , "<") { }
    }

    internal class Expression_10 : Expression
    {
        public Expression_10(Parser yyq)
            : base(yyq,
          ((Expression)(yyq.StackAt(2).m_value))
          ,
          ((Expression)(yyq.StackAt(0).m_value))
          , ">") { }
    }

    internal class UnaryExpression_1 : UnaryExpression
    {
        public UnaryExpression_1(Parser yyq)
            : base(yyq,
          ((MemberExpression)(yyq.StackAt(0).m_value))
          ) { }
    }

    internal class UnaryMinus_1 : UnaryMinus
    {
        public UnaryMinus_1(Parser yyq)
            : base(yyq,
          ((UnaryExpression)(yyq.StackAt(0).m_value))
          ) { }
    }

    internal class UnaryNot_1 : UnaryNot
    {
        public UnaryNot_1(Parser yyq)
            : base(yyq,
          ((UnaryExpression)(yyq.StackAt(0).m_value))
          ) { }
    }

    internal class MemberExpression_1 : MemberExpression
    {
        public MemberExpression_1(Parser yyq)
            : base(yyq,
          ((PrimaryExpression)(yyq.StackAt(0).m_value))
          ) { }
    }

    internal class ResolvingMemberExpression_1 : ResolvingMemberExpression
    {
        public ResolvingMemberExpression_1(Parser yyq)
            : base(yyq,
          ((PrimaryExpression)(yyq.StackAt(2).m_value))
          ,
          ((MemberExpression)(yyq.StackAt(0).m_value))
          ) { }
    }

    internal class ArrayMemberExpression_1 : ArrayMemberExpression
    {
        public ArrayMemberExpression_1(Parser yyq)
            : base(yyq,
          ((PrimaryExpression)(yyq.StackAt(3).m_value))
          ,
          ((Expression)(yyq.StackAt(1).m_value))
          ) { }
    }

    internal class FunctionCall_1 : FunctionCall
    {
        public FunctionCall_1(Parser yyq)
            : base(yyq,
          ((PrimaryExpression)(yyq.StackAt(3).m_value))
          ,
          ((ArgumentListOpt)(yyq.StackAt(1).m_value))
          ) { }
    }

    internal class IdnExpression_1 : IdnExpression
    {
        public IdnExpression_1(Parser yyq)
            : base(yyq,
          ((Identifier)(yyq.StackAt(0).m_value))
          .yytext) { }
    }

    internal class ConstExpression_1 : ConstExpression
    {
        public ConstExpression_1(Parser yyq)
            : base(yyq,
          ((FloatingPointLiteral)(yyq.StackAt(0).m_value))
          .yylval) { }
    }

    internal class ConstExpression_2 : ConstExpression
    {
        public ConstExpression_2(Parser yyq)
            : base(yyq,
          ((StringLiteral)(yyq.StackAt(0).m_value))
          .yytext) { }
    }

    internal class ConstArrayExpression_1 : ConstArrayExpression
    {
        public ConstArrayExpression_1(Parser yyq)
            : base(yyq,
          ((ArgumentListOpt)(yyq.StackAt(1).m_value))
          ) { }
    }

    internal class ConstExpression_3 : ConstExpression
    {
        public ConstExpression_3(Parser yyq) : base(yyq, false) { }
    }

    internal class ConstExpression_4 : ConstExpression
    {
        public ConstExpression_4(Parser yyq) : base(yyq, true) { }
    }

    internal class ConstExpression_5 : ConstExpression
    {
        public ConstExpression_5(Parser yyq) : base(yyq) { }
    }

    internal class ArgumentListOpt_1 : ArgumentListOpt
    {
        public ArgumentListOpt_1(Parser yyq)
            : base(yyq,
          ((ArgumentList)(yyq.StackAt(0).m_value))
          ) { }
    }

    internal class ArgumentList_1 : ArgumentList
    {
        public ArgumentList_1(Parser yyq)
            : base(yyq,
          ((Expression)(yyq.StackAt(0).m_value))
          ) { }
    }

    internal class ArgumentList_2 : ArgumentList
    {
        public ArgumentList_2(Parser yyq)
            : base(yyq,
          ((Expression)(yyq.StackAt(2).m_value))
          ,
          ((ArgumentList)(yyq.StackAt(0).m_value))
          ) { }
    }
    internal class yysyntax : YyParser
    {
        public override object Action(Parser yyq, SYMBOL yysym, int yyact)
        {
            switch (yyact)
            {
                case -1: break; //// keep compiler happy
            } return null;
        }

        internal class ParameterListOpt_2 : ParameterListOpt
        {
            public ParameterListOpt_2(Parser yyq) : base(yyq) { }
        }

        internal class ExpressionOpt_2 : ExpressionOpt
        {
            public ExpressionOpt_2(Parser yyq) : base(yyq) { }
        }

        internal class ArgumentListOpt_2 : ArgumentListOpt
        {
            public ArgumentListOpt_2(Parser yyq) : base(yyq) { }
        }

        internal class Statements_2 : Statements
        {
            public Statements_2(Parser yyq) : base(yyq) { }
        }

        internal class Statement_3 : Statement
        {
            public Statement_3(Parser yyq) : base(yyq) { }
        }

        internal class ExpressionOpt_3 : ExpressionOpt
        {
            public ExpressionOpt_3(Parser yyq) : base(yyq) { }
        }

        internal class Variables_1 : Variables
        {
            public Variables_1(Parser yyq) : base(yyq) { }
        }

        internal class Variables_2 : Variables
        {
            public Variables_2(Parser yyq) : base(yyq) { }
        }

        internal class Statements_3 : Statements
        {
            public Statements_3(Parser yyq) : base(yyq) { }
        }

        internal class Variable_1 : Variable
        {
            public Variable_1(Parser yyq) : base(yyq) { }
        }

        internal class Variable_2 : Variable
        {
            public Variable_2(Parser yyq) : base(yyq) { }
        }

        internal class Prog_2 : Prog
        {
            public Prog_2(Parser yyq) : base(yyq) { }
        }

        internal class ExpressionOpt_4 : ExpressionOpt
        {
            public ExpressionOpt_4(Parser yyq) : base(yyq) { }
        }

        internal class ExpressionOpt_5 : ExpressionOpt
        {
            public ExpressionOpt_5(Parser yyq) : base(yyq) { }
        }

        internal class ArgumentListOpt_3 : ArgumentListOpt
        {
            public ArgumentListOpt_3(Parser yyq) : base(yyq) { }
        }

        internal class ArgumentListOpt_4 : ArgumentListOpt
        {
            public ArgumentListOpt_4(Parser yyq) : base(yyq) { }
        }

        internal class Prog_3 : Prog
        {
            public Prog_3(Parser yyq) : base(yyq) { }
        }
        public yysyntax()
            : base()
        {
            arr = new int[] { 
101,4,6,52,0,
46,0,53,0,102,
20,103,4,12,74,
0,115,0,80,0,
114,0,111,0,103,
0,1,19,1,2,
104,18,1,752,102,
2,0,105,5,119,
1,716,106,18,1,
716,107,20,108,4,
26,80,0,97,0,
114,0,97,0,109,
0,101,0,116,0,
101,0,114,0,76,
0,105,0,115,0,
116,0,1,35,1,
2,2,0,1,714,
109,18,1,714,107,
2,0,1,690,110,
18,1,690,111,20,
112,4,20,83,0,
116,0,97,0,116,
0,101,0,109,0,
101,0,110,0,116,
0,115,0,1,32,
1,2,2,0,1,
712,113,18,1,712,
114,20,115,4,20,
73,0,100,0,101,
0,110,0,116,0,
105,0,102,0,105,
0,101,0,114,0,
1,17,1,1,2,
0,1,711,116,18,
1,711,117,21,118,
4,2,40,0,1,
57,1,1,2,0,
1,710,119,18,1,
710,114,2,0,1,
709,120,18,1,709,
121,21,122,4,16,
102,0,117,0,110,
0,99,0,116,0,
105,0,111,0,110,
0,1,56,1,1,
2,0,1,230,123,
18,1,230,117,2,
0,1,229,124,18,
1,229,125,20,126,
4,30,85,0,110,
0,97,0,114,0,
121,0,69,0,120,
0,112,0,114,0,
101,0,115,0,115,
0,105,0,111,0,
110,0,1,38,1,
2,2,0,1,227,
127,18,1,227,128,
21,129,4,2,41,
0,1,58,1,1,
2,0,1,226,130,
18,1,226,131,20,
132,4,30,65,0,
114,0,103,0,117,
0,109,0,101,0,
110,0,116,0,76,
0,105,0,115,0,
116,0,79,0,112,
0,116,0,1,52,
1,2,2,0,1,
464,133,18,1,464,
117,2,0,1,463,
134,18,1,463,135,
21,136,4,6,102,
0,111,0,114,0,
1,76,1,1,2,
0,1,462,137,18,
1,462,138,20,139,
4,34,67,0,111,
0,109,0,112,0,
111,0,117,0,110,
0,100,0,83,0,
116,0,97,0,116,
0,101,0,109,0,
101,0,110,0,116,
0,1,31,1,2,
2,0,1,461,140,
18,1,461,141,21,
142,4,2,59,0,
1,69,1,1,2,
0,1,460,143,18,
1,460,144,21,145,
4,10,98,0,114,
0,101,0,97,0,
107,0,1,80,1,
1,2,0,1,459,
146,18,1,459,141,
2,0,1,458,147,
18,1,458,148,21,
149,4,16,99,0,
111,0,110,0,116,
0,105,0,110,0,
117,0,101,0,1,
82,1,1,2,0,
1,457,150,18,1,
457,141,2,0,1,
456,151,18,1,456,
152,20,153,4,26,
69,0,120,0,112,
0,114,0,101,0,
115,0,115,0,105,
0,111,0,110,0,
79,0,112,0,116,
0,1,36,1,2,
2,0,1,694,154,
18,1,694,155,21,
156,4,2,125,0,
1,66,1,1,2,
0,1,693,157,18,
1,693,111,2,0,
1,212,158,18,1,
212,117,2,0,1,
211,159,18,1,211,
114,2,0,1,210,
160,18,1,210,161,
21,162,4,6,110,
0,101,0,119,0,
1,93,1,1,2,
0,1,665,163,18,
1,665,164,20,165,
4,18,83,0,116,
0,97,0,116,0,
101,0,109,0,101,
0,110,0,116,0,
1,23,1,2,2,
0,1,444,166,18,
1,444,167,20,168,
4,20,69,0,120,
0,112,0,114,0,
101,0,115,0,115,
0,105,0,111,0,
110,0,1,37,1,
2,2,0,1,639,
169,18,1,639,141,
2,0,1,201,170,
18,1,201,167,2,
0,1,189,171,18,
1,189,172,20,173,
4,10,77,0,105,
0,110,0,117,0,
115,0,1,12,1,
1,2,0,1,432,
174,18,1,432,175,
21,176,4,12,114,
0,101,0,116,0,
117,0,114,0,110,
0,1,84,1,1,
2,0,1,431,177,
18,1,431,141,2,
0,1,430,178,18,
1,430,179,20,180,
4,18,86,0,97,
0,114,0,105,0,
97,0,98,0,108,
0,101,0,115,0,
1,33,1,2,2,
0,1,428,181,18,
1,428,179,2,0,
1,426,182,18,1,
426,183,21,184,4,
2,44,0,1,63,
1,1,2,0,1,
425,185,18,1,425,
186,20,187,4,16,
86,0,97,0,114,
0,105,0,97,0,
98,0,108,0,101,
0,1,89,1,2,
2,0,1,640,188,
18,1,640,189,21,
190,4,2,123,0,
1,65,1,1,2,
0,1,421,191,18,
1,421,128,2,0,
1,181,192,18,1,
181,167,2,0,1,
637,193,18,1,637,
164,2,0,1,412,
194,18,1,412,167,
2,0,1,169,195,
18,1,169,196,20,
197,4,8,80,0,
108,0,117,0,115,
0,1,13,1,1,
2,0,1,162,198,
18,1,162,167,2,
0,1,400,199,18,
1,400,117,2,0,
1,399,200,18,1,
399,114,2,0,1,
398,201,18,1,398,
202,21,203,4,6,
118,0,97,0,114,
0,1,86,1,1,
2,0,1,394,204,
18,1,394,141,2,
0,1,150,205,18,
1,150,206,20,207,
4,12,68,0,105,
0,118,0,105,0,
100,0,101,0,1,
15,1,1,2,0,
1,385,208,18,1,
385,167,2,0,1,
144,209,18,1,144,
167,2,0,1,366,
210,18,1,366,211,
21,212,4,2,93,
0,1,111,1,1,
2,0,1,614,213,
18,1,614,214,21,
215,4,8,101,0,
108,0,115,0,101,
0,1,72,1,1,
2,0,1,613,216,
18,1,613,164,2,
0,1,132,217,18,
1,132,218,20,219,
4,16,77,0,117,
0,108,0,116,0,
105,0,112,0,108,
0,121,0,1,14,
1,1,2,0,1,
127,220,18,1,127,
167,2,0,1,365,
221,18,1,365,131,
2,0,1,115,222,
18,1,115,223,20,
224,4,10,69,0,
113,0,117,0,97,
0,108,0,1,6,
1,1,2,0,1,
590,225,18,1,590,
226,20,227,4,18,
67,0,111,0,110,
0,100,0,105,0,
116,0,105,0,111,
0,110,0,1,51,
1,2,2,0,1,
111,228,18,1,111,
167,2,0,1,588,
229,18,1,588,230,
21,231,4,4,105,
0,102,0,1,70,
1,1,2,0,1,
586,232,18,1,586,
164,2,0,1,346,
233,18,1,346,234,
20,235,4,32,77,
0,101,0,109,0,
98,0,101,0,114,
0,69,0,120,0,
112,0,114,0,101,
0,115,0,115,0,
105,0,111,0,110,
0,1,41,1,2,
2,0,1,564,236,
18,1,564,226,2,
0,1,560,237,18,
1,560,128,2,0,
1,99,238,18,1,
99,239,20,240,4,
16,78,0,111,0,
116,0,69,0,113,
0,117,0,97,0,
108,0,1,7,1,
1,2,0,1,337,
241,18,1,337,242,
21,243,4,2,46,
0,1,108,1,1,
2,0,1,96,244,
18,1,96,167,2,
0,1,551,245,18,
1,551,167,2,0,
1,497,246,18,1,
497,152,2,0,1,
82,247,18,1,82,
167,2,0,1,84,
248,18,1,84,249,
20,250,4,8,76,
0,101,0,115,0,
115,0,1,8,1,
1,2,0,1,322,
251,18,1,322,211,
2,0,1,321,252,
18,1,321,167,2,
0,1,720,253,18,
1,720,138,2,0,
1,312,254,18,1,
312,255,21,256,4,
2,91,0,1,110,
1,1,2,0,1,
70,257,18,1,70,
258,20,259,4,14,
71,0,114,0,101,
0,97,0,116,0,
101,0,114,0,1,
9,1,1,2,0,
1,69,260,18,1,
69,167,2,0,1,
708,261,18,1,708,
164,2,0,1,539,
262,18,1,539,117,
2,0,1,538,263,
18,1,538,264,21,
265,4,10,119,0,
104,0,105,0,108,
0,101,0,1,74,
1,1,2,0,1,
536,266,18,1,536,
164,2,0,1,57,
267,18,1,57,268,
20,269,4,20,65,
0,115,0,115,0,
105,0,103,0,110,
0,109,0,101,0,
110,0,116,0,1,
11,1,1,2,0,
1,56,270,18,1,
56,234,2,0,1,
515,271,18,1,515,
128,2,0,1,514,
272,18,1,514,152,
2,0,1,53,273,
18,1,53,234,2,
0,1,721,274,18,
1,721,275,20,276,
4,14,69,0,108,
0,101,0,109,0,
101,0,110,0,116,
0,1,21,1,2,
2,0,1,51,277,
18,1,51,125,2,
0,1,713,278,18,
1,713,183,2,0,
1,41,279,18,1,
41,172,2,0,1,
39,280,18,1,39,
125,2,0,1,498,
281,18,1,498,141,
2,0,1,480,282,
18,1,480,152,2,
0,1,752,104,1,
751,283,18,1,751,
284,20,285,4,8,
80,0,114,0,111,
0,103,0,1,20,
1,2,2,0,1,
749,286,18,1,749,
284,2,0,1,30,
287,18,1,30,288,
20,289,4,6,78,
0,111,0,116,0,
1,10,1,1,2,
0,1,28,290,18,
1,28,128,2,0,
1,27,291,18,1,
27,131,2,0,1,
718,292,18,1,718,
128,2,0,1,717,
293,18,1,717,294,
20,295,4,32,80,
0,97,0,114,0,
97,0,109,0,101,
0,116,0,101,0,
114,0,76,0,105,
0,115,0,116,0,
79,0,112,0,116,
0,1,34,1,2,
2,0,1,753,296,
18,1,753,297,23,
298,4,6,69,0,
79,0,70,0,1,
2,1,6,2,0,
1,251,299,18,1,
251,128,2,0,1,
481,300,18,1,481,
141,2,0,1,19,
301,18,1,19,302,
20,303,4,24,65,
0,114,0,103,0,
117,0,109,0,101,
0,110,0,116,0,
76,0,105,0,115,
0,116,0,1,53,
1,2,2,0,1,
17,304,18,1,17,
117,2,0,1,16,
305,18,1,16,306,
20,307,4,34,80,
0,114,0,105,0,
109,0,97,0,114,
0,121,0,69,0,
120,0,112,0,114,
0,101,0,115,0,
115,0,105,0,111,
0,110,0,1,46,
1,2,2,0,1,
15,308,18,1,15,
114,2,0,1,14,
309,18,1,14,310,
20,311,4,40,70,
0,108,0,111,0,
97,0,116,0,105,
0,110,0,103,0,
80,0,111,0,105,
0,110,0,116,0,
76,0,105,0,116,
0,101,0,114,0,
97,0,108,0,1,
3,1,1,2,0,
1,13,312,18,1,
13,313,20,314,4,
26,83,0,116,0,
114,0,105,0,110,
0,103,0,76,0,
105,0,116,0,101,
0,114,0,97,0,
108,0,1,5,1,
1,2,0,1,242,
315,18,1,242,167,
2,0,1,7,316,
18,1,7,302,2,
0,1,6,317,18,
1,6,183,2,0,
1,5,318,18,1,
5,167,2,0,1,
4,319,18,1,4,
255,2,0,1,3,
320,18,1,3,321,
21,322,4,10,102,
0,97,0,108,0,
115,0,101,0,1,
118,1,1,2,0,
1,2,323,18,1,
2,324,21,325,4,
8,116,0,114,0,
117,0,101,0,1,
120,1,1,2,0,
1,1,326,18,1,
1,327,21,328,4,
8,110,0,117,0,
108,0,108,0,1,
122,1,1,2,0,
1,0,329,18,1,
0,0,2,0,330,
5,22,190,189,156,
155,325,324,176,175,
162,161,203,202,231,
230,122,121,256,255,
212,211,145,144,215,
214,322,321,118,117,
129,128,265,264,184,
183,328,327,243,242,
142,141,149,148,136,
135,331,5,140,1,
81,332,19,333,4,
30,66,0,114,0,
101,0,97,0,107,
0,83,0,116,0,
97,0,116,0,109,
0,101,0,110,0,
116,0,95,0,49,
0,1,81,334,5,
8,1,665,335,16,
0,163,1,640,336,
16,0,163,1,614,
337,16,0,193,1,
590,338,16,0,216,
1,564,339,16,0,
232,1,515,340,16,
0,266,1,721,341,
16,0,261,1,0,
342,16,0,261,1,
143,343,19,344,4,
12,80,0,114,0,
111,0,103,0,95,
0,51,0,1,143,
345,5,2,1,721,
346,16,0,286,1,
0,347,16,0,283,
1,142,348,19,349,
4,34,65,0,114,
0,103,0,117,0,
109,0,101,0,110,
0,116,0,76,0,
105,0,115,0,116,
0,79,0,112,0,
116,0,95,0,52,
0,1,142,350,5,
3,1,17,351,16,
0,291,1,4,352,
16,0,221,1,212,
353,16,0,130,1,
141,354,19,355,4,
34,65,0,114,0,
103,0,117,0,109,
0,101,0,110,0,
116,0,76,0,105,
0,115,0,116,0,
79,0,112,0,116,
0,95,0,51,0,
1,141,350,1,140,
356,19,357,4,30,
69,0,120,0,112,
0,114,0,101,0,
115,0,115,0,105,
0,111,0,110,0,
79,0,112,0,116,
0,95,0,53,0,
1,140,358,5,4,
1,498,359,16,0,
272,1,481,360,16,
0,246,1,432,361,
16,0,151,1,464,
362,16,0,282,1,
139,363,19,364,4,
30,69,0,120,0,
112,0,114,0,101,
0,115,0,115,0,
105,0,111,0,110,
0,79,0,112,0,
116,0,95,0,52,
0,1,139,358,1,
138,365,19,366,4,
12,80,0,114,0,
111,0,103,0,95,
0,50,0,1,138,
345,1,137,367,19,
368,4,20,86,0,
97,0,114,0,105,
0,97,0,98,0,
108,0,101,0,95,
0,50,0,1,137,
369,5,2,1,426,
370,16,0,185,1,
398,371,16,0,185,
1,136,372,19,373,
4,20,86,0,97,
0,114,0,105,0,
97,0,98,0,108,
0,101,0,95,0,
49,0,1,136,369,
1,135,374,19,375,
4,24,83,0,116,
0,97,0,116,0,
101,0,109,0,101,
0,110,0,116,0,
115,0,95,0,51,
0,1,135,376,5,
2,1,665,377,16,
0,110,1,640,378,
16,0,157,1,134,
379,19,380,4,22,
86,0,97,0,114,
0,105,0,97,0,
98,0,108,0,101,
0,115,0,95,0,
50,0,1,134,381,
5,2,1,426,382,
16,0,181,1,398,
383,16,0,178,1,
133,384,19,385,4,
22,86,0,97,0,
114,0,105,0,97,
0,98,0,108,0,
101,0,115,0,95,
0,49,0,1,133,
381,1,132,386,19,
387,4,30,69,0,
120,0,112,0,114,
0,101,0,115,0,
115,0,105,0,111,
0,110,0,79,0,
112,0,116,0,95,
0,51,0,1,132,
358,1,131,388,19,
389,4,22,83,0,
116,0,97,0,116,
0,101,0,109,0,
101,0,110,0,116,
0,95,0,51,0,
1,131,334,1,130,
390,19,391,4,24,
83,0,116,0,97,
0,116,0,101,0,
109,0,101,0,110,
0,116,0,115,0,
95,0,50,0,1,
130,376,1,129,392,
19,393,4,34,65,
0,114,0,103,0,
117,0,109,0,101,
0,110,0,116,0,
76,0,105,0,115,
0,116,0,79,0,
112,0,116,0,95,
0,50,0,1,129,
350,1,128,394,19,
395,4,30,69,0,
120,0,112,0,114,
0,101,0,115,0,
115,0,105,0,111,
0,110,0,79,0,
112,0,116,0,95,
0,50,0,1,128,
358,1,127,396,19,
397,4,36,80,0,
97,0,114,0,97,
0,109,0,101,0,
116,0,101,0,114,
0,76,0,105,0,
115,0,116,0,79,
0,112,0,116,0,
95,0,50,0,1,
127,398,5,1,1,
711,399,16,0,293,
1,126,400,19,401,
4,28,65,0,114,
0,103,0,117,0,
109,0,101,0,110,
0,116,0,76,0,
105,0,115,0,116,
0,95,0,50,0,
1,126,402,5,4,
1,6,403,16,0,
316,1,17,404,16,
0,301,1,4,405,
16,0,301,1,212,
406,16,0,301,1,
125,407,19,408,4,
28,65,0,114,0,
103,0,117,0,109,
0,101,0,110,0,
116,0,76,0,105,
0,115,0,116,0,
95,0,49,0,1,
125,402,1,124,409,
19,410,4,34,65,
0,114,0,103,0,
117,0,109,0,101,
0,110,0,116,0,
76,0,105,0,115,
0,116,0,79,0,
112,0,116,0,95,
0,49,0,1,124,
350,1,123,411,19,
412,4,34,67,0,
111,0,110,0,115,
0,116,0,69,0,
120,0,112,0,114,
0,101,0,115,0,
115,0,105,0,111,
0,110,0,95,0,
53,0,1,123,413,
5,32,1,515,414,
16,0,305,1,132,
415,16,0,305,1,
230,416,16,0,305,
1,464,417,16,0,
305,1,432,418,16,
0,305,1,400,419,
16,0,305,1,84,
420,16,0,305,1,
30,421,16,0,305,
1,312,422,16,0,
305,1,640,423,16,
0,305,1,169,424,
16,0,305,1,590,
425,16,0,305,1,
212,426,16,0,305,
1,70,427,16,0,
305,1,539,428,16,
0,305,1,115,429,
16,0,305,1,17,
430,16,0,305,1,
721,431,16,0,305,
1,498,432,16,0,
305,1,6,433,16,
0,305,1,481,434,
16,0,305,1,57,
435,16,0,305,1,
150,436,16,0,305,
1,337,437,16,0,
305,1,665,438,16,
0,305,1,41,439,
16,0,305,1,99,
440,16,0,305,1,
4,441,16,0,305,
1,614,442,16,0,
305,1,0,443,16,
0,305,1,189,444,
16,0,305,1,564,
445,16,0,305,1,
122,446,19,328,1,
122,447,5,47,1,
212,448,16,0,326,
1,639,449,17,450,
15,451,4,20,37,
0,83,0,116,0,
97,0,116,0,101,
0,109,0,101,0,
110,0,116,0,1,
-1,1,5,164,1,
1,1,1,452,22,
1,13,1,721,453,
16,0,326,1,637,
454,17,455,15,456,
4,24,37,0,73,
0,102,0,83,0,
116,0,97,0,116,
0,101,0,109,0,
101,0,110,0,116,
0,1,-1,1,5,
457,20,458,4,26,
73,0,102,0,83,
0,116,0,97,0,
116,0,101,0,109,
0,101,0,110,0,
116,0,95,0,50,
0,1,73,1,3,
1,6,1,5,459,
22,1,15,1,99,
460,16,0,326,1,
312,461,16,0,326,
1,400,462,16,0,
326,1,515,463,16,
0,326,1,84,464,
16,0,326,1,189,
465,16,0,326,1,
614,466,16,0,326,
1,720,467,17,468,
15,469,4,18,37,
0,70,0,117,0,
110,0,99,0,116,
0,105,0,111,0,
110,0,1,-1,1,
5,470,20,471,4,
20,70,0,117,0,
110,0,99,0,116,
0,105,0,111,0,
110,0,95,0,49,
0,1,59,1,3,
1,7,1,6,472,
22,1,4,1,394,
473,17,474,15,451,
1,-1,1,5,475,
20,476,4,22,83,
0,116,0,97,0,
116,0,101,0,109,
0,101,0,110,0,
116,0,95,0,50,
0,1,79,1,3,
1,3,1,2,477,
22,1,19,1,70,
478,16,0,326,1,
708,479,17,480,15,
481,4,16,37,0,
69,0,108,0,101,
0,109,0,101,0,
110,0,116,0,1,
-1,1,5,482,20,
483,4,18,69,0,
108,0,101,0,109,
0,101,0,110,0,
116,0,95,0,49,
0,1,60,1,3,
1,2,1,1,484,
22,1,5,1,169,
485,16,0,326,1,
57,486,16,0,326,
1,590,487,16,0,
326,1,481,488,16,
0,326,1,694,489,
17,490,15,491,4,
36,37,0,67,0,
111,0,109,0,112,
0,111,0,117,0,
110,0,100,0,83,
0,116,0,97,0,
116,0,101,0,109,
0,101,0,110,0,
116,0,1,-1,1,
5,492,20,493,4,
38,67,0,111,0,
109,0,112,0,111,
0,117,0,110,0,
100,0,83,0,116,
0,97,0,116,0,
101,0,109,0,101,
0,110,0,116,0,
95,0,49,0,1,
67,1,3,1,4,
1,3,494,22,1,
10,1,586,495,17,
496,15,497,4,30,
37,0,87,0,104,
0,105,0,108,0,
101,0,83,0,116,
0,97,0,116,0,
101,0,109,0,101,
0,110,0,116,0,
1,-1,1,5,498,
20,499,4,32,87,
0,104,0,105,0,
108,0,101,0,83,
0,116,0,97,0,
116,0,101,0,109,
0,101,0,110,0,
116,0,95,0,49,
0,1,75,1,3,
1,4,1,3,500,
22,1,16,1,457,
501,17,502,15,503,
4,32,37,0,82,
0,101,0,116,0,
117,0,114,0,110,
0,83,0,116,0,
97,0,116,0,101,
0,109,0,101,0,
110,0,116,0,1,
-1,1,5,504,20,
505,4,34,82,0,
101,0,116,0,117,
0,114,0,110,0,
83,0,116,0,97,
0,116,0,101,0,
109,0,101,0,110,
0,116,0,95,0,
49,0,1,85,1,
3,1,4,1,3,
506,22,1,22,1,
560,507,17,508,15,
509,4,20,37,0,
67,0,111,0,110,
0,100,0,105,0,
116,0,105,0,111,
0,110,0,1,-1,
1,5,510,20,511,
4,22,67,0,111,
0,110,0,100,0,
105,0,116,0,105,
0,111,0,110,0,
95,0,49,0,1,
88,1,3,1,4,
1,3,512,22,1,
24,1,150,513,16,
0,326,1,41,514,
16,0,326,1,132,
515,16,0,326,1,
464,516,16,0,326,
1,462,517,17,518,
15,451,1,-1,1,
5,519,20,520,4,
22,83,0,116,0,
97,0,116,0,101,
0,109,0,101,0,
110,0,116,0,95,
0,49,0,1,78,
1,3,1,2,1,
1,521,22,1,18,
1,461,522,17,523,
15,524,4,28,37,
0,66,0,114,0,
101,0,97,0,107,
0,83,0,116,0,
97,0,116,0,109,
0,101,0,110,0,
116,0,1,-1,1,
5,525,20,333,1,
81,1,3,1,3,
1,2,526,22,1,
20,1,459,527,17,
528,15,529,4,36,
37,0,67,0,111,
0,110,0,116,0,
105,0,110,0,117,
0,101,0,83,0,
116,0,97,0,116,
0,101,0,109,0,
101,0,110,0,116,
0,1,-1,1,5,
530,20,531,4,38,
67,0,111,0,110,
0,116,0,105,0,
110,0,117,0,101,
0,83,0,116,0,
97,0,116,0,101,
0,109,0,101,0,
110,0,116,0,95,
0,49,0,1,83,
1,3,1,3,1,
2,532,22,1,21,
1,30,533,16,0,
326,1,564,534,16,
0,326,1,230,535,
16,0,326,1,665,
536,16,0,326,1,
539,537,16,0,326,
1,640,538,16,0,
326,1,17,539,16,
0,326,1,337,540,
16,0,326,1,498,
541,16,0,326,1,
613,542,17,543,15,
456,1,-1,1,5,
544,20,545,4,26,
73,0,102,0,83,
0,116,0,97,0,
116,0,101,0,109,
0,101,0,110,0,
116,0,95,0,49,
0,1,71,1,3,
1,4,1,3,546,
22,1,14,1,4,
547,16,0,326,1,
115,548,16,0,326,
1,6,549,16,0,
326,1,432,550,16,
0,326,1,431,551,
17,552,15,553,4,
26,37,0,86,0,
97,0,114,0,83,
0,116,0,97,0,
116,0,101,0,109,
0,101,0,110,0,
116,0,1,-1,1,
5,554,20,555,4,
28,86,0,97,0,
114,0,83,0,116,
0,97,0,116,0,
101,0,109,0,101,
0,110,0,116,0,
95,0,49,0,1,
87,1,3,1,4,
1,3,556,22,1,
23,1,536,557,17,
558,15,559,4,26,
37,0,70,0,111,
0,114,0,83,0,
116,0,97,0,116,
0,101,0,109,0,
101,0,110,0,116,
0,1,-1,1,5,
560,20,561,4,28,
70,0,111,0,114,
0,83,0,116,0,
97,0,116,0,101,
0,109,0,101,0,
110,0,116,0,95,
0,49,0,1,77,
1,3,1,10,1,
9,562,22,1,17,
1,0,563,16,0,
326,1,121,564,19,
565,4,34,67,0,
111,0,110,0,115,
0,116,0,69,0,
120,0,112,0,114,
0,101,0,115,0,
115,0,105,0,111,
0,110,0,95,0,
52,0,1,121,413,
1,120,566,19,325,
1,120,567,5,47,
1,212,568,16,0,
323,1,639,449,1,
721,569,16,0,323,
1,637,454,1,99,
570,16,0,323,1,
312,571,16,0,323,
1,400,572,16,0,
323,1,515,573,16,
0,323,1,84,574,
16,0,323,1,189,
575,16,0,323,1,
614,576,16,0,323,
1,720,467,1,394,
473,1,70,577,16,
0,323,1,708,479,
1,169,578,16,0,
323,1,57,579,16,
0,323,1,590,580,
16,0,323,1,481,
581,16,0,323,1,
694,489,1,586,495,
1,457,501,1,560,
507,1,150,582,16,
0,323,1,41,583,
16,0,323,1,132,
584,16,0,323,1,
464,585,16,0,323,
1,462,517,1,461,
522,1,459,527,1,
30,586,16,0,323,
1,564,587,16,0,
323,1,230,588,16,
0,323,1,665,589,
16,0,323,1,539,
590,16,0,323,1,
640,591,16,0,323,
1,17,592,16,0,
323,1,337,593,16,
0,323,1,498,594,
16,0,323,1,613,
542,1,4,595,16,
0,323,1,115,596,
16,0,323,1,6,
597,16,0,323,1,
432,598,16,0,323,
1,431,551,1,536,
557,1,0,599,16,
0,323,1,119,600,
19,601,4,34,67,
0,111,0,110,0,
115,0,116,0,69,
0,120,0,112,0,
114,0,101,0,115,
0,115,0,105,0,
111,0,110,0,95,
0,51,0,1,119,
413,1,118,602,19,
322,1,118,603,5,
47,1,212,604,16,
0,320,1,639,449,
1,721,605,16,0,
320,1,637,454,1,
99,606,16,0,320,
1,312,607,16,0,
320,1,400,608,16,
0,320,1,515,609,
16,0,320,1,84,
610,16,0,320,1,
189,611,16,0,320,
1,614,612,16,0,
320,1,720,467,1,
394,473,1,70,613,
16,0,320,1,708,
479,1,169,614,16,
0,320,1,57,615,
16,0,320,1,590,
616,16,0,320,1,
481,617,16,0,320,
1,694,489,1,586,
495,1,457,501,1,
560,507,1,150,618,
16,0,320,1,41,
619,16,0,320,1,
132,620,16,0,320,
1,464,621,16,0,
320,1,462,517,1,
461,522,1,459,527,
1,30,622,16,0,
320,1,564,623,16,
0,320,1,230,624,
16,0,320,1,665,
625,16,0,320,1,
539,626,16,0,320,
1,640,627,16,0,
320,1,17,628,16,
0,320,1,337,629,
16,0,320,1,498,
630,16,0,320,1,
613,542,1,4,631,
16,0,320,1,115,
632,16,0,320,1,
6,633,16,0,320,
1,432,634,16,0,
320,1,431,551,1,
536,557,1,0,635,
16,0,320,1,117,
636,19,637,4,44,
67,0,111,0,110,
0,115,0,116,0,
65,0,114,0,114,
0,97,0,121,0,
69,0,120,0,112,
0,114,0,101,0,
115,0,115,0,105,
0,111,0,110,0,
95,0,49,0,1,
117,413,1,116,638,
19,639,4,34,67,
0,111,0,110,0,
115,0,116,0,69,
0,120,0,112,0,
114,0,101,0,115,
0,115,0,105,0,
111,0,110,0,95,
0,50,0,1,116,
413,1,115,640,19,
641,4,34,67,0,
111,0,110,0,115,
0,116,0,69,0,
120,0,112,0,114,
0,101,0,115,0,
115,0,105,0,111,
0,110,0,95,0,
49,0,1,115,413,
1,114,642,19,643,
4,30,73,0,100,
0,110,0,69,0,
120,0,112,0,114,
0,101,0,115,0,
115,0,105,0,111,
0,110,0,95,0,
49,0,1,114,413,
1,113,644,19,645,
4,28,70,0,117,
0,110,0,99,0,
116,0,105,0,111,
0,110,0,67,0,
97,0,108,0,108,
0,95,0,49,0,
1,113,646,5,32,
1,515,647,16,0,
270,1,132,648,16,
0,270,1,230,649,
16,0,270,1,464,
650,16,0,270,1,
432,651,16,0,270,
1,400,652,16,0,
270,1,84,653,16,
0,270,1,30,654,
16,0,273,1,312,
655,16,0,270,1,
640,656,16,0,270,
1,169,657,16,0,
270,1,590,658,16,
0,270,1,212,659,
16,0,270,1,70,
660,16,0,270,1,
539,661,16,0,270,
1,115,662,16,0,
270,1,17,663,16,
0,270,1,721,664,
16,0,270,1,498,
665,16,0,270,1,
6,666,16,0,270,
1,481,667,16,0,
270,1,57,668,16,
0,270,1,150,669,
16,0,270,1,337,
670,16,0,233,1,
665,671,16,0,270,
1,41,672,16,0,
273,1,99,673,16,
0,270,1,4,674,
16,0,270,1,614,
675,16,0,270,1,
0,676,16,0,270,
1,189,677,16,0,
270,1,564,678,16,
0,270,1,112,679,
19,680,4,46,65,
0,114,0,114,0,
97,0,121,0,77,
0,101,0,109,0,
98,0,101,0,114,
0,69,0,120,0,
112,0,114,0,101,
0,115,0,115,0,
105,0,111,0,110,
0,95,0,49,0,
1,112,646,1,111,
681,19,212,1,111,
682,5,35,1,212,
683,17,684,15,685,
4,32,37,0,65,
0,114,0,103,0,
117,0,109,0,101,
0,110,0,116,0,
76,0,105,0,115,
0,116,0,79,0,
112,0,116,0,1,
-1,1,5,131,1,
0,1,0,686,22,
1,57,1,96,687,
17,688,15,689,4,
22,37,0,69,0,
120,0,112,0,114,
0,101,0,115,0,
115,0,105,0,111,
0,110,0,1,-1,
1,5,690,20,691,
4,24,69,0,120,
0,112,0,114,0,
101,0,115,0,115,
0,105,0,111,0,
110,0,95,0,57,
0,1,102,1,3,
1,4,1,3,692,
22,1,41,1,201,
693,17,694,15,689,
1,-1,1,5,695,
20,696,4,24,69,
0,120,0,112,0,
114,0,101,0,115,
0,115,0,105,0,
111,0,110,0,95,
0,51,0,1,96,
1,3,1,4,1,
3,697,22,1,35,
1,82,698,17,699,
15,689,1,-1,1,
5,700,20,701,4,
26,69,0,120,0,
112,0,114,0,101,
0,115,0,115,0,
105,0,111,0,110,
0,95,0,49,0,
48,0,1,103,1,
3,1,4,1,3,
702,22,1,42,1,
181,703,17,704,15,
689,1,-1,1,5,
705,20,706,4,24,
69,0,120,0,112,
0,114,0,101,0,
115,0,115,0,105,
0,111,0,110,0,
95,0,52,0,1,
97,1,3,1,4,
1,3,707,22,1,
36,1,69,708,17,
709,15,710,4,42,
37,0,65,0,115,
0,115,0,105,0,
103,0,110,0,109,
0,101,0,110,0,
116,0,69,0,120,
0,112,0,114,0,
101,0,115,0,115,
0,105,0,111,0,
110,0,1,-1,1,
5,711,20,712,4,
44,65,0,115,0,
115,0,105,0,103,
0,110,0,109,0,
101,0,110,0,116,
0,69,0,120,0,
112,0,114,0,101,
0,115,0,115,0,
105,0,111,0,110,
0,95,0,49,0,
1,95,1,3,1,
4,1,3,713,22,
1,34,1,56,714,
17,715,15,716,4,
32,37,0,85,0,
110,0,97,0,114,
0,121,0,69,0,
120,0,112,0,114,
0,101,0,115,0,
115,0,105,0,111,
0,110,0,1,-1,
1,5,717,20,718,
4,34,85,0,110,
0,97,0,114,0,
121,0,69,0,120,
0,112,0,114,0,
101,0,115,0,115,
0,105,0,111,0,
110,0,95,0,49,
0,1,104,1,3,
1,2,1,1,719,
22,1,43,1,162,
720,17,721,15,689,
1,-1,1,5,722,
20,723,4,24,69,
0,120,0,112,0,
114,0,101,0,115,
0,115,0,105,0,
111,0,110,0,95,
0,53,0,1,98,
1,3,1,4,1,
3,724,22,1,37,
1,53,725,17,715,
1,1,719,1,51,
726,17,727,15,728,
4,22,37,0,85,
0,110,0,97,0,
114,0,121,0,77,
0,105,0,110,0,
117,0,115,0,1,
-1,1,5,729,20,
730,4,24,85,0,
110,0,97,0,114,
0,121,0,77,0,
105,0,110,0,117,
0,115,0,95,0,
49,0,1,105,1,
3,1,3,1,2,
731,22,1,44,1,
251,732,17,733,15,
689,1,-1,1,5,
734,20,735,4,24,
69,0,120,0,112,
0,114,0,101,0,
115,0,115,0,105,
0,111,0,110,0,
95,0,49,0,1,
91,1,3,1,4,
1,3,736,22,1,
31,1,366,737,17,
738,15,739,4,42,
37,0,67,0,111,
0,110,0,115,0,
116,0,65,0,114,
0,114,0,97,0,
121,0,69,0,120,
0,112,0,114,0,
101,0,115,0,115,
0,105,0,111,0,
110,0,1,-1,1,
5,740,20,637,1,
117,1,3,1,4,
1,3,741,22,1,
53,1,365,742,16,
0,210,1,39,743,
17,744,15,745,4,
18,37,0,85,0,
110,0,97,0,114,
0,121,0,78,0,
111,0,116,0,1,
-1,1,5,746,20,
747,4,20,85,0,
110,0,97,0,114,
0,121,0,78,0,
111,0,116,0,95,
0,49,0,1,106,
1,3,1,3,1,
2,748,22,1,45,
1,144,749,17,750,
15,689,1,-1,1,
5,751,20,752,4,
24,69,0,120,0,
112,0,114,0,101,
0,115,0,115,0,
105,0,111,0,110,
0,95,0,54,0,
1,99,1,3,1,
4,1,3,753,22,
1,38,1,28,754,
17,755,15,756,4,
26,37,0,70,0,
117,0,110,0,99,
0,116,0,105,0,
111,0,110,0,67,
0,97,0,108,0,
108,0,1,-1,1,
5,757,20,645,1,
113,1,3,1,5,
1,4,758,22,1,
49,1,346,759,17,
760,15,761,4,52,
37,0,82,0,101,
0,115,0,111,0,
108,0,118,0,105,
0,110,0,103,0,
77,0,101,0,109,
0,98,0,101,0,
114,0,69,0,120,
0,112,0,114,0,
101,0,115,0,115,
0,105,0,111,0,
110,0,1,-1,1,
5,762,20,763,4,
54,82,0,101,0,
115,0,111,0,108,
0,118,0,105,0,
110,0,103,0,77,
0,101,0,109,0,
98,0,101,0,114,
0,69,0,120,0,
112,0,114,0,101,
0,115,0,115,0,
105,0,111,0,110,
0,95,0,49,0,
1,109,1,3,1,
4,1,3,764,22,
1,47,1,229,765,
17,766,15,689,1,
-1,1,5,767,20,
768,4,24,69,0,
120,0,112,0,114,
0,101,0,115,0,
115,0,105,0,111,
0,110,0,95,0,
50,0,1,92,1,
3,1,2,1,1,
769,22,1,32,1,
13,770,17,771,15,
772,4,32,37,0,
67,0,111,0,110,
0,115,0,116,0,
69,0,120,0,112,
0,114,0,101,0,
115,0,115,0,105,
0,111,0,110,0,
1,-1,1,5,773,
20,639,1,116,1,
3,1,2,1,1,
774,22,1,52,1,
127,775,17,776,15,
689,1,-1,1,5,
777,20,778,4,24,
69,0,120,0,112,
0,114,0,101,0,
115,0,115,0,105,
0,111,0,110,0,
95,0,55,0,1,
100,1,3,1,4,
1,3,779,22,1,
39,1,19,780,17,
781,15,685,1,-1,
1,5,782,20,410,
1,124,1,3,1,
2,1,1,783,22,
1,58,1,17,784,
17,785,15,685,1,
-1,1,5,131,1,
0,1,0,686,1,
16,786,17,787,15,
788,4,34,37,0,
77,0,101,0,109,
0,98,0,101,0,
114,0,69,0,120,
0,112,0,114,0,
101,0,115,0,115,
0,105,0,111,0,
110,0,1,-1,1,
5,789,20,790,4,
36,77,0,101,0,
109,0,98,0,101,
0,114,0,69,0,
120,0,112,0,114,
0,101,0,115,0,
115,0,105,0,111,
0,110,0,95,0,
49,0,1,107,1,
3,1,2,1,1,
791,22,1,46,1,
15,792,17,793,15,
794,4,28,37,0,
73,0,100,0,110,
0,69,0,120,0,
112,0,114,0,101,
0,115,0,115,0,
105,0,111,0,110,
0,1,-1,1,5,
795,20,643,1,114,
1,3,1,2,1,
1,796,22,1,50,
1,14,797,17,798,
15,772,1,-1,1,
5,799,20,641,1,
115,1,3,1,2,
1,1,800,22,1,
51,1,227,801,17,
802,15,803,4,28,
37,0,78,0,101,
0,119,0,69,0,
120,0,112,0,114,
0,101,0,115,0,
115,0,105,0,111,
0,110,0,1,-1,
1,5,804,20,805,
4,30,78,0,101,
0,119,0,69,0,
120,0,112,0,114,
0,101,0,115,0,
115,0,105,0,111,
0,110,0,95,0,
49,0,1,94,1,
3,1,6,1,5,
806,22,1,33,1,
1,807,17,808,15,
772,1,-1,1,5,
809,20,412,1,123,
1,3,1,2,1,
1,810,22,1,56,
1,111,811,17,812,
15,689,1,-1,1,
5,813,20,814,4,
24,69,0,120,0,
112,0,114,0,101,
0,115,0,115,0,
105,0,111,0,110,
0,95,0,56,0,
1,101,1,3,1,
4,1,3,815,22,
1,40,1,7,816,
17,817,15,818,4,
26,37,0,65,0,
114,0,103,0,117,
0,109,0,101,0,
110,0,116,0,76,
0,105,0,115,0,
116,0,1,-1,1,
5,819,20,401,1,
126,1,3,1,4,
1,3,820,22,1,
60,1,5,821,17,
822,15,818,1,-1,
1,5,823,20,408,
1,125,1,3,1,
2,1,1,824,22,
1,59,1,4,825,
17,826,15,685,1,
-1,1,5,131,1,
0,1,0,686,1,
3,827,17,828,15,
772,1,-1,1,5,
829,20,601,1,119,
1,3,1,2,1,
1,830,22,1,54,
1,2,831,17,832,
15,772,1,-1,1,
5,833,20,565,1,
121,1,3,1,2,
1,1,834,22,1,
55,1,322,835,17,
836,15,837,4,44,
37,0,65,0,114,
0,114,0,97,0,
121,0,77,0,101,
0,109,0,98,0,
101,0,114,0,69,
0,120,0,112,0,
114,0,101,0,115,
0,115,0,105,0,
111,0,110,0,1,
-1,1,5,838,20,
680,1,112,1,3,
1,5,1,4,839,
22,1,48,1,321,
840,16,0,251,1,
110,841,19,256,1,
110,842,5,55,1,
212,843,16,0,319,
1,639,449,1,721,
844,16,0,319,1,
637,454,1,99,845,
16,0,319,1,312,
846,16,0,319,1,
400,847,16,0,319,
1,515,848,16,0,
319,1,84,849,16,
0,319,1,189,850,
16,0,319,1,614,
851,16,0,319,1,
720,467,1,394,473,
1,70,852,16,0,
319,1,708,479,1,
169,853,16,0,319,
1,366,737,1,57,
854,16,0,319,1,
590,855,16,0,319,
1,481,856,16,0,
319,1,694,489,1,
586,495,1,457,501,
1,560,507,1,150,
857,16,0,319,1,
41,858,16,0,319,
1,132,859,16,0,
319,1,464,860,16,
0,319,1,462,517,
1,461,522,1,459,
527,1,30,861,16,
0,319,1,564,862,
16,0,319,1,230,
863,16,0,319,1,
14,797,1,665,864,
16,0,319,1,539,
865,16,0,319,1,
640,866,16,0,319,
1,13,770,1,16,
867,16,0,254,1,
17,868,16,0,319,
1,337,869,16,0,
319,1,15,792,1,
498,870,16,0,319,
1,613,542,1,4,
871,16,0,319,1,
115,872,16,0,319,
1,1,807,1,6,
873,16,0,319,1,
3,827,1,432,874,
16,0,319,1,431,
551,1,2,831,1,
536,557,1,0,875,
16,0,319,1,109,
876,19,763,1,109,
646,1,108,877,19,
243,1,108,878,5,
8,1,366,737,1,
16,879,16,0,241,
1,15,792,1,14,
797,1,13,770,1,
3,827,1,2,831,
1,1,807,1,107,
880,19,790,1,107,
646,1,106,881,19,
747,1,106,882,5,
31,1,515,883,16,
0,124,1,132,884,
16,0,124,1,230,
885,16,0,124,1,
464,886,16,0,124,
1,432,887,16,0,
124,1,400,888,16,
0,124,1,84,889,
16,0,124,1,30,
890,16,0,280,1,
312,891,16,0,124,
1,640,892,16,0,
124,1,169,893,16,
0,124,1,590,894,
16,0,124,1,212,
895,16,0,124,1,
70,896,16,0,124,
1,539,897,16,0,
124,1,115,898,16,
0,124,1,17,899,
16,0,124,1,721,
900,16,0,124,1,
498,901,16,0,124,
1,481,902,16,0,
124,1,57,903,16,
0,124,1,150,904,
16,0,124,1,6,
905,16,0,124,1,
665,906,16,0,124,
1,41,907,16,0,
277,1,99,908,16,
0,124,1,4,909,
16,0,124,1,614,
910,16,0,124,1,
0,911,16,0,124,
1,189,912,16,0,
124,1,564,913,16,
0,124,1,105,914,
19,730,1,105,882,
1,104,915,19,718,
1,104,882,1,103,
916,19,701,1,103,
917,5,29,1,515,
918,16,0,208,1,
132,919,16,0,209,
1,230,920,16,0,
315,1,464,921,16,
0,166,1,432,922,
16,0,166,1,400,
923,16,0,194,1,
84,924,16,0,244,
1,312,925,16,0,
252,1,640,926,16,
0,208,1,169,927,
16,0,192,1,590,
928,16,0,208,1,
212,929,16,0,318,
1,70,930,16,0,
247,1,539,931,16,
0,245,1,115,932,
16,0,220,1,17,
933,16,0,318,1,
721,934,16,0,208,
1,498,935,16,0,
166,1,481,936,16,
0,166,1,57,937,
16,0,260,1,150,
938,16,0,198,1,
665,939,16,0,208,
1,6,940,16,0,
318,1,99,941,16,
0,228,1,4,942,
16,0,318,1,614,
943,16,0,208,1,
0,944,16,0,208,
1,189,945,16,0,
170,1,564,946,16,
0,208,1,102,947,
19,691,1,102,917,
1,101,948,19,814,
1,101,917,1,100,
949,19,778,1,100,
917,1,99,950,19,
752,1,99,917,1,
98,951,19,723,1,
98,917,1,97,952,
19,706,1,97,917,
1,96,953,19,696,
1,96,917,1,95,
954,19,712,1,95,
917,1,94,955,19,
805,1,94,917,1,
93,956,19,162,1,
93,957,5,44,1,
212,958,16,0,160,
1,639,449,1,721,
959,16,0,160,1,
637,454,1,99,960,
16,0,160,1,312,
961,16,0,160,1,
400,962,16,0,160,
1,515,963,16,0,
160,1,84,964,16,
0,160,1,189,965,
16,0,160,1,614,
966,16,0,160,1,
720,467,1,394,473,
1,70,967,16,0,
160,1,708,479,1,
169,968,16,0,160,
1,57,969,16,0,
160,1,590,970,16,
0,160,1,481,971,
16,0,160,1,694,
489,1,586,495,1,
457,501,1,150,972,
16,0,160,1,132,
973,16,0,160,1,
464,974,16,0,160,
1,462,517,1,461,
522,1,459,527,1,
564,975,16,0,160,
1,560,507,1,665,
976,16,0,160,1,
539,977,16,0,160,
1,640,978,16,0,
160,1,17,979,16,
0,160,1,230,980,
16,0,160,1,498,
981,16,0,160,1,
613,542,1,4,982,
16,0,160,1,115,
983,16,0,160,1,
6,984,16,0,160,
1,432,985,16,0,
160,1,431,551,1,
536,557,1,0,986,
16,0,160,1,92,
987,19,768,1,92,
917,1,91,988,19,
735,1,91,917,1,
90,989,19,990,4,
30,69,0,120,0,
112,0,114,0,101,
0,115,0,115,0,
105,0,111,0,110,
0,79,0,112,0,
116,0,95,0,49,
0,1,90,358,1,
89,991,19,187,1,
89,369,1,88,992,
19,511,1,88,993,
5,2,1,538,994,
16,0,236,1,588,
995,16,0,225,1,
87,996,19,555,1,
87,334,1,86,997,
19,203,1,86,998,
5,23,1,515,999,
16,0,201,1,560,
507,1,462,517,1,
461,522,1,694,489,
1,457,501,1,640,
1000,16,0,201,1,
639,449,1,708,479,
1,590,1001,16,0,
201,1,586,495,1,
637,454,1,536,557,
1,394,473,1,721,
1002,16,0,201,1,
720,467,1,431,551,
1,665,1003,16,0,
201,1,459,527,1,
0,1004,16,0,201,
1,614,1005,16,0,
201,1,613,542,1,
564,1006,16,0,201,
1,85,1007,19,505,
1,85,334,1,84,
1008,19,176,1,84,
1009,5,23,1,515,
1010,16,0,174,1,
560,507,1,462,517,
1,461,522,1,694,
489,1,457,501,1,
640,1011,16,0,174,
1,639,449,1,708,
479,1,590,1012,16,
0,174,1,586,495,
1,637,454,1,536,
557,1,394,473,1,
721,1013,16,0,174,
1,720,467,1,431,
551,1,665,1014,16,
0,174,1,459,527,
1,0,1015,16,0,
174,1,614,1016,16,
0,174,1,613,542,
1,564,1017,16,0,
174,1,83,1018,19,
531,1,83,334,1,
82,1019,19,149,1,
82,1020,5,23,1,
515,1021,16,0,147,
1,560,507,1,462,
517,1,461,522,1,
694,489,1,457,501,
1,640,1022,16,0,
147,1,639,449,1,
708,479,1,590,1023,
16,0,147,1,586,
495,1,637,454,1,
536,557,1,394,473,
1,721,1024,16,0,
147,1,720,467,1,
431,551,1,665,1025,
16,0,147,1,459,
527,1,0,1026,16,
0,147,1,614,1027,
16,0,147,1,613,
542,1,564,1028,16,
0,147,1,60,1029,
19,483,1,60,1030,
5,2,1,721,1031,
16,0,274,1,0,
1032,16,0,274,1,
80,1033,19,145,1,
80,1034,5,23,1,
515,1035,16,0,143,
1,560,507,1,462,
517,1,461,522,1,
694,489,1,457,501,
1,640,1036,16,0,
143,1,639,449,1,
708,479,1,590,1037,
16,0,143,1,586,
495,1,637,454,1,
536,557,1,394,473,
1,721,1038,16,0,
143,1,720,467,1,
431,551,1,665,1039,
16,0,143,1,459,
527,1,0,1040,16,
0,143,1,614,1041,
16,0,143,1,613,
542,1,564,1042,16,
0,143,1,79,1043,
19,476,1,79,334,
1,78,1044,19,520,
1,78,334,1,77,
1045,19,561,1,77,
334,1,76,1046,19,
136,1,76,1047,5,
23,1,515,1048,16,
0,134,1,560,507,
1,462,517,1,461,
522,1,694,489,1,
457,501,1,640,1049,
16,0,134,1,639,
449,1,708,479,1,
590,1050,16,0,134,
1,586,495,1,637,
454,1,536,557,1,
394,473,1,721,1051,
16,0,134,1,720,
467,1,431,551,1,
665,1052,16,0,134,
1,459,527,1,0,
1053,16,0,134,1,
614,1054,16,0,134,
1,613,542,1,564,
1055,16,0,134,1,
75,1056,19,499,1,
75,334,1,74,1057,
19,265,1,74,1058,
5,23,1,515,1059,
16,0,263,1,560,
507,1,462,517,1,
461,522,1,694,489,
1,457,501,1,640,
1060,16,0,263,1,
639,449,1,708,479,
1,590,1061,16,0,
263,1,586,495,1,
637,454,1,536,557,
1,394,473,1,721,
1062,16,0,263,1,
720,467,1,431,551,
1,665,1063,16,0,
263,1,459,527,1,
0,1064,16,0,263,
1,614,1065,16,0,
263,1,613,542,1,
564,1066,16,0,263,
1,73,1067,19,458,
1,73,334,1,72,
1068,19,215,1,72,
1069,5,12,1,459,
527,1,457,501,1,
639,449,1,431,551,
1,637,454,1,613,
1070,16,0,213,1,
586,495,1,536,557,
1,694,489,1,394,
473,1,462,517,1,
461,522,1,71,1071,
19,545,1,71,334,
1,70,1072,19,231,
1,70,1073,5,23,
1,515,1074,16,0,
229,1,560,507,1,
462,517,1,461,522,
1,694,489,1,457,
501,1,640,1075,16,
0,229,1,639,449,
1,708,479,1,590,
1076,16,0,229,1,
586,495,1,637,454,
1,536,557,1,394,
473,1,721,1077,16,
0,229,1,720,467,
1,431,551,1,665,
1078,16,0,229,1,
459,527,1,0,1079,
16,0,229,1,614,
1080,16,0,229,1,
613,542,1,564,1081,
16,0,229,1,69,
1082,19,142,1,69,
1083,5,66,1,640,
1084,16,0,169,1,
425,1085,17,1086,15,
1087,4,20,37,0,
86,0,97,0,114,
0,105,0,97,0,
98,0,108,0,101,
0,115,0,1,-1,
1,5,179,1,1,
1,1,1088,22,1,
25,1,721,1089,16,
0,169,1,637,454,
1,421,1090,17,1091,
15,1092,4,18,37,
0,86,0,97,0,
114,0,105,0,97,
0,98,0,108,0,
101,0,1,-1,1,
5,186,1,4,1,
4,1093,22,1,28,
1,613,542,1,96,
687,1,201,693,1,
536,557,1,515,1094,
16,0,169,1,480,
1095,16,0,300,1,
82,698,1,614,1096,
16,0,169,1,399,
1097,17,1098,15,1092,
1,-1,1,5,186,
1,1,1,1,1099,
22,1,27,1,69,
708,1,590,1100,16,
0,169,1,181,703,
1,394,473,1,498,
1101,17,1102,15,1103,
4,28,37,0,69,
0,120,0,112,0,
114,0,101,0,115,
0,115,0,105,0,
111,0,110,0,79,
0,112,0,116,0,
1,-1,1,5,152,
1,0,1,0,1104,
22,1,29,1,497,
1105,16,0,281,1,
708,479,1,385,1106,
16,0,204,1,56,
714,1,162,720,1,
51,726,1,53,725,
1,694,489,1,586,
495,1,564,1107,16,
0,169,1,251,732,
1,366,737,1,560,
507,1,39,743,1,
28,754,1,144,749,
1,464,1108,17,1109,
15,1103,1,-1,1,
5,152,1,0,1,
0,1104,1,462,517,
1,461,522,1,460,
1110,16,0,140,1,
459,527,1,458,1111,
16,0,146,1,457,
501,1,456,1112,16,
0,150,1,346,759,
1,14,797,1,665,
1113,16,0,169,1,
16,786,1,13,770,
1,127,775,1,720,
467,1,639,449,1,
15,792,1,444,1114,
17,1115,15,1103,1,
-1,1,5,1116,20,
990,1,90,1,3,
1,2,1,1,1117,
22,1,30,1,229,
765,1,481,1118,17,
1119,15,1103,1,-1,
1,5,152,1,0,
1,0,1104,1,227,
801,1,111,811,1,
0,1120,16,0,169,
1,1,807,1,2,
831,1,3,827,1,
432,1121,17,1122,15,
1103,1,-1,1,5,
152,1,0,1,0,
1104,1,431,551,1,
430,1123,16,0,177,
1,322,835,1,428,
1124,17,1125,15,1087,
1,-1,1,5,179,
1,3,1,3,1126,
22,1,26,1,68,
1127,19,1128,4,24,
83,0,116,0,97,
0,116,0,101,0,
109,0,101,0,110,
0,116,0,115,0,
95,0,49,0,1,
68,376,1,67,1129,
19,493,1,67,1130,
5,9,1,665,1131,
16,0,137,1,640,
1132,16,0,137,1,
614,1133,16,0,137,
1,590,1134,16,0,
137,1,564,1135,16,
0,137,1,515,1136,
16,0,137,1,721,
1137,16,0,137,1,
718,1138,16,0,253,
1,0,1139,16,0,
137,1,66,1140,19,
156,1,66,1141,5,
16,1,459,527,1,
665,1142,17,1143,15,
1144,4,22,37,0,
83,0,116,0,97,
0,116,0,101,0,
109,0,101,0,110,
0,116,0,115,0,
1,-1,1,5,111,
1,0,1,0,1145,
22,1,11,1,457,
501,1,640,1146,17,
1147,15,1144,1,-1,
1,5,111,1,0,
1,0,1145,1,639,
449,1,431,551,1,
637,454,1,613,542,
1,586,495,1,394,
473,1,536,557,1,
694,489,1,693,1148,
16,0,154,1,462,
517,1,461,522,1,
690,1149,17,1150,15,
1144,1,-1,1,5,
1151,20,1128,1,68,
1,3,1,3,1,
2,1152,22,1,12,
1,65,1153,19,190,
1,65,1154,5,24,
1,515,1155,16,0,
188,1,560,507,1,
462,517,1,461,522,
1,694,489,1,457,
501,1,640,1156,16,
0,188,1,639,449,
1,708,479,1,590,
1157,16,0,188,1,
586,495,1,637,454,
1,536,557,1,394,
473,1,721,1158,16,
0,188,1,720,467,
1,718,1159,16,0,
188,1,431,551,1,
665,1160,16,0,188,
1,459,527,1,0,
1161,16,0,188,1,
614,1162,16,0,188,
1,613,542,1,564,
1163,16,0,188,1,
64,1164,19,1165,4,
30,80,0,97,0,
114,0,97,0,109,
0,101,0,116,0,
101,0,114,0,76,
0,105,0,115,0,
116,0,95,0,50,
0,1,64,1166,5,
2,1,713,1167,16,
0,109,1,711,1168,
16,0,106,1,63,
1169,19,184,1,63,
1170,5,32,1,421,
1090,1,39,743,1,
229,765,1,181,703,
1,227,801,1,366,
737,1,82,698,1,
127,775,1,425,1171,
16,0,182,1,28,
754,1,69,708,1,
3,827,1,399,1097,
1,111,811,1,162,
720,1,13,770,1,
16,786,1,346,759,
1,251,732,1,15,
792,1,14,797,1,
201,693,1,5,1172,
16,0,317,1,56,
714,1,2,831,1,
712,1173,16,0,278,
1,53,725,1,322,
835,1,51,726,1,
144,749,1,96,687,
1,1,807,1,62,
1174,19,1175,4,30,
80,0,97,0,114,
0,97,0,109,0,
101,0,116,0,101,
0,114,0,76,0,
105,0,115,0,116,
0,95,0,49,0,
1,62,1166,1,61,
1176,19,1177,4,36,
80,0,97,0,114,
0,97,0,109,0,
101,0,116,0,101,
0,114,0,76,0,
105,0,115,0,116,
0,79,0,112,0,
116,0,95,0,49,
0,1,61,398,1,
54,1178,19,1179,4,
16,74,0,115,0,
80,0,114,0,111,
0,103,0,95,0,
49,0,1,54,1180,
5,1,1,0,1181,
16,0,104,1,59,
1182,19,471,1,59,
1030,1,58,1183,19,
129,1,58,1184,5,
49,1,212,683,1,
481,1118,1,96,687,
1,201,693,1,412,
1185,16,0,191,1,
498,1101,1,514,1186,
16,0,271,1,82,
698,1,181,703,1,
717,1187,16,0,292,
1,716,1188,17,1189,
15,1190,4,34,37,
0,80,0,97,0,
114,0,97,0,109,
0,101,0,116,0,
101,0,114,0,76,
0,105,0,115,0,
116,0,79,0,112,
0,116,0,1,-1,
1,5,1191,20,1177,
1,61,1,3,1,
2,1,1,1192,22,
1,7,1,69,708,
1,714,1193,17,1194,
15,1195,4,28,37,
0,80,0,97,0,
114,0,97,0,109,
0,101,0,116,0,
101,0,114,0,76,
0,105,0,115,0,
116,0,1,-1,1,
5,1196,20,1165,1,
64,1,3,1,4,
1,3,1197,22,1,
9,1,712,1198,17,
1199,15,1195,1,-1,
1,5,1200,20,1175,
1,62,1,3,1,
2,1,1,1201,22,
1,8,1,711,1202,
17,1203,15,1190,1,
-1,1,5,294,1,
0,1,0,1204,22,
1,6,1,242,1205,
16,0,299,1,56,
714,1,162,720,1,
53,725,1,51,726,
1,251,732,1,366,
737,1,39,743,1,
144,749,1,464,1108,
1,551,1206,16,0,
237,1,13,770,1,
28,754,1,27,1207,
16,0,290,1,346,
759,1,15,792,1,
19,780,1,127,775,
1,432,1121,1,16,
786,1,17,784,1,
444,1114,1,229,765,
1,14,797,1,227,
801,1,226,1208,16,
0,127,1,1,807,
1,7,816,1,4,
825,1,5,821,1,
111,811,1,3,827,
1,2,831,1,322,
835,1,57,1209,19,
118,1,57,1210,5,
58,1,212,1211,16,
0,123,1,211,1212,
16,0,158,1,721,
1213,16,0,123,1,
637,454,1,614,1214,
16,0,123,1,99,
1215,16,0,123,1,
312,1216,16,0,123,
1,399,1217,16,0,
199,1,515,1218,16,
0,123,1,84,1219,
16,0,123,1,189,
1220,16,0,123,1,
400,1221,16,0,123,
1,613,542,1,394,
473,1,70,1222,16,
0,123,1,710,1223,
16,0,116,1,708,
479,1,169,1224,16,
0,123,1,457,501,
1,57,1225,16,0,
123,1,590,1226,16,
0,123,1,588,1227,
16,0,262,1,694,
489,1,586,495,1,
481,1228,16,0,123,
1,366,737,1,150,
1229,16,0,123,1,
132,1230,16,0,123,
1,464,1231,16,0,
123,1,463,1232,16,
0,133,1,462,517,
1,461,522,1,459,
527,1,564,1233,16,
0,123,1,14,797,
1,560,507,1,16,
1234,16,0,304,1,
665,1235,16,0,123,
1,539,1236,16,0,
123,1,538,1237,16,
0,262,1,640,1238,
16,0,123,1,720,
467,1,639,449,1,
17,1239,16,0,123,
1,230,1240,16,0,
123,1,15,792,1,
498,1241,16,0,123,
1,13,770,1,4,
1242,16,0,123,1,
115,1243,16,0,123,
1,1,807,1,6,
1244,16,0,123,1,
3,827,1,432,1245,
16,0,123,1,431,
551,1,2,831,1,
536,557,1,0,1246,
16,0,123,1,56,
1247,19,122,1,56,
1248,5,16,1,459,
527,1,457,501,1,
639,449,1,431,551,
1,637,454,1,613,
542,1,586,495,1,
536,557,1,721,1249,
16,0,120,1,720,
467,1,708,479,1,
694,489,1,394,473,
1,462,517,1,461,
522,1,0,1250,16,
0,120,1,55,1251,
19,1252,4,12,80,
0,114,0,111,0,
103,0,95,0,49,
0,1,55,345,1,
-1,1253,19,1254,4,
26,66,0,114,0,
101,0,97,0,107,
0,83,0,116,0,
97,0,116,0,109,
0,101,0,110,0,
116,0,1,-1,334,
1,53,1255,19,303,
1,53,402,1,52,
1256,19,132,1,52,
350,1,51,1257,19,
227,1,51,993,1,
50,1258,19,1259,4,
40,67,0,111,0,
110,0,115,0,116,
0,65,0,114,0,
114,0,97,0,121,
0,69,0,120,0,
112,0,114,0,101,
0,115,0,115,0,
105,0,111,0,110,
0,1,50,413,1,
49,1260,19,1261,4,
26,78,0,101,0,
119,0,69,0,120,
0,112,0,114,0,
101,0,115,0,115,
0,105,0,111,0,
110,0,1,49,917,
1,48,1262,19,1263,
4,26,73,0,100,
0,110,0,69,0,
120,0,112,0,114,
0,101,0,115,0,
115,0,105,0,111,
0,110,0,1,48,
413,1,47,1264,19,
1265,4,30,67,0,
111,0,110,0,115,
0,116,0,69,0,
120,0,112,0,114,
0,101,0,115,0,
115,0,105,0,111,
0,110,0,1,47,
413,1,46,1266,19,
307,1,46,413,1,
45,1267,19,1268,4,
24,70,0,117,0,
110,0,99,0,116,
0,105,0,111,0,
110,0,67,0,97,
0,108,0,108,0,
1,45,646,1,44,
1269,19,1270,4,42,
65,0,114,0,114,
0,97,0,121,0,
77,0,101,0,109,
0,98,0,101,0,
114,0,69,0,120,
0,112,0,114,0,
101,0,115,0,115,
0,105,0,111,0,
110,0,1,44,646,
1,43,1271,19,1272,
4,50,82,0,101,
0,115,0,111,0,
108,0,118,0,105,
0,110,0,103,0,
77,0,101,0,109,
0,98,0,101,0,
114,0,69,0,120,
0,112,0,114,0,
101,0,115,0,115,
0,105,0,111,0,
110,0,1,43,646,
1,42,1273,19,1274,
4,40,65,0,115,
0,115,0,105,0,
103,0,110,0,109,
0,101,0,110,0,
116,0,69,0,120,
0,112,0,114,0,
101,0,115,0,115,
0,105,0,111,0,
110,0,1,42,917,
1,41,1275,19,235,
1,41,646,1,40,
1276,19,1277,4,16,
85,0,110,0,97,
0,114,0,121,0,
78,0,111,0,116,
0,1,40,882,1,
39,1278,19,1279,4,
20,85,0,110,0,
97,0,114,0,121,
0,77,0,105,0,
110,0,117,0,115,
0,1,39,882,1,
38,1280,19,126,1,
38,882,1,37,1281,
19,168,1,37,917,
1,36,1282,19,153,
1,36,358,1,35,
1283,19,108,1,35,
1166,1,34,1284,19,
295,1,34,398,1,
33,1285,19,180,1,
33,381,1,32,1286,
19,112,1,32,376,
1,31,1287,19,139,
1,31,1130,1,30,
1288,19,1289,4,24,
86,0,97,0,114,
0,83,0,116,0,
97,0,116,0,101,
0,109,0,101,0,
110,0,116,0,1,
30,334,1,29,1290,
19,1291,4,30,82,
0,101,0,116,0,
117,0,114,0,110,
0,83,0,116,0,
97,0,116,0,101,
0,109,0,101,0,
110,0,116,0,1,
29,334,1,28,1292,
19,1293,4,34,67,
0,111,0,110,0,
116,0,105,0,110,
0,117,0,101,0,
83,0,116,0,97,
0,116,0,101,0,
109,0,101,0,110,
0,116,0,1,28,
334,1,27,1294,19,
1295,4,28,66,0,
114,0,101,0,97,
0,107,0,83,0,
116,0,97,0,116,
0,101,0,109,0,
101,0,110,0,116,
0,1,27,334,1,
26,1296,19,1297,4,
24,70,0,111,0,
114,0,83,0,116,
0,97,0,116,0,
101,0,109,0,101,
0,110,0,116,0,
1,26,334,1,25,
1298,19,1299,4,28,
87,0,104,0,105,
0,108,0,101,0,
83,0,116,0,97,
0,116,0,101,0,
109,0,101,0,110,
0,116,0,1,25,
334,1,24,1300,19,
1301,4,22,73,0,
102,0,83,0,116,
0,97,0,116,0,
101,0,109,0,101,
0,110,0,116,0,
1,24,334,1,23,
1302,19,165,1,23,
334,1,22,1303,19,
1304,4,16,70,0,
117,0,110,0,99,
0,116,0,105,0,
111,0,110,0,1,
22,1030,1,21,1305,
19,276,1,21,1030,
1,20,1306,19,285,
1,20,345,1,19,
1307,19,103,1,19,
1180,1,17,1308,19,
115,1,17,1309,5,
53,1,426,1310,16,
0,200,1,639,449,
1,210,1311,16,0,
159,1,637,454,1,
614,1312,16,0,308,
1,99,1313,16,0,
308,1,312,1314,16,
0,308,1,515,1315,
16,0,308,1,84,
1316,16,0,308,1,
189,1317,16,0,308,
1,400,1318,16,0,
308,1,613,542,1,
398,1319,16,0,200,
1,394,473,1,713,
1320,16,0,113,1,
70,1321,16,0,308,
1,711,1322,16,0,
113,1,709,1323,16,
0,119,1,708,479,
1,169,1324,16,0,
308,1,57,1325,16,
0,308,1,590,1326,
16,0,308,1,481,
1327,16,0,308,1,
694,489,1,586,495,
1,457,501,1,721,
1328,16,0,308,1,
150,1329,16,0,308,
1,41,1330,16,0,
308,1,132,1331,16,
0,308,1,464,1332,
16,0,308,1,462,
517,1,461,522,1,
459,527,1,30,1333,
16,0,308,1,564,
1334,16,0,308,1,
337,1335,16,0,308,
1,560,507,1,665,
1336,16,0,308,1,
539,1337,16,0,308,
1,640,1338,16,0,
308,1,720,467,1,
17,1339,16,0,308,
1,230,1340,16,0,
308,1,498,1341,16,
0,308,1,4,1342,
16,0,308,1,6,
1343,16,0,308,1,
115,1344,16,0,308,
1,212,1345,16,0,
308,1,432,1346,16,
0,308,1,431,551,
1,536,557,1,0,
1347,16,0,308,1,
15,1348,19,207,1,
15,1349,5,34,1,
96,1350,16,0,205,
1,201,1351,16,0,
205,1,412,1352,16,
0,205,1,82,1353,
16,0,205,1,181,
1354,16,0,205,1,
69,1355,16,0,205,
1,385,1356,16,0,
205,1,56,714,1,
162,720,1,53,725,
1,51,726,1,251,
732,1,366,737,1,
39,743,1,144,749,
1,551,1357,16,0,
205,1,444,1358,16,
0,205,1,28,754,
1,242,1359,16,0,
205,1,346,759,1,
229,765,1,227,801,
1,127,1360,16,0,
205,1,16,786,1,
15,792,1,14,797,
1,13,770,1,1,
807,1,5,1361,16,
0,205,1,111,1362,
16,0,205,1,3,
827,1,2,831,1,
322,835,1,321,1363,
16,0,205,1,14,
1364,19,219,1,14,
1365,5,34,1,96,
1366,16,0,217,1,
201,1367,16,0,217,
1,412,1368,16,0,
217,1,82,1369,16,
0,217,1,181,1370,
16,0,217,1,69,
1371,16,0,217,1,
385,1372,16,0,217,
1,56,714,1,162,
720,1,53,725,1,
51,726,1,251,732,
1,366,737,1,39,
743,1,144,749,1,
551,1373,16,0,217,
1,444,1374,16,0,
217,1,28,754,1,
242,1375,16,0,217,
1,346,759,1,229,
765,1,227,801,1,
127,1376,16,0,217,
1,16,786,1,15,
792,1,14,797,1,
13,770,1,1,807,
1,5,1377,16,0,
217,1,111,1378,16,
0,217,1,3,827,
1,2,831,1,322,
835,1,321,1379,16,
0,217,1,13,1380,
19,197,1,13,1381,
5,34,1,96,1382,
16,0,195,1,201,
693,1,412,1383,16,
0,195,1,82,1384,
16,0,195,1,181,
703,1,69,1385,16,
0,195,1,385,1386,
16,0,195,1,56,
714,1,162,720,1,
53,725,1,51,726,
1,251,732,1,366,
737,1,39,743,1,
144,749,1,551,1387,
16,0,195,1,444,
1388,16,0,195,1,
28,754,1,242,1389,
16,0,195,1,346,
759,1,229,765,1,
227,801,1,127,1390,
16,0,195,1,16,
786,1,15,792,1,
14,797,1,13,770,
1,1,807,1,5,
1391,16,0,195,1,
111,1392,16,0,195,
1,3,827,1,2,
831,1,322,835,1,
321,1393,16,0,195,
1,12,1394,19,173,
1,12,1395,5,80,
1,230,1396,16,0,
279,1,229,765,1,
227,801,1,464,1397,
16,0,279,1,462,
517,1,461,522,1,
459,527,1,457,501,
1,694,489,1,212,
1398,16,0,279,1,
444,1399,16,0,171,
1,201,693,1,432,
1400,16,0,279,1,
431,551,1,189,1401,
16,0,279,1,665,
1402,16,0,279,1,
639,449,1,181,703,
1,169,1403,16,0,
279,1,412,1404,16,
0,171,1,162,720,
1,640,1405,16,0,
279,1,400,1406,16,
0,279,1,637,454,
1,394,473,1,150,
1407,16,0,279,1,
385,1408,16,0,171,
1,144,749,1,366,
737,1,614,1409,16,
0,279,1,613,542,
1,132,1410,16,0,
279,1,127,1411,16,
0,171,1,115,1412,
16,0,279,1,590,
1413,16,0,279,1,
111,1414,16,0,171,
1,586,495,1,346,
759,1,560,507,1,
99,1415,16,0,279,
1,96,1416,16,0,
171,1,312,1417,16,
0,279,1,82,1418,
16,0,171,1,564,
1419,16,0,279,1,
84,1420,16,0,279,
1,322,835,1,321,
1421,16,0,171,1,
551,1422,16,0,171,
1,70,1423,16,0,
279,1,69,1424,16,
0,171,1,708,479,
1,539,1425,16,0,
279,1,536,557,1,
57,1426,16,0,279,
1,56,714,1,515,
1427,16,0,279,1,
53,725,1,721,1428,
16,0,279,1,51,
726,1,41,1429,16,
0,279,1,39,743,
1,481,1430,16,0,
279,1,30,1431,16,
0,279,1,28,754,
1,720,467,1,251,
732,1,498,1432,16,
0,279,1,17,1433,
16,0,279,1,16,
786,1,15,792,1,
14,797,1,13,770,
1,242,1434,16,0,
171,1,6,1435,16,
0,279,1,5,1436,
16,0,171,1,4,
1437,16,0,279,1,
3,827,1,2,831,
1,1,807,1,0,
1438,16,0,279,1,
11,1439,19,269,1,
11,1440,5,12,1,
366,737,1,16,786,
1,15,792,1,14,
797,1,13,770,1,
56,1441,16,0,267,
1,1,807,1,28,
754,1,3,827,1,
2,831,1,346,759,
1,322,835,1,10,
1442,19,289,1,10,
1443,5,46,1,212,
1444,16,0,287,1,
639,449,1,721,1445,
16,0,287,1,637,
454,1,99,1446,16,
0,287,1,312,1447,
16,0,287,1,400,
1448,16,0,287,1,
515,1449,16,0,287,
1,84,1450,16,0,
287,1,189,1451,16,
0,287,1,614,1452,
16,0,287,1,720,
467,1,394,473,1,
70,1453,16,0,287,
1,708,479,1,169,
1454,16,0,287,1,
57,1455,16,0,287,
1,590,1456,16,0,
287,1,481,1457,16,
0,287,1,694,489,
1,586,495,1,457,
501,1,150,1458,16,
0,287,1,41,1459,
16,0,287,1,132,
1460,16,0,287,1,
464,1461,16,0,287,
1,462,517,1,461,
522,1,459,527,1,
30,1462,16,0,287,
1,564,1463,16,0,
287,1,560,507,1,
665,1464,16,0,287,
1,539,1465,16,0,
287,1,640,1466,16,
0,287,1,17,1467,
16,0,287,1,230,
1468,16,0,287,1,
498,1469,16,0,287,
1,613,542,1,4,
1470,16,0,287,1,
115,1471,16,0,287,
1,6,1472,16,0,
287,1,432,1473,16,
0,287,1,431,551,
1,536,557,1,0,
1474,16,0,287,1,
9,1475,19,259,1,
9,1476,5,34,1,
96,687,1,201,693,
1,412,1477,16,0,
257,1,82,698,1,
181,703,1,69,1478,
16,0,257,1,385,
1479,16,0,257,1,
56,714,1,162,720,
1,53,725,1,51,
726,1,251,732,1,
366,737,1,39,743,
1,144,749,1,551,
1480,16,0,257,1,
444,1481,16,0,257,
1,28,754,1,242,
1482,16,0,257,1,
346,759,1,229,765,
1,227,801,1,127,
775,1,16,786,1,
15,792,1,14,797,
1,13,770,1,1,
807,1,5,1483,16,
0,257,1,111,811,
1,3,827,1,2,
831,1,322,835,1,
321,1484,16,0,257,
1,8,1485,19,250,
1,8,1486,5,34,
1,96,687,1,201,
693,1,412,1487,16,
0,248,1,82,698,
1,181,703,1,69,
1488,16,0,248,1,
385,1489,16,0,248,
1,56,714,1,162,
720,1,53,725,1,
51,726,1,251,732,
1,366,737,1,39,
743,1,144,749,1,
551,1490,16,0,248,
1,444,1491,16,0,
248,1,28,754,1,
242,1492,16,0,248,
1,346,759,1,229,
765,1,227,801,1,
127,775,1,16,786,
1,15,792,1,14,
797,1,13,770,1,
1,807,1,5,1493,
16,0,248,1,111,
811,1,3,827,1,
2,831,1,322,835,
1,321,1494,16,0,
248,1,7,1495,19,
240,1,7,1496,5,
34,1,96,687,1,
201,693,1,412,1497,
16,0,238,1,82,
698,1,181,703,1,
69,1498,16,0,238,
1,385,1499,16,0,
238,1,56,714,1,
162,720,1,53,725,
1,51,726,1,251,
732,1,366,737,1,
39,743,1,144,749,
1,551,1500,16,0,
238,1,444,1501,16,
0,238,1,28,754,
1,242,1502,16,0,
238,1,346,759,1,
229,765,1,227,801,
1,127,775,1,16,
786,1,15,792,1,
14,797,1,13,770,
1,1,807,1,5,
1503,16,0,238,1,
111,811,1,3,827,
1,2,831,1,322,
835,1,321,1504,16,
0,238,1,6,1505,
19,224,1,6,1506,
5,34,1,96,687,
1,201,693,1,412,
1507,16,0,222,1,
82,698,1,181,703,
1,69,1508,16,0,
222,1,385,1509,16,
0,222,1,56,714,
1,162,720,1,53,
725,1,51,726,1,
251,732,1,366,737,
1,39,743,1,144,
749,1,551,1510,16,
0,222,1,444,1511,
16,0,222,1,28,
754,1,242,1512,16,
0,222,1,346,759,
1,229,765,1,227,
801,1,127,775,1,
16,786,1,15,792,
1,14,797,1,13,
770,1,1,807,1,
5,1513,16,0,222,
1,111,811,1,3,
827,1,2,831,1,
322,835,1,321,1514,
16,0,222,1,5,
1515,19,314,1,5,
1516,5,47,1,212,
1517,16,0,312,1,
639,449,1,721,1518,
16,0,312,1,637,
454,1,99,1519,16,
0,312,1,312,1520,
16,0,312,1,400,
1521,16,0,312,1,
515,1522,16,0,312,
1,84,1523,16,0,
312,1,189,1524,16,
0,312,1,614,1525,
16,0,312,1,720,
467,1,394,473,1,
70,1526,16,0,312,
1,708,479,1,169,
1527,16,0,312,1,
57,1528,16,0,312,
1,590,1529,16,0,
312,1,481,1530,16,
0,312,1,694,489,
1,586,495,1,457,
501,1,560,507,1,
150,1531,16,0,312,
1,41,1532,16,0,
312,1,132,1533,16,
0,312,1,464,1534,
16,0,312,1,462,
517,1,461,522,1,
459,527,1,30,1535,
16,0,312,1,564,
1536,16,0,312,1,
230,1537,16,0,312,
1,665,1538,16,0,
312,1,539,1539,16,
0,312,1,640,1540,
16,0,312,1,17,
1541,16,0,312,1,
337,1542,16,0,312,
1,498,1543,16,0,
312,1,613,542,1,
4,1544,16,0,312,
1,115,1545,16,0,
312,1,6,1546,16,
0,312,1,432,1547,
16,0,312,1,431,
551,1,536,557,1,
0,1548,16,0,312,
1,3,1549,19,311,
1,3,1550,5,47,
1,212,1551,16,0,
309,1,639,449,1,
721,1552,16,0,309,
1,637,454,1,99,
1553,16,0,309,1,
312,1554,16,0,309,
1,400,1555,16,0,
309,1,515,1556,16,
0,309,1,84,1557,
16,0,309,1,189,
1558,16,0,309,1,
614,1559,16,0,309,
1,720,467,1,394,
473,1,70,1560,16,
0,309,1,708,479,
1,169,1561,16,0,
309,1,57,1562,16,
0,309,1,590,1563,
16,0,309,1,481,
1564,16,0,309,1,
694,489,1,586,495,
1,457,501,1,560,
507,1,150,1565,16,
0,309,1,41,1566,
16,0,309,1,132,
1567,16,0,309,1,
464,1568,16,0,309,
1,462,517,1,461,
522,1,459,527,1,
30,1569,16,0,309,
1,564,1570,16,0,
309,1,230,1571,16,
0,309,1,665,1572,
16,0,309,1,539,
1573,16,0,309,1,
640,1574,16,0,309,
1,17,1575,16,0,
309,1,337,1576,16,
0,309,1,498,1577,
16,0,309,1,613,
542,1,4,1578,16,
0,309,1,115,1579,
16,0,309,1,6,
1580,16,0,309,1,
432,1581,16,0,309,
1,431,551,1,536,
557,1,0,1582,16,
0,309,1,2,1583,
19,298,1,2,1584,
5,18,1,751,1585,
17,1586,15,1587,4,
14,37,0,74,0,
115,0,80,0,114,
0,111,0,103,0,
1,-1,1,5,1588,
20,1179,1,54,1,
3,1,2,1,1,
1589,22,1,1,1,
749,1590,17,1591,15,
1592,4,10,37,0,
80,0,114,0,111,
0,103,0,1,-1,
1,5,1593,20,1252,
1,55,1,3,1,
3,1,2,1594,22,
1,3,1,462,517,
1,461,522,1,694,
489,1,457,501,1,
639,449,1,637,454,
1,586,495,1,536,
557,1,394,473,1,
721,1595,17,1596,15,
1592,1,-1,1,5,
284,1,0,1,0,
1597,22,1,2,1,
720,467,1,431,551,
1,459,527,1,708,
479,1,613,542,1,
0,1598,17,1599,15,
1592,1,-1,1,5,
284,1,0,1,0,
1597,2,1,0};
            new Sfactory(this, "BreakStatment", new SCreator(BreakStatment_factory));
            new Sfactory(this, "UnaryExpression", new SCreator(UnaryExpression_factory));
            new Sfactory(this, "ArrayMemberExpression_1", new SCreator(ArrayMemberExpression_1_factory));
            new Sfactory(this, "ArgumentListOpt", new SCreator(ArgumentListOpt_factory));
            new Sfactory(this, "ContinueStatement_1", new SCreator(ContinueStatement_1_factory));
            new Sfactory(this, "Expression_3", new SCreator(Expression_3_factory));
            new Sfactory(this, "ResolvingMemberExpression_1", new SCreator(ResolvingMemberExpression_1_factory));
            new Sfactory(this, "ConstArrayExpression_1", new SCreator(ConstArrayExpression_1_factory));
            new Sfactory(this, "UnaryMinus", new SCreator(UnaryMinus_factory));
            new Sfactory(this, "ArgumentList_2", new SCreator(ArgumentList_2_factory));
            new Sfactory(this, "MemberExpression_1", new SCreator(MemberExpression_1_factory));
            new Sfactory(this, "Condition_1", new SCreator(Condition_1_factory));
            new Sfactory(this, "UnaryNot_1", new SCreator(UnaryNot_1_factory));
            new Sfactory(this, "Statement_1", new SCreator(Statement_1_factory));
            new Sfactory(this, "ExpressionOpt_4", new SCreator(ExpressionOpt_4_factory));
            new Sfactory(this, "Prog_1", new SCreator(Prog_1_factory));
            new Sfactory(this, "CompoundStatement", new SCreator(CompoundStatement_factory));
            new Sfactory(this, "Statements_3", new SCreator(Statements_3_factory));
            new Sfactory(this, "IfStatement_2", new SCreator(IfStatement_2_factory));
            new Sfactory(this, "ExpressionOpt_5", new SCreator(ExpressionOpt_5_factory));
            new Sfactory(this, "Expression_7", new SCreator(Expression_7_factory));
            new Sfactory(this, "VarStatement_1", new SCreator(VarStatement_1_factory));
            new Sfactory(this, "ArgumentList_1", new SCreator(ArgumentList_1_factory));
            new Sfactory(this, "IdnExpression_1", new SCreator(IdnExpression_1_factory));
            new Sfactory(this, "Element", new SCreator(Element_factory));
            new Sfactory(this, "error", new SCreator(error_factory));
            new Sfactory(this, "Variable_2", new SCreator(Variable_2_factory));
            new Sfactory(this, "ArgumentListOpt_1", new SCreator(ArgumentListOpt_1_factory));
            new Sfactory(this, "ArgumentListOpt_3", new SCreator(ArgumentListOpt_3_factory));
            new Sfactory(this, "WhileStatement_1", new SCreator(WhileStatement_1_factory));
            new Sfactory(this, "ArgumentListOpt_4", new SCreator(ArgumentListOpt_4_factory));
            new Sfactory(this, "Expression_10", new SCreator(Expression_10_factory));
            new Sfactory(this, "Statement_2", new SCreator(Statement_2_factory));
            new Sfactory(this, "Prog_3", new SCreator(Prog_3_factory));
            new Sfactory(this, "ReturnStatement_1", new SCreator(ReturnStatement_1_factory));
            new Sfactory(this, "UnaryExpression_1", new SCreator(UnaryExpression_1_factory));
            new Sfactory(this, "Expression", new SCreator(Expression_factory));
            new Sfactory(this, "WhileStatement", new SCreator(WhileStatement_factory));
            new Sfactory(this, "ArgumentListOpt_2", new SCreator(ArgumentListOpt_2_factory));
            new Sfactory(this, "ConstExpression", new SCreator(ConstExpression_factory));
            new Sfactory(this, "ContinueStatement", new SCreator(ContinueStatement_factory));
            new Sfactory(this, "AssignmentExpression_1", new SCreator(AssignmentExpression_1_factory));
            new Sfactory(this, "ConstExpression_5", new SCreator(ConstExpression_5_factory));
            new Sfactory(this, "ConstExpression_4", new SCreator(ConstExpression_4_factory));
            new Sfactory(this, "ExpressionOpt_1", new SCreator(ExpressionOpt_1_factory));
            new Sfactory(this, "FunctionCall_1", new SCreator(FunctionCall_1_factory));
            new Sfactory(this, "ExpressionOpt_3", new SCreator(ExpressionOpt_3_factory));
            new Sfactory(this, "Variable", new SCreator(Variable_factory));
            new Sfactory(this, "Expression_8", new SCreator(Expression_8_factory));
            new Sfactory(this, "ForStatement_1", new SCreator(ForStatement_1_factory));
            new Sfactory(this, "ParameterList_2", new SCreator(ParameterList_2_factory));
            new Sfactory(this, "ConstExpression_2", new SCreator(ConstExpression_2_factory));
            new Sfactory(this, "CompoundStatement_1", new SCreator(CompoundStatement_1_factory));
            new Sfactory(this, "JsProg_1", new SCreator(JsProg_1_factory));
            new Sfactory(this, "AssignmentExpression", new SCreator(AssignmentExpression_factory));
            new Sfactory(this, "ParameterList", new SCreator(ParameterList_factory));
            new Sfactory(this, "Prog_2", new SCreator(Prog_2_factory));
            new Sfactory(this, "ConstExpression_1", new SCreator(ConstExpression_1_factory));
            new Sfactory(this, "UnaryNot", new SCreator(UnaryNot_factory));
            new Sfactory(this, "ParameterListOpt", new SCreator(ParameterListOpt_factory));
            new Sfactory(this, "Condition", new SCreator(Condition_factory));
            new Sfactory(this, "Statement_3", new SCreator(Statement_3_factory));
            new Sfactory(this, "Variables_2", new SCreator(Variables_2_factory));
            new Sfactory(this, "ParameterListOpt_1", new SCreator(ParameterListOpt_1_factory));
            new Sfactory(this, "NewExpression_1", new SCreator(NewExpression_1_factory));
            new Sfactory(this, "PrimaryExpression", new SCreator(PrimaryExpression_factory));
            new Sfactory(this, "ConstExpression_3", new SCreator(ConstExpression_3_factory));
            new Sfactory(this, "ResolvingMemberExpression", new SCreator(ResolvingMemberExpression_factory));
            new Sfactory(this, "Expression_4", new SCreator(Expression_4_factory));
            new Sfactory(this, "JsProg", new SCreator(JsProg_factory));
            new Sfactory(this, "IfStatement", new SCreator(IfStatement_factory));
            new Sfactory(this, "Statement", new SCreator(Statement_factory));
            new Sfactory(this, "IfStatement_1", new SCreator(IfStatement_1_factory));
            new Sfactory(this, "Statements_1", new SCreator(Statements_1_factory));
            new Sfactory(this, "Variables_1", new SCreator(Variables_1_factory));
            new Sfactory(this, "Function_1", new SCreator(Function_1_factory));
            new Sfactory(this, "ExpressionOpt_2", new SCreator(ExpressionOpt_2_factory));
            new Sfactory(this, "VarStatement", new SCreator(VarStatement_factory));
            new Sfactory(this, "Statements", new SCreator(Statements_factory));
            new Sfactory(this, "Expression_9", new SCreator(Expression_9_factory));
            new Sfactory(this, "Expression_5", new SCreator(Expression_5_factory));
            new Sfactory(this, "Expression_1", new SCreator(Expression_1_factory));
            new Sfactory(this, "ConstArrayExpression", new SCreator(ConstArrayExpression_factory));
            new Sfactory(this, "Expression_2", new SCreator(Expression_2_factory));
            new Sfactory(this, "NewExpression", new SCreator(NewExpression_factory));
            new Sfactory(this, "Element_1", new SCreator(Element_1_factory));
            new Sfactory(this, "ParameterListOpt_2", new SCreator(ParameterListOpt_2_factory));
            new Sfactory(this, "ReturnStatement", new SCreator(ReturnStatement_factory));
            new Sfactory(this, "ForStatement", new SCreator(ForStatement_factory));
            new Sfactory(this, "ArgumentList", new SCreator(ArgumentList_factory));
            new Sfactory(this, "Variable_1", new SCreator(Variable_1_factory));
            new Sfactory(this, "UnaryMinus_1", new SCreator(UnaryMinus_1_factory));
            new Sfactory(this, "BreakStatement", new SCreator(BreakStatement_factory));
            new Sfactory(this, "Statements_2", new SCreator(Statements_2_factory));
            new Sfactory(this, "Expression_6", new SCreator(Expression_6_factory));
            new Sfactory(this, "Prog", new SCreator(Prog_factory));
            new Sfactory(this, "BreakStatment_1", new SCreator(BreakStatment_1_factory));
            new Sfactory(this, "ExpressionOpt", new SCreator(ExpressionOpt_factory));
            new Sfactory(this, "FunctionCall", new SCreator(FunctionCall_factory));
            new Sfactory(this, "ArrayMemberExpression", new SCreator(ArrayMemberExpression_factory));
            new Sfactory(this, "Function", new SCreator(Function_factory));
            new Sfactory(this, "ParameterList_1", new SCreator(ParameterList_1_factory));
            new Sfactory(this, "IdnExpression", new SCreator(IdnExpression_factory));
            new Sfactory(this, "Variables", new SCreator(Variables_factory));
            new Sfactory(this, "MemberExpression", new SCreator(MemberExpression_factory));
        }
        public static object BreakStatment_factory(Parser yyp) { return new BreakStatment(yyp); }
        public static object UnaryExpression_factory(Parser yyp) { return new UnaryExpression(yyp); }
        public static object ArrayMemberExpression_1_factory(Parser yyp) { return new ArrayMemberExpression_1(yyp); }
        public static object ArgumentListOpt_factory(Parser yyp) { return new ArgumentListOpt(yyp); }
        public static object ContinueStatement_1_factory(Parser yyp) { return new ContinueStatement_1(yyp); }
        public static object Expression_3_factory(Parser yyp) { return new Expression_3(yyp); }
        public static object ResolvingMemberExpression_1_factory(Parser yyp) { return new ResolvingMemberExpression_1(yyp); }
        public static object ConstArrayExpression_1_factory(Parser yyp) { return new ConstArrayExpression_1(yyp); }
        public static object UnaryMinus_factory(Parser yyp) { return new UnaryMinus(yyp); }
        public static object ArgumentList_2_factory(Parser yyp) { return new ArgumentList_2(yyp); }
        public static object MemberExpression_1_factory(Parser yyp) { return new MemberExpression_1(yyp); }
        public static object Condition_1_factory(Parser yyp) { return new Condition_1(yyp); }
        public static object UnaryNot_1_factory(Parser yyp) { return new UnaryNot_1(yyp); }
        public static object Statement_1_factory(Parser yyp) { return new Statement_1(yyp); }
        public static object ExpressionOpt_4_factory(Parser yyp) { return new ExpressionOpt_4(yyp); }
        public static object Prog_1_factory(Parser yyp) { return new Prog_1(yyp); }
        public static object CompoundStatement_factory(Parser yyp) { return new CompoundStatement(yyp); }
        public static object Statements_3_factory(Parser yyp) { return new Statements_3(yyp); }
        public static object IfStatement_2_factory(Parser yyp) { return new IfStatement_2(yyp); }
        public static object ExpressionOpt_5_factory(Parser yyp) { return new ExpressionOpt_5(yyp); }
        public static object Expression_7_factory(Parser yyp) { return new Expression_7(yyp); }
        public static object VarStatement_1_factory(Parser yyp) { return new VarStatement_1(yyp); }
        public static object ArgumentList_1_factory(Parser yyp) { return new ArgumentList_1(yyp); }
        public static object IdnExpression_1_factory(Parser yyp) { return new IdnExpression_1(yyp); }
        public static object Element_factory(Parser yyp) { return new Element(yyp); }
        public static object error_factory(Parser yyp) { return new error(yyp); }
        public static object Variable_2_factory(Parser yyp) { return new Variable_2(yyp); }
        public static object ArgumentListOpt_1_factory(Parser yyp) { return new ArgumentListOpt_1(yyp); }
        public static object ArgumentListOpt_3_factory(Parser yyp) { return new ArgumentListOpt_3(yyp); }
        public static object WhileStatement_1_factory(Parser yyp) { return new WhileStatement_1(yyp); }
        public static object ArgumentListOpt_4_factory(Parser yyp) { return new ArgumentListOpt_4(yyp); }
        public static object Expression_10_factory(Parser yyp) { return new Expression_10(yyp); }
        public static object Statement_2_factory(Parser yyp) { return new Statement_2(yyp); }
        public static object Prog_3_factory(Parser yyp) { return new Prog_3(yyp); }
        public static object ReturnStatement_1_factory(Parser yyp) { return new ReturnStatement_1(yyp); }
        public static object UnaryExpression_1_factory(Parser yyp) { return new UnaryExpression_1(yyp); }
        public static object Expression_factory(Parser yyp) { return new Expression(yyp); }
        public static object WhileStatement_factory(Parser yyp) { return new WhileStatement(yyp); }
        public static object ArgumentListOpt_2_factory(Parser yyp) { return new ArgumentListOpt_2(yyp); }
        public static object ConstExpression_factory(Parser yyp) { return new ConstExpression(yyp); }
        public static object ContinueStatement_factory(Parser yyp) { return new ContinueStatement(yyp); }
        public static object AssignmentExpression_1_factory(Parser yyp) { return new AssignmentExpression_1(yyp); }
        public static object ConstExpression_5_factory(Parser yyp) { return new ConstExpression_5(yyp); }
        public static object ConstExpression_4_factory(Parser yyp) { return new ConstExpression_4(yyp); }
        public static object ExpressionOpt_1_factory(Parser yyp) { return new ExpressionOpt_1(yyp); }
        public static object FunctionCall_1_factory(Parser yyp) { return new FunctionCall_1(yyp); }
        public static object ExpressionOpt_3_factory(Parser yyp) { return new ExpressionOpt_3(yyp); }
        public static object Variable_factory(Parser yyp) { return new Variable(yyp); }
        public static object Expression_8_factory(Parser yyp) { return new Expression_8(yyp); }
        public static object ForStatement_1_factory(Parser yyp) { return new ForStatement_1(yyp); }
        public static object ParameterList_2_factory(Parser yyp) { return new ParameterList_2(yyp); }
        public static object ConstExpression_2_factory(Parser yyp) { return new ConstExpression_2(yyp); }
        public static object CompoundStatement_1_factory(Parser yyp) { return new CompoundStatement_1(yyp); }
        public static object JsProg_1_factory(Parser yyp) { return new JsProg_1(yyp); }
        public static object AssignmentExpression_factory(Parser yyp) { return new AssignmentExpression(yyp); }
        public static object ParameterList_factory(Parser yyp) { return new ParameterList(yyp); }
        public static object Prog_2_factory(Parser yyp) { return new Prog_2(yyp); }
        public static object ConstExpression_1_factory(Parser yyp) { return new ConstExpression_1(yyp); }
        public static object UnaryNot_factory(Parser yyp) { return new UnaryNot(yyp); }
        public static object ParameterListOpt_factory(Parser yyp) { return new ParameterListOpt(yyp); }
        public static object Condition_factory(Parser yyp) { return new Condition(yyp); }
        public static object Statement_3_factory(Parser yyp) { return new Statement_3(yyp); }
        public static object Variables_2_factory(Parser yyp) { return new Variables_2(yyp); }
        public static object ParameterListOpt_1_factory(Parser yyp) { return new ParameterListOpt_1(yyp); }
        public static object NewExpression_1_factory(Parser yyp) { return new NewExpression_1(yyp); }
        public static object PrimaryExpression_factory(Parser yyp) { return new PrimaryExpression(yyp); }
        public static object ConstExpression_3_factory(Parser yyp) { return new ConstExpression_3(yyp); }
        public static object ResolvingMemberExpression_factory(Parser yyp) { return new ResolvingMemberExpression(yyp); }
        public static object Expression_4_factory(Parser yyp) { return new Expression_4(yyp); }
        public static object JsProg_factory(Parser yyp) { return new JsProg(yyp); }
        public static object IfStatement_factory(Parser yyp) { return new IfStatement(yyp); }
        public static object Statement_factory(Parser yyp) { return new Statement(yyp); }
        public static object IfStatement_1_factory(Parser yyp) { return new IfStatement_1(yyp); }
        public static object Statements_1_factory(Parser yyp) { return new Statements_1(yyp); }
        public static object Variables_1_factory(Parser yyp) { return new Variables_1(yyp); }
        public static object Function_1_factory(Parser yyp) { return new Function_1(yyp); }
        public static object ExpressionOpt_2_factory(Parser yyp) { return new ExpressionOpt_2(yyp); }
        public static object VarStatement_factory(Parser yyp) { return new VarStatement(yyp); }
        public static object Statements_factory(Parser yyp) { return new Statements(yyp); }
        public static object Expression_9_factory(Parser yyp) { return new Expression_9(yyp); }
        public static object Expression_5_factory(Parser yyp) { return new Expression_5(yyp); }
        public static object Expression_1_factory(Parser yyp) { return new Expression_1(yyp); }
        public static object ConstArrayExpression_factory(Parser yyp) { return new ConstArrayExpression(yyp); }
        public static object Expression_2_factory(Parser yyp) { return new Expression_2(yyp); }
        public static object NewExpression_factory(Parser yyp) { return new NewExpression(yyp); }
        public static object Element_1_factory(Parser yyp) { return new Element_1(yyp); }
        public static object ParameterListOpt_2_factory(Parser yyp) { return new ParameterListOpt_2(yyp); }
        public static object ReturnStatement_factory(Parser yyp) { return new ReturnStatement(yyp); }
        public static object ForStatement_factory(Parser yyp) { return new ForStatement(yyp); }
        public static object ArgumentList_factory(Parser yyp) { return new ArgumentList(yyp); }
        public static object Variable_1_factory(Parser yyp) { return new Variable_1(yyp); }
        public static object UnaryMinus_1_factory(Parser yyp) { return new UnaryMinus_1(yyp); }
        public static object BreakStatement_factory(Parser yyp) { return new BreakStatement(yyp); }
        public static object Statements_2_factory(Parser yyp) { return new Statements_2(yyp); }
        public static object Expression_6_factory(Parser yyp) { return new Expression_6(yyp); }
        public static object Prog_factory(Parser yyp) { return new Prog(yyp); }
        public static object BreakStatment_1_factory(Parser yyp) { return new BreakStatment_1(yyp); }
        public static object ExpressionOpt_factory(Parser yyp) { return new ExpressionOpt(yyp); }
        public static object FunctionCall_factory(Parser yyp) { return new FunctionCall(yyp); }
        public static object ArrayMemberExpression_factory(Parser yyp) { return new ArrayMemberExpression(yyp); }
        public static object Function_factory(Parser yyp) { return new Function(yyp); }
        public static object ParameterList_1_factory(Parser yyp) { return new ParameterList_1(yyp); }
        public static object IdnExpression_factory(Parser yyp) { return new IdnExpression(yyp); }
        public static object Variables_factory(Parser yyp) { return new Variables(yyp); }
        public static object MemberExpression_factory(Parser yyp) { return new MemberExpression(yyp); }
    }
    internal class syntax : Parser
    {
        public syntax() : base(new yysyntax(), new tokens()) { }
        public syntax(YyParser syms) : base(syms, new tokens()) { }
        public syntax(YyParser syms, ErrorHandler erh) : base(syms, new tokens(erh)) { }

    }
}

By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.

If a file you wish to view isn't highlighted, and is a text file (not binary), please let us know and we'll add colourisation support for it.

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


Written By
Architect
Netherlands Netherlands
Please visit my website for more articles

I'm software developer & Ph.D. student

Comments and Discussions