xtemplate
Version:
eXtensible Template Engine lib on browser and nodejs. support async control, inheritance, include, logic expression, custom function and more.
2,431 lines (2,430 loc) • 111 kB
JavaScript
/*
Generated by kison.
*/
var parser = (function(undefined){
/*jshint quotmark:false, loopfunc:true, indent:false, unused:false, asi:true, boss:true*/
/* Generated by kison */
var parser = {};
var GrammarConst = {
'SHIFT_TYPE': 1,
'REDUCE_TYPE': 2,
'ACCEPT_TYPE': 0,
'TYPE_INDEX': 0,
'PRODUCTION_INDEX': 1,
'TO_INDEX': 2
};
function peekStack(stack, n) {
n = n || 1;
return stack[stack.length - n];
} /*jslint quotmark: false*/
/*jslint quotmark: false*/
function mix(to, from) {
for (var f in from) {
to[f] = from[f];
}
}
function isArray(obj) {
return '[object Array]' === Object.prototype.toString.call(obj);
}
function each(object, fn, context) {
if (object) {
var key, val, length, i = 0;
context = context || null;
if (!isArray(object)) {
for (key in object) {
// can not use hasOwnProperty
if (fn.call(context, object[key], key, object) === false) {
break;
}
}
} else {
length = object.length;
for (val = object[0]; i < length; val = object[++i]) {
if (fn.call(context, val, i, object) === false) {
break;
}
}
}
}
}
function inArray(item, arr) {
for (var i = 0, l = arr.length; i < l; i++) {
if (arr[i] === item) {
return true;
}
}
return false;
}
var Lexer = function Lexer(cfg) {
var self = this; /*
lex rules.
@type {Object[]}
@example
[
{
regexp:'\\w+',
state:['xx'],
token:'c',
// this => lex
action:function(){}
}
]
*/
/*
lex rules.
@type {Object[]}
@example
[
{
regexp:'\\w+',
state:['xx'],
token:'c',
// this => lex
action:function(){}
}
]
*/
self.rules = [];
mix(self, cfg); /*
Input languages
@type {String}
*/
/*
Input languages
@type {String}
*/
self.resetInput(self.input);
};
Lexer.prototype = {
'resetInput': function (input) {
mix(this, {
input: input,
matched: '',
stateStack: [Lexer.STATIC.INITIAL],
match: '',
text: '',
firstLine: 1,
lineNumber: 1,
lastLine: 1,
firstColumn: 1,
lastColumn: 1
});
},
'getCurrentRules': function () {
var self = this, currentState = self.stateStack[self.stateStack.length - 1], rules = []; //#JSCOVERAGE_IF
//#JSCOVERAGE_IF
if (self.mapState) {
currentState = self.mapState(currentState);
}
each(self.rules, function (r) {
var state = r.state || r[3];
if (!state) {
if (currentState === Lexer.STATIC.INITIAL) {
rules.push(r);
}
} else if (inArray(currentState, state)) {
rules.push(r);
}
});
return rules;
},
'pushState': function (state) {
this.stateStack.push(state);
},
'popState': function (num) {
num = num || 1;
var ret;
while (num--) {
ret = this.stateStack.pop();
}
return ret;
},
'showDebugInfo': function () {
var self = this, DEBUG_CONTEXT_LIMIT = Lexer.STATIC.DEBUG_CONTEXT_LIMIT, matched = self.matched, match = self.match, input = self.input;
matched = matched.slice(0, matched.length - match.length); //#JSCOVERAGE_IF 0
//#JSCOVERAGE_IF 0
var past = (matched.length > DEBUG_CONTEXT_LIMIT ? '...' : '') + matched.slice(0 - DEBUG_CONTEXT_LIMIT).replace(/\n/g, ' '), next = match + input; //#JSCOVERAGE_ENDIF
//#JSCOVERAGE_ENDIF
next = next.slice(0, DEBUG_CONTEXT_LIMIT).replace(/\n/g, ' ') + (next.length > DEBUG_CONTEXT_LIMIT ? '...' : '');
return past + next + '\n' + new Array(past.length + 1).join('-') + '^';
},
'mapSymbol': function mapSymbolForCodeGen(t) {
return this.symbolMap[t];
},
'mapReverseSymbol': function (rs) {
var self = this, symbolMap = self.symbolMap, i, reverseSymbolMap = self.reverseSymbolMap;
if (!reverseSymbolMap && symbolMap) {
reverseSymbolMap = self.reverseSymbolMap = {};
for (i in symbolMap) {
reverseSymbolMap[symbolMap[i]] = i;
}
} //#JSCOVERAGE_IF
//#JSCOVERAGE_IF
if (reverseSymbolMap) {
return reverseSymbolMap[rs];
} else {
return rs;
}
},
'lex': function () {
var self = this, input = self.input, i, rule, m, ret, lines, rules = self.getCurrentRules();
self.match = self.text = '';
if (!input) {
return self.mapSymbol(Lexer.STATIC.END_TAG);
}
for (i = 0; i < rules.length; i++) {
rule = rules[i]; //#JSCOVERAGE_IF 0
//#JSCOVERAGE_IF 0
var regexp = rule.regexp || rule[1], token = rule.token || rule[0], action = rule.action || rule[2] || undefined; //#JSCOVERAGE_ENDIF
//#JSCOVERAGE_ENDIF
if (m = input.match(regexp)) {
lines = m[0].match(/\n.*/g);
if (lines) {
self.lineNumber += lines.length;
}
mix(self, {
firstLine: self.lastLine,
lastLine: self.lineNumber,
firstColumn: self.lastColumn,
lastColumn: lines ? lines[lines.length - 1].length - 1 : self.lastColumn + m[0].length
});
var match; // for error report
// for error report
match = self.match = m[0]; // all matches
// all matches
self.matches = m; // may change by user
// may change by user
self.text = match; // matched content utils now
// matched content utils now
self.matched += match;
ret = action && action.call(self);
if (ret === undefined) {
ret = token;
} else {
ret = self.mapSymbol(ret);
}
input = input.slice(match.length);
self.input = input;
if (ret) {
return ret;
} else {
// ignore
return self.lex();
}
}
}
}
};
Lexer.STATIC = {
'INITIAL': 'I',
'DEBUG_CONTEXT_LIMIT': 20,
'END_TAG': '$EOF'
};
var lexer = new Lexer({
'rules': [
[
0,
/^[\s\S]*?(?={{)/,
function () {
var self = this, text = self.text, m, n = 0;
if (m = text.match(/\\+$/)) {
n = m[0].length;
}
if (n % 2) {
self.pushState('et');
text = text.slice(0, -1);
} else {
self.pushState('t');
}
if (n) {
text = text.replace(/\\+$/g, function (m) {
return new Array(m.length / 2 + 1).join('\\');
});
} // https://github.com/kissyteam/kissy/issues/330
// return even empty
// https://github.com/kissyteam/kissy/issues/330
// return even empty
self.text = text;
return 'CONTENT';
}
],
[
'b',
/^[\s\S]+/,
0
],
[
'b',
/^[\s\S]{2,}?(?:(?={{)|$)/,
function popState() {
this.popState();
},
['et']
],
[
'c',
/^{{{?(?:#|@)/,
function () {
var self = this, text = self.text;
if (text.length === 4) {
self.pushState('p');
} else {
self.pushState('e');
}
},
['t']
],
[
'd',
/^{{{?\//,
function () {
var self = this, text = self.text;
if (text.length === 4) {
self.pushState('p');
} else {
self.pushState('e');
}
},
['t']
],
[
'e',
/^{{\s*else\s*}}/,
function popState() {
this.popState();
},
['t']
],
[
0,
/^{{![\s\S]*?}}/,
function popState() {
this.popState();
},
['t']
],
[
'b',
/^{{%([\s\S]*?)%}}/,
function () {
// return to content mode
this.text = this.matches[1] || '';
this.popState();
},
['t']
],
[
'f',
/^{{{?/,
function () {
var self = this, text = self.text;
if (text.length === 3) {
self.pushState('p');
} else {
self.pushState('e');
}
},
['t']
],
[
0,
/^\s+/,
0,
[
'p',
'e'
]
],
[
'g',
/^,/,
0,
[
'p',
'e'
]
],
[
'h',
/^}}}/,
function () {
this.popState(2);
},
['p']
],
[
'h',
/^}}/,
function () {
this.popState(2);
},
['e']
],
[
'i',
/^\(/,
0,
[
'p',
'e'
]
],
[
'j',
/^\)/,
0,
[
'p',
'e'
]
],
[
'k',
/^\|\|/,
0,
[
'p',
'e'
]
],
[
'l',
/^&&/,
0,
[
'p',
'e'
]
],
[
'm',
/^===/,
0,
[
'p',
'e'
]
],
[
'n',
/^!==/,
0,
[
'p',
'e'
]
],
[
'o',
/^>=/,
0,
[
'p',
'e'
]
],
[
'p',
/^<=/,
0,
[
'p',
'e'
]
],
[
'q',
/^>/,
0,
[
'p',
'e'
]
],
[
'r',
/^</,
0,
[
'p',
'e'
]
],
[
's',
/^\+/,
0,
[
'p',
'e'
]
],
[
't',
/^-/,
0,
[
'p',
'e'
]
],
[
'u',
/^\*/,
0,
[
'p',
'e'
]
],
[
'v',
/^\//,
0,
[
'p',
'e'
]
],
[
'w',
/^%/,
0,
[
'p',
'e'
]
],
[
'x',
/^!/,
0,
[
'p',
'e'
]
],
[
'y',
/^"(\\[\s\S]|[^\\"\n])*"/,
function () {
this.text = this.text.slice(1, -1).replace(/\\"/g, '"');
},
[
'p',
'e'
]
],
[
'y',
/^'(\\[\s\S]|[^\\'\n])*'/,
function () {
this.text = this.text.slice(1, -1).replace(/\\'/g, '\'');
},
[
'p',
'e'
]
],
[
'z',
/^\d+(?:\.\d+)?(?:e-?\d+)?/i,
0,
[
'p',
'e'
]
],
[
'aa',
/^=/,
0,
[
'p',
'e'
]
],
[
'ab',
/^\.\./,
function () {
// wait for '/'
this.pushState('ws');
},
[
'p',
'e'
]
],
[
'ac',
/^\//,
function popState() {
this.popState();
},
['ws']
],
[
'ac',
/^\./,
0,
[
'p',
'e'
]
],
[
'ad',
/^\[/,
0,
[
'p',
'e'
]
],
[
'ae',
/^\]/,
0,
[
'p',
'e'
]
],
[
'af',
/^\{/,
0,
[
'p',
'e'
]
],
[
'ag',
/^\:/,
0,
[
'p',
'e'
]
],
[
'ah',
/^\}/,
0,
[
'p',
'e'
]
],
[
'ab',
/^[a-zA-Z_$][a-zA-Z0-9_$]*/,
0,
[
'p',
'e'
]
]
]
});
parser.lexer = lexer;
lexer.symbolMap = {
'$EOF': 'a',
'CONTENT': 'b',
'OPEN_BLOCK': 'c',
'OPEN_CLOSE_BLOCK': 'd',
'INVERSE': 'e',
'OPEN_TPL': 'f',
'COMMA': 'g',
'CLOSE': 'h',
'L_PAREN': 'i',
'R_PAREN': 'j',
'OR': 'k',
'AND': 'l',
'LOGIC_EQUALS': 'm',
'LOGIC_NOT_EQUALS': 'n',
'GE': 'o',
'LE': 'p',
'GT': 'q',
'LT': 'r',
'PLUS': 's',
'MINUS': 't',
'MULTIPLY': 'u',
'DIVIDE': 'v',
'MODULUS': 'w',
'NOT': 'x',
'STRING': 'y',
'NUMBER': 'z',
'EQUALS': 'aa',
'ID': 'ab',
'SEP': 'ac',
'L_BRACKET': 'ad',
'R_BRACKET': 'ae',
'L_BRACE': 'af',
'COLON': 'ag',
'R_BRACE': 'ah',
'$START': 'ai',
'program': 'aj',
'statements': 'ak',
'statement': 'al',
'function': 'am',
'id': 'an',
'expression': 'ao',
'params': 'ap',
'hash': 'aq',
'param': 'ar',
'conditionalOrExpression': 'as',
'listExpression': 'at',
'jsonExpression': 'au',
'jsonPart': 'av',
'conditionalAndExpression': 'aw',
'equalityExpression': 'ax',
'relationalExpression': 'ay',
'additiveExpression': 'az',
'multiplicativeExpression': 'ba',
'unaryExpression': 'bb',
'primaryExpression': 'bc',
'hashSegment': 'bd',
'idSegments': 'be'
};
parser.productions = [
[
'ai',
['aj']
],
[
'aj',
[
'ak',
'e',
'ak'
],
function () {
return new this.yy.ProgramNode({
line: this.lexer.firstLine,
col: this.lexer.firstColumn
}, this.$1, this.$3);
}
],
[
'aj',
['ak'],
function () {
return new this.yy.ProgramNode({
line: this.lexer.firstLine,
col: this.lexer.firstColumn
}, this.$1);
}
],
[
'ak',
['al'],
function () {
return [this.$1];
}
],
[
'ak',
[
'ak',
'al'
],
function () {
this.$1.push(this.$2);
}
],
[
'al',
[
'c',
'am',
'h',
'aj',
'd',
'an',
'h'
],
function () {
return new this.yy.BlockStatement({
line: this.lexer.firstLine,
col: this.lexer.firstColumn
}, this.$2, this.$4, this.$6, this.$1.length !== 4);
}
],
[
'al',
[
'f',
'ao',
'h'
],
function () {
return new this.yy.ExpressionStatement({
line: this.lexer.firstLine,
col: this.lexer.firstColumn
}, this.$2, this.$1.length !== 3);
}
],
[
'al',
['b'],
function () {
return new this.yy.ContentStatement({
line: this.lexer.firstLine,
col: this.lexer.firstColumn
}, this.$1);
}
],
[
'am',
[
'an',
'i',
'ap',
'g',
'aq',
'j'
],
function () {
return new this.yy.Function({
line: this.lexer.firstLine,
col: this.lexer.firstColumn
}, this.$1, this.$3, this.$5);
}
],
[
'am',
[
'an',
'i',
'ap',
'j'
],
function () {
return new this.yy.Function({
line: this.lexer.firstLine,
col: this.lexer.firstColumn
}, this.$1, this.$3);
}
],
[
'am',
[
'an',
'i',
'aq',
'j'
],
function () {
return new this.yy.Function({
line: this.lexer.firstLine,
col: this.lexer.firstColumn
}, this.$1, null, this.$3);
}
],
[
'am',
[
'an',
'i',
'j'
],
function () {
return new this.yy.Function({
line: this.lexer.firstLine,
col: this.lexer.firstColumn
}, this.$1);
}
],
[
'ap',
[
'ap',
'g',
'ar'
],
function () {
this.$1.push(this.$3);
}
],
[
'ap',
['ar'],
function () {
return [this.$1];
}
],
[
'ar',
['ao']
],
[
'ao',
['as']
],
[
'ao',
[
'ad',
'at',
'ae'
],
function () {
return new this.yy.ArrayExpression(this.$2);
}
],
[
'ao',
[
'af',
'au',
'ah'
],
function () {
return new this.yy.JsonExpression(this.$2);
}
],
[
'av',
[
'y',
'ag',
'ao'
],
function () {
return [
this.$1,
this.$3
];
}
],
[
'av',
[
'ab',
'ag',
'ao'
],
function () {
return [
this.$1,
this.$3
];
}
],
[
'au',
['av'],
function () {
return [this.$1];
}
],
[
'au',
[
'au',
'g',
'av'
],
function () {
this.$1.push(this.$3);
}
],
[
'at',
['ao'],
function () {
return [this.$1];
}
],
[
'at',
[
'at',
'g',
'ao'
],
function () {
this.$1.push(this.$3);
}
],
[
'as',
['aw']
],
[
'as',
[
'as',
'k',
'aw'
],
function () {
return new this.yy.ConditionalOrExpression(this.$1, this.$3);
}
],
[
'aw',
['ax']
],
[
'aw',
[
'aw',
'l',
'ax'
],
function () {
return new this.yy.ConditionalAndExpression(this.$1, this.$3);
}
],
[
'ax',
['ay']
],
[
'ax',
[
'ax',
'm',
'ay'
],
function () {
return new this.yy.EqualityExpression(this.$1, '===', this.$3);
}
],
[
'ax',
[
'ax',
'n',
'ay'
],
function () {
return new this.yy.EqualityExpression(this.$1, '!==', this.$3);
}
],
[
'ay',
['az']
],
[
'ay',
[
'ay',
'r',
'az'
],
function () {
return new this.yy.RelationalExpression(this.$1, '<', this.$3);
}
],
[
'ay',
[
'ay',
'q',
'az'
],
function () {
return new this.yy.RelationalExpression(this.$1, '>', this.$3);
}
],
[
'ay',
[
'ay',
'p',
'az'
],
function () {
return new this.yy.RelationalExpression(this.$1, '<=', this.$3);
}
],
[
'ay',
[
'ay',
'o',
'az'
],
function () {
return new this.yy.RelationalExpression(this.$1, '>=', this.$3);
}
],
[
'az',
['ba']
],
[
'az',
[
'az',
's',
'ba'
],
function () {
return new this.yy.AdditiveExpression(this.$1, '+', this.$3);
}
],
[
'az',
[
'az',
't',
'ba'
],
function () {
return new this.yy.AdditiveExpression(this.$1, '-', this.$3);
}
],
[
'ba',
['bb']
],
[
'ba',
[
'ba',
'u',
'bb'
],
function () {
return new this.yy.MultiplicativeExpression(this.$1, '*', this.$3);
}
],
[
'ba',
[
'ba',
'v',
'bb'
],
function () {
return new this.yy.MultiplicativeExpression(this.$1, '/', this.$3);
}
],
[
'ba',
[
'ba',
'w',
'bb'
],
function () {
return new this.yy.MultiplicativeExpression(this.$1, '%', this.$3);
}
],
[
'bb',
[
'x',
'bb'
],
function () {
return new this.yy.UnaryExpression(this.$1, this.$2);
}
],
[
'bb',
[
't',
'bb'
],
function () {
return new this.yy.UnaryExpression(this.$1, this.$2);
}
],
[
'bb',
['bc']
],
[
'bc',
['am']
],
[
'bc',
['y'],
function () {
return new this.yy.String({
line: this.lexer.firstLine,
col: this.lexer.firstColumn
}, this.$1);
}
],
[
'bc',
['z'],
function () {
return new this.yy.Number({
line: this.lexer.firstLine,
col: this.lexer.firstColumn
}, this.$1);
}
],
[
'bc',
['an']
],
[
'bc',
[
'i',
'ao',
'j'
],
function () {
return this.$2;
}
],
[
'aq',
[
'aq',
'g',
'bd'
],
function () {
var hash = this.$1, seg = this.$3;
hash.value[seg[0]] = seg[1];
}
],
[
'aq',
['bd'],
function () {
var hash = new this.yy.Hash({
line: this.lexer.firstLine,
col: this.lexer.firstColumn
}), $1 = this.$1;
hash.value[$1[0]] = $1[1];
return hash;
}
],
[
'bd',
[
'ab',
'aa',
'ao'
],
function () {
return [
this.$1,
this.$3
];
}
],
[
'an',
['be'],
function () {
return new this.yy.Id({
line: this.lexer.firstLine,
col: this.lexer.firstColumn
}, this.$1);
}
],
[
'be',
[
'be',
'ac',
'ab'
],
function () {
this.$1.push(this.$3);
}
],
[
'be',
[
'be',
'ad',
'ao',
'ae'
],
function () {
this.$1.push(this.$3);
}
],
[
'be',
['ab'],
function () {
return [this.$1];
}
]
];
parser.table = {
'gotos': {
'0': {
'aj': 4,
'ak': 5,
'al': 6
},
'2': {
'am': 8,
'an': 9,
'be': 10
},
'3': {
'am': 18,
'an': 19,
'ao': 20,
'as': 21,
'aw': 22,
'ax': 23,
'ay': 24,
'az': 25,
'ba': 26,
'bb': 27,
'bc': 28,
'be': 10
},
'5': { 'al': 30 },
'11': {
'am': 18,
'an': 19,
'ao': 35,
'as': 21,
'aw': 22,
'ax': 23,
'ay': 24,
'az': 25,
'ba': 26,
'bb': 27,
'bc': 28,
'be': 10
},
'12': {
'am': 18,
'an': 19,
'bb': 36,
'bc': 28,
'be': 10
},
'13': {
'am': 18,
'an': 19,
'bb': 37,
'bc': 28,
'be': 10
},
'16': {
'am': 18,
'an': 19,
'ao': 38,
'as': 21,
'at': 39,
'aw': 22,
'ax': 23,
'ay': 24,
'az': 25,
'ba': 26,
'bb': 27,
'bc': 28,
'be': 10
},
'17': {
'au': 42,
'av': 43
},
'29': {
'ak': 58,
'al': 6
},
'31': {
'aj': 59,
'ak': 5,
'al': 6
},
'32': {
'am': 18,
'an': 19,
'ao': 62,
'ap': 63,
'aq': 64,
'ar': 65,
'as': 21,
'aw': 22,
'ax': 23,
'ay': 24,
'az': 25,
'ba': 26,
'bb': 27,
'bc': 28,
'bd': 66,
'be': 10
},
'34': {
'am': 18,
'an': 19,
'ao': 68,
'as': 21,
'aw': 22,
'ax': 23,
'ay': 24,
'az': 25,
'ba': 26,
'bb': 27,
'bc': 28,
'be': 10
},
'45': {
'am': 18,
'an': 19,
'aw': 76,
'ax': 23,
'ay': 24,
'az': 25,
'ba': 26,
'bb': 27,
'bc': 28,
'be': 10
},
'46': {
'am': 18,
'an': 19,
'ax': 77,
'ay': 24,
'az': 25,
'ba': 26,
'bb': 27,
'bc': 28,
'be': 10
},
'47': {
'am': 18,
'an': 19,
'ay': 78,
'az': 25,
'ba': 26,
'bb': 27,
'bc': 28,
'be': 10
},
'48': {
'am': 18,
'an': 19,
'ay': 79,
'az': 25,
'ba': 26,
'bb': 27,
'bc': 28,
'be': 10
},
'49': {
'am': 18,
'an': 19,
'az': 80,
'ba': 26,
'bb': 27,
'bc': 28,
'be': 10
},
'50': {
'am': 18,
'an': 19,
'az': 81,
'ba': 26,
'bb': 27,
'bc': 28,
'be': 10
},
'51': {
'am': 18,
'an': 19,
'az': 82,
'ba': 26,
'bb': 27,
'bc': 28,
'be': 10
},
'52': {
'am': 18,
'an': 19,
'az': 83,
'ba': 26,
'bb': 27,
'bc': 28,
'be': 10
},
'53': {
'am': 18,
'an': 19,
'ba': 84,
'bb': 27,
'bc': 28,
'be': 10
},
'54': {
'am': 18,
'an': 19,
'ba': 85,
'bb': 27,
'bc': 28,
'be': 10
},
'55': {
'am': 18,
'an': 19,
'bb': 86,
'bc': 28,
'be': 10
},
'56': {
'am': 18,
'an': 19,
'bb': 87,
'bc': 28,
'be': 10
},
'57': {
'am': 18,
'an': 19,
'bb': 88,
'bc': 28,
'be': 10
},
'58': { 'al': 30 },
'70': {
'am': 18,
'an': 19,
'ao': 96,
'as': 21,
'aw': 22,
'ax': 23,
'ay': 24,
'az': 25,
'ba': 26,
'bb': 27,
'bc': 28,
'be': 10
},
'72': {
'am': 18,
'an': 19,
'ao': 97,
'as': 21,
'aw': 22,
'ax': 23,
'ay': 24,
'az': 25,
'ba': 26,
'bb': 27,
'bc': 28,
'be': 10
},
'73': {
'am': 18,
'an': 19,
'ao': 98,
'as': 21,
'aw': 22,
'ax': 23,
'ay': 24,
'az': 25,
'ba': 26,
'bb': 27,
'bc': 28,
'be': 10
},
'74': { 'av': 99 },
'89': {
'an': 100,
'be': 10
},
'90': {
'am': 18,
'an': 19,
'ao': 101,
'as': 21,
'aw': 22,
'ax': 23,
'ay': 24,
'az': 25,
'ba': 26,
'bb': 27,
'bc': 28,
'be': 10
},
'91': {
'am': 18,
'an': 19,
'ao': 62,
'aq': 102,
'ar': 103,
'as': 21,
'aw': 22,
'ax': 23,
'ay': 24,
'az': 25,
'ba': 26,
'bb': 27,
'bc': 28,
'bd': 66,
'be': 10
},
'93': { 'bd': 105 }
},
'action': {
'0': {
'b': [
1,
undefined,
1
],
'c': [
1,
undefined,
2
],
'f': [
1,
undefined,
3
]
},
'1': {
'a': [
2,
7
],
'e': [
2,
7
],
'c': [
2,
7
],
'f': [
2,
7
],
'b': [
2,
7
],
'd': [
2,
7
]
},
'2': {
'ab': [
1,
undefined,
7
]
},
'3': {
'i': [
1,
undefined,
11
],
't': [
1,
undefined,
12
],
'x': [
1,
undefined,
13
],
'y': [
1,
undefined,
14
],
'z': [
1,
undefined,
15
],
'ab': [
1,
undefined,
7
],
'ad': [
1,
undefined,
16
],
'af': [
1,
undefined,
17
]
},
'4': { 'a': [0] },
'5': {
'a': [
2,
2
],
'd': [
2,
2
],
'b': [
1,
undefined,
1
],
'c': [
1,
undefined,
2
],
'e': [
1,
undefined,
29
],
'f': [
1,
undefined,
3
]
},
'6': {
'a': [
2,
3
],
'e': [
2,
3
],
'c': [
2,
3
],
'f': [
2,
3
],
'b': [
2,
3
],
'd': [
2,
3
]
},
'7': {
'i': [
2,
57
],
'ac': [
2,
57
],
'ad': [
2,
57
],
'h': [
2,
57
],
'k': [
2,
57
],
'l': [
2,
57
],
'm': [
2,
57
],
'n': [
2,
57
],
'o': [
2,
57
],
'p': [
2,
57
],
'q': [
2,
57
],
'r': [
2,
57
],
's': [
2,
57
],
't': [
2,
57
],
'u': [
2,
57
],
'v': [
2,
57
],
'w': [
2,
57
],
'j': [
2,
57
],
'ae': [
2,
57
],
'g': [
2,
57
],
'ah': [
2,
57
]
},
'8': {
'h': [
1,
undefined,
31
]
},
'9': {
'i': [
1,
undefined,
32
]
},
'10': {
'i': [
2,
54
],
'h': [
2,
54
],
'k': [
2,
54
],
'l': [
2,
54
],
'm': [
2,
54
],
'n': [
2,
54
],
'o': [
2,
54
],
'p': [
2,
54
],
'q': [
2,
54
],
'r': [
2,
54
],
's': [
2,
54
],
't': [
2,
54
],
'u': [
2,
54
],
'v': [
2,
54
],
'w': [
2,
54
],
'j': [
2,
54
],
'ae': [
2,
54
],
'g': [
2,
54
],
'ah': [
2,
54
],
'ac': [
1,
undefined,
33
],
'ad': [
1,
undefined,
34
]
},
'11': {
'i': [
1,
undefined,
11
],
't': [
1,
undefined,
12
],
'x': [
1,
undefined,
13
],
'y': [
1,
undefined,
14
],
'z': [
1,
undefined,
15
],
'ab': [
1,
undefined,
7
],
'ad': [
1,
undefined,
16
],
'af': [
1,
undefined,
17
]
},
'12': {
'i': [
1,
undefined,
11
],
't': [
1,
undefined,
12
],
'x': [
1,
undefined,
13
],
'y': [
1,
undefined,
14
],
'z': [
1,
undefined,
15
],
'ab': [
1,
undefined,
7
]
},
'13': {
'i': [
1,
undefined,
11
],
't': [
1,
undefined,
12
],
'x': [
1,
undefined,
13
],
'y': [
1,
undefined,
14
],
'z': [
1,
undefined,
15
],
'ab': [
1,
undefined,
7
]
},
'14': {
'h': [
2,
47
],
'k': [
2,
47
],
'l': [
2,
47
],
'm': [
2,
47
],
'n': [
2,
47
],
'o': [
2,
47
],
'p': [
2,
47
],
'q': [
2,
47
],
'r': [
2,
47
],
's': [
2,
47
],
't': [
2,
47
],
'u': [
2,
47
],
'v': [
2,
47
],
'w': [
2,
47
],
'j': [
2,
47
],
'ae': [
2,
47
],
'g': [
2,
47
],
'ah': [
2,
47
]
},
'15': {
'h': [
2,
48
],
'k': [
2,
48
],
'l': [
2,
48
],
'm': [
2,
48
],
'n': [
2,
48
],
'o': [
2,
48
],
'p': [
2,
48
],
'q': [
2,
48
],
'r': [
2,
48
],
's': [
2,
48
],
't': [
2,
48
],
'u': [
2,
48
],
'v': [
2,
48
],
'w': [
2,
48
],
'j': [
2,
48
],
'ae': [
2,
48
],
'g': [
2,
48
],
'ah': [
2,
48
]
},
'16': {
'i': [
1,
undefined,
11
],
't': [
1,
undefined,
12
],
'x': [
1,
undefined,
13
],
'y': [
1,
undefined,
14
],
'z': [
1,
undefined,
15
],
'ab': [
1,
undefined,
7
],
'ad': [
1,
undefined,
16
],
'af': [
1,
undefined,
17
]
},
'17': {
'y': [
1,
undefined,
40
],
'ab': [
1,
undefined,
41
]
},
'18': {
'h': [
2,
46
],
'k': [
2,
46
],
'l': [
2,
46
],
'm': [
2,
46
],
'n': [
2,
46
],
'o': [
2,
46
],
'p': [
2,
46
],
'q': [
2,
46
],
'r': [
2,
46
],
's': [
2,
46
],
't': [
2,
46
],
'u': [
2,
46
],
'v': [
2,
46
],
'w': [
2,
46
],
'j': [
2,
46
],
'ae': [
2,
46
],
'g': [
2,
46
],
'ah': [
2,
46
]
},
'19': {
'h': [
2,
49
],
'k': [
2,
49
],
'l': [
2,
49
],
'm': [
2,
49
],
'n': [
2,
49
],
'o': [
2,
49
],
'p': [
2,
49
],
'q': [
2,
49
],
'r': [
2,
49
],
's': [
2,
49
],
't': [
2,
49
],
'u': [
2,
49
],
'v': [
2,
49
],
'w': [
2,
49
],
'j': [
2,
49
],
'ae': [
2,
49
],
'g': [
2,
49
],
'ah': [
2,
49
],
'i': [
1,
undefined,
32
]
},
'20': {
'h': [
1,
undefined,
44
]
},
'21': {
'h': [
2,
15
],
'j': [
2,
15
],
'ae': [
2,
15
],
'g': [
2,
15
],
'ah': [
2,
15
],
'k': [
1,
undefined,
45
]
},
'22': {
'h': [
2,
24
],
'k': [
2,
24
],
'j': [
2,
24
],
'ae': [
2,
24
],
'g': [
2,
24
],
'ah': [
2,
24