indickit 0.4.2 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -26,26 +26,31 @@ measured on data that its rules were never built on.
26
26
 
27
27
  ## Install
28
28
 
29
- Go:
29
+ Go 1.22 or later:
30
30
 
31
31
  ```sh
32
32
  go get github.com/micahchoo/indickit
33
33
  ```
34
34
 
35
- JavaScript or TypeScript, from GitHub (no npm account needed):
35
+ JavaScript or TypeScript, on Node 20 or later, Bun or Deno:
36
36
 
37
37
  ```sh
38
- npm install github:micahchoo/indickit#v0.4.2
39
- bun add github:micahchoo/indickit#v0.4.2
38
+ npm install indickit
39
+ bun add indickit
40
+ deno add npm:indickit
40
41
  ```
41
42
 
43
+ The package is ES modules only; `require()` works from Node 20.19. In
44
+ TypeScript, set `moduleResolution` to `nodenext` or `bundler`; the old
45
+ `node10` cannot find the four utilities.
46
+
42
47
  In a browser, with no build step:
43
48
 
44
49
  ```js
45
- import { normalize } from "https://cdn.jsdelivr.net/gh/micahchoo/indickit@v0.4.2/dist/normalize.js";
46
- import { stem } from "https://cdn.jsdelivr.net/gh/micahchoo/indickit@v0.4.2/dist/stem.js";
47
- import { match } from "https://cdn.jsdelivr.net/gh/micahchoo/indickit@v0.4.2/dist/phonetic.js";
48
- import { segment } from "https://cdn.jsdelivr.net/gh/micahchoo/indickit@v0.4.2/dist/segment.js";
50
+ import { normalize } from "https://cdn.jsdelivr.net/gh/micahchoo/indickit@v0.5.0/dist/normalize.js";
51
+ import { stem } from "https://cdn.jsdelivr.net/gh/micahchoo/indickit@v0.5.0/dist/stem.js";
52
+ import { match } from "https://cdn.jsdelivr.net/gh/micahchoo/indickit@v0.5.0/dist/phonetic.js";
53
+ import { segment } from "https://cdn.jsdelivr.net/gh/micahchoo/indickit@v0.5.0/dist/segment.js";
49
54
  ```
50
55
 
51
56
  Each utility is its own file, so a page loads only the rules it uses.
@@ -84,12 +89,16 @@ stem(normalize("حکومتوں", "ur"), "ur"); // "حکومت"
84
89
  ```
85
90
 
86
91
  In 13 languages, a search with stems finds 6–15 points more of the right
87
- sentences than an exact search. It also finds some wrong ones: a stem
88
- merges forms by their endings, not by their meaning.
92
+ sentences than an exact search. In a search engine over Wikipedia passages,
93
+ it finds 2–11.5 points more in 10 of 13 test sets, and nothing more in
94
+ Hindi or Punjabi. It also finds some wrong ones: a stem merges forms by
95
+ their endings, not by their meaning. Do not add fuzzy matching to stems:
96
+ together they find less than stems alone.
89
97
 
90
- Use `stem` or `fold`, not both: `fold` before `stem` loses 10 points in
91
- Assamese. `fold` alone merges accepted spellings of one word (हिन्दी and
92
- हिंदी) and keeps the word whole, for a search that must not merge forms:
98
+ You need only one of `stem` and `fold`. If you use both, stem first, then
99
+ fold: `fold` before `stem` loses 3–10 points in Assamese. `fold` alone
100
+ merges accepted spellings of one word (हिन्दी and हिंदी) and keeps the word
101
+ whole, for a search that must not merge forms:
93
102
 
94
103
  ```ts
95
104
  import { fold } from "indickit/normalize";
@@ -195,9 +204,9 @@ other tools tried and each weak spot are in `docs/`.
195
204
 
196
205
  | Utility | Result | Best other tool | Browser file | Details |
197
206
  |---|---|---|---|---|
198
- | `normalize` | makes 88.1% of look-alike spellings equal, and changes the look of no word | Indic NLP Library: 82.4%, and changes 0.68% of words | 13 KB | [docs/normalize.md](docs/normalize.md) |
207
+ | `normalize` | makes 88.1% of look-alike spellings equal, and changes the look of no word | Indic NLP Library: 82.4%, and changes 0.68% of words | 14 KB | [docs/normalize.md](docs/normalize.md) |
199
208
  | `stem` | finds 6–15 points more of the right sentences than exact search, in 13 languages | ahead in 5 languages, level in 2, a trade in 4, behind in Nepali | 3 KB | [docs/stem.md](docs/stem.md) |
200
- | `phonetic` | finds the right person 84% of the time, in 21 languages | romanize + Soundex: 23% in Tamil, 70% in Hindi; cannot read Urdu | 4 KB | [docs/phonetic.md](docs/phonetic.md) |
209
+ | `phonetic` | finds the right person 84% of the time, in 21 languages, on clean names; 42% on a real roster as written (70% with titles and initials removed) | romanize + Soundex: 23% in Tamil, 70% in Hindi; cannot read Urdu | 4 KB | [docs/phonetic.md](docs/phonetic.md) |
201
210
  | `segment` | cuts 0.05% of Kannada words wrongly | `Intl.Segmenter`: 50.3% | 9 KB | [docs/segment.md](docs/segment.md) |
202
211
 
203
212
  (Browser files are gzipped.)
@@ -206,13 +215,33 @@ other tools tried and each weak spot are in `docs/`.
206
215
 
207
216
  - **Only HarfBuzz was tested** for "looks the same" (`normalize`,
208
217
  `segment`). Windows and Apple draw text with their own engines.
218
+ - **`phonetic` expects clean names.** Remove titles (Shri, Smt.) and
219
+ initials before you key a name. On one-word place names it returns many
220
+ wrong matches. See [docs/phonetic.md](docs/phonetic.md).
209
221
  - **Tamil is the weakest language** for `phonetic` (76%), and `stem` is
210
222
  behind Snowball's recall in Tamil.
