diff --git a/build/command_parser.js b/build/command_parser.js index ad90c72..644fa73 100644 --- a/build/command_parser.js +++ b/build/command_parser.js @@ -72,12 +72,12 @@ } */ var command_parser = (function(){ -var o=function(k,v,o,l){for(o=o||{},l=k.length;l--;o[k[l]]=v);return o},$V0=[1,10],$V1=[1,11],$V2=[1,12],$V3=[1,13],$V4=[1,17],$V5=[1,20],$V6=[1,7],$V7=[1,6],$V8=[1,21],$V9=[1,22],$Va=[1,23],$Vb=[1,24],$Vc=[1,25],$Vd=[1,26],$Ve=[1,27],$Vf=[1,28],$Vg=[1,29],$Vh=[1,30],$Vi=[1,31],$Vj=[1,32],$Vk=[1,33],$Vl=[1,34],$Vm=[1,35],$Vn=[1,36],$Vo=[1,37],$Vp=[1,38],$Vq=[1,39],$Vr=[1,40],$Vs=[1,41],$Vt=[5,42,68],$Vu=[5,10,12,13,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,42,68],$Vv=[2,34],$Vw=[5,8,10,12,13,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,42,68],$Vx=[5,10,12,42,68],$Vy=[1,49],$Vz=[1,50],$VA=[1,51],$VB=[1,52],$VC=[1,53],$VD=[1,54],$VE=[1,55],$VF=[1,56],$VG=[1,57],$VH=[1,58],$VI=[1,59],$VJ=[1,60],$VK=[1,61],$VL=[1,62],$VM=[1,63],$VN=[1,64],$VO=[1,65],$VP=[1,66],$VQ=[5,10,12,13,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,42,68],$VR=[42,68]; +var o=function(k,v,o,l){for(o=o||{},l=k.length;l--;o[k[l]]=v);return o},$V0=[1,10],$V1=[1,11],$V2=[1,12],$V3=[1,13],$V4=[1,17],$V5=[1,20],$V6=[1,7],$V7=[1,6],$V8=[1,21],$V9=[1,22],$Va=[1,23],$Vb=[1,24],$Vc=[1,25],$Vd=[1,26],$Ve=[1,27],$Vf=[1,28],$Vg=[1,29],$Vh=[1,30],$Vi=[1,31],$Vj=[1,32],$Vk=[1,33],$Vl=[1,34],$Vm=[1,35],$Vn=[1,36],$Vo=[1,37],$Vp=[1,38],$Vq=[1,39],$Vr=[1,40],$Vs=[1,41],$Vt=[1,42],$Vu=[5,42,46,71],$Vv=[5,10,12,13,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,42,46,71],$Vw=[2,34],$Vx=[5,8,10,12,13,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,42,46,71],$Vy=[5,10,12,42,46,71],$Vz=[1,50],$VA=[1,51],$VB=[1,52],$VC=[1,53],$VD=[1,54],$VE=[1,55],$VF=[1,56],$VG=[1,57],$VH=[1,58],$VI=[1,59],$VJ=[1,60],$VK=[1,61],$VL=[1,62],$VM=[1,63],$VN=[1,64],$VO=[1,65],$VP=[1,66],$VQ=[1,67],$VR=[5,10,12,13,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,42,46,71],$VS=[42,71]; var parser = {trace: function trace () { }, yy: {}, -symbols_: {"error":2,"tag":3,"expression":4,"EOF":5,"e5":6,"leftExpression":7,"=":8,"e4":9,"+":10,"e3":11,"-":12,"*":13,"e2":14,"/":15,"%":16,"&":17,"|":18,"^":19,"SHL":20,"SHR":21,"L_OR":22,"L_AND":23,"EXP":24,"EQ":25,"NE":26,"LT":27,"LE":28,"GT":29,"GE":30,"?":31,":":32,"~":33,"!":34,"e1":35,"functionCall":36,"e0":37,"NUMBER":38,"reg":39,"counter":40,"(":41,")":42,"IDENTIFIER":43,".":44,"VAR":45,"A":46,"B":47,"C":48,"D":49,"E":50,"SR":51,"CTX":52,"SP":53,"PC":54,"GAS":55,"zkPC":56,"RR":57,"STEP":58,"HASHPOS":59,"RCX":60,"CNT_ARITH":61,"CNT_BINARY":62,"CNT_KECCAK_F":63,"CNT_MEM_ALIGN":64,"CNT_PADDING_PG":65,"CNT_POSEIDON_G":66,"expressionList":67,",":68,"$accept":0,"$end":1}, -terminals_: {2:"error",5:"EOF",8:"=",10:"+",12:"-",13:"*",15:"/",16:"%",17:"&",18:"|",19:"^",20:"SHL",21:"SHR",22:"L_OR",23:"L_AND",24:"EXP",25:"EQ",26:"NE",27:"LT",28:"LE",29:"GT",30:"GE",31:"?",32:":",33:"~",34:"!",38:"NUMBER",41:"(",42:")",43:"IDENTIFIER",44:".",45:"VAR",46:"A",47:"B",48:"C",49:"D",50:"E",51:"SR",52:"CTX",53:"SP",54:"PC",55:"GAS",56:"zkPC",57:"RR",58:"STEP",59:"HASHPOS",60:"RCX",61:"CNT_ARITH",62:"CNT_BINARY",63:"CNT_KECCAK_F",64:"CNT_MEM_ALIGN",65:"CNT_PADDING_PG",66:"CNT_POSEIDON_G",68:","}, -productions_: [0,[3,2],[4,1],[6,3],[6,1],[9,3],[9,3],[9,1],[11,3],[11,3],[11,3],[11,3],[11,3],[11,3],[11,3],[11,3],[11,3],[11,3],[11,3],[11,3],[11,3],[11,3],[11,3],[11,3],[11,3],[11,5],[11,1],[14,2],[14,2],[14,2],[14,2],[14,1],[35,1],[35,1],[37,1],[37,1],[37,1],[37,1],[37,3],[37,3],[7,2],[7,1],[39,1],[39,1],[39,1],[39,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],[36,4],[36,3],[67,3],[67,1]], +symbols_: {"error":2,"tag":3,"expression":4,"EOF":5,"e5":6,"leftExpression":7,"=":8,"e4":9,"+":10,"e3":11,"-":12,"*":13,"e2":14,"/":15,"%":16,"&":17,"|":18,"^":19,"SHL":20,"SHR":21,"L_OR":22,"L_AND":23,"EXP":24,"EQ":25,"NE":26,"LT":27,"LE":28,"GT":29,"GE":30,"?":31,":":32,"~":33,"!":34,"e1":35,"functionCall":36,"e0":37,"NUMBER":38,"reg":39,"counter":40,"(":41,")":42,"IDENTIFIER":43,".":44,"[":45,"]":46,"VAR":47,"A":48,"B":49,"C":50,"D":51,"E":52,"SR":53,"CTX":54,"SP":55,"PC":56,"GAS":57,"zkPC":58,"RR":59,"STEP":60,"HASHPOS":61,"RCX":62,"CNT_ARITH":63,"CNT_BINARY":64,"CNT_KECCAK_F":65,"CNT_SHA256_F":66,"CNT_MEM_ALIGN":67,"CNT_PADDING_PG":68,"CNT_POSEIDON_G":69,"expressionList":70,",":71,"$accept":0,"$end":1}, +terminals_: {2:"error",5:"EOF",8:"=",10:"+",12:"-",13:"*",15:"/",16:"%",17:"&",18:"|",19:"^",20:"SHL",21:"SHR",22:"L_OR",23:"L_AND",24:"EXP",25:"EQ",26:"NE",27:"LT",28:"LE",29:"GT",30:"GE",31:"?",32:":",33:"~",34:"!",38:"NUMBER",41:"(",42:")",43:"IDENTIFIER",44:".",45:"[",46:"]",47:"VAR",48:"A",49:"B",50:"C",51:"D",52:"E",53:"SR",54:"CTX",55:"SP",56:"PC",57:"GAS",58:"zkPC",59:"RR",60:"STEP",61:"HASHPOS",62:"RCX",63:"CNT_ARITH",64:"CNT_BINARY",65:"CNT_KECCAK_F",66:"CNT_SHA256_F",67:"CNT_MEM_ALIGN",68:"CNT_PADDING_PG",69:"CNT_POSEIDON_G",71:","}, +productions_: [0,[3,2],[4,1],[6,3],[6,1],[9,3],[9,3],[9,1],[11,3],[11,3],[11,3],[11,3],[11,3],[11,3],[11,3],[11,3],[11,3],[11,3],[11,3],[11,3],[11,3],[11,3],[11,3],[11,3],[11,3],[11,5],[11,1],[14,2],[14,2],[14,2],[14,2],[14,1],[35,1],[35,1],[37,1],[37,1],[37,1],[37,1],[37,3],[37,3],[37,6],[7,2],[7,1],[39,1],[39,1],[39,1],[39,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],[40,1],[36,4],[36,3],[70,3],[70,1]], performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate /* action[1] */, $$ /* vstack */, _$ /* lstack */) { /* this == yyval */ @@ -237,43 +237,48 @@ case 38: break; case 39: - this.$ = {op: "getData", module: $$[$0-2], offset: $$[$0]} + this.$ = {op: "getData", module: $$[$0-2], offset: $$[$0], arrayOffset: 0} break; case 40: - this.$ = {op: "declareVar", varName: $$[$0]} + this.$ = {op: "getData", module: $$[$0-5], offset: $$[$0-3], arrayOffset: $$[$0-1]} break; case 41: + this.$ = {op: "declareVar", varName: $$[$0]} + +break; +case 42: + this.$ = {op: "getVar", varName: $$[$0]} break; -case 63: +case 65: this.$ = {op: "functionCall", funcName: $$[$0-3], params: $$[$0-1]} break; -case 64: +case 66: this.$ = {op: "functionCall", funcName: $$[$0-2], params: []} break; -case 65: +case 67: $$[$0-2].push($$[$0]); break; -case 66: +case 68: this.$ = [$$[$0]]; break; } }, -table: [{3:1,4:2,6:3,7:4,9:5,10:$V0,11:8,12:$V1,14:9,33:$V2,34:$V3,35:14,36:15,37:16,38:$V4,39:18,40:19,41:$V5,43:$V6,45:$V7,46:$V8,47:$V9,48:$Va,49:$Vb,50:$Vc,51:$Vd,52:$Ve,53:$Vf,54:$Vg,55:$Vh,56:$Vi,57:$Vj,58:$Vk,59:$Vl,60:$Vm,61:$Vn,62:$Vo,63:$Vp,64:$Vq,65:$Vr,66:$Vs},{1:[3]},{5:[1,42]},o($Vt,[2,2]),o($Vu,$Vv,{8:[1,43]}),o($Vt,[2,4],{10:[1,44],12:[1,45]}),{43:[1,46]},o($Vw,[2,41],{41:[1,47],44:[1,48]}),o($Vx,[2,7],{13:$Vy,15:$Vz,16:$VA,17:$VB,18:$VC,19:$VD,20:$VE,21:$VF,22:$VG,23:$VH,24:$VI,25:$VJ,26:$VK,27:$VL,28:$VM,29:$VN,30:$VO,31:$VP}),o($Vu,[2,26]),{7:68,10:$V0,12:$V1,14:67,33:$V2,34:$V3,35:14,36:15,37:16,38:$V4,39:18,40:19,41:$V5,43:$V6,45:$V7,46:$V8,47:$V9,48:$Va,49:$Vb,50:$Vc,51:$Vd,52:$Ve,53:$Vf,54:$Vg,55:$Vh,56:$Vi,57:$Vj,58:$Vk,59:$Vl,60:$Vm,61:$Vn,62:$Vo,63:$Vp,64:$Vq,65:$Vr,66:$Vs},{7:68,10:$V0,12:$V1,14:69,33:$V2,34:$V3,35:14,36:15,37:16,38:$V4,39:18,40:19,41:$V5,43:$V6,45:$V7,46:$V8,47:$V9,48:$Va,49:$Vb,50:$Vc,51:$Vd,52:$Ve,53:$Vf,54:$Vg,55:$Vh,56:$Vi,57:$Vj,58:$Vk,59:$Vl,60:$Vm,61:$Vn,62:$Vo,63:$Vp,64:$Vq,65:$Vr,66:$Vs},{7:68,10:$V0,12:$V1,14:70,33:$V2,34:$V3,35:14,36:15,37:16,38:$V4,39:18,40:19,41:$V5,43:$V6,45:$V7,46:$V8,47:$V9,48:$Va,49:$Vb,50:$Vc,51:$Vd,52:$Ve,53:$Vf,54:$Vg,55:$Vh,56:$Vi,57:$Vj,58:$Vk,59:$Vl,60:$Vm,61:$Vn,62:$Vo,63:$Vp,64:$Vq,65:$Vr,66:$Vs},{7:68,10:$V0,12:$V1,14:71,33:$V2,34:$V3,35:14,36:15,37:16,38:$V4,39:18,40:19,41:$V5,43:$V6,45:$V7,46:$V8,47:$V9,48:$Va,49:$Vb,50:$Vc,51:$Vd,52:$Ve,53:$Vf,54:$Vg,55:$Vh,56:$Vi,57:$Vj,58:$Vk,59:$Vl,60:$Vm,61:$Vn,62:$Vo,63:$Vp,64:$Vq,65:$Vr,66:$Vs},o($VQ,[2,31]),o($VQ,[2,32]),o($VQ,[2,33]),o($VQ,[2,35]),o($VQ,[2,36]),o($VQ,[2,37]),{4:72,6:3,7:4,9:5,10:$V0,11:8,12:$V1,14:9,33:$V2,34:$V3,35:14,36:15,37:16,38:$V4,39:18,40:19,41:$V5,43:$V6,45:$V7,46:$V8,47:$V9,48:$Va,49:$Vb,50:$Vc,51:$Vd,52:$Ve,53:$Vf,54:$Vg,55:$Vh,56:$Vi,57:$Vj,58:$Vk,59:$Vl,60:$Vm,61:$Vn,62:$Vo,63:$Vp,64:$Vq,65:$Vr,66:$Vs},o($VQ,[2,42]),o($VQ,[2,43]),o($VQ,[2,44]),o($VQ,[2,45]),o($VQ,[2,46]),o($VQ,[2,47]),o($VQ,[2,48]),o($VQ,[2,49]),o($VQ,[2,50]),o($VQ,[2,51]),o($VQ,[2,52]),o($VQ,[2,53]),o($VQ,[2,54]),o($VQ,[2,55]),o($VQ,[2,56]),o($VQ,[2,57]),o($VQ,[2,58]),o($VQ,[2,59]),o($VQ,[2,60]),o($VQ,[2,61]),o($VQ,[2,62]),{1:[2,1]},{6:73,7:4,9:5,10:$V0,11:8,12:$V1,14:9,33:$V2,34:$V3,35:14,36:15,37:16,38:$V4,39:18,40:19,41:$V5,43:$V6,45:$V7,46:$V8,47:$V9,48:$Va,49:$Vb,50:$Vc,51:$Vd,52:$Ve,53:$Vf,54:$Vg,55:$Vh,56:$Vi,57:$Vj,58:$Vk,59:$Vl,60:$Vm,61:$Vn,62:$Vo,63:$Vp,64:$Vq,65:$Vr,66:$Vs},{7:68,10:$V0,11:74,12:$V1,14:9,33:$V2,34:$V3,35:14,36:15,37:16,38:$V4,39:18,40:19,41:$V5,43:$V6,45:$V7,46:$V8,47:$V9,48:$Va,49:$Vb,50:$Vc,51:$Vd,52:$Ve,53:$Vf,54:$Vg,55:$Vh,56:$Vi,57:$Vj,58:$Vk,59:$Vl,60:$Vm,61:$Vn,62:$Vo,63:$Vp,64:$Vq,65:$Vr,66:$Vs},{7:68,10:$V0,11:75,12:$V1,14:9,33:$V2,34:$V3,35:14,36:15,37:16,38:$V4,39:18,40:19,41:$V5,43:$V6,45:$V7,46:$V8,47:$V9,48:$Va,49:$Vb,50:$Vc,51:$Vd,52:$Ve,53:$Vf,54:$Vg,55:$Vh,56:$Vi,57:$Vj,58:$Vk,59:$Vl,60:$Vm,61:$Vn,62:$Vo,63:$Vp,64:$Vq,65:$Vr,66:$Vs},o($Vw,[2,40]),{4:78,6:3,7:4,9:5,10:$V0,11:8,12:$V1,14:9,33:$V2,34:$V3,35:14,36:15,37:16,38:$V4,39:18,40:19,41:$V5,42:[1,77],43:$V6,45:$V7,46:$V8,47:$V9,48:$Va,49:$Vb,50:$Vc,51:$Vd,52:$Ve,53:$Vf,54:$Vg,55:$Vh,56:$Vi,57:$Vj,58:$Vk,59:$Vl,60:$Vm,61:$Vn,62:$Vo,63:$Vp,64:$Vq,65:$Vr,66:$Vs,67:76},{43:[1,79]},{7:68,10:$V0,12:$V1,14:80,33:$V2,34:$V3,35:14,36:15,37:16,38:$V4,39:18,40:19,41:$V5,43:$V6,45:$V7,46:$V8,47:$V9,48:$Va,49:$Vb,50:$Vc,51:$Vd,52:$Ve,53:$Vf,54:$Vg,55:$Vh,56:$Vi,57:$Vj,58:$Vk,59:$Vl,60:$Vm,61:$Vn,62:$Vo,63:$Vp,64:$Vq,65:$Vr,66:$Vs},{7:68,10:$V0,12:$V1,14:81,33:$V2,34:$V3,35:14,36:15,37:16,38:$V4,39:18,40:19,41:$V5,43:$V6,45:$V7,46:$V8,47:$V9,48:$Va,49:$Vb,50:$Vc,51:$Vd,52:$Ve,53:$Vf,54:$Vg,55:$Vh,56:$Vi,57:$Vj,58:$Vk,59:$Vl,60:$Vm,61:$Vn,62:$Vo,63:$Vp,64:$Vq,65:$Vr,66:$Vs},{7:68,10:$V0,12:$V1,14:82,33:$V2,34:$V3,35:14,36:15,37:16,38:$V4,39:18,40:19,41:$V5,43:$V6,45:$V7,46:$V8,47:$V9,48:$Va,49:$Vb,50:$Vc,51:$Vd,52:$Ve,53:$Vf,54:$Vg,55:$Vh,56:$Vi,57:$Vj,58:$Vk,59:$Vl,60:$Vm,61:$Vn,62:$Vo,63:$Vp,64:$Vq,65:$Vr,66:$Vs},{7:68,10:$V0,12:$V1,14:83,33:$V2,34:$V3,35:14,36:15,37:16,38:$V4,39:18,40:19,41:$V5,43:$V6,45:$V7,46:$V8,47:$V9,48:$Va,49:$Vb,50:$Vc,51:$Vd,52:$Ve,53:$Vf,54:$Vg,55:$Vh,56:$Vi,57:$Vj,58:$Vk,59:$Vl,60:$Vm,61:$Vn,62:$Vo,63:$Vp,64:$Vq,65:$Vr,66:$Vs},{7:68,10:$V0,12:$V1,14:84,33:$V2,34:$V3,35:14,36:15,37:16,38:$V4,39:18,40:19,41:$V5,43:$V6,45:$V7,46:$V8,47:$V9,48:$Va,49:$Vb,50:$Vc,51:$Vd,52:$Ve,53:$Vf,54:$Vg,55:$Vh,56:$Vi,57:$Vj,58:$Vk,59:$Vl,60:$Vm,61:$Vn,62:$Vo,63:$Vp,64:$Vq,65:$Vr,66:$Vs},{7:68,10:$V0,12:$V1,14:85,33:$V2,34:$V3,35:14,36:15,37:16,38:$V4,39:18,40:19,41:$V5,43:$V6,45:$V7,46:$V8,47:$V9,48:$Va,49:$Vb,50:$Vc,51:$Vd,52:$Ve,53:$Vf,54:$Vg,55:$Vh,56:$Vi,57:$Vj,58:$Vk,59:$Vl,60:$Vm,61:$Vn,62:$Vo,63:$Vp,64:$Vq,65:$Vr,66:$Vs},{7:68,10:$V0,12:$V1,14:86,33:$V2,34:$V3,35:14,36:15,37:16,38:$V4,39:18,40:19,41:$V5,43:$V6,45:$V7,46:$V8,47:$V9,48:$Va,49:$Vb,50:$Vc,51:$Vd,52:$Ve,53:$Vf,54:$Vg,55:$Vh,56:$Vi,57:$Vj,58:$Vk,59:$Vl,60:$Vm,61:$Vn,62:$Vo,63:$Vp,64:$Vq,65:$Vr,66:$Vs},{7:68,10:$V0,12:$V1,14:87,33:$V2,34:$V3,35:14,36:15,37:16,38:$V4,39:18,40:19,41:$V5,43:$V6,45:$V7,46:$V8,47:$V9,48:$Va,49:$Vb,50:$Vc,51:$Vd,52:$Ve,53:$Vf,54:$Vg,55:$Vh,56:$Vi,57:$Vj,58:$Vk,59:$Vl,60:$Vm,61:$Vn,62:$Vo,63:$Vp,64:$Vq,65:$Vr,66:$Vs},{7:68,10:$V0,12:$V1,14:88,33:$V2,34:$V3,35:14,36:15,37:16,38:$V4,39:18,40:19,41:$V5,43:$V6,45:$V7,46:$V8,47:$V9,48:$Va,49:$Vb,50:$Vc,51:$Vd,52:$Ve,53:$Vf,54:$Vg,55:$Vh,56:$Vi,57:$Vj,58:$Vk,59:$Vl,60:$Vm,61:$Vn,62:$Vo,63:$Vp,64:$Vq,65:$Vr,66:$Vs},{7:68,10:$V0,12:$V1,14:89,33:$V2,34:$V3,35:14,36:15,37:16,38:$V4,39:18,40:19,41:$V5,43:$V6,45:$V7,46:$V8,47:$V9,48:$Va,49:$Vb,50:$Vc,51:$Vd,52:$Ve,53:$Vf,54:$Vg,55:$Vh,56:$Vi,57:$Vj,58:$Vk,59:$Vl,60:$Vm,61:$Vn,62:$Vo,63:$Vp,64:$Vq,65:$Vr,66:$Vs},{7:68,10:$V0,12:$V1,14:90,33:$V2,34:$V3,35:14,36:15,37:16,38:$V4,39:18,40:19,41:$V5,43:$V6,45:$V7,46:$V8,47:$V9,48:$Va,49:$Vb,50:$Vc,51:$Vd,52:$Ve,53:$Vf,54:$Vg,55:$Vh,56:$Vi,57:$Vj,58:$Vk,59:$Vl,60:$Vm,61:$Vn,62:$Vo,63:$Vp,64:$Vq,65:$Vr,66:$Vs},{7:68,10:$V0,12:$V1,14:91,33:$V2,34:$V3,35:14,36:15,37:16,38:$V4,39:18,40:19,41:$V5,43:$V6,45:$V7,46:$V8,47:$V9,48:$Va,49:$Vb,50:$Vc,51:$Vd,52:$Ve,53:$Vf,54:$Vg,55:$Vh,56:$Vi,57:$Vj,58:$Vk,59:$Vl,60:$Vm,61:$Vn,62:$Vo,63:$Vp,64:$Vq,65:$Vr,66:$Vs},{7:68,10:$V0,12:$V1,14:92,33:$V2,34:$V3,35:14,36:15,37:16,38:$V4,39:18,40:19,41:$V5,43:$V6,45:$V7,46:$V8,47:$V9,48:$Va,49:$Vb,50:$Vc,51:$Vd,52:$Ve,53:$Vf,54:$Vg,55:$Vh,56:$Vi,57:$Vj,58:$Vk,59:$Vl,60:$Vm,61:$Vn,62:$Vo,63:$Vp,64:$Vq,65:$Vr,66:$Vs},{7:68,10:$V0,12:$V1,14:93,33:$V2,34:$V3,35:14,36:15,37:16,38:$V4,39:18,40:19,41:$V5,43:$V6,45:$V7,46:$V8,47:$V9,48:$Va,49:$Vb,50:$Vc,51:$Vd,52:$Ve,53:$Vf,54:$Vg,55:$Vh,56:$Vi,57:$Vj,58:$Vk,59:$Vl,60:$Vm,61:$Vn,62:$Vo,63:$Vp,64:$Vq,65:$Vr,66:$Vs},{7:68,10:$V0,12:$V1,14:94,33:$V2,34:$V3,35:14,36:15,37:16,38:$V4,39:18,40:19,41:$V5,43:$V6,45:$V7,46:$V8,47:$V9,48:$Va,49:$Vb,50:$Vc,51:$Vd,52:$Ve,53:$Vf,54:$Vg,55:$Vh,56:$Vi,57:$Vj,58:$Vk,59:$Vl,60:$Vm,61:$Vn,62:$Vo,63:$Vp,64:$Vq,65:$Vr,66:$Vs},{7:68,10:$V0,12:$V1,14:95,33:$V2,34:$V3,35:14,36:15,37:16,38:$V4,39:18,40:19,41:$V5,43:$V6,45:$V7,46:$V8,47:$V9,48:$Va,49:$Vb,50:$Vc,51:$Vd,52:$Ve,53:$Vf,54:$Vg,55:$Vh,56:$Vi,57:$Vj,58:$Vk,59:$Vl,60:$Vm,61:$Vn,62:$Vo,63:$Vp,64:$Vq,65:$Vr,66:$Vs},{7:68,10:$V0,12:$V1,14:96,33:$V2,34:$V3,35:14,36:15,37:16,38:$V4,39:18,40:19,41:$V5,43:$V6,45:$V7,46:$V8,47:$V9,48:$Va,49:$Vb,50:$Vc,51:$Vd,52:$Ve,53:$Vf,54:$Vg,55:$Vh,56:$Vi,57:$Vj,58:$Vk,59:$Vl,60:$Vm,61:$Vn,62:$Vo,63:$Vp,64:$Vq,65:$Vr,66:$Vs},{7:68,10:$V0,12:$V1,14:97,33:$V2,34:$V3,35:14,36:15,37:16,38:$V4,39:18,40:19,41:$V5,43:$V6,45:$V7,46:$V8,47:$V9,48:$Va,49:$Vb,50:$Vc,51:$Vd,52:$Ve,53:$Vf,54:$Vg,55:$Vh,56:$Vi,57:$Vj,58:$Vk,59:$Vl,60:$Vm,61:$Vn,62:$Vo,63:$Vp,64:$Vq,65:$Vr,66:$Vs},o($VQ,[2,27]),o($VQ,$Vv),o($VQ,[2,28]),o($VQ,[2,29]),o($VQ,[2,30]),{42:[1,98]},o($Vt,[2,3]),o($Vx,[2,5],{13:$Vy,15:$Vz,16:$VA,17:$VB,18:$VC,19:$VD,20:$VE,21:$VF,22:$VG,23:$VH,24:$VI,25:$VJ,26:$VK,27:$VL,28:$VM,29:$VN,30:$VO,31:$VP}),o($Vx,[2,6],{13:$Vy,15:$Vz,16:$VA,17:$VB,18:$VC,19:$VD,20:$VE,21:$VF,22:$VG,23:$VH,24:$VI,25:$VJ,26:$VK,27:$VL,28:$VM,29:$VN,30:$VO,31:$VP}),{42:[1,99],68:[1,100]},o($VQ,[2,64]),o($VR,[2,66]),o($VQ,[2,39]),o($Vu,[2,8]),o($Vu,[2,9]),o($Vu,[2,10]),o($Vu,[2,11]),o($Vu,[2,12]),o($Vu,[2,13]),o($Vu,[2,14]),o($Vu,[2,15]),o($Vu,[2,16]),o($Vu,[2,17]),o($Vu,[2,18]),o($Vu,[2,19]),o($Vu,[2,20]),o($Vu,[2,21]),o($Vu,[2,22]),o($Vu,[2,23]),o($Vu,[2,24]),{32:[1,101]},o($VQ,[2,38]),o($VQ,[2,63]),{4:102,6:3,7:4,9:5,10:$V0,11:8,12:$V1,14:9,33:$V2,34:$V3,35:14,36:15,37:16,38:$V4,39:18,40:19,41:$V5,43:$V6,45:$V7,46:$V8,47:$V9,48:$Va,49:$Vb,50:$Vc,51:$Vd,52:$Ve,53:$Vf,54:$Vg,55:$Vh,56:$Vi,57:$Vj,58:$Vk,59:$Vl,60:$Vm,61:$Vn,62:$Vo,63:$Vp,64:$Vq,65:$Vr,66:$Vs},{7:68,10:$V0,12:$V1,14:103,33:$V2,34:$V3,35:14,36:15,37:16,38:$V4,39:18,40:19,41:$V5,43:$V6,45:$V7,46:$V8,47:$V9,48:$Va,49:$Vb,50:$Vc,51:$Vd,52:$Ve,53:$Vf,54:$Vg,55:$Vh,56:$Vi,57:$Vj,58:$Vk,59:$Vl,60:$Vm,61:$Vn,62:$Vo,63:$Vp,64:$Vq,65:$Vr,66:$Vs},o($VR,[2,65]),o($Vu,[2,25])], -defaultActions: {42:[2,1]}, +table: [{3:1,4:2,6:3,7:4,9:5,10:$V0,11:8,12:$V1,14:9,33:$V2,34:$V3,35:14,36:15,37:16,38:$V4,39:18,40:19,41:$V5,43:$V6,47:$V7,48:$V8,49:$V9,50:$Va,51:$Vb,52:$Vc,53:$Vd,54:$Ve,55:$Vf,56:$Vg,57:$Vh,58:$Vi,59:$Vj,60:$Vk,61:$Vl,62:$Vm,63:$Vn,64:$Vo,65:$Vp,66:$Vq,67:$Vr,68:$Vs,69:$Vt},{1:[3]},{5:[1,43]},o($Vu,[2,2]),o($Vv,$Vw,{8:[1,44]}),o($Vu,[2,4],{10:[1,45],12:[1,46]}),{43:[1,47]},o($Vx,[2,42],{41:[1,48],44:[1,49]}),o($Vy,[2,7],{13:$Vz,15:$VA,16:$VB,17:$VC,18:$VD,19:$VE,20:$VF,21:$VG,22:$VH,23:$VI,24:$VJ,25:$VK,26:$VL,27:$VM,28:$VN,29:$VO,30:$VP,31:$VQ}),o($Vv,[2,26]),{7:69,10:$V0,12:$V1,14:68,33:$V2,34:$V3,35:14,36:15,37:16,38:$V4,39:18,40:19,41:$V5,43:$V6,47:$V7,48:$V8,49:$V9,50:$Va,51:$Vb,52:$Vc,53:$Vd,54:$Ve,55:$Vf,56:$Vg,57:$Vh,58:$Vi,59:$Vj,60:$Vk,61:$Vl,62:$Vm,63:$Vn,64:$Vo,65:$Vp,66:$Vq,67:$Vr,68:$Vs,69:$Vt},{7:69,10:$V0,12:$V1,14:70,33:$V2,34:$V3,35:14,36:15,37:16,38:$V4,39:18,40:19,41:$V5,43:$V6,47:$V7,48:$V8,49:$V9,50:$Va,51:$Vb,52:$Vc,53:$Vd,54:$Ve,55:$Vf,56:$Vg,57:$Vh,58:$Vi,59:$Vj,60:$Vk,61:$Vl,62:$Vm,63:$Vn,64:$Vo,65:$Vp,66:$Vq,67:$Vr,68:$Vs,69:$Vt},{7:69,10:$V0,12:$V1,14:71,33:$V2,34:$V3,35:14,36:15,37:16,38:$V4,39:18,40:19,41:$V5,43:$V6,47:$V7,48:$V8,49:$V9,50:$Va,51:$Vb,52:$Vc,53:$Vd,54:$Ve,55:$Vf,56:$Vg,57:$Vh,58:$Vi,59:$Vj,60:$Vk,61:$Vl,62:$Vm,63:$Vn,64:$Vo,65:$Vp,66:$Vq,67:$Vr,68:$Vs,69:$Vt},{7:69,10:$V0,12:$V1,14:72,33:$V2,34:$V3,35:14,36:15,37:16,38:$V4,39:18,40:19,41:$V5,43:$V6,47:$V7,48:$V8,49:$V9,50:$Va,51:$Vb,52:$Vc,53:$Vd,54:$Ve,55:$Vf,56:$Vg,57:$Vh,58:$Vi,59:$Vj,60:$Vk,61:$Vl,62:$Vm,63:$Vn,64:$Vo,65:$Vp,66:$Vq,67:$Vr,68:$Vs,69:$Vt},o($VR,[2,31]),o($VR,[2,32]),o($VR,[2,33]),o($VR,[2,35]),o($VR,[2,36]),o($VR,[2,37]),{4:73,6:3,7:4,9:5,10:$V0,11:8,12:$V1,14:9,33:$V2,34:$V3,35:14,36:15,37:16,38:$V4,39:18,40:19,41:$V5,43:$V6,47:$V7,48:$V8,49:$V9,50:$Va,51:$Vb,52:$Vc,53:$Vd,54:$Ve,55:$Vf,56:$Vg,57:$Vh,58:$Vi,59:$Vj,60:$Vk,61:$Vl,62:$Vm,63:$Vn,64:$Vo,65:$Vp,66:$Vq,67:$Vr,68:$Vs,69:$Vt},o($VR,[2,43]),o($VR,[2,44]),o($VR,[2,45]),o($VR,[2,46]),o($VR,[2,47]),o($VR,[2,48]),o($VR,[2,49]),o($VR,[2,50]),o($VR,[2,51]),o($VR,[2,52]),o($VR,[2,53]),o($VR,[2,54]),o($VR,[2,55]),o($VR,[2,56]),o($VR,[2,57]),o($VR,[2,58]),o($VR,[2,59]),o($VR,[2,60]),o($VR,[2,61]),o($VR,[2,62]),o($VR,[2,63]),o($VR,[2,64]),{1:[2,1]},{6:74,7:4,9:5,10:$V0,11:8,12:$V1,14:9,33:$V2,34:$V3,35:14,36:15,37:16,38:$V4,39:18,40:19,41:$V5,43:$V6,47:$V7,48:$V8,49:$V9,50:$Va,51:$Vb,52:$Vc,53:$Vd,54:$Ve,55:$Vf,56:$Vg,57:$Vh,58:$Vi,59:$Vj,60:$Vk,61:$Vl,62:$Vm,63:$Vn,64:$Vo,65:$Vp,66:$Vq,67:$Vr,68:$Vs,69:$Vt},{7:69,10:$V0,11:75,12:$V1,14:9,33:$V2,34:$V3,35:14,36:15,37:16,38:$V4,39:18,40:19,41:$V5,43:$V6,47:$V7,48:$V8,49:$V9,50:$Va,51:$Vb,52:$Vc,53:$Vd,54:$Ve,55:$Vf,56:$Vg,57:$Vh,58:$Vi,59:$Vj,60:$Vk,61:$Vl,62:$Vm,63:$Vn,64:$Vo,65:$Vp,66:$Vq,67:$Vr,68:$Vs,69:$Vt},{7:69,10:$V0,11:76,12:$V1,14:9,33:$V2,34:$V3,35:14,36:15,37:16,38:$V4,39:18,40:19,41:$V5,43:$V6,47:$V7,48:$V8,49:$V9,50:$Va,51:$Vb,52:$Vc,53:$Vd,54:$Ve,55:$Vf,56:$Vg,57:$Vh,58:$Vi,59:$Vj,60:$Vk,61:$Vl,62:$Vm,63:$Vn,64:$Vo,65:$Vp,66:$Vq,67:$Vr,68:$Vs,69:$Vt},o($Vx,[2,41]),{4:79,6:3,7:4,9:5,10:$V0,11:8,12:$V1,14:9,33:$V2,34:$V3,35:14,36:15,37:16,38:$V4,39:18,40:19,41:$V5,42:[1,78],43:$V6,47:$V7,48:$V8,49:$V9,50:$Va,51:$Vb,52:$Vc,53:$Vd,54:$Ve,55:$Vf,56:$Vg,57:$Vh,58:$Vi,59:$Vj,60:$Vk,61:$Vl,62:$Vm,63:$Vn,64:$Vo,65:$Vp,66:$Vq,67:$Vr,68:$Vs,69:$Vt,70:77},{43:[1,80]},{7:69,10:$V0,12:$V1,14:81,33:$V2,34:$V3,35:14,36:15,37:16,38:$V4,39:18,40:19,41:$V5,43:$V6,47:$V7,48:$V8,49:$V9,50:$Va,51:$Vb,52:$Vc,53:$Vd,54:$Ve,55:$Vf,56:$Vg,57:$Vh,58:$Vi,59:$Vj,60:$Vk,61:$Vl,62:$Vm,63:$Vn,64:$Vo,65:$Vp,66:$Vq,67:$Vr,68:$Vs,69:$Vt},{7:69,10:$V0,12:$V1,14:82,33:$V2,34:$V3,35:14,36:15,37:16,38:$V4,39:18,40:19,41:$V5,43:$V6,47:$V7,48:$V8,49:$V9,50:$Va,51:$Vb,52:$Vc,53:$Vd,54:$Ve,55:$Vf,56:$Vg,57:$Vh,58:$Vi,59:$Vj,60:$Vk,61:$Vl,62:$Vm,63:$Vn,64:$Vo,65:$Vp,66:$Vq,67:$Vr,68:$Vs,69:$Vt},{7:69,10:$V0,12:$V1,14:83,33:$V2,34:$V3,35:14,36:15,37:16,38:$V4,39:18,40:19,41:$V5,43:$V6,47:$V7,48:$V8,49:$V9,50:$Va,51:$Vb,52:$Vc,53:$Vd,54:$Ve,55:$Vf,56:$Vg,57:$Vh,58:$Vi,59:$Vj,60:$Vk,61:$Vl,62:$Vm,63:$Vn,64:$Vo,65:$Vp,66:$Vq,67:$Vr,68:$Vs,69:$Vt},{7:69,10:$V0,12:$V1,14:84,33:$V2,34:$V3,35:14,36:15,37:16,38:$V4,39:18,40:19,41:$V5,43:$V6,47:$V7,48:$V8,49:$V9,50:$Va,51:$Vb,52:$Vc,53:$Vd,54:$Ve,55:$Vf,56:$Vg,57:$Vh,58:$Vi,59:$Vj,60:$Vk,61:$Vl,62:$Vm,63:$Vn,64:$Vo,65:$Vp,66:$Vq,67:$Vr,68:$Vs,69:$Vt},{7:69,10:$V0,12:$V1,14:85,33:$V2,34:$V3,35:14,36:15,37:16,38:$V4,39:18,40:19,41:$V5,43:$V6,47:$V7,48:$V8,49:$V9,50:$Va,51:$Vb,52:$Vc,53:$Vd,54:$Ve,55:$Vf,56:$Vg,57:$Vh,58:$Vi,59:$Vj,60:$Vk,61:$Vl,62:$Vm,63:$Vn,64:$Vo,65:$Vp,66:$Vq,67:$Vr,68:$Vs,69:$Vt},{7:69,10:$V0,12:$V1,14:86,33:$V2,34:$V3,35:14,36:15,37:16,38:$V4,39:18,40:19,41:$V5,43:$V6,47:$V7,48:$V8,49:$V9,50:$Va,51:$Vb,52:$Vc,53:$Vd,54:$Ve,55:$Vf,56:$Vg,57:$Vh,58:$Vi,59:$Vj,60:$Vk,61:$Vl,62:$Vm,63:$Vn,64:$Vo,65:$Vp,66:$Vq,67:$Vr,68:$Vs,69:$Vt},{7:69,10:$V0,12:$V1,14:87,33:$V2,34:$V3,35:14,36:15,37:16,38:$V4,39:18,40:19,41:$V5,43:$V6,47:$V7,48:$V8,49:$V9,50:$Va,51:$Vb,52:$Vc,53:$Vd,54:$Ve,55:$Vf,56:$Vg,57:$Vh,58:$Vi,59:$Vj,60:$Vk,61:$Vl,62:$Vm,63:$Vn,64:$Vo,65:$Vp,66:$Vq,67:$Vr,68:$Vs,69:$Vt},{7:69,10:$V0,12:$V1,14:88,33:$V2,34:$V3,35:14,36:15,37:16,38:$V4,39:18,40:19,41:$V5,43:$V6,47:$V7,48:$V8,49:$V9,50:$Va,51:$Vb,52:$Vc,53:$Vd,54:$Ve,55:$Vf,56:$Vg,57:$Vh,58:$Vi,59:$Vj,60:$Vk,61:$Vl,62:$Vm,63:$Vn,64:$Vo,65:$Vp,66:$Vq,67:$Vr,68:$Vs,69:$Vt},{7:69,10:$V0,12:$V1,14:89,33:$V2,34:$V3,35:14,36:15,37:16,38:$V4,39:18,40:19,41:$V5,43:$V6,47:$V7,48:$V8,49:$V9,50:$Va,51:$Vb,52:$Vc,53:$Vd,54:$Ve,55:$Vf,56:$Vg,57:$Vh,58:$Vi,59:$Vj,60:$Vk,61:$Vl,62:$Vm,63:$Vn,64:$Vo,65:$Vp,66:$Vq,67:$Vr,68:$Vs,69:$Vt},{7:69,10:$V0,12:$V1,14:90,33:$V2,34:$V3,35:14,36:15,37:16,38:$V4,39:18,40:19,41:$V5,43:$V6,47:$V7,48:$V8,49:$V9,50:$Va,51:$Vb,52:$Vc,53:$Vd,54:$Ve,55:$Vf,56:$Vg,57:$Vh,58:$Vi,59:$Vj,60:$Vk,61:$Vl,62:$Vm,63:$Vn,64:$Vo,65:$Vp,66:$Vq,67:$Vr,68:$Vs,69:$Vt},{7:69,10:$V0,12:$V1,14:91,33:$V2,34:$V3,35:14,36:15,37:16,38:$V4,39:18,40:19,41:$V5,43:$V6,47:$V7,48:$V8,49:$V9,50:$Va,51:$Vb,52:$Vc,53:$Vd,54:$Ve,55:$Vf,56:$Vg,57:$Vh,58:$Vi,59:$Vj,60:$Vk,61:$Vl,62:$Vm,63:$Vn,64:$Vo,65:$Vp,66:$Vq,67:$Vr,68:$Vs,69:$Vt},{7:69,10:$V0,12:$V1,14:92,33:$V2,34:$V3,35:14,36:15,37:16,38:$V4,39:18,40:19,41:$V5,43:$V6,47:$V7,48:$V8,49:$V9,50:$Va,51:$Vb,52:$Vc,53:$Vd,54:$Ve,55:$Vf,56:$Vg,57:$Vh,58:$Vi,59:$Vj,60:$Vk,61:$Vl,62:$Vm,63:$Vn,64:$Vo,65:$Vp,66:$Vq,67:$Vr,68:$Vs,69:$Vt},{7:69,10:$V0,12:$V1,14:93,33:$V2,34:$V3,35:14,36:15,37:16,38:$V4,39:18,40:19,41:$V5,43:$V6,47:$V7,48:$V8,49:$V9,50:$Va,51:$Vb,52:$Vc,53:$Vd,54:$Ve,55:$Vf,56:$Vg,57:$Vh,58:$Vi,59:$Vj,60:$Vk,61:$Vl,62:$Vm,63:$Vn,64:$Vo,65:$Vp,66:$Vq,67:$Vr,68:$Vs,69:$Vt},{7:69,10:$V0,12:$V1,14:94,33:$V2,34:$V3,35:14,36:15,37:16,38:$V4,39:18,40:19,41:$V5,43:$V6,47:$V7,48:$V8,49:$V9,50:$Va,51:$Vb,52:$Vc,53:$Vd,54:$Ve,55:$Vf,56:$Vg,57:$Vh,58:$Vi,59:$Vj,60:$Vk,61:$Vl,62:$Vm,63:$Vn,64:$Vo,65:$Vp,66:$Vq,67:$Vr,68:$Vs,69:$Vt},{7:69,10:$V0,12:$V1,14:95,33:$V2,34:$V3,35:14,36:15,37:16,38:$V4,39:18,40:19,41:$V5,43:$V6,47:$V7,48:$V8,49:$V9,50:$Va,51:$Vb,52:$Vc,53:$Vd,54:$Ve,55:$Vf,56:$Vg,57:$Vh,58:$Vi,59:$Vj,60:$Vk,61:$Vl,62:$Vm,63:$Vn,64:$Vo,65:$Vp,66:$Vq,67:$Vr,68:$Vs,69:$Vt},{7:69,10:$V0,12:$V1,14:96,33:$V2,34:$V3,35:14,36:15,37:16,38:$V4,39:18,40:19,41:$V5,43:$V6,47:$V7,48:$V8,49:$V9,50:$Va,51:$Vb,52:$Vc,53:$Vd,54:$Ve,55:$Vf,56:$Vg,57:$Vh,58:$Vi,59:$Vj,60:$Vk,61:$Vl,62:$Vm,63:$Vn,64:$Vo,65:$Vp,66:$Vq,67:$Vr,68:$Vs,69:$Vt},{7:69,10:$V0,12:$V1,14:97,33:$V2,34:$V3,35:14,36:15,37:16,38:$V4,39:18,40:19,41:$V5,43:$V6,47:$V7,48:$V8,49:$V9,50:$Va,51:$Vb,52:$Vc,53:$Vd,54:$Ve,55:$Vf,56:$Vg,57:$Vh,58:$Vi,59:$Vj,60:$Vk,61:$Vl,62:$Vm,63:$Vn,64:$Vo,65:$Vp,66:$Vq,67:$Vr,68:$Vs,69:$Vt},{7:69,10:$V0,12:$V1,14:98,33:$V2,34:$V3,35:14,36:15,37:16,38:$V4,39:18,40:19,41:$V5,43:$V6,47:$V7,48:$V8,49:$V9,50:$Va,51:$Vb,52:$Vc,53:$Vd,54:$Ve,55:$Vf,56:$Vg,57:$Vh,58:$Vi,59:$Vj,60:$Vk,61:$Vl,62:$Vm,63:$Vn,64:$Vo,65:$Vp,66:$Vq,67:$Vr,68:$Vs,69:$Vt},o($VR,[2,27]),o($VR,$Vw),o($VR,[2,28]),o($VR,[2,29]),o($VR,[2,30]),{42:[1,99]},o($Vu,[2,3]),o($Vy,[2,5],{13:$Vz,15:$VA,16:$VB,17:$VC,18:$VD,19:$VE,20:$VF,21:$VG,22:$VH,23:$VI,24:$VJ,25:$VK,26:$VL,27:$VM,28:$VN,29:$VO,30:$VP,31:$VQ}),o($Vy,[2,6],{13:$Vz,15:$VA,16:$VB,17:$VC,18:$VD,19:$VE,20:$VF,21:$VG,22:$VH,23:$VI,24:$VJ,25:$VK,26:$VL,27:$VM,28:$VN,29:$VO,30:$VP,31:$VQ}),{42:[1,100],71:[1,101]},o($VR,[2,66]),o($VS,[2,68]),o($VR,[2,39],{45:[1,102]}),o($Vv,[2,8]),o($Vv,[2,9]),o($Vv,[2,10]),o($Vv,[2,11]),o($Vv,[2,12]),o($Vv,[2,13]),o($Vv,[2,14]),o($Vv,[2,15]),o($Vv,[2,16]),o($Vv,[2,17]),o($Vv,[2,18]),o($Vv,[2,19]),o($Vv,[2,20]),o($Vv,[2,21]),o($Vv,[2,22]),o($Vv,[2,23]),o($Vv,[2,24]),{32:[1,103]},o($VR,[2,38]),o($VR,[2,65]),{4:104,6:3,7:4,9:5,10:$V0,11:8,12:$V1,14:9,33:$V2,34:$V3,35:14,36:15,37:16,38:$V4,39:18,40:19,41:$V5,43:$V6,47:$V7,48:$V8,49:$V9,50:$Va,51:$Vb,52:$Vc,53:$Vd,54:$Ve,55:$Vf,56:$Vg,57:$Vh,58:$Vi,59:$Vj,60:$Vk,61:$Vl,62:$Vm,63:$Vn,64:$Vo,65:$Vp,66:$Vq,67:$Vr,68:$Vs,69:$Vt},{4:105,6:3,7:4,9:5,10:$V0,11:8,12:$V1,14:9,33:$V2,34:$V3,35:14,36:15,37:16,38:$V4,39:18,40:19,41:$V5,43:$V6,47:$V7,48:$V8,49:$V9,50:$Va,51:$Vb,52:$Vc,53:$Vd,54:$Ve,55:$Vf,56:$Vg,57:$Vh,58:$Vi,59:$Vj,60:$Vk,61:$Vl,62:$Vm,63:$Vn,64:$Vo,65:$Vp,66:$Vq,67:$Vr,68:$Vs,69:$Vt},{7:69,10:$V0,12:$V1,14:106,33:$V2,34:$V3,35:14,36:15,37:16,38:$V4,39:18,40:19,41:$V5,43:$V6,47:$V7,48:$V8,49:$V9,50:$Va,51:$Vb,52:$Vc,53:$Vd,54:$Ve,55:$Vf,56:$Vg,57:$Vh,58:$Vi,59:$Vj,60:$Vk,61:$Vl,62:$Vm,63:$Vn,64:$Vo,65:$Vp,66:$Vq,67:$Vr,68:$Vs,69:$Vt},o($VS,[2,67]),{46:[1,107]},o($Vv,[2,25]),o($VR,[2,40])], +defaultActions: {43:[2,1]}, parseError: function parseError (str, hash) { if (hash.recoverable) { this.trace(str); @@ -753,118 +758,124 @@ case 0: yy_.yytext = BigInt(yy_.yytext.replace(/\_/g, "")); return 38; break; case 1: /* console.log("Empty spaces"); */ break; -case 2: return 46; +case 2: return 48; +break; +case 3: return 49; +break; +case 4: return 50; +break; +case 5: return 51; break; -case 3: return 47; +case 6: return 52; break; -case 4: return 48; +case 7: return 53; break; -case 5: return 49; +case 8: return 54; break; -case 6: return 50; +case 9: return 55; break; -case 7: return 51; +case 10: return 56; break; -case 8: return 52; +case 11: return 57; break; -case 9: return 53; +case 12: return 58; break; -case 10: return 54; +case 13: return 59; break; -case 11: return 55; +case 14: return 60; break; -case 12: return 56; +case 15: return 63 break; -case 13: return 57; +case 16: return 64 break; -case 14: return 58; +case 17: return 65 break; -case 15: return 61 +case 18: return 66 break; -case 16: return 62 +case 19: return 67 break; -case 17: return 63 +case 20: return 68 break; -case 18: return 64 +case 21: return 69 break; -case 19: return 65 +case 22: return 61; break; -case 20: return 66 +case 23: return 62; break; -case 21: return 59; +case 24: return 47; break; -case 22: return 60; +case 25: return 43; break; -case 23: return 45; +case 26: return 41 break; -case 24: return 43; +case 27: return 42 break; -case 25: return 41 +case 28: return 10 break; -case 26: return 42 +case 29: return 71 break; -case 27: return 10 +case 30: return 12 break; -case 28: return 68 +case 31: return 24 break; -case 29: return 12 +case 32: return 13 break; -case 30: return 24 +case 33: return 15 break; -case 31: return 13 +case 34: return 16 break; -case 32: return 15 +case 35: return 20 break; -case 33: return 16 +case 36: return 21 break; -case 34: return 20 +case 37: return 28 break; -case 35: return 21 +case 38: return 30 break; -case 36: return 28 +case 39: return 23 break; -case 37: return 30 +case 40: return 22 break; -case 38: return 23 +case 41: return 25 break; -case 39: return 22 +case 42: return 26 break; -case 40: return 25 +case 43: return 8 break; -case 41: return 26 +case 44: return 17 break; -case 42: return 8 +case 45: return 33 break; -case 43: return 17 +case 46: return 18 break; -case 44: return 33 +case 47: return 19 break; -case 45: return 18 +case 48: return 27 break; -case 46: return 19 +case 49: return 29 break; -case 47: return 27 +case 50: return 34 break; -case 48: return 29 +case 51: return 31 break; -case 49: return 34 +case 52: return 32 break; -case 50: return 31 +case 53: return RANGE_DOTS break; -case 51: return 32 +case 54: return 44 break; -case 52: return RANGE_DOTS +case 55: return 45 break; -case 53: return 44 +case 56: return 46 break; -case 54: return 5; +case 57: return 5; break; -case 55: /* console.log("INVALID: " + yy_.yytext); */ return 'INVALID'; +case 58: /* console.log("INVALID: " + yy_.yytext); */ return 'INVALID'; break; } }, -rules: [/^(?:(0x[0-9A-Fa-f][0-9A-Fa-f_]*)|([0-9][0-9_]*))/,/^(?:[ \t\r\n]+)/,/^(?:A\b)/,/^(?:B\b)/,/^(?:C\b)/,/^(?:D\b)/,/^(?:E\b)/,/^(?:SR\b)/,/^(?:CTX\b)/,/^(?:SP\b)/,/^(?:PC\b)/,/^(?:GAS\b)/,/^(?:zkPC\b)/,/^(?:RR\b)/,/^(?:STEP\b)/,/^(?:CNT_ARITH\b)/,/^(?:CNT_BINARY\b)/,/^(?:CNT_KECCAK_F\b)/,/^(?:CNT_MEM_ALIGN\b)/,/^(?:CNT_PADDING_PG\b)/,/^(?:CNT_POSEIDON_G\b)/,/^(?:HASHPOS\b)/,/^(?:RCX\b)/,/^(?:var\b)/,/^(?:[a-zA-Z_][a-zA-Z$_0-9]*)/,/^(?:\()/,/^(?:\))/,/^(?:\+)/,/^(?:,)/,/^(?:-)/,/^(?:\*\*)/,/^(?:\*)/,/^(?:\/)/,/^(?:%)/,/^(?:<<)/,/^(?:>>)/,/^(?:<=)/,/^(?:>=)/,/^(?:&&)/,/^(?:\|\|)/,/^(?:==)/,/^(?:!=)/,/^(?:=)/,/^(?:&)/,/^(?:~)/,/^(?:\|)/,/^(?:\^)/,/^(?:<)/,/^(?:>)/,/^(?:!)/,/^(?:\?)/,/^(?::)/,/^(?:\.\.)/,/^(?:\.)/,/^(?:$)/,/^(?:.)/], -conditions: {"INITIAL":{"rules":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55],"inclusive":true}} +rules: [/^(?:(0x[0-9A-Fa-f][0-9A-Fa-f_]*)|([0-9][0-9_]*))/,/^(?:[ \t\r\n]+)/,/^(?:A\b)/,/^(?:B\b)/,/^(?:C\b)/,/^(?:D\b)/,/^(?:E\b)/,/^(?:SR\b)/,/^(?:CTX\b)/,/^(?:SP\b)/,/^(?:PC\b)/,/^(?:GAS\b)/,/^(?:zkPC\b)/,/^(?:RR\b)/,/^(?:STEP\b)/,/^(?:CNT_ARITH\b)/,/^(?:CNT_BINARY\b)/,/^(?:CNT_KECCAK_F\b)/,/^(?:CNT_SHA256_F\b)/,/^(?:CNT_MEM_ALIGN\b)/,/^(?:CNT_PADDING_PG\b)/,/^(?:CNT_POSEIDON_G\b)/,/^(?:HASHPOS\b)/,/^(?:RCX\b)/,/^(?:var\b)/,/^(?:[a-zA-Z_][a-zA-Z$_0-9]*)/,/^(?:\()/,/^(?:\))/,/^(?:\+)/,/^(?:,)/,/^(?:-)/,/^(?:\*\*)/,/^(?:\*)/,/^(?:\/)/,/^(?:%)/,/^(?:<<)/,/^(?:>>)/,/^(?:<=)/,/^(?:>=)/,/^(?:&&)/,/^(?:\|\|)/,/^(?:==)/,/^(?:!=)/,/^(?:=)/,/^(?:&)/,/^(?:~)/,/^(?:\|)/,/^(?:\^)/,/^(?:<)/,/^(?:>)/,/^(?:!)/,/^(?:\?)/,/^(?::)/,/^(?:\.\.)/,/^(?:\.)/,/^(?:\[)/,/^(?:\])/,/^(?:$)/,/^(?:.)/], +conditions: {"INITIAL":{"rules":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58],"inclusive":true}} }); return lexer; })(); diff --git a/build/zkasm_parser.js b/build/zkasm_parser.js index 83b831c..004798e 100644 --- a/build/zkasm_parser.js +++ b/build/zkasm_parser.js @@ -72,12 +72,12 @@ } */ var zkasm_parser = (function(){ -var o=function(k,v,o,l){for(o=o||{},l=k.length;l--;o[k[l]]=v);return o},$V0=[1,10],$V1=[1,12],$V2=[1,13],$V3=[1,14],$V4=[1,26],$V5=[1,15],$V6=[1,28],$V7=[1,16],$V8=[1,18],$V9=[1,36],$Va=[1,17],$Vb=[1,27],$Vc=[1,20],$Vd=[1,23],$Ve=[1,29],$Vf=[1,40],$Vg=[1,34],$Vh=[1,45],$Vi=[1,46],$Vj=[1,47],$Vk=[1,48],$Vl=[1,49],$Vm=[1,50],$Vn=[1,51],$Vo=[1,30],$Vp=[1,31],$Vq=[1,32],$Vr=[1,33],$Vs=[1,35],$Vt=[1,37],$Vu=[1,38],$Vv=[1,39],$Vw=[1,41],$Vx=[1,42],$Vy=[1,43],$Vz=[1,44],$VA=[5,13,15,17,18,21,23,24,27,28,30,31,33,36,63,66,84,85,106,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129],$VB=[1,58],$VC=[1,59],$VD=[1,60],$VE=[1,61],$VF=[1,62],$VG=[1,63],$VH=[1,64],$VI=[1,65],$VJ=[1,66],$VK=[1,67],$VL=[1,68],$VM=[1,71],$VN=[1,72],$VO=[1,73],$VP=[1,74],$VQ=[1,75],$VR=[1,76],$VS=[1,77],$VT=[1,78],$VU=[1,79],$VV=[1,80],$VW=[1,81],$VX=[1,82],$VY=[1,83],$VZ=[1,84],$V_=[1,85],$V$=[1,86],$V01=[1,87],$V11=[1,88],$V21=[1,89],$V31=[1,90],$V41=[1,91],$V51=[1,92],$V61=[1,93],$V71=[1,94],$V81=[1,95],$V91=[13,15],$Va1=[13,15,35,36,59],$Vb1=[1,107],$Vc1=[13,15,35,36,37,59],$Vd1=[13,15,35,36,37,59,67],$Ve1=[1,112],$Vf1=[13,67],$Vg1=[1,145],$Vh1=[1,141],$Vi1=[1,142],$Vj1=[1,143],$Vk1=[1,144],$Vl1=[1,148],$Vm1=[1,149],$Vn1=[1,171],$Vo1=[1,173],$Vp1=[1,172],$Vq1=[1,174],$Vr1=[1,175],$Vs1=[1,176],$Vt1=[13,15,67],$Vu1=[5,13,15,17,18,21,23,24,27,28,30,31,33,63,66,84,85,106,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129],$Vv1=[1,214],$Vw1=[1,215],$Vx1=[1,216],$Vy1=[1,217],$Vz1=[1,218],$VA1=[1,219],$VB1=[1,220],$VC1=[1,221],$VD1=[1,222],$VE1=[1,223],$VF1=[1,224],$VG1=[1,225],$VH1=[1,226],$VI1=[1,227],$VJ1=[1,228],$VK1=[1,229],$VL1=[1,230],$VM1=[1,231],$VN1=[1,232],$VO1=[1,233],$VP1=[5,13,15,17,18,21,23,24,27,28,30,31,33,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,55,57,63,66,84,85,106,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129],$VQ1=[5,13,15,17,18,21,23,24,27,28,30,31,33,35,36,41,42,43,44,45,46,47,48,49,50,51,52,53,55,57,63,66,84,85,106,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129],$VR1=[5,13,15,17,18,21,23,24,27,28,30,31,33,41,42,43,44,45,46,47,48,49,50,51,52,53,55,57,63,66,84,85,106,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129],$VS1=[5,13,15,17,18,21,23,24,27,28,30,31,33,43,44,45,46,47,48,49,50,51,52,53,55,57,63,66,84,85,106,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129],$VT1=[5,13,15,17,18,21,23,24,27,28,30,31,33,43,44,45,50,51,52,53,55,57,63,66,84,85,106,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129]; +var o=function(k,v,o,l){for(o=o||{},l=k.length;l--;o[k[l]]=v);return o},$V0=[1,10],$V1=[1,12],$V2=[1,13],$V3=[1,14],$V4=[1,27],$V5=[1,29],$V6=[1,15],$V7=[1,16],$V8=[1,18],$V9=[1,37],$Va=[1,17],$Vb=[1,28],$Vc=[1,20],$Vd=[1,23],$Ve=[1,24],$Vf=[1,30],$Vg=[1,41],$Vh=[1,35],$Vi=[1,46],$Vj=[1,47],$Vk=[1,48],$Vl=[1,49],$Vm=[1,50],$Vn=[1,51],$Vo=[1,52],$Vp=[1,53],$Vq=[1,31],$Vr=[1,32],$Vs=[1,33],$Vt=[1,34],$Vu=[1,36],$Vv=[1,38],$Vw=[1,39],$Vx=[1,40],$Vy=[1,42],$Vz=[1,43],$VA=[1,44],$VB=[1,45],$VC=[5,13,15,17,18,21,23,24,27,28,30,31,33,36,63,64,67,89,90,115,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139],$VD=[1,60],$VE=[1,61],$VF=[1,62],$VG=[1,63],$VH=[1,64],$VI=[1,65],$VJ=[1,66],$VK=[1,67],$VL=[1,68],$VM=[1,69],$VN=[1,70],$VO=[1,71],$VP=[1,72],$VQ=[1,73],$VR=[1,74],$VS=[1,77],$VT=[1,78],$VU=[1,79],$VV=[1,80],$VW=[1,81],$VX=[1,82],$VY=[1,83],$VZ=[1,84],$V_=[1,85],$V$=[1,86],$V01=[1,87],$V11=[1,88],$V21=[1,89],$V31=[1,90],$V41=[1,91],$V51=[1,92],$V61=[1,93],$V71=[1,94],$V81=[1,95],$V91=[1,96],$Va1=[1,97],$Vb1=[1,98],$Vc1=[1,99],$Vd1=[1,100],$Ve1=[1,101],$Vf1=[1,102],$Vg1=[1,103],$Vh1=[1,104],$Vi1=[1,105],$Vj1=[13,15],$Vk1=[13,15,35,36,59],$Vl1=[1,117],$Vm1=[13,15,35,36,37,59],$Vn1=[13,15,35,36,37,59,68],$Vo1=[1,122],$Vp1=[13,68],$Vq1=[1,159],$Vr1=[1,155],$Vs1=[1,156],$Vt1=[1,157],$Vu1=[1,158],$Vv1=[1,162],$Vw1=[1,164],$Vx1=[1,163],$Vy1=[1,190],$Vz1=[1,192],$VA1=[1,191],$VB1=[1,193],$VC1=[1,194],$VD1=[1,195],$VE1=[13,15,68],$VF1=[5,13,15,17,18,21,23,24,27,28,30,31,33,63,64,67,89,90,115,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139],$VG1=[1,241],$VH1=[1,242],$VI1=[1,243],$VJ1=[1,244],$VK1=[1,245],$VL1=[1,246],$VM1=[1,247],$VN1=[1,248],$VO1=[1,249],$VP1=[1,250],$VQ1=[1,251],$VR1=[1,252],$VS1=[1,253],$VT1=[1,254],$VU1=[1,255],$VV1=[1,256],$VW1=[1,257],$VX1=[1,258],$VY1=[1,259],$VZ1=[1,260],$V_1=[5,13,15,17,18,21,23,24,27,28,30,31,33,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,55,57,63,64,67,89,90,115,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139],$V$1=[5,13,15,17,18,21,23,24,27,28,30,31,33,35,36,41,42,43,44,45,46,47,48,49,50,51,52,53,55,57,63,64,67,89,90,115,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139],$V02=[5,13,15,17,18,21,23,24,27,28,30,31,33,41,42,43,44,45,46,47,48,49,50,51,52,53,55,57,63,64,67,89,90,115,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139],$V12=[5,13,15,17,18,21,23,24,27,28,30,31,33,43,44,45,46,47,48,49,50,51,52,53,55,57,63,64,67,89,90,115,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139],$V22=[5,13,15,17,18,21,23,24,27,28,30,31,33,43,44,45,50,51,52,53,55,57,63,64,67,89,90,115,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139]; var parser = {trace: function trace () { }, yy: {}, -symbols_: {"error":2,"allStatments":3,"statmentList":4,"EOF":5,"statment":6,"step":7,"label":8,"varDef":9,"constDef":10,"include":11,"command":12,"LF":13,"assignment":14,":":15,"opList":16,"IDENTIFIER":17,"VAR":18,"scope":19,"[":20,"NUMBER":21,"]":22,"CONST":23,"CONSTID":24,"=":25,"nexpr":26,"CONSTL":27,"COMMAND":28,"GLOBAL":29,"CTX":30,"INCLUDE":31,"STRING":32,"NUMBERL":33,"??":34,"+":35,"-":36,"*":37,"**":38,"%":39,"/":40,"<<":41,">>":42,"|":43,"&":44,"^":45,"<":46,">":47,"<=":48,">=":49,"==":50,"!=":51,"&&":52,"||":53,"!":54,"?":55,"(":56,")":57,"inRegsSum":58,"=>":59,"regsList":60,"inRegP":61,"inReg":62,"TAG":63,"reg":64,"counter":65,"REFERENCE":66,",":67,"op":68,"MLOAD":69,"addr":70,"MSTORE":71,"HASHK":72,"hashId":73,"HASHK1":74,"HASHKLEN":75,"HASHKDIGEST":76,"HASHP":77,"HASHP1":78,"HASHPLEN":79,"HASHPDIGEST":80,"JMP":81,"jmpCond":82,"jmpNotCond":83,"RR":84,"E":85,"CALL":86,"RETURN":87,"ASSERT":88,"SLOAD":89,"SSTORE":90,"ARITH":91,"ARITH_ECADD_DIFFERENT":92,"ARITH_ECADD_SAME":93,"ADD":94,"SUB":95,"LT":96,"SLT":97,"EQ":98,"AND":99,"OR":100,"XOR":101,"MEM_ALIGN_RD":102,"MEM_ALIGN_WR":103,"MEM_ALIGN_WR8":104,"REPEAT":105,"RCX":106,"JMPN":107,"JMPC":108,"JMPZ":109,"JMPNC":110,"JMPNZ":111,"CNT_ARITH":112,"CNT_BINARY":113,"CNT_KECCAK_F":114,"CNT_MEM_ALIGN":115,"CNT_PADDING_PG":116,"CNT_POSEIDON_G":117,"A":118,"B":119,"C":120,"D":121,"SR":122,"SP":123,"PC":124,"GAS":125,"zkPC":126,"STEP":127,"HASHPOS":128,"ROTL_C":129,"++":130,"--":131,"SYS":132,"MEM":133,"STACK":134,"$accept":0,"$end":1}, -terminals_: {2:"error",5:"EOF",13:"LF",15:":",17:"IDENTIFIER",18:"VAR",20:"[",21:"NUMBER",22:"]",23:"CONST",24:"CONSTID",25:"=",27:"CONSTL",28:"COMMAND",29:"GLOBAL",30:"CTX",31:"INCLUDE",32:"STRING",33:"NUMBERL",34:"??",35:"+",36:"-",37:"*",38:"**",39:"%",40:"/",41:"<<",42:">>",43:"|",44:"&",45:"^",46:"<",47:">",48:"<=",49:">=",50:"==",51:"!=",52:"&&",53:"||",54:"!",55:"?",56:"(",57:")",59:"=>",63:"TAG",66:"REFERENCE",67:",",69:"MLOAD",71:"MSTORE",72:"HASHK",74:"HASHK1",75:"HASHKLEN",76:"HASHKDIGEST",77:"HASHP",78:"HASHP1",79:"HASHPLEN",80:"HASHPDIGEST",81:"JMP",84:"RR",85:"E",86:"CALL",87:"RETURN",88:"ASSERT",89:"SLOAD",90:"SSTORE",91:"ARITH",92:"ARITH_ECADD_DIFFERENT",93:"ARITH_ECADD_SAME",94:"ADD",95:"SUB",96:"LT",97:"SLT",98:"EQ",99:"AND",100:"OR",101:"XOR",102:"MEM_ALIGN_RD",103:"MEM_ALIGN_WR",104:"MEM_ALIGN_WR8",105:"REPEAT",106:"RCX",107:"JMPN",108:"JMPC",109:"JMPZ",110:"JMPNC",111:"JMPNZ",112:"CNT_ARITH",113:"CNT_BINARY",114:"CNT_KECCAK_F",115:"CNT_MEM_ALIGN",116:"CNT_PADDING_PG",117:"CNT_POSEIDON_G",118:"A",119:"B",120:"C",121:"D",122:"SR",123:"SP",124:"PC",125:"GAS",126:"zkPC",127:"STEP",128:"HASHPOS",129:"ROTL_C",130:"++",131:"--",132:"SYS",133:"MEM",134:"STACK"}, -productions_: [0,[3,2],[4,2],[4,1],[6,1],[6,1],[6,1],[6,1],[6,1],[6,1],[6,1],[7,4],[7,2],[7,3],[8,2],[9,3],[9,6],[10,4],[10,4],[12,1],[19,1],[19,1],[11,2],[26,1],[26,1],[26,1],[26,3],[26,3],[26,3],[26,3],[26,3],[26,3],[26,3],[26,2],[26,3],[26,3],[26,3],[26,3],[26,3],[26,3],[26,3],[26,3],[26,3],[26,3],[26,3],[26,3],[26,3],[26,2],[26,5],[26,3],[14,3],[14,1],[58,3],[58,3],[58,2],[58,1],[61,3],[61,1],[62,1],[62,1],[62,1],[62,3],[62,3],[62,1],[62,1],[62,1],[62,1],[60,3],[60,1],[16,3],[16,1],[68,4],[68,4],[68,4],[68,4],[68,4],[68,4],[68,4],[68,4],[68,4],[68,4],[68,4],[68,4],[68,6],[68,4],[68,6],[68,4],[68,4],[68,6],[68,6],[68,4],[68,4],[68,6],[68,6],[68,6],[68,6],[68,8],[68,8],[68,4],[68,6],[68,6],[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,4],[82,1],[82,1],[82,1],[83,1],[83,1],[65,1],[65,1],[65,1],[65,1],[65,1],[65,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],[70,1],[70,3],[70,3],[70,2],[70,2],[70,5],[70,5],[70,3],[70,5],[70,5],[70,3],[70,5],[70,5],[70,3],[70,1],[70,3],[70,3],[73,1],[73,1]], +symbols_: {"error":2,"allStatments":3,"statmentList":4,"EOF":5,"statment":6,"step":7,"label":8,"varDef":9,"constDef":10,"include":11,"command":12,"LF":13,"assignment":14,":":15,"opList":16,"IDENTIFIER":17,"VAR":18,"scope":19,"[":20,"NUMBER":21,"]":22,"CONSTID":23,"CONST":24,"=":25,"nexpr":26,"CONSTL":27,"COMMAND":28,"GLOBAL":29,"CTX":30,"INCLUDE":31,"STRING":32,"NUMBERL":33,"??":34,"+":35,"-":36,"*":37,"**":38,"%":39,"/":40,"<<":41,">>":42,"|":43,"&":44,"^":45,"<":46,">":47,"<=":48,">=":49,"==":50,"!=":51,"&&":52,"||":53,"!":54,"?":55,"(":56,")":57,"inRegsSum":58,"=>":59,"regsList":60,"inRegP":61,"inReg":62,"TAG":63,"TAG_0":64,"reg":65,"counter":66,"REFERENCE":67,",":68,"op":69,"MLOAD":70,"addr":71,"MSTORE":72,"HASHK":73,"hashId":74,"HASHK1":75,"HASHKLEN":76,"HASHKDIGEST":77,"HASHS":78,"HASHS1":79,"HASHSLEN":80,"HASHSDIGEST":81,"HASHP":82,"HASHP1":83,"HASHPLEN":84,"HASHPDIGEST":85,"JMP":86,"jmpCond":87,"jmpNotCond":88,"RR":89,"E":90,"CALL":91,"RETURN":92,"ASSERT":93,"SLOAD":94,"SSTORE":95,"ARITH":96,"ARITH_ECADD_DIFFERENT":97,"ARITH_ECADD_SAME":98,"ARITH_BN254_MULFP2":99,"ARITH_BN254_ADDFP2":100,"ARITH_BN254_SUBFP2":101,"ADD":102,"SUB":103,"LT":104,"SLT":105,"EQ":106,"AND":107,"OR":108,"XOR":109,"LT4":110,"MEM_ALIGN_RD":111,"MEM_ALIGN_WR":112,"MEM_ALIGN_WR8":113,"REPEAT":114,"RCX":115,"JMPN":116,"JMPC":117,"JMPZ":118,"JMPNC":119,"JMPNZ":120,"CNT_ARITH":121,"CNT_BINARY":122,"CNT_KECCAK_F":123,"CNT_SHA256_F":124,"CNT_MEM_ALIGN":125,"CNT_PADDING_PG":126,"CNT_POSEIDON_G":127,"A":128,"B":129,"C":130,"D":131,"SR":132,"SP":133,"PC":134,"GAS":135,"zkPC":136,"STEP":137,"HASHPOS":138,"ROTL_C":139,"++":140,"--":141,"SYS":142,"MEM":143,"STACK":144,"$accept":0,"$end":1}, +terminals_: {2:"error",5:"EOF",13:"LF",15:":",17:"IDENTIFIER",18:"VAR",20:"[",21:"NUMBER",22:"]",23:"CONSTID",24:"CONST",25:"=",27:"CONSTL",28:"COMMAND",29:"GLOBAL",30:"CTX",31:"INCLUDE",32:"STRING",33:"NUMBERL",34:"??",35:"+",36:"-",37:"*",38:"**",39:"%",40:"/",41:"<<",42:">>",43:"|",44:"&",45:"^",46:"<",47:">",48:"<=",49:">=",50:"==",51:"!=",52:"&&",53:"||",54:"!",55:"?",56:"(",57:")",59:"=>",63:"TAG",64:"TAG_0",67:"REFERENCE",68:",",70:"MLOAD",72:"MSTORE",73:"HASHK",75:"HASHK1",76:"HASHKLEN",77:"HASHKDIGEST",78:"HASHS",79:"HASHS1",80:"HASHSLEN",81:"HASHSDIGEST",82:"HASHP",83:"HASHP1",84:"HASHPLEN",85:"HASHPDIGEST",86:"JMP",89:"RR",90:"E",91:"CALL",92:"RETURN",93:"ASSERT",94:"SLOAD",95:"SSTORE",96:"ARITH",97:"ARITH_ECADD_DIFFERENT",98:"ARITH_ECADD_SAME",99:"ARITH_BN254_MULFP2",100:"ARITH_BN254_ADDFP2",101:"ARITH_BN254_SUBFP2",102:"ADD",103:"SUB",104:"LT",105:"SLT",106:"EQ",107:"AND",108:"OR",109:"XOR",110:"LT4",111:"MEM_ALIGN_RD",112:"MEM_ALIGN_WR",113:"MEM_ALIGN_WR8",114:"REPEAT",115:"RCX",116:"JMPN",117:"JMPC",118:"JMPZ",119:"JMPNC",120:"JMPNZ",121:"CNT_ARITH",122:"CNT_BINARY",123:"CNT_KECCAK_F",124:"CNT_SHA256_F",125:"CNT_MEM_ALIGN",126:"CNT_PADDING_PG",127:"CNT_POSEIDON_G",128:"A",129:"B",130:"C",131:"D",132:"SR",133:"SP",134:"PC",135:"GAS",136:"zkPC",137:"STEP",138:"HASHPOS",139:"ROTL_C",140:"++",141:"--",142:"SYS",143:"MEM",144:"STACK"}, +productions_: [0,[3,2],[4,2],[4,1],[6,1],[6,1],[6,1],[6,1],[6,1],[6,1],[6,1],[7,4],[7,2],[7,3],[8,2],[9,3],[9,6],[9,6],[10,4],[10,4],[12,1],[19,1],[19,1],[11,2],[26,1],[26,1],[26,1],[26,3],[26,3],[26,3],[26,3],[26,3],[26,3],[26,3],[26,2],[26,3],[26,3],[26,3],[26,3],[26,3],[26,3],[26,3],[26,3],[26,3],[26,3],[26,3],[26,3],[26,3],[26,2],[26,5],[26,3],[14,3],[14,1],[58,3],[58,3],[58,2],[58,1],[61,3],[61,1],[62,1],[62,1],[62,1],[62,1],[62,3],[62,3],[62,1],[62,1],[62,1],[62,1],[60,3],[60,1],[16,3],[16,1],[69,4],[69,4],[69,4],[69,4],[69,4],[69,4],[69,4],[69,4],[69,4],[69,4],[69,4],[69,4],[69,4],[69,4],[69,4],[69,4],[69,6],[69,4],[69,6],[69,4],[69,4],[69,6],[69,6],[69,4],[69,4],[69,6],[69,6],[69,6],[69,6],[69,8],[69,8],[69,4],[69,6],[69,6],[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,1],[69,1],[69,4],[87,1],[87,1],[87,1],[88,1],[88,1],[66,1],[66,1],[66,1],[66,1],[66,1],[66,1],[66,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],[71,1],[71,3],[71,3],[71,2],[71,2],[71,5],[71,5],[71,3],[71,5],[71,5],[71,3],[71,5],[71,5],[71,3],[71,1],[71,3],[71,3],[71,4],[71,6],[71,6],[71,3],[71,4],[74,1],[74,1],[74,1],[74,3],[74,3]], performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate /* action[1] */, $$ /* vstack */, _$ /* lstack */) { /* this == yyval */ @@ -144,535 +144,631 @@ case 15: this.$ = {type: "var", scope: $$[$0-1], name: $$[$0], count: 1 } break; -case 16: +case 16: case 17: this.$ = {type: "var", scope: $$[$0-4], name: $$[$0-3], count: $$[$0-1] } break; -case 17: +case 18: this.$ = {type: "constdef", name: $$[$0-2], value: $$[$0]} setLine(this.$, _$[$0-3]); break; -case 18: +case 19: this.$ = {type: "constldef", name: $$[$0-2], value: $$[$0]} setLine(this.$, _$[$0-3]); break; -case 19: +case 20: this.$ = {type: "command", cmd: $$[$0]} break; -case 22: +case 23: this.$ = {type: "include", file: $$[$0]} break; -case 23: case 24: +case 24: case 25: this.$ = {type: 'CONSTL' , value: $$[$0]} break; -case 25: case 65: +case 26: case 67: this.$ = {type: 'CONSTID' , identifier: $$[$0]} break; -case 26: +case 27: this.$ = {type: $$[$0-1], values: [$$[$0]] , identifier: $$[$0-2]} break; -case 27: case 28: case 29: case 30: case 31: case 32: case 34: case 35: case 36: case 37: case 38: case 39: case 40: case 41: case 42: case 43: case 44: case 45: case 46: +case 28: case 29: case 30: case 31: case 32: case 33: case 35: case 36: case 37: case 38: case 39: case 40: case 41: case 42: case 43: case 44: case 45: case 46: case 47: this.$ = {type: $$[$0-1], values: [$$[$0-2], $$[$0]]} break; -case 33: case 47: +case 34: case 48: this.$ = {type: $$[$0-1], values: [$$[$0]]} break; -case 48: +case 49: this.$ = {type: $$[$0-3], values: [$$[$0-4], $$[$0-2], $$[$0]]} break; -case 49: +case 50: this.$ = $$[$0-1] break; -case 50: +case 51: this.$ = {in: $$[$0-2], out: $$[$0]} break; -case 51: +case 52: this.$ = {in: $$[$0], out: []} break; -case 52: +case 53: this.$ = {type: 'add', values: [$$[$0-2], $$[$0]]} break; -case 53: +case 54: this.$ = {type: 'sub', values: [$$[$0-2], $$[$0]]} break; -case 54: +case 55: this.$ = {type: 'neg', values: [$$[$0]]} break; -case 55: case 57: +case 56: case 58: this.$ = $$[$0] break; -case 56: +case 57: this.$ = {type: 'mul', values: [$$[$0-2], $$[$0]]} break; -case 58: +case 59: this.$ = {type: 'TAG' , tag: $$[$0]} break; -case 59: +case 60: + + this.$ = {type: 'TAG_0' , tag: $$[$0]} + +break; +case 61: this.$ = {type: 'REG' , reg: $$[$0]} break; -case 60: +case 62: this.$ = {type: 'COUNTER', counter: $$[$0]} break; -case 61: +case 63: this.$ = {type: "exp", values: [$$[$0-2], $$[$0]]} break; -case 62: +case 64: this.$ = {type: "expl", values: [$$[$0-2], $$[$0]]} break; -case 63: +case 65: this.$ = {type: 'CONST' , const: $$[$0]} break; -case 64: +case 66: this.$ = {type: 'CONSTL' , const: $$[$0]} break; -case 66: +case 68: this.$ = {type: 'reference', identifier: $$[$0]} break; -case 67: +case 69: $$[$0-2].push($$[$0]) break; -case 68: case 70: +case 70: case 72: this.$ = [$$[$0]] break; -case 69: +case 71: $$[$0-2].push($$[$0]); this.$ = $$[$0-2] break; -case 71: +case 73: this.$ = $$[$0-1]; this.$.mOp = 1; this.$.mWR = 0; break; -case 72: +case 74: this.$ = $$[$0-1]; this.$.mOp = 1; this.$.mWR = 1; break; -case 73: +case 75: this.$ = $$[$0-1]; this.$.hashK = 1; break; -case 74: +case 76: this.$ = $$[$0-1]; this.$.hashK1 = 1; break; -case 75: +case 77: this.$ = $$[$0-1]; this.$.hashKLen = 1; break; -case 76: +case 78: this.$ = $$[$0-1]; this.$.hashKDigest = 1; break; -case 77: +case 79: + + this.$ = $$[$0-1]; + this.$.hashS = 1; + +break; +case 80: + + this.$ = $$[$0-1]; + this.$.hashS1 = 1; + +break; +case 81: + + this.$ = $$[$0-1]; + this.$.hashSLen = 1; + +break; +case 82: + + this.$ = $$[$0-1]; + this.$.hashSDigest = 1; + +break; +case 83: this.$ = $$[$0-1]; this.$.hashP = 1; break; -case 78: +case 84: this.$ = $$[$0-1]; this.$.hashP1 = 1; break; -case 79: +case 85: this.$ = $$[$0-1]; this.$.hashPLen = 1; break; -case 80: +case 86: this.$ = $$[$0-1]; this.$.hashPDigest = 1; break; -case 81: +case 87: this.$ = { [$$[$0-3]]: 1, useJmpAddr: 1, jmpAddr: $$[$0-1] } break; -case 82: +case 88: this.$ = { [$$[$0-3]]: 1, useJmpAddr: 1, jmpAddr: $$[$0-1], useElseAddr: 1, elseAddr: 'next' } break; -case 83: +case 89: this.$ = { [$$[$0-5]]: 1, useJmpAddr: 1, jmpAddr: $$[$0-3], useElseAddr: 1, elseAddr: $$[$0-1] } break; -case 84: +case 90: this.$ = { [$$[$0-3]]: 1, useJmpAddr: 1, jmpAddr: 'next', useElseAddr: 1, elseAddr: $$[$0-1] } break; -case 85: +case 91: this.$ = { [$$[$0-5]]: 1, useJmpAddr: 1, jmpAddr: $$[$0-1], useElseAddr: 1, elseAddr: $$[$0-3] } break; -case 86: +case 92: this.$ = { [$$[$0-3]]: 1, useJmpAddr: 0, ind: 0, indRR: 1, offset: 0 } break; -case 87: +case 93: this.$ = { [$$[$0-3]]: 1, useJmpAddr: 0, ind: 1, indRR: 0, offset: 0 } break; -case 88: +case 94: this.$ = { [$$[$0-5]]: 1, useJmpAddr: 0, ind: 0, indRR: 1, offset: $$[$0-3] } break; -case 89: +case 95: this.$ = { [$$[$0-5]]: 1, useJmpAddr: 0, ind: 1, indRR: 0, offset: $$[$0-3] } break; -case 90: +case 96: this.$ = { [$$[$0-3]]: 1, useJmpAddr: 0, ind: 0, indRR: 1, offset: 0, useElseAddr: 1, elseAddr: 'next' } break; -case 91: +case 97: this.$ = { [$$[$0-3]]: 1, useJmpAddr: 0, ind: 1, indRR: 0, offset: 0, useElseAddr: 1, elseAddr: 'next' } break; -case 92: +case 98: this.$ = { [$$[$0-5]]: 1, useJmpAddr: 0, ind: 0, indRR: 1, offset: $$[$0-3], useElseAddr: 1, elseAddr: 'next' } break; -case 93: +case 99: this.$ = { [$$[$0-5]]: 1, useJmpAddr: 0, ind: 1, indRR: 0, offset: $$[$0-3], useElseAddr: 1, elseAddr: 'next' } break; -case 94: +case 100: this.$ = { [$$[$0-5]]: 1, useJmpAddr: 0, ind: 0, indRR: 1, offset: 0, useElseAddr: 1, elseAddr: $$[$0-1] } break; -case 95: +case 101: this.$ = { [$$[$0-5]]: 1, useJmpAddr: 0, ind: 1, indRR: 0, offset: 0, useElseAddr: 1, elseAddr: $$[$0-1] } break; -case 96: +case 102: this.$ = { [$$[$0-7]]: 1, useJmpAddr: 0, ind: 0, indRR: 1, offset: $$[$0-5], useElseAddr: 1, elseAddr: $$[$0-1] } break; -case 97: +case 103: this.$ = { [$$[$0-7]]: 1, useJmpAddr: 0, ind: 1, indRR: 0, offset: $$[$0-5], useElseAddr: 1, elseAddr: $$[$0-1] } break; -case 98: +case 104: this.$ = {JMP: 0, JMPC: 0, JMPN: 0, useJmpAddr:1, jmpAddr: $$[$0-1], call: 1} break; -case 99: +case 105: this.$ = {JMP: 0, JMPC: 0, JMPN: 0, offset: $$[$0-3], ind: 0, indRR: 1, return: 0, call: 1} break; -case 100: +case 106: this.$ = {JMP: 0, JMPC: 0, JMPN: 0, offset: $$[$0-3], ind: 1, indRR: 0, return: 0, call: 1} break; -case 101: +case 107: this.$ = {JMP: 0, JMPC: 0, JMPN: 0, call: 0, return: 1} break; -case 102: +case 108: this.$ = {assert: 1} break; -case 103: +case 109: this.$ = {sRD: 1} break; -case 104: +case 110: this.$ = {sWR: 1} break; -case 105: +case 111: - this.$ = { arithEq0: 1, arithEq1: 0, arithEq2: 0} + this.$ = { arithEq0: 1, arithEq1: 0, arithEq2: 0, arithEq3: 0, arithEq4: 0, arithEq5: 0 } break; -case 106: +case 112: - this.$ = { arithEq0: 0, arithEq1: 1, arithEq2: 0} + this.$ = { arithEq0: 0, arithEq1: 1, arithEq2: 0, arithEq3: 0, arithEq4: 0, arithEq5: 0 } break; -case 107: +case 113: - this.$ = { arithEq0: 0, arithEq1: 0, arithEq2: 1} + this.$ = { arithEq0: 0, arithEq1: 0, arithEq2: 0, arithEq3: 0, arithEq4: 0, arithEq5: 0 } break; -case 108: +case 114: + + this.$ = { arithEq0: 0, arithEq1: 0, arithEq2: 0, arithEq3: 1, arithEq4: 0, arithEq5: 0 } + +break; +case 115: + + this.$ = { arithEq0: 0, arithEq1: 0, arithEq2: 0, arithEq3: 0, arithEq4: 1, arithEq5: 0 } + +break; +case 116: + + this.$ = { arithEq0: 0, arithEq1: 0, arithEq2: 0, arithEq3: 0, arithEq4: 0, arithEq5: 1 } + +break; +case 117: this.$ = { bin: 1, binOpcode: 0} break; -case 109: +case 118: this.$ = { bin: 1, binOpcode: 1} break; -case 110: +case 119: this.$ = { bin: 1, binOpcode: 2} break; -case 111: +case 120: this.$ = { bin: 1, binOpcode: 3} break; -case 112: +case 121: this.$ = { bin: 1, binOpcode: 4} break; -case 113: +case 122: this.$ = { bin: 1, binOpcode: 5} break; -case 114: +case 123: this.$ = { bin: 1, binOpcode: 6} break; -case 115: +case 124: this.$ = { bin: 1, binOpcode: 7} break; -case 116: +case 125: + + this.$ = { bin: 1, binOpcode: 8} + +break; +case 126: this.$ = { memAlignRD: 1, memAlignWR: 0, memAlignWR8: 0} break; -case 117: +case 127: this.$ = { memAlignRD: 0, memAlignWR: 1, memAlignWR8: 0} break; -case 118: +case 128: this.$ = { memAlignRD: 0, memAlignWR: 0, memAlignWR8: 1} break; -case 119: +case 129: this.$ = { repeat: 1 } break; -case 123: +case 133: this.$ = 'JMPC' break; -case 124: +case 134: this.$ = 'JMPZ' break; -case 125: +case 135: this.$ = 'cntArith' break; -case 126: +case 136: this.$ = 'cntBinary' break; -case 127: +case 137: this.$ = 'cntKeccakF' break; -case 128: +case 138: + this.$ = 'cntSha256F' +break; +case 139: this.$ = 'cntMemAlign' break; -case 129: +case 140: this.$ = 'cntPaddingPG' break; -case 130: +case 141: this.$ = 'cntPoseidonG' break; -case 147: +case 158: this.$ = { isStack: 1, isMem:0, ind:0, indRR: 0, incStack:0, offset: 0, useCTX: 1} break; -case 148: +case 159: this.$ = { isStack: 1, isMem:0, ind:0, indRR: 0, incStack: 0, offset: $$[$0], useCTX: 1} + break; -case 149: +case 160: this.$ = { isStack: 1, isMem:0, ind:0, indRR: 0, incStack: 0, offset: -$$[$0], useCTX: 1} + break; -case 150: +case 161: this.$ = { isStack: 1, isMem:0, ind:0, indRR: 0, incStack: 1, offset: 0, useCTX: 1} + break; -case 151: +case 162: this.$ = { isStack: 1, isMem:0, ind:0, indRR: 0, incStack: -1, offset: 0, useCTX: 1} + break; -case 152: +case 163: this.$ = { isStack: 0, isMem:0, ind:1, indRR: 0, incStack: 0, offset: $$[$0]} break; -case 153: +case 164: this.$ = { isStack: 0, isMem:0, ind:1, indRR: 0, incStack: 0, offset: -$$[$0]} break; -case 154: +case 165: this.$ = { isStack: 0, isMem:0, ind:1, indRR: 0, incStack: 0, offset: 0} break; -case 155: +case 166: this.$ = { isStack: 0, isMem: 1, ind:1, indRR: 0, incStack: 0, offset: $$[$0], useCTX: 1} break; -case 156: +case 167: this.$ = { isStack: 0, isMem: 1, ind:1, indRR: 0, incStack: 0, offset: -$$[$0], useCTX: 1} break; -case 157: +case 168: this.$ = { isStack: 0, isMem: 1, ind:1, indRR: 0, incStack: 0, offset: 0, useCTX: 1} break; -case 158: +case 169: this.$ = { isStack: 1, ind:1, indRR: 0, incStack: 0, offset: $$[$0], useCTX: 1} break; -case 159: +case 170: this.$ = { isStack: 1, ind:1, indRR: 0, incStack: 0, offset: -$$[$0], useCTX: 1} break; -case 160: +case 171: this.$ = { isStack: 1, ind:1, indRR: 0, incStack: 0, offset: 0, useCTX: 1} break; -case 161: +case 172: this.$ = { offset: $$[$0] } break; -case 162: +case 173: this.$ = { offset: $$[$0-2], ind: 0, indRR: 1 } break; -case 163: +case 174: this.$ = { offset: $$[$0-2], ind: 1, indRR: 0 } break; -case 164: +case 175: + + this.$ = { offset: $$[$0-3], ind: 1, indRR: 0 } + +break; +case 176: + + this.$ = { offset: $$[$0-5], extraOffset: -$$[$0-1], ind: 1, indRR: 0 } + +break; +case 177: + + this.$ = { offset: $$[$0-5], extraOffset: $$[$0-1], ind: 1, indRR: 0 } + +break; +case 178: + + this.$ = { offset: $$[$0-2], extraOffset: $$[$0] } + +break; +case 179: + + this.$ = { offset: $$[$0-3], extraOffset: $$[$0-1] } + +break; +case 180: this.$ = {ind: 0, indRR: 0, offset:$$[$0]} break; -case 165: +case 181: this.$ = {ind: 1, indRR: 0, offset:0} +break; +case 182: + + this.$ = {ind: 0, indRR: 1, offset:0} + +break; +case 183: + + this.$ = {ind: 1, indRR: 0, offset:$$[$0]} + +break; +case 184: + + this.$ = {ind: 0, indRR: 1, offset:$$[$0]} + break; } }, -table: [{3:1,4:2,6:3,7:4,8:5,9:6,10:7,11:8,12:9,13:$V0,14:11,15:$V1,17:$V2,18:$V3,21:$V4,23:$V5,24:$V6,27:$V7,28:$V8,30:$V9,31:$Va,33:$Vb,36:$Vc,58:19,61:21,62:22,63:$Vd,64:24,65:25,66:$Ve,84:$Vf,85:$Vg,106:$Vh,112:$Vi,113:$Vj,114:$Vk,115:$Vl,116:$Vm,117:$Vn,118:$Vo,119:$Vp,120:$Vq,121:$Vr,122:$Vs,123:$Vt,124:$Vu,125:$Vv,126:$Vw,127:$Vx,128:$Vy,129:$Vz},{1:[3]},{5:[1,52],6:53,7:4,8:5,9:6,10:7,11:8,12:9,13:$V0,14:11,15:$V1,17:$V2,18:$V3,21:$V4,23:$V5,24:$V6,27:$V7,28:$V8,30:$V9,31:$Va,33:$Vb,36:$Vc,58:19,61:21,62:22,63:$Vd,64:24,65:25,66:$Ve,84:$Vf,85:$Vg,106:$Vh,112:$Vi,113:$Vj,114:$Vk,115:$Vl,116:$Vm,117:$Vn,118:$Vo,119:$Vp,120:$Vq,121:$Vr,122:$Vs,123:$Vt,124:$Vu,125:$Vv,126:$Vw,127:$Vx,128:$Vy,129:$Vz},o($VA,[2,3]),o($VA,[2,4]),o($VA,[2,5]),o($VA,[2,6]),o($VA,[2,7]),o($VA,[2,8]),o($VA,[2,9]),o($VA,[2,10]),{13:[1,55],15:[1,54]},{16:56,68:57,69:$VB,71:$VC,72:$VD,74:$VE,75:$VF,76:$VG,77:$VH,78:$VI,79:$VJ,80:$VK,81:$VL,82:69,83:70,86:$VM,87:$VN,88:$VO,89:$VP,90:$VQ,91:$VR,92:$VS,93:$VT,94:$VU,95:$VV,96:$VW,97:$VX,98:$VY,99:$VZ,100:$V_,101:$V$,102:$V01,103:$V11,104:$V21,105:$V31,107:$V41,108:$V51,109:$V61,110:$V71,111:$V81},{15:[1,96]},{19:97,29:[1,98],30:[1,99]},{24:[1,100]},{24:[1,101]},{32:[1,102]},o($VA,[2,19]),o($V91,[2,51],{35:[1,104],36:[1,105],59:[1,103]}),{21:$V4,24:$V6,30:$V9,33:$Vb,61:106,62:22,63:$Vd,64:24,65:25,66:$Ve,84:$Vf,85:$Vg,106:$Vh,112:$Vi,113:$Vj,114:$Vk,115:$Vl,116:$Vm,117:$Vn,118:$Vo,119:$Vp,120:$Vq,121:$Vr,122:$Vs,123:$Vt,124:$Vu,125:$Vv,126:$Vw,127:$Vx,128:$Vy,129:$Vz},o($Va1,[2,55],{37:$Vb1}),o($Vc1,[2,57]),o($Vc1,[2,58]),o($Vc1,[2,59]),o($Vc1,[2,60]),o($Vc1,[2,63],{38:[1,108]}),o($Vc1,[2,64],{38:[1,109]}),o($Vc1,[2,65]),o($Vc1,[2,66]),o($Vd1,[2,131]),o($Vd1,[2,132]),o($Vd1,[2,133]),o($Vd1,[2,134]),o($Vd1,[2,135]),o($Vd1,[2,136]),o($Vd1,[2,137]),o($Vd1,[2,138]),o($Vd1,[2,139]),o($Vd1,[2,140]),o($Vd1,[2,141]),o($Vd1,[2,142]),o($Vd1,[2,143]),o($Vd1,[2,144]),o($Vd1,[2,145]),o($Vd1,[2,146]),o($Vc1,[2,125]),o($Vc1,[2,126]),o($Vc1,[2,127]),o($Vc1,[2,128]),o($Vc1,[2,129]),o($Vc1,[2,130]),{1:[2,1]},o($VA,[2,2]),{16:110,68:57,69:$VB,71:$VC,72:$VD,74:$VE,75:$VF,76:$VG,77:$VH,78:$VI,79:$VJ,80:$VK,81:$VL,82:69,83:70,86:$VM,87:$VN,88:$VO,89:$VP,90:$VQ,91:$VR,92:$VS,93:$VT,94:$VU,95:$VV,96:$VW,97:$VX,98:$VY,99:$VZ,100:$V_,101:$V$,102:$V01,103:$V11,104:$V21,105:$V31,107:$V41,108:$V51,109:$V61,110:$V71,111:$V81},o($VA,[2,12]),{13:[1,111],67:$Ve1},o($Vf1,[2,70]),{56:[1,113]},{56:[1,114]},{56:[1,115]},{56:[1,116]},{56:[1,117]},{56:[1,118]},{56:[1,119]},{56:[1,120]},{56:[1,121]},{56:[1,122]},{56:[1,123]},{56:[1,124]},{56:[1,125]},{56:[1,126]},o($Vf1,[2,101]),o($Vf1,[2,102]),o($Vf1,[2,103]),o($Vf1,[2,104]),o($Vf1,[2,105]),o($Vf1,[2,106]),o($Vf1,[2,107]),o($Vf1,[2,108]),o($Vf1,[2,109]),o($Vf1,[2,110]),o($Vf1,[2,111]),o($Vf1,[2,112]),o($Vf1,[2,113]),o($Vf1,[2,114]),o($Vf1,[2,115]),o($Vf1,[2,116]),o($Vf1,[2,117]),o($Vf1,[2,118]),{56:[1,127]},{56:[2,120]},{56:[2,121]},{56:[2,122]},{56:[2,123]},{56:[2,124]},o($VA,[2,14]),{17:[1,128]},{17:[2,20]},{17:[2,21]},{25:[1,129]},{25:[1,130]},o($VA,[2,22]),{30:$V9,60:131,64:132,84:$Vf,85:$Vg,106:$Vh,118:$Vo,119:$Vp,120:$Vq,121:$Vr,122:$Vs,123:$Vt,124:$Vu,125:$Vv,126:$Vw,127:$Vx,128:$Vy,129:$Vz},{21:$V4,24:$V6,30:$V9,33:$Vb,61:133,62:22,63:$Vd,64:24,65:25,66:$Ve,84:$Vf,85:$Vg,106:$Vh,112:$Vi,113:$Vj,114:$Vk,115:$Vl,116:$Vm,117:$Vn,118:$Vo,119:$Vp,120:$Vq,121:$Vr,122:$Vs,123:$Vt,124:$Vu,125:$Vv,126:$Vw,127:$Vx,128:$Vy,129:$Vz},{21:$V4,24:$V6,30:$V9,33:$Vb,61:134,62:22,63:$Vd,64:24,65:25,66:$Ve,84:$Vf,85:$Vg,106:$Vh,112:$Vi,113:$Vj,114:$Vk,115:$Vl,116:$Vm,117:$Vn,118:$Vo,119:$Vp,120:$Vq,121:$Vr,122:$Vs,123:$Vt,124:$Vu,125:$Vv,126:$Vw,127:$Vx,128:$Vy,129:$Vz},o($Va1,[2,54],{37:$Vb1}),{21:$V4,24:$V6,30:$V9,33:$Vb,62:135,63:$Vd,64:24,65:25,66:$Ve,84:$Vf,85:$Vg,106:$Vh,112:$Vi,113:$Vj,114:$Vk,115:$Vl,116:$Vm,117:$Vn,118:$Vo,119:$Vp,120:$Vq,121:$Vr,122:$Vs,123:$Vt,124:$Vu,125:$Vv,126:$Vw,127:$Vx,128:$Vy,129:$Vz},{21:[1,136]},{33:[1,137]},{13:[1,138],67:$Ve1},o($VA,[2,13]),{68:139,69:$VB,71:$VC,72:$VD,74:$VE,75:$VF,76:$VG,77:$VH,78:$VI,79:$VJ,80:$VK,81:$VL,82:69,83:70,86:$VM,87:$VN,88:$VO,89:$VP,90:$VQ,91:$VR,92:$VS,93:$VT,94:$VU,95:$VV,96:$VW,97:$VX,98:$VY,99:$VZ,100:$V_,101:$V$,102:$V01,103:$V11,104:$V21,105:$V31,107:$V41,108:$V51,109:$V61,110:$V71,111:$V81},{17:$Vg1,70:140,123:$Vh1,132:$Vi1,133:$Vj1,134:$Vk1},{17:$Vg1,70:146,123:$Vh1,132:$Vi1,133:$Vj1,134:$Vk1},{21:$Vl1,73:147,85:$Vm1},{21:$Vl1,73:150,85:$Vm1},{21:$Vl1,73:151,85:$Vm1},{21:$Vl1,73:152,85:$Vm1},{21:$Vl1,73:153,85:$Vm1},{21:$Vl1,73:154,85:$Vm1},{21:$Vl1,73:155,85:$Vm1},{21:$Vl1,73:156,85:$Vm1},{17:[1,157],66:[1,160],84:[1,158],85:[1,159]},{17:[1,161],66:[1,164],84:[1,162],85:[1,163]},{17:[1,165]},{17:[1,166],66:[1,167]},{106:[1,168]},o($VA,[2,15],{20:[1,169]}),{21:$Vn1,24:$Vo1,26:170,33:$Vp1,36:$Vq1,54:$Vr1,56:$Vs1},{21:$Vn1,24:$Vo1,26:177,33:$Vp1,36:$Vq1,54:$Vr1,56:$Vs1},o($V91,[2,50],{67:[1,178]}),o($Vt1,[2,68]),o($Va1,[2,52],{37:$Vb1}),o($Va1,[2,53],{37:$Vb1}),o($Vc1,[2,56]),o($Vc1,[2,61]),o($Vc1,[2,62]),o($VA,[2,11]),o($Vf1,[2,69]),{57:[1,179]},{35:[1,180],36:[1,181],57:[2,147],130:[1,182],131:[1,183]},{15:[1,184]},{15:[1,185]},{15:[1,186]},{35:[1,187],57:[2,161]},{57:[1,188]},{57:[1,189]},{57:[2,164]},{57:[2,165]},{57:[1,190]},{57:[1,191]},{57:[1,192]},{57:[1,193]},{57:[1,194]},{57:[1,195]},{57:[1,196]},{57:[1,197]},{57:[1,198]},{57:[1,199]},{35:[1,200]},{57:[1,201],67:[1,202]},{57:[1,203],67:[1,204]},{57:[1,205],67:[1,206]},{35:[1,207]},{57:[1,208],67:[1,209]},{57:[1,210]},{35:[1,211]},{57:[1,212]},{21:[1,213]},o($Vu1,[2,17],{35:$Vv1,36:$Vw1,37:$Vx1,38:$Vy1,39:$Vz1,40:$VA1,41:$VB1,42:$VC1,43:$VD1,44:$VE1,45:$VF1,46:$VG1,47:$VH1,48:$VI1,49:$VJ1,50:$VK1,51:$VL1,52:$VM1,53:$VN1,55:$VO1}),o($VP1,[2,23]),o($VP1,[2,24]),o($VP1,[2,25],{34:[1,234]}),{21:$Vn1,24:$Vo1,26:235,33:$Vp1,36:$Vq1,54:$Vr1,56:$Vs1},{21:$Vn1,24:$Vo1,26:236,33:$Vp1,36:$Vq1,54:$Vr1,56:$Vs1},{21:$Vn1,24:$Vo1,26:237,33:$Vp1,36:$Vq1,54:$Vr1,56:$Vs1},o($Vu1,[2,18],{35:$Vv1,36:$Vw1,37:$Vx1,38:$Vy1,39:$Vz1,40:$VA1,41:$VB1,42:$VC1,43:$VD1,44:$VE1,45:$VF1,46:$VG1,47:$VH1,48:$VI1,49:$VJ1,50:$VK1,51:$VL1,52:$VM1,53:$VN1,55:$VO1}),{30:$V9,64:238,84:$Vf,85:$Vg,106:$Vh,118:$Vo,119:$Vp,120:$Vq,121:$Vr,122:$Vs,123:$Vt,124:$Vu,125:$Vv,126:$Vw,127:$Vx,128:$Vy,129:$Vz},o($Vf1,[2,71]),{21:[1,239]},{21:[1,240]},{57:[2,150]},{57:[2,151]},{85:[1,241]},{85:[1,242]},{85:[1,243]},{84:[1,244],85:[1,245]},o($Vf1,[2,72]),o($Vf1,[2,73]),o($Vf1,[2,74]),o($Vf1,[2,75]),o($Vf1,[2,76]),o($Vf1,[2,77]),o($Vf1,[2,78]),o($Vf1,[2,79]),o($Vf1,[2,80]),o($Vf1,[2,81]),o($Vf1,[2,86]),o($Vf1,[2,87]),{84:[1,246],85:[1,247]},o($Vf1,[2,82]),{17:[1,248]},o($Vf1,[2,90]),{17:[1,249]},o($Vf1,[2,91]),{17:[1,250]},{84:[1,251],85:[1,252]},o($Vf1,[2,84]),{17:[1,253]},o($Vf1,[2,98]),{84:[1,254],85:[1,255]},o($Vf1,[2,119]),{22:[1,256]},{21:$Vn1,24:$Vo1,26:257,33:$Vp1,36:$Vq1,54:$Vr1,56:$Vs1},{21:$Vn1,24:$Vo1,26:258,33:$Vp1,36:$Vq1,54:$Vr1,56:$Vs1},{21:$Vn1,24:$Vo1,26:259,33:$Vp1,36:$Vq1,54:$Vr1,56:$Vs1},{21:$Vn1,24:$Vo1,26:260,33:$Vp1,36:$Vq1,54:$Vr1,56:$Vs1},{21:$Vn1,24:$Vo1,26:261,33:$Vp1,36:$Vq1,54:$Vr1,56:$Vs1},{21:$Vn1,24:$Vo1,26:262,33:$Vp1,36:$Vq1,54:$Vr1,56:$Vs1},{21:$Vn1,24:$Vo1,26:263,33:$Vp1,36:$Vq1,54:$Vr1,56:$Vs1},{21:$Vn1,24:$Vo1,26:264,33:$Vp1,36:$Vq1,54:$Vr1,56:$Vs1},{21:$Vn1,24:$Vo1,26:265,33:$Vp1,36:$Vq1,54:$Vr1,56:$Vs1},{21:$Vn1,24:$Vo1,26:266,33:$Vp1,36:$Vq1,54:$Vr1,56:$Vs1},{21:$Vn1,24:$Vo1,26:267,33:$Vp1,36:$Vq1,54:$Vr1,56:$Vs1},{21:$Vn1,24:$Vo1,26:268,33:$Vp1,36:$Vq1,54:$Vr1,56:$Vs1},{21:$Vn1,24:$Vo1,26:269,33:$Vp1,36:$Vq1,54:$Vr1,56:$Vs1},{21:$Vn1,24:$Vo1,26:270,33:$Vp1,36:$Vq1,54:$Vr1,56:$Vs1},{21:$Vn1,24:$Vo1,26:271,33:$Vp1,36:$Vq1,54:$Vr1,56:$Vs1},{21:$Vn1,24:$Vo1,26:272,33:$Vp1,36:$Vq1,54:$Vr1,56:$Vs1},{21:$Vn1,24:$Vo1,26:273,33:$Vp1,36:$Vq1,54:$Vr1,56:$Vs1},{21:$Vn1,24:$Vo1,26:274,33:$Vp1,36:$Vq1,54:$Vr1,56:$Vs1},{21:$Vn1,24:$Vo1,26:275,33:$Vp1,36:$Vq1,54:$Vr1,56:$Vs1},{21:$Vn1,24:$Vo1,26:276,33:$Vp1,36:$Vq1,54:$Vr1,56:$Vs1},{21:$Vn1,24:$Vo1,26:277,33:$Vp1,36:$Vq1,54:$Vr1,56:$Vs1},o($VQ1,[2,33],{37:$Vx1,38:$Vy1,39:$Vz1,40:$VA1}),o($VP1,[2,47]),{35:$Vv1,36:$Vw1,37:$Vx1,38:$Vy1,39:$Vz1,40:$VA1,41:$VB1,42:$VC1,43:$VD1,44:$VE1,45:$VF1,46:$VG1,47:$VH1,48:$VI1,49:$VJ1,50:$VK1,51:$VL1,52:$VM1,53:$VN1,55:$VO1,57:[1,278]},o($Vt1,[2,67]),{57:[2,148]},{57:[2,149]},{35:[1,279],36:[1,280],57:[2,154]},{35:[1,281],36:[1,282],57:[2,157]},{35:[1,283],36:[1,284],57:[2,160]},{57:[2,162]},{57:[2,163]},{57:[1,285]},{57:[1,286]},{57:[1,287]},{57:[1,288]},{57:[1,289]},{57:[1,290],67:[1,291]},{57:[1,292],67:[1,293]},{57:[1,294]},{57:[1,295]},{57:[1,296]},o($VA,[2,16]),o($VQ1,[2,27],{37:$Vx1,38:$Vy1,39:$Vz1,40:$VA1}),o($VQ1,[2,28],{37:$Vx1,38:$Vy1,39:$Vz1,40:$VA1}),o($VP1,[2,29]),o($VP1,[2,30]),o($VP1,[2,31]),o($VP1,[2,32]),o($VR1,[2,34],{35:$Vv1,36:$Vw1,37:$Vx1,38:$Vy1,39:$Vz1,40:$VA1}),o($VR1,[2,35],{35:$Vv1,36:$Vw1,37:$Vx1,38:$Vy1,39:$Vz1,40:$VA1}),o([5,13,15,17,18,21,23,24,27,28,30,31,33,43,52,53,55,57,63,66,84,85,106,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129],[2,36],{35:$Vv1,36:$Vw1,37:$Vx1,38:$Vy1,39:$Vz1,40:$VA1,41:$VB1,42:$VC1,44:$VE1,45:$VF1,46:$VG1,47:$VH1,48:$VI1,49:$VJ1,50:$VK1,51:$VL1}),o([5,13,15,17,18,21,23,24,27,28,30,31,33,43,44,45,52,53,55,57,63,66,84,85,106,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129],[2,37],{35:$Vv1,36:$Vw1,37:$Vx1,38:$Vy1,39:$Vz1,40:$VA1,41:$VB1,42:$VC1,46:$VG1,47:$VH1,48:$VI1,49:$VJ1,50:$VK1,51:$VL1}),o([5,13,15,17,18,21,23,24,27,28,30,31,33,43,45,52,53,55,57,63,66,84,85,106,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129],[2,38],{35:$Vv1,36:$Vw1,37:$Vx1,38:$Vy1,39:$Vz1,40:$VA1,41:$VB1,42:$VC1,44:$VE1,46:$VG1,47:$VH1,48:$VI1,49:$VJ1,50:$VK1,51:$VL1}),o($VS1,[2,39],{35:$Vv1,36:$Vw1,37:$Vx1,38:$Vy1,39:$Vz1,40:$VA1,41:$VB1,42:$VC1}),o($VS1,[2,40],{35:$Vv1,36:$Vw1,37:$Vx1,38:$Vy1,39:$Vz1,40:$VA1,41:$VB1,42:$VC1}),o($VS1,[2,41],{35:$Vv1,36:$Vw1,37:$Vx1,38:$Vy1,39:$Vz1,40:$VA1,41:$VB1,42:$VC1}),o($VS1,[2,42],{35:$Vv1,36:$Vw1,37:$Vx1,38:$Vy1,39:$Vz1,40:$VA1,41:$VB1,42:$VC1}),o($VT1,[2,43],{35:$Vv1,36:$Vw1,37:$Vx1,38:$Vy1,39:$Vz1,40:$VA1,41:$VB1,42:$VC1,46:$VG1,47:$VH1,48:$VI1,49:$VJ1}),o($VT1,[2,44],{35:$Vv1,36:$Vw1,37:$Vx1,38:$Vy1,39:$Vz1,40:$VA1,41:$VB1,42:$VC1,46:$VG1,47:$VH1,48:$VI1,49:$VJ1}),o([5,13,15,17,18,21,23,24,27,28,30,31,33,52,53,55,57,63,66,84,85,106,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129],[2,45],{35:$Vv1,36:$Vw1,37:$Vx1,38:$Vy1,39:$Vz1,40:$VA1,41:$VB1,42:$VC1,43:$VD1,44:$VE1,45:$VF1,46:$VG1,47:$VH1,48:$VI1,49:$VJ1,50:$VK1,51:$VL1}),o([5,13,15,17,18,21,23,24,27,28,30,31,33,53,55,57,63,66,84,85,106,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129],[2,46],{35:$Vv1,36:$Vw1,37:$Vx1,38:$Vy1,39:$Vz1,40:$VA1,41:$VB1,42:$VC1,43:$VD1,44:$VE1,45:$VF1,46:$VG1,47:$VH1,48:$VI1,49:$VJ1,50:$VK1,51:$VL1,52:$VM1}),{15:[1,297],35:$Vv1,36:$Vw1,37:$Vx1,38:$Vy1,39:$Vz1,40:$VA1,41:$VB1,42:$VC1,43:$VD1,44:$VE1,45:$VF1,46:$VG1,47:$VH1,48:$VI1,49:$VJ1,50:$VK1,51:$VL1,52:$VM1,53:$VN1,55:$VO1},o([5,13,15,17,18,21,23,24,27,28,30,31,33,55,57,63,66,84,85,106,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129],[2,26],{35:$Vv1,36:$Vw1,37:$Vx1,38:$Vy1,39:$Vz1,40:$VA1,41:$VB1,42:$VC1,43:$VD1,44:$VE1,45:$VF1,46:$VG1,47:$VH1,48:$VI1,49:$VJ1,50:$VK1,51:$VL1,52:$VM1,53:$VN1}),o($VP1,[2,49]),{21:[1,298]},{21:[1,299]},{21:[1,300]},{21:[1,301]},{21:[1,302]},{21:[1,303]},o($Vf1,[2,88]),o($Vf1,[2,89]),o($Vf1,[2,83]),o($Vf1,[2,94]),o($Vf1,[2,95]),o($Vf1,[2,92]),{17:[1,304]},o($Vf1,[2,93]),{17:[1,305]},o($Vf1,[2,85]),o($Vf1,[2,99]),o($Vf1,[2,100]),{21:$Vn1,24:$Vo1,26:306,33:$Vp1,36:$Vq1,54:$Vr1,56:$Vs1},{57:[2,152]},{57:[2,153]},{57:[2,155]},{57:[2,156]},{57:[2,158]},{57:[2,159]},{57:[1,307]},{57:[1,308]},o([5,13,15,17,18,21,23,24,27,28,30,31,33,57,63,66,84,85,106,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129],[2,48],{35:$Vv1,36:$Vw1,37:$Vx1,38:$Vy1,39:$Vz1,40:$VA1,41:$VB1,42:$VC1,43:$VD1,44:$VE1,45:$VF1,46:$VG1,47:$VH1,48:$VI1,49:$VJ1,50:$VK1,51:$VL1,52:$VM1,53:$VN1,55:$VO1}),o($Vf1,[2,96]),o($Vf1,[2,97])], -defaultActions: {52:[2,1],91:[2,120],92:[2,121],93:[2,122],94:[2,123],95:[2,124],98:[2,20],99:[2,21],148:[2,164],149:[2,165],182:[2,150],183:[2,151],239:[2,148],240:[2,149],244:[2,162],245:[2,163],298:[2,152],299:[2,153],300:[2,155],301:[2,156],302:[2,158],303:[2,159]}, +table: [{3:1,4:2,6:3,7:4,8:5,9:6,10:7,11:8,12:9,13:$V0,14:11,15:$V1,17:$V2,18:$V3,21:$V4,23:$V5,24:$V6,27:$V7,28:$V8,30:$V9,31:$Va,33:$Vb,36:$Vc,58:19,61:21,62:22,63:$Vd,64:$Ve,65:25,66:26,67:$Vf,89:$Vg,90:$Vh,115:$Vi,121:$Vj,122:$Vk,123:$Vl,124:$Vm,125:$Vn,126:$Vo,127:$Vp,128:$Vq,129:$Vr,130:$Vs,131:$Vt,132:$Vu,133:$Vv,134:$Vw,135:$Vx,136:$Vy,137:$Vz,138:$VA,139:$VB},{1:[3]},{5:[1,54],6:55,7:4,8:5,9:6,10:7,11:8,12:9,13:$V0,14:11,15:$V1,17:$V2,18:$V3,21:$V4,23:$V5,24:$V6,27:$V7,28:$V8,30:$V9,31:$Va,33:$Vb,36:$Vc,58:19,61:21,62:22,63:$Vd,64:$Ve,65:25,66:26,67:$Vf,89:$Vg,90:$Vh,115:$Vi,121:$Vj,122:$Vk,123:$Vl,124:$Vm,125:$Vn,126:$Vo,127:$Vp,128:$Vq,129:$Vr,130:$Vs,131:$Vt,132:$Vu,133:$Vv,134:$Vw,135:$Vx,136:$Vy,137:$Vz,138:$VA,139:$VB},o($VC,[2,3]),o($VC,[2,4]),o($VC,[2,5]),o($VC,[2,6]),o($VC,[2,7]),o($VC,[2,8]),o($VC,[2,9]),o($VC,[2,10]),{13:[1,57],15:[1,56]},{16:58,69:59,70:$VD,72:$VE,73:$VF,75:$VG,76:$VH,77:$VI,78:$VJ,79:$VK,80:$VL,81:$VM,82:$VN,83:$VO,84:$VP,85:$VQ,86:$VR,87:75,88:76,91:$VS,92:$VT,93:$VU,94:$VV,95:$VW,96:$VX,97:$VY,98:$VZ,99:$V_,100:$V$,101:$V01,102:$V11,103:$V21,104:$V31,105:$V41,106:$V51,107:$V61,108:$V71,109:$V81,110:$V91,111:$Va1,112:$Vb1,113:$Vc1,114:$Vd1,116:$Ve1,117:$Vf1,118:$Vg1,119:$Vh1,120:$Vi1},{15:[1,106]},{19:107,29:[1,108],30:[1,109]},{23:[1,110]},{23:[1,111]},{32:[1,112]},o($VC,[2,20]),o($Vj1,[2,52],{35:[1,114],36:[1,115],59:[1,113]}),{21:$V4,23:$V5,30:$V9,33:$Vb,61:116,62:22,63:$Vd,64:$Ve,65:25,66:26,67:$Vf,89:$Vg,90:$Vh,115:$Vi,121:$Vj,122:$Vk,123:$Vl,124:$Vm,125:$Vn,126:$Vo,127:$Vp,128:$Vq,129:$Vr,130:$Vs,131:$Vt,132:$Vu,133:$Vv,134:$Vw,135:$Vx,136:$Vy,137:$Vz,138:$VA,139:$VB},o($Vk1,[2,56],{37:$Vl1}),o($Vm1,[2,58]),o($Vm1,[2,59]),o($Vm1,[2,60]),o($Vm1,[2,61]),o($Vm1,[2,62]),o($Vm1,[2,65],{38:[1,118]}),o($Vm1,[2,66],{38:[1,119]}),o($Vm1,[2,67]),o($Vm1,[2,68]),o($Vn1,[2,142]),o($Vn1,[2,143]),o($Vn1,[2,144]),o($Vn1,[2,145]),o($Vn1,[2,146]),o($Vn1,[2,147]),o($Vn1,[2,148]),o($Vn1,[2,149]),o($Vn1,[2,150]),o($Vn1,[2,151]),o($Vn1,[2,152]),o($Vn1,[2,153]),o($Vn1,[2,154]),o($Vn1,[2,155]),o($Vn1,[2,156]),o($Vn1,[2,157]),o($Vm1,[2,135]),o($Vm1,[2,136]),o($Vm1,[2,137]),o($Vm1,[2,138]),o($Vm1,[2,139]),o($Vm1,[2,140]),o($Vm1,[2,141]),{1:[2,1]},o($VC,[2,2]),{16:120,69:59,70:$VD,72:$VE,73:$VF,75:$VG,76:$VH,77:$VI,78:$VJ,79:$VK,80:$VL,81:$VM,82:$VN,83:$VO,84:$VP,85:$VQ,86:$VR,87:75,88:76,91:$VS,92:$VT,93:$VU,94:$VV,95:$VW,96:$VX,97:$VY,98:$VZ,99:$V_,100:$V$,101:$V01,102:$V11,103:$V21,104:$V31,105:$V41,106:$V51,107:$V61,108:$V71,109:$V81,110:$V91,111:$Va1,112:$Vb1,113:$Vc1,114:$Vd1,116:$Ve1,117:$Vf1,118:$Vg1,119:$Vh1,120:$Vi1},o($VC,[2,12]),{13:[1,121],68:$Vo1},o($Vp1,[2,72]),{56:[1,123]},{56:[1,124]},{56:[1,125]},{56:[1,126]},{56:[1,127]},{56:[1,128]},{56:[1,129]},{56:[1,130]},{56:[1,131]},{56:[1,132]},{56:[1,133]},{56:[1,134]},{56:[1,135]},{56:[1,136]},{56:[1,137]},{56:[1,138]},{56:[1,139]},{56:[1,140]},o($Vp1,[2,107]),o($Vp1,[2,108]),o($Vp1,[2,109]),o($Vp1,[2,110]),o($Vp1,[2,111]),o($Vp1,[2,112]),o($Vp1,[2,113]),o($Vp1,[2,114]),o($Vp1,[2,115]),o($Vp1,[2,116]),o($Vp1,[2,117]),o($Vp1,[2,118]),o($Vp1,[2,119]),o($Vp1,[2,120]),o($Vp1,[2,121]),o($Vp1,[2,122]),o($Vp1,[2,123]),o($Vp1,[2,124]),o($Vp1,[2,125]),o($Vp1,[2,126]),o($Vp1,[2,127]),o($Vp1,[2,128]),{56:[1,141]},{56:[2,130]},{56:[2,131]},{56:[2,132]},{56:[2,133]},{56:[2,134]},o($VC,[2,14]),{17:[1,142]},{17:[2,21]},{17:[2,22]},{25:[1,143]},{25:[1,144]},o($VC,[2,23]),{30:$V9,60:145,65:146,89:$Vg,90:$Vh,115:$Vi,128:$Vq,129:$Vr,130:$Vs,131:$Vt,132:$Vu,133:$Vv,134:$Vw,135:$Vx,136:$Vy,137:$Vz,138:$VA,139:$VB},{21:$V4,23:$V5,30:$V9,33:$Vb,61:147,62:22,63:$Vd,64:$Ve,65:25,66:26,67:$Vf,89:$Vg,90:$Vh,115:$Vi,121:$Vj,122:$Vk,123:$Vl,124:$Vm,125:$Vn,126:$Vo,127:$Vp,128:$Vq,129:$Vr,130:$Vs,131:$Vt,132:$Vu,133:$Vv,134:$Vw,135:$Vx,136:$Vy,137:$Vz,138:$VA,139:$VB},{21:$V4,23:$V5,30:$V9,33:$Vb,61:148,62:22,63:$Vd,64:$Ve,65:25,66:26,67:$Vf,89:$Vg,90:$Vh,115:$Vi,121:$Vj,122:$Vk,123:$Vl,124:$Vm,125:$Vn,126:$Vo,127:$Vp,128:$Vq,129:$Vr,130:$Vs,131:$Vt,132:$Vu,133:$Vv,134:$Vw,135:$Vx,136:$Vy,137:$Vz,138:$VA,139:$VB},o($Vk1,[2,55],{37:$Vl1}),{21:$V4,23:$V5,30:$V9,33:$Vb,62:149,63:$Vd,64:$Ve,65:25,66:26,67:$Vf,89:$Vg,90:$Vh,115:$Vi,121:$Vj,122:$Vk,123:$Vl,124:$Vm,125:$Vn,126:$Vo,127:$Vp,128:$Vq,129:$Vr,130:$Vs,131:$Vt,132:$Vu,133:$Vv,134:$Vw,135:$Vx,136:$Vy,137:$Vz,138:$VA,139:$VB},{21:[1,150]},{33:[1,151]},{13:[1,152],68:$Vo1},o($VC,[2,13]),{69:153,70:$VD,72:$VE,73:$VF,75:$VG,76:$VH,77:$VI,78:$VJ,79:$VK,80:$VL,81:$VM,82:$VN,83:$VO,84:$VP,85:$VQ,86:$VR,87:75,88:76,91:$VS,92:$VT,93:$VU,94:$VV,95:$VW,96:$VX,97:$VY,98:$VZ,99:$V_,100:$V$,101:$V01,102:$V11,103:$V21,104:$V31,105:$V41,106:$V51,107:$V61,108:$V71,109:$V81,110:$V91,111:$Va1,112:$Vb1,113:$Vc1,114:$Vd1,116:$Ve1,117:$Vf1,118:$Vg1,119:$Vh1,120:$Vi1},{17:$Vq1,71:154,133:$Vr1,142:$Vs1,143:$Vt1,144:$Vu1},{17:$Vq1,71:160,133:$Vr1,142:$Vs1,143:$Vt1,144:$Vu1},{21:$Vv1,74:161,89:$Vw1,90:$Vx1},{21:$Vv1,74:165,89:$Vw1,90:$Vx1},{21:$Vv1,74:166,89:$Vw1,90:$Vx1},{21:$Vv1,74:167,89:$Vw1,90:$Vx1},{21:$Vv1,74:168,89:$Vw1,90:$Vx1},{21:$Vv1,74:169,89:$Vw1,90:$Vx1},{21:$Vv1,74:170,89:$Vw1,90:$Vx1},{21:$Vv1,74:171,89:$Vw1,90:$Vx1},{21:$Vv1,74:172,89:$Vw1,90:$Vx1},{21:$Vv1,74:173,89:$Vw1,90:$Vx1},{21:$Vv1,74:174,89:$Vw1,90:$Vx1},{21:$Vv1,74:175,89:$Vw1,90:$Vx1},{17:[1,176],67:[1,179],89:[1,177],90:[1,178]},{17:[1,180],67:[1,183],89:[1,181],90:[1,182]},{17:[1,184]},{17:[1,185],67:[1,186]},{115:[1,187]},o($VC,[2,15],{20:[1,188]}),{21:$Vy1,23:$Vz1,26:189,33:$VA1,36:$VB1,54:$VC1,56:$VD1},{21:$Vy1,23:$Vz1,26:196,33:$VA1,36:$VB1,54:$VC1,56:$VD1},o($Vj1,[2,51],{68:[1,197]}),o($VE1,[2,70]),o($Vk1,[2,53],{37:$Vl1}),o($Vk1,[2,54],{37:$Vl1}),o($Vm1,[2,57]),o($Vm1,[2,63]),o($Vm1,[2,64]),o($VC,[2,11]),o($Vp1,[2,71]),{57:[1,198]},{35:[1,199],36:[1,200],57:[2,158],140:[1,201],141:[1,202]},{15:[1,203]},{15:[1,204]},{15:[1,205]},{20:[1,207],35:[1,206],57:[2,172]},{57:[1,208]},{57:[1,209]},{57:[2,180]},{35:[1,210],57:[2,181]},{35:[1,211],57:[2,182]},{57:[1,212]},{57:[1,213]},{57:[1,214]},{57:[1,215]},{57:[1,216]},{57:[1,217]},{57:[1,218]},{57:[1,219]},{57:[1,220]},{57:[1,221]},{57:[1,222]},{57:[1,223]},{57:[1,224]},{57:[1,225]},{35:[1,226]},{57:[1,227],68:[1,228]},{57:[1,229],68:[1,230]},{57:[1,231],68:[1,232]},{35:[1,233]},{57:[1,234],68:[1,235]},{57:[1,236]},{35:[1,237]},{57:[1,238]},{21:[1,239],23:[1,240]},o($VF1,[2,18],{35:$VG1,36:$VH1,37:$VI1,38:$VJ1,39:$VK1,40:$VL1,41:$VM1,42:$VN1,43:$VO1,44:$VP1,45:$VQ1,46:$VR1,47:$VS1,48:$VT1,49:$VU1,50:$VV1,51:$VW1,52:$VX1,53:$VY1,55:$VZ1}),o($V_1,[2,24]),o($V_1,[2,25]),o($V_1,[2,26],{34:[1,261]}),{21:$Vy1,23:$Vz1,26:262,33:$VA1,36:$VB1,54:$VC1,56:$VD1},{21:$Vy1,23:$Vz1,26:263,33:$VA1,36:$VB1,54:$VC1,56:$VD1},{21:$Vy1,23:$Vz1,26:264,33:$VA1,36:$VB1,54:$VC1,56:$VD1},o($VF1,[2,19],{35:$VG1,36:$VH1,37:$VI1,38:$VJ1,39:$VK1,40:$VL1,41:$VM1,42:$VN1,43:$VO1,44:$VP1,45:$VQ1,46:$VR1,47:$VS1,48:$VT1,49:$VU1,50:$VV1,51:$VW1,52:$VX1,53:$VY1,55:$VZ1}),{30:$V9,65:265,89:$Vg,90:$Vh,115:$Vi,128:$Vq,129:$Vr,130:$Vs,131:$Vt,132:$Vu,133:$Vv,134:$Vw,135:$Vx,136:$Vy,137:$Vz,138:$VA,139:$VB},o($Vp1,[2,73]),{21:[1,266]},{21:[1,267]},{57:[2,161]},{57:[2,162]},{90:[1,268]},{90:[1,269]},{90:[1,270]},{21:[1,273],89:[1,271],90:[1,272]},{21:[1,275],90:[1,274]},o($Vp1,[2,74]),o($Vp1,[2,75]),{21:[1,276]},{21:[1,277]},o($Vp1,[2,76]),o($Vp1,[2,77]),o($Vp1,[2,78]),o($Vp1,[2,79]),o($Vp1,[2,80]),o($Vp1,[2,81]),o($Vp1,[2,82]),o($Vp1,[2,83]),o($Vp1,[2,84]),o($Vp1,[2,85]),o($Vp1,[2,86]),o($Vp1,[2,87]),o($Vp1,[2,92]),o($Vp1,[2,93]),{89:[1,278],90:[1,279]},o($Vp1,[2,88]),{17:[1,280]},o($Vp1,[2,96]),{17:[1,281]},o($Vp1,[2,97]),{17:[1,282]},{89:[1,283],90:[1,284]},o($Vp1,[2,90]),{17:[1,285]},o($Vp1,[2,104]),{89:[1,286],90:[1,287]},o($Vp1,[2,129]),{22:[1,288]},{22:[1,289]},{21:$Vy1,23:$Vz1,26:290,33:$VA1,36:$VB1,54:$VC1,56:$VD1},{21:$Vy1,23:$Vz1,26:291,33:$VA1,36:$VB1,54:$VC1,56:$VD1},{21:$Vy1,23:$Vz1,26:292,33:$VA1,36:$VB1,54:$VC1,56:$VD1},{21:$Vy1,23:$Vz1,26:293,33:$VA1,36:$VB1,54:$VC1,56:$VD1},{21:$Vy1,23:$Vz1,26:294,33:$VA1,36:$VB1,54:$VC1,56:$VD1},{21:$Vy1,23:$Vz1,26:295,33:$VA1,36:$VB1,54:$VC1,56:$VD1},{21:$Vy1,23:$Vz1,26:296,33:$VA1,36:$VB1,54:$VC1,56:$VD1},{21:$Vy1,23:$Vz1,26:297,33:$VA1,36:$VB1,54:$VC1,56:$VD1},{21:$Vy1,23:$Vz1,26:298,33:$VA1,36:$VB1,54:$VC1,56:$VD1},{21:$Vy1,23:$Vz1,26:299,33:$VA1,36:$VB1,54:$VC1,56:$VD1},{21:$Vy1,23:$Vz1,26:300,33:$VA1,36:$VB1,54:$VC1,56:$VD1},{21:$Vy1,23:$Vz1,26:301,33:$VA1,36:$VB1,54:$VC1,56:$VD1},{21:$Vy1,23:$Vz1,26:302,33:$VA1,36:$VB1,54:$VC1,56:$VD1},{21:$Vy1,23:$Vz1,26:303,33:$VA1,36:$VB1,54:$VC1,56:$VD1},{21:$Vy1,23:$Vz1,26:304,33:$VA1,36:$VB1,54:$VC1,56:$VD1},{21:$Vy1,23:$Vz1,26:305,33:$VA1,36:$VB1,54:$VC1,56:$VD1},{21:$Vy1,23:$Vz1,26:306,33:$VA1,36:$VB1,54:$VC1,56:$VD1},{21:$Vy1,23:$Vz1,26:307,33:$VA1,36:$VB1,54:$VC1,56:$VD1},{21:$Vy1,23:$Vz1,26:308,33:$VA1,36:$VB1,54:$VC1,56:$VD1},{21:$Vy1,23:$Vz1,26:309,33:$VA1,36:$VB1,54:$VC1,56:$VD1},{21:$Vy1,23:$Vz1,26:310,33:$VA1,36:$VB1,54:$VC1,56:$VD1},o($V$1,[2,34],{37:$VI1,38:$VJ1,39:$VK1,40:$VL1}),o($V_1,[2,48]),{35:$VG1,36:$VH1,37:$VI1,38:$VJ1,39:$VK1,40:$VL1,41:$VM1,42:$VN1,43:$VO1,44:$VP1,45:$VQ1,46:$VR1,47:$VS1,48:$VT1,49:$VU1,50:$VV1,51:$VW1,52:$VX1,53:$VY1,55:$VZ1,57:[1,311]},o($VE1,[2,69]),{57:[2,159]},{57:[2,160]},{35:[1,312],36:[1,313],57:[2,165]},{35:[1,314],36:[1,315],57:[2,168]},{35:[1,316],36:[1,317],57:[2,171]},{57:[2,173]},{57:[2,174]},{57:[2,178]},{22:[1,318],35:[1,320],36:[1,319]},{22:[1,321]},{57:[2,183]},{57:[2,184]},{57:[1,322]},{57:[1,323]},{57:[1,324]},{57:[1,325]},{57:[1,326]},{57:[1,327],68:[1,328]},{57:[1,329],68:[1,330]},{57:[1,331]},{57:[1,332]},{57:[1,333]},o($VC,[2,16]),o($VC,[2,17]),o($V$1,[2,28],{37:$VI1,38:$VJ1,39:$VK1,40:$VL1}),o($V$1,[2,29],{37:$VI1,38:$VJ1,39:$VK1,40:$VL1}),o($V_1,[2,30]),o($V_1,[2,31]),o($V_1,[2,32]),o($V_1,[2,33]),o($V02,[2,35],{35:$VG1,36:$VH1,37:$VI1,38:$VJ1,39:$VK1,40:$VL1}),o($V02,[2,36],{35:$VG1,36:$VH1,37:$VI1,38:$VJ1,39:$VK1,40:$VL1}),o([5,13,15,17,18,21,23,24,27,28,30,31,33,43,52,53,55,57,63,64,67,89,90,115,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139],[2,37],{35:$VG1,36:$VH1,37:$VI1,38:$VJ1,39:$VK1,40:$VL1,41:$VM1,42:$VN1,44:$VP1,45:$VQ1,46:$VR1,47:$VS1,48:$VT1,49:$VU1,50:$VV1,51:$VW1}),o([5,13,15,17,18,21,23,24,27,28,30,31,33,43,44,45,52,53,55,57,63,64,67,89,90,115,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139],[2,38],{35:$VG1,36:$VH1,37:$VI1,38:$VJ1,39:$VK1,40:$VL1,41:$VM1,42:$VN1,46:$VR1,47:$VS1,48:$VT1,49:$VU1,50:$VV1,51:$VW1}),o([5,13,15,17,18,21,23,24,27,28,30,31,33,43,45,52,53,55,57,63,64,67,89,90,115,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139],[2,39],{35:$VG1,36:$VH1,37:$VI1,38:$VJ1,39:$VK1,40:$VL1,41:$VM1,42:$VN1,44:$VP1,46:$VR1,47:$VS1,48:$VT1,49:$VU1,50:$VV1,51:$VW1}),o($V12,[2,40],{35:$VG1,36:$VH1,37:$VI1,38:$VJ1,39:$VK1,40:$VL1,41:$VM1,42:$VN1}),o($V12,[2,41],{35:$VG1,36:$VH1,37:$VI1,38:$VJ1,39:$VK1,40:$VL1,41:$VM1,42:$VN1}),o($V12,[2,42],{35:$VG1,36:$VH1,37:$VI1,38:$VJ1,39:$VK1,40:$VL1,41:$VM1,42:$VN1}),o($V12,[2,43],{35:$VG1,36:$VH1,37:$VI1,38:$VJ1,39:$VK1,40:$VL1,41:$VM1,42:$VN1}),o($V22,[2,44],{35:$VG1,36:$VH1,37:$VI1,38:$VJ1,39:$VK1,40:$VL1,41:$VM1,42:$VN1,46:$VR1,47:$VS1,48:$VT1,49:$VU1}),o($V22,[2,45],{35:$VG1,36:$VH1,37:$VI1,38:$VJ1,39:$VK1,40:$VL1,41:$VM1,42:$VN1,46:$VR1,47:$VS1,48:$VT1,49:$VU1}),o([5,13,15,17,18,21,23,24,27,28,30,31,33,52,53,55,57,63,64,67,89,90,115,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139],[2,46],{35:$VG1,36:$VH1,37:$VI1,38:$VJ1,39:$VK1,40:$VL1,41:$VM1,42:$VN1,43:$VO1,44:$VP1,45:$VQ1,46:$VR1,47:$VS1,48:$VT1,49:$VU1,50:$VV1,51:$VW1}),o([5,13,15,17,18,21,23,24,27,28,30,31,33,53,55,57,63,64,67,89,90,115,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139],[2,47],{35:$VG1,36:$VH1,37:$VI1,38:$VJ1,39:$VK1,40:$VL1,41:$VM1,42:$VN1,43:$VO1,44:$VP1,45:$VQ1,46:$VR1,47:$VS1,48:$VT1,49:$VU1,50:$VV1,51:$VW1,52:$VX1}),{15:[1,334],35:$VG1,36:$VH1,37:$VI1,38:$VJ1,39:$VK1,40:$VL1,41:$VM1,42:$VN1,43:$VO1,44:$VP1,45:$VQ1,46:$VR1,47:$VS1,48:$VT1,49:$VU1,50:$VV1,51:$VW1,52:$VX1,53:$VY1,55:$VZ1},o([5,13,15,17,18,21,23,24,27,28,30,31,33,55,57,63,64,67,89,90,115,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139],[2,27],{35:$VG1,36:$VH1,37:$VI1,38:$VJ1,39:$VK1,40:$VL1,41:$VM1,42:$VN1,43:$VO1,44:$VP1,45:$VQ1,46:$VR1,47:$VS1,48:$VT1,49:$VU1,50:$VV1,51:$VW1,52:$VX1,53:$VY1}),o($V_1,[2,50]),{21:[1,335]},{21:[1,336]},{21:[1,337]},{21:[1,338]},{21:[1,339]},{21:[1,340]},{57:[2,175]},{21:[1,341]},{21:[1,342]},{57:[2,179]},o($Vp1,[2,94]),o($Vp1,[2,95]),o($Vp1,[2,89]),o($Vp1,[2,100]),o($Vp1,[2,101]),o($Vp1,[2,98]),{17:[1,343]},o($Vp1,[2,99]),{17:[1,344]},o($Vp1,[2,91]),o($Vp1,[2,105]),o($Vp1,[2,106]),{21:$Vy1,23:$Vz1,26:345,33:$VA1,36:$VB1,54:$VC1,56:$VD1},{57:[2,163]},{57:[2,164]},{57:[2,166]},{57:[2,167]},{57:[2,169]},{57:[2,170]},{22:[1,346]},{22:[1,347]},{57:[1,348]},{57:[1,349]},o([5,13,15,17,18,21,23,24,27,28,30,31,33,57,63,64,67,89,90,115,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139],[2,49],{35:$VG1,36:$VH1,37:$VI1,38:$VJ1,39:$VK1,40:$VL1,41:$VM1,42:$VN1,43:$VO1,44:$VP1,45:$VQ1,46:$VR1,47:$VS1,48:$VT1,49:$VU1,50:$VV1,51:$VW1,52:$VX1,53:$VY1,55:$VZ1}),{57:[2,176]},{57:[2,177]},o($Vp1,[2,102]),o($Vp1,[2,103])], +defaultActions: {54:[2,1],101:[2,130],102:[2,131],103:[2,132],104:[2,133],105:[2,134],108:[2,21],109:[2,22],162:[2,180],201:[2,161],202:[2,162],266:[2,159],267:[2,160],271:[2,173],272:[2,174],273:[2,178],276:[2,183],277:[2,184],318:[2,175],321:[2,179],335:[2,163],336:[2,164],337:[2,166],338:[2,167],339:[2,169],340:[2,170],346:[2,176],347:[2,177]}, parseError: function parseError (str, hash) { if (hash.recoverable) { this.trace(str); @@ -1161,85 +1257,85 @@ case 3: yy_.yytext = Number(yy_.yytext.replace(/\_/g, "")); return 21; break; case 4: yy_.yytext = yy_.yytext.slice(3, -1); return "COMMAND"; break; -case 5: yy_.yytext = yy_.yytext.length == 1 ? "" : yy_.yytext.slice(2, -1); return 63; +case 5: yy_.yytext = yy_.yytext.slice(3, -1); return 64; break; -case 6: return "LF"; +case 6: yy_.yytext = yy_.yytext.length == 1 ? "" : yy_.yytext.slice(2, -1); return 63; break; -case 7: /* console.log("Empty spaces"); */ +case 7: return "LF"; break; -case 8: return 118; +case 8: /* console.log("Empty spaces"); */ break; -case 9: return 119; +case 9: return 128; break; -case 10: return 120; +case 10: return 129; break; -case 11: return 121; +case 11: return 130; break; -case 12: return 85; +case 12: return 131; break; -case 13: return 106; +case 13: return 90; break; -case 14: return 122; +case 14: return 115; break; -case 15: return 30; +case 15: return 132; break; -case 16: return 123; +case 16: return 30; break; -case 17: return 124; +case 17: return 133; break; -case 18: return 125; +case 18: return 134; break; -case 19: return 126; +case 19: return 135; break; -case 20: return 84; +case 20: return 136; break; -case 21: return 127; +case 21: return 89; break; -case 22: return 129; +case 22: return 137; break; -case 23: return 128; +case 23: return 139; break; -case 24: return 69 +case 24: return 138; break; -case 25: return 71 +case 25: return 70 break; -case 26: return 75 +case 26: return 72 break; case 27: return 76 break; -case 28: return 74 +case 28: return 77 break; -case 29: return 72 +case 29: return 75 break; -case 30: return 79 +case 30: return 73 break; case 31: return 80 break; -case 32: return 78 +case 32: return 81 break; -case 33: return 77 +case 33: return 79 break; -case 34: return 81 +case 34: return 78 break; -case 35: return 108 +case 35: return 84 break; -case 36: return 109 +case 36: return 85 break; -case 37: return 111 +case 37: return 83 break; -case 38: return 110 +case 38: return 82 break; -case 39: return 107 +case 39: return 86 break; -case 40: return 86 +case 40: return 117 break; -case 41: return 87 +case 41: return 118 break; -case 42: return 88 +case 42: return 120 break; -case 43: return 89 +case 43: return 119 break; -case 44: return 90 +case 44: return 116 break; case 45: return 91 break; @@ -1257,130 +1353,150 @@ case 51: return 97 break; case 52: return 98 break; -case 53: return 99 +case 53: return 100 +break; +case 54: return 101 +break; +case 55: return 99 +break; +case 56: return 102 +break; +case 57: return 103 +break; +case 58: return 104 +break; +case 59: return 105 +break; +case 60: return 106 +break; +case 61: return 107 +break; +case 62: return 108 +break; +case 63: return 109 break; -case 54: return 100 +case 64: return 110 break; -case 55: return 101 +case 65: return 121 break; -case 56: return 112 +case 66: return 122 break; -case 57: return 113 +case 67: return 123 break; -case 58: return 114 +case 68: return 124 break; -case 59: return 115 +case 69: return 125 break; -case 60: return 116 +case 70: return 126 break; -case 61: return 117 +case 71: return 127 break; -case 62: return 104 +case 72: return 113 break; -case 63: return 102 +case 73: return 111 break; -case 64: return 103 +case 74: return 112 break; -case 65: return 132 +case 75: return 142 break; -case 66: return 133 +case 76: return 143 break; -case 67: return 134 +case 77: return 144 break; -case 68: return 31 +case 78: return 31 break; -case 69: return 18 +case 79: return 18 break; -case 70: return 29 +case 80: return 29 break; -case 71: return 30 +case 81: return 30 break; -case 72: return 23 +case 82: return 24 break; -case 73: return 27 +case 83: return 27 break; -case 74: return 105 +case 84: return 114 break; -case 75: yy_.yytext = yy_.yytext.slice(1,-1); return 32; +case 85: yy_.yytext = yy_.yytext.slice(1,-1); return 32; break; -case 76: return 17; +case 86: return 17; break; -case 77: yy_.yytext = yy_.yytext.slice(1); return 24; +case 87: yy_.yytext = yy_.yytext.slice(1); return 23; break; -case 78: yy_.yytext = yy_.yytext.slice(1); return 66; +case 88: yy_.yytext = yy_.yytext.slice(1); return 67; break; -case 79: return 15; +case 89: return 15; break; -case 80: return 67 +case 90: return 68 break; -case 81: return 56 +case 91: return 56 break; -case 82: return 57 +case 92: return 57 break; -case 83: return 130 +case 93: return 140 break; -case 84: return 131 +case 94: return 141 break; -case 85: return 35 +case 95: return 35 break; -case 86: return 36 +case 96: return 36 break; -case 87: return 40 +case 97: return 40 break; -case 88: return 38 +case 98: return 38 break; -case 89: return 37 +case 99: return 37 break; -case 90: return 39 +case 100: return 39 break; -case 91: return 59 +case 101: return 59 break; -case 92: return 41 +case 102: return 41 break; -case 93: return 42 +case 103: return 42 break; -case 94: return 45 +case 104: return 45 break; -case 95: return 53 +case 105: return 53 break; -case 96: return 52 +case 106: return 52 break; -case 97: return 44 +case 107: return 44 break; -case 98: return 43 +case 108: return 43 break; -case 99: return 50 +case 109: return 50 break; -case 100: return 51 +case 110: return 51 break; -case 101: return 48 +case 111: return 48 break; -case 102: return 49 +case 112: return 49 break; -case 103: return 47 +case 113: return 47 break; -case 104: return 46 +case 114: return 46 break; -case 105: return 25 +case 115: return 25 break; -case 106: return 54 +case 116: return 54 break; -case 107: return 34 +case 117: return 34 break; -case 108: return 55 +case 118: return 55 break; -case 109: return 20 +case 119: return 20 break; -case 110: return 22 +case 120: return 22 break; -case 111: return 5; +case 121: return 5; break; -case 112: /* console.log("INVALID: " + yy_.yytext); */ return 'INVALID'; +case 122: /* console.log("INVALID: " + yy_.yytext); */ return 'INVALID'; break; } }, -rules: [/^(?:;[^\n\r]*)/,/^(?:\/\*([^*]|[\r\n]|(\*+([^*/]|[\r\n])))*\*+\/)/,/^(?:((0x[0-9A-Fa-f][0-9A-Fa-f_]*)|([0-9][0-9_]*))n\b)/,/^(?:(0x[0-9A-Fa-f][0-9A-Fa-f_]*)|([0-9][0-9_]*))/,/^(?:\$\$\{[^\}]*\})/,/^(?:(\$(\{[^\}]*\})?))/,/^(?:[\r\n]+)/,/^(?:[ \t]+)/,/^(?:A\b)/,/^(?:B\b)/,/^(?:C\b)/,/^(?:D\b)/,/^(?:E\b)/,/^(?:RCX\b)/,/^(?:SR\b)/,/^(?:CTX\b)/,/^(?:SP\b)/,/^(?:PC\b)/,/^(?:GAS\b)/,/^(?:zkPC\b)/,/^(?:RR\b)/,/^(?:STEP\b)/,/^(?:ROTL_C\b)/,/^(?:HASHPOS\b)/,/^(?:MLOAD\b)/,/^(?:MSTORE\b)/,/^(?:HASHKLEN\b)/,/^(?:HASHKDIGEST\b)/,/^(?:HASHK1\b)/,/^(?:HASHK\b)/,/^(?:HASHPLEN\b)/,/^(?:HASHPDIGEST\b)/,/^(?:HASHP1\b)/,/^(?:HASHP\b)/,/^(?:JMP\b)/,/^(?:JMPC\b)/,/^(?:JMPZ\b)/,/^(?:JMPNZ\b)/,/^(?:JMPNC\b)/,/^(?:JMPN\b)/,/^(?:CALL\b)/,/^(?:RETURN\b)/,/^(?:ASSERT\b)/,/^(?:SLOAD\b)/,/^(?:SSTORE\b)/,/^(?:ARITH\b)/,/^(?:ARITH_ECADD_DIFFERENT\b)/,/^(?:ARITH_ECADD_SAME\b)/,/^(?:ADD\b)/,/^(?:SUB\b)/,/^(?:LT\b)/,/^(?:SLT\b)/,/^(?:EQ\b)/,/^(?:AND\b)/,/^(?:OR\b)/,/^(?:XOR\b)/,/^(?:CNT_ARITH\b)/,/^(?:CNT_BINARY\b)/,/^(?:CNT_KECCAK_F\b)/,/^(?:CNT_MEM_ALIGN\b)/,/^(?:CNT_PADDING_PG\b)/,/^(?:CNT_POSEIDON_G\b)/,/^(?:MEM_ALIGN_WR8\b)/,/^(?:MEM_ALIGN_RD\b)/,/^(?:MEM_ALIGN_WR\b)/,/^(?:SYS\b)/,/^(?:MEM\b)/,/^(?:STACK\b)/,/^(?:INCLUDE\b)/,/^(?:VAR\b)/,/^(?:GLOBAL\b)/,/^(?:CTX\b)/,/^(?:CONST\b)/,/^(?:CONSTL\b)/,/^(?:REPEAT\b)/,/^(?:"[^"]+")/,/^(?:[a-zA-Z_][a-zA-Z$_0-9]*)/,/^(?:%[a-zA-Z_][a-zA-Z$_0-9]*)/,/^(?:@[a-zA-Z_][a-zA-Z$_0-9]*)/,/^(?::)/,/^(?:,)/,/^(?:\()/,/^(?:\))/,/^(?:\+\+)/,/^(?:--)/,/^(?:\+)/,/^(?:-)/,/^(?:\/)/,/^(?:\*\*)/,/^(?:\*)/,/^(?:%)/,/^(?:=>)/,/^(?:<<)/,/^(?:>>)/,/^(?:\^)/,/^(?:\|\|)/,/^(?:&&)/,/^(?:&)/,/^(?:\|)/,/^(?:==)/,/^(?:!=)/,/^(?:<=)/,/^(?:>=)/,/^(?:>)/,/^(?:<)/,/^(?:=)/,/^(?:!)/,/^(?:\?\?)/,/^(?:\?)/,/^(?:\[)/,/^(?:\])/,/^(?:$)/,/^(?:.)/], -conditions: {"INITIAL":{"rules":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112],"inclusive":true}} +rules: [/^(?:;[^\n\r]*)/,/^(?:\/\*([^*]|[\r\n]|(\*+([^*/]|[\r\n])))*\*+\/)/,/^(?:((0x[0-9A-Fa-f][0-9A-Fa-f_]*)|([0-9][0-9_]*))n\b)/,/^(?:(0x[0-9A-Fa-f][0-9A-Fa-f_]*)|([0-9][0-9_]*))/,/^(?:\$\$\{[^\}]*\})/,/^(?:\$0\{[^\}]*\})/,/^(?:(\$(\{[^\}]*\})?))/,/^(?:[\r\n]+)/,/^(?:[ \t]+)/,/^(?:A\b)/,/^(?:B\b)/,/^(?:C\b)/,/^(?:D\b)/,/^(?:E\b)/,/^(?:RCX\b)/,/^(?:SR\b)/,/^(?:CTX\b)/,/^(?:SP\b)/,/^(?:PC\b)/,/^(?:GAS\b)/,/^(?:zkPC\b)/,/^(?:RR\b)/,/^(?:STEP\b)/,/^(?:ROTL_C\b)/,/^(?:HASHPOS\b)/,/^(?:MLOAD\b)/,/^(?:MSTORE\b)/,/^(?:HASHKLEN\b)/,/^(?:HASHKDIGEST\b)/,/^(?:HASHK1\b)/,/^(?:HASHK\b)/,/^(?:HASHSLEN\b)/,/^(?:HASHSDIGEST\b)/,/^(?:HASHS1\b)/,/^(?:HASHS\b)/,/^(?:HASHPLEN\b)/,/^(?:HASHPDIGEST\b)/,/^(?:HASHP1\b)/,/^(?:HASHP\b)/,/^(?:JMP\b)/,/^(?:JMPC\b)/,/^(?:JMPZ\b)/,/^(?:JMPNZ\b)/,/^(?:JMPNC\b)/,/^(?:JMPN\b)/,/^(?:CALL\b)/,/^(?:RETURN\b)/,/^(?:ASSERT\b)/,/^(?:SLOAD\b)/,/^(?:SSTORE\b)/,/^(?:ARITH\b)/,/^(?:ARITH_ECADD_DIFFERENT\b)/,/^(?:ARITH_ECADD_SAME\b)/,/^(?:ARITH_BN254_ADDFP2\b)/,/^(?:ARITH_BN254_SUBFP2\b)/,/^(?:ARITH_BN254_MULFP2\b)/,/^(?:ADD\b)/,/^(?:SUB\b)/,/^(?:LT\b)/,/^(?:SLT\b)/,/^(?:EQ\b)/,/^(?:AND\b)/,/^(?:OR\b)/,/^(?:XOR\b)/,/^(?:LT4\b)/,/^(?:CNT_ARITH\b)/,/^(?:CNT_BINARY\b)/,/^(?:CNT_KECCAK_F\b)/,/^(?:CNT_SHA256_F\b)/,/^(?:CNT_MEM_ALIGN\b)/,/^(?:CNT_PADDING_PG\b)/,/^(?:CNT_POSEIDON_G\b)/,/^(?:MEM_ALIGN_WR8\b)/,/^(?:MEM_ALIGN_RD\b)/,/^(?:MEM_ALIGN_WR\b)/,/^(?:SYS\b)/,/^(?:MEM\b)/,/^(?:STACK\b)/,/^(?:INCLUDE\b)/,/^(?:VAR\b)/,/^(?:GLOBAL\b)/,/^(?:CTX\b)/,/^(?:CONST\b)/,/^(?:CONSTL\b)/,/^(?:REPEAT\b)/,/^(?:"[^"]+")/,/^(?:[a-zA-Z_][a-zA-Z$_0-9]*)/,/^(?:%[a-zA-Z_][a-zA-Z$_0-9]*)/,/^(?:@[a-zA-Z_][a-zA-Z$_0-9]*)/,/^(?::)/,/^(?:,)/,/^(?:\()/,/^(?:\))/,/^(?:\+\+)/,/^(?:--)/,/^(?:\+)/,/^(?:-)/,/^(?:\/)/,/^(?:\*\*)/,/^(?:\*)/,/^(?:%)/,/^(?:=>)/,/^(?:<<)/,/^(?:>>)/,/^(?:\^)/,/^(?:\|\|)/,/^(?:&&)/,/^(?:&)/,/^(?:\|)/,/^(?:==)/,/^(?:!=)/,/^(?:<=)/,/^(?:>=)/,/^(?:>)/,/^(?:<)/,/^(?:=)/,/^(?:!)/,/^(?:\?\?)/,/^(?:\?)/,/^(?:\[)/,/^(?:\])/,/^(?:$)/,/^(?:.)/], +conditions: {"INITIAL":{"rules":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122],"inclusive":true}} }); return lexer; })(); diff --git a/components.md b/components.md new file mode 100644 index 0000000..857ab7a --- /dev/null +++ b/components.md @@ -0,0 +1,267 @@ +# zkASM Components + +## Registers + +A **register** is a location available to the zkEVM that is manipulated through the zkEVM's instructions. Registers are of different types, some of them being of generic purpose and others being specific purpose. They are also of different sizes, represented as arrays of Goldilocks prime field numbers, i.e., in the range $[0,2^{64} - 2^{32} + 1]$. + +### A, B, C, D, E +- Generic purpose. +- Arrays of 8 elements `[V0, V1,..., V7]`. + +### SR +- Represents the State Root. +- An array of 8 elements `[V0, V1,..., V7]`. + +### CTX +- Represents the ConTeXt. Its main use is being able to move through the zkEVM's memory. +- Array of 1 element `[V]`. + +### SP +- Represents the Stack Pointer. Its main use is being able to move through the zkEVM's memory. +- Array of 1 element `[V]`. + +### PC +- Represents the Program Counter. Its main use is being able to move through the zkEVM's memory. +- Array of 1 element `[V]`. + +### zkPC +- Represents the zk Program Counter. +- Array of 1 element `[V]`. + +### GAS +- Represents the Gas in a transaction. +- Array of 1 element `[V]`. + +### RR +- Return Register. +- Saves the origin `zkPC` in `RR` when a `CALL` instruction is performed. The `RETURN` instruction loads `RR` in `zkPC`. +- Array of 1 element `[V]`. + +### STEP +- Represents the number of instructions performed within the program. +- Array of 1 element `[V]`. + +### HASHPOS +- It is used to set/get bytes from Poseidon/Keccak bytes. +- Array of 1 element `[V]`. + +### RCX +- Used to repeat instructions. +- Array of 1 element `[V]`. + +### zkEVM Counters +- Keeps track of the zkEVM counters: + - `CNT_ARITH` + - `CNT_BINARY` + - `CNT_KECCAK_F` + - `CNT_SHA256_F` + - `CNT_MEM_ALIGN` + - `CNT_POSEIDON_G` + - `CNT_PADDING_PG` +- Arrays of 1 element `[V]`. + +## Instructions + +### MLOAD(addr) + +op = mem(addr) + +addr = SP | SP++ | SP-- | SP+offset | SP-offset | SYS:E+offset | SYS:E+offset | SYS:E-offset | SYS:E | MEM:E | MEM:E+offset | MEM:E-offset | STACK:E | STACK:E+offset | STACK:E-offset | variable | variable + E | variable + E + +### MSTORE(addr) + +mem(addr) = op + +### SLOAD +key0 = [C0, C1, C2, C3, C4, C5, C6, C7] +key1 = [A0, A1, A2, A3, A4, A5, B0, B1] +key = HP(key1, HP(key0)) +op = storage.get(SR, key) + +where: +storage.get(root, key) -> value + +### SSTORE + +key0 = [C0, C1, C2, C3, C4, C5, C6, C7] +key1 = [A0, A1, A2, A3, A4, A5, B0, B1] +value = [D0, D1, D2, D3, D4, D5, D6, D7] +SR’ = storage.get(SR, key, value) + +where: +storage.set(oldRoot, key, newValue) -> newRoot + +### HASHK(hashId) + +hashK[hashId][HASHPOS..HASHPOS+D-1] = op[0..D-1] +HASHPOS := HASHPOS + D +hashId = number | E + +### HASHK1(hashId) + +hashK1[hashId][HASHPOS] = op[0] +HASHPOS := HASHPOS + 1 + +### HASHKLEN(hashId) + +hashK[hashId].len = op + +### HASHKDIGEST(hashId) + +hashK[hashId].digest = op + +### HASHS(hashId) + +hashS[hashId][HASHPOS..HASHPOS+D-1] = op[0..D-1] +HASHPOS := HASHPOS + D +hashId = number | E + +### HASHS1(hashId) + +hashS1[hashId][HASHPOS] = op[0] +HASHPOS := HASHPOS + 1 + +### HASHSLEN(hashId) + +hashS[hashId].len = op + +### HASHSDIGEST(hashId) + +hashS[hashId].digest = op + +### HASHP(hashId) + +hashP[hashId][HASHPOS..HASHPOS+D-1] = op[0..D-1] + +### HASHP1(hashId) + +hashP[hashId][HASHPOS] = op[0] + +### HASHPLEN(hashId) + +hashP[hashId].len = op + +### HASHPDIGEST(hashId) + +hashP[hashId].digest = op + +### ARITH + +A*B + C = D*2**256 + op + +### ARITH_ECADD_DIFFERENT + +Addition of two secp256k1 elliptic curve points (points are different) +(A, B) + (C, D) = (E, op) + +### ARITH_ECADD_SAME + +Addition of two secp256k1 elliptic curve points (points are equals) +(A, B) + (A, B) = (E, op) + +### ARITH_BN254_ADDFP2 + +Addition of two $\mathbb{F}_{p^2} = \mathbb{F}_p[u]/(u^2 + 1)$ elements over the base field $\mathbb{F}_p$ of the BN254 curve. Due to the chosen irreducible polynomial, it corresponds to the standard addition of two complex elements. +``` +(A + B·u) + (C + D·u) = E + op·u +``` + +### ARITH_BN254_SUBFP2 + +Subtraction of two $\mathbb{F}_{p^2} = \mathbb{F}_p[u]/(u^2 + 1)$ elements over the base field $\mathbb{F}_p$ of the BN254 curve. Due to the chosen irreducible polynomial, it corresponds to the standard subtraction of two complex elements. +``` +(A + B·u) - (C + D·u) = E + op·u +``` + +### ARITH_BN254_MULFP2 + +Multiplication of two $\mathbb{F}_{p^2} = \mathbb{F}_p[u]/(u^2 + 1)$ elements over the base field $\mathbb{F}_p$ of the BN254 curve. Due to the chosen irreducible polynomial, it corresponds to the standard multiplication of two complex elements. +``` +(A + B·u) * (C + D·u) = E + op·u +``` + +### ASSERT + +A = op + +### ADD SUB LT LT4 SLT EQ AND OR XOR + +The operation is written `op = A BinOp B`, where `BinOp` is one of `ADD,SUB,LT,SLT,EQ,AND,OR,XOR,LT4`. + +Given two registers `A` and `B`, the instruction `LT4` works by checking whether the four chunks composing `A` are lower than those composing `B` one-to-one. + +For example, given `A0,...,A7,B0,...,B7` the following check: +``` +(A7A6 A5A4 A3A2 A1A0) LT4 (B7B6 B5B4 B3B2 B1B0) +``` +is equivalent to: +``` +(A7A6 < B7B6) AND (A5A4 < B5B4) AND (A3A2 < B3B2) AND (A1A0 < B1B0) +``` + + +### MEM_ALIGN_RD + +M0=A, M1=B, V=op, Offset=C + +M0 = 256bit word read in position x of ZKEVM memory (32x EVM) +M1 = 256bit word read in position x+1 of ZKEVM memory (32x+1 EVM) +Offset = 0..31 bytes +V = value of 256 bits + +### MEM_ALIGN_WR + +M0=A, M1=B, V=op Offset=C, W0=D W1=E +W0 = 256bit word to write position x of ZKEVM memory (32x EVM) +W1 = 256bit word to write in position x+1 of ZKEVM memory (32x+1 EVM) + + +### MEM_ALIGN_WR8 + +M0=A, V=op, Offset=C, W0=D +W0 = 256bit word to write position x of ZKEVM memory (32x EVM) +V = value of 8 bits + +### JMP (jmpaddr) + +zkPC' = jmpaddr +jmpaddr = label | RR | E | reference + E | reference + RR +reference = @label + +### JMPN/JMPC/JMPZ/JMPNC/JMPNZ (jmpaddr[,elseaddr]) + +JMPN: jump if op[0] was negative +JMPC: jump if carry bit, only use with binary operations +JMPZ: jump if op[0] was zero +JMPNC: jump if no carry bit, only use with binary operations +JMPNZ: jump if op[0] was different of zero + +### CALL (calladdr) + +calladdr = label | reference + RR | reference + E +RR' = zkPC + 1 +JMP(calladdr) + +### RETURN + +JMP(RR) + +### ROTL_C +Rotate the `C = [C[0], C[1], ..., C[6]]` register to the left: + ``` + [op[0], op[1], ..., op[7]]= [C[7], C[0], ..., C[6]]. + ``` + +### REPEAT(RCX) + +RCX != 0 => RCX' = RCX - 1 +RCX != 0 => zkPC = zkPC +REPEAT was executed at least one time + +## Constants + +CONST, CONSTL %constname = expression + +define constants +const set lsr (op0) and reset the rest (op1,....,op7) +constl set 8 registers (op0, op1, op2, ..,op7) diff --git a/instructions.md b/instructions.md deleted file mode 100644 index 867eb4e..0000000 --- a/instructions.md +++ /dev/null @@ -1,223 +0,0 @@ -# zkVM instructions - -### MLOAD(addr) - -op = mem(addr) - -addr = SP | SP++ | SP-- | SP+offset | SP-offset | SYS:E+offset | SYS:E+offset | SYS:E-offset | SYS:E | MEM:E | MEM:E+offset | MEM:E-offset | STACK:E | STACK:E+offset | STACK:E-offset | variable | variable + E | variable + E - -### MSTORE(addr) - -mem(addr) = op - -### SLOAD -key0 = [C0, C1, C2, C3, C4, C5, C6, C7] -key1 = [A0, A1, A2, A3, A4, A5, B0, B1] -key = HP(key1, HP(key0)) -op = storage.get(SR, key) - -where: -storage.get(root, key) -> value - -### SSTORE - -key0 = [C0, C1, C2, C3, C4, C5, C6, C7] -key1 = [A0, A1, A2, A3, A4, A5, B0, B1] -value = [D0, D1, D2, D3, D4, D5, D6, D7] -SR’ = storage.get(SR, key, value) - -where: -storage.set(oldRoot, key, newValue) -> newRoot - -### HASHK(hashId) - -hashK[hashId][HASHPOS..HASHPOS+D-1] = op[0..D-1] -HASHPOS := HASHPOS + D -hashId = number | E - -### HASHK1(hashId) - -hashK1[hashId][HASHPOS] = op[0] -HASHPOS := HASHPOS + 1 - -### HASHKLEN(hashId) - -hashK[hashId].len = op - -### HASHKDIGEST(hashId) - -hashK[hashId].digest = op - -### HASHP(hashId) - -hashP[hashId][HASHPOS..HASHPOS+D-1] = op[0..D-1] - -### HASHP1(hashId) - -hashP[hashId][HASHPOS] = op[0] - -### HASHPLEN(hashId) - -hashP[hashId].len = op - -### HASHPDIGEST(hashId) - -hashP[hashId].digest = op - -### ARITH - -A*B + C = D*2**256 + op - -### ARITH_ECADD_DIFFERENT - -Addition of two secp256k1 elliptic curve points (points are different) -(A, B) + (C, D) = (E, op) - -### ARITH_ECADD_SAME - -Addition of two secp256k1 elliptic curve points (points are equals) -(A, B) + (A, B) = (E, op) - - -### ASSERT - -A = op - -### ADD SUB LT SLT EQ AND OR XOR - -op = A ~BinOp~ B - -### MEM_ALIGN_RD - -M0=A, M1=B, V=op, Offset=C - -M0 = 256bit word read in position x of ZKEVM memory (32x EVM) -M1 = 256bit word read in position x+1 of ZKEVM memory (32x+1 EVM) -Offset = 0..31 bytes -V = value of 256 bits - -### MEM_ALIGN_WR - -M0=A, M1=B, V=op Offset=C, W0=D W1=E -W0 = 256bit word to write position x of ZKEVM memory (32x EVM) -W1 = 256bit word to write in position x+1 of ZKEVM memory (32x+1 EVM) - - -### MEM_ALIGN_WR8 - -M0=A, V=op, Offset=C, W0=D -W0 = 256bit word to write position x of ZKEVM memory (32x EVM) -V = value of 8 bits - -### JMP (jmpaddr) - -zkPC' = jmpaddr -jmpaddr = label | RR | E | reference + E | reference + RR -reference = @label - -### JMPN/JMPC/JMPZ/JMPNC/JMPNZ (jmpaddr[,elseaddr]) - -JMPN: jump if op[0] was negative -JMPC: jump if carry bit, only use with binary operations -JMPZ: jump if op[0] was zero -JMPNC: jump if no carry bit, only use with binary operations -JMPNZ: jump if op[0] was different of zero - -### CALL (calladdr) - -calladdr = label | reference + RR | reference + E -RR' = zkPC + 1 -JMP(calladdr) - -### RETURN - -JMP(RR) - -### ROTL_C - -ROTL_C' = C[6] C[5] C[4] C[3] C[2] C[1] C[0] C[7] - -### REPEAT(RCX) - -RCX != 0 => RCX' = RCX - 1 -RCX != 0 => zkPC = zkPC -REPEAT was executed at least one time - -### CNT_ARITH, CNT_BINARY, CNT_KECCAK_F, CNT_MEM_ALIGN, CNT_PADDING_PG, CNT_POSEIDON_G - -ReadOnly counters - -### CONST, CONSTL %constname = expression - -define constants -const set lsr (op0) and reset the rest (op1,....,op7) -constl set 8 registers (op0, op1, op2, ..,op7) - -## Registers -- Each element is a Goldilocks prime Field number - -### A, B, C, D, E -- generic purpose registers -- Array of 8 elements `[V0, V1,..., V7]` - -### SR -- Array of 8 elements `[V0, V1,..., V7]` -- State root - -### CTX -- 1 element -- Context -- Used to move through zkEVM memory - -### SP -- 1 element -- Stack Pointer -- Used to move through zkEVM memory - -### PC -- 1 element -- Program Counter -- Used to move through zkEVM memory - -### GAS -- 1 element -- Gas in a transaction - -### RR -- 1 element -- Return register -- Saves origin `zkPC` in `RR` when a `CALL` instruction is performed - - `RETURN` will load `RR` into future `zkPC` - -### zkPC -- 1 element -- zk pogram counter - -### STEP -- 1 element -- number of instruction done - -### MAXMEM -- 1 element -- maximum memory - -### HASHPOS -- 1 element -- used to set/get bytes from poseidon/keccaks bytes - -### ROTL_C -- Array of 8 elements `[V0, V1,..., V7]`. Each element is a Goldilocks prime Field number -- Rotate Left Register: `ROTL_C = [C[7], C[0], ..., C[6]]` - -### RCX -- 1 element -- Used to repeat instructions - -### zk-counters -- Keeps track of zk-counters - - `CNT_ARITH` - - `CNT_BINARY` - - `CNT_KECCAK_F` - - `CNT_MEM_ALIGN` - - `CNT_PADDING_PG` - - `CNT_POSEIDON_G` diff --git a/package.json b/package.json index 139777a..8cad2fe 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@0xpolygonhermez/zkasmcom", - "version": "0.0.23", + "version": "2.0.0", "bin": { "zkasm": "src/zkasm.js" }, diff --git a/src/command_parser.jison b/src/command_parser.jison index 2c2b755..ae917e1 100644 --- a/src/command_parser.jison +++ b/src/command_parser.jison @@ -19,6 +19,7 @@ STEP { return 'STEP'; } CNT_ARITH { return 'CNT_ARITH' } CNT_BINARY { return 'CNT_BINARY' } CNT_KECCAK_F { return 'CNT_KECCAK_F' } +CNT_SHA256_F { return 'CNT_SHA256_F' } CNT_MEM_ALIGN { return 'CNT_MEM_ALIGN' } CNT_PADDING_PG { return 'CNT_PADDING_PG' } CNT_POSEIDON_G { return 'CNT_POSEIDON_G' } @@ -55,6 +56,8 @@ var { return 'VAR'; } \: { return ':'} \.\. { return RANGE_DOTS } \. { return '.'} +\[ { return '[' } +\] { return ']' } <> { return 'EOF'; } . { /* console.log("INVALID: " + yytext); */ return 'INVALID'; } @@ -255,7 +258,11 @@ e0 } | IDENTIFIER '.' IDENTIFIER { - $$ = {op: "getData", module: $1, offset: $3} + $$ = {op: "getData", module: $1, offset: $3, arrayOffset: 0} + } + | IDENTIFIER '.' IDENTIFIER '[' expression ']' + { + $$ = {op: "getData", module: $1, offset: $3, arrayOffset: $5} } ; @@ -292,6 +299,7 @@ counter : CNT_ARITH | CNT_BINARY | CNT_KECCAK_F + | CNT_SHA256_F | CNT_MEM_ALIGN | CNT_PADDING_PG | CNT_POSEIDON_G diff --git a/src/compiler.js b/src/compiler.js index 8b730d1..22bc746 100644 --- a/src/compiler.js +++ b/src/compiler.js @@ -71,12 +71,21 @@ module.exports = async function compile(fileName, ctx, config = {}) { scope: "GLOBAL", offset: ctx.lastGlobalVarAssigned + 1 } - ctx.lastGlobalVarAssigned += l.count; + if (typeof l.count === 'string') { + ctx.lastGlobalVarAssigned += Number(getConstantValue(ctx, l.count)); + } else { + ctx.lastGlobalVarAssigned += l.count; + } } else if (l.scope == "CTX") { ctx.vars[l.name] = { scope: "CTX", offset: ctx.lastLocalVarCtxAssigned + 1 } + if (typeof l.count === 'string') { + ctx.lastGlobalVarAssigned += Number(getConstantValue(ctx, l.count)); + } else { + ctx.lastGlobalVarAssigned += l.count; + } ctx.lastLocalVarCtxAssigned += l.count; } else { throw error(l, `Invalid scope ${l.scope}`); @@ -177,7 +186,7 @@ module.exports = async function compile(fileName, ctx, config = {}) { } else { error(ctx.out[i].line, `Invalid variable scope: ${ctx.out[i].offset} not defined.`); } - ctx.out[i].offset = ctx.vars[ctx.out[i].offset].offset; + ctx.out[i].offset = ctx.vars[ctx.out[i].offset].offset + (ctx.out[i].extraOffset ?? 0); } } } @@ -249,7 +258,41 @@ module.exports = async function compile(fileName, ctx, config = {}) { } cmd.op = 'getMemValue' cmd.offset = ctx.vars[name].offset; + // set useCTX + if (ctx.vars[name].scope === 'CTX') { + cmd.useCTX = 1; + } else if (ctx.vars[name].scope === 'GLOBAL') { + cmd.useCTX = 0; + } + if (cmd.arrayOffset) { + if (cmd.arrayOffset.op === 'number') { + cmd.offset += Number(cmd.arrayOffset.num); + } else { + cmd.op = 'getMemValueByAddress'; + cmd.params = [cmd.arrayOffset]; + if (cmd.offset) { + cmd.params = [{ op: 'add', values: [cmd.params[0], {op: 'number', num: BigInt(cmd.offset)}]}]; + } + delete cmd.offset; + delete cmd.arrayOffset; + return; + } + } + cmd.offsetLabel = name; + return; + } + else if (cmd.module === 'addr' && typeof cmd.offsetLabel === 'undefined') { + const name = cmd.offset; + if (typeof ctx.vars[name] === 'undefined') { + error(ctx.out[i].line, `Not found reference ${cmd.module}.${name}`); + } + cmd.op = 'number' + cmd.num = ctx.vars[name].offset.toString(); + if (cmd.arrayOffset) { + cmd.num += Number(cmd.arrayOffset.num ?? 0).toString(); + } cmd.offsetLabel = name; + delete cmd.offset; return; } else if (cmd.module === 'const' && typeof cmd.offsetLabel === 'undefined') { @@ -345,9 +388,10 @@ function getConstantValue(ctx, name, throwIfNotExists = true) { function processAssignmentIn(ctx, input, currentLine) { const res = {}; let E1, E2; - if (input.type == "TAG") { + if (input.type == "TAG" || input.type == 'TAG_0') { res.freeInTag = input.tag ? command_parser.parse(input.tag) : { op: ""}; - res.inFREE = 1n; + res.inFREE = input.type == 'TAG_0' ? 0n : 1n; + res.inFREE0 = input.type == 'TAG_0' ? 1n : 0n; return res; } if (input.type == "REG") { diff --git a/src/zkasm_parser.jison b/src/zkasm_parser.jison index 3674e99..f625279 100644 --- a/src/zkasm_parser.jison +++ b/src/zkasm_parser.jison @@ -6,6 +6,7 @@ ((0x[0-9A-Fa-f][0-9A-Fa-f_]*)|([0-9][0-9_]*))n { yytext = BigInt(yytext.replace(/[\_n]/g, "")); return 'NUMBERL'; } (0x[0-9A-Fa-f][0-9A-Fa-f_]*)|([0-9][0-9_]*) { yytext = Number(yytext.replace(/\_/g, "")); return 'NUMBER'; } \$\$\{[^\}]*\} { yytext = yytext.slice(3, -1); return "COMMAND"; } +\$0\{[^\}]*\} { yytext = yytext.slice(3, -1); return 'TAG_0'; } (\$(\{[^\}]*\})?) { yytext = yytext.length == 1 ? "" : yytext.slice(2, -1); return 'TAG'; } [\r\n]+ { return "LF";} [ \t]+ { /* console.log("Empty spaces"); */ } @@ -31,6 +32,10 @@ HASHKLEN { return 'HASHKLEN' } HASHKDIGEST { return 'HASHKDIGEST' } HASHK1 { return 'HASHK1' } HASHK { return 'HASHK' } +HASHSLEN { return 'HASHSLEN' } +HASHSDIGEST { return 'HASHSDIGEST' } +HASHS1 { return 'HASHS1' } +HASHS { return 'HASHS' } HASHPLEN { return 'HASHPLEN' } HASHPDIGEST { return 'HASHPDIGEST' } HASHP1 { return 'HASHP1' } @@ -49,6 +54,9 @@ SSTORE { return 'SSTORE' } ARITH { return 'ARITH' } ARITH_ECADD_DIFFERENT { return 'ARITH_ECADD_DIFFERENT' } ARITH_ECADD_SAME { return 'ARITH_ECADD_SAME' } +ARITH_BN254_ADDFP2 { return 'ARITH_BN254_ADDFP2' } +ARITH_BN254_SUBFP2 { return 'ARITH_BN254_SUBFP2' } +ARITH_BN254_MULFP2 { return 'ARITH_BN254_MULFP2' } ADD { return 'ADD' } SUB { return 'SUB' } LT { return 'LT' } @@ -57,9 +65,11 @@ EQ { return 'EQ' } AND { return 'AND' } OR { return 'OR' } XOR { return 'XOR' } +LT4 { return 'LT4' } CNT_ARITH { return 'CNT_ARITH' } CNT_BINARY { return 'CNT_BINARY' } CNT_KECCAK_F { return 'CNT_KECCAK_F' } +CNT_SHA256_F { return 'CNT_SHA256_F' } CNT_MEM_ALIGN { return 'CNT_MEM_ALIGN' } CNT_PADDING_PG { return 'CNT_PADDING_PG' } CNT_POSEIDON_G { return 'CNT_POSEIDON_G' } @@ -232,6 +242,10 @@ varDef { $$ = {type: "var", scope: $2, name: $3, count: $5 } } + | VAR scope IDENTIFIER '[' CONSTID ']' + { + $$ = {type: "var", scope: $2, name: $3, count: $5 } + } ; constDef @@ -254,7 +268,6 @@ command } ; - scope : GLOBAL | CTX @@ -304,7 +317,7 @@ nexpr { $$ = {type: $2, values: [$1, $3]} } - | nexpr '/' nexpr + | nexpr '/' nexpr { $$ = {type: $2, values: [$1, $3]} } @@ -424,6 +437,10 @@ inReg { $$ = {type: 'TAG' , tag: $1} } + | TAG_0 + { + $$ = {type: 'TAG_0' , tag: $1} + } | reg { $$ = {type: 'REG' , reg: $1} @@ -515,6 +532,26 @@ op $$ = $3; $$.hashKDigest = 1; } + | HASHS '(' hashId ')' + { + $$ = $3; + $$.hashS = 1; + } + | HASHS1 '(' hashId ')' + { + $$ = $3; + $$.hashS1 = 1; + } + | HASHSLEN '(' hashId ')' + { + $$ = $3; + $$.hashSLen = 1; + } + | HASHSDIGEST '(' hashId ')' + { + $$ = $3; + $$.hashSDigest = 1; + } | HASHP '(' hashId ')' { $$ = $3; @@ -633,15 +670,27 @@ op } | ARITH { - $$ = { arithEq0: 1, arithEq1: 0, arithEq2: 0} + $$ = { arithEq0: 1, arithEq1: 0, arithEq2: 0, arithEq3: 0, arithEq4: 0, arithEq5: 0 } } | ARITH_ECADD_DIFFERENT { - $$ = { arithEq0: 0, arithEq1: 1, arithEq2: 0} + $$ = { arithEq0: 0, arithEq1: 1, arithEq2: 0, arithEq3: 0, arithEq4: 0, arithEq5: 0 } } | ARITH_ECADD_SAME { - $$ = { arithEq0: 0, arithEq1: 0, arithEq2: 1} + $$ = { arithEq0: 0, arithEq1: 0, arithEq2: 0, arithEq3: 0, arithEq4: 0, arithEq5: 0 } + } + | ARITH_BN254_MULFP2 + { + $$ = { arithEq0: 0, arithEq1: 0, arithEq2: 0, arithEq3: 1, arithEq4: 0, arithEq5: 0 } + } + | ARITH_BN254_ADDFP2 + { + $$ = { arithEq0: 0, arithEq1: 0, arithEq2: 0, arithEq3: 0, arithEq4: 1, arithEq5: 0 } + } + | ARITH_BN254_SUBFP2 + { + $$ = { arithEq0: 0, arithEq1: 0, arithEq2: 0, arithEq3: 0, arithEq4: 0, arithEq5: 1 } } | ADD { @@ -675,6 +724,10 @@ op { $$ = { bin: 1, binOpcode: 7} } + | LT4 + { + $$ = { bin: 1, binOpcode: 8} + } | MEM_ALIGN_RD { $$ = { memAlignRD: 1, memAlignWR: 0, memAlignWR8: 0} @@ -709,6 +762,7 @@ counter : CNT_ARITH { $$ = 'cntArith' } | CNT_BINARY { $$ = 'cntBinary' } | CNT_KECCAK_F { $$ = 'cntKeccakF' } + | CNT_SHA256_F { $$ = 'cntSha256F' } | CNT_MEM_ALIGN { $$ = 'cntMemAlign' } | CNT_PADDING_PG { $$ = 'cntPaddingPG' } | CNT_POSEIDON_G { $$ = 'cntPoseidonG' } @@ -741,19 +795,19 @@ addr } | SP '+' NUMBER { - $$ = { isStack: 1, isMem:0, ind:0, indRR: 0, incStack: 0, offset: $3, useCTX: 1}} + $$ = { isStack: 1, isMem:0, ind:0, indRR: 0, incStack: 0, offset: $3, useCTX: 1} } | SP '-' NUMBER { - $$ = { isStack: 1, isMem:0, ind:0, indRR: 0, incStack: 0, offset: -$3, useCTX: 1}} + $$ = { isStack: 1, isMem:0, ind:0, indRR: 0, incStack: 0, offset: -$3, useCTX: 1} } | SP '++' { - $$ = { isStack: 1, isMem:0, ind:0, indRR: 0, incStack: 1, offset: 0, useCTX: 1}} + $$ = { isStack: 1, isMem:0, ind:0, indRR: 0, incStack: 1, offset: 0, useCTX: 1} } | SP '--' { - $$ = { isStack: 1, isMem:0, ind:0, indRR: 0, incStack: -1, offset: 0, useCTX: 1}} + $$ = { isStack: 1, isMem:0, ind:0, indRR: 0, incStack: -1, offset: 0, useCTX: 1} } | SYS ':' E '+' NUMBER { @@ -803,6 +857,26 @@ addr { $$ = { offset: $1, ind: 1, indRR: 0 } } + | IDENTIFIER '[' E ']' + { + $$ = { offset: $1, ind: 1, indRR: 0 } + } + | IDENTIFIER '[' E '-' NUMBER ']' + { + $$ = { offset: $1, extraOffset: -$5, ind: 1, indRR: 0 } + } + | IDENTIFIER '[' E '+' NUMBER ']' + { + $$ = { offset: $1, extraOffset: $5, ind: 1, indRR: 0 } + } + | IDENTIFIER '+' NUMBER + { + $$ = { offset: $1, extraOffset: $3 } + } + | IDENTIFIER '[' NUMBER ']' + { + $$ = { offset: $1, extraOffset: $3 } + } ; hashId @@ -814,4 +888,16 @@ hashId { $$ = {ind: 1, indRR: 0, offset:0} } + | RR + { + $$ = {ind: 0, indRR: 1, offset:0} + } + | E '+' NUMBER + { + $$ = {ind: 1, indRR: 0, offset:$3} + } + | RR '+' NUMBER + { + $$ = {ind: 0, indRR: 1, offset:$3} + } ; \ No newline at end of file diff --git a/test/arrays.zkasm b/test/arrays.zkasm index 9e9d5e8..d052001 100644 --- a/test/arrays.zkasm +++ b/test/arrays.zkasm @@ -1,20 +1,68 @@ -VAR GLOBAL a[100] +CONST %LEN1 = 100 +CONSTL %LEN2 = 300 + +VAR GLOBAL a1[%LEN1] +VAR GLOBAL a2[100] VAR GLOBAL b -VAR GLOBAL c[300] +VAR GLOBAL c1[%LEN2] +VAR GLOBAL c2[300] VAR GLOBAL d start: STEP => A 0 :ASSERT - 1 :MSTORE(a) + 1 :MSTORE(a1) 2 :MSTORE(b) - 3 :MSTORE(c) + 3 :MSTORE(c1) 4 :MSTORE(d) - @a => A - @b => A - @c => A - @d => A + + 13 => E + 0 :MLOAD(a1[23]) + 0 :MLOAD(a1[E + 10]) + 0x1FE223 :MSTORE(a1[23]) + 0x1FE223 :MLOAD(a1[23]) + 0x1FE223 :MLOAD(a1[E + 10]) + 0x1FE223 => A + ${mem.a1[23]} :ASSERT + ${mem.a1[E+10]} :ASSERT + ${getMemValueByAddress(addr.a1+E+10)} :ASSERT + + 0 => RCX,E +loopA: + E + 1 => E :MSTORE(a1[E]) + E - RCX - 100 :JMPN(loopA) +setB: + E + 1 => E :MSTORE(b) + + 0 => RCX,E +loopC: + E + 1 => E + E + 1000 :MSTORE(c1 + E) + E - RCX - 300 :JMPN(loopC) +setD: + E + 1 => E :MSTORE(d) + + 1 => A + ${mem.a1} :ASSERT + + 1 => A + ${mem.a1[0]} :ASSERT + + 2 => A + ${mem.a1[1]} :ASSERT + + 3 => A + ${mem.a1[2]} :ASSERT + + 1001 => A + ${mem.c1[1]} :ASSERT + + 102 => A + ${addr.c1[1]} :ASSERT + + 401 => A + ${addr.d} :ASSERT end: 0 => A,B,C,D,E,CTX, SP, PC, GAS, SR diff --git a/test/infree0.zkasm b/test/infree0.zkasm new file mode 100644 index 0000000..9ab0a01 --- /dev/null +++ b/test/infree0.zkasm @@ -0,0 +1,32 @@ +start: + STEP => A + 0 :ASSERT + + 0x101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2Fn => C + + ${C} => A + 0x101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2Fn :ASSERT + + $0{C} => A + 0x2C2D2E2Fn :ASSERT + + ${0xffffffff} => A + 0xffffffffn :ASSERT + + $0{0xffffffff} => A + 0xffffffffn :ASSERT + + ${0x100000000} => A + 0x100000000n :ASSERT + + $0{0x100000000} => A + 0 :ASSERT + +end: + 0 => A,B,C,D,E, SP, PC, GAS, SR + +finalWait: + ${beforeLast()} : JMPN(finalWait) + + : JMP(start) +opINVALID: \ No newline at end of file