From d8c470343e50b342024491219bd43678a24b4a03 Mon Sep 17 00:00:00 2001 From: Melanie Thielker Date: Fri, 26 Sep 2008 16:11:53 +0000 Subject: Compiler Connection! One world, one compiler! --- .../DotNetEngine/Compiler/LSL/CSCodeGenerator.cs | 946 - .../DotNetEngine/Compiler/LSL/Compiler.cs | 509 - .../Compiler/LSL/LSL2CSCodeTransformer.cs | 183 - .../DotNetEngine/Compiler/LSL/YP2CSConverter.cs | 116 - .../DotNetEngine/Compiler/LSL/lsl.lexer.cs | 18447 ------------------- .../DotNetEngine/Compiler/LSL/lsl.parser.cs | 11001 ----------- .../DotNetEngine/Compiler/YieldProlog/Atom.cs | 218 - .../Compiler/YieldProlog/BagofAnswers.cs | 239 - .../Compiler/YieldProlog/FindallAnswers.cs | 108 - .../DotNetEngine/Compiler/YieldProlog/Functor.cs | 196 - .../DotNetEngine/Compiler/YieldProlog/Functor1.cs | 124 - .../DotNetEngine/Compiler/YieldProlog/Functor2.cs | 163 - .../DotNetEngine/Compiler/YieldProlog/Functor3.cs | 141 - .../Compiler/YieldProlog/IndexedAnswers.cs | 385 - .../DotNetEngine/Compiler/YieldProlog/ListPair.cs | 166 - .../DotNetEngine/Compiler/YieldProlog/Parser.cs | 4575 ----- .../Compiler/YieldProlog/PrologException.cs | 159 - .../DotNetEngine/Compiler/YieldProlog/README.TXT | 514 - .../YieldProlog/UndefinedPredicateException.cs | 62 - .../DotNetEngine/Compiler/YieldProlog/Variable.cs | 222 - .../DotNetEngine/Compiler/YieldProlog/YP.cs | 2701 --- .../Compiler/YieldProlog/YPCompiler.cs | 6382 ------- .../DotNetEngine/Compiler/c_sharp_example.txt | 12 - .../ScriptEngine/DotNetEngine/ScriptManager.cs | 39 +- .../ScriptEngine/Shared/CodeTools/Compiler.cs | 4 +- prebuild.xml | 1 + 26 files changed, 23 insertions(+), 47590 deletions(-) delete mode 100644 OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/LSL/CSCodeGenerator.cs delete mode 100644 OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/LSL/Compiler.cs delete mode 100644 OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/LSL/LSL2CSCodeTransformer.cs delete mode 100644 OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/LSL/YP2CSConverter.cs delete mode 100644 OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/LSL/lsl.lexer.cs delete mode 100644 OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/LSL/lsl.parser.cs delete mode 100644 OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/YieldProlog/Atom.cs delete mode 100644 OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/YieldProlog/BagofAnswers.cs delete mode 100644 OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/YieldProlog/FindallAnswers.cs delete mode 100644 OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/YieldProlog/Functor.cs delete mode 100644 OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/YieldProlog/Functor1.cs delete mode 100644 OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/YieldProlog/Functor2.cs delete mode 100644 OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/YieldProlog/Functor3.cs delete mode 100644 OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/YieldProlog/IndexedAnswers.cs delete mode 100644 OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/YieldProlog/ListPair.cs delete mode 100644 OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/YieldProlog/Parser.cs delete mode 100644 OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/YieldProlog/PrologException.cs delete mode 100644 OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/YieldProlog/README.TXT delete mode 100644 OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/YieldProlog/UndefinedPredicateException.cs delete mode 100644 OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/YieldProlog/Variable.cs delete mode 100644 OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/YieldProlog/YP.cs delete mode 100644 OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/YieldProlog/YPCompiler.cs delete mode 100644 OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/c_sharp_example.txt diff --git a/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/LSL/CSCodeGenerator.cs b/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/LSL/CSCodeGenerator.cs deleted file mode 100644 index c4b0fd4..0000000 --- a/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/LSL/CSCodeGenerator.cs +++ /dev/null @@ -1,946 +0,0 @@ -/* - * Copyright (c) Contributors, http://opensimulator.org/ - * See CONTRIBUTORS.TXT for a full list of copyright holders. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * * Neither the name of the OpenSim Project nor the - * names of its contributors may be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY - * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -using System; -using System.IO; -using System.Collections.Generic; -using Tools; - -namespace OpenSim.Region.ScriptEngine.DotNetEngine.Compiler.LSL -{ - public class CSCodeGenerator - { - private SYMBOL m_astRoot = null; - private Dictionary, KeyValuePair> m_positionMap; - private int m_indentWidth = 4; // for indentation - private int m_braceCount; // for indentation - private int m_CSharpLine; // the current line of generated C# code - private int m_CSharpCol; // the current column of generated C# code - - /// - /// Creates an 'empty' CSCodeGenerator instance. - /// - public CSCodeGenerator() - { - ResetCounters(); - } - - /// - /// Get the mapping between LSL and C# line/column number. - /// - /// Dictionary\, KeyValuePair\\>. - public Dictionary, KeyValuePair> PositionMap - { - get { return m_positionMap; } - } - - /// - /// Get the mapping between LSL and C# line/column number. - /// - /// SYMBOL pointing to root of the abstract syntax tree. - public SYMBOL ASTRoot - { - get { return m_astRoot; } - } - - /// - /// Resets various counters and metadata. - /// - private void ResetCounters() - { - m_braceCount = 0; - m_CSharpLine = 0; - m_CSharpCol = 1; - m_positionMap = new Dictionary, KeyValuePair>(); - m_astRoot = null; - } - - /// - /// Generate the code from the AST we have. - /// - /// The LSL source as a string. - /// String containing the generated C# code. - public string Convert(string script) - { - ResetCounters(); - Parser p = new LSLSyntax(new yyLSLSyntax(), new ErrorHandler(true)); - // Obviously this needs to be in a try/except block. - LSL2CSCodeTransformer codeTransformer = new LSL2CSCodeTransformer(p.Parse(script)); - m_astRoot = codeTransformer.Transform(); - - string retstr = String.Empty; - - // standard preamble - //retstr = GenerateLine("using OpenSim.Region.ScriptEngine.Common;"); - //retstr += GenerateLine("using System.Collections.Generic;"); - //retstr += GenerateLine(""); - //retstr += GenerateLine("namespace SecondLife"); - //retstr += GenerateLine("{"); - m_braceCount++; - //retstr += GenerateIndentedLine("public class Script : OpenSim.Region.ScriptEngine.Common"); - //retstr += GenerateIndentedLine("{"); - m_braceCount++; - - // line number - m_CSharpLine += 3; - - // here's the payload - retstr += GenerateLine(); - foreach (SYMBOL s in m_astRoot.kids) - retstr += GenerateNode(s); - - // close braces! - m_braceCount--; - //retstr += GenerateIndentedLine("}"); - m_braceCount--; - //retstr += GenerateLine("}"); - - return retstr; - } - - /// - /// Recursively called to generate each type of node. Will generate this - /// node, then all it's children. - /// - /// The current node to generate code for. - /// String containing C# code for SYMBOL s. - private string GenerateNode(SYMBOL s) - { - string retstr = String.Empty; - - // make sure to put type lower in the inheritance hierarchy first - // ie: since IdentArgument and ExpressionArgument inherit from - // Argument, put IdentArgument and ExpressionArgument before Argument - if (s is GlobalFunctionDefinition) - retstr += GenerateGlobalFunctionDefinition((GlobalFunctionDefinition) s); - else if (s is GlobalVariableDeclaration) - retstr += GenerateGlobalVariableDeclaration((GlobalVariableDeclaration) s); - else if (s is State) - retstr += GenerateState((State) s); - else if (s is CompoundStatement) - retstr += GenerateCompoundStatement((CompoundStatement) s); - else if (s is Declaration) - retstr += GenerateDeclaration((Declaration) s); - else if (s is Statement) - retstr += GenerateStatement((Statement) s); - else if (s is ReturnStatement) - retstr += GenerateReturnStatement((ReturnStatement) s); - else if (s is JumpLabel) - retstr += GenerateJumpLabel((JumpLabel) s); - else if (s is JumpStatement) - retstr += GenerateJumpStatement((JumpStatement) s); - else if (s is StateChange) - retstr += GenerateStateChange((StateChange) s); - else if (s is IfStatement) - retstr += GenerateIfStatement((IfStatement) s); - else if (s is WhileStatement) - retstr += GenerateWhileStatement((WhileStatement) s); - else if (s is DoWhileStatement) - retstr += GenerateDoWhileStatement((DoWhileStatement) s); - else if (s is ForLoop) - retstr += GenerateForLoop((ForLoop) s); - else if (s is ArgumentList) - retstr += GenerateArgumentList((ArgumentList) s); - else if (s is Assignment) - retstr += GenerateAssignment((Assignment) s); - else if (s is BinaryExpression) - retstr += GenerateBinaryExpression((BinaryExpression) s); - else if (s is ParenthesisExpression) - retstr += GenerateParenthesisExpression((ParenthesisExpression) s); - else if (s is UnaryExpression) - retstr += GenerateUnaryExpression((UnaryExpression) s); - else if (s is IncrementDecrementExpression) - retstr += GenerateIncrementDecrementExpression((IncrementDecrementExpression) s); - else if (s is TypecastExpression) - retstr += GenerateTypecastExpression((TypecastExpression) s); - else if (s is FunctionCall) - retstr += GenerateFunctionCall((FunctionCall) s); - else if (s is VectorConstant) - retstr += GenerateVectorConstant((VectorConstant) s); - else if (s is RotationConstant) - retstr += GenerateRotationConstant((RotationConstant) s); - else if (s is ListConstant) - retstr += GenerateListConstant((ListConstant) s); - else if (s is Constant) - retstr += GenerateConstant((Constant) s); - else if (s is IdentDotExpression) - retstr += Generate(((IdentDotExpression) s).Name + "." + ((IdentDotExpression) s).Member, s); - else if (s is IdentExpression) - retstr += Generate(((IdentExpression) s).Name, s); - else if (s is IDENT) - retstr += Generate(((TOKEN) s).yytext, s); - else - { - foreach (SYMBOL kid in s.kids) - retstr += GenerateNode(kid); - } - - return retstr; - } - - /// - /// Generates the code for a GlobalFunctionDefinition node. - /// - /// The GlobalFunctionDefinition node. - /// String containing C# code for GlobalFunctionDefinition gf. - private string GenerateGlobalFunctionDefinition(GlobalFunctionDefinition gf) - { - string retstr = String.Empty; - - // we need to separate the argument declaration list from other kids - List argumentDeclarationListKids = new List(); - List remainingKids = new List(); - - foreach (SYMBOL kid in gf.kids) - if (kid is ArgumentDeclarationList) - argumentDeclarationListKids.Add(kid); - else - remainingKids.Add(kid); - - retstr += GenerateIndented(String.Format("{0} {1}(", gf.ReturnType, gf.Name), gf); - - // print the state arguments, if any - foreach (SYMBOL kid in argumentDeclarationListKids) - retstr += GenerateArgumentDeclarationList((ArgumentDeclarationList) kid); - - retstr += GenerateLine(")"); - - foreach (SYMBOL kid in remainingKids) - retstr += GenerateNode(kid); - - return retstr; - } - - /// - /// Generates the code for a GlobalVariableDeclaration node. - /// - /// The GlobalVariableDeclaration node. - /// String containing C# code for GlobalVariableDeclaration gv. - private string GenerateGlobalVariableDeclaration(GlobalVariableDeclaration gv) - { - string retstr = String.Empty; - - foreach (SYMBOL s in gv.kids) - { - retstr += Indent(); - retstr += GenerateNode(s); - retstr += GenerateLine(";"); - } - - return retstr; - } - - /// - /// Generates the code for a State node. - /// - /// The State node. - /// String containing C# code for State s. - private string GenerateState(State s) - { - string retstr = String.Empty; - - foreach (SYMBOL kid in s.kids) - if (kid is StateEvent) - retstr += GenerateStateEvent((StateEvent) kid, s.Name); - - return retstr; - } - - /// - /// Generates the code for a StateEvent node. - /// - /// The StateEvent node. - /// The name of the parent state. - /// String containing C# code for StateEvent se. - private string GenerateStateEvent(StateEvent se, string parentStateName) - { - string retstr = String.Empty; - - // we need to separate the argument declaration list from other kids - List argumentDeclarationListKids = new List(); - List remainingKids = new List(); - - foreach (SYMBOL kid in se.kids) - if (kid is ArgumentDeclarationList) - argumentDeclarationListKids.Add(kid); - else - remainingKids.Add(kid); - - // "state" (function) declaration - retstr += GenerateIndented(String.Format("public void {0}_event_{1}(", parentStateName, se.Name), se); - - // print the state arguments, if any - foreach (SYMBOL kid in argumentDeclarationListKids) - retstr += GenerateArgumentDeclarationList((ArgumentDeclarationList) kid); - - retstr += GenerateLine(")"); - - foreach (SYMBOL kid in remainingKids) - retstr += GenerateNode(kid); - - return retstr; - } - - /// - /// Generates the code for an ArgumentDeclarationList node. - /// - /// The ArgumentDeclarationList node. - /// String containing C# code for ArgumentDeclarationList adl. - private string GenerateArgumentDeclarationList(ArgumentDeclarationList adl) - { - string retstr = String.Empty; - - int comma = adl.kids.Count - 1; // tells us whether to print a comma - - foreach (Declaration d in adl.kids) - { - retstr += Generate(String.Format("{0} {1}", d.Datatype, d.Id), d); - if (0 < comma--) - retstr += Generate(", "); - } - - return retstr; - } - - /// - /// Generates the code for an ArgumentList node. - /// - /// The ArgumentList node. - /// String containing C# code for ArgumentList al. - private string GenerateArgumentList(ArgumentList al) - { - string retstr = String.Empty; - - int comma = al.kids.Count - 1; // tells us whether to print a comma - - foreach (SYMBOL s in al.kids) - { - retstr += GenerateNode(s); - if (0 < comma--) - retstr += Generate(", "); - } - - return retstr; - } - - /// - /// Generates the code for a CompoundStatement node. - /// - /// The CompoundStatement node. - /// String containing C# code for CompoundStatement cs. - private string GenerateCompoundStatement(CompoundStatement cs) - { - string retstr = String.Empty; - - // opening brace - retstr += GenerateIndentedLine("{"); - m_braceCount++; - - foreach (SYMBOL kid in cs.kids) - retstr += GenerateNode(kid); - - // closing brace - m_braceCount--; - retstr += GenerateIndentedLine("}"); - - return retstr; - } - - /// - /// Generates the code for a Declaration node. - /// - /// The Declaration node. - /// String containing C# code for Declaration d. - private string GenerateDeclaration(Declaration d) - { - return Generate(String.Format("{0} {1}", d.Datatype, d.Id), d); - } - - /// - /// Generates the code for a Statement node. - /// - /// The Statement node. - /// String containing C# code for Statement s. - private string GenerateStatement(Statement s) - { - string retstr = String.Empty; - bool printSemicolon = true; - - retstr += Indent(); - - if (0 < s.kids.Count) - { - // Jump label prints its own colon, we don't need a semicolon. - printSemicolon = !(s.kids.Top is JumpLabel); - - foreach (SYMBOL kid in s.kids) - retstr += GenerateNode(kid); - } - - if (printSemicolon) - retstr += GenerateLine(";"); - - return retstr; - } - - /// - /// Generates the code for an Assignment node. - /// - /// The Assignment node. - /// String containing C# code for Assignment a. - private string GenerateAssignment(Assignment a) - { - string retstr = String.Empty; - - retstr += GenerateNode((SYMBOL) a.kids.Pop()); - retstr += Generate(String.Format(" {0} ", a.AssignmentType), a); - foreach (SYMBOL kid in a.kids) - retstr += GenerateNode(kid); - - return retstr; - } - - /// - /// Generates the code for a ReturnStatement node. - /// - /// The ReturnStatement node. - /// String containing C# code for ReturnStatement rs. - private string GenerateReturnStatement(ReturnStatement rs) - { - string retstr = String.Empty; - - retstr += Generate("return ", rs); - - foreach (SYMBOL kid in rs.kids) - retstr += GenerateNode(kid); - - return retstr; - } - - /// - /// Generates the code for a JumpLabel node. - /// - /// The JumpLabel node. - /// String containing C# code for JumpLabel jl. - private string GenerateJumpLabel(JumpLabel jl) - { - return Generate(String.Format("{0}:\n", jl.LabelName), jl); - } - - /// - /// Generates the code for a JumpStatement node. - /// - /// The JumpStatement node. - /// String containing C# code for JumpStatement js. - private string GenerateJumpStatement(JumpStatement js) - { - return Generate(String.Format("goto {0}", js.TargetName), js); - } - - /// - /// Generates the code for an IfStatement node. - /// - /// The IfStatement node. - /// String containing C# code for IfStatement ifs. - private string GenerateIfStatement(IfStatement ifs) - { - string retstr = String.Empty; - - retstr += GenerateIndented("if (", ifs); - retstr += GenerateNode((SYMBOL) ifs.kids.Pop()); - retstr += GenerateLine(")"); - - // CompoundStatement handles indentation itself but we need to do it - // otherwise. - bool indentHere = ifs.kids.Top is Statement; - if (indentHere) m_braceCount++; - retstr += GenerateNode((SYMBOL) ifs.kids.Pop()); - if (indentHere) m_braceCount--; - - if (0 < ifs.kids.Count) // do it again for an else - { - retstr += GenerateIndentedLine("else", ifs); - - indentHere = ifs.kids.Top is Statement; - if (indentHere) m_braceCount++; - retstr += GenerateNode((SYMBOL) ifs.kids.Pop()); - if (indentHere) m_braceCount--; - } - - return retstr; - } - - /// - /// Generates the code for a StateChange node. - /// - /// The StateChange node. - /// String containing C# code for StateChange sc. - private string GenerateStateChange(StateChange sc) - { - return Generate(String.Format("state(\"{0}\")", sc.NewState), sc); - } - - /// - /// Generates the code for a WhileStatement node. - /// - /// The WhileStatement node. - /// String containing C# code for WhileStatement ws. - private string GenerateWhileStatement(WhileStatement ws) - { - string retstr = String.Empty; - - retstr += GenerateIndented("while (", ws); - retstr += GenerateNode((SYMBOL) ws.kids.Pop()); - retstr += GenerateLine(")"); - - // CompoundStatement handles indentation itself but we need to do it - // otherwise. - bool indentHere = ws.kids.Top is Statement; - if (indentHere) m_braceCount++; - retstr += GenerateNode((SYMBOL) ws.kids.Pop()); - if (indentHere) m_braceCount--; - - return retstr; - } - - /// - /// Generates the code for a DoWhileStatement node. - /// - /// The DoWhileStatement node. - /// String containing C# code for DoWhileStatement dws. - private string GenerateDoWhileStatement(DoWhileStatement dws) - { - string retstr = String.Empty; - - retstr += GenerateIndentedLine("do", dws); - - // CompoundStatement handles indentation itself but we need to do it - // otherwise. - bool indentHere = dws.kids.Top is Statement; - if (indentHere) m_braceCount++; - retstr += GenerateNode((SYMBOL) dws.kids.Pop()); - if (indentHere) m_braceCount--; - - retstr += GenerateIndented("while (", dws); - retstr += GenerateNode((SYMBOL) dws.kids.Pop()); - retstr += GenerateLine(");"); - - return retstr; - } - - /// - /// Generates the code for a ForLoop node. - /// - /// The ForLoop node. - /// String containing C# code for ForLoop fl. - private string GenerateForLoop(ForLoop fl) - { - string retstr = String.Empty; - - retstr += GenerateIndented("for (", fl); - - // for ( x = 0 ; x < 10 ; x++ ) - // ^^^^^^^ - retstr += GenerateForLoopStatement((ForLoopStatement) fl.kids.Pop()); - retstr += Generate("; "); - // for ( x = 0 ; x < 10 ; x++ ) - // ^^^^^^^^ - retstr += GenerateNode((SYMBOL) fl.kids.Pop()); - retstr += Generate("; "); - // for ( x = 0 ; x < 10 ; x++ ) - // ^^^^^ - retstr += GenerateForLoopStatement((ForLoopStatement) fl.kids.Pop()); - retstr += GenerateLine(")"); - - // CompoundStatement handles indentation itself but we need to do it - // otherwise. - bool indentHere = fl.kids.Top is Statement; - if (indentHere) m_braceCount++; - retstr += GenerateNode((SYMBOL) fl.kids.Pop()); - if (indentHere) m_braceCount--; - - return retstr; - } - - /// - /// Generates the code for a ForLoopStatement node. - /// - /// The ForLoopStatement node. - /// String containing C# code for ForLoopStatement fls. - private string GenerateForLoopStatement(ForLoopStatement fls) - { - string retstr = String.Empty; - - int comma = fls.kids.Count - 1; // tells us whether to print a comma - - foreach (SYMBOL s in fls.kids) - { - retstr += GenerateNode(s); - if (0 < comma--) - retstr += Generate(", "); - } - - return retstr; - } - - /// - /// Generates the code for a BinaryExpression node. - /// - /// The BinaryExpression node. - /// String containing C# code for BinaryExpression be. - private string GenerateBinaryExpression(BinaryExpression be) - { - string retstr = String.Empty; - - retstr += GenerateNode((SYMBOL) be.kids.Pop()); - retstr += Generate(String.Format(" {0} ", be.ExpressionSymbol), be); - foreach (SYMBOL kid in be.kids) - retstr += GenerateNode(kid); - - return retstr; - } - - /// - /// Generates the code for a UnaryExpression node. - /// - /// The UnaryExpression node. - /// String containing C# code for UnaryExpression ue. - private string GenerateUnaryExpression(UnaryExpression ue) - { - string retstr = String.Empty; - - retstr += Generate(ue.UnarySymbol, ue); - retstr += GenerateNode((SYMBOL) ue.kids.Pop()); - - return retstr; - } - - /// - /// Generates the code for a ParenthesisExpression node. - /// - /// The ParenthesisExpression node. - /// String containing C# code for ParenthesisExpression pe. - private string GenerateParenthesisExpression(ParenthesisExpression pe) - { - string retstr = String.Empty; - - retstr += Generate("("); - foreach (SYMBOL kid in pe.kids) - retstr += GenerateNode(kid); - retstr += Generate(")"); - - return retstr; - } - - /// - /// Generates the code for a IncrementDecrementExpression node. - /// - /// The IncrementDecrementExpression node. - /// String containing C# code for IncrementDecrementExpression ide. - private string GenerateIncrementDecrementExpression(IncrementDecrementExpression ide) - { - string retstr = String.Empty; - - if (0 < ide.kids.Count) - { - IdentDotExpression dot = (IdentDotExpression) ide.kids.Top; - retstr += Generate(String.Format("{0}", ide.PostOperation ? dot.Name + "." + dot.Member + ide.Operation : ide.Operation + dot.Name + "." + dot.Member), ide); - } - else - retstr += Generate(String.Format("{0}", ide.PostOperation ? ide.Name + ide.Operation : ide.Operation + ide.Name), ide); - - return retstr; - } - - /// - /// Generates the code for a TypecastExpression node. - /// - /// The TypecastExpression node. - /// String containing C# code for TypecastExpression te. - private string GenerateTypecastExpression(TypecastExpression te) - { - string retstr = String.Empty; - - // we wrap all typecasted statements in parentheses - retstr += Generate(String.Format("({0}) (", te.TypecastType), te); - retstr += GenerateNode((SYMBOL) te.kids.Pop()); - retstr += Generate(")"); - - return retstr; - } - - /// - /// Generates the code for a FunctionCall node. - /// - /// The FunctionCall node. - /// String containing C# code for FunctionCall fc. - private string GenerateFunctionCall(FunctionCall fc) - { - string retstr = String.Empty; - - retstr += Generate(String.Format("{0}(", fc.Id), fc); - - foreach (SYMBOL kid in fc.kids) - retstr += GenerateNode(kid); - - retstr += Generate(")"); - - return retstr; - } - - /// - /// Generates the code for a Constant node. - /// - /// The Constant node. - /// String containing C# code for Constant c. - private string GenerateConstant(Constant c) - { - string retstr = String.Empty; - - // Supprt LSL's weird acceptance of floats with no trailing digits - // after the period. Turn float x = 10.; into float x = 10.0; - if ("LSL_Types.LSLFloat" == c.Type) - { - int dotIndex = c.Value.IndexOf('.') + 1; - if (0 < dotIndex && (dotIndex == c.Value.Length || !Char.IsDigit(c.Value[dotIndex]))) - c.Value = c.Value.Insert(dotIndex, "0"); - c.Value = "new LSL_Types.LSLFloat("+c.Value+")"; - } - else if ("LSL_Types.LSLInteger" == c.Type) - { - c.Value = "new LSL_Types.LSLInteger("+c.Value+")"; - } - else if ("LSL_Types.LSLString" == c.Type) - { - c.Value = "new LSL_Types.LSLString(\""+c.Value+"\")"; - } - - retstr += Generate(c.Value, c); - - return retstr; - } - - /// - /// Generates the code for a VectorConstant node. - /// - /// The VectorConstant node. - /// String containing C# code for VectorConstant vc. - private string GenerateVectorConstant(VectorConstant vc) - { - string retstr = String.Empty; - - retstr += Generate(String.Format("new {0}(", vc.Type), vc); - retstr += GenerateNode((SYMBOL) vc.kids.Pop()); - retstr += Generate(", "); - retstr += GenerateNode((SYMBOL) vc.kids.Pop()); - retstr += Generate(", "); - retstr += GenerateNode((SYMBOL) vc.kids.Pop()); - retstr += Generate(")"); - - return retstr; - } - - /// - /// Generates the code for a RotationConstant node. - /// - /// The RotationConstant node. - /// String containing C# code for RotationConstant rc. - private string GenerateRotationConstant(RotationConstant rc) - { - string retstr = String.Empty; - - retstr += Generate(String.Format("new {0}(", rc.Type), rc); - retstr += GenerateNode((SYMBOL) rc.kids.Pop()); - retstr += Generate(", "); - retstr += GenerateNode((SYMBOL) rc.kids.Pop()); - retstr += Generate(", "); - retstr += GenerateNode((SYMBOL) rc.kids.Pop()); - retstr += Generate(", "); - retstr += GenerateNode((SYMBOL) rc.kids.Pop()); - retstr += Generate(")"); - - return retstr; - } - - /// - /// Generates the code for a ListConstant node. - /// - /// The ListConstant node. - /// String containing C# code for ListConstant lc. - private string GenerateListConstant(ListConstant lc) - { - string retstr = String.Empty; - - retstr += Generate(String.Format("new {0}(", lc.Type), lc); - - foreach (SYMBOL kid in lc.kids) - retstr += GenerateNode(kid); - - retstr += Generate(")"); - - return retstr; - } - - /// - /// Prints a newline. - /// - /// A newline. - private string GenerateLine() - { - return GenerateLine(""); - } - - /// - /// Prints text, followed by a newline. - /// - /// String of text to print. - /// String s followed by newline. - private string GenerateLine(string s) - { - return GenerateLine(s, null); - } - - /// - /// Prints text, followed by a newline. - /// - /// String of text to print. - /// Symbol being generated to extract original line - /// number and column from. - /// String s followed by newline. - private string GenerateLine(string s, SYMBOL sym) - { - string retstr = Generate(s, sym) + "\n"; - - m_CSharpLine++; - m_CSharpCol = 1; - - return retstr; - } - - /// - /// Prints text. - /// - /// String of text to print. - /// String s. - private string Generate(string s) - { - return Generate(s, null); - } - - /// - /// Prints text. - /// - /// String of text to print. - /// Symbol being generated to extract original line - /// number and column from. - /// String s. - private string Generate(string s, SYMBOL sym) - { - if (null != sym) - m_positionMap.Add(new KeyValuePair(m_CSharpLine, m_CSharpCol), new KeyValuePair(sym.Line, sym.Position)); - - m_CSharpCol += s.Length; - - return s; - } - - /// - /// Prints text correctly indented, followed by a newline. - /// - /// String of text to print. - /// Properly indented string s followed by newline. - private string GenerateIndentedLine(string s) - { - return GenerateIndentedLine(s, null); - } - - /// - /// Prints text correctly indented, followed by a newline. - /// - /// String of text to print. - /// Symbol being generated to extract original line - /// number and column from. - /// Properly indented string s followed by newline. - private string GenerateIndentedLine(string s, SYMBOL sym) - { - string retstr = GenerateIndented(s, sym) + "\n"; - - m_CSharpLine++; - m_CSharpCol = 1; - - return retstr; - } - - /// - /// Prints text correctly indented. - /// - /// String of text to print. - /// Properly indented string s. - //private string GenerateIndented(string s) - //{ - // return GenerateIndented(s, null); - //} - // THIS FUNCTION IS COMMENTED OUT TO SUPPRESS WARNINGS - - /// - /// Prints text correctly indented. - /// - /// String of text to print. - /// Symbol being generated to extract original line - /// number and column from. - /// Properly indented string s. - private string GenerateIndented(string s, SYMBOL sym) - { - string retstr = Indent() + s; - - if (null != sym) - m_positionMap.Add(new KeyValuePair(m_CSharpLine, m_CSharpCol), new KeyValuePair(sym.Line, sym.Position)); - - m_CSharpCol += s.Length; - - return retstr; - } - - /// - /// Prints correct indentation. - /// - /// Indentation based on brace count. - private string Indent() - { - string retstr = String.Empty; - - for (int i = 0; i < m_braceCount; i++) - for (int j = 0; j < m_indentWidth; j++) - { - retstr += " "; - m_CSharpCol++; - } - - return retstr; - } - } -} diff --git a/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/LSL/Compiler.cs b/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/LSL/Compiler.cs deleted file mode 100644 index 4adedc3..0000000 --- a/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/LSL/Compiler.cs +++ /dev/null @@ -1,509 +0,0 @@ -/* - * Copyright (c) Contributors, http://opensimulator.org/ - * See CONTRIBUTORS.TXT for a full list of copyright holders. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * * Neither the name of the OpenSim Project nor the - * names of its contributors may be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY - * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -using System; -using System.CodeDom.Compiler; -using System.Collections.Generic; -using System.Globalization; -using System.IO; -using Microsoft.CSharp; -using Microsoft.JScript; -using Microsoft.VisualBasic; -using OpenSim.Region.Environment.Interfaces; - -namespace OpenSim.Region.ScriptEngine.DotNetEngine.Compiler.LSL -{ - public class Compiler - { - private static readonly log4net.ILog m_log - = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType); - - // * Uses "LSL2Converter" to convert LSL to C# if necessary. - // * Compiles C#-code into an assembly - // * Returns assembly name ready for AppDomain load. - // - // Assembly is compiled using LSL_BaseClass as base. Look at debug C# code file created when LSL script is compiled for full details. - // - - internal enum enumCompileType - { - lsl = 0, - cs = 1, - vb = 2, - js = 3, - yp = 4 - } - - /// - /// This contains number of lines WE use for header when compiling script. User will get error in line x-LinesToRemoveOnError when error occurs. - /// - public int LinesToRemoveOnError = 3; - private enumCompileType DefaultCompileLanguage; - private bool WriteScriptSourceToDebugFile; - private bool CompileWithDebugInformation; - // private bool CleanUpOldScriptsOnStartup; - private Dictionary AllowedCompilers = new Dictionary(StringComparer.CurrentCultureIgnoreCase); - private Dictionary LanguageMapping = new Dictionary(StringComparer.CurrentCultureIgnoreCase); - - private string FilePrefix; - private string ScriptEnginesPath = "ScriptEngines"; - - private static CSCodeGenerator LSL_Converter = new CSCodeGenerator(); - private static Dictionary, KeyValuePair> m_positionMap; // mapping between LSL and C# line/column numbers - private static CSharpCodeProvider CScodeProvider = new CSharpCodeProvider(); - private static VBCodeProvider VBcodeProvider = new VBCodeProvider(); - private static JScriptCodeProvider JScodeProvider = new JScriptCodeProvider(); - private static CSharpCodeProvider YPcodeProvider = new CSharpCodeProvider(); // YP is translated into CSharp - private static YP2CSConverter YP_Converter = new YP2CSConverter(); - - private static int instanceID = new Random().Next(0, int.MaxValue); // Unique number to use on our compiled files - private static UInt64 scriptCompileCounter = 0; // And a counter - - public ScriptEngine m_scriptEngine; - public Compiler(ScriptEngine scriptEngine) - { - m_scriptEngine = scriptEngine; - ReadConfig(); - } - public bool in_startup = true; - public void ReadConfig() - { - - // Get some config - WriteScriptSourceToDebugFile = m_scriptEngine.ScriptConfigSource.GetBoolean("WriteScriptSourceToDebugFile", true); - CompileWithDebugInformation = m_scriptEngine.ScriptConfigSource.GetBoolean("CompileWithDebugInformation", true); - // CleanUpOldScriptsOnStartup = m_scriptEngine.ScriptConfigSource.GetBoolean("CleanUpOldScriptsOnStartup", true); - - // Get file prefix from scriptengine name and make it file system safe: - FilePrefix = m_scriptEngine.ScriptEngineName; - foreach (char c in Path.GetInvalidFileNameChars()) - { - FilePrefix = FilePrefix.Replace(c, '_'); - } - - // First time we start? Delete old files - if (in_startup) - { - in_startup = false; - DeleteOldFiles(); - } - - // Map name and enum type of our supported languages - LanguageMapping.Add(enumCompileType.cs.ToString(), enumCompileType.cs); - LanguageMapping.Add(enumCompileType.vb.ToString(), enumCompileType.vb); - LanguageMapping.Add(enumCompileType.lsl.ToString(), enumCompileType.lsl); - LanguageMapping.Add(enumCompileType.js.ToString(), enumCompileType.js); - LanguageMapping.Add(enumCompileType.yp.ToString(), enumCompileType.yp); - - // Allowed compilers - string allowComp = m_scriptEngine.ScriptConfigSource.GetString("AllowedCompilers", "lsl,cs,vb,js,yp"); - AllowedCompilers.Clear(); - -#if DEBUG - m_scriptEngine.Log.Debug("[" + m_scriptEngine.ScriptEngineName + "]: Allowed languages: " + allowComp); -#endif - - - foreach (string strl in allowComp.Split(',')) - { - string strlan = strl.Trim(" \t".ToCharArray()).ToLower(); - if (!LanguageMapping.ContainsKey(strlan)) - { - m_scriptEngine.Log.Error("[" + m_scriptEngine.ScriptEngineName + "]: Config error. Compiler is unable to recognize language type \"" + strlan + "\" specified in \"AllowedCompilers\"."); - } - else - { -#if DEBUG - //m_scriptEngine.Log.Debug("[" + m_scriptEngine.ScriptEngineName + "]: Config OK. Compiler recognized language type \"" + strlan + "\" specified in \"AllowedCompilers\"."); -#endif - } - AllowedCompilers.Add(strlan, true); - } - if (AllowedCompilers.Count == 0) - m_scriptEngine.Log.Error("[" + m_scriptEngine.ScriptEngineName + "]: Config error. Compiler could not recognize any language in \"AllowedCompilers\". Scripts will not be executed!"); - - // Default language - string defaultCompileLanguage = m_scriptEngine.ScriptConfigSource.GetString("DefaultCompileLanguage", "lsl").ToLower(); - - // Is this language recognized at all? - if (!LanguageMapping.ContainsKey(defaultCompileLanguage)) - { - m_scriptEngine.Log.Error("[" + m_scriptEngine.ScriptEngineName + "]: " + - "Config error. Default language \"" + defaultCompileLanguage + "\" specified in \"DefaultCompileLanguage\" is not recognized as a valid language. Changing default to: \"lsl\"."); - defaultCompileLanguage = "lsl"; - } - - // Is this language in allow-list? - if (!AllowedCompilers.ContainsKey(defaultCompileLanguage)) - { - m_scriptEngine.Log.Error("[" + m_scriptEngine.ScriptEngineName + "]: " + - "Config error. Default language \"" + defaultCompileLanguage + "\"specified in \"DefaultCompileLanguage\" is not in list of \"AllowedCompilers\". Scripts may not be executed!"); - } - else - { -#if DEBUG -// m_scriptEngine.Log.Debug("[" + m_scriptEngine.ScriptEngineName + "]: " + -// "Config OK. Default language \"" + defaultCompileLanguage + "\" specified in \"DefaultCompileLanguage\" is recognized as a valid language."); -#endif - // LANGUAGE IS IN ALLOW-LIST - DefaultCompileLanguage = LanguageMapping[defaultCompileLanguage]; - } - - // We now have an allow-list, a mapping list, and a default language - - } - - /// - /// Delete old script files - /// - private void DeleteOldFiles() - { - - // CREATE FOLDER IF IT DOESNT EXIST - if (!Directory.Exists(ScriptEnginesPath)) - { - try - { - Directory.CreateDirectory(ScriptEnginesPath); - } - catch (Exception ex) - { - m_scriptEngine.Log.Error("[" + m_scriptEngine.ScriptEngineName + "]: Exception trying to create ScriptEngine directory \"" + ScriptEnginesPath + "\": " + ex.ToString()); - } - } - - foreach (string file in Directory.GetFiles(ScriptEnginesPath)) - { - //m_scriptEngine.Log.Error("[" + m_scriptEngine.ScriptEngineName + "]: FILE FOUND: " + file); - - if (file.ToLower().StartsWith(FilePrefix + "_compiled_") || - file.ToLower().StartsWith(FilePrefix + "_source_")) - { - try - { - File.Delete(file); - } - catch (Exception ex) - { - m_scriptEngine.Log.Error("[" + m_scriptEngine.ScriptEngineName + "]: Exception trying delete old script file \"" + file + "\": " + ex.ToString()); - } - - } - } - - } - - /// - /// Converts script from LSL to CS and calls CompileFromCSText - /// - /// LSL script - /// Filename to .dll assembly - public string PerformScriptCompile(string Script) - { - enumCompileType l = DefaultCompileLanguage; - - - if (Script.StartsWith("//c#", true, CultureInfo.InvariantCulture)) - l = enumCompileType.cs; - if (Script.StartsWith("//vb", true, CultureInfo.InvariantCulture)) - { - l = enumCompileType.vb; - // We need to remove //vb, it won't compile with that - - Script = Script.Substring(4, Script.Length - 4); - } - if (Script.StartsWith("//lsl", true, CultureInfo.InvariantCulture)) - l = enumCompileType.lsl; - - if (Script.StartsWith("//js", true, CultureInfo.InvariantCulture)) - l = enumCompileType.js; - - if (Script.StartsWith("//yp", true, CultureInfo.InvariantCulture)) - l = enumCompileType.yp; - - if (!AllowedCompilers.ContainsKey(l.ToString())) - { - // Not allowed to compile to this language! - string errtext = String.Empty; - errtext += "The compiler for language \"" + l.ToString() + "\" is not in list of allowed compilers. Script will not be executed!"; - throw new Exception(errtext); - } - - string compileScript = Script; - - if (l == enumCompileType.lsl) - { - // Its LSL, convert it to C# - compileScript = LSL_Converter.Convert(Script); - m_positionMap = LSL_Converter.PositionMap; - l = enumCompileType.cs; - } - - if (l == enumCompileType.yp) - { - // Its YP, convert it to C# - compileScript = YP_Converter.Convert(Script); - // We have our own processor now - //l = enumCompileType.cs; - } - - // Insert additional assemblies here - - //ADAM: Disabled for the moment until it's working right. - bool enableCommanderLSL = false; - - if (enableCommanderLSL == true && ((l == enumCompileType.cs) || (l == enumCompileType.yp))) - { - foreach (KeyValuePair com - in m_scriptEngine.World.GetCommanders()) - { - compileScript = com.Value.GenerateRuntimeAPI() + compileScript; - } - } - - // End of insert - - - switch (l) - { - case enumCompileType.cs: - compileScript = CreateCSCompilerScript(compileScript); - break; - case enumCompileType.vb: - compileScript = CreateVBCompilerScript(compileScript); - break; - case enumCompileType.js: - compileScript = CreateJSCompilerScript(compileScript); - break; - case enumCompileType.yp: - compileScript = CreateYPCompilerScript(compileScript); - break; - } - - m_log.Debug("[ScriptEngine.DotNetEngine]: Preparing to compile the following LSL to C# translated code"); - m_log.Debug(""); - m_log.Debug(compileScript); - - return CompileFromDotNetText(compileScript, l); - } - - private static string CreateJSCompilerScript(string compileScript) - { - compileScript = String.Empty + - "import OpenSim.Region.ScriptEngine.Shared; import System.Collections.Generic;\r\n" + - "package SecondLife {\r\n" + - "class Script extends OpenSim.Region.ScriptEngine.Shared.ScriptBase.ScriptBaseClass { \r\n" + - compileScript + - "} }\r\n"; - return compileScript; - } - - private static string CreateCSCompilerScript(string compileScript) - { - compileScript = String.Empty + - "using OpenSim.Region.ScriptEngine.Shared; using System.Collections.Generic;\r\n" + - String.Empty + "namespace SecondLife { " + - String.Empty + "public class Script : OpenSim.Region.ScriptEngine.Shared.ScriptBase.ScriptBaseClass { \r\n" + - @"public Script() { } " + - compileScript + - "} }\r\n"; - return compileScript; - } - - private static string CreateYPCompilerScript(string compileScript) - { - compileScript = String.Empty + - "using OpenSim.Region.ScriptEngine.DotNetEngine.Compiler.YieldProlog; " + - "using OpenSim.Region.ScriptEngine.Shared; using System.Collections.Generic;\r\n" + - String.Empty + "namespace SecondLife { " + - String.Empty + "public class Script : OpenSim.Region.ScriptEngine.Shared.ScriptBase.ScriptBaseClass { \r\n" + - //@"public Script() { } " + - @"static OpenSim.Region.ScriptEngine.DotNetEngine.Compiler.YieldProlog.YP YP=null; " + - @"public Script() { YP= new OpenSim.Region.ScriptEngine.DotNetEngine.Compiler.YieldProlog.YP(); } "+ - - compileScript + - "} }\r\n"; - return compileScript; - } - - private static string CreateVBCompilerScript(string compileScript) - { - compileScript = String.Empty + - "Imports OpenSim.Region.ScriptEngine.Shared: Imports System.Collections.Generic: " + - String.Empty + "NameSpace SecondLife:" + - String.Empty + "Public Class Script: Inherits OpenSim.Region.ScriptEngine.Shared.ScriptBase.ScriptBaseClass: " + - "\r\nPublic Sub New()\r\nEnd Sub: " + - compileScript + - ":End Class :End Namespace\r\n"; - return compileScript; - } - - /// - /// Compile .NET script to .Net assembly (.dll) - /// - /// CS script - /// Filename to .dll assembly - internal string CompileFromDotNetText(string Script, enumCompileType lang) - { - string ext = "." + lang.ToString(); - - // Output assembly name - scriptCompileCounter++; - string OutFile = - Path.Combine("ScriptEngines", - FilePrefix + "_compiled_" + instanceID.ToString() + "_" + scriptCompileCounter.ToString() + ".dll"); -#if DEBUG - m_scriptEngine.Log.Debug("[" + m_scriptEngine.ScriptEngineName + "]: Starting compile of \"" + OutFile + "\"."); -#endif - try - { - File.Delete(OutFile); - } - catch (Exception e) // NOTLEGIT - Should be just catching FileIOException - { - //m_scriptEngine.Log.Error("[" + m_scriptEngine.ScriptEngineName + "]: Unable to delete old existring script-file before writing new. Compile aborted: " + e.ToString()); - throw new Exception("Unable to delete old existring script-file before writing new. Compile aborted: " + e.ToString()); - } - //string OutFile = Path.Combine("ScriptEngines", "SecondLife.Script.dll"); - - // DEBUG - write source to disk - if (WriteScriptSourceToDebugFile) - { - string srcFileName = FilePrefix + "_source_" + Path.GetFileNameWithoutExtension(OutFile) + ext; - try - { - File.WriteAllText( - Path.Combine("ScriptEngines", srcFileName), - Script); - } - catch (Exception ex) // NOTLEGIT - Should be just catching FileIOException - { - m_scriptEngine.Log.Error("[" + m_scriptEngine.ScriptEngineName + "]: Exception while trying to write script source to file \"" + srcFileName + "\": " + ex.ToString()); - } - } - - // Do actual compile - CompilerParameters parameters = new CompilerParameters(); - - parameters.IncludeDebugInformation = true; - - // Add all available assemblies -// foreach (Assembly asm in AppDomain.CurrentDomain.GetAssemblies()) -// { -// Console.WriteLine("Adding assembly: " + asm.Location); -// parameters.ReferencedAssemblies.Add(asm.Location); -// } - - string rootPath = Path.GetDirectoryName(AppDomain.CurrentDomain.BaseDirectory); - string rootPathSE = Path.GetDirectoryName(GetType().Assembly.Location); - //Console.WriteLine("Assembly location: " + rootPath); - parameters.ReferencedAssemblies.Add(Path.Combine(rootPath, "OpenSim.Region.ScriptEngine.Shared.dll")); - parameters.ReferencedAssemblies.Add(Path.Combine(rootPath, "OpenSim.Region.ScriptEngine.Shared.Api.Runtime.dll")); - - if (lang == enumCompileType.yp) - { - parameters.ReferencedAssemblies.Add(Path.Combine(rootPath, "OpenSim.Region.ScriptEngine.Shared.YieldProlog.dll")); - } - - //parameters.ReferencedAssemblies.Add("OpenSim.Region.Environment"); - parameters.GenerateExecutable = false; - parameters.OutputAssembly = OutFile; - parameters.IncludeDebugInformation = CompileWithDebugInformation; - //parameters.WarningLevel = 1; // Should be 4? - parameters.TreatWarningsAsErrors = false; - - CompilerResults results; - switch (lang) - { - case enumCompileType.vb: - results = VBcodeProvider.CompileAssemblyFromSource(parameters, Script); - break; - case enumCompileType.cs: - results = CScodeProvider.CompileAssemblyFromSource(parameters, Script); - break; - case enumCompileType.js: - results = JScodeProvider.CompileAssemblyFromSource(parameters, Script); - break; - case enumCompileType.yp: - results = YPcodeProvider.CompileAssemblyFromSource(parameters, Script); - break; - default: - throw new Exception("Compiler is not able to recongnize language type \"" + lang.ToString() + "\""); - } - - // Check result - // Go through errors - - // - // WARNINGS AND ERRORS - // - if (results.Errors.Count > 0) - { - string errtext = String.Empty; - foreach (CompilerError CompErr in results.Errors) - { - KeyValuePair lslPos; - - try - { - lslPos = m_positionMap[new KeyValuePair(CompErr.Line, CompErr.Column)]; - } - catch (KeyNotFoundException) // we don't have this line/column mapped - { - m_scriptEngine.Log.Debug(String.Format("[{0}]: Lookup of C# line {1}, column {2} failed.", m_scriptEngine.ScriptEngineName, CompErr.Line, CompErr.Column)); - lslPos = new KeyValuePair(-CompErr.Line, -CompErr.Column); - } - - // The Second Life viewer's script editor begins - // countingn lines and columns at 0, so we subtract 1. - errtext += String.Format("Line {0}, column {1}, Error Number: {2}, '{3}'\r\n", lslPos.Key - 1, lslPos.Value - 1, CompErr.ErrorNumber, CompErr.ErrorText); - //errtext += "Line number " + (CompErr.Line - LinesToRemoveOnError) + - // ", Error Number: " + CompErr.ErrorNumber + - // ", '" + CompErr.ErrorText + "'\r\n"; - } - Console.WriteLine("[COMPILER ERROR]:" + errtext); - if (!File.Exists(OutFile)) - { - throw new Exception(errtext); - } - } - - - // - // NO ERRORS, BUT NO COMPILED FILE - // - if (!File.Exists(OutFile)) - { - string errtext = String.Empty; - errtext += "No compile error. But not able to locate compiled file."; - throw new Exception(errtext); - } - return OutFile; - } - } -} diff --git a/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/LSL/LSL2CSCodeTransformer.cs b/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/LSL/LSL2CSCodeTransformer.cs deleted file mode 100644 index 8abf3b9..0000000 --- a/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/LSL/LSL2CSCodeTransformer.cs +++ /dev/null @@ -1,183 +0,0 @@ -/* - * Copyright (c) Contributors, http://opensimulator.org/ - * See CONTRIBUTORS.TXT for a full list of copyright holders. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * * Neither the name of the OpenSim Project nor the - * names of its contributors may be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY - * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -using System; -using System.Collections.Generic; -using Tools; - -namespace OpenSim.Region.ScriptEngine.DotNetEngine.Compiler.LSL -{ - public class LSL2CSCodeTransformer - { - private SYMBOL m_astRoot = null; - private static Dictionary m_datatypeLSL2OpenSim = null; - - /// - /// Pass the new CodeTranformer an abstract syntax tree. - /// - /// The root node of the AST. - public LSL2CSCodeTransformer(SYMBOL astRoot) - { - m_astRoot = astRoot; - - // let's populate the dictionary - if (null == m_datatypeLSL2OpenSim) - { - m_datatypeLSL2OpenSim = new Dictionary(); - m_datatypeLSL2OpenSim.Add("integer", "LSL_Types.LSLInteger"); - m_datatypeLSL2OpenSim.Add("float", "LSL_Types.LSLFloat"); - //m_datatypeLSL2OpenSim.Add("key", "LSL_Types.key"); // key doesn't seem to be used - m_datatypeLSL2OpenSim.Add("key", "LSL_Types.LSLString"); - m_datatypeLSL2OpenSim.Add("string", "LSL_Types.LSLString"); - m_datatypeLSL2OpenSim.Add("vector", "LSL_Types.Vector3"); - m_datatypeLSL2OpenSim.Add("rotation", "LSL_Types.Quaternion"); - m_datatypeLSL2OpenSim.Add("list", "LSL_Types.list"); - } - } - - /// - /// Transform the code in the AST we have. - /// - /// The root node of the transformed AST - public SYMBOL Transform() - { - foreach (SYMBOL s in m_astRoot.kids) - TransformNode(s); - - return m_astRoot; - } - - /// - /// Recursively called to transform each type of node. Will transform this - /// node, then all it's children. - /// - /// The current node to transform. - private void TransformNode(SYMBOL s) - { - // make sure to put type lower in the inheritance hierarchy first - // ie: since IdentConstant and StringConstant inherit from Constant, - // put IdentConstant and StringConstant before Constant - if (s is Declaration) - ((Declaration) s).Datatype = m_datatypeLSL2OpenSim[((Declaration) s).Datatype]; - else if (s is Constant) - ((Constant) s).Type = m_datatypeLSL2OpenSim[((Constant) s).Type]; - else if (s is TypecastExpression) - ((TypecastExpression) s).TypecastType = m_datatypeLSL2OpenSim[((TypecastExpression) s).TypecastType]; - else if (s is GlobalFunctionDefinition && "void" != ((GlobalFunctionDefinition) s).ReturnType) // we don't need to translate "void" - ((GlobalFunctionDefinition) s).ReturnType = m_datatypeLSL2OpenSim[((GlobalFunctionDefinition) s).ReturnType]; - - for (int i = 0; i < s.kids.Count; i++) - { - if (!(s is Assignment || s is ArgumentDeclarationList) && s.kids[i] is Declaration) - AddImplicitInitialization(s, i); - - TransformNode((SYMBOL) s.kids[i]); - } - } - - /// - /// Replaces an instance of the node at s.kids[didx] with an assignment - /// node. The assignment node has the Declaration node on the left hand - /// side and a default initializer on the right hand side. - /// - /// - /// The node containing the Declaration node that needs replacing. - /// - /// Index of the Declaration node to replace. - private void AddImplicitInitialization(SYMBOL s, int didx) - { - // We take the kids for a while to play with them. - int sKidSize = s.kids.Count; - object [] sKids = new object[sKidSize]; - for (int i = 0; i < sKidSize; i++) - sKids[i] = s.kids.Pop(); - - // The child to be changed. - Declaration currentDeclaration = (Declaration) sKids[didx]; - - // We need an assignment node. - Assignment newAssignment = new Assignment(currentDeclaration.yyps, - currentDeclaration, - GetZeroConstant(currentDeclaration.yyps, currentDeclaration.Datatype), - "="); - sKids[didx] = newAssignment; - - // Put the kids back where they belong. - for (int i = 0; i < sKidSize; i++) - s.kids.Add(sKids[i]); - } - - /// - /// Generates the node structure required to generate a default - /// initialization. - /// - /// - /// Tools.Parser instance to use when instantiating nodes. - /// - /// String describing the datatype. - /// - /// A SYMBOL node conaining the appropriate structure for intializing a - /// constantType. - /// - private SYMBOL GetZeroConstant(Parser p, string constantType) - { - switch (constantType) - { - case "integer": - return new Constant(p, constantType, "0"); - case "float": - return new Constant(p, constantType, "0.0"); - case "string": - case "key": - return new Constant(p, constantType, ""); - case "list": - ArgumentList al = new ArgumentList(p); - return new ListConstant(p, al); - case "vector": - Constant vca = new Constant(p, "float", "0.0"); - Constant vcb = new Constant(p, "float", "0.0"); - Constant vcc = new Constant(p, "float", "0.0"); - ConstantExpression vcea = new ConstantExpression(p, vca); - ConstantExpression vceb = new ConstantExpression(p, vcb); - ConstantExpression vcec = new ConstantExpression(p, vcc); - return new VectorConstant(p, vcea, vceb, vcec); - case "rotation": - Constant rca = new Constant(p, "float", "0.0"); - Constant rcb = new Constant(p, "float", "0.0"); - Constant rcc = new Constant(p, "float", "0.0"); - Constant rcd = new Constant(p, "float", "0.0"); - ConstantExpression rcea = new ConstantExpression(p, rca); - ConstantExpression rceb = new ConstantExpression(p, rcb); - ConstantExpression rcec = new ConstantExpression(p, rcc); - ConstantExpression rced = new ConstantExpression(p, rcd); - return new RotationConstant(p, rcea, rceb, rcec, rced); - default: - return null; // this will probably break stuff - } - } - } -} diff --git a/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/LSL/YP2CSConverter.cs b/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/LSL/YP2CSConverter.cs deleted file mode 100644 index 8618d6c..0000000 --- a/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/LSL/YP2CSConverter.cs +++ /dev/null @@ -1,116 +0,0 @@ -/* -* Copyright (c) Contributors, http://opensimulator.org/ -* See CONTRIBUTORS.TXT for a full list of copyright holders. -* -* Redistribution and use in source and binary forms, with or without -* modification, are permitted provided that the following conditions are met: -* * Redistributions of source code must retain the above copyright -* notice, this list of conditions and the following disclaimer. -* * Redistributions in binary form must reproduce the above copyright -* notice, this list of conditions and the following disclaimer in the -* documentation and/or other materials provided with the distribution. -* * Neither the name of the OpenSim Project nor the -* names of its contributors may be used to endorse or promote products -* derived from this software without specific prior written permission. -* -* THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS AS IS AND ANY -* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -* DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY -* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -* -*/ - -using System; -using System.IO; -using System.Collections.Generic; -using System.Text; -using System.Text.RegularExpressions; -using OpenSim.Region.ScriptEngine.DotNetEngine.Compiler.YieldProlog; - -namespace OpenSim.Region.ScriptEngine.DotNetEngine.Compiler.LSL -{ - public class YP2CSConverter - { - public YP2CSConverter() - { - } - - public string Convert(string Script) - { - string CS_code = GenCode(Script); - return CS_code; - } - - static string GenCode(string myCode) - { - Variable TermList = new Variable(); - Variable FunctionCode = new Variable(); - - string CS_code = ""; - - int cs_pointer = myCode.IndexOf("\n//cs"); - if (cs_pointer > 0) - { - CS_code = myCode.Substring(cs_pointer); // CS code comes after - myCode = myCode.Substring(0, cs_pointer); - } - myCode.Replace("//yp", "%YPCode"); - - StringWriter myCS_SW = new StringWriter(); - StringReader myCode_SR = new StringReader(" yp_nop_header_nop. \n "+myCode + "\n"); - - YP.see(myCode_SR); - YP.tell(myCS_SW); - - //Console.WriteLine("Mycode\n ===================================\n" + myCode+"\n"); - // disable warning on l1, don't see how we can - // code this differently - #pragma warning disable 0168 - foreach (bool l1 in Parser.parseInput(TermList)) - { - foreach (bool l2 in YPCompiler.makeFunctionPseudoCode(TermList, FunctionCode)) - { - // ListPair VFC = new ListPair(FunctionCode, new Variable()); - //Console.WriteLine("-------------------------") - //Console.WriteLine(FunctionCode.ToString()) - //Console.WriteLine("-------------------------") - YPCompiler.convertFunctionCSharp(FunctionCode); - //YPCompiler.convertStringCodesCSharp(VFC); - } - } - #pragma warning restore 0168 - YP.seen(); - myCS_SW.Close(); - YP.told(); - StringBuilder bu = myCS_SW.GetStringBuilder(); - string finalcode = "//YPEncoded\n" + bu.ToString(); - // FIX script events (we're in the same script) - // 'YP.script_event(Atom.a(@"sayit"),' ==> 'sayit(' - finalcode = Regex.Replace(finalcode, - @"YP.script_event\(Atom.a\(\@\""(.*?)""\)\,", - @"this.$1(", - RegexOptions.Compiled | RegexOptions.Singleline); - finalcode = Regex.Replace(finalcode, - @"YP.script_event\(Atom.a\(\""(.*?)""\)\,", - @"this.$1(", - RegexOptions.Compiled | RegexOptions.Singleline); - finalcode = Regex.Replace(finalcode, - @" static ", - @" ", - RegexOptions.Compiled | RegexOptions.Singleline); - - finalcode = CS_code+"\n\r"+ finalcode; - finalcode = Regex.Replace(finalcode, - @"PrologCallback", - @"public IEnumerable ", - RegexOptions.Compiled | RegexOptions.Singleline); - return finalcode; - } - } -} diff --git a/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/LSL/lsl.lexer.cs b/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/LSL/lsl.lexer.cs deleted file mode 100644 index 6020dc3..0000000 --- a/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/LSL/lsl.lexer.cs +++ /dev/null @@ -1,18447 +0,0 @@ -/* - * Copyright (c) Contributors, http://opensimulator.org/ - * See CONTRIBUTORS.TXT for a full list of copyright holders. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * * Neither the name of the OpenSim Project nor the - * names of its contributors may be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY - * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -using System;using Tools; -namespace OpenSim.Region.ScriptEngine.DotNetEngine.Compiler.LSL { -//%+STRING_CONSTANT+3 -public class STRING_CONSTANT : TOKEN{ -public override string yyname { get { return "STRING_CONSTANT"; }} -public override int yynum { get { return 3; }} -public STRING_CONSTANT(Lexer yyl):base(yyl){}} -//%INCREMENT+4 -public class INCREMENT : TOKEN{ public override string yyname { get { return "INCREMENT";}} -public override int yynum { get { return 4; }} - public INCREMENT(Lexer yyl):base(yyl) {}} -//%DECREMENT+5 -public class DECREMENT : TOKEN{ public override string yyname { get { return "DECREMENT";}} -public override int yynum { get { return 5; }} - public DECREMENT(Lexer yyl):base(yyl) {}} -//%PLUS_EQUALS+6 -public class PLUS_EQUALS : TOKEN{ public override string yyname { get { return "PLUS_EQUALS";}} -public override int yynum { get { return 6; }} - public PLUS_EQUALS(Lexer yyl):base(yyl) {}} -//%MINUS_EQUALS+7 -public class MINUS_EQUALS : TOKEN{ public override string yyname { get { return "MINUS_EQUALS";}} -public override int yynum { get { return 7; }} - public MINUS_EQUALS(Lexer yyl):base(yyl) {}} -//%STAR_EQUALS+8 -public class STAR_EQUALS : TOKEN{ public override string yyname { get { return "STAR_EQUALS";}} -public override int yynum { get { return 8; }} - public STAR_EQUALS(Lexer yyl):base(yyl) {}} -//%SLASH_EQUALS+9 -public class SLASH_EQUALS : TOKEN{ public override string yyname { get { return "SLASH_EQUALS";}} -public override int yynum { get { return 9; }} - public SLASH_EQUALS(Lexer yyl):base(yyl) {}} -//%PERCENT_EQUALS+10 -public class PERCENT_EQUALS : TOKEN{ public override string yyname { get { return "PERCENT_EQUALS";}} -public override int yynum { get { return 10; }} - public PERCENT_EQUALS(Lexer yyl):base(yyl) {}} -//%SEMICOLON+11 -public class SEMICOLON : TOKEN{ public override string yyname { get { return "SEMICOLON";}} -public override int yynum { get { return 11; }} - public SEMICOLON(Lexer yyl):base(yyl) {}} -//%LEFT_BRACE+12 -public class LEFT_BRACE : TOKEN{ public override string yyname { get { return "LEFT_BRACE";}} -public override int yynum { get { return 12; }} - public LEFT_BRACE(Lexer yyl):base(yyl) {}} -//%RIGHT_BRACE+13 -public class RIGHT_BRACE : TOKEN{ public override string yyname { get { return "RIGHT_BRACE";}} -public override int yynum { get { return 13; }} - public RIGHT_BRACE(Lexer yyl):base(yyl) {}} -//%COMMA+14 -public class COMMA : TOKEN{ public override string yyname { get { return "COMMA";}} -public override int yynum { get { return 14; }} - public COMMA(Lexer yyl):base(yyl) {}} -//%EQUALS+15 -public class EQUALS : TOKEN{ public override string yyname { get { return "EQUALS";}} -public override int yynum { get { return 15; }} - public EQUALS(Lexer yyl):base(yyl) {}} -//%LEFT_PAREN+16 -public class LEFT_PAREN : TOKEN{ public override string yyname { get { return "LEFT_PAREN";}} -public override int yynum { get { return 16; }} - public LEFT_PAREN(Lexer yyl):base(yyl) {}} -//%RIGHT_PAREN+17 -public class RIGHT_PAREN : TOKEN{ public override string yyname { get { return "RIGHT_PAREN";}} -public override int yynum { get { return 17; }} - public RIGHT_PAREN(Lexer yyl):base(yyl) {}} -//%PLUS+18 -public class PLUS : TOKEN{ public override string yyname { get { return "PLUS";}} -public override int yynum { get { return 18; }} - public PLUS(Lexer yyl):base(yyl) {}} -//%MINUS+19 -public class MINUS : TOKEN{ public override string yyname { get { return "MINUS";}} -public override int yynum { get { return 19; }} - public MINUS(Lexer yyl):base(yyl) {}} -//%STAR+20 -public class STAR : TOKEN{ public override string yyname { get { return "STAR";}} -public override int yynum { get { return 20; }} - public STAR(Lexer yyl):base(yyl) {}} -//%SLASH+21 -public class SLASH : TOKEN{ public override string yyname { get { return "SLASH";}} -public override int yynum { get { return 21; }} - public SLASH(Lexer yyl):base(yyl) {}} -//%PERCENT+22 -public class PERCENT : TOKEN{ public override string yyname { get { return "PERCENT";}} -public override int yynum { get { return 22; }} - public PERCENT(Lexer yyl):base(yyl) {}} -//%AT+23 -public class AT : TOKEN{ public override string yyname { get { return "AT";}} -public override int yynum { get { return 23; }} - public AT(Lexer yyl):base(yyl) {}} -//%PERIOD+24 -public class PERIOD : TOKEN{ public override string yyname { get { return "PERIOD";}} -public override int yynum { get { return 24; }} - public PERIOD(Lexer yyl):base(yyl) {}} -//%LEFT_ANGLE+25 -public class LEFT_ANGLE : TOKEN{ public override string yyname { get { return "LEFT_ANGLE";}} -public override int yynum { get { return 25; }} - public LEFT_ANGLE(Lexer yyl):base(yyl) {}} -//%RIGHT_ANGLE+26 -public class RIGHT_ANGLE : TOKEN{ public override string yyname { get { return "RIGHT_ANGLE";}} -public override int yynum { get { return 26; }} - public RIGHT_ANGLE(Lexer yyl):base(yyl) {}} -//%LEFT_BRACKET+27 -public class LEFT_BRACKET : TOKEN{ public override string yyname { get { return "LEFT_BRACKET";}} -public override int yynum { get { return 27; }} - public LEFT_BRACKET(Lexer yyl):base(yyl) {}} -//%RIGHT_BRACKET+28 -public class RIGHT_BRACKET : TOKEN{ public override string yyname { get { return "RIGHT_BRACKET";}} -public override int yynum { get { return 28; }} - public RIGHT_BRACKET(Lexer yyl):base(yyl) {}} -//%EQUALS_EQUALS+29 -public class EQUALS_EQUALS : TOKEN{ public override string yyname { get { return "EQUALS_EQUALS";}} -public override int yynum { get { return 29; }} - public EQUALS_EQUALS(Lexer yyl):base(yyl) {}} -//%EXCLAMATION_EQUALS+30 -public class EXCLAMATION_EQUALS : TOKEN{ public override string yyname { get { return "EXCLAMATION_EQUALS";}} -public override int yynum { get { return 30; }} - public EXCLAMATION_EQUALS(Lexer yyl):base(yyl) {}} -//%LESS_EQUALS+31 -public class LESS_EQUALS : TOKEN{ public override string yyname { get { return "LESS_EQUALS";}} -public override int yynum { get { return 31; }} - public LESS_EQUALS(Lexer yyl):base(yyl) {}} -//%GREATER_EQUALS+32 -public class GREATER_EQUALS : TOKEN{ public override string yyname { get { return "GREATER_EQUALS";}} -public override int yynum { get { return 32; }} - public GREATER_EQUALS(Lexer yyl):base(yyl) {}} -//%AMP+33 -public class AMP : TOKEN{ public override string yyname { get { return "AMP";}} -public override int yynum { get { return 33; }} - public AMP(Lexer yyl):base(yyl) {}} -//%STROKE+34 -public class STROKE : TOKEN{ public override string yyname { get { return "STROKE";}} -public override int yynum { get { return 34; }} - public STROKE(Lexer yyl):base(yyl) {}} -//%CARET+35 -public class CARET : TOKEN{ public override string yyname { get { return "CARET";}} -public override int yynum { get { return 35; }} - public CARET(Lexer yyl):base(yyl) {}} -//%TILDE+36 -public class TILDE : TOKEN{ public override string yyname { get { return "TILDE";}} -public override int yynum { get { return 36; }} - public TILDE(Lexer yyl):base(yyl) {}} -//%EXCLAMATION+37 -public class EXCLAMATION : TOKEN{ public override string yyname { get { return "EXCLAMATION";}} -public override int yynum { get { return 37; }} - public EXCLAMATION(Lexer yyl):base(yyl) {}} -//%AMP_AMP+38 -public class AMP_AMP : TOKEN{ public override string yyname { get { return "AMP_AMP";}} -public override int yynum { get { return 38; }} - public AMP_AMP(Lexer yyl):base(yyl) {}} -//%STROKE_STROKE+39 -public class STROKE_STROKE : TOKEN{ public override string yyname { get { return "STROKE_STROKE";}} -public override int yynum { get { return 39; }} - public STROKE_STROKE(Lexer yyl):base(yyl) {}} -//%LEFT_SHIFT+40 -public class LEFT_SHIFT : TOKEN{ public override string yyname { get { return "LEFT_SHIFT";}} -public override int yynum { get { return 40; }} - public LEFT_SHIFT(Lexer yyl):base(yyl) {}} -//%RIGHT_SHIFT+41 -public class RIGHT_SHIFT : TOKEN{ public override string yyname { get { return "RIGHT_SHIFT";}} -public override int yynum { get { return 41; }} - public RIGHT_SHIFT(Lexer yyl):base(yyl) {}} -//%IF+42 -public class IF : TOKEN{ public override string yyname { get { return "IF";}} -public override int yynum { get { return 42; }} - public IF(Lexer yyl):base(yyl) {}} -//%ELSE+43 -public class ELSE : TOKEN{ public override string yyname { get { return "ELSE";}} -public override int yynum { get { return 43; }} - public ELSE(Lexer yyl):base(yyl) {}} -//%DO+44 -public class DO : TOKEN{ public override string yyname { get { return "DO";}} -public override int yynum { get { return 44; }} - public DO(Lexer yyl):base(yyl) {}} -//%WHILE+45 -public class WHILE : TOKEN{ public override string yyname { get { return "WHILE";}} -public override int yynum { get { return 45; }} - public WHILE(Lexer yyl):base(yyl) {}} -//%FOR+46 -public class FOR : TOKEN{ public override string yyname { get { return "FOR";}} -public override int yynum { get { return 46; }} - public FOR(Lexer yyl):base(yyl) {}} -//%DEFAULT_STATE+47 -public class DEFAULT_STATE : TOKEN{ public override string yyname { get { return "DEFAULT_STATE";}} -public override int yynum { get { return 47; }} - public DEFAULT_STATE(Lexer yyl):base(yyl) {}} -//%STATE+48 -public class STATE : TOKEN{ public override string yyname { get { return "STATE";}} -public override int yynum { get { return 48; }} - public STATE(Lexer yyl):base(yyl) {}} -//%JUMP+49 -public class JUMP : TOKEN{ public override string yyname { get { return "JUMP";}} -public override int yynum { get { return 49; }} - public JUMP(Lexer yyl):base(yyl) {}} -//%RETURN+50 -public class RETURN : TOKEN{ public override string yyname { get { return "RETURN";}} -public override int yynum { get { return 50; }} - public RETURN(Lexer yyl):base(yyl) {}} -//%INTEGER_TYPE+51 -public class INTEGER_TYPE : TOKEN{ public override string yyname { get { return "INTEGER_TYPE";}} -public override int yynum { get { return 51; }} - public INTEGER_TYPE(Lexer yyl):base(yyl) {}} -//%FLOAT_TYPE+52 -public class FLOAT_TYPE : TOKEN{ public override string yyname { get { return "FLOAT_TYPE";}} -public override int yynum { get { return 52; }} - public FLOAT_TYPE(Lexer yyl):base(yyl) {}} -//%STRING_TYPE+53 -public class STRING_TYPE : TOKEN{ public override string yyname { get { return "STRING_TYPE";}} -public override int yynum { get { return 53; }} - public STRING_TYPE(Lexer yyl):base(yyl) {}} -//%KEY_TYPE+54 -public class KEY_TYPE : TOKEN{ public override string yyname { get { return "KEY_TYPE";}} -public override int yynum { get { return 54; }} - public KEY_TYPE(Lexer yyl):base(yyl) {}} -//%VECTOR_TYPE+55 -public class VECTOR_TYPE : TOKEN{ public override string yyname { get { return "VECTOR_TYPE";}} -public override int yynum { get { return 55; }} - public VECTOR_TYPE(Lexer yyl):base(yyl) {}} -//%ROTATION_TYPE+56 -public class ROTATION_TYPE : TOKEN{ public override string yyname { get { return "ROTATION_TYPE";}} -public override int yynum { get { return 56; }} - public ROTATION_TYPE(Lexer yyl):base(yyl) {}} -//%LIST_TYPE+57 -public class LIST_TYPE : TOKEN{ public override string yyname { get { return "LIST_TYPE";}} -public override int yynum { get { return 57; }} - public LIST_TYPE(Lexer yyl):base(yyl) {}} -//%AT_ROT_TARGET_EVENT+58 -public class AT_ROT_TARGET_EVENT : TOKEN{ public override string yyname { get { return "AT_ROT_TARGET_EVENT";}} -public override int yynum { get { return 58; }} - public AT_ROT_TARGET_EVENT(Lexer yyl):base(yyl) {}} -//%AT_TARGET_EVENT+59 -public class AT_TARGET_EVENT : TOKEN{ public override string yyname { get { return "AT_TARGET_EVENT";}} -public override int yynum { get { return 59; }} - public AT_TARGET_EVENT(Lexer yyl):base(yyl) {}} -//%ATTACH_EVENT+60 -public class ATTACH_EVENT : TOKEN{ public override string yyname { get { return "ATTACH_EVENT";}} -public override int yynum { get { return 60; }} - public ATTACH_EVENT(Lexer yyl):base(yyl) {}} -//%CHANGED_EVENT+61 -public class CHANGED_EVENT : TOKEN{ public override string yyname { get { return "CHANGED_EVENT";}} -public override int yynum { get { return 61; }} - public CHANGED_EVENT(Lexer yyl):base(yyl) {}} -//%COLLISION_EVENT+62 -public class COLLISION_EVENT : TOKEN{ public override string yyname { get { return "COLLISION_EVENT";}} -public override int yynum { get { return 62; }} - public COLLISION_EVENT(Lexer yyl):base(yyl) {}} -//%COLLISION_END_EVENT+63 -public class COLLISION_END_EVENT : TOKEN{ public override string yyname { get { return "COLLISION_END_EVENT";}} -public override int yynum { get { return 63; }} - public COLLISION_END_EVENT(Lexer yyl):base(yyl) {}} -//%COLLISION_START_EVENT+64 -public class COLLISION_START_EVENT : TOKEN{ public override string yyname { get { return "COLLISION_START_EVENT";}} -public override int yynum { get { return 64; }} - public COLLISION_START_EVENT(Lexer yyl):base(yyl) {}} -//%CONTROL_EVENT+65 -public class CONTROL_EVENT : TOKEN{ public override string yyname { get { return "CONTROL_EVENT";}} -public override int yynum { get { return 65; }} - public CONTROL_EVENT(Lexer yyl):base(yyl) {}} -//%DATASERVER_EVENT+66 -public class DATASERVER_EVENT : TOKEN{ public override string yyname { get { return "DATASERVER_EVENT";}} -public override int yynum { get { return 66; }} - public DATASERVER_EVENT(Lexer yyl):base(yyl) {}} -//%EMAIL_EVENT+67 -public class EMAIL_EVENT : TOKEN{ public override string yyname { get { return "EMAIL_EVENT";}} -public override int yynum { get { return 67; }} - public EMAIL_EVENT(Lexer yyl):base(yyl) {}} -//%HTTP_RESPONSE_EVENT+68 -public class HTTP_RESPONSE_EVENT : TOKEN{ public override string yyname { get { return "HTTP_RESPONSE_EVENT";}} -public override int yynum { get { return 68; }} - public HTTP_RESPONSE_EVENT(Lexer yyl):base(yyl) {}} -//%LAND_COLLISION_EVENT+69 -public class LAND_COLLISION_EVENT : TOKEN{ public override string yyname { get { return "LAND_COLLISION_EVENT";}} -public override int yynum { get { return 69; }} - public LAND_COLLISION_EVENT(Lexer yyl):base(yyl) {}} -//%LAND_COLLISION_END_EVENT+70 -public class LAND_COLLISION_END_EVENT : TOKEN{ public override string yyname { get { return "LAND_COLLISION_END_EVENT";}} -public override int yynum { get { return 70; }} - public LAND_COLLISION_END_EVENT(Lexer yyl):base(yyl) {}} -//%LAND_COLLISION_START_EVENT+71 -public class LAND_COLLISION_START_EVENT : TOKEN{ public override string yyname { get { return "LAND_COLLISION_START_EVENT";}} -public override int yynum { get { return 71; }} - public LAND_COLLISION_START_EVENT(Lexer yyl):base(yyl) {}} -//%LINK_MESSAGE_EVENT+72 -public class LINK_MESSAGE_EVENT : TOKEN{ public override string yyname { get { return "LINK_MESSAGE_EVENT";}} -public override int yynum { get { return 72; }} - public LINK_MESSAGE_EVENT(Lexer yyl):base(yyl) {}} -//%LISTEN_EVENT+73 -public class LISTEN_EVENT : TOKEN{ public override string yyname { get { return "LISTEN_EVENT";}} -public override int yynum { get { return 73; }} - public LISTEN_EVENT(Lexer yyl):base(yyl) {}} -//%MONEY_EVENT+74 -public class MONEY_EVENT : TOKEN{ public override string yyname { get { return "MONEY_EVENT";}} -public override int yynum { get { return 74; }} - public MONEY_EVENT(Lexer yyl):base(yyl) {}} -//%MOVING_END_EVENT+75 -public class MOVING_END_EVENT : TOKEN{ public override string yyname { get { return "MOVING_END_EVENT";}} -public override int yynum { get { return 75; }} - public MOVING_END_EVENT(Lexer yyl):base(yyl) {}} -//%MOVING_START_EVENT+76 -public class MOVING_START_EVENT : TOKEN{ public override string yyname { get { return "MOVING_START_EVENT";}} -public override int yynum { get { return 76; }} - public MOVING_START_EVENT(Lexer yyl):base(yyl) {}} -//%NO_SENSOR_EVENT+77 -public class NO_SENSOR_EVENT : TOKEN{ public override string yyname { get { return "NO_SENSOR_EVENT";}} -public override int yynum { get { return 77; }} - public NO_SENSOR_EVENT(Lexer yyl):base(yyl) {}} -//%NOT_AT_ROT_TARGET_EVENT+78 -public class NOT_AT_ROT_TARGET_EVENT : TOKEN{ public override string yyname { get { return "NOT_AT_ROT_TARGET_EVENT";}} -public override int yynum { get { return 78; }} - public NOT_AT_ROT_TARGET_EVENT(Lexer yyl):base(yyl) {}} -//%NOT_AT_TARGET_EVENT+79 -public class NOT_AT_TARGET_EVENT : TOKEN{ public override string yyname { get { return "NOT_AT_TARGET_EVENT";}} -public override int yynum { get { return 79; }} - public NOT_AT_TARGET_EVENT(Lexer yyl):base(yyl) {}} -//%OBJECT_REZ_EVENT+80 -public class OBJECT_REZ_EVENT : TOKEN{ public override string yyname { get { return "OBJECT_REZ_EVENT";}} -public override int yynum { get { return 80; }} - public OBJECT_REZ_EVENT(Lexer yyl):base(yyl) {}} -//%ON_REZ_EVENT+81 -public class ON_REZ_EVENT : TOKEN{ public override string yyname { get { return "ON_REZ_EVENT";}} -public override int yynum { get { return 81; }} - public ON_REZ_EVENT(Lexer yyl):base(yyl) {}} -//%REMOTE_DATA_EVENT+82 -public class REMOTE_DATA_EVENT : TOKEN{ public override string yyname { get { return "REMOTE_DATA_EVENT";}} -public override int yynum { get { return 82; }} - public REMOTE_DATA_EVENT(Lexer yyl):base(yyl) {}} -//%RUN_TIME_PERMISSIONS_EVENT+83 -public class RUN_TIME_PERMISSIONS_EVENT : TOKEN{ public override string yyname { get { return "RUN_TIME_PERMISSIONS_EVENT";}} -public override int yynum { get { return 83; }} - public RUN_TIME_PERMISSIONS_EVENT(Lexer yyl):base(yyl) {}} -//%SENSOR_EVENT+84 -public class SENSOR_EVENT : TOKEN{ public override string yyname { get { return "SENSOR_EVENT";}} -public override int yynum { get { return 84; }} - public SENSOR_EVENT(Lexer yyl):base(yyl) {}} -//%STATE_ENTRY_EVENT+85 -public class STATE_ENTRY_EVENT : TOKEN{ public override string yyname { get { return "STATE_ENTRY_EVENT";}} -public override int yynum { get { return 85; }} - public STATE_ENTRY_EVENT(Lexer yyl):base(yyl) {}} -//%STATE_EXIT_EVENT+86 -public class STATE_EXIT_EVENT : TOKEN{ public override string yyname { get { return "STATE_EXIT_EVENT";}} -public override int yynum { get { return 86; }} - public STATE_EXIT_EVENT(Lexer yyl):base(yyl) {}} -//%TIMER_EVENT+87 -public class TIMER_EVENT : TOKEN{ public override string yyname { get { return "TIMER_EVENT";}} -public override int yynum { get { return 87; }} - public TIMER_EVENT(Lexer yyl):base(yyl) {}} -//%TOUCH_EVENT+88 -public class TOUCH_EVENT : TOKEN{ public override string yyname { get { return "TOUCH_EVENT";}} -public override int yynum { get { return 88; }} - public TOUCH_EVENT(Lexer yyl):base(yyl) {}} -//%TOUCH_START_EVENT+89 -public class TOUCH_START_EVENT : TOKEN{ public override string yyname { get { return "TOUCH_START_EVENT";}} -public override int yynum { get { return 89; }} - public TOUCH_START_EVENT(Lexer yyl):base(yyl) {}} -//%TOUCH_END_EVENT+90 -public class TOUCH_END_EVENT : TOKEN{ public override string yyname { get { return "TOUCH_END_EVENT";}} -public override int yynum { get { return 90; }} - public TOUCH_END_EVENT(Lexer yyl):base(yyl) {}} -//%IDENT+91 -public class IDENT : TOKEN{ public override string yyname { get { return "IDENT";}} -public override int yynum { get { return 91; }} - public IDENT(Lexer yyl):base(yyl) {}} -//%INTEGER_CONSTANT+92 -public class INTEGER_CONSTANT : TOKEN{ public override string yyname { get { return "INTEGER_CONSTANT";}} -public override int yynum { get { return 92; }} - public INTEGER_CONSTANT(Lexer yyl):base(yyl) {}} -//%HEX_INTEGER_CONSTANT+93 -public class HEX_INTEGER_CONSTANT : TOKEN{ public override string yyname { get { return "HEX_INTEGER_CONSTANT";}} -public override int yynum { get { return 93; }} - public HEX_INTEGER_CONSTANT(Lexer yyl):base(yyl) {}} -//%FLOAT_CONSTANT+94 -public class FLOAT_CONSTANT : TOKEN{ public override string yyname { get { return "FLOAT_CONSTANT";}} -public override int yynum { get { return 94; }} - public FLOAT_CONSTANT(Lexer yyl):base(yyl) {}} -//%|LSLTokens -public class yyLSLTokens : YyLexer { - public yyLSLTokens(ErrorHandler eh):base(eh) { arr = new int[] { -101,4,6,52,0, -46,0,53,0,6, -102,4,16,117,0, -115,0,45,0,97, -0,115,0,99,0, -105,0,105,0,2, -0,103,5,27,7, -0,104,9,1,0, -3,192,0,105,5, -27,3,65,0,2, -1,3,66,0,2, -1,3,67,0,2, -1,3,68,0,2, -1,3,69,0,2, -1,3,70,0,2, -1,3,71,0,2, -1,3,72,0,2, -1,3,73,0,2, -1,3,74,0,2, -1,3,75,0,2, -1,3,76,0,2, -1,3,77,0,2, -1,3,78,0,2, -1,3,79,0,2, -1,3,80,0,2, -1,3,81,0,2, -1,3,82,0,2, -1,3,83,0,2, -1,3,84,0,2, -1,3,85,0,2, -1,3,86,0,2, -1,3,87,0,2, -1,3,88,0,2, -1,3,89,0,2, -1,3,90,0,2, -1,3,192,0,2, -1,7,1,106,9, -1,1,3,170,0, -107,5,27,3,109, -0,2,1,3,110, -0,2,1,3,111, -0,2,1,3,112, -0,2,1,3,113, -0,2,1,3,114, -0,2,1,3,115, -0,2,1,3,116, -0,2,1,3,117, -0,2,1,3,118, -0,2,1,3,119, -0,2,1,3,120, -0,2,1,3,121, -0,2,1,3,122, -0,2,1,3,170, -0,2,1,3,97, -0,2,1,3,98, -0,2,1,3,99, -0,2,1,3,100, -0,2,1,3,101, -0,2,1,3,102, -0,2,1,3,103, -0,2,1,3,104, -0,2,1,3,105, -0,2,1,3,106, -0,2,1,3,107, -0,2,1,3,108, -0,2,1,7,2, -108,9,1,2,3, -197,1,109,5,1, -3,197,1,2,1, -7,3,110,9,1, -3,3,176,2,111, -5,1,3,176,2, -2,1,7,4,112, -9,1,4,3,187, -1,113,5,1,3, -187,1,2,1,7, -5,114,9,1,5, -3,0,3,115,5, -1,3,0,3,2, -1,7,6,116,9, -1,6,3,3,9, -117,5,1,3,3, -9,2,1,7,7, -118,9,1,7,3, -136,4,119,5,1, -3,136,4,2,1, -7,8,120,9,1, -8,3,96,6,121, -5,11,3,96,6, -2,1,3,48,0, -2,1,3,49,0, -2,1,3,50,0, -2,1,3,51,0, -2,1,3,52,0, -2,1,3,53,0, -2,1,3,54,0, -2,1,3,55,0, -2,1,3,56,0, -2,1,3,57,0, -2,1,7,9,122, -9,1,9,3,96, -33,123,5,1,3, -96,33,2,1,7, -10,124,9,1,10, -3,178,0,125,5, -1,3,178,0,2, -1,7,11,126,9, -1,11,3,160,0, -127,5,2,3,160, -0,2,1,3,32, -0,2,1,7,12, -128,9,1,12,3, -40,32,129,5,1, -3,40,32,2,1, -7,13,130,9,1, -13,3,41,32,131, -5,1,3,41,32, -2,1,7,14,132, -9,1,14,3,1, -0,133,5,5,3, -0,0,2,1,3, -1,0,2,1,3, -13,0,2,1,3, -9,0,2,1,3, -10,0,2,1,7, -15,134,9,1,15, -3,15,7,135,5, -1,3,15,7,2, -1,7,17,136,9, -1,17,3,0,224, -137,5,1,3,0, -224,2,1,7,18, -138,9,1,18,3, -63,32,139,5,2, -3,63,32,2,1, -3,95,0,2,1, -7,19,140,9,1, -19,3,173,0,141, -5,2,3,45,0, -2,1,3,173,0, -2,1,7,20,142, -9,1,20,3,58, -15,143,5,4,3, -123,0,2,1,3, -91,0,2,1,3, -58,15,2,1,3, -40,0,2,1,7, -21,144,9,1,21, -3,59,15,145,5, -4,3,59,15,2, -1,3,125,0,2, -1,3,93,0,2, -1,3,41,0,2, -1,7,22,146,9, -1,22,3,171,0, -147,5,1,3,171, -0,2,1,7,23, -148,9,1,23,3, -187,0,149,5,1, -3,187,0,2,1, -7,24,150,9,1, -24,3,35,0,151, -5,12,3,37,0, -2,1,3,38,0, -2,1,3,42,0, -2,1,3,44,0, -2,1,3,46,0, -2,1,3,47,0, -2,1,3,92,0, -2,1,3,59,0, -2,1,3,64,0, -2,1,3,33,0, -2,1,3,34,0, -2,1,3,35,0, -2,1,7,25,152, -9,1,25,3,172, -0,153,5,7,3, -172,0,2,1,3, -124,0,2,1,3, -126,0,2,1,3, -60,0,2,1,3, -61,0,2,1,3, -62,0,2,1,3, -43,0,2,1,7, -26,154,9,1,26, -3,36,0,155,5, -1,3,36,0,2, -1,7,27,156,9, -1,27,3,96,0, -157,5,2,3,94, -0,2,1,3,96, -0,2,1,7,27, -2,0,158,5,2, -159,4,18,89,0, -89,0,73,0,78, -0,73,0,84,0, -73,0,65,0,76, -0,160,12,1,1022, -161,5,91,3,9, -0,162,12,1,39257, -163,5,0,164,11, -1,999,0,165,4, -0,1,-1,3,10, -0,162,3,13,0, -162,3,32,0,162, -3,33,0,166,12, -1,42170,167,5,1, -3,61,0,168,12, -1,42285,169,5,0, -170,11,1,142,0, -171,4,36,69,0, -88,0,67,0,76, -0,65,0,77,0, -65,0,84,0,73, -0,79,0,78,0, -95,0,69,0,81, -0,85,0,65,0, -76,0,83,0,1, --1,172,11,1,180, -0,173,4,22,69, -0,88,0,67,0, -76,0,65,0,77, -0,65,0,84,0, -73,0,79,0,78, -0,1,-1,3,34, -0,174,12,1,42411, -175,5,0,176,11, -1,925,0,165,1, --1,3,37,0,177, -12,1,40481,178,5, -1,3,61,0,179, -12,1,40596,180,5, -0,181,11,1,40, -0,182,4,28,80, -0,69,0,82,0, -67,0,69,0,78, -0,84,0,95,0, -69,0,81,0,85, -0,65,0,76,0, -83,0,1,-1,183, -11,1,101,0,184, -4,14,80,0,69, -0,82,0,67,0, -69,0,78,0,84, -0,1,-1,3,38, -0,185,12,1,40722, -186,5,1,3,38, -0,187,12,1,40822, -188,5,0,189,11, -1,185,0,190,4, -14,65,0,77,0, -80,0,95,0,65, -0,77,0,80,0, -1,-1,191,11,1, -160,0,192,4,6, -65,0,77,0,80, -0,1,-1,3,40, -0,193,12,1,39994, -194,5,0,195,11, -1,71,0,196,4, -20,76,0,69,0, -70,0,84,0,95, -0,80,0,65,0, -82,0,69,0,78, -0,1,-1,3,41, -0,197,12,1,40358, -198,5,0,199,11, -1,76,0,200,4, -22,82,0,73,0, -71,0,72,0,84, -0,95,0,80,0, -65,0,82,0,69, -0,78,0,1,-1, -3,42,0,201,12, -1,40963,202,5,1, -3,61,0,203,12, -1,41078,204,5,0, -205,11,1,28,0, -206,4,22,83,0, -84,0,65,0,82, -0,95,0,69,0, -81,0,85,0,65, -0,76,0,83,0, -1,-1,207,11,1, -91,0,208,4,8, -83,0,84,0,65, -0,82,0,1,-1, -3,43,0,209,12, -1,43859,210,5,2, -3,61,0,211,12, -1,43974,212,5,0, -213,11,1,16,0, -214,4,22,80,0, -76,0,85,0,83, -0,95,0,69,0, -81,0,85,0,65, -0,76,0,83,0, -1,-1,3,43,0, -215,12,1,44096,216, -5,0,217,11,1, -2,0,218,4,18, -73,0,78,0,67, -0,82,0,69,0, -77,0,69,0,78, -0,84,0,1,-1, -219,11,1,81,0, -220,4,8,80,0, -76,0,85,0,83, -0,1,-1,3,44, -0,221,12,1,41204, -222,5,0,223,11, -1,61,0,224,4, -10,67,0,79,0, -77,0,77,0,65, -0,1,-1,3,45, -0,225,12,1,39389, -226,5,2,3,45, -0,227,12,1,39476, -228,5,0,229,11, -1,10,0,230,4, -18,68,0,69,0, -67,0,82,0,69, -0,77,0,69,0, -78,0,84,0,1, --1,3,61,0,231, -12,1,39624,232,5, -0,233,11,1,22, -0,234,4,24,77, -0,73,0,78,0, -85,0,83,0,95, -0,69,0,81,0, -85,0,65,0,76, -0,83,0,1,-1, -235,11,1,86,0, -236,4,10,77,0, -73,0,78,0,85, -0,83,0,1,-1, -3,46,0,237,12, -1,41325,238,5,14, -3,48,0,239,12, -1,38991,240,5,14, -3,48,0,239,3, -49,0,239,3,50, -0,239,3,51,0, -239,3,52,0,239, -3,53,0,239,3, -54,0,239,3,55, -0,239,3,56,0, -239,3,57,0,239, -3,101,0,241,12, -1,38454,242,5,12, -3,43,0,243,12, -1,38781,244,5,10, -3,48,0,245,12, -1,38516,246,5,12, -3,48,0,245,3, -49,0,245,3,50, -0,245,3,51,0, -245,3,52,0,245, -3,53,0,245,3, -54,0,245,3,55, -0,245,3,56,0, -245,3,57,0,245, -3,102,0,247,12, -1,38522,248,5,0, -249,11,1,866,0, -250,4,28,70,0, -76,0,79,0,65, -0,84,0,95,0, -67,0,79,0,78, -0,83,0,84,0, -65,0,78,0,84, -0,1,-1,3,70, -0,247,251,11,1, -866,0,250,1,-1, -3,49,0,245,3, -50,0,245,3,51, -0,245,3,52,0, -245,3,53,0,245, -3,54,0,245,3, -55,0,245,3,56, -0,245,3,57,0, -245,0,165,1,-1, -3,45,0,243,3, -48,0,245,3,49, -0,245,3,50,0, -245,3,51,0,245, -3,52,0,245,3, -53,0,245,3,54, -0,245,3,55,0, -245,3,56,0,245, -3,57,0,245,0, -165,1,-1,3,102, -0,247,3,69,0, -241,3,70,0,247, -252,11,1,866,0, -250,1,-1,3,49, -0,239,3,50,0, -239,3,51,0,239, -3,52,0,239,3, -53,0,239,3,54, -0,239,3,55,0, -239,3,56,0,239, -3,57,0,239,3, -101,0,241,3,102, -0,247,3,69,0, -241,3,70,0,247, -253,11,1,111,0, -254,4,12,80,0, -69,0,82,0,73, -0,79,0,68,0, -1,-1,3,47,0, -255,12,1,41446,256, -5,2,3,47,0, -257,12,1,41550,258, -5,118,3,1,0, -259,12,1,41551,260, -5,118,3,1,0, -259,3,9,0,259, -3,96,33,259,3, -13,0,259,3,0, -3,259,3,32,0, -259,3,33,0,259, -3,34,0,259,3, -35,0,259,3,36, -0,259,3,37,0, -259,3,38,0,259, -3,40,0,259,3, -41,0,259,3,42, -0,259,3,43,0, -259,3,44,0,259, -3,45,0,259,3, -46,0,259,3,47, -0,259,3,3,9, -259,3,49,0,259, -3,50,0,259,3, -48,0,259,3,52, -0,259,3,53,0, -259,3,51,0,259, -3,55,0,259,3, -56,0,259,3,54, -0,259,3,59,0, -259,3,57,0,259, -3,61,0,259,3, -62,0,259,3,60, -0,259,3,64,0, -259,3,65,0,259, -3,66,0,259,3, -67,0,259,3,68, -0,259,3,69,0, -259,3,70,0,259, -3,71,0,259,3, -72,0,259,3,73, -0,259,3,74,0, -259,3,75,0,259, -3,76,0,259,3, -77,0,259,3,78, -0,259,3,79,0, -259,3,80,0,259, -3,81,0,259,3, -82,0,259,3,83, -0,259,3,84,0, -259,3,85,0,259, -3,86,0,259,3, -87,0,259,3,88, -0,259,3,89,0, -259,3,90,0,259, -3,91,0,259,3, -92,0,259,3,93, -0,259,3,94,0, -259,3,95,0,259, -3,96,0,259,3, -97,0,259,3,98, -0,259,3,99,0, -259,3,100,0,259, -3,101,0,259,3, -102,0,259,3,103, -0,259,3,104,0, -259,3,105,0,259, -3,106,0,259,3, -107,0,259,3,15, -7,259,3,109,0, -259,3,110,0,259, -3,111,0,259,3, -112,0,259,3,113, -0,259,3,114,0, -259,3,115,0,259, -3,116,0,259,3, -117,0,259,3,118, -0,259,3,119,0, -259,3,120,0,259, -3,121,0,259,3, -122,0,259,3,108, -0,259,3,124,0, -259,3,125,0,259, -3,96,6,259,3, -123,0,259,3,126, -0,259,3,58,15, -259,3,59,15,259, -3,136,4,259,3, -160,0,259,3,170, -0,259,3,171,0, -259,3,172,0,259, -3,173,0,259,3, -178,0,259,3,176, -2,259,3,187,0, -259,3,187,1,259, -3,192,0,259,3, -41,32,259,3,197, -1,259,3,0,224, -259,3,40,32,259, -3,63,32,259,261, -11,1,1003,0,165, -1,-1,3,9,0, -259,3,96,33,259, -3,13,0,259,3, -0,3,259,3,32, -0,259,3,33,0, -259,3,34,0,259, -3,35,0,259,3, -36,0,259,3,37, -0,259,3,38,0, -259,3,40,0,259, -3,41,0,259,3, -42,0,259,3,43, -0,259,3,44,0, -259,3,45,0,259, -3,46,0,259,3, -47,0,259,3,3, -9,259,3,49,0, -259,3,50,0,259, -3,48,0,259,3, -52,0,259,3,53, -0,259,3,51,0, -259,3,55,0,259, -3,56,0,259,3, -54,0,259,3,59, -0,259,3,57,0, -259,3,61,0,259, -3,62,0,259,3, -60,0,259,3,64, -0,259,3,65,0, -259,3,66,0,259, -3,67,0,259,3, -68,0,259,3,69, -0,259,3,70,0, -259,3,71,0,259, -3,72,0,259,3, -73,0,259,3,74, -0,259,3,75,0, -259,3,76,0,259, -3,77,0,259,3, -78,0,259,3,79, -0,259,3,80,0, -259,3,81,0,259, -3,82,0,259,3, -83,0,259,3,84, -0,259,3,85,0, -259,3,86,0,259, -3,87,0,259,3, -88,0,259,3,89, -0,259,3,90,0, -259,3,91,0,259, -3,92,0,259,3, -93,0,259,3,94, -0,259,3,95,0, -259,3,96,0,259, -3,97,0,259,3, -98,0,259,3,99, -0,259,3,100,0, -259,3,101,0,259, -3,102,0,259,3, -103,0,259,3,104, -0,259,3,105,0, -259,3,106,0,259, -3,107,0,259,3, -15,7,259,3,109, -0,259,3,110,0, -259,3,111,0,259, -3,112,0,259,3, -113,0,259,3,114, -0,259,3,115,0, -259,3,116,0,259, -3,117,0,259,3, -118,0,259,3,119, -0,259,3,120,0, -259,3,121,0,259, -3,122,0,259,3, -108,0,259,3,124, -0,259,3,125,0, -259,3,96,6,259, -3,123,0,259,3, -126,0,259,3,58, -15,259,3,59,15, -259,3,136,4,259, -3,160,0,259,3, -170,0,259,3,171, -0,259,3,172,0, -259,3,173,0,259, -3,178,0,259,3, -176,2,259,3,187, -0,259,3,187,1, -259,3,192,0,259, -3,41,32,259,3, -197,1,259,3,0, -224,259,3,40,32, -259,3,63,32,259, -262,11,1,1003,0, -165,1,-1,3,61, -0,263,12,1,41801, -264,5,0,265,11, -1,34,0,266,4, -24,83,0,76,0, -65,0,83,0,72, -0,95,0,69,0, -81,0,85,0,65, -0,76,0,83,0, -1,-1,267,11,1, -96,0,268,4,10, -83,0,76,0,65, -0,83,0,72,0, -1,-1,3,48,0, -269,12,1,38044,270, -5,13,3,120,0, -271,12,1,38068,272, -5,22,3,102,0, -273,12,1,38069,274, -5,22,3,102,0, -273,3,48,0,273, -3,49,0,273,3, -50,0,273,3,51, -0,273,3,52,0, -273,3,53,0,273, -3,54,0,273,3, -55,0,273,3,56, -0,273,3,57,0, -273,3,97,0,273, -3,98,0,273,3, -99,0,273,3,100, -0,273,3,101,0, -273,3,65,0,273, -3,66,0,273,3, -67,0,273,3,68, -0,273,3,69,0, -273,3,70,0,273, -275,11,1,847,0, -276,4,40,72,0, -69,0,88,0,95, -0,73,0,78,0, -84,0,69,0,71, -0,69,0,82,0, -95,0,67,0,79, -0,78,0,83,0, -84,0,65,0,78, -0,84,0,1,-1, -3,48,0,273,3, -49,0,273,3,50, -0,273,3,51,0, -273,3,52,0,273, -3,53,0,273,3, -54,0,273,3,55, -0,273,3,56,0, -273,3,57,0,273, -3,97,0,273,3, -98,0,273,3,99, -0,273,3,100,0, -273,3,101,0,273, -3,65,0,273,3, -66,0,273,3,67, -0,273,3,68,0, -273,3,69,0,273, -3,70,0,273,0, -165,1,-1,3,48, -0,277,12,1,38346, -278,5,11,3,46, -0,279,12,1,38449, -280,5,14,3,48, -0,239,3,49,0, -239,3,50,0,239, -3,51,0,239,3, -52,0,239,3,53, -0,239,3,54,0, -239,3,55,0,239, -3,56,0,239,3, -57,0,239,3,101, -0,241,3,102,0, -247,3,69,0,241, -3,70,0,247,281, -11,1,866,0,250, -1,-1,3,48,0, -277,3,49,0,277, -3,50,0,277,3, -51,0,277,3,52, -0,277,3,53,0, -277,3,54,0,277, -3,55,0,277,3, -56,0,277,3,57, -0,277,282,11,1, -841,0,283,4,32, -73,0,78,0,84, -0,69,0,71,0, -69,0,82,0,95, -0,67,0,79,0, -78,0,83,0,84, -0,65,0,78,0, -84,0,1,-1,3, -49,0,277,3,50, -0,277,3,88,0, -271,3,52,0,277, -3,53,0,277,3, -51,0,277,3,55, -0,277,3,56,0, -277,3,54,0,277, -3,46,0,279,3, -57,0,277,284,11, -1,841,0,283,1, --1,3,49,0,277, -3,50,0,277,3, -51,0,277,3,52, -0,277,3,53,0, -277,3,54,0,277, -3,55,0,277,3, -56,0,277,3,57, -0,277,3,59,0, -285,12,1,41928,286, -5,0,287,11,1, -46,0,288,4,18, -83,0,69,0,77, -0,73,0,67,0, -79,0,76,0,79, -0,78,0,1,-1, -3,60,0,289,12, -1,42896,290,5,2, -3,60,0,291,12, -1,43010,292,5,0, -293,11,1,197,0, -294,4,20,76,0, -69,0,70,0,84, -0,95,0,83,0, -72,0,73,0,70, -0,84,0,1,-1, -3,61,0,295,12, -1,43131,296,5,0, -297,11,1,148,0, -298,4,22,76,0, -69,0,83,0,83, -0,95,0,69,0, -81,0,85,0,65, -0,76,0,83,0, -1,-1,299,11,1, -116,0,300,4,20, -76,0,69,0,70, -0,84,0,95,0, -65,0,78,0,71, -0,76,0,69,0, -1,-1,3,61,0, -301,12,1,43257,302, -5,1,3,61,0, -303,12,1,43372,304, -5,0,305,11,1, -136,0,306,4,26, -69,0,81,0,85, -0,65,0,76,0, -83,0,95,0,69, -0,81,0,85,0, -65,0,76,0,83, -0,1,-1,307,11, -1,66,0,308,4, -12,69,0,81,0, -85,0,65,0,76, -0,83,0,1,-1, -3,62,0,309,12, -1,43498,310,5,2, -3,61,0,311,12, -1,43613,312,5,0, -313,11,1,154,0, -314,4,28,71,0, -82,0,69,0,65, -0,84,0,69,0, -82,0,95,0,69, -0,81,0,85,0, -65,0,76,0,83, -0,1,-1,3,62, -0,315,12,1,43734, -316,5,0,317,11, -1,203,0,318,4, -22,82,0,73,0, -71,0,72,0,84, -0,95,0,83,0, -72,0,73,0,70, -0,84,0,1,-1, -319,11,1,121,0, -320,4,22,82,0, -73,0,71,0,72, -0,84,0,95,0, -65,0,78,0,71, -0,76,0,69,0, -1,-1,3,64,0, -321,12,1,42049,322, -5,0,323,11,1, -106,0,324,4,4, -65,0,84,0,1, --1,3,65,0,325, -12,1,1023,326,5, -63,3,109,0,327, -12,1,1024,328,5, -63,3,109,0,327, -3,110,0,327,3, -111,0,327,3,112, -0,327,3,113,0, -327,3,114,0,327, -3,115,0,327,3, -116,0,327,3,117, -0,327,3,118,0, -327,3,119,0,327, -3,120,0,327,3, -121,0,327,3,122, -0,327,3,48,0, -327,3,49,0,327, -3,50,0,327,3, -51,0,327,3,52, -0,327,3,53,0, -327,3,54,0,327, -3,55,0,327,3, -56,0,327,3,57, -0,327,3,65,0, -327,3,66,0,327, -3,67,0,327,3, -68,0,327,3,69, -0,327,3,70,0, -327,3,71,0,327, -3,72,0,327,3, -73,0,327,3,74, -0,327,3,75,0, -327,3,76,0,327, -3,77,0,327,3, -78,0,327,3,79, -0,327,3,80,0, -327,3,81,0,327, -3,82,0,327,3, -83,0,327,3,84, -0,327,3,85,0, -327,3,86,0,327, -3,87,0,327,3, -88,0,327,3,89, -0,327,3,90,0, -327,3,95,0,327, -3,97,0,327,3, -98,0,327,3,99, -0,327,3,100,0, -327,3,101,0,327, -3,102,0,327,3, -103,0,327,3,104, -0,327,3,105,0, -327,3,106,0,327, -3,107,0,327,3, -108,0,327,329,11, -1,829,0,330,4, -10,73,0,68,0, -69,0,78,0,84, -0,1,-1,3,110, -0,327,3,111,0, -327,3,112,0,327, -3,113,0,327,3, -114,0,327,3,115, -0,327,3,116,0, -327,3,117,0,327, -3,118,0,327,3, -119,0,327,3,120, -0,327,3,121,0, -327,3,122,0,327, -3,48,0,327,3, -49,0,327,3,50, -0,327,3,51,0, -327,3,52,0,327, -3,53,0,327,3, -54,0,327,3,55, -0,327,3,56,0, -327,3,57,0,327, -3,65,0,327,3, -66,0,327,3,67, -0,327,3,68,0, -327,3,69,0,327, -3,70,0,327,3, -71,0,327,3,72, -0,327,3,73,0, -327,3,74,0,327, -3,75,0,327,3, -76,0,327,3,77, -0,327,3,78,0, -327,3,79,0,327, -3,80,0,327,3, -81,0,327,3,82, -0,327,3,83,0, -327,3,84,0,327, -3,85,0,327,3, -86,0,327,3,87, -0,327,3,88,0, -327,3,89,0,327, -3,90,0,327,3, -95,0,327,3,97, -0,327,3,98,0, -327,3,99,0,327, -3,100,0,327,3, -101,0,327,3,102, -0,327,3,103,0, -327,3,104,0,327, -3,105,0,327,3, -106,0,327,3,107, -0,327,3,108,0, -327,331,11,1,829, -0,330,1,-1,3, -66,0,325,3,67, -0,325,3,68,0, -325,3,69,0,325, -3,70,0,325,3, -71,0,325,3,72, -0,325,3,73,0, -325,3,74,0,325, -3,75,0,325,3, -76,0,325,3,77, -0,325,3,78,0, -325,3,79,0,325, -3,80,0,325,3, -81,0,325,3,82, -0,325,3,83,0, -325,3,84,0,325, -3,85,0,325,3, -86,0,325,3,87, -0,325,3,88,0, -325,3,89,0,325, -3,90,0,325,3, -91,0,332,12,1, -39872,333,5,0,334, -11,1,126,0,335, -4,24,76,0,69, -0,70,0,84,0, -95,0,66,0,82, -0,65,0,67,0, -75,0,69,0,84, -0,1,-1,3,93, -0,336,12,1,40237, -337,5,0,338,11, -1,131,0,339,4, -26,82,0,73,0, -71,0,72,0,84, -0,95,0,66,0, -82,0,65,0,67, -0,75,0,69,0, -84,0,1,-1,3, -94,0,340,12,1, -44221,341,5,0,342, -11,1,170,0,343, -4,10,67,0,65, -0,82,0,69,0, -84,0,1,-1,3, -95,0,325,3,97, -0,344,12,1,20025, -345,5,63,3,109, -0,327,3,110,0, -327,3,111,0,327, -3,112,0,327,3, -113,0,327,3,114, -0,327,3,115,0, -327,3,116,0,346, -12,1,20060,347,5, -63,3,109,0,327, -3,110,0,327,3, -111,0,327,3,112, -0,327,3,113,0, -327,3,114,0,327, -3,115,0,327,3, -116,0,348,12,1, -20095,349,5,63,3, -109,0,327,3,110, -0,327,3,111,0, -327,3,112,0,327, -3,113,0,327,3, -114,0,327,3,115, -0,327,3,116,0, -327,3,117,0,327, -3,118,0,327,3, -119,0,327,3,120, -0,327,3,121,0, -327,3,122,0,327, -3,48,0,327,3, -49,0,327,3,50, -0,327,3,51,0, -327,3,52,0,327, -3,53,0,327,3, -54,0,327,3,55, -0,327,3,56,0, -327,3,57,0,327, -3,65,0,327,3, -66,0,327,3,67, -0,327,3,68,0, -327,3,69,0,327, -3,70,0,327,3, -71,0,327,3,72, -0,327,3,73,0, -327,3,74,0,327, -3,75,0,327,3, -76,0,327,3,77, -0,327,3,78,0, -327,3,79,0,327, -3,80,0,327,3, -81,0,327,3,82, -0,327,3,83,0, -327,3,84,0,327, -3,85,0,327,3, -86,0,327,3,87, -0,327,3,88,0, -327,3,89,0,327, -3,90,0,327,3, -95,0,327,3,97, -0,350,12,1,20138, -351,5,63,3,109, -0,327,3,110,0, -327,3,111,0,327, -3,112,0,327,3, -113,0,327,3,114, -0,327,3,115,0, -327,3,116,0,327, -3,117,0,327,3, -118,0,327,3,119, -0,327,3,120,0, -327,3,121,0,327, -3,122,0,327,3, -48,0,327,3,49, -0,327,3,50,0, -327,3,51,0,327, -3,52,0,327,3, -53,0,327,3,54, -0,327,3,55,0, -327,3,56,0,327, -3,57,0,327,3, -65,0,327,3,66, -0,327,3,67,0, -327,3,68,0,327, -3,69,0,327,3, -70,0,327,3,71, -0,327,3,72,0, -327,3,73,0,327, -3,74,0,327,3, -75,0,327,3,76, -0,327,3,77,0, -327,3,78,0,327, -3,79,0,327,3, -80,0,327,3,81, -0,327,3,82,0, -327,3,83,0,327, -3,84,0,327,3, -85,0,327,3,86, -0,327,3,87,0, -327,3,88,0,327, -3,89,0,327,3, -90,0,327,3,95, -0,327,3,97,0, -327,3,98,0,327, -3,99,0,352,12, -1,20183,353,5,63, -3,109,0,327,3, -110,0,327,3,111, -0,327,3,112,0, -327,3,113,0,327, -3,114,0,327,3, -115,0,327,3,116, -0,327,3,117,0, -327,3,118,0,327, -3,119,0,327,3, -120,0,327,3,121, -0,327,3,122,0, -327,3,48,0,327, -3,49,0,327,3, -50,0,327,3,51, -0,327,3,52,0, -327,3,53,0,327, -3,54,0,327,3, -55,0,327,3,56, -0,327,3,57,0, -327,3,65,0,327, -3,66,0,327,3, -67,0,327,3,68, -0,327,3,69,0, -327,3,70,0,327, -3,71,0,327,3, -72,0,327,3,73, -0,327,3,74,0, -327,3,75,0,327, -3,76,0,327,3, -77,0,327,3,78, -0,327,3,79,0, -327,3,80,0,327, -3,81,0,327,3, -82,0,327,3,83, -0,327,3,84,0, -327,3,85,0,327, -3,86,0,327,3, -87,0,327,3,88, -0,327,3,89,0, -327,3,90,0,327, -3,95,0,327,3, -97,0,327,3,98, -0,327,3,99,0, -327,3,100,0,327, -3,101,0,327,3, -102,0,327,3,103, -0,327,3,104,0, -354,12,1,20233,355, -5,63,3,109,0, -327,3,110,0,327, -3,111,0,327,3, -112,0,327,3,113, -0,327,3,114,0, -327,3,115,0,327, -3,116,0,327,3, -117,0,327,3,118, -0,327,3,119,0, -327,3,120,0,327, -3,121,0,327,3, -122,0,327,3,48, -0,327,3,49,0, -327,3,50,0,327, -3,51,0,327,3, -52,0,327,3,53, -0,327,3,54,0, -327,3,55,0,327, -3,56,0,327,3, -57,0,327,3,65, -0,327,3,66,0, -327,3,67,0,327, -3,68,0,327,3, -69,0,327,3,70, -0,327,3,71,0, -327,3,72,0,327, -3,73,0,327,3, -74,0,327,3,75, -0,327,3,76,0, -327,3,77,0,327, -3,78,0,327,3, -79,0,327,3,80, -0,327,3,81,0, -327,3,82,0,327, -3,83,0,327,3, -84,0,327,3,85, -0,327,3,86,0, -327,3,87,0,327, -3,88,0,327,3, -89,0,327,3,90, -0,327,3,95,0, -327,3,97,0,327, -3,98,0,327,3, -99,0,327,3,100, -0,327,3,101,0, -327,3,102,0,327, -3,103,0,327,3, -104,0,327,3,105, -0,327,3,106,0, -327,3,107,0,327, -3,108,0,327,356, -11,1,380,0,357, -4,24,65,0,84, -0,84,0,65,0, -67,0,72,0,95, -0,69,0,86,0, -69,0,78,0,84, -0,1,-1,3,105, -0,327,3,106,0, -327,3,107,0,327, -3,108,0,327,358, -11,1,829,0,330, -1,-1,3,100,0, -327,3,101,0,327, -3,102,0,327,3, -103,0,327,3,104, -0,327,3,105,0, -327,3,106,0,327, -3,107,0,327,3, -108,0,327,359,11, -1,829,0,330,1, --1,3,98,0,327, -3,99,0,327,3, -100,0,327,3,101, -0,327,3,102,0, -327,3,103,0,327, -3,104,0,327,3, -105,0,327,3,106, -0,327,3,107,0, -327,3,108,0,327, -360,11,1,829,0, -330,1,-1,3,117, -0,327,3,118,0, -327,3,119,0,327, -3,120,0,327,3, -121,0,327,3,122, -0,327,3,48,0, -327,3,49,0,327, -3,50,0,327,3, -51,0,327,3,52, -0,327,3,53,0, -327,3,54,0,327, -3,55,0,327,3, -56,0,327,3,57, -0,327,3,65,0, -327,3,66,0,327, -3,67,0,327,3, -68,0,327,3,69, -0,327,3,70,0, -327,3,71,0,327, -3,72,0,327,3, -73,0,327,3,74, -0,327,3,75,0, -327,3,76,0,327, -3,77,0,327,3, -78,0,327,3,79, -0,327,3,80,0, -327,3,81,0,327, -3,82,0,327,3, -83,0,327,3,84, -0,327,3,85,0, -327,3,86,0,327, -3,87,0,327,3, -88,0,327,3,89, -0,327,3,90,0, -327,3,95,0,361, -12,1,20626,362,5, -63,3,109,0,327, -3,110,0,327,3, -111,0,327,3,112, -0,327,3,113,0, -327,3,114,0,363, -12,1,20659,364,5, -63,3,109,0,327, -3,110,0,327,3, -111,0,365,12,1, -20689,366,5,63,3, -109,0,327,3,110, -0,327,3,111,0, -327,3,112,0,327, -3,113,0,327,3, -114,0,327,3,115, -0,327,3,116,0, -367,12,1,20724,368, -5,63,3,109,0, -327,3,110,0,327, -3,111,0,327,3, -112,0,327,3,113, -0,327,3,114,0, -327,3,115,0,327, -3,116,0,327,3, -117,0,327,3,118, -0,327,3,119,0, -327,3,120,0,327, -3,121,0,327,3, -122,0,327,3,48, -0,327,3,49,0, -327,3,50,0,327, -3,51,0,327,3, -52,0,327,3,53, -0,327,3,54,0, -327,3,55,0,327, -3,56,0,327,3, -57,0,327,3,65, -0,327,3,66,0, -327,3,67,0,327, -3,68,0,327,3, -69,0,327,3,70, -0,327,3,71,0, -327,3,72,0,327, -3,73,0,327,3, -74,0,327,3,75, -0,327,3,76,0, -327,3,77,0,327, -3,78,0,327,3, -79,0,327,3,80, -0,327,3,81,0, -327,3,82,0,327, -3,83,0,327,3, -84,0,327,3,85, -0,327,3,86,0, -327,3,87,0,327, -3,88,0,327,3, -89,0,327,3,90, -0,327,3,95,0, -369,12,1,20810,370, -5,63,3,109,0, -327,3,110,0,327, -3,111,0,327,3, -112,0,327,3,113, -0,327,3,114,0, -327,3,115,0,327, -3,116,0,371,12, -1,20845,372,5,63, -3,109,0,327,3, -110,0,327,3,111, -0,327,3,112,0, -327,3,113,0,327, -3,114,0,327,3, -115,0,327,3,116, -0,327,3,117,0, -327,3,118,0,327, -3,119,0,327,3, -120,0,327,3,121, -0,327,3,122,0, -327,3,48,0,327, -3,49,0,327,3, -50,0,327,3,51, -0,327,3,52,0, -327,3,53,0,327, -3,54,0,327,3, -55,0,327,3,56, -0,327,3,57,0, -327,3,65,0,327, -3,66,0,327,3, -67,0,327,3,68, -0,327,3,69,0, -327,3,70,0,327, -3,71,0,327,3, -72,0,327,3,73, -0,327,3,74,0, -327,3,75,0,327, -3,76,0,327,3, -77,0,327,3,78, -0,327,3,79,0, -327,3,80,0,327, -3,81,0,327,3, -82,0,327,3,83, -0,327,3,84,0, -327,3,85,0,327, -3,86,0,327,3, -87,0,327,3,88, -0,327,3,89,0, -327,3,90,0,327, -3,95,0,327,3, -97,0,373,12,1, -20888,374,5,63,3, -109,0,327,3,110, -0,327,3,111,0, -327,3,112,0,327, -3,113,0,327,3, -114,0,375,12,1, -20921,376,5,63,3, -109,0,327,3,110, -0,327,3,111,0, -327,3,112,0,327, -3,113,0,327,3, -114,0,327,3,115, -0,327,3,116,0, -327,3,117,0,327, -3,118,0,327,3, -119,0,327,3,120, -0,327,3,121,0, -327,3,122,0,327, -3,48,0,327,3, -49,0,327,3,50, -0,327,3,51,0, -327,3,52,0,327, -3,53,0,327,3, -54,0,327,3,55, -0,327,3,56,0, -327,3,57,0,327, -3,65,0,327,3, -66,0,327,3,67, -0,327,3,68,0, -327,3,69,0,327, -3,70,0,327,3, -71,0,327,3,72, -0,327,3,73,0, -327,3,74,0,327, -3,75,0,327,3, -76,0,327,3,77, -0,327,3,78,0, -327,3,79,0,327, -3,80,0,327,3, -81,0,327,3,82, -0,327,3,83,0, -327,3,84,0,327, -3,85,0,327,3, -86,0,327,3,87, -0,327,3,88,0, -327,3,89,0,327, -3,90,0,327,3, -95,0,327,3,97, -0,327,3,98,0, -327,3,99,0,327, -3,100,0,327,3, -101,0,327,3,102, -0,327,3,103,0, -377,12,1,20970,378, -5,63,3,109,0, -327,3,110,0,327, -3,111,0,327,3, -112,0,327,3,113, -0,327,3,114,0, -327,3,115,0,327, -3,116,0,327,3, -117,0,327,3,118, -0,327,3,119,0, -327,3,120,0,327, -3,121,0,327,3, -122,0,327,3,48, -0,327,3,49,0, -327,3,50,0,327, -3,51,0,327,3, -52,0,327,3,53, -0,327,3,54,0, -327,3,55,0,327, -3,56,0,327,3, -57,0,327,3,65, -0,327,3,66,0, -327,3,67,0,327, -3,68,0,327,3, -69,0,327,3,70, -0,327,3,71,0, -327,3,72,0,327, -3,73,0,327,3, -74,0,327,3,75, -0,327,3,76,0, -327,3,77,0,327, -3,78,0,327,3, -79,0,327,3,80, -0,327,3,81,0, -327,3,82,0,327, -3,83,0,327,3, -84,0,327,3,85, -0,327,3,86,0, -327,3,87,0,327, -3,88,0,327,3, -89,0,327,3,90, -0,327,3,95,0, -327,3,97,0,327, -3,98,0,327,3, -99,0,327,3,100, -0,327,3,101,0, -379,12,1,21017,380, -5,63,3,109,0, -327,3,110,0,327, -3,111,0,327,3, -112,0,327,3,113, -0,327,3,114,0, -327,3,115,0,327, -3,116,0,381,12, -1,21052,382,5,63, -3,109,0,327,3, -110,0,327,3,111, -0,327,3,112,0, -327,3,113,0,327, -3,114,0,327,3, -115,0,327,3,116, -0,327,3,117,0, -327,3,118,0,327, -3,119,0,327,3, -120,0,327,3,121, -0,327,3,122,0, -327,3,48,0,327, -3,49,0,327,3, -50,0,327,3,51, -0,327,3,52,0, -327,3,53,0,327, -3,54,0,327,3, -55,0,327,3,56, -0,327,3,57,0, -327,3,65,0,327, -3,66,0,327,3, -67,0,327,3,68, -0,327,3,69,0, -327,3,70,0,327, -3,71,0,327,3, -72,0,327,3,73, -0,327,3,74,0, -327,3,75,0,327, -3,76,0,327,3, -77,0,327,3,78, -0,327,3,79,0, -327,3,80,0,327, -3,81,0,327,3, -82,0,327,3,83, -0,327,3,84,0, -327,3,85,0,327, -3,86,0,327,3, -87,0,327,3,88, -0,327,3,89,0, -327,3,90,0,327, -3,95,0,327,3, -97,0,327,3,98, -0,327,3,99,0, -327,3,100,0,327, -3,101,0,327,3, -102,0,327,3,103, -0,327,3,104,0, -327,3,105,0,327, -3,106,0,327,3, -107,0,327,3,108, -0,327,383,11,1, -350,0,384,4,38, -65,0,84,0,95, -0,82,0,79,0, -84,0,95,0,84, -0,65,0,82,0, -71,0,69,0,84, -0,95,0,69,0, -86,0,69,0,78, -0,84,0,1,-1, -3,117,0,327,3, -118,0,327,3,119, -0,327,3,120,0, -327,3,121,0,327, -3,122,0,327,3, -48,0,327,3,49, -0,327,3,50,0, -327,3,51,0,327, -3,52,0,327,3, -53,0,327,3,54, -0,327,3,55,0, -327,3,56,0,327, -3,57,0,327,3, -65,0,327,3,66, -0,327,3,67,0, -327,3,68,0,327, -3,69,0,327,3, -70,0,327,3,71, -0,327,3,72,0, -327,3,73,0,327, -3,74,0,327,3, -75,0,327,3,76, -0,327,3,77,0, -327,3,78,0,327, -3,79,0,327,3, -80,0,327,3,81, -0,327,3,82,0, -327,3,83,0,327, -3,84,0,327,3, -85,0,327,3,86, -0,327,3,87,0, -327,3,88,0,327, -3,89,0,327,3, -90,0,327,3,95, -0,327,3,97,0, -327,3,98,0,327, -3,99,0,327,3, -100,0,327,3,101, -0,327,3,102,0, -327,3,103,0,327, -3,104,0,327,3, -105,0,327,3,106, -0,327,3,107,0, -327,3,108,0,327, -385,11,1,829,0, -330,1,-1,3,102, -0,327,3,103,0, -327,3,104,0,327, -3,105,0,327,3, -106,0,327,3,107, -0,327,3,108,0, -327,386,11,1,829, -0,330,1,-1,3, -104,0,327,3,105, -0,327,3,106,0, -327,3,107,0,327, -3,108,0,327,387, -11,1,829,0,330, -1,-1,3,115,0, -327,3,116,0,327, -3,117,0,327,3, -118,0,327,3,119, -0,327,3,120,0, -327,3,121,0,327, -3,122,0,327,3, -48,0,327,3,49, -0,327,3,50,0, -327,3,51,0,327, -3,52,0,327,3, -53,0,327,3,54, -0,327,3,55,0, -327,3,56,0,327, -3,57,0,327,3, -65,0,327,3,66, -0,327,3,67,0, -327,3,68,0,327, -3,69,0,327,3, -70,0,327,3,71, -0,327,3,72,0, -327,3,73,0,327, -3,74,0,327,3, -75,0,327,3,76, -0,327,3,77,0, -327,3,78,0,327, -3,79,0,327,3, -80,0,327,3,81, -0,327,3,82,0, -327,3,83,0,327, -3,84,0,327,3, -85,0,327,3,86, -0,327,3,87,0, -327,3,88,0,327, -3,89,0,327,3, -90,0,327,3,95, -0,327,3,97,0, -327,3,98,0,327, -3,99,0,327,3, -100,0,327,3,101, -0,327,3,102,0, -327,3,103,0,327, -3,104,0,327,3, -105,0,327,3,106, -0,327,3,107,0, -327,3,108,0,327, -388,11,1,829,0, -330,1,-1,3,98, -0,327,3,99,0, -327,3,100,0,327, -3,101,0,327,3, -102,0,327,3,103, -0,327,3,104,0, -327,3,105,0,327, -3,106,0,327,3, -107,0,327,3,108, -0,327,389,11,1, -829,0,330,1,-1, -3,117,0,327,3, -118,0,327,3,119, -0,327,3,120,0, -327,3,121,0,327, -3,122,0,327,3, -48,0,327,3,49, -0,327,3,50,0, -327,3,51,0,327, -3,52,0,327,3, -53,0,327,3,54, -0,327,3,55,0, -327,3,56,0,327, -3,57,0,327,3, -65,0,327,3,66, -0,327,3,67,0, -327,3,68,0,327, -3,69,0,327,3, -70,0,327,3,71, -0,327,3,72,0, -327,3,73,0,327, -3,74,0,327,3, -75,0,327,3,76, -0,327,3,77,0, -327,3,78,0,327, -3,79,0,327,3, -80,0,327,3,81, -0,327,3,82,0, -327,3,83,0,327, -3,84,0,327,3, -85,0,327,3,86, -0,327,3,87,0, -327,3,88,0,327, -3,89,0,327,3, -90,0,327,3,95, -0,327,3,97,0, -327,3,98,0,327, -3,99,0,327,3, -100,0,327,3,101, -0,327,3,102,0, -327,3,103,0,327, -3,104,0,327,3, -105,0,327,3,106, -0,327,3,107,0, -327,3,108,0,327, -390,11,1,829,0, -330,1,-1,3,97, -0,327,3,98,0, -327,3,99,0,327, -3,100,0,327,3, -101,0,327,3,102, -0,327,3,103,0, -327,3,104,0,327, -3,105,0,327,3, -106,0,327,3,107, -0,327,3,108,0, -327,391,11,1,829, -0,330,1,-1,3, -117,0,327,3,118, -0,327,3,119,0, -327,3,120,0,327, -3,121,0,327,3, -122,0,327,3,48, -0,327,3,49,0, -327,3,50,0,327, -3,51,0,327,3, -52,0,327,3,53, -0,327,3,54,0, -327,3,55,0,327, -3,56,0,327,3, -57,0,327,3,65, -0,327,3,66,0, -327,3,67,0,327, -3,68,0,327,3, -69,0,327,3,70, -0,327,3,71,0, -327,3,72,0,327, -3,73,0,327,3, -74,0,327,3,75, -0,327,3,76,0, -327,3,77,0,327, -3,78,0,327,3, -79,0,327,3,80, -0,327,3,81,0, -327,3,82,0,327, -3,83,0,327,3, -84,0,327,3,85, -0,327,3,86,0, -327,3,87,0,327, -3,88,0,327,3, -89,0,327,3,90, -0,327,3,95,0, -327,3,97,0,327, -3,98,0,327,3, -99,0,327,3,100, -0,327,3,101,0, -327,3,102,0,327, -3,103,0,327,3, -104,0,327,3,105, -0,327,3,106,0, -327,3,107,0,327, -3,108,0,327,392, -11,1,829,0,330, -1,-1,3,112,0, -327,3,113,0,327, -3,114,0,327,3, -115,0,327,3,116, -0,327,3,117,0, -327,3,118,0,327, -3,119,0,327,3, -120,0,327,3,121, -0,327,3,122,0, -327,3,48,0,327, -3,49,0,327,3, -50,0,327,3,51, -0,327,3,52,0, -327,3,53,0,327, -3,54,0,327,3, -55,0,327,3,56, -0,327,3,57,0, -327,3,65,0,327, -3,66,0,327,3, -67,0,327,3,68, -0,327,3,69,0, -327,3,70,0,327, -3,71,0,327,3, -72,0,327,3,73, -0,327,3,74,0, -327,3,75,0,327, -3,76,0,327,3, -77,0,327,3,78, -0,327,3,79,0, -327,3,80,0,327, -3,81,0,327,3, -82,0,327,3,83, -0,327,3,84,0, -327,3,85,0,327, -3,86,0,327,3, -87,0,327,3,88, -0,327,3,89,0, -327,3,90,0,327, -3,95,0,327,3, -97,0,327,3,98, -0,327,3,99,0, -327,3,100,0,327, -3,101,0,327,3, -102,0,327,3,103, -0,327,3,104,0, -327,3,105,0,327, -3,106,0,327,3, -107,0,327,3,108, -0,327,393,11,1, -829,0,330,1,-1, -3,115,0,327,3, -116,0,394,12,1, -21861,395,5,63,3, -109,0,327,3,110, -0,327,3,111,0, -327,3,112,0,327, -3,113,0,327,3, -114,0,327,3,115, -0,327,3,116,0, -327,3,117,0,327, -3,118,0,327,3, -119,0,327,3,120, -0,327,3,121,0, -327,3,122,0,327, -3,48,0,327,3, -49,0,327,3,50, -0,327,3,51,0, -327,3,52,0,327, -3,53,0,327,3, -54,0,327,3,55, -0,327,3,56,0, -327,3,57,0,327, -3,65,0,327,3, -66,0,327,3,67, -0,327,3,68,0, -327,3,69,0,327, -3,70,0,327,3, -71,0,327,3,72, -0,327,3,73,0, -327,3,74,0,327, -3,75,0,327,3, -76,0,327,3,77, -0,327,3,78,0, -327,3,79,0,327, -3,80,0,327,3, -81,0,327,3,82, -0,327,3,83,0, -327,3,84,0,327, -3,85,0,327,3, -86,0,327,3,87, -0,327,3,88,0, -327,3,89,0,327, -3,90,0,327,3, -95,0,327,3,97, -0,396,12,1,21904, -397,5,63,3,109, -0,327,3,110,0, -327,3,111,0,327, -3,112,0,327,3, -113,0,327,3,114, -0,398,12,1,21937, -399,5,63,3,109, -0,327,3,110,0, -327,3,111,0,327, -3,112,0,327,3, -113,0,327,3,114, -0,327,3,115,0, -327,3,116,0,327, -3,117,0,327,3, -118,0,327,3,119, -0,327,3,120,0, -327,3,121,0,327, -3,122,0,327,3, -48,0,327,3,49, -0,327,3,50,0, -327,3,51,0,327, -3,52,0,327,3, -53,0,327,3,54, -0,327,3,55,0, -327,3,56,0,327, -3,57,0,327,3, -65,0,327,3,66, -0,327,3,67,0, -327,3,68,0,327, -3,69,0,327,3, -70,0,327,3,71, -0,327,3,72,0, -327,3,73,0,327, -3,74,0,327,3, -75,0,327,3,76, -0,327,3,77,0, -327,3,78,0,327, -3,79,0,327,3, -80,0,327,3,81, -0,327,3,82,0, -327,3,83,0,327, -3,84,0,327,3, -85,0,327,3,86, -0,327,3,87,0, -327,3,88,0,327, -3,89,0,327,3, -90,0,327,3,95, -0,327,3,97,0, -327,3,98,0,327, -3,99,0,327,3, -100,0,327,3,101, -0,327,3,102,0, -327,3,103,0,400, -12,1,21986,401,5, -63,3,109,0,327, -3,110,0,327,3, -111,0,327,3,112, -0,327,3,113,0, -327,3,114,0,327, -3,115,0,327,3, -116,0,327,3,117, -0,327,3,118,0, -327,3,119,0,327, -3,120,0,327,3, -121,0,327,3,122, -0,327,3,48,0, -327,3,49,0,327, -3,50,0,327,3, -51,0,327,3,52, -0,327,3,53,0, -327,3,54,0,327, -3,55,0,327,3, -56,0,327,3,57, -0,327,3,65,0, -327,3,66,0,327, -3,67,0,327,3, -68,0,327,3,69, -0,327,3,70,0, -327,3,71,0,327, -3,72,0,327,3, -73,0,327,3,74, -0,327,3,75,0, -327,3,76,0,327, -3,77,0,327,3, -78,0,327,3,79, -0,327,3,80,0, -327,3,81,0,327, -3,82,0,327,3, -83,0,327,3,84, -0,327,3,85,0, -327,3,86,0,327, -3,87,0,327,3, -88,0,327,3,89, -0,327,3,90,0, -327,3,95,0,327, -3,97,0,327,3, -98,0,327,3,99, -0,327,3,100,0, -327,3,101,0,402, -12,1,22033,403,5, -63,3,109,0,327, -3,110,0,327,3, -111,0,327,3,112, -0,327,3,113,0, -327,3,114,0,327, -3,115,0,327,3, -116,0,404,12,1, -22068,405,5,63,3, -109,0,327,3,110, -0,327,3,111,0, -327,3,112,0,327, -3,113,0,327,3, -114,0,327,3,115, -0,327,3,116,0, -327,3,117,0,327, -3,118,0,327,3, -119,0,327,3,120, -0,327,3,121,0, -327,3,122,0,327, -3,48,0,327,3, -49,0,327,3,50, -0,327,3,51,0, -327,3,52,0,327, -3,53,0,327,3, -54,0,327,3,55, -0,327,3,56,0, -327,3,57,0,327, -3,65,0,327,3, -66,0,327,3,67, -0,327,3,68,0, -327,3,69,0,327, -3,70,0,327,3, -71,0,327,3,72, -0,327,3,73,0, -327,3,74,0,327, -3,75,0,327,3, -76,0,327,3,77, -0,327,3,78,0, -327,3,79,0,327, -3,80,0,327,3, -81,0,327,3,82, -0,327,3,83,0, -327,3,84,0,327, -3,85,0,327,3, -86,0,327,3,87, -0,327,3,88,0, -327,3,89,0,327, -3,90,0,327,3, -95,0,327,3,97, -0,327,3,98,0, -327,3,99,0,327, -3,100,0,327,3, -101,0,327,3,102, -0,327,3,103,0, -327,3,104,0,327, -3,105,0,327,3, -106,0,327,3,107, -0,327,3,108,0, -327,406,11,1,367, -0,407,4,30,65, -0,84,0,95,0, -84,0,65,0,82, -0,71,0,69,0, -84,0,95,0,69, -0,86,0,69,0, -78,0,84,0,1, --1,3,117,0,327, -3,118,0,327,3, -119,0,327,3,120, -0,327,3,121,0, -327,3,122,0,327, -3,48,0,327,3, -49,0,327,3,50, -0,327,3,51,0, -327,3,52,0,327, -3,53,0,327,3, -54,0,327,3,55, -0,327,3,56,0, -327,3,57,0,327, -3,65,0,327,3, -66,0,327,3,67, -0,327,3,68,0, -327,3,69,0,327, -3,70,0,327,3, -71,0,327,3,72, -0,327,3,73,0, -327,3,74,0,327, -3,75,0,327,3, -76,0,327,3,77, -0,327,3,78,0, -327,3,79,0,327, -3,80,0,327,3, -81,0,327,3,82, -0,327,3,83,0, -327,3,84,0,327, -3,85,0,327,3, -86,0,327,3,87, -0,327,3,88,0, -327,3,89,0,327, -3,90,0,327,3, -95,0,327,3,97, -0,327,3,98,0, -327,3,99,0,327, -3,100,0,327,3, -101,0,327,3,102, -0,327,3,103,0, -327,3,104,0,327, -3,105,0,327,3, -106,0,327,3,107, -0,327,3,108,0, -327,408,11,1,829, -0,330,1,-1,3, -102,0,327,3,103, -0,327,3,104,0, -327,3,105,0,327, -3,106,0,327,3, -107,0,327,3,108, -0,327,409,11,1, -829,0,330,1,-1, -3,104,0,327,3, -105,0,327,3,106, -0,327,3,107,0, -327,3,108,0,327, -410,11,1,829,0, -330,1,-1,3,115, -0,327,3,116,0, -327,3,117,0,327, -3,118,0,327,3, -119,0,327,3,120, -0,327,3,121,0, -327,3,122,0,327, -3,48,0,327,3, -49,0,327,3,50, -0,327,3,51,0, -327,3,52,0,327, -3,53,0,327,3, -54,0,327,3,55, -0,327,3,56,0, -327,3,57,0,327, -3,65,0,327,3, -66,0,327,3,67, -0,327,3,68,0, -327,3,69,0,327, -3,70,0,327,3, -71,0,327,3,72, -0,327,3,73,0, -327,3,74,0,327, -3,75,0,327,3, -76,0,327,3,77, -0,327,3,78,0, -327,3,79,0,327, -3,80,0,327,3, -81,0,327,3,82, -0,327,3,83,0, -327,3,84,0,327, -3,85,0,327,3, -86,0,327,3,87, -0,327,3,88,0, -327,3,89,0,327, -3,90,0,327,3, -95,0,327,3,97, -0,327,3,98,0, -327,3,99,0,327, -3,100,0,327,3, -101,0,327,3,102, -0,327,3,103,0, -327,3,104,0,327, -3,105,0,327,3, -106,0,327,3,107, -0,327,3,108,0, -327,411,11,1,829, -0,330,1,-1,3, -98,0,327,3,99, -0,327,3,100,0, -327,3,101,0,327, -3,102,0,327,3, -103,0,327,3,104, -0,327,3,105,0, -327,3,106,0,327, -3,107,0,327,3, -108,0,327,412,11, -1,829,0,330,1, --1,3,117,0,327, -3,118,0,327,3, -119,0,327,3,120, -0,327,3,121,0, -327,3,122,0,327, -3,48,0,327,3, -49,0,327,3,50, -0,327,3,51,0, -327,3,52,0,327, -3,53,0,327,3, -54,0,327,3,55, -0,327,3,56,0, -327,3,57,0,327, -3,65,0,327,3, -66,0,327,3,67, -0,327,3,68,0, -327,3,69,0,327, -3,70,0,327,3, -71,0,327,3,72, -0,327,3,73,0, -327,3,74,0,327, -3,75,0,327,3, -76,0,327,3,77, -0,327,3,78,0, -327,3,79,0,327, -3,80,0,327,3, -81,0,327,3,82, -0,327,3,83,0, -327,3,84,0,327, -3,85,0,327,3, -86,0,327,3,87, -0,327,3,88,0, -327,3,89,0,327, -3,90,0,327,3, -95,0,327,3,97, -0,327,3,98,0, -327,3,99,0,327, -3,100,0,327,3, -101,0,327,3,102, -0,327,3,103,0, -327,3,104,0,327, -3,105,0,327,3, -106,0,327,3,107, -0,327,3,108,0, -327,413,11,1,829, -0,330,1,-1,3, -97,0,327,3,98, -0,327,3,99,0, -327,3,100,0,327, -3,101,0,327,3, -102,0,327,3,103, -0,327,3,104,0, -327,3,105,0,327, -3,106,0,327,3, -107,0,327,3,108, -0,327,414,11,1, -829,0,330,1,-1, -3,117,0,327,3, -118,0,327,3,119, -0,327,3,120,0, -327,3,121,0,327, -3,122,0,327,3, -48,0,327,3,49, -0,327,3,50,0, -327,3,51,0,327, -3,52,0,327,3, -53,0,327,3,54, -0,327,3,55,0, -327,3,56,0,327, -3,57,0,327,3, -65,0,327,3,66, -0,327,3,67,0, -327,3,68,0,327, -3,69,0,327,3, -70,0,327,3,71, -0,327,3,72,0, -327,3,73,0,327, -3,74,0,327,3, -75,0,327,3,76, -0,327,3,77,0, -327,3,78,0,327, -3,79,0,327,3, -80,0,327,3,81, -0,327,3,82,0, -327,3,83,0,327, -3,84,0,327,3, -85,0,327,3,86, -0,327,3,87,0, -327,3,88,0,327, -3,89,0,327,3, -90,0,327,3,95, -0,327,3,97,0, -327,3,98,0,327, -3,99,0,327,3, -100,0,327,3,101, -0,327,3,102,0, -327,3,103,0,327, -3,104,0,327,3, -105,0,327,3,106, -0,327,3,107,0, -327,3,108,0,327, -415,11,1,829,0, -330,1,-1,3,98, -0,325,3,99,0, -416,12,1,22787,417, -5,63,3,109,0, -327,3,110,0,327, -3,111,0,418,12, -1,22817,419,5,63, -3,109,0,327,3, -110,0,420,12,1, -22846,421,5,63,3, -109,0,327,3,110, -0,327,3,111,0, -327,3,112,0,327, -3,113,0,327,3, -114,0,327,3,115, -0,327,3,116,0, -422,12,1,22881,423, -5,63,3,109,0, -327,3,110,0,327, -3,111,0,327,3, -112,0,327,3,113, -0,327,3,114,0, -424,12,1,22914,425, -5,63,3,109,0, -327,3,110,0,327, -3,111,0,426,12, -1,22944,427,5,63, -3,109,0,327,3, -110,0,327,3,111, -0,327,3,112,0, -327,3,113,0,327, -3,114,0,327,3, -115,0,327,3,116, -0,327,3,117,0, -327,3,118,0,327, -3,119,0,327,3, -120,0,327,3,121, -0,327,3,122,0, -327,3,48,0,327, -3,49,0,327,3, -50,0,327,3,51, -0,327,3,52,0, -327,3,53,0,327, -3,54,0,327,3, -55,0,327,3,56, -0,327,3,57,0, -327,3,65,0,327, -3,66,0,327,3, -67,0,327,3,68, -0,327,3,69,0, -327,3,70,0,327, -3,71,0,327,3, -72,0,327,3,73, -0,327,3,74,0, -327,3,75,0,327, -3,76,0,327,3, -77,0,327,3,78, -0,327,3,79,0, -327,3,80,0,327, -3,81,0,327,3, -82,0,327,3,83, -0,327,3,84,0, -327,3,85,0,327, -3,86,0,327,3, -87,0,327,3,88, -0,327,3,89,0, -327,3,90,0,327, -3,95,0,327,3, -97,0,327,3,98, -0,327,3,99,0, -327,3,100,0,327, -3,101,0,327,3, -102,0,327,3,103, -0,327,3,104,0, -327,3,105,0,327, -3,106,0,327,3, -107,0,327,3,108, -0,428,12,1,22998, -429,5,63,3,109, -0,327,3,110,0, -327,3,111,0,327, -3,112,0,327,3, -113,0,327,3,114, -0,327,3,115,0, -327,3,116,0,327, -3,117,0,327,3, -118,0,327,3,119, -0,327,3,120,0, -327,3,121,0,327, -3,122,0,327,3, -48,0,327,3,49, -0,327,3,50,0, -327,3,51,0,327, -3,52,0,327,3, -53,0,327,3,54, -0,327,3,55,0, -327,3,56,0,327, -3,57,0,327,3, -65,0,327,3,66, -0,327,3,67,0, -327,3,68,0,327, -3,69,0,327,3, -70,0,327,3,71, -0,327,3,72,0, -327,3,73,0,327, -3,74,0,327,3, -75,0,327,3,76, -0,327,3,77,0, -327,3,78,0,327, -3,79,0,327,3, -80,0,327,3,81, -0,327,3,82,0, -327,3,83,0,327, -3,84,0,327,3, -85,0,327,3,86, -0,327,3,87,0, -327,3,88,0,327, -3,89,0,327,3, -90,0,327,3,95, -0,327,3,97,0, -327,3,98,0,327, -3,99,0,327,3, -100,0,327,3,101, -0,327,3,102,0, -327,3,103,0,327, -3,104,0,327,3, -105,0,327,3,106, -0,327,3,107,0, -327,3,108,0,327, -430,11,1,450,0, -431,4,26,67,0, -79,0,78,0,84, -0,82,0,79,0, -76,0,95,0,69, -0,86,0,69,0, -78,0,84,0,1, --1,432,11,1,829, -0,330,1,-1,3, -112,0,327,3,113, -0,327,3,114,0, -327,3,115,0,327, -3,116,0,327,3, -117,0,327,3,118, -0,327,3,119,0, -327,3,120,0,327, -3,121,0,327,3, -122,0,327,3,48, -0,327,3,49,0, -327,3,50,0,327, -3,51,0,327,3, -52,0,327,3,53, -0,327,3,54,0, -327,3,55,0,327, -3,56,0,327,3, -57,0,327,3,65, -0,327,3,66,0, -327,3,67,0,327, -3,68,0,327,3, -69,0,327,3,70, -0,327,3,71,0, -327,3,72,0,327, -3,73,0,327,3, -74,0,327,3,75, -0,327,3,76,0, -327,3,77,0,327, -3,78,0,327,3, -79,0,327,3,80, -0,327,3,81,0, -327,3,82,0,327, -3,83,0,327,3, -84,0,327,3,85, -0,327,3,86,0, -327,3,87,0,327, -3,88,0,327,3, -89,0,327,3,90, -0,327,3,95,0, -327,3,97,0,327, -3,98,0,327,3, -99,0,327,3,100, -0,327,3,101,0, -327,3,102,0,327, -3,103,0,327,3, -104,0,327,3,105, -0,327,3,106,0, -327,3,107,0,327, -3,108,0,327,433, -11,1,829,0,330, -1,-1,3,115,0, -327,3,116,0,327, -3,117,0,327,3, -118,0,327,3,119, -0,327,3,120,0, -327,3,121,0,327, -3,122,0,327,3, -48,0,327,3,49, -0,327,3,50,0, -327,3,51,0,327, -3,52,0,327,3, -53,0,327,3,54, -0,327,3,55,0, -327,3,56,0,327, -3,57,0,327,3, -65,0,327,3,66, -0,327,3,67,0, -327,3,68,0,327, -3,69,0,327,3, -70,0,327,3,71, -0,327,3,72,0, -327,3,73,0,327, -3,74,0,327,3, -75,0,327,3,76, -0,327,3,77,0, -327,3,78,0,327, -3,79,0,327,3, -80,0,327,3,81, -0,327,3,82,0, -327,3,83,0,327, -3,84,0,327,3, -85,0,327,3,86, -0,327,3,87,0, -327,3,88,0,327, -3,89,0,327,3, -90,0,327,3,95, -0,327,3,97,0, -327,3,98,0,327, -3,99,0,327,3, -100,0,327,3,101, -0,327,3,102,0, -327,3,103,0,327, -3,104,0,327,3, -105,0,327,3,106, -0,327,3,107,0, -327,3,108,0,327, -434,11,1,829,0, -330,1,-1,3,117, -0,327,3,118,0, -327,3,119,0,327, -3,120,0,327,3, -121,0,327,3,122, -0,327,3,48,0, -327,3,49,0,327, -3,50,0,327,3, -51,0,327,3,52, -0,327,3,53,0, -327,3,54,0,327, -3,55,0,327,3, -56,0,327,3,57, -0,327,3,65,0, -327,3,66,0,327, -3,67,0,327,3, -68,0,327,3,69, -0,327,3,70,0, -327,3,71,0,327, -3,72,0,327,3, -73,0,327,3,74, -0,327,3,75,0, -327,3,76,0,327, -3,77,0,327,3, -78,0,327,3,79, -0,327,3,80,0, -327,3,81,0,327, -3,82,0,327,3, -83,0,327,3,84, -0,327,3,85,0, -327,3,86,0,327, -3,87,0,327,3, -88,0,327,3,89, -0,327,3,90,0, -327,3,95,0,327, -3,97,0,327,3, -98,0,327,3,99, -0,327,3,100,0, -327,3,101,0,327, -3,102,0,327,3, -103,0,327,3,104, -0,327,3,105,0, -327,3,106,0,327, -3,107,0,327,3, -108,0,327,435,11, -1,829,0,330,1, --1,3,111,0,327, -3,112,0,327,3, -113,0,327,3,114, -0,327,3,115,0, -327,3,116,0,327, -3,117,0,327,3, -118,0,327,3,119, -0,327,3,120,0, -327,3,121,0,327, -3,122,0,327,3, -48,0,327,3,49, -0,327,3,50,0, -327,3,51,0,327, -3,52,0,327,3, -53,0,327,3,54, -0,327,3,55,0, -327,3,56,0,327, -3,57,0,327,3, -65,0,327,3,66, -0,327,3,67,0, -327,3,68,0,327, -3,69,0,327,3, -70,0,327,3,71, -0,327,3,72,0, -327,3,73,0,327, -3,74,0,327,3, -75,0,327,3,76, -0,327,3,77,0, -327,3,78,0,327, -3,79,0,327,3, -80,0,327,3,81, -0,327,3,82,0, -327,3,83,0,327, -3,84,0,327,3, -85,0,327,3,86, -0,327,3,87,0, -327,3,88,0,327, -3,89,0,327,3, -90,0,327,3,95, -0,327,3,97,0, -327,3,98,0,327, -3,99,0,327,3, -100,0,327,3,101, -0,327,3,102,0, -327,3,103,0,327, -3,104,0,327,3, -105,0,327,3,106, -0,327,3,107,0, -327,3,108,0,436, -12,1,23471,437,5, -63,3,109,0,327, -3,110,0,327,3, -111,0,327,3,112, -0,327,3,113,0, -327,3,114,0,327, -3,115,0,327,3, -116,0,327,3,117, -0,327,3,118,0, -327,3,119,0,327, -3,120,0,327,3, -121,0,327,3,122, -0,327,3,48,0, -327,3,49,0,327, -3,50,0,327,3, -51,0,327,3,52, -0,327,3,53,0, -327,3,54,0,327, -3,55,0,327,3, -56,0,327,3,57, -0,327,3,65,0, -327,3,66,0,327, -3,67,0,327,3, -68,0,327,3,69, -0,327,3,70,0, -327,3,71,0,327, -3,72,0,327,3, -73,0,327,3,74, -0,327,3,75,0, -327,3,76,0,327, -3,77,0,327,3, -78,0,327,3,79, -0,327,3,80,0, -327,3,81,0,327, -3,82,0,327,3, -83,0,327,3,84, -0,327,3,85,0, -327,3,86,0,327, -3,87,0,327,3, -88,0,327,3,89, -0,327,3,90,0, -327,3,95,0,327, -3,97,0,327,3, -98,0,327,3,99, -0,327,3,100,0, -327,3,101,0,327, -3,102,0,327,3, -103,0,327,3,104, -0,327,3,105,0, -327,3,106,0,327, -3,107,0,327,3, -108,0,438,12,1, -23525,439,5,63,3, -109,0,327,3,110, -0,327,3,111,0, -327,3,112,0,327, -3,113,0,327,3, -114,0,327,3,115, -0,327,3,116,0, -327,3,117,0,327, -3,118,0,327,3, -119,0,327,3,120, -0,327,3,121,0, -327,3,122,0,327, -3,48,0,327,3, -49,0,327,3,50, -0,327,3,51,0, -327,3,52,0,327, -3,53,0,327,3, -54,0,327,3,55, -0,327,3,56,0, -327,3,57,0,327, -3,65,0,327,3, -66,0,327,3,67, -0,327,3,68,0, -327,3,69,0,327, -3,70,0,327,3, -71,0,327,3,72, -0,327,3,73,0, -327,3,74,0,327, -3,75,0,327,3, -76,0,327,3,77, -0,327,3,78,0, -327,3,79,0,327, -3,80,0,327,3, -81,0,327,3,82, -0,327,3,83,0, -327,3,84,0,327, -3,85,0,327,3, -86,0,327,3,87, -0,327,3,88,0, -327,3,89,0,327, -3,90,0,327,3, -95,0,327,3,97, -0,327,3,98,0, -327,3,99,0,327, -3,100,0,327,3, -101,0,327,3,102, -0,327,3,103,0, -327,3,104,0,327, -3,105,0,440,12, -1,23576,441,5,63, -3,109,0,327,3, -110,0,327,3,111, -0,327,3,112,0, -327,3,113,0,327, -3,114,0,327,3, -115,0,442,12,1, -23610,443,5,63,3, -109,0,327,3,110, -0,327,3,111,0, -327,3,112,0,327, -3,113,0,327,3, -114,0,327,3,115, -0,327,3,116,0, -327,3,117,0,327, -3,118,0,327,3, -119,0,327,3,120, -0,327,3,121,0, -327,3,122,0,327, -3,48,0,327,3, -49,0,327,3,50, -0,327,3,51,0, -327,3,52,0,327, -3,53,0,327,3, -54,0,327,3,55, -0,327,3,56,0, -327,3,57,0,327, -3,65,0,327,3, -66,0,327,3,67, -0,327,3,68,0, -327,3,69,0,327, -3,70,0,327,3, -71,0,327,3,72, -0,327,3,73,0, -327,3,74,0,327, -3,75,0,327,3, -76,0,327,3,77, -0,327,3,78,0, -327,3,79,0,327, -3,80,0,327,3, -81,0,327,3,82, -0,327,3,83,0, -327,3,84,0,327, -3,85,0,327,3, -86,0,327,3,87, -0,327,3,88,0, -327,3,89,0,327, -3,90,0,327,3, -95,0,327,3,97, -0,327,3,98,0, -327,3,99,0,327, -3,100,0,327,3, -101,0,327,3,102, -0,327,3,103,0, -327,3,104,0,327, -3,105,0,444,12, -1,23661,445,5,63, -3,109,0,327,3, -110,0,327,3,111, -0,446,12,1,23691, -447,5,63,3,109, -0,327,3,110,0, -448,12,1,23720,449, -5,63,3,109,0, -327,3,110,0,327, -3,111,0,327,3, -112,0,327,3,113, -0,327,3,114,0, -327,3,115,0,327, -3,116,0,327,3, -117,0,327,3,118, -0,327,3,119,0, -327,3,120,0,327, -3,121,0,327,3, -122,0,327,3,48, -0,327,3,49,0, -327,3,50,0,327, -3,51,0,327,3, -52,0,327,3,53, -0,327,3,54,0, -327,3,55,0,327, -3,56,0,327,3, -57,0,327,3,65, -0,327,3,66,0, -327,3,67,0,327, -3,68,0,327,3, -69,0,327,3,70, -0,327,3,71,0, -327,3,72,0,327, -3,73,0,327,3, -74,0,327,3,75, -0,327,3,76,0, -327,3,77,0,327, -3,78,0,327,3, -79,0,327,3,80, -0,327,3,81,0, -327,3,82,0,327, -3,83,0,327,3, -84,0,327,3,85, -0,327,3,86,0, -327,3,87,0,327, -3,88,0,327,3, -89,0,327,3,90, -0,327,3,95,0, -450,12,1,23806,451, -5,63,3,109,0, -327,3,110,0,327, -3,111,0,327,3, -112,0,327,3,113, -0,327,3,114,0, -327,3,115,0,452, -12,1,23840,453,5, -63,3,109,0,327, -3,110,0,327,3, -111,0,327,3,112, -0,327,3,113,0, -327,3,114,0,327, -3,115,0,327,3, -116,0,454,12,1, -23875,455,5,63,3, -109,0,327,3,110, -0,327,3,111,0, -327,3,112,0,327, -3,113,0,327,3, -114,0,327,3,115, -0,327,3,116,0, -327,3,117,0,327, -3,118,0,327,3, -119,0,327,3,120, -0,327,3,121,0, -327,3,122,0,327, -3,48,0,327,3, -49,0,327,3,50, -0,327,3,51,0, -327,3,52,0,327, -3,53,0,327,3, -54,0,327,3,55, -0,327,3,56,0, -327,3,57,0,327, -3,65,0,327,3, -66,0,327,3,67, -0,327,3,68,0, -327,3,69,0,327, -3,70,0,327,3, -71,0,327,3,72, -0,327,3,73,0, -327,3,74,0,327, -3,75,0,327,3, -76,0,327,3,77, -0,327,3,78,0, -327,3,79,0,327, -3,80,0,327,3, -81,0,327,3,82, -0,327,3,83,0, -327,3,84,0,327, -3,85,0,327,3, -86,0,327,3,87, -0,327,3,88,0, -327,3,89,0,327, -3,90,0,327,3, -95,0,327,3,97, -0,456,12,1,23918, -457,5,63,3,109, -0,327,3,110,0, -327,3,111,0,327, -3,112,0,327,3, -113,0,327,3,114, -0,458,12,1,23951, -459,5,63,3,109, -0,327,3,110,0, -327,3,111,0,327, -3,112,0,327,3, -113,0,327,3,114, -0,327,3,115,0, -327,3,116,0,460, -12,1,23986,461,5, -63,3,109,0,327, -3,110,0,327,3, -111,0,327,3,112, -0,327,3,113,0, -327,3,114,0,327, -3,115,0,327,3, -116,0,327,3,117, -0,327,3,118,0, -327,3,119,0,327, -3,120,0,327,3, -121,0,327,3,122, -0,327,3,48,0, -327,3,49,0,327, -3,50,0,327,3, -51,0,327,3,52, -0,327,3,53,0, -327,3,54,0,327, -3,55,0,327,3, -56,0,327,3,57, -0,327,3,65,0, -327,3,66,0,327, -3,67,0,327,3, -68,0,327,3,69, -0,327,3,70,0, -327,3,71,0,327, -3,72,0,327,3, -73,0,327,3,74, -0,327,3,75,0, -327,3,76,0,327, -3,77,0,327,3, -78,0,327,3,79, -0,327,3,80,0, -327,3,81,0,327, -3,82,0,327,3, -83,0,327,3,84, -0,327,3,85,0, -327,3,86,0,327, -3,87,0,327,3, -88,0,327,3,89, -0,327,3,90,0, -327,3,95,0,327, -3,97,0,327,3, -98,0,327,3,99, -0,327,3,100,0, -327,3,101,0,327, -3,102,0,327,3, -103,0,327,3,104, -0,327,3,105,0, -327,3,106,0,327, -3,107,0,327,3, -108,0,327,462,11, -1,431,0,463,4, -42,67,0,79,0, -76,0,76,0,73, -0,83,0,73,0, -79,0,78,0,95, -0,83,0,84,0, -65,0,82,0,84, -0,95,0,69,0, -86,0,69,0,78, -0,84,0,1,-1, -3,117,0,327,3, -118,0,327,3,119, -0,327,3,120,0, -327,3,121,0,327, -3,122,0,327,3, -48,0,327,3,49, -0,327,3,50,0, -327,3,51,0,327, -3,52,0,327,3, -53,0,327,3,54, -0,327,3,55,0, -327,3,56,0,327, -3,57,0,327,3, -65,0,327,3,66, -0,327,3,67,0, -327,3,68,0,327, -3,69,0,327,3, -70,0,327,3,71, -0,327,3,72,0, -327,3,73,0,327, -3,74,0,327,3, -75,0,327,3,76, -0,327,3,77,0, -327,3,78,0,327, -3,79,0,327,3, -80,0,327,3,81, -0,327,3,82,0, -327,3,83,0,327, -3,84,0,327,3, -85,0,327,3,86, -0,327,3,87,0, -327,3,88,0,327, -3,89,0,327,3, -90,0,327,3,95, -0,327,3,97,0, -327,3,98,0,327, -3,99,0,327,3, -100,0,327,3,101, -0,327,3,102,0, -327,3,103,0,327, -3,104,0,327,3, -105,0,327,3,106, -0,327,3,107,0, -327,3,108,0,327, -464,11,1,829,0, -330,1,-1,3,115, -0,327,3,116,0, -327,3,117,0,327, -3,118,0,327,3, -119,0,327,3,120, -0,327,3,121,0, -327,3,122,0,327, -3,48,0,327,3, -49,0,327,3,50, -0,327,3,51,0, -327,3,52,0,327, -3,53,0,327,3, -54,0,327,3,55, -0,327,3,56,0, -327,3,57,0,327, -3,65,0,327,3, -66,0,327,3,67, -0,327,3,68,0, -327,3,69,0,327, -3,70,0,327,3, -71,0,327,3,72, -0,327,3,73,0, -327,3,74,0,327, -3,75,0,327,3, -76,0,327,3,77, -0,327,3,78,0, -327,3,79,0,327, -3,80,0,327,3, -81,0,327,3,82, -0,327,3,83,0, -327,3,84,0,327, -3,85,0,327,3, -86,0,327,3,87, -0,327,3,88,0, -327,3,89,0,327, -3,90,0,327,3, -95,0,327,3,97, -0,327,3,98,0, -327,3,99,0,327, -3,100,0,327,3, -101,0,327,3,102, -0,327,3,103,0, -327,3,104,0,327, -3,105,0,327,3, -106,0,327,3,107, -0,327,3,108,0, -327,465,11,1,829, -0,330,1,-1,3, -98,0,327,3,99, -0,327,3,100,0, -327,3,101,0,327, -3,102,0,327,3, -103,0,327,3,104, -0,327,3,105,0, -327,3,106,0,327, -3,107,0,327,3, -108,0,327,466,11, -1,829,0,330,1, --1,3,117,0,327, -3,118,0,327,3, -119,0,327,3,120, -0,327,3,121,0, -327,3,122,0,327, -3,48,0,327,3, -49,0,327,3,50, -0,327,3,51,0, -327,3,52,0,327, -3,53,0,327,3, -54,0,327,3,55, -0,327,3,56,0, -327,3,57,0,327, -3,65,0,327,3, -66,0,327,3,67, -0,327,3,68,0, -327,3,69,0,327, -3,70,0,327,3, -71,0,327,3,72, -0,327,3,73,0, -327,3,74,0,327, -3,75,0,327,3, -76,0,327,3,77, -0,327,3,78,0, -327,3,79,0,327, -3,80,0,327,3, -81,0,327,3,82, -0,327,3,83,0, -327,3,84,0,327, -3,85,0,327,3, -86,0,327,3,87, -0,327,3,88,0, -327,3,89,0,327, -3,90,0,327,3, -95,0,327,3,97, -0,327,3,98,0, -327,3,99,0,327, -3,100,0,327,3, -101,0,327,3,102, -0,327,3,103,0, -327,3,104,0,327, -3,105,0,327,3, -106,0,327,3,107, -0,327,3,108,0, -327,467,11,1,829, -0,330,1,-1,3, -116,0,327,3,117, -0,327,3,118,0, -327,3,119,0,327, -3,120,0,327,3, -121,0,327,3,122, -0,327,3,48,0, -327,3,49,0,327, -3,50,0,327,3, -51,0,327,3,52, -0,327,3,53,0, -327,3,54,0,327, -3,55,0,327,3, -56,0,327,3,57, -0,327,3,65,0, -327,3,66,0,327, -3,67,0,327,3, -68,0,327,3,69, -0,327,3,70,0, -327,3,71,0,327, -3,72,0,327,3, -73,0,327,3,74, -0,327,3,75,0, -327,3,76,0,327, -3,77,0,327,3, -78,0,327,3,79, -0,327,3,80,0, -327,3,81,0,327, -3,82,0,327,3, -83,0,327,3,84, -0,327,3,85,0, -327,3,86,0,327, -3,87,0,327,3, -88,0,327,3,89, -0,327,3,90,0, -327,3,95,0,327, -3,97,0,327,3, -98,0,327,3,99, -0,327,3,100,0, -327,3,101,0,468, -12,1,24453,469,5, -63,3,109,0,327, -3,110,0,470,12, -1,24482,471,5,63, -3,109,0,327,3, -110,0,327,3,111, -0,327,3,112,0, -327,3,113,0,327, -3,114,0,327,3, -115,0,327,3,116, -0,327,3,117,0, -327,3,118,0,327, -3,119,0,327,3, -120,0,327,3,121, -0,327,3,122,0, -327,3,48,0,327, -3,49,0,327,3, -50,0,327,3,51, -0,327,3,52,0, -327,3,53,0,327, -3,54,0,327,3, -55,0,327,3,56, -0,327,3,57,0, -327,3,65,0,327, -3,66,0,327,3, -67,0,327,3,68, -0,327,3,69,0, -327,3,70,0,327, -3,71,0,327,3, -72,0,327,3,73, -0,327,3,74,0, -327,3,75,0,327, -3,76,0,327,3, -77,0,327,3,78, -0,327,3,79,0, -327,3,80,0,327, -3,81,0,327,3, -82,0,327,3,83, -0,327,3,84,0, -327,3,85,0,327, -3,86,0,327,3, -87,0,327,3,88, -0,327,3,89,0, -327,3,90,0,327, -3,95,0,327,3, -97,0,327,3,98, -0,327,3,99,0, -327,3,100,0,472, -12,1,24528,473,5, -63,3,109,0,327, -3,110,0,327,3, -111,0,327,3,112, -0,327,3,113,0, -327,3,114,0,327, -3,115,0,327,3, -116,0,327,3,117, -0,327,3,118,0, -327,3,119,0,327, -3,120,0,327,3, -121,0,327,3,122, -0,327,3,48,0, -327,3,49,0,327, -3,50,0,327,3, -51,0,327,3,52, -0,327,3,53,0, -327,3,54,0,327, -3,55,0,327,3, -56,0,327,3,57, -0,327,3,65,0, -327,3,66,0,327, -3,67,0,327,3, -68,0,327,3,69, -0,327,3,70,0, -327,3,71,0,327, -3,72,0,327,3, -73,0,327,3,74, -0,327,3,75,0, -327,3,76,0,327, -3,77,0,327,3, -78,0,327,3,79, -0,327,3,80,0, -327,3,81,0,327, -3,82,0,327,3, -83,0,327,3,84, -0,327,3,85,0, -327,3,86,0,327, -3,87,0,327,3, -88,0,327,3,89, -0,327,3,90,0, -327,3,95,0,327, -3,97,0,327,3, -98,0,327,3,99, -0,327,3,100,0, -327,3,101,0,327, -3,102,0,327,3, -103,0,327,3,104, -0,327,3,105,0, -327,3,106,0,327, -3,107,0,327,3, -108,0,327,474,11, -1,414,0,475,4, -38,67,0,79,0, -76,0,76,0,73, -0,83,0,73,0, -79,0,78,0,95, -0,69,0,78,0, -68,0,95,0,69, -0,86,0,69,0, -78,0,84,0,1, --1,3,101,0,327, -3,102,0,327,3, -103,0,327,3,104, -0,327,3,105,0, -327,3,106,0,327, -3,107,0,327,3, -108,0,327,476,11, -1,829,0,330,1, --1,3,111,0,327, -3,112,0,327,3, -113,0,327,3,114, -0,327,3,115,0, -327,3,116,0,327, -3,117,0,327,3, -118,0,327,3,119, -0,327,3,120,0, -327,3,121,0,327, -3,122,0,327,3, -48,0,327,3,49, -0,327,3,50,0, -327,3,51,0,327, -3,52,0,327,3, -53,0,327,3,54, -0,327,3,55,0, -327,3,56,0,327, -3,57,0,327,3, -65,0,327,3,66, -0,327,3,67,0, -327,3,68,0,327, -3,69,0,327,3, -70,0,327,3,71, -0,327,3,72,0, -327,3,73,0,327, -3,74,0,327,3, -75,0,327,3,76, -0,327,3,77,0, -327,3,78,0,327, -3,79,0,327,3, -80,0,327,3,81, -0,327,3,82,0, -327,3,83,0,327, -3,84,0,327,3, -85,0,327,3,86, -0,327,3,87,0, -327,3,88,0,327, -3,89,0,327,3, -90,0,327,3,95, -0,327,3,97,0, -327,3,98,0,327, -3,99,0,327,3, -100,0,327,3,101, -0,327,3,102,0, -327,3,103,0,327, -3,104,0,327,3, -105,0,327,3,106, -0,327,3,107,0, -327,3,108,0,327, -477,11,1,829,0, -330,1,-1,3,102, -0,327,3,103,0, -327,3,104,0,327, -3,105,0,327,3, -106,0,327,3,107, -0,327,3,108,0, -327,478,11,1,829, -0,330,1,-1,3, -97,0,327,3,98, -0,327,3,99,0, -327,3,100,0,327, -3,101,0,327,3, -102,0,327,3,103, -0,327,3,104,0, -327,3,105,0,327, -3,106,0,327,3, -107,0,327,3,108, -0,327,479,11,1, -401,0,480,4,30, -67,0,79,0,76, -0,76,0,73,0, -83,0,73,0,79, -0,78,0,95,0, -69,0,86,0,69, -0,78,0,84,0, -1,-1,3,111,0, -327,3,112,0,327, -3,113,0,327,3, -114,0,327,3,115, -0,327,3,116,0, -327,3,117,0,327, -3,118,0,327,3, -119,0,327,3,120, -0,327,3,121,0, -327,3,122,0,327, -3,48,0,327,3, -49,0,327,3,50, -0,327,3,51,0, -327,3,52,0,327, -3,53,0,327,3, -54,0,327,3,55, -0,327,3,56,0, -327,3,57,0,327, -3,65,0,327,3, -66,0,327,3,67, -0,327,3,68,0, -327,3,69,0,327, -3,70,0,327,3, -71,0,327,3,72, -0,327,3,73,0, -327,3,74,0,327, -3,75,0,327,3, -76,0,327,3,77, -0,327,3,78,0, -327,3,79,0,327, -3,80,0,327,3, -81,0,327,3,82, -0,327,3,83,0, -327,3,84,0,327, -3,85,0,327,3, -86,0,327,3,87, -0,327,3,88,0, -327,3,89,0,327, -3,90,0,327,3, -95,0,327,3,97, -0,327,3,98,0, -327,3,99,0,327, -3,100,0,327,3, -101,0,327,3,102, -0,327,3,103,0, -327,3,104,0,327, -3,105,0,327,3, -106,0,327,3,107, -0,327,3,108,0, -327,481,11,1,829, -0,330,1,-1,3, -112,0,327,3,113, -0,327,3,114,0, -327,3,115,0,327, -3,116,0,327,3, -117,0,327,3,118, -0,327,3,119,0, -327,3,120,0,327, -3,121,0,327,3, -122,0,327,3,48, -0,327,3,49,0, -327,3,50,0,327, -3,51,0,327,3, -52,0,327,3,53, -0,327,3,54,0, -327,3,55,0,327, -3,56,0,327,3, -57,0,327,3,65, -0,327,3,66,0, -327,3,67,0,327, -3,68,0,327,3, -69,0,327,3,70, -0,327,3,71,0, -327,3,72,0,327, -3,73,0,327,3, -74,0,327,3,75, -0,327,3,76,0, -327,3,77,0,327, -3,78,0,327,3, -79,0,327,3,80, -0,327,3,81,0, -327,3,82,0,327, -3,83,0,327,3, -84,0,327,3,85, -0,327,3,86,0, -327,3,87,0,327, -3,88,0,327,3, -89,0,327,3,90, -0,327,3,95,0, -327,3,97,0,327, -3,98,0,327,3, -99,0,327,3,100, -0,327,3,101,0, -327,3,102,0,327, -3,103,0,327,3, -104,0,327,3,105, -0,327,3,106,0, -327,3,107,0,327, -3,108,0,327,482, -11,1,829,0,330, -1,-1,3,106,0, -327,3,107,0,327, -3,108,0,327,483, -11,1,829,0,330, -1,-1,3,116,0, -327,3,117,0,327, -3,118,0,327,3, -119,0,327,3,120, -0,327,3,121,0, -327,3,122,0,327, -3,48,0,327,3, -49,0,327,3,50, -0,327,3,51,0, -327,3,52,0,327, -3,53,0,327,3, -54,0,327,3,55, -0,327,3,56,0, -327,3,57,0,327, -3,65,0,327,3, -66,0,327,3,67, -0,327,3,68,0, -327,3,69,0,327, -3,70,0,327,3, -71,0,327,3,72, -0,327,3,73,0, -327,3,74,0,327, -3,75,0,327,3, -76,0,327,3,77, -0,327,3,78,0, -327,3,79,0,327, -3,80,0,327,3, -81,0,327,3,82, -0,327,3,83,0, -327,3,84,0,327, -3,85,0,327,3, -86,0,327,3,87, -0,327,3,88,0, -327,3,89,0,327, -3,90,0,327,3, -95,0,327,3,97, -0,327,3,98,0, -327,3,99,0,327, -3,100,0,327,3, -101,0,327,3,102, -0,327,3,103,0, -327,3,104,0,327, -3,105,0,327,3, -106,0,327,3,107, -0,327,3,108,0, -327,484,11,1,829, -0,330,1,-1,3, -106,0,327,3,107, -0,327,3,108,0, -327,485,11,1,829, -0,330,1,-1,486, -11,1,829,0,330, -1,-1,487,11,1, -829,0,330,1,-1, -3,112,0,327,3, -113,0,327,3,114, -0,327,3,115,0, -327,3,116,0,327, -3,117,0,327,3, -118,0,327,3,119, -0,327,3,120,0, -327,3,121,0,327, -3,122,0,327,3, -48,0,327,3,49, -0,327,3,50,0, -327,3,51,0,327, -3,52,0,327,3, -53,0,327,3,54, -0,327,3,55,0, -327,3,56,0,327, -3,57,0,327,3, -65,0,327,3,66, -0,327,3,67,0, -327,3,68,0,327, -3,69,0,327,3, -70,0,327,3,71, -0,327,3,72,0, -327,3,73,0,327, -3,74,0,327,3, -75,0,327,3,76, -0,327,3,77,0, -327,3,78,0,327, -3,79,0,327,3, -80,0,327,3,81, -0,327,3,82,0, -327,3,83,0,327, -3,84,0,327,3, -85,0,327,3,86, -0,327,3,87,0, -327,3,88,0,327, -3,89,0,327,3, -90,0,327,3,95, -0,327,3,97,0, -327,3,98,0,327, -3,99,0,327,3, -100,0,327,3,101, -0,327,3,102,0, -327,3,103,0,327, -3,104,0,488,12, -1,25477,489,5,63, -3,109,0,327,3, -110,0,327,3,111, -0,327,3,112,0, -327,3,113,0,327, -3,114,0,327,3, -115,0,327,3,116, -0,327,3,117,0, -327,3,118,0,327, -3,119,0,327,3, -120,0,327,3,121, -0,327,3,122,0, -327,3,48,0,327, -3,49,0,327,3, -50,0,327,3,51, -0,327,3,52,0, -327,3,53,0,327, -3,54,0,327,3, -55,0,327,3,56, -0,327,3,57,0, -327,3,65,0,327, -3,66,0,327,3, -67,0,327,3,68, -0,327,3,69,0, -327,3,70,0,327, -3,71,0,327,3, -72,0,327,3,73, -0,327,3,74,0, -327,3,75,0,327, -3,76,0,327,3, -77,0,327,3,78, -0,327,3,79,0, -327,3,80,0,327, -3,81,0,327,3, -82,0,327,3,83, -0,327,3,84,0, -327,3,85,0,327, -3,86,0,327,3, -87,0,327,3,88, -0,327,3,89,0, -327,3,90,0,327, -3,95,0,327,3, -97,0,490,12,1, -25520,491,5,63,3, -109,0,327,3,110, -0,492,12,1,25549, -493,5,63,3,109, -0,327,3,110,0, -327,3,111,0,327, -3,112,0,327,3, -113,0,327,3,114, -0,327,3,115,0, -327,3,116,0,327, -3,117,0,327,3, -118,0,327,3,119, -0,327,3,120,0, -327,3,121,0,327, -3,122,0,327,3, -48,0,327,3,49, -0,327,3,50,0, -327,3,51,0,327, -3,52,0,327,3, -53,0,327,3,54, -0,327,3,55,0, -327,3,56,0,327, -3,57,0,327,3, -65,0,327,3,66, -0,327,3,67,0, -327,3,68,0,327, -3,69,0,327,3, -70,0,327,3,71, -0,327,3,72,0, -327,3,73,0,327, -3,74,0,327,3, -75,0,327,3,76, -0,327,3,77,0, -327,3,78,0,327, -3,79,0,327,3, -80,0,327,3,81, -0,327,3,82,0, -327,3,83,0,327, -3,84,0,327,3, -85,0,327,3,86, -0,327,3,87,0, -327,3,88,0,327, -3,89,0,327,3, -90,0,327,3,95, -0,327,3,97,0, -327,3,98,0,327, -3,99,0,327,3, -100,0,327,3,101, -0,327,3,102,0, -327,3,103,0,494, -12,1,25598,495,5, -63,3,109,0,327, -3,110,0,327,3, -111,0,327,3,112, -0,327,3,113,0, -327,3,114,0,327, -3,115,0,327,3, -116,0,327,3,117, -0,327,3,118,0, -327,3,119,0,327, -3,120,0,327,3, -121,0,327,3,122, -0,327,3,48,0, -327,3,49,0,327, -3,50,0,327,3, -51,0,327,3,52, -0,327,3,53,0, -327,3,54,0,327, -3,55,0,327,3, -56,0,327,3,57, -0,327,3,65,0, -327,3,66,0,327, -3,67,0,327,3, -68,0,327,3,69, -0,327,3,70,0, -327,3,71,0,327, -3,72,0,327,3, -73,0,327,3,74, -0,327,3,75,0, -327,3,76,0,327, -3,77,0,327,3, -78,0,327,3,79, -0,327,3,80,0, -327,3,81,0,327, -3,82,0,327,3, -83,0,327,3,84, -0,327,3,85,0, -327,3,86,0,327, -3,87,0,327,3, -88,0,327,3,89, -0,327,3,90,0, -327,3,95,0,327, -3,97,0,327,3, -98,0,327,3,99, -0,327,3,100,0, -327,3,101,0,496, -12,1,25645,497,5, -63,3,109,0,327, -3,110,0,327,3, -111,0,327,3,112, -0,327,3,113,0, -327,3,114,0,327, -3,115,0,327,3, -116,0,327,3,117, -0,327,3,118,0, -327,3,119,0,327, -3,120,0,327,3, -121,0,327,3,122, -0,327,3,48,0, -327,3,49,0,327, -3,50,0,327,3, -51,0,327,3,52, -0,327,3,53,0, -327,3,54,0,327, -3,55,0,327,3, -56,0,327,3,57, -0,327,3,65,0, -327,3,66,0,327, -3,67,0,327,3, -68,0,327,3,69, -0,327,3,70,0, -327,3,71,0,327, -3,72,0,327,3, -73,0,327,3,74, -0,327,3,75,0, -327,3,76,0,327, -3,77,0,327,3, -78,0,327,3,79, -0,327,3,80,0, -327,3,81,0,327, -3,82,0,327,3, -83,0,327,3,84, -0,327,3,85,0, -327,3,86,0,327, -3,87,0,327,3, -88,0,327,3,89, -0,327,3,90,0, -327,3,95,0,327, -3,97,0,327,3, -98,0,327,3,99, -0,327,3,100,0, -498,12,1,25691,499, -5,63,3,109,0, -327,3,110,0,327, -3,111,0,327,3, -112,0,327,3,113, -0,327,3,114,0, -327,3,115,0,327, -3,116,0,327,3, -117,0,327,3,118, -0,327,3,119,0, -327,3,120,0,327, -3,121,0,327,3, -122,0,327,3,48, -0,327,3,49,0, -327,3,50,0,327, -3,51,0,327,3, -52,0,327,3,53, -0,327,3,54,0, -327,3,55,0,327, -3,56,0,327,3, -57,0,327,3,65, -0,327,3,66,0, -327,3,67,0,327, -3,68,0,327,3, -69,0,327,3,70, -0,327,3,71,0, -327,3,72,0,327, -3,73,0,327,3, -74,0,327,3,75, -0,327,3,76,0, -327,3,77,0,327, -3,78,0,327,3, -79,0,327,3,80, -0,327,3,81,0, -327,3,82,0,327, -3,83,0,327,3, -84,0,327,3,85, -0,327,3,86,0, -327,3,87,0,327, -3,88,0,327,3, -89,0,327,3,90, -0,327,3,95,0, -327,3,97,0,327, -3,98,0,327,3, -99,0,327,3,100, -0,327,3,101,0, -327,3,102,0,327, -3,103,0,327,3, -104,0,327,3,105, -0,327,3,106,0, -327,3,107,0,327, -3,108,0,327,500, -11,1,390,0,501, -4,26,67,0,72, -0,65,0,78,0, -71,0,69,0,68, -0,95,0,69,0, -86,0,69,0,78, -0,84,0,1,-1, -3,101,0,327,3, -102,0,327,3,103, -0,327,3,104,0, -327,3,105,0,327, -3,106,0,327,3, -107,0,327,3,108, -0,327,502,11,1, -829,0,330,1,-1, -3,102,0,327,3, -103,0,327,3,104, -0,327,3,105,0, -327,3,106,0,327, -3,107,0,327,3, -108,0,327,503,11, -1,829,0,330,1, --1,3,104,0,327, -3,105,0,327,3, -106,0,327,3,107, -0,327,3,108,0, -327,504,11,1,829, -0,330,1,-1,3, -111,0,327,3,112, -0,327,3,113,0, -327,3,114,0,327, -3,115,0,327,3, -116,0,327,3,117, -0,327,3,118,0, -327,3,119,0,327, -3,120,0,327,3, -121,0,327,3,122, -0,327,3,48,0, -327,3,49,0,327, -3,50,0,327,3, -51,0,327,3,52, -0,327,3,53,0, -327,3,54,0,327, -3,55,0,327,3, -56,0,327,3,57, -0,327,3,65,0, -327,3,66,0,327, -3,67,0,327,3, -68,0,327,3,69, -0,327,3,70,0, -327,3,71,0,327, -3,72,0,327,3, -73,0,327,3,74, -0,327,3,75,0, -327,3,76,0,327, -3,77,0,327,3, -78,0,327,3,79, -0,327,3,80,0, -327,3,81,0,327, -3,82,0,327,3, -83,0,327,3,84, -0,327,3,85,0, -327,3,86,0,327, -3,87,0,327,3, -88,0,327,3,89, -0,327,3,90,0, -327,3,95,0,327, -3,97,0,327,3, -98,0,327,3,99, -0,327,3,100,0, -327,3,101,0,327, -3,102,0,327,3, -103,0,327,3,104, -0,327,3,105,0, -327,3,106,0,327, -3,107,0,327,3, -108,0,327,505,11, -1,829,0,330,1, --1,3,98,0,327, -3,99,0,327,3, -100,0,327,3,101, -0,327,3,102,0, -327,3,103,0,327, -3,104,0,327,3, -105,0,327,3,106, -0,327,3,107,0, -327,3,108,0,327, -506,11,1,829,0, -330,1,-1,3,105, -0,327,3,106,0, -327,3,107,0,327, -3,108,0,327,507, -11,1,829,0,330, -1,-1,3,100,0, -508,12,1,26268,509, -5,63,3,109,0, -327,3,110,0,327, -3,111,0,510,12, -1,26298,511,5,63, -3,109,0,327,3, -110,0,327,3,111, -0,327,3,112,0, -327,3,113,0,327, -3,114,0,327,3, -115,0,327,3,116, -0,327,3,117,0, -327,3,118,0,327, -3,119,0,327,3, -120,0,327,3,121, -0,327,3,122,0, -327,3,48,0,327, -3,49,0,327,3, -50,0,327,3,51, -0,327,3,52,0, -327,3,53,0,327, -3,54,0,327,3, -55,0,327,3,56, -0,327,3,57,0, -327,3,65,0,327, -3,66,0,327,3, -67,0,327,3,68, -0,327,3,69,0, -327,3,70,0,327, -3,71,0,327,3, -72,0,327,3,73, -0,327,3,74,0, -327,3,75,0,327, -3,76,0,327,3, -77,0,327,3,78, -0,327,3,79,0, -327,3,80,0,327, -3,81,0,327,3, -82,0,327,3,83, -0,327,3,84,0, -327,3,85,0,327, -3,86,0,327,3, -87,0,327,3,88, -0,327,3,89,0, -327,3,90,0,327, -3,95,0,327,3, -97,0,327,3,98, -0,327,3,99,0, -327,3,100,0,327, -3,101,0,327,3, -102,0,327,3,103, -0,327,3,104,0, -327,3,105,0,327, -3,106,0,327,3, -107,0,327,3,108, -0,327,512,11,1, -223,0,513,4,4, -68,0,79,0,1, --1,3,112,0,327, -3,113,0,327,3, -114,0,327,3,115, -0,327,3,116,0, -327,3,117,0,327, -3,118,0,327,3, -119,0,327,3,120, -0,327,3,121,0, -327,3,122,0,327, -3,48,0,327,3, -49,0,327,3,50, -0,327,3,51,0, -327,3,52,0,327, -3,53,0,327,3, -54,0,327,3,55, -0,327,3,56,0, -327,3,57,0,327, -3,65,0,327,3, -66,0,327,3,67, -0,327,3,68,0, -327,3,69,0,327, -3,70,0,327,3, -71,0,327,3,72, -0,327,3,73,0, -327,3,74,0,327, -3,75,0,327,3, -76,0,327,3,77, -0,327,3,78,0, -327,3,79,0,327, -3,80,0,327,3, -81,0,327,3,82, -0,327,3,83,0, -327,3,84,0,327, -3,85,0,327,3, -86,0,327,3,87, -0,327,3,88,0, -327,3,89,0,327, -3,90,0,327,3, -95,0,327,3,97, -0,514,12,1,26431, -515,5,63,3,109, -0,327,3,110,0, -327,3,111,0,327, -3,112,0,327,3, -113,0,327,3,114, -0,327,3,115,0, -327,3,116,0,516, -12,1,26466,517,5, -63,3,109,0,327, -3,110,0,327,3, -111,0,327,3,112, -0,327,3,113,0, -327,3,114,0,327, -3,115,0,327,3, -116,0,327,3,117, -0,327,3,118,0, -327,3,119,0,327, -3,120,0,327,3, -121,0,327,3,122, -0,327,3,48,0, -327,3,49,0,327, -3,50,0,327,3, -51,0,327,3,52, -0,327,3,53,0, -327,3,54,0,327, -3,55,0,327,3, -56,0,327,3,57, -0,327,3,65,0, -327,3,66,0,327, -3,67,0,327,3, -68,0,327,3,69, -0,327,3,70,0, -327,3,71,0,327, -3,72,0,327,3, -73,0,327,3,74, -0,327,3,75,0, -327,3,76,0,327, -3,77,0,327,3, -78,0,327,3,79, -0,327,3,80,0, -327,3,81,0,327, -3,82,0,327,3, -83,0,327,3,84, -0,327,3,85,0, -327,3,86,0,327, -3,87,0,327,3, -88,0,327,3,89, -0,327,3,90,0, -327,3,95,0,327, -3,97,0,518,12, -1,26509,519,5,63, -3,109,0,327,3, -110,0,327,3,111, -0,327,3,112,0, -327,3,113,0,327, -3,114,0,327,3, -115,0,520,12,1, -26543,521,5,63,3, -109,0,327,3,110, -0,327,3,111,0, -327,3,112,0,327, -3,113,0,327,3, -114,0,327,3,115, -0,327,3,116,0, -327,3,117,0,327, -3,118,0,327,3, -119,0,327,3,120, -0,327,3,121,0, -327,3,122,0,327, -3,48,0,327,3, -49,0,327,3,50, -0,327,3,51,0, -327,3,52,0,327, -3,53,0,327,3, -54,0,327,3,55, -0,327,3,56,0, -327,3,57,0,327, -3,65,0,327,3, -66,0,327,3,67, -0,327,3,68,0, -327,3,69,0,327, -3,70,0,327,3, -71,0,327,3,72, -0,327,3,73,0, -327,3,74,0,327, -3,75,0,327,3, -76,0,327,3,77, -0,327,3,78,0, -327,3,79,0,327, -3,80,0,327,3, -81,0,327,3,82, -0,327,3,83,0, -327,3,84,0,327, -3,85,0,327,3, -86,0,327,3,87, -0,327,3,88,0, -327,3,89,0,327, -3,90,0,327,3, -95,0,327,3,97, -0,327,3,98,0, -327,3,99,0,327, -3,100,0,327,3, -101,0,522,12,1, -26590,523,5,63,3, -109,0,327,3,110, -0,327,3,111,0, -327,3,112,0,327, -3,113,0,327,3, -114,0,524,12,1, -26623,525,5,63,3, -109,0,327,3,110, -0,327,3,111,0, -327,3,112,0,327, -3,113,0,327,3, -114,0,327,3,115, -0,327,3,116,0, -327,3,117,0,327, -3,118,0,526,12, -1,26660,527,5,63, -3,109,0,327,3, -110,0,327,3,111, -0,327,3,112,0, -327,3,113,0,327, -3,114,0,327,3, -115,0,327,3,116, -0,327,3,117,0, -327,3,118,0,327, -3,119,0,327,3, -120,0,327,3,121, -0,327,3,122,0, -327,3,48,0,327, -3,49,0,327,3, -50,0,327,3,51, -0,327,3,52,0, -327,3,53,0,327, -3,54,0,327,3, -55,0,327,3,56, -0,327,3,57,0, -327,3,65,0,327, -3,66,0,327,3, -67,0,327,3,68, -0,327,3,69,0, -327,3,70,0,327, -3,71,0,327,3, -72,0,327,3,73, -0,327,3,74,0, -327,3,75,0,327, -3,76,0,327,3, -77,0,327,3,78, -0,327,3,79,0, -327,3,80,0,327, -3,81,0,327,3, -82,0,327,3,83, -0,327,3,84,0, -327,3,85,0,327, -3,86,0,327,3, -87,0,327,3,88, -0,327,3,89,0, -327,3,90,0,327, -3,95,0,327,3, -97,0,327,3,98, -0,327,3,99,0, -327,3,100,0,327, -3,101,0,528,12, -1,26707,529,5,63, -3,109,0,327,3, -110,0,327,3,111, -0,327,3,112,0, -327,3,113,0,327, -3,114,0,530,12, -1,26740,531,5,63, -3,109,0,327,3, -110,0,327,3,111, -0,327,3,112,0, -327,3,113,0,327, -3,114,0,327,3, -115,0,327,3,116, -0,327,3,117,0, -327,3,118,0,327, -3,119,0,327,3, -120,0,327,3,121, -0,327,3,122,0, -327,3,48,0,327, -3,49,0,327,3, -50,0,327,3,51, -0,327,3,52,0, -327,3,53,0,327, -3,54,0,327,3, -55,0,327,3,56, -0,327,3,57,0, -327,3,65,0,327, -3,66,0,327,3, -67,0,327,3,68, -0,327,3,69,0, -327,3,70,0,327, -3,71,0,327,3, -72,0,327,3,73, -0,327,3,74,0, -327,3,75,0,327, -3,76,0,327,3, -77,0,327,3,78, -0,327,3,79,0, -327,3,80,0,327, -3,81,0,327,3, -82,0,327,3,83, -0,327,3,84,0, -327,3,85,0,327, -3,86,0,327,3, -87,0,327,3,88, -0,327,3,89,0, -327,3,90,0,327, -3,95,0,327,3, -97,0,327,3,98, -0,327,3,99,0, -327,3,100,0,327, -3,101,0,327,3, -102,0,327,3,103, -0,327,3,104,0, -327,3,105,0,327, -3,106,0,327,3, -107,0,327,3,108, -0,327,532,11,1, -461,0,533,4,32, -68,0,65,0,84, -0,65,0,83,0, -69,0,82,0,86, -0,69,0,82,0, -95,0,69,0,86, -0,69,0,78,0, -84,0,1,-1,3, -115,0,327,3,116, -0,327,3,117,0, -327,3,118,0,327, -3,119,0,327,3, -120,0,327,3,121, -0,327,3,122,0, -327,3,48,0,327, -3,49,0,327,3, -50,0,327,3,51, -0,327,3,52,0, -327,3,53,0,327, -3,54,0,327,3, -55,0,327,3,56, -0,327,3,57,0, -327,3,65,0,327, -3,66,0,327,3, -67,0,327,3,68, -0,327,3,69,0, -327,3,70,0,327, -3,71,0,327,3, -72,0,327,3,73, -0,327,3,74,0, -327,3,75,0,327, -3,76,0,327,3, -77,0,327,3,78, -0,327,3,79,0, -327,3,80,0,327, -3,81,0,327,3, -82,0,327,3,83, -0,327,3,84,0, -327,3,85,0,327, -3,86,0,327,3, -87,0,327,3,88, -0,327,3,89,0, -327,3,90,0,327, -3,95,0,327,3, -97,0,327,3,98, -0,327,3,99,0, -327,3,100,0,327, -3,101,0,327,3, -102,0,327,3,103, -0,327,3,104,0, -327,3,105,0,327, -3,106,0,327,3, -107,0,327,3,108, -0,327,534,11,1, -829,0,330,1,-1, -3,102,0,327,3, -103,0,327,3,104, -0,327,3,105,0, -327,3,106,0,327, -3,107,0,327,3, -108,0,327,535,11, -1,829,0,330,1, --1,3,119,0,327, -3,120,0,327,3, -121,0,327,3,122, -0,327,3,48,0, -327,3,49,0,327, -3,50,0,327,3, -51,0,327,3,52, -0,327,3,53,0, -327,3,54,0,327, -3,55,0,327,3, -56,0,327,3,57, -0,327,3,65,0, -327,3,66,0,327, -3,67,0,327,3, -68,0,327,3,69, -0,327,3,70,0, -327,3,71,0,327, -3,72,0,327,3, -73,0,327,3,74, -0,327,3,75,0, -327,3,76,0,327, -3,77,0,327,3, -78,0,327,3,79, -0,327,3,80,0, -327,3,81,0,327, -3,82,0,327,3, -83,0,327,3,84, -0,327,3,85,0, -327,3,86,0,327, -3,87,0,327,3, -88,0,327,3,89, -0,327,3,90,0, -327,3,95,0,327, -3,97,0,327,3, -98,0,327,3,99, -0,327,3,100,0, -327,3,101,0,327, -3,102,0,327,3, -103,0,327,3,104, -0,327,3,105,0, -327,3,106,0,327, -3,107,0,327,3, -108,0,327,536,11, -1,829,0,330,1, --1,3,115,0,327, -3,116,0,327,3, -117,0,327,3,118, -0,327,3,119,0, -327,3,120,0,327, -3,121,0,327,3, -122,0,327,3,48, -0,327,3,49,0, -327,3,50,0,327, -3,51,0,327,3, -52,0,327,3,53, -0,327,3,54,0, -327,3,55,0,327, -3,56,0,327,3, -57,0,327,3,65, -0,327,3,66,0, -327,3,67,0,327, -3,68,0,327,3, -69,0,327,3,70, -0,327,3,71,0, -327,3,72,0,327, -3,73,0,327,3, -74,0,327,3,75, -0,327,3,76,0, -327,3,77,0,327, -3,78,0,327,3, -79,0,327,3,80, -0,327,3,81,0, -327,3,82,0,327, -3,83,0,327,3, -84,0,327,3,85, -0,327,3,86,0, -327,3,87,0,327, -3,88,0,327,3, -89,0,327,3,90, -0,327,3,95,0, -327,3,97,0,327, -3,98,0,327,3, -99,0,327,3,100, -0,327,3,101,0, -327,3,102,0,327, -3,103,0,327,3, -104,0,327,3,105, -0,327,3,106,0, -327,3,107,0,327, -3,108,0,327,537, -11,1,829,0,330, -1,-1,3,102,0, -327,3,103,0,327, -3,104,0,327,3, -105,0,327,3,106, -0,327,3,107,0, -327,3,108,0,327, -538,11,1,829,0, -330,1,-1,3,116, -0,327,3,117,0, -327,3,118,0,327, -3,119,0,327,3, -120,0,327,3,121, -0,327,3,122,0, -327,3,48,0,327, -3,49,0,327,3, -50,0,327,3,51, -0,327,3,52,0, -327,3,53,0,327, -3,54,0,327,3, -55,0,327,3,56, -0,327,3,57,0, -327,3,65,0,327, -3,66,0,327,3, -67,0,327,3,68, -0,327,3,69,0, -327,3,70,0,327, -3,71,0,327,3, -72,0,327,3,73, -0,327,3,74,0, -327,3,75,0,327, -3,76,0,327,3, -77,0,327,3,78, -0,327,3,79,0, -327,3,80,0,327, -3,81,0,327,3, -82,0,327,3,83, -0,327,3,84,0, -327,3,85,0,327, -3,86,0,327,3, -87,0,327,3,88, -0,327,3,89,0, -327,3,90,0,327, -3,95,0,327,3, -97,0,327,3,98, -0,327,3,99,0, -327,3,100,0,327, -3,101,0,327,3, -102,0,327,3,103, -0,327,3,104,0, -327,3,105,0,327, -3,106,0,327,3, -107,0,327,3,108, -0,327,539,11,1, -829,0,330,1,-1, -3,98,0,327,3, -99,0,327,3,100, -0,327,3,101,0, -327,3,102,0,327, -3,103,0,327,3, -104,0,327,3,105, -0,327,3,106,0, -327,3,107,0,327, -3,108,0,327,540, -11,1,829,0,330, -1,-1,3,117,0, -327,3,118,0,327, -3,119,0,327,3, -120,0,327,3,121, -0,327,3,122,0, -327,3,48,0,327, -3,49,0,327,3, -50,0,327,3,51, -0,327,3,52,0, -327,3,53,0,327, -3,54,0,327,3, -55,0,327,3,56, -0,327,3,57,0, -327,3,65,0,327, -3,66,0,327,3, -67,0,327,3,68, -0,327,3,69,0, -327,3,70,0,327, -3,71,0,327,3, -72,0,327,3,73, -0,327,3,74,0, -327,3,75,0,327, -3,76,0,327,3, -77,0,327,3,78, -0,327,3,79,0, -327,3,80,0,327, -3,81,0,327,3, -82,0,327,3,83, -0,327,3,84,0, -327,3,85,0,327, -3,86,0,327,3, -87,0,327,3,88, -0,327,3,89,0, -327,3,90,0,327, -3,95,0,327,3, -97,0,327,3,98, -0,327,3,99,0, -327,3,100,0,327, -3,101,0,327,3, -102,0,327,3,103, -0,327,3,104,0, -327,3,105,0,327, -3,106,0,327,3, -107,0,327,3,108, -0,327,541,11,1, -829,0,330,1,-1, -3,98,0,327,3, -99,0,327,3,100, -0,327,3,101,0, -542,12,1,27515,543, -5,63,3,109,0, -327,3,110,0,327, -3,111,0,327,3, -112,0,327,3,113, -0,327,3,114,0, -327,3,115,0,327, -3,116,0,327,3, -117,0,327,3,118, -0,327,3,119,0, -327,3,120,0,327, -3,121,0,327,3, -122,0,327,3,48, -0,327,3,49,0, -327,3,50,0,327, -3,51,0,327,3, -52,0,327,3,53, -0,327,3,54,0, -327,3,55,0,327, -3,56,0,327,3, -57,0,327,3,65, -0,327,3,66,0, -327,3,67,0,327, -3,68,0,327,3, -69,0,327,3,70, -0,327,3,71,0, -327,3,72,0,327, -3,73,0,327,3, -74,0,327,3,75, -0,327,3,76,0, -327,3,77,0,327, -3,78,0,327,3, -79,0,327,3,80, -0,327,3,81,0, -327,3,82,0,327, -3,83,0,327,3, -84,0,327,3,85, -0,327,3,86,0, -327,3,87,0,327, -3,88,0,327,3, -89,0,327,3,90, -0,327,3,95,0, -327,3,97,0,327, -3,98,0,327,3, -99,0,327,3,100, -0,327,3,101,0, -327,3,102,0,544, -12,1,27563,545,5, -63,3,109,0,327, -3,110,0,327,3, -111,0,327,3,112, -0,327,3,113,0, -327,3,114,0,327, -3,115,0,327,3, -116,0,327,3,117, -0,327,3,118,0, -327,3,119,0,327, -3,120,0,327,3, -121,0,327,3,122, -0,327,3,48,0, -327,3,49,0,327, -3,50,0,327,3, -51,0,327,3,52, -0,327,3,53,0, -327,3,54,0,327, -3,55,0,327,3, -56,0,327,3,57, -0,327,3,65,0, -327,3,66,0,327, -3,67,0,327,3, -68,0,327,3,69, -0,327,3,70,0, -327,3,71,0,327, -3,72,0,327,3, -73,0,327,3,74, -0,327,3,75,0, -327,3,76,0,327, -3,77,0,327,3, -78,0,327,3,79, -0,327,3,80,0, -327,3,81,0,327, -3,82,0,327,3, -83,0,327,3,84, -0,327,3,85,0, -327,3,86,0,327, -3,87,0,327,3, -88,0,327,3,89, -0,327,3,90,0, -327,3,95,0,327, -3,97,0,546,12, -1,27606,547,5,63, -3,109,0,327,3, -110,0,327,3,111, -0,327,3,112,0, -327,3,113,0,327, -3,114,0,327,3, -115,0,327,3,116, -0,327,3,117,0, -548,12,1,27642,549, -5,63,3,109,0, -327,3,110,0,327, -3,111,0,327,3, -112,0,327,3,113, -0,327,3,114,0, -327,3,115,0,327, -3,116,0,327,3, -117,0,327,3,118, -0,327,3,119,0, -327,3,120,0,327, -3,121,0,327,3, -122,0,327,3,48, -0,327,3,49,0, -327,3,50,0,327, -3,51,0,327,3, -52,0,327,3,53, -0,327,3,54,0, -327,3,55,0,327, -3,56,0,327,3, -57,0,327,3,65, -0,327,3,66,0, -327,3,67,0,327, -3,68,0,327,3, -69,0,327,3,70, -0,327,3,71,0, -327,3,72,0,327, -3,73,0,327,3, -74,0,327,3,75, -0,327,3,76,0, -327,3,77,0,327, -3,78,0,327,3, -79,0,327,3,80, -0,327,3,81,0, -327,3,82,0,327, -3,83,0,327,3, -84,0,327,3,85, -0,327,3,86,0, -327,3,87,0,327, -3,88,0,327,3, -89,0,327,3,90, -0,327,3,95,0, -327,3,97,0,327, -3,98,0,327,3, -99,0,327,3,100, -0,327,3,101,0, -327,3,102,0,327, -3,103,0,327,3, -104,0,327,3,105, -0,327,3,106,0, -327,3,107,0,327, -3,108,0,550,12, -1,27696,551,5,63, -3,109,0,327,3, -110,0,327,3,111, -0,327,3,112,0, -327,3,113,0,327, -3,114,0,327,3, -115,0,327,3,116, -0,552,12,1,27731, -553,5,63,3,109, -0,327,3,110,0, -327,3,111,0,327, -3,112,0,327,3, -113,0,327,3,114, -0,327,3,115,0, -327,3,116,0,327, -3,117,0,327,3, -118,0,327,3,119, -0,327,3,120,0, -327,3,121,0,327, -3,122,0,327,3, -48,0,327,3,49, -0,327,3,50,0, -327,3,51,0,327, -3,52,0,327,3, -53,0,327,3,54, -0,327,3,55,0, -327,3,56,0,327, -3,57,0,327,3, -65,0,327,3,66, -0,327,3,67,0, -327,3,68,0,327, -3,69,0,327,3, -70,0,327,3,71, -0,327,3,72,0, -327,3,73,0,327, -3,74,0,327,3, -75,0,327,3,76, -0,327,3,77,0, -327,3,78,0,327, -3,79,0,327,3, -80,0,327,3,81, -0,327,3,82,0, -327,3,83,0,327, -3,84,0,327,3, -85,0,327,3,86, -0,327,3,87,0, -327,3,88,0,327, -3,89,0,327,3, -90,0,327,3,95, -0,327,3,97,0, -327,3,98,0,327, -3,99,0,327,3, -100,0,327,3,101, -0,327,3,102,0, -327,3,103,0,327, -3,104,0,327,3, -105,0,327,3,106, -0,327,3,107,0, -327,3,108,0,327, -554,11,1,245,0, -555,4,26,68,0, -69,0,70,0,65, -0,85,0,76,0, -84,0,95,0,83, -0,84,0,65,0, -84,0,69,0,1, --1,3,117,0,327, -3,118,0,327,3, -119,0,327,3,120, -0,327,3,121,0, -327,3,122,0,327, -3,48,0,327,3, -49,0,327,3,50, -0,327,3,51,0, -327,3,52,0,327, -3,53,0,327,3, -54,0,327,3,55, -0,327,3,56,0, -327,3,57,0,327, -3,65,0,327,3, -66,0,327,3,67, -0,327,3,68,0, -327,3,69,0,327, -3,70,0,327,3, -71,0,327,3,72, -0,327,3,73,0, -327,3,74,0,327, -3,75,0,327,3, -76,0,327,3,77, -0,327,3,78,0, -327,3,79,0,327, -3,80,0,327,3, -81,0,327,3,82, -0,327,3,83,0, -327,3,84,0,327, -3,85,0,327,3, -86,0,327,3,87, -0,327,3,88,0, -327,3,89,0,327, -3,90,0,327,3, -95,0,327,3,97, -0,327,3,98,0, -327,3,99,0,327, -3,100,0,327,3, -101,0,327,3,102, -0,327,3,103,0, -327,3,104,0,327, -3,105,0,327,3, -106,0,327,3,107, -0,327,3,108,0, -327,556,11,1,829, -0,330,1,-1,557, -11,1,829,0,330, -1,-1,3,118,0, -327,3,119,0,327, -3,120,0,327,3, -121,0,327,3,122, -0,327,3,48,0, -327,3,49,0,327, -3,50,0,327,3, -51,0,327,3,52, -0,327,3,53,0, -327,3,54,0,327, -3,55,0,327,3, -56,0,327,3,57, -0,327,3,65,0, -327,3,66,0,327, -3,67,0,327,3, -68,0,327,3,69, -0,327,3,70,0, -327,3,71,0,327, -3,72,0,327,3, -73,0,327,3,74, -0,327,3,75,0, -327,3,76,0,327, -3,77,0,327,3, -78,0,327,3,79, -0,327,3,80,0, -327,3,81,0,327, -3,82,0,327,3, -83,0,327,3,84, -0,327,3,85,0, -327,3,86,0,327, -3,87,0,327,3, -88,0,327,3,89, -0,327,3,90,0, -327,3,95,0,327, -3,97,0,327,3, -98,0,327,3,99, -0,327,3,100,0, -327,3,101,0,327, -3,102,0,327,3, -103,0,327,3,104, -0,327,3,105,0, -327,3,106,0,327, -3,107,0,327,3, -108,0,327,558,11, -1,829,0,330,1, --1,3,98,0,327, -3,99,0,327,3, -100,0,327,3,101, -0,327,3,102,0, -327,3,103,0,327, -3,104,0,327,3, -105,0,327,3,106, -0,327,3,107,0, -327,3,108,0,327, -559,11,1,829,0, -330,1,-1,3,103, -0,327,3,104,0, -327,3,105,0,327, -3,106,0,327,3, -107,0,327,3,108, -0,327,560,11,1, -829,0,330,1,-1, -3,102,0,327,3, -103,0,327,3,104, -0,327,3,105,0, -327,3,106,0,327, -3,107,0,327,3, -108,0,327,561,11, -1,829,0,330,1, --1,3,101,0,562, -12,1,28309,563,5, -63,3,109,0,564, -12,1,28337,565,5, -63,3,109,0,327, -3,110,0,327,3, -111,0,327,3,112, -0,327,3,113,0, -327,3,114,0,327, -3,115,0,327,3, -116,0,327,3,117, -0,327,3,118,0, -327,3,119,0,327, -3,120,0,327,3, -121,0,327,3,122, -0,327,3,48,0, -327,3,49,0,327, -3,50,0,327,3, -51,0,327,3,52, -0,327,3,53,0, -327,3,54,0,327, -3,55,0,327,3, -56,0,327,3,57, -0,327,3,65,0, -327,3,66,0,327, -3,67,0,327,3, -68,0,327,3,69, -0,327,3,70,0, -327,3,71,0,327, -3,72,0,327,3, -73,0,327,3,74, -0,327,3,75,0, -327,3,76,0,327, -3,77,0,327,3, -78,0,327,3,79, -0,327,3,80,0, -327,3,81,0,327, -3,82,0,327,3, -83,0,327,3,84, -0,327,3,85,0, -327,3,86,0,327, -3,87,0,327,3, -88,0,327,3,89, -0,327,3,90,0, -327,3,95,0,327, -3,97,0,566,12, -1,28380,567,5,63, -3,109,0,327,3, -110,0,327,3,111, -0,327,3,112,0, -327,3,113,0,327, -3,114,0,327,3, -115,0,327,3,116, -0,327,3,117,0, -327,3,118,0,327, -3,119,0,327,3, -120,0,327,3,121, -0,327,3,122,0, -327,3,48,0,327, -3,49,0,327,3, -50,0,327,3,51, -0,327,3,52,0, -327,3,53,0,327, -3,54,0,327,3, -55,0,327,3,56, -0,327,3,57,0, -327,3,65,0,327, -3,66,0,327,3, -67,0,327,3,68, -0,327,3,69,0, -327,3,70,0,327, -3,71,0,327,3, -72,0,327,3,73, -0,327,3,74,0, -327,3,75,0,327, -3,76,0,327,3, -77,0,327,3,78, -0,327,3,79,0, -327,3,80,0,327, -3,81,0,327,3, -82,0,327,3,83, -0,327,3,84,0, -327,3,85,0,327, -3,86,0,327,3, -87,0,327,3,88, -0,327,3,89,0, -327,3,90,0,327, -3,95,0,327,3, -97,0,327,3,98, -0,327,3,99,0, -327,3,100,0,327, -3,101,0,327,3, -102,0,327,3,103, -0,327,3,104,0, -327,3,105,0,568, -12,1,28431,569,5, -63,3,109,0,327, -3,110,0,327,3, -111,0,327,3,112, -0,327,3,113,0, -327,3,114,0,327, -3,115,0,327,3, -116,0,327,3,117, -0,327,3,118,0, -327,3,119,0,327, -3,120,0,327,3, -121,0,327,3,122, -0,327,3,48,0, -327,3,49,0,327, -3,50,0,327,3, -51,0,327,3,52, -0,327,3,53,0, -327,3,54,0,327, -3,55,0,327,3, -56,0,327,3,57, -0,327,3,65,0, -327,3,66,0,327, -3,67,0,327,3, -68,0,327,3,69, -0,327,3,70,0, -327,3,71,0,327, -3,72,0,327,3, -73,0,327,3,74, -0,327,3,75,0, -327,3,76,0,327, -3,77,0,327,3, -78,0,327,3,79, -0,327,3,80,0, -327,3,81,0,327, -3,82,0,327,3, -83,0,327,3,84, -0,327,3,85,0, -327,3,86,0,327, -3,87,0,327,3, -88,0,327,3,89, -0,327,3,90,0, -327,3,95,0,327, -3,97,0,327,3, -98,0,327,3,99, -0,327,3,100,0, -327,3,101,0,327, -3,102,0,327,3, -103,0,327,3,104, -0,327,3,105,0, -327,3,106,0,327, -3,107,0,327,3, -108,0,570,12,1, -28485,571,5,63,3, -109,0,327,3,110, -0,327,3,111,0, -327,3,112,0,327, -3,113,0,327,3, -114,0,327,3,115, -0,327,3,116,0, -327,3,117,0,327, -3,118,0,327,3, -119,0,327,3,120, -0,327,3,121,0, -327,3,122,0,327, -3,48,0,327,3, -49,0,327,3,50, -0,327,3,51,0, -327,3,52,0,327, -3,53,0,327,3, -54,0,327,3,55, -0,327,3,56,0, -327,3,57,0,327, -3,65,0,327,3, -66,0,327,3,67, -0,327,3,68,0, -327,3,69,0,327, -3,70,0,327,3, -71,0,327,3,72, -0,327,3,73,0, -327,3,74,0,327, -3,75,0,327,3, -76,0,327,3,77, -0,327,3,78,0, -327,3,79,0,327, -3,80,0,327,3, -81,0,327,3,82, -0,327,3,83,0, -327,3,84,0,327, -3,85,0,327,3, -86,0,327,3,87, -0,327,3,88,0, -327,3,89,0,327, -3,90,0,327,3, -95,0,327,3,97, -0,327,3,98,0, -327,3,99,0,327, -3,100,0,327,3, -101,0,327,3,102, -0,327,3,103,0, -327,3,104,0,327, -3,105,0,327,3, -106,0,327,3,107, -0,327,3,108,0, -327,572,11,1,475, -0,573,4,22,69, -0,77,0,65,0, -73,0,76,0,95, -0,69,0,86,0, -69,0,78,0,84, -0,1,-1,574,11, -1,829,0,330,1, --1,3,106,0,327, -3,107,0,327,3, -108,0,327,575,11, -1,829,0,330,1, --1,3,98,0,327, -3,99,0,327,3, -100,0,327,3,101, -0,327,3,102,0, -327,3,103,0,327, -3,104,0,327,3, -105,0,327,3,106, -0,327,3,107,0, -327,3,108,0,327, -576,11,1,829,0, -330,1,-1,3,110, -0,327,3,111,0, -327,3,112,0,327, -3,113,0,327,3, -114,0,327,3,115, -0,327,3,116,0, -327,3,117,0,327, -3,118,0,327,3, -119,0,327,3,120, -0,327,3,121,0, -327,3,122,0,327, -3,48,0,327,3, -49,0,327,3,50, -0,327,3,51,0, -327,3,52,0,327, -3,53,0,327,3, -54,0,327,3,55, -0,327,3,56,0, -327,3,57,0,327, -3,65,0,327,3, -66,0,327,3,67, -0,327,3,68,0, -327,3,69,0,327, -3,70,0,327,3, -71,0,327,3,72, -0,327,3,73,0, -327,3,74,0,327, -3,75,0,327,3, -76,0,327,3,77, -0,327,3,78,0, -327,3,79,0,327, -3,80,0,327,3, -81,0,327,3,82, -0,327,3,83,0, -327,3,84,0,327, -3,85,0,327,3, -86,0,327,3,87, -0,327,3,88,0, -327,3,89,0,327, -3,90,0,327,3, -95,0,327,3,97, -0,327,3,98,0, -327,3,99,0,327, -3,100,0,327,3, -101,0,327,3,102, -0,327,3,103,0, -327,3,104,0,327, -3,105,0,327,3, -106,0,327,3,107, -0,327,3,108,0, -577,12,1,28843,578, -5,63,3,109,0, -327,3,110,0,327, -3,111,0,327,3, -112,0,327,3,113, -0,327,3,114,0, -327,3,115,0,579, -12,1,28877,580,5, -63,3,109,0,327, -3,110,0,327,3, -111,0,327,3,112, -0,327,3,113,0, -327,3,114,0,327, -3,115,0,327,3, -116,0,327,3,117, -0,327,3,118,0, -327,3,119,0,327, -3,120,0,327,3, -121,0,327,3,122, -0,327,3,48,0, -327,3,49,0,327, -3,50,0,327,3, -51,0,327,3,52, -0,327,3,53,0, -327,3,54,0,327, -3,55,0,327,3, -56,0,327,3,57, -0,327,3,65,0, -327,3,66,0,327, -3,67,0,327,3, -68,0,327,3,69, -0,327,3,70,0, -327,3,71,0,327, -3,72,0,327,3, -73,0,327,3,74, -0,327,3,75,0, -327,3,76,0,327, -3,77,0,327,3, -78,0,327,3,79, -0,327,3,80,0, -327,3,81,0,327, -3,82,0,327,3, -83,0,327,3,84, -0,327,3,85,0, -327,3,86,0,327, -3,87,0,327,3, -88,0,327,3,89, -0,327,3,90,0, -327,3,95,0,327, -3,97,0,327,3, -98,0,327,3,99, -0,327,3,100,0, -327,3,101,0,581, -12,1,28924,582,5, -63,3,109,0,327, -3,110,0,327,3, -111,0,327,3,112, -0,327,3,113,0, -327,3,114,0,327, -3,115,0,327,3, -116,0,327,3,117, -0,327,3,118,0, -327,3,119,0,327, -3,120,0,327,3, -121,0,327,3,122, -0,327,3,48,0, -327,3,49,0,327, -3,50,0,327,3, -51,0,327,3,52, -0,327,3,53,0, -327,3,54,0,327, -3,55,0,327,3, -56,0,327,3,57, -0,327,3,65,0, -327,3,66,0,327, -3,67,0,327,3, -68,0,327,3,69, -0,327,3,70,0, -327,3,71,0,327, -3,72,0,327,3, -73,0,327,3,74, -0,327,3,75,0, -327,3,76,0,327, -3,77,0,327,3, -78,0,327,3,79, -0,327,3,80,0, -327,3,81,0,327, -3,82,0,327,3, -83,0,327,3,84, -0,327,3,85,0, -327,3,86,0,327, -3,87,0,327,3, -88,0,327,3,89, -0,327,3,90,0, -327,3,95,0,327, -3,97,0,327,3, -98,0,327,3,99, -0,327,3,100,0, -327,3,101,0,327, -3,102,0,327,3, -103,0,327,3,104, -0,327,3,105,0, -327,3,106,0,327, -3,107,0,327,3, -108,0,327,583,11, -1,215,0,584,4, -8,69,0,76,0, -83,0,69,0,1, --1,3,102,0,327, -3,103,0,327,3, -104,0,327,3,105, -0,327,3,106,0, -327,3,107,0,327, -3,108,0,327,585, -11,1,829,0,330, -1,-1,3,116,0, -327,3,117,0,327, -3,118,0,327,3, -119,0,327,3,120, -0,327,3,121,0, -327,3,122,0,327, -3,48,0,327,3, -49,0,327,3,50, -0,327,3,51,0, -327,3,52,0,327, -3,53,0,327,3, -54,0,327,3,55, -0,327,3,56,0, -327,3,57,0,327, -3,65,0,327,3, -66,0,327,3,67, -0,327,3,68,0, -327,3,69,0,327, -3,70,0,327,3, -71,0,327,3,72, -0,327,3,73,0, -327,3,74,0,327, -3,75,0,327,3, -76,0,327,3,77, -0,327,3,78,0, -327,3,79,0,327, -3,80,0,327,3, -81,0,327,3,82, -0,327,3,83,0, -327,3,84,0,327, -3,85,0,327,3, -86,0,327,3,87, -0,327,3,88,0, -327,3,89,0,327, -3,90,0,327,3, -95,0,327,3,97, -0,327,3,98,0, -327,3,99,0,327, -3,100,0,327,3, -101,0,327,3,102, -0,327,3,103,0, -327,3,104,0,327, -3,105,0,327,3, -106,0,327,3,107, -0,327,3,108,0, -327,586,11,1,829, -0,330,1,-1,587, -11,1,829,0,330, -1,-1,3,102,0, -588,12,1,29270,589, -5,63,3,109,0, -327,3,110,0,327, -3,111,0,590,12, -1,29300,591,5,63, -3,109,0,327,3, -110,0,327,3,111, -0,327,3,112,0, -327,3,113,0,327, -3,114,0,592,12, -1,29333,593,5,63, -3,109,0,327,3, -110,0,327,3,111, -0,327,3,112,0, -327,3,113,0,327, -3,114,0,327,3, -115,0,327,3,116, -0,327,3,117,0, -327,3,118,0,327, -3,119,0,327,3, -120,0,327,3,121, -0,327,3,122,0, -327,3,48,0,327, -3,49,0,327,3, -50,0,327,3,51, -0,327,3,52,0, -327,3,53,0,327, -3,54,0,327,3, -55,0,327,3,56, -0,327,3,57,0, -327,3,65,0,327, -3,66,0,327,3, -67,0,327,3,68, -0,327,3,69,0, -327,3,70,0,327, -3,71,0,327,3, -72,0,327,3,73, -0,327,3,74,0, -327,3,75,0,327, -3,76,0,327,3, -77,0,327,3,78, -0,327,3,79,0, -327,3,80,0,327, -3,81,0,327,3, -82,0,327,3,83, -0,327,3,84,0, -327,3,85,0,327, -3,86,0,327,3, -87,0,327,3,88, -0,327,3,89,0, -327,3,90,0,327, -3,95,0,327,3, -97,0,327,3,98, -0,327,3,99,0, -327,3,100,0,327, -3,101,0,327,3, -102,0,327,3,103, -0,327,3,104,0, -327,3,105,0,327, -3,106,0,327,3, -107,0,327,3,108, -0,327,594,11,1, -238,0,595,4,6, -70,0,79,0,82, -0,1,-1,3,115, -0,327,3,116,0, -327,3,117,0,327, -3,118,0,327,3, -119,0,327,3,120, -0,327,3,121,0, -327,3,122,0,327, -3,48,0,327,3, -49,0,327,3,50, -0,327,3,51,0, -327,3,52,0,327, -3,53,0,327,3, -54,0,327,3,55, -0,327,3,56,0, -327,3,57,0,327, -3,65,0,327,3, -66,0,327,3,67, -0,327,3,68,0, -327,3,69,0,327, -3,70,0,327,3, -71,0,327,3,72, -0,327,3,73,0, -327,3,74,0,327, -3,75,0,327,3, -76,0,327,3,77, -0,327,3,78,0, -327,3,79,0,327, -3,80,0,327,3, -81,0,327,3,82, -0,327,3,83,0, -327,3,84,0,327, -3,85,0,327,3, -86,0,327,3,87, -0,327,3,88,0, -327,3,89,0,327, -3,90,0,327,3, -95,0,327,3,97, -0,327,3,98,0, -327,3,99,0,327, -3,100,0,327,3, -101,0,327,3,102, -0,327,3,103,0, -327,3,104,0,327, -3,105,0,327,3, -106,0,327,3,107, -0,327,3,108,0, -327,596,11,1,829, -0,330,1,-1,3, -112,0,327,3,113, -0,327,3,114,0, -327,3,115,0,327, -3,116,0,327,3, -117,0,327,3,118, -0,327,3,119,0, -327,3,120,0,327, -3,121,0,327,3, -122,0,327,3,48, -0,327,3,49,0, -327,3,50,0,327, -3,51,0,327,3, -52,0,327,3,53, -0,327,3,54,0, -327,3,55,0,327, -3,56,0,327,3, -57,0,327,3,65, -0,327,3,66,0, -327,3,67,0,327, -3,68,0,327,3, -69,0,327,3,70, -0,327,3,71,0, -327,3,72,0,327, -3,73,0,327,3, -74,0,327,3,75, -0,327,3,76,0, -327,3,77,0,327, -3,78,0,327,3, -79,0,327,3,80, -0,327,3,81,0, -327,3,82,0,327, -3,83,0,327,3, -84,0,327,3,85, -0,327,3,86,0, -327,3,87,0,327, -3,88,0,327,3, -89,0,327,3,90, -0,327,3,95,0, -327,3,97,0,327, -3,98,0,327,3, -99,0,327,3,100, -0,327,3,101,0, -327,3,102,0,327, -3,103,0,327,3, -104,0,327,3,105, -0,327,3,106,0, -327,3,107,0,327, -3,108,0,597,12, -1,29564,598,5,63, -3,109,0,327,3, -110,0,327,3,111, -0,599,12,1,29594, -600,5,63,3,109, -0,327,3,110,0, -327,3,111,0,327, -3,112,0,327,3, -113,0,327,3,114, -0,327,3,115,0, -327,3,116,0,327, -3,117,0,327,3, -118,0,327,3,119, -0,327,3,120,0, -327,3,121,0,327, -3,122,0,327,3, -48,0,327,3,49, -0,327,3,50,0, -327,3,51,0,327, -3,52,0,327,3, -53,0,327,3,54, -0,327,3,55,0, -327,3,56,0,327, -3,57,0,327,3, -65,0,327,3,66, -0,327,3,67,0, -327,3,68,0,327, -3,69,0,327,3, -70,0,327,3,71, -0,327,3,72,0, -327,3,73,0,327, -3,74,0,327,3, -75,0,327,3,76, -0,327,3,77,0, -327,3,78,0,327, -3,79,0,327,3, -80,0,327,3,81, -0,327,3,82,0, -327,3,83,0,327, -3,84,0,327,3, -85,0,327,3,86, -0,327,3,87,0, -327,3,88,0,327, -3,89,0,327,3, -90,0,327,3,95, -0,327,3,97,0, -601,12,1,29637,602, -5,63,3,109,0, -327,3,110,0,327, -3,111,0,327,3, -112,0,327,3,113, -0,327,3,114,0, -327,3,115,0,327, -3,116,0,603,12, -1,29672,604,5,63, -3,109,0,327,3, -110,0,327,3,111, -0,327,3,112,0, -327,3,113,0,327, -3,114,0,327,3, -115,0,327,3,116, -0,327,3,117,0, -327,3,118,0,327, -3,119,0,327,3, -120,0,327,3,121, -0,327,3,122,0, -327,3,48,0,327, -3,49,0,327,3, -50,0,327,3,51, -0,327,3,52,0, -327,3,53,0,327, -3,54,0,327,3, -55,0,327,3,56, -0,327,3,57,0, -327,3,65,0,327, -3,66,0,327,3, -67,0,327,3,68, -0,327,3,69,0, -327,3,70,0,327, -3,71,0,327,3, -72,0,327,3,73, -0,327,3,74,0, -327,3,75,0,327, -3,76,0,327,3, -77,0,327,3,78, -0,327,3,79,0, -327,3,80,0,327, -3,81,0,327,3, -82,0,327,3,83, -0,327,3,84,0, -327,3,85,0,327, -3,86,0,327,3, -87,0,327,3,88, -0,327,3,89,0, -327,3,90,0,327, -3,95,0,327,3, -97,0,327,3,98, -0,327,3,99,0, -327,3,100,0,327, -3,101,0,327,3, -102,0,327,3,103, -0,327,3,104,0, -327,3,105,0,327, -3,106,0,327,3, -107,0,327,3,108, -0,327,605,11,1, -294,0,606,4,20, -70,0,76,0,79, -0,65,0,84,0, -95,0,84,0,89, -0,80,0,69,0, -1,-1,3,117,0, -327,3,118,0,327, -3,119,0,327,3, -120,0,327,3,121, -0,327,3,122,0, -327,3,48,0,327, -3,49,0,327,3, -50,0,327,3,51, -0,327,3,52,0, -327,3,53,0,327, -3,54,0,327,3, -55,0,327,3,56, -0,327,3,57,0, -327,3,65,0,327, -3,66,0,327,3, -67,0,327,3,68, -0,327,3,69,0, -327,3,70,0,327, -3,71,0,327,3, -72,0,327,3,73, -0,327,3,74,0, -327,3,75,0,327, -3,76,0,327,3, -77,0,327,3,78, -0,327,3,79,0, -327,3,80,0,327, -3,81,0,327,3, -82,0,327,3,83, -0,327,3,84,0, -327,3,85,0,327, -3,86,0,327,3, -87,0,327,3,88, -0,327,3,89,0, -327,3,90,0,327, -3,95,0,327,3, -97,0,327,3,98, -0,327,3,99,0, -327,3,100,0,327, -3,101,0,327,3, -102,0,327,3,103, -0,327,3,104,0, -327,3,105,0,327, -3,106,0,327,3, -107,0,327,3,108, -0,327,607,11,1, -829,0,330,1,-1, -3,98,0,327,3, -99,0,327,3,100, -0,327,3,101,0, -327,3,102,0,327, -3,103,0,327,3, -104,0,327,3,105, -0,327,3,106,0, -327,3,107,0,327, -3,108,0,327,608, -11,1,829,0,330, -1,-1,3,112,0, -327,3,113,0,327, -3,114,0,327,3, -115,0,327,3,116, -0,327,3,117,0, -327,3,118,0,327, -3,119,0,327,3, -120,0,327,3,121, -0,327,3,122,0, -327,3,48,0,327, -3,49,0,327,3, -50,0,327,3,51, -0,327,3,52,0, -327,3,53,0,327, -3,54,0,327,3, -55,0,327,3,56, -0,327,3,57,0, -327,3,65,0,327, -3,66,0,327,3, -67,0,327,3,68, -0,327,3,69,0, -327,3,70,0,327, -3,71,0,327,3, -72,0,327,3,73, -0,327,3,74,0, -327,3,75,0,327, -3,76,0,327,3, -77,0,327,3,78, -0,327,3,79,0, -327,3,80,0,327, -3,81,0,327,3, -82,0,327,3,83, -0,327,3,84,0, -327,3,85,0,327, -3,86,0,327,3, -87,0,327,3,88, -0,327,3,89,0, -327,3,90,0,327, -3,95,0,327,3, -97,0,327,3,98, -0,327,3,99,0, -327,3,100,0,327, -3,101,0,327,3, -102,0,327,3,103, -0,327,3,104,0, -327,3,105,0,327, -3,106,0,327,3, -107,0,327,3,108, -0,327,609,11,1, -829,0,330,1,-1, -610,11,1,829,0, -330,1,-1,3,103, -0,325,3,104,0, -611,12,1,30112,612, -5,63,3,109,0, -327,3,110,0,327, -3,111,0,327,3, -112,0,327,3,113, -0,327,3,114,0, -327,3,115,0,327, -3,116,0,613,12, -1,30147,614,5,63, -3,109,0,327,3, -110,0,327,3,111, -0,327,3,112,0, -327,3,113,0,327, -3,114,0,327,3, -115,0,327,3,116, -0,615,12,1,30182, -616,5,63,3,109, -0,327,3,110,0, -327,3,111,0,327, -3,112,0,617,12, -1,30213,618,5,63, -3,109,0,327,3, -110,0,327,3,111, -0,327,3,112,0, -327,3,113,0,327, -3,114,0,327,3, -115,0,327,3,116, -0,327,3,117,0, -327,3,118,0,327, -3,119,0,327,3, -120,0,327,3,121, -0,327,3,122,0, -327,3,48,0,327, -3,49,0,327,3, -50,0,327,3,51, -0,327,3,52,0, -327,3,53,0,327, -3,54,0,327,3, -55,0,327,3,56, -0,327,3,57,0, -327,3,65,0,327, -3,66,0,327,3, -67,0,327,3,68, -0,327,3,69,0, -327,3,70,0,327, -3,71,0,327,3, -72,0,327,3,73, -0,327,3,74,0, -327,3,75,0,327, -3,76,0,327,3, -77,0,327,3,78, -0,327,3,79,0, -327,3,80,0,327, -3,81,0,327,3, -82,0,327,3,83, -0,327,3,84,0, -327,3,85,0,327, -3,86,0,327,3, -87,0,327,3,88, -0,327,3,89,0, -327,3,90,0,327, -3,95,0,619,12, -1,30299,620,5,63, -3,109,0,327,3, -110,0,327,3,111, -0,327,3,112,0, -327,3,113,0,327, -3,114,0,621,12, -1,30332,622,5,63, -3,109,0,327,3, -110,0,327,3,111, -0,327,3,112,0, -327,3,113,0,327, -3,114,0,327,3, -115,0,327,3,116, -0,327,3,117,0, -327,3,118,0,327, -3,119,0,327,3, -120,0,327,3,121, -0,327,3,122,0, -327,3,48,0,327, -3,49,0,327,3, -50,0,327,3,51, -0,327,3,52,0, -327,3,53,0,327, -3,54,0,327,3, -55,0,327,3,56, -0,327,3,57,0, -327,3,65,0,327, -3,66,0,327,3, -67,0,327,3,68, -0,327,3,69,0, -327,3,70,0,327, -3,71,0,327,3, -72,0,327,3,73, -0,327,3,74,0, -327,3,75,0,327, -3,76,0,327,3, -77,0,327,3,78, -0,327,3,79,0, -327,3,80,0,327, -3,81,0,327,3, -82,0,327,3,83, -0,327,3,84,0, -327,3,85,0,327, -3,86,0,327,3, -87,0,327,3,88, -0,327,3,89,0, -327,3,90,0,327, -3,95,0,327,3, -97,0,327,3,98, -0,327,3,99,0, -327,3,100,0,327, -3,101,0,623,12, -1,30379,624,5,63, -3,109,0,327,3, -110,0,327,3,111, -0,327,3,112,0, -327,3,113,0,327, -3,114,0,327,3, -115,0,625,12,1, -30413,626,5,63,3, -109,0,327,3,110, -0,327,3,111,0, -327,3,112,0,627, -12,1,30444,628,5, -63,3,109,0,327, -3,110,0,327,3, -111,0,629,12,1, -30474,630,5,63,3, -109,0,327,3,110, -0,631,12,1,30503, -632,5,63,3,109, -0,327,3,110,0, -327,3,111,0,327, -3,112,0,327,3, -113,0,327,3,114, -0,327,3,115,0, -633,12,1,30537,634, -5,63,3,109,0, -327,3,110,0,327, -3,111,0,327,3, -112,0,327,3,113, -0,327,3,114,0, -327,3,115,0,327, -3,116,0,327,3, -117,0,327,3,118, -0,327,3,119,0, -327,3,120,0,327, -3,121,0,327,3, -122,0,327,3,48, -0,327,3,49,0, -327,3,50,0,327, -3,51,0,327,3, -52,0,327,3,53, -0,327,3,54,0, -327,3,55,0,327, -3,56,0,327,3, -57,0,327,3,65, -0,327,3,66,0, -327,3,67,0,327, -3,68,0,327,3, -69,0,327,3,70, -0,327,3,71,0, -327,3,72,0,327, -3,73,0,327,3, -74,0,327,3,75, -0,327,3,76,0, -327,3,77,0,327, -3,78,0,327,3, -79,0,327,3,80, -0,327,3,81,0, -327,3,82,0,327, -3,83,0,327,3, -84,0,327,3,85, -0,327,3,86,0, -327,3,87,0,327, -3,88,0,327,3, -89,0,327,3,90, -0,327,3,95,0, -327,3,97,0,327, -3,98,0,327,3, -99,0,327,3,100, -0,327,3,101,0, -635,12,1,30584,636, -5,63,3,109,0, -327,3,110,0,327, -3,111,0,327,3, -112,0,327,3,113, -0,327,3,114,0, -327,3,115,0,327, -3,116,0,327,3, -117,0,327,3,118, -0,327,3,119,0, -327,3,120,0,327, -3,121,0,327,3, -122,0,327,3,48, -0,327,3,49,0, -327,3,50,0,327, -3,51,0,327,3, -52,0,327,3,53, -0,327,3,54,0, -327,3,55,0,327, -3,56,0,327,3, -57,0,327,3,65, -0,327,3,66,0, -327,3,67,0,327, -3,68,0,327,3, -69,0,327,3,70, -0,327,3,71,0, -327,3,72,0,327, -3,73,0,327,3, -74,0,327,3,75, -0,327,3,76,0, -327,3,77,0,327, -3,78,0,327,3, -79,0,327,3,80, -0,327,3,81,0, -327,3,82,0,327, -3,83,0,327,3, -84,0,327,3,85, -0,327,3,86,0, -327,3,87,0,327, -3,88,0,327,3, -89,0,327,3,90, -0,327,3,95,0, -327,3,97,0,327, -3,98,0,327,3, -99,0,327,3,100, -0,327,3,101,0, -327,3,102,0,327, -3,103,0,327,3, -104,0,327,3,105, -0,327,3,106,0, -327,3,107,0,327, -3,108,0,327,637, -11,1,484,0,638, -4,38,72,0,84, -0,84,0,80,0, -95,0,82,0,69, -0,83,0,80,0, -79,0,78,0,83, -0,69,0,95,0, -69,0,86,0,69, -0,78,0,84,0, -1,-1,3,102,0, -327,3,103,0,327, -3,104,0,327,3, -105,0,327,3,106, -0,327,3,107,0, -327,3,108,0,327, -639,11,1,829,0, -330,1,-1,3,116, -0,327,3,117,0, -327,3,118,0,327, -3,119,0,327,3, -120,0,327,3,121, -0,327,3,122,0, -327,3,48,0,327, -3,49,0,327,3, -50,0,327,3,51, -0,327,3,52,0, -327,3,53,0,327, -3,54,0,327,3, -55,0,327,3,56, -0,327,3,57,0, -327,3,65,0,327, -3,66,0,327,3, -67,0,327,3,68, -0,327,3,69,0, -327,3,70,0,327, -3,71,0,327,3, -72,0,327,3,73, -0,327,3,74,0, -327,3,75,0,327, -3,76,0,327,3, -77,0,327,3,78, -0,327,3,79,0, -327,3,80,0,327, -3,81,0,327,3, -82,0,327,3,83, -0,327,3,84,0, -327,3,85,0,327, -3,86,0,327,3, -87,0,327,3,88, -0,327,3,89,0, -327,3,90,0,327, -3,95,0,327,3, -97,0,327,3,98, -0,327,3,99,0, -327,3,100,0,327, -3,101,0,327,3, -102,0,327,3,103, -0,327,3,104,0, -327,3,105,0,327, -3,106,0,327,3, -107,0,327,3,108, -0,327,640,11,1, -829,0,330,1,-1, -3,111,0,327,3, -112,0,327,3,113, -0,327,3,114,0, -327,3,115,0,327, -3,116,0,327,3, -117,0,327,3,118, -0,327,3,119,0, -327,3,120,0,327, -3,121,0,327,3, -122,0,327,3,48, -0,327,3,49,0, -327,3,50,0,327, -3,51,0,327,3, -52,0,327,3,53, -0,327,3,54,0, -327,3,55,0,327, -3,56,0,327,3, -57,0,327,3,65, -0,327,3,66,0, -327,3,67,0,327, -3,68,0,327,3, -69,0,327,3,70, -0,327,3,71,0, -327,3,72,0,327, -3,73,0,327,3, -74,0,327,3,75, -0,327,3,76,0, -327,3,77,0,327, -3,78,0,327,3, -79,0,327,3,80, -0,327,3,81,0, -327,3,82,0,327, -3,83,0,327,3, -84,0,327,3,85, -0,327,3,86,0, -327,3,87,0,327, -3,88,0,327,3, -89,0,327,3,90, -0,327,3,95,0, -327,3,97,0,327, -3,98,0,327,3, -99,0,327,3,100, -0,327,3,101,0, -327,3,102,0,327, -3,103,0,327,3, -104,0,327,3,105, -0,327,3,106,0, -327,3,107,0,327, -3,108,0,327,641, -11,1,829,0,330, -1,-1,3,112,0, -327,3,113,0,327, -3,114,0,327,3, -115,0,327,3,116, -0,327,3,117,0, -327,3,118,0,327, -3,119,0,327,3, -120,0,327,3,121, -0,327,3,122,0, -327,3,48,0,327, -3,49,0,327,3, -50,0,327,3,51, -0,327,3,52,0, -327,3,53,0,327, -3,54,0,327,3, -55,0,327,3,56, -0,327,3,57,0, -327,3,65,0,327, -3,66,0,327,3, -67,0,327,3,68, -0,327,3,69,0, -327,3,70,0,327, -3,71,0,327,3, -72,0,327,3,73, -0,327,3,74,0, -327,3,75,0,327, -3,76,0,327,3, -77,0,327,3,78, -0,327,3,79,0, -327,3,80,0,327, -3,81,0,327,3, -82,0,327,3,83, -0,327,3,84,0, -327,3,85,0,327, -3,86,0,327,3, -87,0,327,3,88, -0,327,3,89,0, -327,3,90,0,327, -3,95,0,327,3, -97,0,327,3,98, -0,327,3,99,0, -327,3,100,0,327, -3,101,0,327,3, -102,0,327,3,103, -0,327,3,104,0, -327,3,105,0,327, -3,106,0,327,3, -107,0,327,3,108, -0,327,642,11,1, -829,0,330,1,-1, -3,113,0,327,3, -114,0,327,3,115, -0,327,3,116,0, -327,3,117,0,327, -3,118,0,327,3, -119,0,327,3,120, -0,327,3,121,0, -327,3,122,0,327, -3,48,0,327,3, -49,0,327,3,50, -0,327,3,51,0, -327,3,52,0,327, -3,53,0,327,3, -54,0,327,3,55, -0,327,3,56,0, -327,3,57,0,327, -3,65,0,327,3, -66,0,327,3,67, -0,327,3,68,0, -327,3,69,0,327, -3,70,0,327,3, -71,0,327,3,72, -0,327,3,73,0, -327,3,74,0,327, -3,75,0,327,3, -76,0,327,3,77, -0,327,3,78,0, -327,3,79,0,327, -3,80,0,327,3, -81,0,327,3,82, -0,327,3,83,0, -327,3,84,0,327, -3,85,0,327,3, -86,0,327,3,87, -0,327,3,88,0, -327,3,89,0,327, -3,90,0,327,3, -95,0,327,3,97, -0,327,3,98,0, -327,3,99,0,327, -3,100,0,327,3, -101,0,327,3,102, -0,327,3,103,0, -327,3,104,0,327, -3,105,0,327,3, -106,0,327,3,107, -0,327,3,108,0, -327,643,11,1,829, -0,330,1,-1,3, -116,0,327,3,117, -0,327,3,118,0, -327,3,119,0,327, -3,120,0,327,3, -121,0,327,3,122, -0,327,3,48,0, -327,3,49,0,327, -3,50,0,327,3, -51,0,327,3,52, -0,327,3,53,0, -327,3,54,0,327, -3,55,0,327,3, -56,0,327,3,57, -0,327,3,65,0, -327,3,66,0,327, -3,67,0,327,3, -68,0,327,3,69, -0,327,3,70,0, -327,3,71,0,327, -3,72,0,327,3, -73,0,327,3,74, -0,327,3,75,0, -327,3,76,0,327, -3,77,0,327,3, -78,0,327,3,79, -0,327,3,80,0, -327,3,81,0,327, -3,82,0,327,3, -83,0,327,3,84, -0,327,3,85,0, -327,3,86,0,327, -3,87,0,327,3, -88,0,327,3,89, -0,327,3,90,0, -327,3,95,0,327, -3,97,0,327,3, -98,0,327,3,99, -0,327,3,100,0, -327,3,101,0,327, -3,102,0,327,3, -103,0,327,3,104, -0,327,3,105,0, -327,3,106,0,327, -3,107,0,327,3, -108,0,327,644,11, -1,829,0,330,1, --1,3,102,0,327, -3,103,0,327,3, -104,0,327,3,105, -0,327,3,106,0, -327,3,107,0,327, -3,108,0,327,645, -11,1,829,0,330, -1,-1,3,115,0, -327,3,116,0,327, -3,117,0,327,3, -118,0,327,3,119, -0,327,3,120,0, -327,3,121,0,327, -3,122,0,327,3, -48,0,327,3,49, -0,327,3,50,0, -327,3,51,0,327, -3,52,0,327,3, -53,0,327,3,54, -0,327,3,55,0, -327,3,56,0,327, -3,57,0,327,3, -65,0,327,3,66, -0,327,3,67,0, -327,3,68,0,327, -3,69,0,327,3, -70,0,327,3,71, -0,327,3,72,0, -327,3,73,0,327, -3,74,0,327,3, -75,0,327,3,76, -0,327,3,77,0, -327,3,78,0,327, -3,79,0,327,3, -80,0,327,3,81, -0,327,3,82,0, -327,3,83,0,327, -3,84,0,327,3, -85,0,327,3,86, -0,327,3,87,0, -327,3,88,0,327, -3,89,0,327,3, -90,0,327,3,95, -0,327,3,97,0, -327,3,98,0,327, -3,99,0,327,3, -100,0,327,3,101, -0,327,3,102,0, -327,3,103,0,327, -3,104,0,327,3, -105,0,327,3,106, -0,327,3,107,0, -327,3,108,0,327, -646,11,1,829,0, -330,1,-1,3,97, -0,327,3,98,0, -327,3,99,0,327, -3,100,0,327,3, -101,0,327,3,102, -0,327,3,103,0, -327,3,104,0,327, -3,105,0,327,3, -106,0,327,3,107, -0,327,3,108,0, -327,647,11,1,829, -0,330,1,-1,3, -113,0,327,3,114, -0,327,3,115,0, -327,3,116,0,327, -3,117,0,327,3, -118,0,327,3,119, -0,327,3,120,0, -327,3,121,0,327, -3,122,0,327,3, -48,0,327,3,49, -0,327,3,50,0, -327,3,51,0,327, -3,52,0,327,3, -53,0,327,3,54, -0,327,3,55,0, -327,3,56,0,327, -3,57,0,327,3, -65,0,327,3,66, -0,327,3,67,0, -327,3,68,0,327, -3,69,0,327,3, -70,0,327,3,71, -0,327,3,72,0, -327,3,73,0,327, -3,74,0,327,3, -75,0,327,3,76, -0,327,3,77,0, -327,3,78,0,327, -3,79,0,327,3, -80,0,327,3,81, -0,327,3,82,0, -327,3,83,0,327, -3,84,0,327,3, -85,0,327,3,86, -0,327,3,87,0, -327,3,88,0,327, -3,89,0,327,3, -90,0,327,3,95, -0,327,3,97,0, -327,3,98,0,327, -3,99,0,327,3, -100,0,327,3,101, -0,327,3,102,0, -327,3,103,0,327, -3,104,0,327,3, -105,0,327,3,106, -0,327,3,107,0, -327,3,108,0,327, -648,11,1,829,0, -330,1,-1,3,117, -0,327,3,118,0, -327,3,119,0,327, -3,120,0,327,3, -121,0,327,3,122, -0,327,3,48,0, -327,3,49,0,327, -3,50,0,327,3, -51,0,327,3,52, -0,327,3,53,0, -327,3,54,0,327, -3,55,0,327,3, -56,0,327,3,57, -0,327,3,65,0, -327,3,66,0,327, -3,67,0,327,3, -68,0,327,3,69, -0,327,3,70,0, -327,3,71,0,327, -3,72,0,327,3, -73,0,327,3,74, -0,327,3,75,0, -327,3,76,0,327, -3,77,0,327,3, -78,0,327,3,79, -0,327,3,80,0, -327,3,81,0,327, -3,82,0,327,3, -83,0,327,3,84, -0,327,3,85,0, -327,3,86,0,327, -3,87,0,327,3, -88,0,327,3,89, -0,327,3,90,0, -327,3,95,0,327, -3,97,0,327,3, -98,0,327,3,99, -0,327,3,100,0, -327,3,101,0,327, -3,102,0,327,3, -103,0,327,3,104, -0,327,3,105,0, -327,3,106,0,327, -3,107,0,327,3, -108,0,327,649,11, -1,829,0,330,1, --1,3,117,0,327, -3,118,0,327,3, -119,0,327,3,120, -0,327,3,121,0, -327,3,122,0,327, -3,48,0,327,3, -49,0,327,3,50, -0,327,3,51,0, -327,3,52,0,327, -3,53,0,327,3, -54,0,327,3,55, -0,327,3,56,0, -327,3,57,0,327, -3,65,0,327,3, -66,0,327,3,67, -0,327,3,68,0, -327,3,69,0,327, -3,70,0,327,3, -71,0,327,3,72, -0,327,3,73,0, -327,3,74,0,327, -3,75,0,327,3, -76,0,327,3,77, -0,327,3,78,0, -327,3,79,0,327, -3,80,0,327,3, -81,0,327,3,82, -0,327,3,83,0, -327,3,84,0,327, -3,85,0,327,3, -86,0,327,3,87, -0,327,3,88,0, -327,3,89,0,327, -3,90,0,327,3, -95,0,327,3,97, -0,327,3,98,0, -327,3,99,0,327, -3,100,0,327,3, -101,0,327,3,102, -0,327,3,103,0, -327,3,104,0,327, -3,105,0,327,3, -106,0,327,3,107, -0,327,3,108,0, -327,650,11,1,829, -0,330,1,-1,3, -105,0,651,12,1, -31673,652,5,63,3, -109,0,327,3,110, -0,653,12,1,31702, -654,5,63,3,109, -0,327,3,110,0, -327,3,111,0,327, -3,112,0,327,3, -113,0,327,3,114, -0,327,3,115,0, -327,3,116,0,655, -12,1,31737,656,5, -63,3,109,0,327, -3,110,0,327,3, -111,0,327,3,112, -0,327,3,113,0, -327,3,114,0,327, -3,115,0,327,3, -116,0,327,3,117, -0,327,3,118,0, -327,3,119,0,327, -3,120,0,327,3, -121,0,327,3,122, -0,327,3,48,0, -327,3,49,0,327, -3,50,0,327,3, -51,0,327,3,52, -0,327,3,53,0, -327,3,54,0,327, -3,55,0,327,3, -56,0,327,3,57, -0,327,3,65,0, -327,3,66,0,327, -3,67,0,327,3, -68,0,327,3,69, -0,327,3,70,0, -327,3,71,0,327, -3,72,0,327,3, -73,0,327,3,74, -0,327,3,75,0, -327,3,76,0,327, -3,77,0,327,3, -78,0,327,3,79, -0,327,3,80,0, -327,3,81,0,327, -3,82,0,327,3, -83,0,327,3,84, -0,327,3,85,0, -327,3,86,0,327, -3,87,0,327,3, -88,0,327,3,89, -0,327,3,90,0, -327,3,95,0,327, -3,97,0,327,3, -98,0,327,3,99, -0,327,3,100,0, -327,3,101,0,657, -12,1,31784,658,5, -63,3,109,0,327, -3,110,0,327,3, -111,0,327,3,112, -0,327,3,113,0, -327,3,114,0,327, -3,115,0,327,3, -116,0,327,3,117, -0,327,3,118,0, -327,3,119,0,327, -3,120,0,327,3, -121,0,327,3,122, -0,327,3,48,0, -327,3,49,0,327, -3,50,0,327,3, -51,0,327,3,52, -0,327,3,53,0, -327,3,54,0,327, -3,55,0,327,3, -56,0,327,3,57, -0,327,3,65,0, -327,3,66,0,327, -3,67,0,327,3, -68,0,327,3,69, -0,327,3,70,0, -327,3,71,0,327, -3,72,0,327,3, -73,0,327,3,74, -0,327,3,75,0, -327,3,76,0,327, -3,77,0,327,3, -78,0,327,3,79, -0,327,3,80,0, -327,3,81,0,327, -3,82,0,327,3, -83,0,327,3,84, -0,327,3,85,0, -327,3,86,0,327, -3,87,0,327,3, -88,0,327,3,89, -0,327,3,90,0, -327,3,95,0,327, -3,97,0,327,3, -98,0,327,3,99, -0,327,3,100,0, -327,3,101,0,327, -3,102,0,327,3, -103,0,659,12,1, -31833,660,5,63,3, -109,0,327,3,110, -0,327,3,111,0, -327,3,112,0,327, -3,113,0,327,3, -114,0,327,3,115, -0,327,3,116,0, -327,3,117,0,327, -3,118,0,327,3, -119,0,327,3,120, -0,327,3,121,0, -327,3,122,0,327, -3,48,0,327,3, -49,0,327,3,50, -0,327,3,51,0, -327,3,52,0,327, -3,53,0,327,3, -54,0,327,3,55, -0,327,3,56,0, -327,3,57,0,327, -3,65,0,327,3, -66,0,327,3,67, -0,327,3,68,0, -327,3,69,0,327, -3,70,0,327,3, -71,0,327,3,72, -0,327,3,73,0, -327,3,74,0,327, -3,75,0,327,3, -76,0,327,3,77, -0,327,3,78,0, -327,3,79,0,327, -3,80,0,327,3, -81,0,327,3,82, -0,327,3,83,0, -327,3,84,0,327, -3,85,0,327,3, -86,0,327,3,87, -0,327,3,88,0, -327,3,89,0,327, -3,90,0,327,3, -95,0,327,3,97, -0,327,3,98,0, -327,3,99,0,327, -3,100,0,327,3, -101,0,661,12,1, -31880,662,5,63,3, -109,0,327,3,110, -0,327,3,111,0, -327,3,112,0,327, -3,113,0,327,3, -114,0,663,12,1, -31913,664,5,63,3, -109,0,327,3,110, -0,327,3,111,0, -327,3,112,0,327, -3,113,0,327,3, -114,0,327,3,115, -0,327,3,116,0, -327,3,117,0,327, -3,118,0,327,3, -119,0,327,3,120, -0,327,3,121,0, -327,3,122,0,327, -3,48,0,327,3, -49,0,327,3,50, -0,327,3,51,0, -327,3,52,0,327, -3,53,0,327,3, -54,0,327,3,55, -0,327,3,56,0, -327,3,57,0,327, -3,65,0,327,3, -66,0,327,3,67, -0,327,3,68,0, -327,3,69,0,327, -3,70,0,327,3, -71,0,327,3,72, -0,327,3,73,0, -327,3,74,0,327, -3,75,0,327,3, -76,0,327,3,77, -0,327,3,78,0, -327,3,79,0,327, -3,80,0,327,3, -81,0,327,3,82, -0,327,3,83,0, -327,3,84,0,327, -3,85,0,327,3, -86,0,327,3,87, -0,327,3,88,0, -327,3,89,0,327, -3,90,0,327,3, -95,0,327,3,97, -0,327,3,98,0, -327,3,99,0,327, -3,100,0,327,3, -101,0,327,3,102, -0,327,3,103,0, -327,3,104,0,327, -3,105,0,327,3, -106,0,327,3,107, -0,327,3,108,0, -327,665,11,1,283, -0,666,4,24,73, -0,78,0,84,0, -69,0,71,0,69, -0,82,0,95,0, -84,0,89,0,80, -0,69,0,1,-1, -3,115,0,327,3, -116,0,327,3,117, -0,327,3,118,0, -327,3,119,0,327, -3,120,0,327,3, -121,0,327,3,122, -0,327,3,48,0, -327,3,49,0,327, -3,50,0,327,3, -51,0,327,3,52, -0,327,3,53,0, -327,3,54,0,327, -3,55,0,327,3, -56,0,327,3,57, -0,327,3,65,0, -327,3,66,0,327, -3,67,0,327,3, -68,0,327,3,69, -0,327,3,70,0, -327,3,71,0,327, -3,72,0,327,3, -73,0,327,3,74, -0,327,3,75,0, -327,3,76,0,327, -3,77,0,327,3, -78,0,327,3,79, -0,327,3,80,0, -327,3,81,0,327, -3,82,0,327,3, -83,0,327,3,84, -0,327,3,85,0, -327,3,86,0,327, -3,87,0,327,3, -88,0,327,3,89, -0,327,3,90,0, -327,3,95,0,327, -3,97,0,327,3, -98,0,327,3,99, -0,327,3,100,0, -327,3,101,0,327, -3,102,0,327,3, -103,0,327,3,104, -0,327,3,105,0, -327,3,106,0,327, -3,107,0,327,3, -108,0,327,667,11, -1,829,0,330,1, --1,3,102,0,327, -3,103,0,327,3, -104,0,327,3,105, -0,327,3,106,0, -327,3,107,0,327, -3,108,0,327,668, -11,1,829,0,330, -1,-1,3,104,0, -327,3,105,0,327, -3,106,0,327,3, -107,0,327,3,108, -0,327,669,11,1, -829,0,330,1,-1, -3,102,0,327,3, -103,0,327,3,104, -0,327,3,105,0, -327,3,106,0,327, -3,107,0,327,3, -108,0,327,670,11, -1,829,0,330,1, --1,3,117,0,327, -3,118,0,327,3, -119,0,327,3,120, -0,327,3,121,0, -327,3,122,0,327, -3,48,0,327,3, -49,0,327,3,50, -0,327,3,51,0, -327,3,52,0,327, -3,53,0,327,3, -54,0,327,3,55, -0,327,3,56,0, -327,3,57,0,327, -3,65,0,327,3, -66,0,327,3,67, -0,327,3,68,0, -327,3,69,0,327, -3,70,0,327,3, -71,0,327,3,72, -0,327,3,73,0, -327,3,74,0,327, -3,75,0,327,3, -76,0,327,3,77, -0,327,3,78,0, -327,3,79,0,327, -3,80,0,327,3, -81,0,327,3,82, -0,327,3,83,0, -327,3,84,0,327, -3,85,0,327,3, -86,0,327,3,87, -0,327,3,88,0, -327,3,89,0,327, -3,90,0,327,3, -95,0,327,3,97, -0,327,3,98,0, -327,3,99,0,327, -3,100,0,327,3, -101,0,327,3,102, -0,327,3,103,0, -327,3,104,0,327, -3,105,0,327,3, -106,0,327,3,107, -0,327,3,108,0, -327,671,11,1,829, -0,330,1,-1,3, -111,0,327,3,112, -0,327,3,113,0, -327,3,114,0,327, -3,115,0,327,3, -116,0,327,3,117, -0,327,3,118,0, -327,3,119,0,327, -3,120,0,327,3, -121,0,327,3,122, -0,327,3,48,0, -327,3,49,0,327, -3,50,0,327,3, -51,0,327,3,52, -0,327,3,53,0, -327,3,54,0,327, -3,55,0,327,3, -56,0,327,3,57, -0,327,3,65,0, -327,3,66,0,327, -3,67,0,327,3, -68,0,327,3,69, -0,327,3,70,0, -327,3,71,0,327, -3,72,0,327,3, -73,0,327,3,74, -0,327,3,75,0, -327,3,76,0,327, -3,77,0,327,3, -78,0,327,3,79, -0,327,3,80,0, -327,3,81,0,327, -3,82,0,327,3, -83,0,327,3,84, -0,327,3,85,0, -327,3,86,0,327, -3,87,0,327,3, -88,0,327,3,89, -0,327,3,90,0, -327,3,95,0,327, -3,97,0,327,3, -98,0,327,3,99, -0,327,3,100,0, -327,3,101,0,327, -3,102,0,672,12, -1,32441,673,5,63, -3,109,0,327,3, -110,0,327,3,111, -0,327,3,112,0, -327,3,113,0,327, -3,114,0,327,3, -115,0,327,3,116, -0,327,3,117,0, -327,3,118,0,327, -3,119,0,327,3, -120,0,327,3,121, -0,327,3,122,0, -327,3,48,0,327, -3,49,0,327,3, -50,0,327,3,51, -0,327,3,52,0, -327,3,53,0,327, -3,54,0,327,3, -55,0,327,3,56, -0,327,3,57,0, -327,3,65,0,327, -3,66,0,327,3, -67,0,327,3,68, -0,327,3,69,0, -327,3,70,0,327, -3,71,0,327,3, -72,0,327,3,73, -0,327,3,74,0, -327,3,75,0,327, -3,76,0,327,3, -77,0,327,3,78, -0,327,3,79,0, -327,3,80,0,327, -3,81,0,327,3, -82,0,327,3,83, -0,327,3,84,0, -327,3,85,0,327, -3,86,0,327,3, -87,0,327,3,88, -0,327,3,89,0, -327,3,90,0,327, -3,95,0,327,3, -97,0,327,3,98, -0,327,3,99,0, -327,3,100,0,327, -3,101,0,327,3, -102,0,327,3,103, -0,327,3,104,0, -327,3,105,0,327, -3,106,0,327,3, -107,0,327,3,108, -0,327,674,11,1, -209,0,675,4,4, -73,0,70,0,1, --1,3,103,0,327, -3,104,0,327,3, -105,0,327,3,106, -0,327,3,107,0, -327,3,108,0,327, -676,11,1,829,0, -330,1,-1,3,106, -0,677,12,1,32634, -678,5,63,3,109, -0,327,3,110,0, -327,3,111,0,327, -3,112,0,327,3, -113,0,327,3,114, -0,327,3,115,0, -327,3,116,0,327, -3,117,0,679,12, -1,32670,680,5,63, -3,109,0,681,12, -1,32698,682,5,63, -3,109,0,327,3, -110,0,327,3,111, -0,327,3,112,0, -683,12,1,32729,684, -5,63,3,109,0, -327,3,110,0,327, -3,111,0,327,3, -112,0,327,3,113, -0,327,3,114,0, -327,3,115,0,327, -3,116,0,327,3, -117,0,327,3,118, -0,327,3,119,0, -327,3,120,0,327, -3,121,0,327,3, -122,0,327,3,48, -0,327,3,49,0, -327,3,50,0,327, -3,51,0,327,3, -52,0,327,3,53, -0,327,3,54,0, -327,3,55,0,327, -3,56,0,327,3, -57,0,327,3,65, -0,327,3,66,0, -327,3,67,0,327, -3,68,0,327,3, -69,0,327,3,70, -0,327,3,71,0, -327,3,72,0,327, -3,73,0,327,3, -74,0,327,3,75, -0,327,3,76,0, -327,3,77,0,327, -3,78,0,327,3, -79,0,327,3,80, -0,327,3,81,0, -327,3,82,0,327, -3,83,0,327,3, -84,0,327,3,85, -0,327,3,86,0, -327,3,87,0,327, -3,88,0,327,3, -89,0,327,3,90, -0,327,3,95,0, -327,3,97,0,327, -3,98,0,327,3, -99,0,327,3,100, -0,327,3,101,0, -327,3,102,0,327, -3,103,0,327,3, -104,0,327,3,105, -0,327,3,106,0, -327,3,107,0,327, -3,108,0,327,685, -11,1,265,0,686, -4,8,74,0,85, -0,77,0,80,0, -1,-1,3,113,0, -327,3,114,0,327, -3,115,0,327,3, -116,0,327,3,117, -0,327,3,118,0, -327,3,119,0,327, -3,120,0,327,3, -121,0,327,3,122, -0,327,3,48,0, -327,3,49,0,327, -3,50,0,327,3, -51,0,327,3,52, -0,327,3,53,0, -327,3,54,0,327, -3,55,0,327,3, -56,0,327,3,57, -0,327,3,65,0, -327,3,66,0,327, -3,67,0,327,3, -68,0,327,3,69, -0,327,3,70,0, -327,3,71,0,327, -3,72,0,327,3, -73,0,327,3,74, -0,327,3,75,0, -327,3,76,0,327, -3,77,0,327,3, -78,0,327,3,79, -0,327,3,80,0, -327,3,81,0,327, -3,82,0,327,3, -83,0,327,3,84, -0,327,3,85,0, -327,3,86,0,327, -3,87,0,327,3, -88,0,327,3,89, -0,327,3,90,0, -327,3,95,0,327, -3,97,0,327,3, -98,0,327,3,99, -0,327,3,100,0, -327,3,101,0,327, -3,102,0,327,3, -103,0,327,3,104, -0,327,3,105,0, -327,3,106,0,327, -3,107,0,327,3, -108,0,327,687,11, -1,829,0,330,1, --1,3,110,0,327, -3,111,0,327,3, -112,0,327,3,113, -0,327,3,114,0, -327,3,115,0,327, -3,116,0,327,3, -117,0,327,3,118, -0,327,3,119,0, -327,3,120,0,327, -3,121,0,327,3, -122,0,327,3,48, -0,327,3,49,0, -327,3,50,0,327, -3,51,0,327,3, -52,0,327,3,53, -0,327,3,54,0, -327,3,55,0,327, -3,56,0,327,3, -57,0,327,3,65, -0,327,3,66,0, -327,3,67,0,327, -3,68,0,327,3, -69,0,327,3,70, -0,327,3,71,0, -327,3,72,0,327, -3,73,0,327,3, -74,0,327,3,75, -0,327,3,76,0, -327,3,77,0,327, -3,78,0,327,3, -79,0,327,3,80, -0,327,3,81,0, -327,3,82,0,327, -3,83,0,327,3, -84,0,327,3,85, -0,327,3,86,0, -327,3,87,0,327, -3,88,0,327,3, -89,0,327,3,90, -0,327,3,95,0, -327,3,97,0,327, -3,98,0,327,3, -99,0,327,3,100, -0,327,3,101,0, -327,3,102,0,327, -3,103,0,327,3, -104,0,327,3,105, -0,327,3,106,0, -327,3,107,0,327, -3,108,0,327,688, -11,1,829,0,330, -1,-1,3,118,0, -327,3,119,0,327, -3,120,0,327,3, -121,0,327,3,122, -0,327,3,48,0, -327,3,49,0,327, -3,50,0,327,3, -51,0,327,3,52, -0,327,3,53,0, -327,3,54,0,327, -3,55,0,327,3, -56,0,327,3,57, -0,327,3,65,0, -327,3,66,0,327, -3,67,0,327,3, -68,0,327,3,69, -0,327,3,70,0, -327,3,71,0,327, -3,72,0,327,3, -73,0,327,3,74, -0,327,3,75,0, -327,3,76,0,327, -3,77,0,327,3, -78,0,327,3,79, -0,327,3,80,0, -327,3,81,0,327, -3,82,0,327,3, -83,0,327,3,84, -0,327,3,85,0, -327,3,86,0,327, -3,87,0,327,3, -88,0,327,3,89, -0,327,3,90,0, -327,3,95,0,327, -3,97,0,327,3, -98,0,327,3,99, -0,327,3,100,0, -327,3,101,0,327, -3,102,0,327,3, -103,0,327,3,104, -0,327,3,105,0, -327,3,106,0,327, -3,107,0,327,3, -108,0,327,689,11, -1,829,0,330,1, --1,3,107,0,690, -12,1,33115,691,5, -63,3,109,0,327, -3,110,0,327,3, -111,0,327,3,112, -0,327,3,113,0, -327,3,114,0,327, -3,115,0,327,3, -116,0,327,3,117, -0,327,3,118,0, -327,3,119,0,327, -3,120,0,327,3, -121,0,327,3,122, -0,327,3,48,0, -327,3,49,0,327, -3,50,0,327,3, -51,0,327,3,52, -0,327,3,53,0, -327,3,54,0,327, -3,55,0,327,3, -56,0,327,3,57, -0,327,3,65,0, -327,3,66,0,327, -3,67,0,327,3, -68,0,327,3,69, -0,327,3,70,0, -327,3,71,0,327, -3,72,0,327,3, -73,0,327,3,74, -0,327,3,75,0, -327,3,76,0,327, -3,77,0,327,3, -78,0,327,3,79, -0,327,3,80,0, -327,3,81,0,327, -3,82,0,327,3, -83,0,327,3,84, -0,327,3,85,0, -327,3,86,0,327, -3,87,0,327,3, -88,0,327,3,89, -0,327,3,90,0, -327,3,95,0,327, -3,97,0,327,3, -98,0,327,3,99, -0,327,3,100,0, -327,3,101,0,692, -12,1,33162,693,5, -63,3,109,0,327, -3,110,0,327,3, -111,0,327,3,112, -0,327,3,113,0, -327,3,114,0,327, -3,115,0,327,3, -116,0,327,3,117, -0,327,3,118,0, -327,3,119,0,327, -3,120,0,327,3, -121,0,694,12,1, -33202,695,5,63,3, -109,0,327,3,110, -0,327,3,111,0, -327,3,112,0,327, -3,113,0,327,3, -114,0,327,3,115, -0,327,3,116,0, -327,3,117,0,327, -3,118,0,327,3, -119,0,327,3,120, -0,327,3,121,0, -327,3,122,0,327, -3,48,0,327,3, -49,0,327,3,50, -0,327,3,51,0, -327,3,52,0,327, -3,53,0,327,3, -54,0,327,3,55, -0,327,3,56,0, -327,3,57,0,327, -3,65,0,327,3, -66,0,327,3,67, -0,327,3,68,0, -327,3,69,0,327, -3,70,0,327,3, -71,0,327,3,72, -0,327,3,73,0, -327,3,74,0,327, -3,75,0,327,3, -76,0,327,3,77, -0,327,3,78,0, -327,3,79,0,327, -3,80,0,327,3, -81,0,327,3,82, -0,327,3,83,0, -327,3,84,0,327, -3,85,0,327,3, -86,0,327,3,87, -0,327,3,88,0, -327,3,89,0,327, -3,90,0,327,3, -95,0,327,3,97, -0,327,3,98,0, -327,3,99,0,327, -3,100,0,327,3, -101,0,327,3,102, -0,327,3,103,0, -327,3,104,0,327, -3,105,0,327,3, -106,0,327,3,107, -0,327,3,108,0, -327,696,11,1,313, -0,697,4,16,75, -0,69,0,89,0, -95,0,84,0,89, -0,80,0,69,0, -1,-1,3,122,0, -327,3,48,0,327, -3,49,0,327,3, -50,0,327,3,51, -0,327,3,52,0, -327,3,53,0,327, -3,54,0,327,3, -55,0,327,3,56, -0,327,3,57,0, -327,3,65,0,327, -3,66,0,327,3, -67,0,327,3,68, -0,327,3,69,0, -327,3,70,0,327, -3,71,0,327,3, -72,0,327,3,73, -0,327,3,74,0, -327,3,75,0,327, -3,76,0,327,3, -77,0,327,3,78, -0,327,3,79,0, -327,3,80,0,327, -3,81,0,327,3, -82,0,327,3,83, -0,327,3,84,0, -327,3,85,0,327, -3,86,0,327,3, -87,0,327,3,88, -0,327,3,89,0, -327,3,90,0,327, -3,95,0,327,3, -97,0,327,3,98, -0,327,3,99,0, -327,3,100,0,327, -3,101,0,327,3, -102,0,327,3,103, -0,327,3,104,0, -327,3,105,0,327, -3,106,0,327,3, -107,0,327,3,108, -0,327,698,11,1, -829,0,330,1,-1, -3,102,0,327,3, -103,0,327,3,104, -0,327,3,105,0, -327,3,106,0,327, -3,107,0,327,3, -108,0,327,699,11, -1,829,0,330,1, --1,3,108,0,700, -12,1,33476,701,5, -63,3,109,0,327, -3,110,0,327,3, -111,0,327,3,112, -0,327,3,113,0, -327,3,114,0,327, -3,115,0,327,3, -116,0,327,3,117, -0,327,3,118,0, -327,3,119,0,327, -3,120,0,327,3, -121,0,327,3,122, -0,327,3,48,0, -327,3,49,0,327, -3,50,0,327,3, -51,0,327,3,52, -0,327,3,53,0, -327,3,54,0,327, -3,55,0,327,3, -56,0,327,3,57, -0,327,3,65,0, -327,3,66,0,327, -3,67,0,327,3, -68,0,327,3,69, -0,327,3,70,0, -327,3,71,0,327, -3,72,0,327,3, -73,0,327,3,74, -0,327,3,75,0, -327,3,76,0,327, -3,77,0,327,3, -78,0,327,3,79, -0,327,3,80,0, -327,3,81,0,327, -3,82,0,327,3, -83,0,327,3,84, -0,327,3,85,0, -327,3,86,0,327, -3,87,0,327,3, -88,0,327,3,89, -0,327,3,90,0, -327,3,95,0,327, -3,97,0,702,12, -1,33519,703,5,63, -3,109,0,327,3, -110,0,704,12,1, -33548,705,5,63,3, -109,0,327,3,110, -0,327,3,111,0, -327,3,112,0,327, -3,113,0,327,3, -114,0,327,3,115, -0,327,3,116,0, -327,3,117,0,327, -3,118,0,327,3, -119,0,327,3,120, -0,327,3,121,0, -327,3,122,0,327, -3,48,0,327,3, -49,0,327,3,50, -0,327,3,51,0, -327,3,52,0,327, -3,53,0,327,3, -54,0,327,3,55, -0,327,3,56,0, -327,3,57,0,327, -3,65,0,327,3, -66,0,327,3,67, -0,327,3,68,0, -327,3,69,0,327, -3,70,0,327,3, -71,0,327,3,72, -0,327,3,73,0, -327,3,74,0,327, -3,75,0,327,3, -76,0,327,3,77, -0,327,3,78,0, -327,3,79,0,327, -3,80,0,327,3, -81,0,327,3,82, -0,327,3,83,0, -327,3,84,0,327, -3,85,0,327,3, -86,0,327,3,87, -0,327,3,88,0, -327,3,89,0,327, -3,90,0,327,3, -95,0,327,3,97, -0,327,3,98,0, -327,3,99,0,327, -3,100,0,706,12, -1,33594,707,5,63, -3,109,0,327,3, -110,0,327,3,111, -0,327,3,112,0, -327,3,113,0,327, -3,114,0,327,3, -115,0,327,3,116, -0,327,3,117,0, -327,3,118,0,327, -3,119,0,327,3, -120,0,327,3,121, -0,327,3,122,0, -327,3,48,0,327, -3,49,0,327,3, -50,0,327,3,51, -0,327,3,52,0, -327,3,53,0,327, -3,54,0,327,3, -55,0,327,3,56, -0,327,3,57,0, -327,3,65,0,327, -3,66,0,327,3, -67,0,327,3,68, -0,327,3,69,0, -327,3,70,0,327, -3,71,0,327,3, -72,0,327,3,73, -0,327,3,74,0, -327,3,75,0,327, -3,76,0,327,3, -77,0,327,3,78, -0,327,3,79,0, -327,3,80,0,327, -3,81,0,327,3, -82,0,327,3,83, -0,327,3,84,0, -327,3,85,0,327, -3,86,0,327,3, -87,0,327,3,88, -0,327,3,89,0, -327,3,90,0,327, -3,95,0,708,12, -1,33680,709,5,63, -3,109,0,327,3, -110,0,327,3,111, -0,327,3,112,0, -327,3,113,0,327, -3,114,0,327,3, -115,0,327,3,116, -0,327,3,117,0, -327,3,118,0,327, -3,119,0,327,3, -120,0,327,3,121, -0,327,3,122,0, -327,3,48,0,327, -3,49,0,327,3, -50,0,327,3,51, -0,327,3,52,0, -327,3,53,0,327, -3,54,0,327,3, -55,0,327,3,56, -0,327,3,57,0, -327,3,65,0,327, -3,66,0,327,3, -67,0,327,3,68, -0,327,3,69,0, -327,3,70,0,327, -3,71,0,327,3, -72,0,327,3,73, -0,327,3,74,0, -327,3,75,0,327, -3,76,0,327,3, -77,0,327,3,78, -0,327,3,79,0, -327,3,80,0,327, -3,81,0,327,3, -82,0,327,3,83, -0,327,3,84,0, -327,3,85,0,327, -3,86,0,327,3, -87,0,327,3,88, -0,327,3,89,0, -327,3,90,0,327, -3,95,0,327,3, -97,0,327,3,98, -0,327,3,99,0, -710,12,1,33725,711, -5,63,3,109,0, -327,3,110,0,327, -3,111,0,712,12, -1,33755,713,5,63, -3,109,0,327,3, -110,0,327,3,111, -0,327,3,112,0, -327,3,113,0,327, -3,114,0,327,3, -115,0,327,3,116, -0,327,3,117,0, -327,3,118,0,327, -3,119,0,327,3, -120,0,327,3,121, -0,327,3,122,0, -327,3,48,0,327, -3,49,0,327,3, -50,0,327,3,51, -0,327,3,52,0, -327,3,53,0,327, -3,54,0,327,3, -55,0,327,3,56, -0,327,3,57,0, -327,3,65,0,327, -3,66,0,327,3, -67,0,327,3,68, -0,327,3,69,0, -327,3,70,0,327, -3,71,0,327,3, -72,0,327,3,73, -0,327,3,74,0, -327,3,75,0,327, -3,76,0,327,3, -77,0,327,3,78, -0,327,3,79,0, -327,3,80,0,327, -3,81,0,327,3, -82,0,327,3,83, -0,327,3,84,0, -327,3,85,0,327, -3,86,0,327,3, -87,0,327,3,88, -0,327,3,89,0, -327,3,90,0,327, -3,95,0,327,3, -97,0,327,3,98, -0,327,3,99,0, -327,3,100,0,327, -3,101,0,327,3, -102,0,327,3,103, -0,327,3,104,0, -327,3,105,0,327, -3,106,0,327,3, -107,0,327,3,108, -0,714,12,1,33809, -715,5,63,3,109, -0,327,3,110,0, -327,3,111,0,327, -3,112,0,327,3, -113,0,327,3,114, -0,327,3,115,0, -327,3,116,0,327, -3,117,0,327,3, -118,0,327,3,119, -0,327,3,120,0, -327,3,121,0,327, -3,122,0,327,3, -48,0,327,3,49, -0,327,3,50,0, -327,3,51,0,327, -3,52,0,327,3, -53,0,327,3,54, -0,327,3,55,0, -327,3,56,0,327, -3,57,0,327,3, -65,0,327,3,66, -0,327,3,67,0, -327,3,68,0,327, -3,69,0,327,3, -70,0,327,3,71, -0,327,3,72,0, -327,3,73,0,327, -3,74,0,327,3, -75,0,327,3,76, -0,327,3,77,0, -327,3,78,0,327, -3,79,0,327,3, -80,0,327,3,81, -0,327,3,82,0, -327,3,83,0,327, -3,84,0,327,3, -85,0,327,3,86, -0,327,3,87,0, -327,3,88,0,327, -3,89,0,327,3, -90,0,327,3,95, -0,327,3,97,0, -327,3,98,0,327, -3,99,0,327,3, -100,0,327,3,101, -0,327,3,102,0, -327,3,103,0,327, -3,104,0,327,3, -105,0,327,3,106, -0,327,3,107,0, -327,3,108,0,716, -12,1,33863,717,5, -63,3,109,0,327, -3,110,0,327,3, -111,0,327,3,112, -0,327,3,113,0, -327,3,114,0,327, -3,115,0,327,3, -116,0,327,3,117, -0,327,3,118,0, -327,3,119,0,327, -3,120,0,327,3, -121,0,327,3,122, -0,327,3,48,0, -327,3,49,0,327, -3,50,0,327,3, -51,0,327,3,52, -0,327,3,53,0, -327,3,54,0,327, -3,55,0,327,3, -56,0,327,3,57, -0,327,3,65,0, -327,3,66,0,327, -3,67,0,327,3, -68,0,327,3,69, -0,327,3,70,0, -327,3,71,0,327, -3,72,0,327,3, -73,0,327,3,74, -0,327,3,75,0, -327,3,76,0,327, -3,77,0,327,3, -78,0,327,3,79, -0,327,3,80,0, -327,3,81,0,327, -3,82,0,327,3, -83,0,327,3,84, -0,327,3,85,0, -327,3,86,0,327, -3,87,0,327,3, -88,0,327,3,89, -0,327,3,90,0, -327,3,95,0,327, -3,97,0,327,3, -98,0,327,3,99, -0,327,3,100,0, -327,3,101,0,327, -3,102,0,327,3, -103,0,327,3,104, -0,327,3,105,0, -718,12,1,33914,719, -5,63,3,109,0, -327,3,110,0,327, -3,111,0,327,3, -112,0,327,3,113, -0,327,3,114,0, -327,3,115,0,720, -12,1,33948,721,5, -63,3,109,0,327, -3,110,0,327,3, -111,0,327,3,112, -0,327,3,113,0, -327,3,114,0,327, -3,115,0,327,3, -116,0,327,3,117, -0,327,3,118,0, -327,3,119,0,327, -3,120,0,327,3, -121,0,327,3,122, -0,327,3,48,0, -327,3,49,0,327, -3,50,0,327,3, -51,0,327,3,52, -0,327,3,53,0, -327,3,54,0,327, -3,55,0,327,3, -56,0,327,3,57, -0,327,3,65,0, -327,3,66,0,327, -3,67,0,327,3, -68,0,327,3,69, -0,327,3,70,0, -327,3,71,0,327, -3,72,0,327,3, -73,0,327,3,74, -0,327,3,75,0, -327,3,76,0,327, -3,77,0,327,3, -78,0,327,3,79, -0,327,3,80,0, -327,3,81,0,327, -3,82,0,327,3, -83,0,327,3,84, -0,327,3,85,0, -327,3,86,0,327, -3,87,0,327,3, -88,0,327,3,89, -0,327,3,90,0, -327,3,95,0,327, -3,97,0,327,3, -98,0,327,3,99, -0,327,3,100,0, -327,3,101,0,327, -3,102,0,327,3, -103,0,327,3,104, -0,327,3,105,0, -722,12,1,33999,723, -5,63,3,109,0, -327,3,110,0,327, -3,111,0,724,12, -1,34029,725,5,63, -3,109,0,327,3, -110,0,726,12,1, -34058,727,5,63,3, -109,0,327,3,110, -0,327,3,111,0, -327,3,112,0,327, -3,113,0,327,3, -114,0,327,3,115, -0,327,3,116,0, -327,3,117,0,327, -3,118,0,327,3, -119,0,327,3,120, -0,327,3,121,0, -327,3,122,0,327, -3,48,0,327,3, -49,0,327,3,50, -0,327,3,51,0, -327,3,52,0,327, -3,53,0,327,3, -54,0,327,3,55, -0,327,3,56,0, -327,3,57,0,327, -3,65,0,327,3, -66,0,327,3,67, -0,327,3,68,0, -327,3,69,0,327, -3,70,0,327,3, -71,0,327,3,72, -0,327,3,73,0, -327,3,74,0,327, -3,75,0,327,3, -76,0,327,3,77, -0,327,3,78,0, -327,3,79,0,327, -3,80,0,327,3, -81,0,327,3,82, -0,327,3,83,0, -327,3,84,0,327, -3,85,0,327,3, -86,0,327,3,87, -0,327,3,88,0, -327,3,89,0,327, -3,90,0,327,3, -95,0,728,12,1, -34144,729,5,63,3, -109,0,327,3,110, -0,327,3,111,0, -327,3,112,0,327, -3,113,0,327,3, -114,0,327,3,115, -0,730,12,1,34178, -731,5,63,3,109, -0,327,3,110,0, -327,3,111,0,327, -3,112,0,327,3, -113,0,327,3,114, -0,327,3,115,0, -327,3,116,0,732, -12,1,34213,733,5, -63,3,109,0,327, -3,110,0,327,3, -111,0,327,3,112, -0,327,3,113,0, -327,3,114,0,327, -3,115,0,327,3, -116,0,327,3,117, -0,327,3,118,0, -327,3,119,0,327, -3,120,0,327,3, -121,0,327,3,122, -0,327,3,48,0, -327,3,49,0,327, -3,50,0,327,3, -51,0,327,3,52, -0,327,3,53,0, -327,3,54,0,327, -3,55,0,327,3, -56,0,327,3,57, -0,327,3,65,0, -327,3,66,0,327, -3,67,0,327,3, -68,0,327,3,69, -0,327,3,70,0, -327,3,71,0,327, -3,72,0,327,3, -73,0,327,3,74, -0,327,3,75,0, -327,3,76,0,327, -3,77,0,327,3, -78,0,327,3,79, -0,327,3,80,0, -327,3,81,0,327, -3,82,0,327,3, -83,0,327,3,84, -0,327,3,85,0, -327,3,86,0,327, -3,87,0,327,3, -88,0,327,3,89, -0,327,3,90,0, -327,3,95,0,327, -3,97,0,734,12, -1,34256,735,5,63, -3,109,0,327,3, -110,0,327,3,111, -0,327,3,112,0, -327,3,113,0,327, -3,114,0,736,12, -1,34289,737,5,63, -3,109,0,327,3, -110,0,327,3,111, -0,327,3,112,0, -327,3,113,0,327, -3,114,0,327,3, -115,0,327,3,116, -0,738,12,1,34324, -739,5,63,3,109, -0,327,3,110,0, -327,3,111,0,327, -3,112,0,327,3, -113,0,327,3,114, -0,327,3,115,0, -327,3,116,0,327, -3,117,0,327,3, -118,0,327,3,119, -0,327,3,120,0, -327,3,121,0,327, -3,122,0,327,3, -48,0,327,3,49, -0,327,3,50,0, -327,3,51,0,327, -3,52,0,327,3, -53,0,327,3,54, -0,327,3,55,0, -327,3,56,0,327, -3,57,0,327,3, -65,0,327,3,66, -0,327,3,67,0, -327,3,68,0,327, -3,69,0,327,3, -70,0,327,3,71, -0,327,3,72,0, -327,3,73,0,327, -3,74,0,327,3, -75,0,327,3,76, -0,327,3,77,0, -327,3,78,0,327, -3,79,0,327,3, -80,0,327,3,81, -0,327,3,82,0, -327,3,83,0,327, -3,84,0,327,3, -85,0,327,3,86, -0,327,3,87,0, -327,3,88,0,327, -3,89,0,327,3, -90,0,327,3,95, -0,327,3,97,0, -327,3,98,0,327, -3,99,0,327,3, -100,0,327,3,101, -0,327,3,102,0, -327,3,103,0,327, -3,104,0,327,3, -105,0,327,3,106, -0,327,3,107,0, -327,3,108,0,327, -740,11,1,541,0, -741,4,52,76,0, -65,0,78,0,68, -0,95,0,67,0, -79,0,76,0,76, -0,73,0,83,0, -73,0,79,0,78, -0,95,0,83,0, -84,0,65,0,82, -0,84,0,95,0, -69,0,86,0,69, -0,78,0,84,0, -1,-1,3,117,0, -327,3,118,0,327, -3,119,0,327,3, -120,0,327,3,121, -0,327,3,122,0, -327,3,48,0,327, -3,49,0,327,3, -50,0,327,3,51, -0,327,3,52,0, -327,3,53,0,327, -3,54,0,327,3, -55,0,327,3,56, -0,327,3,57,0, -327,3,65,0,327, -3,66,0,327,3, -67,0,327,3,68, -0,327,3,69,0, -327,3,70,0,327, -3,71,0,327,3, -72,0,327,3,73, -0,327,3,74,0, -327,3,75,0,327, -3,76,0,327,3, -77,0,327,3,78, -0,327,3,79,0, -327,3,80,0,327, -3,81,0,327,3, -82,0,327,3,83, -0,327,3,84,0, -327,3,85,0,327, -3,86,0,327,3, -87,0,327,3,88, -0,327,3,89,0, -327,3,90,0,327, -3,95,0,327,3, -97,0,327,3,98, -0,327,3,99,0, -327,3,100,0,327, -3,101,0,327,3, -102,0,327,3,103, -0,327,3,104,0, -327,3,105,0,327, -3,106,0,327,3, -107,0,327,3,108, -0,327,742,11,1, -829,0,330,1,-1, -3,115,0,327,3, -116,0,327,3,117, -0,327,3,118,0, -327,3,119,0,327, -3,120,0,327,3, -121,0,327,3,122, -0,327,3,48,0, -327,3,49,0,327, -3,50,0,327,3, -51,0,327,3,52, -0,327,3,53,0, -327,3,54,0,327, -3,55,0,327,3, -56,0,327,3,57, -0,327,3,65,0, -327,3,66,0,327, -3,67,0,327,3, -68,0,327,3,69, -0,327,3,70,0, -327,3,71,0,327, -3,72,0,327,3, -73,0,327,3,74, -0,327,3,75,0, -327,3,76,0,327, -3,77,0,327,3, -78,0,327,3,79, -0,327,3,80,0, -327,3,81,0,327, -3,82,0,327,3, -83,0,327,3,84, -0,327,3,85,0, -327,3,86,0,327, -3,87,0,327,3, -88,0,327,3,89, -0,327,3,90,0, -327,3,95,0,327, -3,97,0,327,3, -98,0,327,3,99, -0,327,3,100,0, -327,3,101,0,327, -3,102,0,327,3, -103,0,327,3,104, -0,327,3,105,0, -327,3,106,0,327, -3,107,0,327,3, -108,0,327,743,11, -1,829,0,330,1, --1,3,98,0,327, -3,99,0,327,3, -100,0,327,3,101, -0,327,3,102,0, -327,3,103,0,327, -3,104,0,327,3, -105,0,327,3,106, -0,327,3,107,0, -327,3,108,0,327, -744,11,1,829,0, -330,1,-1,3,117, -0,327,3,118,0, -327,3,119,0,327, -3,120,0,327,3, -121,0,327,3,122, -0,327,3,48,0, -327,3,49,0,327, -3,50,0,327,3, -51,0,327,3,52, -0,327,3,53,0, -327,3,54,0,327, -3,55,0,327,3, -56,0,327,3,57, -0,327,3,65,0, -327,3,66,0,327, -3,67,0,327,3, -68,0,327,3,69, -0,327,3,70,0, -327,3,71,0,327, -3,72,0,327,3, -73,0,327,3,74, -0,327,3,75,0, -327,3,76,0,327, -3,77,0,327,3, -78,0,327,3,79, -0,327,3,80,0, -327,3,81,0,327, -3,82,0,327,3, -83,0,327,3,84, -0,327,3,85,0, -327,3,86,0,327, -3,87,0,327,3, -88,0,327,3,89, -0,327,3,90,0, -327,3,95,0,327, -3,97,0,327,3, -98,0,327,3,99, -0,327,3,100,0, -327,3,101,0,327, -3,102,0,327,3, -103,0,327,3,104, -0,327,3,105,0, -327,3,106,0,327, -3,107,0,327,3, -108,0,327,745,11, -1,829,0,330,1, --1,3,116,0,327, -3,117,0,327,3, -118,0,327,3,119, -0,327,3,120,0, -327,3,121,0,327, -3,122,0,327,3, -48,0,327,3,49, -0,327,3,50,0, -327,3,51,0,327, -3,52,0,327,3, -53,0,327,3,54, -0,327,3,55,0, -327,3,56,0,327, -3,57,0,327,3, -65,0,327,3,66, -0,327,3,67,0, -327,3,68,0,327, -3,69,0,327,3, -70,0,327,3,71, -0,327,3,72,0, -327,3,73,0,327, -3,74,0,327,3, -75,0,327,3,76, -0,327,3,77,0, -327,3,78,0,327, -3,79,0,327,3, -80,0,327,3,81, -0,327,3,82,0, -327,3,83,0,327, -3,84,0,327,3, -85,0,327,3,86, -0,327,3,87,0, -327,3,88,0,327, -3,89,0,327,3, -90,0,327,3,95, -0,327,3,97,0, -327,3,98,0,327, -3,99,0,327,3, -100,0,327,3,101, -0,746,12,1,34791, -747,5,63,3,109, -0,327,3,110,0, -748,12,1,34820,749, -5,63,3,109,0, -327,3,110,0,327, -3,111,0,327,3, -112,0,327,3,113, -0,327,3,114,0, -327,3,115,0,327, -3,116,0,327,3, -117,0,327,3,118, -0,327,3,119,0, -327,3,120,0,327, -3,121,0,327,3, -122,0,327,3,48, -0,327,3,49,0, -327,3,50,0,327, -3,51,0,327,3, -52,0,327,3,53, -0,327,3,54,0, -327,3,55,0,327, -3,56,0,327,3, -57,0,327,3,65, -0,327,3,66,0, -327,3,67,0,327, -3,68,0,327,3, -69,0,327,3,70, -0,327,3,71,0, -327,3,72,0,327, -3,73,0,327,3, -74,0,327,3,75, -0,327,3,76,0, -327,3,77,0,327, -3,78,0,327,3, -79,0,327,3,80, -0,327,3,81,0, -327,3,82,0,327, -3,83,0,327,3, -84,0,327,3,85, -0,327,3,86,0, -327,3,87,0,327, -3,88,0,327,3, -89,0,327,3,90, -0,327,3,95,0, -327,3,97,0,327, -3,98,0,327,3, -99,0,327,3,100, -0,750,12,1,34866, -751,5,63,3,109, -0,327,3,110,0, -327,3,111,0,327, -3,112,0,327,3, -113,0,327,3,114, -0,327,3,115,0, -327,3,116,0,327, -3,117,0,327,3, -118,0,327,3,119, -0,327,3,120,0, -327,3,121,0,327, -3,122,0,327,3, -48,0,327,3,49, -0,327,3,50,0, -327,3,51,0,327, -3,52,0,327,3, -53,0,327,3,54, -0,327,3,55,0, -327,3,56,0,327, -3,57,0,327,3, -65,0,327,3,66, -0,327,3,67,0, -327,3,68,0,327, -3,69,0,327,3, -70,0,327,3,71, -0,327,3,72,0, -327,3,73,0,327, -3,74,0,327,3, -75,0,327,3,76, -0,327,3,77,0, -327,3,78,0,327, -3,79,0,327,3, -80,0,327,3,81, -0,327,3,82,0, -327,3,83,0,327, -3,84,0,327,3, -85,0,327,3,86, -0,327,3,87,0, -327,3,88,0,327, -3,89,0,327,3, -90,0,327,3,95, -0,327,3,97,0, -327,3,98,0,327, -3,99,0,327,3, -100,0,327,3,101, -0,327,3,102,0, -327,3,103,0,327, -3,104,0,327,3, -105,0,327,3,106, -0,327,3,107,0, -327,3,108,0,327, -752,11,1,519,0, -753,4,48,76,0, -65,0,78,0,68, -0,95,0,67,0, -79,0,76,0,76, -0,73,0,83,0, -73,0,79,0,78, -0,95,0,69,0, -78,0,68,0,95, -0,69,0,86,0, -69,0,78,0,84, -0,1,-1,3,101, -0,327,3,102,0, -327,3,103,0,327, -3,104,0,327,3, -105,0,327,3,106, -0,327,3,107,0, -327,3,108,0,327, -754,11,1,829,0, -330,1,-1,3,111, -0,327,3,112,0, -327,3,113,0,327, -3,114,0,327,3, -115,0,327,3,116, -0,327,3,117,0, -327,3,118,0,327, -3,119,0,327,3, -120,0,327,3,121, -0,327,3,122,0, -327,3,48,0,327, -3,49,0,327,3, -50,0,327,3,51, -0,327,3,52,0, -327,3,53,0,327, -3,54,0,327,3, -55,0,327,3,56, -0,327,3,57,0, -327,3,65,0,327, -3,66,0,327,3, -67,0,327,3,68, -0,327,3,69,0, -327,3,70,0,327, -3,71,0,327,3, -72,0,327,3,73, -0,327,3,74,0, -327,3,75,0,327, -3,76,0,327,3, -77,0,327,3,78, -0,327,3,79,0, -327,3,80,0,327, -3,81,0,327,3, -82,0,327,3,83, -0,327,3,84,0, -327,3,85,0,327, -3,86,0,327,3, -87,0,327,3,88, -0,327,3,89,0, -327,3,90,0,327, -3,95,0,327,3, -97,0,327,3,98, -0,327,3,99,0, -327,3,100,0,327, -3,101,0,327,3, -102,0,327,3,103, -0,327,3,104,0, -327,3,105,0,327, -3,106,0,327,3, -107,0,327,3,108, -0,327,755,11,1, -829,0,330,1,-1, -3,102,0,327,3, -103,0,327,3,104, -0,327,3,105,0, -327,3,106,0,327, -3,107,0,327,3, -108,0,327,756,11, -1,829,0,330,1, --1,3,97,0,327, -3,98,0,327,3, -99,0,327,3,100, -0,327,3,101,0, -327,3,102,0,327, -3,103,0,327,3, -104,0,327,3,105, -0,327,3,106,0, -327,3,107,0,327, -3,108,0,327,757, -11,1,501,0,758, -4,40,76,0,65, -0,78,0,68,0, -95,0,67,0,79, -0,76,0,76,0, -73,0,83,0,73, -0,79,0,78,0, -95,0,69,0,86, -0,69,0,78,0, -84,0,1,-1,3, -111,0,327,3,112, -0,327,3,113,0, -327,3,114,0,327, -3,115,0,327,3, -116,0,327,3,117, -0,327,3,118,0, -327,3,119,0,327, -3,120,0,327,3, -121,0,327,3,122, -0,327,3,48,0, -327,3,49,0,327, -3,50,0,327,3, -51,0,327,3,52, -0,327,3,53,0, -327,3,54,0,327, -3,55,0,327,3, -56,0,327,3,57, -0,327,3,65,0, -327,3,66,0,327, -3,67,0,327,3, -68,0,327,3,69, -0,327,3,70,0, -327,3,71,0,327, -3,72,0,327,3, -73,0,327,3,74, -0,327,3,75,0, -327,3,76,0,327, -3,77,0,327,3, -78,0,327,3,79, -0,327,3,80,0, -327,3,81,0,327, -3,82,0,327,3, -83,0,327,3,84, -0,327,3,85,0, -327,3,86,0,327, -3,87,0,327,3, -88,0,327,3,89, -0,327,3,90,0, -327,3,95,0,327, -3,97,0,327,3, -98,0,327,3,99, -0,327,3,100,0, -327,3,101,0,327, -3,102,0,327,3, -103,0,327,3,104, -0,327,3,105,0, -327,3,106,0,327, -3,107,0,327,3, -108,0,327,759,11, -1,829,0,330,1, --1,3,112,0,327, -3,113,0,327,3, -114,0,327,3,115, -0,327,3,116,0, -327,3,117,0,327, -3,118,0,327,3, -119,0,327,3,120, -0,327,3,121,0, -327,3,122,0,327, -3,48,0,327,3, -49,0,327,3,50, -0,327,3,51,0, -327,3,52,0,327, -3,53,0,327,3, -54,0,327,3,55, -0,327,3,56,0, -327,3,57,0,327, -3,65,0,327,3, -66,0,327,3,67, -0,327,3,68,0, -327,3,69,0,327, -3,70,0,327,3, -71,0,327,3,72, -0,327,3,73,0, -327,3,74,0,327, -3,75,0,327,3, -76,0,327,3,77, -0,327,3,78,0, -327,3,79,0,327, -3,80,0,327,3, -81,0,327,3,82, -0,327,3,83,0, -327,3,84,0,327, -3,85,0,327,3, -86,0,327,3,87, -0,327,3,88,0, -327,3,89,0,327, -3,90,0,327,3, -95,0,327,3,97, -0,327,3,98,0, -327,3,99,0,327, -3,100,0,327,3, -101,0,327,3,102, -0,327,3,103,0, -327,3,104,0,327, -3,105,0,327,3, -106,0,327,3,107, -0,327,3,108,0, -327,760,11,1,829, -0,330,1,-1,3, -106,0,327,3,107, -0,327,3,108,0, -327,761,11,1,829, -0,330,1,-1,3, -116,0,327,3,117, -0,327,3,118,0, -327,3,119,0,327, -3,120,0,327,3, -121,0,327,3,122, -0,327,3,48,0, -327,3,49,0,327, -3,50,0,327,3, -51,0,327,3,52, -0,327,3,53,0, -327,3,54,0,327, -3,55,0,327,3, -56,0,327,3,57, -0,327,3,65,0, -327,3,66,0,327, -3,67,0,327,3, -68,0,327,3,69, -0,327,3,70,0, -327,3,71,0,327, -3,72,0,327,3, -73,0,327,3,74, -0,327,3,75,0, -327,3,76,0,327, -3,77,0,327,3, -78,0,327,3,79, -0,327,3,80,0, -327,3,81,0,327, -3,82,0,327,3, -83,0,327,3,84, -0,327,3,85,0, -327,3,86,0,327, -3,87,0,327,3, -88,0,327,3,89, -0,327,3,90,0, -327,3,95,0,327, -3,97,0,327,3, -98,0,327,3,99, -0,327,3,100,0, -327,3,101,0,327, -3,102,0,327,3, -103,0,327,3,104, -0,327,3,105,0, -327,3,106,0,327, -3,107,0,327,3, -108,0,327,762,11, -1,829,0,330,1, --1,3,106,0,327, -3,107,0,327,3, -108,0,327,763,11, -1,829,0,330,1, --1,764,11,1,829, -0,330,1,-1,765, -11,1,829,0,330, -1,-1,3,112,0, -327,3,113,0,327, -3,114,0,327,3, -115,0,327,3,116, -0,327,3,117,0, -327,3,118,0,327, -3,119,0,327,3, -120,0,327,3,121, -0,327,3,122,0, -327,3,48,0,327, -3,49,0,327,3, -50,0,327,3,51, -0,327,3,52,0, -327,3,53,0,327, -3,54,0,327,3, -55,0,327,3,56, -0,327,3,57,0, -327,3,65,0,327, -3,66,0,327,3, -67,0,327,3,68, -0,327,3,69,0, -327,3,70,0,327, -3,71,0,327,3, -72,0,327,3,73, -0,327,3,74,0, -327,3,75,0,327, -3,76,0,327,3, -77,0,327,3,78, -0,327,3,79,0, -327,3,80,0,327, -3,81,0,327,3, -82,0,327,3,83, -0,327,3,84,0, -327,3,85,0,327, -3,86,0,327,3, -87,0,327,3,88, -0,327,3,89,0, -327,3,90,0,327, -3,95,0,327,3, -97,0,327,3,98, -0,327,3,99,0, -327,3,100,0,327, -3,101,0,327,3, -102,0,327,3,103, -0,327,3,104,0, -327,3,105,0,327, -3,106,0,327,3, -107,0,327,3,108, -0,327,766,11,1, -829,0,330,1,-1, -3,100,0,327,3, -101,0,327,3,102, -0,327,3,103,0, -327,3,104,0,327, -3,105,0,327,3, -106,0,327,3,107, -0,327,3,108,0, -327,767,11,1,829, -0,330,1,-1,3, -97,0,327,3,98, -0,327,3,99,0, -327,3,100,0,327, -3,101,0,327,3, -102,0,327,3,103, -0,327,3,104,0, -327,3,105,0,327, -3,106,0,327,3, -107,0,327,3,108, -0,327,768,11,1, -829,0,330,1,-1, -3,101,0,327,3, -102,0,327,3,103, -0,327,3,104,0, -327,3,105,0,327, -3,106,0,327,3, -107,0,327,3,108, -0,327,769,11,1, -829,0,330,1,-1, -3,111,0,327,3, -112,0,327,3,113, -0,327,3,114,0, -327,3,115,0,327, -3,116,0,327,3, -117,0,327,3,118, -0,327,3,119,0, -327,3,120,0,327, -3,121,0,327,3, -122,0,327,3,48, -0,327,3,49,0, -327,3,50,0,327, -3,51,0,327,3, -52,0,327,3,53, -0,327,3,54,0, -327,3,55,0,327, -3,56,0,327,3, -57,0,327,3,65, -0,327,3,66,0, -327,3,67,0,327, -3,68,0,327,3, -69,0,327,3,70, -0,327,3,71,0, -327,3,72,0,327, -3,73,0,327,3, -74,0,327,3,75, -0,327,3,76,0, -327,3,77,0,327, -3,78,0,327,3, -79,0,327,3,80, -0,327,3,81,0, -327,3,82,0,327, -3,83,0,327,3, -84,0,327,3,85, -0,327,3,86,0, -327,3,87,0,327, -3,88,0,327,3, -89,0,327,3,90, -0,327,3,95,0, -327,3,97,0,327, -3,98,0,327,3, -99,0,327,3,100, -0,327,3,101,0, -327,3,102,0,327, -3,103,0,327,3, -104,0,327,3,105, -0,327,3,106,0, -327,3,107,0,327, -3,108,0,327,770, -11,1,829,0,330, -1,-1,3,98,0, -327,3,99,0,327, -3,100,0,327,3, -101,0,327,3,102, -0,327,3,103,0, -327,3,104,0,327, -3,105,0,771,12, -1,36167,772,5,63, -3,109,0,327,3, -110,0,773,12,1, -36196,774,5,63,3, -109,0,327,3,110, -0,327,3,111,0, -327,3,112,0,327, -3,113,0,327,3, -114,0,327,3,115, -0,327,3,116,0, -327,3,117,0,327, -3,118,0,327,3, -119,0,327,3,120, -0,327,3,121,0, -327,3,122,0,327, -3,48,0,327,3, -49,0,327,3,50, -0,327,3,51,0, -327,3,52,0,327, -3,53,0,327,3, -54,0,327,3,55, -0,327,3,56,0, -327,3,57,0,327, -3,65,0,327,3, -66,0,327,3,67, -0,327,3,68,0, -327,3,69,0,327, -3,70,0,327,3, -71,0,327,3,72, -0,327,3,73,0, -327,3,74,0,327, -3,75,0,327,3, -76,0,327,3,77, -0,327,3,78,0, -327,3,79,0,327, -3,80,0,327,3, -81,0,327,3,82, -0,327,3,83,0, -327,3,84,0,327, -3,85,0,327,3, -86,0,327,3,87, -0,327,3,88,0, -327,3,89,0,327, -3,90,0,327,3, -95,0,327,3,97, -0,327,3,98,0, -327,3,99,0,327, -3,100,0,327,3, -101,0,327,3,102, -0,327,3,103,0, -327,3,104,0,327, -3,105,0,327,3, -106,0,327,3,107, -0,775,12,1,36249, -776,5,63,3,109, -0,327,3,110,0, -327,3,111,0,327, -3,112,0,327,3, -113,0,327,3,114, -0,327,3,115,0, -327,3,116,0,327, -3,117,0,327,3, -118,0,327,3,119, -0,327,3,120,0, -327,3,121,0,327, -3,122,0,327,3, -48,0,327,3,49, -0,327,3,50,0, -327,3,51,0,327, -3,52,0,327,3, -53,0,327,3,54, -0,327,3,55,0, -327,3,56,0,327, -3,57,0,327,3, -65,0,327,3,66, -0,327,3,67,0, -327,3,68,0,327, -3,69,0,327,3, -70,0,327,3,71, -0,327,3,72,0, -327,3,73,0,327, -3,74,0,327,3, -75,0,327,3,76, -0,327,3,77,0, -327,3,78,0,327, -3,79,0,327,3, -80,0,327,3,81, -0,327,3,82,0, -327,3,83,0,327, -3,84,0,327,3, -85,0,327,3,86, -0,327,3,87,0, -327,3,88,0,327, -3,89,0,327,3, -90,0,327,3,95, -0,777,12,1,36335, -778,5,63,3,109, -0,779,12,1,36363, -780,5,63,3,109, -0,327,3,110,0, -327,3,111,0,327, -3,112,0,327,3, -113,0,327,3,114, -0,327,3,115,0, -327,3,116,0,327, -3,117,0,327,3, -118,0,327,3,119, -0,327,3,120,0, -327,3,121,0,327, -3,122,0,327,3, -48,0,327,3,49, -0,327,3,50,0, -327,3,51,0,327, -3,52,0,327,3, -53,0,327,3,54, -0,327,3,55,0, -327,3,56,0,327, -3,57,0,327,3, -65,0,327,3,66, -0,327,3,67,0, -327,3,68,0,327, -3,69,0,327,3, -70,0,327,3,71, -0,327,3,72,0, -327,3,73,0,327, -3,74,0,327,3, -75,0,327,3,76, -0,327,3,77,0, -327,3,78,0,327, -3,79,0,327,3, -80,0,327,3,81, -0,327,3,82,0, -327,3,83,0,327, -3,84,0,327,3, -85,0,327,3,86, -0,327,3,87,0, -327,3,88,0,327, -3,89,0,327,3, -90,0,327,3,95, -0,327,3,97,0, -327,3,98,0,327, -3,99,0,327,3, -100,0,327,3,101, -0,781,12,1,36410, -782,5,63,3,109, -0,327,3,110,0, -327,3,111,0,327, -3,112,0,327,3, -113,0,327,3,114, -0,327,3,115,0, -783,12,1,36444,784, -5,63,3,109,0, -327,3,110,0,327, -3,111,0,327,3, -112,0,327,3,113, -0,327,3,114,0, -327,3,115,0,785, -12,1,36478,786,5, -63,3,109,0,327, -3,110,0,327,3, -111,0,327,3,112, -0,327,3,113,0, -327,3,114,0,327, -3,115,0,327,3, -116,0,327,3,117, -0,327,3,118,0, -327,3,119,0,327, -3,120,0,327,3, -121,0,327,3,122, -0,327,3,48,0, -327,3,49,0,327, -3,50,0,327,3, -51,0,327,3,52, -0,327,3,53,0, -327,3,54,0,327, -3,55,0,327,3, -56,0,327,3,57, -0,327,3,65,0, -327,3,66,0,327, -3,67,0,327,3, -68,0,327,3,69, -0,327,3,70,0, -327,3,71,0,327, -3,72,0,327,3, -73,0,327,3,74, -0,327,3,75,0, -327,3,76,0,327, -3,77,0,327,3, -78,0,327,3,79, -0,327,3,80,0, -327,3,81,0,327, -3,82,0,327,3, -83,0,327,3,84, -0,327,3,85,0, -327,3,86,0,327, -3,87,0,327,3, -88,0,327,3,89, -0,327,3,90,0, -327,3,95,0,327, -3,97,0,787,12, -1,36521,788,5,63, -3,109,0,327,3, -110,0,327,3,111, -0,327,3,112,0, -327,3,113,0,327, -3,114,0,327,3, -115,0,327,3,116, -0,327,3,117,0, -327,3,118,0,327, -3,119,0,327,3, -120,0,327,3,121, -0,327,3,122,0, -327,3,48,0,327, -3,49,0,327,3, -50,0,327,3,51, -0,327,3,52,0, -327,3,53,0,327, -3,54,0,327,3, -55,0,327,3,56, -0,327,3,57,0, -327,3,65,0,327, -3,66,0,327,3, -67,0,327,3,68, -0,327,3,69,0, -327,3,70,0,327, -3,71,0,327,3, -72,0,327,3,73, -0,327,3,74,0, -327,3,75,0,327, -3,76,0,327,3, -77,0,327,3,78, -0,327,3,79,0, -327,3,80,0,327, -3,81,0,327,3, -82,0,327,3,83, -0,327,3,84,0, -327,3,85,0,327, -3,86,0,327,3, -87,0,327,3,88, -0,327,3,89,0, -327,3,90,0,327, -3,95,0,327,3, -97,0,327,3,98, -0,327,3,99,0, -327,3,100,0,327, -3,101,0,327,3, -102,0,327,3,103, -0,789,12,1,36570, -790,5,63,3,109, -0,327,3,110,0, -327,3,111,0,327, -3,112,0,327,3, -113,0,327,3,114, -0,327,3,115,0, -327,3,116,0,327, -3,117,0,327,3, -118,0,327,3,119, -0,327,3,120,0, -327,3,121,0,327, -3,122,0,327,3, -48,0,327,3,49, -0,327,3,50,0, -327,3,51,0,327, -3,52,0,327,3, -53,0,327,3,54, -0,327,3,55,0, -327,3,56,0,327, -3,57,0,327,3, -65,0,327,3,66, -0,327,3,67,0, -327,3,68,0,327, -3,69,0,327,3, -70,0,327,3,71, -0,327,3,72,0, -327,3,73,0,327, -3,74,0,327,3, -75,0,327,3,76, -0,327,3,77,0, -327,3,78,0,327, -3,79,0,327,3, -80,0,327,3,81, -0,327,3,82,0, -327,3,83,0,327, -3,84,0,327,3, -85,0,327,3,86, -0,327,3,87,0, -327,3,88,0,327, -3,89,0,327,3, -90,0,327,3,95, -0,327,3,97,0, -327,3,98,0,327, -3,99,0,327,3, -100,0,327,3,101, -0,791,12,1,36617, -792,5,63,3,109, -0,327,3,110,0, -327,3,111,0,327, -3,112,0,327,3, -113,0,327,3,114, -0,327,3,115,0, -327,3,116,0,327, -3,117,0,327,3, -118,0,327,3,119, -0,327,3,120,0, -327,3,121,0,327, -3,122,0,327,3, -48,0,327,3,49, -0,327,3,50,0, -327,3,51,0,327, -3,52,0,327,3, -53,0,327,3,54, -0,327,3,55,0, -327,3,56,0,327, -3,57,0,327,3, -65,0,327,3,66, -0,327,3,67,0, -327,3,68,0,327, -3,69,0,327,3, -70,0,327,3,71, -0,327,3,72,0, -327,3,73,0,327, -3,74,0,327,3, -75,0,327,3,76, -0,327,3,77,0, -327,3,78,0,327, -3,79,0,327,3, -80,0,327,3,81, -0,327,3,82,0, -327,3,83,0,327, -3,84,0,327,3, -85,0,327,3,86, -0,327,3,87,0, -327,3,88,0,327, -3,89,0,327,3, -90,0,327,3,95, -0,327,3,97,0, -327,3,98,0,327, -3,99,0,327,3, -100,0,327,3,101, -0,327,3,102,0, -327,3,103,0,327, -3,104,0,327,3, -105,0,327,3,106, -0,327,3,107,0, -327,3,108,0,327, -793,11,1,565,0, -794,4,36,76,0, -73,0,78,0,75, -0,95,0,77,0, -69,0,83,0,83, -0,65,0,71,0, -69,0,95,0,69, -0,86,0,69,0, -78,0,84,0,1, --1,3,102,0,327, -3,103,0,327,3, -104,0,327,3,105, -0,327,3,106,0, -327,3,107,0,327, -3,108,0,327,795, -11,1,829,0,330, -1,-1,3,104,0, -327,3,105,0,327, -3,106,0,327,3, -107,0,327,3,108, -0,327,796,11,1, -829,0,330,1,-1, -3,98,0,327,3, -99,0,327,3,100, -0,327,3,101,0, -327,3,102,0,327, -3,103,0,327,3, -104,0,327,3,105, -0,327,3,106,0, -327,3,107,0,327, -3,108,0,327,797, -11,1,829,0,330, -1,-1,3,116,0, -327,3,117,0,327, -3,118,0,327,3, -119,0,327,3,120, -0,327,3,121,0, -327,3,122,0,327, -3,48,0,327,3, -49,0,327,3,50, -0,327,3,51,0, -327,3,52,0,327, -3,53,0,327,3, -54,0,327,3,55, -0,327,3,56,0, -327,3,57,0,327, -3,65,0,327,3, -66,0,327,3,67, -0,327,3,68,0, -327,3,69,0,327, -3,70,0,327,3, -71,0,327,3,72, -0,327,3,73,0, -327,3,74,0,327, -3,75,0,327,3, -76,0,327,3,77, -0,327,3,78,0, -327,3,79,0,327, -3,80,0,327,3, -81,0,327,3,82, -0,327,3,83,0, -327,3,84,0,327, -3,85,0,327,3, -86,0,327,3,87, -0,327,3,88,0, -327,3,89,0,327, -3,90,0,327,3, -95,0,327,3,97, -0,327,3,98,0, -327,3,99,0,327, -3,100,0,327,3, -101,0,327,3,102, -0,327,3,103,0, -327,3,104,0,327, -3,105,0,327,3, -106,0,327,3,107, -0,327,3,108,0, -327,798,11,1,829, -0,330,1,-1,3, -116,0,327,3,117, -0,327,3,118,0, -327,3,119,0,327, -3,120,0,327,3, -121,0,327,3,122, -0,327,3,48,0, -327,3,49,0,327, -3,50,0,327,3, -51,0,327,3,52, -0,327,3,53,0, -327,3,54,0,327, -3,55,0,327,3, -56,0,327,3,57, -0,327,3,65,0, -327,3,66,0,327, -3,67,0,327,3, -68,0,327,3,69, -0,327,3,70,0, -327,3,71,0,327, -3,72,0,327,3, -73,0,327,3,74, -0,327,3,75,0, -327,3,76,0,327, -3,77,0,327,3, -78,0,327,3,79, -0,327,3,80,0, -327,3,81,0,327, -3,82,0,327,3, -83,0,327,3,84, -0,327,3,85,0, -327,3,86,0,327, -3,87,0,327,3, -88,0,327,3,89, -0,327,3,90,0, -327,3,95,0,327, -3,97,0,327,3, -98,0,327,3,99, -0,327,3,100,0, -327,3,101,0,327, -3,102,0,327,3, -103,0,327,3,104, -0,327,3,105,0, -327,3,106,0,327, -3,107,0,327,3, -108,0,327,799,11, -1,829,0,330,1, --1,3,102,0,327, -3,103,0,327,3, -104,0,327,3,105, -0,327,3,106,0, -327,3,107,0,327, -3,108,0,327,800, -11,1,829,0,330, -1,-1,3,110,0, -327,3,111,0,327, -3,112,0,327,3, -113,0,327,3,114, -0,327,3,115,0, -327,3,116,0,327, -3,117,0,327,3, -118,0,327,3,119, -0,327,3,120,0, -327,3,121,0,327, -3,122,0,327,3, -48,0,327,3,49, -0,327,3,50,0, -327,3,51,0,327, -3,52,0,327,3, -53,0,327,3,54, -0,327,3,55,0, -327,3,56,0,327, -3,57,0,327,3, -65,0,327,3,66, -0,327,3,67,0, -327,3,68,0,327, -3,69,0,327,3, -70,0,327,3,71, -0,327,3,72,0, -327,3,73,0,327, -3,74,0,327,3, -75,0,327,3,76, -0,327,3,77,0, -327,3,78,0,327, -3,79,0,327,3, -80,0,327,3,81, -0,327,3,82,0, -327,3,83,0,327, -3,84,0,327,3, -85,0,327,3,86, -0,327,3,87,0, -327,3,88,0,327, -3,89,0,327,3, -90,0,327,3,95, -0,327,3,97,0, -327,3,98,0,327, -3,99,0,327,3, -100,0,327,3,101, -0,327,3,102,0, -327,3,103,0,327, -3,104,0,327,3, -105,0,327,3,106, -0,327,3,107,0, -327,3,108,0,327, -801,11,1,829,0, -330,1,-1,3,97, -0,327,3,98,0, -327,3,99,0,327, -3,100,0,327,3, -101,0,327,3,102, -0,327,3,103,0, -327,3,104,0,327, -3,105,0,327,3, -106,0,327,3,107, -0,327,3,108,0, -327,802,11,1,829, -0,330,1,-1,3, -108,0,327,803,11, -1,829,0,330,1, --1,3,111,0,327, -3,112,0,327,3, -113,0,327,3,114, -0,327,3,115,0, -804,12,1,37401,805, -5,63,3,109,0, -327,3,110,0,327, -3,111,0,327,3, -112,0,327,3,113, -0,327,3,114,0, -327,3,115,0,327, -3,116,0,806,12, -1,37436,807,5,63, -3,109,0,327,3, -110,0,327,3,111, -0,327,3,112,0, -327,3,113,0,327, -3,114,0,327,3, -115,0,327,3,116, -0,327,3,117,0, -327,3,118,0,327, -3,119,0,327,3, -120,0,327,3,121, -0,327,3,122,0, -327,3,48,0,327, -3,49,0,327,3, -50,0,327,3,51, -0,327,3,52,0, -327,3,53,0,327, -3,54,0,327,3, -55,0,327,3,56, -0,327,3,57,0, -327,3,65,0,327, -3,66,0,327,3, -67,0,327,3,68, -0,327,3,69,0, -327,3,70,0,327, -3,71,0,327,3, -72,0,327,3,73, -0,327,3,74,0, -327,3,75,0,327, -3,76,0,327,3, -77,0,327,3,78, -0,327,3,79,0, -327,3,80,0,327, -3,81,0,327,3, -82,0,327,3,83, -0,327,3,84,0, -327,3,85,0,327, -3,86,0,327,3, -87,0,327,3,88, -0,327,3,89,0, -327,3,90,0,327, -3,95,0,327,3, -97,0,327,3,98, -0,327,3,99,0, -327,3,100,0,327, -3,101,0,808,12, -1,37483,809,5,63, -3,109,0,327,3, -110,0,810,12,1, -37512,811,5,63,3, -109,0,327,3,110, -0,327,3,111,0, -327,3,112,0,327, -3,113,0,327,3, -114,0,327,3,115, -0,327,3,116,0, -327,3,117,0,327, -3,118,0,327,3, -119,0,327,3,120, -0,327,3,121,0, -327,3,122,0,327, -3,48,0,327,3, -49,0,327,3,50, -0,327,3,51,0, -327,3,52,0,327, -3,53,0,327,3, -54,0,327,3,55, -0,327,3,56,0, -327,3,57,0,327, -3,65,0,327,3, -66,0,327,3,67, -0,327,3,68,0, -327,3,69,0,327, -3,70,0,327,3, -71,0,327,3,72, -0,327,3,73,0, -327,3,74,0,327, -3,75,0,327,3, -76,0,327,3,77, -0,327,3,78,0, -327,3,79,0,327, -3,80,0,327,3, -81,0,327,3,82, -0,327,3,83,0, -327,3,84,0,327, -3,85,0,327,3, -86,0,327,3,87, -0,327,3,88,0, -327,3,89,0,327, -3,90,0,327,3, -95,0,327,3,97, -0,327,3,98,0, -327,3,99,0,327, -3,100,0,327,3, -101,0,327,3,102, -0,327,3,103,0, -327,3,104,0,327, -3,105,0,327,3, -106,0,327,3,107, -0,327,3,108,0, -327,812,11,1,581, -0,813,4,24,76, -0,73,0,83,0, -84,0,69,0,78, -0,95,0,69,0, -86,0,69,0,78, -0,84,0,1,-1, -3,111,0,327,3, -112,0,327,3,113, -0,327,3,114,0, -327,3,115,0,327, -3,116,0,327,3, -117,0,327,3,118, -0,327,3,119,0, -327,3,120,0,327, -3,121,0,327,3, -122,0,327,3,48, -0,327,3,49,0, -327,3,50,0,327, -3,51,0,327,3, -52,0,327,3,53, -0,327,3,54,0, -327,3,55,0,327, -3,56,0,327,3, -57,0,327,3,65, -0,327,3,66,0, -327,3,67,0,327, -3,68,0,327,3, -69,0,327,3,70, -0,327,3,71,0, -327,3,72,0,327, -3,73,0,327,3, -74,0,327,3,75, -0,327,3,76,0, -327,3,77,0,327, -3,78,0,327,3, -79,0,327,3,80, -0,327,3,81,0, -327,3,82,0,327, -3,83,0,327,3, -84,0,327,3,85, -0,327,3,86,0, -327,3,87,0,327, -3,88,0,327,3, -89,0,327,3,90, -0,327,3,95,0, -327,3,97,0,327, -3,98,0,327,3, -99,0,327,3,100, -0,327,3,101,0, -327,3,102,0,327, -3,103,0,327,3, -104,0,327,3,105, -0,327,3,106,0, -327,3,107,0,327, -3,108,0,327,814, -11,1,829,0,330, -1,-1,3,102,0, -327,3,103,0,327, -3,104,0,327,3, -105,0,327,3,106, -0,327,3,107,0, -327,3,108,0,327, -815,11,1,342,0, -816,4,18,76,0, -73,0,83,0,84, -0,95,0,84,0, -89,0,80,0,69, -0,1,-1,3,117, -0,327,3,118,0, -327,3,119,0,327, -3,120,0,327,3, -121,0,327,3,122, -0,327,3,48,0, -327,3,49,0,327, -3,50,0,327,3, -51,0,327,3,52, -0,327,3,53,0, -327,3,54,0,327, -3,55,0,327,3, -56,0,327,3,57, -0,327,3,65,0, -327,3,66,0,327, -3,67,0,327,3, -68,0,327,3,69, -0,327,3,70,0, -327,3,71,0,327, -3,72,0,327,3, -73,0,327,3,74, -0,327,3,75,0, -327,3,76,0,327, -3,77,0,327,3, -78,0,327,3,79, -0,327,3,80,0, -327,3,81,0,327, -3,82,0,327,3, -83,0,327,3,84, -0,327,3,85,0, -327,3,86,0,327, -3,87,0,327,3, -88,0,327,3,89, -0,327,3,90,0, -327,3,95,0,327, -3,97,0,327,3, -98,0,327,3,99, -0,327,3,100,0, -327,3,101,0,327, -3,102,0,327,3, -103,0,327,3,104, -0,327,3,105,0, -327,3,106,0,327, -3,107,0,327,3, -108,0,327,817,11, -1,829,0,330,1, --1,3,116,0,327, -3,117,0,327,3, -118,0,327,3,119, -0,327,3,120,0, -327,3,121,0,327, -3,122,0,327,3, -48,0,327,3,49, -0,327,3,50,0, -327,3,51,0,327, -3,52,0,327,3, -53,0,327,3,54, -0,327,3,55,0, -327,3,56,0,327, -3,57,0,327,3, -65,0,327,3,66, -0,327,3,67,0, -327,3,68,0,327, -3,69,0,327,3, -70,0,327,3,71, -0,327,3,72,0, -327,3,73,0,327, -3,74,0,327,3, -75,0,327,3,76, -0,327,3,77,0, -327,3,78,0,327, -3,79,0,327,3, -80,0,327,3,81, -0,327,3,82,0, -327,3,83,0,327, -3,84,0,327,3, -85,0,327,3,86, -0,327,3,87,0, -327,3,88,0,327, -3,89,0,327,3, -90,0,327,3,95, -0,327,3,97,0, -327,3,98,0,327, -3,99,0,327,3, -100,0,327,3,101, -0,327,3,102,0, -327,3,103,0,327, -3,104,0,327,3, -105,0,327,3,106, -0,327,3,107,0, -327,3,108,0,327, -818,11,1,829,0, -330,1,-1,3,106, -0,327,3,107,0, -327,3,108,0,327, -819,11,1,829,0, -330,1,-1,3,109, -0,820,12,1,1290, -821,5,63,3,109, -0,327,3,110,0, -327,3,111,0,822, -12,1,1320,823,5, -63,3,109,0,327, -3,110,0,824,12, -1,1349,825,5,63, -3,109,0,327,3, -110,0,327,3,111, -0,327,3,112,0, -327,3,113,0,327, -3,114,0,327,3, -115,0,327,3,116, -0,327,3,117,0, -327,3,118,0,327, -3,119,0,327,3, -120,0,327,3,121, -0,327,3,122,0, -327,3,48,0,327, -3,49,0,327,3, -50,0,327,3,51, -0,327,3,52,0, -327,3,53,0,327, -3,54,0,327,3, -55,0,327,3,56, -0,327,3,57,0, -327,3,65,0,327, -3,66,0,327,3, -67,0,327,3,68, -0,327,3,69,0, -327,3,70,0,327, -3,71,0,327,3, -72,0,327,3,73, -0,327,3,74,0, -327,3,75,0,327, -3,76,0,327,3, -77,0,327,3,78, -0,327,3,79,0, -327,3,80,0,327, -3,81,0,327,3, -82,0,327,3,83, -0,327,3,84,0, -327,3,85,0,327, -3,86,0,327,3, -87,0,327,3,88, -0,327,3,89,0, -327,3,90,0,327, -3,95,0,327,3, -97,0,327,3,98, -0,327,3,99,0, -327,3,100,0,327, -3,101,0,826,12, -1,1396,827,5,63, -3,109,0,327,3, -110,0,327,3,111, -0,327,3,112,0, -327,3,113,0,327, -3,114,0,327,3, -115,0,327,3,116, -0,327,3,117,0, -327,3,118,0,327, -3,119,0,327,3, -120,0,327,3,121, -0,828,12,1,1436, -829,5,63,3,109, -0,327,3,110,0, -327,3,111,0,327, -3,112,0,327,3, -113,0,327,3,114, -0,327,3,115,0, -327,3,116,0,327, -3,117,0,327,3, -118,0,327,3,119, -0,327,3,120,0, -327,3,121,0,327, -3,122,0,327,3, -48,0,327,3,49, -0,327,3,50,0, -327,3,51,0,327, -3,52,0,327,3, -53,0,327,3,54, -0,327,3,55,0, -327,3,56,0,327, -3,57,0,327,3, -65,0,327,3,66, -0,327,3,67,0, -327,3,68,0,327, -3,69,0,327,3, -70,0,327,3,71, -0,327,3,72,0, -327,3,73,0,327, -3,74,0,327,3, -75,0,327,3,76, -0,327,3,77,0, -327,3,78,0,327, -3,79,0,327,3, -80,0,327,3,81, -0,327,3,82,0, -327,3,83,0,327, -3,84,0,327,3, -85,0,327,3,86, -0,327,3,87,0, -327,3,88,0,327, -3,89,0,327,3, -90,0,327,3,95, -0,327,3,97,0, -327,3,98,0,327, -3,99,0,327,3, -100,0,327,3,101, -0,327,3,102,0, -327,3,103,0,327, -3,104,0,327,3, -105,0,327,3,106, -0,327,3,107,0, -327,3,108,0,327, -830,11,1,591,0, -831,4,22,77,0, -79,0,78,0,69, -0,89,0,95,0, -69,0,86,0,69, -0,78,0,84,0, -1,-1,3,122,0, -327,3,48,0,327, -3,49,0,327,3, -50,0,327,3,51, -0,327,3,52,0, -327,3,53,0,327, -3,54,0,327,3, -55,0,327,3,56, -0,327,3,57,0, -327,3,65,0,327, -3,66,0,327,3, -67,0,327,3,68, -0,327,3,69,0, -327,3,70,0,327, -3,71,0,327,3, -72,0,327,3,73, -0,327,3,74,0, -327,3,75,0,327, -3,76,0,327,3, -77,0,327,3,78, -0,327,3,79,0, -327,3,80,0,327, -3,81,0,327,3, -82,0,327,3,83, -0,327,3,84,0, -327,3,85,0,327, -3,86,0,327,3, -87,0,327,3,88, -0,327,3,89,0, -327,3,90,0,327, -3,95,0,327,3, -97,0,327,3,98, -0,327,3,99,0, -327,3,100,0,327, -3,101,0,327,3, -102,0,327,3,103, -0,327,3,104,0, -327,3,105,0,327, -3,106,0,327,3, -107,0,327,3,108, -0,327,832,11,1, -829,0,330,1,-1, -3,102,0,327,3, -103,0,327,3,104, -0,327,3,105,0, -327,3,106,0,327, -3,107,0,327,3, -108,0,327,833,11, -1,829,0,330,1, --1,3,111,0,327, -3,112,0,327,3, -113,0,327,3,114, -0,327,3,115,0, -327,3,116,0,327, -3,117,0,327,3, -118,0,834,12,1, -1717,835,5,63,3, -109,0,327,3,110, -0,327,3,111,0, -327,3,112,0,327, -3,113,0,327,3, -114,0,327,3,115, -0,327,3,116,0, -327,3,117,0,327, -3,118,0,327,3, -119,0,327,3,120, -0,327,3,121,0, -327,3,122,0,327, -3,48,0,327,3, -49,0,327,3,50, -0,327,3,51,0, -327,3,52,0,327, -3,53,0,327,3, -54,0,327,3,55, -0,327,3,56,0, -327,3,57,0,327, -3,65,0,327,3, -66,0,327,3,67, -0,327,3,68,0, -327,3,69,0,327, -3,70,0,327,3, -71,0,327,3,72, -0,327,3,73,0, -327,3,74,0,327, -3,75,0,327,3, -76,0,327,3,77, -0,327,3,78,0, -327,3,79,0,327, -3,80,0,327,3, -81,0,327,3,82, -0,327,3,83,0, -327,3,84,0,327, -3,85,0,327,3, -86,0,327,3,87, -0,327,3,88,0, -327,3,89,0,327, -3,90,0,327,3, -95,0,327,3,97, -0,327,3,98,0, -327,3,99,0,327, -3,100,0,327,3, -101,0,327,3,102, -0,327,3,103,0, -327,3,104,0,327, -3,105,0,836,12, -1,1768,837,5,63, -3,109,0,327,3, -110,0,838,12,1, -1797,839,5,63,3, -109,0,327,3,110, -0,327,3,111,0, -327,3,112,0,327, -3,113,0,327,3, -114,0,327,3,115, -0,327,3,116,0, -327,3,117,0,327, -3,118,0,327,3, -119,0,327,3,120, -0,327,3,121,0, -327,3,122,0,327, -3,48,0,327,3, -49,0,327,3,50, -0,327,3,51,0, -327,3,52,0,327, -3,53,0,327,3, -54,0,327,3,55, -0,327,3,56,0, -327,3,57,0,327, -3,65,0,327,3, -66,0,327,3,67, -0,327,3,68,0, -327,3,69,0,327, -3,70,0,327,3, -71,0,327,3,72, -0,327,3,73,0, -327,3,74,0,327, -3,75,0,327,3, -76,0,327,3,77, -0,327,3,78,0, -327,3,79,0,327, -3,80,0,327,3, -81,0,327,3,82, -0,327,3,83,0, -327,3,84,0,327, -3,85,0,327,3, -86,0,327,3,87, -0,327,3,88,0, -327,3,89,0,327, -3,90,0,327,3, -95,0,327,3,97, -0,327,3,98,0, -327,3,99,0,327, -3,100,0,327,3, -101,0,327,3,102, -0,327,3,103,0, -840,12,1,1846,841, -5,63,3,109,0, -327,3,110,0,327, -3,111,0,327,3, -112,0,327,3,113, -0,327,3,114,0, -327,3,115,0,327, -3,116,0,327,3, -117,0,327,3,118, -0,327,3,119,0, -327,3,120,0,327, -3,121,0,327,3, -122,0,327,3,48, -0,327,3,49,0, -327,3,50,0,327, -3,51,0,327,3, -52,0,327,3,53, -0,327,3,54,0, -327,3,55,0,327, -3,56,0,327,3, -57,0,327,3,65, -0,327,3,66,0, -327,3,67,0,327, -3,68,0,327,3, -69,0,327,3,70, -0,327,3,71,0, -327,3,72,0,327, -3,73,0,327,3, -74,0,327,3,75, -0,327,3,76,0, -327,3,77,0,327, -3,78,0,327,3, -79,0,327,3,80, -0,327,3,81,0, -327,3,82,0,327, -3,83,0,327,3, -84,0,327,3,85, -0,327,3,86,0, -327,3,87,0,327, -3,88,0,327,3, -89,0,327,3,90, -0,327,3,95,0, -842,12,1,1932,843, -5,63,3,109,0, -327,3,110,0,327, -3,111,0,327,3, -112,0,327,3,113, -0,327,3,114,0, -327,3,115,0,844, -12,1,1966,845,5, -63,3,109,0,327, -3,110,0,327,3, -111,0,327,3,112, -0,327,3,113,0, -327,3,114,0,327, -3,115,0,327,3, -116,0,846,12,1, -2001,847,5,63,3, -109,0,327,3,110, -0,327,3,111,0, -327,3,112,0,327, -3,113,0,327,3, -114,0,327,3,115, -0,327,3,116,0, -327,3,117,0,327, -3,118,0,327,3, -119,0,327,3,120, -0,327,3,121,0, -327,3,122,0,327, -3,48,0,327,3, -49,0,327,3,50, -0,327,3,51,0, -327,3,52,0,327, -3,53,0,327,3, -54,0,327,3,55, -0,327,3,56,0, -327,3,57,0,327, -3,65,0,327,3, -66,0,327,3,67, -0,327,3,68,0, -327,3,69,0,327, -3,70,0,327,3, -71,0,327,3,72, -0,327,3,73,0, -327,3,74,0,327, -3,75,0,327,3, -76,0,327,3,77, -0,327,3,78,0, -327,3,79,0,327, -3,80,0,327,3, -81,0,327,3,82, -0,327,3,83,0, -327,3,84,0,327, -3,85,0,327,3, -86,0,327,3,87, -0,327,3,88,0, -327,3,89,0,327, -3,90,0,327,3, -95,0,327,3,97, -0,848,12,1,2044, -849,5,63,3,109, -0,327,3,110,0, -327,3,111,0,327, -3,112,0,327,3, -113,0,327,3,114, -0,850,12,1,2077, -851,5,63,3,109, -0,327,3,110,0, -327,3,111,0,327, -3,112,0,327,3, -113,0,327,3,114, -0,327,3,115,0, -327,3,116,0,852, -12,1,2112,853,5, -63,3,109,0,327, -3,110,0,327,3, -111,0,327,3,112, -0,327,3,113,0, -327,3,114,0,327, -3,115,0,327,3, -116,0,327,3,117, -0,327,3,118,0, -327,3,119,0,327, -3,120,0,327,3, -121,0,327,3,122, -0,327,3,48,0, -327,3,49,0,327, -3,50,0,327,3, -51,0,327,3,52, -0,327,3,53,0, -327,3,54,0,327, -3,55,0,327,3, -56,0,327,3,57, -0,327,3,65,0, -327,3,66,0,327, -3,67,0,327,3, -68,0,327,3,69, -0,327,3,70,0, -327,3,71,0,327, -3,72,0,327,3, -73,0,327,3,74, -0,327,3,75,0, -327,3,76,0,327, -3,77,0,327,3, -78,0,327,3,79, -0,327,3,80,0, -327,3,81,0,327, -3,82,0,327,3, -83,0,327,3,84, -0,327,3,85,0, -327,3,86,0,327, -3,87,0,327,3, -88,0,327,3,89, -0,327,3,90,0, -327,3,95,0,327, -3,97,0,327,3, -98,0,327,3,99, -0,327,3,100,0, -327,3,101,0,327, -3,102,0,327,3, -103,0,327,3,104, -0,327,3,105,0, -327,3,106,0,327, -3,107,0,327,3, -108,0,327,854,11, -1,614,0,855,4, -36,77,0,79,0, -86,0,73,0,78, -0,71,0,95,0, -83,0,84,0,65, -0,82,0,84,0, -95,0,69,0,86, -0,69,0,78,0, -84,0,1,-1,3, -117,0,327,3,118, -0,327,3,119,0, -327,3,120,0,327, -3,121,0,327,3, -122,0,327,3,48, -0,327,3,49,0, -327,3,50,0,327, -3,51,0,327,3, -52,0,327,3,53, -0,327,3,54,0, -327,3,55,0,327, -3,56,0,327,3, -57,0,327,3,65, -0,327,3,66,0, -327,3,67,0,327, -3,68,0,327,3, -69,0,327,3,70, -0,327,3,71,0, -327,3,72,0,327, -3,73,0,327,3, -74,0,327,3,75, -0,327,3,76,0, -327,3,77,0,327, -3,78,0,327,3, -79,0,327,3,80, -0,327,3,81,0, -327,3,82,0,327, -3,83,0,327,3, -84,0,327,3,85, -0,327,3,86,0, -327,3,87,0,327, -3,88,0,327,3, -89,0,327,3,90, -0,327,3,95,0, -327,3,97,0,327, -3,98,0,327,3, -99,0,327,3,100, -0,327,3,101,0, -327,3,102,0,327, -3,103,0,327,3, -104,0,327,3,105, -0,327,3,106,0, -327,3,107,0,327, -3,108,0,327,856, -11,1,829,0,330, -1,-1,3,115,0, -327,3,116,0,327, -3,117,0,327,3, -118,0,327,3,119, -0,327,3,120,0, -327,3,121,0,327, -3,122,0,327,3, -48,0,327,3,49, -0,327,3,50,0, -327,3,51,0,327, -3,52,0,327,3, -53,0,327,3,54, -0,327,3,55,0, -327,3,56,0,327, -3,57,0,327,3, -65,0,327,3,66, -0,327,3,67,0, -327,3,68,0,327, -3,69,0,327,3, -70,0,327,3,71, -0,327,3,72,0, -327,3,73,0,327, -3,74,0,327,3, -75,0,327,3,76, -0,327,3,77,0, -327,3,78,0,327, -3,79,0,327,3, -80,0,327,3,81, -0,327,3,82,0, -327,3,83,0,327, -3,84,0,327,3, -85,0,327,3,86, -0,327,3,87,0, -327,3,88,0,327, -3,89,0,327,3, -90,0,327,3,95, -0,327,3,97,0, -327,3,98,0,327, -3,99,0,327,3, -100,0,327,3,101, -0,327,3,102,0, -327,3,103,0,327, -3,104,0,327,3, -105,0,327,3,106, -0,327,3,107,0, -327,3,108,0,327, -857,11,1,829,0, -330,1,-1,3,98, -0,327,3,99,0, -327,3,100,0,327, -3,101,0,327,3, -102,0,327,3,103, -0,327,3,104,0, -327,3,105,0,327, -3,106,0,327,3, -107,0,327,3,108, -0,327,858,11,1, -829,0,330,1,-1, -3,117,0,327,3, -118,0,327,3,119, -0,327,3,120,0, -327,3,121,0,327, -3,122,0,327,3, -48,0,327,3,49, -0,327,3,50,0, -327,3,51,0,327, -3,52,0,327,3, -53,0,327,3,54, -0,327,3,55,0, -327,3,56,0,327, -3,57,0,327,3, -65,0,327,3,66, -0,327,3,67,0, -327,3,68,0,327, -3,69,0,327,3, -70,0,327,3,71, -0,327,3,72,0, -327,3,73,0,327, -3,74,0,327,3, -75,0,327,3,76, -0,327,3,77,0, -327,3,78,0,327, -3,79,0,327,3, -80,0,327,3,81, -0,327,3,82,0, -327,3,83,0,327, -3,84,0,327,3, -85,0,327,3,86, -0,327,3,87,0, -327,3,88,0,327, -3,89,0,327,3, -90,0,327,3,95, -0,327,3,97,0, -327,3,98,0,327, -3,99,0,327,3, -100,0,327,3,101, -0,327,3,102,0, -327,3,103,0,327, -3,104,0,327,3, -105,0,327,3,106, -0,327,3,107,0, -327,3,108,0,327, -859,11,1,829,0, -330,1,-1,3,116, -0,327,3,117,0, -327,3,118,0,327, -3,119,0,327,3, -120,0,327,3,121, -0,327,3,122,0, -327,3,48,0,327, -3,49,0,327,3, -50,0,327,3,51, -0,327,3,52,0, -327,3,53,0,327, -3,54,0,327,3, -55,0,327,3,56, -0,327,3,57,0, -327,3,65,0,327, -3,66,0,327,3, -67,0,327,3,68, -0,327,3,69,0, -327,3,70,0,327, -3,71,0,327,3, -72,0,327,3,73, -0,327,3,74,0, -327,3,75,0,327, -3,76,0,327,3, -77,0,327,3,78, -0,327,3,79,0, -327,3,80,0,327, -3,81,0,327,3, -82,0,327,3,83, -0,327,3,84,0, -327,3,85,0,327, -3,86,0,327,3, -87,0,327,3,88, -0,327,3,89,0, -327,3,90,0,327, -3,95,0,327,3, -97,0,327,3,98, -0,327,3,99,0, -327,3,100,0,327, -3,101,0,860,12, -1,2579,861,5,63, -3,109,0,327,3, -110,0,862,12,1, -2608,863,5,63,3, -109,0,327,3,110, -0,327,3,111,0, -327,3,112,0,327, -3,113,0,327,3, -114,0,327,3,115, -0,327,3,116,0, -327,3,117,0,327, -3,118,0,327,3, -119,0,327,3,120, -0,327,3,121,0, -327,3,122,0,327, -3,48,0,327,3, -49,0,327,3,50, -0,327,3,51,0, -327,3,52,0,327, -3,53,0,327,3, -54,0,327,3,55, -0,327,3,56,0, -327,3,57,0,327, -3,65,0,327,3, -66,0,327,3,67, -0,327,3,68,0, -327,3,69,0,327, -3,70,0,327,3, -71,0,327,3,72, -0,327,3,73,0, -327,3,74,0,327, -3,75,0,327,3, -76,0,327,3,77, -0,327,3,78,0, -327,3,79,0,327, -3,80,0,327,3, -81,0,327,3,82, -0,327,3,83,0, -327,3,84,0,327, -3,85,0,327,3, -86,0,327,3,87, -0,327,3,88,0, -327,3,89,0,327, -3,90,0,327,3, -95,0,327,3,97, -0,327,3,98,0, -327,3,99,0,327, -3,100,0,864,12, -1,2654,865,5,63, -3,109,0,327,3, -110,0,327,3,111, -0,327,3,112,0, -327,3,113,0,327, -3,114,0,327,3, -115,0,327,3,116, -0,327,3,117,0, -327,3,118,0,327, -3,119,0,327,3, -120,0,327,3,121, -0,327,3,122,0, -327,3,48,0,327, -3,49,0,327,3, -50,0,327,3,51, -0,327,3,52,0, -327,3,53,0,327, -3,54,0,327,3, -55,0,327,3,56, -0,327,3,57,0, -327,3,65,0,327, -3,66,0,327,3, -67,0,327,3,68, -0,327,3,69,0, -327,3,70,0,327, -3,71,0,327,3, -72,0,327,3,73, -0,327,3,74,0, -327,3,75,0,327, -3,76,0,327,3, -77,0,327,3,78, -0,327,3,79,0, -327,3,80,0,327, -3,81,0,327,3, -82,0,327,3,83, -0,327,3,84,0, -327,3,85,0,327, -3,86,0,327,3, -87,0,327,3,88, -0,327,3,89,0, -327,3,90,0,327, -3,95,0,327,3, -97,0,327,3,98, -0,327,3,99,0, -327,3,100,0,327, -3,101,0,327,3, -102,0,327,3,103, -0,327,3,104,0, -327,3,105,0,327, -3,106,0,327,3, -107,0,327,3,108, -0,327,866,11,1, -600,0,867,4,32, -77,0,79,0,86, -0,73,0,78,0, -71,0,95,0,69, -0,78,0,68,0, -95,0,69,0,86, -0,69,0,78,0, -84,0,1,-1,3, -101,0,327,3,102, -0,327,3,103,0, -327,3,104,0,327, -3,105,0,327,3, -106,0,327,3,107, -0,327,3,108,0, -327,868,11,1,829, -0,330,1,-1,3, -111,0,327,3,112, -0,327,3,113,0, -327,3,114,0,327, -3,115,0,327,3, -116,0,327,3,117, -0,327,3,118,0, -327,3,119,0,327, -3,120,0,327,3, -121,0,327,3,122, -0,327,3,48,0, -327,3,49,0,327, -3,50,0,327,3, -51,0,327,3,52, -0,327,3,53,0, -327,3,54,0,327, -3,55,0,327,3, -56,0,327,3,57, -0,327,3,65,0, -327,3,66,0,327, -3,67,0,327,3, -68,0,327,3,69, -0,327,3,70,0, -327,3,71,0,327, -3,72,0,327,3, -73,0,327,3,74, -0,327,3,75,0, -327,3,76,0,327, -3,77,0,327,3, -78,0,327,3,79, -0,327,3,80,0, -327,3,81,0,327, -3,82,0,327,3, -83,0,327,3,84, -0,327,3,85,0, -327,3,86,0,327, -3,87,0,327,3, -88,0,327,3,89, -0,327,3,90,0, -327,3,95,0,327, -3,97,0,327,3, -98,0,327,3,99, -0,327,3,100,0, -327,3,101,0,327, -3,102,0,327,3, -103,0,327,3,104, -0,327,3,105,0, -327,3,106,0,327, -3,107,0,327,3, -108,0,327,869,11, -1,829,0,330,1, --1,3,102,0,327, -3,103,0,327,3, -104,0,327,3,105, -0,327,3,106,0, -327,3,107,0,327, -3,108,0,327,870, -11,1,829,0,330, -1,-1,3,97,0, -327,3,98,0,327, -3,99,0,327,3, -100,0,327,3,101, -0,327,3,102,0, -327,3,103,0,327, -3,104,0,327,3, -105,0,327,3,106, -0,327,3,107,0, -327,3,108,0,327, -871,11,1,829,0, -330,1,-1,3,104, -0,327,3,105,0, -327,3,106,0,327, -3,107,0,327,3, -108,0,327,872,11, -1,829,0,330,1, --1,3,111,0,327, -3,112,0,327,3, -113,0,327,3,114, -0,327,3,115,0, -327,3,116,0,327, -3,117,0,327,3, -118,0,327,3,119, -0,327,3,120,0, -327,3,121,0,327, -3,122,0,327,3, -48,0,327,3,49, -0,327,3,50,0, -327,3,51,0,327, -3,52,0,327,3, -53,0,327,3,54, -0,327,3,55,0, -327,3,56,0,327, -3,57,0,327,3, -65,0,327,3,66, -0,327,3,67,0, -327,3,68,0,327, -3,69,0,327,3, -70,0,327,3,71, -0,327,3,72,0, -327,3,73,0,327, -3,74,0,327,3, -75,0,327,3,76, -0,327,3,77,0, -327,3,78,0,327, -3,79,0,327,3, -80,0,327,3,81, -0,327,3,82,0, -327,3,83,0,327, -3,84,0,327,3, -85,0,327,3,86, -0,327,3,87,0, -327,3,88,0,327, -3,89,0,327,3, -90,0,327,3,95, -0,327,3,97,0, -327,3,98,0,327, -3,99,0,327,3, -100,0,327,3,101, -0,327,3,102,0, -327,3,103,0,327, -3,104,0,327,3, -105,0,327,3,106, -0,327,3,107,0, -327,3,108,0,327, -873,11,1,829,0, -330,1,-1,3,106, -0,327,3,107,0, -327,3,108,0,327, -874,11,1,829,0, -330,1,-1,3,119, -0,327,3,120,0, -327,3,121,0,327, -3,122,0,327,3, -48,0,327,3,49, -0,327,3,50,0, -327,3,51,0,327, -3,52,0,327,3, -53,0,327,3,54, -0,327,3,55,0, -327,3,56,0,327, -3,57,0,327,3, -65,0,327,3,66, -0,327,3,67,0, -327,3,68,0,327, -3,69,0,327,3, -70,0,327,3,71, -0,327,3,72,0, -327,3,73,0,327, -3,74,0,327,3, -75,0,327,3,76, -0,327,3,77,0, -327,3,78,0,327, -3,79,0,327,3, -80,0,327,3,81, -0,327,3,82,0, -327,3,83,0,327, -3,84,0,327,3, -85,0,327,3,86, -0,327,3,87,0, -327,3,88,0,327, -3,89,0,327,3, -90,0,327,3,95, -0,327,3,97,0, -327,3,98,0,327, -3,99,0,327,3, -100,0,327,3,101, -0,327,3,102,0, -327,3,103,0,327, -3,104,0,327,3, -105,0,327,3,106, -0,327,3,107,0, -327,3,108,0,327, -875,11,1,829,0, -330,1,-1,3,112, -0,327,3,113,0, -327,3,114,0,327, -3,115,0,327,3, -116,0,327,3,117, -0,327,3,118,0, -327,3,119,0,327, -3,120,0,327,3, -121,0,327,3,122, -0,327,3,48,0, -327,3,49,0,327, -3,50,0,327,3, -51,0,327,3,52, -0,327,3,53,0, -327,3,54,0,327, -3,55,0,327,3, -56,0,327,3,57, -0,327,3,65,0, -327,3,66,0,327, -3,67,0,327,3, -68,0,327,3,69, -0,327,3,70,0, -327,3,71,0,327, -3,72,0,327,3, -73,0,327,3,74, -0,327,3,75,0, -327,3,76,0,327, -3,77,0,327,3, -78,0,327,3,79, -0,327,3,80,0, -327,3,81,0,327, -3,82,0,327,3, -83,0,327,3,84, -0,327,3,85,0, -327,3,86,0,327, -3,87,0,327,3, -88,0,327,3,89, -0,327,3,90,0, -327,3,95,0,327, -3,97,0,327,3, -98,0,327,3,99, -0,327,3,100,0, -327,3,101,0,327, -3,102,0,327,3, -103,0,327,3,104, -0,327,3,105,0, -327,3,106,0,327, -3,107,0,327,3, -108,0,327,876,11, -1,829,0,330,1, --1,3,110,0,877, -12,1,3451,878,5, -63,3,109,0,327, -3,110,0,327,3, -111,0,879,12,1, -3481,880,5,63,3, -109,0,327,3,110, -0,327,3,111,0, -327,3,112,0,327, -3,113,0,327,3, -114,0,327,3,115, -0,327,3,116,0, -881,12,1,3516,882, -5,63,3,109,0, -327,3,110,0,327, -3,111,0,327,3, -112,0,327,3,113, -0,327,3,114,0, -327,3,115,0,327, -3,116,0,327,3, -117,0,327,3,118, -0,327,3,119,0, -327,3,120,0,327, -3,121,0,327,3, -122,0,327,3,48, -0,327,3,49,0, -327,3,50,0,327, -3,51,0,327,3, -52,0,327,3,53, -0,327,3,54,0, -327,3,55,0,327, -3,56,0,327,3, -57,0,327,3,65, -0,327,3,66,0, -327,3,67,0,327, -3,68,0,327,3, -69,0,327,3,70, -0,327,3,71,0, -327,3,72,0,327, -3,73,0,327,3, -74,0,327,3,75, -0,327,3,76,0, -327,3,77,0,327, -3,78,0,327,3, -79,0,327,3,80, -0,327,3,81,0, -327,3,82,0,327, -3,83,0,327,3, -84,0,327,3,85, -0,327,3,86,0, -327,3,87,0,327, -3,88,0,327,3, -89,0,327,3,90, -0,327,3,95,0, -883,12,1,3602,884, -5,63,3,109,0, -327,3,110,0,327, -3,111,0,327,3, -112,0,327,3,113, -0,327,3,114,0, -327,3,115,0,327, -3,116,0,327,3, -117,0,327,3,118, -0,327,3,119,0, -327,3,120,0,327, -3,121,0,327,3, -122,0,327,3,48, -0,327,3,49,0, -327,3,50,0,327, -3,51,0,327,3, -52,0,327,3,53, -0,327,3,54,0, -327,3,55,0,327, -3,56,0,327,3, -57,0,327,3,65, -0,327,3,66,0, -327,3,67,0,327, -3,68,0,327,3, -69,0,327,3,70, -0,327,3,71,0, -327,3,72,0,327, -3,73,0,327,3, -74,0,327,3,75, -0,327,3,76,0, -327,3,77,0,327, -3,78,0,327,3, -79,0,327,3,80, -0,327,3,81,0, -327,3,82,0,327, -3,83,0,327,3, -84,0,327,3,85, -0,327,3,86,0, -327,3,87,0,327, -3,88,0,327,3, -89,0,327,3,90, -0,327,3,95,0, -327,3,97,0,885, -12,1,3645,886,5, -63,3,109,0,327, -3,110,0,327,3, -111,0,327,3,112, -0,327,3,113,0, -327,3,114,0,327, -3,115,0,327,3, -116,0,887,12,1, -3680,888,5,63,3, -109,0,327,3,110, -0,327,3,111,0, -327,3,112,0,327, -3,113,0,327,3, -114,0,327,3,115, -0,327,3,116,0, -327,3,117,0,327, -3,118,0,327,3, -119,0,327,3,120, -0,327,3,121,0, -327,3,122,0,327, -3,48,0,327,3, -49,0,327,3,50, -0,327,3,51,0, -327,3,52,0,327, -3,53,0,327,3, -54,0,327,3,55, -0,327,3,56,0, -327,3,57,0,327, -3,65,0,327,3, -66,0,327,3,67, -0,327,3,68,0, -327,3,69,0,327, -3,70,0,327,3, -71,0,327,3,72, -0,327,3,73,0, -327,3,74,0,327, -3,75,0,327,3, -76,0,327,3,77, -0,327,3,78,0, -327,3,79,0,327, -3,80,0,327,3, -81,0,327,3,82, -0,327,3,83,0, -327,3,84,0,327, -3,85,0,327,3, -86,0,327,3,87, -0,327,3,88,0, -327,3,89,0,327, -3,90,0,327,3, -95,0,889,12,1, -3766,890,5,63,3, -109,0,327,3,110, -0,327,3,111,0, -327,3,112,0,327, -3,113,0,327,3, -114,0,891,12,1, -3799,892,5,63,3, -109,0,327,3,110, -0,327,3,111,0, -893,12,1,3829,894, -5,63,3,109,0, -327,3,110,0,327, -3,111,0,327,3, -112,0,327,3,113, -0,327,3,114,0, -327,3,115,0,327, -3,116,0,895,12, -1,3864,896,5,63, -3,109,0,327,3, -110,0,327,3,111, -0,327,3,112,0, -327,3,113,0,327, -3,114,0,327,3, -115,0,327,3,116, -0,327,3,117,0, -327,3,118,0,327, -3,119,0,327,3, -120,0,327,3,121, -0,327,3,122,0, -327,3,48,0,327, -3,49,0,327,3, -50,0,327,3,51, -0,327,3,52,0, -327,3,53,0,327, -3,54,0,327,3, -55,0,327,3,56, -0,327,3,57,0, -327,3,65,0,327, -3,66,0,327,3, -67,0,327,3,68, -0,327,3,69,0, -327,3,70,0,327, -3,71,0,327,3, -72,0,327,3,73, -0,327,3,74,0, -327,3,75,0,327, -3,76,0,327,3, -77,0,327,3,78, -0,327,3,79,0, -327,3,80,0,327, -3,81,0,327,3, -82,0,327,3,83, -0,327,3,84,0, -327,3,85,0,327, -3,86,0,327,3, -87,0,327,3,88, -0,327,3,89,0, -327,3,90,0,327, -3,95,0,897,12, -1,3950,898,5,63, -3,109,0,327,3, -110,0,327,3,111, -0,327,3,112,0, -327,3,113,0,327, -3,114,0,327,3, -115,0,327,3,116, -0,899,12,1,3985, -900,5,63,3,109, -0,327,3,110,0, -327,3,111,0,327, -3,112,0,327,3, -113,0,327,3,114, -0,327,3,115,0, -327,3,116,0,327, -3,117,0,327,3, -118,0,327,3,119, -0,327,3,120,0, -327,3,121,0,327, -3,122,0,327,3, -48,0,327,3,49, -0,327,3,50,0, -327,3,51,0,327, -3,52,0,327,3, -53,0,327,3,54, -0,327,3,55,0, -327,3,56,0,327, -3,57,0,327,3, -65,0,327,3,66, -0,327,3,67,0, -327,3,68,0,327, -3,69,0,327,3, -70,0,327,3,71, -0,327,3,72,0, -327,3,73,0,327, -3,74,0,327,3, -75,0,327,3,76, -0,327,3,77,0, -327,3,78,0,327, -3,79,0,327,3, -80,0,327,3,81, -0,327,3,82,0, -327,3,83,0,327, -3,84,0,327,3, -85,0,327,3,86, -0,327,3,87,0, -327,3,88,0,327, -3,89,0,327,3, -90,0,327,3,95, -0,327,3,97,0, -901,12,1,4028,902, -5,63,3,109,0, -327,3,110,0,327, -3,111,0,327,3, -112,0,327,3,113, -0,327,3,114,0, -903,12,1,4061,904, -5,63,3,109,0, -327,3,110,0,327, -3,111,0,327,3, -112,0,327,3,113, -0,327,3,114,0, -327,3,115,0,327, -3,116,0,327,3, -117,0,327,3,118, -0,327,3,119,0, -327,3,120,0,327, -3,121,0,327,3, -122,0,327,3,48, -0,327,3,49,0, -327,3,50,0,327, -3,51,0,327,3, -52,0,327,3,53, -0,327,3,54,0, -327,3,55,0,327, -3,56,0,327,3, -57,0,327,3,65, -0,327,3,66,0, -327,3,67,0,327, -3,68,0,327,3, -69,0,327,3,70, -0,327,3,71,0, -327,3,72,0,327, -3,73,0,327,3, -74,0,327,3,75, -0,327,3,76,0, -327,3,77,0,327, -3,78,0,327,3, -79,0,327,3,80, -0,327,3,81,0, -327,3,82,0,327, -3,83,0,327,3, -84,0,327,3,85, -0,327,3,86,0, -327,3,87,0,327, -3,88,0,327,3, -89,0,327,3,90, -0,327,3,95,0, -327,3,97,0,327, -3,98,0,327,3, -99,0,327,3,100, -0,327,3,101,0, -327,3,102,0,327, -3,103,0,905,12, -1,4110,906,5,63, -3,109,0,327,3, -110,0,327,3,111, -0,327,3,112,0, -327,3,113,0,327, -3,114,0,327,3, -115,0,327,3,116, -0,327,3,117,0, -327,3,118,0,327, -3,119,0,327,3, -120,0,327,3,121, -0,327,3,122,0, -327,3,48,0,327, -3,49,0,327,3, -50,0,327,3,51, -0,327,3,52,0, -327,3,53,0,327, -3,54,0,327,3, -55,0,327,3,56, -0,327,3,57,0, -327,3,65,0,327, -3,66,0,327,3, -67,0,327,3,68, -0,327,3,69,0, -327,3,70,0,327, -3,71,0,327,3, -72,0,327,3,73, -0,327,3,74,0, -327,3,75,0,327, -3,76,0,327,3, -77,0,327,3,78, -0,327,3,79,0, -327,3,80,0,327, -3,81,0,327,3, -82,0,327,3,83, -0,327,3,84,0, -327,3,85,0,327, -3,86,0,327,3, -87,0,327,3,88, -0,327,3,89,0, -327,3,90,0,327, -3,95,0,327,3, -97,0,327,3,98, -0,327,3,99,0, -327,3,100,0,327, -3,101,0,907,12, -1,4157,908,5,63, -3,109,0,327,3, -110,0,327,3,111, -0,327,3,112,0, -327,3,113,0,327, -3,114,0,327,3, -115,0,327,3,116, -0,909,12,1,4192, -910,5,63,3,109, -0,327,3,110,0, -327,3,111,0,327, -3,112,0,327,3, -113,0,327,3,114, -0,327,3,115,0, -327,3,116,0,327, -3,117,0,327,3, -118,0,327,3,119, -0,327,3,120,0, -327,3,121,0,327, -3,122,0,327,3, -48,0,327,3,49, -0,327,3,50,0, -327,3,51,0,327, -3,52,0,327,3, -53,0,327,3,54, -0,327,3,55,0, -327,3,56,0,327, -3,57,0,327,3, -65,0,327,3,66, -0,327,3,67,0, -327,3,68,0,327, -3,69,0,327,3, -70,0,327,3,71, -0,327,3,72,0, -327,3,73,0,327, -3,74,0,327,3, -75,0,327,3,76, -0,327,3,77,0, -327,3,78,0,327, -3,79,0,327,3, -80,0,327,3,81, -0,327,3,82,0, -327,3,83,0,327, -3,84,0,327,3, -85,0,327,3,86, -0,327,3,87,0, -327,3,88,0,327, -3,89,0,327,3, -90,0,327,3,95, -0,327,3,97,0, -327,3,98,0,327, -3,99,0,327,3, -100,0,327,3,101, -0,327,3,102,0, -327,3,103,0,327, -3,104,0,327,3, -105,0,327,3,106, -0,327,3,107,0, -327,3,108,0,327, -911,11,1,643,0, -912,4,46,78,0, -79,0,84,0,95, -0,65,0,84,0, -95,0,82,0,79, -0,84,0,95,0, -84,0,65,0,82, -0,71,0,69,0, -84,0,95,0,69, -0,86,0,69,0, -78,0,84,0,1, --1,3,117,0,327, -3,118,0,327,3, -119,0,327,3,120, -0,327,3,121,0, -327,3,122,0,327, -3,48,0,327,3, -49,0,327,3,50, -0,327,3,51,0, -327,3,52,0,327, -3,53,0,327,3, -54,0,327,3,55, -0,327,3,56,0, -327,3,57,0,327, -3,65,0,327,3, -66,0,327,3,67, -0,327,3,68,0, -327,3,69,0,327, -3,70,0,327,3, -71,0,327,3,72, -0,327,3,73,0, -327,3,74,0,327, -3,75,0,327,3, -76,0,327,3,77, -0,327,3,78,0, -327,3,79,0,327, -3,80,0,327,3, -81,0,327,3,82, -0,327,3,83,0, -327,3,84,0,327, -3,85,0,327,3, -86,0,327,3,87, -0,327,3,88,0, -327,3,89,0,327, -3,90,0,327,3, -95,0,327,3,97, -0,327,3,98,0, -327,3,99,0,327, -3,100,0,327,3, -101,0,327,3,102, -0,327,3,103,0, -327,3,104,0,327, -3,105,0,327,3, -106,0,327,3,107, -0,327,3,108,0, -327,913,11,1,829, -0,330,1,-1,3, -102,0,327,3,103, -0,327,3,104,0, -327,3,105,0,327, -3,106,0,327,3, -107,0,327,3,108, -0,327,914,11,1, -829,0,330,1,-1, -3,104,0,327,3, -105,0,327,3,106, -0,327,3,107,0, -327,3,108,0,327, -915,11,1,829,0, -330,1,-1,3,115, -0,327,3,116,0, -327,3,117,0,327, -3,118,0,327,3, -119,0,327,3,120, -0,327,3,121,0, -327,3,122,0,327, -3,48,0,327,3, -49,0,327,3,50, -0,327,3,51,0, -327,3,52,0,327, -3,53,0,327,3, -54,0,327,3,55, -0,327,3,56,0, -327,3,57,0,327, -3,65,0,327,3, -66,0,327,3,67, -0,327,3,68,0, -327,3,69,0,327, -3,70,0,327,3, -71,0,327,3,72, -0,327,3,73,0, -327,3,74,0,327, -3,75,0,327,3, -76,0,327,3,77, -0,327,3,78,0, -327,3,79,0,327, -3,80,0,327,3, -81,0,327,3,82, -0,327,3,83,0, -327,3,84,0,327, -3,85,0,327,3, -86,0,327,3,87, -0,327,3,88,0, -327,3,89,0,327, -3,90,0,327,3, -95,0,327,3,97, -0,327,3,98,0, -327,3,99,0,327, -3,100,0,327,3, -101,0,327,3,102, -0,327,3,103,0, -327,3,104,0,327, -3,105,0,327,3, -106,0,327,3,107, -0,327,3,108,0, -327,916,11,1,829, -0,330,1,-1,3, -98,0,327,3,99, -0,327,3,100,0, -327,3,101,0,327, -3,102,0,327,3, -103,0,327,3,104, -0,327,3,105,0, -327,3,106,0,327, -3,107,0,327,3, -108,0,327,917,11, -1,829,0,330,1, --1,3,117,0,327, -3,118,0,327,3, -119,0,327,3,120, -0,327,3,121,0, -327,3,122,0,327, -3,48,0,327,3, -49,0,327,3,50, -0,327,3,51,0, -327,3,52,0,327, -3,53,0,327,3, -54,0,327,3,55, -0,327,3,56,0, -327,3,57,0,327, -3,65,0,327,3, -66,0,327,3,67, -0,327,3,68,0, -327,3,69,0,327, -3,70,0,327,3, -71,0,327,3,72, -0,327,3,73,0, -327,3,74,0,327, -3,75,0,327,3, -76,0,327,3,77, -0,327,3,78,0, -327,3,79,0,327, -3,80,0,327,3, -81,0,327,3,82, -0,327,3,83,0, -327,3,84,0,327, -3,85,0,327,3, -86,0,327,3,87, -0,327,3,88,0, -327,3,89,0,327, -3,90,0,327,3, -95,0,327,3,97, -0,327,3,98,0, -327,3,99,0,327, -3,100,0,327,3, -101,0,327,3,102, -0,327,3,103,0, -327,3,104,0,327, -3,105,0,327,3, -106,0,327,3,107, -0,327,3,108,0, -327,918,11,1,829, -0,330,1,-1,3, -97,0,327,3,98, -0,327,3,99,0, -327,3,100,0,327, -3,101,0,327,3, -102,0,327,3,103, -0,327,3,104,0, -327,3,105,0,327, -3,106,0,327,3, -107,0,327,3,108, -0,327,919,11,1, -829,0,330,1,-1, -3,117,0,327,3, -118,0,327,3,119, -0,327,3,120,0, -327,3,121,0,327, -3,122,0,327,3, -48,0,327,3,49, -0,327,3,50,0, -327,3,51,0,327, -3,52,0,327,3, -53,0,327,3,54, -0,327,3,55,0, -327,3,56,0,327, -3,57,0,327,3, -65,0,327,3,66, -0,327,3,67,0, -327,3,68,0,327, -3,69,0,327,3, -70,0,327,3,71, -0,327,3,72,0, -327,3,73,0,327, -3,74,0,327,3, -75,0,327,3,76, -0,327,3,77,0, -327,3,78,0,327, -3,79,0,327,3, -80,0,327,3,81, -0,327,3,82,0, -327,3,83,0,327, -3,84,0,327,3, -85,0,327,3,86, -0,327,3,87,0, -327,3,88,0,327, -3,89,0,327,3, -90,0,327,3,95, -0,327,3,97,0, -327,3,98,0,327, -3,99,0,327,3, -100,0,327,3,101, -0,327,3,102,0, -327,3,103,0,327, -3,104,0,327,3, -105,0,327,3,106, -0,327,3,107,0, -327,3,108,0,327, -920,11,1,829,0, -330,1,-1,3,112, -0,327,3,113,0, -327,3,114,0,327, -3,115,0,327,3, -116,0,327,3,117, -0,327,3,118,0, -327,3,119,0,327, -3,120,0,327,3, -121,0,327,3,122, -0,327,3,48,0, -327,3,49,0,327, -3,50,0,327,3, -51,0,327,3,52, -0,327,3,53,0, -327,3,54,0,327, -3,55,0,327,3, -56,0,327,3,57, -0,327,3,65,0, -327,3,66,0,327, -3,67,0,327,3, -68,0,327,3,69, -0,327,3,70,0, -327,3,71,0,327, -3,72,0,327,3, -73,0,327,3,74, -0,327,3,75,0, -327,3,76,0,327, -3,77,0,327,3, -78,0,327,3,79, -0,327,3,80,0, -327,3,81,0,327, -3,82,0,327,3, -83,0,327,3,84, -0,327,3,85,0, -327,3,86,0,327, -3,87,0,327,3, -88,0,327,3,89, -0,327,3,90,0, -327,3,95,0,327, -3,97,0,327,3, -98,0,327,3,99, -0,327,3,100,0, -327,3,101,0,327, -3,102,0,327,3, -103,0,327,3,104, -0,327,3,105,0, -327,3,106,0,327, -3,107,0,327,3, -108,0,327,921,11, -1,829,0,330,1, --1,3,115,0,327, -3,116,0,922,12, -1,5001,923,5,63, -3,109,0,327,3, -110,0,327,3,111, -0,327,3,112,0, -327,3,113,0,327, -3,114,0,327,3, -115,0,327,3,116, -0,327,3,117,0, -327,3,118,0,327, -3,119,0,327,3, -120,0,327,3,121, -0,327,3,122,0, -327,3,48,0,327, -3,49,0,327,3, -50,0,327,3,51, -0,327,3,52,0, -327,3,53,0,327, -3,54,0,327,3, -55,0,327,3,56, -0,327,3,57,0, -327,3,65,0,327, -3,66,0,327,3, -67,0,327,3,68, -0,327,3,69,0, -327,3,70,0,327, -3,71,0,327,3, -72,0,327,3,73, -0,327,3,74,0, -327,3,75,0,327, -3,76,0,327,3, -77,0,327,3,78, -0,327,3,79,0, -327,3,80,0,327, -3,81,0,327,3, -82,0,327,3,83, -0,327,3,84,0, -327,3,85,0,327, -3,86,0,327,3, -87,0,327,3,88, -0,327,3,89,0, -327,3,90,0,327, -3,95,0,327,3, -97,0,924,12,1, -5044,925,5,63,3, -109,0,327,3,110, -0,327,3,111,0, -327,3,112,0,327, -3,113,0,327,3, -114,0,926,12,1, -5077,927,5,63,3, -109,0,327,3,110, -0,327,3,111,0, -327,3,112,0,327, -3,113,0,327,3, -114,0,327,3,115, -0,327,3,116,0, -327,3,117,0,327, -3,118,0,327,3, -119,0,327,3,120, -0,327,3,121,0, -327,3,122,0,327, -3,48,0,327,3, -49,0,327,3,50, -0,327,3,51,0, -327,3,52,0,327, -3,53,0,327,3, -54,0,327,3,55, -0,327,3,56,0, -327,3,57,0,327, -3,65,0,327,3, -66,0,327,3,67, -0,327,3,68,0, -327,3,69,0,327, -3,70,0,327,3, -71,0,327,3,72, -0,327,3,73,0, -327,3,74,0,327, -3,75,0,327,3, -76,0,327,3,77, -0,327,3,78,0, -327,3,79,0,327, -3,80,0,327,3, -81,0,327,3,82, -0,327,3,83,0, -327,3,84,0,327, -3,85,0,327,3, -86,0,327,3,87, -0,327,3,88,0, -327,3,89,0,327, -3,90,0,327,3, -95,0,327,3,97, -0,327,3,98,0, -327,3,99,0,327, -3,100,0,327,3, -101,0,327,3,102, -0,327,3,103,0, -928,12,1,5126,929, -5,63,3,109,0, -327,3,110,0,327, -3,111,0,327,3, -112,0,327,3,113, -0,327,3,114,0, -327,3,115,0,327, -3,116,0,327,3, -117,0,327,3,118, -0,327,3,119,0, -327,3,120,0,327, -3,121,0,327,3, -122,0,327,3,48, -0,327,3,49,0, -327,3,50,0,327, -3,51,0,327,3, -52,0,327,3,53, -0,327,3,54,0, -327,3,55,0,327, -3,56,0,327,3, -57,0,327,3,65, -0,327,3,66,0, -327,3,67,0,327, -3,68,0,327,3, -69,0,327,3,70, -0,327,3,71,0, -327,3,72,0,327, -3,73,0,327,3, -74,0,327,3,75, -0,327,3,76,0, -327,3,77,0,327, -3,78,0,327,3, -79,0,327,3,80, -0,327,3,81,0, -327,3,82,0,327, -3,83,0,327,3, -84,0,327,3,85, -0,327,3,86,0, -327,3,87,0,327, -3,88,0,327,3, -89,0,327,3,90, -0,327,3,95,0, -327,3,97,0,327, -3,98,0,327,3, -99,0,327,3,100, -0,327,3,101,0, -930,12,1,5173,931, -5,63,3,109,0, -327,3,110,0,327, -3,111,0,327,3, -112,0,327,3,113, -0,327,3,114,0, -327,3,115,0,327, -3,116,0,932,12, -1,5208,933,5,63, -3,109,0,327,3, -110,0,327,3,111, -0,327,3,112,0, -327,3,113,0,327, -3,114,0,327,3, -115,0,327,3,116, -0,327,3,117,0, -327,3,118,0,327, -3,119,0,327,3, -120,0,327,3,121, -0,327,3,122,0, -327,3,48,0,327, -3,49,0,327,3, -50,0,327,3,51, -0,327,3,52,0, -327,3,53,0,327, -3,54,0,327,3, -55,0,327,3,56, -0,327,3,57,0, -327,3,65,0,327, -3,66,0,327,3, -67,0,327,3,68, -0,327,3,69,0, -327,3,70,0,327, -3,71,0,327,3, -72,0,327,3,73, -0,327,3,74,0, -327,3,75,0,327, -3,76,0,327,3, -77,0,327,3,78, -0,327,3,79,0, -327,3,80,0,327, -3,81,0,327,3, -82,0,327,3,83, -0,327,3,84,0, -327,3,85,0,327, -3,86,0,327,3, -87,0,327,3,88, -0,327,3,89,0, -327,3,90,0,327, -3,95,0,327,3, -97,0,327,3,98, -0,327,3,99,0, -327,3,100,0,327, -3,101,0,327,3, -102,0,327,3,103, -0,327,3,104,0, -327,3,105,0,327, -3,106,0,327,3, -107,0,327,3,108, -0,327,934,11,1, -664,0,935,4,38, -78,0,79,0,84, -0,95,0,65,0, -84,0,95,0,84, -0,65,0,82,0, -71,0,69,0,84, -0,95,0,69,0, -86,0,69,0,78, -0,84,0,1,-1, -3,117,0,327,3, -118,0,327,3,119, -0,327,3,120,0, -327,3,121,0,327, -3,122,0,327,3, -48,0,327,3,49, -0,327,3,50,0, -327,3,51,0,327, -3,52,0,327,3, -53,0,327,3,54, -0,327,3,55,0, -327,3,56,0,327, -3,57,0,327,3, -65,0,327,3,66, -0,327,3,67,0, -327,3,68,0,327, -3,69,0,327,3, -70,0,327,3,71, -0,327,3,72,0, -327,3,73,0,327, -3,74,0,327,3, -75,0,327,3,76, -0,327,3,77,0, -327,3,78,0,327, -3,79,0,327,3, -80,0,327,3,81, -0,327,3,82,0, -327,3,83,0,327, -3,84,0,327,3, -85,0,327,3,86, -0,327,3,87,0, -327,3,88,0,327, -3,89,0,327,3, -90,0,327,3,95, -0,327,3,97,0, -327,3,98,0,327, -3,99,0,327,3, -100,0,327,3,101, -0,327,3,102,0, -327,3,103,0,327, -3,104,0,327,3, -105,0,327,3,106, -0,327,3,107,0, -327,3,108,0,327, -936,11,1,829,0, -330,1,-1,3,102, -0,327,3,103,0, -327,3,104,0,327, -3,105,0,327,3, -106,0,327,3,107, -0,327,3,108,0, -327,937,11,1,829, -0,330,1,-1,3, -104,0,327,3,105, -0,327,3,106,0, -327,3,107,0,327, -3,108,0,327,938, -11,1,829,0,330, -1,-1,3,115,0, -327,3,116,0,327, -3,117,0,327,3, -118,0,327,3,119, -0,327,3,120,0, -327,3,121,0,327, -3,122,0,327,3, -48,0,327,3,49, -0,327,3,50,0, -327,3,51,0,327, -3,52,0,327,3, -53,0,327,3,54, -0,327,3,55,0, -327,3,56,0,327, -3,57,0,327,3, -65,0,327,3,66, -0,327,3,67,0, -327,3,68,0,327, -3,69,0,327,3, -70,0,327,3,71, -0,327,3,72,0, -327,3,73,0,327, -3,74,0,327,3, -75,0,327,3,76, -0,327,3,77,0, -327,3,78,0,327, -3,79,0,327,3, -80,0,327,3,81, -0,327,3,82,0, -327,3,83,0,327, -3,84,0,327,3, -85,0,327,3,86, -0,327,3,87,0, -327,3,88,0,327, -3,89,0,327,3, -90,0,327,3,95, -0,327,3,97,0, -327,3,98,0,327, -3,99,0,327,3, -100,0,327,3,101, -0,327,3,102,0, -327,3,103,0,327, -3,104,0,327,3, -105,0,327,3,106, -0,327,3,107,0, -327,3,108,0,327, -939,11,1,829,0, -330,1,-1,3,98, -0,327,3,99,0, -327,3,100,0,327, -3,101,0,327,3, -102,0,327,3,103, -0,327,3,104,0, -327,3,105,0,327, -3,106,0,327,3, -107,0,327,3,108, -0,327,940,11,1, -829,0,330,1,-1, -3,117,0,327,3, -118,0,327,3,119, -0,327,3,120,0, -327,3,121,0,327, -3,122,0,327,3, -48,0,327,3,49, -0,327,3,50,0, -327,3,51,0,327, -3,52,0,327,3, -53,0,327,3,54, -0,327,3,55,0, -327,3,56,0,327, -3,57,0,327,3, -65,0,327,3,66, -0,327,3,67,0, -327,3,68,0,327, -3,69,0,327,3, -70,0,327,3,71, -0,327,3,72,0, -327,3,73,0,327, -3,74,0,327,3, -75,0,327,3,76, -0,327,3,77,0, -327,3,78,0,327, -3,79,0,327,3, -80,0,327,3,81, -0,327,3,82,0, -327,3,83,0,327, -3,84,0,327,3, -85,0,327,3,86, -0,327,3,87,0, -327,3,88,0,327, -3,89,0,327,3, -90,0,327,3,95, -0,327,3,97,0, -327,3,98,0,327, -3,99,0,327,3, -100,0,327,3,101, -0,327,3,102,0, -327,3,103,0,327, -3,104,0,327,3, -105,0,327,3,106, -0,327,3,107,0, -327,3,108,0,327, -941,11,1,829,0, -330,1,-1,3,97, -0,327,3,98,0, -327,3,99,0,327, -3,100,0,327,3, -101,0,327,3,102, -0,327,3,103,0, -327,3,104,0,327, -3,105,0,327,3, -106,0,327,3,107, -0,327,3,108,0, -327,942,11,1,829, -0,330,1,-1,3, -117,0,327,3,118, -0,327,3,119,0, -327,3,120,0,327, -3,121,0,327,3, -122,0,327,3,48, -0,327,3,49,0, -327,3,50,0,327, -3,51,0,327,3, -52,0,327,3,53, -0,327,3,54,0, -327,3,55,0,327, -3,56,0,327,3, -57,0,327,3,65, -0,327,3,66,0, -327,3,67,0,327, -3,68,0,327,3, -69,0,327,3,70, -0,327,3,71,0, -327,3,72,0,327, -3,73,0,327,3, -74,0,327,3,75, -0,327,3,76,0, -327,3,77,0,327, -3,78,0,327,3, -79,0,327,3,80, -0,327,3,81,0, -327,3,82,0,327, -3,83,0,327,3, -84,0,327,3,85, -0,327,3,86,0, -327,3,87,0,327, -3,88,0,327,3, -89,0,327,3,90, -0,327,3,95,0, -327,3,97,0,327, -3,98,0,327,3, -99,0,327,3,100, -0,327,3,101,0, -327,3,102,0,327, -3,103,0,327,3, -104,0,327,3,105, -0,327,3,106,0, -327,3,107,0,327, -3,108,0,327,943, -11,1,829,0,330, -1,-1,3,98,0, -327,3,99,0,327, -3,100,0,327,3, -101,0,327,3,102, -0,327,3,103,0, -327,3,104,0,327, -3,105,0,327,3, -106,0,327,3,107, -0,327,3,108,0, -327,944,11,1,829, -0,330,1,-1,3, -97,0,327,3,98, -0,327,3,99,0, -327,3,100,0,327, -3,101,0,327,3, -102,0,327,3,103, -0,327,3,104,0, -327,3,105,0,327, -3,106,0,327,3, -107,0,327,3,108, -0,327,945,11,1, -829,0,330,1,-1, -3,117,0,327,3, -118,0,327,3,119, -0,327,3,120,0, -327,3,121,0,327, -3,122,0,327,3, -48,0,327,3,49, -0,327,3,50,0, -327,3,51,0,327, -3,52,0,327,3, -53,0,327,3,54, -0,327,3,55,0, -327,3,56,0,327, -3,57,0,327,3, -65,0,327,3,66, -0,327,3,67,0, -327,3,68,0,327, -3,69,0,327,3, -70,0,327,3,71, -0,327,3,72,0, -327,3,73,0,327, -3,74,0,327,3, -75,0,327,3,76, -0,327,3,77,0, -327,3,78,0,327, -3,79,0,327,3, -80,0,327,3,81, -0,327,3,82,0, -327,3,83,0,327, -3,84,0,327,3, -85,0,327,3,86, -0,327,3,87,0, -327,3,88,0,327, -3,89,0,327,3, -90,0,327,3,95, -0,946,12,1,6087, -947,5,63,3,109, -0,327,3,110,0, -327,3,111,0,327, -3,112,0,327,3, -113,0,327,3,114, -0,327,3,115,0, -948,12,1,6121,949, -5,63,3,109,0, -327,3,110,0,327, -3,111,0,327,3, -112,0,327,3,113, -0,327,3,114,0, -327,3,115,0,327, -3,116,0,327,3, -117,0,327,3,118, -0,327,3,119,0, -327,3,120,0,327, -3,121,0,327,3, -122,0,327,3,48, -0,327,3,49,0, -327,3,50,0,327, -3,51,0,327,3, -52,0,327,3,53, -0,327,3,54,0, -327,3,55,0,327, -3,56,0,327,3, -57,0,327,3,65, -0,327,3,66,0, -327,3,67,0,327, -3,68,0,327,3, -69,0,327,3,70, -0,327,3,71,0, -327,3,72,0,327, -3,73,0,327,3, -74,0,327,3,75, -0,327,3,76,0, -327,3,77,0,327, -3,78,0,327,3, -79,0,327,3,80, -0,327,3,81,0, -327,3,82,0,327, -3,83,0,327,3, -84,0,327,3,85, -0,327,3,86,0, -327,3,87,0,327, -3,88,0,327,3, -89,0,327,3,90, -0,327,3,95,0, -327,3,97,0,327, -3,98,0,327,3, -99,0,327,3,100, -0,327,3,101,0, -950,12,1,6168,951, -5,63,3,109,0, -327,3,110,0,952, -12,1,6197,953,5, -63,3,109,0,327, -3,110,0,327,3, -111,0,327,3,112, -0,327,3,113,0, -327,3,114,0,327, -3,115,0,954,12, -1,6231,955,5,63, -3,109,0,327,3, -110,0,327,3,111, -0,956,12,1,6261, -957,5,63,3,109, -0,327,3,110,0, -327,3,111,0,327, -3,112,0,327,3, -113,0,327,3,114, -0,958,12,1,6294, -959,5,63,3,109, -0,327,3,110,0, -327,3,111,0,327, -3,112,0,327,3, -113,0,327,3,114, -0,327,3,115,0, -327,3,116,0,327, -3,117,0,327,3, -118,0,327,3,119, -0,327,3,120,0, -327,3,121,0,327, -3,122,0,327,3, -48,0,327,3,49, -0,327,3,50,0, -327,3,51,0,327, -3,52,0,327,3, -53,0,327,3,54, -0,327,3,55,0, -327,3,56,0,327, -3,57,0,327,3, -65,0,327,3,66, -0,327,3,67,0, -327,3,68,0,327, -3,69,0,327,3, -70,0,327,3,71, -0,327,3,72,0, -327,3,73,0,327, -3,74,0,327,3, -75,0,327,3,76, -0,327,3,77,0, -327,3,78,0,327, -3,79,0,327,3, -80,0,327,3,81, -0,327,3,82,0, -327,3,83,0,327, -3,84,0,327,3, -85,0,327,3,86, -0,327,3,87,0, -327,3,88,0,327, -3,89,0,327,3, -90,0,327,3,95, -0,327,3,97,0, -327,3,98,0,327, -3,99,0,327,3, -100,0,327,3,101, -0,327,3,102,0, -327,3,103,0,327, -3,104,0,327,3, -105,0,327,3,106, -0,327,3,107,0, -327,3,108,0,327, -960,11,1,630,0, -961,4,30,78,0, -79,0,95,0,83, -0,69,0,78,0, -83,0,79,0,82, -0,95,0,69,0, -86,0,69,0,78, -0,84,0,1,-1, -3,115,0,327,3, -116,0,327,3,117, -0,327,3,118,0, -327,3,119,0,327, -3,120,0,327,3, -121,0,327,3,122, -0,327,3,48,0, -327,3,49,0,327, -3,50,0,327,3, -51,0,327,3,52, -0,327,3,53,0, -327,3,54,0,327, -3,55,0,327,3, -56,0,327,3,57, -0,327,3,65,0, -327,3,66,0,327, -3,67,0,327,3, -68,0,327,3,69, -0,327,3,70,0, -327,3,71,0,327, -3,72,0,327,3, -73,0,327,3,74, -0,327,3,75,0, -327,3,76,0,327, -3,77,0,327,3, -78,0,327,3,79, -0,327,3,80,0, -327,3,81,0,327, -3,82,0,327,3, -83,0,327,3,84, -0,327,3,85,0, -327,3,86,0,327, -3,87,0,327,3, -88,0,327,3,89, -0,327,3,90,0, -327,3,95,0,327, -3,97,0,327,3, -98,0,327,3,99, -0,327,3,100,0, -327,3,101,0,327, -3,102,0,327,3, -103,0,327,3,104, -0,327,3,105,0, -327,3,106,0,327, -3,107,0,327,3, -108,0,327,962,11, -1,829,0,330,1, --1,3,112,0,327, -3,113,0,327,3, -114,0,327,3,115, -0,327,3,116,0, -327,3,117,0,327, -3,118,0,327,3, -119,0,327,3,120, -0,327,3,121,0, -327,3,122,0,327, -3,48,0,327,3, -49,0,327,3,50, -0,327,3,51,0, -327,3,52,0,327, -3,53,0,327,3, -54,0,327,3,55, -0,327,3,56,0, -327,3,57,0,327, -3,65,0,327,3, -66,0,327,3,67, -0,327,3,68,0, -327,3,69,0,327, -3,70,0,327,3, -71,0,327,3,72, -0,327,3,73,0, -327,3,74,0,327, -3,75,0,327,3, -76,0,327,3,77, -0,327,3,78,0, -327,3,79,0,327, -3,80,0,327,3, -81,0,327,3,82, -0,327,3,83,0, -327,3,84,0,327, -3,85,0,327,3, -86,0,327,3,87, -0,327,3,88,0, -327,3,89,0,327, -3,90,0,327,3, -95,0,327,3,97, -0,327,3,98,0, -327,3,99,0,327, -3,100,0,327,3, -101,0,327,3,102, -0,327,3,103,0, -327,3,104,0,327, -3,105,0,327,3, -106,0,327,3,107, -0,327,3,108,0, -327,963,11,1,829, -0,330,1,-1,3, -116,0,327,3,117, -0,327,3,118,0, -327,3,119,0,327, -3,120,0,327,3, -121,0,327,3,122, -0,327,3,48,0, -327,3,49,0,327, -3,50,0,327,3, -51,0,327,3,52, -0,327,3,53,0, -327,3,54,0,327, -3,55,0,327,3, -56,0,327,3,57, -0,327,3,65,0, -327,3,66,0,327, -3,67,0,327,3, -68,0,327,3,69, -0,327,3,70,0, -327,3,71,0,327, -3,72,0,327,3, -73,0,327,3,74, -0,327,3,75,0, -327,3,76,0,327, -3,77,0,327,3, -78,0,327,3,79, -0,327,3,80,0, -327,3,81,0,327, -3,82,0,327,3, -83,0,327,3,84, -0,327,3,85,0, -327,3,86,0,327, -3,87,0,327,3, -88,0,327,3,89, -0,327,3,90,0, -327,3,95,0,327, -3,97,0,327,3, -98,0,327,3,99, -0,327,3,100,0, -327,3,101,0,327, -3,102,0,327,3, -103,0,327,3,104, -0,327,3,105,0, -327,3,106,0,327, -3,107,0,327,3, -108,0,327,964,11, -1,829,0,330,1, --1,3,111,0,327, -3,112,0,327,3, -113,0,327,3,114, -0,327,3,115,0, -327,3,116,0,327, -3,117,0,327,3, -118,0,327,3,119, -0,327,3,120,0, -327,3,121,0,327, -3,122,0,327,3, -48,0,327,3,49, -0,327,3,50,0, -327,3,51,0,327, -3,52,0,327,3, -53,0,327,3,54, -0,327,3,55,0, -327,3,56,0,327, -3,57,0,327,3, -65,0,327,3,66, -0,327,3,67,0, -327,3,68,0,327, -3,69,0,327,3, -70,0,327,3,71, -0,327,3,72,0, -327,3,73,0,327, -3,74,0,327,3, -75,0,327,3,76, -0,327,3,77,0, -327,3,78,0,327, -3,79,0,327,3, -80,0,327,3,81, -0,327,3,82,0, -327,3,83,0,327, -3,84,0,327,3, -85,0,327,3,86, -0,327,3,87,0, -327,3,88,0,327, -3,89,0,327,3, -90,0,327,3,95, -0,327,3,97,0, -327,3,98,0,327, -3,99,0,327,3, -100,0,327,3,101, -0,327,3,102,0, -327,3,103,0,327, -3,104,0,327,3, -105,0,327,3,106, -0,327,3,107,0, -327,3,108,0,327, -965,11,1,829,0, -330,1,-1,3,102, -0,327,3,103,0, -327,3,104,0,327, -3,105,0,327,3, -106,0,327,3,107, -0,327,3,108,0, -327,966,11,1,829, -0,330,1,-1,3, -116,0,327,3,117, -0,327,3,118,0, -327,3,119,0,327, -3,120,0,327,3, -121,0,327,3,122, -0,327,3,48,0, -327,3,49,0,327, -3,50,0,327,3, -51,0,327,3,52, -0,327,3,53,0, -327,3,54,0,327, -3,55,0,327,3, -56,0,327,3,57, -0,327,3,65,0, -327,3,66,0,327, -3,67,0,327,3, -68,0,327,3,69, -0,327,3,70,0, -327,3,71,0,327, -3,72,0,327,3, -73,0,327,3,74, -0,327,3,75,0, -327,3,76,0,327, -3,77,0,327,3, -78,0,327,3,79, -0,327,3,80,0, -327,3,81,0,327, -3,82,0,327,3, -83,0,327,3,84, -0,327,3,85,0, -327,3,86,0,327, -3,87,0,327,3, -88,0,327,3,89, -0,327,3,90,0, -327,3,95,0,327, -3,97,0,327,3, -98,0,327,3,99, -0,327,3,100,0, -327,3,101,0,327, -3,102,0,327,3, -103,0,327,3,104, -0,327,3,105,0, -327,3,106,0,327, -3,107,0,327,3, -108,0,327,967,11, -1,829,0,330,1, --1,3,97,0,327, -3,98,0,327,3, -99,0,327,3,100, -0,327,3,101,0, -327,3,102,0,327, -3,103,0,327,3, -104,0,327,3,105, -0,327,3,106,0, -327,3,107,0,327, -3,108,0,327,968, -11,1,829,0,330, -1,-1,3,112,0, -327,3,113,0,327, -3,114,0,327,3, -115,0,327,3,116, -0,327,3,117,0, -327,3,118,0,327, -3,119,0,327,3, -120,0,327,3,121, -0,327,3,122,0, -327,3,48,0,327, -3,49,0,327,3, -50,0,327,3,51, -0,327,3,52,0, -327,3,53,0,327, -3,54,0,327,3, -55,0,327,3,56, -0,327,3,57,0, -327,3,65,0,327, -3,66,0,327,3, -67,0,327,3,68, -0,327,3,69,0, -327,3,70,0,327, -3,71,0,327,3, -72,0,327,3,73, -0,327,3,74,0, -327,3,75,0,327, -3,76,0,327,3, -77,0,327,3,78, -0,327,3,79,0, -327,3,80,0,327, -3,81,0,327,3, -82,0,327,3,83, -0,327,3,84,0, -327,3,85,0,327, -3,86,0,327,3, -87,0,327,3,88, -0,327,3,89,0, -327,3,90,0,327, -3,95,0,327,3, -97,0,327,3,98, -0,327,3,99,0, -327,3,100,0,327, -3,101,0,327,3, -102,0,327,3,103, -0,327,3,104,0, -327,3,105,0,327, -3,106,0,327,3, -107,0,327,3,108, -0,327,969,11,1, -829,0,330,1,-1, -3,111,0,970,12, -1,7052,971,5,63, -3,109,0,327,3, -110,0,972,12,1, -7081,973,5,63,3, -109,0,327,3,110, -0,327,3,111,0, -327,3,112,0,327, -3,113,0,327,3, -114,0,327,3,115, -0,327,3,116,0, -327,3,117,0,327, -3,118,0,327,3, -119,0,327,3,120, -0,327,3,121,0, -327,3,122,0,327, -3,48,0,327,3, -49,0,327,3,50, -0,327,3,51,0, -327,3,52,0,327, -3,53,0,327,3, -54,0,327,3,55, -0,327,3,56,0, -327,3,57,0,327, -3,65,0,327,3, -66,0,327,3,67, -0,327,3,68,0, -327,3,69,0,327, -3,70,0,327,3, -71,0,327,3,72, -0,327,3,73,0, -327,3,74,0,327, -3,75,0,327,3, -76,0,327,3,77, -0,327,3,78,0, -327,3,79,0,327, -3,80,0,327,3, -81,0,327,3,82, -0,327,3,83,0, -327,3,84,0,327, -3,85,0,327,3, -86,0,327,3,87, -0,327,3,88,0, -327,3,89,0,327, -3,90,0,327,3, -95,0,974,12,1, -7167,975,5,63,3, -109,0,327,3,110, -0,327,3,111,0, -327,3,112,0,327, -3,113,0,327,3, -114,0,976,12,1, -7200,977,5,63,3, -109,0,327,3,110, -0,327,3,111,0, -327,3,112,0,327, -3,113,0,327,3, -114,0,327,3,115, -0,327,3,116,0, -327,3,117,0,327, -3,118,0,327,3, -119,0,327,3,120, -0,327,3,121,0, -327,3,122,0,327, -3,48,0,327,3, -49,0,327,3,50, -0,327,3,51,0, -327,3,52,0,327, -3,53,0,327,3, -54,0,327,3,55, -0,327,3,56,0, -327,3,57,0,327, -3,65,0,327,3, -66,0,327,3,67, -0,327,3,68,0, -327,3,69,0,327, -3,70,0,327,3, -71,0,327,3,72, -0,327,3,73,0, -327,3,74,0,327, -3,75,0,327,3, -76,0,327,3,77, -0,327,3,78,0, -327,3,79,0,327, -3,80,0,327,3, -81,0,327,3,82, -0,327,3,83,0, -327,3,84,0,327, -3,85,0,327,3, -86,0,327,3,87, -0,327,3,88,0, -327,3,89,0,327, -3,90,0,327,3, -95,0,327,3,97, -0,327,3,98,0, -327,3,99,0,327, -3,100,0,327,3, -101,0,978,12,1, -7247,979,5,63,3, -109,0,327,3,110, -0,327,3,111,0, -327,3,112,0,327, -3,113,0,327,3, -114,0,327,3,115, -0,327,3,116,0, -327,3,117,0,327, -3,118,0,327,3, -119,0,327,3,120, -0,327,3,121,0, -327,3,122,0,980, -12,1,7288,981,5, -63,3,109,0,327, -3,110,0,327,3, -111,0,327,3,112, -0,327,3,113,0, -327,3,114,0,327, -3,115,0,327,3, -116,0,327,3,117, -0,327,3,118,0, -327,3,119,0,327, -3,120,0,327,3, -121,0,327,3,122, -0,327,3,48,0, -327,3,49,0,327, -3,50,0,327,3, -51,0,327,3,52, -0,327,3,53,0, -327,3,54,0,327, -3,55,0,327,3, -56,0,327,3,57, -0,327,3,65,0, -327,3,66,0,327, -3,67,0,327,3, -68,0,327,3,69, -0,327,3,70,0, -327,3,71,0,327, -3,72,0,327,3, -73,0,327,3,74, -0,327,3,75,0, -327,3,76,0,327, -3,77,0,327,3, -78,0,327,3,79, -0,327,3,80,0, -327,3,81,0,327, -3,82,0,327,3, -83,0,327,3,84, -0,327,3,85,0, -327,3,86,0,327, -3,87,0,327,3, -88,0,327,3,89, -0,327,3,90,0, -327,3,95,0,327, -3,97,0,327,3, -98,0,327,3,99, -0,327,3,100,0, -327,3,101,0,327, -3,102,0,327,3, -103,0,327,3,104, -0,327,3,105,0, -327,3,106,0,327, -3,107,0,327,3, -108,0,327,982,11, -1,695,0,983,4, -24,79,0,78,0, -95,0,82,0,69, -0,90,0,95,0, -69,0,86,0,69, -0,78,0,84,0, -1,-1,3,48,0, -327,3,49,0,327, -3,50,0,327,3, -51,0,327,3,52, -0,327,3,53,0, -327,3,54,0,327, -3,55,0,327,3, -56,0,327,3,57, -0,327,3,65,0, -327,3,66,0,327, -3,67,0,327,3, -68,0,327,3,69, -0,327,3,70,0, -327,3,71,0,327, -3,72,0,327,3, -73,0,327,3,74, -0,327,3,75,0, -327,3,76,0,327, -3,77,0,327,3, -78,0,327,3,79, -0,327,3,80,0, -327,3,81,0,327, -3,82,0,327,3, -83,0,327,3,84, -0,327,3,85,0, -327,3,86,0,327, -3,87,0,327,3, -88,0,327,3,89, -0,327,3,90,0, -327,3,95,0,327, -3,97,0,327,3, -98,0,327,3,99, -0,327,3,100,0, -327,3,101,0,327, -3,102,0,327,3, -103,0,327,3,104, -0,327,3,105,0, -327,3,106,0,327, -3,107,0,327,3, -108,0,327,984,11, -1,829,0,330,1, --1,3,102,0,327, -3,103,0,327,3, -104,0,327,3,105, -0,327,3,106,0, -327,3,107,0,327, -3,108,0,327,985, -11,1,829,0,330, -1,-1,3,115,0, -327,3,116,0,327, -3,117,0,327,3, -118,0,327,3,119, -0,327,3,120,0, -327,3,121,0,327, -3,122,0,327,3, -48,0,327,3,49, -0,327,3,50,0, -327,3,51,0,327, -3,52,0,327,3, -53,0,327,3,54, -0,327,3,55,0, -327,3,56,0,327, -3,57,0,327,3, -65,0,327,3,66, -0,327,3,67,0, -327,3,68,0,327, -3,69,0,327,3, -70,0,327,3,71, -0,327,3,72,0, -327,3,73,0,327, -3,74,0,327,3, -75,0,327,3,76, -0,327,3,77,0, -327,3,78,0,327, -3,79,0,327,3, -80,0,327,3,81, -0,327,3,82,0, -327,3,83,0,327, -3,84,0,327,3, -85,0,327,3,86, -0,327,3,87,0, -327,3,88,0,327, -3,89,0,327,3, -90,0,327,3,95, -0,327,3,97,0, -327,3,98,0,327, -3,99,0,327,3, -100,0,327,3,101, -0,327,3,102,0, -327,3,103,0,327, -3,104,0,327,3, -105,0,327,3,106, -0,327,3,107,0, -327,3,108,0,327, -986,11,1,829,0, -330,1,-1,3,97, -0,327,3,98,0, -327,3,99,0,327, -3,100,0,327,3, -101,0,327,3,102, -0,327,3,103,0, -327,3,104,0,327, -3,105,0,327,3, -106,0,327,3,107, -0,327,3,108,0, -327,987,11,1,829, -0,330,1,-1,3, -111,0,327,3,112, -0,327,3,113,0, -327,3,114,0,327, -3,115,0,327,3, -116,0,327,3,117, -0,327,3,118,0, -327,3,119,0,327, -3,120,0,327,3, -121,0,327,3,122, -0,327,3,48,0, -327,3,49,0,327, -3,50,0,327,3, -51,0,327,3,52, -0,327,3,53,0, -327,3,54,0,327, -3,55,0,327,3, -56,0,327,3,57, -0,327,3,65,0, -327,3,66,0,327, -3,67,0,327,3, -68,0,327,3,69, -0,327,3,70,0, -327,3,71,0,327, -3,72,0,327,3, -73,0,327,3,74, -0,327,3,75,0, -327,3,76,0,327, -3,77,0,327,3, -78,0,327,3,79, -0,327,3,80,0, -327,3,81,0,327, -3,82,0,327,3, -83,0,327,3,84, -0,327,3,85,0, -327,3,86,0,327, -3,87,0,327,3, -88,0,327,3,89, -0,327,3,90,0, -327,3,95,0,327, -3,97,0,327,3, -98,0,988,12,1, -7696,989,5,63,3, -109,0,327,3,110, -0,327,3,111,0, -327,3,112,0,327, -3,113,0,327,3, -114,0,327,3,115, -0,327,3,116,0, -327,3,117,0,327, -3,118,0,327,3, -119,0,327,3,120, -0,327,3,121,0, -327,3,122,0,327, -3,48,0,327,3, -49,0,327,3,50, -0,327,3,51,0, -327,3,52,0,327, -3,53,0,327,3, -54,0,327,3,55, -0,327,3,56,0, -327,3,57,0,327, -3,65,0,327,3, -66,0,327,3,67, -0,327,3,68,0, -327,3,69,0,327, -3,70,0,327,3, -71,0,327,3,72, -0,327,3,73,0, -327,3,74,0,327, -3,75,0,327,3, -76,0,327,3,77, -0,327,3,78,0, -327,3,79,0,327, -3,80,0,327,3, -81,0,327,3,82, -0,327,3,83,0, -327,3,84,0,327, -3,85,0,327,3, -86,0,327,3,87, -0,327,3,88,0, -327,3,89,0,327, -3,90,0,327,3, -95,0,327,3,97, -0,327,3,98,0, -327,3,99,0,327, -3,100,0,327,3, -101,0,327,3,102, -0,327,3,103,0, -327,3,104,0,327, -3,105,0,327,3, -106,0,990,12,1, -7748,991,5,63,3, -109,0,327,3,110, -0,327,3,111,0, -327,3,112,0,327, -3,113,0,327,3, -114,0,327,3,115, -0,327,3,116,0, -327,3,117,0,327, -3,118,0,327,3, -119,0,327,3,120, -0,327,3,121,0, -327,3,122,0,327, -3,48,0,327,3, -49,0,327,3,50, -0,327,3,51,0, -327,3,52,0,327, -3,53,0,327,3, -54,0,327,3,55, -0,327,3,56,0, -327,3,57,0,327, -3,65,0,327,3, -66,0,327,3,67, -0,327,3,68,0, -327,3,69,0,327, -3,70,0,327,3, -71,0,327,3,72, -0,327,3,73,0, -327,3,74,0,327, -3,75,0,327,3, -76,0,327,3,77, -0,327,3,78,0, -327,3,79,0,327, -3,80,0,327,3, -81,0,327,3,82, -0,327,3,83,0, -327,3,84,0,327, -3,85,0,327,3, -86,0,327,3,87, -0,327,3,88,0, -327,3,89,0,327, -3,90,0,327,3, -95,0,327,3,97, -0,327,3,98,0, -327,3,99,0,327, -3,100,0,327,3, -101,0,992,12,1, -7795,993,5,63,3, -109,0,327,3,110, -0,327,3,111,0, -327,3,112,0,327, -3,113,0,327,3, -114,0,327,3,115, -0,327,3,116,0, -327,3,117,0,327, -3,118,0,327,3, -119,0,327,3,120, -0,327,3,121,0, -327,3,122,0,327, -3,48,0,327,3, -49,0,327,3,50, -0,327,3,51,0, -327,3,52,0,327, -3,53,0,327,3, -54,0,327,3,55, -0,327,3,56,0, -327,3,57,0,327, -3,65,0,327,3, -66,0,327,3,67, -0,327,3,68,0, -327,3,69,0,327, -3,70,0,327,3, -71,0,327,3,72, -0,327,3,73,0, -327,3,74,0,327, -3,75,0,327,3, -76,0,327,3,77, -0,327,3,78,0, -327,3,79,0,327, -3,80,0,327,3, -81,0,327,3,82, -0,327,3,83,0, -327,3,84,0,327, -3,85,0,327,3, -86,0,327,3,87, -0,327,3,88,0, -327,3,89,0,327, -3,90,0,327,3, -95,0,327,3,97, -0,327,3,98,0, -327,3,99,0,994, -12,1,7840,995,5, -63,3,109,0,327, -3,110,0,327,3, -111,0,327,3,112, -0,327,3,113,0, -327,3,114,0,327, -3,115,0,327,3, -116,0,996,12,1, -7875,997,5,63,3, -109,0,327,3,110, -0,327,3,111,0, -327,3,112,0,327, -3,113,0,327,3, -114,0,327,3,115, -0,327,3,116,0, -327,3,117,0,327, -3,118,0,327,3, -119,0,327,3,120, -0,327,3,121,0, -327,3,122,0,327, -3,48,0,327,3, -49,0,327,3,50, -0,327,3,51,0, -327,3,52,0,327, -3,53,0,327,3, -54,0,327,3,55, -0,327,3,56,0, -327,3,57,0,327, -3,65,0,327,3, -66,0,327,3,67, -0,327,3,68,0, -327,3,69,0,327, -3,70,0,327,3, -71,0,327,3,72, -0,327,3,73,0, -327,3,74,0,327, -3,75,0,327,3, -76,0,327,3,77, -0,327,3,78,0, -327,3,79,0,327, -3,80,0,327,3, -81,0,327,3,82, -0,327,3,83,0, -327,3,84,0,327, -3,85,0,327,3, -86,0,327,3,87, -0,327,3,88,0, -327,3,89,0,327, -3,90,0,327,3, -95,0,998,12,1, -7961,999,5,63,3, -109,0,327,3,110, -0,327,3,111,0, -327,3,112,0,327, -3,113,0,327,3, -114,0,1000,12,1, -7994,1001,5,63,3, -109,0,327,3,110, -0,327,3,111,0, -327,3,112,0,327, -3,113,0,327,3, -114,0,327,3,115, -0,327,3,116,0, -327,3,117,0,327, -3,118,0,327,3, -119,0,327,3,120, -0,327,3,121,0, -327,3,122,0,327, -3,48,0,327,3, -49,0,327,3,50, -0,327,3,51,0, -327,3,52,0,327, -3,53,0,327,3, -54,0,327,3,55, -0,327,3,56,0, -327,3,57,0,327, -3,65,0,327,3, -66,0,327,3,67, -0,327,3,68,0, -327,3,69,0,327, -3,70,0,327,3, -71,0,327,3,72, -0,327,3,73,0, -327,3,74,0,327, -3,75,0,327,3, -76,0,327,3,77, -0,327,3,78,0, -327,3,79,0,327, -3,80,0,327,3, -81,0,327,3,82, -0,327,3,83,0, -327,3,84,0,327, -3,85,0,327,3, -86,0,327,3,87, -0,327,3,88,0, -327,3,89,0,327, -3,90,0,327,3, -95,0,327,3,97, -0,327,3,98,0, -327,3,99,0,327, -3,100,0,327,3, -101,0,1002,12,1, -8041,1003,5,63,3, -109,0,327,3,110, -0,327,3,111,0, -327,3,112,0,327, -3,113,0,327,3, -114,0,327,3,115, -0,327,3,116,0, -327,3,117,0,327, -3,118,0,327,3, -119,0,327,3,120, -0,327,3,121,0, -327,3,122,0,1004, -12,1,8082,1005,5, -63,3,109,0,327, -3,110,0,327,3, -111,0,327,3,112, -0,327,3,113,0, -327,3,114,0,327, -3,115,0,327,3, -116,0,327,3,117, -0,327,3,118,0, -327,3,119,0,327, -3,120,0,327,3, -121,0,327,3,122, -0,327,3,48,0, -327,3,49,0,327, -3,50,0,327,3, -51,0,327,3,52, -0,327,3,53,0, -327,3,54,0,327, -3,55,0,327,3, -56,0,327,3,57, -0,327,3,65,0, -327,3,66,0,327, -3,67,0,327,3, -68,0,327,3,69, -0,327,3,70,0, -327,3,71,0,327, -3,72,0,327,3, -73,0,327,3,74, -0,327,3,75,0, -327,3,76,0,327, -3,77,0,327,3, -78,0,327,3,79, -0,327,3,80,0, -327,3,81,0,327, -3,82,0,327,3, -83,0,327,3,84, -0,327,3,85,0, -327,3,86,0,327, -3,87,0,327,3, -88,0,327,3,89, -0,327,3,90,0, -327,3,95,0,327, -3,97,0,327,3, -98,0,327,3,99, -0,327,3,100,0, -327,3,101,0,327, -3,102,0,327,3, -103,0,327,3,104, -0,327,3,105,0, -327,3,106,0,327, -3,107,0,327,3, -108,0,327,1006,11, -1,681,0,1007,4, -32,79,0,66,0, -74,0,69,0,67, -0,84,0,95,0, -82,0,69,0,90, -0,95,0,69,0, -86,0,69,0,78, -0,84,0,1,-1, -3,48,0,327,3, -49,0,327,3,50, -0,327,3,51,0, -327,3,52,0,327, -3,53,0,327,3, -54,0,327,3,55, -0,327,3,56,0, -327,3,57,0,327, -3,65,0,327,3, -66,0,327,3,67, -0,327,3,68,0, -327,3,69,0,327, -3,70,0,327,3, -71,0,327,3,72, -0,327,3,73,0, -327,3,74,0,327, -3,75,0,327,3, -76,0,327,3,77, -0,327,3,78,0, -327,3,79,0,327, -3,80,0,327,3, -81,0,327,3,82, -0,327,3,83,0, -327,3,84,0,327, -3,85,0,327,3, -86,0,327,3,87, -0,327,3,88,0, -327,3,89,0,327, -3,90,0,327,3, -95,0,327,3,97, -0,327,3,98,0, -327,3,99,0,327, -3,100,0,327,3, -101,0,327,3,102, -0,327,3,103,0, -327,3,104,0,327, -3,105,0,327,3, -106,0,327,3,107, -0,327,3,108,0, -327,1008,11,1,829, -0,330,1,-1,3, -102,0,327,3,103, -0,327,3,104,0, -327,3,105,0,327, -3,106,0,327,3, -107,0,327,3,108, -0,327,1009,11,1, -829,0,330,1,-1, -3,115,0,327,3, -116,0,327,3,117, -0,327,3,118,0, -327,3,119,0,327, -3,120,0,327,3, -121,0,327,3,122, -0,327,3,48,0, -327,3,49,0,327, -3,50,0,327,3, -51,0,327,3,52, -0,327,3,53,0, -327,3,54,0,327, -3,55,0,327,3, -56,0,327,3,57, -0,327,3,65,0, -327,3,66,0,327, -3,67,0,327,3, -68,0,327,3,69, -0,327,3,70,0, -327,3,71,0,327, -3,72,0,327,3, -73,0,327,3,74, -0,327,3,75,0, -327,3,76,0,327, -3,77,0,327,3, -78,0,327,3,79, -0,327,3,80,0, -327,3,81,0,327, -3,82,0,327,3, -83,0,327,3,84, -0,327,3,85,0, -327,3,86,0,327, -3,87,0,327,3, -88,0,327,3,89, -0,327,3,90,0, -327,3,95,0,327, -3,97,0,327,3, -98,0,327,3,99, -0,327,3,100,0, -327,3,101,0,327, -3,102,0,327,3, -103,0,327,3,104, -0,327,3,105,0, -327,3,106,0,327, -3,107,0,327,3, -108,0,327,1010,11, -1,829,0,330,1, --1,3,97,0,327, -3,98,0,327,3, -99,0,327,3,100, -0,327,3,101,0, -327,3,102,0,327, -3,103,0,327,3, -104,0,327,3,105, -0,327,3,106,0, -327,3,107,0,327, -3,108,0,327,1011, -11,1,829,0,330, -1,-1,3,117,0, -327,3,118,0,327, -3,119,0,327,3, -120,0,327,3,121, -0,327,3,122,0, -327,3,48,0,327, -3,49,0,327,3, -50,0,327,3,51, -0,327,3,52,0, -327,3,53,0,327, -3,54,0,327,3, -55,0,327,3,56, -0,327,3,57,0, -327,3,65,0,327, -3,66,0,327,3, -67,0,327,3,68, -0,327,3,69,0, -327,3,70,0,327, -3,71,0,327,3, -72,0,327,3,73, -0,327,3,74,0, -327,3,75,0,327, -3,76,0,327,3, -77,0,327,3,78, -0,327,3,79,0, -327,3,80,0,327, -3,81,0,327,3, -82,0,327,3,83, -0,327,3,84,0, -327,3,85,0,327, -3,86,0,327,3, -87,0,327,3,88, -0,327,3,89,0, -327,3,90,0,327, -3,95,0,327,3, -97,0,327,3,98, -0,327,3,99,0, -327,3,100,0,327, -3,101,0,327,3, -102,0,327,3,103, -0,327,3,104,0, -327,3,105,0,327, -3,106,0,327,3, -107,0,327,3,108, -0,327,1012,11,1, -829,0,330,1,-1, -3,100,0,327,3, -101,0,327,3,102, -0,327,3,103,0, -327,3,104,0,327, -3,105,0,327,3, -106,0,327,3,107, -0,327,3,108,0, -327,1013,11,1,829, -0,330,1,-1,3, -102,0,327,3,103, -0,327,3,104,0, -327,3,105,0,327, -3,106,0,327,3, -107,0,327,3,108, -0,327,1014,11,1, -829,0,330,1,-1, -3,107,0,327,3, -108,0,327,1015,11, -1,829,0,330,1, --1,3,99,0,327, -3,100,0,327,3, -101,0,327,3,102, -0,327,3,103,0, -327,3,104,0,327, -3,105,0,327,3, -106,0,327,3,107, -0,327,3,108,0, -327,1016,11,1,829, -0,330,1,-1,3, -112,0,325,3,113, -0,325,3,114,0, -1017,12,1,8855,1018, -5,63,3,109,0, -327,3,110,0,327, -3,111,0,1019,12, -1,8885,1020,5,63, -3,109,0,327,3, -110,0,327,3,111, -0,327,3,112,0, -327,3,113,0,327, -3,114,0,327,3, -115,0,327,3,116, -0,1021,12,1,8920, -1022,5,63,3,109, -0,327,3,110,0, -327,3,111,0,327, -3,112,0,327,3, -113,0,327,3,114, -0,327,3,115,0, -327,3,116,0,327, -3,117,0,327,3, -118,0,327,3,119, -0,327,3,120,0, -327,3,121,0,327, -3,122,0,327,3, -48,0,327,3,49, -0,327,3,50,0, -327,3,51,0,327, -3,52,0,327,3, -53,0,327,3,54, -0,327,3,55,0, -327,3,56,0,327, -3,57,0,327,3, -65,0,327,3,66, -0,327,3,67,0, -327,3,68,0,327, -3,69,0,327,3, -70,0,327,3,71, -0,327,3,72,0, -327,3,73,0,327, -3,74,0,327,3, -75,0,327,3,76, -0,327,3,77,0, -327,3,78,0,327, -3,79,0,327,3, -80,0,327,3,81, -0,327,3,82,0, -327,3,83,0,327, -3,84,0,327,3, -85,0,327,3,86, -0,327,3,87,0, -327,3,88,0,327, -3,89,0,327,3, -90,0,327,3,95, -0,327,3,97,0, -1023,12,1,8963,1024, -5,63,3,109,0, -327,3,110,0,327, -3,111,0,327,3, -112,0,327,3,113, -0,327,3,114,0, -327,3,115,0,327, -3,116,0,1025,12, -1,8998,1026,5,63, -3,109,0,327,3, -110,0,327,3,111, -0,327,3,112,0, -327,3,113,0,327, -3,114,0,327,3, -115,0,327,3,116, -0,327,3,117,0, -327,3,118,0,327, -3,119,0,327,3, -120,0,327,3,121, -0,327,3,122,0, -327,3,48,0,327, -3,49,0,327,3, -50,0,327,3,51, -0,327,3,52,0, -327,3,53,0,327, -3,54,0,327,3, -55,0,327,3,56, -0,327,3,57,0, -327,3,65,0,327, -3,66,0,327,3, -67,0,327,3,68, -0,327,3,69,0, -327,3,70,0,327, -3,71,0,327,3, -72,0,327,3,73, -0,327,3,74,0, -327,3,75,0,327, -3,76,0,327,3, -77,0,327,3,78, -0,327,3,79,0, -327,3,80,0,327, -3,81,0,327,3, -82,0,327,3,83, -0,327,3,84,0, -327,3,85,0,327, -3,86,0,327,3, -87,0,327,3,88, -0,327,3,89,0, -327,3,90,0,327, -3,95,0,327,3, -97,0,327,3,98, -0,327,3,99,0, -327,3,100,0,327, -3,101,0,327,3, -102,0,327,3,103, -0,327,3,104,0, -327,3,105,0,1027, -12,1,9049,1028,5, -63,3,109,0,327, -3,110,0,327,3, -111,0,1029,12,1, -9079,1030,5,63,3, -109,0,327,3,110, -0,1031,12,1,9108, -1032,5,63,3,109, -0,327,3,110,0, -327,3,111,0,327, -3,112,0,327,3, -113,0,327,3,114, -0,327,3,115,0, -327,3,116,0,327, -3,117,0,327,3, -118,0,327,3,119, -0,327,3,120,0, -327,3,121,0,327, -3,122,0,327,3, -48,0,327,3,49, -0,327,3,50,0, -327,3,51,0,327, -3,52,0,327,3, -53,0,327,3,54, -0,327,3,55,0, -327,3,56,0,327, -3,57,0,327,3, -65,0,327,3,66, -0,327,3,67,0, -327,3,68,0,327, -3,69,0,327,3, -70,0,327,3,71, -0,327,3,72,0, -327,3,73,0,327, -3,74,0,327,3, -75,0,327,3,76, -0,327,3,77,0, -327,3,78,0,327, -3,79,0,327,3, -80,0,327,3,81, -0,327,3,82,0, -327,3,83,0,327, -3,84,0,327,3, -85,0,327,3,86, -0,327,3,87,0, -327,3,88,0,327, -3,89,0,327,3, -90,0,327,3,95, -0,327,3,97,0, -327,3,98,0,327, -3,99,0,327,3, -100,0,327,3,101, -0,327,3,102,0, -327,3,103,0,327, -3,104,0,327,3, -105,0,327,3,106, -0,327,3,107,0, -327,3,108,0,327, -1033,11,1,330,0, -1034,4,26,82,0, -79,0,84,0,65, -0,84,0,73,0, -79,0,78,0,95, -0,84,0,89,0, -80,0,69,0,1, --1,3,111,0,327, -3,112,0,327,3, -113,0,327,3,114, -0,327,3,115,0, -327,3,116,0,327, -3,117,0,327,3, -118,0,327,3,119, -0,327,3,120,0, -327,3,121,0,327, -3,122,0,327,3, -48,0,327,3,49, -0,327,3,50,0, -327,3,51,0,327, -3,52,0,327,3, -53,0,327,3,54, -0,327,3,55,0, -327,3,56,0,327, -3,57,0,327,3, -65,0,327,3,66, -0,327,3,67,0, -327,3,68,0,327, -3,69,0,327,3, -70,0,327,3,71, -0,327,3,72,0, -327,3,73,0,327, -3,74,0,327,3, -75,0,327,3,76, -0,327,3,77,0, -327,3,78,0,327, -3,79,0,327,3, -80,0,327,3,81, -0,327,3,82,0, -327,3,83,0,327, -3,84,0,327,3, -85,0,327,3,86, -0,327,3,87,0, -327,3,88,0,327, -3,89,0,327,3, -90,0,327,3,95, -0,327,3,97,0, -327,3,98,0,327, -3,99,0,327,3, -100,0,327,3,101, -0,327,3,102,0, -327,3,103,0,327, -3,104,0,327,3, -105,0,327,3,106, -0,327,3,107,0, -327,3,108,0,327, -1035,11,1,829,0, -330,1,-1,3,112, -0,327,3,113,0, -327,3,114,0,327, -3,115,0,327,3, -116,0,327,3,117, -0,327,3,118,0, -327,3,119,0,327, -3,120,0,327,3, -121,0,327,3,122, -0,327,3,48,0, -327,3,49,0,327, -3,50,0,327,3, -51,0,327,3,52, -0,327,3,53,0, -327,3,54,0,327, -3,55,0,327,3, -56,0,327,3,57, -0,327,3,65,0, -327,3,66,0,327, -3,67,0,327,3, -68,0,327,3,69, -0,327,3,70,0, -327,3,71,0,327, -3,72,0,327,3, -73,0,327,3,74, -0,327,3,75,0, -327,3,76,0,327, -3,77,0,327,3, -78,0,327,3,79, -0,327,3,80,0, -327,3,81,0,327, -3,82,0,327,3, -83,0,327,3,84, -0,327,3,85,0, -327,3,86,0,327, -3,87,0,327,3, -88,0,327,3,89, -0,327,3,90,0, -327,3,95,0,327, -3,97,0,327,3, -98,0,327,3,99, -0,327,3,100,0, -327,3,101,0,327, -3,102,0,327,3, -103,0,327,3,104, -0,327,3,105,0, -327,3,106,0,327, -3,107,0,327,3, -108,0,327,1036,11, -1,829,0,330,1, --1,3,106,0,327, -3,107,0,327,3, -108,0,327,1037,11, -1,829,0,330,1, --1,3,117,0,327, -3,118,0,327,3, -119,0,327,3,120, -0,327,3,121,0, -327,3,122,0,327, -3,48,0,327,3, -49,0,327,3,50, -0,327,3,51,0, -327,3,52,0,327, -3,53,0,327,3, -54,0,327,3,55, -0,327,3,56,0, -327,3,57,0,327, -3,65,0,327,3, -66,0,327,3,67, -0,327,3,68,0, -327,3,69,0,327, -3,70,0,327,3, -71,0,327,3,72, -0,327,3,73,0, -327,3,74,0,327, -3,75,0,327,3, -76,0,327,3,77, -0,327,3,78,0, -327,3,79,0,327, -3,80,0,327,3, -81,0,327,3,82, -0,327,3,83,0, -327,3,84,0,327, -3,85,0,327,3, -86,0,327,3,87, -0,327,3,88,0, -327,3,89,0,327, -3,90,0,327,3, -95,0,327,3,97, -0,327,3,98,0, -327,3,99,0,327, -3,100,0,327,3, -101,0,327,3,102, -0,327,3,103,0, -327,3,104,0,327, -3,105,0,327,3, -106,0,327,3,107, -0,327,3,108,0, -327,1038,11,1,829, -0,330,1,-1,3, -98,0,327,3,99, -0,327,3,100,0, -327,3,101,0,327, -3,102,0,327,3, -103,0,327,3,104, -0,327,3,105,0, -327,3,106,0,327, -3,107,0,327,3, -108,0,327,1039,11, -1,829,0,330,1, --1,3,117,0,327, -3,118,0,327,3, -119,0,327,3,120, -0,327,3,121,0, -327,3,122,0,327, -3,48,0,327,3, -49,0,327,3,50, -0,327,3,51,0, -327,3,52,0,327, -3,53,0,327,3, -54,0,327,3,55, -0,327,3,56,0, -327,3,57,0,327, -3,65,0,327,3, -66,0,327,3,67, -0,327,3,68,0, -327,3,69,0,327, -3,70,0,327,3, -71,0,327,3,72, -0,327,3,73,0, -327,3,74,0,327, -3,75,0,327,3, -76,0,327,3,77, -0,327,3,78,0, -327,3,79,0,327, -3,80,0,327,3, -81,0,327,3,82, -0,327,3,83,0, -327,3,84,0,327, -3,85,0,327,3, -86,0,327,3,87, -0,327,3,88,0, -327,3,89,0,327, -3,90,0,327,3, -95,0,327,3,97, -0,327,3,98,0, -327,3,99,0,327, -3,100,0,327,3, -101,0,327,3,102, -0,327,3,103,0, -327,3,104,0,327, -3,105,0,327,3, -106,0,327,3,107, -0,327,3,108,0, -327,1040,11,1,829, -0,330,1,-1,3, -112,0,327,3,113, -0,327,3,114,0, -327,3,115,0,327, -3,116,0,327,3, -117,0,1041,12,1, -9731,1042,5,63,3, -109,0,327,3,110, -0,1043,12,1,9760, -1044,5,63,3,109, -0,327,3,110,0, -327,3,111,0,327, -3,112,0,327,3, -113,0,327,3,114, -0,327,3,115,0, -327,3,116,0,327, -3,117,0,327,3, -118,0,327,3,119, -0,327,3,120,0, -327,3,121,0,327, -3,122,0,327,3, -48,0,327,3,49, -0,327,3,50,0, -327,3,51,0,327, -3,52,0,327,3, -53,0,327,3,54, -0,327,3,55,0, -327,3,56,0,327, -3,57,0,327,3, -65,0,327,3,66, -0,327,3,67,0, -327,3,68,0,327, -3,69,0,327,3, -70,0,327,3,71, -0,327,3,72,0, -327,3,73,0,327, -3,74,0,327,3, -75,0,327,3,76, -0,327,3,77,0, -327,3,78,0,327, -3,79,0,327,3, -80,0,327,3,81, -0,327,3,82,0, -327,3,83,0,327, -3,84,0,327,3, -85,0,327,3,86, -0,327,3,87,0, -327,3,88,0,327, -3,89,0,327,3, -90,0,327,3,95, -0,1045,12,1,9846, -1046,5,63,3,109, -0,327,3,110,0, -327,3,111,0,327, -3,112,0,327,3, -113,0,327,3,114, -0,327,3,115,0, -327,3,116,0,1047, -12,1,9881,1048,5, -63,3,109,0,327, -3,110,0,327,3, -111,0,327,3,112, -0,327,3,113,0, -327,3,114,0,327, -3,115,0,327,3, -116,0,327,3,117, -0,327,3,118,0, -327,3,119,0,327, -3,120,0,327,3, -121,0,327,3,122, -0,327,3,48,0, -327,3,49,0,327, -3,50,0,327,3, -51,0,327,3,52, -0,327,3,53,0, -327,3,54,0,327, -3,55,0,327,3, -56,0,327,3,57, -0,327,3,65,0, -327,3,66,0,327, -3,67,0,327,3, -68,0,327,3,69, -0,327,3,70,0, -327,3,71,0,327, -3,72,0,327,3, -73,0,327,3,74, -0,327,3,75,0, -327,3,76,0,327, -3,77,0,327,3, -78,0,327,3,79, -0,327,3,80,0, -327,3,81,0,327, -3,82,0,327,3, -83,0,327,3,84, -0,327,3,85,0, -327,3,86,0,327, -3,87,0,327,3, -88,0,327,3,89, -0,327,3,90,0, -327,3,95,0,327, -3,97,0,327,3, -98,0,327,3,99, -0,327,3,100,0, -327,3,101,0,327, -3,102,0,327,3, -103,0,327,3,104, -0,327,3,105,0, -1049,12,1,9932,1050, -5,63,3,109,0, -1051,12,1,9960,1052, -5,63,3,109,0, -327,3,110,0,327, -3,111,0,327,3, -112,0,327,3,113, -0,327,3,114,0, -327,3,115,0,327, -3,116,0,327,3, -117,0,327,3,118, -0,327,3,119,0, -327,3,120,0,327, -3,121,0,327,3, -122,0,327,3,48, -0,327,3,49,0, -327,3,50,0,327, -3,51,0,327,3, -52,0,327,3,53, -0,327,3,54,0, -327,3,55,0,327, -3,56,0,327,3, -57,0,327,3,65, -0,327,3,66,0, -327,3,67,0,327, -3,68,0,327,3, -69,0,327,3,70, -0,327,3,71,0, -327,3,72,0,327, -3,73,0,327,3, -74,0,327,3,75, -0,327,3,76,0, -327,3,77,0,327, -3,78,0,327,3, -79,0,327,3,80, -0,327,3,81,0, -327,3,82,0,327, -3,83,0,327,3, -84,0,327,3,85, -0,327,3,86,0, -327,3,87,0,327, -3,88,0,327,3, -89,0,327,3,90, -0,327,3,95,0, -327,3,97,0,327, -3,98,0,327,3, -99,0,327,3,100, -0,327,3,101,0, -1053,12,1,10007,1054, -5,63,3,109,0, -327,3,110,0,327, -3,111,0,327,3, -112,0,327,3,113, -0,327,3,114,0, -327,3,115,0,327, -3,116,0,327,3, -117,0,327,3,118, -0,327,3,119,0, -327,3,120,0,327, -3,121,0,327,3, -122,0,327,3,48, -0,327,3,49,0, -327,3,50,0,327, -3,51,0,327,3, -52,0,327,3,53, -0,327,3,54,0, -327,3,55,0,327, -3,56,0,327,3, -57,0,327,3,65, -0,327,3,66,0, -327,3,67,0,327, -3,68,0,327,3, -69,0,327,3,70, -0,327,3,71,0, -327,3,72,0,327, -3,73,0,327,3, -74,0,327,3,75, -0,327,3,76,0, -327,3,77,0,327, -3,78,0,327,3, -79,0,327,3,80, -0,327,3,81,0, -327,3,82,0,327, -3,83,0,327,3, -84,0,327,3,85, -0,327,3,86,0, -327,3,87,0,327, -3,88,0,327,3, -89,0,327,3,90, -0,327,3,95,0, -1055,12,1,10093,1056, -5,63,3,109,0, -327,3,110,0,327, -3,111,0,327,3, -112,0,1057,12,1, -10124,1058,5,63,3, -109,0,327,3,110, -0,327,3,111,0, -327,3,112,0,327, -3,113,0,327,3, -114,0,327,3,115, -0,327,3,116,0, -327,3,117,0,327, -3,118,0,327,3, -119,0,327,3,120, -0,327,3,121,0, -327,3,122,0,327, -3,48,0,327,3, -49,0,327,3,50, -0,327,3,51,0, -327,3,52,0,327, -3,53,0,327,3, -54,0,327,3,55, -0,327,3,56,0, -327,3,57,0,327, -3,65,0,327,3, -66,0,327,3,67, -0,327,3,68,0, -327,3,69,0,327, -3,70,0,327,3, -71,0,327,3,72, -0,327,3,73,0, -327,3,74,0,327, -3,75,0,327,3, -76,0,327,3,77, -0,327,3,78,0, -327,3,79,0,327, -3,80,0,327,3, -81,0,327,3,82, -0,327,3,83,0, -327,3,84,0,327, -3,85,0,327,3, -86,0,327,3,87, -0,327,3,88,0, -327,3,89,0,327, -3,90,0,327,3, -95,0,327,3,97, -0,327,3,98,0, -327,3,99,0,327, -3,100,0,327,3, -101,0,1059,12,1, -10171,1060,5,63,3, -109,0,327,3,110, -0,327,3,111,0, -327,3,112,0,327, -3,113,0,327,3, -114,0,1061,12,1, -10204,1062,5,63,3, -109,0,1063,12,1, -10232,1064,5,63,3, -109,0,327,3,110, -0,327,3,111,0, -327,3,112,0,327, -3,113,0,327,3, -114,0,327,3,115, -0,327,3,116,0, -327,3,117,0,327, -3,118,0,327,3, -119,0,327,3,120, -0,327,3,121,0, -327,3,122,0,327, -3,48,0,327,3, -49,0,327,3,50, -0,327,3,51,0, -327,3,52,0,327, -3,53,0,327,3, -54,0,327,3,55, -0,327,3,56,0, -327,3,57,0,327, -3,65,0,327,3, -66,0,327,3,67, -0,327,3,68,0, -327,3,69,0,327, -3,70,0,327,3, -71,0,327,3,72, -0,327,3,73,0, -327,3,74,0,327, -3,75,0,327,3, -76,0,327,3,77, -0,327,3,78,0, -327,3,79,0,327, -3,80,0,327,3, -81,0,327,3,82, -0,327,3,83,0, -327,3,84,0,327, -3,85,0,327,3, -86,0,327,3,87, -0,327,3,88,0, -327,3,89,0,327, -3,90,0,327,3, -95,0,327,3,97, -0,327,3,98,0, -327,3,99,0,327, -3,100,0,327,3, -101,0,327,3,102, -0,327,3,103,0, -327,3,104,0,327, -3,105,0,1065,12, -1,10283,1066,5,63, -3,109,0,327,3, -110,0,327,3,111, -0,327,3,112,0, -327,3,113,0,327, -3,114,0,327,3, -115,0,1067,12,1, -10317,1068,5,63,3, -109,0,327,3,110, -0,327,3,111,0, -327,3,112,0,327, -3,113,0,327,3, -114,0,327,3,115, -0,1069,12,1,10351, -1070,5,63,3,109, -0,327,3,110,0, -327,3,111,0,327, -3,112,0,327,3, -113,0,327,3,114, -0,327,3,115,0, -327,3,116,0,327, -3,117,0,327,3, -118,0,327,3,119, -0,327,3,120,0, -327,3,121,0,327, -3,122,0,327,3, -48,0,327,3,49, -0,327,3,50,0, -327,3,51,0,327, -3,52,0,327,3, -53,0,327,3,54, -0,327,3,55,0, -327,3,56,0,327, -3,57,0,327,3, -65,0,327,3,66, -0,327,3,67,0, -327,3,68,0,327, -3,69,0,327,3, -70,0,327,3,71, -0,327,3,72,0, -327,3,73,0,327, -3,74,0,327,3, -75,0,327,3,76, -0,327,3,77,0, -327,3,78,0,327, -3,79,0,327,3, -80,0,327,3,81, -0,327,3,82,0, -327,3,83,0,327, -3,84,0,327,3, -85,0,327,3,86, -0,327,3,87,0, -327,3,88,0,327, -3,89,0,327,3, -90,0,327,3,95, -0,327,3,97,0, -327,3,98,0,327, -3,99,0,327,3, -100,0,327,3,101, -0,327,3,102,0, -327,3,103,0,327, -3,104,0,327,3, -105,0,1071,12,1, -10402,1072,5,63,3, -109,0,327,3,110, -0,327,3,111,0, -1073,12,1,10432,1074, -5,63,3,109,0, -327,3,110,0,1075, -12,1,10461,1076,5, -63,3,109,0,327, -3,110,0,327,3, -111,0,327,3,112, -0,327,3,113,0, -327,3,114,0,327, -3,115,0,1077,12, -1,10495,1078,5,63, -3,109,0,327,3, -110,0,327,3,111, -0,327,3,112,0, -327,3,113,0,327, -3,114,0,327,3, -115,0,327,3,116, -0,327,3,117,0, -327,3,118,0,327, -3,119,0,327,3, -120,0,327,3,121, -0,327,3,122,0, -327,3,48,0,327, -3,49,0,327,3, -50,0,327,3,51, -0,327,3,52,0, -327,3,53,0,327, -3,54,0,327,3, -55,0,327,3,56, -0,327,3,57,0, -327,3,65,0,327, -3,66,0,327,3, -67,0,327,3,68, -0,327,3,69,0, -327,3,70,0,327, -3,71,0,327,3, -72,0,327,3,73, -0,327,3,74,0, -327,3,75,0,327, -3,76,0,327,3, -77,0,327,3,78, -0,327,3,79,0, -327,3,80,0,327, -3,81,0,327,3, -82,0,327,3,83, -0,327,3,84,0, -327,3,85,0,327, -3,86,0,327,3, -87,0,327,3,88, -0,327,3,89,0, -327,3,90,0,327, -3,95,0,327,3, -97,0,327,3,98, -0,327,3,99,0, -327,3,100,0,327, -3,101,0,327,3, -102,0,327,3,103, -0,327,3,104,0, -327,3,105,0,327, -3,106,0,327,3, -107,0,327,3,108, -0,327,1079,11,1, -720,0,1080,4,52, -82,0,85,0,78, -0,95,0,84,0, -73,0,77,0,69, -0,95,0,80,0, -69,0,82,0,77, -0,73,0,83,0, -83,0,73,0,79, -0,78,0,83,0, -95,0,69,0,86, -0,69,0,78,0, -84,0,1,-1,3, -116,0,327,3,117, -0,327,3,118,0, -327,3,119,0,327, -3,120,0,327,3, -121,0,327,3,122, -0,327,3,48,0, -327,3,49,0,327, -3,50,0,327,3, -51,0,327,3,52, -0,327,3,53,0, -327,3,54,0,327, -3,55,0,327,3, -56,0,327,3,57, -0,327,3,65,0, -327,3,66,0,327, -3,67,0,327,3, -68,0,327,3,69, -0,327,3,70,0, -327,3,71,0,327, -3,72,0,327,3, -73,0,327,3,74, -0,327,3,75,0, -327,3,76,0,327, -3,77,0,327,3, -78,0,327,3,79, -0,327,3,80,0, -327,3,81,0,327, -3,82,0,327,3, -83,0,327,3,84, -0,327,3,85,0, -327,3,86,0,327, -3,87,0,327,3, -88,0,327,3,89, -0,327,3,90,0, -327,3,95,0,327, -3,97,0,327,3, -98,0,327,3,99, -0,327,3,100,0, -327,3,101,0,327, -3,102,0,327,3, -103,0,327,3,104, -0,327,3,105,0, -327,3,106,0,327, -3,107,0,327,3, -108,0,327,1081,11, -1,829,0,330,1, --1,3,111,0,327, -3,112,0,327,3, -113,0,327,3,114, -0,327,3,115,0, -327,3,116,0,327, -3,117,0,327,3, -118,0,327,3,119, -0,327,3,120,0, -327,3,121,0,327, -3,122,0,327,3, -48,0,327,3,49, -0,327,3,50,0, -327,3,51,0,327, -3,52,0,327,3, -53,0,327,3,54, -0,327,3,55,0, -327,3,56,0,327, -3,57,0,327,3, -65,0,327,3,66, -0,327,3,67,0, -327,3,68,0,327, -3,69,0,327,3, -70,0,327,3,71, -0,327,3,72,0, -327,3,73,0,327, -3,74,0,327,3, -75,0,327,3,76, -0,327,3,77,0, -327,3,78,0,327, -3,79,0,327,3, -80,0,327,3,81, -0,327,3,82,0, -327,3,83,0,327, -3,84,0,327,3, -85,0,327,3,86, -0,327,3,87,0, -327,3,88,0,327, -3,89,0,327,3, -90,0,327,3,95, -0,327,3,97,0, -327,3,98,0,327, -3,99,0,327,3, -100,0,327,3,101, -0,327,3,102,0, -327,3,103,0,327, -3,104,0,327,3, -105,0,327,3,106, -0,327,3,107,0, -327,3,108,0,327, -1082,11,1,829,0, -330,1,-1,3,112, -0,327,3,113,0, -327,3,114,0,327, -3,115,0,327,3, -116,0,327,3,117, -0,327,3,118,0, -327,3,119,0,327, -3,120,0,327,3, -121,0,327,3,122, -0,327,3,48,0, -327,3,49,0,327, -3,50,0,327,3, -51,0,327,3,52, -0,327,3,53,0, -327,3,54,0,327, -3,55,0,327,3, -56,0,327,3,57, -0,327,3,65,0, -327,3,66,0,327, -3,67,0,327,3, -68,0,327,3,69, -0,327,3,70,0, -327,3,71,0,327, -3,72,0,327,3, -73,0,327,3,74, -0,327,3,75,0, -327,3,76,0,327, -3,77,0,327,3, -78,0,327,3,79, -0,327,3,80,0, -327,3,81,0,327, -3,82,0,327,3, -83,0,327,3,84, -0,327,3,85,0, -327,3,86,0,327, -3,87,0,327,3, -88,0,327,3,89, -0,327,3,90,0, -327,3,95,0,327, -3,97,0,327,3, -98,0,327,3,99, -0,327,3,100,0, -327,3,101,0,327, -3,102,0,327,3, -103,0,327,3,104, -0,327,3,105,0, -327,3,106,0,327, -3,107,0,327,3, -108,0,327,1083,11, -1,829,0,330,1, --1,3,106,0,327, -3,107,0,327,3, -108,0,327,1084,11, -1,829,0,330,1, --1,3,116,0,327, -3,117,0,327,3, -118,0,327,3,119, -0,327,3,120,0, -327,3,121,0,327, -3,122,0,327,3, -48,0,327,3,49, -0,327,3,50,0, -327,3,51,0,327, -3,52,0,327,3, -53,0,327,3,54, -0,327,3,55,0, -327,3,56,0,327, -3,57,0,327,3, -65,0,327,3,66, -0,327,3,67,0, -327,3,68,0,327, -3,69,0,327,3, -70,0,327,3,71, -0,327,3,72,0, -327,3,73,0,327, -3,74,0,327,3, -75,0,327,3,76, -0,327,3,77,0, -327,3,78,0,327, -3,79,0,327,3, -80,0,327,3,81, -0,327,3,82,0, -327,3,83,0,327, -3,84,0,327,3, -85,0,327,3,86, -0,327,3,87,0, -327,3,88,0,327, -3,89,0,327,3, -90,0,327,3,95, -0,327,3,97,0, -327,3,98,0,327, -3,99,0,327,3, -100,0,327,3,101, -0,327,3,102,0, -327,3,103,0,327, -3,104,0,327,3, -105,0,327,3,106, -0,327,3,107,0, -327,3,108,0,327, -1085,11,1,829,0, -330,1,-1,3,116, -0,327,3,117,0, -327,3,118,0,327, -3,119,0,327,3, -120,0,327,3,121, -0,327,3,122,0, -327,3,48,0,327, -3,49,0,327,3, -50,0,327,3,51, -0,327,3,52,0, -327,3,53,0,327, -3,54,0,327,3, -55,0,327,3,56, -0,327,3,57,0, -327,3,65,0,327, -3,66,0,327,3, -67,0,327,3,68, -0,327,3,69,0, -327,3,70,0,327, -3,71,0,327,3, -72,0,327,3,73, -0,327,3,74,0, -327,3,75,0,327, -3,76,0,327,3, -77,0,327,3,78, -0,327,3,79,0, -327,3,80,0,327, -3,81,0,327,3, -82,0,327,3,83, -0,327,3,84,0, -327,3,85,0,327, -3,86,0,327,3, -87,0,327,3,88, -0,327,3,89,0, -327,3,90,0,327, -3,95,0,327,3, -97,0,327,3,98, -0,327,3,99,0, -327,3,100,0,327, -3,101,0,327,3, -102,0,327,3,103, -0,327,3,104,0, -327,3,105,0,327, -3,106,0,327,3, -107,0,327,3,108, -0,327,1086,11,1, -829,0,330,1,-1, -3,106,0,327,3, -107,0,327,3,108, -0,327,1087,11,1, -829,0,330,1,-1, -3,110,0,327,3, -111,0,327,3,112, -0,327,3,113,0, -327,3,114,0,327, -3,115,0,327,3, -116,0,327,3,117, -0,327,3,118,0, -327,3,119,0,327, -3,120,0,327,3, -121,0,327,3,122, -0,327,3,48,0, -327,3,49,0,327, -3,50,0,327,3, -51,0,327,3,52, -0,327,3,53,0, -327,3,54,0,327, -3,55,0,327,3, -56,0,327,3,57, -0,327,3,65,0, -327,3,66,0,327, -3,67,0,327,3, -68,0,327,3,69, -0,327,3,70,0, -327,3,71,0,327, -3,72,0,327,3, -73,0,327,3,74, -0,327,3,75,0, -327,3,76,0,327, -3,77,0,327,3, -78,0,327,3,79, -0,327,3,80,0, -327,3,81,0,327, -3,82,0,327,3, -83,0,327,3,84, -0,327,3,85,0, -327,3,86,0,327, -3,87,0,327,3, -88,0,327,3,89, -0,327,3,90,0, -327,3,95,0,327, -3,97,0,327,3, -98,0,327,3,99, -0,327,3,100,0, -327,3,101,0,327, -3,102,0,327,3, -103,0,327,3,104, -0,327,3,105,0, -327,3,106,0,327, -3,107,0,327,3, -108,0,327,1088,11, -1,829,0,330,1, --1,3,115,0,327, -3,116,0,327,3, -117,0,327,3,118, -0,327,3,119,0, -327,3,120,0,327, -3,121,0,327,3, -122,0,327,3,48, -0,327,3,49,0, -327,3,50,0,327, -3,51,0,327,3, -52,0,327,3,53, -0,327,3,54,0, -327,3,55,0,327, -3,56,0,327,3, -57,0,327,3,65, -0,327,3,66,0, -327,3,67,0,327, -3,68,0,327,3, -69,0,327,3,70, -0,327,3,71,0, -327,3,72,0,327, -3,73,0,327,3, -74,0,327,3,75, -0,327,3,76,0, -327,3,77,0,327, -3,78,0,327,3, -79,0,327,3,80, -0,327,3,81,0, -327,3,82,0,327, -3,83,0,327,3, -84,0,327,3,85, -0,327,3,86,0, -327,3,87,0,327, -3,88,0,327,3, -89,0,327,3,90, -0,327,3,95,0, -327,3,97,0,327, -3,98,0,327,3, -99,0,327,3,100, -0,327,3,101,0, -327,3,102,0,327, -3,103,0,327,3, -104,0,327,3,105, -0,327,3,106,0, -327,3,107,0,327, -3,108,0,327,1089, -11,1,829,0,330, -1,-1,3,102,0, -327,3,103,0,327, -3,104,0,327,3, -105,0,327,3,106, -0,327,3,107,0, -327,3,108,0,327, -1090,11,1,829,0, -330,1,-1,3,113, -0,327,3,114,0, -327,3,115,0,327, -3,116,0,327,3, -117,0,327,3,118, -0,327,3,119,0, -327,3,120,0,327, -3,121,0,327,3, -122,0,327,3,48, -0,327,3,49,0, -327,3,50,0,327, -3,51,0,327,3, -52,0,327,3,53, -0,327,3,54,0, -327,3,55,0,327, -3,56,0,327,3, -57,0,327,3,65, -0,327,3,66,0, -327,3,67,0,327, -3,68,0,327,3, -69,0,327,3,70, -0,327,3,71,0, -327,3,72,0,327, -3,73,0,327,3, -74,0,327,3,75, -0,327,3,76,0, -327,3,77,0,327, -3,78,0,327,3, -79,0,327,3,80, -0,327,3,81,0, -327,3,82,0,327, -3,83,0,327,3, -84,0,327,3,85, -0,327,3,86,0, -327,3,87,0,327, -3,88,0,327,3, -89,0,327,3,90, -0,327,3,95,0, -327,3,97,0,327, -3,98,0,327,3, -99,0,327,3,100, -0,327,3,101,0, -327,3,102,0,327, -3,103,0,327,3, -104,0,327,3,105, -0,327,3,106,0, -327,3,107,0,327, -3,108,0,327,1091, -11,1,829,0,330, -1,-1,3,97,0, -327,3,98,0,327, -3,99,0,327,3, -100,0,327,3,101, -0,327,3,102,0, -327,3,103,0,327, -3,104,0,327,3, -105,0,327,3,106, -0,327,3,107,0, -327,3,108,0,327, -1092,11,1,829,0, -330,1,-1,3,102, -0,327,3,103,0, -327,3,104,0,327, -3,105,0,327,3, -106,0,327,3,107, -0,327,3,108,0, -327,1093,11,1,829, -0,330,1,-1,3, -110,0,327,3,111, -0,327,3,112,0, -327,3,113,0,327, -3,114,0,327,3, -115,0,327,3,116, -0,327,3,117,0, -327,3,118,0,327, -3,119,0,327,3, -120,0,327,3,121, -0,327,3,122,0, -327,3,48,0,327, -3,49,0,327,3, -50,0,327,3,51, -0,327,3,52,0, -327,3,53,0,327, -3,54,0,327,3, -55,0,327,3,56, -0,327,3,57,0, -327,3,65,0,327, -3,66,0,327,3, -67,0,327,3,68, -0,327,3,69,0, -327,3,70,0,327, -3,71,0,327,3, -72,0,327,3,73, -0,327,3,74,0, -327,3,75,0,327, -3,76,0,327,3, -77,0,327,3,78, -0,327,3,79,0, -327,3,80,0,327, -3,81,0,327,3, -82,0,327,3,83, -0,327,3,84,0, -327,3,85,0,327, -3,86,0,327,3, -87,0,327,3,88, -0,327,3,89,0, -327,3,90,0,327, -3,95,0,327,3, -97,0,327,3,98, -0,327,3,99,0, -327,3,100,0,327, -3,101,0,327,3, -102,0,327,3,103, -0,327,3,104,0, -327,3,105,0,327, -3,106,0,327,3, -107,0,327,3,108, -0,327,1094,11,1, -829,0,330,1,-1, -3,106,0,327,3, -107,0,327,3,108, -0,327,1095,11,1, -829,0,330,1,-1, -3,117,0,327,3, -118,0,327,3,119, -0,327,3,120,0, -327,3,121,0,327, -3,122,0,327,3, -48,0,327,3,49, -0,327,3,50,0, -327,3,51,0,327, -3,52,0,327,3, -53,0,327,3,54, -0,327,3,55,0, -327,3,56,0,327, -3,57,0,327,3, -65,0,327,3,66, -0,327,3,67,0, -327,3,68,0,327, -3,69,0,327,3, -70,0,327,3,71, -0,327,3,72,0, -327,3,73,0,327, -3,74,0,327,3, -75,0,327,3,76, -0,327,3,77,0, -327,3,78,0,327, -3,79,0,327,3, -80,0,327,3,81, -0,327,3,82,0, -327,3,83,0,327, -3,84,0,327,3, -85,0,327,3,86, -0,327,3,87,0, -327,3,88,0,327, -3,89,0,327,3, -90,0,327,3,95, -0,327,3,97,0, -327,3,98,0,327, -3,99,0,327,3, -100,0,327,3,101, -0,327,3,102,0, -327,3,103,0,327, -3,104,0,327,3, -105,0,327,3,106, -0,327,3,107,0, -327,3,108,0,327, -1096,11,1,829,0, -330,1,-1,3,97, -0,327,3,98,0, -327,3,99,0,327, -3,100,0,327,3, -101,0,327,3,102, -0,327,3,103,0, -327,3,104,0,327, -3,105,0,327,3, -106,0,327,3,107, -0,327,3,108,0, -327,1097,11,1,829, -0,330,1,-1,3, -111,0,327,3,112, -0,327,3,113,0, -327,3,114,0,327, -3,115,0,327,3, -116,0,327,3,117, -0,327,3,118,0, -327,3,119,0,327, -3,120,0,327,3, -121,0,327,3,122, -0,327,3,48,0, -327,3,49,0,327, -3,50,0,327,3, -51,0,327,3,52, -0,327,3,53,0, -327,3,54,0,327, -3,55,0,327,3, -56,0,327,3,57, -0,327,3,65,0, -327,3,66,0,327, -3,67,0,327,3, -68,0,327,3,69, -0,327,3,70,0, -327,3,71,0,327, -3,72,0,327,3, -73,0,327,3,74, -0,327,3,75,0, -327,3,76,0,327, -3,77,0,327,3, -78,0,327,3,79, -0,327,3,80,0, -327,3,81,0,327, -3,82,0,327,3, -83,0,327,3,84, -0,327,3,85,0, -327,3,86,0,327, -3,87,0,327,3, -88,0,327,3,89, -0,327,3,90,0, -327,3,95,0,327, -3,97,0,327,3, -98,0,327,3,99, -0,327,3,100,0, -327,3,101,0,327, -3,102,0,327,3, -103,0,327,3,104, -0,327,3,105,0, -327,3,106,0,327, -3,107,0,327,3, -108,0,327,1098,11, -1,829,0,330,1, --1,3,118,0,327, -3,119,0,327,3, -120,0,327,3,121, -0,327,3,122,0, -327,3,48,0,327, -3,49,0,327,3, -50,0,327,3,51, -0,327,3,52,0, -327,3,53,0,327, -3,54,0,327,3, -55,0,327,3,56, -0,327,3,57,0, -327,3,65,0,327, -3,66,0,327,3, -67,0,327,3,68, -0,327,3,69,0, -327,3,70,0,327, -3,71,0,327,3, -72,0,327,3,73, -0,327,3,74,0, -327,3,75,0,327, -3,76,0,327,3, -77,0,327,3,78, -0,327,3,79,0, -327,3,80,0,327, -3,81,0,327,3, -82,0,327,3,83, -0,327,3,84,0, -327,3,85,0,327, -3,86,0,327,3, -87,0,327,3,88, -0,327,3,89,0, -327,3,90,0,327, -3,95,0,327,3, -97,0,327,3,98, -0,327,3,99,0, -327,3,100,0,327, -3,101,0,1099,12, -1,12022,1100,5,63, -3,109,0,1101,12, -1,12050,1102,5,63, -3,109,0,327,3, -110,0,327,3,111, -0,1103,12,1,12080, -1104,5,63,3,109, -0,327,3,110,0, -327,3,111,0,327, -3,112,0,327,3, -113,0,327,3,114, -0,327,3,115,0, -327,3,116,0,1105, -12,1,12115,1106,5, -63,3,109,0,327, -3,110,0,327,3, -111,0,327,3,112, -0,327,3,113,0, -327,3,114,0,327, -3,115,0,327,3, -116,0,327,3,117, -0,327,3,118,0, -327,3,119,0,327, -3,120,0,327,3, -121,0,327,3,122, -0,327,3,48,0, -327,3,49,0,327, -3,50,0,327,3, -51,0,327,3,52, -0,327,3,53,0, -327,3,54,0,327, -3,55,0,327,3, -56,0,327,3,57, -0,327,3,65,0, -327,3,66,0,327, -3,67,0,327,3, -68,0,327,3,69, -0,327,3,70,0, -327,3,71,0,327, -3,72,0,327,3, -73,0,327,3,74, -0,327,3,75,0, -327,3,76,0,327, -3,77,0,327,3, -78,0,327,3,79, -0,327,3,80,0, -327,3,81,0,327, -3,82,0,327,3, -83,0,327,3,84, -0,327,3,85,0, -327,3,86,0,327, -3,87,0,327,3, -88,0,327,3,89, -0,327,3,90,0, -327,3,95,0,327, -3,97,0,327,3, -98,0,327,3,99, -0,327,3,100,0, -327,3,101,0,1107, -12,1,12162,1108,5, -63,3,109,0,327, -3,110,0,327,3, -111,0,327,3,112, -0,327,3,113,0, -327,3,114,0,327, -3,115,0,327,3, -116,0,327,3,117, -0,327,3,118,0, -327,3,119,0,327, -3,120,0,327,3, -121,0,327,3,122, -0,327,3,48,0, -327,3,49,0,327, -3,50,0,327,3, -51,0,327,3,52, -0,327,3,53,0, -327,3,54,0,327, -3,55,0,327,3, -56,0,327,3,57, -0,327,3,65,0, -327,3,66,0,327, -3,67,0,327,3, -68,0,327,3,69, -0,327,3,70,0, -327,3,71,0,327, -3,72,0,327,3, -73,0,327,3,74, -0,327,3,75,0, -327,3,76,0,327, -3,77,0,327,3, -78,0,327,3,79, -0,327,3,80,0, -327,3,81,0,327, -3,82,0,327,3, -83,0,327,3,84, -0,327,3,85,0, -327,3,86,0,327, -3,87,0,327,3, -88,0,327,3,89, -0,327,3,90,0, -327,3,95,0,1109, -12,1,12248,1110,5, -63,3,109,0,327, -3,110,0,327,3, -111,0,327,3,112, -0,327,3,113,0, -327,3,114,0,327, -3,115,0,327,3, -116,0,327,3,117, -0,327,3,118,0, -327,3,119,0,327, -3,120,0,327,3, -121,0,327,3,122, -0,327,3,48,0, -327,3,49,0,327, -3,50,0,327,3, -51,0,327,3,52, -0,327,3,53,0, -327,3,54,0,327, -3,55,0,327,3, -56,0,327,3,57, -0,327,3,65,0, -327,3,66,0,327, -3,67,0,327,3, -68,0,327,3,69, -0,327,3,70,0, -327,3,71,0,327, -3,72,0,327,3, -73,0,327,3,74, -0,327,3,75,0, -327,3,76,0,327, -3,77,0,327,3, -78,0,327,3,79, -0,327,3,80,0, -327,3,81,0,327, -3,82,0,327,3, -83,0,327,3,84, -0,327,3,85,0, -327,3,86,0,327, -3,87,0,327,3, -88,0,327,3,89, -0,327,3,90,0, -327,3,95,0,327, -3,97,0,327,3, -98,0,327,3,99, -0,327,3,100,0, -1111,12,1,12294,1112, -5,63,3,109,0, -327,3,110,0,327, -3,111,0,327,3, -112,0,327,3,113, -0,327,3,114,0, -327,3,115,0,327, -3,116,0,327,3, -117,0,327,3,118, -0,327,3,119,0, -327,3,120,0,327, -3,121,0,327,3, -122,0,327,3,48, -0,327,3,49,0, -327,3,50,0,327, -3,51,0,327,3, -52,0,327,3,53, -0,327,3,54,0, -327,3,55,0,327, -3,56,0,327,3, -57,0,327,3,65, -0,327,3,66,0, -327,3,67,0,327, -3,68,0,327,3, -69,0,327,3,70, -0,327,3,71,0, -327,3,72,0,327, -3,73,0,327,3, -74,0,327,3,75, -0,327,3,76,0, -327,3,77,0,327, -3,78,0,327,3, -79,0,327,3,80, -0,327,3,81,0, -327,3,82,0,327, -3,83,0,327,3, -84,0,327,3,85, -0,327,3,86,0, -327,3,87,0,327, -3,88,0,327,3, -89,0,327,3,90, -0,327,3,95,0, -327,3,97,0,1113, -12,1,12337,1114,5, -63,3,109,0,327, -3,110,0,327,3, -111,0,327,3,112, -0,327,3,113,0, -327,3,114,0,327, -3,115,0,327,3, -116,0,1115,12,1, -12372,1116,5,63,3, -109,0,327,3,110, -0,327,3,111,0, -327,3,112,0,327, -3,113,0,327,3, -114,0,327,3,115, -0,327,3,116,0, -327,3,117,0,327, -3,118,0,327,3, -119,0,327,3,120, -0,327,3,121,0, -327,3,122,0,327, -3,48,0,327,3, -49,0,327,3,50, -0,327,3,51,0, -327,3,52,0,327, -3,53,0,327,3, -54,0,327,3,55, -0,327,3,56,0, -327,3,57,0,327, -3,65,0,327,3, -66,0,327,3,67, -0,327,3,68,0, -327,3,69,0,327, -3,70,0,327,3, -71,0,327,3,72, -0,327,3,73,0, -327,3,74,0,327, -3,75,0,327,3, -76,0,327,3,77, -0,327,3,78,0, -327,3,79,0,327, -3,80,0,327,3, -81,0,327,3,82, -0,327,3,83,0, -327,3,84,0,327, -3,85,0,327,3, -86,0,327,3,87, -0,327,3,88,0, -327,3,89,0,327, -3,90,0,327,3, -95,0,327,3,97, -0,1117,12,1,12415, -1118,5,63,3,109, -0,327,3,110,0, -327,3,111,0,327, -3,112,0,327,3, -113,0,327,3,114, -0,327,3,115,0, -327,3,116,0,327, -3,117,0,327,3, -118,0,327,3,119, -0,327,3,120,0, -327,3,121,0,327, -3,122,0,327,3, -48,0,327,3,49, -0,327,3,50,0, -327,3,51,0,327, -3,52,0,327,3, -53,0,327,3,54, -0,327,3,55,0, -327,3,56,0,327, -3,57,0,327,3, -65,0,327,3,66, -0,327,3,67,0, -327,3,68,0,327, -3,69,0,327,3, -70,0,327,3,71, -0,327,3,72,0, -327,3,73,0,327, -3,74,0,327,3, -75,0,327,3,76, -0,327,3,77,0, -327,3,78,0,327, -3,79,0,327,3, -80,0,327,3,81, -0,327,3,82,0, -327,3,83,0,327, -3,84,0,327,3, -85,0,327,3,86, -0,327,3,87,0, -327,3,88,0,327, -3,89,0,327,3, -90,0,327,3,95, -0,327,3,97,0, -327,3,98,0,327, -3,99,0,327,3, -100,0,327,3,101, -0,327,3,102,0, -327,3,103,0,327, -3,104,0,327,3, -105,0,327,3,106, -0,327,3,107,0, -327,3,108,0,327, -1119,11,1,705,0, -1120,4,34,82,0, -69,0,77,0,79, -0,84,0,69,0, -95,0,68,0,65, -0,84,0,65,0, -95,0,69,0,86, -0,69,0,78,0, -84,0,1,-1,3, -98,0,327,3,99, -0,327,3,100,0, -327,3,101,0,327, -3,102,0,327,3, -103,0,327,3,104, -0,327,3,105,0, -327,3,106,0,327, -3,107,0,327,3, -108,0,327,1121,11, -1,829,0,330,1, --1,3,117,0,327, -3,118,0,327,3, -119,0,327,3,120, -0,327,3,121,0, -327,3,122,0,327, -3,48,0,327,3, -49,0,327,3,50, -0,327,3,51,0, -327,3,52,0,327, -3,53,0,327,3, -54,0,327,3,55, -0,327,3,56,0, -327,3,57,0,327, -3,65,0,327,3, -66,0,327,3,67, -0,327,3,68,0, -327,3,69,0,327, -3,70,0,327,3, -71,0,327,3,72, -0,327,3,73,0, -327,3,74,0,327, -3,75,0,327,3, -76,0,327,3,77, -0,327,3,78,0, -327,3,79,0,327, -3,80,0,327,3, -81,0,327,3,82, -0,327,3,83,0, -327,3,84,0,327, -3,85,0,327,3, -86,0,327,3,87, -0,327,3,88,0, -327,3,89,0,327, -3,90,0,327,3, -95,0,327,3,97, -0,327,3,98,0, -327,3,99,0,327, -3,100,0,327,3, -101,0,327,3,102, -0,327,3,103,0, -327,3,104,0,327, -3,105,0,327,3, -106,0,327,3,107, -0,327,3,108,0, -327,1122,11,1,829, -0,330,1,-1,3, -98,0,327,3,99, -0,327,3,100,0, -327,3,101,0,327, -3,102,0,327,3, -103,0,327,3,104, -0,327,3,105,0, -327,3,106,0,327, -3,107,0,327,3, -108,0,327,1123,11, -1,829,0,330,1, --1,3,101,0,327, -3,102,0,327,3, -103,0,327,3,104, -0,327,3,105,0, -327,3,106,0,327, -3,107,0,327,3, -108,0,327,1124,11, -1,829,0,330,1, --1,3,97,0,327, -3,98,0,327,3, -99,0,327,3,100, -0,327,3,101,0, -327,3,102,0,327, -3,103,0,327,3, -104,0,327,3,105, -0,327,3,106,0, -327,3,107,0,327, -3,108,0,327,1125, -11,1,829,0,330, -1,-1,3,102,0, -327,3,103,0,327, -3,104,0,327,3, -105,0,327,3,106, -0,327,3,107,0, -327,3,108,0,327, -1126,11,1,829,0, -330,1,-1,3,117, -0,327,3,118,0, -327,3,119,0,327, -3,120,0,327,3, -121,0,327,3,122, -0,327,3,48,0, -327,3,49,0,327, -3,50,0,327,3, -51,0,327,3,52, -0,327,3,53,0, -327,3,54,0,327, -3,55,0,327,3, -56,0,327,3,57, -0,327,3,65,0, -327,3,66,0,327, -3,67,0,327,3, -68,0,327,3,69, -0,327,3,70,0, -327,3,71,0,327, -3,72,0,327,3, -73,0,327,3,74, -0,327,3,75,0, -327,3,76,0,327, -3,77,0,327,3, -78,0,327,3,79, -0,327,3,80,0, -327,3,81,0,327, -3,82,0,327,3, -83,0,327,3,84, -0,327,3,85,0, -327,3,86,0,327, -3,87,0,327,3, -88,0,327,3,89, -0,327,3,90,0, -327,3,95,0,327, -3,97,0,327,3, -98,0,327,3,99, -0,327,3,100,0, -327,3,101,0,327, -3,102,0,327,3, -103,0,327,3,104, -0,327,3,105,0, -327,3,106,0,327, -3,107,0,327,3, -108,0,327,1127,11, -1,829,0,330,1, --1,3,112,0,327, -3,113,0,327,3, -114,0,327,3,115, -0,327,3,116,0, -327,3,117,0,327, -3,118,0,327,3, -119,0,327,3,120, -0,327,3,121,0, -327,3,122,0,327, -3,48,0,327,3, -49,0,327,3,50, -0,327,3,51,0, -327,3,52,0,327, -3,53,0,327,3, -54,0,327,3,55, -0,327,3,56,0, -327,3,57,0,327, -3,65,0,327,3, -66,0,327,3,67, -0,327,3,68,0, -327,3,69,0,327, -3,70,0,327,3, -71,0,327,3,72, -0,327,3,73,0, -327,3,74,0,327, -3,75,0,327,3, -76,0,327,3,77, -0,327,3,78,0, -327,3,79,0,327, -3,80,0,327,3, -81,0,327,3,82, -0,327,3,83,0, -327,3,84,0,327, -3,85,0,327,3, -86,0,327,3,87, -0,327,3,88,0, -327,3,89,0,327, -3,90,0,327,3, -95,0,327,3,97, -0,327,3,98,0, -327,3,99,0,327, -3,100,0,327,3, -101,0,327,3,102, -0,327,3,103,0, -327,3,104,0,327, -3,105,0,327,3, -106,0,327,3,107, -0,327,3,108,0, -327,1128,11,1,829, -0,330,1,-1,3, -110,0,327,3,111, -0,327,3,112,0, -327,3,113,0,327, -3,114,0,327,3, -115,0,327,3,116, -0,1129,12,1,13137, -1130,5,63,3,109, -0,327,3,110,0, -327,3,111,0,327, -3,112,0,327,3, -113,0,327,3,114, -0,327,3,115,0, -327,3,116,0,327, -3,117,0,1131,12, -1,13173,1132,5,63, -3,109,0,327,3, -110,0,327,3,111, -0,327,3,112,0, -327,3,113,0,327, -3,114,0,1133,12, -1,13206,1134,5,63, -3,109,0,327,3, -110,0,1135,12,1, -13235,1136,5,63,3, -109,0,327,3,110, -0,327,3,111,0, -327,3,112,0,327, -3,113,0,327,3, -114,0,327,3,115, -0,327,3,116,0, -327,3,117,0,327, -3,118,0,327,3, -119,0,327,3,120, -0,327,3,121,0, -327,3,122,0,327, -3,48,0,327,3, -49,0,327,3,50, -0,327,3,51,0, -327,3,52,0,327, -3,53,0,327,3, -54,0,327,3,55, -0,327,3,56,0, -327,3,57,0,327, -3,65,0,327,3, -66,0,327,3,67, -0,327,3,68,0, -327,3,69,0,327, -3,70,0,327,3, -71,0,327,3,72, -0,327,3,73,0, -327,3,74,0,327, -3,75,0,327,3, -76,0,327,3,77, -0,327,3,78,0, -327,3,79,0,327, -3,80,0,327,3, -81,0,327,3,82, -0,327,3,83,0, -327,3,84,0,327, -3,85,0,327,3, -86,0,327,3,87, -0,327,3,88,0, -327,3,89,0,327, -3,90,0,327,3, -95,0,327,3,97, -0,327,3,98,0, -327,3,99,0,327, -3,100,0,327,3, -101,0,327,3,102, -0,327,3,103,0, -327,3,104,0,327, -3,105,0,327,3, -106,0,327,3,107, -0,327,3,108,0, -327,1137,11,1,273, -0,1138,4,12,82, -0,69,0,84,0, -85,0,82,0,78, -0,1,-1,3,111, -0,327,3,112,0, -327,3,113,0,327, -3,114,0,327,3, -115,0,327,3,116, -0,327,3,117,0, -327,3,118,0,327, -3,119,0,327,3, -120,0,327,3,121, -0,327,3,122,0, -327,3,48,0,327, -3,49,0,327,3, -50,0,327,3,51, -0,327,3,52,0, -327,3,53,0,327, -3,54,0,327,3, -55,0,327,3,56, -0,327,3,57,0, -327,3,65,0,327, -3,66,0,327,3, -67,0,327,3,68, -0,327,3,69,0, -327,3,70,0,327, -3,71,0,327,3, -72,0,327,3,73, -0,327,3,74,0, -327,3,75,0,327, -3,76,0,327,3, -77,0,327,3,78, -0,327,3,79,0, -327,3,80,0,327, -3,81,0,327,3, -82,0,327,3,83, -0,327,3,84,0, -327,3,85,0,327, -3,86,0,327,3, -87,0,327,3,88, -0,327,3,89,0, -327,3,90,0,327, -3,95,0,327,3, -97,0,327,3,98, -0,327,3,99,0, -327,3,100,0,327, -3,101,0,327,3, -102,0,327,3,103, -0,327,3,104,0, -327,3,105,0,327, -3,106,0,327,3, -107,0,327,3,108, -0,327,1139,11,1, -829,0,330,1,-1, -3,115,0,327,3, -116,0,327,3,117, -0,327,3,118,0, -327,3,119,0,327, -3,120,0,327,3, -121,0,327,3,122, -0,327,3,48,0, -327,3,49,0,327, -3,50,0,327,3, -51,0,327,3,52, -0,327,3,53,0, -327,3,54,0,327, -3,55,0,327,3, -56,0,327,3,57, -0,327,3,65,0, -327,3,66,0,327, -3,67,0,327,3, -68,0,327,3,69, -0,327,3,70,0, -327,3,71,0,327, -3,72,0,327,3, -73,0,327,3,74, -0,327,3,75,0, -327,3,76,0,327, -3,77,0,327,3, -78,0,327,3,79, -0,327,3,80,0, -327,3,81,0,327, -3,82,0,327,3, -83,0,327,3,84, -0,327,3,85,0, -327,3,86,0,327, -3,87,0,327,3, -88,0,327,3,89, -0,327,3,90,0, -327,3,95,0,327, -3,97,0,327,3, -98,0,327,3,99, -0,327,3,100,0, -327,3,101,0,327, -3,102,0,327,3, -103,0,327,3,104, -0,327,3,105,0, -327,3,106,0,327, -3,107,0,327,3, -108,0,327,1140,11, -1,829,0,330,1, --1,3,118,0,327, -3,119,0,327,3, -120,0,327,3,121, -0,327,3,122,0, -327,3,48,0,327, -3,49,0,327,3, -50,0,327,3,51, -0,327,3,52,0, -327,3,53,0,327, -3,54,0,327,3, -55,0,327,3,56, -0,327,3,57,0, -327,3,65,0,327, -3,66,0,327,3, -67,0,327,3,68, -0,327,3,69,0, -327,3,70,0,327, -3,71,0,327,3, -72,0,327,3,73, -0,327,3,74,0, -327,3,75,0,327, -3,76,0,327,3, -77,0,327,3,78, -0,327,3,79,0, -327,3,80,0,327, -3,81,0,327,3, -82,0,327,3,83, -0,327,3,84,0, -327,3,85,0,327, -3,86,0,327,3, -87,0,327,3,88, -0,327,3,89,0, -327,3,90,0,327, -3,95,0,327,3, -97,0,327,3,98, -0,327,3,99,0, -327,3,100,0,327, -3,101,0,327,3, -102,0,327,3,103, -0,327,3,104,0, -327,3,105,0,327, -3,106,0,327,3, -107,0,327,3,108, -0,327,1141,11,1, -829,0,330,1,-1, -3,117,0,327,3, -118,0,327,3,119, -0,327,3,120,0, -327,3,121,0,327, -3,122,0,327,3, -48,0,327,3,49, -0,327,3,50,0, -327,3,51,0,327, -3,52,0,327,3, -53,0,327,3,54, -0,327,3,55,0, -327,3,56,0,327, -3,57,0,327,3, -65,0,327,3,66, -0,327,3,67,0, -327,3,68,0,327, -3,69,0,327,3, -70,0,327,3,71, -0,327,3,72,0, -327,3,73,0,327, -3,74,0,327,3, -75,0,327,3,76, -0,327,3,77,0, -327,3,78,0,327, -3,79,0,327,3, -80,0,327,3,81, -0,327,3,82,0, -327,3,83,0,327, -3,84,0,327,3, -85,0,327,3,86, -0,327,3,87,0, -327,3,88,0,327, -3,89,0,327,3, -90,0,327,3,95, -0,327,3,97,0, -327,3,98,0,327, -3,99,0,327,3, -100,0,327,3,101, -0,327,3,102,0, -327,3,103,0,327, -3,104,0,327,3, -105,0,327,3,106, -0,327,3,107,0, -327,3,108,0,327, -1142,11,1,829,0, -330,1,-1,3,102, -0,327,3,103,0, -327,3,104,0,327, -3,105,0,327,3, -106,0,327,3,107, -0,327,3,108,0, -327,1143,11,1,829, -0,330,1,-1,3, -115,0,1144,12,1, -13776,1145,5,63,3, -109,0,327,3,110, -0,327,3,111,0, -327,3,112,0,327, -3,113,0,327,3, -114,0,327,3,115, -0,327,3,116,0, -1146,12,1,13811,1147, -5,63,3,109,0, -327,3,110,0,327, -3,111,0,327,3, -112,0,327,3,113, -0,327,3,114,0, -1148,12,1,13844,1149, -5,63,3,109,0, -327,3,110,0,327, -3,111,0,327,3, -112,0,327,3,113, -0,327,3,114,0, -327,3,115,0,327, -3,116,0,327,3, -117,0,327,3,118, -0,327,3,119,0, -327,3,120,0,327, -3,121,0,327,3, -122,0,327,3,48, -0,327,3,49,0, -327,3,50,0,327, -3,51,0,327,3, -52,0,327,3,53, -0,327,3,54,0, -327,3,55,0,327, -3,56,0,327,3, -57,0,327,3,65, -0,327,3,66,0, -327,3,67,0,327, -3,68,0,327,3, -69,0,327,3,70, -0,327,3,71,0, -327,3,72,0,327, -3,73,0,327,3, -74,0,327,3,75, -0,327,3,76,0, -327,3,77,0,327, -3,78,0,327,3, -79,0,327,3,80, -0,327,3,81,0, -327,3,82,0,327, -3,83,0,327,3, -84,0,327,3,85, -0,327,3,86,0, -327,3,87,0,327, -3,88,0,327,3, -89,0,327,3,90, -0,327,3,95,0, -327,3,97,0,327, -3,98,0,327,3, -99,0,327,3,100, -0,327,3,101,0, -327,3,102,0,327, -3,103,0,327,3, -104,0,327,3,105, -0,1150,12,1,13895, -1151,5,63,3,109, -0,327,3,110,0, -1152,12,1,13924,1153, -5,63,3,109,0, -327,3,110,0,327, -3,111,0,327,3, -112,0,327,3,113, -0,327,3,114,0, -327,3,115,0,327, -3,116,0,327,3, -117,0,327,3,118, -0,327,3,119,0, -327,3,120,0,327, -3,121,0,327,3, -122,0,327,3,48, -0,327,3,49,0, -327,3,50,0,327, -3,51,0,327,3, -52,0,327,3,53, -0,327,3,54,0, -327,3,55,0,327, -3,56,0,327,3, -57,0,327,3,65, -0,327,3,66,0, -327,3,67,0,327, -3,68,0,327,3, -69,0,327,3,70, -0,327,3,71,0, -327,3,72,0,327, -3,73,0,327,3, -74,0,327,3,75, -0,327,3,76,0, -327,3,77,0,327, -3,78,0,327,3, -79,0,327,3,80, -0,327,3,81,0, -327,3,82,0,327, -3,83,0,327,3, -84,0,327,3,85, -0,327,3,86,0, -327,3,87,0,327, -3,88,0,327,3, -89,0,327,3,90, -0,327,3,95,0, -327,3,97,0,327, -3,98,0,327,3, -99,0,327,3,100, -0,327,3,101,0, -327,3,102,0,327, -3,103,0,1154,12, -1,13973,1155,5,63, -3,109,0,327,3, -110,0,327,3,111, -0,327,3,112,0, -327,3,113,0,327, -3,114,0,327,3, -115,0,327,3,116, -0,327,3,117,0, -327,3,118,0,327, -3,119,0,327,3, -120,0,327,3,121, -0,327,3,122,0, -327,3,48,0,327, -3,49,0,327,3, -50,0,327,3,51, -0,327,3,52,0, -327,3,53,0,327, -3,54,0,327,3, -55,0,327,3,56, -0,327,3,57,0, -327,3,65,0,327, -3,66,0,327,3, -67,0,327,3,68, -0,327,3,69,0, -327,3,70,0,327, -3,71,0,327,3, -72,0,327,3,73, -0,327,3,74,0, -327,3,75,0,327, -3,76,0,327,3, -77,0,327,3,78, -0,327,3,79,0, -327,3,80,0,327, -3,81,0,327,3, -82,0,327,3,83, -0,327,3,84,0, -327,3,85,0,327, -3,86,0,327,3, -87,0,327,3,88, -0,327,3,89,0, -327,3,90,0,327, -3,95,0,327,3, -97,0,327,3,98, -0,327,3,99,0, -327,3,100,0,327, -3,101,0,327,3, -102,0,327,3,103, -0,327,3,104,0, -327,3,105,0,327, -3,106,0,327,3, -107,0,327,3,108, -0,327,1156,11,1, -303,0,1157,4,22, -83,0,84,0,82, -0,73,0,78,0, -71,0,95,0,84, -0,89,0,80,0, -69,0,1,-1,3, -104,0,327,3,105, -0,327,3,106,0, -327,3,107,0,327, -3,108,0,327,1158, -11,1,829,0,330, -1,-1,3,111,0, -327,3,112,0,327, -3,113,0,327,3, -114,0,327,3,115, -0,327,3,116,0, -327,3,117,0,327, -3,118,0,327,3, -119,0,327,3,120, -0,327,3,121,0, -327,3,122,0,327, -3,48,0,327,3, -49,0,327,3,50, -0,327,3,51,0, -327,3,52,0,327, -3,53,0,327,3, -54,0,327,3,55, -0,327,3,56,0, -327,3,57,0,327, -3,65,0,327,3, -66,0,327,3,67, -0,327,3,68,0, -327,3,69,0,327, -3,70,0,327,3, -71,0,327,3,72, -0,327,3,73,0, -327,3,74,0,327, -3,75,0,327,3, -76,0,327,3,77, -0,327,3,78,0, -327,3,79,0,327, -3,80,0,327,3, -81,0,327,3,82, -0,327,3,83,0, -327,3,84,0,327, -3,85,0,327,3, -86,0,327,3,87, -0,327,3,88,0, -327,3,89,0,327, -3,90,0,327,3, -95,0,327,3,97, -0,327,3,98,0, -327,3,99,0,327, -3,100,0,327,3, -101,0,327,3,102, -0,327,3,103,0, -327,3,104,0,327, -3,105,0,327,3, -106,0,327,3,107, -0,327,3,108,0, -327,1159,11,1,829, -0,330,1,-1,3, -106,0,327,3,107, -0,327,3,108,0, -327,1160,11,1,829, -0,330,1,-1,3, -115,0,327,3,116, -0,327,3,117,0, -327,3,118,0,327, -3,119,0,327,3, -120,0,327,3,121, -0,327,3,122,0, -327,3,48,0,327, -3,49,0,327,3, -50,0,327,3,51, -0,327,3,52,0, -327,3,53,0,327, -3,54,0,327,3, -55,0,327,3,56, -0,327,3,57,0, -327,3,65,0,327, -3,66,0,327,3, -67,0,327,3,68, -0,327,3,69,0, -327,3,70,0,327, -3,71,0,327,3, -72,0,327,3,73, -0,327,3,74,0, -327,3,75,0,327, -3,76,0,327,3, -77,0,327,3,78, -0,327,3,79,0, -327,3,80,0,327, -3,81,0,327,3, -82,0,327,3,83, -0,327,3,84,0, -327,3,85,0,327, -3,86,0,327,3, -87,0,327,3,88, -0,327,3,89,0, -327,3,90,0,327, -3,95,0,327,3, -97,0,1161,12,1, -14334,1162,5,63,3, -109,0,327,3,110, -0,327,3,111,0, -327,3,112,0,327, -3,113,0,327,3, -114,0,327,3,115, -0,327,3,116,0, -1163,12,1,14369,1164, -5,63,3,109,0, -327,3,110,0,327, -3,111,0,327,3, -112,0,327,3,113, -0,327,3,114,0, -327,3,115,0,327, -3,116,0,327,3, -117,0,327,3,118, -0,327,3,119,0, -327,3,120,0,327, -3,121,0,327,3, -122,0,327,3,48, -0,327,3,49,0, -327,3,50,0,327, -3,51,0,327,3, -52,0,327,3,53, -0,327,3,54,0, -327,3,55,0,327, -3,56,0,327,3, -57,0,327,3,65, -0,327,3,66,0, -327,3,67,0,327, -3,68,0,327,3, -69,0,327,3,70, -0,327,3,71,0, -327,3,72,0,327, -3,73,0,327,3, -74,0,327,3,75, -0,327,3,76,0, -327,3,77,0,327, -3,78,0,327,3, -79,0,327,3,80, -0,327,3,81,0, -327,3,82,0,327, -3,83,0,327,3, -84,0,327,3,85, -0,327,3,86,0, -327,3,87,0,327, -3,88,0,327,3, -89,0,327,3,90, -0,327,3,95,0, -327,3,97,0,327, -3,98,0,327,3, -99,0,327,3,100, -0,327,3,101,0, -1165,12,1,14416,1166, -5,63,3,109,0, -327,3,110,0,327, -3,111,0,327,3, -112,0,327,3,113, -0,327,3,114,0, -327,3,115,0,327, -3,116,0,327,3, -117,0,327,3,118, -0,327,3,119,0, -327,3,120,0,327, -3,121,0,327,3, -122,0,327,3,48, -0,327,3,49,0, -327,3,50,0,327, -3,51,0,327,3, -52,0,327,3,53, -0,327,3,54,0, -327,3,55,0,327, -3,56,0,327,3, -57,0,327,3,65, -0,327,3,66,0, -327,3,67,0,327, -3,68,0,327,3, -69,0,327,3,70, -0,327,3,71,0, -327,3,72,0,327, -3,73,0,327,3, -74,0,327,3,75, -0,327,3,76,0, -327,3,77,0,327, -3,78,0,327,3, -79,0,327,3,80, -0,327,3,81,0, -327,3,82,0,327, -3,83,0,327,3, -84,0,327,3,85, -0,327,3,86,0, -327,3,87,0,327, -3,88,0,327,3, -89,0,327,3,90, -0,327,3,95,0, -1167,12,1,14502,1168, -5,63,3,109,0, -327,3,110,0,327, -3,111,0,327,3, -112,0,327,3,113, -0,327,3,114,0, -327,3,115,0,327, -3,116,0,327,3, -117,0,327,3,118, -0,327,3,119,0, -327,3,120,0,327, -3,121,0,327,3, -122,0,327,3,48, -0,327,3,49,0, -327,3,50,0,327, -3,51,0,327,3, -52,0,327,3,53, -0,327,3,54,0, -327,3,55,0,327, -3,56,0,327,3, -57,0,327,3,65, -0,327,3,66,0, -327,3,67,0,327, -3,68,0,327,3, -69,0,327,3,70, -0,327,3,71,0, -327,3,72,0,327, -3,73,0,327,3, -74,0,327,3,75, -0,327,3,76,0, -327,3,77,0,327, -3,78,0,327,3, -79,0,327,3,80, -0,327,3,81,0, -327,3,82,0,327, -3,83,0,327,3, -84,0,327,3,85, -0,327,3,86,0, -327,3,87,0,327, -3,88,0,327,3, -89,0,327,3,90, -0,327,3,95,0, -327,3,97,0,327, -3,98,0,327,3, -99,0,327,3,100, -0,327,3,101,0, -1169,12,1,14549,1170, -5,63,3,109,0, -327,3,110,0,1171, -12,1,14578,1172,5, -63,3,109,0,327, -3,110,0,327,3, -111,0,327,3,112, -0,327,3,113,0, -327,3,114,0,327, -3,115,0,327,3, -116,0,1173,12,1, -14613,1174,5,63,3, -109,0,327,3,110, -0,327,3,111,0, -327,3,112,0,327, -3,113,0,327,3, -114,0,1175,12,1, -14646,1176,5,63,3, -109,0,327,3,110, -0,327,3,111,0, -327,3,112,0,327, -3,113,0,327,3, -114,0,327,3,115, -0,327,3,116,0, -327,3,117,0,327, -3,118,0,327,3, -119,0,327,3,120, -0,327,3,121,0, -1177,12,1,14686,1178, -5,63,3,109,0, -327,3,110,0,327, -3,111,0,327,3, -112,0,327,3,113, -0,327,3,114,0, -327,3,115,0,327, -3,116,0,327,3, -117,0,327,3,118, -0,327,3,119,0, -327,3,120,0,327, -3,121,0,327,3, -122,0,327,3,48, -0,327,3,49,0, -327,3,50,0,327, -3,51,0,327,3, -52,0,327,3,53, -0,327,3,54,0, -327,3,55,0,327, -3,56,0,327,3, -57,0,327,3,65, -0,327,3,66,0, -327,3,67,0,327, -3,68,0,327,3, -69,0,327,3,70, -0,327,3,71,0, -327,3,72,0,327, -3,73,0,327,3, -74,0,327,3,75, -0,327,3,76,0, -327,3,77,0,327, -3,78,0,327,3, -79,0,327,3,80, -0,327,3,81,0, -327,3,82,0,327, -3,83,0,327,3, -84,0,327,3,85, -0,327,3,86,0, -327,3,87,0,327, -3,88,0,327,3, -89,0,327,3,90, -0,327,3,95,0, -327,3,97,0,327, -3,98,0,327,3, -99,0,327,3,100, -0,327,3,101,0, -327,3,102,0,327, -3,103,0,327,3, -104,0,327,3,105, -0,327,3,106,0, -327,3,107,0,327, -3,108,0,327,1179, -11,1,754,0,1180, -4,34,83,0,84, -0,65,0,84,0, -69,0,95,0,69, -0,78,0,84,0, -82,0,89,0,95, -0,69,0,86,0, -69,0,78,0,84, -0,1,-1,3,122, -0,327,3,48,0, -327,3,49,0,327, -3,50,0,327,3, -51,0,327,3,52, -0,327,3,53,0, -327,3,54,0,327, -3,55,0,327,3, -56,0,327,3,57, -0,327,3,65,0, -327,3,66,0,327, -3,67,0,327,3, -68,0,327,3,69, -0,327,3,70,0, -327,3,71,0,327, -3,72,0,327,3, -73,0,327,3,74, -0,327,3,75,0, -327,3,76,0,327, -3,77,0,327,3, -78,0,327,3,79, -0,327,3,80,0, -327,3,81,0,327, -3,82,0,327,3, -83,0,327,3,84, -0,327,3,85,0, -327,3,86,0,327, -3,87,0,327,3, -88,0,327,3,89, -0,327,3,90,0, -327,3,95,0,327, -3,97,0,327,3, -98,0,327,3,99, -0,327,3,100,0, -327,3,101,0,327, -3,102,0,327,3, -103,0,327,3,104, -0,327,3,105,0, -327,3,106,0,327, -3,107,0,327,3, -108,0,327,1181,11, -1,829,0,330,1, --1,3,115,0,327, -3,116,0,327,3, -117,0,327,3,118, -0,327,3,119,0, -327,3,120,0,327, -3,121,0,327,3, -122,0,327,3,48, -0,327,3,49,0, -327,3,50,0,327, -3,51,0,327,3, -52,0,327,3,53, -0,327,3,54,0, -327,3,55,0,327, -3,56,0,327,3, -57,0,327,3,65, -0,327,3,66,0, -327,3,67,0,327, -3,68,0,327,3, -69,0,327,3,70, -0,327,3,71,0, -327,3,72,0,327, -3,73,0,327,3, -74,0,327,3,75, -0,327,3,76,0, -327,3,77,0,327, -3,78,0,327,3, -79,0,327,3,80, -0,327,3,81,0, -327,3,82,0,327, -3,83,0,327,3, -84,0,327,3,85, -0,327,3,86,0, -327,3,87,0,327, -3,88,0,327,3, -89,0,327,3,90, -0,327,3,95,0, -327,3,97,0,327, -3,98,0,327,3, -99,0,327,3,100, -0,327,3,101,0, -327,3,102,0,327, -3,103,0,327,3, -104,0,327,3,105, -0,327,3,106,0, -327,3,107,0,327, -3,108,0,327,1182, -11,1,829,0,330, -1,-1,3,117,0, -327,3,118,0,327, -3,119,0,327,3, -120,0,327,3,121, -0,327,3,122,0, -327,3,48,0,327, -3,49,0,327,3, -50,0,327,3,51, -0,327,3,52,0, -327,3,53,0,327, -3,54,0,327,3, -55,0,327,3,56, -0,327,3,57,0, -327,3,65,0,327, -3,66,0,327,3, -67,0,327,3,68, -0,327,3,69,0, -327,3,70,0,327, -3,71,0,327,3, -72,0,327,3,73, -0,327,3,74,0, -327,3,75,0,327, -3,76,0,327,3, -77,0,327,3,78, -0,327,3,79,0, -327,3,80,0,327, -3,81,0,327,3, -82,0,327,3,83, -0,327,3,84,0, -327,3,85,0,327, -3,86,0,327,3, -87,0,327,3,88, -0,327,3,89,0, -327,3,90,0,327, -3,95,0,327,3, -97,0,327,3,98, -0,327,3,99,0, -327,3,100,0,327, -3,101,0,327,3, -102,0,327,3,103, -0,327,3,104,0, -327,3,105,0,327, -3,106,0,327,3, -107,0,327,3,108, -0,327,1183,11,1, -829,0,330,1,-1, -3,111,0,327,3, -112,0,327,3,113, -0,327,3,114,0, -327,3,115,0,327, -3,116,0,327,3, -117,0,327,3,118, -0,327,3,119,0, -327,3,120,0,1184, -12,1,15068,1185,5, -63,3,109,0,327, -3,110,0,327,3, -111,0,327,3,112, -0,327,3,113,0, -327,3,114,0,327, -3,115,0,327,3, -116,0,327,3,117, -0,327,3,118,0, -327,3,119,0,327, -3,120,0,327,3, -121,0,327,3,122, -0,327,3,48,0, -327,3,49,0,327, -3,50,0,327,3, -51,0,327,3,52, -0,327,3,53,0, -327,3,54,0,327, -3,55,0,327,3, -56,0,327,3,57, -0,327,3,65,0, -327,3,66,0,327, -3,67,0,327,3, -68,0,327,3,69, -0,327,3,70,0, -327,3,71,0,327, -3,72,0,327,3, -73,0,327,3,74, -0,327,3,75,0, -327,3,76,0,327, -3,77,0,327,3, -78,0,327,3,79, -0,327,3,80,0, -327,3,81,0,327, -3,82,0,327,3, -83,0,327,3,84, -0,327,3,85,0, -327,3,86,0,327, -3,87,0,327,3, -88,0,327,3,89, -0,327,3,90,0, -327,3,95,0,327, -3,97,0,327,3, -98,0,327,3,99, -0,327,3,100,0, -327,3,101,0,327, -3,102,0,327,3, -103,0,327,3,104, -0,327,3,105,0, -1186,12,1,15119,1187, -5,63,3,109,0, -327,3,110,0,327, -3,111,0,327,3, -112,0,327,3,113, -0,327,3,114,0, -327,3,115,0,327, -3,116,0,1188,12, -1,15154,1189,5,63, -3,109,0,327,3, -110,0,327,3,111, -0,327,3,112,0, -327,3,113,0,327, -3,114,0,327,3, -115,0,327,3,116, -0,327,3,117,0, -327,3,118,0,327, -3,119,0,327,3, -120,0,327,3,121, -0,327,3,122,0, -327,3,48,0,327, -3,49,0,327,3, -50,0,327,3,51, -0,327,3,52,0, -327,3,53,0,327, -3,54,0,327,3, -55,0,327,3,56, -0,327,3,57,0, -327,3,65,0,327, -3,66,0,327,3, -67,0,327,3,68, -0,327,3,69,0, -327,3,70,0,327, -3,71,0,327,3, -72,0,327,3,73, -0,327,3,74,0, -327,3,75,0,327, -3,76,0,327,3, -77,0,327,3,78, -0,327,3,79,0, -327,3,80,0,327, -3,81,0,327,3, -82,0,327,3,83, -0,327,3,84,0, -327,3,85,0,327, -3,86,0,327,3, -87,0,327,3,88, -0,327,3,89,0, -327,3,90,0,327, -3,95,0,327,3, -97,0,327,3,98, -0,327,3,99,0, -327,3,100,0,327, -3,101,0,327,3, -102,0,327,3,103, -0,327,3,104,0, -327,3,105,0,327, -3,106,0,327,3, -107,0,327,3,108, -0,327,1190,11,1, -769,0,1191,4,32, -83,0,84,0,65, -0,84,0,69,0, -95,0,69,0,88, -0,73,0,84,0, -95,0,69,0,86, -0,69,0,78,0, -84,0,1,-1,3, -117,0,327,3,118, -0,327,3,119,0, -327,3,120,0,327, -3,121,0,327,3, -122,0,327,3,48, -0,327,3,49,0, -327,3,50,0,327, -3,51,0,327,3, -52,0,327,3,53, -0,327,3,54,0, -327,3,55,0,327, -3,56,0,327,3, -57,0,327,3,65, -0,327,3,66,0, -327,3,67,0,327, -3,68,0,327,3, -69,0,327,3,70, -0,327,3,71,0, -327,3,72,0,327, -3,73,0,327,3, -74,0,327,3,75, -0,327,3,76,0, -327,3,77,0,327, -3,78,0,327,3, -79,0,327,3,80, -0,327,3,81,0, -327,3,82,0,327, -3,83,0,327,3, -84,0,327,3,85, -0,327,3,86,0, -327,3,87,0,327, -3,88,0,327,3, -89,0,327,3,90, -0,327,3,95,0, -327,3,97,0,327, -3,98,0,327,3, -99,0,327,3,100, -0,327,3,101,0, -327,3,102,0,327, -3,103,0,327,3, -104,0,327,3,105, -0,327,3,106,0, -327,3,107,0,327, -3,108,0,327,1192, -11,1,829,0,330, -1,-1,3,106,0, -327,3,107,0,327, -3,108,0,327,1193, -11,1,829,0,330, -1,-1,3,121,0, -327,3,122,0,327, -3,48,0,327,3, -49,0,327,3,50, -0,327,3,51,0, -327,3,52,0,327, -3,53,0,327,3, -54,0,327,3,55, -0,327,3,56,0, -327,3,57,0,327, -3,65,0,327,3, -66,0,327,3,67, -0,327,3,68,0, -327,3,69,0,327, -3,70,0,327,3, -71,0,327,3,72, -0,327,3,73,0, -327,3,74,0,327, -3,75,0,327,3, -76,0,327,3,77, -0,327,3,78,0, -327,3,79,0,327, -3,80,0,327,3, -81,0,327,3,82, -0,327,3,83,0, -327,3,84,0,327, -3,85,0,327,3, -86,0,327,3,87, -0,327,3,88,0, -327,3,89,0,327, -3,90,0,327,3, -95,0,327,3,97, -0,327,3,98,0, -327,3,99,0,327, -3,100,0,327,3, -101,0,327,3,102, -0,327,3,103,0, -327,3,104,0,327, -3,105,0,327,3, -106,0,327,3,107, -0,327,3,108,0, -327,1194,11,1,829, -0,330,1,-1,3, -102,0,327,3,103, -0,327,3,104,0, -327,3,105,0,327, -3,106,0,327,3, -107,0,327,3,108, -0,327,1195,11,1, -829,0,330,1,-1, -3,97,0,327,3, -98,0,327,3,99, -0,327,3,100,0, -327,3,101,0,327, -3,102,0,327,3, -103,0,327,3,104, -0,327,3,105,0, -327,3,106,0,327, -3,107,0,327,3, -108,0,327,1196,11, -1,256,0,1197,4, -10,83,0,84,0, -65,0,84,0,69, -0,1,-1,3,102, -0,327,3,103,0, -327,3,104,0,327, -3,105,0,327,3, -106,0,327,3,107, -0,327,3,108,0, -327,1198,11,1,829, -0,330,1,-1,3, -117,0,327,3,118, -0,327,3,119,0, -327,3,120,0,327, -3,121,0,327,3, -122,0,327,3,48, -0,327,3,49,0, -327,3,50,0,327, -3,51,0,327,3, -52,0,327,3,53, -0,327,3,54,0, -327,3,55,0,327, -3,56,0,327,3, -57,0,327,3,65, -0,327,3,66,0, -327,3,67,0,327, -3,68,0,327,3, -69,0,327,3,70, -0,327,3,71,0, -327,3,72,0,327, -3,73,0,327,3, -74,0,327,3,75, -0,327,3,76,0, -327,3,77,0,327, -3,78,0,327,3, -79,0,327,3,80, -0,327,3,81,0, -327,3,82,0,327, -3,83,0,327,3, -84,0,327,3,85, -0,327,3,86,0, -327,3,87,0,327, -3,88,0,327,3, -89,0,327,3,90, -0,327,3,95,0, -327,3,97,0,327, -3,98,0,327,3, -99,0,327,3,100, -0,327,3,101,0, -327,3,102,0,327, -3,103,0,327,3, -104,0,327,3,105, -0,327,3,106,0, -327,3,107,0,327, -3,108,0,327,1199, -11,1,829,0,330, -1,-1,3,98,0, -327,3,99,0,327, -3,100,0,327,3, -101,0,327,3,102, -0,327,3,103,0, -327,3,104,0,327, -3,105,0,327,3, -106,0,327,3,107, -0,327,3,108,0, -327,1200,11,1,829, -0,330,1,-1,3, -117,0,327,3,118, -0,327,3,119,0, -327,3,120,0,327, -3,121,0,327,3, -122,0,327,3,48, -0,327,3,49,0, -327,3,50,0,327, -3,51,0,327,3, -52,0,327,3,53, -0,327,3,54,0, -327,3,55,0,327, -3,56,0,327,3, -57,0,327,3,65, -0,327,3,66,0, -327,3,67,0,327, -3,68,0,327,3, -69,0,327,3,70, -0,327,3,71,0, -327,3,72,0,327, -3,73,0,327,3, -74,0,327,3,75, -0,327,3,76,0, -327,3,77,0,327, -3,78,0,327,3, -79,0,327,3,80, -0,327,3,81,0, -327,3,82,0,327, -3,83,0,327,3, -84,0,327,3,85, -0,327,3,86,0, -327,3,87,0,327, -3,88,0,327,3, -89,0,327,3,90, -0,327,3,95,0, -327,3,97,0,327, -3,98,0,327,3, -99,0,327,3,100, -0,327,3,101,0, -1201,12,1,15863,1202, -5,63,3,109,0, -327,3,110,0,1203, -12,1,15892,1204,5, -63,3,109,0,327, -3,110,0,327,3, -111,0,327,3,112, -0,327,3,113,0, -327,3,114,0,327, -3,115,0,1205,12, -1,15926,1206,5,63, -3,109,0,327,3, -110,0,327,3,111, -0,1207,12,1,15956, -1208,5,63,3,109, -0,327,3,110,0, -327,3,111,0,327, -3,112,0,327,3, -113,0,327,3,114, -0,1209,12,1,15989, -1210,5,63,3,109, -0,327,3,110,0, -327,3,111,0,327, -3,112,0,327,3, -113,0,327,3,114, -0,327,3,115,0, -327,3,116,0,327, -3,117,0,327,3, -118,0,327,3,119, -0,327,3,120,0, -327,3,121,0,327, -3,122,0,327,3, -48,0,327,3,49, -0,327,3,50,0, -327,3,51,0,327, -3,52,0,327,3, -53,0,327,3,54, -0,327,3,55,0, -327,3,56,0,327, -3,57,0,327,3, -65,0,327,3,66, -0,327,3,67,0, -327,3,68,0,327, -3,69,0,327,3, -70,0,327,3,71, -0,327,3,72,0, -327,3,73,0,327, -3,74,0,327,3, -75,0,327,3,76, -0,327,3,77,0, -327,3,78,0,327, -3,79,0,327,3, -80,0,327,3,81, -0,327,3,82,0, -327,3,83,0,327, -3,84,0,327,3, -85,0,327,3,86, -0,327,3,87,0, -327,3,88,0,327, -3,89,0,327,3, -90,0,327,3,95, -0,327,3,97,0, -327,3,98,0,327, -3,99,0,327,3, -100,0,327,3,101, -0,327,3,102,0, -327,3,103,0,327, -3,104,0,327,3, -105,0,327,3,106, -0,327,3,107,0, -327,3,108,0,327, -1211,11,1,744,0, -1212,4,24,83,0, -69,0,78,0,83, -0,79,0,82,0, -95,0,69,0,86, -0,69,0,78,0, -84,0,1,-1,3, -115,0,327,3,116, -0,327,3,117,0, -327,3,118,0,327, -3,119,0,327,3, -120,0,327,3,121, -0,327,3,122,0, -327,3,48,0,327, -3,49,0,327,3, -50,0,327,3,51, -0,327,3,52,0, -327,3,53,0,327, -3,54,0,327,3, -55,0,327,3,56, -0,327,3,57,0, -327,3,65,0,327, -3,66,0,327,3, -67,0,327,3,68, -0,327,3,69,0, -327,3,70,0,327, -3,71,0,327,3, -72,0,327,3,73, -0,327,3,74,0, -327,3,75,0,327, -3,76,0,327,3, -77,0,327,3,78, -0,327,3,79,0, -327,3,80,0,327, -3,81,0,327,3, -82,0,327,3,83, -0,327,3,84,0, -327,3,85,0,327, -3,86,0,327,3, -87,0,327,3,88, -0,327,3,89,0, -327,3,90,0,327, -3,95,0,327,3, -97,0,327,3,98, -0,327,3,99,0, -327,3,100,0,327, -3,101,0,327,3, -102,0,327,3,103, -0,327,3,104,0, -327,3,105,0,327, -3,106,0,327,3, -107,0,327,3,108, -0,327,1213,11,1, -829,0,330,1,-1, -3,112,0,327,3, -113,0,327,3,114, -0,327,3,115,0, -327,3,116,0,327, -3,117,0,327,3, -118,0,327,3,119, -0,327,3,120,0, -327,3,121,0,327, -3,122,0,327,3, -48,0,327,3,49, -0,327,3,50,0, -327,3,51,0,327, -3,52,0,327,3, -53,0,327,3,54, -0,327,3,55,0, -327,3,56,0,327, -3,57,0,327,3, -65,0,327,3,66, -0,327,3,67,0, -327,3,68,0,327, -3,69,0,327,3, -70,0,327,3,71, -0,327,3,72,0, -327,3,73,0,327, -3,74,0,327,3, -75,0,327,3,76, -0,327,3,77,0, -327,3,78,0,327, -3,79,0,327,3, -80,0,327,3,81, -0,327,3,82,0, -327,3,83,0,327, -3,84,0,327,3, -85,0,327,3,86, -0,327,3,87,0, -327,3,88,0,327, -3,89,0,327,3, -90,0,327,3,95, -0,327,3,97,0, -327,3,98,0,327, -3,99,0,327,3, -100,0,327,3,101, -0,327,3,102,0, -327,3,103,0,327, -3,104,0,327,3, -105,0,327,3,106, -0,327,3,107,0, -327,3,108,0,327, -1214,11,1,829,0, -330,1,-1,3,116, -0,327,3,117,0, -327,3,118,0,327, -3,119,0,327,3, -120,0,327,3,121, -0,327,3,122,0, -327,3,48,0,327, -3,49,0,327,3, -50,0,327,3,51, -0,327,3,52,0, -327,3,53,0,327, -3,54,0,327,3, -55,0,327,3,56, -0,327,3,57,0, -327,3,65,0,327, -3,66,0,327,3, -67,0,327,3,68, -0,327,3,69,0, -327,3,70,0,327, -3,71,0,327,3, -72,0,327,3,73, -0,327,3,74,0, -327,3,75,0,327, -3,76,0,327,3, -77,0,327,3,78, -0,327,3,79,0, -327,3,80,0,327, -3,81,0,327,3, -82,0,327,3,83, -0,327,3,84,0, -327,3,85,0,327, -3,86,0,327,3, -87,0,327,3,88, -0,327,3,89,0, -327,3,90,0,327, -3,95,0,327,3, -97,0,327,3,98, -0,327,3,99,0, -327,3,100,0,327, -3,101,0,327,3, -102,0,327,3,103, -0,327,3,104,0, -327,3,105,0,327, -3,106,0,327,3, -107,0,327,3,108, -0,327,1215,11,1, -829,0,330,1,-1, -3,111,0,327,3, -112,0,327,3,113, -0,327,3,114,0, -327,3,115,0,327, -3,116,0,327,3, -117,0,327,3,118, -0,327,3,119,0, -327,3,120,0,327, -3,121,0,327,3, -122,0,327,3,48, -0,327,3,49,0, -327,3,50,0,327, -3,51,0,327,3, -52,0,327,3,53, -0,327,3,54,0, -327,3,55,0,327, -3,56,0,327,3, -57,0,327,3,65, -0,327,3,66,0, -327,3,67,0,327, -3,68,0,327,3, -69,0,327,3,70, -0,327,3,71,0, -327,3,72,0,327, -3,73,0,327,3, -74,0,327,3,75, -0,327,3,76,0, -327,3,77,0,327, -3,78,0,327,3, -79,0,327,3,80, -0,327,3,81,0, -327,3,82,0,327, -3,83,0,327,3, -84,0,327,3,85, -0,327,3,86,0, -327,3,87,0,327, -3,88,0,327,3, -89,0,327,3,90, -0,327,3,95,0, -327,3,97,0,327, -3,98,0,327,3, -99,0,327,3,100, -0,327,3,101,0, -327,3,102,0,327, -3,103,0,327,3, -104,0,327,3,105, -0,327,3,106,0, -327,3,107,0,327, -3,108,0,327,1216, -11,1,829,0,330, -1,-1,3,102,0, -327,3,103,0,327, -3,104,0,327,3, -105,0,327,3,106, -0,327,3,107,0, -327,3,108,0,327, -1217,11,1,829,0, -330,1,-1,3,116, -0,1218,12,1,16537, -1219,5,63,3,109, -0,327,3,110,0, -327,3,111,0,1220, -12,1,16567,1221,5, -63,3,109,0,327, -3,110,0,327,3, -111,0,327,3,112, -0,327,3,113,0, -327,3,114,0,327, -3,115,0,327,3, -116,0,327,3,117, -0,1222,12,1,16603, -1223,5,63,3,109, -0,327,3,110,0, -327,3,111,0,327, -3,112,0,327,3, -113,0,327,3,114, -0,327,3,115,0, -327,3,116,0,327, -3,117,0,327,3, -118,0,327,3,119, -0,327,3,120,0, -327,3,121,0,327, -3,122,0,327,3, -48,0,327,3,49, -0,327,3,50,0, -327,3,51,0,327, -3,52,0,327,3, -53,0,327,3,54, -0,327,3,55,0, -327,3,56,0,327, -3,57,0,327,3, -65,0,327,3,66, -0,327,3,67,0, -327,3,68,0,327, -3,69,0,327,3, -70,0,327,3,71, -0,327,3,72,0, -327,3,73,0,327, -3,74,0,327,3, -75,0,327,3,76, -0,327,3,77,0, -327,3,78,0,327, -3,79,0,327,3, -80,0,327,3,81, -0,327,3,82,0, -327,3,83,0,327, -3,84,0,327,3, -85,0,327,3,86, -0,327,3,87,0, -327,3,88,0,327, -3,89,0,327,3, -90,0,327,3,95, -0,327,3,97,0, -327,3,98,0,327, -3,99,0,1224,12, -1,16648,1225,5,63, -3,109,0,327,3, -110,0,327,3,111, -0,327,3,112,0, -327,3,113,0,327, -3,114,0,327,3, -115,0,327,3,116, -0,327,3,117,0, -327,3,118,0,327, -3,119,0,327,3, -120,0,327,3,121, -0,327,3,122,0, -327,3,48,0,327, -3,49,0,327,3, -50,0,327,3,51, -0,327,3,52,0, -327,3,53,0,327, -3,54,0,327,3, -55,0,327,3,56, -0,327,3,57,0, -327,3,65,0,327, -3,66,0,327,3, -67,0,327,3,68, -0,327,3,69,0, -327,3,70,0,327, -3,71,0,327,3, -72,0,327,3,73, -0,327,3,74,0, -327,3,75,0,327, -3,76,0,327,3, -77,0,327,3,78, -0,327,3,79,0, -327,3,80,0,327, -3,81,0,327,3, -82,0,327,3,83, -0,327,3,84,0, -327,3,85,0,327, -3,86,0,327,3, -87,0,327,3,88, -0,327,3,89,0, -327,3,90,0,327, -3,95,0,327,3, -97,0,327,3,98, -0,327,3,99,0, -327,3,100,0,327, -3,101,0,327,3, -102,0,327,3,103, -0,327,3,104,0, -1226,12,1,16698,1227, -5,63,3,109,0, -327,3,110,0,327, -3,111,0,327,3, -112,0,327,3,113, -0,327,3,114,0, -327,3,115,0,327, -3,116,0,327,3, -117,0,327,3,118, -0,327,3,119,0, -327,3,120,0,327, -3,121,0,327,3, -122,0,327,3,48, -0,327,3,49,0, -327,3,50,0,327, -3,51,0,327,3, -52,0,327,3,53, -0,327,3,54,0, -327,3,55,0,327, -3,56,0,327,3, -57,0,327,3,65, -0,327,3,66,0, -327,3,67,0,327, -3,68,0,327,3, -69,0,327,3,70, -0,327,3,71,0, -327,3,72,0,327, -3,73,0,327,3, -74,0,327,3,75, -0,327,3,76,0, -327,3,77,0,327, -3,78,0,327,3, -79,0,327,3,80, -0,327,3,81,0, -327,3,82,0,327, -3,83,0,327,3, -84,0,327,3,85, -0,327,3,86,0, -327,3,87,0,327, -3,88,0,327,3, -89,0,327,3,90, -0,327,3,95,0, -1228,12,1,16784,1229, -5,63,3,109,0, -327,3,110,0,327, -3,111,0,327,3, -112,0,327,3,113, -0,327,3,114,0, -327,3,115,0,1230, -12,1,16818,1231,5, -63,3,109,0,327, -3,110,0,327,3, -111,0,327,3,112, -0,327,3,113,0, -327,3,114,0,327, -3,115,0,327,3, -116,0,1232,12,1, -16853,1233,5,63,3, -109,0,327,3,110, -0,327,3,111,0, -327,3,112,0,327, -3,113,0,327,3, -114,0,327,3,115, -0,327,3,116,0, -327,3,117,0,327, -3,118,0,327,3, -119,0,327,3,120, -0,327,3,121,0, -327,3,122,0,327, -3,48,0,327,3, -49,0,327,3,50, -0,327,3,51,0, -327,3,52,0,327, -3,53,0,327,3, -54,0,327,3,55, -0,327,3,56,0, -327,3,57,0,327, -3,65,0,327,3, -66,0,327,3,67, -0,327,3,68,0, -327,3,69,0,327, -3,70,0,327,3, -71,0,327,3,72, -0,327,3,73,0, -327,3,74,0,327, -3,75,0,327,3, -76,0,327,3,77, -0,327,3,78,0, -327,3,79,0,327, -3,80,0,327,3, -81,0,327,3,82, -0,327,3,83,0, -327,3,84,0,327, -3,85,0,327,3, -86,0,327,3,87, -0,327,3,88,0, -327,3,89,0,327, -3,90,0,327,3, -95,0,327,3,97, -0,1234,12,1,16896, -1235,5,63,3,109, -0,327,3,110,0, -327,3,111,0,327, -3,112,0,327,3, -113,0,327,3,114, -0,1236,12,1,16929, -1237,5,63,3,109, -0,327,3,110,0, -327,3,111,0,327, -3,112,0,327,3, -113,0,327,3,114, -0,327,3,115,0, -327,3,116,0,1238, -12,1,16964,1239,5, -63,3,109,0,327, -3,110,0,327,3, -111,0,327,3,112, -0,327,3,113,0, -327,3,114,0,327, -3,115,0,327,3, -116,0,327,3,117, -0,327,3,118,0, -327,3,119,0,327, -3,120,0,327,3, -121,0,327,3,122, -0,327,3,48,0, -327,3,49,0,327, -3,50,0,327,3, -51,0,327,3,52, -0,327,3,53,0, -327,3,54,0,327, -3,55,0,327,3, -56,0,327,3,57, -0,327,3,65,0, -327,3,66,0,327, -3,67,0,327,3, -68,0,327,3,69, -0,327,3,70,0, -327,3,71,0,327, -3,72,0,327,3, -73,0,327,3,74, -0,327,3,75,0, -327,3,76,0,327, -3,77,0,327,3, -78,0,327,3,79, -0,327,3,80,0, -327,3,81,0,327, -3,82,0,327,3, -83,0,327,3,84, -0,327,3,85,0, -327,3,86,0,327, -3,87,0,327,3, -88,0,327,3,89, -0,327,3,90,0, -327,3,95,0,327, -3,97,0,327,3, -98,0,327,3,99, -0,327,3,100,0, -327,3,101,0,327, -3,102,0,327,3, -103,0,327,3,104, -0,327,3,105,0, -327,3,106,0,327, -3,107,0,327,3, -108,0,327,1240,11, -1,801,0,1241,4, -34,84,0,79,0, -85,0,67,0,72, -0,95,0,83,0, -84,0,65,0,82, -0,84,0,95,0, -69,0,86,0,69, -0,78,0,84,0, -1,-1,3,117,0, -327,3,118,0,327, -3,119,0,327,3, -120,0,327,3,121, -0,327,3,122,0, -327,3,48,0,327, -3,49,0,327,3, -50,0,327,3,51, -0,327,3,52,0, -327,3,53,0,327, -3,54,0,327,3, -55,0,327,3,56, -0,327,3,57,0, -327,3,65,0,327, -3,66,0,327,3, -67,0,327,3,68, -0,327,3,69,0, -327,3,70,0,327, -3,71,0,327,3, -72,0,327,3,73, -0,327,3,74,0, -327,3,75,0,327, -3,76,0,327,3, -77,0,327,3,78, -0,327,3,79,0, -327,3,80,0,327, -3,81,0,327,3, -82,0,327,3,83, -0,327,3,84,0, -327,3,85,0,327, -3,86,0,327,3, -87,0,327,3,88, -0,327,3,89,0, -327,3,90,0,327, -3,95,0,327,3, -97,0,327,3,98, -0,327,3,99,0, -327,3,100,0,327, -3,101,0,327,3, -102,0,327,3,103, -0,327,3,104,0, -327,3,105,0,327, -3,106,0,327,3, -107,0,327,3,108, -0,327,1242,11,1, -829,0,330,1,-1, -3,115,0,327,3, -116,0,327,3,117, -0,327,3,118,0, -327,3,119,0,327, -3,120,0,327,3, -121,0,327,3,122, -0,327,3,48,0, -327,3,49,0,327, -3,50,0,327,3, -51,0,327,3,52, -0,327,3,53,0, -327,3,54,0,327, -3,55,0,327,3, -56,0,327,3,57, -0,327,3,65,0, -327,3,66,0,327, -3,67,0,327,3, -68,0,327,3,69, -0,327,3,70,0, -327,3,71,0,327, -3,72,0,327,3, -73,0,327,3,74, -0,327,3,75,0, -327,3,76,0,327, -3,77,0,327,3, -78,0,327,3,79, -0,327,3,80,0, -327,3,81,0,327, -3,82,0,327,3, -83,0,327,3,84, -0,327,3,85,0, -327,3,86,0,327, -3,87,0,327,3, -88,0,327,3,89, -0,327,3,90,0, -327,3,95,0,327, -3,97,0,327,3, -98,0,327,3,99, -0,327,3,100,0, -327,3,101,0,327, -3,102,0,327,3, -103,0,327,3,104, -0,327,3,105,0, -327,3,106,0,327, -3,107,0,327,3, -108,0,327,1243,11, -1,829,0,330,1, --1,3,98,0,327, -3,99,0,327,3, -100,0,327,3,101, -0,327,3,102,0, -327,3,103,0,327, -3,104,0,327,3, -105,0,327,3,106, -0,327,3,107,0, -327,3,108,0,327, -1244,11,1,829,0, -330,1,-1,3,117, -0,327,3,118,0, -327,3,119,0,327, -3,120,0,327,3, -121,0,327,3,122, -0,327,3,48,0, -327,3,49,0,327, -3,50,0,327,3, -51,0,327,3,52, -0,327,3,53,0, -327,3,54,0,327, -3,55,0,327,3, -56,0,327,3,57, -0,327,3,65,0, -327,3,66,0,327, -3,67,0,327,3, -68,0,327,3,69, -0,327,3,70,0, -327,3,71,0,327, -3,72,0,327,3, -73,0,327,3,74, -0,327,3,75,0, -327,3,76,0,327, -3,77,0,327,3, -78,0,327,3,79, -0,327,3,80,0, -327,3,81,0,327, -3,82,0,327,3, -83,0,327,3,84, -0,327,3,85,0, -327,3,86,0,327, -3,87,0,327,3, -88,0,327,3,89, -0,327,3,90,0, -327,3,95,0,327, -3,97,0,327,3, -98,0,327,3,99, -0,327,3,100,0, -327,3,101,0,327, -3,102,0,327,3, -103,0,327,3,104, -0,327,3,105,0, -327,3,106,0,327, -3,107,0,327,3, -108,0,327,1245,11, -1,829,0,330,1, --1,3,116,0,327, -3,117,0,327,3, -118,0,327,3,119, -0,327,3,120,0, -327,3,121,0,327, -3,122,0,327,3, -48,0,327,3,49, -0,327,3,50,0, -327,3,51,0,327, -3,52,0,327,3, -53,0,327,3,54, -0,327,3,55,0, -327,3,56,0,327, -3,57,0,327,3, -65,0,327,3,66, -0,327,3,67,0, -327,3,68,0,327, -3,69,0,327,3, -70,0,327,3,71, -0,327,3,72,0, -327,3,73,0,327, -3,74,0,327,3, -75,0,327,3,76, -0,327,3,77,0, -327,3,78,0,327, -3,79,0,327,3, -80,0,327,3,81, -0,327,3,82,0, -327,3,83,0,327, -3,84,0,327,3, -85,0,327,3,86, -0,327,3,87,0, -327,3,88,0,327, -3,89,0,327,3, -90,0,327,3,95, -0,327,3,97,0, -327,3,98,0,327, -3,99,0,327,3, -100,0,327,3,101, -0,1246,12,1,17431, -1247,5,63,3,109, -0,327,3,110,0, -1248,12,1,17460,1249, -5,63,3,109,0, -327,3,110,0,327, -3,111,0,327,3, -112,0,327,3,113, -0,327,3,114,0, -327,3,115,0,327, -3,116,0,327,3, -117,0,327,3,118, -0,327,3,119,0, -327,3,120,0,327, -3,121,0,327,3, -122,0,327,3,48, -0,327,3,49,0, -327,3,50,0,327, -3,51,0,327,3, -52,0,327,3,53, -0,327,3,54,0, -327,3,55,0,327, -3,56,0,327,3, -57,0,327,3,65, -0,327,3,66,0, -327,3,67,0,327, -3,68,0,327,3, -69,0,327,3,70, -0,327,3,71,0, -327,3,72,0,327, -3,73,0,327,3, -74,0,327,3,75, -0,327,3,76,0, -327,3,77,0,327, -3,78,0,327,3, -79,0,327,3,80, -0,327,3,81,0, -327,3,82,0,327, -3,83,0,327,3, -84,0,327,3,85, -0,327,3,86,0, -327,3,87,0,327, -3,88,0,327,3, -89,0,327,3,90, -0,327,3,95,0, -327,3,97,0,327, -3,98,0,327,3, -99,0,327,3,100, -0,1250,12,1,17506, -1251,5,63,3,109, -0,327,3,110,0, -327,3,111,0,327, -3,112,0,327,3, -113,0,327,3,114, -0,327,3,115,0, -327,3,116,0,327, -3,117,0,327,3, -118,0,327,3,119, -0,327,3,120,0, -327,3,121,0,327, -3,122,0,327,3, -48,0,327,3,49, -0,327,3,50,0, -327,3,51,0,327, -3,52,0,327,3, -53,0,327,3,54, -0,327,3,55,0, -327,3,56,0,327, -3,57,0,327,3, -65,0,327,3,66, -0,327,3,67,0, -327,3,68,0,327, -3,69,0,327,3, -70,0,327,3,71, -0,327,3,72,0, -327,3,73,0,327, -3,74,0,327,3, -75,0,327,3,76, -0,327,3,77,0, -327,3,78,0,327, -3,79,0,327,3, -80,0,327,3,81, -0,327,3,82,0, -327,3,83,0,327, -3,84,0,327,3, -85,0,327,3,86, -0,327,3,87,0, -327,3,88,0,327, -3,89,0,327,3, -90,0,327,3,95, -0,327,3,97,0, -327,3,98,0,327, -3,99,0,327,3, -100,0,327,3,101, -0,327,3,102,0, -327,3,103,0,327, -3,104,0,327,3, -105,0,327,3,106, -0,327,3,107,0, -327,3,108,0,327, -1252,11,1,816,0, -1253,4,30,84,0, -79,0,85,0,67, -0,72,0,95,0, -69,0,78,0,68, -0,95,0,69,0, -86,0,69,0,78, -0,84,0,1,-1, -3,101,0,327,3, -102,0,327,3,103, -0,327,3,104,0, -327,3,105,0,327, -3,106,0,327,3, -107,0,327,3,108, -0,327,1254,11,1, -829,0,330,1,-1, -3,111,0,327,3, -112,0,327,3,113, -0,327,3,114,0, -327,3,115,0,327, -3,116,0,327,3, -117,0,327,3,118, -0,327,3,119,0, -327,3,120,0,327, -3,121,0,327,3, -122,0,327,3,48, -0,327,3,49,0, -327,3,50,0,327, -3,51,0,327,3, -52,0,327,3,53, -0,327,3,54,0, -327,3,55,0,327, -3,56,0,327,3, -57,0,327,3,65, -0,327,3,66,0, -327,3,67,0,327, -3,68,0,327,3, -69,0,327,3,70, -0,327,3,71,0, -327,3,72,0,327, -3,73,0,327,3, -74,0,327,3,75, -0,327,3,76,0, -327,3,77,0,327, -3,78,0,327,3, -79,0,327,3,80, -0,327,3,81,0, -327,3,82,0,327, -3,83,0,327,3, -84,0,327,3,85, -0,327,3,86,0, -327,3,87,0,327, -3,88,0,327,3, -89,0,327,3,90, -0,327,3,95,0, -327,3,97,0,327, -3,98,0,327,3, -99,0,327,3,100, -0,327,3,101,0, -327,3,102,0,327, -3,103,0,327,3, -104,0,327,3,105, -0,327,3,106,0, -327,3,107,0,327, -3,108,0,327,1255, -11,1,829,0,330, -1,-1,3,102,0, -327,3,103,0,327, -3,104,0,327,3, -105,0,327,3,106, -0,327,3,107,0, -327,3,108,0,327, -1256,11,1,829,0, -330,1,-1,3,97, -0,327,3,98,0, -327,3,99,0,327, -3,100,0,327,3, -101,0,327,3,102, -0,327,3,103,0, -327,3,104,0,327, -3,105,0,327,3, -106,0,327,3,107, -0,327,3,108,0, -327,1257,11,1,792, -0,1258,4,22,84, -0,79,0,85,0, -67,0,72,0,95, -0,69,0,86,0, -69,0,78,0,84, -0,1,-1,3,105, -0,327,3,106,0, -327,3,107,0,327, -3,108,0,327,1259, -11,1,829,0,330, -1,-1,3,100,0, -327,3,101,0,327, -3,102,0,327,3, -103,0,327,3,104, -0,327,3,105,0, -327,3,106,0,327, -3,107,0,327,3, -108,0,327,1260,11, -1,829,0,330,1, --1,3,118,0,327, -3,119,0,327,3, -120,0,327,3,121, -0,327,3,122,0, -327,3,48,0,327, -3,49,0,327,3, -50,0,327,3,51, -0,327,3,52,0, -327,3,53,0,327, -3,54,0,327,3, -55,0,327,3,56, -0,327,3,57,0, -327,3,65,0,327, -3,66,0,327,3, -67,0,327,3,68, -0,327,3,69,0, -327,3,70,0,327, -3,71,0,327,3, -72,0,327,3,73, -0,327,3,74,0, -327,3,75,0,327, -3,76,0,327,3, -77,0,327,3,78, -0,327,3,79,0, -327,3,80,0,327, -3,81,0,327,3, -82,0,327,3,83, -0,327,3,84,0, -327,3,85,0,327, -3,86,0,327,3, -87,0,327,3,88, -0,327,3,89,0, -327,3,90,0,327, -3,95,0,327,3, -97,0,327,3,98, -0,327,3,99,0, -327,3,100,0,327, -3,101,0,327,3, -102,0,327,3,103, -0,327,3,104,0, -327,3,105,0,327, -3,106,0,327,3, -107,0,327,3,108, -0,327,1261,11,1, -829,0,330,1,-1, -3,112,0,327,3, -113,0,327,3,114, -0,327,3,115,0, -327,3,116,0,327, -3,117,0,327,3, -118,0,327,3,119, -0,327,3,120,0, -327,3,121,0,327, -3,122,0,327,3, -48,0,327,3,49, -0,327,3,50,0, -327,3,51,0,327, -3,52,0,327,3, -53,0,327,3,54, -0,327,3,55,0, -327,3,56,0,327, -3,57,0,327,3, -65,0,327,3,66, -0,327,3,67,0, -327,3,68,0,327, -3,69,0,327,3, -70,0,327,3,71, -0,327,3,72,0, -327,3,73,0,327, -3,74,0,327,3, -75,0,327,3,76, -0,327,3,77,0, -327,3,78,0,327, -3,79,0,327,3, -80,0,327,3,81, -0,327,3,82,0, -327,3,83,0,327, -3,84,0,327,3, -85,0,327,3,86, -0,327,3,87,0, -327,3,88,0,327, -3,89,0,327,3, -90,0,327,3,95, -0,327,3,97,0, -327,3,98,0,327, -3,99,0,327,3, -100,0,327,3,101, -0,327,3,102,0, -327,3,103,0,327, -3,104,0,327,3, -105,0,1262,12,1, -18148,1263,5,63,3, -109,0,1264,12,1, -18176,1265,5,63,3, -109,0,327,3,110, -0,327,3,111,0, -327,3,112,0,327, -3,113,0,327,3, -114,0,327,3,115, -0,327,3,116,0, -327,3,117,0,327, -3,118,0,327,3, -119,0,327,3,120, -0,327,3,121,0, -327,3,122,0,327, -3,48,0,327,3, -49,0,327,3,50, -0,327,3,51,0, -327,3,52,0,327, -3,53,0,327,3, -54,0,327,3,55, -0,327,3,56,0, -327,3,57,0,327, -3,65,0,327,3, -66,0,327,3,67, -0,327,3,68,0, -327,3,69,0,327, -3,70,0,327,3, -71,0,327,3,72, -0,327,3,73,0, -327,3,74,0,327, -3,75,0,327,3, -76,0,327,3,77, -0,327,3,78,0, -327,3,79,0,327, -3,80,0,327,3, -81,0,327,3,82, -0,327,3,83,0, -327,3,84,0,327, -3,85,0,327,3, -86,0,327,3,87, -0,327,3,88,0, -327,3,89,0,327, -3,90,0,327,3, -95,0,327,3,97, -0,327,3,98,0, -327,3,99,0,327, -3,100,0,327,3, -101,0,1266,12,1, -18223,1267,5,63,3, -109,0,327,3,110, -0,327,3,111,0, -327,3,112,0,327, -3,113,0,327,3, -114,0,1268,12,1, -18256,1269,5,63,3, -109,0,327,3,110, -0,327,3,111,0, -327,3,112,0,327, -3,113,0,327,3, -114,0,327,3,115, -0,327,3,116,0, -327,3,117,0,327, -3,118,0,327,3, -119,0,327,3,120, -0,327,3,121,0, -327,3,122,0,327, -3,48,0,327,3, -49,0,327,3,50, -0,327,3,51,0, -327,3,52,0,327, -3,53,0,327,3, -54,0,327,3,55, -0,327,3,56,0, -327,3,57,0,327, -3,65,0,327,3, -66,0,327,3,67, -0,327,3,68,0, -327,3,69,0,327, -3,70,0,327,3, -71,0,327,3,72, -0,327,3,73,0, -327,3,74,0,327, -3,75,0,327,3, -76,0,327,3,77, -0,327,3,78,0, -327,3,79,0,327, -3,80,0,327,3, -81,0,327,3,82, -0,327,3,83,0, -327,3,84,0,327, -3,85,0,327,3, -86,0,327,3,87, -0,327,3,88,0, -327,3,89,0,327, -3,90,0,327,3, -95,0,327,3,97, -0,327,3,98,0, -327,3,99,0,327, -3,100,0,327,3, -101,0,327,3,102, -0,327,3,103,0, -327,3,104,0,327, -3,105,0,327,3, -106,0,327,3,107, -0,327,3,108,0, -327,1270,11,1,783, -0,1271,4,22,84, -0,73,0,77,0, -69,0,82,0,95, -0,69,0,86,0, -69,0,78,0,84, -0,1,-1,3,115, -0,327,3,116,0, -327,3,117,0,327, -3,118,0,327,3, -119,0,327,3,120, -0,327,3,121,0, -327,3,122,0,327, -3,48,0,327,3, -49,0,327,3,50, -0,327,3,51,0, -327,3,52,0,327, -3,53,0,327,3, -54,0,327,3,55, -0,327,3,56,0, -327,3,57,0,327, -3,65,0,327,3, -66,0,327,3,67, -0,327,3,68,0, -327,3,69,0,327, -3,70,0,327,3, -71,0,327,3,72, -0,327,3,73,0, -327,3,74,0,327, -3,75,0,327,3, -76,0,327,3,77, -0,327,3,78,0, -327,3,79,0,327, -3,80,0,327,3, -81,0,327,3,82, -0,327,3,83,0, -327,3,84,0,327, -3,85,0,327,3, -86,0,327,3,87, -0,327,3,88,0, -327,3,89,0,327, -3,90,0,327,3, -95,0,327,3,97, -0,327,3,98,0, -327,3,99,0,327, -3,100,0,327,3, -101,0,327,3,102, -0,327,3,103,0, -327,3,104,0,327, -3,105,0,327,3, -106,0,327,3,107, -0,327,3,108,0, -327,1272,11,1,829, -0,330,1,-1,3, -102,0,327,3,103, -0,327,3,104,0, -327,3,105,0,327, -3,106,0,327,3, -107,0,327,3,108, -0,327,1273,11,1, -829,0,330,1,-1, -3,110,0,327,3, -111,0,327,3,112, -0,327,3,113,0, -327,3,114,0,327, -3,115,0,327,3, -116,0,327,3,117, -0,327,3,118,0, -327,3,119,0,327, -3,120,0,327,3, -121,0,327,3,122, -0,327,3,48,0, -327,3,49,0,327, -3,50,0,327,3, -51,0,327,3,52, -0,327,3,53,0, -327,3,54,0,327, -3,55,0,327,3, -56,0,327,3,57, -0,327,3,65,0, -327,3,66,0,327, -3,67,0,327,3, -68,0,327,3,69, -0,327,3,70,0, -327,3,71,0,327, -3,72,0,327,3, -73,0,327,3,74, -0,327,3,75,0, -327,3,76,0,327, -3,77,0,327,3, -78,0,327,3,79, -0,327,3,80,0, -327,3,81,0,327, -3,82,0,327,3, -83,0,327,3,84, -0,327,3,85,0, -327,3,86,0,327, -3,87,0,327,3, -88,0,327,3,89, -0,327,3,90,0, -327,3,95,0,327, -3,97,0,327,3, -98,0,327,3,99, -0,327,3,100,0, -327,3,101,0,327, -3,102,0,327,3, -103,0,327,3,104, -0,327,3,105,0, -327,3,106,0,327, -3,107,0,327,3, -108,0,327,1274,11, -1,829,0,330,1, --1,3,106,0,327, -3,107,0,327,3, -108,0,327,1275,11, -1,829,0,330,1, --1,3,117,0,325, -3,118,0,1276,12, -1,18699,1277,5,63, -3,109,0,327,3, -110,0,327,3,111, -0,327,3,112,0, -327,3,113,0,327, -3,114,0,327,3, -115,0,327,3,116, -0,327,3,117,0, -327,3,118,0,327, -3,119,0,327,3, -120,0,327,3,121, -0,327,3,122,0, -327,3,48,0,327, -3,49,0,327,3, -50,0,327,3,51, -0,327,3,52,0, -327,3,53,0,327, -3,54,0,327,3, -55,0,327,3,56, -0,327,3,57,0, -327,3,65,0,327, -3,66,0,327,3, -67,0,327,3,68, -0,327,3,69,0, -327,3,70,0,327, -3,71,0,327,3, -72,0,327,3,73, -0,327,3,74,0, -327,3,75,0,327, -3,76,0,327,3, -77,0,327,3,78, -0,327,3,79,0, -327,3,80,0,327, -3,81,0,327,3, -82,0,327,3,83, -0,327,3,84,0, -327,3,85,0,327, -3,86,0,327,3, -87,0,327,3,88, -0,327,3,89,0, -327,3,90,0,327, -3,95,0,327,3, -97,0,327,3,98, -0,327,3,99,0, -327,3,100,0,327, -3,101,0,1278,12, -1,18746,1279,5,63, -3,109,0,327,3, -110,0,327,3,111, -0,327,3,112,0, -327,3,113,0,327, -3,114,0,327,3, -115,0,327,3,116, -0,327,3,117,0, -327,3,118,0,327, -3,119,0,327,3, -120,0,327,3,121, -0,327,3,122,0, -327,3,48,0,327, -3,49,0,327,3, -50,0,327,3,51, -0,327,3,52,0, -327,3,53,0,327, -3,54,0,327,3, -55,0,327,3,56, -0,327,3,57,0, -327,3,65,0,327, -3,66,0,327,3, -67,0,327,3,68, -0,327,3,69,0, -327,3,70,0,327, -3,71,0,327,3, -72,0,327,3,73, -0,327,3,74,0, -327,3,75,0,327, -3,76,0,327,3, -77,0,327,3,78, -0,327,3,79,0, -327,3,80,0,327, -3,81,0,327,3, -82,0,327,3,83, -0,327,3,84,0, -327,3,85,0,327, -3,86,0,327,3, -87,0,327,3,88, -0,327,3,89,0, -327,3,90,0,327, -3,95,0,327,3, -97,0,327,3,98, -0,327,3,99,0, -1280,12,1,18791,1281, -5,63,3,109,0, -327,3,110,0,327, -3,111,0,327,3, -112,0,327,3,113, -0,327,3,114,0, -327,3,115,0,327, -3,116,0,1282,12, -1,18826,1283,5,63, -3,109,0,327,3, -110,0,327,3,111, -0,1284,12,1,18856, -1285,5,63,3,109, -0,327,3,110,0, -327,3,111,0,327, -3,112,0,327,3, -113,0,327,3,114, -0,1286,12,1,18889, -1287,5,63,3,109, -0,327,3,110,0, -327,3,111,0,327, -3,112,0,327,3, -113,0,327,3,114, -0,327,3,115,0, -327,3,116,0,327, -3,117,0,327,3, -118,0,327,3,119, -0,327,3,120,0, -327,3,121,0,327, -3,122,0,327,3, -48,0,327,3,49, -0,327,3,50,0, -327,3,51,0,327, -3,52,0,327,3, -53,0,327,3,54, -0,327,3,55,0, -327,3,56,0,327, -3,57,0,327,3, -65,0,327,3,66, -0,327,3,67,0, -327,3,68,0,327, -3,69,0,327,3, -70,0,327,3,71, -0,327,3,72,0, -327,3,73,0,327, -3,74,0,327,3, -75,0,327,3,76, -0,327,3,77,0, -327,3,78,0,327, -3,79,0,327,3, -80,0,327,3,81, -0,327,3,82,0, -327,3,83,0,327, -3,84,0,327,3, -85,0,327,3,86, -0,327,3,87,0, -327,3,88,0,327, -3,89,0,327,3, -90,0,327,3,95, -0,327,3,97,0, -327,3,98,0,327, -3,99,0,327,3, -100,0,327,3,101, -0,327,3,102,0, -327,3,103,0,327, -3,104,0,327,3, -105,0,327,3,106, -0,327,3,107,0, -327,3,108,0,327, -1288,11,1,320,0, -1289,4,22,86,0, -69,0,67,0,84, -0,79,0,82,0, -95,0,84,0,89, -0,80,0,69,0, -1,-1,3,115,0, -327,3,116,0,327, -3,117,0,327,3, -118,0,327,3,119, -0,327,3,120,0, -327,3,121,0,327, -3,122,0,327,3, -48,0,327,3,49, -0,327,3,50,0, -327,3,51,0,327, -3,52,0,327,3, -53,0,327,3,54, -0,327,3,55,0, -327,3,56,0,327, -3,57,0,327,3, -65,0,327,3,66, -0,327,3,67,0, -327,3,68,0,327, -3,69,0,327,3, -70,0,327,3,71, -0,327,3,72,0, -327,3,73,0,327, -3,74,0,327,3, -75,0,327,3,76, -0,327,3,77,0, -327,3,78,0,327, -3,79,0,327,3, -80,0,327,3,81, -0,327,3,82,0, -327,3,83,0,327, -3,84,0,327,3, -85,0,327,3,86, -0,327,3,87,0, -327,3,88,0,327, -3,89,0,327,3, -90,0,327,3,95, -0,327,3,97,0, -327,3,98,0,327, -3,99,0,327,3, -100,0,327,3,101, -0,327,3,102,0, -327,3,103,0,327, -3,104,0,327,3, -105,0,327,3,106, -0,327,3,107,0, -327,3,108,0,327, -1290,11,1,829,0, -330,1,-1,3,112, -0,327,3,113,0, -327,3,114,0,327, -3,115,0,327,3, -116,0,327,3,117, -0,327,3,118,0, -327,3,119,0,327, -3,120,0,327,3, -121,0,327,3,122, -0,327,3,48,0, -327,3,49,0,327, -3,50,0,327,3, -51,0,327,3,52, -0,327,3,53,0, -327,3,54,0,327, -3,55,0,327,3, -56,0,327,3,57, -0,327,3,65,0, -327,3,66,0,327, -3,67,0,327,3, -68,0,327,3,69, -0,327,3,70,0, -327,3,71,0,327, -3,72,0,327,3, -73,0,327,3,74, -0,327,3,75,0, -327,3,76,0,327, -3,77,0,327,3, -78,0,327,3,79, -0,327,3,80,0, -327,3,81,0,327, -3,82,0,327,3, -83,0,327,3,84, -0,327,3,85,0, -327,3,86,0,327, -3,87,0,327,3, -88,0,327,3,89, -0,327,3,90,0, -327,3,95,0,327, -3,97,0,327,3, -98,0,327,3,99, -0,327,3,100,0, -327,3,101,0,327, -3,102,0,327,3, -103,0,327,3,104, -0,327,3,105,0, -327,3,106,0,327, -3,107,0,327,3, -108,0,327,1291,11, -1,829,0,330,1, --1,3,117,0,327, -3,118,0,327,3, -119,0,327,3,120, -0,327,3,121,0, -327,3,122,0,327, -3,48,0,327,3, -49,0,327,3,50, -0,327,3,51,0, -327,3,52,0,327, -3,53,0,327,3, -54,0,327,3,55, -0,327,3,56,0, -327,3,57,0,327, -3,65,0,327,3, -66,0,327,3,67, -0,327,3,68,0, -327,3,69,0,327, -3,70,0,327,3, -71,0,327,3,72, -0,327,3,73,0, -327,3,74,0,327, -3,75,0,327,3, -76,0,327,3,77, -0,327,3,78,0, -327,3,79,0,327, -3,80,0,327,3, -81,0,327,3,82, -0,327,3,83,0, -327,3,84,0,327, -3,85,0,327,3, -86,0,327,3,87, -0,327,3,88,0, -327,3,89,0,327, -3,90,0,327,3, -95,0,327,3,97, -0,327,3,98,0, -327,3,99,0,327, -3,100,0,327,3, -101,0,327,3,102, -0,327,3,103,0, -327,3,104,0,327, -3,105,0,327,3, -106,0,327,3,107, -0,327,3,108,0, -327,1292,11,1,829, -0,330,1,-1,3, -100,0,327,3,101, -0,327,3,102,0, -327,3,103,0,327, -3,104,0,327,3, -105,0,327,3,106, -0,327,3,107,0, -327,3,108,0,327, -1293,11,1,829,0, -330,1,-1,3,102, -0,327,3,103,0, -327,3,104,0,327, -3,105,0,327,3, -106,0,327,3,107, -0,327,3,108,0, -327,1294,11,1,829, -0,330,1,-1,3, -119,0,1295,12,1, -19420,1296,5,63,3, -109,0,327,3,110, -0,327,3,111,0, -327,3,112,0,327, -3,113,0,327,3, -114,0,327,3,115, -0,327,3,116,0, -327,3,117,0,327, -3,118,0,327,3, -119,0,327,3,120, -0,327,3,121,0, -327,3,122,0,327, -3,48,0,327,3, -49,0,327,3,50, -0,327,3,51,0, -327,3,52,0,327, -3,53,0,327,3, -54,0,327,3,55, -0,327,3,56,0, -327,3,57,0,327, -3,65,0,327,3, -66,0,327,3,67, -0,327,3,68,0, -327,3,69,0,327, -3,70,0,327,3, -71,0,327,3,72, -0,327,3,73,0, -327,3,74,0,327, -3,75,0,327,3, -76,0,327,3,77, -0,327,3,78,0, -327,3,79,0,327, -3,80,0,327,3, -81,0,327,3,82, -0,327,3,83,0, -327,3,84,0,327, -3,85,0,327,3, -86,0,327,3,87, -0,327,3,88,0, -327,3,89,0,327, -3,90,0,327,3, -95,0,327,3,97, -0,327,3,98,0, -327,3,99,0,327, -3,100,0,327,3, -101,0,327,3,102, -0,327,3,103,0, -327,3,104,0,1297, -12,1,19470,1298,5, -63,3,109,0,327, -3,110,0,327,3, -111,0,327,3,112, -0,327,3,113,0, -327,3,114,0,327, -3,115,0,327,3, -116,0,327,3,117, -0,327,3,118,0, -327,3,119,0,327, -3,120,0,327,3, -121,0,327,3,122, -0,327,3,48,0, -327,3,49,0,327, -3,50,0,327,3, -51,0,327,3,52, -0,327,3,53,0, -327,3,54,0,327, -3,55,0,327,3, -56,0,327,3,57, -0,327,3,65,0, -327,3,66,0,327, -3,67,0,327,3, -68,0,327,3,69, -0,327,3,70,0, -327,3,71,0,327, -3,72,0,327,3, -73,0,327,3,74, -0,327,3,75,0, -327,3,76,0,327, -3,77,0,327,3, -78,0,327,3,79, -0,327,3,80,0, -327,3,81,0,327, -3,82,0,327,3, -83,0,327,3,84, -0,327,3,85,0, -327,3,86,0,327, -3,87,0,327,3, -88,0,327,3,89, -0,327,3,90,0, -327,3,95,0,327, -3,97,0,327,3, -98,0,327,3,99, -0,327,3,100,0, -327,3,101,0,327, -3,102,0,327,3, -103,0,327,3,104, -0,327,3,105,0, -1299,12,1,19521,1300, -5,63,3,109,0, -327,3,110,0,327, -3,111,0,327,3, -112,0,327,3,113, -0,327,3,114,0, -327,3,115,0,327, -3,116,0,327,3, -117,0,327,3,118, -0,327,3,119,0, -327,3,120,0,327, -3,121,0,327,3, -122,0,327,3,48, -0,327,3,49,0, -327,3,50,0,327, -3,51,0,327,3, -52,0,327,3,53, -0,327,3,54,0, -327,3,55,0,327, -3,56,0,327,3, -57,0,327,3,65, -0,327,3,66,0, -327,3,67,0,327, -3,68,0,327,3, -69,0,327,3,70, -0,327,3,71,0, -327,3,72,0,327, -3,73,0,327,3, -74,0,327,3,75, -0,327,3,76,0, -327,3,77,0,327, -3,78,0,327,3, -79,0,327,3,80, -0,327,3,81,0, -327,3,82,0,327, -3,83,0,327,3, -84,0,327,3,85, -0,327,3,86,0, -327,3,87,0,327, -3,88,0,327,3, -89,0,327,3,90, -0,327,3,95,0, -327,3,97,0,327, -3,98,0,327,3, -99,0,327,3,100, -0,327,3,101,0, -327,3,102,0,327, -3,103,0,327,3, -104,0,327,3,105, -0,327,3,106,0, -327,3,107,0,327, -3,108,0,1301,12, -1,19575,1302,5,63, -3,109,0,327,3, -110,0,327,3,111, -0,327,3,112,0, -327,3,113,0,327, -3,114,0,327,3, -115,0,327,3,116, -0,327,3,117,0, -327,3,118,0,327, -3,119,0,327,3, -120,0,327,3,121, -0,327,3,122,0, -327,3,48,0,327, -3,49,0,327,3, -50,0,327,3,51, -0,327,3,52,0, -327,3,53,0,327, -3,54,0,327,3, -55,0,327,3,56, -0,327,3,57,0, -327,3,65,0,327, -3,66,0,327,3, -67,0,327,3,68, -0,327,3,69,0, -327,3,70,0,327, -3,71,0,327,3, -72,0,327,3,73, -0,327,3,74,0, -327,3,75,0,327, -3,76,0,327,3, -77,0,327,3,78, -0,327,3,79,0, -327,3,80,0,327, -3,81,0,327,3, -82,0,327,3,83, -0,327,3,84,0, -327,3,85,0,327, -3,86,0,327,3, -87,0,327,3,88, -0,327,3,89,0, -327,3,90,0,327, -3,95,0,327,3, -97,0,327,3,98, -0,327,3,99,0, -327,3,100,0,327, -3,101,0,1303,12, -1,19622,1304,5,63, -3,109,0,327,3, -110,0,327,3,111, -0,327,3,112,0, -327,3,113,0,327, -3,114,0,327,3, -115,0,327,3,116, -0,327,3,117,0, -327,3,118,0,327, -3,119,0,327,3, -120,0,327,3,121, -0,327,3,122,0, -327,3,48,0,327, -3,49,0,327,3, -50,0,327,3,51, -0,327,3,52,0, -327,3,53,0,327, -3,54,0,327,3, -55,0,327,3,56, -0,327,3,57,0, -327,3,65,0,327, -3,66,0,327,3, -67,0,327,3,68, -0,327,3,69,0, -327,3,70,0,327, -3,71,0,327,3, -72,0,327,3,73, -0,327,3,74,0, -327,3,75,0,327, -3,76,0,327,3, -77,0,327,3,78, -0,327,3,79,0, -327,3,80,0,327, -3,81,0,327,3, -82,0,327,3,83, -0,327,3,84,0, -327,3,85,0,327, -3,86,0,327,3, -87,0,327,3,88, -0,327,3,89,0, -327,3,90,0,327, -3,95,0,327,3, -97,0,327,3,98, -0,327,3,99,0, -327,3,100,0,327, -3,101,0,327,3, -102,0,327,3,103, -0,327,3,104,0, -327,3,105,0,327, -3,106,0,327,3, -107,0,327,3,108, -0,327,1305,11,1, -229,0,1306,4,10, -87,0,72,0,73, -0,76,0,69,0, -1,-1,3,102,0, -327,3,103,0,327, -3,104,0,327,3, -105,0,327,3,106, -0,327,3,107,0, -327,3,108,0,327, -1307,11,1,829,0, -330,1,-1,1308,11, -1,829,0,330,1, --1,3,106,0,327, -3,107,0,327,3, -108,0,327,1309,11, -1,829,0,330,1, --1,3,105,0,327, -3,106,0,327,3, -107,0,327,3,108, -0,327,1310,11,1, -829,0,330,1,-1, -3,120,0,325,3, -121,0,325,3,122, -0,325,3,123,0, -1311,12,1,39751,1312, -5,0,1313,11,1, -51,0,1314,4,20, -76,0,69,0,70, -0,84,0,95,0, -66,0,82,0,65, -0,67,0,69,0, -1,-1,3,124,0, -1315,12,1,42534,1316, -5,1,3,124,0, -1317,12,1,42646,1318, -5,0,1319,11,1, -191,0,1320,4,26, -83,0,84,0,82, -0,79,0,75,0, -69,0,95,0,83, -0,84,0,82,0, -79,0,75,0,69, -0,1,-1,1321,11, -1,165,0,1322,4, -12,83,0,84,0, -82,0,79,0,75, -0,69,0,1,-1, -3,125,0,1323,12, -1,40116,1324,5,0, -1325,11,1,56,0, -1326,4,22,82,0, -73,0,71,0,72, -0,84,0,95,0, -66,0,82,0,65, -0,67,0,69,0, -1,-1,3,126,0, -1327,12,1,42775,1328, -5,0,1329,11,1, -175,0,1330,4,10, -84,0,73,0,76, -0,68,0,69,0, -1,-1,0,165,1, --1,1331,4,12,83, -0,84,0,82,0, -73,0,78,0,71, -0,1332,12,1,44343, -1333,5,119,3,1, -0,1334,12,1,44344, -1335,5,0,1336,11, -1,930,0,165,1, --1,3,9,0,1334, -3,10,0,1337,12, -1,44545,1338,5,0, -1339,11,1,936,0, -165,1,-1,3,13, -0,1334,3,0,3, -1334,3,96,33,1334, -3,32,0,1334,3, -33,0,1334,3,34, -0,1340,12,1,45292, -1341,5,0,1342,11, -1,994,0,165,1, --1,3,35,0,1334, -3,36,0,1334,3, -37,0,1334,3,38, -0,1334,3,40,0, -1334,3,41,0,1334, -3,42,0,1334,3, -43,0,1334,3,44, -0,1334,3,45,0, -1334,3,46,0,1334, -3,47,0,1334,3, -3,9,1334,3,49, -0,1334,3,50,0, -1334,3,48,0,1334, -3,52,0,1334,3, -53,0,1334,3,51, -0,1334,3,55,0, -1334,3,56,0,1334, -3,54,0,1334,3, -59,0,1334,3,57, -0,1334,3,61,0, -1334,3,62,0,1334, -3,60,0,1334,3, -64,0,1334,3,65, -0,1334,3,66,0, -1334,3,67,0,1334, -3,68,0,1334,3, -69,0,1334,3,70, -0,1334,3,71,0, -1334,3,72,0,1334, -3,73,0,1334,3, -74,0,1334,3,75, -0,1334,3,76,0, -1334,3,77,0,1334, -3,78,0,1334,3, -79,0,1334,3,80, -0,1334,3,81,0, -1334,3,82,0,1334, -3,83,0,1334,3, -84,0,1334,3,85, -0,1334,3,86,0, -1334,3,87,0,1334, -3,88,0,1334,3, -89,0,1334,3,90, -0,1334,3,91,0, -1334,3,92,0,1343, -12,1,44688,1344,5, -4,3,110,0,1345, -12,1,44717,1346,5, -0,1347,11,1,941, -0,165,1,-1,3, -34,0,1348,12,1, -45157,1349,5,0,1350, -11,1,965,0,165, -1,-1,3,92,0, -1351,12,1,45033,1352, -5,0,1353,11,1, -977,0,165,1,-1, -3,116,0,1354,12, -1,44843,1355,5,0, -1356,11,1,953,0, -165,1,-1,1357,11, -1,989,0,165,1, --1,3,93,0,1334, -3,94,0,1334,3, -95,0,1334,3,96, -0,1334,3,97,0, -1334,3,98,0,1334, -3,99,0,1334,3, -100,0,1334,3,101, -0,1334,3,102,0, -1334,3,103,0,1334, -3,104,0,1334,3, -105,0,1334,3,106, -0,1334,3,107,0, -1334,3,108,0,1334, -3,109,0,1334,3, -110,0,1334,3,111, -0,1334,3,112,0, -1334,3,113,0,1334, -3,114,0,1334,3, -115,0,1334,3,116, -0,1334,3,117,0, -1334,3,118,0,1334, -3,119,0,1334,3, -120,0,1334,3,121, -0,1334,3,122,0, -1334,3,123,0,1334, -3,124,0,1334,3, -125,0,1334,3,96, -6,1334,3,126,0, -1334,3,58,15,1334, -3,59,15,1334,3, -136,4,1334,3,160, -0,1334,3,15,7, -1334,3,170,0,1334, -3,171,0,1334,3, -172,0,1334,3,173, -0,1334,3,178,0, -1334,3,176,2,1334, -3,187,0,1334,3, -187,1,1334,3,192, -0,1334,3,41,32, -1334,3,197,1,1334, -3,0,224,1334,3, -40,32,1334,3,63, -32,1334,0,165,1, --1,1358,5,92,236, -1359,10,236,1,19, -555,1360,10,555,1, -47,283,1361,10,283, -1,92,1138,1362,10, -1138,1,50,1007,1363, -10,1007,1,80,1157, -1364,10,1157,1,53, -173,1365,10,173,1, -37,584,1366,10,584, -1,43,666,1367,10, -666,1,51,595,1368, -10,595,1,46,196, -1369,10,196,1,16, -200,1370,10,200,1, -17,638,1371,10,638, -1,68,867,1372,10, -867,1,75,343,1373, -10,343,1,35,208, -1374,10,208,1,20, -214,1375,10,214,1, -6,184,1376,10,184, -1,22,268,1377,10, -268,1,21,250,1378, -10,250,1,94,1258, -1379,10,1258,1,88, -463,1380,10,463,1, -64,686,1381,10,686, -1,49,339,1382,10, -339,1,28,300,1383, -10,300,1,25,675, -1384,10,675,1,42, -758,1385,10,758,1, -69,1197,1386,10,1197, -1,48,318,1387,10, -318,1,41,816,1388, -10,816,1,57,218, -1389,10,218,1,4, -324,1390,10,324,1, -23,475,1391,10,475, -1,63,1212,1392,10, -1212,1,84,306,1393, -10,306,1,29,230, -1394,10,230,1,5, -298,1395,10,298,1, -31,606,1396,10,606, -1,52,855,1397,10, -855,1,76,1080,1398, -10,1080,1,83,983, -1399,10,983,1,81, -961,1400,10,961,1, -77,171,1401,10,171, -1,30,234,1402,10, -234,1,7,813,1403, -10,813,1,73,182, -1404,10,182,1,10, -335,1405,10,335,1, -27,276,1406,10,276, -1,93,224,1407,10, -224,1,14,254,1408, -10,254,1,24,697, -1409,10,697,1,54, -266,1410,10,266,1, -9,1191,1411,10,1191, -1,86,480,1412,10, -480,1,62,1413,4, -30,83,0,84,0, -82,0,73,0,78, -0,71,0,95,0, -67,0,79,0,78, -0,83,0,84,0, -65,0,78,0,84, -0,1414,10,1413,1, -3,1306,1415,10,1306, -1,45,330,1416,10, -330,1,91,533,1417, -10,533,1,66,1034, -1418,10,1034,1,56, -384,1419,10,384,1, -58,1314,1420,10,1314, -1,12,513,1421,10, -513,1,44,294,1422, -10,294,1,40,1120, -1423,10,1120,1,82, -573,1424,10,573,1, -67,912,1425,10,912, -1,78,1330,1426,10, -1330,1,36,1322,1427, -10,1322,1,34,753, -1428,10,753,1,70, -1271,1429,10,1271,1, -87,831,1430,10,831, -1,74,320,1431,10, -320,1,26,407,1432, -10,407,1,59,192, -1433,10,192,1,33, -288,1434,10,288,1, -11,190,1435,10,190, -1,38,501,1436,10, -501,1,61,794,1437, -10,794,1,72,1253, -1438,10,1253,1,90, -308,1439,10,308,1, -15,935,1440,10,935, -1,79,1320,1441,10, -1320,1,39,314,1442, -10,314,1,32,1241, -1443,10,1241,1,89, -357,1444,10,357,1, -60,1289,1445,10,1289, -1,55,1326,1446,10, -1326,1,13,1180,1447, -10,1180,1,85,220, -1448,10,220,1,18, -206,1449,10,206,1, -8,741,1450,10,741, -1,71,431,1451,10, -431,1,65,1452,5, -0,0}; - new Tfactory(this,"MINUS",new TCreator(MINUS_factory)); - new Tfactory(this,"DEFAULT_STATE",new TCreator(DEFAULT_STATE_factory)); - new Tfactory(this,"INTEGER_CONSTANT",new TCreator(INTEGER_CONSTANT_factory)); - new Tfactory(this,"RETURN",new TCreator(RETURN_factory)); - new Tfactory(this,"OBJECT_REZ_EVENT",new TCreator(OBJECT_REZ_EVENT_factory)); - new Tfactory(this,"STRING_TYPE",new TCreator(STRING_TYPE_factory)); - new Tfactory(this,"EXCLAMATION",new TCreator(EXCLAMATION_factory)); - new Tfactory(this,"ELSE",new TCreator(ELSE_factory)); - new Tfactory(this,"INTEGER_TYPE",new TCreator(INTEGER_TYPE_factory)); - new Tfactory(this,"FOR",new TCreator(FOR_factory)); - new Tfactory(this,"LEFT_PAREN",new TCreator(LEFT_PAREN_factory)); - new Tfactory(this,"RIGHT_PAREN",new TCreator(RIGHT_PAREN_factory)); - new Tfactory(this,"HTTP_RESPONSE_EVENT",new TCreator(HTTP_RESPONSE_EVENT_factory)); - new Tfactory(this,"MOVING_END_EVENT",new TCreator(MOVING_END_EVENT_factory)); - new Tfactory(this,"CARET",new TCreator(CARET_factory)); - new Tfactory(this,"STAR",new TCreator(STAR_factory)); - new Tfactory(this,"PLUS_EQUALS",new TCreator(PLUS_EQUALS_factory)); - new Tfactory(this,"PERCENT",new TCreator(PERCENT_factory)); - new Tfactory(this,"SLASH",new TCreator(SLASH_factory)); - new Tfactory(this,"FLOAT_CONSTANT",new TCreator(FLOAT_CONSTANT_factory)); - new Tfactory(this,"TOUCH_EVENT",new TCreator(TOUCH_EVENT_factory)); - new Tfactory(this,"COLLISION_START_EVENT",new TCreator(COLLISION_START_EVENT_factory)); - new Tfactory(this,"JUMP",new TCreator(JUMP_factory)); - new Tfactory(this,"RIGHT_BRACKET",new TCreator(RIGHT_BRACKET_factory)); - new Tfactory(this,"LEFT_ANGLE",new TCreator(LEFT_ANGLE_factory)); - new Tfactory(this,"IF",new TCreator(IF_factory)); - new Tfactory(this,"LAND_COLLISION_EVENT",new TCreator(LAND_COLLISION_EVENT_factory)); - new Tfactory(this,"STATE",new TCreator(STATE_factory)); - new Tfactory(this,"RIGHT_SHIFT",new TCreator(RIGHT_SHIFT_factory)); - new Tfactory(this,"LIST_TYPE",new TCreator(LIST_TYPE_factory)); - new Tfactory(this,"INCREMENT",new TCreator(INCREMENT_factory)); - new Tfactory(this,"AT",new TCreator(AT_factory)); - new Tfactory(this,"COLLISION_END_EVENT",new TCreator(COLLISION_END_EVENT_factory)); - new Tfactory(this,"SENSOR_EVENT",new TCreator(SENSOR_EVENT_factory)); - new Tfactory(this,"EQUALS_EQUALS",new TCreator(EQUALS_EQUALS_factory)); - new Tfactory(this,"DECREMENT",new TCreator(DECREMENT_factory)); - new Tfactory(this,"LESS_EQUALS",new TCreator(LESS_EQUALS_factory)); - new Tfactory(this,"FLOAT_TYPE",new TCreator(FLOAT_TYPE_factory)); - new Tfactory(this,"MOVING_START_EVENT",new TCreator(MOVING_START_EVENT_factory)); - new Tfactory(this,"RUN_TIME_PERMISSIONS_EVENT",new TCreator(RUN_TIME_PERMISSIONS_EVENT_factory)); - new Tfactory(this,"ON_REZ_EVENT",new TCreator(ON_REZ_EVENT_factory)); - new Tfactory(this,"NO_SENSOR_EVENT",new TCreator(NO_SENSOR_EVENT_factory)); - new Tfactory(this,"EXCLAMATION_EQUALS",new TCreator(EXCLAMATION_EQUALS_factory)); - new Tfactory(this,"MINUS_EQUALS",new TCreator(MINUS_EQUALS_factory)); - new Tfactory(this,"LISTEN_EVENT",new TCreator(LISTEN_EVENT_factory)); - new Tfactory(this,"PERCENT_EQUALS",new TCreator(PERCENT_EQUALS_factory)); - new Tfactory(this,"LEFT_BRACKET",new TCreator(LEFT_BRACKET_factory)); - new Tfactory(this,"HEX_INTEGER_CONSTANT",new TCreator(HEX_INTEGER_CONSTANT_factory)); - new Tfactory(this,"COMMA",new TCreator(COMMA_factory)); - new Tfactory(this,"PERIOD",new TCreator(PERIOD_factory)); - new Tfactory(this,"KEY_TYPE",new TCreator(KEY_TYPE_factory)); - new Tfactory(this,"SLASH_EQUALS",new TCreator(SLASH_EQUALS_factory)); - new Tfactory(this,"STATE_EXIT_EVENT",new TCreator(STATE_EXIT_EVENT_factory)); - new Tfactory(this,"COLLISION_EVENT",new TCreator(COLLISION_EVENT_factory)); - new Tfactory(this,"STRING_CONSTANT",new TCreator(STRING_CONSTANT_factory)); - new Tfactory(this,"WHILE",new TCreator(WHILE_factory)); - new Tfactory(this,"IDENT",new TCreator(IDENT_factory)); - new Tfactory(this,"DATASERVER_EVENT",new TCreator(DATASERVER_EVENT_factory)); - new Tfactory(this,"ROTATION_TYPE",new TCreator(ROTATION_TYPE_factory)); - new Tfactory(this,"AT_ROT_TARGET_EVENT",new TCreator(AT_ROT_TARGET_EVENT_factory)); - new Tfactory(this,"LEFT_BRACE",new TCreator(LEFT_BRACE_factory)); - new Tfactory(this,"DO",new TCreator(DO_factory)); - new Tfactory(this,"LEFT_SHIFT",new TCreator(LEFT_SHIFT_factory)); - new Tfactory(this,"REMOTE_DATA_EVENT",new TCreator(REMOTE_DATA_EVENT_factory)); - new Tfactory(this,"EMAIL_EVENT",new TCreator(EMAIL_EVENT_factory)); - new Tfactory(this,"NOT_AT_ROT_TARGET_EVENT",new TCreator(NOT_AT_ROT_TARGET_EVENT_factory)); - new Tfactory(this,"TILDE",new TCreator(TILDE_factory)); - new Tfactory(this,"STROKE",new TCreator(STROKE_factory)); - new Tfactory(this,"LAND_COLLISION_END_EVENT",new TCreator(LAND_COLLISION_END_EVENT_factory)); - new Tfactory(this,"TIMER_EVENT",new TCreator(TIMER_EVENT_factory)); - new Tfactory(this,"MONEY_EVENT",new TCreator(MONEY_EVENT_factory)); - new Tfactory(this,"RIGHT_ANGLE",new TCreator(RIGHT_ANGLE_factory)); - new Tfactory(this,"AT_TARGET_EVENT",new TCreator(AT_TARGET_EVENT_factory)); - new Tfactory(this,"AMP",new TCreator(AMP_factory)); - new Tfactory(this,"SEMICOLON",new TCreator(SEMICOLON_factory)); - new Tfactory(this,"AMP_AMP",new TCreator(AMP_AMP_factory)); - new Tfactory(this,"CHANGED_EVENT",new TCreator(CHANGED_EVENT_factory)); - new Tfactory(this,"LINK_MESSAGE_EVENT",new TCreator(LINK_MESSAGE_EVENT_factory)); - new Tfactory(this,"TOUCH_END_EVENT",new TCreator(TOUCH_END_EVENT_factory)); - new Tfactory(this,"EQUALS",new TCreator(EQUALS_factory)); - new Tfactory(this,"NOT_AT_TARGET_EVENT",new TCreator(NOT_AT_TARGET_EVENT_factory)); - new Tfactory(this,"STROKE_STROKE",new TCreator(STROKE_STROKE_factory)); - new Tfactory(this,"GREATER_EQUALS",new TCreator(GREATER_EQUALS_factory)); - new Tfactory(this,"TOUCH_START_EVENT",new TCreator(TOUCH_START_EVENT_factory)); - new Tfactory(this,"ATTACH_EVENT",new TCreator(ATTACH_EVENT_factory)); - new Tfactory(this,"VECTOR_TYPE",new TCreator(VECTOR_TYPE_factory)); - new Tfactory(this,"RIGHT_BRACE",new TCreator(RIGHT_BRACE_factory)); - new Tfactory(this,"STATE_ENTRY_EVENT",new TCreator(STATE_ENTRY_EVENT_factory)); - new Tfactory(this,"PLUS",new TCreator(PLUS_factory)); - new Tfactory(this,"STAR_EQUALS",new TCreator(STAR_EQUALS_factory)); - new Tfactory(this,"LAND_COLLISION_START_EVENT",new TCreator(LAND_COLLISION_START_EVENT_factory)); - new Tfactory(this,"CONTROL_EVENT",new TCreator(CONTROL_EVENT_factory)); -} -public static object MINUS_factory(Lexer yyl) { return new MINUS(yyl);} -public static object DEFAULT_STATE_factory(Lexer yyl) { return new DEFAULT_STATE(yyl);} -public static object INTEGER_CONSTANT_factory(Lexer yyl) { return new INTEGER_CONSTANT(yyl);} -public static object RETURN_factory(Lexer yyl) { return new RETURN(yyl);} -public static object OBJECT_REZ_EVENT_factory(Lexer yyl) { return new OBJECT_REZ_EVENT(yyl);} -public static object STRING_TYPE_factory(Lexer yyl) { return new STRING_TYPE(yyl);} -public static object EXCLAMATION_factory(Lexer yyl) { return new EXCLAMATION(yyl);} -public static object ELSE_factory(Lexer yyl) { return new ELSE(yyl);} -public static object INTEGER_TYPE_factory(Lexer yyl) { return new INTEGER_TYPE(yyl);} -public static object FOR_factory(Lexer yyl) { return new FOR(yyl);} -public static object LEFT_PAREN_factory(Lexer yyl) { return new LEFT_PAREN(yyl);} -public static object RIGHT_PAREN_factory(Lexer yyl) { return new RIGHT_PAREN(yyl);} -public static object HTTP_RESPONSE_EVENT_factory(Lexer yyl) { return new HTTP_RESPONSE_EVENT(yyl);} -public static object MOVING_END_EVENT_factory(Lexer yyl) { return new MOVING_END_EVENT(yyl);} -public static object CARET_factory(Lexer yyl) { return new CARET(yyl);} -public static object STAR_factory(Lexer yyl) { return new STAR(yyl);} -public static object PLUS_EQUALS_factory(Lexer yyl) { return new PLUS_EQUALS(yyl);} -public static object PERCENT_factory(Lexer yyl) { return new PERCENT(yyl);} -public static object SLASH_factory(Lexer yyl) { return new SLASH(yyl);} -public static object FLOAT_CONSTANT_factory(Lexer yyl) { return new FLOAT_CONSTANT(yyl);} -public static object TOUCH_EVENT_factory(Lexer yyl) { return new TOUCH_EVENT(yyl);} -public static object COLLISION_START_EVENT_factory(Lexer yyl) { return new COLLISION_START_EVENT(yyl);} -public static object JUMP_factory(Lexer yyl) { return new JUMP(yyl);} -public static object RIGHT_BRACKET_factory(Lexer yyl) { return new RIGHT_BRACKET(yyl);} -public static object LEFT_ANGLE_factory(Lexer yyl) { return new LEFT_ANGLE(yyl);} -public static object IF_factory(Lexer yyl) { return new IF(yyl);} -public static object LAND_COLLISION_EVENT_factory(Lexer yyl) { return new LAND_COLLISION_EVENT(yyl);} -public static object STATE_factory(Lexer yyl) { return new STATE(yyl);} -public static object RIGHT_SHIFT_factory(Lexer yyl) { return new RIGHT_SHIFT(yyl);} -public static object LIST_TYPE_factory(Lexer yyl) { return new LIST_TYPE(yyl);} -public static object INCREMENT_factory(Lexer yyl) { return new INCREMENT(yyl);} -public static object AT_factory(Lexer yyl) { return new AT(yyl);} -public static object COLLISION_END_EVENT_factory(Lexer yyl) { return new COLLISION_END_EVENT(yyl);} -public static object SENSOR_EVENT_factory(Lexer yyl) { return new SENSOR_EVENT(yyl);} -public static object EQUALS_EQUALS_factory(Lexer yyl) { return new EQUALS_EQUALS(yyl);} -public static object DECREMENT_factory(Lexer yyl) { return new DECREMENT(yyl);} -public static object LESS_EQUALS_factory(Lexer yyl) { return new LESS_EQUALS(yyl);} -public static object FLOAT_TYPE_factory(Lexer yyl) { return new FLOAT_TYPE(yyl);} -public static object MOVING_START_EVENT_factory(Lexer yyl) { return new MOVING_START_EVENT(yyl);} -public static object RUN_TIME_PERMISSIONS_EVENT_factory(Lexer yyl) { return new RUN_TIME_PERMISSIONS_EVENT(yyl);} -public static object ON_REZ_EVENT_factory(Lexer yyl) { return new ON_REZ_EVENT(yyl);} -public static object NO_SENSOR_EVENT_factory(Lexer yyl) { return new NO_SENSOR_EVENT(yyl);} -public static object EXCLAMATION_EQUALS_factory(Lexer yyl) { return new EXCLAMATION_EQUALS(yyl);} -public static object MINUS_EQUALS_factory(Lexer yyl) { return new MINUS_EQUALS(yyl);} -public static object LISTEN_EVENT_factory(Lexer yyl) { return new LISTEN_EVENT(yyl);} -public static object PERCENT_EQUALS_factory(Lexer yyl) { return new PERCENT_EQUALS(yyl);} -public static object LEFT_BRACKET_factory(Lexer yyl) { return new LEFT_BRACKET(yyl);} -public static object HEX_INTEGER_CONSTANT_factory(Lexer yyl) { return new HEX_INTEGER_CONSTANT(yyl);} -public static object COMMA_factory(Lexer yyl) { return new COMMA(yyl);} -public static object PERIOD_factory(Lexer yyl) { return new PERIOD(yyl);} -public static object KEY_TYPE_factory(Lexer yyl) { return new KEY_TYPE(yyl);} -public static object SLASH_EQUALS_factory(Lexer yyl) { return new SLASH_EQUALS(yyl);} -public static object STATE_EXIT_EVENT_factory(Lexer yyl) { return new STATE_EXIT_EVENT(yyl);} -public static object COLLISION_EVENT_factory(Lexer yyl) { return new COLLISION_EVENT(yyl);} -public static object STRING_CONSTANT_factory(Lexer yyl) { return new STRING_CONSTANT(yyl);} -public static object WHILE_factory(Lexer yyl) { return new WHILE(yyl);} -public static object IDENT_factory(Lexer yyl) { return new IDENT(yyl);} -public static object DATASERVER_EVENT_factory(Lexer yyl) { return new DATASERVER_EVENT(yyl);} -public static object ROTATION_TYPE_factory(Lexer yyl) { return new ROTATION_TYPE(yyl);} -public static object AT_ROT_TARGET_EVENT_factory(Lexer yyl) { return new AT_ROT_TARGET_EVENT(yyl);} -public static object LEFT_BRACE_factory(Lexer yyl) { return new LEFT_BRACE(yyl);} -public static object DO_factory(Lexer yyl) { return new DO(yyl);} -public static object LEFT_SHIFT_factory(Lexer yyl) { return new LEFT_SHIFT(yyl);} -public static object REMOTE_DATA_EVENT_factory(Lexer yyl) { return new REMOTE_DATA_EVENT(yyl);} -public static object EMAIL_EVENT_factory(Lexer yyl) { return new EMAIL_EVENT(yyl);} -public static object NOT_AT_ROT_TARGET_EVENT_factory(Lexer yyl) { return new NOT_AT_ROT_TARGET_EVENT(yyl);} -public static object TILDE_factory(Lexer yyl) { return new TILDE(yyl);} -public static object STROKE_factory(Lexer yyl) { return new STROKE(yyl);} -public static object LAND_COLLISION_END_EVENT_factory(Lexer yyl) { return new LAND_COLLISION_END_EVENT(yyl);} -public static object TIMER_EVENT_factory(Lexer yyl) { return new TIMER_EVENT(yyl);} -public static object MONEY_EVENT_factory(Lexer yyl) { return new MONEY_EVENT(yyl);} -public static object RIGHT_ANGLE_factory(Lexer yyl) { return new RIGHT_ANGLE(yyl);} -public static object AT_TARGET_EVENT_factory(Lexer yyl) { return new AT_TARGET_EVENT(yyl);} -public static object AMP_factory(Lexer yyl) { return new AMP(yyl);} -public static object SEMICOLON_factory(Lexer yyl) { return new SEMICOLON(yyl);} -public static object AMP_AMP_factory(Lexer yyl) { return new AMP_AMP(yyl);} -public static object CHANGED_EVENT_factory(Lexer yyl) { return new CHANGED_EVENT(yyl);} -public static object LINK_MESSAGE_EVENT_factory(Lexer yyl) { return new LINK_MESSAGE_EVENT(yyl);} -public static object TOUCH_END_EVENT_factory(Lexer yyl) { return new TOUCH_END_EVENT(yyl);} -public static object EQUALS_factory(Lexer yyl) { return new EQUALS(yyl);} -public static object NOT_AT_TARGET_EVENT_factory(Lexer yyl) { return new NOT_AT_TARGET_EVENT(yyl);} -public static object STROKE_STROKE_factory(Lexer yyl) { return new STROKE_STROKE(yyl);} -public static object GREATER_EQUALS_factory(Lexer yyl) { return new GREATER_EQUALS(yyl);} -public static object TOUCH_START_EVENT_factory(Lexer yyl) { return new TOUCH_START_EVENT(yyl);} -public static object ATTACH_EVENT_factory(Lexer yyl) { return new ATTACH_EVENT(yyl);} -public static object VECTOR_TYPE_factory(Lexer yyl) { return new VECTOR_TYPE(yyl);} -public static object RIGHT_BRACE_factory(Lexer yyl) { return new RIGHT_BRACE(yyl);} -public static object STATE_ENTRY_EVENT_factory(Lexer yyl) { return new STATE_ENTRY_EVENT(yyl);} -public static object PLUS_factory(Lexer yyl) { return new PLUS(yyl);} -public static object STAR_EQUALS_factory(Lexer yyl) { return new STAR_EQUALS(yyl);} -public static object LAND_COLLISION_START_EVENT_factory(Lexer yyl) { return new LAND_COLLISION_START_EVENT(yyl);} -public static object CONTROL_EVENT_factory(Lexer yyl) { return new CONTROL_EVENT(yyl);} -public override TOKEN OldAction(Lexer yym,ref string yytext,int action, ref bool reject) { - switch(action) { - case -1: break; - case 977: { ((LSLTokens)yym).str += "\\\\"; } - break; - case 1003: ; - break; - case 925: { yym.yy_begin("STRING"); ((LSLTokens)yym).str = "";} - break; - case 930: { ((LSLTokens)yym).str += yytext; } - break; - case 936: { ((LSLTokens)yym).str += "\\n"; } - break; - case 941: { ((LSLTokens)yym).str += "\\n"; } - break; - case 953: { ((LSLTokens)yym).str += " "; } - break; - case 965: { ((LSLTokens)yym).str += "\\\""; } - break; - case 989: { ((LSLTokens)yym).str += '\\'; } - break; - case 994: { yym.yy_begin("YYINITIAL"); ((LSLTokens)yym).yytext = ((LSLTokens)yym).str; ((LSLTokens)yym).str = String.Empty; return new STRING_CONSTANT(yym); } - case 999: ; - break; - } - return null; -}} -public class LSLTokens:Lexer { -public LSLTokens():base(new yyLSLTokens(new ErrorHandler(false))) {} -public LSLTokens(ErrorHandler eh):base(new yyLSLTokens(eh)) {} -public LSLTokens(YyLexer tks):base(tks){} - - public string str; - - } -} diff --git a/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/LSL/lsl.parser.cs b/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/LSL/lsl.parser.cs deleted file mode 100644 index b09e959..0000000 --- a/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/LSL/lsl.parser.cs +++ /dev/null @@ -1,11001 +0,0 @@ -/* - * Copyright (c) Contributors, http://opensimulator.org/ - * See CONTRIBUTORS.TXT for a full list of copyright holders. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * * Neither the name of the OpenSim Project nor the - * names of its contributors may be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY - * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -using System;using Tools; -namespace OpenSim.Region.ScriptEngine.DotNetEngine.Compiler.LSL { -//%+LSLProgramRoot+95 -public class LSLProgramRoot : SYMBOL{ - public LSLProgramRoot (Parser yyp, States s ):base(((LSLSyntax -)yyp)){ while (0< s . kids . Count ) kids . Add ( s . kids . Pop ()); -} - public LSLProgramRoot (Parser yyp, GlobalDefinitions gd , States s ):base(((LSLSyntax -)yyp)){ while (0< gd . kids . Count ) kids . Add ( gd . kids . Pop ()); - while (0< s . kids . Count ) kids . Add ( s . kids . Pop ()); -} - -public override string yyname { get { return "LSLProgramRoot"; }} -public override int yynum { get { return 95; }} -public LSLProgramRoot(Parser yyp):base(yyp){}} -//%+GlobalDefinitions+96 -public class GlobalDefinitions : SYMBOL{ - public GlobalDefinitions (Parser yyp, GlobalVariableDeclaration gvd ):base(((LSLSyntax -)yyp)){ kids . Add ( gvd ); -} - public GlobalDefinitions (Parser yyp, GlobalDefinitions gd , GlobalVariableDeclaration gvd ):base(((LSLSyntax -)yyp)){ while (0< gd . kids . Count ) kids . Add ( gd . kids . Pop ()); - kids . Add ( gvd ); -} - public GlobalDefinitions (Parser yyp, GlobalFunctionDefinition gfd ):base(((LSLSyntax -)yyp)){ kids . Add ( gfd ); -} - public GlobalDefinitions (Parser yyp, GlobalDefinitions gd , GlobalFunctionDefinition gfd ):base(((LSLSyntax -)yyp)){ while (0< gd . kids . Count ) kids . Add ( gd . kids . Pop ()); - kids . Add ( gfd ); -} - -public override string yyname { get { return "GlobalDefinitions"; }} -public override int yynum { get { return 96; }} -public GlobalDefinitions(Parser yyp):base(yyp){}} -//%+GlobalVariableDeclaration+97 -public class GlobalVariableDeclaration : SYMBOL{ - public GlobalVariableDeclaration (Parser yyp, Declaration d ):base(((LSLSyntax -)yyp)){ kids . Add ( d ); -} - public GlobalVariableDeclaration (Parser yyp, Assignment a ):base(((LSLSyntax -)yyp)){ kids . Add ( a ); -} - -public override string yyname { get { return "GlobalVariableDeclaration"; }} -public override int yynum { get { return 97; }} -public GlobalVariableDeclaration(Parser yyp):base(yyp){}} -//%+GlobalFunctionDefinition+98 -public class GlobalFunctionDefinition : SYMBOL{ - private string m_returnType ; - private string m_name ; - public GlobalFunctionDefinition (Parser yyp, string returnType , string name , ArgumentDeclarationList adl , CompoundStatement cs ):base(((LSLSyntax -)yyp)){ m_returnType = returnType ; - m_name = name ; - kids . Add ( adl ); - kids . Add ( cs ); -} - public string ReturnType { get { return m_returnType ; -} - set { m_returnType = value ; -} -} - public string Name { get { return m_name ; -} -} - -public override string yyname { get { return "GlobalFunctionDefinition"; }} -public override int yynum { get { return 98; }} -public GlobalFunctionDefinition(Parser yyp):base(yyp){}} -//%+States+99 -public class States : SYMBOL{ - public States (Parser yyp, State ds ):base(((LSLSyntax -)yyp)){ kids . Add ( ds ); -} - public States (Parser yyp, States s , State us ):base(((LSLSyntax -)yyp)){ while (0< s . kids . Count ) kids . Add ( s . kids . Pop ()); - kids . Add ( us ); -} - -public override string yyname { get { return "States"; }} -public override int yynum { get { return 99; }} -public States(Parser yyp):base(yyp){}} -//%+State+100 -public class State : SYMBOL{ - private string m_name ; - public State (Parser yyp, string name , StateBody sb ):base(((LSLSyntax -)yyp)){ m_name = name ; - while (0< sb . kids . Count ) kids . Add ( sb . kids . Pop ()); -} - public override string ToString (){ return "STATE<"+ m_name +">"; -} - public string Name { get { return m_name ; -} -} - -public override string yyname { get { return "State"; }} -public override int yynum { get { return 100; }} -public State(Parser yyp):base(yyp){}} -//%+StateBody+101 -public class StateBody : SYMBOL{ - public StateBody (Parser yyp, StateBody sb , StateEvent se ):base(((LSLSyntax -)yyp)){ while (0< sb . kids . Count ) kids . Add ( sb . kids . Pop ()); - kids . Add ( se ); -} - public StateBody (Parser yyp, StateEvent se ):base(((LSLSyntax -)yyp)){ kids . Add ( se ); -} - -public override string yyname { get { return "StateBody"; }} -public override int yynum { get { return 101; }} -public StateBody(Parser yyp):base(yyp){}} -//%+StateEvent+102 -public class StateEvent : SYMBOL{ - private string m_name ; - public StateEvent (Parser yyp, string name , CompoundStatement cs ):base(((LSLSyntax -)yyp)){ m_name = name ; - kids . Add ( cs ); -} - public StateEvent (Parser yyp, string name , ArgumentDeclarationList dal , CompoundStatement cs ):base(((LSLSyntax -)yyp)){ m_name = name ; - if (0< dal . kids . Count ) kids . Add ( dal ); - kids . Add ( cs ); -} - public override string ToString (){ return "EVENT<"+ m_name +">"; -} - public string Name { get { return m_name ; -} -} - -public override string yyname { get { return "StateEvent"; }} -public override int yynum { get { return 102; }} -public StateEvent(Parser yyp):base(yyp){}} -//%+ArgumentDeclarationList+103 -public class ArgumentDeclarationList : SYMBOL{ - public ArgumentDeclarationList (Parser yyp, Declaration d ):base(((LSLSyntax -)yyp)){ kids . Add ( d ); -} - public ArgumentDeclarationList (Parser yyp, ArgumentDeclarationList adl , Declaration d ):base(((LSLSyntax -)yyp)){ while (0< adl . kids . Count ) kids . Add ( adl . kids . Pop ()); - kids . Add ( d ); -} - -public override string yyname { get { return "ArgumentDeclarationList"; }} -public override int yynum { get { return 103; }} -public ArgumentDeclarationList(Parser yyp):base(yyp){}} -//%+Declaration+104 -public class Declaration : SYMBOL{ - private string m_datatype ; - private string m_id ; - public Declaration (Parser yyp, string type , string id ):base(((LSLSyntax -)yyp)){ m_datatype = type ; - m_id = id ; -} - public override string ToString (){ return "Declaration<"+ m_datatype +":"+ m_id +">"; -} - public string Datatype { get { return m_datatype ; -} - set { m_datatype = value ; -} -} - public string Id { get { return m_id ; -} -} - -public override string yyname { get { return "Declaration"; }} -public override int yynum { get { return 104; }} -public Declaration(Parser yyp):base(yyp){}} -//%+Typename+105 -public class Typename : SYMBOL{ - public string yytext ; - public Typename (Parser yyp, string text ):base(((LSLSyntax -)yyp)){ yytext = text ; -} - -public override string yyname { get { return "Typename"; }} -public override int yynum { get { return 105; }} -public Typename(Parser yyp):base(yyp){}} -//%+Event+106 -public class Event : SYMBOL{ - public string yytext ; - public Event (Parser yyp, string text ):base(((LSLSyntax -)yyp)){ yytext = text ; -} - -public override string yyname { get { return "Event"; }} -public override int yynum { get { return 106; }} -public Event(Parser yyp):base(yyp){}} -//%+CompoundStatement+107 -public class CompoundStatement : SYMBOL{ - public CompoundStatement (Parser yyp):base(((LSLSyntax -)yyp)){} - public CompoundStatement (Parser yyp, StatementList sl ):base(((LSLSyntax -)yyp)){ while (0< sl . kids . Count ) kids . Add ( sl . kids . Pop ()); -} - -public override string yyname { get { return "CompoundStatement"; }} -public override int yynum { get { return 107; }} -} -//%+StatementList+108 -public class StatementList : SYMBOL{ - private void AddStatement ( Statement s ){ if ( s . kids . Top is IfStatement || s . kids . Top is WhileStatement || s . kids . Top is DoWhileStatement || s . kids . Top is ForLoop ) kids . Add ( s . kids . Pop ()); - else kids . Add ( s ); -} - public StatementList (Parser yyp, Statement s ):base(((LSLSyntax -)yyp)){ AddStatement ( s ); -} - public StatementList (Parser yyp, StatementList sl , Statement s ):base(((LSLSyntax -)yyp)){ while (0< sl . kids . Count ) kids . Add ( sl . kids . Pop ()); - AddStatement ( s ); -} - -public override string yyname { get { return "StatementList"; }} -public override int yynum { get { return 108; }} -public StatementList(Parser yyp):base(yyp){}} -//%+Statement+109 -public class Statement : SYMBOL{ - public Statement (Parser yyp, Declaration d ):base(((LSLSyntax -)yyp)){ kids . Add ( d ); -} - public Statement (Parser yyp, CompoundStatement cs ):base(((LSLSyntax -)yyp)){ kids . Add ( cs ); -} - public Statement (Parser yyp, FunctionCall fc ):base(((LSLSyntax -)yyp)){ kids . Add ( fc ); -} - public Statement (Parser yyp, Assignment a ):base(((LSLSyntax -)yyp)){ kids . Add ( a ); -} - public Statement (Parser yyp, Expression e ):base(((LSLSyntax -)yyp)){ kids . Add ( e ); -} - public Statement (Parser yyp, ReturnStatement rs ):base(((LSLSyntax -)yyp)){ kids . Add ( rs ); -} - public Statement (Parser yyp, StateChange sc ):base(((LSLSyntax -)yyp)){ kids . Add ( sc ); -} - public Statement (Parser yyp, IfStatement ifs ):base(((LSLSyntax -)yyp)){ kids . Add ( ifs ); -} - public Statement (Parser yyp, WhileStatement ifs ):base(((LSLSyntax -)yyp)){ kids . Add ( ifs ); -} - public Statement (Parser yyp, DoWhileStatement ifs ):base(((LSLSyntax -)yyp)){ kids . Add ( ifs ); -} - public Statement (Parser yyp, ForLoop fl ):base(((LSLSyntax -)yyp)){ kids . Add ( fl ); -} - public Statement (Parser yyp, JumpLabel jl ):base(((LSLSyntax -)yyp)){ kids . Add ( jl ); -} - public Statement (Parser yyp, JumpStatement js ):base(((LSLSyntax -)yyp)){ kids . Add ( js ); -} - -public override string yyname { get { return "Statement"; }} -public override int yynum { get { return 109; }} -public Statement(Parser yyp):base(yyp){}} -//%+Assignment+110 -public class Assignment : SYMBOL{ - protected string m_assignmentType ; - public Assignment (Parser yyp, SYMBOL lhs , SYMBOL rhs , string assignmentType ):base(((LSLSyntax -)yyp)){ m_assignmentType = assignmentType ; - kids . Add ( lhs ); - if ( rhs is ConstantExpression ) while (0< rhs . kids . Count ) kids . Add ( rhs . kids . Pop ()); - else kids . Add ( rhs ); -} - public Assignment (Parser yyp, SimpleAssignment sa ):base(((LSLSyntax -)yyp)){ m_assignmentType = sa . AssignmentType ; - while (0< sa . kids . Count ) kids . Add ( sa . kids . Pop ()); -} - public string AssignmentType { get { return m_assignmentType ; -} -} - public override string ToString (){ return base . ToString ()+"<"+ m_assignmentType +">"; -} - -public override string yyname { get { return "Assignment"; }} -public override int yynum { get { return 110; }} -public Assignment(Parser yyp):base(yyp){}} -//%+SimpleAssignment+111 -public class SimpleAssignment : Assignment{ - public SimpleAssignment (Parser yyp, SYMBOL lhs , SYMBOL rhs , string assignmentType ):base(((LSLSyntax -)yyp)){ m_assignmentType = assignmentType ; - kids . Add ( lhs ); - if ( rhs is ConstantExpression ) while (0< rhs . kids . Count ) kids . Add ( rhs . kids . Pop ()); - else kids . Add ( rhs ); -} - -public override string yyname { get { return "SimpleAssignment"; }} -public override int yynum { get { return 111; }} -public SimpleAssignment(Parser yyp):base(yyp){}} -//%+ReturnStatement+112 -public class ReturnStatement : SYMBOL{ - public ReturnStatement (Parser yyp):base(((LSLSyntax -)yyp)){} - public ReturnStatement (Parser yyp, Expression e ):base(((LSLSyntax -)yyp)){ if ( e is ConstantExpression ) while (0< e . kids . Count ) kids . Add ( e . kids . Pop ()); - else kids . Add ( e ); -} - -public override string yyname { get { return "ReturnStatement"; }} -public override int yynum { get { return 112; }} -} -//%+JumpLabel+113 -public class JumpLabel : SYMBOL{ - private string m_labelName ; - public JumpLabel (Parser yyp, string labelName ):base(((LSLSyntax -)yyp)){ m_labelName = labelName ; -} - public string LabelName { get { return m_labelName ; -} -} - public override string ToString (){ return base . ToString ()+"<"+ m_labelName +">"; -} - -public override string yyname { get { return "JumpLabel"; }} -public override int yynum { get { return 113; }} -public JumpLabel(Parser yyp):base(yyp){}} -//%+JumpStatement+114 -public class JumpStatement : SYMBOL{ - private string m_targetName ; - public JumpStatement (Parser yyp, string targetName ):base(((LSLSyntax -)yyp)){ m_targetName = targetName ; -} - public string TargetName { get { return m_targetName ; -} -} - public override string ToString (){ return base . ToString ()+"<"+ m_targetName +">"; -} - -public override string yyname { get { return "JumpStatement"; }} -public override int yynum { get { return 114; }} -public JumpStatement(Parser yyp):base(yyp){}} -//%+StateChange+115 -public class StateChange : SYMBOL{ - private string m_newState ; - public StateChange (Parser yyp, string newState ):base(((LSLSyntax -)yyp)){ m_newState = newState ; -} - public string NewState { get { return m_newState ; -} -} - -public override string yyname { get { return "StateChange"; }} -public override int yynum { get { return 115; }} -public StateChange(Parser yyp):base(yyp){}} -//%+IfStatement+116 -public class IfStatement : SYMBOL{ - private void AddStatement ( Statement s ){ if (0< s . kids . Count && s . kids . Top is CompoundStatement ) kids . Add ( s . kids . Pop ()); - else kids . Add ( s ); -} - public IfStatement (Parser yyp, SYMBOL s , Statement ifs ):base(((LSLSyntax -)yyp)){ kids . Add ( s ); - AddStatement ( ifs ); -} - public IfStatement (Parser yyp, SYMBOL s , Statement ifs , Statement es ):base(((LSLSyntax -)yyp)){ kids . Add ( s ); - AddStatement ( ifs ); - if (0< es . kids . Count && es . kids . Top is IfStatement ) kids . Add ( es . kids . Pop ()); - else AddStatement ( es ); -} - -public override string yyname { get { return "IfStatement"; }} -public override int yynum { get { return 116; }} -public IfStatement(Parser yyp):base(yyp){}} -//%+WhileStatement+117 -public class WhileStatement : SYMBOL{ - public WhileStatement (Parser yyp, SYMBOL s , Statement st ):base(((LSLSyntax -)yyp)){ kids . Add ( s ); - if (0< st . kids . Count && st . kids . Top is CompoundStatement ) kids . Add ( st . kids . Pop ()); - else kids . Add ( st ); -} - -public override string yyname { get { return "WhileStatement"; }} -public override int yynum { get { return 117; }} -public WhileStatement(Parser yyp):base(yyp){}} -//%+DoWhileStatement+118 -public class DoWhileStatement : SYMBOL{ - public DoWhileStatement (Parser yyp, SYMBOL s , Statement st ):base(((LSLSyntax -)yyp)){ if (0< st . kids . Count && st . kids . Top is CompoundStatement ) kids . Add ( st . kids . Pop ()); - else kids . Add ( st ); - kids . Add ( s ); -} - -public override string yyname { get { return "DoWhileStatement"; }} -public override int yynum { get { return 118; }} -public DoWhileStatement(Parser yyp):base(yyp){}} -//%+ForLoop+119 -public class ForLoop : SYMBOL{ - public ForLoop (Parser yyp, ForLoopStatement flsa , Expression e , ForLoopStatement flsb , Statement s ):base(((LSLSyntax -)yyp)){ kids . Add ( flsa ); - kids . Add ( e ); - kids . Add ( flsb ); - if (0< s . kids . Count && s . kids . Top is CompoundStatement ) kids . Add ( s . kids . Pop ()); - else kids . Add ( s ); -} - -public override string yyname { get { return "ForLoop"; }} -public override int yynum { get { return 119; }} -public ForLoop(Parser yyp):base(yyp){}} -//%+ForLoopStatement+120 -public class ForLoopStatement : SYMBOL{ - public ForLoopStatement (Parser yyp, Expression e ):base(((LSLSyntax -)yyp)){ kids . Add ( e ); -} - public ForLoopStatement (Parser yyp, SimpleAssignment sa ):base(((LSLSyntax -)yyp)){ kids . Add ( sa ); -} - public ForLoopStatement (Parser yyp, ForLoopStatement fls , Expression e ):base(((LSLSyntax -)yyp)){ while (0< fls . kids . Count ) kids . Add ( fls . kids . Pop ()); - kids . Add ( e ); -} - public ForLoopStatement (Parser yyp, ForLoopStatement fls , SimpleAssignment sa ):base(((LSLSyntax -)yyp)){ while (0< fls . kids . Count ) kids . Add ( fls . kids . Pop ()); - kids . Add ( sa ); -} - -public override string yyname { get { return "ForLoopStatement"; }} -public override int yynum { get { return 120; }} -public ForLoopStatement(Parser yyp):base(yyp){}} -//%+FunctionCall+121 -public class FunctionCall : SYMBOL{ - private string m_id ; - public FunctionCall (Parser yyp, string id , ArgumentList al ):base(((LSLSyntax -)yyp)){ m_id = id ; - kids . Add ( al ); -} - public override string ToString (){ return base . ToString ()+"<"+ m_id +">"; -} - public string Id { get { return m_id ; -} -} - -public override string yyname { get { return "FunctionCall"; }} -public override int yynum { get { return 121; }} -public FunctionCall(Parser yyp):base(yyp){}} -//%+ArgumentList+122 -public class ArgumentList : SYMBOL{ - public ArgumentList (Parser yyp, Argument a ):base(((LSLSyntax -)yyp)){ AddArgument ( a ); -} - public ArgumentList (Parser yyp, ArgumentList al , Argument a ):base(((LSLSyntax -)yyp)){ while (0< al . kids . Count ) kids . Add ( al . kids . Pop ()); - AddArgument ( a ); -} - private void AddArgument ( Argument a ){ if ( a is ExpressionArgument ) while (0< a . kids . Count ) kids . Add ( a . kids . Pop ()); - else kids . Add ( a ); -} - -public override string yyname { get { return "ArgumentList"; }} -public override int yynum { get { return 122; }} -public ArgumentList(Parser yyp):base(yyp){}} -//%+Argument+123 -public class Argument : SYMBOL{ -public override string yyname { get { return "Argument"; }} -public override int yynum { get { return 123; }} -public Argument(Parser yyp):base(yyp){}} -//%+ExpressionArgument+124 -public class ExpressionArgument : Argument{ - public ExpressionArgument (Parser yyp, Expression e ):base(((LSLSyntax -)yyp)){ if ( e is ConstantExpression ) while (0< e . kids . Count ) kids . Add ( e . kids . Pop ()); - else kids . Add ( e ); -} - -public override string yyname { get { return "ExpressionArgument"; }} -public override int yynum { get { return 124; }} -public ExpressionArgument(Parser yyp):base(yyp){}} -//%+Constant+125 -public class Constant : SYMBOL{ - private string m_type ; - private string m_val ; - public Constant (Parser yyp, string type , string val ):base(((LSLSyntax -)yyp)){ m_type = type ; - m_val = val ; -} - public override string ToString (){ return base . ToString ()+"<"+ m_type +":"+ m_val +">"; -} - public string Value { get { return m_val ; -} - set { m_val = value ; -} -} - public string Type { get { return m_type ; -} - set { m_type = value ; -} -} - -public override string yyname { get { return "Constant"; }} -public override int yynum { get { return 125; }} -public Constant(Parser yyp):base(yyp){}} -//%+VectorConstant+126 -public class VectorConstant : Constant{ - public VectorConstant (Parser yyp, Expression valX , Expression valY , Expression valZ ):base(((LSLSyntax -)yyp),"vector", null ){ kids . Add ( valX ); - kids . Add ( valY ); - kids . Add ( valZ ); -} - -public override string yyname { get { return "VectorConstant"; }} -public override int yynum { get { return 126; }} -public VectorConstant(Parser yyp):base(yyp){}} -//%+RotationConstant+127 -public class RotationConstant : Constant{ - public RotationConstant (Parser yyp, Expression valX , Expression valY , Expression valZ , Expression valS ):base(((LSLSyntax -)yyp),"rotation", null ){ kids . Add ( valX ); - kids . Add ( valY ); - kids . Add ( valZ ); - kids . Add ( valS ); -} - -public override string yyname { get { return "RotationConstant"; }} -public override int yynum { get { return 127; }} -public RotationConstant(Parser yyp):base(yyp){}} -//%+ListConstant+128 -public class ListConstant : Constant{ - public ListConstant (Parser yyp, ArgumentList al ):base(((LSLSyntax -)yyp),"list", null ){ kids . Add ( al ); -} - -public override string yyname { get { return "ListConstant"; }} -public override int yynum { get { return 128; }} -public ListConstant(Parser yyp):base(yyp){}} -//%+Expression+129 -public class Expression : SYMBOL{ - protected void AddExpression ( Expression e ){ if ( e is ConstantExpression ) while (0< e . kids . Count ) kids . Add ( e . kids . Pop ()); - else kids . Add ( e ); -} - -public override string yyname { get { return "Expression"; }} -public override int yynum { get { return 129; }} -public Expression(Parser yyp):base(yyp){}} -//%+ConstantExpression+130 -public class ConstantExpression : Expression{ - public ConstantExpression (Parser yyp, Constant c ):base(((LSLSyntax -)yyp)){ kids . Add ( c ); -} - -public override string yyname { get { return "ConstantExpression"; }} -public override int yynum { get { return 130; }} -public ConstantExpression(Parser yyp):base(yyp){}} -//%+IdentExpression+131 -public class IdentExpression : Expression{ - protected string m_name ; - public IdentExpression (Parser yyp, string name ):base(((LSLSyntax -)yyp)){ m_name = name ; -} - public override string ToString (){ return base . ToString ()+"<"+ m_name +">"; -} - public string Name { get { return m_name ; -} -} - -public override string yyname { get { return "IdentExpression"; }} -public override int yynum { get { return 131; }} -public IdentExpression(Parser yyp):base(yyp){}} -//%+IdentDotExpression+132 -public class IdentDotExpression : IdentExpression{ - private string m_member ; - public IdentDotExpression (Parser yyp, string name , string member ):base(((LSLSyntax -)yyp), name ){ m_member = member ; -} - public override string ToString (){ string baseToString = base . ToString (); - return baseToString . Substring (0, baseToString . Length -1)+"."+ m_member +">"; -} - public string Member { get { return m_member ; -} -} - -public override string yyname { get { return "IdentDotExpression"; }} -public override int yynum { get { return 132; }} -public IdentDotExpression(Parser yyp):base(yyp){}} -//%+FunctionCallExpression+133 -public class FunctionCallExpression : Expression{ - public FunctionCallExpression (Parser yyp, FunctionCall fc ):base(((LSLSyntax -)yyp)){ kids . Add ( fc ); -} - -public override string yyname { get { return "FunctionCallExpression"; }} -public override int yynum { get { return 133; }} -public FunctionCallExpression(Parser yyp):base(yyp){}} -//%+BinaryExpression+134 -public class BinaryExpression : Expression{ - private string m_expressionSymbol ; - public BinaryExpression (Parser yyp, Expression lhs , Expression rhs , string expressionSymbol ):base(((LSLSyntax -)yyp)){ m_expressionSymbol = expressionSymbol ; - AddExpression ( lhs ); - AddExpression ( rhs ); -} - public string ExpressionSymbol { get { return m_expressionSymbol ; -} -} - public override string ToString (){ return base . ToString ()+"<"+ m_expressionSymbol +">"; -} - -public override string yyname { get { return "BinaryExpression"; }} -public override int yynum { get { return 134; }} -public BinaryExpression(Parser yyp):base(yyp){}} -//%+UnaryExpression+135 -public class UnaryExpression : Expression{ - private string m_unarySymbol ; - public UnaryExpression (Parser yyp, string unarySymbol , Expression e ):base(((LSLSyntax -)yyp)){ m_unarySymbol = unarySymbol ; - AddExpression ( e ); -} - public string UnarySymbol { get { return m_unarySymbol ; -} -} - public override string ToString (){ return base . ToString ()+"<"+ m_unarySymbol +">"; -} - -public override string yyname { get { return "UnaryExpression"; }} -public override int yynum { get { return 135; }} -public UnaryExpression(Parser yyp):base(yyp){}} -//%+TypecastExpression+136 -public class TypecastExpression : Expression{ - private string m_typecastType ; - public TypecastExpression (Parser yyp, string typecastType , SYMBOL rhs ):base(((LSLSyntax -)yyp)){ m_typecastType = typecastType ; - kids . Add ( rhs ); -} - public string TypecastType { get { return m_typecastType ; -} - set { m_typecastType = value ; -} -} - -public override string yyname { get { return "TypecastExpression"; }} -public override int yynum { get { return 136; }} -public TypecastExpression(Parser yyp):base(yyp){}} -//%+ParenthesisExpression+137 -public class ParenthesisExpression : Expression{ - public ParenthesisExpression (Parser yyp, SYMBOL s ):base(((LSLSyntax -)yyp)){ kids . Add ( s ); -} - -public override string yyname { get { return "ParenthesisExpression"; }} -public override int yynum { get { return 137; }} -public ParenthesisExpression(Parser yyp):base(yyp){}} -//%+IncrementDecrementExpression+138 -public class IncrementDecrementExpression : Expression{ - private string m_name ; - private string m_operation ; - private bool m_postOperation ; - public IncrementDecrementExpression (Parser yyp, string name , string operation , bool postOperation ):base(((LSLSyntax -)yyp)){ m_name = name ; - m_operation = operation ; - m_postOperation = postOperation ; -} - public IncrementDecrementExpression (Parser yyp, IdentDotExpression ide , string operation , bool postOperation ):base(((LSLSyntax -)yyp)){ m_operation = operation ; - m_postOperation = postOperation ; - kids . Add ( ide ); -} - public override string ToString (){ return base . ToString ()+"<"+( m_postOperation ? m_name + m_operation : m_operation + m_name )+">"; -} - public string Name { get { return m_name ; -} -} - public string Operation { get { return m_operation ; -} -} - public bool PostOperation { get { return m_postOperation ; -} -} - -public override string yyname { get { return "IncrementDecrementExpression"; }} -public override int yynum { get { return 138; }} -public IncrementDecrementExpression(Parser yyp):base(yyp){}} - -public class LSLProgramRoot_1 : LSLProgramRoot { - public LSLProgramRoot_1(Parser yyq):base(yyq, - ((GlobalDefinitions)(yyq.StackAt(1).m_value)) - , - ((States)(yyq.StackAt(0).m_value)) - ){}} - -public class LSLProgramRoot_2 : LSLProgramRoot { - public LSLProgramRoot_2(Parser yyq):base(yyq, - ((States)(yyq.StackAt(0).m_value)) - ){}} - -public class GlobalDefinitions_1 : GlobalDefinitions { - public GlobalDefinitions_1(Parser yyq):base(yyq, - ((GlobalVariableDeclaration)(yyq.StackAt(0).m_value)) - ){}} - -public class GlobalDefinitions_2 : GlobalDefinitions { - public GlobalDefinitions_2(Parser yyq):base(yyq, - ((GlobalDefinitions)(yyq.StackAt(1).m_value)) - , - ((GlobalVariableDeclaration)(yyq.StackAt(0).m_value)) - ){}} - -public class GlobalDefinitions_3 : GlobalDefinitions { - public GlobalDefinitions_3(Parser yyq):base(yyq, - ((GlobalFunctionDefinition)(yyq.StackAt(0).m_value)) - ){}} - -public class GlobalDefinitions_4 : GlobalDefinitions { - public GlobalDefinitions_4(Parser yyq):base(yyq, - ((GlobalDefinitions)(yyq.StackAt(1).m_value)) - , - ((GlobalFunctionDefinition)(yyq.StackAt(0).m_value)) - ){}} - -public class GlobalVariableDeclaration_1 : GlobalVariableDeclaration { - public GlobalVariableDeclaration_1(Parser yyq):base(yyq, - ((Declaration)(yyq.StackAt(1).m_value)) - ){}} - -public class GlobalVariableDeclaration_2 : GlobalVariableDeclaration { - public GlobalVariableDeclaration_2(Parser yyq):base(yyq,new Assignment(((LSLSyntax -)yyq), - ((Declaration)(yyq.StackAt(3).m_value)) - , - ((Expression)(yyq.StackAt(1).m_value)) - , - ((EQUALS)(yyq.StackAt(2).m_value)) - .yytext)){}} - -public class GlobalFunctionDefinition_1 : GlobalFunctionDefinition { - public GlobalFunctionDefinition_1(Parser yyq):base(yyq,"void", - ((IDENT)(yyq.StackAt(4).m_value)) - .yytext, - ((ArgumentDeclarationList)(yyq.StackAt(2).m_value)) - , - ((CompoundStatement)(yyq.StackAt(0).m_value)) - ){}} - -public class GlobalFunctionDefinition_2 : GlobalFunctionDefinition { - public GlobalFunctionDefinition_2(Parser yyq):base(yyq, - ((Typename)(yyq.StackAt(5).m_value)) - .yytext, - ((IDENT)(yyq.StackAt(4).m_value)) - .yytext, - ((ArgumentDeclarationList)(yyq.StackAt(2).m_value)) - , - ((CompoundStatement)(yyq.StackAt(0).m_value)) - ){}} - -public class States_1 : States { - public States_1(Parser yyq):base(yyq, - ((State)(yyq.StackAt(0).m_value)) - ){}} - -public class States_2 : States { - public States_2(Parser yyq):base(yyq, - ((States)(yyq.StackAt(1).m_value)) - , - ((State)(yyq.StackAt(0).m_value)) - ){}} - -public class State_1 : State { - public State_1(Parser yyq):base(yyq, - ((DEFAULT_STATE)(yyq.StackAt(3).m_value)) - .yytext, - ((StateBody)(yyq.StackAt(1).m_value)) - ){}} - -public class State_2 : State { - public State_2(Parser yyq):base(yyq, - ((IDENT)(yyq.StackAt(3).m_value)) - .yytext, - ((StateBody)(yyq.StackAt(1).m_value)) - ){}} - -public class StateBody_1 : StateBody { - public StateBody_1(Parser yyq):base(yyq, - ((StateEvent)(yyq.StackAt(0).m_value)) - ){}} - -public class StateBody_2 : StateBody { - public StateBody_2(Parser yyq):base(yyq, - ((StateBody)(yyq.StackAt(1).m_value)) - , - ((StateEvent)(yyq.StackAt(0).m_value)) - ){}} - -public class StateEvent_1 : StateEvent { - public StateEvent_1(Parser yyq):base(yyq, - ((Event)(yyq.StackAt(4).m_value)) - .yytext, - ((ArgumentDeclarationList)(yyq.StackAt(2).m_value)) - , - ((CompoundStatement)(yyq.StackAt(0).m_value)) - ){}} - -public class ArgumentDeclarationList_1 : ArgumentDeclarationList { - public ArgumentDeclarationList_1(Parser yyq):base(yyq, - ((Declaration)(yyq.StackAt(0).m_value)) - ){}} - -public class ArgumentDeclarationList_2 : ArgumentDeclarationList { - public ArgumentDeclarationList_2(Parser yyq):base(yyq, - ((ArgumentDeclarationList)(yyq.StackAt(2).m_value)) - , - ((Declaration)(yyq.StackAt(0).m_value)) - ){}} - -public class Declaration_1 : Declaration { - public Declaration_1(Parser yyq):base(yyq, - ((Typename)(yyq.StackAt(1).m_value)) - .yytext, - ((IDENT)(yyq.StackAt(0).m_value)) - .yytext){}} - -public class CompoundStatement_1 : CompoundStatement { - public CompoundStatement_1(Parser yyq):base(yyq){}} - -public class CompoundStatement_2 : CompoundStatement { - public CompoundStatement_2(Parser yyq):base(yyq, - ((StatementList)(yyq.StackAt(1).m_value)) - ){}} - -public class StatementList_1 : StatementList { - public StatementList_1(Parser yyq):base(yyq, - ((Statement)(yyq.StackAt(0).m_value)) - ){}} - -public class StatementList_2 : StatementList { - public StatementList_2(Parser yyq):base(yyq, - ((StatementList)(yyq.StackAt(1).m_value)) - , - ((Statement)(yyq.StackAt(0).m_value)) - ){}} - -public class Statement_1 : Statement { - public Statement_1(Parser yyq):base(yyq, - ((Declaration)(yyq.StackAt(1).m_value)) - ){}} - -public class Statement_2 : Statement { - public Statement_2(Parser yyq):base(yyq, - ((Assignment)(yyq.StackAt(1).m_value)) - ){}} - -public class Statement_3 : Statement { - public Statement_3(Parser yyq):base(yyq, - ((Expression)(yyq.StackAt(1).m_value)) - ){}} - -public class Statement_4 : Statement { - public Statement_4(Parser yyq):base(yyq, - ((ReturnStatement)(yyq.StackAt(1).m_value)) - ){}} - -public class Statement_5 : Statement { - public Statement_5(Parser yyq):base(yyq, - ((JumpLabel)(yyq.StackAt(1).m_value)) - ){}} - -public class Statement_6 : Statement { - public Statement_6(Parser yyq):base(yyq, - ((JumpStatement)(yyq.StackAt(1).m_value)) - ){}} - -public class Statement_7 : Statement { - public Statement_7(Parser yyq):base(yyq, - ((StateChange)(yyq.StackAt(1).m_value)) - ){}} - -public class Statement_8 : Statement { - public Statement_8(Parser yyq):base(yyq, - ((IfStatement)(yyq.StackAt(0).m_value)) - ){}} - -public class Statement_9 : Statement { - public Statement_9(Parser yyq):base(yyq, - ((WhileStatement)(yyq.StackAt(0).m_value)) - ){}} - -public class Statement_10 : Statement { - public Statement_10(Parser yyq):base(yyq, - ((DoWhileStatement)(yyq.StackAt(0).m_value)) - ){}} - -public class Statement_11 : Statement { - public Statement_11(Parser yyq):base(yyq, - ((ForLoop)(yyq.StackAt(0).m_value)) - ){}} - -public class Statement_12 : Statement { - public Statement_12(Parser yyq):base(yyq, - ((CompoundStatement)(yyq.StackAt(0).m_value)) - ){}} - -public class JumpLabel_1 : JumpLabel { - public JumpLabel_1(Parser yyq):base(yyq, - ((IDENT)(yyq.StackAt(0).m_value)) - .yytext){}} - -public class JumpStatement_1 : JumpStatement { - public JumpStatement_1(Parser yyq):base(yyq, - ((IDENT)(yyq.StackAt(0).m_value)) - .yytext){}} - -public class StateChange_1 : StateChange { - public StateChange_1(Parser yyq):base(yyq, - ((IDENT)(yyq.StackAt(0).m_value)) - .yytext){}} - -public class StateChange_2 : StateChange { - public StateChange_2(Parser yyq):base(yyq, - ((DEFAULT_STATE)(yyq.StackAt(0).m_value)) - .yytext){}} - -public class IfStatement_1 : IfStatement { - public IfStatement_1(Parser yyq):base(yyq, - ((Expression)(yyq.StackAt(2).m_value)) - , - ((Statement)(yyq.StackAt(0).m_value)) - ){}} - -public class IfStatement_2 : IfStatement { - public IfStatement_2(Parser yyq):base(yyq, - ((Expression)(yyq.StackAt(4).m_value)) - , - ((Statement)(yyq.StackAt(2).m_value)) - , - ((Statement)(yyq.StackAt(0).m_value)) - ){}} - -public class IfStatement_3 : IfStatement { - public IfStatement_3(Parser yyq):base(yyq, - ((SimpleAssignment)(yyq.StackAt(2).m_value)) - , - ((Statement)(yyq.StackAt(0).m_value)) - ){}} - -public class IfStatement_4 : IfStatement { - public IfStatement_4(Parser yyq):base(yyq, - ((SimpleAssignment)(yyq.StackAt(4).m_value)) - , - ((Statement)(yyq.StackAt(2).m_value)) - , - ((Statement)(yyq.StackAt(0).m_value)) - ){}} - -public class WhileStatement_1 : WhileStatement { - public WhileStatement_1(Parser yyq):base(yyq, - ((Expression)(yyq.StackAt(2).m_value)) - , - ((Statement)(yyq.StackAt(0).m_value)) - ){}} - -public class WhileStatement_2 : WhileStatement { - public WhileStatement_2(Parser yyq):base(yyq, - ((SimpleAssignment)(yyq.StackAt(2).m_value)) - , - ((Statement)(yyq.StackAt(0).m_value)) - ){}} - -public class DoWhileStatement_1 : DoWhileStatement { - public DoWhileStatement_1(Parser yyq):base(yyq, - ((Expression)(yyq.StackAt(2).m_value)) - , - ((Statement)(yyq.StackAt(5).m_value)) - ){}} - -public class DoWhileStatement_2 : DoWhileStatement { - public DoWhileStatement_2(Parser yyq):base(yyq, - ((SimpleAssignment)(yyq.StackAt(2).m_value)) - , - ((Statement)(yyq.StackAt(5).m_value)) - ){}} - -public class ForLoop_1 : ForLoop { - public ForLoop_1(Parser yyq):base(yyq, - ((ForLoopStatement)(yyq.StackAt(6).m_value)) - , - ((Expression)(yyq.StackAt(4).m_value)) - , - ((ForLoopStatement)(yyq.StackAt(2).m_value)) - , - ((Statement)(yyq.StackAt(0).m_value)) - ){}} - -public class ForLoopStatement_1 : ForLoopStatement { - public ForLoopStatement_1(Parser yyq):base(yyq, - ((Expression)(yyq.StackAt(0).m_value)) - ){}} - -public class ForLoopStatement_2 : ForLoopStatement { - public ForLoopStatement_2(Parser yyq):base(yyq, - ((SimpleAssignment)(yyq.StackAt(0).m_value)) - ){}} - -public class ForLoopStatement_3 : ForLoopStatement { - public ForLoopStatement_3(Parser yyq):base(yyq, - ((ForLoopStatement)(yyq.StackAt(2).m_value)) - , - ((Expression)(yyq.StackAt(0).m_value)) - ){}} - -public class ForLoopStatement_4 : ForLoopStatement { - public ForLoopStatement_4(Parser yyq):base(yyq, - ((ForLoopStatement)(yyq.StackAt(2).m_value)) - , - ((SimpleAssignment)(yyq.StackAt(0).m_value)) - ){}} - -public class Assignment_1 : Assignment { - public Assignment_1(Parser yyq):base(yyq, - ((Declaration)(yyq.StackAt(2).m_value)) - , - ((Expression)(yyq.StackAt(0).m_value)) - , - ((EQUALS)(yyq.StackAt(1).m_value)) - .yytext){}} - -public class Assignment_2 : Assignment { - public Assignment_2(Parser yyq):base(yyq, - ((SimpleAssignment)(yyq.StackAt(0).m_value)) - ){}} - -public class SimpleAssignment_1 : SimpleAssignment { - public SimpleAssignment_1(Parser yyq):base(yyq, - ((IDENT)(yyq.StackAt(2).m_value)) - , - ((Expression)(yyq.StackAt(0).m_value)) - , - ((EQUALS)(yyq.StackAt(1).m_value)) - .yytext){}} - -public class SimpleAssignment_2 : SimpleAssignment { - public SimpleAssignment_2(Parser yyq):base(yyq, - ((IDENT)(yyq.StackAt(2).m_value)) - , - ((Expression)(yyq.StackAt(0).m_value)) - , - ((PLUS_EQUALS)(yyq.StackAt(1).m_value)) - .yytext){}} - -public class SimpleAssignment_3 : SimpleAssignment { - public SimpleAssignment_3(Parser yyq):base(yyq, - ((IDENT)(yyq.StackAt(2).m_value)) - , - ((Expression)(yyq.StackAt(0).m_value)) - , - ((MINUS_EQUALS)(yyq.StackAt(1).m_value)) - .yytext){}} - -public class SimpleAssignment_4 : SimpleAssignment { - public SimpleAssignment_4(Parser yyq):base(yyq, - ((IDENT)(yyq.StackAt(2).m_value)) - , - ((Expression)(yyq.StackAt(0).m_value)) - , - ((STAR_EQUALS)(yyq.StackAt(1).m_value)) - .yytext){}} - -public class SimpleAssignment_5 : SimpleAssignment { - public SimpleAssignment_5(Parser yyq):base(yyq, - ((IDENT)(yyq.StackAt(2).m_value)) - , - ((Expression)(yyq.StackAt(0).m_value)) - , - ((SLASH_EQUALS)(yyq.StackAt(1).m_value)) - .yytext){}} - -public class SimpleAssignment_6 : SimpleAssignment { - public SimpleAssignment_6(Parser yyq):base(yyq, - ((IDENT)(yyq.StackAt(2).m_value)) - , - ((Expression)(yyq.StackAt(0).m_value)) - , - ((PERCENT_EQUALS)(yyq.StackAt(1).m_value)) - .yytext){}} - -public class SimpleAssignment_7 : SimpleAssignment { - public SimpleAssignment_7(Parser yyq):base(yyq,new IdentDotExpression(((LSLSyntax -)yyq), - ((IDENT)(yyq.StackAt(4).m_value)) - .yytext, - ((IDENT)(yyq.StackAt(2).m_value)) - .yytext), - ((Expression)(yyq.StackAt(0).m_value)) - , - ((EQUALS)(yyq.StackAt(1).m_value)) - .yytext){}} - -public class SimpleAssignment_8 : SimpleAssignment { - public SimpleAssignment_8(Parser yyq):base(yyq,new IdentDotExpression(((LSLSyntax -)yyq), - ((IDENT)(yyq.StackAt(4).m_value)) - .yytext, - ((IDENT)(yyq.StackAt(2).m_value)) - .yytext), - ((Expression)(yyq.StackAt(0).m_value)) - , - ((PLUS_EQUALS)(yyq.StackAt(1).m_value)) - .yytext){}} - -public class SimpleAssignment_9 : SimpleAssignment { - public SimpleAssignment_9(Parser yyq):base(yyq,new IdentDotExpression(((LSLSyntax -)yyq), - ((IDENT)(yyq.StackAt(4).m_value)) - .yytext, - ((IDENT)(yyq.StackAt(2).m_value)) - .yytext), - ((Expression)(yyq.StackAt(0).m_value)) - , - ((MINUS_EQUALS)(yyq.StackAt(1).m_value)) - .yytext){}} - -public class SimpleAssignment_10 : SimpleAssignment { - public SimpleAssignment_10(Parser yyq):base(yyq,new IdentDotExpression(((LSLSyntax -)yyq), - ((IDENT)(yyq.StackAt(4).m_value)) - .yytext, - ((IDENT)(yyq.StackAt(2).m_value)) - .yytext), - ((Expression)(yyq.StackAt(0).m_value)) - , - ((STAR_EQUALS)(yyq.StackAt(1).m_value)) - .yytext){}} - -public class SimpleAssignment_11 : SimpleAssignment { - public SimpleAssignment_11(Parser yyq):base(yyq,new IdentDotExpression(((LSLSyntax -)yyq), - ((IDENT)(yyq.StackAt(4).m_value)) - .yytext, - ((IDENT)(yyq.StackAt(2).m_value)) - .yytext), - ((Expression)(yyq.StackAt(0).m_value)) - , - ((SLASH_EQUALS)(yyq.StackAt(1).m_value)) - .yytext){}} - -public class SimpleAssignment_12 : SimpleAssignment { - public SimpleAssignment_12(Parser yyq):base(yyq,new IdentDotExpression(((LSLSyntax -)yyq), - ((IDENT)(yyq.StackAt(4).m_value)) - .yytext, - ((IDENT)(yyq.StackAt(2).m_value)) - .yytext), - ((Expression)(yyq.StackAt(0).m_value)) - , - ((PERCENT_EQUALS)(yyq.StackAt(1).m_value)) - .yytext){}} - -public class SimpleAssignment_13 : SimpleAssignment { - public SimpleAssignment_13(Parser yyq):base(yyq, - ((IDENT)(yyq.StackAt(2).m_value)) - , - ((SimpleAssignment)(yyq.StackAt(0).m_value)) - , - ((EQUALS)(yyq.StackAt(1).m_value)) - .yytext){}} - -public class SimpleAssignment_14 : SimpleAssignment { - public SimpleAssignment_14(Parser yyq):base(yyq, - ((IDENT)(yyq.StackAt(2).m_value)) - , - ((SimpleAssignment)(yyq.StackAt(0).m_value)) - , - ((PLUS_EQUALS)(yyq.StackAt(1).m_value)) - .yytext){}} - -public class SimpleAssignment_15 : SimpleAssignment { - public SimpleAssignment_15(Parser yyq):base(yyq, - ((IDENT)(yyq.StackAt(2).m_value)) - , - ((SimpleAssignment)(yyq.StackAt(0).m_value)) - , - ((MINUS_EQUALS)(yyq.StackAt(1).m_value)) - .yytext){}} - -public class SimpleAssignment_16 : SimpleAssignment { - public SimpleAssignment_16(Parser yyq):base(yyq, - ((IDENT)(yyq.StackAt(2).m_value)) - , - ((SimpleAssignment)(yyq.StackAt(0).m_value)) - , - ((STAR_EQUALS)(yyq.StackAt(1).m_value)) - .yytext){}} - -public class SimpleAssignment_17 : SimpleAssignment { - public SimpleAssignment_17(Parser yyq):base(yyq, - ((IDENT)(yyq.StackAt(2).m_value)) - , - ((SimpleAssignment)(yyq.StackAt(0).m_value)) - , - ((SLASH_EQUALS)(yyq.StackAt(1).m_value)) - .yytext){}} - -public class SimpleAssignment_18 : SimpleAssignment { - public SimpleAssignment_18(Parser yyq):base(yyq, - ((IDENT)(yyq.StackAt(2).m_value)) - , - ((SimpleAssignment)(yyq.StackAt(0).m_value)) - , - ((PERCENT_EQUALS)(yyq.StackAt(1).m_value)) - .yytext){}} - -public class SimpleAssignment_19 : SimpleAssignment { - public SimpleAssignment_19(Parser yyq):base(yyq,new IdentDotExpression(((LSLSyntax -)yyq), - ((IDENT)(yyq.StackAt(4).m_value)) - .yytext, - ((IDENT)(yyq.StackAt(2).m_value)) - .yytext), - ((SimpleAssignment)(yyq.StackAt(0).m_value)) - , - ((EQUALS)(yyq.StackAt(1).m_value)) - .yytext){}} - -public class SimpleAssignment_20 : SimpleAssignment { - public SimpleAssignment_20(Parser yyq):base(yyq,new IdentDotExpression(((LSLSyntax -)yyq), - ((IDENT)(yyq.StackAt(4).m_value)) - .yytext, - ((IDENT)(yyq.StackAt(2).m_value)) - .yytext), - ((SimpleAssignment)(yyq.StackAt(0).m_value)) - , - ((PLUS_EQUALS)(yyq.StackAt(1).m_value)) - .yytext){}} - -public class SimpleAssignment_21 : SimpleAssignment { - public SimpleAssignment_21(Parser yyq):base(yyq,new IdentDotExpression(((LSLSyntax -)yyq), - ((IDENT)(yyq.StackAt(4).m_value)) - .yytext, - ((IDENT)(yyq.StackAt(2).m_value)) - .yytext), - ((SimpleAssignment)(yyq.StackAt(0).m_value)) - , - ((MINUS_EQUALS)(yyq.StackAt(1).m_value)) - .yytext){}} - -public class SimpleAssignment_22 : SimpleAssignment { - public SimpleAssignment_22(Parser yyq):base(yyq,new IdentDotExpression(((LSLSyntax -)yyq), - ((IDENT)(yyq.StackAt(4).m_value)) - .yytext, - ((IDENT)(yyq.StackAt(2).m_value)) - .yytext), - ((SimpleAssignment)(yyq.StackAt(0).m_value)) - , - ((STAR_EQUALS)(yyq.StackAt(1).m_value)) - .yytext){}} - -public class SimpleAssignment_23 : SimpleAssignment { - public SimpleAssignment_23(Parser yyq):base(yyq,new IdentDotExpression(((LSLSyntax -)yyq), - ((IDENT)(yyq.StackAt(4).m_value)) - .yytext, - ((IDENT)(yyq.StackAt(2).m_value)) - .yytext), - ((SimpleAssignment)(yyq.StackAt(0).m_value)) - , - ((SLASH_EQUALS)(yyq.StackAt(1).m_value)) - .yytext){}} - -public class SimpleAssignment_24 : SimpleAssignment { - public SimpleAssignment_24(Parser yyq):base(yyq,new IdentDotExpression(((LSLSyntax -)yyq), - ((IDENT)(yyq.StackAt(4).m_value)) - .yytext, - ((IDENT)(yyq.StackAt(2).m_value)) - .yytext), - ((SimpleAssignment)(yyq.StackAt(0).m_value)) - , - ((PERCENT_EQUALS)(yyq.StackAt(1).m_value)) - .yytext){}} - -public class ReturnStatement_1 : ReturnStatement { - public ReturnStatement_1(Parser yyq):base(yyq, - ((Expression)(yyq.StackAt(0).m_value)) - ){}} - -public class ReturnStatement_2 : ReturnStatement { - public ReturnStatement_2(Parser yyq):base(yyq){}} - -public class Constant_1 : Constant { - public Constant_1(Parser yyq):base(yyq,"integer", - ((INTEGER_CONSTANT)(yyq.StackAt(0).m_value)) - .yytext){}} - -public class Constant_2 : Constant { - public Constant_2(Parser yyq):base(yyq,"integer", - ((HEX_INTEGER_CONSTANT)(yyq.StackAt(0).m_value)) - .yytext){}} - -public class Constant_3 : Constant { - public Constant_3(Parser yyq):base(yyq,"float", - ((FLOAT_CONSTANT)(yyq.StackAt(0).m_value)) - .yytext){}} - -public class Constant_4 : Constant { - public Constant_4(Parser yyq):base(yyq,"string", - ((STRING_CONSTANT)(yyq.StackAt(0).m_value)) - .yytext){}} - -public class ListConstant_1 : ListConstant { - public ListConstant_1(Parser yyq):base(yyq, - ((ArgumentList)(yyq.StackAt(1).m_value)) - ){}} - -public class VectorConstant_1 : VectorConstant { - public VectorConstant_1(Parser yyq):base(yyq, - ((Expression)(yyq.StackAt(5).m_value)) - , - ((Expression)(yyq.StackAt(3).m_value)) - , - ((Expression)(yyq.StackAt(1).m_value)) - ){}} - -public class RotationConstant_1 : RotationConstant { - public RotationConstant_1(Parser yyq):base(yyq, - ((Expression)(yyq.StackAt(7).m_value)) - , - ((Expression)(yyq.StackAt(5).m_value)) - , - ((Expression)(yyq.StackAt(3).m_value)) - , - ((Expression)(yyq.StackAt(1).m_value)) - ){}} - -public class ConstantExpression_1 : ConstantExpression { - public ConstantExpression_1(Parser yyq):base(yyq, - ((Constant)(yyq.StackAt(0).m_value)) - ){}} - -public class IdentExpression_1 : IdentExpression { - public IdentExpression_1(Parser yyq):base(yyq, - ((IDENT)(yyq.StackAt(0).m_value)) - .yytext){}} - -public class IdentDotExpression_1 : IdentDotExpression { - public IdentDotExpression_1(Parser yyq):base(yyq, - ((IDENT)(yyq.StackAt(2).m_value)) - .yytext, - ((IDENT)(yyq.StackAt(0).m_value)) - .yytext){}} - -public class IncrementDecrementExpression_1 : IncrementDecrementExpression { - public IncrementDecrementExpression_1(Parser yyq):base(yyq, - ((IDENT)(yyq.StackAt(1).m_value)) - .yytext, - ((INCREMENT)(yyq.StackAt(0).m_value)) - .yytext, true){}} - -public class IncrementDecrementExpression_2 : IncrementDecrementExpression { - public IncrementDecrementExpression_2(Parser yyq):base(yyq, - ((IDENT)(yyq.StackAt(1).m_value)) - .yytext, - ((DECREMENT)(yyq.StackAt(0).m_value)) - .yytext, true){}} - -public class IncrementDecrementExpression_3 : IncrementDecrementExpression { - public IncrementDecrementExpression_3(Parser yyq):base(yyq,new IdentDotExpression(((LSLSyntax -)yyq), - ((IDENT)(yyq.StackAt(3).m_value)) - .yytext, - ((IDENT)(yyq.StackAt(1).m_value)) - .yytext), - ((INCREMENT)(yyq.StackAt(0).m_value)) - .yytext, true){}} - -public class IncrementDecrementExpression_4 : IncrementDecrementExpression { - public IncrementDecrementExpression_4(Parser yyq):base(yyq,new IdentDotExpression(((LSLSyntax -)yyq), - ((IDENT)(yyq.StackAt(3).m_value)) - .yytext, - ((IDENT)(yyq.StackAt(1).m_value)) - .yytext), - ((DECREMENT)(yyq.StackAt(0).m_value)) - .yytext, true){}} - -public class IncrementDecrementExpression_5 : IncrementDecrementExpression { - public IncrementDecrementExpression_5(Parser yyq):base(yyq, - ((IDENT)(yyq.StackAt(0).m_value)) - .yytext, - ((INCREMENT)(yyq.StackAt(1).m_value)) - .yytext, false){}} - -public class IncrementDecrementExpression_6 : IncrementDecrementExpression { - public IncrementDecrementExpression_6(Parser yyq):base(yyq, - ((IDENT)(yyq.StackAt(0).m_value)) - .yytext, - ((DECREMENT)(yyq.StackAt(1).m_value)) - .yytext, false){}} - -public class IncrementDecrementExpression_7 : IncrementDecrementExpression { - public IncrementDecrementExpression_7(Parser yyq):base(yyq,new IdentDotExpression(((LSLSyntax -)yyq), - ((IDENT)(yyq.StackAt(2).m_value)) - .yytext, - ((IDENT)(yyq.StackAt(0).m_value)) - .yytext), - ((INCREMENT)(yyq.StackAt(3).m_value)) - .yytext, false){}} - -public class IncrementDecrementExpression_8 : IncrementDecrementExpression { - public IncrementDecrementExpression_8(Parser yyq):base(yyq,new IdentDotExpression(((LSLSyntax -)yyq), - ((IDENT)(yyq.StackAt(2).m_value)) - .yytext, - ((IDENT)(yyq.StackAt(0).m_value)) - .yytext), - ((DECREMENT)(yyq.StackAt(3).m_value)) - .yytext, false){}} - -public class FunctionCallExpression_1 : FunctionCallExpression { - public FunctionCallExpression_1(Parser yyq):base(yyq, - ((FunctionCall)(yyq.StackAt(0).m_value)) - ){}} - -public class BinaryExpression_1 : BinaryExpression { - public BinaryExpression_1(Parser yyq):base(yyq, - ((Expression)(yyq.StackAt(2).m_value)) - , - ((Expression)(yyq.StackAt(0).m_value)) - , - ((PLUS)(yyq.StackAt(1).m_value)) - .yytext){}} - -public class BinaryExpression_2 : BinaryExpression { - public BinaryExpression_2(Parser yyq):base(yyq, - ((Expression)(yyq.StackAt(2).m_value)) - , - ((Expression)(yyq.StackAt(0).m_value)) - , - ((MINUS)(yyq.StackAt(1).m_value)) - .yytext){}} - -public class BinaryExpression_3 : BinaryExpression { - public BinaryExpression_3(Parser yyq):base(yyq, - ((Expression)(yyq.StackAt(2).m_value)) - , - ((Expression)(yyq.StackAt(0).m_value)) - , - ((STAR)(yyq.StackAt(1).m_value)) - .yytext){}} - -public class BinaryExpression_4 : BinaryExpression { - public BinaryExpression_4(Parser yyq):base(yyq, - ((Expression)(yyq.StackAt(2).m_value)) - , - ((Expression)(yyq.StackAt(0).m_value)) - , - ((SLASH)(yyq.StackAt(1).m_value)) - .yytext){}} - -public class BinaryExpression_5 : BinaryExpression { - public BinaryExpression_5(Parser yyq):base(yyq, - ((Expression)(yyq.StackAt(2).m_value)) - , - ((Expression)(yyq.StackAt(0).m_value)) - , - ((PERCENT)(yyq.StackAt(1).m_value)) - .yytext){}} - -public class BinaryExpression_6 : BinaryExpression { - public BinaryExpression_6(Parser yyq):base(yyq, - ((Expression)(yyq.StackAt(2).m_value)) - , - ((Expression)(yyq.StackAt(0).m_value)) - , - ((AMP)(yyq.StackAt(1).m_value)) - .yytext){}} - -public class BinaryExpression_7 : BinaryExpression { - public BinaryExpression_7(Parser yyq):base(yyq, - ((Expression)(yyq.StackAt(2).m_value)) - , - ((Expression)(yyq.StackAt(0).m_value)) - , - ((STROKE)(yyq.StackAt(1).m_value)) - .yytext){}} - -public class BinaryExpression_8 : BinaryExpression { - public BinaryExpression_8(Parser yyq):base(yyq, - ((Expression)(yyq.StackAt(2).m_value)) - , - ((Expression)(yyq.StackAt(0).m_value)) - , - ((CARET)(yyq.StackAt(1).m_value)) - .yytext){}} - -public class BinaryExpression_9 : BinaryExpression { - public BinaryExpression_9(Parser yyq):base(yyq, - ((Expression)(yyq.StackAt(2).m_value)) - , - ((Expression)(yyq.StackAt(0).m_value)) - , - ((RIGHT_ANGLE)(yyq.StackAt(1).m_value)) - .yytext){}} - -public class BinaryExpression_10 : BinaryExpression { - public BinaryExpression_10(Parser yyq):base(yyq, - ((Expression)(yyq.StackAt(2).m_value)) - , - ((Expression)(yyq.StackAt(0).m_value)) - , - ((LEFT_ANGLE)(yyq.StackAt(1).m_value)) - .yytext){}} - -public class BinaryExpression_11 : BinaryExpression { - public BinaryExpression_11(Parser yyq):base(yyq, - ((Expression)(yyq.StackAt(2).m_value)) - , - ((Expression)(yyq.StackAt(0).m_value)) - , - ((EQUALS_EQUALS)(yyq.StackAt(1).m_value)) - .yytext){}} - -public class BinaryExpression_12 : BinaryExpression { - public BinaryExpression_12(Parser yyq):base(yyq, - ((Expression)(yyq.StackAt(2).m_value)) - , - ((Expression)(yyq.StackAt(0).m_value)) - , - ((EXCLAMATION_EQUALS)(yyq.StackAt(1).m_value)) - .yytext){}} - -public class BinaryExpression_13 : BinaryExpression { - public BinaryExpression_13(Parser yyq):base(yyq, - ((Expression)(yyq.StackAt(2).m_value)) - , - ((Expression)(yyq.StackAt(0).m_value)) - , - ((LESS_EQUALS)(yyq.StackAt(1).m_value)) - .yytext){}} - -public class BinaryExpression_14 : BinaryExpression { - public BinaryExpression_14(Parser yyq):base(yyq, - ((Expression)(yyq.StackAt(2).m_value)) - , - ((Expression)(yyq.StackAt(0).m_value)) - , - ((GREATER_EQUALS)(yyq.StackAt(1).m_value)) - .yytext){}} - -public class BinaryExpression_15 : BinaryExpression { - public BinaryExpression_15(Parser yyq):base(yyq, - ((Expression)(yyq.StackAt(2).m_value)) - , - ((Expression)(yyq.StackAt(0).m_value)) - , - ((AMP_AMP)(yyq.StackAt(1).m_value)) - .yytext){}} - -public class BinaryExpression_16 : BinaryExpression { - public BinaryExpression_16(Parser yyq):base(yyq, - ((Expression)(yyq.StackAt(2).m_value)) - , - ((Expression)(yyq.StackAt(0).m_value)) - , - ((STROKE_STROKE)(yyq.StackAt(1).m_value)) - .yytext){}} - -public class BinaryExpression_17 : BinaryExpression { - public BinaryExpression_17(Parser yyq):base(yyq, - ((Expression)(yyq.StackAt(2).m_value)) - , - ((Expression)(yyq.StackAt(0).m_value)) - , - ((LEFT_SHIFT)(yyq.StackAt(1).m_value)) - .yytext){}} - -public class BinaryExpression_18 : BinaryExpression { - public BinaryExpression_18(Parser yyq):base(yyq, - ((Expression)(yyq.StackAt(2).m_value)) - , - ((Expression)(yyq.StackAt(0).m_value)) - , - ((RIGHT_SHIFT)(yyq.StackAt(1).m_value)) - .yytext){}} - -public class UnaryExpression_1 : UnaryExpression { - public UnaryExpression_1(Parser yyq):base(yyq, - ((EXCLAMATION)(yyq.StackAt(1).m_value)) - .yytext, - ((Expression)(yyq.StackAt(0).m_value)) - ){}} - -public class UnaryExpression_2 : UnaryExpression { - public UnaryExpression_2(Parser yyq):base(yyq, - ((MINUS)(yyq.StackAt(1).m_value)) - .yytext, - ((Expression)(yyq.StackAt(0).m_value)) - ){}} - -public class UnaryExpression_3 : UnaryExpression { - public UnaryExpression_3(Parser yyq):base(yyq, - ((TILDE)(yyq.StackAt(1).m_value)) - .yytext, - ((Expression)(yyq.StackAt(0).m_value)) - ){}} - -public class ParenthesisExpression_1 : ParenthesisExpression { - public ParenthesisExpression_1(Parser yyq):base(yyq, - ((Expression)(yyq.StackAt(1).m_value)) - ){}} - -public class ParenthesisExpression_2 : ParenthesisExpression { - public ParenthesisExpression_2(Parser yyq):base(yyq, - ((SimpleAssignment)(yyq.StackAt(1).m_value)) - ){}} - -public class TypecastExpression_1 : TypecastExpression { - public TypecastExpression_1(Parser yyq):base(yyq, - ((Typename)(yyq.StackAt(2).m_value)) - .yytext, - ((Constant)(yyq.StackAt(0).m_value)) - ){}} - -public class TypecastExpression_2 : TypecastExpression { - public TypecastExpression_2(Parser yyq):base(yyq, - ((Typename)(yyq.StackAt(2).m_value)) - .yytext, new IdentExpression(((LSLSyntax -)yyq), - ((IDENT)(yyq.StackAt(0).m_value)) - .yytext)){}} - -public class TypecastExpression_3 : TypecastExpression { - public TypecastExpression_3(Parser yyq):base(yyq, - ((Typename)(yyq.StackAt(4).m_value)) - .yytext, new IdentDotExpression(((LSLSyntax -)yyq), - ((IDENT)(yyq.StackAt(2).m_value)) - .yytext, - ((IDENT)(yyq.StackAt(0).m_value)) - .yytext)){}} - -public class TypecastExpression_4 : TypecastExpression { - public TypecastExpression_4(Parser yyq):base(yyq, - ((Typename)(yyq.StackAt(3).m_value)) - .yytext, new IncrementDecrementExpression(((LSLSyntax -)yyq), - ((IDENT)(yyq.StackAt(1).m_value)) - .yytext, - ((INCREMENT)(yyq.StackAt(0).m_value)) - .yytext, true)){}} - -public class TypecastExpression_5 : TypecastExpression { - public TypecastExpression_5(Parser yyq):base(yyq, - ((Typename)(yyq.StackAt(5).m_value)) - .yytext, new IncrementDecrementExpression(((LSLSyntax -)yyq), new IdentDotExpression(((LSLSyntax -)yyq), - ((IDENT)(yyq.StackAt(3).m_value)) - .yytext, - ((IDENT)(yyq.StackAt(1).m_value)) - .yytext), - ((INCREMENT)(yyq.StackAt(0).m_value)) - .yytext, true)){}} - -public class TypecastExpression_6 : TypecastExpression { - public TypecastExpression_6(Parser yyq):base(yyq, - ((Typename)(yyq.StackAt(3).m_value)) - .yytext, new IncrementDecrementExpression(((LSLSyntax -)yyq), - ((IDENT)(yyq.StackAt(1).m_value)) - .yytext, - ((DECREMENT)(yyq.StackAt(0).m_value)) - .yytext, true)){}} - -public class TypecastExpression_7 : TypecastExpression { - public TypecastExpression_7(Parser yyq):base(yyq, - ((Typename)(yyq.StackAt(5).m_value)) - .yytext, new IncrementDecrementExpression(((LSLSyntax -)yyq), new IdentDotExpression(((LSLSyntax -)yyq), - ((IDENT)(yyq.StackAt(3).m_value)) - .yytext, - ((IDENT)(yyq.StackAt(1).m_value)) - .yytext), - ((DECREMENT)(yyq.StackAt(0).m_value)) - .yytext, true)){}} - -public class TypecastExpression_8 : TypecastExpression { - public TypecastExpression_8(Parser yyq):base(yyq, - ((Typename)(yyq.StackAt(2).m_value)) - .yytext, - ((FunctionCall)(yyq.StackAt(0).m_value)) - ){}} - -public class TypecastExpression_9 : TypecastExpression { - public TypecastExpression_9(Parser yyq):base(yyq, - ((Typename)(yyq.StackAt(4).m_value)) - .yytext, - ((Expression)(yyq.StackAt(1).m_value)) - ){}} - -public class FunctionCall_1 : FunctionCall { - public FunctionCall_1(Parser yyq):base(yyq, - ((IDENT)(yyq.StackAt(3).m_value)) - .yytext, - ((ArgumentList)(yyq.StackAt(1).m_value)) - ){}} - -public class ArgumentList_1 : ArgumentList { - public ArgumentList_1(Parser yyq):base(yyq, - ((Argument)(yyq.StackAt(0).m_value)) - ){}} - -public class ArgumentList_2 : ArgumentList { - public ArgumentList_2(Parser yyq):base(yyq, - ((ArgumentList)(yyq.StackAt(2).m_value)) - , - ((Argument)(yyq.StackAt(0).m_value)) - ){}} - -public class ExpressionArgument_1 : ExpressionArgument { - public ExpressionArgument_1(Parser yyq):base(yyq, - ((Expression)(yyq.StackAt(0).m_value)) - ){}} - -public class Typename_1 : Typename { - public Typename_1(Parser yyq):base(yyq, - ((INTEGER_TYPE)(yyq.StackAt(0).m_value)) - .yytext){}} - -public class Typename_2 : Typename { - public Typename_2(Parser yyq):base(yyq, - ((FLOAT_TYPE)(yyq.StackAt(0).m_value)) - .yytext){}} - -public class Typename_3 : Typename { - public Typename_3(Parser yyq):base(yyq, - ((STRING_TYPE)(yyq.StackAt(0).m_value)) - .yytext){}} - -public class Typename_4 : Typename { - public Typename_4(Parser yyq):base(yyq, - ((KEY_TYPE)(yyq.StackAt(0).m_value)) - .yytext){}} - -public class Typename_5 : Typename { - public Typename_5(Parser yyq):base(yyq, - ((VECTOR_TYPE)(yyq.StackAt(0).m_value)) - .yytext){}} - -public class Typename_6 : Typename { - public Typename_6(Parser yyq):base(yyq, - ((ROTATION_TYPE)(yyq.StackAt(0).m_value)) - .yytext){}} - -public class Typename_7 : Typename { - public Typename_7(Parser yyq):base(yyq, - ((LIST_TYPE)(yyq.StackAt(0).m_value)) - .yytext){}} - -public class Event_1 : Event { - public Event_1(Parser yyq):base(yyq, - ((AT_ROT_TARGET_EVENT)(yyq.StackAt(0).m_value)) - .yytext){}} - -public class Event_2 : Event { - public Event_2(Parser yyq):base(yyq, - ((AT_TARGET_EVENT)(yyq.StackAt(0).m_value)) - .yytext){}} - -public class Event_3 : Event { - public Event_3(Parser yyq):base(yyq, - ((ATTACH_EVENT)(yyq.StackAt(0).m_value)) - .yytext){}} - -public class Event_4 : Event { - public Event_4(Parser yyq):base(yyq, - ((CHANGED_EVENT)(yyq.StackAt(0).m_value)) - .yytext){}} - -public class Event_5 : Event { - public Event_5(Parser yyq):base(yyq, - ((COLLISION_EVENT)(yyq.StackAt(0).m_value)) - .yytext){}} - -public class Event_6 : Event { - public Event_6(Parser yyq):base(yyq, - ((COLLISION_END_EVENT)(yyq.StackAt(0).m_value)) - .yytext){}} - -public class Event_7 : Event { - public Event_7(Parser yyq):base(yyq, - ((COLLISION_START_EVENT)(yyq.StackAt(0).m_value)) - .yytext){}} - -public class Event_8 : Event { - public Event_8(Parser yyq):base(yyq, - ((CONTROL_EVENT)(yyq.StackAt(0).m_value)) - .yytext){}} - -public class Event_9 : Event { - public Event_9(Parser yyq):base(yyq, - ((DATASERVER_EVENT)(yyq.StackAt(0).m_value)) - .yytext){}} - -public class Event_10 : Event { - public Event_10(Parser yyq):base(yyq, - ((EMAIL_EVENT)(yyq.StackAt(0).m_value)) - .yytext){}} - -public class Event_11 : Event { - public Event_11(Parser yyq):base(yyq, - ((HTTP_RESPONSE_EVENT)(yyq.StackAt(0).m_value)) - .yytext){}} - -public class Event_12 : Event { - public Event_12(Parser yyq):base(yyq, - ((LAND_COLLISION_EVENT)(yyq.StackAt(0).m_value)) - .yytext){}} - -public class Event_13 : Event { - public Event_13(Parser yyq):base(yyq, - ((LAND_COLLISION_END_EVENT)(yyq.StackAt(0).m_value)) - .yytext){}} - -public class Event_14 : Event { - public Event_14(Parser yyq):base(yyq, - ((LAND_COLLISION_START_EVENT)(yyq.StackAt(0).m_value)) - .yytext){}} - -public class Event_15 : Event { - public Event_15(Parser yyq):base(yyq, - ((LINK_MESSAGE_EVENT)(yyq.StackAt(0).m_value)) - .yytext){}} - -public class Event_16 : Event { - public Event_16(Parser yyq):base(yyq, - ((LISTEN_EVENT)(yyq.StackAt(0).m_value)) - .yytext){}} - -public class Event_17 : Event { - public Event_17(Parser yyq):base(yyq, - ((MONEY_EVENT)(yyq.StackAt(0).m_value)) - .yytext){}} - -public class Event_18 : Event { - public Event_18(Parser yyq):base(yyq, - ((MOVING_END_EVENT)(yyq.StackAt(0).m_value)) - .yytext){}} - -public class Event_19 : Event { - public Event_19(Parser yyq):base(yyq, - ((MOVING_START_EVENT)(yyq.StackAt(0).m_value)) - .yytext){}} - -public class Event_20 : Event { - public Event_20(Parser yyq):base(yyq, - ((NO_SENSOR_EVENT)(yyq.StackAt(0).m_value)) - .yytext){}} - -public class Event_21 : Event { - public Event_21(Parser yyq):base(yyq, - ((NOT_AT_ROT_TARGET_EVENT)(yyq.StackAt(0).m_value)) - .yytext){}} - -public class Event_22 : Event { - public Event_22(Parser yyq):base(yyq, - ((NOT_AT_TARGET_EVENT)(yyq.StackAt(0).m_value)) - .yytext){}} - -public class Event_23 : Event { - public Event_23(Parser yyq):base(yyq, - ((OBJECT_REZ_EVENT)(yyq.StackAt(0).m_value)) - .yytext){}} - -public class Event_24 : Event { - public Event_24(Parser yyq):base(yyq, - ((ON_REZ_EVENT)(yyq.StackAt(0).m_value)) - .yytext){}} - -public class Event_25 : Event { - public Event_25(Parser yyq):base(yyq, - ((REMOTE_DATA_EVENT)(yyq.StackAt(0).m_value)) - .yytext){}} - -public class Event_26 : Event { - public Event_26(Parser yyq):base(yyq, - ((RUN_TIME_PERMISSIONS_EVENT)(yyq.StackAt(0).m_value)) - .yytext){}} - -public class Event_27 : Event { - public Event_27(Parser yyq):base(yyq, - ((SENSOR_EVENT)(yyq.StackAt(0).m_value)) - .yytext){}} - -public class Event_28 : Event { - public Event_28(Parser yyq):base(yyq, - ((STATE_ENTRY_EVENT)(yyq.StackAt(0).m_value)) - .yytext){}} - -public class Event_29 : Event { - public Event_29(Parser yyq):base(yyq, - ((STATE_EXIT_EVENT)(yyq.StackAt(0).m_value)) - .yytext){}} - -public class Event_30 : Event { - public Event_30(Parser yyq):base(yyq, - ((TIMER_EVENT)(yyq.StackAt(0).m_value)) - .yytext){}} - -public class Event_31 : Event { - public Event_31(Parser yyq):base(yyq, - ((TOUCH_EVENT)(yyq.StackAt(0).m_value)) - .yytext){}} - -public class Event_32 : Event { - public Event_32(Parser yyq):base(yyq, - ((TOUCH_END_EVENT)(yyq.StackAt(0).m_value)) - .yytext){}} - -public class Event_33 : Event { - public Event_33(Parser yyq):base(yyq, - ((TOUCH_START_EVENT)(yyq.StackAt(0).m_value)) - .yytext){}} -public class yyLSLSyntax -: YyParser { - public override object Action(Parser yyq,SYMBOL yysym, int yyact) { - switch(yyact) { - case -1: break; //// keep compiler happy -} return null; } - -public class ArgumentDeclarationList_3 : ArgumentDeclarationList { - public ArgumentDeclarationList_3(Parser yyq):base(yyq){}} - -public class ArgumentList_3 : ArgumentList { - public ArgumentList_3(Parser yyq):base(yyq){}} - -public class ArgumentDeclarationList_4 : ArgumentDeclarationList { - public ArgumentDeclarationList_4(Parser yyq):base(yyq){}} - -public class ArgumentDeclarationList_5 : ArgumentDeclarationList { - public ArgumentDeclarationList_5(Parser yyq):base(yyq){}} - -public class Statement_13 : Statement { - public Statement_13(Parser yyq):base(yyq){}} - -public class ArgumentList_4 : ArgumentList { - public ArgumentList_4(Parser yyq):base(yyq){}} -public yyLSLSyntax -():base() { arr = new int[] { -101,4,6,52,0, -46,0,53,0,102, -20,103,4,28,76, -0,83,0,76,0, -80,0,114,0,111, -0,103,0,114,0, -97,0,109,0,82, -0,111,0,111,0, -116,0,1,95,1, -2,104,18,1,2609, -102,2,0,105,5, -312,1,0,106,18, -1,0,0,2,0, -1,1,107,18,1, -1,108,20,109,4, -18,76,0,73,0, -83,0,84,0,95, -0,84,0,89,0, -80,0,69,0,1, -57,1,1,2,0, -1,2,110,18,1, -2,111,20,112,4, -26,82,0,79,0, -84,0,65,0,84, -0,73,0,79,0, -78,0,95,0,84, -0,89,0,80,0, -69,0,1,56,1, -1,2,0,1,3, -113,18,1,3,114, -20,115,4,22,86, -0,69,0,67,0, -84,0,79,0,82, -0,95,0,84,0, -89,0,80,0,69, -0,1,55,1,1, -2,0,1,4,116, -18,1,4,117,20, -118,4,16,75,0, -69,0,89,0,95, -0,84,0,89,0, -80,0,69,0,1, -54,1,1,2,0, -1,5,119,18,1, -5,120,20,121,4, -22,83,0,84,0, -82,0,73,0,78, -0,71,0,95,0, -84,0,89,0,80, -0,69,0,1,53, -1,1,2,0,1, -6,122,18,1,6, -123,20,124,4,20, -70,0,76,0,79, -0,65,0,84,0, -95,0,84,0,89, -0,80,0,69,0, -1,52,1,1,2, -0,1,7,125,18, -1,7,126,20,127, -4,24,73,0,78, -0,84,0,69,0, -71,0,69,0,82, -0,95,0,84,0, -89,0,80,0,69, -0,1,51,1,1, -2,0,1,8,128, -18,1,8,129,20, -130,4,16,84,0, -121,0,112,0,101, -0,110,0,97,0, -109,0,101,0,1, -105,1,2,2,0, -1,9,131,18,1, -9,132,20,133,4, -10,73,0,68,0, -69,0,78,0,84, -0,1,91,1,1, -2,0,1,10,134, -18,1,10,135,20, -136,4,20,76,0, -69,0,70,0,84, -0,95,0,80,0, -65,0,82,0,69, -0,78,0,1,16, -1,1,2,0,1, -18,137,18,1,18, -129,2,0,1,19, -138,18,1,19,132, -2,0,1,20,139, -18,1,20,140,20, -141,4,46,65,0, -114,0,103,0,117, -0,109,0,101,0, -110,0,116,0,68, -0,101,0,99,0, -108,0,97,0,114, -0,97,0,116,0, -105,0,111,0,110, -0,76,0,105,0, -115,0,116,0,1, -103,1,2,2,0, -1,21,142,18,1, -21,143,20,144,4, -10,67,0,79,0, -77,0,77,0,65, -0,1,14,1,1, -2,0,1,1694,145, -18,1,1694,146,20, -147,4,32,70,0, -111,0,114,0,76, -0,111,0,111,0, -112,0,83,0,116, -0,97,0,116,0, -101,0,109,0,101, -0,110,0,116,0, -1,120,1,2,2, -0,1,1695,148,18, -1,1695,143,2,0, -1,30,149,18,1, -30,150,20,151,4, -22,68,0,101,0, -99,0,108,0,97, -0,114,0,97,0, -116,0,105,0,111, -0,110,0,1,104, -1,2,2,0,1, -31,152,18,1,31, -153,20,154,4,22, -82,0,73,0,71, -0,72,0,84,0, -95,0,80,0,65, -0,82,0,69,0, -78,0,1,17,1, -1,2,0,1,32, -155,18,1,32,156, -20,157,4,20,76, -0,69,0,70,0, -84,0,95,0,66, -0,82,0,65,0, -67,0,69,0,1, -12,1,1,2,0, -1,1114,158,18,1, -1114,132,2,0,1, -1152,159,18,1,1152, -160,20,161,4,32, -83,0,105,0,109, -0,112,0,108,0, -101,0,65,0,115, -0,115,0,105,0, -103,0,110,0,109, -0,101,0,110,0, -116,0,1,111,1, -2,2,0,1,1117, -162,18,1,1117,163, -20,164,4,28,80, -0,69,0,82,0, -67,0,69,0,78, -0,84,0,95,0, -69,0,81,0,85, -0,65,0,76,0, -83,0,1,10,1, -1,2,0,1,40, -165,18,1,40,132, -2,0,1,41,166, -18,1,41,135,2, -0,1,42,167,18, -1,42,168,20,169, -4,20,69,0,120, -0,112,0,114,0, -101,0,115,0,115, -0,105,0,111,0, -110,0,1,129,1, -2,2,0,1,43, -170,18,1,43,171, -20,172,4,22,82, -0,73,0,71,0, -72,0,84,0,95, -0,83,0,72,0, -73,0,70,0,84, -0,1,41,1,1, -2,0,1,44,173, -18,1,44,132,2, -0,1,1159,174,18, -1,1159,168,2,0, -1,46,175,18,1, -46,176,20,177,4, -12,80,0,69,0, -82,0,73,0,79, -0,68,0,1,24, -1,1,2,0,1, -47,178,18,1,47, -132,2,0,1,48, -179,18,1,48,180, -20,181,4,18,68, -0,69,0,67,0, -82,0,69,0,77, -0,69,0,78,0, -84,0,1,5,1, -1,2,0,1,49, -182,18,1,49,183, -20,184,4,18,73, -0,78,0,67,0, -82,0,69,0,77, -0,69,0,78,0, -84,0,1,4,1, -1,2,0,1,50, -185,18,1,50,180, -2,0,1,51,186, -18,1,51,183,2, -0,1,52,187,18, -1,52,135,2,0, -1,1730,188,18,1, -1730,160,2,0,1, -1731,189,18,1,1731, -190,20,191,4,18, -83,0,69,0,77, -0,73,0,67,0, -79,0,76,0,79, -0,78,0,1,11, -1,1,2,0,1, -61,192,18,1,61, -129,2,0,1,62, -193,18,1,62,153, -2,0,1,63,194, -18,1,63,132,2, -0,1,65,195,18, -1,65,176,2,0, -1,66,196,18,1, -66,132,2,0,1, -67,197,18,1,67, -180,2,0,1,68, -198,18,1,68,183, -2,0,1,69,199, -18,1,69,180,2, -0,1,70,200,18, -1,70,183,2,0, -1,71,201,18,1, -71,135,2,0,1, -73,202,18,1,73, -168,2,0,1,74, -203,18,1,74,153, -2,0,1,1189,204, -18,1,1189,205,20, -206,4,22,83,0, -84,0,65,0,82, -0,95,0,69,0, -81,0,85,0,65, -0,76,0,83,0, -1,8,1,1,2, -0,1,76,207,18, -1,76,208,20,209, -4,20,76,0,69, -0,70,0,84,0, -95,0,83,0,72, -0,73,0,70,0, -84,0,1,40,1, -1,2,0,1,1153, -210,18,1,1153,211, -20,212,4,24,83, -0,76,0,65,0, -83,0,72,0,95, -0,69,0,81,0, -85,0,65,0,76, -0,83,0,1,9, -1,1,2,0,1, -79,213,18,1,79, -214,20,215,4,10, -84,0,73,0,76, -0,68,0,69,0, -1,36,1,1,2, -0,1,1195,216,18, -1,1195,168,2,0, -1,82,217,18,1, -82,168,2,0,1, -1123,218,18,1,1123, -168,2,0,1,85, -219,18,1,85,220, -20,221,4,26,83, -0,84,0,82,0, -79,0,75,0,69, -0,95,0,83,0, -84,0,82,0,79, -0,75,0,69,0, -1,39,1,1,2, -0,1,2547,222,18, -1,2547,223,20,224, -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,107,1,2, -2,0,1,89,225, -18,1,89,226,20, -227,4,10,77,0, -73,0,78,0,85, -0,83,0,1,19, -1,1,2,0,1, -93,228,18,1,93, -168,2,0,1,97, -229,18,1,97,230, -20,231,4,14,65, -0,77,0,80,0, -95,0,65,0,77, -0,80,0,1,38, -1,1,2,0,1, -102,232,18,1,102, -233,20,234,4,22, -69,0,88,0,67, -0,76,0,65,0, -77,0,65,0,84, -0,73,0,79,0, -78,0,1,37,1, -1,2,0,1,1775, -235,18,1,1775,153, -2,0,1,107,236, -18,1,107,168,2, -0,1,2196,237,18, -1,2196,160,2,0, -1,1224,238,18,1, -1224,160,2,0,1, -1225,239,18,1,1225, -240,20,241,4,24, -77,0,73,0,78, -0,85,0,83,0, -95,0,69,0,81, -0,85,0,65,0, -76,0,83,0,1, -7,1,1,2,0, -1,112,242,18,1, -112,243,20,244,4, -28,71,0,82,0, -69,0,65,0,84, -0,69,0,82,0, -95,0,69,0,81, -0,85,0,65,0, -76,0,83,0,1, -32,1,1,2,0, -1,1188,245,18,1, -1188,160,2,0,1, -1231,246,18,1,1231, -168,2,0,1,118, -247,18,1,118,168, -2,0,1,1737,248, -18,1,1737,168,2, -0,1,124,249,18, -1,124,250,20,251, -4,22,76,0,69, -0,83,0,83,0, -95,0,69,0,81, -0,85,0,65,0, -76,0,83,0,1, -31,1,1,2,0, -1,2280,252,18,1, -2280,160,2,0,1, -2354,253,18,1,2354, -254,20,255,4,18, -83,0,116,0,97, -0,116,0,101,0, -109,0,101,0,110, -0,116,0,1,109, -1,2,2,0,1, -2355,256,18,1,2355, -257,20,258,4,22, -82,0,73,0,71, -0,72,0,84,0, -95,0,66,0,82, -0,65,0,67,0, -69,0,1,13,1, -1,2,0,1,130, -259,18,1,130,168, -2,0,1,1802,260, -18,1,1802,254,2, -0,1,2360,261,18, -1,2360,257,2,0, -1,1804,262,18,1, -1804,263,20,264,4, -4,68,0,79,0, -1,44,1,1,2, -0,1,2362,265,18, -1,2362,223,2,0, -1,2363,266,18,1, -2363,150,2,0,1, -2364,267,18,1,2364, -268,20,269,4,10, -83,0,84,0,65, -0,84,0,69,0, -1,48,1,1,2, -0,1,137,270,18, -1,137,271,20,272, -4,36,69,0,88, -0,67,0,76,0, -65,0,77,0,65, -0,84,0,73,0, -79,0,78,0,95, -0,69,0,81,0, -85,0,65,0,76, -0,83,0,1,30, -1,1,2,0,1, -2366,273,18,1,2366, -156,2,0,1,2367, -274,18,1,2367,275, -20,276,4,34,84, -0,79,0,85,0, -67,0,72,0,95, -0,83,0,84,0, -65,0,82,0,84, -0,95,0,69,0, -86,0,69,0,78, -0,84,0,1,89, -1,1,2,0,1, -1701,277,18,1,1701, -168,2,0,1,1756, -278,18,1,1756,190, -2,0,1,2370,279, -18,1,2370,280,20, -281,4,22,84,0, -73,0,77,0,69, -0,82,0,95,0, -69,0,86,0,69, -0,78,0,84,0, -1,87,1,1,2, -0,1,143,282,18, -1,143,168,2,0, -1,2372,283,18,1, -2372,284,20,285,4, -34,83,0,84,0, -65,0,84,0,69, -0,95,0,69,0, -78,0,84,0,82, -0,89,0,95,0, -69,0,86,0,69, -0,78,0,84,0, -1,85,1,1,2, -0,1,2373,286,18, -1,2373,287,20,288, -4,24,83,0,69, -0,78,0,83,0, -79,0,82,0,95, -0,69,0,86,0, -69,0,78,0,84, -0,1,84,1,1, -2,0,1,1260,289, -18,1,1260,160,2, -0,1,1261,290,18, -1,1261,291,20,292, -4,22,80,0,76, -0,85,0,83,0, -95,0,69,0,81, -0,85,0,65,0, -76,0,83,0,1, -6,1,1,2,0, -1,2376,293,18,1, -2376,294,20,295,4, -24,79,0,78,0, -95,0,82,0,69, -0,90,0,95,0, -69,0,86,0,69, -0,78,0,84,0, -1,81,1,1,2, -0,1,2377,296,18, -1,2377,297,20,298, -4,32,79,0,66, -0,74,0,69,0, -67,0,84,0,95, -0,82,0,69,0, -90,0,95,0,69, -0,86,0,69,0, -78,0,84,0,1, -80,1,1,2,0, -1,2378,299,18,1, -2378,300,20,301,4, -38,78,0,79,0, -84,0,95,0,65, -0,84,0,95,0, -84,0,65,0,82, -0,71,0,69,0, -84,0,95,0,69, -0,86,0,69,0, -78,0,84,0,1, -79,1,1,2,0, -1,151,302,18,1, -151,303,20,304,4, -26,69,0,81,0, -85,0,65,0,76, -0,83,0,95,0, -69,0,81,0,85, -0,65,0,76,0, -83,0,1,29,1, -1,2,0,1,2380, -305,18,1,2380,306, -20,307,4,30,78, -0,79,0,95,0, -83,0,69,0,78, -0,83,0,79,0, -82,0,95,0,69, -0,86,0,69,0, -78,0,84,0,1, -77,1,1,2,0, -1,1267,308,18,1, -1267,168,2,0,1, -2382,309,18,1,2382, -310,20,311,4,32, -77,0,79,0,86, -0,73,0,78,0, -71,0,95,0,69, -0,78,0,68,0, -95,0,69,0,86, -0,69,0,78,0, -84,0,1,75,1, -1,2,0,1,2309, -312,18,1,2309,313, -20,314,4,26,83, -0,116,0,97,0, -116,0,101,0,109, -0,101,0,110,0, -116,0,76,0,105, -0,115,0,116,0, -1,108,1,2,2, -0,1,2384,315,18, -1,2384,316,20,317, -4,24,76,0,73, -0,83,0,84,0, -69,0,78,0,95, -0,69,0,86,0, -69,0,78,0,84, -0,1,73,1,1, -2,0,1,157,318, -18,1,157,168,2, -0,1,2386,319,18, -1,2386,320,20,321, -4,52,76,0,65, -0,78,0,68,0, -95,0,67,0,79, -0,76,0,76,0, -73,0,83,0,73, -0,79,0,78,0, -95,0,83,0,84, -0,65,0,82,0, -84,0,95,0,69, -0,86,0,69,0, -78,0,84,0,1, -71,1,1,2,0, -1,1773,322,18,1, -1773,146,2,0,1, -2388,323,18,1,2388, -324,20,325,4,40, -76,0,65,0,78, -0,68,0,95,0, -67,0,79,0,76, -0,76,0,73,0, -83,0,73,0,79, -0,78,0,95,0, -69,0,86,0,69, -0,78,0,84,0, -1,69,1,1,2, -0,1,1832,326,18, -1,1832,254,2,0, -1,1833,327,18,1, -1833,328,20,329,4, -10,87,0,72,0, -73,0,76,0,69, -0,1,45,1,1, -2,0,1,1834,330, -18,1,1834,135,2, -0,1,2392,331,18, -1,2392,332,20,333, -4,26,67,0,79, -0,78,0,84,0, -82,0,79,0,76, -0,95,0,69,0, -86,0,69,0,78, -0,84,0,1,65, -1,1,2,0,1, -2393,334,18,1,2393, -335,20,336,4,42, -67,0,79,0,76, -0,76,0,73,0, -83,0,73,0,79, -0,78,0,95,0, -83,0,84,0,65, -0,82,0,84,0, -95,0,69,0,86, -0,69,0,78,0, -84,0,1,64,1, -1,2,0,1,166, -337,18,1,166,338, -20,339,4,20,76, -0,69,0,70,0, -84,0,95,0,65, -0,78,0,71,0, -76,0,69,0,1, -25,1,1,2,0, -1,2395,340,18,1, -2395,341,20,342,4, -30,67,0,79,0, -76,0,76,0,73, -0,83,0,73,0, -79,0,78,0,95, -0,69,0,86,0, -69,0,78,0,84, -0,1,62,1,1, -2,0,1,2396,343, -18,1,2396,344,20, -345,4,26,67,0, -72,0,65,0,78, -0,71,0,69,0, -68,0,95,0,69, -0,86,0,69,0, -78,0,84,0,1, -61,1,1,2,0, -1,1840,346,18,1, -1840,168,2,0,1, -2398,347,18,1,2398, -348,20,349,4,30, -65,0,84,0,95, -0,84,0,65,0, -82,0,71,0,69, -0,84,0,95,0, -69,0,86,0,69, -0,78,0,84,0, -1,59,1,1,2, -0,1,2399,350,18, -1,2399,351,20,352, -4,38,65,0,84, -0,95,0,82,0, -79,0,84,0,95, -0,84,0,65,0, -82,0,71,0,69, -0,84,0,95,0, -69,0,86,0,69, -0,78,0,84,0, -1,58,1,1,2, -0,1,172,353,18, -1,172,168,2,0, -1,2401,354,18,1, -2401,135,2,0,1, -2605,355,18,1,2605, -356,20,357,4,48, -71,0,108,0,111, -0,98,0,97,0, -108,0,70,0,117, -0,110,0,99,0, -116,0,105,0,111, -0,110,0,68,0, -101,0,102,0,105, -0,110,0,105,0, -116,0,105,0,111, -0,110,0,1,98, -1,2,2,0,1, -1296,358,18,1,1296, -160,2,0,1,1297, -359,18,1,1297,360, -20,361,4,12,69, -0,81,0,85,0, -65,0,76,0,83, -0,1,15,1,1, -2,0,1,2412,362, -18,1,2412,153,2, -0,1,2414,363,18, -1,2414,223,2,0, -1,1859,364,18,1, -1859,153,2,0,1, -1860,365,18,1,1860, -190,2,0,1,188, -366,18,1,188,168, -2,0,1,182,367, -18,1,182,368,20, -369,4,22,82,0, -73,0,71,0,72, -0,84,0,95,0, -65,0,78,0,71, -0,76,0,69,0, -1,26,1,1,2, -0,1,199,370,18, -1,199,371,20,372, -4,10,67,0,65, -0,82,0,69,0, -84,0,1,35,1, -1,2,0,1,1871, -373,18,1,1871,160, -2,0,1,1872,374, -18,1,1872,153,2, -0,1,1873,375,18, -1,1873,190,2,0, -1,1875,376,18,1, -1875,328,2,0,1, -205,377,18,1,205, -168,2,0,1,1882, -378,18,1,1882,168, -2,0,1,2365,379, -18,1,2365,132,2, -0,1,2368,380,18, -1,2368,381,20,382, -4,30,84,0,79, -0,85,0,67,0, -72,0,95,0,69, -0,78,0,68,0, -95,0,69,0,86, -0,69,0,78,0, -84,0,1,90,1, -1,2,0,1,217, -383,18,1,217,384, -20,385,4,12,83, -0,84,0,82,0, -79,0,75,0,69, -0,1,34,1,1, -2,0,1,1332,386, -18,1,1332,160,2, -0,1,2371,387,18, -1,2371,388,20,389, -4,32,83,0,84, -0,65,0,84,0, -69,0,95,0,69, -0,88,0,73,0, -84,0,95,0,69, -0,86,0,69,0, -78,0,84,0,1, -86,1,1,2,0, -1,1335,390,18,1, -1335,163,2,0,1, -2374,391,18,1,2374, -392,20,393,4,52, -82,0,85,0,78, -0,95,0,84,0, -73,0,77,0,69, -0,95,0,80,0, -69,0,82,0,77, -0,73,0,83,0, -83,0,73,0,79, -0,78,0,83,0, -95,0,69,0,86, -0,69,0,78,0, -84,0,1,83,1, -1,2,0,1,223, -394,18,1,223,168, -2,0,1,2452,395, -18,1,2452,257,2, -0,1,2453,396,18, -1,2453,397,20,398, -4,20,83,0,116, -0,97,0,116,0, -101,0,69,0,118, -0,101,0,110,0, -116,0,1,102,1, -2,2,0,1,2454, -399,18,1,2454,400, -20,401,4,26,68, -0,69,0,70,0, -65,0,85,0,76, -0,84,0,95,0, -83,0,84,0,65, -0,84,0,69,0, -1,47,1,1,2, -0,1,1341,402,18, -1,1341,168,2,0, -1,2381,403,18,1, -2381,404,20,405,4, -36,77,0,79,0, -86,0,73,0,78, -0,71,0,95,0, -83,0,84,0,65, -0,82,0,84,0, -95,0,69,0,86, -0,69,0,78,0, -84,0,1,76,1, -1,2,0,1,1901, -406,18,1,1901,153, -2,0,1,1303,407, -18,1,1303,168,2, -0,1,2385,408,18, -1,2385,409,20,410, -4,36,76,0,73, -0,78,0,75,0, -95,0,77,0,69, -0,83,0,83,0, -65,0,71,0,69, -0,95,0,69,0, -86,0,69,0,78, -0,84,0,1,72, -1,1,2,0,1, -2387,411,18,1,2387, -412,20,413,4,48, -76,0,65,0,78, -0,68,0,95,0, -67,0,79,0,76, -0,76,0,73,0, -83,0,73,0,79, -0,78,0,95,0, -69,0,78,0,68, -0,95,0,69,0, -86,0,69,0,78, -0,84,0,1,70, -1,1,2,0,1, -236,414,18,1,236, -415,20,416,4,6, -65,0,77,0,80, -0,1,33,1,1, -2,0,1,2389,417, -18,1,2389,418,20, -419,4,38,72,0, -84,0,84,0,80, -0,95,0,82,0, -69,0,83,0,80, -0,79,0,78,0, -83,0,69,0,95, -0,69,0,86,0, -69,0,78,0,84, -0,1,68,1,1, -2,0,1,2390,420, -18,1,2390,421,20, -422,4,22,69,0, -77,0,65,0,73, -0,76,0,95,0, -69,0,86,0,69, -0,78,0,84,0, -1,67,1,1,2, -0,1,2391,423,18, -1,2391,424,20,425, -4,32,68,0,65, -0,84,0,65,0, -83,0,69,0,82, -0,86,0,69,0, -82,0,95,0,69, -0,86,0,69,0, -78,0,84,0,1, -66,1,1,2,0, -1,242,426,18,1, -242,168,2,0,1, -2397,427,18,1,2397, -428,20,429,4,24, -65,0,84,0,84, -0,65,0,67,0, -72,0,95,0,69, -0,86,0,69,0, -78,0,84,0,1, -60,1,1,2,0, -1,2400,430,18,1, -2400,431,20,432,4, -10,69,0,118,0, -101,0,110,0,116, -0,1,106,1,2, -2,0,1,256,433, -18,1,256,434,20, -435,4,14,80,0, -69,0,82,0,67, -0,69,0,78,0, -84,0,1,22,1, -1,2,0,1,1371, -436,18,1,1371,211, -2,0,1,2410,437, -18,1,2410,140,2, -0,1,1931,438,18, -1,1931,254,2,0, -1,1932,439,18,1, -1932,440,20,441,4, -4,73,0,70,0, -1,42,1,1,2, -0,1,262,442,18, -1,262,168,2,0, -1,1377,443,18,1, -1377,168,2,0,1, -1876,444,18,1,1876, -135,2,0,1,1939, -445,18,1,1939,168, -2,0,1,827,446, -18,1,827,168,2, -0,1,277,447,18, -1,277,448,20,449, -4,10,83,0,76, -0,65,0,83,0, -72,0,1,21,1, -1,2,0,1,2358, -450,18,1,2358,254, -2,0,1,283,451, -18,1,283,168,2, -0,1,1958,452,18, -1,1958,153,2,0, -1,1406,453,18,1, -1406,160,2,0,1, -1407,454,18,1,1407, -205,2,0,1,2526, -455,18,1,2526,257, -2,0,1,299,456, -18,1,299,457,20, -458,4,8,83,0, -84,0,65,0,82, -0,1,20,1,1, -2,0,1,1370,459, -18,1,1370,160,2, -0,1,2451,460,18, -1,2451,397,2,0, -1,2379,461,18,1, -2379,462,20,463,4, -46,78,0,79,0, -84,0,95,0,65, -0,84,0,95,0, -82,0,79,0,84, -0,95,0,84,0, -65,0,82,0,71, -0,69,0,84,0, -95,0,69,0,86, -0,69,0,78,0, -84,0,1,78,1, -1,2,0,1,2532, -464,18,1,2532,465, -20,466,4,10,83, -0,116,0,97,0, -116,0,101,0,1, -100,1,2,2,0, -1,305,467,18,1, -305,168,2,0,1, -2534,468,18,1,2534, -135,2,0,1,2383, -469,18,1,2383,470, -20,471,4,22,77, -0,79,0,78,0, -69,0,89,0,95, -0,69,0,86,0, -69,0,78,0,84, -0,1,74,1,1, -2,0,1,2528,472, -18,1,2528,473,20, -474,4,12,83,0, -116,0,97,0,116, -0,101,0,115,0, -1,99,1,2,2, -0,1,2543,475,18, -1,2543,140,2,0, -1,2545,476,18,1, -2545,153,2,0,1, -1989,477,18,1,1989, -254,2,0,1,1990, -478,18,1,1990,479, -20,480,4,8,69, -0,76,0,83,0, -69,0,1,43,1, -1,2,0,1,2607, -481,18,1,2607,356, -2,0,1,2549,482, -18,1,2549,150,2, -0,1,322,483,18, -1,322,226,2,0, -1,1933,484,18,1, -1933,135,2,0,1, -883,485,18,1,883, -168,2,0,1,328, -486,18,1,328,168, -2,0,1,1443,487, -18,1,1443,240,2, -0,1,1449,488,18, -1,1449,168,2,0, -1,2490,489,18,1, -2490,490,20,491,4, -18,83,0,116,0, -97,0,116,0,101, -0,66,0,111,0, -100,0,121,0,1, -101,1,2,2,0, -1,2416,492,18,1, -2416,490,2,0,1, -1413,493,18,1,1413, -168,2,0,1,346, -494,18,1,346,495, -20,496,4,8,80, -0,76,0,85,0, -83,0,1,18,1, -1,2,0,1,2575, -497,18,1,2575,190, -2,0,1,2021,498, -18,1,2021,254,2, -0,1,2022,499,18, -1,2022,268,2,0, -1,352,500,18,1, -352,168,2,0,1, -2024,501,18,1,2024, -132,2,0,1,2025, -502,18,1,2025,503, -20,504,4,8,74, -0,85,0,77,0, -80,0,1,49,1, -1,2,0,1,2026, -505,18,1,2026,132, -2,0,1,2027,506, -18,1,2027,507,20, -508,4,4,65,0, -84,0,1,23,1, -1,2,0,1,2028, -509,18,1,2028,132, -2,0,1,2029,510, -18,1,2029,223,2, -0,1,2030,511,18, -1,2030,512,20,513, -4,14,70,0,111, -0,114,0,76,0, -111,0,111,0,112, -0,1,119,1,2, -2,0,1,2031,514, -18,1,2031,515,20, -516,4,32,68,0, -111,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,118,1,2,2, -0,1,2032,517,18, -1,2032,518,20,519, -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,117,1,2,2, -0,1,2033,520,18, -1,2033,521,20,522, -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, -116,1,2,2,0, -1,2034,523,18,1, -2034,524,20,525,4, -22,83,0,116,0, -97,0,116,0,101, -0,67,0,104,0, -97,0,110,0,103, -0,101,0,1,115, -1,2,2,0,1, -1478,526,18,1,1478, -160,2,0,1,1479, -527,18,1,1479,291, -2,0,1,2037,528, -18,1,2037,190,2, -0,1,2038,529,18, -1,2038,530,20,531, -4,18,74,0,117, -0,109,0,112,0, -76,0,97,0,98, -0,101,0,108,0, -1,113,1,2,2, -0,1,2039,532,18, -1,2039,190,2,0, -1,2040,533,18,1, -2040,534,20,535,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,112,1,2, -2,0,1,2041,536, -18,1,2041,190,2, -0,1,1485,537,18, -1,1485,168,2,0, -1,372,538,18,1, -372,180,2,0,1, -373,539,18,1,373, -132,2,0,1,374, -540,18,1,374,176, -2,0,1,375,541, -18,1,375,132,2, -0,1,376,542,18, -1,376,183,2,0, -1,377,543,18,1, -377,132,2,0,1, -378,544,18,1,378, -176,2,0,1,379, -545,18,1,379,132, -2,0,1,380,546, -18,1,380,547,20, -548,4,16,67,0, -111,0,110,0,115, -0,116,0,97,0, -110,0,116,0,1, -125,1,2,2,0, -1,381,549,18,1, -381,338,2,0,1, -2610,550,18,1,2610, -551,23,552,4,6, -69,0,79,0,70, -0,1,2,1,6, -2,0,1,2455,553, -18,1,2455,156,2, -0,1,371,554,18, -1,371,555,20,556, -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,121,1,2, -2,0,1,942,557, -18,1,942,168,2, -0,1,2533,558,18, -1,2533,132,2,0, -1,387,559,18,1, -387,168,2,0,1, -2394,560,18,1,2394, -561,20,562,4,38, -67,0,79,0,76, -0,76,0,73,0, -83,0,73,0,79, -0,78,0,95,0, -69,0,78,0,68, -0,95,0,69,0, -86,0,69,0,78, -0,84,0,1,63, -1,1,2,0,1, -1514,563,18,1,1514, -160,2,0,1,1515, -564,18,1,1515,360, -2,0,1,2073,565, -18,1,2073,160,2, -0,1,2074,566,18, -1,2074,153,2,0, -1,406,567,18,1, -406,143,2,0,1, -1521,568,18,1,1521, -168,2,0,1,2556, -569,18,1,2556,168, -2,0,1,412,570, -18,1,412,168,2, -0,1,2023,571,18, -1,2023,400,2,0, -1,1442,572,18,1, -1442,160,2,0,1, -2035,573,18,1,2035, -190,2,0,1,2036, -574,18,1,2036,575, -20,576,4,26,74, -0,117,0,109,0, -112,0,83,0,116, -0,97,0,116,0, -101,0,109,0,101, -0,110,0,116,0, -1,114,1,2,2, -0,1,431,577,18, -1,431,143,2,0, -1,2104,578,18,1, -2104,254,2,0,1, -2105,579,18,1,2105, -479,2,0,1,1550, -580,18,1,1550,160, -2,0,1,437,581, -18,1,437,168,2, -0,1,2044,582,18, -1,2044,190,2,0, -1,2586,583,18,1, -2586,190,2,0,1, -1555,584,18,1,1555, -168,2,0,1,1001, -585,18,1,1001,555, -2,0,1,1002,586, -18,1,1002,547,2, -0,1,447,587,18, -1,447,368,2,0, -1,2375,588,18,1, -2375,589,20,590,4, -34,82,0,69,0, -77,0,79,0,84, -0,69,0,95,0, -68,0,65,0,84, -0,65,0,95,0, -69,0,86,0,69, -0,78,0,84,0, -1,82,1,1,2, -0,1,1010,591,18, -1,1010,160,2,0, -1,1011,592,18,1, -1011,153,2,0,1, -1012,593,18,1,1012, -168,2,0,1,1013, -594,18,1,1013,153, -2,0,1,459,595, -18,1,459,596,20, -597,4,24,76,0, -69,0,70,0,84, -0,95,0,66,0, -82,0,65,0,67, -0,75,0,69,0, -84,0,1,27,1, -1,2,0,1,1574, -598,18,1,1574,190, -2,0,1,461,599, -18,1,461,600,20, -601,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,122,1, -2,2,0,1,462, -602,18,1,462,143, -2,0,1,2608,603, -18,1,2608,604,20, -605,4,50,71,0, -108,0,111,0,98, -0,97,0,108,0, -86,0,97,0,114, -0,105,0,97,0, -98,0,108,0,101, -0,68,0,101,0, -99,0,108,0,97, -0,114,0,97,0, -116,0,105,0,111, -0,110,0,1,97, -1,2,2,0,1, -464,606,18,1,464, -607,20,608,4,16, -65,0,114,0,103, -0,117,0,109,0, -101,0,110,0,116, -0,1,123,1,2, -2,0,1,2531,609, -18,1,2531,465,2, -0,1,1585,610,18, -1,1585,611,20,612, -4,12,82,0,69, -0,84,0,85,0, -82,0,78,0,1, -50,1,1,2,0, -1,476,613,18,1, -476,614,20,615,4, -30,83,0,84,0, -82,0,73,0,78, -0,71,0,95,0, -67,0,79,0,78, -0,83,0,84,0, -65,0,78,0,84, -0,1,3,1,1, -2,0,1,477,616, -18,1,477,617,20, -618,4,28,70,0, -76,0,79,0,65, -0,84,0,95,0, -67,0,79,0,78, -0,83,0,84,0, -65,0,78,0,84, -0,1,94,1,1, -2,0,1,478,619, -18,1,478,620,20, -621,4,40,72,0, -69,0,88,0,95, -0,73,0,78,0, -84,0,69,0,71, -0,69,0,82,0, -95,0,67,0,79, -0,78,0,83,0, -84,0,65,0,78, -0,84,0,1,93, -1,1,2,0,1, -479,622,18,1,479, -623,20,624,4,32, -73,0,78,0,84, -0,69,0,71,0, -69,0,82,0,95, -0,67,0,79,0, -78,0,83,0,84, -0,65,0,78,0, -84,0,1,92,1, -1,2,0,1,480, -625,18,1,480,626, -20,627,4,26,82, -0,73,0,71,0, -72,0,84,0,95, -0,66,0,82,0, -65,0,67,0,75, -0,69,0,84,0, -1,28,1,1,2, -0,1,481,628,18, -1,481,607,2,0, -1,2550,629,18,1, -2550,360,2,0,1, -2606,630,18,1,2606, -604,2,0,1,1048, -631,18,1,1048,168, -2,0,1,2042,632, -18,1,2042,633,20, -634,4,20,65,0, -115,0,115,0,105, -0,103,0,110,0, -109,0,101,0,110, -0,116,0,1,110, -1,2,2,0,1, -2043,635,18,1,2043, -190,2,0,1,1620, -636,18,1,1620,160, -2,0,1,1621,637, -18,1,1621,150,2, -0,1,1622,638,18, -1,1622,360,2,0, -1,509,639,18,1, -509,143,2,0,1, -1628,640,18,1,1628, -168,2,0,1,515, -641,18,1,515,168, -2,0,1,2369,642, -18,1,2369,643,20, -644,4,22,84,0, -79,0,85,0,67, -0,72,0,95,0, -69,0,86,0,69, -0,78,0,84,0, -1,88,1,1,2, -0,1,2587,645,18, -1,2587,646,20,647, -4,34,71,0,108, -0,111,0,98,0, -97,0,108,0,68, -0,101,0,102,0, -105,0,110,0,105, -0,116,0,105,0, -111,0,110,0,115, -0,1,96,1,2, -2,0,1,525,648, -18,1,525,368,2, -0,1,2197,649,18, -1,2197,153,2,0, -1,1591,650,18,1, -1591,168,2,0,1, -2135,651,18,1,2135, -254,2,0,1,2598, -652,18,1,2598,473, -2,0,1,1094,653, -18,1,1094,600,2, -0,1,1096,654,18, -1,1096,153,2,0, -1,1657,655,18,1, -1657,190,2,0,1, -1658,656,18,1,1658, -657,20,658,4,6, -70,0,79,0,82, -0,1,46,1,1, -2,0,1,1659,659, -18,1,1659,135,2, -0,1,2609,104,1, -1665,660,18,1,1665, -168,2,0,1,2226, -661,18,1,2226,254, -2,0,1,1113,662, -18,1,1113,176,2, -0,663,5,0,664, -5,319,1,2,665, -19,552,1,2,666, -5,6,1,2531,667, -17,668,15,669,4, -14,37,0,83,0, -116,0,97,0,116, -0,101,0,115,0, -1,-1,1,5,670, -20,671,4,16,83, -0,116,0,97,0, -116,0,101,0,115, -0,95,0,50,0, -1,151,1,3,1, -3,1,2,672,22, -1,12,1,2532,673, -17,674,15,669,1, --1,1,5,675,20, -676,4,16,83,0, -116,0,97,0,116, -0,101,0,115,0, -95,0,49,0,1, -150,1,3,1,2, -1,1,677,22,1, -11,1,2598,678,17, -679,15,680,4,30, -37,0,76,0,83, -0,76,0,80,0, -114,0,111,0,103, -0,114,0,97,0, -109,0,82,0,111, -0,111,0,116,0, -1,-1,1,5,681, -20,682,4,32,76, -0,83,0,76,0, -80,0,114,0,111, -0,103,0,114,0, -97,0,109,0,82, -0,111,0,111,0, -116,0,95,0,49, -0,1,140,1,3, -1,3,1,2,683, -22,1,1,1,2526, -684,17,685,15,686, -4,12,37,0,83, -0,116,0,97,0, -116,0,101,0,1, --1,1,5,687,20, -688,4,14,83,0, -116,0,97,0,116, -0,101,0,95,0, -49,0,1,152,1, -3,1,5,1,4, -689,22,1,13,1, -2528,690,17,691,15, -680,1,-1,1,5, -692,20,693,4,32, -76,0,83,0,76, -0,80,0,114,0, -111,0,103,0,114, -0,97,0,109,0, -82,0,111,0,111, -0,116,0,95,0, -50,0,1,141,1, -3,1,2,1,1, -694,22,1,2,1, -2452,695,17,696,15, -686,1,-1,1,5, -697,20,698,4,14, -83,0,116,0,97, -0,116,0,101,0, -95,0,50,0,1, -153,1,3,1,6, -1,5,699,22,1, -14,1,3,700,19, -615,1,3,701,5, -91,1,256,702,16, -0,613,1,1261,703, -16,0,613,1,509, -704,16,0,613,1, -2197,705,16,0,613, -1,1515,706,16,0, -613,1,2021,707,17, -708,15,709,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,710,20, -711,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, -181,1,3,1,8, -1,7,712,22,1, -44,1,1775,713,16, -0,613,1,2029,714, -17,715,15,716,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, -717,20,718,4,24, -83,0,116,0,97, -0,116,0,101,0, -109,0,101,0,110, -0,116,0,95,0, -49,0,50,0,1, -175,1,3,1,2, -1,1,719,22,1, -38,1,2030,720,17, -721,15,716,1,-1, -1,5,722,20,723, -4,24,83,0,116, -0,97,0,116,0, -101,0,109,0,101, -0,110,0,116,0, -95,0,49,0,49, -0,1,174,1,3, -1,2,1,1,724, -22,1,37,1,2031, -725,17,726,15,716, -1,-1,1,5,727, -20,728,4,24,83, -0,116,0,97,0, -116,0,101,0,109, -0,101,0,110,0, -116,0,95,0,49, -0,48,0,1,173, -1,3,1,2,1, -1,729,22,1,36, -1,2032,730,17,731, -15,716,1,-1,1, -5,732,20,733,4, -22,83,0,116,0, -97,0,116,0,101, -0,109,0,101,0, -110,0,116,0,95, -0,57,0,1,172, -1,3,1,2,1, -1,734,22,1,35, -1,2033,735,17,736, -15,716,1,-1,1, -5,737,20,738,4, -22,83,0,116,0, -97,0,116,0,101, -0,109,0,101,0, -110,0,116,0,95, -0,56,0,1,171, -1,3,1,2,1, -1,739,22,1,34, -1,277,740,16,0, -613,1,2035,741,17, -742,15,716,1,-1, -1,5,743,20,744, -4,22,83,0,116, -0,97,0,116,0, -101,0,109,0,101, -0,110,0,116,0, -95,0,55,0,1, -170,1,3,1,3, -1,2,745,22,1, -33,1,2037,746,17, -747,15,716,1,-1, -1,5,748,20,749, -4,22,83,0,116, -0,97,0,116,0, -101,0,109,0,101, -0,110,0,116,0, -95,0,54,0,1, -169,1,3,1,3, -1,2,750,22,1, -32,1,2039,751,17, -752,15,716,1,-1, -1,5,753,20,754, -4,22,83,0,116, -0,97,0,116,0, -101,0,109,0,101, -0,110,0,116,0, -95,0,53,0,1, -168,1,3,1,3, -1,2,755,22,1, -31,1,32,756,16, -0,613,1,2041,757, -17,758,15,716,1, --1,1,5,759,20, -760,4,22,83,0, -116,0,97,0,116, -0,101,0,109,0, -101,0,110,0,116, -0,95,0,52,0, -1,167,1,3,1, -3,1,2,761,22, -1,30,1,2043,762, -17,763,15,716,1, --1,1,5,764,20, -765,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,165,1,3,1, -3,1,2,766,22, -1,28,1,2044,767, -17,768,15,716,1, --1,1,5,254,1, -1,1,1,769,22, -1,26,1,2550,770, -16,0,613,1,41, -771,16,0,613,1, -1297,772,16,0,613, -1,43,773,16,0, -613,1,1802,774,17, -775,15,776,4,16, -37,0,70,0,111, -0,114,0,76,0, -111,0,111,0,112, -0,1,-1,1,5, -777,20,778,4,18, -70,0,111,0,114, -0,76,0,111,0, -111,0,112,0,95, -0,49,0,1,188, -1,3,1,10,1, -9,779,22,1,51, -1,1804,780,16,0, -613,1,299,781,16, -0,613,1,2309,782, -16,0,613,1,52, -783,16,0,613,1, -525,784,16,0,613, -1,62,785,16,0, -613,1,2074,786,16, -0,613,1,1574,787, -17,788,15,716,1, --1,1,5,789,20, -790,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,166,1,3,1, -3,1,2,791,22, -1,29,1,71,792, -16,0,613,1,76, -793,16,0,613,1, -1834,794,16,0,613, -1,1585,795,16,0, -613,1,1335,796,16, -0,613,1,79,797, -16,0,613,1,85, -798,16,0,613,1, -89,799,16,0,613, -1,346,800,16,0, -613,1,2104,801,17, -802,15,709,1,-1, -1,5,803,20,804, -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,51,0,1,182, -1,3,1,6,1, -5,805,22,1,45, -1,2105,806,16,0, -613,1,2358,807,17, -808,15,809,4,28, -37,0,83,0,116, -0,97,0,116,0, -101,0,109,0,101, -0,110,0,116,0, -76,0,105,0,115, -0,116,0,1,-1, -1,5,810,20,811, -4,30,83,0,116, -0,97,0,116,0, -101,0,109,0,101, -0,110,0,116,0, -76,0,105,0,115, -0,116,0,95,0, -49,0,1,162,1, -3,1,2,1,1, -812,22,1,24,1, -2360,813,17,814,15, -815,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,816,20, -817,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,160,1,3, -1,3,1,2,818, -22,1,22,1,97, -819,16,0,613,1, -1860,820,17,821,15, -822,4,34,37,0, -68,0,111,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,823,20,824,4, -36,68,0,111,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,95,0, -49,0,1,186,1, -3,1,8,1,7, -825,22,1,49,1, -102,826,16,0,613, -1,112,827,16,0, -613,1,1117,828,16, -0,613,1,1873,829, -17,830,15,822,1, --1,1,5,831,20, -832,4,36,68,0, -111,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, -95,0,50,0,1, -187,1,3,1,8, -1,7,833,22,1, -50,1,1876,834,16, -0,613,1,124,835, -16,0,613,1,2135, -836,17,837,15,709, -1,-1,1,5,838, -20,839,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,52,0, -1,183,1,3,1, -8,1,7,840,22, -1,46,1,381,841, -16,0,613,1,322, -842,16,0,613,1, -137,843,16,0,613, -1,1901,844,16,0, -613,1,1153,845,16, -0,613,1,151,846, -16,0,613,1,1407, -847,16,0,613,1, -1659,848,16,0,613, -1,406,849,16,0, -613,1,1371,850,16, -0,613,1,166,851, -16,0,613,1,1622, -852,16,0,613,1, -2354,853,17,854,15, -809,1,-1,1,5, -855,20,856,4,30, -83,0,116,0,97, -0,116,0,101,0, -109,0,101,0,110, -0,116,0,76,0, -105,0,115,0,116, -0,95,0,50,0, -1,163,1,3,1, -3,1,2,857,22, -1,25,1,2355,858, -17,859,15,815,1, --1,1,5,860,20, -861,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,50, -0,1,161,1,3, -1,4,1,3,862, -22,1,23,1,1931, -863,17,864,15,865, -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,866,20,867,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,184, -1,3,1,6,1, -5,868,22,1,47, -1,1933,869,16,0, -613,1,431,870,16, -0,613,1,182,871, -16,0,613,1,1189, -872,16,0,613,1, -1443,873,16,0,613, -1,1695,874,16,0, -613,1,447,875,16, -0,613,1,199,876, -16,0,613,1,1958, -877,16,0,613,1, -1657,878,17,879,15, -716,1,-1,1,5, -880,20,881,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,164,1, -3,1,3,1,2, -882,22,1,27,1, -459,883,16,0,613, -1,462,884,16,0, -613,1,217,885,16, -0,613,1,2226,886, -17,887,15,865,1, --1,1,5,888,20, -889,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,50,0, -1,185,1,3,1, -6,1,5,890,22, -1,48,1,1225,891, -16,0,613,1,1479, -892,16,0,613,1, -1731,893,16,0,613, -1,1989,894,17,895, -15,709,1,-1,1, -5,896,20,897,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,180,1, -3,1,6,1,5, -898,22,1,43,1, -1990,899,16,0,613, -1,236,900,16,0, -613,1,1756,901,16, -0,613,1,4,902, -19,184,1,4,903, -5,96,1,256,904, -16,0,542,1,1261, -905,16,0,542,1, -509,906,16,0,542, -1,2197,907,16,0, -542,1,1515,908,16, -0,542,1,2021,707, -1,1775,909,16,0, -542,1,2029,714,1, -2030,720,1,2031,725, -1,2032,730,1,2033, -735,1,277,910,16, -0,542,1,2035,741, -1,2037,746,1,2039, -751,1,32,911,16, -0,542,1,2041,757, -1,2043,762,1,2044, -767,1,40,912,16, -0,186,1,41,913, -16,0,542,1,1297, -914,16,0,542,1, -43,915,16,0,542, -1,44,916,16,0, -186,1,1802,774,1, -1804,917,16,0,542, -1,299,918,16,0, -542,1,2309,919,16, -0,542,1,52,920, -16,0,542,1,47, -921,16,0,182,1, -525,922,16,0,542, -1,63,923,16,0, -200,1,2074,924,16, -0,542,1,1574,787, -1,66,925,16,0, -198,1,71,926,16, -0,542,1,76,927, -16,0,542,1,1834, -928,16,0,542,1, -79,929,16,0,542, -1,1335,930,16,0, -542,1,322,931,16, -0,542,1,85,932, -16,0,542,1,89, -933,16,0,542,1, -346,934,16,0,542, -1,2104,801,1,2105, -935,16,0,542,1, -2358,807,1,2360,813, -1,97,936,16,0, -542,1,1860,820,1, -102,937,16,0,542, -1,1114,938,16,0, -182,1,112,939,16, -0,542,1,1117,940, -16,0,542,1,1873, -829,1,1876,941,16, -0,542,1,2550,942, -16,0,542,1,124, -943,16,0,542,1, -2135,836,1,381,944, -16,0,542,1,137, -945,16,0,542,1, -1901,946,16,0,542, -1,1153,947,16,0, -542,1,151,948,16, -0,542,1,1407,949, -16,0,542,1,1659, -950,16,0,542,1, -406,951,16,0,542, -1,1371,952,16,0, -542,1,166,953,16, -0,542,1,1622,954, -16,0,542,1,2354, -853,1,2355,858,1, -1931,863,1,1933,955, -16,0,542,1,431, -956,16,0,542,1, -1585,957,16,0,542, -1,182,958,16,0, -542,1,1189,959,16, -0,542,1,1443,960, -16,0,542,1,1695, -961,16,0,542,1, -447,962,16,0,542, -1,199,963,16,0, -542,1,1958,964,16, -0,542,1,1657,878, -1,459,965,16,0, -542,1,462,966,16, -0,542,1,217,967, -16,0,542,1,2226, -886,1,1225,968,16, -0,542,1,1479,969, -16,0,542,1,1731, -970,16,0,542,1, -1989,894,1,1990,971, -16,0,542,1,236, -972,16,0,542,1, -1756,973,16,0,542, -1,5,974,19,181, -1,5,975,5,96, -1,256,976,16,0, -538,1,1261,977,16, -0,538,1,509,978, -16,0,538,1,2197, -979,16,0,538,1, -1515,980,16,0,538, -1,2021,707,1,1775, -981,16,0,538,1, -2029,714,1,2030,720, -1,2031,725,1,2032, -730,1,2033,735,1, -277,982,16,0,538, -1,2035,741,1,2037, -746,1,2039,751,1, -32,983,16,0,538, -1,2041,757,1,2043, -762,1,2044,767,1, -40,984,16,0,185, -1,41,985,16,0, -538,1,1297,986,16, -0,538,1,43,987, -16,0,538,1,44, -988,16,0,185,1, -1802,774,1,1804,989, -16,0,538,1,299, -990,16,0,538,1, -2309,991,16,0,538, -1,52,992,16,0, -538,1,47,993,16, -0,179,1,525,994, -16,0,538,1,63, -995,16,0,199,1, -2074,996,16,0,538, -1,1574,787,1,66, -997,16,0,197,1, -71,998,16,0,538, -1,76,999,16,0, -538,1,1834,1000,16, -0,538,1,79,1001, -16,0,538,1,1335, -1002,16,0,538,1, -322,1003,16,0,538, -1,85,1004,16,0, -538,1,89,1005,16, -0,538,1,346,1006, -16,0,538,1,2104, -801,1,2105,1007,16, -0,538,1,2358,807, -1,2360,813,1,97, -1008,16,0,538,1, -1860,820,1,102,1009, -16,0,538,1,1114, -1010,16,0,179,1, -112,1011,16,0,538, -1,1117,1012,16,0, -538,1,1873,829,1, -1876,1013,16,0,538, -1,2550,1014,16,0, -538,1,124,1015,16, -0,538,1,2135,836, -1,381,1016,16,0, -538,1,137,1017,16, -0,538,1,1901,1018, -16,0,538,1,1153, -1019,16,0,538,1, -151,1020,16,0,538, -1,1407,1021,16,0, -538,1,1659,1022,16, -0,538,1,406,1023, -16,0,538,1,1371, -1024,16,0,538,1, -166,1025,16,0,538, -1,1622,1026,16,0, -538,1,2354,853,1, -2355,858,1,1931,863, -1,1933,1027,16,0, -538,1,431,1028,16, -0,538,1,1585,1029, -16,0,538,1,182, -1030,16,0,538,1, -1189,1031,16,0,538, -1,1443,1032,16,0, -538,1,1695,1033,16, -0,538,1,447,1034, -16,0,538,1,199, -1035,16,0,538,1, -1958,1036,16,0,538, -1,1657,878,1,459, -1037,16,0,538,1, -462,1038,16,0,538, -1,217,1039,16,0, -538,1,2226,886,1, -1225,1040,16,0,538, -1,1479,1041,16,0, -538,1,1731,1042,16, -0,538,1,1989,894, -1,1990,1043,16,0, -538,1,236,1044,16, -0,538,1,1756,1045, -16,0,538,1,6, -1046,19,292,1,6, -1047,5,2,1,1114, -1048,16,0,290,1, -40,1049,16,0,527, -1,7,1050,19,241, -1,7,1051,5,2, -1,1114,1052,16,0, -239,1,40,1053,16, -0,487,1,8,1054, -19,206,1,8,1055, -5,2,1,1114,1056, -16,0,204,1,40, -1057,16,0,454,1, -9,1058,19,212,1, -9,1059,5,2,1, -1114,1060,16,0,210, -1,40,1061,16,0, -436,1,10,1062,19, -164,1,10,1063,5, -2,1,1114,1064,16, -0,162,1,40,1065, -16,0,390,1,11, -1066,19,191,1,11, -1067,5,141,1,1260, -1068,17,1069,15,1070, -4,34,37,0,83, -0,105,0,109,0, -112,0,108,0,101, -0,65,0,115,0, -115,0,105,0,103, -0,110,0,109,0, -101,0,110,0,116, -0,1,-1,1,5, -1071,20,1072,4,38, -83,0,105,0,109, -0,112,0,108,0, -101,0,65,0,115, -0,115,0,105,0, -103,0,110,0,109, -0,101,0,110,0, -116,0,95,0,50, -0,49,0,1,215, -1,3,1,6,1, -5,1073,22,1,78, -1,1011,1074,17,1075, -15,1076,4,44,37, -0,80,0,97,0, -114,0,101,0,110, -0,116,0,104,0, -101,0,115,0,105, -0,115,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,1077,20,1078, -4,46,80,0,97, -0,114,0,101,0, -110,0,116,0,104, -0,101,0,115,0, -105,0,115,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,262, -1,3,1,4,1, -3,1079,22,1,125, -1,1514,1080,17,1081, -15,1070,1,-1,1, -5,1082,20,1083,4, -38,83,0,105,0, -109,0,112,0,108, -0,101,0,65,0, -115,0,115,0,105, -0,103,0,110,0, -109,0,101,0,110, -0,116,0,95,0, -49,0,52,0,1, -208,1,3,1,4, -1,3,1084,22,1, -71,1,9,1085,17, -1086,15,1087,4,24, -37,0,68,0,101, -0,99,0,108,0, -97,0,114,0,97, -0,116,0,105,0, -111,0,110,0,1, --1,1,5,1088,20, -1089,4,26,68,0, -101,0,99,0,108, -0,97,0,114,0, -97,0,116,0,105, -0,111,0,110,0, -95,0,49,0,1, -159,1,3,1,3, -1,2,1090,22,1, -21,1,262,1091,17, -1092,15,1093,4,34, -37,0,66,0,105, -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,1094,20, -1095,4,36,66,0, -105,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,53,0,1, -244,1,3,1,4, -1,3,1096,22,1, -107,1,1267,1097,17, -1098,15,1070,1,-1, -1,5,1099,20,1100, -4,36,83,0,105, -0,109,0,112,0, -108,0,101,0,65, -0,115,0,115,0, -105,0,103,0,110, -0,109,0,101,0, -110,0,116,0,95, -0,56,0,1,202, -1,3,1,6,1, -5,1101,22,1,65, -1,2021,707,1,1521, -1102,17,1103,15,1070, -1,-1,1,5,1104, -20,1105,4,36,83, -0,105,0,109,0, -112,0,108,0,101, -0,65,0,115,0, -115,0,105,0,103, -0,110,0,109,0, -101,0,110,0,116, -0,95,0,49,0, -1,195,1,3,1, -4,1,3,1106,22, -1,58,1,2024,1107, -17,1108,15,1109,4, -24,37,0,83,0, -116,0,97,0,116, -0,101,0,67,0, -104,0,97,0,110, -0,103,0,101,0, -1,-1,1,5,1110, -20,1111,4,26,83, -0,116,0,97,0, -116,0,101,0,67, -0,104,0,97,0, -110,0,103,0,101, -0,95,0,49,0, -1,178,1,3,1, -3,1,2,1112,22, -1,41,1,1775,1113, -16,0,582,1,19, -1114,17,1086,1,2, -1090,1,2028,1115,17, -1116,15,1117,4,20, -37,0,74,0,117, -0,109,0,112,0, -76,0,97,0,98, -0,101,0,108,0, -1,-1,1,5,1118, -20,1119,4,22,74, -0,117,0,109,0, -112,0,76,0,97, -0,98,0,101,0, -108,0,95,0,49, -0,1,176,1,3, -1,3,1,2,1120, -22,1,39,1,2280, -1121,17,1122,15,1123, -4,34,37,0,70, -0,111,0,114,0, -76,0,111,0,111, -0,112,0,83,0, -116,0,97,0,116, -0,101,0,109,0, -101,0,110,0,116, -0,1,-1,1,5, -1124,20,1125,4,36, -70,0,111,0,114, -0,76,0,111,0, -111,0,112,0,83, -0,116,0,97,0, -116,0,101,0,109, -0,101,0,110,0, -116,0,95,0,50, -0,1,190,1,3, -1,2,1,1,1126, -22,1,53,1,2030, -720,1,2031,725,1, -2032,730,1,2033,735, -1,2034,1127,16,0, -573,1,2035,741,1, -2036,1128,16,0,528, -1,2037,746,1,2038, -1129,16,0,532,1, -2039,751,1,32,1130, -16,0,582,1,2041, -757,1,2042,1131,16, -0,635,1,2043,762, -1,2044,767,1,2226, -886,1,2549,1132,16, -0,583,1,40,1133, -17,1134,15,1135,4, -32,37,0,73,0, -100,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,1136,20,1137, -4,34,73,0,100, -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,229,1,3, -1,2,1,1,1138, -22,1,92,1,1296, -1139,17,1140,15,1070, -1,-1,1,5,1141, -20,1142,4,38,83, -0,105,0,109,0, -112,0,108,0,101, -0,65,0,115,0, -115,0,105,0,103, -0,110,0,109,0, -101,0,110,0,116, -0,95,0,50,0, -48,0,1,214,1, -3,1,6,1,5, -1143,22,1,77,1, -283,1144,17,1145,15, -1093,1,-1,1,5, -1146,20,1147,4,36, -66,0,105,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,52, -0,1,243,1,3, -1,4,1,3,1148, -22,1,106,1,44, -1149,17,1134,1,1, -1138,1,1802,774,1, -2556,1150,16,0,497, -1,47,1151,17,1152, -15,1153,4,38,37, -0,73,0,100,0, -101,0,110,0,116, -0,68,0,111,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,1154,20,1155,4, -40,73,0,100,0, -101,0,110,0,116, -0,68,0,111,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,230,1,3, -1,4,1,3,1156, -22,1,93,1,48, -1157,17,1158,15,1159, -4,58,37,0,73, -0,110,0,99,0, -114,0,101,0,109, -0,101,0,110,0, -116,0,68,0,101, -0,99,0,114,0, -101,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,1160, -20,1161,4,60,73, -0,110,0,99,0, -114,0,101,0,109, -0,101,0,110,0, -116,0,68,0,101, -0,99,0,114,0, -101,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,52,0,1, -234,1,3,1,5, -1,4,1162,22,1, -97,1,49,1163,17, -1164,15,1159,1,-1, -1,5,1165,20,1166, -4,60,73,0,110, -0,99,0,114,0, -101,0,109,0,101, -0,110,0,116,0, -68,0,101,0,99, -0,114,0,101,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, -51,0,1,233,1, -3,1,5,1,4, -1167,22,1,96,1, -2309,1168,16,0,582, -1,51,1169,17,1170, -15,1159,1,-1,1, -5,1171,20,1172,4, -60,73,0,110,0, -99,0,114,0,101, -0,109,0,101,0, -110,0,116,0,68, -0,101,0,99,0, -114,0,101,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,231,1,3, -1,3,1,2,1173, -22,1,94,1,50, -1174,17,1175,15,1159, -1,-1,1,5,1176, -20,1177,4,60,73, -0,110,0,99,0, -114,0,101,0,109, -0,101,0,110,0, -116,0,68,0,101, -0,99,0,114,0, -101,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,50,0,1, -232,1,3,1,3, -1,2,1178,22,1, -95,1,305,1179,17, -1180,15,1093,1,-1, -1,5,1181,20,1182, -4,36,66,0,105, -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,51,0,1,242, -1,3,1,4,1, -3,1183,22,1,105, -1,525,1184,17,1185, -15,1186,4,34,37, -0,82,0,111,0, -116,0,97,0,116, -0,105,0,111,0, -110,0,67,0,111, -0,110,0,115,0, -116,0,97,0,110, -0,116,0,1,-1, -1,5,1187,20,1188, -4,36,82,0,111, -0,116,0,97,0, -116,0,105,0,111, -0,110,0,67,0, -111,0,110,0,115, -0,116,0,97,0, -110,0,116,0,95, -0,49,0,1,227, -1,3,1,10,1, -9,1189,22,1,90, -1,63,1190,17,1191, -15,1192,4,38,37, -0,84,0,121,0, -112,0,101,0,99, -0,97,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,1193,20,1194,4, -40,84,0,121,0, -112,0,101,0,99, -0,97,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,264,1,3, -1,5,1,4,1195, -22,1,127,1,66, -1196,17,1197,15,1192, -1,-1,1,5,1198, -20,1199,4,40,84, -0,121,0,112,0, -101,0,99,0,97, -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, -265,1,3,1,7, -1,6,1200,22,1, -128,1,67,1201,17, -1202,15,1192,1,-1, -1,5,1203,20,1204, -4,40,84,0,121, -0,112,0,101,0, -99,0,97,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, -55,0,1,269,1, -3,1,8,1,7, -1205,22,1,132,1, -68,1206,17,1207,15, -1192,1,-1,1,5, -1208,20,1209,4,40, -84,0,121,0,112, -0,101,0,99,0, -97,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,267,1,3,1, -8,1,7,1210,22, -1,130,1,69,1211, -17,1212,15,1192,1, --1,1,5,1213,20, -1214,4,40,84,0, -121,0,112,0,101, -0,99,0,97,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,54,0,1,268, -1,3,1,6,1, -5,1215,22,1,131, -1,70,1216,17,1217, -15,1192,1,-1,1, -5,1218,20,1219,4, -40,84,0,121,0, -112,0,101,0,99, -0,97,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,266,1,3, -1,6,1,5,1220, -22,1,129,1,74, -1221,17,1222,15,1192, -1,-1,1,5,1223, -20,1224,4,40,84, -0,121,0,112,0, -101,0,99,0,97, -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,57,0,1, -271,1,3,1,7, -1,6,1225,22,1, -134,1,1013,1226,17, -1227,15,1076,1,-1, -1,5,1228,20,1229, -4,46,80,0,97, -0,114,0,101,0, -110,0,116,0,104, -0,101,0,115,0, -105,0,115,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,261, -1,3,1,4,1, -3,1230,22,1,124, -1,1332,1231,17,1232, -15,1070,1,-1,1, -5,1233,20,1234,4, -38,83,0,105,0, -109,0,112,0,108, -0,101,0,65,0, -115,0,115,0,105, -0,103,0,110,0, -109,0,101,0,110, -0,116,0,95,0, -49,0,57,0,1, -213,1,3,1,6, -1,5,1235,22,1, -76,1,1048,1236,17, -1237,15,1093,1,-1, -1,5,1238,20,1239, -4,38,66,0,105, -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,56,0, -1,257,1,3,1, -4,1,3,1240,22, -1,120,1,1585,1241, -17,1242,15,1243,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,1244,20,1245, -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,50, -0,1,220,1,3, -1,2,1,1,1246, -22,1,83,1,2023, -1247,17,1248,15,1109, -1,-1,1,5,1249, -20,1250,4,26,83, -0,116,0,97,0, -116,0,101,0,67, -0,104,0,97,0, -110,0,103,0,101, -0,95,0,50,0, -1,179,1,3,1, -3,1,2,1251,22, -1,42,1,82,1252, -17,1253,15,1254,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,1255,20,1256, -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,51, -0,1,260,1,3, -1,3,1,2,1257, -22,1,123,1,2026, -1258,17,1259,15,1260, -4,28,37,0,74, -0,117,0,109,0, -112,0,83,0,116, -0,97,0,116,0, -101,0,109,0,101, -0,110,0,116,0, -1,-1,1,5,1261, -20,1262,4,30,74, -0,117,0,109,0, -112,0,83,0,116, -0,97,0,116,0, -101,0,109,0,101, -0,110,0,116,0, -95,0,49,0,1, -177,1,3,1,3, -1,2,1263,22,1, -40,1,1591,1264,17, -1265,15,1243,1,-1, -1,5,1266,20,1267, -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,219,1,3, -1,3,1,2,1268, -22,1,82,1,1341, -1269,17,1270,15,1070, -1,-1,1,5,1271, -20,1272,4,36,83, -0,105,0,109,0, -112,0,108,0,101, -0,65,0,115,0, -115,0,105,0,103, -0,110,0,109,0, -101,0,110,0,116, -0,95,0,54,0, -1,200,1,3,1, -4,1,3,1273,22, -1,63,1,328,1274, -17,1275,15,1093,1, --1,1,5,1276,20, -1277,4,36,66,0, -105,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,50,0,1, -241,1,3,1,4, -1,3,1278,22,1, -104,1,1303,1279,17, -1280,15,1070,1,-1, -1,5,1281,20,1282, -4,36,83,0,105, -0,109,0,112,0, -108,0,101,0,65, -0,115,0,115,0, -105,0,103,0,110, -0,109,0,101,0, -110,0,116,0,95, -0,55,0,1,201, -1,3,1,6,1, -5,1283,22,1,64, -1,1096,1284,17,1285, -15,1286,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,1287, -20,1288,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,272,1, -3,1,5,1,4, -1289,22,1,135,1, -93,1290,17,1291,15, -1254,1,-1,1,5, -1292,20,1293,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,50,0,1, -259,1,3,1,3, -1,2,1294,22,1, -122,1,1550,1295,17, -1296,15,1070,1,-1, -1,5,1297,20,1298, -4,38,83,0,105, -0,109,0,112,0, -108,0,101,0,65, -0,115,0,115,0, -105,0,103,0,110, -0,109,0,101,0, -110,0,116,0,95, -0,49,0,51,0, -1,207,1,3,1, -4,1,3,1299,22, -1,70,1,2354,853, -1,2355,858,1,2040, -1300,16,0,536,1, -2358,807,1,352,1301, -17,1302,15,1093,1, --1,1,5,1303,20, -1304,4,36,66,0, -105,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, -240,1,3,1,4, -1,3,1305,22,1, -103,1,1859,1306,16, -0,365,1,1860,820, -1,1804,1307,16,0, -582,1,107,1308,17, -1309,15,1254,1,-1, -1,5,1310,20,1311, -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,258,1,3, -1,3,1,2,1312, -22,1,121,1,1114, -1313,17,1152,1,3, -1156,1,2105,1314,16, -0,582,1,1872,1315, -16,0,375,1,1873, -829,1,118,1316,17, -1317,15,1093,1,-1, -1,5,1318,20,1319, -4,38,66,0,105, -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,52,0, -1,253,1,3,1, -4,1,3,1320,22, -1,116,1,1123,1321, -17,1322,15,1070,1, --1,1,5,1323,20, -1324,4,38,83,0, -105,0,109,0,112, -0,108,0,101,0, -65,0,115,0,115, -0,105,0,103,0, -110,0,109,0,101, -0,110,0,116,0, -95,0,49,0,50, -0,1,206,1,3, -1,6,1,5,1325, -22,1,69,1,371, -1326,17,1327,15,1328, -4,46,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,69,0, -120,0,112,0,114, -0,101,0,115,0, -115,0,105,0,111, -0,110,0,1,-1, -1,5,1329,20,1330, -4,48,70,0,117, -0,110,0,99,0, -116,0,105,0,111, -0,110,0,67,0, -97,0,108,0,108, -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,239,1,3,1, -2,1,1,1331,22, -1,102,1,1377,1332, -17,1333,15,1070,1, --1,1,5,1334,20, -1335,4,36,83,0, -105,0,109,0,112, -0,108,0,101,0, -65,0,115,0,115, -0,105,0,103,0, -110,0,109,0,101, -0,110,0,116,0, -95,0,53,0,1, -199,1,3,1,4, -1,3,1336,22,1, -62,1,375,1337,17, -1338,15,1159,1,-1, -1,5,1339,20,1340, -4,60,73,0,110, -0,99,0,114,0, -101,0,109,0,101, -0,110,0,116,0, -68,0,101,0,99, -0,114,0,101,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, -56,0,1,238,1, -3,1,5,1,4, -1341,22,1,101,1, -377,1342,17,1343,15, -1159,1,-1,1,5, -1344,20,1345,4,60, -73,0,110,0,99, -0,114,0,101,0, -109,0,101,0,110, -0,116,0,68,0, -101,0,99,0,114, -0,101,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,53,0, -1,235,1,3,1, -3,1,2,1346,22, -1,98,1,2135,836, -1,827,1347,17,1348, -15,1093,1,-1,1, -5,1349,20,1350,4, -38,66,0,105,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,53,0,1, -254,1,3,1,4, -1,3,1351,22,1, -117,1,380,1352,17, -1353,15,1354,4,38, -37,0,67,0,111, -0,110,0,115,0, -116,0,97,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,1355,20,1356, -4,40,67,0,111, -0,110,0,115,0, -116,0,97,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,228,1, -3,1,2,1,1, -1357,22,1,91,1, -130,1358,17,1359,15, -1093,1,-1,1,5, -1360,20,1361,4,38, -66,0,105,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,51,0,1,252, -1,3,1,4,1, -3,1362,22,1,115, -1,1628,1363,17,1364, -15,1365,4,22,37, -0,65,0,115,0, -115,0,105,0,103, -0,110,0,109,0, -101,0,110,0,116, -0,1,-1,1,5, -1366,20,1367,4,24, -65,0,115,0,115, -0,105,0,103,0, -110,0,109,0,101, -0,110,0,116,0, -95,0,49,0,1, -193,1,3,1,4, -1,3,1368,22,1, -56,1,2074,1369,16, -0,582,1,373,1370, -17,1371,15,1159,1, --1,1,5,1372,20, -1373,4,60,73,0, -110,0,99,0,114, -0,101,0,109,0, -101,0,110,0,116, -0,68,0,101,0, -99,0,114,0,101, -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,54,0,1,236, -1,3,1,3,1, -2,1374,22,1,99, -1,379,1375,17,1376, -15,1159,1,-1,1, -5,1377,20,1378,4, -60,73,0,110,0, -99,0,114,0,101, -0,109,0,101,0, -110,0,116,0,68, -0,101,0,99,0, -114,0,101,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,55, -0,1,237,1,3, -1,5,1,4,1379, -22,1,100,1,143, -1380,17,1381,15,1093, -1,-1,1,5,1382, -20,1383,4,38,66, -0,105,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, -50,0,1,251,1, -3,1,4,1,3, -1384,22,1,114,1, -1901,1385,16,0,582, -1,1152,1386,17,1387, -15,1070,1,-1,1, -5,1388,20,1389,4, -38,83,0,105,0, -109,0,112,0,108, -0,101,0,65,0, -115,0,115,0,105, -0,103,0,110,0, -109,0,101,0,110, -0,116,0,95,0, -50,0,52,0,1, -218,1,3,1,6, -1,5,1390,22,1, -81,1,1555,1391,16, -0,598,1,1406,1392, -17,1393,15,1070,1, --1,1,5,1394,20, -1395,4,38,83,0, -105,0,109,0,112, -0,108,0,101,0, -65,0,115,0,115, -0,105,0,103,0, -110,0,109,0,101, -0,110,0,116,0, -95,0,49,0,55, -0,1,211,1,3, -1,4,1,3,1396, -22,1,74,1,1159, -1397,17,1398,15,1070, -1,-1,1,5,1399, -20,1400,4,38,83, -0,105,0,109,0, -112,0,108,0,101, -0,65,0,115,0, -115,0,105,0,103, -0,110,0,109,0, -101,0,110,0,116, -0,95,0,49,0, -49,0,1,205,1, -3,1,6,1,5, -1401,22,1,68,1, -157,1402,17,1403,15, -1093,1,-1,1,5, -1404,20,1405,4,38, -66,0,105,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,49,0,1,250, -1,3,1,4,1, -3,1406,22,1,113, -1,1413,1407,17,1408, -15,1070,1,-1,1, -5,1409,20,1410,4, -36,83,0,105,0, -109,0,112,0,108, -0,101,0,65,0, -115,0,115,0,105, -0,103,0,110,0, -109,0,101,0,110, -0,116,0,95,0, -52,0,1,198,1, -3,1,4,1,3, -1411,22,1,61,1, -883,1412,17,1413,15, -1093,1,-1,1,5, -1414,20,1415,4,38, -66,0,105,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,54,0,1,255, -1,3,1,4,1, -3,1416,22,1,118, -1,2104,801,1,1478, -1417,17,1418,15,1070, -1,-1,1,5,1419, -20,1420,4,38,83, -0,105,0,109,0, -112,0,108,0,101, -0,65,0,115,0, -115,0,105,0,103, -0,110,0,109,0, -101,0,110,0,116, -0,95,0,49,0, -53,0,1,209,1, -3,1,4,1,3, -1421,22,1,72,1, -1620,1422,17,1423,15, -1365,1,-1,1,5, -1424,20,1425,4,24, -65,0,115,0,115, -0,105,0,103,0, -110,0,109,0,101, -0,110,0,116,0, -95,0,50,0,1, -194,1,3,1,2, -1,1,1426,22,1, -57,1,1621,1427,16, -0,655,1,1574,787, -1,172,1428,17,1429, -15,1093,1,-1,1, -5,1430,20,1431,4, -38,66,0,105,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,48,0,1, -249,1,3,1,4, -1,3,1432,22,1, -112,1,1931,863,1, -2360,813,1,1188,1433, -17,1434,15,1070,1, --1,1,5,1435,20, -1436,4,38,83,0, -105,0,109,0,112, -0,108,0,101,0, -65,0,115,0,115, -0,105,0,103,0, -110,0,109,0,101, -0,110,0,116,0, -95,0,50,0,51, -0,1,217,1,3, -1,6,1,5,1437, -22,1,80,1,1442, -1438,17,1439,15,1070, -1,-1,1,5,1440, -20,1441,4,38,83, -0,105,0,109,0, -112,0,108,0,101, -0,65,0,115,0, -115,0,105,0,103, -0,110,0,109,0, -101,0,110,0,116, -0,95,0,49,0, -54,0,1,210,1, -3,1,4,1,3, -1442,22,1,73,1, -1694,1443,16,0,189, -1,942,1444,17,1445, -15,1093,1,-1,1, -5,1446,20,1447,4, -38,66,0,105,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,55,0,1, -256,1,3,1,4, -1,3,1448,22,1, -119,1,1195,1449,17, -1450,15,1070,1,-1, -1,5,1451,20,1452, -4,38,83,0,105, -0,109,0,112,0, -108,0,101,0,65, -0,115,0,115,0, -105,0,103,0,110, -0,109,0,101,0, -110,0,116,0,95, -0,49,0,48,0, -1,204,1,3,1, -6,1,5,1453,22, -1,67,1,1449,1454, -17,1455,15,1070,1, --1,1,5,1456,20, -1457,4,36,83,0, -105,0,109,0,112, -0,108,0,101,0, -65,0,115,0,115, -0,105,0,103,0, -110,0,109,0,101, -0,110,0,116,0, -95,0,51,0,1, -197,1,3,1,4, -1,3,1458,22,1, -60,1,1701,1459,17, -1460,15,1123,1,-1, -1,5,1461,20,1462, -4,36,70,0,111, -0,114,0,76,0, -111,0,111,0,112, -0,83,0,116,0, -97,0,116,0,101, -0,109,0,101,0, -110,0,116,0,95, -0,51,0,1,191, -1,3,1,4,1, -3,1463,22,1,54, -1,447,1464,17,1465, -15,1466,4,30,37, -0,86,0,101,0, -99,0,116,0,111, -0,114,0,67,0, -111,0,110,0,115, -0,116,0,97,0, -110,0,116,0,1, --1,1,5,1467,20, -1468,4,32,86,0, -101,0,99,0,116, -0,111,0,114,0, -67,0,111,0,110, -0,115,0,116,0, -97,0,110,0,116, -0,95,0,49,0, -1,226,1,3,1, -8,1,7,1469,22, -1,89,1,1958,1470, -16,0,582,1,188, -1471,17,1472,15,1093, -1,-1,1,5,1473, -20,1474,4,36,66, -0,105,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,57,0, -1,248,1,3,1, -4,1,3,1475,22, -1,111,1,1370,1476, -17,1477,15,1070,1, --1,1,5,1478,20, -1479,4,38,83,0, -105,0,109,0,112, -0,108,0,101,0, -65,0,115,0,115, -0,105,0,103,0, -110,0,109,0,101, -0,110,0,116,0, -95,0,49,0,56, -0,1,212,1,3, -1,4,1,3,1480, -22,1,75,1,1657, -878,1,205,1481,17, -1482,15,1093,1,-1, -1,5,1483,20,1484, -4,36,66,0,105, -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,56,0,1,247, -1,3,1,4,1, -3,1485,22,1,110, -1,1665,1486,17,1487, -15,1123,1,-1,1, -5,1488,20,1489,4, -36,70,0,111,0, -114,0,76,0,111, -0,111,0,112,0, -83,0,116,0,97, -0,116,0,101,0, -109,0,101,0,110, -0,116,0,95,0, -49,0,1,189,1, -3,1,2,1,1, -1490,22,1,52,1, -2029,714,1,2197,1491, -16,0,582,1,1224, -1492,17,1493,15,1070, -1,-1,1,5,1494, -20,1495,4,38,83, -0,105,0,109,0, -112,0,108,0,101, -0,65,0,115,0, -115,0,105,0,103, -0,110,0,109,0, -101,0,110,0,116, -0,95,0,50,0, -50,0,1,216,1, -3,1,6,1,5, -1496,22,1,79,1, -223,1497,17,1498,15, -1093,1,-1,1,5, -1499,20,1500,4,36, -66,0,105,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,55, -0,1,246,1,3, -1,4,1,3,1501, -22,1,109,1,1730, -1502,17,1503,15,1123, -1,-1,1,5,1504, -20,1505,4,36,70, -0,111,0,114,0, -76,0,111,0,111, -0,112,0,83,0, -116,0,97,0,116, -0,101,0,109,0, -101,0,110,0,116, -0,95,0,52,0, -1,192,1,3,1, -4,1,3,1506,22, -1,55,1,476,1507, -17,1508,15,1509,4, -18,37,0,67,0, -111,0,110,0,115, -0,116,0,97,0, -110,0,116,0,1, --1,1,5,1510,20, -1511,4,20,67,0, -111,0,110,0,115, -0,116,0,97,0, -110,0,116,0,95, -0,52,0,1,224, -1,3,1,2,1, -1,1512,22,1,87, -1,477,1513,17,1514, -15,1509,1,-1,1, -5,1515,20,1516,4, -20,67,0,111,0, -110,0,115,0,116, -0,97,0,110,0, -116,0,95,0,51, -0,1,223,1,3, -1,2,1,1,1517, -22,1,86,1,1231, -1518,17,1519,15,1070, -1,-1,1,5,1520, -20,1521,4,36,83, -0,105,0,109,0, -112,0,108,0,101, -0,65,0,115,0, -115,0,105,0,103, -0,110,0,109,0, -101,0,110,0,116, -0,95,0,57,0, -1,203,1,3,1, -6,1,5,1522,22, -1,66,1,479,1523, -17,1524,15,1509,1, --1,1,5,1525,20, -1526,4,20,67,0, -111,0,110,0,115, -0,116,0,97,0, -110,0,116,0,95, -0,49,0,1,221, -1,3,1,2,1, -1,1527,22,1,84, -1,480,1528,17,1529, -15,1530,4,26,37, -0,76,0,105,0, -115,0,116,0,67, -0,111,0,110,0, -115,0,116,0,97, -0,110,0,116,0, -1,-1,1,5,1531, -20,1532,4,28,76, -0,105,0,115,0, -116,0,67,0,111, -0,110,0,115,0, -116,0,97,0,110, -0,116,0,95,0, -49,0,1,225,1, -3,1,4,1,3, -1533,22,1,88,1, -1485,1534,17,1535,15, -1070,1,-1,1,5, -1536,20,1537,4,36, -83,0,105,0,109, -0,112,0,108,0, -101,0,65,0,115, -0,115,0,105,0, -103,0,110,0,109, -0,101,0,110,0, -116,0,95,0,50, -0,1,196,1,3, -1,4,1,3,1538, -22,1,59,1,1737, -1539,16,0,278,1, -1989,894,1,1990,1540, -16,0,582,1,242, -1541,17,1542,15,1093, -1,-1,1,5,1543, -20,1544,4,36,66, -0,105,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,54,0, -1,245,1,3,1, -4,1,3,1545,22, -1,108,1,478,1546, -17,1547,15,1509,1, --1,1,5,1548,20, -1549,4,20,67,0, -111,0,110,0,115, -0,116,0,97,0, -110,0,116,0,95, -0,50,0,1,222, -1,3,1,2,1, -1,1550,22,1,85, -1,1001,1551,17,1552, -15,1192,1,-1,1, -5,1553,20,1554,4, -40,84,0,121,0, -112,0,101,0,99, -0,97,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,56, -0,1,270,1,3, -1,5,1,4,1555, -22,1,133,1,1002, -1556,17,1557,15,1192, -1,-1,1,5,1558, -20,1559,4,40,84, -0,121,0,112,0, -101,0,99,0,97, -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, -263,1,3,1,5, -1,4,1560,22,1, -126,1,12,1561,19, -157,1,12,1562,5, -41,1,2074,1563,16, -0,155,1,1860,820, -1,2412,1564,16,0, -155,1,2197,1565,16, -0,155,1,2309,1566, -16,0,155,1,1657, -878,1,1989,894,1, -1990,1567,16,0,155, -1,31,1568,16,0, -155,1,32,1569,16, -0,155,1,2104,801, -1,2105,1570,16,0, -155,1,2358,807,1, -2545,1571,16,0,155, -1,2226,886,1,1901, -1572,16,0,155,1, -2454,1573,16,0,553, -1,1802,774,1,2021, -707,1,1804,1574,16, -0,155,1,2135,836, -1,2354,853,1,2355, -858,1,2029,714,1, -2030,720,1,2031,725, -1,2032,730,1,2360, -813,1,2035,741,1, -2037,746,1,2365,1575, -16,0,273,1,2039, -751,1,1931,863,1, -2041,757,1,1873,829, -1,2043,762,1,2044, -767,1,1775,1576,16, -0,155,1,2033,735, -1,1574,787,1,1958, -1577,16,0,155,1, -13,1578,19,258,1, -13,1579,5,33,1, -1860,820,1,2414,1580, -17,1581,15,1582,4, -22,37,0,83,0, -116,0,97,0,116, -0,101,0,69,0, -118,0,101,0,110, -0,116,0,1,-1, -1,5,1583,20,1584, -4,24,83,0,116, -0,97,0,116,0, -101,0,69,0,118, -0,101,0,110,0, -116,0,95,0,49, -0,1,156,1,3, -1,6,1,5,1585, -22,1,17,1,2416, -1586,16,0,395,1, -2309,1587,16,0,256, -1,1657,878,1,2031, -725,1,1989,894,1, -32,1588,16,0,261, -1,2104,801,1,2226, -886,1,2033,735,1, -2451,1589,17,1590,15, -1591,4,20,37,0, -83,0,116,0,97, -0,116,0,101,0, -66,0,111,0,100, -0,121,0,1,-1, -1,5,1592,20,1593, -4,22,83,0,116, -0,97,0,116,0, -101,0,66,0,111, -0,100,0,121,0, -95,0,50,0,1, -155,1,3,1,3, -1,2,1594,22,1, -16,1,2453,1595,17, -1596,15,1591,1,-1, -1,5,1597,20,1598, -4,22,83,0,116, -0,97,0,116,0, -101,0,66,0,111, -0,100,0,121,0, -95,0,49,0,1, -154,1,3,1,2, -1,1,1599,22,1, -15,1,1802,774,1, -2021,707,1,2135,836, -1,2354,853,1,2355, -858,1,2029,714,1, -2030,720,1,2358,807, -1,2032,730,1,2360, -813,1,2035,741,1, -2037,746,1,2039,751, -1,1931,863,1,2041, -757,1,1873,829,1, -2043,762,1,2044,767, -1,2490,1600,16,0, -455,1,1574,787,1, -14,1601,19,144,1, -14,1602,5,104,1, -1260,1068,1,1011,1074, -1,1514,1080,1,9, -1085,1,10,1603,17, -1604,15,1605,4,48, -37,0,65,0,114, -0,103,0,117,0, -109,0,101,0,110, -0,116,0,68,0, -101,0,99,0,108, -0,97,0,114,0, -97,0,116,0,105, -0,111,0,110,0, -76,0,105,0,115, -0,116,0,1,-1, -1,5,140,1,0, -1,0,1606,22,1, -18,1,262,1091,1, -1267,1097,1,1521,1102, -1,1773,1607,16,0, -148,1,19,1114,1, -20,1608,16,0,142, -1,2280,1121,1,525, -1184,1,2534,1609,17, -1610,15,1605,1,-1, -1,5,140,1,0, -1,0,1606,1,30, -1611,17,1612,15,1605, -1,-1,1,5,1613, -20,1614,4,50,65, -0,114,0,103,0, -117,0,109,0,101, -0,110,0,116,0, -68,0,101,0,99, -0,108,0,97,0, -114,0,97,0,116, -0,105,0,111,0, -110,0,76,0,105, -0,115,0,116,0, -95,0,50,0,1, -158,1,3,1,4, -1,3,1615,22,1, -20,1,283,1144,1, -2543,1616,16,0,142, -1,40,1133,1,41, -1617,17,1618,15,1619, -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,600,1,0, -1,0,1620,22,1, -136,1,42,1621,17, -1622,15,1623,4,38, -37,0,69,0,120, -0,112,0,114,0, -101,0,115,0,115, -0,105,0,111,0, -110,0,65,0,114, -0,103,0,117,0, -109,0,101,0,110, -0,116,0,1,-1, -1,5,1624,20,1625, -4,40,69,0,120, -0,112,0,114,0, -101,0,115,0,115, -0,105,0,111,0, -110,0,65,0,114, -0,103,0,117,0, -109,0,101,0,110, -0,116,0,95,0, -49,0,1,275,1, -3,1,2,1,1, -1626,22,1,139,1, -44,1149,1,47,1151, -1,48,1157,1,49, -1163,1,50,1174,1, -51,1169,1,305,1179, -1,63,1190,1,66, -1196,1,67,1201,1, -1478,1417,1,69,1211, -1,70,1216,1,68, -1206,1,74,1221,1, -1013,1226,1,1332,1231, -1,1048,1236,1,82, -1252,1,1296,1139,1, -1341,1269,1,328,1274, -1,1303,1279,1,1096, -1284,1,93,1290,1, -1550,1295,1,352,1301, -1,2363,1627,17,1628, -15,1605,1,-1,1, -5,1629,20,1630,4, -50,65,0,114,0, -103,0,117,0,109, -0,101,0,110,0, -116,0,68,0,101, -0,99,0,108,0, -97,0,114,0,97, -0,116,0,105,0, -111,0,110,0,76, -0,105,0,115,0, -116,0,95,0,49, -0,1,157,1,3, -1,2,1,1,1631, -22,1,19,1,107, -1308,1,1114,1313,1, -1370,1476,1,118,1316, -1,1123,1321,1,371, -1326,1,1377,1332,1, -375,1337,1,377,1342, -1,379,1375,1,380, -1352,1,883,1412,1, -373,1370,1,130,1358, -1,2401,1632,17,1633, -15,1605,1,-1,1, -5,140,1,0,1, -0,1606,1,143,1380, -1,1152,1386,1,387, -1634,16,0,567,1, -1406,1392,1,1159,1397, -1,157,1402,1,1413, -1407,1,1665,1486,1, -412,1635,16,0,577, -1,1094,1636,16,0, -602,1,172,1428,1, -827,1347,1,1188,1433, -1,437,1637,16,0, -639,1,1442,1438,1, -1694,1638,16,0,148, -1,942,1444,1,1195, -1449,1,1449,1454,1, -1701,1459,1,447,1464, -1,188,1471,1,205, -1481,1,459,1639,17, -1640,15,1619,1,-1, -1,5,600,1,0, -1,0,1620,1,461, -1641,16,0,602,1, -464,1642,17,1643,15, -1619,1,-1,1,5, -1644,20,1645,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,274, -1,3,1,4,1, -3,1646,22,1,138, -1,1224,1492,1,223, -1497,1,1730,1502,1, -476,1507,1,477,1513, -1,1231,1518,1,2410, -1647,16,0,142,1, -480,1528,1,1485,1534, -1,242,1541,1,478, -1546,1,479,1523,1, -481,1648,17,1649,15, -1619,1,-1,1,5, -1650,20,1651,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,273, -1,3,1,2,1, -1,1652,22,1,137, -1,1001,1551,1,1002, -1556,1,15,1653,19, -361,1,15,1654,5, -6,1,1114,1655,16, -0,359,1,1621,1656, -16,0,638,1,40, -1657,16,0,564,1, -19,1114,1,9,1085, -1,2549,1658,16,0, -629,1,16,1659,19, -136,1,16,1660,5, -134,1,256,1661,16, -0,187,1,1261,1662, -16,0,187,1,509, -1663,16,0,187,1, -2197,1664,16,0,187, -1,9,1665,16,0, -134,1,2021,707,1, -2372,1666,17,1667,15, -1668,4,12,37,0, -69,0,118,0,101, -0,110,0,116,0, -1,-1,1,5,1669, -20,1670,4,16,69, -0,118,0,101,0, -110,0,116,0,95, -0,50,0,56,0, -1,310,1,3,1, -2,1,1,1671,22, -1,174,1,1775,1672, -16,0,187,1,2029, -714,1,2030,720,1, -2031,725,1,2032,730, -1,2033,735,1,277, -1673,16,0,187,1, -2035,741,1,2037,746, -1,2039,751,1,32, -1674,16,0,187,1, -2041,757,1,2043,762, -1,2044,767,1,40, -1675,16,0,166,1, -41,1676,16,0,187, -1,1297,1677,16,0, -187,1,43,1678,16, -0,187,1,44,1679, -16,0,166,1,1802, -774,1,1804,1680,16, -0,187,1,299,1681, -16,0,187,1,2309, -1682,16,0,187,1, -52,1683,16,0,187, -1,1515,1684,16,0, -187,1,525,1685,16, -0,187,1,62,1686, -16,0,201,1,63, -1687,16,0,166,1, -2074,1688,16,0,187, -1,1574,787,1,71, -1689,16,0,187,1, -1833,1690,16,0,330, -1,1834,1691,16,0, -187,1,79,1692,16, -0,187,1,1335,1693, -16,0,187,1,322, -1694,16,0,187,1, -76,1695,16,0,187, -1,85,1696,16,0, -187,1,89,1697,16, -0,187,1,2354,853, -1,2355,858,1,97, -1698,16,0,187,1, -2358,807,1,2360,813, -1,102,1699,16,0, -187,1,1860,820,1, -2533,1700,16,0,468, -1,346,1701,16,0, -187,1,2367,1702,17, -1703,15,1668,1,-1, -1,5,1704,20,1705, -4,16,69,0,118, -0,101,0,110,0, -116,0,95,0,51, -0,51,0,1,315, -1,3,1,2,1, -1,1706,22,1,179, -1,2368,1707,17,1708, -15,1668,1,-1,1, -5,1709,20,1710,4, -16,69,0,118,0, -101,0,110,0,116, -0,95,0,51,0, -50,0,1,314,1, -3,1,2,1,1, -1711,22,1,178,1, -2369,1712,17,1713,15, -1668,1,-1,1,5, -1714,20,1715,4,16, -69,0,118,0,101, -0,110,0,116,0, -95,0,51,0,49, -0,1,313,1,3, -1,2,1,1,1716, -22,1,177,1,2370, -1717,17,1718,15,1668, -1,-1,1,5,1719, -20,1720,4,16,69, -0,118,0,101,0, -110,0,116,0,95, -0,51,0,48,0, -1,312,1,3,1, -2,1,1,1721,22, -1,176,1,112,1722, -16,0,187,1,1117, -1723,16,0,187,1, -2373,1724,17,1725,15, -1668,1,-1,1,5, -1726,20,1727,4,16, -69,0,118,0,101, -0,110,0,116,0, -95,0,50,0,55, -0,1,309,1,3, -1,2,1,1,1728, -22,1,173,1,2374, -1729,17,1730,15,1668, -1,-1,1,5,1731, -20,1732,4,16,69, -0,118,0,101,0, -110,0,116,0,95, -0,50,0,54,0, -1,308,1,3,1, -2,1,1,1733,22, -1,172,1,1873,829, -1,2376,1734,17,1735, -15,1668,1,-1,1, -5,1736,20,1737,4, -16,69,0,118,0, -101,0,110,0,116, -0,95,0,50,0, -52,0,1,306,1, -3,1,2,1,1, -1738,22,1,170,1, -1875,1739,16,0,444, -1,2378,1740,17,1741, -15,1668,1,-1,1, -5,1742,20,1743,4, -16,69,0,118,0, -101,0,110,0,116, -0,95,0,50,0, -50,0,1,304,1, -3,1,2,1,1, -1744,22,1,168,1, -2379,1745,17,1746,15, -1668,1,-1,1,5, -1747,20,1748,4,16, -69,0,118,0,101, -0,110,0,116,0, -95,0,50,0,49, -0,1,303,1,3, -1,2,1,1,1749, -22,1,167,1,2380, -1750,17,1751,15,1668, -1,-1,1,5,1752, -20,1753,4,16,69, -0,118,0,101,0, -110,0,116,0,95, -0,50,0,48,0, -1,302,1,3,1, -2,1,1,1754,22, -1,166,1,2381,1755, -17,1756,15,1668,1, --1,1,5,1757,20, -1758,4,16,69,0, -118,0,101,0,110, -0,116,0,95,0, -49,0,57,0,1, -301,1,3,1,2, -1,1,1759,22,1, -165,1,2382,1760,17, -1761,15,1668,1,-1, -1,5,1762,20,1763, -4,16,69,0,118, -0,101,0,110,0, -116,0,95,0,49, -0,56,0,1,300, -1,3,1,2,1, -1,1764,22,1,164, -1,124,1765,16,0, -187,1,2384,1766,17, -1767,15,1668,1,-1, -1,5,1768,20,1769, -4,16,69,0,118, -0,101,0,110,0, -116,0,95,0,49, -0,54,0,1,298, -1,3,1,2,1, -1,1770,22,1,162, -1,2385,1771,17,1772, -15,1668,1,-1,1, -5,1773,20,1774,4, -16,69,0,118,0, -101,0,110,0,116, -0,95,0,49,0, -53,0,1,297,1, -3,1,2,1,1, -1775,22,1,161,1, -2386,1776,17,1777,15, -1668,1,-1,1,5, -1778,20,1779,4,16, -69,0,118,0,101, -0,110,0,116,0, -95,0,49,0,52, -0,1,296,1,3, -1,2,1,1,1780, -22,1,160,1,2387, -1781,17,1782,15,1668, -1,-1,1,5,1783, -20,1784,4,16,69, -0,118,0,101,0, -110,0,116,0,95, -0,49,0,51,0, -1,295,1,3,1, -2,1,1,1785,22, -1,159,1,2388,1786, -17,1787,15,1668,1, --1,1,5,1788,20, -1789,4,16,69,0, -118,0,101,0,110, -0,116,0,95,0, -49,0,50,0,1, -294,1,3,1,2, -1,1,1790,22,1, -158,1,2389,1791,17, -1792,15,1668,1,-1, -1,5,1793,20,1794, -4,16,69,0,118, -0,101,0,110,0, -116,0,95,0,49, -0,49,0,1,293, -1,3,1,2,1, -1,1795,22,1,157, -1,2390,1796,17,1797, -15,1668,1,-1,1, -5,1798,20,1799,4, -16,69,0,118,0, -101,0,110,0,116, -0,95,0,49,0, -48,0,1,292,1, -3,1,2,1,1, -1800,22,1,156,1, -2391,1801,17,1802,15, -1668,1,-1,1,5, -1803,20,1804,4,14, -69,0,118,0,101, -0,110,0,116,0, -95,0,57,0,1, -291,1,3,1,2, -1,1,1805,22,1, -155,1,2392,1806,17, -1807,15,1668,1,-1, -1,5,1808,20,1809, -4,14,69,0,118, -0,101,0,110,0, -116,0,95,0,56, -0,1,290,1,3, -1,2,1,1,1810, -22,1,154,1,2393, -1811,17,1812,15,1668, -1,-1,1,5,1813, -20,1814,4,14,69, -0,118,0,101,0, -110,0,116,0,95, -0,55,0,1,289, -1,3,1,2,1, -1,1815,22,1,153, -1,2394,1816,17,1817, -15,1668,1,-1,1, -5,1818,20,1819,4, -14,69,0,118,0, -101,0,110,0,116, -0,95,0,54,0, -1,288,1,3,1, -2,1,1,1820,22, -1,152,1,2395,1821, -17,1822,15,1668,1, --1,1,5,1823,20, -1824,4,14,69,0, -118,0,101,0,110, -0,116,0,95,0, -53,0,1,287,1, -3,1,2,1,1, -1825,22,1,151,1, -137,1826,16,0,187, -1,2397,1827,17,1828, -15,1668,1,-1,1, -5,1829,20,1830,4, -14,69,0,118,0, -101,0,110,0,116, -0,95,0,51,0, -1,285,1,3,1, -2,1,1,1831,22, -1,149,1,2398,1832, -17,1833,15,1668,1, --1,1,5,1834,20, -1835,4,14,69,0, -118,0,101,0,110, -0,116,0,95,0, -50,0,1,284,1, -3,1,2,1,1, -1836,22,1,148,1, -2399,1837,17,1838,15, -1668,1,-1,1,5, -1839,20,1840,4,14, -69,0,118,0,101, -0,110,0,116,0, -95,0,49,0,1, -283,1,3,1,2, -1,1,1841,22,1, -147,1,2400,1842,16, -0,354,1,381,1843, -16,0,187,1,1901, -1844,16,0,187,1, -1153,1845,16,0,187, -1,151,1846,16,0, -187,1,1407,1847,16, -0,187,1,1659,1848, -16,0,187,1,406, -1849,16,0,187,1, -1371,1850,16,0,187, -1,2104,801,1,2105, -1851,16,0,187,1, -166,1852,16,0,187, -1,1622,1853,16,0, -187,1,1931,863,1, -1932,1854,16,0,484, -1,1933,1855,16,0, -187,1,1876,1856,16, -0,187,1,431,1857, -16,0,187,1,1585, -1858,16,0,187,1, -182,1859,16,0,187, -1,1189,1860,16,0, -187,1,2371,1861,17, -1862,15,1668,1,-1, -1,5,1863,20,1864, -4,16,69,0,118, -0,101,0,110,0, -116,0,95,0,50, -0,57,0,1,311, -1,3,1,2,1, -1,1865,22,1,175, -1,1695,1866,16,0, -187,1,2375,1867,17, -1868,15,1668,1,-1, -1,5,1869,20,1870, -4,16,69,0,118, -0,101,0,110,0, -116,0,95,0,50, -0,53,0,1,307, -1,3,1,2,1, -1,1871,22,1,171, -1,2377,1872,17,1873, -15,1668,1,-1,1, -5,1874,20,1875,4, -16,69,0,118,0, -101,0,110,0,116, -0,95,0,50,0, -51,0,1,305,1, -3,1,2,1,1, -1876,22,1,169,1, -2135,836,1,447,1877, -16,0,187,1,199, -1878,16,0,187,1, -2383,1879,17,1880,15, -1668,1,-1,1,5, -1881,20,1882,4,16, -69,0,118,0,101, -0,110,0,116,0, -95,0,49,0,55, -0,1,299,1,3, -1,2,1,1,1883, -22,1,163,1,1958, -1884,16,0,187,1, -2550,1885,16,0,187, -1,1657,878,1,1658, -1886,16,0,659,1, -459,1887,16,0,187, -1,462,1888,16,0, -187,1,2396,1889,17, -1890,15,1668,1,-1, -1,5,1891,20,1892, -4,14,69,0,118, -0,101,0,110,0, -116,0,95,0,52, -0,1,286,1,3, -1,2,1,1,1893, -22,1,150,1,217, -1894,16,0,187,1, -2226,886,1,1225,1895, -16,0,187,1,1479, -1896,16,0,187,1, -1731,1897,16,0,187, -1,1989,894,1,1990, -1898,16,0,187,1, -1443,1899,16,0,187, -1,236,1900,16,0, -187,1,1756,1901,16, -0,187,1,17,1902, -19,154,1,17,1903, -5,116,1,1,1904, -17,1905,15,1906,4, -18,37,0,84,0, -121,0,112,0,101, -0,110,0,97,0, -109,0,101,0,1, --1,1,5,1907,20, -1908,4,20,84,0, -121,0,112,0,101, -0,110,0,97,0, -109,0,101,0,95, -0,55,0,1,282, -1,3,1,2,1, -1,1909,22,1,146, -1,2,1910,17,1911, -15,1906,1,-1,1, -5,1912,20,1913,4, -20,84,0,121,0, -112,0,101,0,110, -0,97,0,109,0, -101,0,95,0,54, -0,1,281,1,3, -1,2,1,1,1914, -22,1,145,1,3, -1915,17,1916,15,1906, -1,-1,1,5,1917, -20,1918,4,20,84, -0,121,0,112,0, -101,0,110,0,97, -0,109,0,101,0, -95,0,53,0,1, -280,1,3,1,2, -1,1,1919,22,1, -144,1,4,1920,17, -1921,15,1906,1,-1, -1,5,1922,20,1923, -4,20,84,0,121, -0,112,0,101,0, -110,0,97,0,109, -0,101,0,95,0, -52,0,1,279,1, -3,1,2,1,1, -1924,22,1,143,1, -5,1925,17,1926,15, -1906,1,-1,1,5, -1927,20,1928,4,20, -84,0,121,0,112, -0,101,0,110,0, -97,0,109,0,101, -0,95,0,51,0, -1,278,1,3,1, -2,1,1,1929,22, -1,142,1,6,1930, -17,1931,15,1906,1, --1,1,5,1932,20, -1933,4,20,84,0, -121,0,112,0,101, -0,110,0,97,0, -109,0,101,0,95, -0,50,0,1,277, -1,3,1,2,1, -1,1934,22,1,141, -1,7,1935,17,1936, -15,1906,1,-1,1, -5,1937,20,1938,4, -20,84,0,121,0, -112,0,101,0,110, -0,97,0,109,0, -101,0,95,0,49, -0,1,276,1,3, -1,2,1,1,1939, -22,1,140,1,1514, -1080,1,9,1085,1, -10,1603,1,262,1091, -1,1267,1097,1,1521, -1102,1,1773,1940,16, -0,235,1,19,1114, -1,20,1941,16,0, -152,1,2280,1121,1, -525,1184,1,2534,1609, -1,30,1611,1,283, -1144,1,2543,1942,16, -0,476,1,1010,1943, -16,0,592,1,40, -1133,1,41,1617,1, -42,1621,1,44,1149, -1,1260,1068,1,47, -1151,1,1303,1279,1, -49,1163,1,50,1174, -1,48,1157,1,305, -1179,1,51,1169,1, -61,1944,16,0,193, -1,63,1190,1,2073, -1945,16,0,566,1, -66,1196,1,67,1201, -1,68,1206,1,69, -1211,1,70,1216,1, -73,1946,16,0,203, -1,74,1221,1,1013, -1226,1,328,1274,1, -1048,1236,1,82,1252, -1,1840,1947,16,0, -364,1,1341,1269,1, -1094,1948,16,0,654, -1,1096,1284,1,93, -1290,1,1550,1295,1, -827,1347,1,2363,1627, -1,1011,1074,1,107, -1308,1,1114,1313,1, -1871,1949,16,0,374, -1,1370,1476,1,1478, -1417,1,118,1316,1, -1123,1321,1,1332,1231, -1,1377,1332,1,375, -1337,1,1882,1950,16, -0,406,1,377,1342, -1,352,1301,1,379, -1375,1,380,1352,1, -130,1358,1,371,1326, -1,373,1370,1,1012, -1951,16,0,594,1, -2401,1632,1,143,1380, -1,1152,1386,1,1406, -1392,1,1159,1397,1, -157,1402,1,1413,1407, -1,883,1412,1,1296, -1139,1,172,1428,1, -1665,1486,1,1939,1952, -16,0,452,1,1188, -1433,1,1442,1438,1, -2196,1953,16,0,649, -1,942,1444,1,1195, -1449,1,1449,1454,1, -1701,1459,1,447,1464, -1,188,1471,1,205, -1481,1,459,1639,1, -464,1642,1,1224,1492, -1,223,1497,1,1730, -1502,1,476,1507,1, -477,1513,1,1231,1518, -1,2410,1954,16,0, -362,1,480,1528,1, -1485,1534,1,242,1541, -1,478,1546,1,479, -1523,1,481,1648,1, -1001,1551,1,1002,1556, -1,18,1955,19,496, -1,18,1956,5,83, -1,1011,1074,1,1012, -1957,16,0,494,1, -1013,1226,1,262,1091, -1,1267,1958,16,0, -494,1,515,1959,16, -0,494,1,1521,1960, -16,0,494,1,525, -1184,1,283,1144,1, -40,1133,1,42,1961, -16,0,494,1,44, -1149,1,2556,1962,16, -0,494,1,47,1151, -1,1303,1963,16,0, -494,1,1555,1964,16, -0,494,1,50,1174, -1,48,1157,1,49, -1163,1,51,1169,1, -63,1190,1,305,1179, -1,66,1196,1,67, -1201,1,68,1206,1, -69,1211,1,70,1216, -1,73,1965,16,0, -494,1,74,1221,1, -328,1274,1,1048,1966, -16,0,494,1,82, -1967,16,0,494,1, -1840,1968,16,0,494, -1,1591,1969,16,0, -494,1,1341,1970,16, -0,494,1,1096,1284, -1,93,1290,1,352, -1301,1,107,1971,16, -0,494,1,1114,1313, -1,118,1972,16,0, -494,1,1123,1973,16, -0,494,1,371,1326, -1,1628,1974,16,0, -494,1,375,1337,1, -1882,1975,16,0,494, -1,377,1342,1,379, -1375,1,380,1352,1, -883,1976,16,0,494, -1,373,1370,1,130, -1977,16,0,494,1, -143,1978,16,0,494, -1,387,1979,16,0, -494,1,1159,1980,16, -0,494,1,157,1981, -16,0,494,1,1413, -1982,16,0,494,1, -1665,1983,16,0,494, -1,412,1984,16,0, -494,1,1377,1985,16, -0,494,1,172,1986, -16,0,494,1,1939, -1987,16,0,494,1, -437,1988,16,0,494, -1,188,1989,16,0, -494,1,942,1990,16, -0,494,1,1195,1991, -16,0,494,1,1449, -1992,16,0,494,1, -1701,1993,16,0,494, -1,447,1464,1,205, -1994,16,0,494,1, -827,1995,16,0,494, -1,223,1996,16,0, -494,1,476,1507,1, -477,1513,1,1231,1997, -16,0,494,1,479, -1523,1,480,1528,1, -1485,1998,16,0,494, -1,1737,1999,16,0, -494,1,242,2000,16, -0,494,1,478,1546, -1,1001,1551,1,1002, -1556,1,19,2001,19, -227,1,19,2002,5, -171,1,256,2003,16, -0,225,1,1261,2004, -16,0,225,1,1011, -1074,1,1012,2005,16, -0,483,1,1515,2006, -16,0,225,1,262, -1091,1,1267,2007,16, -0,483,1,2021,707, -1,1521,2008,16,0, -483,1,1775,2009,16, -0,225,1,2029,714, -1,2030,720,1,2031, -725,1,2032,730,1, -2033,735,1,277,2010, -16,0,225,1,2035, -741,1,2037,746,1, -2039,751,1,32,2011, -16,0,225,1,2041, -757,1,2043,762,1, -2044,767,1,40,1133, -1,41,2012,16,0, -225,1,42,2013,16, -0,483,1,43,2014, -16,0,225,1,44, -1149,1,1802,774,1, -2556,2015,16,0,483, -1,1804,2016,16,0, -225,1,48,1157,1, -49,1163,1,2309,2017, -16,0,225,1,51, -1169,1,52,2018,16, -0,225,1,47,1151, -1,305,1179,1,50, -1174,1,509,2019,16, -0,225,1,299,2020, -16,0,225,1,283, -1144,1,63,1190,1, -1002,1556,1,66,1196, -1,67,1201,1,68, -1206,1,69,1211,1, -70,1216,1,71,2021, -16,0,225,1,73, -2022,16,0,483,1, -74,1221,1,1013,1226, -1,76,2023,16,0, -225,1,1834,2024,16, -0,225,1,1048,2025, -16,0,483,1,79, -2026,16,0,225,1, -1335,2027,16,0,225, -1,82,2028,16,0, -483,1,1840,2029,16, -0,483,1,1297,2030, -16,0,225,1,85, -2031,16,0,225,1, -1341,2032,16,0,483, -1,89,2033,16,0, -225,1,1303,2034,16, -0,483,1,1096,1284, -1,93,1290,1,2354, -853,1,2355,858,1, -97,2035,16,0,225, -1,2358,807,1,2360, -813,1,102,2036,16, -0,225,1,1860,820, -1,107,2037,16,0, -483,1,1114,1313,1, -112,2038,16,0,225, -1,1117,2039,16,0, -225,1,352,1301,1, -1873,829,1,118,2040, -16,0,483,1,1123, -2041,16,0,483,1, -371,1326,1,2550,2042, -16,0,225,1,1377, -2043,16,0,483,1, -124,2044,16,0,225, -1,1882,2045,16,0, -483,1,377,1342,1, -2135,836,1,827,2046, -16,0,483,1,380, -1352,1,130,2047,16, -0,483,1,322,2048, -16,0,225,1,2074, -2049,16,0,225,1, -373,1370,1,387,2050, -16,0,483,1,137, -2051,16,0,225,1, -515,2052,16,0,483, -1,379,1375,1,143, -2053,16,0,483,1, -1901,2054,16,0,225, -1,2197,2055,16,0, -225,1,1153,2056,16, -0,225,1,375,1337, -1,151,2057,16,0, -225,1,1407,2058,16, -0,225,1,1659,2059, -16,0,225,1,1159, -2060,16,0,483,1, -381,2061,16,0,225, -1,157,2062,16,0, -483,1,1413,2063,16, -0,483,1,883,2064, -16,0,483,1,1371, -2065,16,0,225,1, -328,1274,1,2104,801, -1,2105,2066,16,0, -225,1,166,2067,16, -0,225,1,346,2068, -16,0,225,1,1622, -2069,16,0,225,1, -406,2070,16,0,225, -1,1574,787,1,172, -2071,16,0,483,1, -1931,863,1,412,2072, -16,0,483,1,1933, -2073,16,0,225,1, -1876,2074,16,0,225, -1,431,2075,16,0, -225,1,1585,2076,16, -0,225,1,182,2077, -16,0,225,1,1628, -2078,16,0,483,1, -1189,2079,16,0,225, -1,437,2080,16,0, -483,1,1591,2081,16, -0,483,1,188,2082, -16,0,483,1,1695, -2083,16,0,225,1, -1195,2084,16,0,483, -1,1449,2085,16,0, -483,1,1701,2086,16, -0,483,1,447,2087, -16,0,225,1,199, -2088,16,0,225,1, -1958,2089,16,0,225, -1,525,2090,16,0, -225,1,1657,878,1, -205,2091,16,0,483, -1,459,2092,16,0, -225,1,462,2093,16, -0,225,1,1665,2094, -16,0,483,1,217, -2095,16,0,225,1, -2226,886,1,942,2096, -16,0,483,1,1225, -2097,16,0,225,1, -223,2098,16,0,483, -1,1479,2099,16,0, -225,1,1731,2100,16, -0,225,1,477,1513, -1,1231,2101,16,0, -483,1,479,1523,1, -480,1528,1,1485,2102, -16,0,483,1,1737, -2103,16,0,483,1, -1989,894,1,1990,2104, -16,0,225,1,1443, -2105,16,0,225,1, -236,2106,16,0,225, -1,476,1507,1,242, -2107,16,0,483,1, -478,1546,1,1939,2108, -16,0,483,1,1001, -1551,1,1555,2109,16, -0,483,1,1756,2110, -16,0,225,1,20, -2111,19,458,1,20, -2112,5,83,1,1011, -1074,1,1012,2113,16, -0,456,1,1013,1226, -1,262,1091,1,1267, -2114,16,0,456,1, -515,2115,16,0,456, -1,1521,2116,16,0, -456,1,525,1184,1, -283,1144,1,40,1133, -1,42,2117,16,0, -456,1,44,1149,1, -2556,2118,16,0,456, -1,47,1151,1,1303, -2119,16,0,456,1, -1555,2120,16,0,456, -1,50,1174,1,48, -1157,1,49,1163,1, -51,1169,1,63,1190, -1,305,1179,1,66, -1196,1,67,1201,1, -68,1206,1,69,1211, -1,70,1216,1,73, -2121,16,0,456,1, -74,1221,1,328,2122, -16,0,456,1,1048, -2123,16,0,456,1, -82,2124,16,0,456, -1,1840,2125,16,0, -456,1,1591,2126,16, -0,456,1,1341,2127, -16,0,456,1,1096, -1284,1,93,1290,1, -352,2128,16,0,456, -1,107,2129,16,0, -456,1,1114,1313,1, -118,2130,16,0,456, -1,1123,2131,16,0, -456,1,371,1326,1, -1628,2132,16,0,456, -1,375,1337,1,1882, -2133,16,0,456,1, -377,1342,1,379,1375, -1,380,1352,1,883, -2134,16,0,456,1, -373,1370,1,130,2135, -16,0,456,1,143, -2136,16,0,456,1, -387,2137,16,0,456, -1,1159,2138,16,0, -456,1,157,2139,16, -0,456,1,1413,2140, -16,0,456,1,1665, -2141,16,0,456,1, -412,2142,16,0,456, -1,1377,2143,16,0, -456,1,172,2144,16, -0,456,1,1939,2145, -16,0,456,1,437, -2146,16,0,456,1, -188,2147,16,0,456, -1,942,2148,16,0, -456,1,1195,2149,16, -0,456,1,1449,2150, -16,0,456,1,1701, -2151,16,0,456,1, -447,1464,1,205,2152, -16,0,456,1,827, -2153,16,0,456,1, -223,2154,16,0,456, -1,476,1507,1,477, -1513,1,1231,2155,16, -0,456,1,479,1523, -1,480,1528,1,1485, -2156,16,0,456,1, -1737,2157,16,0,456, -1,242,2158,16,0, -456,1,478,1546,1, -1001,1551,1,1002,1556, -1,21,2159,19,449, -1,21,2160,5,83, -1,1011,1074,1,1012, -2161,16,0,447,1, -1013,1226,1,262,1091, -1,1267,2162,16,0, -447,1,515,2163,16, -0,447,1,1521,2164, -16,0,447,1,525, -1184,1,283,1144,1, -40,1133,1,42,2165, -16,0,447,1,44, -1149,1,2556,2166,16, -0,447,1,47,1151, -1,1303,2167,16,0, -447,1,1555,2168,16, -0,447,1,50,1174, -1,48,1157,1,49, -1163,1,51,1169,1, -63,1190,1,305,1179, -1,66,1196,1,67, -1201,1,68,1206,1, -69,1211,1,70,1216, -1,73,2169,16,0, -447,1,74,1221,1, -328,2170,16,0,447, -1,1048,2171,16,0, -447,1,82,2172,16, -0,447,1,1840,2173, -16,0,447,1,1591, -2174,16,0,447,1, -1341,2175,16,0,447, -1,1096,1284,1,93, -1290,1,352,2176,16, -0,447,1,107,2177, -16,0,447,1,1114, -1313,1,118,2178,16, -0,447,1,1123,2179, -16,0,447,1,371, -1326,1,1628,2180,16, -0,447,1,375,1337, -1,1882,2181,16,0, -447,1,377,1342,1, -379,1375,1,380,1352, -1,883,2182,16,0, -447,1,373,1370,1, -130,2183,16,0,447, -1,143,2184,16,0, -447,1,387,2185,16, -0,447,1,1159,2186, -16,0,447,1,157, -2187,16,0,447,1, -1413,2188,16,0,447, -1,1665,2189,16,0, -447,1,412,2190,16, -0,447,1,1377,2191, -16,0,447,1,172, -2192,16,0,447,1, -1939,2193,16,0,447, -1,437,2194,16,0, -447,1,188,2195,16, -0,447,1,942,2196, -16,0,447,1,1195, -2197,16,0,447,1, -1449,2198,16,0,447, -1,1701,2199,16,0, -447,1,447,1464,1, -205,2200,16,0,447, -1,827,2201,16,0, -447,1,223,2202,16, -0,447,1,476,1507, -1,477,1513,1,1231, -2203,16,0,447,1, -479,1523,1,480,1528, -1,1485,2204,16,0, -447,1,1737,2205,16, -0,447,1,242,2206, -16,0,447,1,478, -1546,1,1001,1551,1, -1002,1556,1,22,2207, -19,435,1,22,2208, -5,83,1,1011,1074, -1,1012,2209,16,0, -433,1,1013,1226,1, -262,1091,1,1267,2210, -16,0,433,1,515, -2211,16,0,433,1, -1521,2212,16,0,433, -1,525,1184,1,283, -1144,1,40,1133,1, -42,2213,16,0,433, -1,44,1149,1,2556, -2214,16,0,433,1, -47,1151,1,1303,2215, -16,0,433,1,1555, -2216,16,0,433,1, -50,1174,1,48,1157, -1,49,1163,1,51, -1169,1,63,1190,1, -305,1179,1,66,1196, -1,67,1201,1,68, -1206,1,69,1211,1, -70,1216,1,73,2217, -16,0,433,1,74, -1221,1,328,2218,16, -0,433,1,1048,2219, -16,0,433,1,82, -2220,16,0,433,1, -1840,2221,16,0,433, -1,1591,2222,16,0, -433,1,1341,2223,16, -0,433,1,1096,1284, -1,93,1290,1,352, -2224,16,0,433,1, -107,2225,16,0,433, -1,1114,1313,1,118, -2226,16,0,433,1, -1123,2227,16,0,433, -1,371,1326,1,1628, -2228,16,0,433,1, -375,1337,1,1882,2229, -16,0,433,1,377, -1342,1,379,1375,1, -380,1352,1,883,2230, -16,0,433,1,373, -1370,1,130,2231,16, -0,433,1,143,2232, -16,0,433,1,387, -2233,16,0,433,1, -1159,2234,16,0,433, -1,157,2235,16,0, -433,1,1413,2236,16, -0,433,1,1665,2237, -16,0,433,1,412, -2238,16,0,433,1, -1377,2239,16,0,433, -1,172,2240,16,0, -433,1,1939,2241,16, -0,433,1,437,2242, -16,0,433,1,188, -2243,16,0,433,1, -942,2244,16,0,433, -1,1195,2245,16,0, -433,1,1449,2246,16, -0,433,1,1701,2247, -16,0,433,1,447, -1464,1,205,2248,16, -0,433,1,827,2249, -16,0,433,1,223, -2250,16,0,433,1, -476,1507,1,477,1513, -1,1231,2251,16,0, -433,1,479,1523,1, -480,1528,1,1485,2252, -16,0,433,1,1737, -2253,16,0,433,1, -242,2254,16,0,433, -1,478,1546,1,1001, -1551,1,1002,1556,1, -23,2255,19,508,1, -23,2256,5,36,1, -2074,2257,16,0,506, -1,1860,820,1,2197, -2258,16,0,506,1, -2309,2259,16,0,506, -1,1657,878,1,2031, -725,1,1989,894,1, -1990,2260,16,0,506, -1,1775,2261,16,0, -506,1,32,2262,16, -0,506,1,2104,801, -1,2105,2263,16,0, -506,1,2226,886,1, -1901,2264,16,0,506, -1,1802,774,1,2021, -707,1,1804,2265,16, -0,506,1,2135,836, -1,2354,853,1,2355, -858,1,2029,714,1, -2030,720,1,2358,807, -1,2032,730,1,2360, -813,1,2035,741,1, -2037,746,1,2039,751, -1,1931,863,1,2041, -757,1,1873,829,1, -2043,762,1,2044,767, -1,2033,735,1,1574, -787,1,1958,2266,16, -0,506,1,24,2267, -19,177,1,24,2268, -5,5,1,44,2269, -16,0,175,1,377, -2270,16,0,544,1, -40,2271,16,0,662, -1,63,2272,16,0, -195,1,373,2273,16, -0,540,1,25,2274, -19,339,1,25,2275, -5,172,1,256,2276, -16,0,549,1,1261, -2277,16,0,549,1, -1011,1074,1,1012,2278, -16,0,337,1,1515, -2279,16,0,549,1, -262,1091,1,1267,2280, -16,0,337,1,2021, -707,1,1521,2281,16, -0,337,1,1775,2282, -16,0,549,1,2029, -714,1,2030,720,1, -2031,725,1,2032,730, -1,2033,735,1,277, -2283,16,0,549,1, -2035,741,1,2037,746, -1,2039,751,1,32, -2284,16,0,549,1, -2041,757,1,2043,762, -1,2044,767,1,40, -1133,1,41,2285,16, -0,549,1,42,2286, -16,0,337,1,43, -2287,16,0,549,1, -44,1149,1,1802,774, -1,2556,2288,16,0, -337,1,1804,2289,16, -0,549,1,48,1157, -1,49,1163,1,2309, -2290,16,0,549,1, -51,1169,1,52,2291, -16,0,549,1,47, -1151,1,305,1179,1, -50,1174,1,509,2292, -16,0,549,1,299, -2293,16,0,549,1, -62,2294,16,0,549, -1,63,1190,1,1002, -1556,1,66,1196,1, -67,1201,1,68,1206, -1,69,1211,1,70, -1216,1,71,2295,16, -0,549,1,283,1144, -1,73,2296,16,0, -337,1,74,1221,1, -1013,1226,1,76,2297, -16,0,549,1,1834, -2298,16,0,549,1, -1048,1236,1,79,2299, -16,0,549,1,1335, -2300,16,0,549,1, -82,2301,16,0,337, -1,1840,2302,16,0, -337,1,1297,2303,16, -0,549,1,85,2304, -16,0,549,1,1341, -2305,16,0,337,1, -89,2306,16,0,549, -1,1303,2307,16,0, -337,1,1096,1284,1, -93,1290,1,2354,853, -1,2355,858,1,97, -2308,16,0,549,1, -2358,807,1,2360,813, -1,102,2309,16,0, -549,1,1860,820,1, -107,2310,16,0,337, -1,1114,1313,1,112, -2311,16,0,549,1, -1117,2312,16,0,549, -1,352,1301,1,1873, -829,1,118,1316,1, -1123,2313,16,0,337, -1,371,1326,1,2550, -2314,16,0,549,1, -1377,2315,16,0,337, -1,124,2316,16,0, -549,1,1882,2317,16, -0,337,1,377,1342, -1,2135,836,1,827, -2318,16,0,337,1, -380,1352,1,130,1358, -1,322,2319,16,0, -549,1,2074,2320,16, -0,549,1,373,1370, -1,387,2321,16,0, -337,1,137,2322,16, -0,549,1,515,2323, -16,0,337,1,379, -1375,1,143,2324,16, -0,337,1,1901,2325, -16,0,549,1,2197, -2326,16,0,549,1, -1153,2327,16,0,549, -1,375,1337,1,151, -2328,16,0,549,1, -1407,2329,16,0,549, -1,1659,2330,16,0, -549,1,1159,2331,16, -0,337,1,381,2332, -16,0,549,1,157, -2333,16,0,337,1, -1413,2334,16,0,337, -1,883,2335,16,0, -337,1,1371,2336,16, -0,549,1,328,1274, -1,2104,801,1,2105, -2337,16,0,549,1, -166,2338,16,0,549, -1,346,2339,16,0, -549,1,1622,2340,16, -0,549,1,406,2341, -16,0,549,1,1574, -787,1,172,1428,1, -1931,863,1,412,2342, -16,0,337,1,1933, -2343,16,0,549,1, -1876,2344,16,0,549, -1,431,2345,16,0, -549,1,1585,2346,16, -0,549,1,182,2347, -16,0,549,1,1628, -2348,16,0,337,1, -1189,2349,16,0,549, -1,437,2350,16,0, -337,1,1591,2351,16, -0,337,1,188,1471, -1,1695,2352,16,0, -549,1,1195,2353,16, -0,337,1,1449,2354, -16,0,337,1,1701, -2355,16,0,337,1, -447,2356,16,0,549, -1,199,2357,16,0, -549,1,1958,2358,16, -0,549,1,525,2359, -16,0,549,1,1657, -878,1,205,2360,16, -0,337,1,459,2361, -16,0,549,1,462, -2362,16,0,549,1, -1665,2363,16,0,337, -1,217,2364,16,0, -549,1,2226,886,1, -942,1444,1,1225,2365, -16,0,549,1,223, -2366,16,0,337,1, -1479,2367,16,0,549, -1,1731,2368,16,0, -549,1,477,1513,1, -1231,2369,16,0,337, -1,479,1523,1,480, -1528,1,1485,2370,16, -0,337,1,1737,2371, -16,0,337,1,1989, -894,1,1990,2372,16, -0,549,1,1443,2373, -16,0,549,1,236, -2374,16,0,549,1, -476,1507,1,242,2375, -16,0,337,1,478, -1546,1,1939,2376,16, -0,337,1,1001,1551, -1,1555,2377,16,0, -337,1,1756,2378,16, -0,549,1,26,2379, -19,369,1,26,2380, -5,83,1,1011,1074, -1,1012,2381,16,0, -367,1,1013,1226,1, -262,1091,1,1267,2382, -16,0,367,1,515, -2383,16,0,648,1, -1521,2384,16,0,367, -1,525,1184,1,283, -1144,1,40,1133,1, -42,2385,16,0,367, -1,44,1149,1,2556, -2386,16,0,367,1, -47,1151,1,1303,2387, -16,0,367,1,1555, -2388,16,0,367,1, -50,1174,1,48,1157, -1,49,1163,1,51, -1169,1,63,1190,1, -305,1179,1,66,1196, -1,67,1201,1,68, -1206,1,69,1211,1, -70,1216,1,73,2389, -16,0,367,1,74, -1221,1,328,1274,1, -1048,1236,1,82,2390, -16,0,367,1,1840, -2391,16,0,367,1, -1591,2392,16,0,367, -1,1341,2393,16,0, -367,1,1096,1284,1, -93,1290,1,352,1301, -1,107,2394,16,0, -367,1,1114,1313,1, -118,1316,1,1123,2395, -16,0,367,1,371, -1326,1,1628,2396,16, -0,367,1,375,1337, -1,1882,2397,16,0, -367,1,377,1342,1, -379,1375,1,380,1352, -1,883,2398,16,0, -367,1,373,1370,1, -130,1358,1,143,2399, -16,0,367,1,387, -2400,16,0,367,1, -1159,2401,16,0,367, -1,157,2402,16,0, -367,1,1413,2403,16, -0,367,1,1665,2404, -16,0,367,1,412, -2405,16,0,367,1, -1377,2406,16,0,367, -1,172,1428,1,1939, -2407,16,0,367,1, -437,2408,16,0,587, -1,188,1471,1,942, -1444,1,1195,2409,16, -0,367,1,1449,2410, -16,0,367,1,1701, -2411,16,0,367,1, -447,1464,1,205,2412, -16,0,367,1,827, -2413,16,0,367,1, -223,2414,16,0,367, -1,476,1507,1,477, -1513,1,1231,2415,16, -0,367,1,479,1523, -1,480,1528,1,1485, -2416,16,0,367,1, -1737,2417,16,0,367, -1,242,2418,16,0, -367,1,478,1546,1, -1001,1551,1,1002,1556, -1,27,2419,19,597, -1,27,2420,5,91, -1,256,2421,16,0, -595,1,1261,2422,16, -0,595,1,509,2423, -16,0,595,1,2197, -2424,16,0,595,1, -1515,2425,16,0,595, -1,2021,707,1,1775, -2426,16,0,595,1, -2029,714,1,2030,720, -1,2031,725,1,2032, -730,1,2033,735,1, -277,2427,16,0,595, -1,2035,741,1,2037, -746,1,2039,751,1, -32,2428,16,0,595, -1,2041,757,1,2043, -762,1,2044,767,1, -2550,2429,16,0,595, -1,41,2430,16,0, -595,1,1297,2431,16, -0,595,1,43,2432, -16,0,595,1,1802, -774,1,1804,2433,16, -0,595,1,299,2434, -16,0,595,1,2309, -2435,16,0,595,1, -52,2436,16,0,595, -1,525,2437,16,0, -595,1,62,2438,16, -0,595,1,2074,2439, -16,0,595,1,1574, -787,1,71,2440,16, -0,595,1,76,2441, -16,0,595,1,1834, -2442,16,0,595,1, -1585,2443,16,0,595, -1,1335,2444,16,0, -595,1,79,2445,16, -0,595,1,85,2446, -16,0,595,1,89, -2447,16,0,595,1, -346,2448,16,0,595, -1,2104,801,1,2105, -2449,16,0,595,1, -2358,807,1,2360,813, -1,97,2450,16,0, -595,1,1860,820,1, -102,2451,16,0,595, -1,112,2452,16,0, -595,1,1117,2453,16, -0,595,1,1873,829, -1,1876,2454,16,0, -595,1,124,2455,16, -0,595,1,2135,836, -1,381,2456,16,0, -595,1,322,2457,16, -0,595,1,137,2458, -16,0,595,1,1901, -2459,16,0,595,1, -1153,2460,16,0,595, -1,151,2461,16,0, -595,1,1407,2462,16, -0,595,1,1659,2463, -16,0,595,1,406, -2464,16,0,595,1, -1371,2465,16,0,595, -1,166,2466,16,0, -595,1,1622,2467,16, -0,595,1,2354,853, -1,2355,858,1,1931, -863,1,1933,2468,16, -0,595,1,431,2469, -16,0,595,1,182, -2470,16,0,595,1, -1189,2471,16,0,595, -1,1443,2472,16,0, -595,1,1695,2473,16, -0,595,1,447,2474, -16,0,595,1,199, -2475,16,0,595,1, -1958,2476,16,0,595, -1,1657,878,1,459, -2477,16,0,595,1, -462,2478,16,0,595, -1,217,2479,16,0, -595,1,2226,886,1, -1225,2480,16,0,595, -1,1479,2481,16,0, -595,1,1731,2482,16, -0,595,1,1989,894, -1,1990,2483,16,0, -595,1,236,2484,16, -0,595,1,1756,2485, -16,0,595,1,28, -2486,19,627,1,28, -2487,5,60,1,328, -1274,1,223,1497,1, -1096,1284,1,118,1316, -1,883,1412,1,525, -1184,1,1001,1551,1, -130,1358,1,459,1639, -1,1114,1313,1,352, -1301,1,447,1464,1, -464,1642,1,1011,1074, -1,1013,1226,1,242, -1541,1,143,1380,1, -40,1133,1,41,1617, -1,42,1621,1,479, -1523,1,44,1149,1, -481,1648,1,373,1370, -1,47,1151,1,157, -1402,1,49,1163,1, -50,1174,1,48,1157, -1,379,1375,1,380, -1352,1,51,1169,1, -476,1507,1,371,1326, -1,478,1546,1,1048, -1236,1,375,1337,1, -172,1428,1,262,1091, -1,283,1144,1,63, -1190,1,67,1201,1, -68,1206,1,69,1211, -1,66,1196,1,461, -2488,16,0,625,1, -74,1221,1,377,1342, -1,1002,1556,1,70, -1216,1,188,1471,1, -82,1252,1,305,1179, -1,477,1513,1,827, -1347,1,93,1290,1, -480,1528,1,205,1481, -1,942,1444,1,107, -1308,1,29,2489,19, -304,1,29,2490,5, -83,1,1011,1074,1, -1012,2491,16,0,302, -1,1013,1226,1,262, -1091,1,1267,2492,16, -0,302,1,515,2493, -16,0,302,1,1521, -2494,16,0,302,1, -525,1184,1,283,1144, -1,40,1133,1,42, -2495,16,0,302,1, -44,1149,1,2556,2496, -16,0,302,1,47, -1151,1,1303,2497,16, -0,302,1,1555,2498, -16,0,302,1,50, -1174,1,48,1157,1, -49,1163,1,51,1169, -1,63,1190,1,305, -1179,1,66,1196,1, -67,1201,1,68,1206, -1,69,1211,1,70, -1216,1,73,2499,16, -0,302,1,74,1221, -1,328,1274,1,1048, -1236,1,82,2500,16, -0,302,1,1840,2501, -16,0,302,1,1591, -2502,16,0,302,1, -1341,2503,16,0,302, -1,1096,1284,1,93, -1290,1,352,1301,1, -107,2504,16,0,302, -1,1114,1313,1,118, -1316,1,1123,2505,16, -0,302,1,371,1326, -1,1628,2506,16,0, -302,1,375,1337,1, -1882,2507,16,0,302, -1,377,1342,1,379, -1375,1,380,1352,1, -883,2508,16,0,302, -1,373,1370,1,130, -1358,1,143,1380,1, -387,2509,16,0,302, -1,1159,2510,16,0, -302,1,157,1402,1, -1413,2511,16,0,302, -1,1665,2512,16,0, -302,1,412,2513,16, -0,302,1,1377,2514, -16,0,302,1,172, -1428,1,1939,2515,16, -0,302,1,437,2516, -16,0,302,1,188, -1471,1,942,1444,1, -1195,2517,16,0,302, -1,1449,2518,16,0, -302,1,1701,2519,16, -0,302,1,447,1464, -1,205,2520,16,0, -302,1,827,2521,16, -0,302,1,223,2522, -16,0,302,1,476, -1507,1,477,1513,1, -1231,2523,16,0,302, -1,479,1523,1,480, -1528,1,1485,2524,16, -0,302,1,1737,2525, -16,0,302,1,242, -2526,16,0,302,1, -478,1546,1,1001,1551, -1,1002,1556,1,30, -2527,19,272,1,30, -2528,5,83,1,1011, -1074,1,1012,2529,16, -0,270,1,1013,1226, -1,262,1091,1,1267, -2530,16,0,270,1, -515,2531,16,0,270, -1,1521,2532,16,0, -270,1,525,1184,1, -283,1144,1,40,1133, -1,42,2533,16,0, -270,1,44,1149,1, -2556,2534,16,0,270, -1,47,1151,1,1303, -2535,16,0,270,1, -1555,2536,16,0,270, -1,50,1174,1,48, -1157,1,49,1163,1, -51,1169,1,63,1190, -1,305,1179,1,66, -1196,1,67,1201,1, -68,1206,1,69,1211, -1,70,1216,1,73, -2537,16,0,270,1, -74,1221,1,328,1274, -1,1048,1236,1,82, -2538,16,0,270,1, -1840,2539,16,0,270, -1,1591,2540,16,0, -270,1,1341,2541,16, -0,270,1,1096,1284, -1,93,1290,1,352, -1301,1,107,2542,16, -0,270,1,1114,1313, -1,118,1316,1,1123, -2543,16,0,270,1, -371,1326,1,1628,2544, -16,0,270,1,375, -1337,1,1882,2545,16, -0,270,1,377,1342, -1,379,1375,1,380, -1352,1,883,2546,16, -0,270,1,373,1370, -1,130,1358,1,143, -1380,1,387,2547,16, -0,270,1,1159,2548, -16,0,270,1,157, -1402,1,1413,2549,16, -0,270,1,1665,2550, -16,0,270,1,412, -2551,16,0,270,1, -1377,2552,16,0,270, -1,172,1428,1,1939, -2553,16,0,270,1, -437,2554,16,0,270, -1,188,1471,1,942, -1444,1,1195,2555,16, -0,270,1,1449,2556, -16,0,270,1,1701, -2557,16,0,270,1, -447,1464,1,205,2558, -16,0,270,1,827, -2559,16,0,270,1, -223,2560,16,0,270, -1,476,1507,1,477, -1513,1,1231,2561,16, -0,270,1,479,1523, -1,480,1528,1,1485, -2562,16,0,270,1, -1737,2563,16,0,270, -1,242,2564,16,0, -270,1,478,1546,1, -1001,1551,1,1002,1556, -1,31,2565,19,251, -1,31,2566,5,83, -1,1011,1074,1,1012, -2567,16,0,249,1, -1013,1226,1,262,1091, -1,1267,2568,16,0, -249,1,515,2569,16, -0,249,1,1521,2570, -16,0,249,1,525, -1184,1,283,1144,1, -40,1133,1,42,2571, -16,0,249,1,44, -1149,1,2556,2572,16, -0,249,1,47,1151, -1,1303,2573,16,0, -249,1,1555,2574,16, -0,249,1,50,1174, -1,48,1157,1,49, -1163,1,51,1169,1, -63,1190,1,305,1179, -1,66,1196,1,67, -1201,1,68,1206,1, -69,1211,1,70,1216, -1,73,2575,16,0, -249,1,74,1221,1, -328,1274,1,1048,1236, -1,82,2576,16,0, -249,1,1840,2577,16, -0,249,1,1591,2578, -16,0,249,1,1341, -2579,16,0,249,1, -1096,1284,1,93,1290, -1,352,1301,1,107, -2580,16,0,249,1, -1114,1313,1,118,1316, -1,1123,2581,16,0, -249,1,371,1326,1, -1628,2582,16,0,249, -1,375,1337,1,1882, -2583,16,0,249,1, -377,1342,1,379,1375, -1,380,1352,1,883, -2584,16,0,249,1, -373,1370,1,130,1358, -1,143,2585,16,0, -249,1,387,2586,16, -0,249,1,1159,2587, -16,0,249,1,157, -2588,16,0,249,1, -1413,2589,16,0,249, -1,1665,2590,16,0, -249,1,412,2591,16, -0,249,1,1377,2592, -16,0,249,1,172, -1428,1,1939,2593,16, -0,249,1,437,2594, -16,0,249,1,188, -1471,1,942,1444,1, -1195,2595,16,0,249, -1,1449,2596,16,0, -249,1,1701,2597,16, -0,249,1,447,1464, -1,205,2598,16,0, -249,1,827,2599,16, -0,249,1,223,2600, -16,0,249,1,476, -1507,1,477,1513,1, -1231,2601,16,0,249, -1,479,1523,1,480, -1528,1,1485,2602,16, -0,249,1,1737,2603, -16,0,249,1,242, -2604,16,0,249,1, -478,1546,1,1001,1551, -1,1002,1556,1,32, -2605,19,244,1,32, -2606,5,83,1,1011, -1074,1,1012,2607,16, -0,242,1,1013,1226, -1,262,1091,1,1267, -2608,16,0,242,1, -515,2609,16,0,242, -1,1521,2610,16,0, -242,1,525,1184,1, -283,1144,1,40,1133, -1,42,2611,16,0, -242,1,44,1149,1, -2556,2612,16,0,242, -1,47,1151,1,1303, -2613,16,0,242,1, -1555,2614,16,0,242, -1,50,1174,1,48, -1157,1,49,1163,1, -51,1169,1,63,1190, -1,305,1179,1,66, -1196,1,67,1201,1, -68,1206,1,69,1211, -1,70,1216,1,73, -2615,16,0,242,1, -74,1221,1,328,1274, -1,1048,1236,1,82, -2616,16,0,242,1, -1840,2617,16,0,242, -1,1591,2618,16,0, -242,1,1341,2619,16, -0,242,1,1096,1284, -1,93,1290,1,352, -1301,1,107,2620,16, -0,242,1,1114,1313, -1,118,1316,1,1123, -2621,16,0,242,1, -371,1326,1,1628,2622, -16,0,242,1,375, -1337,1,1882,2623,16, -0,242,1,377,1342, -1,379,1375,1,380, -1352,1,883,2624,16, -0,242,1,373,1370, -1,130,1358,1,143, -2625,16,0,242,1, -387,2626,16,0,242, -1,1159,2627,16,0, -242,1,157,2628,16, -0,242,1,1413,2629, -16,0,242,1,1665, -2630,16,0,242,1, -412,2631,16,0,242, -1,1377,2632,16,0, -242,1,172,1428,1, -1939,2633,16,0,242, -1,437,2634,16,0, -242,1,188,1471,1, -942,1444,1,1195,2635, -16,0,242,1,1449, -2636,16,0,242,1, -1701,2637,16,0,242, -1,447,1464,1,205, -2638,16,0,242,1, -827,2639,16,0,242, -1,223,2640,16,0, -242,1,476,1507,1, -477,1513,1,1231,2641, -16,0,242,1,479, -1523,1,480,1528,1, -1485,2642,16,0,242, -1,1737,2643,16,0, -242,1,242,2644,16, -0,242,1,478,1546, -1,1001,1551,1,1002, -1556,1,33,2645,19, -416,1,33,2646,5, -83,1,1011,1074,1, -1012,2647,16,0,414, -1,1013,1226,1,262, -1091,1,1267,2648,16, -0,414,1,515,2649, -16,0,414,1,1521, -2650,16,0,414,1, -525,1184,1,283,1144, -1,40,1133,1,42, -2651,16,0,414,1, -44,1149,1,2556,2652, -16,0,414,1,47, -1151,1,1303,2653,16, -0,414,1,1555,2654, -16,0,414,1,50, -1174,1,48,1157,1, -49,1163,1,51,1169, -1,63,1190,1,305, -1179,1,66,1196,1, -67,1201,1,68,1206, -1,69,1211,1,70, -1216,1,73,2655,16, -0,414,1,74,1221, -1,328,1274,1,1048, -1236,1,82,2656,16, -0,414,1,1840,2657, -16,0,414,1,1591, -2658,16,0,414,1, -1341,2659,16,0,414, -1,1096,1284,1,93, -1290,1,352,1301,1, -107,2660,16,0,414, -1,1114,1313,1,118, -1316,1,1123,2661,16, -0,414,1,371,1326, -1,1628,2662,16,0, -414,1,375,1337,1, -1882,2663,16,0,414, -1,377,1342,1,379, -1375,1,380,1352,1, -883,2664,16,0,414, -1,373,1370,1,130, -1358,1,143,1380,1, -387,2665,16,0,414, -1,1159,2666,16,0, -414,1,157,1402,1, -1413,2667,16,0,414, -1,1665,2668,16,0, -414,1,412,2669,16, -0,414,1,1377,2670, -16,0,414,1,172, -1428,1,1939,2671,16, -0,414,1,437,2672, -16,0,414,1,188, -1471,1,942,1444,1, -1195,2673,16,0,414, -1,1449,2674,16,0, -414,1,1701,2675,16, -0,414,1,447,1464, -1,205,2676,16,0, -414,1,827,2677,16, -0,414,1,223,2678, -16,0,414,1,476, -1507,1,477,1513,1, -1231,2679,16,0,414, -1,479,1523,1,480, -1528,1,1485,2680,16, -0,414,1,1737,2681, -16,0,414,1,242, -1541,1,478,1546,1, -1001,1551,1,1002,1556, -1,34,2682,19,385, -1,34,2683,5,83, -1,1011,1074,1,1012, -2684,16,0,383,1, -1013,1226,1,262,1091, -1,1267,2685,16,0, -383,1,515,2686,16, -0,383,1,1521,2687, -16,0,383,1,525, -1184,1,283,1144,1, -40,1133,1,42,2688, -16,0,383,1,44, -1149,1,2556,2689,16, -0,383,1,47,1151, -1,1303,2690,16,0, -383,1,1555,2691,16, -0,383,1,50,1174, -1,48,1157,1,49, -1163,1,51,1169,1, -63,1190,1,305,1179, -1,66,1196,1,67, -1201,1,68,1206,1, -69,1211,1,70,1216, -1,73,2692,16,0, -383,1,74,1221,1, -328,1274,1,1048,1236, -1,82,2693,16,0, -383,1,1840,2694,16, -0,383,1,1591,2695, -16,0,383,1,1341, -2696,16,0,383,1, -1096,1284,1,93,1290, -1,352,1301,1,107, -2697,16,0,383,1, -1114,1313,1,118,1316, -1,1123,2698,16,0, -383,1,371,1326,1, -1628,2699,16,0,383, -1,375,1337,1,1882, -2700,16,0,383,1, -377,1342,1,379,1375, -1,380,1352,1,883, -2701,16,0,383,1, -373,1370,1,130,1358, -1,143,1380,1,387, -2702,16,0,383,1, -1159,2703,16,0,383, -1,157,1402,1,1413, -2704,16,0,383,1, -1665,2705,16,0,383, -1,412,2706,16,0, -383,1,1377,2707,16, -0,383,1,172,1428, -1,1939,2708,16,0, -383,1,437,2709,16, -0,383,1,188,1471, -1,942,1444,1,1195, -2710,16,0,383,1, -1449,2711,16,0,383, -1,1701,2712,16,0, -383,1,447,1464,1, -205,1481,1,827,2713, -16,0,383,1,223, -1497,1,476,1507,1, -477,1513,1,1231,2714, -16,0,383,1,479, -1523,1,480,1528,1, -1485,2715,16,0,383, -1,1737,2716,16,0, -383,1,242,1541,1, -478,1546,1,1001,1551, -1,1002,1556,1,35, -2717,19,372,1,35, -2718,5,83,1,1011, -1074,1,1012,2719,16, -0,370,1,1013,1226, -1,262,1091,1,1267, -2720,16,0,370,1, -515,2721,16,0,370, -1,1521,2722,16,0, -370,1,525,1184,1, -283,1144,1,40,1133, -1,42,2723,16,0, -370,1,44,1149,1, -2556,2724,16,0,370, -1,47,1151,1,1303, -2725,16,0,370,1, -1555,2726,16,0,370, -1,50,1174,1,48, -1157,1,49,1163,1, -51,1169,1,63,1190, -1,305,1179,1,66, -1196,1,67,1201,1, -68,1206,1,69,1211, -1,70,1216,1,73, -2727,16,0,370,1, -74,1221,1,328,1274, -1,1048,1236,1,82, -2728,16,0,370,1, -1840,2729,16,0,370, -1,1591,2730,16,0, -370,1,1341,2731,16, -0,370,1,1096,1284, -1,93,1290,1,352, -1301,1,107,2732,16, -0,370,1,1114,1313, -1,118,1316,1,1123, -2733,16,0,370,1, -371,1326,1,1628,2734, -16,0,370,1,375, -1337,1,1882,2735,16, -0,370,1,377,1342, -1,379,1375,1,380, -1352,1,883,2736,16, -0,370,1,373,1370, -1,130,1358,1,143, -1380,1,387,2737,16, -0,370,1,1159,2738, -16,0,370,1,157, -1402,1,1413,2739,16, -0,370,1,1665,2740, -16,0,370,1,412, -2741,16,0,370,1, -1377,2742,16,0,370, -1,172,1428,1,1939, -2743,16,0,370,1, -437,2744,16,0,370, -1,188,1471,1,942, -1444,1,1195,2745,16, -0,370,1,1449,2746, -16,0,370,1,1701, -2747,16,0,370,1, -447,1464,1,205,1481, -1,827,2748,16,0, -370,1,223,2749,16, -0,370,1,476,1507, -1,477,1513,1,1231, -2750,16,0,370,1, -479,1523,1,480,1528, -1,1485,2751,16,0, -370,1,1737,2752,16, -0,370,1,242,1541, -1,478,1546,1,1001, -1551,1,1002,1556,1, -36,2753,19,215,1, -36,2754,5,90,1, -256,2755,16,0,213, -1,1261,2756,16,0, -213,1,509,2757,16, -0,213,1,2197,2758, -16,0,213,1,1515, -2759,16,0,213,1, -2021,707,1,1775,2760, -16,0,213,1,2029, -714,1,2030,720,1, -2031,725,1,2032,730, -1,2033,735,1,277, -2761,16,0,213,1, -2035,741,1,2037,746, -1,2039,751,1,32, -2762,16,0,213,1, -2041,757,1,2043,762, -1,2044,767,1,2550, -2763,16,0,213,1, -41,2764,16,0,213, -1,1297,2765,16,0, -213,1,43,2766,16, -0,213,1,1802,774, -1,1804,2767,16,0, -213,1,299,2768,16, -0,213,1,2309,2769, -16,0,213,1,52, -2770,16,0,213,1, -525,2771,16,0,213, -1,2074,2772,16,0, -213,1,1574,787,1, -71,2773,16,0,213, -1,76,2774,16,0, -213,1,1834,2775,16, -0,213,1,79,2776, -16,0,213,1,1335, -2777,16,0,213,1, -322,2778,16,0,213, -1,85,2779,16,0, -213,1,89,2780,16, -0,213,1,346,2781, -16,0,213,1,2104, -801,1,2105,2782,16, -0,213,1,2358,807, -1,2360,813,1,97, -2783,16,0,213,1, -1860,820,1,102,2784, -16,0,213,1,112, -2785,16,0,213,1, -1117,2786,16,0,213, -1,1873,829,1,1876, -2787,16,0,213,1, -124,2788,16,0,213, -1,2135,836,1,381, -2789,16,0,213,1, -137,2790,16,0,213, -1,1901,2791,16,0, -213,1,1153,2792,16, -0,213,1,151,2793, -16,0,213,1,1407, -2794,16,0,213,1, -1659,2795,16,0,213, -1,406,2796,16,0, -213,1,1371,2797,16, -0,213,1,166,2798, -16,0,213,1,1622, -2799,16,0,213,1, -2354,853,1,2355,858, -1,1931,863,1,1933, -2800,16,0,213,1, -431,2801,16,0,213, -1,1585,2802,16,0, -213,1,182,2803,16, -0,213,1,1189,2804, -16,0,213,1,1443, -2805,16,0,213,1, -1695,2806,16,0,213, -1,447,2807,16,0, -213,1,199,2808,16, -0,213,1,1958,2809, -16,0,213,1,1657, -878,1,459,2810,16, -0,213,1,462,2811, -16,0,213,1,217, -2812,16,0,213,1, -2226,886,1,1225,2813, -16,0,213,1,1479, -2814,16,0,213,1, -1731,2815,16,0,213, -1,1989,894,1,1990, -2816,16,0,213,1, -236,2817,16,0,213, -1,1756,2818,16,0, -213,1,37,2819,19, -234,1,37,2820,5, -90,1,256,2821,16, -0,232,1,1261,2822, -16,0,232,1,509, -2823,16,0,232,1, -2197,2824,16,0,232, -1,1515,2825,16,0, -232,1,2021,707,1, -1775,2826,16,0,232, -1,2029,714,1,2030, -720,1,2031,725,1, -2032,730,1,2033,735, -1,277,2827,16,0, -232,1,2035,741,1, -2037,746,1,2039,751, -1,32,2828,16,0, -232,1,2041,757,1, -2043,762,1,2044,767, -1,2550,2829,16,0, -232,1,41,2830,16, -0,232,1,1297,2831, -16,0,232,1,43, -2832,16,0,232,1, -1802,774,1,1804,2833, -16,0,232,1,299, -2834,16,0,232,1, -2309,2835,16,0,232, -1,52,2836,16,0, -232,1,525,2837,16, -0,232,1,2074,2838, -16,0,232,1,1574, -787,1,71,2839,16, -0,232,1,76,2840, -16,0,232,1,1834, -2841,16,0,232,1, -79,2842,16,0,232, -1,1335,2843,16,0, -232,1,322,2844,16, -0,232,1,85,2845, -16,0,232,1,89, -2846,16,0,232,1, -346,2847,16,0,232, -1,2104,801,1,2105, -2848,16,0,232,1, -2358,807,1,2360,813, -1,97,2849,16,0, -232,1,1860,820,1, -102,2850,16,0,232, -1,112,2851,16,0, -232,1,1117,2852,16, -0,232,1,1873,829, -1,1876,2853,16,0, -232,1,124,2854,16, -0,232,1,2135,836, -1,381,2855,16,0, -232,1,137,2856,16, -0,232,1,1901,2857, -16,0,232,1,1153, -2858,16,0,232,1, -151,2859,16,0,232, -1,1407,2860,16,0, -232,1,1659,2861,16, -0,232,1,406,2862, -16,0,232,1,1371, -2863,16,0,232,1, -166,2864,16,0,232, -1,1622,2865,16,0, -232,1,2354,853,1, -2355,858,1,1931,863, -1,1933,2866,16,0, -232,1,431,2867,16, -0,232,1,1585,2868, -16,0,232,1,182, -2869,16,0,232,1, -1189,2870,16,0,232, -1,1443,2871,16,0, -232,1,1695,2872,16, -0,232,1,447,2873, -16,0,232,1,199, -2874,16,0,232,1, -1958,2875,16,0,232, -1,1657,878,1,459, -2876,16,0,232,1, -462,2877,16,0,232, -1,217,2878,16,0, -232,1,2226,886,1, -1225,2879,16,0,232, -1,1479,2880,16,0, -232,1,1731,2881,16, -0,232,1,1989,894, -1,1990,2882,16,0, -232,1,236,2883,16, -0,232,1,1756,2884, -16,0,232,1,38, -2885,19,231,1,38, -2886,5,83,1,1011, -1074,1,1012,2887,16, -0,229,1,1013,1226, -1,262,1091,1,1267, -2888,16,0,229,1, -515,2889,16,0,229, -1,1521,2890,16,0, -229,1,525,1184,1, -283,1144,1,40,1133, -1,42,2891,16,0, -229,1,44,1149,1, -2556,2892,16,0,229, -1,47,1151,1,1303, -2893,16,0,229,1, -1555,2894,16,0,229, -1,50,1174,1,48, -1157,1,49,1163,1, -51,1169,1,63,1190, -1,305,1179,1,66, -1196,1,67,1201,1, -68,1206,1,69,1211, -1,70,1216,1,73, -2895,16,0,229,1, -74,1221,1,328,1274, -1,1048,1236,1,82, -2896,16,0,229,1, -1840,2897,16,0,229, -1,1591,2898,16,0, -229,1,1341,2899,16, -0,229,1,1096,1284, -1,93,1290,1,352, -1301,1,107,2900,16, -0,229,1,1114,1313, -1,118,1316,1,1123, -2901,16,0,229,1, -371,1326,1,1628,2902, -16,0,229,1,375, -1337,1,1882,2903,16, -0,229,1,377,1342, -1,379,1375,1,380, -1352,1,883,1412,1, -373,1370,1,130,1358, -1,143,1380,1,387, -2904,16,0,229,1, -1159,2905,16,0,229, -1,157,1402,1,1413, -2906,16,0,229,1, -1665,2907,16,0,229, -1,412,2908,16,0, -229,1,1377,2909,16, -0,229,1,172,1428, -1,1939,2910,16,0, -229,1,437,2911,16, -0,229,1,188,1471, -1,942,1444,1,1195, -2912,16,0,229,1, -1449,2913,16,0,229, -1,1701,2914,16,0, -229,1,447,1464,1, -205,1481,1,827,1347, -1,223,1497,1,476, -1507,1,477,1513,1, -1231,2915,16,0,229, -1,479,1523,1,480, -1528,1,1485,2916,16, -0,229,1,1737,2917, -16,0,229,1,242, -1541,1,478,1546,1, -1001,1551,1,1002,1556, -1,39,2918,19,221, -1,39,2919,5,83, -1,1011,1074,1,1012, -2920,16,0,219,1, -1013,1226,1,262,1091, -1,1267,2921,16,0, -219,1,515,2922,16, -0,219,1,1521,2923, -16,0,219,1,525, -1184,1,283,1144,1, -40,1133,1,42,2924, -16,0,219,1,44, -1149,1,2556,2925,16, -0,219,1,47,1151, -1,1303,2926,16,0, -219,1,1555,2927,16, -0,219,1,50,1174, -1,48,1157,1,49, -1163,1,51,1169,1, -63,1190,1,305,1179, -1,66,1196,1,67, -1201,1,68,1206,1, -69,1211,1,70,1216, -1,73,2928,16,0, -219,1,74,1221,1, -328,1274,1,1048,1236, -1,82,2929,16,0, -219,1,1840,2930,16, -0,219,1,1591,2931, -16,0,219,1,1341, -2932,16,0,219,1, -1096,1284,1,93,1290, -1,352,1301,1,107, -2933,16,0,219,1, -1114,1313,1,118,1316, -1,1123,2934,16,0, -219,1,371,1326,1, -1628,2935,16,0,219, -1,375,1337,1,1882, -2936,16,0,219,1, -377,1342,1,379,1375, -1,380,1352,1,883, -1412,1,373,1370,1, -130,1358,1,143,1380, -1,387,2937,16,0, -219,1,1159,2938,16, -0,219,1,157,1402, -1,1413,2939,16,0, -219,1,1665,2940,16, -0,219,1,412,2941, -16,0,219,1,1377, -2942,16,0,219,1, -172,1428,1,1939,2943, -16,0,219,1,437, -2944,16,0,219,1, -188,1471,1,942,1444, -1,1195,2945,16,0, -219,1,1449,2946,16, -0,219,1,1701,2947, -16,0,219,1,447, -1464,1,205,1481,1, -827,1347,1,223,1497, -1,476,1507,1,477, -1513,1,1231,2948,16, -0,219,1,479,1523, -1,480,1528,1,1485, -2949,16,0,219,1, -1737,2950,16,0,219, -1,242,1541,1,478, -1546,1,1001,1551,1, -1002,1556,1,40,2951, -19,209,1,40,2952, -5,83,1,1011,1074, -1,1012,2953,16,0, -207,1,1013,1226,1, -262,1091,1,1267,2954, -16,0,207,1,515, -2955,16,0,207,1, -1521,2956,16,0,207, -1,525,1184,1,283, -1144,1,40,1133,1, -42,2957,16,0,207, -1,44,1149,1,2556, -2958,16,0,207,1, -47,1151,1,1303,2959, -16,0,207,1,1555, -2960,16,0,207,1, -50,1174,1,48,1157, -1,49,1163,1,51, -1169,1,63,1190,1, -305,1179,1,66,1196, -1,67,1201,1,68, -1206,1,69,1211,1, -70,1216,1,73,2961, -16,0,207,1,74, -1221,1,328,1274,1, -1048,1236,1,82,2962, -16,0,207,1,1840, -2963,16,0,207,1, -1591,2964,16,0,207, -1,1341,2965,16,0, -207,1,1096,1284,1, -93,1290,1,352,1301, -1,107,2966,16,0, -207,1,1114,1313,1, -118,2967,16,0,207, -1,1123,2968,16,0, -207,1,371,1326,1, -1628,2969,16,0,207, -1,375,1337,1,1882, -2970,16,0,207,1, -377,1342,1,379,1375, -1,380,1352,1,883, -2971,16,0,207,1, -373,1370,1,130,2972, -16,0,207,1,143, -2973,16,0,207,1, -387,2974,16,0,207, -1,1159,2975,16,0, -207,1,157,2976,16, -0,207,1,1413,2977, -16,0,207,1,1665, -2978,16,0,207,1, -412,2979,16,0,207, -1,1377,2980,16,0, -207,1,172,2981,16, -0,207,1,1939,2982, -16,0,207,1,437, -2983,16,0,207,1, -188,2984,16,0,207, -1,942,1444,1,1195, -2985,16,0,207,1, -1449,2986,16,0,207, -1,1701,2987,16,0, -207,1,447,1464,1, -205,2988,16,0,207, -1,827,2989,16,0, -207,1,223,2990,16, -0,207,1,476,1507, -1,477,1513,1,1231, -2991,16,0,207,1, -479,1523,1,480,1528, -1,1485,2992,16,0, -207,1,1737,2993,16, -0,207,1,242,2994, -16,0,207,1,478, -1546,1,1001,1551,1, -1002,1556,1,41,2995, -19,172,1,41,2996, -5,83,1,1011,1074, -1,1012,2997,16,0, -170,1,1013,1226,1, -262,1091,1,1267,2998, -16,0,170,1,515, -2999,16,0,170,1, -1521,3000,16,0,170, -1,525,1184,1,283, -1144,1,40,1133,1, -42,3001,16,0,170, -1,44,1149,1,2556, -3002,16,0,170,1, -47,1151,1,1303,3003, -16,0,170,1,1555, -3004,16,0,170,1, -50,1174,1,48,1157, -1,49,1163,1,51, -1169,1,63,1190,1, -305,1179,1,66,1196, -1,67,1201,1,68, -1206,1,69,1211,1, -70,1216,1,73,3005, -16,0,170,1,74, -1221,1,328,1274,1, -1048,1236,1,82,3006, -16,0,170,1,1840, -3007,16,0,170,1, -1591,3008,16,0,170, -1,1341,3009,16,0, -170,1,1096,1284,1, -93,1290,1,352,1301, -1,107,3010,16,0, -170,1,1114,1313,1, -118,3011,16,0,170, -1,1123,3012,16,0, -170,1,371,1326,1, -1628,3013,16,0,170, -1,375,1337,1,1882, -3014,16,0,170,1, -377,1342,1,379,1375, -1,380,1352,1,883, -3015,16,0,170,1, -373,1370,1,130,3016, -16,0,170,1,143, -3017,16,0,170,1, -387,3018,16,0,170, -1,1159,3019,16,0, -170,1,157,3020,16, -0,170,1,1413,3021, -16,0,170,1,1665, -3022,16,0,170,1, -412,3023,16,0,170, -1,1377,3024,16,0, -170,1,172,3025,16, -0,170,1,1939,3026, -16,0,170,1,437, -3027,16,0,170,1, -188,3028,16,0,170, -1,942,1444,1,1195, -3029,16,0,170,1, -1449,3030,16,0,170, -1,1701,3031,16,0, -170,1,447,1464,1, -205,3032,16,0,170, -1,827,3033,16,0, -170,1,223,3034,16, -0,170,1,476,1507, -1,477,1513,1,1231, -3035,16,0,170,1, -479,1523,1,480,1528, -1,1485,3036,16,0, -170,1,1737,3037,16, -0,170,1,242,3038, -16,0,170,1,478, -1546,1,1001,1551,1, -1002,1556,1,42,3039, -19,441,1,42,3040, -5,36,1,2074,3041, -16,0,439,1,1860, -820,1,2197,3042,16, -0,439,1,2309,3043, -16,0,439,1,1657, -878,1,2031,725,1, -1989,894,1,1990,3044, -16,0,439,1,1775, -3045,16,0,439,1, -32,3046,16,0,439, -1,2104,801,1,2105, -3047,16,0,439,1, -2226,886,1,1901,3048, -16,0,439,1,1802, -774,1,2021,707,1, -1804,3049,16,0,439, -1,2135,836,1,2354, -853,1,2355,858,1, -2029,714,1,2030,720, -1,2358,807,1,2032, -730,1,2360,813,1, -2035,741,1,2037,746, -1,2039,751,1,1931, -863,1,2041,757,1, -1873,829,1,2043,762, -1,2044,767,1,2033, -735,1,1574,787,1, -1958,3050,16,0,439, -1,43,3051,19,480, -1,43,3052,5,24, -1,2035,741,1,2037, -746,1,1657,878,1, -2039,751,1,2041,757, -1,1931,863,1,2043, -762,1,2044,767,1, -1860,820,1,1574,787, -1,2021,707,1,2104, -3053,16,0,579,1, -2135,836,1,1873,829, -1,2355,858,1,1802, -774,1,2226,886,1, -1989,3054,16,0,478, -1,2360,813,1,2029, -714,1,2030,720,1, -2031,725,1,2032,730, -1,2033,735,1,44, -3055,19,264,1,44, -3056,5,36,1,2074, -3057,16,0,262,1, -1860,820,1,2197,3058, -16,0,262,1,2309, -3059,16,0,262,1, -1657,878,1,2031,725, -1,1989,894,1,1990, -3060,16,0,262,1, -1775,3061,16,0,262, -1,32,3062,16,0, -262,1,2104,801,1, -2105,3063,16,0,262, -1,2226,886,1,1901, -3064,16,0,262,1, -1802,774,1,2021,707, -1,1804,3065,16,0, -262,1,2135,836,1, -2354,853,1,2355,858, -1,2029,714,1,2030, -720,1,2358,807,1, -2032,730,1,2360,813, -1,2035,741,1,2037, -746,1,2039,751,1, -1931,863,1,2041,757, -1,1873,829,1,2043, -762,1,2044,767,1, -2033,735,1,1574,787, -1,1958,3066,16,0, -262,1,45,3067,19, -329,1,45,3068,5, -37,1,2074,3069,16, -0,376,1,1860,820, -1,2197,3070,16,0, -376,1,2309,3071,16, -0,376,1,1657,878, -1,2031,725,1,1989, -894,1,1990,3072,16, -0,376,1,1775,3073, -16,0,376,1,32, -3074,16,0,376,1, -2104,801,1,2105,3075, -16,0,376,1,2226, -886,1,1901,3076,16, -0,376,1,1802,774, -1,2021,707,1,1804, -3077,16,0,376,1, -2135,836,1,2354,853, -1,2355,858,1,2029, -714,1,2030,720,1, -2358,807,1,2032,730, -1,2360,813,1,2035, -741,1,2037,746,1, -2039,751,1,1931,863, -1,2041,757,1,1873, -829,1,2043,762,1, -2044,767,1,1832,3078, -16,0,327,1,2033, -735,1,1574,787,1, -1958,3079,16,0,376, -1,46,3080,19,658, -1,46,3081,5,36, -1,2074,3082,16,0, -656,1,1860,820,1, -2197,3083,16,0,656, -1,2309,3084,16,0, -656,1,1657,878,1, -2031,725,1,1989,894, -1,1990,3085,16,0, -656,1,1775,3086,16, -0,656,1,32,3087, -16,0,656,1,2104, -801,1,2105,3088,16, -0,656,1,2226,886, -1,1901,3089,16,0, -656,1,1802,774,1, -2021,707,1,1804,3090, -16,0,656,1,2135, -836,1,2354,853,1, -2355,858,1,2029,714, -1,2030,720,1,2358, -807,1,2032,730,1, -2360,813,1,2035,741, -1,2037,746,1,2039, -751,1,1931,863,1, -2041,757,1,1873,829, -1,2043,762,1,2044, -767,1,2033,735,1, -1574,787,1,1958,3091, -16,0,656,1,47, -3092,19,401,1,47, -3093,5,19,1,0, -3094,16,0,399,1, -2531,667,1,2587,3095, -16,0,399,1,2022, -3096,16,0,571,1, -2526,684,1,2528,3097, -16,0,399,1,2605, -3098,17,3099,15,3100, -4,36,37,0,71, -0,108,0,111,0, -98,0,97,0,108, -0,68,0,101,0, -102,0,105,0,110, -0,105,0,116,0, -105,0,111,0,110, -0,115,0,1,-1, -1,5,3101,20,3102, -4,38,71,0,108, -0,111,0,98,0, -97,0,108,0,68, -0,101,0,102,0, -105,0,110,0,105, -0,116,0,105,0, -111,0,110,0,115, -0,95,0,52,0, -1,145,1,3,1, -3,1,2,3103,22, -1,6,1,2452,695, -1,2607,3104,17,3105, -15,3100,1,-1,1, -5,3106,20,3107,4, -38,71,0,108,0, -111,0,98,0,97, -0,108,0,68,0, -101,0,102,0,105, -0,110,0,105,0, -116,0,105,0,111, -0,110,0,115,0, -95,0,51,0,1, -144,1,3,1,2, -1,1,3108,22,1, -5,1,2608,3109,17, -3110,15,3100,1,-1, -1,5,3111,20,3112, -4,38,71,0,108, -0,111,0,98,0, -97,0,108,0,68, -0,101,0,102,0, -105,0,110,0,105, -0,116,0,105,0, -111,0,110,0,115, -0,95,0,49,0, -1,142,1,3,1, -2,1,1,3113,22, -1,3,1,2598,3114, -16,0,399,1,2575, -3115,17,3116,15,3117, -4,52,37,0,71, -0,108,0,111,0, -98,0,97,0,108, -0,86,0,97,0, -114,0,105,0,97, -0,98,0,108,0, -101,0,68,0,101, -0,99,0,108,0, -97,0,114,0,97, -0,116,0,105,0, -111,0,110,0,1, --1,1,5,3118,20, -3119,4,54,71,0, -108,0,111,0,98, -0,97,0,108,0, -86,0,97,0,114, -0,105,0,97,0, -98,0,108,0,101, -0,68,0,101,0, -99,0,108,0,97, -0,114,0,97,0, -116,0,105,0,111, -0,110,0,95,0, -50,0,1,147,1, -3,1,5,1,4, -3120,22,1,8,1, -2355,858,1,2532,673, -1,2606,3121,17,3122, -15,3100,1,-1,1, -5,3123,20,3124,4, -38,71,0,108,0, -111,0,98,0,97, -0,108,0,68,0, -101,0,102,0,105, -0,110,0,105,0, -116,0,105,0,111, -0,110,0,115,0, -95,0,50,0,1, -143,1,3,1,3, -1,2,3125,22,1, -4,1,2360,813,1, -2547,3126,17,3127,15, -3128,4,50,37,0, -71,0,108,0,111, -0,98,0,97,0, -108,0,70,0,117, -0,110,0,99,0, -116,0,105,0,111, -0,110,0,68,0, -101,0,102,0,105, -0,110,0,105,0, -116,0,105,0,111, -0,110,0,1,-1, -1,5,3129,20,3130, -4,52,71,0,108, -0,111,0,98,0, -97,0,108,0,70, -0,117,0,110,0, -99,0,116,0,105, -0,111,0,110,0, -68,0,101,0,102, -0,105,0,110,0, -105,0,116,0,105, -0,111,0,110,0, -95,0,49,0,1, -148,1,3,1,6, -1,5,3131,22,1, -9,1,2586,3132,17, -3133,15,3117,1,-1, -1,5,3134,20,3135, -4,54,71,0,108, -0,111,0,98,0, -97,0,108,0,86, -0,97,0,114,0, -105,0,97,0,98, -0,108,0,101,0, -68,0,101,0,99, -0,108,0,97,0, -114,0,97,0,116, -0,105,0,111,0, -110,0,95,0,49, -0,1,146,1,3, -1,3,1,2,3136, -22,1,7,1,2362, -3137,17,3138,15,3128, -1,-1,1,5,3139, -20,3140,4,52,71, -0,108,0,111,0, -98,0,97,0,108, -0,70,0,117,0, -110,0,99,0,116, -0,105,0,111,0, -110,0,68,0,101, -0,102,0,105,0, -110,0,105,0,116, -0,105,0,111,0, -110,0,95,0,50, -0,1,149,1,3, -1,7,1,6,3141, -22,1,10,1,48, -3142,19,269,1,48, -3143,5,52,1,0, -3144,16,0,267,1, -2074,3145,16,0,499, -1,1860,820,1,2197, -3146,16,0,499,1, -2526,684,1,2309,3147, -16,0,499,1,2528, -3148,16,0,267,1, -1657,878,1,2030,720, -1,2532,673,1,1989, -894,1,1990,3149,16, -0,499,1,2035,741, -1,1775,3150,16,0, -499,1,32,3151,16, -0,499,1,2104,801, -1,2105,3152,16,0, -499,1,2547,3126,1, -2226,886,1,2606,3121, -1,1901,3153,16,0, -499,1,2531,667,1, -2586,3132,1,2587,3154, -16,0,267,1,2452, -695,1,1802,774,1, -2021,707,1,1804,3155, -16,0,499,1,2135, -836,1,2354,853,1, -2355,858,1,2029,714, -1,2575,3115,1,2358, -807,1,2032,730,1, -2360,813,1,2362,3137, -1,2037,746,1,2039, -751,1,1931,863,1, -2041,757,1,1873,829, -1,2043,762,1,2044, -767,1,2031,725,1, -2598,3156,16,0,267, -1,2033,735,1,2605, -3098,1,1574,787,1, -2607,3104,1,2608,3109, -1,1958,3157,16,0, -499,1,49,3158,19, -504,1,49,3159,5, -36,1,2074,3160,16, -0,502,1,1860,820, -1,2197,3161,16,0, -502,1,2309,3162,16, -0,502,1,1657,878, -1,2031,725,1,1989, -894,1,1990,3163,16, -0,502,1,1775,3164, -16,0,502,1,32, -3165,16,0,502,1, -2104,801,1,2105,3166, -16,0,502,1,2226, -886,1,1901,3167,16, -0,502,1,1802,774, -1,2021,707,1,1804, -3168,16,0,502,1, -2135,836,1,2354,853, -1,2355,858,1,2029, -714,1,2030,720,1, -2358,807,1,2032,730, -1,2360,813,1,2035, -741,1,2037,746,1, -2039,751,1,1931,863, -1,2041,757,1,1873, -829,1,2043,762,1, -2044,767,1,2033,735, -1,1574,787,1,1958, -3169,16,0,502,1, -50,3170,19,612,1, -50,3171,5,36,1, -2074,3172,16,0,610, -1,1860,820,1,2197, -3173,16,0,610,1, -2309,3174,16,0,610, -1,1657,878,1,2031, -725,1,1989,894,1, -1990,3175,16,0,610, -1,1775,3176,16,0, -610,1,32,3177,16, -0,610,1,2104,801, -1,2105,3178,16,0, -610,1,2226,886,1, -1901,3179,16,0,610, -1,1802,774,1,2021, -707,1,1804,3180,16, -0,610,1,2135,836, -1,2354,853,1,2355, -858,1,2029,714,1, -2030,720,1,2358,807, -1,2032,730,1,2360, -813,1,2035,741,1, -2037,746,1,2039,751, -1,1931,863,1,2041, -757,1,1873,829,1, -2043,762,1,2044,767, -1,2033,735,1,1574, -787,1,1958,3181,16, -0,610,1,51,3182, -19,127,1,51,3183, -5,51,1,0,3184, -16,0,125,1,2401, -3185,16,0,125,1, -1860,820,1,10,3186, -16,0,125,1,2197, -3187,16,0,125,1, -2309,3188,16,0,125, -1,21,3189,16,0, -125,1,1657,878,1, -2030,720,1,2031,725, -1,2074,3190,16,0, -125,1,1989,894,1, -1990,3191,16,0,125, -1,2035,741,1,1775, -3192,16,0,125,1, -32,3193,16,0,125, -1,2104,801,1,2105, -3194,16,0,125,1, -2547,3126,1,2226,886, -1,2606,3121,1,1901, -3195,16,0,125,1, -52,3196,16,0,125, -1,2587,3197,16,0, -125,1,1802,774,1, -2021,707,1,1804,3198, -16,0,125,1,2135, -836,1,2354,853,1, -2355,858,1,2029,714, -1,2575,3115,1,2358, -807,1,2032,730,1, -2360,813,1,2362,3137, -1,2037,746,1,2039, -751,1,1931,863,1, -2041,757,1,1873,829, -1,2043,762,1,2044, -767,1,2033,735,1, -2605,3098,1,1574,787, -1,2607,3104,1,2608, -3109,1,1958,3199,16, -0,125,1,2586,3132, -1,2534,3200,16,0, -125,1,52,3201,19, -124,1,52,3202,5, -51,1,0,3203,16, -0,122,1,2401,3204, -16,0,122,1,1860, -820,1,10,3205,16, -0,122,1,2197,3206, -16,0,122,1,2309, -3207,16,0,122,1, -21,3208,16,0,122, -1,1657,878,1,2030, -720,1,2031,725,1, -2074,3209,16,0,122, -1,1989,894,1,1990, -3210,16,0,122,1, -2035,741,1,1775,3211, -16,0,122,1,32, -3212,16,0,122,1, -2104,801,1,2105,3213, -16,0,122,1,2547, -3126,1,2226,886,1, -2606,3121,1,1901,3214, -16,0,122,1,52, -3215,16,0,122,1, -2587,3216,16,0,122, -1,1802,774,1,2021, -707,1,1804,3217,16, -0,122,1,2135,836, -1,2354,853,1,2355, -858,1,2029,714,1, -2575,3115,1,2358,807, -1,2032,730,1,2360, -813,1,2362,3137,1, -2037,746,1,2039,751, -1,1931,863,1,2041, -757,1,1873,829,1, -2043,762,1,2044,767, -1,2033,735,1,2605, -3098,1,1574,787,1, -2607,3104,1,2608,3109, -1,1958,3218,16,0, -122,1,2586,3132,1, -2534,3219,16,0,122, -1,53,3220,19,121, -1,53,3221,5,51, -1,0,3222,16,0, -119,1,2401,3223,16, -0,119,1,1860,820, -1,10,3224,16,0, -119,1,2197,3225,16, -0,119,1,2309,3226, -16,0,119,1,21, -3227,16,0,119,1, -1657,878,1,2030,720, -1,2031,725,1,2074, -3228,16,0,119,1, -1989,894,1,1990,3229, -16,0,119,1,2035, -741,1,1775,3230,16, -0,119,1,32,3231, -16,0,119,1,2104, -801,1,2105,3232,16, -0,119,1,2547,3126, -1,2226,886,1,2606, -3121,1,1901,3233,16, -0,119,1,52,3234, -16,0,119,1,2587, -3235,16,0,119,1, -1802,774,1,2021,707, -1,1804,3236,16,0, -119,1,2135,836,1, -2354,853,1,2355,858, -1,2029,714,1,2575, -3115,1,2358,807,1, -2032,730,1,2360,813, -1,2362,3137,1,2037, -746,1,2039,751,1, -1931,863,1,2041,757, -1,1873,829,1,2043, -762,1,2044,767,1, -2033,735,1,2605,3098, -1,1574,787,1,2607, -3104,1,2608,3109,1, -1958,3237,16,0,119, -1,2586,3132,1,2534, -3238,16,0,119,1, -54,3239,19,118,1, -54,3240,5,51,1, -0,3241,16,0,116, -1,2401,3242,16,0, -116,1,1860,820,1, -10,3243,16,0,116, -1,2197,3244,16,0, -116,1,2309,3245,16, -0,116,1,21,3246, -16,0,116,1,1657, -878,1,2030,720,1, -2031,725,1,2074,3247, -16,0,116,1,1989, -894,1,1990,3248,16, -0,116,1,2035,741, -1,1775,3249,16,0, -116,1,32,3250,16, -0,116,1,2104,801, -1,2105,3251,16,0, -116,1,2547,3126,1, -2226,886,1,2606,3121, -1,1901,3252,16,0, -116,1,52,3253,16, -0,116,1,2587,3254, -16,0,116,1,1802, -774,1,2021,707,1, -1804,3255,16,0,116, -1,2135,836,1,2354, -853,1,2355,858,1, -2029,714,1,2575,3115, -1,2358,807,1,2032, -730,1,2360,813,1, -2362,3137,1,2037,746, -1,2039,751,1,1931, -863,1,2041,757,1, -1873,829,1,2043,762, -1,2044,767,1,2033, -735,1,2605,3098,1, -1574,787,1,2607,3104, -1,2608,3109,1,1958, -3256,16,0,116,1, -2586,3132,1,2534,3257, -16,0,116,1,55, -3258,19,115,1,55, -3259,5,51,1,0, -3260,16,0,113,1, -2401,3261,16,0,113, -1,1860,820,1,10, -3262,16,0,113,1, -2197,3263,16,0,113, -1,2309,3264,16,0, -113,1,21,3265,16, -0,113,1,1657,878, -1,2030,720,1,2031, -725,1,2074,3266,16, -0,113,1,1989,894, -1,1990,3267,16,0, -113,1,2035,741,1, -1775,3268,16,0,113, -1,32,3269,16,0, -113,1,2104,801,1, -2105,3270,16,0,113, -1,2547,3126,1,2226, -886,1,2606,3121,1, -1901,3271,16,0,113, -1,52,3272,16,0, -113,1,2587,3273,16, -0,113,1,1802,774, -1,2021,707,1,1804, -3274,16,0,113,1, -2135,836,1,2354,853, -1,2355,858,1,2029, -714,1,2575,3115,1, -2358,807,1,2032,730, -1,2360,813,1,2362, -3137,1,2037,746,1, -2039,751,1,1931,863, -1,2041,757,1,1873, -829,1,2043,762,1, -2044,767,1,2033,735, -1,2605,3098,1,1574, -787,1,2607,3104,1, -2608,3109,1,1958,3275, -16,0,113,1,2586, -3132,1,2534,3276,16, -0,113,1,56,3277, -19,112,1,56,3278, -5,51,1,0,3279, -16,0,110,1,2401, -3280,16,0,110,1, -1860,820,1,10,3281, -16,0,110,1,2197, -3282,16,0,110,1, -2309,3283,16,0,110, -1,21,3284,16,0, -110,1,1657,878,1, -2030,720,1,2031,725, -1,2074,3285,16,0, -110,1,1989,894,1, -1990,3286,16,0,110, -1,2035,741,1,1775, -3287,16,0,110,1, -32,3288,16,0,110, -1,2104,801,1,2105, -3289,16,0,110,1, -2547,3126,1,2226,886, -1,2606,3121,1,1901, -3290,16,0,110,1, -52,3291,16,0,110, -1,2587,3292,16,0, -110,1,1802,774,1, -2021,707,1,1804,3293, -16,0,110,1,2135, -836,1,2354,853,1, -2355,858,1,2029,714, -1,2575,3115,1,2358, -807,1,2032,730,1, -2360,813,1,2362,3137, -1,2037,746,1,2039, -751,1,1931,863,1, -2041,757,1,1873,829, -1,2043,762,1,2044, -767,1,2033,735,1, -2605,3098,1,1574,787, -1,2607,3104,1,2608, -3109,1,1958,3294,16, -0,110,1,2586,3132, -1,2534,3295,16,0, -110,1,57,3296,19, -109,1,57,3297,5, -51,1,0,3298,16, -0,107,1,2401,3299, -16,0,107,1,1860, -820,1,10,3300,16, -0,107,1,2197,3301, -16,0,107,1,2309, -3302,16,0,107,1, -21,3303,16,0,107, -1,1657,878,1,2030, -720,1,2031,725,1, -2074,3304,16,0,107, -1,1989,894,1,1990, -3305,16,0,107,1, -2035,741,1,1775,3306, -16,0,107,1,32, -3307,16,0,107,1, -2104,801,1,2105,3308, -16,0,107,1,2547, -3126,1,2226,886,1, -2606,3121,1,1901,3309, -16,0,107,1,52, -3310,16,0,107,1, -2587,3311,16,0,107, -1,1802,774,1,2021, -707,1,1804,3312,16, -0,107,1,2135,836, -1,2354,853,1,2355, -858,1,2029,714,1, -2575,3115,1,2358,807, -1,2032,730,1,2360, -813,1,2362,3137,1, -2037,746,1,2039,751, -1,1931,863,1,2041, -757,1,1873,829,1, -2043,762,1,2044,767, -1,2033,735,1,2605, -3098,1,1574,787,1, -2607,3104,1,2608,3109, -1,1958,3313,16,0, -107,1,2586,3132,1, -2534,3314,16,0,107, -1,58,3315,19,352, -1,58,3316,5,9, -1,2414,1580,1,2490, -3317,16,0,350,1, -2455,3318,16,0,350, -1,2451,1589,1,2416, -3319,16,0,350,1, -2453,1595,1,2355,858, -1,2360,813,1,2366, -3320,16,0,350,1, -59,3321,19,349,1, -59,3322,5,9,1, -2414,1580,1,2490,3323, -16,0,347,1,2455, -3324,16,0,347,1, -2451,1589,1,2416,3325, -16,0,347,1,2453, -1595,1,2355,858,1, -2360,813,1,2366,3326, -16,0,347,1,60, -3327,19,429,1,60, -3328,5,9,1,2414, -1580,1,2490,3329,16, -0,427,1,2455,3330, -16,0,427,1,2451, -1589,1,2416,3331,16, -0,427,1,2453,1595, -1,2355,858,1,2360, -813,1,2366,3332,16, -0,427,1,61,3333, -19,345,1,61,3334, -5,9,1,2414,1580, -1,2490,3335,16,0, -343,1,2455,3336,16, -0,343,1,2451,1589, -1,2416,3337,16,0, -343,1,2453,1595,1, -2355,858,1,2360,813, -1,2366,3338,16,0, -343,1,62,3339,19, -342,1,62,3340,5, -9,1,2414,1580,1, -2490,3341,16,0,340, -1,2455,3342,16,0, -340,1,2451,1589,1, -2416,3343,16,0,340, -1,2453,1595,1,2355, -858,1,2360,813,1, -2366,3344,16,0,340, -1,63,3345,19,562, -1,63,3346,5,9, -1,2414,1580,1,2490, -3347,16,0,560,1, -2455,3348,16,0,560, -1,2451,1589,1,2416, -3349,16,0,560,1, -2453,1595,1,2355,858, -1,2360,813,1,2366, -3350,16,0,560,1, -64,3351,19,336,1, -64,3352,5,9,1, -2414,1580,1,2490,3353, -16,0,334,1,2455, -3354,16,0,334,1, -2451,1589,1,2416,3355, -16,0,334,1,2453, -1595,1,2355,858,1, -2360,813,1,2366,3356, -16,0,334,1,65, -3357,19,333,1,65, -3358,5,9,1,2414, -1580,1,2490,3359,16, -0,331,1,2455,3360, -16,0,331,1,2451, -1589,1,2416,3361,16, -0,331,1,2453,1595, -1,2355,858,1,2360, -813,1,2366,3362,16, -0,331,1,66,3363, -19,425,1,66,3364, -5,9,1,2414,1580, -1,2490,3365,16,0, -423,1,2455,3366,16, -0,423,1,2451,1589, -1,2416,3367,16,0, -423,1,2453,1595,1, -2355,858,1,2360,813, -1,2366,3368,16,0, -423,1,67,3369,19, -422,1,67,3370,5, -9,1,2414,1580,1, -2490,3371,16,0,420, -1,2455,3372,16,0, -420,1,2451,1589,1, -2416,3373,16,0,420, -1,2453,1595,1,2355, -858,1,2360,813,1, -2366,3374,16,0,420, -1,68,3375,19,419, -1,68,3376,5,9, -1,2414,1580,1,2490, -3377,16,0,417,1, -2455,3378,16,0,417, -1,2451,1589,1,2416, -3379,16,0,417,1, -2453,1595,1,2355,858, -1,2360,813,1,2366, -3380,16,0,417,1, -69,3381,19,325,1, -69,3382,5,9,1, -2414,1580,1,2490,3383, -16,0,323,1,2455, -3384,16,0,323,1, -2451,1589,1,2416,3385, -16,0,323,1,2453, -1595,1,2355,858,1, -2360,813,1,2366,3386, -16,0,323,1,70, -3387,19,413,1,70, -3388,5,9,1,2414, -1580,1,2490,3389,16, -0,411,1,2455,3390, -16,0,411,1,2451, -1589,1,2416,3391,16, -0,411,1,2453,1595, -1,2355,858,1,2360, -813,1,2366,3392,16, -0,411,1,71,3393, -19,321,1,71,3394, -5,9,1,2414,1580, -1,2490,3395,16,0, -319,1,2455,3396,16, -0,319,1,2451,1589, -1,2416,3397,16,0, -319,1,2453,1595,1, -2355,858,1,2360,813, -1,2366,3398,16,0, -319,1,72,3399,19, -410,1,72,3400,5, -9,1,2414,1580,1, -2490,3401,16,0,408, -1,2455,3402,16,0, -408,1,2451,1589,1, -2416,3403,16,0,408, -1,2453,1595,1,2355, -858,1,2360,813,1, -2366,3404,16,0,408, -1,73,3405,19,317, -1,73,3406,5,9, -1,2414,1580,1,2490, -3407,16,0,315,1, -2455,3408,16,0,315, -1,2451,1589,1,2416, -3409,16,0,315,1, -2453,1595,1,2355,858, -1,2360,813,1,2366, -3410,16,0,315,1, -74,3411,19,471,1, -74,3412,5,9,1, -2414,1580,1,2490,3413, -16,0,469,1,2455, -3414,16,0,469,1, -2451,1589,1,2416,3415, -16,0,469,1,2453, -1595,1,2355,858,1, -2360,813,1,2366,3416, -16,0,469,1,75, -3417,19,311,1,75, -3418,5,9,1,2414, -1580,1,2490,3419,16, -0,309,1,2455,3420, -16,0,309,1,2451, -1589,1,2416,3421,16, -0,309,1,2453,1595, -1,2355,858,1,2360, -813,1,2366,3422,16, -0,309,1,76,3423, -19,405,1,76,3424, -5,9,1,2414,1580, -1,2490,3425,16,0, -403,1,2455,3426,16, -0,403,1,2451,1589, -1,2416,3427,16,0, -403,1,2453,1595,1, -2355,858,1,2360,813, -1,2366,3428,16,0, -403,1,77,3429,19, -307,1,77,3430,5, -9,1,2414,1580,1, -2490,3431,16,0,305, -1,2455,3432,16,0, -305,1,2451,1589,1, -2416,3433,16,0,305, -1,2453,1595,1,2355, -858,1,2360,813,1, -2366,3434,16,0,305, -1,78,3435,19,463, -1,78,3436,5,9, -1,2414,1580,1,2490, -3437,16,0,461,1, -2455,3438,16,0,461, -1,2451,1589,1,2416, -3439,16,0,461,1, -2453,1595,1,2355,858, -1,2360,813,1,2366, -3440,16,0,461,1, -79,3441,19,301,1, -79,3442,5,9,1, -2414,1580,1,2490,3443, -16,0,299,1,2455, -3444,16,0,299,1, -2451,1589,1,2416,3445, -16,0,299,1,2453, -1595,1,2355,858,1, -2360,813,1,2366,3446, -16,0,299,1,80, -3447,19,298,1,80, -3448,5,9,1,2414, -1580,1,2490,3449,16, -0,296,1,2455,3450, -16,0,296,1,2451, -1589,1,2416,3451,16, -0,296,1,2453,1595, -1,2355,858,1,2360, -813,1,2366,3452,16, -0,296,1,81,3453, -19,295,1,81,3454, -5,9,1,2414,1580, -1,2490,3455,16,0, -293,1,2455,3456,16, -0,293,1,2451,1589, -1,2416,3457,16,0, -293,1,2453,1595,1, -2355,858,1,2360,813, -1,2366,3458,16,0, -293,1,82,3459,19, -590,1,82,3460,5, -9,1,2414,1580,1, -2490,3461,16,0,588, -1,2455,3462,16,0, -588,1,2451,1589,1, -2416,3463,16,0,588, -1,2453,1595,1,2355, -858,1,2360,813,1, -2366,3464,16,0,588, -1,83,3465,19,393, -1,83,3466,5,9, -1,2414,1580,1,2490, -3467,16,0,391,1, -2455,3468,16,0,391, -1,2451,1589,1,2416, -3469,16,0,391,1, -2453,1595,1,2355,858, -1,2360,813,1,2366, -3470,16,0,391,1, -84,3471,19,288,1, -84,3472,5,9,1, -2414,1580,1,2490,3473, -16,0,286,1,2455, -3474,16,0,286,1, -2451,1589,1,2416,3475, -16,0,286,1,2453, -1595,1,2355,858,1, -2360,813,1,2366,3476, -16,0,286,1,85, -3477,19,285,1,85, -3478,5,9,1,2414, -1580,1,2490,3479,16, -0,283,1,2455,3480, -16,0,283,1,2451, -1589,1,2416,3481,16, -0,283,1,2453,1595, -1,2355,858,1,2360, -813,1,2366,3482,16, -0,283,1,86,3483, -19,389,1,86,3484, -5,9,1,2414,1580, -1,2490,3485,16,0, -387,1,2455,3486,16, -0,387,1,2451,1589, -1,2416,3487,16,0, -387,1,2453,1595,1, -2355,858,1,2360,813, -1,2366,3488,16,0, -387,1,87,3489,19, -281,1,87,3490,5, -9,1,2414,1580,1, -2490,3491,16,0,279, -1,2455,3492,16,0, -279,1,2451,1589,1, -2416,3493,16,0,279, -1,2453,1595,1,2355, -858,1,2360,813,1, -2366,3494,16,0,279, -1,88,3495,19,644, -1,88,3496,5,9, -1,2414,1580,1,2490, -3497,16,0,642,1, -2455,3498,16,0,642, -1,2451,1589,1,2416, -3499,16,0,642,1, -2453,1595,1,2355,858, -1,2360,813,1,2366, -3500,16,0,642,1, -89,3501,19,276,1, -89,3502,5,9,1, -2414,1580,1,2490,3503, -16,0,274,1,2455, -3504,16,0,274,1, -2451,1589,1,2416,3505, -16,0,274,1,2453, -1595,1,2355,858,1, -2360,813,1,2366,3506, -16,0,274,1,90, -3507,19,382,1,90, -3508,5,9,1,2414, -1580,1,2490,3509,16, -0,380,1,2455,3510, -16,0,380,1,2451, -1589,1,2416,3511,16, -0,380,1,2453,1595, -1,2355,858,1,2360, -813,1,2366,3512,16, -0,380,1,91,3513, -19,133,1,91,3514, -5,121,1,0,3515, -16,0,558,1,1, -1904,1,2,1910,1, -3,1915,1,4,1920, -1,5,1925,1,6, -1930,1,7,1935,1, -8,3516,16,0,131, -1,1515,3517,16,0, -165,1,2605,3098,1, -2135,836,1,2021,707, -1,2022,3518,16,0, -501,1,256,3519,16, -0,173,1,2025,3520, -16,0,505,1,18, -3521,16,0,138,1, -2027,3522,16,0,509, -1,2029,714,1,2030, -720,1,2031,725,1, -2032,730,1,2033,735, -1,277,3523,16,0, -173,1,2035,741,1, -2037,746,1,2039,751, -1,32,3524,16,0, -165,1,2041,757,1, -2043,762,1,2044,767, -1,2547,3126,1,2550, -3525,16,0,173,1, -41,3526,16,0,173, -1,1297,3527,16,0, -165,1,43,3528,16, -0,173,1,1802,774, -1,46,3529,16,0, -178,1,1804,3530,16, -0,165,1,299,3531, -16,0,173,1,2309, -3532,16,0,165,1, -52,3533,16,0,165, -1,509,3534,16,0, -173,1,525,3535,16, -0,173,1,62,3536, -16,0,194,1,65, -3537,16,0,196,1, -2074,3538,16,0,165, -1,1574,787,1,71, -3539,16,0,173,1, -1775,3540,16,0,165, -1,76,3541,16,0, -173,1,1834,3542,16, -0,165,1,2197,3543, -16,0,165,1,79, -3544,16,0,173,1, -1335,3545,16,0,165, -1,322,3546,16,0, -173,1,85,3547,16, -0,173,1,1261,3548, -16,0,165,1,89, -3549,16,0,173,1, -346,3550,16,0,173, -1,2355,858,1,97, -3551,16,0,173,1, -2608,3109,1,2358,807, -1,2360,813,1,102, -3552,16,0,173,1, -1860,820,1,2364,3553, -16,0,379,1,1113, -3554,16,0,158,1, -112,3555,16,0,173, -1,1117,3556,16,0, -165,1,1873,829,1, -1876,3557,16,0,165, -1,372,3558,16,0, -539,1,374,3559,16, -0,541,1,124,3560, -16,0,173,1,376, -3561,16,0,543,1, -378,3562,16,0,545, -1,381,3563,16,0, -173,1,137,3564,16, -0,173,1,1901,3565, -16,0,165,1,2575, -3115,1,1153,3566,16, -0,165,1,151,3567, -16,0,173,1,1407, -3568,16,0,165,1, -1659,3569,16,0,165, -1,406,3570,16,0, -173,1,2586,3132,1, -2587,3571,16,0,558, -1,1371,3572,16,0, -165,1,2104,801,1, -2105,3573,16,0,165, -1,166,3574,16,0, -173,1,1622,3575,16, -0,173,1,2354,853, -1,1931,863,1,1933, -3576,16,0,165,1, -2362,3137,1,2606,3121, -1,2607,3104,1,1585, -3577,16,0,173,1, -182,3578,16,0,173, -1,1189,3579,16,0, -165,1,1443,3580,16, -0,165,1,1695,3581, -16,0,165,1,431, -3582,16,0,173,1, -447,3583,16,0,173, -1,199,3584,16,0, -173,1,1958,3585,16, -0,165,1,1657,878, -1,459,3586,16,0, -173,1,462,3587,16, -0,173,1,217,3588, -16,0,173,1,2226, -886,1,1225,3589,16, -0,165,1,1479,3590, -16,0,165,1,1731, -3591,16,0,173,1, -1989,894,1,1990,3592, -16,0,165,1,236, -3593,16,0,173,1, -1756,3594,16,0,165, -1,92,3595,19,624, -1,92,3596,5,91, -1,256,3597,16,0, -622,1,1261,3598,16, -0,622,1,509,3599, -16,0,622,1,2197, -3600,16,0,622,1, -1515,3601,16,0,622, -1,2021,707,1,1775, -3602,16,0,622,1, -2029,714,1,2030,720, -1,2031,725,1,2032, -730,1,2033,735,1, -277,3603,16,0,622, -1,2035,741,1,2037, -746,1,2039,751,1, -32,3604,16,0,622, -1,2041,757,1,2043, -762,1,2044,767,1, -2550,3605,16,0,622, -1,41,3606,16,0, -622,1,1297,3607,16, -0,622,1,43,3608, -16,0,622,1,1802, -774,1,1804,3609,16, -0,622,1,299,3610, -16,0,622,1,2309, -3611,16,0,622,1, -52,3612,16,0,622, -1,525,3613,16,0, -622,1,62,3614,16, -0,622,1,2074,3615, -16,0,622,1,1574, -787,1,71,3616,16, -0,622,1,76,3617, -16,0,622,1,1834, -3618,16,0,622,1, -1585,3619,16,0,622, -1,1335,3620,16,0, -622,1,79,3621,16, -0,622,1,85,3622, -16,0,622,1,89, -3623,16,0,622,1, -346,3624,16,0,622, -1,2104,801,1,2105, -3625,16,0,622,1, -2358,807,1,2360,813, -1,97,3626,16,0, -622,1,1860,820,1, -102,3627,16,0,622, -1,112,3628,16,0, -622,1,1117,3629,16, -0,622,1,1873,829, -1,1876,3630,16,0, -622,1,124,3631,16, -0,622,1,2135,836, -1,381,3632,16,0, -622,1,322,3633,16, -0,622,1,137,3634, -16,0,622,1,1901, -3635,16,0,622,1, -1153,3636,16,0,622, -1,151,3637,16,0, -622,1,1407,3638,16, -0,622,1,1659,3639, -16,0,622,1,406, -3640,16,0,622,1, -1371,3641,16,0,622, -1,166,3642,16,0, -622,1,1622,3643,16, -0,622,1,2354,853, -1,2355,858,1,1931, -863,1,1933,3644,16, -0,622,1,431,3645, -16,0,622,1,182, -3646,16,0,622,1, -1189,3647,16,0,622, -1,1443,3648,16,0, -622,1,1695,3649,16, -0,622,1,447,3650, -16,0,622,1,199, -3651,16,0,622,1, -1958,3652,16,0,622, -1,1657,878,1,459, -3653,16,0,622,1, -462,3654,16,0,622, -1,217,3655,16,0, -622,1,2226,886,1, -1225,3656,16,0,622, -1,1479,3657,16,0, -622,1,1731,3658,16, -0,622,1,1989,894, -1,1990,3659,16,0, -622,1,236,3660,16, -0,622,1,1756,3661, -16,0,622,1,93, -3662,19,621,1,93, -3663,5,91,1,256, -3664,16,0,619,1, -1261,3665,16,0,619, -1,509,3666,16,0, -619,1,2197,3667,16, -0,619,1,1515,3668, -16,0,619,1,2021, -707,1,1775,3669,16, -0,619,1,2029,714, -1,2030,720,1,2031, -725,1,2032,730,1, -2033,735,1,277,3670, -16,0,619,1,2035, -741,1,2037,746,1, -2039,751,1,32,3671, -16,0,619,1,2041, -757,1,2043,762,1, -2044,767,1,2550,3672, -16,0,619,1,41, -3673,16,0,619,1, -1297,3674,16,0,619, -1,43,3675,16,0, -619,1,1802,774,1, -1804,3676,16,0,619, -1,299,3677,16,0, -619,1,2309,3678,16, -0,619,1,52,3679, -16,0,619,1,525, -3680,16,0,619,1, -62,3681,16,0,619, -1,2074,3682,16,0, -619,1,1574,787,1, -71,3683,16,0,619, -1,76,3684,16,0, -619,1,1834,3685,16, -0,619,1,1585,3686, -16,0,619,1,1335, -3687,16,0,619,1, -79,3688,16,0,619, -1,85,3689,16,0, -619,1,89,3690,16, -0,619,1,346,3691, -16,0,619,1,2104, -801,1,2105,3692,16, -0,619,1,2358,807, -1,2360,813,1,97, -3693,16,0,619,1, -1860,820,1,102,3694, -16,0,619,1,112, -3695,16,0,619,1, -1117,3696,16,0,619, -1,1873,829,1,1876, -3697,16,0,619,1, -124,3698,16,0,619, -1,2135,836,1,381, -3699,16,0,619,1, -322,3700,16,0,619, -1,137,3701,16,0, -619,1,1901,3702,16, -0,619,1,1153,3703, -16,0,619,1,151, -3704,16,0,619,1, -1407,3705,16,0,619, -1,1659,3706,16,0, -619,1,406,3707,16, -0,619,1,1371,3708, -16,0,619,1,166, -3709,16,0,619,1, -1622,3710,16,0,619, -1,2354,853,1,2355, -858,1,1931,863,1, -1933,3711,16,0,619, -1,431,3712,16,0, -619,1,182,3713,16, -0,619,1,1189,3714, -16,0,619,1,1443, -3715,16,0,619,1, -1695,3716,16,0,619, -1,447,3717,16,0, -619,1,199,3718,16, -0,619,1,1958,3719, -16,0,619,1,1657, -878,1,459,3720,16, -0,619,1,462,3721, -16,0,619,1,217, -3722,16,0,619,1, -2226,886,1,1225,3723, -16,0,619,1,1479, -3724,16,0,619,1, -1731,3725,16,0,619, -1,1989,894,1,1990, -3726,16,0,619,1, -236,3727,16,0,619, -1,1756,3728,16,0, -619,1,94,3729,19, -618,1,94,3730,5, -91,1,256,3731,16, -0,616,1,1261,3732, -16,0,616,1,509, -3733,16,0,616,1, -2197,3734,16,0,616, -1,1515,3735,16,0, -616,1,2021,707,1, -1775,3736,16,0,616, -1,2029,714,1,2030, -720,1,2031,725,1, -2032,730,1,2033,735, -1,277,3737,16,0, -616,1,2035,741,1, -2037,746,1,2039,751, -1,32,3738,16,0, -616,1,2041,757,1, -2043,762,1,2044,767, -1,2550,3739,16,0, -616,1,41,3740,16, -0,616,1,1297,3741, -16,0,616,1,43, -3742,16,0,616,1, -1802,774,1,1804,3743, -16,0,616,1,299, -3744,16,0,616,1, -2309,3745,16,0,616, -1,52,3746,16,0, -616,1,525,3747,16, -0,616,1,62,3748, -16,0,616,1,2074, -3749,16,0,616,1, -1574,787,1,71,3750, -16,0,616,1,76, -3751,16,0,616,1, -1834,3752,16,0,616, -1,1585,3753,16,0, -616,1,1335,3754,16, -0,616,1,79,3755, -16,0,616,1,85, -3756,16,0,616,1, -89,3757,16,0,616, -1,346,3758,16,0, -616,1,2104,801,1, -2105,3759,16,0,616, -1,2358,807,1,2360, -813,1,97,3760,16, -0,616,1,1860,820, -1,102,3761,16,0, -616,1,112,3762,16, -0,616,1,1117,3763, -16,0,616,1,1873, -829,1,1876,3764,16, -0,616,1,124,3765, -16,0,616,1,2135, -836,1,381,3766,16, -0,616,1,322,3767, -16,0,616,1,137, -3768,16,0,616,1, -1901,3769,16,0,616, -1,1153,3770,16,0, -616,1,151,3771,16, -0,616,1,1407,3772, -16,0,616,1,1659, -3773,16,0,616,1, -406,3774,16,0,616, -1,1371,3775,16,0, -616,1,166,3776,16, -0,616,1,1622,3777, -16,0,616,1,2354, -853,1,2355,858,1, -1931,863,1,1933,3778, -16,0,616,1,431, -3779,16,0,616,1, -182,3780,16,0,616, -1,1189,3781,16,0, -616,1,1443,3782,16, -0,616,1,1695,3783, -16,0,616,1,447, -3784,16,0,616,1, -199,3785,16,0,616, -1,1958,3786,16,0, -616,1,1657,878,1, -459,3787,16,0,616, -1,462,3788,16,0, -616,1,217,3789,16, -0,616,1,2226,886, -1,1225,3790,16,0, -616,1,1479,3791,16, -0,616,1,1731,3792, -16,0,616,1,1989, -894,1,1990,3793,16, -0,616,1,236,3794, -16,0,616,1,1756, -3795,16,0,616,1, -95,3796,19,103,1, -95,3797,5,1,1, -0,3798,16,0,104, -1,96,3799,19,647, -1,96,3800,5,1, -1,0,3801,16,0, -645,1,97,3802,19, -605,1,97,3803,5, -2,1,0,3804,16, -0,603,1,2587,3805, -16,0,630,1,98, -3806,19,357,1,98, -3807,5,2,1,0, -3808,16,0,481,1, -2587,3809,16,0,355, -1,99,3810,19,474, -1,99,3811,5,2, -1,0,3812,16,0, -472,1,2587,3813,16, -0,652,1,100,3814, -19,466,1,100,3815, -5,4,1,0,3816, -16,0,464,1,2587, -3817,16,0,464,1, -2598,3818,16,0,609, -1,2528,3819,16,0, -609,1,101,3820,19, -491,1,101,3821,5, -2,1,2366,3822,16, -0,492,1,2455,3823, -16,0,489,1,102, -3824,19,398,1,102, -3825,5,4,1,2366, -3826,16,0,396,1, -2455,3827,16,0,396, -1,2490,3828,16,0, -460,1,2416,3829,16, -0,460,1,103,3830, -19,141,1,103,3831, -5,3,1,2401,3832, -16,0,437,1,2534, -3833,16,0,475,1, -10,3834,16,0,139, -1,104,3835,19,151, -1,104,3836,5,16, -1,0,3837,16,0, -482,1,2074,3838,16, -0,637,1,2587,3839, -16,0,482,1,10, -3840,16,0,266,1, -2197,3841,16,0,637, -1,1901,3842,16,0, -637,1,2309,3843,16, -0,637,1,2534,3844, -16,0,266,1,21, -3845,16,0,149,1, -2105,3846,16,0,637, -1,1804,3847,16,0, -637,1,1990,3848,16, -0,637,1,32,3849, -16,0,637,1,2401, -3850,16,0,266,1, -1958,3851,16,0,637, -1,1775,3852,16,0, -637,1,105,3853,19, -130,1,105,3854,5, -17,1,0,3855,16, -0,128,1,2074,3856, -16,0,137,1,2587, -3857,16,0,128,1, -2105,3858,16,0,137, -1,10,3859,16,0, -137,1,2197,3860,16, -0,137,1,1901,3861, -16,0,137,1,2309, -3862,16,0,137,1, -52,3863,16,0,192, -1,21,3864,16,0, -137,1,2534,3865,16, -0,137,1,1804,3866, -16,0,137,1,1990, -3867,16,0,137,1, -32,3868,16,0,137, -1,2401,3869,16,0, -137,1,1958,3870,16, -0,137,1,1775,3871, -16,0,137,1,106, -3872,19,432,1,106, -3873,5,4,1,2366, -3874,16,0,430,1, -2455,3875,16,0,430, -1,2490,3876,16,0, -430,1,2416,3877,16, -0,430,1,107,3878, -19,224,1,107,3879, -5,13,1,2074,3880, -16,0,510,1,2412, -3881,16,0,363,1, -2197,3882,16,0,510, -1,1901,3883,16,0, -510,1,2309,3884,16, -0,510,1,1990,3885, -16,0,510,1,1804, -3886,16,0,510,1, -2545,3887,16,0,222, -1,31,3888,16,0, -265,1,32,3889,16, -0,510,1,2105,3890, -16,0,510,1,1958, -3891,16,0,510,1, -1775,3892,16,0,510, -1,108,3893,19,314, -1,108,3894,5,1, -1,32,3895,16,0, -312,1,109,3896,19, -255,1,109,3897,5, -10,1,2074,3898,16, -0,578,1,2197,3899, -16,0,661,1,1901, -3900,16,0,438,1, -2309,3901,16,0,253, -1,1804,3902,16,0, -326,1,1990,3903,16, -0,498,1,32,3904, -16,0,450,1,2105, -3905,16,0,651,1, -1958,3906,16,0,477, -1,1775,3907,16,0, -260,1,110,3908,19, -634,1,110,3909,5, -10,1,2074,3910,16, -0,632,1,2197,3911, -16,0,632,1,1901, -3912,16,0,632,1, -2309,3913,16,0,632, -1,1804,3914,16,0, -632,1,1990,3915,16, -0,632,1,32,3916, -16,0,632,1,2105, -3917,16,0,632,1, -1958,3918,16,0,632, -1,1775,3919,16,0, -632,1,111,3920,19, -161,1,111,3921,5, -29,1,1479,3922,16, -0,563,1,2074,3923, -16,0,636,1,1695, -3924,16,0,188,1, -1756,3925,16,0,252, -1,2197,3926,16,0, -636,1,2309,3927,16, -0,636,1,1876,3928, -16,0,237,1,1659, -3929,16,0,252,1, -1443,3930,16,0,526, -1,1117,3931,16,0, -159,1,1990,3932,16, -0,636,1,1189,3933, -16,0,238,1,1775, -3934,16,0,636,1, -32,3935,16,0,636, -1,2105,3936,16,0, -636,1,1515,3937,16, -0,580,1,1901,3938, -16,0,636,1,52, -3939,16,0,591,1, -1804,3940,16,0,636, -1,1261,3941,16,0, -358,1,1153,3942,16, -0,245,1,1225,3943, -16,0,289,1,1335, -3944,16,0,459,1, -1933,3945,16,0,565, -1,1834,3946,16,0, -373,1,1297,3947,16, -0,386,1,1407,3948, -16,0,572,1,1958, -3949,16,0,636,1, -1371,3950,16,0,453, -1,112,3951,19,535, -1,112,3952,5,10, -1,2074,3953,16,0, -533,1,2197,3954,16, -0,533,1,1901,3955, -16,0,533,1,2309, -3956,16,0,533,1, -1804,3957,16,0,533, -1,1990,3958,16,0, -533,1,32,3959,16, -0,533,1,2105,3960, -16,0,533,1,1958, -3961,16,0,533,1, -1775,3962,16,0,533, -1,113,3963,19,531, -1,113,3964,5,10, -1,2074,3965,16,0, -529,1,2197,3966,16, -0,529,1,1901,3967, -16,0,529,1,2309, -3968,16,0,529,1, -1804,3969,16,0,529, -1,1990,3970,16,0, -529,1,32,3971,16, -0,529,1,2105,3972, -16,0,529,1,1958, -3973,16,0,529,1, -1775,3974,16,0,529, -1,114,3975,19,576, -1,114,3976,5,10, -1,2074,3977,16,0, -574,1,2197,3978,16, -0,574,1,1901,3979, -16,0,574,1,2309, -3980,16,0,574,1, -1804,3981,16,0,574, -1,1990,3982,16,0, -574,1,32,3983,16, -0,574,1,2105,3984, -16,0,574,1,1958, -3985,16,0,574,1, -1775,3986,16,0,574, -1,115,3987,19,525, -1,115,3988,5,10, -1,2074,3989,16,0, -523,1,2197,3990,16, -0,523,1,1901,3991, -16,0,523,1,2309, -3992,16,0,523,1, -1804,3993,16,0,523, -1,1990,3994,16,0, -523,1,32,3995,16, -0,523,1,2105,3996, -16,0,523,1,1958, -3997,16,0,523,1, -1775,3998,16,0,523, -1,116,3999,19,522, -1,116,4000,5,10, -1,2074,4001,16,0, -520,1,2197,4002,16, -0,520,1,1901,4003, -16,0,520,1,2309, -4004,16,0,520,1, -1804,4005,16,0,520, -1,1990,4006,16,0, -520,1,32,4007,16, -0,520,1,2105,4008, -16,0,520,1,1958, -4009,16,0,520,1, -1775,4010,16,0,520, -1,117,4011,19,519, -1,117,4012,5,10, -1,2074,4013,16,0, -517,1,2197,4014,16, -0,517,1,1901,4015, -16,0,517,1,2309, -4016,16,0,517,1, -1804,4017,16,0,517, -1,1990,4018,16,0, -517,1,32,4019,16, -0,517,1,2105,4020, -16,0,517,1,1958, -4021,16,0,517,1, -1775,4022,16,0,517, -1,118,4023,19,516, -1,118,4024,5,10, -1,2074,4025,16,0, -514,1,2197,4026,16, -0,514,1,1901,4027, -16,0,514,1,2309, -4028,16,0,514,1, -1804,4029,16,0,514, -1,1990,4030,16,0, -514,1,32,4031,16, -0,514,1,2105,4032, -16,0,514,1,1958, -4033,16,0,514,1, -1775,4034,16,0,514, -1,119,4035,19,513, -1,119,4036,5,10, -1,2074,4037,16,0, -511,1,2197,4038,16, -0,511,1,1901,4039, -16,0,511,1,2309, -4040,16,0,511,1, -1804,4041,16,0,511, -1,1990,4042,16,0, -511,1,32,4043,16, -0,511,1,2105,4044, -16,0,511,1,1958, -4045,16,0,511,1, -1775,4046,16,0,511, -1,120,4047,19,147, -1,120,4048,5,2, -1,1756,4049,16,0, -322,1,1659,4050,16, -0,145,1,121,4051, -19,556,1,121,4052, -5,65,1,1479,4053, -16,0,554,1,112, -4054,16,0,554,1, -1804,4055,16,0,554, -1,431,4056,16,0, -554,1,1443,4057,16, -0,554,1,1756,4058, -16,0,554,1,124, -4059,16,0,554,1, -525,4060,16,0,554, -1,2197,4061,16,0, -554,1,236,4062,16, -0,554,1,346,4063, -16,0,554,1,2309, -4064,16,0,554,1, -1876,4065,16,0,554, -1,1659,4066,16,0, -554,1,1225,4067,16, -0,554,1,1117,4068, -16,0,554,1,137, -4069,16,0,554,1, -1775,4070,16,0,554, -1,32,4071,16,0, -554,1,2105,4072,16, -0,554,1,1407,4073, -16,0,554,1,256, -4074,16,0,554,1, -459,4075,16,0,554, -1,41,4076,16,0, -554,1,151,4077,16, -0,554,1,43,4078, -16,0,554,1,1901, -4079,16,0,554,1, -509,4080,16,0,554, -1,52,4081,16,0, -554,1,381,4082,16, -0,554,1,447,4083, -16,0,554,1,166, -4084,16,0,554,1, -462,4085,16,0,554, -1,277,4086,16,0, -554,1,1695,4087,16, -0,554,1,1261,4088, -16,0,554,1,1153, -4089,16,0,554,1, -62,4090,16,0,585, -1,2550,4091,16,0, -554,1,2074,4092,16, -0,554,1,1335,4093, -16,0,554,1,71, -4094,16,0,554,1, -182,4095,16,0,554, -1,76,4096,16,0, -554,1,79,4097,16, -0,554,1,1933,4098, -16,0,554,1,299, -4099,16,0,554,1, -85,4100,16,0,554, -1,1515,4101,16,0, -554,1,89,4102,16, -0,554,1,1834,4103, -16,0,554,1,1622, -4104,16,0,554,1, -1990,4105,16,0,554, -1,406,4106,16,0, -554,1,1731,4107,16, -0,554,1,97,4108, -16,0,554,1,1297, -4109,16,0,554,1, -1189,4110,16,0,554, -1,102,4111,16,0, -554,1,1585,4112,16, -0,554,1,322,4113, -16,0,554,1,1958, -4114,16,0,554,1, -199,4115,16,0,554, -1,1371,4116,16,0, -554,1,217,4117,16, -0,554,1,122,4118, -19,601,1,122,4119, -5,2,1,459,4120, -16,0,599,1,41, -4121,16,0,653,1, -123,4122,19,608,1, -123,4123,5,3,1, -462,4124,16,0,606, -1,459,4125,16,0, -628,1,41,4126,16, -0,628,1,124,4127, -19,4128,4,36,69, -0,120,0,112,0, -114,0,101,0,115, -0,115,0,105,0, -111,0,110,0,65, -0,114,0,103,0, -117,0,109,0,101, -0,110,0,116,0, -1,124,4123,1,125, -4129,19,548,1,125, -4130,5,65,1,1479, -4131,16,0,546,1, -112,4132,16,0,546, -1,1804,4133,16,0, -546,1,431,4134,16, -0,546,1,1443,4135, -16,0,546,1,1756, -4136,16,0,546,1, -124,4137,16,0,546, -1,525,4138,16,0, -546,1,2197,4139,16, -0,546,1,236,4140, -16,0,546,1,346, -4141,16,0,546,1, -2309,4142,16,0,546, -1,1876,4143,16,0, -546,1,1659,4144,16, -0,546,1,1225,4145, -16,0,546,1,1117, -4146,16,0,546,1, -137,4147,16,0,546, -1,1775,4148,16,0, -546,1,32,4149,16, -0,546,1,2105,4150, -16,0,546,1,1407, -4151,16,0,546,1, -256,4152,16,0,546, -1,459,4153,16,0, -546,1,41,4154,16, -0,546,1,151,4155, -16,0,546,1,43, -4156,16,0,546,1, -1901,4157,16,0,546, -1,509,4158,16,0, -546,1,52,4159,16, -0,546,1,381,4160, -16,0,546,1,447, -4161,16,0,546,1, -166,4162,16,0,546, -1,462,4163,16,0, -546,1,277,4164,16, -0,546,1,1695,4165, -16,0,546,1,1261, -4166,16,0,546,1, -1153,4167,16,0,546, -1,62,4168,16,0, -586,1,2550,4169,16, -0,546,1,2074,4170, -16,0,546,1,1335, -4171,16,0,546,1, -71,4172,16,0,546, -1,182,4173,16,0, -546,1,76,4174,16, -0,546,1,79,4175, -16,0,546,1,1933, -4176,16,0,546,1, -299,4177,16,0,546, -1,85,4178,16,0, -546,1,1515,4179,16, -0,546,1,89,4180, -16,0,546,1,1834, -4181,16,0,546,1, -1622,4182,16,0,546, -1,1990,4183,16,0, -546,1,406,4184,16, -0,546,1,1731,4185, -16,0,546,1,97, -4186,16,0,546,1, -1297,4187,16,0,546, -1,1189,4188,16,0, -546,1,102,4189,16, -0,546,1,1585,4190, -16,0,546,1,322, -4191,16,0,546,1, -1958,4192,16,0,546, -1,199,4193,16,0, -546,1,1371,4194,16, -0,546,1,217,4195, -16,0,546,1,126, -4196,19,4197,4,28, -86,0,101,0,99, -0,116,0,111,0, -114,0,67,0,111, -0,110,0,115,0, -116,0,97,0,110, -0,116,0,1,126, -4130,1,127,4198,19, -4199,4,32,82,0, -111,0,116,0,97, -0,116,0,105,0, -111,0,110,0,67, -0,111,0,110,0, -115,0,116,0,97, -0,110,0,116,0, -1,127,4130,1,128, -4200,19,4201,4,24, -76,0,105,0,115, -0,116,0,67,0, -111,0,110,0,115, -0,116,0,97,0, -110,0,116,0,1, -128,4130,1,129,4202, -19,169,1,129,4203, -5,64,1,1479,4204, -16,0,537,1,112, -4205,16,0,247,1, -1804,4206,16,0,584, -1,431,4207,16,0, -581,1,1443,4208,16, -0,488,1,1756,4209, -16,0,660,1,124, -4210,16,0,259,1, -525,4211,16,0,366, -1,2197,4212,16,0, -584,1,236,4213,16, -0,426,1,346,4214, -16,0,500,1,2309, -4215,16,0,584,1, -1876,4216,16,0,378, -1,1659,4217,16,0, -660,1,1225,4218,16, -0,246,1,1117,4219, -16,0,218,1,137, -4220,16,0,282,1, -1775,4221,16,0,584, -1,32,4222,16,0, -584,1,2105,4223,16, -0,584,1,1407,4224, -16,0,493,1,256, -4225,16,0,442,1, -459,4226,16,0,167, -1,41,4227,16,0, -167,1,151,4228,16, -0,318,1,43,4229, -16,0,631,1,1901, -4230,16,0,584,1, -509,4231,16,0,641, -1,52,4232,16,0, -593,1,381,4233,16, -0,559,1,447,4234, -16,0,366,1,166, -4235,16,0,353,1, -462,4236,16,0,167, -1,277,4237,16,0, -451,1,1695,4238,16, -0,277,1,1261,4239, -16,0,308,1,1153, -4240,16,0,174,1, -2550,4241,16,0,569, -1,2074,4242,16,0, -584,1,1335,4243,16, -0,402,1,71,4244, -16,0,202,1,182, -4245,16,0,366,1, -76,4246,16,0,557, -1,79,4247,16,0, -217,1,1933,4248,16, -0,445,1,299,4249, -16,0,467,1,85, -4250,16,0,485,1, -1515,4251,16,0,568, -1,89,4252,16,0, -228,1,1834,4253,16, -0,346,1,1622,4254, -16,0,640,1,1990, -4255,16,0,584,1, -406,4256,16,0,570, -1,1731,4257,16,0, -248,1,97,4258,16, -0,446,1,1297,4259, -16,0,407,1,1189, -4260,16,0,216,1, -102,4261,16,0,236, -1,1585,4262,16,0, -650,1,322,4263,16, -0,486,1,1958,4264, -16,0,584,1,199, -4265,16,0,377,1, -1371,4266,16,0,443, -1,217,4267,16,0, -394,1,130,4268,19, -4269,4,36,67,0, -111,0,110,0,115, -0,116,0,97,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, -130,4203,1,131,4270, -19,4271,4,30,73, -0,100,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, -131,4203,1,132,4272, -19,4273,4,36,73, -0,100,0,101,0, -110,0,116,0,68, -0,111,0,116,0, -69,0,120,0,112, -0,114,0,101,0, -115,0,115,0,105, -0,111,0,110,0, -1,132,4203,1,133, -4274,19,4275,4,44, -70,0,117,0,110, -0,99,0,116,0, -105,0,111,0,110, -0,67,0,97,0, -108,0,108,0,69, -0,120,0,112,0, -114,0,101,0,115, -0,115,0,105,0, -111,0,110,0,1, -133,4203,1,134,4276, -19,4277,4,32,66, -0,105,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,134,4203,1, -135,4278,19,4279,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,135,4203,1, -136,4280,19,4281,4, -36,84,0,121,0, -112,0,101,0,99, -0,97,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,136,4203, -1,137,4282,19,4283, -4,42,80,0,97, -0,114,0,101,0, -110,0,116,0,104, -0,101,0,115,0, -105,0,115,0,69, -0,120,0,112,0, -114,0,101,0,115, -0,115,0,105,0, -111,0,110,0,1, -137,4203,1,138,4284, -19,4285,4,56,73, -0,110,0,99,0, -114,0,101,0,109, -0,101,0,110,0, -116,0,68,0,101, -0,99,0,114,0, -101,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,138,4203,1,140, -4286,19,682,1,140, -3797,1,141,4287,19, -693,1,141,3797,1, -142,4288,19,3112,1, -142,3800,1,143,4289, -19,3124,1,143,3800, -1,144,4290,19,3107, -1,144,3800,1,145, -4291,19,3102,1,145, -3800,1,146,4292,19, -3135,1,146,3803,1, -147,4293,19,3119,1, -147,3803,1,148,4294, -19,3130,1,148,3807, -1,149,4295,19,3140, -1,149,3807,1,150, -4296,19,676,1,150, -3811,1,151,4297,19, -671,1,151,3811,1, -152,4298,19,688,1, -152,3815,1,153,4299, -19,698,1,153,3815, -1,154,4300,19,1598, -1,154,3821,1,155, -4301,19,1593,1,155, -3821,1,156,4302,19, -1584,1,156,3825,1, -157,4303,19,1630,1, -157,3831,1,158,4304, -19,1614,1,158,3831, -1,159,4305,19,1089, -1,159,3836,1,160, -4306,19,817,1,160, -3879,1,161,4307,19, -861,1,161,3879,1, -162,4308,19,811,1, -162,3894,1,163,4309, -19,856,1,163,3894, -1,164,4310,19,881, -1,164,3897,1,165, -4311,19,765,1,165, -3897,1,166,4312,19, -790,1,166,3897,1, -167,4313,19,760,1, -167,3897,1,168,4314, -19,754,1,168,3897, -1,169,4315,19,749, -1,169,3897,1,170, -4316,19,744,1,170, -3897,1,171,4317,19, -738,1,171,3897,1, -172,4318,19,733,1, -172,3897,1,173,4319, -19,728,1,173,3897, -1,174,4320,19,723, -1,174,3897,1,175, -4321,19,718,1,175, -3897,1,176,4322,19, -1119,1,176,3964,1, -177,4323,19,1262,1, -177,3976,1,178,4324, -19,1111,1,178,3988, -1,179,4325,19,1250, -1,179,3988,1,180, -4326,19,897,1,180, -4000,1,181,4327,19, -711,1,181,4000,1, -182,4328,19,804,1, -182,4000,1,183,4329, -19,839,1,183,4000, -1,184,4330,19,867, -1,184,4012,1,185, -4331,19,889,1,185, -4012,1,186,4332,19, -824,1,186,4024,1, -187,4333,19,832,1, -187,4024,1,188,4334, -19,778,1,188,4036, -1,189,4335,19,1489, -1,189,4048,1,190, -4336,19,1125,1,190, -4048,1,191,4337,19, -1462,1,191,4048,1, -192,4338,19,1505,1, -192,4048,1,193,4339, -19,1367,1,193,3909, -1,194,4340,19,1425, -1,194,3909,1,195, -4341,19,1105,1,195, -3921,1,196,4342,19, -1537,1,196,3921,1, -197,4343,19,1457,1, -197,3921,1,198,4344, -19,1410,1,198,3921, -1,199,4345,19,1335, -1,199,3921,1,200, -4346,19,1272,1,200, -3921,1,201,4347,19, -1282,1,201,3921,1, -202,4348,19,1100,1, -202,3921,1,203,4349, -19,1521,1,203,3921, -1,204,4350,19,1452, -1,204,3921,1,205, -4351,19,1400,1,205, -3921,1,206,4352,19, -1324,1,206,3921,1, -207,4353,19,1298,1, -207,3921,1,208,4354, -19,1083,1,208,3921, -1,209,4355,19,1420, -1,209,3921,1,210, -4356,19,1441,1,210, -3921,1,211,4357,19, -1395,1,211,3921,1, -212,4358,19,1479,1, -212,3921,1,213,4359, -19,1234,1,213,3921, -1,214,4360,19,1142, -1,214,3921,1,215, -4361,19,1072,1,215, -3921,1,216,4362,19, -1495,1,216,3921,1, -217,4363,19,1436,1, -217,3921,1,218,4364, -19,1389,1,218,3921, -1,219,4365,19,1267, -1,219,3952,1,220, -4366,19,1245,1,220, -3952,1,221,4367,19, -1526,1,221,4130,1, -222,4368,19,1549,1, -222,4130,1,223,4369, -19,1516,1,223,4130, -1,224,4370,19,1511, -1,224,4130,1,225, -4371,19,1532,1,225, -4130,1,226,4372,19, -1468,1,226,4130,1, -227,4373,19,1188,1, -227,4130,1,228,4374, -19,1356,1,228,4203, -1,229,4375,19,1137, -1,229,4203,1,230, -4376,19,1155,1,230, -4203,1,231,4377,19, -1172,1,231,4203,1, -232,4378,19,1177,1, -232,4203,1,233,4379, -19,1166,1,233,4203, -1,234,4380,19,1161, -1,234,4203,1,235, -4381,19,1345,1,235, -4203,1,236,4382,19, -1373,1,236,4203,1, -237,4383,19,1378,1, -237,4203,1,238,4384, -19,1340,1,238,4203, -1,239,4385,19,1330, -1,239,4203,1,240, -4386,19,1304,1,240, -4203,1,241,4387,19, -1277,1,241,4203,1, -242,4388,19,1182,1, -242,4203,1,243,4389, -19,1147,1,243,4203, -1,244,4390,19,1095, -1,244,4203,1,245, -4391,19,1544,1,245, -4203,1,246,4392,19, -1500,1,246,4203,1, -247,4393,19,1484,1, -247,4203,1,248,4394, -19,1474,1,248,4203, -1,249,4395,19,1431, -1,249,4203,1,250, -4396,19,1405,1,250, -4203,1,251,4397,19, -1383,1,251,4203,1, -252,4398,19,1361,1, -252,4203,1,253,4399, -19,1319,1,253,4203, -1,254,4400,19,1350, -1,254,4203,1,255, -4401,19,1415,1,255, -4203,1,256,4402,19, -1447,1,256,4203,1, -257,4403,19,1239,1, -257,4203,1,258,4404, -19,1311,1,258,4203, -1,259,4405,19,1293, -1,259,4203,1,260, -4406,19,1256,1,260, -4203,1,261,4407,19, -1229,1,261,4203,1, -262,4408,19,1078,1, -262,4203,1,263,4409, -19,1559,1,263,4203, -1,264,4410,19,1194, -1,264,4203,1,265, -4411,19,1199,1,265, -4203,1,266,4412,19, -1219,1,266,4203,1, -267,4413,19,1209,1, -267,4203,1,268,4414, -19,1214,1,268,4203, -1,269,4415,19,1204, -1,269,4203,1,270, -4416,19,1554,1,270, -4203,1,271,4417,19, -1224,1,271,4203,1, -272,4418,19,1288,1, -272,4052,1,273,4419, -19,1651,1,273,4119, -1,274,4420,19,1645, -1,274,4119,1,275, -4421,19,1625,1,275, -4123,1,276,4422,19, -1938,1,276,3854,1, -277,4423,19,1933,1, -277,3854,1,278,4424, -19,1928,1,278,3854, -1,279,4425,19,1923, -1,279,3854,1,280, -4426,19,1918,1,280, -3854,1,281,4427,19, -1913,1,281,3854,1, -282,4428,19,1908,1, -282,3854,1,283,4429, -19,1840,1,283,3873, -1,284,4430,19,1835, -1,284,3873,1,285, -4431,19,1830,1,285, -3873,1,286,4432,19, -1892,1,286,3873,1, -287,4433,19,1824,1, -287,3873,1,288,4434, -19,1819,1,288,3873, -1,289,4435,19,1814, -1,289,3873,1,290, -4436,19,1809,1,290, -3873,1,291,4437,19, -1804,1,291,3873,1, -292,4438,19,1799,1, -292,3873,1,293,4439, -19,1794,1,293,3873, -1,294,4440,19,1789, -1,294,3873,1,295, -4441,19,1784,1,295, -3873,1,296,4442,19, -1779,1,296,3873,1, -297,4443,19,1774,1, -297,3873,1,298,4444, -19,1769,1,298,3873, -1,299,4445,19,1882, -1,299,3873,1,300, -4446,19,1763,1,300, -3873,1,301,4447,19, -1758,1,301,3873,1, -302,4448,19,1753,1, -302,3873,1,303,4449, -19,1748,1,303,3873, -1,304,4450,19,1743, -1,304,3873,1,305, -4451,19,1875,1,305, -3873,1,306,4452,19, -1737,1,306,3873,1, -307,4453,19,1870,1, -307,3873,1,308,4454, -19,1732,1,308,3873, -1,309,4455,19,1727, -1,309,3873,1,310, -4456,19,1670,1,310, -3873,1,311,4457,19, -1864,1,311,3873,1, -312,4458,19,1720,1, -312,3873,1,313,4459, -19,1715,1,313,3873, -1,314,4460,19,1710, -1,314,3873,1,315, -4461,19,1705,1,315, -3873,1,316,4462,19, -4463,4,50,65,0, -114,0,103,0,117, -0,109,0,101,0, -110,0,116,0,68, -0,101,0,99,0, -108,0,97,0,114, -0,97,0,116,0, -105,0,111,0,110, -0,76,0,105,0, -115,0,116,0,95, -0,51,0,1,316, -3831,1,317,4464,19, -4465,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,51, -0,1,317,4119,1, -318,4466,19,4467,4, -50,65,0,114,0, -103,0,117,0,109, -0,101,0,110,0, -116,0,68,0,101, -0,99,0,108,0, -97,0,114,0,97, -0,116,0,105,0, -111,0,110,0,76, -0,105,0,115,0, -116,0,95,0,52, -0,1,318,3831,1, -319,4468,19,4469,4, -50,65,0,114,0, -103,0,117,0,109, -0,101,0,110,0, -116,0,68,0,101, -0,99,0,108,0, -97,0,114,0,97, -0,116,0,105,0, -111,0,110,0,76, -0,105,0,115,0, -116,0,95,0,53, -0,1,319,3831,1, -320,4470,19,4471,4, -24,83,0,116,0, -97,0,116,0,101, -0,109,0,101,0, -110,0,116,0,95, -0,49,0,51,0, -1,320,3897,1,321, -4472,19,4473,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,52,0,1,321, -4119,2,0,0}; -new Sfactory(this,"ExpressionArgument_1",new SCreator(ExpressionArgument_1_factory)); -new Sfactory(this,"SimpleAssignment_8",new SCreator(SimpleAssignment_8_factory)); -new Sfactory(this,"StatementList_1",new SCreator(StatementList_1_factory)); -new Sfactory(this,"StateChange_1",new SCreator(StateChange_1_factory)); -new Sfactory(this,"StateChange_2",new SCreator(StateChange_2_factory)); -new Sfactory(this,"Declaration",new SCreator(Declaration_factory)); -new Sfactory(this,"IdentExpression",new SCreator(IdentExpression_factory)); -new Sfactory(this,"error",new SCreator(error_factory)); -new Sfactory(this,"BinaryExpression_2",new SCreator(BinaryExpression_2_factory)); -new Sfactory(this,"BinaryExpression_3",new SCreator(BinaryExpression_3_factory)); -new Sfactory(this,"BinaryExpression_4",new SCreator(BinaryExpression_4_factory)); -new Sfactory(this,"BinaryExpression_5",new SCreator(BinaryExpression_5_factory)); -new Sfactory(this,"ReturnStatement_2",new SCreator(ReturnStatement_2_factory)); -new Sfactory(this,"SimpleAssignment_19",new SCreator(SimpleAssignment_19_factory)); -new Sfactory(this,"BinaryExpression_9",new SCreator(BinaryExpression_9_factory)); -new Sfactory(this,"VectorConstant_1",new SCreator(VectorConstant_1_factory)); -new Sfactory(this,"ParenthesisExpression",new SCreator(ParenthesisExpression_factory)); -new Sfactory(this,"UnaryExpression",new SCreator(UnaryExpression_factory)); -new Sfactory(this,"IdentDotExpression_1",new SCreator(IdentDotExpression_1_factory)); -new Sfactory(this,"ArgumentList_4",new SCreator(ArgumentList_4_factory)); -new Sfactory(this,"Typename",new SCreator(Typename_factory)); -new Sfactory(this,"IfStatement_1",new SCreator(IfStatement_1_factory)); -new Sfactory(this,"Assignment",new SCreator(Assignment_factory)); -new Sfactory(this,"CompoundStatement_1",new SCreator(CompoundStatement_1_factory)); -new Sfactory(this,"CompoundStatement_2",new SCreator(CompoundStatement_2_factory)); -new Sfactory(this,"ReturnStatement_1",new SCreator(ReturnStatement_1_factory)); -new Sfactory(this,"IdentDotExpression",new SCreator(IdentDotExpression_factory)); -new Sfactory(this,"Argument",new SCreator(Argument_factory)); -new Sfactory(this,"State_2",new SCreator(State_2_factory)); -new Sfactory(this,"WhileStatement_1",new SCreator(WhileStatement_1_factory)); -new Sfactory(this,"GlobalDefinitions_3",new SCreator(GlobalDefinitions_3_factory)); -new Sfactory(this,"GlobalDefinitions_4",new SCreator(GlobalDefinitions_4_factory)); -new Sfactory(this,"Event_1",new SCreator(Event_1_factory)); -new Sfactory(this,"ListConstant",new SCreator(ListConstant_factory)); -new Sfactory(this,"Event_3",new SCreator(Event_3_factory)); -new Sfactory(this,"Event_4",new SCreator(Event_4_factory)); -new Sfactory(this,"Event_5",new SCreator(Event_5_factory)); -new Sfactory(this,"SimpleAssignment_5",new SCreator(SimpleAssignment_5_factory)); -new Sfactory(this,"Typename_1",new SCreator(Typename_1_factory)); -new Sfactory(this,"Typename_2",new SCreator(Typename_2_factory)); -new Sfactory(this,"Typename_3",new SCreator(Typename_3_factory)); -new Sfactory(this,"Typename_4",new SCreator(Typename_4_factory)); -new Sfactory(this,"Typename_5",new SCreator(Typename_5_factory)); -new Sfactory(this,"Typename_6",new SCreator(Typename_6_factory)); -new Sfactory(this,"Typename_7",new SCreator(Typename_7_factory)); -new Sfactory(this,"ArgumentDeclarationList",new SCreator(ArgumentDeclarationList_factory)); -new Sfactory(this,"ConstantExpression",new SCreator(ConstantExpression_factory)); -new Sfactory(this,"LSLProgramRoot_1",new SCreator(LSLProgramRoot_1_factory)); -new Sfactory(this,"LSLProgramRoot_2",new SCreator(LSLProgramRoot_2_factory)); -new Sfactory(this,"States_1",new SCreator(States_1_factory)); -new Sfactory(this,"States_2",new SCreator(States_2_factory)); -new Sfactory(this,"FunctionCallExpression_1",new SCreator(FunctionCallExpression_1_factory)); -new Sfactory(this,"ForLoopStatement",new SCreator(ForLoopStatement_factory)); -new Sfactory(this,"DoWhileStatement_1",new SCreator(DoWhileStatement_1_factory)); -new Sfactory(this,"DoWhileStatement_2",new SCreator(DoWhileStatement_2_factory)); -new Sfactory(this,"ForLoopStatement_4",new SCreator(ForLoopStatement_4_factory)); -new Sfactory(this,"SimpleAssignment_11",new SCreator(SimpleAssignment_11_factory)); -new Sfactory(this,"SimpleAssignment_12",new SCreator(SimpleAssignment_12_factory)); -new Sfactory(this,"SimpleAssignment_13",new SCreator(SimpleAssignment_13_factory)); -new Sfactory(this,"JumpLabel",new SCreator(JumpLabel_factory)); -new Sfactory(this,"SimpleAssignment_15",new SCreator(SimpleAssignment_15_factory)); -new Sfactory(this,"SimpleAssignment_17",new SCreator(SimpleAssignment_17_factory)); -new Sfactory(this,"SimpleAssignment_18",new SCreator(SimpleAssignment_18_factory)); -new Sfactory(this,"JumpStatement_1",new SCreator(JumpStatement_1_factory)); -new Sfactory(this,"GlobalDefinitions",new SCreator(GlobalDefinitions_factory)); -new Sfactory(this,"FunctionCall_1",new SCreator(FunctionCall_1_factory)); -new Sfactory(this,"ArgumentList_3",new SCreator(ArgumentList_3_factory)); -new Sfactory(this,"Assignment_2",new SCreator(Assignment_2_factory)); -new Sfactory(this,"TypecastExpression_1",new SCreator(TypecastExpression_1_factory)); -new Sfactory(this,"SimpleAssignment_21",new SCreator(SimpleAssignment_21_factory)); -new Sfactory(this,"SimpleAssignment_22",new SCreator(SimpleAssignment_22_factory)); -new Sfactory(this,"SimpleAssignment_23",new SCreator(SimpleAssignment_23_factory)); -new Sfactory(this,"TypecastExpression_9",new SCreator(TypecastExpression_9_factory)); -new Sfactory(this,"ArgumentDeclarationList_1",new SCreator(ArgumentDeclarationList_1_factory)); -new Sfactory(this,"ArgumentDeclarationList_2",new SCreator(ArgumentDeclarationList_2_factory)); -new Sfactory(this,"ArgumentDeclarationList_3",new SCreator(ArgumentDeclarationList_3_factory)); -new Sfactory(this,"GlobalDefinitions_1",new SCreator(GlobalDefinitions_1_factory)); -new Sfactory(this,"GlobalDefinitions_2",new SCreator(GlobalDefinitions_2_factory)); -new Sfactory(this,"IncrementDecrementExpression",new SCreator(IncrementDecrementExpression_factory)); -new Sfactory(this,"GlobalVariableDeclaration",new SCreator(GlobalVariableDeclaration_factory)); -new Sfactory(this,"Event_11",new SCreator(Event_11_factory)); -new Sfactory(this,"TypecastExpression_2",new SCreator(TypecastExpression_2_factory)); -new Sfactory(this,"TypecastExpression_3",new SCreator(TypecastExpression_3_factory)); -new Sfactory(this,"TypecastExpression_5",new SCreator(TypecastExpression_5_factory)); -new Sfactory(this,"TypecastExpression_8",new SCreator(TypecastExpression_8_factory)); -new Sfactory(this,"Constant_1",new SCreator(Constant_1_factory)); -new Sfactory(this,"Expression",new SCreator(Expression_factory)); -new Sfactory(this,"Constant_3",new SCreator(Constant_3_factory)); -new Sfactory(this,"Constant_4",new SCreator(Constant_4_factory)); -new Sfactory(this,"BinaryExpression_1",new SCreator(BinaryExpression_1_factory)); -new Sfactory(this,"IfStatement_2",new SCreator(IfStatement_2_factory)); -new Sfactory(this,"IfStatement_3",new SCreator(IfStatement_3_factory)); -new Sfactory(this,"IfStatement_4",new SCreator(IfStatement_4_factory)); -new Sfactory(this,"ReturnStatement",new SCreator(ReturnStatement_factory)); -new Sfactory(this,"Event_2",new SCreator(Event_2_factory)); -new Sfactory(this,"RotationConstant",new SCreator(RotationConstant_factory)); -new Sfactory(this,"Statement_12",new SCreator(Statement_12_factory)); -new Sfactory(this,"Statement_13",new SCreator(Statement_13_factory)); -new Sfactory(this,"UnaryExpression_1",new SCreator(UnaryExpression_1_factory)); -new Sfactory(this,"UnaryExpression_2",new SCreator(UnaryExpression_2_factory)); -new Sfactory(this,"UnaryExpression_3",new SCreator(UnaryExpression_3_factory)); -new Sfactory(this,"ArgumentList_1",new SCreator(ArgumentList_1_factory)); -new Sfactory(this,"ArgumentList_2",new SCreator(ArgumentList_2_factory)); -new Sfactory(this,"Constant",new SCreator(Constant_factory)); -new Sfactory(this,"State",new SCreator(State_factory)); -new Sfactory(this,"Event_13",new SCreator(Event_13_factory)); -new Sfactory(this,"LSLProgramRoot",new SCreator(LSLProgramRoot_factory)); -new Sfactory(this,"StateChange",new SCreator(StateChange_factory)); -new Sfactory(this,"IncrementDecrementExpression_2",new SCreator(IncrementDecrementExpression_2_factory)); -new Sfactory(this,"GlobalVariableDeclaration_1",new SCreator(GlobalVariableDeclaration_1_factory)); -new Sfactory(this,"GlobalVariableDeclaration_2",new SCreator(GlobalVariableDeclaration_2_factory)); -new Sfactory(this,"IncrementDecrementExpression_5",new SCreator(IncrementDecrementExpression_5_factory)); -new Sfactory(this,"GlobalFunctionDefinition_2",new SCreator(GlobalFunctionDefinition_2_factory)); -new Sfactory(this,"IncrementDecrementExpression_7",new SCreator(IncrementDecrementExpression_7_factory)); -new Sfactory(this,"IncrementDecrementExpression_8",new SCreator(IncrementDecrementExpression_8_factory)); -new Sfactory(this,"Assignment_1",new SCreator(Assignment_1_factory)); -new Sfactory(this,"Event_21",new SCreator(Event_21_factory)); -new Sfactory(this,"Event_22",new SCreator(Event_22_factory)); -new Sfactory(this,"CompoundStatement",new SCreator(CompoundStatement_factory)); -new Sfactory(this,"RotationConstant_1",new SCreator(RotationConstant_1_factory)); -new Sfactory(this,"SimpleAssignment_3",new SCreator(SimpleAssignment_3_factory)); -new Sfactory(this,"SimpleAssignment_4",new SCreator(SimpleAssignment_4_factory)); -new Sfactory(this,"Statement_1",new SCreator(Statement_1_factory)); -new Sfactory(this,"Statement_2",new SCreator(Statement_2_factory)); -new Sfactory(this,"Statement_3",new SCreator(Statement_3_factory)); -new Sfactory(this,"Statement_4",new SCreator(Statement_4_factory)); -new Sfactory(this,"Statement_5",new SCreator(Statement_5_factory)); -new Sfactory(this,"Statement_6",new SCreator(Statement_6_factory)); -new Sfactory(this,"Statement_7",new SCreator(Statement_7_factory)); -new Sfactory(this,"Statement_8",new SCreator(Statement_8_factory)); -new Sfactory(this,"Statement_9",new SCreator(Statement_9_factory)); -new Sfactory(this,"ExpressionArgument",new SCreator(ExpressionArgument_factory)); -new Sfactory(this,"GlobalFunctionDefinition",new SCreator(GlobalFunctionDefinition_factory)); -new Sfactory(this,"State_1",new SCreator(State_1_factory)); -new Sfactory(this,"DoWhileStatement",new SCreator(DoWhileStatement_factory)); -new Sfactory(this,"ParenthesisExpression_1",new SCreator(ParenthesisExpression_1_factory)); -new Sfactory(this,"ParenthesisExpression_2",new SCreator(ParenthesisExpression_2_factory)); -new Sfactory(this,"StateBody",new SCreator(StateBody_factory)); -new Sfactory(this,"Event_7",new SCreator(Event_7_factory)); -new Sfactory(this,"Event_8",new SCreator(Event_8_factory)); -new Sfactory(this,"IncrementDecrementExpression_1",new SCreator(IncrementDecrementExpression_1_factory)); -new Sfactory(this,"IncrementDecrementExpression_3",new SCreator(IncrementDecrementExpression_3_factory)); -new Sfactory(this,"IncrementDecrementExpression_4",new SCreator(IncrementDecrementExpression_4_factory)); -new Sfactory(this,"IncrementDecrementExpression_6",new SCreator(IncrementDecrementExpression_6_factory)); -new Sfactory(this,"StateEvent",new SCreator(StateEvent_factory)); -new Sfactory(this,"Event_20",new SCreator(Event_20_factory)); -new Sfactory(this,"Event_23",new SCreator(Event_23_factory)); -new Sfactory(this,"Event_24",new SCreator(Event_24_factory)); -new Sfactory(this,"Event_26",new SCreator(Event_26_factory)); -new Sfactory(this,"SimpleAssignment_10",new SCreator(SimpleAssignment_10_factory)); -new Sfactory(this,"Event",new SCreator(Event_factory)); -new Sfactory(this,"SimpleAssignment_14",new SCreator(SimpleAssignment_14_factory)); -new Sfactory(this,"SimpleAssignment_16",new SCreator(SimpleAssignment_16_factory)); -new Sfactory(this,"Statement_10",new SCreator(Statement_10_factory)); -new Sfactory(this,"Statement_11",new SCreator(Statement_11_factory)); -new Sfactory(this,"SimpleAssignment",new SCreator(SimpleAssignment_factory)); -new Sfactory(this,"TypecastExpression",new SCreator(TypecastExpression_factory)); -new Sfactory(this,"Event_15",new SCreator(Event_15_factory)); -new Sfactory(this,"Event_16",new SCreator(Event_16_factory)); -new Sfactory(this,"Event_32",new SCreator(Event_32_factory)); -new Sfactory(this,"SimpleAssignment_20",new SCreator(SimpleAssignment_20_factory)); -new Sfactory(this,"SimpleAssignment_24",new SCreator(SimpleAssignment_24_factory)); -new Sfactory(this,"SimpleAssignment_1",new SCreator(SimpleAssignment_1_factory)); -new Sfactory(this,"SimpleAssignment_2",new SCreator(SimpleAssignment_2_factory)); -new Sfactory(this,"BinaryExpression",new SCreator(BinaryExpression_factory)); -new Sfactory(this,"FunctionCallExpression",new SCreator(FunctionCallExpression_factory)); -new Sfactory(this,"SimpleAssignment_6",new SCreator(SimpleAssignment_6_factory)); -new Sfactory(this,"StateBody_1",new SCreator(StateBody_1_factory)); -new Sfactory(this,"StatementList_2",new SCreator(StatementList_2_factory)); -new Sfactory(this,"SimpleAssignment_9",new SCreator(SimpleAssignment_9_factory)); -new Sfactory(this,"BinaryExpression_15",new SCreator(BinaryExpression_15_factory)); -new Sfactory(this,"BinaryExpression_16",new SCreator(BinaryExpression_16_factory)); -new Sfactory(this,"BinaryExpression_17",new SCreator(BinaryExpression_17_factory)); -new Sfactory(this,"BinaryExpression_18",new SCreator(BinaryExpression_18_factory)); -new Sfactory(this,"Event_25",new SCreator(Event_25_factory)); -new Sfactory(this,"Event_9",new SCreator(Event_9_factory)); -new Sfactory(this,"Statement",new SCreator(Statement_factory)); -new Sfactory(this,"JumpStatement",new SCreator(JumpStatement_factory)); -new Sfactory(this,"BinaryExpression_11",new SCreator(BinaryExpression_11_factory)); -new Sfactory(this,"BinaryExpression_12",new SCreator(BinaryExpression_12_factory)); -new Sfactory(this,"BinaryExpression_13",new SCreator(BinaryExpression_13_factory)); -new Sfactory(this,"BinaryExpression_14",new SCreator(BinaryExpression_14_factory)); -new Sfactory(this,"BinaryExpression_6",new SCreator(BinaryExpression_6_factory)); -new Sfactory(this,"BinaryExpression_7",new SCreator(BinaryExpression_7_factory)); -new Sfactory(this,"BinaryExpression_8",new SCreator(BinaryExpression_8_factory)); -new Sfactory(this,"ArgumentList",new SCreator(ArgumentList_factory)); -new Sfactory(this,"Event_10",new SCreator(Event_10_factory)); -new Sfactory(this,"ConstantExpression_1",new SCreator(ConstantExpression_1_factory)); -new Sfactory(this,"Event_12",new SCreator(Event_12_factory)); -new Sfactory(this,"Event_14",new SCreator(Event_14_factory)); -new Sfactory(this,"Event_17",new SCreator(Event_17_factory)); -new Sfactory(this,"Event_18",new SCreator(Event_18_factory)); -new Sfactory(this,"Event_19",new SCreator(Event_19_factory)); -new Sfactory(this,"BinaryExpression_10",new SCreator(BinaryExpression_10_factory)); -new Sfactory(this,"StateEvent_1",new SCreator(StateEvent_1_factory)); -new Sfactory(this,"VectorConstant",new SCreator(VectorConstant_factory)); -new Sfactory(this,"TypecastExpression_4",new SCreator(TypecastExpression_4_factory)); -new Sfactory(this,"TypecastExpression_6",new SCreator(TypecastExpression_6_factory)); -new Sfactory(this,"TypecastExpression_7",new SCreator(TypecastExpression_7_factory)); -new Sfactory(this,"FunctionCall",new SCreator(FunctionCall_factory)); -new Sfactory(this,"Event_27",new SCreator(Event_27_factory)); -new Sfactory(this,"Event_28",new SCreator(Event_28_factory)); -new Sfactory(this,"Event_29",new SCreator(Event_29_factory)); -new Sfactory(this,"ListConstant_1",new SCreator(ListConstant_1_factory)); -new Sfactory(this,"Event_6",new SCreator(Event_6_factory)); -new Sfactory(this,"Declaration_1",new SCreator(Declaration_1_factory)); -new Sfactory(this,"SimpleAssignment_7",new SCreator(SimpleAssignment_7_factory)); -new Sfactory(this,"ForLoop",new SCreator(ForLoop_factory)); -new Sfactory(this,"Event_30",new SCreator(Event_30_factory)); -new Sfactory(this,"Event_31",new SCreator(Event_31_factory)); -new Sfactory(this,"Event_33",new SCreator(Event_33_factory)); -new Sfactory(this,"GlobalFunctionDefinition_1",new SCreator(GlobalFunctionDefinition_1_factory)); -new Sfactory(this,"JumpLabel_1",new SCreator(JumpLabel_1_factory)); -new Sfactory(this,"IfStatement",new SCreator(IfStatement_factory)); -new Sfactory(this,"ForLoopStatement_1",new SCreator(ForLoopStatement_1_factory)); -new Sfactory(this,"ForLoopStatement_2",new SCreator(ForLoopStatement_2_factory)); -new Sfactory(this,"ForLoopStatement_3",new SCreator(ForLoopStatement_3_factory)); -new Sfactory(this,"ArgumentDeclarationList_4",new SCreator(ArgumentDeclarationList_4_factory)); -new Sfactory(this,"ArgumentDeclarationList_5",new SCreator(ArgumentDeclarationList_5_factory)); -new Sfactory(this,"WhileStatement",new SCreator(WhileStatement_factory)); -new Sfactory(this,"ForLoop_1",new SCreator(ForLoop_1_factory)); -new Sfactory(this,"Constant_2",new SCreator(Constant_2_factory)); -new Sfactory(this,"StatementList",new SCreator(StatementList_factory)); -new Sfactory(this,"StateBody_2",new SCreator(StateBody_2_factory)); -new Sfactory(this,"WhileStatement_2",new SCreator(WhileStatement_2_factory)); -new Sfactory(this,"IdentExpression_1",new SCreator(IdentExpression_1_factory)); -new Sfactory(this,"States",new SCreator(States_factory)); -} -public static object ExpressionArgument_1_factory(Parser yyp) { return new ExpressionArgument_1(yyp); } -public static object SimpleAssignment_8_factory(Parser yyp) { return new SimpleAssignment_8(yyp); } -public static object StatementList_1_factory(Parser yyp) { return new StatementList_1(yyp); } -public static object StateChange_1_factory(Parser yyp) { return new StateChange_1(yyp); } -public static object StateChange_2_factory(Parser yyp) { return new StateChange_2(yyp); } -public static object Declaration_factory(Parser yyp) { return new Declaration(yyp); } -public static object IdentExpression_factory(Parser yyp) { return new IdentExpression(yyp); } -public static object error_factory(Parser yyp) { return new error(yyp); } -public static object BinaryExpression_2_factory(Parser yyp) { return new BinaryExpression_2(yyp); } -public static object BinaryExpression_3_factory(Parser yyp) { return new BinaryExpression_3(yyp); } -public static object BinaryExpression_4_factory(Parser yyp) { return new BinaryExpression_4(yyp); } -public static object BinaryExpression_5_factory(Parser yyp) { return new BinaryExpression_5(yyp); } -public static object ReturnStatement_2_factory(Parser yyp) { return new ReturnStatement_2(yyp); } -public static object SimpleAssignment_19_factory(Parser yyp) { return new SimpleAssignment_19(yyp); } -public static object BinaryExpression_9_factory(Parser yyp) { return new BinaryExpression_9(yyp); } -public static object VectorConstant_1_factory(Parser yyp) { return new VectorConstant_1(yyp); } -public static object ParenthesisExpression_factory(Parser yyp) { return new ParenthesisExpression(yyp); } -public static object UnaryExpression_factory(Parser yyp) { return new UnaryExpression(yyp); } -public static object IdentDotExpression_1_factory(Parser yyp) { return new IdentDotExpression_1(yyp); } -public static object ArgumentList_4_factory(Parser yyp) { return new ArgumentList_4(yyp); } -public static object Typename_factory(Parser yyp) { return new Typename(yyp); } -public static object IfStatement_1_factory(Parser yyp) { return new IfStatement_1(yyp); } -public static object Assignment_factory(Parser yyp) { return new Assignment(yyp); } -public static object CompoundStatement_1_factory(Parser yyp) { return new CompoundStatement_1(yyp); } -public static object CompoundStatement_2_factory(Parser yyp) { return new CompoundStatement_2(yyp); } -public static object ReturnStatement_1_factory(Parser yyp) { return new ReturnStatement_1(yyp); } -public static object IdentDotExpression_factory(Parser yyp) { return new IdentDotExpression(yyp); } -public static object Argument_factory(Parser yyp) { return new Argument(yyp); } -public static object State_2_factory(Parser yyp) { return new State_2(yyp); } -public static object WhileStatement_1_factory(Parser yyp) { return new WhileStatement_1(yyp); } -public static object GlobalDefinitions_3_factory(Parser yyp) { return new GlobalDefinitions_3(yyp); } -public static object GlobalDefinitions_4_factory(Parser yyp) { return new GlobalDefinitions_4(yyp); } -public static object Event_1_factory(Parser yyp) { return new Event_1(yyp); } -public static object ListConstant_factory(Parser yyp) { return new ListConstant(yyp); } -public static object Event_3_factory(Parser yyp) { return new Event_3(yyp); } -public static object Event_4_factory(Parser yyp) { return new Event_4(yyp); } -public static object Event_5_factory(Parser yyp) { return new Event_5(yyp); } -public static object SimpleAssignment_5_factory(Parser yyp) { return new SimpleAssignment_5(yyp); } -public static object Typename_1_factory(Parser yyp) { return new Typename_1(yyp); } -public static object Typename_2_factory(Parser yyp) { return new Typename_2(yyp); } -public static object Typename_3_factory(Parser yyp) { return new Typename_3(yyp); } -public static object Typename_4_factory(Parser yyp) { return new Typename_4(yyp); } -public static object Typename_5_factory(Parser yyp) { return new Typename_5(yyp); } -public static object Typename_6_factory(Parser yyp) { return new Typename_6(yyp); } -public static object Typename_7_factory(Parser yyp) { return new Typename_7(yyp); } -public static object ArgumentDeclarationList_factory(Parser yyp) { return new ArgumentDeclarationList(yyp); } -public static object ConstantExpression_factory(Parser yyp) { return new ConstantExpression(yyp); } -public static object LSLProgramRoot_1_factory(Parser yyp) { return new LSLProgramRoot_1(yyp); } -public static object LSLProgramRoot_2_factory(Parser yyp) { return new LSLProgramRoot_2(yyp); } -public static object States_1_factory(Parser yyp) { return new States_1(yyp); } -public static object States_2_factory(Parser yyp) { return new States_2(yyp); } -public static object FunctionCallExpression_1_factory(Parser yyp) { return new FunctionCallExpression_1(yyp); } -public static object ForLoopStatement_factory(Parser yyp) { return new ForLoopStatement(yyp); } -public static object DoWhileStatement_1_factory(Parser yyp) { return new DoWhileStatement_1(yyp); } -public static object DoWhileStatement_2_factory(Parser yyp) { return new DoWhileStatement_2(yyp); } -public static object ForLoopStatement_4_factory(Parser yyp) { return new ForLoopStatement_4(yyp); } -public static object SimpleAssignment_11_factory(Parser yyp) { return new SimpleAssignment_11(yyp); } -public static object SimpleAssignment_12_factory(Parser yyp) { return new SimpleAssignment_12(yyp); } -public static object SimpleAssignment_13_factory(Parser yyp) { return new SimpleAssignment_13(yyp); } -public static object JumpLabel_factory(Parser yyp) { return new JumpLabel(yyp); } -public static object SimpleAssignment_15_factory(Parser yyp) { return new SimpleAssignment_15(yyp); } -public static object SimpleAssignment_17_factory(Parser yyp) { return new SimpleAssignment_17(yyp); } -public static object SimpleAssignment_18_factory(Parser yyp) { return new SimpleAssignment_18(yyp); } -public static object JumpStatement_1_factory(Parser yyp) { return new JumpStatement_1(yyp); } -public static object GlobalDefinitions_factory(Parser yyp) { return new GlobalDefinitions(yyp); } -public static object FunctionCall_1_factory(Parser yyp) { return new FunctionCall_1(yyp); } -public static object ArgumentList_3_factory(Parser yyp) { return new ArgumentList_3(yyp); } -public static object Assignment_2_factory(Parser yyp) { return new Assignment_2(yyp); } -public static object TypecastExpression_1_factory(Parser yyp) { return new TypecastExpression_1(yyp); } -public static object SimpleAssignment_21_factory(Parser yyp) { return new SimpleAssignment_21(yyp); } -public static object SimpleAssignment_22_factory(Parser yyp) { return new SimpleAssignment_22(yyp); } -public static object SimpleAssignment_23_factory(Parser yyp) { return new SimpleAssignment_23(yyp); } -public static object TypecastExpression_9_factory(Parser yyp) { return new TypecastExpression_9(yyp); } -public static object ArgumentDeclarationList_1_factory(Parser yyp) { return new ArgumentDeclarationList_1(yyp); } -public static object ArgumentDeclarationList_2_factory(Parser yyp) { return new ArgumentDeclarationList_2(yyp); } -public static object ArgumentDeclarationList_3_factory(Parser yyp) { return new ArgumentDeclarationList_3(yyp); } -public static object GlobalDefinitions_1_factory(Parser yyp) { return new GlobalDefinitions_1(yyp); } -public static object GlobalDefinitions_2_factory(Parser yyp) { return new GlobalDefinitions_2(yyp); } -public static object IncrementDecrementExpression_factory(Parser yyp) { return new IncrementDecrementExpression(yyp); } -public static object GlobalVariableDeclaration_factory(Parser yyp) { return new GlobalVariableDeclaration(yyp); } -public static object Event_11_factory(Parser yyp) { return new Event_11(yyp); } -public static object TypecastExpression_2_factory(Parser yyp) { return new TypecastExpression_2(yyp); } -public static object TypecastExpression_3_factory(Parser yyp) { return new TypecastExpression_3(yyp); } -public static object TypecastExpression_5_factory(Parser yyp) { return new TypecastExpression_5(yyp); } -public static object TypecastExpression_8_factory(Parser yyp) { return new TypecastExpression_8(yyp); } -public static object Constant_1_factory(Parser yyp) { return new Constant_1(yyp); } -public static object Expression_factory(Parser yyp) { return new Expression(yyp); } -public static object Constant_3_factory(Parser yyp) { return new Constant_3(yyp); } -public static object Constant_4_factory(Parser yyp) { return new Constant_4(yyp); } -public static object BinaryExpression_1_factory(Parser yyp) { return new BinaryExpression_1(yyp); } -public static object IfStatement_2_factory(Parser yyp) { return new IfStatement_2(yyp); } -public static object IfStatement_3_factory(Parser yyp) { return new IfStatement_3(yyp); } -public static object IfStatement_4_factory(Parser yyp) { return new IfStatement_4(yyp); } -public static object ReturnStatement_factory(Parser yyp) { return new ReturnStatement(yyp); } -public static object Event_2_factory(Parser yyp) { return new Event_2(yyp); } -public static object RotationConstant_factory(Parser yyp) { return new RotationConstant(yyp); } -public static object Statement_12_factory(Parser yyp) { return new Statement_12(yyp); } -public static object Statement_13_factory(Parser yyp) { return new Statement_13(yyp); } -public static object UnaryExpression_1_factory(Parser yyp) { return new UnaryExpression_1(yyp); } -public static object UnaryExpression_2_factory(Parser yyp) { return new UnaryExpression_2(yyp); } -public static object UnaryExpression_3_factory(Parser yyp) { return new UnaryExpression_3(yyp); } -public static object ArgumentList_1_factory(Parser yyp) { return new ArgumentList_1(yyp); } -public static object ArgumentList_2_factory(Parser yyp) { return new ArgumentList_2(yyp); } -public static object Constant_factory(Parser yyp) { return new Constant(yyp); } -public static object State_factory(Parser yyp) { return new State(yyp); } -public static object Event_13_factory(Parser yyp) { return new Event_13(yyp); } -public static object LSLProgramRoot_factory(Parser yyp) { return new LSLProgramRoot(yyp); } -public static object StateChange_factory(Parser yyp) { return new StateChange(yyp); } -public static object IncrementDecrementExpression_2_factory(Parser yyp) { return new IncrementDecrementExpression_2(yyp); } -public static object GlobalVariableDeclaration_1_factory(Parser yyp) { return new GlobalVariableDeclaration_1(yyp); } -public static object GlobalVariableDeclaration_2_factory(Parser yyp) { return new GlobalVariableDeclaration_2(yyp); } -public static object IncrementDecrementExpression_5_factory(Parser yyp) { return new IncrementDecrementExpression_5(yyp); } -public static object GlobalFunctionDefinition_2_factory(Parser yyp) { return new GlobalFunctionDefinition_2(yyp); } -public static object IncrementDecrementExpression_7_factory(Parser yyp) { return new IncrementDecrementExpression_7(yyp); } -public static object IncrementDecrementExpression_8_factory(Parser yyp) { return new IncrementDecrementExpression_8(yyp); } -public static object Assignment_1_factory(Parser yyp) { return new Assignment_1(yyp); } -public static object Event_21_factory(Parser yyp) { return new Event_21(yyp); } -public static object Event_22_factory(Parser yyp) { return new Event_22(yyp); } -public static object CompoundStatement_factory(Parser yyp) { return new CompoundStatement(yyp); } -public static object RotationConstant_1_factory(Parser yyp) { return new RotationConstant_1(yyp); } -public static object SimpleAssignment_3_factory(Parser yyp) { return new SimpleAssignment_3(yyp); } -public static object SimpleAssignment_4_factory(Parser yyp) { return new SimpleAssignment_4(yyp); } -public static object Statement_1_factory(Parser yyp) { return new Statement_1(yyp); } -public static object Statement_2_factory(Parser yyp) { return new Statement_2(yyp); } -public static object Statement_3_factory(Parser yyp) { return new Statement_3(yyp); } -public static object Statement_4_factory(Parser yyp) { return new Statement_4(yyp); } -public static object Statement_5_factory(Parser yyp) { return new Statement_5(yyp); } -public static object Statement_6_factory(Parser yyp) { return new Statement_6(yyp); } -public static object Statement_7_factory(Parser yyp) { return new Statement_7(yyp); } -public static object Statement_8_factory(Parser yyp) { return new Statement_8(yyp); } -public static object Statement_9_factory(Parser yyp) { return new Statement_9(yyp); } -public static object ExpressionArgument_factory(Parser yyp) { return new ExpressionArgument(yyp); } -public static object GlobalFunctionDefinition_factory(Parser yyp) { return new GlobalFunctionDefinition(yyp); } -public static object State_1_factory(Parser yyp) { return new State_1(yyp); } -public static object DoWhileStatement_factory(Parser yyp) { return new DoWhileStatement(yyp); } -public static object ParenthesisExpression_1_factory(Parser yyp) { return new ParenthesisExpression_1(yyp); } -public static object ParenthesisExpression_2_factory(Parser yyp) { return new ParenthesisExpression_2(yyp); } -public static object StateBody_factory(Parser yyp) { return new StateBody(yyp); } -public static object Event_7_factory(Parser yyp) { return new Event_7(yyp); } -public static object Event_8_factory(Parser yyp) { return new Event_8(yyp); } -public static object IncrementDecrementExpression_1_factory(Parser yyp) { return new IncrementDecrementExpression_1(yyp); } -public static object IncrementDecrementExpression_3_factory(Parser yyp) { return new IncrementDecrementExpression_3(yyp); } -public static object IncrementDecrementExpression_4_factory(Parser yyp) { return new IncrementDecrementExpression_4(yyp); } -public static object IncrementDecrementExpression_6_factory(Parser yyp) { return new IncrementDecrementExpression_6(yyp); } -public static object StateEvent_factory(Parser yyp) { return new StateEvent(yyp); } -public static object Event_20_factory(Parser yyp) { return new Event_20(yyp); } -public static object Event_23_factory(Parser yyp) { return new Event_23(yyp); } -public static object Event_24_factory(Parser yyp) { return new Event_24(yyp); } -public static object Event_26_factory(Parser yyp) { return new Event_26(yyp); } -public static object SimpleAssignment_10_factory(Parser yyp) { return new SimpleAssignment_10(yyp); } -public static object Event_factory(Parser yyp) { return new Event(yyp); } -public static object SimpleAssignment_14_factory(Parser yyp) { return new SimpleAssignment_14(yyp); } -public static object SimpleAssignment_16_factory(Parser yyp) { return new SimpleAssignment_16(yyp); } -public static object Statement_10_factory(Parser yyp) { return new Statement_10(yyp); } -public static object Statement_11_factory(Parser yyp) { return new Statement_11(yyp); } -public static object SimpleAssignment_factory(Parser yyp) { return new SimpleAssignment(yyp); } -public static object TypecastExpression_factory(Parser yyp) { return new TypecastExpression(yyp); } -public static object Event_15_factory(Parser yyp) { return new Event_15(yyp); } -public static object Event_16_factory(Parser yyp) { return new Event_16(yyp); } -public static object Event_32_factory(Parser yyp) { return new Event_32(yyp); } -public static object SimpleAssignment_20_factory(Parser yyp) { return new SimpleAssignment_20(yyp); } -public static object SimpleAssignment_24_factory(Parser yyp) { return new SimpleAssignment_24(yyp); } -public static object SimpleAssignment_1_factory(Parser yyp) { return new SimpleAssignment_1(yyp); } -public static object SimpleAssignment_2_factory(Parser yyp) { return new SimpleAssignment_2(yyp); } -public static object BinaryExpression_factory(Parser yyp) { return new BinaryExpression(yyp); } -public static object FunctionCallExpression_factory(Parser yyp) { return new FunctionCallExpression(yyp); } -public static object SimpleAssignment_6_factory(Parser yyp) { return new SimpleAssignment_6(yyp); } -public static object StateBody_1_factory(Parser yyp) { return new StateBody_1(yyp); } -public static object StatementList_2_factory(Parser yyp) { return new StatementList_2(yyp); } -public static object SimpleAssignment_9_factory(Parser yyp) { return new SimpleAssignment_9(yyp); } -public static object BinaryExpression_15_factory(Parser yyp) { return new BinaryExpression_15(yyp); } -public static object BinaryExpression_16_factory(Parser yyp) { return new BinaryExpression_16(yyp); } -public static object BinaryExpression_17_factory(Parser yyp) { return new BinaryExpression_17(yyp); } -public static object BinaryExpression_18_factory(Parser yyp) { return new BinaryExpression_18(yyp); } -public static object Event_25_factory(Parser yyp) { return new Event_25(yyp); } -public static object Event_9_factory(Parser yyp) { return new Event_9(yyp); } -public static object Statement_factory(Parser yyp) { return new Statement(yyp); } -public static object JumpStatement_factory(Parser yyp) { return new JumpStatement(yyp); } -public static object BinaryExpression_11_factory(Parser yyp) { return new BinaryExpression_11(yyp); } -public static object BinaryExpression_12_factory(Parser yyp) { return new BinaryExpression_12(yyp); } -public static object BinaryExpression_13_factory(Parser yyp) { return new BinaryExpression_13(yyp); } -public static object BinaryExpression_14_factory(Parser yyp) { return new BinaryExpression_14(yyp); } -public static object BinaryExpression_6_factory(Parser yyp) { return new BinaryExpression_6(yyp); } -public static object BinaryExpression_7_factory(Parser yyp) { return new BinaryExpression_7(yyp); } -public static object BinaryExpression_8_factory(Parser yyp) { return new BinaryExpression_8(yyp); } -public static object ArgumentList_factory(Parser yyp) { return new ArgumentList(yyp); } -public static object Event_10_factory(Parser yyp) { return new Event_10(yyp); } -public static object ConstantExpression_1_factory(Parser yyp) { return new ConstantExpression_1(yyp); } -public static object Event_12_factory(Parser yyp) { return new Event_12(yyp); } -public static object Event_14_factory(Parser yyp) { return new Event_14(yyp); } -public static object Event_17_factory(Parser yyp) { return new Event_17(yyp); } -public static object Event_18_factory(Parser yyp) { return new Event_18(yyp); } -public static object Event_19_factory(Parser yyp) { return new Event_19(yyp); } -public static object BinaryExpression_10_factory(Parser yyp) { return new BinaryExpression_10(yyp); } -public static object StateEvent_1_factory(Parser yyp) { return new StateEvent_1(yyp); } -public static object VectorConstant_factory(Parser yyp) { return new VectorConstant(yyp); } -public static object TypecastExpression_4_factory(Parser yyp) { return new TypecastExpression_4(yyp); } -public static object TypecastExpression_6_factory(Parser yyp) { return new TypecastExpression_6(yyp); } -public static object TypecastExpression_7_factory(Parser yyp) { return new TypecastExpression_7(yyp); } -public static object FunctionCall_factory(Parser yyp) { return new FunctionCall(yyp); } -public static object Event_27_factory(Parser yyp) { return new Event_27(yyp); } -public static object Event_28_factory(Parser yyp) { return new Event_28(yyp); } -public static object Event_29_factory(Parser yyp) { return new Event_29(yyp); } -public static object ListConstant_1_factory(Parser yyp) { return new ListConstant_1(yyp); } -public static object Event_6_factory(Parser yyp) { return new Event_6(yyp); } -public static object Declaration_1_factory(Parser yyp) { return new Declaration_1(yyp); } -public static object SimpleAssignment_7_factory(Parser yyp) { return new SimpleAssignment_7(yyp); } -public static object ForLoop_factory(Parser yyp) { return new ForLoop(yyp); } -public static object Event_30_factory(Parser yyp) { return new Event_30(yyp); } -public static object Event_31_factory(Parser yyp) { return new Event_31(yyp); } -public static object Event_33_factory(Parser yyp) { return new Event_33(yyp); } -public static object GlobalFunctionDefinition_1_factory(Parser yyp) { return new GlobalFunctionDefinition_1(yyp); } -public static object JumpLabel_1_factory(Parser yyp) { return new JumpLabel_1(yyp); } -public static object IfStatement_factory(Parser yyp) { return new IfStatement(yyp); } -public static object ForLoopStatement_1_factory(Parser yyp) { return new ForLoopStatement_1(yyp); } -public static object ForLoopStatement_2_factory(Parser yyp) { return new ForLoopStatement_2(yyp); } -public static object ForLoopStatement_3_factory(Parser yyp) { return new ForLoopStatement_3(yyp); } -public static object ArgumentDeclarationList_4_factory(Parser yyp) { return new ArgumentDeclarationList_4(yyp); } -public static object ArgumentDeclarationList_5_factory(Parser yyp) { return new ArgumentDeclarationList_5(yyp); } -public static object WhileStatement_factory(Parser yyp) { return new WhileStatement(yyp); } -public static object ForLoop_1_factory(Parser yyp) { return new ForLoop_1(yyp); } -public static object Constant_2_factory(Parser yyp) { return new Constant_2(yyp); } -public static object StatementList_factory(Parser yyp) { return new StatementList(yyp); } -public static object StateBody_2_factory(Parser yyp) { return new StateBody_2(yyp); } -public static object WhileStatement_2_factory(Parser yyp) { return new WhileStatement_2(yyp); } -public static object IdentExpression_1_factory(Parser yyp) { return new IdentExpression_1(yyp); } -public static object States_factory(Parser yyp) { return new States(yyp); } -} -public class LSLSyntax -: Parser { -public LSLSyntax -():base(new yyLSLSyntax -(),new LSLTokens()) {} -public LSLSyntax -(YyParser syms):base(syms,new LSLTokens()) {} -public LSLSyntax -(YyParser syms,ErrorHandler erh):base(syms,new LSLTokens(erh)) {} - - } -} diff --git a/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/YieldProlog/Atom.cs b/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/YieldProlog/Atom.cs deleted file mode 100644 index 0537f7d..0000000 --- a/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/YieldProlog/Atom.cs +++ /dev/null @@ -1,218 +0,0 @@ -/* - * Copyright (C) 2007-2008, Jeff Thompson - * - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * * Neither the name of the copyright holder nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -using System; -using System.Collections.Generic; -using System.Text; - -namespace OpenSim.Region.ScriptEngine.DotNetEngine.Compiler.YieldProlog -{ - public class Atom : IUnifiable - { - private static Dictionary _atomStore = new Dictionary(); - public readonly string _name; - public readonly Atom _module; - - /// - /// You should not call this constructor, but use Atom.a instead. - /// - /// - /// - private Atom(string name, Atom module) - { - _name = name; - _module = module; - } - - /// - /// Return the unique Atom object for name where module is null. You should use this to create - /// an Atom instead of calling the Atom constructor. - /// - /// - /// - public static Atom a(string name) - { - Atom atom; - if (!_atomStore.TryGetValue(name, out atom)) - { - atom = new Atom(name, null); - _atomStore[name] = atom; - } - return atom; - } - - /// - /// Return an Atom object with the name and module. If module is null or Atom.NIL, - /// this behaves like Atom.a(name) and returns the unique object where the module is null. - /// If module is not null or Atom.NIL, this may or may not be the same object as another Atom - /// with the same name and module. - /// - /// - /// - /// - public static Atom a(string name, Atom module) - { - if (module == null || module == Atom.NIL) - return a(name); - return new Atom(name, module); - } - - /// - /// If Obj is an Atom unify its _module with Module. If the Atom's _module is null, use Atom.NIL. - /// - /// - /// - /// - public static IEnumerable module(object Obj, object Module) - { - Obj = YP.getValue(Obj); - if (Obj is Atom) - { - if (((Atom)Obj)._module == null) - return YP.unify(Module, Atom.NIL); - else - return YP.unify(Module, ((Atom)Obj)._module); - } - return YP.fail(); - } - - public static readonly Atom NIL = Atom.a("[]"); - public static readonly Atom DOT = Atom.a("."); - public static readonly Atom F = Atom.a("f"); - public static readonly Atom SLASH = Atom.a("/"); - public static readonly Atom HAT = Atom.a("^"); - public static readonly Atom RULE = Atom.a(":-"); - - public IEnumerable unify(object arg) - { - arg = YP.getValue(arg); - if (arg is Atom) - return Equals(arg) ? YP.succeed() : YP.fail(); - else if (arg is Variable) - return ((Variable)arg).unify(this); - else - return YP.fail(); - } - - public void addUniqueVariables(List variableSet) - { - // Atom does not contain variables. - } - - public object makeCopy(Variable.CopyStore copyStore) - { - // Atom does not contain variables that need to be copied. - return this; - } - - public bool termEqual(object term) - { - return Equals(YP.getValue(term)); - } - - public bool ground() - { - // Atom is always ground. - return true; - } - - public override bool Equals(object obj) - { - if (obj is Atom) - { - if (_module == null && ((Atom)obj)._module == null) - // When _declaringClass is null, we always use an identical object from _atomStore. - return this == obj; - // Otherwise, ignore _declaringClass and do a normal string compare on the _name. - return _name == ((Atom)obj)._name; - } - return false; - } - - public override string ToString() - { - return _name; - } - - public override int GetHashCode() - { - // Debug: need to check _declaringClass. - return _name.GetHashCode(); - } - - public string toQuotedString() - { - if (_name.Length == 0) - return "''"; - else if (this == Atom.NIL) - return "[]"; - - StringBuilder result = new StringBuilder(_name.Length); - bool useQuotes = false; - foreach (char c in _name) - { - int cInt = (int)c; - if (c == '\'') - { - result.Append("''"); - useQuotes = true; - } - else if (c == '_' || cInt >= (int)'a' && cInt <= (int)'z' || - cInt >= (int)'A' && cInt <= (int)'Z' || cInt >= (int)'0' && cInt <= (int)'9') - result.Append(c); - else - { - // Debug: Need to handle non-printable chars. - result.Append(c); - useQuotes = true; - } - } - - if (!useQuotes && (int)_name[0] >= (int)'a' && (int)_name[0] <= (int)'z') - return result.ToString(); - else - { - // Surround in single quotes. - result.Append('\''); - return "'" + result; - } - } - - /// - /// Return true if _name is lexicographically less than atom._name. - /// - /// - /// - public bool lessThan(Atom atom) - { - return _name.CompareTo(atom._name) < 0; - } - } -} diff --git a/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/YieldProlog/BagofAnswers.cs b/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/YieldProlog/BagofAnswers.cs deleted file mode 100644 index e6f10ca..0000000 --- a/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/YieldProlog/BagofAnswers.cs +++ /dev/null @@ -1,239 +0,0 @@ -/* - * Copyright (C) 2007-2008, Jeff Thompson - * - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * * Neither the name of the copyright holder nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -using System; -using System.Collections; -using System.Collections.Generic; - -namespace OpenSim.Region.ScriptEngine.DotNetEngine.Compiler.YieldProlog -{ - /// - /// A BagofAnswers holds answers for bagof and setof. - /// - public class BagofAnswers - { - private object _template; - private Variable[] _freeVariables; - private Dictionary> _bagForFreeVariables; - private List _findallBagArray; - private static TermArrayEqualityComparer _termArrayEqualityComparer = - new TermArrayEqualityComparer(); - - /// - /// To get the free variables, split off any existential qualifiers from Goal such as the X in - /// "X ^ f(Y)", get the set of unbound variables in Goal that are not qualifiers, then remove - /// the unbound variables that are qualifiers as well as the unbound variables in Template. - /// - /// - /// - public BagofAnswers(object Template, object Goal) - { - _template = Template; - - // First get the set of variables that are not free variables. - List variableSet = new List(); - YP.addUniqueVariables(Template, variableSet); - object UnqualifiedGoal = YP.getValue(Goal); - while (UnqualifiedGoal is Functor2 && ((Functor2)UnqualifiedGoal)._name == Atom.HAT) - { - YP.addUniqueVariables(((Functor2)UnqualifiedGoal)._arg1, variableSet); - UnqualifiedGoal = YP.getValue(((Functor2)UnqualifiedGoal)._arg2); - } - - // Remember how many non-free variables there are so we can find the unique free variables - // that are added. - int nNonFreeVariables = variableSet.Count; - YP.addUniqueVariables(UnqualifiedGoal, variableSet); - int nFreeVariables = variableSet.Count - nNonFreeVariables; - if (nFreeVariables == 0) - { - // There were no free variables added, so we won't waste time with _bagForFreeVariables. - _freeVariables = null; - _findallBagArray = new List(); - } - else - { - // Copy the free variables. - _freeVariables = new Variable[nFreeVariables]; - for (int i = 0; i < nFreeVariables; ++i) - _freeVariables[i] = variableSet[i + nNonFreeVariables]; - - _bagForFreeVariables = new Dictionary>(_termArrayEqualityComparer); - } - } - - public void add() - { - if (_freeVariables == null) - // The goal has bound the values in _template but we don't bother with _freeVariables. - _findallBagArray.Add(YP.makeCopy(_template, new Variable.CopyStore())); - else - { - // The goal has bound the values in _template and _freeVariables. - // Find the entry for this set of _freeVariables values. - object[] freeVariableValues = new object[_freeVariables.Length]; - for (int i = 0; i < _freeVariables.Length; ++i) - freeVariableValues[i] = YP.getValue(_freeVariables[i]); - List bagArray; - if (!_bagForFreeVariables.TryGetValue(freeVariableValues, out bagArray)) - { - bagArray = new List(); - _bagForFreeVariables[freeVariableValues] = bagArray; - } - - // Now copy the template and add to the bag for the freeVariables values. - bagArray.Add(YP.makeCopy(_template, new Variable.CopyStore())); - } - } - - // disable warning on l1, don't see how we can - // code this differently - #pragma warning disable 0168 - - /// - /// For each result, unify the _freeVariables and unify bagArrayVariable with the associated bag. - /// - /// this is unified with the List of matches for template that - /// corresponds to the bindings for freeVariables. Be very careful: this does not unify with a Prolog - /// list. - /// - public IEnumerable resultArray(Variable bagArrayVariable) - { - if (_freeVariables == null) - { - // No unbound free variables, so we only filled one bag. If empty, bagof fails. - if (_findallBagArray.Count > 0) - { - foreach (bool l1 in bagArrayVariable.unify(_findallBagArray)) - yield return false; - } - } - else - { - foreach (KeyValuePair> valuesAndBag in _bagForFreeVariables) - { - foreach (bool l1 in YP.unifyArrays(_freeVariables, valuesAndBag.Key)) - { - foreach (bool l2 in bagArrayVariable.unify(valuesAndBag.Value)) - yield return false; - } - // Debug: Should we free memory of the answers already returned? - } - } - } - - /// - /// For each result, unify the _freeVariables and unify Bag with the associated bag. - /// - /// - /// - public IEnumerable result(object Bag) - { - Variable bagArrayVariable = new Variable(); - foreach (bool l1 in resultArray(bagArrayVariable)) - { - foreach (bool l2 in YP.unify(Bag, ListPair.make((List)bagArrayVariable.getValue()))) - yield return false; - } - } - - /// - /// For each result, unify the _freeVariables and unify Bag with the associated bag which is sorted - /// with duplicates removed, as in setof. - /// - /// - /// - public IEnumerable resultSet(object Bag) - { - Variable bagArrayVariable = new Variable(); - foreach (bool l1 in resultArray(bagArrayVariable)) - { - List bagArray = (List)bagArrayVariable.getValue(); - YP.sortArray(bagArray); - foreach (bool l2 in YP.unify(Bag, ListPair.makeWithoutRepeatedTerms(bagArray))) - yield return false; - } - } - - public static IEnumerable bagofArray - (object Template, object Goal, IEnumerable goalIterator, Variable bagArrayVariable) - { - BagofAnswers bagOfAnswers = new BagofAnswers(Template, Goal); - foreach (bool l1 in goalIterator) - bagOfAnswers.add(); - return bagOfAnswers.resultArray(bagArrayVariable); - } - - public static IEnumerable bagof - (object Template, object Goal, IEnumerable goalIterator, object Bag) - { - BagofAnswers bagOfAnswers = new BagofAnswers(Template, Goal); - foreach (bool l1 in goalIterator) - bagOfAnswers.add(); - return bagOfAnswers.result(Bag); - } - - public static IEnumerable setof - (object Template, object Goal, IEnumerable goalIterator, object Bag) - { - BagofAnswers bagOfAnswers = new BagofAnswers(Template, Goal); - foreach (bool l1 in goalIterator) - bagOfAnswers.add(); - return bagOfAnswers.resultSet(Bag); - } - #pragma warning restore 0168 - - /// - /// A TermArrayEqualityComparer implements IEqualityComparer to compare two object arrays using YP.termEqual. - /// - private class TermArrayEqualityComparer : IEqualityComparer - { - public bool Equals(object[] array1, object[] array2) - { - if (array1.Length != array2.Length) - return false; - for (int i = 0; i < array1.Length; ++i) - { - if (!YP.termEqual(array1[i], array2[i])) - return false; - } - return true; - } - - public int GetHashCode(object[] array) - { - int hashCode = 0; - for (int i = 0; i < array.Length; ++i) - hashCode ^= array[i].GetHashCode(); - return hashCode; - } - } - } -} diff --git a/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/YieldProlog/FindallAnswers.cs b/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/YieldProlog/FindallAnswers.cs deleted file mode 100644 index 4327715..0000000 --- a/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/YieldProlog/FindallAnswers.cs +++ /dev/null @@ -1,108 +0,0 @@ -/* - * Copyright (C) 2007-2008, Jeff Thompson - * - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * * Neither the name of the copyright holder nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -using System; -using System.Collections; -using System.Collections.Generic; - -namespace OpenSim.Region.ScriptEngine.DotNetEngine.Compiler.YieldProlog -{ - /// - /// A FindallAnswers holds answers for findall. - /// - public class FindallAnswers - { - private object _template; - private List _bagArray; - - public FindallAnswers(object Template) - { - _template = Template; - _bagArray = new List(); - } - - public void add() - { - _bagArray.Add(YP.makeCopy(_template, new Variable.CopyStore())); - } - - public List resultArray() - { - return _bagArray; - } - - /// - /// Unify Bag with the result. This frees the internal answers, so you can only call this once. - /// - /// - /// - public IEnumerable result(object Bag) - { - object result = ListPair.make(_bagArray); - // Try to free the memory. - _bagArray = null; - return YP.unify(Bag, result); - } - - // disable warning on l1, don't see how we can - // code this differently - #pragma warning disable 0168 - - /// - /// This is a simplified findall when the goal is a single call. - /// - /// - /// - /// - /// - public static IEnumerable findall(object Template, IEnumerable goal, object Bag) - { - FindallAnswers findallAnswers = new FindallAnswers(Template); - foreach (bool l1 in goal) - findallAnswers.add(); - return findallAnswers.result(Bag); - } - - /// - /// Like findall, except return an array of the results. - /// - /// - /// - /// - public static List findallArray(object Template, IEnumerable goal) - { - FindallAnswers findallAnswers = new FindallAnswers(Template); - foreach (bool l1 in goal) - findallAnswers.add(); - return findallAnswers.resultArray(); - } - #pragma warning restore 0168 - } -} diff --git a/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/YieldProlog/Functor.cs b/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/YieldProlog/Functor.cs deleted file mode 100644 index 4aa4ce4..0000000 --- a/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/YieldProlog/Functor.cs +++ /dev/null @@ -1,196 +0,0 @@ -/* - * Copyright (C) 2007-2008, Jeff Thompson - * - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * * Neither the name of the copyright holder nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -using System; -using System.Collections.Generic; - -namespace OpenSim.Region.ScriptEngine.DotNetEngine.Compiler.YieldProlog -{ - public class Functor : IUnifiable - { - public readonly Atom _name; - public readonly object[] _args; - - public Functor(Atom name, object[] args) - { - if (args.Length <= 3) - { - if (args.Length == 0) - throw new Exception("For arity 0 functor, just use name as an Atom"); - else if (args.Length == 1) - throw new Exception("For arity 1 functor, use Functor1"); - else if (args.Length == 2) - throw new Exception("For arity 2 functor, use Functor2"); - else if (args.Length == 3) - throw new Exception("For arity 3 functor, use Functor3"); - else - // (This shouldn't happen, but include it for completeness. - throw new Exception("Cannot create a Functor of arity " + args.Length); - } - - _name = name; - _args = args; - } - - public Functor(string name, object[] args) - : this(Atom.a(name), args) - { - } - - /// - /// Return an Atom, Functor1, Functor2, Functor3 or Functor depending on the - /// length of args. - /// Note that this is different than the Functor constructor which requires - /// the length of args to be greater than 3. - /// - /// - /// - /// - public static object make(Atom name, object[] args) - { - if (args.Length <= 0) - return name; - else if (args.Length == 1) - return new Functor1(name, args[0]); - else if (args.Length == 2) - return new Functor2(name, args[0], args[1]); - else if (args.Length == 3) - return new Functor3(name, args[0], args[1], args[2]); - else - return new Functor(name, args); - } - - /// - /// Call the main make, first converting name to an Atom. - /// - /// - /// - /// - public static object make(string name, object[] args) - { - return make(Atom.a(name), args); - } - - /// - /// If arg is another Functor, then succeed (yield once) if this and arg have the - /// same name and all functor args unify, otherwise fail (don't yield). - /// If arg is a Variable, then call its unify to unify with this. - /// Otherwise fail (don't yield). - /// - /// - /// - public IEnumerable unify(object arg) - { - arg = YP.getValue(arg); - if (arg is Functor) - { - Functor argFunctor = (Functor)arg; - if (_name.Equals(argFunctor._name)) - return YP.unifyArrays(_args, argFunctor._args); - else - return YP.fail(); - } - else if (arg is Variable) - return ((Variable)arg).unify(this); - else - return YP.fail(); - } - - public override string ToString() - { - string result = _name + "(" + YP.getValue(_args[0]); - for (int i = 1; i < _args.Length; ++i) - result += ", " + YP.getValue(_args[i]); - result += ")"; - return result; - } - - public bool termEqual(object term) - { - term = YP.getValue(term); - if (term is Functor) - { - Functor termFunctor = (Functor)term; - if (_name.Equals(termFunctor._name) && _args.Length == termFunctor._args.Length) - { - for (int i = 0; i < _args.Length; ++i) - { - if (!YP.termEqual(_args[i], termFunctor._args[i])) - return false; - } - return true; - } - } - return false; - } - - public bool lessThan(Functor functor) - { - // Do the equal check first since it is faster. - if (!_name.Equals(functor._name)) - return _name.lessThan(functor._name); - - if (_args.Length != functor._args.Length) - return _args.Length < functor._args.Length; - - for (int i = 0; i < _args.Length; ++i) - { - if (!YP.termEqual(_args[i], functor._args[i])) - return YP.termLessThan(_args[i], functor._args[i]); - } - - return false; - } - - public bool ground() - { - for (int i = 0; i < _args.Length; ++i) - { - if (!YP.ground(_args[i])) - return false; - } - return true; - } - - public void addUniqueVariables(List variableSet) - { - for (int i = 0; i < _args.Length; ++i) - YP.addUniqueVariables(_args[i], variableSet); - } - - public object makeCopy(Variable.CopyStore copyStore) - { - object[] argsCopy = new object[_args.Length]; - for (int i = 0; i < _args.Length; ++i) - argsCopy[i] = YP.makeCopy(_args[i], copyStore); - return new Functor(_name, argsCopy); - } - } -} diff --git a/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/YieldProlog/Functor1.cs b/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/YieldProlog/Functor1.cs deleted file mode 100644 index fa05270..0000000 --- a/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/YieldProlog/Functor1.cs +++ /dev/null @@ -1,124 +0,0 @@ -/* - * Copyright (C) 2007-2008, Jeff Thompson - * - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * * Neither the name of the copyright holder nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -using System; -using System.Collections.Generic; - -namespace OpenSim.Region.ScriptEngine.DotNetEngine.Compiler.YieldProlog -{ - public class Functor1 : IUnifiable - { - public readonly Atom _name; - public readonly object _arg1; - - public Functor1(Atom name, object arg1) - { - _name = name; - _arg1 = arg1; - } - - public Functor1(string name, object arg1) - : this(Atom.a(name), arg1) - { - } - - // disable warning on l1, don't see how we can - // code this differently - #pragma warning disable 0168 - /// - /// If arg is another Functor1, then succeed (yield once) if this and arg have the - /// same name and the functor args unify, otherwise fail (don't yield). - /// If arg is a Variable, then call its unify to unify with this. - /// Otherwise fail (don't yield). - /// - /// - /// - public IEnumerable unify(object arg) - { - arg = YP.getValue(arg); - if (arg is Functor1) - { - Functor1 argFunctor = (Functor1)arg; - if (_name.Equals(argFunctor._name)) - { - foreach (bool l1 in YP.unify(_arg1, argFunctor._arg1)) - yield return false; - } - } - else if (arg is Variable) - { - foreach (bool l1 in ((Variable)arg).unify(this)) - yield return false; - } - } - #pragma warning restore 0168 - - - public override string ToString() - { - return _name + "(" + YP.getValue(_arg1) + ")"; - } - - public bool termEqual(object term) - { - term = YP.getValue(term); - if (term is Functor1) - { - Functor1 termFunctor = (Functor1)term; - return _name.Equals(termFunctor._name) && YP.termEqual(_arg1, termFunctor._arg1); - } - return false; - } - - public bool lessThan(Functor1 functor) - { - // Do the equal check first since it is faster. - if (!_name.Equals(functor._name)) - return _name.lessThan(functor._name); - - return YP.termLessThan(_arg1, functor._arg1); - } - - public bool ground() - { - return YP.ground(_arg1); - } - - public void addUniqueVariables(List variableSet) - { - YP.addUniqueVariables(_arg1, variableSet); - } - - public object makeCopy(Variable.CopyStore copyStore) - { - return new Functor1(_name, YP.makeCopy(_arg1, copyStore)); - } - } -} diff --git a/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/YieldProlog/Functor2.cs b/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/YieldProlog/Functor2.cs deleted file mode 100644 index a65022f..0000000 --- a/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/YieldProlog/Functor2.cs +++ /dev/null @@ -1,163 +0,0 @@ -/* - * Copyright (C) 2007-2008, Jeff Thompson - * - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * * Neither the name of the copyright holder nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -using System; -using System.Collections.Generic; - -namespace OpenSim.Region.ScriptEngine.DotNetEngine.Compiler.YieldProlog -{ - public class Functor2 : IUnifiable - { - public readonly Atom _name; - public readonly object _arg1; - public readonly object _arg2; - - public Functor2(Atom name, object arg1, object arg2) - { - _name = name; - _arg1 = arg1; - _arg2 = arg2; - } - - public Functor2(string name, object arg1, object arg2) - : this(Atom.a(name), arg1, arg2) - { - } - - // disable warning on l1, don't see how we can - // code this differently - #pragma warning disable 0168 - /// If arg is another Functor2, then succeed (yield once) if this and arg have the - /// same name and all functor args unify, otherwise fail (don't yield). - /// If arg is a Variable, then call its unify to unify with this. - /// Otherwise fail (don't yield). - public IEnumerable unify(object arg) - { - arg = YP.getValue(arg); - if (arg is Functor2) - { - Functor2 argFunctor = (Functor2)arg; - if (_name.Equals(argFunctor._name)) - { - foreach (bool l1 in YP.unify(_arg1, argFunctor._arg1)) - { - foreach (bool l2 in YP.unify(_arg2, argFunctor._arg2)) - yield return false; - } - } - } - else if (arg is Variable) - { - foreach (bool l1 in ((Variable)arg).unify(this)) - yield return false; - } - } - #pragma warning restore 0168 - - - public override string ToString() - { - if (_name == Atom.DOT) - return listPairToString(this); - else - return _name + "(" + YP.getValue(_arg1) + ", " + YP.getValue(_arg2) + ")"; - } - - public bool termEqual(object term) - { - term = YP.getValue(term); - if (term is Functor2) - { - Functor2 termFunctor = (Functor2)term; - return _name.Equals(termFunctor._name) && YP.termEqual(_arg1, termFunctor._arg1) - && YP.termEqual(_arg2, termFunctor._arg2); - } - return false; - } - - public bool lessThan(Functor2 functor) - { - // Do the equal check first since it is faster. - if (!_name.Equals(functor._name)) - return _name.lessThan(functor._name); - - if (!YP.termEqual(_arg1, functor._arg1)) - return YP.termLessThan(_arg1, functor._arg1); - - return YP.termLessThan(_arg2, functor._arg2); - } - - public bool ground() - { - return YP.ground(_arg1) && YP.ground(_arg2); - } - - public void addUniqueVariables(List variableSet) - { - YP.addUniqueVariables(_arg1, variableSet); - YP.addUniqueVariables(_arg2, variableSet); - } - - public object makeCopy(Variable.CopyStore copyStore) - { - return new Functor2(_name, YP.makeCopy(_arg1, copyStore), - YP.makeCopy(_arg2, copyStore)); - } - - private static string listPairToString(Functor2 listPair) - { - string result = "["; - while (true) - { - object head = YP.getValue(listPair._arg1); - object tail = YP.getValue(listPair._arg2); - if (tail == (object)Atom.NIL) - { - result += head; - break; - } - else if (tail is Functor2 && ((Functor2)tail)._name == Atom.DOT) - { - result += head + ", "; - listPair = (Functor2)tail; - // Loop again. - } - else - { - // The list is not terminated with NIL. - result += head + "|" + tail; - break; - } - } - result += "]"; - return result; - } - } -} diff --git a/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/YieldProlog/Functor3.cs b/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/YieldProlog/Functor3.cs deleted file mode 100644 index b9738da..0000000 --- a/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/YieldProlog/Functor3.cs +++ /dev/null @@ -1,141 +0,0 @@ -/* - * Copyright (C) 2007-2008, Jeff Thompson - * - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * * Neither the name of the copyright holder nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -using System; -using System.Collections.Generic; - -namespace OpenSim.Region.ScriptEngine.DotNetEngine.Compiler.YieldProlog -{ - public class Functor3 : IUnifiable - { - public readonly Atom _name; - public readonly object _arg1; - public readonly object _arg2; - public readonly object _arg3; - - public Functor3(Atom name, object arg1, object arg2, object arg3) - { - _name = name; - _arg1 = arg1; - _arg2 = arg2; - _arg3 = arg3; - } - - public Functor3(string name, object arg1, object arg2, object arg3) - : this(Atom.a(name), arg1, arg2, arg3) - { - } - - // disable warning on l1, don't see how we can - // code this differently - #pragma warning disable 0168 - /// If arg is another Functor3, then succeed (yield once) if this and arg have the - /// same name and all functor args unify, otherwise fail (don't yield). - /// If arg is a Variable, then call its unify to unify with this. - /// Otherwise fail (don't yield). - public IEnumerable unify(object arg) - { - arg = YP.getValue(arg); - if (arg is Functor3) - { - Functor3 argFunctor = (Functor3)arg; - if (_name.Equals(argFunctor._name)) - { - foreach (bool l1 in YP.unify(_arg1, argFunctor._arg1)) - { - foreach (bool l2 in YP.unify(_arg2, argFunctor._arg2)) - { - foreach (bool l3 in YP.unify(_arg3, argFunctor._arg3)) - yield return false; - } - } - } - } - else if (arg is Variable) - { - foreach (bool l1 in ((Variable)arg).unify(this)) - yield return false; - } - } - #pragma warning restore 0168 - - public override string ToString() - { - return _name + "(" + YP.getValue(_arg1) + ", " + YP.getValue(_arg2) + ", " + - YP.getValue(_arg3) + ")"; - } - - public bool termEqual(object term) - { - term = YP.getValue(term); - if (term is Functor3) - { - Functor3 termFunctor = (Functor3)term; - return _name.Equals(termFunctor._name) && YP.termEqual(_arg1, termFunctor._arg1) - && YP.termEqual(_arg2, termFunctor._arg2) - && YP.termEqual(_arg3, termFunctor._arg3); - } - return false; - } - - public bool lessThan(Functor3 functor) - { - // Do the equal check first since it is faster. - if (!_name.Equals(functor._name)) - return _name.lessThan(functor._name); - - if (!YP.termEqual(_arg1, functor._arg1)) - return YP.termLessThan(_arg1, functor._arg1); - - if (!YP.termEqual(_arg2, functor._arg2)) - return YP.termLessThan(_arg2, functor._arg2); - - return YP.termLessThan(_arg3, functor._arg3); - } - - public bool ground() - { - return YP.ground(_arg1) && YP.ground(_arg2) && YP.ground(_arg3); - } - - public void addUniqueVariables(List variableSet) - { - YP.addUniqueVariables(_arg1, variableSet); - YP.addUniqueVariables(_arg2, variableSet); - YP.addUniqueVariables(_arg3, variableSet); - } - - public object makeCopy(Variable.CopyStore copyStore) - { - return new Functor3(_name, YP.makeCopy(_arg1, copyStore), - YP.makeCopy(_arg2, copyStore), YP.makeCopy(_arg3, copyStore)); - } - } -} diff --git a/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/YieldProlog/IndexedAnswers.cs b/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/YieldProlog/IndexedAnswers.cs deleted file mode 100644 index 415c646..0000000 --- a/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/YieldProlog/IndexedAnswers.cs +++ /dev/null @@ -1,385 +0,0 @@ -/* - * Copyright (C) 2007-2008, Jeff Thompson - * - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * * Neither the name of the copyright holder nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -using System; -using System.Collections; -using System.Collections.Generic; - -namespace OpenSim.Region.ScriptEngine.DotNetEngine.Compiler.YieldProlog -{ - /// - /// An IndexedAnswers holds answers to a query based on the values of index arguments. - /// - public class IndexedAnswers : YP.IClause - { - private int _arity; - // addAnswer adds the answer here and indexes it later. - private List _allAnswers = new List(); - // The key has the arity of answers with non-null values for each indexed arg. The value - // is a list of the matching answers. The signature is implicit in the pattern on non-null index args. - private Dictionary> _indexedAnswers = - new Dictionary>(); - // Keeps track of whether we have started adding entries to _indexedAnswers for the signature. - private Dictionary _gotAnswersForSignature = new Dictionary(); - private const int MAX_INDEX_ARGS = 31; - - public IndexedAnswers(int arity) - { - _arity = arity; - } - - /// - /// Append the answer to the list and update the indexes, if any. - /// Elements of answer must be ground, since arguments with unbound variables make this - /// into a dynamic rule which we don't index. - /// - /// - public void addAnswer(object[] answer) - { - addOrPrependAnswer(answer, false); - } - - /// - /// Prepend the answer to the list and clear the indexes so that they must be re-computed - /// on the next call to match. (Only addAnswer will maintain the indexes while adding answers.) - /// Elements of answer must be ground, since arguments with unbound variables make this - /// into a dynamic rule which we don't index. - /// - /// - public void prependAnswer(object[] answer) - { - addOrPrependAnswer(answer, true); - } - - /// - /// Do the work of addAnswer or prependAnswer. - /// - /// - private void addOrPrependAnswer(object[] answer, bool prepend) - { - if (answer.Length != _arity) - return; - - // Store a copy of the answer array. - object[] answerCopy = new object[answer.Length]; - Variable.CopyStore copyStore = new Variable.CopyStore(); - for (int i = 0; i < answer.Length; ++i) - answerCopy[i] = YP.makeCopy(answer[i], copyStore); - if (copyStore.getNUniqueVariables() > 0) - throw new InvalidOperationException - ("Elements of answer must be ground, but found " + copyStore.getNUniqueVariables() + - " unbound variables"); - - if (prepend) - { - _allAnswers.Insert(0, answerCopy); - clearIndexes(); - } - else - { - _allAnswers.Add(answerCopy); - // If match has already indexed answers for a signature, we need to add - // this to the existing indexed answers. - foreach (int signature in _gotAnswersForSignature.Keys) - indexAnswerForSignature(answerCopy, signature); - } - } - - private void indexAnswerForSignature(object[] answer, int signature) - { - // First find out which of the answer values can be used as an index. - object[] indexValues = new object[answer.Length]; - for (int i = 0; i < answer.Length; ++i) - { - // We limit the number of indexed args in a 32-bit signature. - if (i >= MAX_INDEX_ARGS) - indexValues[i] = null; - else - indexValues[i] = getIndexValue(YP.getValue(answer[i])); - } - - // We need an entry in indexArgs from indexValues for each 1 bit in signature. - HashedList indexArgs = new HashedList(indexValues.Length); - for (int i = 0; i < indexValues.Length; ++i) - { - if ((signature & (1 << i)) == 0) - indexArgs.Add(null); - else - { - if (indexValues[i] == null) - // The signature wants an index value here, but we don't have one so - // we can't add it as an answer for this signature. - return; - else - indexArgs.Add(indexValues[i]); - } - } - - // Add the answer to the answers list for indexArgs, creating the entry if needed. - List answers; - if (!_indexedAnswers.TryGetValue(indexArgs, out answers)) - { - answers = new List(); - _indexedAnswers[indexArgs] = answers; - } - answers.Add(answer); - } - - public IEnumerable match(object[] arguments) - { - if (arguments.Length != _arity) - yield break; - - // Set up indexArgs, up to arg position MAX_INDEX_ARGS. The signature has a 1 bit for - // each non-null index arg. - HashedList indexArgs = new HashedList(arguments.Length); - bool gotAllIndexArgs = true; - int signature = 0; - for (int i = 0; i < arguments.Length; ++i) - { - object indexValue = null; - if (i < MAX_INDEX_ARGS) - { - // We limit the number of args in a 32-bit signature. - indexValue = getIndexValue(YP.getValue(arguments[i])); - if (indexValue != null) - signature += (1 << i); - } - if (indexValue == null) - gotAllIndexArgs = false; - indexArgs.Add(indexValue); - } - - List answers; - if (signature == 0) - // No index args, so we have to match from _allAnswers. - answers = _allAnswers; - else - { - if (!_gotAnswersForSignature.ContainsKey(signature)) - { - // We need to create the entry in _indexedAnswers. - foreach (object[] answer in _allAnswers) - indexAnswerForSignature(answer, signature); - // Mark that we did this signature. - _gotAnswersForSignature[signature] = null; - } - if (!_indexedAnswers.TryGetValue(indexArgs, out answers)) - yield break; - } - - if (gotAllIndexArgs) - { - // All the arguments were already bound, so we don't need to do bindings. - yield return false; - yield break; - } - - // Find matches in answers. - IEnumerator[] iterators = new IEnumerator[arguments.Length]; - // Debug: If the caller asserts another answer into this same predicate during yield, the iterator - // over clauses will be corrupted. Should we take the time to copy answers? - foreach (object[] answer in answers) - { - bool gotMatch = true; - int nIterators = 0; - // Try to bind all the arguments. - for (int i = 0; i < arguments.Length; ++i) - { - if (indexArgs[i] != null) - // We already matched this argument by looking up _indexedAnswers. - continue; - - IEnumerator iterator = YP.unify(arguments[i], answer[i]).GetEnumerator(); - iterators[nIterators++] = iterator; - // MoveNext() is true if YP.unify succeeds. - if (!iterator.MoveNext()) - { - gotMatch = false; - break; - } - } - - try - { - if (gotMatch) - yield return false; - } - finally - { - // Manually finalize all the iterators. - for (int i = 0; i < nIterators; ++i) - iterators[i].Dispose(); - } - } - } - - public IEnumerable clause(object Head, object Body) - { - Head = YP.getValue(Head); - if (Head is Variable) - throw new PrologException("instantiation_error", "Head is an unbound variable"); - object[] arguments = YP.getFunctorArgs(Head); - - // We always match Head from _allAnswers, and the Body is Atom.a("true"). - #pragma warning disable 0168 - foreach (bool l1 in YP.unify(Body, Atom.a("true"))) - { - // The caller can assert another answer into this same predicate during yield, so we have to - // make a copy of the answers. - foreach (object[] answer in _allAnswers.ToArray()) - { - foreach (bool l2 in YP.unifyArrays(arguments, answer)) - yield return false; - } - } - #pragma warning restore 0168 - } - - public IEnumerable retract(object Head, object Body) - { - Head = YP.getValue(Head); - if (Head is Variable) - throw new PrologException("instantiation_error", "Head is an unbound variable"); - object[] arguments = YP.getFunctorArgs(Head); - - // We always match Head from _allAnswers, and the Body is Atom.a("true"). - #pragma warning disable 0168 - foreach (bool l1 in YP.unify(Body, Atom.a("true"))) - { - // The caller can assert another answer into this same predicate during yield, so we have to - // make a copy of the answers. - foreach (object[] answer in _allAnswers.ToArray()) - { - foreach (bool l2 in YP.unifyArrays(arguments, answer)) - { - _allAnswers.Remove(answer); - clearIndexes(); - yield return false; - } - } - } - #pragma warning restore 0168 - } - - /// - /// After retracting or prepending an answer in _allAnswers, the indexes are invalid, so clear them. - /// - private void clearIndexes() - { - _indexedAnswers.Clear(); - _gotAnswersForSignature.Clear(); - } - - /// - /// A HashedList extends an ArrayList with methods to get a hash and to check equality - /// based on the elements of the list. - /// - public class HashedList : ArrayList - { - private bool _gotHashCode = false; - private int _hashCode; - - public HashedList() - : base() - { - } - - public HashedList(int capacity) - : base(capacity) - { - } - - public HashedList(ICollection c) - : base(c) - { - } - - // Debug: Should override all the other methods that change this. - public override int Add(object value) - { - _gotHashCode = false; - return base.Add(value); - } - - public override int GetHashCode() - { - if (!_gotHashCode) - { - int hashCode = 1; - foreach (object obj in this) - hashCode = 31 * hashCode + (obj == null ? 0 : obj.GetHashCode()); - _hashCode = hashCode; - _gotHashCode = true; - } - return _hashCode; - } - - public override bool Equals(object obj) - { - if (!(obj is ArrayList)) - return false; - - ArrayList objList = (ArrayList)obj; - if (objList.Count != Count) - return false; - - for (int i = 0; i < Count; ++i) - { - object value = objList[i]; - if (value == null) - { - if (this[i] != null) - return false; - } - else - { - if (!value.Equals(this[i])) - return false; - } - } - return true; - } - } - - /// - /// If we keep an index on value, return the value, or null if we don't index it. - /// - /// the term to examine. Assume you already called YP.getValue(value) - /// - public static object getIndexValue(object value) - { - if (value is Atom || value is string || value is Int32 || value is DateTime) - return value; - else - return null; - } - } -} diff --git a/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/YieldProlog/ListPair.cs b/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/YieldProlog/ListPair.cs deleted file mode 100644 index c00a556..0000000 --- a/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/YieldProlog/ListPair.cs +++ /dev/null @@ -1,166 +0,0 @@ -/* - * Copyright (C) 2007-2008, Jeff Thompson - * - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * * Neither the name of the copyright holder nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -using System; -using System.Collections.Generic; - -namespace OpenSim.Region.ScriptEngine.DotNetEngine.Compiler.YieldProlog -{ - public class ListPair : Functor2 - { - public ListPair(object head, object tail) : base(Atom.DOT, head, tail) - { - } - - public static object make(List list) - { - if (list.Count <= 0) - return Atom.NIL; - - object result = Atom.NIL; - // Start from the end. - for (int i = list.Count - 1; i >= 0; --i) - result = new ListPair(list[i], result); - return result; - } - - public static object make(object[] array) - { - if (array.Length <= 0) - return Atom.NIL; - - object result = Atom.NIL; - // Start from the end. - for (int i = array.Length - 1; i >= 0; --i) - result = new ListPair(array[i], result); - return result; - } - - /// - /// Return a ListPair version of array, where repeated elements - /// (according to YP.termEqual) are removed. - /// - /// - /// - public static object makeWithoutRepeatedTerms(object[] array) - { - if (array.Length <= 0) - return Atom.NIL; - - // Start from the end. - object previousTerm = array[array.Length - 1]; - object result = new ListPair(previousTerm, Atom.NIL); - for (int i = array.Length - 2; i >= 0; --i) - { - object term = array[i]; - if (YP.termEqual(term, previousTerm)) - continue; - result = new ListPair(term, result); - previousTerm = term; - } - return result; - } - - /// - /// Return a ListPair version of array, where repeated elements - /// (according to YP.termEqual) are removed. - /// - /// - /// - public static object makeWithoutRepeatedTerms(List array) - { - if (array.Count <= 0) - return Atom.NIL; - - // Start from the end. - object previousTerm = array[array.Count - 1]; - object result = new ListPair(previousTerm, Atom.NIL); - for (int i = array.Count - 2; i >= 0; --i) - { - object term = array[i]; - if (YP.termEqual(term, previousTerm)) - continue; - result = new ListPair(term, result); - previousTerm = term; - } - return result; - } - - public static object make(object element1) - { - return new ListPair(element1, Atom.NIL); - } - - public static object make(object element1, object element2) - { - return new ListPair(element1, new ListPair(element2, Atom.NIL)); - } - - public static object make(object element1, object element2, object element3) - { - return new ListPair(element1, - new ListPair(element2, new ListPair(element3, Atom.NIL))); - } - - /// - /// Return an array of the elements in list or null if it is not - /// a proper list. If list is Atom.NIL, return an array of zero elements. - /// If the list or one of the tails of the list is Variable, raise an instantiation_error. - /// This does not call YP.getValue on each element. - /// - /// - /// - public static object[] toArray(object list) - { - list = YP.getValue(list); - if (list.Equals(Atom.NIL)) - return new object[0]; - - List result = new List(); - object element = list; - while (true) { - if (element == Atom.NIL) - break; - if (element is Variable) - throw new PrologException(Atom.a("instantiation_error"), - "List tail is an unbound variable"); - if (!(element is Functor2 && ((Functor2)element)._name == Atom.DOT)) - // Not a proper list. - return null; - result.Add(((Functor2)element)._arg1); - element = YP.getValue(((Functor2)element)._arg2); - } - - if (result.Count <= 0) - return null; - return result.ToArray(); - } - } -} diff --git a/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/YieldProlog/Parser.cs b/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/YieldProlog/Parser.cs deleted file mode 100644 index d1c060b..0000000 --- a/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/YieldProlog/Parser.cs +++ /dev/null @@ -1,4575 +0,0 @@ -/* - * Copyright (C) 2007-2008, Jeff Thompson - * - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * * Neither the name of the copyright holder nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -using System; -using System.Collections.Generic; - - // disable warning on l1, don't see how we can - // code this differently - #pragma warning disable 0168, 0219, 0162 - -namespace OpenSim.Region.ScriptEngine.DotNetEngine.Compiler.YieldProlog -{ - public class Parser - { - public static IEnumerable read_term2(object Term, object Options) - { - Variable Answer = new Variable(); - Variable Variables = new Variable(); - foreach (bool l1 in read_termOptions(Options, Variables)) - { - foreach (bool l2 in portable_read3(Answer, Variables, new Variable())) - { - foreach (bool l3 in remove_pos(Answer, Term)) - yield return false; - } - } - } - - public static IEnumerable read_term3(object Input, object Term, object Options) - { - Variable SaveInput = new Variable(); - Variable Answer = new Variable(); - Variable Variables = new Variable(); - foreach (bool l1 in read_termOptions(Options, Variables)) - { - foreach (bool l2 in YP.current_input(SaveInput)) - { - try - { - YP.see(Input); - foreach (bool l3 in portable_read3(Answer, Variables, new Variable())) - { - foreach (bool l4 in remove_pos(Answer, Term)) - yield return false; - } - } - finally - { - YP.see(SaveInput); - } - } - } - } - - /// - /// For read_term, check if Options has variable_names(Variables). - /// Otherwise, ignore Options. - /// - /// - /// - /// - private static IEnumerable read_termOptions(object Options, object Variables) - { - Options = YP.getValue(Options); - if (Options is Variable) - throw new PrologException(Atom.a("instantiation_error"), "Options is an unbound variable"); - // First try to match Options = [variable_names(Variables)] - foreach (bool l1 in YP.unify(Options, ListPair.make(new Functor1("variable_names", Variables)))) - { - yield return false; - yield break; - } - // Default: Ignore Options. - yield return false; - } - - public static IEnumerable read1(object Term) - { - return read_term2(Term, Atom.NIL); - } - - public static IEnumerable read2(object Input, object Term) - { - return read_term3(Input, Term, Atom.NIL); - } - - public static IEnumerable formatError(object Output, object Format, object Arguments) - { - // Debug: Simple implementation for now. - YP.write(Format); - YP.write(Arguments); - YP.nl(); - yield return false; - } - - - // Debug: Hand-modify this central predicate to do tail recursion. - public static IEnumerable read_tokens(object arg1, object arg2, object arg3) - { - bool repeat = true; - while (repeat) - { - repeat = false; - { - object C1 = arg1; - object Dict = arg2; - object Tokens = arg3; - Variable C2 = new Variable(); - if (YP.lessThanOrEqual(C1, new ListPair(32, Atom.NIL))) - { - if (YP.greaterThanOrEqual(C1, 0)) - { - foreach (bool l4 in YP.get_code(C2)) - { -#if false - foreach (bool l5 in read_tokens(C2, Dict, Tokens)) - { - yield return false; - } -#endif - arg1 = YP.getValue(C2); - arg2 = YP.getValue(Dict); - arg3 = YP.getValue(Tokens); - repeat = true; - } - } - goto cutIf1; - } - if (YP.greaterThanOrEqual(C1, new ListPair(97, Atom.NIL))) - { - if (YP.lessThanOrEqual(C1, new ListPair(122, Atom.NIL))) - { - foreach (bool l4 in read_identifier(C1, Dict, Tokens)) - { - yield return false; - } - goto cutIf2; - } - } - if (YP.greaterThanOrEqual(C1, new ListPair(65, Atom.NIL))) - { - if (YP.lessThanOrEqual(C1, new ListPair(90, Atom.NIL))) - { - foreach (bool l4 in read_variable(C1, Dict, Tokens)) - { - yield return false; - } - goto cutIf3; - } - } - if (YP.greaterThanOrEqual(C1, new ListPair(48, Atom.NIL))) - { - if (YP.lessThanOrEqual(C1, new ListPair(57, Atom.NIL))) - { - foreach (bool l4 in read_number(C1, Dict, Tokens)) - { - yield return false; - } - goto cutIf4; - } - } - if (YP.lessThan(C1, 127)) - { - foreach (bool l3 in read_special(C1, Dict, Tokens)) - { - yield return false; - } - goto cutIf5; - } - if (YP.lessThanOrEqual(C1, 160)) - { - foreach (bool l3 in YP.get_code(C2)) - { -#if false - foreach (bool l4 in read_tokens(C2, Dict, Tokens)) - { - yield return false; - } -#endif - arg1 = YP.getValue(C2); - arg2 = YP.getValue(Dict); - arg3 = YP.getValue(Tokens); - repeat = true; - } - goto cutIf6; - } - if (YP.greaterThanOrEqual(C1, 223)) - { - if (YP.notEqual(C1, 247)) - { - foreach (bool l4 in read_identifier(C1, Dict, Tokens)) - { - yield return false; - } - goto cutIf7; - } - } - if (YP.greaterThanOrEqual(C1, 192)) - { - if (YP.notEqual(C1, 215)) - { - foreach (bool l4 in read_variable(C1, Dict, Tokens)) - { - yield return false; - } - goto cutIf8; - } - } - if (YP.notEqual(C1, 170)) - { - if (YP.notEqual(C1, 186)) - { - foreach (bool l4 in read_symbol(C1, Dict, Tokens)) - { - yield return false; - } - goto cutIf9; - } - } - foreach (bool l2 in read_identifier(C1, Dict, Tokens)) - { - yield return false; - } - cutIf9: - cutIf8: - cutIf7: - cutIf6: - cutIf5: - cutIf4: - cutIf3: - cutIf2: - cutIf1: - { } - } - } - } - - // Compiler output follows. - - class YPInnerClass { } - // static Type getDeclaringClass() { return typeof(YPInnerClass).DeclaringType; } - - public static IEnumerable parseInput(object TermList) - { - { - Variable TermAndVariables = new Variable(); - FindallAnswers findallAnswers1 = new FindallAnswers(TermAndVariables); - foreach (bool l2 in parseInputHelper(TermAndVariables)) - { - findallAnswers1.add(); - } - foreach (bool l2 in findallAnswers1.result(TermList)) - { - yield return false; - } - } - } - - public static IEnumerable parseInputHelper(object arg1) - { - { - Variable Term = new Variable(); - Variable Variables = new Variable(); - Variable Answer = new Variable(); - Variable x4 = new Variable(); - foreach (bool l2 in YP.unify(arg1, new Functor2("f", Term, Variables))) - { - foreach (bool l3 in YP.repeat()) - { - foreach (bool l4 in portable_read3(Answer, Variables, x4)) - { - foreach (bool l5 in remove_pos(Answer, Term)) - { - if (YP.termEqual(Term, Atom.a("end_of_file"))) - { - yield break; - goto cutIf1; - } - yield return false; - cutIf1: - { } - } - } - } - } - } - } - - public static IEnumerable clear_errors() - { - { - yield return false; - } - } - - public static IEnumerable remove_pos(object arg1, object arg2) - { - { - Variable X = new Variable(); - foreach (bool l2 in YP.unify(arg1, X)) - { - foreach (bool l3 in YP.unify(arg2, X)) - { - if (YP.var(X)) - { - yield return true; - yield break; - } - } - } - } - { - object X = arg2; - Variable _Pos = new Variable(); - Variable _Name = new Variable(); - foreach (bool l2 in YP.unify(arg1, new Functor3("$VAR", _Pos, _Name, X))) - { - if (YP.var(X)) - { - yield return true; - yield break; - } - } - } - { - foreach (bool l2 in YP.unify(arg1, Atom.NIL)) - { - foreach (bool l3 in YP.unify(arg2, Atom.NIL)) - { - yield return true; - yield break; - } - } - } - { - Variable H = new Variable(); - Variable T = new Variable(); - Variable NH = new Variable(); - Variable NT = new Variable(); - foreach (bool l2 in YP.unify(arg1, new ListPair(H, T))) - { - foreach (bool l3 in YP.unify(arg2, new ListPair(NH, NT))) - { - foreach (bool l4 in remove_pos(H, NH)) - { - foreach (bool l5 in remove_pos(T, NT)) - { - yield return false; - } - } - yield break; - } - } - } - { - Variable A = new Variable(); - Variable B = new Variable(); - Variable NA = new Variable(); - Variable NB = new Variable(); - foreach (bool l2 in YP.unify(arg1, new Functor2(",", A, B))) - { - foreach (bool l3 in YP.unify(arg2, new Functor2(",", NA, NB))) - { - foreach (bool l4 in remove_pos(A, NA)) - { - foreach (bool l5 in remove_pos(B, NB)) - { - yield return false; - } - } - yield break; - } - } - } - { - Variable Atom_1 = new Variable(); - Variable _F = new Variable(); - foreach (bool l2 in YP.unify(arg1, Atom_1)) - { - foreach (bool l3 in YP.unify(arg2, Atom_1)) - { - foreach (bool l4 in YP.functor(Atom_1, _F, 0)) - { - yield return false; - } - } - } - } - { - object Term = arg1; - object NewTerm = arg2; - Variable Func = new Variable(); - Variable _Pos = new Variable(); - Variable Args = new Variable(); - Variable NArgs = new Variable(); - if (YP.nonvar(Term)) - { - foreach (bool l3 in YP.univ(Term, new ListPair(Func, new ListPair(_Pos, Args)))) - { - foreach (bool l4 in remove_pos(Args, NArgs)) - { - foreach (bool l5 in YP.univ(NewTerm, new ListPair(Func, NArgs))) - { - yield return false; - } - } - } - } - } - } - - public static IEnumerable portable_read_position(object Term, object PosTerm, object Syntax) - { - { - foreach (bool l2 in portable_read(PosTerm, Syntax)) - { - foreach (bool l3 in remove_pos(PosTerm, Term)) - { - yield return false; - } - } - } - } - - public static IEnumerable portable_read(object Answer, object Syntax) - { - { - Variable Tokens = new Variable(); - Variable ParseTokens = new Variable(); - foreach (bool l2 in read_tokens1(Tokens)) - { - foreach (bool l3 in remove_comments(Tokens, ParseTokens, Syntax)) - { - foreach (bool l4 in parse2(ParseTokens, Answer)) - { - yield return false; - } - } - } - } - } - - public static IEnumerable portable_read3(object Answer, object Variables, object Syntax) - { - { - Variable Tokens = new Variable(); - Variable ParseTokens = new Variable(); - foreach (bool l2 in read_tokens2(Tokens, Variables)) - { - foreach (bool l3 in remove_comments(Tokens, ParseTokens, Syntax)) - { - foreach (bool l4 in parse2(ParseTokens, Answer)) - { - yield return false; - } - } - } - } - } - - public static IEnumerable remove_comments(object arg1, object arg2, object arg3) - { - { - foreach (bool l2 in YP.unify(arg1, Atom.NIL)) - { - foreach (bool l3 in YP.unify(arg2, Atom.NIL)) - { - foreach (bool l4 in YP.unify(arg3, Atom.NIL)) - { - yield return false; - } - } - } - } - { - object Ys = arg2; - Variable S = new Variable(); - Variable E = new Variable(); - Variable Xs = new Variable(); - Variable Zs = new Variable(); - foreach (bool l2 in YP.unify(arg1, new ListPair(new Functor2("comment", S, E), Xs))) - { - foreach (bool l3 in YP.unify(arg3, new ListPair(new Functor2("comment", S, E), Zs))) - { - foreach (bool l4 in remove_comments(Xs, Ys, Zs)) - { - yield return false; - } - yield break; - } - } - } - { - Variable Pos = new Variable(); - Variable Xs = new Variable(); - Variable Ys = new Variable(); - Variable Pos2 = new Variable(); - Variable Zs = new Variable(); - foreach (bool l2 in YP.unify(arg1, new ListPair(new Functor2("/", Atom.a("["), Pos), Xs))) - { - foreach (bool l3 in YP.unify(arg2, new ListPair(Atom.a("["), Ys))) - { - foreach (bool l4 in YP.unify(arg3, new ListPair(new Functor2("list", Pos, Pos2), Zs))) - { - foreach (bool l5 in YP.unify(Pos2, YP.add(Pos, 1))) - { - foreach (bool l6 in remove_comments(Xs, Ys, Zs)) - { - yield return false; - } - } - yield break; - } - } - } - } - { - Variable Pos = new Variable(); - Variable Xs = new Variable(); - Variable Ys = new Variable(); - Variable Pos2 = new Variable(); - Variable Zs = new Variable(); - foreach (bool l2 in YP.unify(arg1, new ListPair(new Functor2("/", Atom.a("]"), Pos), Xs))) - { - foreach (bool l3 in YP.unify(arg2, new ListPair(Atom.a("]"), Ys))) - { - foreach (bool l4 in YP.unify(arg3, new ListPair(new Functor2("list", Pos, Pos2), Zs))) - { - foreach (bool l5 in YP.unify(Pos2, YP.add(Pos, 1))) - { - foreach (bool l6 in remove_comments(Xs, Ys, Zs)) - { - yield return false; - } - } - yield break; - } - } - } - } - { - object Zs = arg3; - Variable Token = new Variable(); - Variable Xs = new Variable(); - Variable Ys = new Variable(); - foreach (bool l2 in YP.unify(arg1, new ListPair(Token, Xs))) - { - foreach (bool l3 in YP.unify(arg2, new ListPair(Token, Ys))) - { - foreach (bool l4 in remove_comments(Xs, Ys, Zs)) - { - yield return false; - } - } - } - } - } - - public static IEnumerable expect(object Token, object arg2, object arg3) - { - { - object Rest = arg3; - foreach (bool l2 in YP.unify(arg2, new ListPair(Token, Rest))) - { - yield return true; - yield break; - } - } - { - object S0 = arg2; - object x3 = arg3; - foreach (bool l2 in syntax_error(ListPair.make(new object[] { Token, Atom.a("or"), Atom.a("operator"), Atom.a("expected") }), S0)) - { - yield return false; - } - } - } - - public static IEnumerable parse2(object Tokens, object Answer) - { - { - Variable Term = new Variable(); - Variable LeftOver = new Variable(); - foreach (bool l2 in clear_errors()) - { - foreach (bool l3 in parse(Tokens, 1200, Term, LeftOver)) - { - foreach (bool l4 in all_read(LeftOver)) - { - foreach (bool l5 in YP.unify(Answer, Term)) - { - yield return false; - } - yield break; - } - } - foreach (bool l3 in syntax_error(Tokens)) - { - yield return false; - } - } - } - } - - public static IEnumerable all_read(object arg1) - { - { - foreach (bool l2 in YP.unify(arg1, Atom.NIL)) - { - yield return false; - } - } - { - Variable Token = new Variable(); - Variable S = new Variable(); - foreach (bool l2 in YP.unify(arg1, new ListPair(Token, S))) - { - foreach (bool l3 in syntax_error(ListPair.make(new object[] { Atom.a("operator"), Atom.a("expected"), Atom.a("after"), Atom.a("expression") }), new ListPair(Token, S))) - { - yield return false; - } - } - } - } - - public static IEnumerable parse(object arg1, object arg2, object arg3, object arg4) - { - { - object x1 = arg2; - object x2 = arg3; - object x3 = arg4; - foreach (bool l2 in YP.unify(arg1, Atom.NIL)) - { - foreach (bool l3 in syntax_error(new ListPair(Atom.a("expression"), new ListPair(Atom.a("expected"), Atom.NIL)), Atom.NIL)) - { - yield return false; - } - } - } - { - object Precedence = arg2; - object Term = arg3; - object LeftOver = arg4; - Variable Token = new Variable(); - Variable RestTokens = new Variable(); - foreach (bool l2 in YP.unify(arg1, new ListPair(Token, RestTokens))) - { - foreach (bool l3 in parse5(Token, RestTokens, Precedence, Term, LeftOver)) - { - yield return false; - } - } - } - } - - public static IEnumerable parse5(object arg1, object arg2, object arg3, object arg4, object arg5) - { - { - object S0 = arg2; - object x2 = arg3; - object x3 = arg4; - object x4 = arg5; - foreach (bool l2 in YP.unify(arg1, Atom.a("}"))) - { - foreach (bool l3 in cannot_start(Atom.a("}"), S0)) - { - yield return false; - } - } - } - { - object S0 = arg2; - object x2 = arg3; - object x3 = arg4; - object x4 = arg5; - foreach (bool l2 in YP.unify(arg1, Atom.a("]"))) - { - foreach (bool l3 in cannot_start(Atom.a("]"), S0)) - { - yield return false; - } - } - } - { - object S0 = arg2; - object x2 = arg3; - object x3 = arg4; - object x4 = arg5; - foreach (bool l2 in YP.unify(arg1, Atom.a(")"))) - { - foreach (bool l3 in cannot_start(Atom.a(")"), S0)) - { - yield return false; - } - } - } - { - object S0 = arg2; - object x2 = arg3; - object x3 = arg4; - object x4 = arg5; - foreach (bool l2 in YP.unify(arg1, Atom.a(","))) - { - foreach (bool l3 in cannot_start(Atom.a(","), S0)) - { - yield return false; - } - } - } - { - object S0 = arg2; - object x2 = arg3; - object x3 = arg4; - object x4 = arg5; - foreach (bool l2 in YP.unify(arg1, Atom.a("|"))) - { - foreach (bool l3 in cannot_start(Atom.a("|"), S0)) - { - yield return false; - } - } - } - { - object S0 = arg2; - object Precedence = arg3; - object Answer = arg4; - object S = arg5; - Variable Codes = new Variable(); - Variable Term = new Variable(); - Variable A = new Variable(); - foreach (bool l2 in YP.unify(arg1, new Functor1("string", Codes))) - { - foreach (bool l3 in YP.current_prolog_flag(Atom.a("double_quotes"), Atom.a("atom"))) - { - foreach (bool l4 in YP.atom_codes(Term, Codes)) - { - foreach (bool l5 in exprtl0(S0, Term, Precedence, Answer, S)) - { - yield return false; - } - } - goto cutIf1; - } - foreach (bool l3 in YP.current_prolog_flag(Atom.a("double_quotes"), Atom.a("chars"))) - { - foreach (bool l4 in YP.atom_codes(A, Codes)) - { - foreach (bool l5 in YP.atom_chars(A, Term)) - { - foreach (bool l6 in exprtl0(S0, Term, Precedence, Answer, S)) - { - yield return false; - } - } - } - goto cutIf2; - } - foreach (bool l3 in YP.unify(Term, Codes)) - { - foreach (bool l4 in exprtl0(S0, Term, Precedence, Answer, S)) - { - yield return false; - } - } - cutIf2: - cutIf1: - { } - } - } - { - object S0 = arg2; - object Precedence = arg3; - object Answer = arg4; - object S = arg5; - Variable Number = new Variable(); - foreach (bool l2 in YP.unify(arg1, new Functor1("number", Number))) - { - foreach (bool l3 in exprtl0(S0, Number, Precedence, Answer, S)) - { - yield return false; - } - } - } - { - object Precedence = arg3; - object Answer = arg4; - object S = arg5; - Variable S1 = new Variable(); - foreach (bool l2 in YP.unify(arg1, Atom.a("["))) - { - foreach (bool l3 in YP.unify(arg2, new ListPair(Atom.a("]"), S1))) - { - foreach (bool l4 in read_atom(new Functor2("/", Atom.NIL, 0), S1, Precedence, Answer, S)) - { - yield return false; - } - yield break; - } - } - } - { - object S1 = arg2; - object Precedence = arg3; - object Answer = arg4; - object S = arg5; - Variable Arg1 = new Variable(); - Variable S2 = new Variable(); - Variable RestArgs = new Variable(); - Variable S3 = new Variable(); - foreach (bool l2 in YP.unify(arg1, Atom.a("["))) - { - foreach (bool l3 in parse(S1, 999, Arg1, S2)) - { - foreach (bool l4 in read_list(S2, RestArgs, S3)) - { - foreach (bool l5 in exprtl0(S3, new ListPair(Arg1, RestArgs), Precedence, Answer, S)) - { - yield return false; - } - yield break; - } - } - } - } - { - object S1 = arg2; - object Precedence = arg3; - object Answer = arg4; - object S = arg5; - Variable Term = new Variable(); - Variable S2 = new Variable(); - Variable S3 = new Variable(); - foreach (bool l2 in YP.unify(arg1, Atom.a("("))) - { - foreach (bool l3 in parse(S1, 1200, Term, S2)) - { - foreach (bool l4 in expect(Atom.a(")"), S2, S3)) - { - foreach (bool l5 in exprtl0(S3, Term, Precedence, Answer, S)) - { - yield return false; - } - yield break; - } - } - } - } - { - object S1 = arg2; - object Precedence = arg3; - object Answer = arg4; - object S = arg5; - Variable Term = new Variable(); - Variable S2 = new Variable(); - Variable S3 = new Variable(); - foreach (bool l2 in YP.unify(arg1, Atom.a(" ("))) - { - foreach (bool l3 in parse(S1, 1200, Term, S2)) - { - foreach (bool l4 in expect(Atom.a(")"), S2, S3)) - { - foreach (bool l5 in exprtl0(S3, Term, Precedence, Answer, S)) - { - yield return false; - } - yield break; - } - } - } - } - { - object Precedence = arg3; - object Answer = arg4; - object S = arg5; - Variable _Pos = new Variable(); - Variable S1 = new Variable(); - foreach (bool l2 in YP.unify(arg1, new Functor2("/", Atom.a("{"), _Pos))) - { - foreach (bool l3 in YP.unify(arg2, new ListPair(Atom.a("}"), S1))) - { - foreach (bool l4 in read_atom(Atom.a("{}"), S1, Precedence, Answer, S)) - { - yield return false; - } - yield break; - } - } - } - { - object S1 = arg2; - object Precedence = arg3; - object Answer = arg4; - object S = arg5; - Variable Pos = new Variable(); - Variable Term = new Variable(); - Variable S2 = new Variable(); - Variable S3 = new Variable(); - foreach (bool l2 in YP.unify(arg1, new Functor2("/", Atom.a("{"), Pos))) - { - foreach (bool l3 in parse(S1, 1200, Term, S2)) - { - foreach (bool l4 in expect(Atom.a("}"), S2, S3)) - { - foreach (bool l5 in exprtl0(S3, new Functor2("{}", Pos, Term), Precedence, Answer, S)) - { - yield return false; - } - yield break; - } - } - } - } - { - object Precedence = arg3; - object Answer = arg4; - object S = arg5; - Variable Variable_1 = new Variable(); - Variable Name = new Variable(); - Variable Pos = new Variable(); - Variable S1 = new Variable(); - Variable Arg1 = new Variable(); - Variable S2 = new Variable(); - Variable RestArgs = new Variable(); - Variable S3 = new Variable(); - Variable Term = new Variable(); - foreach (bool l2 in YP.unify(arg1, new Functor3("var", Variable_1, Name, Pos))) - { - foreach (bool l3 in YP.unify(arg2, new ListPair(Atom.a("("), S1))) - { - foreach (bool l4 in parse(S1, 999, Arg1, S2)) - { - foreach (bool l5 in read_args(S2, RestArgs, S3)) - { - foreach (bool l6 in YP.univ(Term, new ListPair(Atom.a("call"), new ListPair(new Functor3("$VAR", Pos, Name, Variable_1), new ListPair(Arg1, RestArgs))))) - { - foreach (bool l7 in exprtl0(S3, Term, Precedence, Answer, S)) - { - yield return false; - } - } - yield break; - } - } - yield break; - } - } - } - { - object S0 = arg2; - object Precedence = arg3; - object Answer = arg4; - object S = arg5; - Variable Variable_1 = new Variable(); - Variable Name = new Variable(); - Variable Pos = new Variable(); - foreach (bool l2 in YP.unify(arg1, new Functor3("var", Variable_1, Name, Pos))) - { - foreach (bool l3 in exprtl0(S0, new Functor3("$VAR", Pos, Name, Variable_1), Precedence, Answer, S)) - { - yield return false; - } - } - } - { - object S0 = arg2; - object Precedence = arg3; - object Answer = arg4; - object S = arg5; - Variable Atom_1 = new Variable(); - Variable P = new Variable(); - foreach (bool l2 in YP.unify(arg1, new Functor2("atom", Atom_1, P))) - { - foreach (bool l3 in read_atom(new Functor2("/", Atom_1, P), S0, Precedence, Answer, S)) - { - yield return false; - } - } - } - } - - public static IEnumerable read_atom(object arg1, object arg2, object Precedence, object Answer, object S) - { - { - Variable _Pos = new Variable(); - Variable Number = new Variable(); - Variable S1 = new Variable(); - Variable Negative = new Variable(); - foreach (bool l2 in YP.unify(arg1, new Functor2("/", Atom.a("-"), _Pos))) - { - foreach (bool l3 in YP.unify(arg2, new ListPair(new Functor1("number", Number), S1))) - { - foreach (bool l4 in YP.unify(Negative, YP.negate(Number))) - { - foreach (bool l5 in exprtl0(S1, Negative, Precedence, Answer, S)) - { - yield return false; - } - } - yield break; - } - } - } - { - Variable Functor_1 = new Variable(); - Variable Pos = new Variable(); - Variable S1 = new Variable(); - Variable Arg1 = new Variable(); - Variable S2 = new Variable(); - Variable RestArgs = new Variable(); - Variable S3 = new Variable(); - Variable Term = new Variable(); - foreach (bool l2 in YP.unify(arg1, new Functor2("/", Functor_1, Pos))) - { - foreach (bool l3 in YP.unify(arg2, new ListPair(Atom.a("("), S1))) - { - foreach (bool l4 in parse(S1, 999, Arg1, S2)) - { - foreach (bool l5 in read_args(S2, RestArgs, S3)) - { - foreach (bool l6 in YP.univ(Term, new ListPair(Functor_1, new ListPair(Pos, new ListPair(Arg1, RestArgs))))) - { - foreach (bool l7 in exprtl0(S3, Term, Precedence, Answer, S)) - { - yield return false; - } - } - yield break; - } - } - yield break; - } - } - } - { - object S0 = arg2; - Variable Op = new Variable(); - Variable Pos = new Variable(); - Variable Oprec = new Variable(); - Variable Aprec = new Variable(); - Variable Flag = new Variable(); - Variable Term = new Variable(); - Variable Arg = new Variable(); - Variable S1 = new Variable(); - foreach (bool l2 in YP.unify(arg1, new Functor2("/", Op, Pos))) - { - foreach (bool l3 in prefixop(Op, Oprec, Aprec)) - { - foreach (bool l4 in possible_right_operand(S0, Flag)) - { - if (YP.lessThan(Flag, 0)) - { - foreach (bool l6 in YP.univ(Term, new ListPair(Op, new ListPair(Pos, Atom.NIL)))) - { - foreach (bool l7 in exprtl0(S0, Term, Precedence, Answer, S)) - { - yield return false; - } - } - goto cutIf1; - } - if (YP.greaterThan(Oprec, Precedence)) - { - foreach (bool l6 in syntax_error(ListPair.make(new object[] { Atom.a("prefix"), Atom.a("operator"), Op, Atom.a("in"), Atom.a("context"), Atom.a("with"), Atom.a("precedence"), Precedence }), S0)) - { - yield return false; - } - goto cutIf2; - } - if (YP.greaterThan(Flag, 0)) - { - foreach (bool l6 in parse(S0, Aprec, Arg, S1)) - { - foreach (bool l7 in YP.univ(Term, ListPair.make(new object[] { Op, Pos, Arg }))) - { - foreach (bool l8 in exprtl(S1, Oprec, Term, Precedence, Answer, S)) - { - yield return false; - } - } - yield break; - } - goto cutIf3; - } - foreach (bool l5 in peepop(S0, S1)) - { - foreach (bool l6 in prefix_is_atom(S1, Oprec)) - { - foreach (bool l7 in exprtl(S1, Oprec, new Functor2("/", Op, Pos), Precedence, Answer, S)) - { - yield return false; - } - } - } - foreach (bool l5 in parse(S0, Aprec, Arg, S1)) - { - foreach (bool l6 in YP.univ(Term, ListPair.make(new object[] { Op, Pos, Arg }))) - { - foreach (bool l7 in exprtl(S1, Oprec, Term, Precedence, Answer, S)) - { - yield return false; - } - } - yield break; - } - cutIf3: - cutIf2: - cutIf1: - { } - } - yield break; - } - } - } - { - object S0 = arg2; - Variable Atom_1 = new Variable(); - Variable Pos = new Variable(); - Variable Term = new Variable(); - foreach (bool l2 in YP.unify(arg1, new Functor2("/", Atom_1, Pos))) - { - foreach (bool l3 in YP.univ(Term, new ListPair(Atom_1, new ListPair(Pos, Atom.NIL)))) - { - foreach (bool l4 in exprtl0(S0, Term, Precedence, Answer, S)) - { - yield return false; - } - } - } - } - } - - public static IEnumerable cannot_start(object Token, object S0) - { - { - foreach (bool l2 in syntax_error(ListPair.make(new object[] { Token, Atom.a("cannot"), Atom.a("start"), Atom.a("an"), Atom.a("expression") }), S0)) - { - yield return false; - } - } - } - - public static IEnumerable read_args(object arg1, object arg2, object arg3) - { - { - object S = arg3; - Variable S1 = new Variable(); - Variable Term = new Variable(); - Variable Rest = new Variable(); - Variable S2 = new Variable(); - foreach (bool l2 in YP.unify(arg1, new ListPair(Atom.a(","), S1))) - { - foreach (bool l3 in YP.unify(arg2, new ListPair(Term, Rest))) - { - foreach (bool l4 in parse(S1, 999, Term, S2)) - { - foreach (bool l5 in read_args(S2, Rest, S)) - { - yield return false; - } - yield break; - } - yield break; - } - } - } - { - object S = arg3; - foreach (bool l2 in YP.unify(arg1, new ListPair(Atom.a(")"), S))) - { - foreach (bool l3 in YP.unify(arg2, Atom.NIL)) - { - yield return true; - yield break; - } - } - } - { - object S = arg1; - object x2 = arg2; - object x3 = arg3; - foreach (bool l2 in syntax_error(ListPair.make(new object[] { Atom.a(", or )"), Atom.a("expected"), Atom.a("in"), Atom.a("arguments") }), S)) - { - yield return false; - } - } - } - - public static IEnumerable read_list(object arg1, object arg2, object arg3) - { - { - object x1 = arg2; - object x2 = arg3; - foreach (bool l2 in YP.unify(arg1, Atom.NIL)) - { - foreach (bool l3 in syntax_error(ListPair.make(new object[] { Atom.a(", | or ]"), Atom.a("expected"), Atom.a("in"), Atom.a("list") }), Atom.NIL)) - { - yield return false; - } - } - } - { - object Rest = arg2; - object S = arg3; - Variable Token = new Variable(); - Variable S1 = new Variable(); - foreach (bool l2 in YP.unify(arg1, new ListPair(Token, S1))) - { - foreach (bool l3 in read_list4(Token, S1, Rest, S)) - { - yield return false; - } - } - } - } - - public static IEnumerable read_list4(object arg1, object arg2, object arg3, object arg4) - { - { - object S1 = arg2; - object S = arg4; - Variable Term = new Variable(); - Variable Rest = new Variable(); - Variable S2 = new Variable(); - foreach (bool l2 in YP.unify(arg1, Atom.a(","))) - { - foreach (bool l3 in YP.unify(arg3, new ListPair(Term, Rest))) - { - foreach (bool l4 in parse(S1, 999, Term, S2)) - { - foreach (bool l5 in read_list(S2, Rest, S)) - { - yield return false; - } - yield break; - } - yield break; - } - } - } - { - object S1 = arg2; - object Rest = arg3; - object S = arg4; - Variable S2 = new Variable(); - foreach (bool l2 in YP.unify(arg1, Atom.a("|"))) - { - foreach (bool l3 in parse(S1, 999, Rest, S2)) - { - foreach (bool l4 in expect(Atom.a("]"), S2, S)) - { - yield return false; - } - yield break; - } - yield break; - } - } - { - Variable S1 = new Variable(); - foreach (bool l2 in YP.unify(arg1, Atom.a("]"))) - { - foreach (bool l3 in YP.unify(arg2, S1)) - { - foreach (bool l4 in YP.unify(arg3, Atom.NIL)) - { - foreach (bool l5 in YP.unify(arg4, S1)) - { - yield return true; - yield break; - } - } - } - } - } - { - object Token = arg1; - object S1 = arg2; - object x3 = arg3; - object x4 = arg4; - foreach (bool l2 in syntax_error(ListPair.make(new object[] { Atom.a(", | or ]"), Atom.a("expected"), Atom.a("in"), Atom.a("list") }), new ListPair(Token, S1))) - { - yield return false; - } - } - } - - public static IEnumerable possible_right_operand(object arg1, object arg2) - { - { - foreach (bool l2 in YP.unify(arg1, Atom.NIL)) - { - foreach (bool l3 in YP.unify(arg2, -1)) - { - yield return false; - } - } - } - { - object Flag = arg2; - Variable H = new Variable(); - Variable T = new Variable(); - foreach (bool l2 in YP.unify(arg1, new ListPair(H, T))) - { - foreach (bool l3 in possible_right_operand3(H, Flag, T)) - { - yield return false; - } - } - } - } - - public static IEnumerable possible_right_operand3(object arg1, object arg2, object arg3) - { - { - object x4 = arg3; - Variable x1 = new Variable(); - Variable x2 = new Variable(); - Variable x3 = new Variable(); - foreach (bool l2 in YP.unify(arg1, new Functor3("var", x1, x2, x3))) - { - foreach (bool l3 in YP.unify(arg2, 1)) - { - yield return false; - } - } - } - { - object x2 = arg3; - Variable x1 = new Variable(); - foreach (bool l2 in YP.unify(arg1, new Functor1("number", x1))) - { - foreach (bool l3 in YP.unify(arg2, 1)) - { - yield return false; - } - } - } - { - object x2 = arg3; - Variable x1 = new Variable(); - foreach (bool l2 in YP.unify(arg1, new Functor1("string", x1))) - { - foreach (bool l3 in YP.unify(arg2, 1)) - { - yield return false; - } - } - } - { - object x1 = arg3; - foreach (bool l2 in YP.unify(arg1, Atom.a(" ("))) - { - foreach (bool l3 in YP.unify(arg2, 1)) - { - yield return false; - } - } - } - { - object x1 = arg3; - foreach (bool l2 in YP.unify(arg1, Atom.a("("))) - { - foreach (bool l3 in YP.unify(arg2, 0)) - { - yield return false; - } - } - } - { - object x1 = arg3; - foreach (bool l2 in YP.unify(arg1, Atom.a(")"))) - { - foreach (bool l3 in YP.unify(arg2, -1)) - { - yield return false; - } - } - } - { - Variable x1 = new Variable(); - foreach (bool l2 in YP.unify(arg1, Atom.a("["))) - { - foreach (bool l3 in YP.unify(arg2, 0)) - { - foreach (bool l4 in YP.unify(arg3, new ListPair(Atom.a("]"), x1))) - { - yield return true; - yield break; - } - } - } - } - { - object x1 = arg3; - foreach (bool l2 in YP.unify(arg1, Atom.a("["))) - { - foreach (bool l3 in YP.unify(arg2, 1)) - { - yield return false; - } - } - } - { - object x1 = arg3; - foreach (bool l2 in YP.unify(arg1, Atom.a("]"))) - { - foreach (bool l3 in YP.unify(arg2, -1)) - { - yield return false; - } - } - } - { - Variable x1 = new Variable(); - foreach (bool l2 in YP.unify(arg1, Atom.a("{"))) - { - foreach (bool l3 in YP.unify(arg2, 0)) - { - foreach (bool l4 in YP.unify(arg3, new ListPair(Atom.a("}"), x1))) - { - yield return true; - yield break; - } - } - } - } - { - object x1 = arg3; - foreach (bool l2 in YP.unify(arg1, Atom.a("{"))) - { - foreach (bool l3 in YP.unify(arg2, 1)) - { - yield return false; - } - } - } - { - object x1 = arg3; - foreach (bool l2 in YP.unify(arg1, Atom.a("}"))) - { - foreach (bool l3 in YP.unify(arg2, -1)) - { - yield return false; - } - } - } - { - object x1 = arg3; - foreach (bool l2 in YP.unify(arg1, Atom.a(","))) - { - foreach (bool l3 in YP.unify(arg2, -1)) - { - yield return false; - } - } - } - { - object x1 = arg3; - foreach (bool l2 in YP.unify(arg1, Atom.a("|"))) - { - foreach (bool l3 in YP.unify(arg2, -1)) - { - yield return false; - } - } - } - { - object x3 = arg3; - Variable x1 = new Variable(); - Variable x2 = new Variable(); - foreach (bool l2 in YP.unify(arg1, new Functor2("atom", x1, x2))) - { - foreach (bool l3 in YP.unify(arg2, 0)) - { - yield return false; - } - } - } - } - - public static IEnumerable peepop(object arg1, object arg2) - { - { - Variable F = new Variable(); - Variable Pos = new Variable(); - Variable S1 = new Variable(); - foreach (bool l2 in YP.unify(arg1, new ListPair(new Functor2("atom", F, Pos), new ListPair(Atom.a("("), S1)))) - { - foreach (bool l3 in YP.unify(arg2, new ListPair(new Functor2("atom", F, Pos), new ListPair(Atom.a("("), S1)))) - { - yield return true; - yield break; - } - } - } - { - Variable F = new Variable(); - Variable Pos = new Variable(); - Variable S1 = new Variable(); - Variable L = new Variable(); - Variable P = new Variable(); - Variable R = new Variable(); - foreach (bool l2 in YP.unify(arg1, new ListPair(new Functor2("atom", F, Pos), S1))) - { - foreach (bool l3 in YP.unify(arg2, new ListPair(new Functor(Atom.a("infixop", Atom.a("")), new object[] { new Functor2("/", F, Pos), L, P, R }), S1))) - { - foreach (bool l4 in infixop(F, L, P, R)) - { - yield return false; - } - } - } - } - { - Variable F = new Variable(); - Variable Pos = new Variable(); - Variable S1 = new Variable(); - Variable L = new Variable(); - Variable P = new Variable(); - foreach (bool l2 in YP.unify(arg1, new ListPair(new Functor2("atom", F, Pos), S1))) - { - foreach (bool l3 in YP.unify(arg2, new ListPair(new Functor3(Atom.a("postfixop", Atom.a("")), new Functor2("/", F, Pos), L, P), S1))) - { - foreach (bool l4 in postfixop(F, L, P)) - { - yield return false; - } - } - } - } - { - Variable S0 = new Variable(); - foreach (bool l2 in YP.unify(arg1, S0)) - { - foreach (bool l3 in YP.unify(arg2, S0)) - { - yield return false; - } - } - } - } - - public static IEnumerable prefix_is_atom(object arg1, object arg2) - { - { - object Precedence = arg2; - Variable Token = new Variable(); - Variable x2 = new Variable(); - foreach (bool l2 in YP.unify(arg1, new ListPair(Token, x2))) - { - foreach (bool l3 in prefix_is_atom(Token, Precedence)) - { - yield return false; - } - } - } - { - object P = arg2; - Variable x1 = new Variable(); - Variable L = new Variable(); - Variable x3 = new Variable(); - Variable x4 = new Variable(); - foreach (bool l2 in YP.unify(arg1, new Functor(Atom.a("infixop", Atom.a("")), new object[] { x1, L, x3, x4 }))) - { - if (YP.greaterThanOrEqual(L, P)) - { - yield return false; - } - } - } - { - object P = arg2; - Variable x1 = new Variable(); - Variable L = new Variable(); - Variable x3 = new Variable(); - foreach (bool l2 in YP.unify(arg1, new Functor3(Atom.a("postfixop", Atom.a("")), x1, L, x3))) - { - if (YP.greaterThanOrEqual(L, P)) - { - yield return false; - } - } - } - { - object x1 = arg2; - foreach (bool l2 in YP.unify(arg1, Atom.a(")"))) - { - yield return false; - } - } - { - object x1 = arg2; - foreach (bool l2 in YP.unify(arg1, Atom.a("]"))) - { - yield return false; - } - } - { - object x1 = arg2; - foreach (bool l2 in YP.unify(arg1, Atom.a("}"))) - { - yield return false; - } - } - { - object P = arg2; - foreach (bool l2 in YP.unify(arg1, Atom.a("|"))) - { - if (YP.greaterThanOrEqual(1100, P)) - { - yield return false; - } - } - } - { - object P = arg2; - foreach (bool l2 in YP.unify(arg1, Atom.a(","))) - { - if (YP.greaterThanOrEqual(1000, P)) - { - yield return false; - } - } - } - { - object x1 = arg2; - foreach (bool l2 in YP.unify(arg1, Atom.NIL)) - { - yield return false; - } - } - } - - public static IEnumerable exprtl0(object arg1, object arg2, object arg3, object arg4, object arg5) - { - { - object x2 = arg3; - Variable Term = new Variable(); - foreach (bool l2 in YP.unify(arg1, Atom.NIL)) - { - foreach (bool l3 in YP.unify(arg2, Term)) - { - foreach (bool l4 in YP.unify(arg4, Term)) - { - foreach (bool l5 in YP.unify(arg5, Atom.NIL)) - { - yield return false; - } - } - } - } - } - { - object Term = arg2; - object Precedence = arg3; - object Answer = arg4; - object S = arg5; - Variable Token = new Variable(); - Variable S1 = new Variable(); - foreach (bool l2 in YP.unify(arg1, new ListPair(Token, S1))) - { - foreach (bool l3 in exprtl0_6(Token, Term, Precedence, Answer, S, S1)) - { - yield return false; - } - } - } - } - - public static IEnumerable exprtl0_6(object arg1, object arg2, object arg3, object arg4, object arg5, object arg6) - { - { - object x2 = arg3; - object S1 = arg6; - Variable Term = new Variable(); - foreach (bool l2 in YP.unify(arg1, Atom.a("}"))) - { - foreach (bool l3 in YP.unify(arg2, Term)) - { - foreach (bool l4 in YP.unify(arg4, Term)) - { - foreach (bool l5 in YP.unify(arg5, new ListPair(Atom.a("}"), S1))) - { - yield return false; - } - } - } - } - } - { - object x2 = arg3; - object S1 = arg6; - Variable Term = new Variable(); - foreach (bool l2 in YP.unify(arg1, Atom.a("]"))) - { - foreach (bool l3 in YP.unify(arg2, Term)) - { - foreach (bool l4 in YP.unify(arg4, Term)) - { - foreach (bool l5 in YP.unify(arg5, new ListPair(Atom.a("]"), S1))) - { - yield return false; - } - } - } - } - } - { - object x2 = arg3; - object S1 = arg6; - Variable Term = new Variable(); - foreach (bool l2 in YP.unify(arg1, Atom.a(")"))) - { - foreach (bool l3 in YP.unify(arg2, Term)) - { - foreach (bool l4 in YP.unify(arg4, Term)) - { - foreach (bool l5 in YP.unify(arg5, new ListPair(Atom.a(")"), S1))) - { - yield return false; - } - } - } - } - } - { - object Term = arg2; - object Precedence = arg3; - object Answer = arg4; - object S = arg5; - object S1 = arg6; - Variable Next = new Variable(); - Variable S2 = new Variable(); - foreach (bool l2 in YP.unify(arg1, Atom.a(","))) - { - if (YP.greaterThanOrEqual(Precedence, 1000)) - { - foreach (bool l4 in parse(S1, 1000, Next, S2)) - { - foreach (bool l5 in exprtl(S2, 1000, new Functor2(",", Term, Next), Precedence, Answer, S)) - { - yield return false; - } - yield break; - } - goto cutIf1; - } - foreach (bool l3 in YP.unify(Answer, Term)) - { - foreach (bool l4 in YP.unify(S, new ListPair(Atom.a(","), S1))) - { - yield return false; - } - } - cutIf1: - { } - } - } - { - object Term = arg2; - object Precedence = arg3; - object Answer = arg4; - object S = arg5; - object S1 = arg6; - Variable Next = new Variable(); - Variable S2 = new Variable(); - foreach (bool l2 in YP.unify(arg1, Atom.a("|"))) - { - if (YP.greaterThanOrEqual(Precedence, 1100)) - { - foreach (bool l4 in parse(S1, 1100, Next, S2)) - { - foreach (bool l5 in exprtl(S2, 1100, new Functor2(";", Term, Next), Precedence, Answer, S)) - { - yield return false; - } - yield break; - } - goto cutIf2; - } - foreach (bool l3 in YP.unify(Answer, Term)) - { - foreach (bool l4 in YP.unify(S, new ListPair(Atom.a("|"), S1))) - { - yield return false; - } - } - cutIf2: - { } - } - } - { - object x2 = arg2; - object x3 = arg3; - object x4 = arg4; - object x5 = arg5; - object S1 = arg6; - Variable S = new Variable(); - foreach (bool l2 in YP.unify(arg1, new Functor1("string", S))) - { - foreach (bool l3 in cannot_follow(Atom.a("chars"), new Functor1("string", S), S1)) - { - yield return false; - } - } - } - { - object x2 = arg2; - object x3 = arg3; - object x4 = arg4; - object x5 = arg5; - object S1 = arg6; - Variable N = new Variable(); - foreach (bool l2 in YP.unify(arg1, new Functor1("number", N))) - { - foreach (bool l3 in cannot_follow(Atom.a("number"), new Functor1("number", N), S1)) - { - yield return false; - } - } - } - { - object Term = arg2; - object Precedence = arg3; - object Answer = arg4; - object S = arg5; - Variable S1 = new Variable(); - foreach (bool l2 in YP.unify(arg1, Atom.a("{"))) - { - foreach (bool l3 in YP.unify(arg6, new ListPair(Atom.a("}"), S1))) - { - foreach (bool l4 in exprtl0_atom(Atom.a("{}"), Term, Precedence, Answer, S, S1)) - { - yield return false; - } - yield break; - } - } - } - { - object x1 = arg2; - object x2 = arg3; - object x3 = arg4; - object x4 = arg5; - object S1 = arg6; - foreach (bool l2 in YP.unify(arg1, Atom.a("{"))) - { - foreach (bool l3 in cannot_follow(Atom.a("brace"), Atom.a("{"), S1)) - { - yield return false; - } - } - } - { - object Term = arg2; - object Precedence = arg3; - object Answer = arg4; - object S = arg5; - Variable S1 = new Variable(); - foreach (bool l2 in YP.unify(arg1, Atom.a("["))) - { - foreach (bool l3 in YP.unify(arg6, new ListPair(Atom.a("]"), S1))) - { - foreach (bool l4 in exprtl0_atom(Atom.NIL, Term, Precedence, Answer, S, S1)) - { - yield return false; - } - yield break; - } - } - } - { - object x1 = arg2; - object x2 = arg3; - object x3 = arg4; - object x4 = arg5; - object S1 = arg6; - foreach (bool l2 in YP.unify(arg1, Atom.a("["))) - { - foreach (bool l3 in cannot_follow(Atom.a("bracket"), Atom.a("["), S1)) - { - yield return false; - } - } - } - { - object x1 = arg2; - object x2 = arg3; - object x3 = arg4; - object x4 = arg5; - object S1 = arg6; - foreach (bool l2 in YP.unify(arg1, Atom.a("("))) - { - foreach (bool l3 in cannot_follow(Atom.a("parenthesis"), Atom.a("("), S1)) - { - yield return false; - } - } - } - { - object x1 = arg2; - object x2 = arg3; - object x3 = arg4; - object x4 = arg5; - object S1 = arg6; - foreach (bool l2 in YP.unify(arg1, Atom.a(" ("))) - { - foreach (bool l3 in cannot_follow(Atom.a("parenthesis"), Atom.a("("), S1)) - { - yield return false; - } - } - } - { - object x4 = arg2; - object x5 = arg3; - object x6 = arg4; - object x7 = arg5; - object S1 = arg6; - Variable A = new Variable(); - Variable B = new Variable(); - Variable P = new Variable(); - foreach (bool l2 in YP.unify(arg1, new Functor3("var", A, B, P))) - { - foreach (bool l3 in cannot_follow(Atom.a("variable"), new Functor3("var", A, B, P), S1)) - { - yield return false; - } - } - } - { - object Term = arg2; - object Precedence = arg3; - object Answer = arg4; - object S = arg5; - object S1 = arg6; - Variable F = new Variable(); - Variable P = new Variable(); - foreach (bool l2 in YP.unify(arg1, new Functor2("atom", F, P))) - { - foreach (bool l3 in exprtl0_atom(new Functor2("/", F, P), Term, Precedence, Answer, S, S1)) - { - yield return false; - } - } - } - } - - public static IEnumerable exprtl0_atom(object arg1, object arg2, object arg3, object arg4, object arg5, object S1) - { - { - object Term = arg2; - object Precedence = arg3; - object Answer = arg4; - object S = arg5; - Variable F = new Variable(); - Variable Pos = new Variable(); - Variable L1 = new Variable(); - Variable O1 = new Variable(); - Variable R1 = new Variable(); - Variable L2 = new Variable(); - Variable O2 = new Variable(); - foreach (bool l2 in YP.unify(arg1, new Functor2("/", F, Pos))) - { - foreach (bool l3 in ambigop(F, Precedence, L1, O1, R1, L2, O2)) - { - foreach (bool l4 in prefix_is_atom(S1, Precedence)) - { - foreach (bool l5 in exprtl(new ListPair(new Functor3(Atom.a("postfixop", Atom.a("")), new Functor2("/", F, Pos), L2, O2), S1), 0, Term, Precedence, Answer, S)) - { - yield return false; - } - yield break; - } - foreach (bool l4 in exprtl(new ListPair(new Functor(Atom.a("infixop", Atom.a("")), new object[] { new Functor2("/", F, Pos), L1, O1, R1 }), S1), 0, Term, Precedence, Answer, S)) - { - yield return false; - } - foreach (bool l4 in exprtl(new ListPair(new Functor3(Atom.a("postfixop", Atom.a("")), new Functor2("/", F, Pos), L2, O2), S1), 0, Term, Precedence, Answer, S)) - { - yield return false; - } - yield break; - } - } - } - { - object Term = arg2; - object Precedence = arg3; - object Answer = arg4; - object S = arg5; - Variable F = new Variable(); - Variable Pos = new Variable(); - Variable L1 = new Variable(); - Variable O1 = new Variable(); - Variable R1 = new Variable(); - foreach (bool l2 in YP.unify(arg1, new Functor2("/", F, Pos))) - { - foreach (bool l3 in infixop(F, L1, O1, R1)) - { - foreach (bool l4 in exprtl(new ListPair(new Functor(Atom.a("infixop", Atom.a("")), new object[] { new Functor2("/", F, Pos), L1, O1, R1 }), S1), 0, Term, Precedence, Answer, S)) - { - yield return false; - } - yield break; - } - } - } - { - object Term = arg2; - object Precedence = arg3; - object Answer = arg4; - object S = arg5; - Variable F = new Variable(); - Variable Pos = new Variable(); - Variable L2 = new Variable(); - Variable O2 = new Variable(); - foreach (bool l2 in YP.unify(arg1, new Functor2("/", F, Pos))) - { - foreach (bool l3 in postfixop(F, L2, O2)) - { - foreach (bool l4 in exprtl(new ListPair(new Functor3(Atom.a("postfixop", Atom.a("")), new Functor2("/", F, Pos), L2, O2), S1), 0, Term, Precedence, Answer, S)) - { - yield return false; - } - yield break; - } - } - } - { - object X = arg1; - object x2 = arg2; - object x3 = arg3; - object x4 = arg4; - object x5 = arg5; - Variable x7 = new Variable(); - foreach (bool l2 in syntax_error(ListPair.make(new object[] { new Functor2("-", Atom.a("non"), Atom.a("operator")), X, Atom.a("follows"), Atom.a("expression") }), new ListPair(new Functor2("atom", X, x7), S1))) - { - yield return false; - } - yield break; - } - } - - public static IEnumerable cannot_follow(object Type, object Token, object Tokens) - { - { - foreach (bool l2 in syntax_error(ListPair.make(new object[] { Type, Atom.a("follows"), Atom.a("expression") }), new ListPair(Token, Tokens))) - { - yield return false; - } - } - } - - public static IEnumerable exprtl(object arg1, object arg2, object arg3, object arg4, object arg5, object arg6) - { - { - object x1 = arg2; - object x3 = arg4; - Variable Term = new Variable(); - foreach (bool l2 in YP.unify(arg1, Atom.NIL)) - { - foreach (bool l3 in YP.unify(arg3, Term)) - { - foreach (bool l4 in YP.unify(arg5, Term)) - { - foreach (bool l5 in YP.unify(arg6, Atom.NIL)) - { - yield return false; - } - } - } - } - } - { - object C = arg2; - object Term = arg3; - object Precedence = arg4; - object Answer = arg5; - object S = arg6; - Variable Token = new Variable(); - Variable Tokens = new Variable(); - foreach (bool l2 in YP.unify(arg1, new ListPair(Token, Tokens))) - { - foreach (bool l3 in exprtl_7(Token, C, Term, Precedence, Answer, S, Tokens)) - { - yield return false; - } - } - } - } - - public static IEnumerable exprtl_7(object arg1, object arg2, object arg3, object arg4, object arg5, object arg6, object arg7) - { - { - object C = arg2; - object Term = arg3; - object Precedence = arg4; - object Answer = arg5; - object S = arg6; - object S1 = arg7; - Variable F = new Variable(); - Variable Pos = new Variable(); - Variable L = new Variable(); - Variable O = new Variable(); - Variable R = new Variable(); - Variable Other = new Variable(); - Variable S2 = new Variable(); - Variable Expr = new Variable(); - foreach (bool l2 in YP.unify(arg1, new Functor(Atom.a("infixop", Atom.a("")), new object[] { new Functor2("/", F, Pos), L, O, R }))) - { - if (YP.greaterThanOrEqual(Precedence, O)) - { - if (YP.lessThanOrEqual(C, L)) - { - foreach (bool l5 in parse(S1, R, Other, S2)) - { - foreach (bool l6 in YP.univ(Expr, ListPair.make(new object[] { F, Pos, Term, Other }))) - { - foreach (bool l7 in exprtl(S2, O, Expr, Precedence, Answer, S)) - { - yield return false; - } - } - } - yield break; - } - } - } - } - { - object C = arg2; - object Term = arg3; - object Precedence = arg4; - object Answer = arg5; - object S = arg6; - object S1 = arg7; - Variable F = new Variable(); - Variable Pos = new Variable(); - Variable L = new Variable(); - Variable O = new Variable(); - Variable Expr = new Variable(); - Variable S2 = new Variable(); - foreach (bool l2 in YP.unify(arg1, new Functor3(Atom.a("postfixop", Atom.a("")), new Functor2("/", F, Pos), L, O))) - { - if (YP.greaterThanOrEqual(Precedence, O)) - { - if (YP.lessThanOrEqual(C, L)) - { - foreach (bool l5 in YP.univ(Expr, ListPair.make(new object[] { F, Pos, Term }))) - { - foreach (bool l6 in peepop(S1, S2)) - { - foreach (bool l7 in exprtl(S2, O, Expr, Precedence, Answer, S)) - { - yield return false; - } - } - } - yield break; - } - } - } - } - { - object C = arg2; - object Term = arg3; - object Precedence = arg4; - object Answer = arg5; - object S = arg6; - object S1 = arg7; - Variable Next = new Variable(); - Variable S2 = new Variable(); - foreach (bool l2 in YP.unify(arg1, Atom.a(","))) - { - if (YP.greaterThanOrEqual(Precedence, 1000)) - { - if (YP.lessThan(C, 1000)) - { - foreach (bool l5 in parse(S1, 1000, Next, S2)) - { - foreach (bool l6 in exprtl(S2, 1000, new Functor2(",", Term, Next), Precedence, Answer, S)) - { - yield return false; - } - } - yield break; - } - } - } - } - { - object C = arg2; - object Term = arg3; - object Precedence = arg4; - object Answer = arg5; - object S = arg6; - object S1 = arg7; - Variable Next = new Variable(); - Variable S2 = new Variable(); - foreach (bool l2 in YP.unify(arg1, Atom.a("|"))) - { - if (YP.greaterThanOrEqual(Precedence, 1100)) - { - if (YP.lessThan(C, 1100)) - { - foreach (bool l5 in parse(S1, 1100, Next, S2)) - { - foreach (bool l6 in exprtl(S2, 1100, new Functor2(";", Term, Next), Precedence, Answer, S)) - { - yield return false; - } - } - yield break; - } - } - } - } - { - object Token = arg1; - object x2 = arg2; - object x4 = arg4; - object Tokens = arg7; - Variable Term = new Variable(); - foreach (bool l2 in YP.unify(arg3, Term)) - { - foreach (bool l3 in YP.unify(arg5, Term)) - { - foreach (bool l4 in YP.unify(arg6, new ListPair(Token, Tokens))) - { - yield return false; - } - } - } - } - } - - public static IEnumerable syntax_error(object _Message, object _List) - { - { - yield break; - } - foreach (bool l1 in YP.fail()) - { - yield return false; - } - } - - public static IEnumerable syntax_error(object _List) - { - { - yield break; - } - foreach (bool l1 in YP.fail()) - { - yield return false; - } - } - - public static IEnumerable prefixop(object F, object O, object Q) - { - { - foreach (bool l2 in YP.current_op(O, Atom.a("fx"), F)) - { - foreach (bool l3 in YP.unify(Q, YP.subtract(O, 1))) - { - yield return false; - } - goto cutIf1; - } - foreach (bool l2 in YP.current_op(O, Atom.a("fy"), F)) - { - foreach (bool l3 in YP.unify(Q, O)) - { - yield return false; - } - goto cutIf2; - } - cutIf2: - cutIf1: - { } - } - } - - public static IEnumerable postfixop(object F, object P, object O) - { - { - foreach (bool l2 in YP.current_op(O, Atom.a("xf"), F)) - { - foreach (bool l3 in YP.unify(P, YP.subtract(O, 1))) - { - yield return false; - } - goto cutIf1; - } - foreach (bool l2 in YP.current_op(O, Atom.a("yf"), F)) - { - foreach (bool l3 in YP.unify(P, O)) - { - yield return false; - } - goto cutIf2; - } - cutIf2: - cutIf1: - { } - } - } - - public static IEnumerable infixop(object F, object P, object O, object Q) - { - { - foreach (bool l2 in YP.current_op(O, Atom.a("xfy"), F)) - { - foreach (bool l3 in YP.unify(P, YP.subtract(O, 1))) - { - foreach (bool l4 in YP.unify(Q, O)) - { - yield return false; - } - } - goto cutIf1; - } - foreach (bool l2 in YP.current_op(O, Atom.a("xfx"), F)) - { - foreach (bool l3 in YP.unify(P, YP.subtract(O, 1))) - { - foreach (bool l4 in YP.unify(Q, P)) - { - yield return false; - } - } - goto cutIf2; - } - foreach (bool l2 in YP.current_op(O, Atom.a("yfx"), F)) - { - foreach (bool l3 in YP.unify(Q, YP.subtract(O, 1))) - { - foreach (bool l4 in YP.unify(P, O)) - { - yield return false; - } - } - goto cutIf3; - } - cutIf3: - cutIf2: - cutIf1: - { } - } - } - - public static IEnumerable ambigop(object F, object Precedence, object L1, object O1, object R1, object L2, object O2) - { - { - foreach (bool l2 in postfixop(F, L2, O2)) - { - if (YP.lessThanOrEqual(O2, Precedence)) - { - foreach (bool l4 in infixop(F, L1, O1, R1)) - { - if (YP.lessThanOrEqual(O1, Precedence)) - { - yield return false; - } - } - } - } - } - } - - public static IEnumerable read_tokens1(object arg1) - { - { - object TokenList = arg1; - Variable C1 = new Variable(); - Variable _X = new Variable(); - Variable ListOfTokens = new Variable(); - foreach (bool l2 in YP.get_code(C1)) - { - foreach (bool l3 in read_tokens(C1, _X, ListOfTokens)) - { - foreach (bool l4 in YP.unify(TokenList, ListOfTokens)) - { - yield return false; - } - yield break; - } - } - } - { - foreach (bool l2 in YP.unify(arg1, new ListPair(new Functor2("atom", Atom.a("end_of_file"), 0), Atom.NIL))) - { - yield return false; - } - } - } - - public static IEnumerable read_tokens2(object arg1, object arg2) - { - { - object TokenList = arg1; - object Dictionary = arg2; - Variable C1 = new Variable(); - Variable Dict = new Variable(); - Variable ListOfTokens = new Variable(); - foreach (bool l2 in YP.get_code(C1)) - { - foreach (bool l3 in read_tokens(C1, Dict, ListOfTokens)) - { - foreach (bool l4 in terminate_list(Dict)) - { - foreach (bool l5 in YP.unify(Dictionary, Dict)) - { - foreach (bool l6 in YP.unify(TokenList, ListOfTokens)) - { - yield return false; - } - } - yield break; - } - } - } - } - { - foreach (bool l2 in YP.unify(arg1, new ListPair(new Functor2("atom", Atom.a("end_of_file"), 0), Atom.NIL))) - { - foreach (bool l3 in YP.unify(arg2, Atom.NIL)) - { - yield return false; - } - } - } - } - - public static IEnumerable terminate_list(object arg1) - { - { - foreach (bool l2 in YP.unify(arg1, Atom.NIL)) - { - yield return false; - } - } - { - Variable x1 = new Variable(); - Variable Tail = new Variable(); - foreach (bool l2 in YP.unify(arg1, new ListPair(x1, Tail))) - { - foreach (bool l3 in terminate_list(Tail)) - { - yield return false; - } - } - } - } - - public static IEnumerable read_special(object arg1, object Dict, object arg3) - { - { - object Tokens = arg3; - foreach (bool l2 in YP.unify(arg1, 95)) - { - foreach (bool l3 in read_variable(95, Dict, Tokens)) - { - yield return false; - } - } - } - { - object Tokens = arg3; - foreach (bool l2 in YP.unify(arg1, 247)) - { - foreach (bool l3 in read_symbol(247, Dict, Tokens)) - { - yield return false; - } - } - } - { - object Tokens = arg3; - foreach (bool l2 in YP.unify(arg1, 215)) - { - foreach (bool l3 in read_symbol(215, Dict, Tokens)) - { - yield return false; - } - } - } - { - Variable StartPos = new Variable(); - Variable EndPos = new Variable(); - Variable Tokens = new Variable(); - Variable Ch = new Variable(); - Variable NextCh = new Variable(); - foreach (bool l2 in YP.unify(arg1, 37)) - { - foreach (bool l3 in YP.unify(arg3, new ListPair(new Functor2("comment", StartPos, EndPos), Tokens))) - { - foreach (bool l4 in get_current_position(StartPos)) - { - foreach (bool l5 in YP.repeat()) - { - foreach (bool l6 in YP.get_code(Ch)) - { - if (YP.lessThan(Ch, new ListPair(32, Atom.NIL))) - { - if (YP.notEqual(Ch, 9)) - { - if (YP.termNotEqual(Ch, -1)) - { - foreach (bool l10 in get_current_position(EndPos)) - { - foreach (bool l11 in YP.get_code(NextCh)) - { - foreach (bool l12 in read_tokens(NextCh, Dict, Tokens)) - { - yield return false; - } - } - } - } - yield break; - } - } - } - } - } - } - } - } - { - object T = arg3; - Variable C2 = new Variable(); - Variable StartPos = new Variable(); - Variable EndPos = new Variable(); - Variable Tokens = new Variable(); - Variable StartPos1 = new Variable(); - Variable NextCh = new Variable(); - Variable Chars = new Variable(); - foreach (bool l2 in YP.unify(arg1, 47)) - { - foreach (bool l3 in YP.get_code(C2)) - { - if (YP.equal(C2, new ListPair(42, Atom.NIL))) - { - foreach (bool l5 in YP.unify(T, new ListPair(new Functor2("comment", StartPos, EndPos), Tokens))) - { - foreach (bool l6 in get_current_position(StartPos1)) - { - foreach (bool l7 in YP.unify(StartPos, YP.subtract(StartPos1, 1))) - { - foreach (bool l8 in read_solidus(32, NextCh)) - { - foreach (bool l9 in get_current_position(EndPos)) - { - foreach (bool l10 in read_tokens(NextCh, Dict, Tokens)) - { - yield return false; - } - } - } - } - } - } - goto cutIf1; - } - foreach (bool l4 in YP.unify(T, Tokens)) - { - foreach (bool l5 in rest_symbol(C2, Chars, NextCh)) - { - foreach (bool l6 in read_after_atom4(NextCh, Dict, Tokens, new ListPair(47, Chars))) - { - yield return false; - } - } - } - cutIf1: - { } - } - } - } - { - Variable Pos = new Variable(); - Variable Tokens = new Variable(); - Variable NextCh = new Variable(); - foreach (bool l2 in YP.unify(arg1, 33)) - { - foreach (bool l3 in YP.unify(arg3, new ListPair(new Functor2("atom", Atom.a("!"), Pos), Tokens))) - { - foreach (bool l4 in get_current_position(Pos)) - { - foreach (bool l5 in YP.get_code(NextCh)) - { - foreach (bool l6 in read_after_atom(NextCh, Dict, Tokens)) - { - yield return false; - } - } - } - } - } - } - { - Variable Tokens = new Variable(); - Variable NextCh = new Variable(); - foreach (bool l2 in YP.unify(arg1, 40)) - { - foreach (bool l3 in YP.unify(arg3, new ListPair(Atom.a(" ("), Tokens))) - { - foreach (bool l4 in YP.get_code(NextCh)) - { - foreach (bool l5 in read_tokens(NextCh, Dict, Tokens)) - { - yield return false; - } - } - } - } - } - { - Variable Tokens = new Variable(); - Variable NextCh = new Variable(); - foreach (bool l2 in YP.unify(arg1, 41)) - { - foreach (bool l3 in YP.unify(arg3, new ListPair(Atom.a(")"), Tokens))) - { - foreach (bool l4 in YP.get_code(NextCh)) - { - foreach (bool l5 in read_tokens(NextCh, Dict, Tokens)) - { - yield return false; - } - } - } - } - } - { - Variable Tokens = new Variable(); - Variable NextCh = new Variable(); - foreach (bool l2 in YP.unify(arg1, 44)) - { - foreach (bool l3 in YP.unify(arg3, new ListPair(Atom.a(","), Tokens))) - { - foreach (bool l4 in YP.get_code(NextCh)) - { - foreach (bool l5 in read_tokens(NextCh, Dict, Tokens)) - { - yield return false; - } - } - } - } - } - { - Variable Pos = new Variable(); - Variable Tokens = new Variable(); - Variable NextCh = new Variable(); - foreach (bool l2 in YP.unify(arg1, 59)) - { - foreach (bool l3 in YP.unify(arg3, new ListPair(new Functor2("atom", Atom.a(";"), Pos), Tokens))) - { - foreach (bool l4 in get_current_position(Pos)) - { - foreach (bool l5 in YP.get_code(NextCh)) - { - foreach (bool l6 in read_after_atom(NextCh, Dict, Tokens)) - { - yield return false; - } - } - } - } - } - } - { - Variable Pos = new Variable(); - Variable Tokens = new Variable(); - Variable NextCh = new Variable(); - foreach (bool l2 in YP.unify(arg1, 91)) - { - foreach (bool l3 in YP.unify(arg3, new ListPair(new Functor2("/", Atom.a("["), Pos), Tokens))) - { - foreach (bool l4 in get_current_position(Pos)) - { - foreach (bool l5 in YP.get_code(NextCh)) - { - foreach (bool l6 in read_tokens(NextCh, Dict, Tokens)) - { - yield return false; - } - } - } - } - } - } - { - Variable Pos = new Variable(); - Variable Tokens = new Variable(); - Variable NextCh = new Variable(); - foreach (bool l2 in YP.unify(arg1, 93)) - { - foreach (bool l3 in YP.unify(arg3, new ListPair(new Functor2("/", Atom.a("]"), Pos), Tokens))) - { - foreach (bool l4 in get_current_position(Pos)) - { - foreach (bool l5 in YP.get_code(NextCh)) - { - foreach (bool l6 in read_after_atom(NextCh, Dict, Tokens)) - { - yield return false; - } - } - } - } - } - } - { - Variable Pos = new Variable(); - Variable Tokens = new Variable(); - Variable NextCh = new Variable(); - foreach (bool l2 in YP.unify(arg1, 123)) - { - foreach (bool l3 in YP.unify(arg3, new ListPair(new Functor2("/", Atom.a("{"), Pos), Tokens))) - { - foreach (bool l4 in get_current_position(Pos)) - { - foreach (bool l5 in YP.get_code(NextCh)) - { - foreach (bool l6 in read_tokens(NextCh, Dict, Tokens)) - { - yield return false; - } - } - } - } - } - } - { - Variable Tokens = new Variable(); - Variable NextCh = new Variable(); - foreach (bool l2 in YP.unify(arg1, 124)) - { - foreach (bool l3 in YP.unify(arg3, new ListPair(Atom.a("|"), Tokens))) - { - foreach (bool l4 in YP.get_code(NextCh)) - { - foreach (bool l5 in read_tokens(NextCh, Dict, Tokens)) - { - yield return false; - } - } - } - } - } - { - Variable Tokens = new Variable(); - Variable NextCh = new Variable(); - foreach (bool l2 in YP.unify(arg1, 125)) - { - foreach (bool l3 in YP.unify(arg3, new ListPair(Atom.a("}"), Tokens))) - { - foreach (bool l4 in YP.get_code(NextCh)) - { - foreach (bool l5 in read_after_atom(NextCh, Dict, Tokens)) - { - yield return false; - } - } - } - } - } - { - object Tokens = arg3; - Variable NextCh = new Variable(); - foreach (bool l2 in YP.unify(arg1, 46)) - { - foreach (bool l3 in YP.get_code(NextCh)) - { - foreach (bool l4 in read_fullstop(NextCh, Dict, Tokens)) - { - yield return false; - } - } - } - } - { - Variable Chars = new Variable(); - Variable Tokens = new Variable(); - Variable NextCh = new Variable(); - foreach (bool l2 in YP.unify(arg1, 34)) - { - foreach (bool l3 in YP.unify(arg3, new ListPair(new Functor1("string", Chars), Tokens))) - { - foreach (bool l4 in read_string(Chars, 34, NextCh)) - { - foreach (bool l5 in read_tokens(NextCh, Dict, Tokens)) - { - yield return false; - } - } - } - } - } - { - object Tokens = arg3; - Variable Chars = new Variable(); - Variable NextCh = new Variable(); - foreach (bool l2 in YP.unify(arg1, 39)) - { - foreach (bool l3 in read_string(Chars, 39, NextCh)) - { - foreach (bool l4 in read_after_atom4(NextCh, Dict, Tokens, Chars)) - { - yield return false; - } - } - } - } - { - object Tokens = arg3; - foreach (bool l2 in YP.unify(arg1, 35)) - { - foreach (bool l3 in read_symbol(35, Dict, Tokens)) - { - yield return false; - } - } - } - { - object Tokens = arg3; - foreach (bool l2 in YP.unify(arg1, 36)) - { - foreach (bool l3 in read_symbol(36, Dict, Tokens)) - { - yield return false; - } - } - } - { - object Tokens = arg3; - foreach (bool l2 in YP.unify(arg1, 38)) - { - foreach (bool l3 in read_symbol(38, Dict, Tokens)) - { - yield return false; - } - } - } - { - object Tokens = arg3; - foreach (bool l2 in YP.unify(arg1, 42)) - { - foreach (bool l3 in read_symbol(42, Dict, Tokens)) - { - yield return false; - } - } - } - { - object Tokens = arg3; - foreach (bool l2 in YP.unify(arg1, 43)) - { - foreach (bool l3 in read_symbol(43, Dict, Tokens)) - { - yield return false; - } - } - } - { - object Tokens = arg3; - foreach (bool l2 in YP.unify(arg1, 45)) - { - foreach (bool l3 in read_symbol(45, Dict, Tokens)) - { - yield return false; - } - } - } - { - object Tokens = arg3; - foreach (bool l2 in YP.unify(arg1, 58)) - { - foreach (bool l3 in read_symbol(58, Dict, Tokens)) - { - yield return false; - } - } - } - { - object Tokens = arg3; - foreach (bool l2 in YP.unify(arg1, 60)) - { - foreach (bool l3 in read_symbol(60, Dict, Tokens)) - { - yield return false; - } - } - } - { - object Tokens = arg3; - foreach (bool l2 in YP.unify(arg1, 61)) - { - foreach (bool l3 in read_symbol(61, Dict, Tokens)) - { - yield return false; - } - } - } - { - object Tokens = arg3; - foreach (bool l2 in YP.unify(arg1, 62)) - { - foreach (bool l3 in read_symbol(62, Dict, Tokens)) - { - yield return false; - } - } - } - { - object Tokens = arg3; - foreach (bool l2 in YP.unify(arg1, 63)) - { - foreach (bool l3 in read_symbol(63, Dict, Tokens)) - { - yield return false; - } - } - } - { - object Tokens = arg3; - foreach (bool l2 in YP.unify(arg1, 64)) - { - foreach (bool l3 in read_symbol(64, Dict, Tokens)) - { - yield return false; - } - } - } - { - object Tokens = arg3; - foreach (bool l2 in YP.unify(arg1, 92)) - { - foreach (bool l3 in read_symbol(92, Dict, Tokens)) - { - yield return false; - } - } - } - { - object Tokens = arg3; - foreach (bool l2 in YP.unify(arg1, 94)) - { - foreach (bool l3 in read_symbol(94, Dict, Tokens)) - { - yield return false; - } - } - } - { - object Tokens = arg3; - foreach (bool l2 in YP.unify(arg1, 96)) - { - foreach (bool l3 in read_symbol(96, Dict, Tokens)) - { - yield return false; - } - } - } - { - object Tokens = arg3; - foreach (bool l2 in YP.unify(arg1, 126)) - { - foreach (bool l3 in read_symbol(126, Dict, Tokens)) - { - yield return false; - } - } - } - } - - public static IEnumerable read_symbol(object C1, object Dict, object Tokens) - { - { - Variable C2 = new Variable(); - Variable Chars = new Variable(); - Variable NextCh = new Variable(); - foreach (bool l2 in YP.get_code(C2)) - { - foreach (bool l3 in rest_symbol(C2, Chars, NextCh)) - { - foreach (bool l4 in read_after_atom4(NextCh, Dict, Tokens, new ListPair(C1, Chars))) - { - yield return false; - } - } - } - } - } - - public static IEnumerable rest_symbol(object arg1, object arg2, object arg3) - { - { - object C2 = arg1; - object LastCh = arg3; - Variable Chars = new Variable(); - Variable NextCh = new Variable(); - foreach (bool l2 in YP.unify(arg2, new ListPair(C2, Chars))) - { - if (YP.greaterThan(C2, 160)) - { - if (YP.lessThan(C2, 192)) - { - if (YP.notEqual(C2, 186)) - { - if (YP.notEqual(C2, 170)) - { - foreach (bool l7 in YP.get_code(NextCh)) - { - foreach (bool l8 in rest_symbol(NextCh, Chars, LastCh)) - { - yield return false; - } - } - yield break; - } - } - } - goto cutIf1; - } - foreach (bool l3 in symbol_char(C2)) - { - foreach (bool l4 in YP.get_code(NextCh)) - { - foreach (bool l5 in rest_symbol(NextCh, Chars, LastCh)) - { - yield return false; - } - } - yield break; - } - cutIf1: - { } - } - } - { - Variable C2 = new Variable(); - foreach (bool l2 in YP.unify(arg1, C2)) - { - foreach (bool l3 in YP.unify(arg2, Atom.NIL)) - { - foreach (bool l4 in YP.unify(arg3, C2)) - { - yield return false; - } - } - } - } - } - - public static IEnumerable symbol_char(object arg1) - { - { - foreach (bool l2 in YP.unify(arg1, 35)) - { - yield return false; - } - } - { - foreach (bool l2 in YP.unify(arg1, 36)) - { - yield return false; - } - } - { - foreach (bool l2 in YP.unify(arg1, 38)) - { - yield return false; - } - } - { - foreach (bool l2 in YP.unify(arg1, 42)) - { - yield return false; - } - } - { - foreach (bool l2 in YP.unify(arg1, 43)) - { - yield return false; - } - } - { - foreach (bool l2 in YP.unify(arg1, 45)) - { - yield return false; - } - } - { - foreach (bool l2 in YP.unify(arg1, 46)) - { - yield return false; - } - } - { - foreach (bool l2 in YP.unify(arg1, 47)) - { - yield return false; - } - } - { - foreach (bool l2 in YP.unify(arg1, 58)) - { - yield return false; - } - } - { - foreach (bool l2 in YP.unify(arg1, 60)) - { - yield return false; - } - } - { - foreach (bool l2 in YP.unify(arg1, 61)) - { - yield return false; - } - } - { - foreach (bool l2 in YP.unify(arg1, 62)) - { - yield return false; - } - } - { - foreach (bool l2 in YP.unify(arg1, 63)) - { - yield return false; - } - } - { - foreach (bool l2 in YP.unify(arg1, 64)) - { - yield return false; - } - } - { - foreach (bool l2 in YP.unify(arg1, 92)) - { - yield return false; - } - } - { - foreach (bool l2 in YP.unify(arg1, 94)) - { - yield return false; - } - } - { - foreach (bool l2 in YP.unify(arg1, 96)) - { - yield return false; - } - } - { - foreach (bool l2 in YP.unify(arg1, 126)) - { - yield return false; - } - } - } - - public static IEnumerable get_current_position(object Pos) - { - { - foreach (bool l2 in YP.unify(Pos, 0)) - { - yield return false; - } - } - } - - public static IEnumerable read_after_atom4(object Ch, object Dict, object arg3, object Chars) - { - { - Variable Atom_1 = new Variable(); - Variable Pos = new Variable(); - Variable Tokens = new Variable(); - foreach (bool l2 in YP.unify(arg3, new ListPair(new Functor2("atom", Atom_1, Pos), Tokens))) - { - foreach (bool l3 in YP.unify(Pos, 0)) - { - foreach (bool l4 in YP.atom_codes(Atom_1, Chars)) - { - foreach (bool l5 in read_after_atom(Ch, Dict, Tokens)) - { - yield return false; - } - } - } - } - } - } - - public static IEnumerable read_after_atom(object arg1, object Dict, object arg3) - { - { - Variable Tokens = new Variable(); - Variable NextCh = new Variable(); - foreach (bool l2 in YP.unify(arg1, 40)) - { - foreach (bool l3 in YP.unify(arg3, new ListPair(Atom.a("("), Tokens))) - { - foreach (bool l4 in YP.get_code(NextCh)) - { - foreach (bool l5 in read_tokens(NextCh, Dict, Tokens)) - { - yield return false; - } - } - yield break; - } - } - } - { - object Ch = arg1; - object Tokens = arg3; - foreach (bool l2 in read_tokens(Ch, Dict, Tokens)) - { - yield return false; - } - } - } - - public static IEnumerable read_string(object Chars, object Quote, object NextCh) - { - { - Variable Ch = new Variable(); - Variable Char = new Variable(); - Variable Next = new Variable(); - foreach (bool l2 in YP.get_code(Ch)) - { - foreach (bool l3 in read_char(Ch, Quote, Char, Next)) - { - foreach (bool l4 in rest_string5(Char, Next, Chars, Quote, NextCh)) - { - yield return false; - } - } - } - } - } - - public static IEnumerable rest_string5(object arg1, object arg2, object arg3, object arg4, object arg5) - { - { - object _X = arg4; - Variable NextCh = new Variable(); - foreach (bool l2 in YP.unify(arg1, -1)) - { - foreach (bool l3 in YP.unify(arg2, NextCh)) - { - foreach (bool l4 in YP.unify(arg3, Atom.NIL)) - { - foreach (bool l5 in YP.unify(arg5, NextCh)) - { - yield return true; - yield break; - } - } - } - } - } - { - object Char = arg1; - object Next = arg2; - object Quote = arg4; - object NextCh = arg5; - Variable Chars = new Variable(); - Variable Char2 = new Variable(); - Variable Next2 = new Variable(); - foreach (bool l2 in YP.unify(arg3, new ListPair(Char, Chars))) - { - foreach (bool l3 in read_char(Next, Quote, Char2, Next2)) - { - foreach (bool l4 in rest_string5(Char2, Next2, Chars, Quote, NextCh)) - { - yield return false; - } - } - } - } - } - - public static IEnumerable escape_char(object arg1, object arg2) - { - { - foreach (bool l2 in YP.unify(arg1, 110)) - { - foreach (bool l3 in YP.unify(arg2, 10)) - { - yield return false; - } - } - } - { - foreach (bool l2 in YP.unify(arg1, 78)) - { - foreach (bool l3 in YP.unify(arg2, 10)) - { - yield return false; - } - } - } - { - foreach (bool l2 in YP.unify(arg1, 116)) - { - foreach (bool l3 in YP.unify(arg2, 9)) - { - yield return false; - } - } - } - { - foreach (bool l2 in YP.unify(arg1, 84)) - { - foreach (bool l3 in YP.unify(arg2, 9)) - { - yield return false; - } - } - } - { - foreach (bool l2 in YP.unify(arg1, 114)) - { - foreach (bool l3 in YP.unify(arg2, 13)) - { - yield return false; - } - } - } - { - foreach (bool l2 in YP.unify(arg1, 82)) - { - foreach (bool l3 in YP.unify(arg2, 13)) - { - yield return false; - } - } - } - { - foreach (bool l2 in YP.unify(arg1, 118)) - { - foreach (bool l3 in YP.unify(arg2, 11)) - { - yield return false; - } - } - } - { - foreach (bool l2 in YP.unify(arg1, 86)) - { - foreach (bool l3 in YP.unify(arg2, 11)) - { - yield return false; - } - } - } - { - foreach (bool l2 in YP.unify(arg1, 98)) - { - foreach (bool l3 in YP.unify(arg2, 8)) - { - yield return false; - } - } - } - { - foreach (bool l2 in YP.unify(arg1, 66)) - { - foreach (bool l3 in YP.unify(arg2, 8)) - { - yield return false; - } - } - } - { - foreach (bool l2 in YP.unify(arg1, 102)) - { - foreach (bool l3 in YP.unify(arg2, 12)) - { - yield return false; - } - } - } - { - foreach (bool l2 in YP.unify(arg1, 70)) - { - foreach (bool l3 in YP.unify(arg2, 12)) - { - yield return false; - } - } - } - { - foreach (bool l2 in YP.unify(arg1, 101)) - { - foreach (bool l3 in YP.unify(arg2, 27)) - { - yield return false; - } - } - } - { - foreach (bool l2 in YP.unify(arg1, 69)) - { - foreach (bool l3 in YP.unify(arg2, 27)) - { - yield return false; - } - } - } - { - foreach (bool l2 in YP.unify(arg1, 100)) - { - foreach (bool l3 in YP.unify(arg2, 127)) - { - yield return false; - } - } - } - { - foreach (bool l2 in YP.unify(arg1, 68)) - { - foreach (bool l3 in YP.unify(arg2, 127)) - { - yield return false; - } - } - } - { - foreach (bool l2 in YP.unify(arg1, 115)) - { - foreach (bool l3 in YP.unify(arg2, 32)) - { - yield return false; - } - } - } - { - foreach (bool l2 in YP.unify(arg1, 83)) - { - foreach (bool l3 in YP.unify(arg2, 32)) - { - yield return false; - } - } - } - { - foreach (bool l2 in YP.unify(arg1, 122)) - { - foreach (bool l3 in YP.unify(arg2, -1)) - { - yield return false; - } - } - } - { - foreach (bool l2 in YP.unify(arg1, 90)) - { - foreach (bool l3 in YP.unify(arg2, -1)) - { - yield return false; - } - } - } - } - - public static IEnumerable read_variable(object C1, object Dict, object arg3) - { - { - Variable Var = new Variable(); - Variable Name = new Variable(); - Variable StartPos = new Variable(); - Variable Tokens = new Variable(); - Variable Chars = new Variable(); - Variable NextCh = new Variable(); - foreach (bool l2 in YP.unify(arg3, new ListPair(new Functor3("var", Var, Name, StartPos), Tokens))) - { - foreach (bool l3 in get_current_position(StartPos)) - { - foreach (bool l4 in read_name(C1, Chars, NextCh)) - { - foreach (bool l5 in YP.atom_codes(Name, Chars)) - { - if (YP.termEqual(Name, Atom.a("_"))) - { - foreach (bool l7 in read_after_atom(NextCh, Dict, Tokens)) - { - yield return false; - } - goto cutIf1; - } - foreach (bool l6 in read_lookup(Dict, Name, Var)) - { - foreach (bool l7 in read_after_atom(NextCh, Dict, Tokens)) - { - yield return false; - } - } - cutIf1: - { } - } - } - } - } - } - } - - public static IEnumerable read_lookup(object arg1, object Name, object Var) - { - { - Variable N = new Variable(); - Variable V = new Variable(); - Variable L = new Variable(); - foreach (bool l2 in YP.unify(arg1, new ListPair(new Functor2("=", N, V), L))) - { - foreach (bool l3 in YP.unify(N, Name)) - { - foreach (bool l4 in YP.unify(V, Var)) - { - yield return false; - } - goto cutIf1; - } - foreach (bool l3 in read_lookup(L, Name, Var)) - { - yield return false; - } - cutIf1: - { } - } - } - } - - public static IEnumerable read_solidus(object Ch, object LastCh) - { - { - Variable NextCh = new Variable(); - if (YP.equal(Ch, 42)) - { - foreach (bool l3 in YP.get_code(NextCh)) - { - if (YP.equal(NextCh, 47)) - { - foreach (bool l5 in YP.get_code(LastCh)) - { - yield return false; - } - goto cutIf2; - } - foreach (bool l4 in read_solidus(NextCh, LastCh)) - { - yield return false; - } - cutIf2: - { } - } - goto cutIf1; - } - if (YP.notEqual(Ch, -1)) - { - foreach (bool l3 in YP.get_code(NextCh)) - { - foreach (bool l4 in read_solidus(NextCh, LastCh)) - { - yield return false; - } - } - goto cutIf3; - } - foreach (bool l2 in YP.unify(LastCh, Ch)) - { - foreach (bool l3 in formatError(Atom.a("user_error"), Atom.a("~N** end of file in /*comment~n"), Atom.NIL)) - { - yield return false; - } - } - cutIf3: - cutIf1: - { } - } - } - - public static IEnumerable read_identifier(object C1, object Dict, object Tokens) - { - { - Variable Chars = new Variable(); - Variable NextCh = new Variable(); - foreach (bool l2 in read_name(C1, Chars, NextCh)) - { - foreach (bool l3 in read_after_atom4(NextCh, Dict, Tokens, Chars)) - { - yield return false; - } - } - } - } - - public static IEnumerable read_name(object C1, object arg2, object LastCh) - { - { - Variable Chars = new Variable(); - Variable C2 = new Variable(); - foreach (bool l2 in YP.unify(arg2, new ListPair(C1, Chars))) - { - foreach (bool l3 in YP.get_code(C2)) - { - if (YP.greaterThanOrEqual(C2, new ListPair(97, Atom.NIL))) - { - if (YP.lessThanOrEqual(C2, new ListPair(122, Atom.NIL))) - { - foreach (bool l6 in read_name(C2, Chars, LastCh)) - { - yield return false; - } - goto cutIf2; - } - if (YP.lessThan(C2, 192)) - { - if (YP.notEqual(YP.bitwiseOr(C2, 16), 186)) - { - foreach (bool l7 in YP.unify(Chars, Atom.NIL)) - { - foreach (bool l8 in YP.unify(LastCh, C2)) - { - yield return false; - } - } - goto cutIf3; - } - } - if (YP.equal(YP.bitwiseOr(C2, 32), 247)) - { - foreach (bool l6 in YP.unify(Chars, Atom.NIL)) - { - foreach (bool l7 in YP.unify(LastCh, C2)) - { - yield return false; - } - } - goto cutIf4; - } - foreach (bool l5 in read_name(C2, Chars, LastCh)) - { - yield return false; - } - cutIf4: - cutIf3: - cutIf2: - goto cutIf1; - } - if (YP.greaterThanOrEqual(C2, new ListPair(65, Atom.NIL))) - { - if (YP.greaterThan(C2, new ListPair(90, Atom.NIL))) - { - if (YP.notEqual(C2, new ListPair(95, Atom.NIL))) - { - foreach (bool l7 in YP.unify(Chars, Atom.NIL)) - { - foreach (bool l8 in YP.unify(LastCh, C2)) - { - yield return false; - } - } - goto cutIf6; - } - } - foreach (bool l5 in read_name(C2, Chars, LastCh)) - { - yield return false; - } - cutIf6: - goto cutIf5; - } - if (YP.greaterThanOrEqual(C2, new ListPair(48, Atom.NIL))) - { - if (YP.lessThanOrEqual(C2, new ListPair(57, Atom.NIL))) - { - foreach (bool l6 in read_name(C2, Chars, LastCh)) - { - yield return false; - } - goto cutIf7; - } - } - foreach (bool l4 in YP.unify(Chars, Atom.NIL)) - { - foreach (bool l5 in YP.unify(LastCh, C2)) - { - yield return false; - } - } - cutIf7: - cutIf5: - cutIf1: - { } - } - } - } - } - - public static IEnumerable read_fullstop(object Ch, object Dict, object Tokens) - { - { - Variable Number = new Variable(); - Variable Tokens1 = new Variable(); - Variable Chars = new Variable(); - Variable NextCh = new Variable(); - if (YP.lessThanOrEqual(Ch, new ListPair(57, Atom.NIL))) - { - if (YP.greaterThanOrEqual(Ch, new ListPair(48, Atom.NIL))) - { - foreach (bool l4 in YP.unify(Tokens, new ListPair(new Functor1("number", Number), Tokens1))) - { - foreach (bool l5 in read_float(Number, Dict, Tokens1, new ListPair(48, Atom.NIL), Ch)) - { - yield return false; - } - } - goto cutIf1; - } - } - if (YP.greaterThan(Ch, new ListPair(32, Atom.NIL))) - { - foreach (bool l3 in rest_symbol(Ch, Chars, NextCh)) - { - foreach (bool l4 in read_after_atom4(NextCh, Dict, Tokens, new ListPair(46, Chars))) - { - yield return false; - } - } - goto cutIf2; - } - if (YP.greaterThanOrEqual(Ch, 0)) - { - foreach (bool l3 in YP.unify(Tokens, Atom.NIL)) - { - yield return false; - } - goto cutIf3; - } - foreach (bool l2 in formatError(Atom.a("user_error"), Atom.a("~N** end of file just after full stop~n"), Atom.NIL)) - { - } - cutIf3: - cutIf2: - cutIf1: - { } - } - } - - public static IEnumerable read_float(object Number, object Dict, object Tokens, object Digits, object Digit) - { - { - Variable Chars = new Variable(); - Variable Rest = new Variable(); - Variable NextCh = new Variable(); - foreach (bool l2 in prepend(Digits, Chars, Rest)) - { - foreach (bool l3 in read_float4(Digit, Rest, NextCh, Chars)) - { - foreach (bool l4 in YP.number_codes(Number, Chars)) - { - foreach (bool l5 in read_tokens(NextCh, Dict, Tokens)) - { - yield return false; - } - } - } - } - } - } - - public static IEnumerable prepend(object arg1, object arg2, object arg3) - { - { - object X = arg3; - foreach (bool l2 in YP.unify(arg1, Atom.NIL)) - { - foreach (bool l3 in YP.unify(arg2, new ListPair(46, X))) - { - yield return false; - } - } - } - { - object Y = arg3; - Variable C = new Variable(); - Variable Cs = new Variable(); - Variable X = new Variable(); - foreach (bool l2 in YP.unify(arg1, new ListPair(C, Cs))) - { - foreach (bool l3 in YP.unify(arg2, new ListPair(C, X))) - { - foreach (bool l4 in prepend(Cs, X, Y)) - { - yield return false; - } - } - } - } - } - - public static IEnumerable read_float4(object C1, object arg2, object NextCh, object Total) - { - { - Variable Chars = new Variable(); - Variable C2 = new Variable(); - Variable C3 = new Variable(); - Variable C4 = new Variable(); - Variable More = new Variable(); - foreach (bool l2 in YP.unify(arg2, new ListPair(C1, Chars))) - { - foreach (bool l3 in YP.get_code(C2)) - { - if (YP.greaterThanOrEqual(C2, new ListPair(48, Atom.NIL))) - { - if (YP.lessThanOrEqual(C2, new ListPair(57, Atom.NIL))) - { - foreach (bool l6 in read_float4(C2, Chars, NextCh, Total)) - { - yield return false; - } - goto cutIf1; - } - } - if (YP.equal(YP.bitwiseOr(C2, 32), new ListPair(101, Atom.NIL))) - { - foreach (bool l5 in YP.get_code(C3)) - { - if (YP.equal(C3, new ListPair(45, Atom.NIL))) - { - foreach (bool l7 in YP.get_code(C4)) - { - foreach (bool l8 in YP.unify(Chars, new ListPair(C2, new ListPair(45, More)))) - { - if (YP.greaterThanOrEqual(C4, new ListPair(48, Atom.NIL))) - { - if (YP.lessThanOrEqual(C4, new ListPair(57, Atom.NIL))) - { - foreach (bool l11 in read_exponent(C4, More, NextCh)) - { - yield return false; - } - goto cutIf4; - } - } - foreach (bool l9 in YP.unify(More, Atom.NIL)) - { - foreach (bool l10 in formatError(Atom.a("user_error"), Atom.a("~N** Missing exponent in ~s~n"), new ListPair(Total, Atom.NIL))) - { - } - } - foreach (bool l9 in YP.unify(More, new ListPair(48, Atom.NIL))) - { - foreach (bool l10 in YP.unify(NextCh, C4)) - { - yield return false; - } - } - cutIf4: - { } - } - } - goto cutIf3; - } - if (YP.equal(C3, new ListPair(43, Atom.NIL))) - { - foreach (bool l7 in YP.get_code(C4)) - { - foreach (bool l8 in YP.unify(Chars, new ListPair(C2, More))) - { - if (YP.greaterThanOrEqual(C4, new ListPair(48, Atom.NIL))) - { - if (YP.lessThanOrEqual(C4, new ListPair(57, Atom.NIL))) - { - foreach (bool l11 in read_exponent(C4, More, NextCh)) - { - yield return false; - } - goto cutIf6; - } - } - foreach (bool l9 in YP.unify(More, Atom.NIL)) - { - foreach (bool l10 in formatError(Atom.a("user_error"), Atom.a("~N** Missing exponent in ~s~n"), new ListPair(Total, Atom.NIL))) - { - } - } - foreach (bool l9 in YP.unify(More, new ListPair(48, Atom.NIL))) - { - foreach (bool l10 in YP.unify(NextCh, C4)) - { - yield return false; - } - } - cutIf6: - { } - } - } - goto cutIf5; - } - foreach (bool l6 in YP.unify(C4, C3)) - { - foreach (bool l7 in YP.unify(Chars, new ListPair(C2, More))) - { - if (YP.greaterThanOrEqual(C4, new ListPair(48, Atom.NIL))) - { - if (YP.lessThanOrEqual(C4, new ListPair(57, Atom.NIL))) - { - foreach (bool l10 in read_exponent(C4, More, NextCh)) - { - yield return false; - } - goto cutIf7; - } - } - foreach (bool l8 in YP.unify(More, Atom.NIL)) - { - foreach (bool l9 in formatError(Atom.a("user_error"), Atom.a("~N** Missing exponent in ~s~n"), new ListPair(Total, Atom.NIL))) - { - } - } - foreach (bool l8 in YP.unify(More, new ListPair(48, Atom.NIL))) - { - foreach (bool l9 in YP.unify(NextCh, C4)) - { - yield return false; - } - } - cutIf7: - { } - } - } - cutIf5: - cutIf3: - { } - } - goto cutIf2; - } - foreach (bool l4 in YP.unify(Chars, Atom.NIL)) - { - foreach (bool l5 in YP.unify(NextCh, C2)) - { - yield return false; - } - } - cutIf2: - cutIf1: - { } - } - } - } - } - - public static IEnumerable read_exponent(object C1, object arg2, object NextCh) - { - { - Variable Chars = new Variable(); - Variable C2 = new Variable(); - foreach (bool l2 in YP.unify(arg2, new ListPair(C1, Chars))) - { - foreach (bool l3 in YP.get_code(C2)) - { - if (YP.greaterThanOrEqual(C2, new ListPair(48, Atom.NIL))) - { - if (YP.lessThanOrEqual(C2, new ListPair(57, Atom.NIL))) - { - foreach (bool l6 in read_exponent(C2, Chars, NextCh)) - { - yield return false; - } - goto cutIf1; - } - } - foreach (bool l4 in YP.unify(Chars, Atom.NIL)) - { - foreach (bool l5 in YP.unify(NextCh, C2)) - { - yield return false; - } - } - cutIf1: - { } - } - } - } - } - - public static IEnumerable read_number(object C1, object Dict, object arg3) - { - { - Variable Number = new Variable(); - Variable Tokens = new Variable(); - Variable C2 = new Variable(); - Variable N = new Variable(); - Variable C = new Variable(); - Variable C3 = new Variable(); - Variable Digits = new Variable(); - foreach (bool l2 in YP.unify(arg3, new ListPair(new Functor1("number", Number), Tokens))) - { - foreach (bool l3 in read_number4(C1, C2, 0, N)) - { - if (YP.equal(C2, 39)) - { - if (YP.greaterThanOrEqual(N, 2)) - { - if (YP.lessThanOrEqual(N, 36)) - { - foreach (bool l7 in read_based(N, 0, Number, C)) - { - foreach (bool l8 in read_tokens(C, Dict, Tokens)) - { - yield return false; - } - } - goto cutIf2; - } - } - if (YP.equal(N, 0)) - { - foreach (bool l6 in YP.get_code(C3)) - { - foreach (bool l7 in read_char(C3, -1, Number, C)) - { - foreach (bool l8 in read_tokens(C, Dict, Tokens)) - { - yield return false; - } - } - } - goto cutIf3; - } - foreach (bool l5 in formatError(Atom.a("user_error"), Atom.a("~N** ~d' read as ~d '~n"), new ListPair(N, new ListPair(N, Atom.NIL)))) - { - foreach (bool l6 in YP.unify(Number, N)) - { - foreach (bool l7 in YP.unify(C, C2)) - { - foreach (bool l8 in read_tokens(C, Dict, Tokens)) - { - yield return false; - } - } - } - } - cutIf3: - cutIf2: - goto cutIf1; - } - if (YP.equal(C2, 46)) - { - foreach (bool l5 in YP.get_code(C3)) - { - if (YP.greaterThanOrEqual(C3, new ListPair(48, Atom.NIL))) - { - if (YP.lessThanOrEqual(C3, new ListPair(57, Atom.NIL))) - { - foreach (bool l8 in YP.number_codes(N, Digits)) - { - foreach (bool l9 in read_float(Number, Dict, Tokens, Digits, C3)) - { - yield return false; - } - } - goto cutIf5; - } - } - foreach (bool l6 in YP.unify(Number, N)) - { - foreach (bool l7 in read_fullstop(C3, Dict, Tokens)) - { - yield return false; - } - } - cutIf5: - { } - } - goto cutIf4; - } - foreach (bool l4 in YP.unify(Number, N)) - { - foreach (bool l5 in read_tokens(C2, Dict, Tokens)) - { - yield return false; - } - } - cutIf4: - cutIf1: - { } - } - } - } - } - - public static IEnumerable read_number4(object C0, object C, object N0, object N) - { - { - Variable N1 = new Variable(); - Variable C1 = new Variable(); - if (YP.greaterThanOrEqual(C0, new ListPair(48, Atom.NIL))) - { - if (YP.lessThanOrEqual(C0, new ListPair(57, Atom.NIL))) - { - foreach (bool l4 in YP.unify(N1, YP.add(YP.subtract(YP.multiply(N0, 10), new ListPair(48, Atom.NIL)), C0))) - { - foreach (bool l5 in YP.get_code(C1)) - { - foreach (bool l6 in read_number4(C1, C, N1, N)) - { - yield return false; - } - } - } - goto cutIf1; - } - } - if (YP.equal(C0, 95)) - { - foreach (bool l3 in YP.get_code(C1)) - { - foreach (bool l4 in read_number4(C1, C, N0, N)) - { - yield return false; - } - } - goto cutIf2; - } - foreach (bool l2 in YP.unify(C, C0)) - { - foreach (bool l3 in YP.unify(N, N0)) - { - yield return false; - } - } - cutIf2: - cutIf1: - { } - } - } - - public static IEnumerable read_based(object Base, object N0, object N, object C) - { - { - Variable C1 = new Variable(); - Variable Digit = new Variable(); - Variable N1 = new Variable(); - foreach (bool l2 in YP.get_code(C1)) - { - if (YP.greaterThanOrEqual(C1, new ListPair(48, Atom.NIL))) - { - if (YP.lessThanOrEqual(C1, new ListPair(57, Atom.NIL))) - { - foreach (bool l5 in YP.unify(Digit, YP.subtract(C1, new ListPair(48, Atom.NIL)))) - { - if (YP.lessThan(Digit, Base)) - { - foreach (bool l7 in YP.unify(N1, YP.add(YP.multiply(N0, Base), Digit))) - { - foreach (bool l8 in read_based(Base, N1, N, C)) - { - yield return false; - } - } - goto cutIf2; - } - if (YP.equal(C1, new ListPair(95, Atom.NIL))) - { - foreach (bool l7 in read_based(Base, N0, N, C)) - { - yield return false; - } - goto cutIf3; - } - foreach (bool l6 in YP.unify(N, N0)) - { - foreach (bool l7 in YP.unify(C, C1)) - { - yield return false; - } - } - cutIf3: - cutIf2: - { } - } - goto cutIf1; - } - } - if (YP.greaterThanOrEqual(C1, new ListPair(65, Atom.NIL))) - { - if (YP.lessThanOrEqual(C1, new ListPair(90, Atom.NIL))) - { - foreach (bool l5 in YP.unify(Digit, YP.subtract(C1, YP.subtract(new ListPair(65, Atom.NIL), 10)))) - { - if (YP.lessThan(Digit, Base)) - { - foreach (bool l7 in YP.unify(N1, YP.add(YP.multiply(N0, Base), Digit))) - { - foreach (bool l8 in read_based(Base, N1, N, C)) - { - yield return false; - } - } - goto cutIf5; - } - if (YP.equal(C1, new ListPair(95, Atom.NIL))) - { - foreach (bool l7 in read_based(Base, N0, N, C)) - { - yield return false; - } - goto cutIf6; - } - foreach (bool l6 in YP.unify(N, N0)) - { - foreach (bool l7 in YP.unify(C, C1)) - { - yield return false; - } - } - cutIf6: - cutIf5: - { } - } - goto cutIf4; - } - } - if (YP.greaterThanOrEqual(C1, new ListPair(97, Atom.NIL))) - { - if (YP.lessThanOrEqual(C1, new ListPair(122, Atom.NIL))) - { - foreach (bool l5 in YP.unify(Digit, YP.subtract(C1, YP.subtract(new ListPair(97, Atom.NIL), 10)))) - { - if (YP.lessThan(Digit, Base)) - { - foreach (bool l7 in YP.unify(N1, YP.add(YP.multiply(N0, Base), Digit))) - { - foreach (bool l8 in read_based(Base, N1, N, C)) - { - yield return false; - } - } - goto cutIf8; - } - if (YP.equal(C1, new ListPair(95, Atom.NIL))) - { - foreach (bool l7 in read_based(Base, N0, N, C)) - { - yield return false; - } - goto cutIf9; - } - foreach (bool l6 in YP.unify(N, N0)) - { - foreach (bool l7 in YP.unify(C, C1)) - { - yield return false; - } - } - cutIf9: - cutIf8: - { } - } - goto cutIf7; - } - } - foreach (bool l3 in YP.unify(Digit, 99)) - { - if (YP.lessThan(Digit, Base)) - { - foreach (bool l5 in YP.unify(N1, YP.add(YP.multiply(N0, Base), Digit))) - { - foreach (bool l6 in read_based(Base, N1, N, C)) - { - yield return false; - } - } - goto cutIf10; - } - if (YP.equal(C1, new ListPair(95, Atom.NIL))) - { - foreach (bool l5 in read_based(Base, N0, N, C)) - { - yield return false; - } - goto cutIf11; - } - foreach (bool l4 in YP.unify(N, N0)) - { - foreach (bool l5 in YP.unify(C, C1)) - { - yield return false; - } - } - cutIf11: - cutIf10: - { } - } - cutIf7: - cutIf4: - cutIf1: - { } - } - } - } - - public static IEnumerable read_char(object Char, object Quote, object Result, object Next) - { - { - Variable C1 = new Variable(); - Variable C2 = new Variable(); - Variable C3 = new Variable(); - Variable Ch = new Variable(); - if (YP.equal(Char, 92)) - { - foreach (bool l3 in YP.get_code(C1)) - { - if (YP.lessThan(C1, 0)) - { - foreach (bool l5 in formatError(Atom.a("user_error"), Atom.a("~N** end of file in ~cquoted~c~n"), new ListPair(Quote, new ListPair(Quote, Atom.NIL)))) - { - foreach (bool l6 in YP.unify(Result, -1)) - { - foreach (bool l7 in YP.unify(Next, C1)) - { - yield return false; - } - } - } - goto cutIf2; - } - if (YP.lessThanOrEqual(C1, new ListPair(32, Atom.NIL))) - { - foreach (bool l5 in YP.get_code(C2)) - { - foreach (bool l6 in read_char(C2, Quote, Result, Next)) - { - yield return false; - } - } - goto cutIf3; - } - if (YP.equal(YP.bitwiseOr(C1, 32), new ListPair(99, Atom.NIL))) - { - foreach (bool l5 in YP.get_code(C2)) - { - foreach (bool l6 in read_char(C2, Quote, Result, Next)) - { - yield return false; - } - } - goto cutIf4; - } - if (YP.lessThanOrEqual(C1, new ListPair(55, Atom.NIL))) - { - if (YP.greaterThanOrEqual(C1, new ListPair(48, Atom.NIL))) - { - foreach (bool l6 in YP.get_code(C2)) - { - if (YP.lessThanOrEqual(C2, new ListPair(55, Atom.NIL))) - { - if (YP.greaterThanOrEqual(C2, new ListPair(48, Atom.NIL))) - { - foreach (bool l9 in YP.get_code(C3)) - { - if (YP.lessThanOrEqual(C3, new ListPair(55, Atom.NIL))) - { - if (YP.greaterThanOrEqual(C3, new ListPair(48, Atom.NIL))) - { - foreach (bool l12 in YP.get_code(Next)) - { - foreach (bool l13 in YP.unify(Result, YP.subtract(YP.add(YP.multiply(YP.add(YP.multiply(C1, 8), C2), 8), C3), YP.multiply(73, new ListPair(48, Atom.NIL))))) - { - yield return false; - } - } - goto cutIf7; - } - } - foreach (bool l10 in YP.unify(Next, C3)) - { - foreach (bool l11 in YP.unify(Result, YP.subtract(YP.add(YP.multiply(C1, 8), C2), YP.multiply(9, new ListPair(48, Atom.NIL))))) - { - yield return false; - } - } - cutIf7: - { } - } - goto cutIf6; - } - } - foreach (bool l7 in YP.unify(Next, C2)) - { - foreach (bool l8 in YP.unify(Result, YP.subtract(C1, new ListPair(48, Atom.NIL)))) - { - yield return false; - } - } - cutIf6: - { } - } - goto cutIf5; - } - } - if (YP.equal(C1, new ListPair(94, Atom.NIL))) - { - foreach (bool l5 in YP.get_code(C2)) - { - if (YP.lessThan(C2, 0)) - { - foreach (bool l7 in formatError(Atom.a("user_error"), Atom.a("~N** end of file in ~c..~c^..~c~n"), ListPair.make(new object[] { Quote, 92, Quote }))) - { - foreach (bool l8 in YP.unify(Result, -1)) - { - foreach (bool l9 in YP.unify(Next, C2)) - { - yield return false; - } - } - } - goto cutIf9; - } - if (YP.equal(C2, new ListPair(63, Atom.NIL))) - { - foreach (bool l7 in YP.unify(Result, 127)) - { - foreach (bool l8 in YP.get_code(Next)) - { - yield return false; - } - } - goto cutIf10; - } - foreach (bool l6 in YP.unify(Result, YP.bitwiseAnd(C2, 31))) - { - foreach (bool l7 in YP.get_code(Next)) - { - yield return false; - } - } - cutIf10: - cutIf9: - { } - } - goto cutIf8; - } - foreach (bool l4 in escape_char(C1, Result)) - { - foreach (bool l5 in YP.get_code(Next)) - { - yield return false; - } - goto cutIf11; - } - foreach (bool l4 in YP.unify(Result, C1)) - { - foreach (bool l5 in YP.get_code(Next)) - { - yield return false; - } - } - cutIf11: - cutIf8: - cutIf5: - cutIf4: - cutIf3: - cutIf2: - { } - } - goto cutIf1; - } - if (YP.equal(Char, Quote)) - { - foreach (bool l3 in YP.get_code(Ch)) - { - if (YP.equal(Ch, Quote)) - { - foreach (bool l5 in YP.unify(Result, Quote)) - { - foreach (bool l6 in YP.get_code(Next)) - { - yield return false; - } - } - goto cutIf13; - } - foreach (bool l4 in YP.unify(Result, -1)) - { - foreach (bool l5 in YP.unify(Next, Ch)) - { - yield return false; - } - } - cutIf13: - { } - } - goto cutIf12; - } - if (YP.lessThan(Char, new ListPair(32, Atom.NIL))) - { - if (YP.notEqual(Char, 9)) - { - if (YP.notEqual(Char, 10)) - { - if (YP.notEqual(Char, 13)) - { - foreach (bool l6 in YP.unify(Result, -1)) - { - foreach (bool l7 in YP.unify(Next, Char)) - { - foreach (bool l8 in formatError(Atom.a("user_error"), Atom.a("~N** Strange character ~d ends ~ctoken~c~n"), ListPair.make(new object[] { Char, Quote, Quote }))) - { - yield return false; - } - } - } - goto cutIf14; - } - } - } - } - foreach (bool l2 in YP.unify(Result, Char)) - { - foreach (bool l3 in YP.get_code(Next)) - { - yield return false; - } - } - cutIf14: - cutIf12: - cutIf1: - { } - } - } -#pragma warning restore 0168, 0219, 0162 - } -} diff --git a/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/YieldProlog/PrologException.cs b/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/YieldProlog/PrologException.cs deleted file mode 100644 index 56ed719..0000000 --- a/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/YieldProlog/PrologException.cs +++ /dev/null @@ -1,159 +0,0 @@ -/* - * Copyright (C) 2007-2008, Jeff Thompson - * - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * * Neither the name of the copyright holder nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -using System; - -namespace OpenSim.Region.ScriptEngine.DotNetEngine.Compiler.YieldProlog -{ - /// - /// A PrologException is used as the exception thrown by YP.throw(Term). - /// - public class PrologException : Exception - { - public readonly object _term; - - /// - /// Create a PrologException with the given Term. The printable exception message is the full Term. - /// - /// the term of the exception - public PrologException(object Term) - : base(YP.getValue(Term).ToString()) - { - _term = YP.makeCopy(Term, new Variable.CopyStore()); - } - - /// - /// Create a PrologException where the Term is error(ErrorTerm, Message). - /// This uses YP.makeCopy to copy the ErrorTerm and Message so that they are valid after unbinding. - /// - /// the error term of the error - /// the message term of the error. If this is a string, it is converted to an - /// Atom so it can be used by Prolog code. - /// Message, converted to a string, is use as the printable exception message. - /// - public PrologException(object ErrorTerm, object Message) - : base(YP.getValue(Message).ToString()) - { - if (Message is string) - Message = Atom.a((string)Message); - _term = YP.makeCopy(new Functor2(Atom.a("error"), ErrorTerm, Message), new Variable.CopyStore()); - } - - public class TypeErrorInfo - { - public readonly Atom _Type; - public readonly object _Culprit; - public readonly object _Message; - - public TypeErrorInfo(Atom Type, object Culprit, object Message) - { - _Type = Type; - _Culprit = Culprit; - _Message = Message; - } - } - /// - /// Return the TypeErrorInfo for this exception, or null if _term does not match - /// error(type_error(Type, Culprit), Message). - /// - /// - public TypeErrorInfo getTypeErrorInfo() - { - if (!(_term is Functor2 && ((Functor2)_term)._name._name == "error")) - return null; - object errorTerm = ((Functor2)_term)._arg1; - if (!(errorTerm is Functor2 && ((Functor2)errorTerm)._name._name == "type_error")) - return null; - if (!(((Functor2)errorTerm)._arg1 is Atom)) - return null; - return new TypeErrorInfo - ((Atom)((Functor2)errorTerm)._arg1, ((Functor2)errorTerm)._arg2, ((Functor2)_term)._arg2); - } - - public class ExistenceErrorInfo - { - public readonly Atom _Type; - public readonly object _Culprit; - public readonly object _Message; - - public ExistenceErrorInfo(Atom Type, object Culprit, object Message) - { - _Type = Type; - _Culprit = Culprit; - _Message = Message; - } - - /// - /// If _Type is procedure and _Culprit is name/artity, return the name. Otherwise return null. - /// - /// - public object getProcedureName() - { - if (!(_Type._name == "procedure" && - _Culprit is Functor2 && ((Functor2)_Culprit)._name == Atom.SLASH)) - return null; - return ((Functor2)_Culprit)._arg1; - } - - /// - /// If _Type is procedure and _Culprit is name/arity and arity is an integer, return the arity. - /// Otherwise return -1. - /// - /// - public int getProcedureArity() - { - if (!(_Type._name == "procedure" && - _Culprit is Functor2 && ((Functor2)_Culprit)._name == Atom.SLASH)) - return -1; - if (!(((Functor2)_Culprit)._arg2 is int)) - return -1; - return (int)((Functor2)_Culprit)._arg2; - } - } - /// - /// Return the ExistenceErrorInfo for this exception, or null if _term does not match - /// error(existence_error(Type, Culprit), Message). If the returned ExistenceErrorInfo _Culprit is - /// procedure, you can use its getProcedureName and getProcedureArity. - /// - /// - public ExistenceErrorInfo getExistenceErrorInfo() - { - if (!(_term is Functor2 && ((Functor2)_term)._name._name == "error")) - return null; - object errorTerm = ((Functor2)_term)._arg1; - if (!(errorTerm is Functor2 && ((Functor2)errorTerm)._name._name == "existence_error")) - return null; - if (!(((Functor2)errorTerm)._arg1 is Atom)) - return null; - return new ExistenceErrorInfo - ((Atom)((Functor2)errorTerm)._arg1, ((Functor2)errorTerm)._arg2, ((Functor2)_term)._arg2); - } - } -} diff --git a/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/YieldProlog/README.TXT b/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/YieldProlog/README.TXT deleted file mode 100644 index 3c11938..0000000 --- a/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/YieldProlog/README.TXT +++ /dev/null @@ -1,514 +0,0 @@ -YPOS: YieldProlog for OpenSim - - a compiler from Prolog to OpenSim compatible C# scripts - -Ported by Kino Coursey and Douglas Miles at Daxtron Labs. -Based on Jeff Thompson Yield Prolog, http://yieldprolog.sourceforge.net/ -For Prolog see http://en.wikipedia.org/wiki/Prolog - - -INTRODUCTION - -This folder contains code to implement a Prolog compiler using the "Yield Statement" found in C#, Javascript, and Python. -The original Yield Prolog system can transform Prolog programs into C# code. -In this system we detect and extract YieldProlog code (with "//YP" as the first four characters in the script) and seperate it from any c# code ("marked by "//CS"). -The YP code is transformed to C# and prepended to the "//CS" section, and passed as a bundel to the existing C# compiler. -The end result is Prolog can interface to OpenSim using the existing "//CS" functionality, and C# can call the compiled Prolog. -As such YP allows both declaritive and procedural programming in a 3D script enabled environment. - -FEATURES -* Allows implementation of logic programming for objects and agents. -* C#/Javascript/Python as intermediate language -* Yield Prolog has relatively high speed of execution which is important in OpenSim. http://yieldprolog.sourceforge.net/benchmarks.html -* It is compatable with the existing C#/Mono based system. -* Yield Prolog is BSD license -* Calling Prolog from C# scripts -* Calling C# functions (with LSL and OS functions) from Prolog -* Prolog dynamic database -* Edinburgh, Cocksin & Mellish style syntax. -* Compiler is generated by compiling the Prolog descrition of itself into C# -* Same script entry interface as LSL - -* Yield Prolog 1.0.1 Released : it passes all but 9 of the 421 tests in the ISO Prolog test suite (97.8%). - -TODO -* Utilize ability to generate Javascript and Python code -* Integrate Prolog database with Sim -* Translation error reporting back to the editor -* Communications via message passing -* Interface to external inference engines - -POSSIBILITIES -* Inworld expert systems -* Parallel logic programming and expert systems -* Ontology based processing -* Knowledge based alerting, accessing and business rules - For instance, listen on channel x, filter the events and broadcast alerts on channel y - or send IM, emails etc. - - -USAGE: - -Add "yp" as an allowed compiler - -OpenSim.ini -[ScriptEngine.DotNetEngine] -AllowedCompilers=lsl,cs,js,vb,yp - -Enter scripts using the inworld editing process. Scripts have the following format. -The first line of a file must have "//yp". - -//yp - -//CS - - - - - - - -C# code calling a Prolog Predicate: ------------------------------------ -The Prolog predicate is transformed into a C# boolean function. So the general calling format is: - foreach( bool var in prolog_predicate(ARGS)) {}; - -I/O is via using a string reader and writer in conjunction with YP.See() and YP.Tell() - - StringWriter PrologOutuput= new StringWriter(); - StringReader PrologInput= new StringReader(myInputString); - YP.see(PrologInput); - YP.tell(PrologOutuput); - - YP.seen(); - YP.told(); - StringBuilder builder = PrologOutput.GetStringBuilder(); - string finaloutput = builder.ToString(); - -Any prolog reads and writes will be to the passed StringReader and StringWriter. In fact any TextReader/TextWriter class can be used. - -Strings in Prolog are stored as Atom's and you need to use an Atom object to match. - -\\yp -wanted('bob'). -\\cs -string Who="bob"; -foreach( bool ans in wanted(Atom.a(Who) )){}; - - -Prolog code calling a C# function: ------------------------------------ -The prolog code uses the script_event('name_of_function',ARGS) builtin, which is transformed into the function call. -The C# function called uses "PrologCallback" and returns a boolean. - - - -Dynamic database assertions: ------------------------------------ - -void assertdb2(string predicate, string arg1, string arg2) -{ - name = Atom.a(predicate); - YP.assertFact(name, new object[] { arg1, arg2 }); -} - -void retractdb2(string predicate, string arg1, string arg2) -{ - name = Atom.a(predicate); - YP.retractFact(name, new object[] { arg1, arg2 }); -} - ------------ IMPORT EXTERNAL FUNCTIONS ---------- -Using 'import' to call a static function - -Taken mostly from http://yieldprolog.sourceforge.net/tutorial4.html - -If we want to call a static function but it is not defined in the Prolog code, we can simply add an import directive. -(In Prolog, if you start a line with :- it is a directive to the compiler. Don't forget to end with a period.): - -:- import('', [parent/2]). -uncle(Person, Uncle):- parent(Person, Parent), brother(Parent, Uncle). - -The import directive has two arguments. -The first argument is the module where the imported function is found, which is always ''. -For C#, this means the imported function is in the same class as the calling function. -For Javascript and Python, this means the imported function is in the global scope. -The second argument to import is the comma-separated list of imported functions, where each member of the list is 'name/n', where 'name' is the name of the function and 'n' is the number of arguments. -In this example, parent has two arguments, so we use parent/2. - -Note: you can use an imported function in a dynamically defined goal, or a function in another class. - -:- import('', [parent/2]). -uncle(Person, Uncle) :- Goal = parent(Person, Parent), Goal, brother(Parent, Uncle). - -:- import('', ['OtherClass.parent'/2]). -uncle(Person, Uncle) :- 'OtherClass.parent'(Person, Parent), brother(Parent, Uncle). - ---------- Round-about Hello Wonderful world ---------- -//yp -:-import('',[sayit/1]). -sayhello(X):-sayit(X). - -//cs -public void default_event_state_entry() - { - llSay(0,"prolog hello."); - foreach( bool ans in sayhello(Atom.a(@"wonderful world") )){}; - } - -PrologCallback sayit(object ans) - { - llSay(0,"sayit1"); - string msg = "one answer is :"+((Variable)ans).getValue(); - llSay(0,msg); - yield return false; - } - ------------------- UPDATES ----------------- -Yield Prolog 1.0 Released : It passes all but 15 of the 421 tests in the ISO Prolog test suite. - -New Features: -* Added support for Prolog predicates read and read_term. -* In see, Added support for a char code list as the input. -Using this as the input for "fred" makes -set_prolog_flag(double_quotes, atom) and -set_prolog_flag(double_quotes, chars) pass the ISO test suite. - -Fixed Bugs: -* In atom_chars, check for unbound tail in the char list. -This makes atom_chars pass the ISO test suite. -* In current_predicate, also check for static functions. -This makes current_predicate pass the ISO test suite. - -Known Issues: - -Here are the 9 errors of the 421 tests in the ISO test suite in -YieldProlog\source\prolog\isoTestSuite.P . -Some of these have a good excuse for why Yield Prolog produces the error. The rest will be addressed in a future maintenance release. - -Goal: call((fail, 1)) -Expected: type_error(callable, (fail, 1)) -Extra Solutions found: failure - -Goal: call((write(3), 1)) -Expected: type_error(callable, (write(3), 1)) -Extra Solutions found: type_error(callable, 1) - -Goal: call((1; true)) -Expected: type_error(callable, (1 ; true)) -Extra Solutions found: type_error(callable, 1) - -Goal: (catch(true, C, write('something')), throw(blabla)) -Expected: system_error -Extra Solutions found: unexpected_ball(blabla) - -Goal: catch(number_chars(A,L), error(instantiation_error, _), fail) -Expected: failure -Extra Solutions found: instantiation_error - -Goal: Goal: (X = 1 + 2, 'is'(Y, X * 3)) -Expected: [[X <-- (1 + 2), Y <-- 9]] -Extra Solutions found: type_error(evaluable, /(+, 2)) - -Goal: 'is'(77, N) -Expected: instantiation_error -Extra Solutions found: N <-- 77) - -Goal: \+(!, fail) -Expected: success -Extra Solutions found: failure - -((X=1;X=2), \+((!,fail))) -Expected: [[X <-- 1],[X <-- 2]] -Extra Solutions found: failure - - - - - -========================= APPENDIX A: touch test ================================ - - - =================================== -Input YP Code - =================================== -//yp - mydb('field2','field1'). - mydb('andy','jane'). - mydb('carl','dan'). - mydb('andy','bill'). - mydb('andy','betty'). - - call_me(X):-mydb(X,Y) , respond(Y). - respond(X):- script_event('sayit',X). - -//cs - public void default_event_touch_start(int N ) - { - llSay(0,"pstart1"); - foreach( bool ans in call_me(Atom.a(@"andy") )){}; - llSay(0,"pstop2"); - } - - public void default_event_state_entry() - { - llSay(0,"prolog tester active."); - } - -PrologCallback sayit(object ans) - { - llSay(0,"sayit1"); - string msg = "one answer is :"+((Variable)ans).getValue(); - llSay(0,msg); - yield return false; - } - - - =================================== -Generated CS Code - =================================== -using OpenSim.Region.ScriptEngine.DotNetEngine.Compiler.YieldProlog;using OpenSim.Region.ScriptEngine.Common; using System.Collections.Generic; -namespace SecondLife { public class Script : OpenSim.Region.ScriptEngine.Common.ScriptBaseClass { -static OpenSim.Region.ScriptEngine.DotNetEngine.Compiler.YieldProlog.YP YP=null;public Script() { YP= new OpenSim.Region.ScriptEngine.DotNetEngine.Compiler.YieldProlog.YP(); } -//cs - public void default_event_touch_start(int N ) - { - llSay(0,"pstart1"); - foreach( bool ans in call_me(Atom.a(@"carl") )){}; - llSay(0,"pstop2"); - } - - public void default_event_state_entry() - { - llSay(0,"prolog tester active."); - } - -public IEnumerable sayit(object ans) - { - llSay(0,"sayit1"); - string msg = "one answer is :"+((Variable)ans).getValue(); - llSay(0,msg); - yield return false; - } - - -//YPEncoded -public IEnumerable mydb(object arg1, object arg2) { - { - foreach (bool l2 in YP.unify(arg1, Atom.a(@"carl"))) { - foreach (bool l3 in YP.unify(arg2, Atom.a(@"dan"))) { - yield return false; - } - } - } - { - foreach (bool l2 in YP.unify(arg1, Atom.a(@"andy"))) { - foreach (bool l3 in YP.unify(arg2, Atom.a(@"bill"))) { - yield return false; - } - } - } - { - foreach (bool l2 in YP.unify(arg1, Atom.a(@"andy"))) { - foreach (bool l3 in YP.unify(arg2, Atom.a(@"betty"))) { - yield return false; - } - } - } -} - -public IEnumerable call_me(object X) { - { - Variable Y = new Variable(); - foreach (bool l2 in mydb(X, Y)) { - foreach (bool l3 in respond(Y)) { - yield return false; - } - } - } -} - -public IEnumerable respond(object X) { - { - foreach (bool l2 in this.sayit( X)) { - yield return false; - } - } -} - -} } - - - -========================= APPENDIX B:SENSOR INFORMED SCRIPT ===================== - - - =================================== -Input YP Code - =================================== -//yp - -nop. - -good('Daxxon Kinoc'). -good('Fluffy Kitty'). - -bad('Eric Evil'). -bad('Spikey Plant'). - -prolog_notify(X) :- good(X) , script_event('accept',X). -prolog_notify(X) :- bad(X) , script_event('reject',X). - - -//cs - -public void default_event_state_entry() - { - llSay(0,"prolog sensor tester active."); - - // Start a sensor looking for Agents - llSensorRepeat("","",AGENT, 10, PI,20); - - } - -public void default_event_sensor(int number_detected ) -{ - int i; - for(i=0;i< number_detected ;i++) - { - string dName = llDetectedName(i); - string dOwner = llDetectedName(i); - foreach(bool response in prolog_notify(Atom.a(dName)) ){}; - foreach(bool response in prolog_notify(dOwner) ){}; - llSay(0,"Saw "+dName); - } -} - -string decodeToString(object obj) -{ - if (obj is Variable) { return (string) ((Variable)obj).getValue();} - if (obj is Atom) { return (string) ((Atom)obj)._name;} - return "unknown type"; -} - -PrologCallback accept(object ans) - { - string msg = "Welcoming :"+decodeToString(ans); - llSay(0,msg); - yield return false; - } - -PrologCallback reject(object ans) - { - string msg = "Watching :"+decodeToString(ans); - llSay(0,msg); - yield return false; - } - - - =================================== -Generated CS Code - =================================== - -using OpenSim.Region.ScriptEngine.DotNetEngine.Compiler.YieldProlog; using OpenSim.Region.ScriptEngine.Common; using System.Collections.Generic; -namespace SecondLife { public class Script : OpenSim.Region.ScriptEngine.Common.ScriptBaseClass { -static OpenSim.Region.ScriptEngine.DotNetEngine.Compiler.YieldProlog.YP YP=null; public Script() { YP= new OpenSim.Region.ScriptEngine.DotNetEngine.Compiler.YieldProlog.YP(); } -//cs - -public void default_event_state_entry() - { - llSay(0,"prolog sensor tester active."); - - // Start a sensor looking for Agents - llSensorRepeat("","",AGENT, 10, PI,20); - - } - -public void default_event_sensor(int number_detected ) -{ - int i; - for(i=0;i< number_detected ;i++) - { - string dName = llDetectedName(i); - string dOwner = llDetectedName(i); - foreach(bool response in prolog_notify(Atom.a(dName)) ){}; - foreach(bool response in prolog_notify(dOwner) ){}; - llSay(0,"Saw "+dName); - } -} - -string decodeToString(object obj) -{ - if (obj is Variable) { return (string) ((Variable)obj).getValue();} - if (obj is Atom) { return (string) ((Atom)obj)._name;} - return "unknown type"; -} - -public IEnumerable accept(object ans) - { - string msg = "Welcoming :"+decodeToString(ans); - llSay(0,msg); - yield return false; - } - -public IEnumerable reject(object ans) - { - string msg = "Watching :"+decodeToString(ans); - llSay(0,msg); - yield return false; - } - - -//YPEncoded -public IEnumerable yp_nop_header_nop() { - { - yield return false; - } -} - -public IEnumerable good(object arg1) { - { - foreach (bool l2 in YP.unify(arg1, Atom.a(@"Daxxon Kinoc"))) { - yield return false; - } - } - { - foreach (bool l2 in YP.unify(arg1, Atom.a(@"Fluffy Kitty"))) { - yield return false; - } - } -} - -public IEnumerable bad(object arg1) { - { - foreach (bool l2 in YP.unify(arg1, Atom.a(@"Eric Evil"))) { - yield return false; - } - } - { - foreach (bool l2 in YP.unify(arg1, Atom.a(@"Spikey Plant"))) { - yield return false; - } - } -} - -public IEnumerable prolog_notify(object X) { - { - foreach (bool l2 in good(X)) { - foreach (bool l3 in this.accept( X)) { - yield return false; - } - } - } - { - foreach (bool l2 in bad(X)) { - foreach (bool l3 in this.reject( X)) { - yield return false; - } - } - } -} - -} } - - diff --git a/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/YieldProlog/UndefinedPredicateException.cs b/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/YieldProlog/UndefinedPredicateException.cs deleted file mode 100644 index 22a22b4..0000000 --- a/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/YieldProlog/UndefinedPredicateException.cs +++ /dev/null @@ -1,62 +0,0 @@ -/* - * Copyright (C) 2007-2008, Jeff Thompson - * - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * * Neither the name of the copyright holder nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -using System; - -namespace OpenSim.Region.ScriptEngine.DotNetEngine.Compiler.YieldProlog -{ - /// - /// An UndefinedPredicateException extends PrologException to create an existence_error exception. - /// - public class UndefinedPredicateException : PrologException - { - private Atom _predicateName; - private int _arity; - - public UndefinedPredicateException(object message, Atom predicateName, int arity) - : base(new Functor2 - (Atom.a("existence_error"), Atom.a("procedure"), new Functor2(Atom.a("/"), predicateName, arity)), - message) - { - _predicateName = predicateName; - _arity = arity; - } - - public Atom PredicateName - { - get { return _predicateName; } - } - - public int Arity - { - get { return _arity; } - } - } -} diff --git a/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/YieldProlog/Variable.cs b/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/YieldProlog/Variable.cs deleted file mode 100644 index a9bd563..0000000 --- a/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/YieldProlog/Variable.cs +++ /dev/null @@ -1,222 +0,0 @@ -/* - * Copyright (C) 2007-2008, Jeff Thompson - * - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * * Neither the name of the copyright holder nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -using System; -using System.Collections; -using System.Collections.Generic; - -namespace OpenSim.Region.ScriptEngine.DotNetEngine.Compiler.YieldProlog -{ - public interface IUnifiable - { - IEnumerable unify(object arg); - void addUniqueVariables(List variableSet); - object makeCopy(Variable.CopyStore copyStore); - bool termEqual(object term); - bool ground(); - } - - /// - /// A Variable is passed to a function so that it can be unified with - /// value or another Variable. See getValue and unify for details. - /// - public class Variable : IUnifiable - { - // Use _isBound separate from _value so that it can be bound to any value, - // including null. - private bool _isBound = false; - private object _value; - - /// - /// If this Variable is unbound, then just return this Variable. - /// Otherwise, if this has been bound to a value with unify, return the value. - /// If the bound value is another Variable, this follows the "variable chain" - /// to the end and returns the final value, or the final Variable if it is unbound. - /// For more details, see http://yieldprolog.sourceforge.net/tutorial1.html - /// - /// - public object getValue() - { - if (!_isBound) - return this; - - object result = _value; - while (result is Variable) - { - if (!((Variable)result)._isBound) - return result; - - // Keep following the Variable chain. - result = ((Variable)result)._value; - } - - return result; - } - - /// - /// If this Variable is bound, then just call YP.unify to unify this with arg. - /// (Note that if arg is an unbound Variable, then YP.unify will bind it to - /// this Variable's value.) - /// Otherwise, bind this Variable to YP.getValue(arg) and yield once. After the - /// yield, return this Variable to the unbound state. - /// For more details, see http://yieldprolog.sourceforge.net/tutorial1.html - /// - /// - /// - public IEnumerable unify(object arg) - { - if (!_isBound) - { - _value = YP.getValue(arg); - if (_value == this) - // We are unifying this unbound variable with itself, so leave it unbound. - yield return false; - else - { - _isBound = true; - try - { - yield return false; - } - finally - { - // Remove the binding. - _isBound = false; - } - } - } - else - { - // disable warning on l1, don't see how we can - // code this differently - #pragma warning disable 0168 - foreach (bool l1 in YP.unify(this, arg)) - yield return false; - #pragma warning restore 0168 - } - } - - public override string ToString() - { - object value = getValue(); - if (value == this) - return "_Variable"; - else - return getValue().ToString(); - } - - /// - /// If bound, call YP.addUniqueVariables on the value. Otherwise, if this unbound - /// variable is not already in variableSet, add it. - /// - /// - public void addUniqueVariables(List variableSet) - { - if (_isBound) - YP.addUniqueVariables(getValue(), variableSet); - else - { - if (variableSet.IndexOf(this) < 0) - variableSet.Add(this); - } - } - - /// - /// If bound, return YP.makeCopy for the value, else return copyStore.getCopy(this). - /// However, if copyStore is null, just return this. - /// - /// - /// - public object makeCopy(Variable.CopyStore copyStore) - { - if (_isBound) - return YP.makeCopy(getValue(), copyStore); - else - return copyStore == null ? this : copyStore.getCopy(this); - } - - public bool termEqual(object term) - { - if (_isBound) - return YP.termEqual(getValue(), term); - else - return this == YP.getValue(term); - } - - public bool ground() - { - if (_isBound) - // This is usually called by YP.ground which already did getValue, so this - // should never be reached, but check anyway. - return YP.ground(getValue()); - else - return false; - } - - /// - /// A CopyStore is used by makeCopy to track which Variable objects have - /// been copied. - /// - public class CopyStore - { - private List _inVariableSet = new List(); - private List _outVariableSet = new List(); - - /// - /// If inVariable has already been copied, return its copy. Otherwise, - /// return a fresh Variable associated with inVariable. - /// - /// - /// - public Variable getCopy(Variable inVariable) - { - int index = _inVariableSet.IndexOf(inVariable); - if (index >= 0) - return _outVariableSet[index]; - else - { - Variable outVariable = new Variable(); - _inVariableSet.Add(inVariable); - _outVariableSet.Add(outVariable); - return outVariable; - } - } - - /// - /// Return the number of unique variables that have been copied. - /// - /// - public int getNUniqueVariables() - { - return _inVariableSet.Count; - } - } - } -} diff --git a/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/YieldProlog/YP.cs b/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/YieldProlog/YP.cs deleted file mode 100644 index 694e733..0000000 --- a/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/YieldProlog/YP.cs +++ /dev/null @@ -1,2701 +0,0 @@ -/* - * Copyright (C) 2007-2008, Jeff Thompson - * - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * * Neither the name of the copyright holder nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -using System; -using System.Collections; -using System.Collections.Generic; -using System.IO; -using System.Reflection; -using System.Net.Sockets; -using System.Text; -using System.Text.RegularExpressions; - -namespace OpenSim.Region.ScriptEngine.DotNetEngine.Compiler.YieldProlog -{ - /// - /// YP has static methods for general functions in Yield Prolog such as - /// and . - /// - public class YP - { - private static Fail _fail = new Fail(); - private static Repeat _repeat = new Repeat(); - private static Dictionary> _predicatesStore = - new Dictionary>(); - private static TextWriter _outputStream = System.Console.Out; - private static TextReader _inputStream = System.Console.In; - private static IndexedAnswers _operatorTable = null; - private static Dictionary _prologFlags = new Dictionary(); - public const int MAX_ARITY = 255; - - /// - /// An IClause is used so that dynamic predicates can call match. - /// - public interface IClause - { - IEnumerable match(object[] args); - IEnumerable clause(object Head, object Body); - } - - /// - /// If value is a Variable, then return its getValue. Otherwise, just - /// return value. You should call YP.getValue on any object that - /// may be a Variable to get the value to pass to other functions in - /// your system that are not part of Yield Prolog, such as math functions - /// or file I/O. - /// For more details, see http://yieldprolog.sourceforge.net/tutorial1.html - /// - /// - /// - public static object getValue(object value) - { - if (value is Variable) - return ((Variable)value).getValue(); - else - return value; - } - - /// - /// If arg1 or arg2 is an object with a unify method (such as Variable or - /// Functor) then just call its unify with the other argument. The object's - /// unify method will bind the values or check for equals as needed. - /// Otherwise, both arguments are "normal" (atomic) values so if they - /// are equal then succeed (yield once), else fail (don't yield). - /// For more details, see http://yieldprolog.sourceforge.net/tutorial1.html - /// - /// - /// - /// - public static IEnumerable unify(object arg1, object arg2) - { - arg1 = getValue(arg1); - arg2 = getValue(arg2); - if (arg1 is IUnifiable) - return ((IUnifiable)arg1).unify(arg2); - else if (arg2 is IUnifiable) - return ((IUnifiable)arg2).unify(arg1); - else - { - // Arguments are "normal" types. - if (arg1.Equals(arg2)) - return new Succeed(); - else - return _fail; - } - } - - /// - /// This is used for the lookup key in _factStore. - /// - public struct NameArity - { - public readonly Atom _name; - public readonly int _arity; - - public NameArity(Atom name, int arity) - { - _name = name; - _arity = arity; - } - - public override bool Equals(object obj) - { - if (obj is NameArity) - { - NameArity nameArity = (NameArity)obj; - return nameArity._name.Equals(_name) && nameArity._arity.Equals(_arity); - } - else - { - return false; - } - } - - public override int GetHashCode() - { - return _name.GetHashCode() ^ _arity.GetHashCode(); - } - } - - /// - /// Convert term to an int. - /// If term is a single-element List, use its first element - /// (to handle the char types like "a"). - /// If can't convert, throw a PrologException for type_error evaluable (because this is only - /// called from arithmetic functions). - /// - /// - /// - public static int convertInt(object term) - { - term = YP.getValue(term); - if (term is Functor2 && ((Functor2)term)._name == Atom.DOT && - YP.getValue(((Functor2)term)._arg2) == Atom.NIL) - // Assume it is a char type like "a". - term = YP.getValue(((Functor2)term)._arg1); - if (term is Variable) - throw new PrologException(Atom.a("instantiation_error"), - "Expected a number but the argument is an unbound variable"); - - try - { - return (int)term; - } - catch (InvalidCastException) - { - throw new PrologException - (new Functor2 - ("type_error", Atom.a("evaluable"), - new Functor2(Atom.SLASH, getFunctorName(term), getFunctorArgs(term).Length)), - "Term must be an integer"); - } - } - - /// - /// Convert term to a double. This may convert an int to a double, etc. - /// If term is a single-element List, use its first element - /// (to handle the char types like "a"). - /// If can't convert, throw a PrologException for type_error evaluable (because this is only - /// called from arithmetic functions). - /// - /// - /// - public static double convertDouble(object term) - { - term = YP.getValue(term); - if (term is Functor2 && ((Functor2)term)._name == Atom.DOT && - YP.getValue(((Functor2)term)._arg2) == Atom.NIL) - // Assume it is a char type like "a". - term = YP.getValue(((Functor2)term)._arg1); - if (term is Variable) - throw new PrologException(Atom.a("instantiation_error"), - "Expected a number but the argument is an unbound variable"); - - try - { - return Convert.ToDouble(term); - } - catch (InvalidCastException) - { - throw new PrologException - (new Functor2 - ("type_error", Atom.a("evaluable"), - new Functor2(Atom.SLASH, getFunctorName(term), getFunctorArgs(term).Length)), - "Term must be an integer"); - } - } - - /// - /// If term is an integer, set intTerm. - /// If term is a single-element List, use its first element - /// (to handle the char types like "a"). Return true for success, false if can't convert. - /// We use a success return value because throwing an exception is inefficient. - /// - /// - /// - public static bool getInt(object term, out int intTerm) - { - term = YP.getValue(term); - if (term is Functor2 && ((Functor2)term)._name == Atom.DOT && - YP.getValue(((Functor2)term)._arg2) == Atom.NIL) - // Assume it is a char type like "a". - term = YP.getValue(((Functor2)term)._arg1); - - if (term is int) - { - intTerm = (int)term; - return true; - } - - intTerm = 0; - return false; - } - - public static bool equal(object x, object y) - { - x = YP.getValue(x); - if (x is DateTime) - return (DateTime)x == (DateTime)YP.getValue(y); - // Assume convertDouble converts an int to a double perfectly. - return YP.convertDouble(x) == YP.convertDouble(y); - } - - public static bool notEqual(object x, object y) - { - x = YP.getValue(x); - if (x is DateTime) - return (DateTime)x != (DateTime)YP.getValue(y); - // Assume convertDouble converts an int to a double perfectly. - return YP.convertDouble(x) != YP.convertDouble(y); - } - - public static bool greaterThan(object x, object y) - { - x = YP.getValue(x); - if (x is DateTime) - return (DateTime)x > (DateTime)YP.getValue(y); - // Assume convertDouble converts an int to a double perfectly. - return YP.convertDouble(x) > YP.convertDouble(y); - } - - public static bool lessThan(object x, object y) - { - x = YP.getValue(x); - if (x is DateTime) - return (DateTime)x < (DateTime)YP.getValue(y); - // Assume convertDouble converts an int to a double perfectly. - return YP.convertDouble(x) < YP.convertDouble(y); - } - - public static bool greaterThanOrEqual(object x, object y) - { - x = YP.getValue(x); - if (x is DateTime) - return (DateTime)x >= (DateTime)YP.getValue(y); - // Assume convertDouble converts an int to a double perfectly. - return YP.convertDouble(x) >= YP.convertDouble(y); - } - - public static bool lessThanOrEqual(object x, object y) - { - x = YP.getValue(x); - if (x is DateTime) - return (DateTime)x <= (DateTime)YP.getValue(y); - // Assume convertDouble converts an int to a double perfectly. - return YP.convertDouble(x) <= YP.convertDouble(y); - } - - public static object negate(object x) - { - int intX; - if (getInt(x, out intX)) - return -intX; - return -convertDouble(x); - } - - public static object abs(object x) - { - int intX; - if (getInt(x, out intX)) - return Math.Abs(intX); - return Math.Abs(convertDouble(x)); - } - - public static object sign(object x) - { - int intX; - if (getInt(x, out intX)) - return Math.Sign(intX); - return Math.Sign(convertDouble(x)); - } - - // Use toFloat instead of float because it is a reserved keyword. - public static object toFloat(object x) - { - return convertDouble(x); - } - - /// - /// The ISO standard returns an int. - /// - /// - /// - public static object floor(object x) - { - return (int)Math.Floor(convertDouble(x)); - } - - /// - /// The ISO standard returns an int. - /// - /// - /// - public static object truncate(object x) - { - return (int)Math.Truncate(convertDouble(x)); - } - - /// - /// The ISO standard returns an int. - /// - /// - /// - public static object round(object x) - { - return (int)Math.Round(convertDouble(x)); - } - - /// - /// The ISO standard returns an int. - /// - /// - /// - public static object ceiling(object x) - { - return (int)Math.Ceiling(convertDouble(x)); - } - - public static object sin(object x) - { - return Math.Sin(YP.convertDouble(x)); - } - - public static object cos(object x) - { - return Math.Cos(YP.convertDouble(x)); - } - - public static object atan(object x) - { - return Math.Atan(YP.convertDouble(x)); - } - - public static object exp(object x) - { - return Math.Exp(YP.convertDouble(x)); - } - - public static object log(object x) - { - return Math.Log(YP.convertDouble(x)); - } - - public static object sqrt(object x) - { - return Math.Sqrt(convertDouble(x)); - } - - public static object bitwiseComplement(object x) - { - return ~YP.convertInt(x); - } - - public static object add(object x, object y) - { - int intX, intY; - if (getInt(x, out intX) && getInt(y, out intY)) - return intX + intY; - return convertDouble(x) + convertDouble(y); - } - - public static object subtract(object x, object y) - { - int intX, intY; - if (getInt(x, out intX) && getInt(y, out intY)) - return intX - intY; - return convertDouble(x) - convertDouble(y); - } - - public static object multiply(object x, object y) - { - int intX, intY; - if (getInt(x, out intX) && getInt(y, out intY)) - return intX * intY; - return convertDouble(x) * convertDouble(y); - } - - /// - /// Return floating point, even if both arguments are integer. - /// - /// - /// - /// - public static object divide(object x, object y) - { - return convertDouble(x) / convertDouble(y); - } - - public static object intDivide(object x, object y) - { - int intX, intY; - if (getInt(x, out intX) && getInt(y, out intY)) - return intX / intY; - // Still allow passing a double, but treat as an int. - return (int)convertDouble(x) / (int)convertDouble(y); - } - - public static object mod(object x, object y) - { - int intX, intY; - if (getInt(x, out intX) && getInt(y, out intY)) - return intX % intY; - // Still allow passing a double, but treat as an int. - return (int)convertDouble(x) % (int)convertDouble(y); - } - - public static object pow(object x, object y) - { - return Math.Pow(YP.convertDouble(x), YP.convertDouble(y)); - } - - public static object bitwiseShiftRight(object x, object y) - { - return YP.convertInt(x) >> YP.convertInt(y); - } - - public static object bitwiseShiftLeft(object x, object y) - { - return YP.convertInt(x) << YP.convertInt(y); - } - - public static object bitwiseAnd(object x, object y) - { - return YP.convertInt(x) & YP.convertInt(y); - } - - public static object bitwiseOr(object x, object y) - { - return YP.convertInt(x) | YP.convertInt(y); - } - - public static object min(object x, object y) - { - int intX, intY; - if (getInt(x, out intX) && getInt(y, out intY)) - return Math.Min(intX, intY); - return Math.Min(convertDouble(x), convertDouble(y)); - } - - public static object max(object x, object y) - { - int intX, intY; - if (getInt(x, out intX) && getInt(y, out intY)) - return Math.Max(intX, intY); - return Math.Max(convertDouble(x), convertDouble(y)); - } - - public static IEnumerable copy_term(object inTerm, object outTerm) - { - return YP.unify(outTerm, YP.makeCopy(inTerm, new Variable.CopyStore())); - } - - public static void addUniqueVariables(object term, List variableSet) - { - term = YP.getValue(term); - if (term is IUnifiable) - ((IUnifiable)term).addUniqueVariables(variableSet); - } - - public static object makeCopy(object term, Variable.CopyStore copyStore) - { - term = YP.getValue(term); - if (term is IUnifiable) - return ((IUnifiable)term).makeCopy(copyStore); - else - // term is a "normal" type. Assume it is ground. - return term; - } - - /// - /// Sort the array in place according to termLessThan. This does not remove duplicates - /// - /// - public static void sortArray(object[] array) - { - Array.Sort(array, YP.compareTerms); - } - - /// - /// Sort the array in place according to termLessThan. This does not remove duplicates - /// - /// - public static void sortArray(List array) - { - array.Sort(YP.compareTerms); - } - - /// - /// Sort List according to termLessThan, remove duplicates and unify with Sorted. - /// - /// - /// - /// - public static IEnumerable sort(object List, object Sorted) - { - object[] array = ListPair.toArray(List); - if (array == null) - return YP.fail(); - if (array.Length > 1) - sortArray(array); - return YP.unify(Sorted, ListPair.makeWithoutRepeatedTerms(array)); - } - - /// - /// Use YP.unify to unify each of the elements of the two arrays, and yield - /// once if they all unify. - /// - /// - /// - /// - public static IEnumerable unifyArrays(object[] array1, object[] array2) - { - if (array1.Length != array2.Length) - yield break; - - IEnumerator[] iterators = new IEnumerator[array1.Length]; - bool gotMatch = true; - int nIterators = 0; - // Try to bind all the arguments. - for (int i = 0; i < array1.Length; ++i) - { - IEnumerator iterator = YP.unify(array1[i], array2[i]).GetEnumerator(); - iterators[nIterators++] = iterator; - // MoveNext() is true if YP.unify succeeds. - if (!iterator.MoveNext()) - { - gotMatch = false; - break; - } - } - - try - { - if (gotMatch) - yield return false; - } - finally - { - // Manually finalize all the iterators. - for (int i = 0; i < nIterators; ++i) - iterators[i].Dispose(); - } - } - - /// - /// Return an iterator (which you can use in a for-in loop) which does - /// zero iterations. This returns a pre-existing iterator which is - /// more efficient than letting the compiler generate a new one. - /// - /// - public static IEnumerable fail() - { - return _fail; - } - - /// - /// Return an iterator (which you can use in a for-in loop) which does - /// one iteration. This returns a pre-existing iterator which is - /// more efficient than letting the compiler generate a new one. - /// - /// - public static IEnumerable succeed() - { - return new Succeed(); - } - - /// - /// Return an iterator (which you can use in a for-in loop) which repeats - /// indefinitely. This returns a pre-existing iterator which is - /// more efficient than letting the compiler generate a new one. - /// - /// - public static IEnumerable repeat() - { - return _repeat; - } - - // disable warning on l1, don't see how we can - // code this differently - #pragma warning disable 0168 - public static IEnumerable univ(object Term, object List) - { - Term = YP.getValue(Term); - List = YP.getValue(List); - - if (nonvar(Term)) - return YP.unify(new ListPair - (getFunctorName(Term), ListPair.make(getFunctorArgs(Term))), List); - - Variable Name = new Variable(); - Variable ArgList = new Variable(); - foreach (bool l1 in new ListPair(Name, ArgList).unify(List)) - { - object[] args = ListPair.toArray(ArgList); - if (args == null) - throw new PrologException - (new Functor2("type_error", Atom.a("list"), ArgList), - "Expected a list. Got: " + ArgList.getValue()); - if (args.Length == 0) - // Return the Name, even if it is not an Atom. - return YP.unify(Term, Name); - if (args.Length > MAX_ARITY) - throw new PrologException - (new Functor1("representation_error", Atom.a("max_arity")), - "Functor arity " + args.Length + " may not be greater than " + MAX_ARITY); - if (!atom(Name)) - throw new PrologException - (new Functor2("type_error", Atom.a("atom"), Name), - "Expected an atom. Got: " + Name.getValue()); - - return YP.unify(Term, Functor.make((Atom)YP.getValue(Name), args)); - } - - return YP.fail(); - } - - public static IEnumerable functor(object Term, object FunctorName, object Arity) - { - Term = YP.getValue(Term); - FunctorName = YP.getValue(FunctorName); - Arity = YP.getValue(Arity); - - if (Term is Variable) - { - if (FunctorName is Variable) - throw new PrologException(Atom.a("instantiation_error"), - "Arg 2 FunctorName is an unbound variable"); - if (Arity is Variable) - throw new PrologException(Atom.a("instantiation_error"), - "Arg 3 Arity is an unbound variable"); - if (!(Arity is int)) - throw new PrologException - (new Functor2("type_error", Atom.a("integer"), Arity), "Arity is not an integer"); - if (!YP.atomic(FunctorName)) - throw new PrologException - (new Functor2("type_error", Atom.a("atomic"), FunctorName), "FunctorName is not atomic"); - - if ((int)Arity < 0) - throw new PrologException - (new Functor2("domain_error", Atom.a("not_less_than_zero"), Arity), - "Arity may not be less than zero"); - else if ((int)Arity == 0) - { - // Just unify Term with the atomic FunctorName. - foreach (bool l1 in YP.unify(Term, FunctorName)) - yield return false; - } - else - { - if ((int)Arity > MAX_ARITY) - throw new PrologException - (new Functor1("representation_error", Atom.a("max_arity")), - "Functor arity " + Arity + " may not be greater than " + MAX_ARITY); - if (!(FunctorName is Atom)) - throw new PrologException - (new Functor2("type_error", Atom.a("atom"), FunctorName), "FunctorName is not an atom"); - // Construct a functor with unbound variables. - object[] args = new object[(int)Arity]; - for (int i = 0; i < args.Length; ++i) - args[i] = new Variable(); - #pragma warning disable 0219 - foreach (bool l1 in YP.unify(Term, Functor.make((Atom)FunctorName, args))) - yield return false; - #pragma warning restore 0219 - } - } - else - { - foreach (bool l1 in YP.unify(FunctorName, getFunctorName(Term))) - { - foreach (bool l2 in YP.unify(Arity, getFunctorArgs(Term).Length)) - yield return false; - } - } - } - - public static IEnumerable arg(object ArgNumber, object Term, object Value) - { - if (var(ArgNumber)) - throw new PrologException(Atom.a("instantiation_error"), "Arg 1 ArgNumber is an unbound variable"); - int argNumberInt; - if (!getInt(ArgNumber, out argNumberInt)) - throw new PrologException - (new Functor2("type_error", Atom.a("integer"), ArgNumber), "Arg 1 ArgNumber must be integer"); - if (argNumberInt < 0) - throw new PrologException - (new Functor2("domain_error", Atom.a("not_less_than_zero"), argNumberInt), - "ArgNumber may not be less than zero"); - - if (YP.var(Term)) - throw new PrologException(Atom.a("instantiation_error"), - "Arg 2 Term is an unbound variable"); - if (!YP.compound(Term)) - throw new PrologException - (new Functor2("type_error", Atom.a("compound"), Term), "Arg 2 Term must be compound"); - - object[] termArgs = YP.getFunctorArgs(Term); - // Silently fail if argNumberInt is out of range. - if (argNumberInt >= 1 && argNumberInt <= termArgs.Length) - { - // The first ArgNumber is at 1, not 0. - foreach (bool l1 in YP.unify(Value, termArgs[argNumberInt - 1])) - yield return false; - } - } - - public static bool termEqual(object Term1, object Term2) - { - Term1 = YP.getValue(Term1); - if (Term1 is IUnifiable) - return ((IUnifiable)Term1).termEqual(Term2); - return Term1.Equals(YP.getValue(Term2)); - } - - public static bool termNotEqual(object Term1, object Term2) - { - return !termEqual(Term1, Term2); - } - - public static bool termLessThan(object Term1, object Term2) - { - Term1 = YP.getValue(Term1); - Term2 = YP.getValue(Term2); - int term1TypeCode = getTypeCode(Term1); - int term2TypeCode = getTypeCode(Term2); - if (term1TypeCode != term2TypeCode) - return term1TypeCode < term2TypeCode; - - // The terms are the same type code. - if (term1TypeCode == -2) - { - // Variable. - // We always check for equality first because we want to be sure - // that less than returns false if the terms are equal, in - // case that the less than check really behaves like less than or equal. - if ((Variable)Term1 != (Variable)Term2) - // The hash code should be unique to a Variable object. - return Term1.GetHashCode() < Term2.GetHashCode(); - return false; - } - if (term1TypeCode == 0) - return ((Atom)Term1)._name.CompareTo(((Atom)Term2)._name) < 0; - if (term1TypeCode == 1) - return ((Functor1)Term1).lessThan((Functor1)Term2); - if (term1TypeCode == 2) - return ((Functor2)Term1).lessThan((Functor2)Term2); - if (term1TypeCode == 3) - return ((Functor3)Term1).lessThan((Functor3)Term2); - if (term1TypeCode == 4) - return ((Functor)Term1).lessThan((Functor)Term2); - - // Type code is -1 for general objects. First compare their type names. - // Note that this puts Double before Int32 as required by ISO Prolog. - string term1TypeName = Term1.GetType().ToString(); - string term2TypeName = Term2.GetType().ToString(); - if (term1TypeName != term2TypeName) - return term1TypeName.CompareTo(term2TypeName) < 0; - - // The terms are the same type name. - if (Term1 is int) - return (int)Term1 < (int)Term2; - else if (Term1 is double) - return (double)Term1 < (double)Term2; - else if (Term1 is DateTime) - return (DateTime)Term1 < (DateTime)Term2; - else if (Term1 is String) - return ((String)Term1).CompareTo((String)Term2) < 0; - // Debug: Should we try arrays, etc.? - - if (!Term1.Equals(Term2)) - // Could be equal or greater than. - return Term1.GetHashCode() < Term2.GetHashCode(); - return false; - } - - /// - /// Type code is -2 if term is a Variable, 0 if it is an Atom, - /// 1 if it is a Functor1, 2 if it is a Functor2, 3 if it is a Functor3, - /// 4 if it is Functor. - /// Otherwise, type code is -1. - /// This does not call YP.getValue(term). - /// - /// - /// - private static int getTypeCode(object term) - { - if (term is Variable) - return -2; - else if (term is Atom) - return 0; - else if (term is Functor1) - return 1; - else if (term is Functor2) - return 2; - else if (term is Functor3) - return 3; - else if (term is Functor) - return 4; - else - return -1; - } - - public static bool termLessThanOrEqual(object Term1, object Term2) - { - if (YP.termEqual(Term1, Term2)) - return true; - return YP.termLessThan(Term1, Term2); - } - - public static bool termGreaterThan(object Term1, object Term2) - { - return !YP.termLessThanOrEqual(Term1, Term2); - } - - public static bool termGreaterThanOrEqual(object Term1, object Term2) - { - // termLessThan should ensure that it returns false if terms are equal, - // so that this would return true. - return !YP.termLessThan(Term1, Term2); - } - - public static int compareTerms(object Term1, object Term2) - { - if (YP.termEqual(Term1, Term2)) - return 0; - else if (YP.termLessThan(Term1, Term2)) - return -1; - else - return 1; - } - - public static bool ground(object Term) - { - Term = YP.getValue(Term); - if (Term is IUnifiable) - return ((IUnifiable)Term).ground(); - return true; - } - - public static IEnumerable current_op - (object Priority, object Specifier, object Operator) - { - if (_operatorTable == null) - { - // Initialize. - _operatorTable = new IndexedAnswers(3); - _operatorTable.addAnswer(new object[] { 1200, Atom.a("xfx"), Atom.a(":-") }); - _operatorTable.addAnswer(new object[] { 1200, Atom.a("xfx"), Atom.a("-->") }); - _operatorTable.addAnswer(new object[] { 1200, Atom.a("fx"), Atom.a(":-") }); - _operatorTable.addAnswer(new object[] { 1200, Atom.a("fx"), Atom.a("?-") }); - _operatorTable.addAnswer(new object[] { 1100, Atom.a("xfy"), Atom.a(";") }); - _operatorTable.addAnswer(new object[] { 1050, Atom.a("xfy"), Atom.a("->") }); - _operatorTable.addAnswer(new object[] { 1000, Atom.a("xfy"), Atom.a(",") }); - _operatorTable.addAnswer(new object[] { 900, Atom.a("fy"), Atom.a("\\+") }); - _operatorTable.addAnswer(new object[] { 700, Atom.a("xfx"), Atom.a("=") }); - _operatorTable.addAnswer(new object[] { 700, Atom.a("xfx"), Atom.a("\\=") }); - _operatorTable.addAnswer(new object[] { 700, Atom.a("xfx"), Atom.a("==") }); - _operatorTable.addAnswer(new object[] { 700, Atom.a("xfx"), Atom.a("\\==") }); - _operatorTable.addAnswer(new object[] { 700, Atom.a("xfx"), Atom.a("@<") }); - _operatorTable.addAnswer(new object[] { 700, Atom.a("xfx"), Atom.a("@=<") }); - _operatorTable.addAnswer(new object[] { 700, Atom.a("xfx"), Atom.a("@>") }); - _operatorTable.addAnswer(new object[] { 700, Atom.a("xfx"), Atom.a("@>=") }); - _operatorTable.addAnswer(new object[] { 700, Atom.a("xfx"), Atom.a("=..") }); - _operatorTable.addAnswer(new object[] { 700, Atom.a("xfx"), Atom.a("is") }); - _operatorTable.addAnswer(new object[] { 700, Atom.a("xfx"), Atom.a("=:=") }); - _operatorTable.addAnswer(new object[] { 700, Atom.a("xfx"), Atom.a("=\\=") }); - _operatorTable.addAnswer(new object[] { 700, Atom.a("xfx"), Atom.a("<") }); - _operatorTable.addAnswer(new object[] { 700, Atom.a("xfx"), Atom.a("=<") }); - _operatorTable.addAnswer(new object[] { 700, Atom.a("xfx"), Atom.a(">") }); - _operatorTable.addAnswer(new object[] { 700, Atom.a("xfx"), Atom.a(">=") }); - _operatorTable.addAnswer(new object[] { 600, Atom.a("xfy"), Atom.a(":") }); - _operatorTable.addAnswer(new object[] { 500, Atom.a("yfx"), Atom.a("+") }); - _operatorTable.addAnswer(new object[] { 500, Atom.a("yfx"), Atom.a("-") }); - _operatorTable.addAnswer(new object[] { 500, Atom.a("yfx"), Atom.a("/\\") }); - _operatorTable.addAnswer(new object[] { 500, Atom.a("yfx"), Atom.a("\\/") }); - _operatorTable.addAnswer(new object[] { 400, Atom.a("yfx"), Atom.a("*") }); - _operatorTable.addAnswer(new object[] { 400, Atom.a("yfx"), Atom.a("/") }); - _operatorTable.addAnswer(new object[] { 400, Atom.a("yfx"), Atom.a("//") }); - _operatorTable.addAnswer(new object[] { 400, Atom.a("yfx"), Atom.a("rem") }); - _operatorTable.addAnswer(new object[] { 400, Atom.a("yfx"), Atom.a("mod") }); - _operatorTable.addAnswer(new object[] { 400, Atom.a("yfx"), Atom.a("<<") }); - _operatorTable.addAnswer(new object[] { 400, Atom.a("yfx"), Atom.a(">>") }); - _operatorTable.addAnswer(new object[] { 200, Atom.a("xfx"), Atom.a("**") }); - _operatorTable.addAnswer(new object[] { 200, Atom.a("xfy"), Atom.a("^") }); - _operatorTable.addAnswer(new object[] { 200, Atom.a("fy"), Atom.a("-") }); - _operatorTable.addAnswer(new object[] { 200, Atom.a("fy"), Atom.a("\\") }); - // Debug: This is hacked in to run the Prolog test suite until we implement op/3. - _operatorTable.addAnswer(new object[] { 20, Atom.a("xfx"), Atom.a("<--") }); - } - - return _operatorTable.match(new object[] { Priority, Specifier, Operator }); - } - - public static IEnumerable atom_length(object atom, object Length) - { - atom = YP.getValue(atom); - Length = YP.getValue(Length); - if (atom is Variable) - throw new PrologException(Atom.a("instantiation_error"), - "Expected atom(Arg1) but it is an unbound variable"); - if (!(atom is Atom)) - throw new PrologException - (new Functor2("type_error", Atom.a("atom"), atom), "Arg 1 Atom is not an atom"); - if (!(Length is Variable)) - { - if (!(Length is int)) - throw new PrologException - (new Functor2("type_error", Atom.a("integer"), Length), "Length must be var or integer"); - if ((int)Length < 0) - throw new PrologException - (new Functor2("domain_error", Atom.a("not_less_than_zero"), Length), - "Length must not be less than zero"); - } - return YP.unify(Length, ((Atom)atom)._name.Length); - } - - public static IEnumerable atom_concat(object Start, object End, object Whole) - { - // Debug: Should we try to preserve the _declaringClass? - Start = YP.getValue(Start); - End = YP.getValue(End); - Whole = YP.getValue(Whole); - if (Whole is Variable) - { - if (Start is Variable) - throw new PrologException(Atom.a("instantiation_error"), - "Arg 1 Start and arg 3 Whole are both var"); - if (End is Variable) - throw new PrologException(Atom.a("instantiation_error"), - "Arg 2 End and arg 3 Whole are both var"); - if (!(Start is Atom)) - throw new PrologException - (new Functor2("type_error", Atom.a("atom"), Start), "Arg 1 Start is not an atom"); - if (!(End is Atom)) - throw new PrologException - (new Functor2("type_error", Atom.a("atom"), End), "Arg 2 End is not an atom"); - - foreach (bool l1 in YP.unify(Whole, Atom.a(((Atom)Start)._name + ((Atom)End)._name))) - yield return false; - } - else - { - if (!(Whole is Atom)) - throw new PrologException - (new Functor2("type_error", Atom.a("atom"), Whole), "Arg 3 Whole is not an atom"); - bool gotStartLength = false; - int startLength = 0; - if (!(Start is Variable)) - { - if (!(Start is Atom)) - throw new PrologException - (new Functor2("type_error", Atom.a("atom"), Start), "Arg 1 Start is not var or atom"); - startLength = ((Atom)Start)._name.Length; - gotStartLength = true; - } - - bool gotEndLength = false; - int endLength = 0; - if (!(End is Variable)) - { - if (!(End is Atom)) - throw new PrologException - (new Functor2("type_error", Atom.a("atom"), End), "Arg 2 End is not var or atom"); - endLength = ((Atom)End)._name.Length; - gotEndLength = true; - } - - // We are doing a search through all possible Start and End which concatenate to Whole. - string wholeString = ((Atom)Whole)._name; - for (int i = 0; i <= wholeString.Length; ++i) - { - // If we got either startLength or endLength, we know the lengths have to match so check - // the lengths instead of constructing an Atom to do it. - if (gotStartLength && startLength != i) - continue; - if (gotEndLength && endLength != wholeString.Length - i) - continue; - foreach (bool l1 in YP.unify(Start, Atom.a(wholeString.Substring(0, i)))) - { - foreach (bool l2 in YP.unify(End, Atom.a(wholeString.Substring(i, wholeString.Length - i)))) - yield return false; - } - } - } - } - - public static IEnumerable sub_atom - (object atom, object Before, object Length, object After, object Sub_atom) - { - // Debug: Should we try to preserve the _declaringClass? - atom = YP.getValue(atom); - Before = YP.getValue(Before); - Length = YP.getValue(Length); - After = YP.getValue(After); - Sub_atom = YP.getValue(Sub_atom); - if (atom is Variable) - throw new PrologException(Atom.a("instantiation_error"), - "Expected atom(Arg1) but it is an unbound variable"); - if (!(atom is Atom)) - throw new PrologException - (new Functor2("type_error", Atom.a("atom"), atom), "Arg 1 Atom is not an atom"); - if (!(Sub_atom is Variable)) - { - if (!(Sub_atom is Atom)) - throw new PrologException - (new Functor2("type_error", Atom.a("atom"), Sub_atom), "Sub_atom is not var or atom"); - } - - bool beforeIsInt = false; - bool lengthIsInt = false; - bool afterIsInt = false; - if (!(Before is Variable)) - { - if (!(Before is int)) - throw new PrologException - (new Functor2("type_error", Atom.a("integer"), Before), "Before must be var or integer"); - beforeIsInt = true; - if ((int)Before < 0) - throw new PrologException - (new Functor2("domain_error", Atom.a("not_less_than_zero"), Before), - "Before must not be less than zero"); - } - if (!(Length is Variable)) - { - if (!(Length is int)) - throw new PrologException - (new Functor2("type_error", Atom.a("integer"), Length), "Length must be var or integer"); - lengthIsInt = true; - if ((int)Length < 0) - throw new PrologException - (new Functor2("domain_error", Atom.a("not_less_than_zero"), Length), - "Length must not be less than zero"); - } - if (!(After is Variable)) - { - if (!(After is int)) - throw new PrologException - (new Functor2("type_error", Atom.a("integer"), After), "After must be var or integer"); - afterIsInt = true; - if ((int)After < 0) - throw new PrologException - (new Functor2("domain_error", Atom.a("not_less_than_zero"), After), - "After must not be less than zero"); - } - - Atom atomAtom = (Atom)atom; - int atomLength = atomAtom._name.Length; - if (beforeIsInt && lengthIsInt) - { - // Special case: the caller is just trying to extract a substring, so do it quickly. - int xAfter = atomLength - (int)Before - (int)Length; - if (xAfter >= 0) - { - foreach (bool l1 in YP.unify(After, xAfter)) - { - foreach (bool l2 in YP.unify - (Sub_atom, Atom.a(atomAtom._name.Substring((int)Before, (int)Length)))) - yield return false; - } - } - } - else if (afterIsInt && lengthIsInt) - { - // Special case: the caller is just trying to extract a substring, so do it quickly. - int xBefore = atomLength - (int)After - (int)Length; - if (xBefore >= 0) - { - foreach (bool l1 in YP.unify(Before, xBefore)) - { - foreach (bool l2 in YP.unify - (Sub_atom, Atom.a(atomAtom._name.Substring(xBefore, (int)Length)))) - yield return false; - } - } - } - else - { - // We are underconstrained and doing a search, so go through all possibilities. - for (int xBefore = 0; xBefore <= atomLength; ++xBefore) - { - foreach (bool l1 in YP.unify(Before, xBefore)) - { - for (int xLength = 0; xLength <= (atomLength - xBefore); ++xLength) - { - foreach (bool l2 in YP.unify(Length, xLength)) - { - foreach (bool l3 in YP.unify(After, atomLength - (xBefore + xLength))) - { - foreach (bool l4 in YP.unify - (Sub_atom, Atom.a(atomAtom._name.Substring(xBefore, xLength)))) - yield return false; - } - } - } - } - } - } - } - - public static IEnumerable atom_chars(object atom, object List) - { - atom = YP.getValue(atom); - List = YP.getValue(List); - - if (atom is Variable) - { - if (List is Variable) - throw new PrologException(Atom.a("instantiation_error"), - "Arg 1 Atom and arg 2 List are both unbound variables"); - object[] codeArray = ListPair.toArray(List); - if (codeArray == null) - throw new PrologException - (new Functor2("type_error", Atom.a("list"), List), "Arg 2 List is not a list"); - - char[] charArray = new char[codeArray.Length]; - for (int i = 0; i < codeArray.Length; ++i) - { - object listAtom = YP.getValue(codeArray[i]); - if (listAtom is Variable) - throw new PrologException(Atom.a("instantiation_error"), - "Arg 2 List has an element which is an unbound variable"); - if (!(listAtom is Atom && ((Atom)listAtom)._name.Length == 1)) - throw new PrologException - (new Functor2("type_error", Atom.a("character"), listAtom), - "Arg 2 List has an element which is not a one character atom"); - charArray[i] = ((Atom)listAtom)._name[0]; - } - return YP.unify(atom, Atom.a(new String(charArray))); - } - else - { - if (!(atom is Atom)) - throw new PrologException - (new Functor2("type_error", Atom.a("atom"), atom), "Arg 1 Atom is not var or atom"); - - string atomString = ((Atom)atom)._name; - object charList = Atom.NIL; - // Start from the back to make the list. - for (int i = atomString.Length - 1; i >= 0; --i) - charList = new ListPair(Atom.a(atomString.Substring(i, 1)), charList); - return YP.unify(List, charList); - } - } - - public static IEnumerable atom_codes(object atom, object List) - { - atom = YP.getValue(atom); - List = YP.getValue(List); - - if (atom is Variable) - { - if (List is Variable) - throw new PrologException(Atom.a("instantiation_error"), - "Arg 1 Atom and arg 2 List are both unbound variables"); - object[] codeArray = ListPair.toArray(List); - if (codeArray == null) - throw new PrologException - (new Functor2("type_error", Atom.a("list"), List), "Arg 2 List is not a list"); - - char[] charArray = new char[codeArray.Length]; - for (int i = 0; i < codeArray.Length; ++i) - { - int codeInt; - if (!getInt(codeArray[i], out codeInt) || codeInt < 0) - throw new PrologException - (new Functor1("representation_error", Atom.a("character_code")), - "Element of Arg 2 List is not a character code"); - charArray[i] = (char)codeInt; - } - return YP.unify(atom, Atom.a(new String(charArray))); - } - else - { - if (!(atom is Atom)) - throw new PrologException - (new Functor2("type_error", Atom.a("atom"), atom), "Arg 1 Atom is not var or atom"); - - string atomString = ((Atom)atom)._name; - object codeList = Atom.NIL; - // Start from the back to make the list. - for (int i = atomString.Length - 1; i >= 0; --i) - codeList = new ListPair((int)atomString[i], codeList); - return YP.unify(List, codeList); - } - } - - public static IEnumerable number_chars(object Number, object List) - { - Number = YP.getValue(Number); - List = YP.getValue(List); - - if (Number is Variable) - { - if (List is Variable) - throw new PrologException(Atom.a("instantiation_error"), - "Arg 1 Number and arg 2 List are both unbound variables"); - object[] codeArray = ListPair.toArray(List); - if (codeArray == null) - throw new PrologException - (new Functor2("type_error", Atom.a("list"), List), "Arg 2 List is not a list"); - - char[] charArray = new char[codeArray.Length]; - for (int i = 0; i < codeArray.Length; ++i) - { - object listAtom = YP.getValue(codeArray[i]); - if (listAtom is Variable) - throw new PrologException(Atom.a("instantiation_error"), - "Arg 2 List has an element which is an unbound variable"); - if (!(listAtom is Atom && ((Atom)listAtom)._name.Length == 1)) - throw new PrologException - (new Functor2("type_error", Atom.a("character"), listAtom), - "Arg 2 List has an element which is not a one character atom"); - charArray[i] = ((Atom)listAtom)._name[0]; - } - return YP.unify(Number, parseNumberString(charArray)); - } - else - { - string numberString = null; - // Try converting to an int first. - int intNumber; - if (YP.getInt(Number, out intNumber)) - numberString = intNumber.ToString(); - else - { - if (!YP.number(Number)) - throw new PrologException - (new Functor2("type_error", Atom.a("number"), Number), - "Arg 1 Number is not var or number"); - // We just checked, so convertDouble shouldn't throw an exception. - numberString = YP.doubleToString(YP.convertDouble(Number)); - } - - object charList = Atom.NIL; - // Start from the back to make the list. - for (int i = numberString.Length - 1; i >= 0; --i) - charList = new ListPair(Atom.a(numberString.Substring(i, 1)), charList); - return YP.unify(List, charList); - } - } - - public static IEnumerable number_codes(object Number, object List) - { - Number = YP.getValue(Number); - List = YP.getValue(List); - - if (Number is Variable) - { - if (List is Variable) - throw new PrologException(Atom.a("instantiation_error"), - "Arg 1 Number and arg 2 List are both unbound variables"); - object[] codeArray = ListPair.toArray(List); - if (codeArray == null) - throw new PrologException - (new Functor2("type_error", Atom.a("list"), List), "Arg 2 List is not a list"); - - char[] charArray = new char[codeArray.Length]; - for (int i = 0; i < codeArray.Length; ++i) - { - int codeInt; - if (!getInt(codeArray[i], out codeInt) || codeInt < 0) - throw new PrologException - (new Functor1("representation_error", Atom.a("character_code")), - "Element of Arg 2 List is not a character code"); - charArray[i] = (char)codeInt; - } - return YP.unify(Number, parseNumberString(charArray)); - } - else - { - string numberString = null; - // Try converting to an int first. - int intNumber; - if (YP.getInt(Number, out intNumber)) - numberString = intNumber.ToString(); - else - { - if (!YP.number(Number)) - throw new PrologException - (new Functor2("type_error", Atom.a("number"), Number), - "Arg 1 Number is not var or number"); - // We just checked, so convertDouble shouldn't throw an exception. - numberString = YP.doubleToString(YP.convertDouble(Number)); - } - - object codeList = Atom.NIL; - // Start from the back to make the list. - for (int i = numberString.Length - 1; i >= 0; --i) - codeList = new ListPair((int)numberString[i], codeList); - return YP.unify(List, codeList); - } - } - - /// - /// Used by number_chars and number_codes. Return the number in charArray or - /// throw an exception if can't parse. - /// - /// - /// - private static object parseNumberString(char[] charArray) - { - string numberString = new String(charArray); - if (charArray.Length == 3 && numberString.StartsWith("0'")) - // This is a char code. - return (int)charArray[2]; - if (numberString.StartsWith("0x")) - { - try - { - return Int32.Parse - (numberString.Substring(2), System.Globalization.NumberStyles.AllowHexSpecifier); - } - catch (FormatException) - { - throw new PrologException - (new Functor1("syntax_error", Atom.a("number_format: " + numberString)), - "Arg 2 List is not a list for a hexadecimal number"); - } - } - // Debug: Is there a way in C# to ask if a string parses as int without throwing an exception? - try - { - // Try an int first. - return Convert.ToInt32(numberString); - } - catch (FormatException) { } - try - { - return Convert.ToDouble(numberString); - } - catch (FormatException) - { - throw new PrologException - (new Functor1("syntax_error", Atom.a("number_format: " + numberString)), - "Arg 2 List is not a list for a number"); - } - } - - public static IEnumerable char_code(object Char, object Code) - { - Char = YP.getValue(Char); - Code = YP.getValue(Code); - - int codeInt = 0; - if (!(Code is Variable)) - { - // Get codeInt now so we type check it whether or not Char is Variable. - if (!getInt(Code, out codeInt)) - throw new PrologException - (new Functor2("type_error", Atom.a("integer"), Code), - "Arg 2 Code is not var or a character code"); - if (codeInt < 0) - throw new PrologException - (new Functor1("representation_error", Atom.a("character_code")), - "Arg 2 Code is not a character code"); - } - - if (Char is Variable) - { - if (Code is Variable) - throw new PrologException(Atom.a("instantiation_error"), - "Arg 1 Char and arg 2 Code are both unbound variables"); - - return YP.unify(Char, Atom.a(new String(new char[] {(char)codeInt} ))); - } - else - { - if (!(Char is Atom) || ((Atom)Char)._name.Length != 1) - throw new PrologException - (new Functor2("type_error", Atom.a("character"), Char), - "Arg 1 Char is not var or one-character atom"); - - if (Code is Variable) - return YP.unify(Code, (int)((Atom)Char)._name[0]); - else - // Use codeInt to handle whether Code is supplied as, e.g., 97 or 0'a . - return YP.unify(codeInt, (int)((Atom)Char)._name[0]); - } - } - - /// - /// If term is an Atom or functor type, return its name. - /// Otherwise, return term. - /// - /// - /// - public static object getFunctorName(object term) - { - term = YP.getValue(term); - if (term is Functor1) - return ((Functor1)term)._name; - else if (term is Functor2) - return ((Functor2)term)._name; - else if (term is Functor3) - return ((Functor3)term)._name; - else if (term is Functor) - return ((Functor)term)._name; - else - return term; - } - - /// - /// If term is an Atom or functor type, return an array of its args. - /// Otherwise, return an empty array. - /// - /// - /// - public static object[] getFunctorArgs(object term) - { - term = YP.getValue(term); - if (term is Functor1) - { - Functor1 functor = (Functor1)term; - return new object[] { functor._arg1 }; - } - else if (term is Functor2) - { - Functor2 functor = (Functor2)term; - return new object[] { functor._arg1, functor._arg2 }; - } - else if (term is Functor3) - { - Functor3 functor = (Functor3)term; - return new object[] { functor._arg1, functor._arg2, functor._arg3 }; - } - else if (term is Functor) { - Functor functor = (Functor)term; - return functor._args; - } - else - return new object[0]; - } - - public static bool var(object Term) - { - return YP.getValue(Term) is Variable; - } - - public static bool nonvar(object Term) - { - return !YP.var(Term); - } - - public static bool atom(object Term) - { - return YP.getValue(Term) is Atom; - } - - public static bool integer(object Term) - { - // Debug: Should exhaustively check for all integer types. - return getValue(Term) is int; - } - - // Use isFloat instead of float because it is a reserved keyword. - public static bool isFloat(object Term) - { - // Debug: Should exhaustively check for all float types. - return getValue(Term) is double; - } - - public static bool number(object Term) - { - return YP.integer(Term) || YP.isFloat(Term); - } - - public static bool atomic(object Term) - { - return YP.atom(Term) || YP.number(Term); - } - - public static bool compound(object Term) - { - Term = getValue(Term); - return Term is Functor1 || Term is Functor2 || Term is Functor3 || Term is Functor; - } - - /// - /// If input is a TextReader, use it. If input is an Atom or String, create a StreamReader with the - /// input as the filename. If input is a Prolog list, then read character codes from it. - /// - /// - public static void see(object input) - { - input = YP.getValue(input); - if (input is Variable) - throw new PrologException(Atom.a("instantiation_error"), "Arg is an unbound variable"); - - if (input == null) - { - _inputStream = null; - return; - } - if (input is TextReader) - { - _inputStream = (TextReader)input; - return; - } - else if (input is Atom) - { - _inputStream = new StreamReader(((Atom)input)._name); - return; - } - else if (input is String) - { - _inputStream = new StreamReader((String)input); - return; - } - else if (input is Functor2 && ((Functor2)input)._name == Atom.DOT) - { - _inputStream = new CodeListReader(input); - return; - } - else - throw new PrologException - (new Functor2("domain_error", Atom.a("stream_or_alias"), input), - "Input stream specifier not recognized"); - } - - public static void seen() - { - if (_inputStream == null) - return; - if (_inputStream == Console.In) - return; - _inputStream.Close(); - _inputStream = Console.In; - } - - public static IEnumerable current_input(object Stream) - { - return YP.unify(Stream, _inputStream); - } - - /// - /// If output is a TextWriter, use it. If output is an Atom or a String, create a StreamWriter - /// with the input as the filename. - /// - /// - public static void tell(object output) - { - output = YP.getValue(output); - if (output is Variable) - throw new PrologException(Atom.a("instantiation_error"), "Arg is an unbound variable"); - - if (output == null) - { - _outputStream = null; - return; - } - if (output is TextWriter) - { - _outputStream = (TextWriter)output; - return; - } - else if (output is Atom) - { - _outputStream = new StreamWriter(((Atom)output)._name); - return; - } - else if (output is String) - { - _outputStream = new StreamWriter((String)output); - return; - } - else - throw new PrologException - (new Functor2("domain_error", Atom.a("stream_or_alias"), output), - "Can't open stream for " + output); - } - - public static void told() - { - if (_outputStream == null) - return; - if (_outputStream == Console.Out) - return; - _outputStream.Close(); - _outputStream = Console.Out; - } - - public static IEnumerable current_output(object Stream) - { - return YP.unify(Stream, _outputStream); - } - - public static void write(object x) - { - if (_outputStream == null) - return; - x = YP.getValue(x); - if (x is double) - _outputStream.Write(doubleToString((double)x)); - else - _outputStream.Write(x.ToString()); - } - - /// - /// Format x as a string, making sure that it won't parse as an int later. I.e., for 1.0, don't just - /// use "1" which will parse as an int. - /// - /// - /// - private static string doubleToString(double x) - { - string xString = x.ToString(); - // Debug: Is there a way in C# to ask if a string parses as int without throwing an exception? - try - { - Convert.ToInt32(xString); - // The string will parse as an int, not a double, so re-format so that it does. - // Use float if possible, else exponential if it would be too big. - return x.ToString(x >= 100000.0 ? "E1" : "f1"); - } - catch (FormatException) - { - // Assume it will parse as a double. - } - return xString; - } - - public static void put_code(object x) - { - if (_outputStream == null) - return; - if (var(x)) - throw new PrologException(Atom.a("instantiation_error"), "Arg 1 is an unbound variable"); - int xInt; - if (!getInt(x, out xInt)) - throw new PrologException - (new Functor2("type_error", Atom.a("integer"), x), "Arg 1 must be integer"); - _outputStream.Write((char)xInt); - } - - public static void nl() - { - if (_outputStream == null) - return; - _outputStream.WriteLine(); - } - - public static IEnumerable get_code(object code) - { - if (_inputStream == null) - return YP.unify(code, -1); - else - return YP.unify(code, _inputStream.Read()); - } - - public static void asserta(object Term, Type declaringClass) - { - assertDynamic(Term, declaringClass, true); - } - - public static void assertz(object Term, Type declaringClass) - { - assertDynamic(Term, declaringClass, false); - } - - public static void assertDynamic(object Term, Type declaringClass, bool prepend) - { - Term = getValue(Term); - if (Term is Variable) - throw new PrologException("instantiation_error", "Term to assert is an unbound variable"); - - Variable.CopyStore copyStore = new Variable.CopyStore(); - object TermCopy = makeCopy(Term, copyStore); - object Head, Body; - if (TermCopy is Functor2 && ((Functor2)TermCopy)._name == Atom.RULE) - { - Head = YP.getValue(((Functor2)TermCopy)._arg1); - Body = YP.getValue(((Functor2)TermCopy)._arg2); - if (Head is Variable) - throw new PrologException("instantiation_error", "Head to assert is an unbound variable"); - if (Body is Variable) - throw new PrologException("instantiation_error", "Body to assert is an unbound variable"); - } - else - { - Head = TermCopy; - Body = Atom.a("true"); - } - - Atom name = getFunctorName(Head) as Atom; - if (name == null) - // name is a non-Atom, such as a number. - throw new PrologException - (new Functor2("type_error", Atom.a("callable"), Head), "Term to assert is not callable"); - object[] args = getFunctorArgs(Head); - if (isSystemPredicate(name, args.Length)) - throw new PrologException - (new Functor3("permission_error", Atom.a("modify"), Atom.a("static_procedure"), - new Functor2(Atom.SLASH, name, args.Length)), - "Assert cannot modify static predicate " + name + "/" + args.Length); - - if (copyStore.getNUniqueVariables() == 0 && Body == Atom.a("true")) - { - // This is a fact with no unbound variables - // assertFact and prependFact use IndexedAnswers, so don't we don't need to compile. - if (prepend) - prependFact(name, args); - else - assertFact(name, args); - - return; - } - - IClause clause = YPCompiler.compileAnonymousClause(Head, Body, declaringClass); - // We expect clause to be a ClauseHeadAndBody (from Compiler.compileAnonymousFunction) - // so we can set the Head and Body. - if (clause is ClauseHeadAndBody) - ((ClauseHeadAndBody)clause).setHeadAndBody(Head, Body); - - // Add the clause to the entry in _predicatesStore. - NameArity nameArity = new NameArity(name, args.Length); - List clauses; - if (!_predicatesStore.TryGetValue(nameArity, out clauses)) - // Create an entry for the nameArity. - _predicatesStore[nameArity] = (clauses = new List()); - - if (prepend) - clauses.Insert(0, clause); - else - clauses.Add(clause); - } - - private static bool isSystemPredicate(Atom name, int arity) - { - if (arity == 2 && (name == Atom.a(",") || name == Atom.a(";") || name == Atom.DOT)) - return true; - // Use the same mapping to static predicates in YP as the compiler. - foreach (bool l1 in YPCompiler.functorCallYPFunctionName(name, arity, new Variable())) - return true; - // Debug: Do we need to check if name._module is null? - return false; - } - - /// - /// Assert values at the end of the set of facts for the predicate with the - /// name and with arity values.Length. - /// - /// must be an Atom - /// the array of arguments to the fact predicate. - /// It is an error if an value has an unbound variable. - public static void assertFact(Atom name, object[] values) - { - NameArity nameArity = new NameArity(name, values.Length); - List clauses; - IndexedAnswers indexedAnswers; - if (!_predicatesStore.TryGetValue(nameArity, out clauses)) - { - // Create an IndexedAnswers as the only clause of the predicate. - _predicatesStore[nameArity] = (clauses = new List()); - clauses.Add(indexedAnswers = new IndexedAnswers(values.Length)); - } - else - { - indexedAnswers = null; - if (clauses.Count >= 1) - indexedAnswers = clauses[clauses.Count - 1] as IndexedAnswers; - if (indexedAnswers == null) - // The latest clause is not an IndexedAnswers, so add one. - clauses.Add(indexedAnswers = new IndexedAnswers(values.Length)); - } - - indexedAnswers.addAnswer(values); - } - - /// - /// Assert values, prepending to the front of the set of facts for the predicate with the - /// name and with arity values.Length. - /// - /// must be an Atom - /// the array of arguments to the fact predicate. - /// It is an error if an value has an unbound variable. - public static void prependFact(Atom name, object[] values) - { - NameArity nameArity = new NameArity(name, values.Length); - List clauses; - IndexedAnswers indexedAnswers; - if (!_predicatesStore.TryGetValue(nameArity, out clauses)) - { - // Create an IndexedAnswers as the only clause of the predicate. - _predicatesStore[nameArity] = (clauses = new List()); - clauses.Add(indexedAnswers = new IndexedAnswers(values.Length)); - } - else - { - indexedAnswers = null; - if (clauses.Count >= 1) - indexedAnswers = clauses[0] as IndexedAnswers; - if (indexedAnswers == null) - // The first clause is not an IndexedAnswers, so prepend one. - clauses.Insert(0, indexedAnswers = new IndexedAnswers(values.Length)); - } - - indexedAnswers.prependAnswer(values); - } - - /// - /// Match all clauses of the dynamic predicate with the name and with arity - /// arguments.Length. - /// If the predicate is not defined, return the result of YP.unknownPredicate. - /// - /// must be an Atom - /// an array of arity number of arguments - /// an iterator which you can use in foreach - public static IEnumerable matchDynamic(Atom name, object[] arguments) - { - List clauses; - if (!_predicatesStore.TryGetValue(new NameArity(name, arguments.Length), out clauses)) - return unknownPredicate(name, arguments.Length, - "Undefined dynamic predicate: " + name + "/" + arguments.Length); - - if (clauses.Count == 1) - // Usually there is only one clause, so return it without needing to wrap it in an iterator. - return clauses[0].match(arguments); - else - return matchAllClauses(clauses, arguments); - } - - /// - /// Call match(arguments) for each IClause in clauses. We make this a separate - /// function so that matchDynamic itself does not need to be an iterator object. - /// - /// - /// - /// - private static IEnumerable matchAllClauses(List clauses, object[] arguments) - { - // Debug: If the caller asserts another clause into this same predicate during yield, the iterator - // over clauses will be corrupted. Should we take the time to copy clauses? - foreach (IClause clause in clauses) - { - foreach (bool lastCall in clause.match(arguments)) - { - yield return false; - if (lastCall) - // This happens after a cut in a clause. - yield break; - } - } - } - - /// - /// If _prologFlags["unknown"] is fail then return fail(), else if - /// _prologFlags["unknown"] is warning then write the message to YP.write and - /// return fail(), else throw a PrologException for existence_error. . - /// - /// - /// - /// - /// - public static IEnumerable unknownPredicate(Atom name, int arity, string message) - { - establishPrologFlags(); - - if (_prologFlags["unknown"] == Atom.a("fail")) - return fail(); - else if (_prologFlags["unknown"] == Atom.a("warning")) - { - write(message); - nl(); - return fail(); - } - else - throw new PrologException - (new Functor2 - (Atom.a("existence_error"), Atom.a("procedure"), - new Functor2(Atom.SLASH, name, arity)), message); - } - - /// - /// This is deprecated and just calls matchDynamic. This matches all clauses, - /// not just the ones defined with assertFact. - /// - /// - /// - /// - public static IEnumerable matchFact(Atom name, object[] arguments) - { - return matchDynamic(name, arguments); - } - - public static IEnumerable clause(object Head, object Body) - { - Head = getValue(Head); - Body = getValue(Body); - if (Head is Variable) - throw new PrologException("instantiation_error", "Head is an unbound variable"); - - Atom name = getFunctorName(Head) as Atom; - if (name == null) - // name is a non-Atom, such as a number. - throw new PrologException - (new Functor2("type_error", Atom.a("callable"), Head), "Head is not callable"); - object[] args = getFunctorArgs(Head); - if (isSystemPredicate(name, args.Length)) - throw new PrologException - (new Functor3("permission_error", Atom.a("access"), Atom.a("private_procedure"), - new Functor2(Atom.SLASH, name, args.Length)), - "clause cannot access private predicate " + name + "/" + args.Length); - if (!(Body is Variable) && !(YP.getFunctorName(Body) is Atom)) - throw new PrologException - (new Functor2("type_error", Atom.a("callable"), Body), "Body is not callable"); - - List clauses; - if (!_predicatesStore.TryGetValue(new NameArity(name, args.Length), out clauses)) - yield break; - // The caller can assert another clause into this same predicate during yield, so we have to - // make a copy of the clauses. - foreach (IClause predicateClause in clauses.ToArray()) - { - foreach (bool l1 in predicateClause.clause(Head, Body)) - yield return false; - } - } - - public static IEnumerable retract(object Term) - { - Term = getValue(Term); - if (Term is Variable) - throw new PrologException("instantiation_error", "Term to retract is an unbound variable"); - - object Head, Body; - if (Term is Functor2 && ((Functor2)Term)._name == Atom.RULE) - { - Head = YP.getValue(((Functor2)Term)._arg1); - Body = YP.getValue(((Functor2)Term)._arg2); - } - else - { - Head = Term; - Body = Atom.a("true"); - } - if (Head is Variable) - throw new PrologException("instantiation_error", "Head is an unbound variable"); - - Atom name = getFunctorName(Head) as Atom; - if (name == null) - // name is a non-Atom, such as a number. - throw new PrologException - (new Functor2("type_error", Atom.a("callable"), Head), "Head is not callable"); - object[] args = getFunctorArgs(Head); - if (isSystemPredicate(name, args.Length)) - throw new PrologException - (new Functor3("permission_error", Atom.a("modify"), Atom.a("static_procedure"), - new Functor2(Atom.SLASH, name, args.Length)), - "clause cannot access private predicate " + name + "/" + args.Length); - if (!(Body is Variable) && !(YP.getFunctorName(Body) is Atom)) - throw new PrologException - (new Functor2("type_error", Atom.a("callable"), Body), "Body is not callable"); - - List clauses; - if (!_predicatesStore.TryGetValue(new NameArity(name, args.Length), out clauses)) - yield break; - // The caller can assert another clause into this same predicate during yield, so we have to - // make a copy of the clauses. - foreach (IClause predicateClause in clauses.ToArray()) - { - if (predicateClause is IndexedAnswers) - { - // IndexedAnswers handles its own retract. Even if it removes all of its - // answers, it is OK to leave it empty as one of the elements in clauses. - foreach (bool l1 in ((IndexedAnswers)predicateClause).retract(Head, Body)) - yield return false; - } - else - { - foreach (bool l1 in predicateClause.clause(Head, Body)) - { - clauses.Remove(predicateClause); - yield return false; - } - } - } - } - - /// - /// This is deprecated for backward compatibility. You should use retractall. - /// - /// must be an Atom - /// an array of arity number of arguments - public static void retractFact(Atom name, object[] arguments) - { - retractall(Functor.make(name, arguments)); - } - - /// - /// Retract all dynamic clauses which unify with Head. If this matches all clauses in a predicate, - /// the predicate is still defined. To completely remove the predicate, see abolish. - /// - /// - public static void retractall(object Head) - { - object name = YP.getFunctorName(Head); - object[] arguments = getFunctorArgs(Head); - if (!(name is Atom)) - return; - NameArity nameArity = new NameArity((Atom)name, arguments.Length); - List clauses; - if (!_predicatesStore.TryGetValue(nameArity, out clauses)) - // Can't find, so ignore. - return; - - foreach (object arg in arguments) - { - if (!YP.var(arg)) - throw new InvalidOperationException - ("Until matching retractall is supported, all arguments must be unbound to retract all clauses"); - } - // Clear all clauses. - _predicatesStore[nameArity] = new List(); - } - - /// - /// If NameSlashArity is var, match with all the dynamic predicates using the - /// Name/Artity form. - /// If NameSlashArity is not var, check if the Name/Arity exists as a static or - /// dynamic predicate. - /// - /// - /// if not null, used to resolve references to the default - /// module Atom.a("") - /// - public static IEnumerable current_predicate(object NameSlashArity, Type declaringClass) - { - NameSlashArity = YP.getValue(NameSlashArity); - // First check if Name and Arity are nonvar so we can do a direct lookup. - if (YP.ground(NameSlashArity)) - { - Functor2 NameArityFunctor = NameSlashArity as Functor2; - if (!(NameArityFunctor != null && NameArityFunctor._name == Atom.SLASH)) - throw new PrologException - (new Functor2("type_error", Atom.a("predicate_indicator"), NameSlashArity), - "Must be a name/arity predicate indicator"); - object name = YP.getValue(NameArityFunctor._arg1); - object arity = YP.getValue(NameArityFunctor._arg2); - if (name is Variable || arity is Variable) - throw new PrologException - ("instantiation_error", "Predicate indicator name or arity is an unbound variable"); - if (!(name is Atom && arity is int)) - throw new PrologException - (new Functor2("type_error", Atom.a("predicate_indicator"), NameSlashArity), - "Must be a name/arity predicate indicator"); - if ((int)arity < 0) - throw new PrologException - (new Functor2("domain_error", Atom.a("not_less_than_zero"), arity), - "Arity may not be less than zero"); - - if (YPCompiler.isCurrentPredicate((Atom)name, (int)arity, declaringClass)) - // The predicate is defined. - yield return false; - } - else - { - foreach (NameArity key in _predicatesStore.Keys) - { - foreach (bool l1 in YP.unify - (new Functor2(Atom.SLASH, key._name, key._arity), NameSlashArity)) - yield return false; - } - } - } - - /// - /// Return true if the dynamic predicate store has an entry for the predicate - /// with name and arity. - /// - /// - /// - /// - public static bool isDynamicCurrentPredicate(Atom name, int arity) - { - return _predicatesStore.ContainsKey(new NameArity(name, arity)); - } - - public static void abolish(object NameSlashArity) - { - NameSlashArity = YP.getValue(NameSlashArity); - if (NameSlashArity is Variable) - throw new PrologException - ("instantiation_error", "Predicate indicator is an unbound variable"); - Functor2 NameArityFunctor = NameSlashArity as Functor2; - if (!(NameArityFunctor != null && NameArityFunctor._name == Atom.SLASH)) - throw new PrologException - (new Functor2("type_error", Atom.a("predicate_indicator"), NameSlashArity), - "Must be a name/arity predicate indicator"); - object name = YP.getValue(NameArityFunctor._arg1); - object arity = YP.getValue(NameArityFunctor._arg2); - if (name is Variable || arity is Variable) - throw new PrologException - ("instantiation_error", "Predicate indicator name or arity is an unbound variable"); - if (!(name is Atom)) - throw new PrologException - (new Functor2("type_error", Atom.a("atom"), name), - "Predicate indicator name must be an atom"); - if (!(arity is int)) - throw new PrologException - (new Functor2("type_error", Atom.a("integer"), arity), - "Predicate indicator arity must be an integer"); - if ((int)arity < 0) - throw new PrologException - (new Functor2("domain_error", Atom.a("not_less_than_zero"), arity), - "Arity may not be less than zero"); - if ((int)arity > MAX_ARITY) - throw new PrologException - (new Functor1("representation_error", Atom.a("max_arity")), - "Arity may not be greater than " + MAX_ARITY); - - if (isSystemPredicate((Atom)name, (int)arity)) - throw new PrologException - (new Functor3("permission_error", Atom.a("modify"), Atom.a("static_procedure"), - new Functor2(Atom.SLASH, name, arity)), - "Abolish cannot modify static predicate " + name + "/" + arity); - _predicatesStore.Remove(new NameArity((Atom)name, (int)arity)); - } - - /// - /// If Goal is a simple predicate, call YP.getFunctorName(Goal) using arguments from - /// YP.getFunctorArgs(Goal). If not found, this throws a PrologException for existence_error. - /// Otherwise, compile the goal as a single clause predicate and invoke it. - /// - /// - /// if not null, used to resolve references to the default - /// module Atom.a("") - /// - public static IEnumerable getIterator(object Goal, Type declaringClass) - { - Atom name; - object[] args; - while (true) - { - Goal = YP.getValue(Goal); - if (Goal is Variable) - throw new PrologException("instantiation_error", "Goal to call is an unbound variable"); - name = YP.getFunctorName(Goal) as Atom; - if (name == null) - throw new PrologException - (new Functor2("type_error", Atom.a("callable"), Goal), "Goal to call is not callable"); - args = YP.getFunctorArgs(Goal); - if (name == Atom.HAT && args.Length == 2) - // Assume this is called from a bagof operation. Skip the leading qualifiers. - Goal = YP.getValue(((Functor2)Goal)._arg2); - else - break; - } - - IEnumerable simpleIterator = YPCompiler.getSimpleIterator(name, args, declaringClass); - if (simpleIterator != null) - // We don't need to compile since the goal is a simple predicate which we call directly. - return simpleIterator; - - // Compile the goal as a clause. - List variableSetList = new List(); - addUniqueVariables(Goal, variableSetList); - Variable[] variableSet = variableSetList.ToArray(); - - // Use Atom.F since it is ignored. - return YPCompiler.compileAnonymousClause - (Functor.make(Atom.F, variableSet), Goal, declaringClass).match(variableSet); - } - - public static void throwException(object Term) - { - throw new PrologException(Term); - } - /// - /// This must be called by any function that uses YP._prologFlags to make sure - /// the initial defaults are loaded. - /// - private static void establishPrologFlags() - { - if (_prologFlags.Count > 0) - // Already established. - return; - - // List these in the order they appear in the ISO standard. - _prologFlags["bounded"] = Atom.a("true"); - _prologFlags["max_integer"] = Int32.MaxValue; - _prologFlags["min_integer"] = Int32.MinValue; - _prologFlags["integer_rounding_function"] = Atom.a("toward_zero"); - _prologFlags["char_conversion"] = Atom.a("off"); - _prologFlags["debug"] = Atom.a("off"); - _prologFlags["max_arity"] = MAX_ARITY; - _prologFlags["unknown"] = Atom.a("error"); - _prologFlags["double_quotes"] = Atom.a("codes"); - } - - public static IEnumerable current_prolog_flag(object Key, object Value) - { - establishPrologFlags(); - - Key = YP.getValue(Key); - Value = YP.getValue(Value); - - if (Key is Variable) - { - // Bind all key values. - foreach (string key in _prologFlags.Keys) - { - foreach (bool l1 in YP.unify(Key, Atom.a(key))) - { - foreach (bool l2 in YP.unify(Value, _prologFlags[key])) - yield return false; - } - } - } - else - { - if (!(Key is Atom)) - throw new PrologException - (new Functor2("type_error", Atom.a("atom"), Key), "Arg 1 Key is not an atom"); - if (!_prologFlags.ContainsKey(((Atom)Key)._name)) - throw new PrologException - (new Functor2("domain_error", Atom.a("prolog_flag"), Key), - "Arg 1 Key is not a recognized flag"); - - foreach (bool l1 in YP.unify(Value, _prologFlags[((Atom)Key)._name])) - yield return false; - } - } - - public static void set_prolog_flag(object Key, object Value) - { - establishPrologFlags(); - - Key = YP.getValue(Key); - Value = YP.getValue(Value); - - if (Key is Variable) - throw new PrologException(Atom.a("instantiation_error"), - "Arg 1 Key is an unbound variable"); - if (Value is Variable) - throw new PrologException(Atom.a("instantiation_error"), - "Arg 1 Key is an unbound variable"); - if (!(Key is Atom)) - throw new PrologException - (new Functor2("type_error", Atom.a("atom"), Key), "Arg 1 Key is not an atom"); - - string keyName = ((Atom)Key)._name; - if (!_prologFlags.ContainsKey(keyName)) - throw new PrologException - (new Functor2("domain_error", Atom.a("prolog_flag"), Key), - "Arg 1 Key " + Key + " is not a recognized flag"); - - bool valueIsOK = false; - if (keyName == "char_conversion") - valueIsOK = (Value == _prologFlags[keyName]); - else if (keyName == "debug") - valueIsOK = (Value == _prologFlags[keyName]); - else if (keyName == "unknown") - valueIsOK = (Value == Atom.a("fail") || Value == Atom.a("warning") || - Value == Atom.a("error")); - else if (keyName == "double_quotes") - valueIsOK = (Value == Atom.a("codes") || Value == Atom.a("chars") || - Value == Atom.a("atom")); - else - throw new PrologException - (new Functor3("permission_error", Atom.a("modify"), Atom.a("flag"), Key), - "May not modify Prolog flag " + Key); - - if (!valueIsOK) - throw new PrologException - (new Functor2("domain_error", Atom.a("flag_value"), new Functor2("+", Key, Value)), - "May not set arg 1 Key " + Key + " to arg 2 Value " + Value); - - _prologFlags[keyName] = Value; - } - /// - /// script_event calls hosting script with events as a callback method. - /// - /// - /// - /// - public static IEnumerable script_event(object script_event, object script_params) - { - // string function = ((Atom)YP.getValue(script_event))._name; - object[] array = ListPair.toArray(script_params); - if (array == null) - yield return false; // return; // YP.fail(); - if (array.Length > 1) - { - //m_CmdManager.m_ScriptEngine.m_EventQueManager.AddToScriptQueue - //(localID, itemID, function, array); - // sortArray(array); - } - //return YP.unify(Sorted, ListPair.makeWithoutRepeatedTerms(array)); - yield return false; - } - - /* Non-prolog-ish functions for inline coding */ - public static string regexString(string inData, string inPattern, string presep,string postsep) - { - //string str=cycMessage; - //string strMatch = @"\. \#\$(.*)\)"; - string results = ""; - for (Match m = Regex.Match(inData,inPattern); m.Success; m=m.NextMatch()) - { - //Console.WriteLine( m ); - results += presep+ m + postsep; - } - return results; - } - - public static string cycComm(object msgobj) - { - string cycInputString = msgobj.ToString(); - string cycOutputString=""; - TcpClient socketForServer; - - try - { - socketForServer = new TcpClient("localHost", 3601); - } - catch - { - Console.WriteLine("Failed to connect to server at {0}:999", "localhost"); - return ""; - } - - NetworkStream networkStream = socketForServer.GetStream(); - - System.IO.StreamReader streamReader = new System.IO.StreamReader(networkStream); - - System.IO.StreamWriter streamWriter = new System.IO.StreamWriter(networkStream); - - try - { - // read the data from the host and display it - - { - - streamWriter.WriteLine(cycInputString); - streamWriter.Flush(); - - cycOutputString = streamReader.ReadLine(); - Console.WriteLine("Cycoutput:" + cycOutputString); - //streamWriter.WriteLine("Client Message"); - //Console.WriteLine("Client Message"); - streamWriter.Flush(); - } - - } - catch - { - Console.WriteLine("Exception reading from Server"); - return ""; - } - // tidy up - networkStream.Close(); - return cycOutputString; - - } - //public static void throwException(object Term) - //{ - // throw new PrologException(Term); - //} - /// - /// An enumerator that does zero loops. - /// - private class Fail : IEnumerator, IEnumerable - { - public bool MoveNext() - { - return false; - } - - public IEnumerator GetEnumerator() - { - return (IEnumerator)this; - } - - IEnumerator IEnumerable.GetEnumerator() - { - return GetEnumerator(); - } - - public bool Current - { - get { return true; } - } - - object IEnumerator.Current - { - get { return true; } - } - - public void Dispose() - { - } - - public void Reset() - { - throw new NotImplementedException(); - } - } - - /// - /// An enumerator that does one iteration. - /// - private class Succeed : IEnumerator, IEnumerable - { - private bool _didIteration = false; - - public bool MoveNext() - { - if (!_didIteration) - { - _didIteration = true; - return true; - } - else - return false; - } - - public IEnumerator GetEnumerator() - { - return (IEnumerator)this; - } - - IEnumerator IEnumerable.GetEnumerator() - { - return GetEnumerator(); - } - - public bool Current - { - get { return false; } - } - - object IEnumerator.Current - { - get { return false; } - } - - public void Dispose() - { - } - - public void Reset() - { - throw new NotImplementedException(); - } - } - - /// - /// An enumerator that repeats forever. - /// - private class Repeat : IEnumerator, IEnumerable - { - public bool MoveNext() - { - return true; - } - - public IEnumerator GetEnumerator() - { - return (IEnumerator)this; - } - - IEnumerator IEnumerable.GetEnumerator() - { - return GetEnumerator(); - } - - public bool Current - { - get { return false; } - } - - object IEnumerator.Current - { - get { return false; } - } - - public void Dispose() - { - } - - public void Reset() - { - throw new NotImplementedException(); - } - } - - /// - /// An enumerator that wraps another enumerator in order to catch a PrologException. - /// - public class Catch : IEnumerator, IEnumerable - { - private IEnumerator _enumerator; - private PrologException _exception = null; - - /// - /// Call YP.getIterator(Goal, declaringClass) and save the returned iterator. - /// If getIterator throws an exception, save it the same as MoveNext(). - /// - /// - /// - public Catch(object Goal, Type declaringClass) - { - try - { - _enumerator = getIterator(Goal, declaringClass).GetEnumerator(); - } - catch (PrologException exception) - { - // MoveNext() will check this. - _exception = exception; - } - } - - /// - /// Call _enumerator.MoveNext(). If it throws a PrologException, set _exception - /// and return false. After this returns false, call unifyExceptionOrThrow. - /// - /// - public bool MoveNext() - { - if (_exception != null) - return false; - - try - { - return _enumerator.MoveNext(); - } - catch (PrologException exception) - { - _exception = exception; - return false; - } - } - - /// - /// Call this after MoveNext() returns false to check for an exception. If - /// MoveNext did not get a PrologException, don't yield. - /// Otherwise, unify the exception with Catcher and yield so the caller can - /// do the handler code. However, if can't unify with Catcher then throw the exception. - /// - /// - /// - public IEnumerable unifyExceptionOrThrow(object Catcher) - { - if (_exception != null) - { - bool didUnify = false; - foreach (bool l1 in YP.unify(_exception._term, Catcher)) - { - didUnify = true; - yield return false; - } - if (!didUnify) - throw _exception; - } - } - - public IEnumerator GetEnumerator() - { - return (IEnumerator)this; - } - - IEnumerator IEnumerable.GetEnumerator() - { - return GetEnumerator(); - } - - public bool Current - { - get { return _enumerator.Current; } - } - - object IEnumerator.Current - { - get { return _enumerator.Current; } - } - - public void Dispose() - { - if (_enumerator != null) - _enumerator.Dispose(); - } - - public void Reset() - { - throw new NotImplementedException(); - } - } - #pragma warning restore 0168 - /// - /// A ClauseHeadAndBody is used in Compiler.compileAnonymousFunction as a base class - /// in order to implement YP.IClause. After creating the object, you must call setHeadAndBody. - /// - public class ClauseHeadAndBody - { - private object _Head; - private object _Body; - - public void setHeadAndBody(object Head, object Body) - { - _Head = Head; - _Body = Body; - } - - public IEnumerable clause(object Head, object Body) - { - if (_Head == null || _Body == null) - yield break; - - #pragma warning disable 0168 - foreach (bool l1 in YP.unify(Head, _Head)) - { - foreach (bool l2 in YP.unify(Body, _Body)) - yield return false; - } - #pragma warning restore 0168 - } - } - - /// - /// CodeListReader extends TextReader and overrides Read to read the next code from - /// the CodeList which is a Prolog list of integer character codes. - /// - public class CodeListReader : TextReader - { - private object _CodeList; - - public CodeListReader(object CodeList) - { - _CodeList = YP.getValue(CodeList); - } - - /// - /// If the head of _CodeList is an integer, return it and advance the list. Otherwise, - /// return -1 for end of file. - /// - /// - public override int Read() - { - Functor2 CodeListPair = _CodeList as Functor2; - int code; - if (!(CodeListPair != null && CodeListPair._name == Atom.DOT && - getInt(CodeListPair._arg1, out code))) - { - _CodeList = Atom.NIL; - return -1; - } - - // Advance. - _CodeList = YP.getValue(CodeListPair._arg2); - return code; - } - } - } -} diff --git a/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/YieldProlog/YPCompiler.cs b/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/YieldProlog/YPCompiler.cs deleted file mode 100644 index 1d9c0ef..0000000 --- a/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/YieldProlog/YPCompiler.cs +++ /dev/null @@ -1,6382 +0,0 @@ -/* - * Copyright (C) 2007-2008, Jeff Thompson - * - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * * Neither the name of the copyright holder nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -using System; -using System.IO; -using System.Collections; -using System.Collections.Generic; -using System.Text; -using System.CodeDom.Compiler; -using System.Reflection; - -namespace OpenSim.Region.ScriptEngine.DotNetEngine.Compiler.YieldProlog -{ - public class YPCompiler - { - private class CompilerState - { - public IndexedAnswers _pred = new IndexedAnswers(4); - public Dictionary _moduleForNameArity = new Dictionary(); - public int _gensymCounter; - public bool _useFinalCutCode; - public Variable _finalCutCode; - public bool _codeUsesYield; - public Atom _determinism; - // a list of '='(Name, Variable) - public List _variableNames; - - // Make these static functions that explicitly take the State so Prolog can call it. - - /// - /// Make a new CompilerState and bind it to State. - /// - /// - /// - public static IEnumerable make(object State) - { - return YP.unify(State, new CompilerState()); - } - - public static void assertPred(object State, object Pred, object Determinism) - { - State = YP.getValue(State); - object functorName = YP.getFunctorName(Pred); - object[] functorArgs = YP.getFunctorArgs(Pred); - // Debug: Should check if it's already asserted and is the same. - ((CompilerState)State)._pred.addAnswer - (new object[] { functorName, functorArgs.Length, Pred, YP.getValue(Determinism) }); - } - - public static void assertModuleForNameArity(object State, object Name, object Arity, object Module) - { - State = YP.getValue(State); - Name = YP.getValue(Name); - Arity = YP.getValue(Arity); - Module = YP.getValue(Module); - // If the Module Atom comes from the parser, it always has null _declaringClass. - if (Module is Atom && ((Atom)Module)._module == null && Name is Atom && Arity is int) - // Replace a previous entry if it exists. - ((CompilerState)State)._moduleForNameArity[new YP.NameArity((Atom)Name, (int)Arity)] = - (Atom)Module; - } - - public static void startFunction(object State, object Head) - { - State = YP.getValue(State); - ((CompilerState)State)._gensymCounter = 0; - ((CompilerState)State)._useFinalCutCode = false; - ((CompilerState)State)._finalCutCode = new Variable(); - ((CompilerState)State)._codeUsesYield = false; - if (CompilerState.isDetNoneOut(State, Head)) - ((CompilerState)State)._determinism = Atom.a("detNoneOut"); - else if (CompilerState.isSemidetNoneOut(State, Head)) - ((CompilerState)State)._determinism = Atom.a("semidetNoneOut"); - else - ((CompilerState)State)._determinism = Atom.a("nondet"); - } - - public static void setCodeUsesYield(object State) - { - State = YP.getValue(State); - ((CompilerState)State)._codeUsesYield = true; - } - - public static bool codeUsesYield(object State) - { - State = YP.getValue(State); - return ((CompilerState)State)._codeUsesYield; - } - - public static bool determinismEquals(object State, object Term) - { - State = YP.getValue(State); - return YP.termEqual(((CompilerState)State)._determinism, Term); - } - - /// - /// Set _variableNames to a new list of (Name = Variable) for each unique variable in rule. - /// If the variable is in variableNameSuggestions, use it, otherwise use x1, x2, etc. - /// - /// - /// - /// - public static void newVariableNames(object State, object Rule, object VariableNameSuggestions) - { - State = YP.getValue(State); - List variablesSet = new List(); - YP.addUniqueVariables(Rule, variablesSet); - - ((CompilerState)State)._variableNames = new List(); - int xCounter = 0; - foreach (Variable variable in variablesSet) - ((CompilerState)State)._variableNames.Add - (new Functor2(Atom.a("="), makeVariableName(variable, VariableNameSuggestions, ++xCounter), - variable)); - } - - private static object makeVariableName(object variable, object variableNameSuggestions, int xCounter) - { - // Debug: should require named variables to start with _ or capital. Should - // check for duplicates and clashes with keywords. - for (object element = YP.getValue(variableNameSuggestions); - element is Functor2 && ((Functor2)element)._name == Atom.DOT; - element = YP.getValue(((Functor2)element)._arg2)) - { - object suggestionPair = YP.getValue(((Functor2)element)._arg1); - if (sameVariable(variable, ((Functor2)suggestionPair)._arg2)) - { - Atom suggestion = (Atom)YP.getValue(((Functor2)suggestionPair)._arg1); - if (suggestion.Equals(Atom.a("Atom"))) - suggestion = Atom.a("Atom_1"); - if (suggestion.Equals(Atom.a("Variable"))) - suggestion = Atom.a("Variable_1"); - if (suggestion.Equals(Atom.a("Functor"))) - suggestion = Atom.a("Functor_1"); - return suggestion; - } - } - - return Atom.a("x" + xCounter); - } - - /// - /// Unify Result with the name assigned by CompilerState.newVariableNames in State._variableNames - /// for variable. - /// - /// a Variable - /// - /// the assigned Name - public static IEnumerable getVariableName(object State, object variable, object Result) - { - State = YP.getValue(State); - foreach (object variableInfo in ((CompilerState)State)._variableNames) - { - if (variableInfo is Functor2 && ((Functor2)variableInfo)._name.Equals(Atom.a("="))) - { - if (sameVariable(variable, ((Functor2)variableInfo)._arg2)) - return YP.unify(Result, ((Functor2)variableInfo)._arg1); - } - } - - // We set up names for all unique variables, so this should never happen. - throw new PrologException(Atom.a("Can't find entry in _variableNames")); - } - - public static IEnumerable variableNamesList(object State, object VariableNamesList) - { - State = YP.getValue(State); - return YP.unify(VariableNamesList, ListPair.make(((CompilerState)State)._variableNames)); - } - - public static IEnumerable gensym(object State, object Base, object Symbol) - { - State = YP.getValue(State); - return YP.unify(Symbol, Atom.a(Base.ToString() + ++((CompilerState)State)._gensymCounter)); - } - - // disable warning on l1, don't see how we can - // code this differently - #pragma warning disable 0168,0164,0162 - public static bool isDetNoneOut(object State, object Term) - { - State = YP.getValue(State); - object functorName = YP.getFunctorName(Term); - object[] functorArgs = YP.getFunctorArgs(Term); - - Variable pred = new Variable(); - foreach (bool l1 in ((CompilerState)State)._pred.match - (new object[] { functorName, functorArgs.Length, pred, Atom.a("det") })) - { - if (CompilerState.isNoneOut(YP.getFunctorArgs(pred.getValue()))) - { - return true; - } - } - - return false; - } - - public static bool isSemidetNoneOut(object State, object Term) - { - State = YP.getValue(State); - object functorName = YP.getFunctorName(Term); - object[] functorArgs = YP.getFunctorArgs(Term); - - Variable pred = new Variable(); - foreach (bool l1 in ((CompilerState)State)._pred.match - (new object[] { functorName, functorArgs.Length, pred, Atom.a("semidet") })) - { - if (CompilerState.isNoneOut(YP.getFunctorArgs(pred.getValue()))) - { - return true; - } - } - - return false; - } - #pragma warning restore 0168,0164,0162 - - /// - /// Return false if any of args is out, otherwise true. - /// args is an array of ::(Type,Mode) where Mode is in or out. - /// - /// - /// - private static bool isNoneOut(object[] args) - { - foreach (object arg in args) - { - if (arg is Functor2 && ((Functor2)arg)._name == Atom.a("::") && - ((Functor2)arg)._arg2 == Atom.a("out")) - return false; - } - return true; - } - - public static bool nameArityHasModule(object State, object Name, object Arity, object Module) - { - State = YP.getValue(State); - Name = YP.getValue(Name); - Arity = YP.getValue(Arity); - Module = YP.getValue(Module); - if (Name is Atom && Arity is int) - { - Atom FoundModule; - if (!((CompilerState)State)._moduleForNameArity.TryGetValue - (new YP.NameArity((Atom)Name, (int)Arity), out FoundModule)) - return false; - return FoundModule == Module; - } - return false; - } - } - - // disable warning on l1, don't see how we can - // code this differently - #pragma warning disable 0168, 0219,0164,0162 - - /// - /// Use makeFunctionPseudoCode, convertFunctionCSharp and compileAnonymousFunction - /// to return an anonymous YP.IClause for the Head and Body of a rule clause. - /// - /// a prolog term such as new Functor2("test1", X, Y). - /// Note that the name of the head is ignored. - /// - /// a prolog term such as - /// new Functor2(",", new Functor1(Atom.a("test2", Atom.a("")), X), - /// new Functor2("=", Y, X)). - /// This may not be null. (For a head-only clause, set the Body to Atom.a("true"). - /// - /// if not null, the code is compiled as a subclass of this class - /// to resolve references to the default module Atom.a("") - /// a new YP.IClause object on which you can call match(object[] args) where - /// args length is the arity of the Head - public static YP.IClause compileAnonymousClause(object Head, object Body, Type declaringClass) - { - object[] args = YP.getFunctorArgs(Head); - // compileAnonymousFunction wants "function". - object Rule = new Functor2(Atom.RULE, Functor.make("function", args), Body); - object RuleList = ListPair.make(new Functor2(Atom.F, Rule, Atom.NIL)); - - StringWriter functionCode = new StringWriter(); - Variable SaveOutputStream = new Variable(); - foreach (bool l1 in YP.current_output(SaveOutputStream)) - { - try - { - YP.tell(functionCode); - Variable PseudoCode = new Variable(); - foreach (bool l2 in makeFunctionPseudoCode(RuleList, PseudoCode)) - { - if (YP.termEqual(PseudoCode, Atom.a("getDeclaringClass"))) - // Ignore getDeclaringClass since we have access to the one passed in. - continue; - - convertFunctionCSharp(PseudoCode); - } - YP.told(); - } - finally - { - // Restore after calling tell. - YP.tell(SaveOutputStream.getValue()); - } - } - return YPCompiler.compileAnonymousFunction - (functionCode.ToString(), args.Length, declaringClass); - } - - /// - /// Use CodeDomProvider to compile the functionCode and return a YP.ClauseHeadAndBody - /// which implements YP.IClause. - /// The function name must be "function" and have nArgs arguments. - /// - /// the code for the iterator, such as - /// "public static IEnumerable function() { yield return false; }" - /// - /// the number of args in the function - /// if not null, then use the functionCode inside a class which - /// inherits from contextClass, so that references in functionCode to methods in declaringClass don't - /// have to be qualified - /// a new YP.IClause object on which you can call match(object[] args) where - /// args length is nArgs - public static YP.IClause compileAnonymousFunction(string functionCode, int nArgs, Type declaringClass) - { - CompilerParameters parameters = new CompilerParameters(); - // This gets the location of the System assembly. - parameters.ReferencedAssemblies.Add(typeof(System.Int32).Assembly.Location); - // This gets the location of this assembly which also has YieldProlog.YP, etc. - parameters.ReferencedAssemblies.Add(typeof(YPCompiler).Assembly.Location); - if (declaringClass != null) - parameters.ReferencedAssemblies.Add(declaringClass.Assembly.Location); - parameters.GenerateInMemory = true; - - StringBuilder sourceCode = new StringBuilder(); - sourceCode.Append(@" -using System; -using System.Collections.Generic; -using YieldProlog; - -namespace Temporary { - public class Temporary : YP.ClauseHeadAndBody, YP.IClause {"); - if (declaringClass == null) - // We don't extend a class with getDeclaringClass, so define it. - sourceCode.Append(@" - public class Inner { - public static System.Type getDeclaringClass() { return null; } -"); - else - sourceCode.Append(@" - public class Inner : " + declaringClass.FullName + @" { -"); - sourceCode.Append(functionCode); - // Basically, match applies the args to function. - sourceCode.Append(@" - } - public IEnumerable match(object[] args) { - return Inner.function("); - if (nArgs >= 1) - sourceCode.Append("args[0]"); - for (int i = 1; i < nArgs; ++i) - sourceCode.Append(", args[" + i + "]"); - sourceCode.Append(@"); - } - } -} -"); - - CompilerResults results = CodeDomProvider.CreateProvider - ("CSharp").CompileAssemblyFromSource(parameters, sourceCode.ToString()); - if (results.Errors.Count > 0) - throw new Exception("Error evaluating code: " + results.Errors[0]); - - // Return a new Temporary.Temporary object. - return (YP.IClause)results.CompiledAssembly.GetType - ("Temporary.Temporary").GetConstructor(Type.EmptyTypes).Invoke(null); - } - - /// - /// If the functor with name and args can be called directly as determined by - /// functorCallFunctionName, then call it and return its iterator. If the predicate is - /// dynamic and undefined, or if static and the method cannot be found, return - /// the result of YP.unknownPredicate. - /// This returns null if the functor has a special form than needs to be compiled - /// (including ,/2 and ;/2). - /// - /// - /// - /// used to resolve references to the default - /// module Atom.a(""). If a declaringClass is needed to resolve the reference but it is - /// null, this throws a PrologException for existence_error - /// - public static IEnumerable getSimpleIterator(Atom name, object[] args, Type declaringClass) - { - CompilerState state = new CompilerState(); - Variable FunctionName = new Variable(); - foreach (bool l1 in functorCallFunctionName(state, name, args.Length, FunctionName)) - { - Atom functionNameAtom = ((Atom)FunctionName.getValue()); - if (functionNameAtom == Atom.NIL) - // name is for a dynamic predicate. - return YP.matchDynamic(name, args); - - string methodName = functionNameAtom._name; - // Set the default for the method to call. - Type methodClass = declaringClass; - - bool checkMode = false; - if (methodName.StartsWith("YP.")) - { - // Assume we only check mode in calls to standard Prolog predicates in YP. - checkMode = true; - - // Use the method in class YP. - methodName = methodName.Substring(3); - methodClass = typeof(YP); - } - if (methodName.Contains(".")) - // We don't support calling inner classes, etc. - return null; - - if (methodClass == null) - return YP.unknownPredicate - (name, args.Length, - "Cannot find predicate function for: " + name + "/" + args.Length + - " because declaringClass is null. Set declaringClass to the class containing " + - methodName); - try - { - if (checkMode) - { - assertYPPred(state); - object functor = Functor.make(name, args); - if (CompilerState.isDetNoneOut(state, functor)) - { - methodClass.InvokeMember - (methodName, BindingFlags.InvokeMethod, null, null, args); - return YP.succeed(); - } - if (CompilerState.isSemidetNoneOut(state, functor)) - { - if ((bool)methodClass.InvokeMember - (methodName, BindingFlags.InvokeMethod, null, null, args)) - return YP.succeed(); - else - return YP.fail(); - } - - } - return (IEnumerable)methodClass.InvokeMember - (methodName, BindingFlags.InvokeMethod, null, null, args); - } - catch (TargetInvocationException exception) - { - throw exception.InnerException; - } - catch (MissingMethodException) - { - return YP.unknownPredicate - (name, args.Length, - "Cannot find predicate function " + methodName + " for " + name + "/" + args.Length + - " in " + methodClass.FullName); - } - } - - return null; - } - - /// - /// Return true if there is a dynamic or static predicate with name and arity. - /// This returns false for built-in predicates. - /// - /// - /// - /// used to resolve references to the default - /// module Atom.a(""). If a declaringClass is needed to resolve the reference but it is - /// null, return false - /// - public static bool isCurrentPredicate(Atom name, int arity, Type declaringClass) - { - CompilerState state = new CompilerState(); - Variable FunctionName = new Variable(); - foreach (bool l1 in functorCallFunctionName(state, name, arity, FunctionName)) - { - Atom functionNameAtom = ((Atom)FunctionName.getValue()); - if (functionNameAtom == Atom.NIL) - // name is for a dynamic predicate. - return YP.isDynamicCurrentPredicate(name, arity); - - string methodName = functionNameAtom._name; - - if (methodName.StartsWith("YP.")) - // current_predicate/1 should fail for built-ins. - return false; - if (methodName.Contains(".")) - // We don't support calling inner classes, etc. - return false; - if (declaringClass == null) - return false; - - foreach (MemberInfo member in declaringClass.GetMember(methodName)) - { - MethodInfo method = member as MethodInfo; - if (method == null) - continue; - if ((method.Attributes | MethodAttributes.Static) == 0) - // Not a static method. - continue; - if (method.GetParameters().Length == arity) - return true; - } - } - - return false; - } - - // Compiler output follows. - - public class YPInnerClass { } - public static System.Type getDeclaringClass() { return typeof(YPInnerClass).DeclaringType; } - - public static void repeatWrite(object arg1, object N) - { - { - object _Value = arg1; - if (YP.termEqual(N, 0)) - { - return; - } - } - { - object Value = arg1; - Variable NextN = new Variable(); - YP.write(Value); - foreach (bool l2 in YP.unify(NextN, YP.subtract(N, 1))) - { - repeatWrite(Value, NextN); - return; - } - } - } - - public static bool sameVariable(object Variable1, object Variable2) - { - { - if (YP.var(Variable1)) - { - if (YP.var(Variable2)) - { - if (YP.termEqual(Variable1, Variable2)) - { - return true; - } - } - } - } - return false; - } - - public static IEnumerable makeFunctionPseudoCode(object RuleList, object FunctionCode) - { - { - Variable State = new Variable(); - foreach (bool l2 in CompilerState.make(State)) - { - assertYPPred(State); - processCompilerDirectives(RuleList, State); - foreach (bool l3 in YP.unify(FunctionCode, Atom.a("getDeclaringClass"))) - { - yield return false; - } - foreach (bool l3 in makeFunctionPseudoCode3(RuleList, State, FunctionCode)) - { - yield return false; - } - } - } - } - - public static void assertYPPred(object State) - { - { - CompilerState.assertPred(State, Atom.a("nl"), Atom.a("det")); - CompilerState.assertPred(State, new Functor1("write", new Functor2("::", Atom.a("univ"), Atom.a("in"))), Atom.a("det")); - CompilerState.assertPred(State, new Functor1("put_code", new Functor2("::", Atom.a("univ"), Atom.a("in"))), Atom.a("det")); - CompilerState.assertPred(State, new Functor1("see", new Functor2("::", Atom.a("univ"), Atom.a("in"))), Atom.a("det")); - CompilerState.assertPred(State, Atom.a("seen"), Atom.a("det")); - CompilerState.assertPred(State, new Functor1("tell", new Functor2("::", Atom.a("univ"), Atom.a("in"))), Atom.a("det")); - CompilerState.assertPred(State, Atom.a("told"), Atom.a("det")); - CompilerState.assertPred(State, new Functor1("throw", new Functor2("::", Atom.a("univ"), Atom.a("in"))), Atom.a("det")); - CompilerState.assertPred(State, new Functor1("abolish", new Functor2("::", Atom.a("univ"), Atom.a("in"))), Atom.a("det")); - CompilerState.assertPred(State, new Functor1("retractall", new Functor2("::", Atom.a("univ"), Atom.a("in"))), Atom.a("det")); - CompilerState.assertPred(State, new Functor2("set_prolog_flag", new Functor2("::", Atom.a("univ"), Atom.a("in")), new Functor2("::", Atom.a("univ"), Atom.a("in"))), Atom.a("det")); - CompilerState.assertPred(State, new Functor1("var", new Functor2("::", Atom.a("univ"), Atom.a("in"))), Atom.a("semidet")); - CompilerState.assertPred(State, new Functor1("nonvar", new Functor2("::", Atom.a("univ"), Atom.a("in"))), Atom.a("semidet")); - CompilerState.assertPred(State, new Functor1("atom", new Functor2("::", Atom.a("univ"), Atom.a("in"))), Atom.a("semidet")); - CompilerState.assertPred(State, new Functor1("integer", new Functor2("::", Atom.a("univ"), Atom.a("in"))), Atom.a("semidet")); - CompilerState.assertPred(State, new Functor1("float", new Functor2("::", Atom.a("univ"), Atom.a("in"))), Atom.a("semidet")); - CompilerState.assertPred(State, new Functor1("number", new Functor2("::", Atom.a("univ"), Atom.a("in"))), Atom.a("semidet")); - CompilerState.assertPred(State, new Functor1("atomic", new Functor2("::", Atom.a("univ"), Atom.a("in"))), Atom.a("semidet")); - CompilerState.assertPred(State, new Functor1("compound", new Functor2("::", Atom.a("univ"), Atom.a("in"))), Atom.a("semidet")); - CompilerState.assertPred(State, new Functor2("==", new Functor2("::", Atom.a("univ"), Atom.a("in")), new Functor2("::", Atom.a("univ"), Atom.a("in"))), Atom.a("semidet")); - CompilerState.assertPred(State, new Functor2("\\==", new Functor2("::", Atom.a("univ"), Atom.a("in")), new Functor2("::", Atom.a("univ"), Atom.a("in"))), Atom.a("semidet")); - CompilerState.assertPred(State, new Functor2("@<", new Functor2("::", Atom.a("univ"), Atom.a("in")), new Functor2("::", Atom.a("univ"), Atom.a("in"))), Atom.a("semidet")); - CompilerState.assertPred(State, new Functor2("@=<", new Functor2("::", Atom.a("univ"), Atom.a("in")), new Functor2("::", Atom.a("univ"), Atom.a("in"))), Atom.a("semidet")); - CompilerState.assertPred(State, new Functor2("@>", new Functor2("::", Atom.a("univ"), Atom.a("in")), new Functor2("::", Atom.a("univ"), Atom.a("in"))), Atom.a("semidet")); - CompilerState.assertPred(State, new Functor2("@>=", new Functor2("::", Atom.a("univ"), Atom.a("in")), new Functor2("::", Atom.a("univ"), Atom.a("in"))), Atom.a("semidet")); - return; - } - } - - public static void processCompilerDirectives(object arg1, object arg2) - { - { - object _State = arg2; - foreach (bool l2 in YP.unify(arg1, Atom.NIL)) - { - return; - } - } - { - object State = arg2; - Variable Pred = new Variable(); - Variable Determinism = new Variable(); - Variable x3 = new Variable(); - Variable RestRules = new Variable(); - foreach (bool l2 in YP.unify(arg1, new ListPair(new Functor2("f", new Functor1(":-", new Functor1("pred", new Functor2("is", Pred, Determinism))), x3), RestRules))) - { - CompilerState.assertPred(State, Pred, Determinism); - processCompilerDirectives(RestRules, State); - return; - } - } - { - object State = arg2; - Variable Module = new Variable(); - Variable PredicateList = new Variable(); - Variable x3 = new Variable(); - Variable RestRules = new Variable(); - foreach (bool l2 in YP.unify(arg1, new ListPair(new Functor2("f", new Functor1(":-", new Functor2("import", Module, PredicateList)), x3), RestRules))) - { - foreach (bool l3 in importPredicateList(State, Module, PredicateList)) - { - processCompilerDirectives(RestRules, State); - return; - } - } - } - { - object State = arg2; - Variable x1 = new Variable(); - Variable x2 = new Variable(); - Variable RestRules = new Variable(); - foreach (bool l2 in YP.unify(arg1, new ListPair(new Functor2("f", new Functor1(":-", x1), x2), RestRules))) - { - processCompilerDirectives(RestRules, State); - return; - } - } - { - object State = arg2; - Variable Head = new Variable(); - Variable _Body = new Variable(); - Variable x3 = new Variable(); - Variable RestRules = new Variable(); - Variable Name = new Variable(); - Variable Arity = new Variable(); - foreach (bool l2 in YP.unify(arg1, new ListPair(new Functor2("f", new Functor2(":-", Head, _Body), x3), RestRules))) - { - foreach (bool l3 in YP.functor(Head, Name, Arity)) - { - CompilerState.assertModuleForNameArity(State, Name, Arity, Atom.a("")); - processCompilerDirectives(RestRules, State); - return; - } - } - } - { - object State = arg2; - Variable Fact = new Variable(); - Variable x2 = new Variable(); - Variable RestRules = new Variable(); - Variable Name = new Variable(); - Variable Arity = new Variable(); - foreach (bool l2 in YP.unify(arg1, new ListPair(new Functor2("f", Fact, x2), RestRules))) - { - foreach (bool l3 in YP.functor(Fact, Name, Arity)) - { - CompilerState.assertModuleForNameArity(State, Name, Arity, Atom.a("")); - processCompilerDirectives(RestRules, State); - return; - } - } - } - { - object State = arg2; - Variable x1 = new Variable(); - Variable RestRules = new Variable(); - foreach (bool l2 in YP.unify(arg1, new ListPair(x1, RestRules))) - { - processCompilerDirectives(RestRules, State); - return; - } - } - } - - public static IEnumerable importPredicateList(object arg1, object arg2, object arg3) - { - { - object _State = arg1; - object _Module = arg2; - foreach (bool l2 in YP.unify(arg3, Atom.NIL)) - { - yield return true; - yield break; - } - } - { - object State = arg1; - object Module = arg2; - Variable Name = new Variable(); - Variable Arity = new Variable(); - Variable Rest = new Variable(); - foreach (bool l2 in YP.unify(arg3, new ListPair(new Functor2("/", Name, Arity), Rest))) - { - CompilerState.assertModuleForNameArity(State, Name, Arity, Module); - foreach (bool l3 in importPredicateList(State, Module, Rest)) - { - yield return true; - yield break; - } - } - } - { - object State = arg1; - object Module = arg2; - Variable x3 = new Variable(); - Variable Rest = new Variable(); - foreach (bool l2 in YP.unify(arg3, new ListPair(x3, Rest))) - { - foreach (bool l3 in importPredicateList(State, Module, Rest)) - { - yield return true; - yield break; - } - } - } - } - - public static IEnumerable makeFunctionPseudoCode3(object RuleList, object State, object FunctionCode) - { - { - Variable SamePredicateRuleList = new Variable(); - Variable RestRules = new Variable(); - foreach (bool l2 in samePredicateRuleList(RuleList, SamePredicateRuleList, RestRules)) - { - if (YP.termNotEqual(SamePredicateRuleList, Atom.NIL)) - { - foreach (bool l4 in compileSamePredicateFunction(SamePredicateRuleList, State, FunctionCode)) - { - yield return false; - } - foreach (bool l4 in makeFunctionPseudoCode3(RestRules, State, FunctionCode)) - { - yield return false; - } - } - } - } - } - - public static IEnumerable compileSamePredicateFunction(object SamePredicateRuleList, object State, object FunctionCode) - { - { - Variable FirstRule = new Variable(); - Variable x5 = new Variable(); - Variable x6 = new Variable(); - Variable x7 = new Variable(); - Variable Head = new Variable(); - Variable x9 = new Variable(); - Variable ArgAssignments = new Variable(); - Variable Calls = new Variable(); - Variable Rule = new Variable(); - Variable VariableNameSuggestions = new Variable(); - Variable ClauseBag = new Variable(); - Variable Name = new Variable(); - Variable ArgsList = new Variable(); - Variable FunctionArgNames = new Variable(); - Variable MergedArgName = new Variable(); - Variable ArgName = new Variable(); - Variable MergedArgNames = new Variable(); - Variable FunctionArgs = new Variable(); - Variable BodyCode = new Variable(); - Variable ReturnType = new Variable(); - Variable BodyWithReturn = new Variable(); - foreach (bool l2 in YP.unify(new ListPair(new Functor2("f", FirstRule, x5), x6), SamePredicateRuleList)) - { - foreach (bool l3 in YP.unify(FirstRule, new Functor1(":-", x7))) - { - goto cutIf1; - } - foreach (bool l3 in YP.unify(new Functor2(":-", Head, x9), FirstRule)) - { - CompilerState.startFunction(State, Head); - FindallAnswers findallAnswers3 = new FindallAnswers(new Functor2("f", ArgAssignments, Calls)); - foreach (bool l4 in member(new Functor2("f", Rule, VariableNameSuggestions), SamePredicateRuleList)) - { - foreach (bool l5 in compileBodyWithHeadBindings(Rule, VariableNameSuggestions, State, ArgAssignments, Calls)) - { - findallAnswers3.add(); - } - } - foreach (bool l4 in findallAnswers3.result(ClauseBag)) - { - foreach (bool l5 in YP.univ(Head, new ListPair(Name, ArgsList))) - { - foreach (bool l6 in getFunctionArgNames(ArgsList, 1, FunctionArgNames)) - { - FindallAnswers findallAnswers4 = new FindallAnswers(MergedArgName); - foreach (bool l7 in member(ArgName, FunctionArgNames)) - { - foreach (bool l8 in argAssignedAll(ArgName, ClauseBag, MergedArgName)) - { - findallAnswers4.add(); - goto cutIf5; - } - foreach (bool l8 in YP.unify(MergedArgName, ArgName)) - { - findallAnswers4.add(); - } - cutIf5: - { } - } - foreach (bool l7 in findallAnswers4.result(MergedArgNames)) - { - foreach (bool l8 in maplist_arg(MergedArgNames, FunctionArgs)) - { - foreach (bool l9 in maplist_compileClause(ClauseBag, MergedArgNames, BodyCode)) - { - if (CompilerState.determinismEquals(State, Atom.a("detNoneOut"))) - { - foreach (bool l11 in YP.unify(ReturnType, Atom.a("void"))) - { - if (CompilerState.determinismEquals(State, Atom.a("semidetNoneOut"))) - { - foreach (bool l13 in append(BodyCode, new ListPair(Atom.a("returnfalse"), Atom.NIL), BodyWithReturn)) - { - foreach (bool l14 in YP.unify(FunctionCode, new Functor("function", new object[] { ReturnType, Name, FunctionArgs, BodyWithReturn }))) - { - yield return false; - } - } - goto cutIf7; - } - if (CompilerState.determinismEquals(State, Atom.a("detNoneOut"))) - { - foreach (bool l13 in YP.unify(BodyWithReturn, BodyCode)) - { - foreach (bool l14 in YP.unify(FunctionCode, new Functor("function", new object[] { ReturnType, Name, FunctionArgs, BodyWithReturn }))) - { - yield return false; - } - } - goto cutIf8; - } - if (CompilerState.codeUsesYield(State)) - { - foreach (bool l13 in YP.unify(BodyWithReturn, BodyCode)) - { - foreach (bool l14 in YP.unify(FunctionCode, new Functor("function", new object[] { ReturnType, Name, FunctionArgs, BodyWithReturn }))) - { - yield return false; - } - } - goto cutIf9; - } - foreach (bool l12 in append(BodyCode, new ListPair(new Functor2("foreach", new Functor2("call", Atom.a("YP.fail"), Atom.NIL), new ListPair(Atom.a("yieldfalse"), Atom.NIL)), Atom.NIL), BodyWithReturn)) - { - foreach (bool l13 in YP.unify(FunctionCode, new Functor("function", new object[] { ReturnType, Name, FunctionArgs, BodyWithReturn }))) - { - yield return false; - } - } - cutIf9: - cutIf8: - cutIf7: - { } - } - goto cutIf6; - } - if (CompilerState.determinismEquals(State, Atom.a("semidetNoneOut"))) - { - foreach (bool l11 in YP.unify(ReturnType, Atom.a("bool"))) - { - if (CompilerState.determinismEquals(State, Atom.a("semidetNoneOut"))) - { - foreach (bool l13 in append(BodyCode, new ListPair(Atom.a("returnfalse"), Atom.NIL), BodyWithReturn)) - { - foreach (bool l14 in YP.unify(FunctionCode, new Functor("function", new object[] { ReturnType, Name, FunctionArgs, BodyWithReturn }))) - { - yield return false; - } - } - goto cutIf11; - } - if (CompilerState.determinismEquals(State, Atom.a("detNoneOut"))) - { - foreach (bool l13 in YP.unify(BodyWithReturn, BodyCode)) - { - foreach (bool l14 in YP.unify(FunctionCode, new Functor("function", new object[] { ReturnType, Name, FunctionArgs, BodyWithReturn }))) - { - yield return false; - } - } - goto cutIf12; - } - if (CompilerState.codeUsesYield(State)) - { - foreach (bool l13 in YP.unify(BodyWithReturn, BodyCode)) - { - foreach (bool l14 in YP.unify(FunctionCode, new Functor("function", new object[] { ReturnType, Name, FunctionArgs, BodyWithReturn }))) - { - yield return false; - } - } - goto cutIf13; - } - foreach (bool l12 in append(BodyCode, new ListPair(new Functor2("foreach", new Functor2("call", Atom.a("YP.fail"), Atom.NIL), new ListPair(Atom.a("yieldfalse"), Atom.NIL)), Atom.NIL), BodyWithReturn)) - { - foreach (bool l13 in YP.unify(FunctionCode, new Functor("function", new object[] { ReturnType, Name, FunctionArgs, BodyWithReturn }))) - { - yield return false; - } - } - cutIf13: - cutIf12: - cutIf11: - { } - } - goto cutIf10; - } - foreach (bool l10 in YP.unify(ReturnType, Atom.a("IEnumerable"))) - { - if (CompilerState.determinismEquals(State, Atom.a("semidetNoneOut"))) - { - foreach (bool l12 in append(BodyCode, new ListPair(Atom.a("returnfalse"), Atom.NIL), BodyWithReturn)) - { - foreach (bool l13 in YP.unify(FunctionCode, new Functor("function", new object[] { ReturnType, Name, FunctionArgs, BodyWithReturn }))) - { - yield return false; - } - } - goto cutIf14; - } - if (CompilerState.determinismEquals(State, Atom.a("detNoneOut"))) - { - foreach (bool l12 in YP.unify(BodyWithReturn, BodyCode)) - { - foreach (bool l13 in YP.unify(FunctionCode, new Functor("function", new object[] { ReturnType, Name, FunctionArgs, BodyWithReturn }))) - { - yield return false; - } - } - goto cutIf15; - } - if (CompilerState.codeUsesYield(State)) - { - foreach (bool l12 in YP.unify(BodyWithReturn, BodyCode)) - { - foreach (bool l13 in YP.unify(FunctionCode, new Functor("function", new object[] { ReturnType, Name, FunctionArgs, BodyWithReturn }))) - { - yield return false; - } - } - goto cutIf16; - } - foreach (bool l11 in append(BodyCode, new ListPair(new Functor2("foreach", new Functor2("call", Atom.a("YP.fail"), Atom.NIL), new ListPair(Atom.a("yieldfalse"), Atom.NIL)), Atom.NIL), BodyWithReturn)) - { - foreach (bool l12 in YP.unify(FunctionCode, new Functor("function", new object[] { ReturnType, Name, FunctionArgs, BodyWithReturn }))) - { - yield return false; - } - } - cutIf16: - cutIf15: - cutIf14: - { } - } - cutIf10: - cutIf6: - { } - } - } - } - } - } - } - goto cutIf2; - } - foreach (bool l3 in YP.unify(Head, FirstRule)) - { - CompilerState.startFunction(State, Head); - FindallAnswers findallAnswers17 = new FindallAnswers(new Functor2("f", ArgAssignments, Calls)); - foreach (bool l4 in member(new Functor2("f", Rule, VariableNameSuggestions), SamePredicateRuleList)) - { - foreach (bool l5 in compileBodyWithHeadBindings(Rule, VariableNameSuggestions, State, ArgAssignments, Calls)) - { - findallAnswers17.add(); - } - } - foreach (bool l4 in findallAnswers17.result(ClauseBag)) - { - foreach (bool l5 in YP.univ(Head, new ListPair(Name, ArgsList))) - { - foreach (bool l6 in getFunctionArgNames(ArgsList, 1, FunctionArgNames)) - { - FindallAnswers findallAnswers18 = new FindallAnswers(MergedArgName); - foreach (bool l7 in member(ArgName, FunctionArgNames)) - { - foreach (bool l8 in argAssignedAll(ArgName, ClauseBag, MergedArgName)) - { - findallAnswers18.add(); - goto cutIf19; - } - foreach (bool l8 in YP.unify(MergedArgName, ArgName)) - { - findallAnswers18.add(); - } - cutIf19: - { } - } - foreach (bool l7 in findallAnswers18.result(MergedArgNames)) - { - foreach (bool l8 in maplist_arg(MergedArgNames, FunctionArgs)) - { - foreach (bool l9 in maplist_compileClause(ClauseBag, MergedArgNames, BodyCode)) - { - if (CompilerState.determinismEquals(State, Atom.a("detNoneOut"))) - { - foreach (bool l11 in YP.unify(ReturnType, Atom.a("void"))) - { - if (CompilerState.determinismEquals(State, Atom.a("semidetNoneOut"))) - { - foreach (bool l13 in append(BodyCode, new ListPair(Atom.a("returnfalse"), Atom.NIL), BodyWithReturn)) - { - foreach (bool l14 in YP.unify(FunctionCode, new Functor("function", new object[] { ReturnType, Name, FunctionArgs, BodyWithReturn }))) - { - yield return false; - } - } - goto cutIf21; - } - if (CompilerState.determinismEquals(State, Atom.a("detNoneOut"))) - { - foreach (bool l13 in YP.unify(BodyWithReturn, BodyCode)) - { - foreach (bool l14 in YP.unify(FunctionCode, new Functor("function", new object[] { ReturnType, Name, FunctionArgs, BodyWithReturn }))) - { - yield return false; - } - } - goto cutIf22; - } - if (CompilerState.codeUsesYield(State)) - { - foreach (bool l13 in YP.unify(BodyWithReturn, BodyCode)) - { - foreach (bool l14 in YP.unify(FunctionCode, new Functor("function", new object[] { ReturnType, Name, FunctionArgs, BodyWithReturn }))) - { - yield return false; - } - } - goto cutIf23; - } - foreach (bool l12 in append(BodyCode, new ListPair(new Functor2("foreach", new Functor2("call", Atom.a("YP.fail"), Atom.NIL), new ListPair(Atom.a("yieldfalse"), Atom.NIL)), Atom.NIL), BodyWithReturn)) - { - foreach (bool l13 in YP.unify(FunctionCode, new Functor("function", new object[] { ReturnType, Name, FunctionArgs, BodyWithReturn }))) - { - yield return false; - } - } - cutIf23: - cutIf22: - cutIf21: - { } - } - goto cutIf20; - } - if (CompilerState.determinismEquals(State, Atom.a("semidetNoneOut"))) - { - foreach (bool l11 in YP.unify(ReturnType, Atom.a("bool"))) - { - if (CompilerState.determinismEquals(State, Atom.a("semidetNoneOut"))) - { - foreach (bool l13 in append(BodyCode, new ListPair(Atom.a("returnfalse"), Atom.NIL), BodyWithReturn)) - { - foreach (bool l14 in YP.unify(FunctionCode, new Functor("function", new object[] { ReturnType, Name, FunctionArgs, BodyWithReturn }))) - { - yield return false; - } - } - goto cutIf25; - } - if (CompilerState.determinismEquals(State, Atom.a("detNoneOut"))) - { - foreach (bool l13 in YP.unify(BodyWithReturn, BodyCode)) - { - foreach (bool l14 in YP.unify(FunctionCode, new Functor("function", new object[] { ReturnType, Name, FunctionArgs, BodyWithReturn }))) - { - yield return false; - } - } - goto cutIf26; - } - if (CompilerState.codeUsesYield(State)) - { - foreach (bool l13 in YP.unify(BodyWithReturn, BodyCode)) - { - foreach (bool l14 in YP.unify(FunctionCode, new Functor("function", new object[] { ReturnType, Name, FunctionArgs, BodyWithReturn }))) - { - yield return false; - } - } - goto cutIf27; - } - foreach (bool l12 in append(BodyCode, new ListPair(new Functor2("foreach", new Functor2("call", Atom.a("YP.fail"), Atom.NIL), new ListPair(Atom.a("yieldfalse"), Atom.NIL)), Atom.NIL), BodyWithReturn)) - { - foreach (bool l13 in YP.unify(FunctionCode, new Functor("function", new object[] { ReturnType, Name, FunctionArgs, BodyWithReturn }))) - { - yield return false; - } - } - cutIf27: - cutIf26: - cutIf25: - { } - } - goto cutIf24; - } - foreach (bool l10 in YP.unify(ReturnType, Atom.a("IEnumerable"))) - { - if (CompilerState.determinismEquals(State, Atom.a("semidetNoneOut"))) - { - foreach (bool l12 in append(BodyCode, new ListPair(Atom.a("returnfalse"), Atom.NIL), BodyWithReturn)) - { - foreach (bool l13 in YP.unify(FunctionCode, new Functor("function", new object[] { ReturnType, Name, FunctionArgs, BodyWithReturn }))) - { - yield return false; - } - } - goto cutIf28; - } - if (CompilerState.determinismEquals(State, Atom.a("detNoneOut"))) - { - foreach (bool l12 in YP.unify(BodyWithReturn, BodyCode)) - { - foreach (bool l13 in YP.unify(FunctionCode, new Functor("function", new object[] { ReturnType, Name, FunctionArgs, BodyWithReturn }))) - { - yield return false; - } - } - goto cutIf29; - } - if (CompilerState.codeUsesYield(State)) - { - foreach (bool l12 in YP.unify(BodyWithReturn, BodyCode)) - { - foreach (bool l13 in YP.unify(FunctionCode, new Functor("function", new object[] { ReturnType, Name, FunctionArgs, BodyWithReturn }))) - { - yield return false; - } - } - goto cutIf30; - } - foreach (bool l11 in append(BodyCode, new ListPair(new Functor2("foreach", new Functor2("call", Atom.a("YP.fail"), Atom.NIL), new ListPair(Atom.a("yieldfalse"), Atom.NIL)), Atom.NIL), BodyWithReturn)) - { - foreach (bool l12 in YP.unify(FunctionCode, new Functor("function", new object[] { ReturnType, Name, FunctionArgs, BodyWithReturn }))) - { - yield return false; - } - } - cutIf30: - cutIf29: - cutIf28: - { } - } - cutIf24: - cutIf20: - { } - } - } - } - } - } - } - } - cutIf2: - cutIf1: - { } - } - } - } - - public static IEnumerable samePredicateRuleList(object arg1, object arg2, object arg3) - { - { - foreach (bool l2 in YP.unify(arg1, Atom.NIL)) - { - foreach (bool l3 in YP.unify(arg2, Atom.NIL)) - { - foreach (bool l4 in YP.unify(arg3, Atom.NIL)) - { - yield return true; - yield break; - } - } - } - } - { - Variable First = new Variable(); - foreach (bool l2 in YP.unify(arg1, new ListPair(First, Atom.NIL))) - { - foreach (bool l3 in YP.unify(arg2, new ListPair(First, Atom.NIL))) - { - foreach (bool l4 in YP.unify(arg3, Atom.NIL)) - { - yield return true; - yield break; - } - } - } - } - { - object SamePredicateRuleList = arg2; - object RestRules = arg3; - Variable First = new Variable(); - Variable Rest = new Variable(); - Variable FirstRule = new Variable(); - Variable x6 = new Variable(); - Variable SecondRule = new Variable(); - Variable x8 = new Variable(); - Variable x9 = new Variable(); - Variable FirstHead = new Variable(); - Variable x11 = new Variable(); - Variable SecondHead = new Variable(); - Variable x13 = new Variable(); - Variable Name = new Variable(); - Variable Arity = new Variable(); - Variable RestSamePredicates = new Variable(); - foreach (bool l2 in YP.unify(arg1, new ListPair(First, Rest))) - { - foreach (bool l3 in YP.unify(new Functor2("f", FirstRule, x6), First)) - { - foreach (bool l4 in YP.unify(new ListPair(new Functor2("f", SecondRule, x8), x9), Rest)) - { - foreach (bool l5 in YP.unify(new Functor2(":-", FirstHead, x11), FirstRule)) - { - foreach (bool l6 in YP.unify(new Functor2(":-", SecondHead, x13), SecondRule)) - { - foreach (bool l7 in YP.functor(FirstHead, Name, Arity)) - { - foreach (bool l8 in YP.functor(SecondHead, Name, Arity)) - { - foreach (bool l9 in samePredicateRuleList(Rest, RestSamePredicates, RestRules)) - { - foreach (bool l10 in YP.unify(SamePredicateRuleList, new ListPair(First, RestSamePredicates))) - { - yield return true; - yield break; - } - } - goto cutIf3; - } - foreach (bool l8 in YP.unify(SamePredicateRuleList, new ListPair(First, Atom.NIL))) - { - foreach (bool l9 in YP.unify(RestRules, Rest)) - { - yield return true; - yield break; - } - } - cutIf3: - { } - } - goto cutIf2; - } - foreach (bool l6 in YP.unify(SecondHead, SecondRule)) - { - foreach (bool l7 in YP.functor(FirstHead, Name, Arity)) - { - foreach (bool l8 in YP.functor(SecondHead, Name, Arity)) - { - foreach (bool l9 in samePredicateRuleList(Rest, RestSamePredicates, RestRules)) - { - foreach (bool l10 in YP.unify(SamePredicateRuleList, new ListPair(First, RestSamePredicates))) - { - yield return true; - yield break; - } - } - goto cutIf4; - } - foreach (bool l8 in YP.unify(SamePredicateRuleList, new ListPair(First, Atom.NIL))) - { - foreach (bool l9 in YP.unify(RestRules, Rest)) - { - yield return true; - yield break; - } - } - cutIf4: - { } - } - } - cutIf2: - goto cutIf1; - } - foreach (bool l5 in YP.unify(FirstHead, FirstRule)) - { - foreach (bool l6 in YP.unify(new Functor2(":-", SecondHead, x13), SecondRule)) - { - foreach (bool l7 in YP.functor(FirstHead, Name, Arity)) - { - foreach (bool l8 in YP.functor(SecondHead, Name, Arity)) - { - foreach (bool l9 in samePredicateRuleList(Rest, RestSamePredicates, RestRules)) - { - foreach (bool l10 in YP.unify(SamePredicateRuleList, new ListPair(First, RestSamePredicates))) - { - yield return true; - yield break; - } - } - goto cutIf6; - } - foreach (bool l8 in YP.unify(SamePredicateRuleList, new ListPair(First, Atom.NIL))) - { - foreach (bool l9 in YP.unify(RestRules, Rest)) - { - yield return true; - yield break; - } - } - cutIf6: - { } - } - goto cutIf5; - } - foreach (bool l6 in YP.unify(SecondHead, SecondRule)) - { - foreach (bool l7 in YP.functor(FirstHead, Name, Arity)) - { - foreach (bool l8 in YP.functor(SecondHead, Name, Arity)) - { - foreach (bool l9 in samePredicateRuleList(Rest, RestSamePredicates, RestRules)) - { - foreach (bool l10 in YP.unify(SamePredicateRuleList, new ListPair(First, RestSamePredicates))) - { - yield return true; - yield break; - } - } - goto cutIf7; - } - foreach (bool l8 in YP.unify(SamePredicateRuleList, new ListPair(First, Atom.NIL))) - { - foreach (bool l9 in YP.unify(RestRules, Rest)) - { - yield return true; - yield break; - } - } - cutIf7: - { } - } - } - cutIf5: - { } - } - cutIf1: - { } - } - } - } - } - } - - public static IEnumerable maplist_compileClause(object arg1, object arg2, object arg3) - { - { - object _MergedArgNames = arg2; - foreach (bool l2 in YP.unify(arg1, Atom.NIL)) - { - foreach (bool l3 in YP.unify(arg3, Atom.NIL)) - { - yield return true; - yield break; - } - } - } - { - object MergedArgNames = arg2; - Variable ArgAssignments = new Variable(); - Variable Calls = new Variable(); - Variable Rest = new Variable(); - Variable ClauseCode = new Variable(); - Variable RestResults = new Variable(); - foreach (bool l2 in YP.unify(arg1, new ListPair(new Functor2("f", ArgAssignments, Calls), Rest))) - { - foreach (bool l3 in YP.unify(arg3, new ListPair(new Functor1("blockScope", ClauseCode), RestResults))) - { - foreach (bool l4 in prependArgAssignments(ArgAssignments, Calls, MergedArgNames, ClauseCode)) - { - foreach (bool l5 in maplist_compileClause(Rest, MergedArgNames, RestResults)) - { - yield return true; - yield break; - } - } - } - } - } - } - - public static IEnumerable prependArgAssignments(object arg1, object arg2, object arg3, object arg4) - { - { - object _MergedArgNames = arg3; - Variable In = new Variable(); - foreach (bool l2 in YP.unify(arg1, Atom.NIL)) - { - foreach (bool l3 in YP.unify(arg2, In)) - { - foreach (bool l4 in YP.unify(arg4, In)) - { - yield return true; - yield break; - } - } - } - } - { - object In = arg2; - object MergedArgNames = arg3; - object ClauseCode = arg4; - Variable VariableName = new Variable(); - Variable ArgName = new Variable(); - Variable RestArgAssignments = new Variable(); - foreach (bool l2 in YP.unify(arg1, new ListPair(new Functor2("f", VariableName, ArgName), RestArgAssignments))) - { - foreach (bool l3 in member(VariableName, MergedArgNames)) - { - foreach (bool l4 in prependArgAssignments(RestArgAssignments, In, MergedArgNames, ClauseCode)) - { - yield return true; - yield break; - } - goto cutIf1; - } - foreach (bool l3 in prependArgAssignments(RestArgAssignments, new ListPair(new Functor3("declare", Atom.a("object"), VariableName, new Functor1("var", ArgName)), In), MergedArgNames, ClauseCode)) - { - yield return true; - yield break; - } - cutIf1: - { } - } - } - } - - public static IEnumerable argAssignedAll(object arg1, object arg2, object VariableName) - { - { - object _ArgName = arg1; - foreach (bool l2 in YP.unify(arg2, Atom.NIL)) - { - if (YP.nonvar(VariableName)) - { - yield return true; - yield break; - } - } - } - { - object ArgName = arg1; - Variable ArgAssignments = new Variable(); - Variable _Calls = new Variable(); - Variable RestClauseBag = new Variable(); - foreach (bool l2 in YP.unify(arg2, new ListPair(new Functor2("f", ArgAssignments, _Calls), RestClauseBag))) - { - foreach (bool l3 in member(new Functor2("f", VariableName, ArgName), ArgAssignments)) - { - foreach (bool l4 in argAssignedAll(ArgName, RestClauseBag, VariableName)) - { - yield return false; - } - } - } - } - } - - public static IEnumerable maplist_arg(object arg1, object arg2) - { - { - foreach (bool l2 in YP.unify(arg1, Atom.NIL)) - { - foreach (bool l3 in YP.unify(arg2, Atom.NIL)) - { - yield return true; - yield break; - } - } - } - { - Variable First = new Variable(); - Variable Rest = new Variable(); - Variable RestResults = new Variable(); - foreach (bool l2 in YP.unify(arg1, new ListPair(First, Rest))) - { - foreach (bool l3 in YP.unify(arg2, new ListPair(new Functor1("arg", First), RestResults))) - { - foreach (bool l4 in maplist_arg(Rest, RestResults)) - { - yield return true; - yield break; - } - } - } - } - } - - public static IEnumerable getFunctionArgNames(object arg1, object arg2, object arg3) - { - { - object _StartArgNumber = arg2; - foreach (bool l2 in YP.unify(arg1, Atom.NIL)) - { - foreach (bool l3 in YP.unify(arg3, Atom.NIL)) - { - yield return true; - yield break; - } - } - } - { - object StartArgNumber = arg2; - Variable x1 = new Variable(); - Variable Rest = new Variable(); - Variable ArgName = new Variable(); - Variable RestFunctionArgs = new Variable(); - Variable NumberCodes = new Variable(); - Variable NumberAtom = new Variable(); - Variable NextArgNumber = new Variable(); - foreach (bool l2 in YP.unify(arg1, new ListPair(x1, Rest))) - { - foreach (bool l3 in YP.unify(arg3, new ListPair(ArgName, RestFunctionArgs))) - { - foreach (bool l4 in YP.number_codes(StartArgNumber, NumberCodes)) - { - foreach (bool l5 in YP.atom_codes(NumberAtom, NumberCodes)) - { - foreach (bool l6 in YP.atom_concat(Atom.a("arg"), NumberAtom, ArgName)) - { - foreach (bool l7 in YP.unify(NextArgNumber, YP.add(StartArgNumber, 1))) - { - foreach (bool l8 in getFunctionArgNames(Rest, NextArgNumber, RestFunctionArgs)) - { - yield return true; - yield break; - } - } - } - } - } - } - } - } - } - - public static IEnumerable compileBodyWithHeadBindings(object Rule, object VariableNameSuggestions, object State, object ArgAssignments, object Calls) - { - { - Variable Head = new Variable(); - Variable Body = new Variable(); - Variable x8 = new Variable(); - Variable HeadArgs = new Variable(); - Variable CompiledHeadArgs = new Variable(); - Variable BodyCode = new Variable(); - Variable VariableNamesList = new Variable(); - Variable ArgUnifications = new Variable(); - foreach (bool l2 in YP.unify(new Functor2(":-", Head, Body), Rule)) - { - CompilerState.newVariableNames(State, Rule, VariableNameSuggestions); - foreach (bool l3 in YP.univ(Head, new ListPair(x8, HeadArgs))) - { - foreach (bool l4 in maplist_compileTerm(HeadArgs, State, CompiledHeadArgs)) - { - foreach (bool l5 in compileRuleBody(Body, State, BodyCode)) - { - foreach (bool l6 in CompilerState.variableNamesList(State, VariableNamesList)) - { - foreach (bool l7 in compileArgUnifications(HeadArgs, CompiledHeadArgs, 1, HeadArgs, BodyCode, ArgUnifications)) - { - foreach (bool l8 in compileDeclarations(VariableNamesList, HeadArgs, Atom.NIL, ArgAssignments, ArgUnifications, Calls)) - { - yield return true; - yield break; - } - } - } - } - } - } - } - } - { - foreach (bool l2 in compileBodyWithHeadBindings(new Functor2(":-", Rule, Atom.a("true")), VariableNameSuggestions, State, ArgAssignments, Calls)) - { - yield return true; - yield break; - } - } - } - - public static IEnumerable compileArgUnifications(object arg1, object arg2, object arg3, object arg4, object arg5, object arg6) - { - { - object x1 = arg2; - object x2 = arg3; - object x3 = arg4; - Variable BodyCode = new Variable(); - foreach (bool l2 in YP.unify(arg1, Atom.NIL)) - { - foreach (bool l3 in YP.unify(arg5, BodyCode)) - { - foreach (bool l4 in YP.unify(arg6, BodyCode)) - { - yield return true; - yield break; - } - } - } - } - { - object Index = arg3; - object AllHeadArgs = arg4; - object BodyCode = arg5; - object ArgUnifications = arg6; - Variable HeadArg = new Variable(); - Variable RestHeadArgs = new Variable(); - Variable x3 = new Variable(); - Variable RestCompiledHeadArgs = new Variable(); - Variable _ArgIndex1 = new Variable(); - Variable NextIndex = new Variable(); - foreach (bool l2 in YP.unify(arg1, new ListPair(HeadArg, RestHeadArgs))) - { - foreach (bool l3 in YP.unify(arg2, new ListPair(x3, RestCompiledHeadArgs))) - { - foreach (bool l4 in getVariableArgIndex1(HeadArg, AllHeadArgs, _ArgIndex1)) - { - foreach (bool l5 in YP.unify(NextIndex, YP.add(Index, 1))) - { - foreach (bool l6 in compileArgUnifications(RestHeadArgs, RestCompiledHeadArgs, NextIndex, AllHeadArgs, BodyCode, ArgUnifications)) - { - yield return true; - yield break; - } - } - } - } - } - } - { - object Index = arg3; - object AllHeadArgs = arg4; - object BodyCode = arg5; - Variable _HeadArg = new Variable(); - Variable RestHeadArgs = new Variable(); - Variable CompiledHeadArg = new Variable(); - Variable RestCompiledHeadArgs = new Variable(); - Variable ArgName = new Variable(); - Variable RestArgUnifications = new Variable(); - Variable NumberCodes = new Variable(); - Variable NumberAtom = new Variable(); - Variable NextIndex = new Variable(); - foreach (bool l2 in YP.unify(arg1, new ListPair(_HeadArg, RestHeadArgs))) - { - foreach (bool l3 in YP.unify(arg2, new ListPair(CompiledHeadArg, RestCompiledHeadArgs))) - { - foreach (bool l4 in YP.unify(arg6, new ListPair(new Functor2("foreach", new Functor2("call", Atom.a("YP.unify"), new ListPair(new Functor1("var", ArgName), new ListPair(CompiledHeadArg, Atom.NIL))), RestArgUnifications), Atom.NIL))) - { - foreach (bool l5 in YP.number_codes(Index, NumberCodes)) - { - foreach (bool l6 in YP.atom_codes(NumberAtom, NumberCodes)) - { - foreach (bool l7 in YP.atom_concat(Atom.a("arg"), NumberAtom, ArgName)) - { - foreach (bool l8 in YP.unify(NextIndex, YP.add(Index, 1))) - { - foreach (bool l9 in compileArgUnifications(RestHeadArgs, RestCompiledHeadArgs, NextIndex, AllHeadArgs, BodyCode, RestArgUnifications)) - { - yield return true; - yield break; - } - } - } - } - } - } - } - } - } - } - - public static IEnumerable compileDeclarations(object arg1, object arg2, object arg3, object arg4, object arg5, object arg6) - { - { - object _HeadArgs = arg2; - Variable ArgAssignmentsIn = new Variable(); - Variable DeclarationsIn = new Variable(); - foreach (bool l2 in YP.unify(arg1, Atom.NIL)) - { - foreach (bool l3 in YP.unify(arg3, ArgAssignmentsIn)) - { - foreach (bool l4 in YP.unify(arg4, ArgAssignmentsIn)) - { - foreach (bool l5 in YP.unify(arg5, DeclarationsIn)) - { - foreach (bool l6 in YP.unify(arg6, DeclarationsIn)) - { - yield return true; - yield break; - } - } - } - } - } - } - { - object HeadArgs = arg2; - object ArgAssignmentsIn = arg3; - object ArgAssignmentsOut = arg4; - object DeclarationsIn = arg5; - object DeclarationsOut = arg6; - Variable VariableName = new Variable(); - Variable Var = new Variable(); - Variable RestVariableNames = new Variable(); - Variable ArgIndex1 = new Variable(); - Variable NumberCodes = new Variable(); - Variable NumberAtom = new Variable(); - Variable ArgName = new Variable(); - foreach (bool l2 in YP.unify(arg1, new ListPair(new Functor2("=", VariableName, Var), RestVariableNames))) - { - foreach (bool l3 in getVariableArgIndex1(Var, HeadArgs, ArgIndex1)) - { - foreach (bool l4 in YP.number_codes(ArgIndex1, NumberCodes)) - { - foreach (bool l5 in YP.atom_codes(NumberAtom, NumberCodes)) - { - foreach (bool l6 in YP.atom_concat(Atom.a("arg"), NumberAtom, ArgName)) - { - foreach (bool l7 in compileDeclarations(RestVariableNames, HeadArgs, new ListPair(new Functor2("f", VariableName, ArgName), ArgAssignmentsIn), ArgAssignmentsOut, DeclarationsIn, DeclarationsOut)) - { - yield return true; - yield break; - } - } - } - } - } - } - } - { - object HeadArgs = arg2; - object ArgAssignmentsIn = arg3; - object ArgAssignmentsOut = arg4; - object DeclarationsIn = arg5; - Variable VariableName = new Variable(); - Variable _Var = new Variable(); - Variable RestVariableNames = new Variable(); - Variable DeclarationsOut = new Variable(); - foreach (bool l2 in YP.unify(arg1, new ListPair(new Functor2("=", VariableName, _Var), RestVariableNames))) - { - foreach (bool l3 in YP.unify(arg6, new ListPair(new Functor3("declare", Atom.a("Variable"), VariableName, new Functor2("new", Atom.a("Variable"), Atom.NIL)), DeclarationsOut))) - { - foreach (bool l4 in compileDeclarations(RestVariableNames, HeadArgs, ArgAssignmentsIn, ArgAssignmentsOut, DeclarationsIn, DeclarationsOut)) - { - yield return true; - yield break; - } - } - } - } - } - - public static IEnumerable getVariableArgIndex1(object Var, object arg2, object arg3) - { - { - Variable FirstHeadArgs = new Variable(); - Variable RestHeadArgs = new Variable(); - Variable x4 = new Variable(); - foreach (bool l2 in YP.unify(arg2, new ListPair(FirstHeadArgs, RestHeadArgs))) - { - foreach (bool l3 in YP.unify(arg3, 1)) - { - if (sameVariable(Var, FirstHeadArgs)) - { - foreach (bool l5 in getVariableArgIndex1(Var, RestHeadArgs, x4)) - { - goto cutIf1; - } - yield return false; - cutIf1: - yield break; - } - } - } - } - { - object Index = arg3; - Variable x2 = new Variable(); - Variable RestHeadArgs = new Variable(); - Variable RestIndex = new Variable(); - foreach (bool l2 in YP.unify(arg2, new ListPair(x2, RestHeadArgs))) - { - foreach (bool l3 in getVariableArgIndex1(Var, RestHeadArgs, RestIndex)) - { - foreach (bool l4 in YP.unify(Index, YP.add(1, RestIndex))) - { - yield return true; - yield break; - } - } - } - } - } - - public static IEnumerable compileRuleBody(object arg1, object arg2, object arg3) - { - { - object A = arg1; - object State = arg2; - object PseudoCode = arg3; - if (YP.var(A)) - { - foreach (bool l3 in compileRuleBody(new Functor2(",", new Functor1("call", A), Atom.a("true")), State, PseudoCode)) - { - yield return true; - yield break; - } - } - } - { - object State = arg2; - object PseudoCode = arg3; - Variable A = new Variable(); - Variable B = new Variable(); - foreach (bool l2 in YP.unify(arg1, new Functor2(",", A, B))) - { - if (YP.var(A)) - { - foreach (bool l4 in compileRuleBody(new Functor2(",", new Functor1("call", A), B), State, PseudoCode)) - { - yield return true; - yield break; - } - } - } - } - { - object State = arg2; - object PseudoCode = arg3; - Variable A = new Variable(); - Variable B = new Variable(); - Variable ACode = new Variable(); - Variable BCode = new Variable(); - foreach (bool l2 in YP.unify(arg1, new Functor2(",", A, B))) - { - foreach (bool l3 in compileFunctorCall(A, State, ACode)) - { - if (CompilerState.isDetNoneOut(State, A)) - { - foreach (bool l5 in compileRuleBody(B, State, BCode)) - { - foreach (bool l6 in YP.unify(PseudoCode, new ListPair(ACode, BCode))) - { - yield return true; - yield break; - } - } - } - if (CompilerState.isSemidetNoneOut(State, A)) - { - foreach (bool l5 in compileRuleBody(B, State, BCode)) - { - foreach (bool l6 in YP.unify(PseudoCode, new ListPair(new Functor2("if", ACode, BCode), Atom.NIL))) - { - yield return true; - yield break; - } - } - } - foreach (bool l4 in compileRuleBody(B, State, BCode)) - { - foreach (bool l5 in YP.unify(PseudoCode, new ListPair(new Functor2("foreach", ACode, BCode), Atom.NIL))) - { - yield return true; - yield break; - } - } - } - } - } - { - object State = arg2; - object PseudoCode = arg3; - Variable A = new Variable(); - Variable T = new Variable(); - Variable B = new Variable(); - Variable C = new Variable(); - foreach (bool l2 in YP.unify(arg1, new Functor2(",", new Functor2(";", new Functor2("->", A, T), B), C))) - { - foreach (bool l3 in compileRuleBody(new Functor2(";", new Functor2("->", A, new Functor2(",", T, C)), new Functor2(",", B, C)), State, PseudoCode)) - { - yield return true; - yield break; - } - } - } - { - object State = arg2; - object PseudoCode = arg3; - Variable A = new Variable(); - Variable B = new Variable(); - Variable C = new Variable(); - foreach (bool l2 in YP.unify(arg1, new Functor2(",", new Functor2(";", A, B), C))) - { - foreach (bool l3 in compileRuleBody(new Functor2(";", new Functor2(",", A, C), new Functor2(",", B, C)), State, PseudoCode)) - { - yield return true; - yield break; - } - } - } - { - object State = arg2; - Variable A = new Variable(); - Variable B = new Variable(); - Variable ACode = new Variable(); - Variable BCode = new Variable(); - foreach (bool l2 in YP.unify(arg1, new Functor2(",", new Functor1("\\+", A), B))) - { - foreach (bool l3 in YP.unify(arg3, new ListPair(new Functor2("if", new Functor1("not", ACode), BCode), Atom.NIL))) - { - if (CompilerState.isSemidetNoneOut(State, A)) - { - foreach (bool l5 in compileFunctorCall(A, State, ACode)) - { - foreach (bool l6 in compileRuleBody(B, State, BCode)) - { - yield return true; - yield break; - } - } - } - } - } - } - { - object State = arg2; - object PseudoCode = arg3; - Variable A = new Variable(); - Variable B = new Variable(); - foreach (bool l2 in YP.unify(arg1, new Functor2(",", new Functor1("\\+", A), B))) - { - foreach (bool l3 in compileRuleBody(new Functor2(",", new Functor2(";", new Functor2("->", A, Atom.a("fail")), Atom.a("true")), B), State, PseudoCode)) - { - yield return true; - yield break; - } - } - } - { - object State = arg2; - object PseudoCode = arg3; - Variable A = new Variable(); - Variable B = new Variable(); - foreach (bool l2 in YP.unify(arg1, new Functor2(",", new Functor1("once", A), B))) - { - foreach (bool l3 in compileRuleBody(new Functor2(",", new Functor2(";", new Functor2("->", A, Atom.a("true")), Atom.a("fail")), B), State, PseudoCode)) - { - yield return true; - yield break; - } - } - } - { - object State = arg2; - object PseudoCode = arg3; - Variable A = new Variable(); - Variable T = new Variable(); - Variable B = new Variable(); - foreach (bool l2 in YP.unify(arg1, new Functor2(",", new Functor2("->", A, T), B))) - { - foreach (bool l3 in compileRuleBody(new Functor2(",", new Functor2(";", new Functor2("->", A, T), Atom.a("fail")), B), State, PseudoCode)) - { - yield return true; - yield break; - } - } - } - { - object State = arg2; - object PseudoCode = arg3; - Variable A = new Variable(); - Variable B = new Variable(); - Variable C = new Variable(); - foreach (bool l2 in YP.unify(arg1, new Functor2(",", new Functor2("\\=", A, B), C))) - { - foreach (bool l3 in compileRuleBody(new Functor2(",", new Functor1("\\+", new Functor2("=", A, B)), C), State, PseudoCode)) - { - yield return true; - yield break; - } - } - } - { - object State = arg2; - object PseudoCode = arg3; - Variable A = new Variable(); - Variable ACode = new Variable(); - foreach (bool l2 in YP.unify(arg1, new Functor2(",", Atom.a("!"), A))) - { - foreach (bool l3 in compileRuleBody(A, State, ACode)) - { - foreach (bool l4 in append(ACode, new ListPair(Atom.a("yieldbreak"), Atom.NIL), PseudoCode)) - { - yield return true; - yield break; - } - } - } - } - { - object State = arg2; - object PseudoCode = arg3; - Variable Name = new Variable(); - Variable A = new Variable(); - Variable ACode = new Variable(); - foreach (bool l2 in YP.unify(arg1, new Functor2(",", new Functor1("$CUTIF", Name), A))) - { - foreach (bool l3 in compileRuleBody(A, State, ACode)) - { - foreach (bool l4 in append(ACode, new ListPair(new Functor1("breakBlock", Name), Atom.NIL), PseudoCode)) - { - yield return true; - yield break; - } - } - } - } - { - object _State = arg2; - Variable x1 = new Variable(); - foreach (bool l2 in YP.unify(arg1, new Functor2(",", Atom.a("fail"), x1))) - { - foreach (bool l3 in YP.unify(arg3, Atom.NIL)) - { - yield return true; - yield break; - } - } - } - { - object State = arg2; - object PseudoCode = arg3; - Variable A = new Variable(); - foreach (bool l2 in YP.unify(arg1, new Functor2(",", Atom.a("true"), A))) - { - foreach (bool l3 in compileRuleBody(A, State, PseudoCode)) - { - yield return true; - yield break; - } - } - } - { - object State = arg2; - Variable A = new Variable(); - Variable Term = new Variable(); - Variable B = new Variable(); - Variable ACode = new Variable(); - Variable TermCode = new Variable(); - Variable BCode = new Variable(); - foreach (bool l2 in YP.unify(arg1, new Functor2(",", new Functor2("is", A, Term), B))) - { - foreach (bool l3 in YP.unify(arg3, new ListPair(new Functor2("foreach", new Functor2("call", Atom.a("YP.unify"), new ListPair(ACode, new ListPair(TermCode, Atom.NIL))), BCode), Atom.NIL))) - { - foreach (bool l4 in compileTerm(A, State, ACode)) - { - foreach (bool l5 in compileExpression(Term, State, TermCode)) - { - foreach (bool l6 in compileRuleBody(B, State, BCode)) - { - yield return true; - yield break; - } - } - } - } - } - } - { - object State = arg2; - Variable ACode = new Variable(); - Variable B = new Variable(); - Variable BCode = new Variable(); - foreach (bool l2 in YP.unify(arg1, new Functor2(",", new Functor1("$DET_NONE_OUT", ACode), B))) - { - foreach (bool l3 in YP.unify(arg3, new ListPair(ACode, BCode))) - { - foreach (bool l4 in compileRuleBody(B, State, BCode)) - { - yield return true; - yield break; - } - } - } - } - { - object State = arg2; - Variable A = new Variable(); - Variable B = new Variable(); - Variable FunctionName = new Variable(); - Variable X1Code = new Variable(); - Variable X2Code = new Variable(); - Variable BCode = new Variable(); - Variable Name = new Variable(); - Variable X1 = new Variable(); - Variable X2 = new Variable(); - foreach (bool l2 in YP.unify(arg1, new Functor2(",", A, B))) - { - foreach (bool l3 in YP.unify(arg3, new ListPair(new Functor2("if", new Functor2("call", FunctionName, new ListPair(X1Code, new ListPair(X2Code, Atom.NIL))), BCode), Atom.NIL))) - { - foreach (bool l4 in YP.univ(A, ListPair.make(new object[] { Name, X1, X2 }))) - { - foreach (bool l5 in binaryExpressionConditional(Name, FunctionName)) - { - foreach (bool l6 in compileExpression(X1, State, X1Code)) - { - foreach (bool l7 in compileExpression(X2, State, X2Code)) - { - foreach (bool l8 in compileRuleBody(B, State, BCode)) - { - yield return true; - yield break; - } - } - } - } - } - } - } - } - { - object State = arg2; - object PseudoCode = arg3; - Variable Template = new Variable(); - Variable Goal = new Variable(); - Variable Bag = new Variable(); - Variable B = new Variable(); - Variable TemplateCode = new Variable(); - Variable FindallAnswers = new Variable(); - Variable GoalAndAddCode = new Variable(); - Variable BagCode = new Variable(); - Variable BCode = new Variable(); - foreach (bool l2 in YP.unify(arg1, new Functor2(",", new Functor3("findall", Template, Goal, Bag), B))) - { - foreach (bool l3 in compileTerm(Template, State, TemplateCode)) - { - foreach (bool l4 in CompilerState.gensym(State, Atom.a("findallAnswers"), FindallAnswers)) - { - foreach (bool l5 in compileRuleBody(new Functor2(",", Goal, new Functor2(",", new Functor1("$DET_NONE_OUT", new Functor3("callMember", new Functor1("var", FindallAnswers), Atom.a("add"), Atom.NIL)), Atom.a("fail"))), State, GoalAndAddCode)) - { - foreach (bool l6 in compileTerm(Bag, State, BagCode)) - { - foreach (bool l7 in compileRuleBody(B, State, BCode)) - { - foreach (bool l8 in append(new ListPair(new Functor3("declare", Atom.a("FindallAnswers"), FindallAnswers, new Functor2("new", Atom.a("FindallAnswers"), new ListPair(TemplateCode, Atom.NIL))), GoalAndAddCode), new ListPair(new Functor2("foreach", new Functor3("callMember", new Functor1("var", FindallAnswers), Atom.a("result"), new ListPair(BagCode, Atom.NIL)), BCode), Atom.NIL), PseudoCode)) - { - yield return true; - yield break; - } - } - } - } - } - } - } - } - { - object State = arg2; - object PseudoCode = arg3; - Variable Template = new Variable(); - Variable Goal = new Variable(); - Variable Bag = new Variable(); - Variable B = new Variable(); - foreach (bool l2 in YP.unify(arg1, new Functor2(",", new Functor3("bagof", Template, Goal, Bag), B))) - { - foreach (bool l3 in compileBagof(Atom.a("result"), Template, Goal, Bag, B, State, PseudoCode)) - { - yield return true; - yield break; - } - } - } - { - object State = arg2; - object PseudoCode = arg3; - Variable Template = new Variable(); - Variable Goal = new Variable(); - Variable Bag = new Variable(); - Variable B = new Variable(); - foreach (bool l2 in YP.unify(arg1, new Functor2(",", new Functor3("setof", Template, Goal, Bag), B))) - { - foreach (bool l3 in compileBagof(Atom.a("resultSet"), Template, Goal, Bag, B, State, PseudoCode)) - { - yield return true; - yield break; - } - } - } - { - object State = arg2; - Variable A = new Variable(); - Variable B = new Variable(); - Variable ATermCode = new Variable(); - Variable BCode = new Variable(); - foreach (bool l2 in YP.unify(arg1, new Functor2(",", new Functor1("call", A), B))) - { - foreach (bool l3 in YP.unify(arg3, new ListPair(new Functor2("foreach", new Functor2("call", Atom.a("YP.getIterator"), new ListPair(ATermCode, new ListPair(new Functor2("call", Atom.a("getDeclaringClass"), Atom.NIL), Atom.NIL))), BCode), Atom.NIL))) - { - foreach (bool l4 in compileTerm(A, State, ATermCode)) - { - foreach (bool l5 in compileRuleBody(B, State, BCode)) - { - yield return true; - yield break; - } - } - } - } - } - { - object State = arg2; - Variable A = new Variable(); - Variable B = new Variable(); - Variable ATermCode = new Variable(); - Variable BCode = new Variable(); - foreach (bool l2 in YP.unify(arg1, new Functor2(",", new Functor1("current_predicate", A), B))) - { - foreach (bool l3 in YP.unify(arg3, new ListPair(new Functor2("foreach", new Functor2("call", Atom.a("YP.current_predicate"), new ListPair(ATermCode, new ListPair(new Functor2("call", Atom.a("getDeclaringClass"), Atom.NIL), Atom.NIL))), BCode), Atom.NIL))) - { - foreach (bool l4 in compileTerm(A, State, ATermCode)) - { - foreach (bool l5 in compileRuleBody(B, State, BCode)) - { - yield return true; - yield break; - } - } - } - } - } - { - object State = arg2; - Variable A = new Variable(); - Variable B = new Variable(); - Variable ATermCode = new Variable(); - Variable BCode = new Variable(); - foreach (bool l2 in YP.unify(arg1, new Functor2(",", new Functor1("asserta", A), B))) - { - foreach (bool l3 in YP.unify(arg3, new ListPair(new Functor2("call", Atom.a("YP.asserta"), new ListPair(ATermCode, new ListPair(new Functor2("call", Atom.a("getDeclaringClass"), Atom.NIL), Atom.NIL))), BCode))) - { - foreach (bool l4 in compileTerm(A, State, ATermCode)) - { - foreach (bool l5 in compileRuleBody(B, State, BCode)) - { - yield return true; - yield break; - } - } - } - } - } - { - object State = arg2; - Variable A = new Variable(); - Variable B = new Variable(); - Variable ATermCode = new Variable(); - Variable BCode = new Variable(); - foreach (bool l2 in YP.unify(arg1, new Functor2(",", new Functor1("assertz", A), B))) - { - foreach (bool l3 in YP.unify(arg3, new ListPair(new Functor2("call", Atom.a("YP.assertz"), new ListPair(ATermCode, new ListPair(new Functor2("call", Atom.a("getDeclaringClass"), Atom.NIL), Atom.NIL))), BCode))) - { - foreach (bool l4 in compileTerm(A, State, ATermCode)) - { - foreach (bool l5 in compileRuleBody(B, State, BCode)) - { - yield return true; - yield break; - } - } - } - } - } - { - object State = arg2; - object PseudoCode = arg3; - Variable A = new Variable(); - Variable B = new Variable(); - foreach (bool l2 in YP.unify(arg1, new Functor2(",", new Functor1("assert", A), B))) - { - foreach (bool l3 in compileRuleBody(new Functor2(",", new Functor1("assertz", A), B), State, PseudoCode)) - { - yield return true; - yield break; - } - } - } - { - object State = arg2; - Variable Goal = new Variable(); - Variable Catcher = new Variable(); - Variable Handler = new Variable(); - Variable B = new Variable(); - Variable CatchGoal = new Variable(); - Variable GoalTermCode = new Variable(); - Variable BCode = new Variable(); - Variable CatcherTermCode = new Variable(); - Variable HandlerAndBCode = new Variable(); - foreach (bool l2 in YP.unify(arg1, new Functor2(",", new Functor3("catch", Goal, Catcher, Handler), B))) - { - foreach (bool l3 in YP.unify(arg3, ListPair.make(new object[] { new Functor3("declare", Atom.a("YP.Catch"), CatchGoal, new Functor2("new", Atom.a("YP.Catch"), new ListPair(GoalTermCode, new ListPair(new Functor2("call", Atom.a("getDeclaringClass"), Atom.NIL), Atom.NIL)))), new Functor2("foreach", new Functor1("var", CatchGoal), BCode), new Functor2("foreach", new Functor3("callMember", new Functor1("var", CatchGoal), Atom.a("unifyExceptionOrThrow"), new ListPair(CatcherTermCode, Atom.NIL)), HandlerAndBCode) }))) - { - foreach (bool l4 in CompilerState.gensym(State, Atom.a("catchGoal"), CatchGoal)) - { - foreach (bool l5 in compileTerm(Goal, State, GoalTermCode)) - { - foreach (bool l6 in compileTerm(Catcher, State, CatcherTermCode)) - { - foreach (bool l7 in compileRuleBody(B, State, BCode)) - { - foreach (bool l8 in compileRuleBody(new Functor2(",", Handler, B), State, HandlerAndBCode)) - { - yield return true; - yield break; - } - } - } - } - } - } - } - } - { - object State = arg2; - object PseudoCode = arg3; - Variable A = new Variable(); - Variable B = new Variable(); - Variable C = new Variable(); - foreach (bool l2 in YP.unify(arg1, new Functor2(",", new Functor2(",", A, B), C))) - { - foreach (bool l3 in compileRuleBody(new Functor2(",", A, new Functor2(",", B, C)), State, PseudoCode)) - { - yield return true; - yield break; - } - } - } - { - object State = arg2; - object PseudoCode = arg3; - Variable A = new Variable(); - Variable B = new Variable(); - foreach (bool l2 in YP.unify(arg1, new Functor2(";", A, B))) - { - if (YP.var(A)) - { - foreach (bool l4 in compileRuleBody(new Functor2(";", new Functor1("call", A), B), State, PseudoCode)) - { - yield return true; - yield break; - } - } - } - } - { - object State = arg2; - Variable A = new Variable(); - Variable T = new Variable(); - Variable B = new Variable(); - Variable CutIfLabel = new Variable(); - Variable Code = new Variable(); - foreach (bool l2 in YP.unify(arg1, new Functor2(";", new Functor2("->", A, T), B))) - { - foreach (bool l3 in YP.unify(arg3, new ListPair(new Functor2("breakableBlock", CutIfLabel, Code), Atom.NIL))) - { - foreach (bool l4 in CompilerState.gensym(State, Atom.a("cutIf"), CutIfLabel)) - { - foreach (bool l5 in compileRuleBody(new Functor2(";", new Functor2(",", A, new Functor2(",", new Functor1("$CUTIF", CutIfLabel), T)), B), State, Code)) - { - yield return true; - yield break; - } - } - } - } - } - { - object State = arg2; - object PseudoCode = arg3; - Variable _B = new Variable(); - foreach (bool l2 in YP.unify(arg1, new Functor2(";", Atom.a("!"), _B))) - { - foreach (bool l3 in compileRuleBody(Atom.a("!"), State, PseudoCode)) - { - yield return true; - yield break; - } - } - } - { - object State = arg2; - object PseudoCode = arg3; - Variable A = new Variable(); - Variable B = new Variable(); - Variable ACode = new Variable(); - Variable BCode = new Variable(); - foreach (bool l2 in YP.unify(arg1, new Functor2(";", A, B))) - { - foreach (bool l3 in compileRuleBody(A, State, ACode)) - { - foreach (bool l4 in compileRuleBody(B, State, BCode)) - { - foreach (bool l5 in append(ACode, BCode, PseudoCode)) - { - yield return true; - yield break; - } - } - } - } - } - { - object State = arg2; - foreach (bool l2 in YP.unify(arg1, Atom.a("!"))) - { - foreach (bool l3 in YP.unify(arg3, new ListPair(Atom.a("return"), Atom.NIL))) - { - if (CompilerState.determinismEquals(State, Atom.a("detNoneOut"))) - { - yield return true; - yield break; - } - } - } - } - { - object State = arg2; - foreach (bool l2 in YP.unify(arg1, Atom.a("!"))) - { - foreach (bool l3 in YP.unify(arg3, new ListPair(Atom.a("returntrue"), Atom.NIL))) - { - if (CompilerState.determinismEquals(State, Atom.a("semidetNoneOut"))) - { - yield return true; - yield break; - } - } - } - } - { - object State = arg2; - foreach (bool l2 in YP.unify(arg1, Atom.a("!"))) - { - foreach (bool l3 in YP.unify(arg3, new ListPair(Atom.a("yieldtrue"), new ListPair(Atom.a("yieldbreak"), Atom.NIL)))) - { - CompilerState.setCodeUsesYield(State); - yield return true; - yield break; - } - } - } - { - object _State = arg2; - Variable Name = new Variable(); - foreach (bool l2 in YP.unify(arg1, new Functor1("$CUTIF", Name))) - { - foreach (bool l3 in YP.unify(arg3, new ListPair(new Functor1("breakBlock", Name), Atom.NIL))) - { - yield return true; - yield break; - } - } - } - { - object State = arg2; - foreach (bool l2 in YP.unify(arg1, Atom.a("true"))) - { - foreach (bool l3 in YP.unify(arg3, new ListPair(Atom.a("return"), Atom.NIL))) - { - if (CompilerState.determinismEquals(State, Atom.a("detNoneOut"))) - { - yield return true; - yield break; - } - } - } - } - { - object State = arg2; - foreach (bool l2 in YP.unify(arg1, Atom.a("true"))) - { - foreach (bool l3 in YP.unify(arg3, new ListPair(Atom.a("returntrue"), Atom.NIL))) - { - if (CompilerState.determinismEquals(State, Atom.a("semidetNoneOut"))) - { - yield return true; - yield break; - } - } - } - } - { - object State = arg2; - foreach (bool l2 in YP.unify(arg1, Atom.a("true"))) - { - foreach (bool l3 in YP.unify(arg3, new ListPair(Atom.a("yieldfalse"), Atom.NIL))) - { - CompilerState.setCodeUsesYield(State); - yield return true; - yield break; - } - } - } - { - object A = arg1; - object State = arg2; - object PseudoCode = arg3; - foreach (bool l2 in compileRuleBody(new Functor2(",", A, Atom.a("true")), State, PseudoCode)) - { - yield return true; - yield break; - } - } - } - - public static IEnumerable compileBagof(object ResultMethod, object Template, object Goal, object Bag, object B, object State, object PseudoCode) - { - { - Variable TemplateCode = new Variable(); - Variable GoalTermCode = new Variable(); - Variable UnqualifiedGoal = new Variable(); - Variable BagofAnswers = new Variable(); - Variable GoalAndAddCode = new Variable(); - Variable BagCode = new Variable(); - Variable BCode = new Variable(); - foreach (bool l2 in compileTerm(Template, State, TemplateCode)) - { - foreach (bool l3 in compileTerm(Goal, State, GoalTermCode)) - { - foreach (bool l4 in unqualifiedGoal(Goal, UnqualifiedGoal)) - { - foreach (bool l5 in CompilerState.gensym(State, Atom.a("bagofAnswers"), BagofAnswers)) - { - foreach (bool l6 in compileRuleBody(new Functor2(",", UnqualifiedGoal, new Functor2(",", new Functor1("$DET_NONE_OUT", new Functor3("callMember", new Functor1("var", BagofAnswers), Atom.a("add"), Atom.NIL)), Atom.a("fail"))), State, GoalAndAddCode)) - { - foreach (bool l7 in compileTerm(Bag, State, BagCode)) - { - foreach (bool l8 in compileRuleBody(B, State, BCode)) - { - foreach (bool l9 in append(new ListPair(new Functor3("declare", Atom.a("BagofAnswers"), BagofAnswers, new Functor2("new", Atom.a("BagofAnswers"), new ListPair(TemplateCode, new ListPair(GoalTermCode, Atom.NIL)))), GoalAndAddCode), new ListPair(new Functor2("foreach", new Functor3("callMember", new Functor1("var", BagofAnswers), ResultMethod, new ListPair(BagCode, Atom.NIL)), BCode), Atom.NIL), PseudoCode)) - { - yield return true; - yield break; - } - } - } - } - } - } - } - } - } - } - - public static IEnumerable unqualifiedGoal(object arg1, object arg2) - { - { - object Goal = arg1; - foreach (bool l2 in YP.unify(arg2, new Functor1("call", Goal))) - { - if (YP.var(Goal)) - { - yield return true; - yield break; - } - } - } - { - object UnqualifiedGoal = arg2; - Variable x1 = new Variable(); - Variable Goal = new Variable(); - foreach (bool l2 in YP.unify(arg1, new Functor2("^", x1, Goal))) - { - foreach (bool l3 in unqualifiedGoal(Goal, UnqualifiedGoal)) - { - yield return true; - yield break; - } - } - } - { - Variable UnqualifiedGoal = new Variable(); - foreach (bool l2 in YP.unify(arg1, UnqualifiedGoal)) - { - foreach (bool l3 in YP.unify(arg2, UnqualifiedGoal)) - { - yield return true; - yield break; - } - } - } - } - - public static IEnumerable binaryExpressionConditional(object arg1, object arg2) - { - { - foreach (bool l2 in YP.unify(arg1, Atom.a("=:="))) - { - foreach (bool l3 in YP.unify(arg2, Atom.a("YP.equal"))) - { - yield return true; - yield break; - } - } - } - { - foreach (bool l2 in YP.unify(arg1, Atom.a("=\\="))) - { - foreach (bool l3 in YP.unify(arg2, Atom.a("YP.notEqual"))) - { - yield return true; - yield break; - } - } - } - { - foreach (bool l2 in YP.unify(arg1, Atom.a(">"))) - { - foreach (bool l3 in YP.unify(arg2, Atom.a("YP.greaterThan"))) - { - yield return true; - yield break; - } - } - } - { - foreach (bool l2 in YP.unify(arg1, Atom.a("<"))) - { - foreach (bool l3 in YP.unify(arg2, Atom.a("YP.lessThan"))) - { - yield return true; - yield break; - } - } - } - { - foreach (bool l2 in YP.unify(arg1, Atom.a(">="))) - { - foreach (bool l3 in YP.unify(arg2, Atom.a("YP.greaterThanOrEqual"))) - { - yield return true; - yield break; - } - } - } - { - foreach (bool l2 in YP.unify(arg1, Atom.a("=<"))) - { - foreach (bool l3 in YP.unify(arg2, Atom.a("YP.lessThanOrEqual"))) - { - yield return true; - yield break; - } - } - } - } - - public static IEnumerable compileFunctorCall(object Functor_1, object State, object PseudoCode) - { - { - Variable FunctorName = new Variable(); - Variable FunctorArgs = new Variable(); - Variable x6 = new Variable(); - Variable Arity = new Variable(); - Variable FunctionName = new Variable(); - Variable CompiledArgs = new Variable(); - foreach (bool l2 in YP.univ(Functor_1, new ListPair(FunctorName, FunctorArgs))) - { - foreach (bool l3 in YP.functor(Functor_1, x6, Arity)) - { - foreach (bool l4 in functorCallFunctionName(State, FunctorName, Arity, FunctionName)) - { - foreach (bool l5 in maplist_compileTerm(FunctorArgs, State, CompiledArgs)) - { - if (YP.termEqual(FunctionName, Atom.NIL)) - { - foreach (bool l7 in YP.unify(PseudoCode, new Functor2("call", Atom.a("YP.matchDynamic"), new ListPair(new Functor2("call", Atom.a("Atom.a"), new ListPair(new Functor1("object", FunctorName), Atom.NIL)), new ListPair(new Functor1("objectArray", CompiledArgs), Atom.NIL))))) - { - yield return true; - yield break; - } - goto cutIf1; - } - foreach (bool l6 in YP.unify(PseudoCode, new Functor3("functorCall", FunctionName, FunctorArgs, CompiledArgs))) - { - yield return true; - yield break; - } - cutIf1: - { } - } - } - } - } - } - } - - public static IEnumerable functorCallFunctionName(object arg1, object arg2, object arg3, object arg4) - { - { - object _State = arg1; - object Name = arg2; - object Arity = arg3; - object x4 = arg4; - if (functorCallIsSpecialForm(Name, Arity)) - { - yield break; - } - } - { - object x1 = arg1; - object Name = arg2; - object Arity = arg3; - object FunctionName = arg4; - foreach (bool l2 in functorCallYPFunctionName(Name, Arity, FunctionName)) - { - yield return true; - yield break; - } - } - { - object State = arg1; - object Arity = arg3; - Variable Name = new Variable(); - foreach (bool l2 in YP.unify(arg2, Name)) - { - foreach (bool l3 in YP.unify(arg4, Name)) - { - if (CompilerState.nameArityHasModule(State, Name, Arity, Atom.a(""))) - { - yield return true; - yield break; - } - } - } - } - { - object _State = arg1; - object _Arity = arg3; - Variable Name = new Variable(); - foreach (bool l2 in YP.unify(arg2, Name)) - { - foreach (bool l3 in YP.unify(arg4, Name)) - { - foreach (bool l4 in Atom.module(Name, Atom.a(""))) - { - yield return true; - yield break; - } - } - } - } - { - object _State = arg1; - object Name = arg2; - object _Arity = arg3; - foreach (bool l2 in YP.unify(arg4, Atom.NIL)) - { - foreach (bool l3 in Atom.module(Name, Atom.NIL)) - { - yield return true; - yield break; - } - } - } - { - object _State = arg1; - object Name = arg2; - object Arity = arg3; - object x4 = arg4; - Variable Module = new Variable(); - Variable Message = new Variable(); - foreach (bool l2 in Atom.module(Name, Module)) - { - foreach (bool l3 in YP.atom_concat(Atom.a("Not supporting calls to external module: "), Module, Message)) - { - YP.throwException(new Functor2("error", new Functor2("type_error", Atom.a("callable"), new Functor2("/", Name, Arity)), Message)); - yield return true; - yield break; - } - } - } - { - object _State = arg1; - object Name = arg2; - object _Arity = arg3; - object x4 = arg4; - YP.throwException(new Functor2("error", new Functor2("type_error", Atom.a("callable"), Name), Atom.a("Term is not callable"))); - yield return true; - yield break; - } - } - - public static bool functorCallIsSpecialForm(object Name, object Arity) - { - { - Variable x3 = new Variable(); - if (YP.termEqual(Arity, 0)) - { - if (YP.termEqual(Name, Atom.a("!"))) - { - return true; - } - if (YP.termEqual(Name, Atom.a("fail"))) - { - return true; - } - if (YP.termEqual(Name, Atom.a("true"))) - { - return true; - } - } - if (YP.termEqual(Arity, 1)) - { - if (YP.termEqual(Name, Atom.a("\\+"))) - { - return true; - } - if (YP.termEqual(Name, Atom.a("once"))) - { - return true; - } - if (YP.termEqual(Name, Atom.a("$CUTIF"))) - { - return true; - } - if (YP.termEqual(Name, Atom.a("$DET_NONE_OUT"))) - { - return true; - } - if (YP.termEqual(Name, Atom.a("call"))) - { - return true; - } - if (YP.termEqual(Name, Atom.a("current_predicate"))) - { - return true; - } - if (YP.termEqual(Name, Atom.a("asserta"))) - { - return true; - } - if (YP.termEqual(Name, Atom.a("assertz"))) - { - return true; - } - if (YP.termEqual(Name, Atom.a("assert"))) - { - return true; - } - } - if (YP.termEqual(Arity, 2)) - { - if (YP.termEqual(Name, Atom.a(";"))) - { - return true; - } - if (YP.termEqual(Name, Atom.a(","))) - { - return true; - } - if (YP.termEqual(Name, Atom.a("->"))) - { - return true; - } - if (YP.termEqual(Name, Atom.a("\\="))) - { - return true; - } - if (YP.termEqual(Name, Atom.a("is"))) - { - return true; - } - foreach (bool l3 in binaryExpressionConditional(Name, x3)) - { - return true; - } - } - if (YP.termEqual(Arity, 3)) - { - if (YP.termEqual(Name, Atom.a("findall"))) - { - return true; - } - if (YP.termEqual(Name, Atom.a("bagof"))) - { - return true; - } - if (YP.termEqual(Name, Atom.a("setof"))) - { - return true; - } - if (YP.termEqual(Name, Atom.a("catch"))) - { - return true; - } - } - } - return false; - } - - public static IEnumerable functorCallYPFunctionName(object arg1, object arg2, object arg3) - { - { - foreach (bool l2 in YP.unify(arg1, Atom.a("="))) - { - foreach (bool l3 in YP.unify(arg2, 2)) - { - foreach (bool l4 in YP.unify(arg3, Atom.a("YP.unify"))) - { - yield return true; - yield break; - } - } - } - } - { - foreach (bool l2 in YP.unify(arg1, Atom.a("=.."))) - { - foreach (bool l3 in YP.unify(arg2, 2)) - { - foreach (bool l4 in YP.unify(arg3, Atom.a("YP.univ"))) - { - yield return true; - yield break; - } - } - } - } - { - foreach (bool l2 in YP.unify(arg1, Atom.a("var"))) - { - foreach (bool l3 in YP.unify(arg2, 1)) - { - foreach (bool l4 in YP.unify(arg3, Atom.a("YP.var"))) - { - yield return true; - yield break; - } - } - } - } - { - foreach (bool l2 in YP.unify(arg1, Atom.a("nonvar"))) - { - foreach (bool l3 in YP.unify(arg2, 1)) - { - foreach (bool l4 in YP.unify(arg3, Atom.a("YP.nonvar"))) - { - yield return true; - yield break; - } - } - } - } - { - foreach (bool l2 in YP.unify(arg1, Atom.a("arg"))) - { - foreach (bool l3 in YP.unify(arg2, 3)) - { - foreach (bool l4 in YP.unify(arg3, Atom.a("YP.arg"))) - { - yield return true; - yield break; - } - } - } - } - { - foreach (bool l2 in YP.unify(arg1, Atom.a("functor"))) - { - foreach (bool l3 in YP.unify(arg2, 3)) - { - foreach (bool l4 in YP.unify(arg3, Atom.a("YP.functor"))) - { - yield return true; - yield break; - } - } - } - } - { - foreach (bool l2 in YP.unify(arg1, Atom.a("repeat"))) - { - foreach (bool l3 in YP.unify(arg2, 0)) - { - foreach (bool l4 in YP.unify(arg3, Atom.a("YP.repeat"))) - { - yield return true; - yield break; - } - } - } - } - { - foreach (bool l2 in YP.unify(arg1, Atom.a("get_code"))) - { - foreach (bool l3 in YP.unify(arg2, 1)) - { - foreach (bool l4 in YP.unify(arg3, Atom.a("YP.get_code"))) - { - yield return true; - yield break; - } - } - } - } - { - foreach (bool l2 in YP.unify(arg1, Atom.a("current_op"))) - { - foreach (bool l3 in YP.unify(arg2, 3)) - { - foreach (bool l4 in YP.unify(arg3, Atom.a("YP.current_op"))) - { - yield return true; - yield break; - } - } - } - } - { - foreach (bool l2 in YP.unify(arg1, Atom.a("atom_length"))) - { - foreach (bool l3 in YP.unify(arg2, 2)) - { - foreach (bool l4 in YP.unify(arg3, Atom.a("YP.atom_length"))) - { - yield return true; - yield break; - } - } - } - } - { - foreach (bool l2 in YP.unify(arg1, Atom.a("atom_concat"))) - { - foreach (bool l3 in YP.unify(arg2, 3)) - { - foreach (bool l4 in YP.unify(arg3, Atom.a("YP.atom_concat"))) - { - yield return true; - yield break; - } - } - } - } - { - foreach (bool l2 in YP.unify(arg1, Atom.a("sub_atom"))) - { - foreach (bool l3 in YP.unify(arg2, 5)) - { - foreach (bool l4 in YP.unify(arg3, Atom.a("YP.sub_atom"))) - { - yield return true; - yield break; - } - } - } - } - { - foreach (bool l2 in YP.unify(arg1, Atom.a("atom_chars"))) - { - foreach (bool l3 in YP.unify(arg2, 2)) - { - foreach (bool l4 in YP.unify(arg3, Atom.a("YP.atom_chars"))) - { - yield return true; - yield break; - } - } - } - } - { - foreach (bool l2 in YP.unify(arg1, Atom.a("atom_codes"))) - { - foreach (bool l3 in YP.unify(arg2, 2)) - { - foreach (bool l4 in YP.unify(arg3, Atom.a("YP.atom_codes"))) - { - yield return true; - yield break; - } - } - } - } - { - foreach (bool l2 in YP.unify(arg1, Atom.a("char_code"))) - { - foreach (bool l3 in YP.unify(arg2, 2)) - { - foreach (bool l4 in YP.unify(arg3, Atom.a("YP.char_code"))) - { - yield return true; - yield break; - } - } - } - } - { - foreach (bool l2 in YP.unify(arg1, Atom.a("number_chars"))) - { - foreach (bool l3 in YP.unify(arg2, 2)) - { - foreach (bool l4 in YP.unify(arg3, Atom.a("YP.number_chars"))) - { - yield return true; - yield break; - } - } - } - } - { - foreach (bool l2 in YP.unify(arg1, Atom.a("number_codes"))) - { - foreach (bool l3 in YP.unify(arg2, 2)) - { - foreach (bool l4 in YP.unify(arg3, Atom.a("YP.number_codes"))) - { - yield return true; - yield break; - } - } - } - } - { - foreach (bool l2 in YP.unify(arg1, Atom.a("copy_term"))) - { - foreach (bool l3 in YP.unify(arg2, 2)) - { - foreach (bool l4 in YP.unify(arg3, Atom.a("YP.copy_term"))) - { - yield return true; - yield break; - } - } - } - } - { - foreach (bool l2 in YP.unify(arg1, Atom.a("sort"))) - { - foreach (bool l3 in YP.unify(arg2, 2)) - { - foreach (bool l4 in YP.unify(arg3, Atom.a("YP.sort"))) - { - yield return true; - yield break; - } - } - } - } - { - // Manually included : script_event for callback to LSL/C# - - //object x1 = arg1; - foreach (bool l2 in YP.unify(arg1, Atom.a(@"script_event"))) - { - foreach (bool l3 in YP.unify(arg2, 2)) - { - foreach (bool l4 in YP.unify(arg3, Atom.a(@"YP.script_event"))) - { - yield return true; - yield break; - } - } - } - } - { - foreach (bool l2 in YP.unify(arg1, Atom.a("nl"))) - { - foreach (bool l3 in YP.unify(arg2, 0)) - { - foreach (bool l4 in YP.unify(arg3, Atom.a("YP.nl"))) - { - yield return true; - yield break; - } - } - } - } - { - foreach (bool l2 in YP.unify(arg1, Atom.a("write"))) - { - foreach (bool l3 in YP.unify(arg2, 1)) - { - foreach (bool l4 in YP.unify(arg3, Atom.a("YP.write"))) - { - yield return true; - yield break; - } - } - } - } - { - foreach (bool l2 in YP.unify(arg1, Atom.a("put_code"))) - { - foreach (bool l3 in YP.unify(arg2, 1)) - { - foreach (bool l4 in YP.unify(arg3, Atom.a("YP.put_code"))) - { - yield return true; - yield break; - } - } - } - } - { - foreach (bool l2 in YP.unify(arg1, Atom.a("see"))) - { - foreach (bool l3 in YP.unify(arg2, 1)) - { - foreach (bool l4 in YP.unify(arg3, Atom.a("YP.see"))) - { - yield return true; - yield break; - } - } - } - } - { - foreach (bool l2 in YP.unify(arg1, Atom.a("seen"))) - { - foreach (bool l3 in YP.unify(arg2, 0)) - { - foreach (bool l4 in YP.unify(arg3, Atom.a("YP.seen"))) - { - yield return true; - yield break; - } - } - } - } - { - foreach (bool l2 in YP.unify(arg1, Atom.a("tell"))) - { - foreach (bool l3 in YP.unify(arg2, 1)) - { - foreach (bool l4 in YP.unify(arg3, Atom.a("YP.tell"))) - { - yield return true; - yield break; - } - } - } - } - { - foreach (bool l2 in YP.unify(arg1, Atom.a("told"))) - { - foreach (bool l3 in YP.unify(arg2, 0)) - { - foreach (bool l4 in YP.unify(arg3, Atom.a("YP.told"))) - { - yield return true; - yield break; - } - } - } - } - { - foreach (bool l2 in YP.unify(arg1, Atom.a("clause"))) - { - foreach (bool l3 in YP.unify(arg2, 2)) - { - foreach (bool l4 in YP.unify(arg3, Atom.a("YP.clause"))) - { - yield return true; - yield break; - } - } - } - } - { - foreach (bool l2 in YP.unify(arg1, Atom.a("retract"))) - { - foreach (bool l3 in YP.unify(arg2, 1)) - { - foreach (bool l4 in YP.unify(arg3, Atom.a("YP.retract"))) - { - yield return true; - yield break; - } - } - } - } - { - foreach (bool l2 in YP.unify(arg1, Atom.a("abolish"))) - { - foreach (bool l3 in YP.unify(arg2, 1)) - { - foreach (bool l4 in YP.unify(arg3, Atom.a("YP.abolish"))) - { - yield return true; - yield break; - } - } - } - } - { - foreach (bool l2 in YP.unify(arg1, Atom.a("retractall"))) - { - foreach (bool l3 in YP.unify(arg2, 1)) - { - foreach (bool l4 in YP.unify(arg3, Atom.a("YP.retractall"))) - { - yield return true; - yield break; - } - } - } - } - { - foreach (bool l2 in YP.unify(arg1, Atom.a("atom"))) - { - foreach (bool l3 in YP.unify(arg2, 1)) - { - foreach (bool l4 in YP.unify(arg3, Atom.a("YP.atom"))) - { - yield return true; - yield break; - } - } - } - } - { - foreach (bool l2 in YP.unify(arg1, Atom.a("integer"))) - { - foreach (bool l3 in YP.unify(arg2, 1)) - { - foreach (bool l4 in YP.unify(arg3, Atom.a("YP.integer"))) - { - yield return true; - yield break; - } - } - } - } - { - foreach (bool l2 in YP.unify(arg1, Atom.a("float"))) - { - foreach (bool l3 in YP.unify(arg2, 1)) - { - foreach (bool l4 in YP.unify(arg3, Atom.a("YP.isFloat"))) - { - yield return true; - yield break; - } - } - } - } - { - foreach (bool l2 in YP.unify(arg1, Atom.a("number"))) - { - foreach (bool l3 in YP.unify(arg2, 1)) - { - foreach (bool l4 in YP.unify(arg3, Atom.a("YP.number"))) - { - yield return true; - yield break; - } - } - } - } - { - foreach (bool l2 in YP.unify(arg1, Atom.a("atomic"))) - { - foreach (bool l3 in YP.unify(arg2, 1)) - { - foreach (bool l4 in YP.unify(arg3, Atom.a("YP.atomic"))) - { - yield return true; - yield break; - } - } - } - } - { - foreach (bool l2 in YP.unify(arg1, Atom.a("compound"))) - { - foreach (bool l3 in YP.unify(arg2, 1)) - { - foreach (bool l4 in YP.unify(arg3, Atom.a("YP.compound"))) - { - yield return true; - yield break; - } - } - } - } - { - foreach (bool l2 in YP.unify(arg1, Atom.a("=="))) - { - foreach (bool l3 in YP.unify(arg2, 2)) - { - foreach (bool l4 in YP.unify(arg3, Atom.a("YP.termEqual"))) - { - yield return true; - yield break; - } - } - } - } - { - foreach (bool l2 in YP.unify(arg1, Atom.a("\\=="))) - { - foreach (bool l3 in YP.unify(arg2, 2)) - { - foreach (bool l4 in YP.unify(arg3, Atom.a("YP.termNotEqual"))) - { - yield return true; - yield break; - } - } - } - } - { - foreach (bool l2 in YP.unify(arg1, Atom.a("@<"))) - { - foreach (bool l3 in YP.unify(arg2, 2)) - { - foreach (bool l4 in YP.unify(arg3, Atom.a("YP.termLessThan"))) - { - yield return true; - yield break; - } - } - } - } - { - foreach (bool l2 in YP.unify(arg1, Atom.a("@=<"))) - { - foreach (bool l3 in YP.unify(arg2, 2)) - { - foreach (bool l4 in YP.unify(arg3, Atom.a("YP.termLessThanOrEqual"))) - { - yield return true; - yield break; - } - } - } - } - { - foreach (bool l2 in YP.unify(arg1, Atom.a("@>"))) - { - foreach (bool l3 in YP.unify(arg2, 2)) - { - foreach (bool l4 in YP.unify(arg3, Atom.a("YP.termGreaterThan"))) - { - yield return true; - yield break; - } - } - } - } - { - foreach (bool l2 in YP.unify(arg1, Atom.a("@>="))) - { - foreach (bool l3 in YP.unify(arg2, 2)) - { - foreach (bool l4 in YP.unify(arg3, Atom.a("YP.termGreaterThanOrEqual"))) - { - yield return true; - yield break; - } - } - } - } - { - foreach (bool l2 in YP.unify(arg1, Atom.a("throw"))) - { - foreach (bool l3 in YP.unify(arg2, 1)) - { - foreach (bool l4 in YP.unify(arg3, Atom.a("YP.throwException"))) - { - yield return true; - yield break; - } - } - } - } - { - foreach (bool l2 in YP.unify(arg1, Atom.a("current_prolog_flag"))) - { - foreach (bool l3 in YP.unify(arg2, 2)) - { - foreach (bool l4 in YP.unify(arg3, Atom.a("YP.current_prolog_flag"))) - { - yield return true; - yield break; - } - } - } - } - { - foreach (bool l2 in YP.unify(arg1, Atom.a("set_prolog_flag"))) - { - foreach (bool l3 in YP.unify(arg2, 2)) - { - foreach (bool l4 in YP.unify(arg3, Atom.a("YP.set_prolog_flag"))) - { - yield return true; - yield break; - } - } - } - } - { - foreach (bool l2 in YP.unify(arg1, Atom.a("current_input"))) - { - foreach (bool l3 in YP.unify(arg2, 1)) - { - foreach (bool l4 in YP.unify(arg3, Atom.a("YP.current_input"))) - { - yield return true; - yield break; - } - } - } - } - { - foreach (bool l2 in YP.unify(arg1, Atom.a("current_output"))) - { - foreach (bool l3 in YP.unify(arg2, 1)) - { - foreach (bool l4 in YP.unify(arg3, Atom.a("YP.current_output"))) - { - yield return true; - yield break; - } - } - } - } - { - foreach (bool l2 in YP.unify(arg1, Atom.a("read_term"))) - { - foreach (bool l3 in YP.unify(arg2, 2)) - { - foreach (bool l4 in YP.unify(arg3, Atom.a("Parser.read_term2"))) - { - yield return true; - yield break; - } - } - } - } - { - foreach (bool l2 in YP.unify(arg1, Atom.a("read_term"))) - { - foreach (bool l3 in YP.unify(arg2, 3)) - { - foreach (bool l4 in YP.unify(arg3, Atom.a("Parser.read_term3"))) - { - yield return true; - yield break; - } - } - } - } - { - foreach (bool l2 in YP.unify(arg1, Atom.a("read"))) - { - foreach (bool l3 in YP.unify(arg2, 1)) - { - foreach (bool l4 in YP.unify(arg3, Atom.a("Parser.read1"))) - { - yield return true; - yield break; - } - } - } - } - { - foreach (bool l2 in YP.unify(arg1, Atom.a("read"))) - { - foreach (bool l3 in YP.unify(arg2, 2)) - { - foreach (bool l4 in YP.unify(arg3, Atom.a("Parser.read2"))) - { - yield return true; - yield break; - } - } - } - } - } - - public static IEnumerable compileTerm(object arg1, object arg2, object arg3) - { - { - object Term = arg1; - object State = arg2; - Variable VariableName = new Variable(); - foreach (bool l2 in YP.unify(arg3, new Functor1("var", VariableName))) - { - if (YP.var(Term)) - { - foreach (bool l4 in CompilerState.getVariableName(State, Term, VariableName)) - { - yield return true; - yield break; - } - } - } - } - { - object _State = arg2; - foreach (bool l2 in YP.unify(arg1, Atom.NIL)) - { - foreach (bool l3 in YP.unify(arg3, new Functor1("var", Atom.a("Atom.NIL")))) - { - yield return true; - yield break; - } - } - } - { - object Term = arg1; - object State = arg2; - object Code = arg3; - Variable ModuleCode = new Variable(); - if (YP.atom(Term)) - { - foreach (bool l3 in compileAtomModule(Term, 0, State, ModuleCode)) - { - foreach (bool l4 in YP.unify(Code, new Functor2("call", Atom.a("Atom.a"), new ListPair(new Functor1("object", Term), new ListPair(ModuleCode, Atom.NIL))))) - { - yield return true; - yield break; - } - goto cutIf1; - } - foreach (bool l3 in YP.unify(Code, new Functor2("call", Atom.a("Atom.a"), new ListPair(new Functor1("object", Term), Atom.NIL)))) - { - yield return true; - yield break; - } - cutIf1: - { } - } - } - { - object State = arg2; - Variable First = new Variable(); - Variable Rest = new Variable(); - Variable CompiledList = new Variable(); - Variable x5 = new Variable(); - Variable Rest2 = new Variable(); - foreach (bool l2 in YP.unify(arg1, new ListPair(First, Rest))) - { - foreach (bool l3 in YP.unify(arg3, new Functor2("call", Atom.a("ListPair.make"), new ListPair(new Functor1("objectArray", CompiledList), Atom.NIL)))) - { - if (YP.nonvar(Rest)) - { - foreach (bool l5 in YP.unify(Rest, new ListPair(x5, Rest2))) - { - if (YP.termNotEqual(Rest2, Atom.NIL)) - { - foreach (bool l7 in maplist_compileTerm(new ListPair(First, Rest), State, CompiledList)) - { - yield return true; - yield break; - } - } - } - } - } - } - } - { - object State = arg2; - Variable First = new Variable(); - Variable Rest = new Variable(); - Variable Arg1 = new Variable(); - Variable Arg2 = new Variable(); - foreach (bool l2 in YP.unify(arg1, new ListPair(First, Rest))) - { - foreach (bool l3 in YP.unify(arg3, new Functor2("new", Atom.a("ListPair"), new ListPair(Arg1, new ListPair(Arg2, Atom.NIL))))) - { - foreach (bool l4 in compileTerm(First, State, Arg1)) - { - foreach (bool l5 in compileTerm(Rest, State, Arg2)) - { - yield return true; - yield break; - } - } - } - } - } - { - object Term = arg1; - object State = arg2; - object Result = arg3; - Variable Name = new Variable(); - Variable TermArgs = new Variable(); - Variable x6 = new Variable(); - Variable Arity = new Variable(); - Variable ModuleCode = new Variable(); - Variable NameCode = new Variable(); - Variable X1 = new Variable(); - Variable Arg1 = new Variable(); - Variable X2 = new Variable(); - Variable Arg2 = new Variable(); - Variable X3 = new Variable(); - Variable Arg3 = new Variable(); - Variable Args = new Variable(); - foreach (bool l2 in YP.univ(Term, new ListPair(Name, TermArgs))) - { - if (YP.termEqual(TermArgs, Atom.NIL)) - { - foreach (bool l4 in YP.unify(Result, new Functor1("object", Name))) - { - yield return true; - yield break; - } - goto cutIf2; - } - foreach (bool l3 in YP.functor(Term, x6, Arity)) - { - foreach (bool l4 in compileAtomModule(Name, Arity, State, ModuleCode)) - { - foreach (bool l5 in YP.unify(NameCode, new Functor2("call", Atom.a("Atom.a"), new ListPair(new Functor1("object", Name), new ListPair(ModuleCode, Atom.NIL))))) - { - foreach (bool l6 in YP.unify(TermArgs, new ListPair(X1, Atom.NIL))) - { - foreach (bool l7 in compileTerm(X1, State, Arg1)) - { - foreach (bool l8 in YP.unify(Result, new Functor2("new", Atom.a("Functor1"), new ListPair(NameCode, new ListPair(Arg1, Atom.NIL))))) - { - yield return true; - yield break; - } - } - goto cutIf4; - } - foreach (bool l6 in YP.unify(TermArgs, new ListPair(X1, new ListPair(X2, Atom.NIL)))) - { - foreach (bool l7 in compileTerm(X1, State, Arg1)) - { - foreach (bool l8 in compileTerm(X2, State, Arg2)) - { - foreach (bool l9 in YP.unify(Result, new Functor2("new", Atom.a("Functor2"), ListPair.make(new object[] { NameCode, Arg1, Arg2 })))) - { - yield return true; - yield break; - } - } - } - goto cutIf5; - } - foreach (bool l6 in YP.unify(TermArgs, ListPair.make(new object[] { X1, X2, X3 }))) - { - foreach (bool l7 in compileTerm(X1, State, Arg1)) - { - foreach (bool l8 in compileTerm(X2, State, Arg2)) - { - foreach (bool l9 in compileTerm(X3, State, Arg3)) - { - foreach (bool l10 in YP.unify(Result, new Functor2("new", Atom.a("Functor3"), ListPair.make(new object[] { NameCode, Arg1, Arg2, Arg3 })))) - { - yield return true; - yield break; - } - } - } - } - } - foreach (bool l6 in maplist_compileTerm(TermArgs, State, Args)) - { - foreach (bool l7 in YP.unify(Result, new Functor2("new", Atom.a("Functor"), new ListPair(NameCode, new ListPair(new Functor1("objectArray", Args), Atom.NIL))))) - { - yield return true; - yield break; - } - } - cutIf5: - cutIf4: - { } - } - goto cutIf3; - } - foreach (bool l4 in YP.unify(NameCode, new Functor1("object", Name))) - { - foreach (bool l5 in YP.unify(TermArgs, new ListPair(X1, Atom.NIL))) - { - foreach (bool l6 in compileTerm(X1, State, Arg1)) - { - foreach (bool l7 in YP.unify(Result, new Functor2("new", Atom.a("Functor1"), new ListPair(NameCode, new ListPair(Arg1, Atom.NIL))))) - { - yield return true; - yield break; - } - } - goto cutIf6; - } - foreach (bool l5 in YP.unify(TermArgs, new ListPair(X1, new ListPair(X2, Atom.NIL)))) - { - foreach (bool l6 in compileTerm(X1, State, Arg1)) - { - foreach (bool l7 in compileTerm(X2, State, Arg2)) - { - foreach (bool l8 in YP.unify(Result, new Functor2("new", Atom.a("Functor2"), ListPair.make(new object[] { NameCode, Arg1, Arg2 })))) - { - yield return true; - yield break; - } - } - } - goto cutIf7; - } - foreach (bool l5 in YP.unify(TermArgs, ListPair.make(new object[] { X1, X2, X3 }))) - { - foreach (bool l6 in compileTerm(X1, State, Arg1)) - { - foreach (bool l7 in compileTerm(X2, State, Arg2)) - { - foreach (bool l8 in compileTerm(X3, State, Arg3)) - { - foreach (bool l9 in YP.unify(Result, new Functor2("new", Atom.a("Functor3"), ListPair.make(new object[] { NameCode, Arg1, Arg2, Arg3 })))) - { - yield return true; - yield break; - } - } - } - } - } - foreach (bool l5 in maplist_compileTerm(TermArgs, State, Args)) - { - foreach (bool l6 in YP.unify(Result, new Functor2("new", Atom.a("Functor"), new ListPair(NameCode, new ListPair(new Functor1("objectArray", Args), Atom.NIL))))) - { - yield return true; - yield break; - } - } - cutIf7: - cutIf6: - { } - } - cutIf3: - { } - } - cutIf2: - { } - } - } - } - - public static IEnumerable compileAtomModule(object Name, object arg2, object arg3, object ModuleCode) - { - { - object Arity = arg2; - object State = arg3; - if (CompilerState.nameArityHasModule(State, Name, Arity, Atom.a(""))) - { - foreach (bool l3 in YP.unify(ModuleCode, new Functor2("call", Atom.a("Atom.a"), new ListPair(new Functor1("object", Atom.a("")), Atom.NIL)))) - { - yield return true; - yield break; - } - } - } - { - object _Arity = arg2; - object _State = arg3; - Variable Module = new Variable(); - foreach (bool l2 in Atom.module(Name, Module)) - { - if (YP.termNotEqual(Module, Atom.NIL)) - { - foreach (bool l4 in YP.unify(ModuleCode, new Functor2("call", Atom.a("Atom.a"), new ListPair(new Functor1("object", Module), Atom.NIL)))) - { - yield return true; - yield break; - } - } - } - } - } - - public static IEnumerable maplist_compileTerm(object arg1, object arg2, object arg3) - { - { - object _State = arg2; - foreach (bool l2 in YP.unify(arg1, Atom.NIL)) - { - foreach (bool l3 in YP.unify(arg3, Atom.NIL)) - { - yield return true; - yield break; - } - } - } - { - object State = arg2; - Variable First = new Variable(); - Variable Rest = new Variable(); - Variable FirstResult = new Variable(); - Variable RestResults = new Variable(); - foreach (bool l2 in YP.unify(arg1, new ListPair(First, Rest))) - { - foreach (bool l3 in YP.unify(arg3, new ListPair(FirstResult, RestResults))) - { - if (YP.nonvar(Rest)) - { - foreach (bool l5 in compileTerm(First, State, FirstResult)) - { - foreach (bool l6 in maplist_compileTerm(Rest, State, RestResults)) - { - yield return true; - yield break; - } - } - } - } - } - } - } - - public static IEnumerable compileExpression(object Term, object State, object Result) - { - { - Variable Name = new Variable(); - Variable TermArgs = new Variable(); - Variable X1 = new Variable(); - Variable FunctionName = new Variable(); - Variable Arg1 = new Variable(); - Variable x9 = new Variable(); - Variable X2 = new Variable(); - Variable Arg2 = new Variable(); - Variable x12 = new Variable(); - Variable Arity = new Variable(); - if (YP.nonvar(Term)) - { - foreach (bool l3 in YP.univ(Term, new ListPair(Name, TermArgs))) - { - if (YP.atom(Name)) - { - foreach (bool l5 in YP.unify(TermArgs, new ListPair(X1, Atom.NIL))) - { - foreach (bool l6 in unaryFunction(Name, FunctionName)) - { - foreach (bool l7 in compileExpression(X1, State, Arg1)) - { - foreach (bool l8 in YP.unify(Result, new Functor2("call", FunctionName, new ListPair(Arg1, Atom.NIL)))) - { - yield return true; - yield break; - } - } - goto cutIf1; - } - } - foreach (bool l5 in YP.unify(Term, new ListPair(x9, Atom.NIL))) - { - foreach (bool l6 in compileTerm(Term, State, Result)) - { - yield return true; - yield break; - } - goto cutIf2; - } - foreach (bool l5 in YP.unify(TermArgs, new ListPair(X1, new ListPair(X2, Atom.NIL)))) - { - foreach (bool l6 in binaryFunction(Name, FunctionName)) - { - foreach (bool l7 in compileExpression(X1, State, Arg1)) - { - foreach (bool l8 in compileExpression(X2, State, Arg2)) - { - foreach (bool l9 in YP.unify(Result, new Functor2("call", FunctionName, new ListPair(Arg1, new ListPair(Arg2, Atom.NIL))))) - { - yield return true; - yield break; - } - } - } - goto cutIf3; - } - } - foreach (bool l5 in YP.functor(Term, x12, Arity)) - { - YP.throwException(new Functor2("error", new Functor2("type_error", Atom.a("evaluable"), new Functor2("/", Name, Arity)), Atom.a("Not an expression function"))); - yield return false; - } - cutIf3: - cutIf2: - cutIf1: - { } - } - } - } - } - { - foreach (bool l2 in compileTerm(Term, State, Result)) - { - yield return true; - yield break; - } - } - } - - public static IEnumerable unaryFunction(object arg1, object arg2) - { - { - foreach (bool l2 in YP.unify(arg1, Atom.a("-"))) - { - foreach (bool l3 in YP.unify(arg2, Atom.a("YP.negate"))) - { - yield return true; - yield break; - } - } - } - { - foreach (bool l2 in YP.unify(arg1, Atom.a("abs"))) - { - foreach (bool l3 in YP.unify(arg2, Atom.a("YP.abs"))) - { - yield return true; - yield break; - } - } - } - { - foreach (bool l2 in YP.unify(arg1, Atom.a("sign"))) - { - foreach (bool l3 in YP.unify(arg2, Atom.a("YP.sign"))) - { - yield return true; - yield break; - } - } - } - { - foreach (bool l2 in YP.unify(arg1, Atom.a("float"))) - { - foreach (bool l3 in YP.unify(arg2, Atom.a("YP.toFloat"))) - { - yield return true; - yield break; - } - } - } - { - foreach (bool l2 in YP.unify(arg1, Atom.a("floor"))) - { - foreach (bool l3 in YP.unify(arg2, Atom.a("YP.floor"))) - { - yield return true; - yield break; - } - } - } - { - foreach (bool l2 in YP.unify(arg1, Atom.a("truncate"))) - { - foreach (bool l3 in YP.unify(arg2, Atom.a("YP.truncate"))) - { - yield return true; - yield break; - } - } - } - { - foreach (bool l2 in YP.unify(arg1, Atom.a("round"))) - { - foreach (bool l3 in YP.unify(arg2, Atom.a("YP.round"))) - { - yield return true; - yield break; - } - } - } - { - foreach (bool l2 in YP.unify(arg1, Atom.a("ceiling"))) - { - foreach (bool l3 in YP.unify(arg2, Atom.a("YP.ceiling"))) - { - yield return true; - yield break; - } - } - } - { - foreach (bool l2 in YP.unify(arg1, Atom.a("sin"))) - { - foreach (bool l3 in YP.unify(arg2, Atom.a("YP.sin"))) - { - yield return true; - yield break; - } - } - } - { - foreach (bool l2 in YP.unify(arg1, Atom.a("cos"))) - { - foreach (bool l3 in YP.unify(arg2, Atom.a("YP.cos"))) - { - yield return true; - yield break; - } - } - } - { - foreach (bool l2 in YP.unify(arg1, Atom.a("atan"))) - { - foreach (bool l3 in YP.unify(arg2, Atom.a("YP.atan"))) - { - yield return true; - yield break; - } - } - } - { - foreach (bool l2 in YP.unify(arg1, Atom.a("exp"))) - { - foreach (bool l3 in YP.unify(arg2, Atom.a("YP.exp"))) - { - yield return true; - yield break; - } - } - } - { - foreach (bool l2 in YP.unify(arg1, Atom.a("log"))) - { - foreach (bool l3 in YP.unify(arg2, Atom.a("YP.log"))) - { - yield return true; - yield break; - } - } - } - { - foreach (bool l2 in YP.unify(arg1, Atom.a("sqrt"))) - { - foreach (bool l3 in YP.unify(arg2, Atom.a("YP.sqrt"))) - { - yield return true; - yield break; - } - } - } - { - foreach (bool l2 in YP.unify(arg1, Atom.a("\\"))) - { - foreach (bool l3 in YP.unify(arg2, Atom.a("YP.bitwiseComplement"))) - { - yield return true; - yield break; - } - } - } - } - - public static IEnumerable binaryFunction(object arg1, object arg2) - { - { - foreach (bool l2 in YP.unify(arg1, Atom.a("+"))) - { - foreach (bool l3 in YP.unify(arg2, Atom.a("YP.add"))) - { - yield return true; - yield break; - } - } - } - { - foreach (bool l2 in YP.unify(arg1, Atom.a("-"))) - { - foreach (bool l3 in YP.unify(arg2, Atom.a("YP.subtract"))) - { - yield return true; - yield break; - } - } - } - { - foreach (bool l2 in YP.unify(arg1, Atom.a("*"))) - { - foreach (bool l3 in YP.unify(arg2, Atom.a("YP.multiply"))) - { - yield return true; - yield break; - } - } - } - { - foreach (bool l2 in YP.unify(arg1, Atom.a("/"))) - { - foreach (bool l3 in YP.unify(arg2, Atom.a("YP.divide"))) - { - yield return true; - yield break; - } - } - } - { - foreach (bool l2 in YP.unify(arg1, Atom.a("//"))) - { - foreach (bool l3 in YP.unify(arg2, Atom.a("YP.intDivide"))) - { - yield return true; - yield break; - } - } - } - { - foreach (bool l2 in YP.unify(arg1, Atom.a("mod"))) - { - foreach (bool l3 in YP.unify(arg2, Atom.a("YP.mod"))) - { - yield return true; - yield break; - } - } - } - { - foreach (bool l2 in YP.unify(arg1, Atom.a("**"))) - { - foreach (bool l3 in YP.unify(arg2, Atom.a("YP.pow"))) - { - yield return true; - yield break; - } - } - } - { - foreach (bool l2 in YP.unify(arg1, Atom.a(">>"))) - { - foreach (bool l3 in YP.unify(arg2, Atom.a("YP.bitwiseShiftRight"))) - { - yield return true; - yield break; - } - } - } - { - foreach (bool l2 in YP.unify(arg1, Atom.a("<<"))) - { - foreach (bool l3 in YP.unify(arg2, Atom.a("YP.bitwiseShiftLeft"))) - { - yield return true; - yield break; - } - } - } - { - foreach (bool l2 in YP.unify(arg1, Atom.a("/\\"))) - { - foreach (bool l3 in YP.unify(arg2, Atom.a("YP.bitwiseAnd"))) - { - yield return true; - yield break; - } - } - } - { - foreach (bool l2 in YP.unify(arg1, Atom.a("\\/"))) - { - foreach (bool l3 in YP.unify(arg2, Atom.a("YP.bitwiseOr"))) - { - yield return true; - yield break; - } - } - } - { - foreach (bool l2 in YP.unify(arg1, Atom.a("min"))) - { - foreach (bool l3 in YP.unify(arg2, Atom.a("YP.min"))) - { - yield return true; - yield break; - } - } - } - { - foreach (bool l2 in YP.unify(arg1, Atom.a("max"))) - { - foreach (bool l3 in YP.unify(arg2, Atom.a("YP.max"))) - { - yield return true; - yield break; - } - } - } - } - - public static void convertFunctionCSharp(object arg1) - { - { - foreach (bool l2 in YP.unify(arg1, Atom.a("getDeclaringClass"))) - { - YP.write(Atom.a("public class YPInnerClass {}")); - YP.nl(); - YP.write(Atom.a("public static System.Type getDeclaringClass() { return typeof(YPInnerClass).DeclaringType; }")); - YP.nl(); - YP.nl(); - return; - } - } - { - Variable ReturnType = new Variable(); - Variable Name = new Variable(); - Variable ArgList = new Variable(); - Variable Body = new Variable(); - Variable Level = new Variable(); - foreach (bool l2 in YP.unify(arg1, new Functor("function", new object[] { ReturnType, Name, ArgList, Body }))) - { - YP.write(Atom.a("public static ")); - YP.write(ReturnType); - YP.write(Atom.a(" ")); - YP.write(Name); - YP.write(Atom.a("(")); - convertArgListCSharp(ArgList); - YP.write(Atom.a(") {")); - YP.nl(); - foreach (bool l3 in YP.unify(Level, 1)) - { - convertStatementListCSharp(Body, Level); - YP.write(Atom.a("}")); - YP.nl(); - YP.nl(); - return; - } - } - } - } - - public static IEnumerable convertStatementListCSharp(object arg1, object x1, object x2) - { - { - foreach (bool l2 in YP.unify(arg1, Atom.NIL)) - { - yield return true; - yield break; - } - } - } - - public static void convertStatementListCSharp(object arg1, object Level) - { - { - Variable Name = new Variable(); - Variable Body = new Variable(); - Variable RestStatements = new Variable(); - Variable NewStatements = new Variable(); - foreach (bool l2 in YP.unify(arg1, new ListPair(new Functor2("breakableBlock", Name, Body), RestStatements))) - { - foreach (bool l3 in append(Body, new ListPair(new Functor1("label", Name), RestStatements), NewStatements)) - { - convertStatementListCSharp(NewStatements, Level); - return; - } - } - } - { - Variable Type = new Variable(); - Variable Name = new Variable(); - Variable Expression = new Variable(); - Variable RestStatements = new Variable(); - foreach (bool l2 in YP.unify(arg1, new ListPair(new Functor3("declare", Type, Name, Expression), RestStatements))) - { - convertIndentationCSharp(Level); - YP.write(Type); - YP.write(Atom.a(" ")); - YP.write(Name); - YP.write(Atom.a(" = ")); - convertExpressionCSharp(Expression); - YP.write(Atom.a(";")); - YP.nl(); - convertStatementListCSharp(RestStatements, Level); - return; - } - } - { - Variable Name = new Variable(); - Variable Expression = new Variable(); - Variable RestStatements = new Variable(); - foreach (bool l2 in YP.unify(arg1, new ListPair(new Functor2("assign", Name, Expression), RestStatements))) - { - convertIndentationCSharp(Level); - YP.write(Name); - YP.write(Atom.a(" = ")); - convertExpressionCSharp(Expression); - YP.write(Atom.a(";")); - YP.nl(); - convertStatementListCSharp(RestStatements, Level); - return; - } - } - { - Variable RestStatements = new Variable(); - foreach (bool l2 in YP.unify(arg1, new ListPair(Atom.a("yieldtrue"), RestStatements))) - { - convertIndentationCSharp(Level); - YP.write(Atom.a("yield return true;")); - YP.nl(); - convertStatementListCSharp(RestStatements, Level); - return; - } - } - { - Variable RestStatements = new Variable(); - foreach (bool l2 in YP.unify(arg1, new ListPair(Atom.a("yieldfalse"), RestStatements))) - { - convertIndentationCSharp(Level); - YP.write(Atom.a("yield return false;")); - YP.nl(); - convertStatementListCSharp(RestStatements, Level); - return; - } - } - { - Variable RestStatements = new Variable(); - foreach (bool l2 in YP.unify(arg1, new ListPair(Atom.a("yieldbreak"), RestStatements))) - { - convertIndentationCSharp(Level); - YP.write(Atom.a("yield break;")); - YP.nl(); - convertStatementListCSharp(RestStatements, Level); - return; - } - } - { - Variable RestStatements = new Variable(); - foreach (bool l2 in YP.unify(arg1, new ListPair(Atom.a("return"), RestStatements))) - { - convertIndentationCSharp(Level); - YP.write(Atom.a("return;")); - YP.nl(); - convertStatementListCSharp(RestStatements, Level); - return; - } - } - { - Variable RestStatements = new Variable(); - foreach (bool l2 in YP.unify(arg1, new ListPair(Atom.a("returntrue"), RestStatements))) - { - convertIndentationCSharp(Level); - YP.write(Atom.a("return true;")); - YP.nl(); - convertStatementListCSharp(RestStatements, Level); - return; - } - } - { - Variable RestStatements = new Variable(); - foreach (bool l2 in YP.unify(arg1, new ListPair(Atom.a("returnfalse"), RestStatements))) - { - convertIndentationCSharp(Level); - YP.write(Atom.a("return false;")); - YP.nl(); - convertStatementListCSharp(RestStatements, Level); - return; - } - } - { - Variable Name = new Variable(); - Variable RestStatements = new Variable(); - foreach (bool l2 in YP.unify(arg1, new ListPair(new Functor1("label", Name), RestStatements))) - { - convertIndentationCSharp(Level); - YP.write(Name); - YP.write(Atom.a(":")); - YP.nl(); - if (YP.termEqual(RestStatements, Atom.NIL)) - { - convertIndentationCSharp(Level); - YP.write(Atom.a("{}")); - YP.nl(); - convertStatementListCSharp(RestStatements, Level); - return; - goto cutIf1; - } - convertStatementListCSharp(RestStatements, Level); - return; - cutIf1: - { } - } - } - { - Variable Name = new Variable(); - Variable RestStatements = new Variable(); - foreach (bool l2 in YP.unify(arg1, new ListPair(new Functor1("breakBlock", Name), RestStatements))) - { - convertIndentationCSharp(Level); - YP.write(Atom.a("goto ")); - YP.write(Name); - YP.write(Atom.a(";")); - YP.nl(); - convertStatementListCSharp(RestStatements, Level); - return; - } - } - { - Variable Name = new Variable(); - Variable ArgList = new Variable(); - Variable RestStatements = new Variable(); - foreach (bool l2 in YP.unify(arg1, new ListPair(new Functor2("call", Name, ArgList), RestStatements))) - { - convertIndentationCSharp(Level); - YP.write(Name); - YP.write(Atom.a("(")); - convertArgListCSharp(ArgList); - YP.write(Atom.a(");")); - YP.nl(); - convertStatementListCSharp(RestStatements, Level); - return; - } - } - { - Variable Name = new Variable(); - Variable _FunctorArgs = new Variable(); - Variable ArgList = new Variable(); - Variable RestStatements = new Variable(); - foreach (bool l2 in YP.unify(arg1, new ListPair(new Functor3("functorCall", Name, _FunctorArgs, ArgList), RestStatements))) - { - convertStatementListCSharp(new ListPair(new Functor2("call", Name, ArgList), RestStatements), Level); - return; - } - } - { - Variable Obj = new Variable(); - Variable Name = new Variable(); - Variable ArgList = new Variable(); - Variable RestStatements = new Variable(); - foreach (bool l2 in YP.unify(arg1, new ListPair(new Functor3("callMember", new Functor1("var", Obj), Name, ArgList), RestStatements))) - { - convertIndentationCSharp(Level); - YP.write(Obj); - YP.write(Atom.a(".")); - YP.write(Name); - YP.write(Atom.a("(")); - convertArgListCSharp(ArgList); - YP.write(Atom.a(");")); - YP.nl(); - convertStatementListCSharp(RestStatements, Level); - return; - } - } - { - Variable Body = new Variable(); - Variable RestStatements = new Variable(); - Variable NextLevel = new Variable(); - foreach (bool l2 in YP.unify(arg1, new ListPair(new Functor1("blockScope", Body), RestStatements))) - { - convertIndentationCSharp(Level); - YP.write(Atom.a("{")); - YP.nl(); - foreach (bool l3 in YP.unify(NextLevel, YP.add(Level, 1))) - { - convertStatementListCSharp(Body, NextLevel); - convertIndentationCSharp(Level); - YP.write(Atom.a("}")); - YP.nl(); - convertStatementListCSharp(RestStatements, Level); - return; - } - } - } - { - Variable Expression = new Variable(); - Variable Body = new Variable(); - Variable RestStatements = new Variable(); - Variable NextLevel = new Variable(); - foreach (bool l2 in YP.unify(arg1, new ListPair(new Functor2("if", Expression, Body), RestStatements))) - { - convertIndentationCSharp(Level); - YP.write(Atom.a("if (")); - convertExpressionCSharp(Expression); - YP.write(Atom.a(") {")); - YP.nl(); - foreach (bool l3 in YP.unify(NextLevel, YP.add(Level, 1))) - { - convertStatementListCSharp(Body, NextLevel); - convertIndentationCSharp(Level); - YP.write(Atom.a("}")); - YP.nl(); - convertStatementListCSharp(RestStatements, Level); - return; - } - } - } - { - Variable Expression = new Variable(); - Variable Body = new Variable(); - Variable RestStatements = new Variable(); - Variable NextLevel = new Variable(); - foreach (bool l2 in YP.unify(arg1, new ListPair(new Functor2("foreach", Expression, Body), RestStatements))) - { - convertIndentationCSharp(Level); - YP.write(Atom.a("foreach (bool l")); - YP.write(Level); - YP.write(Atom.a(" in ")); - convertExpressionCSharp(Expression); - YP.write(Atom.a(") {")); - YP.nl(); - foreach (bool l3 in YP.unify(NextLevel, YP.add(Level, 1))) - { - convertStatementListCSharp(Body, NextLevel); - convertIndentationCSharp(Level); - YP.write(Atom.a("}")); - YP.nl(); - convertStatementListCSharp(RestStatements, Level); - return; - } - } - } - { - Variable Expression = new Variable(); - Variable RestStatements = new Variable(); - foreach (bool l2 in YP.unify(arg1, new ListPair(new Functor1("throw", Expression), RestStatements))) - { - convertIndentationCSharp(Level); - YP.write(Atom.a("throw ")); - convertExpressionCSharp(Expression); - YP.write(Atom.a(";")); - YP.nl(); - convertStatementListCSharp(RestStatements, Level); - return; - } - } - } - - public static void convertIndentationCSharp(object Level) - { - { - Variable N = new Variable(); - foreach (bool l2 in YP.unify(N, YP.multiply(Level, 2))) - { - repeatWrite(Atom.a(" "), N); - return; - } - } - } - - public static void convertArgListCSharp(object arg1) - { - { - foreach (bool l2 in YP.unify(arg1, Atom.NIL)) - { - return; - } - } - { - Variable Head = new Variable(); - Variable Tail = new Variable(); - foreach (bool l2 in YP.unify(arg1, new ListPair(Head, Tail))) - { - convertExpressionCSharp(Head); - if (YP.termNotEqual(Tail, Atom.NIL)) - { - YP.write(Atom.a(", ")); - convertArgListCSharp(Tail); - return; - goto cutIf1; - } - convertArgListCSharp(Tail); - return; - cutIf1: - { } - } - } - } - - public static void convertExpressionCSharp(object arg1) - { - { - Variable X = new Variable(); - foreach (bool l2 in YP.unify(arg1, new Functor1("arg", X))) - { - YP.write(Atom.a("object ")); - YP.write(X); - return; - } - } - { - Variable Name = new Variable(); - Variable ArgList = new Variable(); - foreach (bool l2 in YP.unify(arg1, new Functor2("call", Name, ArgList))) - { - YP.write(Name); - YP.write(Atom.a("(")); - convertArgListCSharp(ArgList); - YP.write(Atom.a(")")); - return; - } - } - { - Variable Name = new Variable(); - Variable _FunctorArgs = new Variable(); - Variable ArgList = new Variable(); - foreach (bool l2 in YP.unify(arg1, new Functor3("functorCall", Name, _FunctorArgs, ArgList))) - { - convertExpressionCSharp(new Functor2("call", Name, ArgList)); - return; - } - } - { - Variable Obj = new Variable(); - Variable Name = new Variable(); - Variable ArgList = new Variable(); - foreach (bool l2 in YP.unify(arg1, new Functor3("callMember", new Functor1("var", Obj), Name, ArgList))) - { - YP.write(Obj); - YP.write(Atom.a(".")); - YP.write(Name); - YP.write(Atom.a("(")); - convertArgListCSharp(ArgList); - YP.write(Atom.a(")")); - return; - } - } - { - Variable Name = new Variable(); - Variable ArgList = new Variable(); - foreach (bool l2 in YP.unify(arg1, new Functor2("new", Name, ArgList))) - { - YP.write(Atom.a("new ")); - YP.write(Name); - YP.write(Atom.a("(")); - convertArgListCSharp(ArgList); - YP.write(Atom.a(")")); - return; - } - } - { - Variable Name = new Variable(); - foreach (bool l2 in YP.unify(arg1, new Functor1("var", Name))) - { - YP.write(Name); - return; - } - } - { - foreach (bool l2 in YP.unify(arg1, Atom.a("null"))) - { - YP.write(Atom.a("null")); - return; - } - } - { - Variable X = new Variable(); - foreach (bool l2 in YP.unify(arg1, new Functor1("not", X))) - { - YP.write(Atom.a("!(")); - convertExpressionCSharp(X); - YP.write(Atom.a(")")); - return; - } - } - { - Variable X = new Variable(); - Variable Y = new Variable(); - foreach (bool l2 in YP.unify(arg1, new Functor2("and", X, Y))) - { - YP.write(Atom.a("(")); - convertExpressionCSharp(X); - YP.write(Atom.a(") && (")); - convertExpressionCSharp(Y); - YP.write(Atom.a(")")); - return; - } - } - { - Variable ArgList = new Variable(); - foreach (bool l2 in YP.unify(arg1, new Functor1("objectArray", ArgList))) - { - YP.write(Atom.a("new object[] {")); - convertArgListCSharp(ArgList); - YP.write(Atom.a("}")); - return; - } - } - { - Variable X = new Variable(); - Variable Codes = new Variable(); - foreach (bool l2 in YP.unify(arg1, new Functor1("object", X))) - { - if (YP.atom(X)) - { - YP.write(Atom.a("\"")); - foreach (bool l4 in YP.atom_codes(X, Codes)) - { - convertStringCodesCSharp(Codes); - YP.write(Atom.a("\"")); - return; - } - } - } - } - { - Variable X = new Variable(); - foreach (bool l2 in YP.unify(arg1, new Functor1("object", X))) - { - YP.write(X); - return; - } - } - } - - public static void convertStringCodesCSharp(object arg1) - { - { - foreach (bool l2 in YP.unify(arg1, Atom.NIL)) - { - return; - } - } - { - Variable Code = new Variable(); - Variable RestCodes = new Variable(); - foreach (bool l2 in YP.unify(arg1, new ListPair(Code, RestCodes))) - { - foreach (bool l3 in putCStringCode(Code)) - { - convertStringCodesCSharp(RestCodes); - return; - } - } - } - } - - public static void convertFunctionJavascript(object arg1) - { - { - foreach (bool l2 in YP.unify(arg1, Atom.a("getDeclaringClass"))) - { - YP.write(Atom.a("function getDeclaringClass() { return null; }")); - YP.nl(); - YP.nl(); - return; - } - } - { - Variable x1 = new Variable(); - Variable Name = new Variable(); - Variable ArgList = new Variable(); - Variable Body = new Variable(); - foreach (bool l2 in YP.unify(arg1, new Functor("function", new object[] { x1, Name, ArgList, Body }))) - { - YP.write(Atom.a("function ")); - YP.write(Name); - YP.write(Atom.a("(")); - convertArgListJavascript(ArgList); - YP.write(Atom.a(") {")); - YP.nl(); - convertStatementListJavascript(Body, 1); - YP.write(Atom.a("}")); - YP.nl(); - YP.nl(); - return; - } - } - } - - public static void convertStatementListJavascript(object arg1, object arg2) - { - { - object x1 = arg2; - foreach (bool l2 in YP.unify(arg1, Atom.NIL)) - { - return; - } - } - { - object Level = arg2; - Variable Name = new Variable(); - Variable Body = new Variable(); - Variable RestStatements = new Variable(); - Variable NextLevel = new Variable(); - foreach (bool l2 in YP.unify(arg1, new ListPair(new Functor2("breakableBlock", Name, Body), RestStatements))) - { - convertIndentationJavascript(Level); - YP.write(Name); - YP.write(Atom.a(":")); - YP.nl(); - convertIndentationJavascript(Level); - YP.write(Atom.a("{")); - YP.nl(); - foreach (bool l3 in YP.unify(NextLevel, YP.add(Level, 1))) - { - convertStatementListJavascript(Body, NextLevel); - convertIndentationJavascript(Level); - YP.write(Atom.a("}")); - YP.nl(); - convertStatementListJavascript(RestStatements, Level); - return; - } - } - } - { - object Level = arg2; - Variable _Type = new Variable(); - Variable Name = new Variable(); - Variable Expression = new Variable(); - Variable RestStatements = new Variable(); - foreach (bool l2 in YP.unify(arg1, new ListPair(new Functor3("declare", _Type, Name, Expression), RestStatements))) - { - convertIndentationJavascript(Level); - YP.write(Atom.a("var ")); - YP.write(Name); - YP.write(Atom.a(" = ")); - convertExpressionJavascript(Expression); - YP.write(Atom.a(";")); - YP.nl(); - convertStatementListJavascript(RestStatements, Level); - return; - } - } - { - object Level = arg2; - Variable Name = new Variable(); - Variable Expression = new Variable(); - Variable RestStatements = new Variable(); - foreach (bool l2 in YP.unify(arg1, new ListPair(new Functor2("assign", Name, Expression), RestStatements))) - { - convertIndentationJavascript(Level); - YP.write(Name); - YP.write(Atom.a(" = ")); - convertExpressionJavascript(Expression); - YP.write(Atom.a(";")); - YP.nl(); - convertStatementListJavascript(RestStatements, Level); - return; - } - } - { - object Level = arg2; - Variable RestStatements = new Variable(); - foreach (bool l2 in YP.unify(arg1, new ListPair(Atom.a("yieldtrue"), RestStatements))) - { - convertIndentationJavascript(Level); - YP.write(Atom.a("yield true;")); - YP.nl(); - convertStatementListJavascript(RestStatements, Level); - return; - } - } - { - object Level = arg2; - Variable RestStatements = new Variable(); - foreach (bool l2 in YP.unify(arg1, new ListPair(Atom.a("yieldfalse"), RestStatements))) - { - convertIndentationJavascript(Level); - YP.write(Atom.a("yield false;")); - YP.nl(); - convertStatementListJavascript(RestStatements, Level); - return; - } - } - { - object Level = arg2; - Variable RestStatements = new Variable(); - foreach (bool l2 in YP.unify(arg1, new ListPair(Atom.a("yieldbreak"), RestStatements))) - { - convertIndentationJavascript(Level); - YP.write(Atom.a("return;")); - YP.nl(); - convertStatementListJavascript(RestStatements, Level); - return; - } - } - { - object Level = arg2; - Variable RestStatements = new Variable(); - foreach (bool l2 in YP.unify(arg1, new ListPair(Atom.a("return"), RestStatements))) - { - convertIndentationJavascript(Level); - YP.write(Atom.a("return;")); - YP.nl(); - convertStatementListJavascript(RestStatements, Level); - return; - } - } - { - object Level = arg2; - Variable RestStatements = new Variable(); - foreach (bool l2 in YP.unify(arg1, new ListPair(Atom.a("returntrue"), RestStatements))) - { - convertIndentationJavascript(Level); - YP.write(Atom.a("return true;")); - YP.nl(); - convertStatementListJavascript(RestStatements, Level); - return; - } - } - { - object Level = arg2; - Variable RestStatements = new Variable(); - foreach (bool l2 in YP.unify(arg1, new ListPair(Atom.a("returnfalse"), RestStatements))) - { - convertIndentationJavascript(Level); - YP.write(Atom.a("return false;")); - YP.nl(); - convertStatementListJavascript(RestStatements, Level); - return; - } - } - { - object Level = arg2; - Variable Name = new Variable(); - Variable RestStatements = new Variable(); - foreach (bool l2 in YP.unify(arg1, new ListPair(new Functor1("breakBlock", Name), RestStatements))) - { - convertIndentationJavascript(Level); - YP.write(Atom.a("break ")); - YP.write(Name); - YP.write(Atom.a(";")); - YP.nl(); - convertStatementListJavascript(RestStatements, Level); - return; - } - } - { - object Level = arg2; - Variable Name = new Variable(); - Variable ArgList = new Variable(); - Variable RestStatements = new Variable(); - foreach (bool l2 in YP.unify(arg1, new ListPair(new Functor2("call", Name, ArgList), RestStatements))) - { - convertIndentationJavascript(Level); - YP.write(Name); - YP.write(Atom.a("(")); - convertArgListJavascript(ArgList); - YP.write(Atom.a(");")); - YP.nl(); - convertStatementListJavascript(RestStatements, Level); - return; - } - } - { - object Level = arg2; - Variable Name = new Variable(); - Variable _FunctorArgs = new Variable(); - Variable ArgList = new Variable(); - Variable RestStatements = new Variable(); - foreach (bool l2 in YP.unify(arg1, new ListPair(new Functor3("functorCall", Name, _FunctorArgs, ArgList), RestStatements))) - { - convertStatementListJavascript(new ListPair(new Functor2("call", Name, ArgList), RestStatements), Level); - return; - } - } - { - object Level = arg2; - Variable Obj = new Variable(); - Variable Name = new Variable(); - Variable ArgList = new Variable(); - Variable RestStatements = new Variable(); - foreach (bool l2 in YP.unify(arg1, new ListPair(new Functor3("callMember", new Functor1("var", Obj), Name, ArgList), RestStatements))) - { - convertIndentationJavascript(Level); - YP.write(Obj); - YP.write(Atom.a(".")); - YP.write(Name); - YP.write(Atom.a("(")); - convertArgListJavascript(ArgList); - YP.write(Atom.a(");")); - YP.nl(); - convertStatementListJavascript(RestStatements, Level); - return; - } - } - { - object Level = arg2; - Variable Body = new Variable(); - Variable RestStatements = new Variable(); - Variable NextLevel = new Variable(); - foreach (bool l2 in YP.unify(arg1, new ListPair(new Functor1("blockScope", Body), RestStatements))) - { - convertIndentationJavascript(Level); - YP.write(Atom.a("{")); - YP.nl(); - foreach (bool l3 in YP.unify(NextLevel, YP.add(Level, 1))) - { - convertStatementListJavascript(Body, NextLevel); - convertIndentationJavascript(Level); - YP.write(Atom.a("}")); - YP.nl(); - convertStatementListJavascript(RestStatements, Level); - return; - } - } - } - { - object Level = arg2; - Variable Expression = new Variable(); - Variable Body = new Variable(); - Variable RestStatements = new Variable(); - Variable NextLevel = new Variable(); - foreach (bool l2 in YP.unify(arg1, new ListPair(new Functor2("if", Expression, Body), RestStatements))) - { - convertIndentationJavascript(Level); - YP.write(Atom.a("if (")); - convertExpressionJavascript(Expression); - YP.write(Atom.a(") {")); - YP.nl(); - foreach (bool l3 in YP.unify(NextLevel, YP.add(Level, 1))) - { - convertStatementListJavascript(Body, NextLevel); - convertIndentationJavascript(Level); - YP.write(Atom.a("}")); - YP.nl(); - convertStatementListJavascript(RestStatements, Level); - return; - } - } - } - { - object Level = arg2; - Variable Expression = new Variable(); - Variable Body = new Variable(); - Variable RestStatements = new Variable(); - Variable NextLevel = new Variable(); - foreach (bool l2 in YP.unify(arg1, new ListPair(new Functor2("foreach", Expression, Body), RestStatements))) - { - convertIndentationJavascript(Level); - YP.write(Atom.a("for each (var l")); - YP.write(Level); - YP.write(Atom.a(" in ")); - convertExpressionJavascript(Expression); - YP.write(Atom.a(") {")); - YP.nl(); - foreach (bool l3 in YP.unify(NextLevel, YP.add(Level, 1))) - { - convertStatementListJavascript(Body, NextLevel); - convertIndentationJavascript(Level); - YP.write(Atom.a("}")); - YP.nl(); - convertStatementListJavascript(RestStatements, Level); - return; - } - } - } - { - object Level = arg2; - Variable Expression = new Variable(); - Variable RestStatements = new Variable(); - foreach (bool l2 in YP.unify(arg1, new ListPair(new Functor1("throw", Expression), RestStatements))) - { - convertIndentationJavascript(Level); - YP.write(Atom.a("throw ")); - convertExpressionJavascript(Expression); - YP.write(Atom.a(";")); - YP.nl(); - convertStatementListJavascript(RestStatements, Level); - return; - } - } - } - - public static void convertIndentationJavascript(object Level) - { - { - Variable N = new Variable(); - foreach (bool l2 in YP.unify(N, YP.multiply(Level, 2))) - { - repeatWrite(Atom.a(" "), N); - return; - } - } - } - - public static void convertArgListJavascript(object arg1) - { - { - foreach (bool l2 in YP.unify(arg1, Atom.NIL)) - { - return; - } - } - { - Variable Head = new Variable(); - Variable Tail = new Variable(); - foreach (bool l2 in YP.unify(arg1, new ListPair(Head, Tail))) - { - convertExpressionJavascript(Head); - if (YP.termNotEqual(Tail, Atom.NIL)) - { - YP.write(Atom.a(", ")); - convertArgListJavascript(Tail); - return; - goto cutIf1; - } - convertArgListJavascript(Tail); - return; - cutIf1: - { } - } - } - } - - public static void convertExpressionJavascript(object arg1) - { - { - Variable X = new Variable(); - foreach (bool l2 in YP.unify(arg1, new Functor1("arg", X))) - { - YP.write(X); - return; - } - } - { - Variable Name = new Variable(); - Variable ArgList = new Variable(); - foreach (bool l2 in YP.unify(arg1, new Functor2("call", Name, ArgList))) - { - YP.write(Name); - YP.write(Atom.a("(")); - convertArgListJavascript(ArgList); - YP.write(Atom.a(")")); - return; - } - } - { - Variable Name = new Variable(); - Variable _FunctorArgs = new Variable(); - Variable ArgList = new Variable(); - foreach (bool l2 in YP.unify(arg1, new Functor3("functorCall", Name, _FunctorArgs, ArgList))) - { - convertExpressionJavascript(new Functor2("call", Name, ArgList)); - return; - } - } - { - Variable Obj = new Variable(); - Variable Name = new Variable(); - Variable ArgList = new Variable(); - foreach (bool l2 in YP.unify(arg1, new Functor3("callMember", new Functor1("var", Obj), Name, ArgList))) - { - YP.write(Obj); - YP.write(Atom.a(".")); - YP.write(Name); - YP.write(Atom.a("(")); - convertArgListJavascript(ArgList); - YP.write(Atom.a(")")); - return; - } - } - { - Variable Name = new Variable(); - Variable ArgList = new Variable(); - foreach (bool l2 in YP.unify(arg1, new Functor2("new", Name, ArgList))) - { - YP.write(Atom.a("new ")); - YP.write(Name); - YP.write(Atom.a("(")); - convertArgListJavascript(ArgList); - YP.write(Atom.a(")")); - return; - } - } - { - Variable Name = new Variable(); - foreach (bool l2 in YP.unify(arg1, new Functor1("var", Name))) - { - YP.write(Name); - return; - } - } - { - foreach (bool l2 in YP.unify(arg1, Atom.a("null"))) - { - YP.write(Atom.a("null")); - return; - } - } - { - Variable X = new Variable(); - foreach (bool l2 in YP.unify(arg1, new Functor1("not", X))) - { - YP.write(Atom.a("!(")); - convertExpressionJavascript(X); - YP.write(Atom.a(")")); - return; - } - } - { - Variable X = new Variable(); - Variable Y = new Variable(); - foreach (bool l2 in YP.unify(arg1, new Functor2("and", X, Y))) - { - YP.write(Atom.a("(")); - convertExpressionJavascript(X); - YP.write(Atom.a(") && (")); - convertExpressionJavascript(Y); - YP.write(Atom.a(")")); - return; - } - } - { - Variable ArgList = new Variable(); - foreach (bool l2 in YP.unify(arg1, new Functor1("objectArray", ArgList))) - { - YP.write(Atom.a("[")); - convertArgListJavascript(ArgList); - YP.write(Atom.a("]")); - return; - } - } - { - Variable X = new Variable(); - Variable Codes = new Variable(); - foreach (bool l2 in YP.unify(arg1, new Functor1("object", X))) - { - if (YP.atom(X)) - { - YP.write(Atom.a("\"")); - foreach (bool l4 in YP.atom_codes(X, Codes)) - { - convertStringCodesJavascript(Codes); - YP.write(Atom.a("\"")); - return; - } - } - } - } - { - Variable X = new Variable(); - foreach (bool l2 in YP.unify(arg1, new Functor1("object", X))) - { - YP.write(X); - return; - } - } - } - - public static void convertStringCodesJavascript(object arg1) - { - { - foreach (bool l2 in YP.unify(arg1, Atom.NIL)) - { - return; - } - } - { - Variable Code = new Variable(); - Variable RestCodes = new Variable(); - foreach (bool l2 in YP.unify(arg1, new ListPair(Code, RestCodes))) - { - foreach (bool l3 in putCStringCode(Code)) - { - convertStringCodesJavascript(RestCodes); - return; - } - } - } - } - - public static void convertFunctionPython(object arg1) - { - { - foreach (bool l2 in YP.unify(arg1, Atom.a("getDeclaringClass"))) - { - YP.write(Atom.a("def getDeclaringClass():")); - YP.nl(); - YP.write(Atom.a(" return None")); - YP.nl(); - YP.nl(); - return; - } - } - { - Variable x1 = new Variable(); - Variable Name = new Variable(); - Variable ArgList = new Variable(); - Variable Body = new Variable(); - Variable Level = new Variable(); - Variable HasBreakableBlock = new Variable(); - foreach (bool l2 in YP.unify(arg1, new Functor("function", new object[] { x1, Name, ArgList, Body }))) - { - YP.write(Atom.a("def ")); - YP.write(Name); - YP.write(Atom.a("(")); - convertArgListPython(ArgList); - YP.write(Atom.a("):")); - YP.nl(); - foreach (bool l3 in YP.unify(Level, 1)) - { - if (hasBreakableBlockPython(Body)) - { - foreach (bool l5 in YP.unify(HasBreakableBlock, 1)) - { - if (YP.termEqual(HasBreakableBlock, 1)) - { - convertIndentationPython(Level); - YP.write(Atom.a("doBreak = False")); - YP.nl(); - foreach (bool l7 in convertStatementListPython(Body, Level, HasBreakableBlock)) - { - YP.nl(); - return; - } - goto cutIf2; - } - foreach (bool l6 in convertStatementListPython(Body, Level, HasBreakableBlock)) - { - YP.nl(); - return; - } - cutIf2: - { } - } - goto cutIf1; - } - foreach (bool l4 in YP.unify(HasBreakableBlock, 0)) - { - if (YP.termEqual(HasBreakableBlock, 1)) - { - convertIndentationPython(Level); - YP.write(Atom.a("doBreak = False")); - YP.nl(); - foreach (bool l6 in convertStatementListPython(Body, Level, HasBreakableBlock)) - { - YP.nl(); - return; - } - goto cutIf3; - } - foreach (bool l5 in convertStatementListPython(Body, Level, HasBreakableBlock)) - { - YP.nl(); - return; - } - cutIf3: - { } - } - cutIf1: - { } - } - } - } - } - - public static bool hasBreakableBlockPython(object arg1) - { - { - Variable _Name = new Variable(); - Variable _Body = new Variable(); - Variable _RestStatements = new Variable(); - foreach (bool l2 in YP.unify(arg1, new ListPair(new Functor2("breakableBlock", _Name, _Body), _RestStatements))) - { - return true; - } - } - { - Variable Body = new Variable(); - Variable _RestStatements = new Variable(); - foreach (bool l2 in YP.unify(arg1, new ListPair(new Functor1("blockScope", Body), _RestStatements))) - { - if (hasBreakableBlockPython(Body)) - { - return true; - } - } - } - { - Variable _Expression = new Variable(); - Variable Body = new Variable(); - Variable _RestStatements = new Variable(); - foreach (bool l2 in YP.unify(arg1, new ListPair(new Functor2("if", _Expression, Body), _RestStatements))) - { - if (hasBreakableBlockPython(Body)) - { - return true; - } - } - } - { - Variable _Expression = new Variable(); - Variable Body = new Variable(); - Variable _RestStatements = new Variable(); - foreach (bool l2 in YP.unify(arg1, new ListPair(new Functor2("foreach", _Expression, Body), _RestStatements))) - { - if (hasBreakableBlockPython(Body)) - { - return true; - } - } - } - { - Variable x1 = new Variable(); - Variable RestStatements = new Variable(); - foreach (bool l2 in YP.unify(arg1, new ListPair(x1, RestStatements))) - { - if (hasBreakableBlockPython(RestStatements)) - { - return true; - } - } - } - return false; - } - - public static IEnumerable convertStatementListPython(object arg1, object arg2, object arg3) - { - { - object x1 = arg2; - object x2 = arg3; - foreach (bool l2 in YP.unify(arg1, Atom.NIL)) - { - yield return true; - yield break; - } - } - { - object Level = arg2; - object HasBreakableBlock = arg3; - Variable Name = new Variable(); - Variable Body = new Variable(); - Variable RestStatements = new Variable(); - Variable NextLevel = new Variable(); - foreach (bool l2 in YP.unify(arg1, new ListPair(new Functor2("breakableBlock", Name, Body), RestStatements))) - { - convertIndentationPython(Level); - YP.write(Name); - YP.write(Atom.a(" = False")); - YP.nl(); - convertIndentationPython(Level); - YP.write(Atom.a("for _ in [1]:")); - YP.nl(); - foreach (bool l3 in YP.unify(NextLevel, YP.add(Level, 1))) - { - foreach (bool l4 in convertStatementListPython(Body, NextLevel, HasBreakableBlock)) - { - convertIndentationPython(Level); - YP.write(Atom.a("if ")); - YP.write(Name); - YP.write(Atom.a(":")); - YP.nl(); - convertIndentationPython(NextLevel); - YP.write(Atom.a("doBreak = False")); - YP.nl(); - convertIndentationPython(Level); - YP.write(Atom.a("if doBreak:")); - YP.nl(); - convertIndentationPython(NextLevel); - YP.write(Atom.a("break")); - YP.nl(); - foreach (bool l5 in convertStatementListPython(RestStatements, Level, HasBreakableBlock)) - { - yield return true; - yield break; - } - } - } - } - } - { - object Level = arg2; - object HasBreakableBlock = arg3; - Variable _Type = new Variable(); - Variable Name = new Variable(); - Variable Expression = new Variable(); - Variable RestStatements = new Variable(); - foreach (bool l2 in YP.unify(arg1, new ListPair(new Functor3("declare", _Type, Name, Expression), RestStatements))) - { - convertIndentationPython(Level); - YP.write(Name); - YP.write(Atom.a(" = ")); - convertExpressionPython(Expression); - YP.nl(); - foreach (bool l3 in convertStatementListPython(RestStatements, Level, HasBreakableBlock)) - { - yield return true; - yield break; - } - } - } - { - object Level = arg2; - object HasBreakableBlock = arg3; - Variable Name = new Variable(); - Variable Expression = new Variable(); - Variable RestStatements = new Variable(); - foreach (bool l2 in YP.unify(arg1, new ListPair(new Functor2("assign", Name, Expression), RestStatements))) - { - convertIndentationPython(Level); - YP.write(Name); - YP.write(Atom.a(" = ")); - convertExpressionPython(Expression); - YP.nl(); - foreach (bool l3 in convertStatementListPython(RestStatements, Level, HasBreakableBlock)) - { - yield return true; - yield break; - } - } - } - { - object Level = arg2; - object HasBreakableBlock = arg3; - Variable RestStatements = new Variable(); - foreach (bool l2 in YP.unify(arg1, new ListPair(Atom.a("yieldtrue"), RestStatements))) - { - convertIndentationPython(Level); - YP.write(Atom.a("yield True")); - YP.nl(); - foreach (bool l3 in convertStatementListPython(RestStatements, Level, HasBreakableBlock)) - { - yield return true; - yield break; - } - } - } - { - object Level = arg2; - object HasBreakableBlock = arg3; - Variable RestStatements = new Variable(); - foreach (bool l2 in YP.unify(arg1, new ListPair(Atom.a("yieldfalse"), RestStatements))) - { - convertIndentationPython(Level); - YP.write(Atom.a("yield False")); - YP.nl(); - foreach (bool l3 in convertStatementListPython(RestStatements, Level, HasBreakableBlock)) - { - yield return true; - yield break; - } - } - } - { - object Level = arg2; - object HasBreakableBlock = arg3; - Variable RestStatements = new Variable(); - foreach (bool l2 in YP.unify(arg1, new ListPair(Atom.a("yieldbreak"), RestStatements))) - { - convertIndentationPython(Level); - YP.write(Atom.a("return")); - YP.nl(); - foreach (bool l3 in convertStatementListPython(RestStatements, Level, HasBreakableBlock)) - { - yield return true; - yield break; - } - } - } - { - object Level = arg2; - object HasBreakableBlock = arg3; - Variable RestStatements = new Variable(); - foreach (bool l2 in YP.unify(arg1, new ListPair(Atom.a("return"), RestStatements))) - { - convertIndentationPython(Level); - YP.write(Atom.a("return")); - YP.nl(); - foreach (bool l3 in convertStatementListPython(RestStatements, Level, HasBreakableBlock)) - { - yield return true; - yield break; - } - } - } - { - object Level = arg2; - object HasBreakableBlock = arg3; - Variable RestStatements = new Variable(); - foreach (bool l2 in YP.unify(arg1, new ListPair(Atom.a("returntrue"), RestStatements))) - { - convertIndentationPython(Level); - YP.write(Atom.a("return True")); - YP.nl(); - foreach (bool l3 in convertStatementListPython(RestStatements, Level, HasBreakableBlock)) - { - yield return true; - yield break; - } - } - } - { - object Level = arg2; - object HasBreakableBlock = arg3; - Variable RestStatements = new Variable(); - foreach (bool l2 in YP.unify(arg1, new ListPair(Atom.a("returnfalse"), RestStatements))) - { - convertIndentationPython(Level); - YP.write(Atom.a("return False")); - YP.nl(); - foreach (bool l3 in convertStatementListPython(RestStatements, Level, HasBreakableBlock)) - { - yield return true; - yield break; - } - } - } - { - object Level = arg2; - object HasBreakableBlock = arg3; - Variable Name = new Variable(); - Variable RestStatements = new Variable(); - foreach (bool l2 in YP.unify(arg1, new ListPair(new Functor1("breakBlock", Name), RestStatements))) - { - convertIndentationPython(Level); - YP.write(Name); - YP.write(Atom.a(" = True")); - YP.nl(); - convertIndentationPython(Level); - YP.write(Atom.a("doBreak = True")); - YP.nl(); - convertIndentationPython(Level); - YP.write(Atom.a("break")); - YP.nl(); - foreach (bool l3 in convertStatementListPython(RestStatements, Level, HasBreakableBlock)) - { - yield return true; - yield break; - } - } - } - { - object Level = arg2; - object HasBreakableBlock = arg3; - Variable Name = new Variable(); - Variable ArgList = new Variable(); - Variable RestStatements = new Variable(); - foreach (bool l2 in YP.unify(arg1, new ListPair(new Functor2("call", Name, ArgList), RestStatements))) - { - convertIndentationPython(Level); - YP.write(Name); - YP.write(Atom.a("(")); - convertArgListPython(ArgList); - YP.write(Atom.a(")")); - YP.nl(); - foreach (bool l3 in convertStatementListPython(RestStatements, Level, HasBreakableBlock)) - { - yield return true; - yield break; - } - } - } - { - object Level = arg2; - object HasBreakableBlock = arg3; - Variable Name = new Variable(); - Variable _FunctorArgs = new Variable(); - Variable ArgList = new Variable(); - Variable RestStatements = new Variable(); - foreach (bool l2 in YP.unify(arg1, new ListPair(new Functor3("functorCall", Name, _FunctorArgs, ArgList), RestStatements))) - { - foreach (bool l3 in convertStatementListPython(new ListPair(new Functor2("call", Name, ArgList), RestStatements), Level, HasBreakableBlock)) - { - yield return true; - yield break; - } - } - } - { - object Level = arg2; - object HasBreakableBlock = arg3; - Variable Obj = new Variable(); - Variable Name = new Variable(); - Variable ArgList = new Variable(); - Variable RestStatements = new Variable(); - foreach (bool l2 in YP.unify(arg1, new ListPair(new Functor3("callMember", new Functor1("var", Obj), Name, ArgList), RestStatements))) - { - convertIndentationPython(Level); - YP.write(Obj); - YP.write(Atom.a(".")); - YP.write(Name); - YP.write(Atom.a("(")); - convertArgListPython(ArgList); - YP.write(Atom.a(")")); - YP.nl(); - foreach (bool l3 in convertStatementListPython(RestStatements, Level, HasBreakableBlock)) - { - yield return true; - yield break; - } - } - } - { - object Level = arg2; - object HasBreakableBlock = arg3; - Variable Body = new Variable(); - Variable RestStatements = new Variable(); - Variable NextLevel = new Variable(); - foreach (bool l2 in YP.unify(arg1, new ListPair(new Functor1("blockScope", Body), RestStatements))) - { - if (YP.termEqual(HasBreakableBlock, 1)) - { - convertIndentationPython(Level); - YP.write(Atom.a("for _ in [1]:")); - YP.nl(); - foreach (bool l4 in YP.unify(NextLevel, YP.add(Level, 1))) - { - foreach (bool l5 in convertStatementListPython(Body, NextLevel, HasBreakableBlock)) - { - if (YP.termEqual(HasBreakableBlock, 1)) - { - if (YP.greaterThan(Level, 1)) - { - convertIndentationPython(Level); - YP.write(Atom.a("if doBreak:")); - YP.nl(); - convertIndentationPython(NextLevel); - YP.write(Atom.a("break")); - YP.nl(); - foreach (bool l8 in convertStatementListPython(RestStatements, Level, HasBreakableBlock)) - { - yield return true; - yield break; - } - goto cutIf3; - } - foreach (bool l7 in convertStatementListPython(RestStatements, Level, HasBreakableBlock)) - { - yield return true; - yield break; - } - cutIf3: - goto cutIf2; - } - foreach (bool l6 in convertStatementListPython(RestStatements, Level, HasBreakableBlock)) - { - yield return true; - yield break; - } - cutIf2: - { } - } - } - goto cutIf1; - } - foreach (bool l3 in YP.unify(NextLevel, Level)) - { - foreach (bool l4 in convertStatementListPython(Body, NextLevel, HasBreakableBlock)) - { - if (YP.termEqual(HasBreakableBlock, 1)) - { - if (YP.greaterThan(Level, 1)) - { - convertIndentationPython(Level); - YP.write(Atom.a("if doBreak:")); - YP.nl(); - convertIndentationPython(NextLevel); - YP.write(Atom.a("break")); - YP.nl(); - foreach (bool l7 in convertStatementListPython(RestStatements, Level, HasBreakableBlock)) - { - yield return true; - yield break; - } - goto cutIf5; - } - foreach (bool l6 in convertStatementListPython(RestStatements, Level, HasBreakableBlock)) - { - yield return true; - yield break; - } - cutIf5: - goto cutIf4; - } - foreach (bool l5 in convertStatementListPython(RestStatements, Level, HasBreakableBlock)) - { - yield return true; - yield break; - } - cutIf4: - { } - } - } - cutIf1: - { } - } - } - { - object Level = arg2; - object HasBreakableBlock = arg3; - Variable Expression = new Variable(); - Variable Body = new Variable(); - Variable RestStatements = new Variable(); - Variable NextLevel = new Variable(); - foreach (bool l2 in YP.unify(arg1, new ListPair(new Functor2("if", Expression, Body), RestStatements))) - { - convertIndentationPython(Level); - YP.write(Atom.a("if ")); - convertExpressionPython(Expression); - YP.write(Atom.a(":")); - YP.nl(); - foreach (bool l3 in YP.unify(NextLevel, YP.add(Level, 1))) - { - foreach (bool l4 in convertStatementListPython(Body, NextLevel, HasBreakableBlock)) - { - foreach (bool l5 in convertStatementListPython(RestStatements, Level, HasBreakableBlock)) - { - yield return true; - yield break; - } - } - } - } - } - { - object Level = arg2; - object HasBreakableBlock = arg3; - Variable Expression = new Variable(); - Variable Body = new Variable(); - Variable RestStatements = new Variable(); - Variable NextLevel = new Variable(); - foreach (bool l2 in YP.unify(arg1, new ListPair(new Functor2("foreach", Expression, Body), RestStatements))) - { - convertIndentationPython(Level); - YP.write(Atom.a("for l")); - YP.write(Level); - YP.write(Atom.a(" in ")); - convertExpressionPython(Expression); - YP.write(Atom.a(":")); - YP.nl(); - foreach (bool l3 in YP.unify(NextLevel, YP.add(Level, 1))) - { - foreach (bool l4 in convertStatementListPython(Body, NextLevel, HasBreakableBlock)) - { - if (YP.termEqual(HasBreakableBlock, 1)) - { - convertIndentationPython(Level); - YP.write(Atom.a("if doBreak:")); - YP.nl(); - convertIndentationPython(NextLevel); - YP.write(Atom.a("break")); - YP.nl(); - foreach (bool l6 in convertStatementListPython(RestStatements, Level, HasBreakableBlock)) - { - yield return true; - yield break; - } - goto cutIf6; - } - foreach (bool l5 in convertStatementListPython(RestStatements, Level, HasBreakableBlock)) - { - yield return true; - yield break; - } - cutIf6: - { } - } - } - } - } - { - object Level = arg2; - object HasBreakableBlock = arg3; - Variable Expression = new Variable(); - Variable RestStatements = new Variable(); - foreach (bool l2 in YP.unify(arg1, new ListPair(new Functor1("throw", Expression), RestStatements))) - { - convertIndentationPython(Level); - YP.write(Atom.a("raise ")); - convertExpressionPython(Expression); - YP.nl(); - foreach (bool l3 in convertStatementListPython(RestStatements, Level, HasBreakableBlock)) - { - yield return true; - yield break; - } - } - } - } - - public static void convertIndentationPython(object Level) - { - { - Variable N = new Variable(); - foreach (bool l2 in YP.unify(N, YP.multiply(Level, 2))) - { - repeatWrite(Atom.a(" "), N); - return; - } - } - } - - public static void convertArgListPython(object arg1) - { - { - foreach (bool l2 in YP.unify(arg1, Atom.NIL)) - { - return; - } - } - { - Variable Head = new Variable(); - Variable Tail = new Variable(); - foreach (bool l2 in YP.unify(arg1, new ListPair(Head, Tail))) - { - convertExpressionPython(Head); - if (YP.termNotEqual(Tail, Atom.NIL)) - { - YP.write(Atom.a(", ")); - convertArgListPython(Tail); - return; - goto cutIf1; - } - convertArgListPython(Tail); - return; - cutIf1: - { } - } - } - } - - public static void convertExpressionPython(object arg1) - { - { - Variable X = new Variable(); - foreach (bool l2 in YP.unify(arg1, new Functor1("arg", X))) - { - YP.write(X); - return; - } - } - { - Variable Name = new Variable(); - Variable ArgList = new Variable(); - foreach (bool l2 in YP.unify(arg1, new Functor2("call", Name, ArgList))) - { - YP.write(Name); - YP.write(Atom.a("(")); - convertArgListPython(ArgList); - YP.write(Atom.a(")")); - return; - } - } - { - Variable Name = new Variable(); - Variable _FunctorArgs = new Variable(); - Variable ArgList = new Variable(); - foreach (bool l2 in YP.unify(arg1, new Functor3("functorCall", Name, _FunctorArgs, ArgList))) - { - convertExpressionPython(new Functor2("call", Name, ArgList)); - return; - } - } - { - Variable Obj = new Variable(); - Variable Name = new Variable(); - Variable ArgList = new Variable(); - foreach (bool l2 in YP.unify(arg1, new Functor3("callMember", new Functor1("var", Obj), Name, ArgList))) - { - YP.write(Obj); - YP.write(Atom.a(".")); - YP.write(Name); - YP.write(Atom.a("(")); - convertArgListPython(ArgList); - YP.write(Atom.a(")")); - return; - } - } - { - Variable Name = new Variable(); - Variable ArgList = new Variable(); - foreach (bool l2 in YP.unify(arg1, new Functor2("new", Name, ArgList))) - { - YP.write(Name); - YP.write(Atom.a("(")); - convertArgListPython(ArgList); - YP.write(Atom.a(")")); - return; - } - } - { - Variable Name = new Variable(); - foreach (bool l2 in YP.unify(arg1, new Functor1("var", Name))) - { - YP.write(Name); - return; - } - } - { - foreach (bool l2 in YP.unify(arg1, Atom.a("null"))) - { - YP.write(Atom.a("None")); - return; - } - } - { - Variable X = new Variable(); - foreach (bool l2 in YP.unify(arg1, new Functor1("not", X))) - { - YP.write(Atom.a("not (")); - convertExpressionPython(X); - YP.write(Atom.a(")")); - return; - } - } - { - Variable X = new Variable(); - Variable Y = new Variable(); - foreach (bool l2 in YP.unify(arg1, new Functor2("and", X, Y))) - { - YP.write(Atom.a("(")); - convertExpressionPython(X); - YP.write(Atom.a(") and (")); - convertExpressionPython(Y); - YP.write(Atom.a(")")); - return; - } - } - { - Variable ArgList = new Variable(); - foreach (bool l2 in YP.unify(arg1, new Functor1("objectArray", ArgList))) - { - YP.write(Atom.a("[")); - convertArgListPython(ArgList); - YP.write(Atom.a("]")); - return; - } - } - { - Variable X = new Variable(); - Variable Codes = new Variable(); - foreach (bool l2 in YP.unify(arg1, new Functor1("object", X))) - { - if (YP.atom(X)) - { - YP.write(Atom.a("\"")); - foreach (bool l4 in YP.atom_codes(X, Codes)) - { - convertStringCodesPython(Codes); - YP.write(Atom.a("\"")); - return; - } - } - } - } - { - Variable X = new Variable(); - foreach (bool l2 in YP.unify(arg1, new Functor1("object", X))) - { - YP.write(X); - return; - } - } - } - - public static void convertStringCodesPython(object arg1) - { - { - foreach (bool l2 in YP.unify(arg1, Atom.NIL)) - { - return; - } - } - { - Variable Code = new Variable(); - Variable RestCodes = new Variable(); - foreach (bool l2 in YP.unify(arg1, new ListPair(Code, RestCodes))) - { - if (YP.termEqual(Code, 34)) - { - YP.put_code(92); - YP.put_code(Code); - convertStringCodesPython(RestCodes); - return; - goto cutIf1; - } - if (YP.termEqual(Code, 92)) - { - YP.put_code(92); - YP.put_code(Code); - convertStringCodesPython(RestCodes); - return; - goto cutIf1; - } - YP.put_code(Code); - convertStringCodesPython(RestCodes); - return; - cutIf1: - { } - } - } - } - - public static IEnumerable putCStringCode(object Code) - { - { - Variable HexDigit = new Variable(); - Variable HexChar = new Variable(); - if (YP.lessThanOrEqual(Code, 31)) - { - if (YP.lessThanOrEqual(Code, 15)) - { - YP.write(Atom.a("\\u000")); - foreach (bool l4 in YP.unify(HexDigit, Code)) - { - if (YP.lessThanOrEqual(HexDigit, 9)) - { - foreach (bool l6 in YP.unify(HexChar, YP.add(HexDigit, 48))) - { - YP.put_code(HexChar); - yield return true; - yield break; - } - goto cutIf2; - } - foreach (bool l5 in YP.unify(HexChar, YP.add(HexDigit, 55))) - { - YP.put_code(HexChar); - yield return true; - yield break; - } - cutIf2: - { } - } - goto cutIf1; - } - YP.write(Atom.a("\\u001")); - foreach (bool l3 in YP.unify(HexDigit, YP.subtract(Code, 16))) - { - if (YP.lessThanOrEqual(HexDigit, 9)) - { - foreach (bool l5 in YP.unify(HexChar, YP.add(HexDigit, 48))) - { - YP.put_code(HexChar); - yield return true; - yield break; - } - goto cutIf3; - } - foreach (bool l4 in YP.unify(HexChar, YP.add(HexDigit, 55))) - { - YP.put_code(HexChar); - yield return true; - yield break; - } - cutIf3: - { } - } - cutIf1: - { } - } - } - { - if (YP.termEqual(Code, 34)) - { - YP.put_code(92); - YP.put_code(34); - yield return true; - yield break; - } - } - { - if (YP.termEqual(Code, 92)) - { - YP.put_code(92); - YP.put_code(92); - yield return true; - yield break; - } - } - { - YP.put_code(Code); - yield return true; - yield break; - } - } - - public static IEnumerable member(object X, object arg2) - { - { - Variable x2 = new Variable(); - foreach (bool l2 in YP.unify(arg2, new ListPair(X, x2))) - { - yield return false; - } - } - { - Variable x2 = new Variable(); - Variable Rest = new Variable(); - foreach (bool l2 in YP.unify(arg2, new ListPair(x2, Rest))) - { - foreach (bool l3 in member(X, Rest)) - { - yield return false; - } - } - } - } - - public static IEnumerable append(object arg1, object arg2, object arg3) - { - { - Variable List = new Variable(); - foreach (bool l2 in YP.unify(arg1, Atom.NIL)) - { - foreach (bool l3 in YP.unify(arg2, List)) - { - foreach (bool l4 in YP.unify(arg3, List)) - { - yield return false; - } - } - } - } - { - object List2 = arg2; - Variable X = new Variable(); - Variable List1 = new Variable(); - Variable List12 = new Variable(); - foreach (bool l2 in YP.unify(arg1, new ListPair(X, List1))) - { - foreach (bool l3 in YP.unify(arg3, new ListPair(X, List12))) - { - foreach (bool l4 in append(List1, List2, List12)) - { - yield return false; - } - } - } - } - } - #pragma warning restore 0168, 0219, 0164,0162 - } -} diff --git a/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/c_sharp_example.txt b/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/c_sharp_example.txt deleted file mode 100644 index a39d1db..0000000 --- a/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/c_sharp_example.txt +++ /dev/null @@ -1,12 +0,0 @@ -//c# -namespace SecondLife { - public class Script : OpenSim.Region.ScriptEngine.DotNetEngine.Compiler.LSL.LSL_BaseClass -{ - public Script() { } - - public void default_event_state_entry( ) - { - llSay(0, "testing, I've been touched"); - } - -}} \ No newline at end of file diff --git a/OpenSim/Region/ScriptEngine/DotNetEngine/ScriptManager.cs b/OpenSim/Region/ScriptEngine/DotNetEngine/ScriptManager.cs index 32e1df1..6d8096f 100644 --- a/OpenSim/Region/ScriptEngine/DotNetEngine/ScriptManager.cs +++ b/OpenSim/Region/ScriptEngine/DotNetEngine/ScriptManager.cs @@ -39,6 +39,7 @@ using System.IO; using System.Runtime.Serialization.Formatters.Binary; using System.Threading; using OpenSim.Region.ScriptEngine.Shared.ScriptBase; +using OpenSim.Region.ScriptEngine.Shared.CodeTools; namespace OpenSim.Region.ScriptEngine.DotNetEngine { @@ -87,13 +88,10 @@ namespace OpenSim.Region.ScriptEngine.DotNetEngine Unload = 2 } - public Dictionary scriptList = - new Dictionary(); - public Dictionary> Scripts = new Dictionary>(); - private Compiler.LSL.Compiler LSLCompiler; + private Compiler LSLCompiler; public Scene World { @@ -105,7 +103,7 @@ namespace OpenSim.Region.ScriptEngine.DotNetEngine public void Initialize() { // Create our compiler - LSLCompiler = new Compiler.LSL.Compiler(m_scriptEngine); + LSLCompiler = new Compiler(m_scriptEngine); } public void _StartScript(uint localID, UUID itemID, string Script, @@ -136,23 +134,22 @@ namespace OpenSim.Region.ScriptEngine.DotNetEngine if (m_host.TaskInventory.TryGetValue(itemID, out taskInventoryItem)) assetID = taskInventoryItem.AssetID; + ScenePresence presence = + World.GetScenePresence(taskInventoryItem.OwnerID); + try { - if (scriptList.TryGetValue(assetID, out CompiledScriptFile)) - { - m_log.InfoFormat("[SCRIPT]: Found existing compile of "+ - "assetID {0}: {1}", assetID, CompiledScriptFile); - } - else - { - // Compile (We assume LSL) - CompiledScriptFile = - LSLCompiler.PerformScriptCompile(Script); + // Compile (We assume LSL) + CompiledScriptFile = + LSLCompiler.PerformScriptCompile(Script, + assetID.ToString()); - m_log.InfoFormat("[SCRIPT]: Compiled assetID {0}: {1}", - assetID, CompiledScriptFile); - scriptList.Add(assetID, CompiledScriptFile); - } + if (presence != null) + presence.ControllingClient.SendAgentAlertMessage( + "Compile successful", false); + + m_log.InfoFormat("[SCRIPT]: Compiled assetID {0}: {1}", + assetID, CompiledScriptFile); InstanceData id = new InstanceData(); @@ -201,6 +198,10 @@ namespace OpenSim.Region.ScriptEngine.DotNetEngine } catch (Exception e) // LEGIT: User Scripting { + if (presence != null) + presence.ControllingClient.SendAgentAlertMessage( + "Script saved with errors, check debug window!", + false); try { // DISPLAY ERROR INWORLD diff --git a/OpenSim/Region/ScriptEngine/Shared/CodeTools/Compiler.cs b/OpenSim/Region/ScriptEngine/Shared/CodeTools/Compiler.cs index b14e7ac..5cb6106 100644 --- a/OpenSim/Region/ScriptEngine/Shared/CodeTools/Compiler.cs +++ b/OpenSim/Region/ScriptEngine/Shared/CodeTools/Compiler.cs @@ -83,8 +83,8 @@ namespace OpenSim.Region.ScriptEngine.Shared.CodeTools // private static int instanceID = new Random().Next(0, int.MaxValue); // Unique number to use on our compiled files private static UInt64 scriptCompileCounter = 0; // And a counter - public IScriptEngine m_scriptEngine; - public Compiler(IScriptEngine scriptEngine) + public IEventReceiver m_scriptEngine; + public Compiler(IEventReceiver scriptEngine) { m_scriptEngine = scriptEngine; ReadConfig(); diff --git a/prebuild.xml b/prebuild.xml index 58a48a8..959dc00 100644 --- a/prebuild.xml +++ b/prebuild.xml @@ -1957,6 +1957,7 @@ + -- cgit v1.1