223
+ - **`stem` does not help passage search in Hindi or Punjabi.** Short
224
+ question words merge with other words (ਕਿਸ "which" with ਕਿਸਾਨ "farmer"),
225
+ and names lose their ends (सीता → सी). In Hindi, Lucene's analyzer finds
226
+ 4.8 points more, from its spelling folds. See [docs/stem.md](docs/stem.md).
227
+ - **An n-gram field can find more than `stem`** in passage search: in
228
+ Malayalam, Kannada, Tamil, Bengali, Marathi and Hindi, indexing each
229
+ word's three-letter pieces found 3–10 points more, at 2–3 times the
230
+ index size. See [docs/stem.md](docs/stem.md#in-a-search-engine).
211
231
  - **Some languages have no table.** `stem` covers 13 languages; Bodo,
212
232
  Dogri, Kashmiri, Konkani, Maithili, Manipuri, Odia, Santali and Sindhi
213
233
  are not among them.
214
234
  - **Go reads invalid UTF-8 as U+FFFD**, so for such input the output does
215
235
  not join back into the original bytes.
236
+ - **"The same output" holds inside the blocks indickit reads.** Go reads
237
+ Unicode 15.0; TypeScript reads the Unicode data of its host (node 24:
238
+ 17.0). A newer mark outside those blocks can give another output: "Ram"
239
+ plus U+0897 has the key `rn` in TypeScript and none in Go. A test checks
240
+ the blocks (`unicode_test.go`, `js/regression.test.ts`).
241
+ - **Two promises have a scope.** `normalize` twice gives what `normalize`
242
+ once gives for text with at most 8 invisible characters; 9 BOMs before
243
+ ૰ need a second call. `normalize` changes no `phonetic` key of a word
244
+ with no invisible character; with one, it can (فاطمہ + ZWNJ).
216
245
 
217
246
  Each utility's own weak spots are at the end of its file in `docs/`.
218
247
 
package/dist/normalize.js CHANGED
@@ -1,6 +1,6 @@
1
1
  // normalize/rules.json
2
2
  var rules_default = {
3
- version: "2026-10-05",
3
+ version: "2026-10-07",
4
4
  max_passes: 8,
5
5
  chillu: { map: { ണ: "ൺ", ന: "ൻ", ര: "ർ", ല: "ൽ", ള: "ൾ", ക: "ൿ" }, virama: "്", joiner: "‍", not_before: "റ" },
6
6
  ra: { virama: "্", assamese: "ৰ", bengali: "র", assamese_langs: ["as"] },
@@ -11,12 +11,26 @@ var rules_default = {
11
11
  classes: [[1536, 1541, "U"], [1544, 1544, "U"], [1547, 1547, "U"], [1552, 1562, "M"], [1568, 1568, "A"], [1569, 1569, "U"], [1570, 1573, "R"], [1574, 1574, "A"], [1575, 1575, "R"], [1576, 1576, "A"], [1577, 1577, "R"], [1578, 1582, "A"], [1583, 1586, "R"], [1587, 1599, "A"], [1600, 1600, "K"], [1601, 1607, "A"], [1608, 1608, "R"], [1609, 1610, "A"], [1611, 1631, "M"], [1646, 1647, "A"], [1648, 1648, "M"], [1649, 1651, "R"], [1652, 1652, "U"], [1653, 1655, "R"], [1656, 1671, "A"], [1672, 1689, "R"], [1690, 1727, "A"], [1728, 1728, "R"], [1729, 1730, "A"], [1731, 1739, "R"], [1740, 1740, "A"], [1741, 1741, "R"], [1742, 1742, "A"], [1743, 1743, "R"], [1744, 1745, "A"], [1746, 1747, "R"], [1749, 1749, "R"], [1750, 1756, "M"], [1757, 1757, "U"], [1759, 1764, "M"], [1767, 1768, "M"], [1770, 1773, "M"], [1774, 1775, "R"], [1786, 1788, "A"], [1791, 1791, "A"], [1872, 1880, "A"], [1881, 1883, "R"], [1884, 1898, "A"], [1899, 1900, "R"], [1901, 1904, "A"], [1905, 1905, "R"], [1906, 1906, "A"], [1907, 1908, "R"], [1909, 1911, "A"], [1912, 1913, "R"], [1914, 1919, "A"], [2304, 2307, "B"], [2308, 2324, "I"], [2325, 2361, "C"], [2362, 2363, "M"], [2364, 2364, "N"], [2366, 2380, "M"], [2381, 2381, "V"], [2382, 2383, "M"], [2389, 2391, "M"], [2392, 2399, "C"], [2400, 2401, "I"], [2402, 2403, "M"], [2418, 2423, "I"], [2424, 2431, "C"], [2433, 2435, "B"], [2437, 2444, "I"], [2447, 2448, "I"], [2451, 2452, "I"], [2453, 2472, "C"], [2474, 2480, "C"], [2482, 2482, "C"], [2486, 2489, "C"], [2492, 2492, "N"], [2494, 2500, "M"], [2503, 2504, "M"], [2507, 2508, "M"], [2509, 2509, "V"], [2510, 2510, "D"], [2519, 2519, "M"], [2524, 2525, "C"], [2527, 2527, "C"], [2528, 2529, "I"], [2530, 2531, "M"], [2544, 2545, "C"], [2556, 2556, "B"], [2561, 2563, "B"], [2565, 2570, "I"], [2575, 2576, "I"], [2579, 2580, "I"], [2581, 2600, "C"], [2602, 2608, "C"], [2610, 2611, "C"], [2613, 2614, "C"], [2616, 2617, "C"], [2620, 2620, "N"], [2622, 2626, "M"], [2631, 2632, "M"], [2635, 2636, "M"], [2637, 2637, "V"], [2649, 2652, "C"], [2654, 2654, "C"], [2672, 2672, "B"], [2689, 2691, "B"], [2693, 2701, "I"], [2703, 2705, "I"], [2707, 2708, "I"], [2709, 2728, "C"], [2730, 2736, "C"], [2738, 2739, "C"], [2741, 2745, "C"], [2748, 2748, "N"], [2750, 2757, "M"], [2759, 2761, "M"], [2763, 2764, "M"], [2765, 2765, "V"], [2784, 2785, "I"], [2786, 2787, "M"], [2809, 2809, "C"], [2813, 2815, "N"], [2817, 2819, "B"], [2821, 2828, "I"], [2831, 2832, "I"], [2835, 2836, "I"], [2837, 2856, "C"], [2858, 2864, "C"], [2866, 2867, "C"], [2869, 2873, "C"], [2876, 2876, "N"], [2878, 2884, "M"], [2887, 2888, "M"], [2891, 2892, "M"], [2893, 2893, "V"], [2901, 2903, "M"], [2908, 2909, "C"], [2911, 2911, "C"], [2912, 2913, "I"], [2914, 2915, "M"], [2929, 2929, "C"], [2946, 2946, "B"], [2949, 2954, "I"], [2958, 2960, "I"], [2962, 2964, "I"], [2965, 2965, "C"], [2969, 2970, "C"], [2972, 2972, "C"], [2974, 2975, "C"], [2979, 2980, "C"], [2984, 2986, "C"], [2990, 3001, "C"], [3006, 3010, "M"], [3014, 3016, "M"], [3018, 3020, "M"], [3021, 3021, "V"], [3031, 3031, "M"], [3072, 3076, "B"], [3077, 3084, "I"], [3086, 3088, "I"], [3090, 3092, "I"], [3093, 3112, "C"], [3114, 3129, "C"], [3132, 3132, "N"], [3134, 3140, "M"], [3142, 3144, "M"], [3146, 3148, "M"], [3149, 3149, "V"], [3157, 3158, "M"], [3160, 3162, "C"], [3165, 3165, "D"], [3168, 3169, "I"], [3170, 3171, "M"], [3200, 3203, "B"], [3205, 3212, "I"], [3214, 3216, "I"], [3218, 3220, "I"], [3221, 3240, "C"], [3242, 3251, "C"], [3253, 3257, "C"], [3260, 3260, "N"], [3262, 3268, "M"], [3270, 3272, "M"], [3274, 3276, "M"], [3277, 3277, "V"], [3285, 3286, "M"], [3293, 3293, "D"], [3294, 3294, "C"], [3296, 3297, "I"], [3298, 3299, "M"], [3315, 3315, "B"], [3328, 3332, "B"], [3333, 3340, "I"], [3342, 3344, "I"], [3346, 3348, "I"], [3349, 3386, "C"], [3387, 3388, "V"], [3390, 3396, "M"], [3398, 3400, "M"], [3402, 3404, "M"], [3405, 3405, "V"], [3412, 3414, "D"], [3415, 3415, "M"], [3423, 3425, "I"], [3426, 3427, "M"], [3450, 3455, "D"], [7258, 7287, "C"], [7288, 7293, "B"], [43250, 43251, "B"], [43262, 43262, "I"], [43263, 43263, "M"], [43744, 43745, "I"], [43746, 43754, "C"], [43755, 43759, "M"], [43765, 43765, "B"], [43766, 43766, "V"], [43968, 43981, "C"], [43982, 43983, "I"], [43984, 43984, "C"], [43985, 43985, "I"], [43986, 43994, "C"], [44003, 44010, "M"], [44013, 44013, "V"], [64336, 64433, "U"], [64467, 64829, "U"], [64848, 64911, "U"], [64914, 64967, "U"], [65008, 65019, "U"], [65136, 65140, "U"], [65142, 65276, "U"]],
12
12
  features: ["script", "char", "left1", "left2", "left3", "right1", "right2", "right3"],
13
13
  tree: [0, { b: [7, { $: [6, { $: [2, { "?": [5, { "$?KUjns": 1 }], A: [1, { fw: [5, { $: [3, { AKU: 1 }], "?AKRUjns": 1 }], h: [5, { $: [3, { AKU: 1 }], "?AKUjns": 1, R: [4, { "?AMR^s": 1 }] }], j: [5, { Kj: 1 }], n: [5, { $: [3, { AKU: 1 }], "?Uns": 1, M: [4, { "MR^": 1 }] }], s: [5, { $: [3, { AKU: 1 }], "?AKRUjns": 1, M: [4, { "MR^": 1 }] }] }], K: [5, { $Ujns: 1, AR: [1, { fhsw: 1 }] }], U: [5, { "$?jns": 1, AR: [1, { fhnsw: 1 }], M: [1, { ns: 1 }] }], j: [1, { fhjsw: 1, n: [5, { $: [4, { "?AKMRUjn": 1 }], "?MUjns": 1, K: [3, { A: 1 }] }] }], n: [1, { fhw: [5, { "$?AKRUjns": 1 }], j: [5, { $: [4, { "?AKMRUjn": 1 }], "?KUjns": 1 }], ns: 1 }], s: [1, { fhw: [5, { "$?AKRUjns": 1 }], j: [5, { $: [3, { "?KUjn": 1 }], "?": [3, { "?R": 1 }], Kj: 1, U: [3, { R: 1 }] }], n: [5, { "$?Uns": 1, A: [3, { RU: 1 }], M: [3, { AUn: 1 }], R: [3, { R: 1 }] }], s: 1 }], M: [3, { A: [1, { fhsw: [5, { "$?ARjns": 1 }], j: [5, { j: 1 }], n: [5, { "$?ns": 1 }] }], M: [4, { A: [1, { fhsw: 1 }], M: [5, { $jns: 1 }], R: [1, { fhnsw: 1 }], "U^": 1 }], R: [5, { "$?Ujns": 1, AR: [1, { fhnsw: 1 }] }], U: [5, { "$?jns": 1 }], n: 1, "^": [5, { $hjns: 1 }] }], R: [5, { $s: [3, { AKMRUn: 1 }], AR: [1, { fhnsw: 1 }], "?KUjn": 1, M: [1, { n: [3, { A: 1 }], s: 1 }] }], h: 1, "^": [1, { fhnsw: 1 }] }], "?": [2, { "?^": 1, j: [1, { fhjsw: 1, n: [5, { "?M": 1 }] }], n: [1, { fhw: [5, { "?AR": 1 }], j: [5, { "?": 1 }], ns: 1 }], s: [1, { fhw: [5, { "?AR": 1 }], j: [3, { "?": 1 }], n: [3, { "?R": 1, A: [5, { M: 1 }] }], s: 1 }], A: [1, { fhw: [5, { ARjns: 1 }], j: [5, { R: [3, { A: 1 }], j: 1 }], n: [5, { Mns: 1 }], s: 1 }], M: [3, { A: [1, { fhsw: [5, { jns: 1 }], j: [5, { j: 1 }], n: [5, { ns: 1 }] }], M: [1, { fhsw: 1 }], R: [5, { jns: 1 }], U: 1 }], R: [5, { AR: [1, { fhnsw: 1 }], Ujns: 1, M: [1, { ns: 1 }] }], U: [5, { jns: 1 }] }], A: [5, { "?": 1, j: [1, { fhjsw: 1, n: [2, { KRUn: 1, M: [3, { R: 1 }] }] }], n: [1, { fhnsw: 1, j: [2, { KRUjn: 1, M: [3, { R: 1 }] }] }], s: [1, { fhsw: 1, n: [2, { RUn: 1, M: [3, { R: 1 }] }] }], R: [1, { fsw: 1, h: [3, { "?KMRU^fjn": 1, A: [2, { KMRjn: 1 }] }], j: [2, { j: 1 }], n: [2, { Rn: 1, Ms: [3, { R: 1 }] }] }], A: [1, { fhsw: 1, j: [2, { A: [3, { U: 1 }], j: 1 }], n: [2, { RUn: 1, s: [3, { Rn: 1 }], M: [3, { R: 1 }] }] }], K: [1, { fhsw: 1, jn: [2, { jn: 1 }] }], M: [1, { s: [2, { ARjns: 1 }], n: [2, { Rn: 1 }], fhjw: [2, { j: 1 }] }], U: [1, { fhnsw: 1, j: [2, { Rjn: 1, s: [3, { R: 1 }] }] }] }], U: [1, { fhw: [5, { "?AKRjns": 1 }], j: [2, { "?K^j": 1, s: [5, { K: 1 }], A: [5, { j: 1 }], R: [5, { jns: 1 }], M: [4, { A: 1 }] }], n: [2, { "?KR^n": 1, j: [5, { K: 1 }], Ms: [3, { R: 1 }], A: [5, { ns: 1 }] }], s: 1 }], K: [1, { fhsw: 1, j: [5, { "?Kjs": 1, n: [3, { "?": 1 }], A: [2, { Aj: 1 }] }], n: [2, { "?^n": 1, A: [5, { n: 1 }] }] }], R: [1, { fw: [5, { AKRUjns: 1, M: [2, { j: 1 }] }], h: [5, { AKUjn: 1, s: [4, { "?KMR^n": 1, A: [3, { AKM: 1 }] }], M: [2, { j: 1 }], R: [3, { "AMR^jn": 1, K: [4, { K: 1 }] }] }], n: [2, { "U^n": 1, A: [5, { n: 1 }], M: [5, { n: 1, ARjs: [3, { R: 1 }] }], R: [5, { ARjns: 1, M: [3, { MR: 1 }] }], s: [3, { R: [5, { AR: 1 }], "U^n": 1 }], K: [5, { jn: 1 }], j: [5, { KU: 1 }] }], s: [5, { AKRUjns: 1, M: [2, { Ajns: 1, R: [3, { AMR: 1 }] }] }], j: [2, { A: [5, { j: 1 }], M: [5, { j: 1, n: [3, { R: 1 }] }], j: 1, KRU: [5, { jn: 1 }], n: [5, { KU: 1 }] }] }], M: [1, { fw: [5, { ARUj: 1, Mn: [2, { j: 1 }] }], h: [5, { AUj: 1, R: [2, { A: [4, { "MR^": 1 }], KMRjn: 1, s: [3, { KMR: 1 }] }], Mn: [2, { j: 1 }] }], j: [5, { A: [2, { A: [3, { A: 1 }], j: 1 }], j: 1, MRn: [2, { j: 1 }], U: [2, { Rjn: 1, Ms: [3, { R: 1 }] }] }], s: [5, { ARUjns: 1, M: [2, { ARjns: 1 }] }], n: [5, { M: [2, { Ajn: 1, Rs: [3, { A: 1 }] }], Un: 1, s: [2, { A: [4, { "MR^": 1 }], Un: 1 }], AR: [2, { Rn: 1, Ms: [3, { R: 1 }] }], j: [2, { RUn: 1, M: [3, { R: 1 }] }] }] }], j: [1, { fhsw: 1, j: [5, { A: [2, { Aj: 1 }], js: 1 }], n: [2, { A: [5, { n: 1 }], Rn: 1 }] }], n: [1, { fw: [5, { AKRjns: 1, M: [2, { j: 1 }] }], h: [5, { AKjns: 1, R: [2, { Ajn: 1 }], M: [2, { j: 1 }] }], j: [5, { Kj: 1, AMR: [2, { j: 1 }], ns: [2, { R: 1 }] }], n: [2, { AM: [5, { ns: 1 }], KRn: 1, j: [3, { j: 1 }], s: [3, { R: 1 }] }], s: 1 }], s: [1, { fhsw: 1, j: [2, { A: [5, { j: 1 }], R: [5, { jns: 1 }], j: 1 }], n: [2, { A: [5, { ns: 1 }], Rn: 1 }] }], h: 1 }], R: [1, { fw: [5, { "?ARUhj": 1, n: [6, { "?AKRUjn": 1 }], s: [6, { "?AKRUjns": 1 }], K: [6, { AKR: 1 }], M: [2, { j: 1 }] }], h: [5, { "?AUhj": 1, n: [6, { "?AKRUjn": 1 }], s: [6, { "?AKUjns": 1, R: [4, { "?AKMR^n": 1 }] }], R: [3, { A: [4, { "?AKMUhjs": 1, R: [2, { ARjns: 1 }], "^": [2, { AMRjn: 1 }], n: [6, { A: 1 }] }], "?KMRUjns": 1, "^": [2, { "R^jns": 1 }] }], K: [6, { AKR: 1 }], M: [2, { j: 1 }] }], j: [5, { "?": [3, { "?R^": 1 }], U: [2, { Rjn: 1, s: [3, { R: 1 }] }], j: 1, n: [2, { "?^j": 1, U: [6, { A: 1 }], R: [6, { "?ARU": 1 }], K: [6, { AKR: 1 }], n: [6, { AR: 1 }], M: [3, { K: 1, R: [6, { AR: 1 }] }], s: [3, { "^s": 1 }] }], R: [2, { A: [3, { K: 1 }], j: 1 }], s: [2, { A: [3, { A: [4, { K: 1 }] }], R: [6, { "?U": 1 }], j: 1 }], AM: [2, { j: 1 }], K: [2, { A: [3, { A: 1 }], j: 1, n: [6, { AKR: 1 }], s: [3, { A: [4, { K: 1 }] }] }] }], n: [5, { "?Un": 1, j: [2, { "?KRU^jn": 1, M: [3, { KR: 1 }], s: [4, { "^": 1 }] }], s: [2, { "?U^ns": 1, R: [6, { "?ARU": 1, M: [3, { M: 1 }] }], A: [6, { "?n": 1 }], M: [6, { n: 1, AR: [3, { R: 1 }] }] }], A: [2, { "?RUn": 1, s: [3, { "?RUns": 1, M: [4, { R: 1 }] }], M: [3, { R: 1 }] }], R: [2, { "?R^n": 1, s: [3, { "?R^ns": 1, M: [4, { R: 1 }] }], M: [3, { R: 1 }] }], M: [2, { A: [6, { n: 1 }], R: [3, { "A^": 1, M: [4, { R: 1 }], R: [4, { "^": 1 }] }], j: [6, { Kn: 1 }], n: 1, s: [6, { n: 1, MR: [3, { R: 1 }] }] }], K: [2, { jn: 1 }] }], s: [5, { "?AKRUhjns": 1, M: [2, { AKjns: 1, R: [4, { "AR^": 1 }] }] }] }], A: [1, { fw: [5, { "?ARUfj": 1, ns: [6, { "?AKRUjns": 1 }], K: [6, { AKR: 1, M: [2, { j: 1 }] }], M: [2, { "^j": 1, ns: [3, { "^": 1 }] }] }], h: [5, { "?AUfj": 1, n: [6, { "?AKRUjns": 1 }], s: [6, { "?AKUjns": 1, R: [3, { "?AKMU^jns": 1, R: [4, { "AM^": 1 }] }] }], R: [3, { A: [2, { A: [6, { ARU: 1 }], KRjn: 1, s: [4, { "AMR^": 1 }], M: [4, { "AM^": 1 }] }], "?KMRU^fjns": 1 }], K: [6, { AKR: 1, M: [2, { j: 1 }] }], M: [2, { "^j": 1, ns: [3, { "^": 1 }] }] }], j: [5, { "?": [2, { "?Rjn": 1, s: [3, { "?": 1 }] }], U: [3, { "?MR^": 1, A: [2, { Rj: 1 }] }], j: 1, n: [2, { "?j": 1, U: [6, { A: 1 }], R: [6, { "?ARUn": 1 }], K: [6, { AKR: 1 }], n: [6, { AR: 1 }], M: [3, { K: [4, { K: 1 }], R: [6, { AR: 1 }], U: 1 }], s: [3, { "^s": 1 }] }], s: [2, { "?": [3, { "?": 1 }], A: [3, { U: [6, { A: 1 }], j: 1 }], M: [3, { K: [4, { K: 1 }] }], R: [6, { "?Un": 1 }], j: 1 }], A: [2, { j: 1, s: [3, { K: [4, { M: 1 }], j: 1 }], A: [3, { U: 1 }] }], R: [2, { A: [3, { A: [4, { M: 1 }] }], j: 1 }], K: [2, { A: [3, { A: [6, { R: 1 }] }], j: 1, n: [6, { AKR: 1 }] }], M: [2, { j: 1 }] }], n: [5, { "?Un": 1, A: [2, { "?U^n": 1, s: [3, { "?U^ns": 1, R: [4, { "AKMR^": 1 }], M: [4, { R: 1 }] }], R: [3, { "AKMR^": 1, n: [6, { R: 1 }] }], M: [3, { R: 1 }] }], j: [2, { "?KRUjn": 1, M: [3, { "KRU^": 1 }], s: [3, { "R^s": 1 }] }], s: [2, { "?U^n": 1, R: [6, { "?RUn": 1, A: [3, { AKMRn: 1 }] }], A: [6, { "?Un": 1 }], M: [6, { n: 1, AR: [3, { R: 1 }] }], s: [3, { "^s": 1 }] }], R: [2, { "?R^n": 1, s: [3, { "?R^ns": 1, M: [4, { R: 1 }] }], M: [3, { R: 1 }] }], M: [2, { A: [6, { n: 1 }], "U^n": 1, j: [6, { Kn: 1 }], s: [3, { A: [6, { n: 1 }], R: [4, { AR: 1 }], "U^": 1 }], R: [4, { R: [3, { A: 1 }], "^": 1 }] }], K: [2, { jn: 1 }] }], s: [5, { "?AKRUfjns": 1, M: [2, { A: [4, { "AR^": 1, M: [6, { AR: 1 }] }], "KU^jns": 1, R: [3, { "AM^": 1, R: [6, { R: 1 }] }] }] }] }], "?": [1, { fhw: [5, { "?ARUj": 1, ns: [6, { "?AR": 1 }], M: [2, { j: 1 }] }], j: [2, { "?j": 1, n: [5, { "?": 1 }], s: [3, { "?": 1 }], A: [5, { R: [3, { A: [4, { "A^": 1 }] }], j: 1 }], M: [5, { j: 1 }], R: [5, { "?Uj": 1, n: [6, { "?AR": 1 }], s: [6, { "?": 1 }] }], "^": [6, { "?": 1 }] }], n: [2, { "?RU^n": 1, j: [5, { "?": 1 }], s: [3, { "?R^": 1, M: [4, { R: 1 }] }], A: [5, { n: 1, s: [6, { "?M": 1 }] }], M: [3, { A: [5, { n: 1 }], R: 1 }] }], s: 1 }], U: [1, { f: [5, { "?AKRj": 1, ns: [6, { AR: 1 }], M: [2, { j: 1 }] }], h: [5, { "?AKj": 1, n: [6, { AR: 1 }], s: [6, { AKR: 1 }], R: [6, { AR: 1, M: [2, { jn: 1 }] }], M: [2, { j: 1 }] }], j: [5, { "?j": 1, n: [2, { R: [6, { AR: 1 }], K: 1, M: [3, { R: 1 }] }], AM: [2, { j: 1 }], R: [2, { A: [3, { A: [4, { "^": 1 }] }], j: 1, s: [3, { A: [4, { A: 1 }] }] }], K: [2, { jn: 1 }] }], n: [2, { "?^n": 1, j: [5, { K: 1 }], s: [3, { "R^": 1 }], A: [5, { n: 1, s: [6, { M: 1 }] }], R: [3, { "AKR^": 1, M: [6, { AR: 1 }] }], K: [5, { jn: 1 }], M: [3, { R: 1, A: [5, { n: 1 }] }] }], s: 1, w: [5, { "?AKRj": 1, n: [6, { AKR: 1 }], s: [6, { AR: 1 }], M: [2, { j: 1 }] }] }], M: [5, { j: [1, { fhjsw: 1, n: [2, { K: [6, { AR: 1 }], "R^n": 1, M: [3, { R: 1, M: [4, { R: 1 }] }] }] }], n: [1, { fhw: [6, { ARU: 1 }], ns: 1, j: [2, { K: [6, { AR: 1 }], R: [6, { ARU: 1 }], "^jn": 1, M: [3, { R: [6, { ARU: 1 }] }] }] }], s: [1, { fw: [6, { ARU: 1 }], h: [6, { AU: 1, R: [2, { AKR: 1, M: [3, { MR: 1 }] }] }], j: [2, { M: [3, { R: [6, { U: 1 }] }], R: [6, { U: 1 }] }], s: 1, n: [6, { M: [2, { R: [4, { "^": 1 }] }], Un: 1, A: [2, { Rn: 1, M: [3, { R: 1 }] }], R: [2, { R: 1, M: [3, { R: 1 }] }] }] }], A: [1, { f: [6, { AKRUn: 1, M: [2, { A: [3, { A: 1 }], MRjn: 1, s: [4, { "AR^": 1 }] }] }], hw: [6, { AKRU: 1, M: [2, { A: [3, { A: 1 }], MRjn: 1, s: [4, { "AR^": 1 }] }], n: [2, { jn: 1 }] }], j: [2, { j: 1, s: [3, { A: [6, { K: 1 }] }], A: [3, { A: [4, { M: 1 }] }] }], s: 1, n: [2, { "R^n": 1, M: [3, { R: 1 }], s: [3, { "R^": 1, M: [4, { R: 1 }] }] }] }], K: [2, { AK: [1, { s: 1 }], Ms: [1, { fhw: [6, { AR: 1 }], s: 1 }], j: 1, n: [6, { AR: 1, K: [1, { ns: 1 }] }] }], R: [1, { fsw: 1, h: [2, { A: [6, { ARU: 1 }], M: [3, { AR: 1 }], "R^jn": 1, s: [3, { A: [4, { AR: 1 }], "MR^": 1 }] }], j: [2, { A: [3, { A: [6, { U: 1 }], M: [4, { A: 1 }] }], j: 1 }], n: [2, { "R^n": 1, M: [3, { R: 1 }], s: [3, { "R^": 1, M: [4, { R: 1 }] }] }] }], M: [1, { s: [2, { ARjns: 1 }], n: [2, { R: [3, { A: [4, { A: 1 }], M: [6, { A: 1 }], R: [4, { "^": 1 }], "^": 1 }], j: [6, { Un: 1, M: [3, { M: 1 }] }], n: 1, s: [6, { n: 1, R: [3, { R: 1 }] }] }], fhjw: [2, { j: 1 }] }], U: [1, { fhnsw: 1 }], "?": 1, f: [1, { fhsw: 1 }] }], n: [1, { fw: [5, { "?ARUj": 1, ns: [6, { AR: 1 }], M: [2, { j: 1 }] }], h: [5, { "?AUj": 1, R: [2, { A: [6, { A: 1 }], Rjns: 1 }], ns: [6, { AR: 1 }], M: [2, { j: 1 }] }], j: [5, { "?Uj": 1, n: [2, { Rj: 1 }], AMR: [2, { j: 1 }] }], n: [5, { "?Un": 1, s: [2, { A: [6, { M: 1 }], R: [6, { AR: 1 }] }], A: [2, { Rn: 1, Ms: [3, { R: 1 }] }], R: [2, { Rn: 1, s: [3, { R: 1 }] }], j: [2, { Rn: 1 }], M: [6, { M: 1 }] }], s: 1 }], K: [1, { fhw: [5, { "?ARUj": 1, K: [6, { K: [3, { A: [4, { "AK^": 1 }], "KM^": 1 }], A: 1, M: [2, { j: 1 }] }], ns: [6, { A: 1, K: [4, { A: [2, { A: 1 }], K: 1, "^": [2, { K: 1 }] }] }], M: [2, { j: 1 }] }], j: [5, { A: [2, { A: [3, { A: 1 }], K: [4, { K: 1 }], Mj: 1 }], K: [2, { A: [3, { A: [6, { K: 1 }] }], Mj: 1, n: [6, { A: 1, K: [4, { "K^": 1 }] }], s: [3, { M: 1 }] }], MR: [2, { j: 1 }], "?Uj": 1, s: [2, { K: [3, { M: 1 }] }], n: [2, { K: [6, { A: 1, K: [4, { "K^": 1 }] }], "R^": 1 }] }], n: [2, { A: [5, { n: 1 }], K: [5, { j: [3, { AKM: 1 }], n: 1 }], "?RU^n": 1, j: [3, { AM: [5, { K: 1 }], K: [6, { M: 1 }] }], M: [3, { R: 1 }], s: [3, { "R^": 1 }] }], s: 1 }], s: [1, { fw: [6, { ARs: 1, M: [5, { R: 1 }] }], h: [3, { ARs: 1, "^": [2, { "^jns": 1 }] }], j: [5, { AR: [2, { j: 1 }], j: 1, n: [6, { s: 1 }] }], n: [2, { A: [5, { n: 1 }], "R^n": 1, s: [3, { "R^s": 1 }] }], s: 1 }], j: [1, { fw: [6, { ARUjn: 1, M: [5, { A: 1 }] }], h: [2, { A: [6, { ARjn: 1 }], "R^jn": 1, s: [4, { A: [5, { A: 1 }], "R^": 1 }] }], j: [5, { j: 1, s: [6, { A: [2, { A: 1 }], j: 1 }], n: [2, { "R^": 1 }], AR: [2, { j: 1 }] }], n: [2, { A: [5, { n: 1 }], "R^n": 1, s: [3, { "R^": 1 }], j: [5, { jns: 1 }] }], s: 1 }], h: 1 }], "1": [2, { "?": [5, { "$?Ihs": 1, C: [6, { $BCDNV: 1, M: [7, { $: [4, { "?^": 1 }], "?": 1, C: [3, { "?CI^": 1 }], I: [3, { "?C": 1 }], B: [4, { "C^": 1 }] }] }], jn: [6, { "$?CIhjn": 1 }], B: [1, { jn: 1 }] }], B: [3, { "?^": 1, C: [4, { "?": 1, BINn: [1, { fhjsw: [5, { Cjs: 1 }], n: [5, { n: 1 }] }], C: [1, { fhjsw: [5, { CIjs: 1 }], n: [5, { n: 1 }] }], D: [1, { fhjsw: [5, { js: 1 }], n: [5, { n: 1 }] }], M: [6, { "?": 1, C: [1, { fhjsw: [5, { CIjs: 1 }], n: [5, { n: 1 }] }], M: [1, { fhjsw: [5, { C: 1 }] }] }], V: [6, { "?": 1, C: [1, { fhjsw: [5, { Cjs: 1 }], n: [5, { n: 1 }] }], M: [1, { fhjsw: 1 }] }], "^": [1, { fhjsw: [5, { CIs: 1, j: [6, { C: 1 }] }], n: [5, { n: [6, { C: 1 }] }] }] }], I: [4, { "?": 1, CI: [1, { fhjsw: [5, { Cjs: 1 }], n: [5, { n: 1 }] }], M: [1, { fhjsw: [5, { Cs: 1, j: [6, { C: 1 }] }], n: [5, { n: [6, { C: 1 }] }] }], "^": [1, { fhjsw: [5, { CIjs: 1 }], n: [5, { n: 1 }] }], n: [1, { fhjsw: [5, { js: 1 }], n: [5, { n: 1 }] }] }], M: [1, { fhjsw: [5, { $CIs: 1, j: [6, { $CIn: 1 }] }], n: [4, { C: [5, { n: [6, { CIn: 1 }] }], N: [5, { n: 1 }] }] }], BV: [1, { fhjsw: [5, { Cjs: 1 }], n: [5, { n: 1 }] }], N: [6, { "?V": 1, C: [1, { fjsw: [5, { Cjs: 1 }], h: [7, { CIMV: 1 }], n: [5, { n: 1 }] }], I: [5, { I: 1 }], M: [1, { fhjsw: 1 }] }], j: [7, { C: [1, { j: [4, { M: 1 }] }], B: 1 }], n: [4, { M: [1, { fhjsw: [5, { Cs: 1, j: [6, { C: 1 }] }], n: [5, { n: [6, { C: 1 }] }] }], V: 1 }] }], C: [4, { "?": [5, { "$?CIs": 1, j: [6, { "$?CI": 1, B: [1, { j: 1 }], M: [1, { jn: 1 }] }], n: [6, { "$?CIN": 1, B: [1, { j: 1 }], M: [1, { jn: 1 }] }], B: [1, { jn: 1 }], M: [1, { jn: [3, { "?": [7, { C: 1 }], CI: 1 }] }] }], B: [5, { "$?CIs": 1, j: [6, { "$?CIn": 1 }], n: [6, { "$?CINn": 1 }] }], C: [1, { fhsw: [5, { "$?CDIhs": 1, j: [3, { BDNjn: [6, { C: 1 }], C: [6, { CDI: 1 }], I: [6, { CI: 1 }], M: [6, { "?CDI": 1 }] }], n: [6, { "$?CDINhs": 1, j: [7, { $CIV: 1 }], n: [7, { $CIVn: 1 }] }] }], j: [3, { "?": [7, { $BI: 1, C: [6, { C: 1 }] }], B: [5, { Cs: 1, j: [6, { C: 1 }], n: [6, { CNj: 1 }] }], C: [5, { CDIs: 1, j: [6, { CDI: 1 }], n: [6, { CDIN: 1 }] }], D: [5, { Cs: 1, jn: [6, { C: 1 }] }], I: [5, { CIs: 1, j: [6, { CI: 1 }], n: [6, { CIN: 1 }] }], M: [5, { "?CDIs": 1, M: [6, { "?": 1 }], j: [6, { "?CDI": 1 }], n: [6, { "?CDIN": 1 }] }], Njn: [5, { Cs: 1, j: [6, { C: 1 }], n: [6, { CN: 1 }] }], V: [5, { M: [7, { "?": 1 }], j: [6, { "?CIs": 1 }] }], h: [6, { $: 1 }] }], n: [5, { "$?CDIhs": 1, M: [3, { "?": [7, { $: 1 }], M: [6, { "?": 1 }], V: [7, { "?": 1 }] }], j: [3, { BDNjn: [6, { C: 1 }], C: [6, { CDI: 1 }], I: [6, { CI: 1 }], M: [6, { "?CDI": 1 }] }], n: [6, { "$?CDINhs": 1, M: [7, { "?": 1 }], j: [7, { $CIV: 1 }], n: [7, { $CIVn: 1 }] }] }] }], D: [5, { "$?CIs": 1, jn: [6, { "$?CI": 1 }] }], I: [5, { "$?CDIs": 1, j: [6, { "$?CDI": 1, n: [7, { $I: 1 }], j: [7, { CI: 1 }] }], n: [6, { "$?CDINjn": 1 }] }], M: [5, { "$?CDIhs": 1, j: [6, { "$?CDIhs": 1, M: [1, { jn: [7, { "?": 1 }] }], j: [7, { $CI: 1 }], n: [7, { $CIn: 1 }] }], n: [6, { "$?CDINhjs": 1, M: [1, { jn: [7, { "?": 1 }] }], n: [7, { $CIVjn: 1 }] }], M: [1, { jn: [6, { C: [3, { "?": 1 }], "?": 1 }] }] }], N: [5, { "$?CDIs": 1, j: [6, { "$?CDI": 1, n: [7, { $C: 1 }], j: [7, { C: 1 }] }], n: [6, { "$?CDINj": 1, n: [7, { $C: 1 }] }] }], V: [5, { C: [3, { BCDn: 1, j: [1, { fhnsw: 1 }] }], j: [6, { "$?CDIh": 1, j: [7, { C: 1 }], n: [7, { $CIn: 1 }] }], n: [6, { "$?CDINhj": 1, n: [7, { $CIVjn: 1 }] }], "$?DIhs": 1 }], "^": [5, { "$?CDIs": 1, j: [6, { "$?CDIs": 1, M: [1, { jn: [3, { "?": 1 }] }], j: [7, { "$?CIj": 1 }], n: [7, { $CDIn: 1 }] }], n: [6, { "$?CDINs": 1, M: [1, { jn: [3, { "?": 1 }] }], j: [7, { "$?BCIVj": 1 }], n: [7, { $BCDIVjn: 1 }] }], B: [1, { jn: [3, { "?": 1 }] }], M: [1, { jn: [3, { "?": [7, { $C: 1 }], C: [7, { "?": 1 }], "^": [6, { "?": 1 }] }] }] }], h: [5, { Cs: 1, jn: [6, { C: 1 }] }], j: [5, { $CIs: 1, j: [6, { $CIjn: 1 }], n: [6, { $CINjn: 1 }] }], n: [5, { $CIs: 1, j: [6, { $CIn: 1 }], n: [6, { $CINn: 1 }] }], s: [5, { $CIs: 1, j: [6, { $CI: 1 }], n: [6, { $CIN: 1 }] }], w: 1 }], I: [5, { "$?DI": 1, Cs: [3, { "?BCDIMN^jnsw": 1, V: [1, { fhnsw: 1 }] }], j: [6, { $: [3, { "?BCDIMN^jns": 1 }], "?DINjn": 1, C: [3, { "?BCDIMN^jnsw": 1, V: [4, { C: [1, { j: 1 }], "M^": 1 }] }] }], n: [6, { $: [3, { "?BCDIMN^jns": 1 }], "?DINjn": 1, C: [3, { "?BCDIMN^jnsw": 1, V: [1, { fhnsw: 1, j: [7, { $: 1 }] }] }] }] }], V: [3, { "?M": 1, C: [1, { fhsw: [5, { n: [4, { "?BDINjn": 1, CM: [6, { CIj: 1 }], "^": [6, { Cn: 1 }] }], $s: 1 }], j: [4, { "?": [5, { j: 1 }], BNn: [5, { j: [7, { $: 1 }] }], C: [5, { j: [7, { $j: 1 }] }], I: [5, { j: [7, { $C: 1 }] }], M: [5, { j: [7, { $n: 1 }] }], "V^": [5, { j: [6, { n: 1 }] }] }], n: [5, { $: 1, n: [6, { $CDIj: 1, n: [7, { $CDIjn: 1 }] }], s: [4, { "?BCDIMN^jn": 1 }] }] }], D: [5, { jns: 1 }], I: [5, { n: [6, { CIn: 1 }], s: 1, j: [7, { C: [6, { Cn: 1 }], BI: 1 }] }], N: [1, { fhnsw: [5, { ns: 1 }], j: [4, { C: [5, { j: [6, { n: 1 }] }] }] }], j: [5, { j: [7, { $CIVjn: 1 }], ns: 1 }], n: [5, { j: [7, { $BCIn: 1 }], ns: 1 }], "^": [5, { Ins: 1, j: [7, { C: 1 }] }] }], h: [4, { "?CIM^": 1, V: [1, { fhsw: 1, j: [6, { $: 1 }], n: [6, { $M: 1 }] }] }], j: [5, { "$?DIfhsw": 1, C: [3, { "?BCDIMN^fhjns": 1, V: [6, { $BCDIfhs: 1, "?": [7, { $I: 1 }], N: [7, { $CVn: 1, M: [4, { M: 1 }] }], V: [7, { $jn: 1, C: [4, { M: 1 }] }], j: [7, { CIV: 1 }], n: [7, { $BCIn: 1 }], M: [4, { M: 1 }] }] }], jn: [6, { "$?CDIjns": 1, B: [3, { IM: 1 }], V: [3, { "IV^j": 1 }] }], B: [1, { j: [3, { C: [4, { "?": 1 }], n: [4, { M: 1 }] }], n: [3, { C: [4, { "?": 1 }] }] }], M: [1, { j: [3, { C: [4, { "?": [6, { I: 1 }], "CMV^": [6, { "?": 1 }] }], "B^": 1, Mn: [4, { N: 1 }] }], n: [3, { C: [4, { "?": [6, { I: 1 }], "CM^": [6, { "?": 1 }], V: [7, { "?": 1 }] }], "B^": 1, Mn: [4, { N: 1 }] }] }], V: [1, { j: [3, { DMn: 1 }], n: [3, { D: 1 }] }], N: [3, { IM: 1, N: [4, { N: 1 }] }] }], n: [5, { "$?CDINfhsw": 1, j: [6, { "$?CDIVjns": 1, B: [3, { CIM: 1 }] }], n: [6, { "$?CDIVjn": 1, B: [3, { CIM: 1 }] }], M: [1, { j: [3, { C: [4, { "?": [6, { I: 1 }], "CMV^": [6, { "?": 1 }] }] }], n: [3, { C: [4, { "?": [6, { I: 1 }], "CMV^": [6, { "?": 1 }] }], Mn: [4, { N: 1 }], "^": 1 }] }], V: [1, { fhw: [3, { Mn: 1 }], ns: [3, { "M^n": 1 }] }], B: [1, { fhnsw: [3, { n: [4, { M: 1 }] }] }] }], s: [5, { "$?CDINfhjsw": 1, B: [1, { fhnsw: 1, j: [4, { "?": 1, "^": [3, { "?": 1 }] }] }], V: [1, { fhnsw: 1 }], n: [6, { "$?BCDIVjns": 1, M: [1, { fhnsw: 1 }] }], M: [1, { fhsw: 1, j: [3, { C: [4, { "?": [6, { I: 1 }], "CMV^": [6, { "?": 1 }] }] }], n: [7, { "$?BCDIhjns": 1, N: [4, { "C^": 1 }], V: [3, { C: 1 }], M: [6, { M: 1 }] }] }] }], D: [5, { $CIs: 1, jn: [6, { $CIjns: 1, V: [1, { j: 1 }] }], V: [1, { jn: 1 }] }], M: [5, { "$?DIhs": 1, C: [3, { CDINVjn: 1, M: [1, { fhjsw: 1, n: [6, { $CN: 1 }] }], "^": [6, { $CV: 1 }] }], jn: [6, { "$?CDINVhjns": 1 }], B: [1, { jn: [4, { "?": 1 }] }] }], N: [5, { "$?DI": 1, C: [4, { "?BCDIMN^jn": 1, V: [1, { fhnsw: 1, j: [7, { C: 1 }] }] }], j: [6, { "$?DI": 1, C: [4, { "?BCDIMN^jn": 1, V: [7, { $BMNV: 1 }] }], j: [7, { $: 1 }], n: [7, { "$?Cn": 1 }], N: [3, { N: 1 }] }], n: [6, { "$?DIN": 1, C: [4, { "?BCDIMN^jn": 1, V: [1, { fhnsw: 1 }] }], M: [1, { n: [4, { j: 1 }] }], j: [7, { $V: 1 }], n: [7, { "$?CVn": 1, M: [1, { n: 1 }] }] }], s: [4, { "?BCDIMN^jns": 1, V: [1, { fhnsw: 1, j: [7, { $: 1 }] }] }], M: [1, { jn: [6, { "?": 1 }] }] }], fw: 1, "^": [6, { "$?BDfhsw": 1, C: [5, { "?CDIfhjns": 1, V: [1, { n: 1 }] }], I: [5, { "?CIjnsw": 1 }], V: [7, { $BIjn: 1, C: [5, { Ijns: 1 }] }], j: [7, { "$?BCDIVj": 1 }], n: [7, { "$?BCIVjn": 1 }], M: [5, { C: [7, { "?": 1 }], s: 1 }], N: [7, { BCV: 1 }] }] }], "0": [2, { "?": [3, { "?": [5, { "$?CIsw": 1, jn: [6, { "$?CIjnsw": 1 }] }], "BCIMNV^fjns": 1 }], B: [3, { "?NV^n": 1, C: [5, { $CIfjsw: 1, "?": [6, { "?C": 1 }], n: [6, { $BCIVfjnsw: 1, "?": [7, { "?C": 1 }], M: [1, { fhnsw: 1 }] }], M: [1, { fhnsw: 1 }] }], I: [1, { fhjsw: [5, { $Cjs: 1 }], n: [5, { n: 1 }] }], M: [1, { fhsw: [5, { $CIMjs: 1 }], j: [5, { $CIjs: 1 }], n: [5, { n: 1 }] }], B: [4, { C: 1, M: [1, { fhjsw: [5, { Cjs: 1 }], n: [5, { n: 1 }] }] }], j: [4, { Cn: 1 }] }], C: [5, { $CIfhsw: 1, "?": [6, { $: [3, { "?BCIMVs": 1 }], "?I": 1, C: [7, { M: [3, { "?": [4, { C: 1 }], "I^": 1 }], "$?": 1 }] }], j: [6, { $CIfhsw: 1, "?": [3, { "?": [4, { "?CI": 1, M: [7, { $: 1 }] }], BIs: 1, C: [4, { CMVj: 1 }], MV: [7, { "$?": 1 }], "^": [7, { "?C": 1 }] }], B: [1, { j: [3, { "?": 1 }] }], M: [1, { j: 1, n: [4, { "?": 1, "M^": [3, { "?": 1 }], h: [3, { M: 1 }] }] }], V: [1, { j: [3, { "?": 1, C: [4, { "?": 1 }] }] }], j: [7, { $CIn: 1, M: [1, { j: 1 }], j: [3, { BCIM: 1 }] }], n: [7, { "$?CI": 1, M: [1, { jn: 1 }], n: [3, { "BCIM^": 1 }], j: [3, { "I^": 1 }] }] }], n: [6, { $CINfhsw: 1, "?": [7, { "$?I": 1, C: [3, { "?IV^": 1, C: [4, { C: 1 }] }] }], B: [1, { j: [3, { "?": 1 }] }], M: [1, { j: [3, { "?BCIMN^fhjns": 1, V: [4, { C: 1 }] }], n: 1 }], V: [7, { C: [1, { j: [3, { "?": 1 }] }], "?": [1, { j: 1 }], N: 1 }], j: [7, { "$?BCIVn": 1, M: [1, { jn: 1 }], j: [3, { BCIM: 1 }] }], n: [7, { "$?BCIV": 1, M: [1, { jn: 1 }], n: [3, { "BCIM^": 1 }], j: [3, { "BI^": 1 }] }] }], B: [1, { j: [4, { "?BCIMV^js": 1, N: [3, { M: 1 }] }], n: 1 }], M: [1, { j: [3, { "?": [4, { "?": [7, { C: 1 }], "CM^": 1 }], C: [4, { "?": [7, { $: 1 }], "C^": [6, { "?": 1 }] }], "IV^": [6, { "?": 1 }], M: [7, { "?": 1 }], N: [7, { M: 1 }] }], n: [3, { "?": [7, { $: [6, { $B: 1 }], CMV: 1 }], C: [4, { "?": [7, { $: 1 }], "C^": [6, { "?": 1 }] }], IV: [6, { "?": 1 }], M: [7, { "?": 1 }] }] }], V: [1, { jn: [6, { "?": 1 }] }] }], I: [4, { "?N": [5, { $Cs: 1, jn: [6, { $C: 1 }] }], Bjn: 1, C: [3, { "?Nns": 1, B: [5, { $Cs: 1, jn: [6, { $C: 1 }] }], C: [5, { $CIs: 1, jn: [6, { $CI: 1 }] }], I: [7, { $BIVj: 1, C: [6, { B: [5, { Cs: 1 }], CIMV: 1 }], M: [5, { CIjns: 1 }] }], M: [5, { "$?CIfs": 1, j: [6, { "$?CIfn": 1, j: [7, { $C: 1 }], M: [1, { jn: 1 }] }], n: [6, { "$?CIfn": 1, j: [7, { $Cn: 1 }], M: [1, { jn: 1 }] }] }], V: [5, { $: 1, CIs: [1, { fhnsw: 1 }], j: [1, { j: [6, { C: 1 }] }], n: [7, { $I: 1, C: [6, { CI: 1 }] }] }], j: [7, { $MV: 1, C: [5, { Cs: 1, jn: [6, { C: 1 }] }] }] }], IMs: [5, { $CIs: 1, jn: [6, { $CI: 1 }] }], V: [5, { $CIs: 1, jn: [6, { $CINn: 1 }] }], "^": [5, { $CIhs: 1, j: [6, { "$?CIh": 1, M: [1, { j: 1 }], j: [7, { $CI: 1 }], n: [7, { $BCn: 1 }] }], n: [6, { "$?CIh": 1, j: [7, { $CI: 1 }], n: [7, { $BCn: 1 }], M: [1, { jn: 1 }] }], "?": [7, { "$?MV": 1 }], V: [1, { jn: 1 }] }] }], M: [5, { "?": [7, { $BMV: 1, "?": [4, { "?IM^": 1, C: [6, { "?": 1 }] }], C: [4, { "CMV^": 1 }] }], j: [6, { "?": [7, { "$?CI": 1 }], $CINVfhns: 1, j: [7, { "$?BCIjn": 1 }], M: [1, { j: 1, n: [3, { h: 1 }] }] }], n: [6, { "?": [7, { "$?CI": 1 }], $CINVfhns: 1, j: [7, { "$?BCIjn": 1 }], M: [1, { j: [3, { C: 1 }], n: 1 }] }], $Ifhs: 1, C: [6, { "$?BCIMNfhjns": 1, V: [4, { "?BCINV^hjns": 1, M: [1, { fhjns: 1 }] }] }], B: [1, { j: [3, { C: [4, { M: [6, { n: 1 }] }] }], n: [6, { n: 1 }] }] }], j: [5, { $Ifhsw: 1, "?": [3, { "?BINV^fjns": 1, C: [6, { $: [4, { "?BCIMVs": 1 }], C: [7, { "$?": 1, M: [4, { "I^": 1 }] }], "?I": 1 }], M: [6, { "$?CI": 1 }] }], C: [3, { "?BCIMN^fhjnsw": 1, V: [4, { B: [6, { C: 1 }], I: [7, { Mn: 1 }], MV: 1, N: [6, { $BCs: 1 }], j: [6, { $: 1 }] }] }], j: [6, { "$?CIn": 1, j: [7, { "$?CIjn": 1 }], M: [1, { j: 1, n: [3, { I: [7, { C: 1 }] }] }], B: [3, { Mn: 1 }], V: [3, { V: 1 }] }], n: [6, { "$?CI": 1, j: [7, { "$?BCIjn": 1, M: [1, { jn: 1 }] }], n: [4, { "?BI^jn": 1, C: [7, { $CIVn: 1, j: [3, { M: 1 }] }], M: [7, { $jn: 1 }], V: [7, { $C: 1 }] }], M: [1, { j: [3, { CIn: 1 }], n: 1 }], B: [3, { IMn: 1 }], V: [3, { Vn: 1 }] }], M: [1, { j: [3, { "BCIMN^hjn": 1 }], n: [3, { C: [4, { "?": [6, { C: 1 }], CIV: [6, { "?": 1 }], M: [7, { "?": 1 }] }], I: [4, { "^": [7, { C: 1 }] }], "B^hn": 1, M: [4, { h: 1 }], j: [4, { V: 1 }] }] }], B: [1, { j: [3, { C: [4, { "?": 1 }], "BV^": 1, n: [4, { C: 1 }] }], n: [3, { C: [4, { "?": 1 }] }] }], V: [1, { j: [3, { C: [4, { "?": 1 }], "BM^": 1 }], n: [4, { "?": 1 }] }], N: [3, { "IM^": 1 }] }], n: [5, { $CINfhsw: 1, "?": [3, { "?INV^fjns": 1, B: [6, { "?C": 1, $: [4, { M: 1 }] }], C: [7, { "$?BM": 1, C: [4, { IM: 1 }] }], M: [6, { "$?CI": 1 }] }], j: [6, { "$?CIV": 1, j: [7, { "$?BCIjn": 1, M: [1, { jn: 1 }] }], n: [7, { n: [4, { "?CIM^jn": 1 }], "$?CIV": 1, j: [4, { "BM^jn": 1, C: [3, { M: 1 }] }] }], M: [1, { jn: 1 }], B: [3, { CIMn: 1 }] }], n: [6, { "$?CIV": 1, n: [7, { "$?CIV": 1, j: [4, { "BM^j": 1, C: [3, { M: 1 }] }], n: [4, { "CIM^n": 1 }] }], j: [7, { "$?BCIjn": 1, M: [1, { jn: 1 }] }], M: [1, { j: [4, { BC: [3, { C: 1 }], "M^": 1 }], n: 1 }], B: [3, { CIM: 1 }] }], M: [1, { j: [4, { "?Nfjs": 1, Bhn: [3, { C: 1 }], C: [3, { CIMNjn: 1 }], I: [3, { Cj: 1 }], "M^": [3, { CI: 1 }], V: [6, { "?": 1 }] }], n: 1, fhsw: [3, { "B^h": 1, j: [4, { V: 1 }] }] }], B: [1, { fhsw: [3, { "B^": 1, n: [4, { C: 1 }] }], n: [3, { "BV^": 1, n: [4, { C: 1 }] }], j: [3, { V: 1 }] }], V: [6, { C: [1, { fhnsw: [3, { M: 1 }] }], N: 1 }] }], s: [1, { fnsw: 1, h: [4, { "?BCIMNV^fhnsw": 1, j: [6, { "$?BCIMNjn": 1 }] }], j: [5, { "$?CINfhjsw": 1, n: [6, { "$?BCIVjs": 1, n: [7, { $Cjn: 1 }] }], M: [3, { C: [4, { I: [6, { "?": 1 }] }] }] }] }], fw: 1, V: [3, { C: [1, { fhsw: [5, { "$?hs": 1, n: [6, { "$?CIh": 1, j: [7, { $CIj: 1 }], n: [7, { $CIjn: 1 }] }], M: [4, { V: 1 }] }], j: [4, { B: [5, { j: [7, { C: 1 }] }], CIV: [5, { j: [6, { jn: 1 }] }], "M^": [5, { j: [6, { Ij: 1 }] }] }], n: [5, { "$?BMhs": 1, n: [6, { "$?BCIMh": 1, j: [7, { $CIMj: 1 }], n: [7, { $CIjn: 1 }] }] }] }], B: [5, { ns: 1, j: [7, { C: 1 }] }], M: 1, N: [4, { C: [1, { fhnsw: [5, { ns: 1 }], j: [5, { j: [7, { $: 1 }] }] }], I: [5, { ns: 1 }], M: 1 }], V: [5, { Mns: 1, j: [6, { C: 1 }] }], j: [5, { j: [7, { $C: 1 }], ns: 1 }], n: [5, { ns: 1 }], I: [5, { ns: 1, j: [7, { CV: 1 }] }], "^": [5, { $ns: 1, j: [7, { $V: 1 }] }] }], N: [5, { $I: 1, C: [3, { "CM^": 1 }], j: [6, { "$?Ins": 1, C: [3, { "CM^": 1 }], M: [1, { j: 1 }], V: [3, { M: 1 }] }], n: [6, { "$?Ins": 1, C: [3, { "CM^": 1 }], M: [1, { jn: 1 }], V: [3, { M: 1, C: [7, { N: 1 }] }] }], s: [3, { "CIM^": 1, V: [4, { N: 1 }] }], B: [1, { jn: 1 }] }], h: [1, { fhnsw: 1, j: [5, { $Cjs: 1, n: [6, { $C: 1 }] }] }], "^": [1, { fhnsw: 1, j: [5, { "?CIfjs": 1, n: [6, { "?CIfjns": 1 }] }] }] }], "3": [6, { $: [5, { $s: [2, { "?CMNhjns": 1, B: [1, { fhjsw: 1 }], I: [3, { "?BCIM^jn": 1 }], V: [1, { fhnsw: 1 }] }], "?h": 1, C: [2, { "?CIMN^ns": 1, j: [3, { "?BCIMN^jn": 1, V: [4, { MN: 1 }] }], B: [1, { fhjsw: 1 }], V: [3, { M: 1 }] }], I: [2, { "?CIM^jns": 1, B: [1, { fhjsw: 1 }] }], j: [2, { "?CMNhjns": 1, B: [1, { fhjsw: 1 }], I: [3, { "?BCIM^jn": 1 }], V: [1, { j: 1 }] }], n: [2, { "?CIMNhjns": 1, B: [1, { n: 1 }], V: [1, { fhnsw: 1 }] }], M: [1, { j: [2, { C: [3, { "?": 1 }], jn: [3, { CI: 1 }] }], n: [2, { C: [3, { "?": 1 }], j: [3, { I: 1 }], ns: 1 }], fhsw: [2, { s: 1 }] }], B: [1, { j: [2, { C: 1, j: [3, { C: 1 }] }], fhnsw: [2, { s: 1 }] }], V: [1, { j: [2, { j: 1 }], n: [2, { j: [3, { C: 1 }], s: 1 }], fhsw: [2, { s: 1 }] }], N: [2, { ns: 1 }] }], "?": [5, { "?I": 1, j: [2, { "?CIM^jns": 1, B: [4, { "^": 1 }] }], ns: [2, { "?CIM^j": 1, B: [4, { "^": 1 }] }], M: [1, { j: [2, { jn: 1, s: [7, { $: 1 }], C: [4, { C: 1 }] }], n: [2, { jns: 1, C: [3, { C: 1 }] }], fhsw: [2, { s: 1 }] }], C: [2, { "?CIM^jns": 1 }] }], C: [5, { "?": [2, { "?CIM^jns": 1, B: [4, { "^": 1 }] }], C: [2, { "?CIMN^hns": 1, j: [3, { "?BCIMN^hjns": 1, V: [4, { M: 1 }] }], B: [1, { fhjsw: 1 }], V: [3, { M: 1 }] }], j: [2, { "?CMN^hjns": 1, I: [3, { "?BCIMN^jns": 1, V: [1, { jw: 1 }] }], V: [3, { C: [1, { j: [7, { "?": 1 }] }], IM: 1 }], B: [1, { fhjsw: 1 }] }], n: [2, { "?CMN^hjns": 1, I: [3, { "?BCIMN^jns": 1, V: [1, { fhnsw: 1 }] }], V: [1, { fhnsw: 1, j: [3, { M: 1 }] }], B: [1, { n: 1 }] }], s: [1, { fhsw: 1, j: [2, { "?BCMN^jns": 1, I: [3, { "?BCIM^jns": 1 }], V: [3, { M: 1 }] }], n: [2, { "?CIMNV^jns": 1 }] }], M: [1, { j: [2, { C: [3, { "?": 1 }], j: [3, { "CIMN^j": 1 }], n: [4, { "?BINjns": 1, C: [3, { CMNj: 1 }], M: [3, { C: 1 }], "^": [3, { CI: 1 }] }] }], n: [2, { C: [7, { C: [3, { "?": 1 }], "?": 1 }], j: [3, { C: [7, { "?": 1 }], "IV^": 1 }], "V^ns": 1 }], fhsw: [2, { "^s": 1, V: [4, { V: 1 }], n: [3, { "^": 1 }] }] }], I: [2, { "?CIMN^jns": 1, B: [1, { fhjsw: 1 }] }], B: [1, { j: [2, { C: 1, j: [3, { BC: 1 }] }], fhnsw: [2, { s: 1, n: [3, { B: 1 }] }] }], V: [1, { j: [2, { j: [3, { CM: 1 }] }], n: [2, { j: [4, { "?MNVj": 1, "I^": [3, { C: 1 }] }], s: 1, n: [3, { M: 1 }] }], fhsw: [2, { s: 1, n: [3, { M: 1 }] }] }], N: [2, { ns: 1, j: [3, { IM: 1 }] }], h: 1 }], I: [2, { "?I": 1, C: [5, { "?CIjns": 1, B: [1, { j: 1 }] }], j: [5, { "?Ijns": 1, C: [3, { "?BCIM^j": 1 }], B: [1, { j: [3, { C: 1 }] }], M: [1, { j: 1 }], V: [1, { jn: 1 }] }], n: [5, { "?CINjns": 1, M: [1, { j: [4, { "BCIM^j": 1 }], n: 1 }] }], s: [1, { fhnsw: 1, j: [5, { "?CIjns": 1 }] }], B: [3, { CM: [1, { fhjsw: [5, { Cjs: 1 }], n: [5, { n: 1 }] }], "^": 1 }], "M^": [5, { "?CIjns": 1 }], V: [1, { fhnsw: [5, { ns: 1 }], j: [5, { j: 1 }] }], N: [4, { I: 1 }] }], n: [3, { "?Bn": 1, C: [5, { C: [2, { CMjns: 1 }], j: [2, { CMn: 1, V: [1, { j: 1 }] }], ns: [1, { fhnsw: 1, j: [2, { CM: 1 }] }], M: [1, { j: [2, { j: 1, n: [4, { "C^": 1 }] }], n: [2, { ns: 1 }], fhsw: [2, { s: 1 }] }], V: [1, { j: [2, { j: 1 }], n: [2, { js: 1 }], fhsw: [2, { s: 1 }] }], B: [1, { jn: 1 }], I: 1 }], M: [5, { js: [1, { fhjsw: 1, n: [2, { Cn: 1 }] }], n: [2, { CIjns: 1 }], CI: 1 }], V: [5, { C: [2, { Cns: 1 }], jns: 1 }], "^": [5, { "?CIjns": 1 }], I: [5, { C: 1 }] }], B: [2, { "?": [5, { "?Cs": 1 }], C: [5, { CIs: 1, M: [1, { jn: [3, { "?": 1 }] }], jn: [1, { j: 1 }] }], j: [3, { "?B^ns": 1, C: [5, { CI: 1, M: [1, { j: 1, n: [4, { "?": 1 }] }], V: [1, { j: 1 }] }], IM: [5, { CI: 1 }], j: [5, { C: 1 }] }], n: [5, { "?CI": 1, M: [1, { j: [4, { "?BCIM^": 1 }], n: 1 }] }], s: [1, { fhnsw: 1, j: [5, { CI: 1, M: [4, { "?": 1 }] }] }], IM: [5, { CIs: 1 }], B: [1, { fhjsw: [5, { CIjs: 1 }], n: [5, { n: 1 }] }], V: [1, { fhsw: [5, { s: 1 }], j: [3, { C: [5, { jn: 1 }] }], n: [5, { n: [3, { C: 1 }], s: 1 }] }], "^": 1 }], M: [5, { C: [2, { "?CMN^hns": 1, j: [3, { "?BCIMN^hjns": 1, V: [4, { C: [7, { "?": 1 }], M: 1, N: [1, { jw: 1 }] }] }], B: [1, { fhjsw: 1 }], I: [3, { "BCIM^jns": 1, V: [7, { $: 1 }] }], V: [3, { M: 1 }] }], s: [2, { "?CIMN^j": 1, V: [1, { fhnsw: 1 }] }], j: [2, { "?In": [1, { jn: 1 }], C: [1, { j: 1, n: [4, { "?": 1 }] }], MNj: [1, { j: 1 }], "^s": 1 }], n: [1, { j: [2, { "?CI": 1, M: [4, { "C^": 1 }], j: [3, { C: 1 }], N: [4, { CM: 1 }] }], n: 1 }], "?": 1, M: [1, { j: [2, { j: [3, { C: 1 }], n: [4, { "C^": 1 }] }], n: [2, { ns: 1 }], fhsw: [2, { s: 1 }] }], V: [1, { j: [2, { j: 1 }], n: [2, { js: 1 }], fhsw: [2, { s: 1 }] }], N: [2, { ns: 1 }], I: [2, { "IM^jns": 1 }] }], j: [2, { "?I^": 1, j: [3, { "?BI^j": 1, C: [1, { j: 1, n: [5, { CV: 1 }], fhsw: [5, { C: 1 }] }], M: [5, { C: 1 }], V: [5, { jns: 1 }] }], n: [5, { CIjns: 1, M: [1, { j: [7, { $: 1 }], n: 1 }] }], s: [1, { fhnsw: 1, j: [5, { C: 1 }] }], V: [1, { fhsw: [5, { n: [7, { $C: 1 }], s: 1 }], j: [5, { j: 1 }], n: [5, { ns: 1 }] }], B: [1, { fhjsw: [5, { js: 1 }], n: [5, { n: 1 }] }], C: [5, { j: [7, { $C: 1, M: [1, { j: 1 }] }], n: [7, { $C: 1, M: [1, { jn: 1 }] }], Cs: 1, B: [1, { j: 1 }] }], M: [5, { Cjns: 1 }] }], V: [5, { C: [2, { "?CIMN^ns": 1, j: [3, { "?BCIMN^jns": 1, V: [4, { M: 1 }] }], B: [1, { fhjsw: 1 }], V: [3, { M: 1 }] }], Is: 1, j: [2, { C: [1, { j: 1 }], "M^": 1 }], n: [2, { C: [1, { j: [4, { "BCIMV^jns": 1 }] }], "M^": 1 }], M: [1, { j: [2, { j: 1, n: [4, { M: 1 }] }], n: [2, { ns: 1 }], fhsw: [2, { s: 1 }] }], N: [2, { ns: 1 }] }], N: [5, { C: [2, { "CIMN^ns": 1, j: [3, { "CIMN^": 1, V: [7, { C: 1 }] }] }], Ins: 1, j: [2, { IM: 1 }] }], s: [5, { jns: 1, C: [2, { j: [3, { CM: 1 }], CMns: 1 }] }], h: 1 }], "2": [2, { "?": [5, { $: [1, { fhjsw: 1, n: [3, { "?": 1 }] }], "?": [6, { $I: 1, "?": [4, { "?CM": 1, "^": [3, { "?^": 1 }] }], C: [3, { "?": 1 }] }], C: [1, { fhjsw: 1, n: [3, { M: [4, { "?^": 1 }], "^": 1 }] }], I: [1, { fhjsw: 1, n: [3, { M: [7, { $: 1 }] }] }], j: [6, { $: [1, { fhjsw: 1, n: [3, { "?": 1 }] }], "?": [7, { $I: 1, "?": [1, { fhjsw: 1, n: [4, { C: 1 }] }], C: [3, { "?": 1, C: [1, { fhjsw: 1 }] }] }], C: [1, { fhjsw: 1, n: [3, { M: [4, { "^": 1 }], "^": 1 }] }], I: [1, { fhjsw: 1 }], M: [1, { j: [7, { I: 1, C: [4, { C: 1 }] }], n: [7, { I: 1 }] }], V: 1 }], n: [6, { $: [3, { "?^": 1, C: [4, { B: 1 }] }], "?": [7, { $I: 1, "?": [4, { "?CM": 1, "^": [3, { "?^": 1 }] }], C: [3, { "?": 1, C: [1, { n: 1 }] }] }], C: [1, { fhjsw: [3, { M: [4, { "^": 1 }], "^": 1 }], n: 1 }], I: [1, { n: 1 }], M: [1, { j: [7, { I: 1 }], n: [7, { I: 1, C: [4, { C: 1 }] }] }], V: 1 }], s: [1, { fhjsw: 1, n: [3, { "?": [4, { "?": 1, "^": [6, { "?": 1 }] }], M: [6, { C: [4, { "^": 1 }], M: 1 }], I: [6, { M: 1 }], "^": 1 }] }], M: [1, { fhsw: [6, { BI: 1, C: [7, { CN: 1 }] }], jn: [6, { M: 1 }] }], V: 1 }], C: [5, { $CIfhs: 1, j: [6, { $CIfhs: 1, "?": [7, { "?": [4, { B: 1 }], M: [3, { C: [4, { C: 1 }], B: 1 }], B: 1 }], j: [7, { $CIj: 1 }], n: [7, { $CIn: 1 }] }], n: [6, { $CINfhs: 1, "?": [7, { "?": [4, { B: 1 }], M: [3, { C: [4, { C: 1 }], B: 1 }], $: [3, { B: 1 }], B: 1 }], j: [7, { $CIj: 1 }], n: [7, { $CIn: 1 }] }], M: [1, { jn: [3, { "?": [4, { "?": [6, { B: 1 }], C: [6, { I: 1 }], N: [7, { $: 1 }] }] }] }], "?": [6, { "?": [4, { B: 1 }], M: [7, { $I: 1 }], B: 1 }] }], I: [5, { $CIs: 1, jn: [6, { $CINns: 1, M: [1, { jn: [4, { "?": 1 }] }], "?": [7, { M: 1 }] }], "?": [6, { M: 1 }] }], M: [5, { $CIfs: 1, jn: [6, { $CINVfjns: 1, "?": [7, { BM: 1, I: [3, { M: 1 }], "?": [3, { "N^": 1 }], C: [3, { B: 1, M: [4, { N: 1 }] }], $: [4, { "^": 1 }] }], M: [1, { jn: [3, { "?": 1 }] }] }], "?": [6, { BM: 1, "?": [3, { C: [7, { "?": 1 }], "N^": 1 }], C: [3, { M: [4, { C: [7, { N: 1 }], N: 1 }], B: 1, "^": [7, { CMV: 1 }] }], I: [3, { M: 1 }], $: [4, { "^": 1 }] }], BM: [1, { jn: [3, { "?": 1 }] }] }], j: [5, { $Ifhs: 1, "?": [3, { "?": [4, { "?BCIM": 1, "^": [6, { "$?": 1 }] }], C: [6, { M: [7, { $I: 1 }], "?": [7, { "$?": 1 }], B: 1 }], M: [6, { C: [4, { B: 1, M: [7, { N: 1 }], "^": [7, { CMV: 1 }] }], "?": [4, { C: [7, { "?": 1 }], "N^": 1 }], BM: 1, I: [4, { M: 1 }] }], I: [6, { M: 1 }], "B^": 1 }], C: [3, { "?": [1, { fhjsw: 1, n: [4, { "?BCMNV^": 1, I: [6, { CIN: 1 }] }] }], "BCIMN^fhjns": 1, V: [6, { "$?BCIV": 1, N: [7, { $CV: 1, M: [4, { M: 1 }] }], M: [4, { M: 1 }] }] }], M: [3, { "?": [4, { "?V": 1, C: [7, { C: 1, M: [6, { C: 1 }] }], M: [1, { jn: [6, { C: 1 }] }] }], "B^h": 1, M: [1, { jn: [4, { "?": 1 }] }], N: [1, { jn: [7, { "?": 1 }] }] }], jn: [6, { $CIjn: 1 }], B: [3, { "B^": 1, "?": [4, { I: 1 }] }], N: [3, { "BIMN^": 1 }], V: [3, { "?BM^": 1 }] }], n: [5, { $CINfhs: 1, "?": [3, { "?": [4, { "?BCIM": 1, "^": [6, { "$?": 1 }] }], C: [6, { $: [4, { B: 1 }], M: [7, { $I: 1 }], "?": [7, { "$?": 1 }], B: 1 }], M: [6, { C: [4, { B: 1, M: [7, { N: 1 }], "^": [7, { CMV: 1 }] }], "?": [4, { C: [7, { "?": 1 }], "N^": 1 }], BM: 1, I: [4, { M: 1 }] }], I: [6, { M: 1 }], "B^": 1 }], M: [3, { "?": [4, { "?V": 1, C: [7, { C: 1, M: [6, { C: 1 }] }], M: [1, { jn: [6, { C: 1 }] }] }], "B^h": 1, M: [1, { jn: [4, { "?": 1 }] }], N: [1, { jn: [7, { "?": 1 }] }] }], j: [6, { $CIjn: 1 }], n: [6, { $CIn: 1 }], B: [3, { "B^": 1, "?": [4, { I: 1 }] }], V: [3, { "?BM^": 1 }] }], s: [3, { "?": [1, { fhjsw: 1, n: [4, { "?BCMNV^": 1, I: [6, { $CIN: 1 }] }] }], "BCIMNV^fhjns": 1 }], B: [1, { fhjsw: [5, { $CIjs: 1, n: [3, { M: [4, { "?": 1 }], "^": 1 }] }], n: [5, { n: 1, Cjs: [3, { M: [4, { "?": 1 }], "^": 1 }] }] }], N: [5, { $CIs: 1, jn: [6, { $CINjns: 1 }], M: [1, { jn: [7, { "?": 1 }] }] }], V: [5, { $: [4, { "?BCIMN^": 1 }], I: 1, j: [7, { $: [4, { "?BIMN^": 1, C: [6, { $CI: 1 }] }], C: [4, { "?BIMNjns": 1, C: [6, { CI: 1 }], "^": [6, { C: 1 }] }], V: [4, { "?BIM^": 1, C: [3, { MN: 1 }] }], I: [6, { CI: 1 }], "?": 1, B: [4, { BIMs: 1, "C^": [6, { C: 1 }] }], N: [4, { BCIMNn: 1 }], M: [3, { M: 1 }] }], n: [4, { "?BIMNjns": 1, "C^": [6, { $CI: 1 }], V: [7, { "?": 1 }] }], s: [4, { "?BCIMN^jns": 1, V: [1, { fhnsw: 1 }] }], C: [3, { M: 1 }] }], "^fh": 1 }], "7": [2, { "?fh": 1, C: [5, { "$?CIhs": 1, j: [6, { "$?CIhs": 1, BV: [1, { j: 1 }], M: [1, { j: [3, { "?NV^": 1, C: [4, { "?MV^hns": 1 }], I: [4, { IV: 1 }], j: [7, { BC: 1 }], n: [4, { "BCIM^j": 1 }], B: [7, { $j: 1 }], M: [4, { MN: 1 }], h: [4, { h: 1 }] }] }], j: [7, { "$?CIjn": 1, M: [1, { j: 1 }] }], n: [7, { "$?CIj": 1, n: [3, { BCMVn: 1 }], M: [1, { jn: 1 }] }] }], n: [6, { "$?CINhs": 1, BV: [1, { j: 1 }], M: [1, { jn: 1 }], j: [7, { "$?BCIVjn": 1, M: [1, { jn: 1 }] }], n: [7, { "$?CIVjn": 1, M: [1, { jn: 1 }] }] }], B: [1, { jn: [3, { "?BCIM^hjns": 1, V: [6, { n: 1 }] }] }], V: [1, { j: [3, { "?": [6, { C: 1 }], V: [6, { "?": 1 }] }], n: [3, { "?": [7, { M: 1 }] }] }], M: [1, { jn: [3, { V: [7, { "?": 1 }] }] }] }], I: [5, { "$?CIs": 1, jn: [6, { "$?CIjn": 1 }], B: [1, { jn: 1 }], V: [1, { j: 1, n: [7, { C: 1 }] }] }], j: [5, { "$?Ifhs": 1, C: [3, { "?BCIMN^fhjns": 1, V: [4, { "BIM^n": 1, N: [6, { $BCMN: 1, V: [7, { "$?n": 1 }] }], V: [6, { $CM: 1, V: [7, { $: 1 }] }], j: [6, { $BCM: 1, V: [7, { $n: 1 }] }] }] }], j: [6, { "$?CIjn": 1, M: [1, { j: 1 }], V: [3, { "^j": 1 }], B: [3, { I: 1 }] }], n: [6, { "$?CIhj": 1, n: [7, { "$?BCIVjn": 1 }], M: [1, { jn: 1 }], V: [3, { "V^jn": 1 }], B: [3, { Ij: 1 }] }], B: [3, { CV: [1, { jn: 1 }], j: [4, { I: 1 }], n: [4, { Ij: 1 }], "^h": 1 }], M: [3, { C: [1, { j: [4, { "?Vs": 1, B: [6, { Ihj: 1 }], C: [6, { "?BIVhj": 1 }], I: [7, { "?Cn": 1 }], M: [7, { "$?Bjn": 1 }], "^": [6, { "?I": 1 }], h: [6, { C: 1 }], j: [6, { CI: 1 }], n: [7, { CIn: 1 }] }], n: [4, { V: [7, { "?": 1 }] }] }], MNj: [1, { j: 1 }], Vn: [1, { jn: 1 }], "^": 1 }], V: [3, { C: [1, { j: 1 }], M: 1, n: [1, { fhjsw: 1, n: [7, { $C: 1 }] }], N: [4, { M: 1 }], j: [4, { "^": 1 }], "^": [1, { fhjsw: 1, n: [7, { $: 1 }] }] }], N: [3, { M: 1 }] }], n: [5, { "$?CINfhs": 1, j: [6, { "$?CIVhj": 1, n: [7, { "$?BCIVjn": 1 }], B: [3, { CIj: 1 }], M: [1, { jn: 1 }] }], n: [6, { "$?CIVhj": 1, n: [7, { "$?CIVjn": 1 }], M: [1, { jn: 1 }], B: [3, { Ij: 1 }] }], M: [1, { jn: 1, fhsw: [3, { "^": 1 }] }], V: [3, { M: 1, n: [7, { $BC: 1, M: [1, { n: 1 }] }], N: [4, { M: 1 }], j: [4, { "^": 1 }], "^": [7, { $C: 1 }] }], B: [3, { V: [1, { jn: 1 }], jn: [4, { Ij: 1 }], "^h": 1 }] }], s: [7, { "$?BCINVhjns": 1, M: [5, { "?BCIMNhjns": 1, V: [1, { fhjsw: 1 }] }] }], B: [4, { "?BIhns": 1, C: [3, { CINVj: 1, M: [7, { $: [1, { fhjsw: [5, { Cjs: 1 }], n: [5, { n: 1 }] }], "?": 1, C: [1, { fhjsw: [5, { Cs: 1 }] }], BIMVjn: [1, { fhjsw: [5, { C: 1 }] }] }] }], M: [3, { B: [1, { f: 1 }], CIh: 1 }], N: [1, { fhjsw: [5, { Cjs: 1 }], n: [5, { n: 1 }] }], V: [3, { C: [7, { $C: [1, { fhjsw: [5, { Cjs: 1 }], n: [5, { n: 1 }] }], "?": 1 }], Ijn: 1 }], "^": [3, { "C^": 1, I: [5, { $CIs: 1, jn: [6, { $CIjn: 1 }] }] }], j: [3, { CIn: 1 }] }], M: [5, { "$?CIhs": 1, j: [6, { "$?CINVhns": 1, j: [7, { "$?CIjn": 1 }], M: [1, { j: 1 }] }], n: [6, { "$?CINVhns": 1, j: [7, { "$?CIjn": 1 }], M: [1, { jn: 1 }] }], B: [1, { jn: [6, { C: [4, { "?": 1 }], n: 1 }] }], M: [1, { j: [4, { "CM^": 1 }] }] }], V: [3, { C: [5, { $: [1, { fhnsw: 1 }], I: [4, { "?": 1, V: [1, { fhnsw: 1 }] }], j: [1, { fhnsw: [4, { "?": [7, { $C: 1 }], I: [7, { "?": 1 }] }], j: [6, { "$?BIMs": 1, j: [7, { "$?CIjn": 1 }], n: [7, { "$?CIVjn": 1 }] }] }], n: [4, { "?": 1, B: [7, { $Ijn: [1, { fhnsw: 1 }], "?N": 1 }], C: [1, { fhnsw: [6, { CIs: 1 }] }], I: [6, { "?": 1, CIns: [1, { fhnsw: 1 }], j: [7, { "?": 1 }] }], M: [1, { fhsw: [6, { CIs: 1 }], n: [6, { CIMs: 1 }] }], Nhs: [1, { fhnsw: 1 }], V: [1, { fhsw: [6, { "?CIV": 1 }], n: [7, { $CIVjn: 1 }] }], "^": [7, { $: [1, { n: 1 }], "?": 1, j: [1, { fhnsw: 1 }] }], j: [6, { "?": 1, Cj: [1, { fhnsw: 1 }], n: [7, { "?": 1 }], B: [1, { n: 1 }] }], n: [1, { fhnsw: [6, { Cn: 1 }] }] }], s: [1, { fhnsw: 1, j: [4, { "?": 1, I: [7, { "?": 1 }] }] }], "?": [1, { fhnsw: 1, j: [4, { I: 1 }] }], M: [1, { n: 1 }], B: [1, { n: [4, { "M^j": 1 }] }], V: [1, { n: 1, j: [6, { I: 1 }], fhsw: [4, { V: 1 }] }], h: 1 }], BI: [5, { jns: 1 }], M: 1, N: [6, { $: [5, { "$?jns": 1 }], C: [5, { Ins: 1, j: [7, { $BCMN: 1 }], C: [4, { M: 1 }] }], "?I": 1, j: [7, { $I: 1 }], n: [7, { CIj: 1 }] }], V: [5, { $Ijns: 1 }], j: [6, { $: [5, { $Ijns: 1 }], C: [4, { C: [5, { I: 1, ns: [1, { fhnsw: 1 }] }], "^": [5, { n: 1 }], j: 1 }], Ij: 1, n: [7, { $CI: 1 }] }], n: [5, { ns: [1, { fhnsw: 1, j: [6, { C: 1 }] }], j: [4, { Vn: 1 }], $: 1 }], "^": [5, { $jns: 1 }] }], N: [5, { $Cs: 1, j: [6, { $C: 1, M: [1, { j: 1 }], V: [3, { M: 1 }] }], n: [6, { $C: 1, M: [1, { jn: 1 }], V: [3, { M: 1 }] }], V: [1, { j: [4, { C: [3, { C: 1 }], "IMV^": 1 }] }], B: [1, { jn: 1 }] }], "^": [5, { "?BCIMfhjns": 1, V: [1, { fhjsw: 1, n: [7, { $: 1 }] }] }] }], "8": [2, { "?": [3, { "?CIMV^": 1, D: [5, { jns: 1 }] }], j: [5, { "$?DIfhs": 1, C: [3, { "?BCDIM^fhjns": 1, V: [4, { C: [7, { $: [6, { Mn: 1 }], C: [6, { I: 1 }], n: [6, { M: 1 }], "?": 1, B: [1, { h: 1 }], M: [1, { j: 1 }], j: [6, { j: 1 }] }], DIMVjn: 1 }] }], M: [3, { C: [1, { j: 1, n: [7, { C: [6, { "?": 1 }], BD: [4, { n: 1 }], "?": 1 }] }], DM: [1, { j: 1 }], "^hs": 1, j: [1, { j: 1, n: [4, { Is: 1, j: [6, { C: 1 }] }], fhsw: [4, { s: 1 }] }], In: [1, { jn: 1 }] }], V: [3, { C: [1, { j: [6, { $BDIMVjns: 1, C: [7, { I: 1 }] }], n: [6, { $BDIVns: 1, j: [7, { $CDIj: 1 }] }] }], DMn: [1, { jn: 1 }], V: [1, { j: [6, { C: 1 }] }], "^s": 1, j: [4, { s: 1 }] }], j: [6, { $CDIn: 1, M: [3, { Cj: [1, { j: 1 }], "^s": 1 }], j: [7, { $CDIn: 1, j: [3, { j: [4, { BDIMVj: 1 }], BDIMV: 1, C: [1, { jn: 1 }] }], M: [1, { j: 1 }] }], V: [3, { s: 1 }], B: [3, { "M^": 1 }] }], n: [6, { $CDIs: 1, M: [1, { jn: 1, fhsw: [3, { "^s": 1 }] }], j: [7, { j: [3, { j: [4, { BDIMVj: 1 }], BDIMV: 1, C: [1, { jn: 1 }] }], $CDIn: 1, M: [1, { jn: 1 }] }], n: [7, { $CDIn: 1 }], V: [3, { s: 1 }], B: [3, { "M^": 1 }] }], B: [3, { CD: [1, { jn: 1 }], "^n": 1, j: [4, { "M^": 1 }] }] }], n: [5, { "$?CDIfhs": 1, M: [1, { jn: 1, fhsw: [3, { j: [4, { s: 1 }], "^": 1 }] }], j: [6, { $BCDIs: 1, M: [1, { jn: 1, fhsw: [3, { "^s": 1 }] }], j: [7, { j: [3, { j: [4, { BDIMVj: 1 }], BDIMV: 1, C: [1, { jn: 1 }] }], $CDIn: 1, M: [1, { jn: 1 }] }], n: [7, { $CDIn: 1 }], V: [1, { jn: 1 }] }], n: [6, { $BCDIjs: 1, n: [7, { $CDIn: 1 }], MV: [1, { jn: 1 }] }], V: [3, { Mn: [1, { jn: 1 }], V: [1, { n: [6, { C: 1 }] }], "^": 1, j: [4, { s: 1 }] }], B: [3, { "^n": 1, j: [4, { "M^": 1 }] }] }], "^fhs": 1, C: [5, { "$?CDIhs": 1, j: [6, { "$?CDIhs": 1, B: [1, { j: 1 }], M: [1, { j: 1, n: [3, { C: [4, { n: 1 }], D: [7, { n: 1 }] }] }], V: [1, { j: [7, { $BDIMVjns: 1, C: [3, { h: 1 }] }] }], j: [7, { $CDn: 1, M: [1, { j: 1 }], j: [1, { j: 1, n: [4, { Cj: 1 }] }] }], n: [7, { $CDIj: 1, n: [3, { "CV^": 1 }], M: [1, { jn: 1 }] }] }], n: [6, { "$?CDIhs": 1, BV: [1, { j: 1 }], M: [1, { jn: 1 }], n: [7, { MV: [1, { jn: 1 }], $BCDIjn: 1 }], j: [7, { $BCDn: 1, MVj: [1, { jn: 1 }] }] }], B: [1, { j: [3, { "BCDIM^jns": 1, V: [6, { jn: 1 }] }], n: [3, { "BCDIM^jns": 1, V: [6, { n: 1 }] }] }], M: [1, { j: [6, { B: [3, { s: [7, { s: 1 }] }], C: [3, { j: [7, { $: 1 }], V: [7, { C: 1 }], s: [4, { "^": 1 }] }], D: [3, { B: [4, { I: 1 }] }], I: [3, { B: 1, I: [4, { I: 1 }] }], n: [4, { B: 1, "^": [7, { $: 1 }] }], "?": 1, j: [3, { C: [7, { D: 1 }] }] }] }], V: [1, { j: [6, { $: [3, { BCDIMhjns: 1 }], n: [3, { "BCDIM^jns": 1, V: [4, { C: 1 }] }], I: [3, { CDIM: 1 }], Ds: 1 }], n: [6, { $: [3, { BCDIMhjns: 1 }], n: [3, { "BCDI^jns": 1, M: [7, { C: 1 }], V: [4, { C: 1 }] }], I: [3, { CDIM: 1 }], BDs: 1 }] }] }], M: [5, { "$?CDIhs": 1, j: [6, { "$?CDIhns": 1, j: [7, { $BCDIj: 1, M: [1, { j: 1 }] }], M: [1, { j: 1 }], V: [1, { jn: 1 }] }], n: [6, { "$?CDIhns": 1, j: [7, { $BCDIj: 1, M: [1, { jn: 1 }] }], MV: [1, { jn: 1 }] }], M: [1, { j: [6, { $C: 1 }] }], B: [1, { jn: [6, { n: 1 }] }] }], V: [3, { C: [6, { $: [1, { f: [5, { $DIns: 1 }], hsw: [5, { $Ins: 1 }], j: [5, { j: 1 }], n: [5, { $BDIns: 1 }] }], C: [1, { fs: [5, { j: [4, { "?": 1 }], Ins: 1, D: [7, { M: 1 }] }], hw: [5, { j: [4, { "?": 1 }], DIns: 1 }], j: [4, { "?": [7, { $CV: 1 }], V: [7, { h: 1 }] }], n: [5, { j: [4, { "?": 1 }], BIns: 1, D: [7, { MV: 1 }] }] }], D: [1, { fhnsw: [5, { Ins: 1 }], j: [5, { j: 1 }] }], j: [7, { $CDIj: [1, { fhnsw: [5, { ns: 1 }], j: [5, { j: 1 }] }], V: 1 }], n: [5, { j: [1, { j: 1 }], n: [1, { fhsw: [7, { $CDIjns: 1 }], n: 1 }], Ds: [1, { fhnsw: 1 }], I: 1 }], s: [1, { fhnsw: [5, { ns: 1 }], j: [5, { j: 1 }] }], I: [5, { ns: [1, { fhnsw: 1 }], j: [1, { j: 1 }], I: [1, { n: 1 }], "?": 1 }], B: [1, { fhnsw: [5, { Is: 1 }] }], V: [1, { fhsw: [5, { s: 1 }], n: [5, { n: [4, { M: 1 }], s: 1 }] }], M: [1, { fhsw: [5, { s: 1 }], j: [5, { j: 1 }], n: [5, { ns: 1 }] }], "?": 1 }], D: [5, { jns: 1 }], Ijn: [5, { $jns: 1 }], "M^": 1, V: [5, { $jns: 1, C: [7, { C: [1, { hn: 1 }], V: 1 }] }] }], B: [3, { C: [4, { "BCDIM^fhjns": 1, V: [6, { $: [1, { fhjs: 1 }], B: [7, { $: 1 }], C: [5, { C: 1, I: [7, { M: 1 }], j: [1, { fhjsw: 1 }], n: [1, { ns: 1 }], s: [7, { $BDMVj: 1 }] }], DIV: 1, M: [1, { fhjsw: 1 }], j: [5, { Cs: 1, j: [1, { fhjsw: 1 }], n: [1, { ns: 1 }] }], n: [1, { fjs: [5, { js: 1 }], hw: 1, n: [5, { n: 1 }] }], s: [1, { fhns: 1 }] }] }], "DIV^jn": 1, M: [1, { fhjsw: [5, { $CIs: 1, j: [6, { $Cjns: 1 }] }], n: [4, { C: [5, { n: [6, { Cjns: 1 }] }], "^": [5, { n: 1 }] }] }] }], D: [5, { "$?CDIhs": 1, j: [6, { "$?CDIhjns": 1, BMV: [1, { j: 1 }] }], n: [6, { "$?CDIhjns": 1, BV: [1, { j: 1 }], M: [1, { jn: 1 }] }], B: [1, { jn: 1 }], M: [1, { j: 1 }] }], I: [5, { "$?CDIhs": 1, j: [6, { "$?CDIhns": 1, j: [7, { $CDj: 1 }], M: [1, { jn: 1 }] }], n: [6, { "$?CDIhns": 1, j: [7, { $CDj: 1 }] }], BV: [1, { jn: 1 }] }] }], "9": [1, { fhsw: [5, { $CIs: 1, "?": [2, { "?": [4, { "?IMV^": 1, C: [6, { C: 1 }] }], C: [6, { "$?CIV": 1, M: [3, { CM: 1 }] }], "V^s": 1, jn: [6, { $: [4, { "?CIV^": 1 }], "?": [4, { "?IV^": 1, CM: [3, { C: 1 }] }], CV: 1, I: [7, { "$?M": 1 }], M: [7, { $C: 1 }] }], I: [3, { "CIM^": 1, "?": [7, { $C: 1 }] }], M: [6, { $CMV: 1, "?": [4, { "CIMV^": 1 }], I: [7, { "$?M": 1 }] }] }], j: [6, { $CIs: 1, "?": [4, { "?IMV": 1, C: [2, { "?": [3, { C: 1 }], CMV: 1, I: [3, { M: 1 }] }], "^": [7, { "$?CV": 1, I: [2, { C: 1 }] }] }], j: [7, { $CIj: 1 }], M: [2, { "^": 1 }] }], n: [2, { "^ns": 1, j: [3, { j: [4, { j: 1 }], "^": 1 }] }], M: [2, { "^s": 1, j: [3, { "^": 1 }] }], V: [2, { s: 1 }] }], j: [5, { "$?CIjs": 1, n: [6, { "$?CIjns": 1, M: [2, { I: [4, { "?": 1, C: [3, { "?": 1 }], "M^": [7, { "?": 1 }] }], "?": [3, { C: [7, { $: 1 }] }], "^": 1 }] }], M: [2, { I: [4, { "?": 1, C: [3, { "?": 1 }], M: [6, { "?": 1 }] }], "^js": 1, n: [3, { I: [4, { CI: [6, { "?": 1 }] }], "^": 1 }], "?": [3, { C: [6, { "$?": 1 }] }] }], V: [2, { js: 1 }] }], n: [2, { "?": [5, { "$?CIs": 1, j: [6, { "$?CIMVj": 1 }], M: [3, { C: [6, { "$?": 1 }] }] }], C: [5, { "$?CIs": 1, j: [6, { "$?CIMV": 1 }] }], I: [5, { M: [4, { "?": 1, C: [3, { "?": 1 }], M: [6, { "?": 1 }] }], "$?CIjs": 1 }], MV: [5, { "$?CIjs": 1 }], j: [3, { "?": [5, { "$?CIMVj": 1 }], C: [5, { "$?CIMV": 1 }], IMV: 1, "^": [5, { M: 1 }] }], s: [5, { MV: 1 }], "^": [5, { M: 1, j: [6, { M: 1 }] }] }] }], a: 1, "4": [2, { "?": [6, { "$?IMNVjn": 1, C: [5, { "?CIjns": 1 }], B: [5, { "?CIs": 1 }] }], B: [4, { "?Bjn": 1, C: [3, { CIVjn: 1, M: [1, { fhjsw: [5, { CIjs: 1 }], n: [5, { n: 1 }] }] }], I: [3, { BCIj: 1, M: [5, { $C: 1, j: [6, { $: 1 }], s: [6, { C: 1 }] }] }], M: [3, { C: 1, I: [5, { "$?CIjns": 1 }], M: [1, { fsw: 1 }], n: [1, { fj: 1 }] }], N: [5, { $: 1 }], V: [7, { $: [5, { $: 1, C: [1, { fhjsw: 1 }], jns: [6, { $: 1 }] }], BCMV: 1 }], "^": [5, { "$?CIjns": 1 }] }], C: [5, { $: [3, { "?BCIMN^jns": 1, V: [4, { "MNV^jn": 1 }] }], "?": [6, { "$?C": 1, I: [1, { fhnsw: 1 }] }], C: [3, { "?BCIMN^jns": 1, V: [1, { fhnsw: 1, j: [4, { IMNjn: 1 }] }] }], I: [3, { "?BCIM^jn": 1, V: [1, { fhnsw: 1 }] }], j: [6, { $: [3, { "?BCIMN^jns": 1, V: [4, { "MNV^jn": 1 }] }], "?": [3, { "?CIM^": 1, V: [7, { "$?C": 1 }] }], C: [3, { "?BCIMN^jns": 1, V: [4, { C: [1, { j: 1 }], IMNjn: 1 }] }], I: [3, { "?BCIM^jn": 1, V: [1, { j: 1 }] }], BV: [1, { j: [3, { "?": 1 }] }], n: [3, { "CIM^": [7, { $CIn: 1 }], N: 1, V: [4, { N: 1 }], n: [7, { $C: 1 }], B: [4, { M: 1 }] }], j: [3, { M: [7, { $Cjn: 1 }], C: [7, { $CI: 1 }], "?I": 1, "^": [7, { CI: 1 }] }], hs: 1 }], n: [6, { $: [3, { "?BCIMN^jns": 1, V: [4, { "MNV^jn": 1 }] }], "?": [3, { "?CIM^": 1, V: [1, { fhnsw: 1 }] }], C: [3, { "?BCIMN^jns": 1, V: [1, { fhnsw: 1, j: [4, { IMNjn: 1 }] }] }], I: [3, { "?BCIM^jn": 1, V: [1, { fhnsw: 1 }] }], BV: [1, { j: [3, { "?": 1 }] }], N: [3, { "?BCIMN^jn": 1, V: [1, { fhnsw: 1 }] }], n: [3, { CNn: 1, IM: [7, { $CIVn: 1 }], V: [1, { fhnsw: 1 }], B: [4, { M: 1 }], "^": [7, { $BCIVn: 1 }] }], j: [3, { "?CIM^": 1 }], hs: 1 }], s: [3, { "?BCIMN^hjns": 1, V: [1, { fhnsw: 1, j: [4, { C: [7, { "?": 1 }], IMNVjn: 1 }] }] }], B: [1, { jn: [3, { "?": 1 }] }], h: 1 }], I: [4, { "?": [5, { "$?CIs": 1, jn: [6, { "$?CI": 1 }] }], B: [5, { $CIs: 1, jn: [6, { $CI: 1 }] }], C: [3, { "?BINhjn": 1, C: [5, { $CIs: 1, jn: [6, { $CI: 1 }] }], M: [5, { "$?CIs": 1, jn: [6, { "$?CIjn": 1 }] }], V: [1, { fhnsw: [5, { CIs: 1, n: [6, { CI: 1 }] }], j: [5, { j: [6, { CI: 1 }] }] }] }], IV: [5, { $CIs: 1, jn: [6, { $CIn: 1 }] }], M: [5, { "$?CIs": 1, jn: [6, { "$?CIn": 1 }] }], N: [6, { $: [5, { $CIjns: 1 }], "?CINVn": 1, M: [5, { Cs: 1 }], B: [5, { s: 1 }] }], "^": [5, { "$?CIs": 1, jn: [6, { "$?CINjn": 1 }], V: [1, { jn: 1 }] }], jns: 1 }], j: [5, { "$?Ihs": 1, C: [3, { "?BCIMN^hjns": 1, V: [6, { $I: 1, "?": [7, { "$?I": 1 }], B: [7, { CI: 1 }], C: [4, { CIMjn: 1, N: [7, { $V: 1 }] }], M: [4, { C: [7, { "?": 1 }], M: 1 }], N: [7, { $CIVn: 1 }], V: [7, { $Bn: 1, C: [4, { M: 1 }] }], j: [7, { $CVjn: 1 }], n: [7, { BIVn: 1, C: [4, { C: 1 }] }] }] }], j: [6, { "$?CIjn": 1, B: [3, { I: 1 }] }], n: [6, { "$?CIjn": 1, B: [3, { IM: 1 }], V: [3, { Vn: 1 }] }], B: [3, { C: [1, { jn: [6, { "?": 1 }] }], "B^n": 1, j: [4, { I: 1 }] }], M: [3, { I: [1, { j: [4, { "^": 1 }], n: [6, { C: [7, { V: 1 }], I: 1 }] }], N: [1, { jn: [4, { M: 1 }] }], "^": 1 }], V: [3, { C: [1, { j: [4, { "?": 1 }] }], "M^n": 1, V: [4, { "V^": 1 }] }], N: [3, { "IMN^": 1 }] }], n: [5, { "$?CINhs": 1, jn: [6, { "$?BCIVjn": 1 }], M: [3, { I: [1, { j: [4, { M: [6, { C: 1 }] }], n: [6, { C: [4, { M: 1 }], I: 1 }] }], N: [1, { jn: [4, { M: 1 }] }], "^": 1 }], V: [3, { "M^n": 1, V: [4, { "MV^": 1 }] }], B: [3, { "B^n": 1, j: [4, { I: 1 }] }] }], "^hs": 1, M: [5, { "$?CIs": 1, jn: [6, { "$?CINVjns": 1 }], B: [1, { jn: [4, { "?": 1 }] }] }], N: [5, { $CIs: 1, jn: [6, { $CINn: 1 }] }], V: [3, { C: [6, { C: [5, { j: [7, { $: [4, { "?BCIMN^jn": 1 }], C: [4, { "?BCIMN^jns": 1 }], M: [4, { "?": 1 }], B: [4, { "BCIM^": 1 }], N: 1, V: [4, { BCINjn: 1 }], n: [4, { "BCIM^n": 1 }], "?": [4, { CIMn: 1 }], I: [4, { "CIMN^n": 1 }], j: [4, { "CM^": 1 }] }], n: [4, { "?BCIMN^jns": 1, V: [1, { n: 1 }] }], s: [4, { "?BCIMN^jns": 1, V: [1, { fhsw: 1 }] }], h: 1 }], $: [5, { $jns: [4, { "BCIMN^jn": 1 }], "?h": 1 }], j: [4, { BIjn: 1, CM: [5, { jns: 1 }], V: [1, { fhsw: [5, { s: 1 }], j: [5, { j: 1 }], n: [5, { n: 1 }] }] }], n: [4, { "BCIM^n": [5, { jns: 1 }], Nj: 1, V: [1, { fhnsw: [5, { ns: 1 }], j: [5, { j: 1 }] }] }], I: [7, { $: [1, { fhnsw: [5, { ns: 1 }], j: [5, { j: 1 }] }], C: [4, { "CIM^": [5, { jns: 1 }], n: 1 }], IV: [5, { jns: 1 }], M: 1 }], hs: 1, BV: [1, { fhnsw: [5, { s: 1 }] }], "?": [5, { "?jns": 1 }], M: [5, { s: 1 }] }], I: [5, { j: [7, { $C: 1 }], $ns: 1 }], M: 1, N: [6, { C: [7, { M: [5, { Ins: 1 }], $: [5, { jns: 1 }], CN: 1 }], Ij: 1, n: [7, { n: 1 }] }], V: [5, { IVns: 1, j: [6, { C: [7, { $: 1 }], IVn: 1 }] }], j: [5, { j: [7, { $C: 1 }], ns: 1 }], n: [5, { $ns: 1, j: [7, { $C: 1 }] }], "^": [5, { Vns: 1, j: [6, { C: [7, { $: 1 }], V: 1 }] }] }] }], "5": [5, { C: [2, { "?CIM^fhns": 1, V: [4, { "?": 1, C: [3, { C: [6, { "?": 1, M: [7, { "?": 1 }] }], M: 1 }], I: [6, { "?": 1 }], M: [7, { C: [6, { "?": 1 }], "?": 1 }], V: [7, { "?": 1 }], "^": [6, { "?": 1, M: [7, { "?": 1 }] }] }], j: [3, { "?CIM^fhjns": 1, V: [7, { "$?CIVhjns": 1, M: [6, { CMn: 1 }] }] }] }], j: [6, { "$?CIfhs": 1, M: [2, { C: [1, { j: [7, { "$?CIMhjns": 1 }], n: [4, { "?": 1, C: [7, { "?": 1 }], "^": [3, { "?": 1 }] }] }], M: [1, { j: [7, { C: 1 }] }], n: [1, { jn: 1 }], s: 1 }], n: [7, { $CIjn: 1, M: [1, { jn: 1 }] }], V: [2, { M: 1 }], j: [3, { "CM^n": 1 }] }], n: [6, { "$?CIfhs": 1, M: [2, { C: [1, { jn: [7, { "$?CIMhjns": 1 }] }], M: [1, { jn: [7, { C: 1 }] }], jn: [1, { jn: 1 }], s: [1, { fhnsw: 1 }], V: 1 }], n: [7, { $CIjn: 1, M: [1, { jn: 1 }] }], V: [2, { M: 1 }], j: [3, { "CM^n": 1 }] }], "$?Ifhs": 1, M: [2, { j: [1, { j: [6, { $: [3, { C: 1 }], "?CIfhjns": 1, M: [7, { C: 1 }] }], n: [3, { C: [4, { M: [6, { "?": 1 }] }], n: 1 }] }], n: [1, { j: [6, { $: [3, { C: 1 }], "?CIfhjns": 1, M: [7, { C: 1 }] }], n: [6, { "$?CIfhjns": 1, M: [7, { C: 1 }] }] }], s: [1, { fhnsw: 1, j: [7, { "?": 1 }] }], V: 1 }], V: [1, { fhnsw: [2, { s: 1, n: [3, { M: 1 }] }], j: [2, { j: [3, { M: 1 }] }] }] }], "6": [2, { "?fhw": 1, j: [5, { "$?Ifhsw": 1, C: [3, { "?BCIM^fjns": 1, V: [4, { "BMV^jn": 1, C: [7, { C: [6, { "?": 1 }], "?": 1 }] }] }], M: [1, { j: 1, n: [6, { C: [3, { C: [4, { "?": 1 }], "^": 1 }], M: [3, { M: 1 }], "?": 1, n: [4, { C: 1 }] }], fhsw: [3, { "^": 1 }] }], V: [1, { j: [3, { "CM^": 1 }], n: [6, { C: [3, { C: [7, { "?": 1 }], M: 1 }], n: [4, { BIn: 1, CM: [3, { C: 1 }] }], I: [4, { IM: 1 }], j: 1, s: [7, { $: 1 }] }], f: [3, { "^": 1 }] }], n: [6, { $CIjn: 1, M: [1, { jn: 1 }] }], B: [3, { CV: [1, { jn: 1 }], "B^": 1, n: [4, { C: 1 }] }], j: [4, { "BCMV^jn": 1 }] }], n: [5, { "$?CIfhsw": 1, M: [1, { jn: 1, fhsw: [3, { "^": 1 }] }], jn: [6, { $CIVjn: 1, M: [1, { jn: 1 }], B: [3, { C: 1 }] }], B: [3, { "B^": 1, V: [1, { jn: 1 }], n: [4, { C: 1 }] }], V: [1, { fs: [3, { "^": 1 }], jn: [3, { "M^": 1 }], w: [3, { M: 1 }] }] }], s: [5, { "$?BCIMfhjnsw": 1, V: [7, { "$?BCIhjn": 1, M: [1, { fhsw: 1 }], V: [4, { "BCIM^n": 1 }] }] }], C: [5, { "$?CIhs": 1, j: [6, { "$?CIhs": 1, BV: [1, { j: 1 }], M: [1, { j: 1, n: [7, { n: [3, { B: 1 }], "?": 1 }] }], n: [7, { $CIn: 1, M: [1, { jn: 1 }] }], j: [3, { Mn: 1 }] }], n: [6, { "$?CIhjs": 1, BV: [1, { j: 1 }], M: [1, { jn: 1 }], n: [7, { $BCIVn: 1, M: [1, { jn: 1 }] }] }], B: [1, { jn: 1 }], V: [1, { jn: [7, { "?": 1 }] }] }], M: [5, { "$?CIsw": 1, j: [6, { "$?CIVjnw": 1, M: [1, { j: 1, n: [3, { C: [4, { V: 1 }], M: 1 }] }] }], n: [6, { "$?CIVjnw": 1, M: [1, { jn: 1 }] }], B: [1, { jn: [4, { "BCIM^jn": 1 }] }], M: [1, { j: [7, { C: 1 }] }] }], V: [3, { C: [1, { fhsw: [5, { $Is: 1, j: [4, { "?": 1 }], n: [6, { $CIjs: 1, n: [7, { $CIjn: 1 }] }], V: [4, { V: 1 }] }], j: [4, { "?": [6, { $Cn: 1 }], B: [5, { j: [7, { C: 1 }] }], "C^": [7, { "?": 1 }], IM: [5, { j: [6, { Ijn: 1 }] }], V: [5, { j: 1 }], n: [5, { j: [6, { n: 1 }] }] }], n: [5, { $BIVs: 1, j: [4, { "?": 1 }], n: [7, { "$?CIMVj": 1, B: [6, { CI: 1 }], n: [6, { Cjn: 1 }] }] }] }], BIjn: [5, { jns: 1 }], M: 1, V: [6, { $Cn: 1 }], "^": [5, { $jns: 1 }] }], B: [4, { Bjs: 1, C: [3, { BCIVn: 1, M: [6, { $IMjn: 1, B: [1, { fhjsw: 1, n: [7, { C: 1 }] }], C: [5, { C: [7, { $BCIMn: 1 }], Ijns: 1 }], V: [7, { $Ijs: 1, C: [5, { C: 1 }] }] }] }], I: [5, { $Cjns: 1 }], M: [5, { $CIVjns: 1 }], V: [3, { C: [6, { $: [5, { Ij: 1 }], B: [1, { fjs: 1 }], C: [1, { f: [7, { $CMVs: 1 }], h: [7, { $BCMs: 1 }], j: [7, { BCMVs: 1 }], n: [7, { BCs: 1 }], sw: [5, { Cjs: 1 }] }], MV: [1, { fhjsw: 1 }], s: 1, I: [7, { $B: 1, C: [1, { hw: 1 }] }], n: [5, { j: 1, s: [7, { C: 1 }] }] }], In: 1 }], "^n": [5, { $CIjns: 1 }] }], I: [5, { "$?CIs": 1, jn: [6, { "$?CIjn": 1 }], BV: [1, { jn: 1 }] }], "^": [5, { "?BCIMfjns": 1, V: [1, { fhsw: 1 }] }] }] }],
14
- fold: [{ name: "anusvara", step: "anusvara", blocks: [2304, 2432, 2560, 2688, 2816, 3072, 3200, 3328], virama: 77, anusvara: 2, rows: [[25, 21, 24], [30, 26, 29], [35, 31, 34], [40, 36, 39], [46, 42, 45]] }, { name: "nukta", step: "map", map: { "़": "", "়": "", "਼": "", "઼": "", "଼": "", "஼": "", "఼": "", "಼": "", "഼": "" } }, { name: "as-bn", step: "map", map: { ৰ: "র", ৱ: "ব" } }, { name: "chandrabindu", step: "map", map: { "ँ": "ं", "ঁ": "ং", "ਁ": "ਂ", "ઁ": "ં", "ଁ": "ଂ", "஁": "ஂ", "ఁ": "ం", "ಁ": "ಂ", "ഁ": "ം" } }]
14
+ fold: [{ name: "anusvara", step: "anusvara", blocks: [2304, 2432, 2560, 2688, 2816, 3072, 3200, 3328], virama: 77, anusvara: 2, rows: [[25, 21, 24], [30, 26, 29], [35, 31, 34], [40, 36, 39], [46, 42, 45]] }, { name: "ar-letters", step: "map", map: { ي: "ی", ى: "ی", ك: "ک", ه: "ہ", ە: "ہ" } }, { name: "nukta", step: "map", map: { "़": "", "়": "", "਼": "", "઼": "", "଼": "", "஼": "", "఼": "", "಼": "", "഼": "" } }, { name: "chandrabindu", step: "map", map: { "ँ": "ं", "ঁ": "ং", "ਁ": "ਂ", "ઁ": "ં", "ଁ": "ଂ", "஁": "ஂ", "ఁ": "ం", "ಁ": "ಂ", "ഁ": "ം" } }, { name: "as-bn", step: "map", map: { ৰ: "র", ৱ: "ব" } }, { name: "joiners", step: "map", map: { "‌": "", "‍": "" }, after: [[2304, 3583], [1536, 1791], [7248, 7295], [43968, 44031]] }, { name: "or-wa", step: "map", map: { ଵ: "ୱ" } }, { name: "ar-harakat", step: "map", map: { "ً": "", "ٌ": "", "ٍ": "", "َ": "", "ُ": "", "ِ": "", "ّ": "", "ْ": "", "ٰ": "" }, langs: ["ur"] }, { name: "ml-chillu", step: "map", map: { ൺ: "ണ്", ൻ: "ന്", ർ: "ര്", ൽ: "ല്", ൾ: "ള്", ൿ: "ക്" }, before: [[3328, 3455]] }]
15
15
  };
16
16
 
17
+ // js/lang.ts
18
+ var ISO_639_2 = "asm as ben bn guj gu hin hi kan kn kas ks mal ml mar mr nep ne ori or pan pa san sa snd sd tam ta tel te urd ur ";
19
+ function langCode(tag) {
20
+ const t = (tag ?? "").toLowerCase().split(/[-_]/)[0];
21
+ const i = t.length === 3 ? ISO_639_2.indexOf(t + " ") : -1;
22
+ return i >= 0 && i % 7 === 0 ? ISO_639_2.slice(i + 4, i + 6) : t;
23
+ }
24
+
17
25
  // js/normalize.ts
18
26
  var DIGITS = "0123456789abcdefghijklmnopqrstuvwxyz";
19
27
  var cp = (s) => s.codePointAt(0);
28
+ function fromCodePoints(cps) {
29
+ let s = "";
30
+ for (let i = 0;i < cps.length; i += 8192)
31
+ s += String.fromCodePoint(...cps.slice(i, i + 8192));
32
+ return s;
33
+ }
20
34
  function compile(r) {
21
35
  const invisible = new Map;
22
36
  for (const [c, sym2] of Object.entries(r.invisible))
@@ -127,7 +141,7 @@ function compile(r) {
127
141
  continue;
128
142
  out.push(s[i]);
129
143
  }
130
- return String.fromCodePoint(...out).normalize("NFC");
144
+ return fromCodePoints(out).normalize("NFC");
131
145
  }
132
146
  function fixed(pass, text, lang) {
133
147
  let s = text;
@@ -139,14 +153,21 @@ function compile(r) {
139
153
  }
140
154
  return s;
141
155
  }
156
+ const inRanges = (c, rs) => c !== undefined && rs.some(([lo, hi]) => c >= lo && c <= hi);
142
157
  const steps = r.fold.map((st) => {
158
+ const run = (step) => (s, lang) => st.langs && !st.langs.includes(lang ?? "") ? s : step(s);
143
159
  if (st.step === "map") {
144
160
  const m = new Map;
145
161
  for (const [from, to] of Object.entries(st.map))
146
162
  m.set(cp(from), to);
147
- return (s) => Array.from(s.map((c) => m.get(c) ?? String.fromCodePoint(c)).join(""), cp);
163
+ const { before, after } = st;
164
+ const ok = (s, i) => (!before || inRanges(s[i + 1], before)) && (!after || inRanges(i > 0 ? s[i - 1] : undefined, after));
165
+ return run((s) => Array.from(s.map((c, i) => {
166
+ const to = m.get(c);
167
+ return to !== undefined && ok(s, i) ? to : String.fromCodePoint(c);
168
+ }).join(""), cp));
148
169
  }
149
- return (s) => {
170
+ return run((s) => {
150
171
  const out = [];
151
172
  for (let i = 0;i < s.length; i++) {
152
173
  const b = st.blocks.find((b2) => s[i] >= b2 && s[i] < b2 + 128);
@@ -157,24 +178,24 @@ function compile(r) {
157
178
  out.push(s[i]);
158
179
  }
159
180
  return out;
160
- };
181
+ });
161
182
  });
162
183
  const normalize = (text, lang) => fixed(onePass, text, lang);
163
184
  const foldPass = (text, lang) => {
164
185
  let s = Array.from(normalize(text, lang), cp);
165
186
  for (const step of steps)
166
- s = step(s);
167
- return String.fromCodePoint(...s);
187
+ s = step(s, lang);
188
+ return fromCodePoints(s);
168
189
  };
169
190
  return { normalize, fold: (text, lang) => fixed(foldPass, text, lang) };
170
191
  }
171
192
  var engine = compile(rules_default);
172
193
  var RULES_VERSION = rules_default.version;
173
194
  function normalize(text, lang) {
174
- return engine.normalize(text, lang);
195
+ return engine.normalize(text, langCode(lang));
175
196
  }
176
197
  function fold(text, lang) {
177
- return engine.fold(text, lang);
198
+ return engine.fold(text, langCode(lang));
178
199
  }
179
200
  export {
180
201
  normalize,
package/dist/phonetic.js CHANGED
@@ -1,6 +1,6 @@
1
1
  // phonetic/rules.json
2
2
  var rules_default = {
3
- version: "2026-10-06",
3
+ version: "2026-10-06.1",
4
4
  folds: [
5
5
  "bn-case",
6
6
  "drop-vowels",
@@ -455,6 +455,22 @@ var rules_default = {
455
455
  also: "u"
456
456
  }
457
457
  ],
458
+ digit_zeros: [
459
+ 48,
460
+ 1632,
461
+ 1776,
462
+ 2406,
463
+ 2534,
464
+ 2662,
465
+ 2790,
466
+ 2918,
467
+ 3046,
468
+ 3174,
469
+ 3302,
470
+ 3430,
471
+ 7248,
472
+ 44016
473
+ ],
458
474
  max_keys: 16,
459
475
  suffixes: [
460
476
  {
@@ -736,7 +752,21 @@ function compile(rules) {
736
752
  }
737
753
  return vs;
738
754
  }
755
+ function number(word) {
756
+ let out = "";
757
+ for (let i = 0;i < word.length; i++) {
758
+ const o = word.charCodeAt(i);
759
+ const z = rules.digit_zeros.find((z2) => o >= z2 && o <= z2 + 9);
760
+ if (z === undefined)
761
+ return;
762
+ out += String.fromCharCode(48 + o - z);
763
+ }
764
+ return out || undefined;
765
+ }
739
766
  return function keys(word) {
767
+ const n = number(word);
768
+ if (n !== undefined)
769
+ return [n];
740
770
  const bases = [word];
741
771
  const first = word.charCodeAt(0);
742
772
  for (const sf of rules.suffixes) {
@@ -753,6 +783,7 @@ function compile(rules) {
753
783
  for (const base of bases)
754
784
  for (const v of variants(base))
755
785
  out.add(fold(v));
786
+ out.delete("");
756
787
  return [...out].sort();
757
788
  };
758
789
  }
@@ -768,7 +799,7 @@ function keys(word) {
768
799
  return w ? engine(w) : [];
769
800
  }
770
801
  function words(name) {
771
- return name.replace(/\([^)]*\)/g, " ").split(/[\s.\-,'’]+/u).filter(Boolean);
802
+ return name.replace(/\([^)]*\)/g, " ").split(/[^\S\ufeff]|[\x1c-\x1f\x85.\-,'’]/u).filter(Boolean);
772
803
  }
773
804
  function nameKeys(name) {
774
805
  let out = [""];
package/dist/stem.js CHANGED
@@ -7,6 +7,14 @@ var rules_default = {
7
7
  languages: { as: { vowel_step: true, endings: ["ও", "ক", "কক", "কত", "কে", "কৰ", "খন", "খনৰ", "গত", "ছিল", "ছে", "জন", "টো", "টোক", "টোত", "টোৰ", "টোৱে", "ত", "তত", "তে", "তো", "তৰ", "বলৈ", "বোৰ", "বোৰৰ", "মূলক", "য়ে", "লৈ", "লৈকে", "সকলক", "সকলে", "সকলৰ", "সমূহ", "সমূহক", "সমূহে", "সমূহৰ", "াই", "াক", "াব", "ায়", "ালে", "াৰ", "াৰত", "াৰে", "িব", "িবলৈ", "িয়ে", "িলে", "িৰ", "ীয়", "ীয়ে", "ীৰ", "েৰে", "োৱা", "োৱে", "্ত", "ৰ", "ৰক", "ৰত", "ৰলৈ", "ৰি", "ৰে", "ৰো", "ৰৰ"] }, bn: { vowel_step: true, endings: ["ও", "করণ", "গত", "গুলি", "গুলিকে", "গুলিতে", "গুলির", "ছে", "টার", "তে", "দের", "মূলক", "রা", "রার", "াই", "াকে", "াটি", "ানো", "ায়", "ার", "ারকে", "ারে", "ারের", "িকে", "িয়ে", "ির", "ীর", "ুর", "েন", "ের"] }, gu: { vowel_step: false, endings: ["ં", "એ", "ઓ", "ણા", "થી", "ના", "ની", "નું", "ને", "નો", "માં", "વા", "વાની", "વાનું", "વાનો", "વામાં", "વી", "વું", "શે", "ા", "ાં", "ાએ", "ાઓ", "ાઓની", "ાઓને", "ાઓમાં", "ાના", "ાની", "ાનું", "ાને", "ાનો", "ામાં", "ાય", "િત", "ી", "ીએ", "ીઓ", "ીઓને", "ીના", "ીની", "ીને", "ીમાં", "ીય", "ુ", "ું", "ે", "ો", "ોએ", "ોના", "ોની", "ોનું", "ોને", "ોનો", "ોમાં", "્યા", "્યું", "્સ"] }, hi: { vowel_step: true, endings: ["ं", "एँ", "एं", "ओं", "कर", "ता", "ताओं", "ती", "ते", "ना", "नी", "ने", "पूर्ण", "यां", "ाना", "ाने", "ाया", "ियाँ", "ियों", "्"] }, kn: { vowel_step: true, endings: ["ಕ್ಕಾಗಿ", "ಕ್ಕೆ", "ಗಳ", "ಗಳನ್ನು", "ಗಳಲ್ಲಿ", "ಗಳಿಂದ", "ಗಳಿಗೆ", "ಗಳು", "ಗಾಗಿ", "ಗೆ", "ತ್ತವೆ", "ತ್ತಾನೆ", "ತ್ತಾರೆ", "ದ", "ದನು", "ದರು", "ದಲ್ಲಿ", "ದವು", "ದಿಂದ", "ದ್ದಾರೆ", "ನನ್ನು", "ನು", "ನ್ನು", "ಬೇಕು", "ಯನ್ನು", "ಯಲ್ಲಿ", "ಯಾಗಿ", "ಯಿಂದ", "ಯಿತು", "ಯು", "ರೆ", "ಲಿನ", "ಲು", "ಲ್ಲಿ", "ವನ್ನು", "ವರು", "ವಾಗಿ", "ವಾಗಿದೆ", "ವಾದ", "ವು", "ಾಗಿ", "ಾಗಿದೆ", "ಿಂದ", "ಿಗೂ", "ಿತ", "ಿತು", "ಿದೆ", "ಿನ", "ಿನಿಂದ", "ಿಯ", "ುತ್ತದೆ", "ುವ", "ುವುದು", "ೆಯ", "ೊಂದಿಗೆ", "್"] }, ml: { vowel_step: true, endings: ["ം", "കയും", "കളിലും", "കളിൽ", "കളും", "കളുടെ", "കളെ", "കൾ", "കൾക്ക്", "ങ്ങളിൽ", "ങ്ങളും", "ങ്ങളെ", "ങ്ങൾ", "ച്ച്", "ത്തിന്", "ത്തിലെ", "ത്തിൽ", "നും", "നുള്ള", "നെ", "ന്", "ന്ന", "ന്നത്", "ന്റെ", "മാണ്", "മായ", "മായി", "മാർ", "മുള്ള", "യാണ്", "യായി", "യിലും", "യിലെ", "യിൽ", "യും", "യുടെ", "യെ", "യ്ക്ക്", "രുടെ", "രെ", "റെ", "ല്ല", "ള്ള", "വും", "വ്", "ായി", "ിക്ക്", "ിലുള്ള", "ിലെ", "ിൽ", "ുക", "ുന്നു", "്", "്ടു", "്സ്", "ൺ", "ൻ", "ർക്ക്"] }, mr: { vowel_step: false, endings: ["ं", "चा", "ची", "चे", "च्या", "ने", "पणे", "मधील", "मध्ये", "ही", "ा", "ांचा", "ांची", "ांचे", "ांच्या", "ांत", "ांना", "ांनी", "ांवर", "ांशी", "ांसाठी", "ाचा", "ाची", "ाचे", "ाच्या", "ात", "ातील", "ातून", "ानंतर", "ाना", "ाने", "ाला", "ावर", "ाशी", "ासाठी", "ित", "ी", "ीचा", "ीची", "ीचे", "ीच्या", "ीत", "ीतील", "ीने", "ीमध्ये", "ीय", "ील", "ीला", "ीसाठी", "े", "ेचा", "ेची", "ेचे", "ेच्या", "ेत", "ेने", "ेला", "ेवर", "ो", "्य", "्या", "्यांचा", "्यांची", "्यांना", "्याचा", "्याची", "्याचे", "्यात", "्याने", "्याला", "्ये"] }, ne: { vowel_step: true, endings: ["ं", "का", "की", "को", "देखि", "द्वारा", "बाट", "भन्दा", "मा", "माथि", "सँग", "सम्म", "हरूका", "हरूको", "हरूमा", "हरूलाई", "हरूले", "ामा", "ालाई", "ाले", "ाहरू", "िएका", "ित", "िन", "िने", "िन्", "िहरू", "ीमा", "ीलाई", "ीले", "ीहरू", "ेका", "ेन", "ेर", "्छ", "्छन्", "्दा", "्दै", "्न", "्नु", "्ने", "्यो"] }, pa: { vowel_step: true, endings: ["ਆਂ", "ਇਆ", "ਈ", "ਈਆਂ", "ਉਂਦਾ", "ਉਂਦੇ", "ਉਣ", "ਉਣਾ", "ਏ", "ਕ", "ਕਤਾ", "ਕਰਨ", "ਕਾਂ", "ਣ", "ਣਾ", "ਣਾਂ", "ਤਾ", "ਨ", "ਨਾ", "ਨਾਂ", "਼", "਼ਾਂ", "਼ੀ", "ਾਂ", "ਾਏ", "ਾਨ", "ਾਵਾਂ", "ਿਆ", "ਿਤ", "ੀਂ", "ੀਆ", "ੇਂ", "ੋਂ"] }, sa: { vowel_step: false, endings: ["ं", "ः", "त्", "द्", "न्", "म्", "य", "या", "याः", "याम्", "यै", "योः", "षु", "सु", "स्य", "ा", "ाः", "ाणि", "ात्", "ानाम्", "ानि", "ान्", "ाम्", "ाय", "ायाः", "ायाम्", "ासु", "िनः", "ी", "े", "ेण", "ेन", "ेभ्यः", "ेषु", "ैः", "ौ"] }, ta: { vowel_step: true, endings: ["களால்", "களின்", "களில்", "களுடன்", "களை", "களைப்", "கள்", "கின்றன", "கிறார்", "க்", "க்கள்", "க்காக", "க்கான", "ச்", "த்", "ன", "னர்", "னார்", "னால்", "னின்", "ன்", "ப்", "ப்பட்ட", "மான", "ய", "யாக", "யான", "யால்", "யின்", "யில்", "யுடன்", "யே", "யை", "ய்", "ற்கு", "லாம்", "லின்", "வது", "வர்", "வர்கள்", "வின்", "வில்", "வில்லை", "ாக", "ாத", "ார்", "ார்கள்", "ால்", "ாவின்", "ிக்கு", "ின்", "ிய", "ியது", "ியில்", "ிறது", "ில்", "ுகிறது", "ுக்கு", "ுடன்", "ுதல்", "ும்", "ுள்ள", "ுள்ளது", "ைக்கு", "ையில்", "ையும்", "ோடு", "்டது"] }, te: { vowel_step: true, endings: ["ం", "ంగా", "ంతో", "ందని", "ంది", "ంలో", "ంలోని", "గా", "టు", "డు", "తో", "నాడు", "ని", "నికి", "ను", "న్న", "న్నాడు", "న్నాయి", "న్నారు", "పై", "మని", "ము", "మైన", "లకు", "లతో", "లను", "లపై", "లలో", "లు", "లో", "లోకి", "లోని", "ల్లో", "ాను", "ాన్ని", "ాయి", "ారు", "ించారు", "ించిన", "ికి", "ుడు", "ుతో", "ుని", "ుల", "్", "్న", "్‌లో"] }, ur: { vowel_step: false, endings: ["ئی", "ئیں", "ئے", "اء", "ائی", "ات", "اں", "تا", "تہ", "تی", "تے", "را", "ری", "ریوں", "رے", "ز", "نا", "نی", "نیوں", "نے", "و", "وں", "ِ", "ٰ", "ٹنگ", "ں", "ہ", "ہوں", "یا", "یت", "ین", "ینی", "یں", "ے"] } }
8
8
  };
9
9
 
10
+ // js/lang.ts
11
+ var ISO_639_2 = "asm as ben bn guj gu hin hi kan kn kas ks mal ml mar mr nep ne ori or pan pa san sa snd sd tam ta tel te urd ur ";
12
+ function langCode(tag) {
13
+ const t = (tag ?? "").toLowerCase().split(/[-_]/)[0];
14
+ const i = t.length === 3 ? ISO_639_2.indexOf(t + " ") : -1;
15
+ return i >= 0 && i % 7 === 0 ? ISO_639_2.slice(i + 4, i + 6) : t;
16
+ }
17
+
10
18
  // js/stem.ts
11
19
  var MIN_STEM = rules_default.min_stem;
12
20
  var MAX_END = rules_default.max_end;
@@ -18,7 +26,7 @@ var TABLES = new Map(Object.entries(rules_default.languages).map(([lang, l]) =>
18
26
  var RULES_VERSION = rules_default.version;
19
27
  var LANGUAGES = [...TABLES.keys()].sort();
20
28
  function stem(word, lang) {
21
- const t = TABLES.get(lang);
29
+ const t = TABLES.get(langCode(lang));
22
30
  if (!t)
23
31
  return word;
24
32
  const r = Array.from(word);
@@ -0,0 +1 @@
1
+ export declare function langCode(tag: string | undefined): string;
@@ -9,7 +9,8 @@
9
9
  * information on purpose: apply it to a query and to an index, never to
10
10
  * stored text.
11
11
  *
12
- * `lang` is a language code ("as", "hi", ...). Assamese text needs it: after
12
+ * `lang` is a language tag ("as", "hi", "as-IN", "asm"); only its language
13
+ * counts, not case, region or script. Assamese text needs it: after
13
14
  * a virama, Assamese ৰ and Bengali র look alike, and each language keeps its
14
15
  * own.
15
16
  *
@@ -19,6 +19,7 @@ export declare const RULES_VERSION: string;
19
19
  export declare const LANGUAGES: readonly string[];
20
20
  /**
21
21
  * The search key of `word` in language `lang` (as bn gu hi kn ml mr ne pa
22
- * sa ta te ur). For any other `lang`, `word` unchanged.
22
+ * sa ta te ur). Only the tag's language counts: "ta-IN", "TA" and "tam" are
23
+ * "ta". For any other `lang`, `word` unchanged.
23
24
  */
24
25
  export declare function stem(word: string, lang: string): string;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "indickit",
3
- "version": "0.4.2",
3
+ "version": "0.5.0",
4
4
  "description": "Small, exact utilities for text in Indian languages: a phonetic key that matches a name across 21 Indian scripts and English, a normalizer that gives text that looks the same one encoding, a segmenter for the letters a reader sees, and a stemmer for search.",
5
5
  "license": "MIT",
6
6
  "packageManager": "bun@1.3.14",