From dae36a92c0eb757a7ef5d540fdbf1be2460bac8f Mon Sep 17 00:00:00 2001 From: Daniel Miller Date: Wed, 8 Jul 2015 23:50:14 -0400 Subject: [PATCH] Update grammar and models to fix failing tests All tests now pass! The old filter_expr rules failed with a reduce-reduce conflict in the default LALR(1) mode due to a bug in jison: https://github.com/zaach/jison/issues/205 $ jison src/xpath.jison src/xpath.jisonlex ... States with conflicts: State 3 expr -> base_expr . #lookaheads= EOF OR... filter_expr -> base_expr . #lookaheads= ... Aside: the old grammar (with filter_expr uncommented) did work in LR(1) mode, but it takes a LOOOOOONG time to generate which is annoying. $ jison -p lr src/xpath.jison src/xpath.jisonlex --- models.js | 35 ++++++++++ src/xpath.jison | 42 ++++++++---- test/generatortests.js | 2 +- xpath.js | 144 ++++++++++++++++++++++++++--------------- 4 files changed, 157 insertions(+), 66 deletions(-) diff --git a/models.js b/models.js index e2e5c77..a806d77 100644 --- a/models.js +++ b/models.js @@ -271,6 +271,9 @@ debuglog = function () { // the two methods below it can call itx var parts = self.steps.map(func), ret = [], curPart, prevPart, sep; var root = (self.initial_context === xpm.XPathInitialContextEnum.ROOT) ? "/" : ""; + if (self.filter) { + parts.splice(0, 0, func(self.filter)); + } if (parts.length === 0) { return root; } @@ -328,6 +331,38 @@ debuglog = function () { }; + xpm.XPathFilterExpr = function (definition) { + /** + * Representation of an xpath filter expression. + */ + this.expr = definition.expr; + this.predicates = definition.predicates || []; + this.toString = function() { + var stringArray = []; + stringArray.push("{filt-expr:", this.expr.toString(), ",{"); + stringArray.push(this.predicates.join(",")); + stringArray.push("}}"); + return stringArray.join(""); + }; + this.toXPath = function() { + var predicates = ""; + if (this.predicates.length > 0) { + predicates = "[" + this.predicates.map(objToXPath).join("][") + "]"; + } + var expr = objToXPath(this.expr); + // FIXME should all non-function expressions be parenthesized? + if (!(this.expr instanceof xpm.XPathFuncExpr)) { + expr = "(" + expr + ")"; + } + return expr + predicates; + }; + this.getChildren = function () { + return this.predicates; + }; + return this; + }; + + // expressions xpm.XPathExpressionTypeEnum = { diff --git a/src/xpath.jison b/src/xpath.jison index 6c4a422..9883f0b 100644 --- a/src/xpath.jison +++ b/src/xpath.jison @@ -35,6 +35,7 @@ xpath_expr: expr EOF { return $1; } expr: base_expr { $$ = $1; } /* not necessary as this is the default */ | op_expr { $$ = $1; } | path_expr { $$ = $1; } + | filter_expr { $$ = $1; } ; base_expr: LPAREN expr RPAREN { $$ = $2; } @@ -71,22 +72,37 @@ arg_list: arg_list COMMA expr { var args = $1; ; path_expr: loc_path - ; - -/* This is commented out because there might be a bug in jison that thinks this is ambiguous - * when in fact it's not. The first group belongs as part of the path_expr. The second should - * be added as a new filter_expr. - */ - -/* - | filter_expr SLASH rel_loc_path { $$ = "fe.unwrapPathExpr(rlp)"; } - | filter_expr DBL_SLASH rel_loc_path { $$ = "fe.unwrapPathExpr(Vprepend(rlp, xpathmodels.XPathStep.ABBR_DESCENDANTS()))"; } + | filter_expr SLASH rel_loc_path { $$ = new xpathmodels.XPathPathExpr({ + initial_context: xpathmodels.XPathInitialContextEnum.EXPR, + filter: $1, steps: $3}); } + | filter_expr DBL_SLASH rel_loc_path { var steps = $3; + steps.splice(0, 0, new xpathmodels.XPathStep({ + axis: xpathmodels.XPathAxisEnum.DESCENDANT_OR_SELF, + test: xpathmodels.XPathTestEnum.TYPE_NODE})); + $$ = new xpathmodels.XPathPathExpr({ + initial_context: xpathmodels.XPathInitialContextEnum.EXPR, + filter: $1, steps: steps}); } + | base_expr SLASH rel_loc_path { // could eliminate filterExpr wrapper, but this makes tests pass as-is + var filterExpr = new xpathmodels.XPathFilterExpr({expr: $1}); + $$ = new xpathmodels.XPathPathExpr({ + initial_context: xpathmodels.XPathInitialContextEnum.EXPR, + filter: filterExpr, steps: $3}); } + | base_expr DBL_SLASH rel_loc_path { var steps = $3; + // could eliminate filterExpr wrapper, but this makes tests pass as-is + var filterExpr = new xpathmodels.XPathFilterExpr({expr: $1}); + steps.splice(0, 0, new xpathmodels.XPathStep({ + axis: xpathmodels.XPathAxisEnum.DESCENDANT_OR_SELF, + test: xpathmodels.XPathTestEnum.TYPE_NODE})); + $$ = new xpathmodels.XPathPathExpr({ + initial_context: xpathmodels.XPathInitialContextEnum.EXPR, + filter: filterExpr, steps: steps}); } ; -filter_expr: filter_expr predicate { $$ = "Vappend(fe.v, p); RESULT = fe;" } -| base_expr { $$ = "new vectorWrapper(be);"; } ***** THIS IS THE LINE THAT BREAKS ***** +filter_expr: base_expr predicate { $$ = new xpathmodels.XPathFilterExpr({expr: $1, predicates: [$2]}); } + | filter_expr predicate { var filterExpr = $1; + filterExpr.predicates.push($2); + $$ = filterExpr; } ; -*/ predicate: LBRACK expr RBRACK { $$ = $2; } ; diff --git a/test/generatortests.js b/test/generatortests.js index 6edbfb5..2f6cd24 100644 --- a/test/generatortests.js +++ b/test/generatortests.js @@ -142,7 +142,7 @@ test("generator function calls that are actually node tests", function () { test("generator filter expressions", function () { runGeneratorTests({ "bunch-o-nodes()[3]": "bunch-o-nodes()[3]", - "bunch-o-nodes()[3]['predicates'!='galore']": "bunch-o-nodes()[3]['predicates'!='galore']", + "bunch-o-nodes()[3]['predicates'!='galore']": "bunch-o-nodes()[3]['predicates' != 'galore']", "(bunch-o-nodes)[3]": "(bunch-o-nodes)[3]", "bunch-o-nodes[3]": "bunch-o-nodes[3]", }); diff --git a/xpath.js b/xpath.js index c5a1355..5de0d67 100644 --- a/xpath.js +++ b/xpath.js @@ -72,12 +72,12 @@ } */ var xpath = (function(){ -var o=function(k,v,o,l){for(o=o||{},l=k.length;l--;o[k[l]]=v);return o},$V0=[1,6],$V1=[1,8],$V2=[1,10],$V3=[1,12],$V4=[1,16],$V5=[1,17],$V6=[1,20],$V7=[1,21],$V8=[1,31],$V9=[1,25],$Va=[1,26],$Vb=[1,27],$Vc=[1,28],$Vd=[1,29],$Ve=[1,30],$Vf=[1,13],$Vg=[1,14],$Vh=[1,33],$Vi=[1,34],$Vj=[1,35],$Vk=[1,36],$Vl=[1,37],$Vm=[1,38],$Vn=[1,39],$Vo=[1,40],$Vp=[1,41],$Vq=[1,42],$Vr=[1,43],$Vs=[1,44],$Vt=[1,45],$Vu=[1,46],$Vv=[5,10,14,15,16,17,18,19,20,21,22,23,24,25,26,27,30,34],$Vw=[5,10,14,15,16,17,18,19,20,21,22,23,24,25,26,27,30,33,34,36,37],$Vx=[2,46],$Vy=[1,50],$Vz=[1,51],$VA=[1,52],$VB=[1,54],$VC=[5,10,14,15,16,17,18,19,20,21,22,23,24,25,26,27,30,34,36,37],$VD=[28,47,48,49,50,51,52],$VE=[5,10,14,15,16,17,18,19,20,21,22,23,24,25,26,30,34],$VF=[5,10,14,15,16,17,30,34],$VG=[5,10,14,15,16,17,18,19,20,21,30,34],$VH=[5,10,14,15,16,17,18,19,20,21,22,23,30,34],$VI=[10,30]; +var o=function(k,v,o,l){for(o=o||{},l=k.length;l--;o[k[l]]=v);return o},$V0=[1,7],$V1=[1,9],$V2=[1,11],$V3=[1,13],$V4=[1,17],$V5=[1,18],$V6=[1,21],$V7=[1,22],$V8=[1,32],$V9=[1,26],$Va=[1,27],$Vb=[1,28],$Vc=[1,29],$Vd=[1,30],$Ve=[1,31],$Vf=[1,14],$Vg=[1,15],$Vh=[1,34],$Vi=[1,35],$Vj=[1,36],$Vk=[1,37],$Vl=[1,38],$Vm=[1,39],$Vn=[1,40],$Vo=[1,41],$Vp=[1,42],$Vq=[1,43],$Vr=[1,44],$Vs=[1,45],$Vt=[1,46],$Vu=[1,47],$Vv=[5,11,15,16,17,18,19,20,21,22,23,24,25,26,27,28,31,38],$Vw=[1,51],$Vx=[5,11,15,16,17,18,19,20,21,22,23,24,25,26,27,28,31,33,35,37,38],$Vy=[2,53],$Vz=[1,58],$VA=[1,59],$VB=[1,60],$VC=[1,62],$VD=[5,11,15,16,17,18,19,20,21,22,23,24,25,26,27,28,31,33,35,38],$VE=[29,48,49,50,51,52,53],$VF=[5,11,15,16,17,18,19,20,21,22,23,24,25,26,27,31,38],$VG=[5,11,15,16,17,18,31,38],$VH=[5,11,15,16,17,18,19,20,21,22,31,38],$VI=[5,11,15,16,17,18,19,20,21,22,23,24,31,38],$VJ=[11,31]; var parser = {trace: function trace() { }, yy: {}, -symbols_: {"error":2,"xpath_expr":3,"expr":4,"EOF":5,"base_expr":6,"op_expr":7,"path_expr":8,"LPAREN":9,"RPAREN":10,"func_call":11,"VAR":12,"literal":13,"OR":14,"AND":15,"EQ":16,"NEQ":17,"LT":18,"LTE":19,"GT":20,"GTE":21,"PLUS":22,"MINUS":23,"MULT":24,"DIV":25,"MOD":26,"UNION":27,"QNAME":28,"arg_list":29,"COMMA":30,"loc_path":31,"predicate":32,"LBRACK":33,"RBRACK":34,"rel_loc_path":35,"SLASH":36,"DBL_SLASH":37,"step":38,"step_unabbr":39,"DOT":40,"DBL_DOT":41,"step_body":42,"node_test":43,"axis_specifier":44,"DBL_COLON":45,"AT":46,"WILDCARD":47,"NSWILDCARD":48,"NODETYPE_NODE":49,"NODETYPE_TEXT":50,"NODETYPE_COMMENT":51,"NODETYPE_PROCINSTR":52,"STR":53,"NUM":54,"$accept":0,"$end":1}, -terminals_: {2:"error",5:"EOF",9:"LPAREN",10:"RPAREN",12:"VAR",14:"OR",15:"AND",16:"EQ",17:"NEQ",18:"LT",19:"LTE",20:"GT",21:"GTE",22:"PLUS",23:"MINUS",24:"MULT",25:"DIV",26:"MOD",27:"UNION",28:"QNAME",30:"COMMA",33:"LBRACK",34:"RBRACK",36:"SLASH",37:"DBL_SLASH",40:"DOT",41:"DBL_DOT",45:"DBL_COLON",46:"AT",47:"WILDCARD",48:"NSWILDCARD",49:"NODETYPE_NODE",50:"NODETYPE_TEXT",51:"NODETYPE_COMMENT",52:"NODETYPE_PROCINSTR",53:"STR",54:"NUM"}, -productions_: [0,[3,2],[4,1],[4,1],[4,1],[6,3],[6,1],[6,1],[6,1],[7,3],[7,3],[7,3],[7,3],[7,3],[7,3],[7,3],[7,3],[7,3],[7,3],[7,3],[7,3],[7,3],[7,2],[7,3],[11,4],[11,3],[29,3],[29,1],[8,1],[32,3],[31,1],[31,2],[31,2],[31,1],[35,1],[35,3],[35,3],[38,1],[38,1],[38,1],[39,2],[39,1],[42,1],[42,2],[44,2],[44,1],[43,1],[43,1],[43,1],[43,3],[43,3],[43,3],[43,3],[43,4],[13,1],[13,1]], +symbols_: {"error":2,"xpath_expr":3,"expr":4,"EOF":5,"base_expr":6,"op_expr":7,"path_expr":8,"filter_expr":9,"LPAREN":10,"RPAREN":11,"func_call":12,"VAR":13,"literal":14,"OR":15,"AND":16,"EQ":17,"NEQ":18,"LT":19,"LTE":20,"GT":21,"GTE":22,"PLUS":23,"MINUS":24,"MULT":25,"DIV":26,"MOD":27,"UNION":28,"QNAME":29,"arg_list":30,"COMMA":31,"loc_path":32,"SLASH":33,"rel_loc_path":34,"DBL_SLASH":35,"predicate":36,"LBRACK":37,"RBRACK":38,"step":39,"step_unabbr":40,"DOT":41,"DBL_DOT":42,"step_body":43,"node_test":44,"axis_specifier":45,"DBL_COLON":46,"AT":47,"WILDCARD":48,"NSWILDCARD":49,"NODETYPE_NODE":50,"NODETYPE_TEXT":51,"NODETYPE_COMMENT":52,"NODETYPE_PROCINSTR":53,"STR":54,"NUM":55,"$accept":0,"$end":1}, +terminals_: {2:"error",5:"EOF",10:"LPAREN",11:"RPAREN",13:"VAR",15:"OR",16:"AND",17:"EQ",18:"NEQ",19:"LT",20:"LTE",21:"GT",22:"GTE",23:"PLUS",24:"MINUS",25:"MULT",26:"DIV",27:"MOD",28:"UNION",29:"QNAME",31:"COMMA",33:"SLASH",35:"DBL_SLASH",37:"LBRACK",38:"RBRACK",41:"DOT",42:"DBL_DOT",46:"DBL_COLON",47:"AT",48:"WILDCARD",49:"NSWILDCARD",50:"NODETYPE_NODE",51:"NODETYPE_TEXT",52:"NODETYPE_COMMENT",53:"NODETYPE_PROCINSTR",54:"STR",55:"NUM"}, +productions_: [0,[3,2],[4,1],[4,1],[4,1],[4,1],[6,3],[6,1],[6,1],[6,1],[7,3],[7,3],[7,3],[7,3],[7,3],[7,3],[7,3],[7,3],[7,3],[7,3],[7,3],[7,3],[7,3],[7,2],[7,3],[12,4],[12,3],[30,3],[30,1],[8,1],[8,3],[8,3],[8,3],[8,3],[9,2],[9,2],[36,3],[32,1],[32,2],[32,2],[32,1],[34,1],[34,3],[34,3],[39,1],[39,1],[39,1],[40,2],[40,1],[43,1],[43,2],[45,2],[45,1],[44,1],[44,1],[44,1],[44,3],[44,3],[44,3],[44,3],[44,4],[14,1],[14,1]], performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate /* action[1] */, $$ /* vstack */, _$ /* lstack */) { /* this == yyval */ @@ -86,83 +86,123 @@ switch (yystate) { case 1: return $$[$0-1]; break; -case 2: case 3: case 4: +case 2: case 3: case 4: case 5: this.$ = $$[$0]; break; -case 5: case 29: +case 6: case 36: this.$ = $$[$0-1]; break; -case 7: +case 8: this.$ = new xpathmodels.XPathVariableReference($$[$0]); break; -case 9: +case 10: this.$ = new xpathmodels.XPathBoolExpr({"type": "or", "left": $$[$0-2], "right": $$[$0]}); break; -case 10: +case 11: this.$ = new xpathmodels.XPathBoolExpr({"type": "and", "left": $$[$0-2], "right": $$[$0]}); break; -case 11: +case 12: this.$ = new xpathmodels.XPathEqExpr({"type": "==", "left": $$[$0-2], "right": $$[$0]}); break; -case 12: +case 13: this.$ = new xpathmodels.XPathEqExpr({"type": "!=", "left": $$[$0-2], "right": $$[$0]}); break; -case 13: +case 14: this.$ = new xpathmodels.XPathCmpExpr({"type": "<", "left":$$[$0-2], "right": $$[$0]}); break; -case 14: +case 15: this.$ = new xpathmodels.XPathCmpExpr({"type": "<=", "left":$$[$0-2], "right": $$[$0]}); break; -case 15: +case 16: this.$ = new xpathmodels.XPathCmpExpr({"type": ">", "left":$$[$0-2], "right": $$[$0]}); break; -case 16: +case 17: this.$ = new xpathmodels.XPathCmpExpr({"type": ">=", "left":$$[$0-2], "right": $$[$0]}); break; -case 17: +case 18: this.$ = new xpathmodels.XPathArithExpr({"type": "+", "left":$$[$0-2], "right": $$[$0]}); break; -case 18: +case 19: this.$ = new xpathmodels.XPathArithExpr({"type": "-", "left":$$[$0-2], "right": $$[$0]}); break; -case 19: +case 20: this.$ = new xpathmodels.XPathArithExpr({"type": "*", "left":$$[$0-2], "right": $$[$0]}); break; -case 20: +case 21: this.$ = new xpathmodels.XPathArithExpr({"type": "/", "left":$$[$0-2], "right": $$[$0]}); break; -case 21: +case 22: this.$ = new xpathmodels.XPathArithExpr({"type": "%", "left":$$[$0-2], "right": $$[$0]}); break; -case 22: +case 23: this.$ = new xpathmodels.XPathNumNegExpr({"type": "num-neg", "value":$$[$0]}); break; -case 23: +case 24: this.$ = new xpathmodels.XPathUnionExpr({"type": "union", "left":$$[$0-2], "right": $$[$0]}); break; -case 24: +case 25: this.$ = new xpathmodels.XPathFuncExpr({id: $$[$0-3], args: $$[$0-1]}); break; -case 25: +case 26: this.$ = new xpathmodels.XPathFuncExpr({id: $$[$0-2], args: []}); break; -case 26: +case 27: var args = $$[$0-2]; args.push($$[$0]); this.$ = args; break; -case 27: +case 28: this.$ = [$$[$0]]; break; case 30: + this.$ = new xpathmodels.XPathPathExpr({ + initial_context: xpathmodels.XPathInitialContextEnum.EXPR, + filter: $$[$0-2], steps: $$[$0]}); +break; +case 31: + var steps = $$[$0]; + steps.splice(0, 0, new xpathmodels.XPathStep({ + axis: xpathmodels.XPathAxisEnum.DESCENDANT_OR_SELF, + test: xpathmodels.XPathTestEnum.TYPE_NODE})); + this.$ = new xpathmodels.XPathPathExpr({ + initial_context: xpathmodels.XPathInitialContextEnum.EXPR, + filter: $$[$0-2], steps: steps}); +break; +case 32: + // could eliminate filterExpr wrapper, but this makes tests pass as-is + var filterExpr = new xpathmodels.XPathFilterExpr({expr: $$[$0-2]}); + this.$ = new xpathmodels.XPathPathExpr({ + initial_context: xpathmodels.XPathInitialContextEnum.EXPR, + filter: filterExpr, steps: $$[$0]}); +break; +case 33: + var steps = $$[$0]; + // could eliminate filterExpr wrapper, but this makes tests pass as-is + var filterExpr = new xpathmodels.XPathFilterExpr({expr: $$[$0-2]}); + steps.splice(0, 0, new xpathmodels.XPathStep({ + axis: xpathmodels.XPathAxisEnum.DESCENDANT_OR_SELF, + test: xpathmodels.XPathTestEnum.TYPE_NODE})); + this.$ = new xpathmodels.XPathPathExpr({ + initial_context: xpathmodels.XPathInitialContextEnum.EXPR, + filter: filterExpr, steps: steps}); +break; +case 34: + this.$ = new xpathmodels.XPathFilterExpr({expr: $$[$0-1], predicates: [$$[$0]]}); +break; +case 35: + var filterExpr = $$[$0-1]; + filterExpr.predicates.push($$[$0]); + this.$ = filterExpr; +break; +case 37: this.$ = new xpathmodels.XPathPathExpr({initial_context: xpathmodels.XPathInitialContextEnum.RELATIVE, steps: $$[$0]}); break; -case 31: +case 38: this.$ = new xpathmodels.XPathPathExpr({initial_context: xpathmodels.XPathInitialContextEnum.ROOT, steps: $$[$0]}); break; -case 32: +case 39: var steps = $$[$0]; // insert descendant step into beginning steps.splice(0, 0, new xpathmodels.XPathStep({axis: xpathmodels.XPathAxisEnum.DESCENDANT_OR_SELF, @@ -170,91 +210,91 @@ case 32: this.$ = new xpathmodels.XPathPathExpr({initial_context: xpathmodels.XPathInitialContextEnum.ROOT, steps: steps}); break; -case 33: +case 40: this.$ = new xpathmodels.XPathPathExpr({initial_context: xpathmodels.XPathInitialContextEnum.ROOT, steps: []}); break; -case 34: +case 41: this.$ = [$$[$0]]; break; -case 35: +case 42: var path = $$[$0-2]; path.push($$[$0]); this.$ = path; break; -case 36: +case 43: var path = $$[$0-2]; path.push(new xpathmodels.XPathStep({axis: xpathmodels.XPathAxisEnum.DESCENDANT_OR_SELF, test: xpathmodels.XPathTestEnum.TYPE_NODE})); path.push($$[$0]); this.$ = path; break; -case 37: case 41: +case 44: case 48: this.$ = $$[$0]; break; -case 38: +case 45: this.$ = new xpathmodels.XPathStep({axis: xpathmodels.XPathAxisEnum.SELF, test: xpathmodels.XPathTestEnum.TYPE_NODE}); break; -case 39: +case 46: this.$ = new xpathmodels.XPathStep({axis: xpathmodels.XPathAxisEnum.PARENT, test: xpathmodels.XPathTestEnum.TYPE_NODE}); break; -case 40: +case 47: var step = $$[$0-1]; step.predicates.push($$[$0]); this.$ = step; break; -case 42: +case 49: var nodeTest = $$[$0]; // temporary dict with appropriate args nodeTest.axis = xpathmodels.XPathAxisEnum.CHILD; this.$ = new xpathmodels.XPathStep(nodeTest); break; -case 43: +case 50: var nodeTest = $$[$0]; // temporary dict with appropriate args nodeTest.axis = $$[$0-1]; // add axis this.$ = new xpathmodels.XPathStep(nodeTest); break; -case 44: +case 51: this.$ = xpathmodels.validateAxisName($$[$0-1]); break; -case 45: +case 52: this.$ = xpathmodels.XPathAxisEnum.ATTRIBUTE; break; -case 46: +case 53: this.$ = {"test": xpathmodels.XPathTestEnum.NAME, "name": $$[$0]}; break; -case 47: +case 54: this.$ = {"test": xpathmodels.XPathTestEnum.NAME_WILDCARD}; break; -case 48: +case 55: this.$ = {"test": xpathmodels.XPathTestEnum.NAMESPACE_WILDCARD, "namespace": $$[$0]}; break; -case 49: +case 56: this.$ = {"test": xpathmodels.XPathTestEnum.TYPE_NODE}; break; -case 50: +case 57: this.$ = {"test": xpathmodels.XPathTestEnum.TYPE_TEXT}; break; -case 51: +case 58: this.$ = {"test": xpathmodels.XPathTestEnum.TYPE_COMMENT}; break; -case 52: +case 59: this.$ = {"test": xpathmodels.XPathTestEnum.TYPE_PROCESSING_INSTRUCTION, "literal": null}; break; -case 53: +case 60: this.$ = {"test": xpathmodels.XPathTestEnum.TYPE_PROCESSING_INSTRUCTION, "literal": $$[$0-1]}; break; -case 54: +case 61: this.$ = new xpathmodels.XPathStringLiteral($$[$0]); break; -case 55: +case 62: this.$ = new xpathmodels.XPathNumericLiteral($$[$0]); break; } }, -table: [{3:1,4:2,6:3,7:4,8:5,9:$V0,11:7,12:$V1,13:9,23:$V2,28:$V3,31:11,35:15,36:$V4,37:$V5,38:18,39:19,40:$V6,41:$V7,42:22,43:23,44:24,46:$V8,47:$V9,48:$Va,49:$Vb,50:$Vc,51:$Vd,52:$Ve,53:$Vf,54:$Vg},{1:[3]},{5:[1,32],14:$Vh,15:$Vi,16:$Vj,17:$Vk,18:$Vl,19:$Vm,20:$Vn,21:$Vo,22:$Vp,23:$Vq,24:$Vr,25:$Vs,26:$Vt,27:$Vu},o($Vv,[2,2]),o($Vv,[2,3]),o($Vv,[2,4]),{4:47,6:3,7:4,8:5,9:$V0,11:7,12:$V1,13:9,23:$V2,28:$V3,31:11,35:15,36:$V4,37:$V5,38:18,39:19,40:$V6,41:$V7,42:22,43:23,44:24,46:$V8,47:$V9,48:$Va,49:$Vb,50:$Vc,51:$Vd,52:$Ve,53:$Vf,54:$Vg},o($Vv,[2,6]),o($Vv,[2,7]),o($Vv,[2,8]),{4:48,6:3,7:4,8:5,9:$V0,11:7,12:$V1,13:9,23:$V2,28:$V3,31:11,35:15,36:$V4,37:$V5,38:18,39:19,40:$V6,41:$V7,42:22,43:23,44:24,46:$V8,47:$V9,48:$Va,49:$Vb,50:$Vc,51:$Vd,52:$Ve,53:$Vf,54:$Vg},o($Vv,[2,28]),o($Vw,$Vx,{9:[1,49],45:$Vy}),o($Vv,[2,54]),o($Vv,[2,55]),o($Vv,[2,30],{36:$Vz,37:$VA}),o($Vv,[2,33],{38:18,39:19,42:22,43:23,44:24,35:53,28:$VB,40:$V6,41:$V7,46:$V8,47:$V9,48:$Va,49:$Vb,50:$Vc,51:$Vd,52:$Ve}),{28:$VB,35:55,38:18,39:19,40:$V6,41:$V7,42:22,43:23,44:24,46:$V8,47:$V9,48:$Va,49:$Vb,50:$Vc,51:$Vd,52:$Ve},o($VC,[2,34]),o($VC,[2,37],{32:56,33:[1,57]}),o($VC,[2,38]),o($VC,[2,39]),o($Vw,[2,41]),o($Vw,[2,42]),{28:[1,59],43:58,47:$V9,48:$Va,49:$Vb,50:$Vc,51:$Vd,52:$Ve},o($Vw,[2,47]),o($Vw,[2,48]),{9:[1,60]},{9:[1,61]},{9:[1,62]},{9:[1,63]},o($VD,[2,45]),{1:[2,1]},{4:64,6:3,7:4,8:5,9:$V0,11:7,12:$V1,13:9,23:$V2,28:$V3,31:11,35:15,36:$V4,37:$V5,38:18,39:19,40:$V6,41:$V7,42:22,43:23,44:24,46:$V8,47:$V9,48:$Va,49:$Vb,50:$Vc,51:$Vd,52:$Ve,53:$Vf,54:$Vg},{4:65,6:3,7:4,8:5,9:$V0,11:7,12:$V1,13:9,23:$V2,28:$V3,31:11,35:15,36:$V4,37:$V5,38:18,39:19,40:$V6,41:$V7,42:22,43:23,44:24,46:$V8,47:$V9,48:$Va,49:$Vb,50:$Vc,51:$Vd,52:$Ve,53:$Vf,54:$Vg},{4:66,6:3,7:4,8:5,9:$V0,11:7,12:$V1,13:9,23:$V2,28:$V3,31:11,35:15,36:$V4,37:$V5,38:18,39:19,40:$V6,41:$V7,42:22,43:23,44:24,46:$V8,47:$V9,48:$Va,49:$Vb,50:$Vc,51:$Vd,52:$Ve,53:$Vf,54:$Vg},{4:67,6:3,7:4,8:5,9:$V0,11:7,12:$V1,13:9,23:$V2,28:$V3,31:11,35:15,36:$V4,37:$V5,38:18,39:19,40:$V6,41:$V7,42:22,43:23,44:24,46:$V8,47:$V9,48:$Va,49:$Vb,50:$Vc,51:$Vd,52:$Ve,53:$Vf,54:$Vg},{4:68,6:3,7:4,8:5,9:$V0,11:7,12:$V1,13:9,23:$V2,28:$V3,31:11,35:15,36:$V4,37:$V5,38:18,39:19,40:$V6,41:$V7,42:22,43:23,44:24,46:$V8,47:$V9,48:$Va,49:$Vb,50:$Vc,51:$Vd,52:$Ve,53:$Vf,54:$Vg},{4:69,6:3,7:4,8:5,9:$V0,11:7,12:$V1,13:9,23:$V2,28:$V3,31:11,35:15,36:$V4,37:$V5,38:18,39:19,40:$V6,41:$V7,42:22,43:23,44:24,46:$V8,47:$V9,48:$Va,49:$Vb,50:$Vc,51:$Vd,52:$Ve,53:$Vf,54:$Vg},{4:70,6:3,7:4,8:5,9:$V0,11:7,12:$V1,13:9,23:$V2,28:$V3,31:11,35:15,36:$V4,37:$V5,38:18,39:19,40:$V6,41:$V7,42:22,43:23,44:24,46:$V8,47:$V9,48:$Va,49:$Vb,50:$Vc,51:$Vd,52:$Ve,53:$Vf,54:$Vg},{4:71,6:3,7:4,8:5,9:$V0,11:7,12:$V1,13:9,23:$V2,28:$V3,31:11,35:15,36:$V4,37:$V5,38:18,39:19,40:$V6,41:$V7,42:22,43:23,44:24,46:$V8,47:$V9,48:$Va,49:$Vb,50:$Vc,51:$Vd,52:$Ve,53:$Vf,54:$Vg},{4:72,6:3,7:4,8:5,9:$V0,11:7,12:$V1,13:9,23:$V2,28:$V3,31:11,35:15,36:$V4,37:$V5,38:18,39:19,40:$V6,41:$V7,42:22,43:23,44:24,46:$V8,47:$V9,48:$Va,49:$Vb,50:$Vc,51:$Vd,52:$Ve,53:$Vf,54:$Vg},{4:73,6:3,7:4,8:5,9:$V0,11:7,12:$V1,13:9,23:$V2,28:$V3,31:11,35:15,36:$V4,37:$V5,38:18,39:19,40:$V6,41:$V7,42:22,43:23,44:24,46:$V8,47:$V9,48:$Va,49:$Vb,50:$Vc,51:$Vd,52:$Ve,53:$Vf,54:$Vg},{4:74,6:3,7:4,8:5,9:$V0,11:7,12:$V1,13:9,23:$V2,28:$V3,31:11,35:15,36:$V4,37:$V5,38:18,39:19,40:$V6,41:$V7,42:22,43:23,44:24,46:$V8,47:$V9,48:$Va,49:$Vb,50:$Vc,51:$Vd,52:$Ve,53:$Vf,54:$Vg},{4:75,6:3,7:4,8:5,9:$V0,11:7,12:$V1,13:9,23:$V2,28:$V3,31:11,35:15,36:$V4,37:$V5,38:18,39:19,40:$V6,41:$V7,42:22,43:23,44:24,46:$V8,47:$V9,48:$Va,49:$Vb,50:$Vc,51:$Vd,52:$Ve,53:$Vf,54:$Vg},{4:76,6:3,7:4,8:5,9:$V0,11:7,12:$V1,13:9,23:$V2,28:$V3,31:11,35:15,36:$V4,37:$V5,38:18,39:19,40:$V6,41:$V7,42:22,43:23,44:24,46:$V8,47:$V9,48:$Va,49:$Vb,50:$Vc,51:$Vd,52:$Ve,53:$Vf,54:$Vg},{4:77,6:3,7:4,8:5,9:$V0,11:7,12:$V1,13:9,23:$V2,28:$V3,31:11,35:15,36:$V4,37:$V5,38:18,39:19,40:$V6,41:$V7,42:22,43:23,44:24,46:$V8,47:$V9,48:$Va,49:$Vb,50:$Vc,51:$Vd,52:$Ve,53:$Vf,54:$Vg},{10:[1,78],14:$Vh,15:$Vi,16:$Vj,17:$Vk,18:$Vl,19:$Vm,20:$Vn,21:$Vo,22:$Vp,23:$Vq,24:$Vr,25:$Vs,26:$Vt,27:$Vu},o($VE,[2,22],{27:$Vu}),{4:81,6:3,7:4,8:5,9:$V0,10:[1,80],11:7,12:$V1,13:9,23:$V2,28:$V3,29:79,31:11,35:15,36:$V4,37:$V5,38:18,39:19,40:$V6,41:$V7,42:22,43:23,44:24,46:$V8,47:$V9,48:$Va,49:$Vb,50:$Vc,51:$Vd,52:$Ve,53:$Vf,54:$Vg},o($VD,[2,44]),{28:$VB,38:82,39:19,40:$V6,41:$V7,42:22,43:23,44:24,46:$V8,47:$V9,48:$Va,49:$Vb,50:$Vc,51:$Vd,52:$Ve},{28:$VB,38:83,39:19,40:$V6,41:$V7,42:22,43:23,44:24,46:$V8,47:$V9,48:$Va,49:$Vb,50:$Vc,51:$Vd,52:$Ve},o($Vv,[2,31],{36:$Vz,37:$VA}),o($Vw,$Vx,{45:$Vy}),o($Vv,[2,32],{36:$Vz,37:$VA}),o($Vw,[2,40]),{4:84,6:3,7:4,8:5,9:$V0,11:7,12:$V1,13:9,23:$V2,28:$V3,31:11,35:15,36:$V4,37:$V5,38:18,39:19,40:$V6,41:$V7,42:22,43:23,44:24,46:$V8,47:$V9,48:$Va,49:$Vb,50:$Vc,51:$Vd,52:$Ve,53:$Vf,54:$Vg},o($Vw,[2,43]),o($Vw,$Vx),{10:[1,85]},{10:[1,86]},{10:[1,87]},{10:[1,88],53:[1,89]},o([5,10,30,34],[2,9],{14:$Vh,15:$Vi,16:$Vj,17:$Vk,18:$Vl,19:$Vm,20:$Vn,21:$Vo,22:$Vp,23:$Vq,24:$Vr,25:$Vs,26:$Vt,27:$Vu}),o([5,10,14,30,34],[2,10],{15:$Vi,16:$Vj,17:$Vk,18:$Vl,19:$Vm,20:$Vn,21:$Vo,22:$Vp,23:$Vq,24:$Vr,25:$Vs,26:$Vt,27:$Vu}),o($VF,[2,11],{18:$Vl,19:$Vm,20:$Vn,21:$Vo,22:$Vp,23:$Vq,24:$Vr,25:$Vs,26:$Vt,27:$Vu}),o($VF,[2,12],{18:$Vl,19:$Vm,20:$Vn,21:$Vo,22:$Vp,23:$Vq,24:$Vr,25:$Vs,26:$Vt,27:$Vu}),o($VG,[2,13],{22:$Vp,23:$Vq,24:$Vr,25:$Vs,26:$Vt,27:$Vu}),o($VG,[2,14],{22:$Vp,23:$Vq,24:$Vr,25:$Vs,26:$Vt,27:$Vu}),o($VG,[2,15],{22:$Vp,23:$Vq,24:$Vr,25:$Vs,26:$Vt,27:$Vu}),o($VG,[2,16],{22:$Vp,23:$Vq,24:$Vr,25:$Vs,26:$Vt,27:$Vu}),o($VH,[2,17],{24:$Vr,25:$Vs,26:$Vt,27:$Vu}),o($VH,[2,18],{24:$Vr,25:$Vs,26:$Vt,27:$Vu}),o($VE,[2,19],{27:$Vu}),o($VE,[2,20],{27:$Vu}),o($VE,[2,21],{27:$Vu}),o($Vv,[2,23]),o($Vv,[2,5]),{10:[1,90],30:[1,91]},o($Vv,[2,25]),o($VI,[2,27],{14:$Vh,15:$Vi,16:$Vj,17:$Vk,18:$Vl,19:$Vm,20:$Vn,21:$Vo,22:$Vp,23:$Vq,24:$Vr,25:$Vs,26:$Vt,27:$Vu}),o($VC,[2,35]),o($VC,[2,36]),{14:$Vh,15:$Vi,16:$Vj,17:$Vk,18:$Vl,19:$Vm,20:$Vn,21:$Vo,22:$Vp,23:$Vq,24:$Vr,25:$Vs,26:$Vt,27:$Vu,34:[1,92]},o($Vw,[2,49]),o($Vw,[2,50]),o($Vw,[2,51]),o($Vw,[2,52]),{10:[1,93]},o($Vv,[2,24]),{4:94,6:3,7:4,8:5,9:$V0,11:7,12:$V1,13:9,23:$V2,28:$V3,31:11,35:15,36:$V4,37:$V5,38:18,39:19,40:$V6,41:$V7,42:22,43:23,44:24,46:$V8,47:$V9,48:$Va,49:$Vb,50:$Vc,51:$Vd,52:$Ve,53:$Vf,54:$Vg},o($Vw,[2,29]),o($Vw,[2,53]),o($VI,[2,26],{14:$Vh,15:$Vi,16:$Vj,17:$Vk,18:$Vl,19:$Vm,20:$Vn,21:$Vo,22:$Vp,23:$Vq,24:$Vr,25:$Vs,26:$Vt,27:$Vu})], -defaultActions: {32:[2,1]}, +table: [{3:1,4:2,6:3,7:4,8:5,9:6,10:$V0,12:8,13:$V1,14:10,24:$V2,29:$V3,32:12,33:$V4,34:16,35:$V5,39:19,40:20,41:$V6,42:$V7,43:23,44:24,45:25,47:$V8,48:$V9,49:$Va,50:$Vb,51:$Vc,52:$Vd,53:$Ve,54:$Vf,55:$Vg},{1:[3]},{5:[1,33],15:$Vh,16:$Vi,17:$Vj,18:$Vk,19:$Vl,20:$Vm,21:$Vn,22:$Vo,23:$Vp,24:$Vq,25:$Vr,26:$Vs,27:$Vt,28:$Vu},o($Vv,[2,2],{36:50,33:[1,48],35:[1,49],37:$Vw}),o($Vv,[2,3]),o($Vv,[2,4]),o($Vv,[2,5],{36:54,33:[1,52],35:[1,53],37:$Vw}),{4:55,6:3,7:4,8:5,9:6,10:$V0,12:8,13:$V1,14:10,24:$V2,29:$V3,32:12,33:$V4,34:16,35:$V5,39:19,40:20,41:$V6,42:$V7,43:23,44:24,45:25,47:$V8,48:$V9,49:$Va,50:$Vb,51:$Vc,52:$Vd,53:$Ve,54:$Vf,55:$Vg},o($Vx,[2,7]),o($Vx,[2,8]),o($Vx,[2,9]),{4:56,6:3,7:4,8:5,9:6,10:$V0,12:8,13:$V1,14:10,24:$V2,29:$V3,32:12,33:$V4,34:16,35:$V5,39:19,40:20,41:$V6,42:$V7,43:23,44:24,45:25,47:$V8,48:$V9,49:$Va,50:$Vb,51:$Vc,52:$Vd,53:$Ve,54:$Vf,55:$Vg},o($Vv,[2,29]),o($Vx,$Vy,{10:[1,57],46:$Vz}),o($Vx,[2,61]),o($Vx,[2,62]),o($Vv,[2,37],{33:$VA,35:$VB}),o($Vv,[2,40],{39:19,40:20,43:23,44:24,45:25,34:61,29:$VC,41:$V6,42:$V7,47:$V8,48:$V9,49:$Va,50:$Vb,51:$Vc,52:$Vd,53:$Ve}),{29:$VC,34:63,39:19,40:20,41:$V6,42:$V7,43:23,44:24,45:25,47:$V8,48:$V9,49:$Va,50:$Vb,51:$Vc,52:$Vd,53:$Ve},o($VD,[2,41]),o($VD,[2,44],{36:64,37:$Vw}),o($VD,[2,45]),o($VD,[2,46]),o($Vx,[2,48]),o($Vx,[2,49]),{29:[1,66],44:65,48:$V9,49:$Va,50:$Vb,51:$Vc,52:$Vd,53:$Ve},o($Vx,[2,54]),o($Vx,[2,55]),{10:[1,67]},{10:[1,68]},{10:[1,69]},{10:[1,70]},o($VE,[2,52]),{1:[2,1]},{4:71,6:3,7:4,8:5,9:6,10:$V0,12:8,13:$V1,14:10,24:$V2,29:$V3,32:12,33:$V4,34:16,35:$V5,39:19,40:20,41:$V6,42:$V7,43:23,44:24,45:25,47:$V8,48:$V9,49:$Va,50:$Vb,51:$Vc,52:$Vd,53:$Ve,54:$Vf,55:$Vg},{4:72,6:3,7:4,8:5,9:6,10:$V0,12:8,13:$V1,14:10,24:$V2,29:$V3,32:12,33:$V4,34:16,35:$V5,39:19,40:20,41:$V6,42:$V7,43:23,44:24,45:25,47:$V8,48:$V9,49:$Va,50:$Vb,51:$Vc,52:$Vd,53:$Ve,54:$Vf,55:$Vg},{4:73,6:3,7:4,8:5,9:6,10:$V0,12:8,13:$V1,14:10,24:$V2,29:$V3,32:12,33:$V4,34:16,35:$V5,39:19,40:20,41:$V6,42:$V7,43:23,44:24,45:25,47:$V8,48:$V9,49:$Va,50:$Vb,51:$Vc,52:$Vd,53:$Ve,54:$Vf,55:$Vg},{4:74,6:3,7:4,8:5,9:6,10:$V0,12:8,13:$V1,14:10,24:$V2,29:$V3,32:12,33:$V4,34:16,35:$V5,39:19,40:20,41:$V6,42:$V7,43:23,44:24,45:25,47:$V8,48:$V9,49:$Va,50:$Vb,51:$Vc,52:$Vd,53:$Ve,54:$Vf,55:$Vg},{4:75,6:3,7:4,8:5,9:6,10:$V0,12:8,13:$V1,14:10,24:$V2,29:$V3,32:12,33:$V4,34:16,35:$V5,39:19,40:20,41:$V6,42:$V7,43:23,44:24,45:25,47:$V8,48:$V9,49:$Va,50:$Vb,51:$Vc,52:$Vd,53:$Ve,54:$Vf,55:$Vg},{4:76,6:3,7:4,8:5,9:6,10:$V0,12:8,13:$V1,14:10,24:$V2,29:$V3,32:12,33:$V4,34:16,35:$V5,39:19,40:20,41:$V6,42:$V7,43:23,44:24,45:25,47:$V8,48:$V9,49:$Va,50:$Vb,51:$Vc,52:$Vd,53:$Ve,54:$Vf,55:$Vg},{4:77,6:3,7:4,8:5,9:6,10:$V0,12:8,13:$V1,14:10,24:$V2,29:$V3,32:12,33:$V4,34:16,35:$V5,39:19,40:20,41:$V6,42:$V7,43:23,44:24,45:25,47:$V8,48:$V9,49:$Va,50:$Vb,51:$Vc,52:$Vd,53:$Ve,54:$Vf,55:$Vg},{4:78,6:3,7:4,8:5,9:6,10:$V0,12:8,13:$V1,14:10,24:$V2,29:$V3,32:12,33:$V4,34:16,35:$V5,39:19,40:20,41:$V6,42:$V7,43:23,44:24,45:25,47:$V8,48:$V9,49:$Va,50:$Vb,51:$Vc,52:$Vd,53:$Ve,54:$Vf,55:$Vg},{4:79,6:3,7:4,8:5,9:6,10:$V0,12:8,13:$V1,14:10,24:$V2,29:$V3,32:12,33:$V4,34:16,35:$V5,39:19,40:20,41:$V6,42:$V7,43:23,44:24,45:25,47:$V8,48:$V9,49:$Va,50:$Vb,51:$Vc,52:$Vd,53:$Ve,54:$Vf,55:$Vg},{4:80,6:3,7:4,8:5,9:6,10:$V0,12:8,13:$V1,14:10,24:$V2,29:$V3,32:12,33:$V4,34:16,35:$V5,39:19,40:20,41:$V6,42:$V7,43:23,44:24,45:25,47:$V8,48:$V9,49:$Va,50:$Vb,51:$Vc,52:$Vd,53:$Ve,54:$Vf,55:$Vg},{4:81,6:3,7:4,8:5,9:6,10:$V0,12:8,13:$V1,14:10,24:$V2,29:$V3,32:12,33:$V4,34:16,35:$V5,39:19,40:20,41:$V6,42:$V7,43:23,44:24,45:25,47:$V8,48:$V9,49:$Va,50:$Vb,51:$Vc,52:$Vd,53:$Ve,54:$Vf,55:$Vg},{4:82,6:3,7:4,8:5,9:6,10:$V0,12:8,13:$V1,14:10,24:$V2,29:$V3,32:12,33:$V4,34:16,35:$V5,39:19,40:20,41:$V6,42:$V7,43:23,44:24,45:25,47:$V8,48:$V9,49:$Va,50:$Vb,51:$Vc,52:$Vd,53:$Ve,54:$Vf,55:$Vg},{4:83,6:3,7:4,8:5,9:6,10:$V0,12:8,13:$V1,14:10,24:$V2,29:$V3,32:12,33:$V4,34:16,35:$V5,39:19,40:20,41:$V6,42:$V7,43:23,44:24,45:25,47:$V8,48:$V9,49:$Va,50:$Vb,51:$Vc,52:$Vd,53:$Ve,54:$Vf,55:$Vg},{4:84,6:3,7:4,8:5,9:6,10:$V0,12:8,13:$V1,14:10,24:$V2,29:$V3,32:12,33:$V4,34:16,35:$V5,39:19,40:20,41:$V6,42:$V7,43:23,44:24,45:25,47:$V8,48:$V9,49:$Va,50:$Vb,51:$Vc,52:$Vd,53:$Ve,54:$Vf,55:$Vg},{29:$VC,34:85,39:19,40:20,41:$V6,42:$V7,43:23,44:24,45:25,47:$V8,48:$V9,49:$Va,50:$Vb,51:$Vc,52:$Vd,53:$Ve},{29:$VC,34:86,39:19,40:20,41:$V6,42:$V7,43:23,44:24,45:25,47:$V8,48:$V9,49:$Va,50:$Vb,51:$Vc,52:$Vd,53:$Ve},o($Vx,[2,34]),{4:87,6:3,7:4,8:5,9:6,10:$V0,12:8,13:$V1,14:10,24:$V2,29:$V3,32:12,33:$V4,34:16,35:$V5,39:19,40:20,41:$V6,42:$V7,43:23,44:24,45:25,47:$V8,48:$V9,49:$Va,50:$Vb,51:$Vc,52:$Vd,53:$Ve,54:$Vf,55:$Vg},{29:$VC,34:88,39:19,40:20,41:$V6,42:$V7,43:23,44:24,45:25,47:$V8,48:$V9,49:$Va,50:$Vb,51:$Vc,52:$Vd,53:$Ve},{29:$VC,34:89,39:19,40:20,41:$V6,42:$V7,43:23,44:24,45:25,47:$V8,48:$V9,49:$Va,50:$Vb,51:$Vc,52:$Vd,53:$Ve},o($Vx,[2,35]),{11:[1,90],15:$Vh,16:$Vi,17:$Vj,18:$Vk,19:$Vl,20:$Vm,21:$Vn,22:$Vo,23:$Vp,24:$Vq,25:$Vr,26:$Vs,27:$Vt,28:$Vu},o($VF,[2,23],{28:$Vu}),{4:93,6:3,7:4,8:5,9:6,10:$V0,11:[1,92],12:8,13:$V1,14:10,24:$V2,29:$V3,30:91,32:12,33:$V4,34:16,35:$V5,39:19,40:20,41:$V6,42:$V7,43:23,44:24,45:25,47:$V8,48:$V9,49:$Va,50:$Vb,51:$Vc,52:$Vd,53:$Ve,54:$Vf,55:$Vg},o($VE,[2,51]),{29:$VC,39:94,40:20,41:$V6,42:$V7,43:23,44:24,45:25,47:$V8,48:$V9,49:$Va,50:$Vb,51:$Vc,52:$Vd,53:$Ve},{29:$VC,39:95,40:20,41:$V6,42:$V7,43:23,44:24,45:25,47:$V8,48:$V9,49:$Va,50:$Vb,51:$Vc,52:$Vd,53:$Ve},o($Vv,[2,38],{33:$VA,35:$VB}),o($Vx,$Vy,{46:$Vz}),o($Vv,[2,39],{33:$VA,35:$VB}),o($Vx,[2,47]),o($Vx,[2,50]),o($Vx,$Vy),{11:[1,96]},{11:[1,97]},{11:[1,98]},{11:[1,99],54:[1,100]},o([5,11,31,38],[2,10],{15:$Vh,16:$Vi,17:$Vj,18:$Vk,19:$Vl,20:$Vm,21:$Vn,22:$Vo,23:$Vp,24:$Vq,25:$Vr,26:$Vs,27:$Vt,28:$Vu}),o([5,11,15,31,38],[2,11],{16:$Vi,17:$Vj,18:$Vk,19:$Vl,20:$Vm,21:$Vn,22:$Vo,23:$Vp,24:$Vq,25:$Vr,26:$Vs,27:$Vt,28:$Vu}),o($VG,[2,12],{19:$Vl,20:$Vm,21:$Vn,22:$Vo,23:$Vp,24:$Vq,25:$Vr,26:$Vs,27:$Vt,28:$Vu}),o($VG,[2,13],{19:$Vl,20:$Vm,21:$Vn,22:$Vo,23:$Vp,24:$Vq,25:$Vr,26:$Vs,27:$Vt,28:$Vu}),o($VH,[2,14],{23:$Vp,24:$Vq,25:$Vr,26:$Vs,27:$Vt,28:$Vu}),o($VH,[2,15],{23:$Vp,24:$Vq,25:$Vr,26:$Vs,27:$Vt,28:$Vu}),o($VH,[2,16],{23:$Vp,24:$Vq,25:$Vr,26:$Vs,27:$Vt,28:$Vu}),o($VH,[2,17],{23:$Vp,24:$Vq,25:$Vr,26:$Vs,27:$Vt,28:$Vu}),o($VI,[2,18],{25:$Vr,26:$Vs,27:$Vt,28:$Vu}),o($VI,[2,19],{25:$Vr,26:$Vs,27:$Vt,28:$Vu}),o($VF,[2,20],{28:$Vu}),o($VF,[2,21],{28:$Vu}),o($VF,[2,22],{28:$Vu}),o($Vv,[2,24]),o($Vv,[2,32],{33:$VA,35:$VB}),o($Vv,[2,33],{33:$VA,35:$VB}),{15:$Vh,16:$Vi,17:$Vj,18:$Vk,19:$Vl,20:$Vm,21:$Vn,22:$Vo,23:$Vp,24:$Vq,25:$Vr,26:$Vs,27:$Vt,28:$Vu,38:[1,101]},o($Vv,[2,30],{33:$VA,35:$VB}),o($Vv,[2,31],{33:$VA,35:$VB}),o($Vx,[2,6]),{11:[1,102],31:[1,103]},o($Vx,[2,26]),o($VJ,[2,28],{15:$Vh,16:$Vi,17:$Vj,18:$Vk,19:$Vl,20:$Vm,21:$Vn,22:$Vo,23:$Vp,24:$Vq,25:$Vr,26:$Vs,27:$Vt,28:$Vu}),o($VD,[2,42]),o($VD,[2,43]),o($Vx,[2,56]),o($Vx,[2,57]),o($Vx,[2,58]),o($Vx,[2,59]),{11:[1,104]},o($Vx,[2,36]),o($Vx,[2,25]),{4:105,6:3,7:4,8:5,9:6,10:$V0,12:8,13:$V1,14:10,24:$V2,29:$V3,32:12,33:$V4,34:16,35:$V5,39:19,40:20,41:$V6,42:$V7,43:23,44:24,45:25,47:$V8,48:$V9,49:$Va,50:$Vb,51:$Vc,52:$Vd,53:$Ve,54:$Vf,55:$Vg},o($Vx,[2,60]),o($VJ,[2,27],{15:$Vh,16:$Vi,17:$Vj,18:$Vk,19:$Vl,20:$Vm,21:$Vn,22:$Vo,23:$Vp,24:$Vq,25:$Vr,26:$Vs,27:$Vt,28:$Vu})], +defaultActions: {33:[2,1]}, parseError: function parseError(str, hash) { if (hash.recoverable) { this.trace(str);