var Numerals = new GFGrammar(new GFAbstract("Numeral",{n2: new Type([], "Digit"), n3: new Type([], "Digit"), n4: new Type([], "Digit"), n5: new Type([], "Digit"), n6: new Type([], "Digit"), n7: new Type([], "Digit"), n8: new Type([], "Digit"), n9: new Type([], "Digit"), num: new Type(["Sub1000000"], "Numeral"), pot0: new Type(["Digit"], "Sub10"), pot01: new Type([], "Sub10"), pot0as1: new Type(["Sub10"], "Sub100"), pot1: new Type(["Digit"], "Sub100"), pot110: new Type([], "Sub100"), pot111: new Type([], "Sub100"), pot1as2: new Type(["Sub100"], "Sub1000"), pot1plus: new Type(["Digit", "Sub10"], "Sub100"), pot1to19: new Type(["Digit"], "Sub100"), pot2: new Type(["Sub10"], "Sub1000"), pot2as3: new Type(["Sub1000"], "Sub1000000"), pot2plus: new Type(["Sub10", "Sub100"], "Sub1000"), pot3: new Type(["Sub1000"], "Sub1000000"), pot3plus: new Type(["Sub1000", "Sub1000"], "Sub1000000")}),{arabic_modern: new GFConcrete({coding: "utf8"},{n2: function(cs){return new Arr(new Arr(Numerals.concretes["arabic_modern"].rule("_0", cs), new Str("ﺍﺛﻨﻴﻦ"), new Str("ﺍﺛﻨﻰ"), new Str("ﻋﺸﺮﻳﻦ"), new Str("ﻣﺎﺋﺘﻴﻦ")), new Int(2));}, n3: function(cs){return new Arr(new Suffix("ﺛﻼﺛ", Numerals.concretes["arabic_modern"].rule("_3", cs)), new Int(0));}, n4: function(cs){return new Arr(new Suffix("ﺃﺭﺑﻌ", Numerals.concretes["arabic_modern"].rule("_3", cs)), new Int(0));}, n5: function(cs){return new Arr(new Suffix("ﺧﻤﺴ", Numerals.concretes["arabic_modern"].rule("_3", cs)), new Int(0));}, n6: function(cs){return new Arr(new Suffix("ﺳﺘ", Numerals.concretes["arabic_modern"].rule("_3", cs)), new Int(0));}, n7: function(cs){return new Arr(new Suffix("ﺳﺒﻌ", Numerals.concretes["arabic_modern"].rule("_3", cs)), new Int(0));}, n8: function(cs){return new Arr(new Suffix("ﺛﻤﺎﻧ", new Arr(new Str("ﻴﺔ"), new Str("ﻴﺔ"), new Str("ﻴﺔ"), new Str("ﻴﻦ"), new Str("ﻤﺎﺋﺔ"))), new Int(0));}, n9: function(cs){return new Arr(new Suffix("ﺗﺴﻌ", Numerals.concretes["arabic_modern"].rule("_3", cs)), new Int(0));}, num: function(cs){return new Arr(Numerals.concretes["arabic_modern"].rule("_19", cs));}, pot0: function(cs){return Numerals.concretes["arabic_modern"].rule("_22", cs);}, pot01: function(cs){return new Arr(new Arr(Numerals.concretes["arabic_modern"].rule("_0", cs), new Str("ﻭﺍﺣﺪ"), new Str("ﻭﺍﺣﺪ"), new Str("ﻭﺍﺣﺪ"), new Str("ﻣﺎﺋﺔ")), new Int(1));}, pot0as1: function(cs){return new Arr(new Arr(Numerals.concretes["arabic_modern"].rule("_25", cs), Numerals.concretes["arabic_modern"].rule("_26", cs)), Numerals.concretes["arabic_modern"].rule("_21", cs));}, pot1: function(cs){return new Arr(new Arr(Numerals.concretes["arabic_modern"].rule("_29", cs), Numerals.concretes["arabic_modern"].rule("_29", cs)), new Int(1));}, pot110: function(cs){return new Arr(new Suffix("ﻋﺸﺮﺓ", new Arr(new Str(""), new Str(""))), new Int(0));}, pot111: function(cs){return new Arr(new Arr(Numerals.concretes["arabic_modern"].rule("_35", cs), Numerals.concretes["arabic_modern"].rule("_35", cs)), new Int(1));}, pot1as2: function(cs){return Numerals.concretes["arabic_modern"].rule("_22", cs);}, pot1plus: function(cs){return new Arr(new Arr(Numerals.concretes["arabic_modern"].rule("_40", cs), Numerals.concretes["arabic_modern"].rule("_40", cs)), new Int(1));}, pot1to19: function(cs){return new Arr(new Arr(Numerals.concretes["arabic_modern"].rule("_44", cs), Numerals.concretes["arabic_modern"].rule("_44", cs)), new Int(1));}, pot2: function(cs){return new Arr(new Arr(Numerals.concretes["arabic_modern"].rule("_47", cs), Numerals.concretes["arabic_modern"].rule("_47", cs)), new Int(1));}, pot2as3: function(cs){return new Arr(Numerals.concretes["arabic_modern"].rule("_26", cs));}, pot2plus: function(cs){return new Arr(new Arr(Numerals.concretes["arabic_modern"].rule("_51", cs), Numerals.concretes["arabic_modern"].rule("_51", cs)), new Int(1));}, pot3: function(cs){return new Arr(new Seq(Numerals.concretes["arabic_modern"].rule("_25", cs), Numerals.concretes["arabic_modern"].rule("_55", cs)));}, pot3plus: function(cs){return new Arr(new Seq(Numerals.concretes["arabic_modern"].rule("_25", cs), Numerals.concretes["arabic_modern"].rule("_55", cs), new Str("ﻭ"), Numerals.concretes["arabic_modern"].rule("_39", cs)));}, _0: function(cs){return new Seq();}, _19: function(cs){return cs[0].sel(new Int(0));}, _21: function(cs){return cs[0].sel(new Int(1));}, _22: function(cs){return new Arr(Numerals.concretes["arabic_modern"].rule("_19", cs), Numerals.concretes["arabic_modern"].rule("_21", cs));}, _25: function(cs){return Numerals.concretes["arabic_modern"].rule("_19", cs).sel(new Int(0));}, _26: function(cs){return Numerals.concretes["arabic_modern"].rule("_19", cs).sel(new Int(1));}, _29: function(cs){return Numerals.concretes["arabic_modern"].rule("_19", cs).sel(new Int(3));}, _3: function(cs){return new Arr(new Str("ﺔ"), new Str("ﺔ"), new Str("ﺔ"), new Str("ﻴﻦ"), new Str("ﻤﺎﺋﺔ"));}, _35: function(cs){return new Seq(new Str("ﺍﺣﺪ"), new Str("ﻋﺸﺮ"));}, _38: function(cs){return cs[1].sel(new Int(0));}, _39: function(cs){return Numerals.concretes["arabic_modern"].rule("_38", cs).sel(new Int(1));}, _40: function(cs){return new Seq(Numerals.concretes["arabic_modern"].rule("_39", cs), new Str("ﻭ"), Numerals.concretes["arabic_modern"].rule("_29", cs));}, _43: function(cs){return Numerals.concretes["arabic_modern"].rule("_19", cs).sel(new Int(2));}, _44: function(cs){return new Seq(Numerals.concretes["arabic_modern"].rule("_43", cs), new Str("ﻋﺸﺮ"));}, _47: function(cs){return Numerals.concretes["arabic_modern"].rule("_19", cs).sel(new Int(4));}, _51: function(cs){return new Seq(Numerals.concretes["arabic_modern"].rule("_47", cs), new Str("ﻭ"), Numerals.concretes["arabic_modern"].rule("_39", cs));}, _54: function(cs){return new Arr(new Str("ﺁﻻﻑ"), new Str("ﺍﻟﻒ"), new Str("ﺍﻟﻔﻴﻦ"));}, _55: function(cs){return Numerals.concretes["arabic_modern"].rule("_54", cs).sel(Numerals.concretes["arabic_modern"].rule("_21", cs));}, _60: function(cs){return new Arr(cs[0], cs[0], cs[0], cs[0], cs[0]);}, _61: function(cs){return new Arr(Numerals.concretes["arabic_modern"].rule("_60", cs), new Int(0));}, _62: function(cs){return new Arr(cs[0]);}, _63: function(cs){return new Arr(cs[0], cs[0]);}, _64: function(cs){return new Arr(Numerals.concretes["arabic_modern"].rule("_63", cs), new Int(0));}, Digit: function(cs){return Numerals.concretes["arabic_modern"].rule("_61", cs);}, Numeral: function(cs){return Numerals.concretes["arabic_modern"].rule("_62", cs);}, Sub10: function(cs){return Numerals.concretes["arabic_modern"].rule("_61", cs);}, Sub100: function(cs){return Numerals.concretes["arabic_modern"].rule("_64", cs);}, Sub1000: function(cs){return Numerals.concretes["arabic_modern"].rule("_64", cs);}, Sub1000000: function(cs){return Numerals.concretes["arabic_modern"].rule("_62", cs);}, "Int": function(cs){return new Arr(cs[0]);}, "Float": function(cs){return new Arr(cs[0]);}, "String": function(cs){return new Arr(cs[0]);}}), chinese: new GFConcrete({coding: "utf8"},{n2: function(cs){return new Arr(new Str("贰"));}, n3: function(cs){return new Arr(new Str("叁"));}, n4: function(cs){return new Arr(new Str("肆"));}, n5: function(cs){return new Arr(new Str("伍"));}, n6: function(cs){return new Arr(new Str("陆"));}, n7: function(cs){return new Arr(new Str("柒"));}, n8: function(cs){return new Arr(new Str("捌"));}, n9: function(cs){return new Arr(new Str("玖"));}, num: function(cs){return Numerals.concretes["chinese"].rule("_9", cs);}, pot0: function(cs){return Numerals.concretes["chinese"].rule("_9", cs);}, pot01: function(cs){return new Arr(new Str("壹"));}, pot0as1: function(cs){return new Arr(new Arr(Numerals.concretes["chinese"].rule("_8", cs), Numerals.concretes["chinese"].rule("_8", cs), Numerals.concretes["chinese"].rule("_11", cs), Numerals.concretes["chinese"].rule("_11", cs)), new Int(0));}, pot1: function(cs){return new Arr(new Arr(Numerals.concretes["chinese"].rule("_14", cs), Numerals.concretes["chinese"].rule("_14", cs), Numerals.concretes["chinese"].rule("_15", cs), Numerals.concretes["chinese"].rule("_15", cs)), new Int(0));}, pot110: function(cs){return new Arr(new Suffix("壹", new Arr(new Str("拾"), new Str("拾"), new Str("万"), new Str("万"))), new Int(1));}, pot111: function(cs){return new Arr(new Arr(new Str("拾壹"), new Str("壹拾壹"), new Str("拾壹万"), new Str("拾壹万")), new Int(1));}, pot1as2: function(cs){return new Arr(new Arr(Numerals.concretes["chinese"].rule("_23", cs), Numerals.concretes["chinese"].rule("_23", cs), Numerals.concretes["chinese"].rule("_24", cs), Numerals.concretes["chinese"].rule("_25", cs)), new Int(0));}, pot1plus: function(cs){return new Arr(new Arr(Numerals.concretes["chinese"].rule("_29", cs), Numerals.concretes["chinese"].rule("_29", cs), Numerals.concretes["chinese"].rule("_30", cs), Numerals.concretes["chinese"].rule("_30", cs)), new Int(1));}, pot1to19: function(cs){return new Arr(new Arr(new Seq(new Str("壹拾"), Numerals.concretes["chinese"].rule("_8", cs)), new Str("壹拾"), Numerals.concretes["chinese"].rule("_34", cs), Numerals.concretes["chinese"].rule("_34", cs)), new Int(1));}, pot2: function(cs){return new Arr(new Arr(Numerals.concretes["chinese"].rule("_37", cs), Numerals.concretes["chinese"].rule("_37", cs), Numerals.concretes["chinese"].rule("_38", cs), Numerals.concretes["chinese"].rule("_38", cs)), new Int(0));}, pot2as3: function(cs){return new Arr(Numerals.concretes["chinese"].rule("_23", cs));}, pot2plus: function(cs){return new Arr(new Arr(Numerals.concretes["chinese"].rule("_53", cs), Numerals.concretes["chinese"].rule("_53", cs), new Seq(Numerals.concretes["chinese"].rule("_8", cs), new Str("拾"), Numerals.concretes["chinese"].rule("_55", cs), Numerals.concretes["chinese"].rule("_28", cs).sel(new Int(2))), new Seq(Numerals.concretes["chinese"].rule("_8", cs), new Str("拾"), Numerals.concretes["chinese"].rule("_55", cs), Numerals.concretes["chinese"].rule("_28", cs).sel(new Int(3)))), new Int(1));}, pot3: function(cs){return new Arr(Numerals.concretes["chinese"].rule("_24", cs));}, pot3plus: function(cs){return new Arr(new Seq(Numerals.concretes["chinese"].rule("_25", cs), Numerals.concretes["chinese"].rule("_45", cs).sel(Numerals.concretes["chinese"].rule("_64", cs).sel(new Int(0))).sel(Numerals.concretes["chinese"].rule("_64", cs).sel(new Int(1))), Numerals.concretes["chinese"].rule("_52", cs)));}, _11: function(cs){return new Seq(Numerals.concretes["chinese"].rule("_8", cs), new Str("仟"));}, _14: function(cs){return new Seq(Numerals.concretes["chinese"].rule("_8", cs), new Str("拾"));}, _15: function(cs){return new Seq(Numerals.concretes["chinese"].rule("_8", cs), new Str("万"));}, _23: function(cs){return Numerals.concretes["chinese"].rule("_8", cs).sel(new Int(0));}, _24: function(cs){return Numerals.concretes["chinese"].rule("_8", cs).sel(new Int(2));}, _25: function(cs){return Numerals.concretes["chinese"].rule("_8", cs).sel(new Int(3));}, _28: function(cs){return cs[1].sel(new Int(0));}, _29: function(cs){return new Seq(Numerals.concretes["chinese"].rule("_8", cs), new Str("拾"), Numerals.concretes["chinese"].rule("_28", cs));}, _30: function(cs){return new Seq(Numerals.concretes["chinese"].rule("_8", cs), new Str("万"), Numerals.concretes["chinese"].rule("_28", cs), new Str("仟"));}, _34: function(cs){return new Seq(new Str("壹万"), Numerals.concretes["chinese"].rule("_8", cs), new Str("仟"));}, _37: function(cs){return new Seq(Numerals.concretes["chinese"].rule("_8", cs), new Str("佰"));}, _38: function(cs){return new Seq(Numerals.concretes["chinese"].rule("_8", cs), new Str("拾万"));}, _42: function(cs){return new Arr(new Str("零"), new Str("零"));}, _43: function(cs){return new Seq();}, _44: function(cs){return new Arr(new Str("零"), Numerals.concretes["chinese"].rule("_43", cs));}, _45: function(cs){return new Arr(Numerals.concretes["chinese"].rule("_42", cs), Numerals.concretes["chinese"].rule("_44", cs));}, _46: function(cs){return cs[1].sel(new Int(1));}, _47: function(cs){return new Arr(Numerals.concretes["chinese"].rule("_46", cs), Numerals.concretes["chinese"].rule("_46", cs));}, _48: function(cs){return Numerals.concretes["chinese"].rule("_47", cs).sel(new Int(0));}, _49: function(cs){return Numerals.concretes["chinese"].rule("_45", cs).sel(Numerals.concretes["chinese"].rule("_48", cs));}, _50: function(cs){return Numerals.concretes["chinese"].rule("_47", cs).sel(new Int(1));}, _51: function(cs){return Numerals.concretes["chinese"].rule("_49", cs).sel(Numerals.concretes["chinese"].rule("_50", cs));}, _52: function(cs){return Numerals.concretes["chinese"].rule("_28", cs).sel(new Int(1));}, _53: function(cs){return new Seq(Numerals.concretes["chinese"].rule("_8", cs), new Str("佰"), Numerals.concretes["chinese"].rule("_51", cs), Numerals.concretes["chinese"].rule("_52", cs));}, _54: function(cs){return new Arr(new Str("万"), Numerals.concretes["chinese"].rule("_43", cs));}, _55: function(cs){return Numerals.concretes["chinese"].rule("_54", cs).sel(Numerals.concretes["chinese"].rule("_46", cs));}, _63: function(cs){return cs[0].sel(new Int(1));}, _64: function(cs){return new Arr(Numerals.concretes["chinese"].rule("_63", cs), Numerals.concretes["chinese"].rule("_46", cs));}, _71: function(cs){return new Arr(cs[0]);}, _72: function(cs){return new Arr(cs[0], cs[0], cs[0], cs[0]);}, _73: function(cs){return new Arr(Numerals.concretes["chinese"].rule("_72", cs), new Int(0));}, _8: function(cs){return cs[0].sel(new Int(0));}, _9: function(cs){return new Arr(Numerals.concretes["chinese"].rule("_8", cs));}, Digit: function(cs){return Numerals.concretes["chinese"].rule("_71", cs);}, Numeral: function(cs){return Numerals.concretes["chinese"].rule("_71", cs);}, Sub10: function(cs){return Numerals.concretes["chinese"].rule("_71", cs);}, Sub100: function(cs){return Numerals.concretes["chinese"].rule("_73", cs);}, Sub1000: function(cs){return Numerals.concretes["chinese"].rule("_73", cs);}, Sub1000000: function(cs){return Numerals.concretes["chinese"].rule("_71", cs);}, "Int": function(cs){return new Arr(cs[0]);}, "Float": function(cs){return new Arr(cs[0]);}, "String": function(cs){return new Arr(cs[0]);}}), danish: new GFConcrete({coding: "latin1"},{n2: function(cs){return new Arr(new Suffix("t", new Arr(new Str("o"), new Str("olv"), new Str("yve"))));}, n3: function(cs){return new Arr(new Suffix("tre", new Arr(new Str(""), new Str("tten"), new Str("dive"))));}, n4: function(cs){return new Arr(new Suffix("f", new Arr(new Str("ire"), new Str("jorten"), new Str("yrre"))));}, n5: function(cs){return new Arr(new Arr(new Str("fem"), new Str("femten"), new Str("halvtreds")));}, n6: function(cs){return new Arr(new Arr(new Str("seks"), new Str("seksten"), new Str("tres")));}, n7: function(cs){return new Arr(new Arr(new Str("syv"), new Str("sytten"), new Str("halvfjerds")));}, n8: function(cs){return new Arr(new Arr(new Str("otte"), new Str("atten"), new Str("firs")));}, n9: function(cs){return new Arr(new Arr(new Str("ni"), new Str("nitten"), new Str("halvfems")));}, num: function(cs){return Numerals.concretes["danish"].rule("_20", cs);}, pot0: function(cs){return new Arr(new Arr(Numerals.concretes["danish"].rule("_21", cs), Numerals.concretes["danish"].rule("_22", cs), Numerals.concretes["danish"].rule("_23", cs)));}, pot01: function(cs){return new Arr(new Suffix("en", new Arr(new Str(""), new Str(""), new Str(""))));}, pot0as1: function(cs){return new Arr(Numerals.concretes["danish"].rule("_21", cs));}, pot1: function(cs){return new Arr(Numerals.concretes["danish"].rule("_23", cs));}, pot110: function(cs){return new Arr(new Str("ti"));}, pot111: function(cs){return new Arr(new Str("elleve"));}, pot1as2: function(cs){return Numerals.concretes["danish"].rule("_20", cs);}, pot1plus: function(cs){return new Arr(new Seq(Numerals.concretes["danish"].rule("_33", cs).sel(new Int(0)), new Str("og"), Numerals.concretes["danish"].rule("_23", cs)));}, pot1to19: function(cs){return new Arr(Numerals.concretes["danish"].rule("_22", cs));}, pot2: function(cs){return new Arr(new Seq(Numerals.concretes["danish"].rule("_21", cs), new Str("hundrede")));}, pot2as3: function(cs){return Numerals.concretes["danish"].rule("_20", cs);}, pot2plus: function(cs){return new Arr(new Seq(Numerals.concretes["danish"].rule("_21", cs), new Str("hundrede"), new Str("og"), Numerals.concretes["danish"].rule("_33", cs)));}, pot3: function(cs){return new Arr(new Seq(Numerals.concretes["danish"].rule("_19", cs), new Str("tusind")));}, pot3plus: function(cs){return new Arr(new Seq(Numerals.concretes["danish"].rule("_19", cs), new Str("tusind"), new Str("og"), Numerals.concretes["danish"].rule("_33", cs)));}, _19: function(cs){return cs[0].sel(new Int(0));}, _20: function(cs){return new Arr(Numerals.concretes["danish"].rule("_19", cs));}, _21: function(cs){return Numerals.concretes["danish"].rule("_19", cs).sel(new Int(0));}, _22: function(cs){return Numerals.concretes["danish"].rule("_19", cs).sel(new Int(1));}, _23: function(cs){return Numerals.concretes["danish"].rule("_19", cs).sel(new Int(2));}, _33: function(cs){return cs[1].sel(new Int(0));}, _46: function(cs){return new Arr(cs[0], cs[0], cs[0]);}, _47: function(cs){return new Arr(Numerals.concretes["danish"].rule("_46", cs));}, _48: function(cs){return new Arr(cs[0]);}, Digit: function(cs){return Numerals.concretes["danish"].rule("_47", cs);}, Numeral: function(cs){return Numerals.concretes["danish"].rule("_48", cs);}, Sub10: function(cs){return Numerals.concretes["danish"].rule("_47", cs);}, Sub100: function(cs){return Numerals.concretes["danish"].rule("_48", cs);}, Sub1000: function(cs){return Numerals.concretes["danish"].rule("_48", cs);}, Sub1000000: function(cs){return Numerals.concretes["danish"].rule("_48", cs);}, "Int": function(cs){return new Arr(cs[0]);}, "Float": function(cs){return new Arr(cs[0]);}, "String": function(cs){return new Arr(cs[0]);}}), decimal: new GFConcrete({coding: "latin1"},{n2: function(cs){return new Arr(new Str("2"));}, n3: function(cs){return new Arr(new Str("3"));}, n4: function(cs){return new Arr(new Str("4"));}, n5: function(cs){return new Arr(new Str("5"));}, n6: function(cs){return new Arr(new Str("6"));}, n7: function(cs){return new Arr(new Str("7"));}, n8: function(cs){return new Arr(new Str("8"));}, n9: function(cs){return new Arr(new Str("9"));}, num: function(cs){return new Arr(Numerals.concretes["decimal"].rule("_9", cs));}, pot0: function(cs){return new Arr(Numerals.concretes["decimal"].rule("_8", cs));}, pot01: function(cs){return new Arr(new Str("1"));}, pot0as1: function(cs){return new Arr(new Arr(Numerals.concretes["decimal"].rule("_8", cs), new Seq(new Str("0"), Numerals.concretes["decimal"].rule("_8", cs))));}, pot1: function(cs){return new Arr(new Arr(Numerals.concretes["decimal"].rule("_16", cs), Numerals.concretes["decimal"].rule("_16", cs)));}, pot110: function(cs){return new Arr(new Arr(Numerals.concretes["decimal"].rule("_19", cs), Numerals.concretes["decimal"].rule("_19", cs)));}, pot111: function(cs){return new Arr(new Arr(Numerals.concretes["decimal"].rule("_22", cs), Numerals.concretes["decimal"].rule("_22", cs)));}, pot1as2: function(cs){return Numerals.concretes["decimal"].rule("_28", cs);}, pot1plus: function(cs){return new Arr(new Arr(Numerals.concretes["decimal"].rule("_30", cs), Numerals.concretes["decimal"].rule("_30", cs)));}, pot1to19: function(cs){return new Arr(new Arr(Numerals.concretes["decimal"].rule("_33", cs), Numerals.concretes["decimal"].rule("_33", cs)));}, pot2: function(cs){return new Arr(new Arr(Numerals.concretes["decimal"].rule("_36", cs), Numerals.concretes["decimal"].rule("_36", cs)));}, pot2as3: function(cs){return Numerals.concretes["decimal"].rule("_28", cs);}, pot2plus: function(cs){return new Arr(new Arr(Numerals.concretes["decimal"].rule("_40", cs), Numerals.concretes["decimal"].rule("_40", cs)));}, pot3: function(cs){return new Arr(new Arr(Numerals.concretes["decimal"].rule("_43", cs), Numerals.concretes["decimal"].rule("_43", cs)));}, pot3plus: function(cs){return new Arr(new Arr(new Seq(Numerals.concretes["decimal"].rule("_9", cs), Numerals.concretes["decimal"].rule("_39", cs)), new Seq(Numerals.concretes["decimal"].rule("_25", cs), Numerals.concretes["decimal"].rule("_39", cs))));}, _16: function(cs){return new Seq(Numerals.concretes["decimal"].rule("_8", cs), new Str("0"));}, _19: function(cs){return new Seq(new Str("1"), new Str("0"));}, _22: function(cs){return new Seq(new Str("1"), new Str("1"));}, _25: function(cs){return Numerals.concretes["decimal"].rule("_8", cs).sel(new Int(1));}, _26: function(cs){return new Seq(new Str("0"), Numerals.concretes["decimal"].rule("_25", cs));}, _27: function(cs){return new Arr(Numerals.concretes["decimal"].rule("_9", cs), Numerals.concretes["decimal"].rule("_26", cs));}, _28: function(cs){return new Arr(Numerals.concretes["decimal"].rule("_27", cs));}, _29: function(cs){return cs[1].sel(new Int(0));}, _30: function(cs){return new Seq(Numerals.concretes["decimal"].rule("_8", cs), Numerals.concretes["decimal"].rule("_29", cs));}, _33: function(cs){return new Seq(new Str("1"), Numerals.concretes["decimal"].rule("_8", cs));}, _36: function(cs){return new Seq(Numerals.concretes["decimal"].rule("_8", cs), new Str("0"), new Str("0"));}, _39: function(cs){return Numerals.concretes["decimal"].rule("_29", cs).sel(new Int(1));}, _40: function(cs){return new Seq(Numerals.concretes["decimal"].rule("_8", cs), Numerals.concretes["decimal"].rule("_39", cs));}, _43: function(cs){return new Seq(Numerals.concretes["decimal"].rule("_9", cs), new Str("0"), new Str("0"), new Str("0"));}, _50: function(cs){return new Arr(cs[0]);}, _51: function(cs){return new Arr(cs[0], cs[0]);}, _52: function(cs){return new Arr(Numerals.concretes["decimal"].rule("_51", cs));}, _8: function(cs){return cs[0].sel(new Int(0));}, _9: function(cs){return Numerals.concretes["decimal"].rule("_8", cs).sel(new Int(0));}, Digit: function(cs){return Numerals.concretes["decimal"].rule("_50", cs);}, Numeral: function(cs){return Numerals.concretes["decimal"].rule("_50", cs);}, Sub10: function(cs){return Numerals.concretes["decimal"].rule("_50", cs);}, Sub100: function(cs){return Numerals.concretes["decimal"].rule("_52", cs);}, Sub1000: function(cs){return Numerals.concretes["decimal"].rule("_52", cs);}, Sub1000000: function(cs){return Numerals.concretes["decimal"].rule("_52", cs);}, "Int": function(cs){return new Arr(cs[0]);}, "Float": function(cs){return new Arr(cs[0]);}, "String": function(cs){return new Arr(cs[0]);}}, new Parser("Numeral",[new Rule(3, new FunApp("pot3plus",[new Arg(0), new Arg(1)]),[8, 7],[[new ArgProj(0, 0), new ArgProj(1, 0)]]), new Rule(9, new FunApp("pot3plus",[new Arg(0), new Arg(1)]),[7, 7],[[new ArgProj(0, 0), new ArgProj(1, 0)]]), new Rule(3, new FunApp("pot3",[new Arg(0)]),[8],[[new ArgProj(0, 0), new Terminal("0"), new Terminal("0"), new Terminal("0")]]), new Rule(9, new FunApp("pot3",[new Arg(0)]),[8],[[new ArgProj(0, 0), new Terminal("0"), new Terminal("0"), new Terminal("0")]]), new Rule(8, new FunApp("pot2plus",[new Arg(0), new Arg(1)]),[4, 5],[[new ArgProj(0, 0), new ArgProj(1, 0)]]), new Rule(7, new FunApp("pot2plus",[new Arg(0), new Arg(1)]),[4, 5],[[new ArgProj(0, 0), new ArgProj(1, 0)]]), new Rule(3, new FunApp("pot2as3",[new Arg(0)]),[8],[[new ArgProj(0, 0)]]), new Rule(9, new FunApp("pot2as3",[new Arg(0)]),[7],[[new Terminal("0"), new ArgProj(0, 0)]]), new Rule(8, new FunApp("pot2",[new Arg(0)]),[4],[[new ArgProj(0, 0), new Terminal("0"), new Terminal("0")]]), new Rule(7, new FunApp("pot2",[new Arg(0)]),[4],[[new ArgProj(0, 0), new Terminal("0"), new Terminal("0")]]), new Rule(6, new FunApp("pot1to19",[new Arg(0)]),[1],[[new Terminal("1"), new ArgProj(0, 0)]]), new Rule(5, new FunApp("pot1to19",[new Arg(0)]),[1],[[new Terminal("1"), new ArgProj(0, 0)]]), new Rule(6, new FunApp("pot1plus",[new Arg(0), new Arg(1)]),[1, 4],[[new ArgProj(0, 0), new ArgProj(1, 0)]]), new Rule(5, new FunApp("pot1plus",[new Arg(0), new Arg(1)]),[1, 4],[[new ArgProj(0, 0), new ArgProj(1, 0)]]), new Rule(8, new FunApp("pot1as2",[new Arg(0)]),[6],[[new ArgProj(0, 0)]]), new Rule(7, new FunApp("pot1as2",[new Arg(0)]),[5],[[new Terminal("0"), new ArgProj(0, 0)]]), new Rule(6, new FunApp("pot111",[]),[],[[new Terminal("1"), new Terminal("1")]]), new Rule(5, new FunApp("pot111",[]),[],[[new Terminal("1"), new Terminal("1")]]), new Rule(6, new FunApp("pot110",[]),[],[[new Terminal("1"), new Terminal("0")]]), new Rule(5, new FunApp("pot110",[]),[],[[new Terminal("1"), new Terminal("0")]]), new Rule(6, new FunApp("pot1",[new Arg(0)]),[1],[[new ArgProj(0, 0), new Terminal("0")]]), new Rule(5, new FunApp("pot1",[new Arg(0)]),[1],[[new ArgProj(0, 0), new Terminal("0")]]), new Rule(6, new FunApp("pot0as1",[new Arg(0)]),[4],[[new ArgProj(0, 0)]]), new Rule(5, new FunApp("pot0as1",[new Arg(0)]),[4],[[new Terminal("0"), new ArgProj(0, 0)]]), new Rule(4, new FunApp("pot01",[]),[],[[new Terminal("1")]]), new Rule(4, new FunApp("pot0",[new Arg(0)]),[1],[[new ArgProj(0, 0)]]), new Rule(2, new FunApp("num",[new Arg(0)]),[3],[[new ArgProj(0, 0)]]), new Rule(1, new FunApp("n9",[]),[],[[new Terminal("9")]]), new Rule(1, new FunApp("n8",[]),[],[[new Terminal("8")]]), new Rule(1, new FunApp("n7",[]),[],[[new Terminal("7")]]), new Rule(1, new FunApp("n6",[]),[],[[new Terminal("6")]]), new Rule(1, new FunApp("n5",[]),[],[[new Terminal("5")]]), new Rule(1, new FunApp("n4",[]),[],[[new Terminal("4")]]), new Rule(1, new FunApp("n3",[]),[],[[new Terminal("3")]]), new Rule(1, new FunApp("n2",[]),[],[[new Terminal("2")]])],{Digit:[1], Float:[-3], Int:[-2], Numeral:[2], String:[-1], Sub10:[4], Sub100:[6, 5], Sub1000:[8, 7], Sub1000000:[3, 9], _Var:[-4]})),english: new GFConcrete({coding: "latin1"},{n2: function(cs){return new Arr(new Suffix("tw", new Arr(new Str("o"), new Str("elve"), new Str("enty"))));}, n3: function(cs){return new Arr(new Suffix("th", new Arr(new Str("ree"), new Str("irteen"), new Str("irty"))));}, n4: function(cs){return new Arr(new Suffix("fo", new Arr(new Str("ur"), new Str("urteen"), new Str("rty"))));}, n5: function(cs){return new Arr(new Suffix("fi", new Arr(new Str("ve"), new Str("fteen"), new Str("fty"))));}, n6: function(cs){return new Arr(new Suffix("six", Numerals.concretes["english"].rule("_12", cs)));}, n7: function(cs){return new Arr(new Suffix("seven", Numerals.concretes["english"].rule("_12", cs)));}, n8: function(cs){return new Arr(new Suffix("eight", new Arr(new Str(""), new Str("een"), new Str("y"))));}, n9: function(cs){return new Arr(new Suffix("nine", Numerals.concretes["english"].rule("_12", cs)));}, num: function(cs){return Numerals.concretes["english"].rule("_23", cs);}, pot0: function(cs){return new Arr(new Arr(Numerals.concretes["english"].rule("_24", cs), Numerals.concretes["english"].rule("_25", cs), Numerals.concretes["english"].rule("_26", cs)));}, pot01: function(cs){return new Arr(new Suffix("one", new Arr(new Str(""), new Str(""), new Str(""))));}, pot0as1: function(cs){return new Arr(Numerals.concretes["english"].rule("_24", cs));}, pot1: function(cs){return new Arr(Numerals.concretes["english"].rule("_26", cs));}, pot110: function(cs){return new Arr(new Str("ten"));}, pot111: function(cs){return new Arr(new Str("eleven"));}, pot1as2: function(cs){return Numerals.concretes["english"].rule("_23", cs);}, pot1plus: function(cs){return new Arr(new Seq(Numerals.concretes["english"].rule("_26", cs), new Str("-"), Numerals.concretes["english"].rule("_36", cs).sel(new Int(0))));}, pot1to19: function(cs){return new Arr(Numerals.concretes["english"].rule("_25", cs));}, pot2: function(cs){return new Arr(new Seq(Numerals.concretes["english"].rule("_24", cs), new Str("hundred")));}, pot2as3: function(cs){return Numerals.concretes["english"].rule("_23", cs);}, pot2plus: function(cs){return new Arr(new Seq(Numerals.concretes["english"].rule("_24", cs), new Str("hundred"), new Str("and"), Numerals.concretes["english"].rule("_36", cs)));}, pot3: function(cs){return new Arr(new Seq(Numerals.concretes["english"].rule("_22", cs), new Str("thousand")));}, pot3plus: function(cs){return new Arr(new Seq(Numerals.concretes["english"].rule("_22", cs), new Str("thousand"), Numerals.concretes["english"].rule("_36", cs)));}, _12: function(cs){return new Arr(new Str(""), new Str("teen"), new Str("ty"));}, _22: function(cs){return cs[0].sel(new Int(0));}, _23: function(cs){return new Arr(Numerals.concretes["english"].rule("_22", cs));}, _24: function(cs){return Numerals.concretes["english"].rule("_22", cs).sel(new Int(0));}, _25: function(cs){return Numerals.concretes["english"].rule("_22", cs).sel(new Int(1));}, _26: function(cs){return Numerals.concretes["english"].rule("_22", cs).sel(new Int(2));}, _36: function(cs){return cs[1].sel(new Int(0));}, _49: function(cs){return new Arr(cs[0], cs[0], cs[0]);}, _50: function(cs){return new Arr(Numerals.concretes["english"].rule("_49", cs));}, _51: function(cs){return new Arr(cs[0]);}, Digit: function(cs){return Numerals.concretes["english"].rule("_50", cs);}, Numeral: function(cs){return Numerals.concretes["english"].rule("_51", cs);}, Sub10: function(cs){return Numerals.concretes["english"].rule("_50", cs);}, Sub100: function(cs){return Numerals.concretes["english"].rule("_51", cs);}, Sub1000: function(cs){return Numerals.concretes["english"].rule("_51", cs);}, Sub1000000: function(cs){return Numerals.concretes["english"].rule("_51", cs);}, "Int": function(cs){return new Arr(cs[0]);}, "Float": function(cs){return new Arr(cs[0]);}, "String": function(cs){return new Arr(cs[0]);}}), finnish: new GFConcrete({coding: "latin1"},{n2: function(cs){return new Arr(new Str("kaksi"));}, n3: function(cs){return new Arr(new Str("kolme"));}, n4: function(cs){return new Arr(new Str("neljä"));}, n5: function(cs){return new Arr(new Str("viisi"));}, n6: function(cs){return new Arr(new Str("kuusi"));}, n7: function(cs){return new Arr(new Str("seitsemän"));}, n8: function(cs){return new Arr(new Str("kahdeksan"));}, n9: function(cs){return new Arr(new Str("yhdeksän"));}, num: function(cs){return new Arr(Numerals.concretes["finnish"].rule("_8", cs));}, pot0: function(cs){return new Arr(new Arr(Numerals.concretes["finnish"].rule("_8", cs), Numerals.concretes["finnish"].rule("_8", cs)), new Int(1));}, pot01: function(cs){return new Arr(new Arr(new Str("yksi"), new Seq()), new Int(0));}, pot0as1: function(cs){return Numerals.concretes["finnish"].rule("_19", cs);}, pot1: function(cs){return new Arr(new Arr(Numerals.concretes["finnish"].rule("_20", cs), Numerals.concretes["finnish"].rule("_20", cs)), new Int(1));}, pot110: function(cs){return new Arr(new Suffix("kymmenen", new Arr(new Str(""), new Str(""))), new Int(1));}, pot111: function(cs){return new Arr(new Arr(Numerals.concretes["finnish"].rule("_26", cs), Numerals.concretes["finnish"].rule("_26", cs)), new Int(1));}, pot1as2: function(cs){return Numerals.concretes["finnish"].rule("_19", cs);}, pot1plus: function(cs){return new Arr(new Arr(Numerals.concretes["finnish"].rule("_31", cs), Numerals.concretes["finnish"].rule("_31", cs)), new Int(1));}, pot1to19: function(cs){return new Arr(new Arr(Numerals.concretes["finnish"].rule("_34", cs), Numerals.concretes["finnish"].rule("_34", cs)), new Int(1));}, pot2: function(cs){return new Arr(new Arr(Numerals.concretes["finnish"].rule("_39", cs), Numerals.concretes["finnish"].rule("_39", cs)), new Int(1));}, pot2as3: function(cs){return new Arr(Numerals.concretes["finnish"].rule("_15", cs));}, pot2plus: function(cs){return new Arr(new Arr(Numerals.concretes["finnish"].rule("_43", cs), Numerals.concretes["finnish"].rule("_43", cs)), new Int(1));}, pot3: function(cs){return new Arr(new Seq(Numerals.concretes["finnish"].rule("_16", cs), Numerals.concretes["finnish"].rule("_47", cs)));}, pot3plus: function(cs){return new Arr(new Seq(Numerals.concretes["finnish"].rule("_16", cs), Numerals.concretes["finnish"].rule("_47", cs), Numerals.concretes["finnish"].rule("_30", cs)));}, _15: function(cs){return Numerals.concretes["finnish"].rule("_8", cs).sel(new Int(0));}, _16: function(cs){return Numerals.concretes["finnish"].rule("_8", cs).sel(new Int(1));}, _17: function(cs){return new Arr(Numerals.concretes["finnish"].rule("_15", cs), Numerals.concretes["finnish"].rule("_16", cs));}, _18: function(cs){return cs[0].sel(new Int(1));}, _19: function(cs){return new Arr(Numerals.concretes["finnish"].rule("_17", cs), Numerals.concretes["finnish"].rule("_18", cs));}, _20: function(cs){return new Seq(Numerals.concretes["finnish"].rule("_8", cs), new Str("kymmentä"));}, _26: function(cs){return new Seq(new Str("yksi"), new Str("toista"));}, _29: function(cs){return cs[1].sel(new Int(0));}, _30: function(cs){return Numerals.concretes["finnish"].rule("_29", cs).sel(new Int(0));}, _31: function(cs){return new Seq(Numerals.concretes["finnish"].rule("_8", cs), new Str("kymmentä"), Numerals.concretes["finnish"].rule("_30", cs));}, _34: function(cs){return new Seq(Numerals.concretes["finnish"].rule("_8", cs), new Str("toista"));}, _37: function(cs){return new Arr(new Str("sata"), new Str("sataa"));}, _38: function(cs){return Numerals.concretes["finnish"].rule("_37", cs).sel(Numerals.concretes["finnish"].rule("_18", cs));}, _39: function(cs){return new Seq(Numerals.concretes["finnish"].rule("_16", cs), Numerals.concretes["finnish"].rule("_38", cs));}, _43: function(cs){return new Seq(Numerals.concretes["finnish"].rule("_16", cs), Numerals.concretes["finnish"].rule("_38", cs), Numerals.concretes["finnish"].rule("_30", cs));}, _46: function(cs){return new Arr(new Str("tuhat"), new Str("tuhatta"));}, _47: function(cs){return Numerals.concretes["finnish"].rule("_46", cs).sel(Numerals.concretes["finnish"].rule("_18", cs));}, _52: function(cs){return new Arr(cs[0]);}, _53: function(cs){return new Arr(cs[0], cs[0]);}, _54: function(cs){return new Arr(Numerals.concretes["finnish"].rule("_53", cs), new Int(0));}, _8: function(cs){return cs[0].sel(new Int(0));}, Digit: function(cs){return Numerals.concretes["finnish"].rule("_52", cs);}, Numeral: function(cs){return Numerals.concretes["finnish"].rule("_52", cs);}, Sub10: function(cs){return Numerals.concretes["finnish"].rule("_54", cs);}, Sub100: function(cs){return Numerals.concretes["finnish"].rule("_54", cs);}, Sub1000: function(cs){return Numerals.concretes["finnish"].rule("_54", cs);}, Sub1000000: function(cs){return Numerals.concretes["finnish"].rule("_52", cs);}, "Int": function(cs){return new Arr(cs[0]);}, "Float": function(cs){return new Arr(cs[0]);}, "String": function(cs){return new Arr(cs[0]);}}), french: new GFConcrete({coding: "latin1"},{n2: function(cs){return new Arr(new Arr(new Str("deux"), new Str("douze"), new Str("vingt"), new Str("vingt"), new Str("vingt")), new Int(0), new Int(0));}, n3: function(cs){return new Arr(new Suffix("tr", new Arr(new Str("ois"), new Str("eize"), new Str("ente"), new Str("ente"), new Str("ente"))), new Int(0), new Int(0));}, n4: function(cs){return new Arr(new Suffix("qua", new Arr(new Str("tre"), new Str("torze"), new Str("rante"), new Str("rante"), new Str("rante"))), new Int(0), new Int(0));}, n5: function(cs){return new Arr(new Arr(new Str("cinq"), new Str("quinze"), new Str("cinquante"), new Str("cinquante"), new Str("cinquante")), new Int(0), new Int(0));}, n6: function(cs){return new Arr(new Suffix("s", new Arr(new Str("ix"), new Str("eize"), new Str("oixante"), new Str("oixante"), new Str("oixante"))), new Int(0), new Int(0));}, n7: function(cs){return new Arr(new Arr(new Str("sept"), new Seq(new Str("dix"), new Str("-"), new Str("sept")), Numerals.concretes["french"].rule("_14", cs), Numerals.concretes["french"].rule("_14", cs), new Str("soixante")), new Int(1), new Int(0));}, n8: function(cs){return new Arr(new Arr(new Str("huit"), new Seq(new Str("dix"), new Str("-"), new Str("huit")), new Seq(new Str("quatre"), new Str("-"), new Str("vingts")), Numerals.concretes["french"].rule("_19", cs), Numerals.concretes["french"].rule("_19", cs)), new Int(0), new Int(1));}, n9: function(cs){return new Arr(new Arr(new Str("neuf"), new Seq(new Str("dix"), new Str("-"), new Str("neuf")), Numerals.concretes["french"].rule("_23", cs), Numerals.concretes["french"].rule("_23", cs), Numerals.concretes["french"].rule("_19", cs)), new Int(1), new Int(1));}, num: function(cs){return new Arr(Numerals.concretes["french"].rule("_26", cs));}, pot0: function(cs){return new Arr(new Arr(new Arr(Numerals.concretes["french"].rule("_28", cs), Numerals.concretes["french"].rule("_28", cs)), Numerals.concretes["french"].rule("_31", cs), new Arr(Numerals.concretes["french"].rule("_32", cs), Numerals.concretes["french"].rule("_32", cs)), new Arr(Numerals.concretes["french"].rule("_34", cs), Numerals.concretes["french"].rule("_34", cs)), new Arr(Numerals.concretes["french"].rule("_36", cs), Numerals.concretes["french"].rule("_36", cs))), new Int(1));}, pot01: function(cs){return new Arr(new Arr(new Arr(new Str("un"), Numerals.concretes["french"].rule("_40", cs)), new Arr(new Str("onze"), Numerals.concretes["french"].rule("_40", cs)), Numerals.concretes["french"].rule("_43", cs), Numerals.concretes["french"].rule("_43", cs), Numerals.concretes["french"].rule("_43", cs)), new Int(0));}, pot0as1: function(cs){return new Arr(new Arr(Numerals.concretes["french"].rule("_26", cs).sel(Numerals.concretes["french"].rule("_46", cs).sel(new Int(0))).sel(Numerals.concretes["french"].rule("_46", cs).sel(new Int(1))), Numerals.concretes["french"].rule("_55", cs)));}, pot1: function(cs){return new Arr(new Arr(Numerals.concretes["french"].rule("_32", cs), Numerals.concretes["french"].rule("_34", cs)));}, pot110: function(cs){return new Arr(new Suffix("dix", Numerals.concretes["french"].rule("_60", cs)));}, pot111: function(cs){return new Arr(new Suffix("onze", Numerals.concretes["french"].rule("_60", cs)));}, pot1as2: function(cs){return new Arr(new Arr(Numerals.concretes["french"].rule("_28", cs), Numerals.concretes["french"].rule("_30", cs)));}, pot1plus: function(cs){return new Arr(new Arr(Numerals.concretes["french"].rule("_84", cs), Numerals.concretes["french"].rule("_84", cs)));}, pot1to19: function(cs){return new Arr(Numerals.concretes["french"].rule("_31", cs));}, pot2: function(cs){return new Arr(new Arr(new Seq(Numerals.concretes["french"].rule("_55", cs),(new Arr(new Str("cent"), new Str("cents"))).sel(Numerals.concretes["french"].rule("_78", cs))), new Seq(Numerals.concretes["french"].rule("_55", cs), new Str("cent"))));}, pot2as3: function(cs){return new Arr(Numerals.concretes["french"].rule("_28", cs));}, pot2plus: function(cs){return new Arr(new Arr(Numerals.concretes["french"].rule("_96", cs), Numerals.concretes["french"].rule("_96", cs)));}, pot3: function(cs){return new Arr(new Seq(Numerals.concretes["french"].rule("_30", cs), new Str("mille")));}, pot3plus: function(cs){return new Arr(new Seq(Numerals.concretes["french"].rule("_30", cs), new Str("mille"), Numerals.concretes["french"].rule("_95", cs)));}, _105: function(cs){return new Arr(cs[0]);}, _106: function(cs){return new Arr(cs[0], cs[0]);}, _109: function(cs){return new Arr(Numerals.concretes["french"].rule("_106", cs));}, _14: function(cs){return new Seq(new Str("soixante"), new Str("-"), new Str("dix"));}, _19: function(cs){return new Seq(new Str("quatre"), new Str("-"), new Str("vingt"));}, _23: function(cs){return new Seq(new Str("quatre"), new Str("-"), new Str("vingt"), new Str("-"), new Str("dix"));}, _26: function(cs){return cs[0].sel(new Int(0));}, _28: function(cs){return Numerals.concretes["french"].rule("_26", cs).sel(new Int(0));}, _30: function(cs){return Numerals.concretes["french"].rule("_26", cs).sel(new Int(1));}, _31: function(cs){return new Arr(Numerals.concretes["french"].rule("_30", cs), Numerals.concretes["french"].rule("_30", cs));}, _32: function(cs){return Numerals.concretes["french"].rule("_26", cs).sel(new Int(2));}, _34: function(cs){return Numerals.concretes["french"].rule("_26", cs).sel(new Int(3));}, _36: function(cs){return Numerals.concretes["french"].rule("_26", cs).sel(new Int(4));}, _40: function(cs){return new Seq();}, _43: function(cs){return new Arr(new Str("dix"), Numerals.concretes["french"].rule("_40", cs));}, _46: function(cs){return new Arr(new Int(0), new Int(0));}, _51: function(cs){return new Arr(new Int(0), new Int(1));}, _52: function(cs){return Numerals.concretes["french"].rule("_51", cs).sel(new Int(0));}, _53: function(cs){return Numerals.concretes["french"].rule("_26", cs).sel(Numerals.concretes["french"].rule("_52", cs));}, _54: function(cs){return Numerals.concretes["french"].rule("_51", cs).sel(new Int(1));}, _55: function(cs){return Numerals.concretes["french"].rule("_53", cs).sel(Numerals.concretes["french"].rule("_54", cs));}, _60: function(cs){return new Arr(new Str(""), new Str(""));}, _67: function(cs){return new Arr(new Str("et"), new Str("-"));}, _68: function(cs){return new Arr(new Str("-"), new Str("-"));}, _69: function(cs){return new Arr(Numerals.concretes["french"].rule("_67", cs), Numerals.concretes["french"].rule("_68", cs));}, _70: function(cs){return cs[0].sel(new Int(2));}, _71: function(cs){return cs[1].sel(new Int(1));}, _72: function(cs){return new Arr(Numerals.concretes["french"].rule("_70", cs), Numerals.concretes["french"].rule("_71", cs));}, _73: function(cs){return Numerals.concretes["french"].rule("_72", cs).sel(new Int(0));}, _74: function(cs){return Numerals.concretes["french"].rule("_69", cs).sel(Numerals.concretes["french"].rule("_73", cs));}, _75: function(cs){return Numerals.concretes["french"].rule("_72", cs).sel(new Int(1));}, _76: function(cs){return Numerals.concretes["french"].rule("_74", cs).sel(Numerals.concretes["french"].rule("_75", cs));}, _77: function(cs){return cs[1].sel(new Int(0));}, _78: function(cs){return cs[0].sel(new Int(1));}, _79: function(cs){return new Arr(Numerals.concretes["french"].rule("_78", cs), new Int(0));}, _80: function(cs){return Numerals.concretes["french"].rule("_79", cs).sel(new Int(0));}, _81: function(cs){return Numerals.concretes["french"].rule("_77", cs).sel(Numerals.concretes["french"].rule("_80", cs));}, _82: function(cs){return Numerals.concretes["french"].rule("_79", cs).sel(new Int(1));}, _83: function(cs){return Numerals.concretes["french"].rule("_81", cs).sel(Numerals.concretes["french"].rule("_82", cs));}, _84: function(cs){return new Seq(Numerals.concretes["french"].rule("_36", cs), Numerals.concretes["french"].rule("_76", cs), Numerals.concretes["french"].rule("_83", cs));}, _95: function(cs){return Numerals.concretes["french"].rule("_77", cs).sel(new Int(0));}, _96: function(cs){return new Seq(Numerals.concretes["french"].rule("_55", cs), new Str("cent"), Numerals.concretes["french"].rule("_95", cs));}, Digit: function(cs){return new Arr(new Arr(cs[0], cs[0], cs[0], cs[0], cs[0]), new Int(0), new Int(0));}, Numeral: function(cs){return Numerals.concretes["french"].rule("_105", cs);}, Sub10: function(cs){return new Arr(new Arr(Numerals.concretes["french"].rule("_106", cs), Numerals.concretes["french"].rule("_106", cs), Numerals.concretes["french"].rule("_106", cs), Numerals.concretes["french"].rule("_106", cs), Numerals.concretes["french"].rule("_106", cs)), new Int(0));}, Sub100: function(cs){return Numerals.concretes["french"].rule("_109", cs);}, Sub1000: function(cs){return Numerals.concretes["french"].rule("_109", cs);}, Sub1000000: function(cs){return Numerals.concretes["french"].rule("_105", cs);}, "Int": function(cs){return new Arr(cs[0]);}, "Float": function(cs){return new Arr(cs[0]);}, "String": function(cs){return new Arr(cs[0]);}}), german: new GFConcrete({coding: "latin1"},{n2: function(cs){return new Arr(new Suffix("zw", new Arr(new Str("ei"), new Str("ölf"), new Str("anzig"))));}, n3: function(cs){return new Arr(new Suffix("drei", new Arr(new Str(""), new Str("zehn"), new Str("ssig"))));}, n4: function(cs){return new Arr(new Suffix("vier", Numerals.concretes["german"].rule("_6", cs)));}, n5: function(cs){return new Arr(new Suffix("fünf", Numerals.concretes["german"].rule("_6", cs)));}, n6: function(cs){return new Arr(new Suffix("sech", new Arr(new Str("s"), new Str("zehn"), new Str("zig"))));}, n7: function(cs){return new Arr(new Suffix("sieb", new Arr(new Str("en"), new Str("zehn"), new Str("zig"))));}, n8: function(cs){return new Arr(new Suffix("acht", Numerals.concretes["german"].rule("_6", cs)));}, n9: function(cs){return new Arr(new Suffix("neun", Numerals.concretes["german"].rule("_6", cs)));}, num: function(cs){return new Arr(Numerals.concretes["german"].rule("_21", cs));}, pot0: function(cs){return new Arr(new Arr(new Arr(Numerals.concretes["german"].rule("_23", cs), Numerals.concretes["german"].rule("_23", cs), Numerals.concretes["german"].rule("_23", cs)), Numerals.concretes["german"].rule("_26", cs), Numerals.concretes["german"].rule("_28", cs)));}, pot01: function(cs){return new Arr(new Arr(Numerals.concretes["german"].rule("_32", cs), Numerals.concretes["german"].rule("_32", cs), Numerals.concretes["german"].rule("_32", cs)));}, pot0as1: function(cs){return new Arr(new Arr(Numerals.concretes["german"].rule("_21", cs).sel(Numerals.concretes["german"].rule("_35", cs).sel(new Int(0))).sel(Numerals.concretes["german"].rule("_35", cs).sel(new Int(1))), Numerals.concretes["german"].rule("_21", cs).sel(Numerals.concretes["german"].rule("_41", cs)).sel(Numerals.concretes["german"].rule("_43", cs)), Numerals.concretes["german"].rule("_49", cs)));}, pot1: function(cs){return new Arr(Numerals.concretes["german"].rule("_28", cs));}, pot110: function(cs){return new Arr(new Suffix("zehn", Numerals.concretes["german"].rule("_53", cs)));}, pot111: function(cs){return new Arr(new Suffix("elf", Numerals.concretes["german"].rule("_53", cs)));}, pot1as2: function(cs){return new Arr(new Arr(Numerals.concretes["german"].rule("_23", cs), Numerals.concretes["german"].rule("_25", cs), Numerals.concretes["german"].rule("_27", cs)));}, pot1plus: function(cs){return new Arr(new Arr(Numerals.concretes["german"].rule("_63", cs), Numerals.concretes["german"].rule("_63", cs), Numerals.concretes["german"].rule("_63", cs)));}, pot1to19: function(cs){return new Arr(Numerals.concretes["german"].rule("_26", cs));}, pot2: function(cs){return new Arr(new Arr(Numerals.concretes["german"].rule("_67", cs), Numerals.concretes["german"].rule("_67", cs), Numerals.concretes["german"].rule("_67", cs)));}, pot2as3: function(cs){return new Arr(Numerals.concretes["german"].rule("_23", cs));}, pot2plus: function(cs){return new Arr(new Arr(Numerals.concretes["german"].rule("_72", cs), Numerals.concretes["german"].rule("_72", cs), new Seq(Numerals.concretes["german"].rule("_49", cs), new Str("hundert"), Numerals.concretes["german"].rule("_73", cs))));}, pot3: function(cs){return new Arr(new Seq(Numerals.concretes["german"].rule("_27", cs), new Str("tausend")));}, pot3plus: function(cs){return new Arr(new Seq(Numerals.concretes["german"].rule("_27", cs), new Str("tausend"), Numerals.concretes["german"].rule("_73", cs)));}, _21: function(cs){return cs[0].sel(new Int(0));}, _23: function(cs){return Numerals.concretes["german"].rule("_21", cs).sel(new Int(0));}, _25: function(cs){return Numerals.concretes["german"].rule("_21", cs).sel(new Int(1));}, _26: function(cs){return new Arr(Numerals.concretes["german"].rule("_25", cs), Numerals.concretes["german"].rule("_25", cs), Numerals.concretes["german"].rule("_25", cs));}, _27: function(cs){return Numerals.concretes["german"].rule("_21", cs).sel(new Int(2));}, _28: function(cs){return new Arr(Numerals.concretes["german"].rule("_27", cs), Numerals.concretes["german"].rule("_27", cs), Numerals.concretes["german"].rule("_27", cs));}, _31: function(cs){return new Seq();}, _32: function(cs){return new Arr(new Str("eins"), new Str("ein"), Numerals.concretes["german"].rule("_31", cs));}, _35: function(cs){return new Arr(new Int(0), new Int(0));}, _40: function(cs){return new Arr(new Int(0), new Int(1));}, _41: function(cs){return Numerals.concretes["german"].rule("_40", cs).sel(new Int(0));}, _43: function(cs){return Numerals.concretes["german"].rule("_40", cs).sel(new Int(1));}, _45: function(cs){return new Arr(new Int(0), new Int(2));}, _46: function(cs){return Numerals.concretes["german"].rule("_45", cs).sel(new Int(0));}, _47: function(cs){return Numerals.concretes["german"].rule("_21", cs).sel(Numerals.concretes["german"].rule("_46", cs));}, _48: function(cs){return Numerals.concretes["german"].rule("_45", cs).sel(new Int(1));}, _49: function(cs){return Numerals.concretes["german"].rule("_47", cs).sel(Numerals.concretes["german"].rule("_48", cs));}, _53: function(cs){return new Arr(new Str(""), new Str(""), new Str(""));}, _6: function(cs){return new Arr(new Str(""), new Str("zehn"), new Str("zig"));}, _60: function(cs){return cs[1].sel(new Int(0));}, _61: function(cs){return Numerals.concretes["german"].rule("_60", cs).sel(Numerals.concretes["german"].rule("_41", cs));}, _62: function(cs){return Numerals.concretes["german"].rule("_61", cs).sel(Numerals.concretes["german"].rule("_43", cs));}, _63: function(cs){return new Seq(Numerals.concretes["german"].rule("_62", cs), new Str("und"), Numerals.concretes["german"].rule("_27", cs));}, _67: function(cs){return new Seq(Numerals.concretes["german"].rule("_49", cs), new Str("hundert"));}, _71: function(cs){return Numerals.concretes["german"].rule("_60", cs).sel(new Int(0));}, _72: function(cs){return new Seq(Numerals.concretes["german"].rule("_49", cs), new Str("hundert"), Numerals.concretes["german"].rule("_71", cs));}, _73: function(cs){return Numerals.concretes["german"].rule("_60", cs).sel(new Int(1));}, _81: function(cs){return new Arr(cs[0], cs[0], cs[0]);}, _82: function(cs){return new Arr(Numerals.concretes["german"].rule("_81", cs));}, _83: function(cs){return new Arr(cs[0]);}, Digit: function(cs){return Numerals.concretes["german"].rule("_82", cs);}, Numeral: function(cs){return Numerals.concretes["german"].rule("_83", cs);}, Sub10: function(cs){return new Arr(new Arr(Numerals.concretes["german"].rule("_81", cs), Numerals.concretes["german"].rule("_81", cs), Numerals.concretes["german"].rule("_81", cs)));}, Sub100: function(cs){return Numerals.concretes["german"].rule("_82", cs);}, Sub1000: function(cs){return Numerals.concretes["german"].rule("_82", cs);}, Sub1000000: function(cs){return Numerals.concretes["german"].rule("_83", cs);}, "Int": function(cs){return new Arr(cs[0]);}, "Float": function(cs){return new Arr(cs[0]);}, "String": function(cs){return new Arr(cs[0]);}}), hebrew_biblical: new GFConcrete({coding: "utf8"},{n2: function(cs){return new Arr(new Arr(Numerals.concretes["hebrew_biblical"].rule("_0", cs), new Str("ש×××"), new Str("ש××"), new Str("עשרים"), new Str("מאתים")), new Int(2));}, n3: function(cs){return new Arr(new Arr(new Str("שלשה"), new Str("שלשה"), new Str("שלשת"), new Str("שלשים"), new Seq(new Str("שלש"), new Str("מאות"))), new Int(0));}, n4: function(cs){return new Arr(new Arr(new Str("ארבעה"), new Str("ארבעה"), new Str("ארבעת"), new Str("ארבעים"), new Seq(new Str("ארבע"), new Str("מאות"))), new Int(0));}, n5: function(cs){return new Arr(new Arr(new Str("חמשה"), new Str("חמשה"), new Str("חמשת"), new Str("חמשים"), new Seq(new Str("חמש"), new Str("מאות"))), new Int(0));}, n6: function(cs){return new Arr(new Arr(new Str("ששה"), new Str("ששה"), new Str("ששת"), new Str("ששים"), new Seq(new Str("שש"), new Str("מאות"))), new Int(0));}, n7: function(cs){return new Arr(new Arr(new Str("שבעה"), new Str("שבעה"), new Str("שבעת"), new Str("שבעים"), new Seq(new Str("שבע"), new Str("מאות"))), new Int(0));}, n8: function(cs){return new Arr(new Arr(new Str("שמ××"), new Str("שמ××"), new Str("שמ××ª"), new Str("שמ×××"), new Seq(new Str("שמ××"), new Str("מאות"))), new Int(0));}, n9: function(cs){return new Arr(new Arr(new Str("תשעה"), new Str("תשעה"), new Str("תשעת"), new Str("תשעים"), new Seq(new Str("תשע"), new Str("מאות"))), new Int(0));}, num: function(cs){return new Arr(Numerals.concretes["hebrew_biblical"].rule("_24", cs));}, pot0: function(cs){return Numerals.concretes["hebrew_biblical"].rule("_27", cs);}, pot01: function(cs){return new Arr(new Arr(Numerals.concretes["hebrew_biblical"].rule("_0", cs), new Str("אחד"), new Str("אחד"), new Str("אחד"), new Str("מאה")), new Int(1));}, pot0as1: function(cs){return new Arr(new Arr(Numerals.concretes["hebrew_biblical"].rule("_30", cs), Numerals.concretes["hebrew_biblical"].rule("_31", cs)), Numerals.concretes["hebrew_biblical"].rule("_26", cs));}, pot1: function(cs){return new Arr(new Arr(Numerals.concretes["hebrew_biblical"].rule("_34", cs), Numerals.concretes["hebrew_biblical"].rule("_34", cs)), new Int(1));}, pot110: function(cs){return new Arr(new Suffix("עשר", new Arr(new Str(""), new Str(""))), new Int(0));}, pot111: function(cs){return new Arr(new Arr(new Variants(new Seq(new Str("אחד"), new Str("עשר")), new Seq(new Str("עשתי"), new Str("עשר"))), new Variants(new Seq(new Str("אחד"), new Str("עשר")), new Seq(new Str("עשתי"), new Str("עשר")))), new Int(1));}, pot1as2: function(cs){return Numerals.concretes["hebrew_biblical"].rule("_27", cs);}, pot1plus: function(cs){return new Arr(new Arr(Numerals.concretes["hebrew_biblical"].rule("_44", cs), Numerals.concretes["hebrew_biblical"].rule("_44", cs)), new Int(1));}, pot1to19: function(cs){return new Arr(new Arr(Numerals.concretes["hebrew_biblical"].rule("_47", cs), Numerals.concretes["hebrew_biblical"].rule("_47", cs)), new Int(1));}, pot2: function(cs){return new Arr(new Arr(Numerals.concretes["hebrew_biblical"].rule("_50", cs), Numerals.concretes["hebrew_biblical"].rule("_50", cs)), new Int(1));}, pot2as3: function(cs){return new Arr(Numerals.concretes["hebrew_biblical"].rule("_31", cs));}, pot2plus: function(cs){return new Arr(new Arr(Numerals.concretes["hebrew_biblical"].rule("_54", cs), Numerals.concretes["hebrew_biblical"].rule("_54", cs)), new Int(1));}, pot3: function(cs){return new Arr(new Seq(Numerals.concretes["hebrew_biblical"].rule("_30", cs), Numerals.concretes["hebrew_biblical"].rule("_58", cs)));}, pot3plus: function(cs){return new Arr(new Seq(Numerals.concretes["hebrew_biblical"].rule("_30", cs), Numerals.concretes["hebrew_biblical"].rule("_58", cs), new Str("ו"), Numerals.concretes["hebrew_biblical"].rule("_43", cs)));}, _0: function(cs){return new Seq();}, _24: function(cs){return cs[0].sel(new Int(0));}, _26: function(cs){return cs[0].sel(new Int(1));}, _27: function(cs){return new Arr(Numerals.concretes["hebrew_biblical"].rule("_24", cs), Numerals.concretes["hebrew_biblical"].rule("_26", cs));}, _30: function(cs){return Numerals.concretes["hebrew_biblical"].rule("_24", cs).sel(new Int(0));}, _31: function(cs){return Numerals.concretes["hebrew_biblical"].rule("_24", cs).sel(new Int(1));}, _34: function(cs){return Numerals.concretes["hebrew_biblical"].rule("_24", cs).sel(new Int(3));}, _42: function(cs){return cs[1].sel(new Int(0));}, _43: function(cs){return Numerals.concretes["hebrew_biblical"].rule("_42", cs).sel(new Int(1));}, _44: function(cs){return new Seq(Numerals.concretes["hebrew_biblical"].rule("_34", cs), new Str("ו"), Numerals.concretes["hebrew_biblical"].rule("_43", cs));}, _47: function(cs){return new Seq(Numerals.concretes["hebrew_biblical"].rule("_31", cs), new Str("עשר"));}, _50: function(cs){return Numerals.concretes["hebrew_biblical"].rule("_24", cs).sel(new Int(4));}, _54: function(cs){return new Seq(Numerals.concretes["hebrew_biblical"].rule("_50", cs), new Str("ו"), Numerals.concretes["hebrew_biblical"].rule("_43", cs));}, _57: function(cs){return new Arr(new Str("אלפים"), new Str("אלף"), new Str("אלפים"));}, _58: function(cs){return Numerals.concretes["hebrew_biblical"].rule("_57", cs).sel(Numerals.concretes["hebrew_biblical"].rule("_26", cs));}, _63: function(cs){return new Arr(cs[0], cs[0], cs[0], cs[0], cs[0]);}, _64: function(cs){return new Arr(Numerals.concretes["hebrew_biblical"].rule("_63", cs), new Int(0));}, _65: function(cs){return new Arr(cs[0]);}, _66: function(cs){return new Arr(cs[0], cs[0]);}, _67: function(cs){return new Arr(Numerals.concretes["hebrew_biblical"].rule("_66", cs), new Int(0));}, Digit: function(cs){return Numerals.concretes["hebrew_biblical"].rule("_64", cs);}, Numeral: function(cs){return Numerals.concretes["hebrew_biblical"].rule("_65", cs);}, Sub10: function(cs){return Numerals.concretes["hebrew_biblical"].rule("_64", cs);}, Sub100: function(cs){return Numerals.concretes["hebrew_biblical"].rule("_67", cs);}, Sub1000: function(cs){return Numerals.concretes["hebrew_biblical"].rule("_67", cs);}, Sub1000000: function(cs){return Numerals.concretes["hebrew_biblical"].rule("_65", cs);}, "Int": function(cs){return new Arr(cs[0]);}, "Float": function(cs){return new Arr(cs[0]);}, "String": function(cs){return new Arr(cs[0]);}}), hindi: new GFConcrete({coding: "utf8"},{n2: function(cs){return new Arr(new Arr(new Str("दो"), new Str("बीस")), new Int(1));}, n3: function(cs){return new Arr(new Suffix("ती", new Arr(new Str("न"), new Str("स"))), new Int(2));}, n4: function(cs){return new Arr(new Suffix("चा", new Arr(new Str("र"), new Str("लीस"))), new Int(3));}, n5: function(cs){return new Arr(new Suffix("प", new Arr(new Str("ाँ्न्च"), new Str("चास"))), new Int(4));}, n6: function(cs){return new Variants(new Arr(new Arr(new Str("छह"), new Str("साà¤")), new Int(5)), new Arr(new Arr(new Str("छः"), new Str("साà¤")), new Int(5)), new Arr(new Arr(new Str("छै"), new Str("साà¤")), new Int(5)));}, n7: function(cs){return new Arr(new Suffix("स", new Arr(new Str("ात"), new Str("त्तर"))), new Int(6));}, n8: function(cs){return new Arr(new Arr(new Str("आà¤"), new Str("अस्सी")), new Int(7));}, n9: function(cs){return new Variants(new Arr(new Arr(new Str("नौ"), new Str("नव्वे")), new Int(8)), new Arr(new Arr(new Str("नौ"), new Str("नब्बे")), new Int(8)));}, num: function(cs){return Numerals.concretes["hindi"].rule("_17", cs);}, pot0: function(cs){return new Arr(Numerals.concretes["hindi"].rule("_16", cs), Numerals.concretes["hindi"].rule("_18", cs));}, pot01: function(cs){return new Arr(new Arr(new Str("एक"), new Str("दुम्म्य")), new Int(0));}, pot0as1: function(cs){return new Arr(Numerals.concretes["hindi"].rule("_22", cs),(new Arr(new Int(0), new Int(1), new Int(1), new Int(1), new Int(1), new Int(1), new Int(1), new Int(1), new Int(1))).sel(Numerals.concretes["hindi"].rule("_18", cs)));}, pot1: function(cs){return new Arr(Numerals.concretes["hindi"].rule("_16", cs).sel(new Int(1)), new Int(1));}, pot110: function(cs){return new Arr(new Str("दस"), new Int(1));}, pot111: function(cs){return new Arr(new Str("ग्यारअह"), new Int(1));}, pot1as2: function(cs){return new Arr(Numerals.concretes["hindi"].rule("_16", cs), new Str("दुम्म्य"), Numerals.concretes["hindi"].rule("_18", cs));}, pot1plus: function(cs){return new Arr((new Arr((new Arr(new Str("ग्यारअह"), new Str("इक्कईस"), new Str("इकततीस"), new Str("एक्तआलीस"), new Str("इक्यावअन"), new Str("इकसà¤"), new Str("इकहत्तर"), new Str("इक्यआसी"), new Str("इक्यआनवे"))).sel(Numerals.concretes["hindi"].rule("_18", cs)),(new Suffix("ब", new Arr(new Str("ारअह"), new Str("ाईस"), new Str("ततीस"), new Str("यआलीस"), new Str("ावअन"), new Str("ासà¤"), new Str("हत्तर"), new Str("यआसी"), new Str("आनवे")))).sel(Numerals.concretes["hindi"].rule("_18", cs)),(new Suffix("त", new Arr(new Str("ेरअह"), new Str("ेईस"), new Str("ैंतीस"), new Str("ैंतआलीस"), new Str("िर्पअन"), new Str("िरसà¤"), new Str("िहत्तर"), new Str("िरआसी"), new Str("िरआनवे")))).sel(Numerals.concretes["hindi"].rule("_18", cs)),(new Suffix("च", new Arr(new Str("ौदअह"), new Str("ौबईस"), new Str("ौंतीस"), new Str("वआलीस"), new Str("ौपअन"), new Str("ौंसà¤"), new Str("ौहत्तर"), new Str("ौरआसी"), new Str("ौरआनवे")))).sel(Numerals.concretes["hindi"].rule("_18", cs)),(new Suffix("प", new Arr(new Str("ंद्रअह"), new Str("च्चईस"), new Str("ैंतीस"), new Str("ैंतआलीस"), new Str("च्पअन"), new Str("ैंसà¤"), new Str("चहत्तर"), new Str("चआसी"), new Str("चआनवे")))).sel(Numerals.concretes["hindi"].rule("_18", cs)),(new Arr(new Str("सोलअह"), new Str("छब्बईस"), new Str("छततीस"), new Str("छियआलीस"), new Str("छप्पअन"), new Str("छियासà¤"), new Str("छिहत्तर"), new Str("छियआसी"), new Str("छियआनवे"))).sel(Numerals.concretes["hindi"].rule("_18", cs)), new Variants(new Variants((new Arr(new Str("सत्त्रअह"), new Str("सत्तावईस"), new Str("सैंतीस"), new Str("सैंतआलीस"), new Str("सत्ताअन"), new Str("सरसà¤"), new Str("सतहत्तर"), new Str("सत्तआसी"), new Str("सत्तआनवे"))).sel(cs[0].sel(new Int(1))),(new Arr(new Str("सत्रअह"), new Str("सत्तावईस"), new Str("सैंतीस"), new Str("सैंतआलीस"), new Str("सत्ताअन"), new Str("सरसà¤"), new Str("सतहत्तर"), new Str("सत्तआसी"), new Str("सत्तआनवे"))).sel(cs[0].sel(new Int(1)))), new Variants((new Arr(new Str("सत्त्रअह"), new Str("सत्तावईस"), new Str("सैंतीस"), new Str("सैंतआलीस"), new Str("सत्ताअन"), new Str("सरसà¤"), new Str("सतहत्तर"), new Str("सतआसी"), new Str("सत्तआनवे"))).sel(cs[0].sel(new Int(1))),(new Arr(new Str("सत्रअह"), new Str("सत्तावईस"), new Str("सैंतीस"), new Str("सैंतआलीस"), new Str("सत्ताअन"), new Str("सरसà¤"), new Str("सतहत्तर"), new Str("सतआसी"), new Str("सत्तआनवे"))).sel(cs[0].sel(new Int(1))))), new Variants((new Arr(new Str("अà¤ à¤¾à¤°à¤à¤¹"), new Str("अट्à¤ à¤¾à¤à¤¸"), new Str("अRतीस"), new Str("अR्तआलीस"), new Str("अट्à¤ à¤¾à¤µà¤à¤¨"), new Str("अRसà¤"), new Str("अà¤ à¤¹à¤¤à¥à¤¤à¤°"), new Str("अट्à¤ à¤à¤¸à¥"), new Str("अट्à¤ à¤à¤¨à¤µà¥"))).sel(cs[0].sel(new Int(1))),(new Arr(new Str("अà¤ à¤¾à¤°à¤à¤¹"), new Str("अट्à¤ à¤¾à¤à¤¸"), new Str("अRतीस"), new Str("अR्तआलीस"), new Str("अट्à¤ à¤¾à¤µà¤à¤¨"), new Str("अRसà¤"), new Str("अà¤ à¤¹à¤¤à¥à¤¤à¤°"), new Str("अà¤ à¤à¤¸à¥"), new Str("अट्à¤ à¤à¤¨à¤µà¥"))).sel(cs[0].sel(new Int(1)))),(new Arr(new Str("उन्नीस"), new Str("उनतीस"), new Str("उनतालीस"), new Str("उनचास"), new Str("उनसà¤"), new Str("उनहत्तर"), new Variants(new Str("उन्नासी"), new Str("उन्यासी")), new Str("नवासी"), new Str("निन्यानवे"))).sel(Numerals.concretes["hindi"].rule("_18", cs)))).sel(Numerals.concretes["hindi"].rule("_50", cs)), new Int(1));}, pot1to19: function(cs){return new Arr((new Arr(new Str("ग्यारअह"), new Str("बारअह"), new Str("तेरअह"), new Str("चौदअह"), new Str("पंद्रअह"), new Str("सोलअह"), new Variants(new Str("सत्त्रअह"), new Str("सत्रअह")), new Str("अà¤ à¤¾à¤°à¤à¤¹"), new Str("उन्नीस"))).sel(Numerals.concretes["hindi"].rule("_18", cs)), new Int(1));}, pot2: function(cs){return new Arr(Numerals.concretes["hindi"].rule("_58", cs), new Seq(Numerals.concretes["hindi"].rule("_22", cs), new Str("लाख")), new Int(2));}, pot2as3: function(cs){return Numerals.concretes["hindi"].rule("_17", cs);}, pot2plus: function(cs){return new Arr(new Seq(Numerals.concretes["hindi"].rule("_58", cs), Numerals.concretes["hindi"].rule("_61", cs)), new Seq(Numerals.concretes["hindi"].rule("_22", cs), new Str("लाख"),(new Arr(new Variants(new Str("हज़ार"), new Seq(new Str("एक"), new Str("हज़ार"))), Numerals.concretes["hindi"].rule("_63", cs), Numerals.concretes["hindi"].rule("_63", cs))).sel(Numerals.concretes["hindi"].rule("_50", cs))), new Int(2));}, pot3: function(cs){return new Arr(Numerals.concretes["hindi"].rule("_71", cs));}, pot3plus: function(cs){return new Arr(new Seq(Numerals.concretes["hindi"].rule("_71", cs), Numerals.concretes["hindi"].rule("_61", cs)));}, _16: function(cs){return cs[0].sel(new Int(0));}, _17: function(cs){return new Arr(Numerals.concretes["hindi"].rule("_16", cs));}, _18: function(cs){return cs[0].sel(new Int(1));}, _22: function(cs){return Numerals.concretes["hindi"].rule("_16", cs).sel(new Int(0));}, _50: function(cs){return cs[1].sel(new Int(1));}, _56: function(cs){return new Seq(Numerals.concretes["hindi"].rule("_22", cs), new Str("सौ"));}, _57: function(cs){return new Arr(new Str("सौ"), Numerals.concretes["hindi"].rule("_56", cs), Numerals.concretes["hindi"].rule("_56", cs), Numerals.concretes["hindi"].rule("_56", cs), Numerals.concretes["hindi"].rule("_56", cs), Numerals.concretes["hindi"].rule("_56", cs), Numerals.concretes["hindi"].rule("_56", cs), Numerals.concretes["hindi"].rule("_56", cs), Numerals.concretes["hindi"].rule("_56", cs));}, _58: function(cs){return Numerals.concretes["hindi"].rule("_57", cs).sel(Numerals.concretes["hindi"].rule("_18", cs));}, _61: function(cs){return cs[1].sel(new Int(0));}, _63: function(cs){return new Seq(Numerals.concretes["hindi"].rule("_61", cs), new Str("हज़ार"));}, _68: function(cs){return new Seq(Numerals.concretes["hindi"].rule("_16", cs), new Str("हज़ार"));}, _69: function(cs){return new Arr(new Variants(new Str("हज़ार"), new Seq(new Str("एक"), new Str("हज़ार"))), Numerals.concretes["hindi"].rule("_68", cs), Numerals.concretes["hindi"].rule("_18", cs));}, _70: function(cs){return cs[0].sel(new Int(2));}, _71: function(cs){return Numerals.concretes["hindi"].rule("_69", cs).sel(Numerals.concretes["hindi"].rule("_70", cs));}, _75: function(cs){return new Arr(cs[0], cs[0]);}, _76: function(cs){return new Arr(Numerals.concretes["hindi"].rule("_75", cs), new Int(0));}, _77: function(cs){return new Arr(cs[0]);}, Digit: function(cs){return Numerals.concretes["hindi"].rule("_76", cs);}, Numeral: function(cs){return Numerals.concretes["hindi"].rule("_77", cs);}, Sub10: function(cs){return Numerals.concretes["hindi"].rule("_76", cs);}, Sub100: function(cs){return new Arr(cs[0], new Int(0));}, Sub1000: function(cs){return new Arr(cs[0], cs[0], new Int(0));}, Sub1000000: function(cs){return Numerals.concretes["hindi"].rule("_77", cs);}, "Int": function(cs){return new Arr(cs[0]);}, "Float": function(cs){return new Arr(cs[0]);}, "String": function(cs){return new Arr(cs[0]);}}), italian: new GFConcrete({coding: "latin1"},{n2: function(cs){return new Arr(new Arr(new Str("due"), new Str("due"), new Str("dodici"), new Str("venti")));}, n3: function(cs){return new Arr(new Suffix("tre", new Arr(new Str(""), new Str(""), new Str("dici"), new Str("nta"))));}, n4: function(cs){return new Arr(new Suffix("qua", new Arr(new Str("ttro"), new Str("ttro"), new Str("ttordici"), new Str("ranta"))));}, n5: function(cs){return new Arr(new Arr(new Str("cinque"), new Str("cinque"), new Str("quindici"), new Str("cinquanta")));}, n6: function(cs){return new Arr(new Suffix("se", new Arr(new Str("i"), new Str("i"), new Str("dici"), new Str("ssanta"))));}, n7: function(cs){return new Arr(new Arr(new Str("sette"), new Str("sette"), new Str("diciassette"), new Str("settanta")));}, n8: function(cs){return new Arr(new Arr(new Str("otto"), new Str("otto"), new Str("diciotto"), new Str("ottanta")));}, n9: function(cs){return new Arr(new Arr(new Str("nove"), new Str("nove"), new Str("diciannove"), new Str("novanta")));}, num: function(cs){return Numerals.concretes["italian"].rule("_20", cs);}, pot0: function(cs){return new Arr(new Arr(Numerals.concretes["italian"].rule("_21", cs), Numerals.concretes["italian"].rule("_22", cs), Numerals.concretes["italian"].rule("_23", cs), Numerals.concretes["italian"].rule("_24", cs)), new Int(1));}, pot01: function(cs){return new Arr(new Arr(new Seq(), new Str("uno"), new Str("uno"), new Str("uno")), new Int(0));}, pot0as1: function(cs){return new Arr(Numerals.concretes["italian"].rule("_22", cs), Numerals.concretes["italian"].rule("_30", cs));}, pot1: function(cs){return new Arr(Numerals.concretes["italian"].rule("_24", cs), new Int(1));}, pot110: function(cs){return new Arr(new Str("dieci"), new Int(1));}, pot111: function(cs){return new Arr(new Str("undici"), new Int(1));}, pot1as2: function(cs){return new Arr(Numerals.concretes["italian"].rule("_19", cs), Numerals.concretes["italian"].rule("_30", cs));}, pot1plus: function(cs){return new Arr(new Seq(Numerals.concretes["italian"].rule("_24", cs), Numerals.concretes["italian"].rule("_36", cs).sel(new Int(1))), new Int(1));}, pot1to19: function(cs){return new Arr(Numerals.concretes["italian"].rule("_23", cs), new Int(1));}, pot2: function(cs){return new Arr(new Seq(Numerals.concretes["italian"].rule("_21", cs), new Str("cento")), new Int(1));}, pot2as3: function(cs){return Numerals.concretes["italian"].rule("_20", cs);}, pot2plus: function(cs){return new Arr(new Seq(Numerals.concretes["italian"].rule("_21", cs), new Str("cento"), Numerals.concretes["italian"].rule("_36", cs)), new Int(1));}, pot3: function(cs){return new Arr(new Seq(Numerals.concretes["italian"].rule("_19", cs), Numerals.concretes["italian"].rule("_46", cs)));}, pot3plus: function(cs){return new Arr(new Seq(Numerals.concretes["italian"].rule("_19", cs), Numerals.concretes["italian"].rule("_46", cs), Numerals.concretes["italian"].rule("_36", cs)));}, _19: function(cs){return cs[0].sel(new Int(0));}, _20: function(cs){return new Arr(Numerals.concretes["italian"].rule("_19", cs));}, _21: function(cs){return Numerals.concretes["italian"].rule("_19", cs).sel(new Int(0));}, _22: function(cs){return Numerals.concretes["italian"].rule("_19", cs).sel(new Int(1));}, _23: function(cs){return Numerals.concretes["italian"].rule("_19", cs).sel(new Int(2));}, _24: function(cs){return Numerals.concretes["italian"].rule("_19", cs).sel(new Int(3));}, _30: function(cs){return cs[0].sel(new Int(1));}, _36: function(cs){return cs[1].sel(new Int(0));}, _45: function(cs){return new Arr(new Str("mille"), new Str("mila"));}, _46: function(cs){return Numerals.concretes["italian"].rule("_45", cs).sel(Numerals.concretes["italian"].rule("_30", cs));}, _51: function(cs){return new Arr(cs[0], cs[0], cs[0], cs[0]);}, _53: function(cs){return new Arr(cs[0]);}, _55: function(cs){return new Arr(cs[0], new Int(0));}, Digit: function(cs){return new Arr(Numerals.concretes["italian"].rule("_51", cs));}, Numeral: function(cs){return Numerals.concretes["italian"].rule("_53", cs);}, Sub10: function(cs){return new Arr(Numerals.concretes["italian"].rule("_51", cs), new Int(0));}, Sub100: function(cs){return Numerals.concretes["italian"].rule("_55", cs);}, Sub1000: function(cs){return Numerals.concretes["italian"].rule("_55", cs);}, Sub1000000: function(cs){return Numerals.concretes["italian"].rule("_53", cs);}, "Int": function(cs){return new Arr(cs[0]);}, "Float": function(cs){return new Arr(cs[0]);}, "String": function(cs){return new Arr(cs[0]);}}), japanese: new GFConcrete({coding: "utf8"},{n2: function(cs){return new Arr(new Suffix("に", Numerals.concretes["japanese"].rule("_0", cs)), new Int(1));}, n3: function(cs){return new Arr(new Suffix("さん", new Arr(new Str(""), new Str(""), new Str("ぢゅう"), new Str("びゃく"), new Str("ぜん"))), new Int(1));}, n4: function(cs){return new Variants(new Arr(new Arr(new Str("し"), new Str("よん"), new Str("よんぢゅう"), new Str("よんひゃく"), new Str("よんせん")), new Int(1)), new Arr(new Arr(new Str("よん"), new Str("よん"), new Str("よんぢゅう"), new Str("よんひゃく"), new Str("よんせん")), new Int(1)));}, n5: function(cs){return new Arr(new Suffix("ご", Numerals.concretes["japanese"].rule("_0", cs)), new Int(1));}, n6: function(cs){return new Arr(new Suffix("ろ", new Arr(new Str("く"), new Str("く"), new Str("くぢゅう"), new Str("っぴゃく"), new Str("くせん"))), new Int(1));}, n7: function(cs){return new Variants(new Arr(new Arr(new Str("なな"), new Str("なな"), new Str("ななぢゅう"), new Str("ななひゃく"), new Str("ななせん")), new Int(1)), new Arr(new Arr(new Str("しち"), new Str("なな"), new Str("ななぢゅう"), new Str("ななひゃく"), new Str("ななせん")), new Int(1)));}, n8: function(cs){return new Arr(new Suffix("は", new Arr(new Str("ち"), new Str("ち"), new Str("ちぢゅう"), new Str("っぴゃく"), new Str("っせん"))), new Int(1));}, n9: function(cs){return new Variants(new Arr(new Arr(new Str("きゅう"), new Str("きゅう"), new Str("きゅうぢゅう"), new Str("きゅうひゃく"), new Str("きゅうせん")), new Int(1)), new Arr(new Arr(new Str("く"), new Str("きゅう"), new Str("きゅうぢゅう"), new Str("きゅうひゃく"), new Str("きゅうせん")), new Int(1)));}, num: function(cs){return new Arr(Numerals.concretes["japanese"].rule("_14", cs));}, pot0: function(cs){return new Arr(Numerals.concretes["japanese"].rule("_14", cs), Numerals.concretes["japanese"].rule("_16", cs));}, pot01: function(cs){return new Arr(new Arr(new Str("いち"), Numerals.concretes["japanese"].rule("_18", cs), new Str("ぢゅう"), new Str("ひゃく"), new Str("せん")), new Int(0));}, pot0as1: function(cs){return new Arr(Numerals.concretes["japanese"].rule("_21", cs), new Arr(Numerals.concretes["japanese"].rule("_18", cs), Numerals.concretes["japanese"].rule("_22", cs)), Numerals.concretes["japanese"].rule("_16", cs));}, pot1: function(cs){return new Arr(Numerals.concretes["japanese"].rule("_25", cs), new Arr(Numerals.concretes["japanese"].rule("_26", cs), Numerals.concretes["japanese"].rule("_18", cs)), new Int(2));}, pot110: function(cs){return new Arr(new Str("ぢゅう"), new Arr(new Str("いちまん"), Numerals.concretes["japanese"].rule("_18", cs)), new Int(2));}, pot111: function(cs){return new Arr(new Str("ぢゅういち"), new Arr(new Str("いちまん"), new Str("せん")), new Int(2));}, pot1as2: function(cs){return new Arr(new Arr(Numerals.concretes["japanese"].rule("_14", cs), new Seq(Numerals.concretes["japanese"].rule("_16", cs).sel(new Int(0)), Numerals.concretes["japanese"].rule("_34", cs)), Numerals.concretes["japanese"].rule("_34", cs)), cs[0].sel(new Int(2)));}, pot1plus: function(cs){return new Arr(new Seq(Numerals.concretes["japanese"].rule("_25", cs), Numerals.concretes["japanese"].rule("_40", cs)), new Arr(Numerals.concretes["japanese"].rule("_26", cs), Numerals.concretes["japanese"].rule("_39", cs).sel(new Int(4))), new Int(2));}, pot1to19: function(cs){return new Arr(new Seq(new Str("ぢゅう"), Numerals.concretes["japanese"].rule("_21", cs)), new Arr(new Str("いちまん"), Numerals.concretes["japanese"].rule("_22", cs)), new Int(2));}, pot2: function(cs){return new Arr(new Arr(Numerals.concretes["japanese"].rule("_48", cs), new Seq(Numerals.concretes["japanese"].rule("_25", cs), new Str("まん")), new Str("uっmy")), new Int(2));}, pot2as3: function(cs){return new Arr(Numerals.concretes["japanese"].rule("_21", cs));}, pot2plus: function(cs){return new Arr(new Arr(new Seq(Numerals.concretes["japanese"].rule("_48", cs), Numerals.concretes["japanese"].rule("_39", cs)), new Seq(Numerals.concretes["japanese"].rule("_25", cs), Numerals.concretes["japanese"].rule("_54", cs).sel(new Int(0)), Numerals.concretes["japanese"].rule("_54", cs).sel(new Int(1))), new Str("uっmy")), new Int(2));}, pot3: function(cs){return new Arr(Numerals.concretes["japanese"].rule("_62", cs));}, pot3plus: function(cs){return new Arr(new Seq(Numerals.concretes["japanese"].rule("_62", cs), Numerals.concretes["japanese"].rule("_40", cs)));}, _0: function(cs){return new Arr(new Str(""), new Str(""), new Str("ぢゅう"), new Str("ひゃく"), new Str("せん"));}, _14: function(cs){return cs[0].sel(new Int(0));}, _16: function(cs){return cs[0].sel(new Int(1));}, _18: function(cs){return new Seq();}, _21: function(cs){return Numerals.concretes["japanese"].rule("_14", cs).sel(new Int(0));}, _22: function(cs){return Numerals.concretes["japanese"].rule("_14", cs).sel(new Int(4));}, _25: function(cs){return Numerals.concretes["japanese"].rule("_14", cs).sel(new Int(2));}, _26: function(cs){return new Seq(Numerals.concretes["japanese"].rule("_21", cs), new Str("まん"));}, _34: function(cs){return Numerals.concretes["japanese"].rule("_16", cs).sel(new Int(1));}, _39: function(cs){return cs[1].sel(new Int(0));}, _40: function(cs){return Numerals.concretes["japanese"].rule("_39", cs).sel(new Int(0));}, _48: function(cs){return Numerals.concretes["japanese"].rule("_14", cs).sel(new Int(3));}, _54: function(cs){return cs[1].sel(new Int(1));}, _60: function(cs){return Numerals.concretes["japanese"].rule("_14", cs).sel(new Int(1));}, _61: function(cs){return new Arr(Numerals.concretes["japanese"].rule("_25", cs), Numerals.concretes["japanese"].rule("_25", cs), Numerals.concretes["japanese"].rule("_60", cs));}, _62: function(cs){return Numerals.concretes["japanese"].rule("_61", cs).sel(Numerals.concretes["japanese"].rule("_16", cs));}, _66: function(cs){return new Arr(cs[0], cs[0], cs[0], cs[0], cs[0]);}, _67: function(cs){return new Arr(Numerals.concretes["japanese"].rule("_66", cs), new Int(0));}, _68: function(cs){return new Arr(cs[0]);}, Digit: function(cs){return Numerals.concretes["japanese"].rule("_67", cs);}, Numeral: function(cs){return Numerals.concretes["japanese"].rule("_68", cs);}, Sub10: function(cs){return Numerals.concretes["japanese"].rule("_67", cs);}, Sub100: function(cs){return new Arr(cs[0], new Arr(cs[0], cs[0]), new Int(0));}, Sub1000: function(cs){return new Arr(new Arr(cs[0], cs[0], cs[0]), new Int(0));}, Sub1000000: function(cs){return Numerals.concretes["japanese"].rule("_68", cs);}, "Int": function(cs){return new Arr(cs[0]);}, "Float": function(cs){return new Arr(cs[0]);}, "String": function(cs){return new Arr(cs[0]);}}), russian: new GFConcrete({coding: "utf8"},{n2: function(cs){return new Arr(new Arr(new Suffix("дв", new Arr(new Str("а"), new Str("е"), new Str("а"))), new Suffix("двенадцать", Numerals.concretes["russian"].rule("_2", cs)), new Suffix("двадцать", Numerals.concretes["russian"].rule("_2", cs)), new Suffix("двести", Numerals.concretes["russian"].rule("_2", cs))), new Int(1));}, n3: function(cs){return new Arr(new Arr(new Suffix("три", Numerals.concretes["russian"].rule("_2", cs)), new Suffix("тринадцать", Numerals.concretes["russian"].rule("_2", cs)), new Suffix("тридцать", Numerals.concretes["russian"].rule("_2", cs)), new Suffix("триста", Numerals.concretes["russian"].rule("_2", cs))), new Int(1));}, n4: function(cs){return new Arr(new Arr(new Suffix("четыре", Numerals.concretes["russian"].rule("_2", cs)), new Suffix("четырнадцать", Numerals.concretes["russian"].rule("_2", cs)), new Suffix("сорок", Numerals.concretes["russian"].rule("_2", cs)), new Suffix("четыреста", Numerals.concretes["russian"].rule("_2", cs))), new Int(1));}, n5: function(cs){return new Arr(new Arr(new Suffix("пять", Numerals.concretes["russian"].rule("_2", cs)), new Suffix("пятнадцать", Numerals.concretes["russian"].rule("_2", cs)), new Suffix("пятьдесят", Numerals.concretes["russian"].rule("_2", cs)), new Suffix("пятьсот", Numerals.concretes["russian"].rule("_2", cs))), new Int(2));}, n6: function(cs){return new Arr(new Arr(new Suffix("шесть", Numerals.concretes["russian"].rule("_2", cs)), new Suffix("шестнадцать", Numerals.concretes["russian"].rule("_2", cs)), new Suffix("шестьдесят", Numerals.concretes["russian"].rule("_2", cs)), new Suffix("шестьсот", Numerals.concretes["russian"].rule("_2", cs))), new Int(2));}, n7: function(cs){return new Arr(new Arr(new Suffix("семь", Numerals.concretes["russian"].rule("_2", cs)), new Suffix("семнадцать", Numerals.concretes["russian"].rule("_2", cs)), new Suffix("семьдесят", Numerals.concretes["russian"].rule("_2", cs)), new Suffix("семьсот", Numerals.concretes["russian"].rule("_2", cs))), new Int(2));}, n8: function(cs){return new Arr(new Arr(new Suffix("восемь", Numerals.concretes["russian"].rule("_2", cs)), new Suffix("восемнадцать", Numerals.concretes["russian"].rule("_2", cs)), new Suffix("восемьдесят", Numerals.concretes["russian"].rule("_2", cs)), new Suffix("восемьсот", Numerals.concretes["russian"].rule("_2", cs))), new Int(2));}, n9: function(cs){return new Arr(new Arr(new Suffix("девять", Numerals.concretes["russian"].rule("_2", cs)), new Suffix("девятнадцать", Numerals.concretes["russian"].rule("_2", cs)), new Suffix("девяносто", Numerals.concretes["russian"].rule("_2", cs)), new Suffix("девятьсот", Numerals.concretes["russian"].rule("_2", cs))), new Int(2));}, num: function(cs){return new Arr(Numerals.concretes["russian"].rule("_51", cs));}, pot0: function(cs){return new Arr(new Arr(Numerals.concretes["russian"].rule("_50", cs), Numerals.concretes["russian"].rule("_50", cs)), Numerals.concretes["russian"].rule("_54", cs));}, pot01: function(cs){return new Arr(new Arr(new Arr(Numerals.concretes["russian"].rule("_57", cs), Numerals.concretes["russian"].rule("_57", cs), Numerals.concretes["russian"].rule("_57", cs), Numerals.concretes["russian"].rule("_58", cs)), new Arr(Numerals.concretes["russian"].rule("_61", cs), Numerals.concretes["russian"].rule("_61", cs), Numerals.concretes["russian"].rule("_61", cs), Numerals.concretes["russian"].rule("_58", cs))), new Int(0));}, pot0as1: function(cs){return new Arr(new Arr(Numerals.concretes["russian"].rule("_51", cs).sel(new Int(0)), Numerals.concretes["russian"].rule("_66", cs).sel(new Int(0))), Numerals.concretes["russian"].rule("_54", cs));}, pot1: function(cs){return new Arr(new Arr(Numerals.concretes["russian"].rule("_70", cs), Numerals.concretes["russian"].rule("_70", cs)), new Int(2));}, pot110: function(cs){return new Arr(new Arr(Numerals.concretes["russian"].rule("_73", cs), Numerals.concretes["russian"].rule("_73", cs)), new Int(2));}, pot111: function(cs){return new Arr(new Arr(Numerals.concretes["russian"].rule("_76", cs), Numerals.concretes["russian"].rule("_76", cs)), new Int(2));}, pot1as2: function(cs){return new Arr(Numerals.concretes["russian"].rule("_50", cs), Numerals.concretes["russian"].rule("_54", cs));}, pot1plus: function(cs){return new Arr(new Arr(Numerals.concretes["russian"].rule("_92", cs), Numerals.concretes["russian"].rule("_92", cs)), Numerals.concretes["russian"].rule("_94", cs));}, pot1to19: function(cs){return new Arr(new Arr(Numerals.concretes["russian"].rule("_66", cs), Numerals.concretes["russian"].rule("_66", cs)), new Int(2));}, pot2: function(cs){return new Arr(new Arr(Numerals.concretes["russian"].rule("_98", cs), Numerals.concretes["russian"].rule("_99", cs)), new Int(2));}, pot2as3: function(cs){return new Arr(Numerals.concretes["russian"].rule("_66", cs));}, pot2plus: function(cs){return new Arr(new Arr(new Arr(new Seq(Numerals.concretes["russian"].rule("_98", cs).sel(new Int(0)), Numerals.concretes["russian"].rule("_83", cs)), new Seq(Numerals.concretes["russian"].rule("_98", cs).sel(new Int(1)), Numerals.concretes["russian"].rule("_106", cs)), new Seq(Numerals.concretes["russian"].rule("_98", cs).sel(new Int(2)), Numerals.concretes["russian"].rule("_109", cs))), new Arr(new Seq(Numerals.concretes["russian"].rule("_99", cs).sel(new Int(0)), Numerals.concretes["russian"].rule("_83", cs)), new Seq(Numerals.concretes["russian"].rule("_99", cs).sel(new Int(1)), Numerals.concretes["russian"].rule("_106", cs)), new Seq(Numerals.concretes["russian"].rule("_99", cs).sel(new Int(2)), Numerals.concretes["russian"].rule("_109", cs)))), Numerals.concretes["russian"].rule("_94", cs));}, pot3: function(cs){return new Arr(new Arr(Numerals.concretes["russian"].rule("_124", cs), Numerals.concretes["russian"].rule("_124", cs), Numerals.concretes["russian"].rule("_124", cs)));}, pot3plus: function(cs){return new Arr(new Arr(new Seq(Numerals.concretes["russian"].rule("_121", cs), Numerals.concretes["russian"].rule("_123", cs), Numerals.concretes["russian"].rule("_83", cs)), new Seq(Numerals.concretes["russian"].rule("_121", cs), Numerals.concretes["russian"].rule("_123", cs), Numerals.concretes["russian"].rule("_106", cs)), new Seq(Numerals.concretes["russian"].rule("_121", cs), Numerals.concretes["russian"].rule("_123", cs), Numerals.concretes["russian"].rule("_109", cs))));}, _106: function(cs){return Numerals.concretes["russian"].rule("_82", cs).sel(new Int(1));}, _109: function(cs){return Numerals.concretes["russian"].rule("_82", cs).sel(new Int(2));}, _121: function(cs){return Numerals.concretes["russian"].rule("_51", cs).sel(new Int(1));}, _122: function(cs){return new Arr(new Str("тысяча"), new Str("тысячи"), new Str("тысяч"));}, _123: function(cs){return Numerals.concretes["russian"].rule("_122", cs).sel(Numerals.concretes["russian"].rule("_54", cs));}, _124: function(cs){return new Seq(Numerals.concretes["russian"].rule("_121", cs), Numerals.concretes["russian"].rule("_123", cs));}, _132: function(cs){return new Arr(cs[0], cs[0], cs[0]);}, _133: function(cs){return new Arr(Numerals.concretes["russian"].rule("_132", cs), Numerals.concretes["russian"].rule("_132", cs), Numerals.concretes["russian"].rule("_132", cs), Numerals.concretes["russian"].rule("_132", cs));}, _138: function(cs){return new Arr(Numerals.concretes["russian"].rule("_132", cs), Numerals.concretes["russian"].rule("_132", cs));}, _139: function(cs){return new Arr(Numerals.concretes["russian"].rule("_138", cs), new Int(0));}, _2: function(cs){return new Arr(new Str(""), new Str(""), new Str(""));}, _50: function(cs){return cs[0].sel(new Int(0));}, _51: function(cs){return Numerals.concretes["russian"].rule("_50", cs).sel(new Int(0));}, _54: function(cs){return cs[0].sel(new Int(1));}, _56: function(cs){return new Seq();}, _57: function(cs){return new Arr(Numerals.concretes["russian"].rule("_56", cs), Numerals.concretes["russian"].rule("_56", cs), Numerals.concretes["russian"].rule("_56", cs));}, _58: function(cs){return new Suffix("сто", Numerals.concretes["russian"].rule("_2", cs));}, _60: function(cs){return new Arr(new Str("ин"), new Str("на"), new Str("но"));}, _61: function(cs){return new Suffix("од", Numerals.concretes["russian"].rule("_60", cs));}, _66: function(cs){return Numerals.concretes["russian"].rule("_50", cs).sel(new Int(1));}, _70: function(cs){return Numerals.concretes["russian"].rule("_50", cs).sel(new Int(2));}, _73: function(cs){return new Suffix("десять", Numerals.concretes["russian"].rule("_2", cs));}, _76: function(cs){return new Suffix("одиннадцать", Numerals.concretes["russian"].rule("_2", cs));}, _80: function(cs){return Numerals.concretes["russian"].rule("_70", cs).sel(new Int(0));}, _81: function(cs){return cs[1].sel(new Int(0));}, _82: function(cs){return Numerals.concretes["russian"].rule("_81", cs).sel(new Int(1));}, _83: function(cs){return Numerals.concretes["russian"].rule("_82", cs).sel(new Int(0));}, _84: function(cs){return Numerals.concretes["russian"].rule("_83", cs).sel(new Int(0));}, _85: function(cs){return new Seq(Numerals.concretes["russian"].rule("_80", cs), Numerals.concretes["russian"].rule("_84", cs));}, _86: function(cs){return Numerals.concretes["russian"].rule("_70", cs).sel(new Int(1));}, _87: function(cs){return Numerals.concretes["russian"].rule("_83", cs).sel(new Int(1));}, _88: function(cs){return new Seq(Numerals.concretes["russian"].rule("_86", cs), Numerals.concretes["russian"].rule("_87", cs));}, _89: function(cs){return Numerals.concretes["russian"].rule("_70", cs).sel(new Int(2));}, _90: function(cs){return Numerals.concretes["russian"].rule("_83", cs).sel(new Int(2));}, _91: function(cs){return new Seq(Numerals.concretes["russian"].rule("_89", cs), Numerals.concretes["russian"].rule("_90", cs));}, _92: function(cs){return new Arr(Numerals.concretes["russian"].rule("_85", cs), Numerals.concretes["russian"].rule("_88", cs), Numerals.concretes["russian"].rule("_91", cs));}, _94: function(cs){return cs[1].sel(new Int(1));}, _98: function(cs){return Numerals.concretes["russian"].rule("_51", cs).sel(new Int(3));}, _99: function(cs){return Numerals.concretes["russian"].rule("_66", cs).sel(new Int(3));}, Digit: function(cs){return new Arr(Numerals.concretes["russian"].rule("_133", cs), new Int(0));}, Numeral: function(cs){return new Arr(cs[0]);}, Sub10: function(cs){return new Arr(new Arr(Numerals.concretes["russian"].rule("_133", cs), Numerals.concretes["russian"].rule("_133", cs)), new Int(0));}, Sub100: function(cs){return Numerals.concretes["russian"].rule("_139", cs);}, Sub1000: function(cs){return Numerals.concretes["russian"].rule("_139", cs);}, Sub1000000: function(cs){return new Arr(Numerals.concretes["russian"].rule("_132", cs));}, "Int": function(cs){return new Arr(cs[0]);}, "Float": function(cs){return new Arr(cs[0]);}, "String": function(cs){return new Arr(cs[0]);}}), spanish: new GFConcrete({coding: "latin1"},{n2: function(cs){return new Arr(new Arr(new Arr(new Str("dos"), new Str("dos"), new Seq(new Str("y"), new Str("dos"))), new Suffix("doce", Numerals.concretes["spanish"].rule("_2", cs)), new Suffix("veint", new Arr(new Str("i"), new Str("e"), new Str("e"))), new Suffix("doscientos", Numerals.concretes["spanish"].rule("_2", cs))), new Int(0));}, n3: function(cs){return new Arr(new Arr(new Arr(new Str("tres"), new Str("tres"), new Seq(new Str("y"), new Str("tres"))), new Suffix("trece", Numerals.concretes["spanish"].rule("_2", cs)), new Suffix("treinta", Numerals.concretes["spanish"].rule("_2", cs)), new Suffix("trescientos", Numerals.concretes["spanish"].rule("_2", cs))), new Int(2));}, n4: function(cs){return new Arr(new Arr(new Arr(new Str("cuatro"), new Str("cuatro"), new Seq(new Str("y"), new Str("cuatro"))), new Suffix("catorce", Numerals.concretes["spanish"].rule("_2", cs)), new Suffix("cuarenta", Numerals.concretes["spanish"].rule("_2", cs)), new Suffix("cuatrocientos", Numerals.concretes["spanish"].rule("_2", cs))), new Int(2));}, n5: function(cs){return new Arr(new Arr(new Arr(new Str("cinco"), new Str("cinco"), new Seq(new Str("y"), new Str("cinco"))), new Suffix("quince", Numerals.concretes["spanish"].rule("_2", cs)), new Suffix("cincuenta", Numerals.concretes["spanish"].rule("_2", cs)), new Suffix("quinientos", Numerals.concretes["spanish"].rule("_2", cs))), new Int(2));}, n6: function(cs){return new Arr(new Arr(new Arr(new Str("seis"), new Str("seis"), new Seq(new Str("y"), new Str("seis"))), new Suffix("dieciseis", Numerals.concretes["spanish"].rule("_2", cs)), new Suffix("sesenta", Numerals.concretes["spanish"].rule("_2", cs)), new Suffix("seiscientos", Numerals.concretes["spanish"].rule("_2", cs))), new Int(2));}, n7: function(cs){return new Arr(new Arr(new Arr(new Str("siete"), new Str("siete"), new Seq(new Str("y"), new Str("siete"))), new Suffix("diecisiete", Numerals.concretes["spanish"].rule("_2", cs)), new Suffix("setenta", Numerals.concretes["spanish"].rule("_2", cs)), new Suffix("setecientos", Numerals.concretes["spanish"].rule("_2", cs))), new Int(2));}, n8: function(cs){return new Arr(new Arr(new Arr(new Str("ocho"), new Str("ocho"), new Seq(new Str("y"), new Str("ocho"))), new Suffix("dieciocho", Numerals.concretes["spanish"].rule("_2", cs)), new Suffix("ochenta", Numerals.concretes["spanish"].rule("_2", cs)), new Suffix("ochocientos", Numerals.concretes["spanish"].rule("_2", cs))), new Int(2));}, n9: function(cs){return new Arr(new Arr(new Arr(new Str("nueve"), new Str("nueve"), new Seq(new Str("y"), new Str("nueve"))), new Suffix("diecinueve", Numerals.concretes["spanish"].rule("_2", cs)), new Suffix("noventa", Numerals.concretes["spanish"].rule("_2", cs)), new Suffix("novecientos", Numerals.concretes["spanish"].rule("_2", cs))), new Int(2));}, num: function(cs){return Numerals.concretes["spanish"].rule("_59", cs);}, pot0: function(cs){return new Arr(new Arr(new Arr(Numerals.concretes["spanish"].rule("_58", cs).sel(Numerals.concretes["spanish"].rule("_60", cs).sel(new Int(0))).sel(Numerals.concretes["spanish"].rule("_60", cs).sel(new Int(1))), Numerals.concretes["spanish"].rule("_69", cs), Numerals.concretes["spanish"].rule("_58", cs).sel(Numerals.concretes["spanish"].rule("_70", cs).sel(new Int(0))).sel(Numerals.concretes["spanish"].rule("_70", cs).sel(new Int(1)))), new Arr(Numerals.concretes["spanish"].rule("_58", cs).sel(Numerals.concretes["spanish"].rule("_76", cs).sel(new Int(0))).sel(Numerals.concretes["spanish"].rule("_76", cs).sel(new Int(1))), Numerals.concretes["spanish"].rule("_85", cs), Numerals.concretes["spanish"].rule("_58", cs).sel(Numerals.concretes["spanish"].rule("_86", cs).sel(new Int(0))).sel(Numerals.concretes["spanish"].rule("_86", cs).sel(new Int(1)))), new Arr(Numerals.concretes["spanish"].rule("_96", cs), Numerals.concretes["spanish"].rule("_101", cs), Numerals.concretes["spanish"].rule("_58", cs).sel(Numerals.concretes["spanish"].rule("_102", cs).sel(new Int(0))).sel(Numerals.concretes["spanish"].rule("_102", cs).sel(new Int(1)))), new Arr(Numerals.concretes["spanish"].rule("_112", cs), Numerals.concretes["spanish"].rule("_117", cs), Numerals.concretes["spanish"].rule("_58", cs).sel(Numerals.concretes["spanish"].rule("_118", cs).sel(new Int(0))).sel(Numerals.concretes["spanish"].rule("_118", cs).sel(new Int(1))))));}, pot01: function(cs){return new Arr(new Arr(Numerals.concretes["spanish"].rule("_127", cs), Numerals.concretes["spanish"].rule("_127", cs), Numerals.concretes["spanish"].rule("_127", cs), new Arr(new Str("ciento"), new Str("cien"), Numerals.concretes["spanish"].rule("_126", cs))));}, pot0as1: function(cs){return new Arr(Numerals.concretes["spanish"].rule("_69", cs));}, pot1: function(cs){return new Arr(Numerals.concretes["spanish"].rule("_101", cs));}, pot110: function(cs){return new Arr(new Str("diez"));}, pot111: function(cs){return new Arr(new Str("once"));}, pot1as2: function(cs){return Numerals.concretes["spanish"].rule("_59", cs);}, pot1plus: function(cs){return new Arr(new Seq(Numerals.concretes["spanish"].rule("_96", cs), Numerals.concretes["spanish"].rule("_135", cs).sel(Numerals.concretes["spanish"].rule("_137", cs).sel(new Int(0))).sel(Numerals.concretes["spanish"].rule("_137", cs).sel(new Int(1)))));}, pot1to19: function(cs){return new Arr(Numerals.concretes["spanish"].rule("_85", cs));}, pot2: function(cs){return new Arr(Numerals.concretes["spanish"].rule("_117", cs));}, pot2as3: function(cs){return Numerals.concretes["spanish"].rule("_59", cs);}, pot2plus: function(cs){return new Arr(new Seq(Numerals.concretes["spanish"].rule("_112", cs), Numerals.concretes["spanish"].rule("_135", cs)));}, pot3: function(cs){return new Arr(new Seq(Numerals.concretes["spanish"].rule("_58", cs), new Str("mil")));}, pot3plus: function(cs){return new Arr(new Seq(Numerals.concretes["spanish"].rule("_58", cs), new Str("mil"), Numerals.concretes["spanish"].rule("_135", cs)));}, _100: function(cs){return Numerals.concretes["spanish"].rule("_97", cs).sel(new Int(1));}, _101: function(cs){return Numerals.concretes["spanish"].rule("_99", cs).sel(Numerals.concretes["spanish"].rule("_100", cs));}, _102: function(cs){return new Arr(new Int(2), new Int(2));}, _108: function(cs){return new Arr(new Int(3), new Int(0));}, _109: function(cs){return Numerals.concretes["spanish"].rule("_108", cs).sel(new Int(0));}, _110: function(cs){return Numerals.concretes["spanish"].rule("_58", cs).sel(Numerals.concretes["spanish"].rule("_109", cs));}, _111: function(cs){return Numerals.concretes["spanish"].rule("_108", cs).sel(new Int(1));}, _112: function(cs){return Numerals.concretes["spanish"].rule("_110", cs).sel(Numerals.concretes["spanish"].rule("_111", cs));}, _113: function(cs){return new Arr(new Int(3), new Int(1));}, _114: function(cs){return Numerals.concretes["spanish"].rule("_113", cs).sel(new Int(0));}, _115: function(cs){return Numerals.concretes["spanish"].rule("_58", cs).sel(Numerals.concretes["spanish"].rule("_114", cs));}, _116: function(cs){return Numerals.concretes["spanish"].rule("_113", cs).sel(new Int(1));}, _117: function(cs){return Numerals.concretes["spanish"].rule("_115", cs).sel(Numerals.concretes["spanish"].rule("_116", cs));}, _118: function(cs){return new Arr(new Int(3), new Int(2));}, _126: function(cs){return new Seq(new Str("y"), new Str("uno"));}, _127: function(cs){return new Arr(new Str("uno"), new Str("uno"), Numerals.concretes["spanish"].rule("_126", cs));}, _135: function(cs){return cs[1].sel(new Int(0));}, _136: function(cs){return cs[0].sel(new Int(1));}, _137: function(cs){return new Arr(new Int(0), Numerals.concretes["spanish"].rule("_136", cs));}, _152: function(cs){return new Arr(cs[0], cs[0], cs[0]);}, _153: function(cs){return new Arr(Numerals.concretes["spanish"].rule("_152", cs), Numerals.concretes["spanish"].rule("_152", cs), Numerals.concretes["spanish"].rule("_152", cs), Numerals.concretes["spanish"].rule("_152", cs));}, _155: function(cs){return new Arr(cs[0]);}, _2: function(cs){return new Arr(new Str(""), new Str(""), new Str(""));}, _58: function(cs){return cs[0].sel(new Int(0));}, _59: function(cs){return new Arr(Numerals.concretes["spanish"].rule("_58", cs));}, _60: function(cs){return new Arr(new Int(0), new Int(0));}, _65: function(cs){return new Arr(new Int(0), new Int(1));}, _66: function(cs){return Numerals.concretes["spanish"].rule("_65", cs).sel(new Int(0));}, _67: function(cs){return Numerals.concretes["spanish"].rule("_58", cs).sel(Numerals.concretes["spanish"].rule("_66", cs));}, _68: function(cs){return Numerals.concretes["spanish"].rule("_65", cs).sel(new Int(1));}, _69: function(cs){return Numerals.concretes["spanish"].rule("_67", cs).sel(Numerals.concretes["spanish"].rule("_68", cs));}, _70: function(cs){return new Arr(new Int(0), new Int(2));}, _76: function(cs){return new Arr(new Int(1), new Int(0));}, _81: function(cs){return new Arr(new Int(1), new Int(1));}, _82: function(cs){return Numerals.concretes["spanish"].rule("_81", cs).sel(new Int(0));}, _83: function(cs){return Numerals.concretes["spanish"].rule("_58", cs).sel(Numerals.concretes["spanish"].rule("_82", cs));}, _84: function(cs){return Numerals.concretes["spanish"].rule("_81", cs).sel(new Int(1));}, _85: function(cs){return Numerals.concretes["spanish"].rule("_83", cs).sel(Numerals.concretes["spanish"].rule("_84", cs));}, _86: function(cs){return new Arr(new Int(1), new Int(2));}, _92: function(cs){return new Arr(new Int(2), new Int(0));}, _93: function(cs){return Numerals.concretes["spanish"].rule("_92", cs).sel(new Int(0));}, _94: function(cs){return Numerals.concretes["spanish"].rule("_58", cs).sel(Numerals.concretes["spanish"].rule("_93", cs));}, _95: function(cs){return Numerals.concretes["spanish"].rule("_92", cs).sel(new Int(1));}, _96: function(cs){return Numerals.concretes["spanish"].rule("_94", cs).sel(Numerals.concretes["spanish"].rule("_95", cs));}, _97: function(cs){return new Arr(new Int(2), new Int(1));}, _98: function(cs){return Numerals.concretes["spanish"].rule("_97", cs).sel(new Int(0));}, _99: function(cs){return Numerals.concretes["spanish"].rule("_58", cs).sel(Numerals.concretes["spanish"].rule("_98", cs));}, Digit: function(cs){return new Arr(Numerals.concretes["spanish"].rule("_153", cs), new Int(0));}, Numeral: function(cs){return Numerals.concretes["spanish"].rule("_155", cs);}, Sub10: function(cs){return new Arr(Numerals.concretes["spanish"].rule("_153", cs));}, Sub100: function(cs){return Numerals.concretes["spanish"].rule("_155", cs);}, Sub1000: function(cs){return Numerals.concretes["spanish"].rule("_155", cs);}, Sub1000000: function(cs){return Numerals.concretes["spanish"].rule("_155", cs);}, "Int": function(cs){return new Arr(cs[0]);}, "Float": function(cs){return new Arr(cs[0]);}, "String": function(cs){return new Arr(cs[0]);}}), swedish: new GFConcrete({coding: "latin1"},{n2: function(cs){return new Arr(new Suffix("t", new Arr(new Str("vå"), new Str("olv"), new Str("jugo"))));}, n3: function(cs){return new Arr(new Suffix("tre", Numerals.concretes["swedish"].rule("_3", cs)));}, n4: function(cs){return new Arr(new Suffix("f", new Arr(new Str("yra"), new Str("jorton"), new Str("yrtio"))));}, n5: function(cs){return new Arr(new Suffix("fem", Numerals.concretes["swedish"].rule("_9", cs)));}, n6: function(cs){return new Arr(new Suffix("sex", Numerals.concretes["swedish"].rule("_9", cs)));}, n7: function(cs){return new Arr(new Suffix("sju", Numerals.concretes["swedish"].rule("_3", cs)));}, n8: function(cs){return new Arr(new Arr(new Str("åtta"), new Str("arton"), new Str("åttio")));}, n9: function(cs){return new Arr(new Suffix("ni", new Arr(new Str("o"), new Str("tton"), new Str("ttio"))));}, num: function(cs){return Numerals.concretes["swedish"].rule("_22", cs);}, pot0: function(cs){return new Arr(new Arr(Numerals.concretes["swedish"].rule("_23", cs), Numerals.concretes["swedish"].rule("_24", cs), Numerals.concretes["swedish"].rule("_25", cs)));}, pot01: function(cs){return new Arr(new Suffix("ett", new Arr(new Str(""), new Str(""), new Str(""))));}, pot0as1: function(cs){return new Arr(Numerals.concretes["swedish"].rule("_23", cs));}, pot1: function(cs){return new Arr(Numerals.concretes["swedish"].rule("_25", cs));}, pot110: function(cs){return new Arr(new Str("tio"));}, pot111: function(cs){return new Arr(new Str("elva"));}, pot1as2: function(cs){return Numerals.concretes["swedish"].rule("_22", cs);}, pot1plus: function(cs){return new Arr(new Seq(Numerals.concretes["swedish"].rule("_25", cs), Numerals.concretes["swedish"].rule("_35", cs).sel(new Int(0))));}, pot1to19: function(cs){return new Arr(Numerals.concretes["swedish"].rule("_24", cs));}, pot2: function(cs){return new Arr(new Seq(Numerals.concretes["swedish"].rule("_23", cs), new Str("hundra")));}, pot2as3: function(cs){return Numerals.concretes["swedish"].rule("_22", cs);}, pot2plus: function(cs){return new Arr(new Seq(Numerals.concretes["swedish"].rule("_23", cs), new Str("hundra"), Numerals.concretes["swedish"].rule("_35", cs)));}, pot3: function(cs){return new Arr(new Seq(Numerals.concretes["swedish"].rule("_21", cs), new Str("tusen")));}, pot3plus: function(cs){return new Arr(new Seq(Numerals.concretes["swedish"].rule("_21", cs), new Str("tusen"), Numerals.concretes["swedish"].rule("_35", cs)));}, _21: function(cs){return cs[0].sel(new Int(0));}, _22: function(cs){return new Arr(Numerals.concretes["swedish"].rule("_21", cs));}, _23: function(cs){return Numerals.concretes["swedish"].rule("_21", cs).sel(new Int(0));}, _24: function(cs){return Numerals.concretes["swedish"].rule("_21", cs).sel(new Int(1));}, _25: function(cs){return Numerals.concretes["swedish"].rule("_21", cs).sel(new Int(2));}, _3: function(cs){return new Arr(new Str(""), new Str("tton"), new Str("ttio"));}, _35: function(cs){return cs[1].sel(new Int(0));}, _48: function(cs){return new Arr(cs[0], cs[0], cs[0]);}, _49: function(cs){return new Arr(Numerals.concretes["swedish"].rule("_48", cs));}, _50: function(cs){return new Arr(cs[0]);}, _9: function(cs){return new Arr(new Str(""), new Str("ton"), new Str("tio"));}, Digit: function(cs){return Numerals.concretes["swedish"].rule("_49", cs);}, Numeral: function(cs){return Numerals.concretes["swedish"].rule("_50", cs);}, Sub10: function(cs){return Numerals.concretes["swedish"].rule("_49", cs);}, Sub100: function(cs){return Numerals.concretes["swedish"].rule("_50", cs);}, Sub1000: function(cs){return Numerals.concretes["swedish"].rule("_50", cs);}, Sub1000000: function(cs){return Numerals.concretes["swedish"].rule("_50", cs);}, "Int": function(cs){return new Arr(cs[0]);}, "Float": function(cs){return new Arr(cs[0]);}, "String": function(cs){return new Arr(cs[0]);}}), thai: new GFConcrete({coding: "utf8"},{n2: function(cs){return new Arr(new Arr(new Str("สอง"), new Str("ยี่"), new Str("สอง")));}, n3: function(cs){return new Arr(new Suffix("สาม", Numerals.concretes["thai"].rule("_2", cs)));}, n4: function(cs){return new Arr(new Suffix("สี่", Numerals.concretes["thai"].rule("_2", cs)));}, n5: function(cs){return new Arr(new Suffix("ห้า", Numerals.concretes["thai"].rule("_2", cs)));}, n6: function(cs){return new Arr(new Suffix("หก", Numerals.concretes["thai"].rule("_2", cs)));}, n7: function(cs){return new Arr(new Suffix("เจ็ด", Numerals.concretes["thai"].rule("_2", cs)));}, n8: function(cs){return new Arr(new Suffix("แปด", Numerals.concretes["thai"].rule("_2", cs)));}, n9: function(cs){return new Arr(new Suffix("เกา", Numerals.concretes["thai"].rule("_2", cs)));}, num: function(cs){return Numerals.concretes["thai"].rule("_18", cs);}, pot0: function(cs){return Numerals.concretes["thai"].rule("_18", cs);}, pot01: function(cs){return new Arr(new Arr(new Str("หนึง"), new Str("หนึง"), new Str("เอ็ด")));}, pot0as1: function(cs){return new Arr(new Arr(Numerals.concretes["thai"].rule("_21", cs), new Seq(Numerals.concretes["thai"].rule("_21", cs), new Str("พะน"))));}, pot1: function(cs){return new Arr(new Arr(new Seq(Numerals.concretes["thai"].rule("_25", cs), new Str("สิบ")), new Seq(Numerals.concretes["thai"].rule("_25", cs), new Str("หมื่น"))));}, pot110: function(cs){return new Arr(new Arr(new Str("สิบ"), new Str("หมื่น")));}, pot111: function(cs){return new Arr(new Arr(new Str("สิบเอ็ด"), new Str("หนึงหมื่นหนึงพะน")));}, pot1as2: function(cs){return Numerals.concretes["thai"].rule("_18", cs);}, pot1plus: function(cs){return new Arr(new Arr(new Seq(Numerals.concretes["thai"].rule("_25", cs), new Str("สิบ"), Numerals.concretes["thai"].rule("_35", cs)), new Seq(Numerals.concretes["thai"].rule("_25", cs), new Str("หมื่น"), Numerals.concretes["thai"].rule("_35", cs), new Str("พะน"))));}, pot1to19: function(cs){return new Arr(new Arr(new Seq(new Str("สิบ"), Numerals.concretes["thai"].rule("_17", cs).sel(new Int(2))), new Seq(new Str("หนึงหมื่น"), Numerals.concretes["thai"].rule("_21", cs), new Str("พะน"))));}, pot2: function(cs){return new Arr(new Arr(new Seq(Numerals.concretes["thai"].rule("_21", cs), new Str("ร้อย")), new Seq(Numerals.concretes["thai"].rule("_21", cs), new Str("แสน"))));}, pot2as3: function(cs){return new Arr(Numerals.concretes["thai"].rule("_21", cs));}, pot2plus: function(cs){return new Arr(new Arr(new Seq(Numerals.concretes["thai"].rule("_21", cs), new Str("ร้อย"), Numerals.concretes["thai"].rule("_50", cs)), new Seq(Numerals.concretes["thai"].rule("_21", cs), new Str("แสน"), Numerals.concretes["thai"].rule("_34", cs).sel(new Int(1)))));}, pot3: function(cs){return new Arr(Numerals.concretes["thai"].rule("_25", cs));}, pot3plus: function(cs){return new Arr(new Seq(Numerals.concretes["thai"].rule("_25", cs), Numerals.concretes["thai"].rule("_50", cs)));}, _17: function(cs){return cs[0].sel(new Int(0));}, _18: function(cs){return new Arr(Numerals.concretes["thai"].rule("_17", cs));}, _2: function(cs){return new Arr(new Str(""), new Str(""), new Str(""));}, _21: function(cs){return Numerals.concretes["thai"].rule("_17", cs).sel(new Int(0));}, _25: function(cs){return Numerals.concretes["thai"].rule("_17", cs).sel(new Int(1));}, _34: function(cs){return cs[1].sel(new Int(0));}, _35: function(cs){return Numerals.concretes["thai"].rule("_34", cs).sel(new Int(2));}, _50: function(cs){return Numerals.concretes["thai"].rule("_34", cs).sel(new Int(0));}, _59: function(cs){return new Arr(cs[0], cs[0], cs[0]);}, _60: function(cs){return new Arr(Numerals.concretes["thai"].rule("_59", cs));}, _61: function(cs){return new Arr(cs[0]);}, _62: function(cs){return new Arr(cs[0], cs[0]);}, _63: function(cs){return new Arr(Numerals.concretes["thai"].rule("_62", cs));}, Digit: function(cs){return Numerals.concretes["thai"].rule("_60", cs);}, Numeral: function(cs){return Numerals.concretes["thai"].rule("_61", cs);}, Sub10: function(cs){return Numerals.concretes["thai"].rule("_60", cs);}, Sub100: function(cs){return Numerals.concretes["thai"].rule("_63", cs);}, Sub1000: function(cs){return Numerals.concretes["thai"].rule("_63", cs);}, Sub1000000: function(cs){return Numerals.concretes["thai"].rule("_61", cs);}, "Int": function(cs){return new Arr(cs[0]);}, "Float": function(cs){return new Arr(cs[0]);}, "String": function(cs){return new Arr(cs[0]);}})});

