Added ternary expression

Little higher then in other languages (tired of needing to bracket when the compExpr is more then variable)

Also IT SHOULD BE TURING COMPLETE NOW
This commit is contained in:
mcDandy
2026-01-25 00:03:56 +01:00
parent 3b53a30591
commit 5d634ecaf4
17 changed files with 1323 additions and 11385 deletions
File diff suppressed because one or more lines are too long
-183
View File
@@ -1,183 +0,0 @@
SIN=1
COS=2
TAN=3
ASIN=4
ACOS=5
ATAN=6
ATAN2=7
SINH=8
COSH=9
TANH=10
ASINH=11
ACOSH=12
ATANH=13
ABS=14
SQRT=15
LN=16
LOG=17
EXP=18
SMIN=19
SMAX=20
TMIN=21
TMAX=22
TNORM=23
SNORM=24
FLOOR=25
CEIL=26
ROUND=27
GAMMA=28
POWE=29
SIGM=30
CLAMP=31
SFFT=32
SIFFT=33
ANGL=34
PRNT=35
PRINT_SHAPE=36
NVL=37
LERP=38
STEP=39
SMOOTHSTEP=40
FRACT=41
RELU=42
SOFTPLUS=43
GELU=44
SIGN=45
MAP=46
EZCONV=47
CONV=48
SWAP=49
PERM=50
RESHAPE=51
RANGE=52
TOPK=53
BOTK=54
PINV=55
SUM=56
MEAN=57
STD=58
VAR=59
QUARTILE=60
PERCENTILE=61
QUANTILE=62
DOT=63
MOMENT=64
NOISE=65
RAND=66
CAUCHY=67
EXPONENTIAL=68
LOGNORMAL=69
BERNOULLI=70
POISSON=71
COSSIM=72
FLIP=73
COV=74
SORT=75
APPEND=76
PLUS=77
MINUS=78
MULT=79
DIV=80
MOD=81
POW=82
GE=83
GT=84
LE=85
LT=86
EQ=87
EQUEALS=88
NE=89
PIPE=90
LPAREN=91
RPAREN=92
COMMA=93
SEMICOLON=94
ARROW=95
LBRACKET=96
RBRACKET=97
CONSTANT=98
NUMBER=99
VARIABLE=100
WS=101
'sin'=1
'cos'=2
'tan'=3
'asin'=4
'acos'=5
'atan'=6
'atan2'=7
'sinh'=8
'cosh'=9
'tanh'=10
'asinh'=11
'acosh'=12
'atanh'=13
'abs'=14
'sqrt'=15
'ln'=16
'log'=17
'exp'=18
'smin'=19
'smax'=20
'tmin'=21
'tmax'=22
'tnorm'=23
'snorm'=24
'floor'=25
'ceil'=26
'round'=27
'gamma'=28
'pow'=29
'sigm'=30
'clamp'=31
'fft'=32
'ifft'=33
'angle'=34
'print'=35
'lerp'=38
'step'=39
'smoothstep'=40
'fract'=41
'relu'=42
'softplus'=43
'gelu'=44
'sign'=45
'map'=46
'swap'=49
'range'=52
'topk'=53
'botk'=54
'pinv'=55
'sum'=56
'mean'=57
'std'=58
'var'=59
'quantile'=62
'dot'=63
'moment'=64
'cossim'=72
'flip'=73
'cov'=74
'sort'=75
'append'=76
'+'=77
'-'=78
'*'=79
'/'=80
'%'=81
'^'=82
'>='=83
'>'=84
'<='=85
'<'=86
'=='=87
'='=88
'!='=89
'|'=90
'('=91
')'=92
','=93
';'=94
'->'=95
'['=96
']'=97
File diff suppressed because it is too large Load Diff
File diff suppressed because one or more lines are too long
-456
View File
@@ -1,456 +0,0 @@
// Generated from d:\stability\Data\Packages\ComfyUI\custom_nodes\more_math\more_math\Parser\MathExpr.g4 by ANTLR 4.9.2
import org.antlr.v4.runtime.Lexer;
import org.antlr.v4.runtime.CharStream;
import org.antlr.v4.runtime.Token;
import org.antlr.v4.runtime.TokenStream;
import org.antlr.v4.runtime.*;
import org.antlr.v4.runtime.atn.*;
import org.antlr.v4.runtime.dfa.DFA;
import org.antlr.v4.runtime.misc.*;
@SuppressWarnings({"all", "warnings", "unchecked", "unused", "cast"})
public class MathExprLexer extends Lexer {
static { RuntimeMetaData.checkVersion("4.9.2", RuntimeMetaData.VERSION); }
protected static final DFA[] _decisionToDFA;
protected static final PredictionContextCache _sharedContextCache =
new PredictionContextCache();
public static final int
SIN=1, COS=2, TAN=3, ASIN=4, ACOS=5, ATAN=6, ATAN2=7, SINH=8, COSH=9,
TANH=10, ASINH=11, ACOSH=12, ATANH=13, ABS=14, SQRT=15, LN=16, LOG=17,
EXP=18, SMIN=19, SMAX=20, TMIN=21, TMAX=22, TNORM=23, SNORM=24, FLOOR=25,
CEIL=26, ROUND=27, GAMMA=28, POWE=29, SIGM=30, CLAMP=31, SFFT=32, SIFFT=33,
ANGL=34, PRNT=35, PRINT_SHAPE=36, NVL=37, LERP=38, STEP=39, SMOOTHSTEP=40,
FRACT=41, RELU=42, SOFTPLUS=43, GELU=44, SIGN=45, MAP=46, EZCONV=47, CONV=48,
SWAP=49, PERM=50, RESHAPE=51, RANGE=52, TOPK=53, BOTK=54, PINV=55, SUM=56,
MEAN=57, STD=58, VAR=59, QUARTILE=60, PERCENTILE=61, QUANTILE=62, DOT=63,
MOMENT=64, NOISE=65, RAND=66, CAUCHY=67, EXPONENTIAL=68, LOGNORMAL=69,
BERNOULLI=70, POISSON=71, COSSIM=72, FLIP=73, COV=74, SORT=75, APPEND=76,
PLUS=77, MINUS=78, MULT=79, DIV=80, MOD=81, POW=82, GE=83, GT=84, LE=85,
LT=86, EQ=87, EQUEALS=88, NE=89, PIPE=90, LPAREN=91, RPAREN=92, COMMA=93,
SEMICOLON=94, ARROW=95, LBRACKET=96, RBRACKET=97, CONSTANT=98, NUMBER=99,
VARIABLE=100, WS=101;
public static String[] channelNames = {
"DEFAULT_TOKEN_CHANNEL", "HIDDEN"
};
public static String[] modeNames = {
"DEFAULT_MODE"
};
private static String[] makeRuleNames() {
return new String[] {
"SIN", "COS", "TAN", "ASIN", "ACOS", "ATAN", "ATAN2", "SINH", "COSH",
"TANH", "ASINH", "ACOSH", "ATANH", "ABS", "SQRT", "LN", "LOG", "EXP",
"SMIN", "SMAX", "TMIN", "TMAX", "TNORM", "SNORM", "FLOOR", "CEIL", "ROUND",
"GAMMA", "POWE", "SIGM", "CLAMP", "SFFT", "SIFFT", "ANGL", "PRNT", "PRINT_SHAPE",
"NVL", "LERP", "STEP", "SMOOTHSTEP", "FRACT", "RELU", "SOFTPLUS", "GELU",
"SIGN", "MAP", "EZCONV", "CONV", "SWAP", "PERM", "RESHAPE", "RANGE",
"TOPK", "BOTK", "PINV", "SUM", "MEAN", "STD", "VAR", "QUARTILE", "PERCENTILE",
"QUANTILE", "DOT", "MOMENT", "NOISE", "RAND", "CAUCHY", "EXPONENTIAL",
"LOGNORMAL", "BERNOULLI", "POISSON", "COSSIM", "FLIP", "COV", "SORT",
"APPEND", "PLUS", "MINUS", "MULT", "DIV", "MOD", "POW", "GE", "GT", "LE",
"LT", "EQ", "EQUEALS", "NE", "PIPE", "LPAREN", "RPAREN", "COMMA", "SEMICOLON",
"ARROW", "LBRACKET", "RBRACKET", "CONSTANT", "NUMBER", "VARIABLE", "WS"
};
}
public static final String[] ruleNames = makeRuleNames();
private static String[] makeLiteralNames() {
return new String[] {
null, "'sin'", "'cos'", "'tan'", "'asin'", "'acos'", "'atan'", "'atan2'",
"'sinh'", "'cosh'", "'tanh'", "'asinh'", "'acosh'", "'atanh'", "'abs'",
"'sqrt'", "'ln'", "'log'", "'exp'", "'smin'", "'smax'", "'tmin'", "'tmax'",
"'tnorm'", "'snorm'", "'floor'", "'ceil'", "'round'", "'gamma'", "'pow'",
"'sigm'", "'clamp'", "'fft'", "'ifft'", "'angle'", "'print'", null, null,
"'lerp'", "'step'", "'smoothstep'", "'fract'", "'relu'", "'softplus'",
"'gelu'", "'sign'", "'map'", null, null, "'swap'", null, null, "'range'",
"'topk'", "'botk'", "'pinv'", "'sum'", "'mean'", "'std'", "'var'", null,
null, "'quantile'", "'dot'", "'moment'", null, null, null, null, null,
null, null, "'cossim'", "'flip'", "'cov'", "'sort'", "'append'", "'+'",
"'-'", "'*'", "'/'", "'%'", "'^'", "'>='", "'>'", "'<='", "'<'", "'=='",
"'='", "'!='", "'|'", "'('", "')'", "','", "';'", "'->'", "'['", "']'"
};
}
private static final String[] _LITERAL_NAMES = makeLiteralNames();
private static String[] makeSymbolicNames() {
return new String[] {
null, "SIN", "COS", "TAN", "ASIN", "ACOS", "ATAN", "ATAN2", "SINH", "COSH",
"TANH", "ASINH", "ACOSH", "ATANH", "ABS", "SQRT", "LN", "LOG", "EXP",
"SMIN", "SMAX", "TMIN", "TMAX", "TNORM", "SNORM", "FLOOR", "CEIL", "ROUND",
"GAMMA", "POWE", "SIGM", "CLAMP", "SFFT", "SIFFT", "ANGL", "PRNT", "PRINT_SHAPE",
"NVL", "LERP", "STEP", "SMOOTHSTEP", "FRACT", "RELU", "SOFTPLUS", "GELU",
"SIGN", "MAP", "EZCONV", "CONV", "SWAP", "PERM", "RESHAPE", "RANGE",
"TOPK", "BOTK", "PINV", "SUM", "MEAN", "STD", "VAR", "QUARTILE", "PERCENTILE",
"QUANTILE", "DOT", "MOMENT", "NOISE", "RAND", "CAUCHY", "EXPONENTIAL",
"LOGNORMAL", "BERNOULLI", "POISSON", "COSSIM", "FLIP", "COV", "SORT",
"APPEND", "PLUS", "MINUS", "MULT", "DIV", "MOD", "POW", "GE", "GT", "LE",
"LT", "EQ", "EQUEALS", "NE", "PIPE", "LPAREN", "RPAREN", "COMMA", "SEMICOLON",
"ARROW", "LBRACKET", "RBRACKET", "CONSTANT", "NUMBER", "VARIABLE", "WS"
};
}
private static final String[] _SYMBOLIC_NAMES = makeSymbolicNames();
public static final Vocabulary VOCABULARY = new VocabularyImpl(_LITERAL_NAMES, _SYMBOLIC_NAMES);
/**
* @deprecated Use {@link #VOCABULARY} instead.
*/
@Deprecated
public static final String[] tokenNames;
static {
tokenNames = new String[_SYMBOLIC_NAMES.length];
for (int i = 0; i < tokenNames.length; i++) {
tokenNames[i] = VOCABULARY.getLiteralName(i);
if (tokenNames[i] == null) {
tokenNames[i] = VOCABULARY.getSymbolicName(i);
}
if (tokenNames[i] == null) {
tokenNames[i] = "<INVALID>";
}
}
}
@Override
@Deprecated
public String[] getTokenNames() {
return tokenNames;
}
@Override
public Vocabulary getVocabulary() {
return VOCABULARY;
}
public MathExprLexer(CharStream input) {
super(input);
_interp = new LexerATNSimulator(this,_ATN,_decisionToDFA,_sharedContextCache);
}
@Override
public String getGrammarFileName() { return "MathExpr.g4"; }
@Override
public String[] getRuleNames() { return ruleNames; }
@Override
public String getSerializedATN() { return _serializedATN; }
@Override
public String[] getChannelNames() { return channelNames; }
@Override
public String[] getModeNames() { return modeNames; }
@Override
public ATN getATN() { return _ATN; }
public static final String _serializedATN =
"\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\2g\u0387\b\1\4\2\t"+
"\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7\t\7\4\b\t\b\4\t\t\t\4\n\t\n\4\13"+
"\t\13\4\f\t\f\4\r\t\r\4\16\t\16\4\17\t\17\4\20\t\20\4\21\t\21\4\22\t\22"+
"\4\23\t\23\4\24\t\24\4\25\t\25\4\26\t\26\4\27\t\27\4\30\t\30\4\31\t\31"+
"\4\32\t\32\4\33\t\33\4\34\t\34\4\35\t\35\4\36\t\36\4\37\t\37\4 \t \4!"+
"\t!\4\"\t\"\4#\t#\4$\t$\4%\t%\4&\t&\4\'\t\'\4(\t(\4)\t)\4*\t*\4+\t+\4"+
",\t,\4-\t-\4.\t.\4/\t/\4\60\t\60\4\61\t\61\4\62\t\62\4\63\t\63\4\64\t"+
"\64\4\65\t\65\4\66\t\66\4\67\t\67\48\t8\49\t9\4:\t:\4;\t;\4<\t<\4=\t="+
"\4>\t>\4?\t?\4@\t@\4A\tA\4B\tB\4C\tC\4D\tD\4E\tE\4F\tF\4G\tG\4H\tH\4I"+
"\tI\4J\tJ\4K\tK\4L\tL\4M\tM\4N\tN\4O\tO\4P\tP\4Q\tQ\4R\tR\4S\tS\4T\tT"+
"\4U\tU\4V\tV\4W\tW\4X\tX\4Y\tY\4Z\tZ\4[\t[\4\\\t\\\4]\t]\4^\t^\4_\t_\4"+
"`\t`\4a\ta\4b\tb\4c\tc\4d\td\4e\te\4f\tf\3\2\3\2\3\2\3\2\3\3\3\3\3\3\3"+
"\3\3\4\3\4\3\4\3\4\3\5\3\5\3\5\3\5\3\5\3\6\3\6\3\6\3\6\3\6\3\7\3\7\3\7"+
"\3\7\3\7\3\b\3\b\3\b\3\b\3\b\3\b\3\t\3\t\3\t\3\t\3\t\3\n\3\n\3\n\3\n\3"+
"\n\3\13\3\13\3\13\3\13\3\13\3\f\3\f\3\f\3\f\3\f\3\f\3\r\3\r\3\r\3\r\3"+
"\r\3\r\3\16\3\16\3\16\3\16\3\16\3\16\3\17\3\17\3\17\3\17\3\20\3\20\3\20"+
"\3\20\3\20\3\21\3\21\3\21\3\22\3\22\3\22\3\22\3\23\3\23\3\23\3\23\3\24"+
"\3\24\3\24\3\24\3\24\3\25\3\25\3\25\3\25\3\25\3\26\3\26\3\26\3\26\3\26"+
"\3\27\3\27\3\27\3\27\3\27\3\30\3\30\3\30\3\30\3\30\3\30\3\31\3\31\3\31"+
"\3\31\3\31\3\31\3\32\3\32\3\32\3\32\3\32\3\32\3\33\3\33\3\33\3\33\3\33"+
"\3\34\3\34\3\34\3\34\3\34\3\34\3\35\3\35\3\35\3\35\3\35\3\35\3\36\3\36"+
"\3\36\3\36\3\37\3\37\3\37\3\37\3\37\3 \3 \3 \3 \3 \3 \3!\3!\3!\3!\3\""+
"\3\"\3\"\3\"\3\"\3#\3#\3#\3#\3#\3#\3$\3$\3$\3$\3$\3$\3%\3%\3%\3%\3%\3"+
"%\3%\3%\3%\3%\3%\3%\3%\3%\3%\5%\u018e\n%\3&\3&\3&\3&\3&\3&\3&\3&\3&\3"+
"&\3&\3&\3&\5&\u019d\n&\3\'\3\'\3\'\3\'\3\'\3(\3(\3(\3(\3(\3)\3)\3)\3)"+
"\3)\3)\3)\3)\3)\3)\3)\3*\3*\3*\3*\3*\3*\3+\3+\3+\3+\3+\3,\3,\3,\3,\3,"+
"\3,\3,\3,\3,\3-\3-\3-\3-\3-\3.\3.\3.\3.\3.\3/\3/\3/\3/\3\60\3\60\3\60"+
"\3\60\3\60\3\60\3\60\3\60\3\60\3\60\3\60\3\60\3\60\3\60\3\60\3\60\3\60"+
"\3\60\3\60\5\60\u01e9\n\60\3\61\3\61\3\61\3\61\3\61\3\61\3\61\3\61\3\61"+
"\3\61\3\61\3\61\3\61\3\61\3\61\5\61\u01fa\n\61\3\62\3\62\3\62\3\62\3\62"+
"\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\3\63\5\63\u020c\n\63"+
"\3\64\3\64\3\64\3\64\3\64\3\64\3\64\3\64\3\64\3\64\3\64\5\64\u0219\n\64"+
"\3\65\3\65\3\65\3\65\3\65\3\65\3\66\3\66\3\66\3\66\3\66\3\67\3\67\3\67"+
"\3\67\3\67\38\38\38\38\38\39\39\39\39\3:\3:\3:\3:\3:\3;\3;\3;\3;\3<\3"+
"<\3<\3<\3=\3=\3=\3=\3=\3=\3=\3=\3=\3=\3=\3=\3=\3=\3=\5=\u0250\n=\3>\3"+
">\3>\3>\3>\3>\3>\3>\3>\3>\3>\3>\3>\3>\3>\5>\u0261\n>\3?\3?\3?\3?\3?\3"+
"?\3?\3?\3?\3@\3@\3@\3@\3A\3A\3A\3A\3A\3A\3A\3B\3B\3B\3B\3B\3B\3B\3B\3"+
"B\3B\3B\3B\3B\3B\3B\3B\3B\3B\3B\3B\3B\3B\3B\5B\u028e\nB\3C\3C\3C\3C\3"+
"C\3C\3C\3C\3C\3C\3C\3C\3C\3C\3C\3C\3C\3C\3C\3C\3C\3C\3C\5C\u02a7\nC\3"+
"D\3D\3D\3D\3D\3D\3D\3D\3D\3D\3D\3D\3D\3D\3D\3D\3D\3D\5D\u02bb\nD\3E\3"+
"E\3E\3E\3E\3E\3E\3E\3E\3E\3E\3E\3E\3E\3E\3E\3E\3E\3E\3E\3E\3E\3E\5E\u02d4"+
"\nE\3F\3F\3F\3F\3F\3F\3F\3F\3F\3F\3F\3F\3F\3F\3F\3F\3F\3F\3F\3F\3F\3F"+
"\3F\5F\u02ed\nF\3G\3G\3G\3G\3G\3G\3G\3G\3G\3G\3G\3G\3G\3G\3G\3G\3G\3G"+
"\3G\3G\3G\5G\u0304\nG\3H\3H\3H\3H\3H\3H\3H\3H\3H\3H\3H\3H\3H\3H\3H\3H"+
"\3H\3H\3H\5H\u0319\nH\3I\3I\3I\3I\3I\3I\3I\3J\3J\3J\3J\3J\3K\3K\3K\3K"+
"\3L\3L\3L\3L\3L\3M\3M\3M\3M\3M\3M\3M\3N\3N\3O\3O\3P\3P\3Q\3Q\3R\3R\3S"+
"\3S\3T\3T\3T\3U\3U\3V\3V\3V\3W\3W\3X\3X\3X\3Y\3Y\3Z\3Z\3Z\3[\3[\3\\\3"+
"\\\3]\3]\3^\3^\3_\3_\3`\3`\3`\3a\3a\3b\3b\3c\3c\3c\3c\3c\5c\u036b\nc\3"+
"d\6d\u036e\nd\rd\16d\u036f\3d\3d\6d\u0374\nd\rd\16d\u0375\5d\u0378\nd"+
"\3e\3e\7e\u037c\ne\fe\16e\u037f\13e\3f\6f\u0382\nf\rf\16f\u0383\3f\3f"+
"\2\2g\3\3\5\4\7\5\t\6\13\7\r\b\17\t\21\n\23\13\25\f\27\r\31\16\33\17\35"+
"\20\37\21!\22#\23%\24\'\25)\26+\27-\30/\31\61\32\63\33\65\34\67\359\36"+
";\37= ?!A\"C#E$G%I&K\'M(O)Q*S+U,W-Y.[/]\60_\61a\62c\63e\64g\65i\66k\67"+
"m8o9q:s;u<w=y>{?}@\177A\u0081B\u0083C\u0085D\u0087E\u0089F\u008bG\u008d"+
"H\u008fI\u0091J\u0093K\u0095L\u0097M\u0099N\u009bO\u009dP\u009fQ\u00a1"+
"R\u00a3S\u00a5T\u00a7U\u00a9V\u00abW\u00adX\u00afY\u00b1Z\u00b3[\u00b5"+
"\\\u00b7]\u00b9^\u00bb_\u00bd`\u00bfa\u00c1b\u00c3c\u00c5d\u00c7e\u00c9"+
"f\u00cbg\3\2\7\4\2GGgg\3\2\62;\5\2C\\aac|\6\2\62;C\\aac|\5\2\13\f\17\17"+
"\"\"\2\u039e\2\3\3\2\2\2\2\5\3\2\2\2\2\7\3\2\2\2\2\t\3\2\2\2\2\13\3\2"+
"\2\2\2\r\3\2\2\2\2\17\3\2\2\2\2\21\3\2\2\2\2\23\3\2\2\2\2\25\3\2\2\2\2"+
"\27\3\2\2\2\2\31\3\2\2\2\2\33\3\2\2\2\2\35\3\2\2\2\2\37\3\2\2\2\2!\3\2"+
"\2\2\2#\3\2\2\2\2%\3\2\2\2\2\'\3\2\2\2\2)\3\2\2\2\2+\3\2\2\2\2-\3\2\2"+
"\2\2/\3\2\2\2\2\61\3\2\2\2\2\63\3\2\2\2\2\65\3\2\2\2\2\67\3\2\2\2\29\3"+
"\2\2\2\2;\3\2\2\2\2=\3\2\2\2\2?\3\2\2\2\2A\3\2\2\2\2C\3\2\2\2\2E\3\2\2"+
"\2\2G\3\2\2\2\2I\3\2\2\2\2K\3\2\2\2\2M\3\2\2\2\2O\3\2\2\2\2Q\3\2\2\2\2"+
"S\3\2\2\2\2U\3\2\2\2\2W\3\2\2\2\2Y\3\2\2\2\2[\3\2\2\2\2]\3\2\2\2\2_\3"+
"\2\2\2\2a\3\2\2\2\2c\3\2\2\2\2e\3\2\2\2\2g\3\2\2\2\2i\3\2\2\2\2k\3\2\2"+
"\2\2m\3\2\2\2\2o\3\2\2\2\2q\3\2\2\2\2s\3\2\2\2\2u\3\2\2\2\2w\3\2\2\2\2"+
"y\3\2\2\2\2{\3\2\2\2\2}\3\2\2\2\2\177\3\2\2\2\2\u0081\3\2\2\2\2\u0083"+
"\3\2\2\2\2\u0085\3\2\2\2\2\u0087\3\2\2\2\2\u0089\3\2\2\2\2\u008b\3\2\2"+
"\2\2\u008d\3\2\2\2\2\u008f\3\2\2\2\2\u0091\3\2\2\2\2\u0093\3\2\2\2\2\u0095"+
"\3\2\2\2\2\u0097\3\2\2\2\2\u0099\3\2\2\2\2\u009b\3\2\2\2\2\u009d\3\2\2"+
"\2\2\u009f\3\2\2\2\2\u00a1\3\2\2\2\2\u00a3\3\2\2\2\2\u00a5\3\2\2\2\2\u00a7"+
"\3\2\2\2\2\u00a9\3\2\2\2\2\u00ab\3\2\2\2\2\u00ad\3\2\2\2\2\u00af\3\2\2"+
"\2\2\u00b1\3\2\2\2\2\u00b3\3\2\2\2\2\u00b5\3\2\2\2\2\u00b7\3\2\2\2\2\u00b9"+
"\3\2\2\2\2\u00bb\3\2\2\2\2\u00bd\3\2\2\2\2\u00bf\3\2\2\2\2\u00c1\3\2\2"+
"\2\2\u00c3\3\2\2\2\2\u00c5\3\2\2\2\2\u00c7\3\2\2\2\2\u00c9\3\2\2\2\2\u00cb"+
"\3\2\2\2\3\u00cd\3\2\2\2\5\u00d1\3\2\2\2\7\u00d5\3\2\2\2\t\u00d9\3\2\2"+
"\2\13\u00de\3\2\2\2\r\u00e3\3\2\2\2\17\u00e8\3\2\2\2\21\u00ee\3\2\2\2"+
"\23\u00f3\3\2\2\2\25\u00f8\3\2\2\2\27\u00fd\3\2\2\2\31\u0103\3\2\2\2\33"+
"\u0109\3\2\2\2\35\u010f\3\2\2\2\37\u0113\3\2\2\2!\u0118\3\2\2\2#\u011b"+
"\3\2\2\2%\u011f\3\2\2\2\'\u0123\3\2\2\2)\u0128\3\2\2\2+\u012d\3\2\2\2"+
"-\u0132\3\2\2\2/\u0137\3\2\2\2\61\u013d\3\2\2\2\63\u0143\3\2\2\2\65\u0149"+
"\3\2\2\2\67\u014e\3\2\2\29\u0154\3\2\2\2;\u015a\3\2\2\2=\u015e\3\2\2\2"+
"?\u0163\3\2\2\2A\u0169\3\2\2\2C\u016d\3\2\2\2E\u0172\3\2\2\2G\u0178\3"+
"\2\2\2I\u018d\3\2\2\2K\u019c\3\2\2\2M\u019e\3\2\2\2O\u01a3\3\2\2\2Q\u01a8"+
"\3\2\2\2S\u01b3\3\2\2\2U\u01b9\3\2\2\2W\u01be\3\2\2\2Y\u01c7\3\2\2\2["+
"\u01cc\3\2\2\2]\u01d1\3\2\2\2_\u01e8\3\2\2\2a\u01f9\3\2\2\2c\u01fb\3\2"+
"\2\2e\u020b\3\2\2\2g\u0218\3\2\2\2i\u021a\3\2\2\2k\u0220\3\2\2\2m\u0225"+
"\3\2\2\2o\u022a\3\2\2\2q\u022f\3\2\2\2s\u0233\3\2\2\2u\u0238\3\2\2\2w"+
"\u023c\3\2\2\2y\u024f\3\2\2\2{\u0260\3\2\2\2}\u0262\3\2\2\2\177\u026b"+
"\3\2\2\2\u0081\u026f\3\2\2\2\u0083\u028d\3\2\2\2\u0085\u02a6\3\2\2\2\u0087"+
"\u02ba\3\2\2\2\u0089\u02d3\3\2\2\2\u008b\u02ec\3\2\2\2\u008d\u0303\3\2"+
"\2\2\u008f\u0318\3\2\2\2\u0091\u031a\3\2\2\2\u0093\u0321\3\2\2\2\u0095"+
"\u0326\3\2\2\2\u0097\u032a\3\2\2\2\u0099\u032f\3\2\2\2\u009b\u0336\3\2"+
"\2\2\u009d\u0338\3\2\2\2\u009f\u033a\3\2\2\2\u00a1\u033c\3\2\2\2\u00a3"+
"\u033e\3\2\2\2\u00a5\u0340\3\2\2\2\u00a7\u0342\3\2\2\2\u00a9\u0345\3\2"+
"\2\2\u00ab\u0347\3\2\2\2\u00ad\u034a\3\2\2\2\u00af\u034c\3\2\2\2\u00b1"+
"\u034f\3\2\2\2\u00b3\u0351\3\2\2\2\u00b5\u0354\3\2\2\2\u00b7\u0356\3\2"+
"\2\2\u00b9\u0358\3\2\2\2\u00bb\u035a\3\2\2\2\u00bd\u035c\3\2\2\2\u00bf"+
"\u035e\3\2\2\2\u00c1\u0361\3\2\2\2\u00c3\u0363\3\2\2\2\u00c5\u036a\3\2"+
"\2\2\u00c7\u036d\3\2\2\2\u00c9\u0379\3\2\2\2\u00cb\u0381\3\2\2\2\u00cd"+
"\u00ce\7u\2\2\u00ce\u00cf\7k\2\2\u00cf\u00d0\7p\2\2\u00d0\4\3\2\2\2\u00d1"+
"\u00d2\7e\2\2\u00d2\u00d3\7q\2\2\u00d3\u00d4\7u\2\2\u00d4\6\3\2\2\2\u00d5"+
"\u00d6\7v\2\2\u00d6\u00d7\7c\2\2\u00d7\u00d8\7p\2\2\u00d8\b\3\2\2\2\u00d9"+
"\u00da\7c\2\2\u00da\u00db\7u\2\2\u00db\u00dc\7k\2\2\u00dc\u00dd\7p\2\2"+
"\u00dd\n\3\2\2\2\u00de\u00df\7c\2\2\u00df\u00e0\7e\2\2\u00e0\u00e1\7q"+
"\2\2\u00e1\u00e2\7u\2\2\u00e2\f\3\2\2\2\u00e3\u00e4\7c\2\2\u00e4\u00e5"+
"\7v\2\2\u00e5\u00e6\7c\2\2\u00e6\u00e7\7p\2\2\u00e7\16\3\2\2\2\u00e8\u00e9"+
"\7c\2\2\u00e9\u00ea\7v\2\2\u00ea\u00eb\7c\2\2\u00eb\u00ec\7p\2\2\u00ec"+
"\u00ed\7\64\2\2\u00ed\20\3\2\2\2\u00ee\u00ef\7u\2\2\u00ef\u00f0\7k\2\2"+
"\u00f0\u00f1\7p\2\2\u00f1\u00f2\7j\2\2\u00f2\22\3\2\2\2\u00f3\u00f4\7"+
"e\2\2\u00f4\u00f5\7q\2\2\u00f5\u00f6\7u\2\2\u00f6\u00f7\7j\2\2\u00f7\24"+
"\3\2\2\2\u00f8\u00f9\7v\2\2\u00f9\u00fa\7c\2\2\u00fa\u00fb\7p\2\2\u00fb"+
"\u00fc\7j\2\2\u00fc\26\3\2\2\2\u00fd\u00fe\7c\2\2\u00fe\u00ff\7u\2\2\u00ff"+
"\u0100\7k\2\2\u0100\u0101\7p\2\2\u0101\u0102\7j\2\2\u0102\30\3\2\2\2\u0103"+
"\u0104\7c\2\2\u0104\u0105\7e\2\2\u0105\u0106\7q\2\2\u0106\u0107\7u\2\2"+
"\u0107\u0108\7j\2\2\u0108\32\3\2\2\2\u0109\u010a\7c\2\2\u010a\u010b\7"+
"v\2\2\u010b\u010c\7c\2\2\u010c\u010d\7p\2\2\u010d\u010e\7j\2\2\u010e\34"+
"\3\2\2\2\u010f\u0110\7c\2\2\u0110\u0111\7d\2\2\u0111\u0112\7u\2\2\u0112"+
"\36\3\2\2\2\u0113\u0114\7u\2\2\u0114\u0115\7s\2\2\u0115\u0116\7t\2\2\u0116"+
"\u0117\7v\2\2\u0117 \3\2\2\2\u0118\u0119\7n\2\2\u0119\u011a\7p\2\2\u011a"+
"\"\3\2\2\2\u011b\u011c\7n\2\2\u011c\u011d\7q\2\2\u011d\u011e\7i\2\2\u011e"+
"$\3\2\2\2\u011f\u0120\7g\2\2\u0120\u0121\7z\2\2\u0121\u0122\7r\2\2\u0122"+
"&\3\2\2\2\u0123\u0124\7u\2\2\u0124\u0125\7o\2\2\u0125\u0126\7k\2\2\u0126"+
"\u0127\7p\2\2\u0127(\3\2\2\2\u0128\u0129\7u\2\2\u0129\u012a\7o\2\2\u012a"+
"\u012b\7c\2\2\u012b\u012c\7z\2\2\u012c*\3\2\2\2\u012d\u012e\7v\2\2\u012e"+
"\u012f\7o\2\2\u012f\u0130\7k\2\2\u0130\u0131\7p\2\2\u0131,\3\2\2\2\u0132"+
"\u0133\7v\2\2\u0133\u0134\7o\2\2\u0134\u0135\7c\2\2\u0135\u0136\7z\2\2"+
"\u0136.\3\2\2\2\u0137\u0138\7v\2\2\u0138\u0139\7p\2\2\u0139\u013a\7q\2"+
"\2\u013a\u013b\7t\2\2\u013b\u013c\7o\2\2\u013c\60\3\2\2\2\u013d\u013e"+
"\7u\2\2\u013e\u013f\7p\2\2\u013f\u0140\7q\2\2\u0140\u0141\7t\2\2\u0141"+
"\u0142\7o\2\2\u0142\62\3\2\2\2\u0143\u0144\7h\2\2\u0144\u0145\7n\2\2\u0145"+
"\u0146\7q\2\2\u0146\u0147\7q\2\2\u0147\u0148\7t\2\2\u0148\64\3\2\2\2\u0149"+
"\u014a\7e\2\2\u014a\u014b\7g\2\2\u014b\u014c\7k\2\2\u014c\u014d\7n\2\2"+
"\u014d\66\3\2\2\2\u014e\u014f\7t\2\2\u014f\u0150\7q\2\2\u0150\u0151\7"+
"w\2\2\u0151\u0152\7p\2\2\u0152\u0153\7f\2\2\u01538\3\2\2\2\u0154\u0155"+
"\7i\2\2\u0155\u0156\7c\2\2\u0156\u0157\7o\2\2\u0157\u0158\7o\2\2\u0158"+
"\u0159\7c\2\2\u0159:\3\2\2\2\u015a\u015b\7r\2\2\u015b\u015c\7q\2\2\u015c"+
"\u015d\7y\2\2\u015d<\3\2\2\2\u015e\u015f\7u\2\2\u015f\u0160\7k\2\2\u0160"+
"\u0161\7i\2\2\u0161\u0162\7o\2\2\u0162>\3\2\2\2\u0163\u0164\7e\2\2\u0164"+
"\u0165\7n\2\2\u0165\u0166\7c\2\2\u0166\u0167\7o\2\2\u0167\u0168\7r\2\2"+
"\u0168@\3\2\2\2\u0169\u016a\7h\2\2\u016a\u016b\7h\2\2\u016b\u016c\7v\2"+
"\2\u016cB\3\2\2\2\u016d\u016e\7k\2\2\u016e\u016f\7h\2\2\u016f\u0170\7"+
"h\2\2\u0170\u0171\7v\2\2\u0171D\3\2\2\2\u0172\u0173\7c\2\2\u0173\u0174"+
"\7p\2\2\u0174\u0175\7i\2\2\u0175\u0176\7n\2\2\u0176\u0177\7g\2\2\u0177"+
"F\3\2\2\2\u0178\u0179\7r\2\2\u0179\u017a\7t\2\2\u017a\u017b\7k\2\2\u017b"+
"\u017c\7p\2\2\u017c\u017d\7v\2\2\u017dH\3\2\2\2\u017e\u017f\7r\2\2\u017f"+
"\u0180\7t\2\2\u0180\u0181\7k\2\2\u0181\u0182\7p\2\2\u0182\u0183\7v\2\2"+
"\u0183\u0184\7a\2\2\u0184\u0185\7u\2\2\u0185\u0186\7j\2\2\u0186\u0187"+
"\7c\2\2\u0187\u0188\7r\2\2\u0188\u018e\7g\2\2\u0189\u018a\7r\2\2\u018a"+
"\u018b\7u\2\2\u018b\u018c\7j\2\2\u018c\u018e\7r\2\2\u018d\u017e\3\2\2"+
"\2\u018d\u0189\3\2\2\2\u018eJ\3\2\2\2\u018f\u0190\7p\2\2\u0190\u0191\7"+
"x\2\2\u0191\u019d\7n\2\2\u0192\u0193\7p\2\2\u0193\u0194\7c\2\2\u0194\u0195"+
"\7p\2\2\u0195\u0196\7a\2\2\u0196\u0197\7v\2\2\u0197\u0198\7q\2\2\u0198"+
"\u0199\7a\2\2\u0199\u019a\7p\2\2\u019a\u019b\7w\2\2\u019b\u019d\7o\2\2"+
"\u019c\u018f\3\2\2\2\u019c\u0192\3\2\2\2\u019dL\3\2\2\2\u019e\u019f\7"+
"n\2\2\u019f\u01a0\7g\2\2\u01a0\u01a1\7t\2\2\u01a1\u01a2\7r\2\2\u01a2N"+
"\3\2\2\2\u01a3\u01a4\7u\2\2\u01a4\u01a5\7v\2\2\u01a5\u01a6\7g\2\2\u01a6"+
"\u01a7\7r\2\2\u01a7P\3\2\2\2\u01a8\u01a9\7u\2\2\u01a9\u01aa\7o\2\2\u01aa"+
"\u01ab\7q\2\2\u01ab\u01ac\7q\2\2\u01ac\u01ad\7v\2\2\u01ad\u01ae\7j\2\2"+
"\u01ae\u01af\7u\2\2\u01af\u01b0\7v\2\2\u01b0\u01b1\7g\2\2\u01b1\u01b2"+
"\7r\2\2\u01b2R\3\2\2\2\u01b3\u01b4\7h\2\2\u01b4\u01b5\7t\2\2\u01b5\u01b6"+
"\7c\2\2\u01b6\u01b7\7e\2\2\u01b7\u01b8\7v\2\2\u01b8T\3\2\2\2\u01b9\u01ba"+
"\7t\2\2\u01ba\u01bb\7g\2\2\u01bb\u01bc\7n\2\2\u01bc\u01bd\7w\2\2\u01bd"+
"V\3\2\2\2\u01be\u01bf\7u\2\2\u01bf\u01c0\7q\2\2\u01c0\u01c1\7h\2\2\u01c1"+
"\u01c2\7v\2\2\u01c2\u01c3\7r\2\2\u01c3\u01c4\7n\2\2\u01c4\u01c5\7w\2\2"+
"\u01c5\u01c6\7u\2\2\u01c6X\3\2\2\2\u01c7\u01c8\7i\2\2\u01c8\u01c9\7g\2"+
"\2\u01c9\u01ca\7n\2\2\u01ca\u01cb\7w\2\2\u01cbZ\3\2\2\2\u01cc\u01cd\7"+
"u\2\2\u01cd\u01ce\7k\2\2\u01ce\u01cf\7i\2\2\u01cf\u01d0\7p\2\2\u01d0\\"+
"\3\2\2\2\u01d1\u01d2\7o\2\2\u01d2\u01d3\7c\2\2\u01d3\u01d4\7r\2\2\u01d4"+
"^\3\2\2\2\u01d5\u01d6\7g\2\2\u01d6\u01d7\7|\2\2\u01d7\u01d8\7e\2\2\u01d8"+
"\u01d9\7q\2\2\u01d9\u01da\7p\2\2\u01da\u01db\7x\2\2\u01db\u01dc\7q\2\2"+
"\u01dc\u01dd\7n\2\2\u01dd\u01de\7w\2\2\u01de\u01df\7v\2\2\u01df\u01e0"+
"\7k\2\2\u01e0\u01e1\7q\2\2\u01e1\u01e9\7p\2\2\u01e2\u01e3\7g\2\2\u01e3"+
"\u01e4\7|\2\2\u01e4\u01e5\7e\2\2\u01e5\u01e6\7q\2\2\u01e6\u01e7\7p\2\2"+
"\u01e7\u01e9\7x\2\2\u01e8\u01d5\3\2\2\2\u01e8\u01e2\3\2\2\2\u01e9`\3\2"+
"\2\2\u01ea\u01eb\7e\2\2\u01eb\u01ec\7q\2\2\u01ec\u01ed\7p\2\2\u01ed\u01ee"+
"\7x\2\2\u01ee\u01ef\7q\2\2\u01ef\u01f0\7n\2\2\u01f0\u01f1\7w\2\2\u01f1"+
"\u01f2\7v\2\2\u01f2\u01f3\7k\2\2\u01f3\u01f4\7q\2\2\u01f4\u01fa\7p\2\2"+
"\u01f5\u01f6\7e\2\2\u01f6\u01f7\7q\2\2\u01f7\u01f8\7p\2\2\u01f8\u01fa"+
"\7x\2\2\u01f9\u01ea\3\2\2\2\u01f9\u01f5\3\2\2\2\u01fab\3\2\2\2\u01fb\u01fc"+
"\7u\2\2\u01fc\u01fd\7y\2\2\u01fd\u01fe\7c\2\2\u01fe\u01ff\7r\2\2\u01ff"+
"d\3\2\2\2\u0200\u0201\7r\2\2\u0201\u0202\7g\2\2\u0202\u0203\7t\2\2\u0203"+
"\u0204\7o\2\2\u0204\u0205\7w\2\2\u0205\u0206\7v\2\2\u0206\u020c\7g\2\2"+
"\u0207\u0208\7r\2\2\u0208\u0209\7g\2\2\u0209\u020a\7t\2\2\u020a\u020c"+
"\7o\2\2\u020b\u0200\3\2\2\2\u020b\u0207\3\2\2\2\u020cf\3\2\2\2\u020d\u020e"+
"\7t\2\2\u020e\u020f\7g\2\2\u020f\u0210\7u\2\2\u0210\u0211\7j\2\2\u0211"+
"\u0212\7c\2\2\u0212\u0213\7r\2\2\u0213\u0219\7g\2\2\u0214\u0215\7t\2\2"+
"\u0215\u0216\7u\2\2\u0216\u0217\7j\2\2\u0217\u0219\7r\2\2\u0218\u020d"+
"\3\2\2\2\u0218\u0214\3\2\2\2\u0219h\3\2\2\2\u021a\u021b\7t\2\2\u021b\u021c"+
"\7c\2\2\u021c\u021d\7p\2\2\u021d\u021e\7i\2\2\u021e\u021f\7g\2\2\u021f"+
"j\3\2\2\2\u0220\u0221\7v\2\2\u0221\u0222\7q\2\2\u0222\u0223\7r\2\2\u0223"+
"\u0224\7m\2\2\u0224l\3\2\2\2\u0225\u0226\7d\2\2\u0226\u0227\7q\2\2\u0227"+
"\u0228\7v\2\2\u0228\u0229\7m\2\2\u0229n\3\2\2\2\u022a\u022b\7r\2\2\u022b"+
"\u022c\7k\2\2\u022c\u022d\7p\2\2\u022d\u022e\7x\2\2\u022ep\3\2\2\2\u022f"+
"\u0230\7u\2\2\u0230\u0231\7w\2\2\u0231\u0232\7o\2\2\u0232r\3\2\2\2\u0233"+
"\u0234\7o\2\2\u0234\u0235\7g\2\2\u0235\u0236\7c\2\2\u0236\u0237\7p\2\2"+
"\u0237t\3\2\2\2\u0238\u0239\7u\2\2\u0239\u023a\7v\2\2\u023a\u023b\7f\2"+
"\2\u023bv\3\2\2\2\u023c\u023d\7x\2\2\u023d\u023e\7c\2\2\u023e\u023f\7"+
"t\2\2\u023fx\3\2\2\2\u0240\u0241\7s\2\2\u0241\u0242\7w\2\2\u0242\u0243"+
"\7c\2\2\u0243\u0244\7t\2\2\u0244\u0245\7v\2\2\u0245\u0246\7k\2\2\u0246"+
"\u0247\7n\2\2\u0247\u0250\7g\2\2\u0248\u0249\7s\2\2\u0249\u024a\7w\2\2"+
"\u024a\u024b\7c\2\2\u024b\u024c\7t\2\2\u024c\u024d\7v\2\2\u024d\u024e"+
"\7k\2\2\u024e\u0250\7n\2\2\u024f\u0240\3\2\2\2\u024f\u0248\3\2\2\2\u0250"+
"z\3\2\2\2\u0251\u0252\7r\2\2\u0252\u0253\7g\2\2\u0253\u0254\7t\2\2\u0254"+
"\u0255\7e\2\2\u0255\u0256\7g\2\2\u0256\u0257\7p\2\2\u0257\u0258\7v\2\2"+
"\u0258\u0259\7k\2\2\u0259\u025a\7n\2\2\u025a\u0261\7g\2\2\u025b\u025c"+
"\7r\2\2\u025c\u025d\7t\2\2\u025d\u025e\7e\2\2\u025e\u025f\7p\2\2\u025f"+
"\u0261\7v\2\2\u0260\u0251\3\2\2\2\u0260\u025b\3\2\2\2\u0261|\3\2\2\2\u0262"+
"\u0263\7s\2\2\u0263\u0264\7w\2\2\u0264\u0265\7c\2\2\u0265\u0266\7p\2\2"+
"\u0266\u0267\7v\2\2\u0267\u0268\7k\2\2\u0268\u0269\7n\2\2\u0269\u026a"+
"\7g\2\2\u026a~\3\2\2\2\u026b\u026c\7f\2\2\u026c\u026d\7q\2\2\u026d\u026e"+
"\7v\2\2\u026e\u0080\3\2\2\2\u026f\u0270\7o\2\2\u0270\u0271\7q\2\2\u0271"+
"\u0272\7o\2\2\u0272\u0273\7g\2\2\u0273\u0274\7p\2\2\u0274\u0275\7v\2\2"+
"\u0275\u0082\3\2\2\2\u0276\u0277\7p\2\2\u0277\u0278\7q\2\2\u0278\u0279"+
"\7k\2\2\u0279\u027a\7u\2\2\u027a\u028e\7g\2\2\u027b\u027c\7t\2\2\u027c"+
"\u027d\7c\2\2\u027d\u027e\7p\2\2\u027e\u027f\7f\2\2\u027f\u028e\7p\2\2"+
"\u0280\u0281\7t\2\2\u0281\u0282\7c\2\2\u0282\u0283\7p\2\2\u0283\u0284"+
"\7f\2\2\u0284\u0285\7q\2\2\u0285\u0286\7o\2\2\u0286\u0287\7a\2\2\u0287"+
"\u0288\7p\2\2\u0288\u0289\7q\2\2\u0289\u028a\7t\2\2\u028a\u028b\7o\2\2"+
"\u028b\u028c\7c\2\2\u028c\u028e\7n\2\2\u028d\u0276\3\2\2\2\u028d\u027b"+
"\3\2\2\2\u028d\u0280\3\2\2\2\u028e\u0084\3\2\2\2\u028f\u0290\7t\2\2\u0290"+
"\u0291\7c\2\2\u0291\u0292\7p\2\2\u0292\u02a7\7f\2\2\u0293\u0294\7t\2\2"+
"\u0294\u0295\7c\2\2\u0295\u0296\7p\2\2\u0296\u0297\7f\2\2\u0297\u02a7"+
"\7w\2\2\u0298\u0299\7t\2\2\u0299\u029a\7c\2\2\u029a\u029b\7p\2\2\u029b"+
"\u029c\7f\2\2\u029c\u029d\7q\2\2\u029d\u029e\7o\2\2\u029e\u029f\7a\2\2"+
"\u029f\u02a0\7w\2\2\u02a0\u02a1\7p\2\2\u02a1\u02a2\7k\2\2\u02a2\u02a3"+
"\7h\2\2\u02a3\u02a4\7q\2\2\u02a4\u02a5\7t\2\2\u02a5\u02a7\7o\2\2\u02a6"+
"\u028f\3\2\2\2\u02a6\u0293\3\2\2\2\u02a6\u0298\3\2\2\2\u02a7\u0086\3\2"+
"\2\2\u02a8\u02a9\7t\2\2\u02a9\u02aa\7c\2\2\u02aa\u02ab\7p\2\2\u02ab\u02ac"+
"\7f\2\2\u02ac\u02bb\7e\2\2\u02ad\u02ae\7t\2\2\u02ae\u02af\7c\2\2\u02af"+
"\u02b0\7p\2\2\u02b0\u02b1\7f\2\2\u02b1\u02b2\7q\2\2\u02b2\u02b3\7o\2\2"+
"\u02b3\u02b4\7a\2\2\u02b4\u02b5\7e\2\2\u02b5\u02b6\7c\2\2\u02b6\u02b7"+
"\7w\2\2\u02b7\u02b8\7e\2\2\u02b8\u02b9\7j\2\2\u02b9\u02bb\7{\2\2\u02ba"+
"\u02a8\3\2\2\2\u02ba\u02ad\3\2\2\2\u02bb\u0088\3\2\2\2\u02bc\u02bd\7t"+
"\2\2\u02bd\u02be\7c\2\2\u02be\u02bf\7p\2\2\u02bf\u02c0\7f\2\2\u02c0\u02d4"+
"\7g\2\2\u02c1\u02c2\7t\2\2\u02c2\u02c3\7c\2\2\u02c3\u02c4\7p\2\2\u02c4"+
"\u02c5\7f\2\2\u02c5\u02c6\7q\2\2\u02c6\u02c7\7o\2\2\u02c7\u02c8\7a\2\2"+
"\u02c8\u02c9\7g\2\2\u02c9\u02ca\7z\2\2\u02ca\u02cb\7r\2\2\u02cb\u02cc"+
"\7q\2\2\u02cc\u02cd\7p\2\2\u02cd\u02ce\7g\2\2\u02ce\u02cf\7p\2\2\u02cf"+
"\u02d0\7v\2\2\u02d0\u02d1\7k\2\2\u02d1\u02d2\7c\2\2\u02d2\u02d4\7n\2\2"+
"\u02d3\u02bc\3\2\2\2\u02d3\u02c1\3\2\2\2\u02d4\u008a\3\2\2\2\u02d5\u02d6"+
"\7t\2\2\u02d6\u02d7\7c\2\2\u02d7\u02d8\7p\2\2\u02d8\u02d9\7f\2\2\u02d9"+
"\u02da\7n\2\2\u02da\u02ed\7p\2\2\u02db\u02dc\7t\2\2\u02dc\u02dd\7c\2\2"+
"\u02dd\u02de\7p\2\2\u02de\u02df\7f\2\2\u02df\u02e0\7q\2\2\u02e0\u02e1"+
"\7o\2\2\u02e1\u02e2\7a\2\2\u02e2\u02e3\7n\2\2\u02e3\u02e4\7q\2\2\u02e4"+
"\u02e5\7i\2\2\u02e5\u02e6\7a\2\2\u02e6\u02e7\7p\2\2\u02e7\u02e8\7q\2\2"+
"\u02e8\u02e9\7t\2\2\u02e9\u02ea\7o\2\2\u02ea\u02eb\7c\2\2\u02eb\u02ed"+
"\7n\2\2\u02ec\u02d5\3\2\2\2\u02ec\u02db\3\2\2\2\u02ed\u008c\3\2\2\2\u02ee"+
"\u02ef\7t\2\2\u02ef\u02f0\7c\2\2\u02f0\u02f1\7p\2\2\u02f1\u02f2\7f\2\2"+
"\u02f2\u0304\7d\2\2\u02f3\u02f4\7t\2\2\u02f4\u02f5\7c\2\2\u02f5\u02f6"+
"\7p\2\2\u02f6\u02f7\7f\2\2\u02f7\u02f8\7q\2\2\u02f8\u02f9\7o\2\2\u02f9"+
"\u02fa\7a\2\2\u02fa\u02fb\7d\2\2\u02fb\u02fc\7g\2\2\u02fc\u02fd\7t\2\2"+
"\u02fd\u02fe\7p\2\2\u02fe\u02ff\7q\2\2\u02ff\u0300\7w\2\2\u0300\u0301"+
"\7n\2\2\u0301\u0302\7n\2\2\u0302\u0304\7k\2\2\u0303\u02ee\3\2\2\2\u0303"+
"\u02f3\3\2\2\2\u0304\u008e\3\2\2\2\u0305\u0306\7t\2\2\u0306\u0307\7c\2"+
"\2\u0307\u0308\7p\2\2\u0308\u0309\7f\2\2\u0309\u0319\7r\2\2\u030a\u030b"+
"\7t\2\2\u030b\u030c\7c\2\2\u030c\u030d\7p\2\2\u030d\u030e\7f\2\2\u030e"+
"\u030f\7q\2\2\u030f\u0310\7o\2\2\u0310\u0311\7a\2\2\u0311\u0312\7r\2\2"+
"\u0312\u0313\7q\2\2\u0313\u0314\7k\2\2\u0314\u0315\7u\2\2\u0315\u0316"+
"\7u\2\2\u0316\u0317\7q\2\2\u0317\u0319\7p\2\2\u0318\u0305\3\2\2\2\u0318"+
"\u030a\3\2\2\2\u0319\u0090\3\2\2\2\u031a\u031b\7e\2\2\u031b\u031c\7q\2"+
"\2\u031c\u031d\7u\2\2\u031d\u031e\7u\2\2\u031e\u031f\7k\2\2\u031f\u0320"+
"\7o\2\2\u0320\u0092\3\2\2\2\u0321\u0322\7h\2\2\u0322\u0323\7n\2\2\u0323"+
"\u0324\7k\2\2\u0324\u0325\7r\2\2\u0325\u0094\3\2\2\2\u0326\u0327\7e\2"+
"\2\u0327\u0328\7q\2\2\u0328\u0329\7x\2\2\u0329\u0096\3\2\2\2\u032a\u032b"+
"\7u\2\2\u032b\u032c\7q\2\2\u032c\u032d\7t\2\2\u032d\u032e\7v\2\2\u032e"+
"\u0098\3\2\2\2\u032f\u0330\7c\2\2\u0330\u0331\7r\2\2\u0331\u0332\7r\2"+
"\2\u0332\u0333\7g\2\2\u0333\u0334\7p\2\2\u0334\u0335\7f\2\2\u0335\u009a"+
"\3\2\2\2\u0336\u0337\7-\2\2\u0337\u009c\3\2\2\2\u0338\u0339\7/\2\2\u0339"+
"\u009e\3\2\2\2\u033a\u033b\7,\2\2\u033b\u00a0\3\2\2\2\u033c\u033d\7\61"+
"\2\2\u033d\u00a2\3\2\2\2\u033e\u033f\7\'\2\2\u033f\u00a4\3\2\2\2\u0340"+
"\u0341\7`\2\2\u0341\u00a6\3\2\2\2\u0342\u0343\7@\2\2\u0343\u0344\7?\2"+
"\2\u0344\u00a8\3\2\2\2\u0345\u0346\7@\2\2\u0346\u00aa\3\2\2\2\u0347\u0348"+
"\7>\2\2\u0348\u0349\7?\2\2\u0349\u00ac\3\2\2\2\u034a\u034b\7>\2\2\u034b"+
"\u00ae\3\2\2\2\u034c\u034d\7?\2\2\u034d\u034e\7?\2\2\u034e\u00b0\3\2\2"+
"\2\u034f\u0350\7?\2\2\u0350\u00b2\3\2\2\2\u0351\u0352\7#\2\2\u0352\u0353"+
"\7?\2\2\u0353\u00b4\3\2\2\2\u0354\u0355\7~\2\2\u0355\u00b6\3\2\2\2\u0356"+
"\u0357\7*\2\2\u0357\u00b8\3\2\2\2\u0358\u0359\7+\2\2\u0359\u00ba\3\2\2"+
"\2\u035a\u035b\7.\2\2\u035b\u00bc\3\2\2\2\u035c\u035d\7=\2\2\u035d\u00be"+
"\3\2\2\2\u035e\u035f\7/\2\2\u035f\u0360\7@\2\2\u0360\u00c0\3\2\2\2\u0361"+
"\u0362\7]\2\2\u0362\u00c2\3\2\2\2\u0363\u0364\7_\2\2\u0364\u00c4\3\2\2"+
"\2\u0365\u0366\7r\2\2\u0366\u036b\7k\2\2\u0367\u0368\7R\2\2\u0368\u036b"+
"\7K\2\2\u0369\u036b\t\2\2\2\u036a\u0365\3\2\2\2\u036a\u0367\3\2\2\2\u036a"+
"\u0369\3\2\2\2\u036b\u00c6\3\2\2\2\u036c\u036e\t\3\2\2\u036d\u036c\3\2"+
"\2\2\u036e\u036f\3\2\2\2\u036f\u036d\3\2\2\2\u036f\u0370\3\2\2\2\u0370"+
"\u0377\3\2\2\2\u0371\u0373\7\60\2\2\u0372\u0374\t\3\2\2\u0373\u0372\3"+
"\2\2\2\u0374\u0375\3\2\2\2\u0375\u0373\3\2\2\2\u0375\u0376\3\2\2\2\u0376"+
"\u0378\3\2\2\2\u0377\u0371\3\2\2\2\u0377\u0378\3\2\2\2\u0378\u00c8\3\2"+
"\2\2\u0379\u037d\t\4\2\2\u037a\u037c\t\5\2\2\u037b\u037a\3\2\2\2\u037c"+
"\u037f\3\2\2\2\u037d\u037b\3\2\2\2\u037d\u037e\3\2\2\2\u037e\u00ca\3\2"+
"\2\2\u037f\u037d\3\2\2\2\u0380\u0382\t\6\2\2\u0381\u0380\3\2\2\2\u0382"+
"\u0383\3\2\2\2\u0383\u0381\3\2\2\2\u0383\u0384\3\2\2\2\u0384\u0385\3\2"+
"\2\2\u0385\u0386\bf\2\2\u0386\u00cc\3\2\2\2\30\2\u018d\u019c\u01e8\u01f9"+
"\u020b\u0218\u024f\u0260\u028d\u02a6\u02ba\u02d3\u02ec\u0303\u0318\u036a"+
"\u036f\u0375\u0377\u037d\u0383\3\b\2\2";
public static final ATN _ATN =
new ATNDeserializer().deserialize(_serializedATN.toCharArray());
static {
_decisionToDFA = new DFA[_ATN.getNumberOfDecisions()];
for (int i = 0; i < _ATN.getNumberOfDecisions(); i++) {
_decisionToDFA[i] = new DFA(_ATN.getDecisionState(i), i);
}
}
}
@@ -1,183 +0,0 @@
SIN=1
COS=2
TAN=3
ASIN=4
ACOS=5
ATAN=6
ATAN2=7
SINH=8
COSH=9
TANH=10
ASINH=11
ACOSH=12
ATANH=13
ABS=14
SQRT=15
LN=16
LOG=17
EXP=18
SMIN=19
SMAX=20
TMIN=21
TMAX=22
TNORM=23
SNORM=24
FLOOR=25
CEIL=26
ROUND=27
GAMMA=28
POWE=29
SIGM=30
CLAMP=31
SFFT=32
SIFFT=33
ANGL=34
PRNT=35
PRINT_SHAPE=36
NVL=37
LERP=38
STEP=39
SMOOTHSTEP=40
FRACT=41
RELU=42
SOFTPLUS=43
GELU=44
SIGN=45
MAP=46
EZCONV=47
CONV=48
SWAP=49
PERM=50
RESHAPE=51
RANGE=52
TOPK=53
BOTK=54
PINV=55
SUM=56
MEAN=57
STD=58
VAR=59
QUARTILE=60
PERCENTILE=61
QUANTILE=62
DOT=63
MOMENT=64
NOISE=65
RAND=66
CAUCHY=67
EXPONENTIAL=68
LOGNORMAL=69
BERNOULLI=70
POISSON=71
COSSIM=72
FLIP=73
COV=74
SORT=75
APPEND=76
PLUS=77
MINUS=78
MULT=79
DIV=80
MOD=81
POW=82
GE=83
GT=84
LE=85
LT=86
EQ=87
EQUEALS=88
NE=89
PIPE=90
LPAREN=91
RPAREN=92
COMMA=93
SEMICOLON=94
ARROW=95
LBRACKET=96
RBRACKET=97
CONSTANT=98
NUMBER=99
VARIABLE=100
WS=101
'sin'=1
'cos'=2
'tan'=3
'asin'=4
'acos'=5
'atan'=6
'atan2'=7
'sinh'=8
'cosh'=9
'tanh'=10
'asinh'=11
'acosh'=12
'atanh'=13
'abs'=14
'sqrt'=15
'ln'=16
'log'=17
'exp'=18
'smin'=19
'smax'=20
'tmin'=21
'tmax'=22
'tnorm'=23
'snorm'=24
'floor'=25
'ceil'=26
'round'=27
'gamma'=28
'pow'=29
'sigm'=30
'clamp'=31
'fft'=32
'ifft'=33
'angle'=34
'print'=35
'lerp'=38
'step'=39
'smoothstep'=40
'fract'=41
'relu'=42
'softplus'=43
'gelu'=44
'sign'=45
'map'=46
'swap'=49
'range'=52
'topk'=53
'botk'=54
'pinv'=55
'sum'=56
'mean'=57
'std'=58
'var'=59
'quantile'=62
'dot'=63
'moment'=64
'cossim'=72
'flip'=73
'cov'=74
'sort'=75
'append'=76
'+'=77
'-'=78
'*'=79
'/'=80
'%'=81
'^'=82
'>='=83
'>'=84
'<='=85
'<'=86
'=='=87
'='=88
'!='=89
'|'=90
'('=91
')'=92
','=93
';'=94
'->'=95
'['=96
']'=97
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
+8 -5
View File
@@ -6,12 +6,13 @@ start: funcDef* varDef* expr EOF;
funcDef:
VARIABLE LPAREN paramList? RPAREN ARROW expr SEMICOLON # FunctionDef;
varDef:
VARIABLE EQUEALS expr SEMICOLON ;
varDef: VARIABLE EQUEALS expr SEMICOLON;
paramList: VARIABLE (COMMA VARIABLE)*;
expr: atom | compExpr;
expr: ternaryExpr | atom | compExpr;
ternaryExpr: compExpr QUESTION expr COLON expr # TernaryExp;
compExpr:
compExpr GT addExpr # GtExp
@@ -137,8 +138,8 @@ func3:
| LOGNORMAL LPAREN expr COMMA expr COMMA expr RPAREN # LogNormalFunc;
func4:
SWAP LPAREN expr COMMA expr COMMA expr COMMA expr RPAREN # SwapFunc
| NVL LPAREN expr COMMA expr COMMA expr COMMA expr RPAREN # NvlFunc;
SWAP LPAREN expr COMMA expr COMMA expr COMMA expr RPAREN # SwapFunc
| NVL LPAREN expr COMMA expr COMMA expr COMMA expr RPAREN # NvlFunc;
// N-argument functions
funcN:
@@ -253,6 +254,8 @@ SEMICOLON: ';';
ARROW: '->';
LBRACKET: '[';
RBRACKET: ']';
QUESTION: '?';
COLON: ':';
CONSTANT: ('pi' | 'PI' | 'e' | 'E');
NUMBER: [0-9]+ ('.' [0-9]+)?;
File diff suppressed because one or more lines are too long
+8 -4
View File
@@ -95,10 +95,12 @@ SEMICOLON=94
ARROW=95
LBRACKET=96
RBRACKET=97
CONSTANT=98
NUMBER=99
VARIABLE=100
WS=101
QUESTION=98
COLON=99
CONSTANT=100
NUMBER=101
VARIABLE=102
WS=103
'sin'=1
'cos'=2
'tan'=3
@@ -181,3 +183,5 @@ WS=101
'->'=95
'['=96
']'=97
'?'=98
':'=99
File diff suppressed because one or more lines are too long
+321 -315
View File
@@ -10,7 +10,7 @@ else:
def serializedATN():
return [
4,0,101,901,6,-1,2,0,7,0,2,1,7,1,2,2,7,2,2,3,7,3,2,4,7,4,2,5,7,5,
4,0,103,909,6,-1,2,0,7,0,2,1,7,1,2,2,7,2,2,3,7,3,2,4,7,4,2,5,7,5,
2,6,7,6,2,7,7,7,2,8,7,8,2,9,7,9,2,10,7,10,2,11,7,11,2,12,7,12,2,
13,7,13,2,14,7,14,2,15,7,15,2,16,7,16,2,17,7,17,2,18,7,18,2,19,7,
19,2,20,7,20,2,21,7,21,2,22,7,22,2,23,7,23,2,24,7,24,2,25,7,25,2,
@@ -25,313 +25,316 @@ def serializedATN():
78,7,78,2,79,7,79,2,80,7,80,2,81,7,81,2,82,7,82,2,83,7,83,2,84,7,
84,2,85,7,85,2,86,7,86,2,87,7,87,2,88,7,88,2,89,7,89,2,90,7,90,2,
91,7,91,2,92,7,92,2,93,7,93,2,94,7,94,2,95,7,95,2,96,7,96,2,97,7,
97,2,98,7,98,2,99,7,99,2,100,7,100,1,0,1,0,1,0,1,0,1,1,1,1,1,1,1,
1,1,2,1,2,1,2,1,2,1,3,1,3,1,3,1,3,1,3,1,4,1,4,1,4,1,4,1,4,1,5,1,
5,1,5,1,5,1,5,1,6,1,6,1,6,1,6,1,6,1,6,1,7,1,7,1,7,1,7,1,7,1,8,1,
8,1,8,1,8,1,8,1,9,1,9,1,9,1,9,1,9,1,10,1,10,1,10,1,10,1,10,1,10,
1,11,1,11,1,11,1,11,1,11,1,11,1,12,1,12,1,12,1,12,1,12,1,12,1,13,
1,13,1,13,1,13,1,14,1,14,1,14,1,14,1,14,1,15,1,15,1,15,1,16,1,16,
1,16,1,16,1,17,1,17,1,17,1,17,1,18,1,18,1,18,1,18,1,18,1,19,1,19,
1,19,1,19,1,19,1,20,1,20,1,20,1,20,1,20,1,21,1,21,1,21,1,21,1,21,
1,22,1,22,1,22,1,22,1,22,1,22,1,23,1,23,1,23,1,23,1,23,1,23,1,24,
1,24,1,24,1,24,1,24,1,24,1,25,1,25,1,25,1,25,1,25,1,26,1,26,1,26,
1,26,1,26,1,26,1,27,1,27,1,27,1,27,1,27,1,27,1,28,1,28,1,28,1,28,
1,29,1,29,1,29,1,29,1,29,1,30,1,30,1,30,1,30,1,30,1,30,1,31,1,31,
1,31,1,31,1,32,1,32,1,32,1,32,1,32,1,33,1,33,1,33,1,33,1,33,1,33,
1,34,1,34,1,34,1,34,1,34,1,34,1,35,1,35,1,35,1,35,1,35,1,35,1,35,
1,35,1,35,1,35,1,35,1,35,1,35,1,35,1,35,3,35,396,8,35,1,36,1,36,
1,36,1,36,1,36,1,36,1,36,1,36,1,36,1,36,1,36,1,36,1,36,3,36,411,
8,36,1,37,1,37,1,37,1,37,1,37,1,38,1,38,1,38,1,38,1,38,1,39,1,39,
1,39,1,39,1,39,1,39,1,39,1,39,1,39,1,39,1,39,1,40,1,40,1,40,1,40,
1,40,1,40,1,41,1,41,1,41,1,41,1,41,1,42,1,42,1,42,1,42,1,42,1,42,
1,42,1,42,1,42,1,43,1,43,1,43,1,43,1,43,1,44,1,44,1,44,1,44,1,44,
1,45,1,45,1,45,1,45,1,46,1,46,1,46,1,46,1,46,1,46,1,46,1,46,1,46,
1,46,1,46,1,46,1,46,1,46,1,46,1,46,1,46,1,46,1,46,3,46,487,8,46,
1,47,1,47,1,47,1,47,1,47,1,47,1,47,1,47,1,47,1,47,1,47,1,47,1,47,
1,47,1,47,3,47,504,8,47,1,48,1,48,1,48,1,48,1,48,1,49,1,49,1,49,
1,49,1,49,1,49,1,49,1,49,1,49,1,49,1,49,3,49,522,8,49,1,50,1,50,
1,50,1,50,1,50,1,50,1,50,1,50,1,50,1,50,1,50,3,50,535,8,50,1,51,
1,51,1,51,1,51,1,51,1,51,1,52,1,52,1,52,1,52,1,52,1,53,1,53,1,53,
1,53,1,53,1,54,1,54,1,54,1,54,1,54,1,55,1,55,1,55,1,55,1,56,1,56,
1,56,1,56,1,56,1,57,1,57,1,57,1,57,1,58,1,58,1,58,1,58,1,59,1,59,
1,59,1,59,1,59,1,59,1,59,1,59,1,59,1,59,1,59,1,59,1,59,1,59,1,59,
3,59,590,8,59,1,60,1,60,1,60,1,60,1,60,1,60,1,60,1,60,1,60,1,60,
1,60,1,60,1,60,1,60,1,60,3,60,607,8,60,1,61,1,61,1,61,1,61,1,61,
1,61,1,61,1,61,1,61,1,62,1,62,1,62,1,62,1,63,1,63,1,63,1,63,1,63,
1,63,1,63,1,64,1,64,1,64,1,64,1,64,1,64,1,64,1,64,1,64,1,64,1,64,
1,64,1,64,1,64,1,64,1,64,1,64,1,64,1,64,1,64,1,64,1,64,1,64,3,64,
652,8,64,1,65,1,65,1,65,1,65,1,65,1,65,1,65,1,65,1,65,1,65,1,65,
1,65,1,65,1,65,1,65,1,65,1,65,1,65,1,65,1,65,1,65,1,65,1,65,3,65,
677,8,65,1,66,1,66,1,66,1,66,1,66,1,66,1,66,1,66,1,66,1,66,1,66,
1,66,1,66,1,66,1,66,1,66,1,66,1,66,3,66,697,8,66,1,67,1,67,1,67,
1,67,1,67,1,67,1,67,1,67,1,67,1,67,1,67,1,67,1,67,1,67,1,67,1,67,
1,67,1,67,1,67,1,67,1,67,1,67,1,67,3,67,722,8,67,1,68,1,68,1,68,
1,68,1,68,1,68,1,68,1,68,1,68,1,68,1,68,1,68,1,68,1,68,1,68,1,68,
1,68,1,68,1,68,1,68,1,68,1,68,1,68,3,68,747,8,68,1,69,1,69,1,69,
1,69,1,69,1,69,1,69,1,69,1,69,1,69,1,69,1,69,1,69,1,69,1,69,1,69,
1,69,1,69,1,69,1,69,1,69,3,69,770,8,69,1,70,1,70,1,70,1,70,1,70,
97,2,98,7,98,2,99,7,99,2,100,7,100,2,101,7,101,2,102,7,102,1,0,1,
0,1,0,1,0,1,1,1,1,1,1,1,1,1,2,1,2,1,2,1,2,1,3,1,3,1,3,1,3,1,3,1,
4,1,4,1,4,1,4,1,4,1,5,1,5,1,5,1,5,1,5,1,6,1,6,1,6,1,6,1,6,1,6,1,
7,1,7,1,7,1,7,1,7,1,8,1,8,1,8,1,8,1,8,1,9,1,9,1,9,1,9,1,9,1,10,1,
10,1,10,1,10,1,10,1,10,1,11,1,11,1,11,1,11,1,11,1,11,1,12,1,12,1,
12,1,12,1,12,1,12,1,13,1,13,1,13,1,13,1,14,1,14,1,14,1,14,1,14,1,
15,1,15,1,15,1,16,1,16,1,16,1,16,1,17,1,17,1,17,1,17,1,18,1,18,1,
18,1,18,1,18,1,19,1,19,1,19,1,19,1,19,1,20,1,20,1,20,1,20,1,20,1,
21,1,21,1,21,1,21,1,21,1,22,1,22,1,22,1,22,1,22,1,22,1,23,1,23,1,
23,1,23,1,23,1,23,1,24,1,24,1,24,1,24,1,24,1,24,1,25,1,25,1,25,1,
25,1,25,1,26,1,26,1,26,1,26,1,26,1,26,1,27,1,27,1,27,1,27,1,27,1,
27,1,28,1,28,1,28,1,28,1,29,1,29,1,29,1,29,1,29,1,30,1,30,1,30,1,
30,1,30,1,30,1,31,1,31,1,31,1,31,1,32,1,32,1,32,1,32,1,32,1,33,1,
33,1,33,1,33,1,33,1,33,1,34,1,34,1,34,1,34,1,34,1,34,1,35,1,35,1,
35,1,35,1,35,1,35,1,35,1,35,1,35,1,35,1,35,1,35,1,35,1,35,1,35,3,
35,400,8,35,1,36,1,36,1,36,1,36,1,36,1,36,1,36,1,36,1,36,1,36,1,
36,1,36,1,36,3,36,415,8,36,1,37,1,37,1,37,1,37,1,37,1,38,1,38,1,
38,1,38,1,38,1,39,1,39,1,39,1,39,1,39,1,39,1,39,1,39,1,39,1,39,1,
39,1,40,1,40,1,40,1,40,1,40,1,40,1,41,1,41,1,41,1,41,1,41,1,42,1,
42,1,42,1,42,1,42,1,42,1,42,1,42,1,42,1,43,1,43,1,43,1,43,1,43,1,
44,1,44,1,44,1,44,1,44,1,45,1,45,1,45,1,45,1,46,1,46,1,46,1,46,1,
46,1,46,1,46,1,46,1,46,1,46,1,46,1,46,1,46,1,46,1,46,1,46,1,46,1,
46,1,46,3,46,491,8,46,1,47,1,47,1,47,1,47,1,47,1,47,1,47,1,47,1,
47,1,47,1,47,1,47,1,47,1,47,1,47,3,47,508,8,47,1,48,1,48,1,48,1,
48,1,48,1,49,1,49,1,49,1,49,1,49,1,49,1,49,1,49,1,49,1,49,1,49,3,
49,526,8,49,1,50,1,50,1,50,1,50,1,50,1,50,1,50,1,50,1,50,1,50,1,
50,3,50,539,8,50,1,51,1,51,1,51,1,51,1,51,1,51,1,52,1,52,1,52,1,
52,1,52,1,53,1,53,1,53,1,53,1,53,1,54,1,54,1,54,1,54,1,54,1,55,1,
55,1,55,1,55,1,56,1,56,1,56,1,56,1,56,1,57,1,57,1,57,1,57,1,58,1,
58,1,58,1,58,1,59,1,59,1,59,1,59,1,59,1,59,1,59,1,59,1,59,1,59,1,
59,1,59,1,59,1,59,1,59,3,59,594,8,59,1,60,1,60,1,60,1,60,1,60,1,
60,1,60,1,60,1,60,1,60,1,60,1,60,1,60,1,60,1,60,3,60,611,8,60,1,
61,1,61,1,61,1,61,1,61,1,61,1,61,1,61,1,61,1,62,1,62,1,62,1,62,1,
63,1,63,1,63,1,63,1,63,1,63,1,63,1,64,1,64,1,64,1,64,1,64,1,64,1,
64,1,64,1,64,1,64,1,64,1,64,1,64,1,64,1,64,1,64,1,64,1,64,1,64,1,
64,1,64,1,64,1,64,3,64,656,8,64,1,65,1,65,1,65,1,65,1,65,1,65,1,
65,1,65,1,65,1,65,1,65,1,65,1,65,1,65,1,65,1,65,1,65,1,65,1,65,1,
65,1,65,1,65,1,65,3,65,681,8,65,1,66,1,66,1,66,1,66,1,66,1,66,1,
66,1,66,1,66,1,66,1,66,1,66,1,66,1,66,1,66,1,66,1,66,1,66,3,66,701,
8,66,1,67,1,67,1,67,1,67,1,67,1,67,1,67,1,67,1,67,1,67,1,67,1,67,
1,67,1,67,1,67,1,67,1,67,1,67,1,67,1,67,1,67,1,67,1,67,3,67,726,
8,67,1,68,1,68,1,68,1,68,1,68,1,68,1,68,1,68,1,68,1,68,1,68,1,68,
1,68,1,68,1,68,1,68,1,68,1,68,1,68,1,68,1,68,1,68,1,68,3,68,751,
8,68,1,69,1,69,1,69,1,69,1,69,1,69,1,69,1,69,1,69,1,69,1,69,1,69,
1,69,1,69,1,69,1,69,1,69,1,69,1,69,1,69,1,69,3,69,774,8,69,1,70,
1,70,1,70,1,70,1,70,1,70,1,70,1,70,1,70,1,70,1,70,1,70,1,70,1,70,
1,70,3,70,791,8,70,1,71,1,71,1,71,1,71,1,71,1,71,1,71,1,72,1,72,
1,72,1,72,1,72,1,73,1,73,1,73,1,73,1,74,1,74,1,74,1,74,1,74,1,75,
1,75,1,75,1,75,1,75,1,75,1,75,1,76,1,76,1,77,1,77,1,78,1,78,1,79,
1,79,1,80,1,80,1,81,1,81,1,82,1,82,1,82,1,83,1,83,1,84,1,84,1,84,
1,85,1,85,1,86,1,86,1,86,1,87,1,87,1,88,1,88,1,88,1,89,1,89,1,90,
1,90,1,91,1,91,1,92,1,92,1,93,1,93,1,94,1,94,1,94,1,95,1,95,1,96,
1,96,1,97,1,97,1,97,1,97,1,97,3,97,873,8,97,1,98,4,98,876,8,98,11,
98,12,98,877,1,98,1,98,4,98,882,8,98,11,98,12,98,883,3,98,886,8,
98,1,99,1,99,5,99,890,8,99,10,99,12,99,893,9,99,1,100,4,100,896,
8,100,11,100,12,100,897,1,100,1,100,0,0,101,1,1,3,2,5,3,7,4,9,5,
11,6,13,7,15,8,17,9,19,10,21,11,23,12,25,13,27,14,29,15,31,16,33,
17,35,18,37,19,39,20,41,21,43,22,45,23,47,24,49,25,51,26,53,27,55,
28,57,29,59,30,61,31,63,32,65,33,67,34,69,35,71,36,73,37,75,38,77,
39,79,40,81,41,83,42,85,43,87,44,89,45,91,46,93,47,95,48,97,49,99,
50,101,51,103,52,105,53,107,54,109,55,111,56,113,57,115,58,117,59,
119,60,121,61,123,62,125,63,127,64,129,65,131,66,133,67,135,68,137,
69,139,70,141,71,143,72,145,73,147,74,149,75,151,76,153,77,155,78,
157,79,159,80,161,81,163,82,165,83,167,84,169,85,171,86,173,87,175,
88,177,89,179,90,181,91,183,92,185,93,187,94,189,95,191,96,193,97,
195,98,197,99,199,100,201,101,1,0,5,2,0,69,69,101,101,1,0,48,57,
3,0,65,90,95,95,97,122,4,0,48,57,65,90,95,95,97,122,3,0,9,10,13,
13,32,32,924,0,1,1,0,0,0,0,3,1,0,0,0,0,5,1,0,0,0,0,7,1,0,0,0,0,9,
1,0,0,0,0,11,1,0,0,0,0,13,1,0,0,0,0,15,1,0,0,0,0,17,1,0,0,0,0,19,
1,0,0,0,0,21,1,0,0,0,0,23,1,0,0,0,0,25,1,0,0,0,0,27,1,0,0,0,0,29,
1,0,0,0,0,31,1,0,0,0,0,33,1,0,0,0,0,35,1,0,0,0,0,37,1,0,0,0,0,39,
1,0,0,0,0,41,1,0,0,0,0,43,1,0,0,0,0,45,1,0,0,0,0,47,1,0,0,0,0,49,
1,0,0,0,0,51,1,0,0,0,0,53,1,0,0,0,0,55,1,0,0,0,0,57,1,0,0,0,0,59,
1,0,0,0,0,61,1,0,0,0,0,63,1,0,0,0,0,65,1,0,0,0,0,67,1,0,0,0,0,69,
1,0,0,0,0,71,1,0,0,0,0,73,1,0,0,0,0,75,1,0,0,0,0,77,1,0,0,0,0,79,
1,0,0,0,0,81,1,0,0,0,0,83,1,0,0,0,0,85,1,0,0,0,0,87,1,0,0,0,0,89,
1,0,0,0,0,91,1,0,0,0,0,93,1,0,0,0,0,95,1,0,0,0,0,97,1,0,0,0,0,99,
1,0,0,0,0,101,1,0,0,0,0,103,1,0,0,0,0,105,1,0,0,0,0,107,1,0,0,0,
0,109,1,0,0,0,0,111,1,0,0,0,0,113,1,0,0,0,0,115,1,0,0,0,0,117,1,
0,0,0,0,119,1,0,0,0,0,121,1,0,0,0,0,123,1,0,0,0,0,125,1,0,0,0,0,
127,1,0,0,0,0,129,1,0,0,0,0,131,1,0,0,0,0,133,1,0,0,0,0,135,1,0,
0,0,0,137,1,0,0,0,0,139,1,0,0,0,0,141,1,0,0,0,0,143,1,0,0,0,0,145,
1,0,0,0,0,147,1,0,0,0,0,149,1,0,0,0,0,151,1,0,0,0,0,153,1,0,0,0,
0,155,1,0,0,0,0,157,1,0,0,0,0,159,1,0,0,0,0,161,1,0,0,0,0,163,1,
0,0,0,0,165,1,0,0,0,0,167,1,0,0,0,0,169,1,0,0,0,0,171,1,0,0,0,0,
173,1,0,0,0,0,175,1,0,0,0,0,177,1,0,0,0,0,179,1,0,0,0,0,181,1,0,
0,0,0,183,1,0,0,0,0,185,1,0,0,0,0,187,1,0,0,0,0,189,1,0,0,0,0,191,
1,0,0,0,0,193,1,0,0,0,0,195,1,0,0,0,0,197,1,0,0,0,0,199,1,0,0,0,
0,201,1,0,0,0,1,203,1,0,0,0,3,207,1,0,0,0,5,211,1,0,0,0,7,215,1,
0,0,0,9,220,1,0,0,0,11,225,1,0,0,0,13,230,1,0,0,0,15,236,1,0,0,0,
17,241,1,0,0,0,19,246,1,0,0,0,21,251,1,0,0,0,23,257,1,0,0,0,25,263,
1,0,0,0,27,269,1,0,0,0,29,273,1,0,0,0,31,278,1,0,0,0,33,281,1,0,
0,0,35,285,1,0,0,0,37,289,1,0,0,0,39,294,1,0,0,0,41,299,1,0,0,0,
43,304,1,0,0,0,45,309,1,0,0,0,47,315,1,0,0,0,49,321,1,0,0,0,51,327,
1,0,0,0,53,332,1,0,0,0,55,338,1,0,0,0,57,344,1,0,0,0,59,348,1,0,
0,0,61,353,1,0,0,0,63,359,1,0,0,0,65,363,1,0,0,0,67,368,1,0,0,0,
69,374,1,0,0,0,71,395,1,0,0,0,73,410,1,0,0,0,75,412,1,0,0,0,77,417,
1,0,0,0,79,422,1,0,0,0,81,433,1,0,0,0,83,439,1,0,0,0,85,444,1,0,
0,0,87,453,1,0,0,0,89,458,1,0,0,0,91,463,1,0,0,0,93,486,1,0,0,0,
95,503,1,0,0,0,97,505,1,0,0,0,99,521,1,0,0,0,101,534,1,0,0,0,103,
536,1,0,0,0,105,542,1,0,0,0,107,547,1,0,0,0,109,552,1,0,0,0,111,
557,1,0,0,0,113,561,1,0,0,0,115,566,1,0,0,0,117,570,1,0,0,0,119,
589,1,0,0,0,121,606,1,0,0,0,123,608,1,0,0,0,125,617,1,0,0,0,127,
621,1,0,0,0,129,651,1,0,0,0,131,676,1,0,0,0,133,696,1,0,0,0,135,
721,1,0,0,0,137,746,1,0,0,0,139,769,1,0,0,0,141,790,1,0,0,0,143,
792,1,0,0,0,145,799,1,0,0,0,147,804,1,0,0,0,149,808,1,0,0,0,151,
813,1,0,0,0,153,820,1,0,0,0,155,822,1,0,0,0,157,824,1,0,0,0,159,
826,1,0,0,0,161,828,1,0,0,0,163,830,1,0,0,0,165,832,1,0,0,0,167,
835,1,0,0,0,169,837,1,0,0,0,171,840,1,0,0,0,173,842,1,0,0,0,175,
845,1,0,0,0,177,847,1,0,0,0,179,850,1,0,0,0,181,852,1,0,0,0,183,
854,1,0,0,0,185,856,1,0,0,0,187,858,1,0,0,0,189,860,1,0,0,0,191,
863,1,0,0,0,193,865,1,0,0,0,195,872,1,0,0,0,197,875,1,0,0,0,199,
887,1,0,0,0,201,895,1,0,0,0,203,204,5,115,0,0,204,205,5,105,0,0,
205,206,5,110,0,0,206,2,1,0,0,0,207,208,5,99,0,0,208,209,5,111,0,
0,209,210,5,115,0,0,210,4,1,0,0,0,211,212,5,116,0,0,212,213,5,97,
0,0,213,214,5,110,0,0,214,6,1,0,0,0,215,216,5,97,0,0,216,217,5,115,
0,0,217,218,5,105,0,0,218,219,5,110,0,0,219,8,1,0,0,0,220,221,5,
97,0,0,221,222,5,99,0,0,222,223,5,111,0,0,223,224,5,115,0,0,224,
10,1,0,0,0,225,226,5,97,0,0,226,227,5,116,0,0,227,228,5,97,0,0,228,
229,5,110,0,0,229,12,1,0,0,0,230,231,5,97,0,0,231,232,5,116,0,0,
232,233,5,97,0,0,233,234,5,110,0,0,234,235,5,50,0,0,235,14,1,0,0,
0,236,237,5,115,0,0,237,238,5,105,0,0,238,239,5,110,0,0,239,240,
5,104,0,0,240,16,1,0,0,0,241,242,5,99,0,0,242,243,5,111,0,0,243,
244,5,115,0,0,244,245,5,104,0,0,245,18,1,0,0,0,246,247,5,116,0,0,
247,248,5,97,0,0,248,249,5,110,0,0,249,250,5,104,0,0,250,20,1,0,
0,0,251,252,5,97,0,0,252,253,5,115,0,0,253,254,5,105,0,0,254,255,
5,110,0,0,255,256,5,104,0,0,256,22,1,0,0,0,257,258,5,97,0,0,258,
259,5,99,0,0,259,260,5,111,0,0,260,261,5,115,0,0,261,262,5,104,0,
0,262,24,1,0,0,0,263,264,5,97,0,0,264,265,5,116,0,0,265,266,5,97,
0,0,266,267,5,110,0,0,267,268,5,104,0,0,268,26,1,0,0,0,269,270,5,
97,0,0,270,271,5,98,0,0,271,272,5,115,0,0,272,28,1,0,0,0,273,274,
5,115,0,0,274,275,5,113,0,0,275,276,5,114,0,0,276,277,5,116,0,0,
277,30,1,0,0,0,278,279,5,108,0,0,279,280,5,110,0,0,280,32,1,0,0,
0,281,282,5,108,0,0,282,283,5,111,0,0,283,284,5,103,0,0,284,34,1,
0,0,0,285,286,5,101,0,0,286,287,5,120,0,0,287,288,5,112,0,0,288,
36,1,0,0,0,289,290,5,115,0,0,290,291,5,109,0,0,291,292,5,105,0,0,
292,293,5,110,0,0,293,38,1,0,0,0,294,295,5,115,0,0,295,296,5,109,
0,0,296,297,5,97,0,0,297,298,5,120,0,0,298,40,1,0,0,0,299,300,5,
116,0,0,300,301,5,109,0,0,301,302,5,105,0,0,302,303,5,110,0,0,303,
42,1,0,0,0,304,305,5,116,0,0,305,306,5,109,0,0,306,307,5,97,0,0,
307,308,5,120,0,0,308,44,1,0,0,0,309,310,5,116,0,0,310,311,5,110,
0,0,311,312,5,111,0,0,312,313,5,114,0,0,313,314,5,109,0,0,314,46,
1,0,0,0,315,316,5,115,0,0,316,317,5,110,0,0,317,318,5,111,0,0,318,
319,5,114,0,0,319,320,5,109,0,0,320,48,1,0,0,0,321,322,5,102,0,0,
322,323,5,108,0,0,323,324,5,111,0,0,324,325,5,111,0,0,325,326,5,
114,0,0,326,50,1,0,0,0,327,328,5,99,0,0,328,329,5,101,0,0,329,330,
5,105,0,0,330,331,5,108,0,0,331,52,1,0,0,0,332,333,5,114,0,0,333,
334,5,111,0,0,334,335,5,117,0,0,335,336,5,110,0,0,336,337,5,100,
0,0,337,54,1,0,0,0,338,339,5,103,0,0,339,340,5,97,0,0,340,341,5,
109,0,0,341,342,5,109,0,0,342,343,5,97,0,0,343,56,1,0,0,0,344,345,
5,112,0,0,345,346,5,111,0,0,346,347,5,119,0,0,347,58,1,0,0,0,348,
349,5,115,0,0,349,350,5,105,0,0,350,351,5,103,0,0,351,352,5,109,
0,0,352,60,1,0,0,0,353,354,5,99,0,0,354,355,5,108,0,0,355,356,5,
97,0,0,356,357,5,109,0,0,357,358,5,112,0,0,358,62,1,0,0,0,359,360,
5,102,0,0,360,361,5,102,0,0,361,362,5,116,0,0,362,64,1,0,0,0,363,
364,5,105,0,0,364,365,5,102,0,0,365,366,5,102,0,0,366,367,5,116,
0,0,367,66,1,0,0,0,368,369,5,97,0,0,369,370,5,110,0,0,370,371,5,
103,0,0,371,372,5,108,0,0,372,373,5,101,0,0,373,68,1,0,0,0,374,375,
5,112,0,0,375,376,5,114,0,0,376,377,5,105,0,0,377,378,5,110,0,0,
378,379,5,116,0,0,379,70,1,0,0,0,380,381,5,112,0,0,381,382,5,114,
0,0,382,383,5,105,0,0,383,384,5,110,0,0,384,385,5,116,0,0,385,386,
5,95,0,0,386,387,5,115,0,0,387,388,5,104,0,0,388,389,5,97,0,0,389,
390,5,112,0,0,390,396,5,101,0,0,391,392,5,112,0,0,392,393,5,115,
0,0,393,394,5,104,0,0,394,396,5,112,0,0,395,380,1,0,0,0,395,391,
1,0,0,0,396,72,1,0,0,0,397,398,5,110,0,0,398,399,5,118,0,0,399,411,
5,108,0,0,400,401,5,110,0,0,401,402,5,97,0,0,402,403,5,110,0,0,403,
404,5,95,0,0,404,405,5,116,0,0,405,406,5,111,0,0,406,407,5,95,0,
0,407,408,5,110,0,0,408,409,5,117,0,0,409,411,5,109,0,0,410,397,
1,0,0,0,410,400,1,0,0,0,411,74,1,0,0,0,412,413,5,108,0,0,413,414,
5,101,0,0,414,415,5,114,0,0,415,416,5,112,0,0,416,76,1,0,0,0,417,
418,5,115,0,0,418,419,5,116,0,0,419,420,5,101,0,0,420,421,5,112,
0,0,421,78,1,0,0,0,422,423,5,115,0,0,423,424,5,109,0,0,424,425,5,
111,0,0,425,426,5,111,0,0,426,427,5,116,0,0,427,428,5,104,0,0,428,
429,5,115,0,0,429,430,5,116,0,0,430,431,5,101,0,0,431,432,5,112,
0,0,432,80,1,0,0,0,433,434,5,102,0,0,434,435,5,114,0,0,435,436,5,
97,0,0,436,437,5,99,0,0,437,438,5,116,0,0,438,82,1,0,0,0,439,440,
5,114,0,0,440,441,5,101,0,0,441,442,5,108,0,0,442,443,5,117,0,0,
443,84,1,0,0,0,444,445,5,115,0,0,445,446,5,111,0,0,446,447,5,102,
0,0,447,448,5,116,0,0,448,449,5,112,0,0,449,450,5,108,0,0,450,451,
5,117,0,0,451,452,5,115,0,0,452,86,1,0,0,0,453,454,5,103,0,0,454,
455,5,101,0,0,455,456,5,108,0,0,456,457,5,117,0,0,457,88,1,0,0,0,
458,459,5,115,0,0,459,460,5,105,0,0,460,461,5,103,0,0,461,462,5,
110,0,0,462,90,1,0,0,0,463,464,5,109,0,0,464,465,5,97,0,0,465,466,
5,112,0,0,466,92,1,0,0,0,467,468,5,101,0,0,468,469,5,122,0,0,469,
470,5,99,0,0,470,471,5,111,0,0,471,472,5,110,0,0,472,473,5,118,0,
0,473,474,5,111,0,0,474,475,5,108,0,0,475,476,5,117,0,0,476,477,
5,116,0,0,477,478,5,105,0,0,478,479,5,111,0,0,479,487,5,110,0,0,
480,481,5,101,0,0,481,482,5,122,0,0,482,483,5,99,0,0,483,484,5,111,
0,0,484,485,5,110,0,0,485,487,5,118,0,0,486,467,1,0,0,0,486,480,
1,0,0,0,487,94,1,0,0,0,488,489,5,99,0,0,489,490,5,111,0,0,490,491,
5,110,0,0,491,492,5,118,0,0,492,493,5,111,0,0,493,494,5,108,0,0,
494,495,5,117,0,0,495,496,5,116,0,0,496,497,5,105,0,0,497,498,5,
111,0,0,498,504,5,110,0,0,499,500,5,99,0,0,500,501,5,111,0,0,501,
502,5,110,0,0,502,504,5,118,0,0,503,488,1,0,0,0,503,499,1,0,0,0,
504,96,1,0,0,0,505,506,5,115,0,0,506,507,5,119,0,0,507,508,5,97,
0,0,508,509,5,112,0,0,509,98,1,0,0,0,510,511,5,112,0,0,511,512,5,
101,0,0,512,513,5,114,0,0,513,514,5,109,0,0,514,515,5,117,0,0,515,
516,5,116,0,0,516,522,5,101,0,0,517,518,5,112,0,0,518,519,5,101,
0,0,519,520,5,114,0,0,520,522,5,109,0,0,521,510,1,0,0,0,521,517,
1,0,0,0,522,100,1,0,0,0,523,524,5,114,0,0,524,525,5,101,0,0,525,
526,5,115,0,0,526,527,5,104,0,0,527,528,5,97,0,0,528,529,5,112,0,
0,529,535,5,101,0,0,530,531,5,114,0,0,531,532,5,115,0,0,532,533,
5,104,0,0,533,535,5,112,0,0,534,523,1,0,0,0,534,530,1,0,0,0,535,
102,1,0,0,0,536,537,5,114,0,0,537,538,5,97,0,0,538,539,5,110,0,0,
539,540,5,103,0,0,540,541,5,101,0,0,541,104,1,0,0,0,542,543,5,116,
0,0,543,544,5,111,0,0,544,545,5,112,0,0,545,546,5,107,0,0,546,106,
1,0,0,0,547,548,5,98,0,0,548,549,5,111,0,0,549,550,5,116,0,0,550,
551,5,107,0,0,551,108,1,0,0,0,552,553,5,112,0,0,553,554,5,105,0,
0,554,555,5,110,0,0,555,556,5,118,0,0,556,110,1,0,0,0,557,558,5,
115,0,0,558,559,5,117,0,0,559,560,5,109,0,0,560,112,1,0,0,0,561,
562,5,109,0,0,562,563,5,101,0,0,563,564,5,97,0,0,564,565,5,110,0,
0,565,114,1,0,0,0,566,567,5,115,0,0,567,568,5,116,0,0,568,569,5,
100,0,0,569,116,1,0,0,0,570,571,5,118,0,0,571,572,5,97,0,0,572,573,
5,114,0,0,573,118,1,0,0,0,574,575,5,113,0,0,575,576,5,117,0,0,576,
577,5,97,0,0,577,578,5,114,0,0,578,579,5,116,0,0,579,580,5,105,0,
0,580,581,5,108,0,0,581,590,5,101,0,0,582,583,5,113,0,0,583,584,
5,117,0,0,584,585,5,97,0,0,585,586,5,114,0,0,586,587,5,116,0,0,587,
588,5,105,0,0,588,590,5,108,0,0,589,574,1,0,0,0,589,582,1,0,0,0,
590,120,1,0,0,0,591,592,5,112,0,0,592,593,5,101,0,0,593,594,5,114,
0,0,594,595,5,99,0,0,595,596,5,101,0,0,596,597,5,110,0,0,597,598,
5,116,0,0,598,599,5,105,0,0,599,600,5,108,0,0,600,607,5,101,0,0,
601,602,5,112,0,0,602,603,5,114,0,0,603,604,5,99,0,0,604,605,5,110,
0,0,605,607,5,116,0,0,606,591,1,0,0,0,606,601,1,0,0,0,607,122,1,
0,0,0,608,609,5,113,0,0,609,610,5,117,0,0,610,611,5,97,0,0,611,612,
5,110,0,0,612,613,5,116,0,0,613,614,5,105,0,0,614,615,5,108,0,0,
615,616,5,101,0,0,616,124,1,0,0,0,617,618,5,100,0,0,618,619,5,111,
0,0,619,620,5,116,0,0,620,126,1,0,0,0,621,622,5,109,0,0,622,623,
5,111,0,0,623,624,5,109,0,0,624,625,5,101,0,0,625,626,5,110,0,0,
626,627,5,116,0,0,627,128,1,0,0,0,628,629,5,110,0,0,629,630,5,111,
0,0,630,631,5,105,0,0,631,632,5,115,0,0,632,652,5,101,0,0,633,634,
5,114,0,0,634,635,5,97,0,0,635,636,5,110,0,0,636,637,5,100,0,0,637,
652,5,110,0,0,638,639,5,114,0,0,639,640,5,97,0,0,640,641,5,110,0,
0,641,642,5,100,0,0,642,643,5,111,0,0,643,644,5,109,0,0,644,645,
5,95,0,0,645,646,5,110,0,0,646,647,5,111,0,0,647,648,5,114,0,0,648,
649,5,109,0,0,649,650,5,97,0,0,650,652,5,108,0,0,651,628,1,0,0,0,
651,633,1,0,0,0,651,638,1,0,0,0,652,130,1,0,0,0,653,654,5,114,0,
0,654,655,5,97,0,0,655,656,5,110,0,0,656,677,5,100,0,0,657,658,5,
114,0,0,658,659,5,97,0,0,659,660,5,110,0,0,660,661,5,100,0,0,661,
677,5,117,0,0,662,663,5,114,0,0,663,664,5,97,0,0,664,665,5,110,0,
0,665,666,5,100,0,0,666,667,5,111,0,0,667,668,5,109,0,0,668,669,
5,95,0,0,669,670,5,117,0,0,670,671,5,110,0,0,671,672,5,105,0,0,672,
673,5,102,0,0,673,674,5,111,0,0,674,675,5,114,0,0,675,677,5,109,
0,0,676,653,1,0,0,0,676,657,1,0,0,0,676,662,1,0,0,0,677,132,1,0,
0,0,678,679,5,114,0,0,679,680,5,97,0,0,680,681,5,110,0,0,681,682,
5,100,0,0,682,697,5,99,0,0,683,684,5,114,0,0,684,685,5,97,0,0,685,
686,5,110,0,0,686,687,5,100,0,0,687,688,5,111,0,0,688,689,5,109,
0,0,689,690,5,95,0,0,690,691,5,99,0,0,691,692,5,97,0,0,692,693,5,
117,0,0,693,694,5,99,0,0,694,695,5,104,0,0,695,697,5,121,0,0,696,
678,1,0,0,0,696,683,1,0,0,0,697,134,1,0,0,0,698,699,5,114,0,0,699,
700,5,97,0,0,700,701,5,110,0,0,701,702,5,100,0,0,702,722,5,101,0,
0,703,704,5,114,0,0,704,705,5,97,0,0,705,706,5,110,0,0,706,707,5,
100,0,0,707,708,5,111,0,0,708,709,5,109,0,0,709,710,5,95,0,0,710,
711,5,101,0,0,711,712,5,120,0,0,712,713,5,112,0,0,713,714,5,111,
0,0,714,715,5,110,0,0,715,716,5,101,0,0,716,717,5,110,0,0,717,718,
5,116,0,0,718,719,5,105,0,0,719,720,5,97,0,0,720,722,5,108,0,0,721,
698,1,0,0,0,721,703,1,0,0,0,722,136,1,0,0,0,723,724,5,114,0,0,724,
725,5,97,0,0,725,726,5,110,0,0,726,727,5,100,0,0,727,728,5,108,0,
0,728,747,5,110,0,0,729,730,5,114,0,0,730,731,5,97,0,0,731,732,5,
110,0,0,732,733,5,100,0,0,733,734,5,111,0,0,734,735,5,109,0,0,735,
736,5,95,0,0,736,737,5,108,0,0,737,738,5,111,0,0,738,739,5,103,0,
0,739,740,5,95,0,0,740,741,5,110,0,0,741,742,5,111,0,0,742,743,5,
114,0,0,743,744,5,109,0,0,744,745,5,97,0,0,745,747,5,108,0,0,746,
723,1,0,0,0,746,729,1,0,0,0,747,138,1,0,0,0,748,749,5,114,0,0,749,
750,5,97,0,0,750,751,5,110,0,0,751,752,5,100,0,0,752,770,5,98,0,
0,753,754,5,114,0,0,754,755,5,97,0,0,755,756,5,110,0,0,756,757,5,
100,0,0,757,758,5,111,0,0,758,759,5,109,0,0,759,760,5,95,0,0,760,
761,5,98,0,0,761,762,5,101,0,0,762,763,5,114,0,0,763,764,5,110,0,
0,764,765,5,111,0,0,765,766,5,117,0,0,766,767,5,108,0,0,767,768,
5,108,0,0,768,770,5,105,0,0,769,748,1,0,0,0,769,753,1,0,0,0,770,
140,1,0,0,0,771,772,5,114,0,0,772,773,5,97,0,0,773,774,5,110,0,0,
774,775,5,100,0,0,775,791,5,112,0,0,776,777,5,114,0,0,777,778,5,
97,0,0,778,779,5,110,0,0,779,780,5,100,0,0,780,781,5,111,0,0,781,
782,5,109,0,0,782,783,5,95,0,0,783,784,5,112,0,0,784,785,5,111,0,
0,785,786,5,105,0,0,786,787,5,115,0,0,787,788,5,115,0,0,788,789,
5,111,0,0,789,791,5,110,0,0,790,771,1,0,0,0,790,776,1,0,0,0,791,
142,1,0,0,0,792,793,5,99,0,0,793,794,5,111,0,0,794,795,5,115,0,0,
795,796,5,115,0,0,796,797,5,105,0,0,797,798,5,109,0,0,798,144,1,
0,0,0,799,800,5,102,0,0,800,801,5,108,0,0,801,802,5,105,0,0,802,
803,5,112,0,0,803,146,1,0,0,0,804,805,5,99,0,0,805,806,5,111,0,0,
806,807,5,118,0,0,807,148,1,0,0,0,808,809,5,115,0,0,809,810,5,111,
0,0,810,811,5,114,0,0,811,812,5,116,0,0,812,150,1,0,0,0,813,814,
5,97,0,0,814,815,5,112,0,0,815,816,5,112,0,0,816,817,5,101,0,0,817,
818,5,110,0,0,818,819,5,100,0,0,819,152,1,0,0,0,820,821,5,43,0,0,
821,154,1,0,0,0,822,823,5,45,0,0,823,156,1,0,0,0,824,825,5,42,0,
0,825,158,1,0,0,0,826,827,5,47,0,0,827,160,1,0,0,0,828,829,5,37,
0,0,829,162,1,0,0,0,830,831,5,94,0,0,831,164,1,0,0,0,832,833,5,62,
0,0,833,834,5,61,0,0,834,166,1,0,0,0,835,836,5,62,0,0,836,168,1,
0,0,0,837,838,5,60,0,0,838,839,5,61,0,0,839,170,1,0,0,0,840,841,
5,60,0,0,841,172,1,0,0,0,842,843,5,61,0,0,843,844,5,61,0,0,844,174,
1,0,0,0,845,846,5,61,0,0,846,176,1,0,0,0,847,848,5,33,0,0,848,849,
5,61,0,0,849,178,1,0,0,0,850,851,5,124,0,0,851,180,1,0,0,0,852,853,
5,40,0,0,853,182,1,0,0,0,854,855,5,41,0,0,855,184,1,0,0,0,856,857,
5,44,0,0,857,186,1,0,0,0,858,859,5,59,0,0,859,188,1,0,0,0,860,861,
5,45,0,0,861,862,5,62,0,0,862,190,1,0,0,0,863,864,5,91,0,0,864,192,
1,0,0,0,865,866,5,93,0,0,866,194,1,0,0,0,867,868,5,112,0,0,868,873,
5,105,0,0,869,870,5,80,0,0,870,873,5,73,0,0,871,873,7,0,0,0,872,
867,1,0,0,0,872,869,1,0,0,0,872,871,1,0,0,0,873,196,1,0,0,0,874,
876,7,1,0,0,875,874,1,0,0,0,876,877,1,0,0,0,877,875,1,0,0,0,877,
878,1,0,0,0,878,885,1,0,0,0,879,881,5,46,0,0,880,882,7,1,0,0,881,
880,1,0,0,0,882,883,1,0,0,0,883,881,1,0,0,0,883,884,1,0,0,0,884,
886,1,0,0,0,885,879,1,0,0,0,885,886,1,0,0,0,886,198,1,0,0,0,887,
891,7,2,0,0,888,890,7,3,0,0,889,888,1,0,0,0,890,893,1,0,0,0,891,
889,1,0,0,0,891,892,1,0,0,0,892,200,1,0,0,0,893,891,1,0,0,0,894,
896,7,4,0,0,895,894,1,0,0,0,896,897,1,0,0,0,897,895,1,0,0,0,897,
898,1,0,0,0,898,899,1,0,0,0,899,900,6,100,0,0,900,202,1,0,0,0,22,
0,395,410,486,503,521,534,589,606,651,676,696,721,746,769,790,872,
877,883,885,891,897,1,6,0,0
1,70,1,70,1,70,1,70,1,70,3,70,795,8,70,1,71,1,71,1,71,1,71,1,71,
1,71,1,71,1,72,1,72,1,72,1,72,1,72,1,73,1,73,1,73,1,73,1,74,1,74,
1,74,1,74,1,74,1,75,1,75,1,75,1,75,1,75,1,75,1,75,1,76,1,76,1,77,
1,77,1,78,1,78,1,79,1,79,1,80,1,80,1,81,1,81,1,82,1,82,1,82,1,83,
1,83,1,84,1,84,1,84,1,85,1,85,1,86,1,86,1,86,1,87,1,87,1,88,1,88,
1,88,1,89,1,89,1,90,1,90,1,91,1,91,1,92,1,92,1,93,1,93,1,94,1,94,
1,94,1,95,1,95,1,96,1,96,1,97,1,97,1,98,1,98,1,99,1,99,1,99,1,99,
1,99,3,99,881,8,99,1,100,4,100,884,8,100,11,100,12,100,885,1,100,
1,100,4,100,890,8,100,11,100,12,100,891,3,100,894,8,100,1,101,1,
101,5,101,898,8,101,10,101,12,101,901,9,101,1,102,4,102,904,8,102,
11,102,12,102,905,1,102,1,102,0,0,103,1,1,3,2,5,3,7,4,9,5,11,6,13,
7,15,8,17,9,19,10,21,11,23,12,25,13,27,14,29,15,31,16,33,17,35,18,
37,19,39,20,41,21,43,22,45,23,47,24,49,25,51,26,53,27,55,28,57,29,
59,30,61,31,63,32,65,33,67,34,69,35,71,36,73,37,75,38,77,39,79,40,
81,41,83,42,85,43,87,44,89,45,91,46,93,47,95,48,97,49,99,50,101,
51,103,52,105,53,107,54,109,55,111,56,113,57,115,58,117,59,119,60,
121,61,123,62,125,63,127,64,129,65,131,66,133,67,135,68,137,69,139,
70,141,71,143,72,145,73,147,74,149,75,151,76,153,77,155,78,157,79,
159,80,161,81,163,82,165,83,167,84,169,85,171,86,173,87,175,88,177,
89,179,90,181,91,183,92,185,93,187,94,189,95,191,96,193,97,195,98,
197,99,199,100,201,101,203,102,205,103,1,0,5,2,0,69,69,101,101,1,
0,48,57,3,0,65,90,95,95,97,122,4,0,48,57,65,90,95,95,97,122,3,0,
9,10,13,13,32,32,932,0,1,1,0,0,0,0,3,1,0,0,0,0,5,1,0,0,0,0,7,1,0,
0,0,0,9,1,0,0,0,0,11,1,0,0,0,0,13,1,0,0,0,0,15,1,0,0,0,0,17,1,0,
0,0,0,19,1,0,0,0,0,21,1,0,0,0,0,23,1,0,0,0,0,25,1,0,0,0,0,27,1,0,
0,0,0,29,1,0,0,0,0,31,1,0,0,0,0,33,1,0,0,0,0,35,1,0,0,0,0,37,1,0,
0,0,0,39,1,0,0,0,0,41,1,0,0,0,0,43,1,0,0,0,0,45,1,0,0,0,0,47,1,0,
0,0,0,49,1,0,0,0,0,51,1,0,0,0,0,53,1,0,0,0,0,55,1,0,0,0,0,57,1,0,
0,0,0,59,1,0,0,0,0,61,1,0,0,0,0,63,1,0,0,0,0,65,1,0,0,0,0,67,1,0,
0,0,0,69,1,0,0,0,0,71,1,0,0,0,0,73,1,0,0,0,0,75,1,0,0,0,0,77,1,0,
0,0,0,79,1,0,0,0,0,81,1,0,0,0,0,83,1,0,0,0,0,85,1,0,0,0,0,87,1,0,
0,0,0,89,1,0,0,0,0,91,1,0,0,0,0,93,1,0,0,0,0,95,1,0,0,0,0,97,1,0,
0,0,0,99,1,0,0,0,0,101,1,0,0,0,0,103,1,0,0,0,0,105,1,0,0,0,0,107,
1,0,0,0,0,109,1,0,0,0,0,111,1,0,0,0,0,113,1,0,0,0,0,115,1,0,0,0,
0,117,1,0,0,0,0,119,1,0,0,0,0,121,1,0,0,0,0,123,1,0,0,0,0,125,1,
0,0,0,0,127,1,0,0,0,0,129,1,0,0,0,0,131,1,0,0,0,0,133,1,0,0,0,0,
135,1,0,0,0,0,137,1,0,0,0,0,139,1,0,0,0,0,141,1,0,0,0,0,143,1,0,
0,0,0,145,1,0,0,0,0,147,1,0,0,0,0,149,1,0,0,0,0,151,1,0,0,0,0,153,
1,0,0,0,0,155,1,0,0,0,0,157,1,0,0,0,0,159,1,0,0,0,0,161,1,0,0,0,
0,163,1,0,0,0,0,165,1,0,0,0,0,167,1,0,0,0,0,169,1,0,0,0,0,171,1,
0,0,0,0,173,1,0,0,0,0,175,1,0,0,0,0,177,1,0,0,0,0,179,1,0,0,0,0,
181,1,0,0,0,0,183,1,0,0,0,0,185,1,0,0,0,0,187,1,0,0,0,0,189,1,0,
0,0,0,191,1,0,0,0,0,193,1,0,0,0,0,195,1,0,0,0,0,197,1,0,0,0,0,199,
1,0,0,0,0,201,1,0,0,0,0,203,1,0,0,0,0,205,1,0,0,0,1,207,1,0,0,0,
3,211,1,0,0,0,5,215,1,0,0,0,7,219,1,0,0,0,9,224,1,0,0,0,11,229,1,
0,0,0,13,234,1,0,0,0,15,240,1,0,0,0,17,245,1,0,0,0,19,250,1,0,0,
0,21,255,1,0,0,0,23,261,1,0,0,0,25,267,1,0,0,0,27,273,1,0,0,0,29,
277,1,0,0,0,31,282,1,0,0,0,33,285,1,0,0,0,35,289,1,0,0,0,37,293,
1,0,0,0,39,298,1,0,0,0,41,303,1,0,0,0,43,308,1,0,0,0,45,313,1,0,
0,0,47,319,1,0,0,0,49,325,1,0,0,0,51,331,1,0,0,0,53,336,1,0,0,0,
55,342,1,0,0,0,57,348,1,0,0,0,59,352,1,0,0,0,61,357,1,0,0,0,63,363,
1,0,0,0,65,367,1,0,0,0,67,372,1,0,0,0,69,378,1,0,0,0,71,399,1,0,
0,0,73,414,1,0,0,0,75,416,1,0,0,0,77,421,1,0,0,0,79,426,1,0,0,0,
81,437,1,0,0,0,83,443,1,0,0,0,85,448,1,0,0,0,87,457,1,0,0,0,89,462,
1,0,0,0,91,467,1,0,0,0,93,490,1,0,0,0,95,507,1,0,0,0,97,509,1,0,
0,0,99,525,1,0,0,0,101,538,1,0,0,0,103,540,1,0,0,0,105,546,1,0,0,
0,107,551,1,0,0,0,109,556,1,0,0,0,111,561,1,0,0,0,113,565,1,0,0,
0,115,570,1,0,0,0,117,574,1,0,0,0,119,593,1,0,0,0,121,610,1,0,0,
0,123,612,1,0,0,0,125,621,1,0,0,0,127,625,1,0,0,0,129,655,1,0,0,
0,131,680,1,0,0,0,133,700,1,0,0,0,135,725,1,0,0,0,137,750,1,0,0,
0,139,773,1,0,0,0,141,794,1,0,0,0,143,796,1,0,0,0,145,803,1,0,0,
0,147,808,1,0,0,0,149,812,1,0,0,0,151,817,1,0,0,0,153,824,1,0,0,
0,155,826,1,0,0,0,157,828,1,0,0,0,159,830,1,0,0,0,161,832,1,0,0,
0,163,834,1,0,0,0,165,836,1,0,0,0,167,839,1,0,0,0,169,841,1,0,0,
0,171,844,1,0,0,0,173,846,1,0,0,0,175,849,1,0,0,0,177,851,1,0,0,
0,179,854,1,0,0,0,181,856,1,0,0,0,183,858,1,0,0,0,185,860,1,0,0,
0,187,862,1,0,0,0,189,864,1,0,0,0,191,867,1,0,0,0,193,869,1,0,0,
0,195,871,1,0,0,0,197,873,1,0,0,0,199,880,1,0,0,0,201,883,1,0,0,
0,203,895,1,0,0,0,205,903,1,0,0,0,207,208,5,115,0,0,208,209,5,105,
0,0,209,210,5,110,0,0,210,2,1,0,0,0,211,212,5,99,0,0,212,213,5,111,
0,0,213,214,5,115,0,0,214,4,1,0,0,0,215,216,5,116,0,0,216,217,5,
97,0,0,217,218,5,110,0,0,218,6,1,0,0,0,219,220,5,97,0,0,220,221,
5,115,0,0,221,222,5,105,0,0,222,223,5,110,0,0,223,8,1,0,0,0,224,
225,5,97,0,0,225,226,5,99,0,0,226,227,5,111,0,0,227,228,5,115,0,
0,228,10,1,0,0,0,229,230,5,97,0,0,230,231,5,116,0,0,231,232,5,97,
0,0,232,233,5,110,0,0,233,12,1,0,0,0,234,235,5,97,0,0,235,236,5,
116,0,0,236,237,5,97,0,0,237,238,5,110,0,0,238,239,5,50,0,0,239,
14,1,0,0,0,240,241,5,115,0,0,241,242,5,105,0,0,242,243,5,110,0,0,
243,244,5,104,0,0,244,16,1,0,0,0,245,246,5,99,0,0,246,247,5,111,
0,0,247,248,5,115,0,0,248,249,5,104,0,0,249,18,1,0,0,0,250,251,5,
116,0,0,251,252,5,97,0,0,252,253,5,110,0,0,253,254,5,104,0,0,254,
20,1,0,0,0,255,256,5,97,0,0,256,257,5,115,0,0,257,258,5,105,0,0,
258,259,5,110,0,0,259,260,5,104,0,0,260,22,1,0,0,0,261,262,5,97,
0,0,262,263,5,99,0,0,263,264,5,111,0,0,264,265,5,115,0,0,265,266,
5,104,0,0,266,24,1,0,0,0,267,268,5,97,0,0,268,269,5,116,0,0,269,
270,5,97,0,0,270,271,5,110,0,0,271,272,5,104,0,0,272,26,1,0,0,0,
273,274,5,97,0,0,274,275,5,98,0,0,275,276,5,115,0,0,276,28,1,0,0,
0,277,278,5,115,0,0,278,279,5,113,0,0,279,280,5,114,0,0,280,281,
5,116,0,0,281,30,1,0,0,0,282,283,5,108,0,0,283,284,5,110,0,0,284,
32,1,0,0,0,285,286,5,108,0,0,286,287,5,111,0,0,287,288,5,103,0,0,
288,34,1,0,0,0,289,290,5,101,0,0,290,291,5,120,0,0,291,292,5,112,
0,0,292,36,1,0,0,0,293,294,5,115,0,0,294,295,5,109,0,0,295,296,5,
105,0,0,296,297,5,110,0,0,297,38,1,0,0,0,298,299,5,115,0,0,299,300,
5,109,0,0,300,301,5,97,0,0,301,302,5,120,0,0,302,40,1,0,0,0,303,
304,5,116,0,0,304,305,5,109,0,0,305,306,5,105,0,0,306,307,5,110,
0,0,307,42,1,0,0,0,308,309,5,116,0,0,309,310,5,109,0,0,310,311,5,
97,0,0,311,312,5,120,0,0,312,44,1,0,0,0,313,314,5,116,0,0,314,315,
5,110,0,0,315,316,5,111,0,0,316,317,5,114,0,0,317,318,5,109,0,0,
318,46,1,0,0,0,319,320,5,115,0,0,320,321,5,110,0,0,321,322,5,111,
0,0,322,323,5,114,0,0,323,324,5,109,0,0,324,48,1,0,0,0,325,326,5,
102,0,0,326,327,5,108,0,0,327,328,5,111,0,0,328,329,5,111,0,0,329,
330,5,114,0,0,330,50,1,0,0,0,331,332,5,99,0,0,332,333,5,101,0,0,
333,334,5,105,0,0,334,335,5,108,0,0,335,52,1,0,0,0,336,337,5,114,
0,0,337,338,5,111,0,0,338,339,5,117,0,0,339,340,5,110,0,0,340,341,
5,100,0,0,341,54,1,0,0,0,342,343,5,103,0,0,343,344,5,97,0,0,344,
345,5,109,0,0,345,346,5,109,0,0,346,347,5,97,0,0,347,56,1,0,0,0,
348,349,5,112,0,0,349,350,5,111,0,0,350,351,5,119,0,0,351,58,1,0,
0,0,352,353,5,115,0,0,353,354,5,105,0,0,354,355,5,103,0,0,355,356,
5,109,0,0,356,60,1,0,0,0,357,358,5,99,0,0,358,359,5,108,0,0,359,
360,5,97,0,0,360,361,5,109,0,0,361,362,5,112,0,0,362,62,1,0,0,0,
363,364,5,102,0,0,364,365,5,102,0,0,365,366,5,116,0,0,366,64,1,0,
0,0,367,368,5,105,0,0,368,369,5,102,0,0,369,370,5,102,0,0,370,371,
5,116,0,0,371,66,1,0,0,0,372,373,5,97,0,0,373,374,5,110,0,0,374,
375,5,103,0,0,375,376,5,108,0,0,376,377,5,101,0,0,377,68,1,0,0,0,
378,379,5,112,0,0,379,380,5,114,0,0,380,381,5,105,0,0,381,382,5,
110,0,0,382,383,5,116,0,0,383,70,1,0,0,0,384,385,5,112,0,0,385,386,
5,114,0,0,386,387,5,105,0,0,387,388,5,110,0,0,388,389,5,116,0,0,
389,390,5,95,0,0,390,391,5,115,0,0,391,392,5,104,0,0,392,393,5,97,
0,0,393,394,5,112,0,0,394,400,5,101,0,0,395,396,5,112,0,0,396,397,
5,115,0,0,397,398,5,104,0,0,398,400,5,112,0,0,399,384,1,0,0,0,399,
395,1,0,0,0,400,72,1,0,0,0,401,402,5,110,0,0,402,403,5,118,0,0,403,
415,5,108,0,0,404,405,5,110,0,0,405,406,5,97,0,0,406,407,5,110,0,
0,407,408,5,95,0,0,408,409,5,116,0,0,409,410,5,111,0,0,410,411,5,
95,0,0,411,412,5,110,0,0,412,413,5,117,0,0,413,415,5,109,0,0,414,
401,1,0,0,0,414,404,1,0,0,0,415,74,1,0,0,0,416,417,5,108,0,0,417,
418,5,101,0,0,418,419,5,114,0,0,419,420,5,112,0,0,420,76,1,0,0,0,
421,422,5,115,0,0,422,423,5,116,0,0,423,424,5,101,0,0,424,425,5,
112,0,0,425,78,1,0,0,0,426,427,5,115,0,0,427,428,5,109,0,0,428,429,
5,111,0,0,429,430,5,111,0,0,430,431,5,116,0,0,431,432,5,104,0,0,
432,433,5,115,0,0,433,434,5,116,0,0,434,435,5,101,0,0,435,436,5,
112,0,0,436,80,1,0,0,0,437,438,5,102,0,0,438,439,5,114,0,0,439,440,
5,97,0,0,440,441,5,99,0,0,441,442,5,116,0,0,442,82,1,0,0,0,443,444,
5,114,0,0,444,445,5,101,0,0,445,446,5,108,0,0,446,447,5,117,0,0,
447,84,1,0,0,0,448,449,5,115,0,0,449,450,5,111,0,0,450,451,5,102,
0,0,451,452,5,116,0,0,452,453,5,112,0,0,453,454,5,108,0,0,454,455,
5,117,0,0,455,456,5,115,0,0,456,86,1,0,0,0,457,458,5,103,0,0,458,
459,5,101,0,0,459,460,5,108,0,0,460,461,5,117,0,0,461,88,1,0,0,0,
462,463,5,115,0,0,463,464,5,105,0,0,464,465,5,103,0,0,465,466,5,
110,0,0,466,90,1,0,0,0,467,468,5,109,0,0,468,469,5,97,0,0,469,470,
5,112,0,0,470,92,1,0,0,0,471,472,5,101,0,0,472,473,5,122,0,0,473,
474,5,99,0,0,474,475,5,111,0,0,475,476,5,110,0,0,476,477,5,118,0,
0,477,478,5,111,0,0,478,479,5,108,0,0,479,480,5,117,0,0,480,481,
5,116,0,0,481,482,5,105,0,0,482,483,5,111,0,0,483,491,5,110,0,0,
484,485,5,101,0,0,485,486,5,122,0,0,486,487,5,99,0,0,487,488,5,111,
0,0,488,489,5,110,0,0,489,491,5,118,0,0,490,471,1,0,0,0,490,484,
1,0,0,0,491,94,1,0,0,0,492,493,5,99,0,0,493,494,5,111,0,0,494,495,
5,110,0,0,495,496,5,118,0,0,496,497,5,111,0,0,497,498,5,108,0,0,
498,499,5,117,0,0,499,500,5,116,0,0,500,501,5,105,0,0,501,502,5,
111,0,0,502,508,5,110,0,0,503,504,5,99,0,0,504,505,5,111,0,0,505,
506,5,110,0,0,506,508,5,118,0,0,507,492,1,0,0,0,507,503,1,0,0,0,
508,96,1,0,0,0,509,510,5,115,0,0,510,511,5,119,0,0,511,512,5,97,
0,0,512,513,5,112,0,0,513,98,1,0,0,0,514,515,5,112,0,0,515,516,5,
101,0,0,516,517,5,114,0,0,517,518,5,109,0,0,518,519,5,117,0,0,519,
520,5,116,0,0,520,526,5,101,0,0,521,522,5,112,0,0,522,523,5,101,
0,0,523,524,5,114,0,0,524,526,5,109,0,0,525,514,1,0,0,0,525,521,
1,0,0,0,526,100,1,0,0,0,527,528,5,114,0,0,528,529,5,101,0,0,529,
530,5,115,0,0,530,531,5,104,0,0,531,532,5,97,0,0,532,533,5,112,0,
0,533,539,5,101,0,0,534,535,5,114,0,0,535,536,5,115,0,0,536,537,
5,104,0,0,537,539,5,112,0,0,538,527,1,0,0,0,538,534,1,0,0,0,539,
102,1,0,0,0,540,541,5,114,0,0,541,542,5,97,0,0,542,543,5,110,0,0,
543,544,5,103,0,0,544,545,5,101,0,0,545,104,1,0,0,0,546,547,5,116,
0,0,547,548,5,111,0,0,548,549,5,112,0,0,549,550,5,107,0,0,550,106,
1,0,0,0,551,552,5,98,0,0,552,553,5,111,0,0,553,554,5,116,0,0,554,
555,5,107,0,0,555,108,1,0,0,0,556,557,5,112,0,0,557,558,5,105,0,
0,558,559,5,110,0,0,559,560,5,118,0,0,560,110,1,0,0,0,561,562,5,
115,0,0,562,563,5,117,0,0,563,564,5,109,0,0,564,112,1,0,0,0,565,
566,5,109,0,0,566,567,5,101,0,0,567,568,5,97,0,0,568,569,5,110,0,
0,569,114,1,0,0,0,570,571,5,115,0,0,571,572,5,116,0,0,572,573,5,
100,0,0,573,116,1,0,0,0,574,575,5,118,0,0,575,576,5,97,0,0,576,577,
5,114,0,0,577,118,1,0,0,0,578,579,5,113,0,0,579,580,5,117,0,0,580,
581,5,97,0,0,581,582,5,114,0,0,582,583,5,116,0,0,583,584,5,105,0,
0,584,585,5,108,0,0,585,594,5,101,0,0,586,587,5,113,0,0,587,588,
5,117,0,0,588,589,5,97,0,0,589,590,5,114,0,0,590,591,5,116,0,0,591,
592,5,105,0,0,592,594,5,108,0,0,593,578,1,0,0,0,593,586,1,0,0,0,
594,120,1,0,0,0,595,596,5,112,0,0,596,597,5,101,0,0,597,598,5,114,
0,0,598,599,5,99,0,0,599,600,5,101,0,0,600,601,5,110,0,0,601,602,
5,116,0,0,602,603,5,105,0,0,603,604,5,108,0,0,604,611,5,101,0,0,
605,606,5,112,0,0,606,607,5,114,0,0,607,608,5,99,0,0,608,609,5,110,
0,0,609,611,5,116,0,0,610,595,1,0,0,0,610,605,1,0,0,0,611,122,1,
0,0,0,612,613,5,113,0,0,613,614,5,117,0,0,614,615,5,97,0,0,615,616,
5,110,0,0,616,617,5,116,0,0,617,618,5,105,0,0,618,619,5,108,0,0,
619,620,5,101,0,0,620,124,1,0,0,0,621,622,5,100,0,0,622,623,5,111,
0,0,623,624,5,116,0,0,624,126,1,0,0,0,625,626,5,109,0,0,626,627,
5,111,0,0,627,628,5,109,0,0,628,629,5,101,0,0,629,630,5,110,0,0,
630,631,5,116,0,0,631,128,1,0,0,0,632,633,5,110,0,0,633,634,5,111,
0,0,634,635,5,105,0,0,635,636,5,115,0,0,636,656,5,101,0,0,637,638,
5,114,0,0,638,639,5,97,0,0,639,640,5,110,0,0,640,641,5,100,0,0,641,
656,5,110,0,0,642,643,5,114,0,0,643,644,5,97,0,0,644,645,5,110,0,
0,645,646,5,100,0,0,646,647,5,111,0,0,647,648,5,109,0,0,648,649,
5,95,0,0,649,650,5,110,0,0,650,651,5,111,0,0,651,652,5,114,0,0,652,
653,5,109,0,0,653,654,5,97,0,0,654,656,5,108,0,0,655,632,1,0,0,0,
655,637,1,0,0,0,655,642,1,0,0,0,656,130,1,0,0,0,657,658,5,114,0,
0,658,659,5,97,0,0,659,660,5,110,0,0,660,681,5,100,0,0,661,662,5,
114,0,0,662,663,5,97,0,0,663,664,5,110,0,0,664,665,5,100,0,0,665,
681,5,117,0,0,666,667,5,114,0,0,667,668,5,97,0,0,668,669,5,110,0,
0,669,670,5,100,0,0,670,671,5,111,0,0,671,672,5,109,0,0,672,673,
5,95,0,0,673,674,5,117,0,0,674,675,5,110,0,0,675,676,5,105,0,0,676,
677,5,102,0,0,677,678,5,111,0,0,678,679,5,114,0,0,679,681,5,109,
0,0,680,657,1,0,0,0,680,661,1,0,0,0,680,666,1,0,0,0,681,132,1,0,
0,0,682,683,5,114,0,0,683,684,5,97,0,0,684,685,5,110,0,0,685,686,
5,100,0,0,686,701,5,99,0,0,687,688,5,114,0,0,688,689,5,97,0,0,689,
690,5,110,0,0,690,691,5,100,0,0,691,692,5,111,0,0,692,693,5,109,
0,0,693,694,5,95,0,0,694,695,5,99,0,0,695,696,5,97,0,0,696,697,5,
117,0,0,697,698,5,99,0,0,698,699,5,104,0,0,699,701,5,121,0,0,700,
682,1,0,0,0,700,687,1,0,0,0,701,134,1,0,0,0,702,703,5,114,0,0,703,
704,5,97,0,0,704,705,5,110,0,0,705,706,5,100,0,0,706,726,5,101,0,
0,707,708,5,114,0,0,708,709,5,97,0,0,709,710,5,110,0,0,710,711,5,
100,0,0,711,712,5,111,0,0,712,713,5,109,0,0,713,714,5,95,0,0,714,
715,5,101,0,0,715,716,5,120,0,0,716,717,5,112,0,0,717,718,5,111,
0,0,718,719,5,110,0,0,719,720,5,101,0,0,720,721,5,110,0,0,721,722,
5,116,0,0,722,723,5,105,0,0,723,724,5,97,0,0,724,726,5,108,0,0,725,
702,1,0,0,0,725,707,1,0,0,0,726,136,1,0,0,0,727,728,5,114,0,0,728,
729,5,97,0,0,729,730,5,110,0,0,730,731,5,100,0,0,731,732,5,108,0,
0,732,751,5,110,0,0,733,734,5,114,0,0,734,735,5,97,0,0,735,736,5,
110,0,0,736,737,5,100,0,0,737,738,5,111,0,0,738,739,5,109,0,0,739,
740,5,95,0,0,740,741,5,108,0,0,741,742,5,111,0,0,742,743,5,103,0,
0,743,744,5,95,0,0,744,745,5,110,0,0,745,746,5,111,0,0,746,747,5,
114,0,0,747,748,5,109,0,0,748,749,5,97,0,0,749,751,5,108,0,0,750,
727,1,0,0,0,750,733,1,0,0,0,751,138,1,0,0,0,752,753,5,114,0,0,753,
754,5,97,0,0,754,755,5,110,0,0,755,756,5,100,0,0,756,774,5,98,0,
0,757,758,5,114,0,0,758,759,5,97,0,0,759,760,5,110,0,0,760,761,5,
100,0,0,761,762,5,111,0,0,762,763,5,109,0,0,763,764,5,95,0,0,764,
765,5,98,0,0,765,766,5,101,0,0,766,767,5,114,0,0,767,768,5,110,0,
0,768,769,5,111,0,0,769,770,5,117,0,0,770,771,5,108,0,0,771,772,
5,108,0,0,772,774,5,105,0,0,773,752,1,0,0,0,773,757,1,0,0,0,774,
140,1,0,0,0,775,776,5,114,0,0,776,777,5,97,0,0,777,778,5,110,0,0,
778,779,5,100,0,0,779,795,5,112,0,0,780,781,5,114,0,0,781,782,5,
97,0,0,782,783,5,110,0,0,783,784,5,100,0,0,784,785,5,111,0,0,785,
786,5,109,0,0,786,787,5,95,0,0,787,788,5,112,0,0,788,789,5,111,0,
0,789,790,5,105,0,0,790,791,5,115,0,0,791,792,5,115,0,0,792,793,
5,111,0,0,793,795,5,110,0,0,794,775,1,0,0,0,794,780,1,0,0,0,795,
142,1,0,0,0,796,797,5,99,0,0,797,798,5,111,0,0,798,799,5,115,0,0,
799,800,5,115,0,0,800,801,5,105,0,0,801,802,5,109,0,0,802,144,1,
0,0,0,803,804,5,102,0,0,804,805,5,108,0,0,805,806,5,105,0,0,806,
807,5,112,0,0,807,146,1,0,0,0,808,809,5,99,0,0,809,810,5,111,0,0,
810,811,5,118,0,0,811,148,1,0,0,0,812,813,5,115,0,0,813,814,5,111,
0,0,814,815,5,114,0,0,815,816,5,116,0,0,816,150,1,0,0,0,817,818,
5,97,0,0,818,819,5,112,0,0,819,820,5,112,0,0,820,821,5,101,0,0,821,
822,5,110,0,0,822,823,5,100,0,0,823,152,1,0,0,0,824,825,5,43,0,0,
825,154,1,0,0,0,826,827,5,45,0,0,827,156,1,0,0,0,828,829,5,42,0,
0,829,158,1,0,0,0,830,831,5,47,0,0,831,160,1,0,0,0,832,833,5,37,
0,0,833,162,1,0,0,0,834,835,5,94,0,0,835,164,1,0,0,0,836,837,5,62,
0,0,837,838,5,61,0,0,838,166,1,0,0,0,839,840,5,62,0,0,840,168,1,
0,0,0,841,842,5,60,0,0,842,843,5,61,0,0,843,170,1,0,0,0,844,845,
5,60,0,0,845,172,1,0,0,0,846,847,5,61,0,0,847,848,5,61,0,0,848,174,
1,0,0,0,849,850,5,61,0,0,850,176,1,0,0,0,851,852,5,33,0,0,852,853,
5,61,0,0,853,178,1,0,0,0,854,855,5,124,0,0,855,180,1,0,0,0,856,857,
5,40,0,0,857,182,1,0,0,0,858,859,5,41,0,0,859,184,1,0,0,0,860,861,
5,44,0,0,861,186,1,0,0,0,862,863,5,59,0,0,863,188,1,0,0,0,864,865,
5,45,0,0,865,866,5,62,0,0,866,190,1,0,0,0,867,868,5,91,0,0,868,192,
1,0,0,0,869,870,5,93,0,0,870,194,1,0,0,0,871,872,5,63,0,0,872,196,
1,0,0,0,873,874,5,58,0,0,874,198,1,0,0,0,875,876,5,112,0,0,876,881,
5,105,0,0,877,878,5,80,0,0,878,881,5,73,0,0,879,881,7,0,0,0,880,
875,1,0,0,0,880,877,1,0,0,0,880,879,1,0,0,0,881,200,1,0,0,0,882,
884,7,1,0,0,883,882,1,0,0,0,884,885,1,0,0,0,885,883,1,0,0,0,885,
886,1,0,0,0,886,893,1,0,0,0,887,889,5,46,0,0,888,890,7,1,0,0,889,
888,1,0,0,0,890,891,1,0,0,0,891,889,1,0,0,0,891,892,1,0,0,0,892,
894,1,0,0,0,893,887,1,0,0,0,893,894,1,0,0,0,894,202,1,0,0,0,895,
899,7,2,0,0,896,898,7,3,0,0,897,896,1,0,0,0,898,901,1,0,0,0,899,
897,1,0,0,0,899,900,1,0,0,0,900,204,1,0,0,0,901,899,1,0,0,0,902,
904,7,4,0,0,903,902,1,0,0,0,904,905,1,0,0,0,905,903,1,0,0,0,905,
906,1,0,0,0,906,907,1,0,0,0,907,908,6,102,0,0,908,206,1,0,0,0,22,
0,399,414,490,507,525,538,593,610,655,680,700,725,750,773,794,880,
885,891,893,899,905,1,6,0,0
]
class MathExprLexer(Lexer):
@@ -437,10 +440,12 @@ class MathExprLexer(Lexer):
ARROW = 95
LBRACKET = 96
RBRACKET = 97
CONSTANT = 98
NUMBER = 99
VARIABLE = 100
WS = 101
QUESTION = 98
COLON = 99
CONSTANT = 100
NUMBER = 101
VARIABLE = 102
WS = 103
channelNames = [ u"DEFAULT_TOKEN_CHANNEL", u"HIDDEN" ]
@@ -459,7 +464,7 @@ class MathExprLexer(Lexer):
"'cossim'", "'flip'", "'cov'", "'sort'", "'append'", "'+'",
"'-'", "'*'", "'/'", "'%'", "'^'", "'>='", "'>'", "'<='", "'<'",
"'=='", "'='", "'!='", "'|'", "'('", "')'", "','", "';'", "'->'",
"'['", "']'" ]
"'['", "']'", "'?'", "':'" ]
symbolicNames = [ "<INVALID>",
"SIN", "COS", "TAN", "ASIN", "ACOS", "ATAN", "ATAN2", "SINH",
@@ -475,7 +480,8 @@ class MathExprLexer(Lexer):
"COSSIM", "FLIP", "COV", "SORT", "APPEND", "PLUS", "MINUS",
"MULT", "DIV", "MOD", "POW", "GE", "GT", "LE", "LT", "EQ", "EQUEALS",
"NE", "PIPE", "LPAREN", "RPAREN", "COMMA", "SEMICOLON", "ARROW",
"LBRACKET", "RBRACKET", "CONSTANT", "NUMBER", "VARIABLE", "WS" ]
"LBRACKET", "RBRACKET", "QUESTION", "COLON", "CONSTANT", "NUMBER",
"VARIABLE", "WS" ]
ruleNames = [ "SIN", "COS", "TAN", "ASIN", "ACOS", "ATAN", "ATAN2",
"SINH", "COSH", "TANH", "ASINH", "ACOSH", "ATANH", "ABS",
@@ -491,8 +497,8 @@ class MathExprLexer(Lexer):
"COV", "SORT", "APPEND", "PLUS", "MINUS", "MULT", "DIV",
"MOD", "POW", "GE", "GT", "LE", "LT", "EQ", "EQUEALS",
"NE", "PIPE", "LPAREN", "RPAREN", "COMMA", "SEMICOLON",
"ARROW", "LBRACKET", "RBRACKET", "CONSTANT", "NUMBER",
"VARIABLE", "WS" ]
"ARROW", "LBRACKET", "RBRACKET", "QUESTION", "COLON",
"CONSTANT", "NUMBER", "VARIABLE", "WS" ]
grammarFileName = "MathExpr.g4"
+8 -4
View File
@@ -95,10 +95,12 @@ SEMICOLON=94
ARROW=95
LBRACKET=96
RBRACKET=97
CONSTANT=98
NUMBER=99
VARIABLE=100
WS=101
QUESTION=98
COLON=99
CONSTANT=100
NUMBER=101
VARIABLE=102
WS=103
'sin'=1
'cos'=2
'tan'=3
@@ -181,3 +183,5 @@ WS=101
'->'=95
'['=96
']'=97
'?'=98
':'=99
File diff suppressed because it is too large Load Diff
+5
View File
@@ -34,6 +34,11 @@ class MathExprVisitor(ParseTreeVisitor):
return self.visitChildren(ctx)
# Visit a parse tree produced by MathExprParser#TernaryExp.
def visitTernaryExp(self, ctx:MathExprParser.TernaryExpContext):
return self.visitChildren(ctx)
# Visit a parse tree produced by MathExprParser#LtExp.
def visitLtExp(self, ctx:MathExprParser.LtExpContext):
return self.visitChildren(ctx)
+33
View File
@@ -150,6 +150,38 @@ class UnifiedMathVisitor(MathExprVisitor):
def visitToAtom(self, ctx):
return self.visit(ctx.atom())
def visitTernaryExp(self, ctx):
condition = self.visit(ctx.compExpr())
if self._is_tensor(condition):
true_val = self.visit(ctx.expr(0))
false_val = self.visit(ctx.expr(1))
true_t = self._promote_to_tensor(true_val)
false_t = self._promote_to_tensor(false_val)
cond_t = torch.isclose(condition, torch.tensor(0.0, device=self.device)) == False
return torch.where(cond_t, true_t, false_t).contiguous()
if self._is_list(condition):
res = []
cache_true = None
cache_false = None
for i, c in enumerate(condition):
if c:
if cache_true is None:
cache_true = self.visit(ctx.expr(0))
res.append(cache_true)
else:
if cache_false is None:
cache_false = self.visit(ctx.expr(1))
res.append(cache_false)
return res
if condition:
return self.visit(ctx.expr(0))
else:
return self.visit(ctx.expr(1))
# Binary Ops
def visitAddExp(self, ctx):
return self._bin_op(self.visit(ctx.addExpr()), self.visit(ctx.mulExpr()), torch.add, lambda a, b: a + b)
@@ -747,6 +779,7 @@ class UnifiedMathVisitor(MathExprVisitor):
p_raw = self.visit(ctx.expr(1))
if self._is_tensor(p_raw):
# p is 0-100. q = p / 100
# p is 0-100. q = p / 100
return self._quartile_helper(val, p_raw.float() / 100.0)
if self._is_list(p_raw):