summaryrefslogtreecommitdiffstats
path: root/chrome/third_party/hunspell
diff options
context:
space:
mode:
Diffstat (limited to 'chrome/third_party/hunspell')
-rw-r--r--chrome/third_party/hunspell/COPYING12
-rw-r--r--chrome/third_party/hunspell/COPYING.LGPL515
-rw-r--r--chrome/third_party/hunspell/COPYING.MPL470
-rw-r--r--chrome/third_party/hunspell/README129
-rw-r--r--chrome/third_party/hunspell/README.google29
-rw-r--r--chrome/third_party/hunspell/README.myspell69
-rw-r--r--chrome/third_party/hunspell/SConscript83
-rw-r--r--chrome/third_party/hunspell/copy_dictionary_files.rules19
-rw-r--r--chrome/third_party/hunspell/dictionaries/en-US.aff1040
-rw-r--r--chrome/third_party/hunspell/dictionaries/en-US.bdicbin0 -> 543578 bytes
-rw-r--r--chrome/third_party/hunspell/dictionaries/en-US.dic62160
-rw-r--r--chrome/third_party/hunspell/google.patch230
-rw-r--r--chrome/third_party/hunspell/google/bdict.h196
-rw-r--r--chrome/third_party/hunspell/google/bdict_reader.cc724
-rw-r--r--chrome/third_party/hunspell/google/bdict_reader.h151
-rw-r--r--chrome/third_party/hunspell/google/bdict_writer.cc496
-rw-r--r--chrome/third_party/hunspell/google/bdict_writer.h68
-rw-r--r--chrome/third_party/hunspell/google/hunspell_tests.cc214
-rw-r--r--chrome/third_party/hunspell/hunspell.vcproj260
-rw-r--r--chrome/third_party/hunspell/hunspell.vsprops12
-rw-r--r--chrome/third_party/hunspell/src/hunspell/README21
-rw-r--r--chrome/third_party/hunspell/src/hunspell/affentry.cxx870
-rw-r--r--chrome/third_party/hunspell/src/hunspell/affentry.hxx131
-rw-r--r--chrome/third_party/hunspell/src/hunspell/affixmgr.cxx4096
-rw-r--r--chrome/third_party/hunspell/src/hunspell/affixmgr.hxx273
-rw-r--r--chrome/third_party/hunspell/src/hunspell/atypes.hxx101
-rw-r--r--chrome/third_party/hunspell/src/hunspell/baseaffix.hxx31
-rw-r--r--chrome/third_party/hunspell/src/hunspell/csutil.cxx5252
-rw-r--r--chrome/third_party/hunspell/src/hunspell/csutil.hxx141
-rw-r--r--chrome/third_party/hunspell/src/hunspell/dictmgr.cxx173
-rw-r--r--chrome/third_party/hunspell/src/hunspell/dictmgr.hxx34
-rw-r--r--chrome/third_party/hunspell/src/hunspell/hashmgr.cxx911
-rw-r--r--chrome/third_party/hunspell/src/hunspell/hashmgr.hxx99
-rw-r--r--chrome/third_party/hunspell/src/hunspell/htypes.hxx31
-rw-r--r--chrome/third_party/hunspell/src/hunspell/hunspell.cxx1747
-rw-r--r--chrome/third_party/hunspell/src/hunspell/hunspell.dsp164
-rw-r--r--chrome/third_party/hunspell/src/hunspell/hunspell.h33
-rw-r--r--chrome/third_party/hunspell/src/hunspell/hunspell.hxx154
-rw-r--r--chrome/third_party/hunspell/src/hunspell/langnum.hxx38
-rw-r--r--chrome/third_party/hunspell/src/hunspell/license.hunspell57
-rw-r--r--chrome/third_party/hunspell/src/hunspell/license.myspell61
-rw-r--r--chrome/third_party/hunspell/src/hunspell/suggestmgr.cxx1663
-rw-r--r--chrome/third_party/hunspell/src/hunspell/suggestmgr.hxx95
-rw-r--r--chrome/third_party/hunspell/src/hunspell/utf_info.hxx8506
-rw-r--r--chrome/third_party/hunspell/src/parsers/textparser.cxx205
-rw-r--r--chrome/third_party/hunspell/src/parsers/textparser.hxx60
-rw-r--r--chrome/third_party/hunspell/tests/1592880.aff18
-rw-r--r--chrome/third_party/hunspell/tests/1592880.dic4
-rw-r--r--chrome/third_party/hunspell/tests/1592880.good3
-rw-r--r--chrome/third_party/hunspell/tests/1592880.test4
-rw-r--r--chrome/third_party/hunspell/tests/Makefile.am406
-rw-r--r--chrome/third_party/hunspell/tests/Makefile.in826
-rw-r--r--chrome/third_party/hunspell/tests/affixes.aff7
-rw-r--r--chrome/third_party/hunspell/tests/affixes.dic4
-rw-r--r--chrome/third_party/hunspell/tests/affixes.good7
-rw-r--r--chrome/third_party/hunspell/tests/affixes.test4
-rw-r--r--chrome/third_party/hunspell/tests/alias.aff12
-rw-r--r--chrome/third_party/hunspell/tests/alias.dic2
-rw-r--r--chrome/third_party/hunspell/tests/alias.good4
-rw-r--r--chrome/third_party/hunspell/tests/alias.test4
-rw-r--r--chrome/third_party/hunspell/tests/alias2.aff17
-rw-r--r--chrome/third_party/hunspell/tests/alias2.dic2
-rw-r--r--chrome/third_party/hunspell/tests/alias2.good4
-rw-r--r--chrome/third_party/hunspell/tests/alias2.morph8
-rw-r--r--chrome/third_party/hunspell/tests/alias2.test4
-rw-r--r--chrome/third_party/hunspell/tests/alias3.aff18
-rw-r--r--chrome/third_party/hunspell/tests/alias3.dic2
-rw-r--r--chrome/third_party/hunspell/tests/alias3.good4
-rw-r--r--chrome/third_party/hunspell/tests/alias3.morph8
-rw-r--r--chrome/third_party/hunspell/tests/alias3.test4
-rw-r--r--chrome/third_party/hunspell/tests/base.aff192
-rw-r--r--chrome/third_party/hunspell/tests/base.dic28
-rw-r--r--chrome/third_party/hunspell/tests/base.good22
-rw-r--r--chrome/third_party/hunspell/tests/base.sug10
-rw-r--r--chrome/third_party/hunspell/tests/base.test4
-rw-r--r--chrome/third_party/hunspell/tests/base.wrong11
-rw-r--r--chrome/third_party/hunspell/tests/break.aff8
-rw-r--r--chrome/third_party/hunspell/tests/break.dic4
-rw-r--r--chrome/third_party/hunspell/tests/break.good7
-rw-r--r--chrome/third_party/hunspell/tests/break.test4
-rw-r--r--chrome/third_party/hunspell/tests/break.wrong10
-rw-r--r--chrome/third_party/hunspell/tests/checkcompoundcase.aff3
-rw-r--r--chrome/third_party/hunspell/tests/checkcompoundcase.dic5
-rw-r--r--chrome/third_party/hunspell/tests/checkcompoundcase.good5
-rw-r--r--chrome/third_party/hunspell/tests/checkcompoundcase.test4
-rw-r--r--chrome/third_party/hunspell/tests/checkcompoundcase.wrong3
-rw-r--r--chrome/third_party/hunspell/tests/checkcompoundcase2.aff3
-rw-r--r--chrome/third_party/hunspell/tests/checkcompoundcase2.dic3
-rw-r--r--chrome/third_party/hunspell/tests/checkcompoundcase2.good2
-rw-r--r--chrome/third_party/hunspell/tests/checkcompoundcase2.test4
-rw-r--r--chrome/third_party/hunspell/tests/checkcompoundcase2.wrong1
-rw-r--r--chrome/third_party/hunspell/tests/checkcompoundcaseutf.aff3
-rw-r--r--chrome/third_party/hunspell/tests/checkcompoundcaseutf.dic3
-rw-r--r--chrome/third_party/hunspell/tests/checkcompoundcaseutf.good2
-rw-r--r--chrome/third_party/hunspell/tests/checkcompoundcaseutf.test4
-rw-r--r--chrome/third_party/hunspell/tests/checkcompoundcaseutf.wrong1
-rw-r--r--chrome/third_party/hunspell/tests/checkcompounddup.aff3
-rw-r--r--chrome/third_party/hunspell/tests/checkcompounddup.dic3
-rw-r--r--chrome/third_party/hunspell/tests/checkcompounddup.good5
-rw-r--r--chrome/third_party/hunspell/tests/checkcompounddup.test4
-rw-r--r--chrome/third_party/hunspell/tests/checkcompounddup.wrong3
-rw-r--r--chrome/third_party/hunspell/tests/checkcompoundpattern.aff5
-rw-r--r--chrome/third_party/hunspell/tests/checkcompoundpattern.dic5
-rw-r--r--chrome/third_party/hunspell/tests/checkcompoundpattern.good2
-rw-r--r--chrome/third_party/hunspell/tests/checkcompoundpattern.test4
-rw-r--r--chrome/third_party/hunspell/tests/checkcompoundpattern.wrong4
-rw-r--r--chrome/third_party/hunspell/tests/checkcompoundrep.aff8
-rw-r--r--chrome/third_party/hunspell/tests/checkcompoundrep.dic4
-rw-r--r--chrome/third_party/hunspell/tests/checkcompoundrep.good1
-rw-r--r--chrome/third_party/hunspell/tests/checkcompoundrep.test4
-rw-r--r--chrome/third_party/hunspell/tests/checkcompoundrep.wrong1
-rw-r--r--chrome/third_party/hunspell/tests/checkcompoundtriple.aff3
-rw-r--r--chrome/third_party/hunspell/tests/checkcompoundtriple.dic5
-rw-r--r--chrome/third_party/hunspell/tests/checkcompoundtriple.good6
-rw-r--r--chrome/third_party/hunspell/tests/checkcompoundtriple.test4
-rw-r--r--chrome/third_party/hunspell/tests/checkcompoundtriple.wrong2
-rw-r--r--chrome/third_party/hunspell/tests/checksharps.aff4
-rw-r--r--chrome/third_party/hunspell/tests/checksharps.dic7
-rw-r--r--chrome/third_party/hunspell/tests/checksharps.good13
-rw-r--r--chrome/third_party/hunspell/tests/checksharps.sug1
-rw-r--r--chrome/third_party/hunspell/tests/checksharps.test4
-rw-r--r--chrome/third_party/hunspell/tests/checksharps.wrong1
-rw-r--r--chrome/third_party/hunspell/tests/checksharpsutf.aff5
-rw-r--r--chrome/third_party/hunspell/tests/checksharpsutf.dic7
-rw-r--r--chrome/third_party/hunspell/tests/checksharpsutf.good13
-rw-r--r--chrome/third_party/hunspell/tests/checksharpsutf.sug1
-rw-r--r--chrome/third_party/hunspell/tests/checksharpsutf.test4
-rw-r--r--chrome/third_party/hunspell/tests/checksharpsutf.wrong1
-rw-r--r--chrome/third_party/hunspell/tests/circumfix.aff16
-rw-r--r--chrome/third_party/hunspell/tests/circumfix.dic2
-rw-r--r--chrome/third_party/hunspell/tests/circumfix.good4
-rw-r--r--chrome/third_party/hunspell/tests/circumfix.morph8
-rw-r--r--chrome/third_party/hunspell/tests/circumfix.test4
-rw-r--r--chrome/third_party/hunspell/tests/circumfix.wrong2
-rw-r--r--chrome/third_party/hunspell/tests/complexprefixes.aff9
-rw-r--r--chrome/third_party/hunspell/tests/complexprefixes.dic3
-rw-r--r--chrome/third_party/hunspell/tests/complexprefixes.good3
-rw-r--r--chrome/third_party/hunspell/tests/complexprefixes.test4
-rw-r--r--chrome/third_party/hunspell/tests/complexprefixes.wrong2
-rw-r--r--chrome/third_party/hunspell/tests/complexprefixes2.aff12
-rw-r--r--chrome/third_party/hunspell/tests/complexprefixes2.dic3
-rw-r--r--chrome/third_party/hunspell/tests/complexprefixes2.good4
-rw-r--r--chrome/third_party/hunspell/tests/complexprefixes2.test4
-rw-r--r--chrome/third_party/hunspell/tests/complexprefixesutf.aff12
-rw-r--r--chrome/third_party/hunspell/tests/complexprefixesutf.dic2
-rw-r--r--chrome/third_party/hunspell/tests/complexprefixesutf.good3
-rw-r--r--chrome/third_party/hunspell/tests/complexprefixesutf.test4
-rw-r--r--chrome/third_party/hunspell/tests/complexprefixesutf.wrong2
-rw-r--r--chrome/third_party/hunspell/tests/compoundaffix.aff7
-rw-r--r--chrome/third_party/hunspell/tests/compoundaffix.dic3
-rw-r--r--chrome/third_party/hunspell/tests/compoundaffix.good6
-rw-r--r--chrome/third_party/hunspell/tests/compoundaffix.test4
-rw-r--r--chrome/third_party/hunspell/tests/compoundaffix.wrong3
-rw-r--r--chrome/third_party/hunspell/tests/compoundaffix2.aff8
-rw-r--r--chrome/third_party/hunspell/tests/compoundaffix2.dic3
-rw-r--r--chrome/third_party/hunspell/tests/compoundaffix2.good8
-rw-r--r--chrome/third_party/hunspell/tests/compoundaffix2.test4
-rw-r--r--chrome/third_party/hunspell/tests/compoundaffix3.aff8
-rw-r--r--chrome/third_party/hunspell/tests/compoundaffix3.dic3
-rw-r--r--chrome/third_party/hunspell/tests/compoundaffix3.good5
-rw-r--r--chrome/third_party/hunspell/tests/compoundaffix3.test4
-rw-r--r--chrome/third_party/hunspell/tests/compoundaffix3.wrong6
-rw-r--r--chrome/third_party/hunspell/tests/compoundflag.aff3
-rw-r--r--chrome/third_party/hunspell/tests/compoundflag.dic5
-rw-r--r--chrome/third_party/hunspell/tests/compoundflag.good3
-rw-r--r--chrome/third_party/hunspell/tests/compoundflag.test4
-rw-r--r--chrome/third_party/hunspell/tests/compoundflag.wrong4
-rw-r--r--chrome/third_party/hunspell/tests/compoundrule.aff3
-rw-r--r--chrome/third_party/hunspell/tests/compoundrule.dic5
-rw-r--r--chrome/third_party/hunspell/tests/compoundrule.good2
-rw-r--r--chrome/third_party/hunspell/tests/compoundrule.test4
-rw-r--r--chrome/third_party/hunspell/tests/compoundrule.wrong39
-rw-r--r--chrome/third_party/hunspell/tests/compoundrule2.aff3
-rw-r--r--chrome/third_party/hunspell/tests/compoundrule2.dic5
-rw-r--r--chrome/third_party/hunspell/tests/compoundrule2.good37
-rw-r--r--chrome/third_party/hunspell/tests/compoundrule2.test4
-rw-r--r--chrome/third_party/hunspell/tests/compoundrule2.wrong8
-rw-r--r--chrome/third_party/hunspell/tests/compoundrule3.aff3
-rw-r--r--chrome/third_party/hunspell/tests/compoundrule3.dic5
-rw-r--r--chrome/third_party/hunspell/tests/compoundrule3.good7
-rw-r--r--chrome/third_party/hunspell/tests/compoundrule3.test4
-rw-r--r--chrome/third_party/hunspell/tests/compoundrule3.wrong41
-rw-r--r--chrome/third_party/hunspell/tests/compoundrule4.aff7
-rw-r--r--chrome/third_party/hunspell/tests/compoundrule4.dic24
-rw-r--r--chrome/third_party/hunspell/tests/compoundrule4.good29
-rw-r--r--chrome/third_party/hunspell/tests/compoundrule4.test6
-rw-r--r--chrome/third_party/hunspell/tests/compoundrule4.wrong5
-rw-r--r--chrome/third_party/hunspell/tests/compoundrule5.aff7
-rw-r--r--chrome/third_party/hunspell/tests/compoundrule5.dic14
-rw-r--r--chrome/third_party/hunspell/tests/compoundrule5.good7
-rw-r--r--chrome/third_party/hunspell/tests/compoundrule5.morph14
-rw-r--r--chrome/third_party/hunspell/tests/compoundrule5.test4
-rw-r--r--chrome/third_party/hunspell/tests/compoundrule5.wrong1
-rw-r--r--chrome/third_party/hunspell/tests/compoundrule6.aff4
-rw-r--r--chrome/third_party/hunspell/tests/compoundrule6.dic5
-rw-r--r--chrome/third_party/hunspell/tests/compoundrule6.good4
-rw-r--r--chrome/third_party/hunspell/tests/compoundrule6.test4
-rw-r--r--chrome/third_party/hunspell/tests/compoundrule6.wrong4
-rw-r--r--chrome/third_party/hunspell/tests/conditionalprefix.aff11
-rw-r--r--chrome/third_party/hunspell/tests/conditionalprefix.dic3
-rw-r--r--chrome/third_party/hunspell/tests/conditionalprefix.good6
-rw-r--r--chrome/third_party/hunspell/tests/conditionalprefix.morph14
-rw-r--r--chrome/third_party/hunspell/tests/conditionalprefix.test4
-rw-r--r--chrome/third_party/hunspell/tests/conditionalprefix.wrong2
-rw-r--r--chrome/third_party/hunspell/tests/flag.aff13
-rw-r--r--chrome/third_party/hunspell/tests/flag.dic2
-rw-r--r--chrome/third_party/hunspell/tests/flag.good8
-rw-r--r--chrome/third_party/hunspell/tests/flag.test4
-rw-r--r--chrome/third_party/hunspell/tests/flaglong.aff14
-rw-r--r--chrome/third_party/hunspell/tests/flaglong.dic2
-rw-r--r--chrome/third_party/hunspell/tests/flaglong.good8
-rw-r--r--chrome/third_party/hunspell/tests/flaglong.test4
-rw-r--r--chrome/third_party/hunspell/tests/flagnum.aff14
-rw-r--r--chrome/third_party/hunspell/tests/flagnum.dic2
-rw-r--r--chrome/third_party/hunspell/tests/flagnum.good8
-rw-r--r--chrome/third_party/hunspell/tests/flagnum.test4
-rw-r--r--chrome/third_party/hunspell/tests/flagutf8.aff15
-rw-r--r--chrome/third_party/hunspell/tests/flagutf8.dic2
-rw-r--r--chrome/third_party/hunspell/tests/flagutf8.good8
-rw-r--r--chrome/third_party/hunspell/tests/flagutf8.test4
-rw-r--r--chrome/third_party/hunspell/tests/fogemorpheme.aff12
-rw-r--r--chrome/third_party/hunspell/tests/fogemorpheme.dic3
-rw-r--r--chrome/third_party/hunspell/tests/fogemorpheme.good3
-rw-r--r--chrome/third_party/hunspell/tests/fogemorpheme.test4
-rw-r--r--chrome/third_party/hunspell/tests/fogemorpheme.wrong3
-rw-r--r--chrome/third_party/hunspell/tests/forbiddenword.aff11
-rw-r--r--chrome/third_party/hunspell/tests/forbiddenword.dic8
-rw-r--r--chrome/third_party/hunspell/tests/forbiddenword.good3
-rw-r--r--chrome/third_party/hunspell/tests/forbiddenword.test4
-rw-r--r--chrome/third_party/hunspell/tests/forbiddenword.wrong4
-rw-r--r--chrome/third_party/hunspell/tests/germancompounding.aff91
-rw-r--r--chrome/third_party/hunspell/tests/germancompounding.dic5
-rw-r--r--chrome/third_party/hunspell/tests/germancompounding.good20
-rw-r--r--chrome/third_party/hunspell/tests/germancompounding.test4
-rw-r--r--chrome/third_party/hunspell/tests/germancompounding.wrong50
-rw-r--r--chrome/third_party/hunspell/tests/germancompoundingold.aff96
-rw-r--r--chrome/third_party/hunspell/tests/germancompoundingold.dic5
-rw-r--r--chrome/third_party/hunspell/tests/germancompoundingold.good14
-rw-r--r--chrome/third_party/hunspell/tests/germancompoundingold.test4
-rw-r--r--chrome/third_party/hunspell/tests/germancompoundingold.wrong50
-rw-r--r--chrome/third_party/hunspell/tests/i35725.aff203
-rw-r--r--chrome/third_party/hunspell/tests/i35725.dic15
-rw-r--r--chrome/third_party/hunspell/tests/i35725.good1
-rw-r--r--chrome/third_party/hunspell/tests/i35725.sug10
-rw-r--r--chrome/third_party/hunspell/tests/i35725.test4
-rw-r--r--chrome/third_party/hunspell/tests/i35725.wrong10
-rw-r--r--chrome/third_party/hunspell/tests/i53643.aff2
-rw-r--r--chrome/third_party/hunspell/tests/i53643.dic2
-rw-r--r--chrome/third_party/hunspell/tests/i53643.good19
-rw-r--r--chrome/third_party/hunspell/tests/i53643.test4
-rw-r--r--chrome/third_party/hunspell/tests/i53643.wrong4
-rw-r--r--chrome/third_party/hunspell/tests/i54633.aff1
-rw-r--r--chrome/third_party/hunspell/tests/i54633.dic2
-rw-r--r--chrome/third_party/hunspell/tests/i54633.good2
-rw-r--r--chrome/third_party/hunspell/tests/i54633.sug2
-rw-r--r--chrome/third_party/hunspell/tests/i54633.test4
-rw-r--r--chrome/third_party/hunspell/tests/i54633.wrong2
-rw-r--r--chrome/third_party/hunspell/tests/i54980.aff2
-rw-r--r--chrome/third_party/hunspell/tests/i54980.dic3
-rw-r--r--chrome/third_party/hunspell/tests/i54980.good4
-rw-r--r--chrome/third_party/hunspell/tests/i54980.test4
-rw-r--r--chrome/third_party/hunspell/tests/i58202.aff4
-rw-r--r--chrome/third_party/hunspell/tests/i58202.dic5
-rw-r--r--chrome/third_party/hunspell/tests/i58202.good10
-rw-r--r--chrome/third_party/hunspell/tests/i58202.sug13
-rw-r--r--chrome/third_party/hunspell/tests/i58202.test4
-rw-r--r--chrome/third_party/hunspell/tests/i58202.wrong13
-rw-r--r--chrome/third_party/hunspell/tests/ignore.aff5
-rw-r--r--chrome/third_party/hunspell/tests/ignore.dic3
-rw-r--r--chrome/third_party/hunspell/tests/ignore.good6
-rw-r--r--chrome/third_party/hunspell/tests/ignore.test4
-rw-r--r--chrome/third_party/hunspell/tests/ignoreutf.aff6
-rw-r--r--chrome/third_party/hunspell/tests/ignoreutf.dic10
-rw-r--r--chrome/third_party/hunspell/tests/ignoreutf.good9
-rw-r--r--chrome/third_party/hunspell/tests/ignoreutf.test4
-rw-r--r--chrome/third_party/hunspell/tests/keepcase.aff3
-rw-r--r--chrome/third_party/hunspell/tests/keepcase.dic5
-rw-r--r--chrome/third_party/hunspell/tests/keepcase.good4
-rw-r--r--chrome/third_party/hunspell/tests/keepcase.sug8
-rw-r--r--chrome/third_party/hunspell/tests/keepcase.test4
-rw-r--r--chrome/third_party/hunspell/tests/keepcase.wrong8
-rw-r--r--chrome/third_party/hunspell/tests/map.aff8
-rw-r--r--chrome/third_party/hunspell/tests/map.dic3
-rw-r--r--chrome/third_party/hunspell/tests/map.sug2
-rw-r--r--chrome/third_party/hunspell/tests/map.test4
-rw-r--r--chrome/third_party/hunspell/tests/map.wrong2
-rw-r--r--chrome/third_party/hunspell/tests/maputf.aff10
-rw-r--r--chrome/third_party/hunspell/tests/maputf.dic3
-rw-r--r--chrome/third_party/hunspell/tests/maputf.sug2
-rw-r--r--chrome/third_party/hunspell/tests/maputf.test4
-rw-r--r--chrome/third_party/hunspell/tests/maputf.wrong2
-rw-r--r--chrome/third_party/hunspell/tests/needaffix.aff5
-rw-r--r--chrome/third_party/hunspell/tests/needaffix.dic3
-rw-r--r--chrome/third_party/hunspell/tests/needaffix.good3
-rw-r--r--chrome/third_party/hunspell/tests/needaffix.test4
-rw-r--r--chrome/third_party/hunspell/tests/needaffix.wrong1
-rw-r--r--chrome/third_party/hunspell/tests/needaffix2.aff2
-rw-r--r--chrome/third_party/hunspell/tests/needaffix2.dic5
-rw-r--r--chrome/third_party/hunspell/tests/needaffix2.good5
-rw-r--r--chrome/third_party/hunspell/tests/needaffix2.morph9
-rw-r--r--chrome/third_party/hunspell/tests/needaffix2.test4
-rw-r--r--chrome/third_party/hunspell/tests/needaffix3.aff8
-rw-r--r--chrome/third_party/hunspell/tests/needaffix3.dic2
-rw-r--r--chrome/third_party/hunspell/tests/needaffix3.good2
-rw-r--r--chrome/third_party/hunspell/tests/needaffix3.test4
-rw-r--r--chrome/third_party/hunspell/tests/needaffix3.wrong1
-rw-r--r--chrome/third_party/hunspell/tests/needaffix4.aff2
-rw-r--r--chrome/third_party/hunspell/tests/needaffix4.dic5
-rw-r--r--chrome/third_party/hunspell/tests/needaffix4.good5
-rw-r--r--chrome/third_party/hunspell/tests/needaffix4.test4
-rw-r--r--chrome/third_party/hunspell/tests/needaffix5.aff13
-rw-r--r--chrome/third_party/hunspell/tests/needaffix5.dic2
-rw-r--r--chrome/third_party/hunspell/tests/needaffix5.good11
-rw-r--r--chrome/third_party/hunspell/tests/needaffix5.test4
-rw-r--r--chrome/third_party/hunspell/tests/needaffix5.wrong3
-rw-r--r--chrome/third_party/hunspell/tests/nosuggest.aff5
-rw-r--r--chrome/third_party/hunspell/tests/nosuggest.dic3
-rw-r--r--chrome/third_party/hunspell/tests/nosuggest.good3
-rw-r--r--chrome/third_party/hunspell/tests/nosuggest.sug0
-rw-r--r--chrome/third_party/hunspell/tests/nosuggest.test4
-rw-r--r--chrome/third_party/hunspell/tests/nosuggest.wrong3
-rw-r--r--chrome/third_party/hunspell/tests/onlyincompound.aff5
-rw-r--r--chrome/third_party/hunspell/tests/onlyincompound.dic3
-rw-r--r--chrome/third_party/hunspell/tests/onlyincompound.good4
-rw-r--r--chrome/third_party/hunspell/tests/onlyincompound.sug0
-rw-r--r--chrome/third_party/hunspell/tests/onlyincompound.test4
-rw-r--r--chrome/third_party/hunspell/tests/onlyincompound.wrong2
-rw-r--r--chrome/third_party/hunspell/tests/rep.aff9
-rw-r--r--chrome/third_party/hunspell/tests/rep.dic4
-rw-r--r--chrome/third_party/hunspell/tests/rep.sug3
-rw-r--r--chrome/third_party/hunspell/tests/rep.test4
-rw-r--r--chrome/third_party/hunspell/tests/rep.wrong3
-rw-r--r--chrome/third_party/hunspell/tests/reputf.aff9
-rw-r--r--chrome/third_party/hunspell/tests/reputf.dic2
-rw-r--r--chrome/third_party/hunspell/tests/reputf.sug1
-rw-r--r--chrome/third_party/hunspell/tests/reputf.test4
-rw-r--r--chrome/third_party/hunspell/tests/reputf.wrong1
-rw-r--r--chrome/third_party/hunspell/tests/slash.aff4
-rw-r--r--chrome/third_party/hunspell/tests/slash.dic5
-rw-r--r--chrome/third_party/hunspell/tests/slash.good4
-rw-r--r--chrome/third_party/hunspell/tests/slash.test4
-rw-r--r--chrome/third_party/hunspell/tests/sug.aff11
-rw-r--r--chrome/third_party/hunspell/tests/sug.dic7
-rw-r--r--chrome/third_party/hunspell/tests/sug.sug6
-rw-r--r--chrome/third_party/hunspell/tests/sug.test4
-rw-r--r--chrome/third_party/hunspell/tests/sug.wrong6
-rwxr-xr-xchrome/third_party/hunspell/tests/test.sh110
-rw-r--r--chrome/third_party/hunspell/tests/utf8.aff10
-rw-r--r--chrome/third_party/hunspell/tests/utf8.dic3
-rw-r--r--chrome/third_party/hunspell/tests/utf8.good9
-rw-r--r--chrome/third_party/hunspell/tests/utf8.test4
-rw-r--r--chrome/third_party/hunspell/tests/utf8_bom.aff3
-rw-r--r--chrome/third_party/hunspell/tests/utf8_bom.dic2
-rw-r--r--chrome/third_party/hunspell/tests/utf8_bom.good2
-rw-r--r--chrome/third_party/hunspell/tests/utf8_bom.test4
-rw-r--r--chrome/third_party/hunspell/tests/utf8_bom2.aff3
-rw-r--r--chrome/third_party/hunspell/tests/utf8_bom2.dic2
-rw-r--r--chrome/third_party/hunspell/tests/utf8_bom2.good2
-rw-r--r--chrome/third_party/hunspell/tests/utf8_bom2.test4
-rw-r--r--chrome/third_party/hunspell/tests/utf8_nonbmp.aff1
-rw-r--r--chrome/third_party/hunspell/tests/utf8_nonbmp.dic5
-rw-r--r--chrome/third_party/hunspell/tests/utf8_nonbmp.good5
-rw-r--r--chrome/third_party/hunspell/tests/utf8_nonbmp.test4
-rw-r--r--chrome/third_party/hunspell/tests/utf8_nonbmp.wrong2
-rw-r--r--chrome/third_party/hunspell/tests/utfcompound.aff3
-rw-r--r--chrome/third_party/hunspell/tests/utfcompound.dic9
-rw-r--r--chrome/third_party/hunspell/tests/utfcompound.good5
-rw-r--r--chrome/third_party/hunspell/tests/utfcompound.test4
-rw-r--r--chrome/third_party/hunspell/tests/utfcompound.wrong7
-rw-r--r--chrome/third_party/hunspell/tests/zeroaffix.aff12
-rw-r--r--chrome/third_party/hunspell/tests/zeroaffix.dic3
-rw-r--r--chrome/third_party/hunspell/tests/zeroaffix.good3
-rw-r--r--chrome/third_party/hunspell/tests/zeroaffix.morph10
-rw-r--r--chrome/third_party/hunspell/tests/zeroaffix.test4
-rw-r--r--chrome/third_party/hunspell/using_hunspell.vsprops12
375 files changed, 95681 insertions, 0 deletions
diff --git a/chrome/third_party/hunspell/COPYING b/chrome/third_party/hunspell/COPYING
new file mode 100644
index 0000000..5bede4f
--- /dev/null
+++ b/chrome/third_party/hunspell/COPYING
@@ -0,0 +1,12 @@
+GPL 2.0/LGPL 2.1/MPL 1.1 tri-license
+
+The contents of this software may be used under the terms of
+the GNU General Public License Version 2 or later (the "GPL"), or
+the GNU Lesser General Public License Version 2.1 or later (the "LGPL",
+see COPYING.LGPL) or (excepting the LGPLed GNU gettext library in the
+intl/ directory) the Mozilla Public License Version 1.1 or later
+(the "MPL", see COPYING.MPL).
+
+Software distributed under these licenses is distributed on an "AS IS" basis,
+WITHOUT WARRANTY OF ANY KIND, either express or implied. See the licences
+for the specific language governing rights and limitations under the licenses.
diff --git a/chrome/third_party/hunspell/COPYING.LGPL b/chrome/third_party/hunspell/COPYING.LGPL
new file mode 100644
index 0000000..c4792dd
--- /dev/null
+++ b/chrome/third_party/hunspell/COPYING.LGPL
@@ -0,0 +1,515 @@
+
+ GNU LESSER GENERAL PUBLIC LICENSE
+ Version 2.1, February 1999
+
+ Copyright (C) 1991, 1999 Free Software Foundation, Inc.
+ 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+[This is the first released version of the Lesser GPL. It also counts
+ as the successor of the GNU Library Public License, version 2, hence
+ the version number 2.1.]
+
+ Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+Licenses are intended to guarantee your freedom to share and change
+free software--to make sure the software is free for all its users.
+
+ This license, the Lesser General Public License, applies to some
+specially designated software packages--typically libraries--of the
+Free Software Foundation and other authors who decide to use it. You
+can use it too, but we suggest you first think carefully about whether
+this license or the ordinary General Public License is the better
+strategy to use in any particular case, based on the explanations
+below.
+
+ When we speak of free software, we are referring to freedom of use,
+not price. Our General Public Licenses are designed to make sure that
+you have the freedom to distribute copies of free software (and charge
+for this service if you wish); that you receive source code or can get
+it if you want it; that you can change the software and use pieces of
+it in new free programs; and that you are informed that you can do
+these things.
+
+ To protect your rights, we need to make restrictions that forbid
+distributors to deny you these rights or to ask you to surrender these
+rights. These restrictions translate to certain responsibilities for
+you if you distribute copies of the library or if you modify it.
+
+ For example, if you distribute copies of the library, whether gratis
+or for a fee, you must give the recipients all the rights that we gave
+you. You must make sure that they, too, receive or can get the source
+code. If you link other code with the library, you must provide
+complete object files to the recipients, so that they can relink them
+with the library after making changes to the library and recompiling
+it. And you must show them these terms so they know their rights.
+
+ We protect your rights with a two-step method: (1) we copyright the
+library, and (2) we offer you this license, which gives you legal
+permission to copy, distribute and/or modify the library.
+
+ To protect each distributor, we want to make it very clear that
+there is no warranty for the free library. Also, if the library is
+modified by someone else and passed on, the recipients should know
+that what they have is not the original version, so that the original
+author's reputation will not be affected by problems that might be
+introduced by others.
+^L
+ Finally, software patents pose a constant threat to the existence of
+any free program. We wish to make sure that a company cannot
+effectively restrict the users of a free program by obtaining a
+restrictive license from a patent holder. Therefore, we insist that
+any patent license obtained for a version of the library must be
+consistent with the full freedom of use specified in this license.
+
+ Most GNU software, including some libraries, is covered by the
+ordinary GNU General Public License. This license, the GNU Lesser
+General Public License, applies to certain designated libraries, and
+is quite different from the ordinary General Public License. We use
+this license for certain libraries in order to permit linking those
+libraries into non-free programs.
+
+ When a program is linked with a library, whether statically or using
+a shared library, the combination of the two is legally speaking a
+combined work, a derivative of the original library. The ordinary
+General Public License therefore permits such linking only if the
+entire combination fits its criteria of freedom. The Lesser General
+Public License permits more lax criteria for linking other code with
+the library.
+
+ We call this license the "Lesser" General Public License because it
+does Less to protect the user's freedom than the ordinary General
+Public License. It also provides other free software developers Less
+of an advantage over competing non-free programs. These disadvantages
+are the reason we use the ordinary General Public License for many
+libraries. However, the Lesser license provides advantages in certain
+special circumstances.
+
+ For example, on rare occasions, there may be a special need to
+encourage the widest possible use of a certain library, so that it
+becomes
+a de-facto standard. To achieve this, non-free programs must be
+allowed to use the library. A more frequent case is that a free
+library does the same job as widely used non-free libraries. In this
+case, there is little to gain by limiting the free library to free
+software only, so we use the Lesser General Public License.
+
+ In other cases, permission to use a particular library in non-free
+programs enables a greater number of people to use a large body of
+free software. For example, permission to use the GNU C Library in
+non-free programs enables many more people to use the whole GNU
+operating system, as well as its variant, the GNU/Linux operating
+system.
+
+ Although the Lesser General Public License is Less protective of the
+users' freedom, it does ensure that the user of a program that is
+linked with the Library has the freedom and the wherewithal to run
+that program using a modified version of the Library.
+
+ The precise terms and conditions for copying, distribution and
+modification follow. Pay close attention to the difference between a
+"work based on the library" and a "work that uses the library". The
+former contains code derived from the library, whereas the latter must
+be combined with the library in order to run.
+^L
+ GNU LESSER GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License Agreement applies to any software library or other
+program which contains a notice placed by the copyright holder or
+other authorized party saying it may be distributed under the terms of
+this Lesser General Public License (also called "this License").
+Each licensee is addressed as "you".
+
+ A "library" means a collection of software functions and/or data
+prepared so as to be conveniently linked with application programs
+(which use some of those functions and data) to form executables.
+
+ The "Library", below, refers to any such software library or work
+which has been distributed under these terms. A "work based on the
+Library" means either the Library or any derivative work under
+copyright law: that is to say, a work containing the Library or a
+portion of it, either verbatim or with modifications and/or translated
+straightforwardly into another language. (Hereinafter, translation is
+included without limitation in the term "modification".)
+
+ "Source code" for a work means the preferred form of the work for
+making modifications to it. For a library, complete source code means
+all the source code for all modules it contains, plus any associated
+interface definition files, plus the scripts used to control
+compilation
+and installation of the library.
+
+ Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running a program using the Library is not restricted, and output from
+such a program is covered only if its contents constitute a work based
+on the Library (independent of the use of the Library in a tool for
+writing it). Whether that is true depends on what the Library does
+and what the program that uses the Library does.
+
+ 1. You may copy and distribute verbatim copies of the Library's
+complete source code as you receive it, in any medium, provided that
+you conspicuously and appropriately publish on each copy an
+appropriate copyright notice and disclaimer of warranty; keep intact
+all the notices that refer to this License and to the absence of any
+warranty; and distribute a copy of this License along with the
+Library.
+
+ You may charge a fee for the physical act of transferring a copy,
+and you may at your option offer warranty protection in exchange for a
+fee.
+
+ 2. You may modify your copy or copies of the Library or any portion
+of it, thus forming a work based on the Library, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ a) The modified work must itself be a software library.
+
+ b) You must cause the files modified to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ c) You must cause the whole of the work to be licensed at no
+ charge to all third parties under the terms of this License.
+
+ d) If a facility in the modified Library refers to a function or a
+ table of data to be supplied by an application program that uses
+ the facility, other than as an argument passed when the facility
+ is invoked, then you must make a good faith effort to ensure that,
+ in the event an application does not supply such function or
+ table, the facility still operates, and performs whatever part of
+ its purpose remains meaningful.
+
+ (For example, a function in a library to compute square roots has
+ a purpose that is entirely well-defined independent of the
+ application. Therefore, Subsection 2d requires that any
+ application-supplied function or table used by this function must
+ be optional: if the application does not supply it, the square
+ root function must still compute square roots.)
+
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Library,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Library, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote
+it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Library.
+
+In addition, mere aggregation of another work not based on the Library
+with the Library (or with a work based on the Library) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ 3. You may opt to apply the terms of the ordinary GNU General Public
+License instead of this License to a given copy of the Library. To do
+this, you must alter all the notices that refer to this License, so
+that they refer to the ordinary GNU General Public License, version 2,
+instead of to this License. (If a newer version than version 2 of the
+ordinary GNU General Public License has appeared, then you can specify
+that version instead if you wish.) Do not make any other change in
+these notices.
+^L
+ Once this change is made in a given copy, it is irreversible for
+that copy, so the ordinary GNU General Public License applies to all
+subsequent copies and derivative works made from that copy.
+
+ This option is useful when you wish to copy part of the code of
+the Library into a program that is not a library.
+
+ 4. You may copy and distribute the Library (or a portion or
+derivative of it, under Section 2) in object code or executable form
+under the terms of Sections 1 and 2 above provided that you accompany
+it with the complete corresponding machine-readable source code, which
+must be distributed under the terms of Sections 1 and 2 above on a
+medium customarily used for software interchange.
+
+ If distribution of object code is made by offering access to copy
+from a designated place, then offering equivalent access to copy the
+source code from the same place satisfies the requirement to
+distribute the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+ 5. A program that contains no derivative of any portion of the
+Library, but is designed to work with the Library by being compiled or
+linked with it, is called a "work that uses the Library". Such a
+work, in isolation, is not a derivative work of the Library, and
+therefore falls outside the scope of this License.
+
+ However, linking a "work that uses the Library" with the Library
+creates an executable that is a derivative of the Library (because it
+contains portions of the Library), rather than a "work that uses the
+library". The executable is therefore covered by this License.
+Section 6 states terms for distribution of such executables.
+
+ When a "work that uses the Library" uses material from a header file
+that is part of the Library, the object code for the work may be a
+derivative work of the Library even though the source code is not.
+Whether this is true is especially significant if the work can be
+linked without the Library, or if the work is itself a library. The
+threshold for this to be true is not precisely defined by law.
+
+ If such an object file uses only numerical parameters, data
+structure layouts and accessors, and small macros and small inline
+functions (ten lines or less in length), then the use of the object
+file is unrestricted, regardless of whether it is legally a derivative
+work. (Executables containing this object code plus portions of the
+Library will still fall under Section 6.)
+
+ Otherwise, if the work is a derivative of the Library, you may
+distribute the object code for the work under the terms of Section 6.
+Any executables containing that work also fall under Section 6,
+whether or not they are linked directly with the Library itself.
+^L
+ 6. As an exception to the Sections above, you may also combine or
+link a "work that uses the Library" with the Library to produce a
+work containing portions of the Library, and distribute that work
+under terms of your choice, provided that the terms permit
+modification of the work for the customer's own use and reverse
+engineering for debugging such modifications.
+
+ You must give prominent notice with each copy of the work that the
+Library is used in it and that the Library and its use are covered by
+this License. You must supply a copy of this License. If the work
+during execution displays copyright notices, you must include the
+copyright notice for the Library among them, as well as a reference
+directing the user to the copy of this License. Also, you must do one
+of these things:
+
+ a) Accompany the work with the complete corresponding
+ machine-readable source code for the Library including whatever
+ changes were used in the work (which must be distributed under
+ Sections 1 and 2 above); and, if the work is an executable linked
+ with the Library, with the complete machine-readable "work that
+ uses the Library", as object code and/or source code, so that the
+ user can modify the Library and then relink to produce a modified
+ executable containing the modified Library. (It is understood
+ that the user who changes the contents of definitions files in the
+ Library will not necessarily be able to recompile the application
+ to use the modified definitions.)
+
+ b) Use a suitable shared library mechanism for linking with the
+ Library. A suitable mechanism is one that (1) uses at run time a
+ copy of the library already present on the user's computer system,
+ rather than copying library functions into the executable, and (2)
+ will operate properly with a modified version of the library, if
+ the user installs one, as long as the modified version is
+ interface-compatible with the version that the work was made with.
+
+ c) Accompany the work with a written offer, valid for at
+ least three years, to give the same user the materials
+ specified in Subsection 6a, above, for a charge no more
+ than the cost of performing this distribution.
+
+ d) If distribution of the work is made by offering access to copy
+ from a designated place, offer equivalent access to copy the above
+ specified materials from the same place.
+
+ e) Verify that the user has already received a copy of these
+ materials or that you have already sent this user a copy.
+
+ For an executable, the required form of the "work that uses the
+Library" must include any data and utility programs needed for
+reproducing the executable from it. However, as a special exception,
+the materials to be distributed need not include anything that is
+normally distributed (in either source or binary form) with the major
+components (compiler, kernel, and so on) of the operating system on
+which the executable runs, unless that component itself accompanies
+the executable.
+
+ It may happen that this requirement contradicts the license
+restrictions of other proprietary libraries that do not normally
+accompany the operating system. Such a contradiction means you cannot
+use both them and the Library together in an executable that you
+distribute.
+^L
+ 7. You may place library facilities that are a work based on the
+Library side-by-side in a single library together with other library
+facilities not covered by this License, and distribute such a combined
+library, provided that the separate distribution of the work based on
+the Library and of the other library facilities is otherwise
+permitted, and provided that you do these two things:
+
+ a) Accompany the combined library with a copy of the same work
+ based on the Library, uncombined with any other library
+ facilities. This must be distributed under the terms of the
+ Sections above.
+
+ b) Give prominent notice with the combined library of the fact
+ that part of it is a work based on the Library, and explaining
+ where to find the accompanying uncombined form of the same work.
+
+ 8. You may not copy, modify, sublicense, link with, or distribute
+the Library except as expressly provided under this License. Any
+attempt otherwise to copy, modify, sublicense, link with, or
+distribute the Library is void, and will automatically terminate your
+rights under this License. However, parties who have received copies,
+or rights, from you under this License will not have their licenses
+terminated so long as such parties remain in full compliance.
+
+ 9. You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Library or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Library (or any work based on the
+Library), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Library or works based on it.
+
+ 10. Each time you redistribute the Library (or any work based on the
+Library), the recipient automatically receives a license from the
+original licensor to copy, distribute, link with or modify the Library
+subject to these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties with
+this License.
+^L
+ 11. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Library at all. For example, if a patent
+license would not permit royalty-free redistribution of the Library by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Library.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply, and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+ 12. If the distribution and/or use of the Library is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Library under this License
+may add an explicit geographical distribution limitation excluding those
+countries, so that distribution is permitted only in or among
+countries not thus excluded. In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+ 13. The Free Software Foundation may publish revised and/or new
+versions of the Lesser General Public License from time to time.
+Such new versions will be similar in spirit to the present version,
+but may differ in detail to address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Library
+specifies a version number of this License which applies to it and
+"any later version", you have the option of following the terms and
+conditions either of that version or of any later version published by
+the Free Software Foundation. If the Library does not specify a
+license version number, you may choose any version ever published by
+the Free Software Foundation.
+^L
+ 14. If you wish to incorporate parts of the Library into other free
+programs whose distribution conditions are incompatible with these,
+write to the author to ask for permission. For software which is
+copyrighted by the Free Software Foundation, write to the Free
+Software Foundation; we sometimes make exceptions for this. Our
+decision will be guided by the two goals of preserving the free status
+of all derivatives of our free software and of promoting the sharing
+and reuse of software generally.
+
+ NO WARRANTY
+
+ 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
+WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
+EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
+OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
+KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
+LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
+THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+ 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
+WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
+AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
+FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
+CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
+LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
+RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
+FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
+SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+DAMAGES.
+
+ END OF TERMS AND CONDITIONS
+^L
+ How to Apply These Terms to Your New Libraries
+
+ If you develop a new library, and you want it to be of the greatest
+possible use to the public, we recommend making it free software that
+everyone can redistribute and change. You can do so by permitting
+redistribution under these terms (or, alternatively, under the terms
+of the ordinary General Public License).
+
+ To apply these terms, attach the following notices to the library.
+It is safest to attach them to the start of each source file to most
+effectively convey the exclusion of warranty; and each file should
+have at least the "copyright" line and a pointer to where the full
+notice is found.
+
+
+ <one line to give the library's name and a brief idea of what it
+does.>
+ Copyright (C) <year> <name of author>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+Also add information on how to contact you by electronic and paper
+mail.
+
+You should also get your employer (if you work as a programmer) or
+your
+school, if any, to sign a "copyright disclaimer" for the library, if
+necessary. Here is a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the
+ library `Frob' (a library for tweaking knobs) written by James
+Random Hacker.
+
+ <signature of Ty Coon>, 1 April 1990
+ Ty Coon, President of Vice
+
+That's all there is to it!
+
+
diff --git a/chrome/third_party/hunspell/COPYING.MPL b/chrome/third_party/hunspell/COPYING.MPL
new file mode 100644
index 0000000..7714141
--- /dev/null
+++ b/chrome/third_party/hunspell/COPYING.MPL
@@ -0,0 +1,470 @@
+ MOZILLA PUBLIC LICENSE
+ Version 1.1
+
+ ---------------
+
+1. Definitions.
+
+ 1.0.1. "Commercial Use" means distribution or otherwise making the
+ Covered Code available to a third party.
+
+ 1.1. "Contributor" means each entity that creates or contributes to
+ the creation of Modifications.
+
+ 1.2. "Contributor Version" means the combination of the Original
+ Code, prior Modifications used by a Contributor, and the Modifications
+ made by that particular Contributor.
+
+ 1.3. "Covered Code" means the Original Code or Modifications or the
+ combination of the Original Code and Modifications, in each case
+ including portions thereof.
+
+ 1.4. "Electronic Distribution Mechanism" means a mechanism generally
+ accepted in the software development community for the electronic
+ transfer of data.
+
+ 1.5. "Executable" means Covered Code in any form other than Source
+ Code.
+
+ 1.6. "Initial Developer" means the individual or entity identified
+ as the Initial Developer in the Source Code notice required by Exhibit
+ A.
+
+ 1.7. "Larger Work" means a work which combines Covered Code or
+ portions thereof with code not governed by the terms of this License.
+
+ 1.8. "License" means this document.
+
+ 1.8.1. "Licensable" means having the right to grant, to the maximum
+ extent possible, whether at the time of the initial grant or
+ subsequently acquired, any and all of the rights conveyed herein.
+
+ 1.9. "Modifications" means any addition to or deletion from the
+ substance or structure of either the Original Code or any previous
+ Modifications. When Covered Code is released as a series of files, a
+ Modification is:
+ A. Any addition to or deletion from the contents of a file
+ containing Original Code or previous Modifications.
+
+ B. Any new file that contains any part of the Original Code or
+ previous Modifications.
+
+ 1.10. "Original Code" means Source Code of computer software code
+ which is described in the Source Code notice required by Exhibit A as
+ Original Code, and which, at the time of its release under this
+ License is not already Covered Code governed by this License.
+
+ 1.10.1. "Patent Claims" means any patent claim(s), now owned or
+ hereafter acquired, including without limitation, method, process,
+ and apparatus claims, in any patent Licensable by grantor.
+
+ 1.11. "Source Code" means the preferred form of the Covered Code for
+ making modifications to it, including all modules it contains, plus
+ any associated interface definition files, scripts used to control
+ compilation and installation of an Executable, or source code
+ differential comparisons against either the Original Code or another
+ well known, available Covered Code of the Contributor's choice. The
+ Source Code can be in a compressed or archival form, provided the
+ appropriate decompression or de-archiving software is widely available
+ for no charge.
+
+ 1.12. "You" (or "Your") means an individual or a legal entity
+ exercising rights under, and complying with all of the terms of, this
+ License or a future version of this License issued under Section 6.1.
+ For legal entities, "You" includes any entity which controls, is
+ controlled by, or is under common control with You. For purposes of
+ this definition, "control" means (a) the power, direct or indirect,
+ to cause the direction or management of such entity, whether by
+ contract or otherwise, or (b) ownership of more than fifty percent
+ (50%) of the outstanding shares or beneficial ownership of such
+ entity.
+
+2. Source Code License.
+
+ 2.1. The Initial Developer Grant.
+ The Initial Developer hereby grants You a world-wide, royalty-free,
+ non-exclusive license, subject to third party intellectual property
+ claims:
+ (a) under intellectual property rights (other than patent or
+ trademark) Licensable by Initial Developer to use, reproduce,
+ modify, display, perform, sublicense and distribute the Original
+ Code (or portions thereof) with or without Modifications, and/or
+ as part of a Larger Work; and
+
+ (b) under Patents Claims infringed by the making, using or
+ selling of Original Code, to make, have made, use, practice,
+ sell, and offer for sale, and/or otherwise dispose of the
+ Original Code (or portions thereof).
+
+ (c) the licenses granted in this Section 2.1(a) and (b) are
+ effective on the date Initial Developer first distributes
+ Original Code under the terms of this License.
+
+ (d) Notwithstanding Section 2.1(b) above, no patent license is
+ granted: 1) for code that You delete from the Original Code; 2)
+ separate from the Original Code; or 3) for infringements caused
+ by: i) the modification of the Original Code or ii) the
+ combination of the Original Code with other software or devices.
+
+ 2.2. Contributor Grant.
+ Subject to third party intellectual property claims, each Contributor
+ hereby grants You a world-wide, royalty-free, non-exclusive license
+
+ (a) under intellectual property rights (other than patent or
+ trademark) Licensable by Contributor, to use, reproduce, modify,
+ display, perform, sublicense and distribute the Modifications
+ created by such Contributor (or portions thereof) either on an
+ unmodified basis, with other Modifications, as Covered Code
+ and/or as part of a Larger Work; and
+
+ (b) under Patent Claims infringed by the making, using, or
+ selling of Modifications made by that Contributor either alone
+ and/or in combination with its Contributor Version (or portions
+ of such combination), to make, use, sell, offer for sale, have
+ made, and/or otherwise dispose of: 1) Modifications made by that
+ Contributor (or portions thereof); and 2) the combination of
+ Modifications made by that Contributor with its Contributor
+ Version (or portions of such combination).
+
+ (c) the licenses granted in Sections 2.2(a) and 2.2(b) are
+ effective on the date Contributor first makes Commercial Use of
+ the Covered Code.
+
+ (d) Notwithstanding Section 2.2(b) above, no patent license is
+ granted: 1) for any code that Contributor has deleted from the
+ Contributor Version; 2) separate from the Contributor Version;
+ 3) for infringements caused by: i) third party modifications of
+ Contributor Version or ii) the combination of Modifications made
+ by that Contributor with other software (except as part of the
+ Contributor Version) or other devices; or 4) under Patent Claims
+ infringed by Covered Code in the absence of Modifications made by
+ that Contributor.
+
+3. Distribution Obligations.
+
+ 3.1. Application of License.
+ The Modifications which You create or to which You contribute are
+ governed by the terms of this License, including without limitation
+ Section 2.2. The Source Code version of Covered Code may be
+ distributed only under the terms of this License or a future version
+ of this License released under Section 6.1, and You must include a
+ copy of this License with every copy of the Source Code You
+ distribute. You may not offer or impose any terms on any Source Code
+ version that alters or restricts the applicable version of this
+ License or the recipients' rights hereunder. However, You may include
+ an additional document offering the additional rights described in
+ Section 3.5.
+
+ 3.2. Availability of Source Code.
+ Any Modification which You create or to which You contribute must be
+ made available in Source Code form under the terms of this License
+ either on the same media as an Executable version or via an accepted
+ Electronic Distribution Mechanism to anyone to whom you made an
+ Executable version available; and if made available via Electronic
+ Distribution Mechanism, must remain available for at least twelve (12)
+ months after the date it initially became available, or at least six
+ (6) months after a subsequent version of that particular Modification
+ has been made available to such recipients. You are responsible for
+ ensuring that the Source Code version remains available even if the
+ Electronic Distribution Mechanism is maintained by a third party.
+
+ 3.3. Description of Modifications.
+ You must cause all Covered Code to which You contribute to contain a
+ file documenting the changes You made to create that Covered Code and
+ the date of any change. You must include a prominent statement that
+ the Modification is derived, directly or indirectly, from Original
+ Code provided by the Initial Developer and including the name of the
+ Initial Developer in (a) the Source Code, and (b) in any notice in an
+ Executable version or related documentation in which You describe the
+ origin or ownership of the Covered Code.
+
+ 3.4. Intellectual Property Matters
+ (a) Third Party Claims.
+ If Contributor has knowledge that a license under a third party's
+ intellectual property rights is required to exercise the rights
+ granted by such Contributor under Sections 2.1 or 2.2,
+ Contributor must include a text file with the Source Code
+ distribution titled "LEGAL" which describes the claim and the
+ party making the claim in sufficient detail that a recipient will
+ know whom to contact. If Contributor obtains such knowledge after
+ the Modification is made available as described in Section 3.2,
+ Contributor shall promptly modify the LEGAL file in all copies
+ Contributor makes available thereafter and shall take other steps
+ (such as notifying appropriate mailing lists or newsgroups)
+ reasonably calculated to inform those who received the Covered
+ Code that new knowledge has been obtained.
+
+ (b) Contributor APIs.
+ If Contributor's Modifications include an application programming
+ interface and Contributor has knowledge of patent licenses which
+ are reasonably necessary to implement that API, Contributor must
+ also include this information in the LEGAL file.
+
+ (c) Representations.
+ Contributor represents that, except as disclosed pursuant to
+ Section 3.4(a) above, Contributor believes that Contributor's
+ Modifications are Contributor's original creation(s) and/or
+ Contributor has sufficient rights to grant the rights conveyed by
+ this License.
+
+ 3.5. Required Notices.
+ You must duplicate the notice in Exhibit A in each file of the Source
+ Code. If it is not possible to put such notice in a particular Source
+ Code file due to its structure, then You must include such notice in a
+ location (such as a relevant directory) where a user would be likely
+ to look for such a notice. If You created one or more Modification(s)
+ You may add your name as a Contributor to the notice described in
+ Exhibit A. You must also duplicate this License in any documentation
+ for the Source Code where You describe recipients' rights or ownership
+ rights relating to Covered Code. You may choose to offer, and to
+ charge a fee for, warranty, support, indemnity or liability
+ obligations to one or more recipients of Covered Code. However, You
+ may do so only on Your own behalf, and not on behalf of the Initial
+ Developer or any Contributor. You must make it absolutely clear than
+ any such warranty, support, indemnity or liability obligation is
+ offered by You alone, and You hereby agree to indemnify the Initial
+ Developer and every Contributor for any liability incurred by the
+ Initial Developer or such Contributor as a result of warranty,
+ support, indemnity or liability terms You offer.
+
+ 3.6. Distribution of Executable Versions.
+ You may distribute Covered Code in Executable form only if the
+ requirements of Section 3.1-3.5 have been met for that Covered Code,
+ and if You include a notice stating that the Source Code version of
+ the Covered Code is available under the terms of this License,
+ including a description of how and where You have fulfilled the
+ obligations of Section 3.2. The notice must be conspicuously included
+ in any notice in an Executable version, related documentation or
+ collateral in which You describe recipients' rights relating to the
+ Covered Code. You may distribute the Executable version of Covered
+ Code or ownership rights under a license of Your choice, which may
+ contain terms different from this License, provided that You are in
+ compliance with the terms of this License and that the license for the
+ Executable version does not attempt to limit or alter the recipient's
+ rights in the Source Code version from the rights set forth in this
+ License. If You distribute the Executable version under a different
+ license You must make it absolutely clear that any terms which differ
+ from this License are offered by You alone, not by the Initial
+ Developer or any Contributor. You hereby agree to indemnify the
+ Initial Developer and every Contributor for any liability incurred by
+ the Initial Developer or such Contributor as a result of any such
+ terms You offer.
+
+ 3.7. Larger Works.
+ You may create a Larger Work by combining Covered Code with other code
+ not governed by the terms of this License and distribute the Larger
+ Work as a single product. In such a case, You must make sure the
+ requirements of this License are fulfilled for the Covered Code.
+
+4. Inability to Comply Due to Statute or Regulation.
+
+ If it is impossible for You to comply with any of the terms of this
+ License with respect to some or all of the Covered Code due to
+ statute, judicial order, or regulation then You must: (a) comply with
+ the terms of this License to the maximum extent possible; and (b)
+ describe the limitations and the code they affect. Such description
+ must be included in the LEGAL file described in Section 3.4 and must
+ be included with all distributions of the Source Code. Except to the
+ extent prohibited by statute or regulation, such description must be
+ sufficiently detailed for a recipient of ordinary skill to be able to
+ understand it.
+
+5. Application of this License.
+
+ This License applies to code to which the Initial Developer has
+ attached the notice in Exhibit A and to related Covered Code.
+
+6. Versions of the License.
+
+ 6.1. New Versions.
+ Netscape Communications Corporation ("Netscape") may publish revised
+ and/or new versions of the License from time to time. Each version
+ will be given a distinguishing version number.
+
+ 6.2. Effect of New Versions.
+ Once Covered Code has been published under a particular version of the
+ License, You may always continue to use it under the terms of that
+ version. You may also choose to use such Covered Code under the terms
+ of any subsequent version of the License published by Netscape. No one
+ other than Netscape has the right to modify the terms applicable to
+ Covered Code created under this License.
+
+ 6.3. Derivative Works.
+ If You create or use a modified version of this License (which you may
+ only do in order to apply it to code which is not already Covered Code
+ governed by this License), You must (a) rename Your license so that
+ the phrases "Mozilla", "MOZILLAPL", "MOZPL", "Netscape",
+ "MPL", "NPL" or any confusingly similar phrase do not appear in your
+ license (except to note that your license differs from this License)
+ and (b) otherwise make it clear that Your version of the license
+ contains terms which differ from the Mozilla Public License and
+ Netscape Public License. (Filling in the name of the Initial
+ Developer, Original Code or Contributor in the notice described in
+ Exhibit A shall not of themselves be deemed to be modifications of
+ this License.)
+
+7. DISCLAIMER OF WARRANTY.
+
+ COVERED CODE IS PROVIDED UNDER THIS LICENSE ON AN "AS IS" BASIS,
+ WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING,
+ WITHOUT LIMITATION, WARRANTIES THAT THE COVERED CODE IS FREE OF
+ DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE OR NON-INFRINGING.
+ THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE COVERED CODE
+ IS WITH YOU. SHOULD ANY COVERED CODE PROVE DEFECTIVE IN ANY RESPECT,
+ YOU (NOT THE INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE
+ COST OF ANY NECESSARY SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER
+ OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE. NO USE OF
+ ANY COVERED CODE IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER.
+
+8. TERMINATION.
+
+ 8.1. This License and the rights granted hereunder will terminate
+ automatically if You fail to comply with terms herein and fail to cure
+ such breach within 30 days of becoming aware of the breach. All
+ sublicenses to the Covered Code which are properly granted shall
+ survive any termination of this License. Provisions which, by their
+ nature, must remain in effect beyond the termination of this License
+ shall survive.
+
+ 8.2. If You initiate litigation by asserting a patent infringement
+ claim (excluding declatory judgment actions) against Initial Developer
+ or a Contributor (the Initial Developer or Contributor against whom
+ You file such action is referred to as "Participant") alleging that:
+
+ (a) such Participant's Contributor Version directly or indirectly
+ infringes any patent, then any and all rights granted by such
+ Participant to You under Sections 2.1 and/or 2.2 of this License
+ shall, upon 60 days notice from Participant terminate prospectively,
+ unless if within 60 days after receipt of notice You either: (i)
+ agree in writing to pay Participant a mutually agreeable reasonable
+ royalty for Your past and future use of Modifications made by such
+ Participant, or (ii) withdraw Your litigation claim with respect to
+ the Contributor Version against such Participant. If within 60 days
+ of notice, a reasonable royalty and payment arrangement are not
+ mutually agreed upon in writing by the parties or the litigation claim
+ is not withdrawn, the rights granted by Participant to You under
+ Sections 2.1 and/or 2.2 automatically terminate at the expiration of
+ the 60 day notice period specified above.
+
+ (b) any software, hardware, or device, other than such Participant's
+ Contributor Version, directly or indirectly infringes any patent, then
+ any rights granted to You by such Participant under Sections 2.1(b)
+ and 2.2(b) are revoked effective as of the date You first made, used,
+ sold, distributed, or had made, Modifications made by that
+ Participant.
+
+ 8.3. If You assert a patent infringement claim against Participant
+ alleging that such Participant's Contributor Version directly or
+ indirectly infringes any patent where such claim is resolved (such as
+ by license or settlement) prior to the initiation of patent
+ infringement litigation, then the reasonable value of the licenses
+ granted by such Participant under Sections 2.1 or 2.2 shall be taken
+ into account in determining the amount or value of any payment or
+ license.
+
+ 8.4. In the event of termination under Sections 8.1 or 8.2 above,
+ all end user license agreements (excluding distributors and resellers)
+ which have been validly granted by You or any distributor hereunder
+ prior to termination shall survive termination.
+
+9. LIMITATION OF LIABILITY.
+
+ UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER TORT
+ (INCLUDING NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL YOU, THE INITIAL
+ DEVELOPER, ANY OTHER CONTRIBUTOR, OR ANY DISTRIBUTOR OF COVERED CODE,
+ OR ANY SUPPLIER OF ANY OF SUCH PARTIES, BE LIABLE TO ANY PERSON FOR
+ ANY INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY
+ CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF GOODWILL,
+ WORK STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER
+ COMMERCIAL DAMAGES OR LOSSES, EVEN IF SUCH PARTY SHALL HAVE BEEN
+ INFORMED OF THE POSSIBILITY OF SUCH DAMAGES. THIS LIMITATION OF
+ LIABILITY SHALL NOT APPLY TO LIABILITY FOR DEATH OR PERSONAL INJURY
+ RESULTING FROM SUCH PARTY'S NEGLIGENCE TO THE EXTENT APPLICABLE LAW
+ PROHIBITS SUCH LIMITATION. SOME JURISDICTIONS DO NOT ALLOW THE
+ EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO
+ THIS EXCLUSION AND LIMITATION MAY NOT APPLY TO YOU.
+
+10. U.S. GOVERNMENT END USERS.
+
+ The Covered Code is a "commercial item," as that term is defined in
+ 48 C.F.R. 2.101 (Oct. 1995), consisting of "commercial computer
+ software" and "commercial computer software documentation," as such
+ terms are used in 48 C.F.R. 12.212 (Sept. 1995). Consistent with 48
+ C.F.R. 12.212 and 48 C.F.R. 227.7202-1 through 227.7202-4 (June 1995),
+ all U.S. Government End Users acquire Covered Code with only those
+ rights set forth herein.
+
+11. MISCELLANEOUS.
+
+ This License represents the complete agreement concerning subject
+ matter hereof. If any provision of this License is held to be
+ unenforceable, such provision shall be reformed only to the extent
+ necessary to make it enforceable. This License shall be governed by
+ California law provisions (except to the extent applicable law, if
+ any, provides otherwise), excluding its conflict-of-law provisions.
+ With respect to disputes in which at least one party is a citizen of,
+ or an entity chartered or registered to do business in the United
+ States of America, any litigation relating to this License shall be
+ subject to the jurisdiction of the Federal Courts of the Northern
+ District of California, with venue lying in Santa Clara County,
+ California, with the losing party responsible for costs, including
+ without limitation, court costs and reasonable attorneys' fees and
+ expenses. The application of the United Nations Convention on
+ Contracts for the International Sale of Goods is expressly excluded.
+ Any law or regulation which provides that the language of a contract
+ shall be construed against the drafter shall not apply to this
+ License.
+
+12. RESPONSIBILITY FOR CLAIMS.
+
+ As between Initial Developer and the Contributors, each party is
+ responsible for claims and damages arising, directly or indirectly,
+ out of its utilization of rights under this License and You agree to
+ work with Initial Developer and Contributors to distribute such
+ responsibility on an equitable basis. Nothing herein is intended or
+ shall be deemed to constitute any admission of liability.
+
+13. MULTIPLE-LICENSED CODE.
+
+ Initial Developer may designate portions of the Covered Code as
+ "Multiple-Licensed". "Multiple-Licensed" means that the Initial
+ Developer permits you to utilize portions of the Covered Code under
+ Your choice of the NPL or the alternative licenses, if any, specified
+ by the Initial Developer in the file described in Exhibit A.
+
+EXHIBIT A -Mozilla Public License.
+
+ ``The contents of this file are subject to the Mozilla Public License
+ Version 1.1 (the "License"); you may not use this file except in
+ compliance with the License. You may obtain a copy of the License at
+ http://www.mozilla.org/MPL/
+
+ Software distributed under the License is distributed on an "AS IS"
+ basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
+ License for the specific language governing rights and limitations
+ under the License.
+
+ The Original Code is ______________________________________.
+
+ The Initial Developer of the Original Code is ________________________.
+ Portions created by ______________________ are Copyright (C) ______
+ _______________________. All Rights Reserved.
+
+ Contributor(s): ______________________________________.
+
+ Alternatively, the contents of this file may be used under the terms
+ of the _____ license (the "[___] License"), in which case the
+ provisions of [______] License are applicable instead of those
+ above. If you wish to allow use of your version of this file only
+ under the terms of the [____] License and not to allow others to use
+ your version of this file under the MPL, indicate your decision by
+ deleting the provisions above and replace them with the notice and
+ other provisions required by the [___] License. If you do not delete
+ the provisions above, a recipient may use your version of this file
+ under either the MPL or the [___] License."
+
+ [NOTE: The text of this Exhibit A may differ slightly from the text of
+ the notices in the Source Code files of the Original Code. You should
+ use the text of this Exhibit A rather than the text found in the
+ Original Code Source Code for Your Modifications.]
+
diff --git a/chrome/third_party/hunspell/README b/chrome/third_party/hunspell/README
new file mode 100644
index 0000000..d50f6bd
--- /dev/null
+++ b/chrome/third_party/hunspell/README
@@ -0,0 +1,129 @@
+About Hunspell
+--------------
+
+Hunspell is a spell checker and morphological analyzer library and program
+designed for languages with rich morphology and complex word compounding or
+character encoding. Hunspell interfaces: Ispell-like terminal interface
+using Curses library, Ispell pipe interface, OpenOffice.org UNO module.
+
+Hunspell's code base comes from the OpenOffice.org MySpell
+(http://lingucomponent.openoffice.org/MySpell-3.zip). See README.MYSPELL,
+AUTHORS.MYSPELL and license.myspell files.
+Hunspell is designed to eventually replace Myspell in OpenOffice.org.
+
+Main features of Hunspell spell checker and morphological analyzer:
+
+- Unicode support (affix rules work only with the first 65535 Unicode characters)
+
+- Morphological analysis (in custom item and arrangement style)
+
+- Max. 65535 affix classes and twofold affix stripping (for agglutinative
+ languages, like Azeri, Basque, Estonian, Finnish, Hungarian, Turkish, etc.)
+
+- Support complex compoundings (for example, Hungarian and German)
+
+- Support language specific features (for example, special casing of
+ Azeri and Turkish dotted i, or German sharp s)
+
+- Handle conditional affixes, circumfixes, fogemorphemes,
+ forbidden words, pseudoroots and homonyms.
+
+- Free software (LGPL, GPL, MPL tri-license)
+
+Compiling
+---------
+
+./configure
+make
+make install
+
+For dictionary development, use the --with-warnings option of configure.
+
+For compiling morphological analyser and stemmer code and tools, use the
+--with-experimental option of configure.
+
+For interactive user interface of Hunspell executable, use the --with-ui option.
+
+The developer packages you need to compile Hunspell's interface:
+
+glibc-devel
+
+optional developer packages:
+
+ncurses (need for --with-ui)
+readline (for fancy input line editing,
+ configure parameter: --with-readline)
+locale and gettext (but you can also use the
+ --with-included-gettext configure parameter)
+
+Hunspell distribution uses new Autoconf (2.59) and Automake (1.9).
+
+Testing
+-------
+
+Testing Hunspell (see tests in tests/ subdirectory):
+
+make check
+
+or with Valgrind debugger:
+
+VALGRIND=[Valgrind_tool] make check
+
+For example:
+
+VALGRIND=memcheck make check
+
+Documentation
+-------------
+
+features and dictionary format:
+man 4 hunspell
+
+man hunspell
+hunspell -h
+http://hunspell.sourceforge.net
+
+Usage
+-----
+
+The src/tools dictionary contains three executables.
+A spell checker with Ispell-like curses interface and Ispell
+compatible pipe interface (hunspell) and two small example
+program (hunmorph and hunstem).
+
+After compiling and installing (see INSTALL) you can
+run the Hunspell spell checker (compiled with user interface)
+with a Hunspell or Myspell dictionary:
+
+hunspell -d en_UK text.txt
+
+or without interface:
+
+hunspell -d en_UK -l <text.txt
+
+(Dictionaries consists of an affix and dictionary file.)
+
+Usage of Hunmorph morphological analyzer:
+
+hunmorph en_UK.aff en_UK.dic input_file
+
+Using Hunspell library with GCC
+-------------------------------
+
+Including in your program:
+#include <hunspell.hxx>
+
+Linking with Hunspell static library:
+g++ -lhunspell example.cxx
+
+Dictionaries
+------------
+
+Myspell dictionaries:
+http://lingucomponent.openoffice.org/spell_dic.html
+
+Aspell dictionaries (need some conversion):
+ftp://ftp.gnu.org/gnu/aspell/dict
+
+Németh László
+nemethl@gyorsposta.hu
diff --git a/chrome/third_party/hunspell/README.google b/chrome/third_party/hunspell/README.google
new file mode 100644
index 0000000..5e6f6f7
--- /dev/null
+++ b/chrome/third_party/hunspell/README.google
@@ -0,0 +1,29 @@
+This is a partial copy of Hunspell 1.1.5, with the following changes:
+* '#include "config.h"' removed from src/hunspell/hunspell.hxx
+* '#include "config.h"' removed from src/hunspell/license.hunspell
+* Two unreferenced local variables removed from src/hunspell/suggestmgr.cxx
+* src/hunspell/utf_info.cxx moved to src/hunspell/utf_info.hxx, and #include
+ reference in src/hunspell/csutil.cxx changed accordingly
+* Change the input params of the constructors to receive a FILE* instead of
+ a file path. This is required to use hunspell in the sandbox.
+ The patch is in google.patch.
+
+The English dictionary distributed by Firefox has been checked in to the
+dictionaries directory. It has several additions over the default
+myspell/hunspell dictionary.
+
+* Workaround for non-ASCII characters
+
+Visual Studio on Japanese Windows assumes the source files to be
+encoded in Shift_JIS. The compiler is unhappy with non-ASCII letters
+in the source files of Hunspell. The same problem happens with other
+CJK Windows as well. Here is the workaround for this problem:
+
+Convert 8-bit bytes to hexadecimal escaped forms by
+
+ % perl -i -De 's/([\x80-\xff])/sprintf("\\x%02x", $1)/ge' src/*.cxx
+
+
+Note that Hunspell upstream is going to fix this problem. We'll no
+longer need the workaround if the problem is fixed in the upstream.
+
diff --git a/chrome/third_party/hunspell/README.myspell b/chrome/third_party/hunspell/README.myspell
new file mode 100644
index 0000000..25934ee
--- /dev/null
+++ b/chrome/third_party/hunspell/README.myspell
@@ -0,0 +1,69 @@
+MySpell is a simple spell checker that uses affix
+compression and is modelled after the spell checker
+ispell.
+
+MySpell was written to explore how affix compression
+can be implemented.
+
+The Main features of MySpell are:
+
+1. written in C++ to make it easier to interface with
+ Pspell, OpenOffice, AbiWord, etc
+
+2. it is stateless, uses no static variables and
+ should be completely reentrant with almost no
+ ifdefs
+
+3. it tries to be as compatible with ispell to
+ the extent it can. It can read slightly modified
+ versions of munched ispell dictionaries (and it
+ comes with a munched english wordlist borrowed from
+ Kevin Atkinson's excellent Aspell.
+
+4. it uses a heavily modified aff file format that
+ can be derived from ispell aff files but uses
+ the iso-8859-X character sets only
+
+5. it is simple with *lots* of comments that
+ describes how the affixes are stored
+ and tested for (based on the approach used by
+ ispell).
+
+6. it supports improved suggestions with replacement
+ tables and ngram-scoring based mechanisms in addition
+ to the main suggestion mechanisms
+
+7. like ispell it has a BSD license (and no
+ advertising clause)
+
+But ... it has *no* support for adding words
+to a personal dictionary, *no* support for converting
+between various text encodings, and *no* command line
+interface (it is purely meant to be a library).
+
+It can not (in any way) replace all of the functionality
+of ispell or aspell/pspell. It is meant as a learning
+tool for understanding affix compression and for
+being used by front ends like OpenOffice, Abiword, etc.
+
+MySpell has been tested under Linux and Solaris
+and has the world's simplest Makefile and no
+configure support.
+
+It does come with a simple example program that
+spell checks some words and returns suggestions.
+
+To build a static library and an example
+program under Linux simply type:
+
+tar -zxvf myspell.tar.gz
+cd myspell2
+make
+
+To run the example program:
+./example ./en_US.aff ./en_US.dic checkme.lst
+
+Please play around with it and let me know
+what you think.
+
+Please see the file CONTRIBUTORS for more info.
diff --git a/chrome/third_party/hunspell/SConscript b/chrome/third_party/hunspell/SConscript
new file mode 100644
index 0000000..1a1a6f9
--- /dev/null
+++ b/chrome/third_party/hunspell/SConscript
@@ -0,0 +1,83 @@
+# Copyright 2008, Google Inc.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+#
+# * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above
+# copyright notice, this list of conditions and the following disclaimer
+# in the documentation and/or other materials provided with the
+# distribution.
+# * Neither the name of Google Inc. nor the names of its
+# contributors may be used to endorse or promote products derived from
+# this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+# Copyright 2008 Google Inc. All Rights Reserved.
+
+Import('env')
+
+env = env.Clone()
+
+env.Prepend(
+ CPPPATH = [
+ '$ICU38_DIR/public/common',
+ '#/..',
+ ],
+)
+
+env.Append(
+ CPPDEFINES = [
+ 'W32',
+ 'OPENOFFICEORG',
+ 'CHROME_SPELL',
+ 'HUNSPELL_CHROME_CLIENT',
+ ],
+
+ CCFLAGS = [
+ '/TP',
+
+ '/wd4800',
+ '/wd4503',
+ '/wd4819',
+ ],
+)
+
+input_files = [
+ 'google/bdict_reader.cc',
+ 'src/hunspell/affentry.cxx',
+ 'src/hunspell/affixmgr.cxx',
+ 'src/hunspell/csutil.cxx',
+ 'src/hunspell/dictmgr.cxx',
+ 'src/hunspell/hashmgr.cxx',
+ 'src/hunspell/hunspell.cxx',
+ 'src/hunspell/suggestmgr.cxx',
+ 'src/parsers/textparser.cxx',
+]
+
+env.StaticLibrary('hunspell', input_files)
+
+
+
+dictionaries = [
+ 'dictionaries/en-US.bdic',
+ 'dictionaries/en-US.dic',
+ 'dictionaries/en-US.aff',
+]
+
+i = env.Install('$TARGET_ROOT/Dictionaries', dictionaries)
+env.Alias('chrome', i)
diff --git a/chrome/third_party/hunspell/copy_dictionary_files.rules b/chrome/third_party/hunspell/copy_dictionary_files.rules
new file mode 100644
index 0000000..40a35f4
--- /dev/null
+++ b/chrome/third_party/hunspell/copy_dictionary_files.rules
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<VisualStudioToolFile
+ Name="Copy dictionary files"
+ Version="8.00"
+ >
+ <Rules>
+ <CustomBuildRule
+ Name="CopyDictionaries"
+ DisplayName="Copy Dictionaries"
+ CommandLine="xcopy /R /C /Y $(InputPath) $(OutDir)\Dictionaries"
+ Outputs="$(OutDir)\Dictionaries\$(InputFileName)"
+ FileExtensions="*.bdic"
+ ExecutionDescription="Copy dictionary file(s) to output dir"
+ >
+ <Properties>
+ </Properties>
+ </CustomBuildRule>
+ </Rules>
+</VisualStudioToolFile>
diff --git a/chrome/third_party/hunspell/dictionaries/en-US.aff b/chrome/third_party/hunspell/dictionaries/en-US.aff
new file mode 100644
index 0000000..bf6a182
--- /dev/null
+++ b/chrome/third_party/hunspell/dictionaries/en-US.aff
@@ -0,0 +1,1040 @@
+AF 837
+AF mn # 1
+AF 1n # 2
+AF pt # 3
+AF p # 4
+AF ct # 5
+AF M # 6
+AF MS # 7
+AF DGLRS # 8
+AF S # 9
+AF UY # 10
+AF DGLS # 11
+AF U # 12
+AF AU # 13
+AF A # 14
+AF DGNSX # 15
+AF SY # 16
+AF DGS # 17
+AF DY # 18
+AF Y # 19
+AF GJRS # 20
+AF EIMS # 21
+AF DGPSY # 22
+AF DGRSZ # 23
+AF DGNSVX # 24
+AF E # 25
+AF DGMS # 26
+AF DGLRSZ # 27
+AF PY # 28
+AF DGRSV # 29
+AF MS! # 30
+AF DGRS # 31
+AF MPSY # 32
+AF PRTY # 33
+AF DGRSY # 34
+AF NPRSTXY # 35
+AF ADGS # 36
+AF DGPRSTVY # 37
+AF PRSTY # 38
+AF BDGRSVZ # 39
+AF LS # 40
+AF MSU # 41
+AF P # 42
+AF IMS # 43
+AF IU # 44
+AF I # 45
+AF PSY # 46
+AF DG # 47
+AF AMS # 48
+AF DGMRSZ # 49
+AF BDGJMS # 50
+AF IY # 51
+AF DGR # 52
+AF BDGLRSZ # 53
+AF RT # 54
+AF DGNS # 55
+AF DMS # 56
+AF BDGMS # 57
+AF AI # 58
+AF ACDGINSX # 59
+AF ACIM # 60
+AF APY # 61
+AF ADGSV # 62
+AF AS # 63
+AF DGSV # 64
+AF MSY # 65
+AF BDGMRSZ # 66
+AF BDGRSZ # 67
+AF IPY # 68
+AF MSVY # 69
+AF ABDGLRS # 70
+AF DGJS # 71
+AF MN # 72
+AF MX # 73
+AF DEGMS # 74
+AF EY # 75
+AF MSV # 76
+AF DGPRSTY # 77
+AF DGJLRSZ # 78
+AF DGNSV # 79
+AF MRST # 80
+AF D # 81
+AF EM # 82
+AF EPUY # 83
+AF DEGS # 84
+AF EMS # 85
+AF MY # 86
+AF DEGNSX # 87
+AF BDGS # 88
+AF MNSV # 89
+AF RZ # 90
+AF DGJMRSZ # 91
+AF DEGNV # 92
+AF RTY # 93
+AF EP # 94
+AF BDELS # 95
+AF MRSZ # 96
+AF DGJMRSTZ # 97
+AF PRT # 98
+AF MNSX # 99
+AF DGPRSTYZ # 100
+AF BDGMRS # 101
+AF ADGLS # 102
+AF ACDGNSX # 103
+AF ACM # 104
+AF DLS # 105
+AF MRY # 106
+AF NX # 107
+AF DGNSVXY # 108
+AF BDGRZ # 109
+AF RSZ # 110
+AF DGMRS # 111
+AF BDGRST # 112
+AF BDGLRS # 113
+AF MR # 114
+AF DGNRSXZ # 115
+AF DGMSY # 116
+AF DGLRSVZ # 117
+AF AM # 118
+AF ADGRSZ # 119
+AF CS # 120
+AF DGSZ # 121
+AF N # 122
+AF IM # 123
+AF DGNPSXY # 124
+AF MNS # 125
+AF LP # 126
+AF ADEGS # 127
+AF AEMS # 128
+AF NVX # 129
+AF V # 130
+AF GMS # 131
+AF ADGNSX # 132
+AF ADEGLS # 133
+AF NPVXY # 134
+AF MU # 135
+AF DGNPSTVXY # 136
+AF DEGRS # 137
+AF IPUY # 138
+AF DGMPRSTVYZ # 139
+AF HM # 140
+AF BS # 141
+AF DS # 142
+AF AES # 143
+AF PS # 144
+AF AE # 145
+AF TV # 146
+AF EU # 147
+AF DGNPSVXY # 148
+AF BDGLS # 149
+AF DGMNRS # 150
+AF MNRSX # 151
+AF DGMRSV # 152
+AF ADEGRS # 153
+AF AEM # 154
+AF ABDGLS # 155
+AF CU # 156
+AF BDGJRS # 157
+AF AY # 158
+AF BDGLMRSZ # 159
+AF BDGSV # 160
+AF PUY # 161
+AF BDGNRSVX # 162
+AF DGMSV # 163
+AF R # 164
+AF DGM # 165
+AF GS # 166
+AF DGMPSY # 167
+AF NPXY # 168
+AF C # 169
+AF DM # 170
+AF DGJMS # 171
+AF DGMRST # 172
+AF GJRZ # 173
+AF GRZ # 174
+AF MRS # 175
+AF NPSY # 176
+AF PRST # 177
+AF BDGMRSY # 178
+AF DGJRSZ # 179
+AF DGSU # 180
+AF DGRST # 181
+AF BDGJMRSZ # 182
+AF DGSY # 183
+AF CEU # 184
+AF CDGLRS # 185
+AF CMS # 186
+AF DGJRS # 187
+AF NSX # 188
+AF ACDGKS # 189
+AF AC # 190
+AF DGLMRSZ # 191
+AF DMRSZ # 192
+AF BGJRSZ # 193
+AF JMSY # 194
+AF BGJNRSZ # 195
+AF GJS # 196
+AF MNRS # 197
+AF GJMRSZ # 198
+AF GNS # 199
+AF GNRSZ # 200
+AF KS # 201
+AF EMSU # 202
+AF DEGRSZ # 203
+AF MP # 204
+AF BGSU # 205
+AF MNR # 206
+AF GM # 207
+AF RS # 208
+AF DGJM # 209
+AF GJRSZ # 210
+AF DGJMRS # 211
+AF GT # 212
+AF DGMPS # 213
+AF GMRS # 214
+AF DGNSXY # 215
+AF HMS # 216
+AF JM # 217
+AF MPY # 218
+AF DGMN # 219
+AF NY # 220
+AF DGK # 221
+AF DGJNPRSTXY # 222
+AF DGJPRSTYZ # 223
+AF G # 224
+AF MPRST # 225
+AF DGPRST # 226
+AF GRSZ # 227
+AF RST # 228
+AF DGJMPRSTY # 229
+AF IS # 230
+AF MRZ # 231
+AF DGHS # 232
+AF AIU # 233
+AF BDGJRSZ # 234
+AF ADIU # 235
+AF PU # 236
+AF DGNRSZ # 237
+AF MNY # 238
+AF DGHMS # 239
+AF BGRSZ # 240
+AF DGJPRSTY # 241
+AF DGRZ # 242
+AF GNPRSTXY # 243
+AF RYZ # 244
+AF DGJRZ # 245
+AF HS # 246
+AF DGMY # 247
+AF MNT # 248
+AF CMS! # 249
+AF AGS # 250
+AF ! # 251
+AF S! # 252
+AF CDGRS # 253
+AF DGMRSY # 254
+AF GRS # 255
+AF GMR # 256
+AF ACS # 257
+AF DGMRY # 258
+AF DGMRZ # 259
+AF MSZ # 260
+AF IP # 261
+AF ABDGRS # 262
+AF CDGS # 263
+AF PRTU # 264
+AF CDGRSZ # 265
+AF CM # 266
+AF DGLMS # 267
+AF BDMRSZ # 268
+AF DGMNSX # 269
+AF GMN # 270
+AF DGJLMS # 271
+AF BGJLRSZ # 272
+AF FN # 273
+AF FM # 274
+AF DFGRS # 275
+AF FMS # 276
+AF B # 277
+AF F # 278
+AF ACMS # 279
+AF RSTY # 280
+AF FS # 281
+AF AFKMS # 282
+AF RTU # 283
+AF DGRSYZ # 284
+AF DGMNX # 285
+AF DMRS # 286
+AF MRSTY # 287
+AF DGJMPRSTZ # 288
+AF GMNRS # 289
+AF MPRSTY # 290
+AF DGMNS # 291
+AF DFS # 292
+AF ADGNS # 293
+AF DGNRSX # 294
+AF ADGIS # 295
+AF ACDEGKRSZ # 296
+AF ACEKM # 297
+AF DPRTUY # 298
+AF DRTU # 299
+AF DU # 300
+AF GJ # 301
+AF SU # 302
+AF MV # 303
+AF GJMS # 304
+AF DES # 305
+AF CDGJRSZ # 306
+AF DGNRSVXZ # 307
+AF NSXY # 308
+AF AIM # 309
+AF ADGSU # 310
+AF ACDGS # 311
+AF ESU # 312
+AF GIJRSZ # 313
+AF ES # 314
+AF GJLRTZ # 315
+AF EI # 316
+AF PRTUY # 317
+AF BDGRS # 318
+AF BDGNPRSTVXY # 319
+AF ACDEGS # 320
+AF CDGSU # 321
+AF DGSX # 322
+AF GNVX # 323
+AF NPRTXY # 324
+AF DGMNPRSXY # 325
+AF DV # 326
+AF ADGJS # 327
+AF ABDGS # 328
+AF L # 329
+AF IMU # 330
+AF Z # 331
+AF BRZ # 332
+AF DGMNSVX # 333
+AF DSV # 334
+AF DRZ # 335
+AF DGRV # 336
+AF PSUY # 337
+AF INPXY # 338
+AF AIMS # 339
+AF BGZ # 340
+AF KMS # 341
+AF BDGJSZ # 342
+AF DGSVY # 343
+AF BDG # 344
+AF CDGNSX # 345
+AF DGNVX # 346
+AF DEGLMS # 347
+AF DGV # 348
+AF DGRSVZ # 349
+AF DNRVXZ # 350
+AF NPX # 351
+AF DNXY # 352
+AF AEFMS # 353
+AF INSVX # 354
+AF BDGPRSTVY # 355
+AF GJMSVY # 356
+AF T # 357
+AF ACU # 358
+AF DEGMRS # 359
+AF AF # 360
+AF EPY # 361
+AF DGMRSYZ # 362
+AF NS # 363
+AF ADEGSU # 364
+AF BDGRSYZ # 365
+AF DGMS! # 366
+AF DGIRS # 367
+AF ADGKNSVX # 368
+AF AKM # 369
+AF K # 370
+AF BDEGS # 371
+AF CG # 372
+AF GMRSZ # 373
+AF BDGJMPRSTYZ # 374
+AF RTZ # 375
+AF BDGNSX # 376
+AF BDGKRSZ # 377
+AF KM # 378
+AF BIS # 379
+AF AFI # 380
+AF FSY # 381
+AF AEPY # 382
+AF DGNPRSTXYZ # 383
+AF DGNPRSTXY # 384
+AF HMN # 385
+AF DGMRSVZ # 386
+AF DGJ # 387
+AF HPRSTY # 388
+AF BMZ # 389
+AF IRTY # 390
+AF BGRZ # 391
+AF GV # 392
+AF LZ # 393
+AF DGZ # 394
+AF ADGRS # 395
+AF BDGNRSX # 396
+AF PVY # 397
+AF DGMP # 398
+AF DGX # 399
+AF FR # 400
+AF DGIS # 401
+AF ISY # 402
+AF GL # 403
+AF FU # 404
+AF BZ # 405
+AF J # 406
+AF PSU # 407
+AF BR # 408
+AF DGNPRSXY # 409
+AF INPY # 410
+AF ADGLRSZ # 411
+AF JR # 412
+AF DGMRSXZ! # 413
+AF DGNPRSVXYZ # 414
+AF ST # 415
+AF DGNPRSVXY # 416
+AF BDGJS # 417
+AF PRSYZ # 418
+AF DGLZ # 419
+AF DIM # 420
+AF DGLR # 421
+AF DGL # 422
+AF SV # 423
+AF BM # 424
+AF DGLNRSVXZ # 425
+AF DGNRSVX # 426
+AF IPVY # 427
+AF BDGR # 428
+AF ABDGNSVX # 429
+AF DGRSTYZ # 430
+AF DGJRSTZ # 431
+AF GJVX # 432
+AF AFU # 433
+AF GHJRTZ # 434
+AF DGPRSZ # 435
+AF ABDGMS # 436
+AF DGH # 437
+AF ADGMS # 438
+AF MNRSTY # 439
+AF ACFIK # 440
+AF CFI # 441
+AF FKMS # 442
+AF CI # 443
+AF MPS # 444
+AF DGMNRSZ # 445
+AF DGMPRST # 446
+AF GIS # 447
+AF DGHMSY # 448
+AF DGMNY # 449
+AF DGLMRS # 450
+AF MNX # 451
+AF DFMS # 452
+AF DGMSZ # 453
+AF DGN # 454
+AF ACDGRSZ # 455
+AF AMSU # 456
+AF DEGLS # 457
+AF DGJMRSVZ # 458
+AF DEGLRS # 459
+AF AN # 460
+AF DSUY # 461
+AF DGPRSY # 462
+AF NXY # 463
+AF ISU # 464
+AF BMS # 465
+AF BDGMNSX # 466
+AF BDGNRSVXZ # 467
+AF DIMS # 468
+AF IPSY # 469
+AF BDGMRSVZ # 470
+AF DGRSVY # 471
+AF DPRSTY # 472
+AF DGPS # 473
+AF GMNRSZ # 474
+AF DNX # 475
+AF DGNPRSTX # 476
+AF CDGMS # 477
+AF MPSU # 478
+AF DEGMRSZ # 479
+AF GMRSTY # 480
+AF DFGNSVX # 481
+AF DGPRSTZ # 482
+AF CFL # 483
+AF CFMS # 484
+AF DFGKS # 485
+AF RVZ # 486
+AF IMRSZ # 487
+AF HMRS # 488
+AF LMS # 489
+AF DEFGS # 490
+AF DGKMRSZ # 491
+AF CKMS # 492
+AF ABDGJS # 493
+AF ACDFGRS # 494
+AF CIM # 495
+AF ACIR # 496
+AF GMSZ # 497
+AF DFGIS # 498
+AF DGHJMRSZ # 499
+AF AK # 500
+AF DGJMNRZ # 501
+AF DGMPRSTY # 502
+AF GJM # 503
+AF DGJMRSY # 504
+AF BDGPRST # 505
+AF BDGJRSTZ # 506
+AF BRSZ # 507
+AF BGPRSZ # 508
+AF HT # 509
+AF ASV # 510
+AF ACFIMS # 511
+AF ACDFGIS # 512
+AF AFIS # 513
+AF SUY # 514
+AF FK # 515
+AF AGSU # 516
+AF ADGNRSZ # 517
+AF M! # 518
+AF DGJMRSZ! # 519
+AF ADGMRSZ # 520
+AF PRY # 521
+AF PRTZ # 522
+AF FIKMS # 523
+AF DGJMPRSTYZ # 524
+AF CF # 525
+AF DST # 526
+AF ACDGNSVX # 527
+AF FY # 528
+AF GHRSZ # 529
+AF GMNRST # 530
+AF GHJMRZ # 531
+AF NRZ # 532
+AF DGMPRSTYZ # 533
+AF NPRSTY # 534
+AF DGPY # 535
+AF GHRSYZ # 536
+AF PR # 537
+AF BVX # 538
+AF BDGIS # 539
+AF H # 540
+AF DGJR # 541
+AF GJNPRSTXY # 542
+AF NPRTY # 543
+AF DGJNX # 544
+AF DGHRSZ # 545
+AF GHJRSTZ # 546
+AF MNRXZ # 547
+AF MVZ # 548
+AF DRYZ # 549
+AF DGMRSTZ # 550
+AF BDEGRSZ # 551
+AF ACI # 552
+AF DGJPRSTZ # 553
+AF CDGNRSXZ # 554
+AF CDGNS # 555
+AF NPY # 556
+AF BMNSVX # 557
+AF PSVY # 558
+AF DGLRSV # 559
+AF LRZ # 560
+AF BJ # 561
+AF BDGMRZ # 562
+AF GP # 563
+AF LR # 564
+AF DGNSY # 565
+AF TZ # 566
+AF PT # 567
+AF DJRZ # 568
+AF GR # 569
+AF DGMR # 570
+AF MPRSY # 571
+AF BGSZ # 572
+AF ADEGNSX # 573
+AF EUY # 574
+AF ELST # 575
+AF DGMNPSY # 576
+AF BDGNSVX # 577
+AF ADM # 578
+AF GNSX # 579
+AF VY # 580
+AF DGJNRSXZ # 581
+AF DGJMPRS # 582
+AF ADGNSVX # 583
+AF JMR # 584
+AF ADFGS # 585
+AF DEGPSY # 586
+AF EFIMS # 587
+AF X # 588
+AF EFGIS # 589
+AF JMS # 590
+AF BGJRS # 591
+AF DGJMNSX # 592
+AF GHLM # 593
+AF DGKMS # 594
+AF DGJRSY # 595
+AF DRST # 596
+AF BDGJRZ # 597
+AF CGRSZ # 598
+AF DMSY # 599
+AF MNXY # 600
+AF AP # 601
+AF DRS # 602
+AF BPSUY # 603
+AF DGPRTY # 604
+AF BDGNS # 605
+AF DGJMNRSXZ # 606
+AF BDGHJPRSTYZ # 607
+AF GJTVX # 608
+AF DGRSUZ # 609
+AF DGJPRSYZ # 610
+AF PRYZ # 611
+AF BDGJMRSYZ # 612
+AF GMY # 613
+AF DNY # 614
+AF DLV # 615
+AF DGMPRSY # 616
+AF AKS # 617
+AF DGJMY # 618
+AF CDS # 619
+AF EGS # 620
+AF GJPRSTY # 621
+AF BDGLMRS # 622
+AF GJRSY # 623
+AF DGRT # 624
+AF BG # 625
+AF DHMS # 626
+AF DNS # 627
+AF CK # 628
+AF DEGSV # 629
+AF BGMRS # 630
+AF CKS # 631
+AF ACDGNS # 632
+AF MST # 633
+AF ACKNS # 634
+AF DGMRYZ # 635
+AF ACK # 636
+AF ACDEG # 637
+AF APS # 638
+AF ABDGRSZ # 639
+AF BDGPRSTY # 640
+AF DGJMRSYZ # 641
+AF DMSYZ # 642
+AF RSYZ # 643
+AF GMRZ # 644
+AF CY # 645
+AF CDFGS # 646
+AF CRS # 647
+AF DGJMR # 648
+AF NPSXY # 649
+AF DGLPRSTY # 650
+AF LPRSTY # 651
+AF NRT # 652
+AF NPRSTX # 653
+AF MNPSX # 654
+AF RY # 655
+AF DGJPRTYZ # 656
+AF DGNX # 657
+AF GHS # 658
+AF DGJPRSZ # 659
+AF GNRS # 660
+AF GLS # 661
+AF GSY # 662
+AF DGY # 663
+AF DGJMRSTY # 664
+AF DGJMRZ # 665
+AF MNRSZ # 666
+AF ADGMRS # 667
+AF BDGJRSVZ # 668
+AF DGMPRS # 669
+AF BDGMRSYZ # 670
+AF DMNRS # 671
+AF DGJLRS # 672
+AF ABGLS # 673
+AF DRSZ # 674
+AF NPSX # 675
+AF ADG # 676
+AF DGJMSZ # 677
+AF MRT # 678
+AF DGRS! # 679
+AF MZ # 680
+AF DGHRZ # 681
+AF AEU # 682
+AF DGJLMRSZ # 683
+AF BDEGRS # 684
+AF DGNPRSTY # 685
+AF DGMNRSX # 686
+AF ABDGMRSZ # 687
+AF CE # 688
+AF EKM # 689
+AF DEGKRSZ # 690
+AF KY # 691
+AF ADGKMS # 692
+AF ADGJRS # 693
+AF DGKRS # 694
+AF BL # 695
+AF BDGLPRSYZ # 696
+AF MNSVX # 697
+AF BDGRSV # 698
+AF AGMS # 699
+AF NPRSTVXY # 700
+AF MNVX # 701
+AF BJR # 702
+AF BDGRVZ # 703
+AF DEGSY # 704
+AF SZ # 705
+AF DGRSTZ # 706
+AF PRS # 707
+AF DGMSVY # 708
+AF GJTX # 709
+AF FIMS # 710
+AF DGPRSTUY # 711
+AF PRSTYZ # 712
+AF DGKNS # 713
+AF BGR # 714
+AF BGJRZ # 715
+AF GSZ # 716
+AF BDGMU # 717
+AF PTY # 718
+AF GJZ # 719
+AF DGRY # 720
+AF GNSVXZ # 721
+AF DGNPSX # 722
+AF BES # 723
+AF PRTVY # 724
+AF MRSVX # 725
+AF BGJ # 726
+AF DGLSZ # 727
+AF DGNRSTX # 728
+AF DGNRZ # 729
+AF DGNPRTXY # 730
+AF ADGJRSZ # 731
+AF DGJMNRSZ # 732
+AF GJTV # 733
+AF NPRTX # 734
+AF ABMS # 735
+AF DGMPRSTZ # 736
+AF IPRTY # 737
+AF GSU # 738
+AF DGRSU # 739
+AF CDGIKRS # 740
+AF CIKM # 741
+AF DFGMS # 742
+AF DGJRST # 743
+AF DGLRSYZ # 744
+AF DGRSTVY # 745
+AF DGNPRSTVXY # 746
+AF DGJSY # 747
+AF BDGPSV # 748
+AF AGRSZ # 749
+AF AEFU # 750
+AF CFM # 751
+AF AIS # 752
+AF BGJMRSZ # 753
+AF ALS # 754
+AF RT! # 755
+AF BGRS # 756
+AF IMRS # 757
+AF ACDGRS # 758
+AF BDGJRYZ # 759
+AF AG # 760
+AF DJMS # 761
+AF GJMNS # 762
+AF DGNPRTYZ # 763
+AF RU # 764
+AF AENSX # 765
+AF DGJMRSTYZ # 766
+AF ADU # 767
+AF PRSY # 768
+AF AD # 769
+AF ADFGIS # 770
+AF IK # 771
+AF DGPRSTU # 772
+AF GHRS # 773
+AF DGMNPRSTXY # 774
+AF PRTYZ # 775
+AF BDGJMSZ # 776
+AF LPSY # 777
+AF DGRYZ # 778
+AF DGMPRSZ # 779
+AF BGJX # 780
+AF MSUY # 781
+AF ACDGMRS # 782
+AF GHJRSZ # 783
+AF BDGMRSTZ # 784
+AF IPS # 785
+AF DHMRS # 786
+AF FPS # 787
+AF DFGIRS # 788
+AF BHM # 789
+AF INPRTVY # 790
+AF DGRSTV # 791
+AF CIP # 792
+AF CNVX # 793
+AF AKU # 794
+AF CFKMS # 795
+AF BCDFGRSZ # 796
+AF AFK # 797
+AF GJNX # 798
+AF AGRS # 799
+AF ADSU # 800
+AF DMRZ # 801
+AF DGIRSZ # 802
+AF AEFS # 803
+AF ABS # 804
+AF ACEFKMS # 805
+AF EFK # 806
+AF ACFKMS # 807
+AF CEFK # 808
+AF BDMS # 809
+AF EFGS # 810
+AF DP # 811
+AF BGJTX # 812
+AF GY # 813
+AF BGMS # 814
+AF GJR # 815
+AF DGRSTY # 816
+AF DGINSX # 817
+AF DFGS # 818
+AF ADFGNRSX # 819
+AF AFIMS # 820
+AF DGILS # 821
+AF AR # 822
+AF DMR # 823
+AF AFIKMS # 824
+AF KSY # 825
+AF DGIMS # 826
+AF DGHPRSTYZ # 827
+AF DGJPRS # 828
+AF DMRST # 829
+AF DGJMNRSTX # 830
+AF GRSUZ # 831
+AF RTUY # 832
+AF DMNSXY # 833
+AF MSYZ # 834
+AF PRSTU # 835
+AF ABGJRS # 836
+AF GJT # 837
+SET ISO8859-1
+TRY esianrtolcdugmphbyfvkwzESIANRTOLCDUGMPHBYFVKWZ'
+NOSUGGEST !
+
+# ordinal numbers
+COMPOUNDMIN 1
+# only in compounds: 1th, 2th, 3th
+ONLYINCOMPOUND c
+# compound rules:
+# 1. [0-9]*1[0-9]th (10th, 11th, 12th, 56714th, etc.)
+# 2. [0-9]*[02-9](1st|2nd|3rd|[4-9]th) (21st, 22nd, 123rd, 1234th, etc.)
+COMPOUNDRULE 2
+COMPOUNDRULE n*1t
+COMPOUNDRULE n*mp
+WORDCHARS 0123456789
+
+PFX A Y 1
+PFX A 0 re .
+
+PFX I Y 1
+PFX I 0 in .
+
+PFX U Y 1
+PFX U 0 un .
+
+PFX C Y 1
+PFX C 0 de .
+
+PFX E Y 1
+PFX E 0 dis .
+
+PFX F Y 1
+PFX F 0 con .
+
+PFX K Y 1
+PFX K 0 pro .
+
+SFX V N 2
+SFX V e ive e
+SFX V 0 ive [^e]
+
+SFX N Y 3
+SFX N e ion e
+SFX N y ication y
+SFX N 0 en [^ey]
+
+SFX X Y 3
+SFX X e ions e
+SFX X y ications y
+SFX X 0 ens [^ey]
+
+SFX H N 2
+SFX H y ieth y
+SFX H 0 th [^y]
+
+SFX Y Y 1
+SFX Y 0 ly .
+
+SFX G Y 2
+SFX G e ing e
+SFX G 0 ing [^e]
+
+SFX J Y 2
+SFX J e ings e
+SFX J 0 ings [^e]
+
+SFX D Y 4
+SFX D 0 d e
+SFX D y ied [^aeiou]y
+SFX D 0 ed [^ey]
+SFX D 0 ed [aeiou]y
+
+SFX T N 4
+SFX T 0 st e
+SFX T y iest [^aeiou]y
+SFX T 0 est [aeiou]y
+SFX T 0 est [^ey]
+
+SFX R Y 4
+SFX R 0 r e
+SFX R y ier [^aeiou]y
+SFX R 0 er [aeiou]y
+SFX R 0 er [^ey]
+
+SFX Z Y 4
+SFX Z 0 rs e
+SFX Z y iers [^aeiou]y
+SFX Z 0 ers [aeiou]y
+SFX Z 0 ers [^ey]
+
+SFX S Y 4
+SFX S y ies [^aeiou]y
+SFX S 0 s [aeiou]y
+SFX S 0 es [sxzh]
+SFX S 0 s [^sxzhy]
+
+SFX P Y 3
+SFX P y iness [^aeiou]y
+SFX P 0 ness [aeiou]y
+SFX P 0 ness [^y]
+
+SFX M Y 1
+SFX M 0 's .
+
+SFX B Y 3
+SFX B 0 able [^aeiou]
+SFX B 0 able ee
+SFX B e able [^aeiou]e
+
+SFX L Y 1
+SFX L 0 ment .
+
+REP 89
+REP alot a_lot
+REP a ei
+REP ei a
+REP a ey
+REP ey a
+REP ai ie
+REP ie ai
+REP are air
+REP are ear
+REP are eir
+REP air are
+REP air ere
+REP ere air
+REP ere ear
+REP ere eir
+REP ear are
+REP ear air
+REP ear ere
+REP eir are
+REP eir ere
+REP ch te
+REP te ch
+REP ch ti
+REP ti ch
+REP ch tu
+REP tu ch
+REP ch s
+REP s ch
+REP ch k
+REP k ch
+REP f ph
+REP ph f
+REP gh f
+REP f gh
+REP i igh
+REP igh i
+REP i uy
+REP uy i
+REP i ee
+REP ee i
+REP j di
+REP di j
+REP j gg
+REP gg j
+REP j ge
+REP ge j
+REP s ti
+REP ti s
+REP s ci
+REP ci s
+REP k cc
+REP cc k
+REP k qu
+REP qu k
+REP kw qu
+REP o eau
+REP eau o
+REP o ew
+REP ew o
+REP oo ew
+REP ew oo
+REP ew ui
+REP ui ew
+REP oo ui
+REP ui oo
+REP ew u
+REP u ew
+REP oo u
+REP u oo
+REP u oe
+REP oe u
+REP u ieu
+REP ieu u
+REP ue ew
+REP ew ue
+REP uff ough
+REP oo ieu
+REP ieu oo
+REP ier ear
+REP ear ier
+REP ear air
+REP air ear
+REP w qu
+REP qu w
+REP z ss
+REP ss z
+REP shun tion
+REP shun sion
+REP shun cion
diff --git a/chrome/third_party/hunspell/dictionaries/en-US.bdic b/chrome/third_party/hunspell/dictionaries/en-US.bdic
new file mode 100644
index 0000000..8eceaaf
--- /dev/null
+++ b/chrome/third_party/hunspell/dictionaries/en-US.bdic
Binary files differ
diff --git a/chrome/third_party/hunspell/dictionaries/en-US.dic b/chrome/third_party/hunspell/dictionaries/en-US.dic
new file mode 100644
index 0000000..0f3263c
--- /dev/null
+++ b/chrome/third_party/hunspell/dictionaries/en-US.dic
@@ -0,0 +1,62160 @@
+62158
+0/1
+1/2
+2/1
+3/1
+4/1
+5/1
+6/1
+7/1
+8/1
+9/1
+0th/3
+1st/4
+1th/5
+2nd/4
+2th/5
+3rd/4
+3th/5
+4th/3
+5th/3
+6th/3
+7th/3
+8th/3
+9th/3
+a
+A
+a
+AA
+AAA
+Aachen/6
+aardvark/7
+Aaren/6
+Aarhus/6
+Aarika/6
+Aaron/6
+AB
+aback
+abacus/7
+abaft
+Abagael/6
+Abagail/6
+abalone/7
+abandoner/6
+abandon/8
+abandonment/7
+abase/8
+abasement/9
+abaser/6
+abashed/10
+abashment/7
+abash/11
+abate/8
+abated/12
+abatement/7
+abater/6
+abattoir/7
+Abba/6
+Abbe/6
+abb�/9
+abbess/7
+Abbey/6
+abbey/7
+Abbie/6
+Abbi/6
+Abbot/6
+abbot/7
+Abbott/6
+abbr
+abbrev
+abbreviated/13
+abbreviates/14
+abbreviate/15
+abbreviating/14
+abbreviation/6
+Abbye/6
+Abby/6
+ABC/6
+Abdel/6
+abdicate/15
+abdication/6
+abdomen/7
+abdominal/16
+abduct/17
+abduction/7
+abductor/7
+Abdul/6
+ab/18
+abeam
+Abelard/6
+Abel/6
+Abelson/6
+Abe/6
+Aberdeen/6
+Abernathy/6
+aberrant/16
+aberrational
+aberration/7
+abet/9
+abetted
+abetting
+abettor/7
+Abeu/6
+abeyance/7
+abeyant
+Abey/6
+abhorred
+abhorrence/7
+abhorrent/19
+abhorrer/6
+abhorring
+abhor/9
+abidance/7
+abide/20
+abider/6
+abiding/19
+Abidjan/6
+Abie/6
+Abigael/6
+Abigail/6
+Abigale/6
+Abilene/6
+ability/21
+abjection/7
+abjectness/7
+abject/22
+abjuration/7
+abjuratory
+abjurer/6
+abjure/23
+ablate/24
+ablation/6
+ablative/16
+ablaze
+abler/25
+ables/25
+ablest
+able/12
+abloom
+ablution/7
+Ab/6
+ABM/9
+abnegate/15
+abnegation/6
+Abner/6
+abnormality/7
+abnormal/16
+aboard
+abode/26
+abolisher/6
+abolish/27
+abolishment/7
+abolitionism/7
+abolitionist/7
+abolition/7
+abominable
+abominably
+abominate/15
+abomination/6
+aboriginal/16
+aborigine/7
+Aborigine/7
+aborning
+abortionist/7
+abortion/7
+abortiveness/6
+abortive/28
+abort/29
+Abo/30
+abound/17
+about/9
+aboveboard
+aboveground
+above/9
+abracadabra/9
+abrader/6
+abrade/31
+Abraham/6
+Abrahan/6
+Abra/6
+Abramo/6
+Abram/7
+Abramson/6
+Abran/6
+abrasion/7
+abrasiveness/9
+abrasive/32
+abreaction/7
+abreast
+abridge/31
+abridged/12
+abridger/6
+abridgment/7
+abroad
+abrogate/15
+abrogation/6
+abrogator/7
+abruptness/7
+abrupt/33
+ABS
+abscess/26
+abscissa/7
+abscission/7
+absconder/6
+abscond/23
+abseil/31
+absence/7
+absenteeism/7
+absentee/7
+absentia/6
+absentmindedness/9
+absentminded/28
+absent/34
+absinthe/7
+abs/6
+absoluteness/7
+absolute/35
+absolution/6
+absolutism/7
+absolutist/7
+absolve/31
+absolver/6
+absorb/36
+absorbed/12
+absorbency/7
+absorbent/7
+absorber/7
+absorbing/19
+absorption/7
+absorptive
+absorptivity/6
+abstainer/6
+abstain/23
+abstemiousness/7
+abstemious/28
+abstention/7
+abstinence/7
+abstinent/19
+abstractedness/7
+abstracted/28
+abstracter/6
+abstractionism/6
+abstractionist/7
+abstraction/7
+abstractness/7
+abstractor/7
+abstract/37
+abstruseness/7
+abstruse/33
+absurdity/7
+absurdness/7
+absurd/38
+Abuja
+abundance/7
+abundant/19
+abused/25
+abuse/39
+abuser/6
+abuses/25
+abusing/25
+abusiveness/7
+abusive/28
+abut/40
+abutment/7
+abutted
+abutter/7
+abutting
+abuzz
+abysmal/19
+abyssal
+Abyssinia/6
+Abyssinian
+abyss/7
+AC
+acacia/7
+academe/7
+academia/7
+academical/19
+academicianship
+academician/7
+academic/9
+academy/7
+Acadia/6
+acanthus/7
+Acapulco/6
+accede/17
+accelerated/12
+accelerate/24
+accelerating/19
+acceleration/6
+accelerator/7
+accelerometer/7
+accented/12
+accent/26
+accentual/19
+accentuate/15
+accentuation/6
+acceptability/41
+acceptableness/7
+acceptable/42
+acceptably/12
+acceptance/7
+acceptant
+acceptation/7
+accepted/19
+accepter/6
+accepting/28
+acceptor/7
+accept/39
+accessed/14
+accessibility/43
+accessible/44
+accessibly/45
+accession/26
+accessors
+accessory/7
+access/26
+accidence/6
+accidentalness/6
+accidental/46
+accident/7
+acclaimer/6
+acclaim/31
+acclamation/7
+acclimate/15
+acclimation/6
+acclimatisation
+acclimatise/47
+acclimatization/48
+acclimatized/12
+acclimatize/23
+acclimatizes/14
+acclivity/7
+accolade/26
+accommodated/12
+accommodate/24
+accommodating/19
+accommodation/6
+accommodativeness/6
+accommodative/42
+accompanied/12
+accompanier/6
+accompaniment/7
+accompanist/7
+accompany/31
+accomplice/7
+accomplished/12
+accomplisher/6
+accomplishment/7
+accomplish/27
+accordance/7
+accordant/19
+accorder/6
+according/19
+accordionist/7
+accordion/7
+accord/49
+accost/17
+accountability/41
+accountableness/6
+accountable/12
+accountably/12
+accountancy/7
+accountant/7
+account/50
+accounted/12
+accounting/6
+accouter/17
+accouterments
+accouterment's
+accoutrement/6
+Accra/6
+accreditation/7
+accredited/12
+accredit/17
+accretion/7
+accrual/7
+accrue/17
+acct
+acculturate/24
+acculturation/6
+accumulate/24
+accumulation/6
+accumulativeness/6
+accumulative/28
+accumulator/7
+accuracy/43
+accurate/51
+accurateness/7
+accursedness/7
+accursed/28
+accusal/6
+accusation/7
+accusative/9
+accusatory
+accused/6
+accuser/6
+accuse/23
+accusing/19
+accustomedness/6
+accustomed/42
+accustom/17
+ac/52
+aced/6
+acerbate/17
+acerbic
+acerbically
+acerbity/7
+ace/7
+acetaminophen/9
+acetate/7
+acetic
+acetone/7
+acetonic
+acetylene/7
+Acevedo/6
+Achaean/6
+Achebe/6
+ached/14
+ache/17
+achene/7
+Achernar/6
+aches/14
+Acheson/6
+achievable/12
+achieved/13
+achieve/53
+achievement/7
+achiever/6
+Achilles
+aching/19
+achoo
+achromatic
+achy/54
+acidic
+acidification/6
+acidify/55
+acidity/7
+acidness/6
+acidoses
+acidosis/6
+acid/32
+acidulous
+acing/6
+Ackerman/6
+acknowledgeable
+acknowledgedly
+acknowledged/12
+acknowledge/23
+acknowledger/6
+acknowledgment/48
+ACLU
+Ac/6
+ACM
+acme/7
+acne/56
+acolyte/7
+Aconcagua/6
+aconite/7
+acorn/7
+Acosta/6
+acoustical/19
+acoustician/6
+acoustic/9
+acoustics/6
+acquaintance/7
+acquaintanceship/9
+acquainted/12
+acquaint/36
+acquiesce/17
+acquiescence/7
+acquiescent/19
+acquirable
+acquire/36
+acquirement/7
+acquisition's/14
+acquisition/7
+acquisitiveness/7
+acquisitive/28
+acquit/9
+acquittal/7
+acquittance/6
+acquitted
+acquitter/6
+acquitting
+acreage/7
+acre/7
+acridity/7
+acridness/7
+acrid/33
+acrimoniousness/7
+acrimonious/28
+acrimony/7
+acrobatically
+acrobatic/9
+acrobatics/6
+acrobat/7
+acronym/7
+acrophobia/7
+Acropolis/6
+acropolis/7
+across
+acrostic/7
+Acrux/6
+acrylate/6
+acrylic/9
+ACT
+Actaeon/6
+Acta/6
+ACTH
+acting/9
+actinic
+actinide/7
+actinium/7
+actinometer/7
+action/57
+actions/58
+action's/58
+activate/59
+activated/12
+activation/60
+activator/7
+active/61
+actively/45
+activeness/7
+actives
+activism/7
+activist/7
+activities/14
+activity/43
+Acton/6
+actor/48
+actress/7
+act's
+Acts
+act/62
+actuality/7
+actualization/48
+actualize/17
+actualizes/14
+actual/16
+actuarial/19
+actuary/7
+actuate/15
+actuation/6
+actuator/7
+acuity/7
+acumen/7
+acupressure/9
+acupuncture/7
+acupuncturist/9
+acuteness/7
+acute/38
+acyclic
+acyclically
+acyclovir/9
+AD
+adage/7
+adagio/9
+Adah/6
+Adair/6
+Adaline/6
+Ada/6
+adamant/16
+Adamo/6
+Adam/7
+Adamson/6
+Adana/6
+Adan/6
+adaptability/7
+adaptable/12
+adaptation/7
+adaptedness/6
+adapted/42
+adapter/6
+adapting/14
+adaption
+adaptively
+adaptiveness/6
+adaptive/12
+adaptivity
+adapt/39
+Adara/6
+ad/63
+ADC
+Adda/6
+Addams
+addenda
+addend/7
+addendum/6
+adder/6
+Addia/6
+addiction/7
+addictive/42
+addict/64
+Addie/6
+Addi/6
+Addison/6
+additional/19
+addition/7
+additive/65
+additivity
+addle/17
+addressability
+addressable/12
+addressed/14
+addressee/7
+addresser/6
+addresses/14
+address/66
+Addressograph/6
+adduce/31
+adducer/6
+adduct/64
+adduction/6
+adductor/6
+Addy/6
+add/67
+Adelaida/6
+Adelaide/6
+Adela/6
+Adelbert/6
+Adele/6
+Adelheid/6
+Adelice/6
+Adelina/6
+Adelind/6
+Adeline/6
+Adella/6
+Adelle/6
+Adel/6
+Ade/6
+Adena/6
+Adenauer/6
+adenine/7
+Aden/6
+adenoidal
+adenoid/9
+adeptness/7
+adept/38
+adequacy/43
+adequate/68
+adequateness's/45
+adequateness/7
+Adey/6
+Adham/6
+Adhara/6
+adherence/7
+adherent/65
+adherer/6
+adhere/23
+adhesion/7
+adhesiveness/7
+adhesive/32
+adiabatic
+adiabatically
+Adiana/6
+Adidas/6
+adieu/9
+Adi/6
+Adina/6
+adi�s
+adipose/9
+Adirondack/7
+adj
+adjacency/7
+adjacent/19
+adjectival/19
+adjective/65
+adjoin/17
+adjoint/6
+adjourn/11
+adjournment/7
+adjudge/17
+adjudicate/24
+adjudication/6
+adjudicator/7
+adjudicatory
+adjunct/69
+adjuration/7
+adjure/17
+adjustable/12
+adjustably
+adjust/70
+adjusted/12
+adjuster's/14
+adjuster/7
+adjustive
+adjustment/48
+adjustor's
+adjutant/7
+Adkins/6
+Adlai/6
+Adler/6
+adman/6
+admen
+administer/71
+administrable
+administrate/24
+administration/6
+administrative/19
+administrator/7
+administratrix/6
+admirableness/6
+admirable/42
+admirably
+admiral/7
+admiralty/7
+Admiralty/9
+admiration/7
+admirer/6
+admire/67
+admiring/19
+admissibility/43
+admissible/45
+admissibly
+admission/48
+admit/63
+admittance/7
+admitted/14
+admittedly
+admitting/14
+admix/17
+admixture/7
+Adm/6
+Ad/72
+admonisher/6
+admonish/8
+admonishing/19
+admonishment/7
+admonition/7
+admonitory
+adobe/7
+adolescence/7
+adolescent/65
+Adolf/6
+Adolfo/6
+Adolphe/6
+Adolph/6
+Adolpho/6
+Adolphus/6
+Ado/6
+ado/7
+Adonis/7
+adopted/13
+adopter/6
+adoption/7
+adoptive/19
+adopt/39
+adopts/14
+adorableness/7
+adorable/42
+adorably
+Adora/6
+adoration/7
+adore/67
+Adoree/6
+Adore/6
+adorer/6
+adoring/19
+adorned/12
+Adorne/6
+adornment/7
+adorn/11
+ADP
+Adrea/6
+adrenalin
+adrenaline/7
+Adrenalin/7
+adrenal/16
+Adria/73
+Adriana/6
+Adriane/6
+Adrian/6
+Adrianna/6
+Adrianne/6
+Adriano/6
+Adriatic
+Adriena/6
+Adrien/6
+Adrienne/6
+adrift
+adroitness/7
+adroit/33
+ads
+ad's
+adsorbate/6
+adsorbent/9
+adsorb/17
+adsorption/7
+adsorptive/19
+adulate/15
+adulation/6
+adulator/7
+adulatory
+adulterant/7
+adulterated/12
+adulterate/15
+adulteration/6
+adulterer/7
+adulteress/7
+adulterous/19
+adultery/7
+adulthood/7
+adult/32
+adultness/6
+adumbrate/24
+adumbration/6
+adumbrative/19
+adv
+advance/27
+advancement/7
+advancer/6
+advantage/74
+advantageous/75
+advantageousness/6
+Adventist/6
+adventist/9
+adventitiousness/6
+adventitious/28
+adventive/19
+Advent/7
+advent/76
+adventurer/6
+adventuresome
+adventure/49
+adventuress/7
+adventurousness/7
+adventurous/28
+adverbial/65
+adverb/7
+adversarial
+adversary/7
+adverse/77
+adverseness/7
+adversity/7
+advert/17
+advertised/12
+advertise/78
+advertisement/7
+advertiser/6
+advertising/6
+advertorial/9
+advice/7
+Advil/6
+advisability/43
+advisable/45
+advisableness/6
+advisably
+advisedly/45
+advised/10
+advisee/7
+advisement/7
+adviser/6
+advise/53
+advisor/9
+advisor's
+advisory/9
+advocacy/7
+advocate/79
+advocation/6
+advt
+adze's
+adz/26
+Aegean
+aegis/7
+Aelfric/6
+Aeneas
+Aeneid/6
+aeolian
+Aeolus/6
+aeon's
+aerate/15
+aeration/6
+aerator/7
+aerialist/7
+aerial/65
+Aeriela/6
+Aeriell/6
+Aeriel/6
+aerie/80
+aeroacoustic
+aerobatic/9
+aerobically
+aerobic/9
+aerodrome/7
+aerodynamically
+aerodynamic/9
+aerodynamics/6
+aeronautical/19
+aeronautic/9
+aeronautics/6
+aerosolize/81
+aerosol/7
+aerospace/7
+Aeschylus/6
+Aesculapius/6
+Aesop/6
+aesthete/9
+aesthetically
+aestheticism/7
+aesthetics/6
+aesthetic/12
+aether/6
+aetiology/6
+AF
+AFAIK
+afar/9
+AFB
+AFC
+AFDC
+affability/7
+affable/54
+affably
+affair/7
+affectation/7
+affectedness/82
+affected/83
+affect/84
+affecter/6
+affecting/19
+affectionate/10
+affectioned
+affection/85
+affectioning
+affective/86
+afferent/16
+affiance/17
+affidavit/7
+affiliated/12
+affiliate/87
+affiliation/82
+affine
+affinity/7
+affirm/36
+affirmation/48
+affirmative/16
+affix/17
+afflatus/7
+afflict/64
+affliction/7
+afflictive/19
+affluence/7
+affluent/16
+afford/88
+afforest/14
+afforestation/7
+afforested
+afforesting
+afforests
+affray/26
+affricate/89
+affrication/6
+affricative/6
+affright
+affront/26
+Afghani/7
+Afghanistan/6
+afghan/7
+Afghan/7
+aficionado/7
+afield
+afire
+aflame
+afloat
+aflutter
+afoot
+afore
+aforementioned
+aforesaid
+aforethought/9
+afoul
+Afr
+afraid/12
+afresh
+Africa/6
+African/7
+Afrikaans/6
+Afrikaner/7
+afro
+Afrocentric
+Afrocentrism/9
+Afro/7
+afterbirth/6
+afterbirths
+afterburner/7
+aftercare/7
+aftereffect/7
+afterglow/7
+afterimage/7
+afterlife/6
+afterlives
+aftermath/6
+aftermaths
+aftermost
+afternoon/7
+aftershave/9
+aftershock/7
+afters/6
+aftertaste/7
+afterthought/7
+afterward/9
+afterworld/7
+Afton/6
+aft/90
+Agace/6
+again
+against
+Agamemnon/6
+agapae
+agape/9
+agar/7
+Agassiz/6
+Agata/6
+agate/7
+Agatha/6
+Agathe/6
+agave/7
+agedness/6
+aged/28
+age/91
+ageism/9
+ageist/9
+agelessness/7
+ageless/28
+agency/7
+agenda/7
+agent/48
+agented
+agenting
+agentive
+ageratum/6
+Aggie/6
+Aggi/6
+agglomerate/24
+agglomeration/6
+agglutinate/24
+agglutination/6
+agglutinin/7
+aggrandize/11
+aggrandizement/7
+aggravate/15
+aggravating/19
+aggravation/6
+aggregated/12
+aggregate/92
+aggregately
+aggregateness/6
+aggregates
+aggregation/7
+aggregative/19
+aggression/7
+aggressively
+aggressiveness/9
+aggressive/12
+aggressor/7
+aggrieved/19
+aggrieve/17
+Aggy/7
+aghast
+agile/93
+agility/7
+agitated/19
+agitate/24
+agitation/6
+agitator/7
+agitprop/7
+Aglaia/6
+agleam
+aglitter
+aglow
+Ag/6
+Agna/6
+Agnella/6
+Agnese/6
+Agnes/6
+Agnesse/6
+Agneta/6
+Agnew/6
+Agni/6
+Agnola/6
+agnosticism/7
+agnostic/7
+ago
+agog
+agonizedly/9
+agonized/19
+agonize/23
+agonizing/19
+agony/7
+agoraphobia/7
+agoraphobic/9
+Agosto/6
+Agra/6
+agrarianism/7
+agrarian/9
+agreeable/94
+agreeableness/85
+agreeably/25
+agreeing/25
+agree/95
+agreement/85
+agreer/9
+Agretha/6
+agribusiness/7
+Agricola/6
+agriculturalist/9
+agricultural/19
+agriculture/7
+agriculturist/7
+Agrippa/6
+Agrippina/6
+agrochemicals
+agronomic/9
+agronomist/7
+agronomy/7
+aground
+Aguascalientes/6
+ague/7
+Aguie/6
+Aguilar/6
+Aguinaldo/6
+Aguirre/6
+Aguistin/6
+Aguste/6
+Agustin/6
+ah
+Ahab/6
+Aharon/6
+aha/9
+ahead
+ahem/9
+Ahmadabad
+Ahmad/6
+Ahmed/6
+ahoy/9
+Ahriman/6
+AI
+Aida/6
+Aidan/6
+aided/12
+aide/7
+aider/6
+AIDS
+aid/23
+Aigneis/6
+aigrette/7
+Aiken/6
+Aila/6
+Ailbert/6
+Ailee/6
+Aileen/6
+Aile/6
+Ailene/6
+aileron/7
+Ailey/6
+Ailina/6
+Aili/7
+ail/11
+ailment/7
+Ailsun/6
+Ailyn/6
+Aimee/6
+Aime/6
+aimer/6
+Aimil/6
+aimlessness/7
+aimless/28
+aim/23
+Aindrea/6
+Ainslee/6
+Ainsley/6
+Ainslie/6
+ain't
+Ainu/6
+airbag/7
+airbase/9
+airborne
+airbrush/26
+Airbus/6
+airbus/7
+aircraft/7
+aircrew/6
+airdrop/7
+airdropped
+airdropping
+Airedale/7
+Aires
+airfare/9
+airfield/7
+airflow/7
+airfoil/7
+airframe/7
+airfreight/17
+airhead/7
+airily
+airiness/7
+airing/6
+airlessness/9
+airless/42
+airlift/26
+airliner/6
+airline/96
+airlock/7
+airmail/17
+airman/6
+airmass
+air/97
+airmen
+airpark
+airplane/7
+airplay/9
+airport/7
+airship/7
+airsickness/7
+airsick/42
+airspace/7
+airspeed/7
+airstrip/7
+airtightness/6
+airtight/42
+airtime
+airwaves
+airway/7
+airworthiness/7
+airworthy/98
+airy/98
+Aisha/6
+aisle/26
+aitch/7
+ajar
+Ajax/6
+Ajay/6
+AK
+aka
+Akbar/6
+Akihito/6
+akimbo
+Akim/6
+akin
+Akita/6
+Akkad/6
+Akron/6
+Aksel/6
+AL
+Alabama/6
+Alabaman/9
+Alabamian/7
+alabaster/7
+alack/9
+alacrity/7
+Aladdin/6
+Alaine/6
+Alain/6
+Alair/6
+Alameda/6
+Alamogordo/6
+Alamo/7
+ala/7
+Ala/7
+Alanah/6
+Alana/6
+Aland/6
+Alane/6
+alanine/6
+Alan/6
+Alanna/6
+Alano/6
+Alanson/6
+Alard/6
+Alaric/6
+Alar/6
+alarming/19
+alarmist/7
+alarm/17
+Alasdair/6
+Alaska/6
+Alaskan/9
+alas/9
+Alastair/6
+Alasteir/6
+Alaster/6
+Alayne/6
+albacore/7
+alba/6
+Alba/6
+Albania/6
+Albanian/7
+Albany/6
+albatross/7
+albedo/6
+Albee/6
+albeit
+Alberich/6
+Alberik/6
+Alberio/6
+Alberta/6
+Albertan/9
+Albertina/6
+Albertine/6
+Albert/6
+Alberto/6
+Albie/6
+Albigensian
+Albina/6
+albinism/7
+albino/7
+Albion/6
+Albireo/6
+alb/7
+Albrecht/6
+albumen/6
+albumin/7
+albuminous
+album/99
+Albuquerque/6
+Alcatraz/6
+Alcestis/6
+alchemical
+alchemist/7
+alchemy/7
+Alcibiades/6
+Alcmena/6
+Alcoa/6
+alcoholically
+alcoholic/7
+alcoholism/7
+alcohol/7
+Alcott/6
+alcove/56
+Alcuin/6
+Alcyone/6
+Aldan/6
+Aldebaran/6
+aldehyde/6
+Alden/6
+Alderamin/6
+alderman/6
+aldermen
+alder/7
+alderwoman
+alderwomen
+Aldin/6
+Aldis/6
+Aldo/6
+Aldon/6
+Aldous/6
+Aldrich/6
+Aldric/6
+Aldridge/6
+Aldrin/6
+Aldus/6
+Aldwin/6
+aleatory
+Alecia/6
+Aleck/6
+Alec/6
+Aleda/6
+alee
+Aleece/6
+Aleen/6
+alehouse/7
+Aleichem/6
+Alejandra/6
+Alejandrina/6
+Alejandro/6
+Alejoa/6
+Aleksandr/6
+Alembert/6
+alembic/7
+ale/76
+Alena/6
+Alene/6
+aleph/6
+Aleppo/6
+Aler/6
+alerted/19
+alertness/7
+alert/100
+Alessandra/6
+Alessandro/6
+Aleta/6
+Alethea/6
+Aleutian/9
+Aleut/7
+alewife/6
+alewives
+Alexa/6
+Alexander/7
+Alexandra/6
+Alexandre/6
+Alexandria/6
+Alexandrian/9
+Alexandrina/6
+Alexandr/6
+Alexandro/7
+Alexei/6
+Alexia/6
+Alexina/6
+Alexine/6
+Alexio/6
+Alexi/7
+Alex/6
+alfalfa/7
+Alfa/6
+Alfie/6
+Alfi/6
+Alf/6
+Alfonse/6
+Alfons/6
+Alfonso/6
+Alfonzo/6
+Alford/6
+Alfreda/6
+Alfred/6
+Alfredo/6
+alfresco
+Alfy/6
+algae
+algaecide
+algal
+alga/6
+algebraic
+algebraical/19
+algebraist/6
+algebra/7
+Algenib/6
+Algeria/6
+Algerian/7
+Alger/6
+Algernon/6
+Algieba/6
+Algiers/6
+alginate/7
+ALGOL
+Algol/6
+Algonquian/7
+Algonquin/7
+algorithmic
+algorithmically
+algorithm/7
+Alhambra/6
+Alhena/6
+Alia/6
+alias/17
+alibi/26
+Alica/6
+Alicea/6
+Alice/6
+Alicia/6
+Alick/6
+Alic/6
+Alida/6
+Alidia/6
+Alie/6
+alienable/44
+alienate/15
+alienation/6
+alienist/7
+alien/101
+Alighieri/6
+alight/17
+aligned/12
+aligner/7
+align/102
+alignment/48
+Alika/6
+Alikee/6
+alikeness/6
+alike/12
+alimentary
+aliment/26
+alimony/7
+Ali/7
+Alina/6
+Aline/6
+alinement's
+Alioth/6
+aliquot/9
+Alisa/6
+Alisander/6
+Alisha/6
+Alison/6
+Alissa/6
+Alistair/6
+Alister/6
+Alisun/6
+aliveness/7
+alive/42
+Alix/6
+aliyah/6
+aliyahs
+Aliza/6
+Alkaid/6
+alkalies
+alkali/6
+alkaline
+alkalinity/7
+alkalize/17
+alkaloid/7
+alkyd/9
+alkyl/6
+Allahabad/6
+Allah/6
+Alla/6
+Allan/6
+Allard/6
+allay/17
+Allayne/6
+Alleen/6
+allegation/7
+alleged/19
+allege/17
+Allegheny/7
+allegiance/7
+allegiant
+allegoric
+allegoricalness/6
+allegorical/28
+allegorist/7
+allegory/7
+Allegra/6
+allegretto/7
+allegri
+allegro/7
+allele/7
+alleluia/9
+allemande/6
+Allendale/6
+Allende/6
+Allene/6
+Allen/6
+Allentown/6
+allergenic
+allergen/7
+allergic
+allergically
+allergist/7
+allergy/7
+alleviate/24
+alleviation/6
+alleviator/7
+Alley/6
+alley/7
+Alleyn/6
+alleyway/7
+Allhallows
+alliance/7
+Allianora/6
+Allie/6
+allier
+allies/6
+alligator/26
+Alli/7
+Allina/6
+Allin/6
+Allison/6
+Allissa/6
+Allister/6
+Allistir/6
+alliterate/24
+alliteration/6
+alliterative/19
+Allix/6
+allocable/12
+allocatable
+allocate/103
+allocated/12
+allocation/104
+allocative
+allocator/48
+allophone/7
+allophonic
+allotment/7
+allotments/14
+allotrope/6
+allotropic
+allots/14
+allot/105
+allotted/14
+allotter/6
+allotting/14
+allover/9
+allowableness/6
+allowable/42
+allowably
+allowance/26
+allowed/19
+allowing/25
+allow/88
+allows/25
+alloyed/12
+alloy/26
+all/9
+allspice/7
+Allstate/6
+Allsun/6
+allude/17
+allure/11
+allurement/7
+alluring/19
+allusion/7
+allusiveness/7
+allusive/28
+alluvial/9
+alluvions
+alluvium/7
+Allx/6
+ally/36
+Allyce/6
+Ally/7
+Allyn/6
+Allys
+Allyson/6
+alma
+Almach/6
+Almaden/6
+almagest
+Alma/6
+almanac/7
+Almaty/6
+Almeda/6
+Almeria/6
+Almeta/6
+almightiness/6
+Almighty/6
+almighty/42
+Almira/6
+Almire/6
+almond/7
+almoner/7
+almost
+Al/106
+alms/14
+almshouse/7
+almsman/6
+alnico
+Alnilam/6
+Alnitak/6
+aloe/7
+aloft
+aloha/7
+Aloin/6
+Aloise/6
+Aloisia/6
+aloneness/6
+alone/42
+along
+alongshore
+alongside
+Alon/6
+Alonso/6
+Alonzo/6
+aloofness/7
+aloof/28
+aloud
+Aloysia/6
+Aloysius/6
+alpaca/7
+Alpert/6
+alphabetical/19
+alphabetic/9
+alphabetization/7
+alphabetizer/6
+alphabetize/23
+alphabet/26
+alpha/7
+alphanumerical/19
+alphanumeric/9
+Alphard/6
+Alphecca/6
+Alpheratz/6
+Alphonse/6
+Alphonso/6
+Alpine
+alpine/9
+alp/7
+Alps
+already
+Alric/6
+alright
+Alsace/6
+Alsatian/7
+also
+Alsop/6
+Alston/6
+Altaic/6
+Altai/6
+Altair/6
+Alta/6
+altar/7
+altarpiece/7
+alterable/44
+alteration/7
+altercate/107
+altercation/6
+altered/12
+alternate/108
+alternation/6
+alternativeness/6
+alternative/32
+alternator/7
+alter/109
+Althea/6
+although
+altimeter/7
+Altiplano/6
+altitude/7
+altogether/9
+Alton/6
+alto/7
+Altos/6
+altruism/7
+altruistic
+altruistically
+altruist/7
+alt/110
+ALU
+Aludra/6
+Aluin/6
+Aluino/6
+alumina/7
+aluminum/7
+alumnae
+alumna/6
+alumni
+alumnus/7
+alum/7
+alundum
+Alva/6
+Alvan/6
+Alvarado/6
+Alvarez/6
+Alvaro/6
+alveolar/19
+alveoli
+alveolus/6
+Alvera/6
+Alverta/6
+Alvie/6
+Alvina/6
+Alvinia/6
+Alvin/6
+Alvira/6
+Alvis/6
+Alvy/6
+alway/9
+Alwin/6
+Alwyn/6
+Alyce/6
+Alyda/6
+Alyosha/6
+Alysa/6
+Alyse/6
+Alysia/6
+Alys/6
+Alyson/6
+Alyss
+Alyssa/6
+Alzheimer/6
+AM
+AMA
+Amabelle/6
+Amabel/6
+Amadeus/6
+Amado/6
+amain
+Amalea/6
+Amalee/6
+Amaleta/6
+amalgamate/24
+amalgamation/6
+amalgam/7
+Amalia/6
+Amalie/6
+Amalita/6
+Amalle/6
+Amanda/6
+Amandie/6
+Amandi/6
+Amandy/6
+amanuenses
+amanuensis/6
+Amara/6
+amaranth/6
+amaranths
+amaretto/9
+Amargo/6
+Amarillo/6
+amaryllis/7
+am/63
+amasser/6
+amass/31
+Amata/6
+amateurishness/7
+amateurish/28
+amateurism/7
+amateur/7
+Amati/6
+amatory
+amazed/19
+amaze/27
+amazement/7
+amazing/19
+amazonian
+Amazonian
+amazon/7
+Amazon/7
+ambassadorial
+ambassador/7
+ambassadorship/7
+ambassadress/7
+ambergris/7
+Amberly/6
+amber/7
+Amber/86
+ambiance/7
+ambidexterity/7
+ambidextrous/19
+ambience's
+ambient/9
+ambiguity/7
+ambiguously/12
+ambiguousness/6
+ambiguous/28
+ambition/26
+ambitiousness/7
+ambitious/28
+ambit/6
+ambivalence/7
+ambivalent/19
+amble/23
+Amble/6
+ambler/6
+ambrose
+Ambrose/6
+ambrosial/19
+ambrosia/7
+Ambrosi/6
+Ambrosio/6
+Ambrosius/6
+Ambros/6
+ambulance/7
+ambulant/9
+ambulate/15
+ambulation/6
+ambulatory/9
+Ambur/6
+ambuscade/111
+ambuscader/6
+ambusher/6
+ambush/49
+Amby/6
+Amdahl/6
+ameba's
+Amelia/6
+Amelie/6
+Amelina/6
+Ameline/6
+ameliorate/24
+amelioration/6
+Amelita/6
+amenability/7
+amenably
+amended/12
+amender/6
+amendment/7
+amen/112
+amend/113
+amends/6
+Amenhotep/6
+amenity/7
+amenorrhea/6
+Amerada/6
+Amerasian/9
+amercement/7
+amerce/11
+Americana/6
+Americanism/7
+Americanization/7
+americanized
+Americanize/17
+American/7
+America/7
+americium/7
+Amerigo/6
+Amerindian/7
+Amerind/7
+Amer/6
+Amery/6
+Ameslan/6
+Ame/7
+amethystine
+amethyst/7
+Amharic/6
+Amherst/6
+amiability/7
+amiableness/6
+amiable/98
+amiably
+amicability/7
+amicableness/6
+amicable/42
+amicably
+amide/7
+amid/9
+amidships
+amidst
+Amie/6
+Amiga/6
+amigo/7
+Amii/6
+Amil/6
+Ami/6
+amines
+aminobenzoic
+amino/6
+amir's
+Amish
+amiss
+Amitie/6
+Amity/6
+amity/7
+Ammamaria/6
+Amman/6
+Ammerman/6
+ammeter/7
+ammo/7
+ammoniac
+ammonia/7
+ammonium/6
+Am/114
+ammunition/7
+amnesiac/7
+amnesia/7
+amnesic/9
+amnesty/26
+amniocenteses
+amniocentesis/6
+amnion/7
+amniotic
+Amoco/6
+amoeba/7
+amoebic
+amoeboid
+amok/7
+among
+amongst
+Amontillado/6
+amontillado/7
+amorality/7
+amoral/19
+amorousness/7
+amorous/28
+amorphousness/7
+amorphous/28
+amortization/41
+amortized/12
+amortize/17
+Amory/6
+Amos
+amount/49
+amour/7
+Amparo/6
+amperage/7
+Ampere/6
+ampere/7
+ampersand/7
+Ampex/6
+amphetamine/7
+amphibian/7
+amphibiousness/6
+amphibious/28
+amphibology/6
+amphitheater/7
+amphorae
+amphora/6
+ampleness/6
+ample/98
+amplification/6
+amplifier/6
+amplify/115
+amplitude/7
+ampoule's
+amp/116
+ampule/7
+amputate/15
+amputation/6
+amputee/7
+Amritsar/6
+ams
+Amsterdam/6
+amt
+Amtrak/6
+amuck's
+amulet/7
+Amundsen/6
+Amur/6
+amused/19
+amuse/117
+amusement/7
+amuser/6
+amusingness/6
+amusing/28
+Amway/6
+Amye/6
+amylase/7
+amyl/6
+Amy/6
+Anabal/6
+Anabaptist/7
+Anabella/6
+Anabelle/6
+Anabel/6
+anabolic
+anabolism/7
+anachronism/7
+anachronistic
+anachronistically
+Anacin/6
+anaconda/7
+Anacreon/6
+anaerobe/7
+anaerobic
+anaerobically
+anaglyph/6
+anagrammatic
+anagrammatically
+anagrammed
+anagramming
+anagram/7
+Anaheim/6
+Analects/6
+analgesia/7
+analgesic/9
+Analiese/6
+Analise/6
+Anallese/6
+Anallise/6
+analogical/19
+analogize/17
+analogousness/7
+analogous/28
+analog/7
+analogue/7
+analogy/7
+anal/19
+analysand/7
+analyses
+analysis/118
+analyst/7
+analytical/19
+analyticity/9
+analytic/9
+analytics/6
+analyzable/12
+analyze/119
+analyzed/12
+analyzer/6
+Ana/6
+anamorphic
+Ananias/6
+anapaest's
+anapestic/9
+anapest/7
+anaphora/6
+anaphoric
+anaphorically
+anaplasmosis/6
+anarchic
+anarchical/19
+anarchism/7
+anarchistic
+anarchist/7
+anarchy/7
+Anastasia/6
+Anastasie/6
+Anastassia/6
+anastigmatic
+anastomoses
+anastomosis/6
+anastomotic
+anathema/7
+anathematize/17
+Anatola/6
+Anatole/6
+Anatolia/6
+Anatolian
+Anatollo/6
+Anatol/6
+anatomic
+anatomical/16
+anatomist/7
+anatomize/17
+anatomy/7
+Anaxagoras/6
+Ancell/6
+ancestor/26
+ancestral/19
+ancestress/7
+ancestry/7
+Anchorage/6
+anchorage/7
+anchored/12
+anchorite/7
+anchoritism/6
+anchorman/6
+anchormen
+anchorpeople
+anchorperson/9
+anchor/26
+anchorwoman
+anchorwomen
+anchovy/7
+ancientness/7
+ancient/38
+ancillary/9
+an/120
+Andalusia/6
+Andalusian
+Andaman
+andante/9
+and/121
+Andean/6
+Andeee/6
+Andee/6
+Anderea/6
+Andersen/6
+Anders/122
+Anderson/6
+Andes
+Andie/6
+Andi/6
+andiron/7
+Andonis/6
+Andorra/6
+Andover/6
+Andra/7
+Andrea/7
+Andreana/6
+Andree/6
+Andrei/6
+Andrej/6
+Andre/7
+Andrew/7
+Andrey/6
+Andria/6
+Andriana/6
+Andriette/6
+Andris
+androgenic
+androgen/7
+androgynous
+androgyny/7
+android/7
+Andromache/6
+Andromeda/6
+Andropov/6
+Andros/6
+Andrus/6
+Andy/6
+anecdotal/19
+anecdote/7
+anechoic
+anemia/7
+anemically
+anemic/9
+anemometer/7
+anemometry/6
+anemone/7
+anent
+aneroid
+Anestassia/6
+anesthesia/7
+anesthesiologist/7
+anesthesiology/7
+anesthetically
+anesthetic/7
+anesthetist/7
+anesthetization/7
+anesthetizer/6
+anesthetize/23
+Anet/6
+Anetta/6
+Anette/6
+Anett/6
+aneurysm/7
+anew
+Angara/6
+Angela/6
+Angeleno/7
+Angele/7
+angelfish/7
+Angelia/6
+angelic
+angelical/19
+Angelica/6
+angelica/7
+Angelico/6
+Angelika/6
+Angeli/6
+Angelina/6
+Angeline/6
+Angelique/6
+Angelita/6
+Angelle/6
+Angel/6
+angel/26
+Angelo/6
+Angelou/6
+Ange/6
+anger/26
+Angevin/6
+Angie/6
+Angil/6
+angina/7
+angiography
+angioplasty/9
+angiosperm/7
+Angkor/6
+angle/91
+angler/6
+Angles
+angleworm/7
+Anglia/6
+Anglicanism/7
+Anglican/7
+Anglicism/7
+Anglicization/7
+anglicize/17
+Anglicize/17
+angling/6
+Anglo/7
+Anglophile/7
+Anglophilia/6
+Anglophobe/7
+Anglophobia/6
+Angola/6
+Angolan/9
+angora/7
+Angora/7
+angrily
+angriness/6
+angry/98
+angst/7
+�ngstr�m/6
+angstrom/7
+Anguilla/6
+anguish/26
+angularity/7
+angular/19
+Angus/6
+Angy/6
+Anheuser/6
+anhydride/6
+anhydrite/6
+anhydrous/19
+Aniakchak/6
+Ania/6
+Anibal/6
+Anica/6
+aniline/7
+animadversion/7
+animadvert/17
+animalcule/7
+animal/32
+animated/14
+animatedly
+animately/45
+animateness/123
+animates/14
+animate/124
+animating/14
+animation/48
+animator/7
+animism/7
+animistic
+animist/9
+animized
+animosity/7
+animus/7
+anionic/9
+anion/7
+aniseed/7
+aniseikonic
+anise/7
+anisette/7
+anisotropic
+anisotropy/7
+Anissa/6
+Anita/6
+Anitra/6
+Anjanette/6
+Anjela/6
+Ankara/6
+ankh/6
+ankhs
+anklebone/7
+ankle/26
+anklet/7
+Annabal/6
+Annabela/6
+Annabella/6
+Annabelle/6
+Annabell/6
+Annabel/6
+Annadiana/6
+Annadiane/6
+Annalee/6
+Annaliese/6
+Annalise/6
+annalist/7
+annal/125
+Anna/6
+Annamaria/6
+Annamarie/6
+Annapolis/6
+Annapurna/6
+anneal/23
+annealer/6
+Annecorinne/6
+annelid/7
+Anneliese/6
+Annelise/6
+Anne/6
+Annemarie/6
+Annetta/6
+Annette/6
+annexation/7
+annexe/6
+annex/17
+Annice/6
+Annie/6
+annihilate/24
+annihilation/6
+annihilator/7
+Anni/7
+Annissa/6
+anniversary/7
+Ann/6
+Annmaria/6
+Annmarie/6
+Annnora/6
+Annora/6
+annotated/12
+annotate/24
+annotation/6
+annotator/7
+announced/12
+announcement/7
+announcer/6
+announce/27
+annoyance/7
+annoyer/6
+annoying/19
+annoy/23
+annualized
+annual/16
+annuitant/7
+annuity/7
+annular/16
+annuli
+annulled
+annulling
+annulment/7
+annul/40
+annulus/6
+annum
+annunciate/15
+annunciation/6
+Annunciation/9
+annunciator/7
+Anny/6
+anode/7
+anodic
+anodize/17
+anodyne/7
+anoint/8
+anointer/6
+anointment/7
+anomalousness/6
+anomalous/28
+anomaly/7
+anomic
+anomie/6
+anon/9
+anonymity/7
+anonymousness/6
+anonymous/28
+anopheles/6
+anorak/7
+anorectic/9
+anorexia/7
+anorexic/9
+another/6
+Anouilh/6
+Ansell/6
+Ansel/6
+Anselma/6
+Anselm/6
+Anselmo/6
+Anshan/6
+ANSI/6
+Ansley/6
+ans/6
+Anson/6
+Anstice/6
+answerable/12
+answered/12
+answerer/6
+answer/66
+antacid/7
+Antaeus/6
+antagonism/7
+antagonistic
+antagonistically
+antagonist/7
+antagonized/12
+antagonize/23
+antagonizing/12
+Antananarivo/6
+antarctic
+Antarctica/6
+Antarctic/6
+Antares
+anteater/7
+antebellum
+antecedence/7
+antecedent/65
+antechamber/7
+antedate/17
+antediluvian/9
+anteing
+antelope/7
+ante/7
+antenatal
+antennae
+antenna/7
+anterior/16
+anteroom/7
+ant/26
+Anthea/6
+Anthe/6
+anthem/26
+anther/7
+Anthia/6
+Anthiathia/6
+anthill/9
+anthologist/7
+anthologize/17
+anthology/7
+Anthony/6
+anthraces
+anthracite/7
+anthrax/6
+anthropic
+anthropocentric
+anthropogenic
+anthropoid/9
+anthropological/19
+anthropologist/7
+anthropology/7
+anthropometric/9
+anthropometry/6
+anthropomorphic
+anthropomorphically
+anthropomorphism/7
+anthropomorphizing
+anthropomorphous
+antiabortion
+antiabortionist/9
+antiaircraft
+antibacterial/9
+antibiotic/7
+antibody/7
+anticancer
+Antichrist/7
+anticipated/12
+anticipate/24
+anticipation/6
+anticipative/19
+anticipatory
+anticked
+anticking
+anticlerical/9
+anticlimactic
+anticlimactically
+anticlimax/7
+anticline/7
+anticlockwise
+antic/7
+anticoagulant/9
+anticoagulation/6
+anticommunism/7
+anticommunist/7
+anticompetitive
+anticyclone/7
+anticyclonic
+antidemocratic
+antidepressant/7
+antidisestablishmentarianism/6
+antidote/26
+Antietam/6
+antifascist/7
+antiformant
+antifreeze/7
+antifundamentalist/6
+antigenic
+antigenicity/7
+antigen/7
+antigone
+Antigone/6
+Antigua/6
+antiheroes
+antihero/6
+antihistamine/7
+antihistorical
+antiknock/7
+antilabor
+Antillean
+Antilles
+antilogarithm/7
+antilogs
+antimacassar/7
+antimalarial/9
+antimatter/7
+antimicrobial/9
+antimissile/9
+antimony/7
+anting/6
+Antin/6
+antinomian
+antinomy/6
+antinuclear
+Antioch/6
+antioxidant/7
+antiparticle/7
+Antipas/6
+antipasti
+antipasto/7
+antipathetic
+antipathy/7
+antipersonnel
+antiperspirant/7
+antiphonal/16
+antiphon/7
+antipodal/9
+antipodean/9
+antipode/7
+Antipodes
+antipollution/9
+antipoverty
+antiquarianism/7
+antiquarian/7
+antiquary/7
+antiquate/55
+antiquation/6
+antique/26
+antiquity/7
+antiredeposition
+antiresonance/6
+antiresonator
+anti/9
+antisemitic
+antisemitism/6
+antisepses
+antisepsis/6
+antiseptically
+antiseptic/9
+antiserum/7
+antislavery/9
+antisocial/19
+antispasmodic/9
+antisubmarine
+antisymmetric
+antisymmetry
+antitank
+antitheses
+antithesis/6
+antithetic
+antithetical/19
+antithyroid
+antitoxin/7
+antitrust/114
+antivenin/7
+antiviral/9
+antivivisectionist/9
+antiwar
+antler/56
+Antofagasta/6
+Antoine/6
+Antoinette/6
+Antonella/6
+Antone/6
+Antonetta/6
+Antonia/6
+Antonie/6
+Antonietta/6
+Antoni/6
+Antonina/6
+Antonin/6
+Antonino/6
+Antoninus/6
+Antonio/6
+Antonius/6
+Anton/7
+Antonovics/6
+Antony/6
+antonymous
+antonym/7
+antral
+antsy/54
+Antwan/6
+Antwerp/6
+Anubis/6
+anus/7
+anvil/26
+anxiety/7
+anxiousness/7
+anxious/28
+any
+Anya/6
+anybody/9
+anyhow
+Any/6
+anymore
+anyone/7
+anyplace
+anything/9
+anytime
+anyway/9
+anywhere/9
+anywise
+AOL/6
+aorta/7
+aortic
+AP
+apace
+apache/7
+Apache/7
+Apalachicola/6
+apartheid/7
+apart/126
+apartment/7
+apartness/6
+apathetic
+apathetically
+apathy/7
+apatite/7
+APB
+aped/14
+apelike
+ape/111
+Apennines
+aper/14
+aperiodic
+aperiodically
+aperiodicity/6
+aperitif/9
+aperture/56
+apex/7
+aphasia/7
+aphasic/9
+aphelia
+aphelion/7
+aphid/7
+aphonic
+aphorism/7
+aphoristic
+aphoristically
+aphrodisiac/7
+Aphrodite/6
+Apia/6
+apiarist/7
+apiary/7
+apical/16
+apices's
+apiece
+apishness/6
+apish/28
+aplenty
+aplomb/7
+APO
+Apocalypse/6
+apocalypse/7
+apocalyptic
+apocryphalness/6
+apocryphal/28
+apocrypha/6
+Apocrypha/6
+apogee/7
+apolar
+apolitical/19
+Apollinaire/6
+Apollonian
+Apollo/7
+apologetically/12
+apologetic/9
+apologetics/6
+apologia/7
+apologist/7
+apologize/23
+apologizer/6
+apologizes/14
+apologizing/12
+apology/7
+apoplectic
+apoplexy/7
+apostasy/7
+apostate/7
+apostatize/17
+apostleship/7
+apostle/7
+apostolic
+apostrophe/7
+apostrophized
+apothecary/7
+apothegm/7
+apotheoses
+apotheosis/6
+apotheosized
+apotheosizes
+apotheosizing
+Appalachia/6
+Appalachian/7
+appalling/19
+appall/17
+Appaloosa/7
+appaloosa/9
+appanage/6
+apparatus/7
+apparel/26
+apparency
+apparently/45
+apparentness/6
+apparent/12
+apparition/7
+appealer/6
+appealing/10
+appeal/49
+appear/127
+appearance/128
+appearer/9
+appease/27
+appeased/12
+appeasement/7
+appeaser/6
+appellant/7
+appellate/129
+appellation/6
+appellative/86
+appendage/7
+appendectomy/7
+appendices
+appendicitis/7
+appendix/7
+append/23
+appertain/17
+appetite/76
+appetizer/7
+appetizing/10
+Appia/6
+Appian/6
+applauder/6
+applaud/23
+applause/7
+applecart/6
+applejack/7
+Apple/6
+apple/7
+applesauce/7
+Appleseed/6
+Appleton/6
+applet/9
+appliance/7
+applicabilities
+applicability/123
+applicable/45
+applicably
+applicant/7
+applicate/130
+application/118
+applicative/19
+applicator/7
+applier/7
+appliqu�d
+appliqu�/131
+apply/132
+appointee/7
+appoint/133
+appointer/7
+appointive
+appointment/128
+Appolonia/6
+Appomattox/6
+apportion/102
+apportionment/48
+appose/17
+appositeness/7
+apposite/134
+apposition/6
+appositive/16
+appraisal/48
+appraised/14
+appraisees
+appraiser/6
+appraises/14
+appraise/23
+appraising/19
+appreciable/45
+appreciably/45
+appreciated/12
+appreciate/24
+appreciation/6
+appreciativeness/123
+appreciative/68
+appreciator/7
+appreciatory
+apprehend/31
+apprehender/6
+apprehensible
+apprehension/7
+apprehensiveness/7
+apprehensive/28
+apprentice/26
+apprenticeship/7
+apprise/17
+apprizer/7
+apprizingly
+apprizings
+approachability/135
+approachable/44
+approach/67
+approacher/6
+approbate/107
+approbation/85
+appropriable
+appropriated/12
+appropriately/45
+appropriateness/43
+appropriate/136
+appropriation/6
+appropriator/7
+approval/85
+approve/137
+approved/12
+approver's/25
+approver/7
+approving/75
+approx
+approximate/108
+approximation/6
+approximative/19
+appurtenance/7
+appurtenant/9
+APR
+apricot/7
+Aprilette/6
+April/7
+Apr/6
+apron/26
+apropos
+apse/7
+apsis/6
+apter
+aptest
+aptitude/7
+aptness/43
+aptness's/12
+apt/138
+Apuleius/6
+aquaculture/7
+aqualung/7
+aquamarine/7
+aquanaut/7
+aquaplane/26
+aquarium/7
+Aquarius/7
+aqua/7
+aquatically
+aquatic/9
+aquavit/7
+aqueduct/7
+aqueous/19
+aquiculture's
+aquifer/7
+Aquila/6
+aquiline
+Aquinas/6
+Aquino/6
+Aquitaine/6
+AR
+Arabela/6
+Arabele/6
+Arabella/6
+Arabelle/6
+Arabel/6
+arabesque/7
+Arabia/6
+Arabian/7
+Arabic/6
+arability/7
+Arabist/7
+arable/9
+Arab/7
+Araby/6
+Araceli/6
+arachnid/7
+arachnoid/6
+arachnophobia
+Arafat/6
+Araguaya/6
+Araldo/6
+Aral/6
+Ara/6
+Aramaic/6
+Aramco/6
+Arapahoes
+Arapahoe's
+Arapaho/7
+Ararat/6
+Araucanian/6
+Arawakan/6
+Arawak/6
+arbiter/7
+arbitrage/49
+arbitrager/6
+arbitrageur/9
+arbitrament/7
+arbitrarily
+arbitrariness/7
+arbitrary/42
+arbitrate/24
+arbitration/6
+arbitrator/7
+arbor/56
+arboreal/19
+arbores
+arboretum/7
+arborvitae/7
+arbutus/7
+ARC
+arcade/26
+Arcadia/6
+Arcadian
+arcana/6
+arcane/42
+arc/26
+archaeological/19
+archaeologist/7
+archaeology/7
+archaically
+archaic/42
+Archaimbaud/6
+archaism/7
+archaist/7
+archaize/23
+archaizer/6
+Archambault/6
+archangel/7
+archbishopric/7
+archbishop/7
+archdeacon/7
+archdiocesan
+archdiocese/7
+archduchess/7
+archduke/7
+Archean
+archenemy/7
+archeological/19
+archeologist/7
+archeology/7
+archer/6
+Archer/6
+archery/7
+archetypal
+archetype/7
+archfiend/7
+archfool
+Archibald/6
+Archibaldo/6
+Archibold/6
+Archie/6
+archiepiscopal
+Archimedes/6
+arching/6
+archipelago/7
+architect/7
+architectonic/9
+architectonics/6
+architectural/19
+architecture/7
+architrave/7
+archival
+archive/49
+archived/12
+archivist/7
+Arch/114
+archness/7
+arch/139
+archway/7
+Archy/6
+arclike
+ARCO/6
+arcsine
+arctangent
+Arctic/6
+arctic/9
+Arcturus/6
+Ardabil
+Arda/140
+Ardath/6
+Ardeen/6
+Ardelia/6
+Ardelis/6
+Ardella/6
+Ardelle/6
+ardency/6
+Ardene/6
+Ardenia/6
+Arden/6
+ardent/19
+Ardine/6
+Ardisj/6
+Ardis/6
+Ardith/6
+ardor/7
+Ardra/6
+arduousness/7
+arduous/28
+Ardyce/6
+Ardys
+Ardyth/6
+areal
+area/7
+areawide
+are/141
+Arel/6
+arenaceous
+arena/7
+aren't
+Arequipa/6
+Ares
+Aretha/6
+Argentina/6
+Argentinean/9
+Argentine/7
+Argentinian/9
+argent/7
+arginine/7
+Argonaut/7
+argonaut/9
+argon/7
+Argonne/6
+Argo/7
+argosy/7
+argot/7
+arguable/44
+arguably/44
+argue/23
+arguer/6
+argumentation/7
+argumentativeness/7
+argumentative/28
+argument/7
+Argus/6
+argyle/9
+Ariadne/6
+Ariana/6
+Arianism/6
+Arianist/7
+aria/7
+Aridatha/6
+aridity/7
+aridness/6
+arid/33
+Ariela/6
+Ariella/6
+Arielle/6
+Ariel/6
+Arie/7
+Aries/9
+aright
+Ari/6
+Arin/6
+Ario/6
+Ariosto/6
+arise/20
+arisen
+Aristarchus/6
+Aristides
+aristocracy/7
+aristocratic
+aristocratically
+aristocrat/7
+Aristophanes/6
+Aristotelean
+Aristotelian/6
+Aristotle/6
+arithmetical/19
+arithmetician/7
+arithmetic/7
+arithmetize/142
+Arius/6
+Ariz/6
+Arizona/6
+Arizonan/9
+Arizonian/9
+Arjuna/6
+Arkansan/7
+Arkansas/6
+Arkhangelsk/6
+Ark/6
+ark/7
+Arkwright/6
+Arlana/6
+Arlan/6
+Arlee/6
+Arleen/6
+Arlena/6
+Arlene/6
+Arlen/6
+Arleta/6
+Arlette/6
+Arley/6
+Arleyne/6
+Arlie/6
+Arliene/6
+Arlina/6
+Arlinda/6
+Arline/6
+Arlington/6
+Arlin/6
+Arluene/6
+Arly/6
+Arlyne/6
+Arlyn/6
+Armada/6
+armada/7
+armadillo/7
+Armageddon/7
+Armagnac/6
+armament/143
+armament's/25
+Armand/6
+Armando/6
+Arman/6
+arm/127
+Armata/6
+armature/26
+armband/7
+armchair/7
+Armco/6
+armed/12
+Armenia/6
+Armenian/7
+armer/85
+armful/7
+armhole/7
+arming/6
+Arminius/6
+Armin/6
+armistice/7
+armless
+armlet/7
+armload/6
+Armonk/6
+armored/12
+armorer/6
+armorial/9
+armory/56
+armor/49
+Armour/6
+armpit/7
+armrest/7
+arm's
+Armstrong/6
+Ar/86
+army/7
+Arnaldo/6
+Arneb/6
+Arne/6
+Arney/6
+Arnhem/6
+Arnie/6
+Arni/6
+Arnold/6
+Arnoldo/6
+Arno/6
+Arnuad/6
+Arnulfo/6
+Arny/6
+aroma/7
+aromatherapist/9
+aromatherapy/9
+aromatically
+aromaticity/6
+aromaticness/6
+aromatic/144
+Aron/6
+arose
+around
+arousal/7
+aroused/12
+arouse/17
+ARPA/6
+Arpanet/6
+ARPANET/6
+arpeggio/7
+arrack/6
+Arragon/6
+arraignment/7
+arraign/11
+arrangeable/14
+arranged/145
+arrangement/128
+arranger/6
+arranges/145
+arrange/27
+arranging/145
+arrant/19
+arras/7
+arrayer
+array/74
+arrear/7
+arrest/36
+arrestee/7
+arrester/7
+arresting/19
+arrestor/7
+Arrhenius/6
+arrhythmia/7
+arrhythmic
+arrhythmical
+Arri/6
+arrival/7
+arriver/6
+arrive/31
+arrogance/7
+arrogant/19
+arrogate/15
+arrogation/6
+Arron/6
+arrowhead/7
+arrowroot/7
+arrow/26
+arroyo/7
+arr/146
+arsenal/7
+arsenate/6
+arsenic/7
+arsenide/6
+arsine/7
+arsonist/7
+arson/7
+Artair/6
+Artaxerxes/6
+artefact's
+Arte/6
+Artemas
+Artemis/6
+Artemus/6
+arterial/16
+arteriolar
+arteriole/7
+arterioscleroses
+arteriosclerosis/6
+artery/7
+artesian
+artfulness/7
+artful/28
+Arther/6
+arthritic/9
+arthritides
+arthritis/6
+arthrogram/7
+arthropod/7
+arthroscope/9
+arthroscopic
+Arthurian
+Arthur/6
+artichoke/7
+article/26
+articulable/45
+articular
+articulated/147
+articulately/45
+articulateness/43
+articulates/45
+articulate/148
+articulation/6
+articulator/7
+articulatory
+Artie/6
+artifact/7
+artificer/6
+artifice/96
+artificiality/7
+artificialness/6
+artificial/28
+artillerist
+artilleryman/6
+artillerymen
+artillery/7
+artiness/7
+artisan/7
+artiste/7
+artistically/45
+artistic/45
+artist/7
+artistry/7
+artlessness/7
+artless/28
+Art/6
+art/7
+artsy/54
+Artur/6
+Arturo/6
+Artus/6
+artwork/7
+Arty/6
+arty/98
+Aruba/6
+arum/7
+Arvie/6
+Arvin/6
+Arv/6
+Arvy/6
+Aryan/7
+Aryn/6
+as
+As
+A's
+Asa/6
+Asama/6
+asap
+ASAP
+asbestos/7
+Ascella/6
+ascend/36
+ascendancy/7
+ascendant/16
+ascender/7
+Ascension/6
+ascension/7
+ascent/7
+ascertain/149
+ascertainment/7
+ascetically
+asceticism/7
+ascetic/7
+ASCII
+ascot/7
+ascribe/88
+ascription/7
+ascriptive
+Ase/6
+aseptically
+aseptic/9
+asexuality/7
+asexual/19
+Asgard/6
+ashame/81
+ashamed/10
+Ashanti/6
+Ashbey/6
+Ashby/6
+ashcan/7
+Ashely/6
+Asher/6
+Asheville/6
+Ashia/6
+Ashien/6
+Ashil/6
+Ashkenazim
+Ashkhabad/6
+Ashla/6
+Ashland/6
+Ashlan/6
+ashlar/26
+Ashlee/6
+Ashleigh/6
+Ashlen/6
+Ashley/6
+Ashlie/6
+Ashli/6
+Ashlin/6
+Ashly/6
+ashman/6
+ash/150
+Ashmolean/6
+Ash/106
+ashore
+ashram/7
+Ashton/6
+ashtray/7
+Ashurbanipal/6
+ashy/54
+Asia/6
+Asian/7
+Asiatic/7
+aside/9
+Asilomar/6
+Asimov
+asinine/19
+asininity/7
+askance
+ask/23
+asked/12
+asker/6
+askew/42
+ASL
+aslant
+asleep
+Asmara/6
+asocial/9
+Asoka/6
+asparagus/7
+aspartame/9
+ASPCA
+aspect/7
+Aspell/6
+aspen/6
+Aspen/6
+asperity/7
+asper/6
+aspersion/7
+asphalt/111
+asphodel/7
+asphyxia/7
+asphyxiate/15
+asphyxiation/6
+aspic/7
+Aspidiske/6
+aspidistra/7
+aspirant/7
+aspirate/15
+aspirational
+aspiration/6
+aspirator/7
+aspire/31
+aspirer/6
+aspirin/7
+asplenium
+asp/151
+Asquith/6
+Assad/6
+assailable/12
+assailant/7
+assail/88
+Assamese/6
+Assam/6
+assassinate/15
+assassination/6
+assassin/7
+assaulter/6
+assaultive/28
+assault/152
+assayer/6
+assay/23
+assemblage/7
+assemble/153
+assembled/12
+assembler/85
+assemblies/14
+assembly/154
+assemblyman/6
+assemblymen
+Assembly/7
+assemblywoman
+assemblywomen
+assent/111
+assert/36
+asserter/7
+assertional
+assertion/48
+assertiveness/7
+assertive/28
+assess/149
+assessed/14
+assesses/14
+assessment/48
+assessor/7
+asset/7
+asseverate/15
+asseveration/6
+asshole/30
+assiduity/7
+assiduousness/7
+assiduous/28
+assign/155
+assignation/7
+assigned/12
+assignee/7
+assigner/7
+assignment/48
+assignor/7
+assigns/156
+assimilate/24
+assimilationist/6
+assimilation/6
+Assisi/6
+assistance/7
+assistantship/7
+assistant/7
+assisted/12
+assister/6
+assist/29
+assize/26
+ass/125
+assn
+assoc
+associable
+associated/12
+associate/87
+associateship
+associational
+association/82
+associative/19
+associativity/9
+associator/7
+assonance/7
+assonant/9
+assorter/6
+assort/8
+assortment/7
+asst
+assuaged/12
+assuage/17
+assumability
+assumer/6
+assume/157
+assuming/13
+assumption/7
+assumptive
+assurance/48
+assure/36
+assuredness/6
+assured/46
+assurer/7
+assuring/158
+Assyria/6
+Assyrian/7
+Assyriology/6
+Astaire/7
+Astarte/6
+astatine/7
+aster/85
+asteria
+asterisked/12
+asterisk/26
+astern
+asteroidal
+asteroid/7
+asthma/7
+asthmatic/9
+astigmatic/9
+astigmatism/7
+astir
+astonish/11
+astonishing/19
+astonishment/7
+Aston/6
+Astoria/6
+Astor/6
+astounding/19
+astound/17
+astraddle
+Astrakhan/6
+astrakhan/7
+astral/16
+Astra/6
+astray
+astride
+Astrid/6
+astringency/7
+astringent/16
+Astrix/6
+astrolabe/7
+astrologer/7
+astrological/19
+astrologist/6
+astrology/7
+astronautical
+astronautic/9
+astronautics/6
+astronaut/7
+astronomer/7
+astronomic
+astronomical/19
+astronomy/7
+astrophysical
+astrophysicist/7
+astrophysics/6
+Astroturf/6
+AstroTurf/9
+Asturias/6
+astuteness/7
+astute/33
+Asunci�n/6
+asunder
+Aswan/6
+asylum/7
+asymmetric
+asymmetrical/19
+asymmetry/7
+asymptomatic
+asymptomatically
+asymptote/7
+asymptotically
+asymptotic/19
+asynchronism/6
+asynchronous/19
+asynchrony
+at
+Atacama/6
+Atahualpa/6
+Atalanta/6
+Atari/6
+Atat�rk/6
+atavism/7
+atavistic
+atavist/7
+ataxia/7
+ataxic/9
+atelier/7
+atemporal
+ate/9
+Athabasca/6
+Athabascan's
+Athabaskan/7
+Athabaska's
+atheism/7
+atheistic
+atheist/7
+Athena/6
+Athene/6
+Athenian/7
+Athens/6
+atheroscleroses
+atherosclerosis/6
+athirst
+athlete/7
+athletically
+athleticism/6
+athletic/9
+athletics/6
+athwart
+atilt
+Atkins/6
+Atkinson/6
+Atlanta/6
+Atlante/7
+atlantes
+Atlantic/6
+Atlantis/6
+atlas/7
+Atlas/7
+At/6
+Atman
+ATM/6
+atmosphere/56
+atmospherically
+atmospheric/9
+atoll/7
+atomically
+atomicity/6
+atomic/9
+atomics/6
+atomistic
+atomization/7
+atomize/23
+atomizer/6
+atom/7
+atonality/7
+atonal/19
+atone/11
+atonement/7
+atop
+ATP
+Atreus/6
+atria
+atrial
+Atria/6
+atrium/6
+atrociousness/7
+atrocious/28
+atrocity/7
+atrophic
+atrophy/26
+atropine/7
+Atropos/6
+Ats
+attach/159
+attached/13
+attacher/6
+attach�/9
+attachment/48
+attacker/6
+attack/67
+attainabilities
+attainability/135
+attainableness/6
+attainable/12
+attainably/12
+attain/36
+attainder/7
+attained/12
+attainer/7
+attainment/7
+attar/7
+attempt/36
+attempter/7
+attendance/7
+attendant/7
+attended/12
+attendee/7
+attender/6
+attend/23
+attentional
+attentionality
+attention/43
+attentiveness/43
+attentive/68
+attenuated/12
+attenuate/15
+attenuation/6
+attenuator/7
+attestation/7
+attested/12
+attester/6
+attest/31
+Attic
+Attica/6
+attic/7
+Attila/6
+attire/17
+attitude/7
+attitudinal/19
+attitudinize/17
+Attlee/6
+attn
+Attn
+attorney/7
+attractant/7
+attract/160
+attraction/7
+attractivenesses
+attractiveness/135
+attractive/161
+attractor/7
+attributable/12
+attribute/162
+attributed/12
+attributer/6
+attributional
+attribution/6
+attributive/16
+attrition/7
+Attucks
+attune/17
+atty
+ATV/9
+atwitter
+Atwood/6
+atypical/19
+Aube/6
+Auberge/6
+aubergine/7
+Auberon/6
+Auberta/6
+Aubert/6
+Aubine/6
+Aubree/6
+Aubrette/6
+Aubrey/6
+Aubrie/6
+Aubry/6
+auburn/7
+Auckland/6
+auctioneer/26
+auction/26
+audaciousness/7
+audacious/28
+audacity/7
+Auden/6
+audibility/43
+audible/45
+audibles
+audibly/45
+Audie/6
+audience/7
+Audi/6
+audiogram/7
+audiological
+audiologist/7
+audiology/7
+audiometer/7
+audiometric
+audiometry/6
+audiophile/7
+audio/7
+audiotape/9
+audiovisual/9
+audited/12
+audition/26
+auditorium/7
+auditor/7
+auditory/9
+audit/163
+Audra/6
+Audre/6
+Audrey/6
+Audrie/6
+Audrye/6
+Audry/6
+Audubon/6
+Audy/6
+Auerbach/6
+Augean
+auger/7
+aught/9
+Augie/6
+Aug/6
+augmentation/7
+augmentative/9
+augment/23
+augmenter/6
+augur/26
+augury/7
+Augusta/6
+Augustan/9
+Auguste/6
+Augustina/6
+Augustine/6
+Augustinian/9
+Augustin/6
+augustness/7
+Augusto/6
+August/7
+august/38
+Augustus/6
+Augy/6
+auk/7
+Au/6
+Aundrea/6
+auntie/7
+aunt/65
+aunty's
+aural/19
+Aura/6
+aura/7
+Aurea/6
+Aurelea/6
+Aurelia/6
+Aurelie/6
+Aurelio/6
+Aurelius/6
+Aurel/6
+aureole/26
+aureomycin
+Aureomycin/6
+Auria/6
+auric
+auricle/7
+auricular
+Aurie/6
+Auriga/6
+Aurilia/6
+Aurlie/6
+Auroora/6
+auroral
+Aurora/6
+aurora/7
+Aurore/6
+Aurthur/6
+Auschwitz/6
+auscultate/15
+auscultation/6
+auspice/7
+auspicious/68
+auspiciousnesses
+auspiciousness/123
+Aussie/7
+Austen/6
+austereness/6
+austere/33
+austerity/7
+Austina/6
+Austine/6
+Austin/7
+austral
+Australasia/6
+Australasian/9
+australes
+Australia/6
+Australian/7
+Australis/6
+australites
+Australoid
+Australopithecus/6
+Austria/6
+Austrian/7
+Austronesian
+authentically
+authenticated/12
+authenticate/15
+authentication/6
+authenticator/7
+authenticity/7
+authentic/44
+author/26
+authoress/9
+authorial
+authoritarianism/7
+authoritarian/9
+authoritativeness/7
+authoritative/28
+authority/7
+authorization/48
+authorize/36
+authorized/12
+authorizer/7
+authorizes/12
+authorship/7
+autism/7
+autistic/9
+autobahn/7
+autobiographer/7
+autobiographic
+autobiographical/19
+autobiography/7
+autoclave/26
+autocollimator/6
+autocorrelate/15
+autocorrelation/6
+autocracy/7
+autocratic
+autocratically
+autocrat/7
+autodial/164
+autodidact/7
+autofluorescence
+autograph/165
+autographs
+autoignition/6
+autoimmune
+autoimmunity/9
+autoloader
+automaker/9
+automata's
+automate/15
+automatically
+automatic/9
+automation/6
+automatism/7
+automatize/17
+automaton/7
+automobile/26
+automorphism/7
+automotive
+autonavigator/7
+autonomic/9
+autonomous/19
+autonomy/7
+autopilot/7
+autopsy/26
+autoregressive
+autorepeat/166
+auto/26
+autostart
+autosuggestibility/6
+autotransformer/6
+autoworker/9
+autumnal/19
+Autumn/6
+autumn/7
+aux
+auxiliary/9
+auxin/7
+AV
+availability/41
+availableness/6
+available/12
+availably
+avail/67
+availing/12
+avalanche/26
+Avalon/6
+Ava/6
+avant
+avarice/7
+avariciousness/6
+avaricious/28
+avast/9
+avatar/7
+avaunt/9
+avdp
+Aveline/6
+Ave/7
+avenged/12
+avenger/6
+avenge/23
+Aventine/6
+Aventino/6
+avenue/7
+average/167
+Averell/6
+Averill/6
+Averil/6
+Avernus/6
+averred
+averrer
+averring
+Averroes/6
+averseness/6
+averse/168
+aversion/6
+avers/130
+avert/17
+Averyl/6
+Avery/6
+ave/9
+aves/169
+Avesta/6
+avg
+avian/9
+aviary/7
+aviate/107
+aviation/6
+aviator/7
+aviatrices
+aviatrix/7
+Avicenna/6
+Avictor/6
+avidity/7
+avid/33
+Avie/6
+Avigdor/6
+Avignon/6
+Avila/6
+avionic/9
+avionics/6
+Avior/6
+Avis
+avitaminoses
+avitaminosis/6
+Avivah/6
+Aviva/6
+Aviv/6
+avocado/7
+avocational
+avocation/7
+Avogadro/6
+avoidable/12
+avoidably/12
+avoidance/7
+avoider/6
+avoid/67
+avoirdupois/7
+Avon/6
+avouch/17
+avowal/85
+avowed/19
+avower/6
+avow/84
+Avram/6
+Avril/6
+Avrit/6
+Avrom/6
+avuncular
+av/90
+AWACS
+await/17
+awake/166
+awakened/12
+awakener/6
+awakening/9
+awaken/36
+awarder/6
+award/23
+awareness/41
+aware/98
+awash
+away/144
+aweigh
+awe/7
+awesomeness/7
+awesome/28
+awestruck
+awfuller
+awfullest
+awfulness/7
+awful/28
+aw/47
+awhile/9
+awkwardness/7
+awkward/33
+awl/7
+awning/170
+awn/171
+awoke
+awoken
+AWOL
+awry/54
+ax/49
+axehead/9
+Axel/6
+Axe/6
+axeman
+axial/19
+axillary
+axiological/19
+axiology/6
+axiomatically
+axiomatic/9
+axiomatization/7
+axiomatize/17
+axiom/7
+axion/7
+axis/7
+axle/7
+axletree/7
+Ax/6
+axolotl/7
+axon/7
+ayah/6
+ayahs
+Ayala/6
+ayatollah
+ayatollahs
+aye/96
+Ayers
+Aylmar/6
+Aylmer/6
+Aymara/6
+Aymer/6
+Ayn/6
+AZ
+azalea/7
+Azania/6
+Azazel/6
+Azerbaijan/6
+azimuthal/19
+azimuth/6
+azimuths
+Azores
+Azov/6
+AZT
+Aztecan
+Aztec/7
+azure/7
+BA
+Baal/7
+baa/17
+Babara/6
+Babar's
+Babbage/6
+Babbette/6
+Babbie/6
+babbitt/17
+Babbitt/6
+babbler/6
+babble/23
+Babb/6
+Babcock/6
+Babel/7
+babel/9
+babe/7
+Babette/6
+Babita/6
+Babka/6
+baboon/7
+Bab/7
+babushka/7
+babyhood/7
+babyish
+Babylonia/6
+Babylonian/7
+Babylon/7
+babysat
+babysit/9
+babysitter/9
+babysitting
+baby/172
+Bacall/6
+Bacardi/6
+baccalaureate/7
+baccarat/7
+bacchanalia
+Bacchanalia/6
+bacchanalian/9
+bacchanal/7
+Bacchic
+Bacchus/6
+bachelorhood/7
+bachelor/7
+Bach/6
+bacillary
+bacilli
+bacillus/7
+backache/7
+backarrow
+backbencher/6
+backbench/90
+backbiter/6
+backbite/9
+backbitten
+backbit/173
+backboard/7
+backbone/7
+backbreaking
+backchaining
+backcloth/6
+backdate/17
+backdrop/7
+backdropped
+backdropping
+backed/12
+backer/6
+backfield/7
+backfill/17
+backfire/17
+backgammon/7
+background/49
+back/91
+backhanded/19
+backhander/6
+backhand/49
+backhoe/9
+backing/6
+backlash/111
+backless
+backlogged
+backlogging
+backlog/7
+backorder
+backpacker/6
+backpack/49
+backpedal/17
+backplane/7
+backplate/7
+backrest/7
+backscatter/26
+backseat/9
+backside/7
+backslapper/7
+backslapping/6
+backslash/17
+backslider/6
+backslide/9
+backslid/174
+backspace/17
+backspin/7
+backstabber/6
+backstabbing
+backstage
+backstair/9
+backstitch/26
+backstop/7
+backstopped
+backstopping
+backstreet/6
+backstretch/7
+backstroke/26
+backtalk/9
+backtrack/23
+backup/7
+Backus/6
+backwardness/7
+backward/46
+backwash/26
+backwater/7
+backwood/9
+backwoodsman/6
+backwoodsmen
+backyard/7
+baconer/6
+Bacon/6
+bacon/175
+bacterial/19
+bacteria/7
+bactericidal
+bactericide/7
+bacteriologic
+bacteriological
+bacteriologist/7
+bacteriology/7
+bacterium/6
+Bactria/6
+badder
+baddest
+baddie/7
+bade
+Baden/6
+badge/49
+badger/165
+badinage/26
+badland/9
+Badlands/6
+badman/6
+badmen
+badminton/7
+badmouth/47
+badmouths
+badness/7
+bad/176
+Baedeker/7
+Baez/6
+Baffin/6
+bafflement/7
+baffler/6
+baffle/27
+baffling/19
+bagatelle/7
+bagel/7
+bagful/7
+baggageman
+baggagemen
+baggage/7
+bagged/6
+bagger/7
+baggily
+bagginess/7
+bagging/6
+baggy/177
+Baghdad/6
+bagpiper/6
+bagpipe/96
+Bagrodia/7
+bag/7
+baguette/7
+Baguio/6
+bah
+Baha'i
+Bahama/7
+Bahamanian/9
+Bahamian/7
+Baha'ullah
+Bahia/6
+Bahrain/6
+bahs
+Baikal/6
+Bailey/7
+bail/178
+Bailie/6
+bailiff/7
+bailiwick/7
+Baillie/6
+Bail/6
+bailout/7
+bailsman/6
+bailsmen
+Baily/6
+Baird/6
+bairn/7
+baiter/6
+bait/111
+baize/26
+Baja/6
+baked/12
+bakehouse/6
+Bakelite/6
+baker/6
+Baker/6
+Bakersfield/6
+bakery/7
+bakeshop/9
+bake/179
+baking/6
+baklava/6
+baksheesh/7
+Baku/6
+Bakunin/6
+balaclava/7
+balalaika/7
+balanced/14
+balancedness
+balancer/7
+balance's
+balance/180
+Balanchine/6
+Balboa/6
+balboa/7
+balcony/56
+balderdash/7
+Balder/6
+baldfaced
+Bald/114
+baldness/7
+bald/77
+baldric/7
+Balduin/6
+Baldwin/6
+baldy
+Balearic/6
+baleen/7
+balefuller
+balefullest
+balefulness/7
+baleful/28
+Bale/6
+bale/49
+baler/6
+Balfour/6
+Bali/6
+Balinese
+balkanization
+balkanize/47
+Balkan/7
+balker/6
+balk/31
+Balkhash/6
+balkiness/6
+balky/98
+balladeer/7
+ballade/7
+balladry/7
+ballad/7
+Ballard/7
+ballast/26
+ballcock/9
+ballerina/7
+baller/6
+balletic
+ballet/7
+ballfields
+ballgame/9
+ball/49
+ballistic/9
+ballistics/6
+Ball/6
+balloonist/9
+balloon/49
+balloter/6
+ballot/111
+ballpark/7
+ballplayer/7
+ballpoint/7
+ballroom/7
+ballsy/54
+ballyhoo/26
+balminess/7
+balm/7
+balmy/98
+baloney/7
+balsam/26
+balsamic
+balsa/7
+Balthazar/6
+Baltic/6
+Baltimore/6
+Baluchistan/6
+baluster/7
+balustrade/7
+Balzac/6
+Ba/6
+Bamako/6
+Bamberger/6
+Bambie/6
+Bambi/6
+bamboo/7
+bamboozle/17
+Bamby/6
+Banach/6
+banality/7
+banal/93
+banana/7
+Bancroft/6
+bandager/6
+bandage/111
+bandanna/7
+bandbox/7
+bandeau/6
+bandeaux
+band/84
+bander/6
+banding/6
+bandit/7
+banditry/7
+bandmaster/7
+bandoleer/7
+bandpass
+band's
+bandsman/6
+bandsmen
+bandstand/7
+bandstop
+Bandung/6
+bandwagon/7
+bandwidth/6
+bandwidths
+bandy/181
+banefuller
+banefullest
+baneful/19
+bane/7
+Bangalore/6
+banger/6
+bang/49
+bangkok
+Bangkok/6
+Bangladeshi/9
+Bangladesh/6
+bangle/7
+Bangor/6
+Bangui/6
+bani
+banisher/6
+banishment/7
+banish/8
+banister/7
+Banjarmasin/6
+banjoist/7
+banjo/7
+Banjul/6
+bankbook/7
+bankcard/9
+banker/6
+bank/182
+banking/6
+Bank/7
+banknote/9
+bankroll/26
+bankruptcy/7
+bankrupt/26
+Banky/6
+Ban/6
+banned/12
+Banneker/6
+banner/26
+banning/12
+Bannister/6
+bannister's
+bannock/7
+banns
+banqueter/6
+banquet/91
+banquette/7
+ban/26
+banshee/7
+bans/12
+bantam/7
+bantamweight/7
+banterer/6
+bantering/19
+banter/31
+Banting/6
+Bantu/7
+banyan/7
+banzai/9
+baobab/7
+Baotou/6
+baptismal/19
+baptism/7
+Baptiste/6
+baptistery/7
+baptist/7
+Baptist/7
+baptistry's
+baptized/12
+baptizer/6
+baptize/23
+baptizes/12
+Barabbas/6
+Barbabas/6
+Barbabra/6
+Barbadian/9
+Barbados/6
+Barbaraanne/6
+Barbara/6
+Barbarella/6
+barbarianism/7
+barbarian/7
+barbaric
+barbarically
+barbarism/7
+barbarity/7
+barbarize/17
+Barbarossa/6
+barbarousness/6
+barbarous/28
+Barbary/6
+barb/49
+barbecue/111
+barbed/42
+Barbee/6
+barbell/7
+barbel/7
+Barbe/6
+barbeque's
+barber/165
+barbered/12
+Barber/6
+barberry/7
+barbershop/7
+Barbette/6
+Barbey/6
+Barbie/6
+Barbi/6
+barbital/6
+barbiturate/7
+Barbour/6
+Barbra/6
+Barb/114
+Barbuda/6
+barbwire/7
+Barby/6
+barcarole/7
+Barcelona/6
+Barclay/6
+Bardeen/6
+Barde/6
+bardic
+Bard/6
+bard/26
+bareback/81
+barefacedness/6
+barefaced/28
+barefoot/81
+barehanded
+bareheaded
+barelegged
+bareness/7
+Barents/6
+bare/46
+barfly/7
+barf/183
+bargainer/6
+bargain/49
+barge/26
+bargeman/6
+bargemen
+bargepole/6
+barhopped
+barhopping
+barhop/9
+Bari/6
+baritone/7
+barium/7
+barked/169
+barkeeper/6
+barkeep/110
+barker/6
+Barker/6
+bark/49
+Barkley/6
+barks/169
+barleycorn/7
+barley/7
+Barlow/6
+barmaid/7
+barman/6
+barmen
+Bar/140
+Barnabas
+Barnabe/6
+Barnaby/6
+barnacle/56
+Barnard/6
+Barnaul/6
+Barnebas/6
+Barnes
+Barnett/6
+Barney/6
+barnful
+barn/26
+Barnhard/6
+Barnie/6
+Barn/6
+barnsful
+barnstorm/23
+barnstormer/6
+Barnum/6
+barnyard/7
+Barny/6
+Baroda/6
+barometer/7
+barometric
+barometrically
+baronage/7
+baroness/7
+baronetcy/7
+baronet/7
+baronial
+Baron/6
+baron/7
+barony/7
+baroque/32
+barque's
+Barquisimeto/6
+barracker/6
+barrack/31
+barracuda/7
+barrage/26
+Barranquilla/6
+barred/184
+barre/171
+barrel/26
+barrenness/7
+barren/177
+Barrera/6
+Barret/6
+barrette/7
+Barrett/6
+barricade/26
+Barrie/6
+barrier/7
+barring/164
+barrio/7
+Barri/7
+barrister/7
+Barr/6
+Barron/6
+barroom/7
+barrow/7
+Barry/6
+Barrymore/7
+bars/184
+barstool/7
+Barstow/6
+Bartel/6
+bartender/6
+bartend/90
+barterer/6
+barter/23
+bar/172
+Barthel/6
+Barth/6
+Bartholdi/6
+Bartholemy/6
+Bartholomeo/6
+Bartholomeus/6
+Bartholomew/6
+Bartie/6
+Bartlet/6
+Bartlett/6
+Bart/6
+Bart�k/6
+Bartolemo/6
+Bartolomeo/6
+Barton/6
+Bartram/6
+Barty/6
+barycenter
+barycentre's
+barycentric
+Bary/6
+baryon/7
+Baryram/6
+Baryshnikov/6
+basaltic
+basalt/7
+basal/19
+Bascom/6
+bas/181
+baseball/7
+baseband
+baseboard/7
+base/185
+baseless
+baseline/7
+Basel/6
+basely
+Base/6
+baseman/6
+basemen
+basement/186
+baseness/7
+baseplate/6
+base's
+basetting
+bashfulness/7
+bashful/28
+bash/187
+Basho/6
+Basia/6
+BASIC
+basically
+basic/9
+Basie/6
+basilar
+Basile/6
+basilica/7
+Basilio/6
+basilisk/7
+Basilius/6
+Basil/6
+basil/7
+basin/56
+basinful/9
+basis/6
+basketball/7
+basketry/7
+basket/7
+basketwork/7
+bask/17
+basophilic
+Basque/7
+Basra/6
+Basseterre/6
+basset/26
+Bassett/6
+bassinet/7
+bassist/7
+Bass/6
+basso/7
+bassoonist/7
+bassoon/7
+bass/7
+basswood/7
+bastardization/7
+bastardized/12
+bastardize/17
+bastard/65
+bastardy/7
+baste/188
+baster/6
+Bastian/6
+Bastien/6
+Bastille/6
+basting/6
+bastion/170
+bast/49
+Basutoland/6
+Bataan/6
+Batavia/6
+batch/111
+bated/12
+bate/189
+bater/190
+Bates
+bathe
+bather/6
+bathetic
+bathhouse/7
+bath/91
+bathmat/9
+Batholomew/6
+bathos/7
+bathrobe/7
+bathroom/56
+baths
+Bathsheba/6
+bathtub/7
+bathwater
+bathyscaphe's
+bathysphere/7
+batik/26
+Batista/6
+batiste/7
+Bat/6
+batman/6
+Batman/6
+batmen
+baton/7
+Batsheva/6
+batsman/6
+bat/111
+batsmen
+battalion/7
+batted
+batten/26
+batter/23
+battery/7
+batting/7
+battledore/7
+battledress
+battlefield/7
+battlefront/7
+battle/191
+battleground/7
+Battle/6
+battlement/56
+battler/6
+battleship/7
+batty/54
+Batu/6
+batwings
+bauble/7
+Baudelaire/6
+baud/6
+Baudoin/6
+Baudouin/6
+Bauer/6
+Bauhaus/6
+baulk/26
+Bausch/6
+bauxite/7
+Bavaria/6
+Bavarian/9
+bawdily
+bawdiness/7
+bawd/7
+bawdy/177
+bawler/6
+bawl/31
+Baxie/6
+Bax/6
+Baxter/6
+Baxy/6
+Bayamon
+Bayard/6
+bayberry/7
+Bayda/6
+Bayer/6
+Bayes
+Bayesian
+bay/116
+Baylor/6
+Bay/114
+bayonet/26
+Bayonne/6
+bayou/7
+Bayreuth/6
+bazaar/7
+bazillion/9
+bazooka/7
+BB
+BBB
+BBC
+bbl
+BBQ
+BBS
+BC
+BCD
+bdrm
+beachcomber/7
+beachhead/7
+Beach/6
+beach/26
+beachwear/6
+beacon/26
+beading/6
+Beadle/6
+beadle/7
+bead/171
+beadsman/6
+beadworker
+beady/54
+beagle/26
+beaker/6
+beak/192
+Beale/6
+Bealle/6
+Bea/6
+beam/49
+beanbag/7
+bean/49
+beanie/7
+Bean/6
+beanpole/7
+beanstalk/7
+bearable/12
+bearably/12
+beard/26
+bearded/42
+beardless
+Beard/6
+Beardmore/6
+Beardsley/6
+bearer/6
+bearing/6
+bearishness/7
+bearish/28
+bearlike
+Bear/6
+Bearnaise/6
+Bearnard/6
+bearskin/7
+bear/193
+Beasley/6
+beasties
+beastings/6
+beastliness/7
+beastly/98
+beast/194
+beatable/12
+beatably/12
+beaten/12
+beater/6
+beatific
+beatifically
+beatification/6
+beatify/15
+beating/6
+beatitude/7
+Beatlemania/6
+Beatles/6
+beatnik/7
+beat/195
+Beatrice/6
+Beatrisa/6
+Beatrix/6
+Beatriz/6
+Beauchamps
+Beaufort/6
+Beaujolais/6
+Beau/6
+Beaumarchais/6
+Beaumont/6
+beau/7
+Beauregard/6
+beauteousness/6
+beauteous/28
+beautician/7
+beautification/6
+beautifier/6
+beautifully/12
+beautifulness/6
+beautiful/33
+beautify/115
+beaut/7
+beauty/7
+Beauvoir/6
+beaux's
+beaver/26
+Beaverton/6
+Bebe/6
+bebop/7
+becalm/17
+became
+because
+Becca/6
+Bechtel/6
+Becka/6
+Becker/6
+Becket/6
+Beckett/6
+beck/26
+Beckie/6
+Becki/6
+beckon/17
+Beck/114
+Becky/6
+becloud/17
+become/196
+becoming/10
+Becquerel/6
+bedaub/17
+bedazzle/11
+bedazzlement/7
+bedbug/7
+bedchamber/6
+bedclothes
+bedded
+bedder/7
+bedding/7
+bedeck/17
+Bede/6
+bedevil/11
+bedevilment/7
+bedfast
+bedfellow/7
+Bedford/6
+bedimmed
+bedimming
+bedim/9
+bedizen/17
+bedlam/7
+bedlinen
+bedmaker/7
+bedmate/7
+bed/7
+Bedouin/7
+bedpan/7
+bedpost/7
+bedraggle/17
+bedridden
+bedrock/7
+bedroll/7
+bedroom/56
+bedsheets
+bedside/7
+bedsit
+bedsitter/6
+bedsore/7
+bedspread/7
+bedspring/7
+bedstead/7
+bedstraw/6
+bedtime/7
+Beebe/6
+beebread/7
+Beecher/6
+beech/197
+beechnut/7
+beechwood
+beefburger/7
+beefcake/7
+beef/49
+beefiness/7
+beefsteak/7
+beefy/98
+beehive/7
+beekeeper/7
+beekeeping/7
+beeline/26
+Beelzebub/6
+Bee/6
+bee/198
+been/9
+beeper/6
+beep/49
+Beerbohm/6
+beer/6
+beermat/9
+beery/54
+beeswax/26
+Beethoven/6
+beetle/111
+Beeton/6
+beetroot/6
+beet/7
+beeves/6
+befall/199
+befell
+befit/7
+befitted
+befitting/19
+befogged
+befogging
+befog/9
+before
+beforehand
+befoul/17
+befriend/17
+befuddle/11
+befuddlement/7
+began
+beget/9
+begetting
+beggar/116
+beggarliness/6
+beggarly/42
+beggary/7
+begged
+begging
+Begin/6
+beginner/7
+beginning/7
+begin/9
+begone/9
+begonia/7
+begot
+begotten
+begrime/17
+begrudge/31
+begrudging/19
+beg/9
+beguilement/7
+beguiler/6
+beguile/27
+beguiling/19
+beguine/7
+begum/7
+begun
+behalf/6
+behalves
+Behan/6
+behave/31
+behavioral/19
+behaviorism/7
+behavioristic/9
+behaviorist/9
+behavior/56
+behead/17
+beheld
+behemoth/6
+behemoths
+behest/7
+behindhand
+behind/9
+beholder/6
+behold/200
+behoofs
+behoove/171
+behooving/86
+Behring/6
+Beiderbecke/6
+beige/7
+Beijing
+Beilul/6
+being/6
+Beirut/6
+Beitris/6
+bejewel/17
+Bekesy/6
+Bekki/6
+be/201
+belabor/26
+Bela/6
+Belarus
+belate/81
+belatedness/6
+belated/28
+Belau/6
+belay/17
+belch/17
+beleaguer/17
+Belem/6
+Belfast/6
+belfry/7
+Belgian/7
+Belgium/6
+Belg/6
+Belgrade/6
+Belia/6
+Belicia/6
+belie
+belief/202
+belier/6
+believability's
+believability/12
+believable/12
+believably/12
+believed/12
+believe/203
+believer/202
+believing/12
+Belinda/6
+Belita/6
+belittlement/7
+belittler/6
+belittle/8
+Belize/6
+belladonna/7
+Bella/6
+Bellamy/6
+Bellanca/6
+Bellatrix/6
+bellboy/7
+belled/14
+Belle/6
+belle/7
+belletristic
+belletrist/7
+Belleville/6
+bellflower/6
+bell/26
+bellhop/7
+bellicoseness/6
+bellicose/28
+bellicosity/7
+belligerence/7
+belligerency/7
+belligerent/65
+Bellina/6
+belling/14
+Bellini/6
+Bell/6
+bellman/6
+bellmen
+Bellovin/6
+bellow/17
+Bellow/6
+bellows/6
+bells/14
+bellwether/7
+Bellwood/6
+bellyacher/6
+bellyache/111
+bellybutton/7
+bellyfull
+bellyful/7
+belly/26
+Bel/6
+Belmont/6
+Belmopan/6
+Beloit/6
+belong/71
+belonging/204
+Belorussian/9
+Belorussia's
+belove/81
+beloved/9
+below/9
+Belshazzar/6
+belted/12
+belt/26
+belting/6
+Belton/6
+Beltran/6
+Beltsville/6
+beltway/7
+beluga/7
+Belushi/6
+Belva/6
+belvedere/6
+Belvia/6
+bely/31
+beman
+Be/140
+bemire/17
+bemoan/17
+bemused/19
+bemuse/11
+bemusement/7
+Benacerraf/6
+Benares's
+bencher/6
+benchmark/26
+bench/111
+bend/205
+bended
+Bender/6
+bender/7
+Bendick/6
+Bendicty/6
+Bendite/6
+Bendix/6
+beneath
+Benedetta/6
+Benedetto/6
+Benedick/6
+Benedicta/6
+Benedictine/7
+benediction/7
+Benedict/6
+Benedicto/6
+benedictory
+Benedikta/6
+Benedikt/6
+benefaction/7
+benefactor/7
+benefactress/9
+benefice/26
+beneficence/7
+beneficent/19
+beneficialness/6
+beneficial/28
+beneficiary/7
+benefiter/6
+benefit/49
+Benelux/6
+Benet/6
+Benetta/6
+Benetton/6
+benevolence/7
+benevolentness/6
+benevolent/28
+Bengali/6
+Bengal/7
+Benghazi/6
+Bengt/6
+Beniamino/6
+benightedness/6
+benighted/28
+benignant
+benignity/7
+benign/19
+Beninese
+Benin/6
+Benita/6
+Benito/6
+Benjamen/6
+Benjamin/6
+Benjie/6
+Benji/6
+Benjy/6
+Ben/6
+Bennett/6
+Bennie/6
+Benni/6
+Bennington/6
+Benn/6
+Benny/6
+Benoite/6
+Benoit/6
+Benson/6
+Bentham/6
+Bentlee/6
+Bentley/7
+Bent/6
+Benton/6
+bents
+bent/12
+bentwood/7
+benumb/17
+Benyamin/6
+Benzedrine/6
+benzene/7
+benzine/7
+Benz/6
+Beograd's
+Beowulf/6
+bequeath/17
+bequeaths
+bequest/7
+berate/17
+Berber/7
+bereave/11
+bereavement/7
+bereft
+Berenice/6
+Beret/6
+beret/7
+Bergen/6
+Bergerac/6
+Berger/6
+Berget/6
+Berglund/6
+Bergman/6
+Berg/206
+berg/197
+Bergson/6
+Bergsten/6
+Bergstrom/6
+beribbon/81
+beriberi/7
+Beringer/6
+Bering/114
+Berkeley/6
+berkelium/7
+Berke/6
+Berkie/6
+Berkley/6
+Berkly/6
+Berkowitz/6
+Berkshire/7
+Berky/6
+Berk/86
+Berle/6
+Berliner/6
+Berlin/96
+Berlioz/6
+Berlitz/6
+Berman/6
+Ber/207
+berm/7
+Bermuda/7
+Bermudan/9
+Bermudian/9
+Bernadene/6
+Bernadette/6
+Bernadina/6
+Bernadine/6
+Berna/6
+Bernardina/6
+Bernardine/6
+Bernardino/6
+Bernard/6
+Bernardo/6
+Bernarr/6
+Bernays/6
+Bernbach/6
+Bernelle/6
+Berne's
+Bernese
+Bernete/6
+Bernetta/6
+Bernette/6
+Bernhard/6
+Bernhardt/6
+Bernice/6
+Berniece/6
+Bernie/6
+Berni/6
+Bernini/6
+Bernita/6
+Bern/6
+Bernoulli/6
+Bernstein/6
+Berny/6
+Berra/6
+Berrie/6
+Berri/6
+berrylike
+Berry/6
+berry/26
+berserker/6
+berserk/208
+Berta/6
+Berte/6
+Bertha/6
+Berthe/6
+berth/209
+berths
+Bertie/6
+Bertillon/6
+Berti/6
+Bertina/6
+Bertine/6
+Bert/6
+Berton/6
+Bertram/6
+Bertrand/6
+Bertrando/6
+Berty/6
+Beryle/6
+beryllium/7
+Beryl/6
+beryl/7
+Berzelius/6
+bes
+beseecher/6
+beseeching/19
+beseech/210
+beseem/17
+beset/9
+besetting
+beside/9
+besieger/6
+besiege/23
+besmear/17
+besmirch/17
+besom/26
+besot/9
+besotted
+besotting
+besought
+bespangle/17
+bespatter/17
+bespeak/166
+bespectacled
+bespoke
+bespoken
+Bess
+Bessel/6
+Bessemer/6
+Bessie/6
+Bessy/6
+best/31
+bestiality/7
+bestial/19
+bestiary/7
+bestirred
+bestirring
+bestir/9
+Best/6
+bestowal/7
+bestow/17
+bestrew/17
+bestrewn
+bestridden
+bestride/166
+bestrode
+bestseller/7
+bestselling
+bestubble/81
+betaken
+betake/166
+beta/7
+betatron/6
+betcha
+Betelgeuse/6
+betel/7
+Bethanne/6
+Bethany/6
+bethel/6
+Bethe/6
+Bethena/6
+Bethesda/6
+Bethina/6
+bethink/166
+Bethlehem/6
+beth/6
+Beth/6
+bethought
+Bethune
+betide/17
+betimes
+bet/7
+betoken/17
+betook
+betrayal/7
+betrayer/6
+betray/23
+betrothal/7
+betrothed/12
+betroth/47
+betroths
+Betsey/6
+Betsy/6
+Betta/6
+Betteanne/6
+Betteann/6
+Bette/6
+betterment/7
+better/11
+Bettie/6
+Betti/6
+Bettina/6
+Bettine/6
+betting
+bettor/7
+Bettye/6
+Betty/7
+betweenness/6
+between/144
+betwixt
+Beulah/6
+Bevan/6
+bevel/211
+beverage/7
+Beverie/6
+Beverlee/6
+Beverley/6
+Beverlie/6
+Beverly/6
+Bevin/6
+Bevon/6
+Bev's
+Bevvy/6
+bevy/7
+bewail/17
+beware/17
+bewhisker/81
+bewigged
+bewildered/28
+bewildering/19
+bewilder/11
+bewilderment/7
+bewitching/19
+bewitch/11
+bewitchment/7
+bey/7
+beyond/9
+bezel/7
+bf
+B/212
+Bhopal/6
+Bhutanese
+Bhutan/6
+Bhutto/6
+Bialystok/6
+Bianca/6
+Bianco/6
+Bianka/6
+biannual/19
+bias/213
+biased/12
+biathlon/7
+biaxial/19
+bibbed
+Bibbie/6
+bibbing
+Bibbye/6
+Bibby/6
+Bibi/6
+bible/7
+Bible/7
+biblical/19
+biblicists
+bibliographer/7
+bibliographical/19
+bibliographic/9
+bibliography/7
+bibliophile/7
+Bib/6
+bib/7
+bibulous
+bicameral
+bicameralism/7
+bicarb/7
+bicarbonate/7
+bicentenary/9
+bicentennial/9
+bicep/9
+biceps/6
+bichromate/170
+bickerer/6
+bickering/6
+bicker/23
+biconcave
+biconnected
+biconvex
+bicuspid/9
+bicycler/6
+bicycle/49
+bicyclist/7
+biddable
+bidden/12
+bidder/7
+Biddie/6
+bidding/7
+Biddle/6
+Biddy/6
+biddy/7
+bider/6
+bide/9
+bidet/7
+Bidget/6
+bid/214
+bidiagonal
+bidirectional/19
+bids/14
+biennial/16
+biennium/7
+Bienville/6
+Bierce/6
+bier/6
+bifocal/9
+bifurcate/215
+bifurcation/6
+bigamist/7
+bigamous
+bigamy/7
+Bigelow/6
+Bigfoot
+bigged
+bigger
+biggest
+biggie/7
+bigging
+biggish
+bighead/7
+bigheartedness/9
+bighearted/42
+bighorn/7
+bight/26
+bigmouth/6
+bigmouths
+bigness/7
+bigoted/19
+bigot/26
+bigotry/7
+big/46
+bigwig/7
+biharmonic
+bijection/7
+bijective/19
+bijou/6
+bijoux
+bike/49
+biker/6
+bikini/56
+Biko/6
+bilabial/9
+bilateralness/6
+bilateral/28
+bilayer/9
+Bilbao/6
+bilberry/7
+Bilbo/6
+bile/7
+bilge/26
+biliary
+Bili/6
+bilinear
+bilingualism/7
+bilingual/16
+biliousness/7
+bilious/42
+bilker/6
+bilk/23
+billboard/26
+biller/6
+billet/26
+billfold/7
+billiard/7
+Billie/6
+Billi/6
+billing/6
+billingsgate/7
+Billings/6
+billionaire/7
+billion/216
+billionths
+bill/182
+Bill/217
+billow/26
+billowy/54
+billposters
+Billye/6
+Billy/6
+billy/7
+Bil/86
+bi/6
+Bi/6
+bimbo/7
+bimetallic/9
+bimetallism/7
+Bimini/6
+bimodal
+bimolecular/19
+bimonthly/9
+binary/9
+binaural/19
+binder/6
+bindery/7
+binding/218
+bindingness/6
+bind/179
+bindle/6
+binds/13
+bindweed/7
+binge/7
+bing/219
+Bingham/6
+Binghamton/6
+Bing/6
+bingo/7
+Bini/6
+Bink/6
+Binky/6
+binnacle/7
+binned
+Binnie/6
+Binni/6
+binning
+Binny/6
+binocular/16
+binodal
+binomial/65
+bin/7
+binuclear
+biochemical/16
+biochemist/7
+biochemistry/7
+biodegradability/9
+biodegradable
+biodiversity/9
+bioengineering/6
+bioethics
+biofeedback/7
+biographer/6
+biographic
+biographical/19
+biograph/90
+biography/7
+biog/9
+Bioko/6
+biol
+biological/16
+biologic/9
+biologist/7
+biology/7
+biomass/7
+biomedical
+biomedicine/6
+biometric/9
+biometrics/6
+biometry/6
+biomolecule/9
+biomorph
+bionically
+bionic/9
+bionics/6
+biophysical/19
+biophysicist/7
+biophysic/9
+biophysics/6
+biopic/9
+biopsy/26
+biorhythm/9
+BIOS
+bioscience/9
+biosphere/7
+biostatistic/9
+biosynthesized
+biotechnological
+biotechnologist
+biotechnology/7
+biotic
+biotin/7
+bipartisan
+bipartisanship/7
+bipartite/220
+bipartition/6
+bipedal
+biped/7
+biplane/7
+bipolar
+bipolarity/7
+biracial
+Birch/6
+birch/150
+birdbath/6
+birdbaths
+birdbrain/56
+birdcage/7
+birder/6
+birdhouse/7
+birdieing
+Birdie/6
+birdie/56
+birdlike
+birdlime/26
+Bird/6
+birdseed/7
+Birdseye/6
+bird/49
+birdsong
+birdtables
+birdwatch/174
+birefringence/6
+birefringent
+biretta/7
+Birgit/6
+Birgitta/6
+Birkenstock/6
+Birk/6
+Birmingham/6
+Biro/6
+Biron/6
+birthday/7
+birthmark/7
+birth/165
+birthplace/7
+birthrate/7
+birthright/7
+birth's/14
+births/14
+birthstone/7
+bis
+Biscay/6
+Biscayne/6
+biscuit/7
+bisect/17
+bisection/7
+bisector/7
+biserial
+bisexuality/7
+bisexual/65
+Bishkek
+bishop/26
+Bishop/6
+bishopric/7
+Bismarck/6
+Bismark/6
+bismuth/6
+bismuths
+bison/6
+bisque/7
+Bissau/6
+bistable
+bistate
+bistro/7
+bisyllabic
+bitblt/9
+bitchily
+bitchiness/7
+bitch/26
+bitchy/98
+biter/6
+bite/9
+biting/19
+bitmap/7
+bit/198
+BITNET/6
+bit's/169
+bits/169
+bitser/6
+bitted
+bitten
+bitterness/7
+bittern/7
+bitternut/6
+bitter/77
+bitterroot/6
+bittersweet/32
+bitting
+bitty/98
+bitumen/7
+bituminous
+bitwise
+bivalent/9
+bivalve/56
+bivariate
+bivouacked
+bivouacking
+bivouac/7
+biweekly/9
+biyearly
+bizarreness/6
+bizarre/46
+Bizet/6
+biz/6
+bizzes
+Bjorn/6
+bk
+b/221
+Bk/6
+blabbed
+blabber/26
+blabbermouth/6
+blabbermouths
+blabbing
+blab/9
+blackamoor/7
+blackball/26
+blackberry/131
+blackbirder/6
+blackbird/111
+blackboard/7
+blackbody/9
+Blackburn/6
+blackcurrant/6
+blackener/6
+blacken/52
+Blackfeet
+Blackfoot/6
+blackguard/26
+blackhead/7
+blacking/6
+blackish
+blackjack/26
+blackleg/6
+blacklist/111
+blackmail/49
+blackmailer/6
+Blackman/6
+Blackmer/6
+blackness/7
+blackout/7
+Blackpool/6
+Black's
+black/222
+blacksmith/207
+blacksmiths
+blacksnake/7
+blackspot
+Blackstone/6
+blackthorn/7
+blacktop/7
+blacktopped
+blacktopping
+Blackwell/7
+bladder/7
+bladdernut/6
+bladderwort/6
+blade/26
+blah/165
+blahs
+Blaine/6
+Blaire/6
+Blair/6
+Blakelee/6
+Blakeley/6
+Blake/6
+Blakey/6
+blame/66
+blamelessness/7
+blameless/28
+blamer/6
+blameworthiness/7
+blameworthy/42
+Blanca/6
+Blancha/6
+Blanchard/6
+blanch/31
+Blanche/6
+blancher/6
+Blanch/6
+blanc/6
+blancmange/7
+blandishment/7
+blandish/11
+blandness/7
+bland/33
+Blane/6
+Blankenship/6
+blanketing/6
+blanket/49
+blankness/7
+blank/77
+Blanton/6
+Blantyre/6
+blare/17
+blarney/26
+blas�
+blasphemer/6
+blaspheme/23
+blasphemousness/6
+blasphemous/28
+blasphemy/7
+blaster/6
+blasting/6
+blastoff/7
+blast/49
+blatancy/7
+blatant/28
+blather/31
+blatting
+Blatz/6
+Blavatsky/6
+Blayne/6
+blaze/49
+blazer/6
+blazing/19
+blazoner/6
+blazon/31
+bl/81
+bldg
+bleach/23
+bleached/12
+bleacher/6
+bleakness/7
+bleak/38
+blear/17
+blearily
+bleariness/7
+bleary/98
+bleater/6
+bleat/31
+bleeder/6
+bleed/210
+Bleeker/6
+bleep/49
+blemish/26
+blemished/12
+blench/17
+blender/6
+blend/23
+Blenheim/6
+blessedness/7
+blessed/33
+blessing/6
+bless/71
+Blevins/6
+blew
+Bligh/6
+blighter/6
+blight/111
+blimey/9
+blimp/7
+blinded/12
+blinder/6
+blindfold/17
+blinding/86
+blind/223
+blindness/7
+blindside/17
+blinker/165
+blinking/12
+blink/23
+blinks/6
+Blinnie/6
+Blinni/6
+Blinny/6
+blintze/6
+blintz/7
+blip/7
+blipped
+blipping
+Blisse/6
+blissfulness/7
+blissful/28
+Bliss/6
+bliss/26
+blistering/19
+blister/26
+blistery
+Blithe/6
+blitheness/7
+blither/224
+blithesome
+blithe/33
+blitz/26
+blitzkrieg/7
+blizzard/7
+bloater/6
+bloat/23
+blobbed
+blobbing
+blob/7
+Bloch/6
+blockader/6
+blockade/49
+blockage/7
+blockbuster/7
+blockbusting/7
+blocker/7
+blockhead/7
+blockhouse/7
+block's
+block/180
+blocky/164
+bloc/7
+Bloemfontein/6
+blog/7
+blogged
+blogger/7
+blogging
+blogged
+bloke/7
+Blomberg/6
+Blomquist/6
+Blondelle/6
+Blondell/6
+blonde's
+Blondie/6
+blondish
+blondness/7
+blond/225
+Blondy/6
+bloodbath
+bloodbaths
+bloodcurdling
+bloodhound/7
+bloodied/12
+bloodiness/7
+bloodlessness/7
+bloodless/28
+bloodletting/7
+bloodline/7
+bloodmobile/7
+bloodroot/6
+bloodshed/7
+bloodshot
+blood/26
+bloodsport/9
+bloodstain/56
+bloodstock/7
+bloodstone/6
+bloodstream/7
+bloodsucker/7
+bloodsucking/9
+bloodthirstily
+bloodthirstiness/7
+bloodthirsty/98
+bloodworm/6
+bloodymindedness
+bloody/226
+bloomer/6
+Bloomer/6
+Bloomfield/6
+Bloomington/6
+Bloom/114
+bloom/49
+blooper/6
+bloop/23
+blossom/26
+blossomy
+blotch/26
+blotchy/54
+blot/7
+blotted
+blotter/7
+blotting
+blotto
+blouse/26
+blower/6
+blowfish/6
+blowfly/7
+blowgun/7
+blow/227
+blowing/6
+blown/12
+blowout/7
+blowpipe/7
+blowtorch/7
+blowup/7
+blowy/228
+blowzy/54
+BLT
+blubber/31
+blubbery
+Blucher/6
+bludgeon/26
+blueback
+Bluebeard/6
+bluebell/7
+blueberry/7
+bluebill/6
+bluebird/7
+bluebonnet/7
+bluebook/6
+bluebottle/7
+bluebush
+bluefish/7
+bluegill/7
+bluegrass/7
+blueing's
+blueish
+bluejacket/7
+bluejeans
+blue/229
+blueness/7
+bluenose/7
+bluepoint/7
+blueprint/26
+bluer/6
+bluest/6
+bluestocking/7
+bluesy/54
+bluet/7
+bluffer/6
+bluffness/7
+bluff/100
+bluing/6
+bluishness/6
+bluish/42
+Blumenthal/6
+Blum/6
+blunderbuss/7
+blunderer/6
+blunder/91
+blundering/19
+bluntness/7
+blunt/77
+blurb/26
+blur/7
+blurred/19
+blurriness/9
+blurring/19
+blurry/98
+blurt/31
+blusher/6
+blushing/10
+blush/23
+blusterer/6
+blustering/19
+blusterous
+bluster/23
+blustery
+blvd
+Blvd
+Blythe/6
+BM
+BMW/6
+BO
+boarded
+boarder/7
+boardgames
+boardinghouse/7
+boarding/7
+board/230
+boardroom/7
+board's
+boardwalk/7
+boar/7
+boa/7
+boaster/6
+boastfulness/7
+boastful/28
+boast/179
+boatclubs
+boater/6
+boathouse/7
+boating/6
+boatload/7
+boatman/6
+boat/91
+boatmen
+boatswain/7
+boatyard/7
+bobbed
+Bobbee/6
+Bobbe/6
+Bobbette/6
+Bobbie/6
+Bobbi/6
+bobbing/6
+bobbin/7
+Bobbitt/6
+bobble/26
+Bobbsey/6
+Bobbye/6
+Bobby/6
+bobby/7
+bobbysoxer's
+bobcat/7
+Bobette/6
+Bobina/6
+Bobine/6
+Bobinette/6
+Bob/6
+bobolink/7
+Bobrow/6
+bobsledded
+bobsledder/7
+bobsledding/6
+bobsled/7
+bobsleigh/6
+bobsleighs
+bobs/6
+bob/7
+bobtail/26
+bobwhite/7
+Boca/6
+Boccaccio/6
+boccie/7
+bock/17
+bockwurst
+bodega/7
+Bodenheim/6
+bode/9
+Bodhidharma/6
+bodhisattva
+Bodhisattva/6
+bodice/7
+bodied/6
+bodiless
+bodily
+boding/6
+bodkin/7
+bod/26
+bodybuilder/7
+bodybuilding/9
+body/26
+bodyguard/7
+bodying/6
+bodysuit/9
+bodyweight
+bodywork/7
+Boeing/6
+Boeotia/6
+Boeotian
+Boer/6
+Bogartian/6
+Bogart/6
+Bogey/6
+bogeyman/6
+bogeymen
+bogey/26
+bogged
+bogging
+boggle/17
+boggling/19
+boggy/54
+bogie's
+bog/7
+Bogot�/6
+bogus
+bogyman
+bogymen
+bogy's
+Boheme/6
+bohemianism/9
+bohemian/9
+Bohemian/7
+Bohemia/7
+Bohr/6
+Boigie/6
+boiled/13
+boiler/6
+boilermaker/7
+boilerplate/7
+boil/179
+boils/14
+Boise/6
+Bois/6
+boisterousness/7
+boisterous/28
+bola/7
+boldface/26
+boldness/7
+bold/38
+bole/7
+bolero/7
+Boleyn/6
+bolivares
+Bolivar/6
+bolivar/7
+Bolivia/6
+Bolivian/9
+bollard/7
+bollix/17
+boll/26
+Bologna/6
+bologna/7
+bolometer/7
+bolo/7
+boloney's
+Bolshevik/7
+Bolshevism/7
+Bolshevistic/6
+Bolshevist/7
+Bolshoi/6
+bolsterer/6
+bolster/31
+bolted/12
+bolter/6
+bolt/111
+Bolton/6
+bolts/12
+Boltzmann/6
+bolus/7
+bombardier/7
+bombard/11
+bombardment/7
+bombastic
+bombastically
+bombast/175
+Bombay/6
+bomber/6
+bombproof
+bomb/179
+bombshell/7
+Bo/231
+bona
+bonanza/7
+Bonaparte/6
+Bonaventure/6
+bonbon/7
+bondage/7
+bonder/6
+bondholder/7
+Bondie/6
+bond/91
+Bond/6
+bondman/6
+bondmen
+Bondon/6
+bonds/14
+bondsman/6
+bondsmen
+bondwoman/6
+bondwomen
+Bondy/6
+boned/12
+bonehead/56
+boneless
+Bone/6
+bone/49
+boner/6
+bonfire/7
+bong/26
+bongo/7
+Bonham/6
+bonhomie/7
+Boniface/6
+boniness/7
+Bonita/6
+bonito/7
+bonjour
+bonkers
+Bonnee/6
+Bonner/6
+bonneted/12
+bonnet/26
+Bonneville/6
+Bonnibelle/6
+bonnie
+Bonnie/6
+Bonni/6
+Bonn/114
+Bonny/6
+bonny/54
+bonsai/7
+Bontempo/6
+bonus/7
+bony/98
+bonzes
+boob/26
+booby/7
+boodle/26
+boogeyman's
+boogieing
+boogie/142
+boo/232
+boohoo/17
+bookbinder/6
+bookbindery/7
+bookbinding/6
+bookbind/173
+bookcase/7
+booked/12
+bookend/17
+Booker/6
+book/182
+bookie/7
+booking/6
+bookishness/6
+bookish/28
+bookkeeper/6
+bookkeep/173
+bookkeeping/6
+booklet/7
+bookmaker/7
+bookmaking/7
+bookmark/26
+bookmobile/7
+bookplate/7
+bookseller/7
+bookshelf/6
+bookshelves
+bookshop/7
+bookstall/7
+bookstore/7
+bookwork/6
+bookworm/7
+Boolean
+boolean/9
+Boole/6
+boom/187
+boomerang/26
+boomer/6
+boomtown/9
+boondocks
+boondoggle/23
+boondoggler/6
+Boone/6
+Boonie/6
+boonies
+boon/7
+Boony/6
+boorishness/7
+boorish/28
+boor/7
+boosterism
+booster/6
+boost/49
+boot/36
+bootblack/7
+bootee/7
+Boote/6
+Bo�tes
+Boothe/6
+booth/6
+Booth/6
+booths
+bootie's
+bootlaces
+bootlegged/6
+bootlegger/7
+bootlegging/6
+bootleg/9
+Bootle/6
+bootless
+Boot/6
+bootprints
+boot's
+bootstrapped
+bootstrapping
+bootstrap/7
+booty/7
+booze/49
+boozer/6
+boozy/54
+bopped
+bopping
+bop/9
+borate/56
+borax/7
+Bordeaux/6
+bordello/7
+Borden/6
+borderer/6
+border/211
+borderland/7
+borderline/7
+Bordie/6
+Bord/72
+Bordon/6
+Bordy/6
+Borealis/6
+Boreas/6
+boredom/7
+boreholes
+borer/6
+bore/179
+Borges
+Borgia/6
+Borg/6
+boric
+boring/218
+Boris
+Bork/6
+born/233
+Borneo/6
+borne/12
+Born/6
+Borodin/6
+boron/7
+borosilicate/6
+borough/6
+boroughs
+Borroughs/6
+borrower/6
+borrowing/6
+borrow/234
+borscht/7
+borstal/7
+Boru/6
+borzoi/7
+Bosch/6
+Bose/6
+bosh/7
+Bosnia/6
+Bosnian/9
+bosom's
+bosom/180
+bosomy/54
+boson/7
+Bosporus/6
+boss/111
+bossily
+bossiness/7
+bossism/7
+bossy/177
+Bostitch/6
+Bostonian/7
+Boston/7
+bosun's
+Boswell/7
+botanical/16
+botanic/9
+botanist/7
+botany/7
+botcher/6
+botch/23
+botfly/6
+bother/47
+bothersome
+bothy/6
+both/90
+bot/9
+Botswana/6
+Botticelli/6
+bottle/49
+bottleneck/26
+bottler/6
+bottomlessness/6
+bottomless/28
+bottommost
+bottom/111
+botulin/6
+botulinus/6
+botulism/7
+Boucher/6
+boudoir/7
+bouffant/9
+bougainvillea/7
+bough/170
+boughs
+bought/122
+bouillabaisse/7
+bouillon/7
+boulder/26
+Boulder/6
+boulevard/7
+bouncer/6
+bounce/23
+bouncily
+bouncing/19
+bouncy/98
+boundary/7
+bound/235
+boundedness/135
+bounded/236
+bounden
+bounder/118
+bounders
+bounding
+boundlessness/7
+boundless/28
+bounds/58
+bounteousness/7
+bounteous/28
+bountifulness/7
+bountiful/28
+bounty/56
+bouquet/7
+Bourbaki/6
+bourbon/7
+Bourbon/7
+bourgeoisie/7
+bourgeois/6
+Bourke/6
+Bourne/6
+Bournemouth/6
+boutique/7
+bout/7
+boutonni�re/7
+Bouvier
+Bovary/6
+bovine/16
+Bowditch/6
+bowdlerization/7
+bowdlerize/31
+bowed/12
+bowel/26
+Bowell/6
+Bowen/6
+bower/165
+Bowers
+Bowery/6
+Bowes
+bowie
+Bowie/6
+bowing/6
+bowlder's
+bowlegged
+bowleg/7
+bowler/6
+bowlful/9
+bowl/49
+bowline/7
+bowling/6
+bowman/6
+Bowman/6
+bowmen
+bowser/6
+bowsprit/7
+bows/164
+bowstring/26
+bow/237
+bowwow/26
+boxcar/7
+box/91
+boxer/6
+boxful/6
+boxing/6
+boxlike
+boxtops
+boxwood/7
+boxy/98
+Boyce/6
+Boycey/6
+Boycie/6
+boycotter/6
+boycott/31
+Boyd/6
+Boyer/6
+boyfriend/7
+boyhood/7
+boyishness/7
+boyish/28
+Boyle/6
+Boy/114
+boy/175
+boyscout
+boysenberry/7
+bozo/7
+bpi
+bps
+BR
+brace/211
+braced/12
+bracelet/7
+bracer/6
+brachia
+brachium/6
+bracken/7
+bracketed/12
+bracketing/6
+bracket/26
+brackishness/7
+brackish/42
+bract/7
+Bradan/6
+bradawl/6
+Bradbury/6
+Bradburys
+bradded
+bradding
+Braddock/6
+Brade/6
+Braden/6
+Bradford/6
+Bradley/6
+Bradly/6
+Brad/238
+Bradney/6
+Bradshaw/6
+brad/7
+Bradstreet/6
+Brady/6
+brae/7
+braggadocio/7
+braggart/7
+bragged
+bragger/7
+braggest
+bragging
+Bragg/6
+brag/9
+Brahe/6
+Brahma/7
+Brahmanism/7
+Brahman/7
+Brahmaputra/6
+Brahmin's
+Brahms
+braider/6
+braiding/6
+braid/187
+braille/17
+Braille/26
+Brainard/7
+braincell/9
+brainchild/6
+brainchildren
+brain/26
+braininess/7
+brainlessness/6
+brainless/28
+Brain/6
+brainpower/6
+brainstorm/211
+brainstorming/6
+brainteaser/9
+brainteasing
+brainwasher/6
+brainwashing/6
+brainwash/187
+brainwave/9
+brainy/98
+braise/17
+brake/26
+brakeman/6
+brakemen/6
+bramble/26
+brambling/6
+brambly/54
+Bram/6
+Brampton/6
+bra/7
+Brana/6
+branched/12
+branching/6
+branchlike
+Branch/6
+branch/171
+Branchville/6
+Brandais/6
+Brandea/6
+branded/12
+Brandeis/6
+Brandel/6
+Brande/6
+Brandenburg/6
+Branden/6
+brander/165
+Brander/6
+Brandice/6
+Brandie/6
+Brandi/6
+Brandise/6
+brandish/17
+Brand/206
+Brando/6
+Brandon/6
+brand/49
+Brandt/6
+Brandtr/6
+brandy/26
+Brandy/6
+Brandyn/6
+brandywine
+Braniff/6
+Bran/6
+branned
+branning
+Brannon/6
+bran/7
+Brantley/6
+Brant/6
+Braque/6
+brashness/7
+brash/38
+Brasilia
+brasserie/7
+brass/26
+brassiere/7
+brassily
+brassiness/7
+brassy/177
+Bratislava/6
+brat/7
+Brattain/6
+bratty/54
+bratwurst/7
+Braun/6
+bravadoes
+bravado/6
+brave/77
+braveness/7
+bravery/7
+bravest/6
+bravo/17
+bravura/7
+brawler/6
+brawl/49
+brawniness/7
+brawn/7
+brawny/98
+brayer/6
+Bray/6
+bray/31
+braze/23
+brazenness/7
+brazen/22
+brazer/6
+brazier/7
+Brazilian/7
+Brazil/6
+Brazos/6
+Brazzaville/6
+breacher/6
+breach/49
+breadbasket/7
+breadboard/26
+breadbox/9
+breadcrumb/9
+breadfruit/7
+breadline/7
+bread/239
+breadth/6
+breadths
+breadwinner/7
+breakables
+breakable/12
+breakage/7
+breakaway/7
+breakdown/7
+breaker/6
+breakfaster/6
+breakfast/49
+breakfront/9
+breaking/6
+breakneck
+breakout/7
+breakpoint/26
+break/240
+breakthroughs
+breakthrough/7
+breakup/7
+breakwater/7
+bream/17
+Breanne/6
+Brear/6
+breastbone/7
+breastfed
+breastfeed/224
+breasting/6
+breast/26
+breastplate/7
+breaststroke/7
+breastwork/7
+breathable/12
+breathalyser/9
+Breathalyzer/7
+breathe
+breather/6
+breathing/6
+breathlessness/7
+breathless/28
+breaths
+breathtaking/19
+breathy/54
+breath/182
+Brecht/6
+Breckenridge/6
+bred/47
+bredes
+breeching/6
+breech/26
+breeder/45
+breeder's
+breeding/123
+breeds/45
+breed/210
+Bree/6
+Breena/6
+breeze/26
+breezeway/7
+breezily
+breeziness/7
+breezy/98
+Bremen/6
+bremsstrahlung/6
+Brena/6
+Brenda/6
+Brendan/6
+Brenden/6
+Brendin/6
+Brendis/6
+Brendon/6
+Bren/6
+Brenna/6
+Brennan/6
+Brennen/6
+Brenner/6
+Brenn/206
+Brent/6
+Brenton/6
+Bresenham/6
+Brest/6
+brethren
+Bret/6
+Breton
+Brett/6
+breve/7
+brevet/7
+brevetted
+brevetting
+breviary/7
+brevity/7
+brew/23
+brewer/6
+Brewer/6
+brewery/7
+brewing/6
+brewpub/9
+Brew/114
+Brewster/6
+Brezhnev/6
+Bria/6
+Briana/6
+Brian/6
+Brianna/6
+Brianne/6
+Briano/6
+Briant/6
+briar's
+bribe/23
+briber/6
+bribery/7
+Brice/6
+brickbat/7
+brick/111
+bricklayer/7
+bricklaying/7
+brickmason/9
+brickwork/7
+brickyard/6
+bridal/9
+Bridalveil/6
+bridegroom/7
+Bride/6
+bride/7
+bridesmaid/7
+Bridewell/6
+bridgeable/12
+bridged/12
+bridgehead/7
+Bridgeport/6
+Bridger/6
+Bridges
+bridge/26
+Bridget/6
+Bridgetown/6
+Bridgette/6
+Bridgett/6
+Bridgewater/6
+bridgework/7
+bridging/6
+Bridgman/6
+Bridie/6
+bridled/12
+bridle/26
+bridleway/9
+briefcase/7
+briefed/169
+briefing/6
+briefness/7
+briefs/169
+brief/241
+Brien/6
+Brier/6
+brier/7
+Brie/175
+Brietta/6
+brigade/26
+brigadier/7
+Brigadoon
+brigandage/7
+brigand/7
+brigantine/7
+Brigg/7
+Brigham/6
+brightener/6
+brighten/242
+bright/243
+Bright/6
+brightness/7
+Brighton/6
+Brigida/6
+Brigid/6
+Brigit/6
+Brigitta/6
+Brigitte/6
+Brig/6
+brig/7
+brilliance/7
+brilliancy/7
+brilliantine/7
+brilliantness/6
+brilliant/46
+Brillo
+Brillouin/6
+brimful
+brimless
+brimmed
+brimming
+brim/7
+brimstone/7
+Brina/6
+Brindisi/6
+brindle/56
+brine/111
+briner/6
+Briney/6
+bringer/6
+bring/227
+brininess/7
+Brinkley/6
+brinkmanship/7
+brink/7
+Brinna/6
+Brinn/6
+Briny/6
+briny/177
+brioche/7
+Brion/6
+briquet's
+briquette/26
+Brisbane/6
+brisket/7
+briskness/7
+brisk/77
+bristle/26
+bristly/54
+Bristol/6
+bristol/9
+Britain/6
+Brita/6
+Britannia/6
+Britannic
+Britannica/6
+britches
+Briticism/7
+Britisher/6
+Britishly/6
+British/244
+Brit/7
+Britney/6
+Britni/6
+Briton/7
+Britta/6
+Brittaney/6
+Brittani/6
+Brittan/6
+Brittany/7
+Britte/6
+Britten/6
+Britteny/6
+brittleness/7
+brittle/77
+Britt/72
+Brittne/6
+Brittney/6
+Brittni/6
+Brnaba/6
+Brnaby/6
+Brno/6
+broach/31
+broacher/6
+broadband
+broadcaster/6
+broadcast/210
+broadcasts/14
+broadcloth/6
+broadcloths
+broaden/245
+broadleaved
+broadloom/7
+broadminded/42
+broadness/9
+broadsheet/7
+broadside/26
+broadsword/7
+broad/35
+Broadway/7
+Brobdingnagian
+Brobdingnag/6
+brocade/26
+broccoli/7
+brochette/7
+brochure/7
+Brockie/6
+Brock/6
+Brocky/6
+Broddie/6
+Broddy/6
+Broderick/6
+Broderic/6
+Brodie/6
+Brod/6
+Brody/6
+brogan/7
+Broglie/6
+brogue/7
+broiler/6
+broil/23
+brokenhearted/19
+brokenness/7
+broken/28
+brokerage/7
+broker/165
+broke/174
+Brok/6
+bromide/7
+bromidic
+bromine/7
+bronchial
+bronchi/6
+bronchiolar
+bronchiole/7
+bronchiolitis
+bronchitic/9
+bronchitis/7
+broncho's
+bronchus/6
+broncobuster/7
+bronco/7
+bronc/9
+Bron/6
+Bronnie/6
+Bronny/6
+Bronson/6
+Bronte
+brontosaur/7
+brontosaurus/7
+Bronx/6
+bronzed/6
+bronze/111
+bronzing/6
+brooch/7
+brooder/6
+broodiness/6
+brooding/19
+broodmare/7
+brood/49
+broody/98
+Brookdale/6
+Brooke/6
+Brookfield/6
+Brookhaven/6
+brooklet/7
+Brooklyn/6
+Brookmont/6
+brook/26
+brookside
+Brook/7
+broom/26
+broomstick/7
+Bros
+Brose/6
+bro/246
+bros/9
+brothel/7
+brother/247
+brotherhood/7
+brotherliness/7
+brotherly/42
+broths
+broth/231
+brougham/7
+brought
+brouhaha/7
+browbeat/199
+brow/7
+Brownell/6
+Browne/6
+Brownian/6
+Brownie/7
+brownie/80
+browning/6
+Browning/6
+brownish
+Brown/207
+brownness/7
+brownout/7
+brownstone/7
+Brownsville/6
+brown/229
+browse
+browser/6
+brows/23
+brr
+Br/248
+Brubeck/6
+brucellosis/6
+Bruce/6
+Brucie/6
+Bruckner/6
+Bruegel/6
+Brueghel's
+bruin/7
+bruised/12
+bruise/179
+bruiser/6
+Bruis/6
+bruit/17
+Brumidi/6
+Brummel/6
+brunch/26
+Brunei/6
+Brunelleschi/6
+brunet/9
+brunette/7
+Brunhilda/6
+Brunhilde/6
+Bruno/6
+Brunswick/6
+brunt/26
+brusher/6
+brushfire/7
+brushlike
+brush/111
+brushoff/9
+brushwood/7
+brushwork/7
+brushy/164
+brusqueness/7
+brusque/33
+Brussels
+brutality/7
+brutalization/7
+brutalized/12
+brutalizes/13
+brutalize/17
+brutal/19
+brute/111
+brutishness/7
+brutish/28
+Brutus/6
+Bruxelles/6
+Bryana/6
+Bryan/6
+Bryant/6
+Bryanty/6
+Bryce/6
+Bryna/6
+Bryn/6
+Brynna/6
+Brynne/6
+Brynner/6
+Brynn/114
+Bryon/6
+Brzezinski/6
+B's
+BS
+BSA
+BSD
+Btu
+BTU
+BTW
+bu
+bubblegum/9
+bubbler/6
+bubble/111
+bubbly/228
+Buber/6
+bub/7
+buboes
+bubo/6
+bubonic
+buccaneer/26
+Buchanan/6
+Bucharest/6
+Buchenwald/6
+Buchwald/6
+buckaroo/7
+buckboard/7
+bucker/6
+bucketful/7
+bucket/26
+buckeye/7
+buck/111
+buckhorn/6
+Buckie/6
+Buckingham/6
+buckled/12
+buckler/165
+buckle/49
+buckles/12
+Buckley/6
+buckling's
+buckling/12
+Buck/6
+Buckner/6
+buckram/26
+bucksaw/7
+buckshot/7
+buckskin/7
+buckteeth
+bucktooth/170
+buckwheat/7
+Bucky/6
+bucolically
+bucolic/9
+Budapest/6
+budded
+Buddha/7
+Buddhism/7
+Buddhist/7
+Buddie/6
+budding/9
+Budd/6
+buddy/26
+Buddy/6
+budge/17
+budgerigar/7
+budgetary
+budgeter/6
+budget/49
+budgie/7
+budging/12
+Bud/6
+bud/7
+Budweiser/7
+Buehring/6
+Buena/6
+buffaloes
+Buffalo/6
+buffalo/165
+buff/36
+buffered/12
+bufferer/6
+buffer/49
+buffet/171
+bufflehead/6
+buffoonery/7
+buffoonish
+buffoon/7
+buff's
+Buffy/6
+Buford/6
+bugaboo/7
+Bugatti/6
+bugbear/7
+bug/120
+bugeyed
+bugged/169
+buggered
+buggering
+bugger/249
+buggery/6
+bugging/169
+buggy/80
+bugle/49
+bugler/6
+bug's
+Buick/6
+builder/7
+building/7
+build/250
+buildup/7
+built/233
+Buiron/6
+Bujumbura/6
+Bukhara/6
+Bukharin/6
+Bulawayo/6
+Bulba/6
+bulb/26
+bulblet
+bulbous
+Bulfinch/6
+Bulganin/6
+Bulgaria/6
+Bulgarian/9
+bulge/26
+bulgy/54
+bulimarexia/9
+bulimia/7
+bulimic/9
+bulk/111
+bulkhead/56
+bulkiness/7
+bulky/98
+bulldogged
+bulldogger
+bulldogging
+bulldog/7
+bulldoze/23
+bulldozer/6
+bullet/26
+bulletin/26
+bulletproof/17
+bullfighter/6
+bullfighting/6
+bullfight/198
+bullfinch/7
+bullfrog/7
+bullhead/56
+bullheadedness/7
+bullheaded/28
+bullhide
+bullhorn/7
+bullied/6
+bullion/7
+bullishness/7
+bullish/28
+bull/26
+Bullock/6
+bullock/7
+bullpen/7
+bullring/7
+bullseye
+bullshit/30
+bullshitted/251
+bullshitter/252
+bullshitting/251
+bullwhackers
+Bullwinkle/6
+bullyboy/7
+bullying/6
+bully/172
+bulrush/7
+Bultmann/6
+bulwark/26
+bumblebee/7
+bumble/179
+bumbler/6
+bumbling/19
+Bumbry/6
+bummed/6
+bummer/7
+bummest
+bumming/6
+bumper/165
+bump/23
+bumpiness/7
+bumpkin/7
+Bumppo/6
+bumptiousness/7
+bumptious/28
+bumpy/98
+bum/7
+Bunche/6
+bunch/26
+bunchy/54
+buncombe's
+bunco's
+Bundestag/6
+bundled/12
+bundle/111
+bundler/6
+Bundy/6
+bungalow/7
+bungee/7
+bung/26
+bunghole/7
+bungle/23
+bungler/6
+bungling/19
+Bunin/6
+bunion/7
+bunk/253
+Bunker/6
+bunker's/169
+bunker/26
+bunkhouse/7
+bunkmate/7
+bunko's
+bunk's
+bunkum/7
+Bunnie/6
+Bunni/6
+Bunny/6
+bunny/7
+Bunsen/7
+bun/7
+bunt/179
+bunting/6
+Bu�uel/6
+Bunyan/6
+buoyancy/7
+buoyant/19
+buoy/26
+Burbank/6
+burbler/6
+burble/31
+burbs
+Burch/6
+burden's
+burdensomeness/6
+burdensome/28
+burden/180
+burdock/7
+bureaucracy/7
+bureaucratically
+bureaucratic/12
+bureaucratization/7
+bureaucratize/17
+bureaucrat/7
+bureau/7
+burgeon/17
+burger/6
+Burger/6
+Burgess/6
+burgess/7
+burgher/6
+burgh/231
+burghs
+burglarize/17
+burglarproof/17
+burglar/7
+burglary/7
+burgle/17
+burgomaster/7
+Burgoyne/6
+Burg/114
+burg/96
+Burgundian/9
+Burgundy/7
+burgundy/9
+burial/48
+buried/12
+burier/6
+Burke/6
+Burk/7
+burlap/7
+burler/6
+burlesquer/6
+burlesque/254
+burley/6
+Burlie/6
+burliness/7
+Burlingame/6
+Burlington/6
+Burl/6
+burl/111
+burly/98
+Burma/6
+Burmese
+bur/65
+burnable/9
+Burnaby/6
+Burnard/6
+burned/12
+Burne/7
+burner/6
+Burnett/6
+burn/234
+burning/19
+burnisher/6
+burnish/23
+burnoose/7
+burnout/7
+Burns
+Burnside/7
+burnt/28
+burp/26
+burr/111
+Burris/6
+burrito/9
+Burr/6
+burro/7
+Burroughs/6
+burrower/6
+burrow/49
+bursae
+bursa/6
+Bursa/6
+bursar/7
+bursary/7
+bursitis/7
+burster/6
+burst/255
+Burtie/6
+Burt/6
+Burton/6
+Burty/6
+Burundian/9
+Burundi/6
+bury/36
+busboy/7
+busby/7
+Busch/6
+buses/14
+busgirl/9
+bus/171
+bushel/171
+Bushido/6
+bushiness/7
+bushing/6
+bush/211
+bushland
+Bush/6
+bushman/6
+bushmaster/7
+bushmen
+Bushnell/6
+bushwhacker/6
+bushwhacking/6
+bushwhack/23
+bushy/98
+busily
+businesslike
+businessman/6
+businessmen
+business/7
+businesspeople
+businessperson/9
+businesswoman/6
+businesswomen
+busker/6
+busk/256
+buskin/7
+bus's/14
+buss/81
+bustard/7
+buster/6
+bustle/17
+bustling/19
+bust/49
+busty/54
+busybody/7
+busy/226
+busyness/7
+busywork/7
+but/257
+butane/7
+butcherer/6
+butcher/258
+butchery/7
+Butch/6
+butch/110
+butene/6
+Butler/6
+butler/26
+butted/14
+butte/7
+butterball/7
+buttercup/7
+buttered/12
+butterfat/7
+Butterfield/6
+butterfingered
+butterfingers/6
+butterfly/26
+buttermilk/7
+butternut/7
+butter/259
+butterscotch/7
+buttery/228
+butting/6
+buttock/26
+buttoner/6
+buttonhole/111
+buttonholer/6
+button's
+button/180
+buttonweed
+buttonwood/7
+buttress/26
+butt/49
+butyl/6
+butyrate/6
+buxomness/6
+buxom/33
+Buxtehude/6
+buyback/9
+buyer/6
+buyout/9
+buy/227
+buzzard/7
+buzz/49
+buzzer/6
+buzzword/7
+buzzy
+bx
+bxs
+byelaw's
+Byelorussia's
+bye/260
+Byers/6
+bygone/9
+bylaw/7
+byliner/6
+byline/111
+BYOB
+bypass/26
+bypath/6
+bypaths
+byplay/9
+byproduct/7
+Byram/6
+Byran/6
+Byrann/6
+Byrd/6
+byre/7
+Byrle/6
+Byrne/6
+byroad/7
+Byrom/6
+Byronic
+Byronism/6
+Byron/6
+bystander/7
+byte/7
+byway/7
+byword/7
+byzantine
+Byzantine/9
+Byzantium/6
+by/90
+C
+ca
+CA
+cabala/7
+caballed
+caballero/7
+caballing
+cabal/7
+cabana/7
+cabaret/7
+cabbage/26
+cabbed
+cabbing
+cabby's
+cabdriver/7
+caber/6
+Cabernet/6
+cabinetmaker/7
+cabinetmaking/7
+cabinet/7
+cabinetry/7
+cabinetwork/7
+cabin/26
+cablecast/166
+cable/26
+cablegram/7
+cabochon/7
+caboodle/7
+caboose/7
+Cabot/6
+Cabrera/6
+Cabrini/6
+cabriolet/7
+cab/175
+cabstand/7
+cacao/7
+cacciatore
+cache/111
+cachepot/7
+cachet/26
+Cacilia/6
+Cacilie/6
+cackler/6
+cackle/23
+cackly
+CACM
+cacophonist
+cacophonous
+cacophony/7
+cacti
+cactus/6
+CAD
+cadaverous/19
+cadaver/7
+caddishness/7
+caddish/28
+Caddric/6
+caddy/26
+cadence/186
+cadenced
+cadencing
+cadent/169
+cadenza/7
+cadet/7
+Cadette/9
+cadge/23
+cadger/6
+Cadillac/7
+Cadiz/6
+Cad/6
+cadmium/7
+cadre/7
+cad/7
+caducei
+caduceus/6
+Caedmon/6
+Caesar/7
+caesura/7
+cafe/7
+caf�/7
+cafeteria/7
+caffeine/7
+caffeinated
+caftan/7
+caged/12
+Cage/6
+cage/49
+cager/6
+cagey/42
+cagier
+cagiest
+cagily
+caginess/7
+Cagney/6
+Cahokia/6
+cahoot/7
+Cahra/6
+CAI
+Caiaphas/6
+caiman's
+Caine/6
+Cain/7
+Cairistiona/6
+cairn/56
+Cairo/6
+caisson/7
+caitiff/7
+Caitlin/6
+Caitrin/6
+cajole/27
+cajolement/7
+cajoler/6
+cajolery/7
+Cajun/7
+cake/26
+cakewalk/26
+calabash/7
+calaboose/7
+Calais/6
+calamari/9
+calamine/26
+calamitousness/6
+calamitous/28
+calamity/7
+cal/169
+calcareousness/6
+calcareous/28
+calciferous
+calcification/6
+calcify/15
+calcimine/26
+calcine/17
+calcite/7
+calcium/7
+Calcomp/6
+CalComp/6
+CALCOMP/6
+calculability/123
+calculable/261
+calculate/132
+calculated/28
+calculatingly
+calculating/12
+calculation/118
+calculative
+calculator/7
+calculi
+calculus/6
+Calcutta/6
+caldera/7
+Calder/6
+Calderon/6
+caldron's
+Caldwell/6
+Caleb/6
+Caledonia/6
+Cale/6
+calendar/26
+calender/26
+calf/6
+calfskin/7
+Calgary/6
+Calhoun/6
+Caliban/6
+caliber/7
+calibrated/12
+calibrater's
+calibrate/15
+calibrating/14
+calibration/6
+calibrator/7
+calicoes
+calico/6
+Calida/6
+Calif/6
+California/6
+Californian/7
+californium/7
+calif's
+Caligula/6
+Cali/6
+caliper/26
+caliphate/7
+caliph/6
+caliphs
+calisthenic/9
+calisthenics/6
+Callaghan/6
+call/262
+Callahan/6
+calla/7
+Calla/7
+Callao/6
+callback/9
+Callean/6
+called/12
+callee/6
+caller/7
+Calley/6
+Callida/6
+Callie/6
+calligrapher/6
+calligraphic
+calligraphist/7
+calligraph/90
+calligraphy/7
+Calli/6
+calling/7
+Calliope/6
+calliope/7
+callisthenics's
+Callisto/6
+callosity/7
+callousness/7
+callous/22
+callowness/7
+callow/177
+callus/26
+Cally/6
+calming/19
+calmness/7
+calm/77
+Cal/86
+Caloocan/6
+caloric/9
+calorie/7
+calorific
+calorimeter/7
+calorimetric
+calorimetry/6
+Caltech/6
+Calumet/6
+calumet/7
+calumniate/15
+calumniation/6
+calumniator/7
+calumnious
+calumny/7
+calvary/6
+Calvary/6
+calve/17
+Calvert/6
+calves/6
+Calvinism/7
+Calvinistic
+Calvinist/7
+Calvin/6
+Calv/6
+calyces's
+Calypso/6
+calypso/7
+calyx/7
+Ca/6
+CAM
+Camacho/6
+Camala/6
+camaraderie/7
+camber/26
+cambial
+cambium/7
+Cambodia/6
+Cambodian/9
+Cambrian/9
+cambric/7
+Cambridge/6
+camcorder/9
+Camden/6
+camelhair's
+Camella/6
+Camellia/6
+camellia/7
+Camel/6
+Camelopardalis/6
+Camelot/6
+camel/7
+Camembert/7
+cameo/26
+camerae
+cameraman/6
+cameramen
+camera/7
+camerawoman
+camerawomen
+Cameron/6
+Cameroonian/9
+Cameroon/7
+came/122
+Camey/6
+Camila/6
+Camile/6
+Camilla/6
+Camille/6
+Cami/6
+Camino/6
+camion/6
+camisole/7
+Cam/6
+cammed
+Cammie/6
+Cammi/6
+cam/7
+Cammy/6
+Camoens/6
+camomile's
+camouflage/49
+camouflager/6
+campaigner/6
+campaign/49
+campanile/7
+campanological
+campanologist/7
+campanology/7
+Campbell/6
+Campbellsport/6
+camper/7
+campesinos
+campest
+campfire/7
+campground/7
+camphor/7
+Campinas/6
+camping/9
+Campos
+camp's
+camp/263
+campsite/7
+campus/26
+campy/54
+Camry/6
+camshaft/7
+Camus/6
+Canaanite/7
+Canaan/6
+Canada/6
+Canadianism/7
+Canadian/9
+Canad/6
+Canaletto/6
+canalization/7
+canalize/17
+canal/26
+canap�/9
+canard/7
+Canaries
+canary/7
+canasta/7
+Canaveral/6
+Canberra/6
+cancan/7
+cancelate/81
+canceled/12
+canceler/6
+cancellation/7
+cancel/23
+cancer/7
+Cancer/7
+cancerous/19
+Cancun/6
+Candace/6
+candelabra/9
+candelabrum/6
+Candice/6
+candidacy/7
+Candida/6
+candidate/7
+candidature/9
+Candide/6
+candidly/12
+candidness/7
+candid/38
+Candie/6
+Candi/7
+candle/49
+candlelight/175
+candlelit
+candlepower/7
+candler/6
+candlestick/7
+Candlewick/6
+candlewick/7
+candor/7
+Candra/6
+candy/26
+Candy/6
+canebrake/7
+caner/6
+cane/7
+canine/9
+caning/6
+Canis/6
+canister/26
+cankerous
+canker/26
+Can/6
+can/91
+cannabis/7
+canned
+cannelloni
+canner/7
+cannery/7
+Cannes
+cannibalism/7
+cannibalistic
+cannibalization/7
+cannibalize/17
+cannibal/7
+cannily/12
+canninesses
+canniness/135
+canning/6
+cannister/7
+cannonade/26
+cannonball/26
+Cannon/6
+cannon/26
+cannot
+canny/264
+canoe/56
+canoeing/9
+canoeist/7
+Canoga/6
+canonic
+canonicalization
+canonicalize/17
+canonical/16
+canonist/6
+canonization/7
+canonized/12
+canonize/17
+canon/7
+Canopus/6
+canopy/26
+canst
+can't
+cantabile/9
+Cantabrigian
+cantaloupe/7
+cantankerousness/7
+cantankerous/28
+cantata/7
+cant/265
+canted/58
+canteen/7
+Canterbury/6
+canter/266
+cantered
+cantering
+canticle/7
+cantilever/26
+canto/7
+cantonal
+Cantonese/6
+Canton/6
+cantonment/7
+canton/267
+Cantor/6
+cantor/7
+Cantrell/6
+cant's
+cants/14
+Cantu/6
+Canute/6
+canvasback/7
+canvas/111
+canvasser/6
+canvass/23
+canyon/7
+CAP
+capability/43
+capableness/123
+capable/261
+capabler
+capablest
+capably/45
+capaciousness/7
+capacious/28
+capacitance/7
+capacitate/130
+capacitive/19
+capacitor/7
+capacity/43
+caparison/26
+Capek/6
+Capella/6
+caper/165
+capeskin/7
+cape/7
+Capet/6
+Capetown/6
+Caph/6
+capillarity/7
+capillary/9
+Capistrano/6
+capitalism/7
+capitalistic
+capitalistically
+capitalist/7
+capitalization/48
+capitalized/13
+capitalizer/6
+capitalize/23
+capitalizes/14
+capital/65
+capita/6
+Capitan/6
+capitation/186
+Capitoline/6
+Capitol/7
+capitol/7
+capitulate/132
+capitulation/118
+caplet/9
+cap/268
+Capone/6
+capon/7
+capo/7
+Capote/6
+capped/13
+capping/6
+cappuccino/7
+Cappy/6
+Capra/6
+Caprice/6
+caprice/7
+capriciousness/7
+capricious/28
+Capricorn/7
+Capri/6
+caps/13
+capsicum/7
+capsize/17
+capstan/7
+capstone/7
+capsular
+capsule/26
+capsulize/17
+captaincy/7
+captain/26
+caption/111
+captiousness/7
+captious/28
+captivate/15
+captivation/6
+captivator/7
+captive/7
+captivity/7
+Capt/6
+captor/7
+capture/36
+capturer/7
+capt/130
+Capulet/6
+Caputo/6
+Caracalla/6
+Caracas/6
+caracul's
+carafe/7
+Caralie/6
+Cara/6
+caramelize/17
+caramel/7
+carapace/7
+carapaxes
+carat/7
+Caravaggio/6
+caravan/111
+caravaner/6
+caravansary/7
+caravanserai's
+caravel/7
+caraway/7
+carbide/7
+carbine/7
+carbohydrate/7
+carbolic
+Carboloy/6
+carbonaceous
+carbonate/269
+carbonation/6
+Carbondale/6
+Carbone/7
+carbonic
+carboniferous
+Carboniferous
+carbonization/48
+carbonizer/63
+carbonizer's
+carbonizes/14
+carbonize/23
+carbon/7
+carbonyl/6
+carborundum
+Carborundum/7
+carboy/7
+carbuncle/56
+carbuncular
+carburetor/7
+carburetter/9
+carburettor/7
+carcase/7
+carcass/7
+Carce/6
+carcinogenic
+carcinogenicity/7
+carcinogen/7
+carcinoma/7
+cardamom/7
+cardboard/7
+card/137
+Cardenas/6
+carder/7
+carder's/25
+cardholders
+cardiac/9
+Cardiff/6
+cardigan/7
+cardinality/7
+cardinal/65
+carding/6
+Cardin/6
+Cardiod/6
+cardiogram/7
+cardiograph/6
+cardiographs
+cardioid/6
+cardiologist/7
+cardiology/7
+cardiomegaly/6
+cardiopulmonary
+cardiovascular
+card's
+cardsharp/96
+CARE
+cared/12
+careen/17
+careerism/6
+careerist/7
+career/111
+carefree
+carefuller
+carefullest
+carefulness/7
+careful/28
+caregiver/9
+carelessness/7
+careless/28
+Care/6
+Carena/6
+Caren/6
+carer/6
+care/9
+Caresa/6
+Caressa/6
+Caresse/6
+caresser/6
+caressing/19
+caressive/19
+caress/152
+caretaker/7
+caret/7
+careworn
+Carey/6
+carfare/7
+cargoes
+cargo/6
+carhopped
+carhopping
+carhop/7
+Caria/6
+Caribbean/9
+Carib/6
+caribou/7
+caricature/26
+caricaturisation
+caricaturist/7
+caricaturization
+Carie/6
+caries/6
+carillonned
+carillonning
+carillon/7
+Caril/6
+Carilyn/6
+Cari/6
+Carina/6
+Carine/6
+caring/12
+Carin/6
+Cariotta/6
+carious
+Carissa/6
+Carita/6
+Caritta/6
+carjack/179
+Carla/6
+Carlee/6
+Carleen/6
+Carlene/6
+Carlen/6
+Carletonian/6
+Carleton/6
+Carley/6
+Carlie/6
+Carlina/6
+Carline/6
+Carling/6
+Carlin/6
+Carlita/6
+Carl/270
+carload/131
+Carlo/7
+Carlota/6
+Carlotta/6
+Carlsbad/6
+Carlson/6
+Carlton/6
+Carlye/6
+Carlyle/6
+Carly/6
+Carlyn/6
+Carlynne/6
+Carlynn/6
+Carma/6
+Carmela/6
+Carmelia/6
+Carmelina/6
+Carmelita/6
+Carmella/6
+Carmelle/6
+Carmel/6
+Carmelo/6
+Carmencita/6
+Carmen/6
+Carmichael/6
+Carmina/6
+Carmine/6
+carmine/7
+Carmita/6
+Car/238
+Carmon/6
+carnage/7
+carnality/7
+carnal/19
+Carnap/6
+carnation/43
+Carnegie/6
+carnelian/7
+Carney/6
+carney's
+carnival/7
+carnivore/7
+carnivorousness/7
+carnivorous/28
+Carnot/6
+Carny/6
+carny/17
+carob/7
+Carola/6
+Carolan/6
+Carolann/6
+Carolee/6
+Carole/6
+caroler/6
+Carolina/7
+Caroline/6
+Carolingian
+Carolinian/9
+Carolin/6
+Caroljean/6
+Carol/6
+carol/49
+Carolus/6
+Carolyne/6
+Carolyn/6
+Carolynn/6
+Caro/6
+carom/26
+Caron/6
+carotene/7
+carotid/7
+carousal/7
+carousel/7
+carouser/6
+carouse/23
+carpal/7
+Carpathian/7
+carpel/7
+carpenter/26
+carpentering/6
+Carpenter/6
+carpentry/7
+carper/6
+carpetbagged
+carpetbagger/7
+carpetbagging
+carpetbag/7
+carpeting/6
+carpet/171
+carpi/6
+carping/19
+carp/49
+carpool/17
+carport/7
+carpus/6
+carrageen/6
+Carree/6
+carrel/7
+carriage/7
+carriageway/7
+Carrie/6
+carrier/6
+Carrier/6
+Carrillo/6
+Carri/6
+carrion/7
+Carrissa/6
+Carr/6
+Carroll/6
+Carrol/6
+carrot/7
+carroty/54
+carrousel's
+carryall/7
+Carry/114
+carryout/9
+carryover/9
+carry/23
+carsickness/7
+carsick/42
+Carson/6
+cartage/7
+cartel/7
+carte/6
+carter/6
+Carter/6
+Cartesian
+Carthage/6
+Carthaginian/9
+carthorse/7
+Cartier/6
+cartilage/7
+cartilaginous
+cartload/7
+cart/49
+Cart/114
+cartographer/7
+cartographic
+cartography/7
+carton/26
+cartoon/26
+cartoonist/7
+cartridge/7
+cartwheel/111
+Cartwright/6
+Carty/114
+Caruso/6
+carve/179
+carven
+carver/6
+Carver/6
+carving/6
+caryatid/7
+Caryl/6
+Cary/6
+Caryn/6
+car/49
+casaba/7
+Casablanca/6
+Casals/6
+Casandra/6
+Casanova/7
+Casar/6
+casbah/6
+cascade/26
+Cascades/6
+cascara/7
+casebook/7
+case/271
+cased/12
+caseharden/17
+casein/7
+caseload/7
+Case/6
+casement/7
+caseworker/6
+casework/96
+Casey/6
+cashbook/7
+cashew/7
+cash/49
+cashier/26
+cashless
+Cash/6
+cashmere/7
+Casie/6
+Casi/6
+casing/6
+casino/7
+casket/26
+cask/26
+Caspar/6
+Casper/6
+Caspian
+Cass
+Cassandra/7
+Cassandre/6
+Cassandry/6
+Cassatt/6
+Cassaundra/6
+cassava/7
+casserole/26
+cassette/7
+Cassey/6
+cassia/7
+Cassie/6
+Cassi/6
+cassino's
+Cassiopeia/6
+Cassite/6
+Cassius/6
+cassock/56
+Cassondra/6
+cassowary/7
+Cassy/6
+Castaneda/6
+castanet/7
+castaway/7
+castellated
+caste/216
+caster/6
+cast/91
+castigate/15
+castigation/6
+castigator/7
+Castile's
+Castillo/6
+casting/6
+castle/26
+castoff/9
+Castor/6
+castor's
+castrate/15
+castration/6
+Castries/6
+Castro/6
+casts/14
+casualness/7
+casual/46
+casualty/7
+casuistic
+casuist/7
+casuistry/7
+cataclysmal
+cataclysmic
+cataclysm/7
+catacomb/7
+catafalque/7
+Catalan/7
+catalepsy/7
+cataleptic/9
+Catalina/6
+cataloger/6
+catalog/49
+Catalonia/6
+catalpa/7
+catalysis/6
+catalyst/7
+catalytic
+catalytically
+catalyze/17
+catamaran/7
+catapult/26
+cataract/7
+Catarina/6
+catarrh/6
+catarrhs
+catastrophe/7
+catastrophic
+catastrophically
+catatonia/7
+catatonic/9
+Catawba/6
+catbird/7
+catboat/7
+catcall/26
+catchable/12
+catchall/7
+catch/272
+catcher/6
+catchment/7
+catchpenny/9
+catchphrase/9
+catchup/7
+catchword/7
+catchy/54
+catechism/7
+catechist/7
+catechize/17
+catecholamine/7
+categoric
+categorical/19
+categorization/7
+categorized/13
+categorize/23
+category/7
+Cate/6
+catenate/273
+catenation/274
+catercorner
+caterer/6
+cater/242
+Caterina/6
+catering/6
+Caterpillar
+caterpillar/7
+caterwaul/17
+catfish/7
+catgut/7
+Catha/6
+Catharina/6
+Catharine/6
+catharses
+catharsis/6
+cathartic/9
+Cathay/6
+cathedral/7
+Cathee/6
+Catherina/6
+Catherine/6
+Catherin/6
+Cather/6
+Cathe/114
+catheterize/17
+catheter/7
+Cathie/6
+Cathi/6
+Cathleen/6
+Cathlene/6
+cathode/7
+cathodic
+catholicism
+Catholicism/7
+catholicity/7
+catholic/7
+Catholic/9
+Cathrine/6
+Cathrin/6
+Cathryn/6
+Cathyleen/6
+Cathy/6
+Catie/6
+Catiline/6
+Cati/6
+Catina/6
+cationic
+cation/7
+catkin/7
+Catlaina/6
+Catlee/6
+catlike
+Catlin/6
+catnapped
+catnapping
+catnap/7
+catnip/7
+Cato/6
+Catrina/6
+Catriona/6
+Catskill/7
+cat/96
+catsup's
+cattail/7
+catted
+cattery/6
+cattily
+cattiness/7
+catting
+cattle/6
+cattleman/6
+cattlemen
+Catt/6
+catty/177
+Catullus/6
+CATV
+catwalk/7
+Caty/6
+Caucasian/9
+Caucasoid/9
+Caucasus/6
+Cauchy/6
+caucus/26
+caudal/19
+caught/12
+cauldron/7
+cauliflower/7
+caulker/6
+caulk/179
+causality/7
+causal/16
+causate/129
+causation/6
+causative/16
+cause/49
+caused/12
+causeless
+causerie/7
+causer/6
+causeway/26
+caustically
+causticity/7
+caustic/16
+cauterization/7
+cauterized/12
+cauterize/17
+cautionary
+cautioner/6
+caution/91
+cautiousness's/45
+cautiousness/7
+cautious/68
+cavalcade/7
+cavalierness/6
+cavalier/22
+cavalryman/6
+cavalrymen
+cavalry/7
+caveat/7
+caveatted
+caveatting
+cave/275
+caveman/6
+cavemen
+Cavendish/6
+caver/6
+cavern/26
+cavernous/19
+cave's
+caviar/7
+caviler/6
+cavil/179
+caving/7
+cavity/276
+cavort/17
+Cavour/6
+caw/26
+Caxton/6
+Caye/6
+Cayenne/6
+cayenne/7
+Cayla/6
+Cayman/6
+cayman/7
+cay's
+cay/120
+Cayuga/6
+cayuse/7
+Caz/6
+Cazzie/6
+c/277
+CB
+CBC
+Cb/6
+CBS
+cc
+Cchaddie/6
+CCTV
+CCU
+CD
+CDC/6
+Cd/6
+CDT
+Ce
+cease/263
+ceasefire/9
+ceaselessness/7
+ceaseless/28
+ceasing/12
+Ceausescu/6
+Cebuano/6
+Cebu/6
+ceca
+cecal
+Cecelia/6
+Cece/6
+Cecile/6
+Ceciley/6
+Cecilia/6
+Cecilio/6
+Cecilius/6
+Cecilla/6
+Cecil/6
+Cecily/6
+cecum/6
+cedar/7
+ceded/14
+cede/275
+ceder's/278
+ceder/7
+cedes/14
+cedilla/7
+ceding/14
+Ced/6
+Cedric/6
+ceilidh/6
+ceiling/56
+Ceil/6
+celandine/7
+Celanese/6
+Celebes's
+celebrant/7
+celebratedness/6
+celebrated/42
+celebrate/15
+celebration/6
+celebrator/7
+celebratory
+celebrity/7
+Cele/6
+Celene/6
+celerity/7
+celery/7
+Celesta/6
+celesta/7
+Celeste/6
+celestial/16
+Celestia/6
+Celestina/6
+Celestine/6
+Celestyna/6
+Celestyn/6
+Celia/6
+celibacy/7
+celibate/7
+Celie/6
+Celina/6
+Celinda/6
+Celine/6
+Celinka/6
+Celisse/6
+Celka/6
+cellarer/6
+cellar/111
+Celle/6
+cell/26
+Cellini/6
+cellist/7
+Cello/6
+cello/7
+cellophane/7
+cellphone/9
+cellular/16
+cellulite/9
+celluloid/7
+cellulose/7
+Celsius/9
+Celtic/7
+Celt/7
+cementa
+cementer/6
+cementum/7
+cement/49
+cemetery/7
+cenobite/7
+cenobitic
+cenotaph/6
+cenotaphs
+Cenozoic
+censer/7
+censored/12
+censor/26
+censorial
+censoriousness/7
+censorious/28
+censorship/7
+censure/66
+censurer/6
+census/26
+centaur/7
+Centaurus/6
+centavo/7
+centenarian/7
+centenary/9
+centennial/16
+center/190
+centerboard/7
+centered
+centerer/9
+centerfold/9
+centering/7
+centerline/7
+centerpiece/7
+center's
+Centigrade
+centigrade/9
+centigram/7
+centiliter/7
+centime/7
+centimeter/7
+centipede/7
+Centralia/6
+centralism/6
+centralist/6
+centrality/7
+centralization/279
+centralize/263
+centralizer/7
+centralizes/14
+central/280
+centrefold's
+Centrex
+CENTREX/6
+centric/278
+centrifugal/16
+centrifugate/72
+centrifugation/6
+centrifuge/26
+centripetal/19
+centrist/7
+centroid/7
+cent/96
+centurion/7
+century/7
+CEO
+cephalic/9
+Cepheid
+Cepheus/6
+ceramicist/9
+ceramic/7
+ceramist/7
+cerate/170
+Cerberus/6
+cereal/7
+cerebellar
+cerebellum/7
+cerebra
+cerebral/16
+cerebrate/15
+cerebration/6
+cerebrum/7
+cerement/7
+ceremonial/46
+ceremoniousness/7
+ceremoniousness's/12
+ceremonious/161
+ceremony/7
+Cerenkov/6
+Ceres/6
+Cerf/6
+cerise/7
+cerium/7
+cermet/7
+CERN/6
+certainer
+certainest
+certainty/41
+certain/10
+cert/281
+certifiable
+certifiably
+certificate/26
+certification/104
+certified/12
+certifier/6
+certify/115
+certiorari/6
+certitude/43
+cerulean/7
+Cervantes/6
+cervical
+cervices/6
+cervix/6
+Cesarean
+cesarean/9
+Cesare/6
+Cesar/6
+Cesaro/6
+cesium/7
+cessation/7
+cession/282
+Cessna/6
+cesspit/6
+cesspool/7
+Cesya/6
+cetacean/9
+cetera/9
+Cetus/6
+Ceylonese
+Ceylon/6
+Cezanne/9
+cf
+CF
+CFC
+Cf/6
+CFO
+cg
+Chablis/7
+Chaddie/6
+Chadd/6
+Chaddy/6
+Chadian/9
+Chad/6
+Chadwick/6
+chafe/31
+chafer/6
+chaffer/52
+chafferer/6
+Chaffey/6
+chaff/111
+chaffinch/7
+Chagall/6
+chagrin/26
+Chaim/6
+chainlike
+chain's
+chainsaw/17
+chain/180
+chairlady/6
+chairlift/7
+chairman/26
+chairmanship/7
+chairmen
+chairperson/7
+chair/26
+chairwoman/6
+chairwomen
+chaise/7
+chalcedony/7
+Chaldea/6
+Chaldean/6
+chalet/7
+chalice/56
+chalkboard/7
+chalk/26
+chalkiness/9
+chalkline
+chalky/98
+challenged/12
+challenger/6
+challenge/23
+challenging/19
+challis/7
+Chalmers
+chamberer/6
+Chamberlain/6
+chamberlain/7
+chambermaid/7
+chamberpot/9
+Chambers/6
+chamber/49
+chambray/7
+chameleon/7
+chamfer/26
+chammy's
+chamois/26
+chamomile/7
+champagne/7
+champaign/6
+champ/121
+champion/26
+championship/7
+Champlain/6
+chanced/6
+chance/111
+chancellery/7
+chancellorship/7
+chancellor/7
+Chancellorsville/6
+chancel/7
+Chance/6
+chancery/7
+Chancey/6
+chanciness/9
+chancing/6
+chancre/7
+chancy/98
+Chandal/6
+Chanda/6
+chandelier/7
+Chandigarh/6
+Chandler/6
+chandler/7
+Chandragupta/6
+Chandra/6
+Chandrasekhar/6
+Chandy/6
+Chanel/6
+Chane/6
+Chaney/6
+Changchun/6
+changeabilities
+changeability/135
+changeableness/7
+changeable/12
+changeably/12
+changed/12
+change/23
+changeless
+changeling/6
+changeover/7
+changer/6
+changing/12
+Chang/6
+Changsha/6
+Chan/6
+Channa/6
+channeler/6
+channeling/6
+channelization/7
+channelize/17
+channellings
+channel/49
+Channing/6
+chanson/7
+Chantalle/6
+Chantal/6
+chanter/6
+chanteuse/7
+chantey/7
+chanticleer/7
+Chantilly/6
+chantry/7
+chant/91
+chanty's
+Chanukah's
+Chao/6
+chaos/7
+chaotic
+chaotically
+chaparral/7
+chapbook/7
+chapeau/7
+chapel/7
+chaperonage/7
+chaperoned/12
+chaperone's
+chaperon/26
+chaplaincy/7
+chaplain/7
+chaplet/7
+Chaplin/6
+Chapman/6
+chap/7
+Chappaquiddick/6
+chapped
+chapping
+chapter/26
+Chara
+charabanc/7
+characterful
+characteristically/12
+characteristic/7
+characterizable/7
+characterization/7
+characterize/67
+characterized/12
+characterizer/6
+characterless
+character/26
+charade/7
+charbroil/17
+charcoal/26
+Chardonnay
+chardonnay/9
+chard/7
+chargeableness/6
+chargeable/42
+charged/12
+charge/153
+charger/154
+chargers
+char/166
+Charil/6
+charily
+chariness/7
+Charin/6
+charioteer/26
+Chariot/6
+chariot/26
+Charis
+charisma/6
+charismata
+charismatically
+charismatic/9
+Charissa/6
+Charisse/6
+charitablenesses
+charitableness/135
+charitable/236
+charitably/12
+Charita/6
+Charity/6
+charity/7
+charlady/6
+Charla/6
+charlatanism/7
+charlatanry/7
+charlatan/7
+Charlean/6
+Charleen/6
+Charlemagne/6
+Charlena/6
+Charlene/6
+Charles/6
+Charleston/7
+Charley/6
+Charlie/6
+Charline/6
+Charlot/6
+Charlotta/6
+Charlotte/6
+Charlottesville/6
+Charlottetown/6
+Charlton/6
+Charmaine/6
+Charmain/6
+Charmane/6
+charmer/6
+Charmian/6
+Charmine/6
+charming/93
+Charmin/6
+Charmion/6
+charmless
+charm/49
+Charolais
+Charo/6
+Charon/6
+charred
+charring
+charted/12
+charter/36
+chartered/12
+charterer/7
+charter's
+chartist/7
+Chartres/6
+chartreuse/7
+chartroom/9
+chart/182
+charwoman/6
+charwomen
+Charybdis/6
+Charyl/6
+chary/98
+Chas
+chase/23
+Chase/6
+chaser/6
+chasing/6
+Chasity/6
+chasm/7
+chassis/6
+chastely
+chasteness/7
+chasten/17
+chaste/283
+chastisement/7
+chastiser/6
+chastise/27
+Chastity/6
+chastity/7
+chastity's/12
+chasuble/7
+Chateaubriand
+ch�teau/6
+chateaus
+ch�teaux
+ch�telaine/7
+chat/7
+Chattahoochee/6
+Chattanooga/6
+chatted
+chattel/7
+chatterbox/7
+chatterer/6
+Chatterley/6
+chatter/284
+Chatterton/6
+chattily
+chattiness/7
+chatting
+chatty/98
+Chaucer/6
+chauffeur/26
+Chaunce/6
+Chauncey/6
+Chautauqua/6
+chauvinism/7
+chauvinistic
+chauvinistically
+chauvinist/7
+Chavez/6
+chaw
+Chayefsky/6
+cheapen/47
+cheapish
+cheapness/7
+cheapskate/7
+cheap/35
+cheater/6
+cheat/23
+Chechen/6
+Chechnya/6
+checkable/12
+checkbook/7
+checked/13
+checkerboard/7
+checker/165
+check/66
+checklist/9
+checkmate/26
+checkoff/7
+checkout/9
+checkpoint/7
+checkroom/7
+check's/14
+checks/14
+checksummed
+checksumming
+checksum/7
+checkup/7
+Cheddar/7
+cheddar/9
+cheekbone/7
+cheek/26
+cheekily
+cheekiness/7
+cheeky/98
+cheep/26
+cheerer/6
+cheerfuller
+cheerfullest
+cheerfulness/7
+cheerful/28
+cheerily
+cheeriness/7
+cheerio/9
+Cheerios/6
+cheerleader/7
+cheerlessness/7
+cheerless/28
+cheers/9
+cheery/98
+cheer/284
+cheeseburger/7
+cheesecake/7
+cheesecloth/6
+cheesecloths
+cheeseparing/9
+cheese/26
+cheesiness/7
+cheesy/98
+cheetah/6
+cheetahs
+Cheeto/6
+Cheever/6
+cheffed
+cheffing
+chef/7
+Chekhov/6
+chelate/285
+chelation/6
+Chelsae/6
+Chelsea/6
+Chelsey/6
+Chelsie/6
+Chelsy/6
+Chelyabinsk/6
+chem
+Che/6
+chemic
+chemical/65
+chemiluminescence/6
+chemiluminescent
+chemise/7
+chemistry/7
+chemist/7
+chemotherapeutic/9
+chemotherapy/7
+chemurgy/7
+Chengdu
+Cheng/6
+chenille/7
+Chen/6
+Cheops/6
+Chere/6
+Cherey/6
+Cherianne/6
+Cherice/6
+Cherida/6
+Cherie/6
+Cherilyn/6
+Cherilynn/6
+Cheri/6
+Cherin/6
+Cherise/6
+cherisher/6
+cherish/31
+Cherish/6
+Cheriton/6
+Cherlyn/6
+Cher/6
+Chernenko/6
+Chernobyl/6
+Cherokee/7
+cheroot/7
+Cherri/6
+Cherrita/6
+Cherry/6
+cherry/7
+chert/7
+cherubic
+cherubim/9
+cherub/7
+chervil/7
+Cherye/6
+Cheryl/6
+Chery/6
+Chesapeake/6
+Cheshire/6
+Cheslie/6
+chessboard/7
+chessman/6
+chessmen
+chess/7
+Chesterfield/6
+chesterfield/7
+Chester/6
+Chesterton/6
+chestful/9
+chest/286
+chestnut/7
+Cheston/6
+chesty/54
+Chet/6
+Chevalier/6
+chevalier/7
+Cheviot/6
+cheviot/9
+Chev/6
+Chevrolet/6
+chevron/56
+Chevy/6
+chewer/6
+chew/23
+chewiness/9
+chewy/98
+Cheyenne/7
+chg
+chge
+Chiang/6
+chianti/6
+Chianti/9
+chiaroscuro/7
+Chiarra/6
+Chiba/6
+Chicagoan/7
+Chicago/6
+Chicana/7
+chicane/26
+chicanery/7
+Chicano/7
+chichi/228
+chickadee/7
+Chickasaw/7
+chickenfeed
+chicken/165
+chickenhearted
+chickenpox/7
+Chickie/6
+Chick/6
+chickpea/7
+chickweed/7
+chick/99
+Chicky/6
+chicle/7
+Chic/6
+chicness/9
+Chico/6
+chicory/7
+chic/38
+chide/17
+chiding/19
+chiefdom/7
+chieftain/7
+chief/287
+chiffonier/7
+chiffon/7
+chigger/7
+chignon/7
+Chihuahua/7
+chihuahua/9
+chilblain/7
+childbearing/7
+childbirth/6
+childbirths
+childcare/9
+childes
+child/247
+childhood/7
+childishness/7
+childish/28
+childlessness/7
+childless/42
+childlikeness/6
+childlike/42
+childminders
+childproof/17
+childrearing
+children/6
+Chilean/9
+Chile/7
+chile's
+chilies
+chili/6
+chiller/6
+chilliness/7
+chilling/19
+chilli's
+chill/288
+chillness/7
+chilly/177
+Chilton/6
+Chi/6
+chimaera's
+chimaerical
+Chimborazo/6
+chime/49
+Chimera/9
+chimera/7
+chimeric
+chimerical
+chimer/6
+Chimiques
+chimney/56
+chimpanzee/7
+chimp/7
+chi/7
+Chimu/6
+Ch'in
+China/6
+Chinaman/6
+Chinamen
+china/7
+Chinatown/7
+chinchilla/7
+chine/7
+Chinese/6
+Ching/6
+chink/26
+chinless
+Chin/6
+chinned
+chinner/9
+chinning
+chino/7
+Chinook/7
+chin/26
+chinstrap/9
+chintz/7
+chintzy/54
+chipboard/6
+Chipewyan/6
+Chip/6
+chipmunk/7
+chipped
+Chippendale/6
+chipper/17
+Chippewa/7
+chipping/7
+chip/7
+Chiquia/6
+Chiquita/6
+chiral
+Chirico/6
+chirography/7
+chiropodist/7
+chiropody/7
+chiropractic/7
+chiropractor/7
+chirp/17
+chirpy/54
+chirrup/17
+chiseler/6
+chisel/91
+Chisholm/6
+Chisinau/6
+chitchat/7
+chitchatted
+chitchatting
+chitinous
+chitin/7
+chit/7
+Chittagong/6
+chitterlings
+chivalric
+chivalrously/12
+chivalrousness/7
+chivalrous/28
+chivalry/7
+chive/26
+chivvy/81
+chivying
+chlamydiae
+chlamydia/9
+Chloe/6
+Chloette/6
+Chlo/6
+chloral/7
+chlorate/6
+chlordane/7
+chloride/7
+chlorinated/169
+chlorinates/169
+chlorinate/15
+chlorination/6
+chlorine/7
+Chloris
+chlorofluorocarbon/9
+chloroform/26
+chlorophyll/7
+chloroplast/7
+chloroquine/6
+chm
+Ch/289
+chockablock
+chock/111
+chocoholic/9
+chocolate/7
+chocolaty
+Choctaw/7
+choiceness/6
+choice/290
+choirboy/7
+choirmaster/7
+choir/26
+chokeberry/6
+chokecherry/7
+choke/23
+choker/6
+chokes/6
+choking/19
+cholera/7
+choleric
+choler/7
+cholesterol/7
+choline/6
+cholinesterase/6
+chomp/17
+Chomsky/6
+Chongqing
+choose/227
+chooser/6
+choosiness/9
+choosy/98
+chophouse/7
+Chopin/6
+chopped
+chopper/26
+choppily
+choppiness/7
+chopping
+choppy/98
+chop/9
+chopstick/7
+chorale/7
+choral/16
+chordal
+chordata
+chordate/7
+chording/6
+chord/26
+chorea/7
+chore/291
+choreographer/6
+choreographic
+choreographically
+choreographs
+choreography/7
+choreograph/242
+chorines
+chorion/6
+chorister/7
+choroid/9
+chortler/6
+chortle/23
+chorus/26
+chosen/12
+chose/9
+Chou/6
+chowder/26
+chow/26
+Chretien/6
+Chris/6
+chrism/7
+chrissake
+Chrisse/6
+Chrissie/6
+Chrissy/6
+Christabella/6
+Christabel/6
+Christalle/6
+Christal/6
+Christa/6
+Christan/6
+Christchurch/6
+Christean/6
+Christel/6
+Christendom/7
+christened/12
+christening/7
+Christen/6
+christen/36
+Christensen/6
+Christenson/6
+Christiana/6
+Christiane/6
+Christianity/7
+Christianize/17
+Christian/7
+Christiano/6
+Christiansen/6
+Christians/122
+Christie/7
+Christi/6
+Christina/6
+Christine/6
+Christin/6
+Christlike
+Christmas/7
+Christmastide/7
+Christmastime/9
+Christoffel/6
+Christoffer/6
+Christoforo/6
+Christoper/6
+Christophe/6
+Christopher/6
+Christoph/114
+Christophorus/6
+Christos/6
+Christ/125
+Christye/6
+Christyna/6
+Christy's
+Chrisy/6
+chroma/6
+chromate/6
+chromatically
+chromaticism/6
+chromaticness/6
+chromatic/144
+chromatics/6
+chromatin/7
+chromatogram/7
+chromatograph
+chromatographic
+chromatography/6
+chrome/26
+chromic
+chromite/6
+chromium/7
+chromosomal
+chromosome/7
+chromosphere/6
+chronically
+chronicled/12
+chronicler/6
+chronicle/49
+chronic/9
+chronograph/6
+chronographs
+chronography
+chronological/19
+chronologist/7
+chronology/7
+chronometer/7
+chronometric
+Chrotoem/6
+chrysalids
+chrysalis/7
+Chrysa/6
+chrysanthemum/7
+Chrysler/6
+Chrysostom/6
+Chrystal/6
+Chrystel/6
+Chryste/6
+chubbiness/7
+chubby/98
+chub/7
+Chucho/6
+chuck/26
+chuckhole/7
+chuckle/17
+chuckling/19
+Chuck/6
+chuff/170
+chugged
+chugging
+chug/7
+Chukchi/6
+chukka/9
+Chumash/6
+chummed
+chummily
+chumminess/7
+chumming
+chum/7
+chummy/177
+chumping/6
+chump/26
+Chungking's
+Chung/6
+chunkiness/7
+chunk/26
+chunky/98
+chuntering
+churchgoer/7
+churchgoing/7
+Churchillian
+Churchill/6
+churchliness/6
+churchly/42
+churchman/6
+church/116
+churchmen
+Church/7
+churchwarden/7
+churchwoman/6
+churchwomen
+churchyard/7
+churlishness/7
+churlish/28
+churl/7
+churner/6
+churning/6
+churn/49
+chute/26
+chutney/7
+chutzpah/6
+chutzpahs
+chutzpa/7
+Chuvash/6
+ch/146
+chyme/7
+Ci
+CIA
+ciao/9
+cicada/7
+cicatrice/9
+cicatrix's
+Cicely/6
+Cicero/6
+cicerone/7
+ciceroni
+Ciceronian
+Cicily/6
+CID
+cider's/169
+cider/7
+Cid/6
+Ciel/6
+cigarette/7
+cigarillo/7
+cigar/7
+cilantro/9
+cilia/6
+ciliate/292
+ciliately
+cilium/6
+Cilka/6
+cinch/26
+cinchona/7
+Cincinnati/6
+cincture/26
+Cinda/6
+Cindee/6
+Cindelyn/6
+cinder/26
+Cinderella/7
+Cindie/6
+Cindi/6
+Cindra/6
+Cindy/6
+cine/6
+cinema/7
+cinematic
+cinematographer/7
+cinematographic
+cinematography/7
+Cinerama/6
+cinnabar/7
+Cinnamon/6
+cinnamon/7
+ciphered/169
+cipher/26
+ciphers/169
+cir
+circa
+circadian
+Circe/6
+circler/6
+circle/111
+circlet/7
+circuital
+circuit/26
+circuitousness/7
+circuitous/28
+circuitry/7
+circuity/7
+circulant
+circularity/7
+circularize/17
+circularness/6
+circular/32
+circulate/293
+circulation/118
+circulations
+circulative
+circulatory
+circumcise/294
+circumcised/12
+circumciser/6
+circumcision/6
+circumference/7
+circumferential/19
+circumflex/26
+circumlocution/7
+circumlocutory
+circumnavigate/15
+circumnavigational
+circumnavigation/6
+circumpolar
+circumscribe/17
+circumscription/7
+circumspection/7
+circumspect/19
+circumsphere
+circumstance/26
+circumstantial/16
+circumvention/7
+circumvent/88
+circus/7
+Cirillo/6
+Cirilo/6
+Ciro/6
+cirque/7
+cirrhoses
+cirrhosis/6
+cirrhotic/9
+cirri/6
+cirrus/6
+Cissiee/6
+Cissy/6
+cistern/7
+citadel/7
+citations/45
+citation/48
+cit/17
+cite/295
+Citibank/6
+citified
+citizenry/7
+citizenship/7
+citizen/65
+citrate/170
+citric
+Citroen/6
+citronella/7
+citron/7
+citrus/7
+city/56
+cityscape/7
+citywide
+civet/7
+civic/9
+civics/6
+civilian/7
+civility/43
+civilizational/7
+civilization/48
+civilizedness/6
+civilized/236
+civilize/23
+civilizer/6
+civilizes/13
+civil/10
+civvies
+ck/169
+clack/17
+cladding/7
+clads
+clad/12
+Claiborne/6
+Claiborn/6
+claimable
+claimant/7
+claim/296
+claimed/12
+claimer/297
+Claire/6
+Clair/6
+Clairol/6
+clairvoyance/7
+clairvoyant/16
+clambake/7
+clamberer/6
+clamber/23
+clammed
+clammily
+clamminess/7
+clamming
+clam/7
+clammy/98
+clamorer/6
+clamor/49
+clamorousness/135
+clamorous/161
+clampdown/7
+clamper/6
+clamp/111
+clamshell/7
+Clancy/6
+clandestineness/6
+clandestine/28
+clanger/6
+clangor/26
+clangorous/19
+clang/23
+clanking/19
+clank/26
+clan/7
+clannishness/7
+clannish/28
+clansman/6
+clansmen
+clapboard/26
+Clapeyron/6
+clapped
+clapper/26
+clapping
+clap/9
+Clapton/6
+claptrap/7
+claque/7
+Clarabelle/6
+Clara/6
+Clarance/6
+Clare/6
+Claremont/6
+Clarence/6
+Clarendon/6
+Claresta/6
+Clareta/6
+claret/26
+Claretta/6
+Clarette/6
+Clarey/6
+Claribel/6
+Clarice/6
+Clarie/6
+clarification/6
+clarifier/6
+clarify/294
+Clari/6
+Clarinda/6
+Clarine/6
+clarinetist/7
+clarinet/7
+clarinettist's
+clarion/26
+Clarissa/6
+Clarisse/6
+Clarita/6
+clarities
+clarity/135
+Clarke/6
+Clark/6
+Clarridge/6
+Clary/6
+clasher/6
+clash/31
+clasped/6
+clasper/6
+clasp's
+clasp/180
+classer/6
+class/111
+classical/19
+classicism/7
+classicist/7
+classic/9
+classics/6
+classifiable/12
+classification/104
+classificatory
+classified/9
+classifier/7
+classify/103
+classiness/7
+classless/42
+classmate/7
+classroom/7
+classwork/6
+classy/98
+clatterer/6
+clattering/19
+clatter/31
+clattery
+Claudelle/6
+Claudell/6
+Claude/6
+Claudetta/6
+Claudette/6
+Claudia/6
+Claudian/6
+Claudianus/6
+Claudie/6
+Claudina/6
+Claudine/6
+Claudio/6
+Claudius/6
+clausal
+clause/7
+Clausen/6
+Clausewitz/6
+Clausius/6
+Claus/72
+claustrophobia/7
+claustrophobic
+clave/114
+clave's/278
+clavichord/7
+clavicle/7
+clavier/7
+clawer/6
+claw/111
+Clayborne/6
+Clayborn/6
+Claybourne/6
+clayey
+clayier
+clayiest
+Clay/6
+clay/26
+claymore/7
+Clayson/6
+Clayton/6
+Clea/6
+cleanable
+cleaner/7
+cleaning/7
+cleanliness/41
+cleanly/264
+cleanness/41
+cleanse
+cleanser/6
+cleans/23
+cleanup/7
+clean/298
+clearance/7
+clearcut
+clearer/6
+clearheadedness/6
+clearheaded/28
+clearinghouse/9
+clearing/7
+clearly
+clearness/7
+clears
+clear/299
+Clearwater/6
+clearway/6
+cleat/26
+cleavage/7
+cleaver/6
+cleave/23
+Cleavland/6
+clef/7
+cleft/26
+clematis/7
+clemence
+Clemenceau/6
+Clemence/6
+clemency/43
+Clemente/6
+Clementia/6
+Clementina/6
+Clementine/6
+Clementius/6
+clement/51
+Clement/7
+clements
+Clemmie/6
+Clemmy/6
+Clemons
+Clemson/6
+Clem/73
+clenches
+clenching
+clench/300
+Cleo/6
+Cleon/6
+Cleopatra/6
+Clerc/6
+clerestory/7
+clergyman/6
+clergymen
+clergy/7
+clergywoman
+clergywomen
+clericalism/7
+clerical/16
+cleric/7
+Clerissa/6
+clerk/116
+clerkship/7
+Cletis
+Cletus/6
+Cleveland/6
+Cleve/6
+cleverness/7
+clever/33
+Clevey/6
+Clevie/6
+clevis/7
+clew/26
+cl/301
+Cliburn/6
+clich�d
+clich�/7
+clicker/6
+click/49
+client�le/7
+client/7
+cliffhanger/7
+cliffhanging
+Cliff/6
+Clifford/6
+cliff/7
+Clifton/6
+climacteric/7
+climactic
+climate/7
+climatic
+climatically
+climatological/19
+climatologist/7
+climatology/7
+climax/26
+climbable/12
+climb/234
+climbdown
+climbed/12
+climber/6
+clime/7
+Clim/6
+clinch/23
+clincher/6
+clinching/19
+Cline/6
+clinger/7
+clinging
+cling/12
+clingy/54
+clinical/19
+clinician/7
+clinic/7
+clinker/165
+clink/23
+clinometer/43
+Clint/6
+Clinton/6
+Clio/6
+cliometrician/9
+cliometric/9
+clipboard/7
+clipped/12
+clipper/7
+clipping/7
+clip/7
+clique/26
+cliquey
+cliquier
+cliquiest
+cliquishness/7
+cliquish/28
+clitoral
+clitorides
+clitoris/7
+Clive/6
+cloacae
+cloaca/6
+cloakroom/7
+cloak's
+cloak/180
+clobber/17
+cloche/7
+clocker/6
+clockmaker/6
+clock/91
+clockwatcher
+clockwise
+clockwork/7
+clodded
+clodding
+cloddishness/6
+cloddish/42
+clodhopper/7
+clod/7
+Cloe/6
+clogged/12
+clogging/12
+clog's
+clog/302
+cloisonn�
+cloisonnes
+cloister/26
+cloistral
+Clo/6
+clomp/26
+clonal
+clone/49
+clonk/17
+clopped
+clopping
+clop/9
+Cloris/6
+closed/12
+close/137
+closefisted
+closely
+closemouthed
+closeness/7
+closeout/7
+closer/82
+closers
+closest
+closet/26
+closeup/9
+closing/9
+closured
+closure/85
+closure's/45
+closuring
+clothbound
+clothesbrush
+clotheshorse/7
+clothesline/26
+clothesman
+clothesmen
+clothespin/7
+clothe/180
+cloth/171
+clothier/7
+clothing/6
+Clotho/6
+cloths
+Clotilda/6
+clot/7
+clotted
+clotting
+cloture/26
+cloudburst/7
+clouded/12
+cloudiness/7
+cloudlessness/6
+cloudless/28
+cloudscape/7
+cloud/26
+cloudy/98
+clout/26
+cloven
+cloverleaf/7
+clover/6
+clove/96
+Clovis/6
+clown/26
+clownishness/7
+clownish/28
+cloy/17
+cloying/19
+clubbed/6
+clubbing/6
+clubfeet
+clubfoot/170
+clubhouse/7
+club/7
+clubroom/7
+cluck/26
+clueless
+clue/26
+Cluj/6
+clump/26
+clumpy/54
+clumsily
+clumsiness/7
+clumsy/98
+clung
+clunk/49
+clunky/33
+clustered/13
+clusters/14
+cluster/171
+clutch/17
+cluttered/12
+clutter/17
+Cl/303
+Clyde/6
+Clydesdale/6
+Cly/6
+Clytemnestra/6
+Clyve/6
+Clywd/6
+cm
+Cm/6
+CMOS
+cnidarian/7
+CNN
+CNS
+CO
+coacher/6
+coachman/6
+coachmen
+coach/111
+coachwork/6
+coadjutor/7
+coagulable
+coagulant/7
+coagulate/15
+coagulation/6
+coagulator/9
+coaler/6
+coalesce/17
+coalescence/7
+coalescent
+coalface/7
+coalfield/7
+coalitionist/7
+coalition/7
+coal/111
+coalminers
+coarseness/7
+coarsen/17
+coarse/33
+coastal
+coaster/6
+coastguard/7
+coastline/7
+coast/49
+coated/12
+Coates/6
+coating/6
+coat/91
+coattail/9
+coattest
+coauthor/26
+coaxer/6
+coax/23
+coaxial/19
+coaxing/19
+Cobain/6
+cobalt/7
+cobbed
+Cobbie/6
+cobbing
+cobbler/6
+cobble/49
+cobblestone/56
+Cobb/6
+Cobby/6
+coble/6
+Cob/6
+COBOL
+Cobol/6
+cobra/7
+cob/7
+cobwebbed
+cobwebbing
+cobwebby/54
+cobweb/7
+cocaine/7
+coca/7
+cocci/7
+coccus/6
+coccyges
+coccyx/6
+Cochabamba/6
+cochineal/7
+Cochin/6
+Cochise/6
+cochleae
+cochlear
+cochlea/7
+Cochran/6
+cockade/7
+cockamamie
+cockatoo/7
+cockatrice/7
+cockcrow/7
+cockerel/7
+cocker/6
+cockeye/170
+cockeyed/28
+cockfighting/6
+cockfight/304
+cock/111
+cockily
+cockiness/7
+cocklebur/6
+cockle/26
+cockleshell/7
+Cockney
+cockney/7
+cockpit/7
+cockroach/7
+cockscomb/7
+cockshies
+cocksucker/252
+cocksure
+cocktail/26
+cocky/98
+cocoa/7
+coco/7
+coconut/7
+cocoon/26
+Cocteau/6
+COD
+coda/7
+codded
+codding
+coddle/31
+coddler/6
+codebook/9
+codebreak/164
+coded/13
+Codee/6
+codeine/7
+codename/81
+codependency/9
+codependent/9
+coder/266
+code's
+co/305
+codes/14
+code/306
+codetermine/9
+codeword/7
+codex/6
+codfish/7
+codger/7
+codices/6
+codicil/7
+Codie/6
+codification/6
+codifier/6
+codify/115
+Codi/6
+coding/6
+codling/6
+Cod/6
+cod/91
+codpiece/7
+Cody/6
+coedited
+coediting
+coeditor/7
+coedits
+coed/7
+coeducational
+coeducation/7
+coefficient/65
+coelenterate/7
+coequal/16
+coercer/6
+coerce/307
+coercible/45
+coercion/6
+coerciveness/6
+coercive/28
+coeval/16
+coexistence/7
+coexistent
+coexist/17
+coextensive/19
+cofactor/7
+coffeecake/7
+coffeecup
+coffeehouse/7
+coffeemaker/9
+coffeepot/7
+coffee/7
+cofferdam/7
+coffer/26
+Coffey/6
+coffin/26
+Coffman/6
+cogency/7
+cogent/19
+cogged
+cogging
+cogitate/24
+cogitation/6
+cogitator/7
+cog/7
+Cognac/6
+cognac/7
+cognate/308
+cognation/6
+cognitional
+cognition/48
+cognitive/16
+cognizable
+cognizance/309
+cognizances/14
+cognizant/45
+cognomen/7
+cognoscente
+cognoscenti
+cogwheel/7
+cohabitant/7
+cohabitational
+cohabitation/7
+cohabit/17
+Cohan/6
+coheir/7
+Cohen/6
+cohere/31
+coherence/43
+coherencies
+coherency/45
+coherent/51
+coherer/6
+cohesion/7
+cohesiveness/7
+cohesive/28
+Cohn/6
+cohoes
+coho/7
+cohort/7
+coiffed
+coiffing
+coiffure/26
+coif/7
+coil/310
+Coimbatore/6
+coinage's/14
+coinage/7
+coincide/17
+coincidence/7
+coincidental/19
+coincident/19
+coined/12
+coiner/6
+coin/49
+coinsurance/7
+Cointon/6
+cointreau
+coital/19
+coitus/7
+coke/26
+Coke/7
+COL
+COLA
+colander/7
+Colan/6
+Colas
+cola/7
+colatitude/7
+Colbert/6
+Colby/6
+coldblooded
+coldish
+coldness/7
+cold/38
+Coleen/6
+Cole/6
+Coleman/6
+Colene/6
+Coleridge/6
+coleslaw/7
+Colet/6
+Coletta/6
+Colette/6
+coleus/7
+Colfax/6
+Colgate/6
+colicky
+colic/7
+coliform
+Colin/6
+coliseum/7
+colitis/7
+collaborate/24
+collaboration/6
+collaborative/16
+collaborator/7
+collage/26
+collagen/6
+collapse/17
+collapsibility/6
+collapsible
+collarbone/7
+collar/26
+collard/7
+collarless
+collated/12
+collateral/65
+collate/24
+collation/6
+collator/7
+colleague/26
+collectedness/6
+collected/28
+collectible/9
+collection/48
+collective/16
+collectivism/7
+collectivist/7
+collectivity/7
+collectivization/7
+collectivize/17
+collector/7
+collect/36
+Colleen/6
+colleen/7
+college/7
+collegiality/9
+collegian/7
+collegiate/19
+Collen/6
+Collete/6
+Collette/6
+coll/224
+collide/17
+Collie/6
+collie/192
+collier/6
+Collier/6
+colliery/7
+collimate/169
+collimated/12
+collimates
+collimating
+collimation/6
+collimator/6
+collinear
+collinearity/6
+Colline/6
+Collin/7
+collisional
+collision/7
+collocate/15
+collocation/6
+colloidal/19
+colloid/7
+colloq
+colloquialism/7
+colloquial/16
+colloquies
+colloquium/7
+colloquy/6
+collude/17
+collusion/7
+collusive
+collying
+Colly/114
+Colman/6
+Col/86
+Cologne/6
+cologne/56
+Colo/6
+Colombia/6
+Colombian/9
+Colombo/6
+colonelcy/7
+colonel/7
+colonialism/7
+colonialist/7
+colonial/46
+colonist/7
+colonization/279
+colonize/311
+colonized/12
+colonizer/7
+colonizes/12
+Colon/6
+colonnade/56
+colon/7
+colony/7
+colophon/7
+Coloradan/9
+Coloradoan/9
+Colorado/6
+colorant/7
+coloration/85
+coloratura/7
+colorblindness/9
+colorblind/42
+colored/312
+colorer/6
+colorfastness/7
+colorfast/42
+colorfulness/7
+colorful/28
+colorimeter/7
+colorimetry
+coloring/6
+colorization/9
+colorize/17
+colorizing/169
+colorlessness/7
+colorless/28
+colors/145
+color/91
+colossal/19
+Colosseum/6
+colossi
+colossus/6
+colostomy/7
+colostrum/7
+col/142
+colter/6
+coltishness/6
+coltish/28
+Colt/6
+colt/175
+Coltrane/6
+Columbia/6
+Columbian
+Columbine/6
+columbine/7
+Columbus/6
+columnar
+columnist/7
+columnize/17
+column/56
+Colver/6
+Co/6
+comae
+comaker/7
+Comanche/7
+coma/7
+comatose
+combatant/7
+combativeness/7
+combative/28
+combat/163
+combed/12
+comber/6
+combinational/14
+combination/48
+combinatorial/19
+combinatoric/9
+combinator/7
+combined/13
+combiner/6
+combines/14
+combine/67
+combining/14
+combo/7
+comb/91
+Combs/6
+combusted
+combustibility/7
+combustible/230
+combustion/7
+combustive
+Comdex/6
+Comdr/6
+comeback/7
+comedian/7
+comedic
+comedienne/7
+comedown/7
+comedy/7
+come/313
+comeliness/7
+comely/98
+comer/123
+comes/6
+comestible/7
+cometary
+cometh
+comet/7
+comeuppance/7
+comfit's
+comfit/314
+comfortability/9
+comfortableness/7
+comfortable/12
+comfortably/12
+comforted/12
+comforter/7
+comfort/74
+comforting/75
+comfy/54
+comicality/7
+comical/19
+comic/7
+Cominform/6
+comity/7
+com/315
+comm
+Com/6
+comma/7
+commandant/7
+commandeer/17
+commander/6
+commanding/19
+commandment/7
+commando/7
+command/191
+commemorate/24
+commemoration/6
+commemorative/16
+commemorator/9
+commence/102
+commencement/48
+commencer/6
+commendably
+commendation/48
+commendatory/14
+commender/118
+commend/262
+commensurable/45
+commensurate/51
+commensurates
+commensuration/7
+commentary/7
+commentate/17
+commentator/7
+commenter/6
+comment's
+comment/180
+commerce/26
+commercialism/7
+commercialization/7
+commercialize/17
+commercial/46
+Commie
+commie/7
+commingle/17
+commiserate/24
+commiseration/6
+commissariat/7
+commissar/7
+commissary/7
+commission/311
+commissioner/7
+commission's/14
+commitment/7
+commit/63
+committable
+committal/118
+committals
+committed/13
+committeeman/6
+committeemen
+committee/7
+committeewoman/6
+committeewomen
+committing/14
+commode/7
+commodes/316
+commodiousness/123
+commodious/68
+commodity/7
+commodore/7
+commonality/7
+commonalty/7
+commoner/7
+commonness/41
+commonplaceness/6
+commonplace/144
+common/317
+commonsense
+commons/6
+Commons/6
+commonweal/216
+commonwealth/6
+Commonwealth/6
+commonwealths
+Commonwealths
+commotion/7
+communality/6
+communal/19
+commune/15
+communicability/7
+communicable/44
+communicably
+communicant/7
+communicate/24
+communicational
+communication/6
+communicativeness/6
+communicative/28
+communicator/7
+communion/6
+Communion/7
+communique/9
+communism/7
+Communism/9
+communistic
+communist/7
+Communist/9
+communitarian/6
+community/7
+communize/17
+commutable/45
+commutate/24
+commutation/6
+commutative/19
+commutativity
+commutator/7
+commute/67
+commuter/6
+Comoros
+compaction/6
+compactness/7
+compactor/7
+compact/100
+companionableness/6
+companionable/42
+companionably
+companion/57
+companionship/7
+companionway/7
+company/26
+Compaq/6
+comparabilities
+comparability/123
+comparableness/6
+comparable/42
+comparably/45
+comparativeness/6
+comparative/46
+comparator/7
+compare/318
+comparer/6
+comparison/7
+compartmental
+compartmentalization/7
+compartmentalize/17
+compartment/26
+compassionateness/6
+compassionate/22
+compassion/7
+compass/26
+compatibility/43
+compatibleness/6
+compatible/230
+compatibly/45
+compatriot/7
+compeer/26
+compellable
+compelled
+compelling/86
+compel/9
+compendious
+compendium/7
+compensable
+compensated/12
+compensate/24
+compensation/6
+compensator/6
+compensatory
+compete/17
+competence/43
+competency/230
+competency's
+competent/51
+competition/7
+competitiveness/7
+competitive/28
+competitor/7
+comp/183
+compilable/12
+compilation/48
+compile/311
+compiler/120
+compiler's
+complacence/9
+complacency/7
+complacent/19
+complainant/7
+complainer/6
+complain/23
+complaining/10
+complaint/7
+complaisance/7
+complaisant/19
+complected
+complementariness/6
+complementarity
+complementary/144
+complementation/6
+complementer/6
+complement/49
+complete/319
+completed/12
+completely/45
+completeness/43
+completer/6
+completion/123
+complexional
+complexion/56
+complexity/7
+complexness/6
+complex/77
+compliance/7
+compliant/19
+complicatedness/6
+complicated/28
+complicate/17
+complication/6
+complicator/7
+complicit
+complicity/7
+complier/6
+complimentary/12
+complimenter/6
+compliment/49
+comply/115
+component/7
+comport/11
+comportment/7
+compose/320
+composedness/6
+composed/28
+composer/266
+composers
+composite/215
+compositional/19
+composition/104
+compositions/169
+compositor/7
+compost/26
+composure/85
+compote/7
+compounded/12
+compounder/6
+compound/101
+comprehend/17
+comprehending/12
+comprehensibility/43
+comprehensibleness/123
+comprehensible/261
+comprehensibly/45
+comprehension/43
+comprehensiveness/7
+comprehensive/46
+compressed/19
+compressibility/123
+compressible/45
+compressional
+compression/186
+compressive/19
+compressor/7
+compress/321
+comprise/17
+compromiser/6
+compromise/49
+compromising/10
+Compton/6
+comptroller/7
+compulsion/7
+compulsiveness/7
+compulsive/46
+compulsivity
+compulsorily
+compulsory/9
+compunction/7
+Compuserve/6
+CompuServe/6
+computability/6
+computable/44
+computably
+computational/19
+computation/7
+computed/14
+computerese
+computerization/7
+computerize/17
+computer/6
+compute/67
+computes/14
+computing/14
+comradely/42
+comradeship/7
+comrade/65
+Comte/6
+Conakry/6
+Conan/6
+Conant/6
+concatenate/322
+concaveness/7
+concave/28
+conceal/53
+concealed/12
+concealer/6
+concealing/19
+concealment/7
+conceded/19
+conceitedness/7
+conceited/28
+conceit/26
+conceivable/44
+conceivably/45
+conceive/318
+conceiver/6
+concentrate/24
+concentration/6
+concentrator/7
+concentrically
+Concepci�n/6
+conceptional
+conception/7
+concept/76
+conceptuality/6
+conceptualization/14
+conceptualizations
+conceptualization's
+conceptualize/31
+conceptualizing/14
+conceptual/19
+concerned/10
+concern/180
+concerted/28
+concert/84
+concertina/26
+concertize/17
+concertmaster/7
+concerto/7
+concert's
+concessionaire/7
+concessional
+concessionary
+concession/164
+Concetta/6
+Concettina/6
+Conchita/6
+conch/165
+conchs
+concierge/7
+conciliar
+conciliate/323
+conciliation/48
+conciliator/7
+conciliatory/14
+conciseness/7
+concise/324
+concision/6
+conclave/9
+concluder/6
+conclude/31
+conclusion/7
+conclusive/68
+conclusiveness/43
+concocter/6
+concoction/7
+concoct/29
+concomitant/16
+concordance/7
+concordant/19
+concordat/7
+Concorde/6
+Concordia/6
+Concord/7
+concourse
+concreteness/7
+concrete/325
+concretion/6
+concubinage/7
+concubine/7
+concupiscence/7
+concupiscent
+concurrence/7
+concur/9
+concussion/7
+concuss/326
+condemnate/107
+condemnation/6
+condemnatory
+condemner/6
+condemn/67
+condensate/99
+condensation/6
+condenser/6
+condense/121
+condensible
+condescend
+condescending/19
+condescension/7
+condign
+condiment/7
+condition/327
+conditionals
+conditional/10
+conditioned/12
+conditioner/7
+conditioning/6
+condition's
+condole
+condolence/7
+condominium/7
+condom/7
+condone/31
+condoner/6
+Condorcet/6
+condor/7
+condo/7
+conduce/64
+conduciveness/6
+conducive/42
+conductance/7
+conductibility/7
+conductible
+conduction/7
+conductive/19
+conductivity/7
+conductor/7
+conductress/7
+conduct/130
+conduit/7
+coneflower/6
+Conestoga
+coney's
+confabbed
+confabbing
+confab/7
+confabulate/15
+confabulation/6
+confectioner/6
+confectionery/7
+confectionist
+confection/49
+confect/9
+Confederacy/6
+confederacy/7
+confederate/6
+Confederate/9
+conferee/7
+conference/26
+conferrable
+conferral/7
+conferred
+conferrer/7
+conferring
+confer/141
+confessed/19
+confessional/16
+confession/7
+confessor/7
+confetti/6
+confidante/7
+confidant/7
+confidence/7
+confidentiality/7
+confidentialness/6
+confidential/28
+confident/19
+confider/6
+confide/23
+confiding/28
+configuration/48
+configure/328
+confined/12
+confine/329
+confinement/7
+confiner/6
+confirm/36
+confirmation/48
+confirmatory
+confirmedness/6
+confirmed/28
+confiscate/15
+confiscation/6
+confiscator/7
+confiscatory
+conflagration/7
+conflate/15
+conflation/6
+conflicting/19
+conflict/163
+confluence/7
+conformable/12
+conformal
+conformance/7
+conformational/19
+conform/277
+conformer/6
+conformism/7
+conformist/7
+conformities
+conformity/330
+confounded/19
+confound/164
+confr�re/7
+confrontational
+confrontation/7
+confronter/6
+confront/331
+Confucianism/7
+Confucian/9
+Confucius/6
+confusedness/6
+confused/28
+confuse/332
+confusing/19
+confutation/7
+confute/31
+confuter/6
+conga/165
+congeal/11
+congealment/7
+congeniality/135
+congenial/12
+congeries/6
+conger/7
+congestion/7
+congest/64
+conglomerate/333
+conglomeration/6
+Cong/6
+Congolese
+Congo/6
+congrats
+congratulate/15
+congratulation/6
+congratulatory
+congregate/15
+congregational
+Congregational
+congregationalism/7
+congregationalist/7
+Congregationalist/9
+congregation/6
+congressional/19
+congressman/6
+congressmen
+Congress/7
+congress/26
+congresspeople
+congressperson/9
+congresswoman/6
+congresswomen
+Congreve/6
+congruence/123
+congruences
+congruency/6
+congruential
+congruent/51
+congruity/43
+congruousness/123
+congruous/68
+conicalness/6
+conical/46
+conic/9
+conics/6
+conifer/7
+coniferous
+conjectural/19
+conjecture/111
+conjecturer/6
+conjoint
+conjugacy
+conjugal/19
+conjugate/148
+conjugation/6
+conjunct/334
+conjunctiva/7
+conjunctive/16
+conjunctivitis/7
+conjuration/7
+conjurer/6
+conjure/23
+conjuring/6
+conker/6
+conk/335
+Conley/6
+Con/6
+conman
+connect/127
+connectedly/25
+connectedness/82
+connected/12
+connectible
+Connecticut/6
+connection/154
+connectionless
+connections/25
+connective/65
+connectivity/7
+connector/7
+Connelly/6
+Conner/6
+Connery/6
+connexion/7
+Conney/6
+conn/336
+Connie/6
+Conni/6
+conniption/7
+connivance/7
+conniver/6
+connive/23
+connoisseur/7
+Connor/7
+connotative/19
+Conn/114
+connubial/19
+Conny/6
+conquerable/12
+conquered/13
+conqueror/7
+conquer/67
+conquers/14
+conquest/48
+conquistador/7
+Conrade/6
+Conrad/6
+Conrado/6
+Conrail/6
+Conroy/6
+Consalve/6
+consanguineous/19
+consanguinity/7
+conscienceless
+conscientiousness/7
+conscientious/28
+conscionable/12
+consciousness/41
+conscious/337
+conscription/7
+consecrated/13
+consecrates/14
+consecrate/24
+consecrating/14
+consecration/48
+consecutiveness/6
+consecutive/28
+consensus/7
+consenter/6
+consenting/19
+consent/23
+consequence
+consequentiality/9
+consequential/51
+consequentialness/6
+consequently/45
+consequent/46
+conservancy/7
+conservationism
+conservationist/7
+conservation/7
+conservatism/7
+conservativeness/6
+Conservative/9
+conservative/46
+conservator/7
+conservatory/7
+con/131
+considerable/45
+considerables
+considerably/45
+considerateness/43
+considerate/338
+consideration/339
+considered/12
+considerer/6
+consider/36
+considering/9
+consign/36
+consignee/7
+consignment/7
+consist/17
+consistence/9
+consistency/43
+consistent/51
+consistory/7
+consolable/45
+Consolata/6
+consolation/7
+consolation's/25
+consolatory
+consoled/12
+consoler/6
+console/340
+consolidated/13
+consolidate/15
+consolidates/14
+consolidation/6
+consolidator/7
+consoling/19
+consomm�/9
+consonance/123
+consonances
+consonantal
+consonant/65
+consortia
+consortium/6
+conspectus/7
+conspicuousness/43
+conspicuous/68
+conspiracy/7
+conspiratorial/19
+conspirator/7
+constable
+Constable/6
+constabulary/7
+constance
+Constance/6
+Constancia/6
+constancy/43
+Constancy/6
+Constanta/6
+Constantia/6
+Constantina/6
+Constantine/6
+Constantin/6
+Constantino/6
+Constantinople/6
+constant/51
+constants
+constellation/7
+consternate/15
+consternation/6
+constipate/15
+constipation/6
+constituency/7
+constituent/65
+constituted/14
+constitute/24
+constitutes/14
+constituting/14
+Constitution
+constitutionality's
+constitutionality/302
+constitutionally/12
+constitutional/16
+constitution/48
+constitutive/19
+constrain
+constrainedly
+constrained/12
+constraint/7
+constriction/7
+constrictor/7
+constrict/64
+construable
+construct/62
+constructibility
+constructible/14
+constructional/19
+constructionist/7
+construction/48
+constructions/169
+constructiveness/7
+constructive/28
+constructor/7
+construe/17
+Consuela/6
+Consuelo/6
+consular/9
+consulate/7
+consul/341
+consulship/7
+consultancy/9
+consultant/7
+consultation/7
+consultative
+consulted/14
+consulter/6
+consult/29
+consumable/9
+consumed/19
+consume/342
+consumerism/7
+consumerist/9
+consumer/6
+consuming/19
+consummate/343
+consummated/12
+consumption/7
+consumptive/16
+cont
+contact/344
+contacted/14
+contact's/14
+contacts/14
+contagion/7
+contagiousness/7
+contagious/28
+containerization/7
+containerize/17
+container/6
+containment/7
+contain/53
+contaminant/7
+contaminated/13
+contaminates/14
+contaminate/345
+contaminating/14
+contamination/266
+contaminative
+contaminator/7
+contd
+cont'd
+contemn/17
+contemplate/346
+contemplation/6
+contemplativeness/6
+contemplative/46
+contemporaneity/7
+contemporaneousness/6
+contemporaneous/28
+contemptibleness/6
+contemptible/42
+contemptibly
+contempt/6
+contemptuousness/7
+contemptuous/28
+contentedly/25
+contentedness/7
+contented/28
+content/347
+contention/7
+contentiousness/7
+contentious/28
+contently
+contentment/314
+contentment's
+conterminous/19
+contestable/45
+contestant/7
+contested/12
+contextualize/17
+contiguity/7
+contiguousness/6
+contiguous/28
+continence/43
+Continental/9
+continental/16
+continent/51
+Continent/6
+continents
+continent's
+contingency/7
+contingent/65
+continua
+continuable
+continual/19
+continuance/85
+continuant/6
+continuation/85
+continue/84
+continuer/6
+continuity/85
+continuousness/6
+continuous/75
+continuum/6
+contortionist/7
+contortion/7
+contort/348
+contour
+contraband/7
+contrabass/6
+contraception/7
+contraceptive/9
+contract/47
+contractible
+contractile
+contractual/19
+contradict/17
+contradiction/7
+contradictorily
+contradictoriness/6
+contradictory/144
+contradistinction/7
+contraflow/9
+contrail/6
+contraindicate/24
+contraindication/6
+contralto/7
+contrapositive/9
+contraption/7
+contrapuntal/19
+contrariety/7
+contrarily
+contrariness/7
+contrariwise
+contrary/144
+contra/9
+contrasting/19
+contrastive/19
+contrast/349
+contravene/31
+contravener/6
+contravention/7
+Contreras/6
+contretemps/6
+contribute/350
+contribution/6
+contributive/19
+contributorily
+contributor/7
+contributory/9
+contriteness/6
+contrite/351
+contrition/6
+contrivance/7
+contriver/6
+contrive/23
+control/120
+controllability/6
+controllable/44
+controllably/12
+controlled/156
+controller/7
+controlling/169
+control's
+controversialists
+controversial/10
+controversy/7
+controvert/17
+controvertible/45
+contumacious/19
+contumacy/7
+contumelious
+contumely/7
+contuse/15
+contusion/6
+conundrum/7
+conurbation/7
+convalesce/17
+convalescence/7
+convalescent/9
+convect/64
+convectional
+convection/7
+convector
+convene/36
+convener/7
+convenience/43
+convenient/51
+conventicle/7
+conventionalism/6
+conventionalist/6
+conventionality/41
+conventionalize/17
+conventional/10
+convention/118
+conventions
+convergence/7
+convergent
+conversant/19
+conversationalist/7
+conversational/19
+conversation/7
+conversazione/6
+converse/19
+conversion/118
+conversioning
+converted/12
+converter/7
+convert/36
+convertibility's/45
+convertibility/7
+convertibleness/6
+convertible/144
+convexity/7
+convex/19
+conveyance/49
+conveyancer/6
+conveyancing/6
+convey/88
+conveyor/7
+conviction/7
+convict/64
+convinced/12
+convincer/6
+convince/23
+convincingness/6
+convincing/161
+conviviality/7
+convivial/19
+convoke/17
+convolute/352
+convolution/6
+convolve/169
+convolved
+convolves
+convolving
+convoy/26
+convulse/24
+convulsion/6
+convulsiveness/6
+convulsive/28
+Conway/6
+cony/7
+coo/17
+cookbook/7
+cooked/13
+Cooke/6
+cooker/6
+cookery/7
+cook/91
+Cookie/6
+cookie/7
+cooking/6
+Cook/6
+cookout/7
+cooks/14
+cookware/7
+cooky's
+coolant/7
+cooled/12
+cooler/6
+Cooley/6
+coolheaded
+Coolidge/6
+coolie/7
+coolness/7
+cool/223
+coon/30
+coonskin/7
+cooperage/7
+cooperate/24
+cooperation/6
+cooperativeness/7
+cooperative/46
+cooperator/7
+cooper/165
+Cooper/6
+coop/49
+Coop/114
+coordinated/12
+coordinateness/6
+coordinate/148
+coordination/6
+coordinator/7
+Coors/6
+cootie/7
+coot/7
+copay/9
+Copeland/6
+Copenhagen/6
+coper/6
+Copernican
+Copernicus/6
+cope/9
+copied/14
+copier/6
+copies/14
+copilot/7
+coping/6
+copiousness/7
+copious/28
+coplanar
+Copland/6
+Copley/6
+copolymer/7
+copora
+copped
+Copperfield/6
+copperhead/7
+copper/26
+copperplate/7
+coppersmith/6
+coppersmiths
+coppery
+coppice's
+copping
+Coppola/6
+copra/7
+coprolite/6
+coprophagous
+copse/6
+cops/17
+cop/211
+copter/7
+Coptic/6
+copula/7
+copulate/24
+copulation/6
+copulative/9
+copybook/7
+copycat/7
+copycatted
+copycatting
+copyist/7
+copy/66
+copyrighter/6
+copyright/49
+copywriter/7
+coquetry/7
+coquette/26
+coquettish/19
+Corabella/6
+Corabelle/6
+Corabel/6
+coracle/7
+Coralie/6
+Coraline/6
+coralline
+Coral/6
+coral/7
+Coralyn/6
+Cora/6
+corbel/171
+Corbet/6
+Corbett/6
+Corbie/6
+Corbin/6
+Corby/6
+cordage/7
+corded/145
+Cordelia/6
+Cordelie/6
+Cordell/6
+corder/118
+Cordey/6
+cord/353
+cordiality/7
+cordialness/6
+cordial/46
+Cordie/6
+cordillera/7
+Cordilleras
+Cordi/6
+cording/118
+cordite/7
+cordless
+Cord/6
+Cordoba
+cordon/26
+cordovan/7
+Cordula/6
+corduroy/26
+Cordy/6
+cored/14
+Coreen/6
+Corella/6
+core/49
+Corenda/6
+Corene/6
+corer/6
+corespondent/7
+Coretta/6
+Corette/6
+Corey/6
+Corfu/6
+corgi/7
+coriander/7
+Corie/6
+Corilla/6
+Cori/6
+Corina/6
+Corine/6
+coring/6
+Corinna/6
+Corinne/6
+Corinthian/9
+Corinthians/6
+Corinth/6
+Coriolanus/6
+Coriolis/6
+Corissa/6
+Coriss/6
+corked/12
+corker/6
+cork/49
+Cork/6
+corkscrew/26
+corks/12
+Corliss/6
+Corly/6
+Cormack/6
+corm/7
+cormorant/7
+Cornall/6
+cornball/7
+cornbread/9
+corncob/7
+corncrake/6
+corneal
+cornea/7
+Corneille/6
+Cornela/6
+Cornelia/6
+Cornelius/6
+Cornelle/6
+Cornell/6
+corner/165
+cornerstone/7
+cornet/7
+Corney/6
+cornfield/7
+cornflake/9
+cornflour/6
+cornflower/7
+corn/49
+cornice/26
+Cornie/6
+cornily
+corniness/9
+Cornish/9
+cornmeal/9
+cornrow/17
+cornstalk/7
+cornstarch/7
+cornucopia/7
+Cornwallis/6
+Cornwall/6
+Corny/6
+corny/98
+corolla/7
+corollary/7
+Coronado/6
+coronal/7
+coronary/9
+corona/7
+coronate/107
+coronation/6
+coroner/7
+coronet/56
+Corot/6
+coroutine/7
+Corp
+corporal/65
+corpora/7
+corporate/354
+corporately
+corporation/123
+corporatism/6
+corporatist
+corporeality/7
+corporeal/51
+corporealness/6
+corp/9
+corpse/6
+corpsman/6
+corpsmen
+corps/7
+corpulence/7
+corpulentness/9
+corpulent/28
+corpuscle/7
+corpuscular
+corpus/6
+corr
+corralled
+corralling
+corral/7
+correctable/12
+correct/355
+corrected/12
+correctional
+correction/7
+corrective/46
+correctly/45
+correctness/43
+corrector/7
+Correggio/6
+correlated/12
+correlate/24
+correlation/6
+correlative/16
+Correna/6
+correspond/17
+correspondence/7
+correspondent/7
+corresponding/19
+Correy/6
+Corrianne/6
+corridor/7
+Corrie/6
+corrigenda
+corrigendum/6
+corrigible/45
+Corri/6
+Corrina/6
+Corrine/6
+Corrinne/6
+corroborated/12
+corroborate/24
+corroboration/6
+corroborative/19
+corroborator/7
+corroboratory
+corrode/17
+corrodible
+corrosion/7
+corrosiveness/6
+corrosive/46
+corrugate/15
+corrugation/6
+corrupt/37
+corrupted/12
+corrupter/6
+corruptibility/43
+corruptible/45
+corruption/123
+corruptions
+corruptive/19
+corruptness/7
+Corry/6
+corsage/7
+corsair/7
+corset/26
+Corsica/6
+Corsican/9
+cort�ge/7
+Cortes/9
+cortex/6
+Cortez's
+cortical/19
+cortices
+corticosteroid/7
+Cortie/6
+cortisone/7
+Cortland/6
+Cort/6
+Cortney/6
+Corty/6
+corundum/7
+coruscate/15
+coruscation/6
+Corvallis/6
+corvette/7
+Corvus/6
+Cory/6
+Cos
+Cosby/6
+Cosetta/6
+Cosette/6
+cos/17
+cosignatory/7
+cosign/23
+cosily
+Cosimo/6
+cosine/7
+cosiness/7
+Cosme/6
+cosmetically
+cosmetician/7
+cosmetic/7
+cosmetologist/7
+cosmetology/7
+cosmic
+cosmical/19
+cosmogonist/7
+cosmogony/7
+cosmological/19
+cosmologist/7
+cosmology/7
+Cosmo/6
+cosmonaut/7
+cosmopolitanism/7
+cosmopolitan/7
+cosmos/7
+cosponsor/17
+cossack/9
+Cossack/7
+cosset/17
+Costa/6
+Costanza/6
+costarred
+costarring
+costar/9
+Costello/6
+costiveness/6
+costive/28
+costless
+costliness/7
+costly/98
+cost/356
+Costner/6
+costumer/6
+costume/49
+cotangent/7
+Cote/6
+cote/7
+coterie/7
+coterminous/19
+cotillion/7
+Cotonou/6
+Cotopaxi/6
+cot/26
+cottager/6
+cottage/49
+cottar's
+cotted
+cotter/56
+cotton/26
+Cotton/6
+cottonmouth/6
+cottonmouths
+cottonseed/7
+cottontail/7
+cottonwood/7
+cottony
+cotyledon/7
+couching/6
+couch/26
+cougar/7
+cougher/6
+cough/52
+coughs
+couldn't
+could/357
+could've
+coul�e/7
+Coulomb/6
+coulomb/7
+councilman/6
+councilmen
+councilor/7
+councilperson/9
+council/7
+councilwoman/6
+councilwomen
+counsel/26
+counsellings
+counselor/7
+countability/25
+countable/12
+countably/12
+countdown/7
+counted/12
+count/153
+countenance/84
+countenancer/6
+countenance's
+counteract/64
+counteraction/7
+counterargument/7
+counterattack/111
+counterbalance/26
+counterclaim/26
+counterclockwise
+counterculture/7
+countercyclical
+counterespionage/7
+counterexample/9
+counterfeiter/6
+counterfeit/23
+counterflow
+counterfoil/7
+counterforce/6
+counter/26
+counterinsurgency/7
+counterintelligence/7
+counterintuitive
+countermand/17
+counterman/6
+countermeasure/7
+countermen
+counteroffensive/7
+counteroffer/7
+counterpane/7
+counterpart/7
+counterpoint/26
+counterpoise/26
+counterproductive
+counterproposal/6
+counterrevolutionary/7
+counterrevolution/7
+counter's/25
+counters/25
+countersignature/7
+countersign/17
+countersink/166
+counterspy/7
+counterstrike
+countersunk
+countertenor/7
+countervail/17
+counterweight/26
+countess/7
+countless/19
+countrify/81
+countryman/6
+countrymen
+country/7
+countryside/7
+countrywide
+countrywoman/6
+countrywomen
+county/7
+coup/36
+coupe/7
+Couperin/6
+couple/358
+coupled/156
+coupler/169
+couplers
+coupler's
+couple's
+couples/156
+couplet/7
+coupling's/169
+coupling/7
+coupon/7
+coup's
+courage/7
+courageously
+courageousness/7
+courageous/12
+courages/25
+Courbet/6
+courgette/7
+courier/26
+course/359
+courser's/25
+courser/7
+course's/360
+courses/360
+coursework
+coursing/6
+Courtenay/6
+courteousness/82
+courteousnesses
+courteous/361
+courtesan/7
+courtesied
+courtesy/85
+courtesying
+court/362
+courthouse/7
+courtier/7
+courtliness/7
+courtly/98
+Court/6
+Courtnay/6
+Courtney/6
+courtroom/7
+courtship/7
+courtyard/7
+couscous/7
+cousinly/12
+cousin/65
+Cousteau/6
+couture/7
+couturier/7
+covalent/19
+covariance/7
+covariant/9
+covariate/363
+covary
+cove/49
+covenanted/12
+covenanter/6
+covenant/111
+coven/7
+Covent/6
+Coventry/7
+coverable/25
+cover/364
+coverage/7
+coverall/56
+coverer/154
+covering/7
+coverlet/7
+coversheet
+covers/6
+covertness/7
+covert/46
+coveter/6
+coveting/19
+covetousness/7
+covetous/28
+covet/31
+covey/7
+covington
+cowardice/7
+cowardliness/7
+cowardly/42
+Coward/6
+coward/65
+cowbell/7
+cowbird/7
+cowboy/7
+cowcatcher/7
+cowed/19
+cowering/19
+cower/242
+cowgirl/7
+cowhand/9
+cowherd/7
+cowhide/26
+Cowley/6
+cowlick/7
+cowling/6
+cowl/26
+cowman/6
+cow/49
+cowmen
+coworker/7
+Cowper/6
+cowpoke/7
+cowpony
+cowpox/7
+cowpuncher/6
+cowpunch/90
+cowrie/7
+cowshed/7
+cowslip/7
+coxcomb/7
+Cox/6
+cox/26
+coxswain/26
+coy/263
+coyer
+coyest
+coyly
+Coy/6
+coyness/7
+coyote/7
+coypu/7
+cozenage/7
+cozen/17
+cozily
+coziness/7
+Cozmo/6
+Cozumel/6
+cozy/226
+CPA
+cpd
+CPI
+cpl
+Cpl
+CPO
+CPR
+cps
+CPU/7
+crabapple
+crabbedness/6
+crabbed/28
+Crabbe/6
+crabber/7
+crabbily
+crabbiness/9
+crabbing/6
+crabby/98
+crabgrass/9
+crablike
+crab/7
+crackable/12
+crackdown/7
+crackerjack/9
+cracker/6
+crackle/71
+crackling/6
+crackly/54
+crackpot/7
+crackup/9
+crack/365
+cradler/6
+cradle/111
+cradling/6
+craftily
+craftiness/7
+Craft/6
+craft/111
+craftsman/6
+craftsmanship/7
+craftsmen
+craftspeople
+craftspersons
+craftswoman
+craftswomen
+crafty/98
+Craggie/6
+cragginess/7
+Craggy/6
+craggy/98
+crag/7
+Craig/6
+Cramer/6
+crammed
+crammer/6
+cramming
+cramper/6
+cramp/111
+crampon/7
+cram/9
+Cranach/6
+cranberry/7
+Crandall/6
+crane/26
+cranelike
+Crane/6
+Cranford/6
+cranial
+cranium/7
+crankcase/7
+crankily
+crankiness/7
+crank/172
+crankshaft/7
+cranky/98
+Cranmer/6
+cranny/26
+Cranston/6
+crape/7
+crapped
+crappie/6
+crapping
+crappy/228
+crapshooter/7
+crap/366
+crasher/6
+crashing/19
+crash/23
+crassness/7
+crass/33
+crate/49
+crater/165
+Crater/6
+cravat/7
+cravatted
+cravatting
+crave/187
+cravenness/7
+craven/22
+craver/6
+craving/6
+crawdad/9
+crawfish's
+Crawford/6
+crawler/6
+crawl/23
+crawlspace/9
+crawlway
+crawly/228
+craw/65
+crayfish/26
+Crayola/6
+crayon/26
+Cray/7
+craze/26
+crazily
+craziness/7
+crazy/177
+creakily
+creakiness/7
+creak/17
+creaky/98
+creamer/6
+creamery/7
+creamily
+creaminess/7
+cream/49
+creamy/98
+creased/156
+crease/367
+crease's
+creases/169
+creasing/169
+created/12
+create/368
+creationism/7
+creationist/7
+Creation/6
+creation/369
+creativeness/7
+creative/28
+creativities
+creativity/370
+creativity's
+Creator/6
+creator/7
+creatureliness/6
+creaturely/42
+creature/65
+cr�che/7
+credence/7
+credent
+credential/26
+credenza/7
+credibility/43
+credible/45
+credibly/45
+creditability/6
+creditableness/6
+creditable/42
+creditably/25
+credited/12
+credit/371
+creditor/7
+credit's
+creditworthiness
+credo/7
+credulity/43
+credulous/51
+credulousness/7
+creedal
+creed/169
+creeds
+creed's
+creekside
+creek/7
+Creek/7
+creel/26
+Cree/56
+creeper/6
+creepily
+creepiness/7
+creep/227
+creepy/177
+Creigh/6
+Creight/6
+Creighton/6
+cremate/15
+cremation/6
+crematoria
+crematorium/7
+crematory/9
+creme/9
+crenelate/15
+crenelation/6
+Creole/7
+creole/7
+Creon/6
+creosote/26
+crepe/26
+crept
+crescendoed
+crescendoing
+crescendo/186
+crescent/7
+cress/9
+crestfallenness/6
+crestfallen/28
+cresting/6
+crestless
+crest/26
+Crestview/6
+cretaceous
+Cretaceously/6
+Cretaceous/19
+Cretan/9
+Crete/6
+cretinism/7
+cretin/7
+cretinous
+cretonne/7
+crevasse/26
+crevice/7
+crew/26
+crewel/7
+crewelwork/7
+crewman/6
+crewmen
+cribbage/7
+cribbed
+cribber/7
+cribbing/6
+crib/7
+Crichton/6
+cricketer/6
+cricket/49
+crick/26
+Crick/6
+cried/169
+crier/266
+cries/169
+Crimea/6
+Crimean
+crime/26
+criminality/7
+criminalization/169
+criminalize/372
+criminal/65
+criminologist/7
+criminology/7
+crimper/6
+crimp/31
+crimson/26
+cringer/6
+cringe/31
+crinkle/17
+crinkly/228
+Crin/6
+crinoline/7
+cripple/49
+crippler/6
+crippling/19
+Crisco/6
+crises
+crisis/6
+Cris/6
+crisper/6
+crispiness/7
+crispness/7
+crisp/77
+crispy/98
+criss
+crisscross/17
+Crissie/6
+Crissy/6
+Cristabel/6
+Cristal/6
+Crista/6
+Cristen/6
+Cristian/6
+Cristiano/6
+Cristie/6
+Cristi/6
+Cristina/6
+Cristine/6
+Cristin/6
+Cristionna/6
+Cristobal/6
+Cristy/6
+criteria
+criterion/6
+criticality
+critically/12
+criticalness/6
+critical/28
+criticism/7
+criticized/12
+criticize/23
+criticizer/6
+criticizes/14
+criticizingly/9
+criticizing/10
+critic/7
+critique/26
+critter/7
+Cr/6
+croaker/6
+croak/23
+croaky/54
+Croatia/6
+Croatian/9
+Croat/7
+Croce/6
+crocheter/6
+crochet/179
+crockery/7
+Crockett/6
+Crockpot/6
+crock/111
+crocodile/7
+crocus/7
+Croesus/7
+crofter/6
+croft/373
+croissant/7
+Croix/6
+Cromwellian
+Cromwell/6
+crone/7
+Cronin/6
+Cronkite/6
+Cronus/6
+crony/7
+crookedness/7
+crooked/33
+Crookes/6
+crookneck/7
+crook/26
+crooner/6
+croon/23
+cropland/7
+crop/7
+cropped
+cropper/7
+cropping
+croquet/26
+croquette/7
+Crosby/6
+crosier/7
+crossarm
+crossbarred
+crossbarring
+crossbar/7
+crossbeam/7
+crossbones
+crossbowman/6
+crossbowmen
+crossbow/7
+crossbred/9
+crossbreed/166
+crosscheck/17
+crosscurrent/7
+crosscut/7
+crosscutting
+crossed/13
+crosses/13
+crossfire/7
+crosshatch/17
+crossing/6
+Cross/6
+crossness/7
+crossover/7
+crosspatch/7
+crosspiece/7
+crosspoint
+crossproduct/9
+crossroad/131
+crossroads/6
+crosstalk/6
+crosstown
+crosswalk/7
+crossway/6
+crosswind/7
+crosswise
+crossword/7
+cross/374
+crotchetiness/6
+crotchet/7
+crotchety/42
+crotchless
+crotch/56
+crouch/17
+croupier/6
+croup/26
+croupy/375
+cro�ton/7
+crowbait
+crowbarred
+crowbarring
+crowbar/7
+crowdedness/6
+crowded/42
+crowd/111
+crowfeet
+crowfoot/6
+crow/26
+Crowley/6
+crowned/12
+crowner/6
+crown/211
+crozier's
+CRT/9
+crucial/19
+crucible/7
+crucifiable
+crucifixion/7
+Crucifixion/7
+crucifix/7
+cruciform/9
+crucify/55
+crudded
+crudding
+cruddy/54
+crudeness/7
+crude/46
+crudit�s
+crudity/7
+crud/80
+cruelness/7
+cruelty/7
+cruel/38
+cruet/7
+cruft
+crufty
+Cruikshank/6
+cruise/23
+cruiser/6
+cruller/7
+crumb/116
+crumble/71
+crumbliness/7
+crumbly/177
+crumby/54
+crumminess/9
+crummy/177
+crump
+crumpet/7
+crumple/17
+crunch/23
+crunchiness/7
+crunchy/98
+crupper/7
+crusade/49
+crusader/6
+cruse/7
+crushable/12
+crusher/6
+crushing/19
+crushproof
+crush/67
+Crusoe/6
+crustacean/7
+crustal
+crust/26
+crustily
+crustiness/7
+crusty/177
+crutch/26
+Crux/6
+crux/7
+Cruz/6
+crybaby/7
+cry/179
+cryogenic/9
+cryogenics/6
+cryostat/6
+cryosurgery/7
+cryptanalysis/6
+cryptanalyst/6
+cryptanalytic
+crypt/120
+cryptic
+cryptically
+cryptogram/7
+cryptographer/7
+cryptographic
+cryptographically
+cryptography/7
+cryptologic
+cryptological
+cryptologist/6
+cryptology/6
+Cryptozoic/6
+crypt's
+crystalline/9
+crystallite/7
+crystallization/48
+crystallized/13
+crystallizes/14
+crystallize/23
+crystallizing/14
+crystallographer/7
+crystallographic
+crystallography/6
+Crystal/6
+crystal/7
+Crysta/6
+Crystie/6
+Cs
+C's
+cs/145
+cs's
+CST
+ct
+CT
+Cthrine/6
+Ct/6
+ctn
+ctr
+Cuba/6
+Cuban/9
+cubbed
+cubbing
+cubbyhole/7
+cuber/6
+cube/7
+cubical/19
+cubicle/7
+cubic/16
+cubism/7
+cubist/7
+cubit/7
+cub/49
+cuboid
+Cuchulain/6
+cuckold/26
+cuckoldry/7
+cuckoo/26
+cucumber/7
+cuddle/17
+cuddly/98
+cu/47
+cudgel/171
+cud/7
+cue/7
+cuff/26
+Cuisinart/6
+cuisine/7
+Culbertson/6
+culinary
+Cullan/6
+cull/31
+cullender's
+Cullen/6
+culler/6
+Culley/6
+Cullie/6
+Cullin/6
+Cull/72
+Cully/6
+culminate/15
+culmination/6
+culotte/9
+culpability/7
+culpable/45
+culpableness/6
+culpably
+culpa/7
+culprit/7
+cultism/7
+cultist/7
+cultivable
+cultivated/12
+cultivate/376
+cultivation/6
+cultivator/7
+cult/7
+cultural/19
+cultured/12
+culture/26
+Culver/7
+culvert/7
+Cu/6
+cumber/17
+Cumberland/6
+cumbersomeness/7
+cumbersome/28
+cumbrous
+cumin/7
+cummerbund/7
+Cummings
+cumquat's
+cum/9
+cumulate/24
+cumulation/6
+cumulative/19
+cumuli
+cumulonimbi
+cumulonimbus/6
+cumulus/6
+Cunard/6
+cuneiform/9
+cunnilingus/7
+Cunningham/6
+cunningness/6
+cunning/38
+cunt/30
+cupboard/7
+cupcake/7
+Cupertino/6
+cupful/7
+cupidinously
+cupidity/7
+Cupid/6
+cupid/9
+cup/7
+cupola/26
+cupped
+cupping/6
+cupric
+cuprous
+curability/7
+curable/261
+curableness/123
+curably/45
+Curacao/6
+curacy/7
+curare/7
+curate/163
+curative/16
+curatorial
+curator/341
+curbing/6
+curbside
+curb/171
+curbstone/7
+Curcio/6
+curdle/17
+curd/26
+cured/12
+cure/377
+curer/378
+curettage/7
+curfew/7
+curfs
+curiae
+curia/6
+cur/379
+Curie/6
+curie/7
+curiosity/7
+curio/7
+curiousness/7
+curious/33
+Curitiba/6
+curium/7
+curler/7
+curlew/7
+curlicue/26
+curliness/7
+curling/6
+curl/180
+curlycue's
+curly/98
+curmudgeon/65
+Curran/6
+currant/7
+curred/380
+currency's
+currency/281
+current/381
+currently/14
+currentness/6
+Currey/6
+curricle/6
+curricula
+curricular
+curriculum/6
+Currie/6
+currier/6
+Currier/6
+curring/380
+Curr/6
+currycomb/26
+Curry/114
+curry/111
+cur's
+curs/62
+curse/14
+cursedness/6
+cursed/33
+curse's
+cursive/382
+cursiveness/82
+cursives
+cursor/26
+cursorily
+cursoriness/7
+cursory/42
+curtailer/6
+curtail/8
+curtailment/7
+curtain/26
+Curtice/6
+Curtis/6
+Curt/6
+curtness/7
+curtsey's
+curtsy/26
+curt/33
+curvaceousness/9
+curvaceous/28
+curvature/7
+curved/14
+curved's
+curve/26
+curvilinearity/6
+curvilinear/19
+curving/6
+curvy/54
+cushion/26
+Cushman/6
+cushy/54
+cuspid/7
+cuspidor/7
+cusp/7
+cussedness/6
+cussed/28
+cuss/137
+cusses/278
+cussing/278
+cuss's
+custard/7
+Custer/6
+custodial
+custodianship/7
+custodian/7
+custody/7
+customarily
+customariness/6
+customary/144
+customer/6
+customhouse/9
+customization/7
+customize/67
+custom/96
+cutaneous/19
+cutaway/7
+cutback/7
+cuteness/7
+cute/46
+cutesy/54
+cuticle/7
+cutlass/7
+cutler/7
+cutlery/7
+cutlet/7
+cut/80
+cutoff/7
+cutout/7
+cutter/7
+cutthroat/7
+cutting/65
+cuttlebone/7
+cuttlefish/7
+cuttle/6
+cutup/7
+cutworm/7
+Cuvier/6
+Cuzco/6
+CV
+cw
+cwt
+Cyanamid/6
+cyanate/6
+cyanic
+cyanide/26
+cyan/7
+cyanogen/6
+Cybele/6
+cybercafe/7
+cybercaf�/7
+cybernetic/9
+cybernetics/6
+cyberpunk/9
+cyberspace/9
+Cybill/6
+Cybil/6
+Cyb/6
+cyborg/9
+Cyclades
+cyclamen/7
+cycle/36
+cycler
+cycle's
+cycleway/9
+cyclic
+cyclical/16
+cycling/6
+cyclist/7
+cyclohexanol
+cycloidal
+cycloid/7
+cyclometer/7
+cyclone/7
+cyclonic
+cyclopean
+cyclopedia/7
+cyclopes
+Cyclopes
+cyclops
+Cyclops/6
+cyclotron/7
+cyder/7
+cygnet/7
+Cygnus/6
+cylinder/26
+cylindric
+cylindrical/19
+Cy/6
+cymbalist/7
+cymbal/7
+Cymbre/6
+Cynde/6
+Cyndia/6
+Cyndie/6
+Cyndi/6
+Cyndy/6
+cynical/10
+cynicism/7
+cynic/7
+cynosure/7
+Cynthea/6
+Cynthia/6
+Cynthie/6
+Cynthy/6
+cypher/26
+cypreses
+cypress/7
+Cyprian
+Cypriot/7
+Cyprus/6
+Cyrano/6
+Cyrille/6
+Cyrillic
+Cyrill/6
+Cyrillus/6
+Cyril/6
+Cyrus/6
+cystic
+cyst/7
+cytochemistry/6
+cytochrome/6
+cytologist/7
+cytology/7
+cytolysis/6
+cytoplasmic
+cytoplasm/7
+cytosine/7
+cytotoxic
+CZ
+czarevitch/6
+czarina/7
+czarism/6
+czarist/9
+czarship
+czar/7
+Czech
+Czechoslovakia/6
+Czechoslovakian/9
+Czechoslovak/9
+Czechs
+Czerniak/6
+Czerny/6
+D
+DA
+dabbed
+dabber/7
+dabbing
+dabbler/6
+dabble/23
+dab/9
+Dacca's
+dace/7
+Dacey/6
+dacha/7
+Dachau/6
+dachshund/7
+Dacia/6
+Dacie/6
+Dacron/7
+dactylic/9
+dactyl/7
+Dacy/6
+Dadaism/6
+dadaism/9
+Dadaist/6
+dadaist/9
+Dada/6
+daddy/7
+Dade/6
+dado/165
+dadoes
+dad/7
+Daedalus/6
+Dael/6
+daemonic
+daemon/7
+Daffie/6
+Daffi/6
+daffiness/9
+daffodil/7
+Daffy/6
+daffy/98
+daftness/7
+daft/33
+DAG
+dagger/26
+Dag/6
+Dagmar/6
+Dagny/6
+Daguerre/6
+daguerreotype/26
+Dagwood/6
+Dahlia/6
+dahlia/7
+Dahl/6
+Dahomey/6
+Daile/6
+dailiness/7
+daily/144
+Daimler/6
+daintily
+daintiness/7
+dainty/177
+daiquiri/7
+dairying/6
+dairyland
+dairymaid/7
+dairyman/6
+dairymen
+dairy/304
+dairywoman/6
+dairywomen
+Daisey/6
+Daisie/6
+Daisi/6
+dais/7
+Daisy/6
+daisy/7
+Dakar/6
+Dakotan
+Dakota/7
+Dale/6
+Dalenna/6
+dale/216
+daleth/6
+Daley/6
+Dalhousie/6
+Dalia/6
+Dalian/6
+Dalila/6
+Dali/7
+Dallas/6
+dalliance/7
+dallier/6
+Dalli/7
+Dall/6
+Dallon/6
+dally/23
+Dal/6
+Dalmatia/6
+dalmatian/9
+Dalmatian/7
+Daloris/6
+Dalston/6
+Dalt/6
+Dalton/6
+Daly/6
+damageable
+damaged/12
+damage/49
+damager/6
+damaging/19
+Damara/6
+Damaris/6
+Damascus/6
+damask/26
+dame/7
+Dame/125
+Damian/6
+Damiano/6
+Damien/6
+Damion/6
+Damita/6
+dam/56
+dammed
+damming
+dammit/9
+damnably
+damnation/7
+damnedest/7
+damned/54
+damn/318
+damning/19
+Damocles/6
+Damon/6
+damped/12
+dampener/6
+dampen/242
+damper/6
+dampness/7
+damp/383
+damselfly/7
+damsel/7
+damson/7
+Dana�
+Dana/6
+Danbury/6
+dancelike
+dancer/6
+dance/179
+dandelion/7
+dander/26
+dandify/17
+dandily
+dandle/17
+dandruff/7
+dandy/80
+Danelaw/6
+Danella/6
+Danell/6
+Dane/7
+Danette/6
+danger/165
+Dangerfield/6
+dangerousness/6
+dangerous/28
+dangler/6
+dangle/23
+dangling/19
+dang/23
+Danial/6
+Dania/6
+Danica/6
+Danice/6
+Daniela/6
+Daniele/6
+Daniella/6
+Danielle/6
+Daniel/7
+Danielson/6
+Danie/6
+Danika/6
+Danila/6
+Dani/6
+Danish
+danish/9
+Danita/6
+Danit/6
+dankness/7
+dank/33
+Danna/6
+Dannel/6
+Dannie/6
+Danni/6
+Dannye/6
+Danny/6
+danseuse/7
+Dan/7
+Dante/6
+Danton/6
+Danube/6
+Danubian
+Danville/6
+Danya/6
+Danyelle/6
+Danyette/6
+Danzig/6
+Daphene/6
+Daphna/6
+Daphne/6
+dapperness/6
+dapper/38
+dapple/17
+Dara/6
+Darbee/6
+Darbie/6
+Darb/6
+Darby/6
+Darcee/6
+Darcey/6
+Darcie/6
+Darci/6
+D'Arcy
+Darcy/6
+Darda/6
+Dardanelles
+daredevil/7
+daredevilry/9
+Dareen/6
+Darelle/6
+Darell/6
+Dare/6
+Daren/6
+darer/6
+daresay
+dare/179
+d'Arezzo
+Daria/6
+Darice/6
+Darill/6
+Dari/6
+daringness/6
+daring/28
+Darin/6
+Dario/6
+Darius/6
+Darjeeling/6
+darkener/6
+darken/242
+dark/384
+darkish
+darkly/54
+darkness/7
+darkroom/7
+Darla/6
+Darleen/6
+Darlene/6
+Darline/6
+Darling/6
+darlingness/6
+Darlington/6
+darling/32
+Darlleen/6
+Dar/385
+Darnall/6
+darned/54
+Darnell/6
+darner/6
+darn/23
+darning/6
+Darn/6
+Daron/6
+DARPA/6
+Darrelle/6
+Darrell/6
+Darrel/6
+Darren/6
+Darrick/6
+Darrin/6
+Darrow/6
+Darryl/6
+Darsey/6
+Darsie/6
+d'art
+dartboard/7
+darter/6
+Darth/6
+Dartmouth/6
+dart/49
+Darvon/6
+Darwinian/9
+Darwinism/7
+Darwinist/7
+Darwin/6
+Darya/6
+Daryle/6
+Daryl/6
+Daryn/6
+Dasha/6
+dashboard/7
+dasher/6
+dash/23
+dashiki/7
+dashing/19
+Dasie/6
+Dasi/6
+dastardliness/7
+dastardly/42
+dastard/65
+Dasya/6
+DAT
+database/26
+datafile
+datagram/7
+data/6
+Datamation/6
+Datamedia/6
+dataset/9
+datedly
+datedness
+date/386
+dated/12
+dateless
+dateline/26
+dater/6
+Datha/6
+dative/9
+Datsun/6
+datum/7
+dauber/6
+daub/23
+Daugherty/6
+daughter/65
+Daumier/6
+Daune/6
+daunt/17
+daunted/12
+daunting/19
+dauntlessness/7
+dauntless/28
+dauphin/7
+Davao/6
+Daveen/6
+Dave/6
+Daven/6
+Davenport/6
+davenport/7
+Daveta/6
+Davey/6
+Davida/6
+Davidde/6
+Davide/6
+David/7
+Davidson/6
+Davie/6
+Davina/6
+Davine/6
+Davinich/6
+Davin/6
+Davis/6
+Davita/6
+davit/7
+Dav/72
+Davon/6
+Davy/7
+dawdler/6
+dawdle/23
+Dawes/6
+Dawna/6
+dawn/26
+Dawn/6
+Dawson/6
+daybed/9
+daybreak/7
+daycare/9
+daydreamer/6
+daydream/49
+Dayle/6
+daylight/26
+Day/6
+Dayna/6
+daysack
+day/7
+daytime/7
+Dayton/6
+dazed/28
+daze/17
+dazzler/6
+dazzle/179
+dazzling/19
+db
+DB
+dbl
+dB/6
+DBMS
+DC
+DD
+Ddene/6
+DDS
+DDT
+DE
+deacon/26
+deaconess/7
+deadbeat/7
+deadbolt/9
+deadener/6
+deadening/86
+deaden/52
+deadhead/7
+deadline/26
+deadliness/7
+deadlock/26
+deadly/98
+deadness/6
+deadpanned
+deadpanner
+deadpanning
+deadpan/9
+dead/324
+deadwood/7
+deafening/86
+deafen/387
+deafness/7
+deaf/324
+dealer/6
+dealership/7
+dealing/6
+deallocator
+deal/210
+dealt
+Deana/6
+dean/165
+Deandre/6
+Deane/6
+deanery/7
+Dean/6
+Deanna/6
+Deanne/6
+Deann/6
+deanship/7
+Dearborn/6
+dearness/7
+dearth/6
+dearths
+dear/388
+deary/7
+deassign
+deathbed/7
+deathblow/7
+deathless/19
+deathlike
+deathly/54
+death/86
+deaths
+deathtrap/7
+deathward
+deathwatch/7
+debacle/7
+debarkation/7
+debark/224
+debar/329
+debarment/7
+debarring
+debaser/6
+debatable/12
+debate/389
+debater/6
+debauchedness/6
+debauched/28
+debauchee/7
+debaucher/6
+debauchery/7
+debauch/31
+Debbie/6
+Debbi/6
+Debby/6
+Debee/6
+debenture/7
+Debera/6
+Debian/6
+debilitate/15
+debilitation/6
+debility/7
+Debi/6
+debit/47
+deb/7
+Deb/7
+debonairness/7
+debonair/28
+Deborah/6
+Debora/6
+Debor/6
+debouch/17
+Debra/6
+debrief/301
+debris/6
+debtor/7
+debt/7
+Debussy/6
+d�butante/7
+debut/165
+decade/7
+decadency/9
+decadent/16
+decaffeinate/17
+decaf/9
+decagon/7
+Decalogue/6
+decal/7
+decamp/329
+decampment/7
+decapitate/17
+decapitator/7
+decathlon/7
+Decatur/6
+decay/52
+Decca/6
+Deccan/6
+decease/6
+decedent/7
+deceitfulness/7
+deceitful/28
+deceit/7
+deceived/12
+deceiver/6
+deceives/12
+deceive/23
+deceivingly
+deceiving/12
+decelerate/15
+deceleration/6
+decelerator/7
+December/7
+decency/43
+decennial/16
+decent/390
+deception/7
+deceptiveness/7
+deceptive/28
+decertify/122
+dechlorinate/122
+decibel/7
+decidability/12
+decidable/12
+decidedness/6
+decided/28
+decide/318
+deciduousness/6
+deciduous/28
+decile/7
+deciliter/7
+decimal/65
+decimate/15
+decimation/6
+decimeter/7
+decipherable/44
+decipher/391
+decipherer/6
+decisional
+decisioned
+decisioning
+decision/43
+decisive/68
+decisiveness/43
+deckchair
+decker/6
+Decker/6
+deck/211
+deckhand/9
+decking/6
+Deck/114
+declamation/7
+declamatory
+declarable
+declaration/7
+declaration's/14
+declarative/16
+declarator/7
+declaratory
+declare/36
+declared/12
+declarer/7
+declension/7
+declination/7
+decliner/6
+decline/23
+declivity/7
+Dec/6
+DEC/6
+DECNET
+DECnet/6
+deco
+d�colletage/9
+d�collet�
+decolletes
+decolorising
+decomposability/6
+decomposable/44
+decompose/277
+decompress/164
+decongestant/9
+deconstruction
+deconvolution
+decorated/13
+decorate/24
+decorates/14
+decorating/14
+decoration/48
+decorativeness/6
+decorative/28
+decorator/7
+decorousness/7
+decorousness's/45
+decorous/68
+decor/9
+decorticate/55
+decortication/6
+decorum/7
+decoupage/26
+decouple/224
+decoy/6
+decrease
+decreasing/19
+decreeing
+decree/175
+decremental
+decrement/26
+decrepit
+decrepitude/7
+decriminalization/9
+decriminalize/142
+decry/224
+decrypt/47
+decryption
+DECstation/6
+DECsystem/6
+DECtape/6
+decustomised
+Dedekind/6
+Dede/6
+dedicate/36
+dedicated/19
+dedication/7
+dedicative
+dedicator/7
+dedicatory
+Dedie/6
+Dedra/6
+deduce/31
+deducible
+deductibility/6
+deductible/9
+deduction/7
+deductive/19
+deduct/392
+Deeanne/6
+Deeann/6
+deeded
+Deedee/6
+deeding
+deed/230
+deed's
+deejay/26
+Dee/6
+deem/36
+deemphasis
+Deena/6
+deepen/47
+deepish
+deepness/7
+deep/35
+Deerdre/6
+Deere/6
+deerskin/7
+deer/7
+deerstalker/7
+deerstalking/6
+Deeyn/6
+deface/393
+defacement/7
+defaecate
+defalcate/15
+defalcation/6
+defamation/7
+defamatory
+defamer/6
+defame/90
+defaulter/6
+default/90
+defeated/12
+defeater/6
+defeatism/7
+defeatist/7
+defeat/394
+defecate/15
+defecation/6
+defection/7
+defectiveness/7
+defective/46
+defect/163
+defector/7
+defendant/7
+defended/12
+defenestrate/17
+defenselessness/7
+defenseless/28
+defenses/12
+defense/163
+defensibility/6
+defensible/45
+defensibly/45
+defensiveness/7
+defensive/46
+deference/7
+deferential/19
+deferent/9
+deferrable
+deferral/7
+deferred
+deferrer/7
+deferring
+deffer
+defiance/7
+defiant/19
+defibrillator/6
+deficiency/7
+deficient/16
+deficit/7
+defier/6
+defile/329
+defilement/7
+definable/44
+definably/45
+define/395
+defined/12
+definer/7
+definite/68
+definiteness/43
+definitional
+definition/48
+definitiveness/6
+definitive/46
+defis
+deflate/396
+deflationary
+deflation/6
+deflect/64
+deflected/12
+deflection/7
+deflector/7
+defocus
+defocussing
+Defoe/6
+defog
+defogger/9
+defoliant/7
+defoliator/7
+deformational
+deform/277
+deformed/12
+deformity/7
+defrauder/6
+defraud/242
+defrayal/7
+defroster/6
+defrost/90
+deftness/7
+deft/33
+defunct/9
+defying/19
+defy/52
+def/331
+deg
+Degas/6
+degassing
+degauss/47
+degeneracy/7
+degenerateness/6
+degenerate/28
+degrade/277
+degradedness/6
+degraded/28
+degrading/19
+degrease
+degree/7
+degum
+Dehlia/6
+dehumanize
+dehydrator/7
+deicer/6
+deice/90
+deictic
+Deidre/6
+deification/6
+deify/15
+deign/17
+Deimos/6
+Deina/6
+Deirdre/7
+deistic
+deist/7
+Deity/6
+deity/7
+deja
+deject/17
+dejectedness/6
+dejected/28
+dejection/7
+Dejesus/6
+DeKalb/6
+DeKastere/6
+Delacroix/6
+Delacruz/6
+Delainey/6
+Dela/6
+Delaney/6
+Delano/6
+Delawarean/7
+Delaware/7
+delay/81
+delayer/224
+Delbert/6
+Delcina/6
+Delcine/6
+delectableness/6
+delectable/144
+delectably
+delectation/7
+delegable
+Deleon/6
+deleted/12
+deleteriousness/6
+deleterious/28
+delete/396
+deletion/6
+delfs
+Delft/6
+delft/7
+delftware/9
+Delgado/6
+Delhi/6
+Delia/6
+deliberateness/7
+deliberate/397
+deliberativeness/6
+deliberative/28
+Delibes/6
+delicacy/43
+delicate/68
+delicatenesses
+delicateness/123
+delicates
+delicatessen/7
+deliciousness/7
+delicious/46
+delicti
+delightedness/6
+delighted/28
+delightfulness/6
+delightful/28
+Delilah/6
+Delilahs
+Delila/6
+Delinda/6
+delineate/24
+delineation/6
+delinquency/7
+delinquent/65
+deliquesce/17
+deliquescent
+deliriousness/7
+delirious/28
+delirium/7
+deli/7
+Delius/6
+deliverables
+deliverable/12
+deliver/36
+deliverance/7
+delivered/12
+deliverer/7
+delivery/118
+deliverymen/6
+Della/6
+Dell/6
+dell/7
+Dellwood/6
+Delly/6
+Delmar/6
+Delmarva/6
+Delmer/6
+Delmonico
+Delmore/6
+Delmor/6
+Del/86
+Delora/6
+Delores/6
+Deloria/6
+Deloris/6
+Delphic
+Delphi/6
+Delphine/6
+Delphinia/6
+delphinium/7
+Delphinus/6
+Delta/6
+delta/7
+deltoid/7
+deluder/6
+delude/31
+deluding/19
+deluge/17
+delusional
+delusion/7
+delusiveness/6
+delusive/28
+deluxe
+delve/23
+delver/6
+demagnify/122
+demagogic
+demagogue/26
+demagoguery/7
+demagogy/7
+demander/6
+demand/31
+demandingly
+demanding/12
+demarcate/15
+demarcation/6
+Demavend/6
+demean/17
+demeanor/7
+dementedness/6
+demented/28
+dementia/7
+Demerol/6
+demesne/7
+Demeter/6
+Demetra/6
+Demetre/6
+Demetria/6
+Demetri/7
+Demetrius/6
+demigod/7
+demijohn/7
+demimondaine/7
+demimonde/7
+demineralization/7
+Deming/6
+demise/165
+demit
+demitasse/7
+demitted
+demitting
+Dem/207
+democracy/7
+Democratic
+democratically/12
+democratic/12
+democratization/7
+democratize/31
+democratizes/12
+Democrat/7
+democrat/7
+Democritus/6
+d�mod�
+demo/398
+demographer/7
+demographical/19
+demographic/9
+demography/7
+demolisher/6
+demolish/31
+demolition/7
+demonetization/9
+demoniacal/19
+demoniac/9
+demonic
+demonology/6
+demon/7
+demonstrable/45
+demonstrableness/6
+demonstrably/45
+demonstrate/24
+demonstration/6
+demonstrativenesses
+demonstrativeness/135
+demonstratives
+demonstrative/161
+demonstrator/7
+demoralization/6
+demoralizer/6
+demoralizing/19
+DeMorgan/6
+Demosthenes/6
+demote/399
+demotic/9
+Demott/6
+demount/277
+Dempsey/6
+demulcent/9
+demultiplex
+demureness/7
+demure/28
+demurral/7
+demurred
+demurrer/7
+demurring
+demur/228
+demythologization/6
+demythologize/164
+den
+Dena/6
+dendrite/7
+Deneb/6
+Denebola/6
+Deneen/6
+Dene/6
+Deng/6
+dengue/7
+deniable/12
+denial/7
+Denice/6
+denier/6
+denigrate/24
+denigration/6
+denim/7
+Denise/6
+Deni/7
+denizen/26
+Den/6
+De/72
+Denmark/6
+Denna/6
+denned
+Dennet/6
+Denney/6
+Dennie/6
+Denni/7
+denning
+Dennison/6
+Denny/6
+denominate/130
+denominational/19
+denote/277
+denouement/7
+denounce/27
+denouncement/7
+denouncer/6
+dense/400
+densely
+denseness/7
+densitometer/7
+densitometric
+densitometry/6
+density/7
+dens/54
+dental/16
+dentifrice/7
+dentine's
+dentin/7
+dent/401
+dentistry/7
+dentist/7
+dentition/7
+dent's
+denture/43
+denuclearize/17
+denudation/7
+denude/47
+denuder/6
+denunciate/24
+denunciation/6
+Denver/6
+denying/19
+Deny/6
+Denys
+Denyse/6
+deny/23
+deodorant/7
+deodorization/7
+deodorize/23
+deodorizer/6
+Deon/6
+Deonne/6
+deoxyribonucleic
+depart/329
+departmentalization/7
+departmentalize/17
+departmental/19
+department/7
+departure/7
+dependability/7
+dependableness/6
+dependable/42
+dependably
+Dependant/7
+depend/277
+dependence/43
+dependency/7
+dependent/402
+dependent's
+depicted/12
+depicter/6
+depiction/7
+depict/31
+depilatory/9
+deplete/24
+depletion/6
+deplorableness/6
+deplorable/42
+deplorably
+deplorer/6
+deplore/318
+deploring/19
+deployable
+deploy/102
+deployment/48
+depolarize
+deponent/9
+deportation/7
+deportee/7
+deport/403
+deportment/7
+depose
+deposit/36
+depositary/6
+deposition/14
+depositor/48
+depository/7
+depravedness/6
+depraved/28
+deprave/31
+depraver/6
+depravity/7
+deprecate/15
+deprecating/19
+deprecation/6
+deprecatory
+depreciable
+depreciate/24
+depreciating/19
+depreciation/6
+depreciative/19
+depressant/9
+depressible
+depression/7
+depressive/16
+depressor/7
+depress/130
+deprive/17
+depth/6
+depths
+Dept/6
+deputation/7
+depute/17
+deputize/17
+deputy/7
+dequeue
+derail/329
+d�railleur/7
+derailment/7
+derange/329
+derangement/7
+Derbyshire/6
+derby/7
+Derby/7
+dereference/331
+Derek/6
+dereliction/7
+derelict/9
+Derick/6
+deride/81
+deriding/19
+derision/7
+derisiveness/7
+derisive/28
+derisory
+derivable/12
+derivate/129
+derivation/6
+derivativeness/6
+derivative/32
+derive/277
+derived/12
+Derk/6
+Der/6
+dermal
+dermatitides
+dermatitis/7
+dermatological
+dermatologist/7
+dermatology/7
+dermis/7
+Dermot/6
+derogate/24
+derogation/6
+derogatorily
+derogatory
+Derrek/6
+Derrick/6
+derrick/26
+Derrida/6
+derri�re/9
+Derrik/6
+Derril/6
+derringer/7
+Derron/6
+Derry/6
+dervish/7
+Derward/6
+Derwin/6
+Des
+desalinate/15
+desalination/6
+desalinization/7
+desalinize/17
+desalt/224
+descant/6
+Descartes/6
+descendant/7
+descended/404
+descendent's
+descender/6
+descending/278
+descends/278
+descend/23
+descent
+describable/45
+describe/405
+description/7
+descriptiveness/7
+descriptive/46
+descriptor/7
+descry/17
+Desdemona/6
+desecrater/6
+desecrate/294
+desecration/6
+deserter/6
+desertification
+desertion/7
+desert/49
+deservedness/6
+deserved/10
+deserve/406
+deserving/19
+d�shabill�'s
+desiccant/9
+desiccate/15
+desiccation/6
+desiccator/7
+desiderata
+desideratum/6
+designable
+design/36
+designate/24
+designational
+designation/6
+designator/7
+designed/19
+designer/6
+designing/12
+Desi/6
+desirabilia
+desirability's
+desirability/302
+desirableness/7
+desirableness's/12
+desirable/407
+desirably/12
+Desirae/6
+desire/408
+desired/12
+Desiree/6
+desirer/6
+Desiri/6
+desirousness/6
+desirous/28
+desist/17
+desk/7
+desktop/9
+Desmond/6
+Desmund/6
+desolateness/7
+desolate/409
+desolater/6
+desolating/19
+desolation/6
+desorption/6
+despairer/6
+despairing/19
+despair/31
+desperadoes
+desperado/6
+desperateness/7
+desperate/168
+desperation/6
+despicable
+despicably
+despiser/6
+despise/31
+despoil/329
+despoilment/7
+despond
+despondence/9
+despondency/7
+despondent/19
+despotic
+despotically
+despotism/7
+dessert/7
+d'Estaing
+destinate/107
+destination/6
+destine/17
+destiny/7
+destituteness/6
+destitute/351
+destitution/6
+destroy/67
+destroyer/6
+destructibility/43
+destructible/45
+destruction/7
+destructiveness/7
+destructive/28
+destructor/6
+destruct/64
+desuetude/7
+desultorily
+desultoriness/6
+desultory/42
+detachedness/6
+detached/28
+detacher/6
+detach/113
+detachment/7
+detailedness/6
+detailed/28
+detainee/9
+detainer/6
+detain/8
+detainment/7
+d'etat
+detectability/12
+detectable/12
+detectably/12
+detect/160
+detected/12
+detection/7
+detective/7
+detector/7
+d�tente
+detentes
+detention/7
+detergency/6
+detergent/7
+deteriorate/24
+deterioration/6
+determent/7
+determinability/6
+determinable/261
+determinableness/123
+determinacy/45
+determinant/7
+determinateness/123
+determinate/410
+determination/123
+determinativeness/6
+determinative/42
+determinedly
+determinedness/6
+determined/12
+determine/36
+determiner/7
+determinism/7
+determinism's/45
+deterministically
+deterministic/45
+deterred/12
+deterrence/7
+deterrent/65
+deterring
+detersive/9
+deter/40
+deters/130
+detestableness/6
+detestable/42
+detestably
+detestation/7
+dethrone/329
+dethronement/7
+detonable
+detonated/12
+detonate/24
+detonation/6
+detonator/7
+detour/224
+detoxification/6
+detoxify/15
+detox/17
+detract/348
+detractive/19
+d'etre
+detribalize/17
+detrimental/16
+detriment/7
+detritus/6
+Detroit/6
+deuced/19
+deuce/26
+deus
+deuterium/7
+deuteron/6
+Deuteronomy/6
+Deutsch/6
+Deva/6
+Devanagari/6
+Devan/6
+devastate/24
+devastating/19
+devastation/6
+devastator/7
+develop/411
+developed/12
+developer/118
+developmental/19
+development/48
+deviance/7
+deviancy/9
+deviant/65
+deviated/12
+deviate/15
+deviating/12
+deviation/6
+devilishness/7
+devilish/28
+devilment/7
+devilry/7
+devil/267
+deviltry/7
+Devi/6
+Devina/6
+Devin/6
+Devinne/6
+deviousness/7
+devious/28
+devise/412
+deviser/6
+Devland/6
+Devlen/6
+Devlin/6
+Dev/6
+devoice
+devolution/7
+devolve/17
+Devondra/6
+Devonian
+Devon/6
+Devonna/6
+Devonne/6
+Devonshire/6
+Devora/6
+devoted/19
+devotee/7
+devote/107
+devotional/16
+devotion/6
+devourer/6
+devour/23
+devoutness/7
+devout/33
+Devy/6
+Dewain/6
+dewar
+Dewar/6
+Dewayne/6
+dewberry/7
+dewclaw/7
+dewdrop/7
+Dewey/6
+Dewie/6
+dewiness/7
+Dewitt/6
+dewlap/7
+Dew/6
+dew/26
+dewy/98
+Dexedrine/6
+dexes/45
+Dex/6
+dexter
+dexterity/7
+Dexter/6
+dexterousness/7
+dexterous/28
+dextrose/7
+DH
+Dhaka
+Dhaulagiri/6
+dhoti/7
+dhow/7
+DI
+diabase/6
+diabetes/6
+diabetic/9
+diabolic
+diabolicalness/6
+diabolical/28
+diabolism/6
+diachronic/42
+diacritical/16
+diacritic/7
+diadem/26
+diaereses
+diaeresis/6
+Diaghilev/6
+diagnometer/7
+diagnosable/12
+diagnose/88
+diagnosed/12
+diagnosis/6
+diagnostically
+diagnostician/7
+diagnostic/7
+diagnostics/6
+diagonalize/88
+diagonal/16
+diagrammable
+diagrammatic
+diagrammaticality
+diagrammatically
+diagrammed
+diagrammer/7
+diagramming
+diagram/7
+Diahann/6
+dialectal/19
+dialectical/19
+dialectic/7
+dialect/7
+dialed/14
+dialer/6
+dialing/6
+dial/91
+dialogged
+dialogging
+dialog/7
+dials/14
+dialysis/6
+dialyzed/12
+dialyzes
+diam
+diamagnetic
+diameter/7
+diametric
+diametrical/19
+diamondback/7
+diamond/26
+Diana/6
+Diandra/6
+Diane/6
+Dianemarie/6
+Dian/6
+Dianna/6
+Dianne/6
+Diann/6
+Diannne/6
+diapason/7
+diaper/26
+diaphanousness/6
+diaphanous/28
+diaphragmatic
+diaphragm/7
+diarist/7
+Diarmid/6
+diarrheal
+diarrhea/7
+diary/7
+diaspora
+Diaspora/7
+diastase/7
+diastole/7
+diastolic
+diathermy/7
+diathesis/6
+diatomic
+diatom/7
+diatonic
+diatribe/7
+Diaz's
+dibble/26
+dibs
+DiCaprio/6
+dice/31
+dicer/6
+dicey
+dichloride/6
+dichotomization/6
+dichotomize/17
+dichotomous/28
+dichotomy/7
+dicier
+diciest
+dicing/6
+Dickensian/9
+dickens/6
+Dickens/6
+dicker/47
+Dickerson/6
+dickey/7
+dick/413
+Dickie/6
+dickier
+dickiest
+Dickinson/6
+Dickson/6
+Dick/73
+Dicky/6
+dicky's
+dicotyledonous
+dicotyledon/7
+dicta/6
+Dictaphone/7
+dictate/15
+dictation/6
+dictatorialness/6
+dictatorial/28
+dictator/7
+dictatorship/7
+dictionary/7
+diction/7
+dictum/6
+didactically
+didactic/9
+didactics/6
+did/13
+diddler/6
+diddle/23
+Diderot/6
+Didi/6
+didn't
+didoes
+dido/6
+Dido/6
+didst
+die/142
+Diefenbaker/6
+Diego/6
+dieing
+dielectric/7
+diem
+Diem/6
+Diena/6
+Dierdre/6
+diereses
+dieresis/6
+diesel/26
+Diesel's
+dies's
+dies/12
+dietary/9
+dieter/6
+Dieter/6
+dietetic/9
+dietetics/6
+diethylaminoethyl
+diethylstilbestrol/6
+dietitian/7
+diet/49
+Dietrich/6
+Dietz/6
+difference/26
+difference's/45
+differences/45
+differentiability
+differentiable
+differential/65
+differentiated/12
+differentiate/15
+differentiation/6
+differentiator/7
+differentness
+different/51
+differ/23
+difficile
+difficult/19
+difficulty/7
+diffidence/7
+diffident/19
+diffract/17
+diffraction/7
+diffractometer/7
+diffuseness/7
+diffuse/414
+diffuser/6
+diffusible
+diffusional
+diffusion/6
+diffusiveness/6
+diffusive/28
+diffusivity/6
+digerati
+digested/44
+digester/6
+digestibility/7
+digestible/45
+digestifs
+digestion/43
+digestive/46
+digest/29
+digger/7
+digging/9
+digitalis/6
+digitalization/7
+digitalized
+digitalizes
+digitalizing
+digital/16
+digitization/6
+digitizer/6
+digitize/23
+digit/7
+dignified/12
+dignify/17
+dignitary/7
+dignity/43
+digram
+digraph/6
+digraphs
+digress/64
+digression/7
+digressiveness/6
+digressive/28
+dig/415
+dihedral
+Dijkstra/6
+Dijon/6
+dike/111
+diker/6
+diktat/7
+Dilan/6
+dilapidate/15
+dilapidation/6
+dilatation/7
+dilated/28
+dilate/24
+dilation/6
+dilatoriness/6
+dilator/7
+dilatory/42
+Dilbert/6
+dilemma/7
+dilettante/7
+dilettantish
+dilettantism/7
+diligence/7
+diligentness/6
+diligent/28
+dilithium
+Dillard/6
+Dillie/6
+Dillinger/6
+dilling/164
+dillis
+Dill/6
+Dillon/6
+dill/26
+dillydally/17
+Dilly/6
+dilly/7
+dilogarithm
+diluent
+diluted/12
+diluteness/6
+dilute/416
+dilution/6
+Di/6
+DiMaggio/6
+dimensionality/6
+dimensional/19
+dimensionless
+dimension/26
+dimer/6
+dime/7
+dimethylglyoxime
+dimethyl/6
+diminished/12
+diminish/417
+diminuendo/7
+diminution/7
+diminutiveness/6
+diminutive/46
+Dimitri/6
+Dimitry/6
+dimity/7
+dimmed/12
+dimmer/7
+dimmest
+dimming
+dimness/7
+dimorphism/6
+dimple/26
+dimply/54
+dim/418
+dimwit/7
+dimwitted
+Dinah/6
+Dina/6
+dinar/7
+diner/6
+dine/9
+dinette/7
+dingbat/7
+ding/47
+dinghy/7
+dingily
+dinginess/7
+dingle/7
+dingoes
+dingo/7
+dingus/7
+dingy/177
+dinky/228
+din/49
+dinned
+dinner/7
+dinnertime/9
+dinnerware/7
+Dinnie/6
+dinning
+Dinny/6
+Dino/6
+dinosaur/7
+dint/26
+diocesan/9
+diocese/7
+Diocletian/6
+diode/7
+Diogenes/6
+Dione/6
+Dionisio/6
+Dionis/6
+Dion/6
+Dionne/6
+Dionysian
+Dionysus/6
+Diophantine/6
+diopter/7
+diorama/7
+Dior/6
+dioxalate
+dioxide/7
+dioxin/9
+diphtheria/7
+diphthong/7
+diplexers
+diploid/9
+diplomacy/7
+diploma/26
+diplomata
+diplomatically
+diplomatic/9
+diplomatics/6
+diplomatist/7
+diplomat/7
+dipodic
+dipody/6
+dipole/7
+dipped
+Dipper/6
+dipper/7
+dipping/9
+dippy/54
+dip/9
+dipsomaniac/7
+dipsomania/7
+dipstick/7
+dipterous
+diptych/6
+diptychs
+Dir
+Dirac/6
+directed/233
+directionality
+directional/16
+direction/43
+directions/14
+directive/7
+directivity/6
+directly/45
+directness/43
+director/48
+directorate/7
+directorial
+directorship/7
+directory/7
+direct/37
+directrix/7
+directs/58
+direful/19
+direness/6
+dire/33
+dirge/26
+Dirichlet/6
+dirigible/9
+dirk/26
+Dirk/6
+dirndl/7
+dirtily
+dirtiness/7
+dirt/7
+dirty/226
+Dis
+disable/419
+disablement/7
+disabler/6
+disabuse
+disadvantaged/42
+disagreeable/9
+disallow/81
+disambiguate/15
+disappointed/19
+disappointing/19
+disarming/19
+disarrange/329
+disastrous/19
+disband/329
+disbandment/7
+disbar/329
+disbarment/7
+disbarring
+disbelieving/19
+disbursal/9
+disburse/8
+disbursement/7
+disburser/6
+discerner/6
+discernibility
+discernible/45
+discernibly
+discerning/19
+discernment/7
+discern/8
+disc/165
+discharged/12
+disciple/26
+discipleship/7
+disciplinarian/7
+disciplinary
+disciplined/12
+discipline/420
+discipliner/6
+disciplines
+disciplining
+disclosed/12
+discography/7
+discolored/204
+discoloreds/12
+discolor/224
+discombobulate/15
+discomfit/47
+discomfiture/7
+disco/207
+discommode/47
+disconcerting/19
+disconnectedness/9
+disconnected/42
+disconnecter/6
+disconnect/164
+disconsolate/220
+discordance/7
+discordant/19
+discord/224
+discorporate/81
+discotheque/7
+discount/277
+discourage/421
+discouragement/7
+discouraging/19
+discoverable/45
+discover/36
+discovered/12
+discoverer/9
+discovery/48
+discreetly/45
+discreetness's/45
+discreetness/7
+discreet/33
+discrepancy/7
+discrepant/19
+discreteness/7
+discrete/168
+discretionary
+discretion/43
+discretization
+discretized
+discriminable
+discriminant/7
+discriminated/12
+discriminate/24
+discriminating/51
+discrimination/123
+discriminator/7
+discriminatory
+discursiveness/9
+discussant/7
+discussed/13
+discusser/6
+discussion/7
+discus/7
+disdainfulness/6
+disdainful/28
+disdain/26
+disease/224
+disembowelment/7
+disembowel/11
+disengage/329
+disfigure/329
+disfigurement/7
+disfranchise/329
+disfranchisement/7
+disgorge
+disgrace/164
+disgracer/6
+disgruntle/11
+disgruntlement/7
+disguised/10
+disguise/164
+disguiser/6
+disgust
+disgusted/19
+disgustful/19
+disgusting/19
+dishabille/7
+disharmonious
+dishcloth/6
+dishcloths
+dishevel/11
+dishevelment/7
+dish/47
+dishonest
+dishonored/12
+dishpan/7
+dishrag/7
+dishtowel/7
+dishwasher/7
+dishwater/7
+disillusion/422
+disillusionment/7
+disinfectant/7
+disinherit
+disinterestedness/7
+disinterested/42
+disinvest/329
+disjoin
+disjointedness/9
+disjunctive/16
+disjunct/423
+disk/81
+diskette/9
+dislike/224
+dislodge/403
+dislodgement/6
+dismalness/6
+dismal/38
+dismantle/329
+dismantlement/7
+dismay/81
+dismayed/12
+dismaying/19
+dis/424
+dismember/403
+dismemberment/7
+dismissive/19
+dismiss/90
+Disneyland/6
+Disney/6
+disoblige/224
+disorderedness/6
+disordered/28
+disorderliness/6
+disorderly/42
+disorder/19
+disorganize
+disorganized/12
+disparagement/7
+disparager/6
+disparage/8
+disparaging/19
+disparateness/6
+disparate/46
+dispatch/331
+dispelled
+dispelling
+dispel/9
+dispensable/45
+dispensary/7
+dispensate/107
+dispensation/6
+dispenser/6
+dispense/67
+dispersal/7
+dispersant/6
+dispersed/19
+disperser/6
+disperse/425
+dispersible
+dispersion/6
+dispersiveness/6
+dispersive/28
+dispirit/17
+displace/329
+display/36
+displayed/12
+displeased/19
+displease/224
+displeasure
+disport
+disposable/9
+disposal/7
+dispose/401
+dispositional
+disposition/43
+disproportional
+disproportionate/122
+disproportionation/6
+disprove/277
+disputable/45
+disputably/45
+disputant/7
+disputation/7
+disputatious/19
+disputed/12
+disputer/6
+dispute/67
+disquieting/19
+disquiet/6
+disquisition/7
+Disraeli/6
+disregardful
+disrepair/6
+disreputableness/6
+disreputable/42
+disrepute/6
+disrespect
+disrupted/12
+disrupter/6
+disrupt/29
+disruption/7
+disruptive/28
+disruptor/6
+dissatisfy
+dissect/47
+dissed
+dissembler/6
+dissemble/23
+disseminate/15
+dissemination/6
+dissension/7
+dissenter/6
+dissent/23
+dissertation/7
+disservice
+disses
+dissever
+dissidence/7
+dissident/7
+dissimilar/9
+dissing
+dissipatedly
+dissipatedness/6
+dissipated/12
+dissipater/6
+dissipate/426
+dissipation/6
+dissociable/45
+dissociate/24
+dissociated/12
+dissociation/6
+dissociative/19
+dissoluble/45
+dissoluteness/7
+dissolute/28
+dissolve/36
+dissolved/12
+dissonance/7
+dissonant/19
+dissuade/31
+dissuader/6
+dissuasive
+dist
+distaff/7
+distal/19
+distance/26
+distantness/6
+distant/28
+distaste
+distemper
+distend
+distension
+distention/7
+distillate/99
+distillation/6
+distillery/7
+distincter
+distinctest
+distinction/7
+distinctiveness/7
+distinctive/28
+distinct/427
+distinctness/43
+distinguishable/45
+distinguishably/45
+distinguish/318
+distinguished/12
+distinguisher/6
+distort/428
+distorted/12
+distorter/6
+distortion/7
+distract/47
+distractedness/6
+distracted/28
+distracting/19
+distrait
+distraught/19
+distress
+distressful
+distressing/19
+distribute/429
+distributed/12
+distributer
+distributional
+distribution/118
+distributiveness/6
+distributive/46
+distributivity
+distributorship/6
+distributor/7
+district/36
+district's
+distrust/224
+disturbance/7
+disturbed/12
+disturber/6
+disturbing/19
+disturb/23
+disulfide/6
+disuse/6
+disyllable/6
+Dita/6
+ditcher/6
+ditch/111
+dither/23
+ditsy/54
+ditto/26
+ditty/26
+Ditzel/6
+ditz/9
+diuresis/6
+diuretic/9
+diurnal/16
+divalent/9
+diva/7
+divan/7
+dived/6
+divergence/7
+divergent/19
+diverge/17
+diver/6
+diverseness/7
+diverse/168
+diversification/6
+diversifier/6
+diversify/294
+diversionary
+diversion/6
+diversity/7
+divert/17
+diverticulitis/7
+divertimento/6
+dive/9
+divestiture/7
+divest/11
+divestment/9
+dividable
+divide/36
+divided/12
+dividend/7
+divider/7
+divination/7
+diviner/6
+divine/430
+divinity/7
+divisibility/43
+divisible/45
+divisional
+division/7
+divisiveness/7
+divisive/28
+divisor/7
+divorc�e/7
+divorce/267
+divorcement/7
+divot/7
+div/431
+divulge/17
+divvy/26
+Dixiecrat/7
+dixieland
+Dixieland/7
+Dixie/6
+Dix/6
+Dixon/6
+dizzily
+dizziness/7
+dizzying/19
+dizzy/226
+DJ
+Djakarta's
+djellabah's
+djellaba/9
+d/432
+Djibouti/6
+DMD
+Dmitri/6
+DMZ
+DNA
+Dnepropetrovsk/6
+Dnepr's
+Dnieper's
+Dniester/6
+Dniren/6
+DOA
+doable
+DOB
+Dobbin/6
+dobbin/7
+Doberman
+Dobro/6
+docent/7
+docile/19
+docility/7
+docker/6
+docket/26
+dock/49
+dockland/7
+dockside/6
+dockworker/9
+dockyard/7
+doc/7
+Doctor
+doctoral
+doctorate/7
+doctor/26
+Doctorow/6
+doctrinaire/9
+doctrinal/19
+doctrine/7
+docudrama/9
+documentary/7
+documentation/7
+documented/12
+document/49
+DOD
+dodder/17
+dodecahedra
+dodecahedral
+dodecahedron/6
+Dode/6
+dodge/23
+Dodge/6
+dodgem/9
+dodger/6
+Dodgson/6
+Dodie/6
+Dodi/6
+Dodington/6
+Dodoma/6
+dodo/7
+Dodson/6
+Dody/6
+DOE
+Doe/6
+doe/7
+doer/135
+does/13
+doeskin/7
+doesn't
+d'oeuvre
+doff/17
+dogcart/7
+dogcatcher/7
+dogeared
+Doge/6
+doge/7
+dogfight/131
+dogfish/7
+dogfought
+doggedness/7
+dogged/28
+doggerel/7
+dogging
+doggone/181
+doggy/80
+doghouse/7
+dogie/7
+doglegged
+doglegging
+dogleg/7
+dogma/7
+dogmatically/12
+dogmatic/9
+dogmatics/6
+dogmatism/7
+dogmatist/7
+dogsbody/6
+dog/7
+dogtooth/6
+Dogtown/6
+dogtrot/7
+dogtrotted
+dogtrotting
+dogwood/7
+dogy's
+Doha/6
+doh's
+doily/7
+doing/135
+Dolby/7
+doldrum/9
+doldrums/6
+doled/278
+dolefuller
+dolefullest
+dolefulness/7
+doleful/28
+Dole/6
+dole/26
+doles/278
+Dolf/6
+doling/278
+dollar/7
+Dolley/6
+Dollie/6
+Dolli/6
+Doll/6
+doll/26
+dollop/26
+Dolly/6
+dolly/26
+dolmen/7
+dolomite/7
+dolomitic
+Dolores/6
+Dolorita/7
+dolorous/19
+dolor/7
+dolphin/7
+Dolph/6
+doltishness/7
+doltish/28
+dolt/7
+domain/7
+dome/26
+Domenic/6
+Domenico/6
+Domeniga/6
+Domesday/6
+domestically
+domesticate/15
+domesticated/12
+domestication/6
+domesticity/7
+domestic/9
+domicile/26
+domiciliary
+dominance/7
+dominant/16
+dominate/24
+domination/6
+dominator/6
+dominatrices
+dominatrix
+domineer/17
+domineeringness/6
+domineering/28
+Dominga/6
+Domingo/6
+Dominguez/6
+Dominica/6
+Dominican/7
+Dominick/6
+Dominic/6
+Dominik/6
+Domini/6
+dominion/7
+Dominique/6
+dominoes
+domino/6
+Domitian/6
+Dom/6
+Donahue/6
+Donald/6
+Donaldson/6
+Donall/6
+Donal/6
+Donalt/6
+Dona/6
+dona/7
+Donatello/6
+donate/24
+donation/6
+donative/6
+Donaugh/6
+Donavon/6
+done/433
+Donella/6
+Donelle/6
+Donetsk/6
+Donetta/6
+dong/26
+dongle/9
+Donia/6
+Donica/6
+Donielle/6
+Donizetti/6
+donkey/7
+Donna/6
+Donnamarie/6
+donned
+Donnell/6
+Donnelly/6
+Donne/6
+Donner/6
+Donnie/6
+Donni/6
+donning
+donnishness/6
+donnish/28
+Donn/114
+donnybrook/7
+Donny/6
+donor/7
+Donovan/6
+don/9
+Don/7
+don't
+donut/7
+donutted
+donutting
+doodad/7
+doodlebug/7
+doodler/6
+doodle/23
+doohickey/7
+Dooley/6
+Doolittle/6
+doom/26
+doomsday/7
+Doonesbury/6
+doorbell/7
+door/26
+doorhandles
+doorkeeper/6
+doorkeep/90
+doorknob/7
+doorman/6
+doormat/7
+doormen
+doornail/6
+doorplate/7
+doors/45
+doorstep/7
+doorstepped
+doorstepping
+doorstop/7
+doorway/7
+dooryard/7
+dopamine
+dopant/6
+dopa/7
+dope/49
+doper/6
+dopey
+dopier
+dopiest
+dopiness/9
+Doppler/6
+Dorado/6
+Doralia/6
+Doralin/6
+Doralyn/6
+Doralynne/6
+Doralynn/6
+Dora/6
+Dorcas
+Dorchester/6
+Doreen/6
+Dorelia/6
+Dorella/6
+Dorelle/6
+Dor�/6
+Dorena/6
+Dorene/6
+Doretta/6
+Dorette/6
+Dorey/6
+Doria/6
+Dorian/6
+Doric
+Dorice/6
+Dorie/6
+Dori/7
+Dorine/6
+Dorisa/6
+Dorise/6
+Dorita/6
+dork/9
+dorky/54
+dormancy/7
+dormant/9
+dormer/6
+dormice
+dormitory/7
+dorm/96
+dormouse/6
+Dorolice/6
+Dorolisa/6
+Doro/6
+Dorotea/6
+Doroteya/6
+Dorothea/6
+Dorothee/6
+Dorothy/6
+Dorree/6
+Dorrie/6
+Dorri/7
+Dorry/6
+dorsal/16
+Dorsey/6
+Dorthea/6
+Dorthy/6
+Dortmund/6
+Dory/6
+dory/7
+DOS
+dosage/7
+dose/6
+dos/17
+Dosi/6
+dosimeter/7
+dosimetry/6
+dossier/7
+dost
+Dostoevsky/6
+DOT
+dotage/7
+dotard/7
+doter/6
+dote/9
+Doti/6
+doting/19
+Dot/6
+dot/91
+Dotson/6
+dotted
+Dottie/6
+Dotti/6
+dottiness/6
+dotting
+Dotty/6
+dotty/98
+do/434
+Douala/6
+Douay/6
+Doubleday/6
+doubled/13
+double/435
+doubleheader/7
+doubleness/6
+doubler/6
+doubles/6
+doublespeak/9
+doublethink/6
+doublet/7
+doubleton/6
+doubling/14
+doubloon/7
+doubly
+doubt/436
+doubted/12
+doubter/7
+doubtfulness/7
+doubtful/28
+doubting/19
+doubtlessness/6
+doubtless/28
+douche/26
+Dougherty/6
+dough/6
+doughnut/7
+doughs
+doughty/54
+doughy/54
+Dougie/6
+Douglas/6
+Douglass
+Doug/6
+Dougy/6
+dourness/7
+Douro/6
+dour/33
+douser/6
+douse/31
+dovecote/7
+Dover/6
+dove/175
+dovetail/26
+dovish
+Dov/114
+dowager/7
+dowdily
+dowdiness/7
+dowdy/177
+dowel/26
+dower/26
+Dow/6
+downbeat/7
+downcast/9
+downdraft/6
+downer/6
+Downey/6
+downfall/125
+downgrade/17
+down/23
+downheartedness/7
+downhearted/28
+downhill/208
+downland
+download/17
+downpipes
+downplay/17
+downpour/7
+downrange
+downrightness/6
+downright/28
+downriver
+Downs
+downscale/17
+downside/9
+downsize/17
+downslope
+downspout/7
+downstage/9
+downstairs
+downstate/208
+downstream
+downswing/7
+downtime/7
+downtowner/6
+downtown/175
+downtrend/6
+downtrodden
+downturn/7
+downwardness/6
+downward/46
+downwind
+downy/54
+dowry/7
+dowse/23
+dowser/6
+doxology/7
+doyenne/7
+doyen/7
+Doyle/6
+Doy/6
+doze
+dozen/437
+dozenths
+dozer/6
+doz/294
+dozy
+DP
+DPs
+dpt
+DPT
+drabbed
+drabber
+drabbest
+drabbing
+drabness/7
+drab/46
+drachma/7
+Draco/6
+draconian
+Draconian
+Dracula/6
+draft/438
+draftee/7
+drafter/7
+draftily
+draftiness/7
+drafting/9
+draftsman/6
+draftsmanship/7
+draftsmen
+draftsperson
+draftswoman
+draftswomen
+drafty/98
+dragged
+dragger/6
+dragging/19
+draggy/54
+drag/7
+dragnet/7
+dragonfly/7
+dragonhead/6
+dragon/7
+dragoon/26
+drainage/7
+drainboard/7
+drained/12
+drainer/6
+drainpipe/7
+drain/49
+Drake/6
+drake/7
+Dramamine/7
+drama/7
+dramatically/12
+dramatical/19
+dramatic/9
+dramatics/6
+dramatist/7
+dramatization/7
+dramatized/12
+dramatizer/6
+dramatize/23
+dramaturgy/6
+Drambuie/6
+drammed
+dramming
+dram/7
+drank
+Drano/6
+draper/6
+drapery/7
+drape/23
+drastic
+drastically
+drat/9
+dratted
+dratting
+Dravidian/6
+drawable
+draw/250
+drawback/7
+drawbridge/7
+drawer/7
+drawing/7
+drawler/6
+drawling/19
+drawl/31
+drawly
+drawn/58
+drawnly
+drawnness
+drawstring/7
+dray/26
+dreadfulness/7
+dreadful/46
+dreadlocks
+dreadnought/7
+dread/31
+dreamboat/7
+dreamed/12
+dreamer/6
+dreamily
+dreaminess/7
+dreaming/19
+dreamland/7
+dreamlessness/6
+dreamless/28
+dreamlike
+dream/49
+dreamworld/9
+dreamy/98
+drearily
+dreariness/7
+drear/9
+dreary/177
+Dreddy/6
+dredge/49
+dredger/6
+Dredi/6
+dreg/7
+Dreiser/6
+Dre/6
+drencher/6
+drench/31
+Dresden/6
+dress/395
+dressage/7
+dressed/12
+dresser/7
+dresser's/14
+dresses/12
+dressiness/7
+dressing/7
+dressmaker/7
+dressmaking/7
+dressy/98
+drew/14
+Drew/6
+Drexel/6
+Dreyfus/6
+Dreyfuss
+dribble/23
+dribbler/6
+driblet/7
+drib/7
+dried/12
+drier/6
+drifter/6
+drifting/19
+drift/23
+driftwood/7
+driller/6
+drilling/6
+drillmaster/7
+drill/49
+drinkable/9
+drink/240
+drinker/6
+dripped
+dripping/7
+drippy/54
+drip/7
+driveler/6
+drivel/23
+driven/42
+driver/6
+drive/193
+driveway/7
+drizzle/26
+drizzling/19
+drizzly/54
+Dr/6
+drogue/7
+drollery/7
+drollness/7
+droll/226
+drolly
+dromedary/7
+Drona/6
+drone/111
+droning/19
+drool/31
+droopiness/7
+drooping/19
+droop/17
+droopy/98
+drophead
+dropkick/9
+droplet/7
+dropout/7
+dropped
+dropper/7
+dropping/7
+dropsical
+drop/7
+dropsy/7
+drosophila/6
+dross/7
+drought/7
+drover/6
+drove/23
+drowner/6
+drown/187
+drowse/17
+drowsily
+drowsiness/7
+drowsy/98
+drubbed
+drubber/7
+drubbing/7
+drub/9
+Drucie/6
+Drucill/6
+Druci/6
+Drucy/6
+drudge/111
+drudger/6
+drudgery/7
+drudging/19
+Drud/6
+drugged
+druggie/228
+drugging
+druggist/7
+Drugi/6
+drugless
+drug/7
+drugstore/7
+druidism/7
+druid/7
+Druid's
+Dru/6
+drumbeat/131
+drumhead/6
+drumlin/7
+drummed
+drummer/7
+drumming
+Drummond/6
+drum/7
+drumstick/7
+drunkard/7
+drunkenness/7
+drunken/28
+drunk/439
+drupe/7
+Drury/6
+Drusie/6
+Drusilla/6
+Drusi/6
+Drusy/6
+druthers
+dryad/7
+Dryden/6
+dryer/7
+dry/430
+dryish
+dryness/7
+drys
+drystone
+drywall/17
+D's
+d's/14
+Dshubba/6
+DST
+DTP
+dualism/7
+dualistic
+dualist/6
+duality/7
+dual/16
+Duane/6
+Dubai/6
+dubbed
+dubber/9
+dubbing/6
+dubbin/7
+Dubcek/6
+Dubhe/6
+dubiety/7
+dubiousness/7
+dubious/28
+Dublin/6
+Dubrovnik/6
+dub/9
+Dubuque/6
+ducal
+ducat/7
+duce/440
+duce's
+Duchamp/6
+duchess/7
+duchy/7
+duckbill/7
+ducker/6
+duck/111
+duckling/7
+duckpins
+duckpond
+duckweed/7
+ducky/80
+ducted/441
+ductile/45
+ductility/7
+ducting/278
+duct/442
+ductless
+duct's/14
+ducts/443
+ductwork/6
+dudder
+dude/7
+dudgeon/7
+dud/26
+Dudley/6
+Dud/6
+duelist/7
+duel/91
+dueness/6
+duenna/7
+due/444
+duet/7
+duetted
+duetting
+duffel/6
+duffer/6
+duff/49
+Duffie/6
+Duff/6
+Duffy/6
+Dugald/6
+dugout/7
+dug/9
+duh
+DUI
+Duisburg/6
+dukedom/7
+duke/26
+Duke/6
+Dukey/6
+Dukie/6
+Duky/6
+Dulcea/6
+Dulce/6
+dulcet/16
+Dulcia/6
+Dulciana/6
+Dulcie/6
+dulcify
+Dulci/6
+dulcimer/7
+Dulcinea/6
+Dulcine/6
+Dulcy/6
+dullard/7
+Dulles/6
+dullness/7
+dull/226
+dully
+dulness's
+Dulsea/6
+Duluth/6
+duly/12
+Du/6
+Dumas
+dumbbell/7
+dumbfound/31
+dumbness/7
+Dumbo/6
+dumb/77
+dumbstruck
+dumbwaiter/7
+dumdum/7
+dummy/26
+Dumont/6
+dumper/135
+dumpiness/7
+dumpling/7
+dump/23
+dumpster/9
+Dumpster/9
+Dumpty/6
+dumpy/177
+Dunant/6
+Dunbar/6
+Duncan/6
+dunce/7
+Dunc/6
+Dundee/6
+dunderhead/7
+Dunedin/6
+dune/7
+dungaree/7
+dungeon/26
+dunghill/7
+dung/26
+Dunham/6
+dunker/6
+dunk/31
+Dunkirk/6
+Dunlap/6
+Dun/6
+dunned
+Dunne/6
+dunner
+dunnest
+dunning
+Dunn/6
+dunno/6
+dun/9
+Dunstan/6
+duodecimal/9
+duodena
+duodenal
+duodenum/6
+duologue/6
+duo/7
+duopolist
+duopoly/6
+dupe/445
+duper/6
+dupion/6
+duple
+duplexer/6
+duplex/111
+duplicability/6
+duplicable
+duplicate/132
+duplication/118
+duplicative
+duplicator/7
+duplicitous
+duplicity/7
+Dupont/7
+DuPont/7
+durability/7
+durableness/6
+durable/144
+durably
+Duracell/6
+durance/7
+Durand/6
+Duran/6
+Durante/6
+Durant/6
+durational
+duration/7
+Durban/6
+D�rer/6
+duress/7
+Durex/6
+Durham/7
+during
+Durkee/6
+Durkheim/6
+Dur/6
+Durocher/6
+durst
+durum/7
+Durward/6
+Duse/6
+Dusenberg/6
+Dusenbury/6
+Dushanbe/6
+dusk/26
+duskiness/7
+dusky/98
+D�sseldorf
+dustbin/7
+dustcart/6
+dustcover
+duster/6
+dustily
+dustiness/7
+dusting/6
+Dustin/6
+dustless
+dustman/6
+dustmen
+dust/49
+dustpan/7
+Dusty/6
+dusty/98
+Dutch/6
+Dutchman/6
+Dutchmen
+dutch/7
+Dutchwoman
+Dutchwomen
+duteous/19
+dutiable
+dutifulness/9
+dutiful/161
+duty/7
+Duvalier/6
+duvet/7
+duxes
+Dvina/6
+Dvor�k/6
+Dwain/6
+dwarfish
+dwarfism/7
+dwarf/446
+Dwayne/6
+dweeb/9
+dweller/7
+dwell/447
+dwelling/7
+dwelt/45
+DWI
+Dwight/6
+dwindle/17
+dyadic
+dyad/7
+Dyana/6
+Dyane/6
+Dyan/6
+Dyanna/6
+Dyanne/6
+Dyann/6
+dybbukim
+dybbuk/7
+dyed/14
+dyeing/6
+dye/91
+dyer/6
+Dyer/6
+dyes/14
+dyestuff/7
+dying/13
+Dyke/6
+dyke's
+Dylan/6
+Dy/6
+Dynah/6
+Dyna/6
+dynamical/19
+dynamic/9
+dynamics/6
+dynamism/7
+dynamiter/6
+dynamite/49
+dynamized
+dynamo/7
+dynastic
+dynasty/7
+dyne/6
+dysentery/7
+dysfunctional
+dysfunction/7
+dyslectic/9
+dyslexia/7
+dyslexically
+dyslexic/9
+dyspepsia/7
+dyspeptic/9
+dysprosium/7
+dystopia/6
+dystrophy/6
+dz
+Dzerzhinsky/6
+E
+ea
+each
+Eachelle/6
+Eada/6
+Eadie/6
+Eadith/6
+Eadmund/6
+eagerness/7
+eager/290
+eagle/26
+eaglet/7
+Eakins/6
+Ealasaid/6
+Eal/6
+Eamon/6
+earache/7
+eardrum/7
+earful/7
+ear/448
+Earhart/6
+earing/6
+earldom/7
+Earle/6
+Earlene/6
+Earlie/6
+Earline/6
+earliness/7
+Earl/6
+earl/7
+earlobe/9
+Early/6
+early/177
+earmark/71
+earmuff/7
+earned/12
+earner/6
+Earnestine/6
+Earnest/6
+earnestness/7
+earnest/46
+earn/431
+earning/6
+earphone/7
+earpieces
+earplug/7
+Earp/6
+earring/7
+earshot/7
+earsplitting
+Eartha/6
+earthbound
+earthed/12
+earthenware/7
+earthiness/7
+earthliness/6
+earthling/7
+earthly/98
+earth/449
+earthmen
+earthmover/6
+earthmoving
+earthquake/26
+earthshaking
+earths/12
+earthward/9
+earthwork/7
+earthworm/7
+earthy/98
+Earvin/6
+earwax/7
+earwigged
+earwigging
+earwig/7
+eased/25
+ease/450
+easel/7
+easement/7
+easer/6
+ease's/147
+eases/147
+easies
+easily/12
+easiness/41
+easing/6
+eastbound
+easterly/9
+Easter/6
+easterner/6
+Easterner/6
+easternmost
+Eastern/90
+eastern/90
+easter/19
+east/214
+Easthampton/6
+easting/6
+Eastland/6
+Eastman/6
+eastward/9
+Eastwick/6
+Eastwood/6
+East/96
+easygoingness/6
+easygoing/42
+easy/264
+eatables
+eatable/12
+eaten/12
+eater/6
+eatery/7
+eating/6
+Eaton/6
+eat/195
+eavesdropped
+eavesdropper/7
+eavesdropping
+eavesdrop/9
+eave/7
+eBay/6
+Eba/6
+Ebba/6
+ebb/17
+EBCDIC
+Ebeneezer/6
+Ebeneser/6
+Ebenezer/6
+Eben/6
+Eberhard/6
+Eberto/6
+Eb/72
+Ebola
+Ebonee/6
+Ebonics
+Ebony/6
+ebony/7
+Ebro/6
+ebullience/7
+ebullient/19
+ebullition/7
+EC
+eccentrically
+eccentricity/7
+eccentric/7
+eccl
+Eccles
+Ecclesiastes/6
+ecclesiastical/19
+ecclesiastic/7
+ECG
+echelon/26
+echinoderm/7
+echo/165
+echoed/14
+echoes/14
+echoic
+echolocation/7
+�clair/7
+�clat/7
+eclectically
+eclecticism/7
+eclectic/9
+eclipse/26
+ecliptic/7
+eclogue/7
+ecocide/7
+ecol
+Ecole/6
+ecologic
+ecological/19
+ecologist/7
+ecology/7
+Eco/6
+econ
+Econometrica/6
+econometricians
+econometric/9
+econometrics/6
+economical/10
+economic/9
+economics/6
+economist/7
+economization
+economize/23
+economizer/6
+economizing/12
+economy/7
+ecosystem/7
+ecru/7
+ecstasy/7
+Ecstasy/9
+ecstatically
+ecstatic/9
+ectoplasm/6
+Ecuadoran/9
+Ecuadorean/9
+Ecuadorian/9
+Ecuador/6
+ecumenical/19
+ecumenicism/7
+ecumenicist/7
+ecumenic/7
+ecumenics/6
+ecumenism/7
+ecumenist/7
+eczema/7
+Eda/6
+Edam/7
+Edan/6
+ed/257
+Edda/6
+Eddie/6
+Eddi/6
+Edd/6
+Eddy/6
+eddy/26
+Edee/6
+Edeline/6
+edelweiss/7
+Ede/6
+edema/7
+edematous
+eden
+Eden/6
+Edgard/6
+Edgardo/6
+Edgar/6
+edge/91
+edgeless
+edger/6
+Edgerton/6
+Edgewater/6
+edgewise
+Edgewood/6
+edgily
+edginess/7
+edging/6
+edgy/98
+edibility/7
+edibleness/7
+edible/144
+edict/7
+Edie/6
+edification/6
+edifice/7
+edifier/6
+edifying/12
+edify/115
+Edik/6
+Edi/140
+Edinburgh/6
+Edin/6
+Edison/6
+editable
+Edita/6
+edited/44
+Editha/6
+Edithe/6
+Edith/6
+edition/7
+editorialist/6
+editorialize/31
+editorializer/6
+editorial/16
+editor/7
+editorship/7
+edit/36
+Ediva/6
+Edlin/6
+Edmond/6
+Edmon/6
+Edmonton/6
+Edmund/6
+Edna/6
+Edouard/6
+EDP
+eds
+Edsel/6
+Edsger/6
+EDT
+Eduard/6
+Eduardo/6
+educability/7
+educable/9
+educated/28
+educate/132
+educationalists
+educational/19
+education/118
+educationists
+educative
+educator/7
+educ/344
+educe/9
+eduction/6
+Eduino/6
+edutainment/9
+Edvard/6
+Edwardian
+Edwardo/6
+Edward/7
+Edwina/6
+Edwin/6
+Ed/451
+Edy/6
+Edythe/6
+Edyth/6
+EEC
+EEG
+eek/9
+eelgrass/6
+eel/7
+e'en
+EEO
+EEOC
+e'er
+eerie/54
+eerily
+eeriness/7
+Eeyore/6
+effaceable/45
+effacement/7
+effacer/6
+efface/8
+effectiveness/43
+effectives
+effective/68
+effector/7
+effect/163
+effectual/68
+effectualness/123
+effectuate/55
+effectuation/6
+effeminacy/7
+effeminate/16
+effendi/7
+efferent/16
+effervesce/17
+effervescence/7
+effervescent/19
+effeteness/7
+effete/28
+efficacious/68
+efficaciousness/123
+efficacy/43
+efficiency/43
+efficient/402
+Effie/6
+effigy/7
+effloresce
+efflorescence/7
+efflorescent
+effluence/7
+effluent/7
+effluvia
+effluvium/6
+effluxion
+efflux/6
+effortlessness/7
+effortless/28
+effort/7
+effrontery/7
+effulgence/7
+effulgent
+effuse/24
+effusion/6
+effusiveness/7
+effusive/28
+EFL
+e/452
+Efrain/6
+Efrem/6
+Efren/6
+EFT
+egad
+egalitarian/45
+egalitarianism/7
+egalitarians
+EGA/6
+Egan/6
+Egbert/6
+Egerton/6
+eggbeater/7
+eggcup/7
+egger/6
+egg/111
+eggheaded/42
+egghead/56
+eggnog/7
+eggplant/7
+eggshell/7
+egis's
+eglantine/7
+egocentrically
+egocentricity/7
+egocentric/9
+egoism/7
+egoistic
+egoistical/19
+egoist/7
+egomaniac/7
+egomania/7
+Egon/6
+Egor/6
+ego/7
+egotism/7
+egotistic
+egotistical/19
+egotist/7
+egregiousness/7
+egregious/28
+egress/26
+egret/7
+Egyptian/9
+Egypt/6
+Egyptology/6
+eh
+Ehrlich/6
+Eichmann/6
+eiderdown/7
+eider/7
+eidetic
+Eiffel/6
+eigenfunction/7
+eigenstate/9
+eigenvalue/7
+eigenvector/7
+eighteen/216
+eighteenths
+eightfold
+eighth/7
+eighths
+eightieths
+eightpence
+eight/7
+eighty/216
+Eileen/6
+Eilis/6
+Eimile/6
+Einsteinian
+einsteinium/7
+Einstein/7
+Eire/6
+Eirena/6
+Eisenhower/6
+Eisenstein/6
+Eisner/6
+eisteddfod/6
+either
+ejaculate/15
+ejaculation/6
+ejaculatory
+ejecta
+ejection/7
+ejector/7
+eject/64
+Ekaterina/6
+Ekberg/6
+eked/14
+eke/17
+EKG
+Ekstrom/6
+Ektachrome/6
+elaborateness/7
+elaborate/148
+elaboration/6
+elaborators
+Elaina/6
+Elaine/6
+Elana/6
+eland/7
+Elane/6
+�lan/6
+Elanor/6
+elans
+elapse/17
+el/63
+elastically/45
+elasticated
+elasticity/7
+elasticize/17
+elastic/9
+elastodynamics
+elastomer/6
+elatedness/6
+elated/28
+elater/6
+elate/294
+elation/6
+Elayne/6
+Elba/7
+Elbe/6
+Elberta/6
+Elbertina/6
+Elbertine/6
+Elbert/6
+elbow/26
+elbowroom/7
+Elbrus/6
+Elden/6
+elderberry/7
+elderflower
+elderliness/6
+elderly/144
+elder/16
+eldest
+Eldin/6
+Eldon/6
+Eldorado's
+Eldredge/6
+Eldridge/6
+Eleanora/6
+Eleanore/6
+Eleanor/6
+Eleazar/6
+electable/12
+elect/36
+elected/12
+electioneer/17
+election/48
+electiveness/6
+elective/46
+electoral/19
+electorate/7
+elector/7
+Electra/6
+electress/6
+electricalness/6
+electrical/28
+electrician/7
+electricity/7
+electric/9
+electrification/6
+electrifier/6
+electrify/115
+electrocardiogram/7
+electrocardiograph/6
+electrocardiographs
+electrocardiography/7
+electrochemical/19
+electrocute/15
+electrocution/6
+electrode/7
+electrodynamics/6
+electrodynamic/16
+electroencephalogram/7
+electroencephalographic
+electroencephalograph/6
+electroencephalographs
+electroencephalography/7
+electrologist/7
+electroluminescent
+electrolysis/6
+electrolyte/7
+electrolytic
+electrolytically
+electrolyze/17
+electro/6
+electromagnetic
+electromagnetically
+electromagnetism/7
+electromagnet/7
+electromechanical
+electromechanics
+electromotive
+electromyograph
+electromyographic
+electromyographically
+electromyography/6
+electronegative
+electronically
+electronic/9
+electronics/6
+electron/7
+electrophoresis/6
+electrophorus/6
+electroplate/17
+electroscope/7
+electroscopic
+electroshock/26
+electrostatic/9
+electrostatics/6
+electrotherapist/6
+electrotype/453
+electroweak
+eleemosynary
+Eleen/6
+elegance/43
+elegant/51
+elegiacal
+elegiac/9
+elegy/7
+elem
+elemental/16
+elementarily
+elementariness/6
+elementary/42
+element/7
+Elena/6
+Elene/6
+Eleni/6
+Elenore/6
+Eleonora/6
+Eleonore/6
+elephantiases
+elephantiasis/6
+elephantine
+elephant/7
+elevated/9
+elevate/15
+elevation/6
+elevator/7
+eleven/140
+elevens/9
+elevenths
+elev/107
+Elfie/6
+elfin/9
+elfish
+elf/6
+Elfreda/6
+Elfrida/6
+Elfrieda/6
+Elga/6
+Elgar/6
+Elianora/6
+Elianore/6
+Elia/7
+Elicia/6
+elicitation/7
+elicit/17
+elide/17
+Elie/6
+eligibility/43
+eligible/230
+Elihu/6
+Elijah/6
+Eli/6
+eliminate/108
+elimination/6
+eliminator/7
+Elinore/6
+Elinor/6
+Eliot/6
+Elisabeth/6
+Elisabet/6
+Elisabetta/6
+Elisa/6
+Elise/6
+Eliseo/6
+Elisha/6
+elision/7
+Elissa/6
+Elita/6
+elite/444
+elitism/7
+elitist/7
+elixir/7
+Elizabethan/9
+Elizabeth/6
+Elizabet/6
+Eliza/6
+Elka/6
+Elke/6
+Elkhart/6
+elk/7
+Elladine/6
+Ella/6
+Ellary/6
+Elle/6
+Ellene/6
+Ellen/6
+Ellerey/6
+Ellery/6
+Ellesmere/6
+Ellette/6
+Ellie/6
+Ellington/6
+Elliot/6
+Elliott/6
+ellipse/7
+ellipsis/6
+ellipsoidal
+ellipsoid/7
+ellipsometer/7
+ellipsometry
+elliptic
+elliptical/16
+ellipticity/6
+Elli/7
+Ellison/6
+Ellissa/6
+ell/7
+Ellswerth/6
+Ellsworth/6
+Ellwood/6
+Elly/6
+Ellyn/6
+Ellynn/6
+Elma/6
+Elmer/6
+Elmhurst/6
+Elmira/6
+elm/175
+Elmo/6
+Elmore/6
+Elmsford/6
+El/86
+Elna/140
+Elnar/6
+Elnath/6
+Elnora/6
+Elnore/6
+elocutionary
+elocutionist/7
+elocution/7
+elodea/9
+Elohim/6
+Eloisa/6
+Eloise/6
+elongate/15
+elongation/6
+Elonore/6
+elopement/7
+eloper/6
+elope/8
+eloquence/7
+eloquent/51
+Elora/6
+Eloy/6
+Elroy/6
+els
+Elsa/6
+Elsbeth/6
+else/6
+Else/6
+Elset/6
+elsewhere
+Elsey/6
+Elsie/6
+Elsi/6
+Elsinore/6
+Elspeth/6
+Elston/6
+Elsworth/6
+Elsy/6
+Eltanin/6
+Elton/6
+eluate/7
+elucidate/24
+elucidation/6
+elude/17
+elusiveness/7
+elusive/28
+elute/454
+elution/6
+Elva/6
+elven
+Elvera/6
+elver/7
+elves/6
+Elvia/6
+Elvina/6
+Elvin/6
+Elvira/6
+elvish
+Elvis/6
+Elvyn/6
+Elwin/6
+Elwira/6
+Elwood/6
+Elwyn/6
+Ely/6
+Elyn/6
+Elys�e/6
+Elysees
+Elyse/6
+Elysha/6
+Elysia/6
+elysian
+Elysian
+Elysium/7
+Elyssa/6
+EM
+emaciate/15
+emaciation/6
+emacs/6
+Emacs/6
+email/26
+Emalee/6
+Emalia/6
+Ema/6
+emanate/24
+emanation/6
+emancipate/15
+emancipation/6
+emancipator/7
+Emanuele/6
+Emanuel/6
+emasculate/15
+emasculation/6
+embalmer/6
+embalm/23
+embank/11
+embankment/7
+embarcadero
+embargoes
+embargo/165
+embark/127
+embarkation/85
+embarrassedly
+embarrassed/12
+embarrassing/19
+embarrassment/7
+embarrass/11
+embassy/7
+embattle/17
+embeddable
+embedded
+embedder
+embedding/7
+embed/9
+embellished/12
+embellisher/6
+embellish/8
+embellishment/7
+ember/7
+embezzle/27
+embezzlement/7
+embezzler/6
+embitter/11
+embitterment/7
+emblazon/11
+emblazonment/7
+emblematic
+emblem/26
+embodier/6
+embodiment/85
+embody/127
+embolden/17
+embolism/7
+embosom
+embosser/6
+emboss/23
+embouchure/7
+embower/17
+embraceable
+embracer/6
+embrace/29
+embracing/19
+embrasure/7
+embrittle
+embrocation/7
+embroiderer/6
+embroider/23
+embroidery/7
+embroilment/7
+embroil/11
+embryologist/7
+embryology/7
+embryonic
+embryo/7
+emceeing
+emcee/56
+Emelda/6
+Emelen/6
+Emelia/6
+Emelina/6
+Emeline/6
+Emelita/6
+Emelyne/6
+emendation/7
+emend/318
+emerald/7
+Emera/6
+emerge/36
+emergence/48
+emergency/7
+emergent/9
+emerita
+emeritae
+emeriti
+emeritus
+Emerson/6
+Emery/6
+emery/26
+emetic/9
+emf/9
+emigrant/7
+emigrate/15
+emigration/6
+�migr�/9
+Emilee/6
+Emile/6
+Emilia/6
+Emilie/6
+Emili/6
+Emiline/6
+Emilio/6
+Emil/6
+Emily/6
+eminence/7
+Eminence/7
+eminent/19
+emirate/7
+emir/7
+emissary/7
+emission/48
+emissivity/7
+emit/9
+emittance/6
+emitted
+emitter/7
+emitting
+Emlen/6
+Emlyn/6
+Emlynne/6
+Emlynn/6
+em/6
+Em/6
+Emmalee/6
+Emmaline/6
+Emmalyn/6
+Emmalynne/6
+Emmalynn/6
+Emma/6
+Emmanuel/6
+Emmeline/6
+Emmerich/6
+Emmery/6
+Emmet/6
+Emmett/6
+Emmey/6
+Emmie/6
+Emmi/6
+Emmit/6
+Emmott/6
+Emmye/6
+Emmy/7
+Emogene/6
+emollient/9
+emolument/7
+Emory/6
+emote/24
+emotionalism/7
+emotionality/6
+emotionalize/17
+emotional/10
+emotionless
+emotion/6
+emotive/19
+empaneled
+empaneling
+empath
+empathetic
+empathetical/19
+empathic
+empathize/17
+empathy/7
+emperor/7
+emphases
+emphasis/6
+emphasize/455
+emphatically/12
+emphatic/12
+emphysema/7
+emphysematous
+empire/7
+empirical/19
+empiricism/7
+empiricist/7
+empiric/7
+emplace/329
+emplacement/7
+employability/135
+employable/302
+employed/12
+employee/7
+employer/7
+employ/102
+employment/456
+emporium/7
+empower/11
+empowerment/7
+empress/7
+emptier/6
+emptily
+emptiness/7
+empty/226
+empyrean/7
+ems/169
+EMT
+emulate/24
+emulation/6
+emulative/19
+emulator/7
+emulsification/6
+emulsifier/6
+emulsify/115
+emulsion/7
+emu/7
+Emylee/6
+Emyle/6
+enabler/6
+enable/23
+enactment/48
+enact/102
+enameler/6
+enamelware/7
+enamel/91
+enamor/17
+en/424
+enc
+encamp/11
+encampment/7
+encapsulate/15
+encapsulation/6
+encase/11
+encasement/7
+encephalitic
+encephalitides
+encephalitis/6
+encephalographic
+encephalopathy/6
+enchain/17
+enchanter/7
+enchant/457
+enchanting/19
+enchantment/85
+enchantress/7
+enchilada/7
+encipherer/6
+encipher/31
+encircle/11
+encirclement/7
+encl
+enclave/26
+enclosed/12
+enclose/17
+enclosure/7
+encoder/6
+encode/179
+encomium/7
+encompass/17
+encore/17
+encounter/17
+encouragement/7
+encourager/6
+encourage/8
+encouraging/19
+encroacher/6
+encroach/8
+encroachment/7
+encrustation/7
+encrust/17
+encrypt/17
+encrypted/12
+encryption/7
+encumbered/12
+encumber/84
+encumbrancer/6
+encumbrance/175
+ency
+encyclical/7
+encyclopaedia's
+encyclopedia/7
+encyclopedic
+encyst/11
+encystment/7
+endanger/11
+endangerment/7
+endear/11
+endearing/19
+endearment/7
+endeavored/12
+endeavorer/6
+endeavor/49
+endemically
+endemicity
+endemic/9
+ender/6
+endgame/6
+Endicott/6
+ending/6
+endive/7
+endlessness/7
+endless/28
+endmost
+endnote/7
+endocrine/9
+endocrinologist/7
+endocrinology/7
+endogamous
+endogamy/6
+endogenous/19
+endomorphism/7
+endorse/27
+endorsement/7
+endorser/6
+endoscope/7
+endoscopic
+endoscopy/7
+endosperm/6
+endothelial
+endothermic
+endow/11
+endowment/7
+endpoint/7
+endue/17
+endungeoned
+endurable/12
+endurably/12
+endurance/7
+endure/88
+enduringness/6
+enduring/28
+endways
+Endymion/6
+end/458
+ENE
+enema/7
+enemy/7
+energetically
+energetic/9
+energetics/6
+energized/12
+energizer/6
+energize/23
+energy/7
+enervate/24
+enervation/6
+enfeeble/11
+enfeeblement/7
+enfilade/26
+enfold/17
+enforceability/6
+enforceable/12
+enforced/19
+enforce/27
+enforcement/7
+enforcer/6
+enforcible/12
+enfranchise/459
+enfranchisement/85
+enfranchiser/6
+engage/127
+engagement/85
+engaging/19
+Engelbert/6
+Engel/7
+engender/17
+engineer/171
+engineering/86
+engine/26
+England/6
+england/90
+Englebert/6
+Englewood/6
+English/111
+Englishman/6
+Englishmen
+Englishwoman/6
+Englishwomen
+Eng/6
+engorge/11
+engorgement/7
+Engracia/6
+engram/7
+engraver/6
+engrave/179
+engraving/6
+engrossed/19
+engrosser/6
+engross/8
+engrossing/19
+engrossment/7
+engulf/11
+engulfment/7
+enhanceable
+enhance/27
+enhancement/7
+enhancer/6
+enharmonic
+Enid/6
+Enif/6
+enigma/7
+enigmatic
+enigmatically
+Eniwetok/6
+enjambement's
+enjambment/7
+enjoinder
+enjoin/17
+enjoyability
+enjoyableness/6
+enjoyable/42
+enjoyably
+enjoy/149
+enjoyment/7
+Enkidu/6
+enlargeable
+enlarge/27
+enlargement/7
+enlarger/6
+enlightened/12
+enlighten/11
+enlightening/12
+enlightenment/7
+enlistee/7
+enlister/6
+enlistment/48
+enlist/102
+enliven/11
+enlivenment/7
+enmesh/11
+enmeshment/7
+enmity/7
+Ennis/6
+ennoble/8
+ennoblement/7
+ennobler/6
+ennui/7
+Enoch/6
+enormity/7
+enormousness/7
+enormous/28
+Enos
+enough
+enoughs
+enplane/17
+enqueue/142
+enquirer/9
+enquiringly
+enrage/17
+enrapture/17
+Enrica/6
+enricher/6
+Enrichetta/6
+enrich/8
+enrichment/7
+Enrico/6
+Enrika/6
+Enrique/6
+Enriqueta/6
+enrobed
+enrollee/7
+enroll/11
+enrollment/7
+ens
+ensconce/17
+ensemble/7
+enshrine/11
+enshrinement/7
+enshroud/17
+ensign/7
+ensilage/26
+enslavement/7
+enslaver/6
+enslave/27
+ensnare/11
+ensnarement/7
+Ensolite/6
+ensue/17
+ensurer/6
+ensure/23
+entailer/6
+entailment/7
+entail/8
+entangle/459
+entanglement/85
+entangler/82
+entente/7
+enter/36
+entered/12
+enterer/6
+enteritides
+enteritis/7
+enterprise/214
+Enterprise/6
+enterpriser/6
+enterprising/19
+entertainer/6
+entertaining/19
+entertainment/7
+entertain/27
+enthalpy/7
+enthrall/11
+enthrallment/7
+enthrone/11
+enthronement/7
+enthuse/17
+enthusiasm/7
+enthusiastically/12
+enthusiastic/12
+enthusiast/7
+enticement/7
+entice/78
+enticing/19
+entire/16
+entirety/7
+entitle/11
+entitlement/7
+entity/7
+entomb/11
+entombment/7
+entomological
+entomologist/9
+entomology/7
+entourage/7
+entr'acte/9
+entrails
+entrainer/6
+entrain/8
+entrancement/7
+entrance/267
+entranceway/6
+entrancing/19
+entrant/7
+entrapment/7
+entrapped
+entrapping
+entrap/40
+entreating/19
+entreat/17
+entreaty/7
+entr�e/9
+entrench/11
+entrenchment/7
+entrepreneurial
+entrepreneur/7
+entrepreneurship/6
+entropic
+entropy/7
+entrust/17
+entry/48
+entryway/7
+entwine/17
+enumerable
+enumerate/460
+enumerated/12
+enumerates
+enumerating
+enumeration's/14
+enumeration/7
+enumerative
+enumerator/7
+enunciable
+enunciated/12
+enunciate/15
+enunciation/6
+enureses
+enuresis/6
+envelope/7
+enveloper/6
+envelopment/7
+envelop/27
+envenom/17
+enviableness/6
+enviable/12
+enviably
+envied/12
+envier/6
+enviousness/7
+envious/28
+environ/11
+environmentalism/7
+environmentalist/7
+environmental/19
+environment/7
+envisage/17
+envision/17
+envoy/7
+envying/19
+envy/111
+enzymatic
+enzymatically
+enzyme/7
+enzymology/6
+Eocene
+EOE
+eohippus/6
+Eolanda/6
+Eolande/6
+eolian
+eon/7
+EPA
+epaulet/7
+�p�e/9
+ephedrine/7
+ephemeral/16
+ephemera/7
+ephemerids
+ephemeris/6
+Ephesian/9
+Ephesians/6
+Ephesus/6
+Ephraim/6
+Ephrayim/6
+Ephrem/6
+epically
+epicenter/7
+epic/7
+Epictetus/6
+Epicurean
+epicurean/9
+epicure/7
+Epicurus/6
+epicycle/7
+epicyclic
+epicyclical/19
+epicycloid/6
+epidemically
+epidemic/7
+epidemiological/19
+epidemiologist/7
+epidemiology/7
+epidermal
+epidermic
+epidermis/7
+epidural
+epigenetic
+epiglottis/7
+epigrammatic
+epigram/7
+epigrapher/6
+epigraph/114
+epigraphs
+epigraphy/7
+epilepsy/7
+epileptic/9
+epilogue/26
+Epimethius/6
+epinephrine/7
+epiphany/7
+Epiphany/7
+epiphenomena
+episcopacy/7
+episcopalian
+Episcopalian/9
+Episcopal/9
+episcopal/19
+episcopate/7
+episode/7
+episodic
+episodically
+epistemic
+epistemological/19
+epistemology/6
+epistle/175
+Epistle/7
+epistolary/9
+epistolatory
+epitaph/165
+epitaphs
+epitaxial/19
+epitaxy/6
+epithelial
+epithelium/7
+epithet/7
+epitome/7
+epitomized/12
+epitomizer/6
+epitomize/23
+epochal/19
+epoch/6
+epochs
+eponymous
+epoxy/17
+epsilon/7
+Epsom/6
+Epstein/6
+equability/7
+equableness/6
+equable/42
+equably
+equaling
+equality/43
+equalization/7
+equalize/179
+equalized/12
+equalizer/6
+equalizes/12
+equal/461
+equanimity/7
+equate/376
+equation/6
+equatorial/9
+equator/7
+equerry/7
+equestrianism/7
+equestrian/9
+equestrienne/7
+equiangular
+equidistant/19
+equilateral/9
+equilibrate/55
+equilibration/6
+equilibrium/85
+equine/9
+equinoctial/9
+equinox/7
+equipage/7
+equipartition/6
+equip/63
+equipment/7
+equipoise/26
+equipotent
+equipped/13
+equipping/14
+equiproportional
+equiproportionality
+equiproportionate
+equitable/45
+equitableness/6
+equitably/45
+equitation/7
+equity/43
+equiv
+equivalence/26
+equivalent/16
+equivocalness/7
+equivocal/10
+equivocate/15
+equivocation/6
+equivocator/7
+Equuleus/6
+ER
+ERA
+eradicable/45
+eradicate/24
+eradication/6
+eradicator/7
+era/7
+Eran/6
+erase/122
+eraser/6
+erasion/6
+Erasmus/6
+eras/67
+Erastus/6
+erasure/7
+Erato/6
+Eratosthenes/6
+erbium/7
+Erda/6
+ere
+Erebus/6
+erect/462
+erectile
+erection/7
+erectness/7
+erector/7
+Erek/6
+erelong
+eremite/7
+Erena/6
+ergo
+ergodic
+ergodicity/6
+ergonomically
+ergonomics/6
+ergonomic/12
+ergophobia
+ergosterol/7
+ergot/7
+erg/7
+Erhard/6
+Erhart/6
+Erica/6
+Ericha/6
+Erich/6
+Ericka/6
+Erick/6
+Erickson/6
+Eric/6
+Ericson's
+Ericsson's
+Eridanus/6
+Erie/7
+Erika/6
+Erik/6
+Erikson/6
+Erina/6
+Erin/6
+Erinna/6
+Erinn/6
+eris
+Eris
+Eritrea/6
+Erlang/6
+Erlenmeyer/6
+Erl/6
+Er/6
+Erma/6
+Ermanno/6
+Ermengarde/6
+Ermentrude/6
+Ermina/6
+ermine/56
+Erminia/6
+Erminie/6
+Ermin/6
+Ernaline/6
+Erna/6
+Ernesta/6
+Ernestine/6
+Ernest/6
+Ernesto/6
+Ernestus/6
+Ernie/6
+Ernst/6
+Erny/6
+erode/17
+erodible
+erogenous
+erosible
+erosional
+erosion/7
+erosiveness/6
+erosive/42
+Eros/7
+erotically
+erotica/6
+eroticism/7
+erotic/9
+errancy/7
+errand/7
+errantry/6
+errant/16
+errata/7
+erratically
+erratic/9
+erratum/7
+err/17
+Errick/6
+erring/10
+Erroll/6
+Errol/6
+erroneousness/6
+erroneous/28
+error/7
+ersatz/9
+Erse/6
+Erskine/6
+erst
+erstwhile
+Ertha/6
+eructation/7
+eruct/17
+erudite/463
+erudition/6
+erupt/64
+eruption/7
+eruptive/16
+Ervin/6
+ErvIn/6
+Erv/6
+Erwin/6
+Eryn/6
+erysipelas/7
+erythrocyte/7
+es
+e's
+Es
+E's
+Esau/6
+escadrille/6
+escalate/345
+escalation/266
+escalator/7
+escallop/26
+escapable/45
+escapade/7
+escapee/7
+escape/113
+escapement/7
+escaper/6
+escapism/7
+escapist/9
+escapology
+escarole/7
+escarpment/7
+eschatology/6
+Escherichia/6
+Escher/6
+eschew/17
+Escondido/6
+escort/26
+escritoire/7
+escrow/26
+escudo/7
+escutcheon/7
+Esdras/6
+ESE
+Eskimo/7
+ESL
+Esma/6
+Esmaria/6
+Esmark/6
+Esme/6
+Esmeralda/6
+esophageal
+esophagi
+esophagus/6
+esoteric
+esoterica
+esoterically
+esp
+ESP
+espadrille/7
+Espagnol/6
+espalier/26
+especial/19
+Esperanto/6
+Esperanza/6
+Espinoza/6
+espionage/7
+esplanade/7
+Esp/6
+Esposito/6
+espousal/7
+espouser/6
+espouse/31
+espresso/7
+esprit/7
+espy/17
+Esq/6
+esquire/26
+Esquire/9
+Esra/6
+Essa/6
+essayer/6
+essayist/7
+essay/49
+essence/7
+Essene/7
+Essen/6
+essentialist/6
+essentially
+essentialness/6
+essential/464
+Essequibo/6
+Essex/6
+Essie/6
+Essy/6
+EST
+established/12
+establisher/6
+establish/133
+establishment/128
+Establishment/7
+Esta/6
+estate/26
+Esteban/6
+esteem/84
+Estela/6
+Estele/6
+Estella/6
+Estelle/6
+Estell/6
+Estel/6
+Esterh�zy/6
+ester/6
+Ester/6
+Estes
+Estevan/6
+Esther/6
+esthete's
+esthetically
+esthetic's
+esthetics's
+estimable/45
+estimableness/6
+estimate/24
+estimating/14
+estimation/6
+estimator/7
+Estonia/6
+Estonian/9
+estoppel
+Estrada/6
+estrange/8
+estrangement/7
+estranger/6
+Estrella/6
+Estrellita/6
+estrogen/7
+estrous
+estrus/7
+est/90
+estuarine
+estuary/7
+et
+ET
+ETA
+Etan/6
+eta/7
+etc
+etcetera/7
+etcher/6
+etch/179
+etching/6
+ETD
+eternalness/7
+eternal/46
+eternity/7
+ethane/7
+Ethan/6
+ethanol/7
+Ethelbert/6
+Ethelda/6
+Ethelind/6
+Etheline/6
+Ethelin/6
+Ethel/6
+Ethelred/6
+Ethelyn/6
+Ethe/6
+etherealness/6
+ethereal/28
+etherized
+Ethernet/7
+ether/7
+ethically/12
+ethicalness/6
+ethical/46
+ethicist/9
+ethic/7
+Ethiopia/6
+Ethiopian/9
+ethnically
+ethnicity/7
+ethnic/9
+ethnocentric
+ethnocentrism/7
+ethnographers
+ethnographic
+ethnography/6
+ethnological
+ethnologist/7
+ethnology/7
+ethnomethodology
+ethological
+ethologist/7
+ethology/7
+ethos/7
+ethylene/7
+Ethyl/6
+ethyl/7
+Etienne/6
+etiologic
+etiological
+etiology/7
+etiquette/7
+Etna/6
+Etruria/6
+Etruscan/7
+Etta/6
+Ettie/6
+Etti/6
+Ettore/6
+Etty/6
+�tude/7
+etymological/19
+etymologist/7
+etymology/7
+EU
+eucalypti
+eucalyptus/7
+Eucharistic
+Eucharist/7
+euchre/26
+euclidean
+Euclid/6
+Eudora/6
+Euell/6
+Eugene/6
+Eugenia/6
+eugenically
+eugenicist/7
+eugenic/9
+eugenics/6
+Eugenie/6
+Eugenio/6
+Eugenius/6
+Eugen/6
+Eugine/6
+Eulalie/6
+Eula/6
+Eulerian/6
+Euler/6
+eulogistic
+eulogist/7
+eulogized/12
+eulogize/23
+eulogizer/6
+eulogy/7
+Eu/6
+Eumenides
+Eunice/6
+eunuch/6
+eunuchs
+Euphemia/6
+euphemism/7
+euphemistic
+euphemistically
+euphemist/6
+euphonious/19
+euphonium/6
+euphony/7
+euphoria/7
+euphoric
+euphorically
+Euphrates/6
+Eurasia/6
+Eurasian/9
+eureka/9
+Euripides/6
+Eur/6
+Eurodollar/7
+Europa/6
+Europeanization/7
+Europeanized
+European/7
+Europe/6
+europium/7
+Eurydice/6
+Eustace/6
+Eustachian/6
+Eustacia/6
+eutectic
+Euterpe/6
+euthanasia/7
+euthenics/6
+evacuate/24
+evacuation/6
+evacuee/7
+evader/6
+evade/67
+Evaleen/6
+evaluable
+evaluate/132
+evaluated/12
+evaluational
+evaluation/118
+evaluative
+evaluator/7
+Eva/6
+evanescence/7
+evanescent
+Evangelia/6
+evangelic
+evangelicalism/7
+Evangelical/9
+evangelical/16
+Evangelina/6
+Evangeline/6
+Evangelin/6
+evangelism/7
+evangelistic
+evangelist/7
+Evangelist/7
+evangelize/17
+Evania/6
+Evan/7
+Evanne/6
+Evanston/6
+Evansville/6
+evaporate/24
+evaporation/6
+evaporative/19
+evaporator/7
+evasion/7
+evasiveness/7
+evasive/28
+Eveleen/6
+Evelina/6
+Eveline/6
+Evelin/6
+Evelyn/6
+Eve/6
+evened
+evener/6
+evenhanded/28
+evening/7
+Evenki/6
+Even/6
+evenness/41
+even/317
+evens
+evensong/7
+eventfulness/7
+eventful/10
+eventide/7
+event/131
+eventuality/7
+eventual/19
+eventuate/17
+Everard/6
+Eveready/6
+Evered/6
+Everest/6
+Everette/6
+Everett/6
+everglade/7
+Everglades
+evergreen/9
+Everhart/6
+everlastingness/6
+everlasting/46
+everliving
+evermore
+EverReady/6
+eve/175
+ever/357
+every
+everybody/6
+everydayness/6
+everyday/42
+everyman
+everyone/7
+everyplace
+everything
+everywhere
+eve's/14
+eves/14
+Evey/6
+evict/17
+eviction/7
+evidence/26
+evidential/19
+evident/16
+Evie/6
+evildoer/7
+evildoing/7
+evilness/7
+evil/38
+evince/17
+Evin/6
+eviscerate/15
+evisceration/6
+Evita/6
+Ev/72
+evocable
+evocate/129
+evocation/6
+evocativeness/6
+evocative/28
+evoke/17
+evolute/99
+evolutionarily
+evolutionary
+evolutionist/7
+evolution/6
+evolve/17
+Evonne/6
+Evvie/6
+Evvy/6
+Evy/6
+Evyn/6
+Ewan/6
+Eward/6
+Ewart/6
+Ewell/6
+ewe/96
+Ewen/6
+ewer/6
+Ewing/6
+exacerbate/15
+exacerbation/6
+exacter/6
+exactingness/6
+exacting/28
+exaction/7
+exactitude/43
+exactly/45
+exactness/43
+exact/77
+exaggerate/24
+exaggerated/28
+exaggeration/6
+exaggerative/19
+exaggerator/7
+exaltation/7
+exalted/19
+exalter/6
+exalt/23
+examen/6
+examination/63
+examination's
+examine/67
+examined/13
+examinees
+examiner/6
+examines/14
+examining/14
+exam/125
+example/26
+exampled/12
+exasperate/15
+exasperated/19
+exasperating/19
+exasperation/6
+Excalibur/6
+excavate/15
+excavation/6
+excavator/7
+Excedrin/6
+exceeder/6
+exceeding/19
+exceed/31
+excelled
+excellence/7
+excellency/7
+Excellency/7
+excellent/19
+excelling
+excel/9
+excelsior/9
+except/64
+exceptionable/12
+exceptionalness/6
+exceptional/10
+exception/465
+excerpter/6
+excerpt/111
+excess/163
+excessiveness/6
+excessive/28
+exchangeable
+exchange/23
+exchanger/6
+exchequer/7
+Exchequer/7
+excise/466
+excision/6
+excitability/7
+excitableness/6
+excitable/42
+excitably
+excitation/7
+excitatory
+excited/19
+excitement/7
+exciter/6
+excite/53
+excitingly
+exciting/12
+exciton/6
+exclaimer/6
+exclaim/23
+exclamation/7
+exclamatory
+exclude/31
+excluder/6
+exclusionary
+exclusioner/6
+exclusion/96
+exclusiveness/7
+exclusive/46
+exclusivity/7
+excommunicate/24
+excommunication/6
+excoriate/15
+excoriation/6
+excremental
+excrement/7
+excrescence/7
+excrescent
+excreta
+excrete/294
+excreter/6
+excretion/6
+excretory/9
+excruciate/55
+excruciating/19
+excruciation/6
+exculpate/15
+exculpation/6
+exculpatory
+excursionist/7
+excursion/7
+excursiveness/7
+excursive/28
+excursus/7
+excusable/261
+excusableness/123
+excusably/45
+excuse/318
+excused/12
+excuser/6
+exec/7
+execrableness/6
+execrable/42
+execrably
+execrate/24
+execration/6
+executable/7
+execute/467
+executer/6
+executional
+executioner/6
+execution/231
+executive/7
+executor/7
+executrices
+executrix/6
+exegeses
+exegesis/6
+exegete/6
+exegetical
+exegetic/9
+exemplariness/6
+exemplar/7
+exemplary/42
+exemplification/6
+exemplifier/6
+exemplify/115
+exemption/7
+exempt/17
+exerciser/6
+exercise/67
+exertion/7
+exert/17
+Exeter/6
+exeunt
+exhalation/7
+exhale/17
+exhausted/19
+exhauster/6
+exhaustible/45
+exhausting/19
+exhaustion/7
+exhaustiveness/7
+exhaustive/28
+exhaust/29
+exhibitioner/6
+exhibitionism/7
+exhibitionist/7
+exhibition/96
+exhibitor/7
+exhibit/64
+exhilarate/24
+exhilarating/19
+exhilaration/6
+exhortation/7
+exhort/31
+exhorter/6
+exhumation/7
+exhume/31
+exhumer/6
+exigence/9
+exigency/7
+exigent/16
+exiguity/7
+exiguous
+exile/26
+existence/7
+existent/45
+existentialism/7
+existentialistic
+existentialist/7
+existential/19
+existents
+exist/17
+exit/26
+exobiology/7
+exocrine
+Exodus/6
+exodus/7
+exogamous
+exogamy/6
+exogenous/19
+exonerate/24
+exoneration/6
+exorbitance/7
+exorbitant/19
+exorcise/17
+exorcism/7
+exorcist/7
+exorcizer/6
+exoskeleton/7
+exosphere/7
+exothermic
+exothermically
+exotica
+exotically
+exoticism/7
+exoticness/6
+exotic/144
+exp
+expandability/6
+expand/67
+expanded/12
+expander/6
+expanse/333
+expansible
+expansionary
+expansionism/7
+expansionist/7
+expansion/6
+expansiveness/9
+expansive/28
+expatiate/15
+expatiation/6
+expatriate/15
+expatriation/6
+expectancy/7
+expectant/16
+expectational
+expectation/7
+expected/161
+expecting/19
+expectorant/9
+expectorate/15
+expectoration/6
+expect/88
+expedience/230
+expediency/43
+expedients
+expedient/51
+expediter/6
+expedite/115
+expeditionary
+expedition/6
+expeditiousness/7
+expeditious/28
+expeditor's
+expellable
+expelled
+expelling
+expel/9
+expendable/9
+expended/12
+expender/6
+expenditure/7
+expend/318
+expense/163
+expensive/68
+expensiveness/43
+experienced/12
+experience/468
+experiencing
+experiential/19
+experimentalism/6
+experimentalist/7
+experimental/19
+experimentation/7
+experimenter/6
+experiment/49
+experted
+experting
+expertise/7
+expertize/47
+expertnesses
+expertness/123
+expert/469
+expert's
+expiable/45
+expiate/15
+expiation/6
+expiatory
+expiration/7
+expired/12
+expire/17
+expiry/7
+explainable/44
+explain/36
+explained/12
+explainer/7
+explanation/7
+explanatory
+expletive/7
+explicable/45
+explicate/24
+explication/6
+explicative/19
+explicitness/7
+explicit/46
+explode/23
+exploded/12
+exploder/6
+exploitation/7
+exploitative
+exploited/12
+exploiter/6
+exploit/470
+exploration/7
+exploratory
+explore/67
+explored/12
+explorer/6
+explosion/7
+explosiveness/7
+explosive/46
+expo/7
+exponential/16
+exponentiate/15
+exponentiation/6
+exponent/7
+exportability
+exportable
+export/36
+exportation/7
+exporter/7
+export's
+expose
+exposed/12
+exposer/6
+exposit/81
+exposition/7
+expositor/7
+expository
+expos/23
+expostulate/15
+expostulation/6
+exposure/7
+expounder/6
+expound/23
+expressed/12
+expresser/6
+express/471
+expressibility/45
+expressible/45
+expressibly/45
+expressionism/7
+expressionistic
+expressionist/9
+expressionless/28
+expression/7
+expressive/68
+expressiveness/7
+expressiveness's/45
+expressway/7
+expropriate/15
+expropriation/6
+expropriator/7
+expulsion/7
+expunge/31
+expunger/6
+expurgated/12
+expurgate/15
+expurgation/6
+exquisiteness/7
+exquisite/46
+ex/9
+ext
+extant
+extemporaneousness/7
+extemporaneous/28
+extempore/9
+extemporization/7
+extemporizer/6
+extemporize/23
+extendability/6
+extendedly
+extendedness/6
+extended/12
+extender/6
+extendibility/6
+extendibles
+extend/23
+extensibility/6
+extensible/45
+extensional/19
+extension/7
+extensiveness/7
+extensive/28
+extensor/7
+extent/7
+extenuate/15
+extenuation/6
+exterior/65
+exterminate/15
+extermination/6
+exterminator/7
+externalities
+externalization/7
+externalize/17
+external/16
+extern/6
+extinct/64
+extinction/7
+extinguishable/45
+extinguish/67
+extinguisher/6
+extirpate/24
+extirpation/6
+extolled
+extoller/6
+extolling
+extol/9
+extort/29
+extorter/6
+extortionate/19
+extortioner/6
+extortionist/7
+extortion/96
+extracellular/19
+extract/160
+extraction/7
+extractive/19
+extractor/7
+extracurricular/9
+extradite/376
+extradition/6
+extragalactic
+extralegal/19
+extramarital
+extramural
+extraneousness/6
+extraneous/28
+extraordinarily
+extraordinariness/6
+extraordinary/144
+extrapolate/24
+extrapolation/6
+extra/9
+extrasensory
+extraterrestrial/9
+extraterritorial
+extraterritoriality/7
+extravagance/7
+extravagant/19
+extravaganza/7
+extravehicular
+extravert's
+extrema
+extremal
+extreme/472
+extremeness/7
+extremism/7
+extremist/7
+extremity/7
+extricable/45
+extricate/15
+extrication/6
+extrinsic
+extrinsically
+extroversion/7
+extrovert/26
+extrude/31
+extruder/6
+extrusion/7
+extrusive
+exuberance/7
+exuberant/19
+exudate/451
+exudation/6
+exude/17
+exultant/19
+exultation/7
+exult/17
+exulting/19
+exurban
+exurbanite/7
+exurbia/7
+exurb/7
+Exxon/6
+Eyck/6
+Eyde/6
+Eydie/6
+eyeball/26
+eyebrow/7
+eyed/42
+eyedropper/7
+eyeful/7
+eye/49
+eyeglass/7
+eyelash/7
+eyeless
+eyelet/26
+eyelid/7
+eyeliner/7
+eyeopener/7
+eyeopening
+eyepiece/7
+eyer/6
+eyeshadow
+eyesight/7
+eyesore/7
+eyestrain/7
+eyeteeth
+eyetooth/6
+eyewash/7
+eyewitness/7
+Eyre/6
+eyrie's
+Eysenck/6
+Ezechiel/6
+Ezekiel/6
+Ezequiel/6
+Eziechiele/6
+Ezmeralda/6
+Ezra/6
+Ezri/6
+F
+FAA
+Fabe/114
+Faberg�/6
+Faber/6
+Fabiano/6
+Fabian/9
+Fabien/6
+Fabio/6
+fable/111
+fabler/6
+fabricate/15
+fabrication/6
+fabricator/7
+fabric/7
+fabulists
+fabulousness/6
+fabulous/28
+facade/26
+face/311
+facecloth
+facecloths
+faceless/42
+faceplate/6
+facer/266
+face's
+facetiousness/7
+facetious/28
+facet/26
+facial/16
+facileness/6
+facile/28
+facilitate/24
+facilitation/6
+facilitator/7
+facilitatory
+facility/7
+facing/7
+facsimileing
+facsimile/56
+factional
+factionalism/7
+faction/7
+factiousness/6
+factious/28
+factitious
+fact/7
+facto
+factoid/9
+factorial/7
+factoring/14
+factoring's
+factorisable
+factorization/7
+factorize/17
+factor/171
+factory/7
+factotum/7
+factuality/6
+factualness/6
+factual/28
+faculty/7
+faddish
+faddist/7
+fadedly
+faded/12
+fadeout
+fader/6
+fade/9
+fading's
+fading/12
+fad/49
+Fae/6
+faerie/7
+Faeroe/6
+faery's
+Fafnir/6
+fagged
+fagging
+faggoting's
+Fagin/6
+fag/7
+fagoting/6
+fagot/171
+Fahd/6
+Fahrenheit/9
+fa�ence/9
+failing's
+failing/10
+fail/71
+faille/7
+failsafe
+failure/7
+Faina/6
+fain/181
+fainter/6
+fainthearted
+faintness/7
+faint/77
+Fairbanks
+Fairchild/6
+faired
+Fairfax/6
+Fairfield/6
+fairgoer/9
+fairground/7
+fairing/7
+fairish
+Fairleigh/6
+fairless
+Fairlie/6
+Fair/6
+Fairmont/6
+fairness's
+fairness/302
+Fairport/6
+fairs
+fair/317
+Fairview/6
+fairway/7
+fairyland/7
+fairy/7
+fairytale
+Faisalabad
+Faisal/6
+faithed
+faithfulness/41
+faithfuls
+faithful/161
+faithing
+faithlessness/7
+faithless/28
+Faith/6
+faiths
+faith's
+faith/12
+fajitas
+faker/6
+fake/23
+fakir/7
+falafel
+falconer/6
+falconry/7
+falcon/96
+Falito/6
+Falkland/7
+Falk/6
+Falkner/6
+fallaciousness/6
+fallacious/28
+fallacy/7
+faller/6
+fallibility/43
+fallible/45
+fallibleness/7
+fallibly/45
+falloff/9
+Fallon/6
+fallopian
+Fallopian/6
+fallout/7
+fallowness/6
+fallow/473
+fall/474
+falsehood/7
+falseness/7
+false/33
+falsetto/7
+falsie/7
+falsifiability/6
+falsifiable/12
+falsification/6
+falsifier/6
+falsify/115
+falsity/7
+Falstaff/6
+falterer/6
+faltering/10
+falter/187
+Falwell/6
+fa/6
+famed/169
+fame/26
+fames/169
+familial
+familiarity/41
+familiarization/7
+familiarized/12
+familiarizer/6
+familiarize/23
+familiarizing/19
+familiarly/12
+familiarness/6
+familiar/46
+family/7
+famine/7
+faming/169
+famish/17
+famously/45
+famousness/6
+famous/28
+fanaticalness/6
+fanatical/28
+fanaticism/7
+fanatic/7
+Fanchette/6
+Fanchon/6
+fancied
+Fancie/6
+fancier/7
+fanciest
+fancifulness/7
+fanciful/28
+fancily
+fanciness/7
+fancying
+fancy/230
+Fancy/6
+fancywork/7
+fandango/7
+Fanechka/6
+fanfare/7
+fanfold/6
+fang/56
+fangled
+Fania/6
+fanlight/7
+Fan/6
+fanned
+Fannie/6
+Fanni/6
+fanning
+fanny/7
+Fanny/7
+fanout
+fan/7
+fantail/7
+fantasia/7
+fantasist/6
+fantasize/31
+fantastical/19
+fantastic/9
+fantasy/26
+Fanya/6
+fanzine/9
+FAQ/7
+Faraday/6
+farad/7
+Farah/6
+Fara/6
+Farand/6
+faraway
+Farber/6
+farce/26
+farcical/19
+fare/7
+farer/6
+farewell/26
+farfetchedness/6
+far/52
+Fargo/6
+Farica/6
+farinaceous
+farina/7
+Farkas/6
+Farlay/6
+Farlee/6
+Farleigh/6
+Farley/6
+Farlie/6
+Farly/6
+farmer/6
+Farmer/6
+farmhand/9
+farmhouse/7
+farming/6
+Farmington/6
+farmland/7
+farm/91
+farmstead/7
+farmworker/9
+Far/86
+farmyard/7
+faro/7
+farragoes
+farrago/6
+Farragut/6
+Farrah/6
+Farrakhan/6
+Farra/6
+Farrand/6
+Farrell/6
+Farrel/6
+farrier/7
+Farris/6
+Farr/6
+farrow/26
+farseeing
+farsightedness/7
+farsighted/28
+farther
+farthermost
+farthest
+farthing/7
+fart/366
+fas
+fascia/7
+fascicle/56
+fasciculate/475
+fasciculation/6
+fascinate/15
+fascinating/19
+fascination/6
+fascism/7
+Fascism's
+fascistic
+Fascist's
+fascist/7
+fashionableness/6
+fashionable/144
+fashionably/12
+fashion/36
+fashioner/7
+fashion's
+Fassbinder/6
+fastback/7
+fastball/9
+fasten/310
+fastener/7
+fastening/7
+fast/476
+fastidiousness/7
+fastidious/28
+fastness/7
+fatalism/7
+fatalistic
+fatalistically
+fatalist/7
+fatality/7
+fatal/16
+fatback/7
+fatefulness/7
+fateful/28
+fate/7
+Fates
+fatheaded/42
+fathead/56
+father/116
+fathered/12
+fatherhood/7
+fatherland/7
+fatherless
+fatherliness/6
+fatherly/42
+Father/7
+fathomable/12
+fathomless
+fathom/57
+fatigued/12
+fatigue/26
+fatiguing/19
+Fatima/6
+fatness/7
+fat/167
+fatso/6
+fatted
+fattener/6
+fatten/179
+fatter
+fattest/6
+fattiness/7
+fatting
+fatty/177
+fatuity/7
+fatuousness/7
+fatuous/28
+fatwa/7
+faucet/7
+Faulknerian
+Faulkner/6
+fault/477
+faultfinder/7
+faultfinding/7
+faultily
+faultiness/7
+faultlessness/7
+faultless/28
+faulty/98
+fauna/7
+Faunie/6
+Faun/6
+faun/7
+Fauntleroy/6
+Faustian
+Faustina/6
+Faustine/6
+Faustino/6
+Faust/6
+Faustus/6
+fauvism/9
+favorableness/135
+favorable/478
+favorably/12
+favoredness/6
+favored's/12
+favored/32
+favorer/82
+favor/479
+favoring/65
+favorings/12
+favorite/41
+favoritism/7
+favors/14
+Fawkes/6
+Fawne/6
+fawner/6
+fawn/49
+Fawnia/6
+fawning/19
+Fawn/6
+fax/26
+Fax/6
+Faydra/6
+Faye/6
+Fayette/6
+Fayetteville/6
+Fayina/6
+Fay/6
+fay/111
+Fayre/6
+Faythe/6
+Fayth/6
+faze/17
+FBI
+FCC
+FD
+FDA
+FDIC
+FDR/6
+fealty/7
+fearfuller
+fearfullest
+fearfulness/7
+fearful/28
+fearlessness/7
+fearless/28
+fear/111
+fearsomeness/6
+fearsome/28
+feasibility/7
+feasibleness/6
+feasible/44
+feasibly/12
+feaster/6
+feast/111
+feater/169
+featherbed
+featherbedding/7
+featherbrain/170
+feathered/12
+feathering/6
+featherless
+featherlight
+Featherman/6
+feathertop
+featherweight/7
+feathery/54
+feather/49
+feat/480
+feats/169
+featureless
+feature/26
+Feb/6
+febrile
+February/7
+fecal
+feces
+fecklessness/6
+feckless/28
+fecundability
+fecundate/15
+fecundation/6
+fecund/45
+fecundity/7
+federalism/7
+Federalist
+federalist/7
+federalization/7
+federalize/17
+Federal/9
+federal/16
+federated/12
+federate/481
+federation/274
+federative/19
+Federica/6
+Federico/6
+FedEx/6
+Fedora/6
+fedora/7
+feds
+Fed/7
+fed/12
+feebleness/7
+feeble/98
+feebly
+feedback/7
+feedbag/7
+feeder/6
+feed/210
+feeding/6
+feedlot/7
+feedstock
+feedstuffs
+feeing
+feeler/6
+feel/210
+feelingly/12
+feeling/218
+feelingness/6
+Fee/6
+fee/56
+feet/6
+feigned/12
+feigner/6
+feign/31
+feint/26
+feisty/54
+Felder/6
+Feldman/6
+feldspar/7
+Felecia/6
+Felicdad/6
+Felice/6
+Felicia/6
+Felicio/6
+felicitate/15
+felicitation/6
+felicitous/51
+felicitousness/6
+felicity/43
+Felicity/6
+Felicle/6
+Felic/6
+Felike/6
+Feliks/6
+feline/16
+Felipa/6
+Felipe/6
+Felisha/6
+Felita/6
+Felix/6
+Feliza/6
+Felizio/6
+fella/9
+fellatio/7
+felled/14
+feller/6
+felling/14
+Fellini/6
+fellness/6
+fellowman
+fellowmen
+fellow/116
+fellowshipped
+fellowshipping
+fellowship/7
+fell/482
+feloniousness/6
+felonious/28
+felon/7
+felony/7
+felt/17
+felting/6
+Fe/6
+female/444
+femaleness/7
+feminineness/6
+feminine/46
+femininity/7
+feminism/7
+feminist/7
+femme/7
+femoral
+fem/9
+femur/7
+fenced/12
+fencepost/6
+fencer/6
+fence/91
+fencing/6
+fender/266
+fend/265
+Fenelia/6
+fenestration/186
+Fenian/6
+fenland/6
+fen/7
+fennel/7
+Fenwick/6
+Feodora/6
+Feodor/6
+feral
+Ferber/6
+Ferdie/6
+Ferdinanda/6
+Ferdinande/6
+Ferdinand/6
+Ferdinando/6
+Ferd/6
+Ferdy/6
+fer/483
+Fergus/6
+Ferguson/6
+Ferlinghetti/6
+Fermat/6
+fermentation/7
+fermented
+fermenter
+ferment/484
+fermenting
+Fermi/6
+fermion/7
+fermium/7
+Fernanda/6
+Fernande/6
+Fernandez/6
+Fernandina/6
+Fernando/6
+Ferne/6
+fernery/6
+Fern/6
+fern/7
+ferny/54
+ferociousness/7
+ferocious/28
+ferocity/7
+Ferrari/6
+Ferraro/6
+Ferreira/6
+Ferrell/6
+Ferrel/6
+Ferrer/6
+ferreter/6
+ferret/111
+ferric
+ferris
+Ferris
+ferrite/6
+ferro
+ferroelectric
+ferromagnetic
+ferromagnet/6
+ferrous
+ferrule/26
+ferryboat/7
+ferryman/6
+ferrymen
+ferry/26
+fertileness/6
+fertile/28
+fertility/43
+fertilization/48
+fertilized/12
+fertilizer/6
+fertilizes/14
+fertilize/23
+ferule/26
+fervency/7
+fervent/19
+fervidness/6
+fervid/28
+fervor/7
+fess/485
+Fess/6
+fess's
+festal/9
+fester/47
+festival/7
+festiveness/7
+festive/28
+festivity/7
+festoon/26
+fest/486
+fetal
+feta/7
+fetcher/6
+fetching/19
+fetch/23
+feted
+f�te/7
+fetich's
+fetidness/7
+fetid/28
+feting
+fetishism/7
+fetishistic
+fetishist/7
+fetish/7
+fetlock/7
+fetter's
+fetter/180
+fettle/17
+fettling/6
+fettuccine/9
+fetus/7
+feudalism/7
+feudalistic
+feudal/19
+feudatory/6
+feud/26
+feverishness/7
+feverish/28
+fever/26
+fewness/7
+few/177
+Fey/6
+Feynman/6
+fey/54
+fez/6
+Fez/6
+fezzes
+ff
+FHA
+fianc�e/9
+fianc�/7
+Fianna/6
+Fiann/6
+fiascoes
+fiasco/6
+Fiat/6
+fiat/7
+fibbed
+fibber/7
+fibbing
+fiberboard/7
+fiber/170
+fiberfill/9
+Fiberglas/6
+fiberglass/26
+Fibonacci/6
+fibrillate/15
+fibrillation/6
+fibril/7
+fibrin/7
+fibroblast/7
+fibroid/9
+fibroses
+fibrosis/6
+fibrousness/6
+fibrous/28
+fib/96
+fibulae
+fibula/6
+fibular
+FICA
+fices
+fiche/7
+Fichte/6
+fichu/7
+fickleness/7
+fickle/98
+ficos
+fictionalization/7
+fictionalize/17
+fictional/19
+fiction/7
+fictitiousness/6
+fictitious/28
+fictive/19
+ficus
+fiddle/91
+fiddler/6
+fiddlestick/7
+fiddly
+fide/278
+Fidela/6
+Fidelia/6
+Fidelio/6
+fidelity/43
+Fidelity/6
+Fidel/6
+fidget/17
+fidgety
+Fidole/6
+Fido/6
+fiducial/19
+fiduciary/7
+fiefdom/9
+fief/7
+fielded
+fielder/123
+fielding
+Fielding/6
+Field/131
+fieldstone/6
+fieldworker/6
+fieldwork/96
+field/487
+fiendishness/6
+fiendish/28
+fiend/7
+fierceness/7
+fierce/33
+fierily
+fieriness/7
+fiery/98
+fie/9
+fies/169
+fiesta/7
+fife/49
+fifer/6
+Fifi/6
+Fifine/6
+FIFO
+fifteen/488
+fifteenths
+fifths
+fifth/19
+fiftieths
+fifty/216
+Figaro/6
+figged
+figging
+fightback
+fighter/43
+fighting/230
+fight/210
+figment/7
+fig/489
+Figueroa/6
+figural
+figuration/276
+figurativeness/6
+figurative/28
+figure/490
+figurehead/7
+figurer/7
+figure's
+figurine/7
+figuring/9
+Fijian/7
+Fiji/6
+filamentary
+filament/7
+filamentous
+Filberte/6
+Filbert/6
+filbert/7
+Filberto/6
+filch/17
+filed/190
+file/491
+filename/7
+filer/492
+files/190
+filet's
+filial/10
+Filia/6
+filibusterer/6
+filibuster/49
+Filide/6
+filigreeing
+filigree/56
+filing/190
+filings
+Filipino/7
+Filip/6
+Filippa/6
+Filippo/6
+fill/493
+filled/12
+filler/7
+filleting/6
+fillet/26
+filling/6
+fillip/26
+Fillmore/6
+filly/7
+filmdom/6
+Filmer/6
+filminess/7
+filming/6
+filmmaker/9
+Filmore/6
+film/26
+filmstrip/7
+filmy/98
+Filofax/9
+filtered/12
+filterer/6
+filter/66
+filthily
+filthiness/7
+filth/6
+filths
+filthy/226
+filtrated/45
+filtrate/269
+filtrates/45
+filtrating/45
+filtration/43
+finagler/6
+finagle/23
+finale/7
+finalist/7
+finality/7
+finalization/7
+finalize/17
+final/16
+Fina/6
+financed/14
+finance/171
+finances/14
+financial/19
+financier/26
+financing/14
+Finch/6
+finch/7
+findable/12
+find/193
+finder/6
+finding/6
+Findlay/6
+Findley/6
+fine/494
+finely
+fineness/7
+finery/48
+fine's
+finespun
+finesse/26
+fingerboard/7
+fingerer/6
+fingering/6
+fingerless
+fingerling/6
+fingernail/7
+fingerprint/26
+finger/211
+fingertip/7
+finial/7
+finical
+finickiness/9
+finicky/98
+fining/6
+finished/13
+finisher/6
+finishes/14
+finish/179
+finis/7
+finite/469
+finitely/169
+finiteness/495
+fink/26
+Finland/6
+Finlay/6
+Finley/6
+Fin/6
+Finnbogadottir/6
+finned
+Finnegan/6
+finner
+finning
+Finnish
+Finn/7
+finny/54
+fin/172
+Fiona/6
+Fionna/6
+Fionnula/6
+fiord's
+Fiorello/6
+Fiorenze/6
+Fiori/6
+f/496
+firearm/7
+fireball/7
+fireboat/6
+firebomb/26
+firebox/7
+firebrand/7
+firebreak/7
+firebrick/7
+firebug/7
+firecracker/7
+firedamp/7
+fired/12
+firefight/210
+firefly/7
+Firefox/6
+fireguard/6
+firehouse/7
+firelight/497
+fireman/6
+firemen
+fire/7
+fireplace/7
+fireplug/7
+firepower/7
+fireproof/17
+firer/6
+firesafe
+fireside/7
+Firestone/6
+firestorm/7
+firetrap/7
+firetruck/9
+firewall/9
+firewater/7
+firewood/7
+firework/7
+firing/6
+firkin/6
+firmament/7
+firmer
+firmest
+firm/498
+firmly/45
+firmness/7
+firm's
+firmware/7
+firring
+firstborn/9
+firsthand
+first/16
+firth/6
+firths
+fir/499
+fiscal/16
+Fischbein/6
+Fischer/6
+fishbowl/7
+fishcake/9
+fisher/6
+Fisher/6
+fisherman/6
+fishermen/6
+fishery/7
+fishhook/7
+fishily
+fishiness/7
+fishing/6
+fish/91
+Fishkill/6
+fishmeal
+fishmonger/7
+fishnet/7
+fishpond/7
+fishtail/26
+fishtanks
+fishwife/6
+fishwives
+fishy/98
+Fiske/6
+Fisk/6
+fissile
+fissionable/9
+fission/57
+fissure/26
+fistfight/7
+fistful/7
+fisticuff/7
+fist/26
+fistula/7
+fistulous
+Fitchburg/6
+Fitch/6
+fitfulness/7
+fitful/28
+fitments
+fitness/41
+fits/500
+fit's/370
+fitted/13
+fitter/7
+fittest
+fitting/13
+fittingly
+fittingness/6
+fittings
+fit/337
+Fitzgerald/6
+Fitz/6
+Fitzpatrick/6
+Fitzroy/6
+fivefold
+five/175
+fiver/6
+fixable
+fixate/24
+fixatifs
+fixation/6
+fixative/9
+fixedness/6
+fixed/28
+fixer/7
+fixes/45
+fixing/7
+fixity/7
+fixture/7
+fix/180
+Fizeau/6
+fizzer/6
+fizzle/17
+fizz/31
+fizzy/54
+fjord/7
+FL
+flabbergast/17
+flabbergasting/19
+flabbily
+flabbiness/7
+flabby/98
+flab/7
+flaccidity/7
+flaccid/19
+flack/26
+flagella/6
+flagellate/15
+flagellation/6
+flagellum/6
+flagged
+flaggingly/12
+flagging/65
+flagman/6
+flagmen
+flag/7
+flagon/7
+flagpole/7
+flagrance/7
+flagrancy/7
+flagrant/19
+flagship/7
+flagstaff/7
+flagstone/7
+flail/26
+flair/7
+flaker/6
+flake/7
+flakiness/7
+flak/111
+flaky/98
+Fla/6
+flamb�/81
+flambeing
+flambes
+flamboyance/7
+flamboyancy/7
+flamboyant/16
+flamenco/7
+flamen/6
+flameproof/17
+flamer/123
+flame's
+flame/367
+flamethrower/7
+flamingo/7
+flaming/19
+flammability/43
+flammable/230
+flam/501
+Flanagan/6
+Flanders/6
+flange/26
+flanker/6
+flank/49
+flan/7
+flannel/26
+flannelet/7
+flannelette's
+flapjack/7
+flap/7
+flapped
+flapper/7
+flapping
+flaps/6
+flare/17
+flareup/9
+flaring/19
+flashback/7
+flashbulb/7
+flashcard/9
+flashcube/7
+flasher/6
+flashgun/9
+flashily
+flashiness/7
+flashing/6
+flash/91
+flashlight/7
+flashy/98
+flask/7
+flatbed/9
+flatboat/7
+flatcar/7
+flatfeet
+flatfish/7
+flatfoot/26
+flathead/6
+flatiron/7
+flatland/208
+flatmate/6
+flat/32
+flatness/7
+flatted
+flattener/6
+flatten/31
+flatter/23
+flatterer/6
+flattering/10
+flattery/7
+flattest/6
+flatting
+flattish
+Flatt/6
+flattop/7
+flatulence/7
+flatulent/19
+flatus/7
+flatware/7
+flatworm/7
+Flaubert/6
+flaunting/19
+flaunt/17
+flautist/7
+flavored/12
+flavorer/6
+flavorful
+flavoring/6
+flavorless
+flavor/91
+flavorsome
+flaw/26
+flawlessness/7
+flawless/28
+flax/125
+flaxseed/6
+flayer/6
+flay/23
+fleabag/7
+fleabites
+flea/7
+fleawort/6
+fleck/111
+Fledermaus/6
+fledged/12
+fledge/17
+fledgling/7
+fleecer/6
+fleece/49
+fleeciness/7
+fleecy/98
+fleeing
+flee/208
+fleetingly/6
+fleetingness/7
+fleeting/28
+fleet/502
+fleetness/7
+Fleischer/6
+Fleischman/6
+Fleisher/6
+Fleming/6
+Flemished/6
+Flemish/26
+Flemishing/6
+Flem/503
+Flemming/6
+flesher/6
+fleshiness/6
+flesh/504
+fleshless
+fleshly/54
+fleshpot/7
+fleshy/98
+fletch/187
+fletcher/6
+Fletcher/6
+fletching/6
+Fletch/114
+Fleurette/6
+Fleur/6
+flew/9
+flews/6
+flexed/45
+flexibility/43
+flexible/45
+flexibly/45
+flexitime's
+flex/438
+flextime/9
+flexural
+flexure/6
+fl/387
+flibbertigibbet/7
+flicker/47
+flickering/19
+flickery
+flick/23
+flier/6
+flight/26
+flightiness/7
+flightless
+flightpath
+flighty/98
+flimflammed
+flimflamming
+flimflam/7
+flimsily
+flimsiness/7
+flimsy/177
+flincher/6
+flinch/31
+flinching/12
+flinger/6
+fling/256
+Flin/6
+Flinn/6
+flintiness/6
+flintless
+flintlock/7
+Flint/6
+flint/26
+Flintstones
+flinty/98
+flipflop
+flippable
+flippancy/7
+flippant/19
+flipped
+flipper/7
+flippest
+flipping
+flip/9
+flirtation/7
+flirtatiousness/7
+flirtatious/28
+flirt/31
+flit/9
+flitted
+flitting
+floater/6
+float/179
+floaty
+flocculate/55
+flocculation/6
+flock/171
+floe/7
+flogged
+flogger/7
+flogging/7
+flog/9
+Flo/6
+floodgate/7
+floodlight/26
+floodlit
+floodplain/9
+flood/111
+floodwater/7
+floorboard/7
+floorer/6
+flooring/6
+floor/211
+floorspace
+floorwalker/7
+floozy/7
+flophouse/7
+flop/7
+flopped
+flopper/6
+floppily
+floppiness/7
+flopping
+floppy/225
+floral/16
+Flora/6
+Florance/6
+flora/7
+Florella/6
+Florence/6
+Florencia/6
+Florentia/6
+Florentine/9
+Florenza/6
+florescence/43
+florescent/45
+Flore/7
+floret/7
+Florette/6
+Floria/6
+Florian/6
+Florida/6
+Floridan/9
+Floridian/9
+floridness/7
+florid/28
+Florie/6
+Florina/6
+Florinda/6
+Florine/6
+florin/7
+Flori/7
+florist/7
+Flor/6
+Florrie/6
+Florri/6
+Florry/6
+Flory/6
+floss/26
+Flossie/6
+Flossi/6
+Flossy/6
+flossy/228
+flotation/7
+flotilla/7
+flotsam/7
+flounce/17
+flouncing/6
+flouncy/54
+flounder/17
+flourisher/6
+flourish/31
+flourishing/19
+flour/26
+floury/54
+flouter/6
+flout/23
+flowchart/166
+flowed
+flowerbed/7
+flower/263
+flowerer/6
+floweriness/7
+flowerless
+flowerpot/7
+flower's
+Flowers
+flowery/98
+flowing/19
+flow/447
+flown
+flowstone
+Floyd/6
+Flss/6
+flt
+flubbed
+flubbing
+flub/9
+fluctuate/15
+fluctuation/6
+fluency/7
+fluently
+fluent/281
+flue/7
+fluffiness/7
+fluff/26
+fluffy/98
+fluidity/7
+fluidized
+fluid/32
+fluidness/6
+fluke/26
+fluky/54
+flume/26
+flummox/17
+flu/7
+flung
+flunkey's
+flunk/31
+flunky/7
+fluoresce/31
+fluorescence/7
+fluorescent/9
+fluoridate/15
+fluoridation/6
+fluoride/7
+fluorimetric
+fluorinated
+fluorine/7
+fluorite/7
+fluorocarbon/7
+fluoroscope/26
+fluoroscopic
+flurry/26
+flushness/6
+flush/505
+fluster/17
+fluter/6
+flute/211
+fluting/6
+flutist/7
+flutter/31
+flutterer/6
+fluttery
+fluxed/14
+fluxes/14
+flux/43
+fluxing
+flyaway
+flyblown
+flyby/6
+flybys
+flycatcher/7
+flyer's
+fly/506
+flyleaf/6
+flyleaves
+Flynn/6
+flyover/7
+flypaper/7
+flysheet/9
+flyspeck/26
+flyswatter/9
+flyway/7
+flyweight/7
+flywheel/7
+FM
+Fm/6
+FNMA/6
+foal/26
+foaminess/7
+foam/111
+foamy/98
+fobbed
+fobbing
+fob/7
+focal/278
+focally
+Foch/6
+foci's
+focused/13
+focussed
+focuser/6
+focuses/14
+focus/101
+fodder/26
+foe/7
+foetid
+FOFL
+fogbound
+fogged/169
+foggily
+fogginess/7
+fogging/169
+foggy/98
+foghorn/7
+fogs/169
+fog/7
+fogyish
+fogy/7
+foible/7
+foil/17
+foist/17
+Fokker/6
+foldaway/9
+folded/13
+folder/6
+foldout/7
+fold/179
+folds/13
+Foley/6
+foliage/56
+foliate/345
+foliation/266
+folio/26
+folklike
+folklore/7
+folkloric
+folklorist/7
+folk/7
+folksiness/7
+folksinger/9
+folksinging/9
+folksong/9
+folksy/98
+folktale/9
+folkway/9
+foll
+follicle/7
+follicular
+follower/6
+follow/234
+followup's
+folly/7
+Folsom
+fol/19
+Fomalhaut/6
+fomentation/7
+fomenter/6
+foment/31
+Fonda/6
+fondant/7
+fondle/31
+fondler/6
+fondness/7
+fond/502
+fondue/7
+Fons
+Fonsie/6
+Fontainebleau/6
+Fontaine/6
+Fontana/6
+fontanelle's
+fontanel/7
+font/7
+Fonzie/6
+Fonz/6
+foodie/9
+food/7
+foodstuff/7
+foolery/7
+foolhardily
+foolhardiness/7
+foolhardy/98
+foolishness/7
+foolish/33
+fool/26
+foolproof
+foolscap/7
+footage/7
+football/49
+footbridge/7
+Foote/6
+footer/6
+footfall/7
+foothill/7
+foothold/7
+footing/6
+footless
+footlights
+footling
+footlocker/7
+footloose
+footman/6
+footmarks
+footmen
+footnote/26
+footpad/7
+footpath/6
+footpaths
+footplate/6
+footprint/7
+footrace/9
+footrest/7
+footsie/7
+foot/91
+footsore
+footstep/7
+footstool/7
+footwear/6
+footwork/7
+fop/7
+fopped
+foppery/7
+fopping
+foppishness/7
+foppish/28
+forage/49
+forager/6
+forayer/6
+foray/111
+forbade
+forbearance/7
+forbearer/6
+forbear/214
+Forbes/6
+forbidden
+forbiddingness/6
+forbidding/46
+forbid/9
+forbore
+forborne
+forced/19
+forcefield/7
+forcefulness/7
+forceful/28
+forceps/6
+forcer/6
+force/111
+forcibleness/6
+forcible/42
+forcibly
+fordable/12
+Fordham/6
+Ford/6
+ford/57
+forearm/26
+forebear/7
+forebode/71
+forebodingness/6
+foreboding/218
+forecaster/6
+forecastle/7
+forecast/227
+foreclose/17
+foreclosure/7
+forecourt/7
+foredoom/17
+forefather/7
+forefeet
+forefinger/7
+forefoot/6
+forefront/7
+foregoer/6
+foregoing/9
+foregone
+foregos
+foreground/26
+forehand/9
+forehead/7
+foreigner/6
+foreignness/7
+foreign/418
+foreknew
+foreknow/166
+foreknowledge/7
+foreknown
+foreleg/7
+forelimb/7
+forelock/26
+foreman/6
+Foreman/6
+foremast/7
+foremen
+foremost
+forename/56
+forenoon/7
+forensically
+forensic/9
+forensics/6
+foreordain/17
+forepart/7
+forepaws
+forepeople
+foreperson/9
+foreplay/7
+forequarter/7
+forerunner/7
+fore/9
+foresail/7
+foresaw
+foreseeable/12
+foreseeing
+foreseen/12
+foreseer/6
+foresee/507
+foreshadow/17
+foreshore/6
+foreshorten/17
+foresightedness/7
+foresighted/28
+foresight/56
+foreskin/7
+forestaller/6
+forestall/8
+forestallment/6
+forestation/186
+forestations/14
+forest/311
+Forester/6
+forester/7
+forestland/9
+Forest/114
+forestry/7
+forest's
+foretaste/26
+foreteller/6
+foretell/255
+forethought/7
+foretold
+forevermore
+forever/144
+forewarner/6
+forewarn/187
+forewent
+forewoman/6
+forewomen
+foreword/7
+forfeiter/6
+forfeiture/7
+forfeit/49
+forfend/17
+forgather/17
+forgave
+forged/14
+forge/458
+forger/6
+forgery/7
+forges/14
+forgetfulness/7
+forgetful/28
+forget/423
+forgettable/12
+forgettably/12
+forgetting
+forging/6
+forgivable/12
+forgivably/12
+forgiven
+forgiveness/7
+forgiver/6
+forgive/508
+forgivingly
+forgivingness/6
+forgiving/236
+forgoer/6
+forgoes
+forgone
+forgo/227
+forgot
+forgotten/12
+for/509
+forkful/9
+fork/111
+forklift/26
+forlornness/6
+forlorn/33
+formability/118
+formaldehyde/7
+formalin/6
+formalism/7
+formalistic
+formalist/7
+formality/43
+formal/51
+formalization/7
+formalized/12
+formalizer/6
+formalizes/45
+formalize/23
+formalness/6
+formals
+formant/43
+format/510
+formate/269
+formation/511
+formatively/45
+formativeness/123
+formative/46
+format's
+formatted/13
+formatter/14
+formatters
+formatter's
+formatting/14
+form/512
+formed/12
+former/513
+formerly
+formfitting
+formic
+Formica/7
+formidableness/6
+formidable/42
+formidably
+formlessness/7
+formless/28
+Formosa/6
+Formosan
+form's
+formulaic
+formula/7
+formulate/132
+formulated/12
+formulation/118
+formulator/7
+fornicate/15
+fornication/6
+fornicator/7
+Forrester/6
+Forrest/114
+forsaken
+forsake/166
+forsook
+forsooth
+Forster/6
+forswear/166
+forswore
+forsworn
+forsythia/7
+Fortaleza/6
+forte/7
+forthcome/301
+forthcoming/12
+FORTH/6
+forthrightness/7
+forthright/46
+forthwith
+fortieths
+fortification/7
+fortified/12
+fortifier/7
+fortify/36
+fortiori
+fortissimo/9
+fortitude/7
+fortnightly/9
+fortnight/65
+FORTRAN
+Fortran/6
+fortress/26
+fort/7
+fortuitousness/7
+fortuitous/28
+fortuity/7
+fortunateness/6
+fortunate/514
+fortune/26
+fortuneteller/7
+fortunetelling/7
+forty/488
+forum/7
+forwarder/6
+forwarding/6
+forwardness/7
+forward/100
+forwent
+fossiliferous
+fossilization/7
+fossilized/12
+fossilize/17
+fossil/7
+Foss/6
+fosterer/6
+Foster/6
+foster/31
+Foucault/6
+fought
+foulard/7
+foulmouth/81
+foulness/7
+fouls/6
+foul/77
+foundational
+foundation/7
+founded/404
+founder/165
+founder's/278
+founding/278
+foundling/7
+found/23
+foundry/7
+founds/515
+fountainhead/7
+fountain/26
+fount/7
+fourfold
+Fourier/6
+fourpence/6
+fourpenny
+fourposter/7
+fourscore/9
+four/216
+foursome/7
+foursquare
+fourteener/6
+fourteen/488
+fourteenths
+Fourth
+fourths
+Fourths
+fourth/19
+fovea/6
+fowler/6
+Fowler/6
+fowling/6
+fowl/111
+foxfire/7
+foxglove/7
+Foxhall/6
+foxhole/7
+foxhound/7
+foxily
+foxiness/7
+foxing/6
+fox/26
+Fox/7
+foxtail/6
+foxtrot/7
+foxtrotted
+foxtrotting
+foxy/98
+foyer/7
+FPO
+fps
+fr
+fracas/7
+fractal/7
+fractional/19
+fractionate/454
+fractionation/6
+fractioned
+fractioning
+fraction/339
+fractiousness/7
+fractious/28
+fracture/26
+fragile/19
+fragility/7
+fragmentarily
+fragmentariness/6
+fragmentary/42
+fragmentation/7
+fragment/26
+Fragonard/6
+fragrance/7
+fragrant/19
+frailness/7
+frail/38
+frailty/7
+framed/12
+framer/6
+frame/91
+framework/7
+framing/6
+Francaise/6
+France/7
+Francene/6
+Francesca/6
+Francesco/6
+franchisee/9
+franchise/84
+franchiser/7
+franchise's
+Franchot/6
+Francie/6
+Francine/6
+Francis
+Francisca/6
+Franciscan/7
+Francisco/6
+Franciska/6
+Franciskus/6
+francium/7
+Francklin/6
+Francklyn/6
+Franck/6
+Francoise/6
+Francois/6
+Franco/6
+francophone/6
+franc/7
+Francyne/6
+frangibility/7
+frangible
+Frankel/6
+Frankenstein/7
+franker/6
+Frankford/6
+Frankfort/6
+Frankfurter/6
+frankfurter/7
+Frankfurt/114
+Frankie/6
+frankincense/7
+Frankish/6
+franklin/6
+Franklin/6
+Franklyn/6
+frankness/7
+frank/77
+Frank/7
+Franky/6
+Fran/7
+Frannie/6
+Franni/6
+Franny/6
+Fransisco/6
+frantically
+franticness/6
+frantic/28
+Frants/6
+Franzen/6
+Franz/72
+frapp�
+frappeed
+frappeing
+frappes
+Frasco/6
+Fraser/6
+Frasier/6
+Frasquito/6
+fraternal/19
+fraternity/276
+fraternization/7
+fraternize/23
+fraternizer/6
+fraternizing/12
+frat/7
+fratricidal
+fratricide/7
+fraud/120
+fraud's
+fraudsters
+fraudulence/9
+fraudulent/28
+fraught/17
+Fraulein/9
+Frau/72
+fray/263
+Frayda/6
+Frayne/6
+fray's
+Fraze/114
+Frazer/6
+Frazier/6
+frazzle/17
+freakishness/7
+freakish/28
+freak/26
+freaky/54
+freckle/26
+freckly/54
+Freda/6
+Freddie/6
+Freddi/6
+Freddy/6
+Fredek/6
+Fredelia/6
+Frederica/6
+Frederich/6
+Fredericka/6
+Frederick/7
+Frederic/6
+Frederico/6
+Fredericton/6
+Frederigo/6
+Frederik/6
+Frederique/6
+Fredholm/6
+Fredia/6
+Fredi/6
+Fred/6
+Fredra/6
+Fredrick/6
+Fredrickson/6
+Fredric/6
+Fredrika/6
+freebase/17
+freebie/7
+freebooter/6
+freeboot/90
+freeborn
+freedman/6
+Freedman/6
+freedmen
+freedom/7
+freehand/81
+freehanded/19
+freeholder/6
+freehold/96
+freeing/9
+freelance/49
+Freeland/6
+freeloader/6
+freeload/23
+Free/6
+freeman/6
+Freeman/6
+freemasonry/6
+Freemasonry/7
+Freemason/7
+freemen
+Freemon/6
+freeness/6
+Freeport/6
+freestanding
+freestone/7
+freestyle/7
+freethinker/7
+freethinking/9
+Freetown/6
+freeway/7
+freewheeler/6
+freewheeling/42
+freewheel/49
+freewill
+free/472
+freezable
+freezer/7
+freeze/516
+freezing/9
+Freida/6
+freighter/6
+freight/49
+Fremont/6
+Frenchman/6
+French/26
+Frenchmen
+Frenchwoman/6
+Frenchwomen
+frenetically
+frenetic/9
+frenzied/19
+frenzy/26
+freon/9
+Freon/7
+freq
+frequency/43
+frequented/12
+frequenter/7
+frequentest
+frequenting
+frequent/51
+frequentness/6
+frequents
+fresco/165
+frescoes
+fresh/517
+freshener/6
+freshen/23
+fresher/118
+freshest
+freshet/7
+freshly
+freshman/6
+freshmen
+freshness/7
+freshwater/7
+Fresnel/6
+Fresno/6
+fretboard
+fretfulness/7
+fretful/28
+fret/9
+fretsaw/9
+fretted
+fretting
+fretwork/7
+Freudian/9
+Freud/6
+Freya/6
+Frey/6
+friableness/6
+friable/42
+friary/7
+friar/65
+fricasseeing
+fricassee/56
+frication/6
+fricative/7
+Frick/6
+frictional/19
+frictionless/19
+friction/7
+Friday/7
+fridge/7
+fried/14
+Frieda/6
+Friedan/6
+friedcake/7
+Friederike/6
+Friedman/6
+Friedrich/6
+Friedrick/6
+friendlessness/6
+friendless/42
+friendlies
+friendlily
+friendliness/41
+friendly/264
+friend/116
+friendship/7
+frier's
+fries/6
+frieze/26
+frigate/7
+Frigga/6
+frigged
+frigging/9
+frighten/47
+frightening/19
+frightfulness/7
+frightful/28
+fright/269
+Frigidaire/6
+frigidity/7
+frigidness/7
+frigid/28
+frig/9
+frill/26
+frilly/228
+Fri/6
+fringe/401
+fringe's
+frippery/7
+Frisbee/7
+Frisco/6
+Frisian/7
+frisker/6
+friskily
+friskiness/7
+frisk/31
+frisky/98
+frisson/6
+Frito/6
+fritterer/6
+fritter/31
+Fritz/6
+fritz/7
+frivolity/7
+frivolousness/7
+frivolous/28
+frizz/183
+frizzle/17
+frizzly/54
+frizzy/54
+Fr/170
+Frobisher/6
+frocking/6
+frock's
+frock/321
+frogged
+frogging
+frogman/6
+frogmarched
+frogmen
+frog/7
+fro/246
+Froissart/6
+frolicked
+frolicker/7
+frolicking
+frolic/7
+frolicsome
+from
+Fromm/6
+frond/7
+frontage/7
+frontal/16
+Frontenac/6
+front/275
+frontier/7
+frontiersman/6
+frontiersmen
+frontispiece/7
+frontrunner's
+front's
+frontward/9
+frosh/6
+Frostbelt/6
+frostbite/7
+frostbit/224
+frostbiting/6
+frostbitten
+frost/263
+frosteds
+frosted/12
+frostily
+frostiness/7
+frosting/7
+Frost/6
+frost's
+frosty/98
+froth/165
+frothiness/7
+froths
+frothy/98
+froufrou/7
+frowardness/7
+froward/42
+frowner/6
+frowning/19
+frown/31
+frowzily
+frowziness/7
+frowzy/98
+frozenness/6
+frozen/28
+froze/13
+fructify/17
+fructose/7
+Fruehauf/6
+frugality/7
+frugal/19
+fruitcake/7
+fruiterer/6
+fruiter/114
+fruitfuller
+fruitfullest
+fruitfulness/7
+fruitful/161
+fruit/111
+fruitiness/7
+fruition/7
+fruitlessness/7
+fruitless/28
+fruity/98
+frumpish
+frump/7
+frumpy/54
+Frunze/6
+frustrater/6
+frustrate/294
+frustrating/19
+frustration/6
+frustum/7
+Frye/6
+fryer/7
+Fry/6
+fry/55
+F's
+f's/500
+FSLIC
+ft/169
+FTC
+FTP
+ftp
+fuchsia/7
+Fuchs/6
+fucker/518
+fuck/519
+FUD
+fuddle/17
+fudge/26
+fuel/36
+fueler/7
+fuel's
+Fuentes/6
+fugal
+Fugger/6
+fugitiveness/6
+fugitive/32
+fugue/26
+fuhrer/9
+Fuji/6
+Fujitsu/6
+Fujiyama
+Fukuoka/6
+Fulani/6
+Fulbright/6
+fulcrum/7
+fulfilled/12
+fulfiller/6
+fulfill/8
+fulfillment/7
+fullback/131
+fuller/165
+Fuller/6
+Fullerton/6
+fullish
+fullness/7
+full/482
+fullstops
+fullword/7
+fully
+fulminate/15
+fulmination/6
+fulness's
+fulsomeness/7
+fulsome/28
+Fulton/6
+Fulvia/6
+fumble/23
+fumbler/6
+fumbling/19
+fume/17
+fumigant/7
+fumigate/15
+fumigation/6
+fumigator/7
+fuming/19
+fumy/54
+Funafuti
+functionalism/6
+functionalist/7
+functionality/9
+functional/16
+functionary/7
+function/26
+functor/7
+fundamentalism/7
+fundamentalist/7
+fundamental/16
+fund/520
+funded/12
+fundholders
+fundholding
+funding/9
+Fundy/6
+funeral/7
+funerary
+funereal/19
+funfair/6
+fungal/9
+fungible/6
+fungicidal
+fungicide/7
+fungi/6
+fungoid/9
+fungous
+fungus/6
+funicular/7
+funk/26
+funkiness/9
+funky/98
+fun/7
+funned
+funnel/26
+funner
+funnest
+funnily/12
+funniness/7
+funning
+funny/177
+furbelow/26
+furbisher/6
+furbish/395
+furiousness/6
+furious/521
+furlong/7
+furlough/165
+furloughs
+furl/180
+furn
+furnace/26
+furnished/12
+furnisher/7
+furnish/36
+furnishing/7
+furniture/7
+furore/7
+furor/7
+fur/444
+furred
+furrier/6
+furriness/7
+furring/7
+furrow/26
+furry/522
+furtherance/7
+furtherer/6
+furthermore
+furthermost
+further/181
+furthest
+furtiveness/7
+furtive/28
+fury/7
+furze/7
+fusebox/9
+fusee/7
+fuse/512
+fuselage/7
+fuse's/14
+Fushun/6
+fusibility/7
+fusible/45
+fusiform
+fusilier/7
+fusillade/26
+fusion/523
+fussbudget/7
+fusser/6
+fussily
+fussiness/7
+fusspot/7
+fuss/111
+fussy/98
+fustian/7
+fustiness/7
+fusty/98
+fut
+futileness/6
+futile/28
+futility/7
+futon/9
+future/7
+futurism/7
+futuristic/9
+futurist/9
+futurity/7
+futurologist/9
+futurology/7
+futz/17
+fuze's
+Fuzhou/6
+Fuzzbuster/6
+fuzzily
+fuzziness/7
+fuzz/26
+fuzzy/98
+fwd
+FWD
+fwy
+FY
+FYI
+GA
+gabardine/7
+gabbed
+Gabbey/6
+Gabbie/6
+Gabbi/6
+gabbiness/9
+gabbing
+gabble/17
+Gabby/6
+gabby/98
+Gabe/6
+gaberdine's
+Gabey/6
+gabfest/7
+Gabie/6
+Gabi/6
+gable/111
+Gable/6
+Gabonese
+Gabon/6
+Gaborone/6
+Gabriela/6
+Gabriele/6
+Gabriella/6
+Gabrielle/6
+Gabriellia/6
+Gabriell/6
+Gabriello/6
+Gabriel/6
+Gabrila/6
+gab/9
+Gaby/6
+Gacrux/6
+gadabout/7
+gadded
+gadder/7
+gadding
+gadfly/7
+gadgetry/7
+gadget/7
+gadolinium/7
+gad/9
+Gadsden/6
+Gaea/6
+Gaelan/6
+Gaelic/6
+Gael/7
+Gae/6
+gaffe/7
+gaffer/6
+gaff/49
+gaga
+Gagarin/6
+gag/31
+Gage/6
+gager/6
+gage/7
+gagged
+gagging
+gaggle/17
+gagwriter/9
+gaiety/7
+Gaile/6
+Gail/6
+gaily
+gain/36
+gainer/7
+Gaines/6
+Gainesville/6
+gainfulness/6
+gainful/28
+gaining/9
+gainly/12
+gainsaid
+gainsayer/6
+gainsay/227
+Gainsborough/6
+gaiter/6
+gait/49
+Gaithersburg/6
+galactic
+Galahad/7
+Galapagos/6
+gal/63
+gala/7
+Galatea/6
+Galatia/6
+Galatians/6
+Galaxy/6
+galaxy/7
+Galbraith/6
+Galbreath/6
+gale/63
+Gale/6
+galen
+galena/7
+galenite/6
+Galen/6
+gale's
+Galibi/6
+Galilean/7
+Galilee/6
+Galileo/6
+Galina/6
+Gallagher/6
+gallanted
+gallanting
+gallantry/7
+gallants
+gallant/10
+Gallard/6
+gallbladder/7
+Gallegos/6
+galleon/7
+galleria/9
+gallery/26
+galley/7
+Gallic
+Gallicism/7
+gallimaufry/7
+galling/19
+gallium/7
+gallivant/17
+Gall/6
+gallonage/6
+gallon/7
+galloper/6
+gallop/23
+Galloway/6
+gallows/6
+gall/26
+gallstone/7
+Gallup/6
+Gal/72
+Galois/6
+galoot/7
+galore/9
+galosh/26
+gal's
+Galsworthy/6
+galumph/47
+galumphs
+galvanic
+Galvani/6
+galvanism/7
+galvanization/7
+galvanize/17
+Galvan/6
+galvanometer/7
+galvanometric
+Galven/6
+Galveston/6
+Galvin/6
+Ga/6
+Gamaliel/6
+Gama/6
+Gambia/6
+Gambian/9
+gambit/7
+gamble/23
+Gamble/6
+gambler/6
+gambol/17
+gamecock/7
+gamekeeper/7
+gameness/7
+game/524
+gamesmanship/7
+gamesmen
+gamester/6
+gamest/90
+gamete/7
+gametic
+gamine/7
+gaminess/7
+gaming/6
+gamin/7
+gamma/7
+gammon/26
+Gamow/6
+gamut/7
+gamy/98
+gander/26
+Gandhian
+Gandhi/6
+gangbusters
+ganger/6
+Ganges/6
+gang/111
+gangland/7
+ganglia/6
+gangling
+ganglionic
+ganglion/6
+gangplank/7
+gangrene/26
+gangrenous
+gangster/7
+Gangtok/6
+gangway/7
+Gan/6
+gannet/7
+Gannie/6
+Gannon/6
+Ganny/6
+gantlet/26
+Gantry/6
+gantry/7
+Ganymede/6
+GAO
+gaoler/6
+gaol/49
+gaper/6
+gape/9
+gaping/19
+gapped
+gapping
+gap/211
+garage/26
+Garald/6
+garbageman/6
+garbage/26
+garbanzo/7
+garb/26
+garbler/6
+garble/31
+Garbo/6
+Garcia/6
+gar�on/7
+gardener/6
+Gardener/6
+gardenia/7
+gardening/6
+garden/49
+Gardie/6
+Gardiner/6
+Gard/6
+Gardner/6
+Gardy/6
+Garek/6
+Gare/140
+Gareth/6
+Garey/6
+Garfield/6
+garfish/7
+Garfunkel/6
+Gargantua/6
+gargantuan
+gargle/17
+gargoyle/56
+Garibaldi/6
+Garik/6
+garishness/7
+garish/28
+Garland/6
+garland/26
+garlicked
+garlicking
+garlicky
+garlic/7
+garment/26
+Gar/140
+Garner/6
+garner/17
+Garnet/6
+garnet/7
+Garnette/6
+Garnett/6
+garnish/11
+garnisheeing
+garnishee/56
+garnishment/7
+Garold/6
+garote's
+garotte's
+Garrard/6
+garred
+Garrek/6
+Garreth/6
+Garret/6
+garret/7
+Garrett/6
+Garrick/6
+Garrik/6
+garring
+Garrison/6
+garrison/26
+garroter/6
+garrote/49
+Garrot/6
+garrotte's
+Garrott/6
+garrulity/7
+garrulousness/7
+garrulous/28
+Garry/6
+gar/489
+garter/26
+Garth/6
+Garvey/6
+Garvin/6
+Garv/6
+Garvy/6
+Garwin/6
+Garwood/6
+Gary/6
+Garza/6
+gasbag/7
+Gascony/6
+gaseousness/6
+gaseous/28
+gases/169
+gas/525
+gash/172
+gasification/6
+gasifier/6
+gasify/115
+gasket/7
+gaslight/56
+gasohol/9
+gasoline/7
+gasometer/6
+Gaspard/6
+Gaspar/6
+Gasparo/6
+gasper/6
+Gasper/6
+gasp/23
+gasping/19
+gas's
+gassed/169
+Gasser/6
+gasser/7
+Gasset/6
+gassiness/6
+gassing/7
+gassy/98
+Gaston/6
+gastric
+gastritides
+gastritis/7
+gastroenteritides
+gastroenteritis/6
+gastrointestinal
+gastronome/7
+gastronomic
+gastronomical/19
+gastronomy/7
+gastropod/7
+gasworks/6
+gateau/7
+gateaux
+gatecrash/23
+gatehouse/7
+gatekeeper/7
+gate/26
+gatepost/7
+Gates
+gateway/7
+gathered/58
+gatherer/6
+gathering/6
+gather/179
+gathers/14
+Gatlinburg/6
+Gatling/6
+Gatorade/6
+gator/7
+Gatsby/6
+Gatun/6
+gaucheness/7
+gaucherie/7
+gauche/33
+gaucho/7
+gaudily
+gaudiness/7
+gaudy/177
+gauge/131
+gaugeable
+gauger/6
+Gauguin/6
+Gaulish/6
+Gaulle/6
+Gaul/7
+Gaultiero/6
+gauntlet/26
+Gauntley/6
+gauntness/7
+gaunt/77
+gauss/169
+gausses
+Gaussian
+Gauss/6
+gauss's
+Gautama/6
+Gauthier/6
+Gautier/6
+gauze/26
+gauziness/7
+gauzy/98
+Gavan/6
+gave
+gavel/26
+Gaven/6
+Gavin/6
+Gav/72
+gavotte/26
+Gavra/6
+Gavrielle/6
+Gawain/6
+Gawen/6
+gawkily
+gawkiness/7
+gawk/111
+gawky/177
+Gayel/6
+Gayelord/6
+Gaye/6
+gayety's
+Gayla/6
+Gayleen/6
+Gaylene/6
+Gayler/6
+Gayle/114
+Gaylord/6
+Gaylor/6
+Gay/6
+gayness/7
+Gaynor/6
+gay/177
+Gaza/6
+gazebo/7
+gaze/23
+gazelle/7
+gazer/6
+gazetteer/26
+gazette/26
+Gaziantep/6
+gazillion/9
+gazpacho/7
+GB
+G/277
+Gdansk/6
+Gd/6
+GDP
+Gearalt/6
+Gearard/6
+gearbox/7
+gear/171
+gearing/6
+gearshift/7
+gearstick
+gearwheel/7
+Geary/6
+gecko/7
+GED
+geegaw's
+geeing
+geek/7
+geeky/54
+geese/6
+geest/6
+gee/526
+geezer/7
+Gehenna/6
+Gehrig/6
+Geiger/6
+Geigy/6
+geisha/6
+gelatinousness/6
+gelatinous/28
+gelatin/7
+gelcap
+gelding/6
+geld/71
+gelid
+gelignite/7
+gelled
+gelling
+gel/465
+Gelya/6
+Ge/6
+GE/6
+Gemini/7
+gemlike
+Gemma/6
+gemmed
+gemming
+gem/7
+gemological
+gemologist/7
+gemology/7
+gemstone/7
+gen
+Gena/6
+Genaro/6
+gendarme/7
+gender/26
+genderless
+genealogical/19
+genealogist/7
+genealogy/7
+Gene/6
+gene/7
+generalissimo/7
+generalist/7
+generality/7
+generalizable/7
+generalization/7
+generalized/12
+generalize/67
+generalizer/6
+general/32
+generalness/6
+generalship/7
+genera/6
+generate/527
+generational
+generation/104
+generative/158
+generators/14
+generator/7
+generically
+generic/144
+generosity/7
+generously/12
+generousness/7
+generous/28
+Genesco/6
+genesis/6
+Genesis/6
+genes/9
+genetically
+geneticist/7
+genetic/9
+genetics/6
+Genet/6
+Geneva/6
+Genevieve/6
+Genevra/6
+Genghis/6
+geniality/276
+genially/278
+genialness/6
+genial/28
+Genia/6
+genies/370
+genie/7
+genii/6
+genitalia
+genitals
+genital/528
+genitive/7
+genitourinary
+genius/7
+Gen/6
+Genna/6
+Gennie/6
+Gennifer/6
+Genni/6
+Genny/6
+Genoa/7
+genocidal
+genocide/7
+Geno/6
+genome/7
+genotype/7
+Genovera/6
+genre/7
+gent/48
+genteelness/7
+genteel/33
+gentian/7
+gentile/9
+Gentile's
+gentility/7
+gentlefolk/9
+gentlemanliness/6
+gentlemanly/12
+gentleman/86
+gentlemen
+gentleness/7
+gentle/226
+gentlewoman/6
+gentlewomen/6
+gently
+Gentoo/6
+gentrification/6
+gentrify/15
+Gentry/6
+gentry/7
+genuflect/17
+genuflection/7
+genuineness/7
+genuine/28
+genus
+Genvieve/6
+geocentric
+geocentrically
+geocentricism
+geochemical/19
+geochemistry/7
+geochronology/6
+geodesic/9
+geode/7
+geodesy/7
+geodetic/9
+Geoff/6
+Geoffrey/6
+Geoffry/6
+geog
+geographer/7
+geographic
+geographical/19
+geography/7
+geologic
+geological/19
+geologist/7
+geology/7
+geom
+Geo/6
+geomagnetic
+geomagnetically
+geomagnetism/7
+geometer/7
+geometrical/19
+geometrician/6
+geometric/9
+geometry/7
+geomorphological
+geomorphology/6
+geophysical/19
+geophysicist/7
+geophysics/6
+geopolitical/19
+geopolitic/9
+geopolitics/6
+Georas/6
+Geordie/6
+Georgeanna/6
+Georgeanne/6
+Georgena/6
+George/7
+Georgeta/6
+Georgetown/6
+Georgetta/6
+Georgette/6
+Georgia/6
+Georgiana/6
+Georgianna/6
+Georgianne/6
+Georgian/9
+Georgie/6
+Georgi/6
+Georgina/6
+Georgine/6
+Georg/6
+Georgy/6
+geostationary
+geosynchronous
+geosyncline/7
+geothermal
+geothermic
+Geralda/6
+Geraldine/6
+Gerald/6
+geranium/7
+Gerard/6
+Gerardo/6
+Gerber/6
+gerbil/7
+Gerda/6
+Gerek/6
+Gerhardine/6
+Gerhard/6
+Gerhardt/6
+Gerianna/6
+Gerianne/6
+geriatric/9
+geriatrics/6
+Gerick/6
+Gerik/6
+Geri/6
+Geritol/6
+Gerladina/6
+Ger/6
+Germaine/6
+Germain/6
+Germana/6
+germane
+Germania/6
+Germanic/6
+germanium/7
+germanized
+German/7
+Germantown/6
+Germany/6
+Germayne/6
+germen/6
+germicidal
+germicide/7
+germinal/19
+germinated/12
+germinate/24
+germination/6
+germinative/19
+germ/125
+Gerome/6
+Geronimo/6
+gerontocracy/6
+gerontological
+gerontologist/7
+gerontology/7
+Gerrard/6
+Gerrie/6
+Gerrilee/6
+Gerri/6
+Gerry/6
+gerrymander/17
+Gershwin/7
+Gerta/6
+Gertie/6
+Gerti/6
+Gert/6
+Gertruda/6
+Gertrude/6
+Gertrudis/6
+Gertrud/6
+Gerty/6
+gerundive/6
+gerund/76
+Gery/6
+gestalt/6
+gestapo/9
+Gestapo/7
+gestate/15
+gestational
+gestation/6
+gesticulate/24
+gesticulation/6
+gesticulative/19
+gestural
+gesture/26
+gesundheit
+getaway/7
+Gethsemane/6
+get/9
+getter/56
+getting
+Getty/6
+Gettysburg/6
+getup/7
+gewgaw/7
+Gew�rztraminer
+geyser/26
+Ghanaian/7
+Ghana/6
+Ghanian's
+ghastliness/7
+ghastly/98
+ghat/7
+Ghats/6
+Ghent/6
+Gherardo/6
+gherkin/7
+ghetto/26
+ghettoize/17
+Ghibelline/6
+ghostlike
+ghostliness/7
+ghostly/98
+ghost/116
+ghostwrite/227
+ghostwritten
+ghostwrote
+ghoulishness/7
+ghoulish/28
+ghoul/7
+GHQ
+GI
+Giacinta/6
+Giacobo/6
+Giacometti/6
+Giacomo/6
+Giacopo/6
+Giana/6
+Gianina/6
+Gian/6
+Gianna/6
+Gianni/6
+Giannini/6
+giantess/7
+giantkiller
+giant/7
+Giauque/6
+Giavani/6
+gibber/17
+gibberish/7
+gibbet/26
+Gibbie/6
+Gibb/7
+Gibbon/6
+gibbon/7
+gibbousness/6
+gibbous/28
+Gibby/6
+gibe/31
+giber/6
+giblet/7
+Gib/6
+Gibraltar/7
+Gibson/6
+giddap
+giddily
+giddiness/7
+Giddings/6
+giddy/226
+Gide/6
+Gideon/7
+Gielgud/6
+Gienah/6
+Giffard/6
+Giffer/6
+Giffie/6
+Gifford/6
+Giff/114
+Giffy/6
+giftedness/6
+gifted/28
+gift/26
+gigabyte/9
+gigacycle/7
+gigahertz/6
+gigantically
+giganticness/6
+gigantic/42
+gigavolt
+gigawatt/6
+gigged
+gigging
+giggler/6
+giggle/23
+giggling/19
+giggly/54
+Gigi/6
+gig/7
+GIGO
+gigolo/7
+gila
+Gila/6
+Gilberta/6
+Gilberte/6
+Gilbertina/6
+Gilbertine/6
+gilbert/6
+Gilbert/6
+Gilberto/6
+Gilbertson/6
+Gilburt/6
+Gilchrist/6
+Gilda/6
+gilder/6
+gilding/6
+gild/179
+Gilead/6
+Gilemette/6
+Giles
+Gilgamesh/6
+Gilkson/6
+Gillan/6
+Gilles
+Gillespie/6
+Gillette/6
+Gilliam/6
+Gillian/6
+Gillie/6
+Gilligan/6
+Gilli/6
+Gill/6
+gill/111
+Gilly/6
+Gilmore/6
+Gil/86
+gilt/9
+gimbaled
+gimbals
+Gimbel/6
+gimcrackery/7
+gimcrack/9
+gimlet/26
+gimme/9
+gimmick/26
+gimmickry/7
+gimmicky
+gimp/26
+gimpy/54
+Gina/6
+Ginelle/6
+Ginevra/6
+gingerbread/7
+gingerliness/6
+gingerly/42
+Ginger/6
+ginger/116
+gingersnap/7
+gingery
+gingham/7
+gingivitis/7
+Gingrich/6
+ginkgoes
+ginkgo/6
+ginmill
+gin/7
+ginned
+Ginnie/6
+Ginnifer/6
+Ginni/6
+ginning
+Ginny/6
+Gino/6
+Ginsberg/6
+Ginsburg/6
+ginseng/7
+Gioconda/6
+Giordano/6
+Giorgia/6
+Giorgi/6
+Giorgio/6
+Giorgione/6
+Giotto/6
+Giovanna/6
+Giovanni/6
+Gipsy's
+giraffe/7
+Giralda/6
+Giraldo/6
+Giraud/6
+Giraudoux/6
+girded/12
+girder/6
+girdle/111
+girdler/6
+gird/23
+girlfriend/7
+girlhood/7
+girlie/6
+girlishness/7
+girlish/28
+girl/7
+giro/6
+girt/17
+girth/165
+girths
+Gisela/6
+Giselbert/6
+Gisele/6
+Gisella/6
+Giselle/6
+Gish/6
+gist/7
+git/6
+Giuditta/6
+Giulia/6
+Giuliano/6
+Giulietta/6
+Giulio/6
+Giuseppe/6
+Giustina/6
+Giustino/6
+Giusto/6
+giveaway/7
+giveback/9
+give/529
+given/144
+giver/6
+giving/19
+Giza/6
+Gizela/6
+gizmo's
+gizzard/7
+Gk/6
+glac�/17
+glacial/19
+glaciate/15
+glaciation/6
+glacier/7
+glaciological
+glaciologist/6
+glaciology/6
+gladded
+gladden/17
+gladder
+gladdest
+gladding
+gladdy
+glade/7
+gladiatorial
+gladiator/7
+Gladi/6
+gladiola/7
+gladioli
+gladiolus/6
+gladly/54
+Glad/6
+gladness/7
+gladsome/54
+Gladstone/7
+Gladys
+glad/46
+glamor/26
+glamorization/7
+glamorizer/6
+glamorize/23
+glamorousness/6
+glamorous/28
+glance/71
+glancing/19
+glanders/6
+glandes
+glandular/19
+gland/260
+glans/6
+glare/17
+glaringness/6
+glaring/28
+Glaser/6
+Glasgow/6
+glasnost/9
+glassblower/9
+glassblowing/7
+glassful/7
+glass/26
+glasshouse/7
+glassily
+glassiness/7
+glassless
+Glass/6
+glassware/7
+glasswort/6
+glassy/177
+Glastonbury/6
+Glaswegian/9
+glaucoma/7
+glaucous
+glazed/12
+glazer/6
+glaze/179
+glazier/7
+glazing/6
+gleam/26
+gleaner/6
+gleaning/6
+glean/179
+Gleason/6
+Gleda/6
+gleed/6
+glee/56
+gleefulness/7
+gleeful/28
+gleeing
+Glendale/6
+Glenda/6
+Glenden/6
+Glendon/6
+Glenine/6
+Glen/6
+Glenna/6
+Glennie/6
+Glennis/6
+Glenn/6
+glen/7
+glibber
+glibbest
+glibness/7
+glib/28
+glide/179
+glider/6
+glim/6
+glimmer/71
+glimmering/6
+glimpse/49
+glimpser/6
+glint/17
+glissandi
+glissando/6
+glisten/17
+glister/17
+glitch/7
+glitter/71
+glittering/19
+glittery
+glitz/17
+glitzy/54
+gloaming/7
+gloater/6
+gloating/19
+gloat/31
+globalism/9
+globalist/9
+global/16
+globe/7
+globetrotter/7
+glob/26
+globularity/6
+globularness/6
+globular/28
+globule/7
+globulin/7
+glockenspiel/7
+glommed
+gloom/26
+gloomily
+gloominess/7
+gloomy/98
+glop/7
+glopped
+glopping
+gloppy/54
+Gloria/6
+Gloriana/6
+Gloriane/6
+glorification/6
+glorifier/6
+glorify/115
+Glori/6
+glorious/68
+gloriousness/123
+Glory/6
+glory/26
+glossary/7
+gloss/26
+glossily
+glossiness/7
+glossolalia/7
+glossy/177
+glottal
+glottalization/6
+glottis/7
+Gloucester/6
+gloveless
+glover/6
+Glover/6
+glove/49
+glower/47
+glow/49
+glowing/19
+glowworm/7
+glucose/7
+glue/49
+glued/12
+gluer/6
+gluey
+gluier
+gluiest
+glummer
+glummest
+glumness/7
+glum/46
+gluon/6
+glutamate/6
+gluten/6
+glutenous
+glutinousness/6
+glutinous/28
+glut/99
+glutted
+glutting
+glutton/7
+gluttonous/19
+gluttony/7
+glyceride/6
+glycerinate/170
+glycerine's
+glycerin/7
+glycerolized/169
+glycerol/7
+glycine/6
+glycogen/7
+glycol/7
+Glynda/6
+Glynis/6
+Glyn/6
+Glynnis/6
+Glynn/6
+glyph/6
+glyphs
+gm
+GM
+GMT
+gnarl/26
+gnash/17
+gnat/7
+gnawer/6
+gnaw/187
+gnawing/6
+gneiss/7
+Gnni/6
+gnomelike
+GNOME/6
+gnome/7
+gnomic
+gnomish
+gnomonic
+gnosticism
+Gnosticism/6
+gnostic/370
+Gnostic/6
+GNP
+gnu/7
+goad/26
+goalie/7
+goalkeeper/7
+goalkeeping/6
+goalless
+goal/26
+goalmouth/6
+goalpost/9
+goalscorer
+goalscoring
+goaltender/7
+Goa/6
+goatee/7
+goatherd/7
+goat/7
+goatskin/7
+gobbed
+gobbet/7
+gobbing
+gobbledegook's
+gobbledygook/9
+gobbler/6
+gobble/23
+Gobi/6
+goblet/7
+goblin/7
+gob/7
+Godard/6
+Godart/6
+godchild/6
+godchildren
+goddammit
+goddamn/166
+Goddard/6
+Goddart/6
+goddaughter/7
+godded
+goddess/7
+godding
+G�del/6
+godfather/26
+godforsaken
+Godfree/6
+Godfrey/6
+Godfry/6
+godhead/9
+godhood/7
+Godiva/6
+godlessness/7
+godless/42
+godlikeness/6
+godlike/42
+godliness/41
+godly/264
+God/6
+godmother/7
+Godot/6
+godparent/7
+godsend/7
+god/65
+godson/7
+Godspeed/9
+Godthaab/6
+Godunov/6
+Godwin/6
+Godzilla/6
+Goebbels/6
+Goering/6
+goer/207
+goes
+Goethals/6
+Goethe/6
+gofer/7
+Goff/6
+goggler/6
+goggle/23
+Gogh/6
+Gog/6
+Gogol/6
+Goiania/6
+going/6
+goiter/7
+Golan/6
+Golconda/6
+Golda/6
+Goldarina/6
+Goldberg/6
+goldbricker/6
+goldbrick/49
+Golden/6
+goldenness/6
+goldenrod/7
+goldenseal/6
+golden/33
+goldfinch/7
+goldfish/7
+Goldia/6
+Goldie/6
+Goldilocks/6
+Goldi/6
+Goldina/6
+Golding/6
+Goldman/6
+goldmine/9
+gold/530
+goldsmith/6
+Goldsmith/6
+goldsmiths
+Goldstein/6
+Goldwater/6
+Goldwyn/6
+Goldy/6
+Goleta/6
+golfer/6
+golf/49
+Golgotha/6
+Goliath/6
+Goliaths
+golly/9
+Gomez/6
+Gomorrah/6
+Gompers/6
+go/531
+gonadal
+gonad/7
+gondola/7
+gondolier/7
+Gondwanaland/6
+goner/6
+gone/532
+gong/26
+gonion/6
+gonna
+gonorrheal
+gonorrhea/7
+Gonzales/6
+Gonzalez/6
+Gonzalo/6
+Goober/6
+goober/7
+goodbye/7
+goodhearted
+goodie's
+goodish
+goodly/54
+Good/6
+Goodman/6
+goodness/7
+goodnight
+Goodrich/6
+good/46
+goodwill/7
+Goodwin/6
+Goodyear/6
+goody/7
+gooey
+goofiness/7
+goof/26
+goofy/98
+Google/6
+gooier
+gooiest
+gook/7
+goo/7
+goon/7
+goop/7
+gooseberry/7
+goosebumps
+goose/6
+goos/17
+GOP
+Gopher
+gopher/7
+Goran/6
+Goraud/6
+Gorbachev
+Gordan/6
+Gorden/6
+Gordian/6
+Gordie/6
+Gordimer/6
+Gordon/6
+Gordy/6
+gore/26
+Gore/6
+Goren/6
+Gorey/6
+Gorgas
+gorged/25
+gorge/111
+gorgeousness/7
+gorgeous/28
+gorger/82
+gorges/25
+gorging/25
+Gorgon/6
+gorgon/9
+Gorgonzola/6
+Gorham/6
+gorilla/7
+gorily
+goriness/7
+goring/6
+Gorky/6
+gormandizer/6
+gormandize/23
+gormless
+gorp/9
+gorse/7
+gory/98
+gos
+goshawk/7
+gosh/9
+gosling/6
+gospeler/6
+gospel/96
+Gospel/7
+gossamer/7
+gossipy
+gossip/49
+gotcha/7
+G�teborg/6
+Gotham/6
+Gothart/6
+Gothicism/6
+Gothic/9
+Goth/6
+Goths
+got/44
+goto
+GOTO/7
+gotta
+gotten/12
+Gottfried/6
+Goucher/6
+Gouda/7
+gouge/23
+gouger/6
+goulash/7
+Gould/6
+Gounod/6
+gourde/7
+gourd/7
+gourmand/7
+gourmet/7
+gout/7
+gouty/54
+governable/12
+governance/7
+governed/12
+governess/7
+govern/149
+governmental/19
+government/7
+Governor
+governor/7
+governorship/7
+gov/9
+govt
+gown/26
+Goya/6
+GP
+GPA
+GPO
+GPSS
+gr
+grabbed
+grabber/7
+grabbing/9
+grab/9
+Gracchus/6
+grace/74
+graceful/83
+gracefuller
+gracefullest
+gracefulness/85
+Graceland/6
+gracelessness/7
+graceless/28
+Grace/6
+Gracia/6
+Graciela/6
+Gracie/6
+graciousness/7
+gracious/10
+grackle/7
+gradate/15
+gradation/186
+grade/311
+graded/12
+Gradeigh/6
+gradely
+grader/266
+grade's
+Gradey/6
+gradient/175
+grad/91
+gradualism/7
+gradualist/7
+gradualness/7
+gradual/46
+graduand/7
+graduate/269
+graduation/6
+Grady/6
+Graehme/6
+Graeme/6
+Graffias/6
+graffiti
+graffito/6
+Graff/6
+grafter/6
+grafting/6
+graft/49
+Grafton/6
+Grahame/6
+Graham/6
+graham/7
+Graig/6
+grail/9
+Grail/7
+grainer/6
+grain/401
+graininess/7
+graining/6
+grain's
+grainy/98
+gram/341
+Gram/6
+grammarian/7
+grammar/7
+grammaticality/6
+grammaticalness/6
+grammatical/10
+grammatic/370
+gramme/7
+Grammy/9
+gramophone/7
+Grampians
+grampus/7
+Granada/6
+granary/7
+grandam/7
+grandaunt/7
+grandchild/6
+grandchildren
+granddaddy/7
+granddad/7
+granddaughter/7
+grandee/7
+grandeur/7
+grandfather/116
+grandiloquence/7
+grandiloquent/19
+grandiose/28
+grandiosity/7
+grandkid/7
+grandma/7
+grandmaster/7
+grandmother/65
+grandnephew/7
+grandness/7
+grandniece/7
+grandpa/7
+grandparent/7
+grandson/7
+grandstander/6
+grandstand/111
+grand/38
+granduncle/7
+Grange/114
+grange/175
+Granger/6
+granite/7
+granitic
+Gran/6
+Grannie/6
+Granny/6
+granny/7
+granola/9
+grantee/7
+granter/6
+Grantham/6
+Granthem/6
+Grantley/6
+Grant/6
+grantor's
+grant/49
+grantsmanship/9
+granularity/7
+granular/19
+granulate/24
+granulation/6
+granule/7
+granulocytic
+Granville/6
+grapefruit/7
+grape/26
+grapeshot/6
+grapevine/7
+grapheme/6
+graph/165
+graphical/19
+graphicness/6
+graphic/144
+graphics/6
+graphite/7
+graphologist/7
+graphology/7
+graphs
+grapnel/7
+grapple/31
+grappler/6
+grappling/6
+grasper/6
+graspingness/6
+grasping/28
+grasp/318
+grass/453
+grasshopper/7
+grassland/7
+Grass/6
+grassroots
+grassy/54
+Grata/6
+gratefuller
+gratefullest
+gratefulness/41
+grateful/161
+grater/6
+grates/45
+grate/179
+Gratia/6
+Gratiana/6
+graticule/6
+gratification/6
+gratified/12
+gratifying/19
+gratify/15
+grating/86
+gratis
+gratitude/43
+gratuitousness/7
+gratuitous/28
+gratuity/7
+gravamen/7
+gravedigger/7
+gravel/116
+graven
+graveness/7
+graver/6
+graveside/9
+Graves/6
+grave/533
+gravestone/7
+graveyard/7
+gravidness/6
+gravid/28
+gravimeter/7
+gravimetric
+gravitas
+gravitate/24
+gravitational/19
+gravitation/6
+graviton/7
+gravity/7
+gravy/7
+graybeard/7
+Grayce/6
+grayish
+Gray/6
+grayness/9
+gray/77
+Grayson/6
+graze/23
+grazer/6
+Grazia/6
+grazing/6
+grease/49
+greasepaint/7
+greaseproof
+greaser/6
+greasily
+greasiness/7
+greasy/98
+greatcoat/56
+greaten/47
+greathearted
+greatness/7
+great/534
+grebe/7
+Grecian/9
+Greece/6
+greed/169
+greedily
+greediness/7
+greeds
+greed's
+greedy/98
+Greek/7
+Greeley/6
+greenback/7
+greenbelt/9
+Greenberg/6
+Greenblatt/6
+Greenbriar/6
+Greene/6
+greenery/7
+Greenfeld/6
+greenfield
+Greenfield/6
+greenfly/6
+greengage/7
+greengrocer/7
+greengrocery/6
+greenhorn/7
+greenhouse/7
+greening/6
+greenish/42
+Greenland/6
+Green/6
+greenmail/17
+greenness/7
+Greenpeace/6
+greenroom/7
+Greensboro/6
+Greensleeves/6
+Greensville/6
+greensward/7
+green/502
+Greentree/6
+Greenville/6
+Greenwich/6
+greenwood/7
+Greer/6
+greeter/6
+greeting/6
+greets/14
+greet/179
+gregariousness/7
+gregarious/28
+Gregg/6
+Greggory/6
+Greg/6
+Gregoire/6
+Gregoor/6
+Gregorian
+Gregorio/6
+Gregorius/6
+Gregor/6
+Gregory/6
+gremlin/7
+Grenada/6
+grenade/7
+Grenadian/9
+grenadier/7
+Grenadines
+grenadine/7
+Grendel/6
+Grenier/6
+Grenoble/6
+Grenville/6
+Gresham/6
+Gretal/6
+Greta/6
+Gretchen/6
+Gretel/6
+Grete/6
+Grethel/6
+Gretna/6
+Gretta/6
+Gretzky/6
+grew/14
+greybeard/6
+greyhound/7
+Grey/6
+greyness/6
+gridded
+griddlecake/7
+griddle/26
+gridiron/26
+gridlock/17
+grids/14
+grid/131
+grief/7
+Grieg/6
+Grier/6
+grievance/7
+griever/6
+grieve/23
+grieving/19
+grievousness/7
+grievous/28
+Griffie/6
+Griffin/6
+griffin/7
+Griffith/6
+Griff/6
+griffon's
+Griffy/6
+griller/6
+grille/7
+grill/31
+grillwork/6
+grimace/111
+grimacer/6
+Grimaldi/6
+grime/7
+Grimes
+griminess/7
+grimmer
+grimmest
+Grimm/6
+grimness/7
+grim/535
+grimy/98
+Grinch/6
+grind/250
+grinder/7
+grinding/16
+grindstone/7
+gringo/7
+grinned
+grinner/6
+grinning/19
+grin/9
+griper/6
+gripe/9
+grippe/49
+gripper/6
+gripping/19
+grip/49
+Griselda/6
+grisliness/7
+grisly/98
+Gris/6
+Grissel/6
+gristle/7
+gristliness/6
+gristly/98
+gristmill/7
+grist/65
+Griswold/6
+grit/7
+gritted
+gritter/7
+grittiness/7
+gritting
+gritty/98
+Griz/6
+grizzle/17
+grizzling/6
+grizzly/228
+Gr/6
+groaner/6
+groan/49
+groat/7
+grocer/7
+grocery/7
+groggily
+grogginess/7
+groggy/98
+grog/7
+groin/26
+grokked
+grokking
+grok/9
+grommet/26
+Gromyko/6
+groofs
+groomer/6
+groom/49
+groomsman/6
+groomsmen
+Groot/6
+groover/6
+groove/111
+groovy/54
+groper/6
+grope/179
+Gropius/6
+grosbeak/7
+grosgrain/7
+Gross
+Grosset/6
+gross/77
+Grossman/6
+grossness/7
+Grosvenor/6
+Grosz/6
+grotesqueness/7
+grotesque/46
+Grotius/6
+Groton/6
+grottoes
+grotto/6
+grouch/17
+grouchily
+grouchiness/7
+grouchy/98
+groundbreaking/9
+grounded/12
+grounder/6
+groundhog/7
+ground/91
+groundlessness/6
+groundless/28
+groundnut/7
+groundsheet/6
+groundskeepers
+groundsman/6
+groundswell/9
+groundwater/9
+groundwork/7
+grouped/14
+grouper/6
+groupie/7
+grouping/6
+groups/14
+group/91
+grouse/49
+grouser/6
+grouter/6
+grout/111
+groveler/6
+grovelike
+groveling/19
+grovel/23
+Grover/6
+Grove/114
+grove/96
+grower/6
+grow/536
+growing/45
+growingly
+growler/6
+growling/19
+growl/23
+growly/537
+grown/58
+grownup/7
+grows/14
+growth/309
+growths/58
+grubbed
+grubber/7
+grubbily
+grubbiness/7
+grubbing
+grubby/98
+grub/7
+grubstake/26
+grudge/211
+grudger/6
+grudging/19
+grueling/19
+gruel/171
+gruesomeness/7
+gruesome/33
+gruffness/7
+gruff/77
+grumble/179
+grumbler/6
+grumbling/19
+Grumman/6
+grumpily
+grumpiness/7
+grump/26
+grumpy/98
+Grundy/6
+Gr�newald/6
+grunge/9
+grungy/54
+grunion/7
+grunter/6
+grunt/31
+Grusky/6
+Grus/6
+Gruy�re
+Gruyeres
+gryphon's
+g's
+G's
+gs/14
+GSA
+gt
+GU
+guacamole/7
+Guadalajara/6
+Guadalcanal/6
+Guadalquivir/6
+Guadalupe/6
+Guadeloupe/6
+Guallatiri/6
+Gualterio/6
+Guamanian/7
+Guam/6
+Guangzhou
+guanine/7
+guano/7
+Guantanamo/6
+Guarani/6
+guarani/7
+guaranteeing
+guarantee/192
+guarantor/7
+guaranty/26
+guardedness/135
+guarded/161
+guarder/6
+guardhouse/7
+Guardia/6
+guardianship/7
+guardian/7
+guardrail/7
+guard/23
+guardroom/7
+guardsman/6
+guardsmen
+Guarnieri/6
+Guatemala/6
+Guatemalan/9
+guava/7
+Guayaquil/6
+gubernatorial
+Gucci/6
+gudgeon/6
+Guelph/6
+Guendolen/6
+Guenevere/6
+Guenna/6
+Guenther/6
+guernsey/9
+Guernsey/7
+Guerra/6
+Guerrero/6
+guerrilla/7
+guessable/12
+guess/67
+guessed/12
+guesser/6
+guesstimate/26
+guesswork/7
+guest/26
+Guevara/6
+guffaw/26
+guff/7
+Guggenheim/6
+Guglielma/6
+Guglielmo/6
+Guhleman/6
+GUI
+Guiana/6
+guidance/7
+guidebook/7
+guided/12
+guide/23
+guideline/7
+guidepost/7
+guider/6
+Guido/6
+Guilbert/6
+guilder/6
+guildhall/7
+guild/96
+guileful
+guilelessness/7
+guileless/28
+guile/26
+Guillaume/6
+Guillema/6
+Guillemette/6
+guillemot/7
+Guillermo/6
+guillotine/26
+guiltily
+guiltiness/7
+guiltlessness/6
+guiltless/28
+guilt/7
+guilty/98
+Gui/6
+Guinea/6
+Guinean/9
+guinea/7
+Guinevere/6
+Guinna/6
+Guinness/6
+guise's
+guise/84
+guitarist/7
+guitar/7
+Guiyang
+Guizot/6
+Gujarati/6
+Gujarat/6
+Gujranwala/6
+gulag/9
+gulch/7
+gulden/7
+gulf/26
+Gullah/6
+gullet/7
+gulley's
+gullibility/7
+gullible
+Gulliver/6
+gull/26
+gully/26
+gulp/23
+gumboil/7
+gumbo/7
+gumboots
+gumdrop/7
+gummed
+gumminess/6
+gumming/169
+gum/7
+gummy/98
+gumption/7
+gumshoeing
+gumshoe/56
+gumtree/7
+Gunar/6
+gunboat/7
+Gunderson/6
+gunfighter/6
+gunfight/373
+gunfire/7
+gunflint/6
+gunfought
+Gunilla/6
+gunk/7
+gunky/54
+Gun/6
+gunman/6
+gunmen
+gunmetal/7
+gun/7
+Gunnar/6
+gunned
+gunnel's
+Gunner/6
+gunner/7
+gunnery/7
+gunning/6
+gunnysack/7
+gunny/7
+gunpoint/7
+gunpowder/7
+gunrunner/7
+gunrunning/7
+gunship/9
+gunshot/7
+gunslinger/6
+gunsling/174
+gunsmith/6
+gunsmiths
+Guntar/6
+Gunter/6
+Gunther/6
+gunwale/7
+Guofeng/6
+guppy/7
+Gupta/6
+gurgle/17
+Gurkha/6
+gurney/9
+guru/7
+Gusella/6
+gusher/6
+gush/23
+gushy/54
+Gus/6
+Guss
+gusset/26
+Gussie/6
+Gussi/6
+gussy/17
+Gussy/6
+Gustaf/6
+Gustafson/6
+Gusta/6
+gustatory
+Gustave/6
+Gustav/6
+Gustavo/6
+Gustavus/6
+gusted/25
+Gustie/6
+gustily
+Gusti/6
+gustiness/6
+gusting/25
+gust/26
+gustoes
+gusto/6
+gusts/25
+Gusty/6
+gusty/98
+Gutenberg/6
+Guthrey/6
+Guthrie/6
+Guthry/6
+Gutierrez/6
+gutlessness/9
+gutless/42
+gutser/6
+gutsiness/6
+gut/7
+guts/164
+gutsy/98
+gutted
+gutter/26
+guttering/6
+guttersnipe/6
+gutting
+gutturalness/6
+guttural/46
+gutty/80
+Guyana/6
+Guyanese
+Guy/6
+guy/49
+Guzman/6
+guzzle/23
+guzzler/6
+g/538
+Gwalior/6
+Gwendolen/6
+Gwendoline/6
+Gwendolin/6
+Gwendolyn/6
+Gweneth/6
+Gwenette/6
+Gwen/6
+Gwenneth/6
+Gwennie/6
+Gwenni/6
+Gwenny/6
+Gwenora/6
+Gwenore/6
+Gwyneth/6
+Gwyn/6
+Gwynne/6
+gymkhana/7
+gym/7
+gymnasia's
+gymnasium/7
+gymnastically
+gymnastic/9
+gymnastics/6
+gymnast/7
+gymnosperm/7
+gynecologic
+gynecological/7
+gynecologist/7
+gynecology/7
+gypped
+gypper/9
+gypping
+gyp/9
+gypsite
+gypster/9
+gypsum/7
+gypsy/26
+Gypsy/7
+gyrate/15
+gyration/6
+gyrator/7
+gyrfalcon/7
+gyrocompass/6
+gyro/7
+gyroscope/7
+gyroscopic
+gyve/17
+H
+Haag/6
+Haas/6
+Habakkuk/6
+habeas
+haberdasher/7
+haberdashery/7
+Haber/6
+Haberman/6
+Habib/6
+habiliment/7
+habitability/7
+habitableness/6
+habitable/42
+habitant/43
+habitation/123
+habitations
+habitat/7
+habit/539
+habit's
+habitualness/7
+habitual/46
+habituate/15
+habituation/6
+habitu�/7
+hacienda/7
+hacker/6
+Hackett/6
+hack/234
+hackler/6
+hackle/111
+hackney/26
+hacksaw/26
+hackwork/9
+Hadamard/6
+Hadar/6
+Haddad/6
+haddock/7
+hades
+Hades
+had/47
+hadji's
+hadj's
+Hadlee/6
+Hadleigh/6
+Hadley/6
+Had/6
+hadn't
+Hadria/6
+Hadrian/6
+hadron/7
+hadst
+haemoglobin's
+haemophilia's
+haemorrhage's
+Hafiz/6
+hafnium/7
+haft/26
+Hagan/6
+Hagar/6
+Hagen/6
+Hager/6
+Haggai/6
+haggardness/7
+haggard/46
+hagged
+hagging
+haggish
+haggis/7
+haggler/6
+haggle/23
+Hagiographa/6
+hagiographer/7
+hagiography/7
+hag/125
+Hagstrom/6
+Hague/6
+ha/540
+hahnium/9
+Hahn/6
+Haifa/6
+haiku/6
+Hailee/6
+hailer/6
+Hailey/6
+hail/111
+hailstone/7
+hailstorm/7
+Haily/6
+Haiphong/6
+hairball/7
+hairbreadth/6
+hairbreadths
+hairbrush/7
+haircare
+haircloth/6
+haircloths
+haircut/7
+haircutting
+hairdo/7
+hairdresser/7
+hairdressing/7
+hairdryer/9
+hairiness/7
+hairlessness/6
+hairless/42
+hairlike
+hairline/7
+hairnet/7
+hairpiece/7
+hairpin/7
+hairsbreadth
+hairsbreadths
+hair/56
+hairsplitter/7
+hairsplitting/7
+hairspray
+hairspring/7
+hairstyle/131
+hairstylist/9
+hairy/98
+Haitian/9
+Haiti/6
+hajjes
+hajji/7
+hajj/6
+Hakeem/6
+hake/7
+Hakim/6
+Hakka/6
+Hakluyt/6
+halalled
+halalling
+halal/9
+halberd/7
+halcyon/9
+Haldane/6
+Haleakala/6
+Haleigh/6
+hale/367
+Hale/6
+haler/123
+halest
+Halette/6
+Haley/6
+halfback/7
+halfbreed
+halfheartedness/7
+halfhearted/28
+halfpence/9
+halfpenny/7
+halfpennyworth
+half/204
+halftime/9
+halftone/7
+halfway
+halfword/7
+halibut/7
+halide/7
+Halie/6
+Halifax/6
+Hali/6
+Halimeda/6
+halite/7
+halitoses
+halitosis/6
+hallelujah
+hallelujahs
+Halley/6
+halliard's
+Hallie/6
+Halli/6
+Hallinan/6
+Hall/6
+Hallmark/6
+hallmark/26
+hallo/17
+halloo's
+Halloween/7
+hallowing
+hallows
+hallow/300
+hall/175
+Hallsy/6
+hallucinate/24
+hallucination/6
+hallucinatory
+hallucinogenic/9
+hallucinogen/7
+hallway/7
+Hally/6
+halocarbon
+halogenated
+halogen/7
+halon
+halo/26
+Halpern/6
+Halsey/6
+Hal/65
+Halsy/6
+halter/165
+halt/91
+halting/19
+halve/121
+halves/6
+halyard/7
+Ha/6
+Hamal/6
+Haman/6
+hamburger/6
+Hamburg/7
+hamburg/96
+Hamel/6
+Hamey/6
+Hamhung/6
+Hamid/6
+Hamilcar/6
+Hamil/6
+Hamiltonian/7
+Hamilton/6
+Hamish/6
+Hamitic/6
+Hamlen/6
+Hamlet/6
+hamlet/7
+Hamlin/6
+Ham/6
+Hammad/6
+Hammarskjold/6
+hammed
+hammerer/6
+hammerhead/7
+hammering/6
+hammerless
+hammerlock/7
+Hammerstein/6
+hammertoe/7
+hammer/49
+Hammett/6
+hamming
+hammock/7
+Hammond/6
+Hammurabi/6
+hammy/54
+Hamnet/6
+hampered/12
+hamper/17
+Hampshire/6
+Hampton/6
+ham/7
+hamster/7
+hamstring/131
+hamstrung
+Hamsun/6
+Hana/6
+Hanan/6
+Hancock/6
+handbagged
+handbagging
+handbag/7
+handball/7
+handbarrow/7
+handbasin
+handbill/7
+handbook/7
+handbrake/6
+handcar/7
+handcart/7
+handclasp/7
+handcraft/26
+handcuff/17
+handcuffs/6
+handedness/6
+handed/28
+Handel/6
+hander/9
+handful/7
+handgun/7
+handhold/6
+handicapped
+handicapper/7
+handicapping
+handicap/7
+handicraftsman/6
+handicraftsmen
+handicraft/175
+handily/12
+handiness/7
+handiwork/7
+handkerchief/7
+handleable
+handlebar/7
+handle/49
+handler/6
+handless
+handling/6
+handmade
+handmaiden/6
+handmaid/99
+handout/7
+handover
+handpick/17
+handrail/7
+hand's
+handsaw/7
+handset/7
+handshake/214
+handshaker/6
+handshaking/6
+handsomely/12
+handsomeness/7
+handsome/33
+handspike/7
+handspring/7
+handstand/7
+hand/180
+handwork/7
+handwoven
+handwrite/196
+handwriting/6
+handwritten
+Handy/6
+handyman/6
+handymen
+handy/283
+Haney/6
+hangar/26
+hangdog/9
+hanged/14
+hanger/6
+hang/234
+hanging/6
+hangman/6
+hangmen
+hangnail/7
+hangout/7
+hangover/7
+hangs/14
+Hangul/6
+hangup/9
+Hangzhou
+Hankel/6
+hankerer/6
+hanker/541
+hankering/6
+hank/49
+hankie/7
+Hank/6
+hanky's
+Hannah/6
+Hanna/6
+Hannibal/6
+Hannie/6
+Hanni/7
+Hanny/6
+Hanoi/6
+Hanoverian
+Hanover/6
+Hansel/6
+Hansen/6
+Hansiain/6
+Han/7
+Hans/122
+hansom/7
+Hanson/6
+Hanuka/9
+Hanukkah/6
+Hanukkahs
+Hapgood/6
+haphazardness/7
+haphazard/46
+haplessness/7
+hapless/28
+haploid/9
+happed
+happening/6
+happen/71
+happenstance/7
+happily/12
+happiness/41
+happing
+Happy/6
+happy/264
+Hapsburg/6
+hap/65
+Harald/6
+harangue/31
+haranguer/6
+Harare
+harasser/6
+harass/27
+harassment/7
+Harbert/6
+harbinger/26
+Harbin/6
+harborer/6
+harbor/49
+Harcourt/6
+hardback/7
+hardball/7
+hardboard/7
+hardboiled
+hardbound
+hardcore/7
+hardcover/7
+hardened/12
+hardener/6
+hardening/6
+harden/242
+hardhat/9
+hardheadedness/7
+hardheaded/28
+hardheartedness/7
+hardhearted/28
+hardihood/7
+hardily
+hardiness/7
+Harding/6
+Hardin/6
+hardliner/9
+hardness/7
+hardscrabble
+hardshell
+hardship/7
+hardstand/9
+hardtack/7
+hardtop/7
+hardware/7
+hardwire/17
+hardwood/7
+hardworking
+Hardy/6
+hard/542
+hardy/177
+harebell/7
+harebrained
+harelip/7
+harelipped
+hare/26
+harem/7
+Hargreaves/6
+hark/17
+Harland/6
+Harlan/6
+Harlem/6
+Harlene/6
+Harlen/6
+Harlequin
+harlequin/7
+Harley/6
+Harlie/6
+Harli/6
+Harlin/6
+harlotry/7
+harlot/7
+Harlow/6
+Harman/6
+harmed/12
+harmer/6
+harmfulness/7
+harmful/28
+harmlessness/7
+harmless/28
+harm/111
+Harmonia/6
+harmonically
+harmonica/7
+harmonic/9
+harmonics/6
+Harmonie/6
+harmonious/68
+harmoniousness/7
+harmoniousness's/45
+harmonium/7
+harmonization/14
+harmonizations
+harmonization's
+harmonized/12
+harmonizer/6
+harmonizes/13
+harmonize/23
+Harmon/6
+harmony/85
+Harmony/6
+harness/111
+harnessed/12
+harnesser/6
+harnesses/12
+Harold/6
+Haroun/6
+harper/6
+Harper/6
+harping/6
+harpist/7
+harp/91
+Harp/114
+harpooner/6
+harpoon/49
+harpsichordist/7
+harpsichord/7
+harpy/7
+Harpy/7
+Harrell/6
+harridan/7
+Harrie/6
+harrier/6
+Harriet/6
+Harrietta/6
+Harriette/6
+Harriett/6
+Harrington/6
+Harriot/6
+Harriott/6
+Harrisburg/6
+Harri/7
+Harrisonburg/6
+Harrison/6
+harrower/6
+harrow/111
+harrumph/17
+Harry/6
+harry/23
+harshen/47
+harshness/7
+harsh/543
+Harte/6
+Hartford/6
+Hartley/6
+Hartline/6
+Hart/6
+Hartman/6
+hart/7
+Hartwell/6
+Harvard/6
+harvested/12
+harvester/6
+harvestman/6
+harvest/49
+Harvey/7
+Harv/6
+Harwell/6
+Harwilll/6
+has
+Hasbro/6
+hash/36
+Hasheem/6
+hasher/6
+Hashim/6
+hashing/6
+hashish/7
+hash's
+Hasidim
+Haskell/6
+Haskel/6
+Haskins/6
+Haslett/6
+hasn't
+hasp/26
+hassle/111
+hassock/7
+haste/7
+hastener/6
+hasten/52
+hast/544
+Hastie/6
+hastily
+hastiness/7
+Hastings/6
+Hasty/6
+hasty/98
+hatchback/7
+hatcheck/9
+hatched/12
+hatcher/6
+hatchery/7
+hatchet/26
+hatching/6
+hatch/187
+Hatchure/6
+hatchway/7
+hatefulness/7
+hateful/28
+hater/6
+hate/9
+Hatfield/6
+Hathaway/6
+hatless
+hat/49
+hatred/7
+hatstands
+hatted
+Hatteras/6
+hatter/7
+Hattie/6
+Hatti/6
+hatting
+Hatty/6
+hauberk/7
+Haugen/6
+haughtily
+haughtiness/7
+haughty/98
+haulage/7
+hauler/6
+haul/23
+haunch/26
+haunter/6
+haunting/19
+haunt/179
+Hauptmann/6
+Hausa/6
+Hausdorff/6
+Hauser/6
+hauteur/7
+Havana/7
+Havarti
+Havel/6
+haven/26
+Haven/6
+haven't
+haver/224
+haversack/7
+have/227
+havocked
+havocking
+havoc/7
+Haw
+Hawaiian/9
+Hawaii/6
+hawker/6
+hawk/49
+Hawking
+hawking/6
+Hawkins/6
+hawkishness/9
+hawkish/42
+Hawley/6
+haw/26
+hawser/6
+haws/90
+Hawthorne/6
+hawthorn/7
+haycock/7
+Hayden/6
+Haydn/6
+Haydon/6
+Hayes
+hayfield/7
+hay/111
+Hayley/6
+hayloft/7
+haymow/7
+Haynes
+hayrick/7
+hayride/7
+hayseed/7
+Hay/7
+haystack/7
+haywain
+Hayward/6
+haywire/7
+Haywood/6
+Hayyim/6
+hazard/26
+hazardousness/6
+hazardous/28
+haze/91
+Hazel/6
+hazel/7
+hazelnut/7
+Haze/6
+hazer/6
+hazily
+haziness/7
+hazing/6
+Hazlett/6
+Hazlitt/6
+hazy/98
+HBO/6
+hdqrs
+HDTV
+headache/7
+headband/7
+headboard/7
+headcount
+headdress/7
+header/6
+headfirst
+headgear/7
+headhunter/6
+headhunting/6
+headhunt/91
+headily
+headiness/9
+heading/6
+headlamp/9
+headland/7
+headlessness/6
+headless/42
+headlight/7
+headline/49
+headliner/6
+headlock/7
+headlong
+Head/6
+headman/6
+headmaster/7
+headmastership/6
+headmen
+headmistress/7
+headphone/7
+headpiece/7
+headpin/7
+headquarter/17
+headrest/7
+headroom/7
+headscarf/6
+headset/7
+headship/7
+headshrinker/7
+head/91
+headsman/6
+headsmen
+headstall/7
+headstand/7
+headstock/6
+headstone/7
+headstrong
+headwaiter/7
+headwall/9
+headwater/9
+headway/7
+headwind/7
+headword/7
+heady/98
+heal/545
+healed/12
+healer/6
+Heall/6
+healthfully
+healthfulness/7
+healthful/12
+healthily/12
+healthiness/41
+health/6
+healths
+healthy/264
+heap/26
+heard/13
+hearer/6
+hearing/118
+hearken/17
+hearsay/7
+hearse/6
+hears/36
+Hearst/6
+heartache/7
+heartbeat/7
+heartbreak/131
+heartbreaking/19
+heartbroke
+heartbroken
+heartburning/6
+heartburn/131
+hearted/19
+hearten/84
+heartening/75
+heartfelt
+hearth/6
+hearthrug
+hearths
+hearthstone/7
+heartily
+heartiness/7
+heartland/7
+heartlessness/7
+heartless/28
+heartrending/19
+heartsickness/7
+heartsick/42
+heart/269
+heartstrings
+heartthrob/7
+heartwarming
+Heartwood/6
+heartwood/7
+hearty/177
+hear/546
+heatedly
+heated/13
+heater/6
+heathendom/7
+heathenish/19
+heathenism/7
+heathen/6
+heather/6
+Heather/6
+heathery
+Heathkit/6
+heathland
+Heathman/6
+Heath/114
+heath/547
+heaths
+heatproof
+heats/14
+heat/182
+heatstroke/7
+heatwave
+heave/23
+heavenliness/6
+heavenly/98
+heaven/65
+heavenward/9
+heaver/6
+heaves/6
+heavily
+heaviness/7
+Heaviside/6
+heavyhearted
+heavyset
+heavy/177
+heavyweight/7
+Hebe/6
+hebephrenic
+Hebert/6
+Heb/6
+Hebraic
+Hebraism/7
+Hebrew/7
+Hebrides/6
+Hecate/6
+hecatomb/6
+heckler/6
+heckle/23
+heck/9
+hectare/7
+hectically
+hectic/9
+hectogram/7
+hectometer/7
+Hector/6
+hector/17
+Hecuba/6
+he'd
+Heda/6
+Hedda/6
+Heddie/6
+Heddi/6
+hedge/49
+hedgehog/7
+hedgehopped
+hedgehopping
+hedgehop/9
+hedger/6
+hedgerow/7
+hedging/19
+Hedi/6
+hedonism/7
+hedonistic
+hedonist/7
+Hedvige/6
+Hedvig/6
+Hedwiga/6
+Hedwig/6
+Hedy/6
+heeded/12
+heedfulness/6
+heedful/28
+heeding/12
+heedlessness/7
+heedless/28
+heed/26
+heehaw/17
+heeler/6
+heeling/6
+heelless
+heel/49
+Heep/6
+Hefner/6
+heft/17
+heftily
+heftiness/7
+hefty/98
+Hegelian
+Hegel/6
+hegemonic
+hegemony/7
+Hegira/6
+hegira/9
+Heida/6
+Heidegger/6
+Heidelberg/6
+Heidie/6
+Heidi/6
+heifer/7
+Heifetz/6
+heighten/47
+height/99
+Heimlich/6
+Heindrick/6
+Heineken/6
+Heine/6
+Heinlein/6
+heinousness/7
+heinous/28
+Heinrich/6
+Heinrick/6
+Heinrik/6
+Heinze/6
+Heinz/6
+heiress/7
+heirloom/7
+heir/26
+Heisenberg/6
+Heiser/6
+heister/6
+heist/111
+Hejira's
+Helaina/6
+Helaine/6
+held
+Helena/6
+Helene/6
+Helenka/6
+Helen/6
+Helga/6
+Helge/6
+helical/19
+helices/6
+helicon/6
+Helicon/6
+helicopter/26
+heliocentric
+heliography/6
+Heliopolis/6
+Helios/6
+heliosphere
+heliotrope/7
+heliport/7
+helium/7
+helix/6
+he'll
+hellbender/6
+hellbent
+hellcat/7
+hellebore/7
+Hellene/7
+Hellenic
+Hellenism/7
+Hellenistic
+Hellenist/7
+Hellenization/6
+Hellenize
+heller/6
+Heller/6
+Hellespont/6
+hellfire/6
+hell/111
+hellhole/7
+Helli/6
+hellion/7
+hellishness/7
+hellish/28
+Hellman/6
+hello/131
+Hell's
+helluva
+helmed
+helmet/26
+Helmholtz/6
+helming
+helms
+helm's
+helmsman/6
+helmsmen
+helm/12
+Helmut/6
+H�loise/6
+helot/9
+helper/6
+helpfulness/7
+helpful/10
+help/179
+helping/6
+helplessness/7
+helpless/28
+helpline/9
+helpmate/7
+helpmeet's
+Helsa/6
+Helsinki/6
+helve/26
+Helvetian/9
+Helvetius/6
+Helyn/6
+He/6
+hematite/7
+hematologic
+hematological
+hematologist/7
+hematology/7
+heme/7
+Hemingway/6
+hemisphere/56
+hemispheric
+hemispherical
+hemline/7
+hemlock/7
+hemmed
+hemmer/7
+hemming
+hem/7
+hemoglobin/7
+hemolytic
+hemophiliac/7
+hemophilia/7
+hemorrhage/26
+hemorrhagic
+hemorrhoid/7
+hemostat/7
+hemp/125
+h/85
+hemstitch/26
+henceforth
+henceforward
+hence/9
+Hench/6
+henchman/6
+henchmen
+Henderson/6
+Hendrick/7
+Hendrickson/6
+Hendrika/6
+Hendrik/6
+Hendrix/6
+henge/6
+Henka/6
+Henley/6
+hen/7
+henna/26
+Hennessey/6
+henning
+henpeck/17
+Henrie/6
+Henrieta/6
+Henrietta/6
+Henriette/6
+Henrik/6
+Henri/6
+Henryetta/6
+henry/6
+Henry/6
+Hensley/6
+Henson/6
+heparin/7
+hepatic/9
+hepatitides
+hepatitis/6
+Hepburn/6
+Hephaestus/6
+Hephzibah/6
+hepper
+heppest
+Hepplewhite
+hep/9
+heptagonal
+heptagon/7
+heptane/6
+heptathlon/9
+her
+Heracles/6
+Heraclitus/6
+heralded/12
+heraldic
+herald/26
+heraldry/7
+Hera/6
+herbaceous
+herbage/7
+herbalism
+herbalist/7
+herbal/9
+Herbart/6
+Herbert/6
+herbicidal
+herbicide/7
+Herbie/6
+herbivore/7
+herbivorous/19
+Herb/6
+herb/7
+Herby/6
+Herc/6
+Herculaneum/6
+herculean
+Herculean
+Hercule/7
+Herculie/6
+herder/6
+Herder/6
+herd/49
+herdsman/6
+herdsmen
+hereabout/9
+hereafter/9
+hereby
+hereditary
+heredity/7
+Hereford/7
+herein
+hereinafter
+here/230
+hereof
+hereon
+here's
+heres/6
+heresy/7
+heretical
+heretic/7
+hereto
+heretofore
+hereunder
+hereunto
+hereupon
+herewith
+Heriberto/6
+heritable
+heritage/7
+heritor/123
+Herkimer/6
+Herman/6
+Hermann/6
+hermaphrodite/7
+hermaphroditic
+Hermaphroditus/6
+hermeneutic/9
+hermeneutics/6
+Hermes
+hermetical/19
+hermetic/9
+Hermia/6
+Hermie/6
+Hermina/6
+Hermine/6
+Herminia/6
+Hermione/6
+hermitage/7
+Hermite/6
+hermitian
+hermit/7
+Hermon/6
+Hermosa/6
+Hermosillo/6
+Hermy/6
+Hernandez/6
+Hernando/6
+hernial
+hernia/7
+herniate/15
+Herod/6
+Herodotus/6
+heroes
+heroically
+heroics
+heroic/12
+heroine/7
+heroin/7
+heroism/7
+Herold/6
+hero/6
+heron/7
+herpes/6
+herpetologist/7
+herpetology/7
+Herrera/6
+Herrick/6
+herringbone/26
+Herring/6
+herring/7
+Herrington/6
+Herr/207
+Herschel/6
+Hersch/6
+herself
+Hersey/6
+Hershel/6
+Hershey/6
+Hersh/6
+Herta/6
+Hertha/6
+hertz/6
+Hertz/6
+Hertzog/6
+Hertzsprung/6
+Herve/6
+Hervey/6
+Herzegovina/6
+Herzl/6
+hes
+Hesiod/6
+hesitance/9
+hesitancy/7
+hesitantly
+hesitant/12
+hesitater/6
+hesitate/294
+hesitating/10
+hesitation/6
+Hesperus/6
+Hesse/6
+Hessian/7
+Hess/6
+Hester/6
+Hesther/6
+Hestia/6
+Heston/6
+heterodox
+heterodoxy/7
+heterodyne
+heterogamous
+heterogamy/6
+heterogeneity/7
+heterogeneousness/6
+heterogeneous/28
+heterosexuality/7
+heterosexual/65
+heterostructure
+heterozygous
+Hettie/6
+Hetti/6
+Hetty/6
+Heublein/6
+heuristically
+heuristic/7
+Heusen/6
+Heuser/6
+he/548
+hew/23
+Hewe/6
+hewer/6
+Hewet/6
+Hewett/6
+Hewie/6
+Hewitt/6
+Hewlett/6
+Hew/6
+hexachloride/6
+hexadecimal/16
+hexafluoride/6
+hexagonal/19
+hexagon/7
+hexagram/7
+hexameter/7
+hex/31
+hexer/6
+hey
+heyday/7
+Heyerdahl/6
+Heywood/6
+Hezekiah/6
+hf
+HF
+Hf/6
+Hg/6
+hgt
+hgwy
+HHS
+HI
+Hialeah/6
+hiatus/7
+Hiawatha/6
+hibachi/7
+hibernate/15
+hibernation/6
+hibernator/7
+Hibernia/6
+Hibernian/9
+hibiscus/7
+hiccup/26
+hickey/7
+Hickey/7
+Hickman/6
+Hickok/6
+hickory/7
+hick/7
+Hicks/6
+hi/81
+hidden/12
+hideaway/7
+hidebound
+hideousness/7
+hideous/28
+hideout/7
+hider/6
+hide/9
+hiding/6
+hid/245
+hieing
+hierarchal
+hierarchic
+hierarchical/19
+hierarchy/7
+hieratic
+hieroglyph
+hieroglyphic/9
+hieroglyphics/6
+hieroglyphs
+Hieronymus/6
+hie/9
+hifalutin
+Higashiosaka
+Higgins/6
+highball/26
+highborn
+highboy/7
+highbrow/7
+highchair/7
+highfalutin
+Highfield/6
+highhandedness/7
+highhanded/28
+highish
+Highlander/7
+Highlands
+highland/96
+highlight/49
+Highness/6
+highness/7
+highpoint
+high/33
+highroad/7
+highs
+hight
+hightail/17
+highwayman/6
+highwaymen
+highway/7
+hijacker/6
+hijack/179
+hiker/6
+hike/23
+Hilario/6
+hilariousness/7
+hilarious/28
+hilarity/7
+Hilarius/6
+Hilary/6
+Hilbert/6
+Hildagarde/6
+Hildagard/6
+Hilda/6
+Hildebrand/6
+Hildegaard/6
+Hildegarde/6
+Hilde/6
+Hildy/6
+Hillard/6
+Hillary/6
+hillbilly/7
+Hillcrest/6
+Hillel/6
+hiller/6
+Hillery/6
+hill/111
+Hilliard/6
+Hilliary/6
+Hillie/6
+Hillier/6
+hilliness/7
+Hill/6
+hillman
+hillmen
+hillock/7
+Hillsboro/6
+Hillsdale/6
+hillside/7
+hilltop/7
+hillwalking
+Hillyer/6
+Hilly/114
+hilly/98
+hilt/26
+Hilton/6
+Hi/6
+Himalaya/7
+Himalayan/9
+Himmler/6
+him/9
+himself
+Hinayana/6
+Hinda/6
+Hindemith/6
+Hindenburg/6
+hindered/12
+hinderer/6
+hinder/52
+Hindi/6
+hindmost
+hindquarter/7
+hindrance/7
+hind/110
+hindsight/7
+Hinduism/7
+Hindu/7
+Hindustani/7
+Hindustan/6
+Hines/6
+hinger
+hinge's
+hinge/180
+Hinkle/6
+Hinsdale/6
+hinterland/7
+hinter/6
+hint/49
+Hinton/6
+Hinze/6
+hipbone/7
+hipness/9
+Hipparchus/6
+hipped
+hipper
+hippest
+hippie/80
+hipping/6
+Hippocrates/6
+Hippocratic
+hippodrome/7
+hippo/7
+hippopotamus/7
+hip/444
+hippy's
+hipster/7
+hiragana
+Hiram/6
+hire/36
+hireling/7
+hirer/7
+Hirey/6
+hiring/9
+Hirohito/6
+Hiroshi/6
+Hiroshima/6
+Hirsch/6
+hirsuteness/7
+hirsute/42
+his
+Hispanic/7
+Hispaniola/6
+hiss/211
+hisser/6
+hissing/6
+Hiss/6
+histamine/7
+histidine/7
+histochemic
+histochemical
+histochemistry/6
+histogram/7
+histological
+histologist/7
+histology/7
+historian/7
+historic
+historicalness/6
+historical/28
+historicism/6
+historicist/6
+historicity/7
+historiographer/7
+historiography/7
+history/7
+histrionically
+histrionic/9
+histrionics/6
+hist/17
+Hitachi/6
+Hitchcock/6
+hitcher/7
+hitchhike/23
+hitch/180
+hither
+hitherto
+Hitler/7
+hitless
+hit/7
+hittable
+hitter/7
+hitting
+Hittite/7
+HIV
+hive/26
+h'm
+HM
+HMO
+Hmong
+HMS
+hoarder/6
+hoarding/6
+hoard/91
+hoarfrost/7
+hoariness/7
+hoar/6
+hoarseness/7
+hoarse/33
+hoary/98
+hoaxer/6
+hoax/49
+Hobard/6
+Hobart/6
+hobbed
+Hobbes/6
+hobbing
+hobbit
+hobbler/6
+hobble/23
+Hobbs/6
+hobbyhorse/7
+hobbyist/7
+hobby/7
+Hobday/6
+Hobey/6
+hobgoblin/7
+Hobie/6
+hobnail/26
+hobnobbed
+hobnobbing
+hobnob/9
+Hoboken/6
+hobo/26
+hob/7
+hoc
+hocker/6
+hockey/7
+hock/111
+Hockney/6
+hockshop/7
+hodge/7
+Hodge/7
+hodgepodge/7
+Hodgkin/6
+ho/549
+hod/7
+Hoebart/6
+hoecake/7
+hoedown/7
+hoeing
+hoer/6
+hoe/7
+Hoffa/6
+Hoff/6
+Hoffman/6
+Hofstadter/6
+Hogan/6
+hogan/7
+Hogarth/6
+hogback/7
+hogged
+hogger
+hogging
+hoggish/19
+hogshead/7
+hog/7
+hogtie/142
+hogtying
+hogwash/7
+Hohenlohe/6
+Hohenstaufen/6
+Hohenzollern/6
+Hohhot/6
+hoister/6
+hoist/31
+hoke/17
+hokey/98
+hokier
+hokiest
+Hokkaido/6
+hokum/7
+Hokusai/6
+Holbein/6
+Holbrook/6
+Holcomb/6
+holdall/7
+Holden/6
+holder/6
+Holder/6
+holding/230
+holding's
+hold/195
+holdout/7
+holdover/7
+holdup/7
+hole/26
+holey
+holiday/111
+Holiday/6
+holidaymaker/9
+holier/12
+Holiness/7
+holiness/41
+holistic
+holistically
+hollandaise
+Hollandaise/6
+Hollander/6
+Holland/96
+holler/17
+Hollerith/6
+Holley/6
+Hollie/6
+Holli/7
+Hollister/6
+Holloway/6
+hollowness/7
+hollow/77
+hollowware/6
+Hollyanne/6
+hollyhock/7
+Holly/6
+holly/7
+Hollywood/6
+Holman/6
+Holmes
+holmium/7
+Holm/6
+Holocaust
+holocaust/7
+Holocene
+hologram/7
+holograph/165
+holographic
+holographs
+holography/7
+Holstein/7
+holster/26
+Holst/6
+Holt/6
+Holyoke/6
+holy/177
+holystone/7
+Holzman/6
+Ho/6
+homage/111
+homager/6
+hombre/7
+homburg/7
+homebody/7
+homebound
+homeboy/9
+homebuilder/9
+homebuilding
+homebuilt
+homecoming/7
+home/362
+homegrown
+homeland/7
+homelessness/7
+homeless/42
+homelike
+homeliness/7
+homely/98
+homemade
+homemake/173
+homemaker/6
+homemaking/6
+homeomorphic
+homeomorphism/7
+homeomorph/6
+homeopath
+homeopathic
+homeopaths
+homeopathy/7
+homeostases
+homeostasis/6
+homeostatic
+homeowner/9
+homeownership
+homepage
+Homere/6
+homer/165
+Homeric
+homerists
+Homer/6
+homeroom/7
+Homerus/6
+homeschooling/9
+homesickness/7
+homesick/42
+homespun/9
+homesteader/6
+homestead/49
+homestretch/7
+hometown/7
+homeward
+homeworker/6
+homework/96
+homeyness/7
+homey/144
+homicidal/19
+homicide/7
+homier
+homiest
+homiletic/9
+homily/7
+hominess's
+homing/6
+hominid/7
+hominy/7
+Hom/114
+homogamy/6
+homogenate/7
+homogeneity/43
+homogeneous/28
+homogenization/7
+homogenize/23
+homogenizer/6
+homograph/6
+homographs
+homological
+homologous
+homologue/6
+homology/7
+homomorphic
+homomorphism/7
+homonym/7
+homophobia/9
+homophobic
+homophone/7
+homopolymers
+homosexuality/7
+homosexual/65
+homo/7
+homotopy
+homozygous/19
+honcho/17
+Honda/6
+Hondo/6
+Honduran/9
+Honduras/6
+Honecker/6
+hone/7
+honestly/25
+honest/93
+honesty/85
+honeybee/7
+honeycomb/26
+honeydew/7
+honey/26
+honeylocust
+Honey/6
+honeymooner/6
+honeymoon/49
+honeysuckle/7
+Honeywell/6
+hong/6
+Honiara/6
+honker/6
+honk/49
+honky/7
+Hon/6
+hon/550
+Honolulu/6
+honorableness/7
+honorable/444
+honorables/12
+honorablies/12
+honorably/147
+honorarily
+honorarium/7
+honorary/9
+honored/12
+honoree/9
+honor/551
+honorer/82
+Honoria/6
+honorific/9
+Honor/6
+honor's
+honors/14
+Honshu/6
+hooch/7
+hoodedness/6
+hooded/42
+hoodlum/7
+Hood/6
+hood/26
+hoodoo/26
+hoodwinker/6
+hoodwink/31
+hooey/7
+hoof/111
+hoofer/6
+hoofmark/9
+hookah/6
+hookahs
+hookedness/6
+hooked/42
+Hooke/114
+hooker/6
+Hooker/6
+hookey's
+hook/49
+hooks/12
+hookup/7
+hookworm/7
+hooky/80
+hooliganism/7
+hooligan/7
+hooper/6
+Hooper/6
+hoopla/7
+hoop/111
+hooray/26
+hoosegow/7
+Hoosier/7
+hootch's
+hootenanny/7
+hooter/6
+hoot/49
+Hoover/7
+hooves/6
+hoped/12
+hopefulness/7
+hopeful/46
+hopelessness/7
+hopeless/28
+Hope/6
+hoper/6
+hope/7
+Hopewell/6
+Hopi/7
+Hopkinsian/6
+Hopkins/6
+hopped
+Hopper/6
+hopper/7
+hopping/6
+hoppled
+hopples
+hopscotch/26
+hop/111
+Horace/6
+Horacio/6
+Horatia/6
+Horatio/6
+Horatius/6
+horde/26
+horehound/7
+horizon/7
+horizontal/16
+Hormel/6
+hormonal/19
+hormone/7
+Hormuz/6
+hornbeam/6
+hornblende/7
+Hornblower/6
+hornedness/6
+horned/42
+Horne/6
+hornet/7
+horn/111
+horniness/6
+hornless
+hornlike
+Horn/6
+hornpipe/7
+horny/98
+horologic
+horological
+horologist/7
+horology/7
+horoscope/7
+Horowitz/6
+horrendous/19
+horribleness/7
+horrible/144
+horribly
+horridness/6
+horrid/28
+horrific
+horrifically
+horrify/17
+horrifying/19
+horror/7
+hors/322
+horseback/7
+horsedom
+horseflesh/6
+horsefly/7
+horsehair/7
+horsehide/7
+horselaugh/6
+horselaughs
+horseless
+horselike
+horsely
+horseman/6
+horsemanship/7
+horsemen
+horseplayer/6
+horseplay/175
+horsepower/7
+horseradish/7
+horse's
+horseshoeing
+horseshoe/286
+horseshoer/6
+horsetail/7
+horse/180
+horsewhipped
+horsewhipping
+horsewhip/7
+horsewoman/6
+horsewomen
+horsey
+horsier
+horsiest
+horsing/6
+Horst/6
+hortatory
+Horten/6
+Hortense/6
+Hortensia/6
+horticultural
+horticulture/7
+horticulturist/7
+Hort/72
+Horton/6
+Horus/6
+hosanna/17
+Hosea/6
+hose/6
+hosepipe
+hos/17
+hosier/7
+hosiery/7
+hosp
+hospice/7
+hospitable/45
+hospitably/45
+hospitality/7
+hospitality's/45
+hospitalization/7
+hospitalize/17
+hospital/7
+hostage/7
+hosteler/6
+hostelry/7
+hostel/49
+hostess/26
+hostile/16
+hostility/7
+hostler/7
+Host/7
+host/116
+hotbed/7
+hotblooded
+hotbox/7
+hotcake/9
+hotchpotch/6
+hotelier/7
+hotelman/6
+hotel/7
+hotfoot/17
+hothead/56
+hotheadedness/7
+hotheaded/28
+hothouse/26
+hotness/7
+hotplate/7
+hotpot/6
+hot/46
+hotrod
+hotshot/9
+hotted
+Hottentot/7
+hotter
+hottest
+hotting
+Houdaille/6
+Houdini/6
+hough/6
+hounder/6
+hounding/6
+hound/111
+hourglass/7
+houri/7
+hourly/9
+hour/65
+house/36
+houseboat/7
+housebound
+houseboy/7
+housebreaker/6
+housebreaking/6
+housebreak/210
+housebroke
+housebroken
+housebuilding
+housecleaning/6
+houseclean/71
+housecoat/7
+housefly/7
+houseful/7
+householder/6
+household/96
+househusband/9
+housekeeper/6
+housekeeping/6
+housekeep/173
+houselights
+House/6
+housemaid/7
+houseman/6
+housemen
+housemother/7
+housemoving
+houseparent/7
+houseplant/9
+houser
+house's
+housetop/7
+housewares
+housewarming/7
+housewifeliness/6
+housewifely/42
+housewife/86
+housewives
+houseworker/6
+housework/96
+housing/7
+Housman/6
+Houston/6
+Houyhnhnm/6
+HOV
+hovel/26
+hovercraft/6
+hoverer/6
+hover/52
+hove/90
+Howard/6
+howbeit
+howdah/6
+howdahs
+howdy/17
+Howell/7
+Howe/6
+however
+Howey/6
+Howie/6
+howitzer/7
+howler/6
+howl/49
+Howrah/6
+how/7
+howsoever
+hoyden/26
+hoydenish
+Hoyle/7
+hoy/6
+Hoyt/6
+hp
+HP
+HQ
+hr
+HR
+HRH
+Hrothgar/6
+hrs
+h's
+H's
+HS
+HST
+ht
+HTML
+Hts/6
+http
+https
+Huang/6
+huarache/7
+hubba
+Hubbard/6
+Hubble/6
+hubbub/7
+hubby/7
+hubcap/7
+Huber/6
+Hube/114
+Hubert/6
+Huberto/6
+Hubey/6
+Hubie/6
+hub/7
+hubris/7
+huckleberry/7
+Huck/6
+huckster/26
+HUD
+Huddersfield/6
+huddler/6
+huddle/111
+Hudson/6
+hue/56
+Huerta/6
+Huey/6
+huffily
+huffiness/7
+Huff/6
+Huffman/6
+huff/26
+huffy/98
+hugeness/7
+huge/28
+hugged
+hugger
+hugging/9
+Huggins
+Hughie/6
+Hugh/7
+Hugibert/6
+Hugo/6
+hug/228
+Huguenot/7
+Hugues/6
+huh
+huhs
+Hui/6
+Huitzilopitchli/6
+hula/26
+Hulda/6
+hulk/26
+hullabaloo/7
+huller/6
+hulling/6
+Hull/6
+hull/49
+hullo/26
+humane/51
+humaneness/7
+humaner
+humanest
+human/68
+humanism/7
+humanistic
+humanist/7
+humanitarianism/7
+humanitarian/9
+humanity/43
+humanization/186
+humanized/169
+humanizer/6
+humanize/23
+humanizes/552
+humanizing/169
+humankind/6
+humannesses
+humanness/123
+humanoid/9
+humans
+Humbert/6
+Humberto/6
+humbleness/7
+humble/553
+humbly
+Humboldt/6
+humbugged
+humbugging
+humbug/7
+humdinger/7
+humdrum/9
+Hume/6
+humeral/9
+humeri
+humerus/6
+Humfrey/6
+Humfrid/6
+Humfried/6
+humidification/266
+humidifier/266
+humidify/554
+humidistat/6
+humidity/7
+humidor/7
+humid/19
+humiliate/15
+humiliating/19
+humiliation/6
+humility/7
+hummed
+Hummel/6
+hummer/7
+humming
+hummingbird/7
+hummock/26
+hummocky
+hummus/9
+humongous
+humored/12
+humorist/7
+humorlessness/7
+humorless/28
+humorousness/7
+humorous/28
+humor/49
+humpback/56
+hump/26
+humph/47
+Humphrey/7
+humphs
+Humpty/6
+hum/9
+humus/7
+Humvee
+hunchback/56
+hunch/26
+hundredfold/9
+hundred/488
+hundredths
+hundredweight/7
+Hunfredo/6
+hung/14
+Hungarian/7
+Hungary/6
+hunger/26
+Hung/6
+hungover
+hungrily
+hungriness/7
+hungry/98
+hunker/47
+hunky/228
+hunk/96
+Hun/7
+hunter/6
+Hunter/6
+hunt/179
+hunting/6
+Huntington/6
+Huntlee/6
+Huntley/6
+Hunt/114
+huntress/7
+huntsman/6
+huntsmen
+Huntsville/6
+hurdle/91
+hurdler/6
+hurl/179
+Hurlee/6
+Hurleigh/6
+hurler/6
+Hurley/6
+hurling/6
+Huron/7
+hurray/17
+hurricane/7
+hurriedness/6
+hurried/10
+hurry/31
+Hurst/6
+hurter/6
+hurtfulness/7
+hurtful/28
+hurting/19
+hurtle/17
+hurts
+hurt/12
+Hurwitz/6
+Hus
+Husain's
+husbander/6
+husband/254
+husbandman/6
+husbandmen
+husbandry/7
+Husein/6
+hush/17
+husker/6
+huskily
+huskiness/7
+husking/6
+husk/49
+husky/177
+hussar/7
+Hussein/6
+Husserl/6
+hussy/7
+hustings/6
+hustler/6
+hustle/23
+Huston/6
+Hutchins/6
+Hutchinson/6
+Hutchison/6
+hutch/26
+hut/7
+hutted
+hutting
+Hutton/6
+Hutu/6
+Huxley/6
+Huygens/6
+huzzah/47
+huzzahs
+hwy
+Hyacintha/6
+Hyacinthe/6
+Hyacinthia/6
+Hyacinthie/6
+hyacinth/6
+Hyacinth/6
+hyacinths
+Hyades
+hyaena's
+Hyannis/6
+Hyatt/6
+hybridism/7
+hybridization/9
+hybridize/17
+hybrid/7
+Hyde/6
+Hyderabad/6
+Hydra/6
+hydra/7
+hydrangea/7
+hydrant/7
+hydrate/345
+hydrate's
+hydration/266
+hydraulically
+hydraulicked
+hydraulicking
+hydraulic/9
+hydraulics/6
+hydrazine/6
+hydride/7
+hydrocarbon/7
+hydrocephali
+hydrocephalus/7
+hydrochemistry
+hydrochloric
+hydrochloride/6
+hydrodynamical
+hydrodynamic/9
+hydrodynamics/6
+hydroelectric
+hydroelectrically
+hydroelectricity/7
+hydrofluoric
+hydrofoil/7
+hydrogenate/555
+hydrogenate's
+hydrogenation/266
+hydrogenations
+hydrogen/7
+hydrogenous
+hydrological/19
+hydrologist/7
+hydrology/7
+hydrolysis/6
+hydrolyzed/12
+hydrolyze/17
+hydromagnetic
+hydromechanics/6
+hydrometer/7
+hydrometry/7
+hydrophilic
+hydrophobia/7
+hydrophobic
+hydrophone/7
+hydroplane/26
+hydroponic/9
+hydroponics/6
+hydro/7
+hydrosphere/7
+hydrostatic/9
+hydrostatics/6
+hydrotherapy/7
+hydrothermal/19
+hydrous
+hydroxide/7
+hydroxy
+hydroxylate/122
+hydroxyl/7
+hydroxyzine/6
+hyena/7
+hygiene/7
+hygienically
+hygienic/9
+hygienics/6
+hygienist/7
+hygrometer/7
+hygroscopic
+hying
+Hy/6
+Hyman/6
+hymeneal/9
+Hymen/6
+hymen/7
+Hymie/6
+hymnal/7
+hymnbook/9
+hymn/26
+Hynda/6
+hype/49
+hyperactive/9
+hyperactivity/7
+hyperbola/7
+hyperbole/7
+hyperbolic
+hyperbolically
+hyperboloidal
+hyperboloid/7
+hypercellularity
+hypercritical/19
+hypercube/7
+hyperemia/6
+hyperemic
+hyperfine
+hypergamous/19
+hypergamy/6
+hyperglycemia/7
+hyperinflation
+Hyperion/6
+hypermarket/7
+hypermedia/9
+hyperplane/7
+hyperplasia/6
+hypersensitiveness/7
+hypersensitive/42
+hypersensitivity/7
+hypersonic
+hyperspace/6
+hypersphere/6
+hypertension/7
+hypertensive/9
+hypertext/7
+hyperthyroid
+hyperthyroidism/7
+hypertrophy/26
+hypervelocity
+hyperventilate/15
+hyperventilation/6
+hyphenated/12
+hyphenate/15
+hyphenation/6
+hyphen/26
+hypnoses
+hypnosis/6
+hypnotherapy/7
+hypnotically
+hypnotic/9
+hypnotism/7
+hypnotist/7
+hypnotize/17
+hypoactive
+hypoallergenic
+hypocellularity
+hypochondriac/7
+hypochondria/7
+hypocrisy/7
+hypocrite/7
+hypocritical/19
+hypodermic/9
+hypo/26
+hypoglycemia/7
+hypoglycemic/9
+hypophyseal
+hypophysectomized
+hypotenuse/7
+hypothalami
+hypothalamic
+hypothalamically
+hypothalamus/6
+hypothermia/7
+hypotheses
+hypothesis/6
+hypothesizer/6
+hypothesize/23
+hypothetic
+hypothetical/19
+hypothyroid
+hypothyroidism/7
+hypoxia/6
+hyssop/7
+hysterectomy/7
+hysteresis/6
+hysteria/7
+hysterical/10
+hysteric/7
+Hyundai/6
+Hz
+i
+I
+IA
+Iaccoca/6
+Iago/6
+Iain/6
+Ia/6
+iambi
+iambic/9
+iamb/7
+iambus/7
+Ian/6
+Ianthe/6
+Ibadan/6
+Ibbie/6
+Ibby/6
+Iberia/6
+Iberian/7
+Ibero/6
+ibex/7
+ibid
+ibidem
+ibis/7
+IBM/6
+Ibo/6
+Ibrahim/6
+Ibsen/6
+ibuprofen/9
+Icarus/6
+ICBM/9
+ICC
+iceberg/7
+iceboat/7
+icebound
+icebox/7
+icebreaker/7
+icecap/7
+ice/263
+Icelander/6
+Icelandic
+Iceland/231
+Ice/6
+iceman/6
+icemen
+icepack
+icepick/9
+ice's
+Ichabod/6
+ichneumon/6
+ichthyologist/7
+ichthyology/7
+icicle/7
+icily
+iciness/7
+icing/7
+icky/54
+iconic
+icon/7
+iconoclasm/7
+iconoclastic
+iconoclast/7
+iconography/7
+icosahedra
+icosahedral
+icosahedron/6
+ictus/7
+ICU
+icy/98
+I'd
+ID
+Idahoan/9
+Idahoes
+Idaho/7
+Idalia/6
+Idalina/6
+Idaline/6
+Ida/6
+idealism/7
+idealistic
+idealistically
+idealist/7
+idealization/7
+idealized/12
+idealize/23
+idealizer/6
+ideal/65
+idealogical
+idea/7
+ideate/363
+ideation/6
+Idelle/6
+Idell/6
+idem
+idempotent/9
+identicalness/6
+identical/28
+identifiability
+identifiable/12
+identifiably
+identification/6
+identified/12
+identifier/6
+identify/115
+identity/7
+ideogram/7
+ideographic
+ideograph/6
+ideographs
+ideological/19
+ideologist/7
+ideologue/9
+ideology/7
+ides
+Idette/6
+idiocy/7
+idiolect/6
+idiomatically
+idiomatic/42
+idiom/7
+idiopathic
+idiosyncrasy/7
+idiosyncratic
+idiosyncratically
+idiotic
+idiotically
+idiot/7
+idleness/7
+idle/482
+idler/6
+id/86
+idolater/7
+idolatress/9
+idolatrous
+idolatry/7
+idolization/7
+idolized/12
+idolizer/6
+idolize/23
+idol/7
+ids
+IDs
+idyllic
+idyllically
+idyll/7
+IE
+IEEE
+Ieyasu/6
+if
+iffiness/9
+iffy/98
+Ifni/6
+ifs
+Iggie/6
+Iggy/6
+igloo/7
+Ignace/6
+Ignacio/6
+Ignacius/6
+Ignatius/6
+Ignazio/6
+Ignaz/6
+igneous
+ignitable
+ignite/36
+igniter/6
+ignition/7
+ignobleness/6
+ignoble/42
+ignobly
+ignominious/19
+ignominy/7
+ignoramus/7
+ignorance/7
+ignorantness/6
+ignorant/46
+ignorer/6
+ignore/318
+Igor/6
+iguana/7
+Iguassu/6
+ii
+iii
+Ijsselmeer/6
+Ike/6
+Ikey/6
+Ikhnaton/6
+ikon's
+IL
+Ilaire/6
+Ila/6
+Ilario/6
+ilea
+Ileana/6
+Ileane/6
+ileitides
+ileitis/6
+Ilene/6
+ileum/6
+ilia
+iliac
+Iliad/7
+Ilise/6
+ilium/6
+Ilka/6
+ilk/7
+I'll
+Illa/6
+illegality/7
+illegal/16
+illegibility/7
+illegible
+illegibly
+illegitimacy/7
+illegitimate/183
+illiberality/7
+illiberal/19
+illicitness/7
+illicit/28
+illimitableness/6
+illimitable/42
+Illinoisan/7
+Illinois/6
+illiquid
+illiteracy/7
+illiterateness/6
+illiterate/46
+Ill/6
+illness/7
+illogicality/7
+illogicalness/6
+illogical/28
+illogic/6
+ill/144
+illume/47
+illuminate/24
+Illuminati
+illuminatingly
+illuminating/12
+illumination/6
+illumine/88
+illusionary
+illusion/314
+illusionist/7
+illusion's
+illusiveness/6
+illusive/28
+illusoriness/6
+illusory/42
+illustrated/12
+illustrate/24
+illustration/6
+illustrative/19
+illustrator/7
+illustriousness/7
+illustrious/28
+illus/130
+illy
+Ilona/6
+Ilsa/6
+Ilse/6
+Ilysa/6
+Ilyse/6
+Ilyssa/6
+Ilyushin/6
+I'm
+image/26
+Imagen/6
+imagery/7
+imaginableness
+imaginable/12
+imaginably/12
+imaginariness/6
+imaginary/144
+imagination/7
+imaginativeness/6
+imaginative/10
+imagined/12
+imaginer/6
+imagine/157
+imagoes
+imago/6
+imam/7
+imbalance/56
+imbecile/65
+imbecilic
+imbecility/7
+imbiber/6
+imbibe/23
+imbrication/7
+Imbrium/6
+imbroglio/7
+imbruing
+imbue/17
+Imelda/6
+IMF
+IMHO
+imitable/45
+imitate/24
+imitation/6
+imitativeness/7
+imitative/28
+imitator/7
+immaculateness/7
+immaculate/28
+immanence/9
+immanency/7
+immanent/19
+Immanuel/6
+immateriality/7
+immaterialness/7
+immaterial/28
+immatureness/6
+immature/46
+immaturity/7
+immeasurableness/6
+immeasurable/42
+immeasurably
+immediacy/7
+immediateness/7
+immediate/28
+immemorial/19
+immenseness/6
+immense/33
+immensity/7
+immerse/294
+immersible
+immersion/6
+immigrant/7
+immigrate/15
+immigration/6
+imminence/7
+imminentness/6
+imminent/28
+immobile
+immobility/7
+immobilization/7
+immobilize/31
+immoderateness/6
+immoderate/556
+immoderation/6
+immodest/19
+immodesty/7
+immolate/15
+immolation/6
+immorality/7
+immoral/19
+immortality/7
+immortalized/12
+immortalize/17
+immortal/16
+immovability/7
+immovableness/6
+immovable/144
+immovably
+immune/9
+immunity/7
+immunization/7
+immunize/17
+immunoassay/6
+immunodeficiency/9
+immunodeficient
+immunologic
+immunological/19
+immunologist/7
+immunology/7
+immure/17
+immutability/7
+immutableness/6
+immutable/42
+immutably
+IMNSHO
+IMO
+Imogene/6
+Imogen/6
+Imojean/6
+impaction/7
+impactor/7
+impact/152
+impaired/12
+impairer/6
+impair/8
+impairment/7
+impala/7
+impale/8
+impalement/7
+impaler/6
+impalpable
+impalpably
+impanel/17
+impartation/6
+impart/17
+impartiality/7
+impartial/19
+impassableness/6
+impassable/42
+impassably
+impasse/557
+impassibility/7
+impassible
+impassibly
+impassion/47
+impassioned/12
+impassiveness/7
+impassive/28
+impassivity/7
+impasto/7
+impatience/7
+impatiens/6
+impatient/19
+impeachable/12
+impeach/53
+impeacher/6
+impeachment/7
+impeccability/7
+impeccable/9
+impeccably
+impecuniousness/7
+impecunious/28
+impedance/7
+impeded/12
+impeder/6
+impede/9
+imped/52
+impedimenta
+impediment/7
+impelled
+impeller/7
+impelling
+impel/9
+impend/17
+impenetrability/7
+impenetrableness/6
+impenetrable/42
+impenetrably
+impenitence/7
+impenitent/16
+imperativeness/6
+imperative/46
+imperceivable
+imperceptibility/7
+imperceptible
+imperceptibly
+imperceptive
+imperf
+imperfectability
+imperfection/7
+imperfectness/7
+imperfect/558
+imperialism/7
+imperialistic
+imperialistically
+imperialist/7
+imperial/16
+imperil/11
+imperilment/7
+imperiousness/7
+imperious/28
+imperishableness/6
+imperishable/144
+imperishably
+impermanence/7
+impermanent/19
+impermeability/7
+impermeableness/6
+impermeable/42
+impermeably
+impermissible
+impersonality/6
+impersonalized
+impersonal/19
+impersonate/15
+impersonation/6
+impersonator/7
+impertinence/7
+impertinent/16
+imperturbability/7
+imperturbable
+imperturbably
+imperviousness/6
+impervious/28
+impetigo/7
+impetuosity/7
+impetuousness/7
+impetuous/28
+impetus/7
+impiety/7
+impinge/40
+impingement/7
+imping/47
+impiousness/7
+impious/28
+impishness/7
+impish/28
+implacability/7
+implacableness/6
+implacable/42
+implacably
+implantation/7
+implant/318
+implanter/6
+implausibility/7
+implausible
+implausibly
+implementability
+implementable/12
+implementation/14
+implementations
+implementation's
+implemented/13
+implementer/6
+implementing/14
+implementor/7
+implement/66
+implicant/7
+implicate/64
+implication/6
+implicative/28
+implicitness/7
+implicit/28
+implied/19
+implode/17
+implore/17
+imploring/19
+implosion/7
+implosive/9
+imply/15
+impoliteness/7
+impolite/28
+impoliticness/6
+impolitic/28
+imponderableness/6
+imponderable/144
+importance/7
+important/19
+importation/7
+importer/6
+importing/14
+import/67
+importunateness/6
+importunate/22
+importuner/6
+importune/284
+importunity/7
+imposable
+impose/36
+imposer/7
+imposingly
+imposing/12
+imposition/7
+impossibility/7
+impossibleness/6
+impossible/144
+impossibly
+imposter's
+impostor/7
+impost/26
+imposture/7
+impotence/7
+impotency/9
+impotent/16
+impound/17
+impoundments
+impoverisher/6
+impoverish/8
+impoverishment/7
+impracticableness/6
+impracticable/42
+impracticably
+impracticality/7
+impracticalness/6
+impractical/28
+imprecate/15
+imprecation/6
+impreciseness/7
+imprecise/168
+imprecision/6
+impregnability/7
+impregnableness/6
+impregnable/42
+impregnably
+impregnate/15
+impregnation/6
+impresario/7
+impress/559
+impressed/12
+impresser/6
+impressibility/7
+impressible
+impressionability/7
+impressionableness/6
+impressionable/42
+impression/465
+impressionism/7
+impressionistic
+impressionist/7
+impressiveness/7
+impressive/28
+impressment/6
+imprimatur/7
+imprinter/6
+imprinting/6
+imprint/49
+imprison/11
+imprisonment/7
+improbability/7
+improbableness/6
+improbable/42
+improbably
+impromptu/9
+improperness/6
+improper/28
+impropitious
+impropriety/7
+improved/12
+improvement/7
+improver/6
+improve/113
+improvidence/7
+improvident/19
+improvisational
+improvisation/7
+improvisatory
+improviser/6
+improvise/23
+imprudence/7
+imprudent/19
+imp/254
+impudence/7
+impudent/19
+impugner/6
+impugn/67
+impulse/333
+impulsion/6
+impulsiveness/7
+impulsive/28
+impunity/7
+impureness/6
+impure/33
+impurity/7
+imputation/7
+impute/88
+Imus/6
+IN
+inaction
+inactive
+inadequate/9
+inadvertence/7
+inadvertent/19
+inalienability/7
+inalienably
+inalterableness/6
+inalterable/42
+Ina/6
+inamorata/7
+inane/38
+inanimateness/9
+inanimate/42
+inanity/7
+inappeasable
+inappropriate/42
+inarticulate/42
+in/63
+inasmuch
+inaugural/9
+inaugurate/15
+inauguration/6
+inauthenticity
+inbound/224
+inbred/9
+inbreed/301
+incalculableness/6
+incalculably
+incandescence/7
+incandescent/16
+incant
+incantation/7
+incantatory
+incapable/9
+incapacitate/55
+incapacitation/6
+incarcerate/15
+incarceration/6
+incarnadine/17
+incarnate/132
+incarnation/118
+Inca/7
+incendiary/9
+incense/26
+incentive/85
+incentively
+incept/64
+inception/7
+inceptive/19
+inceptor/6
+incessant/19
+incest/7
+incestuousness/7
+incestuous/28
+inch/26
+inchoate/17
+Inchon/6
+inchworm/7
+incidence/7
+incidental/16
+incident/7
+incinerate/15
+incineration/6
+incinerator/7
+incipience/7
+incipiency/6
+incipient/19
+incise/24
+incision/6
+incisiveness/7
+incisive/28
+incisor/7
+incitement/7
+inciter/6
+incite/560
+incl
+inclination/85
+incline/84
+incliner/6
+inclining/6
+include/17
+inclusion/7
+inclusiveness/7
+inclusive/28
+Inc/6
+incognito/9
+incoherency/6
+income/6
+incommode/47
+incommunicado
+incomparable
+incompetent/7
+incomplete/42
+inconceivability/7
+inconceivableness/6
+inconceivable/42
+incondensable
+incongruousness/9
+inconsiderableness/6
+inconsiderable/42
+inconsistence
+inconsolableness/6
+inconsolable/42
+inconsolably
+incontestability/7
+incontestably
+incontrovertibly
+inconvenience/47
+inconvertibility
+inconvertible
+incorporable
+incorporated/147
+incorporate/132
+incorrect/42
+incorrigibility/7
+incorrigibleness/6
+incorrigible/144
+incorrigibly
+incorruptible/9
+incorruptibly
+increase/561
+increaser/6
+increasing/19
+incredibleness/6
+incredible/42
+incremental/19
+incrementation
+increment/26
+incriminate/15
+incrimination/6
+incriminatory
+incrustation/7
+inc/357
+incubate/24
+incubation/6
+incubator/7
+incubus/7
+inculcate/15
+inculcation/6
+inculpate/17
+incumbency/7
+incumbent/9
+incunabula
+incunabulum
+incurable/9
+incurious
+incursion/7
+ind
+indebtedness/7
+indebted/42
+indefatigableness/6
+indefatigable/42
+indefatigably
+indefeasible
+indefeasibly
+indefinableness/6
+indefinable/144
+indefinite/9
+indelible
+indelibly
+indemnification/6
+indemnify/15
+indemnity/7
+indentation/7
+indented/12
+indenter/6
+indention/7
+indent/164
+indenture/47
+Independence/6
+indescribableness/6
+indescribable/144
+indescribably
+indestructibleness/6
+indestructible/42
+indestructibly
+indeterminably
+indeterminacy/7
+indeterminism
+indexation/9
+indexer/6
+index/562
+India/6
+Indiana/6
+Indianan/9
+Indianapolis/6
+Indianian/9
+Indian/7
+indicant/7
+indicate/24
+indication/6
+indicative/16
+indicator/7
+indices's
+indicter/6
+indictment/7
+indict/113
+indifference
+indigence/7
+indigenousness/6
+indigenous/28
+indigent/16
+indigestible/9
+indignant/19
+indignation/7
+indigo/7
+Indira/6
+indirect/563
+indiscreet/42
+indiscriminateness/6
+indiscriminate/28
+indispensability/7
+indispensableness/6
+indispensable/144
+indispensably
+indisputableness/6
+indisputable/42
+indissolubleness/6
+indissoluble/42
+indissolubly
+indistinguishableness/6
+indistinguishable/42
+indite/17
+indium/7
+individualism/7
+individualistic
+individualistically
+individualist/7
+individuality/7
+individualization/7
+individualize/23
+individualized/12
+individualizer/6
+individualizes/12
+individualizing/19
+individual/65
+individuate/15
+individuation/6
+indivisibleness/6
+indivisible/144
+indivisibly
+Ind/6
+Indochina/6
+Indochinese
+indoctrinate/15
+indoctrination/6
+indoctrinator/7
+indolence/7
+indolent/19
+indomitableness/6
+indomitable/42
+indomitably
+Indonesia/6
+Indonesian/9
+indoor
+Indore/6
+Indra/6
+indubitableness/6
+indubitable/42
+indubitably
+inducement/7
+inducer/6
+induce/27
+inducible
+inductance/7
+inductee/7
+induct/392
+induction/7
+inductiveness/6
+inductive/28
+inductor/7
+indulge/31
+indulgence/26
+indulgent/19
+indulger/6
+Indus/6
+industrialism/7
+industrialist/7
+industrialization/7
+industrialized/12
+industrialize/17
+industrial/16
+industriousness/7
+industrious/28
+industry/7
+Indy/7
+inebriate/15
+inebriation/6
+inedible
+ineducable
+ineffability/7
+ineffableness/6
+ineffable/42
+ineffably
+inelastic
+ineligibly
+ineluctable
+ineluctably
+ineptitude/7
+ineptness/7
+inept/28
+inequivalent
+inerrant
+inertial/19
+inertia/7
+inertness/7
+inert/46
+Ines
+inescapably
+Inesita/6
+Inessa/6
+inestimably
+inevitability/7
+inevitableness/6
+inevitable/42
+inevitably
+inexact/42
+inexhaustibleness/6
+inexhaustible/42
+inexhaustibly
+inexorability/6
+inexorableness/6
+inexorable/42
+inexorably
+inexpedience/6
+inexplicableness/6
+inexplicable/42
+inexplicably
+inexplicit
+inexpressibility/6
+inexpressibleness/6
+inexpressible/144
+inextricably
+Inez/6
+infamous
+infamy/7
+infancy/6
+infanticide/7
+infantile
+infant/7
+infantryman/6
+infantrymen
+infantry/7
+infarction/7
+infarct/7
+infatuate/15
+infatuation/6
+infauna
+infected/12
+infecter
+infect/127
+infection/128
+infectiousness/7
+infectious/28
+infective
+infer/277
+inference/214
+inferential/19
+inferiority/7
+inferior/65
+infernal/19
+inferno/7
+inferred
+inferring
+infertile
+infestation/7
+infester/6
+infest/31
+infidel/7
+infighting/6
+infill/207
+infiltrate/130
+infiltrator/7
+infinitesimal/16
+infinite/130
+infinitival
+infinitive/65
+infinitude/7
+infinitum
+infinity/7
+infirmary/7
+infirmity/7
+infix/6
+inflammableness/6
+inflammable/42
+inflammation/7
+inflammatory
+inflatable/7
+inflate/396
+inflater/6
+inflationary
+inflation/85
+inflect/64
+inflectional/19
+inflection/7
+inflexibleness/6
+inflexible/42
+inflexion/7
+inflict/29
+inflicter/6
+infliction/7
+inflow/6
+influenced/12
+influencer/6
+influence/111
+influent
+influential/16
+influenza/7
+infomercial/9
+Informatica/6
+informatics
+informational
+information/314
+informativeness/9
+informative/10
+informatory
+informed/12
+informer/6
+info/7
+infotainment/9
+infra
+infrared/7
+infrasonic
+infrastructural
+infrastructure/7
+infrequence/9
+infringe/564
+infringement/7
+infringer/6
+infuriate/565
+infuriating/19
+infuriation/6
+infuser/6
+infuse/90
+infusibleness/6
+infusible/42
+inf/566
+Ingaberg/6
+Ingaborg/6
+Inga/6
+Ingamar/6
+Ingar/6
+Ingeberg/6
+Ingeborg/6
+Ingelbert/6
+Ingemar/6
+ingeniousness/7
+ingenious/28
+ing�nue/9
+ingenuity/7
+ingenuous/75
+ingenuousness/7
+Inger/6
+Inge/114
+Ingersoll/6
+ingest/64
+ingestible
+ingestion/7
+Inglebert/6
+inglenook/7
+Inglewood/6
+Inglis/6
+Ingmar/6
+ingoing
+ingot/26
+ingrained/19
+Ingra/6
+Ingram/6
+ingrate/6
+ingratiate/15
+ingratiating/19
+ingratiation/6
+ingredient/7
+Ingres/6
+ingression/6
+ingress/7
+Ingrid/6
+Ingrim/6
+ingrown/42
+inguinal
+Ingunna/6
+inhabitable/12
+inhabitance
+inhabited/12
+inhabiter/6
+inhabit/164
+inhalant/9
+inhalation/7
+inhalator/7
+inhale/331
+inhere/47
+inherent/19
+inheritableness/6
+inheritable/42
+inheritance/85
+inherit/88
+inherited/25
+inheriting/25
+inheritor/9
+inheritress/7
+inheritrix/7
+inherits/25
+inhibit/64
+inhibited/12
+inhibiter's
+inhibition/7
+inhibitor/7
+inhibitory
+inhomogeneous
+inhospitableness/6
+inhospitable/42
+inhospitality
+Inigo/6
+inimical/19
+inimitableness/6
+inimitable/42
+inimitably
+inion
+iniquitousness/6
+iniquitous/28
+iniquity/7
+initialer/6
+initial/462
+initialization/14
+initializations
+initialization's
+initialize/36
+initialized/12
+initializer/9
+initiates
+initiate/300
+initiating
+initiation/7
+initiative/7
+initiator/7
+initiatory
+injectable/12
+inject/160
+injection/7
+injector/7
+injunctive
+injured/12
+injurer/6
+injure/23
+injuriousness/6
+injurious/28
+inkblot/7
+inker/6
+inkiness/7
+inkling/7
+inkstand/7
+inkwell/7
+inky/567
+ink/568
+inland
+inlander/6
+inlay/569
+inletting
+inline/81
+inly/224
+inmost
+Inna/6
+innards
+innateness/7
+innate/28
+innermost/9
+innersole/9
+innerspring
+innervate/15
+innervation/6
+inner/19
+inning/6
+Innis/6
+innkeeper/7
+innocence/7
+Innocent/6
+innocent/280
+innocuousness/7
+innocuous/28
+innovate/24
+innovation/6
+innovative/42
+innovator/7
+innovatory
+Innsbruck/6
+innuendo/26
+innumerability/6
+innumerableness/6
+innumerable/42
+innumerably
+innumerate
+inn/179
+inoculate/36
+inoculation/7
+inoculative
+inoffensive/42
+Inonu/6
+inopportuneness/6
+inopportune/42
+inordinateness/6
+inordinate/28
+inorganic
+inpatient
+In/204
+input/570
+inquirer/6
+inquire/90
+inquiring/19
+inquiry/7
+inquisitional
+inquisition/7
+Inquisition/7
+inquisitiveness/7
+inquisitive/28
+inquisitorial/19
+inquisitor/7
+INRI
+inrush/6
+ins
+INS
+insalubrious
+insanitary
+insatiability/7
+insatiableness/6
+insatiable/42
+insatiably
+inscribe/331
+inscription/7
+inscrutability/7
+inscrutableness/7
+inscrutable/42
+inscrutably
+inseam
+insecticidal
+insecticide/7
+insectivore/7
+insectivorous
+insecureness/6
+insecure/42
+inseminate/15
+insemination/6
+insensateness/6
+insensate/42
+insensible/42
+insentient
+inseparable/9
+insert/36
+inserter/6
+insertion/48
+insetting
+inshore
+insider/6
+inside/331
+insidiousness/7
+insidious/28
+insightful/19
+insigne's
+insignia/7
+insignificant
+insinuate/24
+insinuating/19
+insinuation/6
+insinuator/7
+insipidity/7
+insipid/19
+insistence/7
+insistent/19
+insisting/19
+insist/17
+insociable
+insofar
+insole/6
+insolence/7
+insolent/16
+insolubleness/6
+insoluble/42
+insolubly
+insomniac/9
+insomnia/7
+insomuch
+insouciance/7
+insouciant/19
+inspect/36
+inspection/7
+inspective
+inspectorate/7
+inspector/7
+inspirational/19
+inspiration/7
+inspired/12
+inspire/164
+inspirer/6
+inspiring/12
+inspirit/47
+Inst
+installable
+install/395
+installation/7
+installer/7
+installment/7
+instance/47
+instantaneousness/6
+instantaneous/28
+instantiated/12
+instantiate/15
+instantiation/6
+instant/571
+instate/36
+inst/277
+instead
+instigate/24
+instigation/6
+instigator/7
+instillation/7
+instinctive/19
+instinctual
+instinct/76
+instituter/6
+institutes/6
+institute/307
+institutionalism/6
+institutionalist/6
+institutionalization/7
+institutionalize/17
+institutional/19
+institution/118
+institutor's
+instr
+instruct/64
+instructed/12
+instructional
+instruction/7
+instructiveness/6
+instructive/28
+instructor/7
+instrumentalist/7
+instrumentality/7
+instrumental/16
+instrumentation/7
+instrument/26
+insubordinate
+insubstantial
+insufferable
+insufferably
+insularity/7
+insular/16
+insulate/15
+insulated/12
+insulation/6
+insulator/7
+insulin/7
+insult/31
+insulter/6
+insulting/19
+insuperable
+insuperably
+insupportableness/6
+insupportable/42
+insurance/7
+insurance's/14
+insure/572
+insured/9
+insurer/6
+insurgence/7
+insurgency/7
+insurgent/7
+insurmountably
+insurrectionist/7
+insurrection/7
+intactness/6
+intact/42
+intaglio/26
+intake/6
+intangible/6
+integer/7
+integrability/6
+integrable
+integral/65
+integrand/7
+integrate/573
+integration/154
+integrative/25
+integrator/7
+integrity/7
+integument/7
+intellective/19
+intellect/76
+intellectualism/7
+intellectuality/6
+intellectualize/17
+intellectualness/6
+intellectual/46
+intelligence/175
+intelligencer/6
+intelligentsia/7
+intelligent/10
+intelligibilities
+intelligibility/135
+intelligibleness/135
+intelligible/236
+intelligibly/12
+Intel/6
+Intelsat/6
+intemperate/42
+intendant/7
+intendedness/6
+intended/46
+intender/6
+intensification/6
+intensifier/6
+intensify/115
+intensional/19
+intensiveness/7
+intensive/46
+intentionality/6
+intentional/10
+intention/56
+intentness/7
+intent/28
+interaction/7
+interactive/28
+interactivity
+interact/64
+interaxial
+interbank
+interbred
+interbreed/166
+intercalate/79
+intercalation/6
+intercase
+intercaste
+interceder/6
+intercede/31
+intercensal
+intercept/17
+interception/7
+interceptor/7
+intercession/7
+intercessor/7
+intercessory
+interchangeability/6
+interchangeableness/6
+interchangeable/42
+interchangeably
+interchange/187
+interchanger/6
+intercity
+interclass
+intercohort
+intercollegiate
+intercommunicate/15
+intercommunication/6
+intercom/7
+interconnectedness/6
+interconnected/42
+interconnect/17
+interconnection/7
+interconnectivity
+intercontinental
+interconversion/6
+intercorrelated
+intercourse/7
+Interdata/6
+interdenominational
+interdepartmental/19
+interdependence/7
+interdependency/7
+interdependent/19
+interdiction/7
+interdict/163
+interdisciplinary
+interested/574
+interest/74
+interestingly/12
+interestingness/6
+interesting/28
+inter/575
+interface/111
+interfacing/6
+interfaith
+interference/7
+interferer/6
+interfere/31
+interfering/19
+interferometer/7
+interferometric
+interferometry/6
+interferon/7
+interfile/17
+intergalactic
+intergenerational
+intergeneration/6
+interglacial
+intergovernmental
+intergroup
+interim/9
+interindex
+interindustry
+interior/65
+interj
+interject/17
+interjectional
+interjection/7
+interlace/17
+interlard/17
+interlayer/224
+interleave/17
+interleukin/9
+interlibrary
+interlinear/9
+interline/71
+interlingual
+interlingua/6
+interlining/6
+interlink/17
+interlisp/6
+interlobular
+interlocker/6
+interlock/31
+interlocutor/7
+interlocutory
+interlope/23
+interloper/6
+interlude/26
+intermarriage/7
+intermarry/17
+intermediary/7
+intermediateness/6
+intermediate/576
+intermediation/6
+interment/85
+intermeshed
+intermetrics
+intermezzi
+intermezzo/7
+interminably
+intermingle/17
+intermission/7
+intermittent/19
+intermix/31
+intermodule
+intermolecular/19
+internalization/7
+internalize/17
+internal/16
+Internationale/6
+internationalism/7
+internationalist/7
+internationality/6
+internationalization/7
+internationalize/17
+international/16
+internecine
+internee/7
+interne's
+internet/6
+INTERNET/6
+internetwork
+internist/7
+intern/329
+internment/7
+internship/7
+internuclear
+interocular
+interoffice
+interoperability
+interpenetrates
+interpersonal/19
+interplanetary
+interplay/26
+interpol
+interpolate/577
+interpolation/6
+Interpol/6
+interpose/31
+interposer/6
+interposition/7
+interpretable/12
+interpret/36
+interpretation/48
+interpretative/19
+interpreted/12
+interpreter/7
+interpretive/19
+interpretor/9
+interprocess
+interprocessor
+interquartile
+interracial
+interred/25
+interregional
+interregnum/7
+interrelatedness/6
+interrelated/28
+interrelate/15
+interrelation/6
+interrelationship/7
+interring/25
+interrogate/24
+interrogation/6
+interrogative/16
+interrogator/7
+interrogatory/9
+interrupted/12
+interrupter/6
+interruptibility
+interruptible
+interruption/7
+interrupt/349
+interscholastic
+intersect/17
+intersection/7
+intersession/7
+interspecies
+intersperse/15
+interspersion/6
+interstage
+interstate/9
+interstellar
+interstice/7
+interstitial/16
+intersurvey
+intertask
+intertwine/17
+interurban/9
+interval/7
+intervene/31
+intervener/6
+intervenor/6
+interventionism/7
+interventionist/9
+intervention/7
+interview/578
+interviewed/12
+interviewee/7
+interviewer/7
+interviewing
+interviews
+intervocalic
+interweave/166
+interwove
+interwoven
+intestacy/7
+intestinal/19
+intestine/7
+inti
+intifada
+intimacy/7
+intimal
+intimateness/6
+intimater/6
+intimate/409
+intimation/6
+intimidate/15
+intimidating/19
+intimidation/6
+into
+intolerableness/6
+intolerable/42
+intolerant/144
+intonate/107
+intonation/6
+intoxicant/7
+intoxicate/15
+intoxicated/19
+intoxication/6
+intra
+intracellular
+intracity
+intraclass
+intracohort
+intractability/6
+intractableness/6
+intractable/42
+intradepartmental
+intrafamily
+intragenerational
+intraindustry
+intraline
+intrametropolitan
+intramural/19
+intramuscular/19
+intranasal
+intransigence/7
+intransigent/16
+intransitive/9
+intraoffice
+intraprocess
+intrapulmonary
+intraregional
+intrasectoral
+intrastate
+intratissue
+intrauterine
+intravenous/16
+intrepidity/7
+intrepidness/6
+intrepid/28
+intricacy/7
+intricateness/6
+intricate/28
+intrigue/23
+intriguer/6
+intriguing/19
+intrinsically
+intrinsic/9
+introduce/36
+introducer/6
+introduction/48
+introductory
+introit/7
+introject/142
+intro/9
+introspection/7
+introspectiveness/6
+introspective/28
+introspect/64
+introversion/7
+introvert/26
+intruder/6
+intrude/23
+intrusion/7
+intrusiveness/7
+intrusive/46
+intubate/55
+intubation/6
+intuit/160
+intuitionist/6
+intuitiveness/7
+intuitive/28
+int/90
+Inuit/7
+inundate/579
+inundation/6
+inure/17
+invader/6
+invade/23
+invalid/26
+invalidism/7
+invariable/42
+invariant/6
+invasion/7
+invasive/42
+invectiveness/6
+invective/32
+inveigh/52
+inveigher/6
+inveighs
+inveigle/23
+inveigler/6
+invent/36
+invented/12
+invention/48
+inventiveness/7
+inventive/28
+inventor/7
+inventory/26
+Inverness/6
+inverse/580
+inverter/6
+invertible
+invert/23
+invest/102
+investigate/24
+investigation/118
+investigator/7
+investigatory
+investiture/7
+investment/143
+investment's/14
+investor/7
+inveteracy/7
+inveterate/19
+inviability
+invidiousness/7
+invidious/28
+invigilate/47
+invigilator/7
+invigorate/293
+invigorating/19
+invigoration/118
+invigorations
+invincibility/7
+invincibleness/6
+invincible/42
+invincibly
+inviolability/7
+inviolably
+inviolateness/6
+inviolate/28
+inviscid
+invisibleness/6
+invisible/9
+invitational/9
+invitation/7
+invited/12
+invitee/9
+inviter/6
+invite/31
+inviting/19
+invocable
+invocate
+invoked/14
+invoke/67
+invoker/6
+invokes/14
+involuntariness/9
+involuntary/42
+involute/463
+involution/6
+involutorial
+involvedly
+involved/12
+involve/8
+involvement/7
+involver/6
+invulnerability/6
+invulnerableness/6
+inwardness/6
+inward/28
+ioctl
+iodate/219
+iodation/6
+iodide/7
+iodinate/454
+iodine/7
+iodize/17
+Iolande/6
+Iolanthe/6
+Io/6
+Iona/6
+Ionesco/6
+Ionian/6
+ionic/9
+Ionic/9
+ionization's
+ionization/302
+ionized/156
+ionize/581
+ionizer's
+ionizer/302
+ionizes/12
+ionizing/12
+ionosphere/7
+ionospheric
+ion's/45
+ion/41
+Iorgo/7
+Iormina/6
+Iosep/6
+iota/7
+IOU
+Iowan/9
+Iowa/7
+IPA
+ipecac/7
+Iphigenia/6
+ipso
+Ipswich/6
+IQ
+Iqbal/6
+Iquitos/6
+Ira/6
+Iranian/7
+Iran/6
+Iraqi/7
+Iraq/6
+IRA/9
+irascibility/7
+irascible
+irascibly
+irateness/9
+irate/33
+ireful
+Ireland/6
+ire/26
+Irena/6
+Irene/6
+irenic/9
+iridescence/7
+iridescent/19
+irides/6
+iridium/7
+irids
+Irina/6
+Iris
+iris/26
+Irishman/6
+Irishmen
+Irish/164
+Irishwoman/6
+Irishwomen
+Irita/6
+irk/17
+irksomeness/7
+irksome/28
+Irkutsk/6
+Ir/6
+Irma/6
+ironclad/9
+iron/582
+ironer/6
+ironic
+ironicalness/6
+ironical/28
+ironing/6
+ironmonger/6
+ironmongery/6
+ironside/7
+ironstone/7
+ironware/7
+ironwood/7
+ironworker/6
+ironwork/175
+irony/7
+Iroquoian/7
+Iroquois/6
+irradiate/24
+irradiation/6
+irrationality/7
+irrationalness/6
+irrational/46
+Irrawaddy/6
+irreclaimable
+irreconcilability/7
+irreconcilableness/6
+irreconcilable/144
+irreconcilably
+irrecoverableness/6
+irrecoverable/42
+irrecoverably
+irredeemable/9
+irredeemably
+irredentism/6
+irredentist/6
+irreducibility/6
+irreducible
+irreducibly
+irreflexive
+irrefutable
+irrefutably
+irregardless
+irregularity/7
+irregular/16
+irrelevance/7
+irrelevancy/7
+irrelevant/19
+irreligious
+irremediableness/6
+irremediable/42
+irremediably
+irremovable
+irreparableness/6
+irreparable/42
+irreparably
+irreplaceable/42
+irrepressible
+irrepressibly
+irreproachableness/6
+irreproachable/42
+irreproachably
+irreproducibility
+irreproducible
+irresistibility/6
+irresistibleness/6
+irresistible/42
+irresistibly
+irresoluteness/7
+irresolute/168
+irresolution/6
+irresolvable
+irrespective/19
+irresponsibility/7
+irresponsibleness/6
+irresponsible/144
+irresponsibly
+irretrievable
+irretrievably
+irreverence/7
+irreverent/19
+irreversible
+irreversibly
+irrevocableness/6
+irrevocable/42
+irrevocably
+irrigable
+irrigate/15
+irrigation/6
+irritability/7
+irritableness/6
+irritable/42
+irritably
+irritant/9
+irritate/24
+irritated/19
+irritating/19
+irritation/6
+irrupt/64
+irruption/7
+IRS
+Irtish/6
+Irvine/6
+Irving/6
+Irvin/6
+Irv/207
+Irwin/6
+Irwinn/6
+is
+i's
+Isaac/7
+Isaak/6
+Isabelita/6
+Isabella/6
+Isabelle/6
+Isabel/6
+Isacco/6
+Isac/6
+Isadora/6
+Isadore/6
+Isador/6
+Isahella/6
+Isaiah/6
+Isak/6
+Isa/6
+ISBN
+Iscariot/6
+Iseabal/6
+Isfahan/6
+Isherwood/6
+Ishim/6
+Ishmael/6
+Ishtar/6
+Isiahi/6
+Isiah/6
+Isidora/6
+Isidore/6
+Isidor/6
+Isidoro/6
+Isidro/6
+isinglass/7
+Isis/6
+Islamabad/6
+Islamic/9
+Islam/7
+islander/6
+island/49
+Islandia/6
+isle/7
+islet/7
+isl/47
+Ismael/6
+ism/186
+isn't
+ISO
+isobaric
+isobar/7
+Isobel/6
+isochronal/19
+isochronous/19
+isocline/6
+isocyanate/6
+isodine
+isolate/15
+isolationism/7
+isolationistic
+isolationist/7
+isolation/6
+isolator/7
+Isolde/6
+isomeric
+isomerism/7
+isomer/7
+isometrically
+isometric/9
+isometrics/6
+isomorphic
+isomorphically
+isomorphism/7
+isomorph/6
+isoperimetrical
+isopleth/6
+isopleths
+isosceles
+isostatic
+isothermal/19
+isotherm/7
+isotonic
+isotope/7
+isotopic
+isotropic
+isotropically
+isotropy/6
+Ispahan's
+ispell/6
+Ispell/6
+Israeli/7
+Israelite/7
+Israel/7
+Issac/6
+Issiah/6
+Issie/6
+Issi/6
+issuable
+issuance/7
+issuant
+issued/14
+issue/49
+issuer/48
+issues/14
+issuing/14
+Issy/6
+Istanbul/6
+isthmian/9
+isthmus/7
+Istvan/6
+Isuzu/6
+It
+IT
+Itaipu/6
+ital
+Italianate/17
+Italian/7
+italicization/7
+italicized/12
+italicize/17
+italic/9
+Ital/6
+Italy/6
+Itasca/6
+itch/26
+itchiness/7
+Itch/6
+itchy/98
+ITcorp/6
+ITCorp/6
+it'd
+Itel/6
+itemization/7
+itemized/12
+itemize/23
+itemizer/6
+itemizes/14
+item/26
+iterate/583
+iteration/6
+iterative/158
+iterator/7
+Ithaca/6
+Ithacan
+itinerant/16
+itinerary/7
+it'll
+it/41
+Ito/6
+its
+itself
+ITT
+IUD/9
+IV
+Iva/6
+Ivanhoe/6
+Ivan/6
+Ivar/6
+I've
+Ive/175
+Iver/6
+Ivette/6
+Ivett/6
+Ivie/6
+iv/6
+Ivonne/6
+Ivor/6
+Ivory/6
+ivory/7
+IVs
+Ivy/6
+ivy/56
+ix
+Izaak/6
+Izabel/6
+Izak/6
+Izanagi/6
+Izanami/6
+Izhevsk/6
+Izmir/6
+Izvestia/6
+Izzy/6
+jabbed
+jabberer/6
+jabber/179
+jabbing
+Jabez/6
+Jablonsky/6
+jabot/7
+jab/7
+jacaranda/7
+Jacenta/6
+Jacinda/6
+Jacinta/6
+Jacintha/6
+Jacinthe/6
+jackal/7
+jackass/7
+jackboot/56
+jackdaw/7
+Jackelyn/6
+jacketed/12
+jacket/26
+jack/111
+jackhammer/26
+Jackie/6
+Jacki/6
+jackknife/26
+jackknives
+Jacklin/6
+Jacklyn/6
+Jack/6
+Jackman/6
+jackpot/7
+Jackqueline/6
+Jackquelin/6
+jackrabbit/17
+Jacksonian
+Jackson/7
+Jacksonville/6
+jackstraw/7
+Jacky/6
+Jaclin/6
+Jaclyn/6
+Jacobean
+Jacobian/6
+Jacobi/6
+Jacobin/6
+Jacobite/6
+Jacobo/6
+Jacobsen/6
+Jacob/7
+Jacobs/122
+Jacobson/6
+Jacobus
+Jacoby/6
+jacquard/7
+Jacquard/7
+Jacqueline/6
+Jacquelin/6
+Jacquelyn/6
+Jacquelynn/6
+Jacquenetta/6
+Jacquenette/6
+Jacques/6
+Jacquetta/6
+Jacquette/6
+Jacquie/6
+Jacqui/6
+jacuzzi
+Jacuzzi/9
+Jacynth/6
+Jada/6
+jadedness/7
+jaded/28
+jadeite/7
+Jade/6
+jade/26
+Jaeger/6
+Jae/6
+jaggedness/7
+jagged/33
+Jagger/6
+jaggers
+jagging
+jag/9
+jaguar/7
+jailbird/7
+jailbreak/7
+jailer/6
+jail/49
+Jaime/6
+Jaimie/6
+Jaine/6
+Jainism/6
+Jain/6
+Jaipur/6
+Jakarta/6
+Jake/7
+Jakie/6
+Jakob/6
+jalape�o/9
+jalopy/7
+jalousie/7
+Jamaal/6
+Jamaica/6
+Jamaican/9
+Jamal/6
+Jamar/6
+jambalaya/7
+jamb/26
+jamboree/7
+Jamel/6
+Jame/7
+Jameson/6
+Jamestown/6
+Jamesy/6
+Jamey/6
+Jamie/6
+Jamill/6
+Jamil/6
+Jami/6
+Jamima/6
+Jamison/6
+Jammal/6
+jammed/12
+Jammie/6
+jamming/12
+jam/7
+Janacek/6
+Jana/6
+Janaya/6
+Janaye/6
+Jandy/6
+Janean/6
+Janeczka/6
+Janeen/6
+Janeiro/6
+Janek/6
+Janela/6
+Janella/6
+Janelle/6
+Janell/6
+Janel/6
+Jane/6
+Janene/6
+Janenna/6
+Janessa/6
+Janesville/6
+Janeta/6
+Janet/6
+Janetta/6
+Janette/6
+Janeva/6
+Janey/6
+jangler/6
+jangle/23
+jangly
+Jania/6
+Janice/6
+Janie/6
+Janifer/6
+Janina/6
+Janine/6
+Janis/6
+janissary/7
+Janith/6
+janitorial
+janitor/7
+Janka/6
+Jan/6
+Janna/6
+Jannelle/6
+Jannel/6
+Jannie/6
+Janos/6
+Janot/6
+Jansenist/6
+Jansen/6
+January/7
+Janus/6
+Jany/6
+Japanese/7
+Japan/6
+japanned
+japanner
+japanning
+japan/7
+jape/26
+Japura/6
+Jaquelin/6
+Jaquelyn/6
+Jaquenetta/6
+Jaquenette/6
+Jaquith/6
+Jarad/6
+jardini�re/7
+Jard/6
+Jareb/6
+Jared/6
+jarful/9
+jargon/26
+Jarib/6
+Jarid/6
+Jarlsberg
+jar/7
+Jarrad/6
+jarred
+Jarred/6
+Jarret/6
+Jarrett/6
+Jarrid/6
+jarring/16
+Jarrod/6
+Jarvis/6
+Jase/6
+Jasen/6
+Jasmina/6
+Jasmine/6
+jasmine/7
+Jasmin/6
+Jason/6
+Jasper/6
+jasper/7
+Jastrow/6
+Jasun/6
+jato/7
+jaundice/26
+jaundiced/12
+jauntily
+jauntiness/7
+jaunt/26
+jaunty/177
+Javanese
+JavaScript/6
+Java/7
+javelin/26
+Javier/6
+jawbone/26
+jawbreaker/7
+jawline
+jaw/26
+Jaxartes/6
+Jayapura/6
+jaybird/7
+Jaycee/7
+Jaye/6
+Jay/6
+Jaymee/6
+Jayme/6
+Jaymie/6
+Jaynell/6
+Jayne/6
+jay/7
+Jayson/6
+jaywalker/6
+jaywalk/179
+Jazmin/6
+jazziness/6
+jazzmen
+jazz/26
+jazzy/98
+JCS
+jct
+JD
+Jdavie/6
+jealousness/6
+jealous/28
+jealousy/7
+Jeana/6
+Jeanelle/6
+Jeane/6
+Jeanette/6
+Jeanie/6
+Jeanine/6
+Jean/6
+jean/7
+Jeanna/6
+Jeanne/6
+Jeannette/6
+Jeannie/6
+Jeannine/6
+Jecho/6
+Jedd/6
+Jeddy/6
+Jedediah/6
+Jedidiah/6
+Jedi/6
+Jed/6
+jeep/453
+Jeep/9
+jeerer/6
+jeering/19
+jeer/211
+Jeeves/6
+jeez
+Jefferey/6
+Jeffersonian/9
+Jefferson/6
+Jeffery/6
+Jeffie/6
+Jeff/6
+Jeffrey/7
+Jeffry/6
+Jeffy/6
+jehad's
+Jehanna/6
+Jehoshaphat/6
+Jehovah/6
+Jehu/6
+jejuna
+jejuneness/6
+jejune/28
+jejunum/6
+Jekyll/6
+Jelene/6
+jell/17
+Jello/6
+jello's
+jellybean/7
+jellyfish/7
+jellying/6
+jellylike
+jellyroll/9
+jelly/26
+Jemie/6
+Jemimah/6
+Jemima/6
+Jemmie/6
+jemmy/6
+Jemmy/6
+Jena/6
+Jenda/6
+Jenelle/6
+Jenica/6
+Jeniece/6
+Jenifer/6
+Jeniffer/6
+Jenilee/6
+Jeni/6
+Jenine/6
+Jenkins/6
+Jen/6
+Jenna/6
+Jennee/6
+Jenner/6
+jennet/7
+Jennette/6
+Jennica/6
+Jennie/6
+Jennifer/6
+Jennilee/6
+Jenni/6
+Jennine/6
+Jennings/6
+Jenn/584
+Jenny/6
+jenny/7
+Jeno/6
+Jensen/6
+Jens/122
+jeopard
+jeopardize/17
+jeopardy/7
+Jephthah/6
+Jerad/6
+Jerald/6
+Jeralee/6
+Jeramey/6
+Jeramie/6
+Jere/6
+Jereme/6
+jeremiad/7
+Jeremiah/6
+Jeremiahs
+Jeremias/6
+Jeremie/6
+Jeremy/6
+Jericho/6
+Jeri/6
+jerker/6
+jerk/187
+jerkily
+jerkiness/7
+jerkin/7
+jerkwater/9
+jerky/177
+Jermaine/6
+Jermain/6
+Jermayne/6
+Jeroboam/6
+Jerold/6
+Jerome/6
+Jeromy/6
+Jerrie/6
+Jerrilee/6
+Jerrilyn/6
+Jerri/6
+Jerrine/6
+Jerrod/6
+Jerrold/6
+Jerrome/6
+jerrybuilt
+Jerrylee/6
+jerry/6
+Jerry/6
+jersey/7
+Jersey/7
+Jerusalem/6
+Jervis/6
+Jes
+Jessalin/6
+Jessalyn/6
+Jessa/6
+Jessamine/6
+jessamine's
+Jessamyn/6
+Jessee/6
+Jesselyn/6
+Jesse/6
+Jessey/6
+Jessica/6
+Jessie/6
+Jessika/6
+Jessi/6
+jess/6
+Jess/6
+Jessy/6
+jest/49
+jester/6
+jesting/19
+Jesuit/7
+Jesus
+Jeth/6
+Jethro/6
+jetliner/7
+jet/7
+jetport/7
+jetsam/7
+jetted/6
+jetting/6
+jettison/17
+jetty/172
+jeweler/6
+jewelery/9
+jewel/49
+Jewelled/6
+Jewelle/6
+jewellery's
+Jewell/170
+Jewel/6
+jewelry/7
+Jewess/7
+Jewishness/7
+Jewish/42
+Jew/7
+Jewry/7
+Jezebel/7
+j/278
+JFK/6
+jg/6
+jibbed
+jibbing
+jibe/9
+jib/26
+Jidda/6
+jiff/9
+jiffy/7
+jigged
+jigger/26
+jigging/6
+jiggle/17
+jiggly/54
+jig/7
+jigsaw/26
+jihad/7
+Jilin
+Jillana/6
+Jillane/6
+Jillayne/6
+Jilleen/6
+Jillene/6
+Jillian/6
+Jillie/6
+Jilli/6
+Jill/6
+Jilly/6
+jilt/31
+jilter/6
+Jimenez/6
+Jim/6
+Jimmie/6
+jimmy/26
+Jimmy/6
+jimsonweed/9
+Jinan
+jingler/6
+jingle/31
+jingly/54
+jingoism/7
+jingoistic
+jingoist/7
+jingo/6
+Jinnah/6
+jinni's
+jinn/7
+Jinny/6
+jinrikisha/7
+jinx/26
+jitney/7
+jitterbugged
+jitterbugger
+jitterbugging
+jitterbug/7
+jitter/9
+jittery/54
+jiujitsu's
+Jivaro/6
+jive/26
+Joachim/6
+Joana/6
+Joane/6
+Joanie/6
+Joan/6
+Joanna/6
+Joanne/7
+Joann/6
+Joaquin/6
+jobbed
+jobber/7
+jobbery/6
+jobbing/6
+Jobey/6
+jobholder/7
+Jobie/6
+Jobi/6
+Jobina/6
+joblessness/7
+jobless/42
+Jobrel/6
+job/7
+Job/7
+Jobye/6
+Joby/6
+Jobyna/6
+Jocasta/6
+Joceline/6
+Jocelin/6
+Jocelyne/6
+Jocelyn/6
+jockey/26
+jock/26
+Jock/6
+Jocko/6
+jockstrap/7
+jocoseness/7
+jocose/28
+jocosity/7
+jocularity/7
+jocular/19
+jocundity/7
+jocund/19
+Jodee/6
+jodhpurs
+Jodie/6
+Jodi/6
+Jody/6
+Joeann/6
+Joela/6
+Joelie/6
+Joella/6
+Joelle/6
+Joellen/6
+Joell/72
+Joelly/6
+Joellyn/6
+Joel/86
+Joelynn/6
+Joe/6
+Joesph/6
+Joete/6
+joey/6
+Joey/6
+jogged
+jogger/7
+jogging/9
+joggler/6
+joggle/31
+Jogjakarta/6
+jog/9
+Johan/6
+Johannah/6
+Johanna/6
+Johannes
+Johannesburg/6
+Johann/6
+Johansen/6
+Johanson/6
+Johna/140
+Johnathan/6
+Johnath/6
+Johnathon/6
+Johnette/6
+Johnie/6
+Johnna/6
+Johnnie/6
+johnnycake/7
+Johnny/6
+johnny/7
+Johnsen/6
+john/7
+John/7
+Johns/122
+Johnson/6
+Johnston/6
+Johnstown/6
+Johny/6
+Joice/6
+join/585
+joined/12
+joiner/276
+joinery/7
+jointed/361
+jointedness/82
+joint/586
+jointer/6
+jointly/278
+joint's
+jointures
+joist/26
+Jojo/6
+joke/49
+joker/6
+jokey
+jokier
+jokiest
+jokily
+joking/19
+Jolee/6
+Joleen/6
+Jolene/6
+Joletta/6
+Jolie/6
+Joliet's
+Joli/6
+Joline/6
+Jolla/6
+jollification/7
+jollily
+jolliness/7
+jollity/7
+jolly/226
+Jolson/6
+jolt/23
+jolter/6
+Joly/6
+Jolyn/6
+Jolynn/6
+Jo/86
+Jonah/6
+Jonahs
+Jonas
+Jonathan/6
+Jonathon/6
+Jonell/6
+Jone/7
+Jones/9
+Jonie/6
+Joni/7
+Jon/6
+jonquil/7
+Jonson/6
+Joplin/6
+Jordain/6
+Jordana/6
+Jordanian/9
+Jordan/6
+Jordanna/6
+Jordon/6
+Jorey/6
+Jorgan/6
+Jorge/6
+Jorgensen/6
+Jorgenson/6
+Jorie/6
+Jori/6
+Jorrie/6
+Jorry/6
+Jory/6
+Joscelin/6
+Josee/6
+Josefa/6
+Josefina/6
+Josef/6
+Joseito/6
+Jose/6
+Josepha/6
+Josephina/6
+Josephine/6
+Joseph/6
+Josephs
+Josephson/6
+Josephus/6
+Josey/6
+josh/23
+josher/6
+Joshia/6
+Josh/6
+Joshuah/6
+Joshua/6
+Josiah/6
+Josias/6
+Josie/6
+Josi/6
+Josselyn/6
+joss/6
+jostle/17
+Josue/6
+Josy/6
+jot/9
+jotted
+jotter/7
+jotting/7
+Joule/6
+joule/7
+jounce/17
+jouncy/54
+Jourdain/6
+Jourdan/6
+journalese/7
+journal/26
+journalism/7
+journalistic
+journalist/7
+journalize/23
+journalized/12
+journalizer/6
+journey/91
+journeyer/6
+journeyman/6
+journeymen
+jouster/6
+joust/49
+Jovanovich/6
+Jove/6
+joviality/7
+jovial/19
+Jovian
+jowl/56
+jowly/54
+Joya/6
+Joyan/6
+Joyann/6
+Joycean
+Joycelin/6
+Joyce/6
+Joye/6
+joyfuller
+joyfullest
+joyfulness/7
+joyful/28
+joylessness/7
+joyless/28
+Joy/6
+joy/26
+Joyner/6
+joyousness/7
+joyous/28
+joyridden
+joyride/198
+joyrode
+joystick/9
+Jozef/6
+JP
+Jpn
+Jr/6
+j's
+J's
+Jsandye/6
+Juana/6
+Juanita/6
+Juan/6
+Juarez
+Jubal/6
+jubilant/19
+jubilate/15
+jubilation/6
+jubilee/7
+Judah/6
+Judaic
+Judaical
+Judaism/7
+Judas/9
+juddered
+juddering
+Judd/6
+Judea/6
+Jude/6
+judge/36
+judger/6
+judge's
+judgeship/7
+judgmental/19
+judgment/7
+judicable
+judicatory/9
+judicature/7
+judicial/19
+judiciary/9
+judicious/68
+judiciousness/43
+Judie/6
+Judi/140
+Juditha/6
+Judith/6
+Jud/6
+judo/7
+Judon/6
+Judson/6
+Judye/6
+Judy/6
+jugate/278
+jugful/7
+jugged
+Juggernaut/6
+juggernaut/7
+jugging
+juggler/6
+juggle/23
+jugglery/7
+jug/7
+jugular/9
+juice/49
+juicer/6
+juicily
+juiciness/7
+juicy/98
+Juieta/6
+jujitsu/7
+jujube/7
+juju/6
+jujutsu's
+jukebox/7
+juke/166
+Julee/6
+Jule/7
+julep/7
+Julia/6
+Juliana/6
+Juliane/6
+Julian/6
+Julianna/6
+Julianne/6
+Juliann/6
+Julie/6
+julienne/17
+Julienne/6
+Julieta/6
+Juliet/6
+Julietta/6
+Juliette/6
+Juli/6
+Julina/6
+Juline/6
+Julio/6
+Julissa/6
+Julita/6
+Julius/6
+Jul/6
+Julys
+July/7
+jumble/17
+jumbo/7
+jumper/6
+jump/23
+jumpily
+jumpiness/7
+jumpsuit/9
+jumpy/98
+jun
+junco/7
+junction/587
+juncture/276
+Juneau/6
+June/7
+Junette/6
+Jungfrau/6
+Jungian
+jungle/56
+Jung/6
+Junia/6
+Junie/6
+Junina/6
+juniority/6
+junior/7
+Junior/9
+juniper/7
+junkerdom
+Junker/7
+junketeer/26
+junket/26
+junk/49
+junkie/80
+junkyard/7
+Jun/6
+Juno/6
+junta/7
+Jupiter/6
+Jurassic
+juridic
+juridical/19
+juried
+jurisdictional/19
+jurisdiction/7
+jurisprudence/7
+jurisprudent
+jurisprudential/19
+juristic
+jurist/7
+juror/7
+Jurua/6
+jury/43
+jurying
+juryman/6
+jurymen
+jurywoman/6
+jurywomen
+justed
+Justen/6
+juster/6
+justest
+Justice/6
+justice/43
+justiciable
+justifiability/6
+justifiable/12
+justifiably/12
+justification/6
+justified/13
+justifier/6
+justify/115
+Justina/6
+Justine/6
+justing
+Justinian/6
+Justin/6
+Justinn/6
+Justino/6
+Justis/6
+justness/7
+justness's/12
+justs
+just/161
+Justus/6
+jute/7
+Jutish
+Jutland/6
+jut/9
+jutted
+jutting
+Juvenal/6
+juvenile/7
+juxtapose/17
+juxtaposition/7
+JV
+J/588
+Jyoti/6
+Kaaba/6
+kabob/7
+kaboom
+Kabuki
+kabuki/7
+Kabul/6
+Kacey/6
+Kacie/6
+Kacy/6
+Kaddish/6
+kaddish/9
+Kaela/6
+kaffeeklatch
+kaffeeklatsch/9
+Kafkaesque
+Kafka/6
+kaftan's
+Kagoshima/6
+Kahaleel/6
+Kahlil/6
+Kahlua/6
+Kahn/6
+Kaia/6
+Kaifeng/6
+Kaila/6
+Kaile/6
+Kailey/6
+Kai/6
+Kaine/6
+Kain/6
+kaiser/7
+Kaiser/7
+Kaitlin/6
+Kaitlyn/6
+Kaitlynn/6
+Kaja/6
+Kajar/6
+Kakalina/6
+Kalahari/6
+Kala/6
+Kalamazoo/6
+Kalashnikov/6
+Kalb/6
+Kaleb/6
+Kaleena/6
+kaleidescope
+kaleidoscope/7
+kaleidoscopic
+kaleidoscopically
+Kale/6
+kale/7
+Kalgoorlie/6
+Kalie/6
+Kalila/6
+Kalil/6
+Kali/6
+Kalina/6
+Kalinda/6
+Kalindi/6
+Kalle/6
+Kalli/6
+Kally/6
+Kalmyk
+Kalvin/6
+Kama/6
+Kamchatka/6
+Kamehameha/6
+Kameko/6
+Kamikaze/7
+kamikaze/7
+Kamilah/6
+Kamila/6
+Kamillah/6
+Kampala/6
+Kampuchea/6
+Kanchenjunga/6
+Kandace/6
+Kandahar/6
+Kandinsky/6
+Kandy/6
+Kane/6
+kangaroo/26
+Kania/6
+Kankakee/6
+Kan/7
+Kannada/6
+Kano/6
+Kanpur/6
+Kansan/9
+Kansas
+Kantian
+Kant/6
+Kanya/6
+Kaohsiung/6
+kaolinite/6
+kaolin/7
+Kaplan/6
+kapok/7
+Kaposi/6
+kappa/7
+kaput/6
+Karachi/6
+Karaganda/6
+Karakorum/6
+karakul/7
+Karalee/6
+Karalynn/6
+Kara/6
+Karamazov/6
+karaoke/9
+karate/7
+karat/7
+Karee/6
+Kareem/6
+Karel/6
+Kare/6
+Karena/6
+Karenina/6
+Karen/6
+Karia/6
+Karie/6
+Karil/6
+Karilynn/6
+Kari/6
+Karim/6
+Karina/6
+Karine/6
+Karin/6
+Kariotta/6
+Karisa/6
+Karissa/6
+Karita/6
+Karla/6
+Karlan/6
+Karlee/6
+Karleen/6
+Karlene/6
+Karlen/6
+Karlie/6
+Karlik/6
+Karlis
+Karl/451
+Karloff/6
+Karlotta/6
+Karlotte/6
+Karly/6
+Karlyn/6
+karma/7
+Karmen/6
+karmic
+Karna/6
+Karney/6
+Karola/6
+Karole/6
+Karolina/6
+Karoline/6
+Karol/6
+Karoly/6
+Karon/6
+Karo/86
+Karp/6
+Karrah/6
+Karrie/6
+Karroo/6
+Karry/6
+kart/7
+Karylin/6
+Karyl/6
+Kary/6
+Karyn/6
+Kasai/6
+Kasey/6
+Kashmir/7
+Kaspar/6
+Kasparov/6
+Kasper/6
+Kass
+Kassandra/6
+Kassey/6
+Kassia/6
+Kassie/6
+Kassi/6
+katakana
+Katalin/6
+Kata/6
+Katee/6
+Katelyn/6
+Kate/6
+Katerina/6
+Katerine/6
+Katey/6
+Katha/6
+Katharina/6
+Katharine/6
+Katharyn/6
+Kathe/6
+Katherina/6
+Katherine/6
+Katheryn/6
+Kathiawar/6
+Kathie/6
+Kathi/6
+Kathleen/6
+Kathlin/6
+Kath/6
+Kathmandu
+Kathrine/6
+Kathryne/6
+Kathryn/6
+Kathye/6
+Kathy/6
+Katie/6
+Kati/6
+Katina/6
+Katine/6
+Katinka/6
+Katleen/6
+Katlin/6
+Kat/6
+Katmai/6
+Katmandu's
+Katowice/6
+Katrina/6
+Katrine/6
+Katrinka/6
+Kattie/6
+Katti/6
+Katuscha/6
+Katusha/6
+Katya/6
+katydid/7
+Katy/6
+Katz/6
+Kauai/6
+Kauffman/6
+Kaufman/6
+Kaunas/6
+Kaunda/6
+Kawabata/6
+Kawasaki/6
+kayak/26
+Kaycee/6
+Kaye/6
+Kayla/6
+Kaylee/6
+Kayle/6
+Kayley/6
+Kaylil/6
+Kaylyn/6
+Kay/6
+Kayne/6
+kayo/26
+Kazakh/6
+Kazakhstan
+Kazan/6
+Kazantzakis/6
+kazoo/7
+Kb
+KB
+KC
+kcal/6
+kc/6
+KDE/6
+Keane/6
+Kean/6
+Kearney/6
+Keary/6
+Keaton/6
+Keats/6
+kebab/7
+Keck/6
+Keefe/114
+Keefer/6
+Keegan/6
+Keelby/6
+Keeley/6
+keel/111
+keelhaul/17
+Keelia/6
+Keely/6
+Keenan/6
+Keene/6
+keener/6
+keen/77
+keening/6
+Keen/6
+keenness/7
+keeper/6
+keep/210
+keeping/6
+keepsake/7
+Keewatin/6
+kegged
+kegging
+keg/7
+Keillor/6
+Keir/6
+Keisha/6
+Keith/6
+Kelbee/6
+Kelby/6
+Kelcey/6
+Kelcie/6
+Kelci/6
+Kelcy/6
+Kele/6
+Kelila/6
+Kellby/6
+Kellen/6
+Keller/6
+Kelley/6
+Kellia/6
+Kellie/6
+Kelli/6
+Kellina/6
+Kellogg/6
+Kellsie/6
+Kellyann/6
+Kelly/6
+kelp/453
+Kelsey/6
+Kelsi/6
+Kelsy/6
+Kelt's
+Kelvin/6
+kelvin/7
+Kelwin/6
+Kemerovo/6
+Kempis/6
+Kemp/6
+Kendall/6
+Kendal/6
+Kendell/6
+Kendra/6
+Kendre/6
+Kendrick/7
+Kenilworth/6
+Ken/6
+Kenmore/6
+ken/7
+Kenna/6
+Kennan/6
+Kennecott/6
+kenned
+Kennedy/6
+kennel/26
+Kenneth/6
+Kennett/6
+Kennie/6
+kenning
+Kennith/6
+Kenn/6
+Kenny/6
+keno/6
+Kenon/6
+Kenosha/6
+Kensington/6
+Kent/6
+Kenton/6
+Kentuckian/9
+Kentucky/6
+Kenya/6
+Kenyan/9
+Kenyatta/6
+Kenyon/6
+Keogh/6
+Keokuk/6
+kepi/7
+Kepler/6
+kept
+keratin/7
+kerbside
+Kerby/6
+kerchief/26
+Kerensky/6
+Kerianne/6
+Keriann/6
+Keri/6
+Kerk/6
+Ker/6
+Kermie/6
+Kermit/6
+Kermy/6
+kerned
+kernel/26
+kerning
+Kern/6
+kerosene/7
+Kerouac/6
+Kerrie/6
+Kerrill/6
+Kerri/6
+Kerrin/6
+Kerr/6
+Kerry/6
+Kerstin/6
+Kerwin/6
+Kerwinn/6
+Kesley/6
+Keslie/6
+Kessiah/6
+Kessia/6
+Kessler/6
+kestrel/7
+ketch/7
+ketchup/7
+ketone/6
+ketosis/6
+Kettering/6
+Kettie/6
+Ketti/6
+kettledrum/7
+kettleful
+kettle/7
+Ketty/6
+Kevan/6
+Keven/6
+Kevina/6
+Kevin/6
+Kevlar
+Kev/72
+Kevon/6
+Kevorkian/6
+Kevyn/6
+Kewaskum/6
+Kewaunee/6
+Kewpie/6
+keyboardist/9
+keyboard/49
+keyclick/7
+keyhole/7
+Key/6
+Keynesian/6
+Keynes/6
+keynoter/6
+keynote/49
+keypad/7
+keypuncher/6
+keypunch/23
+keyring
+key/26
+keystone/7
+keystroke/26
+keyword/7
+k/589
+kg
+K/224
+KGB
+Khabarovsk/6
+Khachaturian/6
+khaki/7
+Khalid/6
+Khalil/6
+Khan/6
+khan/7
+Kharkov/6
+Khartoum/6
+Khayyam/6
+Khmer/6
+Khoisan/6
+Khomeini/6
+Khorana/6
+Khrushchev/7
+Khufu/6
+Khulna/6
+Khwarizmi/6
+Khyber/6
+kHz/6
+KIA
+Kiah/6
+Kial/6
+kibble/26
+kibbutzim
+kibbutz/6
+kibitzer/6
+kibitz/23
+kibosh/26
+Kickapoo/6
+kickback/7
+kickball/7
+kicker/6
+kick/23
+kickoff/7
+kickstand/7
+kicky/54
+kidded
+kidder/7
+kiddie/142
+kidding/86
+kiddish
+Kidd/6
+kiddo/7
+kiddying
+kiddy's
+kidless
+kid/7
+kidnaper's
+kidnaping's
+kidnap/590
+kidnapped
+kidnapper/7
+kidnapping/9
+kidney/7
+kidskin/7
+Kieffer/6
+kielbasa/7
+kielbasi
+Kiele/6
+Kiel/6
+Kienan/6
+kier/45
+Kierkegaard/6
+Kiersten/6
+Kieth/6
+Kiev/6
+Kigali/6
+Kikelia/6
+Kikuyu/6
+Kilauea/6
+Kile/6
+Kiley/6
+Kilian/6
+Kilimanjaro/6
+kill/234
+killdeer/7
+Killebrew/6
+killer/6
+Killian/6
+Killie/6
+killing/19
+killjoy/9
+Killy/6
+kiln/26
+kilobaud/6
+kilobit/9
+kilobuck
+kilobyte/9
+kilocycle/7
+kilogauss/6
+kilogram/7
+kilohertz/6
+kilohm/6
+kilojoule/7
+kiloliter/7
+kilometer/7
+kilo/7
+kiloton/7
+kilovolt/7
+kilowatt/7
+kiloword
+kilter/6
+kilt/49
+Ki/6
+Kimball/6
+Kimbell/6
+Kimberlee/6
+Kimberley/6
+Kimberli/6
+Kimberly/6
+Kimberlyn/6
+Kimble/6
+Kimbra/6
+Kim/6
+Kimmie/6
+Kimmi/6
+Kimmy/6
+kimono/7
+Kincaid/6
+kinda
+kindergarten/7
+kinderg�rtner/7
+kinder/12
+kindheartedness/7
+kindhearted/28
+kindle/395
+kindler/6
+kindliness/7
+kindliness's/12
+kindling/6
+kindly/264
+kindness's
+kindness/302
+kind/38
+kindred/9
+kinematic/9
+kinematics/6
+kinesics/6
+kine/7
+kinesthesis
+kinesthetically
+kinesthetic/9
+kinetically
+kinetic/9
+kinetics/6
+kinfolk/9
+kingbird/6
+kingdom/7
+kingfisher/7
+kinglet/6
+kingliness/6
+kingly/98
+King/6
+kingpin/7
+Kingsbury/6
+king/116
+kingship/7
+Kingsley/6
+Kingsly/6
+Kingston/6
+Kingstown/6
+Kingwood/6
+kink/26
+kinkily
+kinkiness/7
+kinky/98
+Kin/6
+kin/7
+Kinna/6
+Kinney/6
+Kinnickinnic/6
+Kinnie/6
+Kinny/6
+Kinsey/6
+kinsfolk/9
+Kinshasa/6
+Kinshasha/6
+kinship/7
+Kinsley/6
+kinsman/6
+kinsmen/6
+kinswoman/6
+kinswomen
+kiosk/7
+Kiowa/7
+Kipling/6
+Kip/6
+kip/7
+Kippar/6
+kipped
+kipper/26
+Kipper/6
+Kippie/6
+kipping
+Kipp/114
+Kippy/6
+Kira/6
+Kirbee/6
+Kirbie/6
+Kirby/6
+Kirchhoff/6
+Kirchner/6
+Kirchoff/6
+Kirghistan/6
+Kirghizia/6
+Kirghiz/6
+Kiribati
+Kiri/6
+Kirinyaga/6
+kirk/26
+Kirkland/6
+Kirk/6
+Kirkpatrick/6
+Kirkwood/6
+Kirov/6
+kirsch/9
+Kirsteni/6
+Kirsten/6
+Kirsti/6
+Kirstin/6
+Kirstyn/6
+Kisangani/6
+Kishinev/6
+kismet/7
+kiss/234
+Kissee/6
+kisser/6
+Kissiah/6
+Kissie/6
+Kissinger/6
+Kitakyushu/6
+kitbag's
+kitchener/6
+Kitchener/6
+kitchenette/7
+kitchen/111
+kitchenware/7
+kiter/6
+kite/7
+kith/165
+kiths
+Kit/6
+kit/111
+kitsch/7
+kitschy
+kitted
+kittenishness/6
+kittenish/28
+kitten/26
+Kittie/6
+Kitti/6
+kitting
+kittiwakes
+Kitty/6
+kitty/7
+Kiwanis/6
+kiwifruit/9
+kiwi/7
+Kizzee/6
+Kizzie/6
+KKK
+kl
+Klan/6
+Klansman/6
+Klara/6
+Klarika/6
+Klarrisa/6
+Klaus/6
+klaxon/6
+Klee/6
+Kleenex/7
+Klein/6
+Kleinrock/6
+Klemens/6
+Klement/6
+Kleon/6
+kleptomaniac/7
+kleptomania/7
+Kliment/6
+Kline/6
+Klingon/6
+Klondike/26
+kludger/6
+kludge/49
+kludgey
+klutziness/9
+klutz/7
+klutzy/98
+Klux/6
+klystron/7
+km
+kn
+knacker/6
+knack/49
+knackwurst/7
+Knapp/6
+knapsack/7
+Knauer/6
+knavery/7
+knave/7
+knavish/19
+kneader/6
+knead/23
+kneecap/7
+kneecapped
+kneecapping
+knee/56
+kneeing
+kneeler/6
+kneel/255
+kneepad/7
+knell/26
+knelt
+Knesset/6
+knew
+Kngwarreye/6
+Knickerbocker/7
+knickerbocker/9
+knickknack/7
+knick/90
+Knievel/6
+knife/26
+knighthood/7
+knightliness/7
+knightly/42
+Knight/6
+knight/116
+knish/7
+knit/13
+knits
+knitted
+knitter/7
+knitting/7
+knitwear/6
+knives/6
+knobbly
+knobby/54
+Knobeloch/6
+knob/7
+knockabout/6
+knockdown/9
+knocker/6
+knock/179
+knockoff/9
+knockout/7
+knockwurst's
+knoll/26
+Knopf/6
+Knossos/6
+knothole/7
+knot/7
+knotted
+knottiness/6
+knotting/6
+knotty/98
+knowable/12
+knower/6
+know/591
+knowhow
+knowingly/12
+knowing/93
+knowings/12
+knowledgeableness/6
+knowledgeable/42
+knowledgeably
+knowledge/7
+Knowles
+known/302
+Knox/6
+Knoxville/6
+knuckleball/164
+knuckle/26
+knuckleduster
+knucklehead/7
+Knudsen/6
+Knudson/6
+knurl/17
+Knuth/6
+Knutsen/6
+Knutson/6
+KO
+koala/7
+Kobayashi/6
+Kobe/6
+Kochab/6
+Koch/6
+Kodachrome/6
+Kodak/7
+Kodaly/6
+Kodiak/6
+Koenig/6
+Koenigsberg/6
+Koenraad/6
+Koestler/6
+Kohinoor/6
+Kohler/6
+Kohl/114
+kohlrabies
+kohlrabi/6
+kola/7
+Kolyma/6
+Kommunizma/6
+Kong/6
+Kongo/6
+Konrad/6
+Konstance/6
+Konstantine/6
+Konstantin/6
+Konstanze/6
+kookaburra/7
+kook/26
+kookiness/9
+kooky/98
+Koo/6
+Koontz/6
+kopeck/7
+Koppers/6
+Koralle/6
+Koral/6
+Kora/6
+Koranic
+Koran/7
+Kordula/6
+Korea/6
+Korean/9
+Korella/6
+Kore/6
+Koren/6
+Koressa/6
+Korey/6
+Korie/6
+Kori/6
+Kornberg/6
+Korney/6
+Korrie/6
+Korry/6
+Kort/6
+Kory/6
+Korzybski/6
+Kosciusko/6
+kosher/17
+Kossuth/6
+Kosygin/6
+Kovacs/6
+Kowalewski/6
+Kowalski/6
+Kowloon/6
+kowtow/17
+KP
+kph
+kraal/26
+Kraemer/6
+kraft/6
+Kraft/6
+Krakatau's
+Krakatoa/6
+Krakow/6
+Kramer/6
+Krasnodar/6
+Krasnoyarsk/6
+Krause/6
+kraut/252
+Krebs/6
+Kremlin/6
+Kremlinologist/7
+Kremlinology/7
+Kresge/6
+Krieger/6
+kriegspiel/6
+krill/7
+Kringle/6
+Krisha/6
+Krishnah/6
+Krishna/6
+Kris/6
+Krispin/6
+Krissie/6
+Krissy/6
+Kristal/6
+Krista/6
+Kristan/6
+Kristel/6
+Kriste/6
+Kristen/6
+Kristian/6
+Kristie/6
+Kristien/6
+Kristi/72
+Kristina/6
+Kristine/6
+Kristin/6
+Kristofer/6
+Kristoffer/6
+Kristofor/6
+Kristoforo/6
+Kristo/7
+Kristopher/6
+Kristy/6
+Kristyn/6
+Kr/6
+Kroc/6
+Kroger/6
+kr�na/6
+Kronecker/6
+krone/114
+kronor
+kr�nur
+Kropotkin/6
+Krueger/6
+Kruger/6
+Krugerrand/9
+Krupp/6
+Kruse/6
+krypton/7
+Krystalle/6
+Krystal/6
+Krysta/6
+Krystle/6
+Krystyna/6
+ks
+K's
+KS
+k's/316
+kt
+Kublai/6
+Kubrick/6
+kuchen/7
+kudos/6
+kudzu/7
+Kuenning/6
+Kuhn/6
+Kuibyshev/6
+Ku/6
+Kumar/6
+kumquat/7
+Kunming/6
+Kuomintang/6
+Kurdish/6
+Kurdistan/7
+Kurd/7
+Kurosawa/6
+Kurtis/6
+Kurt/6
+kurtosis/6
+Kusch/6
+Kuwaiti/7
+Kuwait/6
+Kuznetsk/6
+Kuznets/6
+kvetch/17
+kw
+kW
+Kwakiutl/6
+Kwangchow's
+Kwangju/6
+Kwanzaa/9
+kWh
+KY
+Kyla/6
+kyle/6
+Kyle/6
+Kylen/6
+Kylie/6
+Kylila/6
+Kylynn/6
+Ky/140
+Kym/6
+Kynthia/6
+Kyoto/6
+Kyrgyzstan
+Kyrstin/6
+Kyushu/6
+L
+LA
+Laban/6
+labeled/12
+labeler/6
+label/119
+labellings/14
+label's
+labial/16
+labia/6
+labile
+labiodental
+labium/6
+laboratory/7
+laboredness/6
+labored/218
+labored's/12
+laborer/6
+laboring/86
+laborings/12
+laboriousness/7
+laborious/28
+labor/91
+laborsaving
+Labradorean/9
+Labrador/7
+lab/7
+Lab/7
+laburnum/7
+labyrinthine
+labyrinth/6
+labyrinths
+laced/12
+Lacee/6
+lace/7
+lacerate/24
+laceration/6
+lacer/6
+laces/12
+lacewing/7
+Lacey/6
+Lachesis/6
+lachrymal/9
+lachrymose
+Lacie/6
+lacing/6
+lackadaisic
+lackadaisical/19
+Lackawanna/6
+lacker/6
+lackey/26
+lack/111
+lackluster/9
+Lac/6
+laconic
+laconically
+lacquerer/6
+lacquer/49
+lacrosse/7
+lac/111
+lactate/269
+lactational/19
+lactation/6
+lacteal
+lactic
+lactose/7
+lacunae
+lacuna/6
+Lacy/6
+lacy/54
+ladder/26
+laddie/7
+laded/12
+ladened
+ladening
+laden/12
+lade/9
+lading/6
+ladle/26
+Ladoga/6
+Ladonna/6
+lad/592
+ladybird/7
+ladybug/7
+ladyfinger/7
+ladylike/12
+ladylove/7
+Ladyship/7
+ladyship/7
+lady/7
+Lady/7
+Laetitia/6
+laetrile/9
+Lafayette/6
+Lafitte/6
+lager/165
+laggard/32
+laggardness/6
+lagged
+lagging/7
+lagniappe/7
+lagoon/7
+Lagos/6
+Lagrange/6
+Lagrangian/6
+Laguerre/6
+Laguna/6
+lag/110
+Lahore/6
+laid/58
+Laidlaw/6
+lain
+Laina/6
+Lainey/6
+Laird/6
+laird/7
+lair/26
+laissez
+laity/7
+Laius/6
+lake/111
+Lakehurst/6
+Lakeisha/6
+laker/6
+lakeside
+Lakewood/6
+Lakisha/6
+Lakshmi/6
+lallygagged
+lallygagging
+lallygag/9
+Lalo/6
+La/6
+Lamaism/7
+Lamarck/6
+Lamar/6
+lamasery/7
+lama/7
+Lamaze
+lambada/9
+lambaste/17
+lambda/7
+lambency/7
+lambent/19
+Lambert/6
+lambkin/7
+Lamb/6
+Lamborghini/6
+lambskin/7
+lamb/111
+lambswool
+lamebrain/7
+lamed/6
+lameness/7
+lamentableness/6
+lamentable/42
+lamentably
+lamentation/7
+lament/88
+lamented/12
+lame/46
+la/593
+laminae
+lamina/6
+laminar
+laminate/15
+lamination/6
+lam/172
+lammed
+lammer
+lamming
+Lammond/6
+Lamond/6
+Lamont/6
+L'Amour
+lampblack/7
+lamplighter/6
+lamplight/96
+lampooner/6
+lampoon/111
+Lamport/6
+lamppost/7
+lamprey/7
+lamp/111
+lampshade/7
+LAN
+Lanae/6
+Lanai/6
+lanai/7
+Lana/6
+Lancashire/6
+Lancaster/6
+Lancelot/6
+Lance/6
+lancer/6
+lance/49
+lancet/7
+landau/7
+lander/45
+landfall/7
+landfill/17
+landforms
+landholder/6
+landhold/173
+landing/6
+Landis/6
+landlady/7
+landless
+landlines
+landlocked
+landlord/7
+landlubber/7
+Land/6
+landmark/26
+landmass/7
+Landon/6
+landowner/7
+landownership/6
+landowning/7
+Landry/6
+Landsat
+landscape/49
+landscaper/6
+lands/45
+landslide/7
+landslid/224
+landslip
+landsman/6
+landsmen
+land/91
+Landsteiner/6
+landward/9
+Landwehr/6
+Lane/6
+lane/7
+Lanette/6
+Laney/6
+Langeland/6
+Lange/6
+Langerhans/6
+Langford/6
+Langland/6
+Langley/6
+Lang/6
+Langmuir/6
+Langsdon/6
+Langston/6
+language/7
+languidness/7
+languid/28
+languisher/6
+languishing/19
+languish/31
+languorous/19
+languor/7
+Lanie/6
+Lani/6
+Lanita/6
+lankiness/7
+lankness/7
+lank/33
+lanky/98
+Lanna/6
+Lannie/6
+Lanni/6
+Lanny/6
+lanolin/7
+Lansing/6
+lantern/26
+lanthanide/6
+lanthanum/7
+lanyard/7
+Lanzhou
+Laocoon/6
+Lao/7
+Laotian/7
+lapboard/7
+lapdog/9
+lapel/7
+lapidary/7
+lapin/7
+Laplace/6
+Lapland/231
+lapped
+lappet/7
+lapping
+Lapp/7
+lapsed/14
+lapse/594
+lapser/118
+lapses/14
+lapsing/14
+lap/7
+laps/31
+laptop/7
+lapwing/7
+Laraine/6
+Lara/6
+Laramie/6
+larboard/7
+larcenist/9
+larcenous
+larceny/7
+larch/7
+larder/6
+lard/49
+Lardner/6
+lardy/54
+Laredo/6
+largehearted
+largemouth
+largeness/7
+large/38
+largess/7
+largish
+largo/9
+lariat/26
+Lari/6
+Larina/6
+Larine/6
+Larisa/6
+Larissa/6
+larker/6
+lark/111
+Lark/6
+larkspur/7
+Larousse/6
+Larry/6
+Larsen/6
+Lars/72
+Larson/6
+larvae
+larval
+larva/6
+laryngeal/16
+larynges
+laryngitides
+laryngitis/6
+larynx/6
+Laryssa/6
+lasagna/9
+lasagne's
+Lascaux/6
+lasciviousness/7
+lascivious/28
+lase
+laser/6
+lashed/12
+lasher/6
+lashing/6
+lash/211
+Lassa/6
+Lassen/6
+Lassie/6
+lassie/7
+lassitude/7
+lassoer/6
+lasso/111
+las/227
+lass/7
+laster/6
+lastingness/6
+lasting/28
+last/595
+Laszlo/6
+Latasha/6
+Latashia/6
+latching/6
+latchkey/7
+latch's
+latch/180
+latecomer/7
+lated/14
+late/500
+lately
+latency/7
+lateness/7
+latent/16
+later/14
+lateral/183
+lateralization
+Lateran/6
+latest/9
+LaTeX/6
+latex/7
+lathe/6
+latherer/6
+lather/570
+lathery
+lathing/6
+lath/49
+Lathrop/6
+laths
+Latia/6
+latices/6
+Latina/7
+Latinate
+Latino/9
+Latin/175
+latish
+Latisha/6
+latitude/7
+latitudinal/19
+latitudinarian/9
+latitudinary
+Lat/6
+Latonya/6
+Latoya/6
+Latrena/6
+Latrina/6
+latrine/7
+Latrobe/6
+lat/596
+latter/86
+latte/208
+lattice/26
+latticework/7
+latticing/6
+Lattimer/6
+Latvia/6
+Latvian/9
+laudably
+laudanum/7
+laudatory
+Lauderdale/6
+lauder/6
+Lauder/6
+Laud/114
+laud/318
+lauds/6
+Laue/6
+laughableness/6
+laughable/42
+laughably
+laugh/597
+laugher/6
+laughing/86
+laughingstock/7
+laughs
+laughter/7
+Laughton/6
+Launce/6
+launch/36
+launcher/7
+launching/9
+launchpad/9
+laundered/12
+launderer/6
+launderette/7
+launder/179
+laundress/7
+laundrette/9
+laundromat/9
+Laundromat/7
+laundryman/6
+laundrymen
+laundry/7
+laundrywoman/6
+laundrywomen
+Lauraine/6
+Lauralee/6
+Laural/6
+laura/6
+Laura/6
+Laurasia/6
+laureate/55
+laureateship/7
+Lauree/6
+Laureen/6
+Laurella/6
+Laurel/6
+laurel/26
+Laure/6
+Laurena/6
+Laurence/6
+Laurene/6
+Lauren/7
+Laurentian
+Laurent/6
+Lauretta/6
+Laurette/6
+Laurianne/6
+Laurice/6
+Laurie/6
+Lauri/6
+Lauritz/6
+Lauryn/6
+Lausanne/6
+lavage/7
+lavaliere/7
+Laval/6
+lava/7
+lavatory/7
+lave/17
+Lavena/6
+lavender/26
+Laverna/6
+Laverne/6
+Lavern/6
+Lavina/6
+Lavinia/6
+Lavinie/6
+lavishness/7
+lavish/77
+Lavoisier/6
+Lavonne/6
+Lawanda/6
+lawbreaker/7
+lawbreaking/7
+Lawford/6
+lawfulness/41
+lawful/161
+lawgiver/7
+lawgiving/6
+lawlessness/7
+lawless/28
+Law/6
+lawmaker/7
+lawmaking/7
+lawman/6
+lawmen
+lawnmower/9
+lawn/7
+Lawrence/6
+Lawrenceville/6
+lawrencium/7
+Lawry/6
+law/26
+Lawson/6
+lawsuit/7
+Lawton/6
+lawyer/116
+laxativeness/6
+laxative/32
+laxer/14
+laxes/14
+laxity/7
+laxness/7
+lax/38
+layabout/7
+Layamon/6
+layaway/9
+lay/598
+layered/169
+layer/209
+layering/6
+layer's/443
+layette/7
+Layla/6
+Lay/6
+layman/6
+laymen
+Layne/6
+Layney/6
+layoff/7
+layout/7
+layover/7
+laypeople
+layperson/9
+lays/58
+Layton/6
+layup/7
+laywoman/6
+laywomen
+Lazare/6
+Lazar/6
+Lazaro/6
+Lazarus/6
+laze/17
+lazily
+laziness/7
+lazuli/6
+lazybones/6
+lazy/226
+lb
+LBJ/6
+lbs
+LC
+LCD
+LCM
+LDC
+leachate
+Leach/6
+leach/17
+Leadbelly/6
+leaded/12
+leadenness/6
+leaden/535
+leaderless
+leader/6
+leadership/7
+lead/581
+leadsman/6
+leadsmen
+leafage/7
+leaf/26
+leafhopper/6
+leafiness/6
+leafless
+leaflet/26
+leafstalk/7
+leafy/98
+leaguer/6
+league/49
+Leah/6
+leakage/7
+leaker/6
+Leakey/6
+leak/111
+leakiness/7
+leaky/98
+Lea/6
+lea/7
+Leander/6
+Leandra/6
+leaner/6
+leaning/6
+Lean/6
+Leanna/6
+Leanne/6
+leanness/7
+Leann/6
+Leanora/6
+Leanor/6
+lean/241
+leaper/6
+leapfrogged
+leapfrogging
+leapfrog/7
+leap/23
+Lear/6
+learnedly
+learnedness/6
+learned/13
+learner/6
+learning/6
+learns/13
+learn/179
+Leary/6
+lease/395
+leaseback/7
+leaseholder/6
+leasehold/96
+leaser/118
+lease's
+leash's
+leash/180
+leasing/6
+leas/23
+least/9
+leastwise
+leatherette/9
+leather/26
+leathern
+leatherneck/7
+leathery
+leaven/171
+leavened/12
+leavening/6
+Leavenworth/6
+leaver/6
+leaves/6
+leave/179
+leaving/6
+Lebanese
+Lebanon/6
+Lebbie/6
+lebensraum
+Lebesgue/6
+Leblanc/6
+lecher/26
+lecherousness/7
+lecherous/28
+lechery/7
+lecithin/7
+lectern/7
+lecturer/6
+lecture/49
+lectureship/7
+led
+Leda/6
+Lederberg/6
+ledger/165
+ledge/96
+LED/7
+Leeanne/6
+Leeann/6
+leech/26
+Leeds/6
+leek/7
+Leelah/6
+Leela/6
+Leeland/6
+Lee/6
+lee/96
+Leena/6
+leer/47
+leeriness/7
+leering/19
+leery/98
+Leesa/6
+Leese/6
+Leeuwenhoek/6
+Leeward/6
+leeward/9
+leeway/7
+leftism/7
+leftist/7
+leftmost
+leftover/7
+Left/9
+left/228
+leftward/9
+Lefty/6
+lefty/7
+legacy/7
+legalese/7
+legalism/7
+legalistic
+legality/7
+legalization/7
+legalize/17
+legalized/12
+legal/16
+legate/103
+legatee/7
+legate's/169
+legation/104
+legato/7
+legendarily
+legendary/9
+Legendre/6
+legend/7
+legerdemain/7
+Leger/7
+legged
+legginess/7
+legging/7
+leggy/98
+leghorn/7
+Leghorn/7
+legibility/7
+legible
+legibly
+legionary/9
+legionnaire/7
+legion/7
+legislate/24
+legislation/6
+legislative/16
+legislator/7
+legislature/7
+legitimacy/7
+legitimate/565
+legitimation/6
+legitimatize/17
+legitimization/7
+legitimize/31
+legit/9
+legless
+legman/6
+legmen
+leg/7
+Lego/6
+Legra/6
+Legree/6
+legroom/7
+legstraps
+legume/7
+leguminous
+legwork/7
+Lehigh/6
+Lehman/6
+Leia/6
+Leibniz/6
+Leicester/7
+Leiden/6
+Leif/6
+Leigha/6
+Leigh/6
+Leighton/6
+Leilah/6
+Leila/6
+lei/7
+Leipzig/6
+Leisha/6
+leisureliness/7
+leisurely/42
+leisure/599
+leisurewear
+leitmotif/7
+leitmotiv/7
+Lek/6
+Lelah/6
+Lela/6
+Leland/6
+Lelia/6
+Lemaitre/6
+Lemar/6
+Lemke/6
+Lem/6
+lemma/7
+lemme/301
+Lemmie/6
+lemming/6
+Lemmy/6
+lemonade/7
+lemon/26
+lemony
+Lemuel/6
+Lemuria/6
+lemur/7
+Lena/6
+Lenard/6
+Lenci/6
+lender/6
+lend/227
+Lenee/6
+Lenette/6
+lengthener/6
+lengthen/52
+lengthily
+lengthiness/7
+length/600
+lengths
+lengthwise
+lengthy/98
+lenience/9
+leniency/7
+lenient/16
+Leningrad/6
+Leninism/6
+Leninist
+Lenin/6
+lenitive/9
+Lenka/6
+Len/6
+Le/72
+Lenna/6
+Lennard/6
+Lennie/6
+Lennon/6
+Lenny/6
+Lenoir/6
+Leno/6
+Lenora/6
+Lenore/6
+lens/91
+lent/14
+lenticular
+lentil/7
+lento/9
+Lent/125
+Leodora/6
+Leoine/6
+Leola/6
+Leoline/6
+Leo/7
+Leona/6
+Leonanie/6
+Leonard/6
+Leonardo/6
+Leoncavallo/6
+Leonelle/6
+Leonel/6
+Leone/6
+Leonerd/6
+Leonhard/6
+Leonidas/6
+Leonid/6
+Leonie/6
+leonine
+Leon/6
+Leonora/6
+Leonore/6
+Leonor/6
+Leontine/6
+Leontyne/6
+leopardess/7
+leopard/7
+leopardskin
+Leopold/6
+Leopoldo/6
+Leopoldville/6
+Leora/6
+leotard/7
+leper/7
+Lepidus/6
+Lepke/6
+leprechaun/7
+leprosy/7
+leprous
+lepta
+lepton/7
+Lepus/6
+Lerner/6
+Leroi/6
+Leroy/6
+Lesa/6
+lesbianism/7
+lesbian/7
+Leshia/6
+lesion/26
+Lesley/6
+Leslie/6
+Lesli/6
+Lesly/6
+Lesotho/6
+lessee/7
+lessen/17
+Lesseps/6
+lesser
+lesses
+Lessie/6
+lessing
+lesson/26
+lessor/7
+less/12
+Lester/6
+lest/164
+Les/19
+Lesya/6
+Leta/6
+letdown/7
+lethality/6
+lethal/16
+Letha/6
+lethargic
+lethargically
+lethargy/7
+Lethe/6
+Lethia/6
+Leticia/6
+Letisha/6
+let/43
+Letitia/6
+Letizia/6
+Letta/6
+letterbox/9
+lettered/12
+letterer/6
+letterhead/7
+lettering/6
+letter/91
+letterman/6
+Letterman/6
+lettermen
+letterpress/7
+Lettie/6
+Letti/6
+letting/9
+lettuce/7
+Letty/6
+letup/7
+leukemia/7
+leukemic/9
+leukocyte/7
+Leupold/6
+Levant/6
+leveeing
+levee/56
+leveled/12
+leveler/6
+levelheadedness/9
+levelheaded/42
+leveling/12
+levelness/7
+level/100
+leverage/26
+lever/26
+Levesque/6
+Levey/6
+Leviathan
+leviathan/7
+levier/6
+Levi/7
+Levine/6
+Levin/6
+levitate/15
+levitation/6
+Leviticus/6
+Levitt/6
+levity/7
+Lev/6
+Levon/6
+Levy/6
+levy/23
+lewdness/7
+lewd/33
+Lewellyn/6
+Lewes
+Lewie/6
+Lewinsky/6
+lewis/6
+Lewis/6
+Lewiss
+Lew/6
+lex
+lexeme/7
+lexical/19
+lexicographer/7
+lexicographic
+lexicographical/19
+lexicography/7
+lexicon/7
+Lexie/6
+Lexi/7
+Lexine/6
+Lexington/6
+Lexus/6
+Lexy/6
+Leyden/6
+Leyla/6
+Lezley/6
+Lezlie/6
+lg
+Lhasa/7
+Lhotse/6
+liability/48
+liable/601
+liaise/17
+liaison/7
+Lia/6
+Liam/6
+Liana/6
+Liane/6
+Lian/6
+Lianna/6
+Lianne/6
+liar/7
+libation/7
+libbed
+Libbey/6
+Libbie/6
+Libbi/6
+libbing
+Libby/6
+libeler/6
+libel/49
+libelous/19
+Liberace/6
+liberalism/7
+liberality/7
+liberalization/7
+liberalized/12
+liberalize/23
+liberalizer/6
+liberalness/7
+liberal/46
+liberate/345
+liberationists
+liberation/266
+liberator/186
+Liberia/6
+Liberian/9
+libertarianism/6
+libertarian/7
+libertine/7
+liberty/7
+libidinal
+libidinousness/6
+libidinous/28
+libido/7
+Lib/6
+lib/7
+librarian/7
+library/7
+Libra/7
+libretoes
+libretos
+librettist/7
+libretto/7
+Libreville/6
+Librium/6
+Libya/6
+Libyan/9
+lice/6
+licensed/13
+licensee/7
+license/101
+licenser/6
+licenses/14
+licensing/14
+licensor/6
+licentiate/7
+licentiousness/7
+licentious/28
+Licha/6
+lichee's
+lichen/26
+Lichtenstein/6
+Lichter/6
+licit/19
+licked/12
+lickerish
+licker/6
+lick/187
+licking/6
+licorice/7
+Lida/6
+lidded
+lidding
+Lidia/6
+lidless
+lid/7
+lido/7
+Lieberman/6
+Liebfraumilch/6
+Liechtenstein/231
+lied/114
+lie/602
+Lief/6
+liefs/14
+lief/228
+Liege/6
+liege/208
+Lie/6
+lien/7
+lier/309
+lies/14
+Liesa/6
+lieu/7
+lieut
+lieutenancy/7
+lieutenant/7
+Lieut/6
+lifeblood/7
+lifeboat/7
+lifebuoy/9
+lifeforms
+lifeguard/26
+lifelessness/7
+lifeless/28
+lifelikeness/6
+lifelike/42
+lifeline/7
+lifelong
+life/231
+lifer/6
+lifesaver/7
+lifesaving/9
+lifespan/9
+lifestyle/9
+lifetaking
+lifetime/7
+lifework/7
+LIFO
+lifter/6
+lift/49
+liftoff/7
+ligament/7
+ligand/7
+ligate/15
+ligation/6
+ligature/26
+light/311
+lighted/12
+lightener/6
+lightening/6
+lighten/23
+lighter/266
+lightered
+lightering
+lighters
+lightest
+lightface/56
+lightheaded
+lightheartedness/7
+lighthearted/28
+lighthouse/7
+lighting/7
+lightly
+lightness/7
+lightning/56
+lightproof
+light's
+lightship/7
+lightweight/9
+ligneous
+lignite/7
+lignum
+likability/7
+likableness/7
+likable/42
+likeability's
+liked/25
+likelihood/41
+likely/264
+likeness/41
+liken/17
+liker/25
+liker's
+likes/25
+likest
+like/603
+likewise
+liking/7
+lilac/7
+Lilah/6
+Lila/7
+Lilia/7
+Liliana/6
+Liliane/6
+Lilian/6
+Lilith/6
+Liliuokalani/6
+Lilla/6
+Lille/6
+Lillian/6
+Lillie/6
+Lilli/7
+lilliputian/9
+Lilliputian/7
+Lilliput/6
+Lilllie/6
+Lilly/6
+Lil/86
+Lilongwe/6
+lilting/28
+lilt/26
+Lilyan/6
+Lily/6
+lily/56
+Lima/6
+Limbaugh/6
+limbered/12
+limberness/7
+limber/604
+limbers/12
+limbic
+limbless
+Limbo
+limbo/26
+limb/49
+Limburger/7
+limeade/7
+lime/26
+limekiln/6
+limelight/26
+limerick/7
+limestone/7
+limitability
+limitably
+limitation/186
+limit/265
+limitedly/12
+limitedness/6
+limited/46
+limiter/6
+limiting/9
+limitlessness/7
+limitless/28
+limit's
+limn/17
+Limoges/6
+limo/9
+limousine/7
+limper/6
+limpet/7
+limpidity/7
+limpidness/7
+limpid/28
+limpness/7
+Limpopo/6
+limp/77
+Li/86
+limy/54
+linage/7
+Lina/6
+linchpin/7
+Linc/6
+Lincoln/7
+Linda/6
+Lindbergh/6
+Lindberg/6
+linden/7
+Lindholm/6
+Lindie/6
+Lindi/6
+Lind/6
+Lindon/6
+Lindquist/6
+Lindsay/6
+Lindsey/6
+Lindstrom/6
+Lindsy/6
+Lindy/6
+line/36
+lineage/7
+lineal/19
+Linea/6
+lineament/7
+linearity/7
+linearize/605
+linear/19
+linebacker/7
+lined/12
+linefeed
+Linell/6
+lineman/6
+linemen
+linen/7
+liner/7
+line's
+linesman/6
+linesmen
+Linet/6
+Linette/6
+lineup/9
+lingerer/6
+lingerie/7
+lingering/19
+linger/245
+lingoes
+lingo/6
+lingual/16
+lingua/6
+linguine
+linguini's
+linguistically
+linguistic/9
+linguistics/6
+linguist/7
+ling/90
+liniment/7
+lining/7
+linkable
+linkage/7
+linked/14
+linker/9
+linking/9
+Link/6
+link's
+linkup/9
+link/180
+Lin/6
+Linnaeus/6
+Linnea/6
+Linnell/6
+Linnet/6
+linnet/7
+Linnie/6
+Linn/6
+Linoel/6
+linoleum/7
+lino/6
+Linotype/6
+linseed/7
+lintel/7
+linter/6
+Linton/6
+lint/175
+linty/228
+Linus/6
+Linux/6
+Linwood/6
+Linzy/6
+Lionello/6
+Lionel/6
+lioness/7
+lionhearted
+lionization/7
+lionizer/6
+lionize/23
+Lion/6
+lion/7
+lipase/6
+lipid/7
+lip/7
+liposuction/9
+lipped
+lipper
+Lippi/6
+lipping
+Lippmann/6
+lippy/54
+lipread/20
+Lipschitz/6
+Lipscomb/6
+lipstick/26
+Lipton/6
+liq
+liquefaction/7
+liquefier/6
+liquefy/23
+liqueur/26
+liquidate/15
+liquidation/6
+liquidator/7
+liquidity/7
+liquidizer/6
+liquidize/23
+liquidness/6
+liquid/32
+liquorice/7
+liquorish
+liquor/26
+lira/6
+Lira/6
+lire
+Lisabeth/6
+Lisa/6
+Lisbeth/6
+Lisbon/6
+Lise/6
+Lisetta/6
+Lisette/6
+Lisha/6
+Lishe/6
+Lisle/6
+lisle/7
+lisper/6
+lisp/49
+Lissajous/6
+Lissa/6
+Lissie/6
+Lissi/6
+Liss/6
+lissomeness/6
+lissome/42
+lissomness/6
+Lissy/6
+listed/12
+listener/6
+listen/242
+Listerine/6
+lister/6
+Lister/6
+listing/6
+list/606
+listlessness/7
+listless/28
+Liston/6
+Liszt/6
+Lita/6
+litany/7
+litchi/7
+literacy/7
+literalism/6
+literalistic
+literalness/7
+literal/46
+literariness/7
+literary/42
+literate/176
+literati
+literation/6
+literature/7
+liter/6
+lite/9
+litheness/7
+lithe/33
+lithesome
+lithium/7
+lithograph/259
+lithographer/6
+lithographic
+lithographically
+lithographs
+lithography/7
+lithology/6
+lithosphere/7
+lithospheric
+Lithuania/6
+Lithuanian/9
+litigant/7
+litigate/15
+litigation/6
+litigator/7
+litigiousness/7
+litigious/28
+litmus/7
+litotes/6
+lit/110
+litt�rateur/9
+litterbug/7
+litter/49
+Little/6
+littleneck/6
+littleness/7
+little/177
+Littleton/6
+Litton/6
+littoral/9
+liturgical/19
+liturgic/9
+liturgics/6
+liturgist/7
+liturgy/7
+Liuka/6
+livability/7
+livableness/6
+livable/12
+livably
+Liva/6
+lived/14
+livelihood/7
+liveliness/7
+livelong/9
+lively/98
+liveness/6
+liven/17
+liver/263
+liveried
+liverish
+Livermore/6
+Liverpool/6
+Liverpudlian/7
+liver's
+liverwort/7
+liverwurst/7
+livery/186
+liveryman/266
+liverymen/169
+lives/14
+lives's
+livestock/7
+live/607
+Livia/6
+lividness/6
+livid/28
+livingness/6
+Livingstone/6
+Livingston/6
+living/28
+Liv/6
+Livonia/6
+Livvie/6
+Livvy/6
+Livvyy/6
+Livy/6
+Lizabeth/6
+Liza/6
+lizard/7
+Lizbeth/6
+Lizette/6
+Liz/6
+Lizzie/6
+Lizzy/6
+l/608
+Ljubljana/6
+LL
+llama/7
+llano/7
+LLB
+ll/169
+LLD
+Llewellyn/6
+Lloyd/6
+Llywellyn/6
+LNG
+lo
+loadable
+loaded/14
+loader/135
+loading/7
+load's/14
+loads/14
+loadstar's
+loadstone's
+load/609
+loafer/6
+Loafer/9
+loaf/49
+loam/26
+loamy/54
+loaner/6
+loaning/6
+loan/66
+loansharking/9
+loanword/9
+loathe
+loather/6
+loathing/6
+loath/610
+loathness/6
+loathsomeness/7
+loathsome/28
+loaves/6
+Lobachevsky/6
+lobar
+lobbed
+lobber/7
+lobbing
+lobby/26
+lobbyist/7
+lobe/7
+lob/26
+lobotomist
+lobotomize/17
+lobotomy/7
+lobster/26
+lobularity
+lobular/19
+lobule/7
+locale/7
+localisms
+locality/7
+localization/7
+localized/12
+localizer/6
+localizes/12
+localize/23
+local/183
+locatable
+locate/573
+locater/6
+locational/19
+location/154
+locative/9
+locator's
+Lochinvar/6
+loch/6
+lochs
+loci/6
+lockable
+Lockean/6
+locked/14
+Locke/6
+locker/7
+locket/7
+Lockhart/6
+Lockheed/6
+Lockian/6
+locking/9
+lockjaw/7
+Lock/6
+locknut/6
+lockout/7
+lock's
+locksmithing/6
+locksmith/207
+locksmiths
+lockstep/9
+lock/180
+lockup/7
+Lockwood/6
+locomotion/7
+locomotive/65
+locomotor
+locomotory
+loco/26
+locoweed/7
+locus/6
+locust/7
+locution/7
+lode/7
+lodestar/7
+lodestone/7
+lodged/25
+lodge/91
+Lodge/6
+lodgepole
+lodger/6
+lodges/25
+lodging/6
+lodgment/6
+Lodovico/6
+Lodowick/6
+Lodz
+Loeb/6
+Loella/6
+Loewe/6
+Loewi/6
+lofter/6
+loftily
+loftiness/7
+loft/111
+lofty/98
+loganberry/7
+Logan/6
+logarithmic
+logarithmically
+logarithm/7
+logbook/7
+loge/99
+logged/12
+loggerhead/7
+logger/7
+loggia/7
+logging/7
+logicality/7
+logicalness/6
+logical/46
+logician/7
+logic/7
+login/9
+logion/6
+logistical/19
+logistic/7
+logjam/7
+LOGO
+logo/7
+logotype/7
+logout
+logrolling/7
+log's/370
+log/7
+logy/54
+Lohengrin/6
+loincloth/6
+loincloths
+loin/7
+Loire/6
+Loise/6
+Lois/6
+loiterer/6
+loiter/179
+Loki/6
+Lola/6
+Loleta/6
+Lolita/6
+loller/6
+lollipop/7
+loll/31
+Lolly/6
+lolly/7
+Lombardi/6
+Lombard/6
+Lombardy/6
+Lomb/6
+Lome
+Lona/6
+Londonderry/6
+Londoner/6
+London/231
+Lonee/6
+loneliness/7
+lonely/98
+loneness/6
+lone/611
+loner/6
+lonesomeness/7
+lonesome/46
+longboat/7
+longbow/7
+longed/370
+longeing
+longer/370
+longevity/7
+Longfellow/6
+longhair/7
+longhand/7
+longhorn/7
+longing/86
+longish
+longitude/7
+longitudinal/19
+long/241
+Long/6
+longness/6
+longshoreman/6
+longshoremen
+longsighted
+longs/370
+longstanding
+Longstreet/6
+longsword
+longterm
+longtime
+Longueuil/6
+longueur/7
+longways
+longword/7
+Loni/6
+Lon/6
+Lonna/6
+Lonnard/6
+Lonnie/6
+Lonni/6
+Lonny/6
+loofah/6
+loofahs
+lookahead
+lookalike/9
+looker/6
+look/23
+lookout/7
+lookup/7
+looming/6
+Loomis/6
+loom/26
+loon/7
+loony/228
+looper/6
+loophole/26
+loop/111
+loopy/54
+loosed/12
+looseleaf
+loosener/6
+looseness/7
+loosen/180
+loose/77
+looses/12
+loosing/6
+looter/6
+loot/49
+loper/6
+lope/9
+Lopez/6
+lopped
+lopper/7
+lopping
+lop/31
+lopsidedness/7
+lopsided/28
+loquaciousness/7
+loquacious/28
+loquacity/7
+Loraine/6
+Lorain/6
+Loralee/6
+Loralie/6
+Loralyn/6
+Lora/6
+Lorant/6
+lording/6
+lordliness/7
+lordly/98
+Lord/7
+lord/116
+lordship/7
+Lordship/7
+Loree/6
+Loreen/6
+Lorelei/6
+Lorelle/6
+lore/7
+Lorena/6
+Lorene/6
+Loren/7
+Lorentzian/6
+Lorentz/6
+Lorenza/6
+Lorenz/6
+Lorenzo/6
+Loretta/6
+Lorette/6
+lorgnette/7
+Loria/6
+Lorianna/6
+Lorianne/6
+Lorie/6
+Lorilee/6
+Lorilyn/6
+Lori/6
+Lorinda/6
+Lorine/6
+Lorin/6
+loris/7
+Lorita/6
+lorn
+Lorna/6
+Lorne/6
+Lorraine/6
+Lorrayne/6
+Lorre/6
+Lorrie/6
+Lorri/6
+Lorrin/6
+lorryload/9
+Lorry/6
+lorry/7
+Lory/6
+Los
+loser/6
+lose/193
+lossage
+lossless
+loss/7
+lossy/54
+lost/42
+Lothaire/6
+Lothario/7
+lotion/7
+Lot/6
+lot/7
+Lotta/6
+lotted
+Lotte/6
+lotter
+lottery/7
+Lottie/6
+Lotti/6
+lotting
+Lott/6
+lotto/7
+Lotty/6
+lotus/7
+louden/47
+loudhailer/9
+loudly/54
+loudmouth/170
+loudmouths
+loudness/7
+loudspeaker/7
+loudspeaking
+loud/543
+Louella/6
+Louie/6
+Louisa/6
+Louise/6
+Louisette/6
+Louisiana/6
+Louisianan/9
+Louisianian/9
+Louis/6
+Louisville/6
+Lou/6
+lounger/6
+lounge/23
+Lourdes/6
+lour/17
+louse/263
+louse's
+lousewort/6
+lousily
+lousiness/7
+lousy/98
+loutishness/6
+loutish/28
+Loutitia/6
+lout/26
+louver/56
+L'Ouverture
+Louvre/6
+lovableness/7
+lovable/12
+lovably
+lovebird/7
+lovechild
+Lovecraft/6
+love/612
+loved/12
+Lovejoy/6
+Lovelace/6
+Loveland/6
+lovelessness/6
+loveless/28
+lovelies
+lovelinesses
+loveliness/135
+Lovell/6
+lovelornness/6
+lovelorn/42
+lovely/264
+Love/6
+lovemaking/7
+lover/613
+lovesick
+lovestruck
+lovingly
+lovingness/6
+loving/12
+lowborn
+lowboy/7
+lowbrow/7
+lowdown/9
+Lowell/6
+Lowe/6
+lowercase/17
+lower/47
+lowermost
+Lowery/6
+lowish
+lowland/96
+Lowlands/6
+lowlife/7
+lowlight/7
+lowliness/7
+lowly/98
+lowness/7
+low/100
+Lowrance/6
+lox/26
+loyaler
+loyalest
+loyal/75
+loyalism/7
+loyalist/7
+loyalty/85
+Loyang/6
+Loydie/6
+Loyd/6
+Loy/6
+Loyola/6
+lozenge/56
+LP
+LPG
+LPN/9
+Lr
+ls
+l's
+L's
+LSD
+ltd
+Ltd/6
+Lt/6
+Luanda/6
+Luann/6
+luau/7
+lubber/65
+Lubbock/6
+lube/26
+lubricant/7
+lubricate/24
+lubrication/6
+lubricator/7
+lubricious/19
+lubricity/7
+Lubumbashi/6
+Lucais/6
+Luca/7
+Luce/6
+lucent/19
+Lucerne/6
+Lucho/6
+Lucia/7
+Luciana/6
+Lucian/6
+Luciano/6
+lucidity/7
+lucidness/7
+lucid/28
+Lucie/6
+Lucien/6
+Lucienne/6
+Lucifer/6
+Lucila/6
+Lucile/6
+Lucilia/6
+Lucille/6
+Luci/72
+Lucina/6
+Lucinda/6
+Lucine/6
+Lucio/6
+Lucita/6
+Lucite/7
+Lucius/6
+luck/26
+luckier/12
+luckily/12
+luckiness/41
+luckless
+Lucknow/6
+Lucky/6
+lucky/177
+lucrativeness/7
+lucrative/28
+lucre/7
+Lucretia/6
+Lucretius/6
+lucubrate/15
+lucubration/6
+Lucy/6
+Luddite/7
+Ludhiana/6
+ludicrousness/7
+ludicrous/28
+Ludlow/6
+Ludmilla/6
+ludo/6
+Ludovico/6
+Ludovika/6
+Ludvig/6
+Ludwig/6
+Luella/6
+Luelle/6
+luff/26
+Lufthansa/6
+Luftwaffe/6
+luge/266
+Luger/6
+luggage/7
+lugged
+lugger/7
+lugging
+Lugosi/6
+lug/208
+lugsail/7
+lugubriousness/7
+lugubrious/28
+Luigi/6
+Luisa/6
+Luise/6
+Luis/6
+Lukas/6
+Luke/6
+lukewarmness/7
+lukewarm/28
+Lula/6
+Lulita/6
+lullaby/26
+lull/17
+lulu/6
+Lulu/6
+Lu/6
+lumbago/7
+lumbar/9
+lumberer/6
+lumbering/6
+lumberjack/7
+lumberman/6
+lumbermen
+lumber/91
+lumberyard/7
+lumen/6
+Lumi�re/6
+luminance/6
+luminary/7
+luminescence/7
+luminescent
+luminosity/7
+luminousness/6
+luminous/28
+lummox/7
+lumper/6
+lumpiness/7
+lumpishness/6
+lumpish/28
+lump/150
+lumpy/98
+lunacy/7
+Luna/6
+lunar/9
+lunary
+lunate/614
+lunatic/9
+lunation/6
+luncheonette/7
+luncheon/26
+luncher/6
+lunch/111
+lunchpack
+lunchroom/7
+lunchtime/7
+Lundberg/6
+Lund/6
+Lundquist/6
+lune/6
+lunge/7
+lunger/6
+lungfish/7
+lungful
+lung/111
+lunkhead/7
+Lupe/6
+lupine/7
+Lupus/6
+lupus/7
+Lura/6
+lurcher/6
+lurch/31
+lure/31
+lurer/6
+Lurette/6
+lurex
+Luria/6
+luridness/7
+lurid/28
+lurker/6
+lurk/23
+Lurleen/6
+Lurlene/6
+Lurline/6
+Lusaka/6
+Lusa/6
+lusciousness/7
+luscious/28
+lushness/7
+lush/77
+Lusitania/6
+luster/165
+lustering/6
+lusterless
+lustfulness/6
+lustful/28
+lustily
+lustiness/7
+lust/49
+lustrousness/6
+lustrous/28
+lusty/98
+lutanist/7
+lute/26
+lutenist/7
+Lutero/6
+lutetium/7
+Lutheranism/7
+Lutheran/7
+Luther/6
+luting/6
+Lutz
+Luxembourgian
+Luxembourg/231
+Luxemburg's
+luxe/7
+luxuriance/7
+luxuriant/19
+luxuriate/15
+luxuriation/6
+luxuriousness/7
+luxurious/28
+luxury/7
+Luz/6
+Luzon/6
+L'vov
+Lyallpur/6
+lyceum/7
+lychee's
+lycopodium/6
+Lycra/9
+Lycurgus/6
+Lyda/6
+Lydia/6
+Lydian/9
+Lydie/6
+Lydon/6
+lye/304
+Lyell/6
+lying/19
+Lyle/6
+Lyly/6
+Lyman/6
+Lyme/6
+lymphatic/9
+lymph/6
+lymphocyte/7
+lymphoid
+lymphoma/7
+lymphs
+Ly/86
+Lynchburg/6
+lyncher/6
+lynching/6
+Lynch/6
+lynch/179
+Lynda/6
+Lyndell/6
+Lyndel/6
+Lynde/6
+Lyndon/6
+Lyndsay/6
+Lyndsey/6
+Lyndsie/6
+Lyndy/6
+Lynea/6
+Lynelle/6
+Lynette/6
+Lynett/6
+Lyn/6
+Lynna/6
+Lynnea/6
+Lynnelle/6
+Lynnell/6
+Lynne/6
+Lynnet/6
+Lynnette/6
+Lynnett/6
+Lynn/6
+Lynsey/6
+lynx/7
+Lyon/7
+Lyra/6
+lyrebird/7
+lyre/7
+lyricalness/6
+lyrical/28
+lyricism/7
+lyricist/7
+lyric/9
+Lysenko/6
+lysine/6
+Lysistrata/6
+Lysol/6
+Lyssa/6
+LyX/6
+MA
+Maalox/6
+ma'am
+Mabelle/6
+Mabel/6
+Mable/6
+Mab/6
+macabre/19
+macadamize/17
+macadam/7
+Macao/6
+macaque/7
+macaroni/7
+macaroon/7
+Macarthur/6
+MacArthur/6
+Macaulay/6
+macaw/7
+Macbeth/6
+Maccabees/6
+Maccabeus/6
+Macdonald/6
+MacDonald/6
+MacDraw/6
+Macedonia/6
+Macedonian/9
+Macedon/6
+mace/7
+Mace/7
+macerate/15
+maceration/6
+macer/6
+Macgregor/6
+MacGregor/6
+machete/7
+Machiavellian/9
+Machiavelli/6
+machinate/15
+machination/6
+machinelike
+machine/57
+machinery/7
+machinist/7
+machismo/7
+Mach/6
+macho/9
+Machs
+Macias/6
+Macintosh/6
+MacIntosh/6
+macintosh's
+Mackenzie/6
+MacKenzie/6
+mackerel/7
+Mackinac/6
+Mackinaw
+mackinaw/7
+mackintosh/7
+mack/6
+Mack/6
+MacLeish/6
+Macmillan/6
+MacMillan/6
+Macon/7
+MacPaint/6
+macram�/9
+macrobiotic/9
+macrobiotics/6
+macrocosm/7
+macrodynamic
+macroeconomic/9
+macroeconomics/6
+macromolecular
+macromolecule/7
+macron/7
+macrophage/7
+macroscopic
+macroscopically
+macrosimulation
+macro/7
+macrosocioeconomic
+Mac/26
+mac/111
+Macy/6
+Madagascan/7
+Madagascar/6
+Madalena/6
+Madalyn/6
+Mada/6
+madame/6
+Madame/7
+madam/7
+madcap/9
+Maddalena/6
+madded
+madden/17
+maddening/19
+Madden/6
+madder/7
+maddest
+Maddie/6
+Maddi/6
+madding
+Maddox/6
+Maddy/6
+made/13
+Madeira/7
+Madelaine/6
+Madeleine/6
+Madelena/6
+Madelene/6
+Madelina/6
+Madeline/6
+Madelin/6
+Madella/6
+Madelle/6
+Madel/6
+Madelon/6
+Madelyn/6
+mademoiselle/7
+Madge/6
+madhouse/7
+Madhya/6
+Madison/6
+Madlen/6
+Madlin/6
+madman/6
+madmen
+madness/7
+Madonna/7
+mad/46
+Madras
+madras/7
+Madrid/6
+madrigal/131
+Madsen/6
+Madurai/6
+madwoman/6
+madwomen
+Mady/6
+Maegan/6
+Maelstrom/6
+maelstrom/7
+Mae/6
+maestro/7
+Maeterlinck/6
+Mafia/7
+mafia/9
+mafiosi
+mafioso/6
+Mafioso/9
+MAG
+magazine/26
+Magdaia/6
+Magdalena/6
+Magdalene/6
+Magdalen/6
+Magda/6
+Magellanic
+Magellan/6
+magenta/7
+magged
+Maggee/6
+Maggie/6
+Maggi/6
+magging
+maggot/7
+maggoty/54
+Maggy/6
+magi
+magical/19
+magician/7
+magicked
+magicking
+magic/7
+Magill/6
+Magi/6
+Maginot/6
+magisterial/19
+magistracy/7
+magistrate/7
+Mag/6
+magma/7
+magnanimity/7
+magnanimosity
+magnanimous/28
+magnate/7
+magnesia/7
+magnesite/6
+magnesium/7
+magnetically
+magnetic/9
+magnetics/6
+magnetism/7
+magnetite/7
+magnetizable
+magnetization/279
+magnetize/263
+magnetized/12
+magnetodynamics
+magnetohydrodynamical
+magnetohydrodynamics/6
+magnetometer/7
+magneto/7
+magnetosphere/6
+magnetron/6
+magnet/7
+magnification/6
+magnificence/7
+magnificent/19
+magnified/12
+magnify/115
+magniloquence/7
+magniloquent
+Magnitogorsk/6
+magnitude/7
+magnolia/7
+Magnum
+magnum/7
+Magnuson/6
+Magog/6
+Magoo/6
+magpie/7
+Magritte/6
+Magruder/6
+mag/9
+Magsaysay/6
+Maguire/7
+Magus/6
+Magyar/7
+Mahabharata
+Mahala/6
+Mahalia/6
+maharajah/6
+maharajahs
+maharanee's
+maharani/7
+Maharashtra/6
+maharishi/7
+mahatma/7
+Mahavira/6
+Mahayana/6
+Mahayanist
+Mahdi/6
+Mahfouz/6
+Mahican/7
+mahjong's
+Mahler/6
+Mahmoud/6
+Mahmud/6
+mahogany/7
+Mahomet's
+mahout/7
+Maia/6
+Maible/6
+maidenhair/7
+maidenhead/7
+maidenhood/7
+maidenly/42
+maiden/86
+maidservant/7
+maid/99
+maier
+Maier/6
+Maiga/6
+Maighdiln/6
+Maigret/6
+mailbag/7
+mailbox/7
+mail/182
+mailer/6
+Mailer/6
+Maillol/6
+maillot/7
+mailman/6
+mailmen
+Maiman/6
+maimedness/6
+maimed/42
+maimer/6
+Maimonides/6
+Mai/114
+maim/23
+mainbrace/6
+Maine/231
+Mainer/6
+mainframe/7
+mainlander/6
+mainland/96
+mainliner/6
+mainline/23
+mainly
+mainmast/7
+main/63
+mainsail/7
+mains/6
+mainspring/7
+mainstay/7
+mainstream/111
+maintainability
+maintainable/12
+maintain/67
+maintained/12
+maintainer/6
+maintenance/7
+maintop/7
+maiolica's
+Maire/6
+Mair/6
+Maisey/6
+Maisie/6
+maisonette/7
+Maison/6
+Maitilde/6
+maize/7
+Maj
+Maje/6
+majestic
+majestically
+majesty/7
+Majesty/7
+majolica/7
+Majorca/6
+major/26
+majordomo/9
+majorette/7
+majority/7
+Major/6
+Majuro/6
+makable
+Makarios/6
+makefile/9
+makeover/9
+Maker/6
+maker/7
+makeshift/9
+make/516
+makeup/7
+making/7
+Malabar/6
+Malabo/6
+Malacca/6
+Malachi/6
+malachite/7
+maladapt/326
+maladjust/615
+maladjustment/7
+maladministration
+maladroitness/7
+maladroit/28
+malady/7
+Malagasy/6
+malaise/7
+Mala/6
+Malamud/6
+malamute/7
+Malanie/6
+malaprop
+malapropism/7
+Malaprop/6
+malarial
+malaria/7
+malarious
+malarkey/7
+malathion/9
+Malawian/9
+Malawi/6
+Malayalam/6
+Malaya/6
+Malayan/7
+Malaysia/6
+Malaysian/9
+Malay/7
+Malchy/6
+Malcolm/6
+malcontentedness/6
+malcontented/28
+malcontent/56
+Maldive/7
+Maldivian/9
+Maldonado/6
+maledict
+malediction/7
+malefaction/7
+malefactor/7
+malefic
+maleficence/7
+maleficent
+Male/6
+Malena/6
+maleness/7
+male/444
+malevolence/9
+malevolencies
+malevolent/19
+malfeasance/7
+malfeasant
+malformation/7
+malformed
+malfunction/17
+Malia/6
+Malian/9
+Malibu/6
+malice/26
+maliciousness/7
+malicious/10
+malignancy/7
+malignant/16
+malign/284
+malignity/7
+Mali/6
+Malina/6
+Malinda/6
+Malinde/6
+malingerer/6
+malinger/23
+Malinowski/6
+Malissa/6
+Malissia/6
+mallard/7
+Mallarm�/6
+malleability/7
+malleableness/6
+malleable/42
+mallet/7
+Mallissa/6
+Mallorie/6
+Mallory/6
+mallow/7
+mall/26
+Mal/6
+malnourished
+malnutrition/7
+malocclusion/7
+malodorous
+Malone/6
+Malorie/6
+Malory/6
+malposed
+malpractice/7
+Malraux/6
+Malta/6
+malted/9
+Maltese
+Malthusian/9
+Malthus/6
+malting/6
+maltose/7
+maltreat/11
+maltreatment/9
+malt/26
+malty/54
+Malva/6
+Malvina/6
+Malvin/6
+Malynda/6
+mama/7
+mamba/7
+mambo/26
+Mame/6
+Mamet/6
+ma/140
+Mamie/6
+mammalian/7
+mammal/7
+mammary
+mamma's
+mammogram/9
+mammography/9
+Mammon's
+mammon/7
+mammoth/6
+mammoths
+mammy/7
+Mamore/6
+manacle/26
+manageability/9
+manageableness
+manageable/12
+managed/12
+management/7
+manageress/6
+managerial/19
+manager/6
+managership/6
+manage/27
+Managua/6
+Manama/6
+ma�ana/6
+mananas
+Manasseh/6
+manatee/7
+Manaus's
+Manchester/6
+Manchu/7
+Manchuria/6
+Manchurian/9
+Mancini/6
+manciple/6
+Mancunian/7
+mandala/7
+Mandalay/6
+Manda/6
+mandamus/26
+Mandarin
+mandarin/7
+mandate/26
+mandatory/9
+Mandela
+Mandelbrot/6
+Mandel/6
+mandible/7
+mandibular
+Mandie/6
+Mandi/6
+Mandingo/6
+mandolin/7
+mandrake/7
+mandrel/7
+mandrill/7
+Mandy/6
+man�ge/17
+mane/56
+Manet/6
+maneuverability/7
+maneuverer/6
+maneuver/101
+Manfred/6
+manful/19
+manganese/7
+mange/49
+manger/6
+manginess/9
+mangler/6
+mangle/31
+mangoes
+mango/6
+mangrove/7
+mangy/98
+manhandle/17
+Manhattan/7
+manhole/7
+manhood/7
+manhunt/7
+maniacal/19
+maniac/7
+mania/7
+manically
+Manichean/6
+manic/9
+manicure/26
+manicurist/7
+manifestation/7
+manifesto/26
+manifest/22
+manifolder/6
+manifold/616
+manifoldness/6
+manikin/7
+Manila/7
+manila/9
+manilla's
+Mani/6
+manioc/7
+manipulability
+manipulable
+manipulate/577
+manipulative/204
+manipulator/7
+manipulatory
+Manitoba/6
+Manitoulin/6
+Manitowoc/6
+mankind/6
+Mankowski/6
+Manley/6
+manlike
+manliness/7
+manliness's/12
+manly/264
+manna/7
+manned/12
+mannequin/7
+mannered/12
+mannerism/7
+mannerist/6
+mannerliness/135
+mannerly/236
+manner/599
+Mann/207
+Mannheim/6
+Mannie/6
+mannikin's
+Manning/6
+manning/12
+mannishness/7
+mannish/28
+Manny/6
+Manolo/6
+Mano/6
+manometer/7
+Manon/6
+manorial
+manor/7
+manpower/7
+manqu�/6
+man's
+mansard/7
+manservant/6
+manse/451
+Mansfield/6
+mansion/6
+manslaughter/7
+Man/7
+Manson/6
+mans/9
+manta/7
+Mantegna/6
+mantelpiece/7
+mantel/7
+mantes
+mantilla/7
+mantissa/7
+mantis/7
+mantle/84
+Mantle/6
+mantle's
+mantling/6
+mantra/7
+mantrap/7
+manual/65
+Manuela/6
+Manuel/6
+manufacture/179
+manufacturer/6
+manumission/7
+manumit/9
+manumitted
+manumitting
+manure/49
+manuscript/7
+man/514
+Manville/6
+Manx
+many
+Manya/6
+Maoism/7
+Maoist/9
+Mao/6
+Maori/7
+Maplecrest/6
+maple/7
+mapmaker/9
+mappable
+mapped/13
+mapper/9
+mapping/7
+Mapplethorpe/6
+maps/13
+map/7
+Maputo/6
+Marabel/6
+marabou/7
+marabout's
+Maracaibo/6
+maraca/7
+Mara/6
+maraschino/7
+Marathi
+marathoner/6
+Marathon/6
+marathon/96
+Marat/6
+marauder/6
+maraud/23
+marbleize/17
+marble/211
+marbler/6
+marbling/6
+Marceau/6
+Marcela/6
+Marcelia/6
+Marcelino/6
+Marcella/6
+Marcelle/6
+Marcellina/6
+Marcelline/6
+Marcello/6
+Marcellus/6
+Marcel/6
+Marcelo/6
+Marchall/6
+Marchelle/6
+marcher/6
+marchioness/7
+March/7
+march/23
+Marcia/6
+Marciano/6
+Marcie/6
+Marcile/6
+Marcille/6
+Marci/6
+Marc/6
+Marconi/6
+Marco/7
+Marcotte/6
+Marcus/6
+Marcy/6
+Mardi/7
+Marduk/6
+Mareah/6
+mare/7
+Marena/6
+Maren/6
+Maressa/6
+Margalit/6
+Margalo/6
+Marga/6
+Margareta/6
+Margarete/6
+Margaretha/6
+Margarethe/6
+Margaret/6
+Margaretta/6
+Margarette/6
+margarine/7
+Margarita/6
+margarita/7
+Margarito/6
+Margaux/6
+Margeaux/6
+Marge/6
+Margery/6
+Marget/6
+Margette/6
+Margie/6
+Margi/6
+marginalia
+marginality
+marginalization
+marginalize/17
+marginal/16
+margin/26
+Margit/6
+Margo/6
+Margot/6
+Margrethe/6
+Margret/6
+Marguerite/6
+Margy/6
+mariachi/7
+maria/6
+Maria/6
+Mariam/6
+Mariana/7
+Marian/7
+Marianna/6
+Marianne/6
+Mariann/6
+Mariano/6
+Maribelle/6
+Maribel/6
+Maribeth/6
+Maricela/6
+Marice/6
+Maridel/6
+Marieann/6
+Mariejeanne/6
+Mariele/6
+Marielle/6
+Mariellen/6
+Mariel/6
+Marie/6
+Marietta/6
+Mariette/6
+Marigold/6
+marigold/7
+Marijn/6
+Marijo/6
+marijuana/7
+Marika/6
+Marilee/6
+Marilin/6
+Marillin/6
+Marilyn/6
+marimba/7
+Mari/7
+marinade/26
+Marina/6
+marina/7
+marinara/7
+marinate/15
+marination/6
+mariner/6
+Marine/9
+marine/110
+Marin/6
+Marinna/6
+Marino/6
+Mario/6
+marionette/7
+Marion/6
+Mariquilla/6
+Marisa/6
+Mariska/6
+Marisol/6
+Marissa/6
+Maritain/6
+marital/19
+Marita/6
+maritime/164
+Maritsa/6
+Maritza/6
+Mariupol/6
+Marius/6
+Mariya/6
+Marja/6
+Marje/6
+Marjie/6
+Marji/6
+Marj/6
+marjoram/7
+Marjorie/6
+Marjory/6
+Marjy/6
+Markab/6
+markdown/7
+marked/13
+markedly
+marker/6
+marketability/7
+marketable/12
+Marketa/6
+marketeer/9
+marketer/6
+market/182
+marketing/6
+marketplace/7
+mark/182
+Markham/6
+marking/6
+Markism/6
+markkaa
+markka/6
+Mark/7
+Markos
+Markov
+Markovian
+Markovitz/6
+marks/14
+marksman/6
+marksmanship/9
+marksmen
+markup/7
+Markus/6
+Marla/6
+Marlane/6
+Marlboro/6
+Marlborough/6
+Marleah/6
+Marlee/6
+Marleen/6
+Marlena/6
+Marlene/6
+Marley/6
+Marlie/6
+Marline/6
+marlinespike/7
+Marlin/6
+marlin/7
+marl/26
+Marlo/6
+Marlon/6
+Marlowe/6
+Marlow/6
+Marlyn/6
+Marmaduke/6
+marmalade/7
+Marmara/6
+marmoreal
+marmoset/7
+marmot/7
+Marna/6
+Marne/6
+Marney/6
+Marnia/6
+Marnie/6
+Marni/6
+maroon/31
+marquee/7
+Marquesas/6
+marque/7
+marquess/7
+marquetry/7
+Marquette/6
+Marquez/6
+marquise/6
+marquisette/7
+Marquis/6
+marquis/7
+Marquita/6
+Marrakesh/6
+marred/12
+marriageability/7
+marriageable
+marriage/48
+married/302
+Marrilee/6
+marring
+Marriott/6
+Marris/6
+Marrissa/6
+marrowbone/7
+marrow/26
+marry/36
+mar/9
+Marseillaise/7
+Marseilles
+Marseille's
+marshal/49
+Marshalled/6
+marshaller
+Marshall/165
+Marshalling/6
+marshallings
+Marshal/6
+Marsha/6
+marshiness/6
+marshland/7
+Marsh/6
+marshmallow/7
+marsh/7
+marshy/98
+Marsiella/6
+Mar/125
+marsupial/7
+Martainn/6
+Marta/6
+Martelle/6
+Martel/6
+marten/6
+Marten/6
+Martguerita/6
+Martha/6
+Marthe/6
+Marthena/6
+Martial
+martial/19
+Martian/9
+Martica/6
+Martie/6
+Marti/6
+Martina/6
+martinet/7
+Martinez/6
+martingale/7
+martini/7
+Martinique/6
+Martin/6
+Martino/6
+martin/7
+Martinson/6
+Martita/6
+mart/269
+Mart/72
+Marty/6
+Martyn/6
+Martynne/6
+martyrdom/7
+martyr/26
+Marva/6
+marvel/17
+Marvell/6
+marvelous/28
+Marve/6
+Marven/6
+Marvin/6
+Marv/72
+Marwin/6
+Marxian/9
+Marxism/7
+Marxist/7
+Marx/6
+Marya/6
+Maryanna/6
+Maryanne/6
+Maryann/6
+Marybelle/6
+Marybeth/6
+Maryellen/6
+Maryjane/6
+Maryjo/6
+Maryland/231
+Marylee/6
+Marylinda/6
+Marylin/6
+Maryl/6
+Marylou/6
+Marylynne/6
+Mary/6
+Maryrose/6
+Marys
+Marysa/6
+marzipan/7
+Masada/6
+Masai/6
+Masaryk/6
+masc
+Mascagni/6
+mascara/26
+mascot/7
+masculineness/6
+masculine/46
+masculinity/7
+Masefield/6
+maser/6
+Maseru/6
+MASH
+Masha/6
+Mashhad/6
+mash/91
+m/617
+masked/12
+masker/6
+mask/91
+masks/12
+masochism/7
+masochistic
+masochistically
+masochist/7
+masonic
+Masonic
+Masonite/6
+masonry/7
+mason/26
+Mason/7
+masquerader/6
+masquerade/49
+masquer/6
+masque/96
+Massachusetts/6
+massacre/111
+massager/6
+massage/111
+Massasoit/6
+Massenet/6
+masseur/7
+masseuse/7
+Massey/6
+massif/7
+Massimiliano/6
+Massimo/6
+massing/164
+massiveness/7
+massive/28
+massless
+mas/110
+Mass/9
+mass/64
+mastectomy/7
+masterclass
+mastered/14
+masterfulness/6
+masterful/28
+master/618
+masterliness/6
+masterly/42
+mastermind/17
+masterpiece/7
+mastership/6
+Master/7
+masterstroke/7
+masterwork/9
+mastery/7
+mast/49
+masthead/26
+masticate/15
+mastication/6
+mastic/7
+mastiff/7
+mastodon/7
+mastoid/9
+masturbate/15
+masturbation/6
+masturbatory
+matador/7
+Mata/6
+matchable/12
+match/182
+matchbook/7
+matchbox/7
+matched/13
+matcher/6
+matches/14
+matchless/19
+matchlock/7
+matchmake/173
+matchmaker/6
+matchmaking/6
+matchplay
+match's/14
+matchstick/7
+matchwood/7
+mated/12
+mate/43
+Matelda/6
+Mateo/6
+materialism/7
+materialistic
+materialistically
+materialist/7
+materiality/6
+materialization/7
+materialize/619
+materialized/14
+materializer/7
+materializes/14
+materializing
+materialness/6
+material/32
+mat�riel/7
+mater/6
+maternal/19
+maternity/7
+mates/12
+mathematical/19
+Mathematica/6
+mathematician/7
+mathematic/9
+mathematics/6
+Mathematik/6
+Mather/6
+Mathe/114
+Mathew/7
+Mathewson/6
+Mathian/6
+Mathias
+Mathieu/6
+Mathilda/6
+Mathilde/6
+Mathis
+math/6
+maths
+Matias/6
+Matilda/6
+Matilde/6
+matin�e/9
+mating/6
+matins/6
+Matisse/7
+matriarchal
+matriarch/6
+matriarchs
+matriarchy/7
+matrices
+matricidal
+matricide/7
+matriculate/15
+matriculation/6
+matrimonial/19
+matrimony/7
+matrix/6
+matron/65
+mat/211
+Matsumoto/6
+matte/91
+Mattel/6
+Matteo/6
+matter/165
+Matterhorn/6
+Matthaeus/6
+Mattheus/6
+Matthew/7
+Matthias
+Matthieu/6
+Matthiew/6
+Matthus/6
+Mattias/6
+Mattie/6
+Matti/6
+matting/6
+mattins's
+Matt/6
+mattock/7
+mattress/7
+matt's
+Matty/6
+maturate/24
+maturational
+maturation/6
+matureness/6
+maturer/6
+mature/77
+maturity/7
+matzo/216
+matzot
+Maude/6
+Maudie/6
+maudlin/19
+Maud/6
+Maugham/6
+Maui/6
+mauler/6
+maul/23
+maunder/17
+Maupassant/6
+Maura/6
+Maureene/6
+Maureen/6
+Maure/6
+Maurene/6
+Mauriac/6
+Maurice/6
+Mauricio/6
+Maurie/6
+Maurine/6
+Maurise/6
+Maurita/6
+Mauritania/6
+Mauritanian/9
+Mauritian/9
+Mauritius/6
+Maurits/6
+Maurizia/6
+Maurizio/6
+Maurois/6
+Mauro/6
+Maury/6
+Mauser/6
+mausoleum/7
+mauve/7
+maven/9
+maverick/26
+mavin's
+Mavis/6
+Mavra/6
+mawkishness/7
+mawkish/28
+Mawr/6
+maw/26
+max/17
+Maxie/6
+maxillae
+maxilla/6
+maxillary/9
+Maxi/6
+maximality
+maximal/16
+maxima's
+Maximilian/6
+Maximilianus/6
+Maximilien/6
+maximization/7
+maximizer/6
+maximize/23
+Maxim/6
+Maximo/6
+maxim/7
+maximum/65
+Maxine/6
+maxi/9
+Max/6
+Maxtor/6
+Maxwellian
+maxwell/6
+Maxwell/6
+Maxy/6
+Maya/7
+Mayan/9
+Maybelle/6
+maybe/9
+mayday/9
+may/620
+Maye/6
+mayer
+Mayer/6
+mayest
+Mayfair/6
+Mayflower/6
+mayflower/7
+mayfly/7
+mayhap
+mayhem/7
+Maynard/6
+Mayne/6
+Maynord/6
+mayn't
+Mayo/6
+mayonnaise/7
+mayoral
+mayoralty/7
+mayoress/7
+Mayor/6
+mayor/7
+mayorship/6
+mayo/9
+maypole/7
+Maypole/7
+Mayra/6
+May/175
+mayst
+Mazama/6
+Mazarin/6
+Mazatlan/6
+Mazda/6
+mazedness/7
+mazed/28
+maze/111
+mazurka/7
+Mazzini/6
+Mb
+MB
+MBA
+Mbabane/6
+Mbini/6
+MC
+McAdam/7
+McAllister/6
+McBride/6
+McCabe/6
+McCain/6
+McCall/6
+McCarthyism/6
+McCarthy/6
+McCartney/6
+McCarty/6
+McCauley/6
+McClain/6
+McClellan/6
+McClure/6
+McCluskey/6
+McConnell/6
+McCormick/6
+McCoy/7
+McCracken/6
+McCray/6
+McCullough/6
+McDaniel/6
+McDermott/6
+McDonald/6
+McDonnell/6
+McDougall/6
+McDowell/6
+McElhaney/6
+McEnroe/6
+McFadden/6
+McFarland/6
+McGee/6
+McGill/6
+McGovern/6
+McGowan/6
+McGrath/6
+McGraw/6
+McGregor/6
+McGuffey/6
+McGuire/6
+MCI/6
+McIntosh/6
+McIntyre/6
+McKay/6
+McKee/6
+McKenzie/6
+McKesson/6
+McKinley/6
+McKinney/6
+McKnight/6
+McLanahan/6
+McLaughlin/6
+McLean/6
+McLeod/6
+McLuhan/6
+McMahon/6
+McMartin/6
+McMillan/6
+McNamara/6
+McNaughton/6
+McNeil/6
+McPherson/6
+MD
+Md/6
+mdse
+MDT
+ME
+Meade/6
+Mead/6
+meadowland
+meadowlark/7
+meadow/7
+Meadows
+meadowsweet/6
+mead/7
+Meagan/6
+meagerness/7
+meager/28
+Meaghan/6
+meagres
+mealiness/7
+meal/26
+mealtime/7
+mealybug/9
+mealymouthed
+mealy/177
+meander/71
+meaneing
+meanie/7
+meaningfulness/7
+meaningful/28
+meaninglessness/7
+meaningless/28
+meaning/6
+meanness/9
+means/6
+meantime/7
+meant/12
+meanwhile/9
+Meany/6
+mean/621
+meany's
+Meara/6
+measle/142
+measles/6
+measly/54
+measurable/12
+measurably
+measure/622
+measured/19
+measureless
+measurement/7
+measurer/6
+measures/14
+measuring/14
+meas/19
+meataxe
+meatball/7
+meatiness/7
+meatless
+meatloaf
+meatloaves
+meat/7
+meatpacking/9
+meaty/98
+Mecca/7
+mecca/9
+mechanical/16
+mechanic/7
+mechanism/7
+mechanistic
+mechanistically
+mechanist/6
+mechanization/7
+mechanized/12
+mechanizer/6
+mechanize/67
+mechanizes/12
+mechanochemically
+Mechelle/6
+med
+medalist/7
+medallion/7
+medal/26
+Medan/6
+meddle/23
+meddlesome
+Medea/6
+Medellin
+Medfield/6
+mediaeval's
+medial/158
+medials
+median/65
+media/7
+mediateness/6
+mediate/148
+mediation/48
+mediator/7
+Medicaid/7
+medical/16
+medicament/7
+Medicare/7
+medicate/24
+medication/6
+Medici/7
+medicinal/16
+medicine/26
+medico/7
+medic/7
+medievalist/7
+medieval/65
+Medina/6
+mediocre
+mediocrity/7
+meditate/24
+meditation/6
+meditativeness/6
+meditative/28
+Mediterranean/7
+mediumistic
+medium/7
+medley/7
+medulla/7
+Medusa/6
+meed/7
+meekness/7
+meek/33
+meerschaum/7
+meeter/6
+meetinghouse/9
+meeting/6
+meet/623
+me/224
+mega
+megabit/7
+megabuck/9
+megabyte/9
+megacycle/7
+megadeath/6
+megadeaths
+megahertz/6
+megalithic
+megalith/6
+megaliths
+megalomaniac/7
+megalomania/7
+megalopolis/7
+Megan/6
+megaphone/26
+megaton/7
+megavolt/6
+megawatt/7
+megaword/9
+Megen/6
+Meggie/6
+Meggi/6
+Meggy/6
+Meghan/6
+Meghann/6
+Meg/72
+megohm/7
+Mehetabel/6
+Meier/6
+Meighen/6
+Meiji/6
+Mei/114
+meioses
+meiosis/6
+meiotic
+Meir/6
+Meister/6
+Meistersinger/6
+Mejia/6
+Mekong/6
+Mela/6
+Melamie/6
+melamine/7
+melancholia/7
+melancholic/9
+melancholy/7
+Melanesia/6
+Melanesian/9
+melange/9
+Melania/6
+Melanie/6
+melanin/7
+melanoma/7
+Melantha/6
+Melany/6
+Melba/6
+Melbourne/6
+Melcher/6
+Melchior/6
+meld/17
+m�l�e/7
+Melendez/6
+Melesa/6
+Melessa/6
+Melicent/6
+Melina/6
+Melinda/6
+Melinde/6
+meliorate/24
+melioration/6
+Melisa/6
+Melisande/6
+Melisandra/6
+Melisenda/6
+Melisent/6
+Melissa/6
+Melisse/6
+Melita/6
+Melitta/6
+Mella/6
+Mellicent/6
+Mellie/6
+mellifluousness/7
+mellifluous/28
+Melli/6
+Mellisa/6
+Mellisent/6
+Melloney/6
+Mellon/6
+mellowness/7
+mellow/77
+Melly/6
+Mel/86
+Melodee/6
+melodically
+melodic/9
+Melodie/6
+melodiousness/9
+melodious/28
+melodrama/7
+melodramatically
+melodramatic/9
+Melody/6
+melody/7
+Melonie/6
+melon/7
+Melony/6
+Melosa/6
+Melpomene/6
+meltdown/9
+melter/6
+melting/19
+Melton/6
+melt/36
+Melva/6
+Melville/6
+Melvin/6
+Melvyn/6
+Me/6
+member/56
+membered/145
+members/145
+membership/7
+membrane/56
+membranous
+memento/7
+Memling/6
+memoir/7
+memorabilia
+memorability/7
+memorableness/6
+memorable/42
+memorably
+memorandum/7
+memorialize/17
+memorialized/12
+memorial/16
+memoriam
+memorization/7
+memorized/12
+memorizer/6
+memorize/23
+memorizes/14
+memoryless
+memory/7
+memo/7
+Memphis/6
+menace/17
+menacing/19
+menagerie/7
+menage/9
+Menander/6
+menarche/7
+Menard/6
+Mencius/6
+Mencken/6
+mendaciousness/6
+mendacious/28
+mendacity/7
+Mendeleev/6
+mendelevium/7
+Mendelian
+Mendel/6
+Mendelssohn/6
+mender/6
+Mendez/6
+mendicancy/7
+mendicant/9
+Mendie/6
+mending/6
+Mendocino/6
+Mendoza/6
+mend/179
+Mendy/6
+Menelaus/6
+Menes/6
+menfolk/9
+menhaden/6
+menial/16
+meningeal
+meninges
+meningitides
+meningitis/6
+meninx
+menisci
+meniscus/6
+Menkalinan/6
+Menkar/6
+Menkent/6
+Menlo/6
+men/7
+Mennonite/7
+Menominee
+menopausal
+menopause/7
+menorah/6
+menorahs
+Menotti/6
+Mensa/6
+Mensch/6
+mensch/9
+menservants/6
+mens/17
+menstrual
+menstruate/15
+menstruation/6
+mensurable/42
+mensuration/7
+menswear/6
+mentalist/7
+mentality/7
+mental/19
+mentholated
+menthol/7
+mentionable/12
+mentioned/12
+mentioner/6
+mention/67
+mentor/26
+Menuhin/6
+menu/7
+Menzies/6
+meow/17
+Mephistopheles/6
+Merak/6
+Mercado/6
+mercantile
+Mercator/6
+Mercedes
+mercenariness/6
+mercenary/444
+mercerize/17
+Mercer/6
+mercer/7
+merchandiser/6
+merchandise/91
+merchantability
+merchantman/6
+merchantmen
+merchant/57
+Mercie/6
+mercifully/12
+mercifulness/6
+merciful/28
+mercilessness/7
+merciless/28
+Merci/6
+Merck/6
+mercurial/46
+mercuric
+Mercurochrome/6
+mercury/7
+Mercury/7
+Mercy/6
+mercy/7
+Meredeth/6
+Meredithe/6
+Meredith/6
+Merell/6
+meretriciousness/7
+meretricious/28
+mere/16
+merganser/7
+merger/6
+merge/23
+Meridel/6
+meridian/7
+meridional
+Meridith/6
+Meriel/6
+Merilee/6
+Merill/6
+Merilyn/6
+meringue/7
+merino/7
+Meris
+Merissa/6
+merited/12
+meritocracy/7
+meritocratic
+meritocrats
+meritoriousness/7
+meritorious/28
+merit/477
+Meriwether/6
+Merla/6
+Merle/6
+Merlina/6
+Merline/6
+merlin/6
+Merlin/6
+Merl/6
+mermaid/7
+merman/6
+mermen
+Merna/6
+Merola/6
+meromorphic
+Merralee/6
+Merrel/6
+Merriam/6
+Merrick/6
+Merridie/6
+Merrielle/6
+Merrie/6
+Merrilee/6
+Merrile/6
+Merrili/6
+Merrill/6
+merrily
+Merrily/6
+Merrimack/6
+Merrimac/6
+merriment/7
+merriness/9
+Merritt/6
+Merry/6
+merrymaker/7
+merrymaking/7
+merry/98
+Mersey/6
+mer/624
+Merton/6
+Mervin/6
+Merv/6
+Merwin/6
+Merwyn/6
+Meryl/6
+Mesa
+Mesabi/6
+mesa/7
+mescaline/7
+mescal/7
+mesdames/6
+mesdemoiselles/6
+Meshed's
+meshed/12
+mesh/26
+mesmeric
+mesmerism/7
+mesmerized/12
+mesmerizer/6
+mesmerize/23
+Mesolithic/6
+mesomorph/6
+mesomorphs
+meson/7
+Mesopotamia/6
+Mesopotamian/9
+mesosphere/7
+mesozoic
+Mesozoic
+mesquite/7
+mes/9
+message/26
+messeigneurs
+messenger/26
+Messerschmidt/6
+mess/26
+Messiaen/6
+messiah
+Messiah/6
+messiahs
+Messiahs
+messianic
+Messianic
+messieurs/6
+messily
+messiness/7
+messmate/7
+Messrs/6
+messy/98
+mestizo/7
+meta
+metabolic
+metabolically
+metabolism/7
+metabolite/7
+metabolize/17
+metacarpal/9
+metacarpi
+metacarpus/6
+metacircular
+metacircularity
+metalanguage/7
+metalization/7
+metalized
+metallic/9
+metalliferous
+metallings
+metallography/6
+metalloid/6
+metallurgic
+metallurgical/19
+metallurgist/9
+metallurgy/7
+metal/26
+metalsmith/7
+metalworking/6
+metalwork/198
+Meta/6
+metamathematical
+metamorphic
+metamorphism/7
+metamorphose/17
+metamorphosis/6
+metaphoric
+metaphorical/19
+metaphor/7
+metaphosphate/6
+metaphysical/19
+metaphysic/7
+metastability/6
+metastable
+metastases
+metastasis/6
+metastasize/17
+metastatic
+metatarsal/9
+metatarsi
+metatarsus/6
+metatheses
+metathesis/6
+metathesized
+metathesizes
+metathesizing
+metavariable
+metempsychoses
+metempsychosis/6
+meteoric
+meteorically
+meteorite/7
+meteoritic/9
+meteoritics/6
+meteoroid/7
+meteorologic
+meteorological
+meteorologist/9
+meteorology/7
+meteor/7
+meter/165
+mete/23
+methadone/7
+methane/7
+methanol/7
+methinks
+methionine/6
+methodicalness/7
+methodical/28
+methodism
+Methodism/7
+methodist/7
+Methodist/7
+method/7
+methodological/19
+methodologists
+methodology/7
+methought
+Methuen/6
+Methuselah/6
+Methuselahs
+methylated
+methylene/6
+methyl/7
+meticulousness/7
+meticulous/28
+m�tier/9
+metonymy/6
+Metrecal/6
+metrical/19
+metricate/15
+metricize/17
+metrics/6
+metric/7
+metronome/7
+metropolis/7
+metropolitanization
+metropolitan/9
+metro/7
+mets
+Metternich/6
+mettle/56
+mettlesome
+met/12
+Metzler/6
+Meuse/6
+mewl/17
+mew/17
+mews/7
+Mex
+Mexicali/6
+Mexican/9
+Mexico/6
+Meyerbeer/6
+Meyer/7
+mezzanine/7
+mezzo/9
+MFA
+mfg
+mfr/9
+mg
+M/625
+Mg/6
+MGM/6
+mgr
+Mgr
+MHz
+MI
+MIA
+Mia/6
+Miami/7
+Miaplacidus/6
+miasmal
+miasma/7
+Micaela/6
+Micah/6
+mica/7
+micelles
+mice/6
+Michaela/6
+Michaelangelo/6
+Michaelina/6
+Michaeline/6
+Michaella/6
+Michaelmas/7
+Michael/7
+Michaelson/6
+Michail/6
+Michale/6
+Michal/6
+Micheal/6
+Micheil/6
+Michelangelo/6
+Michele/6
+Michelina/6
+Micheline/6
+Michelin/6
+Michelle/6
+Michell/6
+Michel/6
+Michelson/6
+Michigander/9
+Michiganite/9
+Michigan/6
+Mich/6
+Mickelson/6
+Mickey/6
+mickey/7
+Mickie/6
+Micki/6
+Mick/6
+Micky/6
+Mic/6
+Micmac/6
+micra's
+microamp
+microanalysis/6
+microanalytic
+microbe/7
+microbial
+microbicidal
+microbicide/6
+microbiological
+microbiologist/7
+microbiology/7
+microbrewery/9
+microchemistry/6
+microchip/9
+microcircuit/7
+microcode/17
+microcomputer/7
+microcosmic
+microcosm/7
+microdensitometer
+microdot/7
+microeconomic/9
+microeconomics/6
+microelectronic/9
+microelectronics/6
+microfiber/9
+microfiche/6
+microfilm/111
+microfossils
+micrography/6
+microgroove/7
+microhydrodynamics
+microinstruction/7
+microjoule
+microlevel
+microlight/9
+micromanage/11
+micromanagement/9
+micrometeorite/7
+micrometeoritic
+micrometer/7
+Micronesia/6
+Micronesian/9
+micron/7
+microorganism/7
+microphone/131
+Microport/6
+microprocessing
+microprocessor/7
+microprogrammed
+microprogramming
+microprogram/7
+micro/9
+microscope/7
+microscopic
+microscopical/19
+microscopy/7
+microsecond/7
+microsimulation/9
+Microsystems
+micros/6
+Microsoft/6
+microsomal
+microstore
+microsurgery/7
+MicroVAXes
+MicroVAX/6
+microvolt/7
+microwaveable
+microwave/57
+microword/9
+midair/7
+midas
+Midas/6
+midband/6
+midday/7
+midden/7
+middest
+middlebrow/7
+Middlebury/6
+middle/187
+middleman/6
+middlemen
+middlemost
+Middlesex/6
+Middleton/6
+Middletown/6
+middleweight/7
+middling/19
+middy/7
+Mideastern
+Mideast/6
+midfield/114
+Midge/6
+midge/7
+midget/7
+midi/9
+midland/175
+Midland/7
+midlife
+midlives
+midmorn/224
+midmost/9
+midnight/65
+midpoint/7
+midrange
+midrib/7
+midriff/7
+mid/9
+midscale
+midsection/6
+midshipman/6
+midshipmen
+midship/9
+midspan
+midstream/7
+midst/7
+midsummer/7
+midterm/7
+midtown/7
+Midway/6
+midway/9
+midweek/65
+Midwesterner/6
+Midwestern/90
+Midwest/6
+midwicket
+midwifery/7
+midwife/26
+midwinter/65
+midwives
+midyear/7
+mien/6
+miff/17
+mightily
+mightiness/7
+mightn't
+might/9
+mighty/98
+mignon
+mignonette/7
+Mignon/6
+Mignonne/6
+migraine/7
+migrant/7
+migrate/36
+migration/7
+migrative
+migratory/9
+MIG/9
+Miguela/6
+Miguelita/6
+Miguel/6
+mikado/7
+Mikaela/6
+Mikael/6
+mike/26
+Mikel/6
+Mike/6
+Mikey/6
+Mikhail/6
+Mikkel/6
+Mikol/6
+Mikoyan/6
+milady/7
+Milagros/6
+Milanese
+Milan/6
+milch/6
+mildew/26
+mildness/7
+Mildred/6
+Mildrid/6
+mild/534
+mileage/7
+Milena/6
+milepost/7
+miler/6
+mile/7
+Mile/7
+milestone/7
+Milford/6
+Milicent/6
+milieu/7
+Milissent/6
+militancy/7
+militantness/6
+militant/46
+militarily
+militarism/7
+militaristic
+militarist/7
+militarization/186
+militarize/263
+military
+militate/17
+militiaman/6
+militiamen
+militia/7
+Milka/6
+Milken/6
+milker/6
+milk/49
+milkiness/7
+milkmaid/7
+milkman/6
+milkmen
+milkshake/9
+milksop/7
+milkweed/7
+milky/98
+millage/9
+Millard/6
+Millay/6
+millenarian
+millenarianism/6
+millennial
+millennialism
+millennium/7
+millepede's
+miller/6
+Miller/6
+Millet/6
+millet/7
+milliamp
+milliampere/9
+milliard/7
+millibar/7
+Millicent/6
+millidegree/9
+Millie/6
+milligram/7
+millijoule/9
+Millikan/6
+milliliter/7
+Milli/6
+millimeter/7
+milliner/7
+millinery/7
+milling/6
+millionaire/7
+million/626
+millionth/6
+millionths
+millipede/7
+millisecond/7
+Millisent/6
+millivoltmeter/7
+millivolt/7
+milliwatt/9
+millpond/7
+millrace/7
+mill/49
+Mill/175
+millstone/7
+millstream/7
+millwright/7
+Milly/6
+mil/96
+Mil/86
+Milne/6
+Milo/6
+Milquetoast/9
+milquetoast/7
+Miltiades/6
+Miltie/6
+Milt/6
+milt/26
+Miltonic
+Milton/6
+Miltown/6
+Milty/6
+Milwaukee/6
+Milzie/6
+MIMD
+mime/111
+mimeograph/26
+mimeographs
+mimer/6
+mimesis/6
+mimetic
+mimetically
+mimicked
+mimicker/7
+mimicking
+mimicry/7
+mimic/9
+Mimi/6
+mi/451
+Mimosa/6
+mimosa/7
+Mina/6
+minaret/7
+minatory
+mincemeat/7
+mincer/6
+mince/179
+mincing/19
+Minda/6
+Mindanao/6
+mind/119
+mindbogglingly
+minded/42
+minder/6
+mindfully
+mindfulness/7
+mindful/12
+mindlessness/7
+mindless/28
+Mindoro/6
+min/245
+mind's
+mindset/9
+Mindy/6
+minefield/7
+mineralization/169
+mineralized/12
+mineralogical
+mineralogist/7
+mineralogy/7
+mineral/7
+miner/6
+Miner/6
+Minerva/6
+mineshaft
+mine/188
+minestrone/7
+minesweeper/7
+Minetta/6
+Minette/6
+mineworkers
+mingle/17
+Ming/6
+Mingus/6
+miniature/26
+miniaturist/7
+miniaturization/7
+miniaturize/17
+minibike/9
+minibus/7
+minicab/6
+minicam/7
+minicomputer/7
+minidress/7
+minify/17
+minimalism/9
+minimalistic
+minimalist/7
+minimality
+minimal/16
+minima's
+minimax/6
+minimization/7
+minimized/12
+minimizer/6
+minimize/23
+minim/7
+minimum/7
+mining/6
+minion/6
+mini/9
+miniseries
+miniskirt/7
+ministerial/19
+minister/26
+ministrant/9
+ministration/7
+ministry/7
+minivan/9
+miniver/6
+minke
+mink/7
+Min/114
+Minna/6
+Minnaminnie/6
+Minneapolis/6
+Minne/6
+minnesinger/7
+Minnesota/6
+Minnesotan/9
+Minnie/6
+Minni/6
+Minn/6
+Minnnie/6
+minnow/7
+Minny/6
+Minoan/9
+Minolta/6
+minor/26
+minority/7
+Minor/6
+Minos
+Minotaur/6
+minotaur/9
+Minot/6
+minoxidil/9
+Minsk/6
+Minsky/6
+minster/7
+minstrel/7
+minstrelsy/7
+mintage/7
+Mintaka/6
+Minta/6
+minter/6
+mint/49
+minty/54
+minuend/7
+minuet/7
+Minuit/6
+minuscule/7
+minus/9
+minuteman
+Minuteman/6
+minutemen
+minuteness/7
+minute/502
+minutiae
+minutia/6
+minx/7
+Miocene
+MIPS
+Miquela/6
+Mirabeau/6
+Mirabella/6
+Mirabelle/6
+Mirabel/6
+Mirach/6
+miracle/7
+miraculousness/6
+miraculous/28
+mirage/26
+Mira/6
+Miranda/6
+Miran/6
+Mireielle/6
+Mireille/6
+Mirella/6
+Mirelle/6
+mire/26
+Mirfak/6
+Miriam/6
+Mirilla/6
+Mir/6
+Mirna/6
+Miro
+mirror/26
+mirthfulness/7
+mirthful/28
+mirthlessness/6
+mirthless/28
+mirth/6
+mirths
+MIRV/17
+miry/54
+Mirzam/6
+misaddress/17
+misadventure/7
+misalign/11
+misalignment/7
+misalliance/7
+misanalysed
+misanthrope/7
+misanthropic
+misanthropically
+misanthropist/9
+misanthropy/7
+misapplier/6
+misapply/294
+misapprehend/17
+misapprehension/7
+misappropriate/15
+misbegotten
+misbehaver/6
+misbehave/31
+misbehavior/7
+misbrand/17
+misc
+miscalculate/15
+miscalculation/6
+miscall/17
+miscarriage/7
+miscarry/17
+miscast/166
+miscegenation/7
+miscellanea
+miscellaneous/28
+miscellany/7
+Mischa/6
+mischance/26
+mischief/26
+mischievousness/7
+mischievous/28
+miscibility/9
+miscible/169
+misclassification/6
+misclassified
+misclassifying
+miscode/17
+miscommunicate/627
+miscomprehended
+misconceive/17
+misconception/7
+misconduct/26
+misconfiguration
+misconstruction/7
+misconstrue/17
+miscopying
+miscount/17
+miscreant/7
+miscue/26
+misdeal/166
+misdealt
+misdeed/7
+misdemeanant/7
+misdemeanor/7
+misdiagnose/17
+misdid
+misdirect/17
+misdirection/7
+misdirector/9
+misdoes
+misdo/301
+misdone
+miserableness/7
+miserable/144
+miserably
+miser/378
+miserliness/7
+miserly/42
+misery/7
+mises/628
+misfeasance/7
+misfeature/6
+misfield
+misfile/17
+misfire/17
+misfit/7
+misfitted
+misfitting
+misfortune/7
+misgauge/17
+misgiving/65
+misgovern/11
+misgovernment/9
+misguidance/7
+misguidedness/6
+misguided/28
+misguide/31
+misguider/6
+Misha/6
+mishandle/17
+mishap/7
+mishapped
+mishapping
+misheard
+mishear/166
+mishitting
+mishmash/7
+misidentification/6
+misidentify/55
+misinformation/7
+misinform/17
+misinterpretation/7
+misinterpreter/6
+misinterpret/23
+misjudge/17
+misjudging/19
+misjudgment/7
+Miskito
+mislabel/17
+mislaid
+mislay/166
+misleader/6
+mislead/20
+misleading/19
+misled
+mismanage/11
+mismanagement/7
+mismatch/17
+misname/17
+misnomer/26
+misogamist/7
+misogamy/7
+misogynistic
+misogynist/7
+misogynous
+misogyny/7
+misperceive/142
+misplace/11
+misplacement/7
+misplay/17
+mispositioned
+misprint/26
+misprision/7
+mispronounce/17
+mispronunciation/7
+misquotation/7
+misquote/17
+misreader/6
+misread/20
+misrelated
+misremember/47
+misreport/17
+misrepresentation/7
+misrepresenter/6
+misrepresent/31
+misroute/142
+misrule/17
+missal/85
+misshape/17
+misshapenness/7
+misshapen/28
+Missie/6
+missile/7
+missilery/7
+mission/48
+missionary/7
+missioned
+missioner/7
+missioning
+missis's
+Mississauga/6
+Mississippian/9
+Mississippi/6
+missive/7
+Missoula/6
+Missourian/9
+Missouri/6
+misspeak/166
+misspecification
+misspecified
+misspelling/6
+misspell/71
+misspend/166
+misspent
+misspoke
+misspoken
+mis/110
+miss/629
+Miss/7
+misstate/8
+misstatement/7
+misstater/6
+misstep/7
+misstepped
+misstepping
+missus/7
+Missy/6
+mistakable/12
+mistake/630
+mistaken/19
+mistaker/6
+mistaking/19
+Mistassini/6
+mister/165
+Mister/7
+mistily
+Misti/6
+mistime/17
+mistiness/9
+mistletoe/7
+mist/49
+mistook
+mistral/7
+mistranslated
+mistranslates
+mistranslating
+mistranslation/7
+mistreat/11
+mistreatment/7
+Mistress/7
+mistress/65
+mistrial/7
+mistruster/6
+mistrustful/19
+mistrust/31
+Misty/6
+mistype/71
+misty/98
+misunderstander/6
+misunderstanding/6
+misunderstand/210
+misunderstood
+misuser/6
+misuse/111
+miswritten
+Mitchael/6
+Mitchell/6
+Mitchel/6
+Mitch/6
+miterer/6
+miter/570
+mite/96
+Mitford/6
+Mithra/6
+Mithridates/6
+mitigated/12
+mitigate/24
+mitigation/6
+MIT/6
+mitoses
+mitosis/6
+mitotic
+MITRE/7
+Mitsubishi/6
+mitten/6
+Mitterrand/6
+mitt/99
+Mitty/6
+Mitzi/6
+mitzvahs
+mixable
+mix/36
+mixed/12
+mixer/7
+mixture/7
+Mizar/6
+mizzenmast/7
+mizzen/7
+Mk
+mks
+ml
+Mlle/6
+mm
+MM
+MMe
+Mme/7
+MN
+mnemonically
+mnemonics/6
+mnemonic/7
+Mnemosyne/6
+Mn/6
+MO
+moan/49
+moat/26
+mobbed
+mobber
+mobbing
+mobcap/7
+Mobile/6
+mobile/9
+mobility/7
+mobilizable
+mobilization/279
+mobilize/263
+mobilized/12
+mobilizer/7
+mobilizes/14
+Mobil/6
+mob/7
+mobster/7
+Mobutu/6
+moccasin/7
+mocha/7
+mockers/6
+mockery/7
+mock/23
+mockingbird/7
+mocking/19
+mo/631
+modality/7
+modal/19
+modeled/14
+modeler/6
+modeling/6
+models/14
+model/91
+mode/7
+modem/7
+moderated/12
+moderateness/7
+moderate/124
+moderation/6
+moderator/7
+modernism/7
+modernistic
+modernist/9
+modernity/7
+modernization/7
+modernized/12
+modernizer/6
+modernize/23
+modernizes/12
+modernness/7
+modern/38
+Modesta/6
+Modestia/6
+Modestine/6
+Modesto/6
+modest/93
+Modesty/6
+modesty/7
+modicum/7
+modifiability/6
+modifiableness/6
+modifiable/12
+modification/6
+modified/12
+modifier/6
+modify/115
+Modigliani/6
+modishness/7
+modish/28
+mod/228
+Modula/6
+modularity/7
+modularization
+modularize/17
+modular/16
+modulate/632
+modulation/186
+modulator/279
+module/7
+moduli
+modulo
+modulus/6
+modus
+Moe/6
+Moen/6
+Mogadiscio's
+Mogadishu
+mogul/7
+Mogul/7
+mohair/7
+Mohamed/6
+Mohammad/6
+Mohammedanism/7
+Mohammedan/7
+Mohammed's
+Mohandas/6
+Mohandis/6
+Mohawk/7
+Mohegan/9
+Mohican's
+Moho/6
+Mohorovicic/6
+Mohr/6
+moiety/7
+moil/17
+Moina/6
+Moines/6
+Moira/6
+moire/7
+Moise/7
+Moiseyev/6
+Moishe/6
+moistener/6
+moisten/242
+moistness/7
+moist/324
+moisture/7
+moisturize/23
+Mojave/6
+molal
+molarity/7
+molar/7
+molasses/7
+Moldavia/6
+Moldavian/9
+moldboard/7
+molder/47
+moldiness/7
+molding/6
+mold/91
+Moldova
+moldy/98
+molecularity/7
+molecular/19
+molecule/7
+molehill/7
+mole/633
+moleskin/7
+molestation/7
+molested/12
+molester/6
+molest/23
+Moliere
+Molina/6
+Moline/6
+Mollee/6
+Mollie/6
+mollification/6
+mollify/15
+Molli/6
+Moll/6
+moll/7
+mollusc's
+mollusk/9
+mollycoddler/6
+mollycoddle/31
+Molly/6
+molly/7
+Molnar/6
+Moloch/6
+Molokai/6
+Molotov/6
+molter/6
+molt/237
+Moluccas
+molybdenite/6
+molybdenum/7
+Mombasa/6
+momenta
+momentarily
+momentariness/7
+momentary/42
+moment/65
+momentousness/7
+momentous/28
+momentum/7
+momma/9
+Mommy/6
+mommy/7
+Mo/72
+mom/7
+Monaco/6
+monadic
+monad/7
+Monah/6
+Mona/6
+monarchic
+monarchical
+monarchism/7
+monarchistic
+monarchist/7
+monarch/6
+monarchs
+monarchy/7
+Monash/6
+monastery/7
+monastical/19
+monasticism/7
+monastic/9
+monaural/19
+Mondale/6
+Monday/7
+Mondrian/6
+Monegasque/7
+Monera/6
+monetarily
+monetarism/9
+monetarist/7
+monetary
+monetization/104
+monetize/311
+Monet/6
+moneybag/7
+moneychangers
+moneyer/6
+moneylender/7
+moneymaker/7
+moneymaking/7
+money/286
+Monfort/6
+monger/26
+Mongolia/6
+Mongolian/9
+Mongolic/6
+mongolism/7
+mongoloid/9
+Mongoloid/9
+Mongol/7
+mongoose/7
+mongrel/7
+Monica/6
+monies/6
+Monika/6
+moniker/7
+Monique/6
+monism/7
+monist/7
+monition/7
+monitored/12
+monitor/26
+monitory/9
+monkeyshine/9
+monkey/26
+monkish
+Monk/6
+monk/7
+monkshood/7
+Monmouth/6
+monochromatic
+monochromator
+monochrome/7
+monocle/56
+monoclinic
+monoclonal/9
+monocotyledonous
+monocotyledon/7
+monocular/16
+monodic
+monodist/9
+monody/7
+monogamist/7
+monogamous/28
+monogamy/7
+monogrammed
+monogramming
+monogram/7
+monograph/26
+monographs
+monolingualism
+monolingual/9
+monolithic
+monolithically
+monolith/6
+monoliths
+monologist/9
+monologue/26
+monomaniacal
+monomaniac/7
+monomania/7
+monomeric
+monomer/7
+monomial/7
+mono/7
+Monongahela/6
+mononuclear
+mononucleoses
+mononucleosis/6
+monophonic
+monoplane/7
+monopole/9
+monopolistic
+monopolist/7
+monopolization/7
+monopolized/12
+monopolize/23
+monopolizes/12
+monopoly/7
+monorail/7
+monostable
+monosyllabic
+monosyllable/7
+monotheism/7
+monotheistic
+monotheist/9
+monotone/26
+monotonic
+monotonically
+monotonicity
+monotonousness/7
+monotonous/28
+monotony/7
+monovalent
+monoxide/7
+Monroe/6
+Monro/6
+Monrovia/6
+Monsanto/6
+monseigneur
+monsieur/6
+Monsignori
+Monsignor/7
+monsignor/9
+Mon/7
+monsoonal
+monsoon/7
+monster/7
+monstrance/48
+monstrosity/7
+monstrousness/6
+monstrous/28
+montage/26
+Montague/6
+Montaigne/6
+Montana/6
+Montanan/7
+Montcalm/6
+Montclair/6
+Monte/6
+Montenegrin
+Montenegro/6
+Monterey/6
+Monterrey/6
+Montesquieu/6
+Montessori/6
+Monteverdi/6
+Montevideo/6
+Montezuma
+Montgomery/6
+monthly/9
+month/86
+months
+Monticello/6
+Monti/6
+Mont/6
+Montmartre/6
+Montoya/6
+Montpelier/6
+Montrachet/6
+Montreal/6
+Montserrat/6
+Monty/6
+monumentality/6
+monumental/19
+monument/26
+mooch/23
+moodily
+moodiness/7
+mood/7
+Moody/6
+moody/98
+Moog
+moo/17
+moonbeam/7
+Mooney/6
+moon/26
+moonless
+moonlight/49
+moonlighting/6
+moonlit
+Moon/6
+moonscape/7
+moonshiner/6
+moonshine/96
+moonshot/7
+moonstone/7
+moonstruck
+moonwalk/17
+Moore/6
+moor/171
+mooring/6
+Moorish
+moorland/7
+Moor/7
+moose/6
+moot/31
+moped/7
+moper/6
+mope/9
+mopey
+mopier
+mopiest
+mopish
+mopped
+moppet/7
+mopping
+mop/49
+moraine/7
+morale/7
+Morales/6
+moralistic
+moralistically
+moralist/7
+morality/41
+moralization/120
+moralize/265
+moralled
+moraller
+moralling
+moral/65
+Mora/6
+Moran/6
+morass/7
+moratorium/7
+Moravia/6
+Moravian
+moray/7
+morbidity/7
+morbidness/9
+morbid/28
+mordancy/7
+mordant/183
+Mordecai/6
+Mord/6
+Mordred/6
+Mordy/6
+more/627
+Moreen/6
+Morehouse/6
+Moreland/6
+morel/7
+More/6
+Morena/6
+Moreno/6
+moreover
+Morey/6
+Morgana/6
+Morganica/6
+Morgan/7
+Morganne/6
+morgen/6
+Morgen/6
+morgue/7
+Morgun/6
+Moria/6
+Moriarty/6
+moribundity/6
+moribund/19
+Morie/6
+Morin/6
+morion/6
+Morison/6
+Morissa/6
+Morita/6
+Moritz/6
+Morlee/6
+Morley/6
+Morly/6
+Mormonism/7
+Mormon/7
+Morna/6
+morning/86
+morn/171
+Moroccan/9
+Morocco/6
+morocco/7
+Moro/6
+moronic
+moronically
+Moroni/6
+moron/7
+moroseness/7
+morose/28
+morpheme/26
+morphemic/9
+Morpheus/6
+morph/387
+morphia/9
+morphine/7
+morphism/7
+morphologic
+morphological/19
+morphology/7
+morphophonemic/9
+morphophonemics/6
+morphs
+Morrie/6
+morris
+Morris/6
+Morrison/6
+Morristown/6
+Morrow/6
+morrow/7
+Morry/6
+morsel/26
+Morse/6
+mortality/7
+mortal/16
+mortarboard/7
+mortar/26
+Morten/6
+mortgageable
+mortgagee/7
+mortgage/26
+mortgagor/7
+mortice's
+mortician/7
+Mortie/6
+mortification/6
+mortified/19
+mortifier/6
+mortify/294
+Mortimer/6
+mortise/26
+Mort/72
+Morton/6
+mortuary/7
+Morty/6
+Mosaic
+mosaicked
+mosaicking
+mosaic/7
+Moscone/6
+Moscow/6
+Moseley/6
+Moselle/6
+Mose/175
+Moser/6
+mosey/17
+Moshe/6
+Moslem's
+Mosley/6
+mosque/7
+mosquitoes
+mosquito/6
+mos/9
+mossback/7
+Mossberg/6
+Moss/6
+moss/26
+mossy/228
+most/16
+Mosul/6
+mote/634
+motel/7
+mote's
+motet/7
+mothball/26
+motherboard/7
+motherfucker/30
+motherfucking/251
+motherhood/7
+mothering/6
+motherland/7
+motherless
+motherliness/7
+motherly/42
+mother/635
+moths
+moth/231
+motif/7
+motile/9
+motility/7
+motional/370
+motioner/6
+motion/111
+motionlessness/9
+motionless/28
+motion's/636
+motions/370
+motivated/12
+motivate/24
+motivational/19
+motivation/6
+motivator/9
+motiveless
+motive/26
+motley/9
+motlier
+motliest
+mot/76
+motocross/7
+motorbike/26
+motorboat/7
+motorcade/26
+motorcar/7
+motorcycle/26
+motorcyclist/7
+motor/26
+motoring/6
+motorist/7
+motorization/7
+motorize/17
+motorized/12
+motorman/6
+motormen
+motormouth
+motormouths
+Motorola/6
+motorway/7
+Motown/6
+mottle/31
+mottler/6
+Mott/6
+mottoes
+motto/6
+moue/26
+moulder/17
+moult/17
+mound/26
+mountable
+mountaineering/6
+mountaineer/171
+mountainousness/6
+mountainous/28
+mountainside/7
+mountain/7
+mountaintop/7
+Mountbatten/6
+mountebank/26
+mounted/12
+mount/637
+mounter/7
+mounties
+Mountie/7
+mounting/7
+Mount/6
+mounts/145
+mourner/6
+mournfuller
+mournfullest
+mournfulness/9
+mournful/28
+mourning/6
+mourn/179
+mouser/6
+mouse/49
+mousetrapped
+mousetrapping
+mousetrap/7
+mousiness/7
+mousing/6
+mousse/26
+Moussorgsky/6
+mousy/98
+Mouthe/6
+mouthful/7
+mouthiness/7
+mouth/111
+mouthorgan
+mouthpiece/7
+mouths
+mouthwash/7
+mouthwatering
+mouthy/98
+Mouton/6
+mouton/7
+movable/638
+movableness/118
+move/639
+moved/12
+movement/7
+mover/118
+moviegoer/9
+movie/7
+moving/16
+mower/6
+Mowgli/6
+mowing/6
+mow/23
+moxie/7
+Moyer/6
+Moyna/6
+Moyra/6
+Mozambican/9
+Mozambique/6
+Mozart/6
+Mozelle/6
+Mozes/6
+Mozilla/6
+mozzarella/7
+mp
+MP
+mpg
+mph
+MPH
+MRI
+Mr/6
+Mrs
+ms
+M's
+MS
+MSG
+Msgr/6
+m's/370
+Ms/9
+MST
+MSW
+mt
+MT
+mtg
+mtge
+Mt/6
+MTS
+MTV
+Muawiya/6
+Mubarak/6
+muchness/6
+much/144
+mucilage/7
+mucilaginous
+mucker/6
+muck/111
+muckraker/6
+muckrake/49
+mucky/54
+mucosa/6
+mucous
+mucus/7
+mudded
+muddily
+muddiness/7
+mudding
+muddle/23
+muddleheaded/42
+muddlehead/56
+muddler/6
+muddy/226
+mudflat/9
+mudguard/7
+mudlarks
+mud/7
+mudroom/9
+mudslide/9
+mudslinger/6
+mudslinging/6
+mudsling/173
+Mueller/6
+Muenster
+muenster/7
+muesli/6
+muezzin/7
+muff/26
+Muffin/6
+muffin/7
+muffler/6
+muffle/23
+Mufi/6
+Mufinella/6
+mufti/7
+Mugabe/6
+mugged
+mugger/7
+mugginess/9
+mugging/9
+muggy/98
+mugshot/9
+mug/7
+mugwump/7
+Muhammadanism/9
+Muhammadan/7
+Muhammad/6
+Muire/6
+Muir/6
+Mukden/6
+mukluk/7
+mulattoes
+mulatto/6
+mulberry/7
+mulch/26
+mulct/17
+Mulder/6
+mule/26
+muleskinner/9
+muleteer/7
+mulishness/7
+mulish/28
+mullah/6
+mullahs
+mullein/7
+Mullen/6
+muller/6
+Muller/6
+mullet/7
+Mulligan/6
+mulligan/7
+mulligatawny/7
+Mullikan/6
+Mullins
+mullion/26
+mull/31
+Multan/6
+multi
+Multibus/6
+multicellular
+multichannel/6
+multicollinearity/6
+multicolor/56
+multicolumn
+multicomponent
+multicomputer/7
+Multics/6
+MULTICS/6
+multicultural
+multiculturalism/9
+multidimensional
+multidimensionality
+multidisciplinary
+multifaceted
+multifamily
+multifariousness/7
+multifarious/28
+multifigure
+multiform
+multifunction/81
+multilateral/19
+multilayer
+multilevel/81
+multilingual
+multilingualism/9
+multimedia/9
+multimegaton/6
+multimeter/6
+multimillionaire/7
+multinational/9
+multinomial/6
+multiphase
+multiple/7
+multiplet/7
+multiplex/49
+multiplexor's
+multipliable
+multiplicand/7
+multiplication/6
+multiplicative/16
+multiplicity/7
+multiplier/6
+multiply/115
+multiprocess/224
+multiprocessor/7
+multiprogram
+multiprogrammed
+multiprogramming/7
+multipurpose
+multiracial
+multistage
+multistory/9
+multisyllabic
+multitasking/9
+multitude/7
+multitudinousness/6
+multitudinous/28
+multiuser
+multivalent
+multivalued
+multivariate
+multiversity/6
+multivitamin/9
+mu/6
+mumbler/6
+mumbletypeg/9
+mumble/179
+Mumford/6
+mummed
+mummer/7
+mummery/7
+mummification/6
+mummify/15
+mumming
+mum/7
+mummy/26
+mumps/6
+muncher/6
+M�nchhausen/6
+munchies
+Munch/6
+munch/23
+Muncie/6
+mundane/46
+Mundt/6
+munge/179
+Munich/6
+municipality/7
+municipal/16
+munificence/7
+munificent/19
+munition/17
+Munmro/6
+Munoz/6
+Munroe/6
+Munro/6
+mun/9
+Munsey/6
+Munson/6
+Munster/7
+Muong/6
+muon/6
+Muppet/6
+muralist/7
+mural/7
+Murasaki/6
+Murat/6
+Murchison/6
+Murcia/6
+murderer/6
+murderess/9
+murder/49
+murderousness/6
+murderous/28
+Murdoch/6
+Murdock/6
+Mureil/6
+Murial/6
+muriatic
+Murielle/6
+Muriel/6
+Murillo/6
+murkily
+murkiness/9
+murk/80
+murky/98
+Murmansk/6
+murmurer/6
+murmuring/12
+murmurous
+murmur/91
+Murphy/6
+murrain/7
+Murray/6
+Murrow/6
+Murrumbidgee/6
+Murry/6
+Murvyn/6
+muscatel/7
+Muscat/6
+muscat/7
+musclebound
+muscle/26
+Muscovite/6
+muscovite/7
+Muscovy/6
+muscularity/7
+muscular/19
+musculature/7
+muse
+Muse/6
+muser/6
+musette/7
+museum/7
+mus/187
+musher/6
+mushiness/7
+mush/111
+mushroom/26
+mushy/98
+Musial/6
+musicale/7
+musicality/7
+musicals
+musical/10
+musician/65
+musicianship/7
+musicked
+musicking
+musicological
+musicologist/7
+musicology/7
+music/7
+musing/19
+Muskegon/6
+muskeg/7
+muskellunge/7
+musketeer/7
+musketry/7
+musket/7
+musk/26
+muskie/6
+muskiness/7
+muskmelon/7
+muskox/122
+muskrat/7
+musky/177
+Muslim/7
+muslin/7
+mussel/7
+Mussolini/7
+Mussorgsky/6
+muss/17
+mussy/54
+mustache/56
+mustachio/56
+mustang/7
+mustard/7
+muster/47
+mustily
+mustiness/7
+mustn't
+must/23
+must've
+musty/98
+mutability/7
+mutableness/6
+mutable/42
+mutably
+mutagen/7
+mutant/7
+mutate/24
+mutational/19
+mutation/6
+mutator/9
+muted/19
+muteness/9
+mute/640
+mutilate/15
+mutilation/6
+mutilator/7
+mutineer/26
+mutinous/19
+mutiny/26
+Mutsuhito/6
+mutterer/6
+mutter/245
+muttonchops
+mutton/7
+mutt/96
+mutuality/9
+mutual/16
+muumuu/7
+muzak
+Muzak/7
+Muzo/6
+muzzled/12
+muzzle/111
+muzzler/6
+MVP
+MW
+Myanmar
+Mycah/6
+Myca/6
+Mycenaean
+Mycenae/6
+Mychal/6
+mycologist/7
+mycology/7
+myelitides
+myelitis/6
+Myer/7
+myers
+mylar
+Mylar/9
+Myles/6
+Mylo/6
+My/6
+myna/7
+Mynheer/6
+myocardial
+myocardium/6
+myopia/7
+myopically
+myopic/9
+Myrah/6
+Myra/6
+Myranda/6
+Myrdal/6
+myriad/9
+Myriam/6
+Myrilla/6
+Myrle/6
+Myrlene/6
+myrmidon/9
+Myrna/6
+Myron/6
+myrrh/6
+myrrhs
+Myrta/6
+Myrtia/6
+Myrtice/6
+Myrtie/6
+Myrtle/6
+myrtle/7
+Myrvyn/6
+Myrwyn/6
+mys
+my/9
+myself
+Mysore/6
+mysteriousness/7
+mysterious/28
+mystery/26
+mystical/19
+mysticism/7
+mystic/7
+mystification/6
+mystifier/6
+mystify/345
+mystifying/19
+mystique/7
+Myst/6
+mythic
+mythical/19
+myth/7
+mythographer/7
+mythography/6
+mythological/19
+mythologist/7
+mythologize/263
+mythology/7
+myths
+N
+NAACP
+nabbed
+nabbing
+Nabisco/6
+nabob/7
+Nabokov/6
+nab/9
+nacelle/7
+nacho/9
+NaCl/6
+nacre/7
+nacreous
+Nada/6
+Nadean/6
+Nadeen/6
+Nader/6
+Nadia/6
+Nadine/6
+nadir/7
+Nadiya/6
+Nadya/6
+Nady/6
+nae/303
+Nagasaki/6
+nagged
+nagger/9
+nagging/19
+nag/7
+Nagoya/6
+Nagpur/6
+Nagy/6
+Nahuatl/7
+Nahum/6
+naiad/7
+naifs
+nailbrush/7
+nailer/6
+nail/111
+Naipaul/6
+Nair/6
+Nairobi/6
+Naismith/6
+naive/38
+naivet�/7
+naivety/7
+Nakamura/6
+Nakayama/6
+nakedness/7
+naked/33
+Nakoma/6
+Nalani/6
+Na/6
+Namath/6
+nameable/12
+name/36
+namedrop
+namedropping
+named's
+named/12
+nameless/28
+namely
+nameplate/7
+namer/7
+name's
+namesake/7
+Namibia/6
+Namibian/9
+naming/6
+Nam/6
+Nanak/6
+Nana/6
+Nananne/6
+Nancee/6
+Nance/6
+Nancey/6
+Nanchang/6
+Nancie/6
+Nanci/6
+Nancy/6
+Nanete/6
+Nanette/6
+Nanice/6
+Nani/6
+Nanine/6
+Nanjing
+Nanking's
+Nan/6
+Nannette/6
+Nannie/6
+Nanni/6
+Nanny/6
+nanny/26
+nanometer/7
+Nanon/6
+Nanook/6
+nanosecond/7
+Nansen/6
+Nantes/6
+Nantucket/6
+Naoma/6
+Naomi/6
+napalm/26
+nape/7
+Naphtali/6
+naphthalene/7
+naphtha/7
+Napier/6
+napkin/7
+Naples/6
+napless
+Nap/6
+Napoleonic
+napoleon/7
+Napoleon/7
+napped
+napper/7
+Nappie/6
+napping
+Nappy/6
+nappy/80
+nap/7
+Nara/6
+Narbonne/6
+narc/17
+narcissism/7
+narcissistic
+narcissist/7
+narcissus/6
+Narcissus/6
+narcoleptic
+narcoses
+narcosis/6
+narcotic/7
+narcotization/9
+narcotize/17
+Nariko/6
+Nari/6
+nark's
+Narmada/6
+Narragansett/6
+narrate/24
+narration/6
+narrative/65
+narratology
+narrator/7
+narrowing/42
+narrowness/7
+narrow/77
+narwhal/7
+nary
+nasality/7
+nasalization/7
+nasalize/17
+nasal/16
+NASA/7
+nascence/48
+nascent/14
+NASDAQ
+Nash/6
+Nashua/6
+Nashville/6
+Nassau/6
+Nasser/6
+nastily
+nastiness/7
+nasturtium/7
+nasty/177
+natal
+Natala/6
+Natalee/6
+Natale/6
+Natalia/6
+Natalie/6
+Natalina/6
+Nataline/6
+natalist
+natality/6
+Natal/6
+Natalya/6
+Nata/6
+Nataniel/6
+Natasha/6
+Natassia/6
+Natchez
+natch/9
+Nate/451
+Nathalia/6
+Nathalie/6
+Nathanael/6
+Nathanial/6
+Nathaniel/6
+Nathanil/6
+Nathan/7
+nationalism/7
+nationalistic
+nationalistically
+nationalist/7
+nationality/7
+nationalization/7
+nationalize/263
+nationalized/13
+nationalizer/7
+national/16
+nationhood/7
+nation/7
+nationwide
+nativeness/6
+native/46
+Natividad/6
+Nativity/6
+nativity/7
+Natka/6
+natl
+Nat/6
+NATO/7
+natter/17
+nattily
+nattiness/7
+Natty/6
+natty/98
+naturalism/7
+naturalistic
+naturalist/7
+naturalization/7
+naturalized/12
+naturalize/17
+naturalness/302
+natural/161
+naturals
+nature/311
+nature's
+naturist
+Naugahyde/9
+naughtily
+naughtiness/7
+naught/7
+naughty/177
+Naur/6
+Nauru/6
+nausea/7
+nauseate/17
+nauseating/19
+nauseousness/7
+nauseous/42
+nautical/19
+nautilus/7
+Navaho's
+Navajoes
+Navajo/9
+naval/19
+Navarro/6
+navel/7
+nave/7
+navigability/7
+navigableness/6
+navigable/42
+navigate/15
+navigational
+navigation/6
+navigator/7
+Navona/6
+Navratilova/6
+navvy/6
+Navy/9
+navy/7
+nay/7
+naysayer/9
+Nazarene/7
+Nazareth/6
+Nazi/7
+Nazism/9
+NB
+NBA
+NBC
+Nb/6
+NBS
+NC
+NCAA
+NCC
+NCO
+NCR
+ND
+N'Djamena
+Ndjamena/6
+Nd/6
+Ne
+NE
+Neala/6
+Neale/6
+Neall/6
+Neal/6
+Nealon/6
+Nealson/6
+Nealy/6
+Neanderthal/9
+neap/17
+Neapolitan/7
+nearby
+nearly/54
+nearness/7
+nearside/6
+nearsightedness/9
+nearsighted/28
+near/77
+neaten/47
+neath
+neatness/7
+neat/35
+Neb/6
+Nebraska/6
+Nebraskan/7
+Nebr/6
+Nebuchadnezzar/7
+nebulae
+nebula/6
+nebular
+nebulousness/7
+nebulous/28
+necessaries
+necessarily/12
+necessary/12
+necessitate/15
+necessitation/6
+necessitous
+necessity/7
+neckband/6
+neckerchief/7
+neck/211
+necking/6
+necklace/26
+neckline/7
+necktie/7
+necrology/7
+necromancer/7
+necromancy/7
+necromantic
+necrophiliac/9
+necrophilia/6
+necropolis/7
+necropsy/6
+necroses
+necrosis/6
+necrotic
+nectarine/7
+nectarous
+nectar/7
+nectary/7
+Neda/6
+Nedda/6
+Neddie/6
+Neddy/6
+Nedi/6
+Ned/6
+n�e
+needed/12
+needer/6
+needful/46
+Needham/6
+neediness/7
+needlecraft/6
+needle/49
+needlepoint/7
+needlessness/9
+needless/28
+needlewoman/6
+needlewomen
+needlework/175
+needn't
+need/34
+needy/98
+Neel/6
+Neely/6
+ne'er
+nefariousness/7
+nefarious/28
+Nefen/6
+Nefertiti/6
+negated/12
+negater/6
+negate/426
+negation/6
+negativeness/7
+negative/22
+negativism/7
+negativity/7
+negator/7
+Negev/6
+neglecter/6
+neglectfulness/7
+neglectful/28
+neglect/31
+negligee/7
+negligence/7
+negligent/19
+negligibility/6
+negligible
+negligibly
+negotiability/7
+negotiable/14
+negotiant/6
+negotiate/132
+negotiation/118
+negotiator/7
+Negress/7
+negritude/7
+Negritude/9
+Negroes
+negroid
+Negroid/9
+Negro/6
+neg/9
+Nehemiah/6
+Nehru/6
+neighbored/12
+neighborer/6
+neighborhood/7
+neighborlinesses
+neighborliness/135
+neighborly/236
+neighbor/641
+neigh/165
+neighs
+Neila/6
+Neile/6
+Neilla/6
+Neille/6
+Neill/6
+Neil/7
+neither
+Nelda/6
+Nelia/6
+Nelie/6
+Nelle/6
+Nellie/6
+Nelli/6
+Nell/6
+Nelly/6
+Nelsen/6
+Nels/122
+Nelson/6
+nelson/7
+nematic
+nematode/7
+Nembutal/6
+nemeses
+nemesis
+Nemesis/6
+neoclassical
+neoclassicism/7
+neoclassic/6
+neocolonialism/7
+neocortex/6
+neodymium/7
+Neogene
+neolithic
+Neolithic/6
+neologism/7
+neomycin/6
+neonatal/19
+neonate/7
+neon/56
+neophyte/7
+neoplasm/7
+neoplastic
+neoprene/7
+Nepalese
+Nepali/7
+Nepal/6
+nepenthe/7
+nephew/7
+nephrite/7
+nephritic
+nephritides
+nephritis/6
+nepotism/7
+nepotist/9
+Neptune/6
+neptunium/7
+nerd/9
+nerdy/54
+Nereid/6
+Nerf/6
+Nerissa/6
+Nerita/6
+Nero/6
+Neron/6
+Nerta/6
+Nerte/6
+Nertie/6
+Nerti/6
+Nert/6
+Nerty/6
+Neruda/6
+nervelessness/7
+nerveless/28
+nerve's
+nerve/180
+nerviness/7
+nerving/6
+nervousness/7
+nervous/28
+nervy/98
+Nessa/6
+Nessie/6
+Nessi/6
+Nessy/6
+Nesta/6
+nester/6
+Nester/6
+Nestle/6
+nestler/6
+nestle/31
+nestling/6
+Nestorius/6
+Nestor/6
+nest/101
+netball/6
+nether
+Netherlander/7
+Netherlands/6
+nethermost
+netherworld/9
+Netscape/6
+net/7
+Netta/6
+Nettie/6
+Netti/6
+netting/6
+nett/187
+Nettle/6
+nettle/26
+nettlesome
+Netty/6
+network/171
+Netzahualcoyotl/6
+Neumann/6
+neuralgia/7
+neuralgic
+neural/19
+neurasthenia/7
+neurasthenic/9
+neuritic/9
+neuritides
+neuritis/6
+neuroanatomy
+neurobiology/6
+neurological/19
+neurologist/7
+neurology/7
+neuromuscular
+neuronal
+neurone/9
+neuron/7
+neuropathology/6
+neurophysiology/6
+neuropsychiatric
+neuroses
+neurosis/6
+neurosurgeon/7
+neurosurgery/7
+neurotically
+neurotic/9
+neurotransmitter/9
+neuter/245
+neutralise's
+neutralism/7
+neutralist/9
+neutrality/7
+neutralization/7
+neutralized/12
+neutralize/23
+neutral/46
+neutrino/7
+neutron/7
+neut/90
+Nevada/6
+Nevadan/9
+Nevadian/9
+Neva/6
+never
+nevermore
+nevertheless
+nevi
+Nevile/6
+Neville/6
+Nevil/6
+Nevin/7
+Nevis/6
+Nev/6
+Nevsa/6
+Nevsky/6
+nevus/6
+Newark/6
+newbie/9
+newborn/9
+Newbury/6
+Newburyport/6
+Newcastle/6
+newcomer/7
+newed/14
+Newell/6
+newel/7
+newer/14
+newfangled
+newfound
+newfoundland
+Newfoundlander/6
+Newfoundland/96
+newish
+newline/7
+newlywed/7
+Newman/6
+newness/7
+Newport/6
+news/14
+newsagent/7
+newsboy/7
+newscaster/6
+newscasting/6
+newscast/373
+newsdealer/7
+newsed
+newses
+newsflash/9
+newsgirl/9
+newsgroup/7
+newsing
+newsletter/7
+NeWS/6
+newsman/6
+newsmen
+newspaperman/6
+newspapermen
+newspaper/26
+newspaperwoman/6
+newspaperwomen
+newsprint/7
+new/77
+newsreader/7
+newsreel/7
+newsroom/9
+news's
+newsstand/7
+Newsweekly/6
+newsweekly/9
+Newsweek/86
+newswire
+newswoman/6
+newswomen
+newsworthiness/7
+newsworthy/98
+newsy/228
+newt/7
+Newtonian
+Newton/6
+newton/7
+Nexis/6
+next
+nexus/7
+Neysa/6
+NF
+NFC
+NFL
+NFS
+Ngaliema/6
+Nguyen/6
+NH
+NHL
+niacin/7
+Niagara/6
+Niall/6
+Nial/6
+Niamey/6
+nibbed
+nibbing
+nibbler/6
+nibble/23
+Nibelung/6
+nib/7
+Nicaean
+Nicaragua/6
+Nicaraguan/9
+Niccolo/6
+Nice/6
+Nicene
+niceness/7
+nicety/7
+nice/33
+niche/26
+Nicholas
+Nichole/6
+Nicholle/6
+Nichol/7
+Nicholson/6
+nichrome
+nickelodeon/7
+nickel/26
+nicker/47
+Nickey/6
+nick/49
+Nickie/6
+Nicki/6
+Nicklaus/6
+Nick/6
+nicknack's
+nickname/111
+nicknamer/6
+Nickolai/6
+Nickola/7
+Nickolaus/6
+Nicko/6
+Nicky/6
+Nicobar/6
+Nicodemus/6
+Nicolai/7
+Nicola/7
+Nicolea/6
+Nicole/6
+Nicolette/6
+Nicoli/7
+Nicolina/6
+Nicoline/6
+Nicolle/6
+Nicol/6
+Nico/6
+Nicosia/6
+nicotine/7
+Niebuhr/6
+niece/7
+Niel/7
+Nielsen/6
+Niels/122
+Nielson/6
+Nietzsche/6
+Nieves/6
+nifty/228
+Nigel/6
+Nigeria/6
+Nigerian/9
+Nigerien
+Niger/6
+niggardliness/7
+niggardly/42
+niggard/116
+nigger/366
+niggler/6
+niggle/179
+niggling/19
+nigh/624
+nighs
+nightcap/7
+nightclothes
+nightclubbed
+nightclubbing
+nightclub/7
+nightdress/7
+nightfall/7
+nightgown/7
+nighthawk/7
+nightie/7
+Nightingale/6
+nightingale/7
+nightlife/7
+nightlong
+nightmare/7
+nightmarish/19
+nightshade/7
+nightshirt/7
+night/642
+nightspot/7
+nightstand/7
+nightstick/9
+nighttime/9
+nightwear/6
+nighty's
+NIH
+nihilism/7
+nihilistic
+nihilist/7
+Nijinsky/6
+Nikaniki/6
+Nike/6
+Niki/6
+Nikita/6
+Nikkie/6
+Nikki/6
+Nikko/6
+Nikolai/6
+Nikola/7
+Nikolaos/6
+Nikolaus/6
+Nikolayev's
+Nikoletta/6
+Nikolia/6
+Nikolos/6
+Niko/7
+Nikon/6
+Nile/7
+nilled
+nilling
+Nil/7
+nil/65
+nilpotent
+Nilsen/6
+Nils/122
+Nilson/6
+Nilsson/6
+Ni/6
+nimbi
+nimbleness/7
+nimble/98
+nimbly
+nimbus/170
+NIMBY
+Nimitz/6
+Nimrod/7
+Nina/6
+nincompoop/7
+ninefold
+nine/7
+ninepence/6
+ninepin/9
+ninepins/6
+nineteen/216
+nineteenths
+ninetieths
+Ninetta/6
+Ninette/6
+ninety/216
+Nineveh/6
+ninja/9
+Ninnetta/6
+Ninnette/6
+ninny/7
+Ninon/6
+Nintendo/6
+ninth
+ninths
+Niobe/6
+niobium/7
+nipped
+nipper/26
+nippiness/9
+nipping/19
+nipple/26
+Nipponese
+Nippon/6
+nippy/98
+nip/9
+Nirenberg/6
+nirvana/7
+Nirvana/9
+nisei
+Nisei/7
+Nissa/6
+Nissan/6
+Nisse/6
+Nissie/6
+Nissy/6
+Nita/6
+niter/6
+nitpick/179
+nitrate/269
+nitration/6
+nitric
+nitride/131
+nitriding/6
+nitrification/7
+nitrite/7
+nitrocellulose/7
+nitrogenous
+nitrogen/7
+nitroglycerin/7
+nitrous
+nitwit/7
+nit/96
+Niven/6
+nixer/6
+nix/31
+Nixie/6
+Nixon/6
+NJ
+Nkrumah/6
+NLRB
+nm
+NM
+no/14
+NOAA
+Noach/6
+Noah/6
+Noak/6
+Noami/6
+Noam/6
+Nobelist/7
+nobelium/7
+Nobel/6
+Nobe/6
+Nobie/6
+nobility/7
+Noble/6
+nobleman/6
+noblemen
+nobleness/7
+noblesse/6
+noble/177
+noblewoman
+noblewomen
+nob/86
+nobody/7
+Noby/6
+nocturnal/16
+nocturne/7
+nodal/19
+nodded
+nodding
+noddle/26
+noddy/6
+node/7
+NoDoz/6
+nod/7
+nodular
+nodule/7
+Noelani/6
+Noella/6
+Noelle/6
+Noell/6
+Noellyn/6
+Noel/7
+noel/9
+Noelyn/6
+Noe/6
+Noemi/6
+noes/9
+noggin/7
+nohow
+noise/26
+noiselessness/7
+noiseless/28
+noisemaker/6
+noisemake/174
+noisily
+noisiness/7
+noisome
+noisy/98
+Nola/6
+Nolana/6
+Noland/6
+Nolan/6
+Nolie/6
+Nollie/6
+Noll/6
+Nolly/6
+No/6
+nomadic
+nomad/7
+Nome/6
+nomenclature/7
+Nomi/6
+nominalized
+nominal/370
+nominally
+nominals
+nominate/103
+nomination/104
+nominative/16
+nominator/186
+nominee/7
+non
+nonabrasive
+nonabsorbent/9
+nonacademic/9
+nonacceptance/7
+nonacid/7
+nonactive
+nonadaptive
+nonaddictive
+nonadhesive
+nonadjacent
+nonadjustable
+nonadministrative
+nonage/7
+nonagenarian/7
+nonaggression/7
+nonagricultural
+Nonah/6
+nonalcoholic/9
+nonaligned
+nonalignment/7
+nonallergic
+Nona/6
+nonappearance/7
+nonassignable
+nonathletic
+nonattendance/7
+nonautomotive
+nonavailability/7
+nonbasic
+nonbeliever/7
+nonbelligerent/9
+nonblocking
+nonbreakable
+nonburnable
+nonbusiness
+noncaloric
+noncancerous
+noncarbohydrate/6
+nonce/7
+nonchalance/7
+nonchalant/28
+nonchargeable
+nonclerical/9
+nonclinical
+noncollectable
+noncombatant/7
+noncombustible/9
+noncommercial/9
+noncommissioned
+noncommittal/19
+noncom/7
+noncommunicable
+noncompeting
+noncompetitive
+noncompliance/7
+noncomplying/9
+noncomprehending
+nonconducting
+nonconductor/7
+nonconforming
+nonconformist/7
+nonconformity/7
+nonconsecutive
+nonconservative
+nonconstructive
+noncontagious
+noncontiguous
+noncontinuous
+noncontributing
+noncontributory
+noncontroversial
+nonconvertible
+noncooperation/7
+noncorroding/9
+noncorrosive
+noncredit
+noncriminal/9
+noncritical
+noncrystalline
+noncumulative
+noncustodial
+noncyclic
+nondairy
+nondecreasing
+nondeductible
+nondelivery/7
+nondemocratic
+nondenominational
+nondepartmental
+nondepreciating
+nondescript/16
+nondestructive/19
+nondetachable
+nondeterminacy
+nondeterminate/19
+nondeterminism
+nondeterministic
+nondeterministically
+nondisciplinary
+nondisclosure/7
+nondiscrimination/7
+nondiscriminatory
+nondramatic
+nondrinker/7
+nondrying
+nondurable
+noneconomic
+noneducational
+noneffective/9
+nonelastic
+nonelectrical
+nonelectric/9
+nonemergency
+nonempty
+nonenforceable
+nonentity/7
+nonequivalence/6
+nonequivalent/9
+none/9
+nones/6
+nonessential/9
+nonesuch/7
+nonetheless
+nonevent/7
+nonexchangeable
+nonexclusive
+nonexempt
+nonexistence/7
+nonexistent
+nonexplosive/9
+nonextensible
+nonfactual
+nonfading
+nonfat
+nonfatal
+nonfattening
+nonferrous
+nonfictional
+nonfiction/7
+nonflammable
+nonflowering
+nonfluctuating
+nonflying
+nonfood/6
+nonfreezing
+nonfunctional
+nongovernmental
+nongranular
+nonhazardous
+nonhereditary
+nonhuman
+nonidentical
+Nonie/6
+Noni/6
+noninclusive
+nonindependent
+nonindustrial
+noninfectious
+noninflammatory
+noninflationary
+noninflected
+nonintellectual/9
+noninteracting
+noninterchangeable
+noninterference/7
+nonintervention/7
+nonintoxicating
+nonintuitive
+noninvasive
+nonionic
+nonirritating
+nonjudgmental
+nonjudicial
+nonlegal
+nonlethal
+nonlinearity/7
+nonlinear/19
+nonlinguistic
+nonliterary
+nonliving
+nonlocal
+nonmagical
+nonmagnetic
+nonmalignant
+nonmember/7
+nonmetallic
+nonmetal/7
+nonmigratory
+nonmilitant/9
+nonmilitary
+Nonnah/6
+Nonna/6
+nonnarcotic/9
+nonnative/9
+nonnegative
+nonnegotiable
+nonnuclear
+nonnumerical/9
+nonobjective
+nonobligatory
+nonobservance/7
+nonobservant
+nonoccupational
+nonoccurence
+nonofficial
+nonogenarian
+nonoperational
+nonoperative
+nonorthogonal
+nonorthogonality
+nonparallel/9
+nonparametric
+nonpareil/7
+nonparticipant/7
+nonparticipating
+nonpartisan/9
+nonpaying
+nonpayment/7
+nonperformance/7
+nonperforming
+nonperishable/9
+nonperson/9
+nonperturbing
+nonphysical/19
+nonplus/9
+nonplussed
+nonplussing
+nonpoisonous
+nonpolitical
+nonpolluting
+nonporous
+nonpracticing
+nonprejudicial
+nonprescription
+nonprocedural/19
+nonproductive
+nonprofessional/9
+nonprofit/141
+nonprogrammable
+nonprogrammer
+nonproliferation/7
+nonpublic
+nonpunishable
+nonracial
+nonradioactive
+nonrandom
+nonreactive
+nonreciprocal/9
+nonreciprocating
+nonrecognition/7
+nonrecoverable
+nonrecurring
+nonredeemable
+nonreducing
+nonrefillable
+nonrefundable
+nonreligious
+nonrenewable
+nonrepresentational
+nonresidential
+nonresident/7
+nonresidual
+nonresistance/7
+nonresistant/9
+nonrespondent/9
+nonresponse
+nonrestrictive
+nonreturnable/9
+nonrhythmic
+nonrigid
+nonsalaried
+nonscheduled
+nonscientific
+nonscoring
+nonseasonal
+nonsectarian
+nonsecular
+nonsegregated
+nonsense/7
+nonsensicalness/6
+nonsensical/28
+nonsensitive
+nonsexist
+nonsexual
+nonsingular
+nonskid
+nonslip
+nonsmoker/7
+nonsmoking
+nonsocial
+nonspeaking
+nonspecialist/7
+nonspecializing
+nonspecific
+nonspiritual/9
+nonstaining
+nonstandard
+nonstarter/7
+nonstick
+nonstop
+nonstrategic
+nonstriking
+nonstructural
+nonsuccessive
+nonsupervisory
+nonsupport/166
+nonsurgical
+nonsustaining
+nonsympathizer/6
+nontarnishable
+nontaxable/9
+nontechnical/19
+nontenured
+nonterminal/7
+nonterminating
+nontermination/6
+nontheatrical
+nonthinking/9
+nonthreatening
+nontoxic
+nontraditional
+nontransferable
+nontransparent
+nontrivial
+nontropical
+nonuniform
+nonunion/9
+nonuser/7
+nonvenomous
+nonverbal/19
+nonveteran/7
+nonviable
+nonviolence/7
+nonviolent/19
+nonvirulent
+nonvocal
+nonvocational
+nonvolatile
+nonvolunteer/9
+nonvoter/7
+nonvoting
+nonwhite/7
+nonworking
+nonyielding
+nonzero
+noodle/26
+nook/7
+noonday/7
+noon/26
+nooning/6
+noontide/7
+noontime/7
+noose/26
+nope/9
+NORAD/6
+noradrenalin
+noradrenaline/6
+Norah/6
+Nora/6
+Norbert/6
+Norberto/6
+Norbie/6
+Norby/6
+Nordhoff/6
+Nordic/9
+Nordstrom/6
+Norean/6
+Noreen/6
+Norene/6
+Norfolk/6
+nor/540
+Norina/6
+Norine/6
+normalcy/7
+normality/7
+normalization/14
+normalizations
+normalization's
+normalized/13
+normalizes/13
+normalize/67
+normal/16
+Norma/6
+Normand/6
+Normandy/6
+Norman/7
+normativeness/6
+normative/28
+Normie/6
+norm/26
+Normy/6
+Norplant
+Norrie/6
+Norri/7
+Norristown/6
+Norry/6
+Norse
+Norseman/6
+Norsemen
+Northampton/6
+northbound
+northeastern
+northeaster/86
+Northeast/7
+northeastward/9
+northeast/96
+northerly/9
+norther/86
+Northerner/6
+northernmost
+northern/643
+Northfield/6
+northing/6
+northland
+North/6
+northmen
+north/644
+Northrop/6
+Northrup/6
+norths
+Norths
+Northumberland/6
+northward/9
+northwestern
+northwester/86
+northwest/96
+Northwest/7
+northwestward/9
+Norton/6
+Norwalk/6
+Norway/6
+Norwegian/9
+Norwich/6
+Norw/6
+nosebag/6
+nosebleed/7
+nosecone/9
+nosedive/17
+nosed/130
+nosegay/7
+nose/6
+Nosferatu/6
+nos/17
+nosh/26
+nosily
+nosiness/7
+nosing/6
+nostalgia/7
+nostalgically
+nostalgic/9
+Nostradamus/6
+Nostrand/6
+nostril/7
+nostrum/7
+nosy/225
+notability/7
+notableness/6
+notable/144
+notably
+notarial
+notarization/9
+notarize/17
+notary/7
+notate/24
+notational/645
+notation/484
+notative/525
+notch/26
+not/428
+notebook/7
+note/646
+notedness/6
+noted/28
+notepad/9
+notepaper/7
+note's
+noteworthiness/7
+noteworthy/42
+nothingness/7
+nothing/144
+noticeable/12
+noticeably
+noticeboard/9
+noticed/12
+notice/26
+notifiable
+notification/6
+notifier/6
+notify/115
+notional/19
+notion/7
+notoriety/9
+notoriousness/6
+notorious/28
+Notre/6
+Nottingham/6
+notwithstanding
+Nouakchott/6
+nougat/7
+Noumea/6
+noun/341
+nourish/8
+nourished/12
+nourisher/6
+nourishment/7
+nous/6
+nouveau
+nouvelle
+novae
+Novak/6
+Nova/6
+nova/7
+novelette/7
+Novelia/6
+novelist/7
+novelization/9
+novelize/17
+Novell/7
+novella/7
+novel/7
+novelty/7
+November/7
+novena/7
+novene
+Novgorod/6
+novice/7
+novitiate/7
+Nov/6
+Novocaine/6
+Novocain/9
+Novokuznetsk/6
+Novosibirsk/6
+NOW
+nowadays
+noway/9
+Nowell/6
+nowhere/9
+nowise
+now/9
+noxiousness/6
+noxious/28
+Noyce/6
+Noyes/6
+nozzle/7
+Np
+NP
+NRA
+nroff/6
+N's
+NS
+n's/443
+NSF
+n/357
+NT
+nth
+nuance/56
+nubbin/7
+nubby/54
+Nubia/6
+Nubian/6
+nubile
+nub/7
+nuclear/370
+nuclease/6
+nucleated/14
+nucleate/15
+nucleation/6
+nucleic
+nuclei/6
+nucleoli
+nucleolus/6
+nucleon/7
+nucleotide/7
+nucleus/6
+nuclide/6
+nude/647
+nudely
+nudeness/6
+nudest
+nudge/31
+nudger/6
+nudism/7
+nudist/7
+nudity/7
+nugatory
+Nugent/6
+nugget/7
+nuisance/7
+nuke/26
+Nukualofa
+null/17
+nullification/6
+nullifier/6
+nullify/115
+nullity/7
+nu/6
+numbered/13
+numberer/6
+numberless
+numberplate/6
+number/648
+numbers/14
+Numbers/6
+numbing/19
+numbness/7
+numb/100
+numbskull's
+numerable/443
+numeracy/230
+numeral/65
+numerate/15
+numerates/45
+numeration/6
+numerator/7
+numerical/19
+numeric/9
+numerological
+numerologist/9
+numerology/7
+numerousness/6
+numerous/28
+numinous/9
+numismatic/9
+numismatics/6
+numismatist/7
+numskull/7
+Nunavut/6
+nuncio/7
+Nunez/6
+Nunki/6
+nun/7
+nunnery/7
+nuptial/9
+Nuremberg/6
+Nureyev/6
+nursemaid/7
+nurser/6
+nurseryman/6
+nurserymen
+nursery/7
+nurse/91
+nursling/6
+nurturer/6
+nurture/49
+nus
+nutate/55
+nutation/6
+nutcracker/6
+nutcrack/90
+nuthatch/7
+nutmeat/7
+nutmegged
+nutmegging
+nutmeg/7
+nut/7
+nutpick/7
+Nutrasweet/6
+nutria/7
+nutrient/7
+nutriment/7
+nutritional/19
+nutritionist/7
+nutrition/7
+nutritiousness/7
+nutritious/28
+nutritive/19
+nutshell/7
+nutted
+nuttiness/7
+nutting
+nutty/98
+nuzzle/23
+NV
+NW
+NWT
+NY
+Nyasa/6
+NYC
+Nydia/6
+Nye/6
+Nyerere/6
+nylon/7
+nymphet/7
+nymph/6
+nympholepsy/6
+nymphomaniac/9
+nymphomania/7
+nymphs
+Nyquist/6
+NYSE
+Nyssa/6
+NZ
+o
+O
+oafishness/9
+oafish/28
+oaf/7
+Oahu/6
+Oakland/6
+Oakley/6
+Oakmont/6
+oak/125
+oakum/7
+oakwood
+oar/26
+oarlock/7
+oarsman/6
+oarsmen
+oarswoman
+oarswomen
+OAS
+oases
+oasis/6
+oatcake/7
+oater/6
+Oates/6
+oath/6
+oaths
+oatmeal/7
+oat/197
+Oaxaca/6
+ob
+OB
+Obadiah/6
+Obadias/6
+obbligato/9
+obduracy/9
+obdurateness/9
+obdurate/22
+Obediah/6
+obedience/85
+obedient/75
+Obed/6
+obeisance/7
+obeisant/19
+obelisk/7
+Oberlin/6
+Oberon/6
+obese
+obesity/7
+obey/137
+obeyer/82
+obfuscate/294
+obfuscation/6
+obfuscatory
+Obidiah/6
+Obie/6
+obi/26
+obit/175
+obituary/7
+obj
+objectify/15
+objectionableness/6
+objectionable/12
+objectionably
+objection/465
+objectiveness/7
+objective/46
+objectivity/7
+objector/7
+object/163
+objurgate/15
+objurgation/6
+oblate/649
+oblation/6
+obligate/215
+obligational
+obligation/6
+obligatorily
+obligatory
+obliged/25
+obliger/6
+obliges/25
+oblige/31
+obligingness/6
+obliging/28
+oblique/22
+obliqueness/9
+obliquity/7
+obliterate/24
+obliteration/6
+obliterative/19
+oblivion/7
+obliviousness/7
+oblivious/28
+oblongness/6
+oblong/46
+obloquies
+obloquy/6
+Ob/170
+obnoxiousness/7
+obnoxious/28
+oboe/7
+oboist/9
+obos
+O'Brien/6
+obs
+obscene/93
+obscenity/7
+obscurantism/7
+obscurantist/7
+obscuration
+obscureness/6
+obscure/650
+obscurity/7
+obsequies
+obsequiousness/9
+obsequious/28
+obsequy
+observability/6
+observable/302
+observably
+observance/7
+observantly
+observants
+observant/12
+observational/19
+observation/7
+observatory/7
+observed/12
+observer/6
+observe/67
+observing/19
+obsess/64
+obsessional
+obsession/7
+obsessiveness/9
+obsessive/46
+obsidian/7
+obsolesce/17
+obsolescence/9
+obsolescent/19
+obsolete/22
+obsoleteness/6
+obstacle/7
+obstetrical
+obstetrician/7
+obstetric/9
+obstetrics/6
+obstinacy/7
+obstinateness/6
+obstinate/28
+obstreperousness/7
+obstreperous/28
+obstructed/12
+obstructer/6
+obstructionism/7
+obstructionist/7
+obstruction/7
+obstructiveness/7
+obstructive/46
+obstruct/29
+obtainable/12
+obtainably
+obtain/113
+obtainment/9
+obtrude/31
+obtruder/6
+obtrusion/9
+obtrusiveness/41
+obtrusive/161
+obtuseness/9
+obtuse/33
+obverse/16
+obviate/15
+obviousness/7
+obvious/28
+Oby/6
+ocarina/7
+O'Casey
+Occam/6
+occasional/19
+occasion/171
+Occidental/9
+occidental/16
+occident/6
+Occident/7
+occipital/19
+occlude/17
+occlusion/7
+occlusive/9
+occulter/6
+occultism/7
+occult/34
+occupancy/7
+occupant/7
+occupational/19
+occupation/48
+occupied/13
+occupier/6
+occupies/14
+occupy/23
+occur/63
+occurred/14
+occurrence/7
+occurring/14
+oceanfront/7
+oceangoing
+Oceania/6
+oceanic
+ocean/7
+oceanographer/7
+oceanographic
+oceanography/7
+oceanology/7
+oceanside
+Oceanside/6
+Oceanus/6
+ocelot/7
+ocher/26
+Ochoa/6
+o'clock
+O'Clock
+O'Connell/6
+O'Connor/6
+Oconomowoc/6
+OCR
+octagonal/19
+octagon/7
+octahedral
+octahedron/6
+octal/9
+octane/7
+octant/6
+octave/7
+Octavia/6
+Octavian/6
+Octavio/6
+Octavius/6
+octavo/7
+octennial
+octet/7
+octile
+octillion/6
+Oct/6
+October/7
+octogenarian/7
+octopus/7
+octoroon/6
+ocular/9
+oculist/7
+OD
+odalisque/7
+oddball/7
+oddity/7
+oddment/7
+oddness/7
+odd/651
+Odele/6
+Odelia/6
+Odelinda/6
+Odella/6
+Odelle/6
+Odell/6
+O'Dell/6
+ode/286
+Ode/114
+Oderberg/7
+Oder/6
+Odessa/6
+Odets/6
+Odetta/6
+Odette/6
+Odey/6
+Odie/6
+Odilia/6
+Odille/6
+Odin/6
+odiousness/7
+odious/28
+Odis/6
+odium/7
+Odo/6
+odometer/7
+Odom/6
+O'Donnell/6
+odor/56
+odoriferous
+odorless
+odorous/28
+ODs
+O'Dwyer/6
+Ody/6
+Odysseus/6
+Odyssey/6
+odyssey/9
+OE
+OED
+oedipal
+Oedipal/19
+Oedipus/6
+OEM/6
+OEMS
+oenology/7
+oenophile/9
+o'er
+O'Er
+Oersted/6
+oesophagi
+oeuvre/7
+Ofelia/6
+Ofella/6
+offal/7
+offbeat/7
+offcuts
+Offenbach/6
+offender/6
+offend/23
+offense/76
+offensively/45
+offensiveness/43
+offensive/46
+offerer/6
+offering/6
+offer/245
+offertory/7
+offhand/81
+offhandedness/9
+offhanded/28
+officeholder/7
+officemate/9
+officer/165
+officership/9
+office/96
+officialdom/7
+officialism/7
+officially/12
+official/32
+officiant/7
+officiate/15
+officiation/6
+officiator/7
+officio
+officiousness/7
+officious/28
+offing/6
+offish
+offload/17
+offprint/26
+offramp
+offset/7
+offsetting
+offshoot/7
+offshore
+offside/208
+offspring/6
+offstage/9
+off/179
+offtrack
+Ofilia/6
+of/370
+often/54
+oftentimes
+oft/652
+ofttimes
+Ogbomosho/6
+Ogdan/6
+Ogden/6
+Ogdon/6
+Ogilvy/6
+ogive/6
+Oglethorpe/6
+ogle/23
+ogreish
+ogre/7
+ogress/9
+oh
+OH
+O'Hara
+O'Hare/6
+O'Higgins
+Ohioan/9
+Ohio/6
+ohmic
+ohmmeter/7
+ohm/7
+oho/9
+ohs
+OHSA/6
+oilcloth/6
+oilcloths
+oiler/6
+oilfield/7
+oiliness/7
+oilman/6
+oil/49
+oilmen
+oilseed/7
+oilskin/7
+oily/98
+oink/17
+ointment/7
+Oise/6
+OJ
+Ojibwa/7
+Okamoto/6
+okapi/7
+Okayama/6
+okay/6
+Okeechobee/6
+O'Keeffe
+Okefenokee
+Okhotsk/6
+Okinawa/6
+Okinawan/9
+Oklahoma/6
+Oklahoman/7
+Okla/6
+OK/165
+okra/7
+OKs
+Oktoberfest
+Olaf/6
+Olag/6
+Ola/6
+Olav/6
+Oldenburg/6
+olden/47
+Oldfield/6
+oldie/7
+oldish
+oldness/9
+Oldsmobile/6
+oldster/7
+Olduvai/6
+old/653
+ol�
+oleaginous
+oleander/7
+O'Leary/6
+olefin/6
+Oleg/6
+Ole/303
+Olenek/6
+Olenka/6
+Olen/6
+Olenolin/6
+oleomargarine/7
+oleo/9
+oles
+olfactory
+Olga/6
+Olia/6
+oligarchic
+oligarchical
+oligarch/6
+oligarchs
+oligarchy/7
+Oligocene
+oligopolistic
+oligopoly/7
+Olimpia/6
+Olin/6
+olive/175
+Olive/231
+Oliver/6
+Olivero/6
+Olivette/6
+Olivetti/6
+Olivia/6
+Olivier/6
+Olivie/114
+Oliviero/6
+Oliy/6
+Ollie/6
+Olly/6
+Olmec
+Olmsted/6
+Olsen/6
+Olson/6
+Olva/6
+Olvan/6
+Olwen/6
+Olympe/6
+Olympiad/7
+Olympian/9
+Olympia/7
+Olympic/9
+Olympie/6
+Olympus/6
+Omaha/7
+Oman/6
+Omar/6
+ombudsman/6
+ombudsmen
+Omdurman/6
+omega/7
+omelet/7
+omelette's
+omen/165
+Omero/6
+omicron/7
+ominousness/7
+ominous/28
+omission/7
+omit/9
+omitted
+omitting
+omnibus/7
+omni/6
+omnipotence/7
+Omnipotent
+omnipotent/16
+omnipresence/7
+omnipresent/19
+omniscience/7
+omniscient/16
+omnivore/7
+omnivorousness/7
+omnivorous/28
+oms
+Omsk/6
+om/107
+ON
+onanism/6
+Onassis/6
+oncer/6
+once/208
+oncogene/9
+oncologist/9
+oncology/7
+oncoming/9
+Ondrea/6
+Oneal/6
+Onega/6
+Onegin/6
+Oneida/7
+O'Neil
+O'Neill
+oneness/7
+one/654
+oner/6
+onerousness/7
+onerous/28
+oneself
+onetime
+oneupmanship
+Onfre/6
+Onfroi/6
+ongoing/9
+Onida/6
+onion/165
+onionskin/7
+online
+onlooker/7
+onlooking
+only/567
+Onofredo/6
+Ono/6
+onomatopoeia/7
+onomatopoeic
+onomatopoetic
+Onondaga/7
+onrush/131
+on/655
+ons
+Onsager/6
+onset/7
+onsetting
+onshore
+onside
+onslaught/7
+Ontarian/9
+Ontario/6
+Ont/6
+onto
+ontogeny/7
+ontological/19
+ontology/7
+onus/7
+onward/9
+onyx/7
+oodles
+ooh/47
+oohs
+oolitic
+Oona/6
+OOo/6
+oops/9
+Oort/6
+ooze/17
+oozy/54
+opacity/7
+opalescence/9
+opalescent/19
+Opalina/6
+Opaline/6
+Opal/6
+opal/7
+opaque/77
+opaqueness/7
+opcode/7
+OPEC
+Opel/6
+opencast
+opened/13
+opener/6
+openhandedness/7
+openhanded/42
+openhearted
+opening/6
+openness/9
+OpenOffice.org/6
+opens/14
+openwork/7
+open/656
+operable/45
+operandi
+operand/7
+operant/16
+opera/7
+operate/24
+operatically
+operatic/9
+operationalization/9
+operationalize/81
+operational/19
+operation/6
+operative/261
+operatively
+operativeness/123
+operatives
+operator/7
+operetta/7
+ope/9
+Ophelia/6
+Ophelie/6
+Ophiuchus/6
+ophthalmic/9
+ophthalmologic
+ophthalmologist/7
+ophthalmology/7
+opiate/26
+opine/15
+opinionatedness/6
+opinionated/28
+opinion/6
+opioid
+opium/7
+opossum/7
+opp
+Oppenheimer/6
+opponent/7
+opportune/51
+opportunism/7
+opportunistic
+opportunistically
+opportunist/7
+opportunity/7
+oppose/318
+opposed/12
+opposer/6
+oppositeness/6
+opposite/649
+oppositional
+opposition/6
+oppress/64
+oppression/7
+oppressiveness/7
+oppressive/28
+oppressor/7
+opprobrious/19
+opprobrium/7
+Oprah/6
+ops
+opt/17
+optical/19
+optician/7
+optic/9
+optics/6
+optima
+optimality
+optimal/19
+optimise's
+optimism/7
+optimistic
+optimistically
+optimist/7
+optimization/7
+optimize/23
+optimized/12
+optimizer/6
+optimizes/12
+optimum/7
+optionality/6
+optional/16
+option/26
+optoelectronic
+optometric
+optometrist/7
+optometry/7
+opulence/7
+opulent/19
+opus/7
+op/657
+OR
+oracle/26
+oracular
+Oralee/6
+Oralia/6
+Oralie/6
+Oralla/6
+Oralle/6
+oral/16
+Ora/6
+orangeade/7
+Orange/6
+orange/7
+orangery/7
+orangutan/7
+Oranjestad/6
+Oran/6
+orate/15
+oration/6
+oratorical/19
+oratorio/7
+orator/7
+oratory/7
+Orazio/6
+Orbadiah/6
+orbicular
+orbiculares
+orbital/65
+orbit/49
+orb/26
+orchard/7
+orchestral/19
+orchestra/7
+orchestrate/15
+orchestrater's
+orchestration/6
+orchestrator/6
+orchid/7
+ordainer/6
+ordainment/7
+ordain/8
+ordeal/7
+order/127
+ordered/12
+orderer
+ordering/9
+orderless
+orderliness/314
+orderly/144
+order's/25
+ordinal/9
+ordinance/7
+ordinarily
+ordinariness/9
+ordinary/177
+ordinated
+ordinate/45
+ordinates
+ordinate's
+ordinating
+ordination/7
+ordnance/7
+Ordovician
+ordure/7
+oregano/7
+Oreg/6
+Oregonian/9
+Oregon/6
+Orelee/6
+Orelia/6
+Orelie/6
+Orella/6
+Orelle/6
+Orel/6
+Oren/6
+Ore/72
+ore/125
+Oreo
+Orestes
+organdie's
+organdy/7
+organelle/7
+organically/45
+organic/9
+organismic
+organism/7
+organist/7
+organizable/41
+organizational/65
+organization/128
+organize/119
+organized/147
+organizer/118
+organizes/25
+organizing/25
+organ/7
+organometallic
+organza/7
+orgasm/26
+orgasmic
+orgiastic
+orgy/7
+Oriana/6
+oriel/7
+orientable
+Oriental/9
+oriental/16
+orientated/14
+orientate/87
+orientates/14
+orientation/128
+orienteering/6
+orienter
+orient/127
+orient's
+Orient/7
+orifice/7
+orig
+origami/7
+originality/7
+originally
+original/302
+originate/24
+origination/6
+originative/19
+originator/7
+origin/7
+Orin/6
+Orinoco/6
+oriole/7
+Orion/6
+orison/7
+Oriya/6
+Orizaba/6
+Orkney/6
+Orland/6
+Orlando/6
+Orlan/6
+Orleans
+Orlick/6
+Orlon/7
+Orly/6
+ormolu/7
+or/86
+ornamental/16
+ornamentation/7
+ornament/26
+ornateness/7
+ornate/28
+orneriness/7
+ornery/98
+ornithological
+ornithologist/7
+ornithology/7
+orographic/6
+orography/6
+Orono/6
+orotund
+orotundity/7
+orphanage/7
+orphanhood/6
+orphan/26
+Orpheus/6
+Orphic
+Orran/6
+Orren/6
+Orrin/6
+orris/7
+Orr/72
+ors
+Orsa/6
+Orsola/6
+Orson/6
+Ortega/6
+Ortensia/6
+orthodontia/9
+orthodontic/9
+orthodontics/6
+orthodontist/7
+orthodoxies
+orthodoxly/12
+Orthodox/9
+orthodoxy's
+orthodox/16
+orthodoxy/12
+orthogonality/6
+orthogonalization/6
+orthogonalized
+orthogonal/19
+orthographic
+orthographically
+orthography/7
+orthonormal
+orthopedic/9
+orthopedics/6
+orthopedist/7
+orthophosphate/7
+orthorhombic
+Ortiz/6
+Orton/6
+Orval/6
+Orville/6
+Orv/6
+Orwellian
+Orwell/6
+o's
+Osage/7
+Osaka/6
+Osbert/6
+Osborne/6
+Osborn/6
+Osbourne/6
+Osbourn/6
+Oscar/7
+Osceola/6
+oscillate/15
+oscillation/6
+oscillator/7
+oscillatory
+oscilloscope/7
+osculate/15
+osculation/6
+Osgood/6
+OSHA
+Oshawa/6
+O'Shea/6
+Oshkosh/6
+osier/7
+Osiris/6
+Oslo/6
+Os/6
+OS/6
+Osman/6
+osmium/7
+Osmond/6
+osmoses
+osmosis/6
+osmotic
+Osmund/6
+osprey/7
+osseous/19
+Ossie/6
+ossification/6
+ossify/15
+ostensible
+ostensibly
+ostentation/7
+ostentatiousness/6
+ostentatious/28
+osteoarthritides
+osteoarthritis/6
+osteology/6
+osteopathic
+osteopath/6
+osteopaths
+osteopathy/7
+osteoporoses
+osteoporosis/6
+ostracise's
+ostracism/7
+ostracize/17
+Ostrander/6
+ostrich/7
+Ostrogoth/6
+Ostwald/6
+O'Sullivan/6
+Osvaldo/6
+Oswald/6
+Oswell/6
+OT
+OTB
+OTC
+Otes
+Otha/6
+Othelia/6
+Othella/6
+Othello/6
+otherness/6
+other/444
+otherwise
+otherworldly/42
+otherworld/19
+Othilia/6
+Othilie/6
+Otho/6
+otiose
+Otis/6
+OTOH
+Ottawa/7
+otter/26
+Ottilie/6
+Otto/6
+Ottoman
+ottoman/7
+Ouagadougou/6
+oubliette/7
+ouch/17
+oughtn't
+ought/17
+Ouija/7
+ounce/7
+our/9
+ourself
+ourselves
+ouster/6
+oust/23
+outage/7
+outargue/17
+outback/175
+outbalance/17
+outbidding
+outbid/9
+outboard/9
+outboast/17
+outbound/9
+outbreak/131
+outbroke
+outbroken
+outbuilding/7
+outburst/131
+outcast/131
+outclass/17
+outcome/7
+outcropped
+outcropping/9
+outcrop/7
+outcry/26
+outdated/42
+outdid
+outdistance/17
+outdoes
+outdo/224
+outdone
+outdoor/9
+outdoorsy
+outdraw/166
+outdrawn
+outdrew
+outermost
+outerwear/6
+outface/17
+outfall/7
+outfielder/6
+outfield/96
+outfight/166
+outfit/7
+outfitted
+outfitter/7
+outfitting
+outflank/17
+outflow/26
+outfought
+outfox/17
+outgeneraled
+outgoes
+outgo/301
+outgoing/42
+outgrew
+outgrip
+outgrow/658
+outgrown
+outgrowth/6
+outgrowths
+outguess/17
+outhit/9
+outhitting
+outhouse/7
+outing/6
+outlaid
+outlander/6
+outlandishness/7
+outlandish/28
+outland/90
+outlast/17
+outlawry/6
+outlaw/26
+outlay/131
+outlet/7
+outliers
+outline/26
+outlive/17
+outlook/26
+outlying
+outmaneuver/17
+outmatch/17
+outmigration
+outmoded
+outness/6
+outnumber/17
+outpaced
+outpatient/7
+outperform/17
+out/659
+outplacement/9
+outplay/17
+outpoint/17
+outpost/7
+outpouring/6
+outpour/503
+outproduce/17
+output/7
+outputted
+outputting
+outrace/17
+outrage/26
+outrageousness/6
+outrageous/28
+outran
+outrank/17
+outr�
+outreach/17
+outrider/7
+outrigger/7
+outright/19
+outrunning
+outrun/9
+outscore/17
+outsell/166
+outset/7
+outsetting
+outshine/166
+outshone
+outshout/17
+outsider/204
+outside/110
+outsize/9
+outskirt/7
+outsmart/17
+outsold
+outsource/71
+outspend/166
+outspent
+outspoke
+outspokenness/7
+outspoken/28
+outspread/166
+outstanding/19
+outstate/107
+outstation/6
+outstay/17
+outstretch/17
+outstripped
+outstripping
+outstrip/9
+outtake/9
+outvote/17
+outwardness/6
+outward/46
+outwear/166
+outweigh/47
+outweighs
+outwit/9
+outwitted
+outwitting
+outwore
+outwork/26
+outworn
+ouzo/7
+oval/32
+ovalness/6
+ova/6
+ovarian
+ovary/7
+ovate/15
+ovation/165
+ovenbird/7
+oven/7
+overabundance/7
+overabundant
+overachieve/23
+overact/64
+overage/9
+overaggressive
+overallocation
+overall/7
+overambitious
+overanxious
+overarching
+overarm/17
+overate
+overattentive
+overawe/17
+overbalance/17
+overbear/166
+overbearingness/6
+overbearing/28
+overbidding
+overbid/9
+overbite/7
+overblown
+overboard
+overbold
+overbook/17
+overbore
+overborne
+overbought
+overbuild/166
+overbuilt
+overburdening/19
+overburden/17
+overbuy/166
+overcame
+overcapacity/6
+overcapitalize/17
+overcareful
+overcast/166
+overcasting/6
+overcautious
+overcerebral
+overcharge/17
+overcloud/17
+overcoating/6
+overcoat/131
+overcomer/6
+overcome/255
+overcommitment/9
+overcompensate/15
+overcompensation/6
+overcomplexity/6
+overcomplicated
+overconfidence/7
+overconfident/19
+overconscientious
+overconsumption/6
+overcook/17
+overcooled
+overcorrection
+overcritical
+overcrowd/17
+overcurious
+overdecorate/17
+overdependent
+overdetermined
+overdevelop/17
+overdid
+overdoes
+overdo/224
+overdone
+overdose/26
+overdraft/7
+overdraw/166
+overdrawn
+overdress/17
+overdrew
+overdrive/131
+overdriven
+overdrove
+overdubbed
+overdubbing
+overdub/9
+overdue
+overeagerness/6
+overeager/28
+overeater/6
+overeat/660
+overeducated
+overemotional
+overemphases
+overemphasis/6
+overemphasize/23
+overenthusiastic
+overestimate/15
+overestimation/6
+overexcite/17
+overexercise/17
+overexert/17
+overexertion/7
+overexploitation
+overexploited
+overexpose/17
+overexposure/7
+overextend/17
+overextension
+overfall/6
+overfed
+overfeed/166
+overfill/17
+overfishing
+overflew
+overflight/7
+overflow/17
+overflown
+overfly/166
+overfond
+overfull
+overgeneralize/17
+overgenerous
+overgraze/17
+overgrew
+overground
+overgrow/658
+overgrown
+overgrowth/6
+overgrowths
+overhand/17
+overhang/166
+overhasty
+overhaul/187
+overhead/9
+overheard
+overhearer/6
+overhear/255
+overheat/17
+overhung
+overincredulous
+overindulgence/7
+overindulgent
+overindulge/17
+overinflated
+overjoy/17
+overkill/26
+overladed
+overladen
+overlaid
+overlain
+overland/9
+overlap/7
+overlapped
+overlapping
+overlarge
+overlay/166
+overleaf
+overlie
+overload/17
+overlong
+overlook/17
+overlord/26
+overloud
+overly/255
+overmanning
+overmaster/17
+overmatching
+overmodest
+overmuch/9
+overnice
+overnight/23
+overoptimism/7
+overoptimistic
+overpaid
+overparticular
+overpass/26
+overpay/661
+overpayment/6
+overplay/17
+overpopulate/15
+overpopulation/6
+overpopulous
+overpower/17
+overpowering/19
+overpraise/17
+overprecise
+overpressure
+overprice/17
+overprint/17
+overproduce/17
+overproduction/9
+overprotect/64
+overprotection/6
+overqualified
+overran
+overrate/17
+overreach/31
+overreaction/7
+overreact/17
+overred
+overrefined
+overrepresented
+overridden
+overrider/6
+override/255
+overripe
+overrode
+overrule/17
+overrunning
+overrun/9
+oversample/47
+oversaturate
+oversaw
+oversea/9
+overseeing
+overseen
+overseer/6
+oversee/110
+oversell/166
+oversensitiveness/9
+oversensitive/42
+oversensitivity
+oversexed
+overshadow/17
+overshoe/7
+overshoot/166
+overshot/9
+oversight/7
+oversimple
+oversimplification/6
+oversimplify/15
+oversize/166
+oversleep/166
+overslept
+oversoftness/6
+oversoft/42
+oversold
+overspecialization/7
+overspecialize/17
+overspend/166
+overspent
+overspill/26
+overspread/166
+overstaffed
+overstatement/7
+overstate/11
+overstay/17
+overstepped
+overstepping
+overstep/9
+overstimulate/17
+overstock/17
+overstraining
+overstressed
+overstretch/81
+overstrict
+overstrike/166
+overstrung
+overstuffed
+oversubscribe/17
+oversubtle
+oversupply/26
+oversuspicious
+overtaken
+overtake/227
+overtax/17
+overthrew
+overthrow/166
+overthrown
+overtightened
+overtime/26
+overtire/17
+overtone/7
+overtook
+overt/28
+overture/26
+overturn/17
+overuse/17
+overvalue/17
+overview/7
+overweening
+overweight/17
+overwhelm/17
+overwhelming/19
+overwinter/17
+overwork/17
+overwrap
+overwrite/166
+overwritten
+overwrote
+overwrought
+over/662
+overzealousness/6
+overzealous/42
+Ovid/6
+oviduct/7
+oviform
+oviparous
+ovoid/9
+ovular
+ovulate/15
+ovulatory
+ovule/7
+ovum/7
+ow/663
+Owen/7
+owe/9
+owlet/7
+owl/111
+owlishness/6
+owlish/28
+owned/12
+own/84
+ownership/7
+owner/7
+oxalate/6
+oxalic
+oxaloacetic
+oxblood/9
+oxbow/7
+oxcart/7
+oxen/6
+oxford/7
+Oxford/7
+oxidant/7
+oxidate/129
+oxidation/6
+oxidative/19
+oxide/7
+oxidization/7
+oxidized/12
+oxidize/179
+oxidizer/6
+oxidizes/14
+ox/125
+Oxnard
+Oxonian
+oxtail/6
+Oxus/6
+oxyacetylene/7
+oxygenate/269
+oxygenation/6
+oxygen/7
+oxyhydroxides
+oxymora
+oxymoron/6
+oyster/26
+oystering/6
+oz
+Ozark/7
+Oz/6
+ozone/7
+Ozymandias/6
+Ozzie/6
+Ozzy/6
+P
+PA
+Pablo/6
+Pablum/6
+pablum/9
+Pabst/6
+pabulum/7
+PAC
+pace/49
+Pace/6
+pacemaker/7
+pacer/6
+pacesetter/7
+pacesetting
+Pacheco/6
+pachyderm/7
+pachysandra/7
+pacific
+pacifically
+pacification/6
+Pacific/6
+pacifier/6
+pacifism/7
+pacifistic
+pacifist/7
+pacify/115
+package/395
+packaged/12
+packager/9
+package's
+packages/12
+packaging/7
+Packard/7
+packed/13
+packer/41
+packet/26
+pack/182
+packhorse/6
+packinghouse/9
+packing/6
+packsaddle/7
+Packston/6
+packs/13
+Packwood/6
+Paco/6
+Pacorro/6
+pact/7
+Padang/6
+padded/12
+Paddie/6
+padding/7
+paddle/49
+paddler/6
+paddock/26
+Paddy/6
+paddy/7
+Padget/6
+Padgett/6
+Padilla/6
+padlock/26
+pad/7
+Padraic/6
+Padraig/6
+padre/7
+Padrewski/6
+Padriac/6
+paean/7
+paediatrician/7
+paediatrics/6
+paedophilia's
+paella/7
+paeony/6
+Paganini/6
+paganism/7
+pagan/7
+pageantry/7
+pageant/7
+pageboy/7
+paged/12
+pageful
+Page/6
+page/49
+pager/6
+paginate/15
+Paglia/6
+pagoda/7
+Pahlavi/6
+paid/13
+Paige/6
+pailful/7
+Pail/6
+pail/7
+Paine/6
+painfuller
+painfullest
+painfulness/7
+painful/28
+pain/26
+painkiller/7
+painkilling
+painlessness/9
+painless/28
+painstaking/16
+paint/119
+paintbox/6
+paintbrush/7
+painted/12
+painterly/42
+painter/86
+painting/7
+paint's
+paintwork
+paired/13
+pair/171
+pairs/14
+pairwise
+paisley/7
+pajama/56
+Pakistani/9
+Pakistan/6
+palace/7
+paladin/7
+palaeolithic
+palaeontologists
+palaeontology/6
+palanquin/7
+palatability/6
+palatableness/6
+palatable/42
+palatalization/7
+palatalize/17
+palatal/16
+palate/465
+palatial/19
+palatinate/7
+Palatine
+palatine/9
+palaver/26
+paleface/7
+Palembang/6
+paleness/9
+Paleocene
+Paleogene
+paleographer/7
+paleography/7
+paleolithic
+Paleolithic
+paleontologist/9
+paleontology/7
+Paleozoic
+Palermo/6
+pale/46
+Palestine/6
+Palestinian/9
+Palestrina/6
+palette/7
+Paley/6
+palfrey/7
+palimony/9
+palimpsest/7
+palindrome/7
+palindromic
+paling/6
+palisade/26
+Palisades/6
+palish
+Palladio/6
+palladium/7
+pallbearer/7
+palletized
+pallet/26
+pall/26
+palliate/24
+palliation/6
+palliative/16
+pallidness/7
+pallid/28
+Pall/6
+pallor/7
+palmate
+palmer/6
+Palmer/6
+Palmerston/6
+palmetto/7
+palm/111
+palmist/7
+palmistry/7
+Palm/114
+Palmolive/6
+palmtop/9
+Palmyra/6
+palmy/54
+Palo/6
+Paloma/6
+Palomar/6
+palomino/7
+palpable
+palpably
+palpate/15
+palpation/6
+palpitate/15
+palpitation/6
+pal/664
+palsy/26
+paltriness/7
+paltry/98
+paludal
+Pa/6
+Pamela/6
+Pamelina/6
+Pamella/6
+pa/140
+Pamirs
+Pam/6
+Pammie/6
+Pammi/6
+Pammy/6
+pampas/6
+pamperer/6
+pamper/31
+Pampers
+pamphleteer/26
+pamphlet/7
+panacea/7
+panache/7
+Panama/7
+Panamanian/9
+panama/9
+pancake/26
+Panchito/6
+Pancho/6
+panchromatic
+pancreas/7
+pancreatic
+panda/7
+pandemic/9
+pandemonium/7
+pander/23
+Pandora/6
+panegyric/7
+pane/341
+paneling/6
+panelist/7
+panelization
+panelized
+panel/171
+Pangaea/6
+pang/26
+pangolin/6
+panhandle/49
+panicked
+panicking
+panicky/54
+panic/7
+panier's
+panjandrum/6
+Pankhurst/6
+Pan/6
+Panmunjom/6
+panned
+pannier/7
+panning
+panoply/56
+panorama/7
+panoramic
+panpipes
+Pansie/6
+pan/56
+Pansy/6
+pansy/7
+Pantagruel/6
+Pantaloon/6
+pantaloons
+pant/17
+pantheism/7
+pantheistic
+pantheist/9
+pantheon/7
+panther/7
+pantie/7
+pantiled
+pantograph/6
+pantomime/26
+pantomimic
+pantomimist/7
+pantry/7
+pantsuit/7
+pantyhose
+pantyliner
+pantywaist/7
+Panza/6
+Paola/6
+Paoli/6
+Paolina/6
+Paolo/6
+papacy/7
+Papagena/6
+Papageno/6
+papal/19
+papa/7
+paparazzi
+papaw/7
+papaya/7
+paperback/26
+paperboard/7
+paperboy/7
+paperer/6
+papergirl/7
+paper/665
+paperhanger/7
+paperhanging/7
+paperiness/6
+paperless
+paperweight/7
+paperwork/7
+papery/42
+papillae
+papilla/6
+papillary
+papist/7
+papoose/7
+Pappas/6
+papped
+papping
+pappy/228
+paprika/7
+pap/666
+papyri
+papyrus/6
+Paquito/6
+parable/26
+parabola/7
+parabolic
+paraboloidal/6
+paraboloid/7
+Paracelsus/6
+paracetamol/6
+parachuter/6
+parachute/111
+parachutist/7
+Paraclete/6
+parader/6
+parade/49
+paradigmatic
+paradigm/7
+paradisaic
+paradisaical
+Paradise/6
+paradise/7
+paradoxic
+paradoxicalness/6
+paradoxical/28
+paradox/7
+paraffin/26
+paragon/26
+paragrapher/6
+paragraph/570
+paragraphs
+Paraguayan/9
+Paraguay/6
+parakeet/7
+paralegal/9
+paralinguistic
+parallax/7
+parallel/17
+paralleled/12
+parallelepiped/7
+parallelism/7
+parallelization/7
+parallelize/23
+parallelogram/7
+paralysis/6
+paralytically
+paralytic/9
+paralyzedly/9
+paralyzed/19
+paralyzer/6
+paralyze/23
+paralyzingly/9
+paralyzing/19
+paramagnetic
+paramagnet/6
+Paramaribo/6
+paramecia
+paramecium/6
+paramedical/9
+paramedic/7
+parameterization/7
+parameterize/88
+parameterized/12
+parameterless
+parameter/7
+parametric
+parametrically
+parametrization
+parametrize/142
+paramilitary/9
+paramount/9
+paramour/7
+para/7
+Paramus/6
+Paran�
+paranoiac/9
+paranoia/7
+paranoid/9
+paranormal/16
+parapet/56
+paraphernalia
+paraphrase/111
+paraphraser/6
+paraplegia/7
+paraplegic/9
+paraprofessional/7
+parapsychologist/9
+parapsychology/7
+paraquat/9
+parasite/7
+parasitically
+parasitic/9
+parasitism/7
+parasitologist/6
+parasitology/6
+parasol/7
+parasympathetic/9
+parathion/7
+parathyroid/9
+paratrooper/6
+paratroop/110
+paratyphoid/9
+parboil/17
+parceled/12
+parceling/6
+parcel/26
+Parcheesi/6
+parch/11
+parchment/7
+PARC/6
+pardonableness/6
+pardonable/12
+pardonably/12
+pardoner/6
+pardon/67
+paregoric/7
+parentage/7
+parental/19
+parenteral
+parentheses
+parenthesis/6
+parenthesize/17
+parenthetic
+parenthetical/19
+parenthood/7
+parent/171
+pare/9
+paresis/6
+pares/9
+Pareto/6
+parfait/7
+pariah/6
+pariahs
+parietal/9
+parimutuel/9
+paring/6
+parishioner/7
+parish/7
+Parisian/7
+Paris/6
+parity/85
+parka/7
+Parke/6
+Parker/6
+Parkersburg/6
+park/91
+Parkhouse/6
+parking/6
+Parkinson/6
+parkish
+parkland/6
+parklike
+Parkman
+Park/175
+parkway/7
+parlance/7
+parlay/17
+parley/26
+parliamentarian/7
+parliamentary/12
+parliament/7
+Parliament/7
+parlor/7
+parlous
+Parmesan/9
+parmigiana
+Parnassus/7
+Parnell/6
+parochialism/7
+parochiality
+parochial/19
+parodied/12
+parodist/7
+parody/26
+parolee/7
+parole/26
+paroxysmal
+paroxysm/7
+parquetry/7
+parquet/26
+parrakeet's
+parred
+parricidal
+parricide/7
+parring
+Parrish/6
+Parr/6
+Parrnell/6
+parrot/26
+parrotlike
+parry/17
+Parry/6
+parse
+parsec/7
+parsed/12
+Parsee's
+parser/6
+Parsifal/6
+parsimonious/19
+parsimony/7
+pars/179
+parsley/7
+parsnip/7
+parsonage/7
+parson/7
+Parsons/6
+partaken
+partaker/6
+partake/227
+part/263
+parterre/7
+parter/9
+parthenogeneses
+parthenogenesis/6
+Parthenon/6
+Parthia/6
+partiality/7
+partial/16
+participant/7
+participate/24
+participation/6
+participator/9
+participatory
+participial/19
+participle/7
+particleboard/9
+particle/7
+particolored
+particularistic
+particularity/7
+particularization/7
+particularize/17
+particular/16
+particulate/9
+parting/7
+partisanship/7
+partisan/7
+partition/667
+partitioned/12
+partitioner/6
+partitive/9
+partizan's
+partly
+partner/26
+partnership/7
+partook
+partridge/7
+part's
+parturition/7
+partway
+party/111
+parvenu/7
+par/182
+Pasadena/6
+PASCAL
+Pascale/6
+Pascal/6
+pascal/7
+paschal/9
+pasha/7
+Paso/6
+Pasquale/6
+pas/9
+passably
+passage/26
+passageway/7
+Passaic/6
+passband
+passbook/7
+passel/7
+pass�/6
+passenger/65
+passerby
+passer/6
+passersby
+passim
+passing/19
+passionated
+passionate/361
+passionateness/82
+passionates
+passionating
+passioned
+passionflower/7
+passioning
+passionless
+passion/85
+Passion/7
+passivated
+passiveness/9
+passive/46
+passivity/9
+pass/668
+passkey/7
+passmark
+passover
+Passover/7
+passport/7
+password/56
+pasta/7
+pasteboard/7
+pasted/13
+pastel/7
+paste/7
+Pasternak/6
+pastern/7
+pasteup
+pasteurization/7
+pasteurized/12
+pasteurizer/6
+pasteurize/23
+Pasteur/6
+pastiche/7
+pastille/7
+pastime/7
+pastiness/7
+pastoralization/6
+pastoral/46
+pastorate/7
+pastor/26
+past/669
+pastrami/7
+pastry/7
+past's/14
+pasts/14
+pasturage/7
+pasture/111
+pasturer/6
+pasty/177
+Patagonia/6
+Patagonian/9
+patch/137
+patcher/82
+patchily
+patchiness/9
+patch's
+patchwork/96
+patchy/98
+patellae
+patella/7
+Patel/6
+Pate/6
+paten/6
+Paten/6
+patentee/7
+patent/670
+paterfamilias/7
+pater/6
+paternalism/7
+paternalist
+paternalistic
+paternal/19
+paternity/7
+paternoster/7
+Paterson/6
+pate/7
+pathetic
+pathetically
+pathfinder/7
+pathless/42
+path/6
+pathname/7
+pathogenesis/6
+pathogenic
+pathogen/7
+pathologic
+pathological/19
+pathologist/7
+pathology/7
+pathos/7
+paths
+pathway/7
+Patience/6
+patience/7
+patient/287
+patient's/45
+patients/45
+patina/7
+patine
+Patin/6
+patio/7
+Pat/72
+pat/671
+Patna/6
+patois/6
+Paton/6
+patresfamilias
+patriarchal
+patriarchate/7
+patriarch/6
+patriarchs
+patriarchy/7
+Patrica/6
+Patrice/6
+Patricia/6
+patrician/7
+patricide/7
+Patricio/6
+Patrick/6
+Patric/6
+patrimonial
+patrimony/7
+patriotically
+patriotic/12
+patriotism/7
+patriot/7
+patristic/9
+Patrizia/6
+Patrizio/6
+Patrizius/6
+patrolled
+patrolling
+patrolman/6
+patrolmen
+patrol/7
+patrolwoman
+patrolwomen
+patronage/7
+patroness/9
+patronization
+patronized/12
+patronize/179
+patronizer/6
+patronizes/14
+patronizing's/12
+patronizing/86
+patronymically
+patronymic/9
+patron/65
+patroon/7
+patsy/7
+Patsy/7
+patted
+Patten/6
+patten/7
+patterer/6
+pattern/26
+patternless
+patter/187
+Patterson/6
+Pattie/6
+Patti/6
+patting
+Pattin/6
+Patton/6
+Patty/6
+patty/7
+paucity/7
+Paula/6
+Paule/6
+Pauletta/6
+Paulette/6
+Paulie/6
+Pauli/6
+Paulina/6
+Pauline
+Pauling/6
+Paulita/6
+Paul/207
+Paulo/6
+Paulsen/6
+Paulson/6
+Paulus/6
+Pauly/6
+paunch/26
+paunchiness/6
+paunchy/98
+pauperism/7
+pauperize/17
+pauper/26
+pause/17
+Pavarotti
+paved/13
+pave/672
+Pavel/6
+pavement/26
+paver/6
+paves/14
+Pavia/6
+pavilion/26
+paving/14
+paving's
+Pavla/6
+Pavlova/7
+Pavlovian
+Pavlov/6
+pawl/7
+paw/26
+pawnbroker/7
+pawnbroking/9
+Pawnee/7
+pawner/6
+pawn/111
+pawnshop/7
+pawpaw's
+Pawtucket/6
+paxes
+Paxon/6
+Paxton/6
+payable/9
+pay/673
+payback/9
+paycheck/7
+payday/7
+payed
+payee/7
+payer/7
+payload/7
+paymaster/7
+payment/48
+Payne/7
+PayPal/6
+payoff/7
+payola/7
+payout/9
+payroll/7
+payslip/9
+Payson/6
+Payton/6
+Paz/6
+Pb/6
+PBS
+PBX
+PCB
+PC/6
+PCP
+PCs
+pct
+pd
+PD
+Pd/6
+PDP
+PDQ
+PDT
+PE
+Peabody/6
+peaceableness/6
+peaceable/42
+peaceably
+peacefuller
+peacefullest
+peacefulness/9
+peaceful/28
+peace/26
+peacekeeping/9
+Peace/6
+peacemaker/7
+peacemaking/7
+peacetime/7
+peach/26
+Peachtree/6
+peachy/54
+peacock/26
+Peadar/6
+peafowl/7
+peahen/7
+peaked/42
+peakiness/6
+peak/26
+peaky/42
+pealed/14
+Peale/6
+peal/26
+peals/14
+pea/7
+peanut/7
+Pearce/6
+Pearla/6
+Pearle/6
+pearler/6
+Pearlie/6
+Pearline/6
+Pearl/6
+pearl/111
+pearly/228
+Pearson/6
+pear/65
+peartrees
+Peary/6
+peasanthood
+peasantry/7
+peasant/7
+peashooter/7
+peats/14
+peat/7
+peaty/54
+pebble/26
+pebbling/6
+pebbly/54
+Pebrook/6
+pecan/7
+peccadilloes
+peccadillo/6
+peccary/7
+Pechora/6
+pecker/6
+peck/49
+Peckinpah/6
+Peck/6
+Pecos/6
+pectic
+pectin/7
+pectoral/9
+peculate/15
+peculator/9
+peculiarity/7
+peculiar/16
+pecuniary
+pedagogical/19
+pedagogic/9
+pedagogics/6
+pedagogue/26
+pedagogy/7
+pedal/111
+pedantic
+pedantically
+pedantry/7
+pedant/7
+peddler/6
+peddle/23
+pederast/7
+pederasty/7
+Peder/6
+pedestal/26
+pedestrianization
+pedestrianize/17
+pedestrian/7
+pediatrician/7
+pediatric/9
+pedicab/7
+pedicure/26
+pedicurist/7
+pedigree/56
+pediment/56
+pedlar's
+pedometer/7
+pedophile/9
+pedophilia
+Pedro/6
+peduncle/7
+peeing
+peekaboo/7
+peek/17
+peeler/6
+peeling/6
+Peel/6
+peel/179
+peen/26
+peeper/6
+peephole/7
+peep/23
+peepshow/7
+peepy
+peerage/7
+peer/165
+peeress/7
+peerlessness/6
+peerless/28
+peeve/453
+peevers/6
+peevishness/7
+peevish/28
+peewee/9
+pee/674
+Pegasus/7
+pegboard/7
+Pegeen/6
+pegged
+Peggie/6
+Peggi/6
+pegging
+Peggy/6
+Peg/6
+peg/7
+peignoir/7
+Pei/6
+Peiping/6
+Peirce/6
+pejoration/7
+pejorative/16
+peke/7
+Pekinese's
+pekingese
+Pekingese/7
+Peking/7
+pekoe/7
+pelagic
+Pelee/6
+Pele/6
+pelf/7
+Pelham/6
+pelican/7
+pellagra/7
+pellet/26
+pellucid
+Peloponnese/6
+pelter/6
+pelt/31
+pelvic/9
+pelvis/7
+Pembroke/6
+pemmican/7
+penalization/7
+penalized/12
+penalize/17
+penalty/7
+penal/19
+Pena/6
+penance/26
+pence/6
+penchant/7
+pencil/171
+pendant/7
+pend/263
+pendent/120
+Penderecki/6
+Pendleton/6
+pendulous
+pendulum/7
+Penelopa/6
+Penelope/6
+penetrability/7
+penetrable
+penetrate/24
+penetrating/19
+penetration/6
+penetrativeness/6
+penetrative/28
+penetrator/7
+penguin/7
+penicillin/7
+penile
+peninsular
+peninsula/7
+penis/7
+penitence/7
+penitential/16
+penitentiary/7
+penitent/16
+penknife/6
+penknives
+penlight/7
+pen/6
+Pen/6
+penman/6
+penmanship/7
+penmen
+Penna
+pennant/7
+penned
+Penney/6
+Pennie/6
+penniless
+Penni/6
+penning
+Pennington/6
+pennis
+Penn/6
+pennon/7
+Pennsylvania/6
+Pennsylvanian/9
+Penny/6
+penny/7
+pennyweight/7
+pennyworth/6
+penologist/7
+penology/7
+Penrod/6
+Pensacola/6
+pensioner/6
+pension/66
+pensiveness/9
+pensive/28
+pens/130
+pentacle/7
+pentagonal/16
+Pentagon/6
+pentagon/7
+pentagram/7
+pentameter/7
+pent/63
+Pentateuch/6
+pentathlete/9
+pentathlon/7
+pentatonic
+pentecostal
+Pentecostalism/9
+Pentecostal/9
+Pentecost/7
+penthouse/26
+Pentium/6
+penuche/7
+penultimate/16
+penumbrae
+penumbra/7
+penuriousness/7
+penurious/28
+penury/7
+peonage/7
+peon/7
+peony/7
+people/26
+Peoria/6
+Pepe/6
+Pepillo/6
+Pepi/6
+Pepin/6
+Pepita/6
+Pepito/6
+pepped
+peppercorn/7
+pepperer/6
+peppergrass/6
+peppermint/7
+pepperoni/9
+pepper/111
+peppery
+peppiness/7
+pepping
+peppy/98
+Pepsico/6
+PepsiCo/6
+Pepsi/6
+pepsin/7
+pep/7
+peptic/9
+peptidase/7
+peptide/7
+peptizing
+Pepys/6
+Pequot/6
+peradventure/9
+perambulate/15
+perambulation/6
+perambulator/7
+percale/7
+perceivably
+perceive/67
+perceived/12
+perceiver/6
+percentage/7
+percentile/7
+percent/7
+perceptible
+perceptibly
+perceptional
+perception/7
+perceptiveness/7
+perceptive/28
+perceptual/19
+percept/76
+Perceval/6
+perchance
+perch/26
+perchlorate/6
+perchlorination
+percipience/7
+percipient/9
+Percival/6
+percolate/15
+percolation/6
+percolator/7
+percuss/64
+percussionist/7
+percussion/48
+percussiveness/6
+percussive/28
+percutaneous/19
+Percy/6
+perdition/7
+perdurable
+peregrinate/15
+peregrination/6
+peregrine/9
+Perelman/6
+peremptorily
+peremptory/42
+perennial/16
+p�res
+perestroika/9
+Perez/6
+perfecta/9
+perfect/37
+perfecter/6
+perfectibility/7
+perfectible
+perfectionism/7
+perfectionist/7
+perfection/7
+perfectiveness/6
+perfective/28
+perfectness/7
+perfidiousness/6
+perfidious/28
+perfidy/7
+perforated/12
+perforate/15
+perforation/6
+perforce
+performance/7
+performed/12
+performer/6
+perform/67
+perfumer/6
+perfumery/7
+perfume/49
+perfunctorily
+perfunctoriness/6
+perfunctory/42
+perfused
+perfusion/6
+Pergamon/6
+pergola/7
+perhaps/9
+Peria/6
+pericardia
+pericardium/6
+Perice/6
+Periclean
+Pericles/6
+perigee/7
+perihelia
+perihelion/6
+peril/26
+Perilla/6
+perilousness/6
+perilous/28
+Peri/6
+perimeter/7
+perinatal
+perinea
+perineum/6
+periodic
+periodical/65
+periodicity/7
+period/7
+periodontal/19
+periodontics/6
+periodontist/9
+peripatetic/9
+peripheral/16
+periphery/7
+periphrases
+periphrasis/6
+periphrastic
+periscope/26
+perishable/7
+perish/67
+perishing/19
+peristalses
+peristalsis/6
+peristaltic
+peristyle/7
+peritoneal
+peritoneum/7
+peritonitis/7
+periwigged
+periwigging
+periwig/7
+periwinkle/7
+perjurer/6
+perjure/23
+perjury/7
+per/370
+perk/17
+perkily
+perkiness/9
+Perkin/7
+perky/98
+Perla/6
+Perle/6
+Perl/6
+permafrost/7
+permalloy/6
+Permalloy/6
+permanence/7
+permanency/7
+permanentness/6
+permanent/46
+permeability/7
+permeableness/6
+permeable/42
+permeate/24
+Permian
+permissibility/6
+permissibleness/6
+permissible/42
+permissibly
+permission/7
+permissiveness/7
+permissive/28
+permit/7
+permitted
+permitting
+Perm/6
+perm/26
+permutation/7
+permute/17
+Pernell/6
+perniciousness/7
+pernicious/28
+Pernod/6
+Peron/6
+peroration/7
+Perot/6
+peroxidase/6
+peroxide/26
+perpend/47
+perpendicularity/7
+perpendicular/16
+perpetrate/15
+perpetration/6
+perpetrator/7
+perpetual/16
+perpetuate/15
+perpetuation/6
+perpetuity/7
+perplex/17
+perplexed/19
+perplexity/7
+perquisite/7
+Perren/6
+Perri/6
+Perrine/6
+Perry/114
+persecute/24
+persecution/6
+persecutor/7
+persecutory
+Perseid/6
+Persephone/6
+Perseus/6
+perseverance/7
+persevere/17
+persevering/19
+Pershing/6
+Persia/6
+Persian/9
+persiflage/7
+persimmon/7
+Persis/6
+persist/31
+persistence/7
+persistent/19
+persnickety
+personableness/6
+personable/42
+personae
+personage/7
+personality/7
+personalization/186
+personalize/263
+personalized/12
+personalty/7
+personal/16
+persona/6
+person/465
+personification/6
+personifier/6
+personify/294
+personnel/7
+person's/12
+persons/12
+perspective/65
+perspex
+perspicaciousness/6
+perspicacious/28
+perspicacity/9
+perspicuity/7
+perspicuousness/6
+perspicuous/28
+perspiration/7
+perspire/17
+persuaded/12
+persuader/6
+persuade/67
+persuasion/7
+persuasively
+persuasiveness/7
+persuasive/12
+pertain/17
+Perth/6
+pertinaciousness/6
+pertinacious/28
+pertinacity/7
+pertinence/9
+pertinent/16
+pertness/7
+perturbation/7
+perturbed/12
+perturb/17
+pertussis/7
+pert/38
+peruke/7
+Peru/6
+perusal/7
+peruser/6
+peruse/23
+Peruvian/9
+pervade/17
+pervasion/6
+pervasiveness/7
+pervasive/28
+perverseness/7
+perverse/134
+perversion/6
+perversity/7
+pervert/31
+perverted/28
+perverter/6
+perviousness
+peseta/7
+Peshawar/6
+peskily
+peskiness/9
+pesky/98
+peso/7
+pessimal/19
+pessimism/7
+pessimistic
+pessimistically
+pessimist/7
+pester/47
+pesticide/7
+pestiferous
+pestilence/7
+pestilential/19
+pestilent/19
+pestle/26
+pesto/9
+pest/96
+PET
+P�tain/6
+petal/56
+Peta/6
+petard/7
+petcock/7
+Pete/6
+peter/47
+Peter/6
+Petersburg/6
+Petersen/6
+Peters/122
+Peterson/6
+Peterus/6
+Petey/6
+pethidine/6
+petiole/7
+petiteness/6
+petite/675
+petitioner/6
+petition/259
+petition's/14
+petitions/14
+petits
+Petkiewicz/6
+Pet/231
+Petra/6
+Petrarch/6
+petrel/7
+petri
+petrifaction/7
+petrify/55
+Petrina/6
+Petr/6
+petrochemical/7
+petrodollar/7
+petroglyph/6
+petrolatum/7
+petroleum/7
+petrolled
+petrolling
+petrol/7
+petrologist/7
+petrology/7
+Petronella/6
+Petronia/6
+Petronilla/6
+Petronille/6
+pet/96
+petted
+petter/7
+Pettibone/6
+petticoat/56
+pettifogged
+pettifogger/7
+pettifogging
+pettifog/9
+pettily
+pettiness/9
+petting
+pettis
+pettishness/6
+pettish/28
+Petty/6
+petty/177
+petulance/7
+petulant/19
+Petunia/6
+petunia/7
+Peugeot/6
+Pewaukee/6
+pewee/7
+pewit/7
+pew/7
+pewter/175
+peyote/7
+Peyter/6
+Peyton/6
+pf
+Pfc
+PFC
+pfennig/7
+Pfizer/6
+pg
+PG
+Phaedra/6
+Phaethon/6
+phaeton/7
+phage/6
+phagocyte/7
+Phaidra/6
+phalanger/7
+phalanges
+phalanx/7
+phalli
+phallic
+phallus/6
+Phanerozoic
+phantasmagoria/7
+phantasmal
+phantasm/7
+phantasy's
+phantom/7
+pharaoh
+Pharaoh/6
+pharaohs
+Pharaohs
+pharisaic
+Pharisaic
+Pharisaical
+pharisee/9
+Pharisee/7
+pharmaceutical/16
+pharmaceutic/9
+pharmaceutics/6
+pharmacist/7
+pharmacological/19
+pharmacologist/7
+pharmacology/7
+pharmacopoeia/7
+pharmacy/7
+pharyngeal/9
+pharynges
+pharyngitides
+pharyngitis/6
+pharynx/6
+phase/49
+phaseout/9
+PhD
+pheasant/7
+Phebe/6
+Phedra/6
+Phekda/6
+Phelia/6
+Phelps/6
+phenacetin/7
+phenobarbital/7
+phenolic
+phenol/7
+phenolphthalein/6
+phenomenal/19
+phenomena/7
+phenomenological/19
+phenomenology/7
+phenomenon/7
+phenotype/7
+phenylalanine/6
+phenyl/6
+pheromone/7
+phew/9
+phialled
+phialling
+phial/7
+Phidias/6
+Philadelphia/6
+philanderer/6
+philander/23
+philanthropic
+philanthropically
+philanthropist/7
+philanthropy/7
+philatelic
+philatelist/7
+philately/7
+Philbert/6
+Philco/6
+philharmonic/9
+Philipa/6
+Philip/6
+Philippa/6
+Philippe/6
+Philippians/6
+philippic/7
+Philippine/7
+Philis/6
+philistine/9
+Philistine/7
+philistinism/9
+Phillida/6
+Phillie/6
+Phillipa/6
+Phillipe/6
+Phillip/7
+Phillipp/6
+Phillis/6
+Philly/7
+Phil/86
+philodendron/7
+philological/19
+philologist/7
+philology/7
+Philomena/6
+philosopher/7
+philosophic
+philosophical/19
+philosophized/12
+philosophizer/6
+philosophizes/12
+philosophize/23
+philosophy/7
+philter/26
+philtre/26
+Phineas/6
+Phip/6
+Phipps/6
+phisher/7
+phishing
+phi/7
+phlebitides
+phlebitis/6
+phlegmatic
+phlegmatically
+phlegm/7
+phloem/7
+phlox/6
+pH/6
+Ph/6
+phobia/7
+phobic/9
+Phobos/6
+Phoebe/6
+phoebe/7
+Phoenicia/6
+Phoenician/7
+Phoenix/6
+phoenix/7
+phone/26
+phoneme/7
+phonemically
+phonemic/9
+phonemics/6
+phonetically
+phonetician/7
+phonetic/9
+phonetics/6
+phonically
+phonic/9
+phonics/6
+phoniness/7
+phonographer/6
+phonographic
+phonograph/114
+phonographs
+phonologic
+phonological/19
+phonologist/7
+phonology/7
+phonon/6
+phony/226
+phooey/9
+phosphatase/6
+phosphate/7
+phosphide/6
+phosphine/7
+phosphoresce
+phosphorescence/7
+phosphorescent/19
+phosphoric
+phosphor/7
+phosphorous
+phosphorus/7
+photocell/7
+photochemical/19
+photochemistry/6
+photocopier/6
+photocopy/49
+photoelectric
+photoelectrically
+photoelectronic
+photoelectrons
+photoengraver/6
+photoengrave/179
+photoengraving/6
+photofinishing/7
+photogenic
+photogenically
+photograph/676
+photographer/7
+photographic
+photographically
+photograph's
+photographs/14
+photography/7
+photojournalism/7
+photojournalist/7
+photoluminescence/6
+photolysis/6
+photolytic
+photometer/7
+photometric
+photometrically
+photometry/6
+photomicrograph/6
+photomicrography/6
+photomultiplier/6
+photon/7
+photorealism
+photosensitive
+photo/26
+photosphere/6
+photostatic
+Photostat/7
+Photostatted
+Photostatting
+photosyntheses
+photosynthesis/6
+photosynthesize/17
+photosynthetic
+phototypesetter
+phototypesetting/6
+phrasal
+phrase/36
+phrasebook
+phrasemaking
+phraseology/7
+phrase's
+phrasing/7
+phrenological/19
+phrenologist/7
+phrenology/7
+phylactery/7
+phylae
+phyla/6
+Phylis/6
+Phyllida/6
+Phyllis/6
+Phyllys/6
+phylogeny/7
+phylum/6
+Phylys/6
+phys
+physicality/6
+physical/46
+physician/7
+physicist/7
+physicked
+physicking
+physic/7
+physiochemical
+physiognomy/7
+physiography/7
+physiologic
+physiological/19
+physiologist/7
+physiology/7
+physiotherapist/7
+physiotherapy/7
+physique/56
+phytoplankton/6
+Piaf/6
+Piaget/6
+Pia/6
+pianism/6
+pianissimo/9
+pianistic
+pianist/7
+pianoforte/7
+pianola
+Pianola/6
+piano/7
+piaster/7
+piazza/7
+pibroch/6
+pibrochs
+picador/7
+picaresque/9
+pica/7
+Picasso/6
+picayune/9
+Piccadilly/6
+piccalilli/7
+piccolo/7
+pickaback's
+pickaxe's
+pickax/26
+pickerel/7
+Pickering/6
+picker/207
+picketer/6
+picket/49
+Pickett/6
+Pickford/6
+pick/179
+pickle/26
+Pickman/6
+pickoff/9
+pickpocket/131
+pickup/7
+Pickwick/6
+picky/54
+picnicked
+picnicker/7
+picnicking
+picnic/7
+picofarad/7
+picojoule
+picoseconds
+picot/26
+Pict/6
+pictograph/6
+pictographs
+pictorialness/6
+pictorial/46
+picture/26
+picturesqueness/7
+picturesque/28
+piddle/17
+piddly
+pidgin/7
+piebald/9
+piece/111
+piecemeal
+piecer/6
+piecewise
+pieceworker/6
+piecework/96
+piedmont
+Piedmont/6
+pieing
+pie/7
+Pierce/6
+piercer/6
+pierce/179
+piercing/19
+Pierette/6
+pier/6
+Pier/6
+Pierre/6
+Pierrette/6
+Pierrot/6
+Pierson/6
+Pieter/6
+Pietra/6
+Pietrek/6
+Pietro/6
+piety/7
+piezoelectric
+piezoelectricity/6
+piffle/26
+pigeon/26
+pigeonhole/26
+pigged
+piggery/6
+pigging
+piggishness/7
+piggish/28
+piggyback/26
+Piggy/6
+piggy/80
+pigheadedness/9
+pigheaded/28
+piglet/7
+pigmentation/7
+pigment/26
+pig/489
+Pigmy's
+pigpen/7
+pigroot
+pigskin/7
+pigsty/7
+pigswill/6
+pigtail/56
+Pike/6
+pike/49
+piker/6
+pikestaff/7
+pilaf/7
+pilaster/7
+Pilate/6
+pilau's
+pilchard/7
+Pilcomayo/6
+pile/677
+pileup/7
+pilferage/7
+pilferer/6
+pilfer/23
+Pilgrim
+pilgrimage/26
+pilgrim/7
+piling/6
+pillage/23
+pillar/26
+pillbox/7
+pill/26
+pillion/26
+pillory/26
+pillowcase/7
+pillow/26
+pillowslip/9
+Pillsbury/6
+pilot/26
+pilothouse/7
+piloting/6
+pimento/7
+pimiento/7
+pimpernel/7
+pimp/116
+pimple/56
+pimplike
+pimply/678
+PIN
+pinafore/7
+pi�ata/9
+Pinatubo/6
+pinball/7
+Pincas/6
+pincer/17
+Pinchas/6
+pincher/6
+pinch/31
+pincushion/7
+Pincus/6
+Pindar/6
+pineapple/7
+pined/14
+Pinehurst/6
+pine/269
+pines/14
+pinfeather/7
+ping/570
+pinheaded/42
+pinhead/56
+pinhole/7
+pining/14
+pinion/165
+Pinkerton/6
+pinkeye/7
+pink/502
+pinkie/7
+pinkish/42
+pinkness/9
+pinko/7
+pinky's
+pinnacle/26
+pinnate
+pinned/12
+pinning/9
+Pinocchio/6
+Pinochet/6
+pinochle/7
+pi�on/9
+pinpoint/17
+pinprick/26
+pin's
+pinsetter/7
+Pinsky/6
+pinstripe/56
+pintail/7
+Pinter/6
+pint/175
+pinto/9
+pinup/7
+pin/302
+pinwheel/26
+pinyin
+Pinyin
+piny/54
+pioneer/26
+pion/6
+Piotr/6
+piousness/7
+pious/28
+pipeline/26
+pipe/7
+piper/6
+Piper/6
+Pipestone/6
+pipet's
+pipette/26
+pipework
+piping/86
+pipit/7
+pip/91
+Pip/114
+Pippa/6
+pipped
+pipping
+pippin/7
+Pippo/6
+Pippy/6
+pipsqueak/7
+piquancy/7
+piquantness/6
+piquant/28
+pique/26
+piracy/7
+Piraeus/6
+Pirandello/6
+piranha/7
+pirate/26
+piratical/19
+pirogi
+pirogies
+pirouette/26
+pis
+Pisa/6
+piscatorial
+Pisces/6
+Pisistratus/6
+pismire/7
+Pissaro/6
+piss/679
+pistachio/7
+piste/7
+pistillate
+pistil/7
+pistoleers
+pistole/6
+pistol/26
+piston/7
+pitapat/9
+pitapatted
+pitapatting
+pita/7
+Pitcairn/6
+pitchblende/7
+pitcher/6
+pitchfork/26
+pitching/6
+pitchman/6
+pitchmen
+pitch/23
+pitchstone/6
+piteousness/7
+piteous/28
+pitfall/7
+pithily
+pithiness/7
+pith/26
+piths
+pithy/98
+pitiableness/6
+pitiable/42
+pitiably
+pitier/6
+pitifuller
+pitifullest
+pitifulness/6
+pitiful/28
+pitilessness/7
+pitiless/28
+pitman/6
+pit/7
+Pitney/6
+piton/7
+pittance/7
+pitted
+pitting
+Pittman/6
+Pittsburgh/680
+Pittsfield/6
+Pitt/7
+Pittston/6
+pituitary/7
+pitying/19
+pity/49
+Pius/6
+pivotal/19
+pivot/26
+pivoting/6
+pix/17
+pixel/7
+pixie/7
+pixiness
+pixmap/7
+Pizarro/6
+pizazz/9
+pi/681
+pizza/7
+pizzeria/7
+pizzicati
+pizzicato
+pj's
+PJ's
+pk
+pkg
+pkt
+pkwy
+Pkwy
+pl
+placard/26
+placate/426
+placatory
+placeable/14
+placebo/7
+placed/682
+place/683
+placeholder/9
+placekick/17
+placeless/19
+placement/128
+placental/9
+placenta/7
+placer/82
+places/145
+placidity/7
+placidness/6
+placid/28
+placing/145
+placket/7
+plagiarism/7
+plagiarist/7
+plagiarize/23
+plagiary/7
+plagued/12
+plague/111
+plaguer/6
+plaice/6
+plaid/26
+plainclothes
+plainclothesman
+plainclothesmen
+Plainfield/6
+plainness/7
+plainsman/6
+plainsmen
+plainsong/7
+plainspoken
+plain/77
+plaintiff/7
+plaintiveness/6
+plaintive/28
+plaint/76
+Plainview/6
+plaiting/6
+plait/111
+planar
+planarity
+Planck/6
+plan/49
+planeload
+planer/6
+plane's
+plane/263
+planetarium/7
+planetary
+planetesimal/6
+planet/7
+planetoid/7
+plangency/9
+plangent
+planking/6
+plank/171
+plankton/7
+planned/12
+planner/7
+planning
+Plano
+planoconcave
+planoconvex
+Plantagenet/6
+plantain/7
+plantar
+plantation/7
+planter/7
+planting/9
+plantlike
+plant's
+plant/36
+plaque/7
+plash/26
+plasma/7
+plasmid/9
+plasm/6
+plasterboard/7
+plasterer/6
+plastering/6
+plaster/49
+plasterwork/6
+plastically
+plasticine
+Plasticine/6
+plasticity/7
+plasticize/17
+plastic/65
+plateau/26
+plateful/9
+platelet/7
+platen/6
+plater/6
+plate/7
+platform/26
+Plath/6
+plating/6
+platinize/17
+platinum/7
+platitude/7
+platitudinous/19
+plat/581
+Plato/6
+platonic
+Platonic
+Platonism/6
+Platonist
+platoon/26
+platted
+Platte/6
+platter/7
+Platteville/6
+platting
+platypus/7
+platys
+platy/54
+plaudit/7
+plausibility/9
+plausible/42
+plausibly
+Plautus/6
+playability/12
+playable/12
+playacting/6
+playact/71
+playback/7
+playbill/7
+Playboy/6
+playboy/7
+play/684
+played/14
+player's/25
+player/7
+playfellow/9
+playfulness/7
+playful/28
+playgirl/7
+playgoer/7
+playground/7
+playgroup/9
+playhouse/7
+playing/9
+playmate/7
+playoff/9
+playpen/7
+playroom/7
+plays/14
+Playtex/6
+plaything/7
+playtime/7
+playwright/7
+playwriting/6
+plaza/7
+pleader/118
+pleading/86
+plead/179
+pleasanter
+pleasantest
+pleasantness/41
+pleasantry/7
+pleasant/161
+pleased/147
+pleaser/6
+pleases/25
+please/19
+pleasingness/6
+pleasing/28
+plea/7
+pleas/187
+pleasurableness/6
+pleasurable/42
+pleasurably
+pleasureful
+pleasure/57
+pleasure's/25
+pleasures/25
+pleater/6
+pleat/111
+plebeian/16
+plebe/7
+plebiscite/7
+plectra
+plectrum/7
+pledger/6
+pledge/111
+Pleiads
+Pleistocene
+plenary/9
+plenipotentiary/9
+plenitude/7
+plenteousness/6
+plenteous/28
+plentifulness/6
+plentiful/28
+plenty/7
+plenum/6
+pleonasm/7
+plethora/7
+pleurae
+pleural
+pleura/6
+pleurisy/7
+Plexiglas/7
+plexus/7
+pliability/7
+pliableness/6
+pliable/42
+pliancy/7
+pliantness/6
+pliant/28
+plication/118
+plier/118
+plight/111
+plimsolls
+plinker/6
+plink/31
+plinth/6
+plinths
+Pliny/6
+Pliocene/9
+PLO
+plodded
+plodder/7
+plodding/16
+plod/9
+plopped
+plopping
+plop/7
+plosive
+plot/7
+plotted/14
+plotter/26
+plotting
+plover/7
+plowed/12
+plower/6
+plowman/6
+plowmen
+plow/49
+plowshare/7
+ploy's
+ploy/263
+plucker/6
+pluckily
+pluckiness/7
+pluck/31
+plucky/98
+pluggable
+plugged/13
+plugging/13
+plughole
+plug's
+plug/302
+plumage/56
+plumbago/6
+plumbed/12
+plumber/6
+plumbing/6
+plumb/91
+plume/7
+plummer
+plummest
+plummet/17
+plummy
+plumper/6
+plumpness/9
+plump/685
+plum/26
+plumy/54
+plunder/23
+plunger/6
+plunge/23
+plunker/6
+plunk/23
+pluperfect/9
+pluralism/7
+pluralistic
+pluralist/9
+plurality/7
+pluralization/7
+pluralize/23
+pluralizer/6
+plural/16
+plushness/7
+plush/290
+plushy/98
+plus/9
+plussed
+plussing
+Plutarch/6
+plutocracy/7
+plutocratic
+plutocrat/7
+Pluto/6
+plutonium/7
+pluvial/9
+ply/517
+Plymouth/6
+plywood/7
+pm
+PM
+Pm/6
+PMS
+pneumatically
+pneumatic/9
+pneumatics/6
+pneumonia/7
+PO
+poacher/6
+poach/23
+Pocahontas/6
+pocketbook/7
+pocketful/7
+pocketing/6
+pocketknife/6
+pocketknives
+pocket/111
+pock/26
+pockmark/26
+Pocono/7
+podcast/214
+podded
+podding
+podge/90
+Podgorica/6
+podiatrist/7
+podiatry/7
+podium/7
+pod/7
+Podunk/6
+Poe/6
+poem/7
+poesy/26
+poetaster/7
+poetess/7
+poetically
+poeticalness
+poetical/12
+poetic/9
+poetics/6
+poet/7
+poetry/7
+pogo
+Pogo/6
+pogrom/26
+poignancy/7
+poignant/19
+Poincar�/6
+poinciana/7
+Poindexter/6
+poinsettia/7
+pointblank
+pointedness/6
+pointed/28
+pointer/6
+pointillism/7
+pointillist/7
+pointing/6
+pointlessness/7
+pointless/28
+point/49
+pointy/54
+poise/6
+pois/17
+poi/7
+poisoner/6
+poisoning/6
+poisonous/28
+poison/91
+Poisson/6
+poke/23
+Pokemon/6
+pokerface/81
+poker/6
+poky/228
+Poland/6
+Polanski/6
+polarimeter/7
+polarimetry
+polariscope/6
+Polaris/6
+polarity/7
+polarization/186
+polarized/156
+polarize/23
+polarizes/169
+polarizing/169
+polarogram/7
+polarograph
+polarography/6
+Polaroid/7
+polar/9
+polecat/7
+polemical/19
+polemicist/9
+polemic/9
+polemics/6
+pole/7
+Pole/7
+poler/6
+polestar/9
+poleward/9
+pol/111
+policeman/6
+policemen/6
+police/26
+policewoman/6
+policewomen
+policyholder/7
+policymaker/9
+policymaking
+policy/7
+poliomyelitides
+poliomyelitis/6
+polio/7
+Polish
+polished/12
+polisher/6
+polish/179
+polis/6
+Politburo/6
+politburo/9
+politeness/7
+polite/33
+politesse/7
+politically
+political/12
+politician/7
+politicization/9
+politicize/263
+politicked
+politicking/7
+politico/7
+politic/9
+politics/6
+polity/7
+polka/26
+Polk/6
+pollack/7
+Pollard/6
+polled/12
+pollen/165
+pollinate/15
+pollination/6
+pollinator/7
+polliwog/7
+poll/686
+pollock's
+Pollock/7
+pollster/7
+pollutant/7
+polluted/12
+polluter/6
+pollute/307
+pollution/6
+Pollux/6
+Pollyanna/6
+Polly/6
+pollywog's
+Pol/86
+Polo/6
+polo/7
+polonaise/7
+polonium/7
+poltergeist/7
+poltroon/7
+polyandrous
+polyandry/7
+polyatomic
+polybutene/7
+polycarbonate
+polychemicals
+polychrome
+polyclinic/7
+polycrystalline
+polyelectrolytes
+polyester/7
+polyether/9
+polyethylene/7
+polygamist/7
+polygamous/19
+polygamy/7
+polyglot/9
+polygonal/19
+polygon/7
+polygraph/165
+polygraphs
+polygynous
+polyhedral
+polyhedron/7
+Polyhymnia/6
+polyisobutylene
+polyisocyanates
+polymath/6
+polymaths
+polymerase/9
+polymeric
+polymerization/7
+polymerize/17
+polymer/7
+polymorphic
+polymorphism/7
+polymorph/6
+polymyositis
+Polynesia/6
+Polynesian/9
+polynomial/65
+Polyphemus/6
+polyphonic
+polyphony/7
+polyphosphate/9
+polyp/7
+polypropylene/7
+polystyrene/7
+polysyllabic
+polysyllable/7
+polytechnic/7
+polytheism/7
+polytheistic
+polytheist/7
+polythene/6
+polytonal/19
+polytopes
+polyunsaturated
+polyurethane/7
+polyvinyl/7
+Po/6
+pomade/26
+pomander/7
+pomegranate/7
+Pomerania/6
+Pomeranian
+pommel/26
+Pomona/6
+Pompadour/6
+pompadour/56
+pompano/7
+Pompeian/9
+Pompeii/6
+Pompey/6
+pompom/7
+pompon's
+pomposity/7
+pompousness/9
+pompous/28
+pomp/7
+ponce/6
+Ponce/6
+Ponchartrain/6
+poncho/7
+ponderer/6
+ponderousness/7
+ponderous/28
+ponder/242
+pond/49
+pone/7
+pongee/7
+poniard/26
+pons/6
+Pontchartrain/6
+Pontiac/6
+Pontianak/6
+pontiff/7
+pontifical/16
+pontificate/15
+pontoon/26
+pony/26
+ponytail/7
+pooch/26
+poodle/7
+poof/7
+pooh/47
+Pooh/6
+poohs
+Poole/6
+pool/26
+poolroom/7
+poolside
+Poona/6
+poop/26
+poorboy
+poorhouse/7
+poorness/7
+poor/33
+popcorn/7
+Popek/7
+pope/7
+Pope/7
+Popeye/6
+popgun/7
+popinjay/7
+poplar/7
+poplin/7
+Popocatepetl/6
+popover/7
+poppa/7
+popped
+Popper/6
+popper/7
+poppet/6
+popping
+Poppins/6
+poppycock/7
+Poppy/6
+poppy/56
+poppyseed
+Popsicle/7
+pop/7
+populace/7
+popularism
+popularity/41
+popularization/7
+popularize/14
+popularized
+popularizer/7
+popularizes/12
+popularizing
+popular/16
+populate/345
+populated/13
+populates/14
+populating/14
+population/266
+populism/9
+populist/7
+populousness/7
+populous/28
+porcelain/7
+porch/7
+porcine
+porcupine/7
+pore/23
+Porfirio/6
+porgy/7
+poring/19
+porker/6
+porky/228
+pork/96
+pornographer/7
+pornographic
+pornographically
+pornography/7
+porno/9
+porn/9
+porosity/7
+porousness/7
+porous/28
+porphyritic
+porphyry/7
+porpoise/26
+porridge/7
+Porrima/6
+porringer/7
+Porsche/6
+portability/9
+portables
+portable/12
+portably
+port/687
+portage/48
+portaged
+portaging
+portal/7
+portamento/6
+portcullis/7
+ported/688
+Porte/6
+portend/17
+portentousness/6
+portentous/28
+portent/7
+porterage/6
+porter/165
+porterhouse/7
+Porter/6
+porter's/14
+portfolio/7
+porthole/7
+Portia/6
+porticoes
+portico/6
+Portie/6
+porti�re/7
+porting/25
+portion/594
+Portland/6
+portliness/7
+portly/98
+portmanteau/7
+Port/114
+P�rto/6
+portraitist/7
+portrait/7
+portraiture/7
+portrayal/7
+portrayer/6
+portray/31
+ports/688
+Portsmouth/6
+Portugal/6
+Portuguese/6
+portulaca/7
+Porty/6
+posed/190
+Poseidon/6
+poser/689
+poses/190
+poseur/7
+pose/690
+posh/181
+posing/190
+positifs
+positionable
+positional/691
+position/692
+position's/688
+positions/688
+positiveness/9
+positive/38
+positivism/6
+positivist/9
+positivity
+positron/7
+posit/263
+Posner/6
+posse/6
+possess/127
+possessed/28
+possession/128
+possessional
+possessiveness/7
+possessive/32
+possessor/7
+possibility/7
+possible/228
+possibly
+poss/9
+possum/7
+postage/7
+postal/9
+post/693
+postbag/6
+postbox/7
+postcard/7
+postcode/7
+postcondition/9
+postconsonantal
+postdate/17
+postdoctoral
+posteriori
+posterior/16
+posterity/7
+poster/7
+postfix/17
+postgraduate/7
+posthaste/9
+posthumousness/6
+posthumous/28
+posthypnotic
+postilion/7
+postindustrial
+posting/6
+postlude/7
+Post/6
+postman/6
+postmarital
+postmark/26
+postmaster/7
+postmen
+postmeridian
+postmistress/7
+postmodern
+postmodernist
+postmortem/9
+postnasal
+postnatal
+postoperative/19
+postorder
+postpaid
+postpartum
+postpone/8
+postponement/9
+postpositions
+postprandial
+post's
+postscript/7
+postsecondary
+postulate/15
+postulation/6
+postural
+posture/111
+posturer/6
+postvocalic
+postwar
+posy/7
+potability/7
+potableness/6
+potable/144
+potage/6
+potash/7
+potassium/7
+potatoes
+potato/6
+potbelly/56
+potboiler/6
+potboil/90
+pot/186
+Potemkin/6
+potency/7
+potentate/7
+potentiality/7
+potential/16
+potentiating
+potentiometer/7
+potent/16
+potful/7
+pothead/7
+potherb/7
+pother/26
+potholder/7
+pothole/26
+potholing/6
+pothook/7
+potion/7
+potlatch/7
+potluck/7
+Potomac/6
+potpie/7
+potpourri/7
+Potsdam/6
+potsherd/7
+potshot/9
+pottage/7
+Pottawatomie/6
+potted
+Potter/6
+potter/111
+pottery/7
+potting
+Potts/6
+potty/228
+pouch/26
+Poughkeepsie/6
+Poul/6
+poulterer/7
+poultice/26
+poultry/7
+pounce/17
+poundage/7
+pounder/7
+pound/694
+Pound/6
+pour/17
+pourer's
+Poussin/7
+pouter/6
+pout/23
+poverty/7
+POW
+powderpuff
+powder/111
+powdery
+Powell/6
+powerboat/7
+powerfulness/6
+powerful/28
+power/165
+powerhouse/7
+powerlessness/7
+powerless/28
+PowerPoint/6
+Powers
+Powhatan/6
+pow/90
+powwow/26
+pox/26
+Poznan/6
+pp
+PP
+ppm
+ppr
+PPS
+pr
+PR
+practicability/9
+practicable/42
+practicably
+practicality/7
+practicalness/6
+practical/46
+practice/101
+practiced/12
+practicer/6
+practicum/7
+practitioner/7
+Pradesh/6
+Prado/6
+Praetorian
+praetorian/9
+praetor/7
+pragmatical/19
+pragmatic/9
+pragmatics/6
+pragmatism/7
+pragmatist/7
+Prague/6
+Praia
+prairie/7
+praise/84
+praiser/9
+praise's
+praiseworthiness/7
+praiseworthy/42
+praising/19
+Prakrit/6
+praline/7
+pram/7
+prancer/6
+prance/23
+prancing/19
+prank/26
+prankster/7
+praseodymium/7
+Pratchett/6
+prate/23
+prater/6
+pratfall/7
+prating/19
+prattle/23
+prattler/6
+prattling/19
+Pratt/6
+Prattville/6
+Pravda/6
+prawn/26
+praxes
+praxis/6
+Praxiteles/6
+pray/23
+prayerbook
+prayerfulness/6
+prayerful/28
+prayer/6
+PRC
+preach/78
+preacher/6
+preaching/19
+preachment/7
+preachy/54
+preadolescence/9
+Preakness/6
+preallocate/15
+preallocation/6
+preallocator/9
+preamble/26
+preamp
+preamplifier/6
+prearrange/11
+prearrangement/7
+preassign/17
+preauthorize
+prebendary/6
+Precambrian
+precancel/17
+precancerous
+precariousness/7
+precarious/28
+precautionary
+precaution/26
+precede/17
+precedence/7
+precedented/12
+precedent/56
+preceptive/19
+preceptor/7
+precept/76
+precess/17
+precession/6
+precinct/7
+preciosity/7
+preciousness/9
+precious/46
+precipice/7
+precipitable
+precipitant/9
+precipitateness/6
+precipitate/148
+precipitation/6
+precipitousness/6
+precipitous/28
+preciseness/7
+precise/35
+precision/6
+pr�cis/165
+preclude/17
+preclusion/9
+precociousness/7
+precocious/28
+precocity/7
+precode/81
+precognition/7
+precognitive
+precollege/6
+precolonial
+precomputed
+preconceive/17
+preconception/7
+precondition/26
+preconscious
+precook/17
+precursor/7
+precursory
+precut
+predate/15
+predation/186
+predator/7
+predatory
+predecease/17
+predecessor/7
+predeclared
+predecline
+predefine/17
+predefinition/7
+predesignate/17
+predestination/7
+predestine/17
+predetermination/7
+predeterminer/6
+predetermine/23
+predicable/9
+predicament/7
+predicate/24
+predication/6
+predicator
+predictability/41
+predictable/12
+predictably/12
+predict/160
+predicted/12
+prediction/7
+predictive/19
+predictor/7
+predigest/17
+predilect
+predilection/7
+predispose/17
+predisposition/7
+predoctoral
+predominance/7
+predominant/19
+predominate/565
+predomination/6
+preemie/7
+preeminence/7
+preeminent/19
+preemployment/6
+preempt/64
+preemption/7
+preemptive/19
+preemptor/6
+preener/6
+preen/31
+preexist/17
+preexistence/7
+preexistent
+prefabbed
+prefabbing
+prefab/7
+prefabricate/15
+prefabrication/6
+preface/111
+prefacer/6
+prefatory
+prefect/7
+prefecture/7
+preferableness/6
+preferable/42
+preferably
+prefer/695
+preference/7
+preferential/19
+preferment/7
+preferred
+preferring
+prefiguration/6
+prefigure/17
+prefix/26
+preflight/26
+preform/17
+pref/90
+pregnancy/7
+pregnant/19
+preheat/17
+prehensile
+prehistoric
+prehistorical/19
+prehistory/7
+preindustrial
+preinitialize/17
+preinterview/6
+preisolated
+prejudge/31
+prejudger/6
+prejudgment/7
+prejudiced/12
+prejudice/26
+prejudicial/28
+prekindergarten/7
+prelacy/7
+prelate/7
+preliminarily
+preliminary/9
+preliterate/9
+preloaded
+prelude/111
+preluder/6
+premarital/19
+premarket
+prematureness/6
+premature/46
+prematurity/6
+premedical
+premeditated/19
+premeditate/24
+premeditation/6
+premed/9
+premenstrual
+premiere/7
+premier/26
+premiership/7
+Preminger/6
+premise/26
+premiss's
+premium/7
+premix/17
+premolar/9
+premonition/7
+premonitory
+prenatal/19
+Pren/6
+Prenticed/6
+Prentice/165
+Prenticing/6
+Prentiss/6
+Prent/6
+prenuptial
+preoccupation/7
+preoccupy/17
+preoperative
+preordain/11
+prepackage/17
+prepaid
+preparation/7
+preparative/65
+preparatory
+preparedly
+preparedness/41
+prepared/236
+prepare/23
+prepay/661
+prepayment/7
+prepender/9
+prepends
+preplanned
+preponderance/7
+preponderant/19
+preponderate/565
+prepositional/19
+preposition/26
+prepossess/17
+prepossessing/12
+prepossession/7
+preposterousness/6
+preposterous/28
+prepped
+prepping
+preppy/228
+preprepared
+preprint/26
+preprocessed
+preprocessing
+preprocessor/9
+preproduction
+preprogrammed
+prep/7
+prepubescence/9
+prepubescent/9
+prepublication/6
+prepuce/7
+prequel/9
+preradiation
+prerecord/17
+preregister/17
+preregistration/7
+prerequisite/7
+prerogative/56
+Pres
+presage/111
+presager/6
+presbyopia/7
+presbyterian
+Presbyterianism/9
+Presbyterian/9
+presbyter/7
+presbytery/7
+preschool/110
+prescience/7
+prescient/19
+Prescott/6
+prescribed/12
+prescriber/6
+prescribe/31
+prescription/7
+prescriptive/19
+prescript/76
+preselect/17
+presence/7
+presentableness/6
+presentable/42
+presentably/14
+presentational/14
+presentation/48
+presented/14
+presenter/14
+presentiment/7
+presentment/7
+presents/14
+present/696
+preservationist/9
+preservation/7
+preservative/7
+preserve/67
+preserved/12
+preserver/6
+preset/9
+presetting
+preshrank
+preshrink/166
+preshrunk
+preside/31
+presidency/7
+presidential/19
+president/7
+presider/6
+presidia
+presidium/6
+Presley/6
+presoaks
+presort/17
+pres/9
+press/311
+pressed/12
+presser/7
+pressingly/169
+pressing/16
+pressman/6
+pressmen
+pressure/26
+pressurization/7
+pressurize/23
+pressurized/12
+prestidigitate/107
+prestidigitation/6
+prestidigitatorial
+prestidigitator/6
+prestige/7
+prestigious/28
+Preston/6
+presto/9
+presumably
+presume/318
+presumer/6
+presuming/19
+presumption/7
+presumptive/19
+presumptuousness/7
+presumptuous/28
+presuppose/17
+presupposition/9
+pretax
+preteen/9
+pretended/19
+pretender/6
+pretending/12
+pretend/23
+pretense/697
+pretension/165
+pretentiousness/9
+pretentious/161
+preterite's
+preterit/7
+preternatural/19
+pretest/17
+pretext/26
+Pretoria/6
+pretreated
+pretreatment/9
+pretrial
+prettify/17
+prettily
+prettiness/7
+pretty/226
+pretzel/7
+prevailing/19
+prevail/17
+prevalence/7
+prevalent/16
+prevaricate/15
+prevaricator/7
+preventable/12
+preventably
+preventative/9
+prevent/698
+preventer/6
+prevention/7
+preventiveness/6
+preventive/46
+preview/49
+previous/19
+prevision/26
+prewar
+prexes
+preyer's
+prey/26
+Priam/6
+priapic
+Pribilof/6
+price/36
+priced/12
+priceless
+Price/6
+pricer/7
+price's
+pricey
+pricier
+priciest
+pricker/6
+pricking/6
+prickle/26
+prickliness/9
+prickly/98
+prick/284
+prideful/19
+pride/26
+prier/6
+priestess/7
+priesthood/7
+Priestley/6
+priestliness/7
+priestly/98
+priest/116
+prigged
+prigging
+priggishness/9
+priggish/218
+prig/7
+primacy/7
+primal
+primarily
+primary/7
+primate/7
+primed/12
+primely/6
+primeness/6
+prime/46
+primer/6
+Prime's
+primeval/19
+priming/6
+primitiveness/7
+primitive/46
+primitivism/6
+primmed
+primmer
+primmest
+primming
+primness/7
+primogenitor/7
+primogeniture/7
+primordial/16
+primp/17
+primrose/26
+prim/610
+princedom/7
+princeliness/7
+princely/98
+Prince/6
+prince/65
+princess/7
+Princeton/6
+principality/7
+principal/16
+Principe/6
+Principia/6
+principled/12
+principle/26
+printable/12
+printably
+print/395
+printed/12
+printer/118
+printers
+printing/7
+printmaker/6
+printmake/174
+printmaking/6
+printout/9
+Prinz/6
+prioress/7
+priori
+prioritize/179
+priority/7
+prior/16
+priory/7
+Pris
+Prisca/6
+Priscella/6
+Priscilla/6
+prised
+prise/699
+prismatic
+prism/7
+prison/49
+prisoner/6
+Prissie/6
+prissily
+prissiness/7
+prissy/177
+pristine/19
+prithee/9
+privacy/7
+privateer/26
+privateness/6
+private/700
+privation/186
+privative/19
+privatization/9
+privatize/17
+privet/7
+privileged/12
+privilege/26
+privily
+privy/80
+prized/14
+prize/49
+prizefighter/6
+prizefighting/6
+prizefight/198
+prizewinner/9
+prizewinning
+Pr/72
+PRO
+proactive/19
+probabilist
+probabilistic
+probabilistically
+probability/7
+probable/9
+probably
+probated/14
+probate/701
+probates/14
+probating/14
+probational
+probationary/9
+probationer/6
+probation/231
+probation's/14
+probative/14
+prober/6
+probity/7
+problematical/10
+problematic/9
+problem/7
+proboscis/7
+prob/702
+procaine/7
+procedural/16
+procedure/7
+proceeder/6
+proceeding/6
+proceed/187
+process/57
+processed/13
+processes/14
+processional/16
+procession/47
+processor/7
+proclamation/7
+proclivity/7
+proconsular
+procrastinate/15
+procrastination/6
+procrastinator/7
+procreational
+procreatory
+procrustean
+Procrustean
+Procrustes/6
+proctor/26
+proctorial
+procurable/12
+procure/329
+procurement/7
+Procyon/6
+prodded
+prodding
+prodigality/9
+prodigal/16
+prodigiousness/6
+prodigious/28
+prodigy/7
+prod/9
+produce/119
+producer/118
+producible/14
+production/48
+productively/13
+productiveness/7
+productive/28
+productivities
+productivity/14
+productivity's
+productize/23
+product/130
+Prof
+profanation/9
+profaneness/7
+profane/462
+profanity/7
+professed/19
+professionalism/7
+professionalize/17
+professional/514
+profession/7
+professorial/19
+professorship/7
+professor/7
+proffer/17
+proficiency/7
+proficient/16
+profitability/7
+profitableness/135
+profitable/236
+profitably/12
+profiteer/26
+profiterole/7
+profit/109
+profitless
+profligacy/9
+profligate/16
+proforma/9
+profoundity
+profoundness/7
+profound/33
+prof/9
+profundity/7
+profuseness/7
+profuse/28
+progenitor/7
+progeny/6
+progesterone/7
+prognathous
+prognoses
+prognosis/6
+prognosticate/24
+prognostication/6
+prognosticator/9
+prognostic/9
+program/257
+programed
+programing
+programmability
+programmable/9
+programmed/190
+programmer/48
+programming/190
+programmings
+progression/7
+progressiveness/7
+progressive/46
+progressivism
+progress/163
+prohibiter/6
+prohibitionist/7
+prohibition/7
+Prohibition/7
+prohibitiveness/6
+prohibitive/28
+prohibitory
+prohibit/29
+projected/13
+projectile/7
+projectionist/7
+projection/7
+projective/19
+project/163
+projector/7
+Prokofieff/6
+Prokofiev/6
+prolegomena
+proletarianization/6
+proletarianized
+proletarian/9
+proletariat/7
+proliferate/24
+proliferation/6
+prolifically
+prolific/42
+prolixity/7
+prolix/19
+prologize
+prologue/26
+prologuize
+prolongate/15
+prolongation/6
+prolonger/6
+prolong/224
+promenade/49
+promenader/6
+Promethean
+Prometheus/6
+promethium/7
+prominence/7
+prominent/19
+promiscuity/7
+promiscuousness/6
+promiscuous/28
+promise/47
+promising/10
+promissory
+promontory/7
+promote/703
+promoter/6
+promotiveness/6
+promotive/42
+prompted/12
+prompter/6
+promptitude/7
+promptness/7
+prompt/223
+pro/7
+promulgate/15
+promulgation/6
+promulgator/7
+pron
+proneness/7
+prone/28
+pronghorn/7
+prong/26
+pronominalization
+pronominalize
+pronounceable/12
+pronouncedly
+pronounced/12
+pronounce/8
+pronouncement/7
+pronouncer/6
+pronto
+pronunciation/7
+proofed/14
+proofer
+proofing/6
+proofreader/6
+proofread/227
+proof/128
+propaganda/7
+propagandistic
+propagandist/7
+propagandize/17
+propagated/12
+propagate/24
+propagation/6
+propagator/7
+propellant/7
+propelled
+propeller/7
+propelling
+propel/9
+propensity/7
+properness/6
+proper/33
+propertied/12
+property/56
+prophecy/7
+prophesier/6
+prophesy/23
+prophetess/9
+prophetic
+prophetical/19
+prophet/7
+prophylactic/9
+prophylaxes
+prophylaxis/6
+propinquity/7
+propionate/6
+propitiate/15
+propitiatory
+propitiousness/6
+propitious/28
+proponent/7
+proportionality/6
+proportional/16
+proportionate/704
+proportioner/6
+proportion/74
+proportionment/6
+proposal/7
+propped
+propping
+proprietary/9
+proprietorial
+proprietorship/7
+proprietor/7
+proprietress/7
+propriety/7
+proprioception
+proprioceptive
+prop/705
+propulsion/7
+propulsive
+propylene/6
+prorogation/7
+prorogue
+prosaic
+prosaically
+proscenium/7
+prosciutti
+prosciutto/7
+proscription/7
+proscriptive
+pros/31
+prosecute/376
+prosecution/6
+prosecutor/7
+proselyte/26
+proselytism/7
+proselytize/23
+prose/6
+proser/6
+Proserpine/6
+prosodic/9
+prosody/7
+prospect/163
+prospection/7
+prospectiveness/6
+prospective/46
+prospector/7
+prospectus/7
+prosper/17
+prosperity/7
+prosperousness/6
+prosperous/28
+prostate
+prostheses
+prosthesis/6
+prosthetic/9
+prosthetics/6
+prostitute/269
+prostitution/6
+prostrate/15
+prostration/6
+prosy/54
+protactinium/7
+protagonist/7
+Protagoras/6
+protean/9
+protease/6
+protect/64
+protected/10
+protectionism/7
+protectionist/7
+protection/7
+protectiveness/9
+protective/46
+protectorate/7
+protector/7
+prot�g�es
+prot�g�/7
+protein/7
+proteolysis/6
+proteolytic
+Proterozoic/6
+protestantism
+Protestantism/7
+protestant/9
+Protestant/7
+protestation/7
+protest/224
+protesting/19
+Proteus/6
+protocol/26
+protoplasmic
+protoplasm/7
+prototype/26
+prototypic
+prototypical/19
+protozoa
+protozoan/7
+protozoic
+protozoon's
+protract/47
+protrude/17
+protrusile
+protrusion/7
+protrusive/28
+protuberance/9
+protuberant
+Proudhon/6
+proud/93
+Proust/6
+provabilities
+provability's
+provability/12
+provableness/6
+provable/42
+provably
+prov/109
+proved/12
+proven/12
+prove/127
+provenance/7
+Proven�al
+Provencals
+Provence/6
+provender/17
+provenience/7
+provenly
+proverb/47
+proverbial/19
+Proverbs/6
+prover/6
+provide/67
+provided/12
+providence/7
+Providence/7
+providential/19
+provident/19
+provider/6
+province/7
+provincialism/7
+provincial/16
+provisional/16
+provisioner/6
+provision/164
+proviso/7
+provocateur/9
+provocativeness/7
+provocative/42
+provoked/12
+provoke/23
+provoking/19
+provolone/7
+Provo/6
+provost/7
+prowess/7
+prowler/6
+prowl/23
+prow/80
+proximal/19
+proximateness/6
+proximate/28
+proximity/7
+Proxmire/6
+proxy/7
+Prozac
+prude/7
+Prudence/6
+prudence/7
+Prudential/6
+prudential/16
+prudent/19
+prudery/7
+Prudi/6
+prudishness/7
+prudish/28
+Prudy/6
+Prue/6
+Pruitt/6
+Pru/6
+prune/49
+pruner/6
+prurience/7
+prurient/19
+Prussia/6
+Prussian/9
+prussic
+Prut/6
+Pryce/6
+pry/706
+pryer's
+prying/19
+P's
+PS
+p's/14
+psalmist/7
+psalm/26
+Psalms/6
+psalter
+Psalter/7
+psaltery/7
+psephologist/6
+pseudonymous
+pseudonym/7
+pseudopod
+pseudo/9
+pseudoscience/9
+pshaw/17
+psi/9
+psittacoses
+psittacosis/6
+psoriases
+psoriasis/6
+psst/9
+PST
+psychedelically
+psychedelic/9
+psyche/6
+Psyche/6
+psychiatric
+psychiatrist/7
+psychiatry/7
+psychical/19
+psychic/7
+psychoacoustic/9
+psychoacoustics/6
+psychoactive
+psychoanalysis/6
+psychoanalyst/9
+psychoanalytic
+psychoanalytical
+psychoanalyze/17
+psychobabble/9
+psychobiology/6
+psychocultural
+psychodrama/7
+psychogenic
+psychokinesis/6
+psycholinguistic/9
+psycholinguistics/6
+psycholinguists
+psychological/19
+psychologist/7
+psychology/7
+psychometric/9
+psychometrics/6
+psychometry/6
+psychoneuroses
+psychoneurosis/6
+psychopathic/9
+psychopath/6
+psychopathology/6
+psychopaths
+psychopathy/7
+psychophysical/19
+psychophysic/9
+psychophysics/6
+psychophysiology/6
+psychosis/6
+psycho/7
+psychosocial/19
+psychosomatic/9
+psychosomatics/6
+psychos/9
+psychotherapeutic/9
+psychotherapist/7
+psychotherapy/7
+psychotically
+psychotic/9
+psychotropic/9
+psychs
+psych/17
+PT
+PTA
+Ptah/6
+ptarmigan/7
+pt/169
+pterodactyl/7
+Pt/6
+PTO
+Ptolemaic
+Ptolemaists
+Ptolemy/7
+ptomaine/7
+Pu
+pubbed
+pubbing
+pubertal
+puberty/7
+pubes
+pubescence/9
+pubescent
+pubic
+pubis/6
+publican/48
+publication/48
+publicist/7
+publicity/7
+publicized/12
+publicize/17
+publicness/6
+publics/14
+public/46
+publishable/12
+published/13
+publisher/48
+publishes/14
+publishing/6
+publish/234
+pub/7
+Puccini/6
+puce/7
+pucker/47
+Puckett/6
+puck/49
+puckishness/9
+puckish/28
+Puck/6
+pudding/7
+puddle/211
+puddler/6
+puddling/6
+puddly
+pudenda
+pudendum/6
+pudginess/7
+pudgy/98
+Puebla/6
+Pueblo/7
+pueblo/7
+puerile/19
+puerility/7
+puerperal
+puers
+Puerto/6
+puffball/7
+puffer/6
+puffery/6
+puffiness/9
+puffin/7
+Puff/6
+puff/49
+puffy/98
+Puget/6
+pugged
+pugging
+Pugh/6
+pugilism/7
+pugilistic
+pugilist/9
+pug/7
+pugnaciousness/7
+pugnacious/28
+pugnacity/7
+puissant/19
+puke/17
+pukka
+Pulaski/7
+pulchritude/7
+pulchritudinous/6
+pule/17
+Pulitzer/7
+pullback/9
+pull/179
+pullet/7
+pulley/7
+Pullman/7
+pullout/9
+pullover/7
+pulmonary
+pulpiness/9
+pulpit/7
+pulp/111
+pulpwood/7
+pulpy/98
+pulsar/7
+pulsate/15
+pulsation/6
+pulse/36
+pulser
+pulse's
+pulverable
+pulverization/7
+pulverized/12
+pulverize/23
+pulverizer/6
+pulverizes/13
+puma/7
+pumice/26
+pummel/17
+pumpernickel/7
+pump/49
+pumping/6
+pumpkin/7
+punchbowl/6
+punched/12
+puncheon/7
+puncher/6
+punch/234
+punchline/9
+Punch/6
+punchy/54
+punctilio/7
+punctiliousness/7
+punctilious/28
+punctualities
+punctuality/135
+punctualness/6
+punctual/28
+punctuate/15
+punctuational
+punctuation/6
+puncture/26
+punditry/9
+pundit/7
+pungency/7
+pungent/19
+Punic
+puniness/7
+punished/12
+punisher/6
+punishment/7
+punish/113
+punitiveness/6
+punitive/28
+Punjabi/6
+Punjab/6
+punk/80
+punky/707
+pun/7
+punned
+punning
+punster/7
+punter/6
+punt/49
+puny/98
+pupae
+pupal
+pupa/6
+pupate/55
+pupillage/6
+pupil/7
+pup/7
+pupped
+puppeteer/7
+puppetry/7
+puppet/7
+pupping
+puppy/26
+puppyish
+purblind
+Purcell/6
+purchasable
+purchase/36
+purchaser/7
+purdah/6
+purdahs
+Purdue/6
+purebred/9
+puree/56
+pureeing
+pureness/7
+pure/604
+purgation/6
+purgative/7
+purgatorial
+purgatory/7
+purge/23
+purger/6
+purify/115
+Purim/7
+Purina/6
+purine/7
+purism/7
+puristic
+purist/7
+puritanic
+puritanical/19
+Puritanism/7
+puritanism/9
+puritan/7
+Puritan/7
+purity/7
+purlieu/7
+purl/26
+purloin/31
+purloiner/6
+purple/172
+purplish
+purport/23
+purported/19
+purposefulness/9
+purposeful/28
+purposelessness/6
+purposeless/28
+purpose/708
+purposiveness/6
+purposive/28
+purr/17
+purring/19
+purse/49
+purser/6
+pursuance/7
+pursuant
+pursuer/6
+pursue/23
+pursuit/7
+purulence/7
+purulent
+Purus
+purveyance/7
+purvey/17
+purveyor/7
+purview/7
+Pusan/6
+Pusey/6
+pushbutton/9
+pushcart/7
+pushchair/7
+pushdown
+push/67
+pusher/6
+pushily
+pushiness/7
+Pushkin/6
+pushover/7
+Pushtu/6
+pushy/98
+pusillanimity/7
+pusillanimous/19
+pus/7
+puss/9
+pussycat/9
+pussyfoot/17
+pussy/80
+pustular
+pustule/7
+putative/19
+Putin/6
+put/230
+Putnam/6
+Putnem/6
+putout/9
+putrefaction/7
+putrefactive
+putrefy/17
+putrescence/7
+putrescent
+putridity/6
+putridness/6
+putrid/28
+putsch/9
+putted/45
+puttee/7
+putter/259
+putting/45
+putt/49
+puttying/6
+putty/26
+puzzle/78
+puzzlement/7
+puzzler/6
+PVC
+pvt
+Pvt/6
+PW
+PX
+p/709
+Pygmalion/6
+pygmy/7
+Pygmy/7
+Pyhrric/6
+pyknotic
+Pyle/6
+pylon/7
+pylori
+pyloric
+pylorus/6
+Pym/6
+Pynchon/6
+Pyongyang/6
+pyorrhea/7
+Pyotr/6
+pyramidal/19
+pyramid/26
+pyre/7
+Pyrenees
+Pyrex/7
+pyridine/6
+pyrimidine/7
+pyrite/7
+pyroelectric
+pyroelectricity/7
+pyrolysis/6
+pyrolyze/175
+pyromaniac/7
+pyromania/7
+pyrometer/7
+pyrometry/6
+pyrophosphate/6
+pyrotechnical
+pyrotechnic/9
+pyrotechnics/6
+pyroxene/6
+pyroxenite/6
+Pyrrhic
+Pythagoras/6
+Pythagorean/9
+Pythias
+Python/6
+python/7
+pyx/26
+q
+Q
+QA
+Qaddafi/6
+Qantas/6
+Qatar/6
+QB
+QC
+QED
+Qingdao
+Qiqihar/6
+QM
+Qom/6
+qr
+q's
+Q's
+qt
+qty
+qua
+Quaalude/6
+quackery/7
+quackish
+quack/17
+quadded
+quadding
+quadrangle/7
+quadrangular/6
+quadrant/7
+quadraphonic/9
+quadrapole
+quadratical/19
+quadratic/7
+quadrature/7
+quadrennial/16
+quadrennium/7
+quadric
+quadriceps/7
+quadrilateral/9
+quadrille/269
+quadrillion/140
+quadripartite/220
+quadriplegia/7
+quadriplegic/7
+quadrivia
+quadrivium/6
+quadrupedal
+quadruped/7
+quadruple/17
+quadruplet/7
+quadruplicate/17
+quadruply/107
+quadrupole
+quad/7
+quadword/7
+quaffer/6
+quaff/31
+quagmire/26
+quahog/7
+quail/26
+quaintness/7
+quaint/33
+quake/23
+Quakeress/6
+Quakerism/9
+Quaker/7
+quaky/54
+qualification/82
+qualified/10
+qualifier/7
+qualify/87
+qualitative/19
+quality/7
+qualmish
+qualm/7
+quandary/7
+quangos
+quanta/6
+Quantico/6
+quantifiable/12
+quantified/12
+quantifier/6
+quantify/115
+quantile/9
+quantitativeness/6
+quantitative/28
+quantity/7
+quantization/7
+quantizer/6
+quantize/23
+quantum/6
+quarantine/26
+quark/7
+quarreler/6
+quarrellings
+quarrelsomeness/7
+quarrelsome/28
+quarrel/49
+quarrier/6
+quarryman/6
+quarrymen
+quarry/111
+quarterback/26
+quarterdeck/7
+quarterer/6
+quarterfinal/7
+quartering/6
+quarterly/9
+quartermaster/7
+quarter/258
+quarterstaff/6
+quarterstaves
+quartet/7
+quartic/9
+quartile/7
+quarto/7
+quart/96
+quartzite/6
+quartz/7
+quasar/7
+quash/17
+quasi
+quasilinear
+Quasimodo/6
+Quaternary
+quaternary/9
+quaternion/7
+quatrain/7
+quaver/17
+quavering/19
+quavery
+Quayle/6
+quayside/6
+quay/7
+queasily
+queasiness/7
+queasy/98
+Quebec/6
+Quechua/6
+Queenie/6
+queenly/54
+queen/116
+Queensland/6
+Queen/7
+queerness/9
+queer/77
+queller/6
+quell/31
+Que/6
+quenchable/12
+quenched/12
+quencher/6
+quench/67
+quenchless
+Quentin/6
+Quent/6
+Querida/6
+quern/6
+querulousness/9
+querulous/28
+query/111
+quested/14
+quester/63
+quester's
+quest/710
+questing
+questionableness/6
+questionable/42
+questionably/12
+questioned/13
+questioner/6
+questioning/10
+questionnaire/7
+question/182
+quests/14
+Quetzalcoatl/6
+queued/169
+queue/49
+queuer/6
+queues/169
+queuing/169
+Quezon/6
+quibble/23
+quibbler/6
+quiche/7
+quicken/52
+quickie/7
+quicklime/7
+quickness/7
+quick/35
+quicksand/7
+quicksilver/26
+quickstep/7
+quid/7
+quiesce/81
+quiescence/7
+quiescent/28
+quieted/25
+quieten/17
+quieter/25
+quieter's
+quieting/25
+quietly/25
+quietness/7
+quiets/25
+quietude/21
+quietus/7
+quiet/711
+Quillan/6
+quill/26
+Quill/6
+quilter/6
+quilting/6
+quilt/91
+quincentenary/6
+quince/7
+Quincey/6
+quincy/6
+Quincy/6
+quinine/7
+Quinlan/6
+Quinn/6
+quinquennial/19
+quinsy/7
+Quinta/6
+Quintana/6
+quintessence/7
+quintessential/19
+quintet/7
+quintic
+quintile/7
+Quintilian/6
+Quintilla/6
+quintillion/140
+quintillionth/6
+Quintina/6
+Quintin/6
+Quint/6
+quint/7
+Quinton/6
+quintuple/17
+quintuplet/7
+Quintus/6
+quip/7
+quipped
+quipper
+quipping
+quipster/7
+quired/58
+quire/26
+quires/58
+Quirinal/6
+quiring/58
+quirkiness/7
+quirk/26
+quirky/98
+quirt/26
+Quisling/6
+quisling/7
+quitclaim/26
+quit/17
+quite/36
+Quito/6
+quittance/7
+quitter/7
+quitting
+quiver/17
+quivering/19
+quivery
+Quixote/6
+quixotic
+quixotically
+Quixotism/6
+quiz/6
+quizzed
+quizzer/7
+quizzes
+quizzical/19
+quizzing
+quo/540
+quoin/26
+quoit/26
+quondam
+quonset
+Quonset
+quorate/45
+quorum/7
+quotability/9
+quota/7
+quotation/7
+quoter/6
+quote/180
+quot/428
+quotidian/9
+quotient/7
+qwerty
+qwertys
+Rabat/6
+rabbet/26
+Rabbi/6
+rabbi/7
+rabbinate/7
+rabbinic
+rabbinical/19
+rabbiter/6
+rabbit/111
+rabble/111
+rabbler/6
+Rabelaisian
+Rabelais/6
+rabidness/7
+rabid/28
+rabies
+Rabi/6
+Rabin/6
+rabis
+Rab/6
+raccoon/7
+racecourse/7
+racegoers
+racehorse/7
+raceme/7
+race/91
+racer/6
+racetrack/175
+raceway/7
+Rachael/6
+Rachele/6
+Rachelle/6
+Rachel/6
+Rachmaninoff/6
+racialism/7
+racialist/7
+racial/19
+racily
+Racine/6
+raciness/7
+racism/9
+racist/7
+racketeer/171
+racket/26
+rackety
+rack/111
+raconteur/7
+racoon's
+racquetball/9
+racquet's
+racy/98
+radarscope/7
+radar/7
+Radcliffe/6
+radded
+radder
+raddest
+Raddie/6
+radding
+Raddy/6
+radial/16
+radiance/7
+radian/7
+radiant/16
+radiate/108
+radiation/6
+radiative/19
+radiator/7
+radicalism/7
+radicalization/9
+radicalize/17
+radicalness/6
+radical/46
+radices's
+radii/6
+radioactive/19
+radioactivity/7
+radioastronomical
+radioastronomy
+radiocarbon/7
+radiochemical/19
+radiochemistry/6
+radiogalaxy/9
+radiogram/7
+radiographer/7
+radiographic
+radiography/7
+radioisotope/7
+radiologic
+radiological/19
+radiologist/7
+radiology/7
+radioman/6
+radiomen
+radiometer/7
+radiometric
+radiometry/7
+radionics
+radionuclide/6
+radiopasteurization
+radiophone/7
+radiophysics
+radioscopy/7
+radio/26
+radiosonde/7
+radiosterilization
+radiosterilized
+radiotelegraph
+radiotelegraphs
+radiotelegraphy/7
+radiotelephone/7
+radiotherapist/7
+radiotherapy/7
+radish/7
+radium/7
+radius/6
+radix/7
+Rad/6
+radon/7
+rad/9
+Raeann/6
+Rae/6
+RAF
+Rafaela/6
+Rafaelia/6
+Rafaelita/6
+Rafaellle/6
+Rafaello/6
+Rafael/6
+Rafa/6
+Rafe/6
+Raffaello/6
+Raffarty/6
+Rafferty/6
+raffia/7
+raffishness/7
+raffish/28
+raffle/26
+Raff/6
+Rafi/6
+Raf/6
+rafter/170
+raft/49
+raga/7
+ragamuffin/7
+ragbag/7
+rage/7
+raggedness/7
+ragged/33
+raggedy/54
+ragging
+rag/26
+raging/19
+raglan/7
+Ragnar/6
+Ragnar�k
+ragout/26
+ragtag/7
+ragtime/7
+ragweed/7
+ragwort/6
+Rahal/6
+rah/47
+Rahel/6
+rahs
+raider/6
+raid/49
+railbird/9
+rail/263
+railer/7
+railhead/7
+railing/7
+raillery/7
+railroader/6
+railroading/6
+railroad/91
+rail's
+railwaymen
+railway/7
+raiment/7
+Raimondo/6
+Raimund/6
+Raimundo/6
+Raina/6
+rainbow/7
+raincloud/9
+raincoat/7
+raindrop/7
+Raine/114
+Rainer/6
+rainfall/7
+rainforest's
+rain/26
+Rainier/6
+rainless
+rainmaker/7
+rainmaking/7
+rainproof/17
+rainstorm/7
+rainwater/7
+rainy/54
+raise/23
+raiser/6
+raising/6
+raisin/7
+rajah/6
+rajahs
+Rajive/6
+raj/6
+Rakel/6
+rake/111
+raker/6
+rakishness/7
+rakish/28
+Raleigh/6
+Ralf/6
+Ralina/6
+rally/17
+Ralph/6
+Ralston/6
+Ra/6
+Ramada/6
+Ramadan/7
+Ramakrishna/6
+Rama/6
+Raman/6
+Ramayana/6
+ramble/179
+rambler/6
+rambling/19
+Rambo/6
+rambunctiousness/9
+rambunctious/28
+ramekin/7
+ramie/7
+ramification/6
+ramify/15
+Ramirez/6
+Ramiro/6
+ramjet/7
+Ram/6
+rammed
+ramming
+Ramo/7
+Ramona/6
+Ramonda/6
+Ramon/6
+rampage/17
+rampancy/9
+rampant/19
+rampart/26
+ramp/26
+ramrodded
+ramrodding
+ramrod/7
+RAM/9
+Ramsay/6
+Ramses/6
+Ramsey/6
+ramshackle
+ram/7
+rams/9
+ran/14
+Rana/6
+Rancell/6
+Rance/6
+rancher/6
+rancho/7
+ranch/91
+rancidity/7
+rancidness/7
+rancid/42
+rancorous/19
+rancor/7
+Randall/6
+Randal/6
+Randa/6
+Randee/6
+Randell/6
+Randene/6
+Randie/6
+Randi/6
+randiness/9
+Rand/6
+rand/26
+Randolf/6
+Randolph/6
+randomization/7
+randomize/31
+randomness/7
+random/46
+Randy/6
+randy/177
+Ranee/6
+ranee/7
+ranged/169
+rangeland/9
+ranger/6
+ranges/169
+range/7
+rang/242
+ranginess/9
+ranging/169
+Rangoon/6
+rangy/98
+Rania/6
+Ranice/6
+Ranier/6
+Rani/114
+Ranique/6
+rani's
+ranked/12
+ranker/6
+rank/524
+Rankine/6
+ranking/6
+Rankin/6
+rankle/17
+rankness/7
+Ranna/6
+ransacker/6
+ransack/31
+Ransell/6
+ransomer/6
+Ransom/6
+ransom/49
+ranter/6
+rant/179
+ranting/19
+Raoul/6
+rapaciousness/7
+rapacious/28
+rapacity/7
+rapeseed/6
+rape/7
+Raphaela/6
+Raphael/6
+rapidity/7
+rapidness/9
+rapid/38
+rapier/7
+rapine/7
+rapist/7
+rap/49
+rapped
+rappelled
+rappelling
+rappel/9
+rapper/7
+rapping/6
+rapporteur/7
+rapport/7
+rapprochement/7
+rapscallion/7
+raptness/9
+rapture/26
+rapturousness/6
+rapturous/28
+rapt/28
+Rapunzel/6
+Raquela/6
+Raquel/6
+rarebit/7
+rarefaction/7
+rarefy/17
+rareness/7
+rare/77
+rarity/7
+Rasalgethi/6
+Rasalhague/6
+rascal/65
+rasher/6
+rashness/9
+rash/712
+Rasia/6
+Rasla/6
+Rasmussen/6
+raspberry/7
+rasper/6
+rasping/19
+rasp/211
+Rasputin/6
+raspy/54
+Rastaban/6
+Rastafarian/6
+raster/7
+Rastus/6
+ratchet/26
+rateable
+rated/12
+rate/713
+ratepayer/7
+rater/6
+rate's
+Ratfor/6
+rather
+Rather/6
+rathskeller/7
+ratifier/6
+ratify/115
+rating/6
+ratiocinate/24
+ratiocination/6
+ratio/7
+rationale/7
+rationalism/7
+rationalistic
+rationalist/9
+rationality/7
+rationalization/7
+rationalizer/6
+rationalize/23
+rationalness/6
+rational/46
+ration/26
+Ratliff/6
+ratlike
+ratline/7
+rat/182
+rattail
+rattan/7
+ratted
+ratter/7
+ratting
+rattlebrain/56
+rattle/179
+rattlesnake/7
+rattletrap/7
+rattling/19
+rattly/54
+rattrap/7
+ratty/54
+raucousness/7
+raucous/28
+Raul/6
+raunchily
+raunchiness/9
+raunchy/98
+ravage/23
+ravager/6
+raveling/9
+Ravel/6
+ravel/180
+raven/211
+Raven/6
+ravenous/28
+raver/6
+rave/179
+Ravid/6
+Ravi/6
+ravine/26
+ravioli/7
+ravisher/6
+ravishing/19
+ravish/27
+ravishment/7
+Raviv/6
+Rawalpindi/6
+rawboned
+rawhide/26
+Rawley/6
+Rawlings/6
+Rawlins/6
+Rawlinson/6
+rawness/7
+raw/38
+Rawson/6
+Rayburn/6
+Raychel/6
+Raye/6
+ray/26
+Rayleigh/6
+Ray/6
+Raymond/6
+Raymondville/6
+Raymund/6
+Raymundo/6
+Rayna/6
+Raynard/6
+Raynell/6
+Rayner/6
+Raynor/6
+rayon/7
+Rayshell/6
+Raytheon/6
+raze/31
+razer/6
+razorback/7
+razorblades
+razor/26
+razz/17
+razzmatazz/9
+Rb
+RBI/9
+RC
+RCA
+rcpt
+RCS
+rd
+RD
+RDA
+Rd/6
+reabbreviate
+reachability
+reachable/12
+reachably
+reached/12
+reacher/6
+reach/714
+reacquisition
+reactant/7
+reacted/12
+reaction
+reactionary/7
+reactivity
+readability/7
+readable/42
+readably
+readdress/224
+Reade/6
+reader/6
+readership/7
+Read/207
+readied
+readies
+readily
+readinesses
+readiness/135
+reading/6
+Reading/6
+read/715
+readopt/224
+readout/7
+reads/14
+readying
+ready/264
+Reagan/6
+Reagen/6
+realisms
+realism's
+realism/12
+realistically/12
+realistic/12
+realist/7
+reality/41
+realizability/7
+realizableness/6
+realizable/444
+realizably/9
+realization/7
+realized/12
+realize/234
+realizer/6
+realizes/12
+realizing/86
+realm/6
+realness/9
+realpolitik/7
+real/177
+realtor's
+Realtor/9
+realty/7
+Rea/6
+reamer/6
+ream/259
+Reamonn/6
+reanimate
+reaper/6
+reappraise/224
+reap/716
+rear/111
+rearguard/7
+rearmost
+rearrange/329
+rearward/9
+reasonableness/41
+reasonable/236
+reasonably/12
+Reasoner/6
+reasoner/7
+reasoning/7
+reasonless
+reasons
+reason/717
+reassess/403
+reassuringly/12
+reattach/661
+reawakening/6
+Reba/6
+rebate/6
+Rebbecca/6
+Rebeca/6
+Rebecca's
+Rebecka/6
+Rebekah/6
+Rebeka/6
+Rebekkah/6
+rebeller
+rebellion/7
+rebelliousness/7
+rebellious/28
+rebel/7
+Rebe/6
+rebid
+rebidding
+rebind/224
+rebirth
+reboil/224
+rebook
+reboot/90
+rebound/224
+rebroadcast/207
+rebuke/31
+rebuking/19
+rebus
+rebuttal/7
+rebutting
+rec
+recalcitrance/7
+recalcitrant/9
+recalibrate/122
+recantation/9
+recant/224
+recap
+recappable
+recapping
+recast/224
+recd
+rec'd
+recede
+receipt/26
+receivable/9
+received/12
+receiver/6
+receivership/7
+receive/67
+recency/6
+recension/6
+recentness/7
+recent/718
+receptacle/7
+receptionist/7
+reception/7
+receptiveness/9
+receptive/28
+receptivity/9
+receptor/7
+recessional/9
+recessionary
+recessiveness/6
+recessive/46
+recess/163
+rechargeable
+recheck/224
+recherch�
+recherches
+recidivism/7
+recidivist/7
+Recife/6
+recipe/7
+recipiency
+recipient/7
+reciprocal/16
+reciprocate/24
+reciprocation/6
+reciprocity/7
+recitalist/9
+recital/7
+recitative/7
+reciter/6
+recite/90
+recked
+recking
+recklessness/9
+reckless/28
+reckoner/6
+reckoning/6
+reckon/187
+reclaim/277
+reclamation/7
+recliner/6
+recline/23
+recluse/89
+reclusion/6
+recode/224
+recognizability
+recognizable/12
+recognizably
+recognize/67
+recognizedly/9
+recognized/12
+recognizer/6
+recognizingly/9
+recognizing/10
+recoilless
+recoinage
+recolor/47
+recombinant
+recombine
+recommended/12
+recompense/17
+recompute/277
+reconciled/12
+reconciler/6
+reconcile/318
+reconditeness/6
+recondite/28
+reconfigurability
+reconfigure/164
+reconnaissance/7
+reconnect/164
+reconnoiter/17
+reconquer/224
+reconsecrate
+reconstitute
+reconstructed/12
+Reconstruction/6
+reconsult/224
+recontact/224
+recontaminate/122
+recontribute
+recook/224
+recopy/224
+recorded/13
+records/14
+record/719
+recourse
+recoverability
+recoverable/12
+recover/277
+recovery/7
+recreant/9
+recreational
+recriminate/24
+recrimination/6
+recriminatory
+recross/224
+recrudesce/17
+recrudescence/7
+recrudescent
+recruiter/6
+recruitment/7
+recruit/191
+recrystallize
+rectal/19
+rectangle/7
+rectangular/19
+recta's
+rectifiable
+rectification/6
+rectifier/6
+rectify/115
+rectilinear/19
+rectitude/7
+recto/7
+rector/7
+rectory/7
+rectum/7
+recumbent/19
+recuperate/24
+recuperation/6
+recur
+recurrence/7
+recurrent
+recurse/107
+recursion/6
+recusant/6
+recuse
+recyclable/9
+recycle/405
+redact/17
+redaction/7
+redactor/7
+redbird/7
+redbreast/7
+redbrick/6
+redbud/6
+redcap/7
+redcoat/7
+redcurrant/6
+redden/17
+redder
+reddest
+redding
+reddish/42
+Redd/6
+redeclaration
+redecorate
+redeemable/12
+redeem/332
+redeemed/12
+redeemer/6
+Redeemer/6
+redemptioner/6
+redemption/175
+redemptive
+redeposit/6
+redetermination
+Redford/6
+Redgrave/6
+redhead/286
+Redhook/6
+redial/224
+redirect/224
+redirection
+redlining/9
+Redmond/6
+redneck/56
+redness/7
+redo/224
+redolence/7
+redolent
+Redondo/6
+redouble/9
+redoubtably
+redound/17
+red/46
+redshift/9
+redskin/7
+Redstone/6
+reduced/12
+reducer/6
+reduce/23
+reducibility/6
+reducible
+reducibly
+reductionism/6
+reductionist/9
+reduction/7
+reduct/130
+redundancy/7
+redundant/19
+redwood/7
+redye
+redyeing
+Reeba/6
+Reebok/6
+Reece/6
+reecho/224
+reed/570
+reediness/7
+reeding/6
+Reed/6
+Reedville/6
+reedy/98
+reefer/6
+reef/49
+reeker/6
+reek/255
+reeler/6
+reel's
+reel/180
+Ree/56
+Reena/6
+reenforcement
+reentrant
+Reese/6
+reestimate/6
+Reeta/6
+Reeva/6
+reeve/224
+Reeves
+reexamine
+refection/7
+refectory/7
+refer/277
+refereed/12
+refereeing
+referee/56
+reference/253
+referenced/12
+reference's
+referencing/12
+referendum/7
+referentiality
+referential/86
+referent/7
+referral/7
+referred
+referrer/9
+referring
+reffed
+reffing
+refile
+refinance
+refined/12
+refine/393
+refinement/7
+refinish/224
+refit
+reflectance/6
+reflected/12
+reflectional
+reflection/7
+reflectiveness/6
+reflective/28
+reflectivity/6
+reflector/7
+reflect/64
+reflexion/7
+reflexiveness/6
+reflexive/46
+reflexivity/6
+reflex/580
+reflooring
+refluent
+reflux/224
+refocus/224
+refold/224
+reforestation
+reforge/224
+reformatory/7
+reform/277
+reformed/12
+reformer/6
+reformism/6
+reformist/9
+refract/64
+refractiveness/6
+refractive/28
+refractometer/7
+refractoriness/6
+refractory/144
+refrain/17
+refreshed/12
+refreshing/19
+refresh/695
+refreshment/7
+refrigerant/7
+refrigerated/12
+refrigerate/15
+refrigeration/6
+refrigerator/7
+refrozen
+refry/166
+refugee/7
+refuge/26
+Refugio/6
+refulgence/7
+refulgent
+refund/277
+refunder/6
+refurbish/329
+refurbishment/9
+refusal/7
+refuse/164
+refuser/6
+refutation/7
+refute/67
+refuter/6
+ref/705
+reg
+regale/329
+regalement/9
+regal/720
+regalia/6
+Regan/6
+regard/84
+regardless/28
+regather/224
+regatta/7
+regency/7
+regeneracy/7
+regenerately
+regenerateness/6
+regenerate/12
+Regen/6
+reggae/7
+Reggie/6
+Reggi/7
+Reggy/6
+regicide/7
+regime/7
+regimen/7
+regimental/9
+regimentation/7
+regiment/26
+Reginae
+Reginald/6
+Regina/6
+Reginauld/6
+Regine/6
+regionalism/7
+regional/16
+region/7
+Regis/6
+register's
+register/180
+registrable
+registrant/7
+registrar/7
+registration/118
+registrations
+registry/7
+Reg/72
+regnant
+Regor/6
+regress/64
+regression/7
+regressiveness/6
+regressive/28
+regressors
+regretfulness/6
+regretful/28
+regret/9
+regrettable
+regrettably
+regretted
+regretting
+reground
+regroup/224
+regrow/224
+regularity/7
+regularization/7
+regularize/17
+regular/16
+regulate/345
+regulated/12
+regulation/6
+regulative
+regulator/7
+regulatory
+Regulus/6
+regurgitate/15
+regurgitation/6
+rehabbed
+rehabbing
+rehabilitate/24
+rehabilitation/6
+rehab/9
+rehang/224
+rehear/301
+rehearsal/7
+rehearse
+rehearsed/12
+rehearser/6
+rehears/164
+reheat/224
+reheating/6
+Rehnquist
+rehydrate
+Reichenberg/6
+Reich/6
+Reichstags
+Reichstag's
+Reidar/6
+Reider/6
+Reid/114
+reign/26
+Reiko/6
+Reilly/6
+reimburse/149
+reimbursement/7
+Reinald/6
+Reinaldo/7
+Reina/6
+reindeer/6
+Reine/6
+reinforced/12
+reinforce/8
+reinforcement/7
+reinforcer/6
+rein/165
+Reinhard/6
+Reinhardt/6
+Reinhold/6
+Reinold/6
+reinstate/329
+reinstatement/7
+reinsurance
+Reinwald/6
+reissue
+REIT
+reiterative/144
+rejecter/6
+rejecting/19
+rejection/7
+rejector/7
+reject/29
+rejigger
+rejoice/187
+rejoicing/19
+rejoinder/7
+rejuvenate/15
+rejuvenatory
+relapse
+relatedly
+relatedness/7
+related/12
+relater/6
+relate/721
+relational/19
+relation/6
+relationship/7
+relativeness/6
+relative/46
+relativism/6
+relativistic
+relativistically
+relativist/7
+relativity/7
+relator's
+relaxant/7
+relaxation/7
+relaxedness/6
+relaxed/28
+relax/394
+relaxing/19
+relay/165
+relearn/224
+releasable/12
+release/277
+released/12
+relenting/12
+relentlessness/7
+relentless/28
+relent/17
+relevance/7
+relevancy/7
+relevant/19
+reliability/41
+reliables
+reliable/12
+reliably/12
+reliance/7
+reliant/19
+relicense/164
+relic/7
+relict/169
+relict's
+relief/6
+relievedly
+relieved/12
+reliever/6
+relieve/23
+religionists
+religion/7
+religiosity/6
+religiousness/7
+religious/28
+relink/224
+relinquish/11
+relinquishment/7
+reliquary/7
+relish/17
+relive/625
+reload/569
+relocate/277
+reluctance/7
+reluctant/19
+rel/130
+rely/47
+rem
+Re/6
+remade/9
+remainder/26
+remain/47
+remake/6
+remand/17
+remap
+remapping
+remarkableness/9
+remarkable/12
+remarkably
+remark/625
+remarked/12
+Remarque/6
+rematch/224
+Rembrandt/6
+remeasure/81
+remediableness/6
+remediable/42
+remedy/26
+remembered/12
+rememberer/6
+remember/569
+remembrance/175
+remembrancer/6
+Remington/6
+reminisce/17
+reminiscence/7
+reminiscent/19
+remissness/7
+remiss/28
+remit/9
+remittance/7
+remitted
+remitting/12
+Rem/6
+remnant/7
+remodel/224
+remolding
+remonstrant/7
+remonstrate/24
+remonstration/6
+remonstrative/19
+remorsefulness/6
+remorseful/28
+remorselessness/7
+remorseless/28
+remorse/7
+remoteness/7
+remote/33
+remoulds
+removal/7
+REM/9
+remunerated/12
+remunerate/24
+remuneration/6
+remunerativeness/6
+remunerative/28
+Remus/6
+Remy/6
+Renado/6
+Renae/6
+renaissance/9
+Renaissance/7
+renal
+Renaldo/6
+Rena/6
+Renard/6
+Renascence/7
+Renata/6
+Renate/6
+Renato/6
+renaturation
+Renaud/6
+Renault/7
+rend
+renderer/6
+render/541
+rendering/6
+rendezvous/26
+rendition/26
+rend/227
+Renee/6
+renegade/26
+renege/23
+reneger/6
+Renelle/6
+Renell/6
+Rene/6
+renewal/7
+renew/625
+renewer/6
+Renie/6
+rennet/7
+Rennie/6
+rennin/7
+Renoir/6
+Reno/6
+renounce/8
+renouncement/7
+renouncer/6
+renovate/15
+renovation/6
+renovator/7
+renown/26
+Rensselaer/6
+rentaller
+rental/7
+renter/6
+rent/49
+renumber/224
+renumeration
+renunciate/129
+renunciation/6
+Renville/6
+reoccupy/224
+reopen/224
+reorganized/12
+repack/224
+repairable/12
+repair/391
+repairer/6
+repairman/6
+repairmen
+repairs/25
+repaper
+reparable
+reparation/7
+reparteeing
+repartee/56
+repartition/331
+repast/224
+repatriate/15
+repave
+repealer/6
+repeal/569
+repeatability/6
+repeatable/12
+repeatably
+repeated/19
+repeater/6
+repeat/597
+repelled
+repellent/16
+repelling/19
+repel/9
+repentance/7
+repentant/16
+repent/52
+repertoire/7
+repertory/7
+repetition
+repetitiousness/9
+repetitious/28
+repetitiveness/7
+repetitive/28
+repine/164
+repiner/6
+replace/564
+replay/207
+replenish/8
+replenishment/9
+repleteness/7
+replete/722
+repletion/6
+replica/7
+replicate/64
+replicator/9
+replug
+reply/588
+Rep/6
+repopulate
+reported/19
+reportorial/19
+reposeful
+repose/6
+repository/7
+reprehend/17
+reprehensibility/7
+reprehensibleness/6
+reprehensible/42
+reprehensibly
+reprehension/7
+representable/12
+representational/19
+representativeness/6
+Representative/9
+representative/32
+representativity
+represented/12
+represent/625
+repression/7
+repressiveness/6
+repressive/28
+repress/130
+reprieve/17
+reprimand/26
+reprint/6
+reprisal/7
+reproacher/6
+reproachfulness/6
+reproachful/28
+reproach/318
+reproaching/19
+reprobate/122
+reprocess/224
+reproducibility/7
+reproducible/9
+reproducibly
+reproductive/9
+reproof/224
+reprove/164
+reproving/19
+rep/9
+reptile/7
+reptilian/9
+Republicanism/9
+republicanism/7
+Republican/9
+republic/6
+republish/224
+repudiate/15
+repudiation/6
+repudiator/9
+repugnance/7
+repugnant/19
+repulse/129
+repulsion/6
+repulsiveness/7
+repulsive/28
+reputability/7
+reputably/25
+reputation/7
+reputed/19
+repute/723
+reputing
+requested/12
+request/224
+Requiem/7
+requiem/7
+require/564
+requirement/7
+requisiteness/6
+requisite/675
+requisitioner/6
+requisition/570
+requital/7
+requited/12
+requiter/6
+requite/90
+reread/224
+rerecord/224
+rerouteing
+rerunning
+res/169
+rescale
+rescind/31
+rescission/7
+rescue/23
+reseal/625
+research/424
+reselect/224
+resemblant
+resemble/17
+resend/224
+resent/11
+resentfulness/7
+resentful/28
+resentment/7
+reserpine/7
+reservation/7
+reservednesses
+reservedness/135
+reserved/161
+reservist/7
+reservoir/7
+reset/52
+resettle/329
+reshipping
+reshow/224
+reshuffle/6
+reside/224
+residence/7
+residency/7
+residential/19
+resident/7
+resider/6
+residua
+residual/16
+residuary
+residue/7
+residuum/6
+resignation/7
+resigned/28
+resilience/7
+resiliency/9
+resilient/19
+resin/81
+resinlike
+resinous
+resiny
+resistance/7
+Resistance/7
+resistantly
+resistants
+resistant/12
+resisted/12
+resistible
+resistibly
+resisting/12
+resistiveness/6
+resistive/28
+resistivity/6
+resistless
+resistor/7
+resist/349
+resize/224
+resold
+resole/224
+resoluble
+resoluteness/7
+resolute/724
+resolvability/6
+resolvable/12
+resolved/12
+resolvent
+resonance/7
+resonant/16
+resonate/17
+resonator/7
+resorption/7
+resort/164
+resound/224
+resourcefulness/7
+resourceful/28
+resp
+respectability/7
+respectable/144
+respectably
+respect/470
+respected/25
+respectful/75
+respectfulness/7
+respecting/25
+respectiveness/6
+respective/28
+respect's/25
+respects/25
+respell/224
+respiration/7
+respirator/7
+respiratory/6
+resplendence/7
+resplendent/19
+respondent/7
+respond/23
+responser/6
+response/725
+responsibility/7
+responsibleness/6
+responsible/42
+responsibly
+responsiveness/41
+responsive/161
+respray/224
+restart/277
+restate/329
+restaurant/7
+restaurateur/7
+rest/152
+rested/12
+rester/6
+restfuller
+restfullest
+restfulness/7
+restful/28
+restitution/7
+restiveness/7
+restive/28
+restlessness/7
+restless/28
+restorability
+Restoration/6
+restoration/7
+restorative/46
+restorer/6
+restore/331
+restrained/10
+restraint/7
+restrict/64
+restricted/10
+restriction/7
+restrictively
+restrictiveness/7
+restrictives
+restrictive/12
+restroom/7
+restructurability
+restructure
+rest's/12
+rests/12
+restudy/6
+restyle
+resubstitute
+resultant/16
+result/26
+resume/88
+resumption/7
+resurface
+resurgence/7
+resurgent
+resurrect/17
+resurrection/7
+resurvey/224
+resuscitate/24
+resuscitation/6
+resuscitator/7
+retail/331
+retainer/6
+retain/27
+retake
+retaliate/24
+retaliation/6
+retaliatory
+Reta/6
+retardant/7
+retardation/7
+retarder/6
+retard/23
+retch/17
+retention/7
+retentiveness/9
+retentive/28
+retentivity/6
+retest/224
+Retha/6
+rethought
+reticence/9
+reticent/19
+reticle/7
+reticular
+reticulate/215
+reticulation/6
+reticule/7
+reticulum/6
+retinal/9
+retina/7
+retinue/7
+retiredness/6
+retiree/7
+retire/329
+retirement/7
+retiring/28
+retort/47
+retract/47
+retractile
+retrench/329
+retrenchment/7
+retributed
+retribution/7
+retributive
+retrieval/7
+retriever/6
+retrieve/67
+retroactive/19
+retrofire/26
+retrofit/9
+retrofitted
+retrofitting
+retroflection
+retroflex/81
+retroflexion/6
+retrogradations
+retrograde/183
+retrogression/7
+retrogressive/19
+retrogress/64
+retrorocket/7
+retro/7
+retrospection/7
+retrospective/16
+retrospect/163
+retrovirus/9
+retrovision
+retry/224
+retsina/7
+returnable/9
+returned/12
+returnee/7
+retype
+Reube/6
+Reuben/6
+Reub/72
+Reunion/6
+reuse/277
+Reuters
+Reuther/6
+reutilization
+Reuven/6
+Reva/6
+revanchist
+revealed/12
+revealingly
+revealing/12
+reveal/726
+reveille/7
+revelation/7
+Revelation/7
+revelatory
+revelry/7
+revel/179
+revenge/111
+revenger/6
+revenuer/6
+revenue/90
+reverberant
+reverberate/24
+reverberation/6
+revere/17
+Revere/6
+reverencer/6
+reverence/111
+Reverend
+reverend/7
+reverential/19
+reverent/19
+reverie/7
+reversal/7
+reverser/6
+reverse/19
+reversibility/6
+reversible/9
+reversibly
+reversioner/6
+reversion/164
+revers/6
+reverter/6
+revertible
+revert/29
+revet/329
+revetment/7
+review/224
+revile/727
+revilement/7
+reviler/6
+revise/332
+revised/12
+revisionary
+revisionism/7
+revisionist/7
+revitalize/90
+revivalism/7
+revivalist/7
+revival/7
+reviver/6
+revive/31
+revivification/6
+revivify/588
+Revkah/6
+Revlon/6
+Rev/6
+revocable
+revoke/23
+revolter/6
+revolt/52
+revolting/19
+revolutionariness/6
+revolutionary/444
+revolutionist/7
+revolutionize/23
+revolutionizer/6
+revolution/7
+revolve/234
+revolver/6
+revue/7
+revulsion/7
+revved
+revving
+rev/680
+rewarded/12
+rewarding/19
+rewarm/224
+reweave
+rewedding
+reweigh/224
+rewind/714
+rewire/224
+rework/224
+rexes
+Rex/6
+Reyes
+Reykjavik/6
+re/86
+Rey/6
+Reynaldo/6
+Reyna/6
+Reynard/6
+Reynold/7
+rezone
+Rf
+RF
+RFC
+RFD
+R/224
+rhapsodic
+rhapsodical
+rhapsodize/17
+rhapsody/7
+Rhea/6
+rhea/7
+Rheba/6
+Rhee/6
+Rheims/6
+Rheinholdt/6
+Rhenish
+rhenium/7
+rheology/6
+rheostat/7
+rhesus/9
+Rheta/6
+rhetorical/28
+rhetorician/7
+rhetoric/7
+Rhetta/6
+Rhett/6
+rheumatically
+rheumatic/9
+rheumatics/6
+rheumatism/7
+rheumatoid
+rheum/7
+rheumy/54
+Rhiamon/6
+Rhianna/6
+Rhiannon/6
+Rhianon/6
+Rhinelander/6
+Rhineland/114
+Rhine/6
+rhinestone/7
+rhinitides
+rhinitis/6
+rhinoceros/7
+rhino/7
+rhinotracheitis
+rhizome/7
+Rh/6
+Rhoda/6
+Rhodes
+Rhodesia/6
+Rhodesian/9
+Rhodia/6
+Rhodie/6
+rhodium/7
+rhododendron/7
+rhodolite/6
+rhodonite/6
+Rhody/6
+rhombic
+rhomboidal
+rhomboid/7
+rhombus/7
+rho/7
+Rhona/6
+Rhonda/6
+Rhone
+rhubarb/7
+rhyme/49
+rhymester/7
+Rhys/6
+rhythmical/19
+rhythmic/9
+rhythmics/6
+rhythm/7
+RI
+rial/7
+Riane/6
+Riannon/6
+Rianon/6
+ribaldry/7
+ribald/9
+ribbed
+Ribbentrop/6
+ribber/9
+ribbing/6
+ribbon/26
+ribcage
+rib/7
+riboflavin/7
+ribonucleic
+ribosomal
+ribosome/7
+Rica/6
+Rican/7
+Ricard/6
+Ricardo/6
+Ricca/6
+Riccardo/6
+rice/49
+Rice/6
+ricer/6
+Richard/7
+Richardo/6
+Richardson/6
+Richart/6
+Richelieu/6
+richen/47
+Richey/6
+Richfield/6
+Richie/6
+Richland/6
+Rich/6
+Richmond/6
+Richmound/6
+richness/7
+Richter/6
+Richthofen/6
+Richy/6
+rich/534
+Rici/6
+Rickard/6
+Rickenbacker/6
+Rickenbaugh/6
+Rickert/6
+rickets/6
+rickety/54
+Rickey/6
+rick/26
+Rickie/6
+Ricki/6
+Rick/6
+Rickover/6
+rickrack/7
+rickshaw/7
+Ricky/6
+Ric/6
+ricochet/17
+Rico/6
+Ricoriki/6
+ricotta/7
+riddance/7
+ridden
+ridding
+riddle/111
+Riddle/6
+ride/598
+Ride/6
+rider/266
+riderless
+ridership/9
+ridge/26
+Ridgefield/6
+ridgepole/7
+Ridgway/6
+ridgy/54
+ridicule/111
+ridiculer/6
+ridiculousness/7
+ridiculous/28
+riding/6
+rid/193
+Riemann/6
+Riesling/7
+rife/54
+riff/26
+riffle/17
+riffraff/7
+rifled/12
+rifle/49
+rifleman/6
+riflemen
+rifler/6
+rifling/6
+rift/26
+Riga/6
+rigamarole's
+rigatoni/6
+Rigel/6
+rigged
+rigger/7
+rigging/7
+Riggs/6
+righteousnesses/12
+righteousness/7
+righteous/161
+rightfulness/7
+rightful/28
+rightism/7
+rightist/9
+rightmost
+rightness/7
+Right/9
+right/685
+rightsize/17
+rights/6
+rightward/9
+rigidify/9
+rigidity/9
+rigidness/9
+rigid/28
+rigmarole/7
+rig/7
+Rigoberto/6
+Rigoletto/6
+rigor/7
+rigorousness/9
+rigorous/28
+Riki/6
+Rikki/6
+Rik/6
+rile/17
+Riley/6
+Rilke/6
+rill/26
+Rimbaud/6
+rime/7
+rimer/6
+rim/111
+rimless
+rimmed
+rimming
+Rinaldo/6
+Rina/6
+rind/26
+Rinehart/6
+ringer/6
+ring/665
+ringing/19
+ringleader/7
+ringlet/7
+ringlike
+Ringling/6
+Ring/6
+ringmaster/7
+Ringo/6
+ringside/96
+ringworm/7
+rink/111
+rinse/31
+Riobard/6
+Rio/7
+Riordan/6
+rioter/6
+riotousness/6
+riotous/28
+riot/91
+RIP
+riparian/9
+ripcord/7
+ripened/12
+ripenesses
+ripeness/135
+ripen/52
+ripe/46
+riper/12
+ripest/12
+Ripley/6
+Rip/6
+rip/728
+ripoff/9
+riposte/26
+ripped
+ripper/7
+ripping
+rippler/6
+ripple/111
+ripply/54
+ripsaw/26
+riptide/7
+Risa/6
+RISC
+risen
+riser/6
+rise/210
+risibility/7
+risible/9
+rising/6
+risker/6
+risk/111
+riskily
+riskiness/7
+risky/98
+risotto/7
+risqu�
+rissole/6
+Ritalin
+Rita/6
+Ritchie/6
+rite/56
+Ritter/6
+ritualism/7
+ritualistic
+ritualistically
+ritualized
+ritual/65
+Ritz/6
+ritzy/54
+rivaled/12
+Rivalee/6
+rivalry/7
+rival/26
+Riva/7
+rive/253
+Rivera/6
+riverbank/7
+riverbed/9
+riverboat/9
+river/266
+riverfront
+riverine
+Rivers
+Riverside/6
+riverside/9
+Riverview/6
+riveter/6
+rivet/49
+riveting/19
+Riviera/7
+Rivi/6
+Rivkah/6
+rivulet/7
+Rivy/6
+riv/729
+Riyadh/6
+riyal/7
+rm
+RMS
+RN
+RNA
+Rn/6
+roach/26
+Roach/6
+roadbed/7
+roadblock/26
+roadhouse/7
+roadie/9
+roadkill/9
+road/43
+roadrunner/7
+roadshow/9
+roadside/9
+roadsigns
+roadster/7
+roadsweepers
+roadway/7
+roadwork/7
+roadworthy
+roam/23
+Roana/6
+Roanna/6
+Roanne/6
+Roanoke/6
+roan/9
+roar/179
+roarer/6
+roaring/357
+Roarke/6
+roaster/6
+roast/179
+robbed
+robber/7
+Robbert/6
+robbery/7
+Robbie/6
+Robbi/6
+robbing
+Robbin/7
+Robb/6
+Robby/6
+Robbyn/6
+robe/84
+Robena/6
+Robenia/6
+Robers/6
+Roberson/6
+Roberta/6
+Robert/7
+Roberto/6
+Robertson/7
+robe's
+Robeson/6
+Robespierre/6
+Robina/6
+Robinet/6
+Robinetta/6
+Robinette/6
+Robinett/6
+Robinia/6
+Robin/6
+robin/7
+Robinson/6
+Robinsonville/6
+Robles/6
+Rob/680
+robotic/9
+robotism
+robotize/17
+robot/7
+rob/17
+Robson/6
+Robt/6
+robustness/7
+robust/33
+Roby/6
+Robyn/6
+Rocco/6
+Rocha/6
+Rochambeau/6
+Rochella/6
+Rochelle/6
+Rochell/6
+Roche/6
+Rochester/6
+Rochette/6
+Roch/6
+rockabilly/7
+rockabye
+Rockaway/7
+rockbound
+Rockefeller/6
+rocker/6
+rocketry/7
+rocket/26
+Rockey/6
+rockfall/9
+Rockford/6
+rock/49
+Rockie/6
+rockiness/7
+Rockland/6
+Rock/6
+Rockne/6
+Rockville/6
+Rockwell/6
+Rocky/7
+rocky/177
+rococo/7
+Roda/6
+rodded
+Roddenberry/6
+rodder
+Roddie/6
+rodding
+Rodd/6
+Roddy/6
+rodent/7
+rodeo/26
+Roderich/6
+Roderick/6
+Roderic/6
+Roderigo/6
+rode/9
+Rodger/6
+Rodge/231
+Rodie/6
+Rodi/6
+Rodina/6
+Rodin/6
+Rod/6
+Rodney/6
+Rodolfo/6
+Rodolphe/6
+Rodolph/6
+Rodrick/6
+Rodrigo/6
+Rodriguez/6
+Rodrique/6
+Rodriquez/6
+rod/26
+roebuck/7
+Roentgen's
+roentgen/7
+roe/7
+ROFL
+Rogelio/6
+roger/17
+Rogerio/6
+Roger/6
+Roget/6
+Rog/231
+rogued/370
+rogue/26
+roguery/7
+rogues/370
+roguing/370
+roguishness/7
+roguish/28
+roil/17
+Roi/7
+roisterer/6
+roister/23
+Rojas/6
+Roland/6
+Rolando/6
+Roldan/6
+role/7
+Roley/6
+Rolfe/6
+Rolf/6
+Rolland/6
+rollback/7
+rolled/14
+Rollerblade/9
+rollerskating
+roller/7
+rollick/17
+rollicking/19
+Rollie/6
+rolling/9
+Rollin/7
+Rollo/6
+rollover/9
+roll/180
+Rolodex
+Rolph/6
+Rolvaag/6
+ROM
+romaine/7
+Romain/6
+Roma/6
+romancer/6
+romance/49
+Romanesque/9
+Romania/6
+Romanian/7
+Romano/7
+Romanov/6
+roman/9
+Romansh/6
+Romans/6
+Roman/7
+romantically/12
+romanticism/7
+Romanticism/9
+romanticist/9
+romanticize/17
+romantic/7
+Romany/7
+Romeo/7
+romeo/9
+Romero/6
+Rome/7
+Rommel/6
+Romney/6
+Romola/6
+Romona/6
+Romonda/6
+romper/6
+romp/23
+Rom/7
+Romulus/6
+Romy/6
+Ronalda/6
+Ronald/6
+Rona/6
+Ronda/6
+rondo/7
+Ronica/6
+Ron/6
+Ronna/6
+Ronnica/6
+Ronnie/6
+Ronni/6
+Ronny/6
+Ronstadt/6
+Rontgen
+Roobbie/6
+rood/7
+roof/91
+roofer/6
+roofgarden
+roofing/6
+roofless
+rooftop/9
+rookery/7
+rook/26
+rookie/80
+roomer/6
+roomette/7
+roomful/7
+roominess/7
+roommate/7
+room/49
+roomy/177
+Rooney/6
+Rooseveltian
+Roosevelt/6
+rooster/6
+roost/49
+rooted/42
+rooter/6
+rootlessness/6
+rootless/42
+rootlet/7
+Root/6
+root/49
+rootstock/6
+rope/49
+roper/6
+roping/6
+Roquefort/7
+Roquemore/6
+Rora/6
+Rorie/6
+Rori/6
+Rorke/6
+Rorschach
+Rory/6
+Rosabella/6
+Rosabelle/6
+Rosabel/6
+Rosaleen/6
+Rosales/6
+Rosalia/6
+Rosalie/6
+Rosalinda/6
+Rosalinde/6
+Rosalind/6
+Rosaline/6
+Rosalynd/6
+Rosalyn/6
+Rosa/6
+Rosamond/6
+Rosamund/6
+Rosana/6
+Rosanna/6
+Rosanne/6
+Rosario/6
+rosary/7
+Roscoe/6
+Rosco/6
+Roseanna/6
+Roseanne/6
+Roseann/6
+roseate/19
+Roseau
+rosebud/7
+rosebush/7
+Rosecrans/6
+Roseland/6
+Roselia/6
+Roseline/6
+Roselin/6
+Rosella/6
+Roselle/6
+Rose/6
+Rosemaria/6
+Rosemarie/6
+Rosemary/6
+rosemary/7
+rose/26
+Rosemonde/6
+Rosenberg/6
+Rosenblum/6
+Rosendo/6
+Rosene/6
+Rosen/6
+Rosenthal/6
+Rosenzweig/6
+Rosetta/6
+Rosette/6
+rosette/26
+rosewater
+rosewood/7
+Roshelle/6
+Rosicrucian/6
+Rosie/6
+rosily
+Rosina/6
+rosiness/7
+rosin/26
+Rosita/6
+Roslyn/6
+Rosmunda/6
+Ros/122
+Ross
+Rossetti/6
+Rossie/6
+Rossi/6
+Rossini/6
+Rossy/6
+Rostand/6
+roster/26
+Rostov/6
+rostra's
+rostrum/7
+Roswell/6
+Rosy/6
+rosy/98
+rota/7
+Rotarian/7
+rotary/9
+rotated/12
+rotate/24
+rotational/19
+rotation/6
+rotative/19
+rotator/7
+rotatory
+ROTC
+rote/7
+rotgut/7
+Roth/6
+Rothschild/6
+rotisserie/7
+rotogravure/7
+rotor/7
+rototill/90
+rot/17
+rotted
+rottenness/9
+rotten/38
+Rotterdam/6
+rotter/6
+rotting
+rotunda/7
+rotundity/9
+rotundness/9
+rotund/22
+Rouault/6
+rou�/7
+rouge/26
+roughage/7
+roughen/47
+rougher/6
+roughhouse/26
+roughish
+roughneck/26
+roughness/7
+roughs
+roughshod
+rough/730
+roulette/26
+roundabout/444
+roundedness/6
+rounded/42
+roundelay/7
+roundels
+rounder/6
+roundhead/81
+roundheadedness/6
+roundheaded/42
+roundhouse/7
+roundish
+roundness/7
+roundoff
+roundup/7
+roundworm/7
+round/100
+Rourke/6
+rouse/31
+rouser/6
+Rousseau/6
+roustabout/7
+roust/17
+route/731
+router/6
+route's
+rout/91
+routine/65
+routing/6
+routinize/17
+Rouvin/6
+rover/6
+Rover/6
+rove/179
+roving/6
+Rowan/6
+rowboat/7
+rowdily
+rowdiness/7
+rowdyism/7
+rowdy/177
+rowel/26
+Rowe/6
+Rowena/6
+rowen/6
+Rowen/6
+rower/6
+Rowland/6
+Rowley/6
+Row/72
+Rowney/6
+row/732
+Roxana/6
+Roxane/6
+Roxanna/6
+Roxanne/6
+Roxie/6
+Roxi/6
+Roxine/6
+Roxy/6
+royalist/7
+Royall/6
+Royal/6
+royal/16
+royalty/7
+Royce/6
+Roy/6
+Rozalie/6
+Rozalin/6
+Rozamond/6
+Rozanna/6
+Rozanne/6
+Rozele/6
+Rozella/6
+Rozelle/6
+Roze/6
+Rozina/6
+Roz/6
+RP
+rpm
+RPM
+rps
+RR
+Rriocard/6
+rs
+r's
+R's
+RSFSR
+RSI
+RSV
+RSVP
+RSX
+rt
+rte
+Rte
+RTFM
+r/733
+Rubaiyat/6
+rubato/7
+rubbed
+rubberize/17
+rubberneck/49
+rubber/26
+rubbery/54
+rubbing/6
+rubbish/26
+rubbishy
+rubble/26
+rubdown/7
+rubella/7
+Rube/6
+Ruben/7
+rube/7
+Rubetta/6
+Rubia/6
+Rubicon/7
+rubicund
+rubidium/7
+Rubie/6
+Rubik/6
+Rubi/6
+Rubina/6
+Rubin/6
+Rubinstein/6
+ruble/7
+rubout
+rubric/7
+rub/9
+Ruby/6
+ruby/172
+Ruchbah/6
+ruck/6
+rucksack/7
+ruckus/7
+ruction/7
+rudderless
+rudder/7
+Ruddie/6
+ruddiness/7
+Rudd/6
+Ruddy/6
+ruddy/226
+rudeness/7
+rude/33
+Rudie/6
+Rudiger/6
+rudimentariness/6
+rudimentary/42
+rudiment/7
+Rudolf/6
+Rudolfo/6
+Rudolph/6
+Rudyard/6
+Rudy/6
+ruefulness/9
+rueful/28
+rue/17
+Rufe/6
+ruff/116
+ruffian/116
+ruffled/12
+ruffler/6
+ruffle/31
+ruffly/54
+Rufus/6
+Rugby's
+rugby/7
+ruggedness/9
+rugged/33
+Ruggiero/6
+rugging
+rug/7
+Ruhr/6
+ruination/7
+ruiner/6
+ruin/111
+ruinousness/6
+ruinous/28
+Ruiz/6
+rulebook/9
+ruled/12
+rule/91
+ruler/165
+ruling/6
+Rumanian's
+Rumania's
+rumba/26
+rumble/187
+rumbler/6
+rumbustious
+rumen/6
+Rumford/6
+Ru/140
+ruminant/65
+ruminate/24
+ruminative/19
+rummage/31
+rummager/6
+Rummel/6
+rummer
+rummest
+rummy/80
+rumored/12
+rumorer/6
+rumormonger/26
+rumor/49
+Rumpelstiltskin/6
+rump/116
+rumple/17
+rumply/54
+rumpus/7
+rum/99
+runabout/7
+runaround/9
+run/63
+runaway/9
+rundown/7
+rune/7
+Runge/6
+rung/7
+runic
+runlet/7
+runnable
+runnel/7
+runner/7
+running/9
+Runnymede/6
+runny/54
+runoff/7
+runtime
+runtiness/6
+runt/7
+runty/98
+runway/7
+Runyon/6
+rupee/7
+Ruperta/6
+Rupert/6
+Ruperto/6
+rupiah/6
+rupiahs
+Ruppert/6
+Ruprecht/6
+rupture/26
+rurality/6
+rural/19
+Rurik/6
+ruse/7
+Rushdie/6
+rush/23
+rusher/6
+rushes/45
+rushing/6
+Rush/6
+Rushmore/6
+rushy/54
+Ruskin/6
+rusk/7
+Russell/6
+Russel/6
+russet/56
+russetting
+Russia/6
+Russian/7
+Russo/6
+Russ/9
+Rustbelt/6
+rustically
+rusticate/17
+rustication/6
+rusticity/9
+rustic/9
+Rustie/6
+rustiness/7
+Rustin/6
+rustler/6
+rustle/23
+rust/26
+rustproof/17
+Rusty/6
+rusty/734
+rutabaga/7
+Rutger/7
+Ruthanne/6
+Ruthann/6
+Ruthe/6
+ruthenium/7
+rutherfordium/7
+Rutherford/6
+Ruthie/6
+Ruthi/6
+ruthlessness/7
+ruthless/28
+Ruth/6
+Ruthy/6
+Rutland/6
+Rutledge/6
+rut/7
+rutted
+Rutter/6
+Ruttger/6
+rutting
+rutty/54
+Ruy/6
+RV
+RVs
+Rwandan/9
+Rwanda/7
+Rwy/6
+Rx/6
+Ryan/6
+Ryann/6
+Rycca/6
+Rydberg/6
+Ryder/6
+rye/7
+Ryley/6
+Ry/6
+Ryon/6
+Ryukyu/6
+Ryun/6
+S
+SA
+Saab/6
+Saar/6
+Saba/6
+sabbath
+Sabbath/6
+Sabbaths
+sabbatical/9
+sabered/12
+saber/26
+Sabik/6
+Sabina/6
+Sabine/6
+Sabin/6
+sable/26
+sabotage/26
+saboteur/7
+sabot/7
+Sabra/6
+sabra/7
+Sabrina/6
+SAC
+Sacajawea/6
+saccharides
+saccharine
+saccharin/7
+Sacco/6
+sacerdotal
+Sacha/6
+sachem/7
+sachet/7
+Sachs/6
+sackcloth/6
+sackcloths
+sacker/6
+sackful/7
+sack/211
+sacking/6
+sacral
+sacra/329
+sacramental/9
+sacrament/26
+Sacramento/6
+sacredness/9
+sacred/28
+sacrificer/6
+sacrifice/49
+sacrificial/19
+sacrilege/7
+sacrilegious/19
+sacristan/7
+sacristy/7
+sacroiliac/9
+sacrosanctness/7
+sacrosanct/42
+sacrum/6
+sac/7
+Sada/6
+Sadat/6
+Saddam/6
+sadden/17
+sadder
+saddest
+saddlebag/7
+saddler/6
+saddle's
+saddle/180
+Sadducee/6
+Sadella/6
+Sade/6
+sades
+Sadie/6
+sadism/7
+sadistic
+sadistically
+sadist/7
+sadness/7
+sadomasochism/7
+sadomasochistic
+sadomasochist/9
+sad/28
+Sadr/6
+Sadye/6
+safari/26
+safeguard/26
+safekeeping/7
+safeness/7
+safeness's/12
+safes
+safety/26
+safe/317
+safflower/7
+saffron/7
+sagaciousness/6
+sagacious/28
+sagacity/7
+saga/7
+Sagan/6
+sagebrush/7
+sage/32
+sagged
+sagger
+sagging
+saggy/54
+Saginaw/6
+Sagittarius/7
+sago/7
+sag/228
+saguaro/7
+Sahara/6
+Saharan/6
+Sahel
+sahib/7
+Saidee/6
+saids
+said/12
+Saigon/6
+sailboard/17
+sailboat/373
+sailcloth/6
+sailcloths
+sailer/6
+sailfish/7
+sail/211
+sailing/6
+sailor/65
+sailplane/26
+sainthood/7
+saintlike
+saintliness/7
+saintly/98
+saint/116
+Saiph/6
+saith
+saiths
+Sakai/6
+sake/175
+saker/6
+Sakhalin/6
+Sakharov/6
+Saki/6
+saki's
+salaam/26
+salable/12
+salaciousness/7
+salacious/28
+salacity/7
+Saladin/6
+Salado/6
+salad/7
+Salaidh/6
+salamander/7
+salami/7
+salary/26
+Salas/6
+Salazar/6
+saleability/6
+sale/735
+Saleem/6
+Salem/6
+Salerno/6
+salesclerk/7
+salesgirl/7
+saleslady/9
+salesman/6
+salesmanship/7
+salesmen
+salespeople/6
+salesperson/7
+salesroom/6
+saleswoman
+saleswomen
+salience/7
+saliency
+salient/16
+Salim/6
+Salina/7
+saline/9
+salinger
+Salinger/6
+salinity/7
+Salisbury/6
+Salish/6
+saliva/7
+salivary
+salivate/15
+salivation/6
+Salk/6
+Sallee/6
+Salle/6
+Sallie/6
+Salli/6
+sallowness/7
+sallow/226
+Sallust/6
+Sallyanne/6
+Sallyann/6
+sally/26
+Sally/6
+salmonellae
+salmonella/6
+Salmon/6
+salmon/7
+Sal/86
+Saloma/6
+Salome/6
+Salomi/6
+Salomo/6
+Salomone/6
+Salomon/6
+Salonika/6
+salon/7
+saloonkeeper
+saloon/7
+salsa/7
+salsify/6
+SALT
+saltcellar/7
+salted/156
+salter/6
+salt/736
+saltine/7
+saltiness/7
+saltness/6
+Salton/6
+saltpeter/7
+salts/169
+saltshaker/9
+saltwater
+salty/177
+salubriousness/6
+salubrious/28
+salubrity/6
+salutariness/6
+salutary/42
+salutation/7
+salutatory/9
+saluter/6
+salute/31
+Salvadoran/9
+Salvadorian/9
+Salvador/6
+salvageable
+salvage/111
+salvager/6
+salvation/7
+Salvatore/6
+salve/49
+salver/6
+Salvidor/6
+salvo/26
+Salween/6
+Salyut/6
+Salz/6
+SAM
+Samantha/6
+Samara/6
+Samaria/6
+Samaritan/7
+samarium/7
+Samarkand/6
+samba/26
+sameness/7
+same/144
+Sam/6
+Sammie/6
+Sammy/6
+Samoa
+Samoan/9
+Samoset/6
+samovar/7
+Samoyed/6
+sampan/7
+sampler/6
+sample/91
+sampling/6
+Sampson/6
+Samsonite/6
+Samson/6
+Samuele/6
+Samuel/7
+Samuelson/6
+samurai/6
+San'a
+Sana/6
+sanatorium/7
+Sanborn/6
+Sanchez/6
+Sancho/6
+sanctification/6
+sanctifier/6
+sanctify/294
+sanctimoniousness/7
+sanctimonious/28
+sanctimony/7
+sanctioned/12
+sanction/26
+sanctity/7
+sanctuary/7
+sanctum/7
+sandal/26
+sandalwood/7
+sandbagged
+sandbagging
+sandbag/7
+sandbank/7
+sandbar/9
+sandblaster/6
+sandblast/49
+sandbox/7
+Sandburg/6
+sandcastle/9
+Sande/6
+Sanderling/6
+sander/6
+Sander/6
+Sanderson/6
+sandhill
+sandhog/7
+Sandia/6
+Sandie/6
+Sandi/6
+sandiness/9
+Sandinista
+sandlot/7
+sandlotter/9
+sandman/6
+sandmen
+Sand/231
+Sandor/6
+Sandoval/6
+sandpaper/26
+sandpile
+sandpiper/7
+sandpit/6
+Sandra/6
+Sandro/6
+sand/49
+sandstone/7
+sandstorm/7
+Sandusky/6
+sandwich/26
+Sandye/6
+Sandy/6
+sandy/98
+saned
+sane/737
+saneness/7
+saneness's/45
+sanes
+Sanford/6
+Sanforized
+Sanger/6
+sangfroid/9
+sangria/7
+Sang/114
+sang/9
+sanguinary
+sanguined
+sanguine/278
+sanguinely
+sanguineness/6
+sanguineous/278
+sanguines
+sanguining
+Sanhedrin/6
+saning
+sanitarian/9
+sanitarium/7
+sanitary/9
+sanitate/107
+sanitation/6
+sanitizer/6
+sanitize/23
+sanity/43
+sank
+Sankara/6
+San/6
+sans
+sanserif
+Sanskritic
+Sanskritize/6
+Sanskrit/6
+Sansone/6
+Sanson/6
+Santa/6
+Santana/6
+Santayana/6
+Santeria
+Santiago/6
+Santo/7
+sapience/7
+sapient
+sapless
+sapling/7
+sap/7
+sapped
+sapper/7
+Sapphira/6
+Sapphire/6
+sapphire/7
+Sappho/6
+sappiness/7
+sapping
+Sapporo/6
+sappy/98
+saprophyte/7
+saprophytic
+sapsucker/7
+sapwood/7
+Saraann/6
+Saracen/7
+Saragossa/6
+Sarah/6
+Sarajane/6
+Sarajevo/6
+Sara/6
+Saran/6
+saran/7
+sarape's
+Sarasota/6
+Saratoga/6
+Saratov/6
+Sarawak/6
+sarcasm/7
+sarcastic
+sarcastically
+sarcoma/7
+sarcophagi
+sarcophagus/6
+sardine/26
+Sardinia/6
+sardonic
+sardonically
+Saree/6
+Sarena/6
+Sarene/6
+Sarette/6
+Sargasso/6
+Sarge/6
+Sargent/6
+sarge/7
+Sargon/6
+Sari/6
+sari/7
+Sarina/6
+Sarine/6
+Sarita/6
+Sarnoff/6
+sarong/7
+Saroyan/6
+sarsaparilla/7
+Sarto/6
+sartorial/19
+sartorius/6
+Sartre/6
+Sascha/6
+SASE
+Sasha/6
+sashay/17
+Sashenka/6
+sash/26
+Saskatchewan/6
+Saskatoon/6
+Sask/6
+sassafras/7
+sass/26
+Sassoon/6
+sassy/228
+SAT
+satanic
+satanical/19
+Satanism/6
+satanism/9
+Satanist/6
+satanist/9
+Satan/6
+satchel/7
+sat/47
+sateen/7
+satellite/26
+sate/9
+satiable/45
+satiate/15
+satiation/6
+satiety/7
+satin/26
+satinwood/7
+satiny
+satire/7
+satiric
+satirical/19
+satirist/7
+satirize/17
+satirizes/12
+satisfaction/85
+satisfactorily/12
+satisfactoriness/135
+satisfactory/236
+satisfiability/12
+satisfiable/12
+satisfied/147
+satisfier/6
+satisfies/25
+satisfy/23
+satisfying/147
+satisfyingly
+Sat/6
+satori/7
+satrap/7
+saturated/358
+saturater/6
+saturates/14
+saturate/294
+saturation/6
+Saturday/7
+saturnalia
+Saturnalia/6
+saturnine/19
+Saturn/6
+Satyanarayanan/6
+satyriases
+satyriasis/6
+satyric
+satyr/7
+sauce/49
+saucepan/7
+saucer/6
+saucily
+sauciness/9
+saucy/98
+Saudi/9
+Saud/6
+Saudra/6
+sauerkraut/7
+Saukville/6
+Saul/6
+Sault/6
+sauna/26
+Sauncho/6
+Saunder/7
+Saunderson/6
+Saundra/6
+saunter/31
+saurian/9
+sauropod/7
+sausage/7
+Saussure/6
+saut�/17
+Sauternes/6
+Sauveur/6
+savage/100
+Savage/6
+savageness/7
+savagery/7
+Savannah/6
+savanna/7
+savant/7
+saved/12
+saveloy/6
+saver/6
+save/234
+Savina/6
+Savior/6
+savior/7
+Saviour/6
+Savonarola/6
+savored/12
+savorer/6
+savorier
+savoriest
+savoriness/9
+savoringly/9
+savoring/19
+savor/49
+savory/478
+Savoyard/6
+Savoy/6
+savoy/7
+savvy/181
+sawbones/6
+sawbuck/7
+sawdust/26
+sawer/6
+sawfly/7
+sawhorse/7
+Saw/6
+sawmill/7
+saw/111
+sawtooth
+Sawyere/6
+Sawyer/6
+sawyer/7
+Saxe/6
+saxifrage/7
+Sax/6
+sax/7
+Saxon/7
+Saxony/6
+saxophone/7
+saxophonist/7
+Saxton/6
+Sayer/6
+sayer/7
+sayest
+saying/7
+Sayre/7
+says/6
+say/738
+Say/231
+SBA
+Sb/6
+SC
+scabbard/26
+scabbed
+scabbiness/7
+scabbing
+scabby/98
+scabies/6
+scabrousness/6
+scabrous/28
+scab/7
+scad/7
+scaffolding/6
+scaffold/171
+scalability
+Scala/6
+scalar/7
+scalawag/7
+scald/187
+scaled/13
+scale/182
+scaleless
+scalene
+scaler/6
+scales/14
+scaliness/7
+scaling/14
+scallion/7
+scalloper/6
+scallop/111
+scalloping/6
+scalpel/7
+scalper/6
+scalp/49
+scalping/6
+scaly/98
+scammed
+scamming
+scamper/47
+scampi/6
+scamp/49
+scam/7
+Scan
+scan/63
+scandal/26
+scandalized/12
+scandalize/17
+scandalmonger/7
+scandalousness/6
+scandalous/28
+Scandinavia/6
+Scandinavian/9
+scandium/7
+scanned/14
+scanner/7
+scanning/14
+scansion/7
+scant/253
+scantest
+scantily
+scantiness/7
+scantly
+scantness/7
+scanty/177
+scapegoat/26
+scapegrace/7
+scape/6
+scapulae
+scapula/6
+scapular/9
+scarab/7
+Scaramouch/6
+Scarborough/6
+scarceness/7
+scarce/33
+scarcity/7
+scar/111
+scarecrow/7
+scaremongering/6
+scaremonger/131
+scarer/6
+scare/9
+scarface
+Scarface/6
+scarf/26
+scarification/6
+scarify/294
+scarily
+scariness/9
+scarlatina/7
+Scarlatti/6
+Scarlet/6
+scarlet/26
+Scarlett/6
+scarp/26
+scarred
+scarring
+scarves/6
+scary/98
+scathe/47
+scathed/12
+scathing/19
+scatological
+scatology/7
+scat/9
+scatted
+scatterbrain/56
+scatter/179
+scatterer/6
+scattergun
+scattering/86
+scatting
+scavenge/23
+scavenger/6
+SCCS
+scenario/7
+scenarist/7
+scene/26
+scenery/7
+scenically
+scenic/9
+scented/12
+scent/26
+scentless
+scent's/169
+scents/169
+scepter/26
+scepters/12
+sceptically
+sch
+Schaefer/6
+Schaeffer/6
+Schafer/6
+Schaffner/6
+Schantz/6
+Schapiro/6
+Scheat/6
+Schedar/6
+schedule/395
+scheduled/12
+scheduler/7
+schedule's
+Scheherazade/6
+Scheherezade/6
+Schelling/6
+schema/6
+schemata
+schematically
+schematic/9
+scheme/91
+schemer/6
+schemta
+Schenectady/6
+scherzo/7
+Schick/6
+Schiller/6
+schilling/7
+schismatic/9
+schism/7
+schist/7
+schizoid/9
+schizomycetes
+schizophrenia/7
+schizophrenically
+schizophrenic/9
+schizo/9
+schlemiel/7
+schlepped
+schlepping
+schlep/9
+Schlesinger/6
+Schliemann/6
+Schlitz/6
+schlock/7
+schlocky/54
+Schloss/6
+schmaltz/7
+schmaltzy/54
+Schmidt/6
+Schmitt/6
+schmoes
+schmo/6
+schmooze/17
+schmuck/7
+Schnabel/6
+schnapps/6
+schnauzer/7
+Schneider/6
+schnitzel/7
+schnook/7
+schnoz/9
+schnozzle/7
+Schoenberg/6
+Schofield/6
+scholarship/7
+scholar/65
+scholastically
+scholastic/9
+schoolbag/7
+schoolbook/7
+schoolboy/7
+schoolchild/6
+schoolchildren
+schooldays
+schooled/12
+schoolfellow/9
+schoolfriend
+schoolgirlish
+schoolgirl/7
+schoolhouse/7
+schooling/6
+schoolmarmish
+schoolmarm/7
+schoolmaster/26
+schoolmate/7
+schoolmistress/7
+schoolroom/7
+schoolteacher/7
+schoolwork/7
+schoolyard/7
+school/91
+schooner/7
+Schopenhauer/6
+Schottky/6
+Schrieffer/6
+Schr�dinger/6
+Schroeder/6
+Schroedinger/6
+Schubert/6
+Schultz/6
+Schulz/6
+Schumacher/6
+Schuman/6
+Schumann/6
+schussboomer/9
+schuss/26
+Schuster/6
+Schuyler/6
+Schuylkill/6
+Schwab/6
+Schwartzkopf/6
+Schwartz/6
+Schwarzenegger/6
+schwa/7
+Schweitzer/6
+Schweppes/6
+Schwinger/6
+Schwinn/6
+sci
+sciatica/7
+sciatic/9
+science/276
+scientifically/12
+scientific/12
+scientist/7
+Scientology/6
+scimitar/7
+scintilla/7
+scintillate/15
+scintillation/6
+scintillator/7
+scion/7
+Scipio/6
+scissor/17
+scleroses
+sclerosis/6
+sclerotic/9
+Sc/6
+scoffer/6
+scofflaw/7
+scoff/23
+scolder/6
+scold/187
+scolioses
+scoliosis/6
+scollop's
+sconce/26
+scone/7
+scooper/6
+scoop/111
+scooter/6
+scoot/23
+scope/26
+Scopes/6
+scops
+scorbutic
+scorcher/6
+scorching/19
+scorch/23
+scoreboard/7
+scorecard/7
+scored/6
+scorekeeper/7
+scoreless
+scoreline
+score/91
+scorner/6
+scornfulness/6
+scornful/28
+scorn/49
+scorpion/7
+Scorpio/7
+Scorpius/6
+Scorsese/6
+Scotchgard/6
+Scotchman/6
+Scotchmen
+scotch/26
+scotchs
+Scotch/9
+Scotchwoman
+Scotchwomen
+scot-free
+Scotia/6
+Scotian/6
+Scotland/6
+Scot/7
+Scotsman/6
+Scotsmen
+Scotswoman
+Scotswomen
+Scottie/7
+Scotti/6
+Scottish
+Scott/6
+Scottsdale/6
+Scotty/6
+scoundrel/65
+scourer/6
+scourge/111
+scourger/6
+scouring/6
+scour/23
+scouter/6
+scouting/6
+scoutmaster/7
+Scout's
+scout/211
+scow/26
+scowler/6
+scowl/31
+scrabble/23
+scrabbler/6
+Scrabble/7
+scragged
+scragging
+scraggly/54
+scraggy/54
+scrag/7
+scrambler/7
+scrambler's/12
+scramble/739
+scrammed
+scramming
+scram/9
+Scranton/6
+scrapbook/7
+scraper/6
+scrape/9
+scrapheap/7
+scrapped
+scrapper/7
+scrapping
+scrappy/54
+scrap/91
+scrapyard/9
+scratched/12
+scratcher/6
+scratches/6
+scratchily
+scratchiness/9
+scratch/179
+scratchy/98
+scrawler/6
+scrawl/31
+scrawly/54
+scrawniness/7
+scrawny/98
+screamer/6
+screaming/19
+scream/23
+screecher/6
+screech/111
+screechy/54
+screed/7
+scree/56
+screened/12
+screening/6
+screenplay/7
+screen/211
+screenwriter/7
+screwball/7
+screwdriver/7
+screwer/6
+screw/180
+screwiness/9
+screw's
+screwup
+screwworm/7
+screwy/98
+Scriabin/6
+scribal
+scribble/179
+scribbler/6
+scribe/740
+scriber/741
+scribe's
+Scribner/7
+scrimmager/6
+scrimmage/111
+scrimp/17
+scrimshaw/26
+scrim/7
+Scripps/6
+scrip/7
+scripted/12
+script/742
+scriptural/19
+scripture/7
+Scripture/7
+scriptwriter/7
+scriptwriting/6
+scrivener/6
+scriven/90
+scrod/6
+scrofula/7
+scrofulous
+scrollbar/7
+scroll/57
+Scrooge/7
+scrooge/26
+scrota
+scrotal
+scrotum/6
+scrounge/23
+scroungy/54
+scrubbed
+scrubber/7
+scrubbing
+scrubby/54
+scrub/9
+scruffily
+scruffiness/9
+scruff/7
+scruffy/98
+Scruggs/6
+scrummage/207
+scrum/7
+scrumptious/19
+scrunch/17
+scrunchy/9
+scruple/26
+scrupulosity/7
+scrupulousness's
+scrupulousness/302
+scrupulous/161
+scrutable/45
+scrutinized/12
+scrutinizer/6
+scrutinize/23
+scrutinizingly/9
+scrutinizing/10
+scrutiny/7
+SCSI
+scuba/26
+scudded
+scudding
+Scud/6
+scud/9
+scuff/17
+scuffle/17
+sculler/6
+scullery/7
+Sculley/6
+scullion/7
+scull/49
+sculptor/7
+sculptress/7
+sculpt/17
+sculptural/19
+sculpture/26
+scumbag/9
+scummed
+scumming
+scum/7
+scummy/54
+scupper/26
+scurf/7
+scurfy/54
+scurrility/7
+scurrilousness/7
+scurrilous/28
+scurry/71
+scurvily
+scurviness/6
+scurvy/177
+scutcheon/7
+scuttlebutt/7
+scuttle/26
+scuzzy/54
+Scylla/6
+scythe/26
+Scythia/6
+SD
+SDI
+SE
+seabed/9
+seabird/9
+seaboard/7
+Seaborg/6
+seaborne
+Seabrook/6
+seacoast/7
+seafare/173
+seafarer/6
+seafood/7
+seafront/7
+Seagate/6
+seagoing
+Seagram/6
+seagull/9
+seahorse/9
+sealant/7
+sealed/13
+sealer/6
+seal/49
+sealskin/7
+seals/13
+seamail
+seamanship/7
+seaman/86
+seamer/6
+seaminess/6
+seamlessness/6
+seamless/28
+SeaMonkey/6
+seam/150
+seams/45
+seamstress/7
+Seamus/6
+sea/65
+seamy/98
+Seana/6
+s�ance/7
+Sean/6
+seaplane/7
+seaport/7
+seaquake/6
+Seaquarium/6
+searcher/118
+searching/16
+searchlight/7
+search/119
+sear/743
+searing/19
+Sears/6
+seascape/7
+seashell/7
+seashore/7
+seasickness/7
+seasick/42
+seaside/7
+seasonableness/6
+seasonable/236
+seasonably/12
+seasonality
+seasonal/19
+seasoned/12
+seasoner/6
+seasoning/6
+season/612
+seatbelt
+seated/14
+seater/6
+seating/7
+SEATO
+seat's
+Seattle/6
+seat/180
+seawall/9
+seaward/9
+seawater/9
+seaway/7
+seaweed/7
+seaworthinesses
+seaworthiness/135
+seaworthy/98
+sebaceous
+Sebastian/6
+Sebastiano/6
+Sebastien/6
+seborrhea/7
+SEC
+secant/7
+secede/31
+secessionist/7
+secession/7
+secludedness/6
+secluded/28
+seclude/17
+seclusion/7
+seclusive
+Seconal
+secondarily
+secondary/144
+seconder/6
+secondhand
+second/744
+secrecy/7
+secretarial
+secretariat/7
+secretaryship/7
+secretary/7
+secrete/188
+secretion/6
+secretiveness/9
+secretive/28
+secretory
+secret/745
+sec/9
+sectarianism/7
+sectarian/9
+sectary/7
+sectionalism/7
+sectionalized
+sectional/16
+section/128
+sectioned
+sectioning
+sect/43
+sectoral
+sectored
+sector/85
+sectoring
+sects/25
+secularism/7
+secularist/7
+secularity/6
+secularization/7
+secularized/12
+secularize/17
+secular/16
+secured/12
+securely/45
+secure/241
+security/43
+secy
+sec'y
+sedan/7
+sedateness/7
+sedate/746
+sedation/6
+sedative/9
+sedentary
+Seder/7
+sedge/7
+Sedgwick/6
+sedgy/54
+sedimentary
+sedimentation/7
+sediment/26
+sedition/7
+seditiousness/6
+seditious/28
+seducer/6
+seduce/23
+seduction/7
+seductiveness/7
+seductive/28
+seductress/7
+sedulous/19
+Seebeck/6
+seed/36
+seedbed/7
+seedcase/7
+seeded/12
+seeder/7
+seediness/7
+seeding/9
+seedless
+seedling/7
+seedpod/9
+seed's
+seedy/98
+seeings
+seeing's
+seeing/12
+seeker/6
+seek/227
+seeking/19
+Seeley/6
+See/6
+seem/747
+seeming/19
+seemliness's
+seemliness/302
+seemly/264
+seen/12
+seepage/7
+seep/17
+seer/7
+seersucker/7
+sees
+seesaw/26
+seethe/71
+see/12
+segmental/19
+segmentation/7
+segmented/12
+segment/26
+Segovia/6
+segregant
+segregated/12
+segregate/345
+segregation/266
+segregationist/7
+segregative
+Segre/6
+segue/142
+segueing
+Segundo/6
+Se/540
+Seidel/6
+seigneur/7
+seignior/7
+Seiko/6
+seine/49
+Seine/6
+seiner/6
+Seinfeld/6
+seismic
+seismically
+seismographer/6
+seismographic
+seismographs
+seismography/7
+seismograph/231
+seismologic
+seismological
+seismologist/7
+seismology/7
+seismometer/9
+seize/234
+seizer/6
+seizing/6
+seizin/7
+seizor/7
+seizure/7
+Seka/6
+Sela/6
+Selassie/6
+Selby/6
+seldom
+selected/358
+selectional
+selection/7
+selectiveness/6
+selective/28
+selectivity/7
+selectman/6
+selectmen
+selectness/7
+selector/7
+select/748
+Selectric/6
+selects/14
+Selena/6
+selenate/6
+Selene/6
+selenite/6
+selenium/7
+selenographer/7
+selenography/7
+Selestina/6
+Seleucid/6
+Seleucus/6
+self/213
+selfishness/302
+selfish/161
+selflessness/7
+selfless/28
+selfness/6
+Selfridge/6
+selfsameness/6
+selfsame/42
+Selia/6
+Selie/6
+Selig/6
+Selim/6
+Selina/6
+Selinda/6
+Seline/6
+Seljuk/6
+Selkirk/6
+Sella/6
+sell/749
+seller/118
+Sellers/6
+Selle/680
+sellout/7
+Selma/6
+seltzer/9
+selvage/26
+selves/6
+Selznick/6
+semantical/19
+semanticist/7
+semantic/9
+semantics/6
+semaphore/26
+Semarang/6
+semblance/128
+semen/7
+semester/7
+semiannual/19
+semiarid
+semiautomated
+semiautomatic/9
+semicircle/7
+semicircular
+semicolon/7
+semiconductor/7
+semiconscious
+semidefinite
+semidetached
+semidrying/6
+semifinalist/7
+semifinal/7
+semilogarithmic
+semimonthly/9
+seminal/19
+seminarian/7
+seminar/7
+seminary/7
+Seminole/7
+semiofficial
+semioticians
+semiotic/9
+semiotics/6
+semipermanent/19
+semipermeable
+semiprecious
+semiprivate
+semiprofessional/16
+semipublic
+semiquantitative/19
+Semiramis/6
+semiretired
+semisecret
+semiskilled
+semi/7
+semisolid/9
+semistructured
+semisweet
+Semite/7
+Semitic/7
+semitic/9
+semitone/7
+semitrailer/7
+semitrance
+semitransparent
+semitropical
+semivowel/7
+semiweekly/9
+semiyearly
+semolina/7
+sempiternal
+sempstress/7
+Semtex
+sen
+Sen
+Sena/6
+senate/7
+Senate/7
+senatorial
+senator/7
+Sendai/6
+sender/6
+sends/14
+send/227
+Seneca/7
+Senegalese
+Senegal/6
+senescence/7
+senescent
+senile/16
+senility/7
+seniority/7
+senior/7
+Senior/9
+Sennacherib/6
+senna/7
+Sennett/6
+Se�ora/6
+senora/9
+senorita/9
+senor/7
+sensately/45
+sensate/463
+sensationalism/7
+sensationalist/9
+sensationalize/17
+sensational/19
+sensation/6
+sens/17
+senselessness/7
+senseless/28
+sense/6
+sensibility/43
+sensibleness/7
+sensible/177
+sensibly/45
+sensitiveness/7
+sensitiveness's/45
+sensitives
+sensitive/68
+sensitivity/43
+sensitization/186
+sensitized/12
+sensitizers
+sensitize/263
+sensor/7
+sensory
+sensualist/7
+sensuality/7
+sensual/528
+sensuousness/9
+sensuous/28
+Sensurround/6
+sentence/26
+sentential/19
+sententious/19
+sentience/43
+sentient/16
+sentimentalism/7
+sentimentalist/7
+sentimentality/7
+sentimentalization/7
+sentimentalize/23
+sentimentalizes/12
+sentimental/19
+sentiment/7
+sentinel/26
+sentry/7
+sent/750
+Seoul/6
+sepal/7
+separability/43
+separableness/123
+separable/261
+separably/45
+separateness/7
+separates/6
+separate/148
+separation/6
+separatism/7
+separatist/7
+separator/7
+Sephardi/6
+Sephira/6
+sepia/7
+Sepoy/6
+sepses
+sepsis/6
+septa/6
+septate/122
+September/7
+septennial/19
+septet/7
+septicemia/7
+septicemic
+septic/9
+septillion/6
+sept/6
+Sept/6
+septuagenarian/7
+Septuagint/7
+septum/6
+sepulcher/26
+sepulchers/13
+sepulchral/19
+seq
+sequel/7
+sequenced/14
+sequence/91
+sequencer/6
+sequence's/278
+sequences/278
+sequent/278
+sequentiality/274
+sequentialize/17
+sequential/528
+sequester/17
+sequestrate/15
+sequestration/6
+sequin/26
+sequitur
+Sequoia/6
+sequoia/7
+Sequoya/6
+Serafin/6
+seraglio/7
+serape/9
+seraphic
+seraphically
+seraphim's
+seraph/6
+seraphs
+sera's
+Serbia/6
+Serbian/9
+Serb/7
+Serbo/6
+serenade/111
+serenader/6
+Serena/6
+serendipitous/19
+serendipity/7
+serene/77
+Serene/6
+sereneness/7
+Serengeti/6
+serenity/7
+sere/181
+serfdom/7
+serf/7
+Sergeant/6
+sergeant/7
+serge/26
+Sergei/6
+Serge/6
+Sergent/6
+Sergio/6
+serialization/7
+serialize/17
+serial/65
+series/6
+serif/56
+serigraph/6
+serigraphs
+seriousness/7
+serious/28
+sermonize/17
+sermon/26
+serological/19
+serology/7
+serons
+serous
+Serpens/6
+serpent/26
+serpentine/662
+Serra/6
+Serrano/6
+serrate/15
+serration/6
+serried
+serum/7
+servant/26
+serve/494
+served/12
+server/751
+servers
+serviceability/7
+serviceableness/6
+serviceable/42
+serviced/12
+serviceman/6
+servicemen
+service/111
+service's/25
+services/25
+servicewoman
+servicewomen
+serviette/7
+servilely
+servileness/6
+serviles
+servile/12
+servility/7
+serving/7
+servitor/7
+servitude/7
+servomechanism/7
+servomotor/7
+servo/9
+sesame/7
+sesquicentennial/9
+sessile
+session/7
+setback/9
+Seth/6
+Set/6
+Seton/6
+set's
+setscrew/7
+set/752
+settable/14
+sett/753
+settee/7
+setter/6
+setting/63
+setting's
+settle/310
+settlement/48
+settler/7
+settling/9
+setup/7
+Seumas/6
+Seurat/6
+Seuss/6
+Sevastopol/6
+sevenfold
+sevenpence
+seven/216
+seventeen/216
+seventeenths
+sevenths
+seventieths
+seventy/216
+severalfold
+severalty/6
+several/16
+severance/7
+severed/25
+severeness/7
+severe/28
+severing/25
+severity/7
+Severn/6
+severs/25
+sever/181
+Severus/6
+Seville/6
+sewage/7
+Seward/6
+sewerage/7
+sewer/26
+sewing/7
+sewn
+sew/36
+sexagenarian/7
+sex/26
+sexily
+sexiness/7
+sexism/7
+sexist/7
+sexless
+sexologist/7
+sexology/7
+sexpot/7
+Sextans/6
+sextant/7
+sextet/7
+sextillion/6
+Sexton/6
+sexton/7
+sextuple/165
+sextuplet/7
+sexuality/7
+sexualized
+sexual/19
+sexy/98
+Seychelles
+Seyfert
+Seymour/6
+sf
+SF
+Sgt
+shabbily
+shabbiness/7
+shabby/98
+shack/26
+shackler/6
+shackle's
+Shackleton/6
+shackle/180
+shad/211
+shaded/12
+shadeless
+shade/7
+shadily
+shadiness/7
+shading/6
+shadowbox/17
+shadower/6
+shadow/111
+shadowiness/6
+Shadow/6
+shadowy/98
+shady/98
+Shae/6
+Shafer/6
+Shaffer/6
+shafting/6
+shaft/26
+shagged
+shagginess/7
+shagging
+shaggy/98
+shag/7
+shah/6
+shahs
+Shaina/6
+Shaine/6
+shakable/12
+shakably/12
+shakeable
+shakedown/9
+shaken/12
+shakeout/7
+shaker/6
+Shaker/9
+Shakespearean/9
+Shakespeare/6
+Shakespearian
+shake/240
+shakeup/9
+shakily
+shakiness/9
+shaking/6
+shaky/98
+shale/7
+shall
+shallot/7
+shallowness/7
+shallow/77
+Shalna/6
+Shalne/6
+shalom
+Shalom/6
+shalt
+shamanic
+shaman/7
+shamble/17
+shambles/6
+shamefaced/19
+shamefulness/9
+shameful/28
+shamelessness/7
+shameless/28
+shame/7
+sham/26
+shammed
+shammer
+shamming
+shammy's
+shampoo/49
+shampooer/6
+shamrock/7
+Shamus/6
+Shana/6
+Shanan/6
+Shanda/6
+Shandee/6
+Shandeigh/6
+Shandie/6
+Shandra/6
+shandy/6
+Shandy/6
+Shane/6
+Shanghai/207
+Shanghaiing/6
+shanghai/17
+Shanie/6
+Shani/6
+shank/26
+Shannah/6
+Shanna/6
+Shannan/6
+Shannen/6
+Shannon/6
+Shanon/6
+shan't
+Shanta/6
+Shantee/6
+shantis
+Shantung/6
+shantung/7
+shanty/7
+shantytown/7
+shape/395
+shaped/12
+shapelessness/7
+shapeless/28
+shapeliness/9
+shapely/98
+shaper/9
+shape's
+Shapiro/6
+sharable/12
+Sharai/6
+Shara/6
+shard/7
+shareable
+sharecropped
+sharecropper/7
+sharecropping
+sharecrop/9
+share/66
+shared/12
+shareholder/7
+shareholding/9
+sharer/6
+shareware/9
+Shari'a
+Sharia/6
+sharia/7
+Shari/6
+Sharity/6
+shark/26
+sharkskin/7
+Sharla/6
+Sharleen/6
+Sharlene/6
+Sharline/6
+Sharl/6
+Sharona/6
+Sharon/6
+Sharpe/6
+sharpen/36
+sharpened/12
+sharpener/9
+sharper/6
+sharpie/7
+Sharp/6
+sharpness/7
+sharp/383
+sharpshooter/6
+sharpshooting/6
+sharpshoot/173
+sharpy's
+Sharron/6
+Sharyl/6
+Shasta/6
+shat
+shatter/17
+shattering/19
+shatterproof
+Shaughn/6
+Shaula/6
+Shauna/6
+Shaun/6
+shave/179
+shaved/12
+shaver/6
+Shavian
+shaving/6
+Shavuot/6
+Shawano/6
+shawl/26
+shaw/6
+Shaw/6
+Shawna/6
+Shawnee/7
+Shawn/6
+Shaylah/6
+Shayla/6
+Shaylyn/6
+Shaylynn/6
+Shay/6
+shay/7
+Shayna/6
+Shayne/6
+Shcharansky/6
+sh/602
+sheaf/26
+Shea/6
+shearer/6
+shear/23
+sheather/6
+sheathe/180
+sheath/211
+sheathing/6
+sheaths
+sheave/17
+sheaves/6
+Sheba/6
+shebang/7
+Shebeli/6
+Sheboygan/6
+she'd
+shedding
+Shedir/6
+sheds
+shed's
+shed/12
+Sheelagh/6
+Sheelah/6
+Sheela/6
+Sheena/6
+sheen/26
+sheeny/80
+sheepdog/7
+sheepfold/7
+sheepherder/7
+sheepishness/7
+sheepish/28
+sheep/6
+sheepskin/7
+Sheeree/6
+sheerness/9
+sheer/77
+sheeting/6
+sheetlike
+sheet/211
+Sheetrock
+Sheffielder/6
+Sheffield/231
+Sheffie/6
+Sheff/6
+Sheffy/6
+sheikdom/7
+sheikh's
+sheik/7
+Sheilah/6
+Sheila/6
+shekel/7
+Shelagh/6
+Shela/6
+Shelba/6
+Shelbi/6
+Shelby/6
+Shelden/6
+Sheldon/6
+shelf/26
+Shelia/6
+she'll
+shellacked
+shellacking/7
+shellac/9
+shelled/12
+Shelley/6
+shellfire/7
+shellfish/7
+Shellie/6
+Shelli/6
+Shell/6
+shell/111
+Shelly/6
+Shel/86
+shelter/111
+sheltered/12
+shelterer/6
+Shelton/6
+shelve/187
+shelver/6
+shelves/6
+shelving/6
+she/6
+Shem/6
+Shena/6
+Shenandoah/6
+shenanigan/7
+Shenyang/6
+Sheol/6
+Shepard/6
+shepherd/26
+shepherdess/9
+Shepherd/6
+Shep/6
+Sheppard/6
+Shepperd/6
+Sheratan/6
+Sheraton/6
+sherbet/7
+sherd's
+Sheree/6
+Sheridan/6
+Sherie/6
+sheriff/7
+Sherill/6
+Sherilyn/6
+Sheri/6
+Sherline/6
+Sherlocke/6
+sherlock/6
+Sherlock/6
+Sher/6
+Sherman/6
+Shermie/6
+Sherm/6
+Shermy/6
+Sherpa/7
+Sherrie/6
+Sherri/6
+Sherry/6
+sherry/7
+Sherwin/6
+Sherwood/6
+Sherwynd/6
+Sherye/6
+Sheryl/6
+Shetland/9
+Shevardnadze/6
+shew/17
+shewn
+shh
+shiatsu/9
+shibboleth/6
+shibboleths
+shielded/12
+shielder/6
+shield/111
+Shields/6
+shiftily
+shiftiness/7
+shiftlessness/9
+shiftless/28
+shift/23
+shifty/98
+Shi'ite
+Shiite/7
+Shijiazhuang
+Shikoku/6
+shill/71
+shillelagh/6
+shillelaghs
+shilling/6
+Shillong/6
+Shiloh/6
+shimmed
+shimmer/17
+shimmery
+shimming
+shimmy/26
+shim/7
+Shina/6
+shinbone/7
+shindig/7
+shiner/6
+shine/9
+shingle/111
+shingler/6
+shinguard
+shininess/7
+shining/19
+shinned
+shinning
+shinny/26
+shin/49
+shinsplints
+Shintoism/9
+Shintoist/7
+Shinto/7
+shiny/98
+shipboard/7
+shipborne
+shipbuilder/6
+shipbuild/173
+shipload/7
+shipman/6
+shipmate/7
+shipmen
+shipment/48
+shipowner/7
+shippable
+shipped/14
+shipper/7
+shipping/7
+ship's
+shipshape
+ship/754
+shipwreck/26
+shipwright/7
+shipyard/7
+Shiraz/6
+shire/7
+shirker/6
+shirk/23
+Shirlee/6
+Shirleen/6
+Shirlene/6
+Shirley/6
+Shirline/6
+Shirl/6
+Shir/6
+shirr/71
+shirtfront/9
+shirting/6
+shirt/171
+shirtless
+shirtmake/164
+shirtmaker/6
+shirtsleeve/7
+shirttail/9
+shirtwaist/7
+shit/252
+shitting/251
+shitty/755
+Shiva/6
+shiverer/6
+shiver/52
+shivery
+shiv/96
+shivved
+shivving
+shlemiel's
+Shmuel/6
+shoal/172
+shoat/7
+shocker/6
+shocking/19
+Shockley/6
+shockproof
+shock/23
+shoddily
+shoddiness/7
+shoddy/177
+shod/12
+shoehorn/26
+shoeing
+shoelace/7
+shoemaker/6
+shoemake/90
+shoe/7
+shoer's
+shoeshine/7
+shoestring/7
+shoetree/7
+shogunate/7
+shogun/7
+Shoji/6
+Sholom/6
+shone
+shoo/17
+shoofly
+shook/7
+shooter/6
+shootout/7
+shoot/210
+shopkeeper/6
+shopkeep/174
+shoplifter/6
+shoplifting/6
+shoplift/23
+shop/7
+shopped/6
+shopper/6
+shoppe/179
+shopping/6
+shoptalk/7
+shopworn
+shorebird/9
+shore/211
+shoreline/7
+Shorewood/6
+shoring/6
+shortage/7
+shortbread/7
+shortcake/7
+shortchange/17
+shortcoming/7
+shortcrust
+shortcut/7
+shortcutting
+shortener/6
+shortening/6
+shorten/541
+shortfall/7
+shorthand/56
+Shorthorn/6
+shorthorn/7
+shortie's
+shortish
+shortlist/47
+Short/6
+shortness/7
+short/384
+shortsightedness/9
+shortsighted/28
+shortstop/7
+shortwave/7
+shorty/7
+Shoshana/6
+Shoshanna/6
+Shoshone/7
+Shostakovitch/6
+shotgunned
+shotgunner
+shotgunning
+shotgun/7
+shot/7
+shotted
+shotting
+shoulder/165
+shouldn't
+should/375
+shout/49
+shove/31
+shoveler/6
+shovelful/7
+shovel/49
+shover/6
+showbiz
+showbizzes
+showboat/26
+showcase/26
+showdown/7
+shower/165
+showery/54
+show/179
+showgirl/7
+showily
+showiness/7
+showing/6
+showman/6
+showmanship/7
+showmen
+shown
+showoff/9
+showpiece/7
+showplace/7
+showroom/7
+showy/98
+shpt
+shrank
+shrapnel/7
+shredded
+shredder/7
+shredding
+shred/7
+Shreveport/6
+shrewdness/7
+shrewd/33
+shrew/26
+shrewishness/6
+shrewish/28
+shrieker/6
+shriek/49
+shrift/7
+shrike/7
+shrill/226
+shrillness/7
+shrilly
+shrimp/26
+shrine/26
+shrinkage/7
+shrinker/6
+shrinking/12
+shrink/756
+shrivel/17
+shriven
+shrive/31
+Shropshire/6
+shroud/26
+shrubbed
+shrubbery/7
+shrubbing
+shrubby/54
+shrub/7
+shrugged
+shrugging
+shrug/9
+shrunk/122
+shtick/9
+shucker/6
+shuck/111
+shucks/9
+shudder/17
+shuddery
+shuffleboard/7
+shuffled/14
+shuffle/23
+shuffles/14
+shuffling/14
+Shulman/6
+Shu/6
+shunned
+shunning
+shun/9
+shunter/6
+shunt/31
+Shurlocke/6
+Shurlock/6
+Shurwood/6
+shush/17
+shutdown/7
+shuteye/7
+shutoff/6
+shutout/7
+shut/9
+shutterbug/9
+shutter/26
+shuttering/6
+shutting
+shuttlecock/26
+shuttle/26
+shy/430
+shyer
+shyest
+Shylockian/6
+Shylock/6
+shyness/7
+shyster/7
+Siamese/6
+Siam/6
+Siana/6
+Sianna/6
+Sian's
+Sibbie/6
+Sibby/6
+Sibeal/6
+Sibelius/6
+Sibella/6
+Sibelle/6
+Sibel/6
+Siberia/6
+Siberian/9
+sibilance/6
+sibilancy/6
+sibilant/16
+Sibilla/6
+Sibley/6
+sibling/7
+Sib/6
+Sibylla/6
+Sibylle/6
+sibylline
+Sibyl/6
+sibyl/7
+Siciliana/6
+Sicilian/9
+Sicily/6
+sickbay/6
+sickbed/9
+sickener/6
+sickening/19
+sicken/541
+sicker/19
+sick/384
+sickie/7
+sickish/28
+sickle/26
+sickliness/6
+sickly/226
+sickness/7
+sicko/9
+sickout/9
+sickroom/7
+sic/9
+sidearm/9
+sideband/7
+sidebar/7
+sideboard/7
+sideburns
+sidecar/7
+sided/14
+sidedness
+side/757
+sidekick/7
+sidelight/7
+sideline/111
+sidelong
+sideman/6
+sidemen
+sidepiece/9
+sidereal
+sider/360
+sides/14
+sidesaddle/7
+sideshow/7
+sidesplitting
+sidestepped
+sidestepping
+sidestep/9
+sidestroke/26
+sideswipe/26
+sidetrack/17
+sidewalk/7
+sidewall/7
+sidewards
+sideway/7
+sidewinder/7
+siding/7
+sidle/17
+Sid/6
+Sidnee/6
+Sidney/6
+Sidoney/6
+Sidonia/6
+Sidonnie/6
+SIDS
+siege/26
+Siegel/6
+Siegfried/6
+Sieglinda/6
+Siegmund/6
+Siemens/6
+Siena/6
+sienna/7
+Sierpinski/6
+sierra/7
+siesta/7
+sieve/453
+Siffre/6
+sifted/13
+sifter/6
+sift/179
+Sigfrid/6
+Sigfried/6
+SIGGRAPH/6
+sigh/52
+sigher/6
+sighs
+sighted/42
+sighter/6
+sighting/9
+sight/43
+sightless/19
+sightliness/135
+sightly/264
+sightread
+sightseeing/9
+sightsee/90
+Sigismond/6
+Sigismondo/6
+Sigismund/6
+Sigismundo/6
+Sig/6
+sigma/7
+sigmoid
+Sigmund/6
+signal/14
+signaled
+signaler/9
+signaling
+signalization/9
+signalize/17
+signally
+signalman/6
+signalmen
+signals
+signal's
+signatory/7
+signature/7
+signboard/7
+signed/404
+signer/120
+signet/26
+sign/758
+significance/43
+significantly/45
+significant/16
+signification/6
+signify/294
+signing/9
+Signora/6
+signora/7
+signore/6
+signori
+signories
+signorina/7
+signorine
+Signor/6
+signor/276
+signpost/26
+sign's
+signs/278
+Sigrid/6
+Sigurd/6
+Sigvard/6
+Sihanouk/6
+Sikhism/7
+Sikh/7
+Sikhs
+Sikkimese
+Sikkim/6
+Sikorsky/6
+silage/26
+Silas/6
+Sileas/6
+siled
+Sile/6
+silence/49
+silencer/6
+silentness/6
+silent/38
+Silesia/6
+silhouette/26
+silica/7
+silicate/7
+siliceous
+silicide/6
+silicone/7
+silicon/7
+silicoses
+silicosis/6
+silken/47
+silk/269
+silkily
+silkiness/7
+silkscreen/7
+silkworm/7
+silky/177
+silliness/7
+sill/7
+silly/177
+silo/131
+siltation/6
+silt/26
+siltstone/6
+silty/54
+Silurian/9
+Silvain/6
+Silva/6
+Silvana/6
+Silvan/6
+Silvano/6
+Silvanus/6
+silverer/6
+silverfish/7
+Silverman/6
+silver/254
+silversmith/6
+silversmiths
+Silverstein/6
+silverware/7
+silvery/98
+Silvester/6
+Silvia/6
+Silvie/6
+Silvio/6
+Si/6
+SIMD
+Simenon/6
+Simeon/6
+simian/9
+similar/75
+similarity/85
+simile/7
+similitude/85
+Simla/6
+simmer/17
+Simmonds/6
+Simmons/6
+Simmonsville/6
+Sim/7
+Simms/6
+Simona/6
+Simone/6
+Simonette/6
+simonize/17
+Simon/6
+Simonne/6
+simony/7
+simpatico
+simper/17
+simpleminded/28
+simpleness/9
+simple/226
+simpleton/7
+simplex/9
+simplicity/7
+simplified/12
+simplify/115
+simplistic
+simplistically
+simply
+Simpson/6
+simulacrum/6
+Simula/6
+SIMULA/6
+simulate/87
+simulation/82
+simulative
+simulator/85
+simulcast/17
+simultaneity/7
+simultaneousness/6
+simultaneous/28
+Sinai/6
+Sinatra/6
+since
+sincere/51
+sincereness/6
+sincerer
+sincerest
+sincerity/43
+Sinclair/6
+Sinclare/6
+Sindbad/6
+Sindee/6
+Sindhi/6
+sinecure/7
+sinecurist/6
+sine/7
+sinew/26
+sinewy
+sinfulness/7
+sinful/28
+Singaporean/9
+Singapore/6
+sing/759
+Singborg/6
+singeing
+singer/6
+Singer/6
+singe/9
+singing/19
+singlehanded/19
+singleness/7
+single/473
+Singleton/6
+singleton/7
+singletree/7
+singlet/7
+singsong/26
+singularity/7
+singularization/6
+singular/16
+Sinhalese/6
+sinisterness/6
+sinister/28
+sinistral/19
+sinkable/12
+sinker/6
+sink/67
+sinkhole/7
+Sinkiang/6
+sinking/6
+sinlessness/6
+sinless/28
+sin/699
+sinned
+sinner/7
+sinning
+sinter/170
+sinuosity/7
+sinuousities
+sinuousness/6
+sinuous/28
+sinusitis/7
+sinus/7
+sinusoidal/19
+sinusoid/7
+Siobhan/6
+Siouxie/6
+Sioux/6
+siphon/26
+siphons/12
+sipped
+sipper/7
+sipping
+sip/9
+sired/169
+sire/7
+siren/6
+sires/169
+siring/169
+Sirius/6
+sirloin/7
+Sir/7
+sirocco/7
+sirred
+sirring
+sirup's
+sir/269
+sisal/7
+Sisely/6
+Sisile/6
+sis/9
+Sissie/6
+sissified
+Sissy/6
+sissy/80
+sister/116
+sisterhood/7
+sisterliness/7
+sisterly/42
+sister's/14
+Sistine
+Sisyphean
+Sisyphus/6
+sit/760
+sitarist/7
+sitar/7
+sitcom/7
+site/761
+sits
+sitter/7
+sitting/7
+situate/15
+situational/19
+situationist
+situation/6
+situ/9
+situs/6
+Siusan/6
+Siva/6
+Siward/6
+sixfold
+sixgun
+six/488
+sixpence/7
+sixpenny
+sixshooter
+sixteen/488
+sixteenths
+sixths
+sixth/19
+sixtieths
+sixty/216
+sizableness/6
+sizable/42
+sized/13
+size/182
+sizer/6
+sizes/14
+sizing/6
+sizzler/6
+sizzle/31
+SJ
+Sjaelland/6
+SK
+ska/9
+skateboard/91
+skater/6
+skate/7
+skat/665
+skedaddle/17
+skeet/175
+skein/26
+skeletal/19
+skeleton/7
+Skell/6
+Skelly/6
+skeptical/19
+skepticism/7
+skeptic/7
+sketchbook/7
+sketcher/6
+sketchily
+sketchiness/7
+sketch/49
+sketchpad
+sketchy/98
+skew/435
+skewer/165
+skewing/6
+skewness/6
+skidded
+skidding
+skid/9
+skiff/26
+skiing/6
+skilfully
+skill/26
+skilled/12
+skillet/7
+skillfulnesses
+skillfulness/135
+skillful/161
+skilling/6
+skimmed
+skimmer/7
+skimming/7
+ski/762
+skimp/17
+skimpily
+skimpiness/7
+skimpy/98
+skim/7
+skincare
+skindive/224
+skinflint/7
+skinhead/7
+skinless
+skinned
+Skinner/6
+skinner/7
+skinniness/7
+skinning
+skinny/177
+skin/7
+skintight
+Skip/6
+skipped
+Skipper/6
+skipper/26
+Skippie/6
+skipping
+Skipp/114
+Skippy/6
+skip/9
+Skipton/6
+skirmisher/6
+skirmish/49
+skirter/6
+skirting/6
+skirt/111
+skit/26
+skitter/17
+skittishness/7
+skittish/28
+skittle/7
+skivvy/26
+skoal/17
+Skopje/6
+skulduggery/7
+skulker/6
+skulk/23
+skullcap/7
+skullduggery's
+skull/56
+skunk/26
+skycap/7
+skydiver/7
+skydiving/7
+Skye/6
+skyhook
+skyjacker/6
+skyjack/179
+Skylab/6
+skylarker/6
+skylark/111
+Skylar/6
+Skyler/6
+skylight/7
+skyline/7
+Sky/6
+sky/49
+skyrocket/26
+skyscraper/6
+skyscrape/90
+skyward/9
+skywave
+skyway/6
+skywriter/7
+skywriting/7
+slabbed
+slabbing
+slab/7
+slacken/47
+slacker/6
+slackness/7
+Slackware/6
+slack/383
+Slade/6
+slagged
+slagging
+slag/7
+slain
+slake/17
+slaked/12
+slalom/26
+slammed
+slammer/9
+slamming
+slam/9
+slander/49
+slanderousness/6
+slanderous/28
+slang/26
+slangy/54
+slanting/19
+slant/17
+slantwise
+slapdash/9
+slaphappy/54
+slap/7
+slapped
+slapper
+slapping
+slapstick/7
+slash/23
+slashing/19
+slater/6
+Slater/6
+slate/7
+slather/26
+slating/6
+slat/49
+slatted
+slattern/65
+slatting
+slaughterer/6
+slaughterhouse/7
+slaughter/91
+slave/49
+slaveholder/7
+slaver/165
+slavery/7
+Slavic/6
+slavishness/7
+slavish/28
+Slav/7
+Slavonic/6
+slaw/7
+slay/227
+sleaze/9
+sleazily
+sleaziness/7
+sleazy/98
+sledded
+sledder/9
+sledding
+sledgehammer/26
+sledge/26
+sled/7
+sleekness/9
+sleek/77
+sleeper/6
+sleepily
+sleepiness/7
+sleeping/6
+sleeplessness/7
+sleepless/28
+sleepover/9
+sleep/373
+sleepwalker/6
+sleepwalk/179
+sleepwear/6
+sleepyhead/7
+sleepy/98
+sleet/26
+sleety/54
+sleeveless
+sleeve/26
+sleeving/6
+sleigh/165
+sleighs
+sleight/7
+sleken/47
+slenderize/17
+slenderness/7
+slender/33
+slept
+Slesinger/6
+sleuth/165
+sleuths
+slew/17
+slice/49
+sliced/12
+slicer/6
+slicker/6
+slickness/7
+slick/100
+slider/6
+slide/9
+slid/242
+slight/77
+slighter/6
+slighting/19
+slightness/9
+slime/7
+sliminess/9
+slimline
+slimmed
+slimmer/9
+slimmest
+slimming/9
+slimness/9
+slim/22
+slimy/98
+sling/214
+slingshot/7
+slings/12
+slink/166
+slinky/54
+slipcase/7
+slipcover/26
+slipknot/7
+slippage/7
+slipped
+slipper/26
+slipperiness/9
+slippery/98
+slipping
+slipshod
+slip/7
+slipstream/26
+slipway/7
+slither/17
+slithery
+slit/7
+slitted
+slitter/9
+slitting
+sliver/26
+slivery
+Sloane/6
+Sloan/6
+slobber/17
+slobbery
+slob/7
+Slocum/6
+sloe/7
+sloganeer/207
+slogan/7
+slogged
+slogging
+slog/9
+sloop/7
+slop/23
+sloped/12
+slope/9
+slopped
+sloppily
+sloppiness/7
+slopping
+sloppy/98
+slosh/26
+slothfulness/7
+slothful/28
+sloth/165
+sloths
+slot/7
+slotted
+slotting
+slouch/23
+sloucher/6
+slouchy/54
+slough/165
+sloughs
+Slovakia/6
+Slovakian/9
+Slovak/9
+Slovene/9
+Slovenia/6
+Slovenian/9
+slovenliness/7
+slovenly/98
+sloven/65
+slowcoaches
+slowdown/7
+slowish
+slowness/7
+slow/77
+slowpoke/7
+SLR
+sludge/26
+sludgy/54
+slue/26
+sluggard/7
+slugged
+slugger/7
+slugging
+sluggishness/7
+sluggish/28
+slug/7
+sluice/26
+slumberer/6
+slumber/111
+slumberous
+slumlord/7
+slummed
+slummer
+slumming
+slum/7
+slummy/54
+slump/17
+slung/12
+slunk
+slur/7
+slurp/17
+slurred
+slurried/6
+slurring
+slurrying/6
+slurry/26
+slushiness/7
+slush/26
+slushy/98
+slut/7
+sluttish
+slutty/54
+Sly/6
+slyness/7
+sly/93
+smacker/6
+smack/49
+smallholders
+smallholding/7
+smallish
+Small/6
+smallness/9
+smallpox/7
+small/226
+smalltalk
+smalltime
+Smallwood/6
+smarmy/54
+smarten/47
+smartness/9
+smartypants
+smart/384
+smasher/6
+smash/23
+smashing/19
+smashup/9
+smattering/7
+smearer/6
+smear/31
+smeary/54
+smeller/6
+smelliness/7
+smell/318
+smelly/98
+smelter/6
+smelt/23
+Smetana/6
+smidgen/7
+smilax/7
+smile/111
+smiley/6
+smilies
+smiling/10
+smirch/17
+smirk/26
+Smirnoff/6
+smite/255
+smiter/6
+smith/165
+smithereens
+Smithfield/6
+Smith/6
+smiths
+Smithsonian/6
+Smithson/6
+Smithtown/6
+smithy/7
+smitten
+Smitty/6
+Sm/6
+smocking/6
+smock/171
+smoggy/54
+smog/7
+smoke/182
+smokehouse/7
+smokeless
+smoker/6
+smokescreen/9
+smokestack/7
+Smokey/6
+smokiness/9
+smoking/6
+smoky/177
+smoldering/19
+smolder/17
+Smolensk/6
+Smollett/6
+smooch/17
+smoothen/47
+smoother/6
+smoothie/7
+smoothness/7
+smooths
+smooth/763
+sm�rg�sbord/7
+smote
+smother/17
+SMSA/7
+SMTP
+Smucker/6
+smudge/17
+smudginess/6
+smudgy/98
+smugged
+smugger
+smuggest
+smugging
+smuggle/179
+smuggler/6
+smugness/7
+smug/46
+smut/7
+Smuts/6
+smutted
+smuttiness/7
+smutting
+smutty/98
+Smyrna/6
+snack/26
+snaffle/26
+snafu/26
+snagged
+snagging
+snag/7
+snail/26
+Snake
+snakebird/6
+snakebite/7
+snake/26
+snakelike
+snakeroot/6
+snaky/54
+snapback/6
+snapdragon/7
+snapped/12
+snapper/7
+snappily
+snappiness/7
+snapping/12
+snappishness/7
+snappish/28
+snappy/98
+snapshot/7
+snapshotted
+snapshotting
+snap/302
+snare/111
+snarer/6
+snarf/71
+snarler/6
+snarling/19
+snarl/180
+snarly/54
+snatch/23
+snatcher/6
+snazzily
+snazzy/54
+Snead/6
+sneaker/170
+sneakily
+sneakiness/7
+sneaking/19
+sneak/23
+sneaky/98
+Sneed/6
+sneerer/6
+sneer/211
+sneering/19
+sneeze/31
+Snell/6
+snicker/570
+snick/231
+snideness/6
+Snider/6
+snide/38
+sniffer/6
+sniff/23
+sniffle/31
+sniffler/6
+sniffles/6
+snifter/26
+snigger's
+sniper/6
+snipe/7
+snipped
+snipper/7
+snippet/7
+snipping
+snippy/54
+snip/23
+snitch/17
+snit/7
+sniveler/6
+snivel/179
+Sn/6
+snobbery/7
+snobbishness/9
+snobbish/28
+snobby/54
+snob/7
+Snodgrass/6
+snood/26
+snooker/165
+snook/96
+snooper/6
+snoop/23
+Snoopy/6
+snoopy/54
+snootily
+snootiness/7
+snoot/26
+snooty/98
+snooze/17
+snore/23
+snorkel/49
+snorter/6
+snort/23
+snot/7
+snotted
+snottily
+snottiness/7
+snotting
+snotty/98
+snout/26
+snowball/26
+snowbank/7
+Snowbelt/7
+snowbird/7
+snowblower/9
+snowboard/179
+snowbound
+snowcapped
+snowdrift/7
+snowdrop/7
+snowfall/7
+snowfield/7
+snowflake/7
+snow/26
+snowily
+snowiness/7
+Snow/6
+snowman/6
+snowmen
+snowmobile/111
+snowplough/6
+snowploughs
+snowplow/26
+snowshed
+snowshoeing
+snowshoe/175
+snowshoer/6
+snowstorm/7
+snowsuit/9
+snowy/98
+snubbed
+snubber
+snubbing
+snub/144
+snuffbox/7
+snuffer/6
+snuff/284
+snuffle/31
+snuffler/6
+snuffly/54
+snugged
+snugger
+snuggest
+snugging
+snuggle/17
+snuggly
+snugness/7
+snug/46
+Snyder/6
+so
+SO
+soaker/6
+soak/187
+soapbox/26
+soapiness/9
+soap/111
+soapstone/7
+soapsud/9
+soapy/98
+soar/187
+soarer/6
+soaring/19
+sobbed
+sobbing/19
+soberer/6
+soberness/7
+sober/604
+sobriety/43
+sobriquet/7
+sob/110
+Soc
+soccer/7
+sociabilities
+sociability/123
+sociable/9
+sociably/44
+socialism/7
+socialistic
+socialist/7
+socialite/7
+sociality/6
+socialization/7
+socialized/12
+socializer/6
+socialize/31
+socially/12
+social/16
+societal/19
+society/7
+socio
+sociobiology/6
+sociocultural/19
+sociodemographic
+socioeconomically
+socioeconomic/9
+sociolinguistics/6
+sociological/86
+sociologist/7
+sociology/7
+sociometric
+sociometry/6
+sociopath/6
+sociopaths
+socket/26
+sock/26
+Socorro/6
+Socrates/6
+Socratic/9
+soc/9
+soda/7
+sodded
+sodden/22
+soddenness/6
+sodding
+Soddy/6
+sodium/7
+sod/7
+sodomite/7
+sodomize/17
+Sodom/6
+sodomy/7
+soever
+sofa/7
+Sofia/6
+Sofie/6
+softball/7
+softbound
+softener/6
+soften/242
+softhearted
+softie's
+softness/7
+soft/35
+software/7
+softwood/7
+softy/7
+soggily
+sogginess/9
+soggy/98
+Soho/6
+soign�
+soiled/12
+soil/26
+soir�e/7
+sojourn/49
+solace/111
+solacer/6
+solaria
+solarium/6
+solar/9
+solder/49
+soldier/116
+soldiery/7
+sold/764
+solecism/7
+soled/360
+solemness
+solemnify/17
+solemnity/7
+solemnization/7
+solemnize/17
+solemnness/7
+solemn/33
+solenoid/7
+soler/278
+soles/380
+sole/46
+sol/111
+solicitation/9
+solicited/12
+solicitor/7
+solicitousness/9
+solicitous/28
+solicit/17
+solicitude/7
+solidarity/7
+solidi
+solidification/6
+solidify/15
+solidity/9
+solidness/7
+solid/38
+solidus/6
+soliloquies
+soliloquize/17
+soliloquy/6
+soling/72
+solipsism/7
+solipsist/9
+Solis/6
+solitaire/7
+solitary/144
+solitude/7
+Sollie/6
+Solly/6
+Sol/86
+solo/26
+soloist/7
+Solomon/7
+Solon/6
+Soloviev/6
+solstice/7
+solubility/43
+soluble/230
+solute/765
+solute's
+solution/154
+solvable/44
+solvating
+solve/639
+solved/147
+solvency/43
+solvent/230
+solvently
+solvent's
+solver/154
+solves/25
+solving/25
+Solzhenitsyn/6
+Somalia/6
+Somalian/9
+Somali/7
+soma/6
+somatic
+somberness/7
+somber/28
+sombre
+sombrero/7
+somebody'll
+somebody/7
+someday
+somehow
+someone'll
+someone/7
+someplace/6
+somersault/26
+Somerset/6
+somerset/9
+somersetted
+somersetting
+Somerville/6
+something/9
+sometime/9
+someway/9
+somewhat/9
+somewhere/9
+some/331
+sommelier/7
+Somme/6
+somnambulism/7
+somnambulist/7
+somnolence/7
+somnolent/19
+Somoza/6
+sonar/7
+sonata/7
+sonatina/7
+Sondheim/6
+Sondra/6
+Sonenberg/6
+songbag
+songbird/7
+songbook/9
+songfest/7
+songfulness/6
+songful/28
+Songhai/6
+Songhua/6
+song/7
+songster/7
+songstress/7
+songwriter/7
+songwriting
+Sonia/6
+sonic/9
+Sonja/6
+Son/6
+sonnet/26
+Sonnie/6
+Sonni/6
+Sonnnie/6
+Sonny/6
+sonny/7
+Sonoma/6
+Sonora/6
+sonority/9
+sonorousness/7
+sonorous/28
+son/65
+Sontag/6
+sonuvabitch
+Sonya/6
+Sony/6
+soonish
+soon/54
+soothe
+soother/6
+sooth/766
+soothingness/6
+soothing/28
+sooths
+soothsayer/6
+soothsay/173
+soot/26
+sooty/54
+SOP
+Sophey/6
+Sophia/7
+Sophie/6
+Sophi/6
+sophism/7
+sophister/6
+sophistical
+sophisticatedly
+sophisticated/12
+sophisticate/15
+sophistication/135
+sophistic/9
+sophist/175
+sophistry/7
+Sophoclean
+Sophocles/6
+sophomore/7
+sophomoric
+Sophronia/6
+soporifically
+soporific/7
+sopped
+sopping/9
+soppy/54
+soprano/7
+sop/7
+Sopwith/6
+sorbet/7
+Sorbonne/6
+sorcerer/7
+sorceress/9
+sorcery/7
+Sorcha/6
+sordidness/7
+sordid/28
+sorehead/7
+soreness/9
+Sorensen/6
+Sorenson/6
+sore/77
+sorghum/7
+sorority/7
+sorrel/7
+Sorrentine/6
+sorrily
+sorriness/7
+sorrower/6
+sorrowfulness/7
+sorrowful/28
+sorrow/111
+sorry/177
+sorta
+sortable
+sorted/12
+sorter/7
+sort/585
+sortieing
+sortie/56
+sort's
+sos
+SOS
+Sosa/6
+Sosanna/6
+Soto/6
+sot/7
+sottish
+soubriquet's
+souffl�/7
+sough/47
+soughs
+sought/12
+soulfulness/7
+soulful/28
+soulless/19
+soul/56
+sound/767
+soundboard/7
+sounders
+sounder's
+sounder/12
+soundest
+sounding/158
+soundings
+sounding's
+soundless/19
+soundly/12
+soundness/41
+soundproof/17
+soundproofing/6
+sound's
+sounds/14
+soundtrack/7
+soup�on/7
+soup/26
+Souphanouvong/6
+soupy/54
+source/438
+sourceless
+sourdough
+sourdoughs
+sourish
+sourness/7
+sourpuss/7
+sour/77
+Sousa/6
+sousaphone/7
+sous/17
+souse
+sou/216
+Southampton/6
+southbound
+southeastern
+southeaster/86
+Southeast/7
+southeast/96
+southeastward/9
+southerly/9
+souther/86
+southerner/6
+Southerner/7
+southernisms
+southernmost
+southern/418
+Southey/6
+Southfield/6
+southing/6
+southland/6
+South/6
+southpaw/7
+south/570
+souths
+Souths
+southward/9
+southwestern
+southwester/86
+Southwest/7
+southwest/96
+southwestward/9
+souvenir/7
+sou'wester
+sovereignty/7
+sovereign/65
+soviet/7
+Soviet/9
+sow/36
+sowbelly/6
+sowens/6
+sower/142
+Soweto/6
+sown/14
+sox's
+soybean/7
+Soyinka/6
+soy/7
+Soyuz/6
+Spaatz/6
+spacecraft/7
+space/91
+spaceflight/9
+spaceman/6
+spacemen
+spaceport/7
+spacer/6
+spaceship/7
+spacesuit/7
+spacewalk/26
+Spacewar/6
+spacewoman
+spacewomen
+spacey
+spacial
+spacier
+spaciest
+spaciness
+spacing/6
+spaciousness/7
+spacious/28
+Spackle
+spade/111
+spadeful/7
+spader/6
+spadework/7
+spadices
+spadix/6
+Spafford/6
+spaghetti/7
+Spahn/6
+Spain/6
+spake
+Spalding/6
+spam/7
+spammer/7
+spamming
+spa/7
+Span
+spandex/7
+spandrels
+spangle/26
+Spanglish/9
+Spaniard/7
+spanielled
+spanielling
+spaniel/7
+Spanish/6
+spanker/6
+spanking/6
+spank/187
+span/7
+spanned/12
+spanner/7
+spanning
+SPARC/6
+SPARCstation/6
+spar/172
+spareness/7
+spare/46
+spareribs
+sparer/6
+sparing/10
+sparker/6
+sparkle/23
+sparkler/6
+Sparkman/6
+Sparks
+spark/111
+sparky/54
+sparling/7
+sparred
+sparrer
+sparring/12
+sparrow/7
+sparseness/9
+sparse/28
+sparsity/9
+spars/54
+Spartacus/6
+Sparta/6
+spartan
+Spartan/9
+spasm/26
+spasmodic
+spasmodically
+spastic/9
+spate/7
+spathe/7
+spatiality/6
+spatial/19
+spat/7
+spatted
+spatter/17
+spatterdock/6
+spatting
+spatula/7
+spavin/56
+spawner/6
+spawn/111
+spay/17
+SPCA
+speakable/12
+speakeasy/7
+speaker/6
+Speaker's
+speakership/6
+speaking/12
+speak/193
+spearer/6
+spearfish/26
+spearhead/26
+spearmint/7
+spear/111
+Spears
+spec'd
+specialism/7
+specialist/7
+specialization/7
+specialized/12
+specialize/23
+specializing/12
+special/768
+specialty/7
+specie/7
+specif
+specifiability
+specifiable
+specifiably
+specifically
+specification/7
+specificity/9
+specific/144
+specified/12
+specifier/7
+specifies
+specify/769
+specifying
+specimen/7
+spec'ing
+speciousness/7
+specious/28
+speck/26
+speckle/26
+spec/7
+spectacle/56
+spectacular/16
+spectator/7
+specter/56
+specter's/14
+spectralness/6
+spectral/28
+spectra/6
+spectrogram/7
+spectrographically
+spectrograph/6
+spectrography/6
+spectrometer/7
+spectrometric
+spectrometry/6
+spectrophotometer/7
+spectrophotometric
+spectrophotometry/6
+spectroscope/7
+spectroscopic
+spectroscopically
+spectroscopy/7
+spectrum/6
+specularity
+specular/19
+speculate/24
+speculation/6
+speculative/19
+speculator/7
+sped
+speech/26
+speechlessness/7
+speechless/28
+speedboat/214
+speedboating/6
+speeder/6
+speedily
+speediness/7
+speedometer/7
+speed/198
+speedster/7
+speedup/7
+speedway/7
+speedwell/7
+speedy/98
+speer/6
+speleological
+speleologist/9
+speleology/7
+spellbinder/6
+spellbind/227
+spellbound
+spelldown/7
+spelled/14
+speller/6
+spelling/6
+spell/179
+spells/14
+spelunker/7
+spelunking/9
+Spencerian
+Spencer/6
+Spence/114
+spender/6
+spend/193
+spendthrift/7
+Spenglerian
+Spengler/6
+Spense/114
+Spenserian
+Spenser/6
+spent/12
+spermatophyte/6
+spermatozoa
+spermatozoon/6
+spermicidal
+spermicide/7
+sperm/7
+Sperry/6
+spew/179
+spewer/6
+SPF
+sphagnum/7
+sphere/26
+spherical/19
+spheric/9
+spherics/6
+spheroidal/19
+spheroid/7
+spherule/7
+sphincter/7
+Sphinx/6
+sphinx/7
+Spica/6
+spic/165
+spicebush/6
+spice/7
+spicily
+spiciness/7
+spicule/7
+spicy/98
+spider/7
+spiderweb/9
+spiderwort/6
+spidery/54
+Spiegel/6
+Spielberg/6
+spiel/26
+spier/6
+spiffy/181
+spigot/7
+spike/111
+Spike/6
+spiker/6
+spikiness/7
+spiky/98
+spillage/7
+Spillane/6
+spillover/7
+spill/31
+spillway/7
+spinach/7
+spinal/16
+spindle/211
+spindly/54
+spinelessness/6
+spineless/28
+spine/7
+spinet/7
+spininess/6
+spinnability/6
+spinnaker/7
+spinneret/7
+spinner/7
+spinning/7
+Spinoza/6
+spin/9
+spinsterhood/7
+spinsterish
+spinster/7
+spiny/98
+spiracle/7
+spiraea's
+spiral/183
+spire/770
+spirea/7
+spire's
+spiritedness/6
+spirited/28
+spirit/26
+spiritless
+spirits/45
+spiritualism/7
+spiritualistic
+spiritualist/7
+spirituality/7
+spiritual/46
+spirituous
+spirochete/7
+Spiro/6
+spiry/54
+spitball/7
+spite/311
+spitefuller
+spitefullest
+spitefulness/7
+spiteful/28
+spite's/14
+spitfire/7
+spit/17
+spitted
+spitting
+spittle/7
+spittoon/7
+Spitz/6
+splashdown/7
+splasher/6
+splash/23
+splashily
+splashiness/7
+splashy/98
+splat/7
+splatted
+splatter/17
+splatting
+splayfeet
+splayfoot/170
+splay/17
+spleen/7
+splendidness/6
+splendid/33
+splendorous
+splendor/7
+splenetic/9
+splicer/6
+splice/179
+spline/56
+splinter/165
+splintery
+splint/49
+splits/6
+split/7
+splittable
+splitter/7
+splitting/9
+splodge/7
+splotch/26
+splotchy/54
+splurge/26
+splutterer/6
+splutter/31
+Sp/6
+Spock/6
+spoilables
+spoilage/7
+spoil/265
+spoiled/12
+spoiler/266
+spoilsport/7
+Spokane/6
+spoke/17
+spoken/12
+spokeshave/7
+spokesman/6
+spokesmen
+spokespeople
+spokesperson/9
+spokeswoman/6
+spokeswomen
+spoliation/186
+spongecake
+sponge/49
+sponger/6
+sponginess/9
+spongy/98
+sponsor/26
+sponsorship/9
+spontaneity/7
+spontaneousness/6
+spontaneous/28
+spoof/26
+spookiness/7
+spook/26
+spooky/98
+spool/49
+spoonbill/7
+spoonerism/7
+spoonful/7
+spoon/26
+spoor/26
+sporadically
+sporadic/19
+spore/26
+sporran/7
+sportiness/7
+sporting/19
+sportiveness/6
+sportive/28
+sportscast/373
+sportsmanlike/12
+sportsman/86
+sportsmanship/7
+sportsmen
+sportswear/6
+sportswoman/6
+sportswomen
+sportswriter/9
+sport/152
+sporty/98
+Sposato/6
+spotlessness/7
+spotless/28
+spotlight/26
+spotlit
+spot/186
+spotted/12
+spotter/7
+spottily
+spottiness/7
+spotting/6
+spotty/98
+spousal/7
+spouse/26
+spouter/6
+spout/31
+sprain/17
+sprang/9
+sprat/7
+sprawl/17
+sprayed/13
+sprayer/6
+spray/49
+sprays/14
+spreadeagled
+spreader/6
+spread/193
+spreadsheet/9
+spreeing
+spree/56
+sprigged
+sprigging
+sprightliness/7
+sprightly/98
+sprig/7
+springboard/7
+springbok/7
+springeing
+springer/6
+Springfield/6
+springily
+springiness/7
+springing/6
+springlike
+spring/227
+Springsteen/6
+springtime/7
+springy/98
+sprinkle/179
+sprinkler/170
+sprinkling/6
+Sprint/6
+sprint/49
+sprite/7
+spritz/23
+sprocket/26
+sprocketed/12
+Sproul/6
+sprout/17
+spruce/502
+spruceness/7
+sprue/6
+sprung/12
+spryness/9
+spry/93
+SPSS
+spudded
+spudding
+spud/7
+Spuds/6
+spume/26
+spumone's
+spumoni/9
+spumy/54
+spun
+spunk/26
+spunky/228
+spurge/7
+spuriousness/7
+spurious/28
+spur/7
+spurn/31
+spurred
+spurring
+spurt/17
+sputa
+Sputnik
+sputnik/7
+sputter/31
+sputum/6
+spy/111
+spyglass/7
+sq
+sqq
+sqrt
+squabbed
+squabber
+squabbest
+squabbing
+squabbler/6
+squabble/23
+squab/7
+squadded
+squadding
+squadron/26
+squad/7
+squalidness/7
+squalid/33
+squaller/6
+squall/111
+squally/54
+squalor/7
+squamous/19
+squander/31
+Squanto
+square/502
+squareness/7
+squarer/6
+Squaresville/6
+squarish
+squash/31
+squashiness/6
+squashy/98
+squatness/7
+squat/46
+squatted
+squatter/26
+squattest
+squatting
+squawker/6
+squawk/49
+squaw/7
+squeaker/6
+squeakily
+squeakiness/9
+squeak/49
+squeaky/98
+squealer/6
+squeal/49
+squeamishness/7
+squeamish/28
+squeegee/56
+squeegeeing
+squeeze/67
+squeezer/6
+squelcher/6
+squelch/31
+squelchy/54
+squibbed
+Squibb/207
+squibbing
+Squibbing/6
+squib/7
+squidded
+squidding
+squid/7
+squiggle/26
+squiggly/54
+squinter/6
+squint/181
+squinting/19
+squirehood
+squire/26
+squirm/17
+squirmy/54
+squirrel/116
+squirter/6
+squirt/31
+squish/17
+squishy/98
+Sr
+Srinagar/6
+SRO
+S's
+SS
+SSA
+SSE
+ssh
+s's/771
+SSS
+SST
+SSW
+ST
+stabbed
+stabber/9
+stabbing/9
+stability/43
+stabilizability
+stabilization/120
+stabilization's
+stabilize/263
+stabilizer/7
+stableman/6
+stablemate
+stablemen
+stableness/135
+stable/446
+stabler/12
+stable's/278
+stables/278
+stablest/12
+stabling/6
+stably/12
+stab/16
+staccato/9
+Stacee/6
+Stace/6
+Stacey/6
+Stacia/6
+Stacie/6
+Staci/6
+stackable
+stacker/6
+stack's
+stack/180
+Stacy/6
+stadias
+stadia's
+stadium/7
+Stael/6
+Stafani/6
+staff/36
+Staffard/6
+staffer/7
+Stafford/6
+Staffordshire/6
+staffroom
+staff's
+Staford/6
+stag/91
+stagecoach/7
+stagecraft/7
+stagehand/7
+stager/6
+stage/7
+stagestruck
+stagflation/7
+stagged
+staggerer/6
+stagger/187
+staggering/19
+staggers/6
+stagging
+staginess/6
+staging/6
+stagnancy/7
+stagnant/19
+stagnate/15
+stagnation/6
+stagy/98
+Stahl/6
+staidness/7
+staid/33
+stained/12
+stainer/6
+stainless/16
+stain/31
+staircase/7
+stair/7
+stairway/7
+stairwell/7
+stake/26
+stakeholder/9
+stakeout/7
+stalactite/7
+stalag/6
+stalagmite/7
+stalemate/26
+staleness/7
+stale/77
+Staley/6
+Stalingrad/6
+Stalinist
+Stalin/7
+stalker/6
+stalk/91
+stall/171
+stalled/45
+stallholders
+stallion/7
+Stallone/6
+stalls/45
+stalwartness/6
+stalwart/46
+Sta/6
+stamen/7
+Stamford/6
+stamina/7
+staminate
+stammer/23
+stammerer/6
+stammering/19
+stampede/111
+stampeder/6
+stamped/12
+stamper/6
+stamp/179
+stance/43
+stancher/6
+stanch/181
+stanchion/26
+standalone
+standardization/48
+standardized/12
+standardize/23
+standardizer/6
+standardizes/14
+standard/65
+standby
+standbys
+standee/7
+Standford/6
+standing/6
+Standish/6
+standoffish
+standoff/7
+standout/7
+standpipe/7
+standpoint/7
+stand/210
+standstill/7
+Stanfield/6
+Stanford/6
+Stanislas/6
+Stanislaus/6
+Stanislavsky/6
+Stanislaw/6
+stank/9
+Stanleigh/6
+Stanley/6
+Stanly/6
+stannic
+stannous
+Stanton/6
+Stanwood/6
+Stan/65
+stanza/7
+staph/6
+staphs
+staphylococcal
+staphylococci
+staphylococcus/6
+stapled/12
+stapler/6
+Stapleton/6
+staple/49
+starboard/26
+starchily
+starchiness/7
+starch/26
+starchy/98
+stardom/7
+star/49
+stardust/7
+stare/9
+starfish/7
+Stargate/6
+stargaze/23
+staring/12
+Starkey/6
+Stark/6
+starkness/7
+stark/77
+Starla/6
+Starlene/6
+starless
+starlet/7
+starlight/7
+starling/7
+Starlin/6
+starlit
+Star/6
+starred
+starring
+Starr/6
+starry/54
+starship
+starstruck
+start/395
+starter/7
+startle/17
+startling/28
+startup/7
+starvation/7
+starveling/6
+starver/6
+starve/31
+stash/17
+stasis/6
+stat/29
+statecraft/7
+stated/12
+statehood/7
+statehouse/9
+Statehouse's
+state/295
+statelessness/7
+stateless/42
+stateliness/7
+stately/98
+statement/48
+Staten/6
+stater/6
+stateroom/7
+stateside
+state's/370
+states/370
+statesmanlike
+statesman/86
+statesmanship/7
+statesmen
+stateswoman
+stateswomen
+statewide
+statical/19
+static/9
+statics/6
+stationarity
+stationary/9
+stationer/6
+stationery/7
+stationmaster/6
+station/49
+statistical/19
+statistician/7
+statistic/7
+Statler/6
+stator/7
+statuary/7
+statue/56
+statuesque/28
+statuette/7
+stature/7
+status/7
+statute/7
+statutorily
+statutory/42
+Stauffer/6
+staunchness/9
+staunch/77
+stave/165
+Stavro/7
+stay/23
+stayer/6
+std
+STD
+stdio
+steadfastness/7
+steadfast/28
+steadily/12
+steadiness's
+steadiness/302
+steading/6
+stead/26
+steady/772
+steakhouse/7
+steak/7
+stealer/6
+stealing/6
+steal/773
+stealthily
+stealthiness/7
+stealth/6
+stealths
+stealthy/98
+steamboat/7
+steamer/165
+steamfitter/9
+steamfitting/9
+steamily
+steaminess/7
+steamroller/165
+steamroll/23
+steam/91
+steamship/7
+steamy/177
+Stearne/6
+Stearn/7
+steed/7
+Steele/6
+steeliness/7
+steelmaker/6
+steel/453
+steelworker/6
+steelwork/96
+steelyard/7
+steely/177
+Steen/6
+steepen/47
+steeper/6
+steeplebush/6
+steeplechase/26
+steeplejack/7
+steeple/7
+steepness/9
+steep/384
+steerage/7
+steerer/6
+steer/157
+steersman/6
+steersmen
+steeves
+Stefa/6
+Stefania/6
+Stefanie/6
+Stefan/6
+Stefano/6
+Steffane/6
+Steffen/6
+Steffie/6
+Steffi/6
+stegosauri
+stegosaurus/9
+Steinbeck/7
+Steinberg/6
+Steinem/6
+Steiner/6
+Steinmetz/6
+Stein/114
+stein/49
+Steinway/6
+Stella/6
+stellar
+stellated
+Ste/6
+stemless
+stemmed/12
+stemming
+stem/7
+stemware/7
+stench/26
+stenciler/6
+stencil/49
+stencillings
+Stendhal/6
+Stendler/6
+Stengel/6
+stenographer/7
+stenographic
+stenography/7
+steno/7
+stenotype/6
+stentorian
+stepbrother/7
+stepchild/6
+stepchildren
+stepdaughter/7
+stepfather/7
+Stepha/6
+Stephana/6
+Stephanie/6
+Stephani/6
+Stephan/6
+Stephannie/6
+Stephanus/6
+Stephenie/6
+Stephen/7
+Stephenson/6
+Stephie/6
+Stephi/6
+Stephine/6
+stepladder/7
+step/43
+stepmother/7
+stepparent/7
+stepper/6
+steppe/49
+steppingstone/9
+stepsister/7
+stepson/7
+stepwise
+stereographic
+stereography/6
+stereo/26
+stereophonic
+stereoscope/7
+stereoscopic
+stereoscopically
+stereoscopy/6
+stereotype/49
+stereotypic
+stereotypical/19
+sterile
+sterility/7
+sterilization/7
+sterilized/12
+sterilize/23
+sterilizes/14
+Sterling/6
+sterling/32
+sterlingness/6
+sternal
+Sternberg/6
+Sterne/6
+Stern/6
+sternness/9
+Sterno
+stern/77
+sternum/7
+steroidal
+steroid/7
+stertorous
+Stesha/6
+stethoscope/7
+stet/7
+stetson/7
+Stetson/7
+stetted
+stetting
+Steuben/6
+Stevana/6
+stevedore/26
+Steve/6
+Stevena/6
+Steven/7
+Stevenson/6
+Stevie/6
+Stevy/6
+steward/26
+stewardess/7
+Steward/6
+stewardship/7
+Stewart/6
+stew/26
+st/726
+sticker/6
+stickily
+stickiness/7
+stickleback/7
+stickle/242
+stickler/6
+stick/49
+stickpin/7
+stickup/7
+sticky/226
+Stieglitz/6
+stiffen/245
+stiff/384
+stiffness/7
+stifle/187
+stifler/6
+stifling/19
+stigma/7
+stigmata
+stigmatic/9
+stigmatization/169
+stigmatizations
+stigmatization's
+stigmatize/17
+stigmatized/12
+stile/26
+stiletto/26
+stillbirth/6
+stillbirths
+stillborn/9
+stiller/123
+stillest
+Stillman/6
+Stillmann/6
+stillness/7
+still/367
+Stillwell/6
+stilted/28
+stilt/26
+Stilton/7
+Stimson/6
+stimulant/7
+stimulated/12
+stimulate/24
+stimulation/6
+stimulative/9
+stimulator/6
+stimulatory
+stimuli/6
+stimulus/7
+Stine/6
+stinger/6
+sting/174
+stingily
+stinginess/7
+stinging/19
+stingray/7
+stingy/98
+stinkbug/9
+stinker/6
+stink/210
+stinking/19
+stinkpot/6
+Stinky/6
+stinky/54
+stinter/6
+stinting/12
+stint/211
+stipendiary
+stipend/7
+stipple/187
+stippler/6
+stipulate/15
+stipulation/6
+Stirling/6
+stirred/12
+stirrer/7
+stirring/16
+stirrup/7
+stir/9
+stitch/36
+stitcher/6
+stitchery/9
+stitching/7
+stitch's
+St/6
+stoat/7
+stochastic
+stochastically
+stochasticity
+stockade/26
+stockbreeder/7
+stockbroker/7
+stockbroking/9
+stocker/7
+Stockhausen/6
+stockholder/7
+Stockholm/6
+stockily
+stockiness/7
+stockinet's
+stockinette/9
+stocking/56
+stockist/7
+stockpile/31
+stockpiler/6
+stockpot/7
+stockroom/7
+stock's
+stock/36
+stocktaking/7
+Stockton/6
+stockyard/7
+stocky/98
+Stoddard/6
+stodge/6
+stodgily
+stodginess/9
+stodgy/98
+stogy/7
+stoical/19
+stoichiometric
+stoichiometry/6
+stoicism/7
+Stoicism/7
+stoic/7
+Stoic/7
+stoke/23
+stoker/6
+stokes/6
+Stokes/6
+STOL
+stole/56
+stolen
+stolidity/9
+stolidness/9
+stolid/33
+stolon/7
+stomachache/7
+stomacher/6
+stomach/49
+stomachs
+stomp/17
+stonecutter/7
+stone/111
+Stonehenge/6
+stoneless
+Stone/6
+stonemason/7
+stoner/6
+stonewall/17
+stoneware/7
+stonewashed
+stonework/7
+stonewort/6
+stonily
+stoniness/7
+stony/98
+stood
+stooge/26
+stool/26
+stoop/17
+stopcock/7
+stopgap/7
+stoplight/7
+stopover/7
+stoppable/12
+stoppage/7
+Stoppard/6
+stopped/12
+stopper/26
+stopping/6
+stopple/26
+stop's
+stops/6
+stop/302
+stopwatch/7
+storage/7
+store/395
+storefront/7
+storehouse/7
+storekeeper/6
+storekeep/90
+storeroom/7
+store's
+stork/7
+stormbound
+stormer/6
+Stormie/6
+stormily
+Stormi/6
+storminess/9
+Storm/6
+storm/49
+stormtroopers
+Stormy/6
+stormy/98
+storyboard/26
+storybook/7
+story/26
+storyline
+storyteller/7
+storytelling/7
+Stouffer/6
+stoup/7
+stouten/47
+stouthearted
+Stout/6
+stoutness/7
+stout/534
+stove/111
+stovepipe/7
+stover/6
+stowage/7
+stowaway/7
+Stowe/6
+stow/17
+Strabo/6
+straddler/6
+straddle/23
+Stradivari/7
+Stradivarius/6
+strafe/31
+strafer/6
+straggle/23
+straggly/54
+straightaway/9
+straightedge/7
+straightener/6
+straighten/242
+straightforwardness/7
+straightforward/46
+straightjacket's
+straightness/7
+straight/384
+straightway/9
+strain/119
+strained/404
+strainer/118
+straining/278
+strains/278
+straiten/47
+straitjacket/26
+straitlaced
+straitness/6
+strait/774
+stranded/42
+strand/31
+strangeness/7
+strange/775
+stranger/165
+stranglehold/7
+strangle/179
+strangles/6
+strangulate/15
+strangulation/6
+strapless/9
+strapped/12
+strapping/9
+strap's
+strap/302
+Strasbourg/6
+stratagem/7
+strata/7
+strategical/19
+strategic/9
+strategics/6
+strategist/7
+strategy/7
+Stratford/6
+strati
+stratification/6
+stratified/12
+stratify/15
+stratigraphic
+stratigraphical
+stratigraphy/6
+stratosphere/7
+stratospheric
+stratospherically
+stratum/6
+stratus/6
+Strauss
+Stravinsky/6
+strawberry/7
+strawflower/7
+straw/26
+strayer/6
+stray/111
+streak/49
+streaker/6
+streaky/54
+streamed/12
+streamer/6
+stream/49
+streaming/6
+streamline/111
+streetcar/7
+streetlight/7
+street/260
+streetwalker/7
+streetwise
+Streisand/6
+strengthen/36
+strengthener/7
+strength/451
+strengths
+strenuousness/7
+strenuous/28
+strep/7
+streptococcal
+streptococci
+streptococcus/6
+streptomycin/7
+stress/26
+stressed/12
+stressful/28
+stretchability/6
+stretchable/12
+stretch/67
+stretcher/165
+stretchy/98
+strew/232
+strewn
+striae
+stria/6
+striate/15
+striated/12
+striation/6
+stricken
+Strickland/6
+strict/360
+stricter
+strictest
+strictly
+strictness/9
+stricture/7
+stridden
+stridency/9
+strident/19
+strider/6
+stride/214
+strife/7
+strikebreaker/6
+strikebreaking/6
+strikebreak/174
+strikeout/9
+striker/6
+strike/210
+striking/19
+Strindberg/6
+stringed
+stringency/9
+stringent/19
+stringer/7
+stringiness/7
+stringing/6
+string's
+string/250
+stringy/98
+striper/6
+stripe/7
+strip/111
+stripling/6
+stripped/12
+stripper/7
+stripping
+stripteaser/6
+striptease/49
+stripy/54
+strive/20
+striven
+striver/6
+strobe/26
+stroboscope/7
+stroboscopic
+strode
+stroke/49
+stroking/6
+stroller/6
+stroll/23
+Stromberg/6
+Stromboli/6
+Strom/6
+strongbow
+strongbox/7
+Strongheart/6
+stronghold/7
+strongish
+Strong/6
+strongman/6
+strongmen
+strongroom/7
+strong/93
+strontium/7
+strophe/7
+strophic
+stropped
+stropping
+strop/7
+strove
+struck
+structuralism/6
+structuralist/7
+structural/19
+structured/13
+structureless
+structures/14
+structure/111
+structuring/14
+strudel/7
+struggle/31
+struggler/6
+strummed
+strumming
+strumpet/26
+strum/9
+strung/13
+strut/9
+strutted
+strutter/6
+strutting
+strychnine/7
+Stuart/7
+stubbed/6
+stubbing
+Stubblefield/7
+stubble/7
+stubbly/54
+stubbornness/7
+stubborn/77
+stubby/228
+stub/7
+stuccoes
+stucco/165
+stuck/12
+studbook/7
+studded
+studding/7
+Studebaker/6
+studentship/7
+student/7
+studiedness/6
+studied/28
+studier/7
+studio/7
+studiousness/7
+studious/28
+stud/7
+study/36
+stuffily
+stuffiness/7
+stuffing/6
+stuff/187
+stuffy/98
+stultify/15
+Stu/6
+stumble/23
+stumbling/19
+stumpage/6
+stumper/6
+stump/111
+stumpy/54
+stung
+stunk
+stunned
+stunner/6
+stunning/19
+stun/9
+stunted/42
+stunt/26
+stupefaction/7
+stupefy/17
+stupendousness/6
+stupendous/28
+stupidity/7
+stupidness/6
+stupid/38
+stupor/7
+sturdily
+sturdiness/7
+sturdy/177
+sturgeon/7
+Sturm/6
+stutter/23
+Stuttgart/6
+Stuyvesant/6
+sty/26
+Stygian
+styled/14
+style/49
+styles/14
+styli
+styling/14
+stylishness/9
+stylish/28
+stylistically
+stylistic/9
+stylist/7
+stylites
+stylization/7
+stylize/17
+stylos
+stylus/7
+stymieing
+stymie/142
+stymy's
+styptic/9
+styrene/7
+Styrofoam/9
+Styx/6
+suable
+Suarez/6
+suasion/85
+suaveness/9
+suave/33
+suavity/7
+subaltern/7
+subarctic/9
+subareas
+Subaru/6
+subassembly/6
+subatomic/9
+subbasement/7
+subbed
+subbing
+subbranch/9
+subcaste/6
+subcategorizing
+subcategory/7
+subchain
+subclassifications
+subclass/7
+subclauses
+subcommand/9
+subcommittee/7
+subcompact/9
+subcomponent/7
+subcomputation/7
+subconcept
+subconsciousness/7
+subconscious/46
+subconstituent
+subcontinental
+subcontinent/7
+subcontractor/7
+subcontract/26
+subcultural
+subculture/26
+subcutaneous/19
+subdirectory/9
+subdistrict/6
+subdivide/31
+subdivision/7
+subdued/19
+subdue/31
+subduer/6
+subexpression/7
+subfamily/7
+subfield/7
+subfile/7
+subfreezing
+subgoal/7
+subgraph
+subgraphs
+subgroup/131
+subharmonic/9
+subheading/6
+subhead/304
+subhuman/9
+subindex/6
+subinterval/7
+subj
+subject/163
+subjection/7
+subjectiveness/6
+subjective/46
+subjectivist/9
+subjectivity/7
+subjoin/17
+subjugate/15
+subjugation/6
+subjunctive/9
+sublayer
+sublease/26
+sublet/9
+subletting
+sublimate/15
+sublimation/6
+sublime/77
+sublimeness/6
+sublimer/6
+subliminal/19
+sublimity/7
+sublist/7
+subliterary
+sublunary
+submachine
+submarginal
+submarine/49
+submariner/6
+submerge/17
+submergence/7
+submerse/15
+submersible/9
+submersion/6
+submicroscopic
+submission/48
+submissiveness/7
+submissive/28
+submit/63
+submittable
+submittal
+submitted/14
+submitter/9
+submitting/14
+submode/9
+submodule/7
+sub/7
+subnational
+subnet/7
+subnetwork/7
+subnormal/16
+suboptimal
+suborbital
+suborder/7
+subordinately/45
+subordinates/45
+subordinate/148
+subordination/43
+subordinator
+subornation/7
+suborn/17
+subpage
+subparagraph/6
+subpart/7
+subplot/7
+subpoena/26
+subpopulation/7
+subproblem/7
+subprocess/7
+subprofessional/9
+subprogram/7
+subproject
+subproof/7
+subquestion/7
+subrange/7
+subregional/19
+subregion/7
+subrogation/6
+subroutine/7
+subsample/7
+subschema/7
+subscribe/36
+subscriber/7
+subscripted/12
+subscription/7
+subscript/17
+subsection/7
+subsegment/7
+subsentence
+subsequence/7
+subsequent/46
+subservience/7
+subservient/16
+subset/7
+subsidence/7
+subside/17
+subsidiarity
+subsidiary/7
+subsidization/7
+subsidized/12
+subsidizer/6
+subsidize/23
+subsidy/7
+subsistence/7
+subsistent
+subsist/17
+subsocietal
+subsoil/111
+subsonic
+subspace/7
+subspecies/6
+substance/7
+substandard
+substantially/44
+substantialness/6
+substantial/46
+substantiated/12
+substantiate/24
+substantiation/276
+substantiveness/6
+substantive/32
+substantivity
+substation/7
+substerilization
+substitutability
+substituted/12
+substitute/162
+substitutionary
+substitution/6
+substitutive/19
+substrata
+substrate/7
+substratum/6
+substring/9
+substructure/7
+subsume/17
+subsurface/9
+subsystem/7
+subtable/9
+subtask/7
+subteen/7
+subtenancy/7
+subtenant/7
+subtend/142
+subterfuge/7
+subterranean/16
+subtest
+subtext/7
+subtitle/26
+subtleness/6
+subtle/98
+subtlety/7
+subtly/12
+subtopic/7
+subtotal/26
+subtracter/6
+subtraction/7
+subtract/349
+subtrahend/7
+subtree/7
+subtropical
+subtropic/9
+subtype/7
+subunit/7
+suburbanite/7
+suburbanization/7
+suburbanized
+suburbanizing
+suburban/9
+suburbia/7
+suburb/7
+subvention/7
+subversion/7
+subversiveness/7
+subversive/46
+subverter/6
+subvert/31
+subway/26
+subzero
+succeeder/6
+succeed/31
+successfulness/6
+successful/10
+succession/7
+successiveness/6
+successive/28
+success/76
+successor/7
+successorship
+succinctness/7
+succinct/33
+succored/12
+succorer/6
+succor/49
+succotash/7
+succubus/6
+succulence/7
+succulency/7
+succulent/9
+succumb/17
+such
+suchlike
+sucker/165
+suck/67
+suckle/71
+suckling/6
+Sucre/6
+sucrose/7
+suction/26
+Sudanese/6
+Sudanic/6
+Sudan/6
+suddenness/7
+sudden/46
+Sudetenland/6
+sud/9
+suds/31
+sudsy/54
+sued/47
+suede/7
+Suellen/6
+Sue/6
+suer/6
+suet/7
+Suetonius/6
+suety
+sue/23
+Suez/6
+sufferance/7
+sufferer/6
+suffering/6
+suffer/179
+suffice/31
+sufficiency/43
+sufficient/51
+suffixation/9
+suffixed/12
+suffix/111
+suffocate/24
+suffocating/19
+Suffolk/6
+suffragan/9
+suffrage/7
+suffragette/7
+suffragist/7
+suffuse/24
+suffusion/6
+Sufi/6
+Sufism/6
+sugarcane/9
+sugarcoat/17
+sugarless
+sugarplum/7
+sugar/171
+sugary/54
+suggest/349
+suggester/6
+suggestibility/7
+suggestible
+suggestion/7
+suggestiveness/7
+suggestive/28
+sugillate
+Suharto/6
+suicidal/19
+suicide/26
+Sui/6
+suitability/302
+suitableness/9
+suitable/42
+suitably/12
+suitcase/7
+suited/12
+suite/7
+suiting/6
+suit/776
+suitor/7
+Sukarno/6
+Sukey/6
+Suki/6
+sukiyaki/7
+Sukkoth's
+Sukkot/9
+Sula/6
+Sulawesi/6
+Suleiman/6
+sulfaquinoxaline
+sulfa/9
+sulfate/26
+sulfide/9
+sulfite/6
+sulfonamide/7
+sulfur/26
+sulfuric
+sulfurousness/6
+sulfurous/28
+sulk/17
+sulkily
+sulkiness/9
+sulky/177
+Sulla/6
+sullenness/7
+sullen/33
+sullied/12
+Sullivan/6
+sully/17
+Sully/6
+sulphate/7
+sulphide/7
+sulphuric
+sultana/7
+sultanate/7
+sultan/7
+sultrily
+sultriness/7
+sultry/98
+Sulzberger/6
+sumach's
+sumac/7
+Sumatra/6
+Sumatran/9
+sumer/278
+Sumeria/6
+Sumerian/6
+summability/6
+summable
+summand/7
+summarily
+summarization/7
+summarized/12
+summarize/23
+summarizer/6
+summary/7
+summation/276
+summed
+Summerdale/6
+summerhouse/7
+summer/26
+Summer/7
+summertime/7
+summery/54
+summing
+summit/26
+summitry/7
+summoner/6
+summon/179
+summons/26
+sum/175
+Sumner/6
+sumo/7
+sump/7
+sumptuousness/7
+sumptuous/28
+Sumter/6
+Sun
+sunbaked
+sunbathe
+sunbather/6
+sunbathing/6
+sunbaths
+sunbath/23
+sunbeam/7
+Sunbelt/6
+sunblock/9
+sunbonnet/7
+Sunbird/6
+sunburn/26
+sunburst/7
+suncream
+sundae/7
+Sundanese/6
+Sundas
+Sunday/7
+sunder/17
+sundial/7
+sundowner/6
+sundown/49
+sundris
+sundry/9
+sunfish/7
+sunflower/7
+sunglass/7
+Sung/6
+sung/12
+sunk/363
+sunlamp/9
+sunless
+sunlight/7
+sunlit
+sun/7
+sunned
+Sunni/7
+sunniness/7
+sunning
+Sunnite/7
+Sunny/6
+sunny/177
+Sunnyvale/6
+sunrise/131
+sunroof/9
+sunscreen/9
+sunset/7
+sunsetting
+sunshade/7
+Sunshine/6
+sunshine/7
+sunshiny
+sunspot/7
+sunstroke/7
+suntanned
+suntanning
+suntan/7
+sunup/7
+superabundance/7
+superabundant
+superannuate/15
+superannuation/6
+superbness/6
+superb/33
+supercargoes
+supercargo/6
+supercharger/6
+supercharge/23
+superciliousness/7
+supercilious/28
+supercity/9
+superclass/6
+supercomputer/7
+supercomputing
+superconcept
+superconducting
+superconductivity/7
+superconductor/7
+supercooled
+supercooling
+supercritical
+superdense
+super/47
+superego/7
+supererogation/7
+supererogatory
+superficiality/9
+superficial/46
+superfine
+superfix/6
+superfluity/7
+superfluousness/9
+superfluous/28
+superheat/81
+superheroes
+superhero/7
+superhighway/7
+superhumanness/6
+superhuman/28
+superimpose/17
+superimposition/7
+superintendence/9
+superintendency/7
+superintendent/7
+superintend/17
+superiority/7
+Superior/6
+superior/65
+superlativeness/6
+superlative/46
+superlunary
+supermachine
+superman/6
+Superman/6
+supermarket/7
+supermen
+supermodel
+supermom/9
+supernal
+supernatant
+supernaturalism/6
+supernaturalness/6
+supernatural/46
+supernormal/19
+supernovae
+supernova/7
+supernumerary/9
+superordinate
+superpose/88
+superposition/7
+superpower/7
+superpredicate
+supersaturate/15
+supersaturation/6
+superscribe/17
+superscript/17
+superscription/7
+superseder/6
+supersede/31
+supersensitiveness/6
+supersensitive/42
+superset/7
+supersonically
+supersonic/9
+supersonics/6
+superstar/7
+superstition/7
+superstitious/28
+superstore/9
+superstructural
+superstructure/7
+supertanker/7
+supertitle/26
+superuser/7
+supervene/17
+supervention/9
+supervised/12
+supervise/15
+supervision/6
+supervisor/7
+supervisory
+superwoman/6
+superwomen
+supineness/6
+supine/46
+supper/165
+supplanter/6
+supplant/31
+supplemental/9
+supplementary/9
+supplementation/9
+supplementer/6
+supplement/111
+suppleness/7
+supple/777
+suppliant/9
+supplicant/7
+supplicate/15
+supplication/6
+supplier/118
+suppl/624
+supply/520
+supportability/6
+supportable/44
+supported/12
+supporter/6
+supporting/19
+supportive/19
+support/39
+supposed/19
+suppose/157
+supposition/7
+suppository/7
+suppressant/9
+suppressed/12
+suppressible/45
+suppression/7
+suppressive/42
+suppressor/9
+suppress/64
+suppurate/15
+suppuration/6
+supp/778
+supra
+supranational
+supranationalism/6
+suprasegmental
+supremacist/7
+supremacy/7
+supremal
+supremeness/6
+supreme/38
+supremo/6
+sup/110
+supt
+Supt/6
+Surabaya/6
+Surat/6
+surcease/26
+surcharge/26
+surcingle/26
+surd/6
+sured/45
+surefire
+surefooted
+surely
+sureness/7
+sureness's/12
+sure/236
+surer/45
+surest
+surety/7
+surfaced/13
+surface/779
+surfacer/48
+surfaces/14
+surfacing/14
+surfactant/7
+surfboard/26
+surfeit/111
+surfer/6
+surfing/6
+surf/91
+surged/14
+surge/116
+surgeon/7
+surgery/7
+surges/14
+surgical/19
+Suriname
+Surinamese
+Surinam's
+surliness/7
+surly/98
+surmiser/6
+surmise/31
+surmountable/44
+surmount/88
+surname/26
+surpassed/12
+surpass/17
+surpassing/19
+surplice/7
+surplus/7
+surplussed
+surplussing
+surprised/12
+surprise/211
+surpriser/6
+surprising/10
+surrealism/7
+surrealistic
+surrealistically
+surrealist/9
+surreality
+surreal/9
+surrender/31
+surrenderer/6
+surreptitiousness/9
+surreptitious/28
+surrey/7
+surrogacy/9
+surrogate/291
+surrogation/6
+surrounding/6
+surround/71
+surtax/26
+surveillance/7
+surveillant
+surveyed/14
+surveying/6
+survey/71
+surveyor/7
+surveys/14
+survivability/6
+survivable/12
+survivalist/9
+survival/7
+survive/318
+survivor/7
+survivorship/6
+Surya/6
+Sus
+Susana/6
+Susanetta/6
+Susan/6
+Susannah/6
+Susanna/6
+Susanne/6
+Susann/6
+susceptibilities
+susceptibility/123
+susceptible/45
+Susette/6
+SUSE/6
+sushi/7
+Susie/6
+Susi/6
+suspected/12
+suspecter/6
+suspect/31
+suspecting/12
+suspend/23
+suspended/13
+suspender/6
+suspenseful
+suspense/697
+suspension/118
+suspensive/19
+suspensor/6
+suspicion/26
+suspiciousness/6
+suspicious/28
+Susquehanna/6
+Sussex/6
+sustainability
+sustainable/12
+sustain/113
+sustainer/6
+sustainment/6
+sustenance/7
+Susy/6
+Sutherland/6
+Sutherlan/6
+sutler/7
+Sutton/6
+suture/26
+SUV
+Suva/6
+Suwanee/6
+Suzanna/6
+Suzanne/6
+Suzann/6
+suzerain/7
+suzerainty/7
+Suzette/6
+Suzhou/6
+Suzie/6
+Suzi/6
+Suzuki/6
+Suzy/6
+Svalbard/6
+svelte/33
+Svend/6
+Svengali
+Sven/6
+Sverdlovsk/6
+Svetlana/6
+SW
+swabbed
+swabbing
+swabby/9
+Swabian/7
+swab/7
+swaddle/17
+swagged
+swagger/31
+swagging
+swag/131
+Swahili/7
+swain/7
+SWAK
+swallower/6
+swallow/31
+swallowtail/7
+swam
+swami/7
+swamper/6
+swampland/7
+swamp/111
+swampy/98
+Swanee/6
+swankily
+swankiness/7
+swank/181
+swanky/177
+swanlike
+swan/7
+swanned
+swanning
+Swansea/6
+Swanson/6
+swappable/12
+swapped
+swapper/7
+swapping
+swap/9
+sward/26
+swarmer/6
+swarm/111
+swarthiness/6
+Swarthmore/6
+swarthy/98
+swart/42
+Swartz/6
+swashbuckler/7
+swashbuckling/9
+swash/31
+swastika/7
+SWAT
+swatch/7
+swathe
+swather/6
+swaths
+swath/211
+swat/9
+swatted
+swatter/26
+swatting
+swayback/142
+sway/31
+swayer/6
+Swaziland/6
+Swazi/7
+swearer/6
+swear/227
+swearword/7
+sweatband/7
+sweater/6
+sweatily
+sweatiness/6
+sweatpants
+sweat/373
+sweatshirt/9
+sweatshop/7
+sweaty/98
+Swedenborg/6
+Sweden/6
+swede/7
+Swede/7
+Swedish
+Swed/72
+Sweeney/7
+sweeper/6
+sweepingness/6
+sweeping/28
+sweep/193
+sweeps/6
+sweepstakes
+sweepstake's
+sweetbread/7
+sweetbrier/7
+sweetcorn
+sweetened/12
+sweetener/6
+sweetening/6
+sweeten/245
+sweetheart/7
+sweetie/7
+sweeting/6
+sweetish/19
+Sweet/6
+sweetmeat/7
+sweetness/7
+sweetshop
+sweet/243
+swellhead/142
+swelling/6
+swell/743
+swelter/71
+sweltering/19
+Swen/6
+Swenson/6
+swept
+sweptback
+swerve/17
+swerving/12
+swifter/6
+swift/77
+Swift/6
+swiftness/7
+swigged
+swigging
+swig/7
+swill/17
+swimmer/7
+swimming/65
+swim/9
+swimsuit/7
+Swinburne/6
+swindle/23
+swindler/6
+swineherd/7
+swine/7
+swingeing
+swinger/6
+swinging/19
+swing/193
+swingy/164
+swinishness/6
+swinish/28
+Swink/6
+swipe/17
+swirling/19
+swirl/31
+swirly/54
+swish/31
+swishy/164
+swiss
+Swiss/9
+switchback/26
+switchblade/7
+switchboard/7
+switcher/6
+switch/182
+switchgear
+switchman/6
+switchmen/6
+switchover/6
+Switzerland/6
+Switzer/6
+Switz/114
+swivel/26
+swizzle/570
+swob's
+swollen
+swoon/31
+swooning/19
+swoop/31
+swoosh/17
+swop's
+sword/26
+swordfish/7
+swordplayer/6
+swordplay/175
+swordsman/6
+swordsmanship/7
+swordsmen
+swordtail/6
+swore
+sworn
+swot/9
+swum
+swung
+s/780
+sybarite/7
+sybaritic
+Sybila/6
+Sybilla/6
+Sybille/6
+Sybil/6
+Sybyl/6
+sycamore/7
+sycophancy/9
+sycophantic
+sycophantically
+sycophant/65
+Sydelle/6
+Sydel/6
+Syd/6
+Sydney/6
+Sykes/6
+Sylas/6
+syllabicate/15
+syllabication/6
+syllabicity
+syllabic/9
+syllabification/6
+syllabify/15
+syllabi's
+syllable/26
+syllabub/6
+syllabus/7
+syllabusss
+syllogism/7
+syllogistic
+Sylow/6
+sylphic
+sylphlike
+sylph/6
+sylphs
+Sylvania/6
+Sylvan/6
+sylvan/9
+Sylvester/6
+Sylvia/6
+Sylvie/6
+Syman/6
+symbiont/6
+symbioses
+symbiosis/6
+symbiotic
+symbol/26
+symbolical/19
+symbolics/6
+symbolic/7
+symbolism/7
+symbolist/7
+symbolization/48
+symbolized/12
+symbolize/23
+symbolizes/14
+Symington/6
+symmetric
+symmetrically/12
+symmetricalness/6
+symmetrical/28
+symmetrization/6
+symmetrizing
+symmetry/7
+Symon/6
+sympathetically/12
+sympathetic/9
+sympathized/12
+sympathizer/6
+sympathize/179
+sympathizing/781
+sympathy/7
+symphonic
+symphonists
+symphony/7
+symposium/7
+symptomatic
+symptomatically
+symptomatology/6
+symptom/7
+syn
+synagogal
+synagogue/7
+synapse/26
+synaptic
+synchronism/6
+synchronization's
+synchronization/63
+synchronize/311
+synchronized/12
+synchronizer/7
+synchronousness/6
+synchronous/28
+synchrony
+synchrotron/6
+syncopate/24
+syncopation/6
+syncope/7
+sync/17
+syndicalist
+syndicate/269
+syndic/7
+syndrome/7
+synergism/7
+synergistic
+synergy/7
+synfuel/9
+Synge/6
+synod/7
+synonymic
+synonymous/19
+synonym/7
+synonymy/7
+synopses
+synopsis/6
+synopsized
+synopsizes
+synopsizing
+synoptic/9
+syntactical/19
+syntactics/6
+syntactic/16
+syntax/7
+syntheses
+synthesis/6
+synthesized/12
+synthesize/23
+synthesizer/6
+synthesizes/14
+synthetically
+synthetic/9
+syphilis/7
+syphilitic/9
+syphilized
+syphilizing
+Syracuse/6
+Syriac/6
+Syria/6
+Syrian/7
+syringe/26
+syrup/26
+syrupy
+sys
+systematical/19
+systematics/6
+systematic/144
+systematization/7
+systematized/12
+systematizer/6
+systematize/23
+systematizing/12
+systemically
+systemic/9
+systemization/7
+system/7
+systole/7
+systolic
+Szilard/6
+Szymborska/6
+TA
+Tabasco/7
+Tabatha/6
+Tabbatha/6
+tabbed
+Tabbie/6
+Tabbi/6
+tabbing
+Tabbitha/6
+Tabb/6
+tabbouleh
+tabboulehs
+tabby/17
+Tabby/6
+Taber/6
+Tabernacle/9
+tabernacle/26
+Tabina/6
+Tabitha/6
+tabla/7
+tableau/6
+tableaux
+tablecloth/6
+tablecloths
+table/26
+tableland/7
+tablespoonful/7
+tablespoon/7
+tablet/26
+tabletop/7
+tableware/7
+tabling/6
+tabloid/7
+Tab/114
+taboo/26
+Tabor/6
+tabor/26
+Tabriz/7
+tab/7
+tabula
+tabular/19
+tabulate/15
+tabulation/6
+tabulator/7
+tachometer/7
+tachometry
+tachycardia/7
+tachyon/7
+tacitness/7
+taciturnity/7
+taciturn/19
+Tacitus/6
+tacit/28
+tacker/6
+tack/49
+tackiness/7
+tackler/6
+tackle/49
+tackling/6
+tacky/177
+Tacoma/6
+taco/7
+tact/276
+tactfulness/9
+tactful/28
+tactical/19
+tactician/7
+tactic/7
+tactile/19
+tactility/9
+tactlessness/7
+tactless/28
+tactual/19
+Taddeo/6
+Taddeusz/6
+Tadd/6
+Tadeas/6
+Tadeo/6
+Tades
+Tadio/6
+Tad/6
+tadpole/7
+tad/7
+Tadzhikistan's
+Tadzhikstan/6
+Taegu/6
+Taejon/6
+taffeta/7
+taffrail/7
+Taffy/6
+taffy/7
+Taft/6
+Tagalog/7
+tagged/12
+tagger/9
+tagging
+Tagore/6
+tag/7
+Tagus/6
+Tahitian/9
+Tahiti/6
+Tahoe/6
+Taichung/6
+taiga/7
+tailback/7
+tail/782
+tailcoat/9
+tailer/118
+tailgate/111
+tailgater/6
+tailing/7
+taillessness/6
+tailless/42
+taillight/7
+tailor/50
+Tailor/6
+tailpipe/7
+tailspin/7
+tailwind/7
+Tainan/6
+Taine/6
+taint/17
+tainted/12
+Taipei/6
+Taite/6
+Tait/6
+Taiwanese
+Taiwan/6
+Taiyuan/6
+Tajikistan
+takeaway/9
+taken/14
+takeoff/7
+takeout/9
+takeover/7
+taker/6
+take/783
+takes/58
+taking/58
+Taklamakan/6
+Talbert/6
+Talbot/6
+talcked
+talcking
+talc/7
+talcum/9
+talebearer/7
+talented/6
+talentless
+talent/56
+taler/6
+tale/197
+tali
+Talia/6
+Taliesin/6
+talion/6
+talismanic
+talisman/7
+talkativeness/7
+talkative/28
+talker/6
+talk/23
+talkie/6
+talky/228
+Talladega/6
+Tallahassee/6
+Tallahatchie/6
+Tallahoosa/6
+tallboy/7
+Tallchief/6
+Talley/6
+Talleyrand/6
+Tallia/6
+Tallie/6
+Tallinn/6
+tallish
+tallness/7
+Tallou/6
+tallow/26
+tallowy
+tall/98
+Tallulah/6
+tally/23
+tallyho/26
+Tally/6
+Talmudic
+Talmudist/7
+Talmud/7
+talon/56
+talus/7
+Talyah/6
+Talya/6
+Ta/6
+tamable/6
+tamale/7
+tamarack/7
+Tamarah/6
+Tamara/6
+tamarind/7
+Tamar/6
+Tamarra/6
+Tamas
+tambourine/7
+tamed/12
+Tameka/6
+tameness/9
+Tamera/6
+Tamerlane/6
+tame/46
+Tamika/6
+Tamiko/6
+Tamil/7
+Tami/6
+Tam/6
+Tamma/6
+Tammany/6
+Tammara/6
+tam/784
+Tammie/6
+Tammi/6
+Tammy/6
+Tampa/6
+Tampax/6
+tampered/12
+tamperer/6
+tamper/242
+tampon/26
+tamp/23
+Tamqrah/6
+Tamra/6
+tanager/7
+Tanaka/6
+Tana/6
+Tananarive/6
+tanbark/7
+Tancred/6
+tandem/7
+Tandie/6
+Tandi/6
+tandoori/9
+Tandy/6
+Taney/6
+T'ang
+Tanganyika/6
+tangelo/7
+tangency/6
+tangential/19
+tangent/7
+tangerine/7
+tang/116
+tangibility/43
+tangible/785
+tangibleness's/45
+tangibleness/7
+tangibly/45
+Tangier/6
+tangle's
+tangle/180
+tango/26
+Tangshan/6
+tangy/228
+Tanhya/6
+Tania/6
+Tani/6
+Tanisha/6
+Tanitansy/6
+tankard/7
+tanker/6
+tankful/7
+tank/49
+Tan/6
+tan/7
+tanned/12
+Tannenbaum/6
+Tanner/6
+tanner/7
+tannery/7
+tannest
+Tanney/6
+Tannh�user/6
+Tannie/6
+tanning/7
+tannin/7
+Tann/114
+Tanny/6
+Tansy/6
+tansy/7
+tantalization/7
+tantalized/12
+tantalize/23
+tantalizingly/9
+tantalizingness/9
+tantalizing/28
+tantalum/7
+Tantalus/6
+tantamount
+tantra/9
+tantrum/7
+Tanya/6
+Tanzania/6
+Tanzanian/9
+taoism
+Taoism/7
+Taoist/7
+taoist/9
+Tao/6
+tao/9
+Tapdance/6
+taped/12
+tapeline/9
+taperer/6
+taper/52
+tape/7
+tapestry/26
+tapeworm/7
+tapioca/7
+tapir/7
+tap/91
+tapped/12
+tapper/7
+tappet/7
+tapping/6
+taproom/7
+taproot/7
+taps/6
+Tarah/6
+Tara/6
+tarantella/7
+tarantula/7
+Tarawa/6
+Tarazed/6
+Tarbell/6
+tardily
+tardiness/9
+tardy/177
+tare/7
+target/26
+tar/26
+tariff/26
+Tarim/6
+Tarkington/6
+tarmacked
+tarmacking
+tarmac/9
+tarnished/12
+tarnish/17
+tarn/7
+taro/7
+tarot/7
+tarpapered
+tarpaulin/7
+tarp/7
+tarpon/7
+tarragon/7
+Tarrah/6
+Tarra/6
+Tarrance/6
+tarred/6
+tarring/6
+tarry/181
+Tarrytown/6
+tarsal/9
+tarsi
+tarsus/6
+tartan/7
+tartaric
+Tartar's
+tartar/7
+Tartary/6
+tartness/7
+tart/502
+Tartuffe/6
+Taryn/6
+Tarzan/6
+Tasha/6
+Tashkent/6
+Tasia/6
+task/26
+taskmaster/7
+taskmistress/7
+Tasmania/6
+Tasmanian/9
+tassellings
+tassel/26
+Tass/6
+tasted/147
+tastefulness/85
+tasteful/361
+taste/91
+tastelessness/7
+tasteless/28
+taster/6
+taste's/25
+tastes/25
+tastily
+tastiness/7
+tasting/25
+tasty/98
+tatami/7
+Tatar/7
+Tate/6
+tater/6
+Tatiana/6
+Tatiania/6
+tat/110
+tatted
+tatterdemalion/7
+tattered/6
+tatter/17
+tatting/7
+tattler/6
+tattle/23
+tattletale/7
+tattooer/6
+tattooist/7
+tattoo/49
+tatty/164
+Tatum/6
+taught/13
+taunter/6
+taunting/19
+taunt/23
+taupe/7
+Taurus/7
+tau/7
+tauten/47
+tautness/9
+tautological/19
+tautologous
+tautology/7
+taut/384
+taverner/6
+tavern/175
+tawdrily
+tawdriness/7
+tawdry/177
+Tawney/6
+Tawnya/6
+tawny/225
+Tawsha/6
+taxable/9
+taxably
+taxation/7
+taxed/12
+taxicab/7
+taxidermist/7
+taxidermy/7
+taxi/26
+taximeter/7
+taxing/19
+taxiway/7
+taxonomic
+taxonomically
+taxonomist/7
+taxonomy/7
+taxpayer/7
+taxpaying/6
+tax/182
+Taylor/7
+Tb
+TB
+TBA
+Tbilisi/6
+tbs
+tbsp
+Tchaikovsky/6
+Tc/6
+TCP
+TD
+TDD
+Te
+teabag/9
+teacake/7
+teacart/6
+teachable/42
+teach/250
+teacher/7
+teaching/7
+teacloth
+teacupful/7
+teacup/7
+Teador/6
+teahouse/7
+teakettle/7
+teak/7
+teakwood/6
+tealeaves
+teal/7
+tea/26
+teammate/7
+team/111
+teamster/7
+teamwork/7
+teapot/7
+tearaway
+teardrop/7
+tearer/6
+tearfulness/6
+tearful/28
+teargas/9
+teargassed
+teargassing
+tearjerker/9
+tearoom/7
+tear/111
+teary/54
+Teasdale/6
+tease/201
+teasel/26
+teaser/6
+teashop/7
+teasing/19
+teaspoonful/7
+teaspoon/7
+teas/23
+teatime/7
+teat/56
+tech/81
+technetium/7
+technicality/7
+technicalness/6
+technical/46
+technician/7
+Technicolor/7
+Technion/6
+technique/7
+technocracy/7
+technocratic
+technocrat/9
+technological/19
+technologist/7
+technology/7
+technophobia
+technophobic
+techs
+tectonically
+tectonic/9
+tectonics/6
+Tecumseh/6
+Tedda/6
+Teddie/6
+Teddi/6
+Tedd/6
+Teddy/6
+teddy/7
+Tedie/6
+Tedi/6
+tediousness/7
+tedious/28
+tedium/7
+Ted/6
+Tedman/6
+Tedmund/6
+Tedra/6
+tee/786
+teeing
+teem/17
+teemingness/6
+teeming/28
+teenager/6
+teenage/90
+Teena/6
+teen/208
+teenybopper/7
+teeny/54
+teepee's
+teeshirt/9
+teeter/17
+teethe
+teether/6
+teething/6
+teethmarks
+teeth/211
+teetotaler/6
+teetotalism/7
+teetotal/23
+TEFL
+Teflon/7
+Tegucigalpa/6
+Teheran's
+Tehran
+TEirtza/6
+tektite/7
+Tektronix/6
+telecast/227
+telecommunicate/107
+telecommunication/6
+telecommute/179
+telecoms
+teleconference/171
+Teledyne/6
+Telefunken/6
+telegenic
+telegrammed
+telegramming
+telegram/7
+telegraphic
+telegraphically
+telegraphist/7
+telegraph/259
+telegraphs
+telegraphy/7
+telekineses
+telekinesis/6
+telekinetic
+Telemachus/6
+Telemann/6
+telemarketer/9
+telemarketing/9
+telemeter/26
+telemetric
+telemetry/7
+teleological/19
+teleology/6
+telepathic
+telepathically
+telepathy/7
+telephone/49
+telephonic
+telephonist/7
+telephony/7
+telephotography/7
+telephoto/9
+teleprinter/7
+teleprocessing/9
+teleprompter
+TelePrompter/6
+TelePrompTer/9
+telescope/26
+telescopic
+telescopically
+teletext/9
+telethon/7
+teletype/7
+Teletype/7
+teletypewriter/7
+televangelism/9
+televangelist/9
+televise/15
+television/6
+televisor/7
+televisual
+telex/26
+Telex/6
+tell/250
+Teller/6
+teller/26
+telling/16
+Tell/114
+telltale/7
+tellurium/7
+telly/7
+Telnet/6
+TELNET/6
+telnet/9
+telomeric
+tel/16
+Telugu/6
+temblor/7
+temerity/7
+Tempe/6
+temperamental/19
+temperament/7
+temperance/43
+tempera/489
+temperately/45
+temperateness's/45
+temperateness/7
+temperate/22
+temperature/7
+tempered/147
+temper/570
+tempering/25
+temper's/25
+tempers/25
+tempest/26
+tempestuousness/7
+tempestuous/28
+template/281
+template's
+Temple/6
+Templeman/6
+temple/56
+Templeton/6
+Temp/6
+tempoes
+tempo/7
+temporal/16
+temporarily
+temporarinesses
+temporariness/274
+temporary/787
+temporize/179
+temporizer/6
+temporizings/12
+temporizing/86
+temp/550
+temptation/7
+tempted
+tempter/9
+tempt/281
+tempting/16
+temptress/7
+tempura/7
+tenabilities
+tenability/135
+tenableness/6
+tenable/42
+tenably
+tenaciousness/9
+tenacious/28
+tenacity/9
+tenancy/7
+tenanted/12
+tenant/26
+tenantry/7
+tench/6
+tended/147
+tendency/7
+tendentiousness/7
+tendentious/28
+tendered
+tenderer
+tenderest
+tenderfoot/7
+tender/281
+tenderheartedness/7
+tenderhearted/28
+tendering
+tenderizer/6
+tenderize/23
+tenderloin/7
+tenderly
+tenderness/7
+tending/25
+tendinitis/9
+tend/788
+tendon/7
+tendril/7
+tends/25
+tenebrous
+tenement/7
+tenet/7
+Tenex/6
+TENEX/6
+tenfold/9
+ten/789
+Tenneco/6
+tenner
+Tennessean/9
+Tennessee/6
+Tenney/6
+tennis/7
+Tenn/6
+Tennyson/6
+Tenochtitlan/6
+tenon/26
+tenor/7
+tenpin/7
+tense/790
+tenseness's/45
+tenseness/7
+tensile
+tensional/45
+tension/111
+tensionless
+tensions/25
+tension's/45
+tensity/43
+tensorial
+tensor/7
+tenspot
+tens/791
+tentacle/56
+tentativeness/9
+tentative/46
+tented/404
+tenterhook/7
+tenter/6
+tent/710
+tenths
+tenth/16
+tenting/278
+tenuity/9
+tenuousness/7
+tenuous/28
+tenure/56
+Teodoor/6
+Teodora/6
+Teodorico/6
+Teodor/6
+Teodoro/6
+tepee/7
+tepidity/9
+tepidness/9
+tepid/28
+tequila/7
+Tera/6
+teratogenic
+teratology/7
+terbium/7
+tercel/6
+tercentenary/9
+tercentennial/9
+Terence/6
+Terencio/6
+Teresa/6
+Terese/6
+Tereshkova/6
+Teresina/6
+Teresita/6
+Teressa/6
+Teriann/6
+Teri/6
+Terkel/6
+termagant/7
+termcap
+termer/6
+terminable/792
+terminableness/495
+terminal/65
+terminate/793
+terminated/12
+terminates
+terminating
+termination/266
+terminative/645
+terminator/7
+termini
+terminological/19
+terminology/7
+terminus/6
+termite/7
+term/254
+ternary/9
+tern/401
+tern's
+terpsichorean
+Terpsichore/6
+terrace/26
+terracing/6
+terracotta
+terrain/7
+Terra/6
+terramycin
+Terrance/6
+Terran/6
+terrapin/7
+terrarium/7
+terrazzo/7
+Terrell/6
+Terrel/6
+Terre/6
+Terrence/6
+terrestrial/65
+terribleness/7
+terrible/42
+terribly
+Terrie/6
+terrier/6
+terrifically
+terrific/19
+terrify/17
+terrifying/19
+Terrijo/6
+Terrill/6
+Terri/6
+terrine/6
+territoriality/6
+Territorial/7
+territorial/16
+Territory's
+territory/7
+terrorism/7
+terroristic
+terrorist/7
+terrorized/12
+terrorizer/6
+terrorize/23
+terror/7
+terr/9
+terrycloth
+Terrye/6
+Terry/6
+terry/96
+terseness/7
+terse/33
+Tersina/6
+tertian
+Tertiary
+tertiary/9
+Terza/6
+TESL
+Tesla/6
+TESOL
+Tessa/6
+tessellate/15
+tessellation/6
+tesseral
+Tessie/6
+Tessi/6
+Tess/6
+Tessy/6
+testability/6
+testable/12
+testamentary
+testament/7
+testate/230
+testator/7
+testatrices
+testatrix
+testbed/9
+testcard
+tested/794
+tester/795
+testes/6
+testicle/7
+testicular
+testifier/6
+testify/23
+testily
+testimonial/7
+testimony/7
+testiness/9
+testing/9
+testis/6
+testosterone/7
+test/796
+tests/500
+test's/797
+testy/98
+tetanus/7
+tetchy/54
+tether/26
+tethered/12
+Tethys/6
+Tetons
+tetrachloride/6
+tetracycline/7
+tetrafluoride
+tetragonal/19
+tetrahalides
+tetrahedral/19
+tetrahedron/7
+tetrameron
+tetrameter/7
+tetra/7
+tetrasodium
+tetravalent
+Teutonic
+Teuton/7
+Texaco/6
+Texan/9
+Texas/7
+Tex/6
+TeX/6
+textbook/7
+text/276
+textile/7
+Textron/6
+textual/528
+textural/19
+textured/12
+texture/26
+T/224
+Thacher/6
+Thackeray/6
+Thaddeus/6
+Thaddus/6
+Thadeus/6
+Thad/6
+Thailand/6
+Thaine/6
+Thain/6
+Thai/9
+thalami
+thalamus/6
+Thales/6
+Thalia/6
+thalidomide/7
+thallium/7
+thallophyte/6
+Thames
+than
+Thane/6
+thane/7
+Thanh/6
+thanker/6
+thankfuller
+thankfullest
+thankfulness/7
+thankful/28
+thanklessness/7
+thankless/28
+thanksgiving/7
+Thanksgiving/9
+thank/31
+Thant/6
+Thar/6
+Thatcher/6
+thatching/6
+thatch/91
+Thatch/114
+that'd
+that'll
+that/7
+thaumaturge/6
+thaw/17
+Thaxter/6
+Thayer/6
+Thayne/6
+THC
+the
+Theadora/6
+Thea/6
+theatergoer/7
+theatergoing/7
+theater/7
+theatricality/7
+theatrical/16
+theatric/9
+theatrics/6
+Thebault/6
+Thebes
+Theda/6
+Thedrick/6
+Thedric/6
+thee/142
+theeing
+theft/7
+Theiler/6
+their/7
+theism/7
+theistic
+theist/7
+Thekla/6
+Thelma/6
+themas
+thematically
+thematics
+thematic/12
+theme/7
+them/47
+Themistocles/6
+themselves
+thence
+thenceforth
+thenceforward/9
+Theobald/6
+theocracy/7
+theocratic
+Theocritus/6
+theodolite/7
+Theodora/6
+Theodore/6
+Theodoric/6
+Theodor/6
+Theodosia/6
+Theodosian
+Theodosius/6
+theologian/7
+theological/19
+theologists
+theology/7
+Theo/6
+theorem/7
+theoretical/19
+theoretician/7
+theoretic/9
+theoretics/6
+theorist/7
+theorization/7
+theorize/23
+theory/7
+theosophic
+theosophical
+theosophist/7
+Theosophy
+theosophy/7
+therapeutically
+therapeutic/9
+therapeutics/6
+therapist/7
+therapy/7
+Theravada/6
+thereabout/9
+thereafter
+thereat
+thereby
+there'd
+therefor
+therefore
+therefrom
+therein
+there'll
+there/7
+thereof
+thereon
+Theresa/6
+Therese/6
+Theresina/6
+Theresita/6
+Theressa/6
+thereto
+theretofore
+thereunder
+thereunto
+thereupon
+therewith
+Therine/6
+thermal/16
+thermionic/9
+thermionics/6
+thermistor/7
+therm/7
+thermocouple/7
+thermodynamical/19
+thermodynamic/9
+thermodynamics/6
+thermoelastic
+thermoelectric
+thermoformed
+thermoforming
+thermogravimetric
+thermoluminescence/6
+thermometer/7
+thermometric
+thermometry/6
+thermonuclear
+thermopile/6
+thermoplastic/9
+thermopower
+thermo/9
+thermosetting
+thermos/9
+Thermos/7
+thermostable
+thermostatically
+thermostatic/9
+thermostatics/6
+thermostat/7
+thermostatted
+thermostatting
+Theron/6
+thesauri
+thesaurus/7
+these/9
+Theseus/6
+thesis/6
+thespian/9
+Thespian/9
+Thespis/6
+Thessalonian
+Thessalon�ki/6
+Thessaly/6
+theta/7
+thew/7
+they
+they'd
+they'll
+they're
+they've
+th/798
+Thia/6
+thiamine/7
+Thibaud/6
+Thibaut/6
+thickener/6
+thickening/6
+thicken/245
+thicket/56
+thickheaded/6
+thickish
+thickness/7
+thickset/9
+thick/35
+thief/6
+Thiensville/6
+Thieu/6
+thievery/7
+thieve/71
+thievishness/6
+thievish/42
+thighbone/7
+thigh/170
+thighs
+thimble/26
+thimbleful/7
+Thimbu/6
+Thimphu
+thine
+thingamabob/7
+thingamajig/7
+thing/204
+thinkableness/6
+thinkable/12
+thinkably/12
+think/799
+thinker/7
+thinkingly/12
+thinking/32
+thinned
+thinner/7
+thinness/7
+thinnest
+thinning
+thinnish
+thin/38
+thiocyanate/6
+thiouracil/6
+third/183
+thirster/6
+thirst/111
+thirstily
+thirstiness/9
+thirsty/98
+thirteen/216
+thirteenths
+thirtieths
+thirty/216
+this
+this'll
+thistledown/7
+thistle/7
+thither
+Th/6
+tho
+thole/26
+Thomasa/6
+Thomasina/6
+Thomasine/6
+Thomasin/6
+Thoma/7
+Thomism/6
+Thomistic
+Thom/6
+Thompson/6
+Thomson/6
+thong/56
+thoracic
+thorax/7
+Thorazine
+Thoreau/6
+thoriate/81
+Thorin/6
+thorium/7
+Thor/6
+Thornburg/6
+Thorndike/6
+Thornie/6
+thorniness/9
+Thorn/6
+thorn/26
+Thornton/6
+Thorny/6
+thorny/98
+thoroughbred/9
+thoroughfare/7
+thoroughgoing
+thoroughness/7
+thorough/33
+Thorpe/6
+Thorstein/6
+Thorsten/6
+Thorvald/6
+those
+Thoth/6
+thou/17
+though
+thoughtfully
+thoughtfulness/9
+thoughtful/12
+thoughtlessness/7
+thoughtless/28
+thought/7
+thousandfold
+thousand/216
+thousandths
+Thrace/6
+Thracian/6
+thralldom/9
+thrall/26
+thrash/179
+thrasher/6
+thrashing/6
+threadbare/42
+threader/6
+threading/14
+threadlike
+thread/49
+thready/54
+threatener/6
+threaten/541
+threatening/19
+threat/269
+threefold
+three/7
+threepence/6
+threepenny
+threescore/9
+threesome/7
+threnody/7
+thresh/23
+thresher/6
+threshold/26
+threw
+thrice
+thriftily
+thriftiness/9
+thriftless
+thrift/7
+thrifty/98
+thriller/6
+thrilling/19
+thrill/49
+thriver/6
+thrive/187
+thriving/19
+throatily
+throatiness/7
+throat/26
+throaty/98
+throbbed
+throbbing
+throb/9
+throeing
+throe/56
+thrombi
+thromboses
+thrombosis/6
+thrombotic
+thrombus/6
+Throneberry/6
+throne/263
+throne's
+throng/26
+throttle/49
+throttler/6
+throughout
+throughput/7
+throughway's
+through/19
+throwaway/7
+throwback/7
+thrower/6
+thrown
+throwout
+throw/227
+thrummed
+thrumming
+thrum/9
+thrush/7
+thruster/6
+thrust/227
+Thruway/7
+thruway/7
+Thunderbird/6
+Thu
+Thucydides/6
+thudded
+thudding
+thud/7
+thuggee/6
+thuggery/7
+thuggish
+thug/7
+Thule/6
+thulium/7
+thumbnail/7
+thumbscrew/7
+thumb/26
+thumbtack/26
+thump/111
+Thunderbird/6
+thunderbolt/7
+thunderclap/7
+thundercloud/7
+thunderer/6
+thunderhead/7
+thundering/19
+thunderous/19
+thundershower/7
+thunderstorm/7
+thunderstruck
+thundery
+thunder/91
+thunk
+Thurber/6
+Thurman/6
+Thur/7
+Thursday/7
+Thurstan/6
+Thurston/6
+thus/19
+thwack/23
+thwacker/6
+thwarter/6
+thwart/34
+thy
+thyme/7
+thymine/7
+thymus/7
+thyratron/6
+thyristor/7
+thyroglobulin
+thyroidal
+thyroid/9
+thyronine
+thyrotoxic
+thyrotrophic
+thyrotrophin
+thyrotropic
+thyrotropin/6
+thyroxine/6
+thyself
+Tia/6
+Tianjin
+tiara/7
+Tiberius/6
+Tiber/6
+Tibetan/9
+Tibet/6
+tibiae
+tibial
+tibia/6
+Tibold/6
+Tiburon/6
+ticker/6
+ticket/26
+tick/91
+ticking/6
+tickler/6
+tickle/23
+ticklishness/7
+ticklish/28
+ticktacktoe/9
+ticktock/26
+tic/7
+Ticonderoga/6
+tidal/19
+tidbit/7
+tiddlywinks/6
+tide/71
+tideland/7
+tidewater/7
+tideway/7
+tidily/12
+tidiness/41
+tidying/6
+tidy/772
+tie/800
+tieback/7
+Tiebold/6
+Tiebout/6
+tiebreaker/7
+Tieck/6
+Tiena/6
+Tienanmen/6
+Tientsin's
+tier/165
+Tierney/6
+Tiertza/6
+Tiffanie/6
+Tiffani/6
+tiffany/6
+Tiffany/6
+tiff/26
+Tiffie/6
+Tiffi/6
+Tiff/6
+Tiffy/6
+tigerish
+tiger/7
+tightener/6
+tighten/245
+tightfisted
+tightness/7
+tightrope/7
+tight/35
+tightwad/7
+tigress/7
+Tigris/6
+Tijuana/6
+tike's
+Tilda/6
+tilde/7
+Tildie/6
+Tildi/6
+Tildy/6
+tile/91
+tiled/147
+Tiler/6
+tiles/12
+tiling/6
+tillable
+tillage/7
+till/203
+tiller/165
+tiller's/25
+Tillich/6
+Tillie/6
+Tillman/6
+Tilly/6
+tilth/6
+tilt/23
+Ti/6
+timber/26
+timbering/6
+timberland/7
+timberline/9
+timbrel/7
+timbre/7
+Timbuktu/6
+ti/801
+timebase
+time/641
+timekeeper/7
+timekeeping/7
+timelessness/9
+timeless/28
+timeliness/41
+timely/264
+timeout/9
+timepiece/7
+timer/6
+timescale/9
+timeserver/7
+timeserving/9
+timeshare/17
+timespan
+timestamped
+timestamps
+timetable/26
+timeworn
+Timex/6
+timezone/9
+timidity/7
+timidness/7
+timid/33
+Timi/6
+timing/6
+Timmie/6
+Timmi/6
+Tim/7
+Timmy/6
+Timofei/6
+Timon/6
+timorousness/7
+timorous/28
+Timoteo/6
+Timothea/6
+Timothee/6
+Timotheus/6
+Timothy/6
+timothy/7
+timpani
+timpanist/9
+Timur/6
+Tina/6
+tincture/26
+tinderbox/7
+tinder/7
+Tine/6
+tine/7
+tinfoil/7
+tingeing
+tinge/9
+ting/247
+tingle/17
+tingling/19
+tingly/54
+Ting/6
+tinily
+tininess/7
+tinker/49
+Tinkertoy
+tinkle/17
+tinkling/6
+tinkly
+tin/26
+tinned
+tinner/6
+tinnily
+tinniness/7
+tinning/6
+tinnitus/7
+tinny/177
+tinplate/9
+tinsel/116
+Tinseltown/6
+tinsmith/6
+tinsmiths
+tinter/6
+tintinnabulation/7
+Tintoretto/6
+tint/101
+tintype/7
+tinware/7
+tiny/98
+Tioga/6
+Tiphanie/6
+Tiphani/6
+Tiphany/6
+tipi's
+tip/7
+tipoff
+Tippecanoe/6
+tipped
+Tipperary/6
+tipper/7
+tippet/7
+tipping
+tippler/6
+tipple/23
+tippy/164
+tipsily
+tipsiness/7
+tipster/7
+tipsy/98
+tiptoeing
+tiptoe/142
+tiptop/9
+tirade/7
+Tirana's
+Tirane
+tired/61
+tireder
+tiredest
+tiredness/9
+tirelessness/7
+tireless/28
+tire/171
+tires/14
+Tiresias/6
+tiresomeness/9
+tiresome/28
+tiring/13
+Tirolean/9
+Tirol/6
+tiro's
+Tirrell/6
+tis
+Tisha/6
+Tish/6
+tissue/26
+titanate/6
+Titania/6
+titanic
+titanically
+Titanic/6
+titanium/7
+titan/7
+Titan/7
+titbit's
+titer/6
+tither/6
+tithe/49
+tithing/6
+Titian/6
+titian/9
+Titicaca/6
+titillate/24
+titillating/19
+titillation/6
+titivate/15
+titivation/6
+titled/13
+title/111
+titleholder/7
+titling/14
+titmice
+titmouse/6
+tit/96
+Tito/7
+titrate/55
+titration/6
+titted
+titter/17
+titting
+tittle/26
+titular/16
+Titus/6
+tizzy/7
+TKO
+Tlaloc/6
+TLC
+Tlingit/6
+Tl/6
+TM
+Tm/6
+tn
+TN
+tnpk
+TNT
+toad/7
+toadstool/7
+toady/26
+toadyism/6
+toaster/6
+toastmaster/7
+toastmistress/9
+toast/49
+toasty/228
+tobacconist/7
+tobacco/7
+tobaggon/7
+Tobago/6
+Tobe/6
+Tobey/6
+Tobiah/6
+Tobias/6
+Tobie/6
+Tobi/6
+Tobin/6
+Tobit/6
+toboggan/49
+Tobye/6
+Toby/6
+Tocantins/6
+toccata/6
+Tocqueville
+tocsin/7
+to/81
+today'll
+today/7
+Toddie/6
+toddler/6
+toddle/23
+Todd/6
+Toddy/6
+toddy/7
+Tod/6
+toecap/7
+toeclip/9
+TOEFL
+toehold/7
+toeing
+toe/7
+toenail/26
+toffee/7
+tofu/9
+toga/56
+toge
+togetherness/7
+together/42
+togged
+togging
+toggle/26
+Togolese/6
+Togo/6
+tog/131
+Toiboid/6
+toilet/26
+toiletry/7
+toilette/7
+toil/49
+toilsomeness/6
+toilsome/28
+Toinette/6
+Tojo/6
+tokamak
+Tokay/6
+toke/17
+tokenism/7
+tokenized
+token/26
+Tokugawa/6
+Tokyoite/7
+Tokyo/6
+Toland/6
+told/13
+Toledo/7
+tole/26
+tolerability/123
+tolerable/45
+tolerably/45
+tolerance/43
+tolerant/51
+tolerate/24
+toleration/6
+Tolkien
+tollbooth/6
+tollbooths
+toll/17
+Tolley/6
+tollgate/7
+tollhouse/6
+tollway/9
+Tolstoy/6
+toluene/7
+Tolyatti/6
+tomahawk/26
+Tomasina/6
+Tomasine/6
+Toma/7
+Tomaso/6
+tomatoes
+tomato/6
+Tombaugh/6
+tomb/26
+Tombigbee/6
+tomblike
+tombola/6
+tomboyish
+tomboy/7
+tombstone/7
+tomcat/7
+tomcatted
+tomcatting
+Tome/6
+tome/7
+tomfoolery/7
+tomfool/6
+Tomi/6
+Tomkin/6
+Tomlin/6
+Tom/6
+tommed
+Tommie/6
+Tommi/6
+tomming
+tommy/6
+Tommy/6
+tomographic
+tomography/7
+tomorrow/7
+Tompkins/6
+Tomsk/6
+tom/7
+tomtit/7
+tonality/7
+tonal/19
+tonearm/9
+tone/802
+tonelessness/6
+toneless/28
+toner/123
+tone's
+Tonga/6
+Tongan/7
+tong/31
+tongueless
+tongue/26
+tonguing/6
+Tonia/6
+tonic/7
+Tonie/6
+tonight/7
+Toni/6
+Tonio/6
+tonk/7
+tonnage/7
+tonne/7
+Tonnie/6
+tonsillectomy/7
+tonsillitis/7
+tonsil/7
+ton/341
+tonsorial
+tonsure/26
+Tonto/6
+Tonya/6
+Tonye/6
+Tony/6
+tony/54
+toodle
+too/540
+took/14
+tool/36
+toolbar/7
+toolbox/7
+tooler/7
+tooling/6
+toolkit/7
+toolmaker/6
+toolmake/174
+toolmaking/6
+tool's
+toolsmith
+Toomey/6
+tooter/6
+toot/23
+toothache/7
+toothbrush/131
+tooth/165
+toothily
+toothless
+toothmarks
+toothpaste/7
+toothpick/7
+tooths
+toothsome
+toothy/54
+tootle/31
+tootsie
+Tootsie/6
+toots/6
+tootsy/7
+topaz/7
+topcoat/7
+topdressing/9
+Topeka/6
+toper/6
+topflight
+topgallant/6
+topiary/9
+topicality/7
+topical/19
+topic/7
+topknot/7
+topless
+topmast/7
+topmost
+topnotch/164
+topocentric
+topographer/7
+topographic
+topographical/19
+topography/7
+topological/19
+topologist/7
+topology/7
+topped
+topper/7
+topping/7
+topple/17
+topsail/7
+topside/175
+top/111
+topsoil/26
+topspin/7
+Topsy/6
+toque/7
+Torah/6
+Torahs
+torchbearer/7
+torchlight/9
+torch/26
+toreador/7
+Tore/6
+tore/9
+Torey/6
+Torie/6
+tori/6
+Tori/6
+Torin/6
+torment/17
+tormenting/19
+tormentor/7
+torn
+tornadoes
+tornado/6
+toroidal/19
+toroid/7
+Toronto/6
+torpedoes
+torpedo/165
+torpidity/9
+torpid/16
+torpor/7
+Torquemada/6
+torque/49
+Torrance/6
+Torre/7
+torrence
+Torrence/6
+Torrens/6
+torrential
+torrent/7
+Torrey/6
+Torricelli/6
+torridity/7
+torridness/7
+torrid/33
+Torrie/6
+Torrin/6
+Torr/73
+Torry/6
+torsional/19
+torsion/309
+torsions
+torsi's
+tor/489
+torso/7
+tors/9
+tort/803
+tortellini/7
+torte/7
+torten
+tortilla/7
+tortoiseshell/7
+tortoise/7
+Tortola/6
+tortoni/7
+tort's
+Tortuga/6
+tortuousness/7
+tortuous/28
+torture/23
+torturous
+torus/7
+Tory/7
+Tosca/6
+Toscanini/6
+Toshiba/6
+toss/23
+tossup/7
+totaler/6
+totalistic
+totalitarianism/7
+totalitarian/9
+totality/7
+totalizator/9
+totalizing
+total/362
+totemic
+totem/7
+toter/6
+tote/9
+toting/6
+tot/111
+Toto/6
+totted
+totterer/6
+tottering/19
+totter/23
+totting
+toucan/7
+touchable/12
+touch/36
+touchdown/7
+touch�
+touched/12
+toucher/6
+touchily
+touchiness/7
+touching/16
+touchline/6
+touchscreen
+touchstone/7
+touchy/98
+toughen/242
+toughener/6
+toughness/7
+toughs
+tough/730
+Toulouse/6
+toupee/7
+toured/525
+tourer/6
+tour/49
+touring/278
+tourism/7
+touristic
+tourist/7
+touristy
+tourmaline/7
+tournament/7
+tourney/26
+tourniquet/7
+tour's/525
+tours/525
+tousle/17
+touter/6
+tout/31
+Tova/6
+Tove/6
+towardliness/6
+towardly/42
+towards
+toward/10
+towboat/7
+tow/23
+towelette/9
+towel/171
+toweling/6
+tower/165
+towering/19
+towhead/56
+towhee/7
+towline/7
+towner/6
+Townes
+Towney/6
+townhouse/9
+Townie/6
+townie/9
+Townley/6
+Town/6
+Townsend/6
+townsfolk
+township/7
+townsman/6
+townsmen
+townspeople/6
+town/175
+townswoman/6
+townswomen
+Towny/6
+towpath/6
+towpaths
+towrope/7
+Towsley/6
+toxemia/7
+toxicity/7
+toxicological
+toxicologist/7
+toxicology/7
+toxic/9
+toxin/7
+toyer/6
+toymaker
+toy/111
+Toynbee/6
+Toyoda/6
+Toyota/6
+toyshop
+tr
+traceability/6
+traceableness/6
+traceable/42
+trace/36
+traceback/7
+traced/12
+Tracee/6
+traceless/19
+Trace/6
+tracepoint/7
+tracer/7
+tracery/56
+trace's
+Tracey/6
+tracheae
+tracheal/6
+trachea/6
+tracheotomy/7
+Tracie/6
+Traci/6
+tracing/7
+trackage
+trackball/9
+trackbed
+tracked/12
+tracker/6
+trackless
+tracksuit/7
+track/49
+tractability/230
+tractable/45
+tractably/45
+tract/804
+Tractarians
+traction/805
+tractive/806
+tractor/807
+tract's
+tracts/808
+Tracy/6
+trademark/26
+trader/6
+tradesman/6
+tradesmen
+tradespeople
+tradespersons
+trade/49
+tradeswoman/6
+tradeswomen
+traditionalism/7
+traditionalistic
+traditionalist/7
+traditionalized
+traditionally
+traditional/12
+tradition/7
+traduce/23
+Trafalgar/6
+trafficked
+trafficker/7
+trafficking/9
+traffic/7
+tragedian/7
+tragedienne/7
+tragedy/7
+tragically
+tragicomedy/7
+tragicomic
+tragic/9
+trailblazer/7
+trailblazing/9
+trailer/165
+trails/278
+trailside
+trail/179
+trainable
+train/36
+trained/12
+trainee/7
+traineeships
+trainer/7
+training/7
+trainman/6
+trainmen
+trainspotter/9
+traipse/17
+trait/7
+traitorous/19
+traitor/7
+Trajan/6
+trajectory/7
+trammed
+trammeled/12
+trammel/17
+tramming
+tram/7
+trample/23
+trampler/6
+trampoline/26
+tramp/23
+tramway/6
+trance/26
+tranche/7
+Tran/6
+tranquility/9
+tranquilized/12
+tranquilize/179
+tranquilizer/6
+tranquilizes/14
+tranquilizing/86
+tranquillize/23
+tranquillizer/6
+tranquilness/6
+tranquil/33
+transact/17
+transactional
+transaction/7
+transactor/7
+transalpine
+transaminase
+transatlantic
+Transcaucasia/6
+transceiver/7
+transcendence/7
+transcendentalism/7
+transcendentalist/7
+transcendental/16
+transcendent/19
+transcend/17
+transconductance
+transcontinental
+transcribe/23
+transcriber/6
+transcription/7
+transcript/7
+transcultural
+transducer/7
+transduction/6
+transect/17
+transept/7
+transferability/6
+transferal/7
+transfer/809
+transferee/6
+transference/7
+transferor/7
+transferral/7
+transferred
+transferrer/7
+transferring
+transfiguration/7
+transfigure/17
+transfinite/19
+transfix/17
+transformational
+transformation/7
+transform/67
+transformed/12
+transformer/6
+transfuse/376
+transfusion/6
+transgression/7
+transgressor/9
+transgress/64
+trans/45
+transience/7
+transiency/9
+transient/16
+transistorize/17
+transistor/7
+Transite/6
+transitional/19
+transition/26
+transitivenesses
+transitiveness/123
+transitive/68
+transitivity/7
+transitoriness/6
+transitory/42
+transit/163
+transl
+translatability/6
+translatable/12
+translated/13
+translate/577
+translational
+translation/6
+translator/7
+transliterate/15
+translucence/7
+translucency/7
+translucent/19
+transmigrate/15
+transmissible
+transmission/48
+transmissive
+transmit/63
+transmittable
+transmittal/7
+transmittance/7
+transmitted/14
+transmitter/7
+transmitting/14
+transmogrification/6
+transmogrify/15
+transmutation/7
+transmute/88
+transnational/9
+transoceanic
+transom/7
+transonic
+transpacific
+transparency/7
+transparentness/6
+transparent/28
+transpiration/7
+transpire/17
+transplantation/9
+transplant/318
+transpolar
+transponder/7
+transportability
+transportable/12
+transportation/7
+transport/67
+transpose/88
+transposed/12
+transposition/7
+Transputer/6
+transsexualism/7
+transsexual/7
+transship/40
+transshipment/7
+transshipped
+transshipping
+transubstantiation/7
+Transvaal/6
+transversal/86
+transverse/183
+transvestism/7
+transvestite/7
+transvestitism
+Transylvania/6
+trapdoor/9
+trapeze/26
+trapezium/7
+trapezoidal
+trapezoid/7
+trap/7
+trappable/12
+trapped
+trapper/7
+trapping/9
+Trappist/7
+trapshooting/7
+trashcan/7
+trashiness/7
+trash/111
+trashy/98
+Trastevere/6
+trauma/7
+traumatic
+traumatically
+traumatize/17
+travail/26
+traveled/12
+traveler/6
+travelog's
+travelogue/9
+travel/179
+Traver/7
+traversal/7
+traverse/318
+traverser/6
+travertine/6
+travesty/26
+Travis/6
+Travus/6
+trawler/6
+trawl/49
+tray/7
+treacherousness/7
+treacherous/28
+treachery/7
+treacle/26
+treacly
+treader/6
+treadle/26
+treadmill/7
+tread/36
+Treadwell/6
+treas
+treason/465
+treasonous
+treasure/49
+treasurer/6
+treasurership
+treasury/7
+Treasury/7
+treatable
+treated/12
+treater/9
+treatise/7
+treatment/7
+treat's
+treat/395
+treaty/7
+treble/17
+Treblinka/6
+treeing
+treeless
+treelike
+tree/56
+treetop/7
+trefoil/7
+Trefor/6
+trekked
+trekker/7
+Trekkie/6
+trekking
+trek/7
+trellis/26
+Tremaine/6
+Tremain/6
+trematode/7
+Tremayne/6
+tremble/187
+trembler/6
+trembles/6
+trembly
+tremendousness/6
+tremendous/28
+tremolo/7
+tremor/7
+tremulousness/7
+tremulous/28
+trenchancy/7
+trenchant/19
+trencherman/6
+trenchermen
+trencher/7
+trench/36
+trench's
+trendily
+trendiness/9
+trend/26
+trendy/177
+Trenna/6
+Trent/6
+Trenton/6
+trepanned
+trepidation/7
+Tresa/6
+Trescha/6
+trespasser/6
+trespass/23
+Tressa/6
+tressed/25
+tresses/25
+tressing/25
+tress/26
+trestle/7
+Trevar/6
+Trevelyan/6
+Trever/6
+Trevino/6
+Trevor/6
+Trev/114
+Trey/6
+trey/7
+triableness/6
+triable/42
+triadic
+triad/7
+triage/26
+trial/48
+trialization
+trialled
+trialling
+triamcinolone
+triangle/7
+triangulable
+triangularization/9
+triangular/19
+triangulate/215
+triangulation/6
+Triangulum/6
+Trianon/6
+Triassic
+triathlon/9
+triatomic
+tribalism/7
+tribal/19
+tribe/7
+tribesman/6
+tribesmen
+tribeswoman
+tribeswomen
+tribulate/107
+tribulation/6
+tribunal/7
+tribune/7
+tributary/7
+tribute/810
+tribute's
+trice/26
+tricentennial/9
+triceps/7
+triceratops/6
+trichinae
+trichina/6
+trichinoses
+trichinosis/6
+trichloroacetic
+trichloroethane
+trichotomy/6
+trichromatic
+Tricia/6
+trickery/7
+trick/111
+trickily
+trickiness/7
+trickle/17
+trickster/7
+tricky/98
+tricolor/56
+tricycle/26
+trident/7
+tridiagonal
+tried/13
+triennial/16
+trier/63
+trier's
+tries/14
+Trieste/6
+triffid/9
+trifle/91
+trifler/6
+trifluoride/6
+trifocals
+trigged
+trigger/26
+triggest
+trigging
+triglyceride/7
+trigonal/19
+trigonometric
+trigonometrical
+trigonometry/7
+trigram/9
+trig/9
+trihedral
+trike/26
+trilateral/9
+trilby/7
+trilingual
+trillion/216
+trillionth/6
+trillionths
+trillium/7
+trill/111
+trilobite/7
+trilogy/7
+trimaran/7
+Trimble/6
+trimer/6
+trimester/7
+trimmed/12
+trimmer/7
+trimmest
+trimming/7
+trimness/9
+trimodal
+trimonthly
+trim/768
+Trimurti/6
+Trina/6
+Trinidad/6
+trinitarian/9
+trinitrotoluene/7
+trinity/7
+Trinity/7
+trinketer/6
+trinket/111
+triode/7
+trio/7
+trioxide/6
+tripartite/122
+tripartition/6
+tripe/7
+triphenylarsine
+triphenylphosphine
+triphenylstibine
+triphosphopyridine
+triple/17
+triplet/7
+triplex/9
+triplicate/17
+triplication/6
+triply/55
+Trip/6
+tripodal
+tripod/7
+tripoli/6
+Tripoli/6
+tripolyphosphate
+tripos/7
+tripped
+Trippe/6
+tripper/7
+tripping/19
+Tripp/6
+trip/65
+triptych/6
+triptychs
+tripwire/7
+trireme/7
+Tris
+trisect/17
+trisection/9
+trisector
+Trisha/6
+Trish/6
+trisodium
+Trista/6
+Tristam/6
+Tristan/6
+tristate
+trisyllable/6
+tritely/278
+triteness/281
+trite/38
+tritium/7
+triton/6
+Triton/6
+triumphal
+triumphalism
+triumphant/19
+triumph/165
+triumphs
+triumvirate/7
+triumvir/7
+triune
+trivalent
+trivet/7
+trivia
+triviality/7
+trivialization/7
+trivialize/17
+trivial/19
+trivium/6
+Trixie/6
+Trixi/6
+Trix/6
+Trixy/6
+Trobriand/6
+trochaic/9
+trochee/7
+trod/13
+trodden/13
+trodes
+troff/114
+troglodyte/7
+troika/7
+Trojan/7
+troll/26
+trolled/278
+trolleybus/9
+trolley/26
+trolling/278
+trollish
+Trollope/6
+trollop/26
+trolly's
+trombone/7
+trombonist/7
+tromp/17
+Trondheim/6
+trooper/6
+troopship/7
+troop/49
+trope/7
+Tropez/6
+trophic
+trophy/26
+tropical/16
+tropic/7
+tropism/7
+tropocollagen
+troposphere/7
+tropospheric
+troth/165
+troths
+trot/9
+Trotsky/6
+trotted
+trotter/7
+trotting
+troubadour/7
+troubled/12
+trouble/111
+troublemaker/7
+troubler/6
+troubleshooter/6
+troubleshoot/23
+troubleshot
+troublesomeness/6
+troublesome/28
+trough/6
+troughs
+trounce/23
+trouncer/6
+troupe/49
+trouper/6
+trouser/26
+trousseau/6
+trousseaux
+Troutman/6
+trout/7
+trove/7
+troweler/6
+trowel/49
+trow/17
+Troyes
+Troy/6
+troy/9
+Trstram/6
+truancy/7
+truant/26
+truce/26
+Truckee/6
+trucker/6
+trucking/6
+truckle/17
+truckload/7
+truck/91
+truculence/7
+truculent/19
+Truda/6
+Trudeau/6
+Trude/6
+Trudey/6
+trudge/31
+Trudie/6
+Trudi/6
+Trudy/6
+true/226
+truelove/7
+Trueman/6
+trueness/6
+truer/12
+truest/12
+truffle/7
+truism/7
+Trujillo/6
+Trula/6
+truly/12
+Trumaine/6
+Truman/6
+Trumann/6
+Trumbull/6
+trump/26
+trumpery/7
+trumpeter/6
+trumpet/49
+Trump/6
+truncate/15
+truncation/6
+truncheon/26
+trundle/23
+trundler/6
+trunk/26
+trunnion/7
+trusser/6
+trussing/6
+truss/31
+trusted/147
+trusteeing
+trustee/56
+trusteeship/7
+truster/6
+trustful/75
+trustfulness/7
+trustiness/6
+trusting/19
+trust/111
+trusts/25
+trustworthier
+trustworthiest
+trustworthiness/7
+trustworthy/236
+trusty/225
+Truth
+truthfulness/302
+truthful/161
+truths/12
+truth/135
+TRW
+trying/19
+try/179
+tryout/7
+trypsin/6
+tryst/26
+ts
+T's
+tsarevich
+tsarina's
+tsarism/6
+tsarist
+tsetse/9
+Tsimshian/6
+Tsiolkovsky/6
+Tsitsihar/6
+tsp
+tsunami/7
+Tsunematsu/6
+Tswana/6
+TTL
+tty/6
+ttys
+Tuamotu/6
+Tuareg/6
+tubae
+tubal
+tuba/7
+tubbed
+tubbing
+tubby/54
+tubeless
+tubercle/7
+tubercular/9
+tuberculin/7
+tuberculoses
+tuberculosis/6
+tuberculous
+tuber/6
+tuberose/7
+tuberous
+tube/7
+tubing/6
+tub/91
+Tubman/6
+tubular/19
+tubule/7
+tucker/165
+Tucker/6
+tuck/23
+Tuckie/6
+Tuck/114
+Tucky/6
+Tucson/6
+Tucuman/6
+Tudor/7
+Tue/9
+Tuesday/7
+tufter/6
+tuft/49
+tufting/6
+tugboat/7
+tugged
+tugging
+tug/9
+tuition/43
+Tulane/6
+tularemia/9
+tulip/7
+tulle/7
+Tulley/6
+Tull/6
+Tully/6
+Tulsa/6
+tum
+tumbledown
+tumbler/6
+tumbleweed/7
+tumble/179
+tumbrel/7
+tumescence/9
+tumescent
+tumidity/7
+tumid/19
+tummy/7
+tumor/56
+tumorous
+Tums/6
+tumult/26
+tumultuousness/6
+tumultuous/28
+tumulus/6
+tunableness/6
+tunable/42
+tuna/7
+tundra/7
+tun/234
+tune/263
+tunefulness/7
+tuneful/28
+tuneless/19
+tuner/6
+tune's
+tuneup/9
+tung
+tungstate/6
+tungsten/7
+Tunguska/6
+Tungus/6
+tunic/7
+tuning/14
+tuning's
+Tunisia/6
+Tunisian/9
+Tunis/6
+tunned
+tunneler/6
+tunnel/91
+tunning
+tunny/7
+tupelo/6
+Tupi/6
+tuple/7
+tuppence/6
+Tupperware
+Tupungato/6
+turban/56
+turbid
+turbidity/7
+turbinate/142
+turbine/7
+turbocharged
+turbocharger/7
+turbofan/7
+turbojet/7
+turboprop/7
+turbo/7
+turbot/7
+turbulence/7
+turbulent/19
+turd/7
+tureen/7
+turf/26
+turfy/54
+Turgenev/6
+turgidity/7
+turgidness/6
+turgid/28
+Turing/6
+Turin/6
+Turkestan/6
+Turkey/6
+turkey/7
+Turkic/7
+Turkish
+Turkmenistan/6
+turk/9
+Turk/7
+turmeric/7
+turmoil/26
+turnabout/7
+turnaround/7
+turn/639
+turnbuckle/7
+turncoat/7
+turned/12
+turner/6
+Turner/6
+turning/7
+turnip/26
+turnkey/7
+turnoff/7
+turnout/7
+turnover/7
+turnpike/7
+turnround/7
+turnstile/7
+turnstone/6
+turntable/7
+turpentine/26
+Turpin/6
+turpitude/7
+turquoise/7
+turret/56
+turtleback/7
+turtledove/7
+turtleneck/56
+turtle/26
+turves's
+turvy
+Tuscaloosa/6
+Tuscan
+Tuscany/6
+Tuscarora/6
+Tuscon/6
+tush/17
+Tuskegee/6
+tusker/6
+tusk/49
+tussle/17
+tussock/7
+tussocky
+Tussuad/6
+Tutankhamen/6
+tutelage/7
+tutelary/9
+Tut/6
+tutored/12
+tutorial/7
+tutor/26
+tutorship/9
+tut/9
+Tutsi
+tutted
+tutting
+tutti/9
+Tuttle/6
+tutu/7
+Tuvalu
+tuxedo/56
+tux/9
+TVA
+TV/6
+TVs
+twaddle/49
+twaddler/6
+Twain/6
+twain/9
+TWA/6
+twang/26
+twangy/54
+twas
+tweak/31
+tweediness/6
+Tweedledee/6
+Tweedledum/6
+Tweed/6
+twee/811
+tweed/7
+tweedy/98
+tween
+tweeter/6
+tweet/23
+tweezer/6
+tweeze/242
+twelfth
+twelfths
+twelvemonth/6
+twelvemonths
+twelve/7
+twentieths
+twenty/216
+twerp/7
+twice/164
+twiddle/31
+twiddler/6
+twiddly/54
+twigged
+twigging
+twiggy/54
+twig/7
+Twila/6
+twilight/7
+twilit
+twill/17
+twiner/6
+twine/7
+twinge/26
+Twinkie
+twinkler/6
+twinkle/31
+twinkling/6
+twinkly
+twinned
+twinning
+twin/49
+twirler/6
+twirling/19
+twirl/23
+twirly/54
+twisted/12
+twister/6
+twists/12
+twist/23
+twisty
+twitch/31
+twitchy/54
+twit/9
+twitted
+twitterer/6
+twitter/31
+twittery
+twitting
+twixt
+twofer/7
+twofold/9
+two/7
+twopence/7
+twopenny/9
+twosome/7
+twp
+Twp
+TWX
+Twyla/6
+TX
+t/812
+Tybalt/6
+Tybie/6
+Tybi/6
+tycoon/7
+tyeing
+Tye/6
+tying/13
+tyke/7
+Tylenol/6
+Tyler/6
+Ty/6
+Tymon/6
+Tymothy/6
+tympani
+tympanist/7
+tympanum/7
+Tynan/6
+Tyndale/6
+Tyndall/6
+Tyne/6
+typeahead
+typecast/166
+typed/13
+typedef/9
+typeface/7
+typeless
+type/211
+types/14
+typescript/7
+typeset/9
+typesetter/7
+typesetting/7
+typewriter/6
+typewrite/210
+typewriting/6
+typewritten
+typewrote
+typhoid/7
+Typhon/6
+typhoon/7
+typhus/7
+typicality/7
+typically
+typicalness/6
+typical/12
+typification/6
+typify/15
+typing/14
+typist/7
+typographer/7
+typographic
+typographical/19
+typography/7
+typological/19
+typology/7
+typo/7
+tyrannic
+tyrannicalness/6
+tyrannical/28
+tyrannicide/6
+tyrannizer/6
+tyrannize/179
+tyrannizing/86
+tyrannosaur/7
+tyrannosaurus/9
+tyrannous
+tyranny/7
+tyrant/7
+Tyree/6
+tyreo
+Tyrolean/9
+Tyrol's
+Tyrone/6
+tyrosine/6
+tyro/7
+Tyrus/6
+Tyson/6
+tzarina's
+tzar's
+Tzeltal/6
+u
+U
+UAR
+UART
+UAW
+Ubangi/6
+ubiquitous/28
+ubiquity/9
+Ubuntu/6
+Ucayali/6
+Uccello/6
+UCLA/6
+Udale/6
+Udall/6
+udder/7
+Udell/6
+Ufa/6
+ufologist/9
+ufology/7
+UFO/9
+Uganda/6
+Ugandan/9
+ugh
+ughs
+uglification
+ugliness/7
+uglis
+ugly/226
+Ugo/6
+uh
+UHF
+Uighur
+Ujungpandang/6
+UK
+ukase/7
+Ukraine/6
+Ukrainian/9
+ukulele/7
+UL
+Ula/6
+Ulberto/6
+ulcerate/24
+ulceration/6
+ulcer/26
+ulcerous
+Ulick/6
+Ulises/6
+Ulla/6
+Ullman/6
+ulnae
+ulna/6
+ulnar
+Ulrica/6
+Ulrich/6
+Ulrick/6
+Ulric/6
+Ulrika/6
+Ulrikaumeko/6
+Ulrike/6
+Ulster/6
+ulster/7
+ult
+ulterior/19
+ultimas
+ultimate/22
+ultimateness/6
+ultimatum/7
+ultimo
+ultracentrifugally
+ultracentrifugation
+ultracentrifuge/6
+ultraconservative/9
+ultrafast
+ultrahigh
+ultralight/9
+ultramarine/7
+ultramodern
+ultramontane
+ultra/9
+ultrashort
+ultrasonically
+ultrasonic/9
+ultrasonics/6
+ultrasound/7
+ultrastructure/6
+Ultrasuede
+ultraviolet/7
+Ultrix/6
+ULTRIX/6
+ululate/15
+ululation/6
+Ulyanovsk/6
+Ulysses/6
+um
+umbel/7
+umber/26
+Umberto/6
+umbilical/9
+umbilici
+umbilicus/6
+umbrage/26
+umbrageous
+umbra/7
+umbrella/26
+Umbriel/6
+Umeko/6
+umiak/7
+umlaut/26
+umpire/26
+ump/26
+umpteen/540
+UN
+unabated/19
+unabridged/9
+unacceptability
+unacceptable
+unaccepted
+unaccommodating
+unaccountability
+unaccustomed/19
+unadapted
+unadulterated/19
+unadventurous
+unalienability
+unalterableness/6
+unalterable/42
+unalterably
+Una/6
+unambiguity
+unambiguous
+unambitious
+unamused
+unanimity/7
+unanimous/19
+unanticipated/19
+unapologetic
+unapologizing/6
+unappeasable
+unappeasably
+unappreciative
+unary
+unassailableness/6
+unassailable/42
+unassertive
+unassumingness/6
+unassuming/28
+unauthorized/28
+unavailing/28
+unaware/46
+unbalanced/42
+unbar
+unbarring
+unbecoming/42
+unbeknown
+unbelieving/19
+unbiased/42
+unbid
+unbind/224
+unblessed
+unblinking/19
+unbodied
+unbolt/224
+unbreakability
+unbred
+unbroken
+unbuckle
+unbudging/19
+unburnt
+uncap
+uncapping
+uncatalogued
+uncauterized/7
+unceasing/19
+uncelebrated
+uncertain/42
+unchallengeable
+unchangingness/6
+unchanging/28
+uncharacteristic
+uncharismatic
+unchastity
+unchristian
+uncial/9
+uncivilized/19
+unclassified
+uncle/56
+unclouded/19
+uncodable
+uncollected
+uncoloredness/6
+uncolored/28
+uncombable
+uncommunicative
+uncompetitive
+uncomplicated
+uncomprehending/19
+uncompromisable
+unconcerned/42
+unconcern/6
+unconfirmed
+unconfused
+unconscionableness/6
+unconscionable/42
+unconscionably
+unconstitutional
+unconsumed
+uncontentious
+uncontrollability
+unconvertible
+uncool
+uncooperative
+uncork/224
+uncouple/224
+uncouthness/6
+uncouth/28
+uncreate/130
+uncritical
+uncross/625
+uncrowded
+unction/123
+unctions
+unctuousness/7
+unctuous/28
+uncustomary
+uncut
+undated/45
+undaunted/19
+undeceive
+undecided/9
+undedicated
+undefinability
+undefinedness/6
+undefined/42
+undelete
+undeliverability
+undeniableness/6
+undeniable/42
+undeniably
+undependable
+underachiever/6
+underachieve/23
+underact/17
+underadjusting
+underage/9
+underarm/17
+underbedding
+underbelly/7
+underbidding
+underbid/9
+underbracing
+underbrush/26
+undercarriage/7
+undercharge/17
+underclassman
+underclassmen
+underclass/9
+underclothes
+underclothing/7
+undercoating/6
+undercoat/171
+underconsumption/6
+undercooked
+undercount/9
+undercover
+undercurrent/7
+undercut/9
+undercutting
+underdeveloped
+underdevelopment/7
+underdog/7
+underdone
+undereducated
+underemphasis
+underemployed
+underemployment/7
+underenumerated
+underenumeration
+underestimate/15
+underexploited
+underexpose/17
+underexposure/7
+underfed
+underfeed/166
+underfloor
+underflow/26
+underfoot
+underfund/47
+underfur/7
+undergarment/7
+undergirding
+undergoes
+undergo/224
+undergone
+undergrad/7
+undergraduate/7
+underground/175
+undergrowth/6
+undergrowths
+underhand/81
+underhandedness/7
+underhanded/28
+underheat
+underinvestment
+underlaid
+underlain/9
+underlay/166
+underlie
+underline/71
+underling/7
+underlip/7
+underloaded
+underly/166
+undermanned
+undermentioned
+undermine/17
+undermost
+underneath
+underneaths
+undernourished
+undernourishment/7
+underpaid
+underpants
+underpart/7
+underpass/7
+underpay/661
+underpayment/7
+underperformed
+underpinned
+underpinning/7
+underpin/9
+underplay/17
+underpopulated
+underpopulation/6
+underpowered
+underpricing
+underprivileged
+underproduction/7
+underrate/17
+underregistration/6
+underreported
+underreporting
+underrepresentation/6
+underrepresented
+underscore/17
+undersealed
+undersea/9
+undersecretary/7
+undersell/166
+undersexed
+undershirt/7
+undershoot/166
+undershorts
+undershot
+underside/7
+undersigned/6
+undersign/17
+undersized
+undersizes
+undersizing
+underskirt/7
+undersold
+underspecification
+underspecified
+underspend/224
+understaffed
+understandability/6
+understandably
+understanding/86
+understand/591
+understate/11
+understatement/7
+understocked
+understood
+understrength
+understructure/7
+understudy/26
+undertaken
+undertaker/6
+undertake/210
+undertaking/6
+underthings
+undertone/7
+undertook
+undertow/7
+underused
+underusing
+underutilization/6
+underutilized
+undervaluation/9
+undervalue/17
+underwater/9
+underway
+underwear/6
+underweight/9
+underwent
+underwhelm/17
+underwood/6
+Underwood/6
+underworld/7
+underwrite/227
+underwriter/6
+underwritten
+underwrote
+under/19
+undeserving
+undesigned
+undeviating/19
+undialyzed/7
+undiplomatic
+undiscerning
+undiscriminating
+undo/301
+undoubted/19
+undramatic
+undramatized/7
+undress/224
+undrinkability
+undrinkable
+undroppable
+undue
+undulant
+undulate/15
+undulation/6
+unearthliness/9
+unearthly/42
+unearth/813
+unease
+uneconomic
+uneducated
+unemployed/9
+unencroachable
+unending/19
+unendurable/42
+unenergized/7
+unenforced
+unenterprising
+UNESCO
+unethical
+uneulogized/7
+unexacting
+unexceptionably
+unexcited
+unexpectedness/7
+unfading/19
+unfailingness/6
+unfailing/42
+unfamiliar
+unfashionable
+unfathomably
+unfavored
+unfeeling
+unfeigned/19
+unfelt
+unfeminine
+unfertile
+unfetchable
+unflagging
+unflappability/9
+unflappable
+unflappably
+unflinching/19
+unfold/403
+unfoldment/6
+unforced
+unforgeable
+unfossilized/7
+unfraternizing/7
+unfrozen
+unfulfillable
+unfunny
+unfussy
+ungainliness/7
+ungainly/98
+Ungava/6
+ungenerous
+ungentle
+unglamorous
+ungrammaticality
+ungrudging
+unguent/7
+ungulate/7
+unharmonious
+unharness/224
+unhistorical
+unholy/567
+unhook/47
+unhydrolyzed/7
+unhygienic
+Unibus/6
+unicameral
+UNICEF
+unicellular
+Unicode/6
+unicorn/7
+unicycle/26
+unicyclist/7
+unideal
+unidimensional
+unidiomatic
+unidirectionality
+unidirectional/19
+unidolized/7
+unifiable
+unification/118
+unifier/7
+unifilar
+uniformity/7
+uniformness/6
+uniform/502
+unify/132
+unilateralism/6
+unilateralist
+unilateral/19
+unimodal
+unimpeachably
+unimportance
+unimportant
+unimpressive
+unindustrialized/7
+uninhibited/28
+uninominal
+uninsured
+uninstall/814
+uninstaller/7
+unintellectual
+unintended
+uninteresting
+uninterruptedness/6
+uninterrupted/28
+unintuitive
+uninviting
+union/128
+unionism/7
+unionist/7
+Unionist/7
+unionize
+Union/7
+UniPlus/6
+unipolar
+uniprocessor/7
+uniqueness/9
+unique/38
+Uniroyal/6
+unisex/9
+UniSoft/6
+unison/7
+Unisys/6
+unitarianism/6
+Unitarianism/7
+unitarian/7
+Unitarian/7
+unitary
+unite/127
+united/19
+uniter/6
+unitize/17
+unit/336
+unity/85
+univ
+Univac/6
+univalent/9
+univalve/7
+univariate
+universalism/6
+universalistic
+universality/7
+universalize/23
+universalizer/6
+universal/46
+universe/7
+university/7
+Unix/6
+UNIX/6
+unjam
+unkempt
+unkind/567
+unkink
+unknightly
+unknowable/9
+unknowing
+unlabored
+unlace/224
+unlearn/224
+unlikeable
+unlikeliness/9
+unlimber/224
+unlimited
+unlit
+unliterary
+unloose/224
+unlucky/567
+unmagnetized/7
+unmanageably
+unmannered/19
+unmask/224
+unmeaning
+unmeasured
+unmeetable
+unmelodious
+unmemorable
+unmemorialized/7
+unmentionable/9
+unmerciful
+unmeritorious
+unmethodical
+unmineralized/7
+unmissable
+unmistakably
+unmitigated/28
+unmnemonic
+unmobilized/7
+unmoral
+unmount/277
+unmovable
+unmoving
+unnaturalness/6
+unnavigable
+unnerving/19
+unobliging
+unoffensive
+unofficial
+unorganized/28
+unorthodox
+unpack/224
+unpaintable
+unpalatability
+unpalatable
+unpartizan
+unpatronizing
+unpeople
+unperceptive
+unperson
+unperturbed/19
+unphysical
+unpick/224
+unpicturesque
+unpinning
+unpleasing
+unploughed
+unpolarized/7
+unpopular
+unpractical
+unprecedented/19
+unpredictable/9
+unpreemphasized
+unpremeditated
+unpretentiousness/6
+unprincipled/42
+unproblematic
+unproductive
+unpropitious
+unprovable
+unproven
+unprovocative
+unpunctual
+unquestionable
+unraisable
+unravellings
+unreadability
+unread/277
+unreal
+unrealizable
+unreasoning/19
+unreceptive
+unrecordable
+unreflective
+unrelenting/19
+unremitting/19
+unrepeatability
+unrepeated
+unrepentant
+unreported
+unrepresentative
+unreproducible
+unrest/224
+unrestrained/42
+unrewarding
+unriddle
+unripe/42
+unromantic
+unruliness/7
+unruly/98
+unsaleable
+unsanitary
+unsavored/28
+unsavoriness/6
+unseal/625
+unsearchable
+unseasonal
+unseeing/19
+unseen/9
+unselfconsciousness/6
+unselfconscious/42
+unselfishness/6
+unsellable
+unsentimental
+unset
+unsettledness/6
+unsettled/42
+unsettling/19
+unshapely
+unshaven
+unshorn
+unsighted
+unsightliness/9
+unskilful
+unsociability
+unsociable/42
+unsocial
+unsound/567
+unspeakably
+unspecific
+unspectacular
+unspoilt
+unspoke
+unsporting
+unstable/42
+unstigmatized/7
+unstilted
+unstinting/19
+unstopping
+unstrapping
+unstudied
+unstuffy
+unsubdued
+unsubstantial
+unsubtle
+unsubscribe/81
+unsuitable
+unsuspecting/19
+unswerving/19
+unsymmetrical
+unsympathetic
+unsystematic
+unsystematized/19
+untactful
+untalented
+untaxing
+unteach/277
+untellable
+untenable
+unthinking
+until/224
+untiring/19
+unto
+untouchable/7
+untowardness/6
+untoward/42
+untraceable
+untrue
+untruthfulness/6
+untwist/224
+Unukalhai/6
+unusualness/6
+unutterable
+unutterably
+unvocalized/7
+unvulcanized/7
+unwaivering
+unwarrantable
+unwarrantably
+unwashed/144
+unwearable
+unwearied/19
+unwed
+unwedge
+unwelcome
+unwell/6
+unwieldiness/7
+unwieldy/98
+unwind/277
+unwomanly
+unworkable/9
+unworried
+unwrap
+unwrapping
+unyielding/19
+unyoke
+unzip
+up
+Upanishads
+uparrow
+upbeat/7
+upbraid/31
+upbringing/6
+upbring/301
+UPC
+upchuck/17
+upcome/224
+upcountry/9
+updatability
+updater/6
+update/31
+Updike/6
+updraft/7
+upend/17
+upfield
+upfront
+upgradeable
+upgrade/71
+upheaval/7
+upheld
+uphill/9
+upholder/6
+uphold/227
+upholster/36
+upholsterer/7
+upholstery/7
+UPI
+upkeep/7
+uplander/6
+upland/175
+uplifter/6
+uplift/187
+upload/17
+upmarket
+upon
+upped
+uppercase/17
+upperclassman/6
+upperclassmen
+uppercut/9
+uppercutting
+uppermost
+upper/9
+upping
+uppish
+uppity
+upraise/17
+uprated
+uprating
+uprear/17
+upright/22
+uprightness/9
+uprise/815
+uprising/6
+upriver/9
+uproariousness/6
+uproarious/28
+uproar/7
+uproot/31
+uprooter/6
+ups
+UPS
+upscale/17
+upset/9
+upsetting/7
+upshot/7
+upside/7
+upsilon/7
+upslope
+upstage/31
+upstairs
+upstandingness/6
+upstanding/42
+upstart/26
+upstate/208
+upstream/17
+upstroke/7
+upsurge/17
+upswing/131
+upswung
+uptake/7
+upthrust/131
+uptight
+uptime
+Upton/6
+uptown/208
+uptrend/6
+upturn/17
+upwardness/6
+upward/46
+upwelling
+upwind/9
+uracil/7
+Ural/7
+Urania/6
+uranium/7
+Uranus/6
+uranyl/6
+Urbain/6
+Urbana/6
+urbane/19
+urbanism/6
+urbanite/7
+urbanity/7
+urbanization/7
+urbanize/17
+Urban/6
+urbanologist/9
+urbanology/9
+Urbano/6
+urban/54
+Urbanus/6
+urchin/7
+Urdu/6
+urea/7
+uremia/7
+uremic
+ureter/7
+urethane/7
+urethrae
+urethral
+urethra/6
+urethritis/6
+Urey/6
+urge/187
+urgency/7
+urgent/19
+urger/6
+Uriah/6
+uric
+Uriel/6
+urinal/7
+urinalyses
+urinalysis/6
+urinary/7
+urinate/15
+urination/6
+urine/7
+Uri/7
+URL
+Ur/6
+urning/6
+urn/26
+urogenital
+urological
+urologist/9
+urology/7
+Urquhart/6
+Ursala/6
+Ursa/6
+ursine
+Ursola/6
+Urson/6
+Ursula/6
+Ursulina/6
+Ursuline/6
+urticaria/7
+Uruguayan/9
+Uruguay/6
+Urumqi
+US
+USA
+usability/9
+usable/12
+usably/12
+USAF
+usage/7
+USART
+USCG
+USC/6
+USDA
+us/67
+used/12
+use/127
+usefulness/7
+useful/28
+uselessness/7
+useless/28
+Usenet/6
+Usenix/6
+user/6
+USG/6
+usherette/7
+usher/26
+USIA
+USMC
+USN
+USO
+USP
+USPS
+USS
+USSR
+Ustinov/6
+usu
+usuals
+usual/161
+usurer/7
+usuriousness/6
+usurious/28
+usurpation/7
+usurper/6
+usurp/23
+usury/7
+UT
+Utahan/7
+Utah/6
+Uta/6
+Ute/6
+utensil/7
+uteri
+uterine
+uterus/6
+Utica/6
+utile/45
+utilitarianism/7
+utilitarian/9
+utility/7
+utilization/7
+utilization's/14
+utilize/23
+utilizer/6
+utilizes/14
+utmost/9
+Utopia/7
+utopianism/6
+utopian's
+Utopian/9
+utopia/9
+Utrecht/6
+Utrillo/6
+utterance/7
+uttered/12
+utterer/6
+uttermost/9
+utter/816
+uucp/6
+UV
+uvula/7
+uvular/9
+uxorious
+Uzbekistan
+Uzbek/6
+Uzi/6
+V
+VA
+vacancy/7
+vacantness/6
+vacant/28
+vacate/15
+vacationist/7
+vacationland
+vacation/259
+vaccinate/15
+vaccination/6
+vaccine/7
+vaccinial
+vaccinia/6
+Vachel/6
+vacillate/15
+vacillating/19
+vacillation/6
+vacillator/7
+Vaclav/6
+vacua's
+vacuity/7
+vacuo
+vacuolated/12
+vacuolate/55
+vacuole/7
+vacuolization/7
+vacuousness/7
+vacuous/28
+vacuum/26
+Vader/6
+Vaduz/6
+vagabondage/7
+vagabond/26
+vagarious
+vagary/7
+vaginae
+vaginal/19
+vagina/6
+vagrancy/7
+vagrant/65
+vagueing
+vagueness/7
+vague/472
+Vail/6
+vaingloriousness/6
+vainglorious/28
+vainglory/7
+vain/33
+val
+valance/26
+Valaree/6
+Valaria/6
+Valarie/6
+Valdemar/6
+Valdez/6
+Valeda/6
+valediction/7
+valedictorian/7
+valedictory/7
+Vale/6
+valence/7
+Valencia/7
+valency/7
+Valene/6
+Valenka/6
+Valentia/6
+Valentijn/6
+Valentina/6
+Valentine/6
+valentine/7
+Valentin/6
+Valentino/6
+Valenzuela/6
+Valera/6
+Valeria/6
+Valerian/6
+Valerie/6
+Valerye/6
+Val�ry/6
+vale/7
+valet/26
+valetudinarianism/7
+valetudinarian/7
+Valhalla/6
+valiance/9
+valiantness/6
+valiant/46
+Valida/6
+validated/13
+validate/817
+validates/14
+validation/309
+validity/43
+validnesses
+validness/123
+valid/68
+Valina/6
+valise/7
+Valium/9
+Valkyrie/7
+Vallejo
+Valle/6
+Valletta/6
+valley/7
+Vallie/6
+Valli/6
+Vally/6
+Valma/6
+Val/86
+Valois/6
+valor/7
+valorous/19
+Valparaiso/6
+Valry/6
+valuable/261
+valuableness/123
+valuables
+valuably/45
+valuate/15
+valuation/279
+valuator/7
+value/311
+valued/12
+valuelessness/6
+valueless/42
+valuer/7
+value's
+values/25
+valve/26
+valveless
+valvular
+Va/6
+vamoose/17
+vamp/36
+vamper
+vampire/26
+vamp's
+vanadium/7
+Vance/6
+Vancouver/6
+vandalism/7
+vandalize/17
+vandal/7
+Vandal/7
+Vanda/6
+Vandenberg/6
+Vanderbilt/6
+Vanderburgh/6
+Vanderpoel/6
+Vandyke/7
+vane/7
+Vanessa/6
+Vang/6
+vanguard/7
+Vania/6
+vanilla/7
+vanisher/6
+vanish/187
+vanishing/19
+vanity/7
+Van/6
+Vanna/6
+vanned
+Vannie/6
+Vanni/6
+vanning
+Vanny/6
+vanquisher/6
+vanquish/23
+van/56
+vantage/7
+Vanuatu
+Vanya/6
+Vanzetti/6
+vapidity/7
+vapidness/7
+vapid/28
+vaporer/6
+vaporing/86
+vaporisation
+vaporise/17
+vaporization/48
+vaporize/23
+vaporizer/6
+vapor/91
+vaporous
+vapory
+vaquero/7
+VAR
+Varanasi/6
+Varese/6
+Vargas/6
+variability/43
+variableness/123
+variable/444
+variables/45
+variably/45
+variance/45
+variances
+variance's
+Varian/6
+variant/402
+variate/269
+variational
+variation/6
+varicolored/7
+varicose/9
+variedly
+varied/12
+variegate/15
+variegation/6
+varier/6
+varietal/9
+variety/7
+various/28
+varistor/6
+Varityping/6
+varlet/7
+varmint/7
+varnished/12
+varnisher/6
+varnish/49
+var/9
+varsity/7
+varying/10
+vary/187
+vascular
+vasectomy/7
+Vaseline/26
+vase/7
+Vasili/7
+Vasily/6
+vasomotor
+Vasquez/6
+vassalage/7
+vassal/26
+Vassar/6
+Vassili/6
+Vassily/6
+vastness/7
+vast/38
+v/510
+VAT
+Vatican/6
+vat/7
+vatted
+vatting
+vaudeville/7
+vaudevillian/7
+Vaudois
+Vaughan/6
+Vaughn/6
+vaulter/6
+vaulting/6
+vault/91
+vaunter/6
+vaunt/31
+VAXes
+Vax/6
+VAX/6
+Vazquez/6
+vb
+VCR
+VD
+VDT
+VDU
+vealed/14
+vealer/118
+veal/111
+veals/14
+Veblen/6
+vectorial
+vectorization
+vectorized
+vectorizing
+vector's/278
+vector/26
+Veda/7
+Vedanta/6
+veejay/9
+veep/9
+veer/17
+veering/19
+vegan/7
+Vega/7
+Vegemite/6
+veges
+vegetable/7
+vegetarianism/7
+vegetarian/7
+vegetate/24
+vegetation/6
+vegetative/28
+vegged
+veggie/9
+vegging
+veg/6
+vehemence/7
+vehemency/9
+vehement/19
+vehicle/7
+vehicular
+veiling/135
+veil's
+veil/180
+vein/111
+veining/6
+vela/6
+Vela/6
+velarize/17
+velar/9
+Vel�squez/6
+Vel�zquez
+Velcro/7
+veld/7
+veldt's
+Velez/6
+Vella/6
+vellum/7
+Velma/6
+velocipede/7
+velocity/7
+velor/9
+velour's
+velum/6
+Velveeta/6
+velveteen/7
+velvet/26
+Velvet/6
+velvety/54
+venality/7
+venal/19
+venation/7
+vend/17
+vender's/370
+vendetta/7
+vendible/9
+vendor/7
+veneerer/6
+veneer/111
+veneering/6
+venerability/9
+venerable/42
+venerate/15
+veneration/6
+venereal
+venetian
+Venetian/7
+Venezuela/6
+Venezuelan/9
+vengeance/7
+vengeful/61
+vengefulness/118
+venialness/6
+venial/28
+Venice/6
+venireman/6
+veniremen
+venison/7
+Venita/6
+Venn/6
+venomousness/6
+venomous/28
+venom/26
+venous/19
+venter/6
+ventilated/12
+ventilate/24
+ventilation/6
+ventilator/7
+vent/498
+ventral/16
+ventricle/7
+ventricular
+ventriloquies
+ventriloquism/7
+ventriloquist/7
+ventriloquy
+vent's/278
+Ventura/6
+venture/179
+venturesomeness/7
+venturesome/28
+venturi/9
+venturousness/7
+venturous/28
+venue/48
+Venusian/9
+Venus/9
+veraciousness/6
+veracious/28
+veracities
+veracity/123
+Veracruz/6
+Veradis
+Vera/6
+verandahed
+veranda/56
+verbalization/7
+verbalized/12
+verbalizer/6
+verbalize/23
+verballed
+verballing
+verbal/16
+verbatim
+verbena/7
+verbiage/7
+verb/341
+verbose/28
+verbosity/7
+verboten
+verdant/19
+Verde/6
+Verderer/6
+verdict/7
+verdigris/26
+Verdi/6
+verdure/56
+Vere/6
+Verena/6
+Verene/6
+verge/818
+Verge/6
+verger/7
+verge's
+Vergil's
+veridical/19
+Veriee/6
+verifiability/6
+verifiableness/6
+verifiable/12
+verification/9
+verified/12
+verifier/7
+verify/36
+Verile/6
+verily
+Verina/6
+Verine/6
+verisimilitude/7
+veritableness/6
+veritable/42
+veritably
+verity/7
+Verlag/6
+Verlaine/6
+Verla/6
+Vermeer/6
+vermicelli/7
+vermiculite/7
+vermiform
+vermilion/7
+vermin/6
+verminous
+Vermonter/6
+Vermont/231
+vermouth/6
+vermouths
+vernacular/16
+vernal/19
+Verna/6
+Verne/6
+Vernen/6
+Verney/6
+Vernice/6
+vernier/7
+Vern/72
+Vernon/6
+Vernor/6
+Verona/6
+Veronese/6
+Veronica/6
+veronica/7
+Veronika/6
+Veronike/6
+Veronique/6
+verrucae
+verruca/7
+versa
+Versailles/6
+Versatec/6
+versatileness/6
+versatile/28
+versatility/7
+versed/44
+verse's
+verses/45
+verse/819
+versicle/6
+versification/6
+versifier/6
+versify/115
+versing/45
+version/820
+verso/7
+versus
+vertebrae
+vertebral/19
+vertebra/6
+vertebrate/43
+vertebration/6
+vertex/7
+vertical/46
+vertices's
+vertiginous
+vertigoes
+vertigo/6
+verve/7
+very/54
+Vesalius/6
+vesicle/7
+vesicular/19
+vesiculate/17
+Vespasian/6
+vesper/7
+Vespucci/6
+vessel/7
+vestal/16
+Vesta/6
+vest/821
+vestibular
+vestibule/56
+vestige/7
+vestigial/19
+vesting/7
+vestment/43
+vestryman/6
+vestrymen
+vestry/7
+vest's
+vesture/26
+Vesuvius/6
+vetch/7
+veteran/7
+veterinarian/7
+veterinary/9
+veter/6
+veto/165
+vetoes
+vet/175
+vetted
+vetting/14
+Vevay/6
+vexation/7
+vexatiousness/6
+vexatious/28
+vexed/19
+vex/818
+VF
+VFW
+VG
+VGA
+vhf
+VHF
+VHS
+VI
+via
+viability/7
+viable/45
+viably
+viaduct/7
+Viagra/6
+vial/26
+viand/7
+vibe/9
+vibraharp/7
+vibrancy/7
+vibrant/16
+vibraphone/7
+vibraphonist/7
+vibrate/15
+vibrational/19
+vibration/6
+vibrato/7
+vibrator/7
+vibratory
+vibrio/6
+vibrionic
+viburnum/7
+vicarage/7
+vicariousness/7
+vicarious/28
+vicar/7
+vice/186
+viced
+vicegerent/7
+vicennial
+Vicente/6
+viceregal
+viceroy/7
+Vichy/6
+vichyssoise/7
+vicing
+vicinity/7
+viciousness/9
+vicious/28
+vicissitude/7
+Vickers/6
+Vickie/6
+Vicki/6
+Vicksburg/6
+Vicky/6
+Vick/680
+Vic/6
+victimization/7
+victimized/12
+victimizer/6
+victimize/23
+victim/7
+Victoir/6
+Victoria/6
+Victorianism/9
+Victorian/9
+victoriousness/6
+victorious/28
+Victor/6
+victor/7
+victory/7
+Victrola/7
+victualer/6
+victual/23
+vicu�a/9
+Vidal/6
+Vida/6
+videlicet
+videocassette/9
+videoconferencing
+videodisc/9
+videodisk/7
+video/26
+videophone/7
+videotape/26
+Vidovic/6
+Vidovik/6
+Vienna/6
+Viennese/6
+Vientiane/6
+vier/6
+vie/9
+Vietcong/6
+Viet/6
+Vietminh/6
+Vietnamese/6
+Vietnam/6
+viewed/14
+viewer/63
+viewer's
+viewfinder/7
+viewgraph/7
+viewing/6
+viewless/19
+view/182
+viewpoint/7
+views/14
+vigesimal
+vigilance/7
+vigilante/7
+vigilantism/7
+vigilantist
+vigilant/19
+vigil/7
+vignette/111
+vignetter/6
+vignetting/6
+vignettist/7
+vigor/7
+vigorousness/6
+vigorous/28
+vii
+viii
+Vijayawada/6
+Viki/6
+Viking/7
+viking/9
+Vikki/6
+Vikky/6
+Vikram/6
+Vila
+vile/822
+vilely
+vileness/7
+vilest
+Vilhelmina/6
+vilification/6
+vilifier/6
+vilify/294
+villager/6
+village/96
+villainousness/6
+villainous/28
+villain/7
+villainy/7
+Villa/6
+villa/7
+Villarreal/6
+ville
+villeinage/7
+villein/7
+villi
+Villon/6
+villus/6
+Vilma/6
+Vilnius/6
+Vilyui/6
+Vi/6
+vi/823
+vim/7
+vinaigrette/7
+Vina/6
+Vince/6
+Vincent/7
+Vincenty/6
+Vincenz/6
+vincible/45
+Vinci/6
+Vindemiatrix/6
+vindicate/24
+vindication/6
+vindicator/7
+vindictiveness/7
+vindictive/28
+vinegar/26
+vinegary
+vine/26
+vineyard/7
+Vinita/6
+Vin/6
+Vinnie/6
+Vinni/6
+Vinny/6
+vino/7
+vinous
+Vinson/6
+vintage/111
+vintager/6
+vintner/7
+vinyl/7
+violable/45
+Viola/6
+Violante/6
+viola/7
+violate/24
+violator/7
+Viole/6
+violence/7
+violent/19
+Violet/6
+violet/7
+Violetta/6
+Violette/6
+violinist/7
+violin/7
+violist/7
+viol/465
+violoncellist/9
+violoncello/7
+viper/7
+viperous
+VIP/9
+viragoes
+virago/6
+viral/19
+vireo/7
+Virge/6
+Virgie/6
+Virgilio/6
+Virgil/6
+virginal/16
+Virgina/6
+Virginia/6
+Virginian/9
+Virginie/6
+virginity/7
+virgin/7
+Virgo/7
+virgule/7
+virile
+virility/7
+virologist/9
+virology/7
+virtual/19
+virtue/7
+virtuosity/7
+virtuosoes
+virtuoso/7
+virtuousness/7
+virtuous/28
+virulence/7
+virulent/19
+virus/7
+visage/56
+Visakhapatnam's
+Visa/6
+visa/26
+Visayans
+viscera
+visceral/19
+viscid/19
+viscoelastic
+viscoelasticity
+viscometer/7
+viscose/7
+viscosity/7
+viscountcy/7
+viscountess/7
+viscount/7
+viscousness/6
+viscous/28
+viscus/6
+vise/103
+viselike
+vise's
+Vishnu/6
+visibility/43
+visible/261
+visibly/45
+Visigoth/6
+Visigoths
+visionariness/6
+visionary/144
+vision/594
+vision's/14
+visitable/12
+visitant/7
+visitation/7
+visited/12
+visit/36
+visitor/7
+vis/163
+visor/26
+VISTA
+vista/26
+Vistula/6
+visualization/48
+visualized/12
+visualizer/6
+visualizes/14
+visualize/23
+visual/16
+vitae
+vitality/7
+vitalization/48
+vitalize/311
+vital/16
+vita/6
+Vita/6
+vitamin/7
+Vite/6
+Vitia/6
+vitiate/15
+vitiation/6
+viticulture/7
+viticulturist/9
+Vitim/6
+Vito/6
+Vitoria/6
+vitreous/46
+vitrifaction/9
+vitrification/6
+vitrify/15
+vitrine/7
+vitriolic
+vitriol/26
+vitro
+vittles
+Vittoria/6
+Vittorio/6
+vituperate/24
+vituperation/6
+vituperative/19
+Vitus/6
+vivace/9
+vivaciousness/7
+vivacious/28
+vivacity/7
+viva/17
+Vivaldi
+Viva/6
+vivaria
+vivarium/7
+vivaxes
+Vivekananda/6
+vive/331
+Vivia/6
+Viviana/6
+Vivian/6
+Vivianna/6
+Vivianne/6
+vividness/7
+vivid/33
+Vivie/6
+Viviene/6
+Vivien/6
+Vivienne/6
+vivifier
+vivify/293
+Vivi/72
+viviparous
+vivisect/17
+vivisectional
+vivisectionist/7
+vivisection/7
+Viviyan/6
+Viv/6
+vivo
+Vivyan/6
+Vivyanne/6
+vixenish/19
+vixen/7
+viz
+vizier/7
+vizor's
+VJ
+Vladamir/6
+Vladimir/6
+Vladivostok/6
+Vlad/6
+VLF
+VLSI
+VMS/6
+VOA
+vocable/7
+vocab/9
+vocabularian
+vocabularianism
+vocabulary/7
+vocalic/9
+vocalise's
+vocalism/6
+vocalist/7
+vocalization/7
+vocalized/12
+vocalizer/6
+vocalize/23
+vocal/16
+vocation/824
+vocational/19
+vocative/825
+vociferate/15
+vociferation/6
+vociferousness/7
+vociferous/28
+vocoded
+vocoder
+vodka/7
+voe/9
+Vogel/6
+vogue/111
+vogueing
+voguish
+voiceband
+voiced/156
+voice/826
+voicelessness/7
+voiceless/28
+voicer/9
+voices/169
+voicing/169
+voidable
+void/169
+voided
+voider/6
+voiding
+voidness/6
+voids
+voil�
+voile/7
+volar
+volatileness/6
+volatile/144
+volatility/7
+volatilization/7
+volatilize/17
+volcanically
+volcanic/9
+volcanism/6
+volcanoes
+volcano/6
+vole/7
+Volga/6
+Volgograd/6
+vol/17
+volitionality
+volitional/19
+volition/7
+Volkswagen/7
+volleyball/7
+volleyer/6
+volley/111
+Vol/6
+Volstead/6
+voltage/7
+voltaic
+Voltaire/6
+Volta/6
+volt/48
+Volterra/6
+voltmeter/7
+volubility/9
+voluble/42
+volubly
+volume/26
+volumetric
+volumetrically
+voluminousness/7
+voluminous/28
+voluntarily/45
+voluntariness/123
+voluntarism/7
+voluntary/144
+volunteer/26
+voluptuary/7
+voluptuousness/9
+voluptuous/28
+volute/9
+Volvo/6
+vomit/31
+Vonda/6
+Von/6
+Vonnegut/6
+Vonnie/6
+Vonni/6
+Vonny/6
+voodoo/26
+voodooism/9
+voraciousness/7
+voracious/28
+voracity/7
+Voronezh/6
+Vorster/6
+vortex/7
+vortices's
+vorticity/6
+votary/7
+vote/263
+voter/7
+vote's
+votive/28
+voucher/165
+vouchsafe/17
+vouch/23
+vowelled
+vowelling
+vowel/7
+vower/6
+vow/111
+voyage/91
+voyager/6
+voyageur/7
+voyeurism/7
+voyeuristic
+voyeur/7
+VP
+vs
+V's
+VT
+Vt/6
+VTOL
+vulcanization/7
+vulcanized/12
+vulcanize/17
+Vulcan/6
+vulgarian/7
+vulgarism/7
+vulgarity/7
+vulgarization/9
+vulgarize/23
+vulgar/280
+Vulgate/7
+Vulg/6
+vulnerability/230
+vulnerable/261
+vulnerably/45
+vulpine
+vulturelike
+vulture/7
+vulturous
+vulvae
+vulva/6
+vying
+Vyky/6
+WA
+Waals
+Wabash/6
+WAC
+Wacke/6
+wackes
+wackiness/7
+wacko/7
+wacky/98
+Waco/6
+Wac/9
+wadded
+wadding/7
+waddle/31
+Wade/6
+wader/6
+wade/9
+wadi/7
+wad/49
+Wadsworth/6
+wafer/26
+waffle/49
+Wafs
+wafter/6
+waft/31
+wag/23
+waged/12
+wager/259
+wage/7
+wagged
+waggery/7
+wagging
+waggishness/7
+waggish/28
+waggle/17
+waggly
+Wagnerian
+Wagner/6
+wagoner/6
+wagon/49
+wagtail/7
+Wahl/6
+waif/26
+Waikiki/6
+wailer/6
+wail/23
+wain/26
+Wain/6
+wainscot/71
+Wainwright/6
+wainwright/7
+waistband/7
+waistcoat/26
+waister/6
+waist/111
+waistline/7
+Waite/6
+waiter/165
+Waiter/6
+wait/179
+Wait/114
+waitpeople
+waitperson/9
+waitress/26
+waiver/424
+waive/23
+Wakefield/6
+wakefulness/7
+wakeful/28
+Wake/6
+wake/211
+waken/111
+waker/6
+wakeup
+Waksman/6
+Walbridge/6
+Walcott/6
+Waldemar/6
+Walden/6
+Waldensian
+Waldheim/6
+Wald/72
+Waldo/6
+Waldon/6
+Waldorf/6
+wale/111
+Wales
+Walesa/6
+Walford/6
+Walgreen/6
+waling/6
+walkabout/6
+walkaway/7
+walker/6
+Walker/6
+walk/234
+walkie
+Walkman/9
+walkout/7
+walkover/7
+walkway/7
+wallaby/7
+Wallace/6
+Wallache/6
+wallah/6
+Wallas/6
+wallboard/7
+Wallenstein/6
+Waller/6
+wallet/7
+walleye/56
+wallflower/7
+Wallie/6
+Wallis
+Walliw/6
+Walloon/7
+walloper/6
+walloping/6
+wallop/187
+wallower/6
+wallow/31
+wallpaper/26
+wall/111
+Wall/175
+Wally/6
+wally/9
+walnut/7
+Walpole/6
+Walpurgisnacht
+walrus/7
+Walsh/6
+Walter/6
+Walther/6
+Walton/6
+waltzer/6
+Walt/231
+waltz/49
+Walworth/6
+Waly/6
+wampum/7
+Wanamaker/6
+Wanda/6
+wanderer/6
+wander/245
+wanderlust/7
+Wandie/6
+Wandis/6
+wand/96
+wane/9
+Waneta/6
+wangler/6
+wangle/23
+Wang/6
+Wanids/6
+Wankel/6
+wanna
+wannabe/9
+wanned
+wanner
+wanness/9
+wannest
+wanning
+wan/22
+Wansee/6
+Wansley/6
+wanted/12
+wanter/6
+want/187
+wantonness/9
+wanton/462
+wapiti/7
+warble/23
+warbler/6
+warbonnet/9
+ward/667
+Warde/6
+warden/26
+Warden/6
+warder/26
+Ward/72
+wardrobe/26
+wardroom/7
+wardship/6
+wards/45
+warehouseman/6
+warehouse/111
+Ware/207
+ware/7
+warfare/7
+Warfield/6
+war/26
+warhead/7
+Warhol/6
+warhorse/7
+warily/12
+warinesses/12
+wariness/7
+Waring/6
+warless
+warlike
+warlock/7
+warlord/7
+warmblooded
+warmed/14
+warmer/6
+warmheartedness/7
+warmhearted/28
+warmish
+warmness/7
+warmongering/6
+warmonger/304
+warms/14
+warmth/6
+warmths
+warm/827
+warned/12
+warner/6
+Warner/6
+warn/187
+warning/86
+Warnock/6
+warpaint
+warpath/6
+warpaths
+warper/6
+warplane/7
+warp/111
+warranted/12
+warranter/6
+warrant/111
+warranty/26
+warred/6
+warrener/6
+Warren/6
+warren/96
+warring/6
+warrior/7
+Warsaw/6
+wars/169
+warship/7
+warthog/9
+wartime/7
+wart/56
+warty/54
+Warwick/6
+wary/264
+Wasatch/6
+washable/9
+wash/36
+washbasin/7
+washboard/7
+washbowl/7
+Washburn/6
+washcloth/6
+washcloths
+washday/6
+washed/12
+washer/26
+washerwoman/6
+washerwomen
+washing/7
+Washingtonian/9
+Washington/6
+Wash/6
+Washoe/6
+washout/7
+washrag/7
+washroom/7
+washstand/7
+washtub/7
+washy/54
+wasn't
+WASP
+waspishness/7
+waspish/28
+Wasp's
+wasp/7
+was/9
+wassail/26
+Wasserman/6
+Wassermann/6
+wastage/7
+wastebasket/7
+wastefulness/9
+wasteful/28
+wasteland/7
+wastepaper/7
+waster/47
+waste/9
+wastewater
+wast/23
+wasting/19
+wastrel/7
+Watanabe/6
+watchable/12
+watchband/7
+watchdogged
+watchdogging
+watchdog/7
+watched/12
+watcher/6
+watchfulness/7
+watchful/28
+watch/234
+watchmake/173
+watchmaker/6
+watchman/6
+watchmen
+watchpoints
+watchtower/7
+watchword/7
+waterbird/9
+waterborne
+Waterbury/6
+watercolor/26
+watercolorist/7
+watercourse/7
+watercraft/6
+watercress/7
+waterer/6
+waterfall/7
+waterfowl/6
+waterfront/7
+Watergate/6
+waterhole/9
+Waterhouse/6
+wateriness/7
+watering/6
+water/211
+waterless
+waterlily/9
+waterline/9
+waterlogged
+waterloo
+Waterloo/7
+waterman/6
+watermark/26
+watermelon/7
+watermill/9
+waterproof/828
+watershed/7
+waterside/175
+watersider/6
+Waters/6
+waterspout/7
+watertightness/6
+watertight/42
+Watertown/6
+waterway/7
+waterwheel/9
+waterworks/6
+watery/98
+Watkins
+WATS
+Watson/6
+wattage/7
+Watteau/6
+Wattenberg/6
+Watterson/6
+wattle/26
+Watt/7
+watt/80
+Watusi/6
+Wat/680
+Waugh/6
+Waukesha/6
+Waunona/6
+Waupaca/6
+Waupun/6
+Wausau/6
+Wauwatosa/6
+waveband/7
+waveform/7
+wavefront/7
+waveguide/7
+Waveland/6
+wavelength/6
+wavelengths
+wavelet/7
+wavelike
+wavenumber
+waver/242
+wavering/10
+Waverley/6
+Waverly/6
+Wave/9
+wave/23
+wavily
+waviness/7
+wavy/177
+waxer/6
+waxiness/7
+wax/445
+waxwing/7
+waxwork/7
+waxy/98
+wayfarer/7
+wayfaring/9
+waylaid
+Wayland/6
+Waylan/6
+waylayer/6
+waylay/227
+wayleave/7
+Waylen/6
+Waylin/6
+Waylon/6
+Way/6
+waymarked
+way/7
+Wayne/6
+Waynesboro/6
+wayside/7
+waywardness/9
+wayward/28
+WC
+we
+weakener/6
+weaken/242
+weakfish/7
+weakish
+weakliness/6
+weakling/7
+weakly/98
+weakness/7
+weak/324
+weal/216
+wealthiness/7
+wealth/6
+wealths
+wealthy/98
+weaner/6
+weanling/6
+wean/31
+weapon/26
+weaponless
+weaponry/7
+wearable/9
+wearer/6
+wearied/12
+wearily
+weariness/7
+wearing/19
+wearisomeness/6
+wearisome/28
+wear/193
+wearying/19
+weary/226
+weasel/116
+weatherbeaten
+weathercock/26
+weatherer/6
+Weatherford/6
+weathering/6
+weatherize/17
+weatherman/6
+weather/504
+weathermen
+weatherperson/9
+weatherproof/473
+weatherstripped
+weatherstripping/9
+weatherstrip/9
+weaver/6
+Weaver/6
+weaves/14
+weave/23
+weaving/14
+webbed
+Webber/6
+webbing/7
+Webb/114
+weber/6
+Weber/6
+Webern/6
+webfeet
+webfoot/6
+Web/114
+webmaster/7
+webmistress/7
+website/9
+web/175
+Webster/7
+Websterville/6
+we'd
+wedded/14
+Weddell/6
+wedder
+wedding/7
+wedge/26
+wedgie/228
+Wedgwood/6
+wedlock/7
+Wed/6
+Wednesday/7
+wed/63
+weeder/6
+weediness/6
+weedkiller/6
+weedless
+wee/596
+weed/49
+weedy/98
+weeing
+weekday/7
+weekender/6
+weekend/111
+weekly/9
+weeknight/7
+Weeks/6
+week/65
+weenie/6
+ween/17
+weeny/80
+weeper/6
+weep/179
+weepy/228
+weevil/7
+weft/26
+Wehr/6
+Weibull/6
+Weidar/6
+Weider/6
+Weidman/6
+Weierstrass/6
+weighed/13
+weigher/6
+weigh/541
+weighs/14
+weighted/12
+weighter/6
+weightily
+weightiness/7
+weighting/6
+weight/211
+weightlessness/7
+weightless/28
+weightlifter/9
+weightlifting/7
+weighty/98
+Weill/6
+Wei/6
+Weinberg/6
+Weiner/6
+Weinstein/6
+weirdie/7
+weirdness/7
+weirdo/7
+weird/77
+weir/26
+Weisenheimer/6
+Weiss/6
+Weissman/6
+Weissmuller/6
+Weizmann/6
+Welbie/6
+Welby/6
+Welcher/6
+Welches
+welcomeness/6
+welcome/462
+welcoming/12
+welder/6
+Weldon/6
+weld/234
+Weldwood/6
+welfare/7
+welkin/7
+we'll
+Welland/6
+wellbeing/6
+Weller/6
+Wellesley/6
+Welles/6
+wellhead/7
+Wellington/7
+wellington/9
+Wellman/6
+wellness/7
+well/473
+Wells/6
+wellspring/7
+Wellsville/6
+Welmers/6
+Welsh
+welsher/6
+Welshman/6
+Welshmen
+welsh/23
+Welshwoman/6
+Welshwomen
+welter/47
+welterweight/7
+welt/49
+wencher/6
+wench/111
+Wendall/6
+Wenda/6
+wend/17
+Wendeline/6
+Wendell/6
+Wendel/6
+Wendie/6
+Wendi/6
+Wendye/6
+Wendy/6
+wen/6
+Wenonah/6
+Wenona/6
+went
+Wentworth/6
+wept/12
+were
+we're
+weren't
+werewolf/6
+werewolves
+Werner/6
+Wernher/6
+Werther/6
+werwolf's
+Wes
+Wesleyan
+Wesley/6
+Wessex/6
+Wesson/6
+westbound
+Westbrooke/6
+Westbrook/6
+Westchester/6
+wester/663
+westerly/9
+westerner/6
+westernization/7
+westernize/17
+westernmost
+Western/110
+western/110
+Westfield/6
+Westhampton/6
+Westinghouse/6
+westing/6
+Westleigh/6
+Westley/6
+Westminster/6
+Westmore/6
+West/7
+Weston/6
+Westphalia/6
+Westport/6
+west/111
+westward/9
+Westwood/6
+wetback/7
+wetland/9
+wetness/7
+wet/46
+wettable
+wetter/9
+wettest
+wetting
+we've
+Weyden/6
+Weyerhauser/6
+Weylin/6
+Wezen/6
+WFF
+whacker/6
+whack/23
+whaleboat/7
+whalebone/7
+whale/49
+Whalen/6
+whaler/6
+whaling/6
+whammed
+whamming/6
+wham/7
+whammy/9
+wharf/26
+Wharton/6
+wharves
+whatchamacallit/7
+what'd
+whatever
+what/7
+whatnot/7
+what're
+whatsoever
+wheal/7
+wheatgerm
+Wheaties/6
+Wheatland/6
+wheat/99
+Wheaton/6
+Wheatstone/6
+wheedle/23
+wheelbarrow/26
+wheelbase/7
+wheelchair/7
+wheeler/6
+Wheeler/6
+wheelhouse/7
+wheelie/7
+wheeling/6
+Wheeling/6
+Wheelock/6
+wheel/91
+wheelwright/7
+whee/9
+wheeze/17
+wheezily
+wheeziness/7
+wheezy/98
+Whelan/6
+whelk/56
+Wheller/6
+whelm/17
+whelp/26
+whence/9
+whenever
+when/9
+whensoever
+whereabout/9
+whereas/9
+whereat
+whereby
+where'd
+wherefore/7
+wherein
+where/7
+whereof
+whereon
+where're
+wheresoever
+whereto
+whereupon
+wherever
+wherewith
+wherewithal/7
+wherry/26
+whether
+whet/9
+whetstone/7
+whetted
+whetting
+whew/17
+whey/7
+which
+whichever
+whiff/26
+whiffle/31
+whiffler/6
+whiffletree/7
+whig/9
+Whig/7
+while/17
+whilom
+whilst
+whimmed
+whimming
+whimper/17
+whimsey's
+whimsicality/7
+whimsical/28
+whim/7
+whimsy/829
+whine/49
+whining/19
+whinny/181
+whiny/54
+whipcord/7
+whiplash/26
+Whippany/6
+whipped
+whipper/7
+whippersnapper/7
+whippet/7
+whipping/7
+Whipple/6
+whippletree/7
+whippoorwill/7
+whipsaw/26
+whips/6
+whip/7
+whirligig/7
+whirlpool/7
+whirl/31
+whirlwind/7
+whirlybird/7
+whirly/7
+whirred
+whirring
+whir/16
+whisker/170
+whiskery
+whiskey/7
+whisk/23
+whisperer/6
+whisper/179
+whispering/86
+whist/26
+whistleable
+whistle/23
+whistler/6
+Whistler/6
+whistling/6
+Whitaker/6
+Whitby/6
+Whitcomb/6
+whitebait/6
+whitecap/7
+whiteface/6
+Whitefield/6
+whitefish/7
+Whitehall/6
+Whitehead/6
+whitehead/9
+Whitehorse/6
+Whiteleaf/6
+Whiteley/6
+White/7
+whitener/6
+whiteness/7
+whitening/6
+whiten/245
+whiteout/9
+white/46
+whitespace
+whitetail/9
+whitewall/7
+whitewash/111
+whitewater
+Whitewater/6
+whitey/7
+Whitfield/6
+whither/17
+whitier
+whitiest
+whiting/6
+whitish
+Whitley/6
+Whitlock/6
+Whit/6
+Whitman/6
+Whitney/6
+whit/830
+Whitsunday/7
+Whittaker/6
+whitter
+Whittier
+whittle/179
+whittler/6
+whiz
+whizkid
+whizzbang/9
+whizzed
+whizzes
+whizzing
+WHO
+whoa/9
+who'd
+whodunit/7
+whoever
+wholegrain
+wholeheartedness/7
+wholehearted/28
+wholemeal
+wholeness/9
+wholesale/49
+wholesaler/6
+wholesomeness/41
+wholesome/161
+whole/144
+wholewheat
+who'll
+wholly
+whom
+who/6
+whomever
+whomsoever
+whoopee/9
+whooper/6
+whoop/23
+whoosh/26
+whop
+whopper/7
+whopping/9
+who're
+whorehouse/7
+whoreish
+whore/26
+whorish
+whorl/56
+whose
+whoso
+whosoever
+who've
+why
+whys
+WI
+Wiatt/6
+Wichita/6
+wickedness/7
+wicked/33
+wicker/6
+wickerwork/7
+wicketkeeper/7
+wicket/7
+wick/49
+wicking/6
+widemouthed
+widener/6
+wideness/9
+widen/23
+wide/38
+widespread
+widgeon's
+widget/7
+widower/6
+widowhood/9
+widow/49
+width/6
+widths
+widthwise
+Wieland/6
+wielder/6
+wield/23
+Wiemar/6
+wiener/7
+wienie/7
+Wier/6
+Wiesel/6
+wife/116
+wifeless
+wifely/98
+wigeon/7
+wigged
+wigging/6
+Wiggins
+wiggler/6
+wiggle/23
+wiggly/54
+wight/26
+wiglet/9
+wigmaker
+wig/7
+Wigner/6
+wigwagged
+wigwagging
+wigwag/9
+wigwam/7
+Wilberforce/6
+Wilbert/6
+Wilbur/6
+Wilburn/6
+Wilburt/6
+Wilcox/6
+Wilda/6
+wildcat/7
+wildcatted
+wildcatter/7
+wildcatting
+wildebeest/7
+Wilde/114
+Wilden/6
+Wilder/6
+wilderness/7
+wilder/42
+wildfire/7
+wildflower/9
+wildfowl/6
+wilding/6
+wildlife/6
+wildness/7
+Wildon/6
+wild/77
+wile/26
+Wileen/6
+Wilek/6
+Wiley/6
+Wilford/6
+Wilfred/6
+Wilfredo/6
+Wilfrid/6
+wilfulness's
+Wilhelmina/6
+Wilhelmine/6
+Wilhelm/6
+Wilie/6
+wilily
+wiliness/7
+Wilkerson/6
+Wilkes/6
+Wilkins/6
+Wilkinson/6
+Willabella/6
+Willa/6
+Willamette/6
+Willamina/6
+Willard/6
+Willcox/6
+Willdon/6
+willed/12
+Willem/6
+Willemstad/6
+willer/6
+Willetta/6
+Willette/6
+Willey/6
+willfulness/9
+willful/28
+Williamsburg/6
+William/7
+Williamson/6
+Willied/6
+Willie/6
+willies
+Willi/7
+willinger
+willingest
+willingness's
+willingness/302
+willing/161
+Willisson/6
+williwaw/7
+Will/6
+Willoughby/6
+willower/6
+Willow/6
+willow/111
+willowy/54
+willpower/7
+will/187
+Willy/56
+Willyt/6
+Wilma/6
+Wilmar/6
+Wilmer/6
+Wilmette/6
+Wilmington/6
+Wilona/6
+Wilone/6
+Wilow/6
+Wilshire/6
+Wilsonian
+Wilson/6
+wilt/17
+Wilt/6
+Wilton/6
+wily/98
+Wimbledon/6
+wimp/26
+wimpish
+wimple/26
+wimpy/54
+wince/17
+Winchell/6
+wincher/6
+winchester/6
+Winchester/7
+winch/111
+windbag/7
+windblown
+windbreak/96
+windburn/26
+winded
+winder/135
+windfall/7
+windflower/7
+Windham/6
+Windhoek/6
+windily
+windiness/7
+winding/7
+windjammer/7
+windlass/26
+windless/28
+windmill/26
+window/26
+windowless
+windowpane/7
+Windows
+windowsill/7
+windpipe/7
+windproof
+windrow/26
+wind's
+winds/14
+windscreen/7
+windshield/7
+windsock/7
+Windsor/7
+windstorm/7
+windsurf/179
+windswept
+windup/7
+wind/831
+Windward/6
+windward/16
+Windy/6
+windy/98
+wineglass/7
+winegrower/7
+Winehead/6
+winemake
+winemaster
+wine/7
+winery/7
+Winesap/6
+wineskin/6
+Winfield/6
+Winfred/6
+Winfrey/6
+wingback/6
+wingding/7
+wingeing
+winger/6
+wing/259
+wingless
+winglike
+wingman
+wingmen
+wingspan/7
+wingspread/7
+wingtip/9
+Winifield/6
+Winifred/6
+Wini/6
+winker/6
+wink/23
+winking/12
+Winkle/6
+winkle/26
+winless
+Win/6
+winnable
+Winnah/6
+Winna/6
+Winnebago/6
+Winne/6
+winner/7
+Winnetka/6
+Winnie/6
+Winnifred/6
+Winni/6
+winning/16
+Winnipeg/6
+Winn/6
+winnow/23
+Winny/6
+Winograd/6
+wino/7
+Winonah/6
+Winona/6
+Winooski/6
+Winsborough/6
+Winsett/6
+Winslow/6
+winsomeness/7
+winsome/33
+Winston/6
+winterer/6
+wintergreen/7
+winterize/17
+Winters
+winter/254
+wintertime/7
+Winthrop/6
+wintriness/6
+wintry/98
+winy/54
+win/23
+wipe/23
+wiper/6
+wirehair/7
+wireless/26
+wireman/6
+wiremen
+wirer/6
+wire's
+wires/14
+wiretap/7
+wiretapped
+wiretapper/7
+wiretapping
+wire/767
+wiriness/9
+wiring/7
+wiry/98
+Wisc
+Wisconsinite/7
+Wisconsin/6
+wisdoms
+wisdom/135
+wiseacre/7
+wisecrack/111
+wised
+wisely/54
+Wise/6
+wiseness
+wisenheimer/6
+Wisenheimer/6
+wises
+wise/832
+wishbone/7
+wishfulness/6
+wishful/28
+wish/23
+wishy
+wising
+Wis/6
+wisp/26
+wispy/54
+wist/17
+wisteria/7
+wistfulness/7
+wistful/28
+witchcraft/7
+witchdoctor/9
+witchery/7
+witch/26
+withal
+withdrawal/7
+withdrawer/6
+withdrawnness/6
+withdrawn/42
+withdraw/255
+withdrew
+withe/6
+wither/387
+withering/19
+Witherspoon/6
+with/23
+withheld
+withholder/6
+withhold/210
+within/9
+without/9
+withs
+withstand/166
+withstood
+witlessness/7
+witless/28
+Wit/6
+witness/26
+witnessed/12
+wit/444
+witted
+witter/224
+Wittgenstein/6
+witticism/7
+Wittie/6
+wittily
+wittiness/7
+wittings
+witting/10
+Witt/6
+Witty/6
+witty/98
+Witwatersrand/6
+wive/17
+wives/6
+wizard/65
+wizardry/7
+wizen/81
+wiz's
+wk/19
+Wm/6
+WNW
+woad/7
+wobble/31
+wobbler/6
+wobbliness/9
+wobbly/177
+Wodehouse/6
+woebegone/42
+woefuller
+woefullest
+woefulness/7
+woeful/28
+woe/444
+woke
+wok/125
+Wolcott/6
+wold/7
+Wolfe/6
+wolfer/6
+Wolff/6
+Wolfgang/6
+wolfhound/7
+Wolfie/6
+wolfishness/6
+wolfish/28
+Wolf/6
+wolfram/7
+wolf/111
+Wolfy/6
+Wollongong/6
+Wollstonecraft/6
+Wolsey/6
+Wolverhampton/6
+wolverine/7
+Wolverton/6
+wolves/6
+woman/116
+womanhood/7
+womanish
+womanized/12
+womanizer/6
+womanize/23
+womanizes/12
+womankind/6
+womanlike
+womanliness/7
+womanly/98
+wombat/7
+womb/56
+womenfolk/7
+women/7
+wonderer/6
+wonderfulness/7
+wonderful/28
+wonder/450
+wondering/19
+wonderland/7
+wonderment/7
+wondrousness/6
+wondrous/28
+Wong/6
+wonk/9
+wonky/54
+wonned
+wonning
+won/166
+won't
+wontedness/135
+wonted/161
+wont/26
+Woodard/6
+Woodberry/6
+woodbine/7
+woodblock/9
+Woodbury/6
+woodcarver/9
+woodcarving/7
+woodchopper/7
+woodchuck/7
+woodcock/7
+woodcraft/7
+woodcut/7
+woodcutter/7
+woodcutting/7
+woodenness/7
+wooden/33
+woodgrain/224
+woodhen
+Woodhull/6
+Woodie/6
+woodiness/7
+woodland/175
+Woodlawn/6
+woodlice
+woodlot/9
+woodlouse/6
+woodman/6
+Woodman/6
+woodmen
+woodpecker/7
+woodpile/7
+Woodrow/6
+woodruff/6
+woo/23
+woodshedded
+woodshedding
+woodshed/7
+woodside
+Wood/7
+woodsman/6
+woodsmen
+wood/291
+woodsmoke
+woods/164
+Woodstock/6
+woodsy/98
+Woodward/7
+woodwind/9
+woodworker/6
+woodworking/6
+woodwork/198
+woodworm/6
+woodyard
+Woody/6
+woody/177
+woofer/6
+woof/49
+Woolf/6
+woolgatherer/6
+woolgathering/6
+woolgather/815
+woolliness/7
+woolly/177
+Woolongong/6
+wool/833
+Woolworth/6
+Woonsocket/6
+Wooster/6
+Wooten/6
+woozily
+wooziness/7
+woozy/98
+wop/30
+Worcestershire/6
+Worcester/7
+wordage/7
+word/327
+wordbook/7
+Worden/6
+wordily
+wordiness/7
+wording/118
+wordless/19
+wordplay/7
+word's
+Wordsworth/6
+wordy/98
+wore
+workability's
+workability/12
+workableness/6
+workable/12
+workably
+workaday
+workaholic/9
+workaround/7
+workbench/7
+workbook/7
+workday/7
+worked/14
+worker/6
+workfare/9
+workforce/9
+work/182
+workhorse/7
+workhouse/7
+working/6
+workingman/6
+workingmen
+workingwoman/6
+workingwomen
+workload/7
+workmanlike
+Workman/6
+workman/86
+workmanship/7
+workmate/9
+workmen/6
+workout/7
+workpiece/7
+workplace/7
+workroom/7
+works/14
+worksheet/9
+workshop/7
+workspace/9
+workstation/7
+worktable/7
+worktop/9
+workup/9
+workweek/7
+worldlier
+worldliest
+worldliness/41
+worldly/236
+worldwide
+world/834
+wormer/6
+wormhole/7
+worm/111
+Worms/6
+wormwood/7
+wormy/54
+worn/12
+worried/19
+worrier/6
+worriment/7
+worrisome/28
+worrying/19
+worrywart/7
+worry/23
+worsen/17
+worse/208
+worshiper/6
+worshipfulness/6
+worshipful/28
+worship/23
+worsted/7
+worst/17
+worth/47
+worthily/12
+worthinesses/12
+worthiness/7
+Worthington/6
+worthlessness/7
+worthless/28
+Worth/6
+worths
+worthwhile/42
+Worthy/6
+worthy/835
+wort/7
+wost
+wot
+Wotan/6
+wouldn't
+would/9
+wouldst
+would've
+wound/13
+wounded/12
+wounder
+wounding
+wounds
+wound's
+wove/14
+woven/13
+wovens
+wow/17
+Wozniak/6
+WP
+wpm
+wrack/26
+wraith/6
+wraiths
+Wrangell/6
+wrangle/23
+wrangler/6
+wraparound/9
+wrap/7
+wrapped/12
+wrapper/7
+wrapping/7
+wraps/12
+wrasse/7
+wrathful/28
+wrath/165
+wraths
+wreak/17
+wreathe
+wreath/26
+wreaths
+wreckage/7
+wrecker/6
+wreck/23
+wrenching/19
+wrench/26
+wren/7
+Wren/7
+Wrennie/6
+wrester/6
+wrestle/179
+wrestler/6
+wrestling/6
+wrest/31
+wretchedness/7
+wretched/33
+wretch/56
+wriggle/23
+wriggler/6
+wriggly/54
+Wright/6
+wright/7
+Wrigley/6
+wringer/6
+wring/227
+wrinkled/12
+wrinkle/26
+wrinkly/228
+wristband/7
+wrist/7
+wristwatch/7
+writable/12
+write/836
+writer/118
+writeup
+writhe/17
+writing/6
+writ/753
+written/13
+Wroclaw
+wrongdoer/7
+wrongdoing/7
+wronger/6
+wrongfulness/7
+wrongful/28
+wrongheadedness/7
+wrongheaded/28
+wrongness/7
+wrong/77
+Wronskian/6
+wrote/14
+wroth
+wrought/45
+wrung
+wry/183
+wryer
+wryest
+wryness/7
+W's
+WSW
+wt
+W/357
+Wuhan/6
+Wu/6
+Wurlitzer/6
+wurst/7
+wuss/9
+wussy/228
+WV
+WW
+WWI
+WWII
+WWW
+w/608
+WY
+Wyatan/6
+Wyatt/6
+Wycherley/6
+Wycliffe/6
+Wye/140
+Wyeth/6
+Wylie/6
+Wylma/6
+Wyman/6
+Wyndham/6
+Wyn/6
+Wynne/6
+Wynnie/6
+Wynn/6
+Wynny/6
+Wyo/6
+Wyomingite/7
+Wyoming/6
+WYSIWYG
+x
+X
+Xanadu
+Xanthippe/6
+Xanthus/6
+Xaviera/6
+Xavier/6
+Xebec/6
+Xe/6
+XEmacs/6
+Xenakis/6
+Xena/6
+Xenia/6
+Xenix/6
+xenon/7
+xenophobe/7
+xenophobia/7
+xenophobic
+Xenophon/6
+Xenos
+xerographic
+xerography/7
+xerox/17
+Xerox/26
+Xerxes/6
+Xever/6
+Xhosa/6
+Xi'an
+Xian/9
+Xiaoping/6
+xii
+xiii
+xi/6
+Ximenes/6
+Ximenez/6
+Ximian/7
+Xingu/6
+xis
+xiv
+xix
+XL
+Xmas/7
+XML
+Xochipilli/6
+XOR
+X's
+XS
+xterm/6
+Xuzhou/6
+xv
+xvi
+xvii
+xviii
+xx
+XXL
+xylem/7
+xylene/6
+Xylia/6
+Xylina/6
+xylophone/7
+xylophonist/9
+Xymenes/6
+Y
+ya
+yacc/6
+Yacc/6
+yachting/6
+yachtsman
+yachtsmen
+yachtswoman/6
+yachtswomen
+yacht/677
+yack's
+Yagi/6
+yahoo/7
+Yahweh/6
+Yakima/6
+yakked
+yakking
+yak/7
+Yakut/6
+Yakutsk/6
+Yale/6
+Yalies/6
+y'all
+Yalonda/6
+Yalow/6
+Yalta/6
+Yalu/6
+Yamaha/6
+yammer/23
+Yamoussoukro
+yam/7
+Yanaton/6
+Yance/6
+Yancey/6
+Yancy/6
+Yang/6
+Yangon
+yang/9
+Yangtze/6
+Yankee/7
+yank/17
+Yank/7
+Yaounde/6
+yapped
+yapping
+yap/9
+Yaqui/6
+yardage/7
+yardarm/7
+Yardley/6
+Yard/6
+yardman/6
+yardmaster/9
+yardmen
+yard/26
+yardstick/7
+yarmulke/7
+yarn/26
+Yaroslavl/6
+yarrow/7
+Yasmeen/6
+Yasmin/6
+Yates
+yaw/17
+yawl/26
+yawner/6
+yawn/23
+yawning/19
+Yb/6
+yd
+Yeager/6
+yeah
+yeahs
+yearbook/7
+yearling/6
+yearlong
+yearly/9
+yearner/6
+yearning/86
+yearn/187
+year/65
+yea/9
+yeastiness/6
+yeast/26
+yeasty/98
+Yeats/6
+yecch
+yegg/7
+Yehudi/6
+Yehudit/6
+Yekaterinburg/6
+Yelena/6
+yell/31
+yellowhammers
+yellowish
+Yellowknife/6
+yellowness/7
+Yellowstone/6
+yellow/446
+yellowy
+yelper/6
+yelp/31
+Yeltsin
+Yemeni/9
+Yemenite/7
+Yemen/6
+Yenisei/6
+yenned
+yenning
+yen/7
+Yentl/6
+yeomanry/7
+yeoman/86
+yeomen
+yep/9
+Yerevan/6
+Yerkes/6
+Yesenia/6
+yeshiva/7
+yes/9
+yessed
+yessing
+yesterday/7
+yesteryear/7
+yet
+ye/357
+yeti/7
+Yetta/6
+Yettie/6
+Yetty/6
+Yevette/6
+Yevtushenko/6
+yew/7
+y/278
+Yggdrasil/6
+Yiddish/6
+yielded/12
+yielding/12
+yield/187
+yikes
+yin/9
+yipe/9
+yipped
+yippee/9
+yipping
+yip/9
+YMCA
+YMHA
+Ymir/6
+YMMV
+Ynes/6
+Ynez/6
+yo
+Yoda/6
+yodeler/6
+yodel/23
+Yoder/6
+yoga/7
+yoghurt's
+yogi/7
+yogurt/7
+yoke/26
+yoked/12
+yokel/7
+yokes/12
+yoking/12
+Yoknapatawpha/6
+Yokohama/6
+Yoko/6
+Yolanda/6
+Yolande/6
+Yolane/6
+Yolanthe/6
+yolk/56
+yon
+yonder
+Yong/6
+Yonkers/6
+yore/7
+Yorgo/7
+Yorick/6
+Yorke/6
+Yorker/6
+yorker/7
+Yorkshire/7
+Yorktown/6
+York/96
+Yoruba/6
+Yosemite/6
+Yoshiko/6
+Yoshi/6
+Yost/6
+you'd
+you'll
+youngish
+Young/6
+youngster/7
+Youngstown/6
+young/33
+you're
+your/7
+yourself
+yourselves
+you/246
+youthfulness/7
+youthful/28
+youths
+youth/7
+you've
+Yovonnda/6
+yow
+yowl/17
+Ypres/6
+Ypsilanti/6
+yr
+yrs
+Y's
+Ysabel/6
+YT
+ytterbium/7
+yttrium/7
+yuan/6
+Yuba/6
+Yucatan
+yucca/7
+yuck/17
+yucky/54
+Yugo/6
+Yugoslavia/6
+Yugoslavian/9
+Yugoslav/6
+Yuh/6
+Yuki/6
+yukked
+yukking
+Yukon/6
+yuk/9
+yule/7
+Yule/7
+yuletide/7
+Yuletide/9
+Yul/6
+Yulma/6
+yum
+Yuma/6
+yummy/228
+Yunnan/6
+yuppie/7
+yup/9
+Yurik/6
+Yuri/6
+yurt/7
+Yves/6
+Yvette/6
+Yvon/6
+Yvonne/6
+Yvor/6
+YWCA
+YWHA
+Zabrina/6
+Zaccaria/6
+Zachariah/6
+Zacharia/7
+Zacharie/6
+Zachary/6
+Zacherie/6
+Zachery/6
+Zach/6
+Zackariah/6
+Zack/6
+zagging
+Zagreb/6
+zag/9
+Zahara/6
+Zaire/6
+Zairian/9
+Zak/6
+Zambezi/6
+Zambia/6
+Zambian/9
+Zamboni
+Zamenhof/6
+Zamora/6
+Zandra/6
+Zane/6
+Zaneta/6
+zaniness/7
+Zan/6
+Zanuck/6
+zany/226
+Zanzibar/6
+Zapata/6
+Zaporozhye/6
+Zappa/6
+zapped
+zapper/9
+zapping
+zap/9
+Zarah/6
+Zara/6
+Zared/6
+Zaria/6
+Zarla/6
+Zealand/6
+zeal/7
+zealot/7
+zealotry/7
+zealousness/7
+zealous/28
+Zea/6
+Zebadiah/6
+Zebedee/6
+Zeb/6
+zebra/7
+Zebulen/6
+Zebulon/6
+zebu/7
+Zechariah/6
+Zedekiah/6
+Zed/6
+Zedong/6
+zed/7
+Zeffirelli/6
+Zeiss/6
+zeitgeist/9
+Zeke/6
+Zelda/6
+Zelig/6
+Zellerbach/6
+Zelma/6
+Zena/6
+Zenger/6
+Zenia/6
+zenith/6
+zeniths
+Zen/6
+Zennist/6
+Zeno/6
+Zephaniah/6
+zephyr/7
+Zephyrus/6
+Zeppelin's
+zeppelin/7
+Zerk/6
+zeroed/6
+zeroing/6
+zero/239
+zestfulness/7
+zestful/28
+zest/26
+zesty/54
+zeta/7
+zeugma/6
+Zeus/6
+Zhdanov/6
+Zhengzhou
+Zhivago/6
+Zhukov/6
+Zia/6
+Zibo/6
+Ziegfeld/7
+Ziegler/6
+zig
+zigged
+zigging
+Ziggy/6
+zigzagged
+zigzagger
+zigzagging
+zigzag/7
+zilch/9
+zillion/7
+Zilvia/6
+Zimbabwean/9
+Zimbabwe/6
+Zimmerman/6
+zincked
+zincking
+zinc/7
+zing/259
+zingy/54
+zinnia/7
+Zionism/7
+Zionist/7
+Zion/7
+zip/7
+zipped/12
+zipper/26
+zipping/12
+zippy/54
+zips/12
+zirconium/7
+zircon/7
+Zita/6
+Zitella/6
+zither/7
+zit/9
+zloty/7
+Zn/6
+zodiacal
+zodiac/7
+Zoe/6
+Zola/6
+Zollie/6
+Zolly/6
+Zomba/6
+zombie/7
+zombi's
+zonal/19
+Zonda/6
+Zondra/6
+zoned/14
+zone/504
+zones/14
+zoning/14
+zonked
+Zonnya/6
+zookeepers
+zoological/19
+zoologist/7
+zoology/7
+zoom/17
+zoophyte/7
+zoophytic
+zoo/7
+Zorah/6
+Zora/6
+Zorana/6
+Zorina/6
+Zorine/6
+Zorn/6
+Zoroaster/6
+Zoroastrianism/7
+Zoroastrian/9
+Zorro/6
+Zosma/6
+zounds/9
+Zr/6
+Zs
+Zsazsa/6
+Zsigmondy/6
+z/837
+Zubenelgenubi/6
+Zubeneschamali/6
+zucchini/7
+Zukor/6
+Zulema/6
+Zululand/6
+Zulu/7
+Zuni/9
+Z�rich/6
+Zuzana/6
+zwieback/7
+Zwingli/6
+Zworykin/6
+Z/588
+zydeco/9
+zygote/7
+zygotic
+zymurgy/9
+
diff --git a/chrome/third_party/hunspell/google.patch b/chrome/third_party/hunspell/google.patch
new file mode 100644
index 0000000..a2cc748
--- /dev/null
+++ b/chrome/third_party/hunspell/google.patch
@@ -0,0 +1,230 @@
+Index: src/hunspell/affixmgr.cxx
+===================================================================
+--- src/hunspell/affixmgr.cxx (revision 3811)
++++ src/hunspell/affixmgr.cxx (working copy)
+@@ -13,6 +13,8 @@
+ #include <ctype.h>
+ #endif
+
++#include <io.h>
++
+ #include "affixmgr.hxx"
+ #include "affentry.hxx"
+ #include "langnum.hxx"
+@@ -25,7 +27,7 @@
+ #endif
+ #endif
+
+-AffixMgr::AffixMgr(const char * affpath, HashMgr* ptr)
++AffixMgr::AffixMgr(FILE* aff_handle, HashMgr* ptr)
+ {
+ // register hash manager and load affix data from aff file
+ pHMgr = ptr;
+@@ -104,8 +106,8 @@
+ contclasses[j] = 0;
+ }
+
+- if (parse_file(affpath)) {
+- HUNSPELL_WARNING(stderr, "Failure loading aff file %s\n",affpath);
++ if (parse_file(aff_handle)) {
++ HUNSPELL_WARNING(stderr, "Failure loading aff file\n");
+ wordchars = mystrdup("qwertzuiopasdfghjklyxcvbnmQWERTZUIOPASDFGHJKLYXCVBNM");
+ }
+
+@@ -232,7 +234,7 @@
+
+
+ // read in aff file and build up prefix and suffix entry objects
+-int AffixMgr::parse_file(const char * affpath)
++int AffixMgr::parse_file(FILE* aff_handle)
+ {
+
+ // io buffers
+@@ -250,11 +252,12 @@
+
+ // open the affix file
+ FILE * afflst;
+- afflst = fopen(affpath,"r");
++ afflst = _fdopen(_dup(_fileno(aff_handle)), "r");
+ if (!afflst) {
+- HUNSPELL_WARNING(stderr, "error: could not open affix description file %s\n",affpath);
++ HUNSPELL_WARNING(stderr, "error: could not open affix description file\n");
+ return 1;
+ }
++ fseek(afflst, 0, SEEK_SET);
+
+ // step one is to parse the affix file building up the internal
+ // affix data structures
+Index: src/hunspell/affixmgr.hxx
+===================================================================
+--- src/hunspell/affixmgr.hxx (revision 3811)
++++ src/hunspell/affixmgr.hxx (working copy)
+@@ -93,7 +93,7 @@
+
+ public:
+
+- AffixMgr(const char * affpath, HashMgr * ptr);
++ AffixMgr(FILE* aff_handle, HashMgr * ptr);
+ ~AffixMgr();
+ struct hentry * affix_check(const char * word, int len,
+ const unsigned short needflag = (unsigned short) 0, char in_compound = IN_CPD_NOT);
+@@ -179,7 +179,7 @@
+ int get_checksharps(void);
+
+ private:
+- int parse_file(const char * affpath);
++ int parse_file(FILE* aff_handle);
+ // int parse_string(char * line, char ** out, const char * name);
+ int parse_flag(char * line, unsigned short * out, const char * name);
+ int parse_num(char * line, int * out, const char * name);
+Index: src/hunspell/hashmgr.cxx
+===================================================================
+--- src/hunspell/hashmgr.cxx (revision 3811)
++++ src/hunspell/hashmgr.cxx (working copy)
+@@ -13,6 +13,8 @@
+ #include <ctype.h>
+ #endif
+
++#include <io.h>
++
+ #include "hashmgr.hxx"
+ #include "csutil.hxx"
+ #include "atypes.hxx"
+@@ -29,7 +31,7 @@
+
+ // build a hash table from a munched word list
+
+-HashMgr::HashMgr(const char * tpath, const char * apath)
++HashMgr::HashMgr(FILE* dic_handle, FILE* aff_handle)
+ {
+ tablesize = 0;
+ tableptr = NULL;
+@@ -43,8 +45,8 @@
+ aliasf = NULL;
+ numaliasm = 0;
+ aliasm = NULL;
+- load_config(apath);
+- int ec = load_tables(tpath);
++ load_config(aff_handle);
++ int ec = load_tables(dic_handle);
+ if (ec) {
+ /* error condition - what should we do here */
+ HUNSPELL_WARNING(stderr, "Hash Manager Error : %d\n",ec);
+@@ -240,7 +242,7 @@
+ }
+
+ // load a munched word list and build a hash table on the fly
+-int HashMgr::load_tables(const char * tpath)
++int HashMgr::load_tables(FILE* t_handle)
+ {
+ int wl, al;
+ char * ap;
+@@ -248,8 +250,9 @@
+ unsigned short * flags;
+
+ // raw dictionary - munched file
+- FILE * rawdict = fopen(tpath, "r");
++ FILE * rawdict = _fdopen(_dup(_fileno(t_handle)), "r");
+ if (rawdict == NULL) return 1;
++ fseek(rawdict, 0, SEEK_SET);
+
+ // first read the first line of file to get hash table size */
+ char ts[MAXDELEN];
+@@ -442,7 +445,7 @@
+ }
+
+ // read in aff file and set flag mode
+-int HashMgr::load_config(const char * affpath)
++int HashMgr::load_config(FILE* aff_handle)
+ {
+ int firstline = 1;
+
+@@ -451,11 +454,12 @@
+
+ // open the affix file
+ FILE * afflst;
+- afflst = fopen(affpath,"r");
++ afflst = _fdopen(_dup(_fileno(aff_handle)), "r");
+ if (!afflst) {
+- HUNSPELL_WARNING(stderr, "Error - could not open affix description file %s\n",affpath);
++ HUNSPELL_WARNING(stderr, "Error - could not open affix description file\n");
+ return 1;
+ }
++ fseek(afflst, 0, SEEK_SET);
+
+ // read in each line ignoring any that do not
+ // start with a known line type indicator
+Index: src/hunspell/hashmgr.hxx
+===================================================================
+--- src/hunspell/hashmgr.hxx (revision 3811)
++++ src/hunspell/hashmgr.hxx (working copy)
+@@ -25,7 +25,7 @@
+
+
+ public:
+- HashMgr(const char * tpath, const char * apath);
++ HashMgr(FILE* t_handle, FILE* a_handle);
+ ~HashMgr();
+
+ struct hentry * lookup(const char *) const;
+@@ -46,9 +46,9 @@
+
+
+ private:
+- int load_tables(const char * tpath);
++ int load_tables(FILE* t_handle);
+ int add_word(const char * word, int wl, unsigned short * ap, int al, const char * desc);
+- int load_config(const char * affpath);
++ int load_config(FILE* aff_handle);
+ int parse_aliasf(char * line, FILE * af);
+ #ifdef HUNSPELL_EXPERIMENTAL
+ int parse_aliasm(char * line, FILE * af);
+Index: src/hunspell/hunspell.cxx
+===================================================================
+--- src/hunspell/hunspell.cxx (revision 3811)
++++ src/hunspell/hunspell.cxx (working copy)
+@@ -20,7 +20,7 @@
+ #endif
+ #endif
+
+-Hunspell::Hunspell(const char * affpath, const char * dpath)
++Hunspell::Hunspell(FILE* aff_handle, FILE* dic_handle)
+ {
+ encoding = NULL;
+ csconv = NULL;
+@@ -28,11 +28,11 @@
+ complexprefixes = 0;
+
+ /* first set up the hash manager */
+- pHMgr = new HashMgr(dpath, affpath);
++ pHMgr = new HashMgr(dic_handle, aff_handle);
+
+ /* next set up the affix manager */
+ /* it needs access to the hash manager lookup methods */
+- pAMgr = new AffixMgr(affpath,pHMgr);
++ pAMgr = new AffixMgr(aff_handle, pHMgr);
+
+ /* get the preferred try string and the dictionary */
+ /* encoding from the Affix Manager for that dictionary */
+@@ -1694,9 +1694,9 @@
+
+ #endif // END OF HUNSPELL_EXPERIMENTAL CODE
+
+-Hunhandle *Hunspell_create(const char * affpath, const char * dpath)
++Hunhandle *Hunspell_create(FILE* aff_handle, FILE* dic_handle)
+ {
+- return (Hunhandle*)(new Hunspell(affpath, dpath));
++ return (Hunhandle*)(new Hunspell(aff_handle, dic_handle));
+ }
+
+ void Hunspell_destroy(Hunhandle *pHunspell)
+Index: src/hunspell/hunspell.hxx
+===================================================================
+--- src/hunspell/hunspell.hxx (revision 3811)
++++ src/hunspell/hunspell.hxx (working copy)
+@@ -48,7 +48,7 @@
+ * input: path of affix file and dictionary file
+ */
+
+- Hunspell(const char * affpath, const char * dpath);
++ Hunspell(FILE* aff_handle, FILE* dic_handle);
diff --git a/chrome/third_party/hunspell/google/bdict.h b/chrome/third_party/hunspell/google/bdict.h
new file mode 100644
index 0000000..b96a2e4
--- /dev/null
+++ b/chrome/third_party/hunspell/google/bdict.h
@@ -0,0 +1,196 @@
+// Copyright 2008 Google Inc. All Rights Reserved.
+
+#ifndef CHROME_THIRD_PARTY_HUNSPELL_GOOGLE_BDICT_H__
+#define CHROME_THIRD_PARTY_HUNSPELL_GOOGLE_BDICT_H__
+
+#include "base/basictypes.h"
+
+// BDict (binary dictionary) format. All offsets are little endian.
+//
+// Header (12 bytes).
+// "BDic" Signature (4 bytes)
+// Version (little endian 4 bytes)
+// Absolute offset in file of the aff info. (4 bytes)
+// Absolute offset in file of the dic table. (4 bytes)
+//
+// Aff information:
+// Absolute offset in file of the affix group table (4 bytes)
+// Absolute offset in file of the affix rules table (4 bytes)
+// Absolute offset in file of the replacements table (4 bytes)
+// Absolute offset in file of the "other rules" table (4 bytes)
+//
+// The data between the aff header and the affix rules table is the comment
+// from the beginning of the .aff file which often contains copyrights, etc.
+//
+// Affix group table:
+// Array of NULL terminated strings. It will end in a double-NULL.
+//
+// Affix rules table:
+// List of LF termianted lines. NULL terminated.
+//
+// Replacements table:
+// List of pairs of NULL teminated words. The end is indicated by a
+// double-NULL. The first word in the pair is the replacement source, the
+// second is what to replace it with. Example:
+// foo\0bar\0a\0b\0\0
+// for replacing ("foo" with "bar") and ("a" with "b").
+//
+// Other rules table:
+// List of LF termianted lines. NULL terminated.
+//
+//
+// Dic table. This stores the .dic file which contains the words in the
+// dictionary, and indices for each one that indicate a set of suffixes or
+// prefixes that can be applied. We store it in a trie to save space. It
+// replaces Hunspell's hash manager.
+//
+// 0abxxxxx xxxxxxxx (in binary) Leaf node:
+// The number stored in the bits represented by x is the affix index.
+//
+// If bit <a> is set, the leaf node has an additional string. Following the
+// 2 byte header is a NULL-terminated (possibly 0-length) string that should
+// be appended to the node. This allows long unique endings to be handled
+// efficiently.
+//
+// If bit <b> is set, the leaf node has a supplimental list of affix IDs
+// following the ordinary data for the leaf node. These affix group IDs are
+// additional rules for the same word. For example, two prefixes may go
+// with distinct sets of suffixes.
+//
+// If the affix index is all 1's, then that means that there is only the
+// supplimental list, and the 13-bit of affix built-in to the node don't
+// count. This is used to represent numbers greater than 13 bits, since
+// the supplimentary list has 16 bits per entry. The node must have a
+// supplimenal list if this is set.
+//
+// This additional array is an array of 16-bit little-endian values,
+// terminated by 0xFFFF (since 0 is an affix ID meaning "no affix ID".
+//
+// 0x110000ab: Lookup node.
+// When <a> is set, addresses are 32-bits relative to the beginning of the
+// dictionary data. When unset, addresses are 16-bits relative to the
+// beginning of this node. All values are little endian.
+//
+// When <b> is set, there is one additional entry before the table begins.
+// This is the 0th character. 0 is a common addition (meaning no more data)
+// and this prevents us from having to store entries for all the control
+// characters. This magic element is not counted in the table size.
+//
+// The ID byte is followeed by two bytes:
+// XX: First character value in the lookup table.
+// XX: Number of characters in the lookup table.
+//
+// This is followed optionally by the entry for 0, and then by a table of
+// size indicated by the second charatcer after the ID.
+//
+// 1110xxxx: List node with 8-bit addresses.
+// The number of items (max 16) in the list is stored in the bits xxxx.
+// Followed by N (character byte, 8-bit offset) pairs. These offsets are
+// relative to the end of the list of pairs.
+// 1111xxxx: List node with 16-bit addresses. Same as above but offsets are
+// 2-bytes each. LITTLE ENDIAN!
+
+namespace hunspell {
+
+#pragma pack(push, 1)
+
+class BDict {
+ public:
+ // File header.
+ enum { SIGNATURE = 0x63694442 };
+ struct Header {
+ uint32 signature;
+
+ // Major versions are incompatible with other major versions. Minor versions
+ // should be readable by older programs expecting the same major version.
+ uint16 major_version;
+ uint16 minor_version;
+
+ uint32 aff_offset; // Offset of the aff data.
+ uint32 dic_offset; // Offset of the dic data.
+ };
+
+ // AFF section ===============================================================
+
+ struct AffHeader {
+ uint32 affix_group_offset;
+ uint32 affix_rule_offset;
+ uint32 rep_offset; // Replacements table.
+ uint32 other_offset;
+ };
+
+ // DIC section ===============================================================
+
+ // Leaf ----------------------------------------------------------------------
+
+ // Leaf nodes have the high bit set to 0.
+ enum { LEAF_NODE_TYPE_MASK = 0x80 }; // 10000000
+ enum { LEAF_NODE_TYPE_VALUE = 0 }; // 00000000
+
+ // Leaf nodes with additional strings have the next-to-high bit set to 1.
+ // This mask/value pair also includes the high bit set to 0 which is the leaf
+ // indicator.
+ enum { LEAF_NODE_ADDITIONAL_MASK = 0xC0 }; // 11000000
+ enum { LEAF_NODE_ADDITIONAL_VALUE = 0x40 }; // 01000000
+
+ // Leaf nodes with an additional array of affix rules following it.
+ enum { LEAF_NODE_FOLLOWING_MASK = 0xA0 }; // 10100000
+ enum { LEAF_NODE_FOLLOWING_VALUE = 0x20 }; // 00100000
+
+ // The low 5 bits of the leaf node ID byte are the first 5 bits of the affix
+ // ID. The following byte is used for the low bits of the affix ID (we don't
+ // specify as mask for that).
+ enum { LEAF_NODE_FIRST_BYTE_AFFIX_MASK = 0x1F }; // 00011111
+
+ // The maximum affix value that can be stored in the first entry (not in the
+ // following list). We reserve all 1's to be a magic value (see next entry)
+ // so we can store large numbers somewhere else.
+ enum { LEAF_NODE_MAX_FIRST_AFFIX_ID = 0x1FFE }; // 00011111 11111110
+
+ // When the affix built-in to the leaf node (the first one) has too many bits
+ // for the space reserved for it (13 bits), then we fill it with this value.
+ // This means that the affix doesn't count. The affix will instead be stored
+ // in the "following list" which allows up to 16 bits per entry.
+ enum { FIRST_AFFIX_IS_UNUSED = 0x1FFF }; // 00011111 11111111
+
+ // The maximum number of leaf nodes we'll read that have the same word and
+ // follow each other (the FOLLOWING bit is set).
+ enum { MAX_AFFIXES_PER_WORD = 32 };
+
+ // The terminator for the list of following affix group IDs.
+ enum { LEAF_NODE_FOLLOWING_LIST_TERMINATOR = 0xFFFF };
+
+ // Lookup --------------------------------------------------------------------
+
+ // Lookup nodes have the first 6 bits set to 110000.
+ enum { LOOKUP_NODE_TYPE_MASK = 0xFC }; // 11111100
+ enum { LOOKUP_NODE_TYPE_VALUE = 0xC0 }; // 11000000
+
+ // Lookup nodes have the low bit meaning it has a 0th entry, and the
+ // next-to-lowest bit indicating whether the offsets are 32-bits. Included
+ // in these masks are the lookup ID above.
+ enum { LOOKUP_NODE_0TH_MASK = 0xFD }; // 11111110
+ enum { LOOKUP_NODE_0TH_VALUE = 0xC1 }; // 11000010
+ enum { LOOKUP_NODE_32BIT_MASK = 0xFE}; // 11111110
+ enum { LOOKUP_NODE_32BIT_VALUE = 0xC2}; // 11000001
+
+ // List ----------------------------------------------------------------------
+
+ // List nodes have the first 3 bits set to 1.
+ enum { LIST_NODE_TYPE_MASK = 0xE0 }; // 11100000
+ enum { LIST_NODE_TYPE_VALUE = 0xE0 }; // 11100000
+
+ // The 4th from highest bit indicates a 16 bit (as opposed to 8 bit) list.
+ // This mask/value also includes the list ID in the high 3 bits.
+ enum { LIST_NODE_16BIT_MASK = 0xF0 }; // 11110000
+ enum { LIST_NODE_16BIT_VALUE = 0xF0 }; // 11110000
+
+ // The low 4 bits of the list ID byte are the count.
+ enum { LIST_NODE_COUNT_MASK = 0xF }; // 00001111
+};
+
+#pragma pack(pop)
+
+} // namespace hunspell
+
+#endif // CHROME_THIRD_PARTY_HUNSPELL_GOOGLE_BDICT_H__
diff --git a/chrome/third_party/hunspell/google/bdict_reader.cc b/chrome/third_party/hunspell/google/bdict_reader.cc
new file mode 100644
index 0000000..a3ac337
--- /dev/null
+++ b/chrome/third_party/hunspell/google/bdict_reader.cc
@@ -0,0 +1,724 @@
+// Copyright 2008 Google Inc. All Rights Reserved.
+
+#include "chrome/third_party/hunspell/google/bdict_reader.h"
+
+#include "base/logging.h"
+#include "chrome/third_party/hunspell/google/bdict.h"
+
+namespace hunspell {
+
+// Like the "Visitor" design pattern, this lightweight object provides an
+// interface around a serialized trie node at the given address in the memory.
+class NodeReader {
+ public:
+ // Return values for GetChildAt.
+ enum FindResult {
+ // A node is found.
+ FIND_NODE,
+
+ // There are no more children for this node, no child node is returned.
+ FIND_DONE,
+
+ // There is no node at this location, but there are more if you continue
+ // iterating. This happens when there is a lookup node with empty entries.
+ FIND_NOTHING
+ };
+
+ // The default constructor makes an invalid reader.
+ NodeReader();
+ NodeReader(const unsigned char* bdict_data, size_t bdict_length,
+ size_t node_offset, int node_depth);
+
+ // Returns true if the reader is valid. False means you shouldn't use it.
+ bool is_valid() const { return !!bdict_data_; }
+
+ // Recursively finds the given NULL terminated word.
+ // See BDictReader::FindWord.
+ int FindWord(const unsigned char* word,
+ int affix_indices[BDict::MAX_AFFIXES_PER_WORD]) const;
+
+ // Allows iterating over the children of this node. When it returns
+ // FIND_NODE, |*result| will be populated with the reader for the found node.
+ // The first index is 0. The single character for this node will be placed
+ // into |*found_char|.
+ FindResult GetChildAt(int index, char* found_char, NodeReader* result) const;
+
+ // Leaf ----------------------------------------------------------------------
+
+ inline bool is_leaf() const {
+ return (id_byte() & BDict::LEAF_NODE_TYPE_MASK) ==
+ BDict::LEAF_NODE_TYPE_VALUE;
+ }
+
+ // If this is a leaf node with an additional string, this function will return
+ // a pointer to the beginning of the additional string. It will be NULL
+ // terminated. If it is not a leaf or has no additional string, it will return
+ // NULL.
+ inline const unsigned char* additional_string_for_leaf() const {
+ // Leaf nodes with additional strings start with bits "01" in the ID byte.
+ if ((id_byte() & BDict::LEAF_NODE_ADDITIONAL_MASK) ==
+ BDict::LEAF_NODE_ADDITIONAL_VALUE)
+ return &bdict_data_[node_offset_ + 2]; // Starts after the 2 byte ID.
+ return NULL;
+ }
+
+ // Returns the first affix ID corresponding to the given leaf node. The
+ // current node must be a leaf or this will do the wrong thing. There may be
+ // additional affix IDs following the node when leaf_has_following is set,
+ // but this will not handle those.
+ inline int affix_id_for_leaf() const {
+ // Take the lowest 6 bits of the first byte, and all 8 bits of the second.
+ return ((bdict_data_[node_offset_ + 0] &
+ BDict::LEAF_NODE_FIRST_BYTE_AFFIX_MASK) << 8) +
+ bdict_data_[node_offset_ + 1];
+ }
+
+ // Returns true if there is a list of additional affix matches following this
+ // leaf node.
+ inline bool leaf_has_following() const {
+ return ((id_byte() & BDict::LEAF_NODE_FOLLOWING_MASK) ==
+ BDict::LEAF_NODE_FOLLOWING_VALUE);
+ }
+
+ // Fills the affix indices into the output array given a matching leaf node.
+ // |additional_bytes| is the number of bytes of the additional string,
+ // including the NULL terminator, following this leaf node. This will be 0 if
+ // there is no additional string.
+ int FillAffixesForLeafMatch(
+ size_t additional_bytes,
+ int affix_indices[BDict::MAX_AFFIXES_PER_WORD]) const;
+
+ // Lookup --------------------------------------------------------------------
+
+ inline bool is_lookup() const {
+ return (id_byte() & BDict::LOOKUP_NODE_TYPE_MASK) ==
+ BDict::LOOKUP_NODE_TYPE_VALUE;
+ }
+
+ inline bool is_lookup_32() const {
+ return (id_byte() & BDict::LOOKUP_NODE_32BIT_MASK) ==
+ BDict::LOOKUP_NODE_32BIT_VALUE;
+ }
+
+ inline bool lookup_has_0th() const {
+ return (id_byte() & BDict::LOOKUP_NODE_0TH_MASK) ==
+ BDict::LOOKUP_NODE_0TH_VALUE;
+ }
+
+ // Returns the first entry after the lookup table header. When there is a
+ // magic 0th entry, it will be that address.
+ inline size_t zeroth_entry_offset() const {
+ return node_offset_ + 3;
+ }
+
+ // Returns the index of the first element in the lookup table. This skips any
+ // magic 0th entry.
+ size_t lookup_table_offset() const {
+ size_t table_offset = zeroth_entry_offset();
+ if (lookup_has_0th())
+ return table_offset + (is_lookup_32() ? 4 : 2);
+ return table_offset;
+ }
+
+ inline unsigned char lookup_first_char() const {
+ return bdict_data_[node_offset_ + 1];
+ }
+
+ inline int lookup_num_chars() const {
+ return bdict_data_[node_offset_ + 2];
+ }
+
+ // Computes a node reader for the magic 0th entry of the table. This assumes
+ // it has a 0th entry. This will always return FOUND_NODE (for compatilibility
+ // with GetChildAt).
+ FindResult ReaderForLookup0th(NodeReader* result) const;
+
+ // Gets a node reader for the |offset|th element in the table, not counting
+ // the magic 0th element, if any (so passing 0 here will give you the first
+ // element in the regular lookup table). The offset is assumed to be valid.
+ //
+ // |child_node_char| is the character value that the child node will
+ // represent. The single character for this node will be placed into
+ // |*found_char|.
+ FindResult ReaderForLookupAt(size_t index, char* found_char,
+ NodeReader* result) const;
+
+ // List ----------------------------------------------------------------------
+
+ inline bool is_list() const {
+ return (id_byte() & BDict::LIST_NODE_TYPE_MASK) ==
+ BDict::LIST_NODE_TYPE_VALUE;
+ }
+
+ inline int is_list_16() const {
+ // 16 bit lst nodes have the high 4 bits of 1.
+ return (id_byte() & BDict::LIST_NODE_16BIT_MASK) ==
+ BDict::LIST_NODE_16BIT_VALUE;
+ }
+
+ inline size_t list_item_count() const {
+ // The list count is stored in the low 4 bits of the ID.
+ return id_byte() & BDict::LIST_NODE_COUNT_MASK;
+ }
+
+ // Returns a NodeReader for the list item with the given index. The single
+ // character for this node will be placed into |*found_char|.
+ FindResult ReaderForListAt(size_t index, char* found_char,
+ NodeReader* result) const;
+
+ private:
+ inline unsigned char id_byte() const {
+ DCHECK(node_offset_ < bdict_length_);
+ return bdict_data_[node_offset_];
+ }
+
+ // Checks the given leaf node to see if it's a match for the given word.
+ // The parameters and return values are the same as BDictReader::FindWord.
+ int CompareLeafNode(const unsigned char* word,
+ int affix_indices[BDict::MAX_AFFIXES_PER_WORD]) const;
+
+ // Recursive calls used by FindWord to look up child nodes of different types.
+ int FindInLookup(const unsigned char* word,
+ int affix_indices[BDict::MAX_AFFIXES_PER_WORD]) const;
+ int FindInList(const unsigned char* word,
+ int affix_indices[BDict::MAX_AFFIXES_PER_WORD]) const;
+
+ // The entire bdict file. This will be NULL if it is invalid.
+ const unsigned char* bdict_data_;
+ size_t bdict_length_;
+
+ // Absolute offset within |bdict_data_| of the beginning of this node.
+ size_t node_offset_;
+
+ // The character index into the word that this node represents.
+ int node_depth_;
+};
+
+NodeReader::NodeReader()
+ : bdict_data_(NULL),
+ bdict_length_(0),
+ node_offset_(0),
+ node_depth_(0) {
+}
+
+NodeReader::NodeReader(const unsigned char* bdict_data, size_t bdict_length,
+ size_t node_offset, int node_depth)
+ : bdict_data_(bdict_data),
+ bdict_length_(bdict_length),
+ node_offset_(node_offset),
+ node_depth_(node_depth) {
+}
+
+int NodeReader::FindWord(const unsigned char* word,
+ int affix_indices[BDict::MAX_AFFIXES_PER_WORD]) const {
+ if (is_leaf())
+ return CompareLeafNode(word, affix_indices);
+
+ if (is_lookup())
+ return FindInLookup(word, affix_indices);
+ if (is_list())
+ return FindInList(word, affix_indices);
+ return 0; // Corrupt file.
+}
+
+NodeReader::FindResult NodeReader::GetChildAt(int index, char* found_char,
+ NodeReader* result) const {
+ if (is_lookup()) {
+ if (lookup_has_0th()) {
+ if (index == 0) {
+ *found_char = 0;
+ return ReaderForLookup0th(result);
+ }
+ index--; // Make index relative to the non-0th-element table.
+ }
+ return ReaderForLookupAt(index, found_char, result);
+ }
+ if (is_list()) {
+ return ReaderForListAt(index, found_char, result);
+ }
+ return FIND_DONE;
+}
+
+int NodeReader::CompareLeafNode(
+ const unsigned char* word,
+ int affix_indices[BDict::MAX_AFFIXES_PER_WORD]) const {
+ // See if there is an additional string.
+ const unsigned char* additional = additional_string_for_leaf();
+ if (!additional) {
+ // No additional string. This means we should have reached the end of the
+ // word to get a match.
+ if (word[node_depth_] != 0)
+ return 0;
+ return FillAffixesForLeafMatch(0, affix_indices);
+ }
+
+ // Check the additional string.
+ int cur = 0;
+ while (additional[cur]) {
+ if (word[node_depth_ + cur] != additional[cur])
+ return 0; // Not a match.
+ cur++;
+ }
+
+ // Got to the end of the additional string, the word should also be over for
+ // a match (the same as above).
+ if (word[node_depth_ + cur] != 0)
+ return 0;
+ return FillAffixesForLeafMatch(cur + 1, affix_indices);
+}
+
+int NodeReader::FillAffixesForLeafMatch(
+ size_t additional_bytes,
+ int affix_indices[BDict::MAX_AFFIXES_PER_WORD]) const {
+ // The first match is easy, it always comes from the affix_id included in the
+ // leaf node.
+ affix_indices[0] = affix_id_for_leaf();
+
+ if (!leaf_has_following() && affix_indices[0] != BDict::FIRST_AFFIX_IS_UNUSED)
+ return 1; // Common case: no additional affix group IDs.
+
+ // We may or may not need to ignore that first value we just read, since it
+ // could be a dummy placeholder value. The |list_offset| is the starting
+ // position in the output list to write the rest of the values, which may
+ // overwrite the first value.
+ int list_offset = 1;
+ if (affix_indices[0] == BDict::FIRST_AFFIX_IS_UNUSED)
+ list_offset = 0;
+
+ // Process all remaining matches.
+ const unsigned short* following_array =
+ reinterpret_cast<const unsigned short*>(
+ &bdict_data_[node_offset_ + additional_bytes + 2]);
+ for (int i = 0; i < BDict::MAX_AFFIXES_PER_WORD - list_offset; i++) {
+ if (following_array[i] == BDict::LEAF_NODE_FOLLOWING_LIST_TERMINATOR)
+ return i + list_offset; // Found the end of the list.
+ affix_indices[i + list_offset] = following_array[i];
+ }
+ return BDict::MAX_AFFIXES_PER_WORD;
+}
+
+int NodeReader::FindInLookup(
+ const unsigned char* word,
+ int affix_indices[BDict::MAX_AFFIXES_PER_WORD]) const {
+ unsigned char next_char = word[node_depth_];
+
+ NodeReader child_reader;
+ if (next_char == 0 && lookup_has_0th()) {
+ if (ReaderForLookup0th(&child_reader) != FIND_NODE)
+ return 0;
+ } else {
+ // Look up in the regular part of the table.
+ int offset_in_table = static_cast<int>(next_char) - lookup_first_char();
+ if (offset_in_table < 0 || offset_in_table > lookup_num_chars())
+ return 0; // Table can not include this value.
+
+ char dummy_char;
+ if (ReaderForLookupAt(offset_in_table, &dummy_char, &child_reader) !=
+ FIND_NODE)
+ return 0;
+ DCHECK(dummy_char == static_cast<char>(next_char));
+ }
+
+ if (!child_reader.is_valid())
+ return 0; // Something is messed up.
+
+ // Now recurse into that child node.
+ return child_reader.FindWord(word, affix_indices);
+}
+
+NodeReader::FindResult NodeReader::ReaderForLookup0th(
+ NodeReader* result) const {
+ size_t child_offset;
+ if (is_lookup_32()) {
+ child_offset = *reinterpret_cast<const unsigned int*>(
+ &bdict_data_[zeroth_entry_offset()]);
+ } else {
+ child_offset = *reinterpret_cast<const unsigned short*>(
+ &bdict_data_[zeroth_entry_offset()]);
+ child_offset += node_offset_;
+ }
+
+ // Range check the offset;
+ if (child_offset > bdict_length_)
+ return FIND_DONE;
+
+ // Now recurse into that child node. We don't advance to the next character
+ // here since the 0th element will be a leaf (see ReaderForLookupAt).
+ *result = NodeReader(bdict_data_, bdict_length_, child_offset, node_depth_);
+ return FIND_NODE;
+}
+
+NodeReader::FindResult NodeReader::ReaderForLookupAt(
+ size_t index,
+ char* found_char,
+ NodeReader* result) const {
+ const unsigned char* table_begin = &bdict_data_[lookup_table_offset()];
+
+ if (index >= static_cast<size_t>(lookup_num_chars()))
+ return FIND_DONE;
+
+ size_t child_offset;
+ if (is_lookup_32()) {
+ // Table contains 32-bit absolute offsets.
+ child_offset =
+ reinterpret_cast<const unsigned int*>(table_begin)[index];
+ if (!child_offset)
+ return FIND_NOTHING; // This entry in the table is empty.
+ } else {
+ // Table contains 16-bit offsets relative to the current node.
+ child_offset =
+ reinterpret_cast<const unsigned short*>(table_begin)[index];
+ if (!child_offset)
+ return FIND_NOTHING; // This entry in the table is empty.
+ child_offset += node_offset_;
+ }
+
+ // Range check the offset;
+ if (child_offset > bdict_length_)
+ return FIND_DONE; // Error.
+
+ // This is a bit tricky. When we've just reached the end of a word, the word
+ // itself will be stored in a leaf "node" off of this node. That node, of
+ // course, will want to know that it's the end of the word and so we have to
+ // have it use the same index into the word as we're using at this level.
+ //
+ // This happens when there is a word in the dictionary that is a strict
+ // prefix of other words in the dictionary, and so we'll have a non-leaf
+ // node representing the entire word before the ending leaf node.
+ //
+ // In all other cases, we want to advance to the next character. Even if the
+ // child node is a leaf, it will have an additional character that it will
+ // want to check.
+ *found_char = static_cast<char>(index + lookup_first_char());
+ int char_advance = *found_char == 0 ? 0 : 1;
+
+ *result = NodeReader(bdict_data_, bdict_length_,
+ child_offset, node_depth_ + char_advance);
+ return FIND_NODE;
+}
+
+int NodeReader::FindInList(
+ const unsigned char* word,
+ int affix_indices[BDict::MAX_AFFIXES_PER_WORD]) const {
+ unsigned char next_char = word[node_depth_];
+
+ // TODO(brettw) replace with binary search.
+ size_t list_count = list_item_count();
+ const unsigned char* list_begin = &bdict_data_[node_offset_ + 1];
+
+ int bytes_per_index = (is_list_16() ? 3 : 2);
+
+ for (size_t i = 0; i < list_count; i++) {
+ if (list_begin[i * bytes_per_index] == next_char) {
+ // Found a match.
+ char dummy_char;
+ NodeReader child_reader;
+ if (ReaderForListAt(i, &dummy_char, &child_reader) != FIND_NODE)
+ return 0;
+ DCHECK(dummy_char == static_cast<char>(next_char));
+ return child_reader.FindWord(word, affix_indices);
+ }
+ }
+ return 0;
+}
+
+NodeReader::FindResult NodeReader::ReaderForListAt(
+ size_t index,
+ char* found_char,
+ NodeReader* result) const {
+ size_t list_begin = node_offset_ + 1;
+
+ if (index >= list_item_count())
+ return FIND_DONE;
+
+ size_t offset;
+ if (is_list_16()) {
+ const unsigned char* list_item_begin = bdict_data_ + list_begin + index * 3;
+ *found_char = static_cast<char>(list_item_begin[0]);
+
+ // The children begin right after the list.
+ size_t children_begin = list_begin + list_item_count() * 3;
+ offset = children_begin + *reinterpret_cast<const unsigned short*>(
+ &list_item_begin[1]);
+ } else {
+ const unsigned char* list_item_begin = bdict_data_ + list_begin + index * 2;
+ *found_char = list_item_begin[0];
+
+ size_t children_begin = list_begin + list_item_count() * 2;
+ offset = children_begin + list_item_begin[1];
+ }
+
+ if (offset == 0 || node_offset_ > bdict_length_)
+ return FIND_DONE; // Error, should not happen except for corruption.
+
+ int char_advance = *found_char == 0 ? 0 : 1; // See ReaderForLookupAt.
+ *result = NodeReader(bdict_data_, bdict_length_,
+ offset, node_depth_ + char_advance);
+ return FIND_NODE;
+}
+
+// WordIterator ----------------------------------------------------------------
+
+struct WordIterator::NodeInfo {
+ // The current offset is set to -1 so we start iterating at 0 when Advance
+ // is called.
+ NodeInfo(const NodeReader& rdr, char add)
+ : reader(rdr),
+ addition(add),
+ cur_offset(-1) {
+ }
+
+ // The reader for this node level.
+ NodeReader reader;
+
+ // The character that this level represents. For the 0th level, this will
+ // be 0 (since it is the root that represents no characters).
+ char addition;
+
+ // The current index into the reader that we're reading. Combined with the
+ // |stack_|, this allows us to iterate over the tree in depth-first order.
+ int cur_offset;
+};
+
+WordIterator::WordIterator(const NodeReader& reader) {
+ NodeInfo info(reader, 0);
+ stack_.push_back(info);
+}
+
+WordIterator::WordIterator(const WordIterator& other) {
+ operator=(other);
+}
+
+WordIterator::~WordIterator() {
+ // Can't be in the header for the NodeReader destructor.
+}
+
+WordIterator& WordIterator::operator=(const WordIterator& other) {
+ stack_ = other.stack_;
+ return *this;
+}
+
+int WordIterator::Advance(char* output_buffer, size_t output_len,
+ int affix_ids[BDict::MAX_AFFIXES_PER_WORD]) {
+ // In-order tree walker. This uses a loop for fake tail recursion.
+ while (!stack_.empty()) {
+ NodeInfo& cur = stack_.back();
+ cur.cur_offset++;
+ char cur_char;
+ NodeReader child_reader;
+
+ /*if (cur.reader.is_leaf()) {
+ child_reader = cur.reader;
+ cur_char = cur.addition;
+ stack_.pop_back();
+ return FoundLeaf(child_reader, cur_char, output_buffer, output_len,
+ affix_ids);
+ }*/
+
+ switch (cur.reader.GetChildAt(cur.cur_offset, &cur_char, &child_reader)) {
+ case NodeReader::FIND_NODE:
+ // Got a valid child node.
+ if (child_reader.is_leaf()) {
+ return FoundLeaf(child_reader, cur_char, output_buffer, output_len,
+ affix_ids);
+ }
+
+ // Not a leaf. Add the new node to our stack and try again.
+ stack_.push_back(NodeInfo(child_reader, cur_char));
+ break;
+
+ case NodeReader::FIND_NOTHING:
+ // This one is empty, but we're not done. Continue on.
+ break;
+
+ case NodeReader::FIND_DONE:
+ // No more children at this level, pop the stack and go back one.
+ stack_.pop_back();
+ }
+ }
+
+ return false;
+}
+
+int WordIterator::FoundLeaf(const NodeReader& reader, char cur_char,
+ char* output_buffer, size_t output_len,
+ int affix_ids[BDict::MAX_AFFIXES_PER_WORD]) {
+ // Remember that the first item in the stack is the root and so doesn't count.
+ int i;
+ for (i = 0; i < static_cast<int>(stack_.size()) - 1 && i < static_cast<int>(output_len) - 1; i++)
+ output_buffer[i] = stack_[i + 1].addition;
+ output_buffer[i++] = cur_char; // The one we just found.
+
+ // Possibly add any extra parts.
+ size_t additional_string_length = 0;
+ const char* additional = reinterpret_cast<const char*>(
+ reader.additional_string_for_leaf());
+ for (; i < static_cast<int>(output_len) - 1 && additional &&
+ additional[additional_string_length] != 0;
+ i++, additional_string_length++)
+ output_buffer[i] = additional[additional_string_length];
+ if (additional_string_length)
+ additional_string_length++; // Account for the null terminator.
+ output_buffer[i] = 0;
+
+ return reader.FillAffixesForLeafMatch(additional_string_length,
+ affix_ids);
+}
+
+// LineIterator ----------------------------------------------------------------
+
+LineIterator::LineIterator(
+ const unsigned char* bdict_data,
+ size_t bdict_length,
+ size_t first_offset)
+ : bdict_data_(bdict_data),
+ bdict_length_(bdict_length),
+ cur_offset_(first_offset) {
+}
+
+// Returns true when all data has been read. We're done when we reach a
+// double-NULL or a the end of the input (shouldn't happen).
+bool LineIterator::IsDone() const {
+ return cur_offset_ >= bdict_length_ || bdict_data_[cur_offset_] == 0;
+}
+
+const char* LineIterator::Advance() {
+ if (IsDone())
+ return NULL;
+
+ const char* begin = reinterpret_cast<const char*>(&bdict_data_[cur_offset_]);
+
+ // Advance over this word to find the end.
+ while (cur_offset_ < bdict_length_ && bdict_data_[cur_offset_])
+ cur_offset_++;
+ cur_offset_++; // Advance over the NULL terminator.
+
+ return begin;
+}
+
+bool LineIterator::AdvanceAndCopy(char* buf, size_t buf_len) {
+ if (IsDone())
+ return false;
+
+ const char* begin = reinterpret_cast<const char*>(&bdict_data_[cur_offset_]);
+
+ // Advance over this word to find the end.
+ size_t i;
+ for (i = 0;
+ i < buf_len && cur_offset_ < bdict_length_ && bdict_data_[cur_offset_];
+ i++, cur_offset_++) {
+ buf[i] = bdict_data_[cur_offset_];
+ }
+ // Handle the NULL terminator.
+ cur_offset_++; // Consume in the input
+ if (i < buf_len)
+ buf[i] = 0; // Save in the output.
+ else
+ buf[buf_len - 1] = 0; // Overflow, make sure it's terminated.
+
+ return !!buf[0];
+}
+
+// ReplacementIterator ---------------------------------------------------------
+
+// Fills pointers to NULL terminated strings into the given output params.
+// Returns false if there are no more pairs and nothing was filled in.
+bool ReplacementIterator::GetNext(const char** first, const char** second) {
+ if (IsDone())
+ return false;
+ *first = Advance();
+ *second = Advance();
+ return *first && *second;
+}
+
+// BDictReader -----------------------------------------------------------------
+
+BDictReader::BDictReader()
+ : bdict_data_(NULL),
+ bdict_length_(0),
+ header_(NULL) {
+}
+
+bool BDictReader::Init(const unsigned char* bdict_data, size_t bdict_length) {
+ if (bdict_length < sizeof(BDict::Header))
+ return false;
+
+ // Check header.
+ header_ = reinterpret_cast<const BDict::Header*>(bdict_data);
+ if (header_->signature != BDict::SIGNATURE ||
+ header_->major_version != 1 ||
+ header_->aff_offset > bdict_length ||
+ header_->dic_offset > bdict_length)
+ return false;
+
+ // Get the affix header, make sure there is enough room for it.
+ if (header_->aff_offset + sizeof(BDict::AffHeader) > bdict_length)
+ return false;
+ aff_header_ = reinterpret_cast<const BDict::AffHeader*>(
+ &bdict_data[header_->aff_offset]);
+
+ // Make sure there is enough room for the affix group count dword.
+ if (aff_header_->affix_group_offset + sizeof(uint32) > bdict_length)
+ return false;
+
+ // Don't set these until the end. This way, NULL bdict_data_ will indicate
+ // failure.
+ bdict_data_ = bdict_data;
+ bdict_length_ = bdict_length;
+ return true;
+}
+
+int BDictReader::FindWord(
+ const char* word,
+ int affix_indices[BDict::MAX_AFFIXES_PER_WORD]) const {
+ if (!bdict_data_ ||
+ header_->dic_offset > bdict_length_) {
+ // When the dictionary is corrupt, we return 0 which means the word is valid
+ // and has no rules. This means when there is some problem, we'll default
+ // to no spellchecking rather than marking everything as misspelled.
+ return 0;
+ }
+ NodeReader reader(bdict_data_, bdict_length_, header_->dic_offset, 0);
+ return reader.FindWord(reinterpret_cast<const unsigned char*>(word),
+ affix_indices);
+}
+
+LineIterator BDictReader::GetAfLineIterator() const {
+ if (!bdict_data_ ||
+ aff_header_->affix_group_offset == 0 ||
+ aff_header_->affix_group_offset >= bdict_length_)
+ return LineIterator(bdict_data_, 0, 0); // Item is empty or invalid.
+ return LineIterator(bdict_data_, bdict_length_,
+ aff_header_->affix_group_offset);
+}
+
+LineIterator BDictReader::GetAffixLineIterator() const {
+ if (!bdict_data_ ||
+ aff_header_->affix_rule_offset == 0 ||
+ aff_header_->affix_rule_offset >= bdict_length_)
+ return LineIterator(bdict_data_, 0, 0); // Item is empty or invalid.
+ return LineIterator(bdict_data_, bdict_length_,
+ aff_header_->affix_rule_offset);
+}
+
+LineIterator BDictReader::GetOtherLineIterator() const {
+ if (!bdict_data_ ||
+ aff_header_->other_offset == 0 ||
+ aff_header_->other_offset >= bdict_length_)
+ return LineIterator(bdict_data_, 0, 0); // Item is empty or invalid.
+ return LineIterator(bdict_data_, bdict_length_,
+ aff_header_->other_offset);
+}
+
+ReplacementIterator BDictReader::GetReplacementIterator() const {
+ return ReplacementIterator(bdict_data_, bdict_length_,
+ aff_header_->rep_offset);
+}
+
+
+WordIterator BDictReader::GetAllWordIterator() const {
+ NodeReader reader(bdict_data_, bdict_length_, header_->dic_offset, 0);
+ return WordIterator(reader);
+}
+
+} // namespace hunspell \ No newline at end of file
diff --git a/chrome/third_party/hunspell/google/bdict_reader.h b/chrome/third_party/hunspell/google/bdict_reader.h
new file mode 100644
index 0000000..470b4ab
--- /dev/null
+++ b/chrome/third_party/hunspell/google/bdict_reader.h
@@ -0,0 +1,151 @@
+// Copyright 2008 Google Inc. All Rights Reserved.
+
+#ifndef CHROME_THIRD_PARTY_HUNSPELL_GOOGLE_DIC_READER_H__
+#define CHROME_THIRD_PARTY_HUNSPELL_GOOGLE_DIC_READER_H__
+
+#include <string>
+#include <vector>
+
+#include "base/basictypes.h"
+#include "chrome/third_party/hunspell/google/bdict.h"
+
+namespace hunspell {
+
+class BDictReader;
+class NodeReader;
+
+// Iterators -------------------------------------------------------------------
+
+// Iterates through all words in the dictionary. It will fill the word into
+// a caller-specified buffer.
+class WordIterator {
+ public:
+ WordIterator(const WordIterator& other);
+ ~WordIterator();
+
+ // This must be explicitly declared and implemneted in the .cc file so it will
+ // compile without knowing the size of NodeInfo.
+ WordIterator& operator=(const WordIterator&);
+
+ // Fills the buffer with the next word and the affixes for it into the given
+ // array. Returns the number of affixes. A return value of 0 means there are
+ // no more words.
+ int Advance(char* output_buffer, size_t output_len,
+ int affix_ids[BDict::MAX_AFFIXES_PER_WORD]);
+
+ private:
+ friend class BDictReader;
+ struct NodeInfo;
+
+ WordIterator(const NodeReader& reader);
+
+ // Called by Advance when a leaf is found to generate the word, affix list,
+ // and return value.
+ int FoundLeaf(const NodeReader& node, char cur_char,
+ char* output_buffer, size_t output_len,
+ int affix_ids[BDict::MAX_AFFIXES_PER_WORD]);
+
+ std::vector<NodeInfo> stack_;
+};
+
+// Will iterate over a list of lines separated by NULLs.
+class LineIterator {
+ public:
+ // Returns the next word in the sequence or NULL if there are no mode.
+ const char* Advance();
+
+ // Advances to the next word in the sequence and copies it into the given
+ // buffer, of the given length. If it doesn't fit, it will be truncated.
+ // Returns true on success.
+ bool AdvanceAndCopy(char* buf, size_t buf_len);
+
+ // Returns true when all data has been read. We're done when we reach a
+ // double-NULL or a the end of the input (shouldn't happen).
+ bool IsDone() const;
+
+ protected:
+ friend class BDictReader;
+
+ LineIterator(const unsigned char* bdict_data, size_t bdict_length,
+ size_t first_offset);
+
+ const unsigned char* bdict_data_;
+ size_t bdict_length_;
+
+ // Current offset within bdict_data of the next string to read.
+ size_t cur_offset_;
+};
+
+// Created by GetReplacementIterator to iterate over all replacement pairs.
+class ReplacementIterator : public LineIterator {
+ public:
+ // Fills pointers to NULL terminated strings into the given output params.
+ // Returns false if there are no more pairs and nothing was filled in.
+ bool GetNext(const char** first, const char** second);
+
+ private:
+ friend class BDictReader;
+
+ ReplacementIterator(const unsigned char* bdict_data, size_t bdict_length,
+ size_t first_offset)
+ : LineIterator(bdict_data, bdict_length, first_offset) {
+ }
+};
+
+// Reads a BDict file mapped into memory.
+class BDictReader {
+ public:
+ // You must call Init and it must succeed before calling any other functions.
+ BDictReader();
+
+ // Initializes the reader with the given data. The data does not transfer
+ // ownership, and the caller must keep it valid until the reader is destroyed.
+ // Returns true on success.
+ bool Init(const unsigned char* bdic_data, size_t bdic_length);
+
+ // Returns true if Init() succeeded and other functions can be called.
+ bool IsValid() const { return !!bdict_data_; }
+
+ // Locates the given word in the dictionary. There may be multiple matches if
+ // the word is listed multiple times in the dictionary with different affix
+ // rules.
+ //
+ // The number of matches is returned, and that number of corresponding affix
+ // group IDs are filled into |*affix_indices|. These IDs may be 0 to indicate
+ // there is no affix for that particular match. A return valuf of 0 means that
+ // there are no matches.
+ int FindWord(const char* word,
+ int affix_indices[BDict::MAX_AFFIXES_PER_WORD]) const;
+
+ // Returns an iterator that will go over all AF lines ("affix groups").
+ LineIterator GetAfLineIterator() const;
+
+ // Returns an iterator that will go over all SFX/PFX lines ("affix rules").
+ LineIterator GetAffixLineIterator() const;
+
+ // Returns an iterator that will go over all "other" lines.
+ LineIterator GetOtherLineIterator() const;
+
+ // Returns an iterator that can be used to iterate all replacements.
+ ReplacementIterator GetReplacementIterator() const;
+
+ // Used for testing, returns an iterator for all words in the dictionary.
+ WordIterator GetAllWordIterator() const;
+
+ private:
+ // Non-NULL indicates Init succeeded.
+ const unsigned char* bdict_data_;
+ size_t bdict_length_;
+
+ // Pointer not owned by this class. It will point into the data. It will be
+ // NULL if the data is invalid.
+ const BDict::Header* header_;
+
+ const BDict::AffHeader* aff_header_;
+
+ DISALLOW_EVIL_CONSTRUCTORS(BDictReader);
+};
+
+} // namespace hunspell
+
+#endif // CHROME_THIRD_PARTY_HUNSPELL_GOOGLE_DIC_READER_H__
diff --git a/chrome/third_party/hunspell/google/bdict_writer.cc b/chrome/third_party/hunspell/google/bdict_writer.cc
new file mode 100644
index 0000000..e77dc2d
--- /dev/null
+++ b/chrome/third_party/hunspell/google/bdict_writer.cc
@@ -0,0 +1,496 @@
+// Copyright 2008 Google Inc. All Rights Reserved.
+
+#include "chrome/third_party/hunspell/google/bdict_writer.h"
+
+#include "base/logging.h"
+#include "base/string_util.h"
+#include "chrome/third_party/hunspell/google/bdict.h"
+
+namespace hunspell {
+
+// Represents one node the word trie in memory. This does not have to be very
+// efficient since it is only used when building.
+class DicNode {
+ public:
+ enum StorageType {
+ UNDEFINED, // Uninitialized storage type.
+ LEAF, // Word with no additional string data.
+ LEAFMORE, // Word with additional suffix following.
+ LIST16, // List of sub-nodes with 16-bit relative offsets.
+ LIST8, // List of sub-nodes with 8-bit relative offsets.
+ LOOKUP32, // Lookup table with 32-bit absolute offsets.
+ LOOKUP16, // LOokup table with 16-bit relative offsets.
+ };
+
+ DicNode() : addition(0), storage(UNDEFINED) {
+ }
+
+ ~DicNode() {
+ for (size_t i = 0; i < children.size(); i++)
+ delete children[i];
+ }
+
+ bool is_leaf() const { return children.empty(); }
+
+ // When non-zero, this character is the additional level that this
+ // node represents. This will be 0 for some leaf nodes when there is no
+ // addition and for the root node.
+ char addition;
+
+ std::vector<DicNode*> children;
+
+ // When there are no children, this is a leaf node and this "addition string"
+ // is appended to the result. When there are children, this will be empty.
+ std::string leaf_addition;
+
+ // For leaf nodes, this are the indices into the affix table.
+ std::vector<int> affix_indices;
+
+ // Initially uninitialized, ComputeStorage() will fill this in with the
+ // desired serialization method.
+ StorageType storage;
+};
+
+namespace {
+
+void SerializeTrie(const DicNode* node, std::string* output);
+
+// Returns true if the nth character in the given word is |ch|. Will return
+// false when there is no nth character. Note that this will also match an
+// implicit NULL at the end of the string.
+bool NthCharacterIs(const std::string& word, size_t n, char ch) {
+ if (word.length() < n) // Want to allow n == length() to catch the NULL.
+ return false;
+ return word.c_str()[n] == ch; // Use c_str() to get NULL terminator.
+}
+
+// Recursively build the trie data structure for the range in the |words| list
+// in [begin, end). It is assumed that all words in that range will have the
+// same |node_depth - 2| characters at the beginning. This node will key off of
+// the |node_depth - 1| character, with a special case for the root.
+//
+// |prefix_chars| is how deep this node is in the trie (and corresponds to how
+// many letters of the word we will skip). The root level will have
+// |prefix_chars| of 0.
+//
+// The given |node| will be filled with the data. The return value is the
+// index into the |words| vector of the next word to process. It will be
+// equal to |end| when all words have been consumed.
+size_t BuildTrie(const BDictWriter::WordList& words,
+ size_t begin, size_t end,
+ size_t node_depth, DicNode* node) {
+ // Find the prefix that this node represents.
+ const std::string& begin_str = words[begin].first;
+ if (begin_str.length() < node_depth) {
+ // Singleton.
+ node->addition = 0;
+ node->affix_indices = words[begin].second;
+ return begin + 1;
+ }
+
+ // Now find the range of words sharing this prefix.
+ size_t match_count;
+ if (node_depth == 0 && begin == 0) {
+ // Special case the root node.
+ match_count = end - begin;
+ node->addition = 0;
+ } else {
+ match_count = 0;
+ node->addition = begin_str[node_depth - 1];
+ // We know the strings should have [0, node_depth-1) characters at the
+ // beginning already matching, so we only need to check the new one.
+ while (begin + match_count < end &&
+ NthCharacterIs(words[begin + match_count].first,
+ node_depth - 1, node->addition))
+ match_count++;
+ }
+
+ if (match_count == 1) {
+ // Just found a leaf node with no other words sharing its prefix. Save any
+ // remaining characters and we're done.
+ node->affix_indices = words[begin].second;
+ node->leaf_addition = begin_str.substr(node_depth);
+ return begin + 1;
+ }
+
+ // We have a range of words, add them as children of this node.
+ size_t i = begin;
+ while (i < begin + match_count) {
+ DicNode* cur = new DicNode;
+ i = BuildTrie(words, i, begin + match_count, node_depth + 1, cur);
+ node->children.push_back(cur);
+ }
+
+ return begin + match_count;
+}
+
+// Lookup tables are complicated. They can have a magic 0th entry not counted
+// in the table dimensions, and also have indices only for the used sub-range.
+// This function will compute the starting point and size of a lookup table,
+// in addition to whether it should have the magic 0th entry for the given
+// list of child nodes.
+void ComputeLookupStrategyDetails(const std::vector<DicNode*>& children,
+ bool* has_0th_entry,
+ int* first_item,
+ int* list_size) {
+ *has_0th_entry = false;
+ *first_item = 0;
+ *list_size = 0;
+ if (children.empty())
+ return;
+
+ size_t first_offset = 0;
+ if (children[0]->addition == 0) {
+ *has_0th_entry = true;
+ first_offset++;
+ }
+
+ if (children.size() == first_offset)
+ return;
+
+ *first_item = static_cast<unsigned char>(children[first_offset]->addition);
+ unsigned char last_item = children[children.size() - 1]->addition;
+ *list_size = last_item - *first_item + 1;
+}
+
+// Recursively fills in the storage strategy for this node and each of its
+// children. This must be done before actually serializing because the storage
+// mode will depend on the size of the children.
+size_t ComputeTrieStorage(DicNode* node) {
+ if (node->is_leaf()) {
+ // The additional affix list holds affixes when there is more than one. Each
+ // entry is two bytes, plus an additional FFFF terminator.
+ size_t supplimentary_size = 0;
+ if (node->affix_indices.size() > 1 ||
+ node->affix_indices[0] > BDict::LEAF_NODE_MAX_FIRST_AFFIX_ID)
+ supplimentary_size = node->affix_indices.size() * 2;
+
+ if (node->leaf_addition.empty()) {
+ node->storage = DicNode::LEAF;
+ return 2 + supplimentary_size;
+ }
+ node->storage = DicNode::LEAFMORE;
+ // Signature & affix (2) + null for leaf_addition (1) = 3
+ return 3 + node->leaf_addition.size() + supplimentary_size;
+ }
+
+ // Recursively compute the size of the children for non-leaf nodes.
+ size_t child_size = 0;
+ for (size_t i = 0; i < node->children.size(); i++)
+ child_size += ComputeTrieStorage(node->children[i]);
+
+ // Fixed size is only 1 byte which is the ID byte and the count combined.
+ static const int kListHeaderSize = 1;
+
+ // Lists can only store up to 16 items.
+ static const int kListThreshold = 16;
+ if (node->children.size() < kListThreshold && child_size <= 0xFF) {
+ node->storage = DicNode::LIST8;
+ return kListHeaderSize + node->children.size() * 2 + child_size;
+ }
+
+ if (node->children.size() < kListThreshold && child_size <= 0xFFFF) {
+ node->storage = DicNode::LIST16;
+ // Fixed size is one byte plus 3 for each table entry.
+ return kListHeaderSize + node->children.size() * 3 + child_size;
+ }
+
+ static const int kTableHeaderSize = 2; // Type + table size.
+
+ bool has_0th_item;
+ int first_table_item, table_item_count;
+ ComputeLookupStrategyDetails(node->children, &has_0th_item,
+ &first_table_item, &table_item_count);
+ if (child_size + kTableHeaderSize + (has_0th_item ? 2 : 0) +
+ table_item_count * 2 < 0xFFFF) {
+ // Use 16-bit addressing since the children will fit.
+ node->storage = DicNode::LOOKUP16;
+ return kTableHeaderSize + (has_0th_item ? 2 : 0) + table_item_count * 2 +
+ child_size;
+ }
+
+ // Use 32-bit addressing as a last resort.
+ node->storage = DicNode::LOOKUP32;
+ return kTableHeaderSize + (has_0th_item ? 4 : 0) + table_item_count * 4 +
+ child_size;
+}
+
+// Serializes the given node when it is DicNode::LEAF* to the output.
+void SerializeLeaf(const DicNode* node, std::string* output) {
+ // The low 6 bits of the ID byte are the high 6 bits of the first affix ID.
+ int first_affix = node->affix_indices.size() ? node->affix_indices[0] : 0;
+
+ // We may store the first value with the node or in the supplimentary list.
+ size_t first_affix_in_supplimentary_list = 1;
+ if (first_affix > BDict::LEAF_NODE_MAX_FIRST_AFFIX_ID) {
+ // There are not enough bits for this value, move it to the supplimentary
+ // list where there are more bits per value.
+ first_affix_in_supplimentary_list = 0;
+ first_affix = BDict::FIRST_AFFIX_IS_UNUSED;
+ }
+
+ unsigned char id_byte = (first_affix >> 8) &
+ BDict::LEAF_NODE_FIRST_BYTE_AFFIX_MASK;
+
+ // The next two bits indicates an additional string and more affixes.
+ if (node->storage == DicNode::LEAFMORE)
+ id_byte |= BDict::LEAF_NODE_ADDITIONAL_VALUE;
+ if (node->affix_indices.size() > 1 || first_affix_in_supplimentary_list == 0)
+ id_byte |= BDict::LEAF_NODE_FOLLOWING_VALUE;
+ output->push_back(id_byte);
+
+ // Following is the low 8 bits of the affix index.
+ output->push_back(first_affix & 0xff);
+
+ // Handle the optional addition with NULL terminator.
+ if (node->storage == DicNode::LEAFMORE) {
+ for (size_t i = 0; i < node->leaf_addition.size() + 1; i++)
+ output->push_back(node->leaf_addition.c_str()[i]);
+ }
+
+ // Handle any following affixes. We already wrote the 0th one.
+ if (node->affix_indices.size() > first_affix_in_supplimentary_list) {
+ for (size_t i = first_affix_in_supplimentary_list;
+ i < node->affix_indices.size() && i < BDict::MAX_AFFIXES_PER_WORD;
+ i++) {
+ output->push_back(static_cast<char>(node->affix_indices[i] & 0xFF));
+ output->push_back(
+ static_cast<char>((node->affix_indices[i] >> 8) & 0xFF));
+ }
+
+ // Terminator for affix list. We use 0xFFFF.
+ output->push_back(static_cast<unsigned char>(0xFF));
+ output->push_back(static_cast<unsigned char>(0xFF));
+ }
+}
+
+// Serializes the given node when it is DicNode::LIST* to the output.
+void SerializeList(const DicNode* node, std::string* output) {
+ bool is_8_bit = node->storage == DicNode::LIST8;
+ unsigned char id_byte = BDict::LIST_NODE_TYPE_VALUE |
+ (is_8_bit ? 0 : BDict::LIST_NODE_16BIT_VALUE);
+ id_byte |= node->children.size(); // We assume the size is < 4 bits.
+ output->push_back(id_byte);
+
+ // Reserve enough room for the lookup table (either 2 or 3 bytes per entry).
+ int bytes_per_entry = (is_8_bit ? 2 : 3);
+ size_t table_begin = output->size();
+ output->resize(output->size() + node->children.size() * bytes_per_entry);
+ size_t children_begin = output->size();
+
+ for (size_t i = 0; i < node->children.size(); i++) {
+ // First is the character this entry represents.
+ (*output)[table_begin + i * bytes_per_entry] = node->children[i]->addition;
+
+ // Next is the 8- or 16-bit offset.
+ size_t offset = output->size() - children_begin;
+ if (is_8_bit) {
+ DCHECK(offset <= 0xFF);
+ (*output)[table_begin + i * bytes_per_entry + 1] =
+ static_cast<char>(offset & 0xFF);
+ } else {
+ unsigned short* output16 = reinterpret_cast<unsigned short*>(
+ &(*output)[table_begin + i * bytes_per_entry + 1]);
+ *output16 = static_cast<unsigned short>(offset);
+ }
+
+ // Now append the children's data.
+ SerializeTrie(node->children[i], output);
+ }
+}
+
+// Serializes the given node when it is DicNode::LOOKUP* to the output.
+void SerializeLookup(const DicNode* node, std::string* output) {
+ unsigned char id_byte = BDict::LOOKUP_NODE_TYPE_VALUE;
+
+ bool has_0th_item;
+ int first_table_item, table_item_count;
+ ComputeLookupStrategyDetails(node->children, &has_0th_item,
+ &first_table_item, &table_item_count);
+
+ // Set the extra bits in the ID byte.
+ bool is_32_bit = (node->storage == DicNode::LOOKUP32);
+ if (is_32_bit)
+ id_byte |= BDict::LOOKUP_NODE_32BIT_VALUE;
+ if (has_0th_item)
+ id_byte |= BDict::LOOKUP_NODE_0TH_VALUE;
+
+ size_t begin_offset = output->size();
+
+ output->push_back(id_byte);
+ output->push_back(static_cast<char>(first_table_item));
+ output->push_back(static_cast<char>(table_item_count));
+
+ // Save room for the lookup table and the optional 0th item.
+ int bytes_per_entry = (is_32_bit ? 4 : 2);
+ size_t zeroth_item_offset = output->size();
+ if (has_0th_item)
+ output->resize(output->size() + bytes_per_entry);
+ size_t table_begin = output->size();
+ output->resize(output->size() + table_item_count * bytes_per_entry);
+
+ // Append the children.
+ for (size_t i = 0; i < node->children.size(); i++) {
+ size_t offset = output->size();
+
+ // Compute the location at which we'll store the offset of the child data.
+ // We may be writing the magic 0th item.
+ size_t offset_offset;
+ if (i == 0 && has_0th_item) {
+ offset_offset = zeroth_item_offset;
+ } else {
+ int table_index = static_cast<unsigned char>(node->children[i]->addition) - first_table_item;
+ offset_offset = table_begin + table_index * bytes_per_entry;
+ }
+
+ // Write the offset.
+ if (is_32_bit) {
+ // Use 32-bit absolute offsets.
+ // FIXME(brettw) use bit cast.
+ unsigned* offset32 = reinterpret_cast<unsigned*>(&(*output)[offset_offset]);
+ *offset32 = static_cast<unsigned>(output->size());
+ } else {
+ // Use 16-bit relative offsets.
+ unsigned short* offset16 = reinterpret_cast<unsigned short*>(&(*output)[offset_offset]);
+ *offset16 = static_cast<unsigned short>(output->size() - begin_offset);
+ }
+
+ SerializeTrie(node->children[i], output);
+ }
+}
+
+// Recursively serializes this node and all of its children to the output.
+void SerializeTrie(const DicNode* node, std::string* output) {
+ if (node->storage == DicNode::LEAF ||
+ node->storage == DicNode::LEAFMORE) {
+ SerializeLeaf(node, output);
+ } else if (node->storage == DicNode::LIST8 ||
+ node->storage == DicNode::LIST16) {
+ SerializeList(node, output);
+ } else if (node->storage == DicNode::LOOKUP16 ||
+ node->storage == DicNode::LOOKUP32) {
+ SerializeLookup(node, output);
+ }
+}
+/*
+void SerializeStringList(const std::vector<std::string>& list,
+ std::string* output) {
+ for (size_t i = 0; i < list.size(); i++) {
+ if (i != 0)
+ output->push_back('\n');
+ output->append(list[i]);
+ }
+ output->push_back(0);
+}
+*/
+
+// Appends the given uint32 to the given string.
+void AppendUint32(uint32 a, std::string* output) {
+ size_t offset = output->size();
+ output->resize(offset + 4);
+ memcpy(&(*output)[offset], &a, sizeof(uint32));
+}
+
+// Serializes the given list of strings with 0 bytes separating them. The end
+// will be marked by a double-0.
+void SerializeStringListNullTerm(const std::vector<std::string>& strings,
+ std::string* output) {
+ for (size_t i = 0; i < strings.size(); i++) {
+ // Can't tolerate empty strings since the'll mark the end.
+ if (strings[i].empty())
+ output->push_back(' ');
+ else
+ output->append(strings[i]);
+ output->push_back(0);
+ }
+ output->push_back(0);
+}
+
+void SerializeReplacements(
+ const std::vector< std::pair<std::string, std::string> >& repl,
+ std::string* output) {
+ for (size_t i = 0; i < repl.size(); i++) {
+ output->append(repl[i].first);
+ output->push_back(0);
+ output->append(repl[i].second);
+ output->push_back(0);
+ }
+ output->push_back(0);
+}
+
+} // namespace
+
+BDictWriter::BDictWriter() : trie_root_(NULL) {
+}
+
+BDictWriter::~BDictWriter() {
+ delete trie_root_;
+}
+
+void BDictWriter::SetWords(const WordList& words) {
+ trie_root_ = new DicNode;
+ BuildTrie(words, 0, words.size(), 0, trie_root_);
+}
+
+std::string BDictWriter::GetBDict() const {
+ std::string ret;
+
+ // Save room for the header. This will be populated at the end.
+ ret.resize(sizeof(hunspell::BDict::Header));
+
+ // Serialize the affix portion.
+ size_t aff_offset = ret.size();
+ SerializeAff(&ret);
+
+ // Serialize the dictionary words.
+ size_t dic_offset = ret.size();
+ ret.reserve(ret.size() + ComputeTrieStorage(trie_root_));
+ SerializeTrie(trie_root_, &ret);
+
+ // Fill the header last, now that we have the data.
+ hunspell::BDict::Header* header =
+ reinterpret_cast<hunspell::BDict::Header*>(&ret[0]);
+ header->signature = hunspell::BDict::SIGNATURE;
+ header->major_version = 1;
+ header->minor_version = 0;
+ header->aff_offset = static_cast<uint32>(aff_offset);
+ header->dic_offset = static_cast<uint32>(dic_offset);
+
+ return ret;
+}
+
+void BDictWriter::SerializeAff(std::string* output) const {
+ // Reserve enough room for the header.
+ size_t header_offset = output->size();
+ output->resize(output->size() + sizeof(hunspell::BDict::AffHeader));
+
+ // Write the comment.
+ output->push_back('\n');
+ output->append(comment_);
+ output->push_back('\n');
+
+ // We need a magic first AF line that lists the number of following ones.
+ size_t affix_group_offset = output->size();
+ output->append(StringPrintf("AF %d", affix_groups_.size()));
+ output->push_back(0);
+ SerializeStringListNullTerm(affix_groups_, output);
+
+ size_t affix_rule_offset = output->size();
+ SerializeStringListNullTerm(affix_rules_, output);
+
+ size_t rep_offset = output->size();
+ SerializeReplacements(replacements_, output);
+
+ size_t other_offset = output->size();
+ SerializeStringListNullTerm(other_commands_, output);
+
+ // Add the header now that we know the offsets.
+ hunspell::BDict::AffHeader* header =
+ reinterpret_cast<hunspell::BDict::AffHeader*>(&(*output)[header_offset]);
+ header->affix_group_offset = static_cast<uint32>(affix_group_offset);
+ header->affix_rule_offset = static_cast<uint32>(affix_rule_offset);
+ header->rep_offset = static_cast<uint32>(rep_offset);
+ header->other_offset = static_cast<uint32>(other_offset);
+}
+
+} // namespace hunspell \ No newline at end of file
diff --git a/chrome/third_party/hunspell/google/bdict_writer.h b/chrome/third_party/hunspell/google/bdict_writer.h
new file mode 100644
index 0000000..9b2af7a
--- /dev/null
+++ b/chrome/third_party/hunspell/google/bdict_writer.h
@@ -0,0 +1,68 @@
+// Copyright 2008 Google Inc. All Rights Reserved.
+
+#ifndef CHROME_THIRD_PARTY_HUNSPELL_GOOGLE_BDICT_WRITER_H__
+#define CHROME_THIRD_PARTY_HUNSPELL_GOOGLE_BDICT_WRITER_H__
+
+#include <string>
+#include <vector>
+
+#include "base/basictypes.h"
+
+namespace hunspell {
+
+class DicNode;
+
+// Class for creating a binary dictionary file from data read from Hunspell
+// spellchecker files.
+class BDictWriter {
+ public:
+ typedef std::vector< std::pair<std::string, std::vector<int> > > WordList;
+
+ BDictWriter();
+ ~BDictWriter();
+
+ // Affix setters.
+ void SetComment(const std::string& comment) {
+ comment_ = comment;
+ }
+ void SetAffixRules(const std::vector<std::string>& rules) {
+ affix_rules_ = rules;
+ }
+ void SetAffixGroups(const std::vector<std::string>& groups) {
+ affix_groups_ = groups;
+ }
+ void SetReplacements(
+ const std::vector< std::pair<std::string, std::string> >& replacements) {
+ replacements_ = replacements;
+ }
+ void SetOtherCommands(const std::vector<std::string>& commands) {
+ other_commands_ = commands;
+ }
+
+ // The words must be sorted already.
+ void SetWords(const WordList& words);
+
+ // Returns the serialized data for the entire file. You must call all the
+ // setters above before this.
+ std::string GetBDict() const;
+
+ private:
+ // Converts the affix members to a string.
+ void SerializeAff(std::string* output) const;
+
+ // Affix members.
+ std::string comment_;
+ std::vector<std::string> affix_rules_;
+ std::vector<std::string> affix_groups_;
+ std::vector< std::pair<std::string, std::string> > replacements_;
+ std::vector<std::string> other_commands_;
+
+ // Root of the generated trie. Filled by SetWords.
+ DicNode* trie_root_;
+
+ DISALLOW_EVIL_CONSTRUCTORS(BDictWriter);
+};
+
+} // namespace hunspell
+
+#endif // CHROME_THIRD_PARTY_HUNSPELL_GOOGLE_BDICT_WRITER_H__
diff --git a/chrome/third_party/hunspell/google/hunspell_tests.cc b/chrome/third_party/hunspell/google/hunspell_tests.cc
new file mode 100644
index 0000000..b9775e0
--- /dev/null
+++ b/chrome/third_party/hunspell/google/hunspell_tests.cc
@@ -0,0 +1,214 @@
+// Copyright 2008 Google Inc. All Rights Reserved.
+
+#include <string>
+#include <vector>
+
+#include "base/path_service.h"
+#include "base/file_util.h"
+#include "base/string_util.h"
+#include "chrome/third_party/hunspell/google/bdict_reader.h"
+#include "chrome/third_party/hunspell/google/bdict_writer.h"
+#include "chrome/third_party/hunspell/src/hunspell/hunspell.hxx"
+#include "chrome/tools/convert_dict/aff_reader.h"
+#include "chrome/tools/convert_dict/dic_reader.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+// Note that this test can be run using Hunspell without our modifications so
+// it can be compared to with. It keys off of HUNSPELL_CHROME_CLIENT just like
+// the Hunspell library does.
+
+namespace {
+
+class HunspellTest : public testing::Test {
+ public:
+
+ void RunTest(const char* test_base_name) const;
+
+ private:
+ void SetUp() {
+ PathService::Get(base::DIR_SOURCE_ROOT, &test_dir_);
+ file_util::AppendToPath(&test_dir_, L"chrome");
+ file_util::AppendToPath(&test_dir_, L"third_party");
+ file_util::AppendToPath(&test_dir_, L"hunspell");
+ file_util::AppendToPath(&test_dir_, L"tests");
+ }
+ void TearDown() {
+
+ }
+
+ std::wstring test_dir_;
+};
+
+// Converts all the lines in the given file to separate strings, and returns
+// them in a vector.
+std::vector<std::string> ReadFileLines(const std::wstring& file_name) {
+ std::string file;
+ if (!file_util::ReadFileToString(file_name, &file))
+ return std::vector<std::string>();
+
+ std::vector<std::string> list;
+ SplitString(file, '\n', &list);
+
+ // Erase any empty lines.
+ for (size_t i = 0; i < list.size(); i++) {
+ if (list[i].empty()) {
+ list.erase(list.begin() + i);
+ i--;
+ }
+ }
+ return list;
+}
+
+void HunspellTest::RunTest(const char* test_base_name) const {
+ std::wstring test_base = test_dir_;
+ file_util::AppendToPath(&test_base, UTF8ToWide(test_base_name));
+
+ std::string aff_name = WideToUTF8(test_base) + ".aff";
+ std::string dic_name = WideToUTF8(test_base) + ".dic";
+
+#ifdef HUNSPELL_CHROME_CLIENT
+ // Read the .aff file for the test.
+ convert_dict::AffReader aff_reader(aff_name.c_str());
+ ASSERT_TRUE(aff_reader.Read()) <<
+ "Unable to read " << test_base_name << ".aff";
+
+ // Read the .dic file for the test.
+ convert_dict::DicReader dic_reader(dic_name.c_str());
+ ASSERT_TRUE(dic_reader.Read(&aff_reader)) <<
+ "Unable to read " << test_base_name << ".dic";
+
+ // Set up the writer.
+ hunspell::BDictWriter writer;
+ writer.SetComment(aff_reader.comments());
+ writer.SetAffixRules(aff_reader.affix_rules());
+ writer.SetAffixGroups(aff_reader.GetAffixGroups());
+ writer.SetReplacements(aff_reader.replacements());
+ writer.SetOtherCommands(aff_reader.other_commands());
+
+ // We add a special word "abracadabra" to each dictionary. This is because our
+ // dictionary format can't handle having one word in it (it gets confused when
+ // the root node is also a leaf), and some of the test dictionaries have only
+ // one word.
+ convert_dict::DicReader::WordList word_list = dic_reader.words();
+ std::vector<int> affix_ids;
+ affix_ids.push_back(0);
+ word_list.push_back(std::make_pair("abracadabra", affix_ids));
+ writer.SetWords(word_list);
+
+ // Actually generate the bdic data.
+ std::string serialized = writer.GetBDict();
+ ASSERT_FALSE(serialized.empty());
+
+ // Create a hunspell object to read that data.
+ Hunspell hunspell(reinterpret_cast<const unsigned char*>(serialized.data()),
+ serialized.size());
+#else
+ // Use "regular" Hunspell.
+ FILE *aff_file, *dic_file;
+ fopen_s(&aff_file, aff_name.c_str(), "r");
+ fopen_s(&dic_file, dic_name.c_str(), "r");
+ EXPECT_TRUE(aff_file && dic_file);
+
+ Hunspell hunspell(aff_file, dic_file);
+#endif
+
+ // Read the good words file and check it.
+ std::vector<std::string> good_words = ReadFileLines(test_base + L".good");
+ for (size_t i = 0; i < good_words.size(); i++) {
+#ifdef HUNSPELL_CHROME_CLIENT
+ std::string cur_word;
+ EXPECT_TRUE(aff_reader.EncodingToUTF8(good_words[i], &cur_word));
+#else
+ std::string cur_word = good_words[i];
+#endif
+ EXPECT_TRUE(hunspell.spell(cur_word.c_str())) <<
+ "On test \"" << test_base_name << "\" the good word \"" <<
+ good_words[i] << "\" was reported as spelled incorrectly.";
+ }
+
+ // Read the wrong words file and check it.
+ std::vector<std::string> wrong_words = ReadFileLines(test_base + L".wrong");
+ for (size_t i = 0; i < wrong_words.size(); i++) {
+#ifdef HUNSPELL_CHROME_CLIENT
+ std::string cur_word;
+ EXPECT_TRUE(aff_reader.EncodingToUTF8(wrong_words[i], &cur_word));
+#else
+ std::string cur_word = wrong_words[i];
+#endif
+ EXPECT_FALSE(hunspell.spell(cur_word.c_str())) <<
+ "On test \"" << test_base_name << "\" the wrong word \"" <<
+ cur_word << "\" was reported as spelled correctly.";
+ }
+}
+
+} // namespace
+
+TEST_F(HunspellTest, All) {
+ RunTest("1592880");
+ RunTest("affixes");
+ RunTest("alias");
+ RunTest("alias2");
+ //RunTest("alias3"); // Uses COMPLEXPREFIXES which we don't support.
+ RunTest("base");
+ RunTest("break");
+ //RunTest("checkcompoundcase"); // This one fails for some reason even
+ // without our modifications.
+ RunTest("checkcompoundcase2");
+ RunTest("checkcompoundcaseutf");
+ RunTest("checkcompounddup");
+ RunTest("checkcompoundpattern");
+ RunTest("checkcompoundrep");
+ RunTest("checkcompoundtriple");
+ RunTest("checksharps");
+ RunTest("checksharpsutf");
+ RunTest("circumfix");
+ //RunTest("complexprefixes");
+ //RunTest("complexprefixes2");
+ //RunTest("complexprefixesutf");
+ RunTest("compoundaffix");
+ RunTest("compoundaffix2");
+ RunTest("compoundaffix3");
+ RunTest("compoundflag");
+ RunTest("compoundrule");
+ RunTest("compoundrule2");
+ RunTest("compoundrule3");
+ RunTest("compoundrule4");
+ RunTest("compoundrule5");
+ RunTest("compoundrule6");
+ RunTest("conditionalprefix");
+ RunTest("flag");
+ RunTest("flaglong");
+ RunTest("flagnum");
+ RunTest("flagutf8");
+ RunTest("fogemorpheme");
+ RunTest("forbiddenword");
+ RunTest("germancompounding");
+ RunTest("germancompoundingold");
+ RunTest("i35725");
+ RunTest("i53643");
+ RunTest("i54633");
+ RunTest("i54980");
+ RunTest("i58202");
+ //RunTest("ignore"); // We don't support the "IGNORE" command.
+ //RunTest("ignoreutf");
+ RunTest("keepcase");
+ RunTest("map");
+ RunTest("maputf");
+ RunTest("needaffix");
+ RunTest("needaffix2");
+ RunTest("needaffix3");
+ RunTest("needaffix4");
+ RunTest("needaffix5");
+ RunTest("nosuggest");
+ RunTest("onlyincompound");
+ RunTest("rep");
+ RunTest("reputf");
+ RunTest("slash");
+ RunTest("sug");
+ RunTest("utf8");
+ RunTest("utf8_bom");
+ RunTest("utf8_bom2");
+ RunTest("utf8_nonbmp");
+ RunTest("utfcompound");
+ RunTest("zeroaffix");
+} \ No newline at end of file
diff --git a/chrome/third_party/hunspell/hunspell.vcproj b/chrome/third_party/hunspell/hunspell.vcproj
new file mode 100644
index 0000000..609ab31
--- /dev/null
+++ b/chrome/third_party/hunspell/hunspell.vcproj
@@ -0,0 +1,260 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="hunspell"
+ ProjectGUID="{D5E8DCB2-9C61-446F-8BEE-B18CA0E0936E}"
+ RootNamespace="hunspell"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ <ToolFile
+ RelativePath=".\copy_dictionary_files.rules"
+ />
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ ConfigurationType="4"
+ InheritedPropertySheets="$(SolutionDir)..\build\common.vsprops;..\..\..\build\debug.vsprops;$(SolutionDir)..\build\external_code.vsprops;.\hunspell.vsprops;.\using_hunspell.vsprops"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="CopyDictionaries"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLibrarianTool"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ ConfigurationType="4"
+ InheritedPropertySheets="$(SolutionDir)..\build\common.vsprops;..\..\..\build\release.vsprops;$(SolutionDir)..\build\external_code.vsprops;.\hunspell.vsprops;.\using_hunspell.vsprops"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="CopyDictionaries"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLibrarianTool"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="parsers"
+ >
+ <File
+ RelativePath=".\src\parsers\textparser.cxx"
+ >
+ </File>
+ <File
+ RelativePath=".\src\parsers\textparser.hxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="hunspell"
+ >
+ <File
+ RelativePath=".\src\hunspell\affentry.cxx"
+ >
+ </File>
+ <File
+ RelativePath=".\src\hunspell\affentry.hxx"
+ >
+ </File>
+ <File
+ RelativePath=".\src\hunspell\affixmgr.cxx"
+ >
+ </File>
+ <File
+ RelativePath=".\src\hunspell\affixmgr.hxx"
+ >
+ </File>
+ <File
+ RelativePath=".\src\hunspell\atypes.hxx"
+ >
+ </File>
+ <File
+ RelativePath=".\src\hunspell\baseaffix.hxx"
+ >
+ </File>
+ <File
+ RelativePath=".\src\hunspell\csutil.cxx"
+ >
+ </File>
+ <File
+ RelativePath=".\src\hunspell\csutil.hxx"
+ >
+ </File>
+ <File
+ RelativePath=".\src\hunspell\dictmgr.cxx"
+ >
+ </File>
+ <File
+ RelativePath=".\src\hunspell\dictmgr.hxx"
+ >
+ </File>
+ <File
+ RelativePath=".\src\hunspell\hashmgr.cxx"
+ >
+ </File>
+ <File
+ RelativePath=".\src\hunspell\hashmgr.hxx"
+ >
+ </File>
+ <File
+ RelativePath=".\src\hunspell\htypes.hxx"
+ >
+ </File>
+ <File
+ RelativePath=".\src\hunspell\hunspell.cxx"
+ >
+ </File>
+ <File
+ RelativePath=".\src\hunspell\hunspell.h"
+ >
+ </File>
+ <File
+ RelativePath=".\src\hunspell\hunspell.hxx"
+ >
+ </File>
+ <File
+ RelativePath=".\src\hunspell\langnum.hxx"
+ >
+ </File>
+ <File
+ RelativePath=".\src\hunspell\suggestmgr.cxx"
+ >
+ </File>
+ <File
+ RelativePath=".\src\hunspell\suggestmgr.hxx"
+ >
+ </File>
+ <File
+ RelativePath=".\src\hunspell\utf_info.hxx"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Dictionaries"
+ >
+ <File
+ RelativePath=".\dictionaries\en-US.bdic"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="google"
+ >
+ <File
+ RelativePath=".\google\bdict.h"
+ >
+ </File>
+ <File
+ RelativePath=".\google\bdict_affentry.h"
+ >
+ </File>
+ <File
+ RelativePath=".\google\bdict_reader.cc"
+ >
+ </File>
+ <File
+ RelativePath=".\google\bdict_reader.h"
+ >
+ </File>
+ </Filter>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/chrome/third_party/hunspell/hunspell.vsprops b/chrome/third_party/hunspell/hunspell.vsprops
new file mode 100644
index 0000000..0cda214
--- /dev/null
+++ b/chrome/third_party/hunspell/hunspell.vsprops
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioPropertySheet
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="hunspell"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="&quot;$(SolutionDir)..\third_party\icu38\public\common&quot;"
+ PreprocessorDefinitions="W32;OPENOFFICEORG;CHROME_SPELL"
+ />
+</VisualStudioPropertySheet>
diff --git a/chrome/third_party/hunspell/src/hunspell/README b/chrome/third_party/hunspell/src/hunspell/README
new file mode 100644
index 0000000..b452096
--- /dev/null
+++ b/chrome/third_party/hunspell/src/hunspell/README
@@ -0,0 +1,21 @@
+Hunspell spell checker and morphological analyser library
+
+Documentation, tests, examples: http://hunspell.sourceforge.net
+
+Author of Hunspell:
+László Németh (nemethl (at) gyorsposta.hu)
+
+Hunspell based on OpenOffice.org's Myspell. MySpell's author:
+Kevin Hendricks (kevin.hendricks (at) sympatico.ca)
+
+License: GPL 2.0/LGPL 2.1/MPL 1.1 tri-license
+
+The contents of this library may be used under the terms of
+the GNU General Public License Version 2 or later (the "GPL"), or
+the GNU Lesser General Public License Version 2.1 or later (the "LGPL",
+see http://gnu.org/copyleft/lesser.html) or the Mozilla Public License
+Version 1.1 or later (the "MPL", see http://mozilla.org/MPL/MPL-1.1.html).
+
+Software distributed under these licenses is distributed on an "AS IS" basis,
+WITHOUT WARRANTY OF ANY KIND, either express or implied. See the licences
+for the specific language governing rights and limitations under the licenses.
diff --git a/chrome/third_party/hunspell/src/hunspell/affentry.cxx b/chrome/third_party/hunspell/src/hunspell/affentry.cxx
new file mode 100644
index 0000000..2fe6321
--- /dev/null
+++ b/chrome/third_party/hunspell/src/hunspell/affentry.cxx
@@ -0,0 +1,870 @@
+#include "license.hunspell"
+#include "license.myspell"
+
+#ifndef MOZILLA_CLIENT
+#include <cstdlib>
+#include <cstring>
+#include <cctype>
+#include <cstdio>
+#else
+#include <stdlib.h>
+#include <string.h>
+#include <stdio.h>
+#include <ctype.h>
+#endif
+
+#include "affentry.hxx"
+#include "csutil.hxx"
+
+#ifndef MOZILLA_CLIENT
+#ifndef W32
+using namespace std;
+#endif
+#endif
+
+
+PfxEntry::PfxEntry(AffixMgr* pmgr, affentry* dp)
+{
+ // register affix manager
+ pmyMgr = pmgr;
+
+ // set up its intial values
+
+ aflag = dp->aflag; // flag
+ strip = dp->strip; // string to strip
+ appnd = dp->appnd; // string to append
+ stripl = dp->stripl; // length of strip string
+ appndl = dp->appndl; // length of append string
+ numconds = dp->numconds; // number of conditions to match
+ opts = dp->opts; // cross product flag
+ // then copy over all of the conditions
+ memcpy(&conds.base[0],&dp->conds.base[0],SETSIZE*sizeof(conds.base[0]));
+ next = NULL;
+ nextne = NULL;
+ nexteq = NULL;
+#ifdef HUNSPELL_EXPERIMENTAL
+ morphcode = dp->morphcode;
+#endif
+ contclass = dp->contclass;
+ contclasslen = dp->contclasslen;
+}
+
+
+PfxEntry::~PfxEntry()
+{
+ aflag = 0;
+ if (appnd) free(appnd);
+ if (strip) free(strip);
+ pmyMgr = NULL;
+ appnd = NULL;
+ strip = NULL;
+ if (opts & aeUTF8) {
+ for (int i = 0; i < 8; i++) {
+ if (conds.utf8.wchars[i]) free(conds.utf8.wchars[i]);
+ }
+ }
+#ifdef HUNSPELL_EXPERIMENTAL
+ if (morphcode && !(opts & aeALIASM)) free(morphcode);
+#endif
+ if (contclass && !(opts & aeALIASF)) free(contclass);
+}
+
+// add prefix to this word assuming conditions hold
+char * PfxEntry::add(const char * word, int len)
+{
+ char tword[MAXWORDUTF8LEN + 4];
+
+ if ((len > stripl) && (len >= numconds) && test_condition(word) &&
+ (!stripl || (strncmp(word, strip, stripl) == 0)) &&
+ ((MAXWORDUTF8LEN + 4) > (len + appndl - stripl))) {
+ /* we have a match so add prefix */
+ char * pp = tword;
+ if (appndl) {
+ strcpy(tword,appnd);
+ pp += appndl;
+ }
+ strcpy(pp, (word + stripl));
+ return mystrdup(tword);
+ }
+ return NULL;
+}
+
+
+inline int PfxEntry::test_condition(const char * st)
+{
+ int cond;
+ unsigned char * cp = (unsigned char *)st;
+ if (!(opts & aeUTF8)) { // 256-character codepage
+ for (cond = 0; cond < numconds; cond++) {
+ if ((conds.base[*cp++] & (1 << cond)) == 0) return 0;
+ }
+ } else { // UTF-8 encoding
+ unsigned short wc;
+ for (cond = 0; cond < numconds; cond++) {
+ // a simple 7-bit ASCII character in UTF-8
+ if ((*cp >> 7) == 0) {
+ // also check limit (end of word)
+ if ((!*cp) || ((conds.utf8.ascii[*cp++] & (1 << cond)) == 0)) return 0;
+ // UTF-8 multibyte character
+ } else {
+ // not dot wildcard in rule
+ if (!conds.utf8.all[cond]) {
+ if (conds.utf8.neg[cond]) {
+ u8_u16((w_char *) &wc, 1, (char *) cp);
+ if (conds.utf8.wchars[cond] &&
+ flag_bsearch((unsigned short *)conds.utf8.wchars[cond],
+ wc, (short) conds.utf8.wlen[cond])) return 0;
+ } else {
+ if (!conds.utf8.wchars[cond]) return 0;
+ u8_u16((w_char *) &wc, 1, (char *) cp);
+ if (!flag_bsearch((unsigned short *)conds.utf8.wchars[cond],
+ wc, (short)conds.utf8.wlen[cond])) return 0;
+ }
+ }
+ // jump to next UTF-8 character
+ for(cp++; (*cp & 0xc0) == 0x80; cp++);
+ }
+ }
+ }
+ return 1;
+}
+
+
+// check if this prefix entry matches
+struct hentry * PfxEntry::checkword(const char * word, int len, char in_compound, const FLAG needflag)
+{
+ int tmpl; // length of tmpword
+ struct hentry * he; // hash entry of root word or NULL
+ char tmpword[MAXWORDUTF8LEN + 4];
+
+ // on entry prefix is 0 length or already matches the beginning of the word.
+ // So if the remaining root word has positive length
+ // and if there are enough chars in root word and added back strip chars
+ // to meet the number of characters conditions, then test it
+
+ tmpl = len - appndl;
+
+ if ((tmpl > 0) && (tmpl + stripl >= numconds)) {
+
+ // generate new root word by removing prefix and adding
+ // back any characters that would have been stripped
+
+ if (stripl) strcpy (tmpword, strip);
+ strcpy ((tmpword + stripl), (word + appndl));
+
+ // now make sure all of the conditions on characters
+ // are met. Please see the appendix at the end of
+ // this file for more info on exactly what is being
+ // tested
+
+ // if all conditions are met then check if resulting
+ // root word in the dictionary
+
+ if (test_condition(tmpword)) {
+ tmpl += stripl;
+ if ((he = pmyMgr->lookup(tmpword)) != NULL) {
+ do {
+ if (TESTAFF(he->astr, aflag, he->alen) &&
+ // forbid single prefixes with pseudoroot flag
+ ! TESTAFF(contclass, pmyMgr->get_pseudoroot(), contclasslen) &&
+ // needflag
+ ((!needflag) || TESTAFF(he->astr, needflag, he->alen) ||
+ (contclass && TESTAFF(contclass, needflag, contclasslen))))
+ return he;
+ he = he->next_homonym; // check homonyms
+ } while (he);
+ }
+
+ // prefix matched but no root word was found
+ // if aeXPRODUCT is allowed, try again but now
+ // ross checked combined with a suffix
+
+ //if ((opts & aeXPRODUCT) && in_compound) {
+ if ((opts & aeXPRODUCT)) {
+ he = pmyMgr->suffix_check(tmpword, tmpl, aeXPRODUCT, (AffEntry *)this, NULL,
+ 0, NULL, FLAG_NULL, needflag, in_compound);
+ if (he) return he;
+ }
+ }
+ }
+ return NULL;
+}
+
+// check if this prefix entry matches
+struct hentry * PfxEntry::check_twosfx(const char * word, int len,
+ char in_compound, const FLAG needflag)
+{
+ int tmpl; // length of tmpword
+ struct hentry * he; // hash entry of root word or NULL
+ char tmpword[MAXWORDUTF8LEN + 4];
+
+ // on entry prefix is 0 length or already matches the beginning of the word.
+ // So if the remaining root word has positive length
+ // and if there are enough chars in root word and added back strip chars
+ // to meet the number of characters conditions, then test it
+
+ tmpl = len - appndl;
+
+ if ((tmpl > 0) && (tmpl + stripl >= numconds)) {
+
+ // generate new root word by removing prefix and adding
+ // back any characters that would have been stripped
+
+ if (stripl) strcpy (tmpword, strip);
+ strcpy ((tmpword + stripl), (word + appndl));
+
+ // now make sure all of the conditions on characters
+ // are met. Please see the appendix at the end of
+ // this file for more info on exactly what is being
+ // tested
+
+ // if all conditions are met then check if resulting
+ // root word in the dictionary
+
+ if (test_condition(tmpword)) {
+ tmpl += stripl;
+
+ // prefix matched but no root word was found
+ // if aeXPRODUCT is allowed, try again but now
+ // cross checked combined with a suffix
+
+ if ((opts & aeXPRODUCT) && (in_compound != IN_CPD_BEGIN)) {
+ he = pmyMgr->suffix_check_twosfx(tmpword, tmpl, aeXPRODUCT, (AffEntry *)this, needflag);
+ if (he) return he;
+ }
+ }
+ }
+ return NULL;
+}
+
+#ifdef HUNSPELL_EXPERIMENTAL
+// check if this prefix entry matches
+char * PfxEntry::check_twosfx_morph(const char * word, int len,
+ char in_compound, const FLAG needflag)
+{
+ int tmpl; // length of tmpword
+ char tmpword[MAXWORDUTF8LEN + 4];
+
+ // on entry prefix is 0 length or already matches the beginning of the word.
+ // So if the remaining root word has positive length
+ // and if there are enough chars in root word and added back strip chars
+ // to meet the number of characters conditions, then test it
+
+ tmpl = len - appndl;
+
+ if ((tmpl > 0) && (tmpl + stripl >= numconds)) {
+
+ // generate new root word by removing prefix and adding
+ // back any characters that would have been stripped
+
+ if (stripl) strcpy (tmpword, strip);
+ strcpy ((tmpword + stripl), (word + appndl));
+
+ // now make sure all of the conditions on characters
+ // are met. Please see the appendix at the end of
+ // this file for more info on exactly what is being
+ // tested
+
+ // if all conditions are met then check if resulting
+ // root word in the dictionary
+
+ if (test_condition(tmpword)) {
+ tmpl += stripl;
+
+ // prefix matched but no root word was found
+ // if aeXPRODUCT is allowed, try again but now
+ // ross checked combined with a suffix
+
+ if ((opts & aeXPRODUCT) && (in_compound != IN_CPD_BEGIN)) {
+ return pmyMgr->suffix_check_twosfx_morph(tmpword, tmpl,
+ aeXPRODUCT, (AffEntry *)this, needflag);
+ }
+ }
+ }
+ return NULL;
+}
+
+// check if this prefix entry matches
+char * PfxEntry::check_morph(const char * word, int len, char in_compound, const FLAG needflag)
+{
+ int tmpl; // length of tmpword
+ struct hentry * he; // hash entry of root word or NULL
+ char tmpword[MAXWORDUTF8LEN + 4];
+ char result[MAXLNLEN];
+ char * st;
+
+ *result = '\0';
+
+ // on entry prefix is 0 length or already matches the beginning of the word.
+ // So if the remaining root word has positive length
+ // and if there are enough chars in root word and added back strip chars
+ // to meet the number of characters conditions, then test it
+
+ tmpl = len - appndl;
+
+ if ((tmpl > 0) && (tmpl + stripl >= numconds)) {
+
+ // generate new root word by removing prefix and adding
+ // back any characters that would have been stripped
+
+ if (stripl) strcpy (tmpword, strip);
+ strcpy ((tmpword + stripl), (word + appndl));
+
+ // now make sure all of the conditions on characters
+ // are met. Please see the appendix at the end of
+ // this file for more info on exactly what is being
+ // tested
+
+ // if all conditions are met then check if resulting
+ // root word in the dictionary
+
+ if (test_condition(tmpword)) {
+ tmpl += stripl;
+ if ((he = pmyMgr->lookup(tmpword)) != NULL) {
+ do {
+ if (TESTAFF(he->astr, aflag, he->alen) &&
+ // forbid single prefixes with pseudoroot flag
+ ! TESTAFF(contclass, pmyMgr->get_pseudoroot(), contclasslen) &&
+ // needflag
+ ((!needflag) || TESTAFF(he->astr, needflag, he->alen) ||
+ (contclass && TESTAFF(contclass, needflag, contclasslen)))) {
+ if (morphcode) strcat(result, morphcode); else strcat(result,getKey());
+ if (he->description) {
+ if ((*(he->description)=='[')||(*(he->description)=='<')) strcat(result,he->word);
+ strcat(result,he->description);
+ }
+ strcat(result, "\n");
+ }
+ he = he->next_homonym;
+ } while (he);
+ }
+
+ // prefix matched but no root word was found
+ // if aeXPRODUCT is allowed, try again but now
+ // ross checked combined with a suffix
+
+ if ((opts & aeXPRODUCT) && (in_compound != IN_CPD_BEGIN)) {
+ st = pmyMgr->suffix_check_morph(tmpword, tmpl, aeXPRODUCT, (AffEntry *)this,
+ FLAG_NULL, needflag);
+ if (st) {
+ strcat(result, st);
+ free(st);
+ }
+ }
+ }
+ }
+
+ if (*result) return mystrdup(result);
+ return NULL;
+}
+#endif // END OF HUNSPELL_EXPERIMENTAL CODE
+
+SfxEntry::SfxEntry(AffixMgr * pmgr, affentry* dp)
+{
+ // register affix manager
+ pmyMgr = pmgr;
+
+ // set up its intial values
+ aflag = dp->aflag; // char flag
+ strip = dp->strip; // string to strip
+ appnd = dp->appnd; // string to append
+ stripl = dp->stripl; // length of strip string
+ appndl = dp->appndl; // length of append string
+ numconds = dp->numconds; // number of conditions to match
+ opts = dp->opts; // cross product flag
+
+ // then copy over all of the conditions
+ memcpy(&conds.base[0],&dp->conds.base[0],SETSIZE*sizeof(conds.base[0]));
+
+ rappnd = myrevstrdup(appnd);
+
+#ifdef HUNSPELL_EXPERIMENTAL
+ morphcode = dp->morphcode;
+#endif
+ contclass = dp->contclass;
+ contclasslen = dp->contclasslen;
+}
+
+
+SfxEntry::~SfxEntry()
+{
+ aflag = 0;
+ if (appnd) free(appnd);
+ if (rappnd) free(rappnd);
+ if (strip) free(strip);
+ pmyMgr = NULL;
+ appnd = NULL;
+ strip = NULL;
+ if (opts & aeUTF8) {
+ for (int i = 0; i < 8; i++) {
+ if (conds.utf8.wchars[i]) free(conds.utf8.wchars[i]);
+ }
+ }
+#ifdef HUNSPELL_EXPERIMENTAL
+ if (morphcode && !(opts & aeALIASM)) free(morphcode);
+#endif
+ if (contclass && !(opts & aeALIASF)) free(contclass);
+}
+
+// add suffix to this word assuming conditions hold
+char * SfxEntry::add(const char * word, int len)
+{
+ char tword[MAXWORDUTF8LEN + 4];
+
+ /* make sure all conditions match */
+ if ((len > stripl) && (len >= numconds) && test_condition(word + len, word) &&
+ (!stripl || (strcmp(word + len - stripl, strip) == 0)) &&
+ ((MAXWORDUTF8LEN + 4) > (len + appndl - stripl))) {
+ /* we have a match so add suffix */
+ strcpy(tword,word);
+ if (appndl) {
+ strcpy(tword + len - stripl, appnd);
+ } else {
+ *(tword + len - stripl) = '\0';
+ }
+ return mystrdup(tword);
+ }
+ return NULL;
+}
+
+
+inline int SfxEntry::test_condition(const char * st, const char * beg)
+{
+ int cond;
+ unsigned char * cp = (unsigned char *) st;
+ if (!(opts & aeUTF8)) { // 256-character codepage
+ // D\xf6m\xf6lki affix algorithm
+ for (cond = numconds; --cond >= 0; ) {
+ if ((conds.base[*--cp] & (1 << cond)) == 0) return 0;
+ }
+ } else { // UTF-8 encoding
+ unsigned short wc;
+ for (cond = numconds; --cond >= 0; ) {
+ // go to next character position and check limit
+ if ((char *) --cp < beg) return 0;
+ // a simple 7-bit ASCII character in UTF-8
+ if ((*cp >> 7) == 0) {
+ if ((conds.utf8.ascii[*cp] & (1 << cond)) == 0) return 0;
+ // UTF-8 multibyte character
+ } else {
+ // go to first character of UTF-8 multibyte character
+ for (; (*cp & 0xc0) == 0x80; cp--);
+ // not dot wildcard in rule
+ if (!conds.utf8.all[cond]) {
+ if (conds.utf8.neg[cond]) {
+ u8_u16((w_char *) &wc, 1, (char *) cp);
+ if (conds.utf8.wchars[cond] &&
+ flag_bsearch((unsigned short *)conds.utf8.wchars[cond],
+ wc, (short) conds.utf8.wlen[cond])) return 0;
+ } else {
+ if (!conds.utf8.wchars[cond]) return 0;
+ u8_u16((w_char *) &wc, 1, (char *) cp);
+ if (!flag_bsearch((unsigned short *)conds.utf8.wchars[cond],
+ wc, (short)conds.utf8.wlen[cond])) return 0;
+ }
+ }
+ }
+ }
+ }
+ return 1;
+}
+
+
+
+// see if this suffix is present in the word
+struct hentry * SfxEntry::checkword(const char * word, int len, int optflags,
+ AffEntry* ppfx, char ** wlst, int maxSug, int * ns, const FLAG cclass, const FLAG needflag,
+ const FLAG badflag)
+{
+ int tmpl; // length of tmpword
+ struct hentry * he; // hash entry pointer
+ unsigned char * cp;
+ char tmpword[MAXWORDUTF8LEN + 4];
+ PfxEntry* ep = (PfxEntry *) ppfx;
+
+ // if this suffix is being cross checked with a prefix
+ // but it does not support cross products skip it
+
+ if (((optflags & aeXPRODUCT) != 0) && ((opts & aeXPRODUCT) == 0))
+ return NULL;
+
+ // upon entry suffix is 0 length or already matches the end of the word.
+ // So if the remaining root word has positive length
+ // and if there are enough chars in root word and added back strip chars
+ // to meet the number of characters conditions, then test it
+
+ tmpl = len - appndl;
+ // the second condition is not enough for UTF-8 strings
+ // it checked in test_condition()
+
+ if ((tmpl > 0) && (tmpl + stripl >= numconds)) {
+
+ // generate new root word by removing suffix and adding
+ // back any characters that would have been stripped or
+ // or null terminating the shorter string
+
+ strcpy (tmpword, word);
+ cp = (unsigned char *)(tmpword + tmpl);
+ if (stripl) {
+ strcpy ((char *)cp, strip);
+ tmpl += stripl;
+ cp = (unsigned char *)(tmpword + tmpl);
+ } else *cp = '\0';
+
+ // now make sure all of the conditions on characters
+ // are met. Please see the appendix at the end of
+ // this file for more info on exactly what is being // tested
+
+ // if all conditions are met then check if resulting
+ // root word in the dictionary
+
+ if (test_condition((char *) cp, (char *) tmpword)) {
+
+#ifdef SZOSZABLYA_POSSIBLE_ROOTS
+ fprintf(stdout,"%s %s %c\n", word, tmpword, aflag);
+#endif
+ if ((he = pmyMgr->lookup(tmpword)) != NULL) {
+ do {
+ // check conditional suffix (enabled by prefix)
+ if ((TESTAFF(he->astr, aflag, he->alen) || (ep && ep->getCont() &&
+ TESTAFF(ep->getCont(), aflag, ep->getContLen()))) &&
+ (((optflags & aeXPRODUCT) == 0) ||
+ TESTAFF(he->astr, ep->getFlag(), he->alen) ||
+ // enabled by prefix
+ ((contclass) && TESTAFF(contclass, ep->getFlag(), contclasslen))
+ ) &&
+ // handle cont. class
+ ((!cclass) ||
+ ((contclass) && TESTAFF(contclass, cclass, contclasslen))
+ ) &&
+ // check only in compound homonyms (bad flags)
+ (!badflag || !TESTAFF(he->astr, badflag, he->alen)
+ ) &&
+ // handle required flag
+ ((!needflag) ||
+ (TESTAFF(he->astr, needflag, he->alen) ||
+ ((contclass) && TESTAFF(contclass, needflag, contclasslen)))
+ )
+ ) return he;
+ he = he->next_homonym; // check homonyms
+ } while (he);
+
+ // obsolote stemming code (used only by the
+ // experimental SuffixMgr:suggest_pos_stems)
+ // store resulting root in wlst
+ } else if (wlst && (*ns < maxSug)) {
+ int cwrd = 1;
+ for (int k=0; k < *ns; k++)
+ if (strcmp(tmpword, wlst[k]) == 0) cwrd = 0;
+ if (cwrd) {
+ wlst[*ns] = mystrdup(tmpword);
+ if (wlst[*ns] == NULL) {
+ for (int j=0; j<*ns; j++) free(wlst[j]);
+ *ns = -1;
+ return NULL;
+ }
+ (*ns)++;
+ }
+ }
+ }
+ }
+ return NULL;
+}
+
+// see if two-level suffix is present in the word
+struct hentry * SfxEntry::check_twosfx(const char * word, int len, int optflags,
+ AffEntry* ppfx, const FLAG needflag)
+{
+ int tmpl; // length of tmpword
+ struct hentry * he; // hash entry pointer
+ unsigned char * cp;
+ char tmpword[MAXWORDUTF8LEN + 4];
+ PfxEntry* ep = (PfxEntry *) ppfx;
+
+
+ // if this suffix is being cross checked with a prefix
+ // but it does not support cross products skip it
+
+ if ((optflags & aeXPRODUCT) != 0 && (opts & aeXPRODUCT) == 0)
+ return NULL;
+
+ // upon entry suffix is 0 length or already matches the end of the word.
+ // So if the remaining root word has positive length
+ // and if there are enough chars in root word and added back strip chars
+ // to meet the number of characters conditions, then test it
+
+ tmpl = len - appndl;
+
+ if ((tmpl > 0) && (tmpl + stripl >= numconds)) {
+
+ // generate new root word by removing suffix and adding
+ // back any characters that would have been stripped or
+ // or null terminating the shorter string
+
+ strcpy (tmpword, word);
+ cp = (unsigned char *)(tmpword + tmpl);
+ if (stripl) {
+ strcpy ((char *)cp, strip);
+ tmpl += stripl;
+ cp = (unsigned char *)(tmpword + tmpl);
+ } else *cp = '\0';
+
+ // now make sure all of the conditions on characters
+ // are met. Please see the appendix at the end of
+ // this file for more info on exactly what is being
+ // tested
+
+ // if all conditions are met then recall suffix_check
+
+ if (test_condition((char *) cp, (char *) tmpword)) {
+ if (ppfx) {
+ // handle conditional suffix
+ if ((contclass) && TESTAFF(contclass, ep->getFlag(), contclasslen))
+ he = pmyMgr->suffix_check(tmpword, tmpl, 0, NULL, NULL, 0, NULL, (FLAG) aflag, needflag);
+ else
+ he = pmyMgr->suffix_check(tmpword, tmpl, optflags, ppfx, NULL, 0, NULL, (FLAG) aflag, needflag);
+ } else {
+ he = pmyMgr->suffix_check(tmpword, tmpl, 0, NULL, NULL, 0, NULL, (FLAG) aflag, needflag);
+ }
+ if (he) return he;
+ }
+ }
+ return NULL;
+}
+
+#ifdef HUNSPELL_EXPERIMENTAL
+// see if two-level suffix is present in the word
+char * SfxEntry::check_twosfx_morph(const char * word, int len, int optflags,
+ AffEntry* ppfx, const FLAG needflag)
+{
+ int tmpl; // length of tmpword
+ unsigned char * cp;
+ char tmpword[MAXWORDUTF8LEN + 4];
+ PfxEntry* ep = (PfxEntry *) ppfx;
+ char * st;
+
+ char result[MAXLNLEN];
+
+ *result = '\0';
+
+ // if this suffix is being cross checked with a prefix
+ // but it does not support cross products skip it
+
+ if ((optflags & aeXPRODUCT) != 0 && (opts & aeXPRODUCT) == 0)
+ return NULL;
+
+ // upon entry suffix is 0 length or already matches the end of the word.
+ // So if the remaining root word has positive length
+ // and if there are enough chars in root word and added back strip chars
+ // to meet the number of characters conditions, then test it
+
+ tmpl = len - appndl;
+
+ if ((tmpl > 0) && (tmpl + stripl >= numconds)) {
+
+ // generate new root word by removing suffix and adding
+ // back any characters that would have been stripped or
+ // or null terminating the shorter string
+
+ strcpy (tmpword, word);
+ cp = (unsigned char *)(tmpword + tmpl);
+ if (stripl) {
+ strcpy ((char *)cp, strip);
+ tmpl += stripl;
+ cp = (unsigned char *)(tmpword + tmpl);
+ } else *cp = '\0';
+
+ // now make sure all of the conditions on characters
+ // are met. Please see the appendix at the end of
+ // this file for more info on exactly what is being
+ // tested
+
+ // if all conditions are met then recall suffix_check
+
+ if (test_condition((char *) cp, (char *) tmpword)) {
+ if (ppfx) {
+ // handle conditional suffix
+ if ((contclass) && TESTAFF(contclass, ep->getFlag(), contclasslen)) {
+ st = pmyMgr->suffix_check_morph(tmpword, tmpl, 0, NULL, aflag, needflag);
+ if (st) {
+ if (((PfxEntry *) ppfx)->getMorph()) {
+ strcat(result, ((PfxEntry *) ppfx)->getMorph());
+ }
+ strcat(result,st);
+ free(st);
+ mychomp(result);
+ }
+ } else {
+ st = pmyMgr->suffix_check_morph(tmpword, tmpl, optflags, ppfx, aflag, needflag);
+ if (st) {
+ strcat(result, st);
+ free(st);
+ mychomp(result);
+ }
+ }
+ } else {
+ st = pmyMgr->suffix_check_morph(tmpword, tmpl, 0, NULL, aflag, needflag);
+ if (st) {
+ strcat(result, st);
+ free(st);
+ mychomp(result);
+ }
+ }
+ if (*result) return mystrdup(result);
+ }
+ }
+ return NULL;
+}
+#endif // END OF HUNSPELL_EXPERIMENTAL CODE
+
+// get next homonym with same affix
+struct hentry * SfxEntry::get_next_homonym(struct hentry * he, int optflags, AffEntry* ppfx,
+ const FLAG cclass, const FLAG needflag)
+{
+ PfxEntry* ep = (PfxEntry *) ppfx;
+
+ while (he->next_homonym) {
+ he = he->next_homonym;
+ if ((TESTAFF(he->astr, aflag, he->alen) || (ep && ep->getCont() && TESTAFF(ep->getCont(), aflag, ep->getContLen()))) &&
+ ((optflags & aeXPRODUCT) == 0 ||
+ TESTAFF(he->astr, ep->getFlag(), he->alen) ||
+ // handle conditional suffix
+ ((contclass) && TESTAFF(contclass, ep->getFlag(), contclasslen))
+ ) &&
+ // handle cont. class
+ ((!cclass) ||
+ ((contclass) && TESTAFF(contclass, cclass, contclasslen))
+ ) &&
+ // handle required flag
+ ((!needflag) ||
+ (TESTAFF(he->astr, needflag, he->alen) ||
+ ((contclass) && TESTAFF(contclass, needflag, contclasslen)))
+ )
+ ) return he;
+ }
+ return NULL;
+}
+
+
+#if 0
+
+Appendix: Understanding Affix Code
+
+
+An affix is either a prefix or a suffix attached to root words to make
+other words.
+
+Basically a Prefix or a Suffix is set of AffEntry objects
+which store information about the prefix or suffix along
+with supporting routines to check if a word has a particular
+prefix or suffix or a combination.
+
+The structure affentry is defined as follows:
+
+struct affentry
+{
+ unsigned short aflag; // ID used to represent the affix
+ char * strip; // string to strip before adding affix
+ char * appnd; // the affix string to add
+ unsigned char stripl; // length of the strip string
+ unsigned char appndl; // length of the affix string
+ char numconds; // the number of conditions that must be met
+ char opts; // flag: aeXPRODUCT- combine both prefix and suffix
+ char conds[SETSIZE]; // array which encodes the conditions to be met
+};
+
+
+Here is a suffix borrowed from the en_US.aff file. This file
+is whitespace delimited.
+
+SFX D Y 4
+SFX D 0 e d
+SFX D y ied [^aeiou]y
+SFX D 0 ed [^ey]
+SFX D 0 ed [aeiou]y
+
+This information can be interpreted as follows:
+
+In the first line has 4 fields
+
+Field
+-----
+1 SFX - indicates this is a suffix
+2 D - is the name of the character flag which represents this suffix
+3 Y - indicates it can be combined with prefixes (cross product)
+4 4 - indicates that sequence of 4 affentry structures are needed to
+ properly store the affix information
+
+The remaining lines describe the unique information for the 4 SfxEntry
+objects that make up this affix. Each line can be interpreted
+as follows: (note fields 1 and 2 are as a check against line 1 info)
+
+Field
+-----
+1 SFX - indicates this is a suffix
+2 D - is the name of the character flag for this affix
+3 y - the string of chars to strip off before adding affix
+ (a 0 here indicates the NULL string)
+4 ied - the string of affix characters to add
+5 [^aeiou]y - the conditions which must be met before the affix
+ can be applied
+
+Field 5 is interesting. Since this is a suffix, field 5 tells us that
+there are 2 conditions that must be met. The first condition is that
+the next to the last character in the word must *NOT* be any of the
+following "a", "e", "i", "o" or "u". The second condition is that
+the last character of the word must end in "y".
+
+So how can we encode this information concisely and be able to
+test for both conditions in a fast manner? The answer is found
+but studying the wonderful ispell code of Geoff Kuenning, et.al.
+(now available under a normal BSD license).
+
+If we set up a conds array of 256 bytes indexed (0 to 255) and access it
+using a character (cast to an unsigned char) of a string, we have 8 bits
+of information we can store about that character. Specifically we
+could use each bit to say if that character is allowed in any of the
+last (or first for prefixes) 8 characters of the word.
+
+Basically, each character at one end of the word (up to the number
+of conditions) is used to index into the conds array and the resulting
+value found there says whether the that character is valid for a
+specific character position in the word.
+
+For prefixes, it does this by setting bit 0 if that char is valid
+in the first position, bit 1 if valid in the second position, and so on.
+
+If a bit is not set, then that char is not valid for that postion in the
+word.
+
+If working with suffixes bit 0 is used for the character closest
+to the front, bit 1 for the next character towards the end, ...,
+with bit numconds-1 representing the last char at the end of the string.
+
+Note: since entries in the conds[] are 8 bits, only 8 conditions
+(read that only 8 character positions) can be examined at one
+end of a word (the beginning for prefixes and the end for suffixes.
+
+So to make this clearer, lets encode the conds array values for the
+first two affentries for the suffix D described earlier.
+
+
+ For the first affentry:
+ numconds = 1 (only examine the last character)
+
+ conds['e'] = (1 << 0) (the word must end in an E)
+ all others are all 0
+
+ For the second affentry:
+ numconds = 2 (only examine the last two characters)
+
+ conds[X] = conds[X] | (1 << 0) (aeiou are not allowed)
+ where X is all characters *but* a, e, i, o, or u
+
+
+ conds['y'] = (1 << 1) (the last char must be a y)
+ all other bits for all other entries in the conds array are zero
+
+
+#endif
+
diff --git a/chrome/third_party/hunspell/src/hunspell/affentry.hxx b/chrome/third_party/hunspell/src/hunspell/affentry.hxx
new file mode 100644
index 0000000..bb21773
--- /dev/null
+++ b/chrome/third_party/hunspell/src/hunspell/affentry.hxx
@@ -0,0 +1,131 @@
+#ifndef _AFFIX_HXX_
+#define _AFFIX_HXX_
+
+#include "atypes.hxx"
+#include "baseaffix.hxx"
+#include "affixmgr.hxx"
+
+/* A Prefix Entry */
+
+class PfxEntry : public AffEntry
+{
+ AffixMgr* pmyMgr;
+
+ PfxEntry * next;
+ PfxEntry * nexteq;
+ PfxEntry * nextne;
+ PfxEntry * flgnxt;
+
+public:
+
+ PfxEntry(AffixMgr* pmgr, affentry* dp );
+ ~PfxEntry();
+
+ inline bool allowCross() { return ((opts & aeXPRODUCT) != 0); }
+ struct hentry * checkword(const char * word, int len, char in_compound,
+ const FLAG needflag = FLAG_NULL);
+
+ struct hentry * check_twosfx(const char * word, int len, char in_compound, const FLAG needflag = NULL);
+
+ char * check_morph(const char * word, int len, char in_compound,
+ const FLAG needflag = FLAG_NULL);
+
+ char * check_twosfx_morph(const char * word, int len,
+ char in_compound, const FLAG needflag = FLAG_NULL);
+
+ inline FLAG getFlag() { return aflag; }
+ inline const char * getKey() { return appnd; }
+ char * add(const char * word, int len);
+
+ inline short getKeyLen() { return appndl; }
+
+ inline const char * getMorph() { return morphcode; }
+
+ inline const unsigned short * getCont() { return contclass; }
+ inline short getContLen() { return contclasslen; }
+
+ inline PfxEntry * getNext() { return next; }
+ inline PfxEntry * getNextNE() { return nextne; }
+ inline PfxEntry * getNextEQ() { return nexteq; }
+ inline PfxEntry * getFlgNxt() { return flgnxt; }
+
+ inline void setNext(PfxEntry * ptr) { next = ptr; }
+ inline void setNextNE(PfxEntry * ptr) { nextne = ptr; }
+ inline void setNextEQ(PfxEntry * ptr) { nexteq = ptr; }
+ inline void setFlgNxt(PfxEntry * ptr) { flgnxt = ptr; }
+
+ inline int test_condition(const char * st);
+};
+
+
+
+
+/* A Suffix Entry */
+
+class SfxEntry : public AffEntry
+{
+ AffixMgr* pmyMgr;
+ char * rappnd;
+
+ SfxEntry * next;
+ SfxEntry * nexteq;
+ SfxEntry * nextne;
+ SfxEntry * flgnxt;
+
+ SfxEntry * l_morph;
+ SfxEntry * r_morph;
+ SfxEntry * eq_morph;
+
+public:
+
+ SfxEntry(AffixMgr* pmgr, affentry* dp );
+ ~SfxEntry();
+
+ inline bool allowCross() { return ((opts & aeXPRODUCT) != 0); }
+ struct hentry * checkword(const char * word, int len, int optflags,
+ AffEntry* ppfx, char ** wlst, int maxSug, int * ns,
+// const FLAG cclass = FLAG_NULL, const FLAG needflag = FLAG_NULL, char in_compound=IN_CPD_NOT);
+ const FLAG cclass = FLAG_NULL, const FLAG needflag = FLAG_NULL, const FLAG badflag = 0);
+
+ struct hentry * check_twosfx(const char * word, int len, int optflags, AffEntry* ppfx, const FLAG needflag = NULL);
+
+ char * check_twosfx_morph(const char * word, int len, int optflags,
+ AffEntry* ppfx, const FLAG needflag = FLAG_NULL);
+ struct hentry * get_next_homonym(struct hentry * he);
+ struct hentry * get_next_homonym(struct hentry * word, int optflags, AffEntry* ppfx,
+ const FLAG cclass, const FLAG needflag);
+
+
+ inline FLAG getFlag() { return aflag; }
+ inline const char * getKey() { return rappnd; }
+ char * add(const char * word, int len);
+
+
+ inline const char * getMorph() { return morphcode; }
+
+ inline const unsigned short * getCont() { return contclass; }
+ inline short getContLen() { return contclasslen; }
+ inline const char * getAffix() { return appnd; }
+
+ inline short getKeyLen() { return appndl; }
+
+ inline SfxEntry * getNext() { return next; }
+ inline SfxEntry * getNextNE() { return nextne; }
+ inline SfxEntry * getNextEQ() { return nexteq; }
+
+ inline SfxEntry * getLM() { return l_morph; }
+ inline SfxEntry * getRM() { return r_morph; }
+ inline SfxEntry * getEQM() { return eq_morph; }
+ inline SfxEntry * getFlgNxt() { return flgnxt; }
+
+ inline void setNext(SfxEntry * ptr) { next = ptr; }
+ inline void setNextNE(SfxEntry * ptr) { nextne = ptr; }
+ inline void setNextEQ(SfxEntry * ptr) { nexteq = ptr; }
+ inline void setFlgNxt(SfxEntry * ptr) { flgnxt = ptr; }
+
+ inline int test_condition(const char * st, const char * begin);
+};
+
+#endif
+
+
diff --git a/chrome/third_party/hunspell/src/hunspell/affixmgr.cxx b/chrome/third_party/hunspell/src/hunspell/affixmgr.cxx
new file mode 100644
index 0000000..e21db6b
--- /dev/null
+++ b/chrome/third_party/hunspell/src/hunspell/affixmgr.cxx
@@ -0,0 +1,4096 @@
+#include "license.hunspell"
+#include "license.myspell"
+
+#ifndef MOZILLA_CLIENT
+#include <cstdlib>
+#include <cstring>
+#include <cctype>
+#include <cstdio>
+#else
+#include <stdlib.h>
+#include <string.h>
+#include <stdio.h>
+#include <ctype.h>
+#endif
+
+#include <io.h>
+
+#include "affixmgr.hxx"
+#include "affentry.hxx"
+#include "langnum.hxx"
+
+#include "csutil.hxx"
+
+#ifndef MOZILLA_CLIENT
+#ifndef W32
+using namespace std;
+#endif
+#endif
+
+#ifdef HUNSPELL_CHROME_CLIENT
+AffixMgr::AffixMgr(hunspell::BDictReader* reader, HashMgr* ptr)
+{
+ bdict_reader = reader;
+#else
+AffixMgr::AffixMgr(FILE* aff_handle, HashMgr* ptr)
+{
+#endif
+ // register hash manager and load affix data from aff file
+ pHMgr = ptr;
+ trystring = NULL;
+ encoding=NULL;
+ utf8 = 0;
+ complexprefixes = 0;
+ maptable = NULL;
+ nummap = 0;
+ breaktable = NULL;
+ numbreak = 0;
+ reptable = NULL;
+ numrep = 0;
+ checkcpdtable = NULL;
+ numcheckcpd = 0;
+ defcpdtable = NULL;
+ numdefcpd = 0;
+ compoundflag = FLAG_NULL; // permits word in compound forms
+ compoundbegin = FLAG_NULL; // may be first word in compound forms
+ compoundmiddle = FLAG_NULL; // may be middle word in compound forms
+ compoundend = FLAG_NULL; // may be last word in compound forms
+ compoundroot = FLAG_NULL; // compound word signing flag
+ compoundpermitflag = FLAG_NULL; // compound permitting flag for suffixed word
+ compoundforbidflag = FLAG_NULL; // compound fordidden flag for suffixed word
+ checkcompounddup = 0; // forbid double words in compounds
+ checkcompoundrep = 0; // forbid bad compounds (may be non compound word with a REP substitution)
+ checkcompoundcase = 0; // forbid upper and lowercase combinations at word bounds
+ checkcompoundtriple = 0; // forbid compounds with triple letters
+ forbiddenword = FLAG_NULL; // forbidden word signing flag
+ nosuggest = FLAG_NULL; // don't suggest words signed with NOSUGGEST flag
+ lang = NULL; // language
+ langnum = 0; // language code (see http://l10n.openoffice.org/languages.html)
+ pseudoroot = FLAG_NULL; // forbidden root, allowed only with suffixes
+ cpdwordmax = -1; // default: unlimited wordcount in compound words
+ cpdmin = -1; // undefined
+ cpdmaxsyllable = 0; // default: unlimited syllablecount in compound words
+ cpdvowels=NULL; // vowels (for calculating of Hungarian compounding limit, O(n) search! XXX)
+ cpdvowels_utf16=NULL; // vowels for UTF-8 encoding (bsearch instead of O(n) search)
+ cpdvowels_utf16_len=0; // vowels
+ pfxappnd=NULL; // previous prefix for counting the syllables of prefix BUG
+ sfxappnd=NULL; // previous suffix for counting a special syllables BUG
+ cpdsyllablenum=NULL; // syllable count incrementing flag
+ checknum=0; // checking numbers, and word with numbers
+ wordchars=NULL; // letters + spec. word characters
+ wordchars_utf16=NULL; // letters + spec. word characters
+ wordchars_utf16_len=0; // letters + spec. word characters
+ ignorechars=NULL; // letters + spec. word characters
+ ignorechars_utf16=NULL; // letters + spec. word characters
+ ignorechars_utf16_len=0; // letters + spec. word characters
+ version=NULL; // affix and dictionary file version string
+ havecontclass=0; // flags of possible continuing classes (double affix)
+ // LEMMA_PRESENT: not put root into the morphological output. Lemma presents
+ // in morhological description in dictionary file. It's often combined with PSEUDOROOT.
+ lemma_present = FLAG_NULL;
+ circumfix = FLAG_NULL;
+ onlyincompound = FLAG_NULL;
+ flag_mode = FLAG_CHAR; // default one-character flags in affix and dic file
+ maxngramsugs = -1; // undefined
+ nosplitsugs = 0;
+ sugswithdots = 0;
+ keepcase = 0;
+ checksharps = 0;
+
+ derived = NULL; // XXX not threadsafe variable for experimental stemming
+ sfx = NULL;
+ pfx = NULL;
+
+ for (int i=0; i < SETSIZE; i++) {
+ pStart[i] = NULL;
+ sStart[i] = NULL;
+ pFlag[i] = NULL;
+ sFlag[i] = NULL;
+ }
+
+#ifdef HUNSPELL_CHROME_CLIENT
+ if (parse_file()) {
+#else
+ for (int j=0; j < CONTSIZE; j++) {
+ contclasses[j] = 0;
+ }
+
+ if (parse_file(aff_handle)) {
+#endif
+ HUNSPELL_WARNING(stderr, "Failure loading aff file\n");
+ wordchars = mystrdup("qwertzuiopasdfghjklyxcvbnmQWERTZUIOPASDFGHJKLYXCVBNM");
+ }
+
+ if (cpdmin == -1) cpdmin = MINCPDLEN;
+
+}
+
+
+AffixMgr::~AffixMgr()
+{
+
+ // pass through linked prefix entries and clean up
+ for (int i=0; i < SETSIZE ;i++) {
+ pFlag[i] = NULL;
+ PfxEntry * ptr = (PfxEntry *)pStart[i];
+ PfxEntry * nptr = NULL;
+ while (ptr) {
+ nptr = ptr->getNext();
+ delete(ptr);
+ ptr = nptr;
+ nptr = NULL;
+ }
+ }
+
+ // pass through linked suffix entries and clean up
+ for (int j=0; j < SETSIZE ; j++) {
+ sFlag[j] = NULL;
+ SfxEntry * ptr = (SfxEntry *)sStart[j];
+ SfxEntry * nptr = NULL;
+ while (ptr) {
+ nptr = ptr->getNext();
+ delete(ptr);
+ ptr = nptr;
+ nptr = NULL;
+ }
+ sStart[j] = NULL;
+ }
+
+ if (trystring) free(trystring);
+ trystring=NULL;
+ if (encoding) free(encoding);
+ encoding=NULL;
+ if (maptable) {
+ for (int j=0; j < nummap; j++) {
+ if (maptable[j].set) free(maptable[j].set);
+ if (maptable[j].set_utf16) free(maptable[j].set_utf16);
+ maptable[j].set = NULL;
+ maptable[j].len = 0;
+ }
+ free(maptable);
+ maptable = NULL;
+ }
+ nummap = 0;
+ if (breaktable) {
+ for (int j=0; j < numbreak; j++) {
+ if (breaktable[j]) free(breaktable[j]);
+ breaktable[j] = NULL;
+ }
+ free(breaktable);
+ breaktable = NULL;
+ }
+ numbreak = 0;
+ if (reptable) {
+ for (int j=0; j < numrep; j++) {
+ free(reptable[j].pattern);
+ free(reptable[j].pattern2);
+ reptable[j].pattern = NULL;
+ reptable[j].pattern2 = NULL;
+ }
+ free(reptable);
+ reptable = NULL;
+ }
+ if (defcpdtable) {
+ for (int j=0; j < numdefcpd; j++) {
+ free(defcpdtable[j].def);
+ defcpdtable[j].def = NULL;
+ }
+ free(defcpdtable);
+ defcpdtable = NULL;
+ }
+ numrep = 0;
+ if (checkcpdtable) {
+ for (int j=0; j < numcheckcpd; j++) {
+ free(checkcpdtable[j].pattern);
+ free(checkcpdtable[j].pattern2);
+ checkcpdtable[j].pattern = NULL;
+ checkcpdtable[j].pattern2 = NULL;
+ }
+ free(checkcpdtable);
+ checkcpdtable = NULL;
+ }
+ numcheckcpd = 0;
+ FREE_FLAG(compoundflag);
+ FREE_FLAG(compoundbegin);
+ FREE_FLAG(compoundmiddle);
+ FREE_FLAG(compoundend);
+ FREE_FLAG(compoundpermitflag);
+ FREE_FLAG(compoundforbidflag);
+ FREE_FLAG(compoundroot);
+ FREE_FLAG(forbiddenword);
+ FREE_FLAG(nosuggest);
+ FREE_FLAG(pseudoroot);
+ FREE_FLAG(lemma_present);
+ FREE_FLAG(circumfix);
+ FREE_FLAG(onlyincompound);
+
+ cpdwordmax = 0;
+ pHMgr = NULL;
+ cpdmin = 0;
+ cpdmaxsyllable = 0;
+ if (cpdvowels) free(cpdvowels);
+ if (cpdvowels_utf16) free(cpdvowels_utf16);
+ if (cpdsyllablenum) free(cpdsyllablenum);
+ free_utf_tbl();
+ if (lang) free(lang);
+ if (wordchars) free(wordchars);
+ if (wordchars_utf16) free(wordchars_utf16);
+ if (ignorechars) free(ignorechars);
+ if (ignorechars_utf16) free(ignorechars_utf16);
+ if (version) free(version);
+ if (derived) free(derived);
+ checknum=0;
+}
+
+
+// read in aff file and build up prefix and suffix entry objects
+#ifdef HUNSPELL_CHROME_CLIENT
+ // Hack to avoid having to comment out all the fclose calls below on errors.
+ #define fclose(a);
+
+int AffixMgr::parse_file()
+#else
+int AffixMgr::parse_file(FILE* aff_handle)
+#endif
+{
+ // io buffers
+ char line[MAXLNLEN+1];
+
+ // affix type
+ char ft;
+
+ // first line indicator for removing byte order mark
+ int firstline = 1;
+
+ // open the affix file
+#ifdef HUNSPELL_CHROME_CLIENT
+ // We're always UTF-8
+ utf8 = 1;
+
+ hunspell::LineIterator af_iterator = bdict_reader->GetAffixLineIterator();
+ while (af_iterator.AdvanceAndCopy(line, MAXLNLEN)) {
+ ft = ' ';
+ if (strncmp(line,"PFX",3) == 0) ft = complexprefixes ? 'S' : 'P';
+ if (strncmp(line,"SFX",3) == 0) ft = complexprefixes ? 'P' : 'S';
+ if (ft != ' ')
+ parse_affix(line, ft, &af_iterator);
+ }
+
+ hunspell::LineIterator iterator = bdict_reader->GetOtherLineIterator();
+
+ // Hack to keep us from having to change all of the calls below which take
+ // a LineIterator* instead of a FILE* afflst.
+ hunspell::LineIterator* afflst = &iterator;
+
+ while (iterator.AdvanceAndCopy(line, MAXLNLEN)) {
+#else
+ // checking flag duplication
+ char dupflags[CONTSIZE];
+ char dupflags_ini = 1;
+
+ FILE * afflst;
+ afflst = _fdopen(_dup(_fileno(aff_handle)), "r");
+ if (!afflst) {
+ HUNSPELL_WARNING(stderr, "error: could not open affix description file\n");
+ return 1;
+ }
+ fseek(afflst, 0, SEEK_SET);
+
+ // step one is to parse the affix file building up the internal
+ // affix data structures
+
+
+ // read in each line ignoring any that do not
+ // start with a known line type indicator
+ while (fgets(line,MAXLNLEN,afflst)) {
+ mychomp(line);
+
+ /* remove byte order mark */
+ if (firstline) {
+ firstline = 0;
+ if (strncmp(line,"\xef\xbb\xbf",3) == 0) {
+ memmove(line, line+3, strlen(line+3)+1);
+ HUNSPELL_WARNING(stderr, "warning: affix file begins with byte order mark: possible incompatibility with old Hunspell versions\n");
+ }
+ }
+#endif
+ /* parse in the try string */
+ if (strncmp(line,"TRY",3) == 0) {
+ if (parse_string(line, &trystring, "TRY")) {
+ fclose(afflst);
+ return 1;
+ }
+ }
+
+ /* parse in the name of the character set used by the .dict and .aff */
+ if (strncmp(line,"SET",3) == 0) {
+ if (parse_string(line, &encoding, "SET")) {
+ fclose(afflst);
+ return 1;
+ }
+ if (strcmp(encoding, "UTF-8") == 0) {
+ utf8 = 1;
+#ifndef OPENOFFICEORG
+#ifndef MOZILLA_CLIENT
+ if (initialize_utf_tbl()) return 1;
+#endif
+#endif
+ }
+ }
+
+ /* parse COMPLEXPREFIXES for agglutinative languages with right-to-left writing system */
+ if (strncmp(line,"COMPLEXPREFIXES",15) == 0)
+ complexprefixes = 1;
+
+ /* parse in the flag used by the controlled compound words */
+ if (strncmp(line,"COMPOUNDFLAG",12) == 0) {
+ if (parse_flag(line, &compoundflag, "COMPOUNDFLAG")) {
+ fclose(afflst);
+ return 1;
+ }
+ }
+
+ /* parse in the flag used by compound words */
+ if (strncmp(line,"COMPOUNDBEGIN",13) == 0) {
+ if (complexprefixes) {
+ if (parse_flag(line, &compoundend, "COMPOUNDBEGIN")) {
+ fclose(afflst);
+ return 1;
+ }
+ } else {
+ if (parse_flag(line, &compoundbegin, "COMPOUNDBEGIN")) {
+ fclose(afflst);
+ return 1;
+ }
+ }
+ }
+
+ /* parse in the flag used by compound words */
+ if (strncmp(line,"COMPOUNDMIDDLE",14) == 0) {
+ if (parse_flag(line, &compoundmiddle, "COMPOUNDMIDDLE")) {
+ fclose(afflst);
+ return 1;
+ }
+ }
+ /* parse in the flag used by compound words */
+ if (strncmp(line,"COMPOUNDEND",11) == 0) {
+ if (complexprefixes) {
+ if (parse_flag(line, &compoundbegin, "COMPOUNDEND")) {
+ fclose(afflst);
+ return 1;
+ }
+ } else {
+ if (parse_flag(line, &compoundend, "COMPOUNDEND")) {
+ fclose(afflst);
+ return 1;
+ }
+ }
+ }
+
+ /* parse in the data used by compound_check() method */
+ if (strncmp(line,"COMPOUNDWORDMAX",15) == 0) {
+ if (parse_num(line, &cpdwordmax, "COMPOUNDWORDMAX")) {
+ fclose(afflst);
+ return 1;
+ }
+ }
+
+ /* parse in the flag sign compounds in dictionary */
+ if (strncmp(line,"COMPOUNDROOT",12) == 0) {
+ if (parse_flag(line, &compoundroot, "COMPOUNDROOT")) {
+ fclose(afflst);
+ return 1;
+ }
+ }
+
+ /* parse in the flag used by compound_check() method */
+ if (strncmp(line,"COMPOUNDPERMITFLAG",18) == 0) {
+ if (parse_flag(line, &compoundpermitflag, "COMPOUNDPERMITFLAG")) {
+ fclose(afflst);
+ return 1;
+ }
+ }
+
+ /* parse in the flag used by compound_check() method */
+ if (strncmp(line,"COMPOUNDFORBIDFLAG",18) == 0) {
+ if (parse_flag(line, &compoundforbidflag, "COMPOUNDFORBIDFLAG")) {
+ fclose(afflst);
+ return 1;
+ }
+ }
+
+ if (strncmp(line,"CHECKCOMPOUNDDUP",16) == 0) {
+ checkcompounddup = 1;
+ }
+
+ if (strncmp(line,"CHECKCOMPOUNDREP",16) == 0) {
+ checkcompoundrep = 1;
+ }
+
+ if (strncmp(line,"CHECKCOMPOUNDTRIPLE",19) == 0) {
+ checkcompoundtriple = 1;
+ }
+
+ if (strncmp(line,"CHECKCOMPOUNDCASE",17) == 0) {
+ checkcompoundcase = 1;
+ }
+
+ if (strncmp(line,"NOSUGGEST",9) == 0) {
+ if (parse_flag(line, &nosuggest, "NOSUGGEST")) {
+ fclose(afflst);
+ return 1;
+ }
+ }
+
+ /* parse in the flag used by forbidden words */
+ if (strncmp(line,"FORBIDDENWORD",13) == 0) {
+ if (parse_flag(line, &forbiddenword, "FORBIDDENWORD")) {
+ fclose(afflst);
+ return 1;
+ }
+ }
+
+ /* parse in the flag used by forbidden words */
+ if (strncmp(line,"LEMMA_PRESENT",13) == 0) {
+ if (parse_flag(line, &lemma_present, "LEMMA_PRESENT")) {
+ fclose(afflst);
+ return 1;
+ }
+ }
+
+ /* parse in the flag used by circumfixes */
+ if (strncmp(line,"CIRCUMFIX",9) == 0) {
+ if (parse_flag(line, &circumfix, "CIRCUMFIX")) {
+ fclose(afflst);
+ return 1;
+ }
+ }
+
+ /* parse in the flag used by fogemorphemes */
+ if (strncmp(line,"ONLYINCOMPOUND",14) == 0) {
+ if (parse_flag(line, &onlyincompound, "ONLYINCOMPOUND")) {
+ fclose(afflst);
+ return 1;
+ }
+ }
+
+ /* parse in the flag used by `pseudoroots' */
+ if (strncmp(line,"PSEUDOROOT",10) == 0) {
+ if (parse_flag(line, &pseudoroot, "PSEUDOROOT")) {
+ fclose(afflst);
+ return 1;
+ }
+ }
+
+ /* parse in the flag used by `pseudoroots' */
+ if (strncmp(line,"NEEDAFFIX",9) == 0) {
+ if (parse_flag(line, &pseudoroot, "NEEDAFFIX")) {
+ fclose(afflst);
+ return 1;
+ }
+ }
+
+ /* parse in the minimal length for words in compounds */
+ if (strncmp(line,"COMPOUNDMIN",11) == 0) {
+ if (parse_num(line, &cpdmin, "COMPOUNDMIN")) {
+ fclose(afflst);
+ return 1;
+ }
+ if (cpdmin < 1) cpdmin = 1;
+ }
+
+ /* parse in the max. words and syllables in compounds */
+ if (strncmp(line,"COMPOUNDSYLLABLE",16) == 0) {
+ if (parse_cpdsyllable(line)) {
+ fclose(afflst);
+ return 1;
+ }
+ }
+
+ /* parse in the flag used by compound_check() method */
+ if (strncmp(line,"SYLLABLENUM",11) == 0) {
+ if (parse_string(line, &cpdsyllablenum, "SYLLABLENUM")) {
+ fclose(afflst);
+ return 1;
+ }
+ }
+
+ /* parse in the flag used by the controlled compound words */
+ if (strncmp(line,"CHECKNUM",8) == 0) {
+ checknum=1;
+ }
+
+ /* parse in the extra word characters */
+ if (strncmp(line,"WORDCHARS",9) == 0) {
+ if (parse_array(line, &wordchars, &wordchars_utf16, &wordchars_utf16_len, "WORDCHARS", utf8)) {
+ fclose(afflst);
+ return 1;
+ }
+ }
+
+ /* parse in the ignored characters (for example, Arabic optional diacretics charachters */
+ if (strncmp(line,"IGNORE",6) == 0) {
+ if (parse_array(line, &ignorechars, &ignorechars_utf16, &ignorechars_utf16_len, "IGNORE", utf8)) {
+ fclose(afflst);
+ return 1;
+ }
+ }
+
+ /* parse in the typical fault correcting table */
+#ifndef HUNSPELL_CHROME_CLIENT
+ if (strncmp(line,"REP",3) == 0) {
+ if (parse_reptable(line, afflst)) {
+ fclose(afflst);
+ return 1;
+ }
+ }
+#endif
+
+ /* parse in the checkcompoundpattern table */
+ if (strncmp(line,"CHECKCOMPOUNDPATTERN",20) == 0) {
+ if (parse_checkcpdtable(line, afflst)) {
+ fclose(afflst);
+ return 1;
+ }
+ }
+
+ /* parse in the defcompound table */
+ if (strncmp(line,"COMPOUNDRULE",12) == 0) {
+ if (parse_defcpdtable(line, afflst)) {
+ fclose(afflst);
+ return 1;
+ }
+ }
+
+ /* parse in the related character map table */
+ if (strncmp(line,"MAP",3) == 0) {
+ if (parse_maptable(line, afflst)) {
+ fclose(afflst);
+ return 1;
+ }
+ }
+
+ /* parse in the word breakpoints table */
+ if (strncmp(line,"BREAK",5) == 0) {
+ if (parse_breaktable(line, afflst)) {
+ fclose(afflst);
+ return 1;
+ }
+ }
+
+ /* parse in the language for language specific codes */
+ if (strncmp(line,"LANG",4) == 0) {
+ if (parse_string(line, &lang, "LANG")) {
+ fclose(afflst);
+ return 1;
+ }
+ langnum = get_lang_num(lang);
+ }
+
+ if (strncmp(line,"VERSION",7) == 0) {
+ if (parse_string(line, &version, "VERSION")) {
+ fclose(afflst);
+ return 1;
+ }
+ }
+
+ if (strncmp(line,"MAXNGRAMSUGS",12) == 0) {
+ if (parse_num(line, &maxngramsugs, "MAXNGRAMSUGS")) {
+ fclose(afflst);
+ return 1;
+ }
+ }
+
+ if (strncmp(line,"NOSPLITSUGS",11) == 0) {
+ nosplitsugs=1;
+ }
+
+ if (strncmp(line,"SUGSWITHDOTS",12) == 0) {
+ sugswithdots=1;
+ }
+
+ /* parse in the flag used by forbidden words */
+ if (strncmp(line,"KEEPCASE",8) == 0) {
+ if (parse_flag(line, &keepcase, "KEEPCASE")) {
+ fclose(afflst);
+ return 1;
+ }
+ }
+
+ if (strncmp(line,"CHECKSHARPS",11) == 0) {
+ checksharps=1;
+ }
+
+#ifndef HUNSPELL_CHROME_CLIENT // Chrome handled affixes above.
+ /* parse this affix: P - prefix, S - suffix */
+ ft = ' ';
+ if (strncmp(line,"PFX",3) == 0) ft = complexprefixes ? 'S' : 'P';
+ if (strncmp(line,"SFX",3) == 0) ft = complexprefixes ? 'P' : 'S';
+ if (ft != ' ') {
+ if (dupflags_ini) {
+ for (int i = 0; i < CONTSIZE; i++) dupflags[i] = 0;
+ dupflags_ini = 0;
+ }
+ if (parse_affix(line, ft, afflst, dupflags)) {
+ fclose(afflst);
+ process_pfx_tree_to_list();
+ process_sfx_tree_to_list();
+ return 1;
+ }
+ }
+#endif
+ }
+
+#ifndef HUNSPELL_CHROME_CLIENT
+ fclose(afflst);
+#endif
+
+ // convert affix trees to sorted list
+ process_pfx_tree_to_list();
+ process_sfx_tree_to_list();
+
+ // now we can speed up performance greatly taking advantage of the
+ // relationship between the affixes and the idea of "subsets".
+
+ // View each prefix as a potential leading subset of another and view
+ // each suffix (reversed) as a potential trailing subset of another.
+
+ // To illustrate this relationship if we know the prefix "ab" is found in the
+ // word to examine, only prefixes that "ab" is a leading subset of need be examined.
+ // Furthermore is "ab" is not present then none of the prefixes that "ab" is
+ // is a subset need be examined.
+ // The same argument goes for suffix string that are reversed.
+
+ // Then to top this off why not examine the first char of the word to quickly
+ // limit the set of prefixes to examine (i.e. the prefixes to examine must
+ // be leading supersets of the first character of the word (if they exist)
+
+ // To take advantage of this "subset" relationship, we need to add two links
+ // from entry. One to take next if the current prefix is found (call it nexteq)
+ // and one to take next if the current prefix is not found (call it nextne).
+
+ // Since we have built ordered lists, all that remains is to properly intialize
+ // the nextne and nexteq pointers that relate them
+
+ process_pfx_order();
+ process_sfx_order();
+
+ // expand wordchars string, based on csutil (for external tokenization)
+
+ char * enc = get_encoding();
+ csconv = get_current_cs(enc);
+ free(enc);
+ enc = NULL;
+
+ char expw[MAXLNLEN];
+ if (wordchars) {
+ strcpy(expw, wordchars);
+ free(wordchars);
+ } else *expw = '\0';
+
+ for (int i = 0; i <= 255; i++) {
+ if ( (csconv[i].cupper != csconv[i].clower) &&
+ (! strchr(expw, (char) i))) {
+ *(expw + strlen(expw) + 1) = '\0';
+ *(expw + strlen(expw)) = (char) i;
+ }
+ }
+
+ wordchars = mystrdup(expw);
+
+ // temporary BREAK definition for German dash handling (OOo issue 64400)
+ if ((langnum == LANG_de) && (!breaktable)) {
+ breaktable = (char **) malloc(sizeof(char *));
+ if (!breaktable) return 1;
+ breaktable[0] = mystrdup("-");
+ numbreak = 1;
+ }
+ return 0;
+}
+#ifdef HUNSPELL_CHROME_CLIENT
+#undef fclose
+#endif
+
+// we want to be able to quickly access prefix information
+// both by prefix flag, and sorted by prefix string itself
+// so we need to set up two indexes
+
+int AffixMgr::build_pfxtree(AffEntry* pfxptr)
+{
+ PfxEntry * ptr;
+ PfxEntry * pptr;
+ PfxEntry * ep = (PfxEntry*) pfxptr;
+
+ // get the right starting points
+ const char * key = ep->getKey();
+ const unsigned char flg = (unsigned char) (ep->getFlag() & 0x00FF);
+
+ // first index by flag which must exist
+ ptr = (PfxEntry*)pFlag[flg];
+ ep->setFlgNxt(ptr);
+ pFlag[flg] = (AffEntry *) ep;
+
+
+ // handle the special case of null affix string
+ if (strlen(key) == 0) {
+ // always inset them at head of list at element 0
+ ptr = (PfxEntry*)pStart[0];
+ ep->setNext(ptr);
+ pStart[0] = (AffEntry*)ep;
+ return 0;
+ }
+
+ // now handle the normal case
+ ep->setNextEQ(NULL);
+ ep->setNextNE(NULL);
+
+ unsigned char sp = *((const unsigned char *)key);
+ ptr = (PfxEntry*)pStart[sp];
+
+ // handle the first insert
+ if (!ptr) {
+ pStart[sp] = (AffEntry*)ep;
+ return 0;
+ }
+
+
+ // otherwise use binary tree insertion so that a sorted
+ // list can easily be generated later
+ pptr = NULL;
+ for (;;) {
+ pptr = ptr;
+ if (strcmp(ep->getKey(), ptr->getKey() ) <= 0) {
+ ptr = ptr->getNextEQ();
+ if (!ptr) {
+ pptr->setNextEQ(ep);
+ break;
+ }
+ } else {
+ ptr = ptr->getNextNE();
+ if (!ptr) {
+ pptr->setNextNE(ep);
+ break;
+ }
+ }
+ }
+ return 0;
+}
+
+// we want to be able to quickly access suffix information
+// both by suffix flag, and sorted by the reverse of the
+// suffix string itself; so we need to set up two indexes
+int AffixMgr::build_sfxtree(AffEntry* sfxptr)
+{
+ SfxEntry * ptr;
+ SfxEntry * pptr;
+ SfxEntry * ep = (SfxEntry *) sfxptr;
+
+ /* get the right starting point */
+ const char * key = ep->getKey();
+ const unsigned char flg = (unsigned char) (ep->getFlag() & 0x00FF);
+
+ // first index by flag which must exist
+ ptr = (SfxEntry*)sFlag[flg];
+ ep->setFlgNxt(ptr);
+ sFlag[flg] = (AffEntry *) ep;
+
+ // next index by affix string
+
+ // handle the special case of null affix string
+ if (strlen(key) == 0) {
+ // always inset them at head of list at element 0
+ ptr = (SfxEntry*)sStart[0];
+ ep->setNext(ptr);
+ sStart[0] = (AffEntry*)ep;
+ return 0;
+ }
+
+ // now handle the normal case
+ ep->setNextEQ(NULL);
+ ep->setNextNE(NULL);
+
+ unsigned char sp = *((const unsigned char *)key);
+ ptr = (SfxEntry*)sStart[sp];
+
+ // handle the first insert
+ if (!ptr) {
+ sStart[sp] = (AffEntry*)ep;
+ return 0;
+ }
+
+ // otherwise use binary tree insertion so that a sorted
+ // list can easily be generated later
+ pptr = NULL;
+ for (;;) {
+ pptr = ptr;
+ if (strcmp(ep->getKey(), ptr->getKey() ) <= 0) {
+ ptr = ptr->getNextEQ();
+ if (!ptr) {
+ pptr->setNextEQ(ep);
+ break;
+ }
+ } else {
+ ptr = ptr->getNextNE();
+ if (!ptr) {
+ pptr->setNextNE(ep);
+ break;
+ }
+ }
+ }
+ return 0;
+}
+
+// convert from binary tree to sorted list
+int AffixMgr::process_pfx_tree_to_list()
+{
+ for (int i=1; i< SETSIZE; i++) {
+ pStart[i] = process_pfx_in_order(pStart[i],NULL);
+ }
+ return 0;
+}
+
+
+AffEntry* AffixMgr::process_pfx_in_order(AffEntry* ptr, AffEntry* nptr)
+{
+ if (ptr) {
+ nptr = process_pfx_in_order(((PfxEntry*) ptr)->getNextNE(), nptr);
+ ((PfxEntry*) ptr)->setNext((PfxEntry*) nptr);
+ nptr = process_pfx_in_order(((PfxEntry*) ptr)->getNextEQ(), ptr);
+ }
+ return nptr;
+}
+
+
+// convert from binary tree to sorted list
+int AffixMgr:: process_sfx_tree_to_list()
+{
+ for (int i=1; i< SETSIZE; i++) {
+ sStart[i] = process_sfx_in_order(sStart[i],NULL);
+ }
+ return 0;
+}
+
+AffEntry* AffixMgr::process_sfx_in_order(AffEntry* ptr, AffEntry* nptr)
+{
+ if (ptr) {
+ nptr = process_sfx_in_order(((SfxEntry*) ptr)->getNextNE(), nptr);
+ ((SfxEntry*) ptr)->setNext((SfxEntry*) nptr);
+ nptr = process_sfx_in_order(((SfxEntry*) ptr)->getNextEQ(), ptr);
+ }
+ return nptr;
+}
+
+
+// reinitialize the PfxEntry links NextEQ and NextNE to speed searching
+// using the idea of leading subsets this time
+int AffixMgr::process_pfx_order()
+{
+ PfxEntry* ptr;
+
+ // loop through each prefix list starting point
+ for (int i=1; i < SETSIZE; i++) {
+
+ ptr = (PfxEntry*)pStart[i];
+
+ // look through the remainder of the list
+ // and find next entry with affix that
+ // the current one is not a subset of
+ // mark that as destination for NextNE
+ // use next in list that you are a subset
+ // of as NextEQ
+
+ for (; ptr != NULL; ptr = ptr->getNext()) {
+
+ PfxEntry * nptr = ptr->getNext();
+ for (; nptr != NULL; nptr = nptr->getNext()) {
+ if (! isSubset( ptr->getKey() , nptr->getKey() )) break;
+ }
+ ptr->setNextNE(nptr);
+ ptr->setNextEQ(NULL);
+ if ((ptr->getNext()) && isSubset(ptr->getKey() , (ptr->getNext())->getKey()))
+ ptr->setNextEQ(ptr->getNext());
+ }
+
+ // now clean up by adding smart search termination strings:
+ // if you are already a superset of the previous prefix
+ // but not a subset of the next, search can end here
+ // so set NextNE properly
+
+ ptr = (PfxEntry *) pStart[i];
+ for (; ptr != NULL; ptr = ptr->getNext()) {
+ PfxEntry * nptr = ptr->getNext();
+ PfxEntry * mptr = NULL;
+ for (; nptr != NULL; nptr = nptr->getNext()) {
+ if (! isSubset(ptr->getKey(),nptr->getKey())) break;
+ mptr = nptr;
+ }
+ if (mptr) mptr->setNextNE(NULL);
+ }
+ }
+ return 0;
+}
+
+// initialize the SfxEntry links NextEQ and NextNE to speed searching
+// using the idea of leading subsets this time
+int AffixMgr::process_sfx_order()
+{
+ SfxEntry* ptr;
+
+ // loop through each prefix list starting point
+ for (int i=1; i < SETSIZE; i++) {
+
+ ptr = (SfxEntry *) sStart[i];
+
+ // look through the remainder of the list
+ // and find next entry with affix that
+ // the current one is not a subset of
+ // mark that as destination for NextNE
+ // use next in list that you are a subset
+ // of as NextEQ
+
+ for (; ptr != NULL; ptr = ptr->getNext()) {
+ SfxEntry * nptr = ptr->getNext();
+ for (; nptr != NULL; nptr = nptr->getNext()) {
+ if (! isSubset(ptr->getKey(),nptr->getKey())) break;
+ }
+ ptr->setNextNE(nptr);
+ ptr->setNextEQ(NULL);
+ if ((ptr->getNext()) && isSubset(ptr->getKey(),(ptr->getNext())->getKey()))
+ ptr->setNextEQ(ptr->getNext());
+ }
+
+
+ // now clean up by adding smart search termination strings:
+ // if you are already a superset of the previous suffix
+ // but not a subset of the next, search can end here
+ // so set NextNE properly
+
+ ptr = (SfxEntry *) sStart[i];
+ for (; ptr != NULL; ptr = ptr->getNext()) {
+ SfxEntry * nptr = ptr->getNext();
+ SfxEntry * mptr = NULL;
+ for (; nptr != NULL; nptr = nptr->getNext()) {
+ if (! isSubset(ptr->getKey(),nptr->getKey())) break;
+ mptr = nptr;
+ }
+ if (mptr) mptr->setNextNE(NULL);
+ }
+ }
+ return 0;
+}
+
+
+
+// takes aff file condition string and creates the
+// conds array - please see the appendix at the end of the
+// file affentry.cxx which describes what is going on here
+// in much more detail
+
+int AffixMgr::encodeit(struct affentry * ptr, char * cs)
+{
+ unsigned char c;
+ int i, j, k;
+ unsigned char mbr[MAXLNLEN];
+ w_char wmbr[MAXLNLEN];
+ w_char * wpos = wmbr;
+
+ // now clear the conditions array */
+ for (i=0;i<SETSIZE;i++) ptr->conds.base[i] = (unsigned char) 0;
+
+ // now parse the string to create the conds array */
+ int nc = strlen(cs);
+ unsigned char neg = 0; // complement indicator
+ int grp = 0; // group indicator
+ unsigned char n = 0; // number of conditions
+ int ec = 0; // end condition indicator
+ int nm = 0; // number of member in group
+
+ // if no condition just return
+ if (strcmp(cs,".")==0) {
+ ptr->numconds = 0;
+ return 0;
+ }
+
+ i = 0;
+ while (i < nc) {
+ c = *((unsigned char *)(cs + i));
+
+ // start group indicator
+ if (c == '[') {
+ grp = 1;
+ c = 0;
+ }
+
+ // complement flag
+ if ((grp == 1) && (c == '^')) {
+ neg = 1;
+ c = 0;
+ }
+
+ // end goup indicator
+ if (c == ']') {
+ ec = 1;
+ c = 0;
+ }
+
+ // add character of group to list
+ if ((grp == 1) && (c != 0)) {
+ *(mbr + nm) = c;
+ nm++;
+ c = 0;
+ }
+
+ // end of condition
+ if (c != 0) {
+ ec = 1;
+ }
+
+ if (ec) {
+ if (!utf8) {
+ if (grp == 1) {
+ if (neg == 0) {
+ // set the proper bits in the condition array vals for those chars
+ for (j=0;j<nm;j++) {
+ k = (unsigned int) mbr[j];
+ ptr->conds.base[k] = ptr->conds.base[k] | ((unsigned char)1 << n);
+ }
+ } else {
+ // complement so set all of them and then unset indicated ones
+ for (j=0;j<SETSIZE;j++) ptr->conds.base[j] = ptr->conds.base[j] | ((unsigned char)1 << n);
+ for (j=0;j<nm;j++) {
+ k = (unsigned int) mbr[j];
+ ptr->conds.base[k] = ptr->conds.base[k] & ~((unsigned char)1 << n);
+ }
+ }
+ neg = 0;
+ grp = 0;
+ nm = 0;
+ } else {
+ // not a group so just set the proper bit for this char
+ // but first handle special case of . inside condition
+ if (c == '.') {
+ // wild card character so set them all
+ for (j=0;j<SETSIZE;j++) ptr->conds.base[j] = ptr->conds.base[j] | ((unsigned char)1 << n);
+ } else {
+ ptr->conds.base[(unsigned int) c] = ptr->conds.base[(unsigned int)c] | ((unsigned char)1 << n);
+ }
+ }
+ n++;
+ ec = 0;
+ } else { // UTF-8 character set
+ if (grp == 1) {
+ ptr->conds.utf8.neg[n] = neg;
+ if (neg == 0) {
+ // set the proper bits in the condition array vals for those chars
+ for (j=0;j<nm;j++) {
+ k = (unsigned int) mbr[j];
+ if (k >> 7) {
+ u8_u16(wpos, 1, (char *) mbr + j);
+ wpos++;
+ if ((k & 0xe0) == 0xe0) j+=2; else j++; // 3-byte UTF-8 character
+ } else {
+ ptr->conds.utf8.ascii[k] = ptr->conds.utf8.ascii[k] | ((unsigned char)1 << n);
+ }
+ }
+ } else { // neg == 1
+ // complement so set all of them and then unset indicated ones
+ for (j=0;j<(SETSIZE/2);j++) ptr->conds.utf8.ascii[j] = ptr->conds.utf8.ascii[j] | ((unsigned char)1 << n);
+ for (j=0;j<nm;j++) {
+ k = (unsigned int) mbr[j];
+ if (k >> 7) {
+ u8_u16(wpos, 1, (char *) mbr + j);
+ wpos++;
+ if ((k & 0xe0) == 0xe0) j+=2; else j++; // 3-byte UTF-8 character
+ } else {
+ ptr->conds.utf8.ascii[k] = ptr->conds.utf8.ascii[k] & ~((unsigned char)1 << n);
+ }
+ }
+ }
+ neg = 0;
+ grp = 0;
+ nm = 0;
+ ptr->conds.utf8.wlen[n] = wpos - wmbr;
+ if ((wpos - wmbr) != 0) {
+ ptr->conds.utf8.wchars[n] = (w_char *) malloc(sizeof(w_char) * (wpos - wmbr));
+ if (!ptr->conds.utf8.wchars[n]) return 1;
+ memcpy(ptr->conds.utf8.wchars[n], wmbr, sizeof(w_char) * (wpos - wmbr));
+ flag_qsort((unsigned short *) ptr->conds.utf8.wchars[n], 0, ptr->conds.utf8.wlen[n]);
+ wpos = wmbr;
+ }
+ } else { // grp == 0
+ // is UTF-8 character?
+ if (c >> 7) {
+ ptr->conds.utf8.wchars[n] = (w_char *) malloc(sizeof(w_char));
+ if (!ptr->conds.utf8.wchars[n]) return 1;
+ ptr->conds.utf8.wlen[n] = 1;
+ u8_u16(ptr->conds.utf8.wchars[n], 1, cs + i);
+ if ((c & 0xe0) == 0xe0) i+=2; else i++; // 3-byte UFT-8 character
+ } else {
+ ptr->conds.utf8.wchars[n] = NULL;
+ // not a group so just set the proper bit for this char
+ // but first handle special case of . inside condition
+ if (c == '.') {
+ ptr->conds.utf8.all[n] = 1;
+ // wild card character so set them all
+ for (j=0;j<(SETSIZE/2);j++) ptr->conds.utf8.ascii[j] = ptr->conds.utf8.ascii[j] | ((unsigned char)1 << n);
+ } else {
+ ptr->conds.utf8.all[n] = 0;
+ ptr->conds.utf8.ascii[(unsigned int) c] = ptr->conds.utf8.ascii[(unsigned int)c] | ((unsigned char)1 << n);
+ }
+ }
+ neg = 0;
+ }
+ n++;
+ ec = 0;
+ neg = 0;
+ }
+ }
+
+ i++;
+ }
+ ptr->numconds = n;
+ return 0;
+}
+
+ // return 1 if s1 is a leading subset of s2
+/* inline int AffixMgr::isSubset(const char * s1, const char * s2)
+ {
+ while ((*s1 == *s2) && *s1) {
+ s1++;
+ s2++;
+ }
+ return (*s1 == '\0');
+ }
+*/
+
+ // return 1 if s1 is a leading subset of s2 (dots are for infixes)
+inline int AffixMgr::isSubset(const char * s1, const char * s2)
+ {
+ while (((*s1 == *s2) || (*s1 == '.')) && (*s1 != '\0')) {
+ s1++;
+ s2++;
+ }
+ return (*s1 == '\0');
+ }
+
+
+// check word for prefixes
+struct hentry * AffixMgr::prefix_check(const char * word, int len, char in_compound,
+ const FLAG needflag)
+{
+ struct hentry * rv= NULL;
+
+ pfx = NULL;
+ pfxappnd = NULL;
+ sfxappnd = NULL;
+
+ // first handle the special case of 0 length prefixes
+ PfxEntry * pe = (PfxEntry *) pStart[0];
+ while (pe) {
+ if (
+ // fogemorpheme
+ ((in_compound != IN_CPD_NOT) || !(pe->getCont() &&
+ (TESTAFF(pe->getCont(), onlyincompound, pe->getContLen())))) &&
+ // permit prefixes in compounds
+ ((in_compound != IN_CPD_END) || (pe->getCont() &&
+ (TESTAFF(pe->getCont(), compoundpermitflag, pe->getContLen()))))
+ ) {
+ // check prefix
+ rv = pe->checkword(word, len, in_compound, needflag);
+ if (rv) {
+ pfx=(AffEntry *)pe; // BUG: pfx not stateless
+ return rv;
+ }
+ }
+ pe = pe->getNext();
+ }
+
+ // now handle the general case
+ unsigned char sp = *((const unsigned char *)word);
+ PfxEntry * pptr = (PfxEntry *)pStart[sp];
+
+ while (pptr) {
+ if (isSubset(pptr->getKey(),word)) {
+ if (
+ // fogemorpheme
+ ((in_compound != IN_CPD_NOT) || !(pptr->getCont() &&
+ (TESTAFF(pptr->getCont(), onlyincompound, pptr->getContLen())))) &&
+ // permit prefixes in compounds
+ ((in_compound != IN_CPD_END) || (pptr->getCont() &&
+ (TESTAFF(pptr->getCont(), compoundpermitflag, pptr->getContLen()))))
+ ) {
+ // check prefix
+ rv = pptr->checkword(word, len, in_compound, needflag);
+ if (rv) {
+ pfx=(AffEntry *)pptr; // BUG: pfx not stateless
+ return rv;
+ }
+ }
+ pptr = pptr->getNextEQ();
+ } else {
+ pptr = pptr->getNextNE();
+ }
+ }
+
+ return NULL;
+}
+
+// check word for prefixes
+struct hentry * AffixMgr::prefix_check_twosfx(const char * word, int len,
+ char in_compound, const FLAG needflag)
+{
+ struct hentry * rv= NULL;
+
+ pfx = NULL;
+ sfxappnd = NULL;
+
+ // first handle the special case of 0 length prefixes
+ PfxEntry * pe = (PfxEntry *) pStart[0];
+
+ while (pe) {
+ rv = pe->check_twosfx(word, len, in_compound, needflag);
+ if (rv) return rv;
+ pe = pe->getNext();
+ }
+
+ // now handle the general case
+ unsigned char sp = *((const unsigned char *)word);
+ PfxEntry * pptr = (PfxEntry *)pStart[sp];
+
+ while (pptr) {
+ if (isSubset(pptr->getKey(),word)) {
+ rv = pptr->check_twosfx(word, len, in_compound, needflag);
+ if (rv) {
+ pfx = (AffEntry *)pptr;
+ return rv;
+ }
+ pptr = pptr->getNextEQ();
+ } else {
+ pptr = pptr->getNextNE();
+ }
+ }
+
+ return NULL;
+}
+
+#ifdef HUNSPELL_EXPERIMENTAL
+// check word for prefixes
+char * AffixMgr::prefix_check_morph(const char * word, int len, char in_compound,
+ const FLAG needflag)
+{
+ char * st;
+
+ char result[MAXLNLEN];
+ result[0] = '\0';
+
+ pfx = NULL;
+ sfxappnd = NULL;
+
+ // first handle the special case of 0 length prefixes
+ PfxEntry * pe = (PfxEntry *) pStart[0];
+ while (pe) {
+ st = pe->check_morph(word,len,in_compound, needflag);
+ if (st) {
+ strcat(result, st);
+ free(st);
+ }
+ // if (rv) return rv;
+ pe = pe->getNext();
+ }
+
+ // now handle the general case
+ unsigned char sp = *((const unsigned char *)word);
+ PfxEntry * pptr = (PfxEntry *)pStart[sp];
+
+ while (pptr) {
+ if (isSubset(pptr->getKey(),word)) {
+ st = pptr->check_morph(word,len,in_compound, needflag);
+ if (st) {
+ // fogemorpheme
+ if ((in_compound != IN_CPD_NOT) || !((pptr->getCont() &&
+ (TESTAFF(pptr->getCont(), onlyincompound, pptr->getContLen()))))) {
+ strcat(result, st);
+ pfx = (AffEntry *)pptr;
+ }
+ free(st);
+ }
+ pptr = pptr->getNextEQ();
+ } else {
+ pptr = pptr->getNextNE();
+ }
+ }
+
+ if (*result) return mystrdup(result);
+ return NULL;
+}
+
+
+// check word for prefixes
+char * AffixMgr::prefix_check_twosfx_morph(const char * word, int len,
+ char in_compound, const FLAG needflag)
+{
+ char * st;
+
+ char result[MAXLNLEN];
+ result[0] = '\0';
+
+ pfx = NULL;
+ sfxappnd = NULL;
+
+ // first handle the special case of 0 length prefixes
+ PfxEntry * pe = (PfxEntry *) pStart[0];
+ while (pe) {
+ st = pe->check_twosfx_morph(word,len,in_compound, needflag);
+ if (st) {
+ strcat(result, st);
+ free(st);
+ }
+ pe = pe->getNext();
+ }
+
+ // now handle the general case
+ unsigned char sp = *((const unsigned char *)word);
+ PfxEntry * pptr = (PfxEntry *)pStart[sp];
+
+ while (pptr) {
+ if (isSubset(pptr->getKey(),word)) {
+ st = pptr->check_twosfx_morph(word, len, in_compound, needflag);
+ if (st) {
+ strcat(result, st);
+ free(st);
+ pfx = (AffEntry *)pptr;
+ }
+ pptr = pptr->getNextEQ();
+ } else {
+ pptr = pptr->getNextNE();
+ }
+ }
+
+ if (*result) return mystrdup(result);
+ return NULL;
+}
+#endif // END OF HUNSPELL_EXPERIMENTAL CODE
+
+
+// Is word a non compound with a REP substitution (see checkcompoundrep)?
+int AffixMgr::cpdrep_check(const char * word, int wl)
+{
+ char candidate[MAXLNLEN];
+ const char * r;
+ int lenr, lenp;
+
+#ifdef HUNSPELL_CHROME_CLIENT
+ const char *pattern, *pattern2;
+ hunspell::ReplacementIterator iterator = bdict_reader->GetReplacementIterator();
+ while (iterator.GetNext(&pattern, &pattern2)) {
+ r = word;
+ lenr = strlen(pattern2);
+ lenp = strlen(pattern);
+
+ // search every occurence of the pattern in the word
+ while ((r=strstr(r, pattern)) != NULL) {
+ strcpy(candidate, word);
+ if (r-word + lenr + strlen(r+lenp) >= MAXLNLEN) break;
+ strcpy(candidate+(r-word), pattern2);
+ strcpy(candidate+(r-word)+lenr, r+lenp);
+ if (candidate_check(candidate,strlen(candidate))) return 1;
+ r++; // search for the next letter
+ }
+ }
+
+#else
+ if ((wl < 2) || !numrep) return 0;
+
+ for (int i=0; i < numrep; i++ ) {
+ r = word;
+ lenr = strlen(reptable[i].pattern2);
+ lenp = strlen(reptable[i].pattern);
+ // search every occurence of the pattern in the word
+ while ((r=strstr(r, reptable[i].pattern)) != NULL) {
+ strcpy(candidate, word);
+ if (r-word + lenr + strlen(r+lenp) >= MAXLNLEN) break;
+ strcpy(candidate+(r-word),reptable[i].pattern2);
+ strcpy(candidate+(r-word)+lenr, r+lenp);
+ if (candidate_check(candidate,strlen(candidate))) return 1;
+ r++; // search for the next letter
+ }
+ }
+#endif
+ return 0;
+}
+
+// forbid compoundings when there are special patterns at word bound
+int AffixMgr::cpdpat_check(const char * word, int pos)
+{
+ int len;
+ for (int i = 0; i < numcheckcpd; i++) {
+ if (isSubset(checkcpdtable[i].pattern2, word + pos) &&
+ (len = strlen(checkcpdtable[i].pattern)) && (pos > len) &&
+ (strncmp(word + pos - len, checkcpdtable[i].pattern, len) == 0)) return 1;
+ }
+ return 0;
+}
+
+// forbid compounding with neighbouring upper and lower case characters at word bounds
+int AffixMgr::cpdcase_check(const char * word, int pos)
+{
+ if (utf8) {
+ w_char u, w;
+ const char * p;
+ u8_u16(&u, 1, word + pos);
+ for (p = word + pos - 1; (*p & 0xc0) == 0x80; p--);
+ u8_u16(&w, 1, p);
+ unsigned short a = (u.h << 8) + u.l;
+ unsigned short b = (w.h << 8) + w.l;
+ // CHROME MODIFICATION: We add the checks for the dashes as they are used
+ // below in the non-UTF-8 case. This seems to be a bug in Hunspell. It
+ // causes some of the tests to fail since we convert everything to UTF-8.
+ if (((unicodetoupper(a, langnum) == a) || (unicodetoupper(b, langnum) == b)) && (a != '-') && (b != '-')) return 1;
+ } else {
+ unsigned char a = *(word + pos - 1);
+ unsigned char b = *(word + pos);
+ if ((csconv[a].ccase || csconv[b].ccase) && (a != '-') && (b != '-')) return 1;
+ }
+ return 0;
+}
+
+// check compound patterns
+int AffixMgr::defcpd_check(hentry *** words, short wnum, hentry * rv, hentry ** def, char all)
+{
+ signed short btpp[MAXWORDLEN]; // metacharacter (*, ?) positions for backtracking
+ signed short btwp[MAXWORDLEN]; // word positions for metacharacters
+ int btnum[MAXWORDLEN]; // number of matched characters in metacharacter positions
+ short bt = 0;
+ int i;
+ int ok;
+ int w = 0;
+ if (!*words) {
+ w = 1;
+ *words = def;
+ }
+ (*words)[wnum] = rv;
+
+ for (i = 0; i < numdefcpd; i++) {
+ signed short pp = 0; // pattern position
+ signed short wp = 0; // "words" position
+ int ok2;
+ ok = 1;
+ ok2 = 1;
+ do {
+ while ((pp < defcpdtable[i].len) && (wp <= wnum)) {
+ if (((pp+1) < defcpdtable[i].len) &&
+ ((defcpdtable[i].def[pp+1] == '*') || (defcpdtable[i].def[pp+1] == '?'))) {
+ int wend = (defcpdtable[i].def[pp+1] == '?') ? wp : wnum;
+ ok2 = 1;
+ pp+=2;
+ btpp[bt] = pp;
+ btwp[bt] = wp;
+ while (wp <= wend) {
+ if (!(*words)[wp]->alen ||
+ !TESTAFF((*words)[wp]->astr, defcpdtable[i].def[pp-2], (*words)[wp]->alen)) {
+ ok2 = 0;
+ break;
+ }
+ wp++;
+ }
+ if (wp <= wnum) ok2 = 0;
+ btnum[bt] = wp - btwp[bt];
+ if (btnum[bt] > 0) bt++;
+ if (ok2) break;
+ } else {
+ ok2 = 1;
+ if (!(*words)[wp] || !(*words)[wp]->alen ||
+ !TESTAFF((*words)[wp]->astr, defcpdtable[i].def[pp], (*words)[wp]->alen)) {
+ ok = 0;
+ break;
+ }
+ pp++;
+ wp++;
+ if ((defcpdtable[i].len == pp) && !(wp > wnum)) ok = 0;
+ }
+ }
+ if (ok && ok2) {
+ int r = pp;
+ while ((defcpdtable[i].len > r) && ((r+1) < defcpdtable[i].len) &&
+ ((defcpdtable[i].def[r+1] == '*') || (defcpdtable[i].def[r+1] == '?'))) r+=2;
+ if (defcpdtable[i].len <= r) return 1;
+ }
+ // backtrack
+ if (bt) do {
+ ok = 1;
+ btnum[bt - 1]--;
+ pp = btpp[bt - 1];
+ wp = btwp[bt - 1] + btnum[bt - 1];
+ } while ((btnum[bt - 1] < 0) && --bt);
+ } while (bt);
+
+ if (ok && ok2 && (!all || (defcpdtable[i].len <= pp))) return 1;
+ // check zero ending
+ while (ok && ok2 && (defcpdtable[i].len > pp) && ((pp+1) < defcpdtable[i].len) &&
+ ((defcpdtable[i].def[pp+1] == '*') || (defcpdtable[i].def[pp+1] == '?'))) pp+=2;
+ if (ok && ok2 && (defcpdtable[i].len <= pp)) return 1;
+ }
+ (*words)[wnum] = NULL;
+ if (w) *words = NULL;
+ return 0;
+}
+
+inline int AffixMgr::candidate_check(const char * word, int len)
+{
+ struct hentry * rv=NULL;
+
+ rv = lookup(word);
+ if (rv) return 1;
+
+// rv = prefix_check(word,len,1);
+// if (rv) return 1;
+
+ rv = affix_check(word,len);
+ if (rv) return 1;
+ return 0;
+}
+
+// calculate number of syllable for compound-checking
+short AffixMgr::get_syllable(const char * word, int wlen)
+{
+ if (cpdmaxsyllable==0) return 0;
+
+ short num=0;
+
+ if (!utf8) {
+ for (int i=0; i<wlen; i++) {
+ if (strchr(cpdvowels, word[i])) num++;
+ }
+ } else if (cpdvowels_utf16) {
+ w_char w[MAXWORDUTF8LEN];
+ int i = u8_u16(w, MAXWORDUTF8LEN, word);
+ for (; i; i--) {
+ if (flag_bsearch((unsigned short *) cpdvowels_utf16,
+ ((unsigned short *) w)[i - 1], cpdvowels_utf16_len)) num++;
+ }
+ }
+ return num;
+}
+
+// check if compound word is correctly spelled
+// hu_mov_rule = spec. Hungarian rule (XXX)
+struct hentry * AffixMgr::compound_check(const char * word, int len,
+ short wordnum, short numsyllable, short maxwordnum, short wnum, hentry ** words = NULL,
+ char hu_mov_rule = 0, int * cmpdstemnum = NULL, int * cmpdstem = NULL, char is_sug = 0)
+{
+ int i;
+ short oldnumsyllable, oldnumsyllable2, oldwordnum, oldwordnum2;
+ int oldcmpdstemnum = 0;
+ struct hentry * rv = NULL;
+ struct hentry * rv_first;
+ struct hentry * rwords[MAXWORDLEN]; // buffer for COMPOUND pattern checking
+ char st [MAXWORDUTF8LEN + 4];
+ char ch;
+ int cmin;
+ int cmax;
+
+ int checked_prefix;
+
+#ifdef HUNSTEM
+ if (cmpdstemnum) {
+ if (wordnum == 0) {
+ *cmpdstemnum = 1;
+ } else {
+ (*cmpdstemnum)++;
+ }
+ }
+#endif
+ if (utf8) {
+ for (cmin = 0, i = 0; (i < cpdmin) && word[cmin]; i++) {
+ cmin++;
+ for (; (word[cmin] & 0xc0) == 0x80; cmin++);
+ }
+ for (cmax = len, i = 0; (i < (cpdmin - 1)) && cmax; i++) {
+ cmax--;
+ for (; (word[cmax] & 0xc0) == 0x80; cmax--);
+ }
+ } else {
+ cmin = cpdmin;
+ cmax = len - cpdmin + 1;
+ }
+
+ strcpy(st, word);
+
+ for (i = cmin; i < cmax; i++) {
+
+ oldnumsyllable = numsyllable;
+ oldwordnum = wordnum;
+ checked_prefix = 0;
+
+ // go to end of the UTF-8 character
+ if (utf8) {
+ for (; (st[i] & 0xc0) == 0x80; i++);
+ if (i >= cmax) return NULL;
+ }
+
+
+ ch = st[i];
+ st[i] = '\0';
+
+ sfx = NULL;
+ pfx = NULL;
+
+ // FIRST WORD
+
+ rv = lookup(st); // perhaps without prefix
+
+ // search homonym with compound flag
+ while ((rv) && !hu_mov_rule &&
+ ((pseudoroot && TESTAFF(rv->astr, pseudoroot, rv->alen)) ||
+ !((compoundflag && !words && TESTAFF(rv->astr, compoundflag, rv->alen)) ||
+ (compoundbegin && !wordnum &&
+ TESTAFF(rv->astr, compoundbegin, rv->alen)) ||
+ (compoundmiddle && wordnum && !words &&
+ TESTAFF(rv->astr, compoundmiddle, rv->alen)) ||
+ (numdefcpd &&
+ ((!words && !wordnum && defcpd_check(&words, wnum, rv, (hentry **) &rwords, 0)) ||
+ (words && defcpd_check(&words, wnum, rv, (hentry **) &rwords, 0))))
+ ))) {
+ rv = rv->next_homonym;
+ }
+
+ if (!rv) {
+ if (compoundflag &&
+ !(rv = prefix_check(st, i, hu_mov_rule ? IN_CPD_OTHER : IN_CPD_BEGIN, compoundflag))) {
+ if ((rv = suffix_check(st, i, 0, NULL, NULL, 0, NULL,
+ FLAG_NULL, compoundflag, hu_mov_rule ? IN_CPD_OTHER : IN_CPD_BEGIN)) && !hu_mov_rule &&
+ ((SfxEntry*)sfx)->getCont() &&
+ ((compoundforbidflag && TESTAFF(((SfxEntry*)sfx)->getCont(), compoundforbidflag,
+ ((SfxEntry*)sfx)->getContLen())) || (compoundend &&
+ TESTAFF(((SfxEntry*)sfx)->getCont(), compoundend,
+ ((SfxEntry*)sfx)->getContLen())))) {
+ rv = NULL;
+ }
+ }
+ if (rv ||
+ (((wordnum == 0) && compoundbegin &&
+ ((rv = suffix_check(st, i, 0, NULL, NULL, 0, NULL, FLAG_NULL, compoundbegin, hu_mov_rule ? IN_CPD_OTHER : IN_CPD_BEGIN)) ||
+ (rv = prefix_check(st, i, hu_mov_rule ? IN_CPD_OTHER : IN_CPD_BEGIN, compoundbegin)))) ||
+ ((wordnum > 0) && compoundmiddle &&
+ ((rv = suffix_check(st, i, 0, NULL, NULL, 0, NULL, FLAG_NULL, compoundmiddle, hu_mov_rule ? IN_CPD_OTHER : IN_CPD_BEGIN)) ||
+ (rv = prefix_check(st, i, hu_mov_rule ? IN_CPD_OTHER : IN_CPD_BEGIN, compoundmiddle)))))
+ ) checked_prefix = 1;
+ // else check forbiddenwords and pseudoroot
+ } else if (rv->astr && (TESTAFF(rv->astr, forbiddenword, rv->alen) ||
+ TESTAFF(rv->astr, pseudoroot, rv->alen) ||
+ (is_sug && nosuggest && TESTAFF(rv->astr, nosuggest, rv->alen))
+ )) {
+ st[i] = ch;
+ continue;
+ }
+
+ // check non_compound flag in suffix and prefix
+ if ((rv) && !hu_mov_rule &&
+ ((pfx && ((PfxEntry*)pfx)->getCont() &&
+ TESTAFF(((PfxEntry*)pfx)->getCont(), compoundforbidflag,
+ ((PfxEntry*)pfx)->getContLen())) ||
+ (sfx && ((SfxEntry*)sfx)->getCont() &&
+ TESTAFF(((SfxEntry*)sfx)->getCont(), compoundforbidflag,
+ ((SfxEntry*)sfx)->getContLen())))) {
+ rv = NULL;
+ }
+
+ // check compoundend flag in suffix and prefix
+ if ((rv) && !checked_prefix && compoundend && !hu_mov_rule &&
+ ((pfx && ((PfxEntry*)pfx)->getCont() &&
+ TESTAFF(((PfxEntry*)pfx)->getCont(), compoundend,
+ ((PfxEntry*)pfx)->getContLen())) ||
+ (sfx && ((SfxEntry*)sfx)->getCont() &&
+ TESTAFF(((SfxEntry*)sfx)->getCont(), compoundend,
+ ((SfxEntry*)sfx)->getContLen())))) {
+ rv = NULL;
+ }
+
+ // check compoundmiddle flag in suffix and prefix
+ if ((rv) && !checked_prefix && (wordnum==0) && compoundmiddle && !hu_mov_rule &&
+ ((pfx && ((PfxEntry*)pfx)->getCont() &&
+ TESTAFF(((PfxEntry*)pfx)->getCont(), compoundmiddle,
+ ((PfxEntry*)pfx)->getContLen())) ||
+ (sfx && ((SfxEntry*)sfx)->getCont() &&
+ TESTAFF(((SfxEntry*)sfx)->getCont(), compoundmiddle,
+ ((SfxEntry*)sfx)->getContLen())))) {
+ rv = NULL;
+ }
+
+ // check forbiddenwords
+ if ((rv) && (rv->astr) && (TESTAFF(rv->astr, forbiddenword, rv->alen) ||
+ (is_sug && nosuggest && TESTAFF(rv->astr, nosuggest, rv->alen)))) {
+ return NULL;
+ }
+
+ // increment word number, if the second root has a compoundroot flag
+ if ((rv) && compoundroot &&
+ (TESTAFF(rv->astr, compoundroot, rv->alen))) {
+ wordnum++;
+ }
+
+ // first word is acceptable in compound words?
+ if (((rv) &&
+ ( checked_prefix || (words && words[wnum]) ||
+ (compoundflag && TESTAFF(rv->astr, compoundflag, rv->alen)) ||
+ ((oldwordnum == 0) && compoundbegin && TESTAFF(rv->astr, compoundbegin, rv->alen)) ||
+ ((oldwordnum > 0) && compoundmiddle && TESTAFF(rv->astr, compoundmiddle, rv->alen))// ||
+// (numdefcpd && )
+
+// LANG_hu section: spec. Hungarian rule
+ || ((langnum == LANG_hu) && hu_mov_rule && (
+ TESTAFF(rv->astr, 'F', rv->alen) || // XXX hardwired Hungarian dictionary codes
+ TESTAFF(rv->astr, 'G', rv->alen) ||
+ TESTAFF(rv->astr, 'H', rv->alen)
+ )
+ )
+// END of LANG_hu section
+ )
+ && ! (( checkcompoundtriple && // test triple letters
+ (word[i-1]==word[i]) && (
+ ((i>1) && (word[i-1]==word[i-2])) ||
+ ((word[i-1]==word[i+1])) // may be word[i+1] == '\0'
+ )
+ ) ||
+ (
+ // test CHECKCOMPOUNDPATTERN
+ numcheckcpd && cpdpat_check(word, i)
+ ) ||
+ (
+ checkcompoundcase && cpdcase_check(word, i)
+ ))
+ )
+// LANG_hu section: spec. Hungarian rule
+ || ((!rv) && (langnum == LANG_hu) && hu_mov_rule && (rv = affix_check(st,i)) &&
+ (sfx && ((SfxEntry*)sfx)->getCont() && ( // XXX hardwired Hungarian dic. codes
+ TESTAFF(((SfxEntry*)sfx)->getCont(), (unsigned short) 'x', ((SfxEntry*)sfx)->getContLen()) ||
+ TESTAFF(((SfxEntry*)sfx)->getCont(), (unsigned short) '%', ((SfxEntry*)sfx)->getContLen())
+ )
+ )
+ )
+// END of LANG_hu section
+ ) {
+
+// LANG_hu section: spec. Hungarian rule
+ if (langnum == LANG_hu) {
+ // calculate syllable number of the word
+ numsyllable += get_syllable(st, i);
+
+ // + 1 word, if syllable number of the prefix > 1 (hungarian convention)
+ if (pfx && (get_syllable(((PfxEntry *)pfx)->getKey(),strlen(((PfxEntry *)pfx)->getKey())) > 1)) wordnum++;
+ }
+// END of LANG_hu section
+
+#ifdef HUNSTEM
+ if (cmpdstem) cmpdstem[*cmpdstemnum - 1] = i;
+#endif
+
+ // NEXT WORD(S)
+ rv_first = rv;
+ rv = lookup((word+i)); // perhaps without prefix
+
+ // search homonym with compound flag
+ while ((rv) && ((pseudoroot && TESTAFF(rv->astr, pseudoroot, rv->alen)) ||
+ !((compoundflag && !words && TESTAFF(rv->astr, compoundflag, rv->alen)) ||
+ (compoundend && !words && TESTAFF(rv->astr, compoundend, rv->alen)) ||
+ (numdefcpd && words && defcpd_check(&words, wnum + 1, rv, NULL,1))))) {
+ rv = rv->next_homonym;
+ }
+
+ if (rv && words && words[wnum + 1]) return rv;
+
+ oldnumsyllable2 = numsyllable;
+ oldwordnum2 = wordnum;
+
+// LANG_hu section: spec. Hungarian rule, XXX hardwired dictionary code
+ if ((rv) && (langnum == LANG_hu) && (TESTAFF(rv->astr, 'I', rv->alen)) && !(TESTAFF(rv->astr, 'J', rv->alen))) {
+ numsyllable--;
+ }
+// END of LANG_hu section
+
+ // increment word number, if the second root has a compoundroot flag
+ if ((rv) && (compoundroot) &&
+ (TESTAFF(rv->astr, compoundroot, rv->alen))) {
+ wordnum++;
+ }
+
+ // check forbiddenwords
+ if ((rv) && (rv->astr) && (TESTAFF(rv->astr, forbiddenword, rv->alen) ||
+ (is_sug && nosuggest && TESTAFF(rv->astr, nosuggest, rv->alen)))) return NULL;
+
+ // second word is acceptable, as a root?
+ // hungarian conventions: compounding is acceptable,
+ // when compound forms consist of 2 words, or if more,
+ // then the syllable number of root words must be 6, or lesser.
+
+ if ((rv) && (
+ (compoundflag && TESTAFF(rv->astr, compoundflag, rv->alen)) ||
+ (compoundend && TESTAFF(rv->astr, compoundend, rv->alen))
+ )
+ && (
+ ((cpdwordmax==-1) || (wordnum+1<cpdwordmax)) ||
+ ((cpdmaxsyllable==0) ||
+ (numsyllable + get_syllable(rv->word,rv->wlen)<=cpdmaxsyllable))
+ )
+ && (
+ (!checkcompounddup || (rv != rv_first))
+ )
+ )
+ {
+ // forbid compound word, if it is a non compound word with typical fault
+ if (checkcompoundrep && cpdrep_check(word,len)) return NULL;
+ return rv;
+ }
+
+ numsyllable = oldnumsyllable2 ;
+ wordnum = oldwordnum2;
+
+ // perhaps second word has prefix or/and suffix
+ sfx = NULL;
+ sfxflag = FLAG_NULL;
+ rv = (compoundflag) ? affix_check((word+i),strlen(word+i), compoundflag, IN_CPD_END) : NULL;
+ if (!rv && compoundend) {
+ sfx = NULL;
+ pfx = NULL;
+ rv = affix_check((word+i),strlen(word+i), compoundend, IN_CPD_END);
+ }
+
+ if (!rv && numdefcpd && words) {
+ rv = affix_check((word+i),strlen(word+i), 0, IN_CPD_END);
+ if (rv && defcpd_check(&words, wnum + 1, rv, NULL, 1)) return rv;
+ }
+
+ // check non_compound flag in suffix and prefix
+ if ((rv) &&
+ ((pfx && ((PfxEntry*)pfx)->getCont() &&
+ TESTAFF(((PfxEntry*)pfx)->getCont(), compoundforbidflag,
+ ((PfxEntry*)pfx)->getContLen())) ||
+ (sfx && ((SfxEntry*)sfx)->getCont() &&
+ TESTAFF(((SfxEntry*)sfx)->getCont(), compoundforbidflag,
+ ((SfxEntry*)sfx)->getContLen())))) {
+ rv = NULL;
+ }
+
+ // check forbiddenwords
+ if ((rv) && (rv->astr) && (TESTAFF(rv->astr, forbiddenword, rv->alen) ||
+ (is_sug && nosuggest && TESTAFF(rv->astr, nosuggest, rv->alen)))) return NULL;
+
+ // pfxappnd = prefix of word+i, or NULL
+ // calculate syllable number of prefix.
+ // hungarian convention: when syllable number of prefix is more,
+ // than 1, the prefix+word counts as two words.
+
+ if (langnum == LANG_hu) {
+ // calculate syllable number of the word
+ numsyllable += get_syllable(word + i, strlen(word + i));
+
+ // - affix syllable num.
+ // XXX only second suffix (inflections, not derivations)
+ if (sfxappnd) {
+ char * tmp = myrevstrdup(sfxappnd);
+ numsyllable -= get_syllable(tmp, strlen(tmp));
+ free(tmp);
+ }
+
+ // + 1 word, if syllable number of the prefix > 1 (hungarian convention)
+ if (pfx && (get_syllable(((PfxEntry *)pfx)->getKey(),strlen(((PfxEntry *)pfx)->getKey())) > 1)) wordnum++;
+
+ // increment syllable num, if last word has a SYLLABLENUM flag
+ // and the suffix is beginning `s'
+
+ if (cpdsyllablenum) {
+ switch (sfxflag) {
+ case 'c': { numsyllable+=2; break; }
+ case 'J': { numsyllable += 1; break; }
+ case 'I': { if (TESTAFF(rv->astr, 'J', rv->alen)) numsyllable += 1; break; }
+ }
+ }
+ }
+
+ // increment word number, if the second word has a compoundroot flag
+ if ((rv) && (compoundroot) &&
+ (TESTAFF(rv->astr, compoundroot, rv->alen))) {
+ wordnum++;
+ }
+
+ // second word is acceptable, as a word with prefix or/and suffix?
+ // hungarian conventions: compounding is acceptable,
+ // when compound forms consist 2 word, otherwise
+ // the syllable number of root words is 6, or lesser.
+ if ((rv) &&
+ (
+ ((cpdwordmax == -1) || (wordnum + 1 < cpdwordmax)) ||
+ ((cpdmaxsyllable == 0) ||
+ (numsyllable <= cpdmaxsyllable))
+ )
+ && (
+ (!checkcompounddup || (rv != rv_first))
+ )) {
+ // forbid compound word, if it is a non compound word with typical fault
+ if (checkcompoundrep && cpdrep_check(word, len)) return NULL;
+ return rv;
+ }
+
+ numsyllable = oldnumsyllable2;
+ wordnum = oldwordnum2;
+#ifdef HUNSTEM
+ if (cmpdstemnum) oldcmpdstemnum = *cmpdstemnum;
+#endif
+ // perhaps second word is a compound word (recursive call)
+ if (wordnum < maxwordnum) {
+ rv = compound_check((word+i),strlen(word+i), wordnum+1,
+ numsyllable, maxwordnum, wnum + 1, words,
+ 0, cmpdstemnum, cmpdstem, is_sug);
+ } else {
+ rv=NULL;
+ }
+ if (rv) {
+ // forbid compound word, if it is a non compound word with typical fault
+ if (checkcompoundrep && cpdrep_check(word, len)) return NULL;
+ return rv;
+ } else {
+#ifdef HUNSTEM
+ if (cmpdstemnum) *cmpdstemnum = oldcmpdstemnum;
+#endif
+ }
+ }
+ st[i] = ch;
+ wordnum = oldwordnum;
+ numsyllable = oldnumsyllable;
+ }
+
+ return NULL;
+}
+
+#ifdef HUNSPELL_EXPERIMENTAL
+// check if compound word is correctly spelled
+// hu_mov_rule = spec. Hungarian rule (XXX)
+int AffixMgr::compound_check_morph(const char * word, int len,
+ short wordnum, short numsyllable, short maxwordnum, short wnum, hentry ** words,
+ char hu_mov_rule = 0, char ** result = NULL, char * partresult = NULL)
+{
+ int i;
+ short oldnumsyllable, oldnumsyllable2, oldwordnum, oldwordnum2;
+ int ok = 0;
+
+ struct hentry * rv = NULL;
+ struct hentry * rv_first;
+ struct hentry * rwords[MAXWORDLEN]; // buffer for COMPOUND pattern checking
+ char st [MAXWORDUTF8LEN + 4];
+ char ch;
+
+ int checked_prefix;
+ char presult[MAXLNLEN];
+
+ int cmin;
+ int cmax;
+
+ if (utf8) {
+ for (cmin = 0, i = 0; (i < cpdmin) && word[cmin]; i++) {
+ cmin++;
+ for (; (word[cmin] & 0xc0) == 0x80; cmin++);
+ }
+ for (cmax = len, i = 0; (i < (cpdmin - 1)) && cmax; i++) {
+ cmax--;
+ for (; (word[cmax] & 0xc0) == 0x80; cmax--);
+ }
+ } else {
+ cmin = cpdmin;
+ cmax = len - cpdmin + 1;
+ }
+
+ strcpy(st, word);
+
+ for (i = cmin; i < cmax; i++) {
+ oldnumsyllable = numsyllable;
+ oldwordnum = wordnum;
+ checked_prefix = 0;
+
+ // go to end of the UTF-8 character
+ if (utf8) {
+ for (; (st[i] & 0xc0) == 0x80; i++);
+ if (i >= cmax) return 0;
+ }
+
+ ch = st[i];
+ st[i] = '\0';
+ sfx = NULL;
+
+ // FIRST WORD
+ *presult = '\0';
+ if (partresult) strcat(presult, partresult);
+
+ rv = lookup(st); // perhaps without prefix
+
+ // search homonym with compound flag
+ while ((rv) && !hu_mov_rule &&
+ ((pseudoroot && TESTAFF(rv->astr, pseudoroot, rv->alen)) ||
+ !((compoundflag && !words && TESTAFF(rv->astr, compoundflag, rv->alen)) ||
+ (compoundbegin && !wordnum &&
+ TESTAFF(rv->astr, compoundbegin, rv->alen)) ||
+ (compoundmiddle && wordnum && !words &&
+ TESTAFF(rv->astr, compoundmiddle, rv->alen)) ||
+ (numdefcpd &&
+ ((!words && !wordnum && defcpd_check(&words, wnum, rv, (hentry **) &rwords, 0)) ||
+ (words && defcpd_check(&words, wnum, rv, (hentry **) &rwords, 0))))
+ ))) {
+ rv = rv->next_homonym;
+ }
+
+ if (rv) {
+ if (rv->description) {
+ if ((!rv->astr) || !TESTAFF(rv->astr, lemma_present, rv->alen))
+ strcat(presult, st);
+ strcat(presult, rv->description);
+ }
+ }
+
+ if (!rv) {
+ if (compoundflag &&
+ !(rv = prefix_check(st, i, hu_mov_rule ? IN_CPD_OTHER : IN_CPD_BEGIN, compoundflag))) {
+ if ((rv = suffix_check(st, i, 0, NULL, NULL, 0, NULL,
+ FLAG_NULL, compoundflag, hu_mov_rule ? IN_CPD_OTHER : IN_CPD_BEGIN)) && !hu_mov_rule &&
+ ((SfxEntry*)sfx)->getCont() &&
+ ((compoundforbidflag && TESTAFF(((SfxEntry*)sfx)->getCont(), compoundforbidflag,
+ ((SfxEntry*)sfx)->getContLen())) || (compoundend &&
+ TESTAFF(((SfxEntry*)sfx)->getCont(), compoundend,
+ ((SfxEntry*)sfx)->getContLen())))) {
+ rv = NULL;
+ }
+ }
+
+ if (rv ||
+ (((wordnum == 0) && compoundbegin &&
+ ((rv = suffix_check(st, i, 0, NULL, NULL, 0, NULL, FLAG_NULL, compoundbegin, hu_mov_rule ? IN_CPD_OTHER : IN_CPD_BEGIN)) ||
+ (rv = prefix_check(st, i, hu_mov_rule ? IN_CPD_OTHER : IN_CPD_BEGIN, compoundbegin)))) ||
+ ((wordnum > 0) && compoundmiddle &&
+ ((rv = suffix_check(st, i, 0, NULL, NULL, 0, NULL, FLAG_NULL, compoundmiddle, hu_mov_rule ? IN_CPD_OTHER : IN_CPD_BEGIN)) ||
+ (rv = prefix_check(st, i, hu_mov_rule ? IN_CPD_OTHER : IN_CPD_BEGIN, compoundmiddle)))))
+ ) {
+ //char * p = prefix_check_morph(st, i, 0, compound);
+ char * p = NULL;
+ if (compoundflag) p = affix_check_morph(st, i, compoundflag);
+ if (!p || (*p == '\0')) {
+ if ((wordnum == 0) && compoundbegin) {
+ p = affix_check_morph(st, i, compoundbegin);
+ } else if ((wordnum > 0) && compoundmiddle) {
+ p = affix_check_morph(st, i, compoundmiddle);
+ }
+ }
+ if (*p != '\0') {
+ line_uniq(p);
+ if (strchr(p, '\n')) {
+ strcat(presult, "(");
+ strcat(presult, line_join(p, '|'));
+ strcat(presult, ")");
+ } else {
+ strcat(presult, p);
+ }
+ }
+ if (presult[strlen(presult) - 1] == '\n') {
+ presult[strlen(presult) - 1] = '\0';
+ }
+ checked_prefix = 1;
+ //strcat(presult, "+");
+ }
+ // else check forbiddenwords
+ } else if (rv->astr && (TESTAFF(rv->astr, forbiddenword, rv->alen) ||
+ TESTAFF(rv->astr, pseudoroot, rv->alen))) {
+ st[i] = ch;
+ continue;
+ }
+
+ // check non_compound flag in suffix and prefix
+ if ((rv) && !hu_mov_rule &&
+ ((pfx && ((PfxEntry*)pfx)->getCont() &&
+ TESTAFF(((PfxEntry*)pfx)->getCont(), compoundforbidflag,
+ ((PfxEntry*)pfx)->getContLen())) ||
+ (sfx && ((SfxEntry*)sfx)->getCont() &&
+ TESTAFF(((SfxEntry*)sfx)->getCont(), compoundforbidflag,
+ ((SfxEntry*)sfx)->getContLen())))) {
+ continue;
+ }
+
+ // check compoundend flag in suffix and prefix
+ if ((rv) && !checked_prefix && compoundend && !hu_mov_rule &&
+ ((pfx && ((PfxEntry*)pfx)->getCont() &&
+ TESTAFF(((PfxEntry*)pfx)->getCont(), compoundend,
+ ((PfxEntry*)pfx)->getContLen())) ||
+ (sfx && ((SfxEntry*)sfx)->getCont() &&
+ TESTAFF(((SfxEntry*)sfx)->getCont(), compoundend,
+ ((SfxEntry*)sfx)->getContLen())))) {
+ continue;
+ }
+
+ // check compoundmiddle flag in suffix and prefix
+ if ((rv) && !checked_prefix && (wordnum==0) && compoundmiddle && !hu_mov_rule &&
+ ((pfx && ((PfxEntry*)pfx)->getCont() &&
+ TESTAFF(((PfxEntry*)pfx)->getCont(), compoundmiddle,
+ ((PfxEntry*)pfx)->getContLen())) ||
+ (sfx && ((SfxEntry*)sfx)->getCont() &&
+ TESTAFF(((SfxEntry*)sfx)->getCont(), compoundmiddle,
+ ((SfxEntry*)sfx)->getContLen())))) {
+ rv = NULL;
+ }
+
+ // check forbiddenwords
+ if ((rv) && (rv->astr) && TESTAFF(rv->astr, forbiddenword, rv->alen)) continue;
+
+ // increment word number, if the second root has a compoundroot flag
+ if ((rv) && (compoundroot) &&
+ (TESTAFF(rv->astr, compoundroot, rv->alen))) {
+ wordnum++;
+ }
+
+ // first word is acceptable in compound words?
+ if (((rv) &&
+ ( checked_prefix || (words && words[wnum]) ||
+ (compoundflag && TESTAFF(rv->astr, compoundflag, rv->alen)) ||
+ ((oldwordnum == 0) && compoundbegin && TESTAFF(rv->astr, compoundbegin, rv->alen)) ||
+ ((oldwordnum > 0) && compoundmiddle && TESTAFF(rv->astr, compoundmiddle, rv->alen))
+// LANG_hu section: spec. Hungarian rule
+ || ((langnum == LANG_hu) && // hu_mov_rule
+ hu_mov_rule && (
+ TESTAFF(rv->astr, 'F', rv->alen) ||
+ TESTAFF(rv->astr, 'G', rv->alen) ||
+ TESTAFF(rv->astr, 'H', rv->alen)
+ )
+ )
+// END of LANG_hu section
+ )
+ && ! (( checkcompoundtriple && // test triple letters
+ (word[i-1]==word[i]) && (
+ ((i>1) && (word[i-1]==word[i-2])) ||
+ ((word[i-1]==word[i+1])) // may be word[i+1] == '\0'
+ )
+ ) ||
+ (
+ // test CHECKCOMPOUNDPATTERN
+ numcheckcpd && cpdpat_check(word, i)
+ ) ||
+ (
+ checkcompoundcase && cpdcase_check(word, i)
+ ))
+ )
+// LANG_hu section: spec. Hungarian rule
+ || ((!rv) && (langnum == LANG_hu) && hu_mov_rule && (rv = affix_check(st,i)) &&
+ (sfx && ((SfxEntry*)sfx)->getCont() && (
+ TESTAFF(((SfxEntry*)sfx)->getCont(), (unsigned short) 'x', ((SfxEntry*)sfx)->getContLen()) ||
+ TESTAFF(((SfxEntry*)sfx)->getCont(), (unsigned short) '%', ((SfxEntry*)sfx)->getContLen())
+ )
+ )
+ )
+// END of LANG_hu section
+ ) {
+
+// LANG_hu section: spec. Hungarian rule
+ if (langnum == LANG_hu) {
+ // calculate syllable number of the word
+ numsyllable += get_syllable(st, i);
+
+ // + 1 word, if syllable number of the prefix > 1 (hungarian convention)
+ if (pfx && (get_syllable(((PfxEntry *)pfx)->getKey(),strlen(((PfxEntry *)pfx)->getKey())) > 1)) wordnum++;
+ }
+// END of LANG_hu section
+
+ // NEXT WORD(S)
+ rv_first = rv;
+ rv = lookup((word+i)); // perhaps without prefix
+
+ // search homonym with compound flag
+ while ((rv) && ((pseudoroot && TESTAFF(rv->astr, pseudoroot, rv->alen)) ||
+ !((compoundflag && !words && TESTAFF(rv->astr, compoundflag, rv->alen)) ||
+ (compoundend && !words && TESTAFF(rv->astr, compoundend, rv->alen)) ||
+ (numdefcpd && defcpd_check(&words, wnum + 1, rv, NULL,1))))) {
+ rv = rv->next_homonym;
+ }
+
+ if (rv && words && words[wnum + 1]) {
+ strcat(*result, presult);
+ if (complexprefixes && rv->description) strcat(*result, rv->description);
+ if (rv->description && ((!rv->astr) ||
+ !TESTAFF(rv->astr, lemma_present, rv->alen)))
+ strcat(*result, rv->word);
+ if (!complexprefixes && rv->description) strcat(*result, rv->description);
+ strcat(*result, "\n");
+ ok = 1;
+ return 0;
+ }
+
+ oldnumsyllable2 = numsyllable;
+ oldwordnum2 = wordnum;
+
+// LANG_hu section: spec. Hungarian rule
+ if ((rv) && (langnum == LANG_hu) && (TESTAFF(rv->astr, 'I', rv->alen)) && !(TESTAFF(rv->astr, 'J', rv->alen))) {
+ numsyllable--;
+ }
+// END of LANG_hu section
+ // increment word number, if the second root has a compoundroot flag
+ if ((rv) && (compoundroot) &&
+ (TESTAFF(rv->astr, compoundroot, rv->alen))) {
+ wordnum++;
+ }
+
+ // check forbiddenwords
+ if ((rv) && (rv->astr) && TESTAFF(rv->astr, forbiddenword, rv->alen)) {
+ st[i] = ch;
+ continue;
+ }
+
+ // second word is acceptable, as a root?
+ // hungarian conventions: compounding is acceptable,
+ // when compound forms consist of 2 words, or if more,
+ // then the syllable number of root words must be 6, or lesser.
+ if ((rv) && (
+ (compoundflag && TESTAFF(rv->astr, compoundflag, rv->alen)) ||
+ (compoundend && TESTAFF(rv->astr, compoundend, rv->alen))
+ )
+ && (
+ ((cpdwordmax==-1) || (wordnum+1<cpdwordmax)) ||
+ ((cpdmaxsyllable==0) ||
+ (numsyllable+get_syllable(rv->word,rv->wlen)<=cpdmaxsyllable))
+ )
+ && (
+ (!checkcompounddup || (rv != rv_first))
+ )
+ )
+ {
+ // bad compound word
+ strcat(*result, presult);
+
+ if (rv->description) {
+ if (complexprefixes) strcat(*result, rv->description);
+ if ((!rv->astr) || !TESTAFF(rv->astr, lemma_present, rv->alen))
+ strcat(*result, rv->word);
+ if (!complexprefixes) strcat(*result, rv->description);
+ }
+ strcat(*result, "\n");
+ ok = 1;
+ }
+
+ numsyllable = oldnumsyllable2 ;
+ wordnum = oldwordnum2;
+
+ // perhaps second word has prefix or/and suffix
+ sfx = NULL;
+ sfxflag = FLAG_NULL;
+
+ if (compoundflag) rv = affix_check((word+i),strlen(word+i), compoundflag); else rv = NULL;
+
+ if (!rv && compoundend) {
+ sfx = NULL;
+ pfx = NULL;
+ rv = affix_check((word+i),strlen(word+i), compoundend);
+ }
+
+ if (!rv && numdefcpd && words) {
+ rv = affix_check((word+i),strlen(word+i), 0, IN_CPD_END);
+ if (rv && words && defcpd_check(&words, wnum + 1, rv, NULL, 1)) {
+ char * m = NULL;
+ if (compoundflag) m = affix_check_morph((word+i),strlen(word+i), compoundflag);
+ if ((!m || *m == '\0') && compoundend)
+ m = affix_check_morph((word+i),strlen(word+i), compoundend);
+ strcat(*result, presult);
+ if (m) {
+ line_uniq(m);
+ if (strchr(m, '\n')) {
+ strcat(*result, "(");
+ strcat(*result, line_join(m, '|'));
+ strcat(*result, ")");
+ } else {
+ strcat(*result, m);
+ }
+ free(m);
+ }
+ strcat(*result, "\n");
+ ok = 1;
+ }
+ }
+
+ // check non_compound flag in suffix and prefix
+ if ((rv) &&
+ ((pfx && ((PfxEntry*)pfx)->getCont() &&
+ TESTAFF(((PfxEntry*)pfx)->getCont(), compoundforbidflag,
+ ((PfxEntry*)pfx)->getContLen())) ||
+ (sfx && ((SfxEntry*)sfx)->getCont() &&
+ TESTAFF(((SfxEntry*)sfx)->getCont(), compoundforbidflag,
+ ((SfxEntry*)sfx)->getContLen())))) {
+ rv = NULL;
+ }
+
+ // check forbiddenwords
+ if ((rv) && (rv->astr) && (TESTAFF(rv->astr,forbiddenword,rv->alen))
+ && (! TESTAFF(rv->astr, pseudoroot, rv->alen))) {
+ st[i] = ch;
+ continue;
+ }
+
+ if (langnum == LANG_hu) {
+ // calculate syllable number of the word
+ numsyllable += get_syllable(word + i, strlen(word + i));
+
+ // - affix syllable num.
+ // XXX only second suffix (inflections, not derivations)
+ if (sfxappnd) {
+ char * tmp = myrevstrdup(sfxappnd);
+ numsyllable -= get_syllable(tmp, strlen(tmp));
+ free(tmp);
+ }
+
+ // + 1 word, if syllable number of the prefix > 1 (hungarian convention)
+ if (pfx && (get_syllable(((PfxEntry *)pfx)->getKey(),strlen(((PfxEntry *)pfx)->getKey())) > 1)) wordnum++;
+
+ // increment syllable num, if last word has a SYLLABLENUM flag
+ // and the suffix is beginning `s'
+
+ if (cpdsyllablenum) {
+ switch (sfxflag) {
+ case 'c': { numsyllable+=2; break; }
+ case 'J': { numsyllable += 1; break; }
+ case 'I': { if (rv && TESTAFF(rv->astr, 'J', rv->alen)) numsyllable += 1; break; }
+ }
+ }
+ }
+
+ // increment word number, if the second word has a compoundroot flag
+ if ((rv) && (compoundroot) &&
+ (TESTAFF(rv->astr, compoundroot, rv->alen))) {
+ wordnum++;
+ }
+ // second word is acceptable, as a word with prefix or/and suffix?
+ // hungarian conventions: compounding is acceptable,
+ // when compound forms consist 2 word, otherwise
+ // the syllable number of root words is 6, or lesser.
+ if ((rv) &&
+ (
+ ((cpdwordmax==-1) || (wordnum+1<cpdwordmax)) ||
+ ((cpdmaxsyllable==0) ||
+ (numsyllable <= cpdmaxsyllable))
+ )
+ && (
+ (!checkcompounddup || (rv != rv_first))
+ )) {
+ char * m = NULL;
+ if (compoundflag) m = affix_check_morph((word+i),strlen(word+i), compoundflag);
+ if ((!m || *m == '\0') && compoundend)
+ m = affix_check_morph((word+i),strlen(word+i), compoundend);
+ strcat(*result, presult);
+ if (m) {
+ line_uniq(m);
+ if (strchr(m, '\n')) {
+ strcat(*result, "(");
+ strcat(*result, line_join(m, '|'));
+ strcat(*result, ")");
+ } else {
+ strcat(*result, m);
+ }
+ free(m);
+ }
+ strcat(*result, "\n");
+ ok = 1;
+ }
+
+ numsyllable = oldnumsyllable2;
+ wordnum = oldwordnum2;
+
+ // perhaps second word is a compound word (recursive call)
+ if ((wordnum < maxwordnum) && (ok == 0)) {
+ compound_check_morph((word+i),strlen(word+i), wordnum+1,
+ numsyllable, maxwordnum, wnum + 1, words, 0, result, presult);
+ } else {
+ rv=NULL;
+ }
+ }
+ st[i] = ch;
+ wordnum = oldwordnum;
+ numsyllable = oldnumsyllable;
+ }
+ return 0;
+}
+#endif // END OF HUNSPELL_EXPERIMENTAL CODE
+
+ // return 1 if s1 (reversed) is a leading subset of end of s2
+/* inline int AffixMgr::isRevSubset(const char * s1, const char * end_of_s2, int len)
+ {
+ while ((len > 0) && *s1 && (*s1 == *end_of_s2)) {
+ s1++;
+ end_of_s2--;
+ len--;
+ }
+ return (*s1 == '\0');
+ }
+ */
+
+inline int AffixMgr::isRevSubset(const char * s1, const char * end_of_s2, int len)
+ {
+ while ((len > 0) && (*s1 != '\0') && ((*s1 == *end_of_s2) || (*s1 == '.'))) {
+ s1++;
+ end_of_s2--;
+ len--;
+ }
+ return (*s1 == '\0');
+ }
+
+// check word for suffixes
+
+struct hentry * AffixMgr::suffix_check (const char * word, int len,
+ int sfxopts, AffEntry * ppfx, char ** wlst, int maxSug, int * ns,
+ const FLAG cclass, const FLAG needflag, char in_compound)
+{
+ struct hentry * rv = NULL;
+ char result[MAXLNLEN];
+
+ PfxEntry* ep = (PfxEntry *) ppfx;
+
+ // first handle the special case of 0 length suffixes
+ SfxEntry * se = (SfxEntry *) sStart[0];
+
+ while (se) {
+ if (!cclass || se->getCont()) {
+ // suffixes are not allowed in beginning of compounds
+ if ((((in_compound != IN_CPD_BEGIN)) || // && !cclass
+ // except when signed with compoundpermitflag flag
+ (se->getCont() && compoundpermitflag &&
+ TESTAFF(se->getCont(),compoundpermitflag,se->getContLen()))) && (!circumfix ||
+ // no circumfix flag in prefix and suffix
+ ((!ppfx || !(ep->getCont()) || !TESTAFF(ep->getCont(),
+ circumfix, ep->getContLen())) &&
+ (!se->getCont() || !(TESTAFF(se->getCont(),circumfix,se->getContLen())))) ||
+ // circumfix flag in prefix AND suffix
+ ((ppfx && (ep->getCont()) && TESTAFF(ep->getCont(),
+ circumfix, ep->getContLen())) &&
+ (se->getCont() && (TESTAFF(se->getCont(),circumfix,se->getContLen()))))) &&
+ // fogemorpheme
+ (in_compound ||
+ !((se->getCont() && (TESTAFF(se->getCont(), onlyincompound, se->getContLen()))))) &&
+ // pseudoroot on prefix or first suffix
+ (cclass ||
+ !(se->getCont() && TESTAFF(se->getCont(), pseudoroot, se->getContLen())) ||
+ (ppfx && !((ep->getCont()) &&
+ TESTAFF(ep->getCont(), pseudoroot,
+ ep->getContLen())))
+ )
+ ) {
+ rv = se->checkword(word,len, sfxopts, ppfx, wlst, maxSug, ns, (FLAG) cclass,
+ needflag, (in_compound ? 0 : onlyincompound));
+ if (rv) {
+ sfx=(AffEntry *)se; // BUG: sfx not stateless
+ return rv;
+ }
+ }
+ }
+ se = se->getNext();
+ }
+
+ // now handle the general case
+ unsigned char sp = *((const unsigned char *)(word + len - 1));
+ SfxEntry * sptr = (SfxEntry *) sStart[sp];
+
+ while (sptr) {
+ if (isRevSubset(sptr->getKey(), word + len - 1, len)
+ ) {
+ // suffixes are not allowed in beginning of compounds
+ if ((((in_compound != IN_CPD_BEGIN)) || // && !cclass
+ // except when signed with compoundpermitflag flag
+ (sptr->getCont() && compoundpermitflag &&
+ TESTAFF(sptr->getCont(),compoundpermitflag,sptr->getContLen()))) && (!circumfix ||
+ // no circumfix flag in prefix and suffix
+ ((!ppfx || !(ep->getCont()) || !TESTAFF(ep->getCont(),
+ circumfix, ep->getContLen())) &&
+ (!sptr->getCont() || !(TESTAFF(sptr->getCont(),circumfix,sptr->getContLen())))) ||
+ // circumfix flag in prefix AND suffix
+ ((ppfx && (ep->getCont()) && TESTAFF(ep->getCont(),
+ circumfix, ep->getContLen())) &&
+ (sptr->getCont() && (TESTAFF(sptr->getCont(),circumfix,sptr->getContLen()))))) &&
+ // fogemorpheme
+ (in_compound ||
+ !((sptr->getCont() && (TESTAFF(sptr->getCont(), onlyincompound, sptr->getContLen()))))) &&
+ // pseudoroot on prefix or first suffix
+ (cclass ||
+ !(sptr->getCont() && TESTAFF(sptr->getCont(), pseudoroot, sptr->getContLen())) ||
+ (ppfx && !((ep->getCont()) &&
+ TESTAFF(ep->getCont(), pseudoroot,
+ ep->getContLen())))
+ )
+ ) {
+ rv = sptr->checkword(word,len, sfxopts, ppfx, wlst,
+ maxSug, ns, cclass, needflag, (in_compound ? 0 : onlyincompound));
+ if (rv) {
+ sfx=(AffEntry *)sptr; // BUG: sfx not stateless
+ sfxflag = sptr->getFlag(); // BUG: sfxflag not stateless
+ if (!sptr->getCont()) sfxappnd=sptr->getKey(); // BUG: sfxappnd not stateless
+ if (cclass || sptr->getCont()) {
+ if (!derived) {
+ derived = mystrdup(word);
+ } else {
+ strcpy(result, derived); // XXX check size
+ strcat(result, "\n");
+ strcat(result, word);
+ free(derived);
+ derived = mystrdup(result);
+ }
+ }
+ return rv;
+ }
+ }
+ sptr = sptr->getNextEQ();
+ } else {
+ sptr = sptr->getNextNE();
+ }
+ }
+
+ return NULL;
+}
+
+// check word for two-level suffixes
+
+struct hentry * AffixMgr::suffix_check_twosfx(const char * word, int len,
+ int sfxopts, AffEntry * ppfx, const FLAG needflag)
+{
+ struct hentry * rv = NULL;
+
+ // first handle the special case of 0 length suffixes
+ SfxEntry * se = (SfxEntry *) sStart[0];
+ while (se) {
+ if (contclasses[se->getFlag()])
+ {
+ rv = se->check_twosfx(word,len, sfxopts, ppfx, needflag);
+ if (rv) return rv;
+ }
+ se = se->getNext();
+ }
+
+ // now handle the general case
+ unsigned char sp = *((const unsigned char *)(word + len - 1));
+ SfxEntry * sptr = (SfxEntry *) sStart[sp];
+
+ while (sptr) {
+ if (isRevSubset(sptr->getKey(), word + len - 1, len)) {
+ if (contclasses[sptr->getFlag()])
+ {
+ rv = sptr->check_twosfx(word,len, sfxopts, ppfx, needflag);
+ if (rv) {
+ sfxflag = sptr->getFlag(); // BUG: sfxflag not stateless
+ if (!sptr->getCont()) sfxappnd=sptr->getKey(); // BUG: sfxappnd not stateless
+ return rv;
+ }
+ }
+ sptr = sptr->getNextEQ();
+ } else {
+ sptr = sptr->getNextNE();
+ }
+ }
+
+ return NULL;
+}
+
+#ifdef HUNSPELL_EXPERIMENTAL
+char * AffixMgr::suffix_check_twosfx_morph(const char * word, int len,
+ int sfxopts, AffEntry * ppfx, const FLAG needflag)
+{
+ char result[MAXLNLEN];
+ char result2[MAXLNLEN];
+ char result3[MAXLNLEN];
+
+ char * st;
+
+ result[0] = '\0';
+ result2[0] = '\0';
+ result3[0] = '\0';
+
+ // first handle the special case of 0 length suffixes
+ SfxEntry * se = (SfxEntry *) sStart[0];
+ while (se) {
+ if (contclasses[se->getFlag()])
+ {
+ st = se->check_twosfx_morph(word,len, sfxopts, ppfx, needflag);
+ if (st) {
+ if (ppfx) {
+ if (((PfxEntry *) ppfx)->getMorph()) strcat(result, ((PfxEntry *) ppfx)->getMorph());
+ }
+ strcat(result, st);
+ free(st);
+ if (se->getMorph()) strcat(result, se->getMorph());
+ strcat(result, "\n");
+ }
+ }
+ se = se->getNext();
+ }
+
+ // now handle the general case
+ unsigned char sp = *((const unsigned char *)(word + len - 1));
+ SfxEntry * sptr = (SfxEntry *) sStart[sp];
+
+ while (sptr) {
+ if (isRevSubset(sptr->getKey(), word + len - 1, len)) {
+ if (contclasses[sptr->getFlag()])
+ {
+ st = sptr->check_twosfx_morph(word,len, sfxopts, ppfx, needflag);
+ if (st) {
+ sfxflag = sptr->getFlag(); // BUG: sfxflag not stateless
+ if (!sptr->getCont()) sfxappnd=sptr->getKey(); // BUG: sfxappnd not stateless
+ strcpy(result2, st);
+ free(st);
+
+ result3[0] = '\0';
+#ifdef DEBUG
+ unsigned short flag = sptr->getFlag();
+ if (flag_mode == FLAG_NUM) {
+ sprintf(result3, "<%d>", sptr->getKey());
+ } else if (flag_mode == FLAG_LONG) {
+ sprintf(result3, "<%c%c>", flag >> 8, (flag << 8) >>8);
+ } else sprintf(result3, "<%c>", flag);
+ strcat(result3, ":");
+#endif
+ if (sptr->getMorph()) strcat(result3, sptr->getMorph());
+ strlinecat(result2, result3);
+ strcat(result2, "\n");
+ strcat(result, result2);
+ }
+ }
+ sptr = sptr->getNextEQ();
+ } else {
+ sptr = sptr->getNextNE();
+ }
+ }
+ if (result) return mystrdup(result);
+ return NULL;
+}
+
+char * AffixMgr::suffix_check_morph(const char * word, int len,
+ int sfxopts, AffEntry * ppfx, const FLAG cclass, const FLAG needflag, char in_compound)
+{
+ char result[MAXLNLEN];
+
+ struct hentry * rv = NULL;
+
+ result[0] = '\0';
+
+ PfxEntry* ep = (PfxEntry *) ppfx;
+
+ // first handle the special case of 0 length suffixes
+ SfxEntry * se = (SfxEntry *) sStart[0];
+ while (se) {
+ if (!cclass || se->getCont()) {
+ // suffixes are not allowed in beginning of compounds
+ if (((((in_compound != IN_CPD_BEGIN)) || // && !cclass
+ // except when signed with compoundpermitflag flag
+ (se->getCont() && compoundpermitflag &&
+ TESTAFF(se->getCont(),compoundpermitflag,se->getContLen()))) && (!circumfix ||
+ // no circumfix flag in prefix and suffix
+ ((!ppfx || !(ep->getCont()) || !TESTAFF(ep->getCont(),
+ circumfix, ep->getContLen())) &&
+ (!se->getCont() || !(TESTAFF(se->getCont(),circumfix,se->getContLen())))) ||
+ // circumfix flag in prefix AND suffix
+ ((ppfx && (ep->getCont()) && TESTAFF(ep->getCont(),
+ circumfix, ep->getContLen())) &&
+ (se->getCont() && (TESTAFF(se->getCont(),circumfix,se->getContLen()))))) &&
+ // fogemorpheme
+ (in_compound ||
+ !((se->getCont() && (TESTAFF(se->getCont(), onlyincompound, se->getContLen()))))) &&
+ // pseudoroot on prefix or first suffix
+ (cclass ||
+ !(se->getCont() && TESTAFF(se->getCont(), pseudoroot, se->getContLen())) ||
+ (ppfx && !((ep->getCont()) &&
+ TESTAFF(ep->getCont(), pseudoroot,
+ ep->getContLen())))
+ )
+ ))
+ rv = se->checkword(word,len, sfxopts, ppfx, NULL, 0, 0, cclass, needflag);
+ while (rv) {
+ if (ppfx) {
+ if (((PfxEntry *) ppfx)->getMorph()) strcat(result, ((PfxEntry *) ppfx)->getMorph());
+ }
+ if (complexprefixes && rv->description) strcat(result, rv->description);
+ if (rv->description && ((!rv->astr) ||
+ !TESTAFF(rv->astr, lemma_present, rv->alen)))
+ strcat(result, rv->word);
+ if (!complexprefixes && rv->description) strcat(result, rv->description);
+ if (se->getMorph()) strcat(result, se->getMorph());
+ strcat(result, "\n");
+ rv = se->get_next_homonym(rv, sfxopts, ppfx, cclass, needflag);
+ }
+ }
+ se = se->getNext();
+ }
+
+ // now handle the general case
+ unsigned char sp = *((const unsigned char *)(word + len - 1));
+ SfxEntry * sptr = (SfxEntry *) sStart[sp];
+
+ while (sptr) {
+ if (isRevSubset(sptr->getKey(), word + len - 1, len)
+ ) {
+ // suffixes are not allowed in beginning of compounds
+ if (((((in_compound != IN_CPD_BEGIN)) || // && !cclass
+ // except when signed with compoundpermitflag flag
+ (sptr->getCont() && compoundpermitflag &&
+ TESTAFF(sptr->getCont(),compoundpermitflag,sptr->getContLen()))) && (!circumfix ||
+ // no circumfix flag in prefix and suffix
+ ((!ppfx || !(ep->getCont()) || !TESTAFF(ep->getCont(),
+ circumfix, ep->getContLen())) &&
+ (!sptr->getCont() || !(TESTAFF(sptr->getCont(),circumfix,sptr->getContLen())))) ||
+ // circumfix flag in prefix AND suffix
+ ((ppfx && (ep->getCont()) && TESTAFF(ep->getCont(),
+ circumfix, ep->getContLen())) &&
+ (sptr->getCont() && (TESTAFF(sptr->getCont(),circumfix,sptr->getContLen()))))) &&
+ // fogemorpheme
+ (in_compound ||
+ !((sptr->getCont() && (TESTAFF(sptr->getCont(), onlyincompound, sptr->getContLen()))))) &&
+ // pseudoroot on first suffix
+ (cclass || !(sptr->getCont() &&
+ TESTAFF(sptr->getCont(), pseudoroot, sptr->getContLen())))
+ )) rv = sptr->checkword(word,len, sfxopts, ppfx, NULL, 0, 0, cclass, needflag);
+ while (rv) {
+ if (ppfx) {
+ if (((PfxEntry *) ppfx)->getMorph()) strcat(result, ((PfxEntry *) ppfx)->getMorph());
+ }
+ if (complexprefixes && rv->description) strcat(result, rv->description);
+ if (rv->description && ((!rv->astr) ||
+ !TESTAFF(rv->astr, lemma_present, rv->alen))) strcat(result, rv->word);
+ if (!complexprefixes && rv->description) strcat(result, rv->description);
+#ifdef DEBUG
+ unsigned short flag = sptr->getFlag();
+ if (flag_mode == FLAG_NUM) {
+ sprintf(result, "<%d>", sptr->getKey());
+ } else if (flag_mode == FLAG_LONG) {
+ sprintf(result, "<%c%c>", flag >> 8, (flag << 8) >>8);
+ } else sprintf(result, "<%c>", flag);
+ strcat(result, ":");
+#endif
+
+ if (sptr->getMorph()) strcat(result, sptr->getMorph());
+ strcat(result, "\n");
+ rv = sptr->get_next_homonym(rv, sfxopts, ppfx, cclass, needflag);
+ }
+ sptr = sptr->getNextEQ();
+ } else {
+ sptr = sptr->getNextNE();
+ }
+ }
+
+ if (*result) return mystrdup(result);
+ return NULL;
+}
+#endif // END OF HUNSPELL_EXPERIMENTAL CODE
+
+
+// check if word with affixes is correctly spelled
+struct hentry * AffixMgr::affix_check (const char * word, int len, const FLAG needflag, char in_compound)
+{
+ struct hentry * rv= NULL;
+ if (derived) free(derived);
+ derived = NULL;
+
+ // check all prefixes (also crossed with suffixes if allowed)
+ rv = prefix_check(word, len, in_compound, needflag);
+ if (rv) return rv;
+
+ // if still not found check all suffixes
+ rv = suffix_check(word, len, 0, NULL, NULL, 0, NULL, FLAG_NULL, needflag, in_compound);
+
+ if (havecontclass) {
+ sfx = NULL;
+ pfx = NULL;
+ if (rv) return rv;
+ // if still not found check all two-level suffixes
+ rv = suffix_check_twosfx(word, len, 0, NULL, needflag);
+ if (rv) return rv;
+ // if still not found check all two-level suffixes
+ rv = prefix_check_twosfx(word, len, IN_CPD_NOT, needflag);
+ }
+ return rv;
+}
+
+#ifdef HUNSPELL_EXPERIMENTAL
+// check if word with affixes is correctly spelled
+char * AffixMgr::affix_check_morph(const char * word, int len, const FLAG needflag, char in_compound)
+{
+ char result[MAXLNLEN];
+ char * st = NULL;
+
+ *result = '\0';
+
+ // check all prefixes (also crossed with suffixes if allowed)
+ st = prefix_check_morph(word, len, in_compound);
+ if (st) {
+ strcat(result, st);
+ free(st);
+ }
+
+ // if still not found check all suffixes
+ st = suffix_check_morph(word, len, 0, NULL, '\0', needflag, in_compound);
+ if (st) {
+ strcat(result, st);
+ free(st);
+ }
+
+ if (havecontclass) {
+ sfx = NULL;
+ pfx = NULL;
+ // if still not found check all two-level suffixes
+ st = suffix_check_twosfx_morph(word, len, 0, NULL, needflag);
+ if (st) {
+ strcat(result, st);
+ free(st);
+ }
+
+ // if still not found check all two-level suffixes
+ st = prefix_check_twosfx_morph(word, len, IN_CPD_NOT, needflag);
+ if (st) {
+ strcat(result, st);
+ free(st);
+ }
+ }
+
+ return mystrdup(result);
+}
+#endif // END OF HUNSPELL_EXPERIMENTAL CODE
+
+
+int AffixMgr::expand_rootword(struct guessword * wlst, int maxn, const char * ts,
+ int wl, const unsigned short * ap, unsigned short al, char * bad, int badl)
+{
+
+ int nh=0;
+
+ // first add root word to list
+ if ((nh < maxn) && !(al && ((pseudoroot && TESTAFF(ap, pseudoroot, al)) ||
+ (onlyincompound && TESTAFF(ap, onlyincompound, al))))) {
+ wlst[nh].word = mystrdup(ts);
+ wlst[nh].allow = (1 == 0);
+ nh++;
+ }
+
+ // handle suffixes
+ for (int i = 0; i < al; i++) {
+#ifdef HUNSPELL_CHROME_CLIENT
+ // This change is taken from a future version of Hunspell. In other
+ // places, the index is clamped to a byte, so I think this is correct.
+ // Our array is only 256 entries anyway, so it is required.
+ const unsigned char c = (unsigned char) (ap[i] & 0x00FF);
+#else
+ unsigned short c = (unsigned short) ap[i];
+#endif
+ SfxEntry * sptr = (SfxEntry *)sFlag[c];
+ while (sptr) {
+ if (!sptr->getKeyLen() || ((badl > sptr->getKeyLen()) &&
+ (strcmp(sptr->getAffix(), bad + badl - sptr->getKeyLen()) == 0)) &&
+ // check pseudoroot flag
+ !(sptr->getCont() && ((pseudoroot &&
+ TESTAFF(sptr->getCont(), pseudoroot, sptr->getContLen())) ||
+ (circumfix &&
+ TESTAFF(sptr->getCont(), circumfix, sptr->getContLen())) ||
+ (onlyincompound &&
+ TESTAFF(sptr->getCont(), onlyincompound, sptr->getContLen()))))
+ ) {
+ char * newword = sptr->add(ts, wl);
+ if (newword) {
+ if (nh < maxn) {
+ wlst[nh].word = newword;
+ wlst[nh].allow = sptr->allowCross();
+ nh++;
+ } else {
+ free(newword);
+ }
+ }
+ }
+ sptr = (SfxEntry *)sptr ->getFlgNxt();
+ }
+ }
+
+ int n = nh;
+
+ // handle cross products of prefixes and suffixes
+ for (int j=1;j<n ;j++)
+ if (wlst[j].allow) {
+ for (int k = 0; k < al; k++) {
+#ifdef HUNSPELL_CHROME_CLIENT
+ // See similar change above.
+ const unsigned char c = (unsigned char) (ap[k] & 0x00FF);
+#else
+ unsigned short c = (unsigned short) ap[k];
+#endif
+ PfxEntry * cptr = (PfxEntry *) pFlag[c];
+ while (cptr) {
+ if (cptr->allowCross() && (!cptr->getKeyLen() || ((badl > cptr->getKeyLen()) &&
+ (strncmp(cptr->getKey(), bad, cptr->getKeyLen()) == 0)))) {
+ int l1 = strlen(wlst[j].word);
+ char * newword = cptr->add(wlst[j].word, l1);
+ if (newword) {
+ if (nh < maxn) {
+ wlst[nh].word = newword;
+ wlst[nh].allow = cptr->allowCross();
+ nh++;
+ } else {
+ free(newword);
+ }
+ }
+ }
+ cptr = (PfxEntry *)cptr ->getFlgNxt();
+ }
+ }
+ }
+
+
+ // now handle pure prefixes
+ for (int m = 0; m < al; m ++) {
+#ifdef HUNSPELL_CHROME_CLIENT
+ // See similar change above.
+ const unsigned char c = (unsigned char) (ap[m] & 0x00FF);
+#else
+ unsigned short c = (unsigned short) ap[m];
+#endif
+ PfxEntry * ptr = (PfxEntry *) pFlag[c];
+ while (ptr) {
+ if (!ptr->getKeyLen() || ((badl > ptr->getKeyLen()) &&
+ (strncmp(ptr->getKey(), bad, ptr->getKeyLen()) == 0)) &&
+ // check pseudoroot flag
+ !(ptr->getCont() && ((pseudoroot &&
+ TESTAFF(ptr->getCont(), pseudoroot, ptr->getContLen())) ||
+ (circumfix &&
+ TESTAFF(ptr->getCont(), circumfix, ptr->getContLen())) ||
+ (onlyincompound &&
+ TESTAFF(ptr->getCont(), onlyincompound, ptr->getContLen()))))
+ ) {
+ char * newword = ptr->add(ts, wl);
+ if (newword) {
+ if (nh < maxn) {
+ wlst[nh].word = newword;
+ wlst[nh].allow = ptr->allowCross();
+ nh++;
+ } else {
+ free(newword);
+ }
+ }
+ }
+ ptr = (PfxEntry *)ptr ->getFlgNxt();
+ }
+ }
+
+ return nh;
+}
+
+
+
+// return length of replacing table
+int AffixMgr::get_numrep()
+{
+ return numrep;
+}
+
+// return replacing table
+struct replentry * AffixMgr::get_reptable()
+{
+ if (! reptable ) return NULL;
+ return reptable;
+}
+
+// return length of character map table
+int AffixMgr::get_nummap()
+{
+ return nummap;
+}
+
+// return character map table
+struct mapentry * AffixMgr::get_maptable()
+{
+ if (! maptable ) return NULL;
+ return maptable;
+}
+
+// return length of word break table
+int AffixMgr::get_numbreak()
+{
+ return numbreak;
+}
+
+// return character map table
+char ** AffixMgr::get_breaktable()
+{
+ if (! breaktable ) return NULL;
+ return breaktable;
+}
+
+// return text encoding of dictionary
+char * AffixMgr::get_encoding()
+{
+ if (! encoding ) {
+ encoding = mystrdup("ISO8859-1");
+ }
+ return mystrdup(encoding);
+}
+
+// return text encoding of dictionary
+int AffixMgr::get_langnum()
+{
+ return langnum;
+}
+
+// return double prefix option
+int AffixMgr::get_complexprefixes()
+{
+ return complexprefixes;
+}
+
+FLAG AffixMgr::get_keepcase()
+{
+ return keepcase;
+}
+
+int AffixMgr::get_checksharps()
+{
+ return checksharps;
+}
+
+// return the preferred ignore string for suggestions
+char * AffixMgr::get_ignore()
+{
+ if (!ignorechars) return NULL;
+ return mystrdup(ignorechars);
+}
+
+// return the preferred ignore string for suggestions
+unsigned short * AffixMgr::get_ignore_utf16(int * len)
+{
+ *len = ignorechars_utf16_len;
+ return ignorechars_utf16;
+}
+
+// return the preferred try string for suggestions
+char * AffixMgr::get_try_string()
+{
+ if (! trystring ) return NULL;
+ return mystrdup(trystring);
+}
+
+// return the preferred try string for suggestions
+const char * AffixMgr::get_wordchars()
+{
+ return wordchars;
+}
+
+unsigned short * AffixMgr::get_wordchars_utf16(int * len)
+{
+ *len = wordchars_utf16_len;
+ return wordchars_utf16;
+}
+
+// is there compounding?
+int AffixMgr::get_compound()
+{
+ return compoundflag || compoundbegin || numdefcpd;
+}
+
+// return the compound words control flag
+FLAG AffixMgr::get_compoundflag()
+{
+ return compoundflag;
+}
+
+// return the forbidden words control flag
+FLAG AffixMgr::get_forbiddenword()
+{
+ return forbiddenword;
+}
+
+// return the forbidden words control flag
+FLAG AffixMgr::get_nosuggest()
+{
+ return nosuggest;
+}
+
+// return the forbidden words flag modify flag
+FLAG AffixMgr::get_pseudoroot()
+{
+ return pseudoroot;
+}
+
+// return the onlyincompound flag
+FLAG AffixMgr::get_onlyincompound()
+{
+ return onlyincompound;
+}
+
+// return the compound word signal flag
+FLAG AffixMgr::get_compoundroot()
+{
+ return compoundroot;
+}
+
+// return the compound begin signal flag
+FLAG AffixMgr::get_compoundbegin()
+{
+ return compoundbegin;
+}
+
+// return the value of checknum
+int AffixMgr::get_checknum()
+{
+ return checknum;
+}
+
+// return the value of prefix
+const char * AffixMgr::get_prefix()
+{
+ if (pfx) return ((PfxEntry *)pfx)->getKey();
+ return NULL;
+}
+
+// return the value of suffix
+const char * AffixMgr::get_suffix()
+{
+ return sfxappnd;
+}
+
+// return the value of derived form (base word with first suffix).
+const char * AffixMgr::get_derived()
+{
+ return derived;
+}
+
+// return the value of suffix
+const char * AffixMgr::get_version()
+{
+ return version;
+}
+
+// return lemma_present flag
+FLAG AffixMgr::get_lemma_present()
+{
+ return lemma_present;
+}
+
+// utility method to look up root words in hash table
+struct hentry * AffixMgr::lookup(const char * word)
+{
+ if (! pHMgr) return NULL;
+ return pHMgr->lookup(word);
+}
+
+// return the value of suffix
+const int AffixMgr::have_contclass()
+{
+ return havecontclass;
+}
+
+// return utf8
+int AffixMgr::get_utf8()
+{
+ return utf8;
+}
+
+// return nosplitsugs
+int AffixMgr::get_maxngramsugs(void)
+{
+ return maxngramsugs;
+}
+
+// return nosplitsugs
+int AffixMgr::get_nosplitsugs(void)
+{
+ return nosplitsugs;
+}
+
+// return sugswithdots
+int AffixMgr::get_sugswithdots(void)
+{
+ return sugswithdots;
+}
+
+/* parse flag */
+int AffixMgr::parse_flag(char * line, unsigned short * out, const char * name) {
+ char * s = NULL;
+ if (*out != FLAG_NULL) {
+ HUNSPELL_WARNING(stderr, "error: duplicate %s line\n", name);
+ return 1;
+ }
+ if (parse_string(line, &s, name)) return 1;
+ *out = pHMgr->decode_flag(s);
+ free(s);
+ return 0;
+}
+
+/* parse num */
+int AffixMgr::parse_num(char * line, int * out, const char * name) {
+ char * s = NULL;
+ if (*out != -1) {
+ HUNSPELL_WARNING(stderr, "error: duplicate %s line\n", name);
+ return 1;
+ }
+ if (parse_string(line, &s, name)) return 1;
+ *out = atoi(s);
+ free(s);
+ return 0;
+}
+
+/* parse in the max syllablecount of compound words and */
+int AffixMgr::parse_cpdsyllable(char * line)
+{
+ char * tp = line;
+ char * piece;
+ int i = 0;
+ int np = 0;
+ w_char w[MAXWORDLEN];
+ piece = mystrsep(&tp, 0);
+ while (piece) {
+ if (*piece != '\0') {
+ switch(i) {
+ case 0: { np++; break; }
+ case 1: { cpdmaxsyllable = atoi(piece); np++; break; }
+ case 2: {
+ if (!utf8) {
+ cpdvowels = mystrdup(piece);
+ } else {
+ int n = u8_u16(w, MAXWORDLEN, piece);
+ if (n > 0) {
+ flag_qsort((unsigned short *) w, 0, n);
+ cpdvowels_utf16 = (w_char *) malloc(n * sizeof(w_char));
+ if (!cpdvowels_utf16) return 1;
+ memcpy(cpdvowels_utf16, w, n * sizeof(w_char));
+ }
+ cpdvowels_utf16_len = n;
+ }
+ np++;
+ break;
+ }
+ default: break;
+ }
+ i++;
+ }
+ free(piece);
+ piece = mystrsep(&tp, 0);
+ }
+ if (np < 2) {
+ HUNSPELL_WARNING(stderr, "error: missing compoundsyllable information\n");
+ return 1;
+ }
+ if (np == 2) cpdvowels = mystrdup("aeiouAEIOU");
+ return 0;
+}
+
+/* parse in the typical fault correcting table */
+#ifndef HUNSPELL_CHROME_CLIENT
+int AffixMgr::parse_reptable(char * line, FILE * af)
+{
+ if (numrep != 0) {
+ HUNSPELL_WARNING(stderr, "error: duplicate REP tables used\n");
+ return 1;
+ }
+ char * tp = line;
+ char * piece;
+ int i = 0;
+ int np = 0;
+ piece = mystrsep(&tp, 0);
+ while (piece) {
+ if (*piece != '\0') {
+ switch(i) {
+ case 0: { np++; break; }
+ case 1: {
+ numrep = atoi(piece);
+ if (numrep < 1) {
+ HUNSPELL_WARNING(stderr, "incorrect number of entries in replacement table\n");
+ free(piece);
+ return 1;
+ }
+ reptable = (replentry *) malloc(numrep * sizeof(struct replentry));
+ if (!reptable) return 1;
+ np++;
+ break;
+ }
+ default: break;
+ }
+ i++;
+ }
+ free(piece);
+ piece = mystrsep(&tp, 0);
+ }
+ if (np != 2) {
+ HUNSPELL_WARNING(stderr, "error: missing replacement table information\n");
+ return 1;
+ }
+
+ /* now parse the numrep lines to read in the remainder of the table */
+ char * nl = line;
+ for (int j=0; j < numrep; j++) {
+ if (!fgets(nl,MAXLNLEN,af)) return 1;
+ mychomp(nl);
+ tp = nl;
+ i = 0;
+ reptable[j].pattern = NULL;
+ reptable[j].pattern2 = NULL;
+ piece = mystrsep(&tp, 0);
+ while (piece) {
+ if (*piece != '\0') {
+ switch(i) {
+ case 0: {
+ if (strncmp(piece,"REP",3) != 0) {
+ HUNSPELL_WARNING(stderr, "error: replacement table is corrupt\n");
+ free(piece);
+ return 1;
+ }
+ break;
+ }
+ case 1: { reptable[j].pattern = mystrrep(mystrdup(piece),"_"," "); break; }
+ case 2: { reptable[j].pattern2 = mystrrep(mystrdup(piece),"_"," "); break; }
+ default: break;
+ }
+ i++;
+ }
+ free(piece);
+ piece = mystrsep(&tp, 0);
+ }
+ if ((!(reptable[j].pattern)) || (!(reptable[j].pattern2))) {
+ HUNSPELL_WARNING(stderr, "error: replacement table is corrupt\n");
+ return 1;
+ }
+ }
+ return 0;
+}
+#endif
+
+/* parse in the checkcompoundpattern table */
+#if HUNSPELL_CHROME_CLIENT
+int AffixMgr::parse_checkcpdtable(char * line, hunspell::LineIterator* iterator)
+#else
+int AffixMgr::parse_checkcpdtable(char * line, FILE * af)
+#endif
+{
+ if (numcheckcpd != 0) {
+ HUNSPELL_WARNING(stderr, "error: duplicate compound pattern tables used\n");
+ return 1;
+ }
+ char * tp = line;
+ char * piece;
+ int i = 0;
+ int np = 0;
+ piece = mystrsep(&tp, 0);
+ while (piece) {
+ if (*piece != '\0') {
+ switch(i) {
+ case 0: { np++; break; }
+ case 1: {
+ numcheckcpd = atoi(piece);
+ if (numcheckcpd < 1) {
+ HUNSPELL_WARNING(stderr, "incorrect number of entries in compound pattern table\n");
+ free(piece);
+ return 1;
+ }
+ checkcpdtable = (replentry *) malloc(numcheckcpd * sizeof(struct replentry));
+ if (!checkcpdtable) return 1;
+ np++;
+ break;
+ }
+ default: break;
+ }
+ i++;
+ }
+ free(piece);
+ piece = mystrsep(&tp, 0);
+ }
+ if (np != 2) {
+ HUNSPELL_WARNING(stderr, "error: missing compound pattern table information\n");
+ return 1;
+ }
+
+ /* now parse the numcheckcpd lines to read in the remainder of the table */
+ char * nl = line;
+ for (int j=0; j < numcheckcpd; j++) {
+#ifdef HUNSPELL_CHROME_CLIENT
+ if (!iterator->AdvanceAndCopy(nl, MAXLNLEN))
+ return 1;
+#else
+ if (!fgets(nl,MAXLNLEN,af)) return 1;
+#endif
+ mychomp(nl);
+ tp = nl;
+ i = 0;
+ checkcpdtable[j].pattern = NULL;
+ checkcpdtable[j].pattern2 = NULL;
+ piece = mystrsep(&tp, 0);
+ while (piece) {
+ if (*piece != '\0') {
+ switch(i) {
+ case 0: {
+ if (strncmp(piece,"CHECKCOMPOUNDPATTERN",20) != 0) {
+ HUNSPELL_WARNING(stderr, "error: compound pattern table is corrupt\n");
+ free(piece);
+ return 1;
+ }
+ break;
+ }
+ case 1: { checkcpdtable[j].pattern = mystrdup(piece); break; }
+ case 2: { checkcpdtable[j].pattern2 = mystrdup(piece); break; }
+ default: break;
+ }
+ i++;
+ }
+ free(piece);
+ piece = mystrsep(&tp, 0);
+ }
+ if ((!(checkcpdtable[j].pattern)) || (!(checkcpdtable[j].pattern2))) {
+ HUNSPELL_WARNING(stderr, "error: compound pattern table is corrupt\n");
+ return 1;
+ }
+ }
+ return 0;
+}
+
+/* parse in the compound rule table */
+#ifdef HUNSPELL_CHROME_CLIENT
+int AffixMgr::parse_defcpdtable(char * line, hunspell::LineIterator* iterator)
+#else
+int AffixMgr::parse_defcpdtable(char * line, FILE * af)
+#endif
+{
+ if (numdefcpd != 0) {
+ HUNSPELL_WARNING(stderr, "error: duplicate compound rule tables used\n");
+ return 1;
+ }
+ char * tp = line;
+ char * piece;
+ int i = 0;
+ int np = 0;
+ piece = mystrsep(&tp, 0);
+ while (piece) {
+ if (*piece != '\0') {
+ switch(i) {
+ case 0: { np++; break; }
+ case 1: {
+ numdefcpd = atoi(piece);
+ if (numdefcpd < 1) {
+ HUNSPELL_WARNING(stderr, "incorrect number of entries in compound rule table\n");
+ free(piece);
+ return 1;
+ }
+ defcpdtable = (flagentry *) malloc(numdefcpd * sizeof(flagentry));
+ if (!defcpdtable) return 1;
+ np++;
+ break;
+ }
+ default: break;
+ }
+ i++;
+ }
+ free(piece);
+ piece = mystrsep(&tp, 0);
+ }
+ if (np != 2) {
+ HUNSPELL_WARNING(stderr, "error: missing compound rule table information\n");
+ return 1;
+ }
+
+ /* now parse the numdefcpd lines to read in the remainder of the table */
+ char * nl = line;
+ for (int j=0; j < numdefcpd; j++) {
+#ifdef HUNSPELL_CHROME_CLIENT
+ if (!iterator->AdvanceAndCopy(nl, MAXLNLEN))
+ return 1;
+#else
+ if (!fgets(nl,MAXLNLEN,af)) return 1;
+#endif
+ mychomp(nl);
+ tp = nl;
+ i = 0;
+ defcpdtable[j].def = NULL;
+ piece = mystrsep(&tp, 0);
+ while (piece) {
+ if (*piece != '\0') {
+ switch(i) {
+ case 0: {
+ if (strncmp(piece, "COMPOUNDRULE", 12) != 0) {
+ HUNSPELL_WARNING(stderr, "error: compound rule table is corrupt\n");
+ free(piece);
+ return 1;
+ }
+ break;
+ }
+ case 1: {
+ defcpdtable[j].len =
+ pHMgr->decode_flags(&(defcpdtable[j].def), piece);
+ break;
+ }
+ default: break;
+ }
+ i++;
+ }
+ free(piece);
+ piece = mystrsep(&tp, 0);
+ }
+ if (!defcpdtable[j].len) {
+ HUNSPELL_WARNING(stderr, "error: compound rule table is corrupt\n");
+ return 1;
+ }
+ }
+ return 0;
+}
+
+
+/* parse in the character map table */
+#ifdef HUNSPELL_CHROME_CLIENT
+int AffixMgr::parse_maptable(char * line, hunspell::LineIterator* iterator)
+#else
+int AffixMgr::parse_maptable(char * line, FILE * af)
+#endif
+{
+ if (nummap != 0) {
+ HUNSPELL_WARNING(stderr, "error: duplicate MAP tables used\n");
+ return 1;
+ }
+ char * tp = line;
+ char * piece;
+ int i = 0;
+ int np = 0;
+ piece = mystrsep(&tp, 0);
+ while (piece) {
+ if (*piece != '\0') {
+ switch(i) {
+ case 0: { np++; break; }
+ case 1: {
+ nummap = atoi(piece);
+ if (nummap < 1) {
+ HUNSPELL_WARNING(stderr, "incorrect number of entries in map table\n");
+ free(piece);
+ return 1;
+ }
+ maptable = (mapentry *) malloc(nummap * sizeof(struct mapentry));
+ if (!maptable) return 1;
+ np++;
+ break;
+ }
+ default: break;
+ }
+ i++;
+ }
+ free(piece);
+ piece = mystrsep(&tp, 0);
+ }
+ if (np != 2) {
+ HUNSPELL_WARNING(stderr, "error: missing map table information\n");
+ return 1;
+ }
+
+ /* now parse the nummap lines to read in the remainder of the table */
+ char * nl = line;
+ for (int j=0; j < nummap; j++) {
+#ifdef HUNSPELL_CHROME_CLIENT
+ if (!iterator->AdvanceAndCopy(nl, MAXLNLEN))
+ return 1;
+#else
+ if (!fgets(nl,MAXLNLEN,af)) return 1;
+#endif
+ mychomp(nl);
+ tp = nl;
+ i = 0;
+ maptable[j].set = NULL;
+ maptable[j].len = 0;
+ piece = mystrsep(&tp, 0);
+ while (piece) {
+ if (*piece != '\0') {
+ switch(i) {
+ case 0: {
+ if (strncmp(piece,"MAP",3) != 0) {
+ HUNSPELL_WARNING(stderr, "error: map table is corrupt\n");
+ free(piece);
+ return 1;
+ }
+ break;
+ }
+ case 1: {
+ maptable[j].len = 0;
+ maptable[j].set = NULL;
+ maptable[j].set_utf16 = NULL;
+ if (!utf8) {
+ maptable[j].set = mystrdup(piece);
+ maptable[j].len = strlen(maptable[j].set);
+ } else {
+ w_char w[MAXWORDLEN];
+ int n = u8_u16(w, MAXWORDLEN, piece);
+ if (n > 0) {
+ flag_qsort((unsigned short *) w, 0, n);
+ maptable[j].set_utf16 = (w_char *) malloc(n * sizeof(w_char));
+ if (!maptable[j].set_utf16) return 1;
+ memcpy(maptable[j].set_utf16, w, n * sizeof(w_char));
+ }
+ maptable[j].len = n;
+ }
+ break; }
+ default: break;
+ }
+ i++;
+ }
+ free(piece);
+ piece = mystrsep(&tp, 0);
+ }
+ if ((!(maptable[j].set || maptable[j].set_utf16)) || (!(maptable[j].len))) {
+ HUNSPELL_WARNING(stderr, "error: map table is corrupt\n");
+ return 1;
+ }
+ }
+ return 0;
+}
+
+/* parse in the word breakpoint table */
+#ifdef HUNSPELL_CHROME_CLIENT
+int AffixMgr::parse_breaktable(char * line, hunspell::LineIterator* iterator)
+#else
+int AffixMgr::parse_breaktable(char * line, FILE * af)
+#endif
+{
+ if (numbreak != 0) {
+ HUNSPELL_WARNING(stderr, "error: duplicate word breakpoint tables used\n");
+ return 1;
+ }
+ char * tp = line;
+ char * piece;
+ int i = 0;
+ int np = 0;
+ piece = mystrsep(&tp, 0);
+ while (piece) {
+ if (*piece != '\0') {
+ switch(i) {
+ case 0: { np++; break; }
+ case 1: {
+ numbreak = atoi(piece);
+ if (numbreak < 1) {
+ HUNSPELL_WARNING(stderr, "incorrect number of entries in BREAK table\n");
+ free(piece);
+ return 1;
+ }
+ breaktable = (char **) malloc(numbreak * sizeof(char *));
+ if (!breaktable) return 1;
+ np++;
+ break;
+ }
+ default: break;
+ }
+ i++;
+ }
+ free(piece);
+ piece = mystrsep(&tp, 0);
+ }
+ if (np != 2) {
+ HUNSPELL_WARNING(stderr, "error: missing word breakpoint table information\n");
+ return 1;
+ }
+
+ /* now parse the numbreak lines to read in the remainder of the table */
+ char * nl = line;
+ for (int j=0; j < numbreak; j++) {
+#ifdef HUNSPELL_CHROME_CLIENT
+ if (!iterator->AdvanceAndCopy(nl, MAXLNLEN))
+ return 1;
+#else
+ if (!fgets(nl,MAXLNLEN,af)) return 1;
+#endif
+ mychomp(nl);
+ tp = nl;
+ i = 0;
+ piece = mystrsep(&tp, 0);
+ while (piece) {
+ if (*piece != '\0') {
+ switch(i) {
+ case 0: {
+ if (strncmp(piece,"BREAK",5) != 0) {
+ HUNSPELL_WARNING(stderr, "error: BREAK table is corrupt\n");
+ free(piece);
+ return 1;
+ }
+ break;
+ }
+ case 1: {
+ breaktable[j] = mystrdup(piece);
+ break;
+ }
+ default: break;
+ }
+ i++;
+ }
+ free(piece);
+ piece = mystrsep(&tp, 0);
+ }
+ if (!breaktable) {
+ HUNSPELL_WARNING(stderr, "error: BREAK table is corrupt\n");
+ return 1;
+ }
+ }
+ return 0;
+}
+
+#ifdef HUNSPELL_CHROME_CLIENT
+int AffixMgr::parse_affix(char * line, const char at, hunspell::LineIterator* iterator)
+#else
+int AffixMgr::parse_affix(char * line, const char at, FILE * af, char * dupflags)
+#endif
+{
+ int numents = 0; // number of affentry structures to parse
+
+ unsigned short aflag = 0; // affix char identifier
+
+ char ff=0;
+ struct affentry * ptr= NULL;
+ struct affentry * nptr= NULL;
+
+ char * tp = line;
+ char * nl = line;
+ char * piece;
+ int i = 0;
+
+ // checking lines with bad syntax
+#ifdef DEBUG
+ int basefieldnum = 0;
+#endif
+
+ // split affix header line into pieces
+
+ int np = 0;
+ piece = mystrsep(&tp, 0);
+ while (piece) {
+ if (*piece != '\0') {
+ switch(i) {
+ // piece 1 - is type of affix
+ case 0: { np++; break; }
+
+ // piece 2 - is affix char
+ case 1: {
+ np++;
+ aflag = pHMgr->decode_flag(piece);
+#ifndef HUNSPELL_CHROME_CLIENT // We don't check for duplicates.
+ if (((at == 'S') && (dupflags[aflag] & dupSFX)) ||
+ ((at == 'P') && (dupflags[aflag] & dupPFX))) {
+ HUNSPELL_WARNING(stderr, "error: duplicate affix flag %s in line %s\n", piece, nl);
+ // return 1; XXX permissive mode for bad dictionaries
+ }
+ dupflags[aflag] += ((at == 'S') ? dupSFX : dupPFX);
+#endif
+ break;
+ }
+ // piece 3 - is cross product indicator
+ case 2: { np++; if (*piece == 'Y') ff = aeXPRODUCT; break; }
+
+ // piece 4 - is number of affentries
+ case 3: {
+ np++;
+ numents = atoi(piece);
+ if (numents == 0) {
+ char * err = pHMgr->encode_flag(aflag);
+ HUNSPELL_WARNING(stderr, "error: affix %s header has incorrect entry count in line %s\n",
+ err, nl);
+ free(err);
+ return 1;
+ }
+ ptr = (struct affentry *) malloc(numents * sizeof(struct affentry));
+ if (!ptr) return 1;
+ ptr->opts = ff;
+ if (utf8) ptr->opts += aeUTF8;
+ if (pHMgr->is_aliasf()) ptr->opts += aeALIASF;
+#ifdef HUNSPELL_EXPERIMENTAL
+ if (pHMgr->is_aliasm()) ptr->opts += aeALIASM;
+#endif
+ ptr->aflag = aflag;
+ }
+
+ default: break;
+ }
+ i++;
+ }
+ free(piece);
+ piece = mystrsep(&tp, 0);
+ }
+ // check to make sure we parsed enough pieces
+ if (np != 4) {
+ char * err = pHMgr->encode_flag(aflag);
+ HUNSPELL_WARNING(stderr, "error: affix %s header has insufficient data in line %s\n", err, nl);
+ free(err);
+ free(ptr);
+ return 1;
+ }
+
+ // store away ptr to first affentry
+ nptr = ptr;
+
+ // now parse numents affentries for this affix
+ for (int j=0; j < numents; j++) {
+#ifdef HUNSPELL_CHROME_CLIENT
+ if (!iterator->AdvanceAndCopy(nl, MAXLNLEN))
+ return 1;
+#else
+ if (!fgets(nl,MAXLNLEN,af)) return 1;
+#endif
+ mychomp(nl);
+ tp = nl;
+ i = 0;
+ np = 0;
+
+ // split line into pieces
+ piece = mystrsep(&tp, 0);
+ while (piece) {
+ if (*piece != '\0') {
+ switch(i) {
+ // piece 1 - is type
+ case 0: {
+ np++;
+ if (nptr != ptr) nptr->opts = ptr->opts;
+ break;
+ }
+
+ // piece 2 - is affix char
+ case 1: {
+ np++;
+ if (pHMgr->decode_flag(piece) != aflag) {
+ char * err = pHMgr->encode_flag(aflag);
+ HUNSPELL_WARNING(stderr, "error: affix %s is corrupt near line %s\n", err, nl);
+ HUNSPELL_WARNING(stderr, "error: possible incorrect count\n");
+ free(err);
+ free(piece);
+ return 1;
+ }
+
+ if (nptr != ptr) nptr->aflag = ptr->aflag;
+ break;
+ }
+
+ // piece 3 - is string to strip or 0 for null
+ case 2: {
+ np++;
+ if (complexprefixes) {
+ if (utf8) reverseword_utf(piece); else reverseword(piece);
+ }
+ nptr->strip = mystrdup(piece);
+ nptr->stripl = (unsigned char) strlen(nptr->strip);
+ if (strcmp(nptr->strip,"0") == 0) {
+ free(nptr->strip);
+ nptr->strip=mystrdup("");
+ nptr->stripl = 0;
+ }
+ break;
+ }
+
+ // piece 4 - is affix string or 0 for null
+ case 3: {
+ char * dash;
+#ifdef HUNSPELL_EXPERIMENTAL
+ nptr->morphcode = NULL;
+#endif
+ nptr->contclass = NULL;
+ nptr->contclasslen = 0;
+ np++;
+ dash = strchr(piece, '/');
+ if (dash) {
+ *dash = '\0';
+
+ if (ignorechars) {
+ if (utf8) {
+ remove_ignored_chars_utf(piece, ignorechars_utf16, ignorechars_utf16_len);
+ } else {
+ remove_ignored_chars(piece,ignorechars);
+ }
+ }
+
+ if (complexprefixes) {
+ if (utf8) reverseword_utf(piece); else reverseword(piece);
+ }
+ nptr->appnd = mystrdup(piece);
+
+ if (pHMgr->is_aliasf()) {
+ int index = atoi(dash + 1);
+ nptr->contclasslen = (unsigned short) pHMgr->get_aliasf(index, &(nptr->contclass));
+ } else {
+ nptr->contclasslen = (unsigned short) pHMgr->decode_flags(&(nptr->contclass), dash + 1);
+ flag_qsort(nptr->contclass, 0, nptr->contclasslen);
+ }
+ *dash = '/';
+
+ havecontclass = 1;
+ for (unsigned short _i = 0; _i < nptr->contclasslen; _i++) {
+ contclasses[(nptr->contclass)[_i]] = 1;
+ }
+ } else {
+ if (ignorechars) {
+ if (utf8) {
+ remove_ignored_chars_utf(piece, ignorechars_utf16, ignorechars_utf16_len);
+ } else {
+ remove_ignored_chars(piece,ignorechars);
+ }
+ }
+
+ if (complexprefixes) {
+ if (utf8) reverseword_utf(piece); else reverseword(piece);
+ }
+ nptr->appnd = mystrdup(piece);
+ }
+
+ nptr->appndl = (unsigned char) strlen(nptr->appnd);
+ if (strcmp(nptr->appnd,"0") == 0) {
+ free(nptr->appnd);
+ nptr->appnd=mystrdup("");
+ nptr->appndl = 0;
+ }
+ break;
+ }
+
+ // piece 5 - is the conditions descriptions
+ case 4: {
+ np++;
+ if (complexprefixes) {
+ int neg = 0;
+ if (utf8) reverseword_utf(piece); else reverseword(piece);
+ // reverse condition
+ for (char * k = piece + strlen(piece) - 1; k >= piece; k--) {
+ switch(*k) {
+ case '[': {
+ if (neg) *(k+1) = '['; else *k = ']';
+ break;
+ }
+ case ']': {
+ *k = '[';
+ if (neg) *(k+1) = '^';
+ neg = 0;
+ break;
+ }
+ case '^': {
+ if (*(k+1) == ']') neg = 1; else *(k+1) = *k;
+ break;
+ }
+ default: {
+ if (neg) *(k+1) = *k;
+ }
+ }
+ }
+ }
+ if (nptr->stripl && (strcmp(piece, ".") != 0) &&
+ redundant_condition(at, nptr->strip, nptr->stripl, piece, nl))
+ strcpy(piece, ".");
+ if (encodeit(nptr,piece)) return 1;
+ break;
+ }
+
+#ifdef HUNSPELL_EXPERIMENTAL
+ case 5: {
+ np++;
+ if (pHMgr->is_aliasm()) {
+ int index = atoi(piece);
+ nptr->morphcode = pHMgr->get_aliasm(index);
+ } else {
+ if (complexprefixes) {
+ if (utf8) reverseword_utf(piece); else reverseword(piece);
+ }
+ nptr->morphcode = mystrdup(piece);
+ }
+ break;
+ }
+#endif
+
+ default: break;
+ }
+ i++;
+ }
+ free(piece);
+ piece = mystrsep(&tp, 0);
+ }
+ // check to make sure we parsed enough pieces
+ if (np < 4) {
+ char * err = pHMgr->encode_flag(aflag);
+ HUNSPELL_WARNING(stderr, "error: affix %s is corrupt near line %s\n", err, nl);
+ free(err);
+ free(ptr);
+ return 1;
+ }
+
+#ifdef DEBUG
+#ifdef HUNSPELL_EXPERIMENTAL
+ // detect unnecessary fields, excepting comments
+ if (basefieldnum) {
+ int fieldnum = !(nptr->morphcode) ? 5 : ((*(nptr->morphcode)=='#') ? 5 : 6);
+ if (fieldnum != basefieldnum)
+ HUNSPELL_WARNING(stderr, "warning: bad field number:\n%s\n", nl);
+ } else {
+ basefieldnum = !(nptr->morphcode) ? 5 : ((*(nptr->morphcode)=='#') ? 5 : 6);
+ }
+#endif
+#endif
+ nptr++;
+ }
+
+ // now create SfxEntry or PfxEntry objects and use links to
+ // build an ordered (sorted by affix string) list
+ nptr = ptr;
+ for (int k = 0; k < numents; k++) {
+ if (at == 'P') {
+ PfxEntry * pfxptr = new PfxEntry(this,nptr);
+ build_pfxtree((AffEntry *)pfxptr);
+ } else {
+ SfxEntry * sfxptr = new SfxEntry(this,nptr);
+ build_sfxtree((AffEntry *)sfxptr);
+ }
+ nptr++;
+ }
+ free(ptr);
+ return 0;
+}
+
+int AffixMgr::redundant_condition(char ft, char * strip, int stripl, const char * cond, char * line) {
+ int condl = strlen(cond);
+ int i;
+ int j;
+ int neg;
+ int in;
+ if (ft == 'P') { // prefix
+ if (strncmp(strip, cond, condl) == 0) return 1;
+ if (utf8) {
+ } else {
+ for (i = 0, j = 0; (i < stripl) && (j < condl); i++, j++) {
+ if (cond[j] != '[') {
+ if (cond[j] != strip[i]) {
+ HUNSPELL_WARNING(stderr, "warning: incompatible stripping characters and condition:\n%s\n", line);
+ }
+ } else {
+ neg = (cond[j+1] == '^') ? 1 : 0;
+ in = 0;
+ do {
+ j++;
+ if (strip[i] == cond[j]) in = 1;
+ } while ((j < (condl - 1)) && (cond[j] != ']'));
+ if (j == (condl - 1) && (cond[j] != ']')) {
+ HUNSPELL_WARNING(stderr, "error: missing ] in condition:\n%s\n", line);
+ return 0;
+ }
+ if ((!neg && !in) || (neg && in)) {
+ HUNSPELL_WARNING(stderr, "warning: incompatible stripping characters and condition:\n%s\n", line);
+ return 0;
+ }
+ }
+ }
+ if (j >= condl) return 1;
+ }
+ } else { // suffix
+ if ((stripl >= condl) && strcmp(strip + stripl - condl, cond) == 0) return 1;
+ if (utf8) {
+ } else {
+ for (i = stripl - 1, j = condl - 1; (i >= 0) && (j >= 0); i--, j--) {
+ if (cond[j] != ']') {
+ if (cond[j] != strip[i]) {
+ HUNSPELL_WARNING(stderr, "warning: incompatible stripping characters and condition:\n%s\n", line);
+ }
+ } else {
+ in = 0;
+ do {
+ j--;
+ if (strip[i] == cond[j]) in = 1;
+ } while ((j > 0) && (cond[j] != '['));
+ if ((j == 0) && (cond[j] != '[')) {
+ HUNSPELL_WARNING(stderr, "error: missing ] in condition:\n%s\n", line);
+ return 0;
+ }
+ neg = (cond[j+1] == '^') ? 1 : 0;
+ if ((!neg && !in) || (neg && in)) {
+ HUNSPELL_WARNING(stderr, "warning: incompatible stripping characters and condition:\n%s\n", line);
+ return 0;
+ }
+ }
+ }
+ if (j < 0) return 1;
+ }
+ }
+ return 0;
+}
diff --git a/chrome/third_party/hunspell/src/hunspell/affixmgr.hxx b/chrome/third_party/hunspell/src/hunspell/affixmgr.hxx
new file mode 100644
index 0000000..e960068
--- /dev/null
+++ b/chrome/third_party/hunspell/src/hunspell/affixmgr.hxx
@@ -0,0 +1,273 @@
+#ifndef _AFFIXMGR_HXX_
+#define _AFFIXMGR_HXX_
+
+#ifdef MOZILLA_CLIENT
+#ifdef __SUNPRO_CC // for SunONE Studio compiler
+using namespace std;
+#endif
+#include <stdio.h>
+#else
+#include <cstdio>
+#endif
+
+#include "atypes.hxx"
+#include "baseaffix.hxx"
+#include "hashmgr.hxx"
+
+// check flag duplication
+#define dupSFX (1 << 0)
+#define dupPFX (1 << 1)
+
+#ifdef HUNSPELL_CHROME_CLIENT
+
+#include <vector>
+
+// This class provides an implementation of the contclasses array in AffixMgr
+// that is normally a large static array. We should almost never need more than
+// 256 elements, so this class only allocates that much to start off with. If
+// elements higher than that are actually used, we'll automatically expand.
+class ContClasses {
+ public:
+ ContClasses() {
+ // Pre-allocate a buffer so that typically, we'll never have to resize.
+ EnsureSizeIs(256);
+ }
+
+ char& operator[](size_t index) {
+ EnsureSizeIs(index + 1);
+ return data[index];
+ }
+
+ void EnsureSizeIs(size_t new_size) {
+ if (data.size() >= new_size)
+ return; // Nothing to do.
+
+ size_t old_size = data.size();
+ data.resize(new_size);
+ memset(&data[old_size], 0, new_size - old_size);
+ }
+
+ std::vector<char> data;
+};
+
+#endif // HUNSPELL_CHROME_CLIENT
+
+class AffixMgr
+{
+
+ AffEntry * pStart[SETSIZE];
+ AffEntry * sStart[SETSIZE];
+#ifdef HUNSPELL_CHROME_CLIENT
+ // It doesn't appear that these pointers are used beyond SETSIZE.
+ AffEntry * pFlag[SETSIZE];
+ AffEntry * sFlag[SETSIZE];
+#else
+ AffEntry * pFlag[CONTSIZE];
+ AffEntry * sFlag[CONTSIZE];
+#endif
+ HashMgr * pHMgr;
+ char * trystring;
+ char * encoding;
+ struct cs_info * csconv;
+ int utf8;
+ int complexprefixes;
+ FLAG compoundflag;
+ FLAG compoundbegin;
+ FLAG compoundmiddle;
+ FLAG compoundend;
+ FLAG compoundroot;
+ FLAG compoundforbidflag;
+ FLAG compoundpermitflag;
+ int checkcompounddup;
+ int checkcompoundrep;
+ int checkcompoundcase;
+ int checkcompoundtriple;
+ FLAG forbiddenword;
+ FLAG nosuggest;
+ FLAG pseudoroot;
+ int cpdmin;
+ int numrep;
+ replentry * reptable;
+ int nummap;
+ mapentry * maptable;
+ int numbreak;
+ char ** breaktable;
+ int numcheckcpd;
+ replentry * checkcpdtable;
+ int numdefcpd;
+ flagentry * defcpdtable;
+ int maxngramsugs;
+ int nosplitsugs;
+ int sugswithdots;
+ int cpdwordmax;
+ int cpdmaxsyllable;
+ char * cpdvowels;
+ w_char * cpdvowels_utf16;
+ int cpdvowels_utf16_len;
+ char * cpdsyllablenum;
+ const char * pfxappnd; // BUG: not stateless
+ const char * sfxappnd; // BUG: not stateless
+ FLAG sfxflag; // BUG: not stateless
+ char * derived; // BUG: not stateless
+ AffEntry * sfx; // BUG: not stateless
+ AffEntry * pfx; // BUG: not stateless
+ int checknum;
+ char * wordchars;
+ unsigned short * wordchars_utf16;
+ int wordchars_utf16_len;
+ char * ignorechars;
+ unsigned short * ignorechars_utf16;
+ int ignorechars_utf16_len;
+ char * version;
+ char * lang;
+ int langnum;
+ FLAG lemma_present;
+ FLAG circumfix;
+ FLAG onlyincompound;
+ FLAG keepcase;
+ int checksharps;
+
+ int havecontclass; // boolean variable
+#ifdef HUNSPELL_CHROME_CLIENT
+ ContClasses contclasses;
+#else
+ char contclasses[CONTSIZE]; // flags of possible continuing classes (twofold affix)
+#endif
+ flag flag_mode;
+
+public:
+#ifdef HUNSPELL_CHROME_CLIENT
+ AffixMgr(hunspell::BDictReader* reader, HashMgr* ptr);
+#else
+ AffixMgr(FILE* aff_handle, HashMgr * ptr);
+#endif
+
+ ~AffixMgr();
+ struct hentry * affix_check(const char * word, int len,
+ const unsigned short needflag = (unsigned short) 0, char in_compound = IN_CPD_NOT);
+ struct hentry * prefix_check(const char * word, int len,
+ char in_compound, const FLAG needflag = FLAG_NULL);
+ inline int isSubset(const char * s1, const char * s2);
+ struct hentry * prefix_check_twosfx(const char * word, int len,
+ char in_compound, const FLAG needflag = FLAG_NULL);
+ inline int isRevSubset(const char * s1, const char * end_of_s2, int len);
+ struct hentry * suffix_check(const char * word, int len, int sfxopts, AffEntry* ppfx,
+ char ** wlst, int maxSug, int * ns, const FLAG cclass = FLAG_NULL,
+ const FLAG needflag = FLAG_NULL, char in_compound = IN_CPD_NOT);
+ struct hentry * suffix_check_twosfx(const char * word, int len,
+ int sfxopts, AffEntry* ppfx, const FLAG needflag = FLAG_NULL);
+
+ char * affix_check_morph(const char * word, int len,
+ const FLAG needflag = FLAG_NULL, char in_compound = IN_CPD_NOT);
+ char * prefix_check_morph(const char * word, int len,
+ char in_compound, const FLAG needflag = FLAG_NULL);
+ char * suffix_check_morph (const char * word, int len, int sfxopts, AffEntry * ppfx,
+ const FLAG cclass = FLAG_NULL, const FLAG needflag = FLAG_NULL, char in_compound = IN_CPD_NOT);
+
+ char * prefix_check_twosfx_morph(const char * word, int len,
+ char in_compound, const FLAG needflag = FLAG_NULL);
+ char * suffix_check_twosfx_morph(const char * word, int len,
+ int sfxopts, AffEntry * ppfx, const FLAG needflag = FLAG_NULL);
+
+ int expand_rootword(struct guessword * wlst, int maxn, const char * ts,
+ int wl, const unsigned short * ap, unsigned short al, char * bad, int);
+
+ short get_syllable (const char * word, int wlen);
+ int cpdrep_check(const char * word, int len);
+ int cpdpat_check(const char * word, int len);
+ int defcpd_check(hentry *** words, short wnum, hentry * rv, hentry ** rwords, char all);
+ int cpdcase_check(const char * word, int len);
+ inline int candidate_check(const char * word, int len);
+ struct hentry * compound_check(const char * word, int len,
+ short wordnum, short numsyllable, short maxwordnum, short wnum, hentry ** words,
+ char hu_mov_rule, int * cmpdstemnum, int * cmpdstem, char is_sug);
+
+ int compound_check_morph(const char * word, int len,
+ short wordnum, short numsyllable, short maxwordnum, short wnum, hentry ** words,
+ char hu_mov_rule, char ** result, char * partresult);
+
+ struct hentry * lookup(const char * word);
+ int get_numrep();
+ struct replentry * get_reptable();
+ int get_nummap();
+ struct mapentry * get_maptable();
+ int get_numbreak();
+ char ** get_breaktable();
+ char * get_encoding();
+ int get_langnum();
+ char * get_try_string();
+ const char * get_wordchars();
+ unsigned short * get_wordchars_utf16(int * len);
+ char * get_ignore();
+ unsigned short * get_ignore_utf16(int * len);
+ int get_compound();
+ FLAG get_compoundflag();
+ FLAG get_compoundbegin();
+ FLAG get_forbiddenword();
+ FLAG get_nosuggest();
+// FLAG get_circumfix();
+ FLAG get_pseudoroot();
+ FLAG get_onlyincompound();
+ FLAG get_compoundroot();
+ FLAG get_lemma_present();
+ int get_checknum();
+ char * get_possible_root();
+ const char * get_prefix();
+ const char * get_suffix();
+ const char * get_derived();
+ const char * get_version();
+ const int have_contclass();
+ int get_utf8();
+ int get_complexprefixes();
+ char * get_suffixed(char );
+ int get_maxngramsugs();
+ int get_nosplitsugs();
+ int get_sugswithdots(void);
+ FLAG get_keepcase(void);
+ int get_checksharps(void);
+
+private:
+#ifdef HUNSPELL_CHROME_CLIENT
+ // Not owned by us, owned by the Hunspell object.
+ hunspell::BDictReader* bdict_reader;
+
+ int parse_file();
+#else
+ int parse_file(FILE* aff_handle);
+#endif
+// int parse_string(char * line, char ** out, const char * name);
+ int parse_flag(char * line, unsigned short * out, const char * name);
+ int parse_num(char * line, int * out, const char * name);
+// int parse_array(char * line, char ** out, unsigned short ** out_utf16,
+// int * out_utf16_len, const char * name);
+ int parse_cpdsyllable(char * linfe);
+#ifdef HUNSPELL_CHROME_CLIENT
+ // We just change the FILE* to be an iterator.
+ int parse_maptable(char * line, hunspell::LineIterator* iterator);
+ int parse_checkcpdtable(char * line, hunspell::LineIterator* iterator);
+ int parse_breaktable(char * line, hunspell::LineIterator* iterator);
+ int parse_defcpdtable(char * line, hunspell::LineIterator* iterator);
+ int parse_affix(char * line, const char at, hunspell::LineIterator* iterator);
+#else
+ int parse_reptable(char * line, FILE * af);
+ int parse_maptable(char * line, FILE * af);
+ int parse_breaktable(char * line, FILE * af);
+ int parse_checkcpdtable(char * line, FILE * af);
+ int parse_defcpdtable(char * line, FILE * af);
+ int parse_affix(char * line, const char at, FILE * af, char * dupflags);
+#endif
+
+ int encodeit(struct affentry * ptr, char * cs);
+ int build_pfxtree(AffEntry* pfxptr);
+ int build_sfxtree(AffEntry* sfxptr);
+ int process_pfx_order();
+ int process_sfx_order();
+ AffEntry * process_pfx_in_order(AffEntry * ptr, AffEntry * nptr);
+ AffEntry * process_sfx_in_order(AffEntry * ptr, AffEntry * nptr);
+ int process_pfx_tree_to_list();
+ int process_sfx_tree_to_list();
+ int redundant_condition(char, char * strip, int stripl, const char * cond, char *);
+};
+
+#endif
+
diff --git a/chrome/third_party/hunspell/src/hunspell/atypes.hxx b/chrome/third_party/hunspell/src/hunspell/atypes.hxx
new file mode 100644
index 0000000..4f6c1ea
--- /dev/null
+++ b/chrome/third_party/hunspell/src/hunspell/atypes.hxx
@@ -0,0 +1,101 @@
+#ifndef _ATYPES_HXX_
+#define _ATYPES_HXX_
+
+#ifndef HUNSPELL_WARNING
+#ifdef HUNSPELL_WARNING_ON
+#define HUNSPELL_WARNING fprintf
+#else
+#define HUNSPELL_WARNING
+#endif
+#endif
+
+// HUNSTEM def.
+#define HUNSTEM
+
+#include "csutil.hxx"
+#include "hashmgr.hxx"
+
+#define SETSIZE 256
+#define CONTSIZE 65536
+#define MAXWORDLEN 100
+#define MAXWORDUTF8LEN (MAXWORDLEN * 4)
+
+// affentry options
+#define aeXPRODUCT (1 << 0)
+#define aeUTF8 (1 << 1)
+#define aeALIASF (1 << 2)
+#define aeALIASM (1 << 3)
+#define aeINFIX (1 << 4)
+
+// compound options
+#define IN_CPD_NOT 0
+#define IN_CPD_BEGIN 1
+#define IN_CPD_END 2
+#define IN_CPD_OTHER 3
+
+#define MAXLNLEN 8192 * 4
+
+#define MINCPDLEN 3
+#define MAXCOMPOUND 10
+
+#define MAXACC 1000
+
+#define FLAG unsigned short
+#define FLAG_NULL 0x00
+#define FREE_FLAG(a) a = 0
+
+#define TESTAFF( a, b , c ) flag_bsearch((unsigned short *) a, (unsigned short) b, c)
+
+struct affentry
+{
+ char * strip;
+ char * appnd;
+ unsigned char stripl;
+ unsigned char appndl;
+ char numconds;
+ char opts;
+ unsigned short aflag;
+ union {
+ char base[SETSIZE];
+ struct {
+ char ascii[SETSIZE/2];
+ char neg[8];
+ char all[8];
+ w_char * wchars[8];
+ int wlen[8];
+ } utf8;
+ } conds;
+#ifdef HUNSPELL_EXPERIMENTAL
+ char * morphcode;
+#endif
+ unsigned short * contclass;
+ short contclasslen;
+};
+
+struct replentry {
+ char * pattern;
+ char * pattern2;
+};
+
+struct mapentry {
+ char * set;
+ w_char * set_utf16;
+ int len;
+};
+
+struct flagentry {
+ FLAG * def;
+ int len;
+};
+
+struct guessword {
+ char * word;
+ bool allow;
+};
+
+#endif
+
+
+
+
+
diff --git a/chrome/third_party/hunspell/src/hunspell/baseaffix.hxx b/chrome/third_party/hunspell/src/hunspell/baseaffix.hxx
new file mode 100644
index 0000000..d6a5cd6
--- /dev/null
+++ b/chrome/third_party/hunspell/src/hunspell/baseaffix.hxx
@@ -0,0 +1,31 @@
+#ifndef _BASEAFF_HXX_
+#define _BASEAFF_HXX_
+
+class AffEntry
+{
+public:
+
+protected:
+ char * appnd;
+ char * strip;
+ unsigned char appndl;
+ unsigned char stripl;
+ char numconds;
+ char opts;
+ unsigned short aflag;
+ union {
+ char base[SETSIZE];
+ struct {
+ char ascii[SETSIZE/2];
+ char neg[8];
+ char all[8];
+ w_char * wchars[8];
+ int wlen[8];
+ } utf8;
+ } conds;
+ char * morphcode;
+ unsigned short * contclass;
+ short contclasslen;
+};
+
+#endif
diff --git a/chrome/third_party/hunspell/src/hunspell/csutil.cxx b/chrome/third_party/hunspell/src/hunspell/csutil.cxx
new file mode 100644
index 0000000..4424b98
--- /dev/null
+++ b/chrome/third_party/hunspell/src/hunspell/csutil.cxx
@@ -0,0 +1,5252 @@
+#include "license.hunspell"
+#include "license.myspell"
+
+#ifndef MOZILLA_CLIENT
+#include <cstdlib>
+#include <cstring>
+#include <cstdio>
+#else
+#include <stdlib.h>
+#include <string.h>
+#include <stdio.h>
+#endif
+
+#include "csutil.hxx"
+#include "atypes.hxx"
+#include "langnum.hxx"
+
+#ifdef OPENOFFICEORG
+# include <unicode/uchar.h>
+#else
+# ifndef MOZILLA_CLIENT
+# include "utf_info.hxx"
+# define UTF_LST_LEN (sizeof(utf_lst) / (sizeof(unicode_info)))
+# endif
+#endif
+
+#ifdef MOZILLA_CLIENT
+#include "nsCOMPtr.h"
+#include "nsServiceManagerUtils.h"
+#include "nsIUnicodeEncoder.h"
+#include "nsIUnicodeDecoder.h"
+#include "nsICaseConversion.h"
+#include "nsICharsetConverterManager.h"
+#include "nsUnicharUtilCIID.h"
+#include "nsUnicharUtils.h"
+
+static NS_DEFINE_CID(kCharsetConverterManagerCID, NS_ICHARSETCONVERTERMANAGER_CID);
+static NS_DEFINE_CID(kUnicharUtilCID, NS_UNICHARUTIL_CID);
+#endif
+
+#ifdef MOZILLA_CLIENT
+#ifdef __SUNPRO_CC // for SunONE Studio compiler
+using namespace std;
+#endif
+#else
+#ifndef W32
+using namespace std;
+#endif
+#endif
+
+struct unicode_info2 * utf_tbl = NULL;
+
+/* only UTF-16 (BMP) implementation */
+char * u16_u8(char * dest, int size, const w_char * src, int srclen) {
+ char * u8 = dest;
+ char * u8_max = u8 + size;
+ const w_char * u2 = src;
+ const w_char * u2_max = src + srclen;
+ while ((u2 < u2_max) && (u8 < u8_max)) {
+ if (u2->h) { // > 0xFF
+ // XXX 4-byte haven't implemented yet.
+ if (u2->h >= 0x08) { // >= 0x800 (3-byte UTF-8 character)
+ *u8 = 0xe0 + (u2->h >> 4);
+ u8++;
+ if (u8 < u8_max) {
+ *u8 = 0x80 + ((u2->h & 0xf) << 2) + (u2->l >> 6);
+ u8++;
+ if (u8 < u8_max) {
+ *u8 = 0x80 + (u2->l & 0x3f);
+ u8++;
+ }
+ }
+ } else { // < 0x800 (2-byte UTF-8 character)
+ *u8 = 0xc0 + (u2->h << 2) + (u2->l >> 6);
+ u8++;
+ if (u8 < u8_max) {
+ *u8 = 0x80 + (u2->l & 0x3f);
+ u8++;
+ }
+ }
+ } else { // <= 0xFF
+ if (u2->l & 0x80) { // >0x80 (2-byte UTF-8 character)
+ *u8 = 0xc0 + (u2->l >> 6);
+ u8++;
+ if (u8 < u8_max) {
+ *u8 = 0x80 + (u2->l & 0x3f);
+ u8++;
+ }
+ } else { // < 0x80 (1-byte UTF-8 character)
+ *u8 = u2->l;
+ u8++;
+ }
+ }
+ u2++;
+ }
+ *u8 = '\0';
+ return dest;
+}
+
+
+/* only UTF-16 (BMP) implementation */
+int u8_u16(w_char * dest, int size, const char * src) {
+ const char * u8 = src;
+ w_char * u2 = dest;
+ w_char * u2_max = u2 + size;
+
+ while ((u2 < u2_max) && *u8) {
+ switch ((*u8) & 0xf0) {
+ case 0x00:
+ case 0x10:
+ case 0x20:
+ case 0x30:
+ case 0x40:
+ case 0x50:
+ case 0x60:
+ case 0x70: {
+ u2->h = 0;
+ u2->l = *u8;
+ break;
+ }
+ case 0x80:
+ case 0x90:
+ case 0xa0:
+ case 0xb0: {
+ HUNSPELL_WARNING(stderr, "UTF-8 encoding error. Unexpected continuation bytes in %d. character position\n%s\n", u8 - src, src);
+ u2->h = 0xff;
+ u2->l = 0xfd;
+ break;
+ }
+ case 0xc0:
+ case 0xd0: { // 2-byte UTF-8 codes
+ if ((*(u8+1) & 0xc0) == 0x80) {
+ u2->h = (*u8 & 0x1f) >> 2;
+ u2->l = (*u8 << 6) + (*(u8+1) & 0x3f);
+ u8++;
+ } else {
+ HUNSPELL_WARNING(stderr, "UTF-8 encoding error. Missing continuation byte in %d. character position:\n%s\n", u8 - src, src);
+ u2->h = 0xff;
+ u2->l = 0xfd;
+ }
+ break;
+ }
+ case 0xe0: { // 3-byte UTF-8 codes
+ if ((*(u8+1) & 0xc0) == 0x80) {
+ u2->h = ((*u8 & 0x0f) << 4) + ((*(u8+1) & 0x3f) >> 2);
+ u8++;
+ if ((*(u8+1) & 0xc0) == 0x80) {
+ u2->l = (*u8 << 6) + (*(u8+1) & 0x3f);
+ u8++;
+ } else {
+ HUNSPELL_WARNING(stderr, "UTF-8 encoding error. Missing continuation byte in %d. character position:\n%s\n", u8 - src, src);
+ u2->h = 0xff;
+ u2->l = 0xfd;
+ }
+ } else {
+ HUNSPELL_WARNING(stderr, "UTF-8 encoding error. Missing continuation byte in %d. character position:\n%s\n", u8 - src, src);
+ u2->h = 0xff;
+ u2->l = 0xfd;
+ }
+ break;
+ }
+ case 0xf0: { // 4 or more byte UTF-8 codes
+ HUNSPELL_WARNING(stderr, "This UTF-8 encoding can't convert to UTF-16:\n%s\n", src);
+ u2->h = 0xff;
+ u2->l = 0xfd;
+ return -1;
+ }
+ }
+ u8++;
+ u2++;
+ }
+ return u2 - dest;
+}
+
+void flag_qsort(unsigned short flags[], int begin, int end) {
+ unsigned short reg;
+ if (end > begin) {
+ unsigned short pivot = flags[begin];
+ int l = begin + 1;
+ int r = end;
+ while(l < r) {
+ if (flags[l] <= pivot) {
+ l++;
+ } else {
+ r--;
+ reg = flags[l];
+ flags[l] = flags[r];
+ flags[r] = reg;
+ }
+ }
+ l--;
+ reg = flags[begin];
+ flags[begin] = flags[l];
+ flags[l] = reg;
+
+ flag_qsort(flags, begin, l);
+ flag_qsort(flags, r, end);
+ }
+ }
+
+int flag_bsearch(unsigned short flags[], unsigned short flag, int length) {
+ int mid;
+ int left = 0;
+ int right = length - 1;
+ while (left <= right) {
+ mid = (left + right) / 2;
+ if (flags[mid] == flag) return 1;
+ if (flag < flags[mid]) right = mid - 1;
+ else left = mid + 1;
+ }
+ return 0;
+}
+
+ // strip strings into token based on single char delimiter
+ // acts like strsep() but only uses a delim char and not
+ // a delim string
+ // default delimiter: white space characters
+
+ char * mystrsep(char ** stringp, const char delim)
+ {
+ char * rv = NULL;
+ char * mp = *stringp;
+ int n = strlen(mp);
+ if (n > 0) {
+ char * dp;
+ if (delim) {
+ dp = (char *)memchr(mp,(int)((unsigned char)delim),n);
+ } else {
+ // don't use isspace() here, the string can be in some random charset
+ // that's way different than the locale's
+ for (dp = mp; (*dp && *dp != ' ' && *dp != '\t'); dp++);
+ if (!*dp) dp = NULL;
+ }
+ if (dp) {
+ *stringp = dp+1;
+ int nc = (int)((unsigned long)dp - (unsigned long)mp);
+ rv = (char *) malloc(nc+1);
+ memcpy(rv,mp,nc);
+ *(rv+nc) = '\0';
+ return rv;
+ } else {
+ rv = (char *) malloc(n+1);
+ memcpy(rv, mp, n);
+ *(rv+n) = '\0';
+ *stringp = mp + n;
+ return rv;
+ }
+ }
+ return NULL;
+ }
+
+
+ // replaces strdup with ansi version
+ char * mystrdup(const char * s)
+ {
+ char * d = NULL;
+ if (s) {
+ int sl = strlen(s);
+ d = (char *) malloc(((sl+1) * sizeof(char)));
+ if (d) memcpy(d,s,((sl+1)*sizeof(char)));
+ }
+ return d;
+ }
+
+
+ // remove cross-platform text line end characters
+ void mychomp(char * s)
+ {
+ int k = strlen(s);
+ if ((k > 0) && ((*(s+k-1)=='\r') || (*(s+k-1)=='\n'))) *(s+k-1) = '\0';
+ if ((k > 1) && (*(s+k-2) == '\r')) *(s+k-2) = '\0';
+ }
+
+
+ // does an ansi strdup of the reverse of a string
+ char * myrevstrdup(const char * s)
+ {
+ char * d = NULL;
+ if (s) {
+ int sl = strlen(s);
+ d = (char *) malloc((sl+1) * sizeof(char));
+ if (d) {
+ const char * p = s + sl - 1;
+ char * q = d;
+ while (p >= s) *q++ = *p--;
+ *q = '\0';
+ }
+ }
+ return d;
+ }
+
+#ifdef HUNSPELL_EXPERIMENTAL
+ // append s to ends of every lines in text
+ void strlinecat(char * dest, const char * s)
+ {
+ char * dup = mystrdup(dest);
+ char * source = dup;
+ int len = strlen(s);
+ while (*source) {
+ if (*source == '\n') {
+ strncpy(dest, s, len);
+ dest += len;
+ }
+ *dest = *source;
+ source++; dest++;
+ }
+ strcpy(dest, s);
+ free(dup);
+ }
+
+// break text to lines
+// return number of lines
+int line_tok(const char * text, char *** lines) {
+ int linenum = 0;
+ char * dup = mystrdup(text);
+ char * p = strchr(dup, '\n');
+ while (p) {
+ linenum++;
+ *p = '\0';
+ p++;
+ p = strchr(p, '\n');
+ }
+ *lines = (char **) calloc(linenum + 1, sizeof(char *));
+ if (!(*lines)) return -1;
+
+ p = dup;
+ for (int i = 0; i < linenum + 1; i++) {
+ (*lines)[i] = mystrdup(p);
+ p += strlen(p) + 1;
+ }
+ free(dup);
+ return linenum;
+}
+
+// uniq line in place
+char * line_uniq(char * text) {
+ char ** lines;
+ int linenum = line_tok(text, &lines);
+ int i;
+ strcpy(text, lines[0]);
+ for ( i = 1; i<=linenum; i++ ) {
+ int dup = 0;
+ for (int j = 0; j < i; j++) {
+ if (strcmp(lines[i], lines[j]) == 0) dup = 1;
+ }
+ if (!dup) {
+ if ((i > 1) || (*(lines[0]) != '\0')) strcat(text, "\n");
+ strcat(text, lines[i]);
+ }
+ }
+ for ( i = 0; i<=linenum; i++ ) {
+ if (lines[i]) free(lines[i]);
+ }
+ if (lines) free(lines);
+ return text;
+}
+
+// change \n to char c
+char * line_join(char * text, char c) {
+ char * p;
+ for (p = text; *p; p++) if (*p == '\n') *p = c;
+ return text;
+}
+
+// leave only last {[^}]*} substring for handling zero morphemes
+char * delete_zeros(char * morphout) {
+ char * p = morphout;
+ char * q = p;
+ char * q2 = NULL;
+ int suffix = 0;
+
+ for (;*p && *(p+1);) {
+ switch (*p) {
+ case '{':
+ q2 = q;
+ q--;
+ break;
+ case '}':
+ if (q2) {
+ suffix = 1;
+ q--;
+ }
+ break;
+ default:
+ if (suffix) {
+ q = q2;
+ }
+ suffix = 0;
+ *q = *p;
+ }
+ p++;
+ q++;
+ }
+ *q = '\0';
+ return morphout;
+}
+#endif // END OF HUNSPELL_EXPERIMENTAL CODE
+
+char * mystrrep(char * word, const char * pat, const char * rep) {
+ char * pos = strstr(word, pat);
+ if (pos) {
+ int replen = strlen(rep);
+ int patlen = strlen(pat);
+ if (replen < patlen) {
+ char * end = word + strlen(word);
+ char * next = pos + replen;
+ char * prev = pos + strlen(pat);
+ for (; prev < end; *next = *prev, prev++, next++);
+ *next = '\0';
+ } else if (replen > patlen) {
+ char * end = pos + patlen;
+ char * next = word + strlen(word) + replen - patlen;
+ char * prev = next - replen + patlen;
+ for (; prev >= end; *next = *prev, prev--, next--);
+ }
+ strncpy(pos, rep, replen);
+ }
+ return word;
+}
+
+ // reverse word
+ int reverseword(char * word) {
+ char r;
+ for (char * dest = word + strlen(word) - 1; word < dest; word++, dest--) {
+ r=*word;
+ *word = *dest;
+ *dest = r;
+ }
+ return 0;
+ }
+
+ // reverse word (error: 1)
+ int reverseword_utf(char * word) {
+ w_char w[MAXWORDLEN];
+ w_char * p;
+ w_char r;
+ int l = u8_u16(w, MAXWORDLEN, word);
+ if (l == -1) return 1;
+ p = w;
+ for (w_char * dest = w + l - 1; p < dest; p++, dest--) {
+ r=*p;
+ *p = *dest;
+ *dest = r;
+ }
+ u16_u8(word, MAXWORDUTF8LEN, w, l);
+ return 0;
+ }
+
+ // convert null terminated string to all caps
+ void mkallcap(char * p, const struct cs_info * csconv)
+ {
+ while (*p != '\0') {
+ *p = csconv[((unsigned char) *p)].cupper;
+ p++;
+ }
+ }
+
+ // convert null terminated string to all little
+ void mkallsmall(char * p, const struct cs_info * csconv)
+ {
+ while (*p != '\0') {
+ *p = csconv[((unsigned char) *p)].clower;
+ p++;
+ }
+ }
+
+void mkallsmall_utf(w_char * u, int nc, int langnum) {
+ for (int i = 0; i < nc; i++) {
+ unsigned short idx = (u[i].h << 8) + u[i].l;
+ if (idx != unicodetolower(idx, langnum)) {
+ u[i].h = (unsigned char) (unicodetolower(idx, langnum) >> 8);
+ u[i].l = (unsigned char) (unicodetolower(idx, langnum) & 0x00FF);
+ }
+ }
+}
+
+void mkallcap_utf(w_char * u, int nc, int langnum) {
+ for (int i = 0; i < nc; i++) {
+ unsigned short idx = (u[i].h << 8) + u[i].l;
+ if (idx != unicodetoupper(idx, langnum)) {
+ u[i].h = (unsigned char) (unicodetolower(idx, langnum) >> 8);
+ u[i].l = (unsigned char) (unicodetolower(idx, langnum) & 0x00FF);
+ }
+ }
+}
+
+ // convert null terminated string to have intial capital
+ void mkinitcap(char * p, const struct cs_info * csconv)
+ {
+ if (*p != '\0') *p = csconv[((unsigned char)*p)].cupper;
+ }
+
+#ifndef MOZILLA_CLIENT
+ // convert null terminated string to all caps using encoding
+ void enmkallcap(char * d, const char * p, const char * encoding)
+
+ {
+ struct cs_info * csconv = get_current_cs(encoding);
+ while (*p != '\0') {
+ *d++ = csconv[((unsigned char) *p)].cupper;
+ p++;
+ }
+ *d = '\0';
+ }
+
+ // convert null terminated string to all little using encoding
+ void enmkallsmall(char * d, const char * p, const char * encoding)
+ {
+ struct cs_info * csconv = get_current_cs(encoding);
+ while (*p != '\0') {
+ *d++ = csconv[((unsigned char) *p)].clower;
+ p++;
+ }
+ *d = '\0';
+ }
+
+ // convert null terminated string to have intial capital using encoding
+ void enmkinitcap(char * d, const char * p, const char * encoding)
+ {
+ struct cs_info * csconv = get_current_cs(encoding);
+ memcpy(d,p,(strlen(p)+1));
+ if (*p != '\0') *d= csconv[((unsigned char)*p)].cupper;
+ }
+
+// these are simple character mappings for the
+// encodings supported
+// supplying isupper, tolower, and toupper
+
+struct cs_info iso1_tbl[] = {
+{ 0x00, 0x00, 0x00 },
+{ 0x00, 0x01, 0x01 },
+{ 0x00, 0x02, 0x02 },
+{ 0x00, 0x03, 0x03 },
+{ 0x00, 0x04, 0x04 },
+{ 0x00, 0x05, 0x05 },
+{ 0x00, 0x06, 0x06 },
+{ 0x00, 0x07, 0x07 },
+{ 0x00, 0x08, 0x08 },
+{ 0x00, 0x09, 0x09 },
+{ 0x00, 0x0a, 0x0a },
+{ 0x00, 0x0b, 0x0b },
+{ 0x00, 0x0c, 0x0c },
+{ 0x00, 0x0d, 0x0d },
+{ 0x00, 0x0e, 0x0e },
+{ 0x00, 0x0f, 0x0f },
+{ 0x00, 0x10, 0x10 },
+{ 0x00, 0x11, 0x11 },
+{ 0x00, 0x12, 0x12 },
+{ 0x00, 0x13, 0x13 },
+{ 0x00, 0x14, 0x14 },
+{ 0x00, 0x15, 0x15 },
+{ 0x00, 0x16, 0x16 },
+{ 0x00, 0x17, 0x17 },
+{ 0x00, 0x18, 0x18 },
+{ 0x00, 0x19, 0x19 },
+{ 0x00, 0x1a, 0x1a },
+{ 0x00, 0x1b, 0x1b },
+{ 0x00, 0x1c, 0x1c },
+{ 0x00, 0x1d, 0x1d },
+{ 0x00, 0x1e, 0x1e },
+{ 0x00, 0x1f, 0x1f },
+{ 0x00, 0x20, 0x20 },
+{ 0x00, 0x21, 0x21 },
+{ 0x00, 0x22, 0x22 },
+{ 0x00, 0x23, 0x23 },
+{ 0x00, 0x24, 0x24 },
+{ 0x00, 0x25, 0x25 },
+{ 0x00, 0x26, 0x26 },
+{ 0x00, 0x27, 0x27 },
+{ 0x00, 0x28, 0x28 },
+{ 0x00, 0x29, 0x29 },
+{ 0x00, 0x2a, 0x2a },
+{ 0x00, 0x2b, 0x2b },
+{ 0x00, 0x2c, 0x2c },
+{ 0x00, 0x2d, 0x2d },
+{ 0x00, 0x2e, 0x2e },
+{ 0x00, 0x2f, 0x2f },
+{ 0x00, 0x30, 0x30 },
+{ 0x00, 0x31, 0x31 },
+{ 0x00, 0x32, 0x32 },
+{ 0x00, 0x33, 0x33 },
+{ 0x00, 0x34, 0x34 },
+{ 0x00, 0x35, 0x35 },
+{ 0x00, 0x36, 0x36 },
+{ 0x00, 0x37, 0x37 },
+{ 0x00, 0x38, 0x38 },
+{ 0x00, 0x39, 0x39 },
+{ 0x00, 0x3a, 0x3a },
+{ 0x00, 0x3b, 0x3b },
+{ 0x00, 0x3c, 0x3c },
+{ 0x00, 0x3d, 0x3d },
+{ 0x00, 0x3e, 0x3e },
+{ 0x00, 0x3f, 0x3f },
+{ 0x00, 0x40, 0x40 },
+{ 0x01, 0x61, 0x41 },
+{ 0x01, 0x62, 0x42 },
+{ 0x01, 0x63, 0x43 },
+{ 0x01, 0x64, 0x44 },
+{ 0x01, 0x65, 0x45 },
+{ 0x01, 0x66, 0x46 },
+{ 0x01, 0x67, 0x47 },
+{ 0x01, 0x68, 0x48 },
+{ 0x01, 0x69, 0x49 },
+{ 0x01, 0x6a, 0x4a },
+{ 0x01, 0x6b, 0x4b },
+{ 0x01, 0x6c, 0x4c },
+{ 0x01, 0x6d, 0x4d },
+{ 0x01, 0x6e, 0x4e },
+{ 0x01, 0x6f, 0x4f },
+{ 0x01, 0x70, 0x50 },
+{ 0x01, 0x71, 0x51 },
+{ 0x01, 0x72, 0x52 },
+{ 0x01, 0x73, 0x53 },
+{ 0x01, 0x74, 0x54 },
+{ 0x01, 0x75, 0x55 },
+{ 0x01, 0x76, 0x56 },
+{ 0x01, 0x77, 0x57 },
+{ 0x01, 0x78, 0x58 },
+{ 0x01, 0x79, 0x59 },
+{ 0x01, 0x7a, 0x5a },
+{ 0x00, 0x5b, 0x5b },
+{ 0x00, 0x5c, 0x5c },
+{ 0x00, 0x5d, 0x5d },
+{ 0x00, 0x5e, 0x5e },
+{ 0x00, 0x5f, 0x5f },
+{ 0x00, 0x60, 0x60 },
+{ 0x00, 0x61, 0x41 },
+{ 0x00, 0x62, 0x42 },
+{ 0x00, 0x63, 0x43 },
+{ 0x00, 0x64, 0x44 },
+{ 0x00, 0x65, 0x45 },
+{ 0x00, 0x66, 0x46 },
+{ 0x00, 0x67, 0x47 },
+{ 0x00, 0x68, 0x48 },
+{ 0x00, 0x69, 0x49 },
+{ 0x00, 0x6a, 0x4a },
+{ 0x00, 0x6b, 0x4b },
+{ 0x00, 0x6c, 0x4c },
+{ 0x00, 0x6d, 0x4d },
+{ 0x00, 0x6e, 0x4e },
+{ 0x00, 0x6f, 0x4f },
+{ 0x00, 0x70, 0x50 },
+{ 0x00, 0x71, 0x51 },
+{ 0x00, 0x72, 0x52 },
+{ 0x00, 0x73, 0x53 },
+{ 0x00, 0x74, 0x54 },
+{ 0x00, 0x75, 0x55 },
+{ 0x00, 0x76, 0x56 },
+{ 0x00, 0x77, 0x57 },
+{ 0x00, 0x78, 0x58 },
+{ 0x00, 0x79, 0x59 },
+{ 0x00, 0x7a, 0x5a },
+{ 0x00, 0x7b, 0x7b },
+{ 0x00, 0x7c, 0x7c },
+{ 0x00, 0x7d, 0x7d },
+{ 0x00, 0x7e, 0x7e },
+{ 0x00, 0x7f, 0x7f },
+{ 0x00, 0x80, 0x80 },
+{ 0x00, 0x81, 0x81 },
+{ 0x00, 0x82, 0x82 },
+{ 0x00, 0x83, 0x83 },
+{ 0x00, 0x84, 0x84 },
+{ 0x00, 0x85, 0x85 },
+{ 0x00, 0x86, 0x86 },
+{ 0x00, 0x87, 0x87 },
+{ 0x00, 0x88, 0x88 },
+{ 0x00, 0x89, 0x89 },
+{ 0x00, 0x8a, 0x8a },
+{ 0x00, 0x8b, 0x8b },
+{ 0x00, 0x8c, 0x8c },
+{ 0x00, 0x8d, 0x8d },
+{ 0x00, 0x8e, 0x8e },
+{ 0x00, 0x8f, 0x8f },
+{ 0x00, 0x90, 0x90 },
+{ 0x00, 0x91, 0x91 },
+{ 0x00, 0x92, 0x92 },
+{ 0x00, 0x93, 0x93 },
+{ 0x00, 0x94, 0x94 },
+{ 0x00, 0x95, 0x95 },
+{ 0x00, 0x96, 0x96 },
+{ 0x00, 0x97, 0x97 },
+{ 0x00, 0x98, 0x98 },
+{ 0x00, 0x99, 0x99 },
+{ 0x00, 0x9a, 0x9a },
+{ 0x00, 0x9b, 0x9b },
+{ 0x00, 0x9c, 0x9c },
+{ 0x00, 0x9d, 0x9d },
+{ 0x00, 0x9e, 0x9e },
+{ 0x00, 0x9f, 0x9f },
+{ 0x00, 0xa0, 0xa0 },
+{ 0x00, 0xa1, 0xa1 },
+{ 0x00, 0xa2, 0xa2 },
+{ 0x00, 0xa3, 0xa3 },
+{ 0x00, 0xa4, 0xa4 },
+{ 0x00, 0xa5, 0xa5 },
+{ 0x00, 0xa6, 0xa6 },
+{ 0x00, 0xa7, 0xa7 },
+{ 0x00, 0xa8, 0xa8 },
+{ 0x00, 0xa9, 0xa9 },
+{ 0x00, 0xaa, 0xaa },
+{ 0x00, 0xab, 0xab },
+{ 0x00, 0xac, 0xac },
+{ 0x00, 0xad, 0xad },
+{ 0x00, 0xae, 0xae },
+{ 0x00, 0xaf, 0xaf },
+{ 0x00, 0xb0, 0xb0 },
+{ 0x00, 0xb1, 0xb1 },
+{ 0x00, 0xb2, 0xb2 },
+{ 0x00, 0xb3, 0xb3 },
+{ 0x00, 0xb4, 0xb4 },
+{ 0x00, 0xb5, 0xb5 },
+{ 0x00, 0xb6, 0xb6 },
+{ 0x00, 0xb7, 0xb7 },
+{ 0x00, 0xb8, 0xb8 },
+{ 0x00, 0xb9, 0xb9 },
+{ 0x00, 0xba, 0xba },
+{ 0x00, 0xbb, 0xbb },
+{ 0x00, 0xbc, 0xbc },
+{ 0x00, 0xbd, 0xbd },
+{ 0x00, 0xbe, 0xbe },
+{ 0x00, 0xbf, 0xbf },
+{ 0x01, 0xe0, 0xc0 },
+{ 0x01, 0xe1, 0xc1 },
+{ 0x01, 0xe2, 0xc2 },
+{ 0x01, 0xe3, 0xc3 },
+{ 0x01, 0xe4, 0xc4 },
+{ 0x01, 0xe5, 0xc5 },
+{ 0x01, 0xe6, 0xc6 },
+{ 0x01, 0xe7, 0xc7 },
+{ 0x01, 0xe8, 0xc8 },
+{ 0x01, 0xe9, 0xc9 },
+{ 0x01, 0xea, 0xca },
+{ 0x01, 0xeb, 0xcb },
+{ 0x01, 0xec, 0xcc },
+{ 0x01, 0xed, 0xcd },
+{ 0x01, 0xee, 0xce },
+{ 0x01, 0xef, 0xcf },
+{ 0x01, 0xf0, 0xd0 },
+{ 0x01, 0xf1, 0xd1 },
+{ 0x01, 0xf2, 0xd2 },
+{ 0x01, 0xf3, 0xd3 },
+{ 0x01, 0xf4, 0xd4 },
+{ 0x01, 0xf5, 0xd5 },
+{ 0x01, 0xf6, 0xd6 },
+{ 0x00, 0xd7, 0xd7 },
+{ 0x01, 0xf8, 0xd8 },
+{ 0x01, 0xf9, 0xd9 },
+{ 0x01, 0xfa, 0xda },
+{ 0x01, 0xfb, 0xdb },
+{ 0x01, 0xfc, 0xdc },
+{ 0x01, 0xfd, 0xdd },
+{ 0x01, 0xfe, 0xde },
+{ 0x00, 0xdf, 0xdf },
+{ 0x00, 0xe0, 0xc0 },
+{ 0x00, 0xe1, 0xc1 },
+{ 0x00, 0xe2, 0xc2 },
+{ 0x00, 0xe3, 0xc3 },
+{ 0x00, 0xe4, 0xc4 },
+{ 0x00, 0xe5, 0xc5 },
+{ 0x00, 0xe6, 0xc6 },
+{ 0x00, 0xe7, 0xc7 },
+{ 0x00, 0xe8, 0xc8 },
+{ 0x00, 0xe9, 0xc9 },
+{ 0x00, 0xea, 0xca },
+{ 0x00, 0xeb, 0xcb },
+{ 0x00, 0xec, 0xcc },
+{ 0x00, 0xed, 0xcd },
+{ 0x00, 0xee, 0xce },
+{ 0x00, 0xef, 0xcf },
+{ 0x00, 0xf0, 0xd0 },
+{ 0x00, 0xf1, 0xd1 },
+{ 0x00, 0xf2, 0xd2 },
+{ 0x00, 0xf3, 0xd3 },
+{ 0x00, 0xf4, 0xd4 },
+{ 0x00, 0xf5, 0xd5 },
+{ 0x00, 0xf6, 0xd6 },
+{ 0x00, 0xf7, 0xf7 },
+{ 0x00, 0xf8, 0xd8 },
+{ 0x00, 0xf9, 0xd9 },
+{ 0x00, 0xfa, 0xda },
+{ 0x00, 0xfb, 0xdb },
+{ 0x00, 0xfc, 0xdc },
+{ 0x00, 0xfd, 0xdd },
+{ 0x00, 0xfe, 0xde },
+{ 0x00, 0xff, 0xff },
+};
+
+
+struct cs_info iso2_tbl[] = {
+{ 0x00, 0x00, 0x00 },
+{ 0x00, 0x01, 0x01 },
+{ 0x00, 0x02, 0x02 },
+{ 0x00, 0x03, 0x03 },
+{ 0x00, 0x04, 0x04 },
+{ 0x00, 0x05, 0x05 },
+{ 0x00, 0x06, 0x06 },
+{ 0x00, 0x07, 0x07 },
+{ 0x00, 0x08, 0x08 },
+{ 0x00, 0x09, 0x09 },
+{ 0x00, 0x0a, 0x0a },
+{ 0x00, 0x0b, 0x0b },
+{ 0x00, 0x0c, 0x0c },
+{ 0x00, 0x0d, 0x0d },
+{ 0x00, 0x0e, 0x0e },
+{ 0x00, 0x0f, 0x0f },
+{ 0x00, 0x10, 0x10 },
+{ 0x00, 0x11, 0x11 },
+{ 0x00, 0x12, 0x12 },
+{ 0x00, 0x13, 0x13 },
+{ 0x00, 0x14, 0x14 },
+{ 0x00, 0x15, 0x15 },
+{ 0x00, 0x16, 0x16 },
+{ 0x00, 0x17, 0x17 },
+{ 0x00, 0x18, 0x18 },
+{ 0x00, 0x19, 0x19 },
+{ 0x00, 0x1a, 0x1a },
+{ 0x00, 0x1b, 0x1b },
+{ 0x00, 0x1c, 0x1c },
+{ 0x00, 0x1d, 0x1d },
+{ 0x00, 0x1e, 0x1e },
+{ 0x00, 0x1f, 0x1f },
+{ 0x00, 0x20, 0x20 },
+{ 0x00, 0x21, 0x21 },
+{ 0x00, 0x22, 0x22 },
+{ 0x00, 0x23, 0x23 },
+{ 0x00, 0x24, 0x24 },
+{ 0x00, 0x25, 0x25 },
+{ 0x00, 0x26, 0x26 },
+{ 0x00, 0x27, 0x27 },
+{ 0x00, 0x28, 0x28 },
+{ 0x00, 0x29, 0x29 },
+{ 0x00, 0x2a, 0x2a },
+{ 0x00, 0x2b, 0x2b },
+{ 0x00, 0x2c, 0x2c },
+{ 0x00, 0x2d, 0x2d },
+{ 0x00, 0x2e, 0x2e },
+{ 0x00, 0x2f, 0x2f },
+{ 0x00, 0x30, 0x30 },
+{ 0x00, 0x31, 0x31 },
+{ 0x00, 0x32, 0x32 },
+{ 0x00, 0x33, 0x33 },
+{ 0x00, 0x34, 0x34 },
+{ 0x00, 0x35, 0x35 },
+{ 0x00, 0x36, 0x36 },
+{ 0x00, 0x37, 0x37 },
+{ 0x00, 0x38, 0x38 },
+{ 0x00, 0x39, 0x39 },
+{ 0x00, 0x3a, 0x3a },
+{ 0x00, 0x3b, 0x3b },
+{ 0x00, 0x3c, 0x3c },
+{ 0x00, 0x3d, 0x3d },
+{ 0x00, 0x3e, 0x3e },
+{ 0x00, 0x3f, 0x3f },
+{ 0x00, 0x40, 0x40 },
+{ 0x01, 0x61, 0x41 },
+{ 0x01, 0x62, 0x42 },
+{ 0x01, 0x63, 0x43 },
+{ 0x01, 0x64, 0x44 },
+{ 0x01, 0x65, 0x45 },
+{ 0x01, 0x66, 0x46 },
+{ 0x01, 0x67, 0x47 },
+{ 0x01, 0x68, 0x48 },
+{ 0x01, 0x69, 0x49 },
+{ 0x01, 0x6a, 0x4a },
+{ 0x01, 0x6b, 0x4b },
+{ 0x01, 0x6c, 0x4c },
+{ 0x01, 0x6d, 0x4d },
+{ 0x01, 0x6e, 0x4e },
+{ 0x01, 0x6f, 0x4f },
+{ 0x01, 0x70, 0x50 },
+{ 0x01, 0x71, 0x51 },
+{ 0x01, 0x72, 0x52 },
+{ 0x01, 0x73, 0x53 },
+{ 0x01, 0x74, 0x54 },
+{ 0x01, 0x75, 0x55 },
+{ 0x01, 0x76, 0x56 },
+{ 0x01, 0x77, 0x57 },
+{ 0x01, 0x78, 0x58 },
+{ 0x01, 0x79, 0x59 },
+{ 0x01, 0x7a, 0x5a },
+{ 0x00, 0x5b, 0x5b },
+{ 0x00, 0x5c, 0x5c },
+{ 0x00, 0x5d, 0x5d },
+{ 0x00, 0x5e, 0x5e },
+{ 0x00, 0x5f, 0x5f },
+{ 0x00, 0x60, 0x60 },
+{ 0x00, 0x61, 0x41 },
+{ 0x00, 0x62, 0x42 },
+{ 0x00, 0x63, 0x43 },
+{ 0x00, 0x64, 0x44 },
+{ 0x00, 0x65, 0x45 },
+{ 0x00, 0x66, 0x46 },
+{ 0x00, 0x67, 0x47 },
+{ 0x00, 0x68, 0x48 },
+{ 0x00, 0x69, 0x49 },
+{ 0x00, 0x6a, 0x4a },
+{ 0x00, 0x6b, 0x4b },
+{ 0x00, 0x6c, 0x4c },
+{ 0x00, 0x6d, 0x4d },
+{ 0x00, 0x6e, 0x4e },
+{ 0x00, 0x6f, 0x4f },
+{ 0x00, 0x70, 0x50 },
+{ 0x00, 0x71, 0x51 },
+{ 0x00, 0x72, 0x52 },
+{ 0x00, 0x73, 0x53 },
+{ 0x00, 0x74, 0x54 },
+{ 0x00, 0x75, 0x55 },
+{ 0x00, 0x76, 0x56 },
+{ 0x00, 0x77, 0x57 },
+{ 0x00, 0x78, 0x58 },
+{ 0x00, 0x79, 0x59 },
+{ 0x00, 0x7a, 0x5a },
+{ 0x00, 0x7b, 0x7b },
+{ 0x00, 0x7c, 0x7c },
+{ 0x00, 0x7d, 0x7d },
+{ 0x00, 0x7e, 0x7e },
+{ 0x00, 0x7f, 0x7f },
+{ 0x00, 0x80, 0x80 },
+{ 0x00, 0x81, 0x81 },
+{ 0x00, 0x82, 0x82 },
+{ 0x00, 0x83, 0x83 },
+{ 0x00, 0x84, 0x84 },
+{ 0x00, 0x85, 0x85 },
+{ 0x00, 0x86, 0x86 },
+{ 0x00, 0x87, 0x87 },
+{ 0x00, 0x88, 0x88 },
+{ 0x00, 0x89, 0x89 },
+{ 0x00, 0x8a, 0x8a },
+{ 0x00, 0x8b, 0x8b },
+{ 0x00, 0x8c, 0x8c },
+{ 0x00, 0x8d, 0x8d },
+{ 0x00, 0x8e, 0x8e },
+{ 0x00, 0x8f, 0x8f },
+{ 0x00, 0x90, 0x90 },
+{ 0x00, 0x91, 0x91 },
+{ 0x00, 0x92, 0x92 },
+{ 0x00, 0x93, 0x93 },
+{ 0x00, 0x94, 0x94 },
+{ 0x00, 0x95, 0x95 },
+{ 0x00, 0x96, 0x96 },
+{ 0x00, 0x97, 0x97 },
+{ 0x00, 0x98, 0x98 },
+{ 0x00, 0x99, 0x99 },
+{ 0x00, 0x9a, 0x9a },
+{ 0x00, 0x9b, 0x9b },
+{ 0x00, 0x9c, 0x9c },
+{ 0x00, 0x9d, 0x9d },
+{ 0x00, 0x9e, 0x9e },
+{ 0x00, 0x9f, 0x9f },
+{ 0x00, 0xa0, 0xa0 },
+{ 0x01, 0xb1, 0xa1 },
+{ 0x00, 0xa2, 0xa2 },
+{ 0x01, 0xb3, 0xa3 },
+{ 0x00, 0xa4, 0xa4 },
+{ 0x01, 0xb5, 0xa5 },
+{ 0x01, 0xb6, 0xa6 },
+{ 0x00, 0xa7, 0xa7 },
+{ 0x00, 0xa8, 0xa8 },
+{ 0x01, 0xb9, 0xa9 },
+{ 0x01, 0xba, 0xaa },
+{ 0x01, 0xbb, 0xab },
+{ 0x01, 0xbc, 0xac },
+{ 0x00, 0xad, 0xad },
+{ 0x01, 0xbe, 0xae },
+{ 0x01, 0xbf, 0xaf },
+{ 0x00, 0xb0, 0xb0 },
+{ 0x00, 0xb1, 0xa1 },
+{ 0x00, 0xb2, 0xb2 },
+{ 0x00, 0xb3, 0xa3 },
+{ 0x00, 0xb4, 0xb4 },
+{ 0x00, 0xb5, 0xa5 },
+{ 0x00, 0xb6, 0xa6 },
+{ 0x00, 0xb7, 0xb7 },
+{ 0x00, 0xb8, 0xb8 },
+{ 0x00, 0xb9, 0xa9 },
+{ 0x00, 0xba, 0xaa },
+{ 0x00, 0xbb, 0xab },
+{ 0x00, 0xbc, 0xac },
+{ 0x00, 0xbd, 0xbd },
+{ 0x00, 0xbe, 0xae },
+{ 0x00, 0xbf, 0xaf },
+{ 0x01, 0xe0, 0xc0 },
+{ 0x01, 0xe1, 0xc1 },
+{ 0x01, 0xe2, 0xc2 },
+{ 0x01, 0xe3, 0xc3 },
+{ 0x01, 0xe4, 0xc4 },
+{ 0x01, 0xe5, 0xc5 },
+{ 0x01, 0xe6, 0xc6 },
+{ 0x01, 0xe7, 0xc7 },
+{ 0x01, 0xe8, 0xc8 },
+{ 0x01, 0xe9, 0xc9 },
+{ 0x01, 0xea, 0xca },
+{ 0x01, 0xeb, 0xcb },
+{ 0x01, 0xec, 0xcc },
+{ 0x01, 0xed, 0xcd },
+{ 0x01, 0xee, 0xce },
+{ 0x01, 0xef, 0xcf },
+{ 0x01, 0xf0, 0xd0 },
+{ 0x01, 0xf1, 0xd1 },
+{ 0x01, 0xf2, 0xd2 },
+{ 0x01, 0xf3, 0xd3 },
+{ 0x01, 0xf4, 0xd4 },
+{ 0x01, 0xf5, 0xd5 },
+{ 0x01, 0xf6, 0xd6 },
+{ 0x00, 0xd7, 0xd7 },
+{ 0x01, 0xf8, 0xd8 },
+{ 0x01, 0xf9, 0xd9 },
+{ 0x01, 0xfa, 0xda },
+{ 0x01, 0xfb, 0xdb },
+{ 0x01, 0xfc, 0xdc },
+{ 0x01, 0xfd, 0xdd },
+{ 0x01, 0xfe, 0xde },
+{ 0x00, 0xdf, 0xdf },
+{ 0x00, 0xe0, 0xc0 },
+{ 0x00, 0xe1, 0xc1 },
+{ 0x00, 0xe2, 0xc2 },
+{ 0x00, 0xe3, 0xc3 },
+{ 0x00, 0xe4, 0xc4 },
+{ 0x00, 0xe5, 0xc5 },
+{ 0x00, 0xe6, 0xc6 },
+{ 0x00, 0xe7, 0xc7 },
+{ 0x00, 0xe8, 0xc8 },
+{ 0x00, 0xe9, 0xc9 },
+{ 0x00, 0xea, 0xca },
+{ 0x00, 0xeb, 0xcb },
+{ 0x00, 0xec, 0xcc },
+{ 0x00, 0xed, 0xcd },
+{ 0x00, 0xee, 0xce },
+{ 0x00, 0xef, 0xcf },
+{ 0x00, 0xf0, 0xd0 },
+{ 0x00, 0xf1, 0xd1 },
+{ 0x00, 0xf2, 0xd2 },
+{ 0x00, 0xf3, 0xd3 },
+{ 0x00, 0xf4, 0xd4 },
+{ 0x00, 0xf5, 0xd5 },
+{ 0x00, 0xf6, 0xd6 },
+{ 0x00, 0xf7, 0xf7 },
+{ 0x00, 0xf8, 0xd8 },
+{ 0x00, 0xf9, 0xd9 },
+{ 0x00, 0xfa, 0xda },
+{ 0x00, 0xfb, 0xdb },
+{ 0x00, 0xfc, 0xdc },
+{ 0x00, 0xfd, 0xdd },
+{ 0x00, 0xfe, 0xde },
+{ 0x00, 0xff, 0xff },
+};
+
+
+struct cs_info iso3_tbl[] = {
+{ 0x00, 0x00, 0x00 },
+{ 0x00, 0x01, 0x01 },
+{ 0x00, 0x02, 0x02 },
+{ 0x00, 0x03, 0x03 },
+{ 0x00, 0x04, 0x04 },
+{ 0x00, 0x05, 0x05 },
+{ 0x00, 0x06, 0x06 },
+{ 0x00, 0x07, 0x07 },
+{ 0x00, 0x08, 0x08 },
+{ 0x00, 0x09, 0x09 },
+{ 0x00, 0x0a, 0x0a },
+{ 0x00, 0x0b, 0x0b },
+{ 0x00, 0x0c, 0x0c },
+{ 0x00, 0x0d, 0x0d },
+{ 0x00, 0x0e, 0x0e },
+{ 0x00, 0x0f, 0x0f },
+{ 0x00, 0x10, 0x10 },
+{ 0x00, 0x11, 0x11 },
+{ 0x00, 0x12, 0x12 },
+{ 0x00, 0x13, 0x13 },
+{ 0x00, 0x14, 0x14 },
+{ 0x00, 0x15, 0x15 },
+{ 0x00, 0x16, 0x16 },
+{ 0x00, 0x17, 0x17 },
+{ 0x00, 0x18, 0x18 },
+{ 0x00, 0x19, 0x19 },
+{ 0x00, 0x1a, 0x1a },
+{ 0x00, 0x1b, 0x1b },
+{ 0x00, 0x1c, 0x1c },
+{ 0x00, 0x1d, 0x1d },
+{ 0x00, 0x1e, 0x1e },
+{ 0x00, 0x1f, 0x1f },
+{ 0x00, 0x20, 0x20 },
+{ 0x00, 0x21, 0x21 },
+{ 0x00, 0x22, 0x22 },
+{ 0x00, 0x23, 0x23 },
+{ 0x00, 0x24, 0x24 },
+{ 0x00, 0x25, 0x25 },
+{ 0x00, 0x26, 0x26 },
+{ 0x00, 0x27, 0x27 },
+{ 0x00, 0x28, 0x28 },
+{ 0x00, 0x29, 0x29 },
+{ 0x00, 0x2a, 0x2a },
+{ 0x00, 0x2b, 0x2b },
+{ 0x00, 0x2c, 0x2c },
+{ 0x00, 0x2d, 0x2d },
+{ 0x00, 0x2e, 0x2e },
+{ 0x00, 0x2f, 0x2f },
+{ 0x00, 0x30, 0x30 },
+{ 0x00, 0x31, 0x31 },
+{ 0x00, 0x32, 0x32 },
+{ 0x00, 0x33, 0x33 },
+{ 0x00, 0x34, 0x34 },
+{ 0x00, 0x35, 0x35 },
+{ 0x00, 0x36, 0x36 },
+{ 0x00, 0x37, 0x37 },
+{ 0x00, 0x38, 0x38 },
+{ 0x00, 0x39, 0x39 },
+{ 0x00, 0x3a, 0x3a },
+{ 0x00, 0x3b, 0x3b },
+{ 0x00, 0x3c, 0x3c },
+{ 0x00, 0x3d, 0x3d },
+{ 0x00, 0x3e, 0x3e },
+{ 0x00, 0x3f, 0x3f },
+{ 0x00, 0x40, 0x40 },
+{ 0x01, 0x61, 0x41 },
+{ 0x01, 0x62, 0x42 },
+{ 0x01, 0x63, 0x43 },
+{ 0x01, 0x64, 0x44 },
+{ 0x01, 0x65, 0x45 },
+{ 0x01, 0x66, 0x46 },
+{ 0x01, 0x67, 0x47 },
+{ 0x01, 0x68, 0x48 },
+{ 0x01, 0x69, 0x49 },
+{ 0x01, 0x6a, 0x4a },
+{ 0x01, 0x6b, 0x4b },
+{ 0x01, 0x6c, 0x4c },
+{ 0x01, 0x6d, 0x4d },
+{ 0x01, 0x6e, 0x4e },
+{ 0x01, 0x6f, 0x4f },
+{ 0x01, 0x70, 0x50 },
+{ 0x01, 0x71, 0x51 },
+{ 0x01, 0x72, 0x52 },
+{ 0x01, 0x73, 0x53 },
+{ 0x01, 0x74, 0x54 },
+{ 0x01, 0x75, 0x55 },
+{ 0x01, 0x76, 0x56 },
+{ 0x01, 0x77, 0x57 },
+{ 0x01, 0x78, 0x58 },
+{ 0x01, 0x79, 0x59 },
+{ 0x01, 0x7a, 0x5a },
+{ 0x00, 0x5b, 0x5b },
+{ 0x00, 0x5c, 0x5c },
+{ 0x00, 0x5d, 0x5d },
+{ 0x00, 0x5e, 0x5e },
+{ 0x00, 0x5f, 0x5f },
+{ 0x00, 0x60, 0x60 },
+{ 0x00, 0x61, 0x41 },
+{ 0x00, 0x62, 0x42 },
+{ 0x00, 0x63, 0x43 },
+{ 0x00, 0x64, 0x44 },
+{ 0x00, 0x65, 0x45 },
+{ 0x00, 0x66, 0x46 },
+{ 0x00, 0x67, 0x47 },
+{ 0x00, 0x68, 0x48 },
+{ 0x00, 0x69, 0x49 },
+{ 0x00, 0x6a, 0x4a },
+{ 0x00, 0x6b, 0x4b },
+{ 0x00, 0x6c, 0x4c },
+{ 0x00, 0x6d, 0x4d },
+{ 0x00, 0x6e, 0x4e },
+{ 0x00, 0x6f, 0x4f },
+{ 0x00, 0x70, 0x50 },
+{ 0x00, 0x71, 0x51 },
+{ 0x00, 0x72, 0x52 },
+{ 0x00, 0x73, 0x53 },
+{ 0x00, 0x74, 0x54 },
+{ 0x00, 0x75, 0x55 },
+{ 0x00, 0x76, 0x56 },
+{ 0x00, 0x77, 0x57 },
+{ 0x00, 0x78, 0x58 },
+{ 0x00, 0x79, 0x59 },
+{ 0x00, 0x7a, 0x5a },
+{ 0x00, 0x7b, 0x7b },
+{ 0x00, 0x7c, 0x7c },
+{ 0x00, 0x7d, 0x7d },
+{ 0x00, 0x7e, 0x7e },
+{ 0x00, 0x7f, 0x7f },
+{ 0x00, 0x80, 0x80 },
+{ 0x00, 0x81, 0x81 },
+{ 0x00, 0x82, 0x82 },
+{ 0x00, 0x83, 0x83 },
+{ 0x00, 0x84, 0x84 },
+{ 0x00, 0x85, 0x85 },
+{ 0x00, 0x86, 0x86 },
+{ 0x00, 0x87, 0x87 },
+{ 0x00, 0x88, 0x88 },
+{ 0x00, 0x89, 0x89 },
+{ 0x00, 0x8a, 0x8a },
+{ 0x00, 0x8b, 0x8b },
+{ 0x00, 0x8c, 0x8c },
+{ 0x00, 0x8d, 0x8d },
+{ 0x00, 0x8e, 0x8e },
+{ 0x00, 0x8f, 0x8f },
+{ 0x00, 0x90, 0x90 },
+{ 0x00, 0x91, 0x91 },
+{ 0x00, 0x92, 0x92 },
+{ 0x00, 0x93, 0x93 },
+{ 0x00, 0x94, 0x94 },
+{ 0x00, 0x95, 0x95 },
+{ 0x00, 0x96, 0x96 },
+{ 0x00, 0x97, 0x97 },
+{ 0x00, 0x98, 0x98 },
+{ 0x00, 0x99, 0x99 },
+{ 0x00, 0x9a, 0x9a },
+{ 0x00, 0x9b, 0x9b },
+{ 0x00, 0x9c, 0x9c },
+{ 0x00, 0x9d, 0x9d },
+{ 0x00, 0x9e, 0x9e },
+{ 0x00, 0x9f, 0x9f },
+{ 0x00, 0xa0, 0xa0 },
+{ 0x01, 0xb1, 0xa1 },
+{ 0x00, 0xa2, 0xa2 },
+{ 0x00, 0xa3, 0xa3 },
+{ 0x00, 0xa4, 0xa4 },
+{ 0x00, 0xa5, 0xa5 },
+{ 0x01, 0xb6, 0xa6 },
+{ 0x00, 0xa7, 0xa7 },
+{ 0x00, 0xa8, 0xa8 },
+{ 0x01, 0x69, 0xa9 },
+{ 0x01, 0xba, 0xaa },
+{ 0x01, 0xbb, 0xab },
+{ 0x01, 0xbc, 0xac },
+{ 0x00, 0xad, 0xad },
+{ 0x00, 0xae, 0xae },
+{ 0x01, 0xbf, 0xaf },
+{ 0x00, 0xb0, 0xb0 },
+{ 0x00, 0xb1, 0xa1 },
+{ 0x00, 0xb2, 0xb2 },
+{ 0x00, 0xb3, 0xb3 },
+{ 0x00, 0xb4, 0xb4 },
+{ 0x00, 0xb5, 0xb5 },
+{ 0x00, 0xb6, 0xa6 },
+{ 0x00, 0xb7, 0xb7 },
+{ 0x00, 0xb8, 0xb8 },
+{ 0x00, 0xb9, 0x49 },
+{ 0x00, 0xba, 0xaa },
+{ 0x00, 0xbb, 0xab },
+{ 0x00, 0xbc, 0xac },
+{ 0x00, 0xbd, 0xbd },
+{ 0x00, 0xbe, 0xbe },
+{ 0x00, 0xbf, 0xaf },
+{ 0x01, 0xe0, 0xc0 },
+{ 0x01, 0xe1, 0xc1 },
+{ 0x01, 0xe2, 0xc2 },
+{ 0x00, 0xc3, 0xc3 },
+{ 0x01, 0xe4, 0xc4 },
+{ 0x01, 0xe5, 0xc5 },
+{ 0x01, 0xe6, 0xc6 },
+{ 0x01, 0xe7, 0xc7 },
+{ 0x01, 0xe8, 0xc8 },
+{ 0x01, 0xe9, 0xc9 },
+{ 0x01, 0xea, 0xca },
+{ 0x01, 0xeb, 0xcb },
+{ 0x01, 0xec, 0xcc },
+{ 0x01, 0xed, 0xcd },
+{ 0x01, 0xee, 0xce },
+{ 0x01, 0xef, 0xcf },
+{ 0x00, 0xd0, 0xd0 },
+{ 0x01, 0xf1, 0xd1 },
+{ 0x01, 0xf2, 0xd2 },
+{ 0x01, 0xf3, 0xd3 },
+{ 0x01, 0xf4, 0xd4 },
+{ 0x01, 0xf5, 0xd5 },
+{ 0x01, 0xf6, 0xd6 },
+{ 0x00, 0xd7, 0xd7 },
+{ 0x01, 0xf8, 0xd8 },
+{ 0x01, 0xf9, 0xd9 },
+{ 0x01, 0xfa, 0xda },
+{ 0x01, 0xfb, 0xdb },
+{ 0x01, 0xfc, 0xdc },
+{ 0x01, 0xfd, 0xdd },
+{ 0x01, 0xfe, 0xde },
+{ 0x00, 0xdf, 0xdf },
+{ 0x00, 0xe0, 0xc0 },
+{ 0x00, 0xe1, 0xc1 },
+{ 0x00, 0xe2, 0xc2 },
+{ 0x00, 0xe3, 0xe3 },
+{ 0x00, 0xe4, 0xc4 },
+{ 0x00, 0xe5, 0xc5 },
+{ 0x00, 0xe6, 0xc6 },
+{ 0x00, 0xe7, 0xc7 },
+{ 0x00, 0xe8, 0xc8 },
+{ 0x00, 0xe9, 0xc9 },
+{ 0x00, 0xea, 0xca },
+{ 0x00, 0xeb, 0xcb },
+{ 0x00, 0xec, 0xcc },
+{ 0x00, 0xed, 0xcd },
+{ 0x00, 0xee, 0xce },
+{ 0x00, 0xef, 0xcf },
+{ 0x00, 0xf0, 0xf0 },
+{ 0x00, 0xf1, 0xd1 },
+{ 0x00, 0xf2, 0xd2 },
+{ 0x00, 0xf3, 0xd3 },
+{ 0x00, 0xf4, 0xd4 },
+{ 0x00, 0xf5, 0xd5 },
+{ 0x00, 0xf6, 0xd6 },
+{ 0x00, 0xf7, 0xf7 },
+{ 0x00, 0xf8, 0xd8 },
+{ 0x00, 0xf9, 0xd9 },
+{ 0x00, 0xfa, 0xda },
+{ 0x00, 0xfb, 0xdb },
+{ 0x00, 0xfc, 0xdc },
+{ 0x00, 0xfd, 0xdd },
+{ 0x00, 0xfe, 0xde },
+{ 0x00, 0xff, 0xff },
+};
+
+struct cs_info iso4_tbl[] = {
+{ 0x00, 0x00, 0x00 },
+{ 0x00, 0x01, 0x01 },
+{ 0x00, 0x02, 0x02 },
+{ 0x00, 0x03, 0x03 },
+{ 0x00, 0x04, 0x04 },
+{ 0x00, 0x05, 0x05 },
+{ 0x00, 0x06, 0x06 },
+{ 0x00, 0x07, 0x07 },
+{ 0x00, 0x08, 0x08 },
+{ 0x00, 0x09, 0x09 },
+{ 0x00, 0x0a, 0x0a },
+{ 0x00, 0x0b, 0x0b },
+{ 0x00, 0x0c, 0x0c },
+{ 0x00, 0x0d, 0x0d },
+{ 0x00, 0x0e, 0x0e },
+{ 0x00, 0x0f, 0x0f },
+{ 0x00, 0x10, 0x10 },
+{ 0x00, 0x11, 0x11 },
+{ 0x00, 0x12, 0x12 },
+{ 0x00, 0x13, 0x13 },
+{ 0x00, 0x14, 0x14 },
+{ 0x00, 0x15, 0x15 },
+{ 0x00, 0x16, 0x16 },
+{ 0x00, 0x17, 0x17 },
+{ 0x00, 0x18, 0x18 },
+{ 0x00, 0x19, 0x19 },
+{ 0x00, 0x1a, 0x1a },
+{ 0x00, 0x1b, 0x1b },
+{ 0x00, 0x1c, 0x1c },
+{ 0x00, 0x1d, 0x1d },
+{ 0x00, 0x1e, 0x1e },
+{ 0x00, 0x1f, 0x1f },
+{ 0x00, 0x20, 0x20 },
+{ 0x00, 0x21, 0x21 },
+{ 0x00, 0x22, 0x22 },
+{ 0x00, 0x23, 0x23 },
+{ 0x00, 0x24, 0x24 },
+{ 0x00, 0x25, 0x25 },
+{ 0x00, 0x26, 0x26 },
+{ 0x00, 0x27, 0x27 },
+{ 0x00, 0x28, 0x28 },
+{ 0x00, 0x29, 0x29 },
+{ 0x00, 0x2a, 0x2a },
+{ 0x00, 0x2b, 0x2b },
+{ 0x00, 0x2c, 0x2c },
+{ 0x00, 0x2d, 0x2d },
+{ 0x00, 0x2e, 0x2e },
+{ 0x00, 0x2f, 0x2f },
+{ 0x00, 0x30, 0x30 },
+{ 0x00, 0x31, 0x31 },
+{ 0x00, 0x32, 0x32 },
+{ 0x00, 0x33, 0x33 },
+{ 0x00, 0x34, 0x34 },
+{ 0x00, 0x35, 0x35 },
+{ 0x00, 0x36, 0x36 },
+{ 0x00, 0x37, 0x37 },
+{ 0x00, 0x38, 0x38 },
+{ 0x00, 0x39, 0x39 },
+{ 0x00, 0x3a, 0x3a },
+{ 0x00, 0x3b, 0x3b },
+{ 0x00, 0x3c, 0x3c },
+{ 0x00, 0x3d, 0x3d },
+{ 0x00, 0x3e, 0x3e },
+{ 0x00, 0x3f, 0x3f },
+{ 0x00, 0x40, 0x40 },
+{ 0x01, 0x61, 0x41 },
+{ 0x01, 0x62, 0x42 },
+{ 0x01, 0x63, 0x43 },
+{ 0x01, 0x64, 0x44 },
+{ 0x01, 0x65, 0x45 },
+{ 0x01, 0x66, 0x46 },
+{ 0x01, 0x67, 0x47 },
+{ 0x01, 0x68, 0x48 },
+{ 0x01, 0x69, 0x49 },
+{ 0x01, 0x6a, 0x4a },
+{ 0x01, 0x6b, 0x4b },
+{ 0x01, 0x6c, 0x4c },
+{ 0x01, 0x6d, 0x4d },
+{ 0x01, 0x6e, 0x4e },
+{ 0x01, 0x6f, 0x4f },
+{ 0x01, 0x70, 0x50 },
+{ 0x01, 0x71, 0x51 },
+{ 0x01, 0x72, 0x52 },
+{ 0x01, 0x73, 0x53 },
+{ 0x01, 0x74, 0x54 },
+{ 0x01, 0x75, 0x55 },
+{ 0x01, 0x76, 0x56 },
+{ 0x01, 0x77, 0x57 },
+{ 0x01, 0x78, 0x58 },
+{ 0x01, 0x79, 0x59 },
+{ 0x01, 0x7a, 0x5a },
+{ 0x00, 0x5b, 0x5b },
+{ 0x00, 0x5c, 0x5c },
+{ 0x00, 0x5d, 0x5d },
+{ 0x00, 0x5e, 0x5e },
+{ 0x00, 0x5f, 0x5f },
+{ 0x00, 0x60, 0x60 },
+{ 0x00, 0x61, 0x41 },
+{ 0x00, 0x62, 0x42 },
+{ 0x00, 0x63, 0x43 },
+{ 0x00, 0x64, 0x44 },
+{ 0x00, 0x65, 0x45 },
+{ 0x00, 0x66, 0x46 },
+{ 0x00, 0x67, 0x47 },
+{ 0x00, 0x68, 0x48 },
+{ 0x00, 0x69, 0x49 },
+{ 0x00, 0x6a, 0x4a },
+{ 0x00, 0x6b, 0x4b },
+{ 0x00, 0x6c, 0x4c },
+{ 0x00, 0x6d, 0x4d },
+{ 0x00, 0x6e, 0x4e },
+{ 0x00, 0x6f, 0x4f },
+{ 0x00, 0x70, 0x50 },
+{ 0x00, 0x71, 0x51 },
+{ 0x00, 0x72, 0x52 },
+{ 0x00, 0x73, 0x53 },
+{ 0x00, 0x74, 0x54 },
+{ 0x00, 0x75, 0x55 },
+{ 0x00, 0x76, 0x56 },
+{ 0x00, 0x77, 0x57 },
+{ 0x00, 0x78, 0x58 },
+{ 0x00, 0x79, 0x59 },
+{ 0x00, 0x7a, 0x5a },
+{ 0x00, 0x7b, 0x7b },
+{ 0x00, 0x7c, 0x7c },
+{ 0x00, 0x7d, 0x7d },
+{ 0x00, 0x7e, 0x7e },
+{ 0x00, 0x7f, 0x7f },
+{ 0x00, 0x80, 0x80 },
+{ 0x00, 0x81, 0x81 },
+{ 0x00, 0x82, 0x82 },
+{ 0x00, 0x83, 0x83 },
+{ 0x00, 0x84, 0x84 },
+{ 0x00, 0x85, 0x85 },
+{ 0x00, 0x86, 0x86 },
+{ 0x00, 0x87, 0x87 },
+{ 0x00, 0x88, 0x88 },
+{ 0x00, 0x89, 0x89 },
+{ 0x00, 0x8a, 0x8a },
+{ 0x00, 0x8b, 0x8b },
+{ 0x00, 0x8c, 0x8c },
+{ 0x00, 0x8d, 0x8d },
+{ 0x00, 0x8e, 0x8e },
+{ 0x00, 0x8f, 0x8f },
+{ 0x00, 0x90, 0x90 },
+{ 0x00, 0x91, 0x91 },
+{ 0x00, 0x92, 0x92 },
+{ 0x00, 0x93, 0x93 },
+{ 0x00, 0x94, 0x94 },
+{ 0x00, 0x95, 0x95 },
+{ 0x00, 0x96, 0x96 },
+{ 0x00, 0x97, 0x97 },
+{ 0x00, 0x98, 0x98 },
+{ 0x00, 0x99, 0x99 },
+{ 0x00, 0x9a, 0x9a },
+{ 0x00, 0x9b, 0x9b },
+{ 0x00, 0x9c, 0x9c },
+{ 0x00, 0x9d, 0x9d },
+{ 0x00, 0x9e, 0x9e },
+{ 0x00, 0x9f, 0x9f },
+{ 0x00, 0xa0, 0xa0 },
+{ 0x01, 0xb1, 0xa1 },
+{ 0x00, 0xa2, 0xa2 },
+{ 0x01, 0xb3, 0xa3 },
+{ 0x00, 0xa4, 0xa4 },
+{ 0x01, 0xb5, 0xa5 },
+{ 0x01, 0xb6, 0xa6 },
+{ 0x00, 0xa7, 0xa7 },
+{ 0x00, 0xa8, 0xa8 },
+{ 0x01, 0xb9, 0xa9 },
+{ 0x01, 0xba, 0xaa },
+{ 0x01, 0xbb, 0xab },
+{ 0x01, 0xbc, 0xac },
+{ 0x00, 0xad, 0xad },
+{ 0x01, 0xbe, 0xae },
+{ 0x00, 0xaf, 0xaf },
+{ 0x00, 0xb0, 0xb0 },
+{ 0x00, 0xb1, 0xa1 },
+{ 0x00, 0xb2, 0xb2 },
+{ 0x00, 0xb3, 0xa3 },
+{ 0x00, 0xb4, 0xb4 },
+{ 0x00, 0xb5, 0xa5 },
+{ 0x00, 0xb6, 0xa6 },
+{ 0x00, 0xb7, 0xb7 },
+{ 0x00, 0xb8, 0xb8 },
+{ 0x00, 0xb9, 0xa9 },
+{ 0x00, 0xba, 0xaa },
+{ 0x00, 0xbb, 0xab },
+{ 0x00, 0xbc, 0xac },
+{ 0x00, 0xbd, 0xbd },
+{ 0x00, 0xbe, 0xae },
+{ 0x00, 0xbf, 0xbf },
+{ 0x01, 0xe0, 0xc0 },
+{ 0x01, 0xe1, 0xc1 },
+{ 0x01, 0xe2, 0xc2 },
+{ 0x01, 0xe3, 0xc3 },
+{ 0x01, 0xe4, 0xc4 },
+{ 0x01, 0xe5, 0xc5 },
+{ 0x01, 0xe6, 0xc6 },
+{ 0x01, 0xe7, 0xc7 },
+{ 0x01, 0xe8, 0xc8 },
+{ 0x01, 0xe9, 0xc9 },
+{ 0x01, 0xea, 0xca },
+{ 0x01, 0xeb, 0xcb },
+{ 0x01, 0xec, 0xcc },
+{ 0x01, 0xed, 0xcd },
+{ 0x01, 0xee, 0xce },
+{ 0x01, 0xef, 0xcf },
+{ 0x01, 0xf0, 0xd0 },
+{ 0x01, 0xf1, 0xd1 },
+{ 0x01, 0xf2, 0xd2 },
+{ 0x01, 0xf3, 0xd3 },
+{ 0x01, 0xf4, 0xd4 },
+{ 0x01, 0xf5, 0xd5 },
+{ 0x01, 0xf6, 0xd6 },
+{ 0x00, 0xd7, 0xd7 },
+{ 0x01, 0xf8, 0xd8 },
+{ 0x01, 0xf9, 0xd9 },
+{ 0x01, 0xfa, 0xda },
+{ 0x01, 0xfb, 0xdb },
+{ 0x01, 0xfc, 0xdc },
+{ 0x01, 0xfd, 0xdd },
+{ 0x01, 0xfe, 0xde },
+{ 0x00, 0xdf, 0xdf },
+{ 0x00, 0xe0, 0xc0 },
+{ 0x00, 0xe1, 0xc1 },
+{ 0x00, 0xe2, 0xc2 },
+{ 0x00, 0xe3, 0xc3 },
+{ 0x00, 0xe4, 0xc4 },
+{ 0x00, 0xe5, 0xc5 },
+{ 0x00, 0xe6, 0xc6 },
+{ 0x00, 0xe7, 0xc7 },
+{ 0x00, 0xe8, 0xc8 },
+{ 0x00, 0xe9, 0xc9 },
+{ 0x00, 0xea, 0xca },
+{ 0x00, 0xeb, 0xcb },
+{ 0x00, 0xec, 0xcc },
+{ 0x00, 0xed, 0xcd },
+{ 0x00, 0xee, 0xce },
+{ 0x00, 0xef, 0xcf },
+{ 0x00, 0xf0, 0xd0 },
+{ 0x00, 0xf1, 0xd1 },
+{ 0x00, 0xf2, 0xd2 },
+{ 0x00, 0xf3, 0xd3 },
+{ 0x00, 0xf4, 0xd4 },
+{ 0x00, 0xf5, 0xd5 },
+{ 0x00, 0xf6, 0xd6 },
+{ 0x00, 0xf7, 0xf7 },
+{ 0x00, 0xf8, 0xd8 },
+{ 0x00, 0xf9, 0xd9 },
+{ 0x00, 0xfa, 0xda },
+{ 0x00, 0xfb, 0xdb },
+{ 0x00, 0xfc, 0xdc },
+{ 0x00, 0xfd, 0xdd },
+{ 0x00, 0xfe, 0xde },
+{ 0x00, 0xff, 0xff },
+};
+
+struct cs_info iso5_tbl[] = {
+{ 0x00, 0x00, 0x00 },
+{ 0x00, 0x01, 0x01 },
+{ 0x00, 0x02, 0x02 },
+{ 0x00, 0x03, 0x03 },
+{ 0x00, 0x04, 0x04 },
+{ 0x00, 0x05, 0x05 },
+{ 0x00, 0x06, 0x06 },
+{ 0x00, 0x07, 0x07 },
+{ 0x00, 0x08, 0x08 },
+{ 0x00, 0x09, 0x09 },
+{ 0x00, 0x0a, 0x0a },
+{ 0x00, 0x0b, 0x0b },
+{ 0x00, 0x0c, 0x0c },
+{ 0x00, 0x0d, 0x0d },
+{ 0x00, 0x0e, 0x0e },
+{ 0x00, 0x0f, 0x0f },
+{ 0x00, 0x10, 0x10 },
+{ 0x00, 0x11, 0x11 },
+{ 0x00, 0x12, 0x12 },
+{ 0x00, 0x13, 0x13 },
+{ 0x00, 0x14, 0x14 },
+{ 0x00, 0x15, 0x15 },
+{ 0x00, 0x16, 0x16 },
+{ 0x00, 0x17, 0x17 },
+{ 0x00, 0x18, 0x18 },
+{ 0x00, 0x19, 0x19 },
+{ 0x00, 0x1a, 0x1a },
+{ 0x00, 0x1b, 0x1b },
+{ 0x00, 0x1c, 0x1c },
+{ 0x00, 0x1d, 0x1d },
+{ 0x00, 0x1e, 0x1e },
+{ 0x00, 0x1f, 0x1f },
+{ 0x00, 0x20, 0x20 },
+{ 0x00, 0x21, 0x21 },
+{ 0x00, 0x22, 0x22 },
+{ 0x00, 0x23, 0x23 },
+{ 0x00, 0x24, 0x24 },
+{ 0x00, 0x25, 0x25 },
+{ 0x00, 0x26, 0x26 },
+{ 0x00, 0x27, 0x27 },
+{ 0x00, 0x28, 0x28 },
+{ 0x00, 0x29, 0x29 },
+{ 0x00, 0x2a, 0x2a },
+{ 0x00, 0x2b, 0x2b },
+{ 0x00, 0x2c, 0x2c },
+{ 0x00, 0x2d, 0x2d },
+{ 0x00, 0x2e, 0x2e },
+{ 0x00, 0x2f, 0x2f },
+{ 0x00, 0x30, 0x30 },
+{ 0x00, 0x31, 0x31 },
+{ 0x00, 0x32, 0x32 },
+{ 0x00, 0x33, 0x33 },
+{ 0x00, 0x34, 0x34 },
+{ 0x00, 0x35, 0x35 },
+{ 0x00, 0x36, 0x36 },
+{ 0x00, 0x37, 0x37 },
+{ 0x00, 0x38, 0x38 },
+{ 0x00, 0x39, 0x39 },
+{ 0x00, 0x3a, 0x3a },
+{ 0x00, 0x3b, 0x3b },
+{ 0x00, 0x3c, 0x3c },
+{ 0x00, 0x3d, 0x3d },
+{ 0x00, 0x3e, 0x3e },
+{ 0x00, 0x3f, 0x3f },
+{ 0x00, 0x40, 0x40 },
+{ 0x01, 0x61, 0x41 },
+{ 0x01, 0x62, 0x42 },
+{ 0x01, 0x63, 0x43 },
+{ 0x01, 0x64, 0x44 },
+{ 0x01, 0x65, 0x45 },
+{ 0x01, 0x66, 0x46 },
+{ 0x01, 0x67, 0x47 },
+{ 0x01, 0x68, 0x48 },
+{ 0x01, 0x69, 0x49 },
+{ 0x01, 0x6a, 0x4a },
+{ 0x01, 0x6b, 0x4b },
+{ 0x01, 0x6c, 0x4c },
+{ 0x01, 0x6d, 0x4d },
+{ 0x01, 0x6e, 0x4e },
+{ 0x01, 0x6f, 0x4f },
+{ 0x01, 0x70, 0x50 },
+{ 0x01, 0x71, 0x51 },
+{ 0x01, 0x72, 0x52 },
+{ 0x01, 0x73, 0x53 },
+{ 0x01, 0x74, 0x54 },
+{ 0x01, 0x75, 0x55 },
+{ 0x01, 0x76, 0x56 },
+{ 0x01, 0x77, 0x57 },
+{ 0x01, 0x78, 0x58 },
+{ 0x01, 0x79, 0x59 },
+{ 0x01, 0x7a, 0x5a },
+{ 0x00, 0x5b, 0x5b },
+{ 0x00, 0x5c, 0x5c },
+{ 0x00, 0x5d, 0x5d },
+{ 0x00, 0x5e, 0x5e },
+{ 0x00, 0x5f, 0x5f },
+{ 0x00, 0x60, 0x60 },
+{ 0x00, 0x61, 0x41 },
+{ 0x00, 0x62, 0x42 },
+{ 0x00, 0x63, 0x43 },
+{ 0x00, 0x64, 0x44 },
+{ 0x00, 0x65, 0x45 },
+{ 0x00, 0x66, 0x46 },
+{ 0x00, 0x67, 0x47 },
+{ 0x00, 0x68, 0x48 },
+{ 0x00, 0x69, 0x49 },
+{ 0x00, 0x6a, 0x4a },
+{ 0x00, 0x6b, 0x4b },
+{ 0x00, 0x6c, 0x4c },
+{ 0x00, 0x6d, 0x4d },
+{ 0x00, 0x6e, 0x4e },
+{ 0x00, 0x6f, 0x4f },
+{ 0x00, 0x70, 0x50 },
+{ 0x00, 0x71, 0x51 },
+{ 0x00, 0x72, 0x52 },
+{ 0x00, 0x73, 0x53 },
+{ 0x00, 0x74, 0x54 },
+{ 0x00, 0x75, 0x55 },
+{ 0x00, 0x76, 0x56 },
+{ 0x00, 0x77, 0x57 },
+{ 0x00, 0x78, 0x58 },
+{ 0x00, 0x79, 0x59 },
+{ 0x00, 0x7a, 0x5a },
+{ 0x00, 0x7b, 0x7b },
+{ 0x00, 0x7c, 0x7c },
+{ 0x00, 0x7d, 0x7d },
+{ 0x00, 0x7e, 0x7e },
+{ 0x00, 0x7f, 0x7f },
+{ 0x00, 0x80, 0x80 },
+{ 0x00, 0x81, 0x81 },
+{ 0x00, 0x82, 0x82 },
+{ 0x00, 0x83, 0x83 },
+{ 0x00, 0x84, 0x84 },
+{ 0x00, 0x85, 0x85 },
+{ 0x00, 0x86, 0x86 },
+{ 0x00, 0x87, 0x87 },
+{ 0x00, 0x88, 0x88 },
+{ 0x00, 0x89, 0x89 },
+{ 0x00, 0x8a, 0x8a },
+{ 0x00, 0x8b, 0x8b },
+{ 0x00, 0x8c, 0x8c },
+{ 0x00, 0x8d, 0x8d },
+{ 0x00, 0x8e, 0x8e },
+{ 0x00, 0x8f, 0x8f },
+{ 0x00, 0x90, 0x90 },
+{ 0x00, 0x91, 0x91 },
+{ 0x00, 0x92, 0x92 },
+{ 0x00, 0x93, 0x93 },
+{ 0x00, 0x94, 0x94 },
+{ 0x00, 0x95, 0x95 },
+{ 0x00, 0x96, 0x96 },
+{ 0x00, 0x97, 0x97 },
+{ 0x00, 0x98, 0x98 },
+{ 0x00, 0x99, 0x99 },
+{ 0x00, 0x9a, 0x9a },
+{ 0x00, 0x9b, 0x9b },
+{ 0x00, 0x9c, 0x9c },
+{ 0x00, 0x9d, 0x9d },
+{ 0x00, 0x9e, 0x9e },
+{ 0x00, 0x9f, 0x9f },
+{ 0x00, 0xa0, 0xa0 },
+{ 0x01, 0xf1, 0xa1 },
+{ 0x01, 0xf2, 0xa2 },
+{ 0x01, 0xf3, 0xa3 },
+{ 0x01, 0xf4, 0xa4 },
+{ 0x01, 0xf5, 0xa5 },
+{ 0x01, 0xf6, 0xa6 },
+{ 0x01, 0xf7, 0xa7 },
+{ 0x01, 0xf8, 0xa8 },
+{ 0x01, 0xf9, 0xa9 },
+{ 0x01, 0xfa, 0xaa },
+{ 0x01, 0xfb, 0xab },
+{ 0x01, 0xfc, 0xac },
+{ 0x00, 0xad, 0xad },
+{ 0x01, 0xfe, 0xae },
+{ 0x01, 0xff, 0xaf },
+{ 0x01, 0xd0, 0xb0 },
+{ 0x01, 0xd1, 0xb1 },
+{ 0x01, 0xd2, 0xb2 },
+{ 0x01, 0xd3, 0xb3 },
+{ 0x01, 0xd4, 0xb4 },
+{ 0x01, 0xd5, 0xb5 },
+{ 0x01, 0xd6, 0xb6 },
+{ 0x01, 0xd7, 0xb7 },
+{ 0x01, 0xd8, 0xb8 },
+{ 0x01, 0xd9, 0xb9 },
+{ 0x01, 0xda, 0xba },
+{ 0x01, 0xdb, 0xbb },
+{ 0x01, 0xdc, 0xbc },
+{ 0x01, 0xdd, 0xbd },
+{ 0x01, 0xde, 0xbe },
+{ 0x01, 0xdf, 0xbf },
+{ 0x01, 0xe0, 0xc0 },
+{ 0x01, 0xe1, 0xc1 },
+{ 0x01, 0xe2, 0xc2 },
+{ 0x01, 0xe3, 0xc3 },
+{ 0x01, 0xe4, 0xc4 },
+{ 0x01, 0xe5, 0xc5 },
+{ 0x01, 0xe6, 0xc6 },
+{ 0x01, 0xe7, 0xc7 },
+{ 0x01, 0xe8, 0xc8 },
+{ 0x01, 0xe9, 0xc9 },
+{ 0x01, 0xea, 0xca },
+{ 0x01, 0xeb, 0xcb },
+{ 0x01, 0xec, 0xcc },
+{ 0x01, 0xed, 0xcd },
+{ 0x01, 0xee, 0xce },
+{ 0x01, 0xef, 0xcf },
+{ 0x00, 0xd0, 0xb0 },
+{ 0x00, 0xd1, 0xb1 },
+{ 0x00, 0xd2, 0xb2 },
+{ 0x00, 0xd3, 0xb3 },
+{ 0x00, 0xd4, 0xb4 },
+{ 0x00, 0xd5, 0xb5 },
+{ 0x00, 0xd6, 0xb6 },
+{ 0x00, 0xd7, 0xb7 },
+{ 0x00, 0xd8, 0xb8 },
+{ 0x00, 0xd9, 0xb9 },
+{ 0x00, 0xda, 0xba },
+{ 0x00, 0xdb, 0xbb },
+{ 0x00, 0xdc, 0xbc },
+{ 0x00, 0xdd, 0xbd },
+{ 0x00, 0xde, 0xbe },
+{ 0x00, 0xdf, 0xbf },
+{ 0x00, 0xe0, 0xc0 },
+{ 0x00, 0xe1, 0xc1 },
+{ 0x00, 0xe2, 0xc2 },
+{ 0x00, 0xe3, 0xc3 },
+{ 0x00, 0xe4, 0xc4 },
+{ 0x00, 0xe5, 0xc5 },
+{ 0x00, 0xe6, 0xc6 },
+{ 0x00, 0xe7, 0xc7 },
+{ 0x00, 0xe8, 0xc8 },
+{ 0x00, 0xe9, 0xc9 },
+{ 0x00, 0xea, 0xca },
+{ 0x00, 0xeb, 0xcb },
+{ 0x00, 0xec, 0xcc },
+{ 0x00, 0xed, 0xcd },
+{ 0x00, 0xee, 0xce },
+{ 0x00, 0xef, 0xcf },
+{ 0x00, 0xf0, 0xf0 },
+{ 0x00, 0xf1, 0xa1 },
+{ 0x00, 0xf2, 0xa2 },
+{ 0x00, 0xf3, 0xa3 },
+{ 0x00, 0xf4, 0xa4 },
+{ 0x00, 0xf5, 0xa5 },
+{ 0x00, 0xf6, 0xa6 },
+{ 0x00, 0xf7, 0xa7 },
+{ 0x00, 0xf8, 0xa8 },
+{ 0x00, 0xf9, 0xa9 },
+{ 0x00, 0xfa, 0xaa },
+{ 0x00, 0xfb, 0xab },
+{ 0x00, 0xfc, 0xac },
+{ 0x00, 0xfd, 0xfd },
+{ 0x00, 0xfe, 0xae },
+{ 0x00, 0xff, 0xaf },
+};
+
+struct cs_info iso6_tbl[] = {
+{ 0x00, 0x00, 0x00 },
+{ 0x00, 0x01, 0x01 },
+{ 0x00, 0x02, 0x02 },
+{ 0x00, 0x03, 0x03 },
+{ 0x00, 0x04, 0x04 },
+{ 0x00, 0x05, 0x05 },
+{ 0x00, 0x06, 0x06 },
+{ 0x00, 0x07, 0x07 },
+{ 0x00, 0x08, 0x08 },
+{ 0x00, 0x09, 0x09 },
+{ 0x00, 0x0a, 0x0a },
+{ 0x00, 0x0b, 0x0b },
+{ 0x00, 0x0c, 0x0c },
+{ 0x00, 0x0d, 0x0d },
+{ 0x00, 0x0e, 0x0e },
+{ 0x00, 0x0f, 0x0f },
+{ 0x00, 0x10, 0x10 },
+{ 0x00, 0x11, 0x11 },
+{ 0x00, 0x12, 0x12 },
+{ 0x00, 0x13, 0x13 },
+{ 0x00, 0x14, 0x14 },
+{ 0x00, 0x15, 0x15 },
+{ 0x00, 0x16, 0x16 },
+{ 0x00, 0x17, 0x17 },
+{ 0x00, 0x18, 0x18 },
+{ 0x00, 0x19, 0x19 },
+{ 0x00, 0x1a, 0x1a },
+{ 0x00, 0x1b, 0x1b },
+{ 0x00, 0x1c, 0x1c },
+{ 0x00, 0x1d, 0x1d },
+{ 0x00, 0x1e, 0x1e },
+{ 0x00, 0x1f, 0x1f },
+{ 0x00, 0x20, 0x20 },
+{ 0x00, 0x21, 0x21 },
+{ 0x00, 0x22, 0x22 },
+{ 0x00, 0x23, 0x23 },
+{ 0x00, 0x24, 0x24 },
+{ 0x00, 0x25, 0x25 },
+{ 0x00, 0x26, 0x26 },
+{ 0x00, 0x27, 0x27 },
+{ 0x00, 0x28, 0x28 },
+{ 0x00, 0x29, 0x29 },
+{ 0x00, 0x2a, 0x2a },
+{ 0x00, 0x2b, 0x2b },
+{ 0x00, 0x2c, 0x2c },
+{ 0x00, 0x2d, 0x2d },
+{ 0x00, 0x2e, 0x2e },
+{ 0x00, 0x2f, 0x2f },
+{ 0x00, 0x30, 0x30 },
+{ 0x00, 0x31, 0x31 },
+{ 0x00, 0x32, 0x32 },
+{ 0x00, 0x33, 0x33 },
+{ 0x00, 0x34, 0x34 },
+{ 0x00, 0x35, 0x35 },
+{ 0x00, 0x36, 0x36 },
+{ 0x00, 0x37, 0x37 },
+{ 0x00, 0x38, 0x38 },
+{ 0x00, 0x39, 0x39 },
+{ 0x00, 0x3a, 0x3a },
+{ 0x00, 0x3b, 0x3b },
+{ 0x00, 0x3c, 0x3c },
+{ 0x00, 0x3d, 0x3d },
+{ 0x00, 0x3e, 0x3e },
+{ 0x00, 0x3f, 0x3f },
+{ 0x00, 0x40, 0x40 },
+{ 0x01, 0x61, 0x41 },
+{ 0x01, 0x62, 0x42 },
+{ 0x01, 0x63, 0x43 },
+{ 0x01, 0x64, 0x44 },
+{ 0x01, 0x65, 0x45 },
+{ 0x01, 0x66, 0x46 },
+{ 0x01, 0x67, 0x47 },
+{ 0x01, 0x68, 0x48 },
+{ 0x01, 0x69, 0x49 },
+{ 0x01, 0x6a, 0x4a },
+{ 0x01, 0x6b, 0x4b },
+{ 0x01, 0x6c, 0x4c },
+{ 0x01, 0x6d, 0x4d },
+{ 0x01, 0x6e, 0x4e },
+{ 0x01, 0x6f, 0x4f },
+{ 0x01, 0x70, 0x50 },
+{ 0x01, 0x71, 0x51 },
+{ 0x01, 0x72, 0x52 },
+{ 0x01, 0x73, 0x53 },
+{ 0x01, 0x74, 0x54 },
+{ 0x01, 0x75, 0x55 },
+{ 0x01, 0x76, 0x56 },
+{ 0x01, 0x77, 0x57 },
+{ 0x01, 0x78, 0x58 },
+{ 0x01, 0x79, 0x59 },
+{ 0x01, 0x7a, 0x5a },
+{ 0x00, 0x5b, 0x5b },
+{ 0x00, 0x5c, 0x5c },
+{ 0x00, 0x5d, 0x5d },
+{ 0x00, 0x5e, 0x5e },
+{ 0x00, 0x5f, 0x5f },
+{ 0x00, 0x60, 0x60 },
+{ 0x00, 0x61, 0x41 },
+{ 0x00, 0x62, 0x42 },
+{ 0x00, 0x63, 0x43 },
+{ 0x00, 0x64, 0x44 },
+{ 0x00, 0x65, 0x45 },
+{ 0x00, 0x66, 0x46 },
+{ 0x00, 0x67, 0x47 },
+{ 0x00, 0x68, 0x48 },
+{ 0x00, 0x69, 0x49 },
+{ 0x00, 0x6a, 0x4a },
+{ 0x00, 0x6b, 0x4b },
+{ 0x00, 0x6c, 0x4c },
+{ 0x00, 0x6d, 0x4d },
+{ 0x00, 0x6e, 0x4e },
+{ 0x00, 0x6f, 0x4f },
+{ 0x00, 0x70, 0x50 },
+{ 0x00, 0x71, 0x51 },
+{ 0x00, 0x72, 0x52 },
+{ 0x00, 0x73, 0x53 },
+{ 0x00, 0x74, 0x54 },
+{ 0x00, 0x75, 0x55 },
+{ 0x00, 0x76, 0x56 },
+{ 0x00, 0x77, 0x57 },
+{ 0x00, 0x78, 0x58 },
+{ 0x00, 0x79, 0x59 },
+{ 0x00, 0x7a, 0x5a },
+{ 0x00, 0x7b, 0x7b },
+{ 0x00, 0x7c, 0x7c },
+{ 0x00, 0x7d, 0x7d },
+{ 0x00, 0x7e, 0x7e },
+{ 0x00, 0x7f, 0x7f },
+{ 0x00, 0x80, 0x80 },
+{ 0x00, 0x81, 0x81 },
+{ 0x00, 0x82, 0x82 },
+{ 0x00, 0x83, 0x83 },
+{ 0x00, 0x84, 0x84 },
+{ 0x00, 0x85, 0x85 },
+{ 0x00, 0x86, 0x86 },
+{ 0x00, 0x87, 0x87 },
+{ 0x00, 0x88, 0x88 },
+{ 0x00, 0x89, 0x89 },
+{ 0x00, 0x8a, 0x8a },
+{ 0x00, 0x8b, 0x8b },
+{ 0x00, 0x8c, 0x8c },
+{ 0x00, 0x8d, 0x8d },
+{ 0x00, 0x8e, 0x8e },
+{ 0x00, 0x8f, 0x8f },
+{ 0x00, 0x90, 0x90 },
+{ 0x00, 0x91, 0x91 },
+{ 0x00, 0x92, 0x92 },
+{ 0x00, 0x93, 0x93 },
+{ 0x00, 0x94, 0x94 },
+{ 0x00, 0x95, 0x95 },
+{ 0x00, 0x96, 0x96 },
+{ 0x00, 0x97, 0x97 },
+{ 0x00, 0x98, 0x98 },
+{ 0x00, 0x99, 0x99 },
+{ 0x00, 0x9a, 0x9a },
+{ 0x00, 0x9b, 0x9b },
+{ 0x00, 0x9c, 0x9c },
+{ 0x00, 0x9d, 0x9d },
+{ 0x00, 0x9e, 0x9e },
+{ 0x00, 0x9f, 0x9f },
+{ 0x00, 0xa0, 0xa0 },
+{ 0x00, 0xa1, 0xa1 },
+{ 0x00, 0xa2, 0xa2 },
+{ 0x00, 0xa3, 0xa3 },
+{ 0x00, 0xa4, 0xa4 },
+{ 0x00, 0xa5, 0xa5 },
+{ 0x00, 0xa6, 0xa6 },
+{ 0x00, 0xa7, 0xa7 },
+{ 0x00, 0xa8, 0xa8 },
+{ 0x00, 0xa9, 0xa9 },
+{ 0x00, 0xaa, 0xaa },
+{ 0x00, 0xab, 0xab },
+{ 0x00, 0xac, 0xac },
+{ 0x00, 0xad, 0xad },
+{ 0x00, 0xae, 0xae },
+{ 0x00, 0xaf, 0xaf },
+{ 0x00, 0xb0, 0xb0 },
+{ 0x00, 0xb1, 0xb1 },
+{ 0x00, 0xb2, 0xb2 },
+{ 0x00, 0xb3, 0xb3 },
+{ 0x00, 0xb4, 0xb4 },
+{ 0x00, 0xb5, 0xb5 },
+{ 0x00, 0xb6, 0xb6 },
+{ 0x00, 0xb7, 0xb7 },
+{ 0x00, 0xb8, 0xb8 },
+{ 0x00, 0xb9, 0xb9 },
+{ 0x00, 0xba, 0xba },
+{ 0x00, 0xbb, 0xbb },
+{ 0x00, 0xbc, 0xbc },
+{ 0x00, 0xbd, 0xbd },
+{ 0x00, 0xbe, 0xbe },
+{ 0x00, 0xbf, 0xbf },
+{ 0x00, 0xc0, 0xc0 },
+{ 0x00, 0xc1, 0xc1 },
+{ 0x00, 0xc2, 0xc2 },
+{ 0x00, 0xc3, 0xc3 },
+{ 0x00, 0xc4, 0xc4 },
+{ 0x00, 0xc5, 0xc5 },
+{ 0x00, 0xc6, 0xc6 },
+{ 0x00, 0xc7, 0xc7 },
+{ 0x00, 0xc8, 0xc8 },
+{ 0x00, 0xc9, 0xc9 },
+{ 0x00, 0xca, 0xca },
+{ 0x00, 0xcb, 0xcb },
+{ 0x00, 0xcc, 0xcc },
+{ 0x00, 0xcd, 0xcd },
+{ 0x00, 0xce, 0xce },
+{ 0x00, 0xcf, 0xcf },
+{ 0x00, 0xd0, 0xd0 },
+{ 0x00, 0xd1, 0xd1 },
+{ 0x00, 0xd2, 0xd2 },
+{ 0x00, 0xd3, 0xd3 },
+{ 0x00, 0xd4, 0xd4 },
+{ 0x00, 0xd5, 0xd5 },
+{ 0x00, 0xd6, 0xd6 },
+{ 0x00, 0xd7, 0xd7 },
+{ 0x00, 0xd8, 0xd8 },
+{ 0x00, 0xd9, 0xd9 },
+{ 0x00, 0xda, 0xda },
+{ 0x00, 0xdb, 0xdb },
+{ 0x00, 0xdc, 0xdc },
+{ 0x00, 0xdd, 0xdd },
+{ 0x00, 0xde, 0xde },
+{ 0x00, 0xdf, 0xdf },
+{ 0x00, 0xe0, 0xe0 },
+{ 0x00, 0xe1, 0xe1 },
+{ 0x00, 0xe2, 0xe2 },
+{ 0x00, 0xe3, 0xe3 },
+{ 0x00, 0xe4, 0xe4 },
+{ 0x00, 0xe5, 0xe5 },
+{ 0x00, 0xe6, 0xe6 },
+{ 0x00, 0xe7, 0xe7 },
+{ 0x00, 0xe8, 0xe8 },
+{ 0x00, 0xe9, 0xe9 },
+{ 0x00, 0xea, 0xea },
+{ 0x00, 0xeb, 0xeb },
+{ 0x00, 0xec, 0xec },
+{ 0x00, 0xed, 0xed },
+{ 0x00, 0xee, 0xee },
+{ 0x00, 0xef, 0xef },
+{ 0x00, 0xf0, 0xf0 },
+{ 0x00, 0xf1, 0xf1 },
+{ 0x00, 0xf2, 0xf2 },
+{ 0x00, 0xf3, 0xf3 },
+{ 0x00, 0xf4, 0xf4 },
+{ 0x00, 0xf5, 0xf5 },
+{ 0x00, 0xf6, 0xf6 },
+{ 0x00, 0xf7, 0xf7 },
+{ 0x00, 0xf8, 0xf8 },
+{ 0x00, 0xf9, 0xf9 },
+{ 0x00, 0xfa, 0xfa },
+{ 0x00, 0xfb, 0xfb },
+{ 0x00, 0xfc, 0xfc },
+{ 0x00, 0xfd, 0xfd },
+{ 0x00, 0xfe, 0xfe },
+{ 0x00, 0xff, 0xff },
+};
+
+struct cs_info iso7_tbl[] = {
+{ 0x00, 0x00, 0x00 },
+{ 0x00, 0x01, 0x01 },
+{ 0x00, 0x02, 0x02 },
+{ 0x00, 0x03, 0x03 },
+{ 0x00, 0x04, 0x04 },
+{ 0x00, 0x05, 0x05 },
+{ 0x00, 0x06, 0x06 },
+{ 0x00, 0x07, 0x07 },
+{ 0x00, 0x08, 0x08 },
+{ 0x00, 0x09, 0x09 },
+{ 0x00, 0x0a, 0x0a },
+{ 0x00, 0x0b, 0x0b },
+{ 0x00, 0x0c, 0x0c },
+{ 0x00, 0x0d, 0x0d },
+{ 0x00, 0x0e, 0x0e },
+{ 0x00, 0x0f, 0x0f },
+{ 0x00, 0x10, 0x10 },
+{ 0x00, 0x11, 0x11 },
+{ 0x00, 0x12, 0x12 },
+{ 0x00, 0x13, 0x13 },
+{ 0x00, 0x14, 0x14 },
+{ 0x00, 0x15, 0x15 },
+{ 0x00, 0x16, 0x16 },
+{ 0x00, 0x17, 0x17 },
+{ 0x00, 0x18, 0x18 },
+{ 0x00, 0x19, 0x19 },
+{ 0x00, 0x1a, 0x1a },
+{ 0x00, 0x1b, 0x1b },
+{ 0x00, 0x1c, 0x1c },
+{ 0x00, 0x1d, 0x1d },
+{ 0x00, 0x1e, 0x1e },
+{ 0x00, 0x1f, 0x1f },
+{ 0x00, 0x20, 0x20 },
+{ 0x00, 0x21, 0x21 },
+{ 0x00, 0x22, 0x22 },
+{ 0x00, 0x23, 0x23 },
+{ 0x00, 0x24, 0x24 },
+{ 0x00, 0x25, 0x25 },
+{ 0x00, 0x26, 0x26 },
+{ 0x00, 0x27, 0x27 },
+{ 0x00, 0x28, 0x28 },
+{ 0x00, 0x29, 0x29 },
+{ 0x00, 0x2a, 0x2a },
+{ 0x00, 0x2b, 0x2b },
+{ 0x00, 0x2c, 0x2c },
+{ 0x00, 0x2d, 0x2d },
+{ 0x00, 0x2e, 0x2e },
+{ 0x00, 0x2f, 0x2f },
+{ 0x00, 0x30, 0x30 },
+{ 0x00, 0x31, 0x31 },
+{ 0x00, 0x32, 0x32 },
+{ 0x00, 0x33, 0x33 },
+{ 0x00, 0x34, 0x34 },
+{ 0x00, 0x35, 0x35 },
+{ 0x00, 0x36, 0x36 },
+{ 0x00, 0x37, 0x37 },
+{ 0x00, 0x38, 0x38 },
+{ 0x00, 0x39, 0x39 },
+{ 0x00, 0x3a, 0x3a },
+{ 0x00, 0x3b, 0x3b },
+{ 0x00, 0x3c, 0x3c },
+{ 0x00, 0x3d, 0x3d },
+{ 0x00, 0x3e, 0x3e },
+{ 0x00, 0x3f, 0x3f },
+{ 0x00, 0x40, 0x40 },
+{ 0x01, 0x61, 0x41 },
+{ 0x01, 0x62, 0x42 },
+{ 0x01, 0x63, 0x43 },
+{ 0x01, 0x64, 0x44 },
+{ 0x01, 0x65, 0x45 },
+{ 0x01, 0x66, 0x46 },
+{ 0x01, 0x67, 0x47 },
+{ 0x01, 0x68, 0x48 },
+{ 0x01, 0x69, 0x49 },
+{ 0x01, 0x6a, 0x4a },
+{ 0x01, 0x6b, 0x4b },
+{ 0x01, 0x6c, 0x4c },
+{ 0x01, 0x6d, 0x4d },
+{ 0x01, 0x6e, 0x4e },
+{ 0x01, 0x6f, 0x4f },
+{ 0x01, 0x70, 0x50 },
+{ 0x01, 0x71, 0x51 },
+{ 0x01, 0x72, 0x52 },
+{ 0x01, 0x73, 0x53 },
+{ 0x01, 0x74, 0x54 },
+{ 0x01, 0x75, 0x55 },
+{ 0x01, 0x76, 0x56 },
+{ 0x01, 0x77, 0x57 },
+{ 0x01, 0x78, 0x58 },
+{ 0x01, 0x79, 0x59 },
+{ 0x01, 0x7a, 0x5a },
+{ 0x00, 0x5b, 0x5b },
+{ 0x00, 0x5c, 0x5c },
+{ 0x00, 0x5d, 0x5d },
+{ 0x00, 0x5e, 0x5e },
+{ 0x00, 0x5f, 0x5f },
+{ 0x00, 0x60, 0x60 },
+{ 0x00, 0x61, 0x41 },
+{ 0x00, 0x62, 0x42 },
+{ 0x00, 0x63, 0x43 },
+{ 0x00, 0x64, 0x44 },
+{ 0x00, 0x65, 0x45 },
+{ 0x00, 0x66, 0x46 },
+{ 0x00, 0x67, 0x47 },
+{ 0x00, 0x68, 0x48 },
+{ 0x00, 0x69, 0x49 },
+{ 0x00, 0x6a, 0x4a },
+{ 0x00, 0x6b, 0x4b },
+{ 0x00, 0x6c, 0x4c },
+{ 0x00, 0x6d, 0x4d },
+{ 0x00, 0x6e, 0x4e },
+{ 0x00, 0x6f, 0x4f },
+{ 0x00, 0x70, 0x50 },
+{ 0x00, 0x71, 0x51 },
+{ 0x00, 0x72, 0x52 },
+{ 0x00, 0x73, 0x53 },
+{ 0x00, 0x74, 0x54 },
+{ 0x00, 0x75, 0x55 },
+{ 0x00, 0x76, 0x56 },
+{ 0x00, 0x77, 0x57 },
+{ 0x00, 0x78, 0x58 },
+{ 0x00, 0x79, 0x59 },
+{ 0x00, 0x7a, 0x5a },
+{ 0x00, 0x7b, 0x7b },
+{ 0x00, 0x7c, 0x7c },
+{ 0x00, 0x7d, 0x7d },
+{ 0x00, 0x7e, 0x7e },
+{ 0x00, 0x7f, 0x7f },
+{ 0x00, 0x80, 0x80 },
+{ 0x00, 0x81, 0x81 },
+{ 0x00, 0x82, 0x82 },
+{ 0x00, 0x83, 0x83 },
+{ 0x00, 0x84, 0x84 },
+{ 0x00, 0x85, 0x85 },
+{ 0x00, 0x86, 0x86 },
+{ 0x00, 0x87, 0x87 },
+{ 0x00, 0x88, 0x88 },
+{ 0x00, 0x89, 0x89 },
+{ 0x00, 0x8a, 0x8a },
+{ 0x00, 0x8b, 0x8b },
+{ 0x00, 0x8c, 0x8c },
+{ 0x00, 0x8d, 0x8d },
+{ 0x00, 0x8e, 0x8e },
+{ 0x00, 0x8f, 0x8f },
+{ 0x00, 0x90, 0x90 },
+{ 0x00, 0x91, 0x91 },
+{ 0x00, 0x92, 0x92 },
+{ 0x00, 0x93, 0x93 },
+{ 0x00, 0x94, 0x94 },
+{ 0x00, 0x95, 0x95 },
+{ 0x00, 0x96, 0x96 },
+{ 0x00, 0x97, 0x97 },
+{ 0x00, 0x98, 0x98 },
+{ 0x00, 0x99, 0x99 },
+{ 0x00, 0x9a, 0x9a },
+{ 0x00, 0x9b, 0x9b },
+{ 0x00, 0x9c, 0x9c },
+{ 0x00, 0x9d, 0x9d },
+{ 0x00, 0x9e, 0x9e },
+{ 0x00, 0x9f, 0x9f },
+{ 0x00, 0xa0, 0xa0 },
+{ 0x00, 0xa1, 0xa1 },
+{ 0x00, 0xa2, 0xa2 },
+{ 0x00, 0xa3, 0xa3 },
+{ 0x00, 0xa4, 0xa4 },
+{ 0x00, 0xa5, 0xa5 },
+{ 0x00, 0xa6, 0xa6 },
+{ 0x00, 0xa7, 0xa7 },
+{ 0x00, 0xa8, 0xa8 },
+{ 0x00, 0xa9, 0xa9 },
+{ 0x00, 0xaa, 0xaa },
+{ 0x00, 0xab, 0xab },
+{ 0x00, 0xac, 0xac },
+{ 0x00, 0xad, 0xad },
+{ 0x00, 0xae, 0xae },
+{ 0x00, 0xaf, 0xaf },
+{ 0x00, 0xb0, 0xb0 },
+{ 0x00, 0xb1, 0xb1 },
+{ 0x00, 0xb2, 0xb2 },
+{ 0x00, 0xb3, 0xb3 },
+{ 0x00, 0xb4, 0xb4 },
+{ 0x00, 0xb5, 0xb5 },
+{ 0x01, 0xdc, 0xb6 },
+{ 0x00, 0xb7, 0xb7 },
+{ 0x01, 0xdd, 0xb8 },
+{ 0x01, 0xde, 0xb9 },
+{ 0x01, 0xdf, 0xba },
+{ 0x00, 0xbb, 0xbb },
+{ 0x01, 0xfc, 0xbc },
+{ 0x00, 0xbd, 0xbd },
+{ 0x01, 0xfd, 0xbe },
+{ 0x01, 0xfe, 0xbf },
+{ 0x00, 0xc0, 0xc0 },
+{ 0x01, 0xe1, 0xc1 },
+{ 0x01, 0xe2, 0xc2 },
+{ 0x01, 0xe3, 0xc3 },
+{ 0x01, 0xe4, 0xc4 },
+{ 0x01, 0xe5, 0xc5 },
+{ 0x01, 0xe6, 0xc6 },
+{ 0x01, 0xe7, 0xc7 },
+{ 0x01, 0xe8, 0xc8 },
+{ 0x01, 0xe9, 0xc9 },
+{ 0x01, 0xea, 0xca },
+{ 0x01, 0xeb, 0xcb },
+{ 0x01, 0xec, 0xcc },
+{ 0x01, 0xed, 0xcd },
+{ 0x01, 0xee, 0xce },
+{ 0x01, 0xef, 0xcf },
+{ 0x01, 0xf0, 0xd0 },
+{ 0x01, 0xf1, 0xd1 },
+{ 0x00, 0xd2, 0xd2 },
+{ 0x01, 0xf3, 0xd3 },
+{ 0x01, 0xf4, 0xd4 },
+{ 0x01, 0xf5, 0xd5 },
+{ 0x01, 0xf6, 0xd6 },
+{ 0x01, 0xf7, 0xd7 },
+{ 0x01, 0xf8, 0xd8 },
+{ 0x01, 0xf9, 0xd9 },
+{ 0x01, 0xfa, 0xda },
+{ 0x01, 0xfb, 0xdb },
+{ 0x00, 0xdc, 0xb6 },
+{ 0x00, 0xdd, 0xb8 },
+{ 0x00, 0xde, 0xb9 },
+{ 0x00, 0xdf, 0xba },
+{ 0x00, 0xe0, 0xe0 },
+{ 0x00, 0xe1, 0xc1 },
+{ 0x00, 0xe2, 0xc2 },
+{ 0x00, 0xe3, 0xc3 },
+{ 0x00, 0xe4, 0xc4 },
+{ 0x00, 0xe5, 0xc5 },
+{ 0x00, 0xe6, 0xc6 },
+{ 0x00, 0xe7, 0xc7 },
+{ 0x00, 0xe8, 0xc8 },
+{ 0x00, 0xe9, 0xc9 },
+{ 0x00, 0xea, 0xca },
+{ 0x00, 0xeb, 0xcb },
+{ 0x00, 0xec, 0xcc },
+{ 0x00, 0xed, 0xcd },
+{ 0x00, 0xee, 0xce },
+{ 0x00, 0xef, 0xcf },
+{ 0x00, 0xf0, 0xd0 },
+{ 0x00, 0xf1, 0xd1 },
+{ 0x00, 0xf2, 0xd3 },
+{ 0x00, 0xf3, 0xd3 },
+{ 0x00, 0xf4, 0xd4 },
+{ 0x00, 0xf5, 0xd5 },
+{ 0x00, 0xf6, 0xd6 },
+{ 0x00, 0xf7, 0xd7 },
+{ 0x00, 0xf8, 0xd8 },
+{ 0x00, 0xf9, 0xd9 },
+{ 0x00, 0xfa, 0xda },
+{ 0x00, 0xfb, 0xdb },
+{ 0x00, 0xfc, 0xbc },
+{ 0x00, 0xfd, 0xbe },
+{ 0x00, 0xfe, 0xbf },
+{ 0x00, 0xff, 0xff },
+};
+
+struct cs_info iso8_tbl[] = {
+{ 0x00, 0x00, 0x00 },
+{ 0x00, 0x01, 0x01 },
+{ 0x00, 0x02, 0x02 },
+{ 0x00, 0x03, 0x03 },
+{ 0x00, 0x04, 0x04 },
+{ 0x00, 0x05, 0x05 },
+{ 0x00, 0x06, 0x06 },
+{ 0x00, 0x07, 0x07 },
+{ 0x00, 0x08, 0x08 },
+{ 0x00, 0x09, 0x09 },
+{ 0x00, 0x0a, 0x0a },
+{ 0x00, 0x0b, 0x0b },
+{ 0x00, 0x0c, 0x0c },
+{ 0x00, 0x0d, 0x0d },
+{ 0x00, 0x0e, 0x0e },
+{ 0x00, 0x0f, 0x0f },
+{ 0x00, 0x10, 0x10 },
+{ 0x00, 0x11, 0x11 },
+{ 0x00, 0x12, 0x12 },
+{ 0x00, 0x13, 0x13 },
+{ 0x00, 0x14, 0x14 },
+{ 0x00, 0x15, 0x15 },
+{ 0x00, 0x16, 0x16 },
+{ 0x00, 0x17, 0x17 },
+{ 0x00, 0x18, 0x18 },
+{ 0x00, 0x19, 0x19 },
+{ 0x00, 0x1a, 0x1a },
+{ 0x00, 0x1b, 0x1b },
+{ 0x00, 0x1c, 0x1c },
+{ 0x00, 0x1d, 0x1d },
+{ 0x00, 0x1e, 0x1e },
+{ 0x00, 0x1f, 0x1f },
+{ 0x00, 0x20, 0x20 },
+{ 0x00, 0x21, 0x21 },
+{ 0x00, 0x22, 0x22 },
+{ 0x00, 0x23, 0x23 },
+{ 0x00, 0x24, 0x24 },
+{ 0x00, 0x25, 0x25 },
+{ 0x00, 0x26, 0x26 },
+{ 0x00, 0x27, 0x27 },
+{ 0x00, 0x28, 0x28 },
+{ 0x00, 0x29, 0x29 },
+{ 0x00, 0x2a, 0x2a },
+{ 0x00, 0x2b, 0x2b },
+{ 0x00, 0x2c, 0x2c },
+{ 0x00, 0x2d, 0x2d },
+{ 0x00, 0x2e, 0x2e },
+{ 0x00, 0x2f, 0x2f },
+{ 0x00, 0x30, 0x30 },
+{ 0x00, 0x31, 0x31 },
+{ 0x00, 0x32, 0x32 },
+{ 0x00, 0x33, 0x33 },
+{ 0x00, 0x34, 0x34 },
+{ 0x00, 0x35, 0x35 },
+{ 0x00, 0x36, 0x36 },
+{ 0x00, 0x37, 0x37 },
+{ 0x00, 0x38, 0x38 },
+{ 0x00, 0x39, 0x39 },
+{ 0x00, 0x3a, 0x3a },
+{ 0x00, 0x3b, 0x3b },
+{ 0x00, 0x3c, 0x3c },
+{ 0x00, 0x3d, 0x3d },
+{ 0x00, 0x3e, 0x3e },
+{ 0x00, 0x3f, 0x3f },
+{ 0x00, 0x40, 0x40 },
+{ 0x01, 0x61, 0x41 },
+{ 0x01, 0x62, 0x42 },
+{ 0x01, 0x63, 0x43 },
+{ 0x01, 0x64, 0x44 },
+{ 0x01, 0x65, 0x45 },
+{ 0x01, 0x66, 0x46 },
+{ 0x01, 0x67, 0x47 },
+{ 0x01, 0x68, 0x48 },
+{ 0x01, 0x69, 0x49 },
+{ 0x01, 0x6a, 0x4a },
+{ 0x01, 0x6b, 0x4b },
+{ 0x01, 0x6c, 0x4c },
+{ 0x01, 0x6d, 0x4d },
+{ 0x01, 0x6e, 0x4e },
+{ 0x01, 0x6f, 0x4f },
+{ 0x01, 0x70, 0x50 },
+{ 0x01, 0x71, 0x51 },
+{ 0x01, 0x72, 0x52 },
+{ 0x01, 0x73, 0x53 },
+{ 0x01, 0x74, 0x54 },
+{ 0x01, 0x75, 0x55 },
+{ 0x01, 0x76, 0x56 },
+{ 0x01, 0x77, 0x57 },
+{ 0x01, 0x78, 0x58 },
+{ 0x01, 0x79, 0x59 },
+{ 0x01, 0x7a, 0x5a },
+{ 0x00, 0x5b, 0x5b },
+{ 0x00, 0x5c, 0x5c },
+{ 0x00, 0x5d, 0x5d },
+{ 0x00, 0x5e, 0x5e },
+{ 0x00, 0x5f, 0x5f },
+{ 0x00, 0x60, 0x60 },
+{ 0x00, 0x61, 0x41 },
+{ 0x00, 0x62, 0x42 },
+{ 0x00, 0x63, 0x43 },
+{ 0x00, 0x64, 0x44 },
+{ 0x00, 0x65, 0x45 },
+{ 0x00, 0x66, 0x46 },
+{ 0x00, 0x67, 0x47 },
+{ 0x00, 0x68, 0x48 },
+{ 0x00, 0x69, 0x49 },
+{ 0x00, 0x6a, 0x4a },
+{ 0x00, 0x6b, 0x4b },
+{ 0x00, 0x6c, 0x4c },
+{ 0x00, 0x6d, 0x4d },
+{ 0x00, 0x6e, 0x4e },
+{ 0x00, 0x6f, 0x4f },
+{ 0x00, 0x70, 0x50 },
+{ 0x00, 0x71, 0x51 },
+{ 0x00, 0x72, 0x52 },
+{ 0x00, 0x73, 0x53 },
+{ 0x00, 0x74, 0x54 },
+{ 0x00, 0x75, 0x55 },
+{ 0x00, 0x76, 0x56 },
+{ 0x00, 0x77, 0x57 },
+{ 0x00, 0x78, 0x58 },
+{ 0x00, 0x79, 0x59 },
+{ 0x00, 0x7a, 0x5a },
+{ 0x00, 0x7b, 0x7b },
+{ 0x00, 0x7c, 0x7c },
+{ 0x00, 0x7d, 0x7d },
+{ 0x00, 0x7e, 0x7e },
+{ 0x00, 0x7f, 0x7f },
+{ 0x00, 0x80, 0x80 },
+{ 0x00, 0x81, 0x81 },
+{ 0x00, 0x82, 0x82 },
+{ 0x00, 0x83, 0x83 },
+{ 0x00, 0x84, 0x84 },
+{ 0x00, 0x85, 0x85 },
+{ 0x00, 0x86, 0x86 },
+{ 0x00, 0x87, 0x87 },
+{ 0x00, 0x88, 0x88 },
+{ 0x00, 0x89, 0x89 },
+{ 0x00, 0x8a, 0x8a },
+{ 0x00, 0x8b, 0x8b },
+{ 0x00, 0x8c, 0x8c },
+{ 0x00, 0x8d, 0x8d },
+{ 0x00, 0x8e, 0x8e },
+{ 0x00, 0x8f, 0x8f },
+{ 0x00, 0x90, 0x90 },
+{ 0x00, 0x91, 0x91 },
+{ 0x00, 0x92, 0x92 },
+{ 0x00, 0x93, 0x93 },
+{ 0x00, 0x94, 0x94 },
+{ 0x00, 0x95, 0x95 },
+{ 0x00, 0x96, 0x96 },
+{ 0x00, 0x97, 0x97 },
+{ 0x00, 0x98, 0x98 },
+{ 0x00, 0x99, 0x99 },
+{ 0x00, 0x9a, 0x9a },
+{ 0x00, 0x9b, 0x9b },
+{ 0x00, 0x9c, 0x9c },
+{ 0x00, 0x9d, 0x9d },
+{ 0x00, 0x9e, 0x9e },
+{ 0x00, 0x9f, 0x9f },
+{ 0x00, 0xa0, 0xa0 },
+{ 0x00, 0xa1, 0xa1 },
+{ 0x00, 0xa2, 0xa2 },
+{ 0x00, 0xa3, 0xa3 },
+{ 0x00, 0xa4, 0xa4 },
+{ 0x00, 0xa5, 0xa5 },
+{ 0x00, 0xa6, 0xa6 },
+{ 0x00, 0xa7, 0xa7 },
+{ 0x00, 0xa8, 0xa8 },
+{ 0x00, 0xa9, 0xa9 },
+{ 0x00, 0xaa, 0xaa },
+{ 0x00, 0xab, 0xab },
+{ 0x00, 0xac, 0xac },
+{ 0x00, 0xad, 0xad },
+{ 0x00, 0xae, 0xae },
+{ 0x00, 0xaf, 0xaf },
+{ 0x00, 0xb0, 0xb0 },
+{ 0x00, 0xb1, 0xb1 },
+{ 0x00, 0xb2, 0xb2 },
+{ 0x00, 0xb3, 0xb3 },
+{ 0x00, 0xb4, 0xb4 },
+{ 0x00, 0xb5, 0xb5 },
+{ 0x00, 0xb6, 0xb6 },
+{ 0x00, 0xb7, 0xb7 },
+{ 0x00, 0xb8, 0xb8 },
+{ 0x00, 0xb9, 0xb9 },
+{ 0x00, 0xba, 0xba },
+{ 0x00, 0xbb, 0xbb },
+{ 0x00, 0xbc, 0xbc },
+{ 0x00, 0xbd, 0xbd },
+{ 0x00, 0xbe, 0xbe },
+{ 0x00, 0xbf, 0xbf },
+{ 0x00, 0xc0, 0xc0 },
+{ 0x00, 0xc1, 0xc1 },
+{ 0x00, 0xc2, 0xc2 },
+{ 0x00, 0xc3, 0xc3 },
+{ 0x00, 0xc4, 0xc4 },
+{ 0x00, 0xc5, 0xc5 },
+{ 0x00, 0xc6, 0xc6 },
+{ 0x00, 0xc7, 0xc7 },
+{ 0x00, 0xc8, 0xc8 },
+{ 0x00, 0xc9, 0xc9 },
+{ 0x00, 0xca, 0xca },
+{ 0x00, 0xcb, 0xcb },
+{ 0x00, 0xcc, 0xcc },
+{ 0x00, 0xcd, 0xcd },
+{ 0x00, 0xce, 0xce },
+{ 0x00, 0xcf, 0xcf },
+{ 0x00, 0xd0, 0xd0 },
+{ 0x00, 0xd1, 0xd1 },
+{ 0x00, 0xd2, 0xd2 },
+{ 0x00, 0xd3, 0xd3 },
+{ 0x00, 0xd4, 0xd4 },
+{ 0x00, 0xd5, 0xd5 },
+{ 0x00, 0xd6, 0xd6 },
+{ 0x00, 0xd7, 0xd7 },
+{ 0x00, 0xd8, 0xd8 },
+{ 0x00, 0xd9, 0xd9 },
+{ 0x00, 0xda, 0xda },
+{ 0x00, 0xdb, 0xdb },
+{ 0x00, 0xdc, 0xdc },
+{ 0x00, 0xdd, 0xdd },
+{ 0x00, 0xde, 0xde },
+{ 0x00, 0xdf, 0xdf },
+{ 0x00, 0xe0, 0xe0 },
+{ 0x00, 0xe1, 0xe1 },
+{ 0x00, 0xe2, 0xe2 },
+{ 0x00, 0xe3, 0xe3 },
+{ 0x00, 0xe4, 0xe4 },
+{ 0x00, 0xe5, 0xe5 },
+{ 0x00, 0xe6, 0xe6 },
+{ 0x00, 0xe7, 0xe7 },
+{ 0x00, 0xe8, 0xe8 },
+{ 0x00, 0xe9, 0xe9 },
+{ 0x00, 0xea, 0xea },
+{ 0x00, 0xeb, 0xeb },
+{ 0x00, 0xec, 0xec },
+{ 0x00, 0xed, 0xed },
+{ 0x00, 0xee, 0xee },
+{ 0x00, 0xef, 0xef },
+{ 0x00, 0xf0, 0xf0 },
+{ 0x00, 0xf1, 0xf1 },
+{ 0x00, 0xf2, 0xf2 },
+{ 0x00, 0xf3, 0xf3 },
+{ 0x00, 0xf4, 0xf4 },
+{ 0x00, 0xf5, 0xf5 },
+{ 0x00, 0xf6, 0xf6 },
+{ 0x00, 0xf7, 0xf7 },
+{ 0x00, 0xf8, 0xf8 },
+{ 0x00, 0xf9, 0xf9 },
+{ 0x00, 0xfa, 0xfa },
+{ 0x00, 0xfb, 0xfb },
+{ 0x00, 0xfc, 0xfc },
+{ 0x00, 0xfd, 0xfd },
+{ 0x00, 0xfe, 0xfe },
+{ 0x00, 0xff, 0xff },
+};
+
+struct cs_info iso9_tbl[] = {
+{ 0x00, 0x00, 0x00 },
+{ 0x00, 0x01, 0x01 },
+{ 0x00, 0x02, 0x02 },
+{ 0x00, 0x03, 0x03 },
+{ 0x00, 0x04, 0x04 },
+{ 0x00, 0x05, 0x05 },
+{ 0x00, 0x06, 0x06 },
+{ 0x00, 0x07, 0x07 },
+{ 0x00, 0x08, 0x08 },
+{ 0x00, 0x09, 0x09 },
+{ 0x00, 0x0a, 0x0a },
+{ 0x00, 0x0b, 0x0b },
+{ 0x00, 0x0c, 0x0c },
+{ 0x00, 0x0d, 0x0d },
+{ 0x00, 0x0e, 0x0e },
+{ 0x00, 0x0f, 0x0f },
+{ 0x00, 0x10, 0x10 },
+{ 0x00, 0x11, 0x11 },
+{ 0x00, 0x12, 0x12 },
+{ 0x00, 0x13, 0x13 },
+{ 0x00, 0x14, 0x14 },
+{ 0x00, 0x15, 0x15 },
+{ 0x00, 0x16, 0x16 },
+{ 0x00, 0x17, 0x17 },
+{ 0x00, 0x18, 0x18 },
+{ 0x00, 0x19, 0x19 },
+{ 0x00, 0x1a, 0x1a },
+{ 0x00, 0x1b, 0x1b },
+{ 0x00, 0x1c, 0x1c },
+{ 0x00, 0x1d, 0x1d },
+{ 0x00, 0x1e, 0x1e },
+{ 0x00, 0x1f, 0x1f },
+{ 0x00, 0x20, 0x20 },
+{ 0x00, 0x21, 0x21 },
+{ 0x00, 0x22, 0x22 },
+{ 0x00, 0x23, 0x23 },
+{ 0x00, 0x24, 0x24 },
+{ 0x00, 0x25, 0x25 },
+{ 0x00, 0x26, 0x26 },
+{ 0x00, 0x27, 0x27 },
+{ 0x00, 0x28, 0x28 },
+{ 0x00, 0x29, 0x29 },
+{ 0x00, 0x2a, 0x2a },
+{ 0x00, 0x2b, 0x2b },
+{ 0x00, 0x2c, 0x2c },
+{ 0x00, 0x2d, 0x2d },
+{ 0x00, 0x2e, 0x2e },
+{ 0x00, 0x2f, 0x2f },
+{ 0x00, 0x30, 0x30 },
+{ 0x00, 0x31, 0x31 },
+{ 0x00, 0x32, 0x32 },
+{ 0x00, 0x33, 0x33 },
+{ 0x00, 0x34, 0x34 },
+{ 0x00, 0x35, 0x35 },
+{ 0x00, 0x36, 0x36 },
+{ 0x00, 0x37, 0x37 },
+{ 0x00, 0x38, 0x38 },
+{ 0x00, 0x39, 0x39 },
+{ 0x00, 0x3a, 0x3a },
+{ 0x00, 0x3b, 0x3b },
+{ 0x00, 0x3c, 0x3c },
+{ 0x00, 0x3d, 0x3d },
+{ 0x00, 0x3e, 0x3e },
+{ 0x00, 0x3f, 0x3f },
+{ 0x00, 0x40, 0x40 },
+{ 0x01, 0x61, 0x41 },
+{ 0x01, 0x62, 0x42 },
+{ 0x01, 0x63, 0x43 },
+{ 0x01, 0x64, 0x44 },
+{ 0x01, 0x65, 0x45 },
+{ 0x01, 0x66, 0x46 },
+{ 0x01, 0x67, 0x47 },
+{ 0x01, 0x68, 0x48 },
+{ 0x01, 0xfd, 0x49 },
+{ 0x01, 0x6a, 0x4a },
+{ 0x01, 0x6b, 0x4b },
+{ 0x01, 0x6c, 0x4c },
+{ 0x01, 0x6d, 0x4d },
+{ 0x01, 0x6e, 0x4e },
+{ 0x01, 0x6f, 0x4f },
+{ 0x01, 0x70, 0x50 },
+{ 0x01, 0x71, 0x51 },
+{ 0x01, 0x72, 0x52 },
+{ 0x01, 0x73, 0x53 },
+{ 0x01, 0x74, 0x54 },
+{ 0x01, 0x75, 0x55 },
+{ 0x01, 0x76, 0x56 },
+{ 0x01, 0x77, 0x57 },
+{ 0x01, 0x78, 0x58 },
+{ 0x01, 0x79, 0x59 },
+{ 0x01, 0x7a, 0x5a },
+{ 0x00, 0x5b, 0x5b },
+{ 0x00, 0x5c, 0x5c },
+{ 0x00, 0x5d, 0x5d },
+{ 0x00, 0x5e, 0x5e },
+{ 0x00, 0x5f, 0x5f },
+{ 0x00, 0x60, 0x60 },
+{ 0x00, 0x61, 0x41 },
+{ 0x00, 0x62, 0x42 },
+{ 0x00, 0x63, 0x43 },
+{ 0x00, 0x64, 0x44 },
+{ 0x00, 0x65, 0x45 },
+{ 0x00, 0x66, 0x46 },
+{ 0x00, 0x67, 0x47 },
+{ 0x00, 0x68, 0x48 },
+{ 0x00, 0x69, 0xdd },
+{ 0x00, 0x6a, 0x4a },
+{ 0x00, 0x6b, 0x4b },
+{ 0x00, 0x6c, 0x4c },
+{ 0x00, 0x6d, 0x4d },
+{ 0x00, 0x6e, 0x4e },
+{ 0x00, 0x6f, 0x4f },
+{ 0x00, 0x70, 0x50 },
+{ 0x00, 0x71, 0x51 },
+{ 0x00, 0x72, 0x52 },
+{ 0x00, 0x73, 0x53 },
+{ 0x00, 0x74, 0x54 },
+{ 0x00, 0x75, 0x55 },
+{ 0x00, 0x76, 0x56 },
+{ 0x00, 0x77, 0x57 },
+{ 0x00, 0x78, 0x58 },
+{ 0x00, 0x79, 0x59 },
+{ 0x00, 0x7a, 0x5a },
+{ 0x00, 0x7b, 0x7b },
+{ 0x00, 0x7c, 0x7c },
+{ 0x00, 0x7d, 0x7d },
+{ 0x00, 0x7e, 0x7e },
+{ 0x00, 0x7f, 0x7f },
+{ 0x00, 0x80, 0x80 },
+{ 0x00, 0x81, 0x81 },
+{ 0x00, 0x82, 0x82 },
+{ 0x00, 0x83, 0x83 },
+{ 0x00, 0x84, 0x84 },
+{ 0x00, 0x85, 0x85 },
+{ 0x00, 0x86, 0x86 },
+{ 0x00, 0x87, 0x87 },
+{ 0x00, 0x88, 0x88 },
+{ 0x00, 0x89, 0x89 },
+{ 0x00, 0x8a, 0x8a },
+{ 0x00, 0x8b, 0x8b },
+{ 0x00, 0x8c, 0x8c },
+{ 0x00, 0x8d, 0x8d },
+{ 0x00, 0x8e, 0x8e },
+{ 0x00, 0x8f, 0x8f },
+{ 0x00, 0x90, 0x90 },
+{ 0x00, 0x91, 0x91 },
+{ 0x00, 0x92, 0x92 },
+{ 0x00, 0x93, 0x93 },
+{ 0x00, 0x94, 0x94 },
+{ 0x00, 0x95, 0x95 },
+{ 0x00, 0x96, 0x96 },
+{ 0x00, 0x97, 0x97 },
+{ 0x00, 0x98, 0x98 },
+{ 0x00, 0x99, 0x99 },
+{ 0x00, 0x9a, 0x9a },
+{ 0x00, 0x9b, 0x9b },
+{ 0x00, 0x9c, 0x9c },
+{ 0x00, 0x9d, 0x9d },
+{ 0x00, 0x9e, 0x9e },
+{ 0x00, 0x9f, 0x9f },
+{ 0x00, 0xa0, 0xa0 },
+{ 0x00, 0xa1, 0xa1 },
+{ 0x00, 0xa2, 0xa2 },
+{ 0x00, 0xa3, 0xa3 },
+{ 0x00, 0xa4, 0xa4 },
+{ 0x00, 0xa5, 0xa5 },
+{ 0x00, 0xa6, 0xa6 },
+{ 0x00, 0xa7, 0xa7 },
+{ 0x00, 0xa8, 0xa8 },
+{ 0x00, 0xa9, 0xa9 },
+{ 0x00, 0xaa, 0xaa },
+{ 0x00, 0xab, 0xab },
+{ 0x00, 0xac, 0xac },
+{ 0x00, 0xad, 0xad },
+{ 0x00, 0xae, 0xae },
+{ 0x00, 0xaf, 0xaf },
+{ 0x00, 0xb0, 0xb0 },
+{ 0x00, 0xb1, 0xb1 },
+{ 0x00, 0xb2, 0xb2 },
+{ 0x00, 0xb3, 0xb3 },
+{ 0x00, 0xb4, 0xb4 },
+{ 0x00, 0xb5, 0xb5 },
+{ 0x00, 0xb6, 0xb6 },
+{ 0x00, 0xb7, 0xb7 },
+{ 0x00, 0xb8, 0xb8 },
+{ 0x00, 0xb9, 0xb9 },
+{ 0x00, 0xba, 0xba },
+{ 0x00, 0xbb, 0xbb },
+{ 0x00, 0xbc, 0xbc },
+{ 0x00, 0xbd, 0xbd },
+{ 0x00, 0xbe, 0xbe },
+{ 0x00, 0xbf, 0xbf },
+{ 0x01, 0xe0, 0xc0 },
+{ 0x01, 0xe1, 0xc1 },
+{ 0x01, 0xe2, 0xc2 },
+{ 0x01, 0xe3, 0xc3 },
+{ 0x01, 0xe4, 0xc4 },
+{ 0x01, 0xe5, 0xc5 },
+{ 0x01, 0xe6, 0xc6 },
+{ 0x01, 0xe7, 0xc7 },
+{ 0x01, 0xe8, 0xc8 },
+{ 0x01, 0xe9, 0xc9 },
+{ 0x01, 0xea, 0xca },
+{ 0x01, 0xeb, 0xcb },
+{ 0x01, 0xec, 0xcc },
+{ 0x01, 0xed, 0xcd },
+{ 0x01, 0xee, 0xce },
+{ 0x01, 0xef, 0xcf },
+{ 0x01, 0xf0, 0xd0 },
+{ 0x01, 0xf1, 0xd1 },
+{ 0x01, 0xf2, 0xd2 },
+{ 0x01, 0xf3, 0xd3 },
+{ 0x01, 0xf4, 0xd4 },
+{ 0x01, 0xf5, 0xd5 },
+{ 0x01, 0xf6, 0xd6 },
+{ 0x00, 0xd7, 0xd7 },
+{ 0x01, 0xf8, 0xd8 },
+{ 0x01, 0xf9, 0xd9 },
+{ 0x01, 0xfa, 0xda },
+{ 0x01, 0xfb, 0xdb },
+{ 0x01, 0xfc, 0xdc },
+{ 0x01, 0x69, 0xdd },
+{ 0x01, 0xfe, 0xde },
+{ 0x00, 0xdf, 0xdf },
+{ 0x00, 0xe0, 0xc0 },
+{ 0x00, 0xe1, 0xc1 },
+{ 0x00, 0xe2, 0xc2 },
+{ 0x00, 0xe3, 0xc3 },
+{ 0x00, 0xe4, 0xc4 },
+{ 0x00, 0xe5, 0xc5 },
+{ 0x00, 0xe6, 0xc6 },
+{ 0x00, 0xe7, 0xc7 },
+{ 0x00, 0xe8, 0xc8 },
+{ 0x00, 0xe9, 0xc9 },
+{ 0x00, 0xea, 0xca },
+{ 0x00, 0xeb, 0xcb },
+{ 0x00, 0xec, 0xcc },
+{ 0x00, 0xed, 0xcd },
+{ 0x00, 0xee, 0xce },
+{ 0x00, 0xef, 0xcf },
+{ 0x00, 0xf0, 0xd0 },
+{ 0x00, 0xf1, 0xd1 },
+{ 0x00, 0xf2, 0xd2 },
+{ 0x00, 0xf3, 0xd3 },
+{ 0x00, 0xf4, 0xd4 },
+{ 0x00, 0xf5, 0xd5 },
+{ 0x00, 0xf6, 0xd6 },
+{ 0x00, 0xf7, 0xf7 },
+{ 0x00, 0xf8, 0xd8 },
+{ 0x00, 0xf9, 0xd9 },
+{ 0x00, 0xfa, 0xda },
+{ 0x00, 0xfb, 0xdb },
+{ 0x00, 0xfc, 0xdc },
+{ 0x00, 0xfd, 0x49 },
+{ 0x00, 0xfe, 0xde },
+{ 0x00, 0xff, 0xff },
+};
+
+struct cs_info iso10_tbl[] = {
+{ 0x00, 0x00, 0x00 },
+{ 0x00, 0x01, 0x01 },
+{ 0x00, 0x02, 0x02 },
+{ 0x00, 0x03, 0x03 },
+{ 0x00, 0x04, 0x04 },
+{ 0x00, 0x05, 0x05 },
+{ 0x00, 0x06, 0x06 },
+{ 0x00, 0x07, 0x07 },
+{ 0x00, 0x08, 0x08 },
+{ 0x00, 0x09, 0x09 },
+{ 0x00, 0x0a, 0x0a },
+{ 0x00, 0x0b, 0x0b },
+{ 0x00, 0x0c, 0x0c },
+{ 0x00, 0x0d, 0x0d },
+{ 0x00, 0x0e, 0x0e },
+{ 0x00, 0x0f, 0x0f },
+{ 0x00, 0x10, 0x10 },
+{ 0x00, 0x11, 0x11 },
+{ 0x00, 0x12, 0x12 },
+{ 0x00, 0x13, 0x13 },
+{ 0x00, 0x14, 0x14 },
+{ 0x00, 0x15, 0x15 },
+{ 0x00, 0x16, 0x16 },
+{ 0x00, 0x17, 0x17 },
+{ 0x00, 0x18, 0x18 },
+{ 0x00, 0x19, 0x19 },
+{ 0x00, 0x1a, 0x1a },
+{ 0x00, 0x1b, 0x1b },
+{ 0x00, 0x1c, 0x1c },
+{ 0x00, 0x1d, 0x1d },
+{ 0x00, 0x1e, 0x1e },
+{ 0x00, 0x1f, 0x1f },
+{ 0x00, 0x20, 0x20 },
+{ 0x00, 0x21, 0x21 },
+{ 0x00, 0x22, 0x22 },
+{ 0x00, 0x23, 0x23 },
+{ 0x00, 0x24, 0x24 },
+{ 0x00, 0x25, 0x25 },
+{ 0x00, 0x26, 0x26 },
+{ 0x00, 0x27, 0x27 },
+{ 0x00, 0x28, 0x28 },
+{ 0x00, 0x29, 0x29 },
+{ 0x00, 0x2a, 0x2a },
+{ 0x00, 0x2b, 0x2b },
+{ 0x00, 0x2c, 0x2c },
+{ 0x00, 0x2d, 0x2d },
+{ 0x00, 0x2e, 0x2e },
+{ 0x00, 0x2f, 0x2f },
+{ 0x00, 0x30, 0x30 },
+{ 0x00, 0x31, 0x31 },
+{ 0x00, 0x32, 0x32 },
+{ 0x00, 0x33, 0x33 },
+{ 0x00, 0x34, 0x34 },
+{ 0x00, 0x35, 0x35 },
+{ 0x00, 0x36, 0x36 },
+{ 0x00, 0x37, 0x37 },
+{ 0x00, 0x38, 0x38 },
+{ 0x00, 0x39, 0x39 },
+{ 0x00, 0x3a, 0x3a },
+{ 0x00, 0x3b, 0x3b },
+{ 0x00, 0x3c, 0x3c },
+{ 0x00, 0x3d, 0x3d },
+{ 0x00, 0x3e, 0x3e },
+{ 0x00, 0x3f, 0x3f },
+{ 0x00, 0x40, 0x40 },
+{ 0x01, 0x61, 0x41 },
+{ 0x01, 0x62, 0x42 },
+{ 0x01, 0x63, 0x43 },
+{ 0x01, 0x64, 0x44 },
+{ 0x01, 0x65, 0x45 },
+{ 0x01, 0x66, 0x46 },
+{ 0x01, 0x67, 0x47 },
+{ 0x01, 0x68, 0x48 },
+{ 0x01, 0x69, 0x49 },
+{ 0x01, 0x6a, 0x4a },
+{ 0x01, 0x6b, 0x4b },
+{ 0x01, 0x6c, 0x4c },
+{ 0x01, 0x6d, 0x4d },
+{ 0x01, 0x6e, 0x4e },
+{ 0x01, 0x6f, 0x4f },
+{ 0x01, 0x70, 0x50 },
+{ 0x01, 0x71, 0x51 },
+{ 0x01, 0x72, 0x52 },
+{ 0x01, 0x73, 0x53 },
+{ 0x01, 0x74, 0x54 },
+{ 0x01, 0x75, 0x55 },
+{ 0x01, 0x76, 0x56 },
+{ 0x01, 0x77, 0x57 },
+{ 0x01, 0x78, 0x58 },
+{ 0x01, 0x79, 0x59 },
+{ 0x01, 0x7a, 0x5a },
+{ 0x00, 0x5b, 0x5b },
+{ 0x00, 0x5c, 0x5c },
+{ 0x00, 0x5d, 0x5d },
+{ 0x00, 0x5e, 0x5e },
+{ 0x00, 0x5f, 0x5f },
+{ 0x00, 0x60, 0x60 },
+{ 0x00, 0x61, 0x41 },
+{ 0x00, 0x62, 0x42 },
+{ 0x00, 0x63, 0x43 },
+{ 0x00, 0x64, 0x44 },
+{ 0x00, 0x65, 0x45 },
+{ 0x00, 0x66, 0x46 },
+{ 0x00, 0x67, 0x47 },
+{ 0x00, 0x68, 0x48 },
+{ 0x00, 0x69, 0x49 },
+{ 0x00, 0x6a, 0x4a },
+{ 0x00, 0x6b, 0x4b },
+{ 0x00, 0x6c, 0x4c },
+{ 0x00, 0x6d, 0x4d },
+{ 0x00, 0x6e, 0x4e },
+{ 0x00, 0x6f, 0x4f },
+{ 0x00, 0x70, 0x50 },
+{ 0x00, 0x71, 0x51 },
+{ 0x00, 0x72, 0x52 },
+{ 0x00, 0x73, 0x53 },
+{ 0x00, 0x74, 0x54 },
+{ 0x00, 0x75, 0x55 },
+{ 0x00, 0x76, 0x56 },
+{ 0x00, 0x77, 0x57 },
+{ 0x00, 0x78, 0x58 },
+{ 0x00, 0x79, 0x59 },
+{ 0x00, 0x7a, 0x5a },
+{ 0x00, 0x7b, 0x7b },
+{ 0x00, 0x7c, 0x7c },
+{ 0x00, 0x7d, 0x7d },
+{ 0x00, 0x7e, 0x7e },
+{ 0x00, 0x7f, 0x7f },
+{ 0x00, 0x80, 0x80 },
+{ 0x00, 0x81, 0x81 },
+{ 0x00, 0x82, 0x82 },
+{ 0x00, 0x83, 0x83 },
+{ 0x00, 0x84, 0x84 },
+{ 0x00, 0x85, 0x85 },
+{ 0x00, 0x86, 0x86 },
+{ 0x00, 0x87, 0x87 },
+{ 0x00, 0x88, 0x88 },
+{ 0x00, 0x89, 0x89 },
+{ 0x00, 0x8a, 0x8a },
+{ 0x00, 0x8b, 0x8b },
+{ 0x00, 0x8c, 0x8c },
+{ 0x00, 0x8d, 0x8d },
+{ 0x00, 0x8e, 0x8e },
+{ 0x00, 0x8f, 0x8f },
+{ 0x00, 0x90, 0x90 },
+{ 0x00, 0x91, 0x91 },
+{ 0x00, 0x92, 0x92 },
+{ 0x00, 0x93, 0x93 },
+{ 0x00, 0x94, 0x94 },
+{ 0x00, 0x95, 0x95 },
+{ 0x00, 0x96, 0x96 },
+{ 0x00, 0x97, 0x97 },
+{ 0x00, 0x98, 0x98 },
+{ 0x00, 0x99, 0x99 },
+{ 0x00, 0x9a, 0x9a },
+{ 0x00, 0x9b, 0x9b },
+{ 0x00, 0x9c, 0x9c },
+{ 0x00, 0x9d, 0x9d },
+{ 0x00, 0x9e, 0x9e },
+{ 0x00, 0x9f, 0x9f },
+{ 0x00, 0xa0, 0xa0 },
+{ 0x00, 0xa1, 0xa1 },
+{ 0x00, 0xa2, 0xa2 },
+{ 0x00, 0xa3, 0xa3 },
+{ 0x00, 0xa4, 0xa4 },
+{ 0x00, 0xa5, 0xa5 },
+{ 0x00, 0xa6, 0xa6 },
+{ 0x00, 0xa7, 0xa7 },
+{ 0x00, 0xa8, 0xa8 },
+{ 0x00, 0xa9, 0xa9 },
+{ 0x00, 0xaa, 0xaa },
+{ 0x00, 0xab, 0xab },
+{ 0x00, 0xac, 0xac },
+{ 0x00, 0xad, 0xad },
+{ 0x00, 0xae, 0xae },
+{ 0x00, 0xaf, 0xaf },
+{ 0x00, 0xb0, 0xb0 },
+{ 0x00, 0xb1, 0xb1 },
+{ 0x00, 0xb2, 0xb2 },
+{ 0x00, 0xb3, 0xb3 },
+{ 0x00, 0xb4, 0xb4 },
+{ 0x00, 0xb5, 0xb5 },
+{ 0x00, 0xb6, 0xb6 },
+{ 0x00, 0xb7, 0xb7 },
+{ 0x00, 0xb8, 0xb8 },
+{ 0x00, 0xb9, 0xb9 },
+{ 0x00, 0xba, 0xba },
+{ 0x00, 0xbb, 0xbb },
+{ 0x00, 0xbc, 0xbc },
+{ 0x00, 0xbd, 0xbd },
+{ 0x00, 0xbe, 0xbe },
+{ 0x00, 0xbf, 0xbf },
+{ 0x00, 0xc0, 0xc0 },
+{ 0x00, 0xc1, 0xc1 },
+{ 0x00, 0xc2, 0xc2 },
+{ 0x00, 0xc3, 0xc3 },
+{ 0x00, 0xc4, 0xc4 },
+{ 0x00, 0xc5, 0xc5 },
+{ 0x00, 0xc6, 0xc6 },
+{ 0x00, 0xc7, 0xc7 },
+{ 0x00, 0xc8, 0xc8 },
+{ 0x00, 0xc9, 0xc9 },
+{ 0x00, 0xca, 0xca },
+{ 0x00, 0xcb, 0xcb },
+{ 0x00, 0xcc, 0xcc },
+{ 0x00, 0xcd, 0xcd },
+{ 0x00, 0xce, 0xce },
+{ 0x00, 0xcf, 0xcf },
+{ 0x00, 0xd0, 0xd0 },
+{ 0x00, 0xd1, 0xd1 },
+{ 0x00, 0xd2, 0xd2 },
+{ 0x00, 0xd3, 0xd3 },
+{ 0x00, 0xd4, 0xd4 },
+{ 0x00, 0xd5, 0xd5 },
+{ 0x00, 0xd6, 0xd6 },
+{ 0x00, 0xd7, 0xd7 },
+{ 0x00, 0xd8, 0xd8 },
+{ 0x00, 0xd9, 0xd9 },
+{ 0x00, 0xda, 0xda },
+{ 0x00, 0xdb, 0xdb },
+{ 0x00, 0xdc, 0xdc },
+{ 0x00, 0xdd, 0xdd },
+{ 0x00, 0xde, 0xde },
+{ 0x00, 0xdf, 0xdf },
+{ 0x00, 0xe0, 0xe0 },
+{ 0x00, 0xe1, 0xe1 },
+{ 0x00, 0xe2, 0xe2 },
+{ 0x00, 0xe3, 0xe3 },
+{ 0x00, 0xe4, 0xe4 },
+{ 0x00, 0xe5, 0xe5 },
+{ 0x00, 0xe6, 0xe6 },
+{ 0x00, 0xe7, 0xe7 },
+{ 0x00, 0xe8, 0xe8 },
+{ 0x00, 0xe9, 0xe9 },
+{ 0x00, 0xea, 0xea },
+{ 0x00, 0xeb, 0xeb },
+{ 0x00, 0xec, 0xec },
+{ 0x00, 0xed, 0xed },
+{ 0x00, 0xee, 0xee },
+{ 0x00, 0xef, 0xef },
+{ 0x00, 0xf0, 0xf0 },
+{ 0x00, 0xf1, 0xf1 },
+{ 0x00, 0xf2, 0xf2 },
+{ 0x00, 0xf3, 0xf3 },
+{ 0x00, 0xf4, 0xf4 },
+{ 0x00, 0xf5, 0xf5 },
+{ 0x00, 0xf6, 0xf6 },
+{ 0x00, 0xf7, 0xf7 },
+{ 0x00, 0xf8, 0xf8 },
+{ 0x00, 0xf9, 0xf9 },
+{ 0x00, 0xfa, 0xfa },
+{ 0x00, 0xfb, 0xfb },
+{ 0x00, 0xfc, 0xfc },
+{ 0x00, 0xfd, 0xfd },
+{ 0x00, 0xfe, 0xfe },
+{ 0x00, 0xff, 0xff },
+};
+
+struct cs_info koi8r_tbl[] = {
+{ 0x00, 0x00, 0x00 },
+{ 0x00, 0x01, 0x01 },
+{ 0x00, 0x02, 0x02 },
+{ 0x00, 0x03, 0x03 },
+{ 0x00, 0x04, 0x04 },
+{ 0x00, 0x05, 0x05 },
+{ 0x00, 0x06, 0x06 },
+{ 0x00, 0x07, 0x07 },
+{ 0x00, 0x08, 0x08 },
+{ 0x00, 0x09, 0x09 },
+{ 0x00, 0x0a, 0x0a },
+{ 0x00, 0x0b, 0x0b },
+{ 0x00, 0x0c, 0x0c },
+{ 0x00, 0x0d, 0x0d },
+{ 0x00, 0x0e, 0x0e },
+{ 0x00, 0x0f, 0x0f },
+{ 0x00, 0x10, 0x10 },
+{ 0x00, 0x11, 0x11 },
+{ 0x00, 0x12, 0x12 },
+{ 0x00, 0x13, 0x13 },
+{ 0x00, 0x14, 0x14 },
+{ 0x00, 0x15, 0x15 },
+{ 0x00, 0x16, 0x16 },
+{ 0x00, 0x17, 0x17 },
+{ 0x00, 0x18, 0x18 },
+{ 0x00, 0x19, 0x19 },
+{ 0x00, 0x1a, 0x1a },
+{ 0x00, 0x1b, 0x1b },
+{ 0x00, 0x1c, 0x1c },
+{ 0x00, 0x1d, 0x1d },
+{ 0x00, 0x1e, 0x1e },
+{ 0x00, 0x1f, 0x1f },
+{ 0x00, 0x20, 0x20 },
+{ 0x00, 0x21, 0x21 },
+{ 0x00, 0x22, 0x22 },
+{ 0x00, 0x23, 0x23 },
+{ 0x00, 0x24, 0x24 },
+{ 0x00, 0x25, 0x25 },
+{ 0x00, 0x26, 0x26 },
+{ 0x00, 0x27, 0x27 },
+{ 0x00, 0x28, 0x28 },
+{ 0x00, 0x29, 0x29 },
+{ 0x00, 0x2a, 0x2a },
+{ 0x00, 0x2b, 0x2b },
+{ 0x00, 0x2c, 0x2c },
+{ 0x00, 0x2d, 0x2d },
+{ 0x00, 0x2e, 0x2e },
+{ 0x00, 0x2f, 0x2f },
+{ 0x00, 0x30, 0x30 },
+{ 0x00, 0x31, 0x31 },
+{ 0x00, 0x32, 0x32 },
+{ 0x00, 0x33, 0x33 },
+{ 0x00, 0x34, 0x34 },
+{ 0x00, 0x35, 0x35 },
+{ 0x00, 0x36, 0x36 },
+{ 0x00, 0x37, 0x37 },
+{ 0x00, 0x38, 0x38 },
+{ 0x00, 0x39, 0x39 },
+{ 0x00, 0x3a, 0x3a },
+{ 0x00, 0x3b, 0x3b },
+{ 0x00, 0x3c, 0x3c },
+{ 0x00, 0x3d, 0x3d },
+{ 0x00, 0x3e, 0x3e },
+{ 0x00, 0x3f, 0x3f },
+{ 0x00, 0x40, 0x40 },
+{ 0x01, 0x61, 0x41 },
+{ 0x01, 0x62, 0x42 },
+{ 0x01, 0x63, 0x43 },
+{ 0x01, 0x64, 0x44 },
+{ 0x01, 0x65, 0x45 },
+{ 0x01, 0x66, 0x46 },
+{ 0x01, 0x67, 0x47 },
+{ 0x01, 0x68, 0x48 },
+{ 0x01, 0x69, 0x49 },
+{ 0x01, 0x6a, 0x4a },
+{ 0x01, 0x6b, 0x4b },
+{ 0x01, 0x6c, 0x4c },
+{ 0x01, 0x6d, 0x4d },
+{ 0x01, 0x6e, 0x4e },
+{ 0x01, 0x6f, 0x4f },
+{ 0x01, 0x70, 0x50 },
+{ 0x01, 0x71, 0x51 },
+{ 0x01, 0x72, 0x52 },
+{ 0x01, 0x73, 0x53 },
+{ 0x01, 0x74, 0x54 },
+{ 0x01, 0x75, 0x55 },
+{ 0x01, 0x76, 0x56 },
+{ 0x01, 0x77, 0x57 },
+{ 0x01, 0x78, 0x58 },
+{ 0x01, 0x79, 0x59 },
+{ 0x01, 0x7a, 0x5a },
+{ 0x00, 0x5b, 0x5b },
+{ 0x00, 0x5c, 0x5c },
+{ 0x00, 0x5d, 0x5d },
+{ 0x00, 0x5e, 0x5e },
+{ 0x00, 0x5f, 0x5f },
+{ 0x00, 0x60, 0x60 },
+{ 0x00, 0x61, 0x41 },
+{ 0x00, 0x62, 0x42 },
+{ 0x00, 0x63, 0x43 },
+{ 0x00, 0x64, 0x44 },
+{ 0x00, 0x65, 0x45 },
+{ 0x00, 0x66, 0x46 },
+{ 0x00, 0x67, 0x47 },
+{ 0x00, 0x68, 0x48 },
+{ 0x00, 0x69, 0x49 },
+{ 0x00, 0x6a, 0x4a },
+{ 0x00, 0x6b, 0x4b },
+{ 0x00, 0x6c, 0x4c },
+{ 0x00, 0x6d, 0x4d },
+{ 0x00, 0x6e, 0x4e },
+{ 0x00, 0x6f, 0x4f },
+{ 0x00, 0x70, 0x50 },
+{ 0x00, 0x71, 0x51 },
+{ 0x00, 0x72, 0x52 },
+{ 0x00, 0x73, 0x53 },
+{ 0x00, 0x74, 0x54 },
+{ 0x00, 0x75, 0x55 },
+{ 0x00, 0x76, 0x56 },
+{ 0x00, 0x77, 0x57 },
+{ 0x00, 0x78, 0x58 },
+{ 0x00, 0x79, 0x59 },
+{ 0x00, 0x7a, 0x5a },
+{ 0x00, 0x7b, 0x7b },
+{ 0x00, 0x7c, 0x7c },
+{ 0x00, 0x7d, 0x7d },
+{ 0x00, 0x7e, 0x7e },
+{ 0x00, 0x7f, 0x7f },
+{ 0x00, 0x80, 0x80 },
+{ 0x00, 0x81, 0x81 },
+{ 0x00, 0x82, 0x82 },
+{ 0x00, 0x83, 0x83 },
+{ 0x00, 0x84, 0x84 },
+{ 0x00, 0x85, 0x85 },
+{ 0x00, 0x86, 0x86 },
+{ 0x00, 0x87, 0x87 },
+{ 0x00, 0x88, 0x88 },
+{ 0x00, 0x89, 0x89 },
+{ 0x00, 0x8a, 0x8a },
+{ 0x00, 0x8b, 0x8b },
+{ 0x00, 0x8c, 0x8c },
+{ 0x00, 0x8d, 0x8d },
+{ 0x00, 0x8e, 0x8e },
+{ 0x00, 0x8f, 0x8f },
+{ 0x00, 0x90, 0x90 },
+{ 0x00, 0x91, 0x91 },
+{ 0x00, 0x92, 0x92 },
+{ 0x00, 0x93, 0x93 },
+{ 0x00, 0x94, 0x94 },
+{ 0x00, 0x95, 0x95 },
+{ 0x00, 0x96, 0x96 },
+{ 0x00, 0x97, 0x97 },
+{ 0x00, 0x98, 0x98 },
+{ 0x00, 0x99, 0x99 },
+{ 0x00, 0x9a, 0x9a },
+{ 0x00, 0x9b, 0x9b },
+{ 0x00, 0x9c, 0x9c },
+{ 0x00, 0x9d, 0x9d },
+{ 0x00, 0x9e, 0x9e },
+{ 0x00, 0x9f, 0x9f },
+{ 0x00, 0xa0, 0xa0 },
+{ 0x00, 0xa1, 0xa1 },
+{ 0x00, 0xa2, 0xa2 },
+{ 0x00, 0xa3, 0xb3 },
+{ 0x00, 0xa4, 0xa4 },
+{ 0x00, 0xa5, 0xa5 },
+{ 0x00, 0xa6, 0xa6 },
+{ 0x00, 0xa7, 0xa7 },
+{ 0x00, 0xa8, 0xa8 },
+{ 0x00, 0xa9, 0xa9 },
+{ 0x00, 0xaa, 0xaa },
+{ 0x00, 0xab, 0xab },
+{ 0x00, 0xac, 0xac },
+{ 0x00, 0xad, 0xad },
+{ 0x00, 0xae, 0xae },
+{ 0x00, 0xaf, 0xaf },
+{ 0x00, 0xb0, 0xb0 },
+{ 0x00, 0xb1, 0xb1 },
+{ 0x00, 0xb2, 0xb2 },
+{ 0x01, 0xa3, 0xb3 },
+{ 0x00, 0xb4, 0xb4 },
+{ 0x00, 0xb5, 0xb5 },
+{ 0x00, 0xb6, 0xb6 },
+{ 0x00, 0xb7, 0xb7 },
+{ 0x00, 0xb8, 0xb8 },
+{ 0x00, 0xb9, 0xb9 },
+{ 0x00, 0xba, 0xba },
+{ 0x00, 0xbb, 0xbb },
+{ 0x00, 0xbc, 0xbc },
+{ 0x00, 0xbd, 0xbd },
+{ 0x00, 0xbe, 0xbe },
+{ 0x00, 0xbf, 0xbf },
+{ 0x00, 0xc0, 0xe0 },
+{ 0x00, 0xc1, 0xe1 },
+{ 0x00, 0xc2, 0xe2 },
+{ 0x00, 0xc3, 0xe3 },
+{ 0x00, 0xc4, 0xe4 },
+{ 0x00, 0xc5, 0xe5 },
+{ 0x00, 0xc6, 0xe6 },
+{ 0x00, 0xc7, 0xe7 },
+{ 0x00, 0xc8, 0xe8 },
+{ 0x00, 0xc9, 0xe9 },
+{ 0x00, 0xca, 0xea },
+{ 0x00, 0xcb, 0xeb },
+{ 0x00, 0xcc, 0xec },
+{ 0x00, 0xcd, 0xed },
+{ 0x00, 0xce, 0xee },
+{ 0x00, 0xcf, 0xef },
+{ 0x00, 0xd0, 0xf0 },
+{ 0x00, 0xd1, 0xf1 },
+{ 0x00, 0xd2, 0xf2 },
+{ 0x00, 0xd3, 0xf3 },
+{ 0x00, 0xd4, 0xf4 },
+{ 0x00, 0xd5, 0xf5 },
+{ 0x00, 0xd6, 0xf6 },
+{ 0x00, 0xd7, 0xf7 },
+{ 0x00, 0xd8, 0xf8 },
+{ 0x00, 0xd9, 0xf9 },
+{ 0x00, 0xda, 0xfa },
+{ 0x00, 0xdb, 0xfb },
+{ 0x00, 0xdc, 0xfc },
+{ 0x00, 0xdd, 0xfd },
+{ 0x00, 0xde, 0xfe },
+{ 0x00, 0xdf, 0xff },
+{ 0x01, 0xc0, 0xe0 },
+{ 0x01, 0xc1, 0xe1 },
+{ 0x01, 0xc2, 0xe2 },
+{ 0x01, 0xc3, 0xe3 },
+{ 0x01, 0xc4, 0xe4 },
+{ 0x01, 0xc5, 0xe5 },
+{ 0x01, 0xc6, 0xe6 },
+{ 0x01, 0xc7, 0xe7 },
+{ 0x01, 0xc8, 0xe8 },
+{ 0x01, 0xc9, 0xe9 },
+{ 0x01, 0xca, 0xea },
+{ 0x01, 0xcb, 0xeb },
+{ 0x01, 0xcc, 0xec },
+{ 0x01, 0xcd, 0xed },
+{ 0x01, 0xce, 0xee },
+{ 0x01, 0xcf, 0xef },
+{ 0x01, 0xd0, 0xf0 },
+{ 0x01, 0xd1, 0xf1 },
+{ 0x01, 0xd2, 0xf2 },
+{ 0x01, 0xd3, 0xf3 },
+{ 0x01, 0xd4, 0xf4 },
+{ 0x01, 0xd5, 0xf5 },
+{ 0x01, 0xd6, 0xf6 },
+{ 0x01, 0xd7, 0xf7 },
+{ 0x01, 0xd8, 0xf8 },
+{ 0x01, 0xd9, 0xf9 },
+{ 0x01, 0xda, 0xfa },
+{ 0x01, 0xdb, 0xfb },
+{ 0x01, 0xdc, 0xfc },
+{ 0x01, 0xdd, 0xfd },
+{ 0x01, 0xde, 0xfe },
+{ 0x01, 0xdf, 0xff },
+};
+
+struct cs_info koi8u_tbl[] = {
+{ 0x00, 0x00, 0x00 },
+{ 0x00, 0x01, 0x01 },
+{ 0x00, 0x02, 0x02 },
+{ 0x00, 0x03, 0x03 },
+{ 0x00, 0x04, 0x04 },
+{ 0x00, 0x05, 0x05 },
+{ 0x00, 0x06, 0x06 },
+{ 0x00, 0x07, 0x07 },
+{ 0x00, 0x08, 0x08 },
+{ 0x00, 0x09, 0x09 },
+{ 0x00, 0x0a, 0x0a },
+{ 0x00, 0x0b, 0x0b },
+{ 0x00, 0x0c, 0x0c },
+{ 0x00, 0x0d, 0x0d },
+{ 0x00, 0x0e, 0x0e },
+{ 0x00, 0x0f, 0x0f },
+{ 0x00, 0x10, 0x10 },
+{ 0x00, 0x11, 0x11 },
+{ 0x00, 0x12, 0x12 },
+{ 0x00, 0x13, 0x13 },
+{ 0x00, 0x14, 0x14 },
+{ 0x00, 0x15, 0x15 },
+{ 0x00, 0x16, 0x16 },
+{ 0x00, 0x17, 0x17 },
+{ 0x00, 0x18, 0x18 },
+{ 0x00, 0x19, 0x19 },
+{ 0x00, 0x1a, 0x1a },
+{ 0x00, 0x1b, 0x1b },
+{ 0x00, 0x1c, 0x1c },
+{ 0x00, 0x1d, 0x1d },
+{ 0x00, 0x1e, 0x1e },
+{ 0x00, 0x1f, 0x1f },
+{ 0x00, 0x20, 0x20 },
+{ 0x00, 0x21, 0x21 },
+{ 0x00, 0x22, 0x22 },
+{ 0x00, 0x23, 0x23 },
+{ 0x00, 0x24, 0x24 },
+{ 0x00, 0x25, 0x25 },
+{ 0x00, 0x26, 0x26 },
+{ 0x00, 0x27, 0x27 },
+{ 0x00, 0x28, 0x28 },
+{ 0x00, 0x29, 0x29 },
+{ 0x00, 0x2a, 0x2a },
+{ 0x00, 0x2b, 0x2b },
+{ 0x00, 0x2c, 0x2c },
+{ 0x00, 0x2d, 0x2d },
+{ 0x00, 0x2e, 0x2e },
+{ 0x00, 0x2f, 0x2f },
+{ 0x00, 0x30, 0x30 },
+{ 0x00, 0x31, 0x31 },
+{ 0x00, 0x32, 0x32 },
+{ 0x00, 0x33, 0x33 },
+{ 0x00, 0x34, 0x34 },
+{ 0x00, 0x35, 0x35 },
+{ 0x00, 0x36, 0x36 },
+{ 0x00, 0x37, 0x37 },
+{ 0x00, 0x38, 0x38 },
+{ 0x00, 0x39, 0x39 },
+{ 0x00, 0x3a, 0x3a },
+{ 0x00, 0x3b, 0x3b },
+{ 0x00, 0x3c, 0x3c },
+{ 0x00, 0x3d, 0x3d },
+{ 0x00, 0x3e, 0x3e },
+{ 0x00, 0x3f, 0x3f },
+{ 0x00, 0x40, 0x40 },
+{ 0x01, 0x61, 0x41 },
+{ 0x01, 0x62, 0x42 },
+{ 0x01, 0x63, 0x43 },
+{ 0x01, 0x64, 0x44 },
+{ 0x01, 0x65, 0x45 },
+{ 0x01, 0x66, 0x46 },
+{ 0x01, 0x67, 0x47 },
+{ 0x01, 0x68, 0x48 },
+{ 0x01, 0x69, 0x49 },
+{ 0x01, 0x6a, 0x4a },
+{ 0x01, 0x6b, 0x4b },
+{ 0x01, 0x6c, 0x4c },
+{ 0x01, 0x6d, 0x4d },
+{ 0x01, 0x6e, 0x4e },
+{ 0x01, 0x6f, 0x4f },
+{ 0x01, 0x70, 0x50 },
+{ 0x01, 0x71, 0x51 },
+{ 0x01, 0x72, 0x52 },
+{ 0x01, 0x73, 0x53 },
+{ 0x01, 0x74, 0x54 },
+{ 0x01, 0x75, 0x55 },
+{ 0x01, 0x76, 0x56 },
+{ 0x01, 0x77, 0x57 },
+{ 0x01, 0x78, 0x58 },
+{ 0x01, 0x79, 0x59 },
+{ 0x01, 0x7a, 0x5a },
+{ 0x00, 0x5b, 0x5b },
+{ 0x00, 0x5c, 0x5c },
+{ 0x00, 0x5d, 0x5d },
+{ 0x00, 0x5e, 0x5e },
+{ 0x00, 0x5f, 0x5f },
+{ 0x00, 0x60, 0x60 },
+{ 0x00, 0x61, 0x41 },
+{ 0x00, 0x62, 0x42 },
+{ 0x00, 0x63, 0x43 },
+{ 0x00, 0x64, 0x44 },
+{ 0x00, 0x65, 0x45 },
+{ 0x00, 0x66, 0x46 },
+{ 0x00, 0x67, 0x47 },
+{ 0x00, 0x68, 0x48 },
+{ 0x00, 0x69, 0x49 },
+{ 0x00, 0x6a, 0x4a },
+{ 0x00, 0x6b, 0x4b },
+{ 0x00, 0x6c, 0x4c },
+{ 0x00, 0x6d, 0x4d },
+{ 0x00, 0x6e, 0x4e },
+{ 0x00, 0x6f, 0x4f },
+{ 0x00, 0x70, 0x50 },
+{ 0x00, 0x71, 0x51 },
+{ 0x00, 0x72, 0x52 },
+{ 0x00, 0x73, 0x53 },
+{ 0x00, 0x74, 0x54 },
+{ 0x00, 0x75, 0x55 },
+{ 0x00, 0x76, 0x56 },
+{ 0x00, 0x77, 0x57 },
+{ 0x00, 0x78, 0x58 },
+{ 0x00, 0x79, 0x59 },
+{ 0x00, 0x7a, 0x5a },
+{ 0x00, 0x7b, 0x7b },
+{ 0x00, 0x7c, 0x7c },
+{ 0x00, 0x7d, 0x7d },
+{ 0x00, 0x7e, 0x7e },
+{ 0x00, 0x7f, 0x7f },
+{ 0x00, 0x80, 0x80 },
+{ 0x00, 0x81, 0x81 },
+{ 0x00, 0x82, 0x82 },
+{ 0x00, 0x83, 0x83 },
+{ 0x00, 0x84, 0x84 },
+{ 0x00, 0x85, 0x85 },
+{ 0x00, 0x86, 0x86 },
+{ 0x00, 0x87, 0x87 },
+{ 0x00, 0x88, 0x88 },
+{ 0x00, 0x89, 0x89 },
+{ 0x00, 0x8a, 0x8a },
+{ 0x00, 0x8b, 0x8b },
+{ 0x00, 0x8c, 0x8c },
+{ 0x00, 0x8d, 0x8d },
+{ 0x00, 0x8e, 0x8e },
+{ 0x00, 0x8f, 0x8f },
+{ 0x00, 0x90, 0x90 },
+{ 0x00, 0x91, 0x91 },
+{ 0x00, 0x92, 0x92 },
+{ 0x00, 0x93, 0x93 },
+{ 0x00, 0x94, 0x94 },
+{ 0x00, 0x95, 0x95 },
+{ 0x00, 0x96, 0x96 },
+{ 0x00, 0x97, 0x97 },
+{ 0x00, 0x98, 0x98 },
+{ 0x00, 0x99, 0x99 },
+{ 0x00, 0x9a, 0x9a },
+{ 0x00, 0x9b, 0x9b },
+{ 0x00, 0x9c, 0x9c },
+{ 0x00, 0x9d, 0x9d },
+{ 0x00, 0x9e, 0x9e },
+{ 0x00, 0x9f, 0x9f },
+{ 0x00, 0xa0, 0xa0 },
+{ 0x00, 0xa1, 0xa1 },
+{ 0x00, 0xa2, 0xa2 },
+{ 0x00, 0xa3, 0xb3 },
+{ 0x00, 0xa4, 0xb4 }, /* ie */
+{ 0x00, 0xa5, 0xa5 },
+{ 0x00, 0xa6, 0xb6 }, /* i */
+{ 0x00, 0xa7, 0xb7 }, /* ii */
+{ 0x00, 0xa8, 0xa8 },
+{ 0x00, 0xa9, 0xa9 },
+{ 0x00, 0xaa, 0xaa },
+{ 0x00, 0xab, 0xab },
+{ 0x00, 0xac, 0xac },
+{ 0x00, 0xad, 0xbd }, /* g'' */
+{ 0x00, 0xae, 0xae },
+{ 0x00, 0xaf, 0xaf },
+{ 0x00, 0xb0, 0xb0 },
+{ 0x00, 0xb1, 0xb1 },
+{ 0x00, 0xb2, 0xb2 },
+{ 0x01, 0xa3, 0xb3 },
+{ 0x00, 0xb4, 0xb4 }, /* IE */
+{ 0x00, 0xb5, 0xb5 },
+{ 0x00, 0xb6, 0xb6 }, /* I */
+{ 0x00, 0xb7, 0xb7 }, /* II */
+{ 0x00, 0xb8, 0xb8 },
+{ 0x00, 0xb9, 0xb9 },
+{ 0x00, 0xba, 0xba },
+{ 0x00, 0xbb, 0xbb },
+{ 0x00, 0xbc, 0xbc },
+{ 0x00, 0xbd, 0xbd },
+{ 0x00, 0xbe, 0xbe },
+{ 0x00, 0xbf, 0xbf },
+{ 0x00, 0xc0, 0xe0 },
+{ 0x00, 0xc1, 0xe1 },
+{ 0x00, 0xc2, 0xe2 },
+{ 0x00, 0xc3, 0xe3 },
+{ 0x00, 0xc4, 0xe4 },
+{ 0x00, 0xc5, 0xe5 },
+{ 0x00, 0xc6, 0xe6 },
+{ 0x00, 0xc7, 0xe7 },
+{ 0x00, 0xc8, 0xe8 },
+{ 0x00, 0xc9, 0xe9 },
+{ 0x00, 0xca, 0xea },
+{ 0x00, 0xcb, 0xeb },
+{ 0x00, 0xcc, 0xec },
+{ 0x00, 0xcd, 0xed },
+{ 0x00, 0xce, 0xee },
+{ 0x00, 0xcf, 0xef },
+{ 0x00, 0xd0, 0xf0 },
+{ 0x00, 0xd1, 0xf1 },
+{ 0x00, 0xd2, 0xf2 },
+{ 0x00, 0xd3, 0xf3 },
+{ 0x00, 0xd4, 0xf4 },
+{ 0x00, 0xd5, 0xf5 },
+{ 0x00, 0xd6, 0xf6 },
+{ 0x00, 0xd7, 0xf7 },
+{ 0x00, 0xd8, 0xf8 },
+{ 0x00, 0xd9, 0xf9 },
+{ 0x00, 0xda, 0xfa },
+{ 0x00, 0xdb, 0xfb },
+{ 0x00, 0xdc, 0xfc },
+{ 0x00, 0xdd, 0xfd },
+{ 0x00, 0xde, 0xfe },
+{ 0x00, 0xdf, 0xff },
+{ 0x01, 0xc0, 0xe0 },
+{ 0x01, 0xc1, 0xe1 },
+{ 0x01, 0xc2, 0xe2 },
+{ 0x01, 0xc3, 0xe3 },
+{ 0x01, 0xc4, 0xe4 },
+{ 0x01, 0xc5, 0xe5 },
+{ 0x01, 0xc6, 0xe6 },
+{ 0x01, 0xc7, 0xe7 },
+{ 0x01, 0xc8, 0xe8 },
+{ 0x01, 0xc9, 0xe9 },
+{ 0x01, 0xca, 0xea },
+{ 0x01, 0xcb, 0xeb },
+{ 0x01, 0xcc, 0xec },
+{ 0x01, 0xcd, 0xed },
+{ 0x01, 0xce, 0xee },
+{ 0x01, 0xcf, 0xef },
+{ 0x01, 0xd0, 0xf0 },
+{ 0x01, 0xd1, 0xf1 },
+{ 0x01, 0xd2, 0xf2 },
+{ 0x01, 0xd3, 0xf3 },
+{ 0x01, 0xd4, 0xf4 },
+{ 0x01, 0xd5, 0xf5 },
+{ 0x01, 0xd6, 0xf6 },
+{ 0x01, 0xd7, 0xf7 },
+{ 0x01, 0xd8, 0xf8 },
+{ 0x01, 0xd9, 0xf9 },
+{ 0x01, 0xda, 0xfa },
+{ 0x01, 0xdb, 0xfb },
+{ 0x01, 0xdc, 0xfc },
+{ 0x01, 0xdd, 0xfd },
+{ 0x01, 0xde, 0xfe },
+{ 0x01, 0xdf, 0xff },
+};
+
+struct cs_info cp1251_tbl[] = {
+{ 0x00, 0x00, 0x00 },
+{ 0x00, 0x01, 0x01 },
+{ 0x00, 0x02, 0x02 },
+{ 0x00, 0x03, 0x03 },
+{ 0x00, 0x04, 0x04 },
+{ 0x00, 0x05, 0x05 },
+{ 0x00, 0x06, 0x06 },
+{ 0x00, 0x07, 0x07 },
+{ 0x00, 0x08, 0x08 },
+{ 0x00, 0x09, 0x09 },
+{ 0x00, 0x0a, 0x0a },
+{ 0x00, 0x0b, 0x0b },
+{ 0x00, 0x0c, 0x0c },
+{ 0x00, 0x0d, 0x0d },
+{ 0x00, 0x0e, 0x0e },
+{ 0x00, 0x0f, 0x0f },
+{ 0x00, 0x10, 0x10 },
+{ 0x00, 0x11, 0x11 },
+{ 0x00, 0x12, 0x12 },
+{ 0x00, 0x13, 0x13 },
+{ 0x00, 0x14, 0x14 },
+{ 0x00, 0x15, 0x15 },
+{ 0x00, 0x16, 0x16 },
+{ 0x00, 0x17, 0x17 },
+{ 0x00, 0x18, 0x18 },
+{ 0x00, 0x19, 0x19 },
+{ 0x00, 0x1a, 0x1a },
+{ 0x00, 0x1b, 0x1b },
+{ 0x00, 0x1c, 0x1c },
+{ 0x00, 0x1d, 0x1d },
+{ 0x00, 0x1e, 0x1e },
+{ 0x00, 0x1f, 0x1f },
+{ 0x00, 0x20, 0x20 },
+{ 0x00, 0x21, 0x21 },
+{ 0x00, 0x22, 0x22 },
+{ 0x00, 0x23, 0x23 },
+{ 0x00, 0x24, 0x24 },
+{ 0x00, 0x25, 0x25 },
+{ 0x00, 0x26, 0x26 },
+{ 0x00, 0x27, 0x27 },
+{ 0x00, 0x28, 0x28 },
+{ 0x00, 0x29, 0x29 },
+{ 0x00, 0x2a, 0x2a },
+{ 0x00, 0x2b, 0x2b },
+{ 0x00, 0x2c, 0x2c },
+{ 0x00, 0x2d, 0x2d },
+{ 0x00, 0x2e, 0x2e },
+{ 0x00, 0x2f, 0x2f },
+{ 0x00, 0x30, 0x30 },
+{ 0x00, 0x31, 0x31 },
+{ 0x00, 0x32, 0x32 },
+{ 0x00, 0x33, 0x33 },
+{ 0x00, 0x34, 0x34 },
+{ 0x00, 0x35, 0x35 },
+{ 0x00, 0x36, 0x36 },
+{ 0x00, 0x37, 0x37 },
+{ 0x00, 0x38, 0x38 },
+{ 0x00, 0x39, 0x39 },
+{ 0x00, 0x3a, 0x3a },
+{ 0x00, 0x3b, 0x3b },
+{ 0x00, 0x3c, 0x3c },
+{ 0x00, 0x3d, 0x3d },
+{ 0x00, 0x3e, 0x3e },
+{ 0x00, 0x3f, 0x3f },
+{ 0x00, 0x40, 0x40 },
+{ 0x01, 0x61, 0x41 },
+{ 0x01, 0x62, 0x42 },
+{ 0x01, 0x63, 0x43 },
+{ 0x01, 0x64, 0x44 },
+{ 0x01, 0x65, 0x45 },
+{ 0x01, 0x66, 0x46 },
+{ 0x01, 0x67, 0x47 },
+{ 0x01, 0x68, 0x48 },
+{ 0x01, 0x69, 0x49 },
+{ 0x01, 0x6a, 0x4a },
+{ 0x01, 0x6b, 0x4b },
+{ 0x01, 0x6c, 0x4c },
+{ 0x01, 0x6d, 0x4d },
+{ 0x01, 0x6e, 0x4e },
+{ 0x01, 0x6f, 0x4f },
+{ 0x01, 0x70, 0x50 },
+{ 0x01, 0x71, 0x51 },
+{ 0x01, 0x72, 0x52 },
+{ 0x01, 0x73, 0x53 },
+{ 0x01, 0x74, 0x54 },
+{ 0x01, 0x75, 0x55 },
+{ 0x01, 0x76, 0x56 },
+{ 0x01, 0x77, 0x57 },
+{ 0x01, 0x78, 0x58 },
+{ 0x01, 0x79, 0x59 },
+{ 0x01, 0x7a, 0x5a },
+{ 0x00, 0x5b, 0x5b },
+{ 0x00, 0x5c, 0x5c },
+{ 0x00, 0x5d, 0x5d },
+{ 0x00, 0x5e, 0x5e },
+{ 0x00, 0x5f, 0x5f },
+{ 0x00, 0x60, 0x60 },
+{ 0x00, 0x61, 0x41 },
+{ 0x00, 0x62, 0x42 },
+{ 0x00, 0x63, 0x43 },
+{ 0x00, 0x64, 0x44 },
+{ 0x00, 0x65, 0x45 },
+{ 0x00, 0x66, 0x46 },
+{ 0x00, 0x67, 0x47 },
+{ 0x00, 0x68, 0x48 },
+{ 0x00, 0x69, 0x49 },
+{ 0x00, 0x6a, 0x4a },
+{ 0x00, 0x6b, 0x4b },
+{ 0x00, 0x6c, 0x4c },
+{ 0x00, 0x6d, 0x4d },
+{ 0x00, 0x6e, 0x4e },
+{ 0x00, 0x6f, 0x4f },
+{ 0x00, 0x70, 0x50 },
+{ 0x00, 0x71, 0x51 },
+{ 0x00, 0x72, 0x52 },
+{ 0x00, 0x73, 0x53 },
+{ 0x00, 0x74, 0x54 },
+{ 0x00, 0x75, 0x55 },
+{ 0x00, 0x76, 0x56 },
+{ 0x00, 0x77, 0x57 },
+{ 0x00, 0x78, 0x58 },
+{ 0x00, 0x79, 0x59 },
+{ 0x00, 0x7a, 0x5a },
+{ 0x00, 0x7b, 0x7b },
+{ 0x00, 0x7c, 0x7c },
+{ 0x00, 0x7d, 0x7d },
+{ 0x00, 0x7e, 0x7e },
+{ 0x00, 0x7f, 0x7f },
+{ 0x01, 0x90, 0x80 },
+{ 0x01, 0x83, 0x81 },
+{ 0x00, 0x82, 0x82 },
+{ 0x00, 0x83, 0x81 },
+{ 0x00, 0x84, 0x84 },
+{ 0x00, 0x85, 0x85 },
+{ 0x00, 0x86, 0x86 },
+{ 0x00, 0x87, 0x87 },
+{ 0x00, 0x88, 0x88 },
+{ 0x00, 0x89, 0x89 },
+{ 0x01, 0x9a, 0x8a },
+{ 0x00, 0x8b, 0x8b },
+{ 0x01, 0x9c, 0x8c },
+{ 0x01, 0x9d, 0x8d },
+{ 0x01, 0x9e, 0x8e },
+{ 0x01, 0x9f, 0x8f },
+{ 0x00, 0x90, 0x80 },
+{ 0x00, 0x91, 0x91 },
+{ 0x00, 0x92, 0x92 },
+{ 0x00, 0x93, 0x93 },
+{ 0x00, 0x94, 0x94 },
+{ 0x00, 0x95, 0x95 },
+{ 0x00, 0x96, 0x96 },
+{ 0x00, 0x97, 0x97 },
+{ 0x00, 0x98, 0x98 },
+{ 0x00, 0x99, 0x99 },
+{ 0x00, 0x9a, 0x8a },
+{ 0x00, 0x9b, 0x9b },
+{ 0x00, 0x9c, 0x8c },
+{ 0x00, 0x9d, 0x8d },
+{ 0x00, 0x9e, 0x8e },
+{ 0x00, 0x9f, 0x8f },
+{ 0x00, 0xa0, 0xa0 },
+{ 0x01, 0xa2, 0xa1 },
+{ 0x00, 0xa2, 0xa1 },
+{ 0x01, 0xbc, 0xa3 },
+{ 0x00, 0xa4, 0xa4 },
+{ 0x01, 0xb4, 0xa5 },
+{ 0x00, 0xa6, 0xa6 },
+{ 0x00, 0xa7, 0xa7 },
+{ 0x01, 0xb8, 0xa8 },
+{ 0x00, 0xa9, 0xa9 },
+{ 0x01, 0xba, 0xaa },
+{ 0x00, 0xab, 0xab },
+{ 0x00, 0xac, 0xac },
+{ 0x00, 0xad, 0xad },
+{ 0x00, 0xae, 0xae },
+{ 0x01, 0xbf, 0xaf },
+{ 0x00, 0xb0, 0xb0 },
+{ 0x00, 0xb1, 0xb1 },
+{ 0x01, 0xb3, 0xb2 },
+{ 0x00, 0xb3, 0xb2 },
+{ 0x00, 0xb4, 0xa5 },
+{ 0x00, 0xb5, 0xb5 },
+{ 0x00, 0xb6, 0xb6 },
+{ 0x00, 0xb7, 0xb7 },
+{ 0x00, 0xb8, 0xa8 },
+{ 0x00, 0xb9, 0xb9 },
+{ 0x00, 0xba, 0xaa },
+{ 0x00, 0xbb, 0xbb },
+{ 0x00, 0xbc, 0xa3 },
+{ 0x01, 0xbe, 0xbd },
+{ 0x00, 0xbe, 0xbd },
+{ 0x00, 0xbf, 0xaf },
+{ 0x01, 0xe0, 0xc0 },
+{ 0x01, 0xe1, 0xc1 },
+{ 0x01, 0xe2, 0xc2 },
+{ 0x01, 0xe3, 0xc3 },
+{ 0x01, 0xe4, 0xc4 },
+{ 0x01, 0xe5, 0xc5 },
+{ 0x01, 0xe6, 0xc6 },
+{ 0x01, 0xe7, 0xc7 },
+{ 0x01, 0xe8, 0xc8 },
+{ 0x01, 0xe9, 0xc9 },
+{ 0x01, 0xea, 0xca },
+{ 0x01, 0xeb, 0xcb },
+{ 0x01, 0xec, 0xcc },
+{ 0x01, 0xed, 0xcd },
+{ 0x01, 0xee, 0xce },
+{ 0x01, 0xef, 0xcf },
+{ 0x01, 0xf0, 0xd0 },
+{ 0x01, 0xf1, 0xd1 },
+{ 0x01, 0xf2, 0xd2 },
+{ 0x01, 0xf3, 0xd3 },
+{ 0x01, 0xf4, 0xd4 },
+{ 0x01, 0xf5, 0xd5 },
+{ 0x01, 0xf6, 0xd6 },
+{ 0x01, 0xf7, 0xd7 },
+{ 0x01, 0xf8, 0xd8 },
+{ 0x01, 0xf9, 0xd9 },
+{ 0x01, 0xfa, 0xda },
+{ 0x01, 0xfb, 0xdb },
+{ 0x01, 0xfc, 0xdc },
+{ 0x01, 0xfd, 0xdd },
+{ 0x01, 0xfe, 0xde },
+{ 0x01, 0xff, 0xdf },
+{ 0x00, 0xe0, 0xc0 },
+{ 0x00, 0xe1, 0xc1 },
+{ 0x00, 0xe2, 0xc2 },
+{ 0x00, 0xe3, 0xc3 },
+{ 0x00, 0xe4, 0xc4 },
+{ 0x00, 0xe5, 0xc5 },
+{ 0x00, 0xe6, 0xc6 },
+{ 0x00, 0xe7, 0xc7 },
+{ 0x00, 0xe8, 0xc8 },
+{ 0x00, 0xe9, 0xc9 },
+{ 0x00, 0xea, 0xca },
+{ 0x00, 0xeb, 0xcb },
+{ 0x00, 0xec, 0xcc },
+{ 0x00, 0xed, 0xcd },
+{ 0x00, 0xee, 0xce },
+{ 0x00, 0xef, 0xcf },
+{ 0x00, 0xf0, 0xd0 },
+{ 0x00, 0xf1, 0xd1 },
+{ 0x00, 0xf2, 0xd2 },
+{ 0x00, 0xf3, 0xd3 },
+{ 0x00, 0xf4, 0xd4 },
+{ 0x00, 0xf5, 0xd5 },
+{ 0x00, 0xf6, 0xd6 },
+{ 0x00, 0xf7, 0xd7 },
+{ 0x00, 0xf8, 0xd8 },
+{ 0x00, 0xf9, 0xd9 },
+{ 0x00, 0xfa, 0xda },
+{ 0x00, 0xfb, 0xdb },
+{ 0x00, 0xfc, 0xdc },
+{ 0x00, 0xfd, 0xdd },
+{ 0x00, 0xfe, 0xde },
+{ 0x00, 0xff, 0xdf },
+};
+
+struct cs_info iso13_tbl[] = {
+{ 0x00, 0x00, 0x00 },
+{ 0x00, 0x01, 0x01 },
+{ 0x00, 0x02, 0x02 },
+{ 0x00, 0x03, 0x03 },
+{ 0x00, 0x04, 0x04 },
+{ 0x00, 0x05, 0x05 },
+{ 0x00, 0x06, 0x06 },
+{ 0x00, 0x07, 0x07 },
+{ 0x00, 0x08, 0x08 },
+{ 0x00, 0x09, 0x09 },
+{ 0x00, 0x0A, 0x0A },
+{ 0x00, 0x0B, 0x0B },
+{ 0x00, 0x0C, 0x0C },
+{ 0x00, 0x0D, 0x0D },
+{ 0x00, 0x0E, 0x0E },
+{ 0x00, 0x0F, 0x0F },
+{ 0x00, 0x10, 0x10 },
+{ 0x00, 0x11, 0x11 },
+{ 0x00, 0x12, 0x12 },
+{ 0x00, 0x13, 0x13 },
+{ 0x00, 0x14, 0x14 },
+{ 0x00, 0x15, 0x15 },
+{ 0x00, 0x16, 0x16 },
+{ 0x00, 0x17, 0x17 },
+{ 0x00, 0x18, 0x18 },
+{ 0x00, 0x19, 0x19 },
+{ 0x00, 0x1A, 0x1A },
+{ 0x00, 0x1B, 0x1B },
+{ 0x00, 0x1C, 0x1C },
+{ 0x00, 0x1D, 0x1D },
+{ 0x00, 0x1E, 0x1E },
+{ 0x00, 0x1F, 0x1F },
+{ 0x00, 0x20, 0x20 },
+{ 0x00, 0x21, 0x21 },
+{ 0x00, 0x22, 0x22 },
+{ 0x00, 0x23, 0x23 },
+{ 0x00, 0x24, 0x24 },
+{ 0x00, 0x25, 0x25 },
+{ 0x00, 0x26, 0x26 },
+{ 0x00, 0x27, 0x27 },
+{ 0x00, 0x28, 0x28 },
+{ 0x00, 0x29, 0x29 },
+{ 0x00, 0x2A, 0x2A },
+{ 0x00, 0x2B, 0x2B },
+{ 0x00, 0x2C, 0x2C },
+{ 0x00, 0x2D, 0x2D },
+{ 0x00, 0x2E, 0x2E },
+{ 0x00, 0x2F, 0x2F },
+{ 0x00, 0x30, 0x30 },
+{ 0x00, 0x31, 0x31 },
+{ 0x00, 0x32, 0x32 },
+{ 0x00, 0x33, 0x33 },
+{ 0x00, 0x34, 0x34 },
+{ 0x00, 0x35, 0x35 },
+{ 0x00, 0x36, 0x36 },
+{ 0x00, 0x37, 0x37 },
+{ 0x00, 0x38, 0x38 },
+{ 0x00, 0x39, 0x39 },
+{ 0x00, 0x3A, 0x3A },
+{ 0x00, 0x3B, 0x3B },
+{ 0x00, 0x3C, 0x3C },
+{ 0x00, 0x3D, 0x3D },
+{ 0x00, 0x3E, 0x3E },
+{ 0x00, 0x3F, 0x3F },
+{ 0x00, 0x40, 0x40 },
+{ 0x01, 0x61, 0x41 },
+{ 0x01, 0x62, 0x42 },
+{ 0x01, 0x63, 0x43 },
+{ 0x01, 0x64, 0x44 },
+{ 0x01, 0x65, 0x45 },
+{ 0x01, 0x66, 0x46 },
+{ 0x01, 0x67, 0x47 },
+{ 0x01, 0x68, 0x48 },
+{ 0x01, 0x69, 0x49 },
+{ 0x01, 0x6A, 0x4A },
+{ 0x01, 0x6B, 0x4B },
+{ 0x01, 0x6C, 0x4C },
+{ 0x01, 0x6D, 0x4D },
+{ 0x01, 0x6E, 0x4E },
+{ 0x01, 0x6F, 0x4F },
+{ 0x01, 0x70, 0x50 },
+{ 0x01, 0x71, 0x51 },
+{ 0x01, 0x72, 0x52 },
+{ 0x01, 0x73, 0x53 },
+{ 0x01, 0x74, 0x54 },
+{ 0x01, 0x75, 0x55 },
+{ 0x01, 0x76, 0x56 },
+{ 0x01, 0x77, 0x57 },
+{ 0x01, 0x78, 0x58 },
+{ 0x01, 0x79, 0x59 },
+{ 0x01, 0x7A, 0x5A },
+{ 0x00, 0x5B, 0x5B },
+{ 0x00, 0x5C, 0x5C },
+{ 0x00, 0x5D, 0x5D },
+{ 0x00, 0x5E, 0x5E },
+{ 0x00, 0x5F, 0x5F },
+{ 0x00, 0x60, 0x60 },
+{ 0x00, 0x61, 0x41 },
+{ 0x00, 0x62, 0x42 },
+{ 0x00, 0x63, 0x43 },
+{ 0x00, 0x64, 0x44 },
+{ 0x00, 0x65, 0x45 },
+{ 0x00, 0x66, 0x46 },
+{ 0x00, 0x67, 0x47 },
+{ 0x00, 0x68, 0x48 },
+{ 0x00, 0x69, 0x49 },
+{ 0x00, 0x6A, 0x4A },
+{ 0x00, 0x6B, 0x4B },
+{ 0x00, 0x6C, 0x4C },
+{ 0x00, 0x6D, 0x4D },
+{ 0x00, 0x6E, 0x4E },
+{ 0x00, 0x6F, 0x4F },
+{ 0x00, 0x70, 0x50 },
+{ 0x00, 0x71, 0x51 },
+{ 0x00, 0x72, 0x52 },
+{ 0x00, 0x73, 0x53 },
+{ 0x00, 0x74, 0x54 },
+{ 0x00, 0x75, 0x55 },
+{ 0x00, 0x76, 0x56 },
+{ 0x00, 0x77, 0x57 },
+{ 0x00, 0x78, 0x58 },
+{ 0x00, 0x79, 0x59 },
+{ 0x00, 0x7A, 0x5A },
+{ 0x00, 0x7B, 0x7B },
+{ 0x00, 0x7C, 0x7C },
+{ 0x00, 0x7D, 0x7D },
+{ 0x00, 0x7E, 0x7E },
+{ 0x00, 0x7F, 0x7F },
+{ 0x00, 0x80, 0x80 },
+{ 0x00, 0x81, 0x81 },
+{ 0x00, 0x82, 0x82 },
+{ 0x00, 0x83, 0x83 },
+{ 0x00, 0x84, 0x84 },
+{ 0x00, 0x85, 0x85 },
+{ 0x00, 0x86, 0x86 },
+{ 0x00, 0x87, 0x87 },
+{ 0x00, 0x88, 0x88 },
+{ 0x00, 0x89, 0x89 },
+{ 0x00, 0x8A, 0x8A },
+{ 0x00, 0x8B, 0x8B },
+{ 0x00, 0x8C, 0x8C },
+{ 0x00, 0x8D, 0x8D },
+{ 0x00, 0x8E, 0x8E },
+{ 0x00, 0x8F, 0x8F },
+{ 0x00, 0x90, 0x90 },
+{ 0x00, 0x91, 0x91 },
+{ 0x00, 0x92, 0x92 },
+{ 0x00, 0x93, 0x93 },
+{ 0x00, 0x94, 0x94 },
+{ 0x00, 0x95, 0x95 },
+{ 0x00, 0x96, 0x96 },
+{ 0x00, 0x97, 0x97 },
+{ 0x00, 0x98, 0x98 },
+{ 0x00, 0x99, 0x99 },
+{ 0x00, 0x9A, 0x9A },
+{ 0x00, 0x9B, 0x9B },
+{ 0x00, 0x9C, 0x9C },
+{ 0x00, 0x9D, 0x9D },
+{ 0x00, 0x9E, 0x9E },
+{ 0x00, 0x9F, 0x9F },
+{ 0x00, 0xA0, 0xA0 },
+{ 0x00, 0xA1, 0xA1 },
+{ 0x00, 0xA2, 0xA2 },
+{ 0x00, 0xA3, 0xA3 },
+{ 0x00, 0xA4, 0xA4 },
+{ 0x00, 0xA5, 0xA5 },
+{ 0x00, 0xA6, 0xA6 },
+{ 0x00, 0xA7, 0xA7 },
+{ 0x01, 0xB8, 0xA8 },
+{ 0x00, 0xA9, 0xA9 },
+{ 0x01, 0xBA, 0xAA },
+{ 0x00, 0xAB, 0xAB },
+{ 0x00, 0xAC, 0xAC },
+{ 0x00, 0xAD, 0xAD },
+{ 0x00, 0xAE, 0xAE },
+{ 0x01, 0xBF, 0xAF },
+{ 0x00, 0xB0, 0xB0 },
+{ 0x00, 0xB1, 0xB1 },
+{ 0x00, 0xB2, 0xB2 },
+{ 0x00, 0xB3, 0xB3 },
+{ 0x00, 0xB4, 0xB4 },
+{ 0x00, 0xB5, 0xB5 },
+{ 0x00, 0xB6, 0xB6 },
+{ 0x00, 0xB7, 0xB7 },
+{ 0x00, 0xB8, 0xA8 },
+{ 0x00, 0xB9, 0xB9 },
+{ 0x00, 0xBA, 0xAA },
+{ 0x00, 0xBB, 0xBB },
+{ 0x00, 0xBC, 0xBC },
+{ 0x00, 0xBD, 0xBD },
+{ 0x00, 0xBE, 0xBE },
+{ 0x00, 0xBF, 0xAF },
+{ 0x01, 0xE0, 0xC0 },
+{ 0x01, 0xE1, 0xC1 },
+{ 0x01, 0xE2, 0xC2 },
+{ 0x01, 0xE3, 0xC3 },
+{ 0x01, 0xE4, 0xC4 },
+{ 0x01, 0xE5, 0xC5 },
+{ 0x01, 0xE6, 0xC6 },
+{ 0x01, 0xE7, 0xC7 },
+{ 0x01, 0xE8, 0xC8 },
+{ 0x01, 0xE9, 0xC9 },
+{ 0x01, 0xEA, 0xCA },
+{ 0x01, 0xEB, 0xCB },
+{ 0x01, 0xEC, 0xCC },
+{ 0x01, 0xED, 0xCD },
+{ 0x01, 0xEE, 0xCE },
+{ 0x01, 0xEF, 0xCF },
+{ 0x01, 0xF0, 0xD0 },
+{ 0x01, 0xF1, 0xD1 },
+{ 0x01, 0xF2, 0xD2 },
+{ 0x01, 0xF3, 0xD3 },
+{ 0x01, 0xF4, 0xD4 },
+{ 0x01, 0xF5, 0xD5 },
+{ 0x01, 0xF6, 0xD6 },
+{ 0x00, 0xD7, 0xD7 },
+{ 0x01, 0xF8, 0xD8 },
+{ 0x01, 0xF9, 0xD9 },
+{ 0x01, 0xFA, 0xDA },
+{ 0x01, 0xFB, 0xDB },
+{ 0x01, 0xFC, 0xDC },
+{ 0x01, 0xFD, 0xDD },
+{ 0x01, 0xFE, 0xDE },
+{ 0x00, 0xDF, 0xDF },
+{ 0x00, 0xE0, 0xC0 },
+{ 0x00, 0xE1, 0xC1 },
+{ 0x00, 0xE2, 0xC2 },
+{ 0x00, 0xE3, 0xC3 },
+{ 0x00, 0xE4, 0xC4 },
+{ 0x00, 0xE5, 0xC5 },
+{ 0x00, 0xE6, 0xC6 },
+{ 0x00, 0xE7, 0xC7 },
+{ 0x00, 0xE8, 0xC8 },
+{ 0x00, 0xE9, 0xC9 },
+{ 0x00, 0xEA, 0xCA },
+{ 0x00, 0xEB, 0xCB },
+{ 0x00, 0xEC, 0xCC },
+{ 0x00, 0xED, 0xCD },
+{ 0x00, 0xEE, 0xCE },
+{ 0x00, 0xEF, 0xCF },
+{ 0x00, 0xF0, 0xD0 },
+{ 0x00, 0xF1, 0xD1 },
+{ 0x00, 0xF2, 0xD2 },
+{ 0x00, 0xF3, 0xD3 },
+{ 0x00, 0xF4, 0xD4 },
+{ 0x00, 0xF5, 0xD5 },
+{ 0x00, 0xF6, 0xD6 },
+{ 0x00, 0xF7, 0xF7 },
+{ 0x00, 0xF8, 0xD8 },
+{ 0x00, 0xF9, 0xD9 },
+{ 0x00, 0xFA, 0xDA },
+{ 0x00, 0xFB, 0xDB },
+{ 0x00, 0xFC, 0xDC },
+{ 0x00, 0xFD, 0xDD },
+{ 0x00, 0xFE, 0xDE },
+{ 0x00, 0xFF, 0xFF },
+};
+
+
+struct cs_info iso14_tbl[] = {
+{ 0x00, 0x00, 0x00 },
+{ 0x00, 0x01, 0x01 },
+{ 0x00, 0x02, 0x02 },
+{ 0x00, 0x03, 0x03 },
+{ 0x00, 0x04, 0x04 },
+{ 0x00, 0x05, 0x05 },
+{ 0x00, 0x06, 0x06 },
+{ 0x00, 0x07, 0x07 },
+{ 0x00, 0x08, 0x08 },
+{ 0x00, 0x09, 0x09 },
+{ 0x00, 0x0a, 0x0a },
+{ 0x00, 0x0b, 0x0b },
+{ 0x00, 0x0c, 0x0c },
+{ 0x00, 0x0d, 0x0d },
+{ 0x00, 0x0e, 0x0e },
+{ 0x00, 0x0f, 0x0f },
+{ 0x00, 0x10, 0x10 },
+{ 0x00, 0x11, 0x11 },
+{ 0x00, 0x12, 0x12 },
+{ 0x00, 0x13, 0x13 },
+{ 0x00, 0x14, 0x14 },
+{ 0x00, 0x15, 0x15 },
+{ 0x00, 0x16, 0x16 },
+{ 0x00, 0x17, 0x17 },
+{ 0x00, 0x18, 0x18 },
+{ 0x00, 0x19, 0x19 },
+{ 0x00, 0x1a, 0x1a },
+{ 0x00, 0x1b, 0x1b },
+{ 0x00, 0x1c, 0x1c },
+{ 0x00, 0x1d, 0x1d },
+{ 0x00, 0x1e, 0x1e },
+{ 0x00, 0x1f, 0x1f },
+{ 0x00, 0x20, 0x20 },
+{ 0x00, 0x21, 0x21 },
+{ 0x00, 0x22, 0x22 },
+{ 0x00, 0x23, 0x23 },
+{ 0x00, 0x24, 0x24 },
+{ 0x00, 0x25, 0x25 },
+{ 0x00, 0x26, 0x26 },
+{ 0x00, 0x27, 0x27 },
+{ 0x00, 0x28, 0x28 },
+{ 0x00, 0x29, 0x29 },
+{ 0x00, 0x2a, 0x2a },
+{ 0x00, 0x2b, 0x2b },
+{ 0x00, 0x2c, 0x2c },
+{ 0x00, 0x2d, 0x2d },
+{ 0x00, 0x2e, 0x2e },
+{ 0x00, 0x2f, 0x2f },
+{ 0x00, 0x30, 0x30 },
+{ 0x00, 0x31, 0x31 },
+{ 0x00, 0x32, 0x32 },
+{ 0x00, 0x33, 0x33 },
+{ 0x00, 0x34, 0x34 },
+{ 0x00, 0x35, 0x35 },
+{ 0x00, 0x36, 0x36 },
+{ 0x00, 0x37, 0x37 },
+{ 0x00, 0x38, 0x38 },
+{ 0x00, 0x39, 0x39 },
+{ 0x00, 0x3a, 0x3a },
+{ 0x00, 0x3b, 0x3b },
+{ 0x00, 0x3c, 0x3c },
+{ 0x00, 0x3d, 0x3d },
+{ 0x00, 0x3e, 0x3e },
+{ 0x00, 0x3f, 0x3f },
+{ 0x00, 0x40, 0x40 },
+{ 0x01, 0x61, 0x41 },
+{ 0x01, 0x62, 0x42 },
+{ 0x01, 0x63, 0x43 },
+{ 0x01, 0x64, 0x44 },
+{ 0x01, 0x65, 0x45 },
+{ 0x01, 0x66, 0x46 },
+{ 0x01, 0x67, 0x47 },
+{ 0x01, 0x68, 0x48 },
+{ 0x01, 0x69, 0x49 },
+{ 0x01, 0x6a, 0x4a },
+{ 0x01, 0x6b, 0x4b },
+{ 0x01, 0x6c, 0x4c },
+{ 0x01, 0x6d, 0x4d },
+{ 0x01, 0x6e, 0x4e },
+{ 0x01, 0x6f, 0x4f },
+{ 0x01, 0x70, 0x50 },
+{ 0x01, 0x71, 0x51 },
+{ 0x01, 0x72, 0x52 },
+{ 0x01, 0x73, 0x53 },
+{ 0x01, 0x74, 0x54 },
+{ 0x01, 0x75, 0x55 },
+{ 0x01, 0x76, 0x56 },
+{ 0x01, 0x77, 0x57 },
+{ 0x01, 0x78, 0x58 },
+{ 0x01, 0x79, 0x59 },
+{ 0x01, 0x7a, 0x5a },
+{ 0x00, 0x5b, 0x5b },
+{ 0x00, 0x5c, 0x5c },
+{ 0x00, 0x5d, 0x5d },
+{ 0x00, 0x5e, 0x5e },
+{ 0x00, 0x5f, 0x5f },
+{ 0x00, 0x60, 0x60 },
+{ 0x00, 0x61, 0x41 },
+{ 0x00, 0x62, 0x42 },
+{ 0x00, 0x63, 0x43 },
+{ 0x00, 0x64, 0x44 },
+{ 0x00, 0x65, 0x45 },
+{ 0x00, 0x66, 0x46 },
+{ 0x00, 0x67, 0x47 },
+{ 0x00, 0x68, 0x48 },
+{ 0x00, 0x69, 0x49 },
+{ 0x00, 0x6a, 0x4a },
+{ 0x00, 0x6b, 0x4b },
+{ 0x00, 0x6c, 0x4c },
+{ 0x00, 0x6d, 0x4d },
+{ 0x00, 0x6e, 0x4e },
+{ 0x00, 0x6f, 0x4f },
+{ 0x00, 0x70, 0x50 },
+{ 0x00, 0x71, 0x51 },
+{ 0x00, 0x72, 0x52 },
+{ 0x00, 0x73, 0x53 },
+{ 0x00, 0x74, 0x54 },
+{ 0x00, 0x75, 0x55 },
+{ 0x00, 0x76, 0x56 },
+{ 0x00, 0x77, 0x57 },
+{ 0x00, 0x78, 0x58 },
+{ 0x00, 0x79, 0x59 },
+{ 0x00, 0x7a, 0x5a },
+{ 0x00, 0x7b, 0x7b },
+{ 0x00, 0x7c, 0x7c },
+{ 0x00, 0x7d, 0x7d },
+{ 0x00, 0x7e, 0x7e },
+{ 0x00, 0x7f, 0x7f },
+{ 0x00, 0x80, 0x80 },
+{ 0x00, 0x81, 0x81 },
+{ 0x00, 0x82, 0x82 },
+{ 0x00, 0x83, 0x83 },
+{ 0x00, 0x84, 0x84 },
+{ 0x00, 0x85, 0x85 },
+{ 0x00, 0x86, 0x86 },
+{ 0x00, 0x87, 0x87 },
+{ 0x00, 0x88, 0x88 },
+{ 0x00, 0x89, 0x89 },
+{ 0x00, 0x8a, 0x8a },
+{ 0x00, 0x8b, 0x8b },
+{ 0x00, 0x8c, 0x8c },
+{ 0x00, 0x8d, 0x8d },
+{ 0x00, 0x8e, 0x8e },
+{ 0x00, 0x8f, 0x8f },
+{ 0x00, 0x90, 0x90 },
+{ 0x00, 0x91, 0x91 },
+{ 0x00, 0x92, 0x92 },
+{ 0x00, 0x93, 0x93 },
+{ 0x00, 0x94, 0x94 },
+{ 0x00, 0x95, 0x95 },
+{ 0x00, 0x96, 0x96 },
+{ 0x00, 0x97, 0x97 },
+{ 0x00, 0x98, 0x98 },
+{ 0x00, 0x99, 0x99 },
+{ 0x00, 0x9a, 0x9a },
+{ 0x00, 0x9b, 0x9b },
+{ 0x00, 0x9c, 0x9c },
+{ 0x00, 0x9d, 0x9d },
+{ 0x00, 0x9e, 0x9e },
+{ 0x00, 0x9f, 0x9f },
+{ 0x00, 0xa0, 0xa0 },
+{ 0x01, 0xa2, 0xa1 },
+{ 0x00, 0xa2, 0xa1 },
+{ 0x00, 0xa3, 0xa3 },
+{ 0x01, 0xa5, 0xa4 },
+{ 0x00, 0xa5, 0xa4 },
+{ 0x01, 0xa6, 0xab },
+{ 0x00, 0xa7, 0xa7 },
+{ 0x01, 0xb8, 0xa8 },
+{ 0x00, 0xa9, 0xa9 },
+{ 0x01, 0xba, 0xaa },
+{ 0x00, 0xab, 0xa6 },
+{ 0x01, 0xbc, 0xac },
+{ 0x00, 0xad, 0xad },
+{ 0x00, 0xae, 0xae },
+{ 0x01, 0xff, 0xaf },
+{ 0x01, 0xb1, 0xb0 },
+{ 0x00, 0xb1, 0xb0 },
+{ 0x01, 0xb3, 0xb2 },
+{ 0x00, 0xb3, 0xb2 },
+{ 0x01, 0xb5, 0xb4 },
+{ 0x00, 0xb5, 0xb4 },
+{ 0x00, 0xb6, 0xb6 },
+{ 0x01, 0xb9, 0xb7 },
+{ 0x00, 0xb8, 0xa8 },
+{ 0x00, 0xb9, 0xb6 },
+{ 0x00, 0xba, 0xaa },
+{ 0x01, 0xbf, 0xbb },
+{ 0x00, 0xbc, 0xac },
+{ 0x01, 0xbe, 0xbd },
+{ 0x00, 0xbe, 0xbd },
+{ 0x00, 0xbf, 0xbb },
+{ 0x01, 0xe0, 0xc0 },
+{ 0x01, 0xe1, 0xc1 },
+{ 0x01, 0xe2, 0xc2 },
+{ 0x01, 0xe3, 0xc3 },
+{ 0x01, 0xe4, 0xc4 },
+{ 0x01, 0xe5, 0xc5 },
+{ 0x01, 0xe6, 0xc6 },
+{ 0x01, 0xe7, 0xc7 },
+{ 0x01, 0xe8, 0xc8 },
+{ 0x01, 0xe9, 0xc9 },
+{ 0x01, 0xea, 0xca },
+{ 0x01, 0xeb, 0xcb },
+{ 0x01, 0xec, 0xcc },
+{ 0x01, 0xed, 0xcd },
+{ 0x01, 0xee, 0xce },
+{ 0x01, 0xef, 0xcf },
+{ 0x01, 0xf0, 0xd0 },
+{ 0x01, 0xf1, 0xd1 },
+{ 0x01, 0xf2, 0xd2 },
+{ 0x01, 0xf3, 0xd3 },
+{ 0x01, 0xf4, 0xd4 },
+{ 0x01, 0xf5, 0xd5 },
+{ 0x01, 0xf6, 0xd6 },
+{ 0x01, 0xf7, 0xd7 },
+{ 0x01, 0xf8, 0xd8 },
+{ 0x01, 0xf9, 0xd9 },
+{ 0x01, 0xfa, 0xda },
+{ 0x01, 0xfb, 0xdb },
+{ 0x01, 0xfc, 0xdc },
+{ 0x01, 0xfd, 0xdd },
+{ 0x01, 0xfe, 0xde },
+{ 0x00, 0xdf, 0xdf },
+{ 0x00, 0xe0, 0xc0 },
+{ 0x00, 0xe1, 0xc1 },
+{ 0x00, 0xe2, 0xc2 },
+{ 0x00, 0xe3, 0xc3 },
+{ 0x00, 0xe4, 0xc4 },
+{ 0x00, 0xe5, 0xc5 },
+{ 0x00, 0xe6, 0xc6 },
+{ 0x00, 0xe7, 0xc7 },
+{ 0x00, 0xe8, 0xc8 },
+{ 0x00, 0xe9, 0xc9 },
+{ 0x00, 0xea, 0xca },
+{ 0x00, 0xeb, 0xcb },
+{ 0x00, 0xec, 0xcc },
+{ 0x00, 0xed, 0xcd },
+{ 0x00, 0xee, 0xce },
+{ 0x00, 0xef, 0xcf },
+{ 0x00, 0xf0, 0xd0 },
+{ 0x00, 0xf1, 0xd1 },
+{ 0x00, 0xf2, 0xd2 },
+{ 0x00, 0xf3, 0xd3 },
+{ 0x00, 0xf4, 0xd4 },
+{ 0x00, 0xf5, 0xd5 },
+{ 0x00, 0xf6, 0xd6 },
+{ 0x00, 0xf7, 0xd7 },
+{ 0x00, 0xf8, 0xd8 },
+{ 0x00, 0xf9, 0xd9 },
+{ 0x00, 0xfa, 0xda },
+{ 0x00, 0xfb, 0xdb },
+{ 0x00, 0xfc, 0xdc },
+{ 0x00, 0xfd, 0xdd },
+{ 0x00, 0xfe, 0xde },
+{ 0x00, 0xff, 0xff },
+};
+
+struct cs_info iso15_tbl[] = {
+{ 0x00, 0x00, 0x00 },
+{ 0x00, 0x01, 0x01 },
+{ 0x00, 0x02, 0x02 },
+{ 0x00, 0x03, 0x03 },
+{ 0x00, 0x04, 0x04 },
+{ 0x00, 0x05, 0x05 },
+{ 0x00, 0x06, 0x06 },
+{ 0x00, 0x07, 0x07 },
+{ 0x00, 0x08, 0x08 },
+{ 0x00, 0x09, 0x09 },
+{ 0x00, 0x0a, 0x0a },
+{ 0x00, 0x0b, 0x0b },
+{ 0x00, 0x0c, 0x0c },
+{ 0x00, 0x0d, 0x0d },
+{ 0x00, 0x0e, 0x0e },
+{ 0x00, 0x0f, 0x0f },
+{ 0x00, 0x10, 0x10 },
+{ 0x00, 0x11, 0x11 },
+{ 0x00, 0x12, 0x12 },
+{ 0x00, 0x13, 0x13 },
+{ 0x00, 0x14, 0x14 },
+{ 0x00, 0x15, 0x15 },
+{ 0x00, 0x16, 0x16 },
+{ 0x00, 0x17, 0x17 },
+{ 0x00, 0x18, 0x18 },
+{ 0x00, 0x19, 0x19 },
+{ 0x00, 0x1a, 0x1a },
+{ 0x00, 0x1b, 0x1b },
+{ 0x00, 0x1c, 0x1c },
+{ 0x00, 0x1d, 0x1d },
+{ 0x00, 0x1e, 0x1e },
+{ 0x00, 0x1f, 0x1f },
+{ 0x00, 0x20, 0x20 },
+{ 0x00, 0x21, 0x21 },
+{ 0x00, 0x22, 0x22 },
+{ 0x00, 0x23, 0x23 },
+{ 0x00, 0x24, 0x24 },
+{ 0x00, 0x25, 0x25 },
+{ 0x00, 0x26, 0x26 },
+{ 0x00, 0x27, 0x27 },
+{ 0x00, 0x28, 0x28 },
+{ 0x00, 0x29, 0x29 },
+{ 0x00, 0x2a, 0x2a },
+{ 0x00, 0x2b, 0x2b },
+{ 0x00, 0x2c, 0x2c },
+{ 0x00, 0x2d, 0x2d },
+{ 0x00, 0x2e, 0x2e },
+{ 0x00, 0x2f, 0x2f },
+{ 0x00, 0x30, 0x30 },
+{ 0x00, 0x31, 0x31 },
+{ 0x00, 0x32, 0x32 },
+{ 0x00, 0x33, 0x33 },
+{ 0x00, 0x34, 0x34 },
+{ 0x00, 0x35, 0x35 },
+{ 0x00, 0x36, 0x36 },
+{ 0x00, 0x37, 0x37 },
+{ 0x00, 0x38, 0x38 },
+{ 0x00, 0x39, 0x39 },
+{ 0x00, 0x3a, 0x3a },
+{ 0x00, 0x3b, 0x3b },
+{ 0x00, 0x3c, 0x3c },
+{ 0x00, 0x3d, 0x3d },
+{ 0x00, 0x3e, 0x3e },
+{ 0x00, 0x3f, 0x3f },
+{ 0x00, 0x40, 0x40 },
+{ 0x01, 0x61, 0x41 },
+{ 0x01, 0x62, 0x42 },
+{ 0x01, 0x63, 0x43 },
+{ 0x01, 0x64, 0x44 },
+{ 0x01, 0x65, 0x45 },
+{ 0x01, 0x66, 0x46 },
+{ 0x01, 0x67, 0x47 },
+{ 0x01, 0x68, 0x48 },
+{ 0x01, 0x69, 0x49 },
+{ 0x01, 0x6a, 0x4a },
+{ 0x01, 0x6b, 0x4b },
+{ 0x01, 0x6c, 0x4c },
+{ 0x01, 0x6d, 0x4d },
+{ 0x01, 0x6e, 0x4e },
+{ 0x01, 0x6f, 0x4f },
+{ 0x01, 0x70, 0x50 },
+{ 0x01, 0x71, 0x51 },
+{ 0x01, 0x72, 0x52 },
+{ 0x01, 0x73, 0x53 },
+{ 0x01, 0x74, 0x54 },
+{ 0x01, 0x75, 0x55 },
+{ 0x01, 0x76, 0x56 },
+{ 0x01, 0x77, 0x57 },
+{ 0x01, 0x78, 0x58 },
+{ 0x01, 0x79, 0x59 },
+{ 0x01, 0x7a, 0x5a },
+{ 0x00, 0x5b, 0x5b },
+{ 0x00, 0x5c, 0x5c },
+{ 0x00, 0x5d, 0x5d },
+{ 0x00, 0x5e, 0x5e },
+{ 0x00, 0x5f, 0x5f },
+{ 0x00, 0x60, 0x60 },
+{ 0x00, 0x61, 0x41 },
+{ 0x00, 0x62, 0x42 },
+{ 0x00, 0x63, 0x43 },
+{ 0x00, 0x64, 0x44 },
+{ 0x00, 0x65, 0x45 },
+{ 0x00, 0x66, 0x46 },
+{ 0x00, 0x67, 0x47 },
+{ 0x00, 0x68, 0x48 },
+{ 0x00, 0x69, 0x49 },
+{ 0x00, 0x6a, 0x4a },
+{ 0x00, 0x6b, 0x4b },
+{ 0x00, 0x6c, 0x4c },
+{ 0x00, 0x6d, 0x4d },
+{ 0x00, 0x6e, 0x4e },
+{ 0x00, 0x6f, 0x4f },
+{ 0x00, 0x70, 0x50 },
+{ 0x00, 0x71, 0x51 },
+{ 0x00, 0x72, 0x52 },
+{ 0x00, 0x73, 0x53 },
+{ 0x00, 0x74, 0x54 },
+{ 0x00, 0x75, 0x55 },
+{ 0x00, 0x76, 0x56 },
+{ 0x00, 0x77, 0x57 },
+{ 0x00, 0x78, 0x58 },
+{ 0x00, 0x79, 0x59 },
+{ 0x00, 0x7a, 0x5a },
+{ 0x00, 0x7b, 0x7b },
+{ 0x00, 0x7c, 0x7c },
+{ 0x00, 0x7d, 0x7d },
+{ 0x00, 0x7e, 0x7e },
+{ 0x00, 0x7f, 0x7f },
+{ 0x00, 0x80, 0x80 },
+{ 0x00, 0x81, 0x81 },
+{ 0x00, 0x82, 0x82 },
+{ 0x00, 0x83, 0x83 },
+{ 0x00, 0x84, 0x84 },
+{ 0x00, 0x85, 0x85 },
+{ 0x00, 0x86, 0x86 },
+{ 0x00, 0x87, 0x87 },
+{ 0x00, 0x88, 0x88 },
+{ 0x00, 0x89, 0x89 },
+{ 0x00, 0x8a, 0x8a },
+{ 0x00, 0x8b, 0x8b },
+{ 0x00, 0x8c, 0x8c },
+{ 0x00, 0x8d, 0x8d },
+{ 0x00, 0x8e, 0x8e },
+{ 0x00, 0x8f, 0x8f },
+{ 0x00, 0x90, 0x90 },
+{ 0x00, 0x91, 0x91 },
+{ 0x00, 0x92, 0x92 },
+{ 0x00, 0x93, 0x93 },
+{ 0x00, 0x94, 0x94 },
+{ 0x00, 0x95, 0x95 },
+{ 0x00, 0x96, 0x96 },
+{ 0x00, 0x97, 0x97 },
+{ 0x00, 0x98, 0x98 },
+{ 0x00, 0x99, 0x99 },
+{ 0x00, 0x9a, 0x9a },
+{ 0x00, 0x9b, 0x9b },
+{ 0x00, 0x9c, 0x9c },
+{ 0x00, 0x9d, 0x9d },
+{ 0x00, 0x9e, 0x9e },
+{ 0x00, 0x9f, 0x9f },
+{ 0x00, 0xa0, 0xa0 },
+{ 0x00, 0xa1, 0xa1 },
+{ 0x00, 0xa2, 0xa2 },
+{ 0x00, 0xa3, 0xa3 },
+{ 0x00, 0xa4, 0xa4 },
+{ 0x00, 0xa5, 0xa5 },
+{ 0x01, 0xa8, 0xa6 },
+{ 0x00, 0xa7, 0xa7 },
+{ 0x00, 0xa8, 0xa6 },
+{ 0x00, 0xa9, 0xa9 },
+{ 0x00, 0xaa, 0xaa },
+{ 0x00, 0xab, 0xab },
+{ 0x00, 0xac, 0xac },
+{ 0x00, 0xad, 0xad },
+{ 0x00, 0xae, 0xae },
+{ 0x00, 0xaf, 0xaf },
+{ 0x00, 0xb0, 0xb0 },
+{ 0x00, 0xb1, 0xb1 },
+{ 0x00, 0xb2, 0xb2 },
+{ 0x00, 0xb3, 0xb3 },
+{ 0x01, 0xb8, 0xb4 },
+{ 0x00, 0xb5, 0xb5 },
+{ 0x00, 0xb6, 0xb6 },
+{ 0x00, 0xb7, 0xb7 },
+{ 0x00, 0xb8, 0xb4 },
+{ 0x00, 0xb9, 0xb9 },
+{ 0x00, 0xba, 0xba },
+{ 0x00, 0xbb, 0xbb },
+{ 0x01, 0xbd, 0xbc },
+{ 0x00, 0xbd, 0xbc },
+{ 0x01, 0xff, 0xbe },
+{ 0x00, 0xbf, 0xbf },
+{ 0x01, 0xe0, 0xc0 },
+{ 0x01, 0xe1, 0xc1 },
+{ 0x01, 0xe2, 0xc2 },
+{ 0x01, 0xe3, 0xc3 },
+{ 0x01, 0xe4, 0xc4 },
+{ 0x01, 0xe5, 0xc5 },
+{ 0x01, 0xe6, 0xc6 },
+{ 0x01, 0xe7, 0xc7 },
+{ 0x01, 0xe8, 0xc8 },
+{ 0x01, 0xe9, 0xc9 },
+{ 0x01, 0xea, 0xca },
+{ 0x01, 0xeb, 0xcb },
+{ 0x01, 0xec, 0xcc },
+{ 0x01, 0xed, 0xcd },
+{ 0x01, 0xee, 0xce },
+{ 0x01, 0xef, 0xcf },
+{ 0x01, 0xf0, 0xd0 },
+{ 0x01, 0xf1, 0xd1 },
+{ 0x01, 0xf2, 0xd2 },
+{ 0x01, 0xf3, 0xd3 },
+{ 0x01, 0xf4, 0xd4 },
+{ 0x01, 0xf5, 0xd5 },
+{ 0x01, 0xf6, 0xd6 },
+{ 0x00, 0xd7, 0xd7 },
+{ 0x01, 0xf8, 0xd8 },
+{ 0x01, 0xf9, 0xd9 },
+{ 0x01, 0xfa, 0xda },
+{ 0x01, 0xfb, 0xdb },
+{ 0x01, 0xfc, 0xdc },
+{ 0x01, 0xfd, 0xdd },
+{ 0x01, 0xfe, 0xde },
+{ 0x00, 0xdf, 0xdf },
+{ 0x00, 0xe0, 0xc0 },
+{ 0x00, 0xe1, 0xc1 },
+{ 0x00, 0xe2, 0xc2 },
+{ 0x00, 0xe3, 0xc3 },
+{ 0x00, 0xe4, 0xc4 },
+{ 0x00, 0xe5, 0xc5 },
+{ 0x00, 0xe6, 0xc6 },
+{ 0x00, 0xe7, 0xc7 },
+{ 0x00, 0xe8, 0xc8 },
+{ 0x00, 0xe9, 0xc9 },
+{ 0x00, 0xea, 0xca },
+{ 0x00, 0xeb, 0xcb },
+{ 0x00, 0xec, 0xcc },
+{ 0x00, 0xed, 0xcd },
+{ 0x00, 0xee, 0xce },
+{ 0x00, 0xef, 0xcf },
+{ 0x00, 0xf0, 0xd0 },
+{ 0x00, 0xf1, 0xd1 },
+{ 0x00, 0xf2, 0xd2 },
+{ 0x00, 0xf3, 0xd3 },
+{ 0x00, 0xf4, 0xd4 },
+{ 0x00, 0xf5, 0xd5 },
+{ 0x00, 0xf6, 0xd6 },
+{ 0x00, 0xf7, 0xf7 },
+{ 0x00, 0xf8, 0xd8 },
+{ 0x00, 0xf9, 0xd9 },
+{ 0x00, 0xfa, 0xda },
+{ 0x00, 0xfb, 0xdb },
+{ 0x00, 0xfc, 0xdc },
+{ 0x00, 0xfd, 0xdd },
+{ 0x00, 0xfe, 0xde },
+{ 0x00, 0xff, 0xbe },
+};
+
+struct cs_info iscii_devanagari_tbl[] = {
+{ 0x00, 0x00, 0x00 },
+{ 0x00, 0x01, 0x01 },
+{ 0x00, 0x02, 0x02 },
+{ 0x00, 0x03, 0x03 },
+{ 0x00, 0x04, 0x04 },
+{ 0x00, 0x05, 0x05 },
+{ 0x00, 0x06, 0x06 },
+{ 0x00, 0x07, 0x07 },
+{ 0x00, 0x08, 0x08 },
+{ 0x00, 0x09, 0x09 },
+{ 0x00, 0x0a, 0x0a },
+{ 0x00, 0x0b, 0x0b },
+{ 0x00, 0x0c, 0x0c },
+{ 0x00, 0x0d, 0x0d },
+{ 0x00, 0x0e, 0x0e },
+{ 0x00, 0x0f, 0x0f },
+{ 0x00, 0x10, 0x10 },
+{ 0x00, 0x11, 0x11 },
+{ 0x00, 0x12, 0x12 },
+{ 0x00, 0x13, 0x13 },
+{ 0x00, 0x14, 0x14 },
+{ 0x00, 0x15, 0x15 },
+{ 0x00, 0x16, 0x16 },
+{ 0x00, 0x17, 0x17 },
+{ 0x00, 0x18, 0x18 },
+{ 0x00, 0x19, 0x19 },
+{ 0x00, 0x1a, 0x1a },
+{ 0x00, 0x1b, 0x1b },
+{ 0x00, 0x1c, 0x1c },
+{ 0x00, 0x1d, 0x1d },
+{ 0x00, 0x1e, 0x1e },
+{ 0x00, 0x1f, 0x1f },
+{ 0x00, 0x20, 0x20 },
+{ 0x00, 0x21, 0x21 },
+{ 0x00, 0x22, 0x22 },
+{ 0x00, 0x23, 0x23 },
+{ 0x00, 0x24, 0x24 },
+{ 0x00, 0x25, 0x25 },
+{ 0x00, 0x26, 0x26 },
+{ 0x00, 0x27, 0x27 },
+{ 0x00, 0x28, 0x28 },
+{ 0x00, 0x29, 0x29 },
+{ 0x00, 0x2a, 0x2a },
+{ 0x00, 0x2b, 0x2b },
+{ 0x00, 0x2c, 0x2c },
+{ 0x00, 0x2d, 0x2d },
+{ 0x00, 0x2e, 0x2e },
+{ 0x00, 0x2f, 0x2f },
+{ 0x00, 0x30, 0x30 },
+{ 0x00, 0x31, 0x31 },
+{ 0x00, 0x32, 0x32 },
+{ 0x00, 0x33, 0x33 },
+{ 0x00, 0x34, 0x34 },
+{ 0x00, 0x35, 0x35 },
+{ 0x00, 0x36, 0x36 },
+{ 0x00, 0x37, 0x37 },
+{ 0x00, 0x38, 0x38 },
+{ 0x00, 0x39, 0x39 },
+{ 0x00, 0x3a, 0x3a },
+{ 0x00, 0x3b, 0x3b },
+{ 0x00, 0x3c, 0x3c },
+{ 0x00, 0x3d, 0x3d },
+{ 0x00, 0x3e, 0x3e },
+{ 0x00, 0x3f, 0x3f },
+{ 0x00, 0x40, 0x40 },
+{ 0x01, 0x61, 0x41 },
+{ 0x01, 0x62, 0x42 },
+{ 0x01, 0x63, 0x43 },
+{ 0x01, 0x64, 0x44 },
+{ 0x01, 0x65, 0x45 },
+{ 0x01, 0x66, 0x46 },
+{ 0x01, 0x67, 0x47 },
+{ 0x01, 0x68, 0x48 },
+{ 0x01, 0x69, 0x49 },
+{ 0x01, 0x6a, 0x4a },
+{ 0x01, 0x6b, 0x4b },
+{ 0x01, 0x6c, 0x4c },
+{ 0x01, 0x6d, 0x4d },
+{ 0x01, 0x6e, 0x4e },
+{ 0x01, 0x6f, 0x4f },
+{ 0x01, 0x70, 0x50 },
+{ 0x01, 0x71, 0x51 },
+{ 0x01, 0x72, 0x52 },
+{ 0x01, 0x73, 0x53 },
+{ 0x01, 0x74, 0x54 },
+{ 0x01, 0x75, 0x55 },
+{ 0x01, 0x76, 0x56 },
+{ 0x01, 0x77, 0x57 },
+{ 0x01, 0x78, 0x58 },
+{ 0x01, 0x79, 0x59 },
+{ 0x01, 0x7a, 0x5a },
+{ 0x00, 0x5b, 0x5b },
+{ 0x00, 0x5c, 0x5c },
+{ 0x00, 0x5d, 0x5d },
+{ 0x00, 0x5e, 0x5e },
+{ 0x00, 0x5f, 0x5f },
+{ 0x00, 0x60, 0x60 },
+{ 0x00, 0x61, 0x41 },
+{ 0x00, 0x62, 0x42 },
+{ 0x00, 0x63, 0x43 },
+{ 0x00, 0x64, 0x44 },
+{ 0x00, 0x65, 0x45 },
+{ 0x00, 0x66, 0x46 },
+{ 0x00, 0x67, 0x47 },
+{ 0x00, 0x68, 0x48 },
+{ 0x00, 0x69, 0x49 },
+{ 0x00, 0x6a, 0x4a },
+{ 0x00, 0x6b, 0x4b },
+{ 0x00, 0x6c, 0x4c },
+{ 0x00, 0x6d, 0x4d },
+{ 0x00, 0x6e, 0x4e },
+{ 0x00, 0x6f, 0x4f },
+{ 0x00, 0x70, 0x50 },
+{ 0x00, 0x71, 0x51 },
+{ 0x00, 0x72, 0x52 },
+{ 0x00, 0x73, 0x53 },
+{ 0x00, 0x74, 0x54 },
+{ 0x00, 0x75, 0x55 },
+{ 0x00, 0x76, 0x56 },
+{ 0x00, 0x77, 0x57 },
+{ 0x00, 0x78, 0x58 },
+{ 0x00, 0x79, 0x59 },
+{ 0x00, 0x7a, 0x5a },
+{ 0x00, 0x7b, 0x7b },
+{ 0x00, 0x7c, 0x7c },
+{ 0x00, 0x7d, 0x7d },
+{ 0x00, 0x7e, 0x7e },
+{ 0x00, 0x7f, 0x7f },
+{ 0x00, 0x80, 0x80 },
+{ 0x00, 0x81, 0x81 },
+{ 0x00, 0x82, 0x82 },
+{ 0x00, 0x83, 0x83 },
+{ 0x00, 0x84, 0x84 },
+{ 0x00, 0x85, 0x85 },
+{ 0x00, 0x86, 0x86 },
+{ 0x00, 0x87, 0x87 },
+{ 0x00, 0x88, 0x88 },
+{ 0x00, 0x89, 0x89 },
+{ 0x00, 0x8a, 0x8a },
+{ 0x00, 0x8b, 0x8b },
+{ 0x00, 0x8c, 0x8c },
+{ 0x00, 0x8d, 0x8d },
+{ 0x00, 0x8e, 0x8e },
+{ 0x00, 0x8f, 0x8f },
+{ 0x00, 0x90, 0x90 },
+{ 0x00, 0x91, 0x91 },
+{ 0x00, 0x92, 0x92 },
+{ 0x00, 0x93, 0x93 },
+{ 0x00, 0x94, 0x94 },
+{ 0x00, 0x95, 0x95 },
+{ 0x00, 0x96, 0x96 },
+{ 0x00, 0x97, 0x97 },
+{ 0x00, 0x98, 0x98 },
+{ 0x00, 0x99, 0x99 },
+{ 0x00, 0x9a, 0x9a },
+{ 0x00, 0x9b, 0x9b },
+{ 0x00, 0x9c, 0x9c },
+{ 0x00, 0x9d, 0x9d },
+{ 0x00, 0x9e, 0x9e },
+{ 0x00, 0x9f, 0x9f },
+{ 0x00, 0xa0, 0xa0 },
+{ 0x00, 0xa1, 0xa1 },
+{ 0x00, 0xa2, 0xa2 },
+{ 0x00, 0xa3, 0xa3 },
+{ 0x00, 0xa4, 0xa4 },
+{ 0x00, 0xa5, 0xa5 },
+{ 0x00, 0xa6, 0xa6 },
+{ 0x00, 0xa7, 0xa7 },
+{ 0x00, 0xa8, 0xa8 },
+{ 0x00, 0xa9, 0xa9 },
+{ 0x00, 0xaa, 0xaa },
+{ 0x00, 0xab, 0xab },
+{ 0x00, 0xac, 0xac },
+{ 0x00, 0xad, 0xad },
+{ 0x00, 0xae, 0xae },
+{ 0x00, 0xaf, 0xaf },
+{ 0x00, 0xb0, 0xb0 },
+{ 0x00, 0xb1, 0xb1 },
+{ 0x00, 0xb2, 0xb2 },
+{ 0x00, 0xb3, 0xb3 },
+{ 0x00, 0xb4, 0xb4 },
+{ 0x00, 0xb5, 0xb5 },
+{ 0x00, 0xb6, 0xb6 },
+{ 0x00, 0xb7, 0xb7 },
+{ 0x00, 0xb8, 0xb8 },
+{ 0x00, 0xb9, 0xb9 },
+{ 0x00, 0xba, 0xba },
+{ 0x00, 0xbb, 0xbb },
+{ 0x00, 0xbc, 0xbc },
+{ 0x00, 0xbd, 0xbd },
+{ 0x00, 0xbe, 0xbe },
+{ 0x00, 0xbf, 0xbf },
+{ 0x00, 0xc0, 0xc0 },
+{ 0x00, 0xc1, 0xc1 },
+{ 0x00, 0xc2, 0xc2 },
+{ 0x00, 0xc3, 0xc3 },
+{ 0x00, 0xc4, 0xc4 },
+{ 0x00, 0xc5, 0xc5 },
+{ 0x00, 0xc6, 0xc6 },
+{ 0x00, 0xc7, 0xc7 },
+{ 0x00, 0xc8, 0xc8 },
+{ 0x00, 0xc9, 0xc9 },
+{ 0x00, 0xca, 0xca },
+{ 0x00, 0xcb, 0xcb },
+{ 0x00, 0xcc, 0xcc },
+{ 0x00, 0xcd, 0xcd },
+{ 0x00, 0xce, 0xce },
+{ 0x00, 0xcf, 0xcf },
+{ 0x00, 0xd0, 0xd0 },
+{ 0x00, 0xd1, 0xd1 },
+{ 0x00, 0xd2, 0xd2 },
+{ 0x00, 0xd3, 0xd3 },
+{ 0x00, 0xd4, 0xd4 },
+{ 0x00, 0xd5, 0xd5 },
+{ 0x00, 0xd6, 0xd6 },
+{ 0x00, 0xd7, 0xd7 },
+{ 0x00, 0xd8, 0xd8 },
+{ 0x00, 0xd9, 0xd9 },
+{ 0x00, 0xda, 0xda },
+{ 0x00, 0xdb, 0xdb },
+{ 0x00, 0xdc, 0xdc },
+{ 0x00, 0xdd, 0xdd },
+{ 0x00, 0xde, 0xde },
+{ 0x00, 0xdf, 0xdf },
+{ 0x00, 0xe0, 0xe0 },
+{ 0x00, 0xe1, 0xe1 },
+{ 0x00, 0xe2, 0xe2 },
+{ 0x00, 0xe3, 0xe3 },
+{ 0x00, 0xe4, 0xe4 },
+{ 0x00, 0xe5, 0xe5 },
+{ 0x00, 0xe6, 0xe6 },
+{ 0x00, 0xe7, 0xe7 },
+{ 0x00, 0xe8, 0xe8 },
+{ 0x00, 0xe9, 0xe9 },
+{ 0x00, 0xea, 0xea },
+{ 0x00, 0xeb, 0xeb },
+{ 0x00, 0xec, 0xec },
+{ 0x00, 0xed, 0xed },
+{ 0x00, 0xee, 0xee },
+{ 0x00, 0xef, 0xef },
+{ 0x00, 0xf0, 0xf0 },
+{ 0x00, 0xf1, 0xf1 },
+{ 0x00, 0xf2, 0xf2 },
+{ 0x00, 0xf3, 0xf3 },
+{ 0x00, 0xf4, 0xf4 },
+{ 0x00, 0xf5, 0xf5 },
+{ 0x00, 0xf6, 0xf6 },
+{ 0x00, 0xf7, 0xf7 },
+{ 0x00, 0xf8, 0xf8 },
+{ 0x00, 0xf9, 0xf9 },
+{ 0x00, 0xfa, 0xfa },
+{ 0x00, 0xfb, 0xfb },
+{ 0x00, 0xfc, 0xfc },
+{ 0x00, 0xfd, 0xfd },
+{ 0x00, 0xfe, 0xfe },
+{ 0x00, 0xff, 0xff },
+};
+
+struct enc_entry encds[] = {
+{"ISO8859-1",iso1_tbl},
+{"ISO8859-2",iso2_tbl},
+{"ISO8859-3",iso3_tbl},
+{"ISO8859-4",iso4_tbl},
+{"ISO8859-5",iso5_tbl},
+{"ISO8859-6",iso6_tbl},
+{"ISO8859-7",iso7_tbl},
+{"ISO8859-8",iso8_tbl},
+{"ISO8859-9",iso9_tbl},
+{"ISO8859-10",iso10_tbl},
+{"KOI8-R",koi8r_tbl},
+{"KOI8-U",koi8u_tbl},
+{"microsoft-cp1251",cp1251_tbl},
+{"ISO8859-13", iso13_tbl},
+{"ISO8859-14", iso14_tbl},
+{"ISO8859-15", iso15_tbl},
+{"ISCII-DEVANAGARI", iscii_devanagari_tbl},
+};
+
+struct cs_info * get_current_cs(const char * es) {
+ struct cs_info * ccs = encds[0].cs_table;
+ int n = sizeof(encds) / sizeof(encds[0]);
+ for (int i = 0; i < n; i++) {
+ if (strcmp(es,encds[i].enc_name) == 0) {
+ ccs = encds[i].cs_table;
+ }
+ }
+ return ccs;
+}
+#else
+// XXX This function was rewritten for mozilla. Instead of storing the
+// conversion tables static in this file, create them when needed
+// with help the mozilla backend.
+struct cs_info * get_current_cs(const char * es) {
+ struct cs_info *ccs;
+
+ nsCOMPtr<nsIUnicodeEncoder> encoder;
+ nsCOMPtr<nsIUnicodeDecoder> decoder;
+ nsCOMPtr<nsICaseConversion> caseConv;
+
+ nsresult rv;
+ nsCOMPtr<nsICharsetConverterManager> ccm = do_GetService(kCharsetConverterManagerCID, &rv);
+ if (NS_FAILED(rv))
+ return nsnull;
+
+ rv = ccm->GetUnicodeEncoder(es, getter_AddRefs(encoder));
+ if (encoder && NS_SUCCEEDED(rv))
+ encoder->SetOutputErrorBehavior(encoder->kOnError_Replace, nsnull, '?');
+ if (NS_FAILED(rv))
+ return nsnull;
+ rv = ccm->GetUnicodeDecoder(es, getter_AddRefs(decoder));
+
+ caseConv = do_GetService(kUnicharUtilCID, &rv);
+ if (NS_FAILED(rv))
+ return nsnull;
+
+ ccs = (struct cs_info *) malloc(256 * sizeof(cs_info));
+
+ PRInt32 charLength = 256;
+ PRInt32 uniLength = 512;
+ char *source = (char *)malloc(charLength * sizeof(char));
+ PRUnichar *uni = (PRUnichar *)malloc(uniLength * sizeof(PRUnichar));
+ char *lower = (char *)malloc(charLength * sizeof(char));
+ char *upper = (char *)malloc(charLength * sizeof(char));
+
+ // Create a long string of all chars.
+ unsigned int i;
+ for (i = 0x00; i <= 0xff ; ++i) {
+ source[i] = i;
+ }
+
+ // Convert this long string to unicode
+ rv = decoder->Convert(source, &charLength, uni, &uniLength);
+
+ // Do case conversion stuff, and convert back.
+ caseConv->ToUpper(uni, uni, uniLength);
+ encoder->Convert(uni, &uniLength, upper, &charLength);
+
+ uniLength = 512;
+ charLength = 256;
+ rv = decoder->Convert(source, &charLength, uni, &uniLength);
+ caseConv->ToLower(uni, uni, uniLength);
+ encoder->Convert(uni, &uniLength, lower, &charLength);
+
+ // Store
+ for (i = 0x00; i <= 0xff ; ++i) {
+ ccs[i].cupper = upper[i];
+ ccs[i].clower = lower[i];
+
+ if (ccs[i].clower != (unsigned char)i)
+ ccs[i].ccase = true;
+ else
+ ccs[i].ccase = false;
+
+ }
+
+ free(source);
+ free(uni);
+ free(lower);
+ free(upper);
+
+ return ccs;
+}
+#endif
+
+struct lang_map lang2enc[] = {
+{"ar", "UTF-8", LANG_ar},
+{"az", "UTF-8", LANG_az},
+{"bg", "microsoft-cp1251", LANG_bg},
+{"ca", "ISO8859-1", LANG_ca},
+{"cs", "ISO8859-2", LANG_cs},
+{"da", "ISO8859-1", LANG_da},
+{"de", "ISO8859-1", LANG_de},
+{"el", "ISO8859-7", LANG_el},
+{"en", "ISO8859-1", LANG_en},
+{"es", "ISO8859-1", LANG_es},
+{"eu", "ISO8859-1", LANG_eu},
+{"gl", "ISO8859-1", LANG_gl},
+{"fr", "ISO8859-15", LANG_fr},
+{"hr", "ISO8859-2", LANG_hr},
+{"hu", "ISO8859-2", LANG_hu},
+{"it", "ISO8859-1", LANG_it},
+{"la", "ISO8859-1", LANG_la},
+{"lv", "ISO8859-13", LANG_lv},
+{"nl", "ISO8859-1", LANG_nl},
+{"pl", "ISO8859-2", LANG_pl},
+{"pt", "ISO8859-1", LANG_pt},
+{"sv", "ISO8859-1", LANG_sv},
+{"tr", "UTF-8", LANG_tr},
+{"ru", "KOI8-R", LANG_ru},
+{"uk", "KOI8-U", LANG_uk}
+};
+
+
+const char * get_default_enc(const char * lang) {
+ int n = sizeof(lang2enc) / sizeof(lang2enc[0]);
+ for (int i = 0; i < n; i++) {
+ if (strcmp(lang,lang2enc[i].lang) == 0) {
+ return lang2enc[i].def_enc;
+ }
+ }
+ return NULL;
+}
+
+int get_lang_num(const char * lang) {
+ int n = sizeof(lang2enc) / sizeof(lang2enc[0]);
+ for (int i = 0; i < n; i++) {
+ if (strncmp(lang,lang2enc[i].lang,2) == 0) {
+ return lang2enc[i].num;
+ }
+ }
+ return LANG_xx;
+}
+
+#ifndef OPENOFFICEORG
+#ifndef MOZILLA_CLIENT
+int initialize_utf_tbl() {
+ utf_tbl = (unicode_info2 *) malloc(CONTSIZE * sizeof(unicode_info2));
+ if (utf_tbl) {
+ int j;
+ for (j = 0; j < CONTSIZE; j++) {
+ utf_tbl[j].cletter = 0;
+ utf_tbl[j].clower = (unsigned short) j;
+ utf_tbl[j].cupper = (unsigned short) j;
+ }
+ for (j = 0; j < UTF_LST_LEN; j++) {
+ utf_tbl[utf_lst[j].c].cletter = 1;
+ utf_tbl[utf_lst[j].c].clower = utf_lst[j].clower;
+ utf_tbl[utf_lst[j].c].cupper = utf_lst[j].cupper;
+ }
+ } else return 1;
+ return 0;
+}
+#endif
+#endif
+
+void free_utf_tbl() {
+ if (utf_tbl) free(utf_tbl);
+}
+
+#ifdef MOZILLA_CLIENT
+static nsCOMPtr<nsICaseConversion>& getcaseConv()
+{
+ nsresult rv;
+ static nsCOMPtr<nsICaseConversion> caseConv = do_GetService(kUnicharUtilCID, &rv);
+ return caseConv;
+}
+#endif
+
+unsigned short unicodetoupper(unsigned short c, int langnum)
+{
+ // In Azeri and Turkish, I and i dictinct letters:
+ // There are a dotless lower case i pair of upper `I',
+ // and an upper I with dot pair of lower `i'.
+ if (c == 0x0069 && ((langnum == LANG_az) || (langnum == LANG_tr)))
+ return 0x0130;
+#ifdef OPENOFFICEORG
+ return u_toupper(c);
+#else
+#ifdef MOZILLA_CLIENT
+ unsigned short ret(c);
+ getcaseConv()->ToUpper(c, &ret);
+ return ret;
+#else
+ return utf_tbl[c].cupper;
+#endif
+#endif
+}
+
+unsigned short unicodetolower(unsigned short c, int langnum)
+{
+ // In Azeri and Turkish, I and i dictinct letters:
+ // There are a dotless lower case i pair of upper `I',
+ // and an upper I with dot pair of lower `i'.
+ if (c == 0x0049 && ((langnum == LANG_az) || (langnum == LANG_tr)))
+ return 0x0131;
+#ifdef OPENOFFICEORG
+ return u_tolower(c);
+#else
+#ifdef MOZILLA_CLIENT
+ unsigned short ret(c);
+ getcaseConv()->ToLower(c, &ret);
+ return ret;
+#else
+ return utf_tbl[c].clower;
+#endif
+#endif
+}
+
+int unicodeisalpha(unsigned short c)
+{
+#ifdef OPENOFFICEORG
+ return u_isalpha(c);
+#else
+ return utf_tbl[c].cletter;
+#endif
+}
+
+// strip all ignored characters in the string
+void remove_ignored_chars_utf(char * word, unsigned short ignored_chars[], int ignored_len)
+{
+ w_char w[MAXWORDLEN];
+ w_char w2[MAXWORDLEN];
+ int i;
+ int j;
+ int len = u8_u16(w, MAXWORDLEN, word);
+ for (i = 0, j = 0; i < len; i++) {
+ if (!flag_bsearch(ignored_chars, ((unsigned short *) w)[i], ignored_len)) {
+ w2[j] = w[i];
+ j++;
+ }
+ }
+ if (j < i) u16_u8(word, MAXWORDUTF8LEN, w2, j);
+}
+
+// strip all ignored characters in the string
+void remove_ignored_chars(char * word, char * ignored_chars)
+{
+ for (char * p = word; *p != '\0'; p++) {
+ if (!strchr(ignored_chars, *p)) {
+ *word = *p;
+ word++;
+ }
+ }
+ *word = '\0';
+}
+
+int parse_string(char * line, char ** out, const char * name)
+{
+ char * tp = line;
+ char * piece;
+ int i = 0;
+ int np = 0;
+ if (*out) {
+ HUNSPELL_WARNING(stderr, "error: duplicate %s line\n", name);
+ return 1;
+ }
+ piece = mystrsep(&tp, 0);
+ while (piece) {
+ if (*piece != '\0') {
+ switch(i) {
+ case 0: { np++; break; }
+ case 1: {
+ *out = mystrdup(piece);
+ np++;
+ break;
+ }
+ default: break;
+ }
+ i++;
+ }
+ free(piece);
+ piece = mystrsep(&tp, 0);
+ }
+ if (np != 2) {
+ HUNSPELL_WARNING(stderr, "error: missing %s information\n", name);
+ return 1;
+ }
+ return 0;
+}
+
+int parse_array(char * line, char ** out,
+ unsigned short ** out_utf16, int * out_utf16_len, const char * name, int utf8) {
+ if (parse_string(line, out, name)) return 1;
+ if (utf8) {
+ w_char w[MAXWORDLEN];
+ int n = u8_u16(w, MAXWORDLEN, *out);
+ if (n > 0) {
+ flag_qsort((unsigned short *) w, 0, n);
+ *out_utf16 = (unsigned short *) malloc(n * sizeof(unsigned short));
+ if (!*out_utf16) return 1;
+ memcpy(*out_utf16, w, n * sizeof(unsigned short));
+ }
+ *out_utf16_len = n;
+ }
+ return 0;
+}
diff --git a/chrome/third_party/hunspell/src/hunspell/csutil.hxx b/chrome/third_party/hunspell/src/hunspell/csutil.hxx
new file mode 100644
index 0000000..7fc6732
--- /dev/null
+++ b/chrome/third_party/hunspell/src/hunspell/csutil.hxx
@@ -0,0 +1,141 @@
+#ifndef __CSUTILHXX__
+#define __CSUTILHXX__
+
+// First some base level utility routines
+
+typedef struct {
+ unsigned char l;
+ unsigned char h;
+} w_char;
+
+// convert UTF-16 characters to UTF-8
+char * u16_u8(char * dest, int size, const w_char * src, int srclen);
+
+// convert UTF-8 characters to UTF-16
+int u8_u16(w_char * dest, int size, const char * src);
+
+// sort 2-byte vector
+void flag_qsort(unsigned short flags[], int begin, int end);
+
+// binary search in 2-byte vector
+int flag_bsearch(unsigned short flags[], unsigned short flag, int right);
+
+// remove end of line char(s)
+void mychomp(char * s);
+
+// duplicate string
+char * mystrdup(const char * s);
+
+// duplicate reverse of string
+char * myrevstrdup(const char * s);
+
+// parse into tokens with char delimiter
+char * mystrsep(char ** sptr, const char delim);
+// parse into tokens with char delimiter
+char * mystrsep2(char ** sptr, const char delim);
+
+// parse into tokens with char delimiter
+char * mystrrep(char *, const char *, const char *);
+
+// append s to ends of every lines in text
+void strlinecat(char * lines, const char * s);
+
+// tokenize into lines with new line
+ int line_tok(const char * text, char *** lines);
+
+// tokenize into lines with new line and uniq in place
+ char * line_uniq(char * text);
+
+// change \n to c in place
+ char * line_join(char * text, char c);
+
+// leave only last {[^}]*} pattern in string
+ char * delete_zeros(char * morphout);
+
+// reverse word
+ int reverseword(char *);
+
+// reverse word
+ int reverseword_utf(char *);
+
+// character encoding information
+struct cs_info {
+ unsigned char ccase;
+ unsigned char clower;
+ unsigned char cupper;
+};
+
+// Unicode character encoding information
+struct unicode_info {
+ unsigned short c;
+ unsigned short cupper;
+ unsigned short clower;
+};
+
+struct unicode_info2 {
+ char cletter;
+ unsigned short cupper;
+ unsigned short clower;
+};
+
+int initialize_utf_tbl();
+void free_utf_tbl();
+unsigned short unicodetoupper(unsigned short c, int langnum);
+unsigned short unicodetolower(unsigned short c, int langnum);
+int unicodeisalpha(unsigned short c);
+
+struct enc_entry {
+ const char * enc_name;
+ struct cs_info * cs_table;
+};
+
+// language to encoding default map
+
+struct lang_map {
+ const char * lang;
+ const char * def_enc;
+ int num;
+};
+
+struct cs_info * get_current_cs(const char * es);
+
+const char * get_default_enc(const char * lang);
+
+int get_lang_num(const char * lang);
+
+// convert null terminated string to all caps using encoding
+void enmkallcap(char * d, const char * p, const char * encoding);
+
+// convert null terminated string to all little using encoding
+void enmkallsmall(char * d, const char * p, const char * encoding);
+
+// convert null terminated string to have intial capital using encoding
+void enmkinitcap(char * d, const char * p, const char * encoding);
+
+// convert null terminated string to all caps
+void mkallcap(char * p, const struct cs_info * csconv);
+
+// convert null terminated string to all little
+void mkallsmall(char * p, const struct cs_info * csconv);
+
+// convert null terminated string to have intial capital
+void mkinitcap(char * p, const struct cs_info * csconv);
+
+// convert first nc characters of UTF-8 string to little
+void mkallsmall_utf(w_char * u, int nc, int langnum);
+
+// convert first nc characters of UTF-8 string to capital
+void mkallcap_utf(w_char * u, int nc, int langnum);
+
+// strip all ignored characters in the string
+void remove_ignored_chars_utf(char * word, unsigned short ignored_chars[], int ignored_len);
+
+// strip all ignored characters in the string
+void remove_ignored_chars(char * word, char * ignored_chars);
+
+int parse_string(char * line, char ** out, const char * name);
+
+int parse_array(char * line, char ** out,
+ unsigned short ** out_utf16, int * out_utf16_len, const char * name, int utf8);
+
+#endif
diff --git a/chrome/third_party/hunspell/src/hunspell/dictmgr.cxx b/chrome/third_party/hunspell/src/hunspell/dictmgr.cxx
new file mode 100644
index 0000000..34736a6
--- /dev/null
+++ b/chrome/third_party/hunspell/src/hunspell/dictmgr.cxx
@@ -0,0 +1,173 @@
+
+#include <cstdlib>
+#include <cstring>
+#include <cctype>
+#include <cstdio>
+
+#include "dictmgr.hxx"
+
+using namespace std;
+
+DictMgr::DictMgr(const char * dictpath, const char * etype)
+{
+ // load list of etype entries
+ numdict = 0;
+ pdentry = (dictentry *)malloc(MAXDICTIONARIES*sizeof(struct dictentry));
+ if (pdentry) {
+ if (parse_file(dictpath, etype)) {
+ numdict = 0;
+ // no dictionary.lst found is okay
+ }
+ } else {
+ numdict = 0;
+ }
+}
+
+
+DictMgr::~DictMgr()
+{
+ dictentry * pdict = NULL;
+ if (pdentry) {
+ pdict = pdentry;
+ for (int i=0;i<numdict;i++) {
+ if (pdict->lang) {
+ free(pdict->lang);
+ pdict->lang = NULL;
+ }
+ if (pdict->region) {
+ free(pdict->region);
+ pdict->region=NULL;
+ }
+ if (pdict->filename) {
+ free(pdict->filename);
+ pdict->filename = NULL;
+ }
+ pdict++;
+ }
+ free(pdentry);
+ pdentry = NULL;
+ pdict = NULL;
+ }
+ numdict = 0;
+}
+
+
+// read in list of etype entries and build up structure to describe them
+int DictMgr::parse_file(const char * dictpath, const char * etype)
+{
+
+ int i;
+ char line[MAXDICTENTRYLEN+1];
+ dictentry * pdict = pdentry;
+
+ // open the dictionary list file
+ FILE * dictlst;
+ dictlst = fopen(dictpath,"r");
+ if (!dictlst) {
+ return 1;
+ }
+
+ // step one is to parse the dictionary list building up the
+ // descriptive structures
+
+ // read in each line ignoring any that dont start with etype
+ while (fgets(line,MAXDICTENTRYLEN,dictlst)) {
+ mychomp(line);
+
+ /* parse in a dictionary entry */
+ if (strncmp(line,etype,4) == 0) {
+ if (numdict < MAXDICTIONARIES) {
+ char * tp = line;
+ char * piece;
+ i = 0;
+ while ((piece=mystrsep(&tp,' '))) {
+ if (*piece != '\0') {
+ switch(i) {
+ case 0: break;
+ case 1: pdict->lang = mystrdup(piece); break;
+ case 2: if (strcmp (piece, "ANY") == 0)
+ pdict->region = mystrdup("");
+ else
+ pdict->region = mystrdup(piece);
+ break;
+ case 3: pdict->filename = mystrdup(piece); break;
+ default: break;
+ }
+ i++;
+ }
+ free(piece);
+ }
+ if (i == 4) {
+ numdict++;
+ pdict++;
+ } else {
+ fprintf(stderr,"dictionary list corruption in line \"%s\"\n",line);
+ fflush(stderr);
+ }
+ }
+ }
+ }
+ fclose(dictlst);
+ return 0;
+}
+
+// return text encoding of dictionary
+int DictMgr::get_list(dictentry ** ppentry)
+{
+ *ppentry = pdentry;
+ return numdict;
+}
+
+
+
+// strip strings into token based on single char delimiter
+// acts like strsep() but only uses a delim char and not
+// a delim string
+
+char * DictMgr::mystrsep(char ** stringp, const char delim)
+{
+ char * rv = NULL;
+ char * mp = *stringp;
+ int n = strlen(mp);
+ if (n > 0) {
+ char * dp = (char *)memchr(mp,(int)((unsigned char)delim),n);
+ if (dp) {
+ *stringp = dp+1;
+ int nc = (int)((unsigned long)dp - (unsigned long)mp);
+ rv = (char *) malloc(nc+1);
+ memcpy(rv,mp,nc);
+ *(rv+nc) = '\0';
+ return rv;
+ } else {
+ rv = (char *) malloc(n+1);
+ memcpy(rv, mp, n);
+ *(rv+n) = '\0';
+ *stringp = mp + n;
+ return rv;
+ }
+ }
+ return NULL;
+}
+
+
+// replaces strdup with ansi version
+char * DictMgr::mystrdup(const char * s)
+{
+ char * d = NULL;
+ if (s) {
+ int sl = strlen(s);
+ d = (char *) malloc(((sl+1) * sizeof(char)));
+ if (d) memcpy(d,s,((sl+1)*sizeof(char)));
+ }
+ return d;
+}
+
+
+// remove cross-platform text line end characters
+void DictMgr:: mychomp(char * s)
+{
+ int k = strlen(s);
+ if ((k > 0) && ((*(s+k-1)=='\r') || (*(s+k-1)=='\n'))) *(s+k-1) = '\0';
+ if ((k > 1) && (*(s+k-2) == '\r')) *(s+k-2) = '\0';
+}
+
diff --git a/chrome/third_party/hunspell/src/hunspell/dictmgr.hxx b/chrome/third_party/hunspell/src/hunspell/dictmgr.hxx
new file mode 100644
index 0000000..88eeb7d
--- /dev/null
+++ b/chrome/third_party/hunspell/src/hunspell/dictmgr.hxx
@@ -0,0 +1,34 @@
+#ifndef _DICTMGR_HXX_
+#define _DICTMGR_HXX_
+
+#define MAXDICTIONARIES 100
+#define MAXDICTENTRYLEN 1024
+
+struct dictentry {
+ char * filename;
+ char * lang;
+ char * region;
+};
+
+
+class DictMgr
+{
+
+ int numdict;
+ dictentry * pdentry;
+
+public:
+
+ DictMgr(const char * dictpath, const char * etype);
+ ~DictMgr();
+ int get_list(dictentry** ppentry);
+
+private:
+ int parse_file(const char * dictpath, const char * etype);
+ char * mystrsep(char ** stringp, const char delim);
+ char * mystrdup(const char * s);
+ void mychomp(char * s);
+
+};
+
+#endif
diff --git a/chrome/third_party/hunspell/src/hunspell/hashmgr.cxx b/chrome/third_party/hunspell/src/hunspell/hashmgr.cxx
new file mode 100644
index 0000000..afa00aa
--- /dev/null
+++ b/chrome/third_party/hunspell/src/hunspell/hashmgr.cxx
@@ -0,0 +1,911 @@
+#include "license.hunspell"
+#include "license.myspell"
+
+#ifndef MOZILLA_CLIENT
+#include <cstdlib>
+#include <cstring>
+#include <cstdio>
+#include <cctype>
+#else
+#include <stdlib.h>
+#include <string.h>
+#include <stdio.h>
+#include <ctype.h>
+#endif
+
+#include <io.h>
+
+#include "hashmgr.hxx"
+#include "csutil.hxx"
+#include "atypes.hxx"
+
+#ifdef MOZILLA_CLIENT
+#ifdef __SUNPRO_CC // for SunONE Studio compiler
+using namespace std;
+#endif
+#else
+#ifndef W32
+using namespace std;
+#endif
+#endif
+
+// build a hash table from a munched word list
+#ifdef HUNSPELL_CHROME_CLIENT
+HashMgr::HashMgr(hunspell::BDictReader* reader)
+{
+ bdict_reader = reader;
+#else
+HashMgr::HashMgr(FILE* dic_handle, FILE* aff_handle)
+{
+#endif
+ tablesize = 0;
+ tableptr = NULL;
+ flag_mode = FLAG_CHAR;
+ complexprefixes = 0;
+ utf8 = 0;
+ ignorechars = NULL;
+ ignorechars_utf16 = NULL;
+ ignorechars_utf16_len = 0;
+ numaliasf = 0;
+ aliasf = NULL;
+ numaliasm = 0;
+ aliasm = NULL;
+#ifdef HUNSPELL_CHROME_CLIENT
+ // No tables to load, just the AF config.
+ int ec = load_config();
+#else
+ load_config(aff_handle);
+ int ec = load_tables(dic_handle);
+#endif
+ if (ec) {
+ /* error condition - what should we do here */
+ HUNSPELL_WARNING(stderr, "Hash Manager Error : %d\n",ec);
+ if (tableptr) {
+ free(tableptr);
+ tableptr = NULL;
+ }
+ tablesize = 0;
+ }
+}
+
+
+HashMgr::~HashMgr()
+{
+ if (tableptr) {
+ // now pass through hash table freeing up everything
+ // go through column by column of the table
+ for (int i=0; i < tablesize; i++) {
+ struct hentry * pt = &tableptr[i];
+ struct hentry * nt = NULL;
+ if (pt) {
+ if (pt->astr && !aliasf) free(pt->astr);
+ if (pt->word) free(pt->word);
+#ifdef HUNSPELL_EXPERIMENTAL
+ if (pt->description && !aliasm) free(pt->description);
+#endif
+ pt = pt->next;
+ }
+ while(pt) {
+ nt = pt->next;
+ if (pt->astr && !aliasf) free(pt->astr);
+ if (pt->word) free(pt->word);
+#ifdef HUNSPELL_EXPERIMENTAL
+ if (pt->description && !aliasm) free(pt->description);
+#endif
+ free(pt);
+ pt = nt;
+ }
+ }
+ free(tableptr);
+ tableptr = NULL;
+ }
+ tablesize = 0;
+
+ if (aliasf) {
+ for (int j = 0; j < (numaliasf); j++) free(aliasf[j]);
+ free(aliasf);
+ aliasf = NULL;
+ if (aliasflen) {
+ free(aliasflen);
+ aliasflen = NULL;
+ }
+ }
+ if (aliasm) {
+ for (int j = 0; j < (numaliasm); j++) free(aliasm[j]);
+ free(aliasm);
+ aliasm = NULL;
+ }
+
+ if (ignorechars) free(ignorechars);
+ if (ignorechars_utf16) free(ignorechars_utf16);
+
+#ifdef HUNSPELL_CHROME_CLIENT
+ EmptyHentryCache();
+#endif
+}
+
+#ifdef HUNSPELL_CHROME_CLIENT
+void HashMgr::EmptyHentryCache() {
+ // We need to delete each cache entry, and each additional one in the linked
+ // list of homonyms.
+ for (HEntryCache::iterator i = hentry_cache.begin();
+ i != hentry_cache.end(); ++i) {
+ hentry* cur = i->second;
+ while (cur) {
+ hentry* next = cur->next_homonym;
+ delete cur;
+ cur = next;
+ }
+ }
+ hentry_cache.clear();
+}
+#endif
+
+// lookup a root word in the hashtable
+
+struct hentry * HashMgr::lookup(const char *word) const
+{
+#ifdef HUNSPELL_CHROME_CLIENT
+ int affix_ids[hunspell::BDict::MAX_AFFIXES_PER_WORD];
+ int affix_count = bdict_reader->FindWord(word, affix_ids);
+ if (affix_count == 0)
+ return NULL;
+
+ static const int kMaxWordLen = 128;
+ static char word_buf[kMaxWordLen];
+ strncpy(word_buf, word, kMaxWordLen);
+
+ return AffixIDsToHentry(word_buf, affix_ids, affix_count);
+#else
+ struct hentry * dp;
+ if (tableptr) {
+ dp = &tableptr[hash(word)];
+ if (dp->word == NULL) return NULL;
+ for ( ; dp != NULL; dp = dp->next) {
+ if (strcmp(word,dp->word) == 0) return dp;
+ }
+ }
+ return NULL;
+#endif
+}
+
+// add a word to the hash table (private)
+
+int HashMgr::add_word(const char * word, int wl, unsigned short * aff, int al, const char * desc)
+{
+#ifndef HUNSPELL_CHROME_CLIENT // Don't support adding words yet.
+ char * st = mystrdup(word);
+ if (wl && !st) return 1;
+ if (ignorechars != NULL) {
+ if (utf8) {
+ remove_ignored_chars_utf(st, ignorechars_utf16, ignorechars_utf16_len);
+ } else {
+ remove_ignored_chars(st, ignorechars);
+ }
+ }
+ if (complexprefixes) {
+ if (utf8) reverseword_utf(st); else reverseword(st);
+ }
+ int i = hash(st);
+ struct hentry * dp = &tableptr[i];
+ if (dp->word == NULL) {
+ dp->wlen = (short) wl;
+ dp->alen = (short) al;
+ dp->word = st;
+ dp->astr = aff;
+ dp->next = NULL;
+ dp->next_homonym = NULL;
+#ifdef HUNSPELL_EXPERIMENTAL
+ if (aliasm) {
+ dp->description = (desc) ? get_aliasm(atoi(desc)) : mystrdup(desc);
+ } else {
+ dp->description = mystrdup(desc);
+ if (desc && !dp->description) return 1;
+ if (dp->description && complexprefixes) {
+ if (utf8) reverseword_utf(dp->description); else reverseword(dp->description);
+ }
+ }
+#endif
+ } else {
+ struct hentry* hp = (struct hentry *) malloc (sizeof(struct hentry));
+ if (!hp) return 1;
+ hp->wlen = (short) wl;
+ hp->alen = (short) al;
+ hp->word = st;
+ hp->astr = aff;
+ hp->next = NULL;
+ hp->next_homonym = NULL;
+#ifdef HUNSPELL_EXPERIMENTAL
+ if (aliasm) {
+ hp->description = (desc) ? get_aliasm(atoi(desc)) : mystrdup(desc);
+ } else {
+ hp->description = mystrdup(desc);
+ if (desc && !hp->description) return 1;
+ if (dp->description && complexprefixes) {
+ if (utf8) reverseword_utf(hp->description); else reverseword(hp->description);
+ }
+ }
+#endif
+ while (dp->next != NULL) {
+ if ((!dp->next_homonym) && (strcmp(hp->word, dp->word) == 0)) dp->next_homonym = hp;
+ dp=dp->next;
+ }
+ if ((!dp->next_homonym) && (strcmp(hp->word, dp->word) == 0)) dp->next_homonym = hp;
+ dp->next = hp;
+ }
+#endif // HUNSPELL_CHROME_CLIENT
+ return 0;
+}
+
+// add a custom dic. word to the hash table (public)
+int HashMgr::put_word(const char * word, int wl, char * aff)
+{
+ unsigned short * flags;
+ int al = 0;
+ if (aff) {
+ al = decode_flags(&flags, aff);
+ flag_qsort(flags, 0, al);
+ } else {
+ flags = NULL;
+ }
+ add_word(word, wl, flags, al, NULL);
+ return 0;
+}
+
+int HashMgr::put_word_pattern(const char * word, int wl, const char * pattern)
+{
+ unsigned short * flags;
+ struct hentry * dp = lookup(pattern);
+ if (!dp || !dp->astr) return 1;
+ flags = (unsigned short *) malloc (dp->alen * sizeof(short));
+ memcpy((void *) flags, (void *) dp->astr, dp->alen * sizeof(short));
+ add_word(word, wl, flags, dp->alen, NULL);
+ return 0;
+}
+
+// walk the hash table entry by entry - null at end
+struct hentry * HashMgr::walk_hashtable(int &col, struct hentry * hp) const
+{
+#ifdef HUNSPELL_CHROME_CLIENT
+ // DANGER! This is kind of impossible to make work correctly, since Hunspell
+ // will keep arbitrary hentry pointers into our table. Therefore, the caller
+ // (SuggestMgr::ngsuggest) will need to be modified to not do this for us
+ // to be able to uncomment this function.
+/*
+ // This function is only ever called by one place and not nested. We can
+ // therefore keep static state between calls and use |col| as a "reset" flag
+ // to avoid changing the API. It is set to -1 for the first call.
+ static hunspell::WordIterator word_iterator =
+ bdict_reader->GetAllWordIterator();
+ if (col < 0) {
+ col = 1;
+ word_iterator = bdict_reader->GetAllWordIterator();
+ }
+
+ int affix_ids[hunspell::BDict::MAX_AFFIXES_PER_WORD];
+ static const int kMaxWordLen = 128;
+ static char word_buf[kMaxWordLen];
+ int affix_count = word_iterator.Advance(word_buf, kMaxWordLen, affix_ids);
+ return AffixIDsToHentry(word_buf, affix_ids, affix_count);
+*/
+ return NULL;
+#else
+ //reset to start
+ if ((col < 0) || (hp == NULL)) {
+ col = -1;
+ hp = NULL;
+ }
+
+ if (hp && hp->next != NULL) {
+ hp = hp->next;
+ } else {
+ col++;
+ hp = (col < tablesize) ? &tableptr[col] : NULL;
+ // search for next non-blank column entry
+ while (hp && (hp->word == NULL)) {
+ col ++;
+ hp = (col < tablesize) ? &tableptr[col] : NULL;
+ }
+ if (col < tablesize) return hp;
+ hp = NULL;
+ col = -1;
+ }
+ return hp;
+#endif
+}
+
+// load a munched word list and build a hash table on the fly
+int HashMgr::load_tables(FILE* t_handle)
+{
+#ifndef HUNSPELL_CHROME_CLIENT
+ int wl, al;
+ char * ap;
+ char * dp;
+ unsigned short * flags;
+
+ // raw dictionary - munched file
+ FILE * rawdict = _fdopen(_dup(_fileno(t_handle)), "r");
+ if (rawdict == NULL) return 1;
+ fseek(rawdict, 0, SEEK_SET);
+
+ // first read the first line of file to get hash table size */
+ char ts[MAXDELEN];
+ if (! fgets(ts, MAXDELEN-1,rawdict)) return 2;
+ mychomp(ts);
+
+ /* remove byte order mark */
+ if (strncmp(ts,"\xef\xbb\xbf",3) == 0) {
+ memmove(ts, ts+3, strlen(ts+3)+1);
+ HUNSPELL_WARNING(stderr, "warning: dic file begins with byte order mark: possible incompatibility with old Hunspell versions\n");
+ }
+
+ if ((*ts < '1') || (*ts > '9')) HUNSPELL_WARNING(stderr, "error - missing word count in dictionary file\n");
+ tablesize = atoi(ts);
+ if (!tablesize) return 4;
+ tablesize = tablesize + 5 + USERWORD;
+ if ((tablesize %2) == 0) tablesize++;
+
+ // allocate the hash table
+ tableptr = (struct hentry *) calloc(tablesize, sizeof(struct hentry));
+ if (! tableptr) return 3;
+ for (int i=0; i<tablesize; i++) tableptr[i].word = NULL;
+
+ // loop through all words on much list and add to hash
+ // table and create word and affix strings
+
+ while (fgets(ts,MAXDELEN-1,rawdict)) {
+ mychomp(ts);
+ // split each line into word and morphological description
+ dp = strchr(ts,'\t');
+
+ if (dp) {
+ *dp = '\0';
+ dp++;
+ } else {
+ dp = NULL;
+ }
+
+ // split each line into word and affix char strings
+ // "\/" signs slash in words (not affix separator)
+ // "/" at beginning of the line is word character (not affix separator)
+ ap = strchr(ts,'/');
+ while (ap) {
+ if (ap == ts) {
+ ap++;
+ continue;
+ } else if (*(ap - 1) != '\\') break;
+ // replace "\/" with "/"
+ for (char * sp = ap - 1; *sp; *sp = *(sp + 1), sp++);
+ ap = strchr(ap,'/');
+ }
+
+ if (ap) {
+ *ap = '\0';
+ if (aliasf) {
+ int index = atoi(ap + 1);
+ al = get_aliasf(index, &flags);
+ if (!al) {
+ HUNSPELL_WARNING(stderr, "error - bad flag vector alias: %s\n", ts);
+ *ap = '\0';
+ }
+ } else {
+ al = decode_flags(&flags, ap + 1);
+ flag_qsort(flags, 0, al);
+ }
+ } else {
+ al = 0;
+ ap = NULL;
+ flags = NULL;
+ }
+
+ wl = strlen(ts);
+
+ // add the word and its index
+ if (add_word(ts,wl,flags,al,dp)) return 5;
+
+ }
+
+ fclose(rawdict);
+#endif
+ return 0;
+}
+
+
+// the hash function is a simple load and rotate
+// algorithm borrowed
+
+int HashMgr::hash(const char * word) const
+{
+#ifdef HUNSPELL_CHROME_CLIENT
+ return 0;
+#else
+ long hv = 0;
+ for (int i=0; i < 4 && *word != 0; i++)
+ hv = (hv << 8) | (*word++);
+ while (*word != 0) {
+ ROTATE(hv,ROTATE_LEN);
+ hv ^= (*word++);
+ }
+ return (unsigned long) hv % tablesize;
+#endif
+}
+
+int HashMgr::decode_flags(unsigned short ** result, char * flags) {
+ int len;
+ switch (flag_mode) {
+ case FLAG_LONG: { // two-character flags (1x2yZz -> 1x 2y Zz)
+ len = strlen(flags);
+ if (len%2 == 1) HUNSPELL_WARNING(stderr, "error: length of FLAG_LONG flagvector is odd: %s\n", flags);
+ len = len/2;
+ *result = (unsigned short *) malloc(len * sizeof(short));
+ for (int i = 0; i < len; i++) {
+ (*result)[i] = (((unsigned short) flags[i * 2]) << 8) + (unsigned short) flags[i * 2 + 1];
+ }
+ break;
+ }
+ case FLAG_NUM: { // decimal numbers separated by comma (4521,23,233 -> 4521 23 233)
+ len = 1;
+ char * src = flags;
+ unsigned short * dest;
+ char * p;
+ for (p = flags; *p; p++) {
+ if (*p == ',') len++;
+ }
+ *result = (unsigned short *) malloc(len * sizeof(short));
+ dest = *result;
+ for (p = flags; *p; p++) {
+ if (*p == ',') {
+ *dest = (unsigned short) atoi(src);
+ if (*dest == 0) HUNSPELL_WARNING(stderr, "error: 0 is wrong flag id\n");
+ src = p + 1;
+ dest++;
+ }
+ }
+ *dest = (unsigned short) atoi(src);
+ if (*dest == 0) HUNSPELL_WARNING(stderr, "error: 0 is wrong flag id\n");
+ break;
+ }
+ case FLAG_UNI: { // UTF-8 characters
+ w_char w[MAXDELEN/2];
+ len = u8_u16(w, MAXDELEN/2, flags);
+ *result = (unsigned short *) malloc(len * sizeof(short));
+ memcpy(*result, w, len * sizeof(short));
+ break;
+ }
+ default: { // Ispell's one-character flags (erfg -> e r f g)
+ unsigned short * dest;
+ len = strlen(flags);
+ *result = (unsigned short *) malloc(len * sizeof(short));
+ dest = *result;
+ for (unsigned char * p = (unsigned char *) flags; *p; p++) {
+ *dest = (unsigned short) *p;
+ dest++;
+ }
+ }
+ }
+ return len;
+}
+
+unsigned short HashMgr::decode_flag(const char * f) {
+ unsigned short s = 0;
+ switch (flag_mode) {
+ case FLAG_LONG:
+ s = ((unsigned short) f[0] << 8) + (unsigned short) f[1];
+ break;
+ case FLAG_NUM:
+ s = (unsigned short) atoi(f);
+ break;
+ case FLAG_UNI:
+ u8_u16((w_char *) &s, 1, f);
+ break;
+ default:
+ s = (unsigned short) *((unsigned char *)f);
+ }
+ if (!s) HUNSPELL_WARNING(stderr, "error: 0 is wrong flag id\n");
+ return s;
+}
+
+char * HashMgr::encode_flag(unsigned short f) {
+ unsigned char ch[10];
+ if (f==0) return mystrdup("(NULL)");
+ if (flag_mode == FLAG_LONG) {
+ ch[0] = (unsigned char) (f >> 8);
+ ch[1] = (unsigned char) (f - ((f >> 8) << 8));
+ ch[2] = '\0';
+ } else if (flag_mode == FLAG_NUM) {
+ sprintf((char *) ch, "%d", f);
+ } else if (flag_mode == FLAG_UNI) {
+ u16_u8((char *) &ch, 10, (w_char *) &f, 1);
+ } else {
+ ch[0] = (unsigned char) (f);
+ ch[1] = '\0';
+ }
+ return mystrdup((char *) ch);
+}
+
+#ifdef HUNSPELL_CHROME_CLIENT
+int HashMgr::load_config()
+{
+ utf8 = 1; // We always use UTF-8.
+
+ // Read in all the AF lines which tell us the rules for each affix group ID.
+ char line[MAXDELEN+1];
+ hunspell::LineIterator iterator = bdict_reader->GetAfLineIterator();
+ while (iterator.AdvanceAndCopy(line, MAXDELEN)) {
+ int rv = parse_aliasf(line, &iterator);
+ if (rv)
+ return rv;
+ }
+
+ // Read in the regular commands from the affix file. We only care about the
+ // IGNORE line here. The rest of the commands will be read by the affix
+ // manager.
+ iterator = bdict_reader->GetOtherLineIterator();
+ while (iterator.AdvanceAndCopy(line, MAXDELEN)) {
+ // Parse in the ignored characters (for example, Arabic optional
+ // diacritics characters.
+ if (strncmp(line,"IGNORE",6) == 0) {
+ parse_array(line, &ignorechars, &ignorechars_utf16,
+ &ignorechars_utf16_len, "IGNORE", utf8);
+ break; // All done.
+ }
+ }
+
+ return 0;
+}
+#else
+// read in aff file and set flag mode
+int HashMgr::load_config(FILE* aff_handle)
+{
+ int firstline = 1;
+
+ // io buffers
+ char line[MAXDELEN+1];
+
+ // open the affix file
+ FILE * afflst;
+ afflst = _fdopen(_dup(_fileno(aff_handle)), "r");
+ if (!afflst) {
+ HUNSPELL_WARNING(stderr, "Error - could not open affix description file\n");
+ return 1;
+ }
+ fseek(afflst, 0, SEEK_SET);
+
+ // read in each line ignoring any that do not
+ // start with a known line type indicator
+
+ while (fgets(line,MAXDELEN,afflst)) {
+ mychomp(line);
+
+ /* remove byte order mark */
+ if (firstline) {
+ firstline = 0;
+ if (strncmp(line,"\xef\xbb\xbf",3) == 0) memmove(line, line+3, strlen(line+3)+1);
+ }
+
+ /* parse in the try string */
+ if ((strncmp(line,"FLAG",4) == 0) && isspace(line[4])) {
+ if (flag_mode != FLAG_CHAR) {
+ HUNSPELL_WARNING(stderr, "error: duplicate FLAG parameter\n");
+ }
+ if (strstr(line, "long")) flag_mode = FLAG_LONG;
+ if (strstr(line, "num")) flag_mode = FLAG_NUM;
+ if (strstr(line, "UTF-8")) flag_mode = FLAG_UNI;
+ if (flag_mode == FLAG_CHAR) {
+ HUNSPELL_WARNING(stderr, "error: FLAG need `num', `long' or `UTF-8' parameter: %s\n", line);
+ }
+ }
+ if ((strncmp(line,"SET",3) == 0) && isspace(line[3]) && strstr(line, "UTF-8")) utf8 = 1;
+
+ /* parse in the ignored characters (for example, Arabic optional diacritics characters */
+ if (strncmp(line,"IGNORE",6) == 0) {
+ if (parse_array(line, &ignorechars, &ignorechars_utf16, &ignorechars_utf16_len, "IGNORE", utf8)) {
+ fclose(afflst);
+ return 1;
+ }
+ }
+
+ if ((strncmp(line,"AF",2) == 0) && isspace(line[2])) {
+ if (parse_aliasf(line, afflst)) {
+ fclose(afflst);
+ return 1;
+ }
+ }
+
+#ifdef HUNSPELL_EXPERIMENTAL
+ if ((strncmp(line,"AM",2) == 0) && isspace(line[2])) {
+ if (parse_aliasm(line, afflst)) {
+ fclose(afflst);
+ return 1;
+ }
+ }
+#endif
+ if (strncmp(line,"COMPLEXPREFIXES",15) == 0) complexprefixes = 1;
+ if (((strncmp(line,"SFX",3) == 0) || (strncmp(line,"PFX",3) == 0)) && isspace(line[3])) break;
+ }
+ fclose(afflst);
+ return 0;
+}
+#endif // HUNSPELL_CHROME_CLIENT
+
+/* parse in the ALIAS table */
+#ifdef HUNSPELL_CHROME_CLIENT
+int HashMgr::parse_aliasf(char* line, hunspell::LineIterator* iterator)
+{
+#else
+int HashMgr::parse_aliasf(char * line, FILE * af)
+{
+#endif
+ if (numaliasf != 0) {
+ HUNSPELL_WARNING(stderr, "error: duplicate AF (alias for flag vector) tables used\n");
+ return 1;
+ }
+ char * tp = line;
+ char * piece;
+ int i = 0;
+ int np = 0;
+ piece = mystrsep(&tp, 0);
+ while (piece) {
+ if (*piece != '\0') {
+ switch(i) {
+ case 0: { np++; break; }
+ case 1: {
+ numaliasf = atoi(piece);
+ if (numaliasf < 1) {
+ numaliasf = 0;
+ aliasf = NULL;
+ aliasflen = NULL;
+ HUNSPELL_WARNING(stderr, "incorrect number of entries in AF table\n");
+ free(piece);
+ return 1;
+ }
+ aliasf = (unsigned short **) malloc(numaliasf * sizeof(unsigned short *));
+ aliasflen = (unsigned short *) malloc(numaliasf * sizeof(short));
+ if (!aliasf || !aliasflen) {
+ numaliasf = 0;
+ if (aliasf) free(aliasf);
+ if (aliasflen) free(aliasflen);
+ aliasf = NULL;
+ aliasflen = NULL;
+ return 1;
+ }
+ np++;
+ break;
+ }
+ default: break;
+ }
+ i++;
+ }
+ free(piece);
+ piece = mystrsep(&tp, 0);
+ }
+ if (np != 2) {
+ numaliasf = 0;
+ free(aliasf);
+ free(aliasflen);
+ aliasf = NULL;
+ aliasflen = NULL;
+ HUNSPELL_WARNING(stderr, "error: missing AF table information\n");
+ return 1;
+ }
+
+ /* now parse the numaliasf lines to read in the remainder of the table */
+ char * nl = line;
+ for (int j=0; j < numaliasf; j++) {
+#ifdef HUNSPELL_CHROME_CLIENT
+ if (!iterator->AdvanceAndCopy(nl, MAXDELEN))
+ return 1;
+#else
+ if (!fgets(nl,MAXDELEN,af)) return 1;
+#endif
+ mychomp(nl);
+ tp = nl;
+ i = 0;
+ aliasf[j] = NULL;
+ aliasflen[j] = 0;
+ piece = mystrsep(&tp, 0);
+ while (piece) {
+ if (*piece != '\0') {
+ switch(i) {
+ case 0: {
+ if (strncmp(piece,"AF",2) != 0) {
+ numaliasf = 0;
+ free(aliasf);
+ free(aliasflen);
+ aliasf = NULL;
+ aliasflen = NULL;
+ HUNSPELL_WARNING(stderr, "error: AF table is corrupt\n");
+ free(piece);
+ return 1;
+ }
+ break;
+ }
+ case 1: {
+ aliasflen[j] = (unsigned short) decode_flags(&(aliasf[j]), piece);
+ flag_qsort(aliasf[j], 0, aliasflen[j]);
+ break;
+ }
+ default: break;
+ }
+ i++;
+ }
+ free(piece);
+ piece = mystrsep(&tp, 0);
+ }
+ if (!aliasf[j]) {
+ free(aliasf);
+ free(aliasflen);
+ aliasf = NULL;
+ aliasflen = NULL;
+ numaliasf = 0;
+ HUNSPELL_WARNING(stderr, "error: AF table is corrupt\n");
+ return 1;
+ }
+ }
+ return 0;
+}
+
+#ifdef HUNSPELL_CHROME_CLIENT
+hentry* HashMgr::AffixIDsToHentry(char* word,
+ int* affix_ids, int affix_count) const
+{
+ if (affix_count == 0)
+ return NULL;
+
+ HEntryCache& cache = const_cast<HashMgr*>(this)->hentry_cache;
+ std::string std_word(word);
+ HEntryCache::iterator found = cache.find(std_word);
+ if (found != cache.end()) {
+ // We must return an existing hentry for the same word if we've previously
+ // handed one out. Hunspell will compare pointers in some cases to see if
+ // two words it has found are the same.
+ return found->second;
+ }
+
+ short word_len = static_cast<short>(strlen(word));
+
+ // We can get a number of prefixes per word. There will normally be only one,
+ // but if not, there will be a linked list of "hentry"s for the "homonym"s
+ // for the word.
+ struct hentry* first_he = NULL;
+ struct hentry* prev_he = NULL; // For making linked list.
+ for (int i = 0; i < affix_count; i++) {
+ struct hentry* he = new hentry;
+ if (i == 0)
+ first_he = he;
+ he->word = word;
+ he->wlen = word_len;
+ he->alen = (short)const_cast<HashMgr*>(this)->get_aliasf(affix_ids[i],
+ &he->astr);
+ he->next = NULL;
+ he->next_homonym = NULL;
+ if (prev_he)
+ prev_he->next_homonym = he;
+ prev_he = he;
+ }
+
+ cache[std_word] = first_he; // Save this word in the cache for later.
+ return first_he;
+}
+
+#endif
+
+int HashMgr::is_aliasf() {
+ return (aliasf != NULL);
+}
+
+int HashMgr::get_aliasf(int index, unsigned short ** fvec) {
+ if ((index > 0) && (index <= numaliasf)) {
+ *fvec = aliasf[index - 1];
+ return aliasflen[index - 1];
+ }
+ HUNSPELL_WARNING(stderr, "error: bad flag alias index: %d\n", index);
+ *fvec = NULL;
+ return 0;
+}
+
+#ifdef HUNSPELL_EXPERIMENTAL
+/* parse morph alias definitions */
+int HashMgr::parse_aliasm(char * line, FILE * af)
+{
+ if (numaliasm != 0) {
+ HUNSPELL_WARNING(stderr, "error: duplicate AM (aliases for morphological descriptions) tables used\n");
+ return 1;
+ }
+ char * tp = line;
+ char * piece;
+ int i = 0;
+ int np = 0;
+ piece = mystrsep(&tp, 0);
+ while (piece) {
+ if (*piece != '\0') {
+ switch(i) {
+ case 0: { np++; break; }
+ case 1: {
+ numaliasm = atoi(piece);
+ if (numaliasm < 1) {
+ HUNSPELL_WARNING(stderr, "incorrect number of entries in AM table\n");
+ free(piece);
+ return 1;
+ }
+ aliasm = (char **) malloc(numaliasm * sizeof(char *));
+ if (!aliasm) {
+ numaliasm = 0;
+ return 1;
+ }
+ np++;
+ break;
+ }
+ default: break;
+ }
+ i++;
+ }
+ free(piece);
+ piece = mystrsep(&tp, 0);
+ }
+ if (np != 2) {
+ numaliasm = 0;
+ free(aliasm);
+ aliasm = NULL;
+ HUNSPELL_WARNING(stderr, "error: missing AM alias information\n");
+ return 1;
+ }
+
+ /* now parse the numaliasm lines to read in the remainder of the table */
+ char * nl = line;
+ for (int j=0; j < numaliasm; j++) {
+ if (!fgets(nl,MAXDELEN,af)) return 1;
+ mychomp(nl);
+ tp = nl;
+ i = 0;
+ aliasm[j] = NULL;
+ piece = mystrsep(&tp, 0);
+ while (piece) {
+ if (*piece != '\0') {
+ switch(i) {
+ case 0: {
+ if (strncmp(piece,"AM",2) != 0) {
+ HUNSPELL_WARNING(stderr, "error: AM table is corrupt\n");
+ free(piece);
+ numaliasm = 0;
+ free(aliasm);
+ aliasm = NULL;
+ return 1;
+ }
+ break;
+ }
+ case 1: {
+ if (complexprefixes) {
+ if (utf8) reverseword_utf(piece);
+ else reverseword(piece);
+ }
+ aliasm[j] = mystrdup(piece);
+ break; }
+ default: break;
+ }
+ i++;
+ }
+ free(piece);
+ piece = mystrsep(&tp, 0);
+ }
+ if (!aliasm[j]) {
+ numaliasm = 0;
+ free(aliasm);
+ aliasm = NULL;
+ HUNSPELL_WARNING(stderr, "error: map table is corrupt\n");
+ return 1;
+ }
+ }
+ return 0;
+}
+
+int HashMgr::is_aliasm() {
+ return (aliasm != NULL);
+}
+
+char * HashMgr::get_aliasm(int index) {
+ if ((index > 0) && (index <= numaliasm)) return aliasm[index - 1];
+ HUNSPELL_WARNING(stderr, "error: bad morph. alias index: %d\n", index);
+ return NULL;
+}
+#endif
diff --git a/chrome/third_party/hunspell/src/hunspell/hashmgr.hxx b/chrome/third_party/hunspell/src/hunspell/hashmgr.hxx
new file mode 100644
index 0000000..9290e90
--- /dev/null
+++ b/chrome/third_party/hunspell/src/hunspell/hashmgr.hxx
@@ -0,0 +1,99 @@
+#ifndef _HASHMGR_HXX_
+#define _HASHMGR_HXX_
+
+#include <cstdio>
+#include "htypes.hxx"
+
+#ifdef HUNSPELL_CHROME_CLIENT
+#include "chrome/third_party/hunspell/google/bdict_reader.h"
+#include <string>
+#include <map>
+#endif
+
+enum flag { FLAG_CHAR, FLAG_LONG, FLAG_NUM, FLAG_UNI };
+
+class HashMgr
+{
+#ifdef HUNSPELL_CHROME_CLIENT
+ // Not owned by this class, owned by the Hunspell object.
+ hunspell::BDictReader* bdict_reader;
+#endif
+ int tablesize;
+ struct hentry * tableptr;
+ int userword;
+ flag flag_mode;
+ int complexprefixes;
+ int utf8;
+ char * ignorechars;
+ unsigned short * ignorechars_utf16;
+ int ignorechars_utf16_len;
+ int numaliasf; // flag vector `compression' with aliases
+ unsigned short ** aliasf;
+ unsigned short * aliasflen;
+ int numaliasm; // morphological desciption `compression' with aliases
+ char ** aliasm;
+
+
+public:
+#ifdef HUNSPELL_CHROME_CLIENT
+ HashMgr(hunspell::BDictReader* reader);
+
+ // Called before we do a new operation. This will empty the cache of pointers
+ // to hentries that we have cached. In Chrome, we make these on-demand, but
+ // they must live as long as the single spellcheck operation that they're part
+ // of since Hunspell will save pointers to various ones as it works.
+ //
+ // This function allows that cache to be emptied and not grow infinitely.
+ void EmptyHentryCache();
+#else
+ HashMgr(FILE* t_handle, FILE* a_handle);
+#endif
+ ~HashMgr();
+
+ struct hentry * lookup(const char *) const;
+ int hash(const char *) const;
+ struct hentry * walk_hashtable(int & col, struct hentry * hp) const;
+
+ int put_word(const char * word, int wl, char * ap);
+ int put_word_pattern(const char * word, int wl, const char * pattern);
+ int decode_flags(unsigned short ** result, char * flags);
+ unsigned short decode_flag(const char * flag);
+ char * encode_flag(unsigned short flag);
+ int is_aliasf();
+ int get_aliasf(int index, unsigned short ** fvec);
+#ifdef HUNSPELL_EXPERIMENTAL
+ int is_aliasm();
+ char * get_aliasm(int index);
+#endif
+
+
+private:
+ int load_tables(FILE* t_handle);
+ int add_word(const char * word, int wl, unsigned short * ap, int al, const char * desc);
+
+#ifdef HUNSPELL_CHROME_CLIENT
+ int load_config();
+ int parse_aliasf(char* line, hunspell::LineIterator* iterator);
+
+ // Converts the list of affix IDs to a linked list of hentry structures. The
+ // hentry structures will point to the given word. The returned pointer will
+ // be a statically allocated variable that will change for the next call. The
+ // |word| buffer must be the same.
+ hentry* AffixIDsToHentry(char* word, int* affix_ids, int affix_count) const;
+
+ // See EmptyHentryCache above. Note that each one is actually a linked list
+ // followed by the homonym pointer.
+ typedef std::map<std::string, hentry*> HEntryCache;
+ HEntryCache hentry_cache;
+#else
+ int load_config(FILE* aff_handle);
+ int parse_aliasf(char * line, FILE * af);
+#endif
+
+#ifdef HUNSPELL_EXPERIMENTAL
+ int parse_aliasm(char * line, FILE * af);
+#endif
+
+};
+
+#endif
diff --git a/chrome/third_party/hunspell/src/hunspell/htypes.hxx b/chrome/third_party/hunspell/src/hunspell/htypes.hxx
new file mode 100644
index 0000000..ddd1d83
--- /dev/null
+++ b/chrome/third_party/hunspell/src/hunspell/htypes.hxx
@@ -0,0 +1,31 @@
+#ifndef _HTYPES_HXX_
+#define _HTYPES_HXX_
+
+#define MAXDELEN 8192
+
+#define ROTATE_LEN 5
+
+#define ROTATE(v,q) \
+ (v) = ((v) << (q)) | (((v) >> (32 - q)) & ((1 << (q))-1));
+// approx. number of user defined words
+#define USERWORD 1000
+
+struct hentry
+{
+ short wlen;
+ short alen;
+ /* NOTE: Removed by mbelshe since this is not used.
+ * The english dictionary is 63K in size, so removing this
+ * itty bitty field saves us ~250KB of RAM.
+ char wbeg[2];
+ */
+ char * word;
+ unsigned short * astr;
+ struct hentry * next;
+ struct hentry * next_homonym;
+#ifdef HUNSPELL_EXPERIMENTAL
+ char * description;
+#endif
+};
+
+#endif
diff --git a/chrome/third_party/hunspell/src/hunspell/hunspell.cxx b/chrome/third_party/hunspell/src/hunspell/hunspell.cxx
new file mode 100644
index 0000000..42b0603
--- /dev/null
+++ b/chrome/third_party/hunspell/src/hunspell/hunspell.cxx
@@ -0,0 +1,1747 @@
+#include "license.hunspell"
+#include "license.myspell"
+
+#ifndef MOZILLA_CLIENT
+#include <cstdlib>
+#include <cstring>
+#include <cstdio>
+#else
+#include <stdlib.h>
+#include <string.h>
+#include <stdio.h>
+#endif
+
+#include "hunspell.hxx"
+#include "hunspell.h"
+
+#ifndef MOZILLA_CLIENT
+#ifndef W32
+using namespace std;
+#endif
+#endif
+
+#ifdef HUNSPELL_CHROME_CLIENT
+Hunspell::Hunspell(const unsigned char* bdict_data, size_t bdict_length)
+#else
+Hunspell::Hunspell(FILE* aff_handle, FILE* dic_handle)
+#endif
+{
+ encoding = NULL;
+ csconv = NULL;
+ utf8 = 0;
+ complexprefixes = 0;
+
+#ifdef HUNSPELL_CHROME_CLIENT
+ bdict_reader = new hunspell::BDictReader;
+ bdict_reader->Init(bdict_data, bdict_length);
+
+ pHMgr = new HashMgr(bdict_reader);
+ pAMgr = new AffixMgr(bdict_reader, pHMgr);
+#else
+ /* first set up the hash manager */
+ pHMgr = new HashMgr(dic_handle, aff_handle);
+
+ /* next set up the affix manager */
+ /* it needs access to the hash manager lookup methods */
+ pAMgr = new AffixMgr(aff_handle, pHMgr);
+#endif
+
+ /* get the preferred try string and the dictionary */
+ /* encoding from the Affix Manager for that dictionary */
+ char * try_string = pAMgr->get_try_string();
+ encoding = pAMgr->get_encoding();
+ csconv = get_current_cs(encoding);
+ langnum = pAMgr->get_langnum();
+ utf8 = pAMgr->get_utf8();
+ complexprefixes = pAMgr->get_complexprefixes();
+ wordbreak = pAMgr->get_breaktable();
+
+ /* and finally set up the suggestion manager */
+ pSMgr = new SuggestMgr(try_string, MAXSUGGESTION, pAMgr);
+ if (try_string) free(try_string);
+}
+
+Hunspell::~Hunspell()
+{
+ if (pSMgr) delete pSMgr;
+ if (pAMgr) delete pAMgr;
+ if (pHMgr) delete pHMgr;
+ pSMgr = NULL;
+ pAMgr = NULL;
+ pHMgr = NULL;
+ csconv= NULL;
+ if (encoding) free(encoding);
+ encoding = NULL;
+
+#ifdef HUNSPELL_CHROME_CLIENT
+ if (bdict_reader) delete bdict_reader;
+ bdict_reader = NULL;
+#endif
+}
+
+
+// make a copy of src at destination while removing all leading
+// blanks and removing any trailing periods after recording
+// their presence with the abbreviation flag
+// also since already going through character by character,
+// set the capitalization type
+// return the length of the "cleaned" (and UTF-8 encoded) word
+
+int Hunspell::cleanword2(char * dest, const char * src,
+ w_char * dest_utf, int * nc, int * pcaptype, int * pabbrev)
+{
+ unsigned char * p = (unsigned char *) dest;
+ const unsigned char * q = (const unsigned char * ) src;
+ int firstcap = 0;
+
+ // first skip over any leading blanks
+ while ((*q != '\0') && (*q == ' ')) q++;
+
+ // now strip off any trailing periods (recording their presence)
+ *pabbrev = 0;
+ int nl = strlen((const char *)q);
+ while ((nl > 0) && (*(q+nl-1)=='.')) {
+ nl--;
+ (*pabbrev)++;
+ }
+
+ // if no characters are left it can't be capitalized
+ if (nl <= 0) {
+ *pcaptype = NOCAP;
+ *p = '\0';
+ return 0;
+ }
+
+ // now determine the capitalization type of the first nl letters
+ int ncap = 0;
+ int nneutral = 0;
+ *nc = 0;
+
+ if (!utf8) {
+ while (nl > 0) {
+ (*nc)++;
+ if (csconv[(*q)].ccase) ncap++;
+ if (csconv[(*q)].cupper == csconv[(*q)].clower) nneutral++;
+ *p++ = *q++;
+ nl--;
+ }
+ // remember to terminate the destination string
+ *p = '\0';
+ if (ncap) {
+ firstcap = csconv[(unsigned char)(*dest)].ccase;
+ }
+ } else {
+ unsigned short idx;
+ *nc = u8_u16(dest_utf, MAXWORDLEN, (const char *) q);
+ // don't check too long words
+ if (*nc >= MAXWORDLEN) return 0;
+ if (*nc == -1) { // big Unicode character (non BMP area)
+ *pcaptype = NOCAP;
+ strcpy((char *) p, (char *) q);
+ return strlen(dest);
+ }
+ *nc -= *pabbrev;
+ for (int i = 0; i < *nc; i++) {
+ idx = (dest_utf[i].h << 8) + dest_utf[i].l;
+ if (idx != unicodetolower(idx, langnum)) ncap++;
+ if (unicodetoupper(idx, langnum) == unicodetolower(idx, langnum)) nneutral++;
+ }
+ u16_u8(dest, MAXWORDUTF8LEN, dest_utf, *nc);
+ if (ncap) {
+ idx = (dest_utf[0].h << 8) + dest_utf[0].l;
+ firstcap = (idx != unicodetolower(idx, langnum));
+ }
+ }
+
+ // now finally set the captype
+ if (ncap == 0) {
+ *pcaptype = NOCAP;
+ } else if ((ncap == 1) && firstcap) {
+ *pcaptype = INITCAP;
+ } else if ((ncap == *nc) || ((ncap + nneutral) == *nc)) {
+ *pcaptype = ALLCAP;
+ } else if ((ncap > 1) && firstcap) {
+ *pcaptype = HUHINITCAP;
+ } else {
+ *pcaptype = HUHCAP;
+ }
+ return strlen(dest);
+}
+
+int Hunspell::cleanword(char * dest, const char * src,
+ int * pcaptype, int * pabbrev)
+{
+ unsigned char * p = (unsigned char *) dest;
+ const unsigned char * q = (const unsigned char * ) src;
+ int firstcap = 0;
+
+ // first skip over any leading blanks
+ while ((*q != '\0') && (*q == ' ')) q++;
+
+ // now strip off any trailing periods (recording their presence)
+ *pabbrev = 0;
+ int nl = strlen((const char *)q);
+ while ((nl > 0) && (*(q+nl-1)=='.')) {
+ nl--;
+ (*pabbrev)++;
+ }
+
+ // if no characters are left it can't be capitalized
+ if (nl <= 0) {
+ *pcaptype = NOCAP;
+ *p = '\0';
+ return 0;
+ }
+
+ // now determine the capitalization type of the first nl letters
+ int ncap = 0;
+ int nneutral = 0;
+ int nc = 0;
+
+ if (!utf8) {
+ while (nl > 0) {
+ nc++;
+ if (csconv[(*q)].ccase) ncap++;
+ if (csconv[(*q)].cupper == csconv[(*q)].clower) nneutral++;
+ *p++ = *q++;
+ nl--;
+ }
+ // remember to terminate the destination string
+ *p = '\0';
+ firstcap = csconv[(unsigned char)(*dest)].ccase;
+ } else {
+ unsigned short idx;
+ w_char t[MAXWORDLEN];
+ nc = u8_u16(t, MAXWORDLEN, src);
+ for (int i = 0; i < nc; i++) {
+ idx = (t[i].h << 8) + t[i].l;
+ if (idx != unicodetolower(idx, langnum)) ncap++;
+ if (unicodetoupper(idx, langnum) == unicodetolower(idx, langnum)) nneutral++;
+ }
+ u16_u8(dest, MAXWORDUTF8LEN, t, nc);
+ if (ncap) {
+ idx = (t[0].h << 8) + t[0].l;
+ firstcap = (idx != unicodetolower(idx, langnum));
+ }
+ }
+
+ // now finally set the captype
+ if (ncap == 0) {
+ *pcaptype = NOCAP;
+ } else if ((ncap == 1) && firstcap) {
+ *pcaptype = INITCAP;
+ } else if ((ncap == nc) || ((ncap + nneutral) == nc)){
+ *pcaptype = ALLCAP;
+ } else if ((ncap > 1) && firstcap) {
+ *pcaptype = HUHINITCAP;
+ } else {
+ *pcaptype = HUHCAP;
+ }
+ return strlen(dest);
+}
+
+
+void Hunspell::mkallcap(char * p)
+{
+ if (utf8) {
+ w_char u[MAXWORDLEN];
+ int nc = u8_u16(u, MAXWORDLEN, p);
+ unsigned short idx;
+ for (int i = 0; i < nc; i++) {
+ idx = (u[i].h << 8) + u[i].l;
+ if (idx != unicodetoupper(idx, langnum)) {
+ u[i].h = (unsigned char) (unicodetoupper(idx, langnum) >> 8);
+ u[i].l = (unsigned char) (unicodetoupper(idx, langnum) & 0x00FF);
+ }
+ }
+ u16_u8(p, MAXWORDUTF8LEN, u, nc);
+ } else {
+ while (*p != '\0') {
+ *p = csconv[((unsigned char) *p)].cupper;
+ p++;
+ }
+ }
+}
+
+int Hunspell::mkallcap2(char * p, w_char * u, int nc)
+{
+ if (utf8) {
+ unsigned short idx;
+ for (int i = 0; i < nc; i++) {
+ idx = (u[i].h << 8) + u[i].l;
+ if (idx != unicodetoupper(idx, langnum)) {
+ u[i].h = (unsigned char) (unicodetoupper(idx, langnum) >> 8);
+ u[i].l = (unsigned char) (unicodetoupper(idx, langnum) & 0x00FF);
+ }
+ }
+ u16_u8(p, MAXWORDUTF8LEN, u, nc);
+ return strlen(p);
+ } else {
+ while (*p != '\0') {
+ *p = csconv[((unsigned char) *p)].cupper;
+ p++;
+ }
+ }
+ return nc;
+}
+
+
+void Hunspell::mkallsmall(char * p)
+{
+ while (*p != '\0') {
+ *p = csconv[((unsigned char) *p)].clower;
+ p++;
+ }
+}
+
+int Hunspell::mkallsmall2(char * p, w_char * u, int nc)
+{
+ if (utf8) {
+ unsigned short idx;
+ for (int i = 0; i < nc; i++) {
+ idx = (u[i].h << 8) + u[i].l;
+ if (idx != unicodetolower(idx, langnum)) {
+ u[i].h = (unsigned char) (unicodetolower(idx, langnum) >> 8);
+ u[i].l = (unsigned char) (unicodetolower(idx, langnum) & 0x00FF);
+ }
+ }
+ u16_u8(p, MAXWORDUTF8LEN, u, nc);
+ return strlen(p);
+ } else {
+ while (*p != '\0') {
+ *p = csconv[((unsigned char) *p)].clower;
+ p++;
+ }
+ }
+ return nc;
+}
+
+// convert UTF-8 sharp S codes to latin 1
+char * Hunspell::sharps_u8_l1(char * dest, char * source) {
+ char * p = dest;
+ *p = *source;
+ for (p++, source++; *(source - 1); p++, source++) {
+ *p = *source;
+ if (*source == '\x9f') *--p = '\xdf';
+ }
+ return dest;
+}
+
+// recursive search for right ss-\xdf permutations
+hentry * Hunspell::spellsharps(char * base, char * pos, int n,
+ int repnum, char * tmp, int * info, char **root) {
+ pos = strstr(pos, "ss");
+ if (pos && (n < MAXSHARPS)) {
+ *pos = '\xc3';
+ *(pos + 1) = '\x9f';
+ hentry * h = spellsharps(base, pos + 2, n + 1, repnum + 1, tmp, info, root);
+ if (h) return h;
+ *pos = 's';
+ *(pos + 1) = 's';
+ h = spellsharps(base, pos + 2, n + 1, repnum, tmp, info, root);
+ if (h) return h;
+ } else if (repnum > 0) {
+ if (utf8) return checkword(base, info, root);
+ return checkword(sharps_u8_l1(tmp, base), info, root);
+ }
+ return NULL;
+}
+
+int Hunspell::is_keepcase(const hentry * rv) {
+ return pAMgr && rv->astr && pAMgr->get_keepcase() &&
+ TESTAFF(rv->astr, pAMgr->get_keepcase(), rv->alen);
+}
+
+/* check and insert a word to beginning of the suggestion array */
+int Hunspell::insert_sug(char ***slst, char * word, int *ns) {
+ if (spell(word)) {
+ if (*ns == MAXSUGGESTION) {
+ (*ns)--;
+ free((*slst)[*ns]);
+ }
+ for (int k = *ns; k > 0; k--) (*slst)[k] = (*slst)[k - 1];
+ (*slst)[0] = mystrdup(word);
+ (*ns)++;
+ }
+ return 0;
+}
+
+int Hunspell::spell(const char * word, int * info, char ** root)
+{
+#ifdef HUNSPELL_CHROME_CLIENT
+ if (pHMgr) pHMgr->EmptyHentryCache();
+#endif
+ struct hentry * rv=NULL;
+ // need larger vector. For example, Turkish capital letter I converted a
+ // 2-byte UTF-8 character (dotless i) by mkallsmall.
+ char cw[MAXWORDUTF8LEN + 4];
+ char wspace[MAXWORDUTF8LEN + 4];
+ w_char unicw[MAXWORDLEN + 1];
+ int nc = strlen(word);
+ int wl2 = 0;
+ if (utf8) {
+ if (nc >= MAXWORDUTF8LEN) return 0;
+ } else {
+ if (nc >= MAXWORDLEN) return 0;
+ }
+ int captype = 0;
+ int abbv = 0;
+ int wl = cleanword2(cw, word, unicw, &nc, &captype, &abbv);
+
+ if (wl == 0) return 1;
+
+ if (info) *info = 0;
+ if (root) *root = NULL;
+
+ // allow numbers with dots and commas (but forbid double separators: "..", ",," etc.)
+ enum { NBEGIN, NNUM, NSEP };
+ int nstate = NBEGIN;
+ int i;
+
+ for (i = 0; (i < wl); i++) {
+ if ((cw[i] <= '9') && (cw[i] >= '0')) {
+ nstate = NNUM;
+ } else if ((cw[i] == ',') || (cw[i] == '.') || (cw[i] == '-')) {
+ if ((nstate == NSEP) || (i == 0)) break;
+ nstate = NSEP;
+ } else break;
+ }
+ if ((i == wl) && (nstate == NNUM)) return 1;
+
+ // LANG_hu section: number(s) + (percent or degree) with suffixes
+ if (langnum == LANG_hu) {
+ if ((nstate == NNUM) && ((cw[i] == '%') || (cw[i] == '\xb0'))
+ && checkword(cw + i, info, root)) return 1;
+ }
+ // END of LANG_hu section
+
+ switch(captype) {
+ case HUHCAP:
+ case HUHINITCAP:
+ case NOCAP: {
+ rv = checkword(cw, info, root);
+ if ((abbv) && !(rv)) {
+ memcpy(wspace,cw,wl);
+ *(wspace+wl) = '.';
+ *(wspace+wl+1) = '\0';
+ rv = checkword(wspace, info, root);
+ }
+ break;
+ }
+ case ALLCAP: {
+ rv = checkword(cw, info, root);
+ if (rv) break;
+ if (abbv) {
+ memcpy(wspace,cw,wl);
+ *(wspace+wl) = '.';
+ *(wspace+wl+1) = '\0';
+ rv = checkword(wspace, info, root);
+ if (rv) break;
+ }
+ if (pAMgr && pAMgr->get_checksharps() && strstr(cw, "SS")) {
+ char tmpword[MAXWORDUTF8LEN];
+ wl = mkallsmall2(cw, unicw, nc);
+ memcpy(wspace,cw,(wl+1));
+ rv = spellsharps(wspace, wspace, 0, 0, tmpword, info, root);
+ if (!rv) {
+ wl2 = mkinitcap2(cw, unicw, nc);
+ rv = spellsharps(cw, cw, 0, 0, tmpword, info, root);
+ }
+ if ((abbv) && !(rv)) {
+ *(wspace+wl) = '.';
+ *(wspace+wl+1) = '\0';
+ rv = spellsharps(wspace, wspace, 0, 0, tmpword, info, root);
+ if (!rv) {
+ memcpy(wspace, cw, wl2);
+ *(wspace+wl2) = '.';
+ *(wspace+wl2+1) = '\0';
+ rv = spellsharps(wspace, wspace, 0, 0, tmpword, info, root);
+ }
+ }
+ if (rv) break;
+ }
+ }
+ case INITCAP: {
+ wl = mkallsmall2(cw, unicw, nc);
+ memcpy(wspace,cw,(wl+1));
+ rv = checkword(wspace, info, root);
+ if (!rv || (is_keepcase(rv) && !((captype == INITCAP) &&
+ // if CHECKSHARPS: KEEPCASE words with \xdf are allowed
+ // in INITCAP form, too.
+ pAMgr->get_checksharps() && ((utf8 && strstr(wspace, "\xc3\x9f")) ||
+ (!utf8 && strchr(wspace, '\xdf')))))) {
+ wl2 = mkinitcap2(cw, unicw, nc);
+ rv = checkword(cw, info, root);
+ if (rv && (captype == ALLCAP) && is_keepcase(rv)) rv = NULL;
+ }
+ if (abbv && !rv) {
+ *(wspace+wl) = '.';
+ *(wspace+wl+1) = '\0';
+ rv = checkword(wspace, info, root);
+ if (!rv || is_keepcase(rv)) {
+ memcpy(wspace, cw, wl2);
+ *(wspace+wl2) = '.';
+ *(wspace+wl2+1) = '\0';
+ rv = checkword(wspace, info, root);
+ if (rv && ((captype == ALLCAP) && is_keepcase(rv))) rv = NULL;
+ }
+ }
+ break;
+ }
+ }
+
+ if (rv) return 1;
+
+ // recursive breaking at break points (not good for morphological analysis)
+ if (wordbreak) {
+ char * s;
+ char r;
+ for (int j = 0; j < pAMgr->get_numbreak(); j++) {
+ s=(char *) strstr(cw, wordbreak[j]);
+ if (s) {
+ r = *s;
+ *s = '\0';
+ // examine 2 sides of the break point
+ if (spell(cw) && spell(s + strlen(wordbreak[j]))) {
+ *s = r;
+ return 1;
+ }
+ *s = r;
+ }
+ }
+ }
+
+ // LANG_hu: compoundings with dashes and n-dashes XXX deprecated!
+ if (langnum == LANG_hu) {
+ int n;
+ // compound word with dash (HU) I18n
+ char * dash;
+ int result = 0;
+ // n-dash
+ dash = (char *) strstr(cw,"\xe2\x80\x93");
+ if (dash && !wordbreak) {
+ *dash = '\0';
+ // examine 2 sides of the dash
+ if (spell(cw) && spell(dash + 3)) {
+ *dash = '\xe2';
+ return 1;
+ }
+ *dash = '\xe2';
+ }
+ dash = (char *) strchr(cw,'-');
+ if (dash) {
+ *dash='\0';
+ // examine 2 sides of the dash
+ if (dash[1] == '\0') { // base word ending with dash
+ if (spell(cw)) return 1;
+ } else {
+ // first word ending with dash: word-
+ char r2 = *(dash + 1);
+ dash[0]='-';
+ dash[1]='\0';
+ result = spell(cw);
+ dash[1] = r2;
+ dash[0]='\0';
+ if (result && spell(dash+1) && ((strlen(dash+1) > 1) || (dash[1] == 'e') ||
+ ((dash[1] > '0') && (dash[1] < '9')))) return 1;
+ }
+ // affixed number in correct word
+ if (result && (dash > cw) && (((*(dash-1)<='9') && (*(dash-1)>='0')) || (*(dash-1)>='.'))) {
+ *dash='-';
+ n = 1;
+ if (*(dash - n) == '.') n++;
+ // search first not a number character to left from dash
+ while (((dash - n)>=cw) && ((*(dash - n)=='0') || (n < 3)) && (n < 6)) {
+ n++;
+ }
+ if ((dash - n) < cw) n--;
+ // numbers: deprecated
+ for(; n >= 1; n--) {
+ if ((*(dash - n) >= '0') && (*(dash - n) <= '9') &&
+ checkword(dash - n, info, root)) return 1;
+ }
+ }
+ }
+ }
+ return 0;
+}
+
+//int Hunspell::spell(const char * word) {
+// return spell(word, NULL, NULL);
+//}
+
+struct hentry * Hunspell::checkword(const char * w, int * info, char ** root)
+{
+ struct hentry * he = NULL;
+ int len;
+ char w2[MAXWORDUTF8LEN];
+ const char * word;
+
+ char * ignoredchars = pAMgr->get_ignore();
+ if (ignoredchars != NULL) {
+ strcpy(w2, w);
+ if (utf8) {
+ int ignoredchars_utf16_len;
+ unsigned short * ignoredchars_utf16 = pAMgr->get_ignore_utf16(&ignoredchars_utf16_len);
+ remove_ignored_chars_utf(w2, ignoredchars_utf16, ignoredchars_utf16_len);
+ } else {
+ remove_ignored_chars(w2,ignoredchars);
+ }
+ word = w2;
+ } else word = w;
+
+ // word reversing wrapper for complex prefixes
+ if (complexprefixes) {
+ if (word != w2) {
+ strcpy(w2, word);
+ word = w2;
+ }
+ if (utf8) reverseword_utf(w2); else reverseword(w2);
+ }
+
+ // look word in hash table
+ if (pHMgr) he = pHMgr->lookup(word);
+
+ // check forbidden and onlyincompound words
+ if ((he) && (he->astr) && (pAMgr) && TESTAFF(he->astr, pAMgr->get_forbiddenword(), he->alen)) {
+ info += SPELL_FORBIDDEN;
+ // LANG_hu section: set dash information for suggestions
+ if (langnum == LANG_hu) {
+ if (pAMgr->get_compoundflag() &&
+ TESTAFF(he->astr, pAMgr->get_compoundflag(), he->alen)) {
+ info += SPELL_COMPOUND;
+ }
+ }
+ return NULL;
+ }
+
+ // he = next not pseudoroot and not onlyincompound homonym or NULL
+ while (he && (he->astr) &&
+ ((pAMgr->get_pseudoroot() && TESTAFF(he->astr, pAMgr->get_pseudoroot(), he->alen)) ||
+ (pAMgr->get_onlyincompound() && TESTAFF(he->astr, pAMgr->get_onlyincompound(), he->alen))
+ )) he = he->next_homonym;
+
+ // check with affixes
+ if (!he && pAMgr) {
+ // try stripping off affixes */
+ len = strlen(word);
+ he = pAMgr->affix_check(word, len, 0);
+
+ // check compound restriction
+ if (he && he->astr && pAMgr->get_onlyincompound() &&
+ TESTAFF(he->astr, pAMgr->get_onlyincompound(), he->alen)) he = NULL;
+
+ if (he) {
+ if ((he->astr) && (pAMgr) && TESTAFF(he->astr, pAMgr->get_forbiddenword(), he->alen)) {
+ info += SPELL_FORBIDDEN;
+ return NULL;
+ }
+ if (root) {
+ *root = mystrdup(he->word);
+ if (complexprefixes) {
+ if (utf8) reverseword_utf(*root); else reverseword(*root);
+ }
+ }
+ // try check compound word
+ } else if (pAMgr->get_compound()) {
+ he = pAMgr->compound_check(word, len,
+ 0,0,100,0,NULL,0,NULL,NULL,0);
+ // LANG_hu section: `moving rule' with last dash
+ if ((!he) && (langnum == LANG_hu) && (word[len-1]=='-')) {
+ char * dup = mystrdup(word);
+ dup[len-1] = '\0';
+ he = pAMgr->compound_check(dup, len-1,
+ -5,0,100,0,NULL,1,NULL,NULL,0);
+ free(dup);
+ }
+ // end of LANG speficic region
+ if (he) {
+ if (root) {
+ *root = mystrdup(he->word);
+ if (complexprefixes) {
+ if (utf8) reverseword_utf(*root); else reverseword(*root);
+ }
+ }
+ if (info) *info += SPELL_COMPOUND;
+ }
+ }
+
+ }
+
+ return he;
+}
+
+int Hunspell::suggest(char*** slst, const char * word)
+{
+#ifdef HUNSPELL_CHROME_CLIENT
+ if (pHMgr) pHMgr->EmptyHentryCache();
+#endif
+ char cw[MAXWORDUTF8LEN + 4];
+ char wspace[MAXWORDUTF8LEN + 4];
+ if (! pSMgr) return 0;
+ w_char unicw[MAXWORDLEN + 1];
+ int nc = strlen(word);
+ if (utf8) {
+ if (nc >= MAXWORDUTF8LEN) return 0;
+ } else {
+ if (nc >= MAXWORDLEN) return 0;
+ }
+ int captype = 0;
+ int abbv = 0;
+ int wl = cleanword2(cw, word, unicw, &nc, &captype, &abbv);
+ if (wl == 0) return 0;
+ int ns = 0;
+ *slst = NULL;
+ int capwords = 0;
+ int ngramsugs = 0;
+
+ switch(captype) {
+ case NOCAP: {
+ ns = pSMgr->suggest(slst, cw, ns);
+ break;
+ }
+
+ case INITCAP: {
+ capwords = 1;
+ ns = pSMgr->suggest(slst, cw, ns);
+ if (ns == -1) break;
+ memcpy(wspace,cw,(wl+1));
+ mkallsmall2(wspace, unicw, nc);
+ ns = pSMgr->suggest(slst, wspace, ns);
+ break;
+ }
+ case HUHINITCAP:
+ capwords = 1;
+ case HUHCAP: {
+ ns = pSMgr->suggest(slst, cw, ns);
+ if (ns != -1) {
+ int prevns;
+ if (captype == HUHINITCAP) {
+ // TheOpenOffice.org -> The OpenOffice.org
+ memcpy(wspace,cw,(wl+1));
+ mkinitsmall2(wspace, unicw, nc);
+ ns = pSMgr->suggest(slst, wspace, ns);
+ }
+ memcpy(wspace,cw,(wl+1));
+ mkallsmall2(wspace, unicw, nc);
+ insert_sug(slst, wspace, &ns);
+ prevns = ns;
+ ns = pSMgr->suggest(slst, wspace, ns);
+ if (captype == HUHINITCAP) {
+ mkinitcap2(wspace, unicw, nc);
+ insert_sug(slst, wspace, &ns);
+ ns = pSMgr->suggest(slst, wspace, ns);
+ }
+ // aNew -> "a New" (instead of "a new")
+ for (int j = prevns; j < ns; j++) {
+ char * space = strchr((*slst)[j],' ');
+ if (space) {
+ int slen = strlen(space + 1);
+ // different case after space (need capitalisation)
+ if ((slen < wl) && strcmp(cw + wl - slen, space + 1)) {
+ w_char w[MAXWORDLEN + 1];
+ int wc = 0;
+ char * r = (*slst)[j];
+ if (utf8) wc = u8_u16(w, MAXWORDLEN, space + 1);
+ mkinitcap2(space + 1, w, wc);
+ // set as first suggestion
+ for (int k = j; k > 0; k--) (*slst)[k] = (*slst)[k - 1];
+ (*slst)[0] = r;
+ }
+ }
+ }
+ }
+ break;
+ }
+
+ case ALLCAP: {
+ memcpy(wspace, cw, (wl+1));
+ mkallsmall2(wspace, unicw, nc);
+ ns = pSMgr->suggest(slst, wspace, ns);
+ if (ns == -1) break;
+ if (pAMgr && pAMgr->get_keepcase()) insert_sug(slst, wspace, &ns);
+ mkinitcap2(wspace, unicw, nc);
+ ns = pSMgr->suggest(slst, wspace, ns);
+ for (int j=0; j < ns; j++) {
+ mkallcap((*slst)[j]);
+ if (pAMgr && pAMgr->get_checksharps()) {
+ char * pos;
+ if (utf8) {
+ pos = strstr((*slst)[j], "\xc3\x9f");
+ while (pos) {
+ *pos = 'S';
+ *(pos+1) = 'S';
+ pos = strstr(pos+2, "\xc3\x9f");
+ }
+ } else {
+ pos = strchr((*slst)[j], '\xdf');
+ while (pos) {
+ (*slst)[j] = (char *) realloc((*slst)[j], strlen((*slst)[j]) + 2);
+ mystrrep((*slst)[j], "\xdf", "SS");
+ pos = strchr((*slst)[j], '\xdf');
+ }
+ }
+ }
+ }
+ break;
+ }
+ }
+
+ // LANG_hu section: replace '-' with ' ' in Hungarian
+ if (langnum == LANG_hu) {
+ for (int j=0; j < ns; j++) {
+ char * pos = strchr((*slst)[j],'-');
+ if (pos) {
+ int info;
+ char w[MAXWORDUTF8LEN];
+ *pos = '\0';
+ strcpy(w, (*slst)[j]);
+ strcat(w, pos + 1);
+ spell(w, &info, NULL);
+ if ((info & SPELL_COMPOUND) && (info & SPELL_FORBIDDEN)) {
+ *pos = ' ';
+ } else *pos = '-';
+ }
+ }
+ }
+ // END OF LANG_hu section
+
+ // try ngram approach since found nothing
+ if ((ns == 0) && pAMgr && (pAMgr->get_maxngramsugs() != 0)) {
+ ngramsugs = 1;
+ switch(captype) {
+ case NOCAP: {
+ ns = pSMgr->ngsuggest(*slst, cw, pHMgr);
+ break;
+ }
+ case HUHCAP: {
+ memcpy(wspace,cw,(wl+1));
+ mkallsmall2(wspace, unicw, nc);
+ ns = pSMgr->ngsuggest(*slst, wspace, pHMgr);
+ break;
+ }
+ case INITCAP: {
+ capwords = 1;
+ memcpy(wspace,cw,(wl+1));
+ mkallsmall2(wspace, unicw, nc);
+ ns = pSMgr->ngsuggest(*slst, wspace, pHMgr);
+ break;
+ }
+ case ALLCAP: {
+ memcpy(wspace,cw,(wl+1));
+ mkallsmall2(wspace, unicw, nc);
+ ns = pSMgr->ngsuggest(*slst, wspace, pHMgr);
+ for (int j=0; j < ns; j++)
+ mkallcap((*slst)[j]);
+ break;
+ }
+ }
+ }
+
+ // word reversing wrapper for complex prefixes
+ if (complexprefixes) {
+ for (int j = 0; j < ns; j++) {
+ if (utf8) reverseword_utf((*slst)[j]); else reverseword((*slst)[j]);
+ }
+ }
+
+ // capitalize
+ if (capwords) for (int j=0; j < ns; j++) {
+ mkinitcap((*slst)[j]);
+ }
+
+ // expand suggestions with dot(s)
+ if (abbv && pAMgr && pAMgr->get_sugswithdots()) {
+ for (int j = 0; j < ns; j++) {
+ (*slst)[j] = (char *) realloc((*slst)[j], strlen((*slst)[j]) + 1 + abbv);
+ strcat((*slst)[j], word + strlen(word) - abbv);
+ }
+ }
+
+ // suggest keepcase
+ if (pAMgr->get_keepcase()) {
+ switch (captype) {
+ case INITCAP:
+ case ALLCAP: {
+ int l = 0;
+ for (int j=0; j < ns; j++) {
+ if (!spell((*slst)[j])) {
+ char s[MAXSWUTF8L];
+ w_char w[MAXSWL];
+ int len;
+ if (utf8) {
+ len = u8_u16(w, MAXSWL, (*slst)[j]);
+ } else {
+ strcpy(s, (*slst)[j]);
+ len = strlen(s);
+ }
+ mkallsmall2(s, w, len);
+ free((*slst)[j]);
+ if (spell(s)) {
+ (*slst)[l] = mystrdup(s);
+ l++;
+ } else {
+ mkinitcap2(s, w, len);
+ if (spell(s)) {
+ (*slst)[l] = mystrdup(s);
+ l++;
+ }
+ }
+ } else {
+ (*slst)[l] = (*slst)[j];
+ l++;
+ }
+ }
+ ns = l;
+ }
+ }
+ }
+
+ // remove duplications
+ int l = 0;
+ for (int j = 0; j < ns; j++) {
+ (*slst)[l] = (*slst)[j];
+ for (int k = 0; k < l; k++) {
+ if (strcmp((*slst)[k], (*slst)[j]) == 0) {
+ free((*slst)[j]);
+ l--;
+ }
+ }
+ l++;
+ }
+ return l;
+}
+
+char * Hunspell::get_dic_encoding()
+{
+ return encoding;
+}
+
+#ifdef HUNSPELL_EXPERIMENTAL
+// XXX need UTF-8 support
+int Hunspell::suggest_auto(char*** slst, const char * word)
+{
+ char cw[MAXWORDUTF8LEN + 4];
+ char wspace[MAXWORDUTF8LEN + 4];
+ if (! pSMgr) return 0;
+ int wl = strlen(word);
+ if (utf8) {
+ if (wl >= MAXWORDUTF8LEN) return 0;
+ } else {
+ if (wl >= MAXWORDLEN) return 0;
+ }
+ int captype = 0;
+ int abbv = 0;
+ wl = cleanword(cw, word, &captype, &abbv);
+ if (wl == 0) return 0;
+ int ns = 0;
+ *slst = NULL; // HU, nsug in pSMgr->suggest
+
+ switch(captype) {
+ case NOCAP: {
+ ns = pSMgr->suggest_auto(slst, cw, ns);
+ if (ns>0) break;
+ break;
+ }
+
+ case INITCAP: {
+ memcpy(wspace,cw,(wl+1));
+ mkallsmall(wspace);
+ ns = pSMgr->suggest_auto(slst, wspace, ns);
+ for (int j=0; j < ns; j++)
+ mkinitcap((*slst)[j]);
+ ns = pSMgr->suggest_auto(slst, cw, ns);
+ break;
+
+ }
+
+ case HUHCAP: {
+ ns = pSMgr->suggest_auto(slst, cw, ns);
+ if (ns == 0) {
+ memcpy(wspace,cw,(wl+1));
+ mkallsmall(wspace);
+ ns = pSMgr->suggest_auto(slst, wspace, ns);
+ }
+ break;
+ }
+
+ case ALLCAP: {
+ memcpy(wspace,cw,(wl+1));
+ mkallsmall(wspace);
+ ns = pSMgr->suggest_auto(slst, wspace, ns);
+
+ mkinitcap(wspace);
+ ns = pSMgr->suggest_auto(slst, wspace, ns);
+
+ for (int j=0; j < ns; j++)
+ mkallcap((*slst)[j]);
+ break;
+ }
+ }
+
+ // word reversing wrapper for complex prefixes
+ if (complexprefixes) {
+ for (int j = 0; j < ns; j++) {
+ if (utf8) reverseword_utf((*slst)[j]); else reverseword((*slst)[j]);
+ }
+ }
+
+ // expand suggestions with dot(s)
+ if (abbv && pAMgr && pAMgr->get_sugswithdots()) {
+ for (int j = 0; j < ns; j++) {
+ (*slst)[j] = (char *) realloc((*slst)[j], strlen((*slst)[j]) + 1 + abbv);
+ strcat((*slst)[j], word + strlen(word) - abbv);
+ }
+ }
+
+ // LANG_hu section: replace '-' with ' ' in Hungarian
+ if (langnum == LANG_hu) {
+ for (int j=0; j < ns; j++) {
+ char * pos = strchr((*slst)[j],'-');
+ if (pos) {
+ int info;
+ char w[MAXWORDUTF8LEN];
+ *pos = '\0';
+ strcpy(w, (*slst)[j]);
+ strcat(w, pos + 1);
+ spell(w, &info, NULL);
+ if ((info & SPELL_COMPOUND) && (info & SPELL_FORBIDDEN)) {
+ *pos = ' ';
+ } else *pos = '-';
+ }
+ }
+ }
+ // END OF LANG_hu section
+ return ns;
+}
+
+// XXX need UTF-8 support
+int Hunspell::stem(char*** slst, const char * word)
+{
+ char cw[MAXWORDUTF8LEN + 4];
+ char wspace[MAXWORDUTF8LEN + 4];
+ if (! pSMgr) return 0;
+ int wl = strlen(word);
+ if (utf8) {
+ if (wl >= MAXWORDUTF8LEN) return 0;
+ } else {
+ if (wl >= MAXWORDLEN) return 0;
+ }
+ int captype = 0;
+ int abbv = 0;
+ wl = cleanword(cw, word, &captype, &abbv);
+ if (wl == 0) return 0;
+
+ int ns = 0;
+
+ *slst = NULL; // HU, nsug in pSMgr->suggest
+
+ switch(captype) {
+ case HUHCAP:
+ case NOCAP: {
+ ns = pSMgr->suggest_stems(slst, cw, ns);
+
+ if ((abbv) && (ns == 0)) {
+ memcpy(wspace,cw,wl);
+ *(wspace+wl) = '.';
+ *(wspace+wl+1) = '\0';
+ ns = pSMgr->suggest_stems(slst, wspace, ns);
+ }
+
+ break;
+ }
+
+ case INITCAP: {
+
+ ns = pSMgr->suggest_stems(slst, cw, ns);
+
+ if (ns == 0) {
+ memcpy(wspace,cw,(wl+1));
+ mkallsmall(wspace);
+ ns = pSMgr->suggest_stems(slst, wspace, ns);
+
+ }
+
+ if ((abbv) && (ns == 0)) {
+ memcpy(wspace,cw,wl);
+ mkallsmall(wspace);
+ *(wspace+wl) = '.';
+ *(wspace+wl+1) = '\0';
+ ns = pSMgr->suggest_stems(slst, wspace, ns);
+ }
+
+ break;
+
+ }
+
+ case ALLCAP: {
+ ns = pSMgr->suggest_stems(slst, cw, ns);
+ if (ns != 0) break;
+
+ memcpy(wspace,cw,(wl+1));
+ mkallsmall(wspace);
+ ns = pSMgr->suggest_stems(slst, wspace, ns);
+
+ if (ns == 0) {
+ mkinitcap(wspace);
+ ns = pSMgr->suggest_stems(slst, wspace, ns);
+ }
+
+ if ((abbv) && (ns == 0)) {
+ memcpy(wspace,cw,wl);
+ mkallsmall(wspace);
+ *(wspace+wl) = '.';
+ *(wspace+wl+1) = '\0';
+ ns = pSMgr->suggest_stems(slst, wspace, ns);
+ }
+
+
+ break;
+ }
+ }
+
+ return ns;
+}
+
+int Hunspell::suggest_pos_stems(char*** slst, const char * word)
+{
+ char cw[MAXWORDUTF8LEN + 4];
+ char wspace[MAXWORDUTF8LEN + 4];
+ if (! pSMgr) return 0;
+ int wl = strlen(word);
+ if (utf8) {
+ if (wl >= MAXWORDUTF8LEN) return 0;
+ } else {
+ if (wl >= MAXWORDLEN) return 0;
+ }
+ int captype = 0;
+ int abbv = 0;
+ wl = cleanword(cw, word, &captype, &abbv);
+ if (wl == 0) return 0;
+
+ int ns = 0; // ns=0 = normalized input
+
+ *slst = NULL; // HU, nsug in pSMgr->suggest
+
+ switch(captype) {
+ case HUHCAP:
+ case NOCAP: {
+ ns = pSMgr->suggest_pos_stems(slst, cw, ns);
+
+ if ((abbv) && (ns == 0)) {
+ memcpy(wspace,cw,wl);
+ *(wspace+wl) = '.';
+ *(wspace+wl+1) = '\0';
+ ns = pSMgr->suggest_pos_stems(slst, wspace, ns);
+ }
+
+ break;
+ }
+
+ case INITCAP: {
+
+ ns = pSMgr->suggest_pos_stems(slst, cw, ns);
+
+ if (ns == 0 || ((*slst)[0][0] == '#')) {
+ memcpy(wspace,cw,(wl+1));
+ mkallsmall(wspace);
+ ns = pSMgr->suggest_pos_stems(slst, wspace, ns);
+ }
+
+ break;
+
+ }
+
+ case ALLCAP: {
+ ns = pSMgr->suggest_pos_stems(slst, cw, ns);
+ if (ns != 0) break;
+
+ memcpy(wspace,cw,(wl+1));
+ mkallsmall(wspace);
+ ns = pSMgr->suggest_pos_stems(slst, wspace, ns);
+
+ if (ns == 0) {
+ mkinitcap(wspace);
+ ns = pSMgr->suggest_pos_stems(slst, wspace, ns);
+ }
+ break;
+ }
+ }
+
+ return ns;
+}
+#endif // END OF HUNSPELL_EXPERIMENTAL CODE
+
+const char * Hunspell::get_wordchars()
+{
+ return pAMgr->get_wordchars();
+}
+
+unsigned short * Hunspell::get_wordchars_utf16(int * len)
+{
+ return pAMgr->get_wordchars_utf16(len);
+}
+
+void Hunspell::mkinitcap(char * p)
+{
+ if (!utf8) {
+ if (*p != '\0') *p = csconv[((unsigned char)*p)].cupper;
+ } else {
+ int len;
+ w_char u[MAXWORDLEN];
+ len = u8_u16(u, MAXWORDLEN, p);
+ unsigned short i = unicodetoupper((u[0].h << 8) + u[0].l, langnum);
+ u[0].h = (unsigned char) (i >> 8);
+ u[0].l = (unsigned char) (i & 0x00FF);
+ u16_u8(p, MAXWORDUTF8LEN, u, len);
+ }
+}
+
+int Hunspell::mkinitcap2(char * p, w_char * u, int nc)
+{
+ if (!utf8) {
+ if (*p != '\0') *p = csconv[((unsigned char)*p)].cupper;
+ } else if (nc > 0) {
+ unsigned short i = unicodetoupper((u[0].h << 8) + u[0].l, langnum);
+ u[0].h = (unsigned char) (i >> 8);
+ u[0].l = (unsigned char) (i & 0x00FF);
+ u16_u8(p, MAXWORDUTF8LEN, u, nc);
+ return strlen(p);
+ }
+ return nc;
+}
+
+int Hunspell::mkinitsmall2(char * p, w_char * u, int nc)
+{
+ if (!utf8) {
+ if (*p != '\0') *p = csconv[((unsigned char)*p)].clower;
+ } else if (nc > 0) {
+ unsigned short i = unicodetolower((u[0].h << 8) + u[0].l, langnum);
+ u[0].h = (unsigned char) (i >> 8);
+ u[0].l = (unsigned char) (i & 0x00FF);
+ u16_u8(p, MAXWORDUTF8LEN, u, nc);
+ return strlen(p);
+ }
+ return nc;
+}
+
+int Hunspell::put_word(const char * word)
+{
+ if (pHMgr) {
+ return pHMgr->put_word(word, strlen(word), NULL);
+ }
+ return 0;
+}
+
+int Hunspell::put_word_pattern(const char * word, const char * pattern)
+{
+ if (pHMgr) {
+ return pHMgr->put_word_pattern(word, strlen(word), pattern);
+ }
+ return 0;
+}
+
+const char * Hunspell::get_version()
+{
+ return pAMgr->get_version();
+}
+
+struct cs_info * Hunspell::get_csconv()
+{
+ return csconv;
+}
+
+#ifdef HUNSPELL_EXPERIMENTAL
+// XXX need UTF-8 support
+char * Hunspell::morph(const char * word)
+{
+ char cw[MAXWORDUTF8LEN + 4];
+ char wspace[MAXWORDUTF8LEN + 4];
+ if (! pSMgr) return 0;
+ int wl = strlen(word);
+ if (utf8) {
+ if (wl >= MAXWORDUTF8LEN) return 0;
+ } else {
+ if (wl >= MAXWORDLEN) return 0;
+ }
+ int captype = 0;
+ int abbv = 0;
+ wl = cleanword(cw, word, &captype, &abbv);
+ if (wl == 0) {
+ if (abbv) {
+ for (wl = 0; wl < abbv; wl++) cw[wl] = '.';
+ cw[wl] = '\0';
+ abbv = 0;
+ } else return 0;
+ }
+
+ char result[MAXLNLEN];
+ char * st = NULL;
+
+ *result = '\0';
+
+ int n = 0;
+ int n2 = 0;
+ int n3 = 0;
+
+ // test numbers
+ // LANG_hu section: set dash information for suggestions
+ if (langnum == LANG_hu) {
+ while ((n < wl) &&
+ (((cw[n] <= '9') && (cw[n] >= '0')) || (((cw[n] == '.') || (cw[n] == ',')) && (n > 0)))) {
+ n++;
+ if ((cw[n] == '.') || (cw[n] == ',')) {
+ if (((n2 == 0) && (n > 3)) ||
+ ((n2 > 0) && ((cw[n-1] == '.') || (cw[n-1] == ',')))) break;
+ n2++;
+ n3 = n;
+ }
+ }
+
+ if ((n == wl) && (n3 > 0) && (n - n3 > 3)) return NULL;
+ if ((n == wl) || ((n>0) && ((cw[n]=='%') || (cw[n]=='\xb0')) && checkword(cw+n, NULL, NULL))) {
+ strcat(result, cw);
+ result[n - 1] = '\0';
+ if (n == wl) {
+ st = pSMgr->suggest_morph(cw + n - 1);
+ if (st) {
+ strcat(result, st);
+ free(st);
+ }
+ } else {
+ char sign = cw[n];
+ cw[n] = '\0';
+ st = pSMgr->suggest_morph(cw + n - 1);
+ if (st) {
+ strcat(result, st);
+ free(st);
+ }
+ strcat(result, "+"); // XXX SPEC. MORPHCODE
+ cw[n] = sign;
+ st = pSMgr->suggest_morph(cw + n);
+ if (st) {
+ strcat(result, st);
+ free(st);
+ }
+ }
+ return mystrdup(result);
+ }
+ }
+ // END OF LANG_hu section
+
+ switch(captype) {
+ case NOCAP: {
+ st = pSMgr->suggest_morph(cw);
+ if (st) {
+ strcat(result, st);
+ free(st);
+ }
+ if (abbv) {
+ memcpy(wspace,cw,wl);
+ *(wspace+wl) = '.';
+ *(wspace+wl+1) = '\0';
+ st = pSMgr->suggest_morph(wspace);
+ if (st) {
+ if (*result) strcat(result, "\n");
+ strcat(result, st);
+ free(st);
+ }
+ }
+ break;
+ }
+ case INITCAP: {
+ memcpy(wspace,cw,(wl+1));
+ mkallsmall(wspace);
+ st = pSMgr->suggest_morph(wspace);
+ if (st) {
+ strcat(result, st);
+ free(st);
+ }
+ st = pSMgr->suggest_morph(cw);
+ if (st) {
+ if (*result) strcat(result, "\n");
+ strcat(result, st);
+ free(st);
+ }
+ if (abbv) {
+ memcpy(wspace,cw,wl);
+ *(wspace+wl) = '.';
+ *(wspace+wl+1) = '\0';
+ mkallsmall(wspace);
+ st = pSMgr->suggest_morph(wspace);
+ if (st) {
+ if (*result) strcat(result, "\n");
+ strcat(result, st);
+ free(st);
+ }
+ mkinitcap(wspace);
+ st = pSMgr->suggest_morph(wspace);
+ if (st) {
+ if (*result) strcat(result, "\n");
+ strcat(result, st);
+ free(st);
+ }
+ }
+ break;
+ }
+ case HUHCAP: {
+ st = pSMgr->suggest_morph(cw);
+ if (st) {
+ strcat(result, st);
+ free(st);
+ }
+#if 0
+ memcpy(wspace,cw,(wl+1));
+ mkallsmall(wspace);
+ st = pSMgr->suggest_morph(wspace);
+ if (st) {
+ if (*result) strcat(result, "\n");
+ strcat(result, st);
+ free(st);
+ }
+#endif
+ break;
+ }
+ case ALLCAP: {
+ memcpy(wspace,cw,(wl+1));
+ st = pSMgr->suggest_morph(wspace);
+ if (st) {
+ strcat(result, st);
+ free(st);
+ }
+ mkallsmall(wspace);
+ st = pSMgr->suggest_morph(wspace);
+ if (st) {
+ if (*result) strcat(result, "\n");
+ strcat(result, st);
+ free(st);
+ }
+ mkinitcap(wspace);
+ st = pSMgr->suggest_morph(wspace);
+ if (st) {
+ if (*result) strcat(result, "\n");
+ strcat(result, st);
+ free(st);
+ }
+ if (abbv) {
+ memcpy(wspace,cw,(wl+1));
+ *(wspace+wl) = '.';
+ *(wspace+wl+1) = '\0';
+ if (*result) strcat(result, "\n");
+ st = pSMgr->suggest_morph(wspace);
+ if (st) {
+ strcat(result, st);
+ free(st);
+ }
+ mkallsmall(wspace);
+ st = pSMgr->suggest_morph(wspace);
+ if (st) {
+ if (*result) strcat(result, "\n");
+ strcat(result, st);
+ free(st);
+ }
+ mkinitcap(wspace);
+ st = pSMgr->suggest_morph(wspace);
+ if (st) {
+ if (*result) strcat(result, "\n");
+ strcat(result, st);
+ free(st);
+ }
+ }
+ break;
+ }
+ }
+
+ if (result && (*result)) {
+ // word reversing wrapper for complex prefixes
+ if (complexprefixes) {
+ if (utf8) reverseword_utf(result); else reverseword(result);
+ }
+ return mystrdup(result);
+ }
+
+ // compound word with dash (HU) I18n
+ char * dash = NULL;
+ int nresult = 0;
+ // LANG_hu section: set dash information for suggestions
+ if (langnum == LANG_hu) dash = (char *) strchr(cw,'-');
+ if ((langnum == LANG_hu) && dash) {
+ *dash='\0';
+ // examine 2 sides of the dash
+ if (dash[1] == '\0') { // base word ending with dash
+ if (spell(cw)) return pSMgr->suggest_morph(cw);
+ } else if ((dash[1] == 'e') && (dash[2] == '\0')) { // XXX (HU) -e hat.
+ if (spell(cw) && (spell("-e"))) {
+ st = pSMgr->suggest_morph(cw);
+ if (st) {
+ strcat(result, st);
+ free(st);
+ }
+ strcat(result,"+"); // XXX spec. separator in MORPHCODE
+ st = pSMgr->suggest_morph("-e");
+ if (st) {
+ strcat(result, st);
+ free(st);
+ }
+ return mystrdup(result);
+ }
+ } else {
+ // first word ending with dash: word- XXX ???
+ char r2 = *(dash + 1);
+ dash[0]='-';
+ dash[1]='\0';
+ nresult = spell(cw);
+ dash[1] = r2;
+ dash[0]='\0';
+ if (nresult && spell(dash+1) && ((strlen(dash+1) > 1) ||
+ ((dash[1] > '0') && (dash[1] < '9')))) {
+ st = morph(cw);
+ if (st) {
+ strcat(result, st);
+ free(st);
+ strcat(result,"+"); // XXX spec. separator in MORPHCODE
+ }
+ st = morph(dash+1);
+ if (st) {
+ strcat(result, st);
+ free(st);
+ }
+ return mystrdup(result);
+ }
+ }
+ // affixed number in correct word
+ if (nresult && (dash > cw) && (((*(dash-1)<='9') &&
+ (*(dash-1)>='0')) || (*(dash-1)=='.'))) {
+ *dash='-';
+ n = 1;
+ if (*(dash - n) == '.') n++;
+ // search first not a number character to left from dash
+ while (((dash - n)>=cw) && ((*(dash - n)=='0') || (n < 3)) && (n < 6)) {
+ n++;
+ }
+ if ((dash - n) < cw) n--;
+ // numbers: valami1000000-hoz
+ // examine 100000-hoz, 10000-hoz 1000-hoz, 10-hoz,
+ // 56-hoz, 6-hoz
+ for(; n >= 1; n--) {
+ if ((*(dash - n) >= '0') && (*(dash - n) <= '9') && checkword(dash - n, NULL, NULL)) {
+ strcat(result, cw);
+ result[dash - cw - n] = '\0';
+ st = pSMgr->suggest_morph(dash - n);
+ if (st) {
+ strcat(result, st);
+ free(st);
+ }
+ return mystrdup(result);
+ }
+ }
+ }
+ }
+ return NULL;
+}
+
+// XXX need UTF-8 support
+char * Hunspell::morph_with_correction(const char * word)
+{
+ char cw[MAXWORDUTF8LEN + 4];
+ char wspace[MAXWORDUTF8LEN + 4];
+ if (! pSMgr) return 0;
+ int wl = strlen(word);
+ if (utf8) {
+ if (wl >= MAXWORDUTF8LEN) return 0;
+ } else {
+ if (wl >= MAXWORDLEN) return 0;
+ }
+ int captype = 0;
+ int abbv = 0;
+ wl = cleanword(cw, word, &captype, &abbv);
+ if (wl == 0) return 0;
+
+ char result[MAXLNLEN];
+ char * st = NULL;
+
+ *result = '\0';
+
+
+ switch(captype) {
+ case NOCAP: {
+ st = pSMgr->suggest_morph_for_spelling_error(cw);
+ if (st) {
+ strcat(result, st);
+ free(st);
+ }
+ if (abbv) {
+ memcpy(wspace,cw,wl);
+ *(wspace+wl) = '.';
+ *(wspace+wl+1) = '\0';
+ st = pSMgr->suggest_morph_for_spelling_error(wspace);
+ if (st) {
+ if (*result) strcat(result, "\n");
+ strcat(result, st);
+ free(st);
+ }
+ }
+ break;
+ }
+ case INITCAP: {
+ memcpy(wspace,cw,(wl+1));
+ mkallsmall(wspace);
+ st = pSMgr->suggest_morph_for_spelling_error(wspace);
+ if (st) {
+ strcat(result, st);
+ free(st);
+ }
+ st = pSMgr->suggest_morph_for_spelling_error(cw);
+ if (st) {
+ if (*result) strcat(result, "\n");
+ strcat(result, st);
+ free(st);
+ }
+ if (abbv) {
+ memcpy(wspace,cw,wl);
+ *(wspace+wl) = '.';
+ *(wspace+wl+1) = '\0';
+ mkallsmall(wspace);
+ st = pSMgr->suggest_morph_for_spelling_error(wspace);
+ if (st) {
+ if (*result) strcat(result, "\n");
+ strcat(result, st);
+ free(st);
+ }
+ mkinitcap(wspace);
+ st = pSMgr->suggest_morph_for_spelling_error(wspace);
+ if (st) {
+ if (*result) strcat(result, "\n");
+ strcat(result, st);
+ free(st);
+ }
+ }
+ break;
+ }
+ case HUHCAP: {
+ st = pSMgr->suggest_morph_for_spelling_error(cw);
+ if (st) {
+ strcat(result, st);
+ free(st);
+ }
+ memcpy(wspace,cw,(wl+1));
+ mkallsmall(wspace);
+ st = pSMgr->suggest_morph_for_spelling_error(wspace);
+ if (st) {
+ if (*result) strcat(result, "\n");
+ strcat(result, st);
+ free(st);
+ }
+ break;
+ }
+ case ALLCAP: {
+ memcpy(wspace,cw,(wl+1));
+ st = pSMgr->suggest_morph_for_spelling_error(wspace);
+ if (st) {
+ strcat(result, st);
+ free(st);
+ }
+ mkallsmall(wspace);
+ st = pSMgr->suggest_morph_for_spelling_error(wspace);
+ if (st) {
+ if (*result) strcat(result, "\n");
+ strcat(result, st);
+ free(st);
+ }
+ mkinitcap(wspace);
+ st = pSMgr->suggest_morph_for_spelling_error(wspace);
+ if (st) {
+ if (*result) strcat(result, "\n");
+ strcat(result, st);
+ free(st);
+ }
+ if (abbv) {
+ memcpy(wspace,cw,(wl+1));
+ *(wspace+wl) = '.';
+ *(wspace+wl+1) = '\0';
+ if (*result) strcat(result, "\n");
+ st = pSMgr->suggest_morph_for_spelling_error(wspace);
+ if (st) {
+ strcat(result, st);
+ free(st);
+ }
+ mkallsmall(wspace);
+ st = pSMgr->suggest_morph_for_spelling_error(wspace);
+ if (st) {
+ if (*result) strcat(result, "\n");
+ strcat(result, st);
+ free(st);
+ }
+ mkinitcap(wspace);
+ st = pSMgr->suggest_morph_for_spelling_error(wspace);
+ if (st) {
+ if (*result) strcat(result, "\n");
+ strcat(result, st);
+ free(st);
+ }
+ }
+ break;
+ }
+ }
+
+ if (result) return mystrdup(result);
+ return NULL;
+}
+
+/* analyze word
+ * return line count
+ * XXX need a better data structure for morphological analysis */
+int Hunspell::analyze(char ***out, const char *word) {
+ int n = 0;
+ if (!word) return 0;
+ char * m = morph(word);
+ if(!m) return 0;
+ if (!out) return line_tok(m, out);
+
+ // without memory allocation
+ /* BUG missing buffer size checking */
+ int i, p;
+ for(p = 0, i = 0; m[i]; i++) {
+ if(m[i] == '\n' || !m[i+1]) {
+ n++;
+ strncpy((*out)[n++], m + p, i - p + 1);
+ if (m[i] == '\n') (*out)[n++][i - p] = '\0';
+ if(!m[i+1]) break;
+ p = i + 1;
+ }
+ }
+ free(m);
+ return n;
+}
+
+#endif // END OF HUNSPELL_EXPERIMENTAL CODE
+
+Hunhandle *Hunspell_create(FILE* aff_handle, FILE* dic_handle)
+{
+#ifdef HUNSPELL_CHROME_CLIENT
+ return NULL;
+#else
+ return (Hunhandle*)(new Hunspell(aff_handle, dic_handle));
+#endif
+}
+
+void Hunspell_destroy(Hunhandle *pHunspell)
+{
+ delete (Hunspell*)(pHunspell);
+}
+
+int Hunspell_spell(Hunhandle *pHunspell, const char *word)
+{
+ return ((Hunspell*)pHunspell)->spell(word);
+}
+
+char *Hunspell_get_dic_encoding(Hunhandle *pHunspell)
+{
+ return ((Hunspell*)pHunspell)->get_dic_encoding();
+}
+
+int Hunspell_suggest(Hunhandle *pHunspell, char*** slst, const char * word)
+{
+ return ((Hunspell*)pHunspell)->suggest(slst, word);
+}
+
diff --git a/chrome/third_party/hunspell/src/hunspell/hunspell.dsp b/chrome/third_party/hunspell/src/hunspell/hunspell.dsp
new file mode 100644
index 0000000..05e072f
--- /dev/null
+++ b/chrome/third_party/hunspell/src/hunspell/hunspell.dsp
@@ -0,0 +1,164 @@
+# Microsoft Developer Studio Project File - Name="hunspell" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Static Library" 0x0104
+
+CFG=hunspell - Win32 Debug
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE
+!MESSAGE NMAKE /f "hunspell.mak".
+!MESSAGE
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "hunspell.mak" CFG="hunspell - Win32 Debug"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "hunspell - Win32 Release" (based on "Win32 (x86) Static Library")
+!MESSAGE "hunspell - Win32 Debug" (based on "Win32 (x86) Static Library")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "hunspell - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release"
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "W32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c
+# ADD CPP /nologo /W3 /GX /O2 /D "W32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c
+# ADD BASE RSC /l 0x40e /d "NDEBUG"
+# ADD RSC /l 0x40e /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo
+# ADD LIB32 /nologo
+
+!ELSEIF "$(CFG)" == "hunspell - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug"
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "W32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c
+# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "W32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c
+# ADD BASE RSC /l 0x40e /d "_DEBUG"
+# ADD RSC /l 0x40e /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo
+# ADD LIB32 /nologo
+
+!ENDIF
+
+# Begin Target
+
+# Name "hunspell - Win32 Release"
+# Name "hunspell - Win32 Debug"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE=.\affentry.cxx
+# End Source File
+# Begin Source File
+
+SOURCE=.\affixmgr.cxx
+# End Source File
+# Begin Source File
+
+SOURCE=.\csutil.cxx
+# End Source File
+# Begin Source File
+
+SOURCE=.\dictmgr.cxx
+# End Source File
+# Begin Source File
+
+SOURCE=.\hashmgr.cxx
+# End Source File
+# Begin Source File
+
+SOURCE=.\hunspell.cxx
+# End Source File
+# Begin Source File
+
+SOURCE=.\suggestmgr.cxx
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# Begin Source File
+
+SOURCE=.\affentry.hxx
+# End Source File
+# Begin Source File
+
+SOURCE=.\affixmgr.hxx
+# End Source File
+# Begin Source File
+
+SOURCE=.\atypes.hxx
+# End Source File
+# Begin Source File
+
+SOURCE=.\baseaffix.hxx
+# End Source File
+# Begin Source File
+
+SOURCE=.\csutil.hxx
+# End Source File
+# Begin Source File
+
+SOURCE=.\dictmgr.hxx
+# End Source File
+# Begin Source File
+
+SOURCE=.\hashmgr.hxx
+# End Source File
+# Begin Source File
+
+SOURCE=.\htypes.hxx
+# End Source File
+# Begin Source File
+
+SOURCE=.\langnum.hxx
+# End Source File
+# Begin Source File
+
+SOURCE=.\hunspell.hxx
+# End Source File
+# Begin Source File
+
+SOURCE=.\suggestmgr.hxx
+# End Source File
+# End Group
+# End Target
+# End Project
diff --git a/chrome/third_party/hunspell/src/hunspell/hunspell.h b/chrome/third_party/hunspell/src/hunspell/hunspell.h
new file mode 100644
index 0000000..b04b83a
--- /dev/null
+++ b/chrome/third_party/hunspell/src/hunspell/hunspell.h
@@ -0,0 +1,33 @@
+#ifndef _MYSPELLMGR_H_
+#define _MYSPELLMGR_H_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef struct Hunhandle Hunhandle;
+
+Hunhandle *Hunspell_create(const char * affpath, const char * dpath);
+void Hunspell_destroy(Hunhandle *pHunspell);
+
+/* spell(word) - spellcheck word
+ * output: 0 = bad word, not 0 = good word
+ */
+int Hunspell_spell(Hunhandle *pHunspell, const char *);
+
+char *Hunspell_get_dic_encoding(Hunhandle *pHunspell);
+
+/* suggest(suggestions, word) - search suggestions
+ * input: pointer to an array of strings pointer and the (bad) word
+ * array of strings pointer (here *slst) may not be initialized
+ * output: number of suggestions in string array, and suggestions in
+ * a newly allocated array of strings (*slts will be NULL when number
+ * of suggestion equals 0.)
+ */
+int Hunspell_suggest(Hunhandle *pHunspell, char*** slst, const char * word);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/chrome/third_party/hunspell/src/hunspell/hunspell.hxx b/chrome/third_party/hunspell/src/hunspell/hunspell.hxx
new file mode 100644
index 0000000..bc6f7d5
--- /dev/null
+++ b/chrome/third_party/hunspell/src/hunspell/hunspell.hxx
@@ -0,0 +1,154 @@
+#include "license.hunspell"
+#include "license.myspell"
+
+#include "hashmgr.hxx"
+#include "affixmgr.hxx"
+#include "suggestmgr.hxx"
+#include "csutil.hxx"
+#include "langnum.hxx"
+
+#define SPELL_COMPOUND (1 << 0)
+#define SPELL_FORBIDDEN (1 << 1)
+
+#define NOCAP 0
+#define INITCAP 1
+#define ALLCAP 2
+#define HUHCAP 3
+#define HUHINITCAP 4
+
+#define MAXSUGGESTION 15
+#define MAXSHARPS 5
+
+#if defined(W32) && defined(LIBRARY)
+#define DLLTEST2_API __declspec(dllexport)
+#else
+#define DLLTEST2_API
+#endif
+
+#ifndef _MYSPELLMGR_HXX_
+#define _MYSPELLMGR_HXX_
+
+#ifdef HUNSPELL_CHROME_CLIENT
+#include "chrome/third_party/hunspell/google/bdict_reader.h"
+#endif
+
+#ifdef W32
+class DLLTEST2_API Hunspell
+#else
+class Hunspell
+#endif
+{
+ AffixMgr* pAMgr;
+ HashMgr* pHMgr;
+ SuggestMgr* pSMgr;
+ char * encoding;
+ struct cs_info * csconv;
+ int langnum;
+ int utf8;
+ int complexprefixes;
+ char** wordbreak;
+
+#ifdef HUNSPELL_CHROME_CLIENT
+ // Not owned by us, owned by the Hunspell object.
+ hunspell::BDictReader* bdict_reader;
+#endif
+
+public:
+
+ /* Hunspell(aff, dic) - constructor of Hunspell class
+ * input: path of affix file and dictionary file
+ */
+#ifdef HUNSPELL_CHROME_CLIENT
+ Hunspell(const unsigned char* bdict_data, size_t bdict_length);
+#else
+ Hunspell(FILE* aff_handle, FILE* dic_handle);
+#endif
+
+ ~Hunspell();
+
+ /* spell(word) - spellcheck word
+ * output: 0 = bad word, not 0 = good word
+ *
+ * plus output:
+ * info: information bit array, fields:
+ * SPELL_COMPOUND = a compound word
+ * SPELL_FORBIDDEN = an explicit forbidden word
+ * root: root (stem), when input is a word with affix(es)
+ */
+
+ int spell(const char * word, int * info = NULL, char ** root = NULL);
+
+ /* suggest(suggestions, word) - search suggestions
+ * input: pointer to an array of strings pointer and the (bad) word
+ * array of strings pointer (here *slst) may not be initialized
+ * output: number of suggestions in string array, and suggestions in
+ * a newly allocated array of strings (*slts will be NULL when number
+ * of suggestion equals 0.)
+ */
+
+ int suggest(char*** slst, const char * word);
+ char * get_dic_encoding();
+
+ /* handling custom dictionary */
+
+ int put_word(const char * word);
+
+ /* pattern is a sample dictionary word
+ * put word into custom dictionary with affix flags of pattern word
+ */
+
+ int put_word_pattern(const char * word, const char * pattern);
+
+ /* other */
+
+ /* get extra word characters definied in affix file for tokenization */
+ const char * get_wordchars();
+ unsigned short * get_wordchars_utf16(int * len);
+
+ struct cs_info * get_csconv();
+ const char * get_version();
+
+ /* experimental functions */
+
+#ifdef HUNSPELL_EXPERIMENTAL
+ /* suffix is an affix flag string, similarly in dictionary files */
+
+ int put_word_suffix(const char * word, const char * suffix);
+
+ /* morphological analysis */
+
+ char * morph(const char * word);
+ int analyze(char*** out, const char *word);
+
+ char * morph_with_correction(const char * word);
+
+ /* stemmer function */
+
+ int stem(char*** slst, const char * word);
+
+ /* spec. suggestions */
+ int suggest_auto(char*** slst, const char * word);
+ int suggest_pos_stems(char*** slst, const char * word);
+ char * get_possible_root();
+#endif
+
+private:
+ int cleanword(char *, const char *, int * pcaptype, int * pabbrev);
+ int cleanword2(char *, const char *, w_char *, int * w_len, int * pcaptype, int * pabbrev);
+ void mkinitcap(char *);
+ int mkinitcap2(char * p, w_char * u, int nc);
+ int mkinitsmall2(char * p, w_char * u, int nc);
+ void mkallcap(char *);
+ int mkallcap2(char * p, w_char * u, int nc);
+ void mkallsmall(char *);
+ int mkallsmall2(char * p, w_char * u, int nc);
+ struct hentry * checkword(const char *, int * info, char **root);
+ char * sharps_u8_l1(char * dest, char * source);
+ hentry * spellsharps(char * base, char *, int, int, char * tmp, int * info, char **root);
+ int is_keepcase(const hentry * rv);
+ int insert_sug(char ***slst, char * word, int *ns);
+
+
+};
+
+#endif
diff --git a/chrome/third_party/hunspell/src/hunspell/langnum.hxx b/chrome/third_party/hunspell/src/hunspell/langnum.hxx
new file mode 100644
index 0000000..1d140a7
--- /dev/null
+++ b/chrome/third_party/hunspell/src/hunspell/langnum.hxx
@@ -0,0 +1,38 @@
+#ifndef _LANGNUM_HXX_
+#define _LANGNUM_HXX_
+
+/*
+ language numbers for language specific codes
+ see http://l10n.openoffice.org/languages.html
+*/
+
+enum {
+LANG_ar=96,
+LANG_az=100, // custom number
+LANG_bg=41,
+LANG_ca=37,
+LANG_cs=42,
+LANG_da=45,
+LANG_de=49,
+LANG_el=30,
+LANG_en=01,
+LANG_es=34,
+LANG_eu=10,
+LANG_fr=02,
+LANG_gl=38,
+LANG_hr=78,
+LANG_hu=36,
+LANG_it=39,
+LANG_la=99, // custom number
+LANG_lv=101, // custom number
+LANG_nl=31,
+LANG_pl=48,
+LANG_pt=03,
+LANG_ru=07,
+LANG_sv=50,
+LANG_tr=90,
+LANG_uk=80,
+LANG_xx=999
+};
+
+#endif
diff --git a/chrome/third_party/hunspell/src/hunspell/license.hunspell b/chrome/third_party/hunspell/src/hunspell/license.hunspell
new file mode 100644
index 0000000..f1cf161
--- /dev/null
+++ b/chrome/third_party/hunspell/src/hunspell/license.hunspell
@@ -0,0 +1,57 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Hunspell, based on MySpell.
+ *
+ * The Initial Developers of the Original Code are
+ * Kevin Hendricks (MySpell) and Németh László (Hunspell).
+ * Portions created by the Initial Developers are Copyright (C) 2002-2005
+ * the Initial Developers. All Rights Reserved.
+ *
+ * Contributor(s):
+ * David Einstein
+ * Davide Prina
+ * Giuseppe Modugno
+ * Gianluca Turconi
+ * Simon Brouwer
+ * Noll János
+ * Bíró Árpád
+ * Goldman Eleonóra
+ * Sarlós Tamás
+ * Bencsáth Boldizsár
+ * Halácsy Péter
+ * Dvornik László
+ * Gefferth András
+ * Nagy Viktor
+ * Varga Dániel
+ * Chris Halls
+ * Rene Engelhard
+ * Bram Moolenaar
+ * Dafydd Jones
+ * Harri Pitkänen
+ * András Tímár
+ * Tor Lillqvist
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
diff --git a/chrome/third_party/hunspell/src/hunspell/license.myspell b/chrome/third_party/hunspell/src/hunspell/license.myspell
new file mode 100644
index 0000000..2da5330
--- /dev/null
+++ b/chrome/third_party/hunspell/src/hunspell/license.myspell
@@ -0,0 +1,61 @@
+/*
+ * Copyright 2002 Kevin B. Hendricks, Stratford, Ontario, Canada
+ * And Contributors. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * 3. All modifications to the source code must be clearly marked as
+ * such. Binary redistributions based on modified source code
+ * must be clearly marked as modified versions in the documentation
+ * and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY KEVIN B. HENDRICKS AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
+ * KEVIN B. HENDRICKS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ *
+ * NOTE: A special thanks and credit goes to Geoff Kuenning
+ * the creator of ispell. MySpell's affix algorithms were
+ * based on those of ispell which should be noted is
+ * copyright Geoff Kuenning et.al. and now available
+ * under a BSD style license. For more information on ispell
+ * and affix compression in general, please see:
+ * http://www.cs.ucla.edu/ficus-members/geoff/ispell.html
+ * (the home page for ispell)
+ *
+ * An almost complete rewrite of MySpell for use by
+ * the Mozilla project has been developed by David Einstein
+ * (Deinst@world.std.com). David and I are now
+ * working on parallel development tracks to help
+ * our respective projects (Mozilla and OpenOffice.org
+ * and we will maintain full affix file and dictionary
+ * file compatibility and work on merging our versions
+ * of MySpell back into a single tree. David has been
+ * a significant help in improving MySpell.
+ *
+ * Special thanks also go to La'szlo' Ne'meth
+ * <nemethl@gyorsposta.hu> who is the author of the
+ * Hungarian dictionary and who developed and contributed
+ * the code to support compound words in MySpell
+ * and fixed numerous problems with the encoding
+ * case conversion tables.
+ *
+ */
diff --git a/chrome/third_party/hunspell/src/hunspell/suggestmgr.cxx b/chrome/third_party/hunspell/src/hunspell/suggestmgr.cxx
new file mode 100644
index 0000000..345f687
--- /dev/null
+++ b/chrome/third_party/hunspell/src/hunspell/suggestmgr.cxx
@@ -0,0 +1,1663 @@
+#include "license.hunspell"
+#include "license.myspell"
+
+#ifndef MOZILLA_CLIENT
+#include <cstdlib>
+#include <cstring>
+#include <cstdio>
+#include <cctype>
+#else
+#include <stdlib.h>
+#include <string.h>
+#include <stdio.h>
+#include <ctype.h>
+#endif
+
+#include "suggestmgr.hxx"
+
+#ifndef MOZILLA_CLIENT
+#ifndef W32
+using namespace std;
+#endif
+#endif
+
+
+SuggestMgr::SuggestMgr(const char * tryme, int maxn,
+ AffixMgr * aptr)
+{
+
+ // register affix manager and check in string of chars to
+ // try when building candidate suggestions
+ pAMgr = aptr;
+
+ ctryl = 0;
+ ctry = NULL;
+ ctry_utf = NULL;
+
+ maxSug = maxn;
+ nosplitsugs = 0;
+ maxngramsugs = MAXNGRAMSUGS;
+
+ utf8 = 0;
+ complexprefixes = 0;
+
+ if (pAMgr) {
+ char * enc = pAMgr->get_encoding();
+ csconv = get_current_cs(enc);
+ free(enc);
+ nosplitsugs = pAMgr->get_nosplitsugs();
+ if (pAMgr->get_maxngramsugs() >= 0) maxngramsugs = pAMgr->get_maxngramsugs();
+ utf8 = pAMgr->get_utf8();
+ complexprefixes = pAMgr->get_complexprefixes();
+ }
+
+ if (tryme) {
+ if (utf8) {
+ w_char t[MAXSWL];
+ ctryl = u8_u16(t, MAXSWL, tryme);
+ ctry_utf = (w_char *) malloc(ctryl * sizeof(w_char));
+ memcpy(ctry_utf, t, ctryl * sizeof(w_char));
+ } else {
+ ctry = mystrdup(tryme);
+ ctryl = strlen(ctry);
+ }
+ }
+}
+
+
+SuggestMgr::~SuggestMgr()
+{
+ pAMgr = NULL;
+ if (ctry) free(ctry);
+ ctry = NULL;
+ if (ctry_utf) free(ctry_utf);
+ ctry_utf = NULL;
+ ctryl = 0;
+ maxSug = 0;
+}
+
+int SuggestMgr::testsug(char** wlst, const char * candidate, int wl, int ns, int cpdsuggest,
+ int * timer, time_t * timelimit) {
+ int cwrd = 1;
+ if (ns == maxSug) return maxSug;
+ for (int k=0; k < ns; k++) {
+ if (strcmp(candidate,wlst[k]) == 0) cwrd = 0;
+ }
+ if ((cwrd) && checkword(candidate, wl, cpdsuggest, timer, timelimit)) {
+ wlst[ns] = mystrdup(candidate);
+ if (wlst[ns] == NULL) {
+ for (int j=0; j<ns; j++) free(wlst[j]);
+ return -1;
+ }
+ ns++;
+ }
+ return ns;
+}
+
+// generate suggestions for a mispelled word
+// pass in address of array of char * pointers
+
+int SuggestMgr::suggest(char*** slst, const char * w, int nsug)
+{
+ int nocompoundtwowords = 0;
+ char ** wlst;
+ w_char word_utf[MAXSWL];
+ int wl = 0;
+
+ char w2[MAXWORDUTF8LEN];
+ const char * word = w;
+
+ // word reversing wrapper for complex prefixes
+ if (complexprefixes) {
+ strcpy(w2, w);
+ if (utf8) reverseword_utf(w2); else reverseword(w2);
+ word = w2;
+ }
+
+ if (*slst) {
+ wlst = *slst;
+ } else {
+ wlst = (char **) malloc(maxSug * sizeof(char *));
+ if (wlst == NULL) return -1;
+ for (int i = 0; i < maxSug; i++) {
+ wlst[i] = NULL;
+ }
+ }
+
+ if (utf8) {
+ wl = u8_u16(word_utf, MAXSWL, word);
+ }
+
+ for (int cpdsuggest=0; (cpdsuggest<2) && (nocompoundtwowords==0); cpdsuggest++) {
+
+ // suggestions for an uppercase word (html -> HTML)
+ if ((nsug < maxSug) && (nsug > -1)) {
+ nsug = (utf8) ? capchars_utf(wlst, word_utf, wl, nsug, cpdsuggest) :
+ capchars(wlst, word, nsug, cpdsuggest);
+ }
+
+ // perhaps we made a typical fault of spelling
+ if ((nsug < maxSug) && (nsug > -1))
+ nsug = replchars(wlst, word, nsug, cpdsuggest);
+
+ // perhaps we made chose the wrong char from a related set
+ if ((nsug < maxSug) && (nsug > -1) && (cpdsuggest == 0)) {
+ nsug = mapchars(wlst, word, nsug);
+ }
+
+ // did we swap the order of chars by mistake
+ if ((nsug < maxSug) && (nsug > -1)) {
+ nsug = (utf8) ? swapchar_utf(wlst, word_utf, wl, nsug, cpdsuggest) :
+ swapchar(wlst, word, nsug, cpdsuggest);
+ }
+
+ // did we swap the order of non adjacent chars by mistake
+ if ((nsug < maxSug) && (nsug > -1)) {
+ nsug = (utf8) ? longswapchar_utf(wlst, word_utf, wl, nsug, cpdsuggest) :
+ longswapchar(wlst, word, nsug, cpdsuggest);
+ }
+
+ // did we forgot a char
+ if ((nsug < maxSug) && (nsug > -1)) {
+ nsug = (utf8) ? forgotchar_utf(wlst, word_utf, wl, nsug, cpdsuggest) :
+ forgotchar(wlst, word, nsug, cpdsuggest);
+ }
+
+ // did we move a char
+ if ((nsug < maxSug) && (nsug > -1)) {
+ nsug = (utf8) ? movechar_utf(wlst, word_utf, wl, nsug, cpdsuggest) :
+ movechar(wlst, word, nsug, cpdsuggest);
+ }
+
+ // did we add a char that should not be there
+ if ((nsug < maxSug) && (nsug > -1)) {
+ nsug = (utf8) ? extrachar_utf(wlst, word_utf, wl, nsug, cpdsuggest) :
+ extrachar(wlst, word, nsug, cpdsuggest);
+ }
+
+ // did we just hit the wrong key in place of a good char
+ if ((nsug < maxSug) && (nsug > -1)) {
+ nsug = (utf8) ? badchar_utf(wlst, word_utf, wl, nsug, cpdsuggest) :
+ badchar(wlst, word, nsug, cpdsuggest);
+ }
+
+ // did we double two characters
+ if ((nsug < maxSug) && (nsug > -1)) {
+ nsug = (utf8) ? doubletwochars_utf(wlst, word_utf, wl, nsug, cpdsuggest) :
+ doubletwochars(wlst, word, nsug, cpdsuggest);
+ }
+
+
+ // only suggest compound words when no other suggestion
+ if ((cpdsuggest==0) && (nsug>0)) nocompoundtwowords=1;
+
+ // perhaps we forgot to hit space and two words ran together
+ if ((!nosplitsugs) && (nsug < maxSug) && (nsug > -1)) {
+ nsug = twowords(wlst, word, nsug, cpdsuggest);
+ }
+
+ } // repeating ``for'' statement compounding support
+
+ if (nsug < 0) {
+ // we ran out of memory - we should free up as much as possible
+ for (int i = 0; i < maxSug; i++)
+ if (wlst[i] != NULL) free(wlst[i]);
+ free(wlst);
+ wlst = NULL;
+ }
+
+ *slst = wlst;
+ return nsug;
+}
+
+// generate suggestions for a word with typical mistake
+// pass in address of array of char * pointers
+#ifdef HUNSPELL_EXPERIMENTAL
+int SuggestMgr::suggest_auto(char*** slst, const char * w, int nsug)
+{
+ int nocompoundtwowords = 0;
+ char ** wlst;
+
+ char w2[MAXWORDUTF8LEN];
+ const char * word = w;
+
+ // word reversing wrapper for complex prefixes
+ if (complexprefixes) {
+ strcpy(w2, w);
+ if (utf8) reverseword_utf(w2); else reverseword(w2);
+ word = w2;
+ }
+
+ if (*slst) {
+ wlst = *slst;
+ } else {
+ wlst = (char **) malloc(maxSug * sizeof(char *));
+ if (wlst == NULL) return -1;
+ }
+
+ for (int cpdsuggest=0; (cpdsuggest<2) && (nocompoundtwowords==0); cpdsuggest++) {
+
+ // perhaps we made a typical fault of spelling
+ if ((nsug < maxSug) && (nsug > -1))
+ nsug = replchars(wlst, word, nsug, cpdsuggest);
+
+ // perhaps we made chose the wrong char from a related set
+ if ((nsug < maxSug) && (nsug > -1) && (cpdsuggest == 0))
+ nsug = mapchars(wlst, word, nsug);
+
+ if ((cpdsuggest==0) && (nsug>0)) nocompoundtwowords=1;
+
+ // perhaps we forgot to hit space and two words ran together
+
+ if ((nsug < maxSug) && (nsug > -1) && check_forbidden(word, strlen(word))) {
+ nsug = twowords(wlst, word, nsug, cpdsuggest);
+ }
+
+ } // repeating ``for'' statement compounding support
+
+ if (nsug < 0) {
+ for (int i=0;i<maxSug; i++)
+ if (wlst[i] != NULL) free(wlst[i]);
+ free(wlst);
+ return -1;
+ }
+
+ *slst = wlst;
+ return nsug;
+}
+#endif // END OF HUNSPELL_EXPERIMENTAL CODE
+
+// suggestions for an uppercase word (html -> HTML)
+int SuggestMgr::capchars_utf(char ** wlst, const w_char * word, int wl, int ns, int cpdsuggest)
+{
+ char candidate[MAXSWUTF8L];
+ w_char candidate_utf[MAXSWL];
+ memcpy(candidate_utf, word, wl * sizeof(w_char));
+ mkallcap_utf(candidate_utf, wl, pAMgr->get_langnum());
+ u16_u8(candidate, MAXSWUTF8L, candidate_utf, wl);
+ return testsug(wlst, candidate, strlen(candidate), ns, cpdsuggest, NULL, NULL);
+}
+
+// suggestions for an uppercase word (html -> HTML)
+int SuggestMgr::capchars(char** wlst, const char * word, int ns, int cpdsuggest)
+{
+ char candidate[MAXSWUTF8L];
+ strcpy(candidate, word);
+ mkallcap(candidate, csconv);
+ return testsug(wlst, candidate, strlen(candidate), ns, cpdsuggest, NULL, NULL);
+}
+
+// suggestions for when chose the wrong char out of a related set
+int SuggestMgr::mapchars(char** wlst, const char * word, int ns)
+{
+ time_t timelimit;
+ int timer;
+
+ int wl = strlen(word);
+ if (wl < 2 || ! pAMgr) return ns;
+
+ int nummap = pAMgr->get_nummap();
+ struct mapentry* maptable = pAMgr->get_maptable();
+ if (maptable==NULL) return ns;
+
+ timelimit = time(NULL);
+ timer = MINTIMER;
+ if (utf8) {
+ w_char w[MAXSWL];
+ int len = u8_u16(w, MAXSWL, word);
+ ns = map_related_utf(w, len, 0, wlst, ns, maptable, nummap, &timer, &timelimit);
+ } else ns = map_related(word, 0, wlst, ns, maptable, nummap, &timer, &timelimit);
+ return ns;
+}
+
+int SuggestMgr::map_related(const char * word, int i, char** wlst, int ns,
+ const mapentry* maptable, int nummap, int * timer, time_t * timelimit)
+{
+ char c = *(word + i);
+ if (c == 0) {
+ int cwrd = 1;
+ int wl = strlen(word);
+ for (int m=0; m < ns; m++)
+ if (strcmp(word,wlst[m]) == 0) cwrd = 0;
+ if ((cwrd) && (checkword(word, wl, 0, timer, timelimit) ||
+ checkword(word, wl, 1, timer, timelimit))) {
+ if (ns < maxSug) {
+ wlst[ns] = mystrdup(word);
+ if (wlst[ns] == NULL) return -1;
+ ns++;
+ }
+ }
+ return ns;
+ }
+ int in_map = 0;
+ for (int j = 0; j < nummap; j++) {
+ if (strchr(maptable[j].set,c) != 0) {
+ in_map = 1;
+ char * newword = mystrdup(word);
+ for (int k = 0; k < maptable[j].len; k++) {
+ *(newword + i) = *(maptable[j].set + k);
+ ns = map_related(newword, (i+1), wlst, ns, maptable, nummap, timer, timelimit);
+ if (!(*timelimit)) return ns;
+ }
+ free(newword);
+ }
+ }
+ if (!in_map) {
+ i++;
+ ns = map_related(word, i, wlst, ns, maptable, nummap, timer, timelimit);
+ }
+ return ns;
+}
+
+int SuggestMgr::map_related_utf(w_char * word, int len, int i, char** wlst, int ns,
+ const mapentry* maptable, int nummap, int * timer, time_t * timelimit)
+{
+ if (i == len) {
+ int cwrd = 1;
+ int wl;
+ char s[MAXSWUTF8L];
+ u16_u8(s, MAXSWUTF8L, word, len);
+ wl = strlen(s);
+ for (int m=0; m < ns; m++)
+ if (strcmp(s,wlst[m]) == 0) cwrd = 0;
+ if ((cwrd) && (checkword(s, wl, 0, timer, timelimit) ||
+ checkword(s, wl, 1, timer, timelimit))) {
+ if (ns < maxSug) {
+ wlst[ns] = mystrdup(s);
+ if (wlst[ns] == NULL) return -1;
+ ns++;
+ }
+ }
+ return ns;
+ }
+ int in_map = 0;
+ unsigned short c = *((unsigned short *) word + i);
+ for (int j = 0; j < nummap; j++) {
+ if (flag_bsearch((unsigned short *) maptable[j].set_utf16, c, maptable[j].len)) {
+ in_map = 1;
+ for (int k = 0; k < maptable[j].len; k++) {
+ *(word + i) = *(maptable[j].set_utf16 + k);
+ ns = map_related_utf(word, len, i + 1, wlst, ns, maptable, nummap, timer, timelimit);
+ if (!(*timelimit)) return ns;
+ }
+ *((unsigned short *) word + i) = c;
+ }
+ }
+ if (!in_map) {
+ i++;
+ ns = map_related_utf(word, len, i, wlst, ns, maptable, nummap, timer, timelimit);
+ }
+ return ns;
+}
+
+
+
+// suggestions for a typical fault of spelling, that
+// differs with more, than 1 letter from the right form.
+int SuggestMgr::replchars(char** wlst, const char * word, int ns, int cpdsuggest)
+{
+ char candidate[MAXSWUTF8L];
+ const char * r;
+ int lenr, lenp;
+ int wl = strlen(word);
+ if (wl < 2 || ! pAMgr) return ns;
+ int numrep = pAMgr->get_numrep();
+ struct replentry* reptable = pAMgr->get_reptable();
+ if (reptable==NULL) return ns;
+ for (int i=0; i < numrep; i++ ) {
+ r = word;
+ lenr = strlen(reptable[i].pattern2);
+ lenp = strlen(reptable[i].pattern);
+ // search every occurence of the pattern in the word
+ while ((r=strstr(r, reptable[i].pattern)) != NULL) {
+ strcpy(candidate, word);
+ if (r-word + lenr + strlen(r+lenp) >= MAXSWUTF8L) break;
+ strcpy(candidate+(r-word),reptable[i].pattern2);
+ strcpy(candidate+(r-word)+lenr, r+lenp);
+ ns = testsug(wlst, candidate, wl-lenp+lenr, ns, cpdsuggest, NULL, NULL);
+ if (ns == -1) return -1;
+ r++; // search for the next letter
+ }
+ }
+ return ns;
+}
+
+// perhaps we doubled two characters (pattern aba -> ababa, for example vacation -> vacacation)
+int SuggestMgr::doubletwochars(char** wlst, const char * word, int ns, int cpdsuggest)
+{
+ char candidate[MAXSWUTF8L];
+ int state=0;
+ int wl = strlen(word);
+ if (wl < 5 || ! pAMgr) return ns;
+ for (int i=2; i < wl; i++ ) {
+ if (word[i]==word[i-2]) {
+ state++;
+ if (state==3) {
+ strcpy(candidate,word);
+ strcpy(candidate+i-1,word+i+1);
+ ns = testsug(wlst, candidate, wl-2, ns, cpdsuggest, NULL, NULL);
+ if (ns == -1) return -1;
+ state=0;
+ }
+ } else {
+ state=0;
+ }
+ }
+ return ns;
+}
+
+// perhaps we doubled two characters (pattern aba -> ababa, for example vacation -> vacacation)
+int SuggestMgr::doubletwochars_utf(char ** wlst, const w_char * word, int wl, int ns, int cpdsuggest)
+{
+ w_char candidate_utf[MAXSWL];
+ char candidate[MAXSWUTF8L];
+ int state=0;
+ if (wl < 5 || ! pAMgr) return ns;
+ for (int i=2; i < wl; i++) {
+ if ((word[i].l==word[i-2].l) && (word[i].h==word[i-2].h)) {
+ state++;
+ if (state==3) {
+ memcpy(candidate_utf, word, (i - 1) * sizeof(w_char));
+ memcpy(candidate_utf+i-1, word+i+1, (wl-i-1) * sizeof(w_char));
+ u16_u8(candidate, MAXSWUTF8L, candidate_utf, wl-2);
+ ns = testsug(wlst, candidate, strlen(candidate), ns, cpdsuggest, NULL, NULL);
+ if (ns == -1) return -1;
+ state=0;
+ }
+ } else {
+ state=0;
+ }
+ }
+ return ns;
+}
+
+// error is wrong char in place of correct one
+int SuggestMgr::badchar(char ** wlst, const char * word, int ns, int cpdsuggest)
+{
+ char tmpc;
+ char candidate[MAXSWUTF8L];
+ time_t timelimit = time(NULL);
+ int timer = MINTIMER;
+ int wl = strlen(word);
+ strcpy(candidate, word);
+ // swap out each char one by one and try all the tryme
+ // chars in its place to see if that makes a good word
+ for (int i=0; i < wl; i++) {
+ tmpc = candidate[i];
+ for (int j=0; j < ctryl; j++) {
+ if (ctry[j] == tmpc) continue;
+ candidate[i] = ctry[j];
+ ns = testsug(wlst, candidate, wl, ns, cpdsuggest, &timer, &timelimit);
+ if (ns == -1) return -1;
+ if (!timelimit) return ns;
+ candidate[i] = tmpc;
+ }
+ }
+ return ns;
+}
+
+// error is wrong char in place of correct one
+int SuggestMgr::badchar_utf(char ** wlst, const w_char * word, int wl, int ns, int cpdsuggest)
+{
+ w_char tmpc;
+ w_char candidate_utf[MAXSWL];
+ char candidate[MAXSWUTF8L];
+ time_t timelimit = time(NULL);
+ int timer = MINTIMER;
+ memcpy(candidate_utf, word, wl * sizeof(w_char));
+ // swap out each char one by one and try all the tryme
+ // chars in its place to see if that makes a good word
+ for (int i=0; i < wl; i++) {
+ tmpc = candidate_utf[i];
+ for (int j=0; j < ctryl; j++) {
+ if ((ctry_utf[j].l == tmpc.l) && (ctry_utf[j].h == tmpc.h)) continue;
+ candidate_utf[i] = ctry_utf[j];
+ u16_u8(candidate, MAXSWUTF8L, candidate_utf, wl);
+ ns = testsug(wlst, candidate, strlen(candidate), ns, cpdsuggest, &timer, &timelimit);
+ if (ns == -1) return -1;
+ if (!timelimit) return ns;
+ candidate_utf[i] = tmpc;
+ }
+ }
+ return ns;
+}
+
+// error is word has an extra letter it does not need
+int SuggestMgr::extrachar_utf(char** wlst, const w_char * word, int wl, int ns, int cpdsuggest)
+{
+ char candidate[MAXSWUTF8L];
+ w_char candidate_utf[MAXSWL];
+ const w_char * p;
+ w_char * r;
+ if (wl < 2) return ns;
+ // try omitting one char of word at a time
+ memcpy(candidate_utf, word + 1, (wl - 1) * sizeof(w_char));
+ for (p = word, r = candidate_utf; p < word + wl; ) {
+ u16_u8(candidate, MAXSWUTF8L, candidate_utf, wl - 1);
+ ns = testsug(wlst, candidate, strlen(candidate), ns, cpdsuggest, NULL, NULL);
+ if (ns == -1) return -1;
+ *r++ = *p++;
+ }
+ return ns;
+}
+
+// error is word has an extra letter it does not need
+int SuggestMgr::extrachar(char** wlst, const char * word, int ns, int cpdsuggest)
+{
+ char candidate[MAXSWUTF8L];
+ const char * p;
+ char * r;
+ int wl = strlen(word);
+ if (wl < 2) return ns;
+ // try omitting one char of word at a time
+ strcpy (candidate, word + 1);
+ for (p = word, r = candidate; *p != 0; ) {
+ ns = testsug(wlst, candidate, wl-1, ns, cpdsuggest, NULL, NULL);
+ if (ns == -1) return -1;
+ *r++ = *p++;
+ }
+ return ns;
+}
+
+
+// error is missing a letter it needs
+int SuggestMgr::forgotchar(char ** wlst, const char * word, int ns, int cpdsuggest)
+{
+ char candidate[MAXSWUTF8L];
+ const char * p;
+ char * q;
+ time_t timelimit = time(NULL);
+ int timer = MINTIMER;
+ int wl = strlen(word);
+ // try inserting a tryme character before every letter
+ strcpy(candidate + 1, word);
+ for (p = word, q = candidate; *p != 0; ) {
+ for (int i = 0; i < ctryl; i++) {
+ *q = ctry[i];
+ ns = testsug(wlst, candidate, wl+1, ns, cpdsuggest, &timer, &timelimit);
+ if (ns == -1) return -1;
+ if (!timelimit) return ns;
+ }
+ *q++ = *p++;
+ }
+ // now try adding one to end */
+ for (int i = 0; i < ctryl; i++) {
+ *q = ctry[i];
+ ns = testsug(wlst, candidate, wl+1, ns, cpdsuggest, NULL, NULL);
+ if (ns == -1) return -1;
+ }
+ return ns;
+}
+
+// error is missing a letter it needs
+int SuggestMgr::forgotchar_utf(char ** wlst, const w_char * word, int wl, int ns, int cpdsuggest)
+{
+ w_char candidate_utf[MAXSWL];
+ char candidate[MAXSWUTF8L];
+ const w_char * p;
+ w_char * q;
+ int cwrd;
+ time_t timelimit = time(NULL);
+ int timer = MINTIMER;
+ // try inserting a tryme character before every letter
+ memcpy (candidate_utf + 1, word, wl * sizeof(w_char));
+ for (p = word, q = candidate_utf; p < (word + wl); ) {
+ for (int i = 0; i < ctryl; i++) {
+ *q = ctry_utf[i];
+ cwrd = 1;
+ u16_u8(candidate, MAXSWUTF8L, candidate_utf, wl + 1);
+ ns = testsug(wlst, candidate, strlen(candidate), ns, cpdsuggest, &timer, &timelimit);
+ if (ns == -1) return -1;
+ if (!timelimit) return ns;
+ }
+ *q++ = *p++;
+ }
+ // now try adding one to end */
+ for (int i = 0; i < ctryl; i++) {
+ *q = ctry_utf[i];
+ cwrd = 1;
+ u16_u8(candidate, MAXSWUTF8L, candidate_utf, wl + 1);
+ ns = testsug(wlst, candidate, strlen(candidate), ns, cpdsuggest, NULL, NULL);
+ if (ns == -1) return -1;
+ }
+ return ns;
+}
+
+
+/* error is should have been two words */
+int SuggestMgr::twowords(char ** wlst, const char * word, int ns, int cpdsuggest)
+{
+ char candidate[MAXSWUTF8L];
+ char * p;
+ int c1, c2;
+ int forbidden = 0;
+ int cwrd;
+
+ int wl=strlen(word);
+ if (wl < 3) return ns;
+
+ if (pAMgr->get_langnum() == LANG_hu) forbidden = check_forbidden(word, wl);
+
+ strcpy(candidate + 1, word);
+
+ // split the string into two pieces after every char
+ // if both pieces are good words make them a suggestion
+ for (p = candidate + 1; p[1] != '\0'; p++) {
+ p[-1] = *p;
+ // go to end of the UTF-8 character
+ while (utf8 && ((p[1] & 0xc0) == 0x80)) {
+ p++;
+ p[-1] = *p;
+ }
+ *p = '\0';
+ c1 = checkword(candidate,strlen(candidate), cpdsuggest, NULL, NULL);
+ if (c1) {
+ c2 = checkword((p+1),strlen(p+1), cpdsuggest, NULL, NULL);
+ if (c2) {
+ *p = ' ';
+
+ // spec. Hungarian code (need a better compound word support)
+ if ((pAMgr->get_langnum() == LANG_hu) && !forbidden &&
+ // if 3 repeating letter, use - instead of space
+ (((p[-1] == p[1]) && (((p>candidate+1) && (p[-1] == p[-2])) || (p[-1] == p[2]))) ||
+ // or multiple compounding, with more, than 6 syllables
+ ((c1 == 3) && (c2 >= 2)))) *p = '-';
+
+ cwrd = 1;
+ for (int k=0; k < ns; k++)
+ if (strcmp(candidate,wlst[k]) == 0) cwrd = 0;
+ if (ns < maxSug) {
+ if (cwrd) {
+ wlst[ns] = mystrdup(candidate);
+ if (wlst[ns] == NULL) return -1;
+ ns++;
+ }
+ } else return ns;
+ }
+ }
+ }
+ return ns;
+}
+
+
+// error is adjacent letter were swapped
+int SuggestMgr::swapchar(char ** wlst, const char * word, int ns, int cpdsuggest)
+{
+ char candidate[MAXSWUTF8L];
+ char * p;
+ char tmpc;
+ int wl=strlen(word);
+ // try swapping adjacent chars one by one
+ strcpy(candidate, word);
+ for (p = candidate; p[1] != 0; p++) {
+ tmpc = *p;
+ *p = p[1];
+ p[1] = tmpc;
+ ns = testsug(wlst, candidate, wl, ns, cpdsuggest, NULL, NULL);
+ if (ns == -1) return -1;
+ p[1] = *p;
+ *p = tmpc;
+ }
+ return ns;
+}
+
+// error is adjacent letter were swapped
+int SuggestMgr::swapchar_utf(char ** wlst, const w_char * word, int wl, int ns, int cpdsuggest)
+{
+ w_char candidate_utf[MAXSWL];
+ char candidate[MAXSWUTF8L];
+ w_char * p;
+ w_char tmpc;
+ // try swapping adjacent chars one by one
+ memcpy (candidate_utf, word, wl * sizeof(w_char));
+ for (p = candidate_utf; p < (candidate_utf + wl - 1); p++) {
+ tmpc = *p;
+ *p = p[1];
+ p[1] = tmpc;
+ u16_u8(candidate, MAXSWUTF8L, candidate_utf, wl);
+ ns = testsug(wlst, candidate, wl, ns, cpdsuggest, NULL, NULL);
+ if (ns == -1) return -1;
+ p[1] = *p;
+ *p = tmpc;
+ }
+ return ns;
+}
+
+// error is not adjacent letter were swapped
+int SuggestMgr::longswapchar(char ** wlst, const char * word, int ns, int cpdsuggest)
+{
+ char candidate[MAXSWUTF8L];
+ char * p;
+ char * q;
+ char tmpc;
+ int wl=strlen(word);
+ // try swapping not adjacent chars one by one
+ strcpy(candidate, word);
+ for (p = candidate; *p != 0; p++) {
+ for (q = candidate; *q != 0; q++) {
+ if (abs(p-q) > 1) {
+ tmpc = *p;
+ *p = *q;
+ *q = tmpc;
+ ns = testsug(wlst, candidate, wl, ns, cpdsuggest, NULL, NULL);
+ if (ns == -1) return -1;
+ *q = *p;
+ *p = tmpc;
+ }
+ }
+ }
+ return ns;
+}
+
+
+// error is adjacent letter were swapped
+int SuggestMgr::longswapchar_utf(char ** wlst, const w_char * word, int wl, int ns, int cpdsuggest)
+{
+ w_char candidate_utf[MAXSWL];
+ char candidate[MAXSWUTF8L];
+ w_char * p;
+ w_char * q;
+ w_char tmpc;
+ // try swapping not adjacent chars
+ memcpy (candidate_utf, word, wl * sizeof(w_char));
+ for (p = candidate_utf; p < (candidate_utf + wl); p++) {
+ for (q = candidate_utf; q < (candidate_utf + wl); q++) {
+ if (abs(p-q) > 1) {
+ tmpc = *p;
+ *p = *q;
+ *q = tmpc;
+ u16_u8(candidate, MAXSWUTF8L, candidate_utf, wl);
+ ns = testsug(wlst, candidate, strlen(candidate), ns, cpdsuggest, NULL, NULL);
+ if (ns == -1) return -1;
+ *q = *p;
+ *p = tmpc;
+ }
+ }
+ }
+ return ns;
+}
+
+// error is a letter was moved
+int SuggestMgr::movechar(char ** wlst, const char * word, int ns, int cpdsuggest)
+{
+ char candidate[MAXSWUTF8L];
+ char * p;
+ char * q;
+ char tmpc;
+
+ int wl=strlen(word);
+ // try moving a char
+ strcpy(candidate, word);
+ for (p = candidate; *p != 0; p++) {
+ for (q = p + 1; (*q != 0) && ((q - p) < 10); q++) {
+ tmpc = *(q-1);
+ *(q-1) = *q;
+ *q = tmpc;
+ if ((q-p) < 2) continue; // omit swap char
+ ns = testsug(wlst, candidate, strlen(candidate), ns, cpdsuggest, NULL, NULL);
+ if (ns == -1) return -1;
+ }
+ strcpy(candidate, word);
+ }
+ for (p = candidate + wl - 1; p > candidate; p--) {
+ for (q = p - 1; (q >= candidate) && ((p - q) < 10); q--) {
+ tmpc = *(q+1);
+ *(q+1) = *q;
+ *q = tmpc;
+ if ((p-q) < 2) continue; // omit swap char
+ ns = testsug(wlst, candidate, strlen(candidate), ns, cpdsuggest, NULL, NULL);
+ if (ns == -1) return -1;
+ }
+ strcpy(candidate, word);
+ }
+ return ns;
+}
+
+// error is a letter was moved
+int SuggestMgr::movechar_utf(char ** wlst, const w_char * word, int wl, int ns, int cpdsuggest)
+{
+ w_char candidate_utf[MAXSWL];
+ char candidate[MAXSWUTF8L];
+ w_char * p;
+ w_char * q;
+ w_char tmpc;
+ // try moving a char
+ memcpy (candidate_utf, word, wl * sizeof(w_char));
+ for (p = candidate_utf; p < (candidate_utf + wl); p++) {
+ for (q = p + 1; (q < (candidate_utf + wl)) && ((q - p) < 10); q++) {
+ tmpc = *(q-1);
+ *(q-1) = *q;
+ *q = tmpc;
+ if ((q-p) < 2) continue; // omit swap char
+ u16_u8(candidate, MAXSWUTF8L, candidate_utf, wl);
+ ns = testsug(wlst, candidate, wl, ns, cpdsuggest, NULL, NULL);
+ if (ns == -1) return -1;
+ }
+ memcpy (candidate_utf, word, wl * sizeof(w_char));
+ }
+ for (p = candidate_utf + wl - 1; p > candidate_utf; p--) {
+ for (q = p - 1; (q >= candidate_utf) && ((p - q) < 10); q--) {
+ tmpc = *(q+1);
+ *(q+1) = *q;
+ *q = tmpc;
+ if ((p-q) < 2) continue; // omit swap char
+ u16_u8(candidate, MAXSWUTF8L, candidate_utf, wl);
+ ns = testsug(wlst, candidate, wl, ns, cpdsuggest, NULL, NULL);
+ if (ns == -1) return -1;
+ }
+ memcpy (candidate_utf, word, wl * sizeof(w_char));
+ }
+ return ns;
+}
+
+// generate a set of suggestions for very poorly spelled words
+int SuggestMgr::ngsuggest(char** wlst, char * w, HashMgr* pHMgr)
+{
+
+ int i, j;
+ int lval;
+ int sc;
+ int lp;
+ int nonbmp = 0;
+
+ if (!pHMgr) return 0;
+
+ // exhaustively search through all root words
+ // keeping track of the MAX_ROOTS most similar root words
+ struct hentry * roots[MAX_ROOTS];
+ int scores[MAX_ROOTS];
+ for (i = 0; i < MAX_ROOTS; i++) {
+ roots[i] = NULL;
+ scores[i] = -100 * i;
+ }
+ lp = MAX_ROOTS - 1;
+
+ char w2[MAXWORDUTF8LEN];
+ char * word = w;
+
+ // word reversing wrapper for complex prefixes
+ if (complexprefixes) {
+ strcpy(w2, w);
+ if (utf8) reverseword_utf(w2); else reverseword(w2);
+ word = w2;
+ }
+
+ char mw[MAXSWUTF8L];
+ w_char u8[MAXSWL];
+ int nc = strlen(word);
+ int n = (utf8) ? u8_u16(u8, MAXSWL, word) : nc;
+
+ // set character based ngram suggestion for words with non-BMP Unicode characters
+ if (n == -1) {
+ utf8 = 0;
+ n = nc;
+ nonbmp = 1;
+ }
+
+ struct hentry* hp = NULL;
+ int col = -1;
+ while ((hp = pHMgr->walk_hashtable(col, hp))) {
+ if ((hp->astr) && (pAMgr) &&
+ (TESTAFF(hp->astr, pAMgr->get_forbiddenword(), hp->alen) ||
+ TESTAFF(hp->astr, pAMgr->get_nosuggest(), hp->alen) ||
+ TESTAFF(hp->astr, pAMgr->get_onlyincompound(), hp->alen))) continue;
+ sc = ngram(3, word, hp->word, NGRAM_LONGER_WORSE);
+ if (sc > scores[lp]) {
+ scores[lp] = sc;
+ roots[lp] = hp;
+ lval = sc;
+ for (j=0; j < MAX_ROOTS; j++)
+ if (scores[j] < lval) {
+ lp = j;
+ lval = scores[j];
+ }
+ }
+ }
+
+ // find minimum threshhold for a passable suggestion
+ // mangle original word three differnt ways
+ // and score them to generate a minimum acceptable score
+ int thresh = 0;
+ for (int sp = 1; sp < 4; sp++) {
+ if (utf8) {
+ for (int k=sp; k < n; k+=4) *((unsigned short *) u8 + k) = '*';
+ u16_u8(mw, MAXSWUTF8L, u8, n);
+ thresh = thresh + ngram(n, word, mw, NGRAM_ANY_MISMATCH);
+ } else {
+ strcpy(mw, word);
+ for (int k=sp; k < n; k+=4) *(mw + k) = '*';
+ thresh = thresh + ngram(n, word, mw, NGRAM_ANY_MISMATCH);
+ }
+ }
+ thresh = thresh / 3;
+ thresh--;
+
+ // now expand affixes on each of these root words and
+ // and use length adjusted ngram scores to select
+ // possible suggestions
+ char * guess[MAX_GUESS];
+ int gscore[MAX_GUESS];
+ for(i=0;i<MAX_GUESS;i++) {
+ guess[i] = NULL;
+ gscore[i] = -100 * i;
+ }
+
+ lp = MAX_GUESS - 1;
+
+ struct guessword * glst;
+ glst = (struct guessword *) calloc(MAX_WORDS,sizeof(struct guessword));
+ if (! glst) {
+ if (nonbmp) utf8 = 1;
+ return 0;
+ }
+
+ for (i = 0; i < MAX_ROOTS; i++) {
+
+ if (roots[i]) {
+ struct hentry * rp = roots[i];
+ int nw = pAMgr->expand_rootword(glst, MAX_WORDS, rp->word, rp->wlen,
+ rp->astr, rp->alen, word, nc);
+
+ for (int k = 0; k < nw ; k++) {
+ sc = ngram(n, word, glst[k].word, NGRAM_ANY_MISMATCH);
+ if ((sc > thresh)) {
+ if (sc > gscore[lp]) {
+ if (guess[lp]) free (guess[lp]);
+ gscore[lp] = sc;
+ guess[lp] = glst[k].word;
+ lval = sc;
+ for (j=0; j < MAX_GUESS; j++)
+ if (gscore[j] < lval) {
+ lp = j;
+ lval = gscore[j];
+ }
+ } else free (glst[k].word);
+ } else free(glst[k].word);
+ }
+ }
+ }
+ free(glst);
+
+ // now we are done generating guesses
+ // sort in order of decreasing score
+
+ bubblesort(&guess[0], &gscore[0], MAX_GUESS);
+
+ // weight suggestions with a similarity index, based on
+ // the longest common subsequent algorithm and resort
+
+ int is_swap;
+ for (i=0; i < MAX_GUESS; i++) {
+ if (guess[i]) {
+ // lowering guess[i]
+ char gl[MAXSWUTF8L];
+ int len;
+ if (utf8) {
+ w_char _w[MAXSWL];
+ len = u8_u16(_w, MAXSWL, guess[i]);
+ mkallsmall_utf(_w, len, pAMgr->get_langnum());
+ u16_u8(gl, MAXSWUTF8L, _w, len);
+ } else {
+ strcpy(gl, guess[i]);
+ mkallsmall(gl, csconv);
+ len = strlen(guess[i]);
+ }
+
+ int _lcs = lcslen(word, gl);
+
+ // same characters with different casing
+ if ((n == len) && (n == _lcs)) {
+ gscore[i] += 2000;
+ break;
+ }
+
+ // heuristic weigthing of ngram scores
+ gscore[i] +=
+ // length of longest common subsequent minus lenght difference
+ 2 * _lcs - abs((int) (n - len)) +
+ // weight equal first letter
+ equalfirstletter(word, gl) +
+ // weight equal character positions
+ ((_lcs == commoncharacterpositions(word, gl, &is_swap)) ? 1: 0) +
+ // swap character (not neighboring)
+ ((is_swap) ? 1000 : 0);
+ }
+ }
+
+ bubblesort(&guess[0], &gscore[0], MAX_GUESS);
+
+ // copy over
+
+ int ns = 0;
+ int same = 0;
+ for (i=0; i < MAX_GUESS; i++) {
+ if (guess[i]) {
+ if ((ns < maxngramsugs) && (ns < maxSug) && (!same || (gscore[i] > 1000))) {
+ int unique = 1;
+ // we have excellent suggestion(s)
+ if (gscore[i] > 1000) same = 1;
+ for (j=0; j < ns; j++)
+ // don't suggest previous suggestions or a previous suggestion with prefixes or affixes
+ if (strstr(guess[i], wlst[j]) ||
+ // check forbidden words
+ !checkword(guess[i], strlen(guess[i]), 0, NULL, NULL)) unique = 0;
+ if (unique) wlst[ns++] = guess[i]; else free(guess[i]);
+ } else free(guess[i]);
+ }
+ }
+
+ if (nonbmp) utf8 = 1;
+ return ns;
+}
+
+
+// see if a candidate suggestion is spelled correctly
+// needs to check both root words and words with affixes
+
+// obsolote MySpell-HU modifications:
+// return value 2 and 3 marks compounding with hyphen (-)
+// `3' marks roots without suffix
+int SuggestMgr::checkword(const char * word, int len, int cpdsuggest, int * timer, time_t * timelimit)
+{
+ struct hentry * rv=NULL;
+ int nosuffix = 0;
+
+ // check time limit
+ if (timer) {
+ (*timer)--;
+ if (!(*timer) && timelimit) {
+ if (time(NULL) > *timelimit) {
+ *timelimit = 0;
+ return 0;
+ }
+ *timer = MAXPLUSTIMER;
+ }
+ }
+
+ if (pAMgr) {
+ if (cpdsuggest==1) {
+ if (pAMgr->get_compound()) {
+ rv = pAMgr->compound_check(word,len,0,0,0,0,NULL,0,NULL,NULL,1);
+ if (rv) return 3; // XXX obsolote categorisation
+ }
+ return 0;
+ }
+
+ rv = pAMgr->lookup(word);
+
+ if (rv) {
+ if ((rv->astr) && (TESTAFF(rv->astr,pAMgr->get_forbiddenword(),rv->alen)
+ || TESTAFF(rv->astr,pAMgr->get_nosuggest(),rv->alen))) return 0;
+ if (rv->astr && (TESTAFF(rv->astr,pAMgr->get_pseudoroot(),rv->alen) ||
+ TESTAFF(rv->astr,pAMgr->get_onlyincompound(),rv->alen))) rv = NULL;
+ } else rv = pAMgr->prefix_check(word, len, 0); // only prefix, and prefix + suffix XXX
+
+ if (rv) {
+ nosuffix=1;
+ } else {
+ rv = pAMgr->suffix_check(word, len, 0, NULL, NULL, 0, NULL); // only suffix
+ }
+
+ if (!rv && pAMgr->have_contclass()) {
+ rv = pAMgr->suffix_check_twosfx(word, len, 0, NULL, FLAG_NULL);
+ if (!rv) rv = pAMgr->prefix_check_twosfx(word, len, 1, FLAG_NULL);
+ }
+
+ // check forbidden words
+ if ((rv) && (rv->astr) && (TESTAFF(rv->astr,pAMgr->get_forbiddenword(),rv->alen)
+ || TESTAFF(rv->astr,pAMgr->get_nosuggest(),rv->alen) ||
+ TESTAFF(rv->astr,pAMgr->get_onlyincompound(),rv->alen))) return 0;
+
+ if (rv) { // XXX obsolote
+ if ((pAMgr->get_compoundflag()) &&
+ TESTAFF(rv->astr, pAMgr->get_compoundflag(), rv->alen)) return 2 + nosuffix;
+ return 1;
+ }
+ }
+ return 0;
+}
+
+int SuggestMgr::check_forbidden(const char * word, int len)
+{
+ struct hentry * rv = NULL;
+
+ if (pAMgr) {
+ rv = pAMgr->lookup(word);
+ if (rv && rv->astr && (TESTAFF(rv->astr,pAMgr->get_pseudoroot(),rv->alen) ||
+ TESTAFF(rv->astr,pAMgr->get_onlyincompound(),rv->alen))) rv = NULL;
+ if (!(pAMgr->prefix_check(word,len,1)))
+ rv = pAMgr->suffix_check(word,len, 0, NULL, NULL, 0, NULL); // prefix+suffix, suffix
+ // check forbidden words
+ if ((rv) && (rv->astr) && TESTAFF(rv->astr,pAMgr->get_forbiddenword(),rv->alen)) return 1;
+ }
+ return 0;
+}
+
+#ifdef HUNSPELL_EXPERIMENTAL
+// suggest stems, XXX experimental code
+int SuggestMgr::suggest_stems(char*** slst, const char * w, int nsug)
+{
+ char buf[MAXSWUTF8L];
+ char ** wlst;
+ int prevnsug = nsug;
+
+ char w2[MAXWORDUTF8LEN];
+ const char * word = w;
+
+ // word reversing wrapper for complex prefixes
+ if (complexprefixes) {
+ strcpy(w2, w);
+ if (utf8) reverseword_utf(w2); else reverseword(w2);
+ word = w2;
+ }
+
+ if (*slst) {
+ wlst = *slst;
+ } else {
+ wlst = (char **) calloc(maxSug, sizeof(char *));
+ if (wlst == NULL) return -1;
+ }
+ // perhaps there are a fix stem in the dictionary
+ if ((nsug < maxSug) && (nsug > -1)) {
+
+ nsug = fixstems(wlst, word, nsug);
+ if (nsug == prevnsug) {
+ char * s = mystrdup(word);
+ char * p = s + strlen(s);
+ while ((*p != '-') && (p != s)) p--;
+ if (*p == '-') {
+ *p = '\0';
+ nsug = fixstems(wlst, s, nsug);
+ if ((nsug == prevnsug) && (nsug < maxSug) && (nsug >= 0)) {
+ char * t;
+ buf[0] = '\0';
+ for (t = s; (t[0] != '\0') && ((t[0] >= '0') || (t[0] <= '9')); t++); // is a number?
+ if (*t != '\0') strcpy(buf, "# ");
+ strcat(buf, s);
+ wlst[nsug] = mystrdup(buf);
+ if (wlst[nsug] == NULL) return -1;
+ nsug++;
+ }
+ p++;
+ nsug = fixstems(wlst, p, nsug);
+ }
+
+ free(s);
+ }
+ }
+
+ if (nsug < 0) {
+ for (int i=0;i<maxSug; i++)
+ if (wlst[i] != NULL) free(wlst[i]);
+ free(wlst);
+ return -1;
+ }
+
+ *slst = wlst;
+ return nsug;
+}
+
+
+// there are fix stems in dictionary
+int SuggestMgr::fixstems(char ** wlst, const char * word, int ns)
+{
+ char buf[MAXSWUTF8L];
+ char prefix[MAXSWUTF8L] = "";
+
+ int dicstem = 1; // 0 = lookup, 1= affix, 2 = compound
+ int cpdindex = 0;
+ struct hentry * rv = NULL;
+
+ int wl = strlen(word);
+ int cmpdstemnum;
+ int cmpdstem[MAXCOMPOUND];
+
+ if (pAMgr) {
+ rv = pAMgr->lookup(word);
+ if (rv) {
+ dicstem = 0;
+ } else {
+ // try stripping off affixes
+ rv = pAMgr->affix_check(word, wl);
+
+ // else try check compound word
+ if (!rv && pAMgr->get_compound()) {
+ rv = pAMgr->compound_check(word, wl,
+ 0, 0, 100, 0, NULL, 0, &cmpdstemnum, cmpdstem,1);
+
+ if (rv) {
+ dicstem = 2;
+ for (int j = 0; j < cmpdstemnum; j++) {
+ cpdindex += cmpdstem[j];
+ }
+ if(! (pAMgr->lookup(word + cpdindex)))
+ pAMgr->affix_check(word + cpdindex, wl - cpdindex); // for prefix
+ }
+ }
+
+
+ if (pAMgr->get_prefix()) {
+ strcpy(prefix, pAMgr->get_prefix());
+ }
+
+ // XXX obsolete, will be a general solution for stemming
+ if ((prefix) && (strncmp(prefix, "leg", 3)==0)) prefix[0] = '\0'; // (HU)
+ }
+
+ }
+
+
+
+ if ((rv) && (ns < maxSug)) {
+
+ // check fixstem flag and not_valid_stem flag
+ // first word
+ if ((ns < maxSug) && (dicstem < 2)) {
+ strcpy(buf, prefix);
+ if ((dicstem > 0) && pAMgr->get_derived()) {
+ // XXX obsolote
+ if (strlen(prefix) == 1) {
+ strcat(buf, (pAMgr->get_derived()) + 1);
+ } else {
+ strcat(buf, pAMgr->get_derived());
+ }
+ } else {
+ // special stem in affix description
+ const char * wordchars = pAMgr->get_wordchars();
+ if (rv->description &&
+ (strchr(wordchars, *(rv->description)))) {
+ char * desc = (rv->description) + 1;
+ while (strchr(wordchars, *desc)) desc++;
+ strncat(buf, rv->description, desc - (rv->description));
+ } else {
+ strcat(buf, rv->word);
+ }
+ }
+ wlst[ns] = mystrdup(buf);
+ if (wlst[ns] == NULL) return -1;
+ ns++;
+ }
+
+ if (dicstem == 2) {
+
+ // compound stem
+
+// if (rv->astr && (strchr(rv->astr, '0') == NULL)) {
+ if (rv->astr) {
+ strcpy(buf, word);
+ buf[cpdindex] = '\0';
+ if (prefix) strcat(buf, prefix);
+ if (pAMgr->get_derived()) {
+ strcat(buf, pAMgr->get_derived());
+ } else {
+ // special stem in affix description
+ const char * wordchars = pAMgr->get_wordchars();
+ if (rv->description &&
+ (strchr(wordchars, *(rv->description)))) {
+ char * desc = (rv->description) + 1;
+ while (strchr(wordchars, *desc)) desc++;
+ strncat(buf, rv->description, desc - (rv->description));
+ } else {
+ strcat(buf, rv->word);
+ }
+ }
+ if (ns < maxSug) {
+ wlst[ns] = mystrdup(buf);
+ if (wlst[ns] == NULL) return -1;
+ ns++;
+ }
+ }
+ }
+ }
+ return ns;
+}
+
+// suggest possible stems
+int SuggestMgr::suggest_pos_stems(char*** slst, const char * w, int nsug)
+{
+ char ** wlst;
+
+ struct hentry * rv = NULL;
+
+ char w2[MAXSWUTF8L];
+ const char * word = w;
+
+ // word reversing wrapper for complex prefixes
+ if (complexprefixes) {
+ strcpy(w2, w);
+ if (utf8) reverseword_utf(w2); else reverseword(w2);
+ word = w2;
+ }
+
+ int wl = strlen(word);
+
+
+ if (*slst) {
+ wlst = *slst;
+ } else {
+ wlst = (char **) calloc(maxSug, sizeof(char *));
+ if (wlst == NULL) return -1;
+ }
+
+ rv = pAMgr->suffix_check(word, wl, 0, NULL, wlst, maxSug, &nsug);
+
+ // delete dash from end of word
+ if (nsug > 0) {
+ for (int j=0; j < nsug; j++) {
+ if (wlst[j][strlen(wlst[j]) - 1] == '-') wlst[j][strlen(wlst[j]) - 1] = '\0';
+ }
+ }
+
+ *slst = wlst;
+ return nsug;
+}
+
+
+char * SuggestMgr::suggest_morph(const char * w)
+{
+ char result[MAXLNLEN];
+ char * r = (char *) result;
+ char * st;
+
+ struct hentry * rv = NULL;
+
+ *result = '\0';
+
+ if (! pAMgr) return NULL;
+
+ char w2[MAXSWUTF8L];
+ const char * word = w;
+
+ // word reversing wrapper for complex prefixes
+ if (complexprefixes) {
+ strcpy(w2, w);
+ if (utf8) reverseword_utf(w2); else reverseword(w2);
+ word = w2;
+ }
+
+ rv = pAMgr->lookup(word);
+
+ while (rv) {
+ if ((!rv->astr) || !(TESTAFF(rv->astr, pAMgr->get_forbiddenword(), rv->alen) ||
+ TESTAFF(rv->astr, pAMgr->get_pseudoroot(), rv->alen) ||
+ TESTAFF(rv->astr,pAMgr->get_onlyincompound(),rv->alen))) {
+ if (rv->description && ((!rv->astr) ||
+ !TESTAFF(rv->astr, pAMgr->get_lemma_present(), rv->alen)))
+ strcat(result, word);
+ if (rv->description) strcat(result, rv->description);
+ strcat(result, "\n");
+ }
+ rv = rv->next_homonym;
+ }
+
+ st = pAMgr->affix_check_morph(word,strlen(word));
+ if (st) {
+ strcat(result, st);
+ free(st);
+ }
+
+ if (pAMgr->get_compound() && (*result == '\0'))
+ pAMgr->compound_check_morph(word, strlen(word),
+ 0, 0, 100, 0,NULL, 0, &r, NULL);
+
+ return (*result) ? mystrdup(line_uniq(delete_zeros(result))) : NULL;
+}
+
+char * SuggestMgr::suggest_morph_for_spelling_error(const char * word)
+{
+ char * p = NULL;
+ char ** wlst = (char **) calloc(maxSug, sizeof(char *));
+ // we will use only the first suggestion
+ for (int i = 0; i < maxSug - 1; i++) wlst[i] = "";
+ int ns = suggest(&wlst, word, maxSug - 1);
+ if (ns == maxSug) {
+ p = suggest_morph(wlst[maxSug - 1]);
+ free(wlst[maxSug - 1]);
+ }
+ if (wlst) free(wlst);
+ return p;
+}
+#endif // END OF HUNSPELL_EXPERIMENTAL CODE
+
+
+// generate an n-gram score comparing s1 and s2
+int SuggestMgr::ngram(int n, char * s1, const char * s2, int uselen)
+{
+ int nscore = 0;
+ int ns;
+ int l1;
+ int l2;
+
+ if (utf8) {
+ w_char su1[MAXSWL];
+ w_char su2[MAXSWL];
+ l1 = u8_u16(su1, MAXSWL, s1);
+ l2 = u8_u16(su2, MAXSWL, s2);
+ if (!l2 || (l1==-1) || (l2==-1)) return 0;
+ // decapitalize dictionary word
+ if (complexprefixes) {
+ mkallsmall_utf(su2+l2-1, 1, pAMgr->get_langnum());
+ } else {
+ mkallsmall_utf(su2, 1, pAMgr->get_langnum());
+ }
+ for (int j = 1; j <= n; j++) {
+ ns = 0;
+ for (int i = 0; i <= (l1-j); i++) {
+ for (int l = 0; l <= (l2-j); l++) {
+ int k;
+ for (k = 0; (k < j); k++) {
+ w_char * c1 = su1 + i + k;
+ w_char * c2 = su2 + l + k;
+ if ((c1->l != c2->l) || (c1->h != c2->h)) break;
+ }
+ if (k == j) {
+ ns++;
+ break;
+ }
+ }
+ }
+ nscore = nscore + ns;
+ if (ns < 2) break;
+ }
+ } else {
+ char t[MAXSWUTF8L];
+ l1 = strlen(s1);
+ l2 = strlen(s2);
+ if (!l2) return 0;
+ strcpy(t, s2);
+ if (complexprefixes) {
+ *(t+l2-1) = csconv[((unsigned char)*(t+l2-1))].clower;
+ } else {
+ mkallsmall(t, csconv);
+ }
+ for (int j = 1; j <= n; j++) {
+ ns = 0;
+ for (int i = 0; i <= (l1-j); i++) {
+ char c = *(s1 + i + j);
+ *(s1 + i + j) = '\0';
+ if (strstr(t,(s1+i))) ns++;
+ *(s1 + i + j ) = c;
+ }
+ nscore = nscore + ns;
+ if (ns < 2) break;
+ }
+ }
+
+ ns = 0;
+ if (uselen == NGRAM_LONGER_WORSE) ns = (l2-l1)-2;
+ if (uselen == NGRAM_ANY_MISMATCH) ns = abs(l2-l1)-2;
+ ns = (nscore - ((ns > 0) ? ns : 0));
+ return ns;
+}
+
+int SuggestMgr::equalfirstletter(char * s1, const char * s2) {
+ if (utf8) {
+ w_char su1[MAXSWL];
+ w_char su2[MAXSWL];
+ // decapitalize dictionary word
+ if (complexprefixes) {
+ int l1 = u8_u16(su1, MAXSWL, s1);
+ int l2 = u8_u16(su2, MAXSWL, s2);
+ if (*((short *)su1+l1-1) == *((short *)su2+l2-1)) return 1;
+ } else {
+ u8_u16(su1, 1, s1);
+ u8_u16(su2, 1, s2);
+ if (*((short *)su1) == *((short *)su2)) return 1;
+ }
+ } else {
+ if (complexprefixes) {
+ int l1 = strlen(s1);
+ int l2 = strlen(s2);
+ if (*(s2+l1-1) == *(s2+l2-1)) return 1;
+ } else {
+ if (*s1 == *s2) return 1;
+ }
+ }
+ return 0;
+}
+
+int SuggestMgr::commoncharacterpositions(char * s1, const char * s2, int * is_swap) {
+ int num = 0;
+ int diff = 0;
+ int diffpos[2];
+ *is_swap = 0;
+ if (utf8) {
+ w_char su1[MAXSWL];
+ w_char su2[MAXSWL];
+ int l1 = u8_u16(su1, MAXSWL, s1);
+ int l2 = u8_u16(su2, MAXSWL, s2);
+ // decapitalize dictionary word
+ if (complexprefixes) {
+ mkallsmall_utf(su2+l2-1, 1, pAMgr->get_langnum());
+ } else {
+ mkallsmall_utf(su2, 1, pAMgr->get_langnum());
+ }
+ for (int i = 0; (i < l1) && (i < l2); i++) {
+ if (((short *) su1)[i] == ((short *) su2)[i]) {
+ num++;
+ } else {
+ if (diff < 2) diffpos[diff] = i;
+ diff++;
+ }
+ }
+ if ((diff == 2) && (l1 == l2) &&
+ (((short *) su1)[diffpos[0]] == ((short *) su2)[diffpos[1]]) &&
+ (((short *) su1)[diffpos[1]] == ((short *) su2)[diffpos[0]])) *is_swap = 1;
+ } else {
+ int i;
+ char t[MAXSWUTF8L];
+ strcpy(t, s2);
+ // decapitalize dictionary word
+ if (complexprefixes) {
+ int l2 = strlen(t);
+ *(t+l2-1) = csconv[((unsigned char)*(t+l2-1))].clower;
+ } else {
+ mkallsmall(t, csconv);
+ }
+ for (i = 0; (*(s1+i) != 0) && (*(t+i) != 0); i++) {
+ if (*(s1+i) == *(t+i)) {
+ num++;
+ } else {
+ if (diff < 2) diffpos[diff] = i;
+ diff++;
+ }
+ }
+ if ((diff == 2) && (*(s1+i) == 0) && (*(t+i) == 0) &&
+ (*(s1+diffpos[0]) == *(t+diffpos[1])) &&
+ (*(s1+diffpos[1]) == *(t+diffpos[0]))) *is_swap = 1;
+ }
+ return num;
+}
+
+int SuggestMgr::mystrlen(const char * word) {
+ if (utf8) {
+ w_char w[MAXSWL];
+ return u8_u16(w, MAXSWL, word);
+ } else return strlen(word);
+}
+
+// sort in decreasing order of score
+void SuggestMgr::bubblesort(char** rword, int* rsc, int n )
+{
+ int m = 1;
+ while (m < n) {
+ int j = m;
+ while (j > 0) {
+ if (rsc[j-1] < rsc[j]) {
+ int sctmp = rsc[j-1];
+ char * wdtmp = rword[j-1];
+ rsc[j-1] = rsc[j];
+ rword[j-1] = rword[j];
+ rsc[j] = sctmp;
+ rword[j] = wdtmp;
+ j--;
+ } else break;
+ }
+ m++;
+ }
+ return;
+}
+
+// longest common subsequence
+void SuggestMgr::lcs(const char * s, const char * s2, int * l1, int * l2, char ** result) {
+ int n, m;
+ w_char su[MAXSWL];
+ w_char su2[MAXSWL];
+ char * b;
+ char * c;
+ int i;
+ int j;
+ if (utf8) {
+ m = u8_u16(su, MAXSWL, s);
+ n = u8_u16(su2, MAXSWL, s2);
+ } else {
+ m = strlen(s);
+ n = strlen(s2);
+ }
+ c = (char *) malloc((m + 1) * (n + 1));
+ b = (char *) malloc((m + 1) * (n + 1));
+ for (i = 1; i <= m; i++) c[i*(n+1)] = 0;
+ for (j = 0; j <= n; j++) c[j] = 0;
+ for (i = 1; i <= m; i++) {
+ for (j = 1; j <= n; j++) {
+ if ((utf8) && (*((short *) su+i-1) == *((short *)su2+j-1))
+ || (!utf8) && ((*(s+i-1)) == (*(s2+j-1)))) {
+ c[i*(n+1) + j] = c[(i-1)*(n+1) + j-1]+1;
+ b[i*(n+1) + j] = LCS_UPLEFT;
+ } else if (c[(i-1)*(n+1) + j] >= c[i*(n+1) + j-1]) {
+ c[i*(n+1) + j] = c[(i-1)*(n+1) + j];
+ b[i*(n+1) + j] = LCS_UP;
+ } else {
+ c[i*(n+1) + j] = c[i*(n+1) + j-1];
+ b[i*(n+1) + j] = LCS_LEFT;
+ }
+ }
+ }
+ *result = b;
+ free(c);
+ *l1 = m;
+ *l2 = n;
+}
+
+int SuggestMgr::lcslen(const char * s, const char* s2) {
+ int m;
+ int n;
+ int i;
+ int j;
+ char * result;
+ int len = 0;
+ lcs(s, s2, &m, &n, &result);
+ i = m;
+ j = n;
+ while ((i != 0) && (j != 0)) {
+ if (result[i*(n+1) + j] == LCS_UPLEFT) {
+ len++;
+ i--;
+ j--;
+ } else if (result[i*(n+1) + j] == LCS_UP) {
+ i--;
+ } else j--;
+ }
+ if (result) free(result);
+ return len;
+}
diff --git a/chrome/third_party/hunspell/src/hunspell/suggestmgr.hxx b/chrome/third_party/hunspell/src/hunspell/suggestmgr.hxx
new file mode 100644
index 0000000..70af7f1
--- /dev/null
+++ b/chrome/third_party/hunspell/src/hunspell/suggestmgr.hxx
@@ -0,0 +1,95 @@
+#ifndef _SUGGESTMGR_HXX_
+#define _SUGGESTMGR_HXX_
+
+#define MAXSWL 100
+#define MAXSWUTF8L (MAXSWL * 4)
+#define MAX_ROOTS 100
+#define MAX_WORDS 100
+#define MAX_GUESS 100
+#define MAXNGRAMSUGS 5
+
+#define MINTIMER 500
+#define MAXPLUSTIMER 500
+
+#define NGRAM_IGNORE_LENGTH 0
+#define NGRAM_LONGER_WORSE 1
+#define NGRAM_ANY_MISMATCH 2
+
+#include "atypes.hxx"
+#include "affixmgr.hxx"
+#include "hashmgr.hxx"
+#include "langnum.hxx"
+#include <time.h>
+
+enum { LCS_UP, LCS_LEFT, LCS_UPLEFT };
+
+class SuggestMgr
+{
+ char * ctry;
+ int ctryl;
+ w_char * ctry_utf;
+
+ AffixMgr* pAMgr;
+ int maxSug;
+ struct cs_info * csconv;
+ int utf8;
+ int nosplitsugs;
+ int maxngramsugs;
+ int complexprefixes;
+
+
+public:
+ SuggestMgr(const char * tryme, int maxn, AffixMgr *aptr);
+ ~SuggestMgr();
+
+ int suggest(char*** slst, const char * word, int nsug);
+ int ngsuggest(char ** wlst, char * word, HashMgr* pHMgr);
+ int suggest_auto(char*** slst, const char * word, int nsug);
+ int suggest_stems(char*** slst, const char * word, int nsug);
+ int suggest_pos_stems(char*** slst, const char * word, int nsug);
+
+ char * suggest_morph(const char * word);
+ char * suggest_morph_for_spelling_error(const char * word);
+
+private:
+ int testsug(char** wlst, const char * candidate, int wl, int ns, int cpdsuggest,
+ int * timer, time_t * timelimit);
+ int checkword(const char *, int, int, int *, time_t *);
+ int check_forbidden(const char *, int);
+
+ int capchars(char **, const char *, int, int);
+ int replchars(char**, const char *, int, int);
+ int doubletwochars(char**, const char *, int, int);
+ int forgotchar(char **, const char *, int, int);
+ int swapchar(char **, const char *, int, int);
+ int longswapchar(char **, const char *, int, int);
+ int movechar(char **, const char *, int, int);
+ int extrachar(char **, const char *, int, int);
+ int badchar(char **, const char *, int, int);
+ int twowords(char **, const char *, int, int);
+ int fixstems(char **, const char *, int);
+
+ int capchars_utf(char **, const w_char *, int wl, int, int);
+ int doubletwochars_utf(char**, const w_char *, int wl, int, int);
+ int forgotchar_utf(char**, const w_char *, int wl, int, int);
+ int extrachar_utf(char**, const w_char *, int wl, int, int);
+ int badchar_utf(char **, const w_char *, int wl, int, int);
+ int swapchar_utf(char **, const w_char *, int wl, int, int);
+ int longswapchar_utf(char **, const w_char *, int, int, int);
+ int movechar_utf(char **, const w_char *, int, int, int);
+
+ int mapchars(char**, const char *, int);
+ int map_related(const char *, int, char ** wlst, int, const mapentry*, int, int *, time_t *);
+ int map_related_utf(w_char *, int, int, char ** wlst, int, const mapentry*, int, int *, time_t *);
+ int ngram(int n, char * s1, const char * s2, int uselen);
+ int mystrlen(const char * word);
+ int equalfirstletter(char * s1, const char * s2);
+ int commoncharacterpositions(char * s1, const char * s2, int * is_swap);
+ void bubblesort( char ** rwd, int * rsc, int n);
+ void lcs(const char * s, const char * s2, int * l1, int * l2, char ** result);
+ int lcslen(const char * s, const char* s2);
+
+};
+
+#endif
+
diff --git a/chrome/third_party/hunspell/src/hunspell/utf_info.hxx b/chrome/third_party/hunspell/src/hunspell/utf_info.hxx
new file mode 100644
index 0000000..0d86d2a
--- /dev/null
+++ b/chrome/third_party/hunspell/src/hunspell/utf_info.hxx
@@ -0,0 +1,8506 @@
+#include "csutil.hxx"
+/* fields: Unicode letter, toupper, tolower */
+static struct unicode_info utf_lst[] = {
+{ 0x0041, 0x0041, 0x0061 },
+{ 0x0042, 0x0042, 0x0062 },
+{ 0x0043, 0x0043, 0x0063 },
+{ 0x0044, 0x0044, 0x0064 },
+{ 0x0045, 0x0045, 0x0065 },
+{ 0x0046, 0x0046, 0x0066 },
+{ 0x0047, 0x0047, 0x0067 },
+{ 0x0048, 0x0048, 0x0068 },
+{ 0x0049, 0x0049, 0x0069 },
+{ 0x004A, 0x004A, 0x006A },
+{ 0x004B, 0x004B, 0x006B },
+{ 0x004C, 0x004C, 0x006C },
+{ 0x004D, 0x004D, 0x006D },
+{ 0x004E, 0x004E, 0x006E },
+{ 0x004F, 0x004F, 0x006F },
+{ 0x0050, 0x0050, 0x0070 },
+{ 0x0051, 0x0051, 0x0071 },
+{ 0x0052, 0x0052, 0x0072 },
+{ 0x0053, 0x0053, 0x0073 },
+{ 0x0054, 0x0054, 0x0074 },
+{ 0x0055, 0x0055, 0x0075 },
+{ 0x0056, 0x0056, 0x0076 },
+{ 0x0057, 0x0057, 0x0077 },
+{ 0x0058, 0x0058, 0x0078 },
+{ 0x0059, 0x0059, 0x0079 },
+{ 0x005A, 0x005A, 0x007A },
+{ 0x0061, 0x0041, 0x0061 },
+{ 0x0062, 0x0042, 0x0062 },
+{ 0x0063, 0x0043, 0x0063 },
+{ 0x0064, 0x0044, 0x0064 },
+{ 0x0065, 0x0045, 0x0065 },
+{ 0x0066, 0x0046, 0x0066 },
+{ 0x0067, 0x0047, 0x0067 },
+{ 0x0068, 0x0048, 0x0068 },
+{ 0x0069, 0x0049, 0x0069 },
+{ 0x006A, 0x004A, 0x006A },
+{ 0x006B, 0x004B, 0x006B },
+{ 0x006C, 0x004C, 0x006C },
+{ 0x006D, 0x004D, 0x006D },
+{ 0x006E, 0x004E, 0x006E },
+{ 0x006F, 0x004F, 0x006F },
+{ 0x0070, 0x0050, 0x0070 },
+{ 0x0071, 0x0051, 0x0071 },
+{ 0x0072, 0x0052, 0x0072 },
+{ 0x0073, 0x0053, 0x0073 },
+{ 0x0074, 0x0054, 0x0074 },
+{ 0x0075, 0x0055, 0x0075 },
+{ 0x0076, 0x0056, 0x0076 },
+{ 0x0077, 0x0057, 0x0077 },
+{ 0x0078, 0x0058, 0x0078 },
+{ 0x0079, 0x0059, 0x0079 },
+{ 0x007A, 0x005A, 0x007A },
+{ 0x00AA, 0x00AA, 0x00AA },
+{ 0x00B5, 0x039C, 0x00B5 },
+{ 0x00BA, 0x00BA, 0x00BA },
+{ 0x00C0, 0x00C0, 0x00E0 },
+{ 0x00C1, 0x00C1, 0x00E1 },
+{ 0x00C2, 0x00C2, 0x00E2 },
+{ 0x00C3, 0x00C3, 0x00E3 },
+{ 0x00C4, 0x00C4, 0x00E4 },
+{ 0x00C5, 0x00C5, 0x00E5 },
+{ 0x00C6, 0x00C6, 0x00E6 },
+{ 0x00C7, 0x00C7, 0x00E7 },
+{ 0x00C8, 0x00C8, 0x00E8 },
+{ 0x00C9, 0x00C9, 0x00E9 },
+{ 0x00CA, 0x00CA, 0x00EA },
+{ 0x00CB, 0x00CB, 0x00EB },
+{ 0x00CC, 0x00CC, 0x00EC },
+{ 0x00CD, 0x00CD, 0x00ED },
+{ 0x00CE, 0x00CE, 0x00EE },
+{ 0x00CF, 0x00CF, 0x00EF },
+{ 0x00D0, 0x00D0, 0x00F0 },
+{ 0x00D1, 0x00D1, 0x00F1 },
+{ 0x00D2, 0x00D2, 0x00F2 },
+{ 0x00D3, 0x00D3, 0x00F3 },
+{ 0x00D4, 0x00D4, 0x00F4 },
+{ 0x00D5, 0x00D5, 0x00F5 },
+{ 0x00D6, 0x00D6, 0x00F6 },
+{ 0x00D8, 0x00D8, 0x00F8 },
+{ 0x00D9, 0x00D9, 0x00F9 },
+{ 0x00DA, 0x00DA, 0x00FA },
+{ 0x00DB, 0x00DB, 0x00FB },
+{ 0x00DC, 0x00DC, 0x00FC },
+{ 0x00DD, 0x00DD, 0x00FD },
+{ 0x00DE, 0x00DE, 0x00FE },
+{ 0x00DF, 0x00DF, 0x00DF },
+{ 0x00E0, 0x00C0, 0x00E0 },
+{ 0x00E1, 0x00C1, 0x00E1 },
+{ 0x00E2, 0x00C2, 0x00E2 },
+{ 0x00E3, 0x00C3, 0x00E3 },
+{ 0x00E4, 0x00C4, 0x00E4 },
+{ 0x00E5, 0x00C5, 0x00E5 },
+{ 0x00E6, 0x00C6, 0x00E6 },
+{ 0x00E7, 0x00C7, 0x00E7 },
+{ 0x00E8, 0x00C8, 0x00E8 },
+{ 0x00E9, 0x00C9, 0x00E9 },
+{ 0x00EA, 0x00CA, 0x00EA },
+{ 0x00EB, 0x00CB, 0x00EB },
+{ 0x00EC, 0x00CC, 0x00EC },
+{ 0x00ED, 0x00CD, 0x00ED },
+{ 0x00EE, 0x00CE, 0x00EE },
+{ 0x00EF, 0x00CF, 0x00EF },
+{ 0x00F0, 0x00D0, 0x00F0 },
+{ 0x00F1, 0x00D1, 0x00F1 },
+{ 0x00F2, 0x00D2, 0x00F2 },
+{ 0x00F3, 0x00D3, 0x00F3 },
+{ 0x00F4, 0x00D4, 0x00F4 },
+{ 0x00F5, 0x00D5, 0x00F5 },
+{ 0x00F6, 0x00D6, 0x00F6 },
+{ 0x00F8, 0x00D8, 0x00F8 },
+{ 0x00F9, 0x00D9, 0x00F9 },
+{ 0x00FA, 0x00DA, 0x00FA },
+{ 0x00FB, 0x00DB, 0x00FB },
+{ 0x00FC, 0x00DC, 0x00FC },
+{ 0x00FD, 0x00DD, 0x00FD },
+{ 0x00FE, 0x00DE, 0x00FE },
+{ 0x00FF, 0x0178, 0x00FF },
+{ 0x0100, 0x0100, 0x0101 },
+{ 0x0101, 0x0100, 0x0101 },
+{ 0x0102, 0x0102, 0x0103 },
+{ 0x0103, 0x0102, 0x0103 },
+{ 0x0104, 0x0104, 0x0105 },
+{ 0x0105, 0x0104, 0x0105 },
+{ 0x0106, 0x0106, 0x0107 },
+{ 0x0107, 0x0106, 0x0107 },
+{ 0x0108, 0x0108, 0x0109 },
+{ 0x0109, 0x0108, 0x0109 },
+{ 0x010A, 0x010A, 0x010B },
+{ 0x010B, 0x010A, 0x010B },
+{ 0x010C, 0x010C, 0x010D },
+{ 0x010D, 0x010C, 0x010D },
+{ 0x010E, 0x010E, 0x010F },
+{ 0x010F, 0x010E, 0x010F },
+{ 0x0110, 0x0110, 0x0111 },
+{ 0x0111, 0x0110, 0x0111 },
+{ 0x0112, 0x0112, 0x0113 },
+{ 0x0113, 0x0112, 0x0113 },
+{ 0x0114, 0x0114, 0x0115 },
+{ 0x0115, 0x0114, 0x0115 },
+{ 0x0116, 0x0116, 0x0117 },
+{ 0x0117, 0x0116, 0x0117 },
+{ 0x0118, 0x0118, 0x0119 },
+{ 0x0119, 0x0118, 0x0119 },
+{ 0x011A, 0x011A, 0x011B },
+{ 0x011B, 0x011A, 0x011B },
+{ 0x011C, 0x011C, 0x011D },
+{ 0x011D, 0x011C, 0x011D },
+{ 0x011E, 0x011E, 0x011F },
+{ 0x011F, 0x011E, 0x011F },
+{ 0x0120, 0x0120, 0x0121 },
+{ 0x0121, 0x0120, 0x0121 },
+{ 0x0122, 0x0122, 0x0123 },
+{ 0x0123, 0x0122, 0x0123 },
+{ 0x0124, 0x0124, 0x0125 },
+{ 0x0125, 0x0124, 0x0125 },
+{ 0x0126, 0x0126, 0x0127 },
+{ 0x0127, 0x0126, 0x0127 },
+{ 0x0128, 0x0128, 0x0129 },
+{ 0x0129, 0x0128, 0x0129 },
+{ 0x012A, 0x012A, 0x012B },
+{ 0x012B, 0x012A, 0x012B },
+{ 0x012C, 0x012C, 0x012D },
+{ 0x012D, 0x012C, 0x012D },
+{ 0x012E, 0x012E, 0x012F },
+{ 0x012F, 0x012E, 0x012F },
+{ 0x0130, 0x0130, 0x0069 },
+{ 0x0131, 0x0049, 0x0131 },
+{ 0x0132, 0x0132, 0x0133 },
+{ 0x0133, 0x0132, 0x0133 },
+{ 0x0134, 0x0134, 0x0135 },
+{ 0x0135, 0x0134, 0x0135 },
+{ 0x0136, 0x0136, 0x0137 },
+{ 0x0137, 0x0136, 0x0137 },
+{ 0x0138, 0x0138, 0x0138 },
+{ 0x0139, 0x0139, 0x013A },
+{ 0x013A, 0x0139, 0x013A },
+{ 0x013B, 0x013B, 0x013C },
+{ 0x013C, 0x013B, 0x013C },
+{ 0x013D, 0x013D, 0x013E },
+{ 0x013E, 0x013D, 0x013E },
+{ 0x013F, 0x013F, 0x0140 },
+{ 0x0140, 0x013F, 0x0140 },
+{ 0x0141, 0x0141, 0x0142 },
+{ 0x0142, 0x0141, 0x0142 },
+{ 0x0143, 0x0143, 0x0144 },
+{ 0x0144, 0x0143, 0x0144 },
+{ 0x0145, 0x0145, 0x0146 },
+{ 0x0146, 0x0145, 0x0146 },
+{ 0x0147, 0x0147, 0x0148 },
+{ 0x0148, 0x0147, 0x0148 },
+{ 0x0149, 0x0149, 0x0149 },
+{ 0x014A, 0x014A, 0x014B },
+{ 0x014B, 0x014A, 0x014B },
+{ 0x014C, 0x014C, 0x014D },
+{ 0x014D, 0x014C, 0x014D },
+{ 0x014E, 0x014E, 0x014F },
+{ 0x014F, 0x014E, 0x014F },
+{ 0x0150, 0x0150, 0x0151 },
+{ 0x0151, 0x0150, 0x0151 },
+{ 0x0152, 0x0152, 0x0153 },
+{ 0x0153, 0x0152, 0x0153 },
+{ 0x0154, 0x0154, 0x0155 },
+{ 0x0155, 0x0154, 0x0155 },
+{ 0x0156, 0x0156, 0x0157 },
+{ 0x0157, 0x0156, 0x0157 },
+{ 0x0158, 0x0158, 0x0159 },
+{ 0x0159, 0x0158, 0x0159 },
+{ 0x015A, 0x015A, 0x015B },
+{ 0x015B, 0x015A, 0x015B },
+{ 0x015C, 0x015C, 0x015D },
+{ 0x015D, 0x015C, 0x015D },
+{ 0x015E, 0x015E, 0x015F },
+{ 0x015F, 0x015E, 0x015F },
+{ 0x0160, 0x0160, 0x0161 },
+{ 0x0161, 0x0160, 0x0161 },
+{ 0x0162, 0x0162, 0x0163 },
+{ 0x0163, 0x0162, 0x0163 },
+{ 0x0164, 0x0164, 0x0165 },
+{ 0x0165, 0x0164, 0x0165 },
+{ 0x0166, 0x0166, 0x0167 },
+{ 0x0167, 0x0166, 0x0167 },
+{ 0x0168, 0x0168, 0x0169 },
+{ 0x0169, 0x0168, 0x0169 },
+{ 0x016A, 0x016A, 0x016B },
+{ 0x016B, 0x016A, 0x016B },
+{ 0x016C, 0x016C, 0x016D },
+{ 0x016D, 0x016C, 0x016D },
+{ 0x016E, 0x016E, 0x016F },
+{ 0x016F, 0x016E, 0x016F },
+{ 0x0170, 0x0170, 0x0171 },
+{ 0x0171, 0x0170, 0x0171 },
+{ 0x0172, 0x0172, 0x0173 },
+{ 0x0173, 0x0172, 0x0173 },
+{ 0x0174, 0x0174, 0x0175 },
+{ 0x0175, 0x0174, 0x0175 },
+{ 0x0176, 0x0176, 0x0177 },
+{ 0x0177, 0x0176, 0x0177 },
+{ 0x0178, 0x0178, 0x00FF },
+{ 0x0179, 0x0179, 0x017A },
+{ 0x017A, 0x0179, 0x017A },
+{ 0x017B, 0x017B, 0x017C },
+{ 0x017C, 0x017B, 0x017C },
+{ 0x017D, 0x017D, 0x017E },
+{ 0x017E, 0x017D, 0x017E },
+{ 0x017F, 0x0053, 0x017F },
+{ 0x0180, 0x0180, 0x0180 },
+{ 0x0181, 0x0181, 0x0253 },
+{ 0x0182, 0x0182, 0x0183 },
+{ 0x0183, 0x0182, 0x0183 },
+{ 0x0184, 0x0184, 0x0185 },
+{ 0x0185, 0x0184, 0x0185 },
+{ 0x0186, 0x0186, 0x0254 },
+{ 0x0187, 0x0187, 0x0188 },
+{ 0x0188, 0x0187, 0x0188 },
+{ 0x0189, 0x0189, 0x0256 },
+{ 0x018A, 0x018A, 0x0257 },
+{ 0x018B, 0x018B, 0x018C },
+{ 0x018C, 0x018B, 0x018C },
+{ 0x018D, 0x018D, 0x018D },
+{ 0x018E, 0x018E, 0x01DD },
+{ 0x018F, 0x018F, 0x0259 },
+{ 0x0190, 0x0190, 0x025B },
+{ 0x0191, 0x0191, 0x0192 },
+{ 0x0192, 0x0191, 0x0192 },
+{ 0x0193, 0x0193, 0x0260 },
+{ 0x0194, 0x0194, 0x0263 },
+{ 0x0195, 0x01F6, 0x0195 },
+{ 0x0196, 0x0196, 0x0269 },
+{ 0x0197, 0x0197, 0x0268 },
+{ 0x0198, 0x0198, 0x0199 },
+{ 0x0199, 0x0198, 0x0199 },
+{ 0x019A, 0x023D, 0x019A },
+{ 0x019B, 0x019B, 0x019B },
+{ 0x019C, 0x019C, 0x026F },
+{ 0x019D, 0x019D, 0x0272 },
+{ 0x019E, 0x0220, 0x019E },
+{ 0x019F, 0x019F, 0x0275 },
+{ 0x01A0, 0x01A0, 0x01A1 },
+{ 0x01A1, 0x01A0, 0x01A1 },
+{ 0x01A2, 0x01A2, 0x01A3 },
+{ 0x01A3, 0x01A2, 0x01A3 },
+{ 0x01A4, 0x01A4, 0x01A5 },
+{ 0x01A5, 0x01A4, 0x01A5 },
+{ 0x01A6, 0x01A6, 0x0280 },
+{ 0x01A7, 0x01A7, 0x01A8 },
+{ 0x01A8, 0x01A7, 0x01A8 },
+{ 0x01A9, 0x01A9, 0x0283 },
+{ 0x01AA, 0x01AA, 0x01AA },
+{ 0x01AB, 0x01AB, 0x01AB },
+{ 0x01AC, 0x01AC, 0x01AD },
+{ 0x01AD, 0x01AC, 0x01AD },
+{ 0x01AE, 0x01AE, 0x0288 },
+{ 0x01AF, 0x01AF, 0x01B0 },
+{ 0x01B0, 0x01AF, 0x01B0 },
+{ 0x01B1, 0x01B1, 0x028A },
+{ 0x01B2, 0x01B2, 0x028B },
+{ 0x01B3, 0x01B3, 0x01B4 },
+{ 0x01B4, 0x01B3, 0x01B4 },
+{ 0x01B5, 0x01B5, 0x01B6 },
+{ 0x01B6, 0x01B5, 0x01B6 },
+{ 0x01B7, 0x01B7, 0x0292 },
+{ 0x01B8, 0x01B8, 0x01B9 },
+{ 0x01B9, 0x01B8, 0x01B9 },
+{ 0x01BA, 0x01BA, 0x01BA },
+{ 0x01BB, 0x01BB, 0x01BB },
+{ 0x01BC, 0x01BC, 0x01BD },
+{ 0x01BD, 0x01BC, 0x01BD },
+{ 0x01BE, 0x01BE, 0x01BE },
+{ 0x01BF, 0x01F7, 0x01BF },
+{ 0x01C0, 0x01C0, 0x01C0 },
+{ 0x01C1, 0x01C1, 0x01C1 },
+{ 0x01C2, 0x01C2, 0x01C2 },
+{ 0x01C3, 0x01C3, 0x01C3 },
+{ 0x01C4, 0x01C4, 0x01C6 },
+{ 0x01C5, 0x01C4, 0x01C6 },
+{ 0x01C6, 0x01C4, 0x01C6 },
+{ 0x01C7, 0x01C7, 0x01C9 },
+{ 0x01C8, 0x01C7, 0x01C9 },
+{ 0x01C9, 0x01C7, 0x01C9 },
+{ 0x01CA, 0x01CA, 0x01CC },
+{ 0x01CB, 0x01CA, 0x01CC },
+{ 0x01CC, 0x01CA, 0x01CC },
+{ 0x01CD, 0x01CD, 0x01CE },
+{ 0x01CE, 0x01CD, 0x01CE },
+{ 0x01CF, 0x01CF, 0x01D0 },
+{ 0x01D0, 0x01CF, 0x01D0 },
+{ 0x01D1, 0x01D1, 0x01D2 },
+{ 0x01D2, 0x01D1, 0x01D2 },
+{ 0x01D3, 0x01D3, 0x01D4 },
+{ 0x01D4, 0x01D3, 0x01D4 },
+{ 0x01D5, 0x01D5, 0x01D6 },
+{ 0x01D6, 0x01D5, 0x01D6 },
+{ 0x01D7, 0x01D7, 0x01D8 },
+{ 0x01D8, 0x01D7, 0x01D8 },
+{ 0x01D9, 0x01D9, 0x01DA },
+{ 0x01DA, 0x01D9, 0x01DA },
+{ 0x01DB, 0x01DB, 0x01DC },
+{ 0x01DC, 0x01DB, 0x01DC },
+{ 0x01DD, 0x018E, 0x01DD },
+{ 0x01DE, 0x01DE, 0x01DF },
+{ 0x01DF, 0x01DE, 0x01DF },
+{ 0x01E0, 0x01E0, 0x01E1 },
+{ 0x01E1, 0x01E0, 0x01E1 },
+{ 0x01E2, 0x01E2, 0x01E3 },
+{ 0x01E3, 0x01E2, 0x01E3 },
+{ 0x01E4, 0x01E4, 0x01E5 },
+{ 0x01E5, 0x01E4, 0x01E5 },
+{ 0x01E6, 0x01E6, 0x01E7 },
+{ 0x01E7, 0x01E6, 0x01E7 },
+{ 0x01E8, 0x01E8, 0x01E9 },
+{ 0x01E9, 0x01E8, 0x01E9 },
+{ 0x01EA, 0x01EA, 0x01EB },
+{ 0x01EB, 0x01EA, 0x01EB },
+{ 0x01EC, 0x01EC, 0x01ED },
+{ 0x01ED, 0x01EC, 0x01ED },
+{ 0x01EE, 0x01EE, 0x01EF },
+{ 0x01EF, 0x01EE, 0x01EF },
+{ 0x01F0, 0x01F0, 0x01F0 },
+{ 0x01F1, 0x01F1, 0x01F3 },
+{ 0x01F2, 0x01F1, 0x01F3 },
+{ 0x01F3, 0x01F1, 0x01F3 },
+{ 0x01F4, 0x01F4, 0x01F5 },
+{ 0x01F5, 0x01F4, 0x01F5 },
+{ 0x01F6, 0x01F6, 0x0195 },
+{ 0x01F7, 0x01F7, 0x01BF },
+{ 0x01F8, 0x01F8, 0x01F9 },
+{ 0x01F9, 0x01F8, 0x01F9 },
+{ 0x01FA, 0x01FA, 0x01FB },
+{ 0x01FB, 0x01FA, 0x01FB },
+{ 0x01FC, 0x01FC, 0x01FD },
+{ 0x01FD, 0x01FC, 0x01FD },
+{ 0x01FE, 0x01FE, 0x01FF },
+{ 0x01FF, 0x01FE, 0x01FF },
+{ 0x0200, 0x0200, 0x0201 },
+{ 0x0201, 0x0200, 0x0201 },
+{ 0x0202, 0x0202, 0x0203 },
+{ 0x0203, 0x0202, 0x0203 },
+{ 0x0204, 0x0204, 0x0205 },
+{ 0x0205, 0x0204, 0x0205 },
+{ 0x0206, 0x0206, 0x0207 },
+{ 0x0207, 0x0206, 0x0207 },
+{ 0x0208, 0x0208, 0x0209 },
+{ 0x0209, 0x0208, 0x0209 },
+{ 0x020A, 0x020A, 0x020B },
+{ 0x020B, 0x020A, 0x020B },
+{ 0x020C, 0x020C, 0x020D },
+{ 0x020D, 0x020C, 0x020D },
+{ 0x020E, 0x020E, 0x020F },
+{ 0x020F, 0x020E, 0x020F },
+{ 0x0210, 0x0210, 0x0211 },
+{ 0x0211, 0x0210, 0x0211 },
+{ 0x0212, 0x0212, 0x0213 },
+{ 0x0213, 0x0212, 0x0213 },
+{ 0x0214, 0x0214, 0x0215 },
+{ 0x0215, 0x0214, 0x0215 },
+{ 0x0216, 0x0216, 0x0217 },
+{ 0x0217, 0x0216, 0x0217 },
+{ 0x0218, 0x0218, 0x0219 },
+{ 0x0219, 0x0218, 0x0219 },
+{ 0x021A, 0x021A, 0x021B },
+{ 0x021B, 0x021A, 0x021B },
+{ 0x021C, 0x021C, 0x021D },
+{ 0x021D, 0x021C, 0x021D },
+{ 0x021E, 0x021E, 0x021F },
+{ 0x021F, 0x021E, 0x021F },
+{ 0x0220, 0x0220, 0x019E },
+{ 0x0221, 0x0221, 0x0221 },
+{ 0x0222, 0x0222, 0x0223 },
+{ 0x0223, 0x0222, 0x0223 },
+{ 0x0224, 0x0224, 0x0225 },
+{ 0x0225, 0x0224, 0x0225 },
+{ 0x0226, 0x0226, 0x0227 },
+{ 0x0227, 0x0226, 0x0227 },
+{ 0x0228, 0x0228, 0x0229 },
+{ 0x0229, 0x0228, 0x0229 },
+{ 0x022A, 0x022A, 0x022B },
+{ 0x022B, 0x022A, 0x022B },
+{ 0x022C, 0x022C, 0x022D },
+{ 0x022D, 0x022C, 0x022D },
+{ 0x022E, 0x022E, 0x022F },
+{ 0x022F, 0x022E, 0x022F },
+{ 0x0230, 0x0230, 0x0231 },
+{ 0x0231, 0x0230, 0x0231 },
+{ 0x0232, 0x0232, 0x0233 },
+{ 0x0233, 0x0232, 0x0233 },
+{ 0x0234, 0x0234, 0x0234 },
+{ 0x0235, 0x0235, 0x0235 },
+{ 0x0236, 0x0236, 0x0236 },
+{ 0x0237, 0x0237, 0x0237 },
+{ 0x0238, 0x0238, 0x0238 },
+{ 0x0239, 0x0239, 0x0239 },
+{ 0x023A, 0x023A, 0x023A },
+{ 0x023B, 0x023B, 0x023C },
+{ 0x023C, 0x023B, 0x023C },
+{ 0x023D, 0x023D, 0x019A },
+{ 0x023E, 0x023E, 0x023E },
+{ 0x023F, 0x023F, 0x023F },
+{ 0x0240, 0x0240, 0x0240 },
+{ 0x0241, 0x0241, 0x0294 },
+{ 0x0250, 0x0250, 0x0250 },
+{ 0x0251, 0x0251, 0x0251 },
+{ 0x0252, 0x0252, 0x0252 },
+{ 0x0253, 0x0181, 0x0253 },
+{ 0x0254, 0x0186, 0x0254 },
+{ 0x0255, 0x0255, 0x0255 },
+{ 0x0256, 0x0189, 0x0256 },
+{ 0x0257, 0x018A, 0x0257 },
+{ 0x0258, 0x0258, 0x0258 },
+{ 0x0259, 0x018F, 0x0259 },
+{ 0x025A, 0x025A, 0x025A },
+{ 0x025B, 0x0190, 0x025B },
+{ 0x025C, 0x025C, 0x025C },
+{ 0x025D, 0x025D, 0x025D },
+{ 0x025E, 0x025E, 0x025E },
+{ 0x025F, 0x025F, 0x025F },
+{ 0x0260, 0x0193, 0x0260 },
+{ 0x0261, 0x0261, 0x0261 },
+{ 0x0262, 0x0262, 0x0262 },
+{ 0x0263, 0x0194, 0x0263 },
+{ 0x0264, 0x0264, 0x0264 },
+{ 0x0265, 0x0265, 0x0265 },
+{ 0x0266, 0x0266, 0x0266 },
+{ 0x0267, 0x0267, 0x0267 },
+{ 0x0268, 0x0197, 0x0268 },
+{ 0x0269, 0x0196, 0x0269 },
+{ 0x026A, 0x026A, 0x026A },
+{ 0x026B, 0x026B, 0x026B },
+{ 0x026C, 0x026C, 0x026C },
+{ 0x026D, 0x026D, 0x026D },
+{ 0x026E, 0x026E, 0x026E },
+{ 0x026F, 0x019C, 0x026F },
+{ 0x0270, 0x0270, 0x0270 },
+{ 0x0271, 0x0271, 0x0271 },
+{ 0x0272, 0x019D, 0x0272 },
+{ 0x0273, 0x0273, 0x0273 },
+{ 0x0274, 0x0274, 0x0274 },
+{ 0x0275, 0x019F, 0x0275 },
+{ 0x0276, 0x0276, 0x0276 },
+{ 0x0277, 0x0277, 0x0277 },
+{ 0x0278, 0x0278, 0x0278 },
+{ 0x0279, 0x0279, 0x0279 },
+{ 0x027A, 0x027A, 0x027A },
+{ 0x027B, 0x027B, 0x027B },
+{ 0x027C, 0x027C, 0x027C },
+{ 0x027D, 0x027D, 0x027D },
+{ 0x027E, 0x027E, 0x027E },
+{ 0x027F, 0x027F, 0x027F },
+{ 0x0280, 0x01A6, 0x0280 },
+{ 0x0281, 0x0281, 0x0281 },
+{ 0x0282, 0x0282, 0x0282 },
+{ 0x0283, 0x01A9, 0x0283 },
+{ 0x0284, 0x0284, 0x0284 },
+{ 0x0285, 0x0285, 0x0285 },
+{ 0x0286, 0x0286, 0x0286 },
+{ 0x0287, 0x0287, 0x0287 },
+{ 0x0288, 0x01AE, 0x0288 },
+{ 0x0289, 0x0289, 0x0289 },
+{ 0x028A, 0x01B1, 0x028A },
+{ 0x028B, 0x01B2, 0x028B },
+{ 0x028C, 0x028C, 0x028C },
+{ 0x028D, 0x028D, 0x028D },
+{ 0x028E, 0x028E, 0x028E },
+{ 0x028F, 0x028F, 0x028F },
+{ 0x0290, 0x0290, 0x0290 },
+{ 0x0291, 0x0291, 0x0291 },
+{ 0x0292, 0x01B7, 0x0292 },
+{ 0x0293, 0x0293, 0x0293 },
+{ 0x0294, 0x0241, 0x0294 },
+{ 0x0295, 0x0295, 0x0295 },
+{ 0x0296, 0x0296, 0x0296 },
+{ 0x0297, 0x0297, 0x0297 },
+{ 0x0298, 0x0298, 0x0298 },
+{ 0x0299, 0x0299, 0x0299 },
+{ 0x029A, 0x029A, 0x029A },
+{ 0x029B, 0x029B, 0x029B },
+{ 0x029C, 0x029C, 0x029C },
+{ 0x029D, 0x029D, 0x029D },
+{ 0x029E, 0x029E, 0x029E },
+{ 0x029F, 0x029F, 0x029F },
+{ 0x02A0, 0x02A0, 0x02A0 },
+{ 0x02A1, 0x02A1, 0x02A1 },
+{ 0x02A2, 0x02A2, 0x02A2 },
+{ 0x02A3, 0x02A3, 0x02A3 },
+{ 0x02A4, 0x02A4, 0x02A4 },
+{ 0x02A5, 0x02A5, 0x02A5 },
+{ 0x02A6, 0x02A6, 0x02A6 },
+{ 0x02A7, 0x02A7, 0x02A7 },
+{ 0x02A8, 0x02A8, 0x02A8 },
+{ 0x02A9, 0x02A9, 0x02A9 },
+{ 0x02AA, 0x02AA, 0x02AA },
+{ 0x02AB, 0x02AB, 0x02AB },
+{ 0x02AC, 0x02AC, 0x02AC },
+{ 0x02AD, 0x02AD, 0x02AD },
+{ 0x02AE, 0x02AE, 0x02AE },
+{ 0x02AF, 0x02AF, 0x02AF },
+{ 0x02B0, 0x02B0, 0x02B0 },
+{ 0x02B1, 0x02B1, 0x02B1 },
+{ 0x02B2, 0x02B2, 0x02B2 },
+{ 0x02B3, 0x02B3, 0x02B3 },
+{ 0x02B4, 0x02B4, 0x02B4 },
+{ 0x02B5, 0x02B5, 0x02B5 },
+{ 0x02B6, 0x02B6, 0x02B6 },
+{ 0x02B7, 0x02B7, 0x02B7 },
+{ 0x02B8, 0x02B8, 0x02B8 },
+{ 0x02B9, 0x02B9, 0x02B9 },
+{ 0x02BA, 0x02BA, 0x02BA },
+{ 0x02BB, 0x02BB, 0x02BB },
+{ 0x02BC, 0x02BC, 0x02BC },
+{ 0x02BD, 0x02BD, 0x02BD },
+{ 0x02BE, 0x02BE, 0x02BE },
+{ 0x02BF, 0x02BF, 0x02BF },
+{ 0x02C0, 0x02C0, 0x02C0 },
+{ 0x02C1, 0x02C1, 0x02C1 },
+{ 0x02C6, 0x02C6, 0x02C6 },
+{ 0x02C7, 0x02C7, 0x02C7 },
+{ 0x02C8, 0x02C8, 0x02C8 },
+{ 0x02C9, 0x02C9, 0x02C9 },
+{ 0x02CA, 0x02CA, 0x02CA },
+{ 0x02CB, 0x02CB, 0x02CB },
+{ 0x02CC, 0x02CC, 0x02CC },
+{ 0x02CD, 0x02CD, 0x02CD },
+{ 0x02CE, 0x02CE, 0x02CE },
+{ 0x02CF, 0x02CF, 0x02CF },
+{ 0x02D0, 0x02D0, 0x02D0 },
+{ 0x02D1, 0x02D1, 0x02D1 },
+{ 0x02E0, 0x02E0, 0x02E0 },
+{ 0x02E1, 0x02E1, 0x02E1 },
+{ 0x02E2, 0x02E2, 0x02E2 },
+{ 0x02E3, 0x02E3, 0x02E3 },
+{ 0x02E4, 0x02E4, 0x02E4 },
+{ 0x02EE, 0x02EE, 0x02EE },
+{ 0x0300, 0x0300, 0x0300 },
+{ 0x0301, 0x0301, 0x0301 },
+{ 0x0302, 0x0302, 0x0302 },
+{ 0x0303, 0x0303, 0x0303 },
+{ 0x0304, 0x0304, 0x0304 },
+{ 0x0305, 0x0305, 0x0305 },
+{ 0x0306, 0x0306, 0x0306 },
+{ 0x0307, 0x0307, 0x0307 },
+{ 0x0308, 0x0308, 0x0308 },
+{ 0x0309, 0x0309, 0x0309 },
+{ 0x030A, 0x030A, 0x030A },
+{ 0x030B, 0x030B, 0x030B },
+{ 0x030C, 0x030C, 0x030C },
+{ 0x030D, 0x030D, 0x030D },
+{ 0x030E, 0x030E, 0x030E },
+{ 0x030F, 0x030F, 0x030F },
+{ 0x0310, 0x0310, 0x0310 },
+{ 0x0311, 0x0311, 0x0311 },
+{ 0x0312, 0x0312, 0x0312 },
+{ 0x0313, 0x0313, 0x0313 },
+{ 0x0314, 0x0314, 0x0314 },
+{ 0x0315, 0x0315, 0x0315 },
+{ 0x0316, 0x0316, 0x0316 },
+{ 0x0317, 0x0317, 0x0317 },
+{ 0x0318, 0x0318, 0x0318 },
+{ 0x0319, 0x0319, 0x0319 },
+{ 0x031A, 0x031A, 0x031A },
+{ 0x031B, 0x031B, 0x031B },
+{ 0x031C, 0x031C, 0x031C },
+{ 0x031D, 0x031D, 0x031D },
+{ 0x031E, 0x031E, 0x031E },
+{ 0x031F, 0x031F, 0x031F },
+{ 0x0320, 0x0320, 0x0320 },
+{ 0x0321, 0x0321, 0x0321 },
+{ 0x0322, 0x0322, 0x0322 },
+{ 0x0323, 0x0323, 0x0323 },
+{ 0x0324, 0x0324, 0x0324 },
+{ 0x0325, 0x0325, 0x0325 },
+{ 0x0326, 0x0326, 0x0326 },
+{ 0x0327, 0x0327, 0x0327 },
+{ 0x0328, 0x0328, 0x0328 },
+{ 0x0329, 0x0329, 0x0329 },
+{ 0x032A, 0x032A, 0x032A },
+{ 0x032B, 0x032B, 0x032B },
+{ 0x032C, 0x032C, 0x032C },
+{ 0x032D, 0x032D, 0x032D },
+{ 0x032E, 0x032E, 0x032E },
+{ 0x032F, 0x032F, 0x032F },
+{ 0x0330, 0x0330, 0x0330 },
+{ 0x0331, 0x0331, 0x0331 },
+{ 0x0332, 0x0332, 0x0332 },
+{ 0x0333, 0x0333, 0x0333 },
+{ 0x0334, 0x0334, 0x0334 },
+{ 0x0335, 0x0335, 0x0335 },
+{ 0x0336, 0x0336, 0x0336 },
+{ 0x0337, 0x0337, 0x0337 },
+{ 0x0338, 0x0338, 0x0338 },
+{ 0x0339, 0x0339, 0x0339 },
+{ 0x033A, 0x033A, 0x033A },
+{ 0x033B, 0x033B, 0x033B },
+{ 0x033C, 0x033C, 0x033C },
+{ 0x033D, 0x033D, 0x033D },
+{ 0x033E, 0x033E, 0x033E },
+{ 0x033F, 0x033F, 0x033F },
+{ 0x0340, 0x0340, 0x0340 },
+{ 0x0341, 0x0341, 0x0341 },
+{ 0x0342, 0x0342, 0x0342 },
+{ 0x0343, 0x0343, 0x0343 },
+{ 0x0344, 0x0344, 0x0344 },
+{ 0x0345, 0x0399, 0x0345 },
+{ 0x0346, 0x0346, 0x0346 },
+{ 0x0347, 0x0347, 0x0347 },
+{ 0x0348, 0x0348, 0x0348 },
+{ 0x0349, 0x0349, 0x0349 },
+{ 0x034A, 0x034A, 0x034A },
+{ 0x034B, 0x034B, 0x034B },
+{ 0x034C, 0x034C, 0x034C },
+{ 0x034D, 0x034D, 0x034D },
+{ 0x034E, 0x034E, 0x034E },
+{ 0x034F, 0x034F, 0x034F },
+{ 0x0350, 0x0350, 0x0350 },
+{ 0x0351, 0x0351, 0x0351 },
+{ 0x0352, 0x0352, 0x0352 },
+{ 0x0353, 0x0353, 0x0353 },
+{ 0x0354, 0x0354, 0x0354 },
+{ 0x0355, 0x0355, 0x0355 },
+{ 0x0356, 0x0356, 0x0356 },
+{ 0x0357, 0x0357, 0x0357 },
+{ 0x0358, 0x0358, 0x0358 },
+{ 0x0359, 0x0359, 0x0359 },
+{ 0x035A, 0x035A, 0x035A },
+{ 0x035B, 0x035B, 0x035B },
+{ 0x035C, 0x035C, 0x035C },
+{ 0x035D, 0x035D, 0x035D },
+{ 0x035E, 0x035E, 0x035E },
+{ 0x035F, 0x035F, 0x035F },
+{ 0x0360, 0x0360, 0x0360 },
+{ 0x0361, 0x0361, 0x0361 },
+{ 0x0362, 0x0362, 0x0362 },
+{ 0x0363, 0x0363, 0x0363 },
+{ 0x0364, 0x0364, 0x0364 },
+{ 0x0365, 0x0365, 0x0365 },
+{ 0x0366, 0x0366, 0x0366 },
+{ 0x0367, 0x0367, 0x0367 },
+{ 0x0368, 0x0368, 0x0368 },
+{ 0x0369, 0x0369, 0x0369 },
+{ 0x036A, 0x036A, 0x036A },
+{ 0x036B, 0x036B, 0x036B },
+{ 0x036C, 0x036C, 0x036C },
+{ 0x036D, 0x036D, 0x036D },
+{ 0x036E, 0x036E, 0x036E },
+{ 0x036F, 0x036F, 0x036F },
+{ 0x037A, 0x037A, 0x037A },
+{ 0x0386, 0x0386, 0x03AC },
+{ 0x0388, 0x0388, 0x03AD },
+{ 0x0389, 0x0389, 0x03AE },
+{ 0x038A, 0x038A, 0x03AF },
+{ 0x038C, 0x038C, 0x03CC },
+{ 0x038E, 0x038E, 0x03CD },
+{ 0x038F, 0x038F, 0x03CE },
+{ 0x0390, 0x0390, 0x0390 },
+{ 0x0391, 0x0391, 0x03B1 },
+{ 0x0392, 0x0392, 0x03B2 },
+{ 0x0393, 0x0393, 0x03B3 },
+{ 0x0394, 0x0394, 0x03B4 },
+{ 0x0395, 0x0395, 0x03B5 },
+{ 0x0396, 0x0396, 0x03B6 },
+{ 0x0397, 0x0397, 0x03B7 },
+{ 0x0398, 0x0398, 0x03B8 },
+{ 0x0399, 0x0399, 0x03B9 },
+{ 0x039A, 0x039A, 0x03BA },
+{ 0x039B, 0x039B, 0x03BB },
+{ 0x039C, 0x039C, 0x03BC },
+{ 0x039D, 0x039D, 0x03BD },
+{ 0x039E, 0x039E, 0x03BE },
+{ 0x039F, 0x039F, 0x03BF },
+{ 0x03A0, 0x03A0, 0x03C0 },
+{ 0x03A1, 0x03A1, 0x03C1 },
+{ 0x03A3, 0x03A3, 0x03C3 },
+{ 0x03A4, 0x03A4, 0x03C4 },
+{ 0x03A5, 0x03A5, 0x03C5 },
+{ 0x03A6, 0x03A6, 0x03C6 },
+{ 0x03A7, 0x03A7, 0x03C7 },
+{ 0x03A8, 0x03A8, 0x03C8 },
+{ 0x03A9, 0x03A9, 0x03C9 },
+{ 0x03AA, 0x03AA, 0x03CA },
+{ 0x03AB, 0x03AB, 0x03CB },
+{ 0x03AC, 0x0386, 0x03AC },
+{ 0x03AD, 0x0388, 0x03AD },
+{ 0x03AE, 0x0389, 0x03AE },
+{ 0x03AF, 0x038A, 0x03AF },
+{ 0x03B0, 0x03B0, 0x03B0 },
+{ 0x03B1, 0x0391, 0x03B1 },
+{ 0x03B2, 0x0392, 0x03B2 },
+{ 0x03B3, 0x0393, 0x03B3 },
+{ 0x03B4, 0x0394, 0x03B4 },
+{ 0x03B5, 0x0395, 0x03B5 },
+{ 0x03B6, 0x0396, 0x03B6 },
+{ 0x03B7, 0x0397, 0x03B7 },
+{ 0x03B8, 0x0398, 0x03B8 },
+{ 0x03B9, 0x0399, 0x03B9 },
+{ 0x03BA, 0x039A, 0x03BA },
+{ 0x03BB, 0x039B, 0x03BB },
+{ 0x03BC, 0x039C, 0x03BC },
+{ 0x03BD, 0x039D, 0x03BD },
+{ 0x03BE, 0x039E, 0x03BE },
+{ 0x03BF, 0x039F, 0x03BF },
+{ 0x03C0, 0x03A0, 0x03C0 },
+{ 0x03C1, 0x03A1, 0x03C1 },
+{ 0x03C2, 0x03A3, 0x03C2 },
+{ 0x03C3, 0x03A3, 0x03C3 },
+{ 0x03C4, 0x03A4, 0x03C4 },
+{ 0x03C5, 0x03A5, 0x03C5 },
+{ 0x03C6, 0x03A6, 0x03C6 },
+{ 0x03C7, 0x03A7, 0x03C7 },
+{ 0x03C8, 0x03A8, 0x03C8 },
+{ 0x03C9, 0x03A9, 0x03C9 },
+{ 0x03CA, 0x03AA, 0x03CA },
+{ 0x03CB, 0x03AB, 0x03CB },
+{ 0x03CC, 0x038C, 0x03CC },
+{ 0x03CD, 0x038E, 0x03CD },
+{ 0x03CE, 0x038F, 0x03CE },
+{ 0x03D0, 0x0392, 0x03D0 },
+{ 0x03D1, 0x0398, 0x03D1 },
+{ 0x03D2, 0x03D2, 0x03D2 },
+{ 0x03D3, 0x03D3, 0x03D3 },
+{ 0x03D4, 0x03D4, 0x03D4 },
+{ 0x03D5, 0x03A6, 0x03D5 },
+{ 0x03D6, 0x03A0, 0x03D6 },
+{ 0x03D7, 0x03D7, 0x03D7 },
+{ 0x03D8, 0x03D8, 0x03D9 },
+{ 0x03D9, 0x03D8, 0x03D9 },
+{ 0x03DA, 0x03DA, 0x03DB },
+{ 0x03DB, 0x03DA, 0x03DB },
+{ 0x03DC, 0x03DC, 0x03DD },
+{ 0x03DD, 0x03DC, 0x03DD },
+{ 0x03DE, 0x03DE, 0x03DF },
+{ 0x03DF, 0x03DE, 0x03DF },
+{ 0x03E0, 0x03E0, 0x03E1 },
+{ 0x03E1, 0x03E0, 0x03E1 },
+{ 0x03E2, 0x03E2, 0x03E3 },
+{ 0x03E3, 0x03E2, 0x03E3 },
+{ 0x03E4, 0x03E4, 0x03E5 },
+{ 0x03E5, 0x03E4, 0x03E5 },
+{ 0x03E6, 0x03E6, 0x03E7 },
+{ 0x03E7, 0x03E6, 0x03E7 },
+{ 0x03E8, 0x03E8, 0x03E9 },
+{ 0x03E9, 0x03E8, 0x03E9 },
+{ 0x03EA, 0x03EA, 0x03EB },
+{ 0x03EB, 0x03EA, 0x03EB },
+{ 0x03EC, 0x03EC, 0x03ED },
+{ 0x03ED, 0x03EC, 0x03ED },
+{ 0x03EE, 0x03EE, 0x03EF },
+{ 0x03EF, 0x03EE, 0x03EF },
+{ 0x03F0, 0x039A, 0x03F0 },
+{ 0x03F1, 0x03A1, 0x03F1 },
+{ 0x03F2, 0x03F9, 0x03F2 },
+{ 0x03F3, 0x03F3, 0x03F3 },
+{ 0x03F4, 0x03F4, 0x03B8 },
+{ 0x03F5, 0x0395, 0x03F5 },
+{ 0x03F7, 0x03F7, 0x03F8 },
+{ 0x03F8, 0x03F7, 0x03F8 },
+{ 0x03F9, 0x03F9, 0x03F2 },
+{ 0x03FA, 0x03FA, 0x03FB },
+{ 0x03FB, 0x03FA, 0x03FB },
+{ 0x03FC, 0x03FC, 0x03FC },
+{ 0x03FD, 0x03FD, 0x03FD },
+{ 0x03FE, 0x03FE, 0x03FE },
+{ 0x03FF, 0x03FF, 0x03FF },
+{ 0x0400, 0x0400, 0x0450 },
+{ 0x0401, 0x0401, 0x0451 },
+{ 0x0402, 0x0402, 0x0452 },
+{ 0x0403, 0x0403, 0x0453 },
+{ 0x0404, 0x0404, 0x0454 },
+{ 0x0405, 0x0405, 0x0455 },
+{ 0x0406, 0x0406, 0x0456 },
+{ 0x0407, 0x0407, 0x0457 },
+{ 0x0408, 0x0408, 0x0458 },
+{ 0x0409, 0x0409, 0x0459 },
+{ 0x040A, 0x040A, 0x045A },
+{ 0x040B, 0x040B, 0x045B },
+{ 0x040C, 0x040C, 0x045C },
+{ 0x040D, 0x040D, 0x045D },
+{ 0x040E, 0x040E, 0x045E },
+{ 0x040F, 0x040F, 0x045F },
+{ 0x0410, 0x0410, 0x0430 },
+{ 0x0411, 0x0411, 0x0431 },
+{ 0x0412, 0x0412, 0x0432 },
+{ 0x0413, 0x0413, 0x0433 },
+{ 0x0414, 0x0414, 0x0434 },
+{ 0x0415, 0x0415, 0x0435 },
+{ 0x0416, 0x0416, 0x0436 },
+{ 0x0417, 0x0417, 0x0437 },
+{ 0x0418, 0x0418, 0x0438 },
+{ 0x0419, 0x0419, 0x0439 },
+{ 0x041A, 0x041A, 0x043A },
+{ 0x041B, 0x041B, 0x043B },
+{ 0x041C, 0x041C, 0x043C },
+{ 0x041D, 0x041D, 0x043D },
+{ 0x041E, 0x041E, 0x043E },
+{ 0x041F, 0x041F, 0x043F },
+{ 0x0420, 0x0420, 0x0440 },
+{ 0x0421, 0x0421, 0x0441 },
+{ 0x0422, 0x0422, 0x0442 },
+{ 0x0423, 0x0423, 0x0443 },
+{ 0x0424, 0x0424, 0x0444 },
+{ 0x0425, 0x0425, 0x0445 },
+{ 0x0426, 0x0426, 0x0446 },
+{ 0x0427, 0x0427, 0x0447 },
+{ 0x0428, 0x0428, 0x0448 },
+{ 0x0429, 0x0429, 0x0449 },
+{ 0x042A, 0x042A, 0x044A },
+{ 0x042B, 0x042B, 0x044B },
+{ 0x042C, 0x042C, 0x044C },
+{ 0x042D, 0x042D, 0x044D },
+{ 0x042E, 0x042E, 0x044E },
+{ 0x042F, 0x042F, 0x044F },
+{ 0x0430, 0x0410, 0x0430 },
+{ 0x0431, 0x0411, 0x0431 },
+{ 0x0432, 0x0412, 0x0432 },
+{ 0x0433, 0x0413, 0x0433 },
+{ 0x0434, 0x0414, 0x0434 },
+{ 0x0435, 0x0415, 0x0435 },
+{ 0x0436, 0x0416, 0x0436 },
+{ 0x0437, 0x0417, 0x0437 },
+{ 0x0438, 0x0418, 0x0438 },
+{ 0x0439, 0x0419, 0x0439 },
+{ 0x043A, 0x041A, 0x043A },
+{ 0x043B, 0x041B, 0x043B },
+{ 0x043C, 0x041C, 0x043C },
+{ 0x043D, 0x041D, 0x043D },
+{ 0x043E, 0x041E, 0x043E },
+{ 0x043F, 0x041F, 0x043F },
+{ 0x0440, 0x0420, 0x0440 },
+{ 0x0441, 0x0421, 0x0441 },
+{ 0x0442, 0x0422, 0x0442 },
+{ 0x0443, 0x0423, 0x0443 },
+{ 0x0444, 0x0424, 0x0444 },
+{ 0x0445, 0x0425, 0x0445 },
+{ 0x0446, 0x0426, 0x0446 },
+{ 0x0447, 0x0427, 0x0447 },
+{ 0x0448, 0x0428, 0x0448 },
+{ 0x0449, 0x0429, 0x0449 },
+{ 0x044A, 0x042A, 0x044A },
+{ 0x044B, 0x042B, 0x044B },
+{ 0x044C, 0x042C, 0x044C },
+{ 0x044D, 0x042D, 0x044D },
+{ 0x044E, 0x042E, 0x044E },
+{ 0x044F, 0x042F, 0x044F },
+{ 0x0450, 0x0400, 0x0450 },
+{ 0x0451, 0x0401, 0x0451 },
+{ 0x0452, 0x0402, 0x0452 },
+{ 0x0453, 0x0403, 0x0453 },
+{ 0x0454, 0x0404, 0x0454 },
+{ 0x0455, 0x0405, 0x0455 },
+{ 0x0456, 0x0406, 0x0456 },
+{ 0x0457, 0x0407, 0x0457 },
+{ 0x0458, 0x0408, 0x0458 },
+{ 0x0459, 0x0409, 0x0459 },
+{ 0x045A, 0x040A, 0x045A },
+{ 0x045B, 0x040B, 0x045B },
+{ 0x045C, 0x040C, 0x045C },
+{ 0x045D, 0x040D, 0x045D },
+{ 0x045E, 0x040E, 0x045E },
+{ 0x045F, 0x040F, 0x045F },
+{ 0x0460, 0x0460, 0x0461 },
+{ 0x0461, 0x0460, 0x0461 },
+{ 0x0462, 0x0462, 0x0463 },
+{ 0x0463, 0x0462, 0x0463 },
+{ 0x0464, 0x0464, 0x0465 },
+{ 0x0465, 0x0464, 0x0465 },
+{ 0x0466, 0x0466, 0x0467 },
+{ 0x0467, 0x0466, 0x0467 },
+{ 0x0468, 0x0468, 0x0469 },
+{ 0x0469, 0x0468, 0x0469 },
+{ 0x046A, 0x046A, 0x046B },
+{ 0x046B, 0x046A, 0x046B },
+{ 0x046C, 0x046C, 0x046D },
+{ 0x046D, 0x046C, 0x046D },
+{ 0x046E, 0x046E, 0x046F },
+{ 0x046F, 0x046E, 0x046F },
+{ 0x0470, 0x0470, 0x0471 },
+{ 0x0471, 0x0470, 0x0471 },
+{ 0x0472, 0x0472, 0x0473 },
+{ 0x0473, 0x0472, 0x0473 },
+{ 0x0474, 0x0474, 0x0475 },
+{ 0x0475, 0x0474, 0x0475 },
+{ 0x0476, 0x0476, 0x0477 },
+{ 0x0477, 0x0476, 0x0477 },
+{ 0x0478, 0x0478, 0x0479 },
+{ 0x0479, 0x0478, 0x0479 },
+{ 0x047A, 0x047A, 0x047B },
+{ 0x047B, 0x047A, 0x047B },
+{ 0x047C, 0x047C, 0x047D },
+{ 0x047D, 0x047C, 0x047D },
+{ 0x047E, 0x047E, 0x047F },
+{ 0x047F, 0x047E, 0x047F },
+{ 0x0480, 0x0480, 0x0481 },
+{ 0x0481, 0x0480, 0x0481 },
+{ 0x0483, 0x0483, 0x0483 },
+{ 0x0484, 0x0484, 0x0484 },
+{ 0x0485, 0x0485, 0x0485 },
+{ 0x0486, 0x0486, 0x0486 },
+{ 0x048A, 0x048A, 0x048B },
+{ 0x048B, 0x048A, 0x048B },
+{ 0x048C, 0x048C, 0x048D },
+{ 0x048D, 0x048C, 0x048D },
+{ 0x048E, 0x048E, 0x048F },
+{ 0x048F, 0x048E, 0x048F },
+{ 0x0490, 0x0490, 0x0491 },
+{ 0x0491, 0x0490, 0x0491 },
+{ 0x0492, 0x0492, 0x0493 },
+{ 0x0493, 0x0492, 0x0493 },
+{ 0x0494, 0x0494, 0x0495 },
+{ 0x0495, 0x0494, 0x0495 },
+{ 0x0496, 0x0496, 0x0497 },
+{ 0x0497, 0x0496, 0x0497 },
+{ 0x0498, 0x0498, 0x0499 },
+{ 0x0499, 0x0498, 0x0499 },
+{ 0x049A, 0x049A, 0x049B },
+{ 0x049B, 0x049A, 0x049B },
+{ 0x049C, 0x049C, 0x049D },
+{ 0x049D, 0x049C, 0x049D },
+{ 0x049E, 0x049E, 0x049F },
+{ 0x049F, 0x049E, 0x049F },
+{ 0x04A0, 0x04A0, 0x04A1 },
+{ 0x04A1, 0x04A0, 0x04A1 },
+{ 0x04A2, 0x04A2, 0x04A3 },
+{ 0x04A3, 0x04A2, 0x04A3 },
+{ 0x04A4, 0x04A4, 0x04A5 },
+{ 0x04A5, 0x04A4, 0x04A5 },
+{ 0x04A6, 0x04A6, 0x04A7 },
+{ 0x04A7, 0x04A6, 0x04A7 },
+{ 0x04A8, 0x04A8, 0x04A9 },
+{ 0x04A9, 0x04A8, 0x04A9 },
+{ 0x04AA, 0x04AA, 0x04AB },
+{ 0x04AB, 0x04AA, 0x04AB },
+{ 0x04AC, 0x04AC, 0x04AD },
+{ 0x04AD, 0x04AC, 0x04AD },
+{ 0x04AE, 0x04AE, 0x04AF },
+{ 0x04AF, 0x04AE, 0x04AF },
+{ 0x04B0, 0x04B0, 0x04B1 },
+{ 0x04B1, 0x04B0, 0x04B1 },
+{ 0x04B2, 0x04B2, 0x04B3 },
+{ 0x04B3, 0x04B2, 0x04B3 },
+{ 0x04B4, 0x04B4, 0x04B5 },
+{ 0x04B5, 0x04B4, 0x04B5 },
+{ 0x04B6, 0x04B6, 0x04B7 },
+{ 0x04B7, 0x04B6, 0x04B7 },
+{ 0x04B8, 0x04B8, 0x04B9 },
+{ 0x04B9, 0x04B8, 0x04B9 },
+{ 0x04BA, 0x04BA, 0x04BB },
+{ 0x04BB, 0x04BA, 0x04BB },
+{ 0x04BC, 0x04BC, 0x04BD },
+{ 0x04BD, 0x04BC, 0x04BD },
+{ 0x04BE, 0x04BE, 0x04BF },
+{ 0x04BF, 0x04BE, 0x04BF },
+{ 0x04C0, 0x04C0, 0x04C0 },
+{ 0x04C1, 0x04C1, 0x04C2 },
+{ 0x04C2, 0x04C1, 0x04C2 },
+{ 0x04C3, 0x04C3, 0x04C4 },
+{ 0x04C4, 0x04C3, 0x04C4 },
+{ 0x04C5, 0x04C5, 0x04C6 },
+{ 0x04C6, 0x04C5, 0x04C6 },
+{ 0x04C7, 0x04C7, 0x04C8 },
+{ 0x04C8, 0x04C7, 0x04C8 },
+{ 0x04C9, 0x04C9, 0x04CA },
+{ 0x04CA, 0x04C9, 0x04CA },
+{ 0x04CB, 0x04CB, 0x04CC },
+{ 0x04CC, 0x04CB, 0x04CC },
+{ 0x04CD, 0x04CD, 0x04CE },
+{ 0x04CE, 0x04CD, 0x04CE },
+{ 0x04D0, 0x04D0, 0x04D1 },
+{ 0x04D1, 0x04D0, 0x04D1 },
+{ 0x04D2, 0x04D2, 0x04D3 },
+{ 0x04D3, 0x04D2, 0x04D3 },
+{ 0x04D4, 0x04D4, 0x04D5 },
+{ 0x04D5, 0x04D4, 0x04D5 },
+{ 0x04D6, 0x04D6, 0x04D7 },
+{ 0x04D7, 0x04D6, 0x04D7 },
+{ 0x04D8, 0x04D8, 0x04D9 },
+{ 0x04D9, 0x04D8, 0x04D9 },
+{ 0x04DA, 0x04DA, 0x04DB },
+{ 0x04DB, 0x04DA, 0x04DB },
+{ 0x04DC, 0x04DC, 0x04DD },
+{ 0x04DD, 0x04DC, 0x04DD },
+{ 0x04DE, 0x04DE, 0x04DF },
+{ 0x04DF, 0x04DE, 0x04DF },
+{ 0x04E0, 0x04E0, 0x04E1 },
+{ 0x04E1, 0x04E0, 0x04E1 },
+{ 0x04E2, 0x04E2, 0x04E3 },
+{ 0x04E3, 0x04E2, 0x04E3 },
+{ 0x04E4, 0x04E4, 0x04E5 },
+{ 0x04E5, 0x04E4, 0x04E5 },
+{ 0x04E6, 0x04E6, 0x04E7 },
+{ 0x04E7, 0x04E6, 0x04E7 },
+{ 0x04E8, 0x04E8, 0x04E9 },
+{ 0x04E9, 0x04E8, 0x04E9 },
+{ 0x04EA, 0x04EA, 0x04EB },
+{ 0x04EB, 0x04EA, 0x04EB },
+{ 0x04EC, 0x04EC, 0x04ED },
+{ 0x04ED, 0x04EC, 0x04ED },
+{ 0x04EE, 0x04EE, 0x04EF },
+{ 0x04EF, 0x04EE, 0x04EF },
+{ 0x04F0, 0x04F0, 0x04F1 },
+{ 0x04F1, 0x04F0, 0x04F1 },
+{ 0x04F2, 0x04F2, 0x04F3 },
+{ 0x04F3, 0x04F2, 0x04F3 },
+{ 0x04F4, 0x04F4, 0x04F5 },
+{ 0x04F5, 0x04F4, 0x04F5 },
+{ 0x04F6, 0x04F6, 0x04F7 },
+{ 0x04F7, 0x04F6, 0x04F7 },
+{ 0x04F8, 0x04F8, 0x04F9 },
+{ 0x04F9, 0x04F8, 0x04F9 },
+{ 0x0500, 0x0500, 0x0501 },
+{ 0x0501, 0x0500, 0x0501 },
+{ 0x0502, 0x0502, 0x0503 },
+{ 0x0503, 0x0502, 0x0503 },
+{ 0x0504, 0x0504, 0x0505 },
+{ 0x0505, 0x0504, 0x0505 },
+{ 0x0506, 0x0506, 0x0507 },
+{ 0x0507, 0x0506, 0x0507 },
+{ 0x0508, 0x0508, 0x0509 },
+{ 0x0509, 0x0508, 0x0509 },
+{ 0x050A, 0x050A, 0x050B },
+{ 0x050B, 0x050A, 0x050B },
+{ 0x050C, 0x050C, 0x050D },
+{ 0x050D, 0x050C, 0x050D },
+{ 0x050E, 0x050E, 0x050F },
+{ 0x050F, 0x050E, 0x050F },
+{ 0x0531, 0x0531, 0x0561 },
+{ 0x0532, 0x0532, 0x0562 },
+{ 0x0533, 0x0533, 0x0563 },
+{ 0x0534, 0x0534, 0x0564 },
+{ 0x0535, 0x0535, 0x0565 },
+{ 0x0536, 0x0536, 0x0566 },
+{ 0x0537, 0x0537, 0x0567 },
+{ 0x0538, 0x0538, 0x0568 },
+{ 0x0539, 0x0539, 0x0569 },
+{ 0x053A, 0x053A, 0x056A },
+{ 0x053B, 0x053B, 0x056B },
+{ 0x053C, 0x053C, 0x056C },
+{ 0x053D, 0x053D, 0x056D },
+{ 0x053E, 0x053E, 0x056E },
+{ 0x053F, 0x053F, 0x056F },
+{ 0x0540, 0x0540, 0x0570 },
+{ 0x0541, 0x0541, 0x0571 },
+{ 0x0542, 0x0542, 0x0572 },
+{ 0x0543, 0x0543, 0x0573 },
+{ 0x0544, 0x0544, 0x0574 },
+{ 0x0545, 0x0545, 0x0575 },
+{ 0x0546, 0x0546, 0x0576 },
+{ 0x0547, 0x0547, 0x0577 },
+{ 0x0548, 0x0548, 0x0578 },
+{ 0x0549, 0x0549, 0x0579 },
+{ 0x054A, 0x054A, 0x057A },
+{ 0x054B, 0x054B, 0x057B },
+{ 0x054C, 0x054C, 0x057C },
+{ 0x054D, 0x054D, 0x057D },
+{ 0x054E, 0x054E, 0x057E },
+{ 0x054F, 0x054F, 0x057F },
+{ 0x0550, 0x0550, 0x0580 },
+{ 0x0551, 0x0551, 0x0581 },
+{ 0x0552, 0x0552, 0x0582 },
+{ 0x0553, 0x0553, 0x0583 },
+{ 0x0554, 0x0554, 0x0584 },
+{ 0x0555, 0x0555, 0x0585 },
+{ 0x0556, 0x0556, 0x0586 },
+{ 0x0559, 0x0559, 0x0559 },
+{ 0x0561, 0x0531, 0x0561 },
+{ 0x0562, 0x0532, 0x0562 },
+{ 0x0563, 0x0533, 0x0563 },
+{ 0x0564, 0x0534, 0x0564 },
+{ 0x0565, 0x0535, 0x0565 },
+{ 0x0566, 0x0536, 0x0566 },
+{ 0x0567, 0x0537, 0x0567 },
+{ 0x0568, 0x0538, 0x0568 },
+{ 0x0569, 0x0539, 0x0569 },
+{ 0x056A, 0x053A, 0x056A },
+{ 0x056B, 0x053B, 0x056B },
+{ 0x056C, 0x053C, 0x056C },
+{ 0x056D, 0x053D, 0x056D },
+{ 0x056E, 0x053E, 0x056E },
+{ 0x056F, 0x053F, 0x056F },
+{ 0x0570, 0x0540, 0x0570 },
+{ 0x0571, 0x0541, 0x0571 },
+{ 0x0572, 0x0542, 0x0572 },
+{ 0x0573, 0x0543, 0x0573 },
+{ 0x0574, 0x0544, 0x0574 },
+{ 0x0575, 0x0545, 0x0575 },
+{ 0x0576, 0x0546, 0x0576 },
+{ 0x0577, 0x0547, 0x0577 },
+{ 0x0578, 0x0548, 0x0578 },
+{ 0x0579, 0x0549, 0x0579 },
+{ 0x057A, 0x054A, 0x057A },
+{ 0x057B, 0x054B, 0x057B },
+{ 0x057C, 0x054C, 0x057C },
+{ 0x057D, 0x054D, 0x057D },
+{ 0x057E, 0x054E, 0x057E },
+{ 0x057F, 0x054F, 0x057F },
+{ 0x0580, 0x0550, 0x0580 },
+{ 0x0581, 0x0551, 0x0581 },
+{ 0x0582, 0x0552, 0x0582 },
+{ 0x0583, 0x0553, 0x0583 },
+{ 0x0584, 0x0554, 0x0584 },
+{ 0x0585, 0x0555, 0x0585 },
+{ 0x0586, 0x0556, 0x0586 },
+{ 0x0587, 0x0587, 0x0587 },
+{ 0x0591, 0x0591, 0x0591 },
+{ 0x0592, 0x0592, 0x0592 },
+{ 0x0593, 0x0593, 0x0593 },
+{ 0x0594, 0x0594, 0x0594 },
+{ 0x0595, 0x0595, 0x0595 },
+{ 0x0596, 0x0596, 0x0596 },
+{ 0x0597, 0x0597, 0x0597 },
+{ 0x0598, 0x0598, 0x0598 },
+{ 0x0599, 0x0599, 0x0599 },
+{ 0x059A, 0x059A, 0x059A },
+{ 0x059B, 0x059B, 0x059B },
+{ 0x059C, 0x059C, 0x059C },
+{ 0x059D, 0x059D, 0x059D },
+{ 0x059E, 0x059E, 0x059E },
+{ 0x059F, 0x059F, 0x059F },
+{ 0x05A0, 0x05A0, 0x05A0 },
+{ 0x05A1, 0x05A1, 0x05A1 },
+{ 0x05A2, 0x05A2, 0x05A2 },
+{ 0x05A3, 0x05A3, 0x05A3 },
+{ 0x05A4, 0x05A4, 0x05A4 },
+{ 0x05A5, 0x05A5, 0x05A5 },
+{ 0x05A6, 0x05A6, 0x05A6 },
+{ 0x05A7, 0x05A7, 0x05A7 },
+{ 0x05A8, 0x05A8, 0x05A8 },
+{ 0x05A9, 0x05A9, 0x05A9 },
+{ 0x05AA, 0x05AA, 0x05AA },
+{ 0x05AB, 0x05AB, 0x05AB },
+{ 0x05AC, 0x05AC, 0x05AC },
+{ 0x05AD, 0x05AD, 0x05AD },
+{ 0x05AE, 0x05AE, 0x05AE },
+{ 0x05AF, 0x05AF, 0x05AF },
+{ 0x05B0, 0x05B0, 0x05B0 },
+{ 0x05B1, 0x05B1, 0x05B1 },
+{ 0x05B2, 0x05B2, 0x05B2 },
+{ 0x05B3, 0x05B3, 0x05B3 },
+{ 0x05B4, 0x05B4, 0x05B4 },
+{ 0x05B5, 0x05B5, 0x05B5 },
+{ 0x05B6, 0x05B6, 0x05B6 },
+{ 0x05B7, 0x05B7, 0x05B7 },
+{ 0x05B8, 0x05B8, 0x05B8 },
+{ 0x05B9, 0x05B9, 0x05B9 },
+{ 0x05BB, 0x05BB, 0x05BB },
+{ 0x05BC, 0x05BC, 0x05BC },
+{ 0x05BD, 0x05BD, 0x05BD },
+{ 0x05BF, 0x05BF, 0x05BF },
+{ 0x05C1, 0x05C1, 0x05C1 },
+{ 0x05C2, 0x05C2, 0x05C2 },
+{ 0x05C4, 0x05C4, 0x05C4 },
+{ 0x05C5, 0x05C5, 0x05C5 },
+{ 0x05C7, 0x05C7, 0x05C7 },
+{ 0x05D0, 0x05D0, 0x05D0 },
+{ 0x05D1, 0x05D1, 0x05D1 },
+{ 0x05D2, 0x05D2, 0x05D2 },
+{ 0x05D3, 0x05D3, 0x05D3 },
+{ 0x05D4, 0x05D4, 0x05D4 },
+{ 0x05D5, 0x05D5, 0x05D5 },
+{ 0x05D6, 0x05D6, 0x05D6 },
+{ 0x05D7, 0x05D7, 0x05D7 },
+{ 0x05D8, 0x05D8, 0x05D8 },
+{ 0x05D9, 0x05D9, 0x05D9 },
+{ 0x05DA, 0x05DA, 0x05DA },
+{ 0x05DB, 0x05DB, 0x05DB },
+{ 0x05DC, 0x05DC, 0x05DC },
+{ 0x05DD, 0x05DD, 0x05DD },
+{ 0x05DE, 0x05DE, 0x05DE },
+{ 0x05DF, 0x05DF, 0x05DF },
+{ 0x05E0, 0x05E0, 0x05E0 },
+{ 0x05E1, 0x05E1, 0x05E1 },
+{ 0x05E2, 0x05E2, 0x05E2 },
+{ 0x05E3, 0x05E3, 0x05E3 },
+{ 0x05E4, 0x05E4, 0x05E4 },
+{ 0x05E5, 0x05E5, 0x05E5 },
+{ 0x05E6, 0x05E6, 0x05E6 },
+{ 0x05E7, 0x05E7, 0x05E7 },
+{ 0x05E8, 0x05E8, 0x05E8 },
+{ 0x05E9, 0x05E9, 0x05E9 },
+{ 0x05EA, 0x05EA, 0x05EA },
+{ 0x05F0, 0x05F0, 0x05F0 },
+{ 0x05F1, 0x05F1, 0x05F1 },
+{ 0x05F2, 0x05F2, 0x05F2 },
+{ 0x0610, 0x0610, 0x0610 },
+{ 0x0611, 0x0611, 0x0611 },
+{ 0x0612, 0x0612, 0x0612 },
+{ 0x0613, 0x0613, 0x0613 },
+{ 0x0614, 0x0614, 0x0614 },
+{ 0x0615, 0x0615, 0x0615 },
+{ 0x0621, 0x0621, 0x0621 },
+{ 0x0622, 0x0622, 0x0622 },
+{ 0x0623, 0x0623, 0x0623 },
+{ 0x0624, 0x0624, 0x0624 },
+{ 0x0625, 0x0625, 0x0625 },
+{ 0x0626, 0x0626, 0x0626 },
+{ 0x0627, 0x0627, 0x0627 },
+{ 0x0628, 0x0628, 0x0628 },
+{ 0x0629, 0x0629, 0x0629 },
+{ 0x062A, 0x062A, 0x062A },
+{ 0x062B, 0x062B, 0x062B },
+{ 0x062C, 0x062C, 0x062C },
+{ 0x062D, 0x062D, 0x062D },
+{ 0x062E, 0x062E, 0x062E },
+{ 0x062F, 0x062F, 0x062F },
+{ 0x0630, 0x0630, 0x0630 },
+{ 0x0631, 0x0631, 0x0631 },
+{ 0x0632, 0x0632, 0x0632 },
+{ 0x0633, 0x0633, 0x0633 },
+{ 0x0634, 0x0634, 0x0634 },
+{ 0x0635, 0x0635, 0x0635 },
+{ 0x0636, 0x0636, 0x0636 },
+{ 0x0637, 0x0637, 0x0637 },
+{ 0x0638, 0x0638, 0x0638 },
+{ 0x0639, 0x0639, 0x0639 },
+{ 0x063A, 0x063A, 0x063A },
+{ 0x0640, 0x0640, 0x0640 },
+{ 0x0641, 0x0641, 0x0641 },
+{ 0x0642, 0x0642, 0x0642 },
+{ 0x0643, 0x0643, 0x0643 },
+{ 0x0644, 0x0644, 0x0644 },
+{ 0x0645, 0x0645, 0x0645 },
+{ 0x0646, 0x0646, 0x0646 },
+{ 0x0647, 0x0647, 0x0647 },
+{ 0x0648, 0x0648, 0x0648 },
+{ 0x0649, 0x0649, 0x0649 },
+{ 0x064A, 0x064A, 0x064A },
+{ 0x064B, 0x064B, 0x064B },
+{ 0x064C, 0x064C, 0x064C },
+{ 0x064D, 0x064D, 0x064D },
+{ 0x064E, 0x064E, 0x064E },
+{ 0x064F, 0x064F, 0x064F },
+{ 0x0650, 0x0650, 0x0650 },
+{ 0x0651, 0x0651, 0x0651 },
+{ 0x0652, 0x0652, 0x0652 },
+{ 0x0653, 0x0653, 0x0653 },
+{ 0x0654, 0x0654, 0x0654 },
+{ 0x0655, 0x0655, 0x0655 },
+{ 0x0656, 0x0656, 0x0656 },
+{ 0x0657, 0x0657, 0x0657 },
+{ 0x0658, 0x0658, 0x0658 },
+{ 0x0659, 0x0659, 0x0659 },
+{ 0x065A, 0x065A, 0x065A },
+{ 0x065B, 0x065B, 0x065B },
+{ 0x065C, 0x065C, 0x065C },
+{ 0x065D, 0x065D, 0x065D },
+{ 0x065E, 0x065E, 0x065E },
+{ 0x066E, 0x066E, 0x066E },
+{ 0x066F, 0x066F, 0x066F },
+{ 0x0670, 0x0670, 0x0670 },
+{ 0x0671, 0x0671, 0x0671 },
+{ 0x0672, 0x0672, 0x0672 },
+{ 0x0673, 0x0673, 0x0673 },
+{ 0x0674, 0x0674, 0x0674 },
+{ 0x0675, 0x0675, 0x0675 },
+{ 0x0676, 0x0676, 0x0676 },
+{ 0x0677, 0x0677, 0x0677 },
+{ 0x0678, 0x0678, 0x0678 },
+{ 0x0679, 0x0679, 0x0679 },
+{ 0x067A, 0x067A, 0x067A },
+{ 0x067B, 0x067B, 0x067B },
+{ 0x067C, 0x067C, 0x067C },
+{ 0x067D, 0x067D, 0x067D },
+{ 0x067E, 0x067E, 0x067E },
+{ 0x067F, 0x067F, 0x067F },
+{ 0x0680, 0x0680, 0x0680 },
+{ 0x0681, 0x0681, 0x0681 },
+{ 0x0682, 0x0682, 0x0682 },
+{ 0x0683, 0x0683, 0x0683 },
+{ 0x0684, 0x0684, 0x0684 },
+{ 0x0685, 0x0685, 0x0685 },
+{ 0x0686, 0x0686, 0x0686 },
+{ 0x0687, 0x0687, 0x0687 },
+{ 0x0688, 0x0688, 0x0688 },
+{ 0x0689, 0x0689, 0x0689 },
+{ 0x068A, 0x068A, 0x068A },
+{ 0x068B, 0x068B, 0x068B },
+{ 0x068C, 0x068C, 0x068C },
+{ 0x068D, 0x068D, 0x068D },
+{ 0x068E, 0x068E, 0x068E },
+{ 0x068F, 0x068F, 0x068F },
+{ 0x0690, 0x0690, 0x0690 },
+{ 0x0691, 0x0691, 0x0691 },
+{ 0x0692, 0x0692, 0x0692 },
+{ 0x0693, 0x0693, 0x0693 },
+{ 0x0694, 0x0694, 0x0694 },
+{ 0x0695, 0x0695, 0x0695 },
+{ 0x0696, 0x0696, 0x0696 },
+{ 0x0697, 0x0697, 0x0697 },
+{ 0x0698, 0x0698, 0x0698 },
+{ 0x0699, 0x0699, 0x0699 },
+{ 0x069A, 0x069A, 0x069A },
+{ 0x069B, 0x069B, 0x069B },
+{ 0x069C, 0x069C, 0x069C },
+{ 0x069D, 0x069D, 0x069D },
+{ 0x069E, 0x069E, 0x069E },
+{ 0x069F, 0x069F, 0x069F },
+{ 0x06A0, 0x06A0, 0x06A0 },
+{ 0x06A1, 0x06A1, 0x06A1 },
+{ 0x06A2, 0x06A2, 0x06A2 },
+{ 0x06A3, 0x06A3, 0x06A3 },
+{ 0x06A4, 0x06A4, 0x06A4 },
+{ 0x06A5, 0x06A5, 0x06A5 },
+{ 0x06A6, 0x06A6, 0x06A6 },
+{ 0x06A7, 0x06A7, 0x06A7 },
+{ 0x06A8, 0x06A8, 0x06A8 },
+{ 0x06A9, 0x06A9, 0x06A9 },
+{ 0x06AA, 0x06AA, 0x06AA },
+{ 0x06AB, 0x06AB, 0x06AB },
+{ 0x06AC, 0x06AC, 0x06AC },
+{ 0x06AD, 0x06AD, 0x06AD },
+{ 0x06AE, 0x06AE, 0x06AE },
+{ 0x06AF, 0x06AF, 0x06AF },
+{ 0x06B0, 0x06B0, 0x06B0 },
+{ 0x06B1, 0x06B1, 0x06B1 },
+{ 0x06B2, 0x06B2, 0x06B2 },
+{ 0x06B3, 0x06B3, 0x06B3 },
+{ 0x06B4, 0x06B4, 0x06B4 },
+{ 0x06B5, 0x06B5, 0x06B5 },
+{ 0x06B6, 0x06B6, 0x06B6 },
+{ 0x06B7, 0x06B7, 0x06B7 },
+{ 0x06B8, 0x06B8, 0x06B8 },
+{ 0x06B9, 0x06B9, 0x06B9 },
+{ 0x06BA, 0x06BA, 0x06BA },
+{ 0x06BB, 0x06BB, 0x06BB },
+{ 0x06BC, 0x06BC, 0x06BC },
+{ 0x06BD, 0x06BD, 0x06BD },
+{ 0x06BE, 0x06BE, 0x06BE },
+{ 0x06BF, 0x06BF, 0x06BF },
+{ 0x06C0, 0x06C0, 0x06C0 },
+{ 0x06C1, 0x06C1, 0x06C1 },
+{ 0x06C2, 0x06C2, 0x06C2 },
+{ 0x06C3, 0x06C3, 0x06C3 },
+{ 0x06C4, 0x06C4, 0x06C4 },
+{ 0x06C5, 0x06C5, 0x06C5 },
+{ 0x06C6, 0x06C6, 0x06C6 },
+{ 0x06C7, 0x06C7, 0x06C7 },
+{ 0x06C8, 0x06C8, 0x06C8 },
+{ 0x06C9, 0x06C9, 0x06C9 },
+{ 0x06CA, 0x06CA, 0x06CA },
+{ 0x06CB, 0x06CB, 0x06CB },
+{ 0x06CC, 0x06CC, 0x06CC },
+{ 0x06CD, 0x06CD, 0x06CD },
+{ 0x06CE, 0x06CE, 0x06CE },
+{ 0x06CF, 0x06CF, 0x06CF },
+{ 0x06D0, 0x06D0, 0x06D0 },
+{ 0x06D1, 0x06D1, 0x06D1 },
+{ 0x06D2, 0x06D2, 0x06D2 },
+{ 0x06D3, 0x06D3, 0x06D3 },
+{ 0x06D5, 0x06D5, 0x06D5 },
+{ 0x06D6, 0x06D6, 0x06D6 },
+{ 0x06D7, 0x06D7, 0x06D7 },
+{ 0x06D8, 0x06D8, 0x06D8 },
+{ 0x06D9, 0x06D9, 0x06D9 },
+{ 0x06DA, 0x06DA, 0x06DA },
+{ 0x06DB, 0x06DB, 0x06DB },
+{ 0x06DC, 0x06DC, 0x06DC },
+{ 0x06DF, 0x06DF, 0x06DF },
+{ 0x06E0, 0x06E0, 0x06E0 },
+{ 0x06E1, 0x06E1, 0x06E1 },
+{ 0x06E2, 0x06E2, 0x06E2 },
+{ 0x06E3, 0x06E3, 0x06E3 },
+{ 0x06E4, 0x06E4, 0x06E4 },
+{ 0x06E5, 0x06E5, 0x06E5 },
+{ 0x06E6, 0x06E6, 0x06E6 },
+{ 0x06E7, 0x06E7, 0x06E7 },
+{ 0x06E8, 0x06E8, 0x06E8 },
+{ 0x06EA, 0x06EA, 0x06EA },
+{ 0x06EB, 0x06EB, 0x06EB },
+{ 0x06EC, 0x06EC, 0x06EC },
+{ 0x06ED, 0x06ED, 0x06ED },
+{ 0x06EE, 0x06EE, 0x06EE },
+{ 0x06EF, 0x06EF, 0x06EF },
+{ 0x06FA, 0x06FA, 0x06FA },
+{ 0x06FB, 0x06FB, 0x06FB },
+{ 0x06FC, 0x06FC, 0x06FC },
+{ 0x06FF, 0x06FF, 0x06FF },
+{ 0x0710, 0x0710, 0x0710 },
+{ 0x0711, 0x0711, 0x0711 },
+{ 0x0712, 0x0712, 0x0712 },
+{ 0x0713, 0x0713, 0x0713 },
+{ 0x0714, 0x0714, 0x0714 },
+{ 0x0715, 0x0715, 0x0715 },
+{ 0x0716, 0x0716, 0x0716 },
+{ 0x0717, 0x0717, 0x0717 },
+{ 0x0718, 0x0718, 0x0718 },
+{ 0x0719, 0x0719, 0x0719 },
+{ 0x071A, 0x071A, 0x071A },
+{ 0x071B, 0x071B, 0x071B },
+{ 0x071C, 0x071C, 0x071C },
+{ 0x071D, 0x071D, 0x071D },
+{ 0x071E, 0x071E, 0x071E },
+{ 0x071F, 0x071F, 0x071F },
+{ 0x0720, 0x0720, 0x0720 },
+{ 0x0721, 0x0721, 0x0721 },
+{ 0x0722, 0x0722, 0x0722 },
+{ 0x0723, 0x0723, 0x0723 },
+{ 0x0724, 0x0724, 0x0724 },
+{ 0x0725, 0x0725, 0x0725 },
+{ 0x0726, 0x0726, 0x0726 },
+{ 0x0727, 0x0727, 0x0727 },
+{ 0x0728, 0x0728, 0x0728 },
+{ 0x0729, 0x0729, 0x0729 },
+{ 0x072A, 0x072A, 0x072A },
+{ 0x072B, 0x072B, 0x072B },
+{ 0x072C, 0x072C, 0x072C },
+{ 0x072D, 0x072D, 0x072D },
+{ 0x072E, 0x072E, 0x072E },
+{ 0x072F, 0x072F, 0x072F },
+{ 0x0730, 0x0730, 0x0730 },
+{ 0x0731, 0x0731, 0x0731 },
+{ 0x0732, 0x0732, 0x0732 },
+{ 0x0733, 0x0733, 0x0733 },
+{ 0x0734, 0x0734, 0x0734 },
+{ 0x0735, 0x0735, 0x0735 },
+{ 0x0736, 0x0736, 0x0736 },
+{ 0x0737, 0x0737, 0x0737 },
+{ 0x0738, 0x0738, 0x0738 },
+{ 0x0739, 0x0739, 0x0739 },
+{ 0x073A, 0x073A, 0x073A },
+{ 0x073B, 0x073B, 0x073B },
+{ 0x073C, 0x073C, 0x073C },
+{ 0x073D, 0x073D, 0x073D },
+{ 0x073E, 0x073E, 0x073E },
+{ 0x073F, 0x073F, 0x073F },
+{ 0x0740, 0x0740, 0x0740 },
+{ 0x0741, 0x0741, 0x0741 },
+{ 0x0742, 0x0742, 0x0742 },
+{ 0x0743, 0x0743, 0x0743 },
+{ 0x0744, 0x0744, 0x0744 },
+{ 0x0745, 0x0745, 0x0745 },
+{ 0x0746, 0x0746, 0x0746 },
+{ 0x0747, 0x0747, 0x0747 },
+{ 0x0748, 0x0748, 0x0748 },
+{ 0x0749, 0x0749, 0x0749 },
+{ 0x074A, 0x074A, 0x074A },
+{ 0x074D, 0x074D, 0x074D },
+{ 0x074E, 0x074E, 0x074E },
+{ 0x074F, 0x074F, 0x074F },
+{ 0x0750, 0x0750, 0x0750 },
+{ 0x0751, 0x0751, 0x0751 },
+{ 0x0752, 0x0752, 0x0752 },
+{ 0x0753, 0x0753, 0x0753 },
+{ 0x0754, 0x0754, 0x0754 },
+{ 0x0755, 0x0755, 0x0755 },
+{ 0x0756, 0x0756, 0x0756 },
+{ 0x0757, 0x0757, 0x0757 },
+{ 0x0758, 0x0758, 0x0758 },
+{ 0x0759, 0x0759, 0x0759 },
+{ 0x075A, 0x075A, 0x075A },
+{ 0x075B, 0x075B, 0x075B },
+{ 0x075C, 0x075C, 0x075C },
+{ 0x075D, 0x075D, 0x075D },
+{ 0x075E, 0x075E, 0x075E },
+{ 0x075F, 0x075F, 0x075F },
+{ 0x0760, 0x0760, 0x0760 },
+{ 0x0761, 0x0761, 0x0761 },
+{ 0x0762, 0x0762, 0x0762 },
+{ 0x0763, 0x0763, 0x0763 },
+{ 0x0764, 0x0764, 0x0764 },
+{ 0x0765, 0x0765, 0x0765 },
+{ 0x0766, 0x0766, 0x0766 },
+{ 0x0767, 0x0767, 0x0767 },
+{ 0x0768, 0x0768, 0x0768 },
+{ 0x0769, 0x0769, 0x0769 },
+{ 0x076A, 0x076A, 0x076A },
+{ 0x076B, 0x076B, 0x076B },
+{ 0x076C, 0x076C, 0x076C },
+{ 0x076D, 0x076D, 0x076D },
+{ 0x0780, 0x0780, 0x0780 },
+{ 0x0781, 0x0781, 0x0781 },
+{ 0x0782, 0x0782, 0x0782 },
+{ 0x0783, 0x0783, 0x0783 },
+{ 0x0784, 0x0784, 0x0784 },
+{ 0x0785, 0x0785, 0x0785 },
+{ 0x0786, 0x0786, 0x0786 },
+{ 0x0787, 0x0787, 0x0787 },
+{ 0x0788, 0x0788, 0x0788 },
+{ 0x0789, 0x0789, 0x0789 },
+{ 0x078A, 0x078A, 0x078A },
+{ 0x078B, 0x078B, 0x078B },
+{ 0x078C, 0x078C, 0x078C },
+{ 0x078D, 0x078D, 0x078D },
+{ 0x078E, 0x078E, 0x078E },
+{ 0x078F, 0x078F, 0x078F },
+{ 0x0790, 0x0790, 0x0790 },
+{ 0x0791, 0x0791, 0x0791 },
+{ 0x0792, 0x0792, 0x0792 },
+{ 0x0793, 0x0793, 0x0793 },
+{ 0x0794, 0x0794, 0x0794 },
+{ 0x0795, 0x0795, 0x0795 },
+{ 0x0796, 0x0796, 0x0796 },
+{ 0x0797, 0x0797, 0x0797 },
+{ 0x0798, 0x0798, 0x0798 },
+{ 0x0799, 0x0799, 0x0799 },
+{ 0x079A, 0x079A, 0x079A },
+{ 0x079B, 0x079B, 0x079B },
+{ 0x079C, 0x079C, 0x079C },
+{ 0x079D, 0x079D, 0x079D },
+{ 0x079E, 0x079E, 0x079E },
+{ 0x079F, 0x079F, 0x079F },
+{ 0x07A0, 0x07A0, 0x07A0 },
+{ 0x07A1, 0x07A1, 0x07A1 },
+{ 0x07A2, 0x07A2, 0x07A2 },
+{ 0x07A3, 0x07A3, 0x07A3 },
+{ 0x07A4, 0x07A4, 0x07A4 },
+{ 0x07A5, 0x07A5, 0x07A5 },
+{ 0x07A6, 0x07A6, 0x07A6 },
+{ 0x07A7, 0x07A7, 0x07A7 },
+{ 0x07A8, 0x07A8, 0x07A8 },
+{ 0x07A9, 0x07A9, 0x07A9 },
+{ 0x07AA, 0x07AA, 0x07AA },
+{ 0x07AB, 0x07AB, 0x07AB },
+{ 0x07AC, 0x07AC, 0x07AC },
+{ 0x07AD, 0x07AD, 0x07AD },
+{ 0x07AE, 0x07AE, 0x07AE },
+{ 0x07AF, 0x07AF, 0x07AF },
+{ 0x07B0, 0x07B0, 0x07B0 },
+{ 0x07B1, 0x07B1, 0x07B1 },
+{ 0x0901, 0x0901, 0x0901 },
+{ 0x0902, 0x0902, 0x0902 },
+{ 0x0904, 0x0904, 0x0904 },
+{ 0x0905, 0x0905, 0x0905 },
+{ 0x0906, 0x0906, 0x0906 },
+{ 0x0907, 0x0907, 0x0907 },
+{ 0x0908, 0x0908, 0x0908 },
+{ 0x0909, 0x0909, 0x0909 },
+{ 0x090A, 0x090A, 0x090A },
+{ 0x090B, 0x090B, 0x090B },
+{ 0x090C, 0x090C, 0x090C },
+{ 0x090D, 0x090D, 0x090D },
+{ 0x090E, 0x090E, 0x090E },
+{ 0x090F, 0x090F, 0x090F },
+{ 0x0910, 0x0910, 0x0910 },
+{ 0x0911, 0x0911, 0x0911 },
+{ 0x0912, 0x0912, 0x0912 },
+{ 0x0913, 0x0913, 0x0913 },
+{ 0x0914, 0x0914, 0x0914 },
+{ 0x0915, 0x0915, 0x0915 },
+{ 0x0916, 0x0916, 0x0916 },
+{ 0x0917, 0x0917, 0x0917 },
+{ 0x0918, 0x0918, 0x0918 },
+{ 0x0919, 0x0919, 0x0919 },
+{ 0x091A, 0x091A, 0x091A },
+{ 0x091B, 0x091B, 0x091B },
+{ 0x091C, 0x091C, 0x091C },
+{ 0x091D, 0x091D, 0x091D },
+{ 0x091E, 0x091E, 0x091E },
+{ 0x091F, 0x091F, 0x091F },
+{ 0x0920, 0x0920, 0x0920 },
+{ 0x0921, 0x0921, 0x0921 },
+{ 0x0922, 0x0922, 0x0922 },
+{ 0x0923, 0x0923, 0x0923 },
+{ 0x0924, 0x0924, 0x0924 },
+{ 0x0925, 0x0925, 0x0925 },
+{ 0x0926, 0x0926, 0x0926 },
+{ 0x0927, 0x0927, 0x0927 },
+{ 0x0928, 0x0928, 0x0928 },
+{ 0x0929, 0x0929, 0x0929 },
+{ 0x092A, 0x092A, 0x092A },
+{ 0x092B, 0x092B, 0x092B },
+{ 0x092C, 0x092C, 0x092C },
+{ 0x092D, 0x092D, 0x092D },
+{ 0x092E, 0x092E, 0x092E },
+{ 0x092F, 0x092F, 0x092F },
+{ 0x0930, 0x0930, 0x0930 },
+{ 0x0931, 0x0931, 0x0931 },
+{ 0x0932, 0x0932, 0x0932 },
+{ 0x0933, 0x0933, 0x0933 },
+{ 0x0934, 0x0934, 0x0934 },
+{ 0x0935, 0x0935, 0x0935 },
+{ 0x0936, 0x0936, 0x0936 },
+{ 0x0937, 0x0937, 0x0937 },
+{ 0x0938, 0x0938, 0x0938 },
+{ 0x0939, 0x0939, 0x0939 },
+{ 0x093C, 0x093C, 0x093C },
+{ 0x093D, 0x093D, 0x093D },
+{ 0x0941, 0x0941, 0x0941 },
+{ 0x0942, 0x0942, 0x0942 },
+{ 0x0943, 0x0943, 0x0943 },
+{ 0x0944, 0x0944, 0x0944 },
+{ 0x0945, 0x0945, 0x0945 },
+{ 0x0946, 0x0946, 0x0946 },
+{ 0x0947, 0x0947, 0x0947 },
+{ 0x0948, 0x0948, 0x0948 },
+{ 0x094D, 0x094D, 0x094D },
+{ 0x0950, 0x0950, 0x0950 },
+{ 0x0951, 0x0951, 0x0951 },
+{ 0x0952, 0x0952, 0x0952 },
+{ 0x0953, 0x0953, 0x0953 },
+{ 0x0954, 0x0954, 0x0954 },
+{ 0x0958, 0x0958, 0x0958 },
+{ 0x0959, 0x0959, 0x0959 },
+{ 0x095A, 0x095A, 0x095A },
+{ 0x095B, 0x095B, 0x095B },
+{ 0x095C, 0x095C, 0x095C },
+{ 0x095D, 0x095D, 0x095D },
+{ 0x095E, 0x095E, 0x095E },
+{ 0x095F, 0x095F, 0x095F },
+{ 0x0960, 0x0960, 0x0960 },
+{ 0x0961, 0x0961, 0x0961 },
+{ 0x0962, 0x0962, 0x0962 },
+{ 0x0963, 0x0963, 0x0963 },
+{ 0x097D, 0x097D, 0x097D },
+{ 0x0981, 0x0981, 0x0981 },
+{ 0x0985, 0x0985, 0x0985 },
+{ 0x0986, 0x0986, 0x0986 },
+{ 0x0987, 0x0987, 0x0987 },
+{ 0x0988, 0x0988, 0x0988 },
+{ 0x0989, 0x0989, 0x0989 },
+{ 0x098A, 0x098A, 0x098A },
+{ 0x098B, 0x098B, 0x098B },
+{ 0x098C, 0x098C, 0x098C },
+{ 0x098F, 0x098F, 0x098F },
+{ 0x0990, 0x0990, 0x0990 },
+{ 0x0993, 0x0993, 0x0993 },
+{ 0x0994, 0x0994, 0x0994 },
+{ 0x0995, 0x0995, 0x0995 },
+{ 0x0996, 0x0996, 0x0996 },
+{ 0x0997, 0x0997, 0x0997 },
+{ 0x0998, 0x0998, 0x0998 },
+{ 0x0999, 0x0999, 0x0999 },
+{ 0x099A, 0x099A, 0x099A },
+{ 0x099B, 0x099B, 0x099B },
+{ 0x099C, 0x099C, 0x099C },
+{ 0x099D, 0x099D, 0x099D },
+{ 0x099E, 0x099E, 0x099E },
+{ 0x099F, 0x099F, 0x099F },
+{ 0x09A0, 0x09A0, 0x09A0 },
+{ 0x09A1, 0x09A1, 0x09A1 },
+{ 0x09A2, 0x09A2, 0x09A2 },
+{ 0x09A3, 0x09A3, 0x09A3 },
+{ 0x09A4, 0x09A4, 0x09A4 },
+{ 0x09A5, 0x09A5, 0x09A5 },
+{ 0x09A6, 0x09A6, 0x09A6 },
+{ 0x09A7, 0x09A7, 0x09A7 },
+{ 0x09A8, 0x09A8, 0x09A8 },
+{ 0x09AA, 0x09AA, 0x09AA },
+{ 0x09AB, 0x09AB, 0x09AB },
+{ 0x09AC, 0x09AC, 0x09AC },
+{ 0x09AD, 0x09AD, 0x09AD },
+{ 0x09AE, 0x09AE, 0x09AE },
+{ 0x09AF, 0x09AF, 0x09AF },
+{ 0x09B0, 0x09B0, 0x09B0 },
+{ 0x09B2, 0x09B2, 0x09B2 },
+{ 0x09B6, 0x09B6, 0x09B6 },
+{ 0x09B7, 0x09B7, 0x09B7 },
+{ 0x09B8, 0x09B8, 0x09B8 },
+{ 0x09B9, 0x09B9, 0x09B9 },
+{ 0x09BC, 0x09BC, 0x09BC },
+{ 0x09BD, 0x09BD, 0x09BD },
+{ 0x09C1, 0x09C1, 0x09C1 },
+{ 0x09C2, 0x09C2, 0x09C2 },
+{ 0x09C3, 0x09C3, 0x09C3 },
+{ 0x09C4, 0x09C4, 0x09C4 },
+{ 0x09CD, 0x09CD, 0x09CD },
+{ 0x09CE, 0x09CE, 0x09CE },
+{ 0x09DC, 0x09DC, 0x09DC },
+{ 0x09DD, 0x09DD, 0x09DD },
+{ 0x09DF, 0x09DF, 0x09DF },
+{ 0x09E0, 0x09E0, 0x09E0 },
+{ 0x09E1, 0x09E1, 0x09E1 },
+{ 0x09E2, 0x09E2, 0x09E2 },
+{ 0x09E3, 0x09E3, 0x09E3 },
+{ 0x09F0, 0x09F0, 0x09F0 },
+{ 0x09F1, 0x09F1, 0x09F1 },
+{ 0x0A01, 0x0A01, 0x0A01 },
+{ 0x0A02, 0x0A02, 0x0A02 },
+{ 0x0A05, 0x0A05, 0x0A05 },
+{ 0x0A06, 0x0A06, 0x0A06 },
+{ 0x0A07, 0x0A07, 0x0A07 },
+{ 0x0A08, 0x0A08, 0x0A08 },
+{ 0x0A09, 0x0A09, 0x0A09 },
+{ 0x0A0A, 0x0A0A, 0x0A0A },
+{ 0x0A0F, 0x0A0F, 0x0A0F },
+{ 0x0A10, 0x0A10, 0x0A10 },
+{ 0x0A13, 0x0A13, 0x0A13 },
+{ 0x0A14, 0x0A14, 0x0A14 },
+{ 0x0A15, 0x0A15, 0x0A15 },
+{ 0x0A16, 0x0A16, 0x0A16 },
+{ 0x0A17, 0x0A17, 0x0A17 },
+{ 0x0A18, 0x0A18, 0x0A18 },
+{ 0x0A19, 0x0A19, 0x0A19 },
+{ 0x0A1A, 0x0A1A, 0x0A1A },
+{ 0x0A1B, 0x0A1B, 0x0A1B },
+{ 0x0A1C, 0x0A1C, 0x0A1C },
+{ 0x0A1D, 0x0A1D, 0x0A1D },
+{ 0x0A1E, 0x0A1E, 0x0A1E },
+{ 0x0A1F, 0x0A1F, 0x0A1F },
+{ 0x0A20, 0x0A20, 0x0A20 },
+{ 0x0A21, 0x0A21, 0x0A21 },
+{ 0x0A22, 0x0A22, 0x0A22 },
+{ 0x0A23, 0x0A23, 0x0A23 },
+{ 0x0A24, 0x0A24, 0x0A24 },
+{ 0x0A25, 0x0A25, 0x0A25 },
+{ 0x0A26, 0x0A26, 0x0A26 },
+{ 0x0A27, 0x0A27, 0x0A27 },
+{ 0x0A28, 0x0A28, 0x0A28 },
+{ 0x0A2A, 0x0A2A, 0x0A2A },
+{ 0x0A2B, 0x0A2B, 0x0A2B },
+{ 0x0A2C, 0x0A2C, 0x0A2C },
+{ 0x0A2D, 0x0A2D, 0x0A2D },
+{ 0x0A2E, 0x0A2E, 0x0A2E },
+{ 0x0A2F, 0x0A2F, 0x0A2F },
+{ 0x0A30, 0x0A30, 0x0A30 },
+{ 0x0A32, 0x0A32, 0x0A32 },
+{ 0x0A33, 0x0A33, 0x0A33 },
+{ 0x0A35, 0x0A35, 0x0A35 },
+{ 0x0A36, 0x0A36, 0x0A36 },
+{ 0x0A38, 0x0A38, 0x0A38 },
+{ 0x0A39, 0x0A39, 0x0A39 },
+{ 0x0A3C, 0x0A3C, 0x0A3C },
+{ 0x0A41, 0x0A41, 0x0A41 },
+{ 0x0A42, 0x0A42, 0x0A42 },
+{ 0x0A47, 0x0A47, 0x0A47 },
+{ 0x0A48, 0x0A48, 0x0A48 },
+{ 0x0A4B, 0x0A4B, 0x0A4B },
+{ 0x0A4C, 0x0A4C, 0x0A4C },
+{ 0x0A4D, 0x0A4D, 0x0A4D },
+{ 0x0A59, 0x0A59, 0x0A59 },
+{ 0x0A5A, 0x0A5A, 0x0A5A },
+{ 0x0A5B, 0x0A5B, 0x0A5B },
+{ 0x0A5C, 0x0A5C, 0x0A5C },
+{ 0x0A5E, 0x0A5E, 0x0A5E },
+{ 0x0A70, 0x0A70, 0x0A70 },
+{ 0x0A71, 0x0A71, 0x0A71 },
+{ 0x0A72, 0x0A72, 0x0A72 },
+{ 0x0A73, 0x0A73, 0x0A73 },
+{ 0x0A74, 0x0A74, 0x0A74 },
+{ 0x0A81, 0x0A81, 0x0A81 },
+{ 0x0A82, 0x0A82, 0x0A82 },
+{ 0x0A85, 0x0A85, 0x0A85 },
+{ 0x0A86, 0x0A86, 0x0A86 },
+{ 0x0A87, 0x0A87, 0x0A87 },
+{ 0x0A88, 0x0A88, 0x0A88 },
+{ 0x0A89, 0x0A89, 0x0A89 },
+{ 0x0A8A, 0x0A8A, 0x0A8A },
+{ 0x0A8B, 0x0A8B, 0x0A8B },
+{ 0x0A8C, 0x0A8C, 0x0A8C },
+{ 0x0A8D, 0x0A8D, 0x0A8D },
+{ 0x0A8F, 0x0A8F, 0x0A8F },
+{ 0x0A90, 0x0A90, 0x0A90 },
+{ 0x0A91, 0x0A91, 0x0A91 },
+{ 0x0A93, 0x0A93, 0x0A93 },
+{ 0x0A94, 0x0A94, 0x0A94 },
+{ 0x0A95, 0x0A95, 0x0A95 },
+{ 0x0A96, 0x0A96, 0x0A96 },
+{ 0x0A97, 0x0A97, 0x0A97 },
+{ 0x0A98, 0x0A98, 0x0A98 },
+{ 0x0A99, 0x0A99, 0x0A99 },
+{ 0x0A9A, 0x0A9A, 0x0A9A },
+{ 0x0A9B, 0x0A9B, 0x0A9B },
+{ 0x0A9C, 0x0A9C, 0x0A9C },
+{ 0x0A9D, 0x0A9D, 0x0A9D },
+{ 0x0A9E, 0x0A9E, 0x0A9E },
+{ 0x0A9F, 0x0A9F, 0x0A9F },
+{ 0x0AA0, 0x0AA0, 0x0AA0 },
+{ 0x0AA1, 0x0AA1, 0x0AA1 },
+{ 0x0AA2, 0x0AA2, 0x0AA2 },
+{ 0x0AA3, 0x0AA3, 0x0AA3 },
+{ 0x0AA4, 0x0AA4, 0x0AA4 },
+{ 0x0AA5, 0x0AA5, 0x0AA5 },
+{ 0x0AA6, 0x0AA6, 0x0AA6 },
+{ 0x0AA7, 0x0AA7, 0x0AA7 },
+{ 0x0AA8, 0x0AA8, 0x0AA8 },
+{ 0x0AAA, 0x0AAA, 0x0AAA },
+{ 0x0AAB, 0x0AAB, 0x0AAB },
+{ 0x0AAC, 0x0AAC, 0x0AAC },
+{ 0x0AAD, 0x0AAD, 0x0AAD },
+{ 0x0AAE, 0x0AAE, 0x0AAE },
+{ 0x0AAF, 0x0AAF, 0x0AAF },
+{ 0x0AB0, 0x0AB0, 0x0AB0 },
+{ 0x0AB2, 0x0AB2, 0x0AB2 },
+{ 0x0AB3, 0x0AB3, 0x0AB3 },
+{ 0x0AB5, 0x0AB5, 0x0AB5 },
+{ 0x0AB6, 0x0AB6, 0x0AB6 },
+{ 0x0AB7, 0x0AB7, 0x0AB7 },
+{ 0x0AB8, 0x0AB8, 0x0AB8 },
+{ 0x0AB9, 0x0AB9, 0x0AB9 },
+{ 0x0ABC, 0x0ABC, 0x0ABC },
+{ 0x0ABD, 0x0ABD, 0x0ABD },
+{ 0x0AC1, 0x0AC1, 0x0AC1 },
+{ 0x0AC2, 0x0AC2, 0x0AC2 },
+{ 0x0AC3, 0x0AC3, 0x0AC3 },
+{ 0x0AC4, 0x0AC4, 0x0AC4 },
+{ 0x0AC5, 0x0AC5, 0x0AC5 },
+{ 0x0AC7, 0x0AC7, 0x0AC7 },
+{ 0x0AC8, 0x0AC8, 0x0AC8 },
+{ 0x0ACD, 0x0ACD, 0x0ACD },
+{ 0x0AD0, 0x0AD0, 0x0AD0 },
+{ 0x0AE0, 0x0AE0, 0x0AE0 },
+{ 0x0AE1, 0x0AE1, 0x0AE1 },
+{ 0x0AE2, 0x0AE2, 0x0AE2 },
+{ 0x0AE3, 0x0AE3, 0x0AE3 },
+{ 0x0B01, 0x0B01, 0x0B01 },
+{ 0x0B05, 0x0B05, 0x0B05 },
+{ 0x0B06, 0x0B06, 0x0B06 },
+{ 0x0B07, 0x0B07, 0x0B07 },
+{ 0x0B08, 0x0B08, 0x0B08 },
+{ 0x0B09, 0x0B09, 0x0B09 },
+{ 0x0B0A, 0x0B0A, 0x0B0A },
+{ 0x0B0B, 0x0B0B, 0x0B0B },
+{ 0x0B0C, 0x0B0C, 0x0B0C },
+{ 0x0B0F, 0x0B0F, 0x0B0F },
+{ 0x0B10, 0x0B10, 0x0B10 },
+{ 0x0B13, 0x0B13, 0x0B13 },
+{ 0x0B14, 0x0B14, 0x0B14 },
+{ 0x0B15, 0x0B15, 0x0B15 },
+{ 0x0B16, 0x0B16, 0x0B16 },
+{ 0x0B17, 0x0B17, 0x0B17 },
+{ 0x0B18, 0x0B18, 0x0B18 },
+{ 0x0B19, 0x0B19, 0x0B19 },
+{ 0x0B1A, 0x0B1A, 0x0B1A },
+{ 0x0B1B, 0x0B1B, 0x0B1B },
+{ 0x0B1C, 0x0B1C, 0x0B1C },
+{ 0x0B1D, 0x0B1D, 0x0B1D },
+{ 0x0B1E, 0x0B1E, 0x0B1E },
+{ 0x0B1F, 0x0B1F, 0x0B1F },
+{ 0x0B20, 0x0B20, 0x0B20 },
+{ 0x0B21, 0x0B21, 0x0B21 },
+{ 0x0B22, 0x0B22, 0x0B22 },
+{ 0x0B23, 0x0B23, 0x0B23 },
+{ 0x0B24, 0x0B24, 0x0B24 },
+{ 0x0B25, 0x0B25, 0x0B25 },
+{ 0x0B26, 0x0B26, 0x0B26 },
+{ 0x0B27, 0x0B27, 0x0B27 },
+{ 0x0B28, 0x0B28, 0x0B28 },
+{ 0x0B2A, 0x0B2A, 0x0B2A },
+{ 0x0B2B, 0x0B2B, 0x0B2B },
+{ 0x0B2C, 0x0B2C, 0x0B2C },
+{ 0x0B2D, 0x0B2D, 0x0B2D },
+{ 0x0B2E, 0x0B2E, 0x0B2E },
+{ 0x0B2F, 0x0B2F, 0x0B2F },
+{ 0x0B30, 0x0B30, 0x0B30 },
+{ 0x0B32, 0x0B32, 0x0B32 },
+{ 0x0B33, 0x0B33, 0x0B33 },
+{ 0x0B35, 0x0B35, 0x0B35 },
+{ 0x0B36, 0x0B36, 0x0B36 },
+{ 0x0B37, 0x0B37, 0x0B37 },
+{ 0x0B38, 0x0B38, 0x0B38 },
+{ 0x0B39, 0x0B39, 0x0B39 },
+{ 0x0B3C, 0x0B3C, 0x0B3C },
+{ 0x0B3D, 0x0B3D, 0x0B3D },
+{ 0x0B3F, 0x0B3F, 0x0B3F },
+{ 0x0B41, 0x0B41, 0x0B41 },
+{ 0x0B42, 0x0B42, 0x0B42 },
+{ 0x0B43, 0x0B43, 0x0B43 },
+{ 0x0B4D, 0x0B4D, 0x0B4D },
+{ 0x0B56, 0x0B56, 0x0B56 },
+{ 0x0B5C, 0x0B5C, 0x0B5C },
+{ 0x0B5D, 0x0B5D, 0x0B5D },
+{ 0x0B5F, 0x0B5F, 0x0B5F },
+{ 0x0B60, 0x0B60, 0x0B60 },
+{ 0x0B61, 0x0B61, 0x0B61 },
+{ 0x0B71, 0x0B71, 0x0B71 },
+{ 0x0B82, 0x0B82, 0x0B82 },
+{ 0x0B83, 0x0B83, 0x0B83 },
+{ 0x0B85, 0x0B85, 0x0B85 },
+{ 0x0B86, 0x0B86, 0x0B86 },
+{ 0x0B87, 0x0B87, 0x0B87 },
+{ 0x0B88, 0x0B88, 0x0B88 },
+{ 0x0B89, 0x0B89, 0x0B89 },
+{ 0x0B8A, 0x0B8A, 0x0B8A },
+{ 0x0B8E, 0x0B8E, 0x0B8E },
+{ 0x0B8F, 0x0B8F, 0x0B8F },
+{ 0x0B90, 0x0B90, 0x0B90 },
+{ 0x0B92, 0x0B92, 0x0B92 },
+{ 0x0B93, 0x0B93, 0x0B93 },
+{ 0x0B94, 0x0B94, 0x0B94 },
+{ 0x0B95, 0x0B95, 0x0B95 },
+{ 0x0B99, 0x0B99, 0x0B99 },
+{ 0x0B9A, 0x0B9A, 0x0B9A },
+{ 0x0B9C, 0x0B9C, 0x0B9C },
+{ 0x0B9E, 0x0B9E, 0x0B9E },
+{ 0x0B9F, 0x0B9F, 0x0B9F },
+{ 0x0BA3, 0x0BA3, 0x0BA3 },
+{ 0x0BA4, 0x0BA4, 0x0BA4 },
+{ 0x0BA8, 0x0BA8, 0x0BA8 },
+{ 0x0BA9, 0x0BA9, 0x0BA9 },
+{ 0x0BAA, 0x0BAA, 0x0BAA },
+{ 0x0BAE, 0x0BAE, 0x0BAE },
+{ 0x0BAF, 0x0BAF, 0x0BAF },
+{ 0x0BB0, 0x0BB0, 0x0BB0 },
+{ 0x0BB1, 0x0BB1, 0x0BB1 },
+{ 0x0BB2, 0x0BB2, 0x0BB2 },
+{ 0x0BB3, 0x0BB3, 0x0BB3 },
+{ 0x0BB4, 0x0BB4, 0x0BB4 },
+{ 0x0BB5, 0x0BB5, 0x0BB5 },
+{ 0x0BB6, 0x0BB6, 0x0BB6 },
+{ 0x0BB7, 0x0BB7, 0x0BB7 },
+{ 0x0BB8, 0x0BB8, 0x0BB8 },
+{ 0x0BB9, 0x0BB9, 0x0BB9 },
+{ 0x0BC0, 0x0BC0, 0x0BC0 },
+{ 0x0BCD, 0x0BCD, 0x0BCD },
+{ 0x0C05, 0x0C05, 0x0C05 },
+{ 0x0C06, 0x0C06, 0x0C06 },
+{ 0x0C07, 0x0C07, 0x0C07 },
+{ 0x0C08, 0x0C08, 0x0C08 },
+{ 0x0C09, 0x0C09, 0x0C09 },
+{ 0x0C0A, 0x0C0A, 0x0C0A },
+{ 0x0C0B, 0x0C0B, 0x0C0B },
+{ 0x0C0C, 0x0C0C, 0x0C0C },
+{ 0x0C0E, 0x0C0E, 0x0C0E },
+{ 0x0C0F, 0x0C0F, 0x0C0F },
+{ 0x0C10, 0x0C10, 0x0C10 },
+{ 0x0C12, 0x0C12, 0x0C12 },
+{ 0x0C13, 0x0C13, 0x0C13 },
+{ 0x0C14, 0x0C14, 0x0C14 },
+{ 0x0C15, 0x0C15, 0x0C15 },
+{ 0x0C16, 0x0C16, 0x0C16 },
+{ 0x0C17, 0x0C17, 0x0C17 },
+{ 0x0C18, 0x0C18, 0x0C18 },
+{ 0x0C19, 0x0C19, 0x0C19 },
+{ 0x0C1A, 0x0C1A, 0x0C1A },
+{ 0x0C1B, 0x0C1B, 0x0C1B },
+{ 0x0C1C, 0x0C1C, 0x0C1C },
+{ 0x0C1D, 0x0C1D, 0x0C1D },
+{ 0x0C1E, 0x0C1E, 0x0C1E },
+{ 0x0C1F, 0x0C1F, 0x0C1F },
+{ 0x0C20, 0x0C20, 0x0C20 },
+{ 0x0C21, 0x0C21, 0x0C21 },
+{ 0x0C22, 0x0C22, 0x0C22 },
+{ 0x0C23, 0x0C23, 0x0C23 },
+{ 0x0C24, 0x0C24, 0x0C24 },
+{ 0x0C25, 0x0C25, 0x0C25 },
+{ 0x0C26, 0x0C26, 0x0C26 },
+{ 0x0C27, 0x0C27, 0x0C27 },
+{ 0x0C28, 0x0C28, 0x0C28 },
+{ 0x0C2A, 0x0C2A, 0x0C2A },
+{ 0x0C2B, 0x0C2B, 0x0C2B },
+{ 0x0C2C, 0x0C2C, 0x0C2C },
+{ 0x0C2D, 0x0C2D, 0x0C2D },
+{ 0x0C2E, 0x0C2E, 0x0C2E },
+{ 0x0C2F, 0x0C2F, 0x0C2F },
+{ 0x0C30, 0x0C30, 0x0C30 },
+{ 0x0C31, 0x0C31, 0x0C31 },
+{ 0x0C32, 0x0C32, 0x0C32 },
+{ 0x0C33, 0x0C33, 0x0C33 },
+{ 0x0C35, 0x0C35, 0x0C35 },
+{ 0x0C36, 0x0C36, 0x0C36 },
+{ 0x0C37, 0x0C37, 0x0C37 },
+{ 0x0C38, 0x0C38, 0x0C38 },
+{ 0x0C39, 0x0C39, 0x0C39 },
+{ 0x0C3E, 0x0C3E, 0x0C3E },
+{ 0x0C3F, 0x0C3F, 0x0C3F },
+{ 0x0C40, 0x0C40, 0x0C40 },
+{ 0x0C46, 0x0C46, 0x0C46 },
+{ 0x0C47, 0x0C47, 0x0C47 },
+{ 0x0C48, 0x0C48, 0x0C48 },
+{ 0x0C4A, 0x0C4A, 0x0C4A },
+{ 0x0C4B, 0x0C4B, 0x0C4B },
+{ 0x0C4C, 0x0C4C, 0x0C4C },
+{ 0x0C4D, 0x0C4D, 0x0C4D },
+{ 0x0C55, 0x0C55, 0x0C55 },
+{ 0x0C56, 0x0C56, 0x0C56 },
+{ 0x0C60, 0x0C60, 0x0C60 },
+{ 0x0C61, 0x0C61, 0x0C61 },
+{ 0x0C85, 0x0C85, 0x0C85 },
+{ 0x0C86, 0x0C86, 0x0C86 },
+{ 0x0C87, 0x0C87, 0x0C87 },
+{ 0x0C88, 0x0C88, 0x0C88 },
+{ 0x0C89, 0x0C89, 0x0C89 },
+{ 0x0C8A, 0x0C8A, 0x0C8A },
+{ 0x0C8B, 0x0C8B, 0x0C8B },
+{ 0x0C8C, 0x0C8C, 0x0C8C },
+{ 0x0C8E, 0x0C8E, 0x0C8E },
+{ 0x0C8F, 0x0C8F, 0x0C8F },
+{ 0x0C90, 0x0C90, 0x0C90 },
+{ 0x0C92, 0x0C92, 0x0C92 },
+{ 0x0C93, 0x0C93, 0x0C93 },
+{ 0x0C94, 0x0C94, 0x0C94 },
+{ 0x0C95, 0x0C95, 0x0C95 },
+{ 0x0C96, 0x0C96, 0x0C96 },
+{ 0x0C97, 0x0C97, 0x0C97 },
+{ 0x0C98, 0x0C98, 0x0C98 },
+{ 0x0C99, 0x0C99, 0x0C99 },
+{ 0x0C9A, 0x0C9A, 0x0C9A },
+{ 0x0C9B, 0x0C9B, 0x0C9B },
+{ 0x0C9C, 0x0C9C, 0x0C9C },
+{ 0x0C9D, 0x0C9D, 0x0C9D },
+{ 0x0C9E, 0x0C9E, 0x0C9E },
+{ 0x0C9F, 0x0C9F, 0x0C9F },
+{ 0x0CA0, 0x0CA0, 0x0CA0 },
+{ 0x0CA1, 0x0CA1, 0x0CA1 },
+{ 0x0CA2, 0x0CA2, 0x0CA2 },
+{ 0x0CA3, 0x0CA3, 0x0CA3 },
+{ 0x0CA4, 0x0CA4, 0x0CA4 },
+{ 0x0CA5, 0x0CA5, 0x0CA5 },
+{ 0x0CA6, 0x0CA6, 0x0CA6 },
+{ 0x0CA7, 0x0CA7, 0x0CA7 },
+{ 0x0CA8, 0x0CA8, 0x0CA8 },
+{ 0x0CAA, 0x0CAA, 0x0CAA },
+{ 0x0CAB, 0x0CAB, 0x0CAB },
+{ 0x0CAC, 0x0CAC, 0x0CAC },
+{ 0x0CAD, 0x0CAD, 0x0CAD },
+{ 0x0CAE, 0x0CAE, 0x0CAE },
+{ 0x0CAF, 0x0CAF, 0x0CAF },
+{ 0x0CB0, 0x0CB0, 0x0CB0 },
+{ 0x0CB1, 0x0CB1, 0x0CB1 },
+{ 0x0CB2, 0x0CB2, 0x0CB2 },
+{ 0x0CB3, 0x0CB3, 0x0CB3 },
+{ 0x0CB5, 0x0CB5, 0x0CB5 },
+{ 0x0CB6, 0x0CB6, 0x0CB6 },
+{ 0x0CB7, 0x0CB7, 0x0CB7 },
+{ 0x0CB8, 0x0CB8, 0x0CB8 },
+{ 0x0CB9, 0x0CB9, 0x0CB9 },
+{ 0x0CBC, 0x0CBC, 0x0CBC },
+{ 0x0CBD, 0x0CBD, 0x0CBD },
+{ 0x0CBF, 0x0CBF, 0x0CBF },
+{ 0x0CC6, 0x0CC6, 0x0CC6 },
+{ 0x0CCC, 0x0CCC, 0x0CCC },
+{ 0x0CCD, 0x0CCD, 0x0CCD },
+{ 0x0CDE, 0x0CDE, 0x0CDE },
+{ 0x0CE0, 0x0CE0, 0x0CE0 },
+{ 0x0CE1, 0x0CE1, 0x0CE1 },
+{ 0x0D05, 0x0D05, 0x0D05 },
+{ 0x0D06, 0x0D06, 0x0D06 },
+{ 0x0D07, 0x0D07, 0x0D07 },
+{ 0x0D08, 0x0D08, 0x0D08 },
+{ 0x0D09, 0x0D09, 0x0D09 },
+{ 0x0D0A, 0x0D0A, 0x0D0A },
+{ 0x0D0B, 0x0D0B, 0x0D0B },
+{ 0x0D0C, 0x0D0C, 0x0D0C },
+{ 0x0D0E, 0x0D0E, 0x0D0E },
+{ 0x0D0F, 0x0D0F, 0x0D0F },
+{ 0x0D10, 0x0D10, 0x0D10 },
+{ 0x0D12, 0x0D12, 0x0D12 },
+{ 0x0D13, 0x0D13, 0x0D13 },
+{ 0x0D14, 0x0D14, 0x0D14 },
+{ 0x0D15, 0x0D15, 0x0D15 },
+{ 0x0D16, 0x0D16, 0x0D16 },
+{ 0x0D17, 0x0D17, 0x0D17 },
+{ 0x0D18, 0x0D18, 0x0D18 },
+{ 0x0D19, 0x0D19, 0x0D19 },
+{ 0x0D1A, 0x0D1A, 0x0D1A },
+{ 0x0D1B, 0x0D1B, 0x0D1B },
+{ 0x0D1C, 0x0D1C, 0x0D1C },
+{ 0x0D1D, 0x0D1D, 0x0D1D },
+{ 0x0D1E, 0x0D1E, 0x0D1E },
+{ 0x0D1F, 0x0D1F, 0x0D1F },
+{ 0x0D20, 0x0D20, 0x0D20 },
+{ 0x0D21, 0x0D21, 0x0D21 },
+{ 0x0D22, 0x0D22, 0x0D22 },
+{ 0x0D23, 0x0D23, 0x0D23 },
+{ 0x0D24, 0x0D24, 0x0D24 },
+{ 0x0D25, 0x0D25, 0x0D25 },
+{ 0x0D26, 0x0D26, 0x0D26 },
+{ 0x0D27, 0x0D27, 0x0D27 },
+{ 0x0D28, 0x0D28, 0x0D28 },
+{ 0x0D2A, 0x0D2A, 0x0D2A },
+{ 0x0D2B, 0x0D2B, 0x0D2B },
+{ 0x0D2C, 0x0D2C, 0x0D2C },
+{ 0x0D2D, 0x0D2D, 0x0D2D },
+{ 0x0D2E, 0x0D2E, 0x0D2E },
+{ 0x0D2F, 0x0D2F, 0x0D2F },
+{ 0x0D30, 0x0D30, 0x0D30 },
+{ 0x0D31, 0x0D31, 0x0D31 },
+{ 0x0D32, 0x0D32, 0x0D32 },
+{ 0x0D33, 0x0D33, 0x0D33 },
+{ 0x0D34, 0x0D34, 0x0D34 },
+{ 0x0D35, 0x0D35, 0x0D35 },
+{ 0x0D36, 0x0D36, 0x0D36 },
+{ 0x0D37, 0x0D37, 0x0D37 },
+{ 0x0D38, 0x0D38, 0x0D38 },
+{ 0x0D39, 0x0D39, 0x0D39 },
+{ 0x0D41, 0x0D41, 0x0D41 },
+{ 0x0D42, 0x0D42, 0x0D42 },
+{ 0x0D43, 0x0D43, 0x0D43 },
+{ 0x0D4D, 0x0D4D, 0x0D4D },
+{ 0x0D60, 0x0D60, 0x0D60 },
+{ 0x0D61, 0x0D61, 0x0D61 },
+{ 0x0D85, 0x0D85, 0x0D85 },
+{ 0x0D86, 0x0D86, 0x0D86 },
+{ 0x0D87, 0x0D87, 0x0D87 },
+{ 0x0D88, 0x0D88, 0x0D88 },
+{ 0x0D89, 0x0D89, 0x0D89 },
+{ 0x0D8A, 0x0D8A, 0x0D8A },
+{ 0x0D8B, 0x0D8B, 0x0D8B },
+{ 0x0D8C, 0x0D8C, 0x0D8C },
+{ 0x0D8D, 0x0D8D, 0x0D8D },
+{ 0x0D8E, 0x0D8E, 0x0D8E },
+{ 0x0D8F, 0x0D8F, 0x0D8F },
+{ 0x0D90, 0x0D90, 0x0D90 },
+{ 0x0D91, 0x0D91, 0x0D91 },
+{ 0x0D92, 0x0D92, 0x0D92 },
+{ 0x0D93, 0x0D93, 0x0D93 },
+{ 0x0D94, 0x0D94, 0x0D94 },
+{ 0x0D95, 0x0D95, 0x0D95 },
+{ 0x0D96, 0x0D96, 0x0D96 },
+{ 0x0D9A, 0x0D9A, 0x0D9A },
+{ 0x0D9B, 0x0D9B, 0x0D9B },
+{ 0x0D9C, 0x0D9C, 0x0D9C },
+{ 0x0D9D, 0x0D9D, 0x0D9D },
+{ 0x0D9E, 0x0D9E, 0x0D9E },
+{ 0x0D9F, 0x0D9F, 0x0D9F },
+{ 0x0DA0, 0x0DA0, 0x0DA0 },
+{ 0x0DA1, 0x0DA1, 0x0DA1 },
+{ 0x0DA2, 0x0DA2, 0x0DA2 },
+{ 0x0DA3, 0x0DA3, 0x0DA3 },
+{ 0x0DA4, 0x0DA4, 0x0DA4 },
+{ 0x0DA5, 0x0DA5, 0x0DA5 },
+{ 0x0DA6, 0x0DA6, 0x0DA6 },
+{ 0x0DA7, 0x0DA7, 0x0DA7 },
+{ 0x0DA8, 0x0DA8, 0x0DA8 },
+{ 0x0DA9, 0x0DA9, 0x0DA9 },
+{ 0x0DAA, 0x0DAA, 0x0DAA },
+{ 0x0DAB, 0x0DAB, 0x0DAB },
+{ 0x0DAC, 0x0DAC, 0x0DAC },
+{ 0x0DAD, 0x0DAD, 0x0DAD },
+{ 0x0DAE, 0x0DAE, 0x0DAE },
+{ 0x0DAF, 0x0DAF, 0x0DAF },
+{ 0x0DB0, 0x0DB0, 0x0DB0 },
+{ 0x0DB1, 0x0DB1, 0x0DB1 },
+{ 0x0DB3, 0x0DB3, 0x0DB3 },
+{ 0x0DB4, 0x0DB4, 0x0DB4 },
+{ 0x0DB5, 0x0DB5, 0x0DB5 },
+{ 0x0DB6, 0x0DB6, 0x0DB6 },
+{ 0x0DB7, 0x0DB7, 0x0DB7 },
+{ 0x0DB8, 0x0DB8, 0x0DB8 },
+{ 0x0DB9, 0x0DB9, 0x0DB9 },
+{ 0x0DBA, 0x0DBA, 0x0DBA },
+{ 0x0DBB, 0x0DBB, 0x0DBB },
+{ 0x0DBD, 0x0DBD, 0x0DBD },
+{ 0x0DC0, 0x0DC0, 0x0DC0 },
+{ 0x0DC1, 0x0DC1, 0x0DC1 },
+{ 0x0DC2, 0x0DC2, 0x0DC2 },
+{ 0x0DC3, 0x0DC3, 0x0DC3 },
+{ 0x0DC4, 0x0DC4, 0x0DC4 },
+{ 0x0DC5, 0x0DC5, 0x0DC5 },
+{ 0x0DC6, 0x0DC6, 0x0DC6 },
+{ 0x0DCA, 0x0DCA, 0x0DCA },
+{ 0x0DD2, 0x0DD2, 0x0DD2 },
+{ 0x0DD3, 0x0DD3, 0x0DD3 },
+{ 0x0DD4, 0x0DD4, 0x0DD4 },
+{ 0x0DD6, 0x0DD6, 0x0DD6 },
+{ 0x0E01, 0x0E01, 0x0E01 },
+{ 0x0E02, 0x0E02, 0x0E02 },
+{ 0x0E03, 0x0E03, 0x0E03 },
+{ 0x0E04, 0x0E04, 0x0E04 },
+{ 0x0E05, 0x0E05, 0x0E05 },
+{ 0x0E06, 0x0E06, 0x0E06 },
+{ 0x0E07, 0x0E07, 0x0E07 },
+{ 0x0E08, 0x0E08, 0x0E08 },
+{ 0x0E09, 0x0E09, 0x0E09 },
+{ 0x0E0A, 0x0E0A, 0x0E0A },
+{ 0x0E0B, 0x0E0B, 0x0E0B },
+{ 0x0E0C, 0x0E0C, 0x0E0C },
+{ 0x0E0D, 0x0E0D, 0x0E0D },
+{ 0x0E0E, 0x0E0E, 0x0E0E },
+{ 0x0E0F, 0x0E0F, 0x0E0F },
+{ 0x0E10, 0x0E10, 0x0E10 },
+{ 0x0E11, 0x0E11, 0x0E11 },
+{ 0x0E12, 0x0E12, 0x0E12 },
+{ 0x0E13, 0x0E13, 0x0E13 },
+{ 0x0E14, 0x0E14, 0x0E14 },
+{ 0x0E15, 0x0E15, 0x0E15 },
+{ 0x0E16, 0x0E16, 0x0E16 },
+{ 0x0E17, 0x0E17, 0x0E17 },
+{ 0x0E18, 0x0E18, 0x0E18 },
+{ 0x0E19, 0x0E19, 0x0E19 },
+{ 0x0E1A, 0x0E1A, 0x0E1A },
+{ 0x0E1B, 0x0E1B, 0x0E1B },
+{ 0x0E1C, 0x0E1C, 0x0E1C },
+{ 0x0E1D, 0x0E1D, 0x0E1D },
+{ 0x0E1E, 0x0E1E, 0x0E1E },
+{ 0x0E1F, 0x0E1F, 0x0E1F },
+{ 0x0E20, 0x0E20, 0x0E20 },
+{ 0x0E21, 0x0E21, 0x0E21 },
+{ 0x0E22, 0x0E22, 0x0E22 },
+{ 0x0E23, 0x0E23, 0x0E23 },
+{ 0x0E24, 0x0E24, 0x0E24 },
+{ 0x0E25, 0x0E25, 0x0E25 },
+{ 0x0E26, 0x0E26, 0x0E26 },
+{ 0x0E27, 0x0E27, 0x0E27 },
+{ 0x0E28, 0x0E28, 0x0E28 },
+{ 0x0E29, 0x0E29, 0x0E29 },
+{ 0x0E2A, 0x0E2A, 0x0E2A },
+{ 0x0E2B, 0x0E2B, 0x0E2B },
+{ 0x0E2C, 0x0E2C, 0x0E2C },
+{ 0x0E2D, 0x0E2D, 0x0E2D },
+{ 0x0E2E, 0x0E2E, 0x0E2E },
+{ 0x0E2F, 0x0E2F, 0x0E2F },
+{ 0x0E30, 0x0E30, 0x0E30 },
+{ 0x0E31, 0x0E31, 0x0E31 },
+{ 0x0E32, 0x0E32, 0x0E32 },
+{ 0x0E33, 0x0E33, 0x0E33 },
+{ 0x0E34, 0x0E34, 0x0E34 },
+{ 0x0E35, 0x0E35, 0x0E35 },
+{ 0x0E36, 0x0E36, 0x0E36 },
+{ 0x0E37, 0x0E37, 0x0E37 },
+{ 0x0E38, 0x0E38, 0x0E38 },
+{ 0x0E39, 0x0E39, 0x0E39 },
+{ 0x0E3A, 0x0E3A, 0x0E3A },
+{ 0x0E40, 0x0E40, 0x0E40 },
+{ 0x0E41, 0x0E41, 0x0E41 },
+{ 0x0E42, 0x0E42, 0x0E42 },
+{ 0x0E43, 0x0E43, 0x0E43 },
+{ 0x0E44, 0x0E44, 0x0E44 },
+{ 0x0E45, 0x0E45, 0x0E45 },
+{ 0x0E46, 0x0E46, 0x0E46 },
+{ 0x0E47, 0x0E47, 0x0E47 },
+{ 0x0E48, 0x0E48, 0x0E48 },
+{ 0x0E49, 0x0E49, 0x0E49 },
+{ 0x0E4A, 0x0E4A, 0x0E4A },
+{ 0x0E4B, 0x0E4B, 0x0E4B },
+{ 0x0E4C, 0x0E4C, 0x0E4C },
+{ 0x0E4D, 0x0E4D, 0x0E4D },
+{ 0x0E4E, 0x0E4E, 0x0E4E },
+{ 0x0E81, 0x0E81, 0x0E81 },
+{ 0x0E82, 0x0E82, 0x0E82 },
+{ 0x0E84, 0x0E84, 0x0E84 },
+{ 0x0E87, 0x0E87, 0x0E87 },
+{ 0x0E88, 0x0E88, 0x0E88 },
+{ 0x0E8A, 0x0E8A, 0x0E8A },
+{ 0x0E8D, 0x0E8D, 0x0E8D },
+{ 0x0E94, 0x0E94, 0x0E94 },
+{ 0x0E95, 0x0E95, 0x0E95 },
+{ 0x0E96, 0x0E96, 0x0E96 },
+{ 0x0E97, 0x0E97, 0x0E97 },
+{ 0x0E99, 0x0E99, 0x0E99 },
+{ 0x0E9A, 0x0E9A, 0x0E9A },
+{ 0x0E9B, 0x0E9B, 0x0E9B },
+{ 0x0E9C, 0x0E9C, 0x0E9C },
+{ 0x0E9D, 0x0E9D, 0x0E9D },
+{ 0x0E9E, 0x0E9E, 0x0E9E },
+{ 0x0E9F, 0x0E9F, 0x0E9F },
+{ 0x0EA1, 0x0EA1, 0x0EA1 },
+{ 0x0EA2, 0x0EA2, 0x0EA2 },
+{ 0x0EA3, 0x0EA3, 0x0EA3 },
+{ 0x0EA5, 0x0EA5, 0x0EA5 },
+{ 0x0EA7, 0x0EA7, 0x0EA7 },
+{ 0x0EAA, 0x0EAA, 0x0EAA },
+{ 0x0EAB, 0x0EAB, 0x0EAB },
+{ 0x0EAD, 0x0EAD, 0x0EAD },
+{ 0x0EAE, 0x0EAE, 0x0EAE },
+{ 0x0EAF, 0x0EAF, 0x0EAF },
+{ 0x0EB0, 0x0EB0, 0x0EB0 },
+{ 0x0EB1, 0x0EB1, 0x0EB1 },
+{ 0x0EB2, 0x0EB2, 0x0EB2 },
+{ 0x0EB3, 0x0EB3, 0x0EB3 },
+{ 0x0EB4, 0x0EB4, 0x0EB4 },
+{ 0x0EB5, 0x0EB5, 0x0EB5 },
+{ 0x0EB6, 0x0EB6, 0x0EB6 },
+{ 0x0EB7, 0x0EB7, 0x0EB7 },
+{ 0x0EB8, 0x0EB8, 0x0EB8 },
+{ 0x0EB9, 0x0EB9, 0x0EB9 },
+{ 0x0EBB, 0x0EBB, 0x0EBB },
+{ 0x0EBC, 0x0EBC, 0x0EBC },
+{ 0x0EBD, 0x0EBD, 0x0EBD },
+{ 0x0EC0, 0x0EC0, 0x0EC0 },
+{ 0x0EC1, 0x0EC1, 0x0EC1 },
+{ 0x0EC2, 0x0EC2, 0x0EC2 },
+{ 0x0EC3, 0x0EC3, 0x0EC3 },
+{ 0x0EC4, 0x0EC4, 0x0EC4 },
+{ 0x0EC6, 0x0EC6, 0x0EC6 },
+{ 0x0EC8, 0x0EC8, 0x0EC8 },
+{ 0x0EC9, 0x0EC9, 0x0EC9 },
+{ 0x0ECA, 0x0ECA, 0x0ECA },
+{ 0x0ECB, 0x0ECB, 0x0ECB },
+{ 0x0ECC, 0x0ECC, 0x0ECC },
+{ 0x0ECD, 0x0ECD, 0x0ECD },
+{ 0x0EDC, 0x0EDC, 0x0EDC },
+{ 0x0EDD, 0x0EDD, 0x0EDD },
+{ 0x0F00, 0x0F00, 0x0F00 },
+{ 0x0F18, 0x0F18, 0x0F18 },
+{ 0x0F19, 0x0F19, 0x0F19 },
+{ 0x0F35, 0x0F35, 0x0F35 },
+{ 0x0F37, 0x0F37, 0x0F37 },
+{ 0x0F39, 0x0F39, 0x0F39 },
+{ 0x0F40, 0x0F40, 0x0F40 },
+{ 0x0F41, 0x0F41, 0x0F41 },
+{ 0x0F42, 0x0F42, 0x0F42 },
+{ 0x0F43, 0x0F43, 0x0F43 },
+{ 0x0F44, 0x0F44, 0x0F44 },
+{ 0x0F45, 0x0F45, 0x0F45 },
+{ 0x0F46, 0x0F46, 0x0F46 },
+{ 0x0F47, 0x0F47, 0x0F47 },
+{ 0x0F49, 0x0F49, 0x0F49 },
+{ 0x0F4A, 0x0F4A, 0x0F4A },
+{ 0x0F4B, 0x0F4B, 0x0F4B },
+{ 0x0F4C, 0x0F4C, 0x0F4C },
+{ 0x0F4D, 0x0F4D, 0x0F4D },
+{ 0x0F4E, 0x0F4E, 0x0F4E },
+{ 0x0F4F, 0x0F4F, 0x0F4F },
+{ 0x0F50, 0x0F50, 0x0F50 },
+{ 0x0F51, 0x0F51, 0x0F51 },
+{ 0x0F52, 0x0F52, 0x0F52 },
+{ 0x0F53, 0x0F53, 0x0F53 },
+{ 0x0F54, 0x0F54, 0x0F54 },
+{ 0x0F55, 0x0F55, 0x0F55 },
+{ 0x0F56, 0x0F56, 0x0F56 },
+{ 0x0F57, 0x0F57, 0x0F57 },
+{ 0x0F58, 0x0F58, 0x0F58 },
+{ 0x0F59, 0x0F59, 0x0F59 },
+{ 0x0F5A, 0x0F5A, 0x0F5A },
+{ 0x0F5B, 0x0F5B, 0x0F5B },
+{ 0x0F5C, 0x0F5C, 0x0F5C },
+{ 0x0F5D, 0x0F5D, 0x0F5D },
+{ 0x0F5E, 0x0F5E, 0x0F5E },
+{ 0x0F5F, 0x0F5F, 0x0F5F },
+{ 0x0F60, 0x0F60, 0x0F60 },
+{ 0x0F61, 0x0F61, 0x0F61 },
+{ 0x0F62, 0x0F62, 0x0F62 },
+{ 0x0F63, 0x0F63, 0x0F63 },
+{ 0x0F64, 0x0F64, 0x0F64 },
+{ 0x0F65, 0x0F65, 0x0F65 },
+{ 0x0F66, 0x0F66, 0x0F66 },
+{ 0x0F67, 0x0F67, 0x0F67 },
+{ 0x0F68, 0x0F68, 0x0F68 },
+{ 0x0F69, 0x0F69, 0x0F69 },
+{ 0x0F6A, 0x0F6A, 0x0F6A },
+{ 0x0F71, 0x0F71, 0x0F71 },
+{ 0x0F72, 0x0F72, 0x0F72 },
+{ 0x0F73, 0x0F73, 0x0F73 },
+{ 0x0F74, 0x0F74, 0x0F74 },
+{ 0x0F75, 0x0F75, 0x0F75 },
+{ 0x0F76, 0x0F76, 0x0F76 },
+{ 0x0F77, 0x0F77, 0x0F77 },
+{ 0x0F78, 0x0F78, 0x0F78 },
+{ 0x0F79, 0x0F79, 0x0F79 },
+{ 0x0F7A, 0x0F7A, 0x0F7A },
+{ 0x0F7B, 0x0F7B, 0x0F7B },
+{ 0x0F7C, 0x0F7C, 0x0F7C },
+{ 0x0F7D, 0x0F7D, 0x0F7D },
+{ 0x0F7E, 0x0F7E, 0x0F7E },
+{ 0x0F80, 0x0F80, 0x0F80 },
+{ 0x0F81, 0x0F81, 0x0F81 },
+{ 0x0F82, 0x0F82, 0x0F82 },
+{ 0x0F83, 0x0F83, 0x0F83 },
+{ 0x0F84, 0x0F84, 0x0F84 },
+{ 0x0F86, 0x0F86, 0x0F86 },
+{ 0x0F87, 0x0F87, 0x0F87 },
+{ 0x0F88, 0x0F88, 0x0F88 },
+{ 0x0F89, 0x0F89, 0x0F89 },
+{ 0x0F8A, 0x0F8A, 0x0F8A },
+{ 0x0F8B, 0x0F8B, 0x0F8B },
+{ 0x0F90, 0x0F90, 0x0F90 },
+{ 0x0F91, 0x0F91, 0x0F91 },
+{ 0x0F92, 0x0F92, 0x0F92 },
+{ 0x0F93, 0x0F93, 0x0F93 },
+{ 0x0F94, 0x0F94, 0x0F94 },
+{ 0x0F95, 0x0F95, 0x0F95 },
+{ 0x0F96, 0x0F96, 0x0F96 },
+{ 0x0F97, 0x0F97, 0x0F97 },
+{ 0x0F99, 0x0F99, 0x0F99 },
+{ 0x0F9A, 0x0F9A, 0x0F9A },
+{ 0x0F9B, 0x0F9B, 0x0F9B },
+{ 0x0F9C, 0x0F9C, 0x0F9C },
+{ 0x0F9D, 0x0F9D, 0x0F9D },
+{ 0x0F9E, 0x0F9E, 0x0F9E },
+{ 0x0F9F, 0x0F9F, 0x0F9F },
+{ 0x0FA0, 0x0FA0, 0x0FA0 },
+{ 0x0FA1, 0x0FA1, 0x0FA1 },
+{ 0x0FA2, 0x0FA2, 0x0FA2 },
+{ 0x0FA3, 0x0FA3, 0x0FA3 },
+{ 0x0FA4, 0x0FA4, 0x0FA4 },
+{ 0x0FA5, 0x0FA5, 0x0FA5 },
+{ 0x0FA6, 0x0FA6, 0x0FA6 },
+{ 0x0FA7, 0x0FA7, 0x0FA7 },
+{ 0x0FA8, 0x0FA8, 0x0FA8 },
+{ 0x0FA9, 0x0FA9, 0x0FA9 },
+{ 0x0FAA, 0x0FAA, 0x0FAA },
+{ 0x0FAB, 0x0FAB, 0x0FAB },
+{ 0x0FAC, 0x0FAC, 0x0FAC },
+{ 0x0FAD, 0x0FAD, 0x0FAD },
+{ 0x0FAE, 0x0FAE, 0x0FAE },
+{ 0x0FAF, 0x0FAF, 0x0FAF },
+{ 0x0FB0, 0x0FB0, 0x0FB0 },
+{ 0x0FB1, 0x0FB1, 0x0FB1 },
+{ 0x0FB2, 0x0FB2, 0x0FB2 },
+{ 0x0FB3, 0x0FB3, 0x0FB3 },
+{ 0x0FB4, 0x0FB4, 0x0FB4 },
+{ 0x0FB5, 0x0FB5, 0x0FB5 },
+{ 0x0FB6, 0x0FB6, 0x0FB6 },
+{ 0x0FB7, 0x0FB7, 0x0FB7 },
+{ 0x0FB8, 0x0FB8, 0x0FB8 },
+{ 0x0FB9, 0x0FB9, 0x0FB9 },
+{ 0x0FBA, 0x0FBA, 0x0FBA },
+{ 0x0FBB, 0x0FBB, 0x0FBB },
+{ 0x0FBC, 0x0FBC, 0x0FBC },
+{ 0x0FC6, 0x0FC6, 0x0FC6 },
+{ 0x1000, 0x1000, 0x1000 },
+{ 0x1001, 0x1001, 0x1001 },
+{ 0x1002, 0x1002, 0x1002 },
+{ 0x1003, 0x1003, 0x1003 },
+{ 0x1004, 0x1004, 0x1004 },
+{ 0x1005, 0x1005, 0x1005 },
+{ 0x1006, 0x1006, 0x1006 },
+{ 0x1007, 0x1007, 0x1007 },
+{ 0x1008, 0x1008, 0x1008 },
+{ 0x1009, 0x1009, 0x1009 },
+{ 0x100A, 0x100A, 0x100A },
+{ 0x100B, 0x100B, 0x100B },
+{ 0x100C, 0x100C, 0x100C },
+{ 0x100D, 0x100D, 0x100D },
+{ 0x100E, 0x100E, 0x100E },
+{ 0x100F, 0x100F, 0x100F },
+{ 0x1010, 0x1010, 0x1010 },
+{ 0x1011, 0x1011, 0x1011 },
+{ 0x1012, 0x1012, 0x1012 },
+{ 0x1013, 0x1013, 0x1013 },
+{ 0x1014, 0x1014, 0x1014 },
+{ 0x1015, 0x1015, 0x1015 },
+{ 0x1016, 0x1016, 0x1016 },
+{ 0x1017, 0x1017, 0x1017 },
+{ 0x1018, 0x1018, 0x1018 },
+{ 0x1019, 0x1019, 0x1019 },
+{ 0x101A, 0x101A, 0x101A },
+{ 0x101B, 0x101B, 0x101B },
+{ 0x101C, 0x101C, 0x101C },
+{ 0x101D, 0x101D, 0x101D },
+{ 0x101E, 0x101E, 0x101E },
+{ 0x101F, 0x101F, 0x101F },
+{ 0x1020, 0x1020, 0x1020 },
+{ 0x1021, 0x1021, 0x1021 },
+{ 0x1023, 0x1023, 0x1023 },
+{ 0x1024, 0x1024, 0x1024 },
+{ 0x1025, 0x1025, 0x1025 },
+{ 0x1026, 0x1026, 0x1026 },
+{ 0x1027, 0x1027, 0x1027 },
+{ 0x1029, 0x1029, 0x1029 },
+{ 0x102A, 0x102A, 0x102A },
+{ 0x102D, 0x102D, 0x102D },
+{ 0x102E, 0x102E, 0x102E },
+{ 0x102F, 0x102F, 0x102F },
+{ 0x1030, 0x1030, 0x1030 },
+{ 0x1032, 0x1032, 0x1032 },
+{ 0x1036, 0x1036, 0x1036 },
+{ 0x1037, 0x1037, 0x1037 },
+{ 0x1039, 0x1039, 0x1039 },
+{ 0x1050, 0x1050, 0x1050 },
+{ 0x1051, 0x1051, 0x1051 },
+{ 0x1052, 0x1052, 0x1052 },
+{ 0x1053, 0x1053, 0x1053 },
+{ 0x1054, 0x1054, 0x1054 },
+{ 0x1055, 0x1055, 0x1055 },
+{ 0x1058, 0x1058, 0x1058 },
+{ 0x1059, 0x1059, 0x1059 },
+{ 0x10A0, 0x10A0, 0x2D00 },
+{ 0x10A1, 0x10A1, 0x2D01 },
+{ 0x10A2, 0x10A2, 0x2D02 },
+{ 0x10A3, 0x10A3, 0x2D03 },
+{ 0x10A4, 0x10A4, 0x2D04 },
+{ 0x10A5, 0x10A5, 0x2D05 },
+{ 0x10A6, 0x10A6, 0x2D06 },
+{ 0x10A7, 0x10A7, 0x2D07 },
+{ 0x10A8, 0x10A8, 0x2D08 },
+{ 0x10A9, 0x10A9, 0x2D09 },
+{ 0x10AA, 0x10AA, 0x2D0A },
+{ 0x10AB, 0x10AB, 0x2D0B },
+{ 0x10AC, 0x10AC, 0x2D0C },
+{ 0x10AD, 0x10AD, 0x2D0D },
+{ 0x10AE, 0x10AE, 0x2D0E },
+{ 0x10AF, 0x10AF, 0x2D0F },
+{ 0x10B0, 0x10B0, 0x2D10 },
+{ 0x10B1, 0x10B1, 0x2D11 },
+{ 0x10B2, 0x10B2, 0x2D12 },
+{ 0x10B3, 0x10B3, 0x2D13 },
+{ 0x10B4, 0x10B4, 0x2D14 },
+{ 0x10B5, 0x10B5, 0x2D15 },
+{ 0x10B6, 0x10B6, 0x2D16 },
+{ 0x10B7, 0x10B7, 0x2D17 },
+{ 0x10B8, 0x10B8, 0x2D18 },
+{ 0x10B9, 0x10B9, 0x2D19 },
+{ 0x10BA, 0x10BA, 0x2D1A },
+{ 0x10BB, 0x10BB, 0x2D1B },
+{ 0x10BC, 0x10BC, 0x2D1C },
+{ 0x10BD, 0x10BD, 0x2D1D },
+{ 0x10BE, 0x10BE, 0x2D1E },
+{ 0x10BF, 0x10BF, 0x2D1F },
+{ 0x10C0, 0x10C0, 0x2D20 },
+{ 0x10C1, 0x10C1, 0x2D21 },
+{ 0x10C2, 0x10C2, 0x2D22 },
+{ 0x10C3, 0x10C3, 0x2D23 },
+{ 0x10C4, 0x10C4, 0x2D24 },
+{ 0x10C5, 0x10C5, 0x2D25 },
+{ 0x10D0, 0x10D0, 0x10D0 },
+{ 0x10D1, 0x10D1, 0x10D1 },
+{ 0x10D2, 0x10D2, 0x10D2 },
+{ 0x10D3, 0x10D3, 0x10D3 },
+{ 0x10D4, 0x10D4, 0x10D4 },
+{ 0x10D5, 0x10D5, 0x10D5 },
+{ 0x10D6, 0x10D6, 0x10D6 },
+{ 0x10D7, 0x10D7, 0x10D7 },
+{ 0x10D8, 0x10D8, 0x10D8 },
+{ 0x10D9, 0x10D9, 0x10D9 },
+{ 0x10DA, 0x10DA, 0x10DA },
+{ 0x10DB, 0x10DB, 0x10DB },
+{ 0x10DC, 0x10DC, 0x10DC },
+{ 0x10DD, 0x10DD, 0x10DD },
+{ 0x10DE, 0x10DE, 0x10DE },
+{ 0x10DF, 0x10DF, 0x10DF },
+{ 0x10E0, 0x10E0, 0x10E0 },
+{ 0x10E1, 0x10E1, 0x10E1 },
+{ 0x10E2, 0x10E2, 0x10E2 },
+{ 0x10E3, 0x10E3, 0x10E3 },
+{ 0x10E4, 0x10E4, 0x10E4 },
+{ 0x10E5, 0x10E5, 0x10E5 },
+{ 0x10E6, 0x10E6, 0x10E6 },
+{ 0x10E7, 0x10E7, 0x10E7 },
+{ 0x10E8, 0x10E8, 0x10E8 },
+{ 0x10E9, 0x10E9, 0x10E9 },
+{ 0x10EA, 0x10EA, 0x10EA },
+{ 0x10EB, 0x10EB, 0x10EB },
+{ 0x10EC, 0x10EC, 0x10EC },
+{ 0x10ED, 0x10ED, 0x10ED },
+{ 0x10EE, 0x10EE, 0x10EE },
+{ 0x10EF, 0x10EF, 0x10EF },
+{ 0x10F0, 0x10F0, 0x10F0 },
+{ 0x10F1, 0x10F1, 0x10F1 },
+{ 0x10F2, 0x10F2, 0x10F2 },
+{ 0x10F3, 0x10F3, 0x10F3 },
+{ 0x10F4, 0x10F4, 0x10F4 },
+{ 0x10F5, 0x10F5, 0x10F5 },
+{ 0x10F6, 0x10F6, 0x10F6 },
+{ 0x10F7, 0x10F7, 0x10F7 },
+{ 0x10F8, 0x10F8, 0x10F8 },
+{ 0x10F9, 0x10F9, 0x10F9 },
+{ 0x10FA, 0x10FA, 0x10FA },
+{ 0x10FC, 0x10FC, 0x10FC },
+{ 0x1100, 0x1100, 0x1100 },
+{ 0x1101, 0x1101, 0x1101 },
+{ 0x1102, 0x1102, 0x1102 },
+{ 0x1103, 0x1103, 0x1103 },
+{ 0x1104, 0x1104, 0x1104 },
+{ 0x1105, 0x1105, 0x1105 },
+{ 0x1106, 0x1106, 0x1106 },
+{ 0x1107, 0x1107, 0x1107 },
+{ 0x1108, 0x1108, 0x1108 },
+{ 0x1109, 0x1109, 0x1109 },
+{ 0x110A, 0x110A, 0x110A },
+{ 0x110B, 0x110B, 0x110B },
+{ 0x110C, 0x110C, 0x110C },
+{ 0x110D, 0x110D, 0x110D },
+{ 0x110E, 0x110E, 0x110E },
+{ 0x110F, 0x110F, 0x110F },
+{ 0x1110, 0x1110, 0x1110 },
+{ 0x1111, 0x1111, 0x1111 },
+{ 0x1112, 0x1112, 0x1112 },
+{ 0x1113, 0x1113, 0x1113 },
+{ 0x1114, 0x1114, 0x1114 },
+{ 0x1115, 0x1115, 0x1115 },
+{ 0x1116, 0x1116, 0x1116 },
+{ 0x1117, 0x1117, 0x1117 },
+{ 0x1118, 0x1118, 0x1118 },
+{ 0x1119, 0x1119, 0x1119 },
+{ 0x111A, 0x111A, 0x111A },
+{ 0x111B, 0x111B, 0x111B },
+{ 0x111C, 0x111C, 0x111C },
+{ 0x111D, 0x111D, 0x111D },
+{ 0x111E, 0x111E, 0x111E },
+{ 0x111F, 0x111F, 0x111F },
+{ 0x1120, 0x1120, 0x1120 },
+{ 0x1121, 0x1121, 0x1121 },
+{ 0x1122, 0x1122, 0x1122 },
+{ 0x1123, 0x1123, 0x1123 },
+{ 0x1124, 0x1124, 0x1124 },
+{ 0x1125, 0x1125, 0x1125 },
+{ 0x1126, 0x1126, 0x1126 },
+{ 0x1127, 0x1127, 0x1127 },
+{ 0x1128, 0x1128, 0x1128 },
+{ 0x1129, 0x1129, 0x1129 },
+{ 0x112A, 0x112A, 0x112A },
+{ 0x112B, 0x112B, 0x112B },
+{ 0x112C, 0x112C, 0x112C },
+{ 0x112D, 0x112D, 0x112D },
+{ 0x112E, 0x112E, 0x112E },
+{ 0x112F, 0x112F, 0x112F },
+{ 0x1130, 0x1130, 0x1130 },
+{ 0x1131, 0x1131, 0x1131 },
+{ 0x1132, 0x1132, 0x1132 },
+{ 0x1133, 0x1133, 0x1133 },
+{ 0x1134, 0x1134, 0x1134 },
+{ 0x1135, 0x1135, 0x1135 },
+{ 0x1136, 0x1136, 0x1136 },
+{ 0x1137, 0x1137, 0x1137 },
+{ 0x1138, 0x1138, 0x1138 },
+{ 0x1139, 0x1139, 0x1139 },
+{ 0x113A, 0x113A, 0x113A },
+{ 0x113B, 0x113B, 0x113B },
+{ 0x113C, 0x113C, 0x113C },
+{ 0x113D, 0x113D, 0x113D },
+{ 0x113E, 0x113E, 0x113E },
+{ 0x113F, 0x113F, 0x113F },
+{ 0x1140, 0x1140, 0x1140 },
+{ 0x1141, 0x1141, 0x1141 },
+{ 0x1142, 0x1142, 0x1142 },
+{ 0x1143, 0x1143, 0x1143 },
+{ 0x1144, 0x1144, 0x1144 },
+{ 0x1145, 0x1145, 0x1145 },
+{ 0x1146, 0x1146, 0x1146 },
+{ 0x1147, 0x1147, 0x1147 },
+{ 0x1148, 0x1148, 0x1148 },
+{ 0x1149, 0x1149, 0x1149 },
+{ 0x114A, 0x114A, 0x114A },
+{ 0x114B, 0x114B, 0x114B },
+{ 0x114C, 0x114C, 0x114C },
+{ 0x114D, 0x114D, 0x114D },
+{ 0x114E, 0x114E, 0x114E },
+{ 0x114F, 0x114F, 0x114F },
+{ 0x1150, 0x1150, 0x1150 },
+{ 0x1151, 0x1151, 0x1151 },
+{ 0x1152, 0x1152, 0x1152 },
+{ 0x1153, 0x1153, 0x1153 },
+{ 0x1154, 0x1154, 0x1154 },
+{ 0x1155, 0x1155, 0x1155 },
+{ 0x1156, 0x1156, 0x1156 },
+{ 0x1157, 0x1157, 0x1157 },
+{ 0x1158, 0x1158, 0x1158 },
+{ 0x1159, 0x1159, 0x1159 },
+{ 0x115F, 0x115F, 0x115F },
+{ 0x1160, 0x1160, 0x1160 },
+{ 0x1161, 0x1161, 0x1161 },
+{ 0x1162, 0x1162, 0x1162 },
+{ 0x1163, 0x1163, 0x1163 },
+{ 0x1164, 0x1164, 0x1164 },
+{ 0x1165, 0x1165, 0x1165 },
+{ 0x1166, 0x1166, 0x1166 },
+{ 0x1167, 0x1167, 0x1167 },
+{ 0x1168, 0x1168, 0x1168 },
+{ 0x1169, 0x1169, 0x1169 },
+{ 0x116A, 0x116A, 0x116A },
+{ 0x116B, 0x116B, 0x116B },
+{ 0x116C, 0x116C, 0x116C },
+{ 0x116D, 0x116D, 0x116D },
+{ 0x116E, 0x116E, 0x116E },
+{ 0x116F, 0x116F, 0x116F },
+{ 0x1170, 0x1170, 0x1170 },
+{ 0x1171, 0x1171, 0x1171 },
+{ 0x1172, 0x1172, 0x1172 },
+{ 0x1173, 0x1173, 0x1173 },
+{ 0x1174, 0x1174, 0x1174 },
+{ 0x1175, 0x1175, 0x1175 },
+{ 0x1176, 0x1176, 0x1176 },
+{ 0x1177, 0x1177, 0x1177 },
+{ 0x1178, 0x1178, 0x1178 },
+{ 0x1179, 0x1179, 0x1179 },
+{ 0x117A, 0x117A, 0x117A },
+{ 0x117B, 0x117B, 0x117B },
+{ 0x117C, 0x117C, 0x117C },
+{ 0x117D, 0x117D, 0x117D },
+{ 0x117E, 0x117E, 0x117E },
+{ 0x117F, 0x117F, 0x117F },
+{ 0x1180, 0x1180, 0x1180 },
+{ 0x1181, 0x1181, 0x1181 },
+{ 0x1182, 0x1182, 0x1182 },
+{ 0x1183, 0x1183, 0x1183 },
+{ 0x1184, 0x1184, 0x1184 },
+{ 0x1185, 0x1185, 0x1185 },
+{ 0x1186, 0x1186, 0x1186 },
+{ 0x1187, 0x1187, 0x1187 },
+{ 0x1188, 0x1188, 0x1188 },
+{ 0x1189, 0x1189, 0x1189 },
+{ 0x118A, 0x118A, 0x118A },
+{ 0x118B, 0x118B, 0x118B },
+{ 0x118C, 0x118C, 0x118C },
+{ 0x118D, 0x118D, 0x118D },
+{ 0x118E, 0x118E, 0x118E },
+{ 0x118F, 0x118F, 0x118F },
+{ 0x1190, 0x1190, 0x1190 },
+{ 0x1191, 0x1191, 0x1191 },
+{ 0x1192, 0x1192, 0x1192 },
+{ 0x1193, 0x1193, 0x1193 },
+{ 0x1194, 0x1194, 0x1194 },
+{ 0x1195, 0x1195, 0x1195 },
+{ 0x1196, 0x1196, 0x1196 },
+{ 0x1197, 0x1197, 0x1197 },
+{ 0x1198, 0x1198, 0x1198 },
+{ 0x1199, 0x1199, 0x1199 },
+{ 0x119A, 0x119A, 0x119A },
+{ 0x119B, 0x119B, 0x119B },
+{ 0x119C, 0x119C, 0x119C },
+{ 0x119D, 0x119D, 0x119D },
+{ 0x119E, 0x119E, 0x119E },
+{ 0x119F, 0x119F, 0x119F },
+{ 0x11A0, 0x11A0, 0x11A0 },
+{ 0x11A1, 0x11A1, 0x11A1 },
+{ 0x11A2, 0x11A2, 0x11A2 },
+{ 0x11A8, 0x11A8, 0x11A8 },
+{ 0x11A9, 0x11A9, 0x11A9 },
+{ 0x11AA, 0x11AA, 0x11AA },
+{ 0x11AB, 0x11AB, 0x11AB },
+{ 0x11AC, 0x11AC, 0x11AC },
+{ 0x11AD, 0x11AD, 0x11AD },
+{ 0x11AE, 0x11AE, 0x11AE },
+{ 0x11AF, 0x11AF, 0x11AF },
+{ 0x11B0, 0x11B0, 0x11B0 },
+{ 0x11B1, 0x11B1, 0x11B1 },
+{ 0x11B2, 0x11B2, 0x11B2 },
+{ 0x11B3, 0x11B3, 0x11B3 },
+{ 0x11B4, 0x11B4, 0x11B4 },
+{ 0x11B5, 0x11B5, 0x11B5 },
+{ 0x11B6, 0x11B6, 0x11B6 },
+{ 0x11B7, 0x11B7, 0x11B7 },
+{ 0x11B8, 0x11B8, 0x11B8 },
+{ 0x11B9, 0x11B9, 0x11B9 },
+{ 0x11BA, 0x11BA, 0x11BA },
+{ 0x11BB, 0x11BB, 0x11BB },
+{ 0x11BC, 0x11BC, 0x11BC },
+{ 0x11BD, 0x11BD, 0x11BD },
+{ 0x11BE, 0x11BE, 0x11BE },
+{ 0x11BF, 0x11BF, 0x11BF },
+{ 0x11C0, 0x11C0, 0x11C0 },
+{ 0x11C1, 0x11C1, 0x11C1 },
+{ 0x11C2, 0x11C2, 0x11C2 },
+{ 0x11C3, 0x11C3, 0x11C3 },
+{ 0x11C4, 0x11C4, 0x11C4 },
+{ 0x11C5, 0x11C5, 0x11C5 },
+{ 0x11C6, 0x11C6, 0x11C6 },
+{ 0x11C7, 0x11C7, 0x11C7 },
+{ 0x11C8, 0x11C8, 0x11C8 },
+{ 0x11C9, 0x11C9, 0x11C9 },
+{ 0x11CA, 0x11CA, 0x11CA },
+{ 0x11CB, 0x11CB, 0x11CB },
+{ 0x11CC, 0x11CC, 0x11CC },
+{ 0x11CD, 0x11CD, 0x11CD },
+{ 0x11CE, 0x11CE, 0x11CE },
+{ 0x11CF, 0x11CF, 0x11CF },
+{ 0x11D0, 0x11D0, 0x11D0 },
+{ 0x11D1, 0x11D1, 0x11D1 },
+{ 0x11D2, 0x11D2, 0x11D2 },
+{ 0x11D3, 0x11D3, 0x11D3 },
+{ 0x11D4, 0x11D4, 0x11D4 },
+{ 0x11D5, 0x11D5, 0x11D5 },
+{ 0x11D6, 0x11D6, 0x11D6 },
+{ 0x11D7, 0x11D7, 0x11D7 },
+{ 0x11D8, 0x11D8, 0x11D8 },
+{ 0x11D9, 0x11D9, 0x11D9 },
+{ 0x11DA, 0x11DA, 0x11DA },
+{ 0x11DB, 0x11DB, 0x11DB },
+{ 0x11DC, 0x11DC, 0x11DC },
+{ 0x11DD, 0x11DD, 0x11DD },
+{ 0x11DE, 0x11DE, 0x11DE },
+{ 0x11DF, 0x11DF, 0x11DF },
+{ 0x11E0, 0x11E0, 0x11E0 },
+{ 0x11E1, 0x11E1, 0x11E1 },
+{ 0x11E2, 0x11E2, 0x11E2 },
+{ 0x11E3, 0x11E3, 0x11E3 },
+{ 0x11E4, 0x11E4, 0x11E4 },
+{ 0x11E5, 0x11E5, 0x11E5 },
+{ 0x11E6, 0x11E6, 0x11E6 },
+{ 0x11E7, 0x11E7, 0x11E7 },
+{ 0x11E8, 0x11E8, 0x11E8 },
+{ 0x11E9, 0x11E9, 0x11E9 },
+{ 0x11EA, 0x11EA, 0x11EA },
+{ 0x11EB, 0x11EB, 0x11EB },
+{ 0x11EC, 0x11EC, 0x11EC },
+{ 0x11ED, 0x11ED, 0x11ED },
+{ 0x11EE, 0x11EE, 0x11EE },
+{ 0x11EF, 0x11EF, 0x11EF },
+{ 0x11F0, 0x11F0, 0x11F0 },
+{ 0x11F1, 0x11F1, 0x11F1 },
+{ 0x11F2, 0x11F2, 0x11F2 },
+{ 0x11F3, 0x11F3, 0x11F3 },
+{ 0x11F4, 0x11F4, 0x11F4 },
+{ 0x11F5, 0x11F5, 0x11F5 },
+{ 0x11F6, 0x11F6, 0x11F6 },
+{ 0x11F7, 0x11F7, 0x11F7 },
+{ 0x11F8, 0x11F8, 0x11F8 },
+{ 0x11F9, 0x11F9, 0x11F9 },
+{ 0x1200, 0x1200, 0x1200 },
+{ 0x1201, 0x1201, 0x1201 },
+{ 0x1202, 0x1202, 0x1202 },
+{ 0x1203, 0x1203, 0x1203 },
+{ 0x1204, 0x1204, 0x1204 },
+{ 0x1205, 0x1205, 0x1205 },
+{ 0x1206, 0x1206, 0x1206 },
+{ 0x1207, 0x1207, 0x1207 },
+{ 0x1208, 0x1208, 0x1208 },
+{ 0x1209, 0x1209, 0x1209 },
+{ 0x120A, 0x120A, 0x120A },
+{ 0x120B, 0x120B, 0x120B },
+{ 0x120C, 0x120C, 0x120C },
+{ 0x120D, 0x120D, 0x120D },
+{ 0x120E, 0x120E, 0x120E },
+{ 0x120F, 0x120F, 0x120F },
+{ 0x1210, 0x1210, 0x1210 },
+{ 0x1211, 0x1211, 0x1211 },
+{ 0x1212, 0x1212, 0x1212 },
+{ 0x1213, 0x1213, 0x1213 },
+{ 0x1214, 0x1214, 0x1214 },
+{ 0x1215, 0x1215, 0x1215 },
+{ 0x1216, 0x1216, 0x1216 },
+{ 0x1217, 0x1217, 0x1217 },
+{ 0x1218, 0x1218, 0x1218 },
+{ 0x1219, 0x1219, 0x1219 },
+{ 0x121A, 0x121A, 0x121A },
+{ 0x121B, 0x121B, 0x121B },
+{ 0x121C, 0x121C, 0x121C },
+{ 0x121D, 0x121D, 0x121D },
+{ 0x121E, 0x121E, 0x121E },
+{ 0x121F, 0x121F, 0x121F },
+{ 0x1220, 0x1220, 0x1220 },
+{ 0x1221, 0x1221, 0x1221 },
+{ 0x1222, 0x1222, 0x1222 },
+{ 0x1223, 0x1223, 0x1223 },
+{ 0x1224, 0x1224, 0x1224 },
+{ 0x1225, 0x1225, 0x1225 },
+{ 0x1226, 0x1226, 0x1226 },
+{ 0x1227, 0x1227, 0x1227 },
+{ 0x1228, 0x1228, 0x1228 },
+{ 0x1229, 0x1229, 0x1229 },
+{ 0x122A, 0x122A, 0x122A },
+{ 0x122B, 0x122B, 0x122B },
+{ 0x122C, 0x122C, 0x122C },
+{ 0x122D, 0x122D, 0x122D },
+{ 0x122E, 0x122E, 0x122E },
+{ 0x122F, 0x122F, 0x122F },
+{ 0x1230, 0x1230, 0x1230 },
+{ 0x1231, 0x1231, 0x1231 },
+{ 0x1232, 0x1232, 0x1232 },
+{ 0x1233, 0x1233, 0x1233 },
+{ 0x1234, 0x1234, 0x1234 },
+{ 0x1235, 0x1235, 0x1235 },
+{ 0x1236, 0x1236, 0x1236 },
+{ 0x1237, 0x1237, 0x1237 },
+{ 0x1238, 0x1238, 0x1238 },
+{ 0x1239, 0x1239, 0x1239 },
+{ 0x123A, 0x123A, 0x123A },
+{ 0x123B, 0x123B, 0x123B },
+{ 0x123C, 0x123C, 0x123C },
+{ 0x123D, 0x123D, 0x123D },
+{ 0x123E, 0x123E, 0x123E },
+{ 0x123F, 0x123F, 0x123F },
+{ 0x1240, 0x1240, 0x1240 },
+{ 0x1241, 0x1241, 0x1241 },
+{ 0x1242, 0x1242, 0x1242 },
+{ 0x1243, 0x1243, 0x1243 },
+{ 0x1244, 0x1244, 0x1244 },
+{ 0x1245, 0x1245, 0x1245 },
+{ 0x1246, 0x1246, 0x1246 },
+{ 0x1247, 0x1247, 0x1247 },
+{ 0x1248, 0x1248, 0x1248 },
+{ 0x124A, 0x124A, 0x124A },
+{ 0x124B, 0x124B, 0x124B },
+{ 0x124C, 0x124C, 0x124C },
+{ 0x124D, 0x124D, 0x124D },
+{ 0x1250, 0x1250, 0x1250 },
+{ 0x1251, 0x1251, 0x1251 },
+{ 0x1252, 0x1252, 0x1252 },
+{ 0x1253, 0x1253, 0x1253 },
+{ 0x1254, 0x1254, 0x1254 },
+{ 0x1255, 0x1255, 0x1255 },
+{ 0x1256, 0x1256, 0x1256 },
+{ 0x1258, 0x1258, 0x1258 },
+{ 0x125A, 0x125A, 0x125A },
+{ 0x125B, 0x125B, 0x125B },
+{ 0x125C, 0x125C, 0x125C },
+{ 0x125D, 0x125D, 0x125D },
+{ 0x1260, 0x1260, 0x1260 },
+{ 0x1261, 0x1261, 0x1261 },
+{ 0x1262, 0x1262, 0x1262 },
+{ 0x1263, 0x1263, 0x1263 },
+{ 0x1264, 0x1264, 0x1264 },
+{ 0x1265, 0x1265, 0x1265 },
+{ 0x1266, 0x1266, 0x1266 },
+{ 0x1267, 0x1267, 0x1267 },
+{ 0x1268, 0x1268, 0x1268 },
+{ 0x1269, 0x1269, 0x1269 },
+{ 0x126A, 0x126A, 0x126A },
+{ 0x126B, 0x126B, 0x126B },
+{ 0x126C, 0x126C, 0x126C },
+{ 0x126D, 0x126D, 0x126D },
+{ 0x126E, 0x126E, 0x126E },
+{ 0x126F, 0x126F, 0x126F },
+{ 0x1270, 0x1270, 0x1270 },
+{ 0x1271, 0x1271, 0x1271 },
+{ 0x1272, 0x1272, 0x1272 },
+{ 0x1273, 0x1273, 0x1273 },
+{ 0x1274, 0x1274, 0x1274 },
+{ 0x1275, 0x1275, 0x1275 },
+{ 0x1276, 0x1276, 0x1276 },
+{ 0x1277, 0x1277, 0x1277 },
+{ 0x1278, 0x1278, 0x1278 },
+{ 0x1279, 0x1279, 0x1279 },
+{ 0x127A, 0x127A, 0x127A },
+{ 0x127B, 0x127B, 0x127B },
+{ 0x127C, 0x127C, 0x127C },
+{ 0x127D, 0x127D, 0x127D },
+{ 0x127E, 0x127E, 0x127E },
+{ 0x127F, 0x127F, 0x127F },
+{ 0x1280, 0x1280, 0x1280 },
+{ 0x1281, 0x1281, 0x1281 },
+{ 0x1282, 0x1282, 0x1282 },
+{ 0x1283, 0x1283, 0x1283 },
+{ 0x1284, 0x1284, 0x1284 },
+{ 0x1285, 0x1285, 0x1285 },
+{ 0x1286, 0x1286, 0x1286 },
+{ 0x1287, 0x1287, 0x1287 },
+{ 0x1288, 0x1288, 0x1288 },
+{ 0x128A, 0x128A, 0x128A },
+{ 0x128B, 0x128B, 0x128B },
+{ 0x128C, 0x128C, 0x128C },
+{ 0x128D, 0x128D, 0x128D },
+{ 0x1290, 0x1290, 0x1290 },
+{ 0x1291, 0x1291, 0x1291 },
+{ 0x1292, 0x1292, 0x1292 },
+{ 0x1293, 0x1293, 0x1293 },
+{ 0x1294, 0x1294, 0x1294 },
+{ 0x1295, 0x1295, 0x1295 },
+{ 0x1296, 0x1296, 0x1296 },
+{ 0x1297, 0x1297, 0x1297 },
+{ 0x1298, 0x1298, 0x1298 },
+{ 0x1299, 0x1299, 0x1299 },
+{ 0x129A, 0x129A, 0x129A },
+{ 0x129B, 0x129B, 0x129B },
+{ 0x129C, 0x129C, 0x129C },
+{ 0x129D, 0x129D, 0x129D },
+{ 0x129E, 0x129E, 0x129E },
+{ 0x129F, 0x129F, 0x129F },
+{ 0x12A0, 0x12A0, 0x12A0 },
+{ 0x12A1, 0x12A1, 0x12A1 },
+{ 0x12A2, 0x12A2, 0x12A2 },
+{ 0x12A3, 0x12A3, 0x12A3 },
+{ 0x12A4, 0x12A4, 0x12A4 },
+{ 0x12A5, 0x12A5, 0x12A5 },
+{ 0x12A6, 0x12A6, 0x12A6 },
+{ 0x12A7, 0x12A7, 0x12A7 },
+{ 0x12A8, 0x12A8, 0x12A8 },
+{ 0x12A9, 0x12A9, 0x12A9 },
+{ 0x12AA, 0x12AA, 0x12AA },
+{ 0x12AB, 0x12AB, 0x12AB },
+{ 0x12AC, 0x12AC, 0x12AC },
+{ 0x12AD, 0x12AD, 0x12AD },
+{ 0x12AE, 0x12AE, 0x12AE },
+{ 0x12AF, 0x12AF, 0x12AF },
+{ 0x12B0, 0x12B0, 0x12B0 },
+{ 0x12B2, 0x12B2, 0x12B2 },
+{ 0x12B3, 0x12B3, 0x12B3 },
+{ 0x12B4, 0x12B4, 0x12B4 },
+{ 0x12B5, 0x12B5, 0x12B5 },
+{ 0x12B8, 0x12B8, 0x12B8 },
+{ 0x12B9, 0x12B9, 0x12B9 },
+{ 0x12BA, 0x12BA, 0x12BA },
+{ 0x12BB, 0x12BB, 0x12BB },
+{ 0x12BC, 0x12BC, 0x12BC },
+{ 0x12BD, 0x12BD, 0x12BD },
+{ 0x12BE, 0x12BE, 0x12BE },
+{ 0x12C0, 0x12C0, 0x12C0 },
+{ 0x12C2, 0x12C2, 0x12C2 },
+{ 0x12C3, 0x12C3, 0x12C3 },
+{ 0x12C4, 0x12C4, 0x12C4 },
+{ 0x12C5, 0x12C5, 0x12C5 },
+{ 0x12C8, 0x12C8, 0x12C8 },
+{ 0x12C9, 0x12C9, 0x12C9 },
+{ 0x12CA, 0x12CA, 0x12CA },
+{ 0x12CB, 0x12CB, 0x12CB },
+{ 0x12CC, 0x12CC, 0x12CC },
+{ 0x12CD, 0x12CD, 0x12CD },
+{ 0x12CE, 0x12CE, 0x12CE },
+{ 0x12CF, 0x12CF, 0x12CF },
+{ 0x12D0, 0x12D0, 0x12D0 },
+{ 0x12D1, 0x12D1, 0x12D1 },
+{ 0x12D2, 0x12D2, 0x12D2 },
+{ 0x12D3, 0x12D3, 0x12D3 },
+{ 0x12D4, 0x12D4, 0x12D4 },
+{ 0x12D5, 0x12D5, 0x12D5 },
+{ 0x12D6, 0x12D6, 0x12D6 },
+{ 0x12D8, 0x12D8, 0x12D8 },
+{ 0x12D9, 0x12D9, 0x12D9 },
+{ 0x12DA, 0x12DA, 0x12DA },
+{ 0x12DB, 0x12DB, 0x12DB },
+{ 0x12DC, 0x12DC, 0x12DC },
+{ 0x12DD, 0x12DD, 0x12DD },
+{ 0x12DE, 0x12DE, 0x12DE },
+{ 0x12DF, 0x12DF, 0x12DF },
+{ 0x12E0, 0x12E0, 0x12E0 },
+{ 0x12E1, 0x12E1, 0x12E1 },
+{ 0x12E2, 0x12E2, 0x12E2 },
+{ 0x12E3, 0x12E3, 0x12E3 },
+{ 0x12E4, 0x12E4, 0x12E4 },
+{ 0x12E5, 0x12E5, 0x12E5 },
+{ 0x12E6, 0x12E6, 0x12E6 },
+{ 0x12E7, 0x12E7, 0x12E7 },
+{ 0x12E8, 0x12E8, 0x12E8 },
+{ 0x12E9, 0x12E9, 0x12E9 },
+{ 0x12EA, 0x12EA, 0x12EA },
+{ 0x12EB, 0x12EB, 0x12EB },
+{ 0x12EC, 0x12EC, 0x12EC },
+{ 0x12ED, 0x12ED, 0x12ED },
+{ 0x12EE, 0x12EE, 0x12EE },
+{ 0x12EF, 0x12EF, 0x12EF },
+{ 0x12F0, 0x12F0, 0x12F0 },
+{ 0x12F1, 0x12F1, 0x12F1 },
+{ 0x12F2, 0x12F2, 0x12F2 },
+{ 0x12F3, 0x12F3, 0x12F3 },
+{ 0x12F4, 0x12F4, 0x12F4 },
+{ 0x12F5, 0x12F5, 0x12F5 },
+{ 0x12F6, 0x12F6, 0x12F6 },
+{ 0x12F7, 0x12F7, 0x12F7 },
+{ 0x12F8, 0x12F8, 0x12F8 },
+{ 0x12F9, 0x12F9, 0x12F9 },
+{ 0x12FA, 0x12FA, 0x12FA },
+{ 0x12FB, 0x12FB, 0x12FB },
+{ 0x12FC, 0x12FC, 0x12FC },
+{ 0x12FD, 0x12FD, 0x12FD },
+{ 0x12FE, 0x12FE, 0x12FE },
+{ 0x12FF, 0x12FF, 0x12FF },
+{ 0x1300, 0x1300, 0x1300 },
+{ 0x1301, 0x1301, 0x1301 },
+{ 0x1302, 0x1302, 0x1302 },
+{ 0x1303, 0x1303, 0x1303 },
+{ 0x1304, 0x1304, 0x1304 },
+{ 0x1305, 0x1305, 0x1305 },
+{ 0x1306, 0x1306, 0x1306 },
+{ 0x1307, 0x1307, 0x1307 },
+{ 0x1308, 0x1308, 0x1308 },
+{ 0x1309, 0x1309, 0x1309 },
+{ 0x130A, 0x130A, 0x130A },
+{ 0x130B, 0x130B, 0x130B },
+{ 0x130C, 0x130C, 0x130C },
+{ 0x130D, 0x130D, 0x130D },
+{ 0x130E, 0x130E, 0x130E },
+{ 0x130F, 0x130F, 0x130F },
+{ 0x1310, 0x1310, 0x1310 },
+{ 0x1312, 0x1312, 0x1312 },
+{ 0x1313, 0x1313, 0x1313 },
+{ 0x1314, 0x1314, 0x1314 },
+{ 0x1315, 0x1315, 0x1315 },
+{ 0x1318, 0x1318, 0x1318 },
+{ 0x1319, 0x1319, 0x1319 },
+{ 0x131A, 0x131A, 0x131A },
+{ 0x131B, 0x131B, 0x131B },
+{ 0x131C, 0x131C, 0x131C },
+{ 0x131D, 0x131D, 0x131D },
+{ 0x131E, 0x131E, 0x131E },
+{ 0x131F, 0x131F, 0x131F },
+{ 0x1320, 0x1320, 0x1320 },
+{ 0x1321, 0x1321, 0x1321 },
+{ 0x1322, 0x1322, 0x1322 },
+{ 0x1323, 0x1323, 0x1323 },
+{ 0x1324, 0x1324, 0x1324 },
+{ 0x1325, 0x1325, 0x1325 },
+{ 0x1326, 0x1326, 0x1326 },
+{ 0x1327, 0x1327, 0x1327 },
+{ 0x1328, 0x1328, 0x1328 },
+{ 0x1329, 0x1329, 0x1329 },
+{ 0x132A, 0x132A, 0x132A },
+{ 0x132B, 0x132B, 0x132B },
+{ 0x132C, 0x132C, 0x132C },
+{ 0x132D, 0x132D, 0x132D },
+{ 0x132E, 0x132E, 0x132E },
+{ 0x132F, 0x132F, 0x132F },
+{ 0x1330, 0x1330, 0x1330 },
+{ 0x1331, 0x1331, 0x1331 },
+{ 0x1332, 0x1332, 0x1332 },
+{ 0x1333, 0x1333, 0x1333 },
+{ 0x1334, 0x1334, 0x1334 },
+{ 0x1335, 0x1335, 0x1335 },
+{ 0x1336, 0x1336, 0x1336 },
+{ 0x1337, 0x1337, 0x1337 },
+{ 0x1338, 0x1338, 0x1338 },
+{ 0x1339, 0x1339, 0x1339 },
+{ 0x133A, 0x133A, 0x133A },
+{ 0x133B, 0x133B, 0x133B },
+{ 0x133C, 0x133C, 0x133C },
+{ 0x133D, 0x133D, 0x133D },
+{ 0x133E, 0x133E, 0x133E },
+{ 0x133F, 0x133F, 0x133F },
+{ 0x1340, 0x1340, 0x1340 },
+{ 0x1341, 0x1341, 0x1341 },
+{ 0x1342, 0x1342, 0x1342 },
+{ 0x1343, 0x1343, 0x1343 },
+{ 0x1344, 0x1344, 0x1344 },
+{ 0x1345, 0x1345, 0x1345 },
+{ 0x1346, 0x1346, 0x1346 },
+{ 0x1347, 0x1347, 0x1347 },
+{ 0x1348, 0x1348, 0x1348 },
+{ 0x1349, 0x1349, 0x1349 },
+{ 0x134A, 0x134A, 0x134A },
+{ 0x134B, 0x134B, 0x134B },
+{ 0x134C, 0x134C, 0x134C },
+{ 0x134D, 0x134D, 0x134D },
+{ 0x134E, 0x134E, 0x134E },
+{ 0x134F, 0x134F, 0x134F },
+{ 0x1350, 0x1350, 0x1350 },
+{ 0x1351, 0x1351, 0x1351 },
+{ 0x1352, 0x1352, 0x1352 },
+{ 0x1353, 0x1353, 0x1353 },
+{ 0x1354, 0x1354, 0x1354 },
+{ 0x1355, 0x1355, 0x1355 },
+{ 0x1356, 0x1356, 0x1356 },
+{ 0x1357, 0x1357, 0x1357 },
+{ 0x1358, 0x1358, 0x1358 },
+{ 0x1359, 0x1359, 0x1359 },
+{ 0x135A, 0x135A, 0x135A },
+{ 0x135F, 0x135F, 0x135F },
+{ 0x1380, 0x1380, 0x1380 },
+{ 0x1381, 0x1381, 0x1381 },
+{ 0x1382, 0x1382, 0x1382 },
+{ 0x1383, 0x1383, 0x1383 },
+{ 0x1384, 0x1384, 0x1384 },
+{ 0x1385, 0x1385, 0x1385 },
+{ 0x1386, 0x1386, 0x1386 },
+{ 0x1387, 0x1387, 0x1387 },
+{ 0x1388, 0x1388, 0x1388 },
+{ 0x1389, 0x1389, 0x1389 },
+{ 0x138A, 0x138A, 0x138A },
+{ 0x138B, 0x138B, 0x138B },
+{ 0x138C, 0x138C, 0x138C },
+{ 0x138D, 0x138D, 0x138D },
+{ 0x138E, 0x138E, 0x138E },
+{ 0x138F, 0x138F, 0x138F },
+{ 0x13A0, 0x13A0, 0x13A0 },
+{ 0x13A1, 0x13A1, 0x13A1 },
+{ 0x13A2, 0x13A2, 0x13A2 },
+{ 0x13A3, 0x13A3, 0x13A3 },
+{ 0x13A4, 0x13A4, 0x13A4 },
+{ 0x13A5, 0x13A5, 0x13A5 },
+{ 0x13A6, 0x13A6, 0x13A6 },
+{ 0x13A7, 0x13A7, 0x13A7 },
+{ 0x13A8, 0x13A8, 0x13A8 },
+{ 0x13A9, 0x13A9, 0x13A9 },
+{ 0x13AA, 0x13AA, 0x13AA },
+{ 0x13AB, 0x13AB, 0x13AB },
+{ 0x13AC, 0x13AC, 0x13AC },
+{ 0x13AD, 0x13AD, 0x13AD },
+{ 0x13AE, 0x13AE, 0x13AE },
+{ 0x13AF, 0x13AF, 0x13AF },
+{ 0x13B0, 0x13B0, 0x13B0 },
+{ 0x13B1, 0x13B1, 0x13B1 },
+{ 0x13B2, 0x13B2, 0x13B2 },
+{ 0x13B3, 0x13B3, 0x13B3 },
+{ 0x13B4, 0x13B4, 0x13B4 },
+{ 0x13B5, 0x13B5, 0x13B5 },
+{ 0x13B6, 0x13B6, 0x13B6 },
+{ 0x13B7, 0x13B7, 0x13B7 },
+{ 0x13B8, 0x13B8, 0x13B8 },
+{ 0x13B9, 0x13B9, 0x13B9 },
+{ 0x13BA, 0x13BA, 0x13BA },
+{ 0x13BB, 0x13BB, 0x13BB },
+{ 0x13BC, 0x13BC, 0x13BC },
+{ 0x13BD, 0x13BD, 0x13BD },
+{ 0x13BE, 0x13BE, 0x13BE },
+{ 0x13BF, 0x13BF, 0x13BF },
+{ 0x13C0, 0x13C0, 0x13C0 },
+{ 0x13C1, 0x13C1, 0x13C1 },
+{ 0x13C2, 0x13C2, 0x13C2 },
+{ 0x13C3, 0x13C3, 0x13C3 },
+{ 0x13C4, 0x13C4, 0x13C4 },
+{ 0x13C5, 0x13C5, 0x13C5 },
+{ 0x13C6, 0x13C6, 0x13C6 },
+{ 0x13C7, 0x13C7, 0x13C7 },
+{ 0x13C8, 0x13C8, 0x13C8 },
+{ 0x13C9, 0x13C9, 0x13C9 },
+{ 0x13CA, 0x13CA, 0x13CA },
+{ 0x13CB, 0x13CB, 0x13CB },
+{ 0x13CC, 0x13CC, 0x13CC },
+{ 0x13CD, 0x13CD, 0x13CD },
+{ 0x13CE, 0x13CE, 0x13CE },
+{ 0x13CF, 0x13CF, 0x13CF },
+{ 0x13D0, 0x13D0, 0x13D0 },
+{ 0x13D1, 0x13D1, 0x13D1 },
+{ 0x13D2, 0x13D2, 0x13D2 },
+{ 0x13D3, 0x13D3, 0x13D3 },
+{ 0x13D4, 0x13D4, 0x13D4 },
+{ 0x13D5, 0x13D5, 0x13D5 },
+{ 0x13D6, 0x13D6, 0x13D6 },
+{ 0x13D7, 0x13D7, 0x13D7 },
+{ 0x13D8, 0x13D8, 0x13D8 },
+{ 0x13D9, 0x13D9, 0x13D9 },
+{ 0x13DA, 0x13DA, 0x13DA },
+{ 0x13DB, 0x13DB, 0x13DB },
+{ 0x13DC, 0x13DC, 0x13DC },
+{ 0x13DD, 0x13DD, 0x13DD },
+{ 0x13DE, 0x13DE, 0x13DE },
+{ 0x13DF, 0x13DF, 0x13DF },
+{ 0x13E0, 0x13E0, 0x13E0 },
+{ 0x13E1, 0x13E1, 0x13E1 },
+{ 0x13E2, 0x13E2, 0x13E2 },
+{ 0x13E3, 0x13E3, 0x13E3 },
+{ 0x13E4, 0x13E4, 0x13E4 },
+{ 0x13E5, 0x13E5, 0x13E5 },
+{ 0x13E6, 0x13E6, 0x13E6 },
+{ 0x13E7, 0x13E7, 0x13E7 },
+{ 0x13E8, 0x13E8, 0x13E8 },
+{ 0x13E9, 0x13E9, 0x13E9 },
+{ 0x13EA, 0x13EA, 0x13EA },
+{ 0x13EB, 0x13EB, 0x13EB },
+{ 0x13EC, 0x13EC, 0x13EC },
+{ 0x13ED, 0x13ED, 0x13ED },
+{ 0x13EE, 0x13EE, 0x13EE },
+{ 0x13EF, 0x13EF, 0x13EF },
+{ 0x13F0, 0x13F0, 0x13F0 },
+{ 0x13F1, 0x13F1, 0x13F1 },
+{ 0x13F2, 0x13F2, 0x13F2 },
+{ 0x13F3, 0x13F3, 0x13F3 },
+{ 0x13F4, 0x13F4, 0x13F4 },
+{ 0x1401, 0x1401, 0x1401 },
+{ 0x1402, 0x1402, 0x1402 },
+{ 0x1403, 0x1403, 0x1403 },
+{ 0x1404, 0x1404, 0x1404 },
+{ 0x1405, 0x1405, 0x1405 },
+{ 0x1406, 0x1406, 0x1406 },
+{ 0x1407, 0x1407, 0x1407 },
+{ 0x1408, 0x1408, 0x1408 },
+{ 0x1409, 0x1409, 0x1409 },
+{ 0x140A, 0x140A, 0x140A },
+{ 0x140B, 0x140B, 0x140B },
+{ 0x140C, 0x140C, 0x140C },
+{ 0x140D, 0x140D, 0x140D },
+{ 0x140E, 0x140E, 0x140E },
+{ 0x140F, 0x140F, 0x140F },
+{ 0x1410, 0x1410, 0x1410 },
+{ 0x1411, 0x1411, 0x1411 },
+{ 0x1412, 0x1412, 0x1412 },
+{ 0x1413, 0x1413, 0x1413 },
+{ 0x1414, 0x1414, 0x1414 },
+{ 0x1415, 0x1415, 0x1415 },
+{ 0x1416, 0x1416, 0x1416 },
+{ 0x1417, 0x1417, 0x1417 },
+{ 0x1418, 0x1418, 0x1418 },
+{ 0x1419, 0x1419, 0x1419 },
+{ 0x141A, 0x141A, 0x141A },
+{ 0x141B, 0x141B, 0x141B },
+{ 0x141C, 0x141C, 0x141C },
+{ 0x141D, 0x141D, 0x141D },
+{ 0x141E, 0x141E, 0x141E },
+{ 0x141F, 0x141F, 0x141F },
+{ 0x1420, 0x1420, 0x1420 },
+{ 0x1421, 0x1421, 0x1421 },
+{ 0x1422, 0x1422, 0x1422 },
+{ 0x1423, 0x1423, 0x1423 },
+{ 0x1424, 0x1424, 0x1424 },
+{ 0x1425, 0x1425, 0x1425 },
+{ 0x1426, 0x1426, 0x1426 },
+{ 0x1427, 0x1427, 0x1427 },
+{ 0x1428, 0x1428, 0x1428 },
+{ 0x1429, 0x1429, 0x1429 },
+{ 0x142A, 0x142A, 0x142A },
+{ 0x142B, 0x142B, 0x142B },
+{ 0x142C, 0x142C, 0x142C },
+{ 0x142D, 0x142D, 0x142D },
+{ 0x142E, 0x142E, 0x142E },
+{ 0x142F, 0x142F, 0x142F },
+{ 0x1430, 0x1430, 0x1430 },
+{ 0x1431, 0x1431, 0x1431 },
+{ 0x1432, 0x1432, 0x1432 },
+{ 0x1433, 0x1433, 0x1433 },
+{ 0x1434, 0x1434, 0x1434 },
+{ 0x1435, 0x1435, 0x1435 },
+{ 0x1436, 0x1436, 0x1436 },
+{ 0x1437, 0x1437, 0x1437 },
+{ 0x1438, 0x1438, 0x1438 },
+{ 0x1439, 0x1439, 0x1439 },
+{ 0x143A, 0x143A, 0x143A },
+{ 0x143B, 0x143B, 0x143B },
+{ 0x143C, 0x143C, 0x143C },
+{ 0x143D, 0x143D, 0x143D },
+{ 0x143E, 0x143E, 0x143E },
+{ 0x143F, 0x143F, 0x143F },
+{ 0x1440, 0x1440, 0x1440 },
+{ 0x1441, 0x1441, 0x1441 },
+{ 0x1442, 0x1442, 0x1442 },
+{ 0x1443, 0x1443, 0x1443 },
+{ 0x1444, 0x1444, 0x1444 },
+{ 0x1445, 0x1445, 0x1445 },
+{ 0x1446, 0x1446, 0x1446 },
+{ 0x1447, 0x1447, 0x1447 },
+{ 0x1448, 0x1448, 0x1448 },
+{ 0x1449, 0x1449, 0x1449 },
+{ 0x144A, 0x144A, 0x144A },
+{ 0x144B, 0x144B, 0x144B },
+{ 0x144C, 0x144C, 0x144C },
+{ 0x144D, 0x144D, 0x144D },
+{ 0x144E, 0x144E, 0x144E },
+{ 0x144F, 0x144F, 0x144F },
+{ 0x1450, 0x1450, 0x1450 },
+{ 0x1451, 0x1451, 0x1451 },
+{ 0x1452, 0x1452, 0x1452 },
+{ 0x1453, 0x1453, 0x1453 },
+{ 0x1454, 0x1454, 0x1454 },
+{ 0x1455, 0x1455, 0x1455 },
+{ 0x1456, 0x1456, 0x1456 },
+{ 0x1457, 0x1457, 0x1457 },
+{ 0x1458, 0x1458, 0x1458 },
+{ 0x1459, 0x1459, 0x1459 },
+{ 0x145A, 0x145A, 0x145A },
+{ 0x145B, 0x145B, 0x145B },
+{ 0x145C, 0x145C, 0x145C },
+{ 0x145D, 0x145D, 0x145D },
+{ 0x145E, 0x145E, 0x145E },
+{ 0x145F, 0x145F, 0x145F },
+{ 0x1460, 0x1460, 0x1460 },
+{ 0x1461, 0x1461, 0x1461 },
+{ 0x1462, 0x1462, 0x1462 },
+{ 0x1463, 0x1463, 0x1463 },
+{ 0x1464, 0x1464, 0x1464 },
+{ 0x1465, 0x1465, 0x1465 },
+{ 0x1466, 0x1466, 0x1466 },
+{ 0x1467, 0x1467, 0x1467 },
+{ 0x1468, 0x1468, 0x1468 },
+{ 0x1469, 0x1469, 0x1469 },
+{ 0x146A, 0x146A, 0x146A },
+{ 0x146B, 0x146B, 0x146B },
+{ 0x146C, 0x146C, 0x146C },
+{ 0x146D, 0x146D, 0x146D },
+{ 0x146E, 0x146E, 0x146E },
+{ 0x146F, 0x146F, 0x146F },
+{ 0x1470, 0x1470, 0x1470 },
+{ 0x1471, 0x1471, 0x1471 },
+{ 0x1472, 0x1472, 0x1472 },
+{ 0x1473, 0x1473, 0x1473 },
+{ 0x1474, 0x1474, 0x1474 },
+{ 0x1475, 0x1475, 0x1475 },
+{ 0x1476, 0x1476, 0x1476 },
+{ 0x1477, 0x1477, 0x1477 },
+{ 0x1478, 0x1478, 0x1478 },
+{ 0x1479, 0x1479, 0x1479 },
+{ 0x147A, 0x147A, 0x147A },
+{ 0x147B, 0x147B, 0x147B },
+{ 0x147C, 0x147C, 0x147C },
+{ 0x147D, 0x147D, 0x147D },
+{ 0x147E, 0x147E, 0x147E },
+{ 0x147F, 0x147F, 0x147F },
+{ 0x1480, 0x1480, 0x1480 },
+{ 0x1481, 0x1481, 0x1481 },
+{ 0x1482, 0x1482, 0x1482 },
+{ 0x1483, 0x1483, 0x1483 },
+{ 0x1484, 0x1484, 0x1484 },
+{ 0x1485, 0x1485, 0x1485 },
+{ 0x1486, 0x1486, 0x1486 },
+{ 0x1487, 0x1487, 0x1487 },
+{ 0x1488, 0x1488, 0x1488 },
+{ 0x1489, 0x1489, 0x1489 },
+{ 0x148A, 0x148A, 0x148A },
+{ 0x148B, 0x148B, 0x148B },
+{ 0x148C, 0x148C, 0x148C },
+{ 0x148D, 0x148D, 0x148D },
+{ 0x148E, 0x148E, 0x148E },
+{ 0x148F, 0x148F, 0x148F },
+{ 0x1490, 0x1490, 0x1490 },
+{ 0x1491, 0x1491, 0x1491 },
+{ 0x1492, 0x1492, 0x1492 },
+{ 0x1493, 0x1493, 0x1493 },
+{ 0x1494, 0x1494, 0x1494 },
+{ 0x1495, 0x1495, 0x1495 },
+{ 0x1496, 0x1496, 0x1496 },
+{ 0x1497, 0x1497, 0x1497 },
+{ 0x1498, 0x1498, 0x1498 },
+{ 0x1499, 0x1499, 0x1499 },
+{ 0x149A, 0x149A, 0x149A },
+{ 0x149B, 0x149B, 0x149B },
+{ 0x149C, 0x149C, 0x149C },
+{ 0x149D, 0x149D, 0x149D },
+{ 0x149E, 0x149E, 0x149E },
+{ 0x149F, 0x149F, 0x149F },
+{ 0x14A0, 0x14A0, 0x14A0 },
+{ 0x14A1, 0x14A1, 0x14A1 },
+{ 0x14A2, 0x14A2, 0x14A2 },
+{ 0x14A3, 0x14A3, 0x14A3 },
+{ 0x14A4, 0x14A4, 0x14A4 },
+{ 0x14A5, 0x14A5, 0x14A5 },
+{ 0x14A6, 0x14A6, 0x14A6 },
+{ 0x14A7, 0x14A7, 0x14A7 },
+{ 0x14A8, 0x14A8, 0x14A8 },
+{ 0x14A9, 0x14A9, 0x14A9 },
+{ 0x14AA, 0x14AA, 0x14AA },
+{ 0x14AB, 0x14AB, 0x14AB },
+{ 0x14AC, 0x14AC, 0x14AC },
+{ 0x14AD, 0x14AD, 0x14AD },
+{ 0x14AE, 0x14AE, 0x14AE },
+{ 0x14AF, 0x14AF, 0x14AF },
+{ 0x14B0, 0x14B0, 0x14B0 },
+{ 0x14B1, 0x14B1, 0x14B1 },
+{ 0x14B2, 0x14B2, 0x14B2 },
+{ 0x14B3, 0x14B3, 0x14B3 },
+{ 0x14B4, 0x14B4, 0x14B4 },
+{ 0x14B5, 0x14B5, 0x14B5 },
+{ 0x14B6, 0x14B6, 0x14B6 },
+{ 0x14B7, 0x14B7, 0x14B7 },
+{ 0x14B8, 0x14B8, 0x14B8 },
+{ 0x14B9, 0x14B9, 0x14B9 },
+{ 0x14BA, 0x14BA, 0x14BA },
+{ 0x14BB, 0x14BB, 0x14BB },
+{ 0x14BC, 0x14BC, 0x14BC },
+{ 0x14BD, 0x14BD, 0x14BD },
+{ 0x14BE, 0x14BE, 0x14BE },
+{ 0x14BF, 0x14BF, 0x14BF },
+{ 0x14C0, 0x14C0, 0x14C0 },
+{ 0x14C1, 0x14C1, 0x14C1 },
+{ 0x14C2, 0x14C2, 0x14C2 },
+{ 0x14C3, 0x14C3, 0x14C3 },
+{ 0x14C4, 0x14C4, 0x14C4 },
+{ 0x14C5, 0x14C5, 0x14C5 },
+{ 0x14C6, 0x14C6, 0x14C6 },
+{ 0x14C7, 0x14C7, 0x14C7 },
+{ 0x14C8, 0x14C8, 0x14C8 },
+{ 0x14C9, 0x14C9, 0x14C9 },
+{ 0x14CA, 0x14CA, 0x14CA },
+{ 0x14CB, 0x14CB, 0x14CB },
+{ 0x14CC, 0x14CC, 0x14CC },
+{ 0x14CD, 0x14CD, 0x14CD },
+{ 0x14CE, 0x14CE, 0x14CE },
+{ 0x14CF, 0x14CF, 0x14CF },
+{ 0x14D0, 0x14D0, 0x14D0 },
+{ 0x14D1, 0x14D1, 0x14D1 },
+{ 0x14D2, 0x14D2, 0x14D2 },
+{ 0x14D3, 0x14D3, 0x14D3 },
+{ 0x14D4, 0x14D4, 0x14D4 },
+{ 0x14D5, 0x14D5, 0x14D5 },
+{ 0x14D6, 0x14D6, 0x14D6 },
+{ 0x14D7, 0x14D7, 0x14D7 },
+{ 0x14D8, 0x14D8, 0x14D8 },
+{ 0x14D9, 0x14D9, 0x14D9 },
+{ 0x14DA, 0x14DA, 0x14DA },
+{ 0x14DB, 0x14DB, 0x14DB },
+{ 0x14DC, 0x14DC, 0x14DC },
+{ 0x14DD, 0x14DD, 0x14DD },
+{ 0x14DE, 0x14DE, 0x14DE },
+{ 0x14DF, 0x14DF, 0x14DF },
+{ 0x14E0, 0x14E0, 0x14E0 },
+{ 0x14E1, 0x14E1, 0x14E1 },
+{ 0x14E2, 0x14E2, 0x14E2 },
+{ 0x14E3, 0x14E3, 0x14E3 },
+{ 0x14E4, 0x14E4, 0x14E4 },
+{ 0x14E5, 0x14E5, 0x14E5 },
+{ 0x14E6, 0x14E6, 0x14E6 },
+{ 0x14E7, 0x14E7, 0x14E7 },
+{ 0x14E8, 0x14E8, 0x14E8 },
+{ 0x14E9, 0x14E9, 0x14E9 },
+{ 0x14EA, 0x14EA, 0x14EA },
+{ 0x14EB, 0x14EB, 0x14EB },
+{ 0x14EC, 0x14EC, 0x14EC },
+{ 0x14ED, 0x14ED, 0x14ED },
+{ 0x14EE, 0x14EE, 0x14EE },
+{ 0x14EF, 0x14EF, 0x14EF },
+{ 0x14F0, 0x14F0, 0x14F0 },
+{ 0x14F1, 0x14F1, 0x14F1 },
+{ 0x14F2, 0x14F2, 0x14F2 },
+{ 0x14F3, 0x14F3, 0x14F3 },
+{ 0x14F4, 0x14F4, 0x14F4 },
+{ 0x14F5, 0x14F5, 0x14F5 },
+{ 0x14F6, 0x14F6, 0x14F6 },
+{ 0x14F7, 0x14F7, 0x14F7 },
+{ 0x14F8, 0x14F8, 0x14F8 },
+{ 0x14F9, 0x14F9, 0x14F9 },
+{ 0x14FA, 0x14FA, 0x14FA },
+{ 0x14FB, 0x14FB, 0x14FB },
+{ 0x14FC, 0x14FC, 0x14FC },
+{ 0x14FD, 0x14FD, 0x14FD },
+{ 0x14FE, 0x14FE, 0x14FE },
+{ 0x14FF, 0x14FF, 0x14FF },
+{ 0x1500, 0x1500, 0x1500 },
+{ 0x1501, 0x1501, 0x1501 },
+{ 0x1502, 0x1502, 0x1502 },
+{ 0x1503, 0x1503, 0x1503 },
+{ 0x1504, 0x1504, 0x1504 },
+{ 0x1505, 0x1505, 0x1505 },
+{ 0x1506, 0x1506, 0x1506 },
+{ 0x1507, 0x1507, 0x1507 },
+{ 0x1508, 0x1508, 0x1508 },
+{ 0x1509, 0x1509, 0x1509 },
+{ 0x150A, 0x150A, 0x150A },
+{ 0x150B, 0x150B, 0x150B },
+{ 0x150C, 0x150C, 0x150C },
+{ 0x150D, 0x150D, 0x150D },
+{ 0x150E, 0x150E, 0x150E },
+{ 0x150F, 0x150F, 0x150F },
+{ 0x1510, 0x1510, 0x1510 },
+{ 0x1511, 0x1511, 0x1511 },
+{ 0x1512, 0x1512, 0x1512 },
+{ 0x1513, 0x1513, 0x1513 },
+{ 0x1514, 0x1514, 0x1514 },
+{ 0x1515, 0x1515, 0x1515 },
+{ 0x1516, 0x1516, 0x1516 },
+{ 0x1517, 0x1517, 0x1517 },
+{ 0x1518, 0x1518, 0x1518 },
+{ 0x1519, 0x1519, 0x1519 },
+{ 0x151A, 0x151A, 0x151A },
+{ 0x151B, 0x151B, 0x151B },
+{ 0x151C, 0x151C, 0x151C },
+{ 0x151D, 0x151D, 0x151D },
+{ 0x151E, 0x151E, 0x151E },
+{ 0x151F, 0x151F, 0x151F },
+{ 0x1520, 0x1520, 0x1520 },
+{ 0x1521, 0x1521, 0x1521 },
+{ 0x1522, 0x1522, 0x1522 },
+{ 0x1523, 0x1523, 0x1523 },
+{ 0x1524, 0x1524, 0x1524 },
+{ 0x1525, 0x1525, 0x1525 },
+{ 0x1526, 0x1526, 0x1526 },
+{ 0x1527, 0x1527, 0x1527 },
+{ 0x1528, 0x1528, 0x1528 },
+{ 0x1529, 0x1529, 0x1529 },
+{ 0x152A, 0x152A, 0x152A },
+{ 0x152B, 0x152B, 0x152B },
+{ 0x152C, 0x152C, 0x152C },
+{ 0x152D, 0x152D, 0x152D },
+{ 0x152E, 0x152E, 0x152E },
+{ 0x152F, 0x152F, 0x152F },
+{ 0x1530, 0x1530, 0x1530 },
+{ 0x1531, 0x1531, 0x1531 },
+{ 0x1532, 0x1532, 0x1532 },
+{ 0x1533, 0x1533, 0x1533 },
+{ 0x1534, 0x1534, 0x1534 },
+{ 0x1535, 0x1535, 0x1535 },
+{ 0x1536, 0x1536, 0x1536 },
+{ 0x1537, 0x1537, 0x1537 },
+{ 0x1538, 0x1538, 0x1538 },
+{ 0x1539, 0x1539, 0x1539 },
+{ 0x153A, 0x153A, 0x153A },
+{ 0x153B, 0x153B, 0x153B },
+{ 0x153C, 0x153C, 0x153C },
+{ 0x153D, 0x153D, 0x153D },
+{ 0x153E, 0x153E, 0x153E },
+{ 0x153F, 0x153F, 0x153F },
+{ 0x1540, 0x1540, 0x1540 },
+{ 0x1541, 0x1541, 0x1541 },
+{ 0x1542, 0x1542, 0x1542 },
+{ 0x1543, 0x1543, 0x1543 },
+{ 0x1544, 0x1544, 0x1544 },
+{ 0x1545, 0x1545, 0x1545 },
+{ 0x1546, 0x1546, 0x1546 },
+{ 0x1547, 0x1547, 0x1547 },
+{ 0x1548, 0x1548, 0x1548 },
+{ 0x1549, 0x1549, 0x1549 },
+{ 0x154A, 0x154A, 0x154A },
+{ 0x154B, 0x154B, 0x154B },
+{ 0x154C, 0x154C, 0x154C },
+{ 0x154D, 0x154D, 0x154D },
+{ 0x154E, 0x154E, 0x154E },
+{ 0x154F, 0x154F, 0x154F },
+{ 0x1550, 0x1550, 0x1550 },
+{ 0x1551, 0x1551, 0x1551 },
+{ 0x1552, 0x1552, 0x1552 },
+{ 0x1553, 0x1553, 0x1553 },
+{ 0x1554, 0x1554, 0x1554 },
+{ 0x1555, 0x1555, 0x1555 },
+{ 0x1556, 0x1556, 0x1556 },
+{ 0x1557, 0x1557, 0x1557 },
+{ 0x1558, 0x1558, 0x1558 },
+{ 0x1559, 0x1559, 0x1559 },
+{ 0x155A, 0x155A, 0x155A },
+{ 0x155B, 0x155B, 0x155B },
+{ 0x155C, 0x155C, 0x155C },
+{ 0x155D, 0x155D, 0x155D },
+{ 0x155E, 0x155E, 0x155E },
+{ 0x155F, 0x155F, 0x155F },
+{ 0x1560, 0x1560, 0x1560 },
+{ 0x1561, 0x1561, 0x1561 },
+{ 0x1562, 0x1562, 0x1562 },
+{ 0x1563, 0x1563, 0x1563 },
+{ 0x1564, 0x1564, 0x1564 },
+{ 0x1565, 0x1565, 0x1565 },
+{ 0x1566, 0x1566, 0x1566 },
+{ 0x1567, 0x1567, 0x1567 },
+{ 0x1568, 0x1568, 0x1568 },
+{ 0x1569, 0x1569, 0x1569 },
+{ 0x156A, 0x156A, 0x156A },
+{ 0x156B, 0x156B, 0x156B },
+{ 0x156C, 0x156C, 0x156C },
+{ 0x156D, 0x156D, 0x156D },
+{ 0x156E, 0x156E, 0x156E },
+{ 0x156F, 0x156F, 0x156F },
+{ 0x1570, 0x1570, 0x1570 },
+{ 0x1571, 0x1571, 0x1571 },
+{ 0x1572, 0x1572, 0x1572 },
+{ 0x1573, 0x1573, 0x1573 },
+{ 0x1574, 0x1574, 0x1574 },
+{ 0x1575, 0x1575, 0x1575 },
+{ 0x1576, 0x1576, 0x1576 },
+{ 0x1577, 0x1577, 0x1577 },
+{ 0x1578, 0x1578, 0x1578 },
+{ 0x1579, 0x1579, 0x1579 },
+{ 0x157A, 0x157A, 0x157A },
+{ 0x157B, 0x157B, 0x157B },
+{ 0x157C, 0x157C, 0x157C },
+{ 0x157D, 0x157D, 0x157D },
+{ 0x157E, 0x157E, 0x157E },
+{ 0x157F, 0x157F, 0x157F },
+{ 0x1580, 0x1580, 0x1580 },
+{ 0x1581, 0x1581, 0x1581 },
+{ 0x1582, 0x1582, 0x1582 },
+{ 0x1583, 0x1583, 0x1583 },
+{ 0x1584, 0x1584, 0x1584 },
+{ 0x1585, 0x1585, 0x1585 },
+{ 0x1586, 0x1586, 0x1586 },
+{ 0x1587, 0x1587, 0x1587 },
+{ 0x1588, 0x1588, 0x1588 },
+{ 0x1589, 0x1589, 0x1589 },
+{ 0x158A, 0x158A, 0x158A },
+{ 0x158B, 0x158B, 0x158B },
+{ 0x158C, 0x158C, 0x158C },
+{ 0x158D, 0x158D, 0x158D },
+{ 0x158E, 0x158E, 0x158E },
+{ 0x158F, 0x158F, 0x158F },
+{ 0x1590, 0x1590, 0x1590 },
+{ 0x1591, 0x1591, 0x1591 },
+{ 0x1592, 0x1592, 0x1592 },
+{ 0x1593, 0x1593, 0x1593 },
+{ 0x1594, 0x1594, 0x1594 },
+{ 0x1595, 0x1595, 0x1595 },
+{ 0x1596, 0x1596, 0x1596 },
+{ 0x1597, 0x1597, 0x1597 },
+{ 0x1598, 0x1598, 0x1598 },
+{ 0x1599, 0x1599, 0x1599 },
+{ 0x159A, 0x159A, 0x159A },
+{ 0x159B, 0x159B, 0x159B },
+{ 0x159C, 0x159C, 0x159C },
+{ 0x159D, 0x159D, 0x159D },
+{ 0x159E, 0x159E, 0x159E },
+{ 0x159F, 0x159F, 0x159F },
+{ 0x15A0, 0x15A0, 0x15A0 },
+{ 0x15A1, 0x15A1, 0x15A1 },
+{ 0x15A2, 0x15A2, 0x15A2 },
+{ 0x15A3, 0x15A3, 0x15A3 },
+{ 0x15A4, 0x15A4, 0x15A4 },
+{ 0x15A5, 0x15A5, 0x15A5 },
+{ 0x15A6, 0x15A6, 0x15A6 },
+{ 0x15A7, 0x15A7, 0x15A7 },
+{ 0x15A8, 0x15A8, 0x15A8 },
+{ 0x15A9, 0x15A9, 0x15A9 },
+{ 0x15AA, 0x15AA, 0x15AA },
+{ 0x15AB, 0x15AB, 0x15AB },
+{ 0x15AC, 0x15AC, 0x15AC },
+{ 0x15AD, 0x15AD, 0x15AD },
+{ 0x15AE, 0x15AE, 0x15AE },
+{ 0x15AF, 0x15AF, 0x15AF },
+{ 0x15B0, 0x15B0, 0x15B0 },
+{ 0x15B1, 0x15B1, 0x15B1 },
+{ 0x15B2, 0x15B2, 0x15B2 },
+{ 0x15B3, 0x15B3, 0x15B3 },
+{ 0x15B4, 0x15B4, 0x15B4 },
+{ 0x15B5, 0x15B5, 0x15B5 },
+{ 0x15B6, 0x15B6, 0x15B6 },
+{ 0x15B7, 0x15B7, 0x15B7 },
+{ 0x15B8, 0x15B8, 0x15B8 },
+{ 0x15B9, 0x15B9, 0x15B9 },
+{ 0x15BA, 0x15BA, 0x15BA },
+{ 0x15BB, 0x15BB, 0x15BB },
+{ 0x15BC, 0x15BC, 0x15BC },
+{ 0x15BD, 0x15BD, 0x15BD },
+{ 0x15BE, 0x15BE, 0x15BE },
+{ 0x15BF, 0x15BF, 0x15BF },
+{ 0x15C0, 0x15C0, 0x15C0 },
+{ 0x15C1, 0x15C1, 0x15C1 },
+{ 0x15C2, 0x15C2, 0x15C2 },
+{ 0x15C3, 0x15C3, 0x15C3 },
+{ 0x15C4, 0x15C4, 0x15C4 },
+{ 0x15C5, 0x15C5, 0x15C5 },
+{ 0x15C6, 0x15C6, 0x15C6 },
+{ 0x15C7, 0x15C7, 0x15C7 },
+{ 0x15C8, 0x15C8, 0x15C8 },
+{ 0x15C9, 0x15C9, 0x15C9 },
+{ 0x15CA, 0x15CA, 0x15CA },
+{ 0x15CB, 0x15CB, 0x15CB },
+{ 0x15CC, 0x15CC, 0x15CC },
+{ 0x15CD, 0x15CD, 0x15CD },
+{ 0x15CE, 0x15CE, 0x15CE },
+{ 0x15CF, 0x15CF, 0x15CF },
+{ 0x15D0, 0x15D0, 0x15D0 },
+{ 0x15D1, 0x15D1, 0x15D1 },
+{ 0x15D2, 0x15D2, 0x15D2 },
+{ 0x15D3, 0x15D3, 0x15D3 },
+{ 0x15D4, 0x15D4, 0x15D4 },
+{ 0x15D5, 0x15D5, 0x15D5 },
+{ 0x15D6, 0x15D6, 0x15D6 },
+{ 0x15D7, 0x15D7, 0x15D7 },
+{ 0x15D8, 0x15D8, 0x15D8 },
+{ 0x15D9, 0x15D9, 0x15D9 },
+{ 0x15DA, 0x15DA, 0x15DA },
+{ 0x15DB, 0x15DB, 0x15DB },
+{ 0x15DC, 0x15DC, 0x15DC },
+{ 0x15DD, 0x15DD, 0x15DD },
+{ 0x15DE, 0x15DE, 0x15DE },
+{ 0x15DF, 0x15DF, 0x15DF },
+{ 0x15E0, 0x15E0, 0x15E0 },
+{ 0x15E1, 0x15E1, 0x15E1 },
+{ 0x15E2, 0x15E2, 0x15E2 },
+{ 0x15E3, 0x15E3, 0x15E3 },
+{ 0x15E4, 0x15E4, 0x15E4 },
+{ 0x15E5, 0x15E5, 0x15E5 },
+{ 0x15E6, 0x15E6, 0x15E6 },
+{ 0x15E7, 0x15E7, 0x15E7 },
+{ 0x15E8, 0x15E8, 0x15E8 },
+{ 0x15E9, 0x15E9, 0x15E9 },
+{ 0x15EA, 0x15EA, 0x15EA },
+{ 0x15EB, 0x15EB, 0x15EB },
+{ 0x15EC, 0x15EC, 0x15EC },
+{ 0x15ED, 0x15ED, 0x15ED },
+{ 0x15EE, 0x15EE, 0x15EE },
+{ 0x15EF, 0x15EF, 0x15EF },
+{ 0x15F0, 0x15F0, 0x15F0 },
+{ 0x15F1, 0x15F1, 0x15F1 },
+{ 0x15F2, 0x15F2, 0x15F2 },
+{ 0x15F3, 0x15F3, 0x15F3 },
+{ 0x15F4, 0x15F4, 0x15F4 },
+{ 0x15F5, 0x15F5, 0x15F5 },
+{ 0x15F6, 0x15F6, 0x15F6 },
+{ 0x15F7, 0x15F7, 0x15F7 },
+{ 0x15F8, 0x15F8, 0x15F8 },
+{ 0x15F9, 0x15F9, 0x15F9 },
+{ 0x15FA, 0x15FA, 0x15FA },
+{ 0x15FB, 0x15FB, 0x15FB },
+{ 0x15FC, 0x15FC, 0x15FC },
+{ 0x15FD, 0x15FD, 0x15FD },
+{ 0x15FE, 0x15FE, 0x15FE },
+{ 0x15FF, 0x15FF, 0x15FF },
+{ 0x1600, 0x1600, 0x1600 },
+{ 0x1601, 0x1601, 0x1601 },
+{ 0x1602, 0x1602, 0x1602 },
+{ 0x1603, 0x1603, 0x1603 },
+{ 0x1604, 0x1604, 0x1604 },
+{ 0x1605, 0x1605, 0x1605 },
+{ 0x1606, 0x1606, 0x1606 },
+{ 0x1607, 0x1607, 0x1607 },
+{ 0x1608, 0x1608, 0x1608 },
+{ 0x1609, 0x1609, 0x1609 },
+{ 0x160A, 0x160A, 0x160A },
+{ 0x160B, 0x160B, 0x160B },
+{ 0x160C, 0x160C, 0x160C },
+{ 0x160D, 0x160D, 0x160D },
+{ 0x160E, 0x160E, 0x160E },
+{ 0x160F, 0x160F, 0x160F },
+{ 0x1610, 0x1610, 0x1610 },
+{ 0x1611, 0x1611, 0x1611 },
+{ 0x1612, 0x1612, 0x1612 },
+{ 0x1613, 0x1613, 0x1613 },
+{ 0x1614, 0x1614, 0x1614 },
+{ 0x1615, 0x1615, 0x1615 },
+{ 0x1616, 0x1616, 0x1616 },
+{ 0x1617, 0x1617, 0x1617 },
+{ 0x1618, 0x1618, 0x1618 },
+{ 0x1619, 0x1619, 0x1619 },
+{ 0x161A, 0x161A, 0x161A },
+{ 0x161B, 0x161B, 0x161B },
+{ 0x161C, 0x161C, 0x161C },
+{ 0x161D, 0x161D, 0x161D },
+{ 0x161E, 0x161E, 0x161E },
+{ 0x161F, 0x161F, 0x161F },
+{ 0x1620, 0x1620, 0x1620 },
+{ 0x1621, 0x1621, 0x1621 },
+{ 0x1622, 0x1622, 0x1622 },
+{ 0x1623, 0x1623, 0x1623 },
+{ 0x1624, 0x1624, 0x1624 },
+{ 0x1625, 0x1625, 0x1625 },
+{ 0x1626, 0x1626, 0x1626 },
+{ 0x1627, 0x1627, 0x1627 },
+{ 0x1628, 0x1628, 0x1628 },
+{ 0x1629, 0x1629, 0x1629 },
+{ 0x162A, 0x162A, 0x162A },
+{ 0x162B, 0x162B, 0x162B },
+{ 0x162C, 0x162C, 0x162C },
+{ 0x162D, 0x162D, 0x162D },
+{ 0x162E, 0x162E, 0x162E },
+{ 0x162F, 0x162F, 0x162F },
+{ 0x1630, 0x1630, 0x1630 },
+{ 0x1631, 0x1631, 0x1631 },
+{ 0x1632, 0x1632, 0x1632 },
+{ 0x1633, 0x1633, 0x1633 },
+{ 0x1634, 0x1634, 0x1634 },
+{ 0x1635, 0x1635, 0x1635 },
+{ 0x1636, 0x1636, 0x1636 },
+{ 0x1637, 0x1637, 0x1637 },
+{ 0x1638, 0x1638, 0x1638 },
+{ 0x1639, 0x1639, 0x1639 },
+{ 0x163A, 0x163A, 0x163A },
+{ 0x163B, 0x163B, 0x163B },
+{ 0x163C, 0x163C, 0x163C },
+{ 0x163D, 0x163D, 0x163D },
+{ 0x163E, 0x163E, 0x163E },
+{ 0x163F, 0x163F, 0x163F },
+{ 0x1640, 0x1640, 0x1640 },
+{ 0x1641, 0x1641, 0x1641 },
+{ 0x1642, 0x1642, 0x1642 },
+{ 0x1643, 0x1643, 0x1643 },
+{ 0x1644, 0x1644, 0x1644 },
+{ 0x1645, 0x1645, 0x1645 },
+{ 0x1646, 0x1646, 0x1646 },
+{ 0x1647, 0x1647, 0x1647 },
+{ 0x1648, 0x1648, 0x1648 },
+{ 0x1649, 0x1649, 0x1649 },
+{ 0x164A, 0x164A, 0x164A },
+{ 0x164B, 0x164B, 0x164B },
+{ 0x164C, 0x164C, 0x164C },
+{ 0x164D, 0x164D, 0x164D },
+{ 0x164E, 0x164E, 0x164E },
+{ 0x164F, 0x164F, 0x164F },
+{ 0x1650, 0x1650, 0x1650 },
+{ 0x1651, 0x1651, 0x1651 },
+{ 0x1652, 0x1652, 0x1652 },
+{ 0x1653, 0x1653, 0x1653 },
+{ 0x1654, 0x1654, 0x1654 },
+{ 0x1655, 0x1655, 0x1655 },
+{ 0x1656, 0x1656, 0x1656 },
+{ 0x1657, 0x1657, 0x1657 },
+{ 0x1658, 0x1658, 0x1658 },
+{ 0x1659, 0x1659, 0x1659 },
+{ 0x165A, 0x165A, 0x165A },
+{ 0x165B, 0x165B, 0x165B },
+{ 0x165C, 0x165C, 0x165C },
+{ 0x165D, 0x165D, 0x165D },
+{ 0x165E, 0x165E, 0x165E },
+{ 0x165F, 0x165F, 0x165F },
+{ 0x1660, 0x1660, 0x1660 },
+{ 0x1661, 0x1661, 0x1661 },
+{ 0x1662, 0x1662, 0x1662 },
+{ 0x1663, 0x1663, 0x1663 },
+{ 0x1664, 0x1664, 0x1664 },
+{ 0x1665, 0x1665, 0x1665 },
+{ 0x1666, 0x1666, 0x1666 },
+{ 0x1667, 0x1667, 0x1667 },
+{ 0x1668, 0x1668, 0x1668 },
+{ 0x1669, 0x1669, 0x1669 },
+{ 0x166A, 0x166A, 0x166A },
+{ 0x166B, 0x166B, 0x166B },
+{ 0x166C, 0x166C, 0x166C },
+{ 0x166F, 0x166F, 0x166F },
+{ 0x1670, 0x1670, 0x1670 },
+{ 0x1671, 0x1671, 0x1671 },
+{ 0x1672, 0x1672, 0x1672 },
+{ 0x1673, 0x1673, 0x1673 },
+{ 0x1674, 0x1674, 0x1674 },
+{ 0x1675, 0x1675, 0x1675 },
+{ 0x1676, 0x1676, 0x1676 },
+{ 0x1681, 0x1681, 0x1681 },
+{ 0x1682, 0x1682, 0x1682 },
+{ 0x1683, 0x1683, 0x1683 },
+{ 0x1684, 0x1684, 0x1684 },
+{ 0x1685, 0x1685, 0x1685 },
+{ 0x1686, 0x1686, 0x1686 },
+{ 0x1687, 0x1687, 0x1687 },
+{ 0x1688, 0x1688, 0x1688 },
+{ 0x1689, 0x1689, 0x1689 },
+{ 0x168A, 0x168A, 0x168A },
+{ 0x168B, 0x168B, 0x168B },
+{ 0x168C, 0x168C, 0x168C },
+{ 0x168D, 0x168D, 0x168D },
+{ 0x168E, 0x168E, 0x168E },
+{ 0x168F, 0x168F, 0x168F },
+{ 0x1690, 0x1690, 0x1690 },
+{ 0x1691, 0x1691, 0x1691 },
+{ 0x1692, 0x1692, 0x1692 },
+{ 0x1693, 0x1693, 0x1693 },
+{ 0x1694, 0x1694, 0x1694 },
+{ 0x1695, 0x1695, 0x1695 },
+{ 0x1696, 0x1696, 0x1696 },
+{ 0x1697, 0x1697, 0x1697 },
+{ 0x1698, 0x1698, 0x1698 },
+{ 0x1699, 0x1699, 0x1699 },
+{ 0x169A, 0x169A, 0x169A },
+{ 0x16A0, 0x16A0, 0x16A0 },
+{ 0x16A1, 0x16A1, 0x16A1 },
+{ 0x16A2, 0x16A2, 0x16A2 },
+{ 0x16A3, 0x16A3, 0x16A3 },
+{ 0x16A4, 0x16A4, 0x16A4 },
+{ 0x16A5, 0x16A5, 0x16A5 },
+{ 0x16A6, 0x16A6, 0x16A6 },
+{ 0x16A7, 0x16A7, 0x16A7 },
+{ 0x16A8, 0x16A8, 0x16A8 },
+{ 0x16A9, 0x16A9, 0x16A9 },
+{ 0x16AA, 0x16AA, 0x16AA },
+{ 0x16AB, 0x16AB, 0x16AB },
+{ 0x16AC, 0x16AC, 0x16AC },
+{ 0x16AD, 0x16AD, 0x16AD },
+{ 0x16AE, 0x16AE, 0x16AE },
+{ 0x16AF, 0x16AF, 0x16AF },
+{ 0x16B0, 0x16B0, 0x16B0 },
+{ 0x16B1, 0x16B1, 0x16B1 },
+{ 0x16B2, 0x16B2, 0x16B2 },
+{ 0x16B3, 0x16B3, 0x16B3 },
+{ 0x16B4, 0x16B4, 0x16B4 },
+{ 0x16B5, 0x16B5, 0x16B5 },
+{ 0x16B6, 0x16B6, 0x16B6 },
+{ 0x16B7, 0x16B7, 0x16B7 },
+{ 0x16B8, 0x16B8, 0x16B8 },
+{ 0x16B9, 0x16B9, 0x16B9 },
+{ 0x16BA, 0x16BA, 0x16BA },
+{ 0x16BB, 0x16BB, 0x16BB },
+{ 0x16BC, 0x16BC, 0x16BC },
+{ 0x16BD, 0x16BD, 0x16BD },
+{ 0x16BE, 0x16BE, 0x16BE },
+{ 0x16BF, 0x16BF, 0x16BF },
+{ 0x16C0, 0x16C0, 0x16C0 },
+{ 0x16C1, 0x16C1, 0x16C1 },
+{ 0x16C2, 0x16C2, 0x16C2 },
+{ 0x16C3, 0x16C3, 0x16C3 },
+{ 0x16C4, 0x16C4, 0x16C4 },
+{ 0x16C5, 0x16C5, 0x16C5 },
+{ 0x16C6, 0x16C6, 0x16C6 },
+{ 0x16C7, 0x16C7, 0x16C7 },
+{ 0x16C8, 0x16C8, 0x16C8 },
+{ 0x16C9, 0x16C9, 0x16C9 },
+{ 0x16CA, 0x16CA, 0x16CA },
+{ 0x16CB, 0x16CB, 0x16CB },
+{ 0x16CC, 0x16CC, 0x16CC },
+{ 0x16CD, 0x16CD, 0x16CD },
+{ 0x16CE, 0x16CE, 0x16CE },
+{ 0x16CF, 0x16CF, 0x16CF },
+{ 0x16D0, 0x16D0, 0x16D0 },
+{ 0x16D1, 0x16D1, 0x16D1 },
+{ 0x16D2, 0x16D2, 0x16D2 },
+{ 0x16D3, 0x16D3, 0x16D3 },
+{ 0x16D4, 0x16D4, 0x16D4 },
+{ 0x16D5, 0x16D5, 0x16D5 },
+{ 0x16D6, 0x16D6, 0x16D6 },
+{ 0x16D7, 0x16D7, 0x16D7 },
+{ 0x16D8, 0x16D8, 0x16D8 },
+{ 0x16D9, 0x16D9, 0x16D9 },
+{ 0x16DA, 0x16DA, 0x16DA },
+{ 0x16DB, 0x16DB, 0x16DB },
+{ 0x16DC, 0x16DC, 0x16DC },
+{ 0x16DD, 0x16DD, 0x16DD },
+{ 0x16DE, 0x16DE, 0x16DE },
+{ 0x16DF, 0x16DF, 0x16DF },
+{ 0x16E0, 0x16E0, 0x16E0 },
+{ 0x16E1, 0x16E1, 0x16E1 },
+{ 0x16E2, 0x16E2, 0x16E2 },
+{ 0x16E3, 0x16E3, 0x16E3 },
+{ 0x16E4, 0x16E4, 0x16E4 },
+{ 0x16E5, 0x16E5, 0x16E5 },
+{ 0x16E6, 0x16E6, 0x16E6 },
+{ 0x16E7, 0x16E7, 0x16E7 },
+{ 0x16E8, 0x16E8, 0x16E8 },
+{ 0x16E9, 0x16E9, 0x16E9 },
+{ 0x16EA, 0x16EA, 0x16EA },
+{ 0x1700, 0x1700, 0x1700 },
+{ 0x1701, 0x1701, 0x1701 },
+{ 0x1702, 0x1702, 0x1702 },
+{ 0x1703, 0x1703, 0x1703 },
+{ 0x1704, 0x1704, 0x1704 },
+{ 0x1705, 0x1705, 0x1705 },
+{ 0x1706, 0x1706, 0x1706 },
+{ 0x1707, 0x1707, 0x1707 },
+{ 0x1708, 0x1708, 0x1708 },
+{ 0x1709, 0x1709, 0x1709 },
+{ 0x170A, 0x170A, 0x170A },
+{ 0x170B, 0x170B, 0x170B },
+{ 0x170C, 0x170C, 0x170C },
+{ 0x170E, 0x170E, 0x170E },
+{ 0x170F, 0x170F, 0x170F },
+{ 0x1710, 0x1710, 0x1710 },
+{ 0x1711, 0x1711, 0x1711 },
+{ 0x1712, 0x1712, 0x1712 },
+{ 0x1713, 0x1713, 0x1713 },
+{ 0x1714, 0x1714, 0x1714 },
+{ 0x1720, 0x1720, 0x1720 },
+{ 0x1721, 0x1721, 0x1721 },
+{ 0x1722, 0x1722, 0x1722 },
+{ 0x1723, 0x1723, 0x1723 },
+{ 0x1724, 0x1724, 0x1724 },
+{ 0x1725, 0x1725, 0x1725 },
+{ 0x1726, 0x1726, 0x1726 },
+{ 0x1727, 0x1727, 0x1727 },
+{ 0x1728, 0x1728, 0x1728 },
+{ 0x1729, 0x1729, 0x1729 },
+{ 0x172A, 0x172A, 0x172A },
+{ 0x172B, 0x172B, 0x172B },
+{ 0x172C, 0x172C, 0x172C },
+{ 0x172D, 0x172D, 0x172D },
+{ 0x172E, 0x172E, 0x172E },
+{ 0x172F, 0x172F, 0x172F },
+{ 0x1730, 0x1730, 0x1730 },
+{ 0x1731, 0x1731, 0x1731 },
+{ 0x1732, 0x1732, 0x1732 },
+{ 0x1733, 0x1733, 0x1733 },
+{ 0x1734, 0x1734, 0x1734 },
+{ 0x1740, 0x1740, 0x1740 },
+{ 0x1741, 0x1741, 0x1741 },
+{ 0x1742, 0x1742, 0x1742 },
+{ 0x1743, 0x1743, 0x1743 },
+{ 0x1744, 0x1744, 0x1744 },
+{ 0x1745, 0x1745, 0x1745 },
+{ 0x1746, 0x1746, 0x1746 },
+{ 0x1747, 0x1747, 0x1747 },
+{ 0x1748, 0x1748, 0x1748 },
+{ 0x1749, 0x1749, 0x1749 },
+{ 0x174A, 0x174A, 0x174A },
+{ 0x174B, 0x174B, 0x174B },
+{ 0x174C, 0x174C, 0x174C },
+{ 0x174D, 0x174D, 0x174D },
+{ 0x174E, 0x174E, 0x174E },
+{ 0x174F, 0x174F, 0x174F },
+{ 0x1750, 0x1750, 0x1750 },
+{ 0x1751, 0x1751, 0x1751 },
+{ 0x1752, 0x1752, 0x1752 },
+{ 0x1753, 0x1753, 0x1753 },
+{ 0x1760, 0x1760, 0x1760 },
+{ 0x1761, 0x1761, 0x1761 },
+{ 0x1762, 0x1762, 0x1762 },
+{ 0x1763, 0x1763, 0x1763 },
+{ 0x1764, 0x1764, 0x1764 },
+{ 0x1765, 0x1765, 0x1765 },
+{ 0x1766, 0x1766, 0x1766 },
+{ 0x1767, 0x1767, 0x1767 },
+{ 0x1768, 0x1768, 0x1768 },
+{ 0x1769, 0x1769, 0x1769 },
+{ 0x176A, 0x176A, 0x176A },
+{ 0x176B, 0x176B, 0x176B },
+{ 0x176C, 0x176C, 0x176C },
+{ 0x176E, 0x176E, 0x176E },
+{ 0x176F, 0x176F, 0x176F },
+{ 0x1770, 0x1770, 0x1770 },
+{ 0x1772, 0x1772, 0x1772 },
+{ 0x1773, 0x1773, 0x1773 },
+{ 0x1780, 0x1780, 0x1780 },
+{ 0x1781, 0x1781, 0x1781 },
+{ 0x1782, 0x1782, 0x1782 },
+{ 0x1783, 0x1783, 0x1783 },
+{ 0x1784, 0x1784, 0x1784 },
+{ 0x1785, 0x1785, 0x1785 },
+{ 0x1786, 0x1786, 0x1786 },
+{ 0x1787, 0x1787, 0x1787 },
+{ 0x1788, 0x1788, 0x1788 },
+{ 0x1789, 0x1789, 0x1789 },
+{ 0x178A, 0x178A, 0x178A },
+{ 0x178B, 0x178B, 0x178B },
+{ 0x178C, 0x178C, 0x178C },
+{ 0x178D, 0x178D, 0x178D },
+{ 0x178E, 0x178E, 0x178E },
+{ 0x178F, 0x178F, 0x178F },
+{ 0x1790, 0x1790, 0x1790 },
+{ 0x1791, 0x1791, 0x1791 },
+{ 0x1792, 0x1792, 0x1792 },
+{ 0x1793, 0x1793, 0x1793 },
+{ 0x1794, 0x1794, 0x1794 },
+{ 0x1795, 0x1795, 0x1795 },
+{ 0x1796, 0x1796, 0x1796 },
+{ 0x1797, 0x1797, 0x1797 },
+{ 0x1798, 0x1798, 0x1798 },
+{ 0x1799, 0x1799, 0x1799 },
+{ 0x179A, 0x179A, 0x179A },
+{ 0x179B, 0x179B, 0x179B },
+{ 0x179C, 0x179C, 0x179C },
+{ 0x179D, 0x179D, 0x179D },
+{ 0x179E, 0x179E, 0x179E },
+{ 0x179F, 0x179F, 0x179F },
+{ 0x17A0, 0x17A0, 0x17A0 },
+{ 0x17A1, 0x17A1, 0x17A1 },
+{ 0x17A2, 0x17A2, 0x17A2 },
+{ 0x17A3, 0x17A3, 0x17A3 },
+{ 0x17A4, 0x17A4, 0x17A4 },
+{ 0x17A5, 0x17A5, 0x17A5 },
+{ 0x17A6, 0x17A6, 0x17A6 },
+{ 0x17A7, 0x17A7, 0x17A7 },
+{ 0x17A8, 0x17A8, 0x17A8 },
+{ 0x17A9, 0x17A9, 0x17A9 },
+{ 0x17AA, 0x17AA, 0x17AA },
+{ 0x17AB, 0x17AB, 0x17AB },
+{ 0x17AC, 0x17AC, 0x17AC },
+{ 0x17AD, 0x17AD, 0x17AD },
+{ 0x17AE, 0x17AE, 0x17AE },
+{ 0x17AF, 0x17AF, 0x17AF },
+{ 0x17B0, 0x17B0, 0x17B0 },
+{ 0x17B1, 0x17B1, 0x17B1 },
+{ 0x17B2, 0x17B2, 0x17B2 },
+{ 0x17B3, 0x17B3, 0x17B3 },
+{ 0x17B7, 0x17B7, 0x17B7 },
+{ 0x17B8, 0x17B8, 0x17B8 },
+{ 0x17B9, 0x17B9, 0x17B9 },
+{ 0x17BA, 0x17BA, 0x17BA },
+{ 0x17BB, 0x17BB, 0x17BB },
+{ 0x17BC, 0x17BC, 0x17BC },
+{ 0x17BD, 0x17BD, 0x17BD },
+{ 0x17C6, 0x17C6, 0x17C6 },
+{ 0x17C9, 0x17C9, 0x17C9 },
+{ 0x17CA, 0x17CA, 0x17CA },
+{ 0x17CB, 0x17CB, 0x17CB },
+{ 0x17CC, 0x17CC, 0x17CC },
+{ 0x17CD, 0x17CD, 0x17CD },
+{ 0x17CE, 0x17CE, 0x17CE },
+{ 0x17CF, 0x17CF, 0x17CF },
+{ 0x17D0, 0x17D0, 0x17D0 },
+{ 0x17D1, 0x17D1, 0x17D1 },
+{ 0x17D2, 0x17D2, 0x17D2 },
+{ 0x17D3, 0x17D3, 0x17D3 },
+{ 0x17D7, 0x17D7, 0x17D7 },
+{ 0x17DC, 0x17DC, 0x17DC },
+{ 0x17DD, 0x17DD, 0x17DD },
+{ 0x180B, 0x180B, 0x180B },
+{ 0x180C, 0x180C, 0x180C },
+{ 0x180D, 0x180D, 0x180D },
+{ 0x1820, 0x1820, 0x1820 },
+{ 0x1821, 0x1821, 0x1821 },
+{ 0x1822, 0x1822, 0x1822 },
+{ 0x1823, 0x1823, 0x1823 },
+{ 0x1824, 0x1824, 0x1824 },
+{ 0x1825, 0x1825, 0x1825 },
+{ 0x1826, 0x1826, 0x1826 },
+{ 0x1827, 0x1827, 0x1827 },
+{ 0x1828, 0x1828, 0x1828 },
+{ 0x1829, 0x1829, 0x1829 },
+{ 0x182A, 0x182A, 0x182A },
+{ 0x182B, 0x182B, 0x182B },
+{ 0x182C, 0x182C, 0x182C },
+{ 0x182D, 0x182D, 0x182D },
+{ 0x182E, 0x182E, 0x182E },
+{ 0x182F, 0x182F, 0x182F },
+{ 0x1830, 0x1830, 0x1830 },
+{ 0x1831, 0x1831, 0x1831 },
+{ 0x1832, 0x1832, 0x1832 },
+{ 0x1833, 0x1833, 0x1833 },
+{ 0x1834, 0x1834, 0x1834 },
+{ 0x1835, 0x1835, 0x1835 },
+{ 0x1836, 0x1836, 0x1836 },
+{ 0x1837, 0x1837, 0x1837 },
+{ 0x1838, 0x1838, 0x1838 },
+{ 0x1839, 0x1839, 0x1839 },
+{ 0x183A, 0x183A, 0x183A },
+{ 0x183B, 0x183B, 0x183B },
+{ 0x183C, 0x183C, 0x183C },
+{ 0x183D, 0x183D, 0x183D },
+{ 0x183E, 0x183E, 0x183E },
+{ 0x183F, 0x183F, 0x183F },
+{ 0x1840, 0x1840, 0x1840 },
+{ 0x1841, 0x1841, 0x1841 },
+{ 0x1842, 0x1842, 0x1842 },
+{ 0x1843, 0x1843, 0x1843 },
+{ 0x1844, 0x1844, 0x1844 },
+{ 0x1845, 0x1845, 0x1845 },
+{ 0x1846, 0x1846, 0x1846 },
+{ 0x1847, 0x1847, 0x1847 },
+{ 0x1848, 0x1848, 0x1848 },
+{ 0x1849, 0x1849, 0x1849 },
+{ 0x184A, 0x184A, 0x184A },
+{ 0x184B, 0x184B, 0x184B },
+{ 0x184C, 0x184C, 0x184C },
+{ 0x184D, 0x184D, 0x184D },
+{ 0x184E, 0x184E, 0x184E },
+{ 0x184F, 0x184F, 0x184F },
+{ 0x1850, 0x1850, 0x1850 },
+{ 0x1851, 0x1851, 0x1851 },
+{ 0x1852, 0x1852, 0x1852 },
+{ 0x1853, 0x1853, 0x1853 },
+{ 0x1854, 0x1854, 0x1854 },
+{ 0x1855, 0x1855, 0x1855 },
+{ 0x1856, 0x1856, 0x1856 },
+{ 0x1857, 0x1857, 0x1857 },
+{ 0x1858, 0x1858, 0x1858 },
+{ 0x1859, 0x1859, 0x1859 },
+{ 0x185A, 0x185A, 0x185A },
+{ 0x185B, 0x185B, 0x185B },
+{ 0x185C, 0x185C, 0x185C },
+{ 0x185D, 0x185D, 0x185D },
+{ 0x185E, 0x185E, 0x185E },
+{ 0x185F, 0x185F, 0x185F },
+{ 0x1860, 0x1860, 0x1860 },
+{ 0x1861, 0x1861, 0x1861 },
+{ 0x1862, 0x1862, 0x1862 },
+{ 0x1863, 0x1863, 0x1863 },
+{ 0x1864, 0x1864, 0x1864 },
+{ 0x1865, 0x1865, 0x1865 },
+{ 0x1866, 0x1866, 0x1866 },
+{ 0x1867, 0x1867, 0x1867 },
+{ 0x1868, 0x1868, 0x1868 },
+{ 0x1869, 0x1869, 0x1869 },
+{ 0x186A, 0x186A, 0x186A },
+{ 0x186B, 0x186B, 0x186B },
+{ 0x186C, 0x186C, 0x186C },
+{ 0x186D, 0x186D, 0x186D },
+{ 0x186E, 0x186E, 0x186E },
+{ 0x186F, 0x186F, 0x186F },
+{ 0x1870, 0x1870, 0x1870 },
+{ 0x1871, 0x1871, 0x1871 },
+{ 0x1872, 0x1872, 0x1872 },
+{ 0x1873, 0x1873, 0x1873 },
+{ 0x1874, 0x1874, 0x1874 },
+{ 0x1875, 0x1875, 0x1875 },
+{ 0x1876, 0x1876, 0x1876 },
+{ 0x1877, 0x1877, 0x1877 },
+{ 0x1880, 0x1880, 0x1880 },
+{ 0x1881, 0x1881, 0x1881 },
+{ 0x1882, 0x1882, 0x1882 },
+{ 0x1883, 0x1883, 0x1883 },
+{ 0x1884, 0x1884, 0x1884 },
+{ 0x1885, 0x1885, 0x1885 },
+{ 0x1886, 0x1886, 0x1886 },
+{ 0x1887, 0x1887, 0x1887 },
+{ 0x1888, 0x1888, 0x1888 },
+{ 0x1889, 0x1889, 0x1889 },
+{ 0x188A, 0x188A, 0x188A },
+{ 0x188B, 0x188B, 0x188B },
+{ 0x188C, 0x188C, 0x188C },
+{ 0x188D, 0x188D, 0x188D },
+{ 0x188E, 0x188E, 0x188E },
+{ 0x188F, 0x188F, 0x188F },
+{ 0x1890, 0x1890, 0x1890 },
+{ 0x1891, 0x1891, 0x1891 },
+{ 0x1892, 0x1892, 0x1892 },
+{ 0x1893, 0x1893, 0x1893 },
+{ 0x1894, 0x1894, 0x1894 },
+{ 0x1895, 0x1895, 0x1895 },
+{ 0x1896, 0x1896, 0x1896 },
+{ 0x1897, 0x1897, 0x1897 },
+{ 0x1898, 0x1898, 0x1898 },
+{ 0x1899, 0x1899, 0x1899 },
+{ 0x189A, 0x189A, 0x189A },
+{ 0x189B, 0x189B, 0x189B },
+{ 0x189C, 0x189C, 0x189C },
+{ 0x189D, 0x189D, 0x189D },
+{ 0x189E, 0x189E, 0x189E },
+{ 0x189F, 0x189F, 0x189F },
+{ 0x18A0, 0x18A0, 0x18A0 },
+{ 0x18A1, 0x18A1, 0x18A1 },
+{ 0x18A2, 0x18A2, 0x18A2 },
+{ 0x18A3, 0x18A3, 0x18A3 },
+{ 0x18A4, 0x18A4, 0x18A4 },
+{ 0x18A5, 0x18A5, 0x18A5 },
+{ 0x18A6, 0x18A6, 0x18A6 },
+{ 0x18A7, 0x18A7, 0x18A7 },
+{ 0x18A8, 0x18A8, 0x18A8 },
+{ 0x18A9, 0x18A9, 0x18A9 },
+{ 0x1900, 0x1900, 0x1900 },
+{ 0x1901, 0x1901, 0x1901 },
+{ 0x1902, 0x1902, 0x1902 },
+{ 0x1903, 0x1903, 0x1903 },
+{ 0x1904, 0x1904, 0x1904 },
+{ 0x1905, 0x1905, 0x1905 },
+{ 0x1906, 0x1906, 0x1906 },
+{ 0x1907, 0x1907, 0x1907 },
+{ 0x1908, 0x1908, 0x1908 },
+{ 0x1909, 0x1909, 0x1909 },
+{ 0x190A, 0x190A, 0x190A },
+{ 0x190B, 0x190B, 0x190B },
+{ 0x190C, 0x190C, 0x190C },
+{ 0x190D, 0x190D, 0x190D },
+{ 0x190E, 0x190E, 0x190E },
+{ 0x190F, 0x190F, 0x190F },
+{ 0x1910, 0x1910, 0x1910 },
+{ 0x1911, 0x1911, 0x1911 },
+{ 0x1912, 0x1912, 0x1912 },
+{ 0x1913, 0x1913, 0x1913 },
+{ 0x1914, 0x1914, 0x1914 },
+{ 0x1915, 0x1915, 0x1915 },
+{ 0x1916, 0x1916, 0x1916 },
+{ 0x1917, 0x1917, 0x1917 },
+{ 0x1918, 0x1918, 0x1918 },
+{ 0x1919, 0x1919, 0x1919 },
+{ 0x191A, 0x191A, 0x191A },
+{ 0x191B, 0x191B, 0x191B },
+{ 0x191C, 0x191C, 0x191C },
+{ 0x1920, 0x1920, 0x1920 },
+{ 0x1921, 0x1921, 0x1921 },
+{ 0x1922, 0x1922, 0x1922 },
+{ 0x1927, 0x1927, 0x1927 },
+{ 0x1928, 0x1928, 0x1928 },
+{ 0x1932, 0x1932, 0x1932 },
+{ 0x1939, 0x1939, 0x1939 },
+{ 0x193A, 0x193A, 0x193A },
+{ 0x193B, 0x193B, 0x193B },
+{ 0x1950, 0x1950, 0x1950 },
+{ 0x1951, 0x1951, 0x1951 },
+{ 0x1952, 0x1952, 0x1952 },
+{ 0x1953, 0x1953, 0x1953 },
+{ 0x1954, 0x1954, 0x1954 },
+{ 0x1955, 0x1955, 0x1955 },
+{ 0x1956, 0x1956, 0x1956 },
+{ 0x1957, 0x1957, 0x1957 },
+{ 0x1958, 0x1958, 0x1958 },
+{ 0x1959, 0x1959, 0x1959 },
+{ 0x195A, 0x195A, 0x195A },
+{ 0x195B, 0x195B, 0x195B },
+{ 0x195C, 0x195C, 0x195C },
+{ 0x195D, 0x195D, 0x195D },
+{ 0x195E, 0x195E, 0x195E },
+{ 0x195F, 0x195F, 0x195F },
+{ 0x1960, 0x1960, 0x1960 },
+{ 0x1961, 0x1961, 0x1961 },
+{ 0x1962, 0x1962, 0x1962 },
+{ 0x1963, 0x1963, 0x1963 },
+{ 0x1964, 0x1964, 0x1964 },
+{ 0x1965, 0x1965, 0x1965 },
+{ 0x1966, 0x1966, 0x1966 },
+{ 0x1967, 0x1967, 0x1967 },
+{ 0x1968, 0x1968, 0x1968 },
+{ 0x1969, 0x1969, 0x1969 },
+{ 0x196A, 0x196A, 0x196A },
+{ 0x196B, 0x196B, 0x196B },
+{ 0x196C, 0x196C, 0x196C },
+{ 0x196D, 0x196D, 0x196D },
+{ 0x1970, 0x1970, 0x1970 },
+{ 0x1971, 0x1971, 0x1971 },
+{ 0x1972, 0x1972, 0x1972 },
+{ 0x1973, 0x1973, 0x1973 },
+{ 0x1974, 0x1974, 0x1974 },
+{ 0x1980, 0x1980, 0x1980 },
+{ 0x1981, 0x1981, 0x1981 },
+{ 0x1982, 0x1982, 0x1982 },
+{ 0x1983, 0x1983, 0x1983 },
+{ 0x1984, 0x1984, 0x1984 },
+{ 0x1985, 0x1985, 0x1985 },
+{ 0x1986, 0x1986, 0x1986 },
+{ 0x1987, 0x1987, 0x1987 },
+{ 0x1988, 0x1988, 0x1988 },
+{ 0x1989, 0x1989, 0x1989 },
+{ 0x198A, 0x198A, 0x198A },
+{ 0x198B, 0x198B, 0x198B },
+{ 0x198C, 0x198C, 0x198C },
+{ 0x198D, 0x198D, 0x198D },
+{ 0x198E, 0x198E, 0x198E },
+{ 0x198F, 0x198F, 0x198F },
+{ 0x1990, 0x1990, 0x1990 },
+{ 0x1991, 0x1991, 0x1991 },
+{ 0x1992, 0x1992, 0x1992 },
+{ 0x1993, 0x1993, 0x1993 },
+{ 0x1994, 0x1994, 0x1994 },
+{ 0x1995, 0x1995, 0x1995 },
+{ 0x1996, 0x1996, 0x1996 },
+{ 0x1997, 0x1997, 0x1997 },
+{ 0x1998, 0x1998, 0x1998 },
+{ 0x1999, 0x1999, 0x1999 },
+{ 0x199A, 0x199A, 0x199A },
+{ 0x199B, 0x199B, 0x199B },
+{ 0x199C, 0x199C, 0x199C },
+{ 0x199D, 0x199D, 0x199D },
+{ 0x199E, 0x199E, 0x199E },
+{ 0x199F, 0x199F, 0x199F },
+{ 0x19A0, 0x19A0, 0x19A0 },
+{ 0x19A1, 0x19A1, 0x19A1 },
+{ 0x19A2, 0x19A2, 0x19A2 },
+{ 0x19A3, 0x19A3, 0x19A3 },
+{ 0x19A4, 0x19A4, 0x19A4 },
+{ 0x19A5, 0x19A5, 0x19A5 },
+{ 0x19A6, 0x19A6, 0x19A6 },
+{ 0x19A7, 0x19A7, 0x19A7 },
+{ 0x19A8, 0x19A8, 0x19A8 },
+{ 0x19A9, 0x19A9, 0x19A9 },
+{ 0x19C1, 0x19C1, 0x19C1 },
+{ 0x19C2, 0x19C2, 0x19C2 },
+{ 0x19C3, 0x19C3, 0x19C3 },
+{ 0x19C4, 0x19C4, 0x19C4 },
+{ 0x19C5, 0x19C5, 0x19C5 },
+{ 0x19C6, 0x19C6, 0x19C6 },
+{ 0x19C7, 0x19C7, 0x19C7 },
+{ 0x1A00, 0x1A00, 0x1A00 },
+{ 0x1A01, 0x1A01, 0x1A01 },
+{ 0x1A02, 0x1A02, 0x1A02 },
+{ 0x1A03, 0x1A03, 0x1A03 },
+{ 0x1A04, 0x1A04, 0x1A04 },
+{ 0x1A05, 0x1A05, 0x1A05 },
+{ 0x1A06, 0x1A06, 0x1A06 },
+{ 0x1A07, 0x1A07, 0x1A07 },
+{ 0x1A08, 0x1A08, 0x1A08 },
+{ 0x1A09, 0x1A09, 0x1A09 },
+{ 0x1A0A, 0x1A0A, 0x1A0A },
+{ 0x1A0B, 0x1A0B, 0x1A0B },
+{ 0x1A0C, 0x1A0C, 0x1A0C },
+{ 0x1A0D, 0x1A0D, 0x1A0D },
+{ 0x1A0E, 0x1A0E, 0x1A0E },
+{ 0x1A0F, 0x1A0F, 0x1A0F },
+{ 0x1A10, 0x1A10, 0x1A10 },
+{ 0x1A11, 0x1A11, 0x1A11 },
+{ 0x1A12, 0x1A12, 0x1A12 },
+{ 0x1A13, 0x1A13, 0x1A13 },
+{ 0x1A14, 0x1A14, 0x1A14 },
+{ 0x1A15, 0x1A15, 0x1A15 },
+{ 0x1A16, 0x1A16, 0x1A16 },
+{ 0x1A17, 0x1A17, 0x1A17 },
+{ 0x1A18, 0x1A18, 0x1A18 },
+{ 0x1D00, 0x1D00, 0x1D00 },
+{ 0x1D01, 0x1D01, 0x1D01 },
+{ 0x1D02, 0x1D02, 0x1D02 },
+{ 0x1D03, 0x1D03, 0x1D03 },
+{ 0x1D04, 0x1D04, 0x1D04 },
+{ 0x1D05, 0x1D05, 0x1D05 },
+{ 0x1D06, 0x1D06, 0x1D06 },
+{ 0x1D07, 0x1D07, 0x1D07 },
+{ 0x1D08, 0x1D08, 0x1D08 },
+{ 0x1D09, 0x1D09, 0x1D09 },
+{ 0x1D0A, 0x1D0A, 0x1D0A },
+{ 0x1D0B, 0x1D0B, 0x1D0B },
+{ 0x1D0C, 0x1D0C, 0x1D0C },
+{ 0x1D0D, 0x1D0D, 0x1D0D },
+{ 0x1D0E, 0x1D0E, 0x1D0E },
+{ 0x1D0F, 0x1D0F, 0x1D0F },
+{ 0x1D10, 0x1D10, 0x1D10 },
+{ 0x1D11, 0x1D11, 0x1D11 },
+{ 0x1D12, 0x1D12, 0x1D12 },
+{ 0x1D13, 0x1D13, 0x1D13 },
+{ 0x1D14, 0x1D14, 0x1D14 },
+{ 0x1D15, 0x1D15, 0x1D15 },
+{ 0x1D16, 0x1D16, 0x1D16 },
+{ 0x1D17, 0x1D17, 0x1D17 },
+{ 0x1D18, 0x1D18, 0x1D18 },
+{ 0x1D19, 0x1D19, 0x1D19 },
+{ 0x1D1A, 0x1D1A, 0x1D1A },
+{ 0x1D1B, 0x1D1B, 0x1D1B },
+{ 0x1D1C, 0x1D1C, 0x1D1C },
+{ 0x1D1D, 0x1D1D, 0x1D1D },
+{ 0x1D1E, 0x1D1E, 0x1D1E },
+{ 0x1D1F, 0x1D1F, 0x1D1F },
+{ 0x1D20, 0x1D20, 0x1D20 },
+{ 0x1D21, 0x1D21, 0x1D21 },
+{ 0x1D22, 0x1D22, 0x1D22 },
+{ 0x1D23, 0x1D23, 0x1D23 },
+{ 0x1D24, 0x1D24, 0x1D24 },
+{ 0x1D25, 0x1D25, 0x1D25 },
+{ 0x1D26, 0x1D26, 0x1D26 },
+{ 0x1D27, 0x1D27, 0x1D27 },
+{ 0x1D28, 0x1D28, 0x1D28 },
+{ 0x1D29, 0x1D29, 0x1D29 },
+{ 0x1D2A, 0x1D2A, 0x1D2A },
+{ 0x1D2B, 0x1D2B, 0x1D2B },
+{ 0x1D2C, 0x1D2C, 0x1D2C },
+{ 0x1D2D, 0x1D2D, 0x1D2D },
+{ 0x1D2E, 0x1D2E, 0x1D2E },
+{ 0x1D2F, 0x1D2F, 0x1D2F },
+{ 0x1D30, 0x1D30, 0x1D30 },
+{ 0x1D31, 0x1D31, 0x1D31 },
+{ 0x1D32, 0x1D32, 0x1D32 },
+{ 0x1D33, 0x1D33, 0x1D33 },
+{ 0x1D34, 0x1D34, 0x1D34 },
+{ 0x1D35, 0x1D35, 0x1D35 },
+{ 0x1D36, 0x1D36, 0x1D36 },
+{ 0x1D37, 0x1D37, 0x1D37 },
+{ 0x1D38, 0x1D38, 0x1D38 },
+{ 0x1D39, 0x1D39, 0x1D39 },
+{ 0x1D3A, 0x1D3A, 0x1D3A },
+{ 0x1D3B, 0x1D3B, 0x1D3B },
+{ 0x1D3C, 0x1D3C, 0x1D3C },
+{ 0x1D3D, 0x1D3D, 0x1D3D },
+{ 0x1D3E, 0x1D3E, 0x1D3E },
+{ 0x1D3F, 0x1D3F, 0x1D3F },
+{ 0x1D40, 0x1D40, 0x1D40 },
+{ 0x1D41, 0x1D41, 0x1D41 },
+{ 0x1D42, 0x1D42, 0x1D42 },
+{ 0x1D43, 0x1D43, 0x1D43 },
+{ 0x1D44, 0x1D44, 0x1D44 },
+{ 0x1D45, 0x1D45, 0x1D45 },
+{ 0x1D46, 0x1D46, 0x1D46 },
+{ 0x1D47, 0x1D47, 0x1D47 },
+{ 0x1D48, 0x1D48, 0x1D48 },
+{ 0x1D49, 0x1D49, 0x1D49 },
+{ 0x1D4A, 0x1D4A, 0x1D4A },
+{ 0x1D4B, 0x1D4B, 0x1D4B },
+{ 0x1D4C, 0x1D4C, 0x1D4C },
+{ 0x1D4D, 0x1D4D, 0x1D4D },
+{ 0x1D4E, 0x1D4E, 0x1D4E },
+{ 0x1D4F, 0x1D4F, 0x1D4F },
+{ 0x1D50, 0x1D50, 0x1D50 },
+{ 0x1D51, 0x1D51, 0x1D51 },
+{ 0x1D52, 0x1D52, 0x1D52 },
+{ 0x1D53, 0x1D53, 0x1D53 },
+{ 0x1D54, 0x1D54, 0x1D54 },
+{ 0x1D55, 0x1D55, 0x1D55 },
+{ 0x1D56, 0x1D56, 0x1D56 },
+{ 0x1D57, 0x1D57, 0x1D57 },
+{ 0x1D58, 0x1D58, 0x1D58 },
+{ 0x1D59, 0x1D59, 0x1D59 },
+{ 0x1D5A, 0x1D5A, 0x1D5A },
+{ 0x1D5B, 0x1D5B, 0x1D5B },
+{ 0x1D5C, 0x1D5C, 0x1D5C },
+{ 0x1D5D, 0x1D5D, 0x1D5D },
+{ 0x1D5E, 0x1D5E, 0x1D5E },
+{ 0x1D5F, 0x1D5F, 0x1D5F },
+{ 0x1D60, 0x1D60, 0x1D60 },
+{ 0x1D61, 0x1D61, 0x1D61 },
+{ 0x1D62, 0x1D62, 0x1D62 },
+{ 0x1D63, 0x1D63, 0x1D63 },
+{ 0x1D64, 0x1D64, 0x1D64 },
+{ 0x1D65, 0x1D65, 0x1D65 },
+{ 0x1D66, 0x1D66, 0x1D66 },
+{ 0x1D67, 0x1D67, 0x1D67 },
+{ 0x1D68, 0x1D68, 0x1D68 },
+{ 0x1D69, 0x1D69, 0x1D69 },
+{ 0x1D6A, 0x1D6A, 0x1D6A },
+{ 0x1D6B, 0x1D6B, 0x1D6B },
+{ 0x1D6C, 0x1D6C, 0x1D6C },
+{ 0x1D6D, 0x1D6D, 0x1D6D },
+{ 0x1D6E, 0x1D6E, 0x1D6E },
+{ 0x1D6F, 0x1D6F, 0x1D6F },
+{ 0x1D70, 0x1D70, 0x1D70 },
+{ 0x1D71, 0x1D71, 0x1D71 },
+{ 0x1D72, 0x1D72, 0x1D72 },
+{ 0x1D73, 0x1D73, 0x1D73 },
+{ 0x1D74, 0x1D74, 0x1D74 },
+{ 0x1D75, 0x1D75, 0x1D75 },
+{ 0x1D76, 0x1D76, 0x1D76 },
+{ 0x1D77, 0x1D77, 0x1D77 },
+{ 0x1D78, 0x1D78, 0x1D78 },
+{ 0x1D79, 0x1D79, 0x1D79 },
+{ 0x1D7A, 0x1D7A, 0x1D7A },
+{ 0x1D7B, 0x1D7B, 0x1D7B },
+{ 0x1D7C, 0x1D7C, 0x1D7C },
+{ 0x1D7D, 0x1D7D, 0x1D7D },
+{ 0x1D7E, 0x1D7E, 0x1D7E },
+{ 0x1D7F, 0x1D7F, 0x1D7F },
+{ 0x1D80, 0x1D80, 0x1D80 },
+{ 0x1D81, 0x1D81, 0x1D81 },
+{ 0x1D82, 0x1D82, 0x1D82 },
+{ 0x1D83, 0x1D83, 0x1D83 },
+{ 0x1D84, 0x1D84, 0x1D84 },
+{ 0x1D85, 0x1D85, 0x1D85 },
+{ 0x1D86, 0x1D86, 0x1D86 },
+{ 0x1D87, 0x1D87, 0x1D87 },
+{ 0x1D88, 0x1D88, 0x1D88 },
+{ 0x1D89, 0x1D89, 0x1D89 },
+{ 0x1D8A, 0x1D8A, 0x1D8A },
+{ 0x1D8B, 0x1D8B, 0x1D8B },
+{ 0x1D8C, 0x1D8C, 0x1D8C },
+{ 0x1D8D, 0x1D8D, 0x1D8D },
+{ 0x1D8E, 0x1D8E, 0x1D8E },
+{ 0x1D8F, 0x1D8F, 0x1D8F },
+{ 0x1D90, 0x1D90, 0x1D90 },
+{ 0x1D91, 0x1D91, 0x1D91 },
+{ 0x1D92, 0x1D92, 0x1D92 },
+{ 0x1D93, 0x1D93, 0x1D93 },
+{ 0x1D94, 0x1D94, 0x1D94 },
+{ 0x1D95, 0x1D95, 0x1D95 },
+{ 0x1D96, 0x1D96, 0x1D96 },
+{ 0x1D97, 0x1D97, 0x1D97 },
+{ 0x1D98, 0x1D98, 0x1D98 },
+{ 0x1D99, 0x1D99, 0x1D99 },
+{ 0x1D9A, 0x1D9A, 0x1D9A },
+{ 0x1D9B, 0x1D9B, 0x1D9B },
+{ 0x1D9C, 0x1D9C, 0x1D9C },
+{ 0x1D9D, 0x1D9D, 0x1D9D },
+{ 0x1D9E, 0x1D9E, 0x1D9E },
+{ 0x1D9F, 0x1D9F, 0x1D9F },
+{ 0x1DA0, 0x1DA0, 0x1DA0 },
+{ 0x1DA1, 0x1DA1, 0x1DA1 },
+{ 0x1DA2, 0x1DA2, 0x1DA2 },
+{ 0x1DA3, 0x1DA3, 0x1DA3 },
+{ 0x1DA4, 0x1DA4, 0x1DA4 },
+{ 0x1DA5, 0x1DA5, 0x1DA5 },
+{ 0x1DA6, 0x1DA6, 0x1DA6 },
+{ 0x1DA7, 0x1DA7, 0x1DA7 },
+{ 0x1DA8, 0x1DA8, 0x1DA8 },
+{ 0x1DA9, 0x1DA9, 0x1DA9 },
+{ 0x1DAA, 0x1DAA, 0x1DAA },
+{ 0x1DAB, 0x1DAB, 0x1DAB },
+{ 0x1DAC, 0x1DAC, 0x1DAC },
+{ 0x1DAD, 0x1DAD, 0x1DAD },
+{ 0x1DAE, 0x1DAE, 0x1DAE },
+{ 0x1DAF, 0x1DAF, 0x1DAF },
+{ 0x1DB0, 0x1DB0, 0x1DB0 },
+{ 0x1DB1, 0x1DB1, 0x1DB1 },
+{ 0x1DB2, 0x1DB2, 0x1DB2 },
+{ 0x1DB3, 0x1DB3, 0x1DB3 },
+{ 0x1DB4, 0x1DB4, 0x1DB4 },
+{ 0x1DB5, 0x1DB5, 0x1DB5 },
+{ 0x1DB6, 0x1DB6, 0x1DB6 },
+{ 0x1DB7, 0x1DB7, 0x1DB7 },
+{ 0x1DB8, 0x1DB8, 0x1DB8 },
+{ 0x1DB9, 0x1DB9, 0x1DB9 },
+{ 0x1DBA, 0x1DBA, 0x1DBA },
+{ 0x1DBB, 0x1DBB, 0x1DBB },
+{ 0x1DBC, 0x1DBC, 0x1DBC },
+{ 0x1DBD, 0x1DBD, 0x1DBD },
+{ 0x1DBE, 0x1DBE, 0x1DBE },
+{ 0x1DBF, 0x1DBF, 0x1DBF },
+{ 0x1DC0, 0x1DC0, 0x1DC0 },
+{ 0x1DC1, 0x1DC1, 0x1DC1 },
+{ 0x1DC2, 0x1DC2, 0x1DC2 },
+{ 0x1DC3, 0x1DC3, 0x1DC3 },
+{ 0x1E00, 0x1E00, 0x1E01 },
+{ 0x1E01, 0x1E00, 0x1E01 },
+{ 0x1E02, 0x1E02, 0x1E03 },
+{ 0x1E03, 0x1E02, 0x1E03 },
+{ 0x1E04, 0x1E04, 0x1E05 },
+{ 0x1E05, 0x1E04, 0x1E05 },
+{ 0x1E06, 0x1E06, 0x1E07 },
+{ 0x1E07, 0x1E06, 0x1E07 },
+{ 0x1E08, 0x1E08, 0x1E09 },
+{ 0x1E09, 0x1E08, 0x1E09 },
+{ 0x1E0A, 0x1E0A, 0x1E0B },
+{ 0x1E0B, 0x1E0A, 0x1E0B },
+{ 0x1E0C, 0x1E0C, 0x1E0D },
+{ 0x1E0D, 0x1E0C, 0x1E0D },
+{ 0x1E0E, 0x1E0E, 0x1E0F },
+{ 0x1E0F, 0x1E0E, 0x1E0F },
+{ 0x1E10, 0x1E10, 0x1E11 },
+{ 0x1E11, 0x1E10, 0x1E11 },
+{ 0x1E12, 0x1E12, 0x1E13 },
+{ 0x1E13, 0x1E12, 0x1E13 },
+{ 0x1E14, 0x1E14, 0x1E15 },
+{ 0x1E15, 0x1E14, 0x1E15 },
+{ 0x1E16, 0x1E16, 0x1E17 },
+{ 0x1E17, 0x1E16, 0x1E17 },
+{ 0x1E18, 0x1E18, 0x1E19 },
+{ 0x1E19, 0x1E18, 0x1E19 },
+{ 0x1E1A, 0x1E1A, 0x1E1B },
+{ 0x1E1B, 0x1E1A, 0x1E1B },
+{ 0x1E1C, 0x1E1C, 0x1E1D },
+{ 0x1E1D, 0x1E1C, 0x1E1D },
+{ 0x1E1E, 0x1E1E, 0x1E1F },
+{ 0x1E1F, 0x1E1E, 0x1E1F },
+{ 0x1E20, 0x1E20, 0x1E21 },
+{ 0x1E21, 0x1E20, 0x1E21 },
+{ 0x1E22, 0x1E22, 0x1E23 },
+{ 0x1E23, 0x1E22, 0x1E23 },
+{ 0x1E24, 0x1E24, 0x1E25 },
+{ 0x1E25, 0x1E24, 0x1E25 },
+{ 0x1E26, 0x1E26, 0x1E27 },
+{ 0x1E27, 0x1E26, 0x1E27 },
+{ 0x1E28, 0x1E28, 0x1E29 },
+{ 0x1E29, 0x1E28, 0x1E29 },
+{ 0x1E2A, 0x1E2A, 0x1E2B },
+{ 0x1E2B, 0x1E2A, 0x1E2B },
+{ 0x1E2C, 0x1E2C, 0x1E2D },
+{ 0x1E2D, 0x1E2C, 0x1E2D },
+{ 0x1E2E, 0x1E2E, 0x1E2F },
+{ 0x1E2F, 0x1E2E, 0x1E2F },
+{ 0x1E30, 0x1E30, 0x1E31 },
+{ 0x1E31, 0x1E30, 0x1E31 },
+{ 0x1E32, 0x1E32, 0x1E33 },
+{ 0x1E33, 0x1E32, 0x1E33 },
+{ 0x1E34, 0x1E34, 0x1E35 },
+{ 0x1E35, 0x1E34, 0x1E35 },
+{ 0x1E36, 0x1E36, 0x1E37 },
+{ 0x1E37, 0x1E36, 0x1E37 },
+{ 0x1E38, 0x1E38, 0x1E39 },
+{ 0x1E39, 0x1E38, 0x1E39 },
+{ 0x1E3A, 0x1E3A, 0x1E3B },
+{ 0x1E3B, 0x1E3A, 0x1E3B },
+{ 0x1E3C, 0x1E3C, 0x1E3D },
+{ 0x1E3D, 0x1E3C, 0x1E3D },
+{ 0x1E3E, 0x1E3E, 0x1E3F },
+{ 0x1E3F, 0x1E3E, 0x1E3F },
+{ 0x1E40, 0x1E40, 0x1E41 },
+{ 0x1E41, 0x1E40, 0x1E41 },
+{ 0x1E42, 0x1E42, 0x1E43 },
+{ 0x1E43, 0x1E42, 0x1E43 },
+{ 0x1E44, 0x1E44, 0x1E45 },
+{ 0x1E45, 0x1E44, 0x1E45 },
+{ 0x1E46, 0x1E46, 0x1E47 },
+{ 0x1E47, 0x1E46, 0x1E47 },
+{ 0x1E48, 0x1E48, 0x1E49 },
+{ 0x1E49, 0x1E48, 0x1E49 },
+{ 0x1E4A, 0x1E4A, 0x1E4B },
+{ 0x1E4B, 0x1E4A, 0x1E4B },
+{ 0x1E4C, 0x1E4C, 0x1E4D },
+{ 0x1E4D, 0x1E4C, 0x1E4D },
+{ 0x1E4E, 0x1E4E, 0x1E4F },
+{ 0x1E4F, 0x1E4E, 0x1E4F },
+{ 0x1E50, 0x1E50, 0x1E51 },
+{ 0x1E51, 0x1E50, 0x1E51 },
+{ 0x1E52, 0x1E52, 0x1E53 },
+{ 0x1E53, 0x1E52, 0x1E53 },
+{ 0x1E54, 0x1E54, 0x1E55 },
+{ 0x1E55, 0x1E54, 0x1E55 },
+{ 0x1E56, 0x1E56, 0x1E57 },
+{ 0x1E57, 0x1E56, 0x1E57 },
+{ 0x1E58, 0x1E58, 0x1E59 },
+{ 0x1E59, 0x1E58, 0x1E59 },
+{ 0x1E5A, 0x1E5A, 0x1E5B },
+{ 0x1E5B, 0x1E5A, 0x1E5B },
+{ 0x1E5C, 0x1E5C, 0x1E5D },
+{ 0x1E5D, 0x1E5C, 0x1E5D },
+{ 0x1E5E, 0x1E5E, 0x1E5F },
+{ 0x1E5F, 0x1E5E, 0x1E5F },
+{ 0x1E60, 0x1E60, 0x1E61 },
+{ 0x1E61, 0x1E60, 0x1E61 },
+{ 0x1E62, 0x1E62, 0x1E63 },
+{ 0x1E63, 0x1E62, 0x1E63 },
+{ 0x1E64, 0x1E64, 0x1E65 },
+{ 0x1E65, 0x1E64, 0x1E65 },
+{ 0x1E66, 0x1E66, 0x1E67 },
+{ 0x1E67, 0x1E66, 0x1E67 },
+{ 0x1E68, 0x1E68, 0x1E69 },
+{ 0x1E69, 0x1E68, 0x1E69 },
+{ 0x1E6A, 0x1E6A, 0x1E6B },
+{ 0x1E6B, 0x1E6A, 0x1E6B },
+{ 0x1E6C, 0x1E6C, 0x1E6D },
+{ 0x1E6D, 0x1E6C, 0x1E6D },
+{ 0x1E6E, 0x1E6E, 0x1E6F },
+{ 0x1E6F, 0x1E6E, 0x1E6F },
+{ 0x1E70, 0x1E70, 0x1E71 },
+{ 0x1E71, 0x1E70, 0x1E71 },
+{ 0x1E72, 0x1E72, 0x1E73 },
+{ 0x1E73, 0x1E72, 0x1E73 },
+{ 0x1E74, 0x1E74, 0x1E75 },
+{ 0x1E75, 0x1E74, 0x1E75 },
+{ 0x1E76, 0x1E76, 0x1E77 },
+{ 0x1E77, 0x1E76, 0x1E77 },
+{ 0x1E78, 0x1E78, 0x1E79 },
+{ 0x1E79, 0x1E78, 0x1E79 },
+{ 0x1E7A, 0x1E7A, 0x1E7B },
+{ 0x1E7B, 0x1E7A, 0x1E7B },
+{ 0x1E7C, 0x1E7C, 0x1E7D },
+{ 0x1E7D, 0x1E7C, 0x1E7D },
+{ 0x1E7E, 0x1E7E, 0x1E7F },
+{ 0x1E7F, 0x1E7E, 0x1E7F },
+{ 0x1E80, 0x1E80, 0x1E81 },
+{ 0x1E81, 0x1E80, 0x1E81 },
+{ 0x1E82, 0x1E82, 0x1E83 },
+{ 0x1E83, 0x1E82, 0x1E83 },
+{ 0x1E84, 0x1E84, 0x1E85 },
+{ 0x1E85, 0x1E84, 0x1E85 },
+{ 0x1E86, 0x1E86, 0x1E87 },
+{ 0x1E87, 0x1E86, 0x1E87 },
+{ 0x1E88, 0x1E88, 0x1E89 },
+{ 0x1E89, 0x1E88, 0x1E89 },
+{ 0x1E8A, 0x1E8A, 0x1E8B },
+{ 0x1E8B, 0x1E8A, 0x1E8B },
+{ 0x1E8C, 0x1E8C, 0x1E8D },
+{ 0x1E8D, 0x1E8C, 0x1E8D },
+{ 0x1E8E, 0x1E8E, 0x1E8F },
+{ 0x1E8F, 0x1E8E, 0x1E8F },
+{ 0x1E90, 0x1E90, 0x1E91 },
+{ 0x1E91, 0x1E90, 0x1E91 },
+{ 0x1E92, 0x1E92, 0x1E93 },
+{ 0x1E93, 0x1E92, 0x1E93 },
+{ 0x1E94, 0x1E94, 0x1E95 },
+{ 0x1E95, 0x1E94, 0x1E95 },
+{ 0x1E96, 0x1E96, 0x1E96 },
+{ 0x1E97, 0x1E97, 0x1E97 },
+{ 0x1E98, 0x1E98, 0x1E98 },
+{ 0x1E99, 0x1E99, 0x1E99 },
+{ 0x1E9A, 0x1E9A, 0x1E9A },
+{ 0x1E9B, 0x1E60, 0x1E9B },
+{ 0x1EA0, 0x1EA0, 0x1EA1 },
+{ 0x1EA1, 0x1EA0, 0x1EA1 },
+{ 0x1EA2, 0x1EA2, 0x1EA3 },
+{ 0x1EA3, 0x1EA2, 0x1EA3 },
+{ 0x1EA4, 0x1EA4, 0x1EA5 },
+{ 0x1EA5, 0x1EA4, 0x1EA5 },
+{ 0x1EA6, 0x1EA6, 0x1EA7 },
+{ 0x1EA7, 0x1EA6, 0x1EA7 },
+{ 0x1EA8, 0x1EA8, 0x1EA9 },
+{ 0x1EA9, 0x1EA8, 0x1EA9 },
+{ 0x1EAA, 0x1EAA, 0x1EAB },
+{ 0x1EAB, 0x1EAA, 0x1EAB },
+{ 0x1EAC, 0x1EAC, 0x1EAD },
+{ 0x1EAD, 0x1EAC, 0x1EAD },
+{ 0x1EAE, 0x1EAE, 0x1EAF },
+{ 0x1EAF, 0x1EAE, 0x1EAF },
+{ 0x1EB0, 0x1EB0, 0x1EB1 },
+{ 0x1EB1, 0x1EB0, 0x1EB1 },
+{ 0x1EB2, 0x1EB2, 0x1EB3 },
+{ 0x1EB3, 0x1EB2, 0x1EB3 },
+{ 0x1EB4, 0x1EB4, 0x1EB5 },
+{ 0x1EB5, 0x1EB4, 0x1EB5 },
+{ 0x1EB6, 0x1EB6, 0x1EB7 },
+{ 0x1EB7, 0x1EB6, 0x1EB7 },
+{ 0x1EB8, 0x1EB8, 0x1EB9 },
+{ 0x1EB9, 0x1EB8, 0x1EB9 },
+{ 0x1EBA, 0x1EBA, 0x1EBB },
+{ 0x1EBB, 0x1EBA, 0x1EBB },
+{ 0x1EBC, 0x1EBC, 0x1EBD },
+{ 0x1EBD, 0x1EBC, 0x1EBD },
+{ 0x1EBE, 0x1EBE, 0x1EBF },
+{ 0x1EBF, 0x1EBE, 0x1EBF },
+{ 0x1EC0, 0x1EC0, 0x1EC1 },
+{ 0x1EC1, 0x1EC0, 0x1EC1 },
+{ 0x1EC2, 0x1EC2, 0x1EC3 },
+{ 0x1EC3, 0x1EC2, 0x1EC3 },
+{ 0x1EC4, 0x1EC4, 0x1EC5 },
+{ 0x1EC5, 0x1EC4, 0x1EC5 },
+{ 0x1EC6, 0x1EC6, 0x1EC7 },
+{ 0x1EC7, 0x1EC6, 0x1EC7 },
+{ 0x1EC8, 0x1EC8, 0x1EC9 },
+{ 0x1EC9, 0x1EC8, 0x1EC9 },
+{ 0x1ECA, 0x1ECA, 0x1ECB },
+{ 0x1ECB, 0x1ECA, 0x1ECB },
+{ 0x1ECC, 0x1ECC, 0x1ECD },
+{ 0x1ECD, 0x1ECC, 0x1ECD },
+{ 0x1ECE, 0x1ECE, 0x1ECF },
+{ 0x1ECF, 0x1ECE, 0x1ECF },
+{ 0x1ED0, 0x1ED0, 0x1ED1 },
+{ 0x1ED1, 0x1ED0, 0x1ED1 },
+{ 0x1ED2, 0x1ED2, 0x1ED3 },
+{ 0x1ED3, 0x1ED2, 0x1ED3 },
+{ 0x1ED4, 0x1ED4, 0x1ED5 },
+{ 0x1ED5, 0x1ED4, 0x1ED5 },
+{ 0x1ED6, 0x1ED6, 0x1ED7 },
+{ 0x1ED7, 0x1ED6, 0x1ED7 },
+{ 0x1ED8, 0x1ED8, 0x1ED9 },
+{ 0x1ED9, 0x1ED8, 0x1ED9 },
+{ 0x1EDA, 0x1EDA, 0x1EDB },
+{ 0x1EDB, 0x1EDA, 0x1EDB },
+{ 0x1EDC, 0x1EDC, 0x1EDD },
+{ 0x1EDD, 0x1EDC, 0x1EDD },
+{ 0x1EDE, 0x1EDE, 0x1EDF },
+{ 0x1EDF, 0x1EDE, 0x1EDF },
+{ 0x1EE0, 0x1EE0, 0x1EE1 },
+{ 0x1EE1, 0x1EE0, 0x1EE1 },
+{ 0x1EE2, 0x1EE2, 0x1EE3 },
+{ 0x1EE3, 0x1EE2, 0x1EE3 },
+{ 0x1EE4, 0x1EE4, 0x1EE5 },
+{ 0x1EE5, 0x1EE4, 0x1EE5 },
+{ 0x1EE6, 0x1EE6, 0x1EE7 },
+{ 0x1EE7, 0x1EE6, 0x1EE7 },
+{ 0x1EE8, 0x1EE8, 0x1EE9 },
+{ 0x1EE9, 0x1EE8, 0x1EE9 },
+{ 0x1EEA, 0x1EEA, 0x1EEB },
+{ 0x1EEB, 0x1EEA, 0x1EEB },
+{ 0x1EEC, 0x1EEC, 0x1EED },
+{ 0x1EED, 0x1EEC, 0x1EED },
+{ 0x1EEE, 0x1EEE, 0x1EEF },
+{ 0x1EEF, 0x1EEE, 0x1EEF },
+{ 0x1EF0, 0x1EF0, 0x1EF1 },
+{ 0x1EF1, 0x1EF0, 0x1EF1 },
+{ 0x1EF2, 0x1EF2, 0x1EF3 },
+{ 0x1EF3, 0x1EF2, 0x1EF3 },
+{ 0x1EF4, 0x1EF4, 0x1EF5 },
+{ 0x1EF5, 0x1EF4, 0x1EF5 },
+{ 0x1EF6, 0x1EF6, 0x1EF7 },
+{ 0x1EF7, 0x1EF6, 0x1EF7 },
+{ 0x1EF8, 0x1EF8, 0x1EF9 },
+{ 0x1EF9, 0x1EF8, 0x1EF9 },
+{ 0x1F00, 0x1F08, 0x1F00 },
+{ 0x1F01, 0x1F09, 0x1F01 },
+{ 0x1F02, 0x1F0A, 0x1F02 },
+{ 0x1F03, 0x1F0B, 0x1F03 },
+{ 0x1F04, 0x1F0C, 0x1F04 },
+{ 0x1F05, 0x1F0D, 0x1F05 },
+{ 0x1F06, 0x1F0E, 0x1F06 },
+{ 0x1F07, 0x1F0F, 0x1F07 },
+{ 0x1F08, 0x1F08, 0x1F00 },
+{ 0x1F09, 0x1F09, 0x1F01 },
+{ 0x1F0A, 0x1F0A, 0x1F02 },
+{ 0x1F0B, 0x1F0B, 0x1F03 },
+{ 0x1F0C, 0x1F0C, 0x1F04 },
+{ 0x1F0D, 0x1F0D, 0x1F05 },
+{ 0x1F0E, 0x1F0E, 0x1F06 },
+{ 0x1F0F, 0x1F0F, 0x1F07 },
+{ 0x1F10, 0x1F18, 0x1F10 },
+{ 0x1F11, 0x1F19, 0x1F11 },
+{ 0x1F12, 0x1F1A, 0x1F12 },
+{ 0x1F13, 0x1F1B, 0x1F13 },
+{ 0x1F14, 0x1F1C, 0x1F14 },
+{ 0x1F15, 0x1F1D, 0x1F15 },
+{ 0x1F18, 0x1F18, 0x1F10 },
+{ 0x1F19, 0x1F19, 0x1F11 },
+{ 0x1F1A, 0x1F1A, 0x1F12 },
+{ 0x1F1B, 0x1F1B, 0x1F13 },
+{ 0x1F1C, 0x1F1C, 0x1F14 },
+{ 0x1F1D, 0x1F1D, 0x1F15 },
+{ 0x1F20, 0x1F28, 0x1F20 },
+{ 0x1F21, 0x1F29, 0x1F21 },
+{ 0x1F22, 0x1F2A, 0x1F22 },
+{ 0x1F23, 0x1F2B, 0x1F23 },
+{ 0x1F24, 0x1F2C, 0x1F24 },
+{ 0x1F25, 0x1F2D, 0x1F25 },
+{ 0x1F26, 0x1F2E, 0x1F26 },
+{ 0x1F27, 0x1F2F, 0x1F27 },
+{ 0x1F28, 0x1F28, 0x1F20 },
+{ 0x1F29, 0x1F29, 0x1F21 },
+{ 0x1F2A, 0x1F2A, 0x1F22 },
+{ 0x1F2B, 0x1F2B, 0x1F23 },
+{ 0x1F2C, 0x1F2C, 0x1F24 },
+{ 0x1F2D, 0x1F2D, 0x1F25 },
+{ 0x1F2E, 0x1F2E, 0x1F26 },
+{ 0x1F2F, 0x1F2F, 0x1F27 },
+{ 0x1F30, 0x1F38, 0x1F30 },
+{ 0x1F31, 0x1F39, 0x1F31 },
+{ 0x1F32, 0x1F3A, 0x1F32 },
+{ 0x1F33, 0x1F3B, 0x1F33 },
+{ 0x1F34, 0x1F3C, 0x1F34 },
+{ 0x1F35, 0x1F3D, 0x1F35 },
+{ 0x1F36, 0x1F3E, 0x1F36 },
+{ 0x1F37, 0x1F3F, 0x1F37 },
+{ 0x1F38, 0x1F38, 0x1F30 },
+{ 0x1F39, 0x1F39, 0x1F31 },
+{ 0x1F3A, 0x1F3A, 0x1F32 },
+{ 0x1F3B, 0x1F3B, 0x1F33 },
+{ 0x1F3C, 0x1F3C, 0x1F34 },
+{ 0x1F3D, 0x1F3D, 0x1F35 },
+{ 0x1F3E, 0x1F3E, 0x1F36 },
+{ 0x1F3F, 0x1F3F, 0x1F37 },
+{ 0x1F40, 0x1F48, 0x1F40 },
+{ 0x1F41, 0x1F49, 0x1F41 },
+{ 0x1F42, 0x1F4A, 0x1F42 },
+{ 0x1F43, 0x1F4B, 0x1F43 },
+{ 0x1F44, 0x1F4C, 0x1F44 },
+{ 0x1F45, 0x1F4D, 0x1F45 },
+{ 0x1F48, 0x1F48, 0x1F40 },
+{ 0x1F49, 0x1F49, 0x1F41 },
+{ 0x1F4A, 0x1F4A, 0x1F42 },
+{ 0x1F4B, 0x1F4B, 0x1F43 },
+{ 0x1F4C, 0x1F4C, 0x1F44 },
+{ 0x1F4D, 0x1F4D, 0x1F45 },
+{ 0x1F50, 0x1F50, 0x1F50 },
+{ 0x1F51, 0x1F59, 0x1F51 },
+{ 0x1F52, 0x1F52, 0x1F52 },
+{ 0x1F53, 0x1F5B, 0x1F53 },
+{ 0x1F54, 0x1F54, 0x1F54 },
+{ 0x1F55, 0x1F5D, 0x1F55 },
+{ 0x1F56, 0x1F56, 0x1F56 },
+{ 0x1F57, 0x1F5F, 0x1F57 },
+{ 0x1F59, 0x1F59, 0x1F51 },
+{ 0x1F5B, 0x1F5B, 0x1F53 },
+{ 0x1F5D, 0x1F5D, 0x1F55 },
+{ 0x1F5F, 0x1F5F, 0x1F57 },
+{ 0x1F60, 0x1F68, 0x1F60 },
+{ 0x1F61, 0x1F69, 0x1F61 },
+{ 0x1F62, 0x1F6A, 0x1F62 },
+{ 0x1F63, 0x1F6B, 0x1F63 },
+{ 0x1F64, 0x1F6C, 0x1F64 },
+{ 0x1F65, 0x1F6D, 0x1F65 },
+{ 0x1F66, 0x1F6E, 0x1F66 },
+{ 0x1F67, 0x1F6F, 0x1F67 },
+{ 0x1F68, 0x1F68, 0x1F60 },
+{ 0x1F69, 0x1F69, 0x1F61 },
+{ 0x1F6A, 0x1F6A, 0x1F62 },
+{ 0x1F6B, 0x1F6B, 0x1F63 },
+{ 0x1F6C, 0x1F6C, 0x1F64 },
+{ 0x1F6D, 0x1F6D, 0x1F65 },
+{ 0x1F6E, 0x1F6E, 0x1F66 },
+{ 0x1F6F, 0x1F6F, 0x1F67 },
+{ 0x1F70, 0x1FBA, 0x1F70 },
+{ 0x1F71, 0x1FBB, 0x1F71 },
+{ 0x1F72, 0x1FC8, 0x1F72 },
+{ 0x1F73, 0x1FC9, 0x1F73 },
+{ 0x1F74, 0x1FCA, 0x1F74 },
+{ 0x1F75, 0x1FCB, 0x1F75 },
+{ 0x1F76, 0x1FDA, 0x1F76 },
+{ 0x1F77, 0x1FDB, 0x1F77 },
+{ 0x1F78, 0x1FF8, 0x1F78 },
+{ 0x1F79, 0x1FF9, 0x1F79 },
+{ 0x1F7A, 0x1FEA, 0x1F7A },
+{ 0x1F7B, 0x1FEB, 0x1F7B },
+{ 0x1F7C, 0x1FFA, 0x1F7C },
+{ 0x1F7D, 0x1FFB, 0x1F7D },
+{ 0x1F80, 0x1F88, 0x1F80 },
+{ 0x1F81, 0x1F89, 0x1F81 },
+{ 0x1F82, 0x1F8A, 0x1F82 },
+{ 0x1F83, 0x1F8B, 0x1F83 },
+{ 0x1F84, 0x1F8C, 0x1F84 },
+{ 0x1F85, 0x1F8D, 0x1F85 },
+{ 0x1F86, 0x1F8E, 0x1F86 },
+{ 0x1F87, 0x1F8F, 0x1F87 },
+{ 0x1F88, 0x1F88, 0x1F80 },
+{ 0x1F89, 0x1F89, 0x1F81 },
+{ 0x1F8A, 0x1F8A, 0x1F82 },
+{ 0x1F8B, 0x1F8B, 0x1F83 },
+{ 0x1F8C, 0x1F8C, 0x1F84 },
+{ 0x1F8D, 0x1F8D, 0x1F85 },
+{ 0x1F8E, 0x1F8E, 0x1F86 },
+{ 0x1F8F, 0x1F8F, 0x1F87 },
+{ 0x1F90, 0x1F98, 0x1F90 },
+{ 0x1F91, 0x1F99, 0x1F91 },
+{ 0x1F92, 0x1F9A, 0x1F92 },
+{ 0x1F93, 0x1F9B, 0x1F93 },
+{ 0x1F94, 0x1F9C, 0x1F94 },
+{ 0x1F95, 0x1F9D, 0x1F95 },
+{ 0x1F96, 0x1F9E, 0x1F96 },
+{ 0x1F97, 0x1F9F, 0x1F97 },
+{ 0x1F98, 0x1F98, 0x1F90 },
+{ 0x1F99, 0x1F99, 0x1F91 },
+{ 0x1F9A, 0x1F9A, 0x1F92 },
+{ 0x1F9B, 0x1F9B, 0x1F93 },
+{ 0x1F9C, 0x1F9C, 0x1F94 },
+{ 0x1F9D, 0x1F9D, 0x1F95 },
+{ 0x1F9E, 0x1F9E, 0x1F96 },
+{ 0x1F9F, 0x1F9F, 0x1F97 },
+{ 0x1FA0, 0x1FA8, 0x1FA0 },
+{ 0x1FA1, 0x1FA9, 0x1FA1 },
+{ 0x1FA2, 0x1FAA, 0x1FA2 },
+{ 0x1FA3, 0x1FAB, 0x1FA3 },
+{ 0x1FA4, 0x1FAC, 0x1FA4 },
+{ 0x1FA5, 0x1FAD, 0x1FA5 },
+{ 0x1FA6, 0x1FAE, 0x1FA6 },
+{ 0x1FA7, 0x1FAF, 0x1FA7 },
+{ 0x1FA8, 0x1FA8, 0x1FA0 },
+{ 0x1FA9, 0x1FA9, 0x1FA1 },
+{ 0x1FAA, 0x1FAA, 0x1FA2 },
+{ 0x1FAB, 0x1FAB, 0x1FA3 },
+{ 0x1FAC, 0x1FAC, 0x1FA4 },
+{ 0x1FAD, 0x1FAD, 0x1FA5 },
+{ 0x1FAE, 0x1FAE, 0x1FA6 },
+{ 0x1FAF, 0x1FAF, 0x1FA7 },
+{ 0x1FB0, 0x1FB8, 0x1FB0 },
+{ 0x1FB1, 0x1FB9, 0x1FB1 },
+{ 0x1FB2, 0x1FB2, 0x1FB2 },
+{ 0x1FB3, 0x1FBC, 0x1FB3 },
+{ 0x1FB4, 0x1FB4, 0x1FB4 },
+{ 0x1FB6, 0x1FB6, 0x1FB6 },
+{ 0x1FB7, 0x1FB7, 0x1FB7 },
+{ 0x1FB8, 0x1FB8, 0x1FB0 },
+{ 0x1FB9, 0x1FB9, 0x1FB1 },
+{ 0x1FBA, 0x1FBA, 0x1F70 },
+{ 0x1FBB, 0x1FBB, 0x1F71 },
+{ 0x1FBC, 0x1FBC, 0x1FB3 },
+{ 0x1FBE, 0x0399, 0x1FBE },
+{ 0x1FC2, 0x1FC2, 0x1FC2 },
+{ 0x1FC3, 0x1FCC, 0x1FC3 },
+{ 0x1FC4, 0x1FC4, 0x1FC4 },
+{ 0x1FC6, 0x1FC6, 0x1FC6 },
+{ 0x1FC7, 0x1FC7, 0x1FC7 },
+{ 0x1FC8, 0x1FC8, 0x1F72 },
+{ 0x1FC9, 0x1FC9, 0x1F73 },
+{ 0x1FCA, 0x1FCA, 0x1F74 },
+{ 0x1FCB, 0x1FCB, 0x1F75 },
+{ 0x1FCC, 0x1FCC, 0x1FC3 },
+{ 0x1FD0, 0x1FD8, 0x1FD0 },
+{ 0x1FD1, 0x1FD9, 0x1FD1 },
+{ 0x1FD2, 0x1FD2, 0x1FD2 },
+{ 0x1FD3, 0x1FD3, 0x1FD3 },
+{ 0x1FD6, 0x1FD6, 0x1FD6 },
+{ 0x1FD7, 0x1FD7, 0x1FD7 },
+{ 0x1FD8, 0x1FD8, 0x1FD0 },
+{ 0x1FD9, 0x1FD9, 0x1FD1 },
+{ 0x1FDA, 0x1FDA, 0x1F76 },
+{ 0x1FDB, 0x1FDB, 0x1F77 },
+{ 0x1FE0, 0x1FE8, 0x1FE0 },
+{ 0x1FE1, 0x1FE9, 0x1FE1 },
+{ 0x1FE2, 0x1FE2, 0x1FE2 },
+{ 0x1FE3, 0x1FE3, 0x1FE3 },
+{ 0x1FE4, 0x1FE4, 0x1FE4 },
+{ 0x1FE5, 0x1FEC, 0x1FE5 },
+{ 0x1FE6, 0x1FE6, 0x1FE6 },
+{ 0x1FE7, 0x1FE7, 0x1FE7 },
+{ 0x1FE8, 0x1FE8, 0x1FE0 },
+{ 0x1FE9, 0x1FE9, 0x1FE1 },
+{ 0x1FEA, 0x1FEA, 0x1F7A },
+{ 0x1FEB, 0x1FEB, 0x1F7B },
+{ 0x1FEC, 0x1FEC, 0x1FE5 },
+{ 0x1FF2, 0x1FF2, 0x1FF2 },
+{ 0x1FF3, 0x1FFC, 0x1FF3 },
+{ 0x1FF4, 0x1FF4, 0x1FF4 },
+{ 0x1FF6, 0x1FF6, 0x1FF6 },
+{ 0x1FF7, 0x1FF7, 0x1FF7 },
+{ 0x1FF8, 0x1FF8, 0x1F78 },
+{ 0x1FF9, 0x1FF9, 0x1F79 },
+{ 0x1FFA, 0x1FFA, 0x1F7C },
+{ 0x1FFB, 0x1FFB, 0x1F7D },
+{ 0x1FFC, 0x1FFC, 0x1FF3 },
+{ 0x2071, 0x2071, 0x2071 },
+{ 0x207F, 0x207F, 0x207F },
+{ 0x2090, 0x2090, 0x2090 },
+{ 0x2091, 0x2091, 0x2091 },
+{ 0x2092, 0x2092, 0x2092 },
+{ 0x2093, 0x2093, 0x2093 },
+{ 0x2094, 0x2094, 0x2094 },
+{ 0x20D0, 0x20D0, 0x20D0 },
+{ 0x20D1, 0x20D1, 0x20D1 },
+{ 0x20D2, 0x20D2, 0x20D2 },
+{ 0x20D3, 0x20D3, 0x20D3 },
+{ 0x20D4, 0x20D4, 0x20D4 },
+{ 0x20D5, 0x20D5, 0x20D5 },
+{ 0x20D6, 0x20D6, 0x20D6 },
+{ 0x20D7, 0x20D7, 0x20D7 },
+{ 0x20D8, 0x20D8, 0x20D8 },
+{ 0x20D9, 0x20D9, 0x20D9 },
+{ 0x20DA, 0x20DA, 0x20DA },
+{ 0x20DB, 0x20DB, 0x20DB },
+{ 0x20DC, 0x20DC, 0x20DC },
+{ 0x20E1, 0x20E1, 0x20E1 },
+{ 0x20E5, 0x20E5, 0x20E5 },
+{ 0x20E6, 0x20E6, 0x20E6 },
+{ 0x20E7, 0x20E7, 0x20E7 },
+{ 0x20E8, 0x20E8, 0x20E8 },
+{ 0x20E9, 0x20E9, 0x20E9 },
+{ 0x20EA, 0x20EA, 0x20EA },
+{ 0x20EB, 0x20EB, 0x20EB },
+{ 0x2102, 0x2102, 0x2102 },
+{ 0x2107, 0x2107, 0x2107 },
+{ 0x210A, 0x210A, 0x210A },
+{ 0x210B, 0x210B, 0x210B },
+{ 0x210C, 0x210C, 0x210C },
+{ 0x210D, 0x210D, 0x210D },
+{ 0x210E, 0x210E, 0x210E },
+{ 0x210F, 0x210F, 0x210F },
+{ 0x2110, 0x2110, 0x2110 },
+{ 0x2111, 0x2111, 0x2111 },
+{ 0x2112, 0x2112, 0x2112 },
+{ 0x2113, 0x2113, 0x2113 },
+{ 0x2115, 0x2115, 0x2115 },
+{ 0x2119, 0x2119, 0x2119 },
+{ 0x211A, 0x211A, 0x211A },
+{ 0x211B, 0x211B, 0x211B },
+{ 0x211C, 0x211C, 0x211C },
+{ 0x211D, 0x211D, 0x211D },
+{ 0x2124, 0x2124, 0x2124 },
+{ 0x2126, 0x2126, 0x03C9 },
+{ 0x2128, 0x2128, 0x2128 },
+{ 0x212A, 0x212A, 0x006B },
+{ 0x212B, 0x212B, 0x00E5 },
+{ 0x212C, 0x212C, 0x212C },
+{ 0x212D, 0x212D, 0x212D },
+{ 0x212F, 0x212F, 0x212F },
+{ 0x2130, 0x2130, 0x2130 },
+{ 0x2131, 0x2131, 0x2131 },
+{ 0x2133, 0x2133, 0x2133 },
+{ 0x2134, 0x2134, 0x2134 },
+{ 0x2135, 0x2135, 0x2135 },
+{ 0x2136, 0x2136, 0x2136 },
+{ 0x2137, 0x2137, 0x2137 },
+{ 0x2138, 0x2138, 0x2138 },
+{ 0x2139, 0x2139, 0x2139 },
+{ 0x213C, 0x213C, 0x213C },
+{ 0x213D, 0x213D, 0x213D },
+{ 0x213E, 0x213E, 0x213E },
+{ 0x213F, 0x213F, 0x213F },
+{ 0x2145, 0x2145, 0x2145 },
+{ 0x2146, 0x2146, 0x2146 },
+{ 0x2147, 0x2147, 0x2147 },
+{ 0x2148, 0x2148, 0x2148 },
+{ 0x2149, 0x2149, 0x2149 },
+{ 0x2C00, 0x2C00, 0x2C30 },
+{ 0x2C01, 0x2C01, 0x2C31 },
+{ 0x2C02, 0x2C02, 0x2C32 },
+{ 0x2C03, 0x2C03, 0x2C33 },
+{ 0x2C04, 0x2C04, 0x2C34 },
+{ 0x2C05, 0x2C05, 0x2C35 },
+{ 0x2C06, 0x2C06, 0x2C36 },
+{ 0x2C07, 0x2C07, 0x2C37 },
+{ 0x2C08, 0x2C08, 0x2C38 },
+{ 0x2C09, 0x2C09, 0x2C39 },
+{ 0x2C0A, 0x2C0A, 0x2C3A },
+{ 0x2C0B, 0x2C0B, 0x2C3B },
+{ 0x2C0C, 0x2C0C, 0x2C3C },
+{ 0x2C0D, 0x2C0D, 0x2C3D },
+{ 0x2C0E, 0x2C0E, 0x2C3E },
+{ 0x2C0F, 0x2C0F, 0x2C3F },
+{ 0x2C10, 0x2C10, 0x2C40 },
+{ 0x2C11, 0x2C11, 0x2C41 },
+{ 0x2C12, 0x2C12, 0x2C42 },
+{ 0x2C13, 0x2C13, 0x2C43 },
+{ 0x2C14, 0x2C14, 0x2C44 },
+{ 0x2C15, 0x2C15, 0x2C45 },
+{ 0x2C16, 0x2C16, 0x2C46 },
+{ 0x2C17, 0x2C17, 0x2C47 },
+{ 0x2C18, 0x2C18, 0x2C48 },
+{ 0x2C19, 0x2C19, 0x2C49 },
+{ 0x2C1A, 0x2C1A, 0x2C4A },
+{ 0x2C1B, 0x2C1B, 0x2C4B },
+{ 0x2C1C, 0x2C1C, 0x2C4C },
+{ 0x2C1D, 0x2C1D, 0x2C4D },
+{ 0x2C1E, 0x2C1E, 0x2C4E },
+{ 0x2C1F, 0x2C1F, 0x2C4F },
+{ 0x2C20, 0x2C20, 0x2C50 },
+{ 0x2C21, 0x2C21, 0x2C51 },
+{ 0x2C22, 0x2C22, 0x2C52 },
+{ 0x2C23, 0x2C23, 0x2C53 },
+{ 0x2C24, 0x2C24, 0x2C54 },
+{ 0x2C25, 0x2C25, 0x2C55 },
+{ 0x2C26, 0x2C26, 0x2C56 },
+{ 0x2C27, 0x2C27, 0x2C57 },
+{ 0x2C28, 0x2C28, 0x2C58 },
+{ 0x2C29, 0x2C29, 0x2C59 },
+{ 0x2C2A, 0x2C2A, 0x2C5A },
+{ 0x2C2B, 0x2C2B, 0x2C5B },
+{ 0x2C2C, 0x2C2C, 0x2C5C },
+{ 0x2C2D, 0x2C2D, 0x2C5D },
+{ 0x2C2E, 0x2C2E, 0x2C5E },
+{ 0x2C30, 0x2C00, 0x2C30 },
+{ 0x2C31, 0x2C01, 0x2C31 },
+{ 0x2C32, 0x2C02, 0x2C32 },
+{ 0x2C33, 0x2C03, 0x2C33 },
+{ 0x2C34, 0x2C04, 0x2C34 },
+{ 0x2C35, 0x2C05, 0x2C35 },
+{ 0x2C36, 0x2C06, 0x2C36 },
+{ 0x2C37, 0x2C07, 0x2C37 },
+{ 0x2C38, 0x2C08, 0x2C38 },
+{ 0x2C39, 0x2C09, 0x2C39 },
+{ 0x2C3A, 0x2C0A, 0x2C3A },
+{ 0x2C3B, 0x2C0B, 0x2C3B },
+{ 0x2C3C, 0x2C0C, 0x2C3C },
+{ 0x2C3D, 0x2C0D, 0x2C3D },
+{ 0x2C3E, 0x2C0E, 0x2C3E },
+{ 0x2C3F, 0x2C0F, 0x2C3F },
+{ 0x2C40, 0x2C10, 0x2C40 },
+{ 0x2C41, 0x2C11, 0x2C41 },
+{ 0x2C42, 0x2C12, 0x2C42 },
+{ 0x2C43, 0x2C13, 0x2C43 },
+{ 0x2C44, 0x2C14, 0x2C44 },
+{ 0x2C45, 0x2C15, 0x2C45 },
+{ 0x2C46, 0x2C16, 0x2C46 },
+{ 0x2C47, 0x2C17, 0x2C47 },
+{ 0x2C48, 0x2C18, 0x2C48 },
+{ 0x2C49, 0x2C19, 0x2C49 },
+{ 0x2C4A, 0x2C1A, 0x2C4A },
+{ 0x2C4B, 0x2C1B, 0x2C4B },
+{ 0x2C4C, 0x2C1C, 0x2C4C },
+{ 0x2C4D, 0x2C1D, 0x2C4D },
+{ 0x2C4E, 0x2C1E, 0x2C4E },
+{ 0x2C4F, 0x2C1F, 0x2C4F },
+{ 0x2C50, 0x2C20, 0x2C50 },
+{ 0x2C51, 0x2C21, 0x2C51 },
+{ 0x2C52, 0x2C22, 0x2C52 },
+{ 0x2C53, 0x2C23, 0x2C53 },
+{ 0x2C54, 0x2C24, 0x2C54 },
+{ 0x2C55, 0x2C25, 0x2C55 },
+{ 0x2C56, 0x2C26, 0x2C56 },
+{ 0x2C57, 0x2C27, 0x2C57 },
+{ 0x2C58, 0x2C28, 0x2C58 },
+{ 0x2C59, 0x2C29, 0x2C59 },
+{ 0x2C5A, 0x2C2A, 0x2C5A },
+{ 0x2C5B, 0x2C2B, 0x2C5B },
+{ 0x2C5C, 0x2C2C, 0x2C5C },
+{ 0x2C5D, 0x2C2D, 0x2C5D },
+{ 0x2C5E, 0x2C2E, 0x2C5E },
+{ 0x2C80, 0x2C80, 0x2C81 },
+{ 0x2C81, 0x2C80, 0x2C81 },
+{ 0x2C82, 0x2C82, 0x2C83 },
+{ 0x2C83, 0x2C82, 0x2C83 },
+{ 0x2C84, 0x2C84, 0x2C85 },
+{ 0x2C85, 0x2C84, 0x2C85 },
+{ 0x2C86, 0x2C86, 0x2C87 },
+{ 0x2C87, 0x2C86, 0x2C87 },
+{ 0x2C88, 0x2C88, 0x2C89 },
+{ 0x2C89, 0x2C88, 0x2C89 },
+{ 0x2C8A, 0x2C8A, 0x2C8B },
+{ 0x2C8B, 0x2C8A, 0x2C8B },
+{ 0x2C8C, 0x2C8C, 0x2C8D },
+{ 0x2C8D, 0x2C8C, 0x2C8D },
+{ 0x2C8E, 0x2C8E, 0x2C8F },
+{ 0x2C8F, 0x2C8E, 0x2C8F },
+{ 0x2C90, 0x2C90, 0x2C91 },
+{ 0x2C91, 0x2C90, 0x2C91 },
+{ 0x2C92, 0x2C92, 0x2C93 },
+{ 0x2C93, 0x2C92, 0x2C93 },
+{ 0x2C94, 0x2C94, 0x2C95 },
+{ 0x2C95, 0x2C94, 0x2C95 },
+{ 0x2C96, 0x2C96, 0x2C97 },
+{ 0x2C97, 0x2C96, 0x2C97 },
+{ 0x2C98, 0x2C98, 0x2C99 },
+{ 0x2C99, 0x2C98, 0x2C99 },
+{ 0x2C9A, 0x2C9A, 0x2C9B },
+{ 0x2C9B, 0x2C9A, 0x2C9B },
+{ 0x2C9C, 0x2C9C, 0x2C9D },
+{ 0x2C9D, 0x2C9C, 0x2C9D },
+{ 0x2C9E, 0x2C9E, 0x2C9F },
+{ 0x2C9F, 0x2C9E, 0x2C9F },
+{ 0x2CA0, 0x2CA0, 0x2CA1 },
+{ 0x2CA1, 0x2CA0, 0x2CA1 },
+{ 0x2CA2, 0x2CA2, 0x2CA3 },
+{ 0x2CA3, 0x2CA2, 0x2CA3 },
+{ 0x2CA4, 0x2CA4, 0x2CA5 },
+{ 0x2CA5, 0x2CA4, 0x2CA5 },
+{ 0x2CA6, 0x2CA6, 0x2CA7 },
+{ 0x2CA7, 0x2CA6, 0x2CA7 },
+{ 0x2CA8, 0x2CA8, 0x2CA9 },
+{ 0x2CA9, 0x2CA8, 0x2CA9 },
+{ 0x2CAA, 0x2CAA, 0x2CAB },
+{ 0x2CAB, 0x2CAA, 0x2CAB },
+{ 0x2CAC, 0x2CAC, 0x2CAD },
+{ 0x2CAD, 0x2CAC, 0x2CAD },
+{ 0x2CAE, 0x2CAE, 0x2CAF },
+{ 0x2CAF, 0x2CAE, 0x2CAF },
+{ 0x2CB0, 0x2CB0, 0x2CB1 },
+{ 0x2CB1, 0x2CB0, 0x2CB1 },
+{ 0x2CB2, 0x2CB2, 0x2CB3 },
+{ 0x2CB3, 0x2CB2, 0x2CB3 },
+{ 0x2CB4, 0x2CB4, 0x2CB5 },
+{ 0x2CB5, 0x2CB4, 0x2CB5 },
+{ 0x2CB6, 0x2CB6, 0x2CB7 },
+{ 0x2CB7, 0x2CB6, 0x2CB7 },
+{ 0x2CB8, 0x2CB8, 0x2CB9 },
+{ 0x2CB9, 0x2CB8, 0x2CB9 },
+{ 0x2CBA, 0x2CBA, 0x2CBB },
+{ 0x2CBB, 0x2CBA, 0x2CBB },
+{ 0x2CBC, 0x2CBC, 0x2CBD },
+{ 0x2CBD, 0x2CBC, 0x2CBD },
+{ 0x2CBE, 0x2CBE, 0x2CBF },
+{ 0x2CBF, 0x2CBE, 0x2CBF },
+{ 0x2CC0, 0x2CC0, 0x2CC1 },
+{ 0x2CC1, 0x2CC0, 0x2CC1 },
+{ 0x2CC2, 0x2CC2, 0x2CC3 },
+{ 0x2CC3, 0x2CC2, 0x2CC3 },
+{ 0x2CC4, 0x2CC4, 0x2CC5 },
+{ 0x2CC5, 0x2CC4, 0x2CC5 },
+{ 0x2CC6, 0x2CC6, 0x2CC7 },
+{ 0x2CC7, 0x2CC6, 0x2CC7 },
+{ 0x2CC8, 0x2CC8, 0x2CC9 },
+{ 0x2CC9, 0x2CC8, 0x2CC9 },
+{ 0x2CCA, 0x2CCA, 0x2CCB },
+{ 0x2CCB, 0x2CCA, 0x2CCB },
+{ 0x2CCC, 0x2CCC, 0x2CCD },
+{ 0x2CCD, 0x2CCC, 0x2CCD },
+{ 0x2CCE, 0x2CCE, 0x2CCF },
+{ 0x2CCF, 0x2CCE, 0x2CCF },
+{ 0x2CD0, 0x2CD0, 0x2CD1 },
+{ 0x2CD1, 0x2CD0, 0x2CD1 },
+{ 0x2CD2, 0x2CD2, 0x2CD3 },
+{ 0x2CD3, 0x2CD2, 0x2CD3 },
+{ 0x2CD4, 0x2CD4, 0x2CD5 },
+{ 0x2CD5, 0x2CD4, 0x2CD5 },
+{ 0x2CD6, 0x2CD6, 0x2CD7 },
+{ 0x2CD7, 0x2CD6, 0x2CD7 },
+{ 0x2CD8, 0x2CD8, 0x2CD9 },
+{ 0x2CD9, 0x2CD8, 0x2CD9 },
+{ 0x2CDA, 0x2CDA, 0x2CDB },
+{ 0x2CDB, 0x2CDA, 0x2CDB },
+{ 0x2CDC, 0x2CDC, 0x2CDD },
+{ 0x2CDD, 0x2CDC, 0x2CDD },
+{ 0x2CDE, 0x2CDE, 0x2CDF },
+{ 0x2CDF, 0x2CDE, 0x2CDF },
+{ 0x2CE0, 0x2CE0, 0x2CE1 },
+{ 0x2CE1, 0x2CE0, 0x2CE1 },
+{ 0x2CE2, 0x2CE2, 0x2CE3 },
+{ 0x2CE3, 0x2CE2, 0x2CE3 },
+{ 0x2CE4, 0x2CE4, 0x2CE4 },
+{ 0x2D00, 0x10A0, 0x2D00 },
+{ 0x2D01, 0x10A1, 0x2D01 },
+{ 0x2D02, 0x10A2, 0x2D02 },
+{ 0x2D03, 0x10A3, 0x2D03 },
+{ 0x2D04, 0x10A4, 0x2D04 },
+{ 0x2D05, 0x10A5, 0x2D05 },
+{ 0x2D06, 0x10A6, 0x2D06 },
+{ 0x2D07, 0x10A7, 0x2D07 },
+{ 0x2D08, 0x10A8, 0x2D08 },
+{ 0x2D09, 0x10A9, 0x2D09 },
+{ 0x2D0A, 0x10AA, 0x2D0A },
+{ 0x2D0B, 0x10AB, 0x2D0B },
+{ 0x2D0C, 0x10AC, 0x2D0C },
+{ 0x2D0D, 0x10AD, 0x2D0D },
+{ 0x2D0E, 0x10AE, 0x2D0E },
+{ 0x2D0F, 0x10AF, 0x2D0F },
+{ 0x2D10, 0x10B0, 0x2D10 },
+{ 0x2D11, 0x10B1, 0x2D11 },
+{ 0x2D12, 0x10B2, 0x2D12 },
+{ 0x2D13, 0x10B3, 0x2D13 },
+{ 0x2D14, 0x10B4, 0x2D14 },
+{ 0x2D15, 0x10B5, 0x2D15 },
+{ 0x2D16, 0x10B6, 0x2D16 },
+{ 0x2D17, 0x10B7, 0x2D17 },
+{ 0x2D18, 0x10B8, 0x2D18 },
+{ 0x2D19, 0x10B9, 0x2D19 },
+{ 0x2D1A, 0x10BA, 0x2D1A },
+{ 0x2D1B, 0x10BB, 0x2D1B },
+{ 0x2D1C, 0x10BC, 0x2D1C },
+{ 0x2D1D, 0x10BD, 0x2D1D },
+{ 0x2D1E, 0x10BE, 0x2D1E },
+{ 0x2D1F, 0x10BF, 0x2D1F },
+{ 0x2D20, 0x10C0, 0x2D20 },
+{ 0x2D21, 0x10C1, 0x2D21 },
+{ 0x2D22, 0x10C2, 0x2D22 },
+{ 0x2D23, 0x10C3, 0x2D23 },
+{ 0x2D24, 0x10C4, 0x2D24 },
+{ 0x2D25, 0x10C5, 0x2D25 },
+{ 0x2D30, 0x2D30, 0x2D30 },
+{ 0x2D31, 0x2D31, 0x2D31 },
+{ 0x2D32, 0x2D32, 0x2D32 },
+{ 0x2D33, 0x2D33, 0x2D33 },
+{ 0x2D34, 0x2D34, 0x2D34 },
+{ 0x2D35, 0x2D35, 0x2D35 },
+{ 0x2D36, 0x2D36, 0x2D36 },
+{ 0x2D37, 0x2D37, 0x2D37 },
+{ 0x2D38, 0x2D38, 0x2D38 },
+{ 0x2D39, 0x2D39, 0x2D39 },
+{ 0x2D3A, 0x2D3A, 0x2D3A },
+{ 0x2D3B, 0x2D3B, 0x2D3B },
+{ 0x2D3C, 0x2D3C, 0x2D3C },
+{ 0x2D3D, 0x2D3D, 0x2D3D },
+{ 0x2D3E, 0x2D3E, 0x2D3E },
+{ 0x2D3F, 0x2D3F, 0x2D3F },
+{ 0x2D40, 0x2D40, 0x2D40 },
+{ 0x2D41, 0x2D41, 0x2D41 },
+{ 0x2D42, 0x2D42, 0x2D42 },
+{ 0x2D43, 0x2D43, 0x2D43 },
+{ 0x2D44, 0x2D44, 0x2D44 },
+{ 0x2D45, 0x2D45, 0x2D45 },
+{ 0x2D46, 0x2D46, 0x2D46 },
+{ 0x2D47, 0x2D47, 0x2D47 },
+{ 0x2D48, 0x2D48, 0x2D48 },
+{ 0x2D49, 0x2D49, 0x2D49 },
+{ 0x2D4A, 0x2D4A, 0x2D4A },
+{ 0x2D4B, 0x2D4B, 0x2D4B },
+{ 0x2D4C, 0x2D4C, 0x2D4C },
+{ 0x2D4D, 0x2D4D, 0x2D4D },
+{ 0x2D4E, 0x2D4E, 0x2D4E },
+{ 0x2D4F, 0x2D4F, 0x2D4F },
+{ 0x2D50, 0x2D50, 0x2D50 },
+{ 0x2D51, 0x2D51, 0x2D51 },
+{ 0x2D52, 0x2D52, 0x2D52 },
+{ 0x2D53, 0x2D53, 0x2D53 },
+{ 0x2D54, 0x2D54, 0x2D54 },
+{ 0x2D55, 0x2D55, 0x2D55 },
+{ 0x2D56, 0x2D56, 0x2D56 },
+{ 0x2D57, 0x2D57, 0x2D57 },
+{ 0x2D58, 0x2D58, 0x2D58 },
+{ 0x2D59, 0x2D59, 0x2D59 },
+{ 0x2D5A, 0x2D5A, 0x2D5A },
+{ 0x2D5B, 0x2D5B, 0x2D5B },
+{ 0x2D5C, 0x2D5C, 0x2D5C },
+{ 0x2D5D, 0x2D5D, 0x2D5D },
+{ 0x2D5E, 0x2D5E, 0x2D5E },
+{ 0x2D5F, 0x2D5F, 0x2D5F },
+{ 0x2D60, 0x2D60, 0x2D60 },
+{ 0x2D61, 0x2D61, 0x2D61 },
+{ 0x2D62, 0x2D62, 0x2D62 },
+{ 0x2D63, 0x2D63, 0x2D63 },
+{ 0x2D64, 0x2D64, 0x2D64 },
+{ 0x2D65, 0x2D65, 0x2D65 },
+{ 0x2D6F, 0x2D6F, 0x2D6F },
+{ 0x2D80, 0x2D80, 0x2D80 },
+{ 0x2D81, 0x2D81, 0x2D81 },
+{ 0x2D82, 0x2D82, 0x2D82 },
+{ 0x2D83, 0x2D83, 0x2D83 },
+{ 0x2D84, 0x2D84, 0x2D84 },
+{ 0x2D85, 0x2D85, 0x2D85 },
+{ 0x2D86, 0x2D86, 0x2D86 },
+{ 0x2D87, 0x2D87, 0x2D87 },
+{ 0x2D88, 0x2D88, 0x2D88 },
+{ 0x2D89, 0x2D89, 0x2D89 },
+{ 0x2D8A, 0x2D8A, 0x2D8A },
+{ 0x2D8B, 0x2D8B, 0x2D8B },
+{ 0x2D8C, 0x2D8C, 0x2D8C },
+{ 0x2D8D, 0x2D8D, 0x2D8D },
+{ 0x2D8E, 0x2D8E, 0x2D8E },
+{ 0x2D8F, 0x2D8F, 0x2D8F },
+{ 0x2D90, 0x2D90, 0x2D90 },
+{ 0x2D91, 0x2D91, 0x2D91 },
+{ 0x2D92, 0x2D92, 0x2D92 },
+{ 0x2D93, 0x2D93, 0x2D93 },
+{ 0x2D94, 0x2D94, 0x2D94 },
+{ 0x2D95, 0x2D95, 0x2D95 },
+{ 0x2D96, 0x2D96, 0x2D96 },
+{ 0x2DA0, 0x2DA0, 0x2DA0 },
+{ 0x2DA1, 0x2DA1, 0x2DA1 },
+{ 0x2DA2, 0x2DA2, 0x2DA2 },
+{ 0x2DA3, 0x2DA3, 0x2DA3 },
+{ 0x2DA4, 0x2DA4, 0x2DA4 },
+{ 0x2DA5, 0x2DA5, 0x2DA5 },
+{ 0x2DA6, 0x2DA6, 0x2DA6 },
+{ 0x2DA8, 0x2DA8, 0x2DA8 },
+{ 0x2DA9, 0x2DA9, 0x2DA9 },
+{ 0x2DAA, 0x2DAA, 0x2DAA },
+{ 0x2DAB, 0x2DAB, 0x2DAB },
+{ 0x2DAC, 0x2DAC, 0x2DAC },
+{ 0x2DAD, 0x2DAD, 0x2DAD },
+{ 0x2DAE, 0x2DAE, 0x2DAE },
+{ 0x2DB0, 0x2DB0, 0x2DB0 },
+{ 0x2DB1, 0x2DB1, 0x2DB1 },
+{ 0x2DB2, 0x2DB2, 0x2DB2 },
+{ 0x2DB3, 0x2DB3, 0x2DB3 },
+{ 0x2DB4, 0x2DB4, 0x2DB4 },
+{ 0x2DB5, 0x2DB5, 0x2DB5 },
+{ 0x2DB6, 0x2DB6, 0x2DB6 },
+{ 0x2DB8, 0x2DB8, 0x2DB8 },
+{ 0x2DB9, 0x2DB9, 0x2DB9 },
+{ 0x2DBA, 0x2DBA, 0x2DBA },
+{ 0x2DBB, 0x2DBB, 0x2DBB },
+{ 0x2DBC, 0x2DBC, 0x2DBC },
+{ 0x2DBD, 0x2DBD, 0x2DBD },
+{ 0x2DBE, 0x2DBE, 0x2DBE },
+{ 0x2DC0, 0x2DC0, 0x2DC0 },
+{ 0x2DC1, 0x2DC1, 0x2DC1 },
+{ 0x2DC2, 0x2DC2, 0x2DC2 },
+{ 0x2DC3, 0x2DC3, 0x2DC3 },
+{ 0x2DC4, 0x2DC4, 0x2DC4 },
+{ 0x2DC5, 0x2DC5, 0x2DC5 },
+{ 0x2DC6, 0x2DC6, 0x2DC6 },
+{ 0x2DC8, 0x2DC8, 0x2DC8 },
+{ 0x2DC9, 0x2DC9, 0x2DC9 },
+{ 0x2DCA, 0x2DCA, 0x2DCA },
+{ 0x2DCB, 0x2DCB, 0x2DCB },
+{ 0x2DCC, 0x2DCC, 0x2DCC },
+{ 0x2DCD, 0x2DCD, 0x2DCD },
+{ 0x2DCE, 0x2DCE, 0x2DCE },
+{ 0x2DD0, 0x2DD0, 0x2DD0 },
+{ 0x2DD1, 0x2DD1, 0x2DD1 },
+{ 0x2DD2, 0x2DD2, 0x2DD2 },
+{ 0x2DD3, 0x2DD3, 0x2DD3 },
+{ 0x2DD4, 0x2DD4, 0x2DD4 },
+{ 0x2DD5, 0x2DD5, 0x2DD5 },
+{ 0x2DD6, 0x2DD6, 0x2DD6 },
+{ 0x2DD8, 0x2DD8, 0x2DD8 },
+{ 0x2DD9, 0x2DD9, 0x2DD9 },
+{ 0x2DDA, 0x2DDA, 0x2DDA },
+{ 0x2DDB, 0x2DDB, 0x2DDB },
+{ 0x2DDC, 0x2DDC, 0x2DDC },
+{ 0x2DDD, 0x2DDD, 0x2DDD },
+{ 0x2DDE, 0x2DDE, 0x2DDE },
+{ 0x3005, 0x3005, 0x3005 },
+{ 0x3006, 0x3006, 0x3006 },
+{ 0x302A, 0x302A, 0x302A },
+{ 0x302B, 0x302B, 0x302B },
+{ 0x302C, 0x302C, 0x302C },
+{ 0x302D, 0x302D, 0x302D },
+{ 0x302E, 0x302E, 0x302E },
+{ 0x302F, 0x302F, 0x302F },
+{ 0x3031, 0x3031, 0x3031 },
+{ 0x3032, 0x3032, 0x3032 },
+{ 0x3033, 0x3033, 0x3033 },
+{ 0x3034, 0x3034, 0x3034 },
+{ 0x3035, 0x3035, 0x3035 },
+{ 0x303B, 0x303B, 0x303B },
+{ 0x303C, 0x303C, 0x303C },
+{ 0x3041, 0x3041, 0x3041 },
+{ 0x3042, 0x3042, 0x3042 },
+{ 0x3043, 0x3043, 0x3043 },
+{ 0x3044, 0x3044, 0x3044 },
+{ 0x3045, 0x3045, 0x3045 },
+{ 0x3046, 0x3046, 0x3046 },
+{ 0x3047, 0x3047, 0x3047 },
+{ 0x3048, 0x3048, 0x3048 },
+{ 0x3049, 0x3049, 0x3049 },
+{ 0x304A, 0x304A, 0x304A },
+{ 0x304B, 0x304B, 0x304B },
+{ 0x304C, 0x304C, 0x304C },
+{ 0x304D, 0x304D, 0x304D },
+{ 0x304E, 0x304E, 0x304E },
+{ 0x304F, 0x304F, 0x304F },
+{ 0x3050, 0x3050, 0x3050 },
+{ 0x3051, 0x3051, 0x3051 },
+{ 0x3052, 0x3052, 0x3052 },
+{ 0x3053, 0x3053, 0x3053 },
+{ 0x3054, 0x3054, 0x3054 },
+{ 0x3055, 0x3055, 0x3055 },
+{ 0x3056, 0x3056, 0x3056 },
+{ 0x3057, 0x3057, 0x3057 },
+{ 0x3058, 0x3058, 0x3058 },
+{ 0x3059, 0x3059, 0x3059 },
+{ 0x305A, 0x305A, 0x305A },
+{ 0x305B, 0x305B, 0x305B },
+{ 0x305C, 0x305C, 0x305C },
+{ 0x305D, 0x305D, 0x305D },
+{ 0x305E, 0x305E, 0x305E },
+{ 0x305F, 0x305F, 0x305F },
+{ 0x3060, 0x3060, 0x3060 },
+{ 0x3061, 0x3061, 0x3061 },
+{ 0x3062, 0x3062, 0x3062 },
+{ 0x3063, 0x3063, 0x3063 },
+{ 0x3064, 0x3064, 0x3064 },
+{ 0x3065, 0x3065, 0x3065 },
+{ 0x3066, 0x3066, 0x3066 },
+{ 0x3067, 0x3067, 0x3067 },
+{ 0x3068, 0x3068, 0x3068 },
+{ 0x3069, 0x3069, 0x3069 },
+{ 0x306A, 0x306A, 0x306A },
+{ 0x306B, 0x306B, 0x306B },
+{ 0x306C, 0x306C, 0x306C },
+{ 0x306D, 0x306D, 0x306D },
+{ 0x306E, 0x306E, 0x306E },
+{ 0x306F, 0x306F, 0x306F },
+{ 0x3070, 0x3070, 0x3070 },
+{ 0x3071, 0x3071, 0x3071 },
+{ 0x3072, 0x3072, 0x3072 },
+{ 0x3073, 0x3073, 0x3073 },
+{ 0x3074, 0x3074, 0x3074 },
+{ 0x3075, 0x3075, 0x3075 },
+{ 0x3076, 0x3076, 0x3076 },
+{ 0x3077, 0x3077, 0x3077 },
+{ 0x3078, 0x3078, 0x3078 },
+{ 0x3079, 0x3079, 0x3079 },
+{ 0x307A, 0x307A, 0x307A },
+{ 0x307B, 0x307B, 0x307B },
+{ 0x307C, 0x307C, 0x307C },
+{ 0x307D, 0x307D, 0x307D },
+{ 0x307E, 0x307E, 0x307E },
+{ 0x307F, 0x307F, 0x307F },
+{ 0x3080, 0x3080, 0x3080 },
+{ 0x3081, 0x3081, 0x3081 },
+{ 0x3082, 0x3082, 0x3082 },
+{ 0x3083, 0x3083, 0x3083 },
+{ 0x3084, 0x3084, 0x3084 },
+{ 0x3085, 0x3085, 0x3085 },
+{ 0x3086, 0x3086, 0x3086 },
+{ 0x3087, 0x3087, 0x3087 },
+{ 0x3088, 0x3088, 0x3088 },
+{ 0x3089, 0x3089, 0x3089 },
+{ 0x308A, 0x308A, 0x308A },
+{ 0x308B, 0x308B, 0x308B },
+{ 0x308C, 0x308C, 0x308C },
+{ 0x308D, 0x308D, 0x308D },
+{ 0x308E, 0x308E, 0x308E },
+{ 0x308F, 0x308F, 0x308F },
+{ 0x3090, 0x3090, 0x3090 },
+{ 0x3091, 0x3091, 0x3091 },
+{ 0x3092, 0x3092, 0x3092 },
+{ 0x3093, 0x3093, 0x3093 },
+{ 0x3094, 0x3094, 0x3094 },
+{ 0x3095, 0x3095, 0x3095 },
+{ 0x3096, 0x3096, 0x3096 },
+{ 0x3099, 0x3099, 0x3099 },
+{ 0x309A, 0x309A, 0x309A },
+{ 0x309D, 0x309D, 0x309D },
+{ 0x309E, 0x309E, 0x309E },
+{ 0x309F, 0x309F, 0x309F },
+{ 0x30A1, 0x30A1, 0x30A1 },
+{ 0x30A2, 0x30A2, 0x30A2 },
+{ 0x30A3, 0x30A3, 0x30A3 },
+{ 0x30A4, 0x30A4, 0x30A4 },
+{ 0x30A5, 0x30A5, 0x30A5 },
+{ 0x30A6, 0x30A6, 0x30A6 },
+{ 0x30A7, 0x30A7, 0x30A7 },
+{ 0x30A8, 0x30A8, 0x30A8 },
+{ 0x30A9, 0x30A9, 0x30A9 },
+{ 0x30AA, 0x30AA, 0x30AA },
+{ 0x30AB, 0x30AB, 0x30AB },
+{ 0x30AC, 0x30AC, 0x30AC },
+{ 0x30AD, 0x30AD, 0x30AD },
+{ 0x30AE, 0x30AE, 0x30AE },
+{ 0x30AF, 0x30AF, 0x30AF },
+{ 0x30B0, 0x30B0, 0x30B0 },
+{ 0x30B1, 0x30B1, 0x30B1 },
+{ 0x30B2, 0x30B2, 0x30B2 },
+{ 0x30B3, 0x30B3, 0x30B3 },
+{ 0x30B4, 0x30B4, 0x30B4 },
+{ 0x30B5, 0x30B5, 0x30B5 },
+{ 0x30B6, 0x30B6, 0x30B6 },
+{ 0x30B7, 0x30B7, 0x30B7 },
+{ 0x30B8, 0x30B8, 0x30B8 },
+{ 0x30B9, 0x30B9, 0x30B9 },
+{ 0x30BA, 0x30BA, 0x30BA },
+{ 0x30BB, 0x30BB, 0x30BB },
+{ 0x30BC, 0x30BC, 0x30BC },
+{ 0x30BD, 0x30BD, 0x30BD },
+{ 0x30BE, 0x30BE, 0x30BE },
+{ 0x30BF, 0x30BF, 0x30BF },
+{ 0x30C0, 0x30C0, 0x30C0 },
+{ 0x30C1, 0x30C1, 0x30C1 },
+{ 0x30C2, 0x30C2, 0x30C2 },
+{ 0x30C3, 0x30C3, 0x30C3 },
+{ 0x30C4, 0x30C4, 0x30C4 },
+{ 0x30C5, 0x30C5, 0x30C5 },
+{ 0x30C6, 0x30C6, 0x30C6 },
+{ 0x30C7, 0x30C7, 0x30C7 },
+{ 0x30C8, 0x30C8, 0x30C8 },
+{ 0x30C9, 0x30C9, 0x30C9 },
+{ 0x30CA, 0x30CA, 0x30CA },
+{ 0x30CB, 0x30CB, 0x30CB },
+{ 0x30CC, 0x30CC, 0x30CC },
+{ 0x30CD, 0x30CD, 0x30CD },
+{ 0x30CE, 0x30CE, 0x30CE },
+{ 0x30CF, 0x30CF, 0x30CF },
+{ 0x30D0, 0x30D0, 0x30D0 },
+{ 0x30D1, 0x30D1, 0x30D1 },
+{ 0x30D2, 0x30D2, 0x30D2 },
+{ 0x30D3, 0x30D3, 0x30D3 },
+{ 0x30D4, 0x30D4, 0x30D4 },
+{ 0x30D5, 0x30D5, 0x30D5 },
+{ 0x30D6, 0x30D6, 0x30D6 },
+{ 0x30D7, 0x30D7, 0x30D7 },
+{ 0x30D8, 0x30D8, 0x30D8 },
+{ 0x30D9, 0x30D9, 0x30D9 },
+{ 0x30DA, 0x30DA, 0x30DA },
+{ 0x30DB, 0x30DB, 0x30DB },
+{ 0x30DC, 0x30DC, 0x30DC },
+{ 0x30DD, 0x30DD, 0x30DD },
+{ 0x30DE, 0x30DE, 0x30DE },
+{ 0x30DF, 0x30DF, 0x30DF },
+{ 0x30E0, 0x30E0, 0x30E0 },
+{ 0x30E1, 0x30E1, 0x30E1 },
+{ 0x30E2, 0x30E2, 0x30E2 },
+{ 0x30E3, 0x30E3, 0x30E3 },
+{ 0x30E4, 0x30E4, 0x30E4 },
+{ 0x30E5, 0x30E5, 0x30E5 },
+{ 0x30E6, 0x30E6, 0x30E6 },
+{ 0x30E7, 0x30E7, 0x30E7 },
+{ 0x30E8, 0x30E8, 0x30E8 },
+{ 0x30E9, 0x30E9, 0x30E9 },
+{ 0x30EA, 0x30EA, 0x30EA },
+{ 0x30EB, 0x30EB, 0x30EB },
+{ 0x30EC, 0x30EC, 0x30EC },
+{ 0x30ED, 0x30ED, 0x30ED },
+{ 0x30EE, 0x30EE, 0x30EE },
+{ 0x30EF, 0x30EF, 0x30EF },
+{ 0x30F0, 0x30F0, 0x30F0 },
+{ 0x30F1, 0x30F1, 0x30F1 },
+{ 0x30F2, 0x30F2, 0x30F2 },
+{ 0x30F3, 0x30F3, 0x30F3 },
+{ 0x30F4, 0x30F4, 0x30F4 },
+{ 0x30F5, 0x30F5, 0x30F5 },
+{ 0x30F6, 0x30F6, 0x30F6 },
+{ 0x30F7, 0x30F7, 0x30F7 },
+{ 0x30F8, 0x30F8, 0x30F8 },
+{ 0x30F9, 0x30F9, 0x30F9 },
+{ 0x30FA, 0x30FA, 0x30FA },
+{ 0x30FC, 0x30FC, 0x30FC },
+{ 0x30FD, 0x30FD, 0x30FD },
+{ 0x30FE, 0x30FE, 0x30FE },
+{ 0x30FF, 0x30FF, 0x30FF },
+{ 0x3105, 0x3105, 0x3105 },
+{ 0x3106, 0x3106, 0x3106 },
+{ 0x3107, 0x3107, 0x3107 },
+{ 0x3108, 0x3108, 0x3108 },
+{ 0x3109, 0x3109, 0x3109 },
+{ 0x310A, 0x310A, 0x310A },
+{ 0x310B, 0x310B, 0x310B },
+{ 0x310C, 0x310C, 0x310C },
+{ 0x310D, 0x310D, 0x310D },
+{ 0x310E, 0x310E, 0x310E },
+{ 0x310F, 0x310F, 0x310F },
+{ 0x3110, 0x3110, 0x3110 },
+{ 0x3111, 0x3111, 0x3111 },
+{ 0x3112, 0x3112, 0x3112 },
+{ 0x3113, 0x3113, 0x3113 },
+{ 0x3114, 0x3114, 0x3114 },
+{ 0x3115, 0x3115, 0x3115 },
+{ 0x3116, 0x3116, 0x3116 },
+{ 0x3117, 0x3117, 0x3117 },
+{ 0x3118, 0x3118, 0x3118 },
+{ 0x3119, 0x3119, 0x3119 },
+{ 0x311A, 0x311A, 0x311A },
+{ 0x311B, 0x311B, 0x311B },
+{ 0x311C, 0x311C, 0x311C },
+{ 0x311D, 0x311D, 0x311D },
+{ 0x311E, 0x311E, 0x311E },
+{ 0x311F, 0x311F, 0x311F },
+{ 0x3120, 0x3120, 0x3120 },
+{ 0x3121, 0x3121, 0x3121 },
+{ 0x3122, 0x3122, 0x3122 },
+{ 0x3123, 0x3123, 0x3123 },
+{ 0x3124, 0x3124, 0x3124 },
+{ 0x3125, 0x3125, 0x3125 },
+{ 0x3126, 0x3126, 0x3126 },
+{ 0x3127, 0x3127, 0x3127 },
+{ 0x3128, 0x3128, 0x3128 },
+{ 0x3129, 0x3129, 0x3129 },
+{ 0x312A, 0x312A, 0x312A },
+{ 0x312B, 0x312B, 0x312B },
+{ 0x312C, 0x312C, 0x312C },
+{ 0x3131, 0x3131, 0x3131 },
+{ 0x3132, 0x3132, 0x3132 },
+{ 0x3133, 0x3133, 0x3133 },
+{ 0x3134, 0x3134, 0x3134 },
+{ 0x3135, 0x3135, 0x3135 },
+{ 0x3136, 0x3136, 0x3136 },
+{ 0x3137, 0x3137, 0x3137 },
+{ 0x3138, 0x3138, 0x3138 },
+{ 0x3139, 0x3139, 0x3139 },
+{ 0x313A, 0x313A, 0x313A },
+{ 0x313B, 0x313B, 0x313B },
+{ 0x313C, 0x313C, 0x313C },
+{ 0x313D, 0x313D, 0x313D },
+{ 0x313E, 0x313E, 0x313E },
+{ 0x313F, 0x313F, 0x313F },
+{ 0x3140, 0x3140, 0x3140 },
+{ 0x3141, 0x3141, 0x3141 },
+{ 0x3142, 0x3142, 0x3142 },
+{ 0x3143, 0x3143, 0x3143 },
+{ 0x3144, 0x3144, 0x3144 },
+{ 0x3145, 0x3145, 0x3145 },
+{ 0x3146, 0x3146, 0x3146 },
+{ 0x3147, 0x3147, 0x3147 },
+{ 0x3148, 0x3148, 0x3148 },
+{ 0x3149, 0x3149, 0x3149 },
+{ 0x314A, 0x314A, 0x314A },
+{ 0x314B, 0x314B, 0x314B },
+{ 0x314C, 0x314C, 0x314C },
+{ 0x314D, 0x314D, 0x314D },
+{ 0x314E, 0x314E, 0x314E },
+{ 0x314F, 0x314F, 0x314F },
+{ 0x3150, 0x3150, 0x3150 },
+{ 0x3151, 0x3151, 0x3151 },
+{ 0x3152, 0x3152, 0x3152 },
+{ 0x3153, 0x3153, 0x3153 },
+{ 0x3154, 0x3154, 0x3154 },
+{ 0x3155, 0x3155, 0x3155 },
+{ 0x3156, 0x3156, 0x3156 },
+{ 0x3157, 0x3157, 0x3157 },
+{ 0x3158, 0x3158, 0x3158 },
+{ 0x3159, 0x3159, 0x3159 },
+{ 0x315A, 0x315A, 0x315A },
+{ 0x315B, 0x315B, 0x315B },
+{ 0x315C, 0x315C, 0x315C },
+{ 0x315D, 0x315D, 0x315D },
+{ 0x315E, 0x315E, 0x315E },
+{ 0x315F, 0x315F, 0x315F },
+{ 0x3160, 0x3160, 0x3160 },
+{ 0x3161, 0x3161, 0x3161 },
+{ 0x3162, 0x3162, 0x3162 },
+{ 0x3163, 0x3163, 0x3163 },
+{ 0x3164, 0x3164, 0x3164 },
+{ 0x3165, 0x3165, 0x3165 },
+{ 0x3166, 0x3166, 0x3166 },
+{ 0x3167, 0x3167, 0x3167 },
+{ 0x3168, 0x3168, 0x3168 },
+{ 0x3169, 0x3169, 0x3169 },
+{ 0x316A, 0x316A, 0x316A },
+{ 0x316B, 0x316B, 0x316B },
+{ 0x316C, 0x316C, 0x316C },
+{ 0x316D, 0x316D, 0x316D },
+{ 0x316E, 0x316E, 0x316E },
+{ 0x316F, 0x316F, 0x316F },
+{ 0x3170, 0x3170, 0x3170 },
+{ 0x3171, 0x3171, 0x3171 },
+{ 0x3172, 0x3172, 0x3172 },
+{ 0x3173, 0x3173, 0x3173 },
+{ 0x3174, 0x3174, 0x3174 },
+{ 0x3175, 0x3175, 0x3175 },
+{ 0x3176, 0x3176, 0x3176 },
+{ 0x3177, 0x3177, 0x3177 },
+{ 0x3178, 0x3178, 0x3178 },
+{ 0x3179, 0x3179, 0x3179 },
+{ 0x317A, 0x317A, 0x317A },
+{ 0x317B, 0x317B, 0x317B },
+{ 0x317C, 0x317C, 0x317C },
+{ 0x317D, 0x317D, 0x317D },
+{ 0x317E, 0x317E, 0x317E },
+{ 0x317F, 0x317F, 0x317F },
+{ 0x3180, 0x3180, 0x3180 },
+{ 0x3181, 0x3181, 0x3181 },
+{ 0x3182, 0x3182, 0x3182 },
+{ 0x3183, 0x3183, 0x3183 },
+{ 0x3184, 0x3184, 0x3184 },
+{ 0x3185, 0x3185, 0x3185 },
+{ 0x3186, 0x3186, 0x3186 },
+{ 0x3187, 0x3187, 0x3187 },
+{ 0x3188, 0x3188, 0x3188 },
+{ 0x3189, 0x3189, 0x3189 },
+{ 0x318A, 0x318A, 0x318A },
+{ 0x318B, 0x318B, 0x318B },
+{ 0x318C, 0x318C, 0x318C },
+{ 0x318D, 0x318D, 0x318D },
+{ 0x318E, 0x318E, 0x318E },
+{ 0x31A0, 0x31A0, 0x31A0 },
+{ 0x31A1, 0x31A1, 0x31A1 },
+{ 0x31A2, 0x31A2, 0x31A2 },
+{ 0x31A3, 0x31A3, 0x31A3 },
+{ 0x31A4, 0x31A4, 0x31A4 },
+{ 0x31A5, 0x31A5, 0x31A5 },
+{ 0x31A6, 0x31A6, 0x31A6 },
+{ 0x31A7, 0x31A7, 0x31A7 },
+{ 0x31A8, 0x31A8, 0x31A8 },
+{ 0x31A9, 0x31A9, 0x31A9 },
+{ 0x31AA, 0x31AA, 0x31AA },
+{ 0x31AB, 0x31AB, 0x31AB },
+{ 0x31AC, 0x31AC, 0x31AC },
+{ 0x31AD, 0x31AD, 0x31AD },
+{ 0x31AE, 0x31AE, 0x31AE },
+{ 0x31AF, 0x31AF, 0x31AF },
+{ 0x31B0, 0x31B0, 0x31B0 },
+{ 0x31B1, 0x31B1, 0x31B1 },
+{ 0x31B2, 0x31B2, 0x31B2 },
+{ 0x31B3, 0x31B3, 0x31B3 },
+{ 0x31B4, 0x31B4, 0x31B4 },
+{ 0x31B5, 0x31B5, 0x31B5 },
+{ 0x31B6, 0x31B6, 0x31B6 },
+{ 0x31B7, 0x31B7, 0x31B7 },
+{ 0x31F0, 0x31F0, 0x31F0 },
+{ 0x31F1, 0x31F1, 0x31F1 },
+{ 0x31F2, 0x31F2, 0x31F2 },
+{ 0x31F3, 0x31F3, 0x31F3 },
+{ 0x31F4, 0x31F4, 0x31F4 },
+{ 0x31F5, 0x31F5, 0x31F5 },
+{ 0x31F6, 0x31F6, 0x31F6 },
+{ 0x31F7, 0x31F7, 0x31F7 },
+{ 0x31F8, 0x31F8, 0x31F8 },
+{ 0x31F9, 0x31F9, 0x31F9 },
+{ 0x31FA, 0x31FA, 0x31FA },
+{ 0x31FB, 0x31FB, 0x31FB },
+{ 0x31FC, 0x31FC, 0x31FC },
+{ 0x31FD, 0x31FD, 0x31FD },
+{ 0x31FE, 0x31FE, 0x31FE },
+{ 0x31FF, 0x31FF, 0x31FF },
+{ 0x3400, 0x3400, 0x3400 },
+{ 0x4DB5, 0x4DB5, 0x4DB5 },
+{ 0x4E00, 0x4E00, 0x4E00 },
+{ 0x9FBB, 0x9FBB, 0x9FBB },
+{ 0xA000, 0xA000, 0xA000 },
+{ 0xA001, 0xA001, 0xA001 },
+{ 0xA002, 0xA002, 0xA002 },
+{ 0xA003, 0xA003, 0xA003 },
+{ 0xA004, 0xA004, 0xA004 },
+{ 0xA005, 0xA005, 0xA005 },
+{ 0xA006, 0xA006, 0xA006 },
+{ 0xA007, 0xA007, 0xA007 },
+{ 0xA008, 0xA008, 0xA008 },
+{ 0xA009, 0xA009, 0xA009 },
+{ 0xA00A, 0xA00A, 0xA00A },
+{ 0xA00B, 0xA00B, 0xA00B },
+{ 0xA00C, 0xA00C, 0xA00C },
+{ 0xA00D, 0xA00D, 0xA00D },
+{ 0xA00E, 0xA00E, 0xA00E },
+{ 0xA00F, 0xA00F, 0xA00F },
+{ 0xA010, 0xA010, 0xA010 },
+{ 0xA011, 0xA011, 0xA011 },
+{ 0xA012, 0xA012, 0xA012 },
+{ 0xA013, 0xA013, 0xA013 },
+{ 0xA014, 0xA014, 0xA014 },
+{ 0xA015, 0xA015, 0xA015 },
+{ 0xA016, 0xA016, 0xA016 },
+{ 0xA017, 0xA017, 0xA017 },
+{ 0xA018, 0xA018, 0xA018 },
+{ 0xA019, 0xA019, 0xA019 },
+{ 0xA01A, 0xA01A, 0xA01A },
+{ 0xA01B, 0xA01B, 0xA01B },
+{ 0xA01C, 0xA01C, 0xA01C },
+{ 0xA01D, 0xA01D, 0xA01D },
+{ 0xA01E, 0xA01E, 0xA01E },
+{ 0xA01F, 0xA01F, 0xA01F },
+{ 0xA020, 0xA020, 0xA020 },
+{ 0xA021, 0xA021, 0xA021 },
+{ 0xA022, 0xA022, 0xA022 },
+{ 0xA023, 0xA023, 0xA023 },
+{ 0xA024, 0xA024, 0xA024 },
+{ 0xA025, 0xA025, 0xA025 },
+{ 0xA026, 0xA026, 0xA026 },
+{ 0xA027, 0xA027, 0xA027 },
+{ 0xA028, 0xA028, 0xA028 },
+{ 0xA029, 0xA029, 0xA029 },
+{ 0xA02A, 0xA02A, 0xA02A },
+{ 0xA02B, 0xA02B, 0xA02B },
+{ 0xA02C, 0xA02C, 0xA02C },
+{ 0xA02D, 0xA02D, 0xA02D },
+{ 0xA02E, 0xA02E, 0xA02E },
+{ 0xA02F, 0xA02F, 0xA02F },
+{ 0xA030, 0xA030, 0xA030 },
+{ 0xA031, 0xA031, 0xA031 },
+{ 0xA032, 0xA032, 0xA032 },
+{ 0xA033, 0xA033, 0xA033 },
+{ 0xA034, 0xA034, 0xA034 },
+{ 0xA035, 0xA035, 0xA035 },
+{ 0xA036, 0xA036, 0xA036 },
+{ 0xA037, 0xA037, 0xA037 },
+{ 0xA038, 0xA038, 0xA038 },
+{ 0xA039, 0xA039, 0xA039 },
+{ 0xA03A, 0xA03A, 0xA03A },
+{ 0xA03B, 0xA03B, 0xA03B },
+{ 0xA03C, 0xA03C, 0xA03C },
+{ 0xA03D, 0xA03D, 0xA03D },
+{ 0xA03E, 0xA03E, 0xA03E },
+{ 0xA03F, 0xA03F, 0xA03F },
+{ 0xA040, 0xA040, 0xA040 },
+{ 0xA041, 0xA041, 0xA041 },
+{ 0xA042, 0xA042, 0xA042 },
+{ 0xA043, 0xA043, 0xA043 },
+{ 0xA044, 0xA044, 0xA044 },
+{ 0xA045, 0xA045, 0xA045 },
+{ 0xA046, 0xA046, 0xA046 },
+{ 0xA047, 0xA047, 0xA047 },
+{ 0xA048, 0xA048, 0xA048 },
+{ 0xA049, 0xA049, 0xA049 },
+{ 0xA04A, 0xA04A, 0xA04A },
+{ 0xA04B, 0xA04B, 0xA04B },
+{ 0xA04C, 0xA04C, 0xA04C },
+{ 0xA04D, 0xA04D, 0xA04D },
+{ 0xA04E, 0xA04E, 0xA04E },
+{ 0xA04F, 0xA04F, 0xA04F },
+{ 0xA050, 0xA050, 0xA050 },
+{ 0xA051, 0xA051, 0xA051 },
+{ 0xA052, 0xA052, 0xA052 },
+{ 0xA053, 0xA053, 0xA053 },
+{ 0xA054, 0xA054, 0xA054 },
+{ 0xA055, 0xA055, 0xA055 },
+{ 0xA056, 0xA056, 0xA056 },
+{ 0xA057, 0xA057, 0xA057 },
+{ 0xA058, 0xA058, 0xA058 },
+{ 0xA059, 0xA059, 0xA059 },
+{ 0xA05A, 0xA05A, 0xA05A },
+{ 0xA05B, 0xA05B, 0xA05B },
+{ 0xA05C, 0xA05C, 0xA05C },
+{ 0xA05D, 0xA05D, 0xA05D },
+{ 0xA05E, 0xA05E, 0xA05E },
+{ 0xA05F, 0xA05F, 0xA05F },
+{ 0xA060, 0xA060, 0xA060 },
+{ 0xA061, 0xA061, 0xA061 },
+{ 0xA062, 0xA062, 0xA062 },
+{ 0xA063, 0xA063, 0xA063 },
+{ 0xA064, 0xA064, 0xA064 },
+{ 0xA065, 0xA065, 0xA065 },
+{ 0xA066, 0xA066, 0xA066 },
+{ 0xA067, 0xA067, 0xA067 },
+{ 0xA068, 0xA068, 0xA068 },
+{ 0xA069, 0xA069, 0xA069 },
+{ 0xA06A, 0xA06A, 0xA06A },
+{ 0xA06B, 0xA06B, 0xA06B },
+{ 0xA06C, 0xA06C, 0xA06C },
+{ 0xA06D, 0xA06D, 0xA06D },
+{ 0xA06E, 0xA06E, 0xA06E },
+{ 0xA06F, 0xA06F, 0xA06F },
+{ 0xA070, 0xA070, 0xA070 },
+{ 0xA071, 0xA071, 0xA071 },
+{ 0xA072, 0xA072, 0xA072 },
+{ 0xA073, 0xA073, 0xA073 },
+{ 0xA074, 0xA074, 0xA074 },
+{ 0xA075, 0xA075, 0xA075 },
+{ 0xA076, 0xA076, 0xA076 },
+{ 0xA077, 0xA077, 0xA077 },
+{ 0xA078, 0xA078, 0xA078 },
+{ 0xA079, 0xA079, 0xA079 },
+{ 0xA07A, 0xA07A, 0xA07A },
+{ 0xA07B, 0xA07B, 0xA07B },
+{ 0xA07C, 0xA07C, 0xA07C },
+{ 0xA07D, 0xA07D, 0xA07D },
+{ 0xA07E, 0xA07E, 0xA07E },
+{ 0xA07F, 0xA07F, 0xA07F },
+{ 0xA080, 0xA080, 0xA080 },
+{ 0xA081, 0xA081, 0xA081 },
+{ 0xA082, 0xA082, 0xA082 },
+{ 0xA083, 0xA083, 0xA083 },
+{ 0xA084, 0xA084, 0xA084 },
+{ 0xA085, 0xA085, 0xA085 },
+{ 0xA086, 0xA086, 0xA086 },
+{ 0xA087, 0xA087, 0xA087 },
+{ 0xA088, 0xA088, 0xA088 },
+{ 0xA089, 0xA089, 0xA089 },
+{ 0xA08A, 0xA08A, 0xA08A },
+{ 0xA08B, 0xA08B, 0xA08B },
+{ 0xA08C, 0xA08C, 0xA08C },
+{ 0xA08D, 0xA08D, 0xA08D },
+{ 0xA08E, 0xA08E, 0xA08E },
+{ 0xA08F, 0xA08F, 0xA08F },
+{ 0xA090, 0xA090, 0xA090 },
+{ 0xA091, 0xA091, 0xA091 },
+{ 0xA092, 0xA092, 0xA092 },
+{ 0xA093, 0xA093, 0xA093 },
+{ 0xA094, 0xA094, 0xA094 },
+{ 0xA095, 0xA095, 0xA095 },
+{ 0xA096, 0xA096, 0xA096 },
+{ 0xA097, 0xA097, 0xA097 },
+{ 0xA098, 0xA098, 0xA098 },
+{ 0xA099, 0xA099, 0xA099 },
+{ 0xA09A, 0xA09A, 0xA09A },
+{ 0xA09B, 0xA09B, 0xA09B },
+{ 0xA09C, 0xA09C, 0xA09C },
+{ 0xA09D, 0xA09D, 0xA09D },
+{ 0xA09E, 0xA09E, 0xA09E },
+{ 0xA09F, 0xA09F, 0xA09F },
+{ 0xA0A0, 0xA0A0, 0xA0A0 },
+{ 0xA0A1, 0xA0A1, 0xA0A1 },
+{ 0xA0A2, 0xA0A2, 0xA0A2 },
+{ 0xA0A3, 0xA0A3, 0xA0A3 },
+{ 0xA0A4, 0xA0A4, 0xA0A4 },
+{ 0xA0A5, 0xA0A5, 0xA0A5 },
+{ 0xA0A6, 0xA0A6, 0xA0A6 },
+{ 0xA0A7, 0xA0A7, 0xA0A7 },
+{ 0xA0A8, 0xA0A8, 0xA0A8 },
+{ 0xA0A9, 0xA0A9, 0xA0A9 },
+{ 0xA0AA, 0xA0AA, 0xA0AA },
+{ 0xA0AB, 0xA0AB, 0xA0AB },
+{ 0xA0AC, 0xA0AC, 0xA0AC },
+{ 0xA0AD, 0xA0AD, 0xA0AD },
+{ 0xA0AE, 0xA0AE, 0xA0AE },
+{ 0xA0AF, 0xA0AF, 0xA0AF },
+{ 0xA0B0, 0xA0B0, 0xA0B0 },
+{ 0xA0B1, 0xA0B1, 0xA0B1 },
+{ 0xA0B2, 0xA0B2, 0xA0B2 },
+{ 0xA0B3, 0xA0B3, 0xA0B3 },
+{ 0xA0B4, 0xA0B4, 0xA0B4 },
+{ 0xA0B5, 0xA0B5, 0xA0B5 },
+{ 0xA0B6, 0xA0B6, 0xA0B6 },
+{ 0xA0B7, 0xA0B7, 0xA0B7 },
+{ 0xA0B8, 0xA0B8, 0xA0B8 },
+{ 0xA0B9, 0xA0B9, 0xA0B9 },
+{ 0xA0BA, 0xA0BA, 0xA0BA },
+{ 0xA0BB, 0xA0BB, 0xA0BB },
+{ 0xA0BC, 0xA0BC, 0xA0BC },
+{ 0xA0BD, 0xA0BD, 0xA0BD },
+{ 0xA0BE, 0xA0BE, 0xA0BE },
+{ 0xA0BF, 0xA0BF, 0xA0BF },
+{ 0xA0C0, 0xA0C0, 0xA0C0 },
+{ 0xA0C1, 0xA0C1, 0xA0C1 },
+{ 0xA0C2, 0xA0C2, 0xA0C2 },
+{ 0xA0C3, 0xA0C3, 0xA0C3 },
+{ 0xA0C4, 0xA0C4, 0xA0C4 },
+{ 0xA0C5, 0xA0C5, 0xA0C5 },
+{ 0xA0C6, 0xA0C6, 0xA0C6 },
+{ 0xA0C7, 0xA0C7, 0xA0C7 },
+{ 0xA0C8, 0xA0C8, 0xA0C8 },
+{ 0xA0C9, 0xA0C9, 0xA0C9 },
+{ 0xA0CA, 0xA0CA, 0xA0CA },
+{ 0xA0CB, 0xA0CB, 0xA0CB },
+{ 0xA0CC, 0xA0CC, 0xA0CC },
+{ 0xA0CD, 0xA0CD, 0xA0CD },
+{ 0xA0CE, 0xA0CE, 0xA0CE },
+{ 0xA0CF, 0xA0CF, 0xA0CF },
+{ 0xA0D0, 0xA0D0, 0xA0D0 },
+{ 0xA0D1, 0xA0D1, 0xA0D1 },
+{ 0xA0D2, 0xA0D2, 0xA0D2 },
+{ 0xA0D3, 0xA0D3, 0xA0D3 },
+{ 0xA0D4, 0xA0D4, 0xA0D4 },
+{ 0xA0D5, 0xA0D5, 0xA0D5 },
+{ 0xA0D6, 0xA0D6, 0xA0D6 },
+{ 0xA0D7, 0xA0D7, 0xA0D7 },
+{ 0xA0D8, 0xA0D8, 0xA0D8 },
+{ 0xA0D9, 0xA0D9, 0xA0D9 },
+{ 0xA0DA, 0xA0DA, 0xA0DA },
+{ 0xA0DB, 0xA0DB, 0xA0DB },
+{ 0xA0DC, 0xA0DC, 0xA0DC },
+{ 0xA0DD, 0xA0DD, 0xA0DD },
+{ 0xA0DE, 0xA0DE, 0xA0DE },
+{ 0xA0DF, 0xA0DF, 0xA0DF },
+{ 0xA0E0, 0xA0E0, 0xA0E0 },
+{ 0xA0E1, 0xA0E1, 0xA0E1 },
+{ 0xA0E2, 0xA0E2, 0xA0E2 },
+{ 0xA0E3, 0xA0E3, 0xA0E3 },
+{ 0xA0E4, 0xA0E4, 0xA0E4 },
+{ 0xA0E5, 0xA0E5, 0xA0E5 },
+{ 0xA0E6, 0xA0E6, 0xA0E6 },
+{ 0xA0E7, 0xA0E7, 0xA0E7 },
+{ 0xA0E8, 0xA0E8, 0xA0E8 },
+{ 0xA0E9, 0xA0E9, 0xA0E9 },
+{ 0xA0EA, 0xA0EA, 0xA0EA },
+{ 0xA0EB, 0xA0EB, 0xA0EB },
+{ 0xA0EC, 0xA0EC, 0xA0EC },
+{ 0xA0ED, 0xA0ED, 0xA0ED },
+{ 0xA0EE, 0xA0EE, 0xA0EE },
+{ 0xA0EF, 0xA0EF, 0xA0EF },
+{ 0xA0F0, 0xA0F0, 0xA0F0 },
+{ 0xA0F1, 0xA0F1, 0xA0F1 },
+{ 0xA0F2, 0xA0F2, 0xA0F2 },
+{ 0xA0F3, 0xA0F3, 0xA0F3 },
+{ 0xA0F4, 0xA0F4, 0xA0F4 },
+{ 0xA0F5, 0xA0F5, 0xA0F5 },
+{ 0xA0F6, 0xA0F6, 0xA0F6 },
+{ 0xA0F7, 0xA0F7, 0xA0F7 },
+{ 0xA0F8, 0xA0F8, 0xA0F8 },
+{ 0xA0F9, 0xA0F9, 0xA0F9 },
+{ 0xA0FA, 0xA0FA, 0xA0FA },
+{ 0xA0FB, 0xA0FB, 0xA0FB },
+{ 0xA0FC, 0xA0FC, 0xA0FC },
+{ 0xA0FD, 0xA0FD, 0xA0FD },
+{ 0xA0FE, 0xA0FE, 0xA0FE },
+{ 0xA0FF, 0xA0FF, 0xA0FF },
+{ 0xA100, 0xA100, 0xA100 },
+{ 0xA101, 0xA101, 0xA101 },
+{ 0xA102, 0xA102, 0xA102 },
+{ 0xA103, 0xA103, 0xA103 },
+{ 0xA104, 0xA104, 0xA104 },
+{ 0xA105, 0xA105, 0xA105 },
+{ 0xA106, 0xA106, 0xA106 },
+{ 0xA107, 0xA107, 0xA107 },
+{ 0xA108, 0xA108, 0xA108 },
+{ 0xA109, 0xA109, 0xA109 },
+{ 0xA10A, 0xA10A, 0xA10A },
+{ 0xA10B, 0xA10B, 0xA10B },
+{ 0xA10C, 0xA10C, 0xA10C },
+{ 0xA10D, 0xA10D, 0xA10D },
+{ 0xA10E, 0xA10E, 0xA10E },
+{ 0xA10F, 0xA10F, 0xA10F },
+{ 0xA110, 0xA110, 0xA110 },
+{ 0xA111, 0xA111, 0xA111 },
+{ 0xA112, 0xA112, 0xA112 },
+{ 0xA113, 0xA113, 0xA113 },
+{ 0xA114, 0xA114, 0xA114 },
+{ 0xA115, 0xA115, 0xA115 },
+{ 0xA116, 0xA116, 0xA116 },
+{ 0xA117, 0xA117, 0xA117 },
+{ 0xA118, 0xA118, 0xA118 },
+{ 0xA119, 0xA119, 0xA119 },
+{ 0xA11A, 0xA11A, 0xA11A },
+{ 0xA11B, 0xA11B, 0xA11B },
+{ 0xA11C, 0xA11C, 0xA11C },
+{ 0xA11D, 0xA11D, 0xA11D },
+{ 0xA11E, 0xA11E, 0xA11E },
+{ 0xA11F, 0xA11F, 0xA11F },
+{ 0xA120, 0xA120, 0xA120 },
+{ 0xA121, 0xA121, 0xA121 },
+{ 0xA122, 0xA122, 0xA122 },
+{ 0xA123, 0xA123, 0xA123 },
+{ 0xA124, 0xA124, 0xA124 },
+{ 0xA125, 0xA125, 0xA125 },
+{ 0xA126, 0xA126, 0xA126 },
+{ 0xA127, 0xA127, 0xA127 },
+{ 0xA128, 0xA128, 0xA128 },
+{ 0xA129, 0xA129, 0xA129 },
+{ 0xA12A, 0xA12A, 0xA12A },
+{ 0xA12B, 0xA12B, 0xA12B },
+{ 0xA12C, 0xA12C, 0xA12C },
+{ 0xA12D, 0xA12D, 0xA12D },
+{ 0xA12E, 0xA12E, 0xA12E },
+{ 0xA12F, 0xA12F, 0xA12F },
+{ 0xA130, 0xA130, 0xA130 },
+{ 0xA131, 0xA131, 0xA131 },
+{ 0xA132, 0xA132, 0xA132 },
+{ 0xA133, 0xA133, 0xA133 },
+{ 0xA134, 0xA134, 0xA134 },
+{ 0xA135, 0xA135, 0xA135 },
+{ 0xA136, 0xA136, 0xA136 },
+{ 0xA137, 0xA137, 0xA137 },
+{ 0xA138, 0xA138, 0xA138 },
+{ 0xA139, 0xA139, 0xA139 },
+{ 0xA13A, 0xA13A, 0xA13A },
+{ 0xA13B, 0xA13B, 0xA13B },
+{ 0xA13C, 0xA13C, 0xA13C },
+{ 0xA13D, 0xA13D, 0xA13D },
+{ 0xA13E, 0xA13E, 0xA13E },
+{ 0xA13F, 0xA13F, 0xA13F },
+{ 0xA140, 0xA140, 0xA140 },
+{ 0xA141, 0xA141, 0xA141 },
+{ 0xA142, 0xA142, 0xA142 },
+{ 0xA143, 0xA143, 0xA143 },
+{ 0xA144, 0xA144, 0xA144 },
+{ 0xA145, 0xA145, 0xA145 },
+{ 0xA146, 0xA146, 0xA146 },
+{ 0xA147, 0xA147, 0xA147 },
+{ 0xA148, 0xA148, 0xA148 },
+{ 0xA149, 0xA149, 0xA149 },
+{ 0xA14A, 0xA14A, 0xA14A },
+{ 0xA14B, 0xA14B, 0xA14B },
+{ 0xA14C, 0xA14C, 0xA14C },
+{ 0xA14D, 0xA14D, 0xA14D },
+{ 0xA14E, 0xA14E, 0xA14E },
+{ 0xA14F, 0xA14F, 0xA14F },
+{ 0xA150, 0xA150, 0xA150 },
+{ 0xA151, 0xA151, 0xA151 },
+{ 0xA152, 0xA152, 0xA152 },
+{ 0xA153, 0xA153, 0xA153 },
+{ 0xA154, 0xA154, 0xA154 },
+{ 0xA155, 0xA155, 0xA155 },
+{ 0xA156, 0xA156, 0xA156 },
+{ 0xA157, 0xA157, 0xA157 },
+{ 0xA158, 0xA158, 0xA158 },
+{ 0xA159, 0xA159, 0xA159 },
+{ 0xA15A, 0xA15A, 0xA15A },
+{ 0xA15B, 0xA15B, 0xA15B },
+{ 0xA15C, 0xA15C, 0xA15C },
+{ 0xA15D, 0xA15D, 0xA15D },
+{ 0xA15E, 0xA15E, 0xA15E },
+{ 0xA15F, 0xA15F, 0xA15F },
+{ 0xA160, 0xA160, 0xA160 },
+{ 0xA161, 0xA161, 0xA161 },
+{ 0xA162, 0xA162, 0xA162 },
+{ 0xA163, 0xA163, 0xA163 },
+{ 0xA164, 0xA164, 0xA164 },
+{ 0xA165, 0xA165, 0xA165 },
+{ 0xA166, 0xA166, 0xA166 },
+{ 0xA167, 0xA167, 0xA167 },
+{ 0xA168, 0xA168, 0xA168 },
+{ 0xA169, 0xA169, 0xA169 },
+{ 0xA16A, 0xA16A, 0xA16A },
+{ 0xA16B, 0xA16B, 0xA16B },
+{ 0xA16C, 0xA16C, 0xA16C },
+{ 0xA16D, 0xA16D, 0xA16D },
+{ 0xA16E, 0xA16E, 0xA16E },
+{ 0xA16F, 0xA16F, 0xA16F },
+{ 0xA170, 0xA170, 0xA170 },
+{ 0xA171, 0xA171, 0xA171 },
+{ 0xA172, 0xA172, 0xA172 },
+{ 0xA173, 0xA173, 0xA173 },
+{ 0xA174, 0xA174, 0xA174 },
+{ 0xA175, 0xA175, 0xA175 },
+{ 0xA176, 0xA176, 0xA176 },
+{ 0xA177, 0xA177, 0xA177 },
+{ 0xA178, 0xA178, 0xA178 },
+{ 0xA179, 0xA179, 0xA179 },
+{ 0xA17A, 0xA17A, 0xA17A },
+{ 0xA17B, 0xA17B, 0xA17B },
+{ 0xA17C, 0xA17C, 0xA17C },
+{ 0xA17D, 0xA17D, 0xA17D },
+{ 0xA17E, 0xA17E, 0xA17E },
+{ 0xA17F, 0xA17F, 0xA17F },
+{ 0xA180, 0xA180, 0xA180 },
+{ 0xA181, 0xA181, 0xA181 },
+{ 0xA182, 0xA182, 0xA182 },
+{ 0xA183, 0xA183, 0xA183 },
+{ 0xA184, 0xA184, 0xA184 },
+{ 0xA185, 0xA185, 0xA185 },
+{ 0xA186, 0xA186, 0xA186 },
+{ 0xA187, 0xA187, 0xA187 },
+{ 0xA188, 0xA188, 0xA188 },
+{ 0xA189, 0xA189, 0xA189 },
+{ 0xA18A, 0xA18A, 0xA18A },
+{ 0xA18B, 0xA18B, 0xA18B },
+{ 0xA18C, 0xA18C, 0xA18C },
+{ 0xA18D, 0xA18D, 0xA18D },
+{ 0xA18E, 0xA18E, 0xA18E },
+{ 0xA18F, 0xA18F, 0xA18F },
+{ 0xA190, 0xA190, 0xA190 },
+{ 0xA191, 0xA191, 0xA191 },
+{ 0xA192, 0xA192, 0xA192 },
+{ 0xA193, 0xA193, 0xA193 },
+{ 0xA194, 0xA194, 0xA194 },
+{ 0xA195, 0xA195, 0xA195 },
+{ 0xA196, 0xA196, 0xA196 },
+{ 0xA197, 0xA197, 0xA197 },
+{ 0xA198, 0xA198, 0xA198 },
+{ 0xA199, 0xA199, 0xA199 },
+{ 0xA19A, 0xA19A, 0xA19A },
+{ 0xA19B, 0xA19B, 0xA19B },
+{ 0xA19C, 0xA19C, 0xA19C },
+{ 0xA19D, 0xA19D, 0xA19D },
+{ 0xA19E, 0xA19E, 0xA19E },
+{ 0xA19F, 0xA19F, 0xA19F },
+{ 0xA1A0, 0xA1A0, 0xA1A0 },
+{ 0xA1A1, 0xA1A1, 0xA1A1 },
+{ 0xA1A2, 0xA1A2, 0xA1A2 },
+{ 0xA1A3, 0xA1A3, 0xA1A3 },
+{ 0xA1A4, 0xA1A4, 0xA1A4 },
+{ 0xA1A5, 0xA1A5, 0xA1A5 },
+{ 0xA1A6, 0xA1A6, 0xA1A6 },
+{ 0xA1A7, 0xA1A7, 0xA1A7 },
+{ 0xA1A8, 0xA1A8, 0xA1A8 },
+{ 0xA1A9, 0xA1A9, 0xA1A9 },
+{ 0xA1AA, 0xA1AA, 0xA1AA },
+{ 0xA1AB, 0xA1AB, 0xA1AB },
+{ 0xA1AC, 0xA1AC, 0xA1AC },
+{ 0xA1AD, 0xA1AD, 0xA1AD },
+{ 0xA1AE, 0xA1AE, 0xA1AE },
+{ 0xA1AF, 0xA1AF, 0xA1AF },
+{ 0xA1B0, 0xA1B0, 0xA1B0 },
+{ 0xA1B1, 0xA1B1, 0xA1B1 },
+{ 0xA1B2, 0xA1B2, 0xA1B2 },
+{ 0xA1B3, 0xA1B3, 0xA1B3 },
+{ 0xA1B4, 0xA1B4, 0xA1B4 },
+{ 0xA1B5, 0xA1B5, 0xA1B5 },
+{ 0xA1B6, 0xA1B6, 0xA1B6 },
+{ 0xA1B7, 0xA1B7, 0xA1B7 },
+{ 0xA1B8, 0xA1B8, 0xA1B8 },
+{ 0xA1B9, 0xA1B9, 0xA1B9 },
+{ 0xA1BA, 0xA1BA, 0xA1BA },
+{ 0xA1BB, 0xA1BB, 0xA1BB },
+{ 0xA1BC, 0xA1BC, 0xA1BC },
+{ 0xA1BD, 0xA1BD, 0xA1BD },
+{ 0xA1BE, 0xA1BE, 0xA1BE },
+{ 0xA1BF, 0xA1BF, 0xA1BF },
+{ 0xA1C0, 0xA1C0, 0xA1C0 },
+{ 0xA1C1, 0xA1C1, 0xA1C1 },
+{ 0xA1C2, 0xA1C2, 0xA1C2 },
+{ 0xA1C3, 0xA1C3, 0xA1C3 },
+{ 0xA1C4, 0xA1C4, 0xA1C4 },
+{ 0xA1C5, 0xA1C5, 0xA1C5 },
+{ 0xA1C6, 0xA1C6, 0xA1C6 },
+{ 0xA1C7, 0xA1C7, 0xA1C7 },
+{ 0xA1C8, 0xA1C8, 0xA1C8 },
+{ 0xA1C9, 0xA1C9, 0xA1C9 },
+{ 0xA1CA, 0xA1CA, 0xA1CA },
+{ 0xA1CB, 0xA1CB, 0xA1CB },
+{ 0xA1CC, 0xA1CC, 0xA1CC },
+{ 0xA1CD, 0xA1CD, 0xA1CD },
+{ 0xA1CE, 0xA1CE, 0xA1CE },
+{ 0xA1CF, 0xA1CF, 0xA1CF },
+{ 0xA1D0, 0xA1D0, 0xA1D0 },
+{ 0xA1D1, 0xA1D1, 0xA1D1 },
+{ 0xA1D2, 0xA1D2, 0xA1D2 },
+{ 0xA1D3, 0xA1D3, 0xA1D3 },
+{ 0xA1D4, 0xA1D4, 0xA1D4 },
+{ 0xA1D5, 0xA1D5, 0xA1D5 },
+{ 0xA1D6, 0xA1D6, 0xA1D6 },
+{ 0xA1D7, 0xA1D7, 0xA1D7 },
+{ 0xA1D8, 0xA1D8, 0xA1D8 },
+{ 0xA1D9, 0xA1D9, 0xA1D9 },
+{ 0xA1DA, 0xA1DA, 0xA1DA },
+{ 0xA1DB, 0xA1DB, 0xA1DB },
+{ 0xA1DC, 0xA1DC, 0xA1DC },
+{ 0xA1DD, 0xA1DD, 0xA1DD },
+{ 0xA1DE, 0xA1DE, 0xA1DE },
+{ 0xA1DF, 0xA1DF, 0xA1DF },
+{ 0xA1E0, 0xA1E0, 0xA1E0 },
+{ 0xA1E1, 0xA1E1, 0xA1E1 },
+{ 0xA1E2, 0xA1E2, 0xA1E2 },
+{ 0xA1E3, 0xA1E3, 0xA1E3 },
+{ 0xA1E4, 0xA1E4, 0xA1E4 },
+{ 0xA1E5, 0xA1E5, 0xA1E5 },
+{ 0xA1E6, 0xA1E6, 0xA1E6 },
+{ 0xA1E7, 0xA1E7, 0xA1E7 },
+{ 0xA1E8, 0xA1E8, 0xA1E8 },
+{ 0xA1E9, 0xA1E9, 0xA1E9 },
+{ 0xA1EA, 0xA1EA, 0xA1EA },
+{ 0xA1EB, 0xA1EB, 0xA1EB },
+{ 0xA1EC, 0xA1EC, 0xA1EC },
+{ 0xA1ED, 0xA1ED, 0xA1ED },
+{ 0xA1EE, 0xA1EE, 0xA1EE },
+{ 0xA1EF, 0xA1EF, 0xA1EF },
+{ 0xA1F0, 0xA1F0, 0xA1F0 },
+{ 0xA1F1, 0xA1F1, 0xA1F1 },
+{ 0xA1F2, 0xA1F2, 0xA1F2 },
+{ 0xA1F3, 0xA1F3, 0xA1F3 },
+{ 0xA1F4, 0xA1F4, 0xA1F4 },
+{ 0xA1F5, 0xA1F5, 0xA1F5 },
+{ 0xA1F6, 0xA1F6, 0xA1F6 },
+{ 0xA1F7, 0xA1F7, 0xA1F7 },
+{ 0xA1F8, 0xA1F8, 0xA1F8 },
+{ 0xA1F9, 0xA1F9, 0xA1F9 },
+{ 0xA1FA, 0xA1FA, 0xA1FA },
+{ 0xA1FB, 0xA1FB, 0xA1FB },
+{ 0xA1FC, 0xA1FC, 0xA1FC },
+{ 0xA1FD, 0xA1FD, 0xA1FD },
+{ 0xA1FE, 0xA1FE, 0xA1FE },
+{ 0xA1FF, 0xA1FF, 0xA1FF },
+{ 0xA200, 0xA200, 0xA200 },
+{ 0xA201, 0xA201, 0xA201 },
+{ 0xA202, 0xA202, 0xA202 },
+{ 0xA203, 0xA203, 0xA203 },
+{ 0xA204, 0xA204, 0xA204 },
+{ 0xA205, 0xA205, 0xA205 },
+{ 0xA206, 0xA206, 0xA206 },
+{ 0xA207, 0xA207, 0xA207 },
+{ 0xA208, 0xA208, 0xA208 },
+{ 0xA209, 0xA209, 0xA209 },
+{ 0xA20A, 0xA20A, 0xA20A },
+{ 0xA20B, 0xA20B, 0xA20B },
+{ 0xA20C, 0xA20C, 0xA20C },
+{ 0xA20D, 0xA20D, 0xA20D },
+{ 0xA20E, 0xA20E, 0xA20E },
+{ 0xA20F, 0xA20F, 0xA20F },
+{ 0xA210, 0xA210, 0xA210 },
+{ 0xA211, 0xA211, 0xA211 },
+{ 0xA212, 0xA212, 0xA212 },
+{ 0xA213, 0xA213, 0xA213 },
+{ 0xA214, 0xA214, 0xA214 },
+{ 0xA215, 0xA215, 0xA215 },
+{ 0xA216, 0xA216, 0xA216 },
+{ 0xA217, 0xA217, 0xA217 },
+{ 0xA218, 0xA218, 0xA218 },
+{ 0xA219, 0xA219, 0xA219 },
+{ 0xA21A, 0xA21A, 0xA21A },
+{ 0xA21B, 0xA21B, 0xA21B },
+{ 0xA21C, 0xA21C, 0xA21C },
+{ 0xA21D, 0xA21D, 0xA21D },
+{ 0xA21E, 0xA21E, 0xA21E },
+{ 0xA21F, 0xA21F, 0xA21F },
+{ 0xA220, 0xA220, 0xA220 },
+{ 0xA221, 0xA221, 0xA221 },
+{ 0xA222, 0xA222, 0xA222 },
+{ 0xA223, 0xA223, 0xA223 },
+{ 0xA224, 0xA224, 0xA224 },
+{ 0xA225, 0xA225, 0xA225 },
+{ 0xA226, 0xA226, 0xA226 },
+{ 0xA227, 0xA227, 0xA227 },
+{ 0xA228, 0xA228, 0xA228 },
+{ 0xA229, 0xA229, 0xA229 },
+{ 0xA22A, 0xA22A, 0xA22A },
+{ 0xA22B, 0xA22B, 0xA22B },
+{ 0xA22C, 0xA22C, 0xA22C },
+{ 0xA22D, 0xA22D, 0xA22D },
+{ 0xA22E, 0xA22E, 0xA22E },
+{ 0xA22F, 0xA22F, 0xA22F },
+{ 0xA230, 0xA230, 0xA230 },
+{ 0xA231, 0xA231, 0xA231 },
+{ 0xA232, 0xA232, 0xA232 },
+{ 0xA233, 0xA233, 0xA233 },
+{ 0xA234, 0xA234, 0xA234 },
+{ 0xA235, 0xA235, 0xA235 },
+{ 0xA236, 0xA236, 0xA236 },
+{ 0xA237, 0xA237, 0xA237 },
+{ 0xA238, 0xA238, 0xA238 },
+{ 0xA239, 0xA239, 0xA239 },
+{ 0xA23A, 0xA23A, 0xA23A },
+{ 0xA23B, 0xA23B, 0xA23B },
+{ 0xA23C, 0xA23C, 0xA23C },
+{ 0xA23D, 0xA23D, 0xA23D },
+{ 0xA23E, 0xA23E, 0xA23E },
+{ 0xA23F, 0xA23F, 0xA23F },
+{ 0xA240, 0xA240, 0xA240 },
+{ 0xA241, 0xA241, 0xA241 },
+{ 0xA242, 0xA242, 0xA242 },
+{ 0xA243, 0xA243, 0xA243 },
+{ 0xA244, 0xA244, 0xA244 },
+{ 0xA245, 0xA245, 0xA245 },
+{ 0xA246, 0xA246, 0xA246 },
+{ 0xA247, 0xA247, 0xA247 },
+{ 0xA248, 0xA248, 0xA248 },
+{ 0xA249, 0xA249, 0xA249 },
+{ 0xA24A, 0xA24A, 0xA24A },
+{ 0xA24B, 0xA24B, 0xA24B },
+{ 0xA24C, 0xA24C, 0xA24C },
+{ 0xA24D, 0xA24D, 0xA24D },
+{ 0xA24E, 0xA24E, 0xA24E },
+{ 0xA24F, 0xA24F, 0xA24F },
+{ 0xA250, 0xA250, 0xA250 },
+{ 0xA251, 0xA251, 0xA251 },
+{ 0xA252, 0xA252, 0xA252 },
+{ 0xA253, 0xA253, 0xA253 },
+{ 0xA254, 0xA254, 0xA254 },
+{ 0xA255, 0xA255, 0xA255 },
+{ 0xA256, 0xA256, 0xA256 },
+{ 0xA257, 0xA257, 0xA257 },
+{ 0xA258, 0xA258, 0xA258 },
+{ 0xA259, 0xA259, 0xA259 },
+{ 0xA25A, 0xA25A, 0xA25A },
+{ 0xA25B, 0xA25B, 0xA25B },
+{ 0xA25C, 0xA25C, 0xA25C },
+{ 0xA25D, 0xA25D, 0xA25D },
+{ 0xA25E, 0xA25E, 0xA25E },
+{ 0xA25F, 0xA25F, 0xA25F },
+{ 0xA260, 0xA260, 0xA260 },
+{ 0xA261, 0xA261, 0xA261 },
+{ 0xA262, 0xA262, 0xA262 },
+{ 0xA263, 0xA263, 0xA263 },
+{ 0xA264, 0xA264, 0xA264 },
+{ 0xA265, 0xA265, 0xA265 },
+{ 0xA266, 0xA266, 0xA266 },
+{ 0xA267, 0xA267, 0xA267 },
+{ 0xA268, 0xA268, 0xA268 },
+{ 0xA269, 0xA269, 0xA269 },
+{ 0xA26A, 0xA26A, 0xA26A },
+{ 0xA26B, 0xA26B, 0xA26B },
+{ 0xA26C, 0xA26C, 0xA26C },
+{ 0xA26D, 0xA26D, 0xA26D },
+{ 0xA26E, 0xA26E, 0xA26E },
+{ 0xA26F, 0xA26F, 0xA26F },
+{ 0xA270, 0xA270, 0xA270 },
+{ 0xA271, 0xA271, 0xA271 },
+{ 0xA272, 0xA272, 0xA272 },
+{ 0xA273, 0xA273, 0xA273 },
+{ 0xA274, 0xA274, 0xA274 },
+{ 0xA275, 0xA275, 0xA275 },
+{ 0xA276, 0xA276, 0xA276 },
+{ 0xA277, 0xA277, 0xA277 },
+{ 0xA278, 0xA278, 0xA278 },
+{ 0xA279, 0xA279, 0xA279 },
+{ 0xA27A, 0xA27A, 0xA27A },
+{ 0xA27B, 0xA27B, 0xA27B },
+{ 0xA27C, 0xA27C, 0xA27C },
+{ 0xA27D, 0xA27D, 0xA27D },
+{ 0xA27E, 0xA27E, 0xA27E },
+{ 0xA27F, 0xA27F, 0xA27F },
+{ 0xA280, 0xA280, 0xA280 },
+{ 0xA281, 0xA281, 0xA281 },
+{ 0xA282, 0xA282, 0xA282 },
+{ 0xA283, 0xA283, 0xA283 },
+{ 0xA284, 0xA284, 0xA284 },
+{ 0xA285, 0xA285, 0xA285 },
+{ 0xA286, 0xA286, 0xA286 },
+{ 0xA287, 0xA287, 0xA287 },
+{ 0xA288, 0xA288, 0xA288 },
+{ 0xA289, 0xA289, 0xA289 },
+{ 0xA28A, 0xA28A, 0xA28A },
+{ 0xA28B, 0xA28B, 0xA28B },
+{ 0xA28C, 0xA28C, 0xA28C },
+{ 0xA28D, 0xA28D, 0xA28D },
+{ 0xA28E, 0xA28E, 0xA28E },
+{ 0xA28F, 0xA28F, 0xA28F },
+{ 0xA290, 0xA290, 0xA290 },
+{ 0xA291, 0xA291, 0xA291 },
+{ 0xA292, 0xA292, 0xA292 },
+{ 0xA293, 0xA293, 0xA293 },
+{ 0xA294, 0xA294, 0xA294 },
+{ 0xA295, 0xA295, 0xA295 },
+{ 0xA296, 0xA296, 0xA296 },
+{ 0xA297, 0xA297, 0xA297 },
+{ 0xA298, 0xA298, 0xA298 },
+{ 0xA299, 0xA299, 0xA299 },
+{ 0xA29A, 0xA29A, 0xA29A },
+{ 0xA29B, 0xA29B, 0xA29B },
+{ 0xA29C, 0xA29C, 0xA29C },
+{ 0xA29D, 0xA29D, 0xA29D },
+{ 0xA29E, 0xA29E, 0xA29E },
+{ 0xA29F, 0xA29F, 0xA29F },
+{ 0xA2A0, 0xA2A0, 0xA2A0 },
+{ 0xA2A1, 0xA2A1, 0xA2A1 },
+{ 0xA2A2, 0xA2A2, 0xA2A2 },
+{ 0xA2A3, 0xA2A3, 0xA2A3 },
+{ 0xA2A4, 0xA2A4, 0xA2A4 },
+{ 0xA2A5, 0xA2A5, 0xA2A5 },
+{ 0xA2A6, 0xA2A6, 0xA2A6 },
+{ 0xA2A7, 0xA2A7, 0xA2A7 },
+{ 0xA2A8, 0xA2A8, 0xA2A8 },
+{ 0xA2A9, 0xA2A9, 0xA2A9 },
+{ 0xA2AA, 0xA2AA, 0xA2AA },
+{ 0xA2AB, 0xA2AB, 0xA2AB },
+{ 0xA2AC, 0xA2AC, 0xA2AC },
+{ 0xA2AD, 0xA2AD, 0xA2AD },
+{ 0xA2AE, 0xA2AE, 0xA2AE },
+{ 0xA2AF, 0xA2AF, 0xA2AF },
+{ 0xA2B0, 0xA2B0, 0xA2B0 },
+{ 0xA2B1, 0xA2B1, 0xA2B1 },
+{ 0xA2B2, 0xA2B2, 0xA2B2 },
+{ 0xA2B3, 0xA2B3, 0xA2B3 },
+{ 0xA2B4, 0xA2B4, 0xA2B4 },
+{ 0xA2B5, 0xA2B5, 0xA2B5 },
+{ 0xA2B6, 0xA2B6, 0xA2B6 },
+{ 0xA2B7, 0xA2B7, 0xA2B7 },
+{ 0xA2B8, 0xA2B8, 0xA2B8 },
+{ 0xA2B9, 0xA2B9, 0xA2B9 },
+{ 0xA2BA, 0xA2BA, 0xA2BA },
+{ 0xA2BB, 0xA2BB, 0xA2BB },
+{ 0xA2BC, 0xA2BC, 0xA2BC },
+{ 0xA2BD, 0xA2BD, 0xA2BD },
+{ 0xA2BE, 0xA2BE, 0xA2BE },
+{ 0xA2BF, 0xA2BF, 0xA2BF },
+{ 0xA2C0, 0xA2C0, 0xA2C0 },
+{ 0xA2C1, 0xA2C1, 0xA2C1 },
+{ 0xA2C2, 0xA2C2, 0xA2C2 },
+{ 0xA2C3, 0xA2C3, 0xA2C3 },
+{ 0xA2C4, 0xA2C4, 0xA2C4 },
+{ 0xA2C5, 0xA2C5, 0xA2C5 },
+{ 0xA2C6, 0xA2C6, 0xA2C6 },
+{ 0xA2C7, 0xA2C7, 0xA2C7 },
+{ 0xA2C8, 0xA2C8, 0xA2C8 },
+{ 0xA2C9, 0xA2C9, 0xA2C9 },
+{ 0xA2CA, 0xA2CA, 0xA2CA },
+{ 0xA2CB, 0xA2CB, 0xA2CB },
+{ 0xA2CC, 0xA2CC, 0xA2CC },
+{ 0xA2CD, 0xA2CD, 0xA2CD },
+{ 0xA2CE, 0xA2CE, 0xA2CE },
+{ 0xA2CF, 0xA2CF, 0xA2CF },
+{ 0xA2D0, 0xA2D0, 0xA2D0 },
+{ 0xA2D1, 0xA2D1, 0xA2D1 },
+{ 0xA2D2, 0xA2D2, 0xA2D2 },
+{ 0xA2D3, 0xA2D3, 0xA2D3 },
+{ 0xA2D4, 0xA2D4, 0xA2D4 },
+{ 0xA2D5, 0xA2D5, 0xA2D5 },
+{ 0xA2D6, 0xA2D6, 0xA2D6 },
+{ 0xA2D7, 0xA2D7, 0xA2D7 },
+{ 0xA2D8, 0xA2D8, 0xA2D8 },
+{ 0xA2D9, 0xA2D9, 0xA2D9 },
+{ 0xA2DA, 0xA2DA, 0xA2DA },
+{ 0xA2DB, 0xA2DB, 0xA2DB },
+{ 0xA2DC, 0xA2DC, 0xA2DC },
+{ 0xA2DD, 0xA2DD, 0xA2DD },
+{ 0xA2DE, 0xA2DE, 0xA2DE },
+{ 0xA2DF, 0xA2DF, 0xA2DF },
+{ 0xA2E0, 0xA2E0, 0xA2E0 },
+{ 0xA2E1, 0xA2E1, 0xA2E1 },
+{ 0xA2E2, 0xA2E2, 0xA2E2 },
+{ 0xA2E3, 0xA2E3, 0xA2E3 },
+{ 0xA2E4, 0xA2E4, 0xA2E4 },
+{ 0xA2E5, 0xA2E5, 0xA2E5 },
+{ 0xA2E6, 0xA2E6, 0xA2E6 },
+{ 0xA2E7, 0xA2E7, 0xA2E7 },
+{ 0xA2E8, 0xA2E8, 0xA2E8 },
+{ 0xA2E9, 0xA2E9, 0xA2E9 },
+{ 0xA2EA, 0xA2EA, 0xA2EA },
+{ 0xA2EB, 0xA2EB, 0xA2EB },
+{ 0xA2EC, 0xA2EC, 0xA2EC },
+{ 0xA2ED, 0xA2ED, 0xA2ED },
+{ 0xA2EE, 0xA2EE, 0xA2EE },
+{ 0xA2EF, 0xA2EF, 0xA2EF },
+{ 0xA2F0, 0xA2F0, 0xA2F0 },
+{ 0xA2F1, 0xA2F1, 0xA2F1 },
+{ 0xA2F2, 0xA2F2, 0xA2F2 },
+{ 0xA2F3, 0xA2F3, 0xA2F3 },
+{ 0xA2F4, 0xA2F4, 0xA2F4 },
+{ 0xA2F5, 0xA2F5, 0xA2F5 },
+{ 0xA2F6, 0xA2F6, 0xA2F6 },
+{ 0xA2F7, 0xA2F7, 0xA2F7 },
+{ 0xA2F8, 0xA2F8, 0xA2F8 },
+{ 0xA2F9, 0xA2F9, 0xA2F9 },
+{ 0xA2FA, 0xA2FA, 0xA2FA },
+{ 0xA2FB, 0xA2FB, 0xA2FB },
+{ 0xA2FC, 0xA2FC, 0xA2FC },
+{ 0xA2FD, 0xA2FD, 0xA2FD },
+{ 0xA2FE, 0xA2FE, 0xA2FE },
+{ 0xA2FF, 0xA2FF, 0xA2FF },
+{ 0xA300, 0xA300, 0xA300 },
+{ 0xA301, 0xA301, 0xA301 },
+{ 0xA302, 0xA302, 0xA302 },
+{ 0xA303, 0xA303, 0xA303 },
+{ 0xA304, 0xA304, 0xA304 },
+{ 0xA305, 0xA305, 0xA305 },
+{ 0xA306, 0xA306, 0xA306 },
+{ 0xA307, 0xA307, 0xA307 },
+{ 0xA308, 0xA308, 0xA308 },
+{ 0xA309, 0xA309, 0xA309 },
+{ 0xA30A, 0xA30A, 0xA30A },
+{ 0xA30B, 0xA30B, 0xA30B },
+{ 0xA30C, 0xA30C, 0xA30C },
+{ 0xA30D, 0xA30D, 0xA30D },
+{ 0xA30E, 0xA30E, 0xA30E },
+{ 0xA30F, 0xA30F, 0xA30F },
+{ 0xA310, 0xA310, 0xA310 },
+{ 0xA311, 0xA311, 0xA311 },
+{ 0xA312, 0xA312, 0xA312 },
+{ 0xA313, 0xA313, 0xA313 },
+{ 0xA314, 0xA314, 0xA314 },
+{ 0xA315, 0xA315, 0xA315 },
+{ 0xA316, 0xA316, 0xA316 },
+{ 0xA317, 0xA317, 0xA317 },
+{ 0xA318, 0xA318, 0xA318 },
+{ 0xA319, 0xA319, 0xA319 },
+{ 0xA31A, 0xA31A, 0xA31A },
+{ 0xA31B, 0xA31B, 0xA31B },
+{ 0xA31C, 0xA31C, 0xA31C },
+{ 0xA31D, 0xA31D, 0xA31D },
+{ 0xA31E, 0xA31E, 0xA31E },
+{ 0xA31F, 0xA31F, 0xA31F },
+{ 0xA320, 0xA320, 0xA320 },
+{ 0xA321, 0xA321, 0xA321 },
+{ 0xA322, 0xA322, 0xA322 },
+{ 0xA323, 0xA323, 0xA323 },
+{ 0xA324, 0xA324, 0xA324 },
+{ 0xA325, 0xA325, 0xA325 },
+{ 0xA326, 0xA326, 0xA326 },
+{ 0xA327, 0xA327, 0xA327 },
+{ 0xA328, 0xA328, 0xA328 },
+{ 0xA329, 0xA329, 0xA329 },
+{ 0xA32A, 0xA32A, 0xA32A },
+{ 0xA32B, 0xA32B, 0xA32B },
+{ 0xA32C, 0xA32C, 0xA32C },
+{ 0xA32D, 0xA32D, 0xA32D },
+{ 0xA32E, 0xA32E, 0xA32E },
+{ 0xA32F, 0xA32F, 0xA32F },
+{ 0xA330, 0xA330, 0xA330 },
+{ 0xA331, 0xA331, 0xA331 },
+{ 0xA332, 0xA332, 0xA332 },
+{ 0xA333, 0xA333, 0xA333 },
+{ 0xA334, 0xA334, 0xA334 },
+{ 0xA335, 0xA335, 0xA335 },
+{ 0xA336, 0xA336, 0xA336 },
+{ 0xA337, 0xA337, 0xA337 },
+{ 0xA338, 0xA338, 0xA338 },
+{ 0xA339, 0xA339, 0xA339 },
+{ 0xA33A, 0xA33A, 0xA33A },
+{ 0xA33B, 0xA33B, 0xA33B },
+{ 0xA33C, 0xA33C, 0xA33C },
+{ 0xA33D, 0xA33D, 0xA33D },
+{ 0xA33E, 0xA33E, 0xA33E },
+{ 0xA33F, 0xA33F, 0xA33F },
+{ 0xA340, 0xA340, 0xA340 },
+{ 0xA341, 0xA341, 0xA341 },
+{ 0xA342, 0xA342, 0xA342 },
+{ 0xA343, 0xA343, 0xA343 },
+{ 0xA344, 0xA344, 0xA344 },
+{ 0xA345, 0xA345, 0xA345 },
+{ 0xA346, 0xA346, 0xA346 },
+{ 0xA347, 0xA347, 0xA347 },
+{ 0xA348, 0xA348, 0xA348 },
+{ 0xA349, 0xA349, 0xA349 },
+{ 0xA34A, 0xA34A, 0xA34A },
+{ 0xA34B, 0xA34B, 0xA34B },
+{ 0xA34C, 0xA34C, 0xA34C },
+{ 0xA34D, 0xA34D, 0xA34D },
+{ 0xA34E, 0xA34E, 0xA34E },
+{ 0xA34F, 0xA34F, 0xA34F },
+{ 0xA350, 0xA350, 0xA350 },
+{ 0xA351, 0xA351, 0xA351 },
+{ 0xA352, 0xA352, 0xA352 },
+{ 0xA353, 0xA353, 0xA353 },
+{ 0xA354, 0xA354, 0xA354 },
+{ 0xA355, 0xA355, 0xA355 },
+{ 0xA356, 0xA356, 0xA356 },
+{ 0xA357, 0xA357, 0xA357 },
+{ 0xA358, 0xA358, 0xA358 },
+{ 0xA359, 0xA359, 0xA359 },
+{ 0xA35A, 0xA35A, 0xA35A },
+{ 0xA35B, 0xA35B, 0xA35B },
+{ 0xA35C, 0xA35C, 0xA35C },
+{ 0xA35D, 0xA35D, 0xA35D },
+{ 0xA35E, 0xA35E, 0xA35E },
+{ 0xA35F, 0xA35F, 0xA35F },
+{ 0xA360, 0xA360, 0xA360 },
+{ 0xA361, 0xA361, 0xA361 },
+{ 0xA362, 0xA362, 0xA362 },
+{ 0xA363, 0xA363, 0xA363 },
+{ 0xA364, 0xA364, 0xA364 },
+{ 0xA365, 0xA365, 0xA365 },
+{ 0xA366, 0xA366, 0xA366 },
+{ 0xA367, 0xA367, 0xA367 },
+{ 0xA368, 0xA368, 0xA368 },
+{ 0xA369, 0xA369, 0xA369 },
+{ 0xA36A, 0xA36A, 0xA36A },
+{ 0xA36B, 0xA36B, 0xA36B },
+{ 0xA36C, 0xA36C, 0xA36C },
+{ 0xA36D, 0xA36D, 0xA36D },
+{ 0xA36E, 0xA36E, 0xA36E },
+{ 0xA36F, 0xA36F, 0xA36F },
+{ 0xA370, 0xA370, 0xA370 },
+{ 0xA371, 0xA371, 0xA371 },
+{ 0xA372, 0xA372, 0xA372 },
+{ 0xA373, 0xA373, 0xA373 },
+{ 0xA374, 0xA374, 0xA374 },
+{ 0xA375, 0xA375, 0xA375 },
+{ 0xA376, 0xA376, 0xA376 },
+{ 0xA377, 0xA377, 0xA377 },
+{ 0xA378, 0xA378, 0xA378 },
+{ 0xA379, 0xA379, 0xA379 },
+{ 0xA37A, 0xA37A, 0xA37A },
+{ 0xA37B, 0xA37B, 0xA37B },
+{ 0xA37C, 0xA37C, 0xA37C },
+{ 0xA37D, 0xA37D, 0xA37D },
+{ 0xA37E, 0xA37E, 0xA37E },
+{ 0xA37F, 0xA37F, 0xA37F },
+{ 0xA380, 0xA380, 0xA380 },
+{ 0xA381, 0xA381, 0xA381 },
+{ 0xA382, 0xA382, 0xA382 },
+{ 0xA383, 0xA383, 0xA383 },
+{ 0xA384, 0xA384, 0xA384 },
+{ 0xA385, 0xA385, 0xA385 },
+{ 0xA386, 0xA386, 0xA386 },
+{ 0xA387, 0xA387, 0xA387 },
+{ 0xA388, 0xA388, 0xA388 },
+{ 0xA389, 0xA389, 0xA389 },
+{ 0xA38A, 0xA38A, 0xA38A },
+{ 0xA38B, 0xA38B, 0xA38B },
+{ 0xA38C, 0xA38C, 0xA38C },
+{ 0xA38D, 0xA38D, 0xA38D },
+{ 0xA38E, 0xA38E, 0xA38E },
+{ 0xA38F, 0xA38F, 0xA38F },
+{ 0xA390, 0xA390, 0xA390 },
+{ 0xA391, 0xA391, 0xA391 },
+{ 0xA392, 0xA392, 0xA392 },
+{ 0xA393, 0xA393, 0xA393 },
+{ 0xA394, 0xA394, 0xA394 },
+{ 0xA395, 0xA395, 0xA395 },
+{ 0xA396, 0xA396, 0xA396 },
+{ 0xA397, 0xA397, 0xA397 },
+{ 0xA398, 0xA398, 0xA398 },
+{ 0xA399, 0xA399, 0xA399 },
+{ 0xA39A, 0xA39A, 0xA39A },
+{ 0xA39B, 0xA39B, 0xA39B },
+{ 0xA39C, 0xA39C, 0xA39C },
+{ 0xA39D, 0xA39D, 0xA39D },
+{ 0xA39E, 0xA39E, 0xA39E },
+{ 0xA39F, 0xA39F, 0xA39F },
+{ 0xA3A0, 0xA3A0, 0xA3A0 },
+{ 0xA3A1, 0xA3A1, 0xA3A1 },
+{ 0xA3A2, 0xA3A2, 0xA3A2 },
+{ 0xA3A3, 0xA3A3, 0xA3A3 },
+{ 0xA3A4, 0xA3A4, 0xA3A4 },
+{ 0xA3A5, 0xA3A5, 0xA3A5 },
+{ 0xA3A6, 0xA3A6, 0xA3A6 },
+{ 0xA3A7, 0xA3A7, 0xA3A7 },
+{ 0xA3A8, 0xA3A8, 0xA3A8 },
+{ 0xA3A9, 0xA3A9, 0xA3A9 },
+{ 0xA3AA, 0xA3AA, 0xA3AA },
+{ 0xA3AB, 0xA3AB, 0xA3AB },
+{ 0xA3AC, 0xA3AC, 0xA3AC },
+{ 0xA3AD, 0xA3AD, 0xA3AD },
+{ 0xA3AE, 0xA3AE, 0xA3AE },
+{ 0xA3AF, 0xA3AF, 0xA3AF },
+{ 0xA3B0, 0xA3B0, 0xA3B0 },
+{ 0xA3B1, 0xA3B1, 0xA3B1 },
+{ 0xA3B2, 0xA3B2, 0xA3B2 },
+{ 0xA3B3, 0xA3B3, 0xA3B3 },
+{ 0xA3B4, 0xA3B4, 0xA3B4 },
+{ 0xA3B5, 0xA3B5, 0xA3B5 },
+{ 0xA3B6, 0xA3B6, 0xA3B6 },
+{ 0xA3B7, 0xA3B7, 0xA3B7 },
+{ 0xA3B8, 0xA3B8, 0xA3B8 },
+{ 0xA3B9, 0xA3B9, 0xA3B9 },
+{ 0xA3BA, 0xA3BA, 0xA3BA },
+{ 0xA3BB, 0xA3BB, 0xA3BB },
+{ 0xA3BC, 0xA3BC, 0xA3BC },
+{ 0xA3BD, 0xA3BD, 0xA3BD },
+{ 0xA3BE, 0xA3BE, 0xA3BE },
+{ 0xA3BF, 0xA3BF, 0xA3BF },
+{ 0xA3C0, 0xA3C0, 0xA3C0 },
+{ 0xA3C1, 0xA3C1, 0xA3C1 },
+{ 0xA3C2, 0xA3C2, 0xA3C2 },
+{ 0xA3C3, 0xA3C3, 0xA3C3 },
+{ 0xA3C4, 0xA3C4, 0xA3C4 },
+{ 0xA3C5, 0xA3C5, 0xA3C5 },
+{ 0xA3C6, 0xA3C6, 0xA3C6 },
+{ 0xA3C7, 0xA3C7, 0xA3C7 },
+{ 0xA3C8, 0xA3C8, 0xA3C8 },
+{ 0xA3C9, 0xA3C9, 0xA3C9 },
+{ 0xA3CA, 0xA3CA, 0xA3CA },
+{ 0xA3CB, 0xA3CB, 0xA3CB },
+{ 0xA3CC, 0xA3CC, 0xA3CC },
+{ 0xA3CD, 0xA3CD, 0xA3CD },
+{ 0xA3CE, 0xA3CE, 0xA3CE },
+{ 0xA3CF, 0xA3CF, 0xA3CF },
+{ 0xA3D0, 0xA3D0, 0xA3D0 },
+{ 0xA3D1, 0xA3D1, 0xA3D1 },
+{ 0xA3D2, 0xA3D2, 0xA3D2 },
+{ 0xA3D3, 0xA3D3, 0xA3D3 },
+{ 0xA3D4, 0xA3D4, 0xA3D4 },
+{ 0xA3D5, 0xA3D5, 0xA3D5 },
+{ 0xA3D6, 0xA3D6, 0xA3D6 },
+{ 0xA3D7, 0xA3D7, 0xA3D7 },
+{ 0xA3D8, 0xA3D8, 0xA3D8 },
+{ 0xA3D9, 0xA3D9, 0xA3D9 },
+{ 0xA3DA, 0xA3DA, 0xA3DA },
+{ 0xA3DB, 0xA3DB, 0xA3DB },
+{ 0xA3DC, 0xA3DC, 0xA3DC },
+{ 0xA3DD, 0xA3DD, 0xA3DD },
+{ 0xA3DE, 0xA3DE, 0xA3DE },
+{ 0xA3DF, 0xA3DF, 0xA3DF },
+{ 0xA3E0, 0xA3E0, 0xA3E0 },
+{ 0xA3E1, 0xA3E1, 0xA3E1 },
+{ 0xA3E2, 0xA3E2, 0xA3E2 },
+{ 0xA3E3, 0xA3E3, 0xA3E3 },
+{ 0xA3E4, 0xA3E4, 0xA3E4 },
+{ 0xA3E5, 0xA3E5, 0xA3E5 },
+{ 0xA3E6, 0xA3E6, 0xA3E6 },
+{ 0xA3E7, 0xA3E7, 0xA3E7 },
+{ 0xA3E8, 0xA3E8, 0xA3E8 },
+{ 0xA3E9, 0xA3E9, 0xA3E9 },
+{ 0xA3EA, 0xA3EA, 0xA3EA },
+{ 0xA3EB, 0xA3EB, 0xA3EB },
+{ 0xA3EC, 0xA3EC, 0xA3EC },
+{ 0xA3ED, 0xA3ED, 0xA3ED },
+{ 0xA3EE, 0xA3EE, 0xA3EE },
+{ 0xA3EF, 0xA3EF, 0xA3EF },
+{ 0xA3F0, 0xA3F0, 0xA3F0 },
+{ 0xA3F1, 0xA3F1, 0xA3F1 },
+{ 0xA3F2, 0xA3F2, 0xA3F2 },
+{ 0xA3F3, 0xA3F3, 0xA3F3 },
+{ 0xA3F4, 0xA3F4, 0xA3F4 },
+{ 0xA3F5, 0xA3F5, 0xA3F5 },
+{ 0xA3F6, 0xA3F6, 0xA3F6 },
+{ 0xA3F7, 0xA3F7, 0xA3F7 },
+{ 0xA3F8, 0xA3F8, 0xA3F8 },
+{ 0xA3F9, 0xA3F9, 0xA3F9 },
+{ 0xA3FA, 0xA3FA, 0xA3FA },
+{ 0xA3FB, 0xA3FB, 0xA3FB },
+{ 0xA3FC, 0xA3FC, 0xA3FC },
+{ 0xA3FD, 0xA3FD, 0xA3FD },
+{ 0xA3FE, 0xA3FE, 0xA3FE },
+{ 0xA3FF, 0xA3FF, 0xA3FF },
+{ 0xA400, 0xA400, 0xA400 },
+{ 0xA401, 0xA401, 0xA401 },
+{ 0xA402, 0xA402, 0xA402 },
+{ 0xA403, 0xA403, 0xA403 },
+{ 0xA404, 0xA404, 0xA404 },
+{ 0xA405, 0xA405, 0xA405 },
+{ 0xA406, 0xA406, 0xA406 },
+{ 0xA407, 0xA407, 0xA407 },
+{ 0xA408, 0xA408, 0xA408 },
+{ 0xA409, 0xA409, 0xA409 },
+{ 0xA40A, 0xA40A, 0xA40A },
+{ 0xA40B, 0xA40B, 0xA40B },
+{ 0xA40C, 0xA40C, 0xA40C },
+{ 0xA40D, 0xA40D, 0xA40D },
+{ 0xA40E, 0xA40E, 0xA40E },
+{ 0xA40F, 0xA40F, 0xA40F },
+{ 0xA410, 0xA410, 0xA410 },
+{ 0xA411, 0xA411, 0xA411 },
+{ 0xA412, 0xA412, 0xA412 },
+{ 0xA413, 0xA413, 0xA413 },
+{ 0xA414, 0xA414, 0xA414 },
+{ 0xA415, 0xA415, 0xA415 },
+{ 0xA416, 0xA416, 0xA416 },
+{ 0xA417, 0xA417, 0xA417 },
+{ 0xA418, 0xA418, 0xA418 },
+{ 0xA419, 0xA419, 0xA419 },
+{ 0xA41A, 0xA41A, 0xA41A },
+{ 0xA41B, 0xA41B, 0xA41B },
+{ 0xA41C, 0xA41C, 0xA41C },
+{ 0xA41D, 0xA41D, 0xA41D },
+{ 0xA41E, 0xA41E, 0xA41E },
+{ 0xA41F, 0xA41F, 0xA41F },
+{ 0xA420, 0xA420, 0xA420 },
+{ 0xA421, 0xA421, 0xA421 },
+{ 0xA422, 0xA422, 0xA422 },
+{ 0xA423, 0xA423, 0xA423 },
+{ 0xA424, 0xA424, 0xA424 },
+{ 0xA425, 0xA425, 0xA425 },
+{ 0xA426, 0xA426, 0xA426 },
+{ 0xA427, 0xA427, 0xA427 },
+{ 0xA428, 0xA428, 0xA428 },
+{ 0xA429, 0xA429, 0xA429 },
+{ 0xA42A, 0xA42A, 0xA42A },
+{ 0xA42B, 0xA42B, 0xA42B },
+{ 0xA42C, 0xA42C, 0xA42C },
+{ 0xA42D, 0xA42D, 0xA42D },
+{ 0xA42E, 0xA42E, 0xA42E },
+{ 0xA42F, 0xA42F, 0xA42F },
+{ 0xA430, 0xA430, 0xA430 },
+{ 0xA431, 0xA431, 0xA431 },
+{ 0xA432, 0xA432, 0xA432 },
+{ 0xA433, 0xA433, 0xA433 },
+{ 0xA434, 0xA434, 0xA434 },
+{ 0xA435, 0xA435, 0xA435 },
+{ 0xA436, 0xA436, 0xA436 },
+{ 0xA437, 0xA437, 0xA437 },
+{ 0xA438, 0xA438, 0xA438 },
+{ 0xA439, 0xA439, 0xA439 },
+{ 0xA43A, 0xA43A, 0xA43A },
+{ 0xA43B, 0xA43B, 0xA43B },
+{ 0xA43C, 0xA43C, 0xA43C },
+{ 0xA43D, 0xA43D, 0xA43D },
+{ 0xA43E, 0xA43E, 0xA43E },
+{ 0xA43F, 0xA43F, 0xA43F },
+{ 0xA440, 0xA440, 0xA440 },
+{ 0xA441, 0xA441, 0xA441 },
+{ 0xA442, 0xA442, 0xA442 },
+{ 0xA443, 0xA443, 0xA443 },
+{ 0xA444, 0xA444, 0xA444 },
+{ 0xA445, 0xA445, 0xA445 },
+{ 0xA446, 0xA446, 0xA446 },
+{ 0xA447, 0xA447, 0xA447 },
+{ 0xA448, 0xA448, 0xA448 },
+{ 0xA449, 0xA449, 0xA449 },
+{ 0xA44A, 0xA44A, 0xA44A },
+{ 0xA44B, 0xA44B, 0xA44B },
+{ 0xA44C, 0xA44C, 0xA44C },
+{ 0xA44D, 0xA44D, 0xA44D },
+{ 0xA44E, 0xA44E, 0xA44E },
+{ 0xA44F, 0xA44F, 0xA44F },
+{ 0xA450, 0xA450, 0xA450 },
+{ 0xA451, 0xA451, 0xA451 },
+{ 0xA452, 0xA452, 0xA452 },
+{ 0xA453, 0xA453, 0xA453 },
+{ 0xA454, 0xA454, 0xA454 },
+{ 0xA455, 0xA455, 0xA455 },
+{ 0xA456, 0xA456, 0xA456 },
+{ 0xA457, 0xA457, 0xA457 },
+{ 0xA458, 0xA458, 0xA458 },
+{ 0xA459, 0xA459, 0xA459 },
+{ 0xA45A, 0xA45A, 0xA45A },
+{ 0xA45B, 0xA45B, 0xA45B },
+{ 0xA45C, 0xA45C, 0xA45C },
+{ 0xA45D, 0xA45D, 0xA45D },
+{ 0xA45E, 0xA45E, 0xA45E },
+{ 0xA45F, 0xA45F, 0xA45F },
+{ 0xA460, 0xA460, 0xA460 },
+{ 0xA461, 0xA461, 0xA461 },
+{ 0xA462, 0xA462, 0xA462 },
+{ 0xA463, 0xA463, 0xA463 },
+{ 0xA464, 0xA464, 0xA464 },
+{ 0xA465, 0xA465, 0xA465 },
+{ 0xA466, 0xA466, 0xA466 },
+{ 0xA467, 0xA467, 0xA467 },
+{ 0xA468, 0xA468, 0xA468 },
+{ 0xA469, 0xA469, 0xA469 },
+{ 0xA46A, 0xA46A, 0xA46A },
+{ 0xA46B, 0xA46B, 0xA46B },
+{ 0xA46C, 0xA46C, 0xA46C },
+{ 0xA46D, 0xA46D, 0xA46D },
+{ 0xA46E, 0xA46E, 0xA46E },
+{ 0xA46F, 0xA46F, 0xA46F },
+{ 0xA470, 0xA470, 0xA470 },
+{ 0xA471, 0xA471, 0xA471 },
+{ 0xA472, 0xA472, 0xA472 },
+{ 0xA473, 0xA473, 0xA473 },
+{ 0xA474, 0xA474, 0xA474 },
+{ 0xA475, 0xA475, 0xA475 },
+{ 0xA476, 0xA476, 0xA476 },
+{ 0xA477, 0xA477, 0xA477 },
+{ 0xA478, 0xA478, 0xA478 },
+{ 0xA479, 0xA479, 0xA479 },
+{ 0xA47A, 0xA47A, 0xA47A },
+{ 0xA47B, 0xA47B, 0xA47B },
+{ 0xA47C, 0xA47C, 0xA47C },
+{ 0xA47D, 0xA47D, 0xA47D },
+{ 0xA47E, 0xA47E, 0xA47E },
+{ 0xA47F, 0xA47F, 0xA47F },
+{ 0xA480, 0xA480, 0xA480 },
+{ 0xA481, 0xA481, 0xA481 },
+{ 0xA482, 0xA482, 0xA482 },
+{ 0xA483, 0xA483, 0xA483 },
+{ 0xA484, 0xA484, 0xA484 },
+{ 0xA485, 0xA485, 0xA485 },
+{ 0xA486, 0xA486, 0xA486 },
+{ 0xA487, 0xA487, 0xA487 },
+{ 0xA488, 0xA488, 0xA488 },
+{ 0xA489, 0xA489, 0xA489 },
+{ 0xA48A, 0xA48A, 0xA48A },
+{ 0xA48B, 0xA48B, 0xA48B },
+{ 0xA48C, 0xA48C, 0xA48C },
+{ 0xA800, 0xA800, 0xA800 },
+{ 0xA801, 0xA801, 0xA801 },
+{ 0xA803, 0xA803, 0xA803 },
+{ 0xA804, 0xA804, 0xA804 },
+{ 0xA805, 0xA805, 0xA805 },
+{ 0xA806, 0xA806, 0xA806 },
+{ 0xA807, 0xA807, 0xA807 },
+{ 0xA808, 0xA808, 0xA808 },
+{ 0xA809, 0xA809, 0xA809 },
+{ 0xA80A, 0xA80A, 0xA80A },
+{ 0xA80B, 0xA80B, 0xA80B },
+{ 0xA80C, 0xA80C, 0xA80C },
+{ 0xA80D, 0xA80D, 0xA80D },
+{ 0xA80E, 0xA80E, 0xA80E },
+{ 0xA80F, 0xA80F, 0xA80F },
+{ 0xA810, 0xA810, 0xA810 },
+{ 0xA811, 0xA811, 0xA811 },
+{ 0xA812, 0xA812, 0xA812 },
+{ 0xA813, 0xA813, 0xA813 },
+{ 0xA814, 0xA814, 0xA814 },
+{ 0xA815, 0xA815, 0xA815 },
+{ 0xA816, 0xA816, 0xA816 },
+{ 0xA817, 0xA817, 0xA817 },
+{ 0xA818, 0xA818, 0xA818 },
+{ 0xA819, 0xA819, 0xA819 },
+{ 0xA81A, 0xA81A, 0xA81A },
+{ 0xA81B, 0xA81B, 0xA81B },
+{ 0xA81C, 0xA81C, 0xA81C },
+{ 0xA81D, 0xA81D, 0xA81D },
+{ 0xA81E, 0xA81E, 0xA81E },
+{ 0xA81F, 0xA81F, 0xA81F },
+{ 0xA820, 0xA820, 0xA820 },
+{ 0xA821, 0xA821, 0xA821 },
+{ 0xA822, 0xA822, 0xA822 },
+{ 0xA825, 0xA825, 0xA825 },
+{ 0xA826, 0xA826, 0xA826 },
+{ 0xAC00, 0xAC00, 0xAC00 },
+{ 0xD7A3, 0xD7A3, 0xD7A3 },
+{ 0xF900, 0xF900, 0xF900 },
+{ 0xF901, 0xF901, 0xF901 },
+{ 0xF902, 0xF902, 0xF902 },
+{ 0xF903, 0xF903, 0xF903 },
+{ 0xF904, 0xF904, 0xF904 },
+{ 0xF905, 0xF905, 0xF905 },
+{ 0xF906, 0xF906, 0xF906 },
+{ 0xF907, 0xF907, 0xF907 },
+{ 0xF908, 0xF908, 0xF908 },
+{ 0xF909, 0xF909, 0xF909 },
+{ 0xF90A, 0xF90A, 0xF90A },
+{ 0xF90B, 0xF90B, 0xF90B },
+{ 0xF90C, 0xF90C, 0xF90C },
+{ 0xF90D, 0xF90D, 0xF90D },
+{ 0xF90E, 0xF90E, 0xF90E },
+{ 0xF90F, 0xF90F, 0xF90F },
+{ 0xF910, 0xF910, 0xF910 },
+{ 0xF911, 0xF911, 0xF911 },
+{ 0xF912, 0xF912, 0xF912 },
+{ 0xF913, 0xF913, 0xF913 },
+{ 0xF914, 0xF914, 0xF914 },
+{ 0xF915, 0xF915, 0xF915 },
+{ 0xF916, 0xF916, 0xF916 },
+{ 0xF917, 0xF917, 0xF917 },
+{ 0xF918, 0xF918, 0xF918 },
+{ 0xF919, 0xF919, 0xF919 },
+{ 0xF91A, 0xF91A, 0xF91A },
+{ 0xF91B, 0xF91B, 0xF91B },
+{ 0xF91C, 0xF91C, 0xF91C },
+{ 0xF91D, 0xF91D, 0xF91D },
+{ 0xF91E, 0xF91E, 0xF91E },
+{ 0xF91F, 0xF91F, 0xF91F },
+{ 0xF920, 0xF920, 0xF920 },
+{ 0xF921, 0xF921, 0xF921 },
+{ 0xF922, 0xF922, 0xF922 },
+{ 0xF923, 0xF923, 0xF923 },
+{ 0xF924, 0xF924, 0xF924 },
+{ 0xF925, 0xF925, 0xF925 },
+{ 0xF926, 0xF926, 0xF926 },
+{ 0xF927, 0xF927, 0xF927 },
+{ 0xF928, 0xF928, 0xF928 },
+{ 0xF929, 0xF929, 0xF929 },
+{ 0xF92A, 0xF92A, 0xF92A },
+{ 0xF92B, 0xF92B, 0xF92B },
+{ 0xF92C, 0xF92C, 0xF92C },
+{ 0xF92D, 0xF92D, 0xF92D },
+{ 0xF92E, 0xF92E, 0xF92E },
+{ 0xF92F, 0xF92F, 0xF92F },
+{ 0xF930, 0xF930, 0xF930 },
+{ 0xF931, 0xF931, 0xF931 },
+{ 0xF932, 0xF932, 0xF932 },
+{ 0xF933, 0xF933, 0xF933 },
+{ 0xF934, 0xF934, 0xF934 },
+{ 0xF935, 0xF935, 0xF935 },
+{ 0xF936, 0xF936, 0xF936 },
+{ 0xF937, 0xF937, 0xF937 },
+{ 0xF938, 0xF938, 0xF938 },
+{ 0xF939, 0xF939, 0xF939 },
+{ 0xF93A, 0xF93A, 0xF93A },
+{ 0xF93B, 0xF93B, 0xF93B },
+{ 0xF93C, 0xF93C, 0xF93C },
+{ 0xF93D, 0xF93D, 0xF93D },
+{ 0xF93E, 0xF93E, 0xF93E },
+{ 0xF93F, 0xF93F, 0xF93F },
+{ 0xF940, 0xF940, 0xF940 },
+{ 0xF941, 0xF941, 0xF941 },
+{ 0xF942, 0xF942, 0xF942 },
+{ 0xF943, 0xF943, 0xF943 },
+{ 0xF944, 0xF944, 0xF944 },
+{ 0xF945, 0xF945, 0xF945 },
+{ 0xF946, 0xF946, 0xF946 },
+{ 0xF947, 0xF947, 0xF947 },
+{ 0xF948, 0xF948, 0xF948 },
+{ 0xF949, 0xF949, 0xF949 },
+{ 0xF94A, 0xF94A, 0xF94A },
+{ 0xF94B, 0xF94B, 0xF94B },
+{ 0xF94C, 0xF94C, 0xF94C },
+{ 0xF94D, 0xF94D, 0xF94D },
+{ 0xF94E, 0xF94E, 0xF94E },
+{ 0xF94F, 0xF94F, 0xF94F },
+{ 0xF950, 0xF950, 0xF950 },
+{ 0xF951, 0xF951, 0xF951 },
+{ 0xF952, 0xF952, 0xF952 },
+{ 0xF953, 0xF953, 0xF953 },
+{ 0xF954, 0xF954, 0xF954 },
+{ 0xF955, 0xF955, 0xF955 },
+{ 0xF956, 0xF956, 0xF956 },
+{ 0xF957, 0xF957, 0xF957 },
+{ 0xF958, 0xF958, 0xF958 },
+{ 0xF959, 0xF959, 0xF959 },
+{ 0xF95A, 0xF95A, 0xF95A },
+{ 0xF95B, 0xF95B, 0xF95B },
+{ 0xF95C, 0xF95C, 0xF95C },
+{ 0xF95D, 0xF95D, 0xF95D },
+{ 0xF95E, 0xF95E, 0xF95E },
+{ 0xF95F, 0xF95F, 0xF95F },
+{ 0xF960, 0xF960, 0xF960 },
+{ 0xF961, 0xF961, 0xF961 },
+{ 0xF962, 0xF962, 0xF962 },
+{ 0xF963, 0xF963, 0xF963 },
+{ 0xF964, 0xF964, 0xF964 },
+{ 0xF965, 0xF965, 0xF965 },
+{ 0xF966, 0xF966, 0xF966 },
+{ 0xF967, 0xF967, 0xF967 },
+{ 0xF968, 0xF968, 0xF968 },
+{ 0xF969, 0xF969, 0xF969 },
+{ 0xF96A, 0xF96A, 0xF96A },
+{ 0xF96B, 0xF96B, 0xF96B },
+{ 0xF96C, 0xF96C, 0xF96C },
+{ 0xF96D, 0xF96D, 0xF96D },
+{ 0xF96E, 0xF96E, 0xF96E },
+{ 0xF96F, 0xF96F, 0xF96F },
+{ 0xF970, 0xF970, 0xF970 },
+{ 0xF971, 0xF971, 0xF971 },
+{ 0xF972, 0xF972, 0xF972 },
+{ 0xF973, 0xF973, 0xF973 },
+{ 0xF974, 0xF974, 0xF974 },
+{ 0xF975, 0xF975, 0xF975 },
+{ 0xF976, 0xF976, 0xF976 },
+{ 0xF977, 0xF977, 0xF977 },
+{ 0xF978, 0xF978, 0xF978 },
+{ 0xF979, 0xF979, 0xF979 },
+{ 0xF97A, 0xF97A, 0xF97A },
+{ 0xF97B, 0xF97B, 0xF97B },
+{ 0xF97C, 0xF97C, 0xF97C },
+{ 0xF97D, 0xF97D, 0xF97D },
+{ 0xF97E, 0xF97E, 0xF97E },
+{ 0xF97F, 0xF97F, 0xF97F },
+{ 0xF980, 0xF980, 0xF980 },
+{ 0xF981, 0xF981, 0xF981 },
+{ 0xF982, 0xF982, 0xF982 },
+{ 0xF983, 0xF983, 0xF983 },
+{ 0xF984, 0xF984, 0xF984 },
+{ 0xF985, 0xF985, 0xF985 },
+{ 0xF986, 0xF986, 0xF986 },
+{ 0xF987, 0xF987, 0xF987 },
+{ 0xF988, 0xF988, 0xF988 },
+{ 0xF989, 0xF989, 0xF989 },
+{ 0xF98A, 0xF98A, 0xF98A },
+{ 0xF98B, 0xF98B, 0xF98B },
+{ 0xF98C, 0xF98C, 0xF98C },
+{ 0xF98D, 0xF98D, 0xF98D },
+{ 0xF98E, 0xF98E, 0xF98E },
+{ 0xF98F, 0xF98F, 0xF98F },
+{ 0xF990, 0xF990, 0xF990 },
+{ 0xF991, 0xF991, 0xF991 },
+{ 0xF992, 0xF992, 0xF992 },
+{ 0xF993, 0xF993, 0xF993 },
+{ 0xF994, 0xF994, 0xF994 },
+{ 0xF995, 0xF995, 0xF995 },
+{ 0xF996, 0xF996, 0xF996 },
+{ 0xF997, 0xF997, 0xF997 },
+{ 0xF998, 0xF998, 0xF998 },
+{ 0xF999, 0xF999, 0xF999 },
+{ 0xF99A, 0xF99A, 0xF99A },
+{ 0xF99B, 0xF99B, 0xF99B },
+{ 0xF99C, 0xF99C, 0xF99C },
+{ 0xF99D, 0xF99D, 0xF99D },
+{ 0xF99E, 0xF99E, 0xF99E },
+{ 0xF99F, 0xF99F, 0xF99F },
+{ 0xF9A0, 0xF9A0, 0xF9A0 },
+{ 0xF9A1, 0xF9A1, 0xF9A1 },
+{ 0xF9A2, 0xF9A2, 0xF9A2 },
+{ 0xF9A3, 0xF9A3, 0xF9A3 },
+{ 0xF9A4, 0xF9A4, 0xF9A4 },
+{ 0xF9A5, 0xF9A5, 0xF9A5 },
+{ 0xF9A6, 0xF9A6, 0xF9A6 },
+{ 0xF9A7, 0xF9A7, 0xF9A7 },
+{ 0xF9A8, 0xF9A8, 0xF9A8 },
+{ 0xF9A9, 0xF9A9, 0xF9A9 },
+{ 0xF9AA, 0xF9AA, 0xF9AA },
+{ 0xF9AB, 0xF9AB, 0xF9AB },
+{ 0xF9AC, 0xF9AC, 0xF9AC },
+{ 0xF9AD, 0xF9AD, 0xF9AD },
+{ 0xF9AE, 0xF9AE, 0xF9AE },
+{ 0xF9AF, 0xF9AF, 0xF9AF },
+{ 0xF9B0, 0xF9B0, 0xF9B0 },
+{ 0xF9B1, 0xF9B1, 0xF9B1 },
+{ 0xF9B2, 0xF9B2, 0xF9B2 },
+{ 0xF9B3, 0xF9B3, 0xF9B3 },
+{ 0xF9B4, 0xF9B4, 0xF9B4 },
+{ 0xF9B5, 0xF9B5, 0xF9B5 },
+{ 0xF9B6, 0xF9B6, 0xF9B6 },
+{ 0xF9B7, 0xF9B7, 0xF9B7 },
+{ 0xF9B8, 0xF9B8, 0xF9B8 },
+{ 0xF9B9, 0xF9B9, 0xF9B9 },
+{ 0xF9BA, 0xF9BA, 0xF9BA },
+{ 0xF9BB, 0xF9BB, 0xF9BB },
+{ 0xF9BC, 0xF9BC, 0xF9BC },
+{ 0xF9BD, 0xF9BD, 0xF9BD },
+{ 0xF9BE, 0xF9BE, 0xF9BE },
+{ 0xF9BF, 0xF9BF, 0xF9BF },
+{ 0xF9C0, 0xF9C0, 0xF9C0 },
+{ 0xF9C1, 0xF9C1, 0xF9C1 },
+{ 0xF9C2, 0xF9C2, 0xF9C2 },
+{ 0xF9C3, 0xF9C3, 0xF9C3 },
+{ 0xF9C4, 0xF9C4, 0xF9C4 },
+{ 0xF9C5, 0xF9C5, 0xF9C5 },
+{ 0xF9C6, 0xF9C6, 0xF9C6 },
+{ 0xF9C7, 0xF9C7, 0xF9C7 },
+{ 0xF9C8, 0xF9C8, 0xF9C8 },
+{ 0xF9C9, 0xF9C9, 0xF9C9 },
+{ 0xF9CA, 0xF9CA, 0xF9CA },
+{ 0xF9CB, 0xF9CB, 0xF9CB },
+{ 0xF9CC, 0xF9CC, 0xF9CC },
+{ 0xF9CD, 0xF9CD, 0xF9CD },
+{ 0xF9CE, 0xF9CE, 0xF9CE },
+{ 0xF9CF, 0xF9CF, 0xF9CF },
+{ 0xF9D0, 0xF9D0, 0xF9D0 },
+{ 0xF9D1, 0xF9D1, 0xF9D1 },
+{ 0xF9D2, 0xF9D2, 0xF9D2 },
+{ 0xF9D3, 0xF9D3, 0xF9D3 },
+{ 0xF9D4, 0xF9D4, 0xF9D4 },
+{ 0xF9D5, 0xF9D5, 0xF9D5 },
+{ 0xF9D6, 0xF9D6, 0xF9D6 },
+{ 0xF9D7, 0xF9D7, 0xF9D7 },
+{ 0xF9D8, 0xF9D8, 0xF9D8 },
+{ 0xF9D9, 0xF9D9, 0xF9D9 },
+{ 0xF9DA, 0xF9DA, 0xF9DA },
+{ 0xF9DB, 0xF9DB, 0xF9DB },
+{ 0xF9DC, 0xF9DC, 0xF9DC },
+{ 0xF9DD, 0xF9DD, 0xF9DD },
+{ 0xF9DE, 0xF9DE, 0xF9DE },
+{ 0xF9DF, 0xF9DF, 0xF9DF },
+{ 0xF9E0, 0xF9E0, 0xF9E0 },
+{ 0xF9E1, 0xF9E1, 0xF9E1 },
+{ 0xF9E2, 0xF9E2, 0xF9E2 },
+{ 0xF9E3, 0xF9E3, 0xF9E3 },
+{ 0xF9E4, 0xF9E4, 0xF9E4 },
+{ 0xF9E5, 0xF9E5, 0xF9E5 },
+{ 0xF9E6, 0xF9E6, 0xF9E6 },
+{ 0xF9E7, 0xF9E7, 0xF9E7 },
+{ 0xF9E8, 0xF9E8, 0xF9E8 },
+{ 0xF9E9, 0xF9E9, 0xF9E9 },
+{ 0xF9EA, 0xF9EA, 0xF9EA },
+{ 0xF9EB, 0xF9EB, 0xF9EB },
+{ 0xF9EC, 0xF9EC, 0xF9EC },
+{ 0xF9ED, 0xF9ED, 0xF9ED },
+{ 0xF9EE, 0xF9EE, 0xF9EE },
+{ 0xF9EF, 0xF9EF, 0xF9EF },
+{ 0xF9F0, 0xF9F0, 0xF9F0 },
+{ 0xF9F1, 0xF9F1, 0xF9F1 },
+{ 0xF9F2, 0xF9F2, 0xF9F2 },
+{ 0xF9F3, 0xF9F3, 0xF9F3 },
+{ 0xF9F4, 0xF9F4, 0xF9F4 },
+{ 0xF9F5, 0xF9F5, 0xF9F5 },
+{ 0xF9F6, 0xF9F6, 0xF9F6 },
+{ 0xF9F7, 0xF9F7, 0xF9F7 },
+{ 0xF9F8, 0xF9F8, 0xF9F8 },
+{ 0xF9F9, 0xF9F9, 0xF9F9 },
+{ 0xF9FA, 0xF9FA, 0xF9FA },
+{ 0xF9FB, 0xF9FB, 0xF9FB },
+{ 0xF9FC, 0xF9FC, 0xF9FC },
+{ 0xF9FD, 0xF9FD, 0xF9FD },
+{ 0xF9FE, 0xF9FE, 0xF9FE },
+{ 0xF9FF, 0xF9FF, 0xF9FF },
+{ 0xFA00, 0xFA00, 0xFA00 },
+{ 0xFA01, 0xFA01, 0xFA01 },
+{ 0xFA02, 0xFA02, 0xFA02 },
+{ 0xFA03, 0xFA03, 0xFA03 },
+{ 0xFA04, 0xFA04, 0xFA04 },
+{ 0xFA05, 0xFA05, 0xFA05 },
+{ 0xFA06, 0xFA06, 0xFA06 },
+{ 0xFA07, 0xFA07, 0xFA07 },
+{ 0xFA08, 0xFA08, 0xFA08 },
+{ 0xFA09, 0xFA09, 0xFA09 },
+{ 0xFA0A, 0xFA0A, 0xFA0A },
+{ 0xFA0B, 0xFA0B, 0xFA0B },
+{ 0xFA0C, 0xFA0C, 0xFA0C },
+{ 0xFA0D, 0xFA0D, 0xFA0D },
+{ 0xFA0E, 0xFA0E, 0xFA0E },
+{ 0xFA0F, 0xFA0F, 0xFA0F },
+{ 0xFA10, 0xFA10, 0xFA10 },
+{ 0xFA11, 0xFA11, 0xFA11 },
+{ 0xFA12, 0xFA12, 0xFA12 },
+{ 0xFA13, 0xFA13, 0xFA13 },
+{ 0xFA14, 0xFA14, 0xFA14 },
+{ 0xFA15, 0xFA15, 0xFA15 },
+{ 0xFA16, 0xFA16, 0xFA16 },
+{ 0xFA17, 0xFA17, 0xFA17 },
+{ 0xFA18, 0xFA18, 0xFA18 },
+{ 0xFA19, 0xFA19, 0xFA19 },
+{ 0xFA1A, 0xFA1A, 0xFA1A },
+{ 0xFA1B, 0xFA1B, 0xFA1B },
+{ 0xFA1C, 0xFA1C, 0xFA1C },
+{ 0xFA1D, 0xFA1D, 0xFA1D },
+{ 0xFA1E, 0xFA1E, 0xFA1E },
+{ 0xFA1F, 0xFA1F, 0xFA1F },
+{ 0xFA20, 0xFA20, 0xFA20 },
+{ 0xFA21, 0xFA21, 0xFA21 },
+{ 0xFA22, 0xFA22, 0xFA22 },
+{ 0xFA23, 0xFA23, 0xFA23 },
+{ 0xFA24, 0xFA24, 0xFA24 },
+{ 0xFA25, 0xFA25, 0xFA25 },
+{ 0xFA26, 0xFA26, 0xFA26 },
+{ 0xFA27, 0xFA27, 0xFA27 },
+{ 0xFA28, 0xFA28, 0xFA28 },
+{ 0xFA29, 0xFA29, 0xFA29 },
+{ 0xFA2A, 0xFA2A, 0xFA2A },
+{ 0xFA2B, 0xFA2B, 0xFA2B },
+{ 0xFA2C, 0xFA2C, 0xFA2C },
+{ 0xFA2D, 0xFA2D, 0xFA2D },
+{ 0xFA30, 0xFA30, 0xFA30 },
+{ 0xFA31, 0xFA31, 0xFA31 },
+{ 0xFA32, 0xFA32, 0xFA32 },
+{ 0xFA33, 0xFA33, 0xFA33 },
+{ 0xFA34, 0xFA34, 0xFA34 },
+{ 0xFA35, 0xFA35, 0xFA35 },
+{ 0xFA36, 0xFA36, 0xFA36 },
+{ 0xFA37, 0xFA37, 0xFA37 },
+{ 0xFA38, 0xFA38, 0xFA38 },
+{ 0xFA39, 0xFA39, 0xFA39 },
+{ 0xFA3A, 0xFA3A, 0xFA3A },
+{ 0xFA3B, 0xFA3B, 0xFA3B },
+{ 0xFA3C, 0xFA3C, 0xFA3C },
+{ 0xFA3D, 0xFA3D, 0xFA3D },
+{ 0xFA3E, 0xFA3E, 0xFA3E },
+{ 0xFA3F, 0xFA3F, 0xFA3F },
+{ 0xFA40, 0xFA40, 0xFA40 },
+{ 0xFA41, 0xFA41, 0xFA41 },
+{ 0xFA42, 0xFA42, 0xFA42 },
+{ 0xFA43, 0xFA43, 0xFA43 },
+{ 0xFA44, 0xFA44, 0xFA44 },
+{ 0xFA45, 0xFA45, 0xFA45 },
+{ 0xFA46, 0xFA46, 0xFA46 },
+{ 0xFA47, 0xFA47, 0xFA47 },
+{ 0xFA48, 0xFA48, 0xFA48 },
+{ 0xFA49, 0xFA49, 0xFA49 },
+{ 0xFA4A, 0xFA4A, 0xFA4A },
+{ 0xFA4B, 0xFA4B, 0xFA4B },
+{ 0xFA4C, 0xFA4C, 0xFA4C },
+{ 0xFA4D, 0xFA4D, 0xFA4D },
+{ 0xFA4E, 0xFA4E, 0xFA4E },
+{ 0xFA4F, 0xFA4F, 0xFA4F },
+{ 0xFA50, 0xFA50, 0xFA50 },
+{ 0xFA51, 0xFA51, 0xFA51 },
+{ 0xFA52, 0xFA52, 0xFA52 },
+{ 0xFA53, 0xFA53, 0xFA53 },
+{ 0xFA54, 0xFA54, 0xFA54 },
+{ 0xFA55, 0xFA55, 0xFA55 },
+{ 0xFA56, 0xFA56, 0xFA56 },
+{ 0xFA57, 0xFA57, 0xFA57 },
+{ 0xFA58, 0xFA58, 0xFA58 },
+{ 0xFA59, 0xFA59, 0xFA59 },
+{ 0xFA5A, 0xFA5A, 0xFA5A },
+{ 0xFA5B, 0xFA5B, 0xFA5B },
+{ 0xFA5C, 0xFA5C, 0xFA5C },
+{ 0xFA5D, 0xFA5D, 0xFA5D },
+{ 0xFA5E, 0xFA5E, 0xFA5E },
+{ 0xFA5F, 0xFA5F, 0xFA5F },
+{ 0xFA60, 0xFA60, 0xFA60 },
+{ 0xFA61, 0xFA61, 0xFA61 },
+{ 0xFA62, 0xFA62, 0xFA62 },
+{ 0xFA63, 0xFA63, 0xFA63 },
+{ 0xFA64, 0xFA64, 0xFA64 },
+{ 0xFA65, 0xFA65, 0xFA65 },
+{ 0xFA66, 0xFA66, 0xFA66 },
+{ 0xFA67, 0xFA67, 0xFA67 },
+{ 0xFA68, 0xFA68, 0xFA68 },
+{ 0xFA69, 0xFA69, 0xFA69 },
+{ 0xFA6A, 0xFA6A, 0xFA6A },
+{ 0xFA70, 0xFA70, 0xFA70 },
+{ 0xFA71, 0xFA71, 0xFA71 },
+{ 0xFA72, 0xFA72, 0xFA72 },
+{ 0xFA73, 0xFA73, 0xFA73 },
+{ 0xFA74, 0xFA74, 0xFA74 },
+{ 0xFA75, 0xFA75, 0xFA75 },
+{ 0xFA76, 0xFA76, 0xFA76 },
+{ 0xFA77, 0xFA77, 0xFA77 },
+{ 0xFA78, 0xFA78, 0xFA78 },
+{ 0xFA79, 0xFA79, 0xFA79 },
+{ 0xFA7A, 0xFA7A, 0xFA7A },
+{ 0xFA7B, 0xFA7B, 0xFA7B },
+{ 0xFA7C, 0xFA7C, 0xFA7C },
+{ 0xFA7D, 0xFA7D, 0xFA7D },
+{ 0xFA7E, 0xFA7E, 0xFA7E },
+{ 0xFA7F, 0xFA7F, 0xFA7F },
+{ 0xFA80, 0xFA80, 0xFA80 },
+{ 0xFA81, 0xFA81, 0xFA81 },
+{ 0xFA82, 0xFA82, 0xFA82 },
+{ 0xFA83, 0xFA83, 0xFA83 },
+{ 0xFA84, 0xFA84, 0xFA84 },
+{ 0xFA85, 0xFA85, 0xFA85 },
+{ 0xFA86, 0xFA86, 0xFA86 },
+{ 0xFA87, 0xFA87, 0xFA87 },
+{ 0xFA88, 0xFA88, 0xFA88 },
+{ 0xFA89, 0xFA89, 0xFA89 },
+{ 0xFA8A, 0xFA8A, 0xFA8A },
+{ 0xFA8B, 0xFA8B, 0xFA8B },
+{ 0xFA8C, 0xFA8C, 0xFA8C },
+{ 0xFA8D, 0xFA8D, 0xFA8D },
+{ 0xFA8E, 0xFA8E, 0xFA8E },
+{ 0xFA8F, 0xFA8F, 0xFA8F },
+{ 0xFA90, 0xFA90, 0xFA90 },
+{ 0xFA91, 0xFA91, 0xFA91 },
+{ 0xFA92, 0xFA92, 0xFA92 },
+{ 0xFA93, 0xFA93, 0xFA93 },
+{ 0xFA94, 0xFA94, 0xFA94 },
+{ 0xFA95, 0xFA95, 0xFA95 },
+{ 0xFA96, 0xFA96, 0xFA96 },
+{ 0xFA97, 0xFA97, 0xFA97 },
+{ 0xFA98, 0xFA98, 0xFA98 },
+{ 0xFA99, 0xFA99, 0xFA99 },
+{ 0xFA9A, 0xFA9A, 0xFA9A },
+{ 0xFA9B, 0xFA9B, 0xFA9B },
+{ 0xFA9C, 0xFA9C, 0xFA9C },
+{ 0xFA9D, 0xFA9D, 0xFA9D },
+{ 0xFA9E, 0xFA9E, 0xFA9E },
+{ 0xFA9F, 0xFA9F, 0xFA9F },
+{ 0xFAA0, 0xFAA0, 0xFAA0 },
+{ 0xFAA1, 0xFAA1, 0xFAA1 },
+{ 0xFAA2, 0xFAA2, 0xFAA2 },
+{ 0xFAA3, 0xFAA3, 0xFAA3 },
+{ 0xFAA4, 0xFAA4, 0xFAA4 },
+{ 0xFAA5, 0xFAA5, 0xFAA5 },
+{ 0xFAA6, 0xFAA6, 0xFAA6 },
+{ 0xFAA7, 0xFAA7, 0xFAA7 },
+{ 0xFAA8, 0xFAA8, 0xFAA8 },
+{ 0xFAA9, 0xFAA9, 0xFAA9 },
+{ 0xFAAA, 0xFAAA, 0xFAAA },
+{ 0xFAAB, 0xFAAB, 0xFAAB },
+{ 0xFAAC, 0xFAAC, 0xFAAC },
+{ 0xFAAD, 0xFAAD, 0xFAAD },
+{ 0xFAAE, 0xFAAE, 0xFAAE },
+{ 0xFAAF, 0xFAAF, 0xFAAF },
+{ 0xFAB0, 0xFAB0, 0xFAB0 },
+{ 0xFAB1, 0xFAB1, 0xFAB1 },
+{ 0xFAB2, 0xFAB2, 0xFAB2 },
+{ 0xFAB3, 0xFAB3, 0xFAB3 },
+{ 0xFAB4, 0xFAB4, 0xFAB4 },
+{ 0xFAB5, 0xFAB5, 0xFAB5 },
+{ 0xFAB6, 0xFAB6, 0xFAB6 },
+{ 0xFAB7, 0xFAB7, 0xFAB7 },
+{ 0xFAB8, 0xFAB8, 0xFAB8 },
+{ 0xFAB9, 0xFAB9, 0xFAB9 },
+{ 0xFABA, 0xFABA, 0xFABA },
+{ 0xFABB, 0xFABB, 0xFABB },
+{ 0xFABC, 0xFABC, 0xFABC },
+{ 0xFABD, 0xFABD, 0xFABD },
+{ 0xFABE, 0xFABE, 0xFABE },
+{ 0xFABF, 0xFABF, 0xFABF },
+{ 0xFAC0, 0xFAC0, 0xFAC0 },
+{ 0xFAC1, 0xFAC1, 0xFAC1 },
+{ 0xFAC2, 0xFAC2, 0xFAC2 },
+{ 0xFAC3, 0xFAC3, 0xFAC3 },
+{ 0xFAC4, 0xFAC4, 0xFAC4 },
+{ 0xFAC5, 0xFAC5, 0xFAC5 },
+{ 0xFAC6, 0xFAC6, 0xFAC6 },
+{ 0xFAC7, 0xFAC7, 0xFAC7 },
+{ 0xFAC8, 0xFAC8, 0xFAC8 },
+{ 0xFAC9, 0xFAC9, 0xFAC9 },
+{ 0xFACA, 0xFACA, 0xFACA },
+{ 0xFACB, 0xFACB, 0xFACB },
+{ 0xFACC, 0xFACC, 0xFACC },
+{ 0xFACD, 0xFACD, 0xFACD },
+{ 0xFACE, 0xFACE, 0xFACE },
+{ 0xFACF, 0xFACF, 0xFACF },
+{ 0xFAD0, 0xFAD0, 0xFAD0 },
+{ 0xFAD1, 0xFAD1, 0xFAD1 },
+{ 0xFAD2, 0xFAD2, 0xFAD2 },
+{ 0xFAD3, 0xFAD3, 0xFAD3 },
+{ 0xFAD4, 0xFAD4, 0xFAD4 },
+{ 0xFAD5, 0xFAD5, 0xFAD5 },
+{ 0xFAD6, 0xFAD6, 0xFAD6 },
+{ 0xFAD7, 0xFAD7, 0xFAD7 },
+{ 0xFAD8, 0xFAD8, 0xFAD8 },
+{ 0xFAD9, 0xFAD9, 0xFAD9 },
+{ 0xFB00, 0xFB00, 0xFB00 },
+{ 0xFB01, 0xFB01, 0xFB01 },
+{ 0xFB02, 0xFB02, 0xFB02 },
+{ 0xFB03, 0xFB03, 0xFB03 },
+{ 0xFB04, 0xFB04, 0xFB04 },
+{ 0xFB05, 0xFB05, 0xFB05 },
+{ 0xFB06, 0xFB06, 0xFB06 },
+{ 0xFB13, 0xFB13, 0xFB13 },
+{ 0xFB14, 0xFB14, 0xFB14 },
+{ 0xFB15, 0xFB15, 0xFB15 },
+{ 0xFB16, 0xFB16, 0xFB16 },
+{ 0xFB17, 0xFB17, 0xFB17 },
+{ 0xFB1D, 0xFB1D, 0xFB1D },
+{ 0xFB1E, 0xFB1E, 0xFB1E },
+{ 0xFB1F, 0xFB1F, 0xFB1F },
+{ 0xFB20, 0xFB20, 0xFB20 },
+{ 0xFB21, 0xFB21, 0xFB21 },
+{ 0xFB22, 0xFB22, 0xFB22 },
+{ 0xFB23, 0xFB23, 0xFB23 },
+{ 0xFB24, 0xFB24, 0xFB24 },
+{ 0xFB25, 0xFB25, 0xFB25 },
+{ 0xFB26, 0xFB26, 0xFB26 },
+{ 0xFB27, 0xFB27, 0xFB27 },
+{ 0xFB28, 0xFB28, 0xFB28 },
+{ 0xFB2A, 0xFB2A, 0xFB2A },
+{ 0xFB2B, 0xFB2B, 0xFB2B },
+{ 0xFB2C, 0xFB2C, 0xFB2C },
+{ 0xFB2D, 0xFB2D, 0xFB2D },
+{ 0xFB2E, 0xFB2E, 0xFB2E },
+{ 0xFB2F, 0xFB2F, 0xFB2F },
+{ 0xFB30, 0xFB30, 0xFB30 },
+{ 0xFB31, 0xFB31, 0xFB31 },
+{ 0xFB32, 0xFB32, 0xFB32 },
+{ 0xFB33, 0xFB33, 0xFB33 },
+{ 0xFB34, 0xFB34, 0xFB34 },
+{ 0xFB35, 0xFB35, 0xFB35 },
+{ 0xFB36, 0xFB36, 0xFB36 },
+{ 0xFB38, 0xFB38, 0xFB38 },
+{ 0xFB39, 0xFB39, 0xFB39 },
+{ 0xFB3A, 0xFB3A, 0xFB3A },
+{ 0xFB3B, 0xFB3B, 0xFB3B },
+{ 0xFB3C, 0xFB3C, 0xFB3C },
+{ 0xFB3E, 0xFB3E, 0xFB3E },
+{ 0xFB40, 0xFB40, 0xFB40 },
+{ 0xFB41, 0xFB41, 0xFB41 },
+{ 0xFB43, 0xFB43, 0xFB43 },
+{ 0xFB44, 0xFB44, 0xFB44 },
+{ 0xFB46, 0xFB46, 0xFB46 },
+{ 0xFB47, 0xFB47, 0xFB47 },
+{ 0xFB48, 0xFB48, 0xFB48 },
+{ 0xFB49, 0xFB49, 0xFB49 },
+{ 0xFB4A, 0xFB4A, 0xFB4A },
+{ 0xFB4B, 0xFB4B, 0xFB4B },
+{ 0xFB4C, 0xFB4C, 0xFB4C },
+{ 0xFB4D, 0xFB4D, 0xFB4D },
+{ 0xFB4E, 0xFB4E, 0xFB4E },
+{ 0xFB4F, 0xFB4F, 0xFB4F },
+{ 0xFB50, 0xFB50, 0xFB50 },
+{ 0xFB51, 0xFB51, 0xFB51 },
+{ 0xFB52, 0xFB52, 0xFB52 },
+{ 0xFB53, 0xFB53, 0xFB53 },
+{ 0xFB54, 0xFB54, 0xFB54 },
+{ 0xFB55, 0xFB55, 0xFB55 },
+{ 0xFB56, 0xFB56, 0xFB56 },
+{ 0xFB57, 0xFB57, 0xFB57 },
+{ 0xFB58, 0xFB58, 0xFB58 },
+{ 0xFB59, 0xFB59, 0xFB59 },
+{ 0xFB5A, 0xFB5A, 0xFB5A },
+{ 0xFB5B, 0xFB5B, 0xFB5B },
+{ 0xFB5C, 0xFB5C, 0xFB5C },
+{ 0xFB5D, 0xFB5D, 0xFB5D },
+{ 0xFB5E, 0xFB5E, 0xFB5E },
+{ 0xFB5F, 0xFB5F, 0xFB5F },
+{ 0xFB60, 0xFB60, 0xFB60 },
+{ 0xFB61, 0xFB61, 0xFB61 },
+{ 0xFB62, 0xFB62, 0xFB62 },
+{ 0xFB63, 0xFB63, 0xFB63 },
+{ 0xFB64, 0xFB64, 0xFB64 },
+{ 0xFB65, 0xFB65, 0xFB65 },
+{ 0xFB66, 0xFB66, 0xFB66 },
+{ 0xFB67, 0xFB67, 0xFB67 },
+{ 0xFB68, 0xFB68, 0xFB68 },
+{ 0xFB69, 0xFB69, 0xFB69 },
+{ 0xFB6A, 0xFB6A, 0xFB6A },
+{ 0xFB6B, 0xFB6B, 0xFB6B },
+{ 0xFB6C, 0xFB6C, 0xFB6C },
+{ 0xFB6D, 0xFB6D, 0xFB6D },
+{ 0xFB6E, 0xFB6E, 0xFB6E },
+{ 0xFB6F, 0xFB6F, 0xFB6F },
+{ 0xFB70, 0xFB70, 0xFB70 },
+{ 0xFB71, 0xFB71, 0xFB71 },
+{ 0xFB72, 0xFB72, 0xFB72 },
+{ 0xFB73, 0xFB73, 0xFB73 },
+{ 0xFB74, 0xFB74, 0xFB74 },
+{ 0xFB75, 0xFB75, 0xFB75 },
+{ 0xFB76, 0xFB76, 0xFB76 },
+{ 0xFB77, 0xFB77, 0xFB77 },
+{ 0xFB78, 0xFB78, 0xFB78 },
+{ 0xFB79, 0xFB79, 0xFB79 },
+{ 0xFB7A, 0xFB7A, 0xFB7A },
+{ 0xFB7B, 0xFB7B, 0xFB7B },
+{ 0xFB7C, 0xFB7C, 0xFB7C },
+{ 0xFB7D, 0xFB7D, 0xFB7D },
+{ 0xFB7E, 0xFB7E, 0xFB7E },
+{ 0xFB7F, 0xFB7F, 0xFB7F },
+{ 0xFB80, 0xFB80, 0xFB80 },
+{ 0xFB81, 0xFB81, 0xFB81 },
+{ 0xFB82, 0xFB82, 0xFB82 },
+{ 0xFB83, 0xFB83, 0xFB83 },
+{ 0xFB84, 0xFB84, 0xFB84 },
+{ 0xFB85, 0xFB85, 0xFB85 },
+{ 0xFB86, 0xFB86, 0xFB86 },
+{ 0xFB87, 0xFB87, 0xFB87 },
+{ 0xFB88, 0xFB88, 0xFB88 },
+{ 0xFB89, 0xFB89, 0xFB89 },
+{ 0xFB8A, 0xFB8A, 0xFB8A },
+{ 0xFB8B, 0xFB8B, 0xFB8B },
+{ 0xFB8C, 0xFB8C, 0xFB8C },
+{ 0xFB8D, 0xFB8D, 0xFB8D },
+{ 0xFB8E, 0xFB8E, 0xFB8E },
+{ 0xFB8F, 0xFB8F, 0xFB8F },
+{ 0xFB90, 0xFB90, 0xFB90 },
+{ 0xFB91, 0xFB91, 0xFB91 },
+{ 0xFB92, 0xFB92, 0xFB92 },
+{ 0xFB93, 0xFB93, 0xFB93 },
+{ 0xFB94, 0xFB94, 0xFB94 },
+{ 0xFB95, 0xFB95, 0xFB95 },
+{ 0xFB96, 0xFB96, 0xFB96 },
+{ 0xFB97, 0xFB97, 0xFB97 },
+{ 0xFB98, 0xFB98, 0xFB98 },
+{ 0xFB99, 0xFB99, 0xFB99 },
+{ 0xFB9A, 0xFB9A, 0xFB9A },
+{ 0xFB9B, 0xFB9B, 0xFB9B },
+{ 0xFB9C, 0xFB9C, 0xFB9C },
+{ 0xFB9D, 0xFB9D, 0xFB9D },
+{ 0xFB9E, 0xFB9E, 0xFB9E },
+{ 0xFB9F, 0xFB9F, 0xFB9F },
+{ 0xFBA0, 0xFBA0, 0xFBA0 },
+{ 0xFBA1, 0xFBA1, 0xFBA1 },
+{ 0xFBA2, 0xFBA2, 0xFBA2 },
+{ 0xFBA3, 0xFBA3, 0xFBA3 },
+{ 0xFBA4, 0xFBA4, 0xFBA4 },
+{ 0xFBA5, 0xFBA5, 0xFBA5 },
+{ 0xFBA6, 0xFBA6, 0xFBA6 },
+{ 0xFBA7, 0xFBA7, 0xFBA7 },
+{ 0xFBA8, 0xFBA8, 0xFBA8 },
+{ 0xFBA9, 0xFBA9, 0xFBA9 },
+{ 0xFBAA, 0xFBAA, 0xFBAA },
+{ 0xFBAB, 0xFBAB, 0xFBAB },
+{ 0xFBAC, 0xFBAC, 0xFBAC },
+{ 0xFBAD, 0xFBAD, 0xFBAD },
+{ 0xFBAE, 0xFBAE, 0xFBAE },
+{ 0xFBAF, 0xFBAF, 0xFBAF },
+{ 0xFBB0, 0xFBB0, 0xFBB0 },
+{ 0xFBB1, 0xFBB1, 0xFBB1 },
+{ 0xFBD3, 0xFBD3, 0xFBD3 },
+{ 0xFBD4, 0xFBD4, 0xFBD4 },
+{ 0xFBD5, 0xFBD5, 0xFBD5 },
+{ 0xFBD6, 0xFBD6, 0xFBD6 },
+{ 0xFBD7, 0xFBD7, 0xFBD7 },
+{ 0xFBD8, 0xFBD8, 0xFBD8 },
+{ 0xFBD9, 0xFBD9, 0xFBD9 },
+{ 0xFBDA, 0xFBDA, 0xFBDA },
+{ 0xFBDB, 0xFBDB, 0xFBDB },
+{ 0xFBDC, 0xFBDC, 0xFBDC },
+{ 0xFBDD, 0xFBDD, 0xFBDD },
+{ 0xFBDE, 0xFBDE, 0xFBDE },
+{ 0xFBDF, 0xFBDF, 0xFBDF },
+{ 0xFBE0, 0xFBE0, 0xFBE0 },
+{ 0xFBE1, 0xFBE1, 0xFBE1 },
+{ 0xFBE2, 0xFBE2, 0xFBE2 },
+{ 0xFBE3, 0xFBE3, 0xFBE3 },
+{ 0xFBE4, 0xFBE4, 0xFBE4 },
+{ 0xFBE5, 0xFBE5, 0xFBE5 },
+{ 0xFBE6, 0xFBE6, 0xFBE6 },
+{ 0xFBE7, 0xFBE7, 0xFBE7 },
+{ 0xFBE8, 0xFBE8, 0xFBE8 },
+{ 0xFBE9, 0xFBE9, 0xFBE9 },
+{ 0xFBEA, 0xFBEA, 0xFBEA },
+{ 0xFBEB, 0xFBEB, 0xFBEB },
+{ 0xFBEC, 0xFBEC, 0xFBEC },
+{ 0xFBED, 0xFBED, 0xFBED },
+{ 0xFBEE, 0xFBEE, 0xFBEE },
+{ 0xFBEF, 0xFBEF, 0xFBEF },
+{ 0xFBF0, 0xFBF0, 0xFBF0 },
+{ 0xFBF1, 0xFBF1, 0xFBF1 },
+{ 0xFBF2, 0xFBF2, 0xFBF2 },
+{ 0xFBF3, 0xFBF3, 0xFBF3 },
+{ 0xFBF4, 0xFBF4, 0xFBF4 },
+{ 0xFBF5, 0xFBF5, 0xFBF5 },
+{ 0xFBF6, 0xFBF6, 0xFBF6 },
+{ 0xFBF7, 0xFBF7, 0xFBF7 },
+{ 0xFBF8, 0xFBF8, 0xFBF8 },
+{ 0xFBF9, 0xFBF9, 0xFBF9 },
+{ 0xFBFA, 0xFBFA, 0xFBFA },
+{ 0xFBFB, 0xFBFB, 0xFBFB },
+{ 0xFBFC, 0xFBFC, 0xFBFC },
+{ 0xFBFD, 0xFBFD, 0xFBFD },
+{ 0xFBFE, 0xFBFE, 0xFBFE },
+{ 0xFBFF, 0xFBFF, 0xFBFF },
+{ 0xFC00, 0xFC00, 0xFC00 },
+{ 0xFC01, 0xFC01, 0xFC01 },
+{ 0xFC02, 0xFC02, 0xFC02 },
+{ 0xFC03, 0xFC03, 0xFC03 },
+{ 0xFC04, 0xFC04, 0xFC04 },
+{ 0xFC05, 0xFC05, 0xFC05 },
+{ 0xFC06, 0xFC06, 0xFC06 },
+{ 0xFC07, 0xFC07, 0xFC07 },
+{ 0xFC08, 0xFC08, 0xFC08 },
+{ 0xFC09, 0xFC09, 0xFC09 },
+{ 0xFC0A, 0xFC0A, 0xFC0A },
+{ 0xFC0B, 0xFC0B, 0xFC0B },
+{ 0xFC0C, 0xFC0C, 0xFC0C },
+{ 0xFC0D, 0xFC0D, 0xFC0D },
+{ 0xFC0E, 0xFC0E, 0xFC0E },
+{ 0xFC0F, 0xFC0F, 0xFC0F },
+{ 0xFC10, 0xFC10, 0xFC10 },
+{ 0xFC11, 0xFC11, 0xFC11 },
+{ 0xFC12, 0xFC12, 0xFC12 },
+{ 0xFC13, 0xFC13, 0xFC13 },
+{ 0xFC14, 0xFC14, 0xFC14 },
+{ 0xFC15, 0xFC15, 0xFC15 },
+{ 0xFC16, 0xFC16, 0xFC16 },
+{ 0xFC17, 0xFC17, 0xFC17 },
+{ 0xFC18, 0xFC18, 0xFC18 },
+{ 0xFC19, 0xFC19, 0xFC19 },
+{ 0xFC1A, 0xFC1A, 0xFC1A },
+{ 0xFC1B, 0xFC1B, 0xFC1B },
+{ 0xFC1C, 0xFC1C, 0xFC1C },
+{ 0xFC1D, 0xFC1D, 0xFC1D },
+{ 0xFC1E, 0xFC1E, 0xFC1E },
+{ 0xFC1F, 0xFC1F, 0xFC1F },
+{ 0xFC20, 0xFC20, 0xFC20 },
+{ 0xFC21, 0xFC21, 0xFC21 },
+{ 0xFC22, 0xFC22, 0xFC22 },
+{ 0xFC23, 0xFC23, 0xFC23 },
+{ 0xFC24, 0xFC24, 0xFC24 },
+{ 0xFC25, 0xFC25, 0xFC25 },
+{ 0xFC26, 0xFC26, 0xFC26 },
+{ 0xFC27, 0xFC27, 0xFC27 },
+{ 0xFC28, 0xFC28, 0xFC28 },
+{ 0xFC29, 0xFC29, 0xFC29 },
+{ 0xFC2A, 0xFC2A, 0xFC2A },
+{ 0xFC2B, 0xFC2B, 0xFC2B },
+{ 0xFC2C, 0xFC2C, 0xFC2C },
+{ 0xFC2D, 0xFC2D, 0xFC2D },
+{ 0xFC2E, 0xFC2E, 0xFC2E },
+{ 0xFC2F, 0xFC2F, 0xFC2F },
+{ 0xFC30, 0xFC30, 0xFC30 },
+{ 0xFC31, 0xFC31, 0xFC31 },
+{ 0xFC32, 0xFC32, 0xFC32 },
+{ 0xFC33, 0xFC33, 0xFC33 },
+{ 0xFC34, 0xFC34, 0xFC34 },
+{ 0xFC35, 0xFC35, 0xFC35 },
+{ 0xFC36, 0xFC36, 0xFC36 },
+{ 0xFC37, 0xFC37, 0xFC37 },
+{ 0xFC38, 0xFC38, 0xFC38 },
+{ 0xFC39, 0xFC39, 0xFC39 },
+{ 0xFC3A, 0xFC3A, 0xFC3A },
+{ 0xFC3B, 0xFC3B, 0xFC3B },
+{ 0xFC3C, 0xFC3C, 0xFC3C },
+{ 0xFC3D, 0xFC3D, 0xFC3D },
+{ 0xFC3E, 0xFC3E, 0xFC3E },
+{ 0xFC3F, 0xFC3F, 0xFC3F },
+{ 0xFC40, 0xFC40, 0xFC40 },
+{ 0xFC41, 0xFC41, 0xFC41 },
+{ 0xFC42, 0xFC42, 0xFC42 },
+{ 0xFC43, 0xFC43, 0xFC43 },
+{ 0xFC44, 0xFC44, 0xFC44 },
+{ 0xFC45, 0xFC45, 0xFC45 },
+{ 0xFC46, 0xFC46, 0xFC46 },
+{ 0xFC47, 0xFC47, 0xFC47 },
+{ 0xFC48, 0xFC48, 0xFC48 },
+{ 0xFC49, 0xFC49, 0xFC49 },
+{ 0xFC4A, 0xFC4A, 0xFC4A },
+{ 0xFC4B, 0xFC4B, 0xFC4B },
+{ 0xFC4C, 0xFC4C, 0xFC4C },
+{ 0xFC4D, 0xFC4D, 0xFC4D },
+{ 0xFC4E, 0xFC4E, 0xFC4E },
+{ 0xFC4F, 0xFC4F, 0xFC4F },
+{ 0xFC50, 0xFC50, 0xFC50 },
+{ 0xFC51, 0xFC51, 0xFC51 },
+{ 0xFC52, 0xFC52, 0xFC52 },
+{ 0xFC53, 0xFC53, 0xFC53 },
+{ 0xFC54, 0xFC54, 0xFC54 },
+{ 0xFC55, 0xFC55, 0xFC55 },
+{ 0xFC56, 0xFC56, 0xFC56 },
+{ 0xFC57, 0xFC57, 0xFC57 },
+{ 0xFC58, 0xFC58, 0xFC58 },
+{ 0xFC59, 0xFC59, 0xFC59 },
+{ 0xFC5A, 0xFC5A, 0xFC5A },
+{ 0xFC5B, 0xFC5B, 0xFC5B },
+{ 0xFC5C, 0xFC5C, 0xFC5C },
+{ 0xFC5D, 0xFC5D, 0xFC5D },
+{ 0xFC5E, 0xFC5E, 0xFC5E },
+{ 0xFC5F, 0xFC5F, 0xFC5F },
+{ 0xFC60, 0xFC60, 0xFC60 },
+{ 0xFC61, 0xFC61, 0xFC61 },
+{ 0xFC62, 0xFC62, 0xFC62 },
+{ 0xFC63, 0xFC63, 0xFC63 },
+{ 0xFC64, 0xFC64, 0xFC64 },
+{ 0xFC65, 0xFC65, 0xFC65 },
+{ 0xFC66, 0xFC66, 0xFC66 },
+{ 0xFC67, 0xFC67, 0xFC67 },
+{ 0xFC68, 0xFC68, 0xFC68 },
+{ 0xFC69, 0xFC69, 0xFC69 },
+{ 0xFC6A, 0xFC6A, 0xFC6A },
+{ 0xFC6B, 0xFC6B, 0xFC6B },
+{ 0xFC6C, 0xFC6C, 0xFC6C },
+{ 0xFC6D, 0xFC6D, 0xFC6D },
+{ 0xFC6E, 0xFC6E, 0xFC6E },
+{ 0xFC6F, 0xFC6F, 0xFC6F },
+{ 0xFC70, 0xFC70, 0xFC70 },
+{ 0xFC71, 0xFC71, 0xFC71 },
+{ 0xFC72, 0xFC72, 0xFC72 },
+{ 0xFC73, 0xFC73, 0xFC73 },
+{ 0xFC74, 0xFC74, 0xFC74 },
+{ 0xFC75, 0xFC75, 0xFC75 },
+{ 0xFC76, 0xFC76, 0xFC76 },
+{ 0xFC77, 0xFC77, 0xFC77 },
+{ 0xFC78, 0xFC78, 0xFC78 },
+{ 0xFC79, 0xFC79, 0xFC79 },
+{ 0xFC7A, 0xFC7A, 0xFC7A },
+{ 0xFC7B, 0xFC7B, 0xFC7B },
+{ 0xFC7C, 0xFC7C, 0xFC7C },
+{ 0xFC7D, 0xFC7D, 0xFC7D },
+{ 0xFC7E, 0xFC7E, 0xFC7E },
+{ 0xFC7F, 0xFC7F, 0xFC7F },
+{ 0xFC80, 0xFC80, 0xFC80 },
+{ 0xFC81, 0xFC81, 0xFC81 },
+{ 0xFC82, 0xFC82, 0xFC82 },
+{ 0xFC83, 0xFC83, 0xFC83 },
+{ 0xFC84, 0xFC84, 0xFC84 },
+{ 0xFC85, 0xFC85, 0xFC85 },
+{ 0xFC86, 0xFC86, 0xFC86 },
+{ 0xFC87, 0xFC87, 0xFC87 },
+{ 0xFC88, 0xFC88, 0xFC88 },
+{ 0xFC89, 0xFC89, 0xFC89 },
+{ 0xFC8A, 0xFC8A, 0xFC8A },
+{ 0xFC8B, 0xFC8B, 0xFC8B },
+{ 0xFC8C, 0xFC8C, 0xFC8C },
+{ 0xFC8D, 0xFC8D, 0xFC8D },
+{ 0xFC8E, 0xFC8E, 0xFC8E },
+{ 0xFC8F, 0xFC8F, 0xFC8F },
+{ 0xFC90, 0xFC90, 0xFC90 },
+{ 0xFC91, 0xFC91, 0xFC91 },
+{ 0xFC92, 0xFC92, 0xFC92 },
+{ 0xFC93, 0xFC93, 0xFC93 },
+{ 0xFC94, 0xFC94, 0xFC94 },
+{ 0xFC95, 0xFC95, 0xFC95 },
+{ 0xFC96, 0xFC96, 0xFC96 },
+{ 0xFC97, 0xFC97, 0xFC97 },
+{ 0xFC98, 0xFC98, 0xFC98 },
+{ 0xFC99, 0xFC99, 0xFC99 },
+{ 0xFC9A, 0xFC9A, 0xFC9A },
+{ 0xFC9B, 0xFC9B, 0xFC9B },
+{ 0xFC9C, 0xFC9C, 0xFC9C },
+{ 0xFC9D, 0xFC9D, 0xFC9D },
+{ 0xFC9E, 0xFC9E, 0xFC9E },
+{ 0xFC9F, 0xFC9F, 0xFC9F },
+{ 0xFCA0, 0xFCA0, 0xFCA0 },
+{ 0xFCA1, 0xFCA1, 0xFCA1 },
+{ 0xFCA2, 0xFCA2, 0xFCA2 },
+{ 0xFCA3, 0xFCA3, 0xFCA3 },
+{ 0xFCA4, 0xFCA4, 0xFCA4 },
+{ 0xFCA5, 0xFCA5, 0xFCA5 },
+{ 0xFCA6, 0xFCA6, 0xFCA6 },
+{ 0xFCA7, 0xFCA7, 0xFCA7 },
+{ 0xFCA8, 0xFCA8, 0xFCA8 },
+{ 0xFCA9, 0xFCA9, 0xFCA9 },
+{ 0xFCAA, 0xFCAA, 0xFCAA },
+{ 0xFCAB, 0xFCAB, 0xFCAB },
+{ 0xFCAC, 0xFCAC, 0xFCAC },
+{ 0xFCAD, 0xFCAD, 0xFCAD },
+{ 0xFCAE, 0xFCAE, 0xFCAE },
+{ 0xFCAF, 0xFCAF, 0xFCAF },
+{ 0xFCB0, 0xFCB0, 0xFCB0 },
+{ 0xFCB1, 0xFCB1, 0xFCB1 },
+{ 0xFCB2, 0xFCB2, 0xFCB2 },
+{ 0xFCB3, 0xFCB3, 0xFCB3 },
+{ 0xFCB4, 0xFCB4, 0xFCB4 },
+{ 0xFCB5, 0xFCB5, 0xFCB5 },
+{ 0xFCB6, 0xFCB6, 0xFCB6 },
+{ 0xFCB7, 0xFCB7, 0xFCB7 },
+{ 0xFCB8, 0xFCB8, 0xFCB8 },
+{ 0xFCB9, 0xFCB9, 0xFCB9 },
+{ 0xFCBA, 0xFCBA, 0xFCBA },
+{ 0xFCBB, 0xFCBB, 0xFCBB },
+{ 0xFCBC, 0xFCBC, 0xFCBC },
+{ 0xFCBD, 0xFCBD, 0xFCBD },
+{ 0xFCBE, 0xFCBE, 0xFCBE },
+{ 0xFCBF, 0xFCBF, 0xFCBF },
+{ 0xFCC0, 0xFCC0, 0xFCC0 },
+{ 0xFCC1, 0xFCC1, 0xFCC1 },
+{ 0xFCC2, 0xFCC2, 0xFCC2 },
+{ 0xFCC3, 0xFCC3, 0xFCC3 },
+{ 0xFCC4, 0xFCC4, 0xFCC4 },
+{ 0xFCC5, 0xFCC5, 0xFCC5 },
+{ 0xFCC6, 0xFCC6, 0xFCC6 },
+{ 0xFCC7, 0xFCC7, 0xFCC7 },
+{ 0xFCC8, 0xFCC8, 0xFCC8 },
+{ 0xFCC9, 0xFCC9, 0xFCC9 },
+{ 0xFCCA, 0xFCCA, 0xFCCA },
+{ 0xFCCB, 0xFCCB, 0xFCCB },
+{ 0xFCCC, 0xFCCC, 0xFCCC },
+{ 0xFCCD, 0xFCCD, 0xFCCD },
+{ 0xFCCE, 0xFCCE, 0xFCCE },
+{ 0xFCCF, 0xFCCF, 0xFCCF },
+{ 0xFCD0, 0xFCD0, 0xFCD0 },
+{ 0xFCD1, 0xFCD1, 0xFCD1 },
+{ 0xFCD2, 0xFCD2, 0xFCD2 },
+{ 0xFCD3, 0xFCD3, 0xFCD3 },
+{ 0xFCD4, 0xFCD4, 0xFCD4 },
+{ 0xFCD5, 0xFCD5, 0xFCD5 },
+{ 0xFCD6, 0xFCD6, 0xFCD6 },
+{ 0xFCD7, 0xFCD7, 0xFCD7 },
+{ 0xFCD8, 0xFCD8, 0xFCD8 },
+{ 0xFCD9, 0xFCD9, 0xFCD9 },
+{ 0xFCDA, 0xFCDA, 0xFCDA },
+{ 0xFCDB, 0xFCDB, 0xFCDB },
+{ 0xFCDC, 0xFCDC, 0xFCDC },
+{ 0xFCDD, 0xFCDD, 0xFCDD },
+{ 0xFCDE, 0xFCDE, 0xFCDE },
+{ 0xFCDF, 0xFCDF, 0xFCDF },
+{ 0xFCE0, 0xFCE0, 0xFCE0 },
+{ 0xFCE1, 0xFCE1, 0xFCE1 },
+{ 0xFCE2, 0xFCE2, 0xFCE2 },
+{ 0xFCE3, 0xFCE3, 0xFCE3 },
+{ 0xFCE4, 0xFCE4, 0xFCE4 },
+{ 0xFCE5, 0xFCE5, 0xFCE5 },
+{ 0xFCE6, 0xFCE6, 0xFCE6 },
+{ 0xFCE7, 0xFCE7, 0xFCE7 },
+{ 0xFCE8, 0xFCE8, 0xFCE8 },
+{ 0xFCE9, 0xFCE9, 0xFCE9 },
+{ 0xFCEA, 0xFCEA, 0xFCEA },
+{ 0xFCEB, 0xFCEB, 0xFCEB },
+{ 0xFCEC, 0xFCEC, 0xFCEC },
+{ 0xFCED, 0xFCED, 0xFCED },
+{ 0xFCEE, 0xFCEE, 0xFCEE },
+{ 0xFCEF, 0xFCEF, 0xFCEF },
+{ 0xFCF0, 0xFCF0, 0xFCF0 },
+{ 0xFCF1, 0xFCF1, 0xFCF1 },
+{ 0xFCF2, 0xFCF2, 0xFCF2 },
+{ 0xFCF3, 0xFCF3, 0xFCF3 },
+{ 0xFCF4, 0xFCF4, 0xFCF4 },
+{ 0xFCF5, 0xFCF5, 0xFCF5 },
+{ 0xFCF6, 0xFCF6, 0xFCF6 },
+{ 0xFCF7, 0xFCF7, 0xFCF7 },
+{ 0xFCF8, 0xFCF8, 0xFCF8 },
+{ 0xFCF9, 0xFCF9, 0xFCF9 },
+{ 0xFCFA, 0xFCFA, 0xFCFA },
+{ 0xFCFB, 0xFCFB, 0xFCFB },
+{ 0xFCFC, 0xFCFC, 0xFCFC },
+{ 0xFCFD, 0xFCFD, 0xFCFD },
+{ 0xFCFE, 0xFCFE, 0xFCFE },
+{ 0xFCFF, 0xFCFF, 0xFCFF },
+{ 0xFD00, 0xFD00, 0xFD00 },
+{ 0xFD01, 0xFD01, 0xFD01 },
+{ 0xFD02, 0xFD02, 0xFD02 },
+{ 0xFD03, 0xFD03, 0xFD03 },
+{ 0xFD04, 0xFD04, 0xFD04 },
+{ 0xFD05, 0xFD05, 0xFD05 },
+{ 0xFD06, 0xFD06, 0xFD06 },
+{ 0xFD07, 0xFD07, 0xFD07 },
+{ 0xFD08, 0xFD08, 0xFD08 },
+{ 0xFD09, 0xFD09, 0xFD09 },
+{ 0xFD0A, 0xFD0A, 0xFD0A },
+{ 0xFD0B, 0xFD0B, 0xFD0B },
+{ 0xFD0C, 0xFD0C, 0xFD0C },
+{ 0xFD0D, 0xFD0D, 0xFD0D },
+{ 0xFD0E, 0xFD0E, 0xFD0E },
+{ 0xFD0F, 0xFD0F, 0xFD0F },
+{ 0xFD10, 0xFD10, 0xFD10 },
+{ 0xFD11, 0xFD11, 0xFD11 },
+{ 0xFD12, 0xFD12, 0xFD12 },
+{ 0xFD13, 0xFD13, 0xFD13 },
+{ 0xFD14, 0xFD14, 0xFD14 },
+{ 0xFD15, 0xFD15, 0xFD15 },
+{ 0xFD16, 0xFD16, 0xFD16 },
+{ 0xFD17, 0xFD17, 0xFD17 },
+{ 0xFD18, 0xFD18, 0xFD18 },
+{ 0xFD19, 0xFD19, 0xFD19 },
+{ 0xFD1A, 0xFD1A, 0xFD1A },
+{ 0xFD1B, 0xFD1B, 0xFD1B },
+{ 0xFD1C, 0xFD1C, 0xFD1C },
+{ 0xFD1D, 0xFD1D, 0xFD1D },
+{ 0xFD1E, 0xFD1E, 0xFD1E },
+{ 0xFD1F, 0xFD1F, 0xFD1F },
+{ 0xFD20, 0xFD20, 0xFD20 },
+{ 0xFD21, 0xFD21, 0xFD21 },
+{ 0xFD22, 0xFD22, 0xFD22 },
+{ 0xFD23, 0xFD23, 0xFD23 },
+{ 0xFD24, 0xFD24, 0xFD24 },
+{ 0xFD25, 0xFD25, 0xFD25 },
+{ 0xFD26, 0xFD26, 0xFD26 },
+{ 0xFD27, 0xFD27, 0xFD27 },
+{ 0xFD28, 0xFD28, 0xFD28 },
+{ 0xFD29, 0xFD29, 0xFD29 },
+{ 0xFD2A, 0xFD2A, 0xFD2A },
+{ 0xFD2B, 0xFD2B, 0xFD2B },
+{ 0xFD2C, 0xFD2C, 0xFD2C },
+{ 0xFD2D, 0xFD2D, 0xFD2D },
+{ 0xFD2E, 0xFD2E, 0xFD2E },
+{ 0xFD2F, 0xFD2F, 0xFD2F },
+{ 0xFD30, 0xFD30, 0xFD30 },
+{ 0xFD31, 0xFD31, 0xFD31 },
+{ 0xFD32, 0xFD32, 0xFD32 },
+{ 0xFD33, 0xFD33, 0xFD33 },
+{ 0xFD34, 0xFD34, 0xFD34 },
+{ 0xFD35, 0xFD35, 0xFD35 },
+{ 0xFD36, 0xFD36, 0xFD36 },
+{ 0xFD37, 0xFD37, 0xFD37 },
+{ 0xFD38, 0xFD38, 0xFD38 },
+{ 0xFD39, 0xFD39, 0xFD39 },
+{ 0xFD3A, 0xFD3A, 0xFD3A },
+{ 0xFD3B, 0xFD3B, 0xFD3B },
+{ 0xFD3C, 0xFD3C, 0xFD3C },
+{ 0xFD3D, 0xFD3D, 0xFD3D },
+{ 0xFD50, 0xFD50, 0xFD50 },
+{ 0xFD51, 0xFD51, 0xFD51 },
+{ 0xFD52, 0xFD52, 0xFD52 },
+{ 0xFD53, 0xFD53, 0xFD53 },
+{ 0xFD54, 0xFD54, 0xFD54 },
+{ 0xFD55, 0xFD55, 0xFD55 },
+{ 0xFD56, 0xFD56, 0xFD56 },
+{ 0xFD57, 0xFD57, 0xFD57 },
+{ 0xFD58, 0xFD58, 0xFD58 },
+{ 0xFD59, 0xFD59, 0xFD59 },
+{ 0xFD5A, 0xFD5A, 0xFD5A },
+{ 0xFD5B, 0xFD5B, 0xFD5B },
+{ 0xFD5C, 0xFD5C, 0xFD5C },
+{ 0xFD5D, 0xFD5D, 0xFD5D },
+{ 0xFD5E, 0xFD5E, 0xFD5E },
+{ 0xFD5F, 0xFD5F, 0xFD5F },
+{ 0xFD60, 0xFD60, 0xFD60 },
+{ 0xFD61, 0xFD61, 0xFD61 },
+{ 0xFD62, 0xFD62, 0xFD62 },
+{ 0xFD63, 0xFD63, 0xFD63 },
+{ 0xFD64, 0xFD64, 0xFD64 },
+{ 0xFD65, 0xFD65, 0xFD65 },
+{ 0xFD66, 0xFD66, 0xFD66 },
+{ 0xFD67, 0xFD67, 0xFD67 },
+{ 0xFD68, 0xFD68, 0xFD68 },
+{ 0xFD69, 0xFD69, 0xFD69 },
+{ 0xFD6A, 0xFD6A, 0xFD6A },
+{ 0xFD6B, 0xFD6B, 0xFD6B },
+{ 0xFD6C, 0xFD6C, 0xFD6C },
+{ 0xFD6D, 0xFD6D, 0xFD6D },
+{ 0xFD6E, 0xFD6E, 0xFD6E },
+{ 0xFD6F, 0xFD6F, 0xFD6F },
+{ 0xFD70, 0xFD70, 0xFD70 },
+{ 0xFD71, 0xFD71, 0xFD71 },
+{ 0xFD72, 0xFD72, 0xFD72 },
+{ 0xFD73, 0xFD73, 0xFD73 },
+{ 0xFD74, 0xFD74, 0xFD74 },
+{ 0xFD75, 0xFD75, 0xFD75 },
+{ 0xFD76, 0xFD76, 0xFD76 },
+{ 0xFD77, 0xFD77, 0xFD77 },
+{ 0xFD78, 0xFD78, 0xFD78 },
+{ 0xFD79, 0xFD79, 0xFD79 },
+{ 0xFD7A, 0xFD7A, 0xFD7A },
+{ 0xFD7B, 0xFD7B, 0xFD7B },
+{ 0xFD7C, 0xFD7C, 0xFD7C },
+{ 0xFD7D, 0xFD7D, 0xFD7D },
+{ 0xFD7E, 0xFD7E, 0xFD7E },
+{ 0xFD7F, 0xFD7F, 0xFD7F },
+{ 0xFD80, 0xFD80, 0xFD80 },
+{ 0xFD81, 0xFD81, 0xFD81 },
+{ 0xFD82, 0xFD82, 0xFD82 },
+{ 0xFD83, 0xFD83, 0xFD83 },
+{ 0xFD84, 0xFD84, 0xFD84 },
+{ 0xFD85, 0xFD85, 0xFD85 },
+{ 0xFD86, 0xFD86, 0xFD86 },
+{ 0xFD87, 0xFD87, 0xFD87 },
+{ 0xFD88, 0xFD88, 0xFD88 },
+{ 0xFD89, 0xFD89, 0xFD89 },
+{ 0xFD8A, 0xFD8A, 0xFD8A },
+{ 0xFD8B, 0xFD8B, 0xFD8B },
+{ 0xFD8C, 0xFD8C, 0xFD8C },
+{ 0xFD8D, 0xFD8D, 0xFD8D },
+{ 0xFD8E, 0xFD8E, 0xFD8E },
+{ 0xFD8F, 0xFD8F, 0xFD8F },
+{ 0xFD92, 0xFD92, 0xFD92 },
+{ 0xFD93, 0xFD93, 0xFD93 },
+{ 0xFD94, 0xFD94, 0xFD94 },
+{ 0xFD95, 0xFD95, 0xFD95 },
+{ 0xFD96, 0xFD96, 0xFD96 },
+{ 0xFD97, 0xFD97, 0xFD97 },
+{ 0xFD98, 0xFD98, 0xFD98 },
+{ 0xFD99, 0xFD99, 0xFD99 },
+{ 0xFD9A, 0xFD9A, 0xFD9A },
+{ 0xFD9B, 0xFD9B, 0xFD9B },
+{ 0xFD9C, 0xFD9C, 0xFD9C },
+{ 0xFD9D, 0xFD9D, 0xFD9D },
+{ 0xFD9E, 0xFD9E, 0xFD9E },
+{ 0xFD9F, 0xFD9F, 0xFD9F },
+{ 0xFDA0, 0xFDA0, 0xFDA0 },
+{ 0xFDA1, 0xFDA1, 0xFDA1 },
+{ 0xFDA2, 0xFDA2, 0xFDA2 },
+{ 0xFDA3, 0xFDA3, 0xFDA3 },
+{ 0xFDA4, 0xFDA4, 0xFDA4 },
+{ 0xFDA5, 0xFDA5, 0xFDA5 },
+{ 0xFDA6, 0xFDA6, 0xFDA6 },
+{ 0xFDA7, 0xFDA7, 0xFDA7 },
+{ 0xFDA8, 0xFDA8, 0xFDA8 },
+{ 0xFDA9, 0xFDA9, 0xFDA9 },
+{ 0xFDAA, 0xFDAA, 0xFDAA },
+{ 0xFDAB, 0xFDAB, 0xFDAB },
+{ 0xFDAC, 0xFDAC, 0xFDAC },
+{ 0xFDAD, 0xFDAD, 0xFDAD },
+{ 0xFDAE, 0xFDAE, 0xFDAE },
+{ 0xFDAF, 0xFDAF, 0xFDAF },
+{ 0xFDB0, 0xFDB0, 0xFDB0 },
+{ 0xFDB1, 0xFDB1, 0xFDB1 },
+{ 0xFDB2, 0xFDB2, 0xFDB2 },
+{ 0xFDB3, 0xFDB3, 0xFDB3 },
+{ 0xFDB4, 0xFDB4, 0xFDB4 },
+{ 0xFDB5, 0xFDB5, 0xFDB5 },
+{ 0xFDB6, 0xFDB6, 0xFDB6 },
+{ 0xFDB7, 0xFDB7, 0xFDB7 },
+{ 0xFDB8, 0xFDB8, 0xFDB8 },
+{ 0xFDB9, 0xFDB9, 0xFDB9 },
+{ 0xFDBA, 0xFDBA, 0xFDBA },
+{ 0xFDBB, 0xFDBB, 0xFDBB },
+{ 0xFDBC, 0xFDBC, 0xFDBC },
+{ 0xFDBD, 0xFDBD, 0xFDBD },
+{ 0xFDBE, 0xFDBE, 0xFDBE },
+{ 0xFDBF, 0xFDBF, 0xFDBF },
+{ 0xFDC0, 0xFDC0, 0xFDC0 },
+{ 0xFDC1, 0xFDC1, 0xFDC1 },
+{ 0xFDC2, 0xFDC2, 0xFDC2 },
+{ 0xFDC3, 0xFDC3, 0xFDC3 },
+{ 0xFDC4, 0xFDC4, 0xFDC4 },
+{ 0xFDC5, 0xFDC5, 0xFDC5 },
+{ 0xFDC6, 0xFDC6, 0xFDC6 },
+{ 0xFDC7, 0xFDC7, 0xFDC7 },
+{ 0xFDF0, 0xFDF0, 0xFDF0 },
+{ 0xFDF1, 0xFDF1, 0xFDF1 },
+{ 0xFDF2, 0xFDF2, 0xFDF2 },
+{ 0xFDF3, 0xFDF3, 0xFDF3 },
+{ 0xFDF4, 0xFDF4, 0xFDF4 },
+{ 0xFDF5, 0xFDF5, 0xFDF5 },
+{ 0xFDF6, 0xFDF6, 0xFDF6 },
+{ 0xFDF7, 0xFDF7, 0xFDF7 },
+{ 0xFDF8, 0xFDF8, 0xFDF8 },
+{ 0xFDF9, 0xFDF9, 0xFDF9 },
+{ 0xFDFA, 0xFDFA, 0xFDFA },
+{ 0xFDFB, 0xFDFB, 0xFDFB },
+{ 0xFE00, 0xFE00, 0xFE00 },
+{ 0xFE01, 0xFE01, 0xFE01 },
+{ 0xFE02, 0xFE02, 0xFE02 },
+{ 0xFE03, 0xFE03, 0xFE03 },
+{ 0xFE04, 0xFE04, 0xFE04 },
+{ 0xFE05, 0xFE05, 0xFE05 },
+{ 0xFE06, 0xFE06, 0xFE06 },
+{ 0xFE07, 0xFE07, 0xFE07 },
+{ 0xFE08, 0xFE08, 0xFE08 },
+{ 0xFE09, 0xFE09, 0xFE09 },
+{ 0xFE0A, 0xFE0A, 0xFE0A },
+{ 0xFE0B, 0xFE0B, 0xFE0B },
+{ 0xFE0C, 0xFE0C, 0xFE0C },
+{ 0xFE0D, 0xFE0D, 0xFE0D },
+{ 0xFE0E, 0xFE0E, 0xFE0E },
+{ 0xFE0F, 0xFE0F, 0xFE0F },
+{ 0xFE20, 0xFE20, 0xFE20 },
+{ 0xFE21, 0xFE21, 0xFE21 },
+{ 0xFE22, 0xFE22, 0xFE22 },
+{ 0xFE23, 0xFE23, 0xFE23 },
+{ 0xFE70, 0xFE70, 0xFE70 },
+{ 0xFE71, 0xFE71, 0xFE71 },
+{ 0xFE72, 0xFE72, 0xFE72 },
+{ 0xFE73, 0xFE73, 0xFE73 },
+{ 0xFE74, 0xFE74, 0xFE74 },
+{ 0xFE76, 0xFE76, 0xFE76 },
+{ 0xFE77, 0xFE77, 0xFE77 },
+{ 0xFE78, 0xFE78, 0xFE78 },
+{ 0xFE79, 0xFE79, 0xFE79 },
+{ 0xFE7A, 0xFE7A, 0xFE7A },
+{ 0xFE7B, 0xFE7B, 0xFE7B },
+{ 0xFE7C, 0xFE7C, 0xFE7C },
+{ 0xFE7D, 0xFE7D, 0xFE7D },
+{ 0xFE7E, 0xFE7E, 0xFE7E },
+{ 0xFE7F, 0xFE7F, 0xFE7F },
+{ 0xFE80, 0xFE80, 0xFE80 },
+{ 0xFE81, 0xFE81, 0xFE81 },
+{ 0xFE82, 0xFE82, 0xFE82 },
+{ 0xFE83, 0xFE83, 0xFE83 },
+{ 0xFE84, 0xFE84, 0xFE84 },
+{ 0xFE85, 0xFE85, 0xFE85 },
+{ 0xFE86, 0xFE86, 0xFE86 },
+{ 0xFE87, 0xFE87, 0xFE87 },
+{ 0xFE88, 0xFE88, 0xFE88 },
+{ 0xFE89, 0xFE89, 0xFE89 },
+{ 0xFE8A, 0xFE8A, 0xFE8A },
+{ 0xFE8B, 0xFE8B, 0xFE8B },
+{ 0xFE8C, 0xFE8C, 0xFE8C },
+{ 0xFE8D, 0xFE8D, 0xFE8D },
+{ 0xFE8E, 0xFE8E, 0xFE8E },
+{ 0xFE8F, 0xFE8F, 0xFE8F },
+{ 0xFE90, 0xFE90, 0xFE90 },
+{ 0xFE91, 0xFE91, 0xFE91 },
+{ 0xFE92, 0xFE92, 0xFE92 },
+{ 0xFE93, 0xFE93, 0xFE93 },
+{ 0xFE94, 0xFE94, 0xFE94 },
+{ 0xFE95, 0xFE95, 0xFE95 },
+{ 0xFE96, 0xFE96, 0xFE96 },
+{ 0xFE97, 0xFE97, 0xFE97 },
+{ 0xFE98, 0xFE98, 0xFE98 },
+{ 0xFE99, 0xFE99, 0xFE99 },
+{ 0xFE9A, 0xFE9A, 0xFE9A },
+{ 0xFE9B, 0xFE9B, 0xFE9B },
+{ 0xFE9C, 0xFE9C, 0xFE9C },
+{ 0xFE9D, 0xFE9D, 0xFE9D },
+{ 0xFE9E, 0xFE9E, 0xFE9E },
+{ 0xFE9F, 0xFE9F, 0xFE9F },
+{ 0xFEA0, 0xFEA0, 0xFEA0 },
+{ 0xFEA1, 0xFEA1, 0xFEA1 },
+{ 0xFEA2, 0xFEA2, 0xFEA2 },
+{ 0xFEA3, 0xFEA3, 0xFEA3 },
+{ 0xFEA4, 0xFEA4, 0xFEA4 },
+{ 0xFEA5, 0xFEA5, 0xFEA5 },
+{ 0xFEA6, 0xFEA6, 0xFEA6 },
+{ 0xFEA7, 0xFEA7, 0xFEA7 },
+{ 0xFEA8, 0xFEA8, 0xFEA8 },
+{ 0xFEA9, 0xFEA9, 0xFEA9 },
+{ 0xFEAA, 0xFEAA, 0xFEAA },
+{ 0xFEAB, 0xFEAB, 0xFEAB },
+{ 0xFEAC, 0xFEAC, 0xFEAC },
+{ 0xFEAD, 0xFEAD, 0xFEAD },
+{ 0xFEAE, 0xFEAE, 0xFEAE },
+{ 0xFEAF, 0xFEAF, 0xFEAF },
+{ 0xFEB0, 0xFEB0, 0xFEB0 },
+{ 0xFEB1, 0xFEB1, 0xFEB1 },
+{ 0xFEB2, 0xFEB2, 0xFEB2 },
+{ 0xFEB3, 0xFEB3, 0xFEB3 },
+{ 0xFEB4, 0xFEB4, 0xFEB4 },
+{ 0xFEB5, 0xFEB5, 0xFEB5 },
+{ 0xFEB6, 0xFEB6, 0xFEB6 },
+{ 0xFEB7, 0xFEB7, 0xFEB7 },
+{ 0xFEB8, 0xFEB8, 0xFEB8 },
+{ 0xFEB9, 0xFEB9, 0xFEB9 },
+{ 0xFEBA, 0xFEBA, 0xFEBA },
+{ 0xFEBB, 0xFEBB, 0xFEBB },
+{ 0xFEBC, 0xFEBC, 0xFEBC },
+{ 0xFEBD, 0xFEBD, 0xFEBD },
+{ 0xFEBE, 0xFEBE, 0xFEBE },
+{ 0xFEBF, 0xFEBF, 0xFEBF },
+{ 0xFEC0, 0xFEC0, 0xFEC0 },
+{ 0xFEC1, 0xFEC1, 0xFEC1 },
+{ 0xFEC2, 0xFEC2, 0xFEC2 },
+{ 0xFEC3, 0xFEC3, 0xFEC3 },
+{ 0xFEC4, 0xFEC4, 0xFEC4 },
+{ 0xFEC5, 0xFEC5, 0xFEC5 },
+{ 0xFEC6, 0xFEC6, 0xFEC6 },
+{ 0xFEC7, 0xFEC7, 0xFEC7 },
+{ 0xFEC8, 0xFEC8, 0xFEC8 },
+{ 0xFEC9, 0xFEC9, 0xFEC9 },
+{ 0xFECA, 0xFECA, 0xFECA },
+{ 0xFECB, 0xFECB, 0xFECB },
+{ 0xFECC, 0xFECC, 0xFECC },
+{ 0xFECD, 0xFECD, 0xFECD },
+{ 0xFECE, 0xFECE, 0xFECE },
+{ 0xFECF, 0xFECF, 0xFECF },
+{ 0xFED0, 0xFED0, 0xFED0 },
+{ 0xFED1, 0xFED1, 0xFED1 },
+{ 0xFED2, 0xFED2, 0xFED2 },
+{ 0xFED3, 0xFED3, 0xFED3 },
+{ 0xFED4, 0xFED4, 0xFED4 },
+{ 0xFED5, 0xFED5, 0xFED5 },
+{ 0xFED6, 0xFED6, 0xFED6 },
+{ 0xFED7, 0xFED7, 0xFED7 },
+{ 0xFED8, 0xFED8, 0xFED8 },
+{ 0xFED9, 0xFED9, 0xFED9 },
+{ 0xFEDA, 0xFEDA, 0xFEDA },
+{ 0xFEDB, 0xFEDB, 0xFEDB },
+{ 0xFEDC, 0xFEDC, 0xFEDC },
+{ 0xFEDD, 0xFEDD, 0xFEDD },
+{ 0xFEDE, 0xFEDE, 0xFEDE },
+{ 0xFEDF, 0xFEDF, 0xFEDF },
+{ 0xFEE0, 0xFEE0, 0xFEE0 },
+{ 0xFEE1, 0xFEE1, 0xFEE1 },
+{ 0xFEE2, 0xFEE2, 0xFEE2 },
+{ 0xFEE3, 0xFEE3, 0xFEE3 },
+{ 0xFEE4, 0xFEE4, 0xFEE4 },
+{ 0xFEE5, 0xFEE5, 0xFEE5 },
+{ 0xFEE6, 0xFEE6, 0xFEE6 },
+{ 0xFEE7, 0xFEE7, 0xFEE7 },
+{ 0xFEE8, 0xFEE8, 0xFEE8 },
+{ 0xFEE9, 0xFEE9, 0xFEE9 },
+{ 0xFEEA, 0xFEEA, 0xFEEA },
+{ 0xFEEB, 0xFEEB, 0xFEEB },
+{ 0xFEEC, 0xFEEC, 0xFEEC },
+{ 0xFEED, 0xFEED, 0xFEED },
+{ 0xFEEE, 0xFEEE, 0xFEEE },
+{ 0xFEEF, 0xFEEF, 0xFEEF },
+{ 0xFEF0, 0xFEF0, 0xFEF0 },
+{ 0xFEF1, 0xFEF1, 0xFEF1 },
+{ 0xFEF2, 0xFEF2, 0xFEF2 },
+{ 0xFEF3, 0xFEF3, 0xFEF3 },
+{ 0xFEF4, 0xFEF4, 0xFEF4 },
+{ 0xFEF5, 0xFEF5, 0xFEF5 },
+{ 0xFEF6, 0xFEF6, 0xFEF6 },
+{ 0xFEF7, 0xFEF7, 0xFEF7 },
+{ 0xFEF8, 0xFEF8, 0xFEF8 },
+{ 0xFEF9, 0xFEF9, 0xFEF9 },
+{ 0xFEFA, 0xFEFA, 0xFEFA },
+{ 0xFEFB, 0xFEFB, 0xFEFB },
+{ 0xFEFC, 0xFEFC, 0xFEFC },
+{ 0xFF21, 0xFF21, 0xFF41 },
+{ 0xFF22, 0xFF22, 0xFF42 },
+{ 0xFF23, 0xFF23, 0xFF43 },
+{ 0xFF24, 0xFF24, 0xFF44 },
+{ 0xFF25, 0xFF25, 0xFF45 },
+{ 0xFF26, 0xFF26, 0xFF46 },
+{ 0xFF27, 0xFF27, 0xFF47 },
+{ 0xFF28, 0xFF28, 0xFF48 },
+{ 0xFF29, 0xFF29, 0xFF49 },
+{ 0xFF2A, 0xFF2A, 0xFF4A },
+{ 0xFF2B, 0xFF2B, 0xFF4B },
+{ 0xFF2C, 0xFF2C, 0xFF4C },
+{ 0xFF2D, 0xFF2D, 0xFF4D },
+{ 0xFF2E, 0xFF2E, 0xFF4E },
+{ 0xFF2F, 0xFF2F, 0xFF4F },
+{ 0xFF30, 0xFF30, 0xFF50 },
+{ 0xFF31, 0xFF31, 0xFF51 },
+{ 0xFF32, 0xFF32, 0xFF52 },
+{ 0xFF33, 0xFF33, 0xFF53 },
+{ 0xFF34, 0xFF34, 0xFF54 },
+{ 0xFF35, 0xFF35, 0xFF55 },
+{ 0xFF36, 0xFF36, 0xFF56 },
+{ 0xFF37, 0xFF37, 0xFF57 },
+{ 0xFF38, 0xFF38, 0xFF58 },
+{ 0xFF39, 0xFF39, 0xFF59 },
+{ 0xFF3A, 0xFF3A, 0xFF5A },
+{ 0xFF41, 0xFF21, 0xFF41 },
+{ 0xFF42, 0xFF22, 0xFF42 },
+{ 0xFF43, 0xFF23, 0xFF43 },
+{ 0xFF44, 0xFF24, 0xFF44 },
+{ 0xFF45, 0xFF25, 0xFF45 },
+{ 0xFF46, 0xFF26, 0xFF46 },
+{ 0xFF47, 0xFF27, 0xFF47 },
+{ 0xFF48, 0xFF28, 0xFF48 },
+{ 0xFF49, 0xFF29, 0xFF49 },
+{ 0xFF4A, 0xFF2A, 0xFF4A },
+{ 0xFF4B, 0xFF2B, 0xFF4B },
+{ 0xFF4C, 0xFF2C, 0xFF4C },
+{ 0xFF4D, 0xFF2D, 0xFF4D },
+{ 0xFF4E, 0xFF2E, 0xFF4E },
+{ 0xFF4F, 0xFF2F, 0xFF4F },
+{ 0xFF50, 0xFF30, 0xFF50 },
+{ 0xFF51, 0xFF31, 0xFF51 },
+{ 0xFF52, 0xFF32, 0xFF52 },
+{ 0xFF53, 0xFF33, 0xFF53 },
+{ 0xFF54, 0xFF34, 0xFF54 },
+{ 0xFF55, 0xFF35, 0xFF55 },
+{ 0xFF56, 0xFF36, 0xFF56 },
+{ 0xFF57, 0xFF37, 0xFF57 },
+{ 0xFF58, 0xFF38, 0xFF58 },
+{ 0xFF59, 0xFF39, 0xFF59 },
+{ 0xFF5A, 0xFF3A, 0xFF5A },
+{ 0xFF66, 0xFF66, 0xFF66 },
+{ 0xFF67, 0xFF67, 0xFF67 },
+{ 0xFF68, 0xFF68, 0xFF68 },
+{ 0xFF69, 0xFF69, 0xFF69 },
+{ 0xFF6A, 0xFF6A, 0xFF6A },
+{ 0xFF6B, 0xFF6B, 0xFF6B },
+{ 0xFF6C, 0xFF6C, 0xFF6C },
+{ 0xFF6D, 0xFF6D, 0xFF6D },
+{ 0xFF6E, 0xFF6E, 0xFF6E },
+{ 0xFF6F, 0xFF6F, 0xFF6F },
+{ 0xFF70, 0xFF70, 0xFF70 },
+{ 0xFF71, 0xFF71, 0xFF71 },
+{ 0xFF72, 0xFF72, 0xFF72 },
+{ 0xFF73, 0xFF73, 0xFF73 },
+{ 0xFF74, 0xFF74, 0xFF74 },
+{ 0xFF75, 0xFF75, 0xFF75 },
+{ 0xFF76, 0xFF76, 0xFF76 },
+{ 0xFF77, 0xFF77, 0xFF77 },
+{ 0xFF78, 0xFF78, 0xFF78 },
+{ 0xFF79, 0xFF79, 0xFF79 },
+{ 0xFF7A, 0xFF7A, 0xFF7A },
+{ 0xFF7B, 0xFF7B, 0xFF7B },
+{ 0xFF7C, 0xFF7C, 0xFF7C },
+{ 0xFF7D, 0xFF7D, 0xFF7D },
+{ 0xFF7E, 0xFF7E, 0xFF7E },
+{ 0xFF7F, 0xFF7F, 0xFF7F },
+{ 0xFF80, 0xFF80, 0xFF80 },
+{ 0xFF81, 0xFF81, 0xFF81 },
+{ 0xFF82, 0xFF82, 0xFF82 },
+{ 0xFF83, 0xFF83, 0xFF83 },
+{ 0xFF84, 0xFF84, 0xFF84 },
+{ 0xFF85, 0xFF85, 0xFF85 },
+{ 0xFF86, 0xFF86, 0xFF86 },
+{ 0xFF87, 0xFF87, 0xFF87 },
+{ 0xFF88, 0xFF88, 0xFF88 },
+{ 0xFF89, 0xFF89, 0xFF89 },
+{ 0xFF8A, 0xFF8A, 0xFF8A },
+{ 0xFF8B, 0xFF8B, 0xFF8B },
+{ 0xFF8C, 0xFF8C, 0xFF8C },
+{ 0xFF8D, 0xFF8D, 0xFF8D },
+{ 0xFF8E, 0xFF8E, 0xFF8E },
+{ 0xFF8F, 0xFF8F, 0xFF8F },
+{ 0xFF90, 0xFF90, 0xFF90 },
+{ 0xFF91, 0xFF91, 0xFF91 },
+{ 0xFF92, 0xFF92, 0xFF92 },
+{ 0xFF93, 0xFF93, 0xFF93 },
+{ 0xFF94, 0xFF94, 0xFF94 },
+{ 0xFF95, 0xFF95, 0xFF95 },
+{ 0xFF96, 0xFF96, 0xFF96 },
+{ 0xFF97, 0xFF97, 0xFF97 },
+{ 0xFF98, 0xFF98, 0xFF98 },
+{ 0xFF99, 0xFF99, 0xFF99 },
+{ 0xFF9A, 0xFF9A, 0xFF9A },
+{ 0xFF9B, 0xFF9B, 0xFF9B },
+{ 0xFF9C, 0xFF9C, 0xFF9C },
+{ 0xFF9D, 0xFF9D, 0xFF9D },
+{ 0xFF9E, 0xFF9E, 0xFF9E },
+{ 0xFF9F, 0xFF9F, 0xFF9F },
+{ 0xFFA0, 0xFFA0, 0xFFA0 },
+{ 0xFFA1, 0xFFA1, 0xFFA1 },
+{ 0xFFA2, 0xFFA2, 0xFFA2 },
+{ 0xFFA3, 0xFFA3, 0xFFA3 },
+{ 0xFFA4, 0xFFA4, 0xFFA4 },
+{ 0xFFA5, 0xFFA5, 0xFFA5 },
+{ 0xFFA6, 0xFFA6, 0xFFA6 },
+{ 0xFFA7, 0xFFA7, 0xFFA7 },
+{ 0xFFA8, 0xFFA8, 0xFFA8 },
+{ 0xFFA9, 0xFFA9, 0xFFA9 },
+{ 0xFFAA, 0xFFAA, 0xFFAA },
+{ 0xFFAB, 0xFFAB, 0xFFAB },
+{ 0xFFAC, 0xFFAC, 0xFFAC },
+{ 0xFFAD, 0xFFAD, 0xFFAD },
+{ 0xFFAE, 0xFFAE, 0xFFAE },
+{ 0xFFAF, 0xFFAF, 0xFFAF },
+{ 0xFFB0, 0xFFB0, 0xFFB0 },
+{ 0xFFB1, 0xFFB1, 0xFFB1 },
+{ 0xFFB2, 0xFFB2, 0xFFB2 },
+{ 0xFFB3, 0xFFB3, 0xFFB3 },
+{ 0xFFB4, 0xFFB4, 0xFFB4 },
+{ 0xFFB5, 0xFFB5, 0xFFB5 },
+{ 0xFFB6, 0xFFB6, 0xFFB6 },
+{ 0xFFB7, 0xFFB7, 0xFFB7 },
+{ 0xFFB8, 0xFFB8, 0xFFB8 },
+{ 0xFFB9, 0xFFB9, 0xFFB9 },
+{ 0xFFBA, 0xFFBA, 0xFFBA },
+{ 0xFFBB, 0xFFBB, 0xFFBB },
+{ 0xFFBC, 0xFFBC, 0xFFBC },
+{ 0xFFBD, 0xFFBD, 0xFFBD },
+{ 0xFFBE, 0xFFBE, 0xFFBE },
+{ 0xFFC2, 0xFFC2, 0xFFC2 },
+{ 0xFFC3, 0xFFC3, 0xFFC3 },
+{ 0xFFC4, 0xFFC4, 0xFFC4 },
+{ 0xFFC5, 0xFFC5, 0xFFC5 },
+{ 0xFFC6, 0xFFC6, 0xFFC6 },
+{ 0xFFC7, 0xFFC7, 0xFFC7 },
+{ 0xFFCA, 0xFFCA, 0xFFCA },
+{ 0xFFCB, 0xFFCB, 0xFFCB },
+{ 0xFFCC, 0xFFCC, 0xFFCC },
+{ 0xFFCD, 0xFFCD, 0xFFCD },
+{ 0xFFCE, 0xFFCE, 0xFFCE },
+{ 0xFFCF, 0xFFCF, 0xFFCF },
+{ 0xFFD2, 0xFFD2, 0xFFD2 },
+{ 0xFFD3, 0xFFD3, 0xFFD3 },
+{ 0xFFD4, 0xFFD4, 0xFFD4 },
+{ 0xFFD5, 0xFFD5, 0xFFD5 },
+{ 0xFFD6, 0xFFD6, 0xFFD6 },
+{ 0xFFD7, 0xFFD7, 0xFFD7 },
+{ 0xFFDA, 0xFFDA, 0xFFDA },
+{ 0xFFDB, 0xFFDB, 0xFFDB },
+{ 0xFFDC, 0xFFDC, 0xFFDC }
+};
diff --git a/chrome/third_party/hunspell/src/parsers/textparser.cxx b/chrome/third_party/hunspell/src/parsers/textparser.cxx
new file mode 100644
index 0000000..97037b4
--- /dev/null
+++ b/chrome/third_party/hunspell/src/parsers/textparser.cxx
@@ -0,0 +1,205 @@
+#include <cstdlib>
+#include <cstring>
+#include <cstdio>
+#include <ctype.h>
+
+#include "../hunspell/csutil.hxx"
+#include "textparser.hxx"
+
+#ifndef W32
+using namespace std;
+#endif
+
+// ISO-8859-1 HTML character entities
+
+static char * LATIN1[] = {
+ "&Agrave;",
+ "&Atilde;",
+ "&Aring;",
+ "&AElig;",
+ "&Egrave;",
+ "&Ecirc;",
+ "&Igrave;",
+ "&Iuml;",
+ "&ETH;",
+ "&Ntilde;",
+ "&Ograve;",
+ "&Oslash;",
+ "&Ugrave;",
+ "&THORN;",
+ "&agrave;",
+ "&atilde;",
+ "&aring;",
+ "&aelig;",
+ "&egrave;",
+ "&ecirc;",
+ "&igrave;",
+ "&iuml;",
+ "&eth;",
+ "&ntilde;",
+ "&ograve;",
+ "&oslash;",
+ "&ugrave;",
+ "&thorn;",
+ "&yuml;"
+};
+
+#define LATIN1_LEN (sizeof(LATIN1) / sizeof(char *))
+
+TextParser::TextParser() {
+ init((char *) NULL);
+}
+
+TextParser::TextParser(const char * wordchars)
+{
+ init(wordchars);
+}
+
+TextParser::TextParser(unsigned short * wordchars, int len)
+{
+ init(wordchars, len);
+}
+
+TextParser::~TextParser()
+{
+}
+
+int TextParser::is_wordchar(char * w)
+{
+ if (*w == '\0') return 0;
+ if (utf8) {
+ w_char wc;
+ unsigned short idx;
+ u8_u16(&wc, 1, w);
+ idx = (wc.h << 8) + wc.l;
+ return (unicodeisalpha(idx) || (wordchars_utf16 && flag_bsearch(wordchars_utf16, *((unsigned short *) &wc), wclen)));
+ } else {
+ return wordcharacters[(*w + 256) % 256];
+ }
+}
+
+char * TextParser::get_latin1(char * s)
+{
+ if (s[0] == '&') {
+ unsigned int i = 0;
+ while ((i < LATIN1_LEN) &&
+ strncmp(LATIN1[i], s, strlen(LATIN1[i]))) i++;
+ if (i != LATIN1_LEN) return LATIN1[i];
+ }
+ return NULL;
+}
+
+void TextParser::init(const char * wordchars)
+{
+ for (int i = 0; i < MAXPREVLINE; i++) {
+ line[i][0] = '\0';
+ }
+ actual = 0;
+ head = 0;
+ token = 0;
+ state = 0;
+ utf8 = 0;
+ unsigned int j;
+ for (j = 0; j < 256; j++)
+ wordcharacters[j] = 0;
+ if (!wordchars) wordchars = "qwertzuiopasdfghjklyxcvbnmQWERTZUIOPASDFGHJKLYXCVBNM";
+ for (j = 0; j < strlen(wordchars); j++) {
+ wordcharacters[(wordchars[j] + 256) % 256] = 1;
+ }
+}
+
+void TextParser::init(unsigned short * wc, int len)
+{
+ for (int i = 0; i < MAXPREVLINE; i++) {
+ line[i][0] = '\0';
+ }
+ actual = 0;
+ head = 0;
+ token = 0;
+ state = 0;
+ utf8 = 1;
+ wordchars_utf16 = wc;
+ wclen = len;
+}
+
+int TextParser::next_char(char * line, int * pos) {
+ if (*(line + *pos) == '\0') return 1;
+ if (utf8) {
+ if (*(line + *pos) >> 7) {
+ // jump to next UTF-8 character
+ for((*pos)++; (*(line + *pos) & 0xc0) == 0x80; (*pos)++);
+ } else {
+ (*pos)++;
+ }
+ } else (*pos)++;
+ return 0;
+}
+
+void TextParser::put_line(char * word)
+{
+ actual = (actual + 1) % MAXPREVLINE;
+ strcpy(line[actual], word);
+ token = 0;
+ head = 0;
+}
+
+char * TextParser::get_prevline(int n)
+{
+ return mystrdup(line[(actual + MAXPREVLINE - n) % MAXPREVLINE]);
+}
+
+char * TextParser::get_line()
+{
+ return get_prevline(0);
+}
+
+char * TextParser::next_token()
+{
+ char * latin1;
+
+ for (;;) {
+ switch (state)
+ {
+ case 0: // non word chars
+ if (is_wordchar(line[actual] + head)) {
+ state = 1;
+ token = head;
+ } else if ((latin1 = get_latin1(line[actual] + head))) {
+ state = 1;
+ token = head;
+ head += strlen(latin1);
+ }
+ break;
+ case 1: // wordchar
+ if ((latin1 = get_latin1(line[actual] + head))) {
+ head += strlen(latin1);
+ } else if (! is_wordchar(line[actual] + head)) {
+ state = 0;
+ char * t = (char *) malloc(head - token + 1);
+ t[head - token] = '\0';
+ if (t) return strncpy(t, line[actual] + token, head - token);
+ fprintf(stderr,"Error - Insufficient Memory\n");
+ }
+ break;
+ }
+ if (next_char(line[actual], &head)) return NULL;
+ }
+}
+
+int TextParser::get_tokenpos()
+{
+ return token;
+}
+
+int TextParser::change_token(const char * word)
+{
+ if (word) {
+ char * r = mystrdup(line[actual] + head);
+ strcpy(line[actual] + token, word);
+ strcat(line[actual], r);
+ head = token;
+ free(r);
+ return 1;
+ }
+ return 0;
+}
diff --git a/chrome/third_party/hunspell/src/parsers/textparser.hxx b/chrome/third_party/hunspell/src/parsers/textparser.hxx
new file mode 100644
index 0000000..1049d86
--- /dev/null
+++ b/chrome/third_party/hunspell/src/parsers/textparser.hxx
@@ -0,0 +1,60 @@
+/*
+ * parser classes for MySpell
+ *
+ * implemented: text, HTML, TeX
+ *
+ * Copyright (C) 2002, Laszlo Nemeth
+ *
+ */
+
+#ifndef _TEXTPARSER_HXX_
+#define _TEXTPARSER_HXX_
+
+// set sum of actual and previous lines
+#define MAXPREVLINE 4
+
+#define MAXLNLEN 8192 * 4
+
+/*
+ * Base Text Parser
+ *
+ */
+
+class TextParser
+{
+
+protected:
+ void init(const char *);
+ void init(unsigned short * wordchars, int len);
+ int wordcharacters[256]; // for detection of the word boundaries
+ char line[MAXPREVLINE][MAXLNLEN]; // parsed and previous lines
+ int actual; // actual line
+ int head; // head position
+ int token; // begin of token
+ int state; // state of automata
+ int utf8; // UTF-8 character encoding
+ int next_char(char * line, int * pos);
+ unsigned short * wordchars_utf16;
+ int wclen;
+
+public:
+
+ TextParser();
+ TextParser(unsigned short * wordchars, int len);
+ TextParser(const char * wc);
+ virtual ~TextParser();
+
+ void put_line(char * line);
+ char * get_line();
+ char * get_prevline(int n);
+ virtual char * next_token();
+ int change_token(const char * word);
+ int get_tokenpos();
+ int is_wordchar(char * w);
+ char * get_latin1(char * s);
+ char * next_char();
+
+};
+
+#endif
+
diff --git a/chrome/third_party/hunspell/tests/1592880.aff b/chrome/third_party/hunspell/tests/1592880.aff
new file mode 100644
index 0000000..f37cadd
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/1592880.aff
@@ -0,0 +1,18 @@
+SET ISO8859-1
+
+SFX N Y 1
+SFX N 0 n .
+
+SFX S Y 1
+SFX S 0 s .
+
+SFX P Y 1
+SFX P 0 en .
+
+SFX Q Y 2
+SFX Q 0 e .
+SFX Q 0 en .
+
+COMPOUNDEND z
+COMPOUNDPERMITFLAG c
+ONLYINCOMPOUND o
diff --git a/chrome/third_party/hunspell/tests/1592880.dic b/chrome/third_party/hunspell/tests/1592880.dic
new file mode 100644
index 0000000..8b0fef8
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/1592880.dic
@@ -0,0 +1,4 @@
+3
+weg/Qoz
+weg/P
+wege
diff --git a/chrome/third_party/hunspell/tests/1592880.good b/chrome/third_party/hunspell/tests/1592880.good
new file mode 100644
index 0000000..aa00a58b
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/1592880.good
@@ -0,0 +1,3 @@
+weg
+wege
+wegen
diff --git a/chrome/third_party/hunspell/tests/1592880.test b/chrome/third_party/hunspell/tests/1592880.test
new file mode 100644
index 0000000..7f44369
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/1592880.test
@@ -0,0 +1,4 @@
+#!/bin/sh
+DIR="`dirname $0`"
+NAME="`basename $0 .test`"
+$DIR/test.sh $NAME
diff --git a/chrome/third_party/hunspell/tests/Makefile.am b/chrome/third_party/hunspell/tests/Makefile.am
new file mode 100644
index 0000000..15f7b3f
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/Makefile.am
@@ -0,0 +1,406 @@
+## Process this file with automake to create Makefile.in
+
+XFAIL_TESTS = @XFAILED@
+
+TESTS = \
+affixes.test \
+base.test \
+keepcase.test \
+i58202.test \
+map.test \
+rep.test \
+sug.test \
+flag.test \
+flaglong.test \
+flagnum.test \
+flagutf8.test \
+slash.test \
+forbiddenword.test \
+nosuggest.test \
+alias.test \
+alias2.test \
+alias3.test \
+break.test \
+needaffix.test \
+needaffix2.test \
+needaffix3.test \
+needaffix4.test \
+needaffix5.test \
+circumfix.test \
+fogemorpheme.test \
+onlyincompound.test \
+complexprefixes.test \
+complexprefixes2.test \
+complexprefixesutf.test \
+conditionalprefix.test \
+zeroaffix.test \
+utf8.test \
+utf8_bom.test \
+utf8_bom2.test \
+utf8_nonbmp.test \
+compoundflag.test \
+compoundrule.test \
+compoundrule2.test \
+compoundrule3.test \
+compoundrule4.test \
+compoundrule5.test \
+compoundrule6.test \
+compoundaffix.test \
+compoundaffix2.test \
+compoundaffix3.test \
+checkcompounddup.test \
+checkcompoundtriple.test \
+checkcompoundrep.test \
+checkcompoundcase2.test \
+checkcompoundcaseutf.test \
+checkcompoundpattern.test \
+utfcompound.test \
+checksharps.test \
+checksharpsutf.test \
+germancompounding.test \
+germancompoundingold.test \
+i35725.test \
+i53643.test \
+i54633.test \
+i54980.test \
+maputf.test \
+reputf.test \
+ignore.test \
+ignoreutf.test \
+1592880.test
+# infixes.test
+
+distclean-local:
+ -rm -rf testSubDir
+
+EXTRA_DIST = \
+test.sh \
+affixes.aff \
+affixes.dic \
+affixes.good \
+affixes.test \
+base.aff \
+base.dic \
+base.good \
+base.sug \
+base.test \
+base.wrong \
+keepcase.aff \
+keepcase.dic \
+keepcase.good \
+keepcase.sug \
+keepcase.test \
+keepcase.wrong \
+map.aff \
+map.dic \
+map.sug \
+map.test \
+map.wrong \
+rep.aff \
+rep.dic \
+rep.sug \
+rep.test \
+rep.wrong \
+sug.aff \
+sug.dic \
+sug.sug \
+sug.test \
+sug.wrong \
+alias.aff \
+alias.dic \
+alias.good \
+alias.test \
+alias2.aff \
+alias2.dic \
+alias2.good \
+alias2.morph \
+alias2.test \
+alias3.aff \
+alias3.dic \
+alias3.good \
+alias3.morph \
+alias3.test \
+break.aff \
+break.dic \
+break.good \
+break.test \
+break.wrong \
+circumfix.aff \
+circumfix.dic \
+circumfix.good \
+circumfix.morph \
+circumfix.test \
+circumfix.wrong \
+fogemorpheme.aff \
+fogemorpheme.dic \
+fogemorpheme.good \
+fogemorpheme.test \
+fogemorpheme.wrong \
+onlyincompound.aff \
+onlyincompound.dic \
+onlyincompound.good \
+onlyincompound.sug \
+onlyincompound.test \
+onlyincompound.wrong \
+forbiddenword.aff \
+forbiddenword.dic \
+forbiddenword.good \
+forbiddenword.test \
+forbiddenword.wrong \
+nosuggest.aff \
+nosuggest.dic \
+nosuggest.good \
+nosuggest.sug \
+nosuggest.test \
+nosuggest.wrong \
+germancompounding.aff \
+germancompounding.dic \
+germancompounding.good \
+germancompounding.test \
+germancompounding.wrong \
+germancompoundingold.aff \
+germancompoundingold.dic \
+germancompoundingold.good \
+germancompoundingold.test \
+germancompoundingold.wrong \
+needaffix2.aff \
+needaffix2.dic \
+needaffix2.good \
+needaffix2.morph \
+needaffix2.test \
+needaffix3.aff \
+needaffix3.dic \
+needaffix3.good \
+needaffix3.test \
+needaffix3.wrong \
+needaffix4.aff \
+needaffix4.dic \
+needaffix4.good \
+needaffix4.test \
+needaffix5.aff \
+needaffix5.dic \
+needaffix5.good \
+needaffix5.test \
+needaffix5.wrong \
+needaffix.aff \
+needaffix.dic \
+needaffix.good \
+needaffix.test \
+needaffix.wrong \
+zeroaffix.aff \
+zeroaffix.dic \
+zeroaffix.good \
+zeroaffix.morph \
+zeroaffix.test \
+utf8.aff \
+utf8.dic \
+utf8.good \
+utf8.test \
+utf8_bom.aff \
+utf8_bom.dic \
+utf8_bom.good \
+utf8_bom.test \
+utf8_bom2.aff \
+utf8_bom2.dic \
+utf8_bom2.good \
+utf8_bom2.test \
+utf8_nonbmp.aff \
+utf8_nonbmp.dic \
+utf8_nonbmp.good \
+utf8_nonbmp.test \
+utf8_nonbmp.wrong \
+utfcompound.aff \
+utfcompound.dic \
+utfcompound.good \
+utfcompound.test \
+utfcompound.wrong \
+compoundflag.aff \
+compoundflag.dic \
+compoundflag.good \
+compoundflag.test \
+compoundflag.wrong \
+compoundrule.aff \
+compoundrule.dic \
+compoundrule.good \
+compoundrule.test \
+compoundrule.wrong \
+compoundrule2.aff \
+compoundrule2.dic \
+compoundrule2.good \
+compoundrule2.test \
+compoundrule2.wrong \
+compoundrule3.aff \
+compoundrule3.dic \
+compoundrule3.good \
+compoundrule3.test \
+compoundrule3.wrong \
+compoundrule4.aff \
+compoundrule4.dic \
+compoundrule4.good \
+compoundrule4.test \
+compoundrule4.wrong \
+compoundrule5.aff \
+compoundrule5.dic \
+compoundrule5.good \
+compoundrule5.morph \
+compoundrule5.test \
+compoundrule5.wrong \
+compoundrule6.aff \
+compoundrule6.dic \
+compoundrule6.good \
+compoundrule6.test \
+compoundrule6.wrong \
+compoundaffix.aff \
+compoundaffix.dic \
+compoundaffix.good \
+compoundaffix.test \
+compoundaffix.wrong \
+compoundaffix2.aff \
+compoundaffix2.dic \
+compoundaffix2.good \
+compoundaffix2.test \
+compoundaffix3.aff \
+compoundaffix3.dic \
+compoundaffix3.good \
+compoundaffix3.test \
+compoundaffix3.wrong \
+checkcompounddup.aff \
+checkcompounddup.dic \
+checkcompounddup.good \
+checkcompounddup.test \
+checkcompounddup.wrong \
+checkcompoundcase.aff \
+checkcompoundcase.dic \
+checkcompoundcase.good \
+checkcompoundcase.test \
+checkcompoundcase.wrong \
+checkcompoundcase2.aff \
+checkcompoundcase2.dic \
+checkcompoundcase2.good \
+checkcompoundcase2.test \
+checkcompoundcase2.wrong \
+checkcompoundcaseutf.aff \
+checkcompoundcaseutf.dic \
+checkcompoundcaseutf.good \
+checkcompoundcaseutf.test \
+checkcompoundcaseutf.wrong \
+checkcompoundrep.aff \
+checkcompoundrep.dic \
+checkcompoundrep.good \
+checkcompoundrep.test \
+checkcompoundrep.wrong \
+checkcompoundtriple.aff \
+checkcompoundtriple.dic \
+checkcompoundtriple.good \
+checkcompoundtriple.test \
+checkcompoundtriple.wrong \
+checkcompoundpattern.aff \
+checkcompoundpattern.dic \
+checkcompoundpattern.good \
+checkcompoundpattern.test \
+checkcompoundpattern.wrong \
+checksharps.aff \
+checksharps.dic \
+checksharps.good \
+checksharps.sug \
+checksharps.test \
+checksharps.wrong \
+checksharpsutf.aff \
+checksharpsutf.dic \
+checksharpsutf.good \
+checksharpsutf.sug \
+checksharpsutf.test \
+checksharpsutf.wrong \
+conditionalprefix.aff \
+conditionalprefix.dic \
+conditionalprefix.good \
+conditionalprefix.morph \
+conditionalprefix.test \
+conditionalprefix.wrong \
+flaglong.aff \
+flaglong.dic \
+flaglong.good \
+flaglong.test \
+flagnum.aff \
+flagnum.dic \
+flagnum.good \
+flagnum.test \
+flag.aff \
+flag.dic \
+flag.good \
+flag.test \
+flagutf8.aff \
+flagutf8.dic \
+flagutf8.good \
+flagutf8.test \
+complexprefixes.aff \
+complexprefixes.dic \
+complexprefixes.good \
+complexprefixes.wrong \
+complexprefixes.test \
+complexprefixes2.aff \
+complexprefixes2.dic \
+complexprefixes2.good \
+complexprefixes2.test \
+complexprefixesutf.aff \
+complexprefixesutf.dic \
+complexprefixesutf.good \
+complexprefixesutf.wrong \
+complexprefixesutf.test \
+i35725.aff \
+i35725.dic \
+i35725.good \
+i35725.sug \
+i35725.test \
+i35725.wrong \
+i53643.aff \
+i53643.dic \
+i53643.good \
+i53643.test \
+i53643.wrong \
+i54633.aff \
+i54633.dic \
+i54633.good \
+i54633.sug \
+i54633.test \
+i54633.wrong \
+i54980.aff \
+i54980.dic \
+i54980.good \
+i54980.test \
+i58202.aff \
+i58202.dic \
+i58202.good \
+i58202.sug \
+i58202.test \
+i58202.wrong \
+maputf.aff \
+maputf.dic \
+maputf.sug \
+maputf.wrong \
+maputf.test \
+reputf.aff \
+reputf.dic \
+reputf.sug \
+reputf.wrong \
+reputf.test \
+slash.aff \
+slash.dic \
+slash.good \
+slash.test \
+ignore.aff \
+ignore.dic \
+ignore.good \
+ignore.test \
+ignoreutf.aff \
+ignoreutf.dic \
+ignoreutf.good \
+ignoreutf.test \
+1592880.aff \
+1592880.dic \
+1592880.good \
+1592880.test
+# infixes.aff
+# infixes.dic
+# infixes.good
+# infixes.test
diff --git a/chrome/third_party/hunspell/tests/Makefile.in b/chrome/third_party/hunspell/tests/Makefile.in
new file mode 100644
index 0000000..40f1240
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/Makefile.in
@@ -0,0 +1,826 @@
+# Makefile.in generated by automake 1.9.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004 Free Software Foundation, Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+top_builddir = ..
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+INSTALL = @INSTALL@
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+target_triplet = @target@
+subdir = tests
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/codeset.m4 \
+ $(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/glibc21.m4 \
+ $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/lcmessage.m4 \
+ $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
+ $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/progtest.m4 \
+ $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+SOURCES =
+DIST_SOURCES =
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ALLOCA = @ALLOCA@
+AMDEP_FALSE = @AMDEP_FALSE@
+AMDEP_TRUE = @AMDEP_TRUE@
+AMTAR = @AMTAR@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+BUILD_INCLUDED_LIBINTL = @BUILD_INCLUDED_LIBINTL@
+CATOBJEXT = @CATOBJEXT@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CURSESLIB = @CURSESLIB@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DATADIRNAME = @DATADIRNAME@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+ECHO = @ECHO@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+EXPERIMENTAL = @EXPERIMENTAL@
+F77 = @F77@
+FFLAGS = @FFLAGS@
+GENCAT = @GENCAT@
+GLIBC21 = @GLIBC21@
+GMSGFMT = @GMSGFMT@
+HUNSPELL_VERSION_MAJOR = @HUNSPELL_VERSION_MAJOR@
+HUNSPELL_VERSION_MINOR = @HUNSPELL_VERSION_MINOR@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INSTOBJEXT = @INSTOBJEXT@
+INTLBISON = @INTLBISON@
+INTLLIBS = @INTLLIBS@
+INTLOBJS = @INTLOBJS@
+INTL_LIBTOOL_SUFFIX_PREFIX = @INTL_LIBTOOL_SUFFIX_PREFIX@
+LDFLAGS = @LDFLAGS@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LN_S = @LN_S@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MKINSTALLDIRS = @MKINSTALLDIRS@
+MSGFMT = @MSGFMT@
+MSGMERGE = @MSGMERGE@
+OBJEXT = @OBJEXT@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+POSUB = @POSUB@
+RANLIB = @RANLIB@
+READLINELIB = @READLINELIB@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+USE_INCLUDED_LIBINTL = @USE_INCLUDED_LIBINTL@
+USE_NLS = @USE_NLS@
+VERSION = @VERSION@
+XFAILED = @XFAILED@
+XGETTEXT = @XGETTEXT@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_F77 = @ac_ct_F77@
+ac_ct_RANLIB = @ac_ct_RANLIB@
+ac_ct_STRIP = @ac_ct_STRIP@
+am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
+am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
+am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
+am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+datadir = @datadir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+sysconfdir = @sysconfdir@
+target = @target@
+target_alias = @target_alias@
+target_cpu = @target_cpu@
+target_os = @target_os@
+target_vendor = @target_vendor@
+XFAIL_TESTS = @XFAILED@
+TESTS = \
+affixes.test \
+base.test \
+keepcase.test \
+i58202.test \
+map.test \
+rep.test \
+sug.test \
+flag.test \
+flaglong.test \
+flagnum.test \
+flagutf8.test \
+slash.test \
+forbiddenword.test \
+nosuggest.test \
+alias.test \
+alias2.test \
+alias3.test \
+break.test \
+needaffix.test \
+needaffix2.test \
+needaffix3.test \
+needaffix4.test \
+needaffix5.test \
+circumfix.test \
+fogemorpheme.test \
+onlyincompound.test \
+complexprefixes.test \
+complexprefixes2.test \
+complexprefixesutf.test \
+conditionalprefix.test \
+zeroaffix.test \
+utf8.test \
+utf8_bom.test \
+utf8_bom2.test \
+utf8_nonbmp.test \
+compoundflag.test \
+compoundrule.test \
+compoundrule2.test \
+compoundrule3.test \
+compoundrule4.test \
+compoundrule5.test \
+compoundrule6.test \
+compoundaffix.test \
+compoundaffix2.test \
+compoundaffix3.test \
+checkcompounddup.test \
+checkcompoundtriple.test \
+checkcompoundrep.test \
+checkcompoundcase2.test \
+checkcompoundcaseutf.test \
+checkcompoundpattern.test \
+utfcompound.test \
+checksharps.test \
+checksharpsutf.test \
+germancompounding.test \
+germancompoundingold.test \
+i35725.test \
+i53643.test \
+i54633.test \
+i54980.test \
+maputf.test \
+reputf.test \
+ignore.test \
+ignoreutf.test \
+1592880.test
+
+EXTRA_DIST = \
+test.sh \
+affixes.aff \
+affixes.dic \
+affixes.good \
+affixes.test \
+base.aff \
+base.dic \
+base.good \
+base.sug \
+base.test \
+base.wrong \
+keepcase.aff \
+keepcase.dic \
+keepcase.good \
+keepcase.sug \
+keepcase.test \
+keepcase.wrong \
+map.aff \
+map.dic \
+map.sug \
+map.test \
+map.wrong \
+rep.aff \
+rep.dic \
+rep.sug \
+rep.test \
+rep.wrong \
+sug.aff \
+sug.dic \
+sug.sug \
+sug.test \
+sug.wrong \
+alias.aff \
+alias.dic \
+alias.good \
+alias.test \
+alias2.aff \
+alias2.dic \
+alias2.good \
+alias2.morph \
+alias2.test \
+alias3.aff \
+alias3.dic \
+alias3.good \
+alias3.morph \
+alias3.test \
+break.aff \
+break.dic \
+break.good \
+break.test \
+break.wrong \
+circumfix.aff \
+circumfix.dic \
+circumfix.good \
+circumfix.morph \
+circumfix.test \
+circumfix.wrong \
+fogemorpheme.aff \
+fogemorpheme.dic \
+fogemorpheme.good \
+fogemorpheme.test \
+fogemorpheme.wrong \
+onlyincompound.aff \
+onlyincompound.dic \
+onlyincompound.good \
+onlyincompound.sug \
+onlyincompound.test \
+onlyincompound.wrong \
+forbiddenword.aff \
+forbiddenword.dic \
+forbiddenword.good \
+forbiddenword.test \
+forbiddenword.wrong \
+nosuggest.aff \
+nosuggest.dic \
+nosuggest.good \
+nosuggest.sug \
+nosuggest.test \
+nosuggest.wrong \
+germancompounding.aff \
+germancompounding.dic \
+germancompounding.good \
+germancompounding.test \
+germancompounding.wrong \
+germancompoundingold.aff \
+germancompoundingold.dic \
+germancompoundingold.good \
+germancompoundingold.test \
+germancompoundingold.wrong \
+needaffix2.aff \
+needaffix2.dic \
+needaffix2.good \
+needaffix2.morph \
+needaffix2.test \
+needaffix3.aff \
+needaffix3.dic \
+needaffix3.good \
+needaffix3.test \
+needaffix3.wrong \
+needaffix4.aff \
+needaffix4.dic \
+needaffix4.good \
+needaffix4.test \
+needaffix5.aff \
+needaffix5.dic \
+needaffix5.good \
+needaffix5.test \
+needaffix5.wrong \
+needaffix.aff \
+needaffix.dic \
+needaffix.good \
+needaffix.test \
+needaffix.wrong \
+zeroaffix.aff \
+zeroaffix.dic \
+zeroaffix.good \
+zeroaffix.morph \
+zeroaffix.test \
+utf8.aff \
+utf8.dic \
+utf8.good \
+utf8.test \
+utf8_bom.aff \
+utf8_bom.dic \
+utf8_bom.good \
+utf8_bom.test \
+utf8_bom2.aff \
+utf8_bom2.dic \
+utf8_bom2.good \
+utf8_bom2.test \
+utf8_nonbmp.aff \
+utf8_nonbmp.dic \
+utf8_nonbmp.good \
+utf8_nonbmp.test \
+utf8_nonbmp.wrong \
+utfcompound.aff \
+utfcompound.dic \
+utfcompound.good \
+utfcompound.test \
+utfcompound.wrong \
+compoundflag.aff \
+compoundflag.dic \
+compoundflag.good \
+compoundflag.test \
+compoundflag.wrong \
+compoundrule.aff \
+compoundrule.dic \
+compoundrule.good \
+compoundrule.test \
+compoundrule.wrong \
+compoundrule2.aff \
+compoundrule2.dic \
+compoundrule2.good \
+compoundrule2.test \
+compoundrule2.wrong \
+compoundrule3.aff \
+compoundrule3.dic \
+compoundrule3.good \
+compoundrule3.test \
+compoundrule3.wrong \
+compoundrule4.aff \
+compoundrule4.dic \
+compoundrule4.good \
+compoundrule4.test \
+compoundrule4.wrong \
+compoundrule5.aff \
+compoundrule5.dic \
+compoundrule5.good \
+compoundrule5.morph \
+compoundrule5.test \
+compoundrule5.wrong \
+compoundrule6.aff \
+compoundrule6.dic \
+compoundrule6.good \
+compoundrule6.test \
+compoundrule6.wrong \
+compoundaffix.aff \
+compoundaffix.dic \
+compoundaffix.good \
+compoundaffix.test \
+compoundaffix.wrong \
+compoundaffix2.aff \
+compoundaffix2.dic \
+compoundaffix2.good \
+compoundaffix2.test \
+compoundaffix3.aff \
+compoundaffix3.dic \
+compoundaffix3.good \
+compoundaffix3.test \
+compoundaffix3.wrong \
+checkcompounddup.aff \
+checkcompounddup.dic \
+checkcompounddup.good \
+checkcompounddup.test \
+checkcompounddup.wrong \
+checkcompoundcase.aff \
+checkcompoundcase.dic \
+checkcompoundcase.good \
+checkcompoundcase.test \
+checkcompoundcase.wrong \
+checkcompoundcase2.aff \
+checkcompoundcase2.dic \
+checkcompoundcase2.good \
+checkcompoundcase2.test \
+checkcompoundcase2.wrong \
+checkcompoundcaseutf.aff \
+checkcompoundcaseutf.dic \
+checkcompoundcaseutf.good \
+checkcompoundcaseutf.test \
+checkcompoundcaseutf.wrong \
+checkcompoundrep.aff \
+checkcompoundrep.dic \
+checkcompoundrep.good \
+checkcompoundrep.test \
+checkcompoundrep.wrong \
+checkcompoundtriple.aff \
+checkcompoundtriple.dic \
+checkcompoundtriple.good \
+checkcompoundtriple.test \
+checkcompoundtriple.wrong \
+checkcompoundpattern.aff \
+checkcompoundpattern.dic \
+checkcompoundpattern.good \
+checkcompoundpattern.test \
+checkcompoundpattern.wrong \
+checksharps.aff \
+checksharps.dic \
+checksharps.good \
+checksharps.sug \
+checksharps.test \
+checksharps.wrong \
+checksharpsutf.aff \
+checksharpsutf.dic \
+checksharpsutf.good \
+checksharpsutf.sug \
+checksharpsutf.test \
+checksharpsutf.wrong \
+conditionalprefix.aff \
+conditionalprefix.dic \
+conditionalprefix.good \
+conditionalprefix.morph \
+conditionalprefix.test \
+conditionalprefix.wrong \
+flaglong.aff \
+flaglong.dic \
+flaglong.good \
+flaglong.test \
+flagnum.aff \
+flagnum.dic \
+flagnum.good \
+flagnum.test \
+flag.aff \
+flag.dic \
+flag.good \
+flag.test \
+flagutf8.aff \
+flagutf8.dic \
+flagutf8.good \
+flagutf8.test \
+complexprefixes.aff \
+complexprefixes.dic \
+complexprefixes.good \
+complexprefixes.wrong \
+complexprefixes.test \
+complexprefixes2.aff \
+complexprefixes2.dic \
+complexprefixes2.good \
+complexprefixes2.test \
+complexprefixesutf.aff \
+complexprefixesutf.dic \
+complexprefixesutf.good \
+complexprefixesutf.wrong \
+complexprefixesutf.test \
+i35725.aff \
+i35725.dic \
+i35725.good \
+i35725.sug \
+i35725.test \
+i35725.wrong \
+i53643.aff \
+i53643.dic \
+i53643.good \
+i53643.test \
+i53643.wrong \
+i54633.aff \
+i54633.dic \
+i54633.good \
+i54633.sug \
+i54633.test \
+i54633.wrong \
+i54980.aff \
+i54980.dic \
+i54980.good \
+i54980.test \
+i58202.aff \
+i58202.dic \
+i58202.good \
+i58202.sug \
+i58202.test \
+i58202.wrong \
+maputf.aff \
+maputf.dic \
+maputf.sug \
+maputf.wrong \
+maputf.test \
+reputf.aff \
+reputf.dic \
+reputf.sug \
+reputf.wrong \
+reputf.test \
+slash.aff \
+slash.dic \
+slash.good \
+slash.test \
+ignore.aff \
+ignore.dic \
+ignore.good \
+ignore.test \
+ignoreutf.aff \
+ignoreutf.dic \
+ignoreutf.good \
+ignoreutf.test \
+1592880.aff \
+1592880.dic \
+1592880.good \
+1592880.test
+
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
+ && exit 0; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu tests/Makefile'; \
+ cd $(top_srcdir) && \
+ $(AUTOMAKE) --gnu tests/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+
+distclean-libtool:
+ -rm -f libtool
+uninstall-info-am:
+tags: TAGS
+TAGS:
+
+ctags: CTAGS
+CTAGS:
+
+
+check-TESTS: $(TESTS)
+ @failed=0; all=0; xfail=0; xpass=0; skip=0; \
+ srcdir=$(srcdir); export srcdir; \
+ list='$(TESTS)'; \
+ if test -n "$$list"; then \
+ for tst in $$list; do \
+ if test -f ./$$tst; then dir=./; \
+ elif test -f $$tst; then dir=; \
+ else dir="$(srcdir)/"; fi; \
+ if $(TESTS_ENVIRONMENT) $${dir}$$tst; then \
+ all=`expr $$all + 1`; \
+ case " $(XFAIL_TESTS) " in \
+ *" $$tst "*) \
+ xpass=`expr $$xpass + 1`; \
+ failed=`expr $$failed + 1`; \
+ echo "XPASS: $$tst"; \
+ ;; \
+ *) \
+ echo "PASS: $$tst"; \
+ ;; \
+ esac; \
+ elif test $$? -ne 77; then \
+ all=`expr $$all + 1`; \
+ case " $(XFAIL_TESTS) " in \
+ *" $$tst "*) \
+ xfail=`expr $$xfail + 1`; \
+ echo "XFAIL: $$tst"; \
+ ;; \
+ *) \
+ failed=`expr $$failed + 1`; \
+ echo "FAIL: $$tst"; \
+ ;; \
+ esac; \
+ else \
+ skip=`expr $$skip + 1`; \
+ echo "SKIP: $$tst"; \
+ fi; \
+ done; \
+ if test "$$failed" -eq 0; then \
+ if test "$$xfail" -eq 0; then \
+ banner="All $$all tests passed"; \
+ else \
+ banner="All $$all tests behaved as expected ($$xfail expected failures)"; \
+ fi; \
+ else \
+ if test "$$xpass" -eq 0; then \
+ banner="$$failed of $$all tests failed"; \
+ else \
+ banner="$$failed of $$all tests did not behave as expected ($$xpass unexpected passes)"; \
+ fi; \
+ fi; \
+ dashes="$$banner"; \
+ skipped=""; \
+ if test "$$skip" -ne 0; then \
+ skipped="($$skip tests were not run)"; \
+ test `echo "$$skipped" | wc -c` -le `echo "$$banner" | wc -c` || \
+ dashes="$$skipped"; \
+ fi; \
+ report=""; \
+ if test "$$failed" -ne 0 && test -n "$(PACKAGE_BUGREPORT)"; then \
+ report="Please report to $(PACKAGE_BUGREPORT)"; \
+ test `echo "$$report" | wc -c` -le `echo "$$banner" | wc -c` || \
+ dashes="$$report"; \
+ fi; \
+ dashes=`echo "$$dashes" | sed s/./=/g`; \
+ echo "$$dashes"; \
+ echo "$$banner"; \
+ test -z "$$skipped" || echo "$$skipped"; \
+ test -z "$$report" || echo "$$report"; \
+ echo "$$dashes"; \
+ test "$$failed" -eq 0; \
+ else :; fi
+
+distdir: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
+ list='$(DISTFILES)'; for file in $$list; do \
+ case $$file in \
+ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
+ $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
+ esac; \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test "$$dir" != "$$file" && test "$$dir" != "."; then \
+ dir="/$$dir"; \
+ $(mkdir_p) "$(distdir)$$dir"; \
+ else \
+ dir=''; \
+ fi; \
+ if test -d $$d/$$file; then \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+ fi; \
+ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+ else \
+ test -f $(distdir)/$$file \
+ || cp -p $$d/$$file $(distdir)/$$file \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+ $(MAKE) $(AM_MAKEFLAGS) check-TESTS
+check: check-am
+all-am: Makefile
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ `test -z '$(STRIP)' || \
+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+ -rm -f Makefile
+distclean-am: clean-am distclean-generic distclean-libtool \
+ distclean-local
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-exec-am:
+
+install-info: install-info-am
+
+install-man:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-info-am
+
+.PHONY: all all-am check check-TESTS check-am clean clean-generic \
+ clean-libtool distclean distclean-generic distclean-libtool \
+ distclean-local distdir dvi dvi-am html html-am info info-am \
+ install install-am install-data install-data-am install-exec \
+ install-exec-am install-info install-info-am install-man \
+ install-strip installcheck installcheck-am installdirs \
+ maintainer-clean maintainer-clean-generic mostlyclean \
+ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+ uninstall uninstall-am uninstall-info-am
+
+# infixes.test
+
+distclean-local:
+ -rm -rf testSubDir
+# infixes.aff
+# infixes.dic
+# infixes.good
+# infixes.test
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/chrome/third_party/hunspell/tests/affixes.aff b/chrome/third_party/hunspell/tests/affixes.aff
new file mode 100644
index 0000000..cf3c500
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/affixes.aff
@@ -0,0 +1,7 @@
+# simple example for affix compression (see Hunspell(4))
+PFX A Y 1
+PFX A 0 re .
+
+SFX B Y 2
+SFX B 0 ed [^y]
+SFX B y ied y
diff --git a/chrome/third_party/hunspell/tests/affixes.dic b/chrome/third_party/hunspell/tests/affixes.dic
new file mode 100644
index 0000000..e228043
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/affixes.dic
@@ -0,0 +1,4 @@
+3
+hello
+try/B
+work/AB
diff --git a/chrome/third_party/hunspell/tests/affixes.good b/chrome/third_party/hunspell/tests/affixes.good
new file mode 100644
index 0000000..20097e8
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/affixes.good
@@ -0,0 +1,7 @@
+hello
+try
+tried
+work
+worked
+rework
+reworked
diff --git a/chrome/third_party/hunspell/tests/affixes.test b/chrome/third_party/hunspell/tests/affixes.test
new file mode 100644
index 0000000..7f44369
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/affixes.test
@@ -0,0 +1,4 @@
+#!/bin/sh
+DIR="`dirname $0`"
+NAME="`basename $0 .test`"
+$DIR/test.sh $NAME
diff --git a/chrome/third_party/hunspell/tests/alias.aff b/chrome/third_party/hunspell/tests/alias.aff
new file mode 100644
index 0000000..3fbce0a
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/alias.aff
@@ -0,0 +1,12 @@
+# aliases for flag vectors (AF)
+# AB -> 1
+# A -> 2
+AF 2
+AF AB
+AF A
+
+SFX A Y 1
+SFX A 0 x .
+
+SFX B Y 1
+SFX B 0 y/2 .
diff --git a/chrome/third_party/hunspell/tests/alias.dic b/chrome/third_party/hunspell/tests/alias.dic
new file mode 100644
index 0000000..e0af3c9
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/alias.dic
@@ -0,0 +1,2 @@
+1
+foo/1
diff --git a/chrome/third_party/hunspell/tests/alias.good b/chrome/third_party/hunspell/tests/alias.good
new file mode 100644
index 0000000..71702f2
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/alias.good
@@ -0,0 +1,4 @@
+foo
+foox
+fooy
+fooyx
diff --git a/chrome/third_party/hunspell/tests/alias.test b/chrome/third_party/hunspell/tests/alias.test
new file mode 100644
index 0000000..7f44369
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/alias.test
@@ -0,0 +1,4 @@
+#!/bin/sh
+DIR="`dirname $0`"
+NAME="`basename $0 .test`"
+$DIR/test.sh $NAME
diff --git a/chrome/third_party/hunspell/tests/alias2.aff b/chrome/third_party/hunspell/tests/alias2.aff
new file mode 100644
index 0000000..e45d721
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/alias2.aff
@@ -0,0 +1,17 @@
+# aliases for flag vectors (AF) and morphological descriptions (AM)
+# AB -> 1
+# A -> 2
+AF 2
+AF AB
+AF A
+
+AM 3
+AM /affix_x
+AM /affix_y
+AM [footype]
+
+SFX A Y 1
+SFX A 0 x . 1
+
+SFX B Y 1
+SFX B 0 y/2 . 2
diff --git a/chrome/third_party/hunspell/tests/alias2.dic b/chrome/third_party/hunspell/tests/alias2.dic
new file mode 100644
index 0000000..60300ac
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/alias2.dic
@@ -0,0 +1,2 @@
+1
+foo/1 3
diff --git a/chrome/third_party/hunspell/tests/alias2.good b/chrome/third_party/hunspell/tests/alias2.good
new file mode 100644
index 0000000..71702f2
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/alias2.good
@@ -0,0 +1,4 @@
+foo
+foox
+fooy
+fooyx
diff --git a/chrome/third_party/hunspell/tests/alias2.morph b/chrome/third_party/hunspell/tests/alias2.morph
new file mode 100644
index 0000000..3f34523
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/alias2.morph
@@ -0,0 +1,8 @@
+> foo
+foo[footype]
+> foox
+foo[footype]/affix_x
+> fooy
+foo[footype]/affix_y
+> fooyx
+foo[footype]/affix_y/affix_x
diff --git a/chrome/third_party/hunspell/tests/alias2.test b/chrome/third_party/hunspell/tests/alias2.test
new file mode 100644
index 0000000..7f44369
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/alias2.test
@@ -0,0 +1,4 @@
+#!/bin/sh
+DIR="`dirname $0`"
+NAME="`basename $0 .test`"
+$DIR/test.sh $NAME
diff --git a/chrome/third_party/hunspell/tests/alias3.aff b/chrome/third_party/hunspell/tests/alias3.aff
new file mode 100644
index 0000000..a328185
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/alias3.aff
@@ -0,0 +1,18 @@
+# morph. aliases with complex prefixes
+COMPLEXPREFIXES
+WORDCHARS _
+
+AM 4
+AM affix_1/
+AM affix_2/
+AM /suffix_1
+AM [stem_1]
+
+PFX A Y 1
+PFX A 0 tek . 1
+
+PFX B Y 1
+PFX B 0 met/A . 2
+
+SFX C Y 1
+SFX C 0 _test_ . 3
diff --git a/chrome/third_party/hunspell/tests/alias3.dic b/chrome/third_party/hunspell/tests/alias3.dic
new file mode 100644
index 0000000..f22567c
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/alias3.dic
@@ -0,0 +1,2 @@
+1
+ouro/BC 4
diff --git a/chrome/third_party/hunspell/tests/alias3.good b/chrome/third_party/hunspell/tests/alias3.good
new file mode 100644
index 0000000..6bf8228
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/alias3.good
@@ -0,0 +1,4 @@
+ouro
+metouro
+tekmetouro
+ouro_test_
diff --git a/chrome/third_party/hunspell/tests/alias3.morph b/chrome/third_party/hunspell/tests/alias3.morph
new file mode 100644
index 0000000..3cae35c
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/alias3.morph
@@ -0,0 +1,8 @@
+> ouro
+[stem_1]ouro
+> metouro
+affix_2/ouro[stem_1]
+> tekmetouro
+affix_1/affix_2/ouro[stem_1]
+> ouro_test_
+[stem_1]/suffix_1
diff --git a/chrome/third_party/hunspell/tests/alias3.test b/chrome/third_party/hunspell/tests/alias3.test
new file mode 100644
index 0000000..7f44369
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/alias3.test
@@ -0,0 +1,4 @@
+#!/bin/sh
+DIR="`dirname $0`"
+NAME="`basename $0 .test`"
+$DIR/test.sh $NAME
diff --git a/chrome/third_party/hunspell/tests/base.aff b/chrome/third_party/hunspell/tests/base.aff
new file mode 100644
index 0000000..f0c4dd0
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/base.aff
@@ -0,0 +1,192 @@
+# OpenOffice.org's en_US.aff file
+
+SET ISO8859-1
+TRY esianrtolcdugmphbyfvkwzESIANRTOLCDUGMPHBYFVKWZ'
+
+WORDCHARS '
+
+PFX A Y 1
+PFX A 0 re .
+
+PFX I Y 1
+PFX I 0 in .
+
+PFX U Y 1
+PFX U 0 un .
+
+PFX C Y 1
+PFX C 0 de .
+
+PFX E Y 1
+PFX E 0 dis .
+
+PFX F Y 1
+PFX F 0 con .
+
+PFX K Y 1
+PFX K 0 pro .
+
+SFX V N 2
+SFX V e ive e
+SFX V 0 ive [^e]
+
+SFX N Y 3
+SFX N e ion e
+SFX N y ication y
+SFX N 0 en [^ey]
+
+SFX X Y 3
+SFX X e ions e
+SFX X y ications y
+SFX X 0 ens [^ey]
+
+SFX H N 2
+SFX H y ieth y
+SFX H 0 th [^y]
+
+SFX Y Y 1
+SFX Y 0 ly .
+
+SFX G Y 2
+SFX G e ing e
+SFX G 0 ing [^e]
+
+SFX J Y 2
+SFX J e ings e
+SFX J 0 ings [^e]
+
+SFX D Y 4
+SFX D 0 d e
+SFX D y ied [^aeiou]y
+SFX D 0 ed [^ey]
+SFX D 0 ed [aeiou]y
+
+SFX T N 4
+SFX T 0 st e
+SFX T y iest [^aeiou]y
+SFX T 0 est [aeiou]y
+SFX T 0 est [^ey]
+
+SFX R Y 4
+SFX R 0 r e
+SFX R y ier [^aeiou]y
+SFX R 0 er [aeiou]y
+SFX R 0 er [^ey]
+
+SFX Z Y 4
+SFX Z 0 rs e
+SFX Z y iers [^aeiou]y
+SFX Z 0 ers [aeiou]y
+SFX Z 0 ers [^ey]
+
+SFX S Y 4
+SFX S y ies [^aeiou]y
+SFX S 0 s [aeiou]y
+SFX S 0 es [sxzh]
+SFX S 0 s [^sxzhy]
+
+SFX P Y 3
+SFX P y iness [^aeiou]y
+SFX P 0 ness [aeiou]y
+SFX P 0 ness [^y]
+
+SFX M Y 1
+SFX M 0 's .
+
+SFX B Y 3
+SFX B 0 able [^aeiou]
+SFX B 0 able ee
+SFX B e able [^aeiou]e
+
+SFX L Y 1
+SFX L 0 ment .
+
+REP 88
+REP a ei
+REP ei a
+REP a ey
+REP ey a
+REP ai ie
+REP ie ai
+REP are air
+REP are ear
+REP are eir
+REP air are
+REP air ere
+REP ere air
+REP ere ear
+REP ere eir
+REP ear are
+REP ear air
+REP ear ere
+REP eir are
+REP eir ere
+REP ch te
+REP te ch
+REP ch ti
+REP ti ch
+REP ch tu
+REP tu ch
+REP ch s
+REP s ch
+REP ch k
+REP k ch
+REP f ph
+REP ph f
+REP gh f
+REP f gh
+REP i igh
+REP igh i
+REP i uy
+REP uy i
+REP i ee
+REP ee i
+REP j di
+REP di j
+REP j gg
+REP gg j
+REP j ge
+REP ge j
+REP s ti
+REP ti s
+REP s ci
+REP ci s
+REP k cc
+REP cc k
+REP k qu
+REP qu k
+REP kw qu
+REP o eau
+REP eau o
+REP o ew
+REP ew o
+REP oo ew
+REP ew oo
+REP ew ui
+REP ui ew
+REP oo ui
+REP ui oo
+REP ew u
+REP u ew
+REP oo u
+REP u oo
+REP u oe
+REP oe u
+REP u ieu
+REP ieu u
+REP ue ew
+REP ew ue
+REP uff ough
+REP oo ieu
+REP ieu oo
+REP ier ear
+REP ear ier
+REP ear air
+REP air ear
+REP w qu
+REP qu w
+REP z ss
+REP ss z
+REP shun tion
+REP shun sion
+REP shun cion
diff --git a/chrome/third_party/hunspell/tests/base.dic b/chrome/third_party/hunspell/tests/base.dic
new file mode 100644
index 0000000..9d78959
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/base.dic
@@ -0,0 +1,28 @@
+27
+created/U
+create/XKVNGADS
+imply/GNSDX
+natural/PUY
+like/USPBY
+convey/BDGS
+look/GZRDS
+text
+hello
+said
+sawyer
+NASA
+rotten
+day
+tomorrow
+seven
+FAQ/SM
+can't
+doesn't
+etc
+won't
+lip
+text
+horrifying
+speech
+suggest
+uncreate/V
diff --git a/chrome/third_party/hunspell/tests/base.good b/chrome/third_party/hunspell/tests/base.good
new file mode 100644
index 0000000..cf2d6cf
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/base.good
@@ -0,0 +1,22 @@
+created
+uncreate
+uncreated
+imply
+implied
+unnatural
+conveyed
+sawyer
+NASA
+FAQs
+can't
+doesn't
+won't
+Created
+Hello
+HELLO
+NASA
+etc.
+etc
+HELLO
+lip.
+text. \ No newline at end of file
diff --git a/chrome/third_party/hunspell/tests/base.sug b/chrome/third_party/hunspell/tests/base.sug
new file mode 100644
index 0000000..a4a8186
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/base.sug
@@ -0,0 +1,10 @@
+looked
+text
+hello
+said
+rotten day
+tomorrow
+NASA
+horrifying
+speech
+suggest
diff --git a/chrome/third_party/hunspell/tests/base.test b/chrome/third_party/hunspell/tests/base.test
new file mode 100644
index 0000000..7f44369
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/base.test
@@ -0,0 +1,4 @@
+#!/bin/sh
+DIR="`dirname $0`"
+NAME="`basename $0 .test`"
+$DIR/test.sh $NAME
diff --git a/chrome/third_party/hunspell/tests/base.wrong b/chrome/third_party/hunspell/tests/base.wrong
new file mode 100644
index 0000000..667a895
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/base.wrong
@@ -0,0 +1,11 @@
+loooked
+texxt
+hlelo
+seid
+rottenday
+tomorow
+sezzven
+Nasa
+horrorfying
+peech
+sugesst
diff --git a/chrome/third_party/hunspell/tests/break.aff b/chrome/third_party/hunspell/tests/break.aff
new file mode 100644
index 0000000..47b8f6b
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/break.aff
@@ -0,0 +1,8 @@
+# word break points test, recursive break at dash and n-dash
+SET UTF-8
+
+BREAK 2
+BREAK -
+BREAK –
+
+WORDCHARS -–
diff --git a/chrome/third_party/hunspell/tests/break.dic b/chrome/third_party/hunspell/tests/break.dic
new file mode 100644
index 0000000..f3d2aa0
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/break.dic
@@ -0,0 +1,4 @@
+3
+foo
+bar
+fox-bax
diff --git a/chrome/third_party/hunspell/tests/break.good b/chrome/third_party/hunspell/tests/break.good
new file mode 100644
index 0000000..5f08bfd
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/break.good
@@ -0,0 +1,7 @@
+foo
+bar
+fox-bax
+foo-bar
+foo–bar
+foo-bar-foo-bar
+foo-bar–foo-bar
diff --git a/chrome/third_party/hunspell/tests/break.test b/chrome/third_party/hunspell/tests/break.test
new file mode 100644
index 0000000..7f44369
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/break.test
@@ -0,0 +1,4 @@
+#!/bin/sh
+DIR="`dirname $0`"
+NAME="`basename $0 .test`"
+$DIR/test.sh $NAME
diff --git a/chrome/third_party/hunspell/tests/break.wrong b/chrome/third_party/hunspell/tests/break.wrong
new file mode 100644
index 0000000..c783ee4
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/break.wrong
@@ -0,0 +1,10 @@
+fox
+bax
+fox-bar
+foo-bax
+foo–bax
+fox–bar
+foo-bar-fox-bar
+foo-bax-foo-bar
+foo-bar–fox-bar
+foo-bax–foo-bar
diff --git a/chrome/third_party/hunspell/tests/checkcompoundcase.aff b/chrome/third_party/hunspell/tests/checkcompoundcase.aff
new file mode 100644
index 0000000..7ac46ee
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/checkcompoundcase.aff
@@ -0,0 +1,3 @@
+# forbid upper case letters at word bounds in compounding
+CHECKCOMPOUNDCASE
+COMPOUNDFLAG A
diff --git a/chrome/third_party/hunspell/tests/checkcompoundcase.dic b/chrome/third_party/hunspell/tests/checkcompoundcase.dic
new file mode 100644
index 0000000..80f65d3
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/checkcompoundcase.dic
@@ -0,0 +1,5 @@
+4
+foo/A
+Bar/A
+BAZ/A
+-/A
diff --git a/chrome/third_party/hunspell/tests/checkcompoundcase.good b/chrome/third_party/hunspell/tests/checkcompoundcase.good
new file mode 100644
index 0000000..9cbd7906
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/checkcompoundcase.good
@@ -0,0 +1,5 @@
+Barfoo
+foo-Bar
+foo-BAZ
+BAZ-foo
+BAZ-Bar
diff --git a/chrome/third_party/hunspell/tests/checkcompoundcase.test b/chrome/third_party/hunspell/tests/checkcompoundcase.test
new file mode 100644
index 0000000..7f44369
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/checkcompoundcase.test
@@ -0,0 +1,4 @@
+#!/bin/sh
+DIR="`dirname $0`"
+NAME="`basename $0 .test`"
+$DIR/test.sh $NAME
diff --git a/chrome/third_party/hunspell/tests/checkcompoundcase.wrong b/chrome/third_party/hunspell/tests/checkcompoundcase.wrong
new file mode 100644
index 0000000..0714c22
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/checkcompoundcase.wrong
@@ -0,0 +1,3 @@
+fooBar
+BAZBar
+BAZfoo
diff --git a/chrome/third_party/hunspell/tests/checkcompoundcase2.aff b/chrome/third_party/hunspell/tests/checkcompoundcase2.aff
new file mode 100644
index 0000000..fea046b
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/checkcompoundcase2.aff
@@ -0,0 +1,3 @@
+# check extended ascii
+CHECKCOMPOUNDCASE
+COMPOUNDFLAG A
diff --git a/chrome/third_party/hunspell/tests/checkcompoundcase2.dic b/chrome/third_party/hunspell/tests/checkcompoundcase2.dic
new file mode 100644
index 0000000..086de0a
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/checkcompoundcase2.dic
@@ -0,0 +1,3 @@
+2
+�o�/A
+�o�/A
diff --git a/chrome/third_party/hunspell/tests/checkcompoundcase2.good b/chrome/third_party/hunspell/tests/checkcompoundcase2.good
new file mode 100644
index 0000000..b38fd0c
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/checkcompoundcase2.good
@@ -0,0 +1,2 @@
+�o��o�
+�o��o�
diff --git a/chrome/third_party/hunspell/tests/checkcompoundcase2.test b/chrome/third_party/hunspell/tests/checkcompoundcase2.test
new file mode 100644
index 0000000..7f44369
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/checkcompoundcase2.test
@@ -0,0 +1,4 @@
+#!/bin/sh
+DIR="`dirname $0`"
+NAME="`basename $0 .test`"
+$DIR/test.sh $NAME
diff --git a/chrome/third_party/hunspell/tests/checkcompoundcase2.wrong b/chrome/third_party/hunspell/tests/checkcompoundcase2.wrong
new file mode 100644
index 0000000..94786e9
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/checkcompoundcase2.wrong
@@ -0,0 +1 @@
+�o��o�
diff --git a/chrome/third_party/hunspell/tests/checkcompoundcaseutf.aff b/chrome/third_party/hunspell/tests/checkcompoundcaseutf.aff
new file mode 100644
index 0000000..546f478
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/checkcompoundcaseutf.aff
@@ -0,0 +1,3 @@
+SET UTF-8
+CHECKCOMPOUNDCASE
+COMPOUNDFLAG A
diff --git a/chrome/third_party/hunspell/tests/checkcompoundcaseutf.dic b/chrome/third_party/hunspell/tests/checkcompoundcaseutf.dic
new file mode 100644
index 0000000..0b7fbc9
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/checkcompoundcaseutf.dic
@@ -0,0 +1,3 @@
+2
+áoó/A
+Óoá/A
diff --git a/chrome/third_party/hunspell/tests/checkcompoundcaseutf.good b/chrome/third_party/hunspell/tests/checkcompoundcaseutf.good
new file mode 100644
index 0000000..32ae135
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/checkcompoundcaseutf.good
@@ -0,0 +1,2 @@
+áoóáoó
+Óoááoó
diff --git a/chrome/third_party/hunspell/tests/checkcompoundcaseutf.test b/chrome/third_party/hunspell/tests/checkcompoundcaseutf.test
new file mode 100644
index 0000000..7f44369
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/checkcompoundcaseutf.test
@@ -0,0 +1,4 @@
+#!/bin/sh
+DIR="`dirname $0`"
+NAME="`basename $0 .test`"
+$DIR/test.sh $NAME
diff --git a/chrome/third_party/hunspell/tests/checkcompoundcaseutf.wrong b/chrome/third_party/hunspell/tests/checkcompoundcaseutf.wrong
new file mode 100644
index 0000000..07434cc
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/checkcompoundcaseutf.wrong
@@ -0,0 +1 @@
+áoóÓoá
diff --git a/chrome/third_party/hunspell/tests/checkcompounddup.aff b/chrome/third_party/hunspell/tests/checkcompounddup.aff
new file mode 100644
index 0000000..5cd357a
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/checkcompounddup.aff
@@ -0,0 +1,3 @@
+# Forbid compound word with triple letters
+CHECKCOMPOUNDDUP
+COMPOUNDFLAG A
diff --git a/chrome/third_party/hunspell/tests/checkcompounddup.dic b/chrome/third_party/hunspell/tests/checkcompounddup.dic
new file mode 100644
index 0000000..8ac75f4
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/checkcompounddup.dic
@@ -0,0 +1,3 @@
+2
+foo/A
+bar/A
diff --git a/chrome/third_party/hunspell/tests/checkcompounddup.good b/chrome/third_party/hunspell/tests/checkcompounddup.good
new file mode 100644
index 0000000..3866f24
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/checkcompounddup.good
@@ -0,0 +1,5 @@
+barfoo
+foobar
+foofoobar
+foobarfoo
+barfoobarfoo
diff --git a/chrome/third_party/hunspell/tests/checkcompounddup.test b/chrome/third_party/hunspell/tests/checkcompounddup.test
new file mode 100644
index 0000000..7f44369
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/checkcompounddup.test
@@ -0,0 +1,4 @@
+#!/bin/sh
+DIR="`dirname $0`"
+NAME="`basename $0 .test`"
+$DIR/test.sh $NAME
diff --git a/chrome/third_party/hunspell/tests/checkcompounddup.wrong b/chrome/third_party/hunspell/tests/checkcompounddup.wrong
new file mode 100644
index 0000000..5e809b3
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/checkcompounddup.wrong
@@ -0,0 +1,3 @@
+foofoo
+foofoofoo
+foobarbar
diff --git a/chrome/third_party/hunspell/tests/checkcompoundpattern.aff b/chrome/third_party/hunspell/tests/checkcompoundpattern.aff
new file mode 100644
index 0000000..dfda51a
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/checkcompoundpattern.aff
@@ -0,0 +1,5 @@
+# forbid compounds with spec. pattern at word bounds
+COMPOUNDFLAG A
+CHECKCOMPOUNDPATTERN 2
+CHECKCOMPOUNDPATTERN nny ny
+CHECKCOMPOUNDPATTERN ssz sz
diff --git a/chrome/third_party/hunspell/tests/checkcompoundpattern.dic b/chrome/third_party/hunspell/tests/checkcompoundpattern.dic
new file mode 100644
index 0000000..09300f0
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/checkcompoundpattern.dic
@@ -0,0 +1,5 @@
+4
+k�nny/A
+nyel�s/A
+hossz/A
+sz�m�t�s/A
diff --git a/chrome/third_party/hunspell/tests/checkcompoundpattern.good b/chrome/third_party/hunspell/tests/checkcompoundpattern.good
new file mode 100644
index 0000000..0f99c52
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/checkcompoundpattern.good
@@ -0,0 +1,2 @@
+k�nnysz�m�t�s
+hossznyel�s
diff --git a/chrome/third_party/hunspell/tests/checkcompoundpattern.test b/chrome/third_party/hunspell/tests/checkcompoundpattern.test
new file mode 100644
index 0000000..7f44369
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/checkcompoundpattern.test
@@ -0,0 +1,4 @@
+#!/bin/sh
+DIR="`dirname $0`"
+NAME="`basename $0 .test`"
+$DIR/test.sh $NAME
diff --git a/chrome/third_party/hunspell/tests/checkcompoundpattern.wrong b/chrome/third_party/hunspell/tests/checkcompoundpattern.wrong
new file mode 100644
index 0000000..5edd115
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/checkcompoundpattern.wrong
@@ -0,0 +1,4 @@
+k�nnynyel�s
+hosszsz�m�t�s
+hosszk�nnynyel�s
+k�nnynyel�shossz
diff --git a/chrome/third_party/hunspell/tests/checkcompoundrep.aff b/chrome/third_party/hunspell/tests/checkcompoundrep.aff
new file mode 100644
index 0000000..4fb7ff5
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/checkcompoundrep.aff
@@ -0,0 +1,8 @@
+// forbid compound word, if it is also a non compound word with a REP fault
+// In example: Hungarian `szerv�z' (szer+v�z) compound word is forbidden, because
+// this word is also a dictionary word (szerviz) with typical fault (i->�)
+CHECKCOMPOUNDREP
+COMPOUNDFLAG A
+
+REP 1
+REP � i
diff --git a/chrome/third_party/hunspell/tests/checkcompoundrep.dic b/chrome/third_party/hunspell/tests/checkcompoundrep.dic
new file mode 100644
index 0000000..5b5d227
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/checkcompoundrep.dic
@@ -0,0 +1,4 @@
+3
+szer/A
+v�z/A
+szerviz
diff --git a/chrome/third_party/hunspell/tests/checkcompoundrep.good b/chrome/third_party/hunspell/tests/checkcompoundrep.good
new file mode 100644
index 0000000..e7ef1f8
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/checkcompoundrep.good
@@ -0,0 +1 @@
+v�zszer
diff --git a/chrome/third_party/hunspell/tests/checkcompoundrep.test b/chrome/third_party/hunspell/tests/checkcompoundrep.test
new file mode 100644
index 0000000..7f44369
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/checkcompoundrep.test
@@ -0,0 +1,4 @@
+#!/bin/sh
+DIR="`dirname $0`"
+NAME="`basename $0 .test`"
+$DIR/test.sh $NAME
diff --git a/chrome/third_party/hunspell/tests/checkcompoundrep.wrong b/chrome/third_party/hunspell/tests/checkcompoundrep.wrong
new file mode 100644
index 0000000..843f4b8
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/checkcompoundrep.wrong
@@ -0,0 +1 @@
+szerv�z
diff --git a/chrome/third_party/hunspell/tests/checkcompoundtriple.aff b/chrome/third_party/hunspell/tests/checkcompoundtriple.aff
new file mode 100644
index 0000000..7159cf5
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/checkcompoundtriple.aff
@@ -0,0 +1,3 @@
+# Forbid compound word with triple letters
+CHECKCOMPOUNDTRIPLE
+COMPOUNDFLAG A
diff --git a/chrome/third_party/hunspell/tests/checkcompoundtriple.dic b/chrome/third_party/hunspell/tests/checkcompoundtriple.dic
new file mode 100644
index 0000000..607c489
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/checkcompoundtriple.dic
@@ -0,0 +1,5 @@
+4
+foo/A
+opera/A
+eel/A
+bare/A
diff --git a/chrome/third_party/hunspell/tests/checkcompoundtriple.good b/chrome/third_party/hunspell/tests/checkcompoundtriple.good
new file mode 100644
index 0000000..1293f74
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/checkcompoundtriple.good
@@ -0,0 +1,6 @@
+operafoo
+operaeel
+operabare
+eelbare
+eelfoo
+eelopera
diff --git a/chrome/third_party/hunspell/tests/checkcompoundtriple.test b/chrome/third_party/hunspell/tests/checkcompoundtriple.test
new file mode 100644
index 0000000..7f44369
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/checkcompoundtriple.test
@@ -0,0 +1,4 @@
+#!/bin/sh
+DIR="`dirname $0`"
+NAME="`basename $0 .test`"
+$DIR/test.sh $NAME
diff --git a/chrome/third_party/hunspell/tests/checkcompoundtriple.wrong b/chrome/third_party/hunspell/tests/checkcompoundtriple.wrong
new file mode 100644
index 0000000..ae2d02b
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/checkcompoundtriple.wrong
@@ -0,0 +1,2 @@
+fooopera
+bareeel
diff --git a/chrome/third_party/hunspell/tests/checksharps.aff b/chrome/third_party/hunspell/tests/checksharps.aff
new file mode 100644
index 0000000..6b22c73
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/checksharps.aff
@@ -0,0 +1,4 @@
+# test � - SS special capitalizing
+CHECKSHARPS
+WORDCHARS �.
+KEEPCASE k
diff --git a/chrome/third_party/hunspell/tests/checksharps.dic b/chrome/third_party/hunspell/tests/checksharps.dic
new file mode 100644
index 0000000..91d14ab
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/checksharps.dic
@@ -0,0 +1,7 @@
+6
+m��ig/k
+Aussto�
+Absto�.
+Au�enabmessung
+Prozessionsstra�e
+Au�enma�e
diff --git a/chrome/third_party/hunspell/tests/checksharps.good b/chrome/third_party/hunspell/tests/checksharps.good
new file mode 100644
index 0000000..e9be8c5
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/checksharps.good
@@ -0,0 +1,13 @@
+m��ig
+M��ig
+M�SSIG
+Aussto�
+Absto�.
+Au�enabmessung
+Prozessionsstra�e
+Au�enma�e
+AUSSTOSS
+ABSTOSS.
+AUSSENABMESSUNG
+PROZESSIONSSTRASSE
+AUSSENMASSE
diff --git a/chrome/third_party/hunspell/tests/checksharps.sug b/chrome/third_party/hunspell/tests/checksharps.sug
new file mode 100644
index 0000000..9e6b249
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/checksharps.sug
@@ -0,0 +1 @@
+M�SSIG
diff --git a/chrome/third_party/hunspell/tests/checksharps.test b/chrome/third_party/hunspell/tests/checksharps.test
new file mode 100644
index 0000000..7f44369
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/checksharps.test
@@ -0,0 +1,4 @@
+#!/bin/sh
+DIR="`dirname $0`"
+NAME="`basename $0 .test`"
+$DIR/test.sh $NAME
diff --git a/chrome/third_party/hunspell/tests/checksharps.wrong b/chrome/third_party/hunspell/tests/checksharps.wrong
new file mode 100644
index 0000000..96eb8ae
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/checksharps.wrong
@@ -0,0 +1 @@
+M��IG
diff --git a/chrome/third_party/hunspell/tests/checksharpsutf.aff b/chrome/third_party/hunspell/tests/checksharpsutf.aff
new file mode 100644
index 0000000..86c0fc4
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/checksharpsutf.aff
@@ -0,0 +1,5 @@
+# test � - SS special capitalizing in UTF-8
+SET UTF-8
+CHECKSHARPS
+WORDCHARS ß.
+KEEPCASE k
diff --git a/chrome/third_party/hunspell/tests/checksharpsutf.dic b/chrome/third_party/hunspell/tests/checksharpsutf.dic
new file mode 100644
index 0000000..9cc364ee
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/checksharpsutf.dic
@@ -0,0 +1,7 @@
+6
+müßig/k
+Ausstoß
+Abstoß.
+Außenabmessung
+Prozessionsstraße
+Außenmaße
diff --git a/chrome/third_party/hunspell/tests/checksharpsutf.good b/chrome/third_party/hunspell/tests/checksharpsutf.good
new file mode 100644
index 0000000..a61c243
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/checksharpsutf.good
@@ -0,0 +1,13 @@
+müßig
+Müßig
+MÜSSIG
+Ausstoß
+Abstoß.
+Außenabmessung
+Prozessionsstraße
+Außenmaße
+AUSSTOSS
+ABSTOSS.
+AUSSENABMESSUNG
+PROZESSIONSSTRASSE
+AUSSENMASSE
diff --git a/chrome/third_party/hunspell/tests/checksharpsutf.sug b/chrome/third_party/hunspell/tests/checksharpsutf.sug
new file mode 100644
index 0000000..a94e612
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/checksharpsutf.sug
@@ -0,0 +1 @@
+MÜSSIG
diff --git a/chrome/third_party/hunspell/tests/checksharpsutf.test b/chrome/third_party/hunspell/tests/checksharpsutf.test
new file mode 100644
index 0000000..7f44369
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/checksharpsutf.test
@@ -0,0 +1,4 @@
+#!/bin/sh
+DIR="`dirname $0`"
+NAME="`basename $0 .test`"
+$DIR/test.sh $NAME
diff --git a/chrome/third_party/hunspell/tests/checksharpsutf.wrong b/chrome/third_party/hunspell/tests/checksharpsutf.wrong
new file mode 100644
index 0000000..25eb03d
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/checksharpsutf.wrong
@@ -0,0 +1 @@
+MÜßIG
diff --git a/chrome/third_party/hunspell/tests/circumfix.aff b/chrome/third_party/hunspell/tests/circumfix.aff
new file mode 100644
index 0000000..2a7275a
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/circumfix.aff
@@ -0,0 +1,16 @@
+# circumfixes: ~ obligate prefix/suffix combinations
+# superlative in Hungarian: leg- (prefix) AND -bb (suffix)
+
+CIRCUMFIX X
+
+PFX A Y 1
+PFX A 0 leg/X .
+
+PFX B Y 1
+PFX B 0 legesleg/X .
+
+SFX C Y 3
+SFX C 0 obb . +COMPARATIVE
+SFX C 0 obb/AX . +SUPERLATIVE
+SFX C 0 obb/BX . +SUPERSUPERLATIVE
+
diff --git a/chrome/third_party/hunspell/tests/circumfix.dic b/chrome/third_party/hunspell/tests/circumfix.dic
new file mode 100644
index 0000000..0295762
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/circumfix.dic
@@ -0,0 +1,2 @@
+1
+nagy/C [MN]
diff --git a/chrome/third_party/hunspell/tests/circumfix.good b/chrome/third_party/hunspell/tests/circumfix.good
new file mode 100644
index 0000000..65049d9
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/circumfix.good
@@ -0,0 +1,4 @@
+nagy
+nagyobb
+legnagyobb
+legeslegnagyobb
diff --git a/chrome/third_party/hunspell/tests/circumfix.morph b/chrome/third_party/hunspell/tests/circumfix.morph
new file mode 100644
index 0000000..60befee
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/circumfix.morph
@@ -0,0 +1,8 @@
+> nagy
+nagy[MN]
+> nagyobb
+nagy[MN]+COMPARATIVE
+> legnagyobb
+nagy[MN]+SUPERLATIVE
+> legeslegnagyobb
+nagy[MN]+SUPERSUPERLATIVE
diff --git a/chrome/third_party/hunspell/tests/circumfix.test b/chrome/third_party/hunspell/tests/circumfix.test
new file mode 100644
index 0000000..7f44369
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/circumfix.test
@@ -0,0 +1,4 @@
+#!/bin/sh
+DIR="`dirname $0`"
+NAME="`basename $0 .test`"
+$DIR/test.sh $NAME
diff --git a/chrome/third_party/hunspell/tests/circumfix.wrong b/chrome/third_party/hunspell/tests/circumfix.wrong
new file mode 100644
index 0000000..bab8084
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/circumfix.wrong
@@ -0,0 +1,2 @@
+legnagy
+legeslegnagy
diff --git a/chrome/third_party/hunspell/tests/complexprefixes.aff b/chrome/third_party/hunspell/tests/complexprefixes.aff
new file mode 100644
index 0000000..7ddb497
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/complexprefixes.aff
@@ -0,0 +1,9 @@
+# set twofold prefix stripping
+# Coptic example by Moheb Mekhaiel
+COMPLEXPREFIXES
+
+PFX A Y 1
+PFX A 0 tek .
+
+PFX B Y 1
+PFX B 0 met/A .
diff --git a/chrome/third_party/hunspell/tests/complexprefixes.dic b/chrome/third_party/hunspell/tests/complexprefixes.dic
new file mode 100644
index 0000000..2618c7c
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/complexprefixes.dic
@@ -0,0 +1,3 @@
+1
+ouro/B
+
diff --git a/chrome/third_party/hunspell/tests/complexprefixes.good b/chrome/third_party/hunspell/tests/complexprefixes.good
new file mode 100644
index 0000000..eed87a7
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/complexprefixes.good
@@ -0,0 +1,3 @@
+ouro
+metouro
+tekmetouro
diff --git a/chrome/third_party/hunspell/tests/complexprefixes.test b/chrome/third_party/hunspell/tests/complexprefixes.test
new file mode 100644
index 0000000..7f44369
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/complexprefixes.test
@@ -0,0 +1,4 @@
+#!/bin/sh
+DIR="`dirname $0`"
+NAME="`basename $0 .test`"
+$DIR/test.sh $NAME
diff --git a/chrome/third_party/hunspell/tests/complexprefixes.wrong b/chrome/third_party/hunspell/tests/complexprefixes.wrong
new file mode 100644
index 0000000..fb1c8b4
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/complexprefixes.wrong
@@ -0,0 +1,2 @@
+tekouro
+mettekouro
diff --git a/chrome/third_party/hunspell/tests/complexprefixes2.aff b/chrome/third_party/hunspell/tests/complexprefixes2.aff
new file mode 100644
index 0000000..b4fe1dca
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/complexprefixes2.aff
@@ -0,0 +1,12 @@
+# complex prefixes with morphological analysis
+COMPLEXPREFIXES
+WORDCHARS _
+
+PFX A Y 1
+PFX A 0 tek . affix_1/
+
+PFX B Y 1
+PFX B 0 met/A . affix_2/
+
+SFX C Y 1
+SFX C 0 _test_ . /suffix_1
diff --git a/chrome/third_party/hunspell/tests/complexprefixes2.dic b/chrome/third_party/hunspell/tests/complexprefixes2.dic
new file mode 100644
index 0000000..7e4baf06
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/complexprefixes2.dic
@@ -0,0 +1,3 @@
+1
+ouro/BC [stem_1]
+
diff --git a/chrome/third_party/hunspell/tests/complexprefixes2.good b/chrome/third_party/hunspell/tests/complexprefixes2.good
new file mode 100644
index 0000000..6bf8228
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/complexprefixes2.good
@@ -0,0 +1,4 @@
+ouro
+metouro
+tekmetouro
+ouro_test_
diff --git a/chrome/third_party/hunspell/tests/complexprefixes2.test b/chrome/third_party/hunspell/tests/complexprefixes2.test
new file mode 100644
index 0000000..7f44369
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/complexprefixes2.test
@@ -0,0 +1,4 @@
+#!/bin/sh
+DIR="`dirname $0`"
+NAME="`basename $0 .test`"
+$DIR/test.sh $NAME
diff --git a/chrome/third_party/hunspell/tests/complexprefixesutf.aff b/chrome/third_party/hunspell/tests/complexprefixesutf.aff
new file mode 100644
index 0000000..3991e9f
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/complexprefixesutf.aff
@@ -0,0 +1,12 @@
+# Coptic example by Moheb Mekhaiel
+# Encoded with the new Coptic character encoding of Unicode 4.1
+SET UTF-8
+
+# set twofold prefix stripping
+COMPLEXPREFIXES
+
+PFX A Y 1
+PFX A 0 ⲧⲉⲕ .
+
+PFX B Y 1
+PFX B 0 ⲙⲉⲧ/A .
diff --git a/chrome/third_party/hunspell/tests/complexprefixesutf.dic b/chrome/third_party/hunspell/tests/complexprefixesutf.dic
new file mode 100644
index 0000000..bd0eb6d
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/complexprefixesutf.dic
@@ -0,0 +1,2 @@
+1
+ⲟⲩⲣⲟ/B
diff --git a/chrome/third_party/hunspell/tests/complexprefixesutf.good b/chrome/third_party/hunspell/tests/complexprefixesutf.good
new file mode 100644
index 0000000..7eb9566
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/complexprefixesutf.good
@@ -0,0 +1,3 @@
+ⲟⲩⲣⲟ
+ⲙⲉⲧⲟⲩⲣⲟ
+ⲧⲉⲕⲙⲉⲧⲟⲩⲣⲟ
diff --git a/chrome/third_party/hunspell/tests/complexprefixesutf.test b/chrome/third_party/hunspell/tests/complexprefixesutf.test
new file mode 100644
index 0000000..7f44369
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/complexprefixesutf.test
@@ -0,0 +1,4 @@
+#!/bin/sh
+DIR="`dirname $0`"
+NAME="`basename $0 .test`"
+$DIR/test.sh $NAME
diff --git a/chrome/third_party/hunspell/tests/complexprefixesutf.wrong b/chrome/third_party/hunspell/tests/complexprefixesutf.wrong
new file mode 100644
index 0000000..d8021fc
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/complexprefixesutf.wrong
@@ -0,0 +1,2 @@
+ⲧⲉⲕⲟⲩⲣⲟ
+ⲙⲉⲧⲧⲉⲕⲟⲩⲣⲟ
diff --git a/chrome/third_party/hunspell/tests/compoundaffix.aff b/chrome/third_party/hunspell/tests/compoundaffix.aff
new file mode 100644
index 0000000..cae5669
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/compoundaffix.aff
@@ -0,0 +1,7 @@
+COMPOUNDFLAG X
+
+PFX P Y 1
+PFX P 0 pre .
+
+SFX S Y 1
+SFX S 0 suf .
diff --git a/chrome/third_party/hunspell/tests/compoundaffix.dic b/chrome/third_party/hunspell/tests/compoundaffix.dic
new file mode 100644
index 0000000..eba6b83
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/compoundaffix.dic
@@ -0,0 +1,3 @@
+2
+foo/XPS
+bar/XPS
diff --git a/chrome/third_party/hunspell/tests/compoundaffix.good b/chrome/third_party/hunspell/tests/compoundaffix.good
new file mode 100644
index 0000000..af1f001
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/compoundaffix.good
@@ -0,0 +1,6 @@
+foo
+foofoo
+prefoo
+foosuf
+prefoosuf
+prefoobarsuf
diff --git a/chrome/third_party/hunspell/tests/compoundaffix.test b/chrome/third_party/hunspell/tests/compoundaffix.test
new file mode 100644
index 0000000..7f44369
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/compoundaffix.test
@@ -0,0 +1,4 @@
+#!/bin/sh
+DIR="`dirname $0`"
+NAME="`basename $0 .test`"
+$DIR/test.sh $NAME
diff --git a/chrome/third_party/hunspell/tests/compoundaffix.wrong b/chrome/third_party/hunspell/tests/compoundaffix.wrong
new file mode 100644
index 0000000..b7e4067
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/compoundaffix.wrong
@@ -0,0 +1,3 @@
+foosufbar
+fooprebarsuf
+prefooprebarsuf
diff --git a/chrome/third_party/hunspell/tests/compoundaffix2.aff b/chrome/third_party/hunspell/tests/compoundaffix2.aff
new file mode 100644
index 0000000..1cac16e
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/compoundaffix2.aff
@@ -0,0 +1,8 @@
+COMPOUNDFLAG X
+COMPOUNDPERMITFLAG Y
+
+PFX P Y 1
+PFX P 0 pre/Y .
+
+SFX S Y 1
+SFX S 0 suf/Y .
diff --git a/chrome/third_party/hunspell/tests/compoundaffix2.dic b/chrome/third_party/hunspell/tests/compoundaffix2.dic
new file mode 100644
index 0000000..eba6b83
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/compoundaffix2.dic
@@ -0,0 +1,3 @@
+2
+foo/XPS
+bar/XPS
diff --git a/chrome/third_party/hunspell/tests/compoundaffix2.good b/chrome/third_party/hunspell/tests/compoundaffix2.good
new file mode 100644
index 0000000..9f3020d
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/compoundaffix2.good
@@ -0,0 +1,8 @@
+foo
+prefoo
+foosuf
+prefoosuf
+prefoobarsuf
+foosufbar
+fooprebarsuf
+prefooprebarsuf
diff --git a/chrome/third_party/hunspell/tests/compoundaffix2.test b/chrome/third_party/hunspell/tests/compoundaffix2.test
new file mode 100644
index 0000000..7f44369
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/compoundaffix2.test
@@ -0,0 +1,4 @@
+#!/bin/sh
+DIR="`dirname $0`"
+NAME="`basename $0 .test`"
+$DIR/test.sh $NAME
diff --git a/chrome/third_party/hunspell/tests/compoundaffix3.aff b/chrome/third_party/hunspell/tests/compoundaffix3.aff
new file mode 100644
index 0000000..98a12b56
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/compoundaffix3.aff
@@ -0,0 +1,8 @@
+COMPOUNDFLAG X
+COMPOUNDFORBIDFLAG Z
+
+PFX P Y 1
+PFX P 0 pre/Z .
+
+SFX S Y 1
+SFX S 0 suf/Z .
diff --git a/chrome/third_party/hunspell/tests/compoundaffix3.dic b/chrome/third_party/hunspell/tests/compoundaffix3.dic
new file mode 100644
index 0000000..eba6b83
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/compoundaffix3.dic
@@ -0,0 +1,3 @@
+2
+foo/XPS
+bar/XPS
diff --git a/chrome/third_party/hunspell/tests/compoundaffix3.good b/chrome/third_party/hunspell/tests/compoundaffix3.good
new file mode 100644
index 0000000..76cc08e
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/compoundaffix3.good
@@ -0,0 +1,5 @@
+foo
+foofoo
+prefoo
+foosuf
+prefoosuf
diff --git a/chrome/third_party/hunspell/tests/compoundaffix3.test b/chrome/third_party/hunspell/tests/compoundaffix3.test
new file mode 100644
index 0000000..7f44369
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/compoundaffix3.test
@@ -0,0 +1,4 @@
+#!/bin/sh
+DIR="`dirname $0`"
+NAME="`basename $0 .test`"
+$DIR/test.sh $NAME
diff --git a/chrome/third_party/hunspell/tests/compoundaffix3.wrong b/chrome/third_party/hunspell/tests/compoundaffix3.wrong
new file mode 100644
index 0000000..d92b90b
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/compoundaffix3.wrong
@@ -0,0 +1,6 @@
+prefoobarsuf
+foosufbar
+fooprebar
+foosufprebar
+fooprebarsuf
+prefooprebarsuf
diff --git a/chrome/third_party/hunspell/tests/compoundflag.aff b/chrome/third_party/hunspell/tests/compoundflag.aff
new file mode 100644
index 0000000..bc8369c
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/compoundflag.aff
@@ -0,0 +1,3 @@
+COMPOUNDMIN 3
+COMPOUNDFLAG A
+
diff --git a/chrome/third_party/hunspell/tests/compoundflag.dic b/chrome/third_party/hunspell/tests/compoundflag.dic
new file mode 100644
index 0000000..d1ea8e9
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/compoundflag.dic
@@ -0,0 +1,5 @@
+4
+foo/A
+bar/A
+xy/A
+yz/A
diff --git a/chrome/third_party/hunspell/tests/compoundflag.good b/chrome/third_party/hunspell/tests/compoundflag.good
new file mode 100644
index 0000000..21cc29f
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/compoundflag.good
@@ -0,0 +1,3 @@
+foobar
+barfoo
+foobarfoo
diff --git a/chrome/third_party/hunspell/tests/compoundflag.test b/chrome/third_party/hunspell/tests/compoundflag.test
new file mode 100644
index 0000000..7f44369
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/compoundflag.test
@@ -0,0 +1,4 @@
+#!/bin/sh
+DIR="`dirname $0`"
+NAME="`basename $0 .test`"
+$DIR/test.sh $NAME
diff --git a/chrome/third_party/hunspell/tests/compoundflag.wrong b/chrome/third_party/hunspell/tests/compoundflag.wrong
new file mode 100644
index 0000000..c185bf1
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/compoundflag.wrong
@@ -0,0 +1,4 @@
+xyyz
+fooxy
+xyfoo
+fooxybar
diff --git a/chrome/third_party/hunspell/tests/compoundrule.aff b/chrome/third_party/hunspell/tests/compoundrule.aff
new file mode 100644
index 0000000..09309e0aa
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/compoundrule.aff
@@ -0,0 +1,3 @@
+COMPOUNDMIN 1
+COMPOUNDRULE 1
+COMPOUNDRULE ABC
diff --git a/chrome/third_party/hunspell/tests/compoundrule.dic b/chrome/third_party/hunspell/tests/compoundrule.dic
new file mode 100644
index 0000000..b11e829
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/compoundrule.dic
@@ -0,0 +1,5 @@
+3
+a/A
+b/B
+c/BC
+
diff --git a/chrome/third_party/hunspell/tests/compoundrule.good b/chrome/third_party/hunspell/tests/compoundrule.good
new file mode 100644
index 0000000..c7a0763
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/compoundrule.good
@@ -0,0 +1,2 @@
+abc
+acc
diff --git a/chrome/third_party/hunspell/tests/compoundrule.test b/chrome/third_party/hunspell/tests/compoundrule.test
new file mode 100644
index 0000000..7f44369
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/compoundrule.test
@@ -0,0 +1,4 @@
+#!/bin/sh
+DIR="`dirname $0`"
+NAME="`basename $0 .test`"
+$DIR/test.sh $NAME
diff --git a/chrome/third_party/hunspell/tests/compoundrule.wrong b/chrome/third_party/hunspell/tests/compoundrule.wrong
new file mode 100644
index 0000000..bc151ea
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/compoundrule.wrong
@@ -0,0 +1,39 @@
+ba
+aaabaaa
+bbaaa
+aaaaba
+bbbbbaa
+aa
+aaa
+aaaa
+ab
+aab
+aaab
+aaaab
+abb
+aabb
+aaabbb
+bb
+bbb
+bbbb
+aaab
+abcc
+abbc
+abbcc
+aabc
+aabcc
+aabbc
+aabbcc
+aaabbbccc
+ac
+aac
+aacc
+aaaccc
+bc
+bcc
+bbc
+bbcc
+bbbccc
+cc
+ccc
+cccccc
diff --git a/chrome/third_party/hunspell/tests/compoundrule2.aff b/chrome/third_party/hunspell/tests/compoundrule2.aff
new file mode 100644
index 0000000..e4b86a5
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/compoundrule2.aff
@@ -0,0 +1,3 @@
+COMPOUNDMIN 1
+COMPOUNDRULE 1
+COMPOUNDRULE A*B*C*
diff --git a/chrome/third_party/hunspell/tests/compoundrule2.dic b/chrome/third_party/hunspell/tests/compoundrule2.dic
new file mode 100644
index 0000000..7d07bbc
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/compoundrule2.dic
@@ -0,0 +1,5 @@
+3
+a/A
+b/B
+c/C
+
diff --git a/chrome/third_party/hunspell/tests/compoundrule2.good b/chrome/third_party/hunspell/tests/compoundrule2.good
new file mode 100644
index 0000000..de743bb
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/compoundrule2.good
@@ -0,0 +1,37 @@
+aa
+aaa
+aaaa
+ab
+aab
+aaab
+aaaab
+abb
+aabb
+aaabbb
+bb
+bbb
+bbbb
+aaab
+abc
+abcc
+abbc
+abbcc
+aabc
+aabcc
+aabbc
+aabbcc
+aaabbbccc
+ac
+acc
+aac
+aacc
+aaaccc
+bc
+bcc
+bbc
+bbcc
+bbbccc
+cc
+ccc
+cccccc
+abcc
diff --git a/chrome/third_party/hunspell/tests/compoundrule2.test b/chrome/third_party/hunspell/tests/compoundrule2.test
new file mode 100644
index 0000000..7f44369
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/compoundrule2.test
@@ -0,0 +1,4 @@
+#!/bin/sh
+DIR="`dirname $0`"
+NAME="`basename $0 .test`"
+$DIR/test.sh $NAME
diff --git a/chrome/third_party/hunspell/tests/compoundrule2.wrong b/chrome/third_party/hunspell/tests/compoundrule2.wrong
new file mode 100644
index 0000000..9e5d38d
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/compoundrule2.wrong
@@ -0,0 +1,8 @@
+ba
+aaabaaa
+bbaaa
+aaaaba
+bbbbbaa
+cba
+cab
+acb
diff --git a/chrome/third_party/hunspell/tests/compoundrule3.aff b/chrome/third_party/hunspell/tests/compoundrule3.aff
new file mode 100644
index 0000000..0053145
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/compoundrule3.aff
@@ -0,0 +1,3 @@
+COMPOUNDMIN 1
+COMPOUNDRULE 1
+COMPOUNDRULE A?B?C?
diff --git a/chrome/third_party/hunspell/tests/compoundrule3.dic b/chrome/third_party/hunspell/tests/compoundrule3.dic
new file mode 100644
index 0000000..7d07bbc
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/compoundrule3.dic
@@ -0,0 +1,5 @@
+3
+a/A
+b/B
+c/C
+
diff --git a/chrome/third_party/hunspell/tests/compoundrule3.good b/chrome/third_party/hunspell/tests/compoundrule3.good
new file mode 100644
index 0000000..7f51889
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/compoundrule3.good
@@ -0,0 +1,7 @@
+a
+b
+c
+ab
+abc
+ac
+bc
diff --git a/chrome/third_party/hunspell/tests/compoundrule3.test b/chrome/third_party/hunspell/tests/compoundrule3.test
new file mode 100644
index 0000000..7f44369
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/compoundrule3.test
@@ -0,0 +1,4 @@
+#!/bin/sh
+DIR="`dirname $0`"
+NAME="`basename $0 .test`"
+$DIR/test.sh $NAME
diff --git a/chrome/third_party/hunspell/tests/compoundrule3.wrong b/chrome/third_party/hunspell/tests/compoundrule3.wrong
new file mode 100644
index 0000000..6bd1d80
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/compoundrule3.wrong
@@ -0,0 +1,41 @@
+aa
+aaa
+aaaa
+aab
+aaab
+aaaab
+abb
+aabb
+aaabbb
+bb
+bbb
+bbbb
+aaab
+abcc
+abbc
+abbcc
+aabc
+aabcc
+aabbc
+aabbcc
+aaabbbccc
+acc
+aac
+aacc
+aaaccc
+bcc
+bbc
+bbcc
+bbbccc
+cc
+ccc
+cccccc
+abcc
+ba
+aaabaaa
+bbaaa
+aaaaba
+bbbbbaa
+cba
+cab
+acb
diff --git a/chrome/third_party/hunspell/tests/compoundrule4.aff b/chrome/third_party/hunspell/tests/compoundrule4.aff
new file mode 100644
index 0000000..8a9996c
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/compoundrule4.aff
@@ -0,0 +1,7 @@
+# English ordinal numbers
+WORDCHARS 0123456789
+COMPOUNDMIN 1
+ONLYINCOMPOUND c
+COMPOUNDRULE 2
+COMPOUNDRULE n*1t
+COMPOUNDRULE n*mp
diff --git a/chrome/third_party/hunspell/tests/compoundrule4.dic b/chrome/third_party/hunspell/tests/compoundrule4.dic
new file mode 100644
index 0000000..ced0735
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/compoundrule4.dic
@@ -0,0 +1,24 @@
+22
+0/nm
+1/n1
+2/nm
+3/nm
+4/nm
+5/nm
+6/nm
+7/nm
+8/nm
+9/nm
+0th/pt
+1st/p
+1th/tc
+2nd/p
+2th/tc
+3rd/p
+3th/tc
+4th/pt
+5th/pt
+6th/pt
+7th/pt
+8th/pt
+9th/pt
diff --git a/chrome/third_party/hunspell/tests/compoundrule4.good b/chrome/third_party/hunspell/tests/compoundrule4.good
new file mode 100644
index 0000000..fafe64a5
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/compoundrule4.good
@@ -0,0 +1,29 @@
+1st
+2nd
+3rd
+4th
+5th
+6th
+7th
+8th
+9th
+10th
+11th
+12th
+13th
+14th
+15th
+16th
+17th
+18th
+19th
+20th
+21st
+22nd
+23rd
+24th
+25th
+100th
+1000th
+10001st
+10011th
diff --git a/chrome/third_party/hunspell/tests/compoundrule4.test b/chrome/third_party/hunspell/tests/compoundrule4.test
new file mode 100644
index 0000000..52e144c
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/compoundrule4.test
@@ -0,0 +1,6 @@
+#!/bin/sh
+DIR="`dirname $0`"
+NAME="`basename $0 .test`"
+$DIR/test.sh $NAME
+
+
diff --git a/chrome/third_party/hunspell/tests/compoundrule4.wrong b/chrome/third_party/hunspell/tests/compoundrule4.wrong
new file mode 100644
index 0000000..99f28e7
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/compoundrule4.wrong
@@ -0,0 +1,5 @@
+1th
+2th
+3th
+10001th
+10011st
diff --git a/chrome/third_party/hunspell/tests/compoundrule5.aff b/chrome/third_party/hunspell/tests/compoundrule5.aff
new file mode 100644
index 0000000..4650246
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/compoundrule5.aff
@@ -0,0 +1,7 @@
+# number + percent
+SET UTF-8
+COMPOUNDMIN 1
+COMPOUNDRULE 2
+COMPOUNDRULE N*%?
+COMPOUNDRULE NN*.NN*%?
+WORDCHARS 0123456789‰.
diff --git a/chrome/third_party/hunspell/tests/compoundrule5.dic b/chrome/third_party/hunspell/tests/compoundrule5.dic
new file mode 100644
index 0000000..3d25189
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/compoundrule5.dic
@@ -0,0 +1,14 @@
+13
+0/N [NUM]
+1/N [NUM]
+2/N [NUM]
+3/N [NUM]
+4/N [NUM]
+5/N [NUM]
+6/N [NUM]
+7/N [NUM]
+8/N [NUM]
+9/N [NUM]
+./. [DOT]
+%/% [PERCENT_SIGN]
+‰/% [PER_MILLE_SIGN]
diff --git a/chrome/third_party/hunspell/tests/compoundrule5.good b/chrome/third_party/hunspell/tests/compoundrule5.good
new file mode 100644
index 0000000..691fca1
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/compoundrule5.good
@@ -0,0 +1,7 @@
+10%
+0.2%
+0.20%
+123.4561‰
+10
+0000
+10.25
diff --git a/chrome/third_party/hunspell/tests/compoundrule5.morph b/chrome/third_party/hunspell/tests/compoundrule5.morph
new file mode 100644
index 0000000..1387e77
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/compoundrule5.morph
@@ -0,0 +1,14 @@
+> 10%
+1[NUM]0[NUM]%[PERCENT_SIGN]
+> 0.2%
+0[NUM].[DOT]2[NUM]%[PERCENT_SIGN]
+> 0.20%
+0[NUM].[DOT]2[NUM]0[NUM]%[PERCENT_SIGN]
+> 123.4561‰
+1[NUM]2[NUM]3[NUM].[DOT]4[NUM]5[NUM]6[NUM]1[NUM]‰[PER_MILLE_SIGN]
+> 10
+1[NUM]0[NUM]
+> 0000
+0[NUM]0[NUM]0[NUM]0[NUM]
+> 10.25
+1[NUM]0[NUM].[DOT]2[NUM]5[NUM]
diff --git a/chrome/third_party/hunspell/tests/compoundrule5.test b/chrome/third_party/hunspell/tests/compoundrule5.test
new file mode 100644
index 0000000..7f44369
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/compoundrule5.test
@@ -0,0 +1,4 @@
+#!/bin/sh
+DIR="`dirname $0`"
+NAME="`basename $0 .test`"
+$DIR/test.sh $NAME
diff --git a/chrome/third_party/hunspell/tests/compoundrule5.wrong b/chrome/third_party/hunspell/tests/compoundrule5.wrong
new file mode 100644
index 0000000..ba1fe32
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/compoundrule5.wrong
@@ -0,0 +1 @@
+.25
diff --git a/chrome/third_party/hunspell/tests/compoundrule6.aff b/chrome/third_party/hunspell/tests/compoundrule6.aff
new file mode 100644
index 0000000..e8a088d
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/compoundrule6.aff
@@ -0,0 +1,4 @@
+COMPOUNDMIN 1
+COMPOUNDRULE 2
+COMPOUNDRULE A*A
+COMPOUNDRULE A*AAB*BBBC*C
diff --git a/chrome/third_party/hunspell/tests/compoundrule6.dic b/chrome/third_party/hunspell/tests/compoundrule6.dic
new file mode 100644
index 0000000..7d07bbc
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/compoundrule6.dic
@@ -0,0 +1,5 @@
+3
+a/A
+b/B
+c/C
+
diff --git a/chrome/third_party/hunspell/tests/compoundrule6.good b/chrome/third_party/hunspell/tests/compoundrule6.good
new file mode 100644
index 0000000..55a8f8b
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/compoundrule6.good
@@ -0,0 +1,4 @@
+aa
+aaaaaa
+aabbbc
+aaaaabbbbbbcccccc
diff --git a/chrome/third_party/hunspell/tests/compoundrule6.test b/chrome/third_party/hunspell/tests/compoundrule6.test
new file mode 100644
index 0000000..7f44369
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/compoundrule6.test
@@ -0,0 +1,4 @@
+#!/bin/sh
+DIR="`dirname $0`"
+NAME="`basename $0 .test`"
+$DIR/test.sh $NAME
diff --git a/chrome/third_party/hunspell/tests/compoundrule6.wrong b/chrome/third_party/hunspell/tests/compoundrule6.wrong
new file mode 100644
index 0000000..48b376d
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/compoundrule6.wrong
@@ -0,0 +1,4 @@
+abc
+abbbbbccccccc
+aabbccccccc
+aabbbbbbb
diff --git a/chrome/third_party/hunspell/tests/conditionalprefix.aff b/chrome/third_party/hunspell/tests/conditionalprefix.aff
new file mode 100644
index 0000000..a2b0e6f
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/conditionalprefix.aff
@@ -0,0 +1,11 @@
+PFX P Y 1
+PFX P 0 un . prefix_un+
+
+SFX S Y 1
+SFX S 0 s . +PL
+
+SFX Q Y 1
+SFX Q 0 s . +3SGV
+
+SFX R Y 1
+SFX R 0 able/PS . +DER_V_ADJ_ABLE
diff --git a/chrome/third_party/hunspell/tests/conditionalprefix.dic b/chrome/third_party/hunspell/tests/conditionalprefix.dic
new file mode 100644
index 0000000..ade5437
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/conditionalprefix.dic
@@ -0,0 +1,3 @@
+2
+drink/RQ [verb]
+drink/S [noun]
diff --git a/chrome/third_party/hunspell/tests/conditionalprefix.good b/chrome/third_party/hunspell/tests/conditionalprefix.good
new file mode 100644
index 0000000..01438d0
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/conditionalprefix.good
@@ -0,0 +1,6 @@
+drink
+drinks
+drinkable
+drinkables
+undrinkable
+undrinkables
diff --git a/chrome/third_party/hunspell/tests/conditionalprefix.morph b/chrome/third_party/hunspell/tests/conditionalprefix.morph
new file mode 100644
index 0000000..3d67eb9
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/conditionalprefix.morph
@@ -0,0 +1,14 @@
+> drink
+drink[verb]
+drink[noun]
+> drinks
+drink[verb]+3SGV
+drink[noun]+PL
+> drinkable
+drink[verb]+DER_V_ADJ_ABLE
+> drinkables
+drink[verb]+DER_V_ADJ_ABLE+PL
+> undrinkable
+prefix_un+drink[verb]+DER_V_ADJ_ABLE
+> undrinkables
+prefix_un+drink[verb]+DER_V_ADJ_ABLE+PL
diff --git a/chrome/third_party/hunspell/tests/conditionalprefix.test b/chrome/third_party/hunspell/tests/conditionalprefix.test
new file mode 100644
index 0000000..7f44369
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/conditionalprefix.test
@@ -0,0 +1,4 @@
+#!/bin/sh
+DIR="`dirname $0`"
+NAME="`basename $0 .test`"
+$DIR/test.sh $NAME
diff --git a/chrome/third_party/hunspell/tests/conditionalprefix.wrong b/chrome/third_party/hunspell/tests/conditionalprefix.wrong
new file mode 100644
index 0000000..70262d9
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/conditionalprefix.wrong
@@ -0,0 +1,2 @@
+undrink
+undrinks
diff --git a/chrome/third_party/hunspell/tests/flag.aff b/chrome/third_party/hunspell/tests/flag.aff
new file mode 100644
index 0000000..ac105c1
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/flag.aff
@@ -0,0 +1,13 @@
+# base 1-character flags
+
+SFX A Y 1
+SFX A 0 s/123 .
+
+SFX 1 Y 1
+SFX 1 0 bar .
+
+SFX 2 Y 1
+SFX 2 0 baz .
+
+PFX 3 Y 1
+PFX 3 0 un .
diff --git a/chrome/third_party/hunspell/tests/flag.dic b/chrome/third_party/hunspell/tests/flag.dic
new file mode 100644
index 0000000..b1b2371
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/flag.dic
@@ -0,0 +1,2 @@
+1
+foo/A3
diff --git a/chrome/third_party/hunspell/tests/flag.good b/chrome/third_party/hunspell/tests/flag.good
new file mode 100644
index 0000000..d5c27b1
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/flag.good
@@ -0,0 +1,8 @@
+foo
+foos
+foosbar
+foosbaz
+unfoo
+unfoos
+unfoosbar
+unfoosbaz
diff --git a/chrome/third_party/hunspell/tests/flag.test b/chrome/third_party/hunspell/tests/flag.test
new file mode 100644
index 0000000..7f44369
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/flag.test
@@ -0,0 +1,4 @@
+#!/bin/sh
+DIR="`dirname $0`"
+NAME="`basename $0 .test`"
+$DIR/test.sh $NAME
diff --git a/chrome/third_party/hunspell/tests/flaglong.aff b/chrome/third_party/hunspell/tests/flaglong.aff
new file mode 100644
index 0000000..437f13b
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/flaglong.aff
@@ -0,0 +1,14 @@
+# 2-character flags
+FLAG long
+
+SFX zx Y 1
+SFX zx 0 s/g?1G09 .
+
+SFX g? Y 1
+SFX g? 0 bar .
+
+SFX 1G Y 1
+SFX 1G 0 baz .
+
+PFX 09 Y 1
+PFX 09 0 un .
diff --git a/chrome/third_party/hunspell/tests/flaglong.dic b/chrome/third_party/hunspell/tests/flaglong.dic
new file mode 100644
index 0000000..46c6012
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/flaglong.dic
@@ -0,0 +1,2 @@
+1
+foo/zx09
diff --git a/chrome/third_party/hunspell/tests/flaglong.good b/chrome/third_party/hunspell/tests/flaglong.good
new file mode 100644
index 0000000..d5c27b1
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/flaglong.good
@@ -0,0 +1,8 @@
+foo
+foos
+foosbar
+foosbaz
+unfoo
+unfoos
+unfoosbar
+unfoosbaz
diff --git a/chrome/third_party/hunspell/tests/flaglong.test b/chrome/third_party/hunspell/tests/flaglong.test
new file mode 100644
index 0000000..7f44369
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/flaglong.test
@@ -0,0 +1,4 @@
+#!/bin/sh
+DIR="`dirname $0`"
+NAME="`basename $0 .test`"
+$DIR/test.sh $NAME
diff --git a/chrome/third_party/hunspell/tests/flagnum.aff b/chrome/third_party/hunspell/tests/flagnum.aff
new file mode 100644
index 0000000..823cee4
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/flagnum.aff
@@ -0,0 +1,14 @@
+# numerical flags
+FLAG num
+
+SFX 999 Y 1
+SFX 999 0 s/214,216,54321 .
+
+SFX 214 Y 1
+SFX 214 0 bar .
+
+SFX 216 Y 1
+SFX 216 0 baz .
+
+PFX 54321 Y 1
+PFX 54321 0 un .
diff --git a/chrome/third_party/hunspell/tests/flagnum.dic b/chrome/third_party/hunspell/tests/flagnum.dic
new file mode 100644
index 0000000..927c45f
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/flagnum.dic
@@ -0,0 +1,2 @@
+1
+foo/999,54321
diff --git a/chrome/third_party/hunspell/tests/flagnum.good b/chrome/third_party/hunspell/tests/flagnum.good
new file mode 100644
index 0000000..d5c27b1
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/flagnum.good
@@ -0,0 +1,8 @@
+foo
+foos
+foosbar
+foosbaz
+unfoo
+unfoos
+unfoosbar
+unfoosbaz
diff --git a/chrome/third_party/hunspell/tests/flagnum.test b/chrome/third_party/hunspell/tests/flagnum.test
new file mode 100644
index 0000000..7f44369
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/flagnum.test
@@ -0,0 +1,4 @@
+#!/bin/sh
+DIR="`dirname $0`"
+NAME="`basename $0 .test`"
+$DIR/test.sh $NAME
diff --git a/chrome/third_party/hunspell/tests/flagutf8.aff b/chrome/third_party/hunspell/tests/flagutf8.aff
new file mode 100644
index 0000000..d0f75c1
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/flagutf8.aff
@@ -0,0 +1,15 @@
+# UTF-8 flags
+FLAG UTF-8
+
+SFX A Y 1
+SFX A 0 s/ÖüÜ .
+#SFX A 0 s/ÖüÖÜ .
+
+SFX Ö Y 1
+SFX Ö 0 bar .
+
+SFX ü Y 1
+SFX ü 0 baz .
+
+PFX Ü Y 1
+PFX Ü 0 un .
diff --git a/chrome/third_party/hunspell/tests/flagutf8.dic b/chrome/third_party/hunspell/tests/flagutf8.dic
new file mode 100644
index 0000000..2944490
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/flagutf8.dic
@@ -0,0 +1,2 @@
+1
+foo/AÜ
diff --git a/chrome/third_party/hunspell/tests/flagutf8.good b/chrome/third_party/hunspell/tests/flagutf8.good
new file mode 100644
index 0000000..d5c27b1
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/flagutf8.good
@@ -0,0 +1,8 @@
+foo
+foos
+foosbar
+foosbaz
+unfoo
+unfoos
+unfoosbar
+unfoosbaz
diff --git a/chrome/third_party/hunspell/tests/flagutf8.test b/chrome/third_party/hunspell/tests/flagutf8.test
new file mode 100644
index 0000000..7f44369
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/flagutf8.test
@@ -0,0 +1,4 @@
+#!/bin/sh
+DIR="`dirname $0`"
+NAME="`basename $0 .test`"
+$DIR/test.sh $NAME
diff --git a/chrome/third_party/hunspell/tests/fogemorpheme.aff b/chrome/third_party/hunspell/tests/fogemorpheme.aff
new file mode 100644
index 0000000..56cdabe
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/fogemorpheme.aff
@@ -0,0 +1,12 @@
+# fogemorphemes: special morphemes in compounds
+#
+# Swedish example:
+# gata + kontoret = gatukontoret
+
+COMPOUNDFLAG X
+COMPOUNDBEGIN Y
+ONLYINCOMPOUND Z
+COMPOUNDPERMITFLAG P
+
+SFX A Y 1
+SFX A a u/YPZ .
diff --git a/chrome/third_party/hunspell/tests/fogemorpheme.dic b/chrome/third_party/hunspell/tests/fogemorpheme.dic
new file mode 100644
index 0000000..1b76380
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/fogemorpheme.dic
@@ -0,0 +1,3 @@
+2
+gata/A
+kontoret/X
diff --git a/chrome/third_party/hunspell/tests/fogemorpheme.good b/chrome/third_party/hunspell/tests/fogemorpheme.good
new file mode 100644
index 0000000..01e77d5
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/fogemorpheme.good
@@ -0,0 +1,3 @@
+gata
+kontoret
+gatukontoret
diff --git a/chrome/third_party/hunspell/tests/fogemorpheme.test b/chrome/third_party/hunspell/tests/fogemorpheme.test
new file mode 100644
index 0000000..7f44369
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/fogemorpheme.test
@@ -0,0 +1,4 @@
+#!/bin/sh
+DIR="`dirname $0`"
+NAME="`basename $0 .test`"
+$DIR/test.sh $NAME
diff --git a/chrome/third_party/hunspell/tests/fogemorpheme.wrong b/chrome/third_party/hunspell/tests/fogemorpheme.wrong
new file mode 100644
index 0000000..f920745
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/fogemorpheme.wrong
@@ -0,0 +1,3 @@
+gatu
+gatakontoret
+kontoretgatu
diff --git a/chrome/third_party/hunspell/tests/forbiddenword.aff b/chrome/third_party/hunspell/tests/forbiddenword.aff
new file mode 100644
index 0000000..de7f8ad
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/forbiddenword.aff
@@ -0,0 +1,11 @@
+# FORBIDDENWORD flag
+# The signed word, and its suffixed forms are all forbidden,
+# excepts with root homonyms.
+# Useful for forbidding bad suffixed forms or compounds.
+
+
+FORBIDDENWORD X
+COMPOUNDFLAG Y
+
+SFX A Y 1
+SFX A 0 s .
diff --git a/chrome/third_party/hunspell/tests/forbiddenword.dic b/chrome/third_party/hunspell/tests/forbiddenword.dic
new file mode 100644
index 0000000..78f2ee3
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/forbiddenword.dic
@@ -0,0 +1,8 @@
+5
+foo/S [1]
+foo/YX [2]
+foo/Y [3]
+foo/S [4]
+bar/YS [5]
+bars/X
+foos/X
diff --git a/chrome/third_party/hunspell/tests/forbiddenword.good b/chrome/third_party/hunspell/tests/forbiddenword.good
new file mode 100644
index 0000000..7bd112e
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/forbiddenword.good
@@ -0,0 +1,3 @@
+foo
+bar
+
diff --git a/chrome/third_party/hunspell/tests/forbiddenword.test b/chrome/third_party/hunspell/tests/forbiddenword.test
new file mode 100644
index 0000000..7f44369
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/forbiddenword.test
@@ -0,0 +1,4 @@
+#!/bin/sh
+DIR="`dirname $0`"
+NAME="`basename $0 .test`"
+$DIR/test.sh $NAME
diff --git a/chrome/third_party/hunspell/tests/forbiddenword.wrong b/chrome/third_party/hunspell/tests/forbiddenword.wrong
new file mode 100644
index 0000000..5752c1e
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/forbiddenword.wrong
@@ -0,0 +1,4 @@
+bars
+foos
+foobar
+barfoo
diff --git a/chrome/third_party/hunspell/tests/germancompounding.aff b/chrome/third_party/hunspell/tests/germancompounding.aff
new file mode 100644
index 0000000..5ff2587
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/germancompounding.aff
@@ -0,0 +1,91 @@
+# German compounding
+
+# handle special casing of German sharp s
+
+CHECKSHARPS
+
+# compound flags
+
+COMPOUNDBEGIN U
+COMPOUNDMIDDLE V
+COMPOUNDEND W
+
+# Prefixes are allowed at the beginning of compounds,
+# suffixes are allowed at the end of compounds by default:
+# (prefix)?(root)+(affix)?
+# Affixes with COMPOUNDPERMITFLAG may be inside of compounds.
+COMPOUNDPERMITFLAG P
+
+# for German fogemorphemes (Fuge-element)
+# Hint: ONLYINCOMPOUND is not required everywhere, but the
+# checking will be a little faster with it.
+
+ONLYINCOMPOUND X
+
+# forbid uppercase characters at compound word bounds
+CHECKCOMPOUNDCASE
+
+# for handling Fuge-elements with dashes (Arbeits-)
+# dash will be a special word
+
+COMPOUNDMIN 1
+WORDCHARS -
+
+# compound settings and fogemorpheme for `Arbeit'
+
+SFX A Y 3
+SFX A 0 s/UPX .
+SFX A 0 s/VPDX .
+SFX A 0 0/WXD .
+
+SFX B Y 2
+SFX B 0 0/UPX .
+SFX B 0 0/VWXDP .
+
+# a suffix for `Computer'
+
+SFX C Y 1
+SFX C 0 n/WD .
+
+# for forbid exceptions (*Arbeitsnehmer)
+
+FORBIDDENWORD Z
+
+# dash prefix for compounds with dash (Arbeits-Computer)
+
+PFX - Y 1
+PFX - 0 -/P .
+
+# decapitalizing prefix
+# circumfix for positioning in compounds
+
+PFX D Y 29
+PFX D A a/PX A
+PFX D � �/PX �
+PFX D B b/PX B
+PFX D C c/PX C
+PFX D D d/PX D
+PFX D E e/PX E
+PFX D F f/PX F
+PFX D G g/PX G
+PFX D H h/PX H
+PFX D I i/PX I
+PFX D J j/PX J
+PFX D K k/PX K
+PFX D L l/PX L
+PFX D M m/PX M
+PFX D N n/PX N
+PFX D O o/PX O
+PFX D � �/PX �
+PFX D P p/PX P
+PFX D Q q/PX Q
+PFX D R r/PX R
+PFX D S s/PX S
+PFX D T t/PX T
+PFX D U u/PX U
+PFX D � �/PX �
+PFX D V v/PX V
+PFX D W w/PX W
+PFX D X x/PX X
+PFX D Y y/PX Y
+PFX D Z z/PX Z
diff --git a/chrome/third_party/hunspell/tests/germancompounding.dic b/chrome/third_party/hunspell/tests/germancompounding.dic
new file mode 100644
index 0000000..5db6783
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/germancompounding.dic
@@ -0,0 +1,5 @@
+4
+Arbeit/A-
+Computer/BC-
+-/W
+Arbeitsnehmer/Z
diff --git a/chrome/third_party/hunspell/tests/germancompounding.good b/chrome/third_party/hunspell/tests/germancompounding.good
new file mode 100644
index 0000000..e494555
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/germancompounding.good
@@ -0,0 +1,20 @@
+Computer
+Computern
+Arbeit
+Arbeits-
+Computerarbeit
+Computerarbeits-
+Arbeitscomputer
+Computercomputer
+Computercomputern
+Arbeitscomputern
+Computerarbeitscomputer
+Computerarbeitscomputern
+Arbeitscomputercomputer
+Computercomputerarbeit
+Arbeitscomputerarbeit
+Arbeitsarbeitsarbeit
+Computerarbeitsarbeit
+Computerarbeits-Computer
+Computerarbeits-Computern
+Computer-Arbeit
diff --git a/chrome/third_party/hunspell/tests/germancompounding.test b/chrome/third_party/hunspell/tests/germancompounding.test
new file mode 100644
index 0000000..7f44369
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/germancompounding.test
@@ -0,0 +1,4 @@
+#!/bin/sh
+DIR="`dirname $0`"
+NAME="`basename $0 .test`"
+$DIR/test.sh $NAME
diff --git a/chrome/third_party/hunspell/tests/germancompounding.wrong b/chrome/third_party/hunspell/tests/germancompounding.wrong
new file mode 100644
index 0000000..c5f2ba1
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/germancompounding.wrong
@@ -0,0 +1,50 @@
+computer
+computern
+arbeit
+Arbeits
+arbeits
+ComputerArbeit
+ComputernArbeit
+Computernarbeit
+ComputerArbeits
+Arbeitcomputer
+Arbeitcomputern
+ArbeitsComputer
+ArbeitsComputern
+Computerarbeitcomputer
+ComputerArbeitcomputer
+ComputerArbeitscomputer
+Computerarbeitcomputern
+ComputerArbeitcomputern
+ComputerArbeitscomputern
+Arbeitscomputerarbeits
+Arbeitscomputernarbeits
+Computerarbeits-computer
+Arbeitsnehmer
+computers
+computern
+computernarbeit
+computernArbeit
+computerArbeit
+computerArbeits
+arbeitcomputer
+arbeitsComputer
+computerarbeitcomputer
+computerArbeitcomputer
+computerArbeitscomputer
+arbeitscomputerarbeits
+computerarbeits-computer
+arbeitsnehmer
+computernarbeit
+computernArbeit
+arbeits-
+computerarbeit
+computerarbeits-
+arbeitscomputer
+arbeitscomputern
+computerarbeitscomputer
+computerarbeitscomputern
+computerarbeitscomputers
+arbeitscomputerarbeit
+computerarbeits-Computer
+computerarbeits-Computern
diff --git a/chrome/third_party/hunspell/tests/germancompoundingold.aff b/chrome/third_party/hunspell/tests/germancompoundingold.aff
new file mode 100644
index 0000000..3e06f06
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/germancompoundingold.aff
@@ -0,0 +1,96 @@
+# German compounding
+
+# handle special casing of German sharp s
+
+CHECKSHARPS
+
+# compound flags
+
+COMPOUNDBEGIN U
+COMPOUNDMIDDLE V
+COMPOUNDEND W
+
+# Prefixes are allowed at the beginning of compounds,
+# suffixes are allowed at the end of compounds by default:
+# (prefix)?(root)+(affix)?
+# Affixes with COMPOUNDPERMITFLAG may be inside of compounds.
+COMPOUNDPERMITFLAG P
+
+# for German fogemorphemes (Fuge-element)
+# Hint: ONLYINCOMPOUND is not required everywhere, but the
+# checking will be a little faster with it.
+
+ONLYINCOMPOUND X
+
+# for decapitalizing nouns with fogemorphemes
+
+CIRCUMFIX Y
+
+# for handling Fuge-elements with dashes (Arbeits-)
+# dash will be a special word
+
+COMPOUNDMIN 1
+WORDCHARS -
+
+# compound settings and fogemorpheme for `Arbeit'
+
+SFX A Y 3
+SFX A 0 s/UPX .
+SFX A 0 s/VPXDY .
+SFX A 0 0/WXDY .
+
+# compound settings for `Computer'
+
+SFX B Y 2
+SFX B 0 0/UPX .
+SFX B 0 0/VWPXDY .
+
+# a suffix for `Computer'
+
+SFX C Y 2
+SFX C 0 n .
+SFX C 0 n/WXDY .
+
+# for forbid exceptions (*Arbeitsnehmer)
+
+FORBIDDENWORD Z
+
+# dash prefix for compounds with dash (Arbeits-Computer)
+
+PFX - Y 2
+PFX - 0 -/PUVW .
+PFX - 0 -/PY .
+
+# decapitalizing prefix
+# circumfix for positioning in compounds
+
+PFX D Y 29
+PFX D A a/PXY A
+PFX D � �/PXY �
+PFX D B b/PXY B
+PFX D C c/PXY C
+PFX D D d/PXY D
+PFX D E e/PXY E
+PFX D F f/PXY F
+PFX D G g/PXY G
+PFX D H h/PXY H
+PFX D I i/PXY I
+PFX D J j/PXY J
+PFX D K k/PXY K
+PFX D L l/PXY L
+PFX D M m/PXY M
+PFX D N n/PXY N
+PFX D O o/PXY O
+PFX D � �/PXY �
+PFX D P p/PXY P
+PFX D Q q/PXY Q
+PFX D R r/PXY R
+PFX D S s/PXY S
+PFX D T t/PXY T
+PFX D U u/PXY U
+PFX D � �/PXY �
+PFX D V v/PXY V
+PFX D W w/PXY W
+PFX D X x/PXY X
+PFX D Y y/PXY Y
+PFX D Z z/PXY Z
diff --git a/chrome/third_party/hunspell/tests/germancompoundingold.dic b/chrome/third_party/hunspell/tests/germancompoundingold.dic
new file mode 100644
index 0000000..5db6783
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/germancompoundingold.dic
@@ -0,0 +1,5 @@
+4
+Arbeit/A-
+Computer/BC-
+-/W
+Arbeitsnehmer/Z
diff --git a/chrome/third_party/hunspell/tests/germancompoundingold.good b/chrome/third_party/hunspell/tests/germancompoundingold.good
new file mode 100644
index 0000000..5357bff
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/germancompoundingold.good
@@ -0,0 +1,14 @@
+Computer
+Computern
+Arbeit
+Arbeits-
+Computerarbeit
+Computerarbeits-
+Arbeitscomputer
+Arbeitscomputern
+Computerarbeitscomputer
+Computerarbeitscomputern
+Arbeitscomputerarbeit
+Computerarbeits-Computer
+Computerarbeits-Computern
+Computer-Arbeit
diff --git a/chrome/third_party/hunspell/tests/germancompoundingold.test b/chrome/third_party/hunspell/tests/germancompoundingold.test
new file mode 100644
index 0000000..7f44369
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/germancompoundingold.test
@@ -0,0 +1,4 @@
+#!/bin/sh
+DIR="`dirname $0`"
+NAME="`basename $0 .test`"
+$DIR/test.sh $NAME
diff --git a/chrome/third_party/hunspell/tests/germancompoundingold.wrong b/chrome/third_party/hunspell/tests/germancompoundingold.wrong
new file mode 100644
index 0000000..c5f2ba1
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/germancompoundingold.wrong
@@ -0,0 +1,50 @@
+computer
+computern
+arbeit
+Arbeits
+arbeits
+ComputerArbeit
+ComputernArbeit
+Computernarbeit
+ComputerArbeits
+Arbeitcomputer
+Arbeitcomputern
+ArbeitsComputer
+ArbeitsComputern
+Computerarbeitcomputer
+ComputerArbeitcomputer
+ComputerArbeitscomputer
+Computerarbeitcomputern
+ComputerArbeitcomputern
+ComputerArbeitscomputern
+Arbeitscomputerarbeits
+Arbeitscomputernarbeits
+Computerarbeits-computer
+Arbeitsnehmer
+computers
+computern
+computernarbeit
+computernArbeit
+computerArbeit
+computerArbeits
+arbeitcomputer
+arbeitsComputer
+computerarbeitcomputer
+computerArbeitcomputer
+computerArbeitscomputer
+arbeitscomputerarbeits
+computerarbeits-computer
+arbeitsnehmer
+computernarbeit
+computernArbeit
+arbeits-
+computerarbeit
+computerarbeits-
+arbeitscomputer
+arbeitscomputern
+computerarbeitscomputer
+computerarbeitscomputern
+computerarbeitscomputers
+arbeitscomputerarbeit
+computerarbeits-Computer
+computerarbeits-Computern
diff --git a/chrome/third_party/hunspell/tests/i35725.aff b/chrome/third_party/hunspell/tests/i35725.aff
new file mode 100644
index 0000000..96755c7
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/i35725.aff
@@ -0,0 +1,203 @@
+# Ngram suggestions
+# - fix case problem
+# - detect character swapping (keep only these suggestions)
+# - lesser suggestions
+# - weight with common subsequence algorithm
+# - suggest uppercased words
+
+# 2007-02-05:
+# now not neighbour character replacements and character movings are
+# detected by not ngram suggestions, too.
+
+# OpenOffice.org's en_US.aff file
+
+SET ISO8859-1
+TRY esianrtolcdugmphbyfvkwzESIANRTOLCDUGMPHBYFVKWZ'
+
+WORDCHARS '
+
+PFX A Y 1
+PFX A 0 re .
+
+PFX I Y 1
+PFX I 0 in .
+
+PFX U Y 1
+PFX U 0 un .
+
+PFX C Y 1
+PFX C 0 de .
+
+PFX E Y 1
+PFX E 0 dis .
+
+PFX F Y 1
+PFX F 0 con .
+
+PFX K Y 1
+PFX K 0 pro .
+
+SFX V N 2
+SFX V e ive e
+SFX V 0 ive [^e]
+
+SFX N Y 3
+SFX N e ion e
+SFX N y ication y
+SFX N 0 en [^ey]
+
+SFX X Y 3
+SFX X e ions e
+SFX X y ications y
+SFX X 0 ens [^ey]
+
+SFX H N 2
+SFX H y ieth y
+SFX H 0 th [^y]
+
+SFX Y Y 1
+SFX Y 0 ly .
+
+SFX G Y 2
+SFX G e ing e
+SFX G 0 ing [^e]
+
+SFX J Y 2
+SFX J e ings e
+SFX J 0 ings [^e]
+
+SFX D Y 4
+SFX D 0 d e
+SFX D y ied [^aeiou]y
+SFX D 0 ed [^ey]
+SFX D 0 ed [aeiou]y
+
+SFX T N 4
+SFX T 0 st e
+SFX T y iest [^aeiou]y
+SFX T 0 est [aeiou]y
+SFX T 0 est [^ey]
+
+SFX R Y 4
+SFX R 0 r e
+SFX R y ier [^aeiou]y
+SFX R 0 er [aeiou]y
+SFX R 0 er [^ey]
+
+SFX Z Y 4
+SFX Z 0 rs e
+SFX Z y iers [^aeiou]y
+SFX Z 0 ers [aeiou]y
+SFX Z 0 ers [^ey]
+
+SFX S Y 4
+SFX S y ies [^aeiou]y
+SFX S 0 s [aeiou]y
+SFX S 0 es [sxzh]
+SFX S 0 s [^sxzhy]
+
+SFX P Y 3
+SFX P y iness [^aeiou]y
+SFX P 0 ness [aeiou]y
+SFX P 0 ness [^y]
+
+SFX M Y 1
+SFX M 0 's .
+
+SFX B Y 3
+SFX B 0 able [^aeiou]
+SFX B 0 able ee
+SFX B e able [^aeiou]e
+
+SFX L Y 1
+SFX L 0 ment .
+
+REP 88
+REP a ei
+REP ei a
+REP a ey
+REP ey a
+REP ai ie
+REP ie ai
+REP are air
+REP are ear
+REP are eir
+REP air are
+REP air ere
+REP ere air
+REP ere ear
+REP ere eir
+REP ear are
+REP ear air
+REP ear ere
+REP eir are
+REP eir ere
+REP ch te
+REP te ch
+REP ch ti
+REP ti ch
+REP ch tu
+REP tu ch
+REP ch s
+REP s ch
+REP ch k
+REP k ch
+REP f ph
+REP ph f
+REP gh f
+REP f gh
+REP i igh
+REP igh i
+REP i uy
+REP uy i
+REP i ee
+REP ee i
+REP j di
+REP di j
+REP j gg
+REP gg j
+REP j ge
+REP ge j
+REP s ti
+REP ti s
+REP s ci
+REP ci s
+REP k cc
+REP cc k
+REP k qu
+REP qu k
+REP kw qu
+REP o eau
+REP eau o
+REP o ew
+REP ew o
+REP oo ew
+REP ew oo
+REP ew ui
+REP ui ew
+REP oo ui
+REP ui oo
+REP ew u
+REP u ew
+REP oo u
+REP u oo
+REP u oe
+REP oe u
+REP u ieu
+REP ieu u
+REP ue ew
+REP ew ue
+REP uff ough
+REP oo ieu
+REP ieu oo
+REP ier ear
+REP ear ier
+REP ear air
+REP air ear
+REP w qu
+REP qu w
+REP z ss
+REP ss z
+REP shun tion
+REP shun sion
+REP shun cion
diff --git a/chrome/third_party/hunspell/tests/i35725.dic b/chrome/third_party/hunspell/tests/i35725.dic
new file mode 100644
index 0000000..0c61f00
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/i35725.dic
@@ -0,0 +1,15 @@
+15
+endangerment/SM
+ferment/FSCM
+preferment/SM
+impermanent/Y
+permanent/YSP
+semipermanent/Y
+empowerment/MS
+supermen
+tournament/MS
+ornamental/SY
+ornament/GSDM
+supernatant
+pimpernel
+UNESCO/M
diff --git a/chrome/third_party/hunspell/tests/i35725.good b/chrome/third_party/hunspell/tests/i35725.good
new file mode 100644
index 0000000..052ba84
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/i35725.good
@@ -0,0 +1 @@
+permanent
diff --git a/chrome/third_party/hunspell/tests/i35725.sug b/chrome/third_party/hunspell/tests/i35725.sug
new file mode 100644
index 0000000..eea2e92
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/i35725.sug
@@ -0,0 +1,10 @@
+permanent
+permanent
+permanent, supernatant, pimpernel
+Permanent
+Permanent
+Permanent, Supernatant, Pimpernel
+UNESCO
+UNESCO
+UNESCO's
+UNESCO's
diff --git a/chrome/third_party/hunspell/tests/i35725.test b/chrome/third_party/hunspell/tests/i35725.test
new file mode 100644
index 0000000..7f44369
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/i35725.test
@@ -0,0 +1,4 @@
+#!/bin/sh
+DIR="`dirname $0`"
+NAME="`basename $0 .test`"
+$DIR/test.sh $NAME
diff --git a/chrome/third_party/hunspell/tests/i35725.wrong b/chrome/third_party/hunspell/tests/i35725.wrong
new file mode 100644
index 0000000..573e195
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/i35725.wrong
@@ -0,0 +1,10 @@
+permenant
+pernament
+pernemant
+Permenant
+Pernament
+Pernemant
+unesco
+Unesco
+unesco's
+Unesco's
diff --git a/chrome/third_party/hunspell/tests/i53643.aff b/chrome/third_party/hunspell/tests/i53643.aff
new file mode 100644
index 0000000..9fac6d8
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/i53643.aff
@@ -0,0 +1,2 @@
+# check numbers with separators
+WORDCHARS 0123456789.-,
diff --git a/chrome/third_party/hunspell/tests/i53643.dic b/chrome/third_party/hunspell/tests/i53643.dic
new file mode 100644
index 0000000..aec5d50
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/i53643.dic
@@ -0,0 +1,2 @@
+1
+foo
diff --git a/chrome/third_party/hunspell/tests/i53643.good b/chrome/third_party/hunspell/tests/i53643.good
new file mode 100644
index 0000000..1163334
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/i53643.good
@@ -0,0 +1,19 @@
+1
+12
+123
+1234
+12345
+123456
+1234567
+1.1
+1.12
+1.123
+1.1234
+1.12345
+1.123456
+12.1
+123.12
+1234.123
+12345.1234
+123456.12345
+1234567.123456
diff --git a/chrome/third_party/hunspell/tests/i53643.test b/chrome/third_party/hunspell/tests/i53643.test
new file mode 100644
index 0000000..7f44369
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/i53643.test
@@ -0,0 +1,4 @@
+#!/bin/sh
+DIR="`dirname $0`"
+NAME="`basename $0 .test`"
+$DIR/test.sh $NAME
diff --git a/chrome/third_party/hunspell/tests/i53643.wrong b/chrome/third_party/hunspell/tests/i53643.wrong
new file mode 100644
index 0000000..45c61d2
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/i53643.wrong
@@ -0,0 +1,4 @@
+1..2
+1,,2
+1.,2
+1,.2
diff --git a/chrome/third_party/hunspell/tests/i54633.aff b/chrome/third_party/hunspell/tests/i54633.aff
new file mode 100644
index 0000000..e70073b
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/i54633.aff
@@ -0,0 +1 @@
+# Missing capitalized suggestion for capitalized bad words
diff --git a/chrome/third_party/hunspell/tests/i54633.dic b/chrome/third_party/hunspell/tests/i54633.dic
new file mode 100644
index 0000000..e26d6f9
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/i54633.dic
@@ -0,0 +1,2 @@
+1
+�diter
diff --git a/chrome/third_party/hunspell/tests/i54633.good b/chrome/third_party/hunspell/tests/i54633.good
new file mode 100644
index 0000000..a115f67
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/i54633.good
@@ -0,0 +1,2 @@
+�diter
+�diter
diff --git a/chrome/third_party/hunspell/tests/i54633.sug b/chrome/third_party/hunspell/tests/i54633.sug
new file mode 100644
index 0000000..a115f67
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/i54633.sug
@@ -0,0 +1,2 @@
+�diter
+�diter
diff --git a/chrome/third_party/hunspell/tests/i54633.test b/chrome/third_party/hunspell/tests/i54633.test
new file mode 100644
index 0000000..7f44369
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/i54633.test
@@ -0,0 +1,4 @@
+#!/bin/sh
+DIR="`dirname $0`"
+NAME="`basename $0 .test`"
+$DIR/test.sh $NAME
diff --git a/chrome/third_party/hunspell/tests/i54633.wrong b/chrome/third_party/hunspell/tests/i54633.wrong
new file mode 100644
index 0000000..579a45d
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/i54633.wrong
@@ -0,0 +1,2 @@
+editer
+Editer
diff --git a/chrome/third_party/hunspell/tests/i54980.aff b/chrome/third_party/hunspell/tests/i54980.aff
new file mode 100644
index 0000000..37cc5c53d
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/i54980.aff
@@ -0,0 +1,2 @@
+# ISO-8859-15 (extended latin-1) support for French, Finnish and EURO symbol
+SET ISO8859-15
diff --git a/chrome/third_party/hunspell/tests/i54980.dic b/chrome/third_party/hunspell/tests/i54980.dic
new file mode 100644
index 0000000..414f9b8
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/i54980.dic
@@ -0,0 +1,3 @@
+2
+c�ur
+�uvre
diff --git a/chrome/third_party/hunspell/tests/i54980.good b/chrome/third_party/hunspell/tests/i54980.good
new file mode 100644
index 0000000..fc41c90
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/i54980.good
@@ -0,0 +1,4 @@
+c�ur
+�uvre
+C�UR
+�UVRE
diff --git a/chrome/third_party/hunspell/tests/i54980.test b/chrome/third_party/hunspell/tests/i54980.test
new file mode 100644
index 0000000..7f44369
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/i54980.test
@@ -0,0 +1,4 @@
+#!/bin/sh
+DIR="`dirname $0`"
+NAME="`basename $0 .test`"
+$DIR/test.sh $NAME
diff --git a/chrome/third_party/hunspell/tests/i58202.aff b/chrome/third_party/hunspell/tests/i58202.aff
new file mode 100644
index 0000000..11249d4
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/i58202.aff
@@ -0,0 +1,4 @@
+# case suggestions
+MAXNGRAMSUGS 0
+# capitalise baz->Baz
+TRY B
diff --git a/chrome/third_party/hunspell/tests/i58202.dic b/chrome/third_party/hunspell/tests/i58202.dic
new file mode 100644
index 0000000..19e1980
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/i58202.dic
@@ -0,0 +1,5 @@
+4
+foo
+bar
+Baz
+Boo
diff --git a/chrome/third_party/hunspell/tests/i58202.good b/chrome/third_party/hunspell/tests/i58202.good
new file mode 100644
index 0000000..88a079a
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/i58202.good
@@ -0,0 +1,10 @@
+foo
+bar
+Foo
+Bar
+Baz
+Boo
+FOO
+BAR
+BAZ
+BOO
diff --git a/chrome/third_party/hunspell/tests/i58202.sug b/chrome/third_party/hunspell/tests/i58202.sug
new file mode 100644
index 0000000..bc784ac
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/i58202.sug
@@ -0,0 +1,13 @@
+foo, Boo
+Bar
+Baz
+Boo
+foo bar
+foo Bar
+Foo bar
+Foo Bar
+foo Baz
+Foo Baz
+Baz foo
+Baz Foo
+Baz Boo
diff --git a/chrome/third_party/hunspell/tests/i58202.test b/chrome/third_party/hunspell/tests/i58202.test
new file mode 100644
index 0000000..7f44369
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/i58202.test
@@ -0,0 +1,4 @@
+#!/bin/sh
+DIR="`dirname $0`"
+NAME="`basename $0 .test`"
+$DIR/test.sh $NAME
diff --git a/chrome/third_party/hunspell/tests/i58202.wrong b/chrome/third_party/hunspell/tests/i58202.wrong
new file mode 100644
index 0000000..886584d
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/i58202.wrong
@@ -0,0 +1,13 @@
+fOO
+BAr
+baz
+BOo
+foobar
+fooBar
+Foobar
+FooBar
+fooBaz
+FooBaz
+Bazfoo
+BazFoo
+BazBoo
diff --git a/chrome/third_party/hunspell/tests/ignore.aff b/chrome/third_party/hunspell/tests/ignore.aff
new file mode 100644
index 0000000..c7af0c6
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/ignore.aff
@@ -0,0 +1,5 @@
+# ignore characters in words (for Arabic Harakat)
+IGNORE aeiou
+
+PFX A Y 1
+PFX A 0 re .
diff --git a/chrome/third_party/hunspell/tests/ignore.dic b/chrome/third_party/hunspell/tests/ignore.dic
new file mode 100644
index 0000000..846983b
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/ignore.dic
@@ -0,0 +1,3 @@
+2
+xmpl
+expression/A
diff --git a/chrome/third_party/hunspell/tests/ignore.good b/chrome/third_party/hunspell/tests/ignore.good
new file mode 100644
index 0000000..d7dd645
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/ignore.good
@@ -0,0 +1,6 @@
+example
+expression
+xmpl
+xprssn
+reexpression
+rxprssn
diff --git a/chrome/third_party/hunspell/tests/ignore.test b/chrome/third_party/hunspell/tests/ignore.test
new file mode 100644
index 0000000..7f44369
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/ignore.test
@@ -0,0 +1,4 @@
+#!/bin/sh
+DIR="`dirname $0`"
+NAME="`basename $0 .test`"
+$DIR/test.sh $NAME
diff --git a/chrome/third_party/hunspell/tests/ignoreutf.aff b/chrome/third_party/hunspell/tests/ignoreutf.aff
new file mode 100644
index 0000000..8646676
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/ignoreutf.aff
@@ -0,0 +1,6 @@
+# Arabic test for feature ignoring diacritics
+SET UTF-8
+# Arabic diacritics (harakat):
+# sukun, shadda, kasra, damma, fatha, kasratan, dammantan, fathatan (left to right)
+IGNORE ًٌٍَُِّْ
+WORDCHARS ًٌٍَُِّْ
diff --git a/chrome/third_party/hunspell/tests/ignoreutf.dic b/chrome/third_party/hunspell/tests/ignoreutf.dic
new file mode 100644
index 0000000..d4a2a81
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/ignoreutf.dic
@@ -0,0 +1,10 @@
+9
+طِير
+فَتحة
+ضُمة
+كِسرة
+فتحًتان
+ضمتانٌ
+كسرتاٍن
+شدّة
+سكوْن
diff --git a/chrome/third_party/hunspell/tests/ignoreutf.good b/chrome/third_party/hunspell/tests/ignoreutf.good
new file mode 100644
index 0000000..d463cd5
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/ignoreutf.good
@@ -0,0 +1,9 @@
+طير
+فتحة
+ضمة
+كسرة
+فتحتان
+ضمتان
+كسرتان
+شدة
+سكون
diff --git a/chrome/third_party/hunspell/tests/ignoreutf.test b/chrome/third_party/hunspell/tests/ignoreutf.test
new file mode 100644
index 0000000..7f44369
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/ignoreutf.test
@@ -0,0 +1,4 @@
+#!/bin/sh
+DIR="`dirname $0`"
+NAME="`basename $0 .test`"
+$DIR/test.sh $NAME
diff --git a/chrome/third_party/hunspell/tests/keepcase.aff b/chrome/third_party/hunspell/tests/keepcase.aff
new file mode 100644
index 0000000..b08006b
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/keepcase.aff
@@ -0,0 +1,3 @@
+# keep case in signed words
+KEEPCASE A
+WORDCHARS .
diff --git a/chrome/third_party/hunspell/tests/keepcase.dic b/chrome/third_party/hunspell/tests/keepcase.dic
new file mode 100644
index 0000000..bf9992a
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/keepcase.dic
@@ -0,0 +1,5 @@
+4
+foo/A
+Bar/A
+baz./A
+Quux./A
diff --git a/chrome/third_party/hunspell/tests/keepcase.good b/chrome/third_party/hunspell/tests/keepcase.good
new file mode 100644
index 0000000..e6ff181
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/keepcase.good
@@ -0,0 +1,4 @@
+foo
+Bar
+baz.
+Quux.
diff --git a/chrome/third_party/hunspell/tests/keepcase.sug b/chrome/third_party/hunspell/tests/keepcase.sug
new file mode 100644
index 0000000..e9e6628
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/keepcase.sug
@@ -0,0 +1,8 @@
+foo
+foo
+Bar
+Bar
+baz., Bar
+baz., Bar
+Quux.
+Quux.
diff --git a/chrome/third_party/hunspell/tests/keepcase.test b/chrome/third_party/hunspell/tests/keepcase.test
new file mode 100644
index 0000000..7f44369
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/keepcase.test
@@ -0,0 +1,4 @@
+#!/bin/sh
+DIR="`dirname $0`"
+NAME="`basename $0 .test`"
+$DIR/test.sh $NAME
diff --git a/chrome/third_party/hunspell/tests/keepcase.wrong b/chrome/third_party/hunspell/tests/keepcase.wrong
new file mode 100644
index 0000000..3b79142
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/keepcase.wrong
@@ -0,0 +1,8 @@
+Foo
+FOO
+BAR
+bar
+Baz.
+BAZ.
+quux.
+QUUX.
diff --git a/chrome/third_party/hunspell/tests/map.aff b/chrome/third_party/hunspell/tests/map.aff
new file mode 100644
index 0000000..83d99a4
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/map.aff
@@ -0,0 +1,8 @@
+# With MAP suggestion, Hunspell can add missing accents to a word.
+
+# switch off ngram suggestion for testing
+MAXNGRAMSUGS 0
+
+MAP 2
+MAP u��
+MAP o��
diff --git a/chrome/third_party/hunspell/tests/map.dic b/chrome/third_party/hunspell/tests/map.dic
new file mode 100644
index 0000000..82079c6
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/map.dic
@@ -0,0 +1,3 @@
+2
+Fr�hst�ck
+t�k�rf�r�
diff --git a/chrome/third_party/hunspell/tests/map.sug b/chrome/third_party/hunspell/tests/map.sug
new file mode 100644
index 0000000..9ecad05
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/map.sug
@@ -0,0 +1,2 @@
+Fr�hst�ck
+t�k�rf�r�
diff --git a/chrome/third_party/hunspell/tests/map.test b/chrome/third_party/hunspell/tests/map.test
new file mode 100644
index 0000000..7f44369
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/map.test
@@ -0,0 +1,4 @@
+#!/bin/sh
+DIR="`dirname $0`"
+NAME="`basename $0 .test`"
+$DIR/test.sh $NAME
diff --git a/chrome/third_party/hunspell/tests/map.wrong b/chrome/third_party/hunspell/tests/map.wrong
new file mode 100644
index 0000000..fa913e4
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/map.wrong
@@ -0,0 +1,2 @@
+Fruhstuck
+tukorfuro
diff --git a/chrome/third_party/hunspell/tests/maputf.aff b/chrome/third_party/hunspell/tests/maputf.aff
new file mode 100644
index 0000000..08fbfeb
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/maputf.aff
@@ -0,0 +1,10 @@
+# With MAP suggestion, Hunspell can add missing accents to a word.
+
+SET UTF-8
+
+# switch off ngram suggestion for testing
+MAXNGRAMSUGS 0
+
+MAP 2
+MAP uúü
+MAP öóo
diff --git a/chrome/third_party/hunspell/tests/maputf.dic b/chrome/third_party/hunspell/tests/maputf.dic
new file mode 100644
index 0000000..3e83065
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/maputf.dic
@@ -0,0 +1,3 @@
+2
+Frühstück
+tükörfúró
diff --git a/chrome/third_party/hunspell/tests/maputf.sug b/chrome/third_party/hunspell/tests/maputf.sug
new file mode 100644
index 0000000..c45a7ae
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/maputf.sug
@@ -0,0 +1,2 @@
+Frühstück
+tükörfúró
diff --git a/chrome/third_party/hunspell/tests/maputf.test b/chrome/third_party/hunspell/tests/maputf.test
new file mode 100644
index 0000000..7f44369
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/maputf.test
@@ -0,0 +1,4 @@
+#!/bin/sh
+DIR="`dirname $0`"
+NAME="`basename $0 .test`"
+$DIR/test.sh $NAME
diff --git a/chrome/third_party/hunspell/tests/maputf.wrong b/chrome/third_party/hunspell/tests/maputf.wrong
new file mode 100644
index 0000000..fa913e4
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/maputf.wrong
@@ -0,0 +1,2 @@
+Fruhstuck
+tukorfuro
diff --git a/chrome/third_party/hunspell/tests/needaffix.aff b/chrome/third_party/hunspell/tests/needaffix.aff
new file mode 100644
index 0000000..a5981ef
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/needaffix.aff
@@ -0,0 +1,5 @@
+NEEDAFFIX X
+COMPOUNDFLAG Y
+
+SFX A Y 1
+SFX A 0 s/Y .
diff --git a/chrome/third_party/hunspell/tests/needaffix.dic b/chrome/third_party/hunspell/tests/needaffix.dic
new file mode 100644
index 0000000..b579276
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/needaffix.dic
@@ -0,0 +1,3 @@
+2
+foo/YXA
+bar/Y
diff --git a/chrome/third_party/hunspell/tests/needaffix.good b/chrome/third_party/hunspell/tests/needaffix.good
new file mode 100644
index 0000000..f9e0663
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/needaffix.good
@@ -0,0 +1,3 @@
+bar
+foos
+barfoos
diff --git a/chrome/third_party/hunspell/tests/needaffix.test b/chrome/third_party/hunspell/tests/needaffix.test
new file mode 100644
index 0000000..7f44369
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/needaffix.test
@@ -0,0 +1,4 @@
+#!/bin/sh
+DIR="`dirname $0`"
+NAME="`basename $0 .test`"
+$DIR/test.sh $NAME
diff --git a/chrome/third_party/hunspell/tests/needaffix.wrong b/chrome/third_party/hunspell/tests/needaffix.wrong
new file mode 100644
index 0000000..257cc56
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/needaffix.wrong
@@ -0,0 +1 @@
+foo
diff --git a/chrome/third_party/hunspell/tests/needaffix2.aff b/chrome/third_party/hunspell/tests/needaffix2.aff
new file mode 100644
index 0000000..c434dac
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/needaffix2.aff
@@ -0,0 +1,2 @@
+NEEDAFFIX X
+COMPOUNDFLAG Y
diff --git a/chrome/third_party/hunspell/tests/needaffix2.dic b/chrome/third_party/hunspell/tests/needaffix2.dic
new file mode 100644
index 0000000..99ccf05
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/needaffix2.dic
@@ -0,0 +1,5 @@
+4
+foo [1]
+foo/YX [2]
+foo/Y [3]
+bar/Y [4]
diff --git a/chrome/third_party/hunspell/tests/needaffix2.good b/chrome/third_party/hunspell/tests/needaffix2.good
new file mode 100644
index 0000000..7e4b098
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/needaffix2.good
@@ -0,0 +1,5 @@
+foo
+bar
+foobar
+barfoo
+
diff --git a/chrome/third_party/hunspell/tests/needaffix2.morph b/chrome/third_party/hunspell/tests/needaffix2.morph
new file mode 100644
index 0000000..8a83b1a
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/needaffix2.morph
@@ -0,0 +1,9 @@
+> foo
+foo[1]
+foo[3]
+> bar
+bar[4]
+> foobar
+foo[3]bar[4]
+> barfoo
+bar[4]foo[3]
diff --git a/chrome/third_party/hunspell/tests/needaffix2.test b/chrome/third_party/hunspell/tests/needaffix2.test
new file mode 100644
index 0000000..7f44369
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/needaffix2.test
@@ -0,0 +1,4 @@
+#!/bin/sh
+DIR="`dirname $0`"
+NAME="`basename $0 .test`"
+$DIR/test.sh $NAME
diff --git a/chrome/third_party/hunspell/tests/needaffix3.aff b/chrome/third_party/hunspell/tests/needaffix3.aff
new file mode 100644
index 0000000..5d55d38
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/needaffix3.aff
@@ -0,0 +1,8 @@
+# neeadaffix on affixes
+NEEDAFFIX X
+
+SFX A Y 1
+SFX A 0 s/XB .
+
+SFX B Y 1
+SFX B 0 baz .
diff --git a/chrome/third_party/hunspell/tests/needaffix3.dic b/chrome/third_party/hunspell/tests/needaffix3.dic
new file mode 100644
index 0000000..001d95e
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/needaffix3.dic
@@ -0,0 +1,2 @@
+2
+foo/A
diff --git a/chrome/third_party/hunspell/tests/needaffix3.good b/chrome/third_party/hunspell/tests/needaffix3.good
new file mode 100644
index 0000000..dc9a6a97
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/needaffix3.good
@@ -0,0 +1,2 @@
+foo
+foosbaz
diff --git a/chrome/third_party/hunspell/tests/needaffix3.test b/chrome/third_party/hunspell/tests/needaffix3.test
new file mode 100644
index 0000000..7f44369
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/needaffix3.test
@@ -0,0 +1,4 @@
+#!/bin/sh
+DIR="`dirname $0`"
+NAME="`basename $0 .test`"
+$DIR/test.sh $NAME
diff --git a/chrome/third_party/hunspell/tests/needaffix3.wrong b/chrome/third_party/hunspell/tests/needaffix3.wrong
new file mode 100644
index 0000000..c09c408
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/needaffix3.wrong
@@ -0,0 +1 @@
+foos
diff --git a/chrome/third_party/hunspell/tests/needaffix4.aff b/chrome/third_party/hunspell/tests/needaffix4.aff
new file mode 100644
index 0000000..c434dac
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/needaffix4.aff
@@ -0,0 +1,2 @@
+NEEDAFFIX X
+COMPOUNDFLAG Y
diff --git a/chrome/third_party/hunspell/tests/needaffix4.dic b/chrome/third_party/hunspell/tests/needaffix4.dic
new file mode 100644
index 0000000..96f80c1
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/needaffix4.dic
@@ -0,0 +1,5 @@
+4
+foo/X [1]
+foo/Y [2]
+foo/YX [3]
+bar/Y [4]
diff --git a/chrome/third_party/hunspell/tests/needaffix4.good b/chrome/third_party/hunspell/tests/needaffix4.good
new file mode 100644
index 0000000..7e4b098
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/needaffix4.good
@@ -0,0 +1,5 @@
+foo
+bar
+foobar
+barfoo
+
diff --git a/chrome/third_party/hunspell/tests/needaffix4.test b/chrome/third_party/hunspell/tests/needaffix4.test
new file mode 100644
index 0000000..7f44369
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/needaffix4.test
@@ -0,0 +1,4 @@
+#!/bin/sh
+DIR="`dirname $0`"
+NAME="`basename $0 .test`"
+$DIR/test.sh $NAME
diff --git a/chrome/third_party/hunspell/tests/needaffix5.aff b/chrome/third_party/hunspell/tests/needaffix5.aff
new file mode 100644
index 0000000..6399a3e
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/needaffix5.aff
@@ -0,0 +1,13 @@
+# on affixes
+NEEDAFFIX X
+
+SFX A Y 2
+SFX A 0 suf/B .
+SFX A 0 pseudosuf/XB .
+
+SFX B Y 1
+SFX B 0 bar .
+
+PFX C Y 2
+PFX C 0 pre .
+PFX C 0 pseudopre/X .
diff --git a/chrome/third_party/hunspell/tests/needaffix5.dic b/chrome/third_party/hunspell/tests/needaffix5.dic
new file mode 100644
index 0000000..83131e2
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/needaffix5.dic
@@ -0,0 +1,2 @@
+1
+foo/AC
diff --git a/chrome/third_party/hunspell/tests/needaffix5.good b/chrome/third_party/hunspell/tests/needaffix5.good
new file mode 100644
index 0000000..d1b86bf
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/needaffix5.good
@@ -0,0 +1,11 @@
+foo
+prefoo
+foosuf
+prefoosuf
+foosufbar
+prefoosufbar
+pseudoprefoosuf
+pseudoprefoosufbar
+pseudoprefoopseudosufbar
+prefoopseudosuf
+prefoopseudosufbar
diff --git a/chrome/third_party/hunspell/tests/needaffix5.test b/chrome/third_party/hunspell/tests/needaffix5.test
new file mode 100644
index 0000000..7f44369
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/needaffix5.test
@@ -0,0 +1,4 @@
+#!/bin/sh
+DIR="`dirname $0`"
+NAME="`basename $0 .test`"
+$DIR/test.sh $NAME
diff --git a/chrome/third_party/hunspell/tests/needaffix5.wrong b/chrome/third_party/hunspell/tests/needaffix5.wrong
new file mode 100644
index 0000000..fdd1797
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/needaffix5.wrong
@@ -0,0 +1,3 @@
+pseudoprefoo
+foopseudosuf
+pseudoprefoopseudosuf
diff --git a/chrome/third_party/hunspell/tests/nosuggest.aff b/chrome/third_party/hunspell/tests/nosuggest.aff
new file mode 100644
index 0000000..c9361da
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/nosuggest.aff
@@ -0,0 +1,5 @@
+# don't suggest word with NOSUGGEST flag (for example vulgar or obscene words)
+# See OpenOffice.org Issue #55498
+# (nosuggest.sug is an empty file)
+NOSUGGEST A
+COMPOUNDFLAG B
diff --git a/chrome/third_party/hunspell/tests/nosuggest.dic b/chrome/third_party/hunspell/tests/nosuggest.dic
new file mode 100644
index 0000000..dc80c91
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/nosuggest.dic
@@ -0,0 +1,3 @@
+1
+foo/AB
+bar/B
diff --git a/chrome/third_party/hunspell/tests/nosuggest.good b/chrome/third_party/hunspell/tests/nosuggest.good
new file mode 100644
index 0000000..ad91a5e
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/nosuggest.good
@@ -0,0 +1,3 @@
+foo
+foobar
+barfoo
diff --git a/chrome/third_party/hunspell/tests/nosuggest.sug b/chrome/third_party/hunspell/tests/nosuggest.sug
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/nosuggest.sug
diff --git a/chrome/third_party/hunspell/tests/nosuggest.test b/chrome/third_party/hunspell/tests/nosuggest.test
new file mode 100644
index 0000000..7f44369
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/nosuggest.test
@@ -0,0 +1,4 @@
+#!/bin/sh
+DIR="`dirname $0`"
+NAME="`basename $0 .test`"
+$DIR/test.sh $NAME
diff --git a/chrome/third_party/hunspell/tests/nosuggest.wrong b/chrome/third_party/hunspell/tests/nosuggest.wrong
new file mode 100644
index 0000000..89c7a1a
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/nosuggest.wrong
@@ -0,0 +1,3 @@
+foox
+foobarx
+barfoox
diff --git a/chrome/third_party/hunspell/tests/onlyincompound.aff b/chrome/third_party/hunspell/tests/onlyincompound.aff
new file mode 100644
index 0000000..e700b0e
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/onlyincompound.aff
@@ -0,0 +1,5 @@
+# words only in compounds (see also fogemorpheme example)
+ONLYINCOMPOUND O
+COMPOUNDFLAG A
+SFX B Y 1
+SFX B 0 s .
diff --git a/chrome/third_party/hunspell/tests/onlyincompound.dic b/chrome/third_party/hunspell/tests/onlyincompound.dic
new file mode 100644
index 0000000..dc742f7
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/onlyincompound.dic
@@ -0,0 +1,3 @@
+2
+foo/A
+pseudo/OAB
diff --git a/chrome/third_party/hunspell/tests/onlyincompound.good b/chrome/third_party/hunspell/tests/onlyincompound.good
new file mode 100644
index 0000000..151d597
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/onlyincompound.good
@@ -0,0 +1,4 @@
+foo
+pseudofoo
+foopseudo
+foopseudos
diff --git a/chrome/third_party/hunspell/tests/onlyincompound.sug b/chrome/third_party/hunspell/tests/onlyincompound.sug
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/onlyincompound.sug
diff --git a/chrome/third_party/hunspell/tests/onlyincompound.test b/chrome/third_party/hunspell/tests/onlyincompound.test
new file mode 100644
index 0000000..7f44369
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/onlyincompound.test
@@ -0,0 +1,4 @@
+#!/bin/sh
+DIR="`dirname $0`"
+NAME="`basename $0 .test`"
+$DIR/test.sh $NAME
diff --git a/chrome/third_party/hunspell/tests/onlyincompound.wrong b/chrome/third_party/hunspell/tests/onlyincompound.wrong
new file mode 100644
index 0000000..115d0c6
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/onlyincompound.wrong
@@ -0,0 +1,2 @@
+pseudo
+pseudos
diff --git a/chrome/third_party/hunspell/tests/rep.aff b/chrome/third_party/hunspell/tests/rep.aff
new file mode 100644
index 0000000..f61aa34
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/rep.aff
@@ -0,0 +1,9 @@
+# With REP suggestions, we can fix typical language specific misspellings.
+
+# switch off ngram suggestion for testing
+MAXNGRAMSUGS 0
+
+REP 3
+REP f ph
+REP ph f
+REP shun tion
diff --git a/chrome/third_party/hunspell/tests/rep.dic b/chrome/third_party/hunspell/tests/rep.dic
new file mode 100644
index 0000000..ce904f9
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/rep.dic
@@ -0,0 +1,4 @@
+3
+form
+phantom
+vacation
diff --git a/chrome/third_party/hunspell/tests/rep.sug b/chrome/third_party/hunspell/tests/rep.sug
new file mode 100644
index 0000000..d1bd218
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/rep.sug
@@ -0,0 +1,3 @@
+form
+phantom
+vacation
diff --git a/chrome/third_party/hunspell/tests/rep.test b/chrome/third_party/hunspell/tests/rep.test
new file mode 100644
index 0000000..7f44369
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/rep.test
@@ -0,0 +1,4 @@
+#!/bin/sh
+DIR="`dirname $0`"
+NAME="`basename $0 .test`"
+$DIR/test.sh $NAME
diff --git a/chrome/third_party/hunspell/tests/rep.wrong b/chrome/third_party/hunspell/tests/rep.wrong
new file mode 100644
index 0000000..2b43ec5
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/rep.wrong
@@ -0,0 +1,3 @@
+phorm
+fantom
+vacashun
diff --git a/chrome/third_party/hunspell/tests/reputf.aff b/chrome/third_party/hunspell/tests/reputf.aff
new file mode 100644
index 0000000..ac434a4
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/reputf.aff
@@ -0,0 +1,9 @@
+# With REP suggestions, we can fix typical language specific misspellings.
+
+SET UTF-8
+
+# switch off ngram suggestion for testing
+MAXNGRAMSUGS 0
+
+REP 1
+REP oo őő
diff --git a/chrome/third_party/hunspell/tests/reputf.dic b/chrome/third_party/hunspell/tests/reputf.dic
new file mode 100644
index 0000000..1890fcb
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/reputf.dic
@@ -0,0 +1,2 @@
+1
+főő
diff --git a/chrome/third_party/hunspell/tests/reputf.sug b/chrome/third_party/hunspell/tests/reputf.sug
new file mode 100644
index 0000000..8a00bc3
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/reputf.sug
@@ -0,0 +1 @@
+főő
diff --git a/chrome/third_party/hunspell/tests/reputf.test b/chrome/third_party/hunspell/tests/reputf.test
new file mode 100644
index 0000000..7f44369
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/reputf.test
@@ -0,0 +1,4 @@
+#!/bin/sh
+DIR="`dirname $0`"
+NAME="`basename $0 .test`"
+$DIR/test.sh $NAME
diff --git a/chrome/third_party/hunspell/tests/reputf.wrong b/chrome/third_party/hunspell/tests/reputf.wrong
new file mode 100644
index 0000000..257cc56
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/reputf.wrong
@@ -0,0 +1 @@
+foo
diff --git a/chrome/third_party/hunspell/tests/slash.aff b/chrome/third_party/hunspell/tests/slash.aff
new file mode 100644
index 0000000..6ab104b
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/slash.aff
@@ -0,0 +1,4 @@
+# slashes in words (\/)
+
+# (only for tokenization)
+WORDCHARS /:
diff --git a/chrome/third_party/hunspell/tests/slash.dic b/chrome/third_party/hunspell/tests/slash.dic
new file mode 100644
index 0000000..478276df
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/slash.dic
@@ -0,0 +1,5 @@
+4
+/
+1\/2
+http:\/\/
+\/usr\/share\/myspell\/
diff --git a/chrome/third_party/hunspell/tests/slash.good b/chrome/third_party/hunspell/tests/slash.good
new file mode 100644
index 0000000..4a25e20
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/slash.good
@@ -0,0 +1,4 @@
+/
+1/2
+http://
+/usr/share/myspell/
diff --git a/chrome/third_party/hunspell/tests/slash.test b/chrome/third_party/hunspell/tests/slash.test
new file mode 100644
index 0000000..7f44369
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/slash.test
@@ -0,0 +1,4 @@
+#!/bin/sh
+DIR="`dirname $0`"
+NAME="`basename $0 .test`"
+$DIR/test.sh $NAME
diff --git a/chrome/third_party/hunspell/tests/sug.aff b/chrome/third_party/hunspell/tests/sug.aff
new file mode 100644
index 0000000..862dd66
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/sug.aff
@@ -0,0 +1,11 @@
+# new suggestion methods of Hunspell 1.5:
+# capitalization: nasa -> NASA
+# long swap: permenant -> permanent
+# long mov: Ghandi -> Gandhi
+# double two characters: vacacation -> vacation
+# space with REP: "alot" -> "a lot" ("a lot" need to be in the dic file.)
+
+# switch off ngram suggestion for testing
+MAXNGRAMSUGS 0
+REP 1
+REP alot a_lot
diff --git a/chrome/third_party/hunspell/tests/sug.dic b/chrome/third_party/hunspell/tests/sug.dic
new file mode 100644
index 0000000..026d45f
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/sug.dic
@@ -0,0 +1,7 @@
+7
+NASA
+Gandhi
+grateful
+permanent
+vacation
+a lot
diff --git a/chrome/third_party/hunspell/tests/sug.sug b/chrome/third_party/hunspell/tests/sug.sug
new file mode 100644
index 0000000..93ec665
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/sug.sug
@@ -0,0 +1,6 @@
+NASA
+Gandhi
+grateful
+permanent
+vacation
+a lot
diff --git a/chrome/third_party/hunspell/tests/sug.test b/chrome/third_party/hunspell/tests/sug.test
new file mode 100644
index 0000000..7f44369
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/sug.test
@@ -0,0 +1,4 @@
+#!/bin/sh
+DIR="`dirname $0`"
+NAME="`basename $0 .test`"
+$DIR/test.sh $NAME
diff --git a/chrome/third_party/hunspell/tests/sug.wrong b/chrome/third_party/hunspell/tests/sug.wrong
new file mode 100644
index 0000000..17acbec
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/sug.wrong
@@ -0,0 +1,6 @@
+nasa
+Ghandi
+greatful
+permenant
+vacacation
+alot
diff --git a/chrome/third_party/hunspell/tests/test.sh b/chrome/third_party/hunspell/tests/test.sh
new file mode 100755
index 0000000..4ef98b8
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/test.sh
@@ -0,0 +1,110 @@
+#!/bin/bash
+export LC_ALL="C"
+
+function check_valgrind_log () {
+if [ "$VALGRIND" != "" ]; then
+ if [ -f $TEMPDIR/test.pid* ]; then
+ log=`ls $TEMPDIR/test.pid*`
+ if ! grep -q 'ERROR SUMMARY: 0 error' $log; then
+ echo "Fail in $NAME $1 checking detected by Valgrind"
+ echo "$log Valgrind log file moved to $TEMPDIR/badlogs"
+ mv $log $TEMPDIR/badlogs
+ exit 1
+ fi
+ if grep -q 'LEAK SUMMARY' $log; then
+ echo "Memory leak in $NAME $1 checking detected by Valgrind"
+ echo "$log Valgrind log file moved to $TEMPDIR/badlogs"
+ mv $log $TEMPDIR/badlogs
+ exit 1
+ fi
+ rm -f $log
+ fi
+fi
+}
+
+TESTDIR=.
+TEMPDIR=$TESTDIR/testSubDir
+NAME="$1"
+shift
+
+if [ ! -d $TEMPDIR ]; then
+ mkdir $TEMPDIR
+fi
+
+shopt -s expand_aliases
+
+alias hunspell='../src/tools/hunspell'
+alias hunmorph='../src/tools/hunmorph'
+
+if [ "$VALGRIND" != "" ]; then
+ rm -f $TEMPDIR/test.pid*
+ if [ ! -d $TEMPDIR/badlogs ]; then
+ mkdir $TEMPDIR/badlogs
+ fi
+ alias hunspell='valgrind --tool=$VALGRIND --leak-check=yes --show-reachable=yes --log-file=$TEMPDIR/test ../src/tools/hunspell'
+ alias hunmorph='valgrind --tool=$VALGRIND --leak-check=yes --show-reachable=yes --log-file=$TEMPDIR/test ../src/tools/hunmorph'
+fi
+
+# Tests good words
+if test -f $TESTDIR/$NAME.good; then
+ hunspell -l $* -d $TESTDIR/$NAME <$TESTDIR/$NAME.good >$TEMPDIR/$NAME.good
+ if test -s $TEMPDIR/$NAME.good; then
+ echo "============================================="
+ echo "Fail in $NAME.good. Good words recognised as wrong:"
+ cat $TEMPDIR/$NAME.good
+ rm -f $TEMPDIR/$NAME.good
+ exit 1
+ fi
+ rm -f $TEMPDIR/$NAME.good
+fi
+
+check_valgrind_log "good words"
+
+# Tests bad words
+if test -f $TESTDIR/$NAME.wrong; then
+ hunspell -l $* -d $TESTDIR/$NAME <$TESTDIR/$NAME.wrong >$TEMPDIR/$NAME.wrong
+ tr -d ' ' <$TESTDIR/$NAME.wrong >$TEMPDIR/$NAME.wrong.detab
+ if ! cmp $TEMPDIR/$NAME.wrong $TEMPDIR/$NAME.wrong.detab >/dev/null; then
+ echo "============================================="
+ echo "Fail in $NAME.wrong. Bad words recognised as good:"
+ tr -d ' ' <$TESTDIR/$NAME.wrong >$TEMPDIR/$NAME.wrong.detab
+ diff $TEMPDIR/$NAME.wrong.detab $TEMPDIR/$NAME.wrong | grep '^<' | sed 's/^..//'
+ rm -f $TEMPDIR/$NAME.wrong $TEMPDIR/$NAME.wrong.detab
+ exit 1
+ fi
+ rm -f $TEMPDIR/$NAME.wrong $TEMPDIR/$NAME.wrong.detab
+fi
+
+check_valgrind_log "bad words"
+
+# Tests morphological analysis
+if test -f $TESTDIR/$NAME.morph -a -f hunmorph; then
+ sed 's/ $//' $TESTDIR/$NAME.good >$TEMPDIR/$NAME.good
+ hunmorph $TESTDIR/$NAME.aff $TESTDIR/$NAME.dic $TEMPDIR/$NAME.good >$TEMPDIR/$NAME.morph
+ if ! cmp $TEMPDIR/$NAME.morph $TESTDIR/$NAME.morph >/dev/null; then
+ echo "============================================="
+ echo "Fail in $NAME.morph. Bad analysis?"
+ diff $TESTDIR/$NAME.morph $TEMPDIR/$NAME.morph | grep '^<' | sed 's/^..//'
+ rm -f $TEMPDIR/$NAME.morph
+ exit 1
+ fi
+ rm -f $TEMPDIR/$NAME.{morph,good}
+fi
+
+check_valgrind_log "morphological analysis"
+
+# Tests suggestions
+if test -f $TESTDIR/$NAME.sug; then
+ hunspell -d $TESTDIR/$NAME <$TESTDIR/$NAME.wrong | tail +2 | grep '^&' | \
+ sed 's/^[^:]*: //' >$TEMPDIR/$NAME.sug
+ if ! cmp $TEMPDIR/$NAME.sug $TESTDIR/$NAME.sug >/dev/null; then
+ echo "============================================="
+ echo "Fail in $NAME.sug. Bad suggestion?"
+ diff $TESTDIR/$NAME.sug $TEMPDIR/$NAME.sug
+ rm -f $TEMPDIR/$NAME.sug
+ exit 1
+ fi
+ rm -f $TEMPDIR/$NAME.sug
+fi
+
+check_valgrind_log "suggestion"
diff --git a/chrome/third_party/hunspell/tests/utf8.aff b/chrome/third_party/hunspell/tests/utf8.aff
new file mode 100644
index 0000000..e8934d7
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/utf8.aff
@@ -0,0 +1,10 @@
+SET UTF-8
+
+SFX A Y 7
+SFX A 0 őő .
+SFX A 0 ő o
+SFX A 0 ő ó
+SFX A ó ő ó
+SFX A ó őoo ó
+SFX A o őo o
+SFX A 0 ó [abcdó]
diff --git a/chrome/third_party/hunspell/tests/utf8.dic b/chrome/third_party/hunspell/tests/utf8.dic
new file mode 100644
index 0000000..e7cb34d
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/utf8.dic
@@ -0,0 +1,3 @@
+2
+foo/A
+foó/A
diff --git a/chrome/third_party/hunspell/tests/utf8.good b/chrome/third_party/hunspell/tests/utf8.good
new file mode 100644
index 0000000..08aa4da
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/utf8.good
@@ -0,0 +1,9 @@
+foo
+foó
+fooőő
+fooő
+foóő
+foő
+foőo
+foőoo
+foóó
diff --git a/chrome/third_party/hunspell/tests/utf8.test b/chrome/third_party/hunspell/tests/utf8.test
new file mode 100644
index 0000000..7f44369
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/utf8.test
@@ -0,0 +1,4 @@
+#!/bin/sh
+DIR="`dirname $0`"
+NAME="`basename $0 .test`"
+$DIR/test.sh $NAME
diff --git a/chrome/third_party/hunspell/tests/utf8_bom.aff b/chrome/third_party/hunspell/tests/utf8_bom.aff
new file mode 100644
index 0000000..f56998b
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/utf8_bom.aff
@@ -0,0 +1,3 @@
+SET UTF-8
+
+# removing byte order mark from affix file
diff --git a/chrome/third_party/hunspell/tests/utf8_bom.dic b/chrome/third_party/hunspell/tests/utf8_bom.dic
new file mode 100644
index 0000000..8b10768
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/utf8_bom.dic
@@ -0,0 +1,2 @@
+1
+apéritif
diff --git a/chrome/third_party/hunspell/tests/utf8_bom.good b/chrome/third_party/hunspell/tests/utf8_bom.good
new file mode 100644
index 0000000..c344eaf
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/utf8_bom.good
@@ -0,0 +1,2 @@
+apéritif
+APÉRITIF
diff --git a/chrome/third_party/hunspell/tests/utf8_bom.test b/chrome/third_party/hunspell/tests/utf8_bom.test
new file mode 100644
index 0000000..4d9d1a8
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/utf8_bom.test
@@ -0,0 +1,4 @@
+#!/bin/sh
+DIR="`dirname $0`"
+NAME="`basename $0 .test`"
+$DIR/test.sh $NAME -1
diff --git a/chrome/third_party/hunspell/tests/utf8_bom2.aff b/chrome/third_party/hunspell/tests/utf8_bom2.aff
new file mode 100644
index 0000000..784935c
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/utf8_bom2.aff
@@ -0,0 +1,3 @@
+SET UTF-8
+
+# removing byte order mark from dic file
diff --git a/chrome/third_party/hunspell/tests/utf8_bom2.dic b/chrome/third_party/hunspell/tests/utf8_bom2.dic
new file mode 100644
index 0000000..b763179
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/utf8_bom2.dic
@@ -0,0 +1,2 @@
+1
+apéritif
diff --git a/chrome/third_party/hunspell/tests/utf8_bom2.good b/chrome/third_party/hunspell/tests/utf8_bom2.good
new file mode 100644
index 0000000..c344eaf
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/utf8_bom2.good
@@ -0,0 +1,2 @@
+apéritif
+APÉRITIF
diff --git a/chrome/third_party/hunspell/tests/utf8_bom2.test b/chrome/third_party/hunspell/tests/utf8_bom2.test
new file mode 100644
index 0000000..4d9d1a8
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/utf8_bom2.test
@@ -0,0 +1,4 @@
+#!/bin/sh
+DIR="`dirname $0`"
+NAME="`basename $0 .test`"
+$DIR/test.sh $NAME -1
diff --git a/chrome/third_party/hunspell/tests/utf8_nonbmp.aff b/chrome/third_party/hunspell/tests/utf8_nonbmp.aff
new file mode 100644
index 0000000..979e3c2
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/utf8_nonbmp.aff
@@ -0,0 +1 @@
+SET UTF-8
diff --git a/chrome/third_party/hunspell/tests/utf8_nonbmp.dic b/chrome/third_party/hunspell/tests/utf8_nonbmp.dic
new file mode 100644
index 0000000..4a040ee
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/utf8_nonbmp.dic
@@ -0,0 +1,5 @@
+4 # Old Persian numbers (1-4), source: Wikipedia
+𐏑
+𐏒
+𐏒𐏑
+𐏒𐏒
diff --git a/chrome/third_party/hunspell/tests/utf8_nonbmp.good b/chrome/third_party/hunspell/tests/utf8_nonbmp.good
new file mode 100644
index 0000000..9f989d3
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/utf8_nonbmp.good
@@ -0,0 +1,5 @@
+𐏑
+𐏒
+𐏒𐏑
+𐏒𐏒
+
diff --git a/chrome/third_party/hunspell/tests/utf8_nonbmp.test b/chrome/third_party/hunspell/tests/utf8_nonbmp.test
new file mode 100644
index 0000000..4d9d1a8
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/utf8_nonbmp.test
@@ -0,0 +1,4 @@
+#!/bin/sh
+DIR="`dirname $0`"
+NAME="`basename $0 .test`"
+$DIR/test.sh $NAME -1
diff --git a/chrome/third_party/hunspell/tests/utf8_nonbmp.wrong b/chrome/third_party/hunspell/tests/utf8_nonbmp.wrong
new file mode 100644
index 0000000..d18dfa4
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/utf8_nonbmp.wrong
@@ -0,0 +1,2 @@
+𐏑𐏒𐏒
+𐏑𐏒𐏒
diff --git a/chrome/third_party/hunspell/tests/utfcompound.aff b/chrome/third_party/hunspell/tests/utfcompound.aff
new file mode 100644
index 0000000..43506af
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/utfcompound.aff
@@ -0,0 +1,3 @@
+SET UTF-8
+COMPOUNDMIN 3
+COMPOUNDFLAG A
diff --git a/chrome/third_party/hunspell/tests/utfcompound.dic b/chrome/third_party/hunspell/tests/utfcompound.dic
new file mode 100644
index 0000000..ab90a1b
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/utfcompound.dic
@@ -0,0 +1,9 @@
+8
+foo/A
+bar/A
+fóó/A
+áár/A
+xy/A
+yz/A
+éé/A
+őő/A
diff --git a/chrome/third_party/hunspell/tests/utfcompound.good b/chrome/third_party/hunspell/tests/utfcompound.good
new file mode 100644
index 0000000..1a1a1b1
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/utfcompound.good
@@ -0,0 +1,5 @@
+foobar
+barfoo
+foobarfoo
+fóóáár
+áárfóó
diff --git a/chrome/third_party/hunspell/tests/utfcompound.test b/chrome/third_party/hunspell/tests/utfcompound.test
new file mode 100644
index 0000000..7f44369
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/utfcompound.test
@@ -0,0 +1,4 @@
+#!/bin/sh
+DIR="`dirname $0`"
+NAME="`basename $0 .test`"
+$DIR/test.sh $NAME
diff --git a/chrome/third_party/hunspell/tests/utfcompound.wrong b/chrome/third_party/hunspell/tests/utfcompound.wrong
new file mode 100644
index 0000000..fa385c1
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/utfcompound.wrong
@@ -0,0 +1,7 @@
+xyyz
+fooxy
+xyfoo
+fooxybar
+ééőő
+fóóéé
+őőáár
diff --git a/chrome/third_party/hunspell/tests/zeroaffix.aff b/chrome/third_party/hunspell/tests/zeroaffix.aff
new file mode 100644
index 0000000..fdb047b
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/zeroaffix.aff
@@ -0,0 +1,12 @@
+PSEUDOROOT X
+COMPOUNDFLAG Y
+
+SFX A Y 1
+SFX A 0 0 . >
+
+SFX B Y 1
+SFX B 0 0 . <ZERO>>
+
+SFX C Y 2
+SFX C 0 0/XAB . <ZERODERIV>
+SFX C 0 baz/XAB . <DERIV>
diff --git a/chrome/third_party/hunspell/tests/zeroaffix.dic b/chrome/third_party/hunspell/tests/zeroaffix.dic
new file mode 100644
index 0000000..72cba8d
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/zeroaffix.dic
@@ -0,0 +1,3 @@
+2
+foo/XA <FOO
+bar/XABC <BAR
diff --git a/chrome/third_party/hunspell/tests/zeroaffix.good b/chrome/third_party/hunspell/tests/zeroaffix.good
new file mode 100644
index 0000000..b1fb3ba
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/zeroaffix.good
@@ -0,0 +1,3 @@
+bar
+foo
+barbaz
diff --git a/chrome/third_party/hunspell/tests/zeroaffix.morph b/chrome/third_party/hunspell/tests/zeroaffix.morph
new file mode 100644
index 0000000..19a5927
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/zeroaffix.morph
@@ -0,0 +1,10 @@
+> bar
+bar<BAR<ZERO>>
+bar<BAR>
+bar<BAR<ZERODERIV><ZERO>>
+bar<BAR<ZERODERIV>>
+> foo
+foo<FOO>
+> barbaz
+bar<BAR<DERIV><ZERO>>
+bar<BAR<DERIV>>
diff --git a/chrome/third_party/hunspell/tests/zeroaffix.test b/chrome/third_party/hunspell/tests/zeroaffix.test
new file mode 100644
index 0000000..7f44369
--- /dev/null
+++ b/chrome/third_party/hunspell/tests/zeroaffix.test
@@ -0,0 +1,4 @@
+#!/bin/sh
+DIR="`dirname $0`"
+NAME="`basename $0 .test`"
+$DIR/test.sh $NAME
diff --git a/chrome/third_party/hunspell/using_hunspell.vsprops b/chrome/third_party/hunspell/using_hunspell.vsprops
new file mode 100644
index 0000000..d940714
--- /dev/null
+++ b/chrome/third_party/hunspell/using_hunspell.vsprops
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioPropertySheet
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="using_hunspell"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="&quot;$(SolutionDir)third_party\hunspell\src\hunspell&quot;"
+ PreprocessorDefinitions="USE_HUNSPELL;HUNSPELL_CHROME_CLIENT"
+ />
+</VisualStudioPropertySheet